OPTION	DOTNAME
PUBLIC	ct_inverse_mod_383$1
.text$	SEGMENT ALIGN(256) 'CODE'

PUBLIC	ctx_inverse_mod_383


ALIGN	32
ctx_inverse_mod_383	PROC PUBLIC
	DB	243,15,30,250
	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
	mov	QWORD PTR[16+rsp],rsi
	mov	r11,rsp
$L$SEH_begin_ctx_inverse_mod_383::


	mov	rdi,rcx
	mov	rsi,rdx
	mov	rdx,r8
	mov	rcx,r9
ct_inverse_mod_383$1::
	push	rbp

	push	rbx

	push	r12

	push	r13

	push	r14

	push	r15

	sub	rsp,1112

$L$SEH_body_ctx_inverse_mod_383::


	lea	rax,QWORD PTR[((88+511))+rsp]
	and	rax,-512
	mov	QWORD PTR[32+rsp],rdi
	mov	QWORD PTR[40+rsp],rcx

ifdef	__SGX_LVI_HARDENING__
	lfence
endif
	mov	r8,QWORD PTR[rsi]
	mov	r9,QWORD PTR[8+rsi]
	mov	r10,QWORD PTR[16+rsi]
	mov	r11,QWORD PTR[24+rsi]
	mov	r12,QWORD PTR[32+rsi]
	mov	r13,QWORD PTR[40+rsi]

	mov	r14,QWORD PTR[rdx]
	mov	r15,QWORD PTR[8+rdx]
	mov	rbx,QWORD PTR[16+rdx]
	mov	rbp,QWORD PTR[24+rdx]
	mov	rsi,QWORD PTR[32+rdx]
	mov	rdi,QWORD PTR[40+rdx]

	mov	QWORD PTR[rax],r8
	mov	QWORD PTR[8+rax],r9
	mov	QWORD PTR[16+rax],r10
	mov	QWORD PTR[24+rax],r11
	mov	QWORD PTR[32+rax],r12
	mov	QWORD PTR[40+rax],r13

	mov	QWORD PTR[48+rax],r14
	mov	QWORD PTR[56+rax],r15
	mov	QWORD PTR[64+rax],rbx
	mov	QWORD PTR[72+rax],rbp
	mov	QWORD PTR[80+rax],rsi
	mov	rsi,rax
	mov	QWORD PTR[88+rax],rdi


	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31


	mov	QWORD PTR[96+rdi],rdx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31


	mov	QWORD PTR[96+rdi],rdx


	xor	rsi,256
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31



	mov	rax,QWORD PTR[96+rsi]
	mov	r11,QWORD PTR[144+rsi]
	mov	rbx,rdx
	mov	r10,rax
	imul	QWORD PTR[56+rsp]
	mov	r8,rax
	mov	rax,r11
	mov	r9,rdx
	imul	QWORD PTR[64+rsp]
	add	r8,rax
	adc	r9,rdx
	mov	QWORD PTR[48+rdi],r8
	mov	QWORD PTR[56+rdi],r9
	sar	r9,63
	mov	QWORD PTR[64+rdi],r9
	mov	QWORD PTR[72+rdi],r9
	mov	QWORD PTR[80+rdi],r9
	mov	QWORD PTR[88+rdi],r9
	lea	rsi,QWORD PTR[96+rsi]

	mov	rax,r10
	imul	rbx
	mov	r8,rax
	mov	rax,r11
	mov	r9,rdx
	imul	rcx
	add	r8,rax
	adc	r9,rdx
	mov	QWORD PTR[96+rdi],r8
	mov	QWORD PTR[104+rdi],r9
	sar	r9,63
	mov	QWORD PTR[112+rdi],r9
	mov	QWORD PTR[120+rdi],r9
	mov	QWORD PTR[128+rdi],r9
	mov	QWORD PTR[136+rdi],r9
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63
	sar	r13,63
	mov	QWORD PTR[48+rdi],r13
	mov	QWORD PTR[56+rdi],r13
	mov	QWORD PTR[64+rdi],r13
	mov	QWORD PTR[72+rdi],r13
	mov	QWORD PTR[80+rdi],r13
	mov	QWORD PTR[88+rdi],r13
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_191_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_191_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_191_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_191_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_191_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_191_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63
	xor	rsi,256+8*12
	mov	edi,31
	call	__ab_approximation_31


	mov	QWORD PTR[72+rsp],r12
	mov	QWORD PTR[80+rsp],r13

	mov	rdi,256
	xor	rdi,rsi
	call	__smulx_191_n_shift_by_31
	mov	QWORD PTR[56+rsp],rdx
	mov	QWORD PTR[64+rsp],rcx

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_191_n_shift_by_31
	mov	QWORD PTR[72+rsp],rdx
	mov	QWORD PTR[80+rsp],rcx

	mov	rdx,QWORD PTR[56+rsp]
	mov	rcx,QWORD PTR[64+rsp]
	lea	rsi,QWORD PTR[96+rsi]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_383x63

	mov	rdx,QWORD PTR[72+rsp]
	mov	rcx,QWORD PTR[80+rsp]
	lea	rdi,QWORD PTR[48+rdi]
	call	__smulx_767x63

	xor	rsi,256+8*12
	mov	edi,53

	mov	r8,QWORD PTR[rsi]

	mov	r10,QWORD PTR[48+rsi]

	call	__tail_loop_53







	lea	rsi,QWORD PTR[96+rsi]





	mov	rdx,r12
	mov	rcx,r13
	mov	rdi,QWORD PTR[32+rsp]
	call	__smulx_767x63

	mov	rsi,QWORD PTR[40+rsp]
	mov	rdx,rax
	sar	rax,63

	mov	r8,rax
	mov	r9,rax
	mov	r10,rax
ifdef	__SGX_LVI_HARDENING__
	lfence
endif
	and	r8,QWORD PTR[rsi]
	and	r9,QWORD PTR[8+rsi]
	mov	r11,rax
	and	r10,QWORD PTR[16+rsi]
	and	r11,QWORD PTR[24+rsi]
	mov	r12,rax
	and	r12,QWORD PTR[32+rsi]
	and	rax,QWORD PTR[40+rsi]

	add	r14,r8
	adc	r15,r9
	adc	rbx,r10
	adc	rbp,r11
	adc	rcx,r12
	adc	rdx,rax

	mov	QWORD PTR[48+rdi],r14
	mov	QWORD PTR[56+rdi],r15
	mov	QWORD PTR[64+rdi],rbx
	mov	QWORD PTR[72+rdi],rbp
	mov	QWORD PTR[80+rdi],rcx
	mov	QWORD PTR[88+rdi],rdx

	lea	r8,QWORD PTR[1112+rsp]
	mov	r15,QWORD PTR[r8]

	mov	r14,QWORD PTR[8+r8]

	mov	r13,QWORD PTR[16+r8]

	mov	r12,QWORD PTR[24+r8]

	mov	rbx,QWORD PTR[32+r8]

	mov	rbp,QWORD PTR[40+r8]

	lea	rsp,QWORD PTR[48+r8]

$L$SEH_epilogue_ctx_inverse_mod_383::
	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
	mov	rsi,QWORD PTR[16+rsp]

	
ifdef	__SGX_LVI_HARDENING__
	pop	rdx
	lfence
	jmp	rdx
	ud2
else
	DB	0F3h,0C3h
endif

$L$SEH_end_ctx_inverse_mod_383::
ctx_inverse_mod_383	ENDP

ALIGN	32
__smulx_767x63	PROC PRIVATE
	DB	243,15,30,250

	mov	r8,QWORD PTR[rsi]
	mov	r9,QWORD PTR[8+rsi]
	mov	r10,QWORD PTR[16+rsi]
	mov	r11,QWORD PTR[24+rsi]
	mov	r12,QWORD PTR[32+rsi]
	mov	r13,QWORD PTR[40+rsi]

	mov	rax,rdx
	sar	rax,63
	xor	rbp,rbp
	sub	rbp,rax

	mov	QWORD PTR[8+rsp],rdi
	mov	QWORD PTR[16+rsp],rsi
	lea	rsi,QWORD PTR[48+rsi]

	xor	rdx,rax
	add	rdx,rbp

	xor	r8,rax
	xor	r9,rax
	xor	r10,rax
	xor	r11,rax
	xor	r12,rax
	xor	rax,r13
	add	r8,rbp
	adc	r9,0
	adc	r10,0
	adc	r11,0
	adc	r12,0
	adc	rax,0

	mulx	rbp,r8,r8
	mulx	r13,r9,r9
	add	r9,rbp
	mulx	rbp,r10,r10
	adc	r10,r13
	mulx	r13,r11,r11
	adc	r11,rbp
	mulx	rbp,r12,r12
	adc	r12,r13
	adc	rbp,0
	imul	rdx
	add	rax,rbp
	adc	rdx,0

	mov	QWORD PTR[rdi],r8
	mov	QWORD PTR[8+rdi],r9
	mov	QWORD PTR[16+rdi],r10
	mov	QWORD PTR[24+rdi],r11
	mov	QWORD PTR[32+rdi],r12
	mov	QWORD PTR[40+rdi],rax
	mov	QWORD PTR[48+rdi],rdx
	sar	rdx,63
	mov	QWORD PTR[56+rdi],rdx
	mov	rdx,rcx
	mov	rax,rcx

	mov	r8,QWORD PTR[rsi]
	mov	r9,QWORD PTR[8+rsi]
	mov	r10,QWORD PTR[16+rsi]
	mov	r11,QWORD PTR[24+rsi]
	mov	r12,QWORD PTR[32+rsi]
	mov	r13,QWORD PTR[40+rsi]
	mov	r14,QWORD PTR[48+rsi]
	mov	r15,QWORD PTR[56+rsi]
	mov	rbx,QWORD PTR[64+rsi]
	mov	rbp,QWORD PTR[72+rsi]
	mov	rcx,QWORD PTR[80+rsi]
	mov	rdi,QWORD PTR[88+rsi]

	sar	rax,63
	xor	rsi,rsi
	sub	rsi,rax

	xor	rdx,rax
	add	rdx,rsi

	xor	r8,rax
	xor	r9,rax
	xor	r10,rax
	xor	r11,rax
	xor	r12,rax
	xor	r13,rax
	xor	r14,rax
	xor	r15,rax
	xor	rbx,rax
	xor	rbp,rax
	xor	rcx,rax
	xor	rdi,rax
	add	r8,rsi
	adc	r9,0
	adc	r10,0
	adc	r11,0
	adc	r12,0
	adc	r13,0
	adc	r14,0
	adc	r15,0
	adc	rbx,0
	adc	rbp,0
	adc	rcx,0
	adc	rdi,0

	mulx	rax,r8,r8
	mulx	rsi,r9,r9
	add	r9,rax
	mulx	rax,r10,r10
	adc	r10,rsi
	mulx	rsi,r11,r11
	adc	r11,rax
	mulx	rax,r12,r12
	adc	r12,rsi
	mulx	rsi,r13,r13
	adc	r13,rax
	mulx	rax,r14,r14
	adc	r14,rsi
	mulx	rsi,r15,r15
	adc	r15,rax
	mulx	rax,rbx,rbx
	adc	rbx,rsi
	mulx	rsi,rbp,rbp
	adc	rbp,rax
	mulx	rax,rcx,rcx
	adc	rcx,rsi
	mulx	rsi,rdi,rdi
	mov	rdx,QWORD PTR[8+rsp]
	mov	rsi,QWORD PTR[16+rsp]
	adc	rax,rdi

	add	r8,QWORD PTR[rdx]
	adc	r9,QWORD PTR[8+rdx]
	adc	r10,QWORD PTR[16+rdx]
	adc	r11,QWORD PTR[24+rdx]
	adc	r12,QWORD PTR[32+rdx]
	adc	r13,QWORD PTR[40+rdx]
	adc	r14,QWORD PTR[48+rdx]
	mov	rdi,QWORD PTR[56+rdx]
	adc	r15,rdi
	adc	rbx,rdi
	adc	rbp,rdi
	adc	rcx,rdi
	adc	rax,rdi

	mov	rdi,rdx

	mov	QWORD PTR[rdx],r8
	mov	QWORD PTR[8+rdx],r9
	mov	QWORD PTR[16+rdx],r10
	mov	QWORD PTR[24+rdx],r11
	mov	QWORD PTR[32+rdx],r12
	mov	QWORD PTR[40+rdx],r13
	mov	QWORD PTR[48+rdx],r14
	mov	QWORD PTR[56+rdx],r15
	mov	QWORD PTR[64+rdx],rbx
	mov	QWORD PTR[72+rdx],rbp
	mov	QWORD PTR[80+rdx],rcx
	mov	QWORD PTR[88+rdx],rax

	
ifdef	__SGX_LVI_HARDENING__
	pop	r8
	lfence
	jmp	r8
	ud2
else
	DB	0F3h,0C3h
endif
__smulx_767x63	ENDP

ALIGN	32
__smulx_383x63	PROC PRIVATE
	DB	243,15,30,250

	mov	r8,QWORD PTR[((0+0))+rsi]
	mov	r9,QWORD PTR[((0+8))+rsi]
	mov	r10,QWORD PTR[((0+16))+rsi]
	mov	r11,QWORD PTR[((0+24))+rsi]
	mov	r12,QWORD PTR[((0+32))+rsi]
	mov	r13,QWORD PTR[((0+40))+rsi]

	mov	rbp,rdx
	sar	rbp,63
	xor	rax,rax
	sub	rax,rbp

	xor	rdx,rbp
	add	rdx,rax

	xor	r8,rbp
	xor	r9,rbp
	xor	r10,rbp
	xor	r11,rbp
	xor	r12,rbp
	xor	r13,rbp
	add	r8,rax
	adc	r9,0
	adc	r10,0
	adc	r11,0
	adc	r12,0
	adc	r13,0

	mulx	rbp,r8,r8
	mulx	rax,r9,r9
	add	r9,rbp
	mulx	rbp,r10,r10
	adc	r10,rax
	mulx	rax,r11,r11
	adc	r11,rbp
	mulx	rbp,r12,r12
	adc	r12,rax
	mulx	rax,r13,r13
	mov	rdx,rcx
	adc	r13,rbp

	mov	QWORD PTR[rdi],r8
	mov	QWORD PTR[8+rdi],r9
	mov	QWORD PTR[16+rdi],r10
	mov	QWORD PTR[24+rdi],r11
	mov	QWORD PTR[32+rdi],r12
	mov	QWORD PTR[40+rdi],r13
	mov	r8,QWORD PTR[((48+0))+rsi]
	mov	r9,QWORD PTR[((48+8))+rsi]
	mov	r10,QWORD PTR[((48+16))+rsi]
	mov	r11,QWORD PTR[((48+24))+rsi]
	mov	r12,QWORD PTR[((48+32))+rsi]
	mov	r13,QWORD PTR[((48+40))+rsi]

	mov	rbp,rdx
	sar	rbp,63
	xor	rax,rax
	sub	rax,rbp

	xor	rdx,rbp
	add	rdx,rax

	xor	r8,rbp
	xor	r9,rbp
	xor	r10,rbp
	xor	r11,rbp
	xor	r12,rbp
	xor	r13,rbp
	add	r8,rax
	adc	r9,0
	adc	r10,0
	adc	r11,0
	adc	r12,0
	adc	r13,0

	mulx	rbp,r8,r8
	mulx	rax,r9,r9
	add	r9,rbp
	mulx	rbp,r10,r10
	adc	r10,rax
	mulx	rax,r11,r11
	adc	r11,rbp
	mulx	rbp,r12,r12
	adc	r12,rax
	mulx	rax,r13,r13
	adc	r13,rbp

	add	r8,QWORD PTR[rdi]
	adc	r9,QWORD PTR[8+rdi]
	adc	r10,QWORD PTR[16+rdi]
	adc	r11,QWORD PTR[24+rdi]
	adc	r12,QWORD PTR[32+rdi]
	adc	r13,QWORD PTR[40+rdi]

	mov	QWORD PTR[rdi],r8
	mov	QWORD PTR[8+rdi],r9
	mov	QWORD PTR[16+rdi],r10
	mov	QWORD PTR[24+rdi],r11
	mov	QWORD PTR[32+rdi],r12
	mov	QWORD PTR[40+rdi],r13

	
ifdef	__SGX_LVI_HARDENING__
	pop	r8
	lfence
	jmp	r8
	ud2
else
	DB	0F3h,0C3h
endif
__smulx_383x63	ENDP

ALIGN	32
__smulx_383_n_shift_by_31	PROC PRIVATE
	DB	243,15,30,250

	mov	rbx,rdx
	xor	r14,r14
	mov	r8,QWORD PTR[((0+0))+rsi]
	mov	r9,QWORD PTR[((0+8))+rsi]
	mov	r10,QWORD PTR[((0+16))+rsi]
	mov	r11,QWORD PTR[((0+24))+rsi]
	mov	r12,QWORD PTR[((0+32))+rsi]
	mov	r13,QWORD PTR[((0+40))+rsi]

	mov	rax,rdx
	sar	rax,63
	xor	rbp,rbp
	sub	rbp,rax

	xor	rdx,rax
	add	rdx,rbp

	xor	r8,rax
	xor	r9,rax
	xor	r10,rax
	xor	r11,rax
	xor	r12,rax
	xor	rax,r13
	add	r8,rbp
	adc	r9,0
	adc	r10,0
	adc	r11,0
	adc	r12,0
	adc	rax,0

	mulx	rbp,r8,r8
	mulx	r13,r9,r9
	add	r9,rbp
	mulx	rbp,r10,r10
	adc	r10,r13
	mulx	r13,r11,r11
	adc	r11,rbp
	mulx	rbp,r12,r12
	adc	r12,r13
	adc	rbp,0
	imul	rdx
	add	rax,rbp
	adc	r14,rdx

	mov	rdx,rcx

	mov	QWORD PTR[rdi],r8
	mov	QWORD PTR[8+rdi],r9
	mov	QWORD PTR[16+rdi],r10
	mov	QWORD PTR[24+rdi],r11
	mov	QWORD PTR[32+rdi],r12
	mov	QWORD PTR[40+rdi],rax
	mov	r8,QWORD PTR[((48+0))+rsi]
	mov	r9,QWORD PTR[((48+8))+rsi]
	mov	r10,QWORD PTR[((48+16))+rsi]
	mov	r11,QWORD PTR[((48+24))+rsi]
	mov	r12,QWORD PTR[((48+32))+rsi]
	mov	r13,QWORD PTR[((48+40))+rsi]

	mov	rax,rdx
	sar	rax,63
	xor	rbp,rbp
	sub	rbp,rax

	xor	rdx,rax
	add	rdx,rbp

	xor	r8,rax
	xor	r9,rax
	xor	r10,rax
	xor	r11,rax
	xor	r12,rax
	xor	rax,r13
	add	r8,rbp
	adc	r9,0
	adc	r10,0
	adc	r11,0
	adc	r12,0
	adc	rax,0

	mulx	rbp,r8,r8
	mulx	r13,r9,r9
	add	r9,rbp
	mulx	rbp,r10,r10
	adc	r10,r13
	mulx	r13,r11,r11
	adc	r11,rbp
	mulx	rbp,r12,r12
	adc	r12,r13
	adc	rbp,0
	imul	rdx
	add	rax,rbp
	adc	rdx,0

	add	r8,QWORD PTR[rdi]
	adc	r9,QWORD PTR[8+rdi]
	adc	r10,QWORD PTR[16+rdi]
	adc	r11,QWORD PTR[24+rdi]
	adc	r12,QWORD PTR[32+rdi]
	adc	rax,QWORD PTR[40+rdi]
	adc	r14,rdx
	mov	rdx,rbx

	shrd	r8,r9,31
	shrd	r9,r10,31
	shrd	r10,r11,31
	shrd	r11,r12,31
	shrd	r12,rax,31
	shrd	rax,r14,31

	sar	r14,63
	xor	rbp,rbp
	sub	rbp,r14

	xor	r8,r14
	xor	r9,r14
	xor	r10,r14
	xor	r11,r14
	xor	r12,r14
	xor	rax,r14
	add	r8,rbp
	adc	r9,0
	adc	r10,0
	adc	r11,0
	adc	r12,0
	adc	rax,0

	mov	QWORD PTR[rdi],r8
	mov	QWORD PTR[8+rdi],r9
	mov	QWORD PTR[16+rdi],r10
	mov	QWORD PTR[24+rdi],r11
	mov	QWORD PTR[32+rdi],r12
	mov	QWORD PTR[40+rdi],rax

	xor	rdx,r14
	xor	rcx,r14
	add	rdx,rbp
	add	rcx,rbp

	
ifdef	__SGX_LVI_HARDENING__
	pop	r8
	lfence
	jmp	r8
	ud2
else
	DB	0F3h,0C3h
endif
__smulx_383_n_shift_by_31	ENDP

ALIGN	32
__smulx_191_n_shift_by_31	PROC PRIVATE
	DB	243,15,30,250

	mov	rbx,rdx
	mov	r8,QWORD PTR[((0+0))+rsi]
	mov	r9,QWORD PTR[((0+8))+rsi]
	mov	r10,QWORD PTR[((0+16))+rsi]

	mov	rax,rdx
	sar	rax,63
	xor	rbp,rbp
	sub	rbp,rax

	xor	rdx,rax
	add	rdx,rbp

	xor	r8,rax
	xor	r9,rax
	xor	rax,r10
	add	r8,rbp
	adc	r9,0
	adc	rax,0

	mulx	rbp,r8,r8
	mulx	r10,r9,r9
	add	r9,rbp
	adc	r10,0
	imul	rdx
	add	r10,rax
	adc	rdx,0
	mov	r14,rdx
	mov	rdx,rcx
	mov	r11,QWORD PTR[((48+0))+rsi]
	mov	r12,QWORD PTR[((48+8))+rsi]
	mov	r13,QWORD PTR[((48+16))+rsi]

	mov	rax,rdx
	sar	rax,63
	xor	rbp,rbp
	sub	rbp,rax

	xor	rdx,rax
	add	rdx,rbp

	xor	r11,rax
	xor	r12,rax
	xor	rax,r13
	add	r11,rbp
	adc	r12,0
	adc	rax,0

	mulx	rbp,r11,r11
	mulx	r13,r12,r12
	add	r12,rbp
	adc	r13,0
	imul	rdx
	add	r13,rax
	adc	rdx,0
	add	r11,r8
	adc	r12,r9
	adc	r13,r10
	adc	r14,rdx
	mov	rdx,rbx

	shrd	r11,r12,31
	shrd	r12,r13,31
	shrd	r13,r14,31

	sar	r14,63
	xor	rbp,rbp
	sub	rbp,r14

	xor	r11,r14
	xor	r12,r14
	xor	r13,r14
	add	r11,rbp
	adc	r12,0
	adc	r13,0

	mov	QWORD PTR[rdi],r11
	mov	QWORD PTR[8+rdi],r12
	mov	QWORD PTR[16+rdi],r13

	xor	rdx,r14
	xor	rcx,r14
	add	rdx,rbp
	add	rcx,rbp

	
ifdef	__SGX_LVI_HARDENING__
	pop	r8
	lfence
	jmp	r8
	ud2
else
	DB	0F3h,0C3h
endif
__smulx_191_n_shift_by_31	ENDP

ALIGN	32
__ab_approximation_31	PROC PRIVATE
	DB	243,15,30,250

	mov	r9,QWORD PTR[40+rsi]
	mov	r11,QWORD PTR[88+rsi]
	mov	rbx,QWORD PTR[32+rsi]
	mov	rbp,QWORD PTR[80+rsi]
	mov	r8,QWORD PTR[24+rsi]
	mov	r10,QWORD PTR[72+rsi]

	mov	rax,r9
	or	rax,r11
	cmovz	r9,rbx
	cmovz	r11,rbp
	cmovz	rbx,r8
	mov	r8,QWORD PTR[16+rsi]
	cmovz	rbp,r10
	mov	r10,QWORD PTR[64+rsi]

	mov	rax,r9
	or	rax,r11
	cmovz	r9,rbx
	cmovz	r11,rbp
	cmovz	rbx,r8
	mov	r8,QWORD PTR[8+rsi]
	cmovz	rbp,r10
	mov	r10,QWORD PTR[56+rsi]

	mov	rax,r9
	or	rax,r11
	cmovz	r9,rbx
	cmovz	r11,rbp
	cmovz	rbx,r8
	mov	r8,QWORD PTR[rsi]
	cmovz	rbp,r10
	mov	r10,QWORD PTR[48+rsi]

	mov	rax,r9
	or	rax,r11
	cmovz	r9,rbx
	cmovz	r11,rbp
	cmovz	rbx,r8
	cmovz	rbp,r10

	mov	rax,r9
	or	rax,r11
	bsr	rcx,rax
	lea	rcx,QWORD PTR[1+rcx]
	cmovz	r9,r8
	cmovz	r11,r10
	cmovz	rcx,rax
	neg	rcx


	shld	r9,rbx,cl
	shld	r11,rbp,cl

	mov	eax,07FFFFFFFh
	and	r8,rax
	and	r10,rax
	andn	r9,rax,r9
	andn	r11,rax,r11
	or	r8,r9
	or	r10,r11

	jmp	__inner_loop_31

	
ifdef	__SGX_LVI_HARDENING__
	pop	rdx
	lfence
	jmp	rdx
	ud2
else
	DB	0F3h,0C3h
endif
__ab_approximation_31	ENDP

ALIGN	32
__inner_loop_31	PROC PRIVATE
	DB	243,15,30,250

	mov	rcx,07FFFFFFF80000000h
	mov	r13,0800000007FFFFFFFh
	mov	r15,07FFFFFFF7FFFFFFFh

$L$oop_31::
	cmp	r8,r10
	mov	rax,r8
	mov	rbx,r10
	mov	rbp,rcx
	mov	r14,r13
	cmovb	r8,r10
	cmovb	r10,rax
	cmovb	rcx,r13
	cmovb	r13,rbp

	sub	r8,r10
	sub	rcx,r13
	add	rcx,r15

	test	rax,1
	cmovz	r8,rax
	cmovz	r10,rbx
	cmovz	rcx,rbp
	cmovz	r13,r14

	shr	r8,1
	add	r13,r13
	sub	r13,r15
	sub	edi,1
	jnz	$L$oop_31

	shr	r15,32
	mov	edx,ecx
	mov	r12d,r13d
	shr	rcx,32
	shr	r13,32
	sub	rdx,r15
	sub	rcx,r15
	sub	r12,r15
	sub	r13,r15

	
ifdef	__SGX_LVI_HARDENING__
	pop	r8
	lfence
	jmp	r8
	ud2
else
	DB	0F3h,0C3h
endif
__inner_loop_31	ENDP


ALIGN	32
__tail_loop_53	PROC PRIVATE
	DB	243,15,30,250

	mov	rdx,1
	xor	rcx,rcx
	xor	r12,r12
	mov	r13,1

$L$oop_53::
	xor	rax,rax
	test	r8,1
	mov	rbx,r10
	cmovnz	rax,r10
	sub	rbx,r8
	mov	rbp,r8
	sub	r8,rax
	cmovc	r8,rbx
	cmovc	r10,rbp
	mov	rax,rdx
	cmovc	rdx,r12
	cmovc	r12,rax
	mov	rbx,rcx
	cmovc	rcx,r13
	cmovc	r13,rbx
	xor	rax,rax
	xor	rbx,rbx
	shr	r8,1
	test	rbp,1
	cmovnz	rax,r12
	cmovnz	rbx,r13
	add	r12,r12
	add	r13,r13
	sub	rdx,rax
	sub	rcx,rbx
	sub	edi,1
	jnz	$L$oop_53

	
ifdef	__SGX_LVI_HARDENING__
	pop	r8
	lfence
	jmp	r8
	ud2
else
	DB	0F3h,0C3h
endif
__tail_loop_53	ENDP
.text$	ENDS
.pdata	SEGMENT READONLY ALIGN(4)
ALIGN	4
	DD	imagerel $L$SEH_begin_ctx_inverse_mod_383
	DD	imagerel $L$SEH_body_ctx_inverse_mod_383
	DD	imagerel $L$SEH_info_ctx_inverse_mod_383_prologue

	DD	imagerel $L$SEH_body_ctx_inverse_mod_383
	DD	imagerel $L$SEH_epilogue_ctx_inverse_mod_383
	DD	imagerel $L$SEH_info_ctx_inverse_mod_383_body

	DD	imagerel $L$SEH_epilogue_ctx_inverse_mod_383
	DD	imagerel $L$SEH_end_ctx_inverse_mod_383
	DD	imagerel $L$SEH_info_ctx_inverse_mod_383_epilogue

.pdata	ENDS
.xdata	SEGMENT READONLY ALIGN(8)
ALIGN	8
$L$SEH_info_ctx_inverse_mod_383_prologue::
DB	1,0,5,00bh
DB	0,074h,1,0
DB	0,064h,2,0
DB	0,0b3h
DB	0,0
	DD	0,0
$L$SEH_info_ctx_inverse_mod_383_body::
DB	1,0,18,0
DB	000h,0f4h,08bh,000h
DB	000h,0e4h,08ch,000h
DB	000h,0d4h,08dh,000h
DB	000h,0c4h,08eh,000h
DB	000h,034h,08fh,000h
DB	000h,054h,090h,000h
DB	000h,074h,092h,000h
DB	000h,064h,093h,000h
DB	000h,001h,091h,000h
DB	000h,000h,000h,000h
DB	000h,000h,000h,000h
$L$SEH_info_ctx_inverse_mod_383_epilogue::
DB	1,0,4,0
DB	000h,074h,001h,000h
DB	000h,064h,002h,000h
DB	000h,000h,000h,000h


.xdata	ENDS
END
