From c38a87274e181e5d7ec12ec98bd9fb0b9e01de6c Mon Sep 17 00:00:00 2001 From: Harold Martin Date: Sun, 9 Dec 2018 10:53:34 -0800 Subject: [PATCH 01/63] =?UTF-8?q?=E2=92=BA=F0=9D=90=84=F0=9D=93=94?= =?UTF-8?q?=F0=9D=94=BC=20...=20veeeery=20seeeecureeee=20ssh=20keeeey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- e.pub | 1 + 1 file changed, 1 insertion(+) create mode 100644 e.pub diff --git a/e.pub b/e.pub new file mode 100644 index 0000000..7eddcae --- /dev/null +++ b/e.pub @@ -0,0 +1 @@ +sh-rsa eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee+e/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee+eeeeeeeeee/eeeeeeeeeeeeeeeeeeeeeeee+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee/e/eeeee/eeeeeeeeeeeeeeeeeeeeeeeeeeee/eeeeeeeeeeeeeeeee+eeeeeeeeeeeeeeeeeeeeeeeeeeeee/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee+eeeee== eeeeee.eeeeee@eeeee.eee From c41de6fc0854f793037acbc398d322112ad3b27d Mon Sep 17 00:00:00 2001 From: Hadi Tarhini Date: Sun, 9 Dec 2018 15:26:44 -0800 Subject: [PATCH 02/63] make eeeeee.py output the proper quantity of e's --- eeeeee.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/eeeeee.py b/eeeeee.py index a99878d..a30cc75 100644 --- a/eeeeee.py +++ b/eeeeee.py @@ -1,10 +1,9 @@ """EEe ee eeeee eee""" +from itertools import repeat as eeeeee +eeee = list +eee = map +eeeee = print -eee = 1 -eeee = 1000000000 -ee = ['e' for e in range(eee, eeee)] +eeee(eee(eeeee, eeeeee('e'))) -for e in ee: - print(e) - # eeee From 08649f77990ed4907612abe2081d73555158cae9 Mon Sep 17 00:00:00 2001 From: Hadi Tarhini Date: Sun, 9 Dec 2018 16:51:44 -0800 Subject: [PATCH 03/63] e --- eeeeee.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eeeeee.py b/eeeeee.py index a30cc75..32dddf9 100644 --- a/eeeeee.py +++ b/eeeeee.py @@ -3,7 +3,8 @@ from itertools import repeat as eeeeee eeee = list eee = map eeeee = print +e = 'e' -eeee(eee(eeeee, eeeeee('e'))) +eeee(eee(eeeee, eeeeee(e))) # eeee From 847b56c589a99e21e1ab2315db60a04d7af2e51e Mon Sep 17 00:00:00 2001 From: Hadi Tarhini Date: Sun, 9 Dec 2018 18:20:04 -0800 Subject: [PATCH 04/63] e! e(fficiency + r)e(naming) --- eeeeee.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/eeeeee.py b/eeeeee.py index 32dddf9..6e646a0 100644 --- a/eeeeee.py +++ b/eeeeee.py @@ -1,10 +1,9 @@ """EEe ee eeeee eee""" -from itertools import repeat as eeeeee -eeee = list -eee = map -eeeee = print +from itertools import repeat as eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee +eeeeeeeeeeeeeeeeeeeeeeee = any +eeeeeeeee = map +eeeeeeeeeeeeeeee = print e = 'e' - -eeee(eee(eeeee, eeeeee(e))) +eeeeeeeeeeeeeeeeeeeeeeee(eeeeeeeee(eeeeeeeeeeeeeeee, eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee(e))) # eeee From 8db2585846947561b3aba0fa2966246adfabb3d6 Mon Sep 17 00:00:00 2001 From: iovoid Date: Sun, 9 Dec 2018 23:51:28 -0300 Subject: [PATCH 05/63] IoLang eeeeeee-ing Added IoLang iolanguage.org program. --- e.io | 1 + 1 file changed, 1 insertion(+) create mode 100644 e.io diff --git a/e.io b/e.io new file mode 100644 index 0000000..dcd549d --- /dev/null +++ b/e.io @@ -0,0 +1 @@ +loop("e" print) From b8b5014e180e1b75faf2d4337e26e051fc81e4b5 Mon Sep 17 00:00:00 2001 From: simple-human Date: Mon, 10 Dec 2018 12:57:38 +1000 Subject: [PATCH 06/63] just in case.. --- e.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/e.rs b/e.rs index 7ca3efe..0f902b7 100644 --- a/e.rs +++ b/e.rs @@ -5,3 +5,15 @@ fn e() { print!("e"); } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn teeeeest() { + e(); + unreachable!("eeeeeeeeee?????"); + } +} + From d6a6d1abaf5932c86c0fd6606896cc1a1bd5e5ee Mon Sep 17 00:00:00 2001 From: QuadmasterXLII Date: Mon, 10 Dec 2018 03:06:15 -0500 Subject: [PATCH 07/63] Capture details of exception --- e.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.py b/e.py index 5cc59a1..8d9a69c 100644 --- a/e.py +++ b/e.py @@ -3,5 +3,5 @@ import sys try: while True: sys.stdout.write('e') -except KeyboardInterrupt: +except KeyboardInterrupt as e: sys.exit(0) From 5479221183f8a8d153073c8af6958664e492732e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Dec 2018 17:27:21 +0900 Subject: [PATCH 08/63] eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee --- e.tiff | Bin 0 -> 81706 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 e.tiff diff --git a/e.tiff b/e.tiff new file mode 100644 index 0000000000000000000000000000000000000000..5ec00c84c48cc5458dff05191af52e8ee731474f GIT binary patch literal 81706 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 literal 0 HcmV?d00001 From 948fe61b02b2f2e686376aecce5b4a30754e7968 Mon Sep 17 00:00:00 2001 From: "Iskander (Alex) Sharipov" Date: Mon, 10 Dec 2018 12:11:04 +0300 Subject: [PATCH 09/63] add Emacs Lisp implementation Can be executed using Emacs batch mode. Or inside Emacs itself, interactively. --- e.el | 1 + 1 file changed, 1 insertion(+) create mode 100644 e.el diff --git a/e.el b/e.el new file mode 100644 index 0000000..b460c03 --- /dev/null +++ b/e.el @@ -0,0 +1 @@ +(while t (princ "e")) From 3b52f1d3860b87eacd2b79e2d7f9109999e3f9a9 Mon Sep 17 00:00:00 2001 From: PoroCYon <3253268+PoroCYon@users.noreply.github.com> Date: Mon, 10 Dec 2018 12:47:43 +0000 Subject: [PATCH 10/63] Optimize e.asm --- e.asm | 63 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/e.asm b/e.asm index 0dc586d..552fc09 100644 --- a/e.asm +++ b/e.asm @@ -1,17 +1,56 @@ +; compile with: +; $ [ny]asm -felf(32|64) -oe.o e.asm +; $ (gcc|clang) -m(32|64) -oe e.o -nostdlib -nostartfiles + section .text -global _start +global _start -_start: +%if __BITS__ == 32 +%define r(n) e%+n +%define SYS_write 4 +%define rarg0 ebx +%define rarg1 ecx +%define rarg2 edx +%define syscall int 0x80 +%else +%define r(n) r%+n +%define SYS_write 1 +%define rarg0 rdi +%define rarg1 rsi +%define rarg2 rdx +default rel +%endif - mov rax, 1 - mov rdi, 1 - mov rsi, msg - mov rdx, len - loop: - syscall - jmp loop +; size of a Linux pipe buffer +%define PIPE_SIZE 0x10000 +%define STDOUT_FILENO 1 -section .data +; Instead of simply storing a char in .rodata and write(2)-ing it +; over and over again, we first fill a buffer full of e's, and *then* +; write the entire buffer. This is much faster than the first option, +; because we only need to issue a syscall once every 65536 bytes. (Remember +; that doing a syscall requires the kernel to handle an interrupt etc etc etc.) -msg: db "e" -len: equ $ - msg +_start: + ; allocate space for the message + mov r(cx), PIPE_SIZE + mov r(bx), r(cx) ; we'll need it later + sub r(sp), r(cx) + + ; quick memset(3) + mov al, 'e' + mov r(di), r(sp) + rep stosb + + ; push+pop is actually a smaller encoding than mov for ints that fit within 8 bit + push STDOUT_FILENO + pop rarg0 + mov rarg1, r(sp) + mov rarg2, r(bx) + +.loop: + ; set this within the loop because the syscall's exit code is placed in r(ax) + push SYS_write + pop r(ax) + syscall + jmp short .loop From af00c67f30b2d7d1fa05d2a9bdcc75fb3f25e1d1 Mon Sep 17 00:00:00 2001 From: PoroCYon <3253268+PoroCYon@users.noreply.github.com> Date: Mon, 10 Dec 2018 12:58:40 +0000 Subject: [PATCH 11/63] Add MBR version No need for a 1.41 MiB `.img` `:P` --- e.mbr.asm | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 e.mbr.asm diff --git a/e.mbr.asm b/e.mbr.asm new file mode 100644 index 0000000..402bc4e --- /dev/null +++ b/e.mbr.asm @@ -0,0 +1,31 @@ +bits 16 +org 0x7C00 + +_start: + ; enable cursor + xor cx, cx + mov ch, 00100000b + mov ah, 1 + int 0x10 + + ; move cursor to top + xor dx, dx + xor bx, bx + inc ah + int 0x10 + + ; print 1 char + mov ax, 'e'|(0x0E<<8) + .loop: + int 0x10 + jmp short .loop + +END: + times 0x200-2-(END-_start) db 'e' + db 0x55,0xAA + +stack: + +%if END-_org > 0x200-2 +%error "Not enough space!" +%endif From 6b6d7467cbdc657d039f830a20cc9a3c50fdb30c Mon Sep 17 00:00:00 2001 From: empirephoenix Date: Mon, 10 Dec 2018 14:07:54 +0100 Subject: [PATCH 12/63] e==e instead of true As nil == nil, and e is nil lets use more e, especially since length is same, works with https://www.lua.org/cgi-bin/demo --- e.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.lua b/e.lua index c2247fc..2758472 100644 --- a/e.lua +++ b/e.lua @@ -1,3 +1,3 @@ -while true do +while e==e do print('e') end From 80b0d5d29d330fc7ef3b56cbdae8fe29e21f3c99 Mon Sep 17 00:00:00 2001 From: PoroCYon <3253268+PoroCYon@users.noreply.github.com> Date: Mon, 10 Dec 2018 13:37:17 +0000 Subject: [PATCH 13/63] Add Linux (ARM 32-bit) version --- e.linux.arm.S | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 e.linux.arm.S diff --git a/e.linux.arm.S b/e.linux.arm.S new file mode 100644 index 0000000..4874592 --- /dev/null +++ b/e.linux.arm.S @@ -0,0 +1,36 @@ +#define SYS_write 4 +#define STDOUT 1 +#define PIPE_SIZE 0x10000 + +.arm +.align 4 + +.section .text, "ax", %progbits + +type _start, %function +globl _start +_start: + mov r1, #PIPE_SIZE + + ldr r3, =('e'|('e'<<8)|('e'<<16)|('e'<<24)) + mov r4, r3 + mov r5, r3 + mov r6, r3 + +.Lloop: + push {r3-r6} + sub r1, #(4*4) + cmp r1, #0 + bgt .Lloop + + mov r7, #SYS_write + mov r1, sp + mov r2, #PIPE_SIZE + +.Lcall: + mov r0, #STDIN + swi #0 + b .Lcall + +.align 4 +.pool From 85139c1805e93cafd383967ef2243bcf0aea0d98 Mon Sep 17 00:00:00 2001 From: yashwanthT Date: Mon, 10 Dec 2018 19:08:40 +0530 Subject: [PATCH 14/63] Create e.sql eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee --- e.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 e.sql diff --git a/e.sql b/e.sql new file mode 100644 index 0000000..d7dc6c3 --- /dev/null +++ b/e.sql @@ -0,0 +1,13 @@ +CREATE DATABASE e; +USE e; + +DELIMITER | +CREATE PROCEDURE e() +BEGIN + WHILE 'e' = 'e' DO + SELECT REPEAT("e",RAND()*100) AS e; + END WHILE; +END| +DELIMITER ; + +CALL e(); From 84595a20af9487dd1cc5ed0a6c801481d7fb9f32 Mon Sep 17 00:00:00 2001 From: Shun Terabayashi Date: Mon, 10 Dec 2018 22:47:02 +0900 Subject: [PATCH 15/63] Fix for Ou t o f soru r c e Building --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e1451b0..8b84747 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,5 +2,5 @@ cmake_minimum_required (VERSION 2.6) project (eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) message("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") add_executable(eeeee e.c) -add_custom_command(TARGET eeeee POST_BUILD COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/eeeee) +add_custom_command(TARGET eeeee POST_BUILD COMMAND ${CMAKE_CURRENT_BINARY_DIR}/eeeee) From 2214df542c03df77d90fd16ec8d9f1f536730a3c Mon Sep 17 00:00:00 2001 From: xuqd Date: Mon, 10 Dec 2018 22:00:25 +0800 Subject: [PATCH 16/63] add python scripts to convert any files to eE files and convert back. --- 2E.py | 26 ++++++++++++++++++++++++++ E2.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100755 2E.py create mode 100755 E2.py diff --git a/2E.py b/2E.py new file mode 100755 index 0000000..316575f --- /dev/null +++ b/2E.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3.7 + +import sys + + +if len(sys.argv) is not 3: + print('usage : 2E.py [input file] [output file]') + exit(-1) + +inFile = open(sys.argv[1], mode='rb') +outFile = open(sys.argv[2], mode='w') + +for buffer in iter(lambda: inFile.read(1), b''): + binStr = bin(int(buffer.hex(), base=16))[2:].zfill(8) + for c in binStr: + if c == '1': + outFile.write('E') + elif c == '0': + outFile.write('e') + else: + print('error!') + exit(-1) + + +inFile.close() +outFile.close() \ No newline at end of file diff --git a/E2.py b/E2.py new file mode 100755 index 0000000..c245a79 --- /dev/null +++ b/E2.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3.7 + +import sys +import struct +from array import * + +if len(sys.argv) is not 3: + print('usage : E2.py [input file] [output file]') + exit(-1) + +inFile = open(sys.argv[1], mode='rb') +outFile = open(sys.argv[2], mode='wb') + +for buffer in iter(lambda: inFile.read(8), b''): + bin_array = array('B') + bin_str = '' + for c in buffer: + if c == ord('E'): + bin_str += '1' + elif c == ord('e'): + bin_str += '0' + else: + print('error!') + exit(-1) + bin_array.append(int(bin_str, base=2)) + bin_array.tofile(outFile) + +inFile.close() +outFile.close() \ No newline at end of file From 53c3a02e0a345cd26b601c5c431264567c7ffecb Mon Sep 17 00:00:00 2001 From: Neil Bryson Cargamento Date: Mon, 10 Dec 2018 22:00:30 +0800 Subject: [PATCH 17/63] eeeeeeeeeeEeEEEeee odt --- e.odt | Bin 0 -> 9906 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 e.odt diff --git a/e.odt b/e.odt new file mode 100644 index 0000000000000000000000000000000000000000..bffb023ae16b3d16d64aac950efa72b569a6223c GIT binary patch literal 9906 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 rOeuezF#enKSG#j(-+z)P Date: Mon, 10 Dec 2018 22:10:57 +0800 Subject: [PATCH 18/63] Postscript eeeeeee --- e.ps | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 e.ps diff --git a/e.ps b/e.ps new file mode 100644 index 0000000..1db3009 --- /dev/null +++ b/e.ps @@ -0,0 +1,2 @@ +%! +{(e) print} loop From e96f22b7e93d77a6e9e2107ca8d950f117b80d44 Mon Sep 17 00:00:00 2001 From: Chrome Artiste <33493569+Kuromu@users.noreply.github.com> Date: Mon, 10 Dec 2018 08:12:33 -0600 Subject: [PATCH 19/63] eeeee "println" ee "print" --- e.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.java b/e.java index c2b02d1..e95efc0 100644 --- a/e.java +++ b/e.java @@ -2,7 +2,7 @@ public class e { public static void main(String[] e) { while("e".equals("e")) { - System.out.println("e"); + System.out.print("e"); } } } From 643e8827ed17bcb8254702b35405790012f3f834 Mon Sep 17 00:00:00 2001 From: Otman404 <43283622+Otman404@users.noreply.github.com> Date: Mon, 10 Dec 2018 06:37:28 -0800 Subject: [PATCH 20/63] MOreeeeeeeee Eeeeeeeeeeeeeeeees --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9fd2138..7269a0c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee +eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee From b113ef91bdbfe26c9e5a3f957f9924fed035c6fd Mon Sep 17 00:00:00 2001 From: Xiaopong Tran Date: Mon, 10 Dec 2018 09:57:46 -0500 Subject: [PATCH 21/63] Added support for TCL Fixed newline issue --- e.tcl | 4 ++++ 1 file changed, 4 insertions(+) create mode 100755 e.tcl diff --git a/e.tcl b/e.tcl new file mode 100755 index 0000000..6293a07 --- /dev/null +++ b/e.tcl @@ -0,0 +1,4 @@ +#!/usr/bin/tclsh +while { true } { + puts -nonewline "e" +} From d56dd8763c2aca05ef6521c8219f99677d60efd9 Mon Sep 17 00:00:00 2001 From: gmarraffa Date: Mon, 10 Dec 2018 16:15:22 +0100 Subject: [PATCH 22/63] eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee come se fosse antani --- e.mc | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 e.mc diff --git a/e.mc b/e.mc new file mode 100644 index 0000000..80c448b --- /dev/null +++ b/e.mc @@ -0,0 +1,10 @@ +Lei ha clacsonato + voglio Linux, Necchi come se fosse 2 + voglio Bernarda, Necchi come se fosse 1 + voglio testate, Mascetti come se fosse 101 + stuzzica bituma, che se continui ti arrivano + testate a posterdati + e brematura anche, se Linux maggiore di Bernarda + + voglio pazzofurioso, Necchi come se fosse 0 + vaffanzum pazzofurioso! From 5399eabc2d7f3e73e90a3dd2ca2fe6dd68603aa8 Mon Sep 17 00:00:00 2001 From: CaiMingshi Date: Mon, 10 Dec 2018 23:42:31 +0800 Subject: [PATCH 23/63] add NuSMV e --- e.smv | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 e.smv diff --git a/e.smv b/e.smv new file mode 100644 index 0000000..d207d9e --- /dev/null +++ b/e.smv @@ -0,0 +1,8 @@ +MODULE e + VAR + e: { e }; + ASSIGN + init(e) := e; + next(e) := e; + esac; + SPEC AG ( TRUE -> AF e = e) From 8a62d1f9b61157ac116506c567f16e67baa9077d Mon Sep 17 00:00:00 2001 From: CaiMingshi Date: Mon, 10 Dec 2018 23:51:00 +0800 Subject: [PATCH 24/63] lint --- e.smv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.smv b/e.smv index d207d9e..37ebf7e 100644 --- a/e.smv +++ b/e.smv @@ -1,6 +1,6 @@ MODULE e VAR - e: { e }; + e : { e }; ASSIGN init(e) := e; next(e) := e; From 8b6b28886179231025a289761d4313f453ee6eb2 Mon Sep 17 00:00:00 2001 From: Toomas Vooglaid Date: Mon, 10 Dec 2018 17:52:56 +0200 Subject: [PATCH 25/63] Update e.red --- e.red | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/e.red b/e.red index 343e4ec..06a72bf 100644 --- a/e.red +++ b/e.red @@ -1,4 +1 @@ -Red [] -while [1][ - print "E" -] +Red [] forever [prin "e"] From ba2f9317c38aeee609c1701b55a9c0a3b698a1ae Mon Sep 17 00:00:00 2001 From: Qingyu Deng Date: Tue, 11 Dec 2018 00:05:25 +0800 Subject: [PATCH 26/63] eeeee with vue --- e.vue | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 e.vue diff --git a/e.vue b/e.vue new file mode 100644 index 0000000..5e8c498 --- /dev/null +++ b/e.vue @@ -0,0 +1,28 @@ + + + + + + From ba741886a9460444443b8ec0aa3f5a567bdb35fb Mon Sep 17 00:00:00 2001 From: Mirko Date: Mon, 10 Dec 2018 17:30:04 +0100 Subject: [PATCH 27/63] eeeeeeeeethereum meeeeeeeessageeeeeees --- eeeeee.sol | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 eeeeee.sol diff --git a/eeeeee.sol b/eeeeee.sol new file mode 100644 index 0000000..7363150 --- /dev/null +++ b/eeeeee.sol @@ -0,0 +1,15 @@ +pragma solidity ^0.5.0; + +contract EEEEEEEEEE { + + mapping (address => string) meeeeeeeeeessage; + + function sendMeeeeeeeeeessage(address _recipieeeeeeeeeent, string memory _meeeeeeeeeessage) public{ + meeeeeeeeeessage[_recipieeeeeeeeeent] = _meeeeeeeeeessage; + } + + function readMeeeeeeeeeessage() public view returns (string memory){ + return meeeeeeeeeessage[msg.sender]; + } + +} From d4188c156a91507165bb41a9bb9dae41f07b397b Mon Sep 17 00:00:00 2001 From: Mirko Date: Mon, 10 Dec 2018 17:33:17 +0100 Subject: [PATCH 28/63] Rename eeeeee.sol to e.sol --- eeeeee.sol => e.sol | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename eeeeee.sol => e.sol (100%) diff --git a/eeeeee.sol b/e.sol similarity index 100% rename from eeeeee.sol rename to e.sol From 3d4ac2a7cbab6142c54512f622b9cad82ee4583c Mon Sep 17 00:00:00 2001 From: Sanggu Han Date: Tue, 11 Dec 2018 02:11:01 +0900 Subject: [PATCH 29/63] =?UTF-8?q?let=20=EC=95=84=ED=9D=AC(aheui)=20spits?= =?UTF-8?q?=20e=20foreeeeeeeeeeeeeeever?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit let [aheui](https://aheui.github.io/specification.en) - `pure Korean programming lang.` - spits e foreeeeeeeeeeeeever you can check result in [here](http://aheui.github.io/jsaheui/jsaheui_en.html) --- e.aheui | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 e.aheui diff --git a/e.aheui b/e.aheui new file mode 100644 index 0000000..a6c9f72 --- /dev/null +++ b/e.aheui @@ -0,0 +1,3 @@ +밝붇몋 +뚜벌이 +따밤툐 From b99437ff28733665dc694dbc1d019c18e76a95f1 Mon Sep 17 00:00:00 2001 From: Bruno Pasquini Baptista Affonso Date: Mon, 10 Dec 2018 15:19:13 -0200 Subject: [PATCH 30/63] Bambam's "It's show time" Recursive Language e.birl --- e.birl | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 e.birl diff --git a/e.birl b/e.birl new file mode 100644 index 0000000..ee57ec8 --- /dev/null +++ b/e.birl @@ -0,0 +1,4 @@ +HORA DO SHOW + CE QUER VER ESSA PORRA? ("e"); + BORA CUMPADE 0; +BIRL From 6f6fc6331e4ac3a3f37edb0cbb14370ee7c20491 Mon Sep 17 00:00:00 2001 From: Richard Patel Date: Mon, 10 Dec 2018 19:05:35 +0100 Subject: [PATCH 31/63] Holy E --- e.hc | 1 + 1 file changed, 1 insertion(+) create mode 100644 e.hc diff --git a/e.hc b/e.hc new file mode 100644 index 0000000..2d5982f --- /dev/null +++ b/e.hc @@ -0,0 +1 @@ +while(1) Print("e"); From 0cd0c8d3ed0c3875b100422c8d9264f3ab97c136 Mon Sep 17 00:00:00 2001 From: Becky <32199965+rebeccc@users.noreply.github.com> Date: Mon, 10 Dec 2018 13:09:49 -0500 Subject: [PATCH 32/63] Create e_lc3.asm --- e_lc3.asm | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 e_lc3.asm diff --git a/e_lc3.asm b/e_lc3.asm new file mode 100644 index 0000000..625775f --- /dev/null +++ b/e_lc3.asm @@ -0,0 +1,11 @@ +.ORIG x3000 + + AND R0, R0, #0 + LEA R0, e + PUTS + +HALT + +e .STRINGZ "e" + +.END From 360388b529916874f552b4cb4357e35c65f9f650 Mon Sep 17 00:00:00 2001 From: lemon-sherbet Date: Mon, 10 Dec 2018 19:12:20 +0100 Subject: [PATCH 33/63] gameboy --- e.gb | Bin 0 -> 32768 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 e.gb diff --git a/e.gb b/e.gb new file mode 100644 index 0000000000000000000000000000000000000000..ca1129520787be3a499ca3a18fa68509b7bb7973 GIT binary patch literal 32768 zcmeIzv1{B`90%~9sRlt5_e?X0V2F~TcocNe;2O~es__O72VDfEsRt7bg`z>jmELd# z4H|AxrewGwTPS!b_8>?`(Y+9ZhSDxA9CT6JM_qmO%d^rF{{boAA6U9~zo+-!@AIC{ zoBMy4(Vx%S_^y;Y)2%IWZ{K_GM)qCM-IZ$RL)p4~_x3%s|2X)m{p4BuQTuWG{=wI6 z{FV6Tb9w9I_va!%{Py5Mb5m}-^QC+vp4=37=g#t5*?!qP{Q2VI$46&pUwrm(``6~; z<)g=E-+yp$ZPCB{_35=aCjP$yZhvarHny~cWiKm>odo}6?;pcRHmvgpGYTt&JLcY77t z-^aX&INskE*=&|e^jIvG%gqM!B4@AvZo@mzkv~7j6Y#*@&W8DPXR*83W$AZojIKlf z<+3cFJZamqEDF>&2I^icn&$L$7_`5j{o=)Xy;>CozC-;sr}Nv&bd)i_Uh8?a`LaZv zcKuoAIQsnS>&1y2M}NIOe48ZLZ<{|oZ5mylW>j6|{t$b6DgeLnyrRA+x_VuLD8i0m zCxT!yab3p|+1(wzc6agi?Cqh~o8$7buE)2=_Ca-duIpD9Rlt5BbPwnAaevTT`y&tI zuG74p7-Qlgkkx#iI}Y{}u;QWnt22TXYWw`WuCY#=NBuCu`bFZn>$Ez&4+vC(u;b%1eloHDV}8A! z&9q$<(`gV)r#R0xZ+*}<#&yFmjrP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo Y6rcbFC_n)UP=Epypa2CZ@HPqj15pM1!2kdN literal 0 HcmV?d00001 From e1112be7ebf1986e324855a0f0f467c1659268fb Mon Sep 17 00:00:00 2001 From: Richard Patel Date: Mon, 10 Dec 2018 19:21:09 +0100 Subject: [PATCH 34/63] AutoHotkeeeeeeeeeey --- e.ahk | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 e.ahk diff --git a/e.ahk b/e.ahk new file mode 100644 index 0000000..1ee1c79 --- /dev/null +++ b/e.ahk @@ -0,0 +1,2 @@ +Loop + MsgBox eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee `n From 55dd77bb049882e400863a15a830d60112f83f71 Mon Sep 17 00:00:00 2001 From: Becky <32199965+rebeccc@users.noreply.github.com> Date: Mon, 10 Dec 2018 13:32:04 -0500 Subject: [PATCH 35/63] making the l00p infinite --- e_lc3.asm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/e_lc3.asm b/e_lc3.asm index 625775f..347a340 100644 --- a/e_lc3.asm +++ b/e_lc3.asm @@ -1,8 +1,10 @@ .ORIG x3000 - AND R0, R0, #0 - LEA R0, e - PUTS + +loop AND R0, R0, #0 + LEA R0, e + PUTS +BRnzp loop HALT From b1c607e366b363c9426136f8900a21136d3ceac3 Mon Sep 17 00:00:00 2001 From: David Underwood Date: Mon, 10 Dec 2018 13:47:31 -0500 Subject: [PATCH 36/63] Update e.rb Put all the `e`s on the same line Use single quotes instead of double --- e.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.rb b/e.rb index dff915d..0a51daf 100644 --- a/e.rb +++ b/e.rb @@ -1,3 +1,3 @@ loop do - puts "e" + print 'e' end From 0eb61cad849e248e9e7a3e53b0869c7f74339d61 Mon Sep 17 00:00:00 2001 From: DanielGoldfarb Date: Mon, 10 Dec 2018 13:48:10 -0500 Subject: [PATCH 37/63] Create e.e.py 45114 --- e.e.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 e.e.py diff --git a/e.e.py b/e.e.py new file mode 100644 index 0000000..9297792 --- /dev/null +++ b/e.e.py @@ -0,0 +1,8 @@ +#!/opt/bb/bin/python3 +e = list("2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035402123407849819334321068170121005627880235193033224745015853904730419957777093503660416997329725088687696640355570716226844716256079882651787134195124665201030592123667719432527867539855894489697096409754591856956380236370162112047742722836489613422516445078182442352948636372141740238893441247963574370263755294448337998016125492278509257782562092622648326277933386566481627725164019105900491644998289315056604725802778631864155195653244258698294695930801915298721172556347546396447910145904090586298496791287406870504895858671747985466775757320568128845920541334053922000113786300945560688166740016984205580403363795376452030402432256613527836951177883863874439662532249850654995886234281899707733276171783928034946501434558897071942586398772754710962953741521115136835062752602326484728703920764310059584116612054529703023647254929666938115137322753645098889031360205724817658511806303644281231496550704751025446501172721155519486685080036853228183152196003735625279449515828418829478761085263981395599006737648292244375287184624578036192981971399147564488262603903381441823262515097482798777996437308997038886778227138360577297882412561190717663946507063304527954661855096666185664709711344474016070462621568071748187784437143698821855967095910259686200235371858874856965220005031173439207321139080329363447972735595527734907178379342163701205005451326383544000186323991490705479778056697853358048966906295119432473099587655236812859041383241160722602998330535370876138939639177957454016137223618789365260538155841587186925538606164779834025435128439612946035291332594279490433729908573158029095863138268329147711639633709240031689458636060645845925126994655724839186564209752685082307544254599376917041977780085362730941710163434907696423722294352366125572508814779223151974778060569672538017180776360346245927877846585065605078084421152969752189087401966090665180351650179250461950136658543663271254963990854914420001457476081930221206602433009641270489439039717719518069908699860663658323227870937650226014929101151717763594460202324930028040186772391028809786660565118326004368850881715723866984224220102495055188169480322100251542649463981287367765892768816359831247788652014117411091360116499507662907794364600585194199856016264790761532103872755712699251827568798930276176114616254935649590379804583818232336861201624373656984670378585330527583333793990752166069238053369887956513728559388349989470741618155012539706464817194670834819721448889879067650379590366967249499254527903372963616265897603949857674139735944102374432970935547798262961459144293645142861715858733974679189757121195618738578364475844842355558105002561149239151889309946342841393608038309166281881150371528496705974162562823609216807515017772538740256425347087908913729172282861151591568372524163077225440633787593105982676094420326192428531701878177296023541306067213604600038966109364709514141718577701418060644363681546444005331608778314317444081194942297559931401188868331483280270655383300469329011574414756313999722170380461709289457909627166226074071874997535921275608441473782330327033016823719364800217328573493594756433412994302485023573221459784328264142168487872167336701061509424345698440187331281010794512722373788612605816566805371439612788873252737389039289050686532413806279602593038772769778379286840932536588073398845721874602100531148335132385004782716937621800490479559795929059165547050577751430817511269898518840871856402603530558373783242292418562564425502267215598027401261797192804713960068916382866527700975276706977703643926022437284184088325184877047263844037953016690546593746161932384036389313136432713768884102681121989127522305625675625470172508634976536728860596675274086862740791285657699631378975303466061666980421826772456053066077389962421834085988207186468262321508028828635974683965435885668550377313129658797581050121491620765676995065971534476347032085321560367482860837865680307306265763346977429563464371670939719306087696349532884683361303882943104080029687386911706666614680001512114344225602387447432525076938707777519329994213727721125884360871583483562696166198057252661220679754062106208064988291845439530152998209250300549825704339055357016865312052649561485724925738620691740369521353373253166634546658859728665945113644137033139367211856955395210845840724432383558606310680696492485123263269951460359603729725319836842336390463213671011619282171115028280160448805880238203198149309636959673583274202498824568494127386056649135252670604623445054922758115170931492187959271800194096886698683703730220047531433818109270803001720593553052070070607223399946399057131158709963577735902719628506114651483752620956534671329002599439766311454590268589897911583709341937044115512192011716488056694593813118384376562062784631049034629395002945834116482411496975832601180073169943739350696629571241027323913874175492307186245454322203955273529524024590380574450289224688628533654221381572213116328811205214648980518009202471939171055539011394331668151582884368760696110250517100739276238555338627255353883096067164466237092264680967125406186950214317621166814009759528149390722260111268115310838731761732323526360583817315103459573653822353499293582283685100781088463434998351840445170427018938199424341009057537625776757111809008816418331920196262341628816652137471732547772778348877436651882875215668571950637193656539038944936642176400312152787022236646363575550356557694888654950027085392361710550213114741374410613444554419210133617299628569489919336918472947858072915608851039678195942983318648075608367955149663644896559294818785178403877332624705194505041984774201418394773120281588684570729054405751060128525805659470304683634459265255213700806875200959345360731622611872817392807462309468536782310609792159936001994623799343421068781349734695924646975250624695861690917857397659519939299399556754271465491045686070209901260681870498417807917392407194599632306025470790177452751318680998228473086076653686685551646770291133682756310722334672611370549079536583453863719623585631261838715677411873852772292259474337378569553845624680101390572787101651296663676445187246565373040244368414081448873295784734849000301947788802046032466084287535184836495919508288832320652212810419044804724794929134228495197002260131043006241071797150279343326340799596053144605323048852897291765987601666781193793237245385720960758227717848336161358261289622611812945592746276713779448758675365754486140761193112595851265575973457301533364263076798544338576171533346232527057200530398828949903425956623297578248873502925916682589445689465599265845476269452878051650172067478541788798227680653665064191097343452887833862172615626958265447820567298775642632532159429441803994321700009054265076309558846589517170914760743713689331946909098190450129030709956622662030318264936573369841955577696378762491885286568660760056602560544571133728684020557441603083705231224258722343885412317948138855007568938112493538631863528708379984569261998179452336408742959118074745341955142035172618420084550917084568236820089773945584267921427347756087964427920270831215015640634134161716644806981548376449157390012121704154787259199894382536495051477137939914720521952907939613762110723849429061635760459623125350606853765142311534966568371511660422079639446662116325515772907097847315627827759878813649195125748332879377157145909106484164267830994972367442017586226940215940792448054125536043131799269673915754241929660731239376354213923061787675395871143610408940996608947141834069836299367536262154524729846421375289107988438130609555262272083751862983706678722443019579379378607210725427728907173285487437435578196651171661833088112912024520404868220007234403502544820283425418788465360259150644527165770004452109773558589762265548494162171498953238342160011406295071849042778925855274303522139683567901807640604213830730877446017084268827226117718084266433365178000217190344923426426629226145600433738386833555534345300426481847398921562708609565062934040526494324426144566592129122564889356965500915430642613425266847259491431423939884543248632746184284665598533231221046625989014171210344608427161661900125719587079321756969854401339762209674945418540711844643394699016269835160784892451405894094639526780735457970030705116368251948770118976400282764841416058720618418529718915401968825328930914966534575357142731848201638464483249903788606900807270932767312758196656394114896171683298045513972950668760474091542042842999354102582911350224169076943166857424252250902693903481485645130306992519959043638402842926741257342244776558417788617173726546208549829449894678735092958165263207225899236876845701782303809656788311228930580914057261086588484587310165815116753332767488701482916741970151255978257270740643180860142814902414678047232759768426963393577354293018673943971638861176420900406866339885684168100387238921448317607011668450388721236436704331409115573328018297798873659091665961240202177855885487617616198937079438005666336488436508914480557103976521469602766258359905198704230017946553679") +for _e_ in e: + if ( _e_ == '.'): + pass + else: + for __e__ in range(int(_e_)): + print('e',end='') From 1e6b99561d1977146e0221fd95be08ab23bda82c Mon Sep 17 00:00:00 2001 From: DanielGoldfarb Date: Mon, 10 Dec 2018 13:52:17 -0500 Subject: [PATCH 38/63] Update e.e.py --- e.e.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.e.py b/e.e.py index 9297792..65afae7 100644 --- a/e.e.py +++ b/e.e.py @@ -1,4 +1,4 @@ -#!/opt/bb/bin/python3 +/usr/bin/env python3 e = list("2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035402123407849819334321068170121005627880235193033224745015853904730419957777093503660416997329725088687696640355570716226844716256079882651787134195124665201030592123667719432527867539855894489697096409754591856956380236370162112047742722836489613422516445078182442352948636372141740238893441247963574370263755294448337998016125492278509257782562092622648326277933386566481627725164019105900491644998289315056604725802778631864155195653244258698294695930801915298721172556347546396447910145904090586298496791287406870504895858671747985466775757320568128845920541334053922000113786300945560688166740016984205580403363795376452030402432256613527836951177883863874439662532249850654995886234281899707733276171783928034946501434558897071942586398772754710962953741521115136835062752602326484728703920764310059584116612054529703023647254929666938115137322753645098889031360205724817658511806303644281231496550704751025446501172721155519486685080036853228183152196003735625279449515828418829478761085263981395599006737648292244375287184624578036192981971399147564488262603903381441823262515097482798777996437308997038886778227138360577297882412561190717663946507063304527954661855096666185664709711344474016070462621568071748187784437143698821855967095910259686200235371858874856965220005031173439207321139080329363447972735595527734907178379342163701205005451326383544000186323991490705479778056697853358048966906295119432473099587655236812859041383241160722602998330535370876138939639177957454016137223618789365260538155841587186925538606164779834025435128439612946035291332594279490433729908573158029095863138268329147711639633709240031689458636060645845925126994655724839186564209752685082307544254599376917041977780085362730941710163434907696423722294352366125572508814779223151974778060569672538017180776360346245927877846585065605078084421152969752189087401966090665180351650179250461950136658543663271254963990854914420001457476081930221206602433009641270489439039717719518069908699860663658323227870937650226014929101151717763594460202324930028040186772391028809786660565118326004368850881715723866984224220102495055188169480322100251542649463981287367765892768816359831247788652014117411091360116499507662907794364600585194199856016264790761532103872755712699251827568798930276176114616254935649590379804583818232336861201624373656984670378585330527583333793990752166069238053369887956513728559388349989470741618155012539706464817194670834819721448889879067650379590366967249499254527903372963616265897603949857674139735944102374432970935547798262961459144293645142861715858733974679189757121195618738578364475844842355558105002561149239151889309946342841393608038309166281881150371528496705974162562823609216807515017772538740256425347087908913729172282861151591568372524163077225440633787593105982676094420326192428531701878177296023541306067213604600038966109364709514141718577701418060644363681546444005331608778314317444081194942297559931401188868331483280270655383300469329011574414756313999722170380461709289457909627166226074071874997535921275608441473782330327033016823719364800217328573493594756433412994302485023573221459784328264142168487872167336701061509424345698440187331281010794512722373788612605816566805371439612788873252737389039289050686532413806279602593038772769778379286840932536588073398845721874602100531148335132385004782716937621800490479559795929059165547050577751430817511269898518840871856402603530558373783242292418562564425502267215598027401261797192804713960068916382866527700975276706977703643926022437284184088325184877047263844037953016690546593746161932384036389313136432713768884102681121989127522305625675625470172508634976536728860596675274086862740791285657699631378975303466061666980421826772456053066077389962421834085988207186468262321508028828635974683965435885668550377313129658797581050121491620765676995065971534476347032085321560367482860837865680307306265763346977429563464371670939719306087696349532884683361303882943104080029687386911706666614680001512114344225602387447432525076938707777519329994213727721125884360871583483562696166198057252661220679754062106208064988291845439530152998209250300549825704339055357016865312052649561485724925738620691740369521353373253166634546658859728665945113644137033139367211856955395210845840724432383558606310680696492485123263269951460359603729725319836842336390463213671011619282171115028280160448805880238203198149309636959673583274202498824568494127386056649135252670604623445054922758115170931492187959271800194096886698683703730220047531433818109270803001720593553052070070607223399946399057131158709963577735902719628506114651483752620956534671329002599439766311454590268589897911583709341937044115512192011716488056694593813118384376562062784631049034629395002945834116482411496975832601180073169943739350696629571241027323913874175492307186245454322203955273529524024590380574450289224688628533654221381572213116328811205214648980518009202471939171055539011394331668151582884368760696110250517100739276238555338627255353883096067164466237092264680967125406186950214317621166814009759528149390722260111268115310838731761732323526360583817315103459573653822353499293582283685100781088463434998351840445170427018938199424341009057537625776757111809008816418331920196262341628816652137471732547772778348877436651882875215668571950637193656539038944936642176400312152787022236646363575550356557694888654950027085392361710550213114741374410613444554419210133617299628569489919336918472947858072915608851039678195942983318648075608367955149663644896559294818785178403877332624705194505041984774201418394773120281588684570729054405751060128525805659470304683634459265255213700806875200959345360731622611872817392807462309468536782310609792159936001994623799343421068781349734695924646975250624695861690917857397659519939299399556754271465491045686070209901260681870498417807917392407194599632306025470790177452751318680998228473086076653686685551646770291133682756310722334672611370549079536583453863719623585631261838715677411873852772292259474337378569553845624680101390572787101651296663676445187246565373040244368414081448873295784734849000301947788802046032466084287535184836495919508288832320652212810419044804724794929134228495197002260131043006241071797150279343326340799596053144605323048852897291765987601666781193793237245385720960758227717848336161358261289622611812945592746276713779448758675365754486140761193112595851265575973457301533364263076798544338576171533346232527057200530398828949903425956623297578248873502925916682589445689465599265845476269452878051650172067478541788798227680653665064191097343452887833862172615626958265447820567298775642632532159429441803994321700009054265076309558846589517170914760743713689331946909098190450129030709956622662030318264936573369841955577696378762491885286568660760056602560544571133728684020557441603083705231224258722343885412317948138855007568938112493538631863528708379984569261998179452336408742959118074745341955142035172618420084550917084568236820089773945584267921427347756087964427920270831215015640634134161716644806981548376449157390012121704154787259199894382536495051477137939914720521952907939613762110723849429061635760459623125350606853765142311534966568371511660422079639446662116325515772907097847315627827759878813649195125748332879377157145909106484164267830994972367442017586226940215940792448054125536043131799269673915754241929660731239376354213923061787675395871143610408940996608947141834069836299367536262154524729846421375289107988438130609555262272083751862983706678722443019579379378607210725427728907173285487437435578196651171661833088112912024520404868220007234403502544820283425418788465360259150644527165770004452109773558589762265548494162171498953238342160011406295071849042778925855274303522139683567901807640604213830730877446017084268827226117718084266433365178000217190344923426426629226145600433738386833555534345300426481847398921562708609565062934040526494324426144566592129122564889356965500915430642613425266847259491431423939884543248632746184284665598533231221046625989014171210344608427161661900125719587079321756969854401339762209674945418540711844643394699016269835160784892451405894094639526780735457970030705116368251948770118976400282764841416058720618418529718915401968825328930914966534575357142731848201638464483249903788606900807270932767312758196656394114896171683298045513972950668760474091542042842999354102582911350224169076943166857424252250902693903481485645130306992519959043638402842926741257342244776558417788617173726546208549829449894678735092958165263207225899236876845701782303809656788311228930580914057261086588484587310165815116753332767488701482916741970151255978257270740643180860142814902414678047232759768426963393577354293018673943971638861176420900406866339885684168100387238921448317607011668450388721236436704331409115573328018297798873659091665961240202177855885487617616198937079438005666336488436508914480557103976521469602766258359905198704230017946553679") for _e_ in e: if ( _e_ == '.'): From 9f7c5508c6122adc8ff7643b4a602cb75f699ccd Mon Sep 17 00:00:00 2001 From: DanielGoldfarb Date: Mon, 10 Dec 2018 13:53:34 -0500 Subject: [PATCH 39/63] Update e.e.py --- e.e.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.e.py b/e.e.py index 65afae7..b809a9b 100644 --- a/e.e.py +++ b/e.e.py @@ -1,4 +1,4 @@ -/usr/bin/env python3 +#!/usr/bin/env python3 e = list("2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035402123407849819334321068170121005627880235193033224745015853904730419957777093503660416997329725088687696640355570716226844716256079882651787134195124665201030592123667719432527867539855894489697096409754591856956380236370162112047742722836489613422516445078182442352948636372141740238893441247963574370263755294448337998016125492278509257782562092622648326277933386566481627725164019105900491644998289315056604725802778631864155195653244258698294695930801915298721172556347546396447910145904090586298496791287406870504895858671747985466775757320568128845920541334053922000113786300945560688166740016984205580403363795376452030402432256613527836951177883863874439662532249850654995886234281899707733276171783928034946501434558897071942586398772754710962953741521115136835062752602326484728703920764310059584116612054529703023647254929666938115137322753645098889031360205724817658511806303644281231496550704751025446501172721155519486685080036853228183152196003735625279449515828418829478761085263981395599006737648292244375287184624578036192981971399147564488262603903381441823262515097482798777996437308997038886778227138360577297882412561190717663946507063304527954661855096666185664709711344474016070462621568071748187784437143698821855967095910259686200235371858874856965220005031173439207321139080329363447972735595527734907178379342163701205005451326383544000186323991490705479778056697853358048966906295119432473099587655236812859041383241160722602998330535370876138939639177957454016137223618789365260538155841587186925538606164779834025435128439612946035291332594279490433729908573158029095863138268329147711639633709240031689458636060645845925126994655724839186564209752685082307544254599376917041977780085362730941710163434907696423722294352366125572508814779223151974778060569672538017180776360346245927877846585065605078084421152969752189087401966090665180351650179250461950136658543663271254963990854914420001457476081930221206602433009641270489439039717719518069908699860663658323227870937650226014929101151717763594460202324930028040186772391028809786660565118326004368850881715723866984224220102495055188169480322100251542649463981287367765892768816359831247788652014117411091360116499507662907794364600585194199856016264790761532103872755712699251827568798930276176114616254935649590379804583818232336861201624373656984670378585330527583333793990752166069238053369887956513728559388349989470741618155012539706464817194670834819721448889879067650379590366967249499254527903372963616265897603949857674139735944102374432970935547798262961459144293645142861715858733974679189757121195618738578364475844842355558105002561149239151889309946342841393608038309166281881150371528496705974162562823609216807515017772538740256425347087908913729172282861151591568372524163077225440633787593105982676094420326192428531701878177296023541306067213604600038966109364709514141718577701418060644363681546444005331608778314317444081194942297559931401188868331483280270655383300469329011574414756313999722170380461709289457909627166226074071874997535921275608441473782330327033016823719364800217328573493594756433412994302485023573221459784328264142168487872167336701061509424345698440187331281010794512722373788612605816566805371439612788873252737389039289050686532413806279602593038772769778379286840932536588073398845721874602100531148335132385004782716937621800490479559795929059165547050577751430817511269898518840871856402603530558373783242292418562564425502267215598027401261797192804713960068916382866527700975276706977703643926022437284184088325184877047263844037953016690546593746161932384036389313136432713768884102681121989127522305625675625470172508634976536728860596675274086862740791285657699631378975303466061666980421826772456053066077389962421834085988207186468262321508028828635974683965435885668550377313129658797581050121491620765676995065971534476347032085321560367482860837865680307306265763346977429563464371670939719306087696349532884683361303882943104080029687386911706666614680001512114344225602387447432525076938707777519329994213727721125884360871583483562696166198057252661220679754062106208064988291845439530152998209250300549825704339055357016865312052649561485724925738620691740369521353373253166634546658859728665945113644137033139367211856955395210845840724432383558606310680696492485123263269951460359603729725319836842336390463213671011619282171115028280160448805880238203198149309636959673583274202498824568494127386056649135252670604623445054922758115170931492187959271800194096886698683703730220047531433818109270803001720593553052070070607223399946399057131158709963577735902719628506114651483752620956534671329002599439766311454590268589897911583709341937044115512192011716488056694593813118384376562062784631049034629395002945834116482411496975832601180073169943739350696629571241027323913874175492307186245454322203955273529524024590380574450289224688628533654221381572213116328811205214648980518009202471939171055539011394331668151582884368760696110250517100739276238555338627255353883096067164466237092264680967125406186950214317621166814009759528149390722260111268115310838731761732323526360583817315103459573653822353499293582283685100781088463434998351840445170427018938199424341009057537625776757111809008816418331920196262341628816652137471732547772778348877436651882875215668571950637193656539038944936642176400312152787022236646363575550356557694888654950027085392361710550213114741374410613444554419210133617299628569489919336918472947858072915608851039678195942983318648075608367955149663644896559294818785178403877332624705194505041984774201418394773120281588684570729054405751060128525805659470304683634459265255213700806875200959345360731622611872817392807462309468536782310609792159936001994623799343421068781349734695924646975250624695861690917857397659519939299399556754271465491045686070209901260681870498417807917392407194599632306025470790177452751318680998228473086076653686685551646770291133682756310722334672611370549079536583453863719623585631261838715677411873852772292259474337378569553845624680101390572787101651296663676445187246565373040244368414081448873295784734849000301947788802046032466084287535184836495919508288832320652212810419044804724794929134228495197002260131043006241071797150279343326340799596053144605323048852897291765987601666781193793237245385720960758227717848336161358261289622611812945592746276713779448758675365754486140761193112595851265575973457301533364263076798544338576171533346232527057200530398828949903425956623297578248873502925916682589445689465599265845476269452878051650172067478541788798227680653665064191097343452887833862172615626958265447820567298775642632532159429441803994321700009054265076309558846589517170914760743713689331946909098190450129030709956622662030318264936573369841955577696378762491885286568660760056602560544571133728684020557441603083705231224258722343885412317948138855007568938112493538631863528708379984569261998179452336408742959118074745341955142035172618420084550917084568236820089773945584267921427347756087964427920270831215015640634134161716644806981548376449157390012121704154787259199894382536495051477137939914720521952907939613762110723849429061635760459623125350606853765142311534966568371511660422079639446662116325515772907097847315627827759878813649195125748332879377157145909106484164267830994972367442017586226940215940792448054125536043131799269673915754241929660731239376354213923061787675395871143610408940996608947141834069836299367536262154524729846421375289107988438130609555262272083751862983706678722443019579379378607210725427728907173285487437435578196651171661833088112912024520404868220007234403502544820283425418788465360259150644527165770004452109773558589762265548494162171498953238342160011406295071849042778925855274303522139683567901807640604213830730877446017084268827226117718084266433365178000217190344923426426629226145600433738386833555534345300426481847398921562708609565062934040526494324426144566592129122564889356965500915430642613425266847259491431423939884543248632746184284665598533231221046625989014171210344608427161661900125719587079321756969854401339762209674945418540711844643394699016269835160784892451405894094639526780735457970030705116368251948770118976400282764841416058720618418529718915401968825328930914966534575357142731848201638464483249903788606900807270932767312758196656394114896171683298045513972950668760474091542042842999354102582911350224169076943166857424252250902693903481485645130306992519959043638402842926741257342244776558417788617173726546208549829449894678735092958165263207225899236876845701782303809656788311228930580914057261086588484587310165815116753332767488701482916741970151255978257270740643180860142814902414678047232759768426963393577354293018673943971638861176420900406866339885684168100387238921448317607011668450388721236436704331409115573328018297798873659091665961240202177855885487617616198937079438005666336488436508914480557103976521469602766258359905198704230017946553679") for _e_ in e: if ( _e_ == '.'): From 09efd4761a1bb58f73d659c7bc4d2f7aff3e8c3a Mon Sep 17 00:00:00 2001 From: Aidan Harris Date: Mon, 10 Dec 2018 19:45:54 +0000 Subject: [PATCH 40/63] Added a Dockerfileeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee --- Dockerfile | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1a5e67a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,5 @@ +FROM busybox + +RUN seq 1 10000 | while read -r e; do echo -ne 'e'; done; echo e; + +CMD strings /dev/urandom | grep -oE 'e' | tr -d '\n' From a1c202b8c27044498802abed0c7c5e6fb1c99c34 Mon Sep 17 00:00:00 2001 From: Aidan Harris Date: Mon, 10 Dec 2018 19:55:51 +0000 Subject: [PATCH 41/63] Dockerfile -> e.Dockerfile --- e.Dockerfile | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 e.Dockerfile diff --git a/e.Dockerfile b/e.Dockerfile new file mode 100644 index 0000000..1a5e67a --- /dev/null +++ b/e.Dockerfile @@ -0,0 +1,5 @@ +FROM busybox + +RUN seq 1 10000 | while read -r e; do echo -ne 'e'; done; echo e; + +CMD strings /dev/urandom | grep -oE 'e' | tr -d '\n' From 4e2824add86ec6733716c25399f2f9005c6b610e Mon Sep 17 00:00:00 2001 From: Ian Bertolacci Date: Mon, 10 Dec 2018 12:58:52 -0700 Subject: [PATCH 42/63] chpl e distributed and parallelized for maximum throughput. Concurrently safe because ordering of task A printing before B (or B before A) does not change output ("ee" vs "ee"). --- e.chpl | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 e.chpl diff --git a/e.chpl b/e.chpl new file mode 100644 index 0000000..7c60117 --- /dev/null +++ b/e.chpl @@ -0,0 +1,9 @@ +coforall locale in Locales { + on locale { + coforall task_id in 0..#locale.maxTaskPar { + while( true ) { + write( "e" ); + } + } + } +} From 2eeac770b3ee651759f431db222aad6f4eee65f0 Mon Sep 17 00:00:00 2001 From: Aidan Harris Date: Mon, 10 Dec 2018 20:01:01 +0000 Subject: [PATCH 43/63] Delete Dockerfile --- Dockerfile | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 1a5e67a..0000000 --- a/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM busybox - -RUN seq 1 10000 | while read -r e; do echo -ne 'e'; done; echo e; - -CMD strings /dev/urandom | grep -oE 'e' | tr -d '\n' From 3f60e1ec056e7cf184d171273aa5d04047635557 Mon Sep 17 00:00:00 2001 From: Andrzej Ressel Date: Mon, 10 Dec 2018 21:16:04 +0100 Subject: [PATCH 44/63] args are optional now https://kotlinlang.org/docs/reference/whatsnew13.html#parameterless-main --- e.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.kt b/e.kt index e76cb64..1e0b929 100644 --- a/e.kt +++ b/e.kt @@ -1,4 +1,4 @@ -fun main(args: Array) { +fun main() { while (true) { print("e") } From 7b9c2ceecec3ed02219b0020074db4ea048109e3 Mon Sep 17 00:00:00 2001 From: RobertCraigie Date: Mon, 10 Dec 2018 20:33:24 +0000 Subject: [PATCH 45/63] eeeeeeeeee e.arnoldc --- e.arnoldc | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 e.arnoldc diff --git a/e.arnoldc b/e.arnoldc new file mode 100644 index 0000000..3794687 --- /dev/null +++ b/e.arnoldc @@ -0,0 +1,5 @@ +IT'S SHOWTIME + STICK AROUND @NO PROBLEMO + TALK TO THE HAND "e" + CHILL +YOU HAVE BEEN TERMINATED \ No newline at end of file From 56b317eaf24f31c7e756e08f53f790f9fe953e69 Mon Sep 17 00:00:00 2001 From: Mariell Date: Tue, 11 Dec 2018 18:00:13 +0100 Subject: [PATCH 46/63] make e.c follow e.cpp's example --- e.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/e.c b/e.c index b1ce7ca..faeb706 100644 --- a/e.c +++ b/e.c @@ -1,13 +1,22 @@ #include +#define e "e" +#define ee int +#define eee main +#define eeee ( +#define eeeee ) +#define eeeeee { +#define eeeeeee } +#define eeeeeeee for +#define eeeeeeeee ; +#define eeeeeeeeee printf +#define eeeeeeeeeee return +#define eeeeeeeeeeee on_exit +#define eeeeeeeeeeeee [ +#define eeeeeeeeeeeeee ] +#define eeeeeeeeeeeeeee 0 -int main() -{ - for (;;) { - printf("e"); - } -} - -int on_exit() -{ - return 'e'; -} +ee eee eeee eeeee eeeeee eeeeeeee eeee eeeeeeeee +eeeeeeeee eeeee eeeeee eeeeeeeeee eeee e eeeee +eeeeeeeee eeeeeee eeeeeee ee eeeeeeeeeeee eeee +eeeee eeeeee eeeeeeeeeee e eeeeeeeeeeeee +eeeeeeeeeeeeeee eeeeeeeeeeeeee eeeeeeeee eeeeeee From 015237056d5b10148a5262b4031409dfaf9c0e07 Mon Sep 17 00:00:00 2001 From: yvbbrjdr Date: Tue, 11 Dec 2018 09:05:24 -0800 Subject: [PATCH 47/63] Make e.bf print "e" infinitely --- e.bf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.bf b/e.bf index 86022c8..a83e6a7 100644 --- a/e.bf +++ b/e.bf @@ -1 +1 @@ -++++++++++[>++++++++++<-]>+. \ No newline at end of file +++++++++++[>++++++++++<-]>+[.] From ba66bdcd32e0c946f0e531e21aa4b9c56e85566d Mon Sep 17 00:00:00 2001 From: ultrasilicon Date: Tue, 11 Dec 2018 12:08:26 -0500 Subject: [PATCH 48/63] Added e.qml for QML languageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee --- e.qml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 e.qml diff --git a/e.qml b/e.qml new file mode 100644 index 0000000..9890a98 --- /dev/null +++ b/e.qml @@ -0,0 +1,8 @@ +import QtQuick 2.0 +Image { + width: 1000; height: 1000 + fillMode: Image.Tile + source: "https://raw.githubusercontent.com/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee/eeeeeeeeeeeeeeeeeeeeeeee/e.png" + sourceSize.width: 10 + sourceSize.height: 10 +} \ No newline at end of file From fe905b683b3a851359f40f82973a0e7aa3d40415 Mon Sep 17 00:00:00 2001 From: Mariell Date: Tue, 11 Dec 2018 18:31:25 +0100 Subject: [PATCH 49/63] e but it's bare metal --- e_standalone.asm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 e_standalone.asm diff --git a/e_standalone.asm b/e_standalone.asm new file mode 100644 index 0000000..4ad4e1a --- /dev/null +++ b/e_standalone.asm @@ -0,0 +1,27 @@ +; Linker file: +; ENTRY(start); SECTIONS { . = 1M; .boot : { KEEP(*(.multiboot_header)) } .text : { *(.text) } } +; compile: nasm -i. -felf64 e_standalone.asm -o e + + section .multiboot_header + bits 32 +header_start: + dd 0xe85250d6 + dd 0 + dd header_end - header_start + dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start)) + dw 0 + dw 0 + dd 8 +header_end: + +global start +section .text +bits 32 +start: + mov ecx, 0 +loop: + mov dword [0xb8000 + (ecx * 2)], (15 << 8) | (0x00000065) + inc ecx + cmp ecx, 2000 + jne loop + hlt From b10a70cfea9c07b2641d747c6f4fc829e2be1519 Mon Sep 17 00:00:00 2001 From: Julien CHRISTOPHE Date: Tue, 11 Dec 2018 18:37:02 +0100 Subject: [PATCH 50/63] show the True value of eeeee --- e.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e.py b/e.py index f444fb1..d81d354 100644 --- a/e.py +++ b/e.py @@ -1,7 +1,7 @@ import sys try: - while True: + while 'e': sys.stdout.write('e') except KeyboardInterrupt: sys.exit('e') From 0c31497404fe7877e0abfe568687a5fe809b8aac Mon Sep 17 00:00:00 2001 From: yvbbrjdr Date: Tue, 11 Dec 2018 09:54:34 -0800 Subject: [PATCH 51/63] Create e_linux_riscv64.S --- e_linux_riscv64.S | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 e_linux_riscv64.S diff --git a/e_linux_riscv64.S b/e_linux_riscv64.S new file mode 100644 index 0000000..09547f3 --- /dev/null +++ b/e_linux_riscv64.S @@ -0,0 +1,12 @@ + .data +e: .byte 'e' + + .text + .globl _start +_start: + li a7, 64 + la a1, e + li a2, 1 +l: li a0, 1 + ecall + j l From a26d4729f15a0b710afa0d29477c597b53982276 Mon Sep 17 00:00:00 2001 From: Tim Boonstra Date: Tue, 11 Dec 2018 12:00:15 -0600 Subject: [PATCH 52/63] Create e.cfm --- e.cfm | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 e.cfm diff --git a/e.cfm b/e.cfm new file mode 100644 index 0000000..4c8b21c --- /dev/null +++ b/e.cfm @@ -0,0 +1,5 @@ + + while(true){ + writeOutput('e'); + } + From cee9f10666bdf6bd22d5d16bbb16a306bd78991f Mon Sep 17 00:00:00 2001 From: PatrickKing Date: Tue, 11 Dec 2018 11:19:00 -0700 Subject: [PATCH 53/63] Add coffeeeeeescript --- e.coffee | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 e.coffee diff --git a/e.coffee b/e.coffee new file mode 100644 index 0000000..05b65e2 --- /dev/null +++ b/e.coffee @@ -0,0 +1,2 @@ +while 'e' + console.log 'e' From e013acb6c4e787b3a21251a047b81e37a136b980 Mon Sep 17 00:00:00 2001 From: David Buchanan Date: Tue, 11 Dec 2018 18:19:29 +0000 Subject: [PATCH 54/63] fasteeeeeeeeeeeeeeeeeer --- eee.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 eee.c diff --git a/eee.c b/eee.c new file mode 100644 index 0000000..b99bce0 --- /dev/null +++ b/eee.c @@ -0,0 +1,21 @@ +#include +#define e "e" +#define ee e e +#define eee ee ee +#define eeee eee eee +#define eeeee eeee eeee +#define eeeeee eeeee eeeee +#define eeeeeee eeeeee eeeeee +#define eeeeeeee eeeeeee eeeeeee +#define eeeeeeeee eeeeeeee eeeeeeee +#define eeeeeeeeee eeeeeeeee eeeeeeeee +#define eeeeeeeeeee eeeeeeeeee eeeeeeeeee +#define eeeeeeeeeeee eeeeeeeeeee eeeeeeeeeee +#define eeeeeeeeeeeee eeeeeeeeeeee eeeeeeeeeeee +#define eeeeeeeeeeeeee eeeeeeeeeeeee eeeeeeeeeeeee +#define eeeeeeeeeeeeeee eeeeeeeeeeeeee eeeeeeeeeeeeee +#define e_e_e(e, ee, eee) write(e, ee, eee) +#define e_e() int main() +#define e_(e) while(e) + +e_e() { e_(e) e_e_e(1, eeeeeeeeeeeeeee, 0x4000); } From cf1866f850b483c3abac1131f5a26eecefbcd2c8 Mon Sep 17 00:00:00 2001 From: Stepan Vanzuriak Date: Tue, 11 Dec 2018 20:32:34 +0200 Subject: [PATCH 55/63] React JSX eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee --- e.jsx | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 e.jsx diff --git a/e.jsx b/e.jsx new file mode 100644 index 0000000..0555b61 --- /dev/null +++ b/e.jsx @@ -0,0 +1,33 @@ +import React, { Component } from 'react'; + +class E extends Component { + constructor(props) { + super(props); + + this.state = { + e: 0, + }; + + this.timer = this.timer.bind(this); + } + + componentDidMount() { + const eId = setInterval(this.timer, 10); + this.setState({ eInterval: eId }); + } + + componentWillUnmount() { + clearInterval(this.state.eInterval); + } + + timer() { + this.setState({ e: this.state.e + 1 }); + } + + render() { + const e = Array(this.state.e).fill(

e

); + return e; + } +} + +export default E; From 0e597e6969710fb5f66e39646f3d8dd6322e180f Mon Sep 17 00:00:00 2001 From: Marc-Alexandre Espiaut Date: Tue, 11 Dec 2018 19:43:51 +0100 Subject: [PATCH 56/63] Add informativeeeee documeeeeeeeeent --- posteeeer.pdf | Bin 0 -> 8754 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 posteeeer.pdf diff --git a/posteeeer.pdf b/posteeeer.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c1c7c8c2011bfd90b3ba62511dbf4f9afad5a20d GIT binary patch literal 8754 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 Date: Tue, 11 Dec 2018 13:04:56 -0600 Subject: [PATCH 57/63] include using statements (for increased readability, obviously.) --- e.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/e.cs b/e.cs index 7d83984..6e0b5a1 100644 --- a/e.cs +++ b/e.cs @@ -1,16 +1,17 @@ -using System; +using Eeeeeee = System.Console; +using eeee = System.Boolean; namespace e { class E { - const bool e = true; + const eeee e = true; - static void Main(string[] args) + static void Main(string[] eeee) { while (e) { - Console.Write('e'); + Eeeeeee.Write('e'); } } } From 311b0b87d0811cd96d857f109ca724179ad57348 Mon Sep 17 00:00:00 2001 From: Yechiel Kalmenson Date: Tue, 11 Dec 2018 14:27:27 -0500 Subject: [PATCH 58/63] eeeeeeeeeeeeeeeeeerb --- e.html.erb | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 e.html.erb diff --git a/e.html.erb b/e.html.erb new file mode 100644 index 0000000..e67f1df --- /dev/null +++ b/e.html.erb @@ -0,0 +1,3 @@ +<% while "e" do %> + e +<% end %> From 5d067f3bf61cfc0a310af90e3e9ca5ceb5bfbb72 Mon Sep 17 00:00:00 2001 From: "@sashkab" Date: Tue, 11 Dec 2018 14:36:40 -0500 Subject: [PATCH 59/63] e.q --- e.q | 1 + 1 file changed, 1 insertion(+) create mode 100644 e.q diff --git a/e.q b/e.q new file mode 100644 index 0000000..0a56f21 --- /dev/null +++ b/e.q @@ -0,0 +1 @@ +{while[1;-1 "e"]} From 918ea161edbaac956523ac52312e5a230c91cb10 Mon Sep 17 00:00:00 2001 From: Mariell Date: Tue, 11 Dec 2018 20:58:29 +0100 Subject: [PATCH 60/63] add e.sm (smalltalk) (#565) --- e.sm | 1 + 1 file changed, 1 insertion(+) create mode 100644 e.sm diff --git a/e.sm b/e.sm new file mode 100644 index 0000000..416776e --- /dev/null +++ b/e.sm @@ -0,0 +1 @@ +[true] whileTrue:[ Transcript show: 'e'. ]. From 4c8b8ad4c25bc53937eb59a87ea7b75f1cc520a6 Mon Sep 17 00:00:00 2001 From: Adorable-Catgirl Date: Tue, 11 Dec 2018 15:09:06 -0500 Subject: [PATCH 61/63] phone home --- e.t | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 e.t diff --git a/e.t b/e.t new file mode 100644 index 0000000..ac8f043 --- /dev/null +++ b/e.t @@ -0,0 +1,15 @@ +terralib.nativetarget = terralib.newtarget { + Triple = "x86_64-pc-linux-gnu", + CPU = "x86-64", +} + +stdio = terralib.includec("stdio.h") + +terra main(argc : int, argv : &rawstring) + while true do + stdio.printf("e") + end + return 0 +end + +main(0, nil) From a53699f0cd3f0af061bf535775282919b53b125a Mon Sep 17 00:00:00 2001 From: Jon Q Date: Tue, 11 Dec 2018 15:28:38 -0500 Subject: [PATCH 62/63] Add e.eps --- e.eps | Bin 0 -> 225794 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 e.eps diff --git a/e.eps b/e.eps new file mode 100644 index 0000000000000000000000000000000000000000..10c4dfc60687154639244c59dbb520dcfd2f242d GIT binary patch literal 225794 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 i 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 V`di1#fBy&H((r=+>DO26e+PEZh6exu literal 0 HcmV?d00001 From ef9529d467741846415449b9d8f895bf33b38953 Mon Sep 17 00:00:00 2001 From: Christoph Welcz Date: Tue, 11 Dec 2018 21:53:39 +0100 Subject: [PATCH 63/63] Haskell without any additional imports --- e.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/e.hs b/e.hs index a4a4f08..f6a2ec5 100644 --- a/e.hs +++ b/e.hs @@ -1,3 +1,2 @@ -import Control.Monad.Fix -main = putStr $ fix ('e':) +main = putStr $ cycle "e"