14000daa1:	44 89 54 24 28       	mov    %r10d,0x28(%rsp)
14000daa6:	89 44 24 20          	mov    %eax,0x20(%rsp)
14000daaa:	48 ff 15 ff f1 00 00 	rex.W call *0xf1ff(%rip)        # 0x14001ccb0
14000dab1:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
14000dab6:	85 c0                	test   %eax,%eax
14000dab8:	74 6a                	je     0x14000db24
14000daba:	e8 25 a0 ff ff       	call   0x140007ae4
14000dabf:	48 8b 48 08          	mov    0x8(%rax),%rcx
14000dac3:	48 85 c9             	test   %rcx,%rcx
14000dac6:	74 12                	je     0x14000dada
14000dac8:	83 39 00             	cmpl   $0x0,(%rcx)
14000dacb:	76 0d                	jbe    0x14000dada
14000dacd:	e8 12 a0 ff ff       	call   0x140007ae4
14000dad2:	48 8b d6             	mov    %rsi,%rdx
14000dad5:	e8 26 22 00 00       	call   0x14000fd00
14000dada:	80 7b 2c 00          	cmpb   $0x0,0x2c(%rbx)
14000dade:	74 27                	je     0x14000db07
14000dae0:	48 8b 4b 18          	mov    0x18(%rbx),%rcx
14000dae4:	8b 57 0c             	mov    0xc(%rdi),%edx
14000dae7:	2b 57 04             	sub    0x4(%rdi),%edx
14000daea:	48 8b 01             	mov    (%rcx),%rax
14000daed:	48 8b 40 18          	mov    0x18(%rax),%rax
14000daf1:	48 8b 5c 24 60       	mov    0x60(%rsp),%rbx
14000daf6:	48 8b 74 24 68       	mov    0x68(%rsp),%rsi
14000dafb:	48 83 c4 50          	add    $0x50,%rsp
14000daff:	5f                   	pop    %rdi
14000db00:	48 ff 25 31 f2 00 00 	rex.W jmp *0xf231(%rip)        # 0x14001cd38
14000db07:	48 8b 4c 24 58       	mov    0x58(%rsp),%rcx
14000db0c:	4c 8d 05 5d 01 01 00 	lea    0x1015d(%rip),%r8        # 0x14001dc70
14000db13:	41 b9 ff ff 00 80    	mov    $0x8000ffff,%r9d
14000db19:	ba e2 01 00 00       	mov    $0x1e2,%edx
14000db1e:	e8 45 a5 ff ff       	call   0x140008068
14000db23:	cc                   	int3
14000db24:	48 8b 4c 24 58       	mov    0x58(%rsp),%rcx
14000db29:	4c 8d 05 40 01 01 00 	lea    0x10140(%rip),%r8        # 0x14001dc70
14000db30:	ba 19 01 00 00       	mov    $0x119,%edx
14000db35:	e8 ee 29 00 00       	call   0x140010528
14000db3a:	cc                   	int3
14000db3b:	cc                   	int3
14000db3c:	cc                   	int3
14000db3d:	cc                   	int3
14000db3e:	cc                   	int3
14000db3f:	cc                   	int3
14000db40:	cc                   	int3
14000db41:	cc                   	int3
14000db42:	cc                   	int3
14000db43:	cc                   	int3
14000db44:	48 89 5c 24 18       	mov    %rbx,0x18(%rsp)
14000db49:	48 89 7c 24 20       	mov    %rdi,0x20(%rsp)
14000db4e:	89 54 24 10          	mov    %edx,0x10(%rsp)
14000db52:	55                   	push   %rbp
14000db53:	48 8b ec             	mov    %rsp,%rbp
14000db56:	48 83 ec 50          	sub    $0x50,%rsp
14000db5a:	bb 01 00 00 00       	mov    $0x1,%ebx
14000db5f:	38 51 20             	cmp    %dl,0x20(%rcx)
14000db62:	75 22                	jne    0x14000db86
14000db64:	8b c2                	mov    %edx,%eax
14000db66:	c1 e8 08             	shr    $0x8,%eax
14000db69:	38 41 21             	cmp    %al,0x21(%rcx)
14000db6c:	75 18                	jne    0x14000db86
14000db6e:	8b c2                	mov    %edx,%eax
14000db70:	c1 e8 10             	shr    $0x10,%eax
14000db73:	38 41 22             	cmp    %al,0x22(%rcx)
14000db76:	75 0e                	jne    0x14000db86
14000db78:	8b c2                	mov    %edx,%eax
14000db7a:	c1 e8 18             	shr    $0x18,%eax
14000db7d:	38 41 23             	cmp    %al,0x23(%rcx)
14000db80:	75 04                	jne    0x14000db86
14000db82:	32 c0                	xor    %al,%al
14000db84:	eb 02                	jmp    0x14000db88
14000db86:	8a c3                	mov    %bl,%al
14000db88:	84 c0                	test   %al,%al
14000db8a:	0f 84 e4 00 00 00    	je     0x14000dc74
14000db90:	89 51 20             	mov    %edx,0x20(%rcx)
14000db93:	4c 8b 41 18          	mov    0x18(%rcx),%r8
14000db97:	4d 85 c0             	test   %r8,%r8
14000db9a:	74 0c                	je     0x14000dba8
14000db9c:	f0 41 01 58 0c       	lock add %ebx,0xc(%r8)
14000dba1:	4c 8b 41 18          	mov    0x18(%rcx),%r8
14000dba5:	8b 55 18             	mov    0x18(%rbp),%edx
14000dba8:	48 8b 41 10          	mov    0x10(%rcx),%rax
14000dbac:	48 8d 79 08          	lea    0x8(%rcx),%rdi
14000dbb0:	48 89 45 e0          	mov    %rax,-0x20(%rbp)
14000dbb4:	4c 89 45 e8          	mov    %r8,-0x18(%rbp)
14000dbb8:	0f 57 c0             	xorps  %xmm0,%xmm0
14000dbbb:	f3 0f 7f 45 d0       	movdqu %xmm0,-0x30(%rbp)
14000dbc0:	89 55 f0             	mov    %edx,-0x10(%rbp)
14000dbc3:	48 8d 45 e0          	lea    -0x20(%rbp),%rax
14000dbc7:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dbcb:	b9 28 00 00 00       	mov    $0x28,%ecx
14000dbd0:	e8 83 c1 00 00       	call   0x140019d58
14000dbd5:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dbd9:	48 83 60 08 00       	andq   $0x0,0x8(%rax)
14000dbde:	48 83 60 10 00       	andq   $0x0,0x10(%rax)
14000dbe3:	48 8b 4d e0          	mov    -0x20(%rbp),%rcx
14000dbe7:	48 89 48 08          	mov    %rcx,0x8(%rax)
14000dbeb:	48 8b 4d e8          	mov    -0x18(%rbp),%rcx
14000dbef:	48 89 48 10          	mov    %rcx,0x10(%rax)
14000dbf3:	0f 57 c0             	xorps  %xmm0,%xmm0
14000dbf6:	f3 0f 7f 45 e0       	movdqu %xmm0,-0x20(%rbp)
14000dbfb:	8b 4d f0             	mov    -0x10(%rbp),%ecx
14000dbfe:	89 48 18             	mov    %ecx,0x18(%rax)
14000dc01:	89 58 20             	mov    %ebx,0x20(%rax)
14000dc04:	48 8d 0d 35 e6 00 00 	lea    0xe635(%rip),%rcx        # 0x14001c240
14000dc0b:	48 89 08             	mov    %rcx,(%rax)
14000dc0e:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dc12:	48 8b 4d e8          	mov    -0x18(%rbp),%rcx
14000dc16:	48 85 c9             	test   %rcx,%rcx
14000dc19:	74 1b                	je     0x14000dc36
14000dc1b:	83 c8 ff             	or     $0xffffffff,%eax
14000dc1e:	f0 0f c1 41 0c       	lock xadd %eax,0xc(%rcx)
14000dc23:	83 f8 01             	cmp    $0x1,%eax
14000dc26:	75 0e                	jne    0x14000dc36
14000dc28:	48 8b 01             	mov    (%rcx),%rax
14000dc2b:	48 8b 40 08          	mov    0x8(%rax),%rax
14000dc2f:	ff 15 03 f1 00 00    	call   *0xf103(%rip)        # 0x14001cd38
14000dc35:	90                   	nop
14000dc36:	48 8d 55 10          	lea    0x10(%rbp),%rdx
14000dc3a:	48 8b cf             	mov    %rdi,%rcx
14000dc3d:	e8 96 0d 00 00       	call   0x14000e9d8
14000dc42:	90                   	nop
14000dc43:	48 8d 4d 10          	lea    0x10(%rbp),%rcx
14000dc47:	e8 88 c2 ff ff       	call   0x140009ed4
14000dc4c:	90                   	nop
14000dc4d:	e8 92 9e ff ff       	call   0x140007ae4
14000dc52:	48 8b 48 08          	mov    0x8(%rax),%rcx
14000dc56:	48 85 c9             	test   %rcx,%rcx
14000dc59:	74 05                	je     0x14000dc60
14000dc5b:	83 39 00             	cmpl   $0x0,(%rcx)
14000dc5e:	77 02                	ja     0x14000dc62
14000dc60:	32 db                	xor    %bl,%bl
14000dc62:	84 db                	test   %bl,%bl
14000dc64:	74 0e                	je     0x14000dc74
14000dc66:	e8 79 9e ff ff       	call   0x140007ae4
14000dc6b:	48 8d 55 18          	lea    0x18(%rbp),%rdx
14000dc6f:	e8 5c 21 00 00       	call   0x14000fdd0
14000dc74:	48 8b 5c 24 70       	mov    0x70(%rsp),%rbx
14000dc79:	48 8b 7c 24 78       	mov    0x78(%rsp),%rdi
14000dc7e:	48 83 c4 50          	add    $0x50,%rsp
14000dc82:	5d                   	pop    %rbp
14000dc83:	c3                   	ret
14000dc84:	cc                   	int3
14000dc85:	cc                   	int3
14000dc86:	cc                   	int3
14000dc87:	cc                   	int3
14000dc88:	cc                   	int3
14000dc89:	cc                   	int3
14000dc8a:	cc                   	int3
14000dc8b:	cc                   	int3
14000dc8c:	48 89 5c 24 10       	mov    %rbx,0x10(%rsp)
14000dc91:	55                   	push   %rbp
14000dc92:	48 8b ec             	mov    %rsp,%rbp
14000dc95:	48 83 ec 50          	sub    $0x50,%rsp
14000dc99:	48 8b 51 18          	mov    0x18(%rcx),%rdx
14000dc9d:	48 85 d2             	test   %rdx,%rdx
14000dca0:	74 08                	je     0x14000dcaa
14000dca2:	f0 ff 42 0c          	lock incl 0xc(%rdx)
14000dca6:	48 8b 51 18          	mov    0x18(%rcx),%rdx
14000dcaa:	48 8b 41 10          	mov    0x10(%rcx),%rax
14000dcae:	48 8d 59 08          	lea    0x8(%rcx),%rbx
14000dcb2:	48 89 45 e0          	mov    %rax,-0x20(%rbp)
14000dcb6:	48 89 55 e8          	mov    %rdx,-0x18(%rbp)
14000dcba:	0f 57 c0             	xorps  %xmm0,%xmm0
14000dcbd:	f3 0f 7f 45 d0       	movdqu %xmm0,-0x30(%rbp)
14000dcc2:	48 8d 45 e0          	lea    -0x20(%rbp),%rax
14000dcc6:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dcca:	b9 28 00 00 00       	mov    $0x28,%ecx
14000dccf:	e8 84 c0 00 00       	call   0x140019d58
14000dcd4:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dcd8:	48 83 60 08 00       	andq   $0x0,0x8(%rax)
14000dcdd:	48 83 60 10 00       	andq   $0x0,0x10(%rax)
14000dce2:	48 8b 4d e0          	mov    -0x20(%rbp),%rcx
14000dce6:	48 89 48 08          	mov    %rcx,0x8(%rax)
14000dcea:	48 8b 4d e8          	mov    -0x18(%rbp),%rcx
14000dcee:	48 89 48 10          	mov    %rcx,0x10(%rax)
14000dcf2:	0f 57 c0             	xorps  %xmm0,%xmm0
14000dcf5:	f3 0f 7f 45 e0       	movdqu %xmm0,-0x20(%rbp)
14000dcfa:	c7 40 20 01 00 00 00 	movl   $0x1,0x20(%rax)
14000dd01:	48 8d 0d f8 e4 00 00 	lea    0xe4f8(%rip),%rcx        # 0x14001c200
14000dd08:	48 89 08             	mov    %rcx,(%rax)
14000dd0b:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dd0f:	48 8b 4d e8          	mov    -0x18(%rbp),%rcx
14000dd13:	48 85 c9             	test   %rcx,%rcx
14000dd16:	74 1b                	je     0x14000dd33
14000dd18:	83 c8 ff             	or     $0xffffffff,%eax
14000dd1b:	f0 0f c1 41 0c       	lock xadd %eax,0xc(%rcx)
14000dd20:	83 f8 01             	cmp    $0x1,%eax
14000dd23:	75 0e                	jne    0x14000dd33
14000dd25:	48 8b 01             	mov    (%rcx),%rax
14000dd28:	48 8b 40 08          	mov    0x8(%rax),%rax
14000dd2c:	ff 15 06 f0 00 00    	call   *0xf006(%rip)        # 0x14001cd38
14000dd32:	90                   	nop
14000dd33:	48 8d 55 10          	lea    0x10(%rbp),%rdx
14000dd37:	48 8b cb             	mov    %rbx,%rcx
14000dd3a:	e8 99 0c 00 00       	call   0x14000e9d8
14000dd3f:	90                   	nop
14000dd40:	48 8d 4d 10          	lea    0x10(%rbp),%rcx
14000dd44:	e8 8b c1 ff ff       	call   0x140009ed4
14000dd49:	90                   	nop
14000dd4a:	48 8b 5c 24 68       	mov    0x68(%rsp),%rbx
14000dd4f:	48 83 c4 50          	add    $0x50,%rsp
14000dd53:	5d                   	pop    %rbp
14000dd54:	c3                   	ret
14000dd55:	cc                   	int3
14000dd56:	cc                   	int3
14000dd57:	cc                   	int3
14000dd58:	cc                   	int3
14000dd59:	cc                   	int3
14000dd5a:	cc                   	int3
14000dd5b:	cc                   	int3
14000dd5c:	48 89 5c 24 10       	mov    %rbx,0x10(%rsp)
14000dd61:	55                   	push   %rbp
14000dd62:	48 8b ec             	mov    %rsp,%rbp
14000dd65:	48 83 ec 50          	sub    $0x50,%rsp
14000dd69:	48 8b 51 18          	mov    0x18(%rcx),%rdx
14000dd6d:	48 85 d2             	test   %rdx,%rdx
14000dd70:	74 08                	je     0x14000dd7a
14000dd72:	f0 ff 42 0c          	lock incl 0xc(%rdx)
14000dd76:	48 8b 51 18          	mov    0x18(%rcx),%rdx
14000dd7a:	48 8b 41 10          	mov    0x10(%rcx),%rax
14000dd7e:	48 8d 59 08          	lea    0x8(%rcx),%rbx
14000dd82:	48 89 45 e0          	mov    %rax,-0x20(%rbp)
14000dd86:	48 89 55 e8          	mov    %rdx,-0x18(%rbp)
14000dd8a:	0f 57 c0             	xorps  %xmm0,%xmm0
14000dd8d:	f3 0f 7f 45 d0       	movdqu %xmm0,-0x30(%rbp)
14000dd92:	48 8d 45 e0          	lea    -0x20(%rbp),%rax
14000dd96:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dd9a:	b9 28 00 00 00       	mov    $0x28,%ecx
14000dd9f:	e8 b4 bf 00 00       	call   0x140019d58
14000dda4:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dda8:	48 83 60 08 00       	andq   $0x0,0x8(%rax)
14000ddad:	48 83 60 10 00       	andq   $0x0,0x10(%rax)
14000ddb2:	48 8b 4d e0          	mov    -0x20(%rbp),%rcx
14000ddb6:	48 89 48 08          	mov    %rcx,0x8(%rax)
14000ddba:	48 8b 4d e8          	mov    -0x18(%rbp),%rcx
14000ddbe:	48 89 48 10          	mov    %rcx,0x10(%rax)
14000ddc2:	0f 57 c0             	xorps  %xmm0,%xmm0
14000ddc5:	f3 0f 7f 45 e0       	movdqu %xmm0,-0x20(%rbp)
14000ddca:	c7 40 20 01 00 00 00 	movl   $0x1,0x20(%rax)
14000ddd1:	48 8d 0d 08 e4 00 00 	lea    0xe408(%rip),%rcx        # 0x14001c1e0
14000ddd8:	48 89 08             	mov    %rcx,(%rax)
14000dddb:	48 89 45 10          	mov    %rax,0x10(%rbp)
14000dddf:	48 8b 4d e8          	mov    -0x18(%rbp),%rcx
14000dde3:	48 85 c9             	test   %rcx,%rcx
14000dde6:	74 1b                	je     0x14000de03
14000dde8:	83 c8 ff             	or     $0xffffffff,%eax
14000ddeb:	f0 0f c1 41 0c       	lock xadd %eax,0xc(%rcx)
14000ddf0:	83 f8 01             	cmp    $0x1,%eax
14000ddf3:	75 0e                	jne    0x14000de03
14000ddf5:	48 8b 01             	mov    (%rcx),%rax
14000ddf8:	48 8b 40 08          	mov    0x8(%rax),%rax
14000ddfc:	ff 15 36 ef 00 00    	call   *0xef36(%rip)        # 0x14001cd38
14000de02:	90                   	nop
14000de03:	48 8d 55 10          	lea    0x10(%rbp),%rdx
14000de07:	48 8b cb             	mov    %rbx,%rcx
14000de0a:	e8 c9 0b 00 00       	call   0x14000e9d8
14000de0f:	90                   	nop
14000de10:	48 8d 4d 10          	lea    0x10(%rbp),%rcx
14000de14:	e8 bb c0 ff ff       	call   0x140009ed4
14000de19:	90                   	nop
14000de1a:	48 8b 5c 24 68       	mov    0x68(%rsp),%rbx
14000de1f:	48 83 c4 50          	add    $0x50,%rsp
14000de23:	5d                   	pop    %rbp
14000de24:	c3                   	ret
14000de25:	cc                   	int3
14000de26:	cc                   	int3
14000de27:	cc                   	int3
14000de28:	cc                   	int3
14000de29:	cc                   	int3
14000de2a:	cc                   	int3
14000de2b:	cc                   	int3
14000de2c:	48 8b c4             	mov    %rsp,%rax
14000de2f:	48 89 58 18          	mov    %rbx,0x18(%rax)
14000de33:	48 89 70 20          	mov    %rsi,0x20(%rax)
14000de37:	48 89 50 10          	mov    %rdx,0x10(%rax)
14000de3b:	55                   	push   %rbp
14000de3c:	57                   	push   %rdi
14000de3d:	41 55                	push   %r13
14000de3f:	41 56                	push   %r14
14000de41:	41 57                	push   %r15
14000de43:	48 8d 68 a1          	lea    -0x5f(%rax),%rbp
14000de47:	48 81 ec b0 00 00 00 	sub    $0xb0,%rsp
14000de4e:	41 8b d8             	mov    %r8d,%ebx
14000de51:	4c 8b fa             	mov    %rdx,%r15
14000de54:	48 8b f9             	mov    %rcx,%rdi
14000de57:	49 8b d1             	mov    %r9,%rdx
14000de5a:	e8 35 03 00 00       	call   0x14000e194
14000de5f:	48 8d 55 bf          	lea    -0x41(%rbp),%rdx
14000de63:	e8 28 f0 ff ff       	call   0x14000ce90
14000de68:	48 8d 45 bf          	lea    -0x41(%rbp),%rax
14000de6c:	48 3b f8             	cmp    %rax,%rdi
14000de6f:	74 1d                	je     0x14000de8e
14000de71:	48 83 3f 00          	cmpq   $0x0,(%rdi)
14000de75:	74 08                	je     0x14000de7f
14000de77:	48 8b cf             	mov    %rdi,%rcx
14000de7a:	e8 55 c0 ff ff       	call   0x140009ed4
14000de7f:	48 8b 4d bf          	mov    -0x41(%rbp),%rcx
14000de83:	33 c0                	xor    %eax,%eax
14000de85:	48 89 45 bf          	mov    %rax,-0x41(%rbp)
14000de89:	48 89 0f             	mov    %rcx,(%rdi)
14000de8c:	eb 04                	jmp    0x14000de92
14000de8e:	48 8b 45 bf          	mov    -0x41(%rbp),%rax
14000de92:	48 85 c0             	test   %rax,%rax
14000de95:	74 09                	je     0x14000dea0
14000de97:	48 8d 4d bf          	lea    -0x41(%rbp),%rcx
14000de9b:	e8 34 c0 ff ff       	call   0x140009ed4
14000dea0:	48 8b 0f             	mov    (%rdi),%rcx
14000dea3:	48 85 c9             	test   %rcx,%rcx
14000dea6:	74 2b                	je     0x14000ded3
14000dea8:	48 83 65 d7 00       	andq   $0x0,-0x29(%rbp)
14000dead:	48 8b 01             	mov    (%rcx),%rax
14000deb0:	4c 8d 45 d7          	lea    -0x29(%rbp),%r8
14000deb4:	48 8d 15 55 ff 00 00 	lea    0xff55(%rip),%rdx        # 0x14001de10
14000debb:	48 8b 00             	mov    (%rax),%rax
14000debe:	ff 15 74 ee 00 00    	call   *0xee74(%rip)        # 0x14001cd38
14000dec4:	89 45 67             	mov    %eax,0x67(%rbp)
14000dec7:	85 c0                	test   %eax,%eax
14000dec9:	0f 88 98 02 00 00    	js     0x14000e167
14000decf:	48 8b 4d d7          	mov    -0x29(%rbp),%rcx
14000ded3:	48 89 4d df          	mov    %rcx,-0x21(%rbp)
14000ded7:	48 83 65 b7 00       	andq   $0x0,-0x49(%rbp)
14000dedc:	48 8b 01             	mov    (%rcx),%rax
14000dedf:	4c 8d 4d b7          	lea    -0x49(%rbp),%r9
14000dee3:	45 33 c0             	xor    %r8d,%r8d
14000dee6:	48 8b 57 30          	mov    0x30(%rdi),%rdx
14000deea:	48 8b 40 18          	mov    0x18(%rax),%rax
14000deee:	ff 15 44 ee 00 00    	call   *0xee44(%rip)        # 0x14001cd38
14000def4:	48 8b 4d 5f          	mov    0x5f(%rbp),%rcx
14000def8:	85 c0                	test   %eax,%eax
14000defa:	0f 88 6f 02 00 00    	js     0x14000e16f
14000df00:	4c 8d 77 08          	lea    0x8(%rdi),%r14
14000df04:	48 8d 45 b7          	lea    -0x49(%rbp),%rax
14000df08:	4c 3b f0             	cmp    %rax,%r14
14000df0b:	74 27                	je     0x14000df34
14000df0d:	49 83 3e 00          	cmpq   $0x0,(%r14)
14000df11:	74 08                	je     0x14000df1b
14000df13:	49 8b ce             	mov    %r14,%rcx
14000df16:	e8 b9 bf ff ff       	call   0x140009ed4
14000df1b:	48 8b 4d b7          	mov    -0x49(%rbp),%rcx
14000df1f:	49 89 0e             	mov    %rcx,(%r14)
14000df22:	48 85 c9             	test   %rcx,%rcx
14000df25:	74 11                	je     0x14000df38
14000df27:	48 8b 01             	mov    (%rcx),%rax
14000df2a:	48 8b 40 08          	mov    0x8(%rax),%rax
14000df2e:	ff 15 04 ee 00 00    	call   *0xee04(%rip)        # 0x14001cd38
14000df34:	48 8b 4d b7          	mov    -0x49(%rbp),%rcx
14000df38:	48 85 c9             	test   %rcx,%rcx
14000df3b:	74 0a                	je     0x14000df47
14000df3d:	48 8d 4d b7          	lea    -0x49(%rbp),%rcx
14000df41:	e8 8e bf ff ff       	call   0x140009ed4