From 565f97950a35e5dd001887c12edc32150b220906 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Thu, 15 Nov 2007 23:09:38 -0600 Subject: [PATCH 01/90] Fix redundancy in tty-listener --- extra/raptor/raptor.factor | 5 ++--- extra/raptor/readme-0.1.1 | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/extra/raptor/raptor.factor b/extra/raptor/raptor.factor index b0b9c05895..a3b4cbfd0a 100644 --- a/extra/raptor/raptor.factor +++ b/extra/raptor/raptor.factor @@ -40,9 +40,8 @@ USING: io io.files io.streams.lines io.streams.plain io.streams.duplex listener ; : tty-listener ( tty -- ) - [ ] - [ ] - bi [ listener ] with-stream ; + [ ] [ ] bi + [ listener ] with-stream ; : forever ( quot -- ) [ call ] [ forever ] bi ; diff --git a/extra/raptor/readme-0.1.1 b/extra/raptor/readme-0.1.1 index 303fb416c4..bb5d4c0ff8 100644 --- a/extra/raptor/readme-0.1.1 +++ b/extra/raptor/readme-0.1.1 @@ -8,9 +8,22 @@ Raptor Linux is a mod of Ubuntu 6.06 (Dapper Drake) This is unlikely to work on another version of Ubuntu, much less another Linux distribution. +*** Features *** + + * /sbin/init is replaced with Factor + * Virtual terminals managed by Factor + * Listeners run on virtual terminals + * Native support for static ip networking + * Crontab replacement + *** Install *** + # mkdir -v /etc/raptor + + # cp -v /scratch/factor/extra/raptor/{config,cronjobs}.factor /etc/raptor + ( scratchpad ) USE: raptor + ( scratchpad ) reload-raptor-config ( scratchpad ) save # mv -v /sbin/{init,init.orig} @@ -19,10 +32,6 @@ another Linux distribution. # cp -v /scratch/factor/factor.image /sbin/init.image - # mkdir -v /etc/raptor - - # cp -v /scratch/factor/extra/raptor/config.factor /etc/raptor/config.factor - *** Static IP networking *** If you use a static IP in your network then Factor can take care of From f927a01370f3d7d77717f64635c65cd9bc71a534 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Sun, 18 Nov 2007 15:19:02 -0600 Subject: [PATCH 02/90] unix: Added words to inspect status from wait/waitpid --- extra/unix/unix.factor | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/extra/unix/unix.factor b/extra/unix/unix.factor index 0854754dcb..10ff7a9efa 100644 --- a/extra/unix/unix.factor +++ b/extra/unix/unix.factor @@ -166,6 +166,10 @@ FUNCTION: time_t time ( time_t* t ) ; FUNCTION: int unlink ( char* path ) ; FUNCTION: int utimes ( char* path, timeval[2] times ) ; +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! wait and waitpid +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Flags for waitpid : WNOHANG 1 ; @@ -176,7 +180,27 @@ FUNCTION: int utimes ( char* path, timeval[2] times ) ; : WCONTINUED 8 ; : WNOWAIT HEX: 1000000 ; +! Examining status + +: WTERMSIG ( status -- value ) HEX: 7f bitand ; + +: WIFEXITED ( status -- ? ) WTERMSIG zero? ; + +: WEXITSTATUS ( status -- value ) HEX: ff00 bitand -8 shift ; + +: WIFSIGNALED ( status -- ? ) HEX: 7f bitand 1+ -1 shift 0 > ; + +: WCOREFLAG ( -- value ) HEX: 80 ; + +: WCOREDUMP ( status -- ? ) WCOREFLAG bitand zero? not ; + +: WIFSTOPPED ( status -- ? ) HEX: ff bitand HEX: 7f = ; + +: WSTOPSIG ( status -- value ) WEXITSTATUS ; + FUNCTION: pid_t wait ( int* status ) ; FUNCTION: pid_t waitpid ( pid_t wpid, int* status, int options ) ; +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + FUNCTION: ssize_t write ( int fd, void* buf, size_t nbytes ) ; From 76146310db62e8f265e078b0f035e4861906ee72 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Tue, 20 Nov 2007 01:57:22 -0600 Subject: [PATCH 03/90] Add `{ parsing word to bake --- extra/bake/bake.factor | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/extra/bake/bake.factor b/extra/bake/bake.factor index 5e1700c6e2..437a42d546 100644 --- a/extra/bake/bake.factor +++ b/extra/bake/bake.factor @@ -1,6 +1,6 @@ -USING: kernel parser namespaces quotations vectors strings -sequences assocs tuples math combinators ; +USING: kernel parser namespaces quotations arrays vectors strings + sequences assocs tuples math combinators ; IN: bake @@ -48,4 +48,8 @@ DEFER: bake : bake-items ( seq -- ) [ bake-item ] each ; : bake ( seq -- seq ) - [ reset-building save-exemplar bake-items finish-baking ] with-scope ; \ No newline at end of file + [ reset-building save-exemplar bake-items finish-baking ] with-scope ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: `{ \ } [ >array ] parse-literal \ bake parsed ; parsing \ No newline at end of file From 350a23e525f10f8041db3c2a02c12f6d71ee219c Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Tue, 20 Nov 2007 01:57:44 -0600 Subject: [PATCH 04/90] Add factor-refresh-all function to factor.el --- misc/factor.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/misc/factor.el b/misc/factor.el index 19e29843d6..88af0a6dab 100644 --- a/misc/factor.el +++ b/misc/factor.el @@ -166,6 +166,9 @@ (beginning-of-line) (insert "! ")) +(defun factor-refresh-all () + (interactive) + (comint-send-string "*factor*" "refresh-all\n")) (define-key factor-mode-map "\C-c\C-f" 'factor-run-file) (define-key factor-mode-map "\C-c\C-r" 'factor-send-region) From 1d4d78c2ce404e2827488d2bced2b15710cb5512 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Tue, 20 Nov 2007 01:58:20 -0600 Subject: [PATCH 05/90] Add the new wait-loop system to unix.process --- extra/unix/process/process.factor | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/extra/unix/process/process.factor b/extra/unix/process/process.factor index 7f06f903ac..a99611aba6 100644 --- a/extra/unix/process/process.factor +++ b/extra/unix/process/process.factor @@ -31,11 +31,23 @@ IN: unix.process ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! This is kludgy. We need a better implementation. +USING: kernel alien.c-types namespaces continuations threads assocs unix + combinators.cleave ; -USE: threads +SYMBOL: pid-wait -: wait-for-pid ( pid -- ) - dup "int" WNOHANG waitpid - 0 = [ 100 sleep wait-for-pid ] [ drop ] if ; +! KEY | VALUE +! ----------- +! pid | continuation +: init-pid-wait ( -- ) H{ } clone pid-wait set-global ; + +: wait-for-pid ( pid -- status ) [ pid-wait get set-at stop ] curry callcc1 ; + +: wait-loop ( -- ) + -1 0 tuck WNOHANG waitpid ! &status return + [ *int ] [ pid-wait get delete-at* drop ] bi* ! status ? + dup [ schedule-thread-with ] [ 2drop ] if + 250 sleep wait-loop ; + +: start-wait-loop ( -- ) init-pid-wait [ wait-loop ] in-thread ; \ No newline at end of file From bbcd7bc6ea2ab9a5ff7cc5b1c98776aee9de90f0 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Tue, 20 Nov 2007 01:59:04 -0600 Subject: [PATCH 06/90] Modify raptor.cron --- extra/raptor/cron/cron.factor | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/extra/raptor/cron/cron.factor b/extra/raptor/cron/cron.factor index f004ba30d5..8158a03286 100644 --- a/extra/raptor/cron/cron.factor +++ b/extra/raptor/cron/cron.factor @@ -1,5 +1,6 @@ -USING: kernel threads sequences calendar combinators.cleave combinators.lib ; +USING: kernel namespaces threads sequences calendar + combinators.cleave combinators.lib ; IN: raptor.cron @@ -46,3 +47,16 @@ C: when : schedule ( when quot -- ) [ recurring-job ] curry curry in-thread ; +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +SYMBOL: cron-jobs-hourly +SYMBOL: cron-jobs-daily +SYMBOL: cron-jobs-weekly +SYMBOL: cron-jobs-monthly + +: schedule-cron-jobs ( -- ) + { 17 } f f f f [ cron-jobs-hourly get call ] schedule + { 25 } { 6 } f f f [ cron-jobs-daily get call ] schedule + { 47 } { 6 } f f { 7 } [ cron-jobs-weekly get call ] schedule + { 52 } { 6 } { 1 } f f [ cron-jobs-monthly get call ] schedule ; + From bab5554cfe409af70b5cb127e58bd71e186d24de Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Tue, 20 Nov 2007 01:59:37 -0600 Subject: [PATCH 07/90] Refactor raptor a bit --- extra/raptor/raptor.factor | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/extra/raptor/raptor.factor b/extra/raptor/raptor.factor index a3b4cbfd0a..7e32463ea1 100644 --- a/extra/raptor/raptor.factor +++ b/extra/raptor/raptor.factor @@ -1,5 +1,6 @@ -USING: kernel parser namespaces threads unix.process combinators.cleave ; +USING: kernel parser namespaces threads sequences unix unix.process + combinators.cleave bake ; IN: raptor @@ -10,29 +11,29 @@ SYMBOL: reboot-hook SYMBOL: shutdown-hook SYMBOL: networking-hook +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + : reload-raptor-config ( -- ) "/etc/raptor/config.factor" run-file "/etc/raptor/cronjobs.factor" run-file ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -USING: sequences unix ; +: fork-exec-wait ( pathname args -- ) + fork dup 0 = [ drop exec drop ] [ 2nip wait-for-pid drop ] if ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: forever ( quot -- ) [ call ] [ forever ] bi ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : start-service ( name -- ) "/etc/init.d/" swap " start" 3append system drop ; : stop-service ( name -- ) "/etc/init.d/" swap " stop" 3append system drop ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: fork-exec-wait ( pathname args -- ) - fork dup 0 = [ drop exec drop ] [ 2nip wait-for-pid ] if ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: respawn ( pathname args -- ) [ fork-exec-wait ] [ respawn ] 2bi ; - -: start-gettys ( -- ) - [ "/sbin/getty" { "getty" "38400" "tty5" } respawn ] in-thread - [ "/sbin/getty" { "getty" "38400" "tty6" } respawn ] in-thread ; +: getty ( tty -- ) `{ "/sbin/getty" "38400" , } fork-exec-wait ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -43,13 +44,6 @@ USING: io io.files io.streams.lines io.streams.plain io.streams.duplex [ ] [ ] bi [ listener ] with-stream ; -: forever ( quot -- ) [ call ] [ forever ] bi ; - -: start-listeners ( -- ) - [ [ "/dev/tty2" tty-listener ] forever ] in-thread - [ [ "/dev/tty3" tty-listener ] forever ] in-thread - [ [ "/dev/tty4" tty-listener ] forever ] in-thread ; - ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : start-networking ( -- ) networking-hook get call ; @@ -59,3 +53,4 @@ USING: io io.files io.streams.lines io.streams.plain io.streams.duplex : shutdown ( -- ) shutdown-hook get call ; MAIN: boot + From a2aea6a4d17353812b9b3c9561ba2297d88e4ea1 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Tue, 20 Nov 2007 02:03:16 -0600 Subject: [PATCH 08/90] Update raptor config and cronjobs --- extra/raptor/config.factor | 21 +++++++++--- extra/raptor/cronjobs.factor | 63 ++++++++++++++++-------------------- 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/extra/raptor/config.factor b/extra/raptor/config.factor index d06d8e3db0..386ddf7744 100644 --- a/extra/raptor/config.factor +++ b/extra/raptor/config.factor @@ -1,5 +1,7 @@ -USING: namespaces unix.linux.if unix.linux.ifreq unix.linux.route ; +USING: namespaces threads + unix.process unix.linux.if unix.linux.ifreq unix.linux.route + raptor.cron ; IN: raptor @@ -24,9 +26,12 @@ IN: raptor configure-route ] networking-hook set-global +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! boot-hook ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [ + start-wait-loop ! rcS.d @@ -76,11 +81,17 @@ IN: raptor "rmnologin" start-service schedule-cron-jobs - start-listeners - start-gettys - + + [ [ "/dev/tty2" tty-listener ] forever ] in-thread + [ [ "/dev/tty3" tty-listener ] forever ] in-thread + [ [ "/dev/tty4" tty-listener ] forever ] in-thread + [ [ "/dev/tty5" getty ] forever ] in-thread + [ [ "/dev/tty6" getty ] forever ] in-thread + ] boot-hook set-global +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! reboot-hook ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [ @@ -108,6 +119,8 @@ IN: raptor "reboot" stop-service ] reboot-hook set-global +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! shutdown-hook ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [ diff --git a/extra/raptor/cronjobs.factor b/extra/raptor/cronjobs.factor index 394c213162..894e8e5ce7 100644 --- a/extra/raptor/cronjobs.factor +++ b/extra/raptor/cronjobs.factor @@ -1,5 +1,6 @@ -USING: kernel threads arrays sequences combinators.cleave raptor raptor.cron ; +USING: kernel namespaces threads arrays sequences combinators.cleave + raptor raptor.cron ; IN: raptor @@ -7,41 +8,33 @@ IN: raptor : fork-exec-args-wait ( args -- ) [ first ] [ ] bi fork-exec-wait ; +: run-script ( path -- ) 1array [ fork-exec-args-wait ] curry in-thread ; + ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: cron-hourly ( -- ) ; - -: cron-daily ( -- ) - { "/etc/cron.daily/apt" - "/etc/cron.daily/aptitude" - "/etc/cron.daily/bsdmainutils" - "/etc/cron.daily/find.notslocate" - "/etc/cron.daily/logrotate" - "/etc/cron.daily/man-db" - "/etc/cron.daily/ntp-server" - "/etc/cron.daily/slocate" - "/etc/cron.daily/standard" - "/etc/cron.daily/sysklogd" - "/etc/cron.daily/tetex-bin" } - [ 1array [ fork-exec-args-wait ] in-thread drop ] each ; +[ + "/etc/cron.daily/apt" run-script + "/etc/cron.daily/aptitude" run-script + "/etc/cron.daily/bsdmainutils" run-script + "/etc/cron.daily/find.notslocate" run-script + "/etc/cron.daily/logrotate" run-script + "/etc/cron.daily/man-db" run-script + "/etc/cron.daily/ntp-server" run-script + "/etc/cron.daily/slocate" run-script + "/etc/cron.daily/standard" run-script + "/etc/cron.daily/sysklogd" run-script + "/etc/cron.daily/tetex-bin" run-script +] cron-jobs-daily set-global -: cron-weekly ( -- ) - { "/etc/cron.weekly/cvs" - "/etc/cron.weekly/man-db" - "/etc/cron.weekly/ntp-server" - "/etc/cron.weekly/popularity-contest" - "/etc/cron.weekly/sysklogd" } - [ 1array [ fork-exec-args-wait ] in-thread drop ] each ; +[ + "/etc/cron.weekly/cvs" run-script + "/etc/cron.weekly/man-db" run-script + "/etc/cron.weekly/ntp-server" run-script + "/etc/cron.weekly/popularity-contest" run-script + "/etc/cron.weekly/sysklogd" run-script +] cron-jobs-weekly set-global -: cron-monthly ( -- ) - { "/etc/cron.monthly/scrollkeeper" - "/etc/cron.monthly/standard" } - [ 1array [ fork-exec-args-wait ] in-thread drop ] each ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: schedule-cron-jobs ( -- ) - { 17 } f f f f [ cron-hourly ] schedule - { 25 } { 6 } f f f [ cron-daily ] schedule - { 47 } { 6 } f f { 7 } [ cron-weekly ] schedule - { 52 } { 6 } { 1 } f f [ cron-monthly ] schedule ; \ No newline at end of file +[ + "/etc/cron.monthly/scrollkeeper" run-script + "/etc/cron.monthly/standard" run-script +] cron-jobs-monthly set-global \ No newline at end of file From ea571c54dd2f219ab0c2b8d5339c6dfc63352fcd Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 21 Nov 2007 14:27:25 -0600 Subject: [PATCH 09/90] Add open_console() command line parameter and stubs on each platform Add Config.windows.nt --- vm/Config.windows.nt | 8 ++++++++ vm/Config.windows.nt.x86.32 | 9 ++------- vm/factor.c | 6 ++++++ vm/image.h | 1 + vm/os-unix.c | 2 ++ vm/os-unix.h | 1 + vm/os-windows-ce.c | 2 ++ vm/os-windows-ce.h | 1 + vm/os-windows-nt.c | 4 ++++ vm/os-windows-nt.h | 1 + 10 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 vm/Config.windows.nt diff --git a/vm/Config.windows.nt b/vm/Config.windows.nt new file mode 100644 index 0000000000..8c67b11c19 --- /dev/null +++ b/vm/Config.windows.nt @@ -0,0 +1,8 @@ +LIBS = -lm +EXE_SUFFIX=-nt +DLL_SUFFIX=-nt +PLAF_DLL_OBJS += vm/os-windows-nt.o +PLAF_EXE_OBJS += vm/resources.o +PLAF_EXE_OBJS += vm/main-windows-nt.o +CFLAGS += -mwindows +include vm/Config.windows diff --git a/vm/Config.windows.nt.x86.32 b/vm/Config.windows.nt.x86.32 index adc69b1e27..a8d4931b4d 100644 --- a/vm/Config.windows.nt.x86.32 +++ b/vm/Config.windows.nt.x86.32 @@ -1,7 +1,2 @@ -LIBS = -lm -EXE_SUFFIX=-nt -DLL_SUFFIX=-nt -PLAF_DLL_OBJS += vm/os-windows-nt.o -PLAF_EXE_OBJS += vm/resources.o -PLAF_EXE_OBJS += vm/main-windows-nt.o -include vm/Config.x86.32 vm/Config.windows +include vm/Config.windows.nt +include vm/Config.x86.32 diff --git a/vm/factor.c b/vm/factor.c index 690f5d490c..8719416b72 100755 --- a/vm/factor.c +++ b/vm/factor.c @@ -26,6 +26,7 @@ void default_parameters(F_PARAMETERS *p) p->secure_gc = false; p->fep = false; + p->console = false; } /* Get things started */ @@ -110,6 +111,8 @@ void init_factor_from_args(F_CHAR *image, int argc, F_CHAR **argv, bool embedded p.fep = true; else if(STRNCMP(argv[i],STR_FORMAT("-i="),3) == 0) p.image = argv[i] + 3; + else if(STRCMP(argv[i],STR_FORMAT("-console")) == 0) + p.console = true ; } init_factor(&p); @@ -135,6 +138,9 @@ void init_factor_from_args(F_CHAR *image, int argc, F_CHAR **argv, bool embedded nest_stacks(); + if(p.console) + open_console(); + if(p.fep) factorbug(); diff --git a/vm/image.h b/vm/image.h index 52b666254e..3774263031 100755 --- a/vm/image.h +++ b/vm/image.h @@ -32,6 +32,7 @@ typedef struct { CELL code_size; bool secure_gc; bool fep; + bool console; } F_PARAMETERS; void load_image(F_PARAMETERS *p); diff --git a/vm/os-unix.c b/vm/os-unix.c index 303c01491a..437a528fb8 100644 --- a/vm/os-unix.c +++ b/vm/os-unix.c @@ -256,3 +256,5 @@ void reset_stdio(void) fcntl(0,F_SETFL,0); fcntl(1,F_SETFL,0); } + +void open_console(void) { } diff --git a/vm/os-unix.h b/vm/os-unix.h index cbce7de985..85f760b5aa 100755 --- a/vm/os-unix.h +++ b/vm/os-unix.h @@ -39,3 +39,4 @@ s64 current_millis(void); void sleep_millis(CELL msec); void reset_stdio(void); +void open_console(void); diff --git a/vm/os-windows-ce.c b/vm/os-windows-ce.c index 1465e0c89f..e68a6385ae 100755 --- a/vm/os-windows-ce.c +++ b/vm/os-windows-ce.c @@ -46,3 +46,5 @@ void c_to_factor_toplevel(CELL quot) { c_to_factor(quot); } + +void open_console(void) { } diff --git a/vm/os-windows-ce.h b/vm/os-windows-ce.h index 959de89634..f1d6df6f3d 100755 --- a/vm/os-windows-ce.h +++ b/vm/os-windows-ce.h @@ -24,3 +24,4 @@ char *getenv(char *name); s64 current_millis(void); void c_to_factor_toplevel(CELL quot); +void open_console(void); diff --git a/vm/os-windows-nt.c b/vm/os-windows-nt.c index baa0a06c4b..7ea8155072 100755 --- a/vm/os-windows-nt.c +++ b/vm/os-windows-nt.c @@ -88,3 +88,7 @@ void c_to_factor_toplevel(CELL quot) c_to_factor(quot); RemoveVectoredExceptionHandler((void*)exception_handler); } + +void open_console(void) +{ +} diff --git a/vm/os-windows-nt.h b/vm/os-windows-nt.h index f7c56c129d..f74c7b1883 100755 --- a/vm/os-windows-nt.h +++ b/vm/os-windows-nt.h @@ -18,3 +18,4 @@ typedef char F_SYMBOL; void c_to_factor_toplevel(CELL quot); long exception_handler(PEXCEPTION_POINTERS pe); +void open_console(void); From 01682c1cd2dcb5f95db776e4a2d1c6441c0f52aa Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 21 Nov 2007 14:31:36 -0600 Subject: [PATCH 10/90] Open a console when calling factorbug() --- vm/debug.c | 1 + 1 file changed, 1 insertion(+) diff --git a/vm/debug.c b/vm/debug.c index 55ffcadca6..2692bdf59c 100755 --- a/vm/debug.c +++ b/vm/debug.c @@ -213,6 +213,7 @@ void dump_objects(F_FIXNUM type) void factorbug(void) { reset_stdio(); + open_console(); printf("Starting low level debugger...\n"); printf(" Basic commands:\n"); From 0da81b301833a87dde90a620daa397908a2bbbdc Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 21 Nov 2007 14:47:15 -0600 Subject: [PATCH 11/90] Reuse existing console if present, or else open a new console, when -console is supplied --- vm/os-windows-nt.c | 10 ++++++++++ vm/os-windows-nt.h | 1 + 2 files changed, 11 insertions(+) diff --git a/vm/os-windows-nt.c b/vm/os-windows-nt.c index 7ea8155072..afd1e0ed3b 100755 --- a/vm/os-windows-nt.c +++ b/vm/os-windows-nt.c @@ -91,4 +91,14 @@ void c_to_factor_toplevel(CELL quot) void open_console(void) { + if(!console_open) + { + if(!AttachConsole(ATTACH_PARENT_PROCESS)) + { + if(AllocConsole()) + console_open = true; + } + else + console_open = true; + } } diff --git a/vm/os-windows-nt.h b/vm/os-windows-nt.h index f74c7b1883..9e451f0301 100755 --- a/vm/os-windows-nt.h +++ b/vm/os-windows-nt.h @@ -18,4 +18,5 @@ typedef char F_SYMBOL; void c_to_factor_toplevel(CELL quot); long exception_handler(PEXCEPTION_POINTERS pe); +bool console_open; void open_console(void); From aacf88a72d67a47edc6b5cde8e139dcf4c124d64 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Tue, 20 Nov 2007 16:36:38 +1300 Subject: [PATCH 12/90] First cut at peg style packrat parser --- extra/peg/peg-docs.factor | 11 +++++ extra/peg/peg-tests.factor | 55 +++++++++++++++++++++++ extra/peg/peg.factor | 92 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 extra/peg/peg-docs.factor create mode 100644 extra/peg/peg-tests.factor create mode 100644 extra/peg/peg.factor diff --git a/extra/peg/peg-docs.factor b/extra/peg/peg-docs.factor new file mode 100644 index 0000000000..ec4a5d304d --- /dev/null +++ b/extra/peg/peg-docs.factor @@ -0,0 +1,11 @@ +! Copyright (C) 2007 Chris Double. +! See http://factorcode.org/license.txt for BSD license. +USING: help.markup help.syntax peg ; + +HELP: token +{ $values + { "string" "a string" } } +{ $description + "A parser generator that returns a parser that matches the given string." } +{ $example "\"begin foo end\" \"begin\" token parse" "result-here" } ; + diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor new file mode 100644 index 0000000000..20e4206357 --- /dev/null +++ b/extra/peg/peg-tests.factor @@ -0,0 +1,55 @@ +! Copyright (C) 2007 Chris Double. +! See http://factorcode.org/license.txt for BSD license. +! +USING: kernel tools.test strings namespaces arrays peg ; +IN: temporary + +{ 0 1 2 } [ + 0 next-id set-global get-next-id get-next-id get-next-id +] unit-test + +{ "0123456789" } [ + "0123456789" 0 0 state-tail parse-state-input >string +] unit-test + +{ "56789" } [ + "0123456789" 5 0 state-tail parse-state-input >string +] unit-test + +{ "789" } [ + "0123456789" 5 2 state-tail parse-state-input >string +] unit-test + +{ f } [ + "endbegin" 0 "begin" token parse +] unit-test + +{ "begin" "begin" "end" } [ + "beginend" 0 "begin" token parse + { parse-result-matched parse-result-ast parse-result-remaining } get-slots + parse-state-input >string +] unit-test + +{ f } [ + "" 0 CHAR: a CHAR: z range parse +] unit-test + +{ f } [ + "1bcd" 0 CHAR: a CHAR: z range parse +] unit-test + +{ CHAR: a } [ + "abcd" 0 CHAR: a CHAR: z range parse parse-result-ast +] unit-test + +{ CHAR: z } [ + "zbcd" 0 CHAR: a CHAR: z range parse parse-result-ast +] unit-test + +{ f } [ + "bad" 0 "a" token "b" token 2array seq parse +] unit-test + +{ "go" } [ + "good" 0 "g" token "o" token 2array seq parse parse-result-matched +] unit-test diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor new file mode 100644 index 0000000000..f5c3f4ab3e --- /dev/null +++ b/extra/peg/peg.factor @@ -0,0 +1,92 @@ +! Copyright (C) 2007 Chris Double. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel sequences strings namespaces math assocs combinators.lib ; +IN: peg + +TUPLE: parse-state input cache ; + +: ( input index -- state ) + tail-slice { set-parse-state-input } parse-state construct ; + +: get-cached ( pid state -- result ) + tuck parse-state-cache at [ + swap parse-state-input slice-from swap nth + ] [ + drop f + ] if* ; + +: state-tail ( state n -- state ) + dupd [ parse-state-cache ] dipd + [ parse-state-input ] dip tail-slice + { set-parse-state-cache set-parse-state-input } parse-state construct ; + +TUPLE: parse-result remaining matched ast ; + +: ( remaining matched ast -- parse-result ) + parse-result construct-boa ; + +SYMBOL: next-id + +: get-next-id ( -- number ) + next-id get-global 0 or dup 1+ next-id set-global ; + +TUPLE: parser id ; + +: init-parser ( parser -- parser ) + get-next-id parser construct-boa over set-delegate ; + +GENERIC: parse ( state parser -- result ) + +TUPLE: token-parser symbol ; + +M: token-parser parse ( state parser -- result ) + token-parser-symbol 2dup >r parse-state-input r> head? [ + dup >r length state-tail r> dup + ] [ + 2drop f + ] if ; + +: token ( string -- parser ) + token-parser construct-boa init-parser ; + +TUPLE: range-parser min max ; + +M: range-parser parse ( state parser -- result ) + over parse-state-input empty? [ + 2drop f + ] [ + 0 pick parse-state-input nth dup rot + { range-parser-min range-parser-max } get-slots between? [ + [ 1 state-tail ] dip dup + ] [ + 2drop f + ] if + ] if ; + +: range ( min max -- parser ) + range-parser construct-boa init-parser ; + +TUPLE: seq-parser parsers ; + +: do-seq-parser ( result parser -- result ) + [ dup parse-result-remaining ] dip parse [ + [ parse-result-remaining swap set-parse-result-remaining ] 2keep + [ parse-result-ast swap parse-result-ast push ] 2keep + parse-result-matched swap [ parse-result-matched swap append ] keep [ set-parse-result-matched ] keep + + ] [ + drop f + ] if* ; + +: (seq-parser) ( result parsers -- result ) + dup empty? not pick and [ + unclip swap [ do-seq-parser ] dip (seq-parser) + ] [ + drop + ] if ; + +M: seq-parser parse ( state parser -- result ) + seq-parser-parsers [ "" V{ } clone ] dip (seq-parser) ; + +: seq ( seq -- parser ) + seq-parser construct-boa init-parser ; From 2d3fe08403e807febf7c62c6547d90bc2aec0926 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Tue, 20 Nov 2007 17:58:11 +1300 Subject: [PATCH 13/90] Add choice parser --- extra/peg/peg-tests.factor | 16 ++++++++++++++++ extra/peg/peg.factor | 22 ++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index 20e4206357..d95233b899 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -53,3 +53,19 @@ IN: temporary { "go" } [ "good" 0 "g" token "o" token 2array seq parse parse-result-matched ] unit-test + +{ "a" } [ + "abcd" 0 "a" token "b" token 2array choice parse parse-result-matched +] unit-test + +{ "b" } [ + "bbcd" 0 "a" token "b" token 2array choice parse parse-result-matched +] unit-test + +{ f } [ + "cbcd" 0 "a" token "b" token 2array choice parse +] unit-test + +{ f } [ + "" 0 "a" token "b" token 2array choice parse +] unit-test \ No newline at end of file diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index f5c3f4ab3e..7965424ddd 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -72,8 +72,7 @@ TUPLE: seq-parser parsers ; [ dup parse-result-remaining ] dip parse [ [ parse-result-remaining swap set-parse-result-remaining ] 2keep [ parse-result-ast swap parse-result-ast push ] 2keep - parse-result-matched swap [ parse-result-matched swap append ] keep [ set-parse-result-matched ] keep - + parse-result-matched swap [ parse-result-matched swap append ] keep [ set-parse-result-matched ] keep ] [ drop f ] if* ; @@ -90,3 +89,22 @@ M: seq-parser parse ( state parser -- result ) : seq ( seq -- parser ) seq-parser construct-boa init-parser ; + +TUPLE: choice-parser parsers ; + +: (choice-parser) ( state parsers -- result ) + dup empty? [ + 2drop f + ] [ + unclip pick swap parse [ + 2nip + ] [ + (choice-parser) + ] if* + ] if ; + +M: choice-parser parse ( state parser -- result ) + choice-parser-parsers (choice-parser) ; + +: choice ( seq -- parser ) + choice-parser construct-boa init-parser ; From 691c62501f71ae4163ccda89751b27a4ba720f6d Mon Sep 17 00:00:00 2001 From: Chris Double Date: Wed, 21 Nov 2007 15:01:44 +1300 Subject: [PATCH 14/90] add repeat0 and repeat1 --- extra/peg/peg-tests.factor | 28 ++++++++++++++++++++++++++-- extra/peg/peg.factor | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index d95233b899..8c496a2b95 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007 Chris Double. ! See http://factorcode.org/license.txt for BSD license. ! -USING: kernel tools.test strings namespaces arrays peg ; +USING: kernel tools.test strings namespaces arrays sequences peg ; IN: temporary { 0 1 2 } [ @@ -68,4 +68,28 @@ IN: temporary { f } [ "" 0 "a" token "b" token 2array choice parse -] unit-test \ No newline at end of file +] unit-test + +{ 0 } [ + "" 0 "a" token repeat0 parse parse-result-ast length +] unit-test + +{ 0 } [ + "b" 0 "a" token repeat0 parse parse-result-ast length +] unit-test + +{ "aaa" } [ + "aaab" 0 "a" token repeat0 parse parse-result-matched +] unit-test + +{ f } [ + "" 0 "a" token repeat1 parse +] unit-test + +{ f } [ + "b" 0 "a" token repeat1 parse +] unit-test + +{ "aaa" } [ + "aaab" 0 "a" token repeat1 parse parse-result-matched +] unit-test diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 7965424ddd..9bda5a358b 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2007 Chris Double. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel sequences strings namespaces math assocs combinators.lib ; +USING: kernel sequences strings namespaces math assocs shuffle combinators.lib ; IN: peg TUPLE: parse-state input cache ; @@ -108,3 +108,37 @@ M: choice-parser parse ( state parser -- result ) : choice ( seq -- parser ) choice-parser construct-boa init-parser ; + +TUPLE: repeat0-parser p1 ; + +: (repeat-parser) ( parser result -- result ) + 2dup parse-result-remaining swap parse [ + [ parse-result-remaining swap set-parse-result-remaining ] 2keep + [ parse-result-ast swap parse-result-ast push ] 2keep + parse-result-matched swap [ parse-result-matched swap append ] keep [ set-parse-result-matched ] keep + (repeat-parser) + ] [ + nip + ] if* ; + +: clone-result ( result -- result ) + { parse-result-remaining parse-result-matched parse-result-ast } + get-slots V{ } clone-like ; + +M: repeat0-parser parse ( state parser -- result ) + repeat0-parser-p1 2dup parse [ + nipd clone-result (repeat-parser) + ] [ + drop "" V{ } clone + ] if* ; + +: repeat0 ( parser -- parser ) + repeat0-parser construct-boa init-parser ; + +TUPLE: repeat1-parser p1 ; + +M: repeat1-parser parse ( state parser -- result ) + repeat1-parser-p1 tuck parse dup [ clone-result (repeat-parser) ] [ nip ] if ; + +: repeat1 ( parser -- parser ) + repeat1-parser construct-boa init-parser ; From e9df13dad58a7a6cc25eaab61a15b80850849f81 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Wed, 21 Nov 2007 15:31:23 +1300 Subject: [PATCH 15/90] remove match from parse results --- extra/peg/peg-tests.factor | 20 ++++++++++---------- extra/peg/peg.factor | 24 +++++++++++------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index 8c496a2b95..82d993af3c 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -24,9 +24,9 @@ IN: temporary "endbegin" 0 "begin" token parse ] unit-test -{ "begin" "begin" "end" } [ +{ "begin" "end" } [ "beginend" 0 "begin" token parse - { parse-result-matched parse-result-ast parse-result-remaining } get-slots + { parse-result-ast parse-result-remaining } get-slots parse-state-input >string ] unit-test @@ -50,16 +50,16 @@ IN: temporary "bad" 0 "a" token "b" token 2array seq parse ] unit-test -{ "go" } [ - "good" 0 "g" token "o" token 2array seq parse parse-result-matched +{ V{ "g" "o" } } [ + "good" 0 "g" token "o" token 2array seq parse parse-result-ast ] unit-test { "a" } [ - "abcd" 0 "a" token "b" token 2array choice parse parse-result-matched + "abcd" 0 "a" token "b" token 2array choice parse parse-result-ast ] unit-test { "b" } [ - "bbcd" 0 "a" token "b" token 2array choice parse parse-result-matched + "bbcd" 0 "a" token "b" token 2array choice parse parse-result-ast ] unit-test { f } [ @@ -78,8 +78,8 @@ IN: temporary "b" 0 "a" token repeat0 parse parse-result-ast length ] unit-test -{ "aaa" } [ - "aaab" 0 "a" token repeat0 parse parse-result-matched +{ V{ "a" "a" "a" } } [ + "aaab" 0 "a" token repeat0 parse parse-result-ast ] unit-test { f } [ @@ -90,6 +90,6 @@ IN: temporary "b" 0 "a" token repeat1 parse ] unit-test -{ "aaa" } [ - "aaab" 0 "a" token repeat1 parse parse-result-matched +{ V{ "a" "a" "a" } } [ + "aaab" 0 "a" token repeat1 parse parse-result-ast ] unit-test diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 9bda5a358b..4a43c1b965 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2007 Chris Double. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel sequences strings namespaces math assocs shuffle combinators.lib ; +USING: kernel sequences strings namespaces math assocs shuffle vectors combinators.lib ; IN: peg TUPLE: parse-state input cache ; @@ -20,9 +20,9 @@ TUPLE: parse-state input cache ; [ parse-state-input ] dip tail-slice { set-parse-state-cache set-parse-state-input } parse-state construct ; -TUPLE: parse-result remaining matched ast ; +TUPLE: parse-result remaining ast ; -: ( remaining matched ast -- parse-result ) +: ( remaining ast -- parse-result ) parse-result construct-boa ; SYMBOL: next-id @@ -41,7 +41,7 @@ TUPLE: token-parser symbol ; M: token-parser parse ( state parser -- result ) token-parser-symbol 2dup >r parse-state-input r> head? [ - dup >r length state-tail r> dup + dup >r length state-tail r> ] [ 2drop f ] if ; @@ -57,7 +57,7 @@ M: range-parser parse ( state parser -- result ) ] [ 0 pick parse-state-input nth dup rot { range-parser-min range-parser-max } get-slots between? [ - [ 1 state-tail ] dip dup + [ 1 state-tail ] dip ] [ 2drop f ] if @@ -71,8 +71,7 @@ TUPLE: seq-parser parsers ; : do-seq-parser ( result parser -- result ) [ dup parse-result-remaining ] dip parse [ [ parse-result-remaining swap set-parse-result-remaining ] 2keep - [ parse-result-ast swap parse-result-ast push ] 2keep - parse-result-matched swap [ parse-result-matched swap append ] keep [ set-parse-result-matched ] keep + parse-result-ast swap [ parse-result-ast push ] keep ] [ drop f ] if* ; @@ -85,7 +84,7 @@ TUPLE: seq-parser parsers ; ] if ; M: seq-parser parse ( state parser -- result ) - seq-parser-parsers [ "" V{ } clone ] dip (seq-parser) ; + seq-parser-parsers [ V{ } clone ] dip (seq-parser) ; : seq ( seq -- parser ) seq-parser construct-boa init-parser ; @@ -114,22 +113,21 @@ TUPLE: repeat0-parser p1 ; : (repeat-parser) ( parser result -- result ) 2dup parse-result-remaining swap parse [ [ parse-result-remaining swap set-parse-result-remaining ] 2keep - [ parse-result-ast swap parse-result-ast push ] 2keep - parse-result-matched swap [ parse-result-matched swap append ] keep [ set-parse-result-matched ] keep + parse-result-ast swap [ parse-result-ast push ] keep (repeat-parser) ] [ nip ] if* ; : clone-result ( result -- result ) - { parse-result-remaining parse-result-matched parse-result-ast } - get-slots V{ } clone-like ; + { parse-result-remaining parse-result-ast } + get-slots 1vector ; M: repeat0-parser parse ( state parser -- result ) repeat0-parser-p1 2dup parse [ nipd clone-result (repeat-parser) ] [ - drop "" V{ } clone + drop V{ } clone ] if* ; : repeat0 ( parser -- parser ) From ffa71ef86f608e4a3f22dd3d146260a55727d13d Mon Sep 17 00:00:00 2001 From: Chris Double Date: Wed, 21 Nov 2007 15:50:47 +1300 Subject: [PATCH 16/90] add optional parser --- extra/peg/peg-tests.factor | 12 ++++++++++++ extra/peg/peg.factor | 10 +++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index 82d993af3c..b10fcb8e55 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -93,3 +93,15 @@ IN: temporary { V{ "a" "a" "a" } } [ "aaab" 0 "a" token repeat1 parse parse-result-ast ] unit-test + +{ V{ "a" "b" } } [ + "ab" 0 "a" token optional "b" token 2array seq parse parse-result-ast +] unit-test + +{ V{ f "b" } } [ + "b" 0 "a" token optional "b" token 2array seq parse parse-result-ast +] unit-test + +{ f } [ + "cb" 0 "a" token optional "b" token 2array seq parse +] unit-test \ No newline at end of file diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 4a43c1b965..e2f0cfd1b2 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -136,7 +136,15 @@ M: repeat0-parser parse ( state parser -- result ) TUPLE: repeat1-parser p1 ; M: repeat1-parser parse ( state parser -- result ) - repeat1-parser-p1 tuck parse dup [ clone-result (repeat-parser) ] [ nip ] if ; + repeat1-parser-p1 tuck parse dup [ clone-result (repeat-parser) ] [ nip ] if ; : repeat1 ( parser -- parser ) repeat1-parser construct-boa init-parser ; + +TUPLE: optional-parser p1 ; + +M: optional-parser parse ( state parser -- result ) + dupd optional-parser-p1 parse swap f or ; + +: optional ( parser -- parser ) + optional-parser construct-boa init-parser ; From 129f68d428f548bb20f28272718aa77074704510 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Wed, 21 Nov 2007 16:06:02 +1300 Subject: [PATCH 17/90] add ensure parser --- extra/peg/peg-tests.factor | 8 ++++++++ extra/peg/peg.factor | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index b10fcb8e55..b7977285c4 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -104,4 +104,12 @@ IN: temporary { f } [ "cb" 0 "a" token optional "b" token 2array seq parse +] unit-test + +{ V{ CHAR: a CHAR: b } } [ + "ab" 0 "a" token ensure CHAR: a CHAR: z range dup 3array seq parse parse-result-ast +] unit-test + +{ f } [ + "bb" 0 "a" token ensure CHAR: a CHAR: z range 2array seq parse ] unit-test \ No newline at end of file diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index e2f0cfd1b2..239af02d26 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -3,6 +3,8 @@ USING: kernel sequences strings namespaces math assocs shuffle vectors combinators.lib ; IN: peg +SYMBOL: ignore + TUPLE: parse-state input cache ; : ( input index -- state ) @@ -71,7 +73,7 @@ TUPLE: seq-parser parsers ; : do-seq-parser ( result parser -- result ) [ dup parse-result-remaining ] dip parse [ [ parse-result-remaining swap set-parse-result-remaining ] 2keep - parse-result-ast swap [ parse-result-ast push ] keep + parse-result-ast dup ignore = [ drop ] [ swap [ parse-result-ast push ] keep ] if ] [ drop f ] if* ; @@ -148,3 +150,15 @@ M: optional-parser parse ( state parser -- result ) : optional ( parser -- parser ) optional-parser construct-boa init-parser ; + +TUPLE: ensure-parser p1 ; + +M: ensure-parser parse ( state parser -- result ) + dupd ensure-parser-p1 parse [ + ignore + ] [ + drop f + ] if ; + +: ensure ( parser -- parser ) + ensure-parser construct-boa init-parser ; From 2a464ea2c65bb14782066b00789b63567a77c308 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Wed, 21 Nov 2007 16:11:49 +1300 Subject: [PATCH 18/90] add ensure-not parser --- extra/peg/peg-tests.factor | 24 ++++++++++++++++++++++++ extra/peg/peg.factor | 12 ++++++++++++ 2 files changed, 36 insertions(+) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index b7977285c4..94f70d32ad 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -112,4 +112,28 @@ IN: temporary { f } [ "bb" 0 "a" token ensure CHAR: a CHAR: z range 2array seq parse +] unit-test + +{ t } [ + "a+b" 0 + "a" token "+" token dup ensure-not 2array seq "++" token 2array choice "b" token 3array seq + parse [ t ] [ f ] if +] unit-test + +{ t } [ + "a++b" 0 + "a" token "+" token dup ensure-not 2array seq "++" token 2array choice "b" token 3array seq + parse [ t ] [ f ] if +] unit-test + +{ t } [ + "a+b" 0 + "a" token "+" token "++" token 2array choice "b" token 3array seq + parse [ t ] [ f ] if +] unit-test + +{ f } [ + "a++b" 0 + "a" token "+" token "++" token 2array choice "b" token 3array seq + parse [ t ] [ f ] if ] unit-test \ No newline at end of file diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 239af02d26..82c4505ae7 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -162,3 +162,15 @@ M: ensure-parser parse ( state parser -- result ) : ensure ( parser -- parser ) ensure-parser construct-boa init-parser ; + +TUPLE: ensure-not-parser p1 ; + +M: ensure-not-parser parse ( state parser -- result ) + dupd ensure-not-parser-p1 parse [ + drop f + ] [ + ignore + ] if ; + +: ensure-not ( parser -- parser ) + ensure-not-parser construct-boa init-parser ; From 167f2d716d323bff0a1c82ab8e5a1de6f9360306 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Wed, 21 Nov 2007 16:21:23 +1300 Subject: [PATCH 19/90] add action parser --- extra/peg/peg-tests.factor | 12 ++++++++++++ extra/peg/peg.factor | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index 94f70d32ad..a60d1eaaf0 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -136,4 +136,16 @@ IN: temporary "a++b" 0 "a" token "+" token "++" token 2array choice "b" token 3array seq parse [ t ] [ f ] if +] unit-test + +{ 1 } [ + "a" 0 "a" token [ drop 1 ] action parse parse-result-ast +] unit-test + +{ V{ 1 1 } } [ + "aa" 0 "a" token [ drop 1 ] action dup 2array seq parse parse-result-ast +] unit-test + +{ f } [ + "b" 0 "a" token [ drop 1 ] action parse ] unit-test \ No newline at end of file diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 82c4505ae7..2c985b68dc 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -174,3 +174,16 @@ M: ensure-not-parser parse ( state parser -- result ) : ensure-not ( parser -- parser ) ensure-not-parser construct-boa init-parser ; + +TUPLE: action-parser p1 quot ; + +M: action-parser parse ( state parser -- result ) + tuck action-parser-p1 parse dup [ + dup parse-result-ast rot action-parser-quot call + swap [ set-parse-result-ast ] keep + ] [ + nip + ] if ; + +: action ( parser quot -- parser ) + action-parser construct-boa init-parser ; From 861cfe7dc2f88990d4da9056bf30dff3792c64fa Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Wed, 21 Nov 2007 18:32:32 -0600 Subject: [PATCH 20/90] add unix.linux.fs --- extra/unix/linux/fs/fs.factor | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 extra/unix/linux/fs/fs.factor diff --git a/extra/unix/linux/fs/fs.factor b/extra/unix/linux/fs/fs.factor new file mode 100644 index 0000000000..02fd357ccd --- /dev/null +++ b/extra/unix/linux/fs/fs.factor @@ -0,0 +1,25 @@ + +USING: alien.syntax ; + +IN: unix.linux.fs + +: MS_RDONLY 1 ; ! Mount read-only. +: MS_NOSUID 2 ; ! Ignore suid and sgid bits. +: MS_NODEV 4 ; ! Disallow access to device special files. +: MS_NOEXEC 8 ; ! Disallow program execution. +: MS_SYNCHRONOUS 16 ; ! Writes are synced at once. +: MS_REMOUNT 32 ; ! Alter flags of a mounted FS. +: MS_MANDLOCK 64 ; ! Allow mandatory locks on an FS. +: S_WRITE 128 ; ! Write on file/directory/symlink. +: S_APPEND 256 ; ! Append-only file. +: S_IMMUTABLE 512 ; ! Immutable file. +: MS_NOATIME 1024 ; ! Do not update access times. +: MS_NODIRATIME 2048 ; ! Do not update directory access times. +: MS_BIND 4096 ; ! Bind directory at different place. + +FUNCTION: int mount +( char* special_file, char* dir, char* fstype, ulong options, void* data ) ; + +! FUNCTION: int umount2 ( char* file, int flags ) ; + +FUNCTION: int umount ( char* file ) ; \ No newline at end of file From 963ae64952ce375237090e199b3bc24f707c96f1 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Wed, 21 Nov 2007 18:32:51 -0600 Subject: [PATCH 21/90] add unix.linux.swap --- extra/unix/linux/swap/swap.factor | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 extra/unix/linux/swap/swap.factor diff --git a/extra/unix/linux/swap/swap.factor b/extra/unix/linux/swap/swap.factor new file mode 100644 index 0000000000..4cafa5723f --- /dev/null +++ b/extra/unix/linux/swap/swap.factor @@ -0,0 +1,12 @@ + +USING: alien.syntax ; + +IN: unix.linux.swap + +: SWAP_FLAG_PREFER HEX: 8000 ; ! Set if swap priority is specified. +: SWAP_FLAG_PRIO_MASK HEX: 7fff ; +: SWAP_FLAG_PRIO_SHIFT 0 ; + +FUNCTION: int swapon ( char* path, int flags ) ; + +FUNCTION: int swapoff ( char* path ) ; \ No newline at end of file From 6d64c460c31fcbfb74753c417b91a69b5c9d8208 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Wed, 21 Nov 2007 18:33:39 -0600 Subject: [PATCH 22/90] Add ,u and `{ to bake --- extra/bake/bake.factor | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/extra/bake/bake.factor b/extra/bake/bake.factor index 437a42d546..d038e81394 100644 --- a/extra/bake/bake.factor +++ b/extra/bake/bake.factor @@ -22,6 +22,10 @@ C: splice-quot ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +: ,u ( seq -- seq ) unclip building get push ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + SYMBOL: exemplar : reset-building ( -- ) 1024 building set ; @@ -35,6 +39,7 @@ DEFER: bake : bake-item ( item -- ) { { [ dup \ , = ] [ drop , ] } { [ dup \ % = ] [ drop % ] } + { [ dup \ ,u = ] [ drop ,u ] } { [ dup insert-quot? ] [ insert-quot-expr call , ] } { [ dup splice-quot? ] [ splice-quot-expr call % ] } { [ dup integer? ] [ , ] } @@ -52,4 +57,5 @@ DEFER: bake ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: `{ \ } [ >array ] parse-literal \ bake parsed ; parsing \ No newline at end of file +: `{ \ } [ >array ] parse-literal \ bake parsed ; parsing + From 1143f52f25ac9af286ee4259dc38cdcffec18715 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Wed, 21 Nov 2007 18:34:25 -0600 Subject: [PATCH 23/90] Activate swap and mount root fs in raptor --- extra/raptor/config.factor | 15 ++++++++++++++- extra/raptor/raptor.factor | 13 ++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/extra/raptor/config.factor b/extra/raptor/config.factor index 386ddf7744..ecdbf98f17 100644 --- a/extra/raptor/config.factor +++ b/extra/raptor/config.factor @@ -26,6 +26,14 @@ IN: raptor configure-route ] networking-hook set-global +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! Filesystems +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +"/dev/hda1" root-device set-global + +{ "/dev/hda5" } swap-devices set-global + ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! boot-hook ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -43,7 +51,12 @@ IN: raptor "mountdevsubfs" start-service "module-init-tools" start-service "procps.sh" start-service - "checkroot.sh" start-service + + ! "checkroot.sh" start-service + + activate-swap + mount-root + "mtab" start-service "checkfs.sh" start-service "mountall.sh" start-service diff --git a/extra/raptor/raptor.factor b/extra/raptor/raptor.factor index 7e32463ea1..e6f960cd8d 100644 --- a/extra/raptor/raptor.factor +++ b/extra/raptor/raptor.factor @@ -33,7 +33,7 @@ SYMBOL: networking-hook ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: getty ( tty -- ) `{ "/sbin/getty" "38400" , } fork-exec-wait ; +: getty ( tty -- ) `{ "/sbin/getty" "38400" , } fork-exec-args-wait ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -46,6 +46,17 @@ USING: io io.files io.streams.lines io.streams.plain io.streams.duplex ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +USING: unix.linux.swap unix.linux.fs ; + +SYMBOL: root-device +SYMBOL: swap-devices + +: activate-swap ( -- ) swap-devices get [ 0 swapon drop ] each ; + +: mount-root ( -- ) root-device get "/" "ext3" MS_REMOUNT f mount drop ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + : start-networking ( -- ) networking-hook get call ; : boot ( -- ) boot-hook get call ; From 812277815fd1ac0605d00d1656fbe61d03bf54e3 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 22 Nov 2007 14:21:32 -0500 Subject: [PATCH 24/90] Improve multi-click detection logic --- extra/ui/gestures/gestures.factor | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) mode change 100644 => 100755 extra/ui/gestures/gestures.factor diff --git a/extra/ui/gestures/gestures.factor b/extra/ui/gestures/gestures.factor old mode 100644 new mode 100755 index 0e337c538a..756ddfbf00 --- a/extra/ui/gestures/gestures.factor +++ b/extra/ui/gestures/gestures.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays assocs kernel math models namespaces sequences words strings system hashtables math.parser -math.vectors tuples classes ui.gadgets timers ; +math.vectors tuples classes ui.gadgets timers combinators ; IN: ui.gestures : set-gestures ( class hash -- ) "gestures" set-word-prop ; @@ -176,9 +176,23 @@ drag-timer construct-empty drag-timer set-global : hand-click-rel ( gadget -- loc ) hand-click-loc get-global swap screen-loc v- ; +: multi-click-timeout? ( -- ? ) + millis hand-last-time get - double-click-timeout get <= ; + +: multi-click-button? ( button -- button ? ) + dup hand-last-button get = ; + +: multi-click-position? ( -- ? ) + hand-loc get hand-click-loc get v- norm 10 <= ; + : multi-click? ( button -- ? ) - millis hand-last-time get - double-click-timeout get <= - swap hand-last-button get = and ; + { + { [ multi-click-timeout? not ] [ f ] } + { [ multi-click-button? not ] [ f ] } + { [ multi-click-position? not ] [ f ] } + { [ multi-click-position? not ] [ f ] } + { [ t ] [ t ] } + } cond nip ; : update-click# ( button -- ) global [ From 687d2aa6a4707afc807a926fc91bc73bfc95b0a3 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Fri, 23 Nov 2007 14:32:02 +1300 Subject: [PATCH 25/90] Fix article manager bitrot --- extra/webapps/article-manager/furnace/article.furnace | 2 +- extra/webapps/article-manager/furnace/tag.furnace | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/webapps/article-manager/furnace/article.furnace b/extra/webapps/article-manager/furnace/article.furnace index 41929301a6..f0647aa442 100644 --- a/extra/webapps/article-manager/furnace/article.furnace +++ b/extra/webapps/article-manager/furnace/article.furnace @@ -1,4 +1,4 @@ -<% USING: kernel io http.server namespaces sequences math html.elements random furnace webapps.article-manager webapps.article-manager.database ; %> +<% USING: kernel io http.server namespaces sequences math html.elements random furnace webapps.article-manager webapps.article-manager.database html.elements ; %> <% f "navigation" render-template %>
diff --git a/extra/webapps/article-manager/furnace/tag.furnace b/extra/webapps/article-manager/furnace/tag.furnace index 493ce2e613..a778deb9be 100644 --- a/extra/webapps/article-manager/furnace/tag.furnace +++ b/extra/webapps/article-manager/furnace/tag.furnace @@ -1,4 +1,4 @@ -<% USING: kernel io http.server namespaces sequences math html furnace webapps.article-manager.database webapps.article-manager ; %> +<% USING: kernel io http.server namespaces sequences math html furnace webapps.article-manager.database webapps.article-manager html.elements ; %> <% f "navigation" render-template %> From cd844658959e2203c38d23a1da203da1a17d5426 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 22 Nov 2007 20:47:58 -0500 Subject: [PATCH 26/90] Documentation fix --- core/quotations/quotations-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 core/quotations/quotations-docs.factor diff --git a/core/quotations/quotations-docs.factor b/core/quotations/quotations-docs.factor old mode 100644 new mode 100755 index f647bb2a66..3a32b63ae9 --- a/core/quotations/quotations-docs.factor +++ b/core/quotations/quotations-docs.factor @@ -22,7 +22,7 @@ $nl ABOUT: "quotations" HELP: callable -{ $class-description "The class whose instances can be passed to " { $link call } ". This includes quotations, " { $link f } " (which behaves like an empty quotation), and composed quotations built up with " { $link curry } "." } ; +{ $class-description "The class whose instances can be passed to " { $link call } ". This includes quotations and composed quotations built up with " { $link curry } " or " { $link compose } "." } ; HELP: quotation { $description "The class of quotations. See " { $link "syntax-quots" } " for syntax and " { $link "quotations" } " for general information." } ; From a61c0d5f7c1ec5c9c51a24ac4a83c900d9b37da8 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 22 Nov 2007 20:48:24 -0500 Subject: [PATCH 27/90] Fix definition of macro predicate class --- extra/macros/macros.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 extra/macros/macros.factor diff --git a/extra/macros/macros.factor b/extra/macros/macros.factor old mode 100644 new mode 100755 index 9c06822463..1c23a1c85e --- a/extra/macros/macros.factor +++ b/extra/macros/macros.factor @@ -19,7 +19,7 @@ IN: macros : MACRO: (:) (MACRO:) ; parsing -PREDICATE: word macro +PREDICATE: compound macro "macro" word-prop >boolean ; M: macro definer drop \ MACRO: \ ; ; From 204069e01d8b0768a00850ef500c3dd2754ae39f Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 22 Nov 2007 21:00:56 -0500 Subject: [PATCH 28/90] Improve editor gadget selection behavior --- extra/documents/documents.factor | 6 +++ extra/ui/gadgets/editors/editors.factor | 56 +++++++++++++++++-------- extra/ui/gestures/gestures.factor | 13 +++--- extra/ui/windows/windows.factor | 6 ++- 4 files changed, 55 insertions(+), 26 deletions(-) mode change 100644 => 100755 extra/documents/documents.factor diff --git a/extra/documents/documents.factor b/extra/documents/documents.factor old mode 100644 new mode 100755 index bc4dc412fc..01034e0e3f --- a/extra/documents/documents.factor +++ b/extra/documents/documents.factor @@ -167,6 +167,12 @@ M: char-elt prev-elt M: char-elt next-elt drop [ drop 1 +col ] (next-char) ; +TUPLE: one-char-elt ; + +M: one-char-elt prev-elt 2drop ; + +M: one-char-elt next-elt 2drop ; + : (word-elt) ( loc document quot -- loc ) pick >r >r >r first2 swap r> doc-line r> call diff --git a/extra/ui/gadgets/editors/editors.factor b/extra/ui/gadgets/editors/editors.factor index 65758ab54c..84cc01cdb6 100755 --- a/extra/ui/gadgets/editors/editors.factor +++ b/extra/ui/gadgets/editors/editors.factor @@ -4,7 +4,7 @@ USING: arrays documents ui.clipboards ui.commands ui.gadgets ui.gadgets.borders ui.gadgets.buttons ui.gadgets.labels ui.gadgets.scrollers ui.gadgets.theme ui.render ui.gestures io kernel math models namespaces opengl opengl.gl sequences strings -io.styles math.vectors sorting colors combinators ; +io.styles math.vectors sorting colors combinators assocs ; IN: ui.gadgets.editors TUPLE: editor @@ -94,8 +94,11 @@ M: editor ungraft* rot editor-line x>offset , ] { } make ; +: clicked-loc ( editor -- loc ) + [ hand-rel ] keep point>loc ; + : click-loc ( editor model -- ) - >r [ hand-rel ] keep point>loc r> set-model ; + >r clicked-loc r> set-model ; : focus-editor ( editor -- ) t over set-editor-focused? relayout-1 ; @@ -244,11 +247,37 @@ M: editor user-input* M: editor gadget-text* editor-string % ; -: start-selection ( editor -- ) - dup editor-caret click-loc ; - : extend-selection ( editor -- ) - dup request-focus start-selection ; + dup request-focus dup editor-caret click-loc ; + +: mouse-elt ( -- elelement ) + hand-click# get { + { 2 T{ one-word-elt } } + { 3 T{ one-line-elt } } + } at T{ one-char-elt } or ; + +: drag-direction? ( loc editor -- ? ) + editor-mark* <=> 0 < ; + +: drag-selection-caret ( loc editor element -- loc ) + >r [ drag-direction? ] 2keep + gadget-model + r> prev/next-elt ? ; + +: drag-selection-mark ( loc editor element -- loc ) + >r [ drag-direction? not ] 2keep + nip dup editor-mark* swap gadget-model + r> prev/next-elt ? ; + +: drag-caret&mark ( editor -- caret mark ) + dup clicked-loc swap mouse-elt + [ drag-selection-caret ] 3keep + drag-selection-mark ; + +: drag-selection ( editor -- ) + dup drag-caret&mark + pick editor-mark set-model + swap editor-caret set-model ; : editor-cut ( editor clipboard -- ) dupd gadget-copy remove-selection ; @@ -296,17 +325,10 @@ M: editor gadget-text* editor-string % ; dup T{ one-word-elt } select-elt ] unless gadget-selection ; -: (position-caret) ( editor -- ) - dup extend-selection - dup editor-mark click-loc ; - : position-caret ( editor -- ) - hand-click# get { - { 1 [ (position-caret) ] } - { 2 [ T{ one-word-elt } select-elt ] } - { 3 [ T{ one-line-elt } select-elt ] } - [ 2drop ] - } case ; + mouse-elt dup T{ one-char-elt } = + [ drop dup extend-selection dup editor-mark click-loc ] + [ select-elt ] if ; : insert-newline "\n" swap user-input ; @@ -408,7 +430,7 @@ editor "caret-motion" f { editor "selection" f { { T{ button-down f { S+ } } extend-selection } - { T{ drag } start-selection } + { T{ drag } drag-selection } { T{ gain-focus } focus-editor } { T{ lose-focus } unfocus-editor } { T{ delete-action } remove-selection } diff --git a/extra/ui/gestures/gestures.factor b/extra/ui/gestures/gestures.factor index 756ddfbf00..3d1e7baf7f 100755 --- a/extra/ui/gestures/gestures.factor +++ b/extra/ui/gestures/gestures.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays assocs kernel math models namespaces sequences words strings system hashtables math.parser -math.vectors tuples classes ui.gadgets timers combinators ; +math.vectors tuples classes ui.gadgets timers combinators.lib ; IN: ui.gestures : set-gestures ( class hash -- ) "gestures" set-word-prop ; @@ -187,12 +187,11 @@ drag-timer construct-empty drag-timer set-global : multi-click? ( button -- ? ) { - { [ multi-click-timeout? not ] [ f ] } - { [ multi-click-button? not ] [ f ] } - { [ multi-click-position? not ] [ f ] } - { [ multi-click-position? not ] [ f ] } - { [ t ] [ t ] } - } cond nip ; + [ multi-click-timeout? ] + [ multi-click-button? ] + [ multi-click-position? ] + [ multi-click-position? ] + } && nip ; : update-click# ( button -- ) global [ diff --git a/extra/ui/windows/windows.factor b/extra/ui/windows/windows.factor index 3ce745970d..290e4ef311 100755 --- a/extra/ui/windows/windows.factor +++ b/extra/ui/windows/windows.factor @@ -397,8 +397,10 @@ M: windows-ui-backend (close-window) GetDoubleClickTime double-click-timeout set-global ; : cleanup-win32-ui ( -- ) - class-name-ptr get-global f UnregisterClass drop - class-name-ptr get-global [ free ] when* + class-name-ptr get-global [ + dup f UnregisterClass drop + free + ] when* f class-name-ptr set-global ; : setup-pixel-format ( hdc -- ) From 937446c53b96d5faacf84d056d7bac25a0af1d8c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 23 Nov 2007 16:24:57 -0500 Subject: [PATCH 29/90] Editors tweaks --- extra/tools/test/ui/ui.factor | 2 +- extra/ui/gadgets/editors/editors-tests.factor | 2 +- extra/ui/gadgets/gadgets-tests.factor | 2 +- extra/ui/gadgets/scrollers/scrollers-tests.factor | 2 +- extra/ui/tools/browser/browser-tests.factor | 2 +- extra/ui/tools/listener/listener-tests.factor | 2 +- extra/ui/tools/search/search-tests.factor | 2 +- extra/ui/tools/tools-tests.factor | 2 +- extra/ui/tools/walker/walker-tests.factor | 2 +- extra/ui/ui.factor | 10 +--------- 10 files changed, 10 insertions(+), 18 deletions(-) diff --git a/extra/tools/test/ui/ui.factor b/extra/tools/test/ui/ui.factor index 6dcf9da4b5..0376e7f4c7 100755 --- a/extra/tools/test/ui/ui.factor +++ b/extra/tools/test/ui/ui.factor @@ -1,5 +1,5 @@ USING: dlists ui.gadgets kernel ui namespaces io.streams.string -io ui.private ; +io ; IN: tools.test.ui ! We can't print to stdio here because that might be a pane diff --git a/extra/ui/gadgets/editors/editors-tests.factor b/extra/ui/gadgets/editors/editors-tests.factor index 6966e9639f..6be0423e95 100755 --- a/extra/ui/gadgets/editors/editors-tests.factor +++ b/extra/ui/gadgets/editors/editors-tests.factor @@ -1,5 +1,5 @@ USING: ui.gadgets.editors tools.test kernel io io.streams.plain -definitions namespaces ui.gadgets ui.private +definitions namespaces ui.gadgets ui.gadgets.grids prettyprint documents ui.gestures tools.test.inference tools.test.ui models ; diff --git a/extra/ui/gadgets/gadgets-tests.factor b/extra/ui/gadgets/gadgets-tests.factor index 6c651fa248..48bb3718cb 100755 --- a/extra/ui/gadgets/gadgets-tests.factor +++ b/extra/ui/gadgets/gadgets-tests.factor @@ -2,7 +2,7 @@ IN: temporary USING: ui.gadgets ui.gadgets.packs ui.gadgets.worlds tools.test namespaces models kernel tools.test.inference dlists math math.parser ui sequences hashtables assocs io arrays -prettyprint io.streams.string ui.private ; +prettyprint io.streams.string ; [ T{ rect f { 10 10 } { 20 20 } } ] [ diff --git a/extra/ui/gadgets/scrollers/scrollers-tests.factor b/extra/ui/gadgets/scrollers/scrollers-tests.factor index 7d0dd0158f..a53cf1fb0e 100755 --- a/extra/ui/gadgets/scrollers/scrollers-tests.factor +++ b/extra/ui/gadgets/scrollers/scrollers-tests.factor @@ -1,5 +1,5 @@ IN: temporary -USING: ui.gadgets ui.gadgets.scrollers ui.private +USING: ui.gadgets ui.gadgets.scrollers namespaces tools.test kernel models ui.gadgets.viewports ui.gadgets.labels ui.gadgets.grids ui.gadgets.frames ui.gadgets.sliders math math.vectors arrays sequences diff --git a/extra/ui/tools/browser/browser-tests.factor b/extra/ui/tools/browser/browser-tests.factor index 00c8e5489c..5a343919e7 100755 --- a/extra/ui/tools/browser/browser-tests.factor +++ b/extra/ui/tools/browser/browser-tests.factor @@ -1,6 +1,6 @@ IN: temporary USING: tools.test tools.test.ui ui.tools.browser -tools.test.inference ui.private ; +tools.test.inference ; { 0 1 } [ ] unit-test-effect [ ] [ [ ] with-grafted-gadget ] unit-test diff --git a/extra/ui/tools/listener/listener-tests.factor b/extra/ui/tools/listener/listener-tests.factor index 62bd350e71..4e59fd63ee 100755 --- a/extra/ui/tools/listener/listener-tests.factor +++ b/extra/ui/tools/listener/listener-tests.factor @@ -1,7 +1,7 @@ USING: continuations documents ui.tools.interactor ui.tools.listener hashtables kernel namespaces parser sequences timers tools.test ui.commands ui.gadgets ui.gadgets.editors -ui.gadgets.panes vocabs words tools.test.ui ui.private ; +ui.gadgets.panes vocabs words tools.test.ui ; IN: temporary timers [ init-timers ] unless diff --git a/extra/ui/tools/search/search-tests.factor b/extra/ui/tools/search/search-tests.factor index ed110e19d6..47ae786f59 100755 --- a/extra/ui/tools/search/search-tests.factor +++ b/extra/ui/tools/search/search-tests.factor @@ -1,6 +1,6 @@ USING: assocs ui.tools.search help.topics io.files io.styles kernel namespaces sequences source-files threads timers -tools.test ui.gadgets ui.gestures ui.private vocabs +tools.test ui.gadgets ui.gestures vocabs vocabs.loader words tools.test.ui debugger ; IN: temporary diff --git a/extra/ui/tools/tools-tests.factor b/extra/ui/tools/tools-tests.factor index eb30b198d6..919d1705af 100755 --- a/extra/ui/tools/tools-tests.factor +++ b/extra/ui/tools/tools-tests.factor @@ -2,7 +2,7 @@ USING: ui.tools ui.tools.interactor ui.tools.listener ui.tools.search ui.tools.workspace kernel models namespaces sequences timers tools.test ui.gadgets ui.gadgets.buttons ui.gadgets.labelled ui.gadgets.presentations -ui.gadgets.scrollers vocabs tools.test.ui ui ui.private ; +ui.gadgets.scrollers vocabs tools.test.ui ui ; IN: temporary [ diff --git a/extra/ui/tools/walker/walker-tests.factor b/extra/ui/tools/walker/walker-tests.factor index b37c38c6ed..eea6d78f22 100755 --- a/extra/ui/tools/walker/walker-tests.factor +++ b/extra/ui/tools/walker/walker-tests.factor @@ -1,6 +1,6 @@ USING: arrays continuations ui.tools.listener ui.tools.walker ui.tools.workspace inspector kernel namespaces sequences threads -listener tools.test ui ui.gadgets ui.gadgets.worlds ui.private +listener tools.test ui ui.gadgets ui.gadgets.worlds ui.gadgets.packs vectors ui.tools tools.interpreter tools.interpreter.debug tools.test.inference tools.test.ui ; IN: temporary diff --git a/extra/ui/ui.factor b/extra/ui/ui.factor index 0e1b82ab9b..0c3b3e7867 100755 --- a/extra/ui/ui.factor +++ b/extra/ui/ui.factor @@ -28,8 +28,6 @@ SYMBOL: windows : unregister-window ( handle -- ) windows global [ [ first = not ] curry* subset ] change-at ; - - : open-world-window ( world -- ) dup pref-dim over set-gadget-dim dup relayout graft ; @@ -90,8 +86,6 @@ SYMBOL: ui-hook \ layout-queue set-global V{ } clone windows set-global ; - - : ui-step ( -- ) [ do-timers From f0d29daedddca86799c3715210ef9945ae57cf36 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 23 Nov 2007 17:23:53 -0500 Subject: [PATCH 30/90] Remove debugging --- extra/ui/ui.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/ui/ui.factor b/extra/ui/ui.factor index 0c3b3e7867..1f7f0dabca 100755 --- a/extra/ui/ui.factor +++ b/extra/ui/ui.factor @@ -127,7 +127,7 @@ SYMBOL: ui-hook ] { } make ; : redraw-worlds ( seq -- ) - [ dup update-hand [ draw-world ] time ] each ; + [ dup update-hand draw-world ] each ; : notify ( gadget -- ) dup gadget-graft-state { From 2da85091341eac0d94609dde3a0afd671f6d005b Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 15:41:27 -0500 Subject: [PATCH 31/90] Update Cocoa UI backend for recent changes --- extra/ui/cocoa/cocoa.factor | 10 +++++++++- extra/ui/cocoa/views/views.factor | 11 ++++++++--- extra/ui/tools/deploy/deploy.factor | 7 ++++++- extra/ui/ui.factor | 4 +++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/extra/ui/cocoa/cocoa.factor b/extra/ui/cocoa/cocoa.factor index 52722a2fab..6607a22f50 100755 --- a/extra/ui/cocoa/cocoa.factor +++ b/extra/ui/cocoa/cocoa.factor @@ -60,11 +60,19 @@ M: cocoa-ui-backend set-title ( string world -- ) drop ] if ; -M: cocoa-ui-backend (open-world-window) ( world -- ) +M: cocoa-ui-backend (open-window) ( world -- ) dup gadget-window dup auto-position world-handle second f -> makeKeyAndOrderFront: ; +M: cocoa-ui-backend (close-window) ( handle -- ) + first unregister-window ; + +M: cocoa-ui-backend close-window ( gadget -- ) + find-world [ + world-handle second f -> performClose: + ] when* ; + M: cocoa-ui-backend raise-window ( world -- ) world-handle [ second dup f -> orderFront: -> makeKeyWindow diff --git a/extra/ui/cocoa/views/views.factor b/extra/ui/cocoa/views/views.factor index 31d6c89f8c..feac09ffc4 100644 --- a/extra/ui/cocoa/views/views.factor +++ b/extra/ui/cocoa/views/views.factor @@ -3,7 +3,8 @@ USING: alien arrays assocs cocoa kernel math cocoa.messages cocoa.subclassing cocoa.classes cocoa.views cocoa.application cocoa.pasteboard cocoa.types cocoa.windows sequences ui -ui.gadgets ui.gadgets.worlds ui.gestures core-foundation ; +ui.gadgets ui.gadgets.worlds ui.gestures core-foundation +threads ; IN: ui.cocoa.views : send-mouse-moved ( view event -- ) @@ -313,8 +314,6 @@ CLASS: { { "dealloc" "void" { "id" "SEL" } [ drop - dup window stop-world - dup unregister-window dup remove-observer SUPER-> dealloc ] @@ -347,6 +346,12 @@ CLASS: { forget-rollover 2nip -> object -> contentView window unfocus-world ] +} + +{ "windowShouldClose:" "bool" { "id" "SEL" "id" } + [ + 2nip -> contentView window ungraft t + ] } ; : install-window-delegate ( window -- ) diff --git a/extra/ui/tools/deploy/deploy.factor b/extra/ui/tools/deploy/deploy.factor index c4b41e119f..e7d9161079 100755 --- a/extra/ui/tools/deploy/deploy.factor +++ b/extra/ui/tools/deploy/deploy.factor @@ -77,7 +77,8 @@ TUPLE: deploy-gadget vocab settings ; : com-deploy ( gadget -- ) dup com-save - find-deploy-vocab [ deploy ] curry call-listener ; + dup find-deploy-vocab [ deploy ] curry call-listener + close-window ; : com-help ( -- ) "ui-deploy" help-window ; @@ -86,7 +87,11 @@ TUPLE: deploy-gadget vocab settings ; { +nullary+ t } } define-command +: com-close ( gadget -- ) + close-window ; + deploy-gadget "toolbar" f { + { f com-close } { f com-help } { f com-revert } { f com-save } diff --git a/extra/ui/ui.factor b/extra/ui/ui.factor index 1f7f0dabca..98549a16f7 100755 --- a/extra/ui/ui.factor +++ b/extra/ui/ui.factor @@ -72,7 +72,9 @@ M: world ungraft* >r [ 1 track, ] { 0 1 } make-track r> f open-world-window ; -: close-window ( gadget -- ) +HOOK: close-window ui-backend ( gadget -- ) + +M: object close-window find-world [ ungraft ] when* ; : find-window ( quot -- world ) From c17640f9820498c0f95bf2e841268baa1c6cfc9b Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 16:28:40 -0500 Subject: [PATCH 32/90] Cocoa fixes --- extra/cocoa/cocoa.factor | 3 ++- extra/cocoa/messages/messages.factor | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/extra/cocoa/cocoa.factor b/extra/cocoa/cocoa.factor index ddfb601be5..f13a5e2ab0 100644 --- a/extra/cocoa/cocoa.factor +++ b/extra/cocoa/cocoa.factor @@ -58,8 +58,9 @@ SYMBOL: super-sent-messages "NSSavePanel" "NSView" "NSWindow" + "NSWorkspace" } [ - f import-objc-class + [ ] import-objc-class ] each : ( str -- alien ) -> autorelease ; diff --git a/extra/cocoa/messages/messages.factor b/extra/cocoa/messages/messages.factor index 91c4262312..54ddbaa0cf 100644 --- a/extra/cocoa/messages/messages.factor +++ b/extra/cocoa/messages/messages.factor @@ -4,7 +4,7 @@ USING: alien alien.c-types alien.compiler arrays assocs combinators compiler inference.transforms kernel math namespaces parser prettyprint prettyprint.sections quotations sequences strings words cocoa.runtime io macros -memoize ; +memoize debugger ; IN: cocoa.messages : make-sender ( method function -- quot ) @@ -201,8 +201,11 @@ H{ : import-objc-class ( name quot -- ) 2dup unless-defined dupd define-objc-class-word - dup objc-class register-objc-methods - objc-meta-class register-objc-methods ; + [ + dup + objc-class register-objc-methods + objc-meta-class register-objc-methods + ] curry try ; : root-class ( class -- root ) dup objc-class-super-class [ root-class ] [ ] ?if ; From 3d17dbb4338227a661a20c97f3cbecffbcb76fd3 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 16:29:13 -0500 Subject: [PATCH 33/90] Update X11 UI backend --- extra/ui/x11/x11.factor | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/extra/ui/x11/x11.factor b/extra/ui/x11/x11.factor index 165989d86a..857b13a973 100755 --- a/extra/ui/x11/x11.factor +++ b/extra/ui/x11/x11.factor @@ -158,18 +158,14 @@ M: world selection-request-event { [ t ] [ drop send-notify-failure ] } } cond ; -: close-window ( handle -- ) +M: x11-ui-backend (close-window) ( handle -- ) dup x11-handle-xic XDestroyIC dup x11-handle-glx destroy-glx x11-handle-window dup unregister-window destroy-window ; M: world client-event - swap close-box? [ - dup world-handle >r stop-world r> close-window - ] [ - drop - ] if ; + swap close-box? [ ungraft ] [ drop ] if ; : gadget-window ( world -- ) dup world-loc over rect-dim glx-window @@ -222,7 +218,7 @@ M: x11-ui-backend set-title ( string world -- ) world-handle x11-handle-window swap dpy get -rot 3dup set-title-old set-title-new ; -M: x11-ui-backend (open-world-window) ( world -- ) +M: x11-ui-backend (open-window) ( world -- ) dup gadget-window world-handle x11-handle-window dup set-closable map-window ; From 90731836af126b384d811815a5a5b9130e6f0b32 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 16:32:59 -0500 Subject: [PATCH 34/90] Fix unix mmap --- extra/io/unix/mmap/mmap.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/io/unix/mmap/mmap.factor b/extra/io/unix/mmap/mmap.factor index d7dcad67d9..5a72a5426a 100644 --- a/extra/io/unix/mmap/mmap.factor +++ b/extra/io/unix/mmap/mmap.factor @@ -13,7 +13,7 @@ IN: io.unix.mmap M: unix-io ( path length -- obj ) swap >r dup PROT_READ PROT_WRITE bitor MAP_FILE MAP_SHARED bitor - r> mmap-open \ mapped-file construct-boa ; + r> mmap-open f mapped-file construct-boa ; M: unix-io (close-mapped-file) ( mmap -- ) [ mapped-file-address ] keep From aaa493ebd293faeef8b1284c8aa11ec42a433ac4 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 16:38:20 -0500 Subject: [PATCH 35/90] Implement copy-file on Windows --- core/io/files/files.factor | 4 +++- extra/io/windows/windows.factor | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/io/files/files.factor b/core/io/files/files.factor index 967f2f7913..1dd4259bb6 100755 --- a/core/io/files/files.factor +++ b/core/io/files/files.factor @@ -97,7 +97,9 @@ TUPLE: no-parent-directory path ; ] } } cond drop ; -: copy-file ( from to -- ) +HOOK: copy-file io-backend ( from to -- ) + +M: object copy-file dup parent-directory make-directories [ stdio get swap diff --git a/extra/io/windows/windows.factor b/extra/io/windows/windows.factor index ac0ede0e06..df0fd0d900 100755 --- a/extra/io/windows/windows.factor +++ b/extra/io/windows/windows.factor @@ -116,6 +116,10 @@ M: windows-io delete-file ( path -- ) normalize-pathname DeleteFile win32-error=0/f ; +M: windows-io copy-file ( from to -- ) + normalize-pathname + f CopyFile win32-error=0/f ; + M: windows-io make-directory ( path -- ) normalize-pathname f CreateDirectory win32-error=0/f ; From a13975502c46fd04fc1907e0d94aba63fc6bf4dd Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 16:39:00 -0500 Subject: [PATCH 36/90] More Windows CopyFile stuff --- extra/io/windows/windows.factor | 10 ++++------ extra/windows/kernel32/kernel32.factor | 5 +++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/extra/io/windows/windows.factor b/extra/io/windows/windows.factor index df0fd0d900..65efce4426 100755 --- a/extra/io/windows/windows.factor +++ b/extra/io/windows/windows.factor @@ -109,16 +109,14 @@ M: windows-io ( path -- stream ) open-append ; M: windows-io rename-file ( from to -- ) - [ normalize-pathname ] 2apply - MoveFile win32-error=0/f ; + [ normalize-pathname ] 2apply MoveFile win32-error=0/f ; M: windows-io delete-file ( path -- ) - normalize-pathname - DeleteFile win32-error=0/f ; + normalize-pathname DeleteFile win32-error=0/f ; M: windows-io copy-file ( from to -- ) - normalize-pathname - f CopyFile win32-error=0/f ; + dup parent-directory make-directories + [ normalize-pathname ] 2apply f CopyFile win32-error=0/f ; M: windows-io make-directory ( path -- ) normalize-pathname diff --git a/extra/windows/kernel32/kernel32.factor b/extra/windows/kernel32/kernel32.factor index 8776378929..bb8919dd70 100755 --- a/extra/windows/kernel32/kernel32.factor +++ b/extra/windows/kernel32/kernel32.factor @@ -566,7 +566,8 @@ FUNCTION: BOOL ConnectNamedPipe ( HANDLE hNamedPipe, LPOVERLAPPED lpOverlapped ) ! FUNCTION: CopyFileA ! FUNCTION: CopyFileExA ! FUNCTION: CopyFileExW -! FUNCTION: CopyFileW +FUNCTION: BOOL CopyFileW ( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists ) ; +: CopyFile CopyFileW ; inline ! FUNCTION: CopyLZFile ! FUNCTION: CreateActCtxA ! FUNCTION: CreateActCtxW @@ -575,7 +576,7 @@ FUNCTION: BOOL ConnectNamedPipe ( HANDLE hNamedPipe, LPOVERLAPPED lpOverlapped ) ! FUNCTION: CreateDirectoryExA ! FUNCTION: CreateDirectoryExW FUNCTION: BOOL CreateDirectoryW ( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttribytes ) ; -: CreateDirectory CreateDirectoryW ; +: CreateDirectory CreateDirectoryW ; inline ! FUNCTION: CreateEventA ! FUNCTION: CreateEventW From cb1959b54994afdd5b939671e17d9a6497112a77 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 16:39:16 -0500 Subject: [PATCH 37/90] OS X deploy tool cleanup --- extra/tools/deploy/macosx/macosx.factor | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/extra/tools/deploy/macosx/macosx.factor b/extra/tools/deploy/macosx/macosx.factor index d59665488a..a5319563be 100755 --- a/extra/tools/deploy/macosx/macosx.factor +++ b/extra/tools/deploy/macosx/macosx.factor @@ -1,18 +1,16 @@ ! Copyright (C) 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: io io.files io.launcher kernel namespaces sequences -system cocoa.plists cocoa.application tools.deploy -tools.deploy.config assocs hashtables prettyprint ; +system tools.deploy tools.deploy.config assocs hashtables +prettyprint unix io.unix.backend cocoa cocoa.plists +cocoa.application cocoa.classes ; IN: tools.deploy.macosx : touch ( path -- ) - "touch \"" swap "\"" 3append run-process ; + { "touch" } swap add run-process ; : rm ( path -- ) - "rm -rf \"" swap "\"" 3append run-process ; - -: chmod ( path perms -- ) - [ "chmod " % % " \"" % % "\"" % ] "" make run-process ; + { "rm" "-rf" } swap add run-process ; : bundle-dir ( -- dir ) vm parent-directory parent-directory ; @@ -24,7 +22,7 @@ IN: tools.deploy.macosx : copy-vm ( executable bundle-name -- vm ) "Contents/MacOS/" path+ swap path+ vm swap [ copy-file ] keep - [ "755" chmod ] keep ; + [ 755 chmod io-error ] keep ; : copy-fonts ( name -- ) "fonts/" resource-path @@ -63,6 +61,12 @@ TUPLE: macosx-deploy-implementation ; T{ macosx-deploy-implementation } deploy-implementation set-global +: show-in-finder ( path -- ) + NSWorkspace + -> sharedWorkspace + over rot parent-directory + -> selectFile:inFileViewerRootedAtPath: drop ; + M: macosx-deploy-implementation deploy ( vocab -- ) ".app deploy tool" assert.app "." resource-path cd @@ -70,5 +74,6 @@ M: macosx-deploy-implementation deploy ( vocab -- ) bundle-name rm [ bundle-name create-app-dir ] keep [ bundle-name deploy.app-image ] keep - namespace - ] bind deploy* ; + namespace deploy* + bundle-name show-in-finder + ] bind ; From c84577e86f60a9b4bcff113ee2c7be7b4146220a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 16:39:27 -0500 Subject: [PATCH 38/90] Add another blog to blogroll --- extra/webapps/planet/planet.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extra/webapps/planet/planet.factor b/extra/webapps/planet/planet.factor index 3abb42ecf1..c7f4e4c2f1 100644 --- a/extra/webapps/planet/planet.factor +++ b/extra/webapps/planet/planet.factor @@ -18,7 +18,7 @@ TUPLE: posting author title date link body ; #! entries is an array of { author entries } pairs. dup [ [ fetch-feed ] [ error. drop f ] recover - ] parallel-map [ ] subset + ] parallel-map [ [ >r first r> 2array ] curry* map ] 2map concat ; : sort-entries ( entries -- entries' ) @@ -108,6 +108,7 @@ SYMBOL: cached-postings { "Kio M. Smallwood" "http://sekenre.wordpress.com/feed/atom/" "http://sekenre.wordpress.com/" } + { "Phil Dawes" "http://www.phildawes.net/blog/category/factor/feed/atom" "http://www.phildawes.net/blog/" } { "Samuel Tardieu" "http://www.rfc1149.net/blog/tag/factor/feed/atom/" "http://www.rfc1149.net/blog/tag/factor/" } { "Slava Pestov" "http://factor-language.blogspot.com/atom.xml" "http://factor-language.blogspot.com/" } } default-blogroll set-global From 10db30089596b63d5908cea52555871f9e20c08b Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 16:58:31 -0500 Subject: [PATCH 39/90] Tweak UI shortcuts a bit to not clash with F8 being reserved for Spaces in Leopard --- extra/ui/tools/tools.factor | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/extra/ui/tools/tools.factor b/extra/ui/tools/tools.factor index 4184591cec..48d341b4b8 100755 --- a/extra/ui/tools/tools.factor +++ b/extra/ui/tools/tools.factor @@ -67,11 +67,11 @@ M: workspace model-changed : com-profiler profiler-gadget select-tool ; workspace "tool-switching" f { - { T{ key-down f f "F2" } com-listener } - { T{ key-down f f "F3" } com-browser } - { T{ key-down f f "F4" } com-inspector } - { T{ key-down f f "F5" } com-walker } - { T{ key-down f f "F6" } com-profiler } + { T{ key-down f { C+ } "1" } com-listener } + { T{ key-down f { C+ } "2" } com-browser } + { T{ key-down f { C+ } "3" } com-inspector } + { T{ key-down f { C+ } "4" } com-walker } + { T{ key-down f { C+ } "5" } com-profiler } } define-command-map \ workspace-window @@ -86,8 +86,8 @@ H{ { +nullary+ t } { +listener+ t } } define-command workspace "workflow" f { { T{ key-down f { C+ } "n" } workspace-window } { T{ key-down f f "ESC" } hide-popup } - { T{ key-down f f "F8" } refresh-all } - { T{ key-down f { A+ } "F8" } test-changes } + { T{ key-down f f "F2" } refresh-all } + { T{ key-down f { A+ } "F2" } test-changes } } define-command-map [ From 43931a4a4334c97d18facb6b0cd9c63cff52755f Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 18:05:34 -0500 Subject: [PATCH 40/90] Fix copy-file --- extra/io/windows/launcher/launcher.factor | 5 ++++- extra/io/windows/windows.factor | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/extra/io/windows/launcher/launcher.factor b/extra/io/windows/launcher/launcher.factor index 3caa2c7113..31893fab0c 100755 --- a/extra/io/windows/launcher/launcher.factor +++ b/extra/io/windows/launcher/launcher.factor @@ -53,8 +53,11 @@ TUPLE: CreateProcess-args CreateProcess-args-lpProcessInformation } get-slots CreateProcess win32-error=0/f ; +: escape-argument ( str -- newstr ) + [ [ dup CHAR: " = [ CHAR: \\ , ] when , ] each ] "" make ; + : join-arguments ( args -- cmd-line ) - [ "\"" swap "\"" 3append ] map " " join ; + [ "\"" swap escape-argument "\"" 3append ] map " " join ; : app-name/cmd-line ( -- app-name cmd-line ) +command+ get [ diff --git a/extra/io/windows/windows.factor b/extra/io/windows/windows.factor index 65efce4426..53ee82ed65 100755 --- a/extra/io/windows/windows.factor +++ b/extra/io/windows/windows.factor @@ -116,7 +116,7 @@ M: windows-io delete-file ( path -- ) M: windows-io copy-file ( from to -- ) dup parent-directory make-directories - [ normalize-pathname ] 2apply f CopyFile win32-error=0/f ; + [ normalize-pathname ] 2apply 0 CopyFile win32-error=0/f ; M: windows-io make-directory ( path -- ) normalize-pathname From 6668b6a975d354d679338785a46650b21adc6de7 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 18:07:01 -0500 Subject: [PATCH 41/90] Minor parser combinators tweaks (hope doublec doesn't mind) --- extra/fjsc/fjsc-tests.factor | 28 ++-- extra/fjsc/fjsc.factor | 148 +++++++++--------- .../parser-combinators-docs.factor | 17 +- .../parser-combinators.factor | 43 +++-- .../parser-combinators/replace/replace.factor | 6 +- .../simple/simple-docs.factor | 39 ++--- extra/parser-combinators/simple/simple.factor | 3 - extra/webapps/fjsc/fjsc.factor | 18 +-- 8 files changed, 149 insertions(+), 153 deletions(-) mode change 100644 => 100755 extra/fjsc/fjsc-tests.factor mode change 100644 => 100755 extra/fjsc/fjsc.factor mode change 100644 => 100755 extra/parser-combinators/parser-combinators-docs.factor mode change 100644 => 100755 extra/parser-combinators/parser-combinators.factor mode change 100644 => 100755 extra/parser-combinators/replace/replace.factor mode change 100644 => 100755 extra/parser-combinators/simple/simple-docs.factor mode change 100644 => 100755 extra/parser-combinators/simple/simple.factor mode change 100644 => 100755 extra/webapps/fjsc/fjsc.factor diff --git a/extra/fjsc/fjsc-tests.factor b/extra/fjsc/fjsc-tests.factor old mode 100644 new mode 100755 index 8dda62faea..1c70c0c325 --- a/extra/fjsc/fjsc-tests.factor +++ b/extra/fjsc/fjsc-tests.factor @@ -4,51 +4,51 @@ USING: kernel tools.test parser-combinators lazy-lists fjsc ; IN: temporary { T{ ast-expression f { T{ ast-number f 55 } T{ ast-identifier f "2abc1" } T{ ast-number f 100 } } } } [ - "55 2abc1 100" 'expression' parse car parse-result-parsed + "55 2abc1 100" 'expression' parse-1 ] unit-test { T{ ast-quotation f { T{ ast-number f 55 } T{ ast-identifier f "2abc1" } T{ ast-number f 100 } } } } [ - "[ 55 2abc1 100 ]" 'quotation' parse car parse-result-parsed + "[ 55 2abc1 100 ]" 'quotation' parse-1 ] unit-test { T{ ast-array f { T{ ast-number f 55 } T{ ast-identifier f "2abc1" } T{ ast-number f 100 } } } } [ - "{ 55 2abc1 100 }" 'array' parse car parse-result-parsed + "{ 55 2abc1 100 }" 'array' parse-1 ] unit-test { T{ ast-stack-effect f { } { "d" "e" "f" } } } [ - "( -- d e f )" 'stack-effect' parse car parse-result-parsed + "( -- d e f )" 'stack-effect' parse-1 ] unit-test { T{ ast-stack-effect f { "a" "b" "c" } { "d" "e" "f" } } } [ - "( a b c -- d e f )" 'stack-effect' parse car parse-result-parsed + "( a b c -- d e f )" 'stack-effect' parse-1 ] unit-test { T{ ast-stack-effect f { "a" "b" "c" } { } } } [ - "( a b c -- )" 'stack-effect' parse car parse-result-parsed + "( a b c -- )" 'stack-effect' parse-1 ] unit-test { T{ ast-stack-effect f { } { } } } [ - "( -- )" 'stack-effect' parse car parse-result-parsed + "( -- )" 'stack-effect' parse-1 ] unit-test { } [ ": foo ( a b -- c d ) abcdefghijklmn 123 ;" 'expression' parse car drop ] unit-test - -{ T{ ast-expression f { T{ ast-string f "abcd" } } } } [ - "\"abcd\"" 'statement' parse car parse-result-parsed -] unit-test + +{ T{ ast-expression f { T{ ast-string f "abcd" } } } } [ + "\"abcd\"" 'statement' parse-1 +] unit-test { T{ ast-expression f { T{ ast-use f "foo" } } } } [ - "USE: foo" 'statement' parse car parse-result-parsed + "USE: foo" 'statement' parse-1 ] unit-test { T{ ast-expression f { T{ ast-in f "foo" } } } } [ - "IN: foo" 'statement' parse car parse-result-parsed + "IN: foo" 'statement' parse-1 ] unit-test { T{ ast-expression f { T{ ast-using f { "foo" "bar" } } } } } [ - "USING: foo bar ;" 'statement' parse car parse-result-parsed + "USING: foo bar ;" 'statement' parse-1 ] unit-test diff --git a/extra/fjsc/fjsc.factor b/extra/fjsc/fjsc.factor old mode 100644 new mode 100755 index c6572f147c..22031afb25 --- a/extra/fjsc/fjsc.factor +++ b/extra/fjsc/fjsc.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2006 Chris Double. All Rights Reserved. ! See http://factorcode.org/license.txt for BSD license. USING: kernel lazy-lists parser-combinators parser-combinators.simple - strings promises sequences math math.parser namespaces words + strings promises sequences math math.parser namespaces words quotations arrays hashtables io io.streams.string assocs ; IN: fjsc @@ -53,11 +53,11 @@ C: ast-hashtable [ CHAR: ] = not ] keep [ CHAR: ;" = not ] keep [ CHAR: " = not ] keep - digit? not + digit? not and and and and and ; -LAZY: 'identifier-ends' ( -- parser ) - [ +LAZY: 'identifier-ends' ( -- parser ) + [ [ blank? not ] keep [ CHAR: " = not ] keep [ CHAR: ;" = not ] keep @@ -67,23 +67,23 @@ LAZY: 'identifier-ends' ( -- parser ) and and and and and ] satisfy ; -LAZY: 'identifier-middle' ( -- parser ) +LAZY: 'identifier-middle' ( -- parser ) [ identifier-middle? ] satisfy ; LAZY: 'identifier' ( -- parser ) - 'identifier-ends' + 'identifier-ends' 'identifier-middle' <&> - 'identifier-ends' <:&> + 'identifier-ends' <:&> [ concat >string f ] <@ ; - + DEFER: 'expression' LAZY: 'effect-name' ( -- parser ) - [ + [ [ blank? not ] keep CHAR: - = not - and + and ] satisfy [ >string ] <@ ; LAZY: 'stack-effect' ( -- parser ) @@ -94,24 +94,24 @@ LAZY: 'stack-effect' ( -- parser ) ")" token sp <& [ first2 ] <@ ; LAZY: 'define' ( -- parser ) - ":" token sp + ":" token sp 'identifier' sp [ ast-identifier-value ] <@ &> 'stack-effect' sp <&> 'expression' <:&> ";" token sp <& [ first3 ] <@ ; LAZY: 'quotation' ( -- parser ) - "[" token sp + "[" token sp 'expression' [ ast-expression-values ] <@ &> "]" token sp <& [ ] <@ ; LAZY: 'array' ( -- parser ) - "{" token sp + "{" token sp 'expression' [ ast-expression-values ] <@ &> "}" token sp <& [ ] <@ ; LAZY: 'word' ( -- parser ) - "\\" token sp + "\\" token sp 'identifier' sp &> [ ast-identifier-value f ] <@ ; LAZY: 'atom' ( -- parser ) @@ -137,7 +137,7 @@ LAZY: 'USING:' ( -- parser ) ";" token sp <& [ ] <@ ; LAZY: 'hashtable' ( -- parser ) - "H{" token sp + "H{" token sp 'expression' [ ast-expression-values ] <@ &> "}" token sp <& [ ] <@ ; @@ -147,14 +147,14 @@ LAZY: 'parsing-word' ( -- parser ) 'IN:' <|> ; LAZY: 'expression' ( -- parser ) - 'comment' - 'parsing-word' sp <|> - 'quotation' sp <|> + 'comment' + 'parsing-word' sp <|> + 'quotation' sp <|> 'define' sp <|> 'array' sp <|> 'hashtable' sp <|> 'word' sp <|> - 'atom' sp <|> + 'atom' sp <|> <*> [ ] <@ ; LAZY: 'statement' ( -- parser ) @@ -163,41 +163,41 @@ LAZY: 'statement' ( -- parser ) GENERIC: (compile) ( ast -- ) GENERIC: (literal) ( ast -- ) -M: ast-number (literal) +M: ast-number (literal) ast-number-value number>string , ; -M: ast-number (compile) - "factor.push_data(" , - (literal) - "," , ; - -M: ast-string (literal) - "\"" , - ast-string-value , - "\"" , ; - -M: ast-string (compile) +M: ast-number (compile) "factor.push_data(" , (literal) "," , ; -M: ast-identifier (literal) +M: ast-string (literal) + "\"" , + ast-string-value , + "\"" , ; + +M: ast-string (compile) + "factor.push_data(" , + (literal) + "," , ; + +M: ast-identifier (literal) dup ast-identifier-vocab [ - "factor.get_word(\"" , + "factor.get_word(\"" , dup ast-identifier-vocab , "\",\"" , - ast-identifier-value , - "\")" , + ast-identifier-value , + "\")" , ] [ - "factor.find_word(\"" , ast-identifier-value , "\")" , + "factor.find_word(\"" , ast-identifier-value , "\")" , ] if ; -M: ast-identifier (compile) +M: ast-identifier (compile) (literal) ".execute(" , ; -M: ast-define (compile) - "factor.define_word(\"" , - dup ast-define-name , +M: ast-define (compile) + "factor.define_word(\"" , + dup ast-define-name , "\",\"source\"," , ast-define-expression (compile) "," , ; @@ -207,7 +207,7 @@ M: ast-define (compile) unclip dup ast-comment? not [ "function() {" , - (compile) + (compile) do-expressions ")}" , ] [ @@ -217,74 +217,74 @@ M: ast-define (compile) drop "factor.cont.next" , ] if ; -M: ast-quotation (literal) +M: ast-quotation (literal) "factor.make_quotation(\"source\"," , ast-quotation-values do-expressions ")" , ; -M: ast-quotation (compile) +M: ast-quotation (compile) "factor.push_data(factor.make_quotation(\"source\"," , ast-quotation-values do-expressions ")," , ; -M: ast-array (literal) - "[" , +M: ast-array (literal) + "[" , ast-array-elements [ "," , ] [ (literal) ] interleave "]" , ; -M: ast-array (compile) +M: ast-array (compile) "factor.push_data(" , (literal) "," , ; -M: ast-hashtable (literal) - "new Hashtable().fromAlist([" , +M: ast-hashtable (literal) + "new Hashtable().fromAlist([" , ast-hashtable-elements [ "," , ] [ (literal) ] interleave "])" , ; -M: ast-hashtable (compile) +M: ast-hashtable (compile) "factor.push_data(" , (literal) "," , ; M: ast-expression (literal) ast-expression-values [ - (literal) + (literal) ] each ; - + M: ast-expression (compile) ast-expression-values do-expressions ; -M: ast-word (literal) +M: ast-word (literal) dup ast-word-vocab [ - "factor.get_word(\"" , + "factor.get_word(\"" , dup ast-word-vocab , "\",\"" , - ast-word-value , - "\")" , + ast-word-value , + "\")" , ] [ - "factor.find_word(\"" , ast-word-value , "\")" , + "factor.find_word(\"" , ast-word-value , "\")" , ] if ; M: ast-word (compile) "factor.push_data(" , (literal) "," , ; - + M: ast-comment (compile) drop ; M: ast-stack-effect (compile) drop ; -M: ast-use (compile) +M: ast-use (compile) "factor.use(\"" , - ast-use-name , + ast-use-name , "\"," , ; -M: ast-in (compile) +M: ast-in (compile) "factor.set_in(\"" , - ast-in-name , + ast-in-name , "\"," , ; -M: ast-using (compile) +M: ast-using (compile) "factor.using([" , ast-using-names [ "," , @@ -308,17 +308,17 @@ M: string (parse-factor-quotation) ( object -- ast ) ; M: quotation (parse-factor-quotation) ( object -- ast ) - [ + [ [ (parse-factor-quotation) , ] each ] { } make ; M: array (parse-factor-quotation) ( object -- ast ) - [ + [ [ (parse-factor-quotation) , ] each ] { } make ; M: hashtable (parse-factor-quotation) ( object -- ast ) - >alist [ + >alist [ [ (parse-factor-quotation) , ] each ] { } make ; @@ -328,33 +328,33 @@ M: wrapper (parse-factor-quotation) ( object -- ast ) GENERIC: fjsc-parse ( object -- ast ) M: string fjsc-parse ( object -- ast ) - 'expression' parse car parse-result-parsed ; + 'expression' parse-1 ; M: quotation fjsc-parse ( object -- ast ) [ - [ (parse-factor-quotation) , ] each + [ (parse-factor-quotation) , ] each ] { } make ; : fjsc-compile ( ast -- string ) [ - [ + [ "(" , - (compile) + (compile) ")" , ] { } make [ write ] each ] string-out ; - + : fjsc-compile* ( string -- string ) - 'statement' parse car parse-result-parsed fjsc-compile ; + 'statement' parse-1 fjsc-compile ; : fc* ( string -- string ) [ - 'statement' parse car parse-result-parsed ast-expression-values do-expressions + 'statement' parse-1 ast-expression-values do-expressions ] { } make [ write ] each ; - + : fjsc-literal ( ast -- string ) [ [ (literal) ] { } make [ write ] each ] string-out ; - + diff --git a/extra/parser-combinators/parser-combinators-docs.factor b/extra/parser-combinators/parser-combinators-docs.factor old mode 100644 new mode 100755 index b3d25e4cd3..7b575e4da9 --- a/extra/parser-combinators/parser-combinators-docs.factor +++ b/extra/parser-combinators/parser-combinators-docs.factor @@ -3,14 +3,23 @@ USING: help.markup help.syntax parser-combinators ; HELP: list-of -{ $values +{ $values { "items" "a parser object" } { "separator" "a parser object" } { "parser" "a parser object" } } -{ $description +{ $description "Return a parser for parsing the repetition of things that are " "separated by a certain symbol. For example, comma separated lists. " "'items' is a parser that can parse the individual elements. 'separator' " - "is a parser for the symbol that separatest them. The result tree of " + "is a parser for the symbol that separatest them. The result tree of " "the resulting parser is an array of the parsed elements." } -{ $example "USE: parser-combinators" "\"1,2,3,4\" 'integer' \",\" token list-of parse car parse-result-parsed ." "{ 1 2 3 4 }" } +{ $example "USE: parser-combinators" "\"1,2,3,4\" 'integer' \",\" token list-of parse-1 ." "{ 1 2 3 4 }" } { $see-also list-of } ; +HELP: any-char-parser +{ $values + { "parser" "a parser object" } } +{ $description + "Return a parser that consumes a single value " + "from the input string. The value consumed is the " + "result of the parse." } +{ $examples +{ $example "USING: lazy-lists parser-combinators ;" "\"foo\" any-char-parser parse-1 ." "102" } } ; diff --git a/extra/parser-combinators/parser-combinators.factor b/extra/parser-combinators/parser-combinators.factor old mode 100644 new mode 100755 index fa0733f321..3e34333a41 --- a/extra/parser-combinators/parser-combinators.factor +++ b/extra/parser-combinators/parser-combinators.factor @@ -13,6 +13,9 @@ M: promise (parse) ( input parser -- list ) : parse ( input parser -- promise ) (parse) ; +: parse-1 ( input parser -- result ) + parse car parse-result-parsed ; + TUPLE: parse-result parsed unparsed ; C: parse-result @@ -23,7 +26,7 @@ C: token token-parser ( string -- parser ) M: token-parser (parse) ( input parser -- list ) token-parser-string swap over ?head-slice [ - 1list + 1list ] [ 2drop nil ] if ; @@ -43,9 +46,12 @@ M: satisfy-parser (parse) ( input parser -- list ) swap 1list ] [ 2drop nil - ] if + ] if ] if ; +LAZY: any-char-parser ( -- parser ) + [ drop t ] satisfy ; + TUPLE: epsilon-parser ; C: epsilon epsilon-parser ( -- parser ) @@ -63,7 +69,7 @@ C: succeed succeed-parser ( result -- parser ) M: succeed-parser (parse) ( input parser -- list ) #! A parser that always returns 'result' as a - #! successful parse with no input consumed. + #! successful parse with no input consumed. succeed-parser-result swap 1list ; TUPLE: fail-parser ; @@ -81,7 +87,7 @@ TUPLE: and-parser parsers ; over and-parser? [ >r and-parser-parsers r> add ] [ - 2array + 2array ] if \ and-parser construct-boa ; : and-parser-parse ( list p1 -- list ) @@ -92,13 +98,13 @@ TUPLE: and-parser parsers ; [ parse-result-parsed 2array ] keep parse-result-unparsed ] lmap-with - ] lmap-with lconcat ; - + ] lmap-with lconcat ; + M: and-parser (parse) ( input parser -- list ) #! Parse 'input' by sequentially combining the #! two parsers. First parser1 is applied to the #! input then parser2 is applied to the rest of - #! the input strings from the first parser. + #! the input strings from the first parser. and-parser-parsers unclip swapd parse [ [ and-parser-parse ] reduce ] 2curry promise ; TUPLE: or-parser p1 p2 ; @@ -115,7 +121,7 @@ M: or-parser (parse) ( input parser1 -- list ) #! Return a new string without any leading whitespace #! from the original string. dup empty? [ - dup first blank? [ 1 tail-slice left-trim-slice ] when + dup first blank? [ 1 tail-slice left-trim-slice ] when ] unless ; TUPLE: sp-parser p1 ; @@ -136,7 +142,7 @@ C: just just-parser ( p1 -- parser ) M: just-parser (parse) ( input parser -- result ) #! Calls the given parser on the input removes #! from the results anything where the remaining - #! input to be parsed is not empty. So ensures a + #! input to be parsed is not empty. So ensures a #! fully parsed input string. just-parser-p1 parse [ parse-result-unparsed empty? ] lsubset ; @@ -150,8 +156,8 @@ M: apply-parser (parse) ( input parser -- result ) #! The result of that quotation then becomes the new parse result. #! This allows modification of parse tree results (like #! converting strings to integers, etc). - [ apply-parser-p1 ] keep apply-parser-quot - -rot parse [ + [ apply-parser-p1 ] keep apply-parser-quot + -rot parse [ [ parse-result-parsed swap call ] keep parse-result-unparsed ] lmap-with ; @@ -165,7 +171,7 @@ M: some-parser (parse) ( input parser -- result ) #! the parse is complete (the remaining input is empty), #! picks the first solution and only returns the parse #! tree since the remaining input is empty. - some-parser-p1 just parse car parse-result-parsed ; + some-parser-p1 just parse-1 ; : <& ( parser1 parser2 -- parser ) @@ -230,13 +236,13 @@ LAZY: ( parser -- parser ) #! required. only-first ; -LAZY: <(*)> ( parser -- parser ) - #! Like <*> but take shortest match first. +LAZY: <(*)> ( parser -- parser ) + #! Like <*> but take shortest match first. #! Implementation by Matthew Willis. { } succeed swap dup <(*)> <&:> <|> ; LAZY: <(+)> ( parser -- parser ) - #! Like <+> but take shortest match first. + #! Like <+> but take shortest match first. #! Implementation by Matthew Willis. dup <(*)> <&:> ; @@ -249,6 +255,9 @@ LAZY: pack ( close body open -- parser ) LAZY: list-of ( items separator -- parser ) #! Given a parser for the separator and for the #! items themselves, return a parser that parses - #! lists of those items. The parse tree is an + #! lists of those items. The parse tree is an #! array of the parsed items. - over &> <*> <&:> { } succeed <|> ; \ No newline at end of file + dup -rot over &> <*> <&:> &> { } succeed <|> ; + +LAZY: surrounded-by ( parser start end -- parser' ) + [ token ] 2apply swapd pack ; \ No newline at end of file diff --git a/extra/parser-combinators/replace/replace.factor b/extra/parser-combinators/replace/replace.factor old mode 100644 new mode 100755 index 0d9b7f743a..541bde7ac7 --- a/extra/parser-combinators/replace/replace.factor +++ b/extra/parser-combinators/replace/replace.factor @@ -13,21 +13,21 @@ IN: parser-combinators } cond ; : search ( string parser -- seq ) - 'any-char' [ drop f ] <@ <|> <*> parse dup nil? [ + any-char-parser [ drop f ] <@ <|> <*> parse dup nil? [ drop { } ] [ car parse-result-parsed [ ] subset ] if ; : search* ( string parsers -- seq ) - unclip [ <|> ] reduce 'any-char' [ drop f ] <@ <|> <*> parse dup nil? [ + unclip [ <|> ] reduce any-char-parser [ drop f ] <@ <|> <*> parse dup nil? [ drop { } ] [ car parse-result-parsed [ ] subset ] if ; : (replace) ( string parser -- seq ) - 'any-char' <|> <*> parse car parse-result-parsed ; + any-char-parser <|> <*> parse-1 ; : replace ( string parser -- result ) [ (replace) [ tree-write ] each ] string-out ; diff --git a/extra/parser-combinators/simple/simple-docs.factor b/extra/parser-combinators/simple/simple-docs.factor old mode 100644 new mode 100755 index b85d3ab5bb..52786aceae --- a/extra/parser-combinators/simple/simple-docs.factor +++ b/extra/parser-combinators/simple/simple-docs.factor @@ -3,17 +3,6 @@ USING: help.syntax help.markup parser-combinators parser-combinators.simple ; -HELP: 'any-char' -{ $values - { "parser" "a parser object" } } -{ $description - "Return a parser that consumes a single value " - "from the input string. The value consumed is the " - "result of the parse." } -{ $examples -{ $example "USING: lazy-lists parser-combinators ;" "\"foo\" 'any-char' parse car parse-result-parsed ." "102" } } -{ $see-also 'any-char' 'digit' 'integer' 'string' 'bold' 'italic' comma-list } ; - HELP: 'digit' { $values { "parser" "a parser object" } } @@ -22,8 +11,7 @@ HELP: 'digit' "the input string. The numeric value of the digit " " consumed is the result of the parse." } { $examples -{ $example "USING: lazy-lists parser-combinators ;" "\"123\" 'digit' parse car parse-result-parsed ." "1" } } -{ $see-also 'any-char' 'digit' 'integer' 'string' 'bold' 'italic' comma-list } ; +{ $example "USING: lazy-lists parser-combinators ;" "\"123\" 'digit' parse-1 ." "1" } } ; HELP: 'integer' { $values @@ -33,9 +21,7 @@ HELP: 'integer' "the input string. The numeric value of the integer " " consumed is the result of the parse." } { $examples -{ $example "USING: lazy-lists parser-combinators ;" "\"123\" 'integer' parse car parse-result-parsed ." "123" } } -{ $see-also 'any-char' 'digit' 'integer' 'string' 'bold' 'italic' comma-list } ; - +{ $example "USING: lazy-lists parser-combinators ;" "\"123\" 'integer' parse-1 ." "123" } } ; HELP: 'string' { $values { "parser" "a parser object" } } @@ -44,9 +30,7 @@ HELP: 'string' "quotations from the input string. The string value " " consumed is the result of the parse." } { $examples -{ $example "USING: lazy-lists parser-combinators ;" "\"\\\"foo\\\"\" 'string' parse car parse-result-parsed ." "\"foo\"" } } -{ $see-also 'any-char' 'digit' 'integer' 'string' 'bold' 'italic' comma-list } ; - +{ $example "USING: lazy-lists parser-combinators ;" "\"\\\"foo\\\"\" 'string' parse-1 ." "\"foo\"" } } ; HELP: 'bold' { $values { "parser" "a parser object" } } @@ -55,10 +39,8 @@ HELP: 'bold' "the '*' character from the input string. This is " "commonly used in markup languages to indicate bold " "faced text." } -{ $example "USE: parser-combinators" "\"*foo*\" 'bold' parse car parse-result-parsed ." "\"foo\"" } -{ $example "USE: parser-combinators" "\"*foo*\" 'bold' [ \"\" swap \"\" 3append ] <@ parse car parse-result-parsed ." "\"foo\"" } -{ $see-also 'any-char' 'digit' 'integer' 'string' 'bold' 'italic' comma-list } ; - +{ $example "USE: parser-combinators" "\"*foo*\" 'bold' parse-1 ." "\"foo\"" } +{ $example "USE: parser-combinators" "\"*foo*\" 'bold' [ \"\" swap \"\" 3append ] <@ parse-1 ." "\"foo\"" } ; HELP: 'italic' { $values { "parser" "a parser object" } } @@ -68,10 +50,8 @@ HELP: 'italic' "commonly used in markup languages to indicate italic " "faced text." } { $examples -{ $example "USING: lazy-lists parser-combinators ;" "\"_foo_\" 'italic' parse car parse-result-parsed ." "\"foo\"" } -{ $example "USING: lazy-lists parser-combinators ;" "\"_foo_\" 'italic' [ \"\" swap \"\" 3append ] <@ parse car parse-result-parsed ." "\"foo\"" } } -{ $see-also 'any-char' 'digit' 'integer' 'string' 'bold' 'italic' comma-list } ; - +{ $example "USING: lazy-lists parser-combinators ;" "\"_foo_\" 'italic' parse-1 ." "\"foo\"" } +{ $example "USING: lazy-lists parser-combinators ;" "\"_foo_\" 'italic' [ \"\" swap \"\" 3append ] <@ parse-1 ." "\"foo\"" } } ; HELP: comma-list { $values { "element" "a parser object" } { "parser" "a parser object" } } @@ -80,5 +60,6 @@ HELP: comma-list "'element' should be a parser that can parse the elements. The " "result of the parser is a sequence of the parsed elements." } { $examples -{ $example "USING: lazy-lists parser-combinators ;" "\"1,2,3,4\" 'integer' comma-list parse car parse-result-parsed ." "{ 1 2 3 4 }" } } -{ $see-also 'any-char' 'digit' 'integer' 'string' 'bold' 'italic' comma-list } ; +{ $example "USING: lazy-lits parser-combinators ;" "\"1,2,3,4\" 'integer' comma-list parse-1 ." "{ 1 2 3 4 }" } } ; + +{ $see-also 'digit' 'integer' 'string' 'bold' 'italic' comma-list } related-words diff --git a/extra/parser-combinators/simple/simple.factor b/extra/parser-combinators/simple/simple.factor old mode 100644 new mode 100755 index 955807efa3..c5b84d86c6 --- a/extra/parser-combinators/simple/simple.factor +++ b/extra/parser-combinators/simple/simple.factor @@ -4,9 +4,6 @@ USING: kernel strings math sequences lazy-lists words math.parser promises ; IN: parser-combinators -LAZY: 'any-char' ( -- parser ) - [ drop t ] satisfy ; - : 'digit' ( -- parser ) [ digit? ] satisfy [ digit> ] <@ ; diff --git a/extra/webapps/fjsc/fjsc.factor b/extra/webapps/fjsc/fjsc.factor old mode 100644 new mode 100755 index 2a5bb94e30..bede8846c1 --- a/extra/webapps/fjsc/fjsc.factor +++ b/extra/webapps/fjsc/fjsc.factor @@ -2,8 +2,8 @@ ! See http://factorcode.org/license.txt for BSD license. ! USING: kernel furnace fjsc parser-combinators namespaces - lazy-lists io io.files furnace.validator sequences - http.client http.server http.server.responders + lazy-lists io io.files furnace.validator sequences + http.client http.server http.server.responders webapps.file ; IN: webapps.fjsc @@ -11,15 +11,15 @@ IN: webapps.fjsc #! Compile the factor code as a string, outputting the http #! response containing the javascript. serving-text - 'expression' parse car parse-result-parsed fjsc-compile + 'expression' parse-1 fjsc-compile write flush ; ! The 'compile' action results in an URL that looks like -! 'responder/fjsc/compile'. It takes one query or post +! 'responder/fjsc/compile'. It takes one query or post ! parameter called 'code'. It calls the 'compile' word ! passing the parameter to it on the stack. -\ compile { - { "code" v-required } +\ compile { + { "code" v-required } } define-action : compile-url ( url -- ) @@ -28,18 +28,18 @@ IN: webapps.fjsc "http://" host rot 3append http-get 2nip compile "();" write flush ; \ compile-url { - { "url" v-required } + { "url" v-required } } define-action : repl ( -- ) #! The main 'repl' page. f "repl" "head" render-page* ; -! An action called 'repl' +! An action called 'repl' \ repl { } define-action : fjsc-web-app ( -- ) - ! Create the web app, providing access + ! Create the web app, providing access ! under '/responder/fjsc' which calls the ! 'repl' action. "fjsc" "repl" "extra/webapps/fjsc" web-app From 1cd5d8bacb9dcdd5041453b26ed6119ccf69fbb7 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 18:09:30 -0500 Subject: [PATCH 42/90] io.unix.launcher no longer depends on /bin/sh! Down with the GNU establishment! --- extra/io/unix/launcher/launcher-tests.factor | 19 +++++++++++ extra/io/unix/launcher/launcher.factor | 34 ++++++++++++++++++-- 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100755 extra/io/unix/launcher/launcher-tests.factor mode change 100644 => 100755 extra/io/unix/launcher/launcher.factor diff --git a/extra/io/unix/launcher/launcher-tests.factor b/extra/io/unix/launcher/launcher-tests.factor new file mode 100755 index 0000000000..d07ab24da5 --- /dev/null +++ b/extra/io/unix/launcher/launcher-tests.factor @@ -0,0 +1,19 @@ +IN: temporary +USING: io.unix.launcher tools.test ; + +[ { } ] [ "" tokenize-command ] unit-test +[ { } ] [ " " tokenize-command ] unit-test +[ { "a" } ] [ "a" tokenize-command ] unit-test +[ { "abc" } ] [ "abc" tokenize-command ] unit-test +[ { "abc" } ] [ "abc " tokenize-command ] unit-test +[ { "abc" } ] [ " abc" tokenize-command ] unit-test +[ { "abc" "def" } ] [ "abc def" tokenize-command ] unit-test +[ { "abc def" } ] [ "abc\\ def" tokenize-command ] unit-test +[ { "abc\\" "def" } ] [ "abc\\\\ def" tokenize-command ] unit-test +[ { "abc\\ def" } ] [ "'abc\\\\ def'" tokenize-command ] unit-test +[ { "abc\\ def" } ] [ " 'abc\\\\ def'" tokenize-command ] unit-test +[ { "abc\\ def" "hey" } ] [ "'abc\\\\ def' hey" tokenize-command ] unit-test +[ { "abc def" "hey" } ] [ "'abc def' \"hey\"" tokenize-command ] unit-test +[ "'abc def' \"hey" tokenize-command ] unit-test-fails +[ "'abc def" tokenize-command ] unit-test-fails +[ { "abc def" "h\"ey" } ] [ "'abc def' \"h\"ey\" " tokenize-command ] unit-test diff --git a/extra/io/unix/launcher/launcher.factor b/extra/io/unix/launcher/launcher.factor old mode 100644 new mode 100755 index 0e7ec9ad16..2ca5b748fc --- a/extra/io/unix/launcher/launcher.factor +++ b/extra/io/unix/launcher/launcher.factor @@ -2,15 +2,43 @@ ! See http://factorcode.org/license.txt for BSD license. USING: io io.launcher io.unix.backend io.nonblocking sequences kernel namespaces math system alien.c-types -debugger continuations arrays assocs combinators unix.process ; +debugger continuations arrays assocs combinators unix.process +parser-combinators memoize ; IN: io.unix.launcher ! Search unix first USE: unix +! Our command line parser. Supported syntax: +! foo bar baz -- simple tokens +! foo\ bar -- escaping the space +! 'foo bar' -- quotation +! "foo bar" -- quotation +LAZY: 'escaped-char' "\\" token any-char-parser &> ; + +LAZY: 'chars' 'escaped-char' any-char-parser <|> <*> ; + +LAZY: 'non-space-char' + 'escaped-char' [ CHAR: \s = not ] satisfy <|> ; + +LAZY: 'quoted-1' 'chars' "\"" "\"" surrounded-by ; + +LAZY: 'quoted-2' 'chars' "'" "'" surrounded-by ; + +LAZY: 'unquoted' 'non-space-char' <+> ; + +LAZY: 'argument' + 'quoted-1' 'quoted-2' 'unquoted' <|> <|> + [ >string ] <@ ; + +MEMO: 'arguments' ( -- parser ) + 'argument' " " token <+> list-of ; + +: tokenize-command ( command -- arguments ) + 'arguments' parse-1 ; + : get-arguments ( -- seq ) - +command+ get - [ "/bin/sh" "-c" rot 3array ] [ +arguments+ get ] if* ; + +command+ get [ tokenize-command ] [ +arguments+ get ] if* ; : assoc>env ( assoc -- env ) [ "=" swap 3append ] { } assoc>map ; From 84076184ddd87c09fe0e610c1be2fc45ff0b4a25 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 18:32:19 -0500 Subject: [PATCH 43/90] Add missing USE: --- extra/io/unix/launcher/launcher.factor | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/extra/io/unix/launcher/launcher.factor b/extra/io/unix/launcher/launcher.factor index 2ca5b748fc..d0a68f4c6d 100755 --- a/extra/io/unix/launcher/launcher.factor +++ b/extra/io/unix/launcher/launcher.factor @@ -3,7 +3,7 @@ USING: io io.launcher io.unix.backend io.nonblocking sequences kernel namespaces math system alien.c-types debugger continuations arrays assocs combinators unix.process -parser-combinators memoize ; +parser-combinators memoize promises strings ; IN: io.unix.launcher ! Search unix first @@ -40,7 +40,8 @@ MEMO: 'arguments' ( -- parser ) : get-arguments ( -- seq ) +command+ get [ tokenize-command ] [ +arguments+ get ] if* ; -: assoc>env ( assoc -- env ) [ "=" swap 3append ] { } assoc>map ; +: assoc>env ( assoc -- env ) + [ "=" swap 3append ] { } assoc>map ; : (spawn-process) ( -- ) [ From 30731a5808ce5c86986a63d88d65a1ead039a4f1 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 18:33:20 -0500 Subject: [PATCH 44/90] Fix parser-combinators load issue --- extra/parser-combinators/parser-combinators.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/parser-combinators/parser-combinators.factor b/extra/parser-combinators/parser-combinators.factor index 3e34333a41..6301f778f5 100755 --- a/extra/parser-combinators/parser-combinators.factor +++ b/extra/parser-combinators/parser-combinators.factor @@ -13,11 +13,11 @@ M: promise (parse) ( input parser -- list ) : parse ( input parser -- promise ) (parse) ; +TUPLE: parse-result parsed unparsed ; + : parse-1 ( input parser -- result ) parse car parse-result-parsed ; -TUPLE: parse-result parsed unparsed ; - C: parse-result TUPLE: token-parser string ; From 82e98dac8b7f187f8049a51a903747b79b18aa9c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 18:44:04 -0500 Subject: [PATCH 45/90] Cleanup --- extra/io/unix/launcher/launcher.factor | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extra/io/unix/launcher/launcher.factor b/extra/io/unix/launcher/launcher.factor index d0a68f4c6d..ef45a0705e 100755 --- a/extra/io/unix/launcher/launcher.factor +++ b/extra/io/unix/launcher/launcher.factor @@ -18,13 +18,13 @@ LAZY: 'escaped-char' "\\" token any-char-parser &> ; LAZY: 'chars' 'escaped-char' any-char-parser <|> <*> ; -LAZY: 'non-space-char' - 'escaped-char' [ CHAR: \s = not ] satisfy <|> ; - LAZY: 'quoted-1' 'chars' "\"" "\"" surrounded-by ; LAZY: 'quoted-2' 'chars' "'" "'" surrounded-by ; +LAZY: 'non-space-char' + 'escaped-char' [ CHAR: \s = not ] satisfy <|> ; + LAZY: 'unquoted' 'non-space-char' <+> ; LAZY: 'argument' From 9695beb00c67a1d69c189a265e534c752b782a87 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 17:59:11 -0600 Subject: [PATCH 46/90] Rename the install.sh to factor.sh - Add install and update parameters to it --- misc/factor.sh | 203 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100755 misc/factor.sh diff --git a/misc/factor.sh b/misc/factor.sh new file mode 100755 index 0000000000..3f8152518c --- /dev/null +++ b/misc/factor.sh @@ -0,0 +1,203 @@ +#!/bin/bash -e + +# Programs returning != 0 will not cause script to exit +set +e + +# Case insensitive string comparison +shopt -s nocaseglob +#shopt -s nocasematch + +OS= +ARCH= +WORD= + +ensure_program_installed() { + echo -n "Checking for $1..." + result=`type -p $1` + if ! [[ -n $result ]] ; then + echo "not found!" + echo "Install $1 and try again." + exit 1 + fi + echo "found!" +} + +check_ret() { + RET=$? + if [[ $RET -ne 0 ]] ; then + echo $1 failed + exit 5 + fi +} + +check_gcc_version() { + GCC_VERSION=`gcc --version` + if [[ $GCC_VERSION == *3.3.* ]] ; then + echo "You have a known buggy version of gcc (3.3)" + echo "Install gcc 3.4 or higher and try again." + exit 1 + fi +} + +check_installed_programs() { + ensure_program_installed chmod + ensure_program_installed uname + ensure_program_installed git + ensure_program_installed wget + ensure_program_installed gcc + ensure_program_installed make + check_gcc_version +} + + +find_os() { + uname_s=`uname -s` + case $uname_s in + CYGWIN_NT-5.2-WOW64) OS=windows-nt;; + *CYGWIN_NT*) OS=windows-nt;; + *CYGWIN*) OS=windows-nt;; + *darwin*) OS=macosx;; + *Darwin*) OS=macosx;; + *linux*) OS=linux;; + *Linux*) OS=linux;; + esac +} + +find_architecture() { + uname_m=`uname -m` + case $uname_m in + i386) ARCH=x86;; + i686) ARCH=x86;; + *86) ARCH=x86;; + "Power Macintosh") ARCH=ppc;; + esac +} + +write_test_program() { + echo "#include " > $C_WORD.c + echo "int main(){printf(\"%d\", 8*sizeof(void*)); return 0; }" >> $C_WORD.c +} + +find_word_size() { + C_WORD=factor-word-size + write_test_program + gcc -o $C_WORD $C_WORD.c + WORD=$(./$C_WORD) + check_ret $C_WORD + rm -f $C_WORD* +} + +set_factor_binary() { + case $OS in + windows-nt) FACTOR_BINARY=factor-nt;; + macosx) FACTOR_BINARY=./Factor.app/Contents/MacOS/factor;; + *) FACTOR_BINARY=factor;; + esac +} + +echo_build_info() { + echo OS=$OS + echo ARCH=$ARCH + echo WORD=$WORD + echo FACTOR_BINARY=$FACTOR_BINARY + echo MAKE_TARGET=$MAKE_TARGET + echo BOOT_IMAGE=$BOOT_IMAGE +} + +set_build_info() { + if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then + echo "OS, ARCH, or WORD is empty. Please report this" + exit 4 + fi + MAKE_TARGET=$OS-$ARCH-$WORD + BOOT_IMAGE=boot.$ARCH.$WORD.image +} + +find_build_info() { + find_os + find_architecture + find_word_size + set_factor_binary + set_build_info + echo_build_info +} + + + +git_clone() { + echo "Downloading the git repository from factorcode.org..." + git clone git://factorcode.org/git/factor.git + check_ret git +} + +git_pull_factorcode() { + git pull git://factorcode.org/git/factor.git + check_ret git +} + +cd_factor() { + cd factor + check_ret cd +} + +make_factor() { + make $MAKE_TARGET + check_ret make +} + +delete_boot_images() { + echo "Deleting old images..." + rm $BOOT_IMAGE > /dev/null 2>&1 + rm $BOOT_IMAGE.* > /dev/null 2>&1 +} + +get_boot_image() { + wget http://factorcode.org/images/latest/$BOOT_IMAGE + check_ret wget +} + +maybe_download_dlls() { + if [[ $OS == windows-nt ]] ; then + wget http://factorcode.org/dlls/freetype6.dll + check_ret + wget http://factorcode.org/dlls/zlib1.dll + check_ret + chmod 777 *.dll + check_ret + fi +} + +bootstrap() { + ./$FACTOR_BINARY -i=$BOOT_IMAGE +} + +usage() { + echo "usage: $0 install|update" +} + +case "$1" in + install) + check_installed_programs + find_build_info + git_clone + cd_factor + make_factor + get_boot_image + maybe_download_dlls + bootstrap + ;; + + update) + check_installed_programs + find_build_info + git_pull_factorcode + make_factor + delete_boot_images + get_boot_image + bootstrap + ;; + + *) + usage + ;; +esac From 5849496a93ae77f866ce7a5f99a42c06fd8a6081 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:00:18 -0600 Subject: [PATCH 47/90] add Config file for win64 --- vm/Config.windows.nt.x86.64 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 vm/Config.windows.nt.x86.64 diff --git a/vm/Config.windows.nt.x86.64 b/vm/Config.windows.nt.x86.64 new file mode 100644 index 0000000000..1c30e64096 --- /dev/null +++ b/vm/Config.windows.nt.x86.64 @@ -0,0 +1,4 @@ +CC=/k/target/bin/x86_64-pc-mingw32-gcc +include vm/Config.windows.nt +include vm/Config.x86.64 +WINDRES = /k/target/bin/windres From 1347c04163c952cf6f68fe33e4a82cd766a38542 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:00:48 -0600 Subject: [PATCH 48/90] Remove old install.sh --- misc/install.sh | 120 ------------------------------------------------ 1 file changed, 120 deletions(-) delete mode 100755 misc/install.sh diff --git a/misc/install.sh b/misc/install.sh deleted file mode 100755 index 006a7cf604..0000000000 --- a/misc/install.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/bash -e - -# Programs returning != 0 will not cause script to exit -set +e - -# Case insensitive string comparison -shopt -s nocaseglob -#shopt -s nocasematch - -ensure_program_installed() { - echo -n "Checking for $1..." - result=`type -p $1` - if ! [[ -n $result ]] ; then - echo "not found!" - echo "Install $1 and try again." - exit 1 - fi - echo "found!" -} - -check_ret() { - RET=$? - if [[ $RET -ne 0 ]] ; then - echo $1 failed - exit 5 - fi -} - -ensure_program_installed uname -ensure_program_installed git -ensure_program_installed wget -ensure_program_installed gcc -ensure_program_installed make - -GCC_VERSION=`gcc --version` -if [[ $GCC_VERSION == *3.3.* ]] ; then - echo "You have a known buggy version of gcc (3.3)" - echo "Install gcc 3.4 or higher and try again." - exit 1 -fi - -# OS -OS= -uname_s=`uname -s` -case $uname_s in - CYGWIN_NT-5.2-WOW64) OS=windows-nt;; - *CYGWIN_NT*) OS=windows-nt;; - *CYGWIN*) OS=windows-nt;; - *darwin*) OS=macosx;; - *Darwin*) OS=macosx;; - *linux*) OS=linux;; - *Linux*) OS=linux;; -esac - -# Architecture -ARCH= -uname_m=`uname -m` -case $uname_m in - i386) ARCH=x86;; - i686) ARCH=x86;; - *86) ARCH=x86;; - "Power Macintosh") ARCH=ppc;; -esac - -WORD= -C_WORD=factor-word-size -# Word size -echo "#include " > $C_WORD.c -echo "int main() { printf(\"%d\", 8*sizeof(long)); return 0; }" >> $C_WORD.c -gcc -o $C_WORD $C_WORD.c -WORD=$(./$C_WORD) -check_ret $C_WORD -rm -f $C_WORD* - -case $OS in - windows-nt) FACTOR_BINARY=factor-nt;; - macosx) FACTOR_BINARY=./Factor.app/Contents/MacOS/factor;; - *) FACTOR_BINARY=factor;; -esac - -MAKE_TARGET=$OS-$ARCH-$WORD -BOOT_IMAGE=boot.$ARCH.$WORD.image - -echo OS=$OS -echo ARCH=$ARCH -echo WORD=$WORD -echo FACTOR_BINARY=$FACTOR_BINARY -echo MAKE_TARGET=$MAKE_TARGET -echo BOOT_IMAGE=$BOOT_IMAGE - -if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then - echo "OS, ARCH, or WORD is empty. Please report this" - exit 4 -fi - -echo "Downloading the git repository from factorcode.org..." -git clone git://factorcode.org/git/factor.git -check_ret git - -cd factor -check_ret cd - -make $MAKE_TARGET -check_ret make - -echo "Deleting old images..." -rm $BOOT_IMAGE > /dev/null 2>&1 -rm $BOOT_IMAGE.* > /dev/null 2>&1 -wget http://factorcode.org/images/latest/$BOOT_IMAGE -check_ret wget - -if [[ $OS == windows-nt ]] ; then - wget http://factorcode.org/dlls/freetype6.dll - check_ret - wget http://factorcode.org/dlls/zlib1.dll - check_ret -fi - - -./$FACTOR_BINARY -i=$BOOT_IMAGE From be1e2961ef34f6b6c2f098af50748c49e82ba0fe Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:02:34 -0600 Subject: [PATCH 49/90] Update Makefile for win64 --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 77a6fb6409..4c6eb2f4e6 100644 --- a/Makefile +++ b/Makefile @@ -62,6 +62,7 @@ default: @echo "solaris-x86-64" @echo "windows-ce-arm" @echo "windows-nt-x86-32" + @echo "windows-nt-x86-64" @echo "" @echo "Additional modifiers:" @echo "" @@ -113,6 +114,9 @@ solaris-x86-64: windows-nt-x86-32: $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.32 +windows-nt-x86-64: + $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.64 + windows-ce-arm: $(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.ce.arm @@ -138,7 +142,7 @@ clean: rm -f vm/*.o vm/resources.o: - windres vm/factor.rs vm/resources.o + $(WINDRES) vm/factor.rs vm/resources.o .c.o: $(CC) -c $(CFLAGS) -o $@ $< From dc76d551e0f8f4b5758789260cb2183fbf854df8 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:03:01 -0600 Subject: [PATCH 50/90] Don't install factor if a factor/ already exists --- misc/factor.sh | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/misc/factor.sh b/misc/factor.sh index 3f8152518c..9db0a29fcb 100755 --- a/misc/factor.sh +++ b/misc/factor.sh @@ -26,7 +26,7 @@ check_ret() { RET=$? if [[ $RET -ne 0 ]] ; then echo $1 failed - exit 5 + exit 2 fi } @@ -35,7 +35,7 @@ check_gcc_version() { if [[ $GCC_VERSION == *3.3.* ]] ; then echo "You have a known buggy version of gcc (3.3)" echo "Install gcc 3.4 or higher and try again." - exit 1 + exit 3 fi } @@ -49,6 +49,13 @@ check_installed_programs() { check_gcc_version } +check_factor_exists() { + if [[ -d "factor" ]] ; then + echo "A directory called 'factor' already exists." + echo "Rename or delete it and try again." + exit 4 + fi +} find_os() { uname_s=`uname -s` @@ -66,10 +73,10 @@ find_os() { find_architecture() { uname_m=`uname -m` case $uname_m in - i386) ARCH=x86;; - i686) ARCH=x86;; - *86) ARCH=x86;; - "Power Macintosh") ARCH=ppc;; + i386) ARCH=x86;; + i686) ARCH=x86;; + *86) ARCH=x86;; + "Power Macintosh") ARCH=ppc;; esac } @@ -107,7 +114,7 @@ echo_build_info() { set_build_info() { if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then echo "OS, ARCH, or WORD is empty. Please report this" - exit 4 + exit 5 fi MAKE_TARGET=$OS-$ARCH-$WORD BOOT_IMAGE=boot.$ARCH.$WORD.image @@ -122,8 +129,6 @@ find_build_info() { echo_build_info } - - git_clone() { echo "Downloading the git repository from factorcode.org..." git clone git://factorcode.org/git/factor.git @@ -177,6 +182,7 @@ usage() { case "$1" in install) + check_factor_exists check_installed_programs find_build_info git_clone From b8ab6a8cb188549aae66ee6743de66b30947dae7 Mon Sep 17 00:00:00 2001 From: "U-C4\\Administrator" Date: Sat, 24 Nov 2007 18:07:05 -0600 Subject: [PATCH 51/90] Comment out the AllocConsole() code for windows Add WINDRES variable to NT 32-bit backend --- vm/Config.windows.nt | 2 +- vm/Config.windows.nt.x86.32 | 1 + vm/os-windows-nt.c | 10 +++++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/vm/Config.windows.nt b/vm/Config.windows.nt index 8c67b11c19..c712c7d053 100644 --- a/vm/Config.windows.nt +++ b/vm/Config.windows.nt @@ -4,5 +4,5 @@ DLL_SUFFIX=-nt PLAF_DLL_OBJS += vm/os-windows-nt.o PLAF_EXE_OBJS += vm/resources.o PLAF_EXE_OBJS += vm/main-windows-nt.o -CFLAGS += -mwindows +#CFLAGS += -mwindows include vm/Config.windows diff --git a/vm/Config.windows.nt.x86.32 b/vm/Config.windows.nt.x86.32 index a8d4931b4d..9a020a7bc1 100644 --- a/vm/Config.windows.nt.x86.32 +++ b/vm/Config.windows.nt.x86.32 @@ -1,2 +1,3 @@ +WINDRES=windres include vm/Config.windows.nt include vm/Config.x86.32 diff --git a/vm/os-windows-nt.c b/vm/os-windows-nt.c index afd1e0ed3b..fc7fc61e0d 100755 --- a/vm/os-windows-nt.c +++ b/vm/os-windows-nt.c @@ -91,14 +91,14 @@ void c_to_factor_toplevel(CELL quot) void open_console(void) { + /* + // Do this: http://www.cygwin.com/ml/cygwin/2007-11/msg00432.html if(!console_open) { - if(!AttachConsole(ATTACH_PARENT_PROCESS)) + if(AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()) { - if(AllocConsole()) - console_open = true; - } - else console_open = true; + } } + */ } From 096b9fe4b73466e857334de08475e6bcb1e12165 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 18:17:25 -0600 Subject: [PATCH 52/90] Clean up C code a bit --- vm/os-windows-nt.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vm/os-windows-nt.c b/vm/os-windows-nt.c index fc7fc61e0d..be9dde1fa8 100755 --- a/vm/os-windows-nt.c +++ b/vm/os-windows-nt.c @@ -93,12 +93,12 @@ void open_console(void) { /* // Do this: http://www.cygwin.com/ml/cygwin/2007-11/msg00432.html - if(!console_open) + if(console_open) + return; + + if(AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()) { - if(AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()) - { - console_open = true; - } + console_open = true; } */ } From 026c4186f1beaa82ded1eaf16d91786c29adf6a0 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 19:37:21 -0500 Subject: [PATCH 53/90] Clean up io.unix.launcher command parser --- extra/io/unix/launcher/launcher-tests.factor | 16 +++++++++++++++- extra/io/unix/launcher/launcher.factor | 19 +++++++++---------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/extra/io/unix/launcher/launcher-tests.factor b/extra/io/unix/launcher/launcher-tests.factor index d07ab24da5..88f467385a 100755 --- a/extra/io/unix/launcher/launcher-tests.factor +++ b/extra/io/unix/launcher/launcher-tests.factor @@ -16,4 +16,18 @@ USING: io.unix.launcher tools.test ; [ { "abc def" "hey" } ] [ "'abc def' \"hey\"" tokenize-command ] unit-test [ "'abc def' \"hey" tokenize-command ] unit-test-fails [ "'abc def" tokenize-command ] unit-test-fails -[ { "abc def" "h\"ey" } ] [ "'abc def' \"h\"ey\" " tokenize-command ] unit-test +[ { "abc def" "h\"ey" } ] [ "'abc def' \"h\\\"ey\" " tokenize-command ] unit-test + +[ + { + "Hello world.app/Contents/MacOS/hello-ui" + "-i=boot.macosx-ppc.image" + "-include= math compiler ui" + "-deploy-vocab=hello-ui" + "-output-image=Hello world.app/Contents/Resources/hello-ui.image" + "-no-stack-traces" + "-no-user-init" + } +] [ + "\"Hello world.app/Contents/MacOS/hello-ui\" -i=boot.macosx-ppc.image \"-include= math compiler ui\" -deploy-vocab=hello-ui \"-output-image=Hello world.app/Contents/Resources/hello-ui.image\" -no-stack-traces -no-user-init" tokenize-command +] unit-test diff --git a/extra/io/unix/launcher/launcher.factor b/extra/io/unix/launcher/launcher.factor index ef45a0705e..322bef7e7f 100755 --- a/extra/io/unix/launcher/launcher.factor +++ b/extra/io/unix/launcher/launcher.factor @@ -16,19 +16,18 @@ USE: unix ! "foo bar" -- quotation LAZY: 'escaped-char' "\\" token any-char-parser &> ; -LAZY: 'chars' 'escaped-char' any-char-parser <|> <*> ; +LAZY: 'quoted-char' ( delimiter -- parser' ) + 'escaped-char' + swap [ member? not ] curry satisfy + <|> ; inline -LAZY: 'quoted-1' 'chars' "\"" "\"" surrounded-by ; +LAZY: 'quoted' ( delimiter -- parser ) + dup 'quoted-char' <*> swap dup surrounded-by ; -LAZY: 'quoted-2' 'chars' "'" "'" surrounded-by ; +LAZY: 'unquoted' ( -- parser ) " " 'quoted-char' <+> ; -LAZY: 'non-space-char' - 'escaped-char' [ CHAR: \s = not ] satisfy <|> ; - -LAZY: 'unquoted' 'non-space-char' <+> ; - -LAZY: 'argument' - 'quoted-1' 'quoted-2' 'unquoted' <|> <|> +LAZY: 'argument' ( -- parser ) + "\"" 'quoted' "'" 'quoted' 'unquoted' <|> <|> [ >string ] <@ ; MEMO: 'arguments' ( -- parser ) From 81226bfd36b7149ddb0a34b185b612774c3d0a9d Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 19:40:43 -0500 Subject: [PATCH 54/90] Clean up some uglyness in tools.deploy --- extra/tools/deploy/deploy.factor | 12 ++++-------- extra/tools/deploy/macosx/macosx.factor | 10 +++++++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/extra/tools/deploy/deploy.factor b/extra/tools/deploy/deploy.factor index 7c0dabc458..dafe44dfad 100755 --- a/extra/tools/deploy/deploy.factor +++ b/extra/tools/deploy/deploy.factor @@ -26,12 +26,8 @@ IN: tools.deploy [ (copy-lines) ] [ stream-close ] [ ] cleanup ; : stage2 ( vm flags -- ) - [ - "\"" % swap % "\" -i=" % - boot-image-name % - [ " " % % ] each - ] "" make - dup print + >r "-i=" boot-image-name append 2array r> append dup . + dup duplex-stream-out stream-close copy-lines ; @@ -48,11 +44,11 @@ IN: tools.deploy : deploy-command-line ( vm image vocab config -- vm flags ) [ - "\"-include=" swap profile-string "\"" 3append , + "-include=" swap profile-string append , "-deploy-vocab=" swap append , - "\"-output-image=" swap "\"" 3append , + "-output-image=" swap append , "-no-stack-traces" , diff --git a/extra/tools/deploy/macosx/macosx.factor b/extra/tools/deploy/macosx/macosx.factor index a5319563be..7624fbeb9c 100755 --- a/extra/tools/deploy/macosx/macosx.factor +++ b/extra/tools/deploy/macosx/macosx.factor @@ -2,8 +2,9 @@ ! See http://factorcode.org/license.txt for BSD license. USING: io io.files io.launcher kernel namespaces sequences system tools.deploy tools.deploy.config assocs hashtables -prettyprint unix io.unix.backend cocoa cocoa.plists -cocoa.application cocoa.classes ; +prettyprint io.unix.backend cocoa cocoa.plists +cocoa.application cocoa.classes qualified ; +QUALIFIED: unix IN: tools.deploy.macosx : touch ( path -- ) @@ -19,10 +20,13 @@ IN: tools.deploy.macosx bundle-dir over path+ -rot >r "Contents" path+ r> path+ copy-directory ; +: chmod ( path perms -- ) + unix:chmod io-error ; + : copy-vm ( executable bundle-name -- vm ) "Contents/MacOS/" path+ swap path+ vm swap [ copy-file ] keep - [ 755 chmod io-error ] keep ; + [ OCT: 755 chmod ] keep ; : copy-fonts ( name -- ) "fonts/" resource-path From f26a6569374d7e9250e8718a08f500932ffc96d0 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 18:51:24 -0600 Subject: [PATCH 55/90] Do a make clean on update Changed spaces to tabs --- misc/factor.sh | 246 +++++++++++++++++++++++++------------------------ 1 file changed, 126 insertions(+), 120 deletions(-) diff --git a/misc/factor.sh b/misc/factor.sh index 9db0a29fcb..eb231cd565 100755 --- a/misc/factor.sh +++ b/misc/factor.sh @@ -12,41 +12,41 @@ ARCH= WORD= ensure_program_installed() { - echo -n "Checking for $1..." - result=`type -p $1` - if ! [[ -n $result ]] ; then - echo "not found!" - echo "Install $1 and try again." - exit 1 - fi - echo "found!" + echo -n "Checking for $1..." + result=`type -p $1` + if ! [[ -n $result ]] ; then + echo "not found!" + echo "Install $1 and try again." + exit 1 + fi + echo "found!" } check_ret() { - RET=$? - if [[ $RET -ne 0 ]] ; then - echo $1 failed - exit 2 - fi + RET=$? + if [[ $RET -ne 0 ]] ; then + echo $1 failed + exit 2 + fi } check_gcc_version() { - GCC_VERSION=`gcc --version` - if [[ $GCC_VERSION == *3.3.* ]] ; then - echo "You have a known buggy version of gcc (3.3)" - echo "Install gcc 3.4 or higher and try again." - exit 3 - fi + GCC_VERSION=`gcc --version` + if [[ $GCC_VERSION == *3.3.* ]] ; then + echo "You have a known buggy version of gcc (3.3)" + echo "Install gcc 3.4 or higher and try again." + exit 3 + fi } check_installed_programs() { - ensure_program_installed chmod - ensure_program_installed uname - ensure_program_installed git - ensure_program_installed wget - ensure_program_installed gcc - ensure_program_installed make - check_gcc_version + ensure_program_installed chmod + ensure_program_installed uname + ensure_program_installed git + ensure_program_installed wget + ensure_program_installed gcc + ensure_program_installed make + check_gcc_version } check_factor_exists() { @@ -58,152 +58,158 @@ check_factor_exists() { } find_os() { - uname_s=`uname -s` - case $uname_s in - CYGWIN_NT-5.2-WOW64) OS=windows-nt;; - *CYGWIN_NT*) OS=windows-nt;; - *CYGWIN*) OS=windows-nt;; - *darwin*) OS=macosx;; - *Darwin*) OS=macosx;; - *linux*) OS=linux;; - *Linux*) OS=linux;; - esac + uname_s=`uname -s` + case $uname_s in + CYGWIN_NT-5.2-WOW64) OS=windows-nt;; + *CYGWIN_NT*) OS=windows-nt;; + *CYGWIN*) OS=windows-nt;; + *darwin*) OS=macosx;; + *Darwin*) OS=macosx;; + *linux*) OS=linux;; + *Linux*) OS=linux;; + esac } find_architecture() { - uname_m=`uname -m` - case $uname_m in - i386) ARCH=x86;; - i686) ARCH=x86;; - *86) ARCH=x86;; - "Power Macintosh") ARCH=ppc;; - esac + uname_m=`uname -m` + case $uname_m in + i386) ARCH=x86;; + i686) ARCH=x86;; + *86) ARCH=x86;; + "Power Macintosh") ARCH=ppc;; + esac } write_test_program() { - echo "#include " > $C_WORD.c - echo "int main(){printf(\"%d\", 8*sizeof(void*)); return 0; }" >> $C_WORD.c + echo "#include " > $C_WORD.c + echo "int main(){printf(\"%d\", 8*sizeof(void*)); return 0; }" >> $C_WORD.c } find_word_size() { - C_WORD=factor-word-size - write_test_program - gcc -o $C_WORD $C_WORD.c - WORD=$(./$C_WORD) - check_ret $C_WORD - rm -f $C_WORD* + C_WORD=factor-word-size + write_test_program + gcc -o $C_WORD $C_WORD.c + WORD=$(./$C_WORD) + check_ret $C_WORD + rm -f $C_WORD* } set_factor_binary() { - case $OS in - windows-nt) FACTOR_BINARY=factor-nt;; - macosx) FACTOR_BINARY=./Factor.app/Contents/MacOS/factor;; - *) FACTOR_BINARY=factor;; - esac + case $OS in + windows-nt) FACTOR_BINARY=factor-nt;; + macosx) FACTOR_BINARY=./Factor.app/Contents/MacOS/factor;; + *) FACTOR_BINARY=factor;; + esac } echo_build_info() { - echo OS=$OS - echo ARCH=$ARCH - echo WORD=$WORD - echo FACTOR_BINARY=$FACTOR_BINARY - echo MAKE_TARGET=$MAKE_TARGET - echo BOOT_IMAGE=$BOOT_IMAGE + echo OS=$OS + echo ARCH=$ARCH + echo WORD=$WORD + echo FACTOR_BINARY=$FACTOR_BINARY + echo MAKE_TARGET=$MAKE_TARGET + echo BOOT_IMAGE=$BOOT_IMAGE } set_build_info() { - if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then - echo "OS, ARCH, or WORD is empty. Please report this" - exit 5 - fi - MAKE_TARGET=$OS-$ARCH-$WORD - BOOT_IMAGE=boot.$ARCH.$WORD.image + if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then + echo "OS, ARCH, or WORD is empty. Please report this" + exit 5 + fi + MAKE_TARGET=$OS-$ARCH-$WORD + BOOT_IMAGE=boot.$ARCH.$WORD.image } find_build_info() { - find_os - find_architecture - find_word_size - set_factor_binary - set_build_info - echo_build_info + find_os + find_architecture + find_word_size + set_factor_binary + set_build_info + echo_build_info } git_clone() { - echo "Downloading the git repository from factorcode.org..." - git clone git://factorcode.org/git/factor.git - check_ret git + echo "Downloading the git repository from factorcode.org..." + git clone git://factorcode.org/git/factor.git + check_ret git } git_pull_factorcode() { - git pull git://factorcode.org/git/factor.git - check_ret git + git pull git://factorcode.org/git/factor.git + check_ret git } cd_factor() { - cd factor - check_ret cd + cd factor + check_ret cd +} + +make_clean() { + make clean + check_ret make } make_factor() { - make $MAKE_TARGET - check_ret make + make $MAKE_TARGET -j5 + check_ret make } delete_boot_images() { - echo "Deleting old images..." - rm $BOOT_IMAGE > /dev/null 2>&1 - rm $BOOT_IMAGE.* > /dev/null 2>&1 + echo "Deleting old images..." + rm $BOOT_IMAGE > /dev/null 2>&1 + rm $BOOT_IMAGE.* > /dev/null 2>&1 } get_boot_image() { - wget http://factorcode.org/images/latest/$BOOT_IMAGE - check_ret wget + wget http://factorcode.org/images/latest/$BOOT_IMAGE + check_ret wget } maybe_download_dlls() { - if [[ $OS == windows-nt ]] ; then - wget http://factorcode.org/dlls/freetype6.dll - check_ret - wget http://factorcode.org/dlls/zlib1.dll - check_ret - chmod 777 *.dll - check_ret - fi + if [[ $OS == windows-nt ]] ; then + wget http://factorcode.org/dlls/freetype6.dll + check_ret + wget http://factorcode.org/dlls/zlib1.dll + check_ret + chmod 777 *.dll + check_ret + fi } bootstrap() { - ./$FACTOR_BINARY -i=$BOOT_IMAGE + ./$FACTOR_BINARY -i=$BOOT_IMAGE } usage() { - echo "usage: $0 install|update" + echo "usage: $0 install|update" } case "$1" in - install) + install) check_factor_exists - check_installed_programs - find_build_info - git_clone - cd_factor - make_factor - get_boot_image - maybe_download_dlls - bootstrap - ;; + check_installed_programs + find_build_info + git_clone + cd_factor + make_factor + get_boot_image + maybe_download_dlls + bootstrap + ;; - update) - check_installed_programs - find_build_info - git_pull_factorcode - make_factor - delete_boot_images - get_boot_image - bootstrap - ;; + update) + check_installed_programs + find_build_info + git_pull_factorcode + make_clean + make_factor + delete_boot_images + get_boot_image + bootstrap + ;; - *) - usage - ;; + *) + usage + ;; esac From 74053080ca0df58d791708fe675cb0627e474821 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Sat, 24 Nov 2007 16:55:48 -0800 Subject: [PATCH 56/90] Initial import of knucleotide benchmark --- .../knucleotide/knucleotide-input.txt | 1671 +++++++++++++++++ .../benchmark/knucleotide/knucleotide.factor | 74 + 2 files changed, 1745 insertions(+) create mode 100644 extra/benchmark/knucleotide/knucleotide-input.txt create mode 100644 extra/benchmark/knucleotide/knucleotide.factor diff --git a/extra/benchmark/knucleotide/knucleotide-input.txt b/extra/benchmark/knucleotide/knucleotide-input.txt new file mode 100644 index 0000000000..fb23263397 --- /dev/null +++ b/extra/benchmark/knucleotide/knucleotide-input.txt @@ -0,0 +1,1671 @@ +>ONE Homo sapiens alu +GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA +TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT +AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG +GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG +CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT +GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA +GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA +TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG +AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA +GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT +AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC +AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG +GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC +CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG +AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT +TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA +TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT +GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG +TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT +CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG +CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG +TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA +CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG +AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG +GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC +TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA +TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA +GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT +GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC +ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT +TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC +CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG +CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG +GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC +CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT +GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC +GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA +GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA +GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA +GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG +AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT +CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA +GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA +AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC +GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT +ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG +GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC +GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC +GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG +TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA +AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG +GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT +CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC +TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG +ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC +GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA +ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA +CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA +CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA +ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG +CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG +AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC +CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG +AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC +CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG +CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG +CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG +CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC +ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA +AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC +TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC +ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG +CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG +AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT +AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA +TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC +CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA +TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG +CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT +GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG +GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG +CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG +GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG +GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT +AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT +GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT +CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG +GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC +TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT +CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG +ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG +CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG +AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA +CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG +CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC +ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC +GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC +GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG +GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT +TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG +CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA +GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG +CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC +GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG +CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA +CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG +CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA +ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC +CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT +GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA +AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG +ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC +TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA +GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC +GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG +TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC +AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA +ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA +GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC +AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG +TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC +CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT +GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC +CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA +GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT +TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC +ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC +TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG +GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG +TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG +GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC +GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT +ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC +GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC +GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC +CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA +ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG +AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC +TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT +CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG +TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG +CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC +GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT +GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC +CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC +TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG +CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG +AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG +AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG +AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT +GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA +TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC +AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA +AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG +CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC +TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG +GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT +CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG +CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG +GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA +AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA +GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC +TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC +CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA +GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG +CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG +AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG +ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC +ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC +AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC +GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG +GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT +CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC +GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC +CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA +GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA +GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG +GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT +CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA +AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG +CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC +CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG +GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG +GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT +TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA +ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG +CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA +ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA +GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG +TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC +GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA +GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT +GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT +GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG +TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT +TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC +TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC +GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT +CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC +TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA +GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG +GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT +GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT +ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG +GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG +CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA +CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT +CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC +GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC +TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG +GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC +AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG +GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG +CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG +GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG +ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG +GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA +AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC +CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG +TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA +AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG +GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA +CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG +AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG +CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG +GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT +CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA +AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG +AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC +CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT +GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA +CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG +TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA +CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC +AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC +TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA +CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC +CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA +GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC +GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA +GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC +CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC +TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC +CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC +CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA +CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA +AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT +GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA +CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC +TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA +GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA +GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT +CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC +TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT +CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC +CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG +GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG +GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC +GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG +GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG +TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA +ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG +CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC +AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG +GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT +CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC +GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA +TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC +GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA +GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC +AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC +AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA +CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG +CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG +AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG +GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT +GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC +GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG +CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC +CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG +CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC +GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC +TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC +CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA +CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC +AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG +AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA +GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA +TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT +AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG +GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG +CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT +GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA +GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA +TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG +AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA +GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT +AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC +AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG +GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC +CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG +AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT +TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA +TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT +GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG +TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT +CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG +CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG +TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA +CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG +AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG +GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC +TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA +TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA +GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT +GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC +ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT +TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC +CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG +CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG +GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC +CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT +GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC +GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA +GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA +GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA +GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG +AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT +CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA +GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA +AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC +GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT +ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG +GAGGCTGAGGCAGGAGAATC +>TWO IUB ambiguity codes +cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg +tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa +NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt +cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga +gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa +HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca +tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt +tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt +acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct +tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt +gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa +accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt +RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt +tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag +cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg +ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat +actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg +YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa +KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata +aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa +aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg +gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc +tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK +tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt +ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg +ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa +BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt +aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc +tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc +cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac +aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga +tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga +aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD +gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg +ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV +taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa +ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat +gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg +gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa +tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt +tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt +taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca +cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag +aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt +cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt +ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW +attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag +ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa +attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc +tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta +aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata +cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc +gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg +attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca +BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga +DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat +tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM +tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR +tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg +taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc +aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc +DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa +VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt +agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat +gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt +tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt +catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt +tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR +aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat +aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac +acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS +tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga +aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM +acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt +RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt +RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta +tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac +gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt +YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc +ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt +ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat +gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta +KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD +aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg +gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH +taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact +VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV +NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa +MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag +cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata +ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg +tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN +aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc +actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg +tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga +gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa +BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca +aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata +aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat +YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt +aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW +cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata +tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata +tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt +MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac +taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta +tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS +RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc +agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata +NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa +gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata +aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt +ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW +cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt +tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa +RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt +tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD +gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc +tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta +ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM +tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc +ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc +BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt +gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga +acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag +gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc +taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat +acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta +tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt +catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa +tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB +atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR +ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta +ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta +cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK +SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW +VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc +BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct +NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt +tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa +ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa +cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa +VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR +atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac +aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc +tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac +RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag +gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc +tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact +attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc +atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga +cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt +NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR +ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat +cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg +aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac +agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR +tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga +ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg +ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa +tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag +taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg +tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN +YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt +ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa +tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat +ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg +attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt +atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW +YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta +gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV +MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta +tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt +ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa +aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa +BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM +tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK +StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV +cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN +atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg +atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg +ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct +gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM +tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD +BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc +agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga +HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR +tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt +aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa +catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB +aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat +tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt +cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag +DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat +gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta +tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM +atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc +KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt +tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata +tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK +taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt +NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa +HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa +ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg +tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK +cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga +ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca +HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg +gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS +BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg +gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat +KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact +cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat +tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD +taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM +gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt +aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat +acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta +RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc +attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac +KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS +KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD +gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB +aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct +aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga +ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY +tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga +aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta +tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY +MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc +cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta +caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt +ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc +acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat +tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc +gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa +atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga +aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat +NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt +taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa +aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat +ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca +DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata +tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat +aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa +ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM +ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca +RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa +aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac +aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt +aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK +tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat +atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR +BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc +gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct +cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN +RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat +taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt +aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt +gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct +gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa +aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta +gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg +ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat +MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct +SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY +aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt +VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat +HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc +agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt +gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg +agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg +tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag +gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga +VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg +tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV +MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt +actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa +WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa +tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD +KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct +BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac +attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB +VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD +aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca +tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat +tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK +tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt +VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta +tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat +ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa +tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg +WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta +tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc +tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct +MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat +tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac +atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg +aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt +aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa +aatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtaga +YctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVtt +WtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBt +ttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatg +aDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtc +ctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttD +gaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtat +NgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtD +atttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKM +tHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttattt +aacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNa +gtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttat +gtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaag +tYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaa +aRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMaccc +ttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRta +tStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatN +catacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgtt +cttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatc +aYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRag +NtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacR +ctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSgg +RaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatH +SaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVM +RSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagc +agaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcW +gKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaacttt +MctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattW +aHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaN +cttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgta +ctgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHg +accaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagat +tgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtc +acaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcat +SVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaa +tgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattg +gatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtctt +attDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNcc +DtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDc +aDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtac +tggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttc +ttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaR +ctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMR +tgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYa +tagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttc +attaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHta +aggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgt +cttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcag +aMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttc +VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa +catYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctg +taggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatatttta +cVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBa +DtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDga +tgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctM +acaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMta +tgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStct +YSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSc +cKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtD +actaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacV +KgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVct +WgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtc +ScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRca +aatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRtt +aaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKtt +agDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatM +NYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccc +taDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttat +RtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNg +aNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWH +tWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagc +aSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacM +tRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgta +aattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRV +tccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHa +DaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaata +YaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagc +tNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStga +ccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccacta +cgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtag +atcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaat +cttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBB +aKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHac +acRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaa +tagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaa +ccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYa +gacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgat +ttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcg +aWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcat +cagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaat +MctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHg +atctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDat +taggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcg +taDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVga +ttaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgB +cgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtata +BaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBat +tgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKt +gBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacag +gatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMa +ataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBca +aaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtt +taaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDta +atatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVt +atattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSat +aggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYta +cYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttt +tgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYc +aHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNt +acKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgt +gatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKD +gcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaa +gMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgc +MaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHa +cMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagc +agttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgt +taaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRa +ttttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaSc +aatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRtttta +VaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaa +ccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatga +tagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNa +tcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggt +gaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagat +tYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcH +DtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHa +acttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWV +aagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttg +gataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcaca +agagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMa +aataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcB +gttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaa +ttgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMS +gggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaR +SataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttM +tattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYt +aNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRH +MaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttc +aggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaa +ggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKt +aNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYtt +YaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHta +aaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRY +aMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBtt +ctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaa +atVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaa +cVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMt +attattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatY +BtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatcc +aagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataa +agtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtact +BtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVta +agaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNtt +KgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaM +attaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattat +BRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggat +StattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWW +atMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDa +HggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggttt +gHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWK +gaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMactta +caaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtg +gattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMag +aggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtca +aKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcV +HtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcS +gRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaact +ttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBcca +taatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgta +atatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacaca +gtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagc +YRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaa +aacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatgg +tDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStcta +tttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtN +HaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHttt +gaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVt +SttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcg +HattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRac +tctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNataca +tttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWat +caatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttN +atWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNc +ttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataM +aaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaa +acaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtc +aagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNat +ttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVg +tVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaacca +actMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagag +cSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBc +ttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaat +tHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgH +tgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataata +YtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaD +ggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcata +aatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatg +DtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaM +tatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaa +ctttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtSt +>THREE Homo sapiens frequency +agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct +cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt +tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat +tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc +gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc +tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg +tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat +atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag +cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa +ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt +ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat +atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc +gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact +tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag +gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg +atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag +tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac +ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag +tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta +aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt +gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa +ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc +agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt +agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat +acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc +cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct +cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct +cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa +aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt +tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt +atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct +cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga +tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat +catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc +tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg +caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc +tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc +aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag +aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat +ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac +gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag +ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt +cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta +gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca +ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt +cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg +taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg +gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc +taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt +ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt +aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt +gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta +acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct +ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta +tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt +tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg +tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa +ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac +aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga +tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca +gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt +gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc +cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg +actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa +tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg +ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt +ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta +agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc +gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa +tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt +atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca +cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa +tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca +gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg +gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat +aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg +gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat +cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa +taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg +tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt +ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac +aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc +gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag +aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc +tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa +tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata +aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta +ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc +ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc +caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct +gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg +cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc +ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta +tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg +atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc +ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc +acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc +taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga +ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga +aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat +cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc +tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact +gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa +aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag +cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc +cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa +gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg +cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg +gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca +agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac +aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt +aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg +cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt +agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg +cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa +agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga +gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta +aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata +agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc +cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc +agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca +ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga +tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag +gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat +gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt +ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg +gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc +atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc +tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata +ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg +tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag +cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg +ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat +aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg +gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat +ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag +atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac +aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct +gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga +atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt +aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt +tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg +ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta +gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac +cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct +ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga +ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg +ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat +cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga +tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt +tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc +cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt +gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct +ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt +ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa +tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc +agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta +ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc +cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct +agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc +tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc +gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga +ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa +ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca +agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata +attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact +ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat +agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat +aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata +gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta +gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg +ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac +gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata +ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat +taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta +aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata +tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata +ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga +agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt +ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt +agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg +gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa +tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg +gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct +cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc +ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta +cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt +gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc +gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc +tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt +cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca +aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac +ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac +gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag +aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga +gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct +aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta +gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat +agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat +caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta +gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta +aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt +tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt +tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc +ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg +ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg +gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa +ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa +aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa +tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat +acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac +atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga +gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac +tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc +cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa +gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg +acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga +acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga +attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg +tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt +cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag +aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac +ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac +tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat +gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga +gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc +acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta +gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac +gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc +ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt +taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg +agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa +gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag +ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc +accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag +tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact +taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga +catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat +tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga +ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg +aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa +atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa +tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt +ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact +tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt +aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat +agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc +acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc +aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct +ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat +gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat +taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata +taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga +tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat +gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg +ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa +atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat +tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat +cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt +aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac +taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag +caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata +ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct +tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac +tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg +gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta +gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat +gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg +ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa +tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa +taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac +gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt +ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga +gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca +tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc +ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt +tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc +cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat +ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg +caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg +cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat +gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat +cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg +taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat +tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata +taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc +tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac +tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt +tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt +ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt +aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg +atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga +actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta +gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga +ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga +gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct +tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc +aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta +atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt +catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc +taaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagag +ctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagc +cagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcacca +agggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctga +atccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccg +tataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacatt +gttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaa +attacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataat +tcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaacca +tctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttccta +gaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacag +attctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaa +aatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatct +ggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaaca +taggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggata +atcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtcc +aaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttagg +agactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgttttt +gtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacg +tgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtt +taccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttc +cttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttct +aacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggct +ttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaag +gttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgagg +tagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttg +ctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacg +cagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgatta +aagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactga +cttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctc +ccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacg +tacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacg +ttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaat +atcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtt +tatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcg +ttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactc +acgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggt +ccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacg +aaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagc +gtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaac +ctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggca +tgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcacc +gtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaat +taattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattg +aacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttca +tgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaa +gttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaat +ttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcg +tgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaac +tccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagt +tctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagt +ttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttcca +gagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagag +ccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcatt +gtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagt +tagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttcta +caaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcag +tatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaa +gacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgc +tcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactaga +cgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgc +gctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccg +tctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcag +caaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaa +agattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagcc +atgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaat +ttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaa +atcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaaga +tacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatg +tggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctg +ccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctg +agtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtc +acacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagtt +cttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatat +taacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggtt +acaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaactt +ggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgt +ttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgata +cgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattat +ccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaac +cttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataa +attgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaacccc +gcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccata +ctggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgt +aagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgtt +acctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgc +tttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaac +tgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtact +agtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagc +ttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctt +tattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaat +ttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagc +aattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtct +cgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtg +tactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgt +tggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaat +accgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaagga +agaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattc +aaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgag +gctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgc +aattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcag +ttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaa +cctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattc +ctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctg +tgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacaca +tctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaata +aggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatac +gcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgc +cggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtat +aggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatatttt +gataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaa +gtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgc +tgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcata +tcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagt +accctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacac +atttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgc +tgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaa +atgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtc +gtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatga +ataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaacctta +tgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttga +gactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtt +tatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtata +gaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcg +ttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggac +agcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggt +aacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacact +tcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacg +tatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacagga +tagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcaca +aactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatg +aattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatg +aagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgt +ttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagcca +gtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttag +tcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatc +atggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccat +gtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagc +tttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaact +gtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgta +atgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccatt +gaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacatta +ttttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgccta +tagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagc +gtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatga +aaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggta +acggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatcc +acaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatact +accatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcatt +atatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtac +aagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaa +gtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaa +aatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaa +caatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggag +cgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtcc +ttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagag +aaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcag +tacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttc +agacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattat +caaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgcc +gaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataaca +gctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgt +acttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatcta +ttggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttat +gcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatg +cgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccac +ctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccata +actttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatca +tataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcagg +catatggccattatatatggccccagagcagaatgctacagcagacaaaatttggattta +tgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaag +tgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacg +tcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaata +cttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttg +cagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagac +tgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttg +aagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtgg +cactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaacctt +caactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaa +ctaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatgga +tttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaatttta +attacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgc +tccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggt +gttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaa +cccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccac +aactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcattta +ttttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaa +aagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtga +gtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttctta +gagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggaggg +cagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgag +gttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtact +tcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtctta +aacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattat +atacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattc +ctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagcca +aatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgta +aactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaact +cccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaa +gcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaacttt +ccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttat +tacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatattt +gtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccag +atttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctat +ttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttc +acagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagacca +cacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctg +atccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaatagg +tttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgaga +atgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtcta +ttgattacccttttactattcgacttagagataggagatagaacctcagtgtactttttt +agccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaa +agtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaa +atgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatg +tcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcga +tcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatca +taagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataa +aagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacg +tcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggata +acttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagagg +tcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgat +acctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttag +ttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgat +tctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaat +aggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactata +taatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggtt +cgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcat +ctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtga +attcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagc +caccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaag +aaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatca +atgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttact +tcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagact +cttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccct +ggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagacca +gatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagta +actagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggcca +cgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagc +ttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaa +aaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgc +ggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgta +gggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattcttt +ttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattg +cttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaat +tcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctcc +ttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaac +cacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctcca +ccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaat +attagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtctttt +agtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttc +ggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctat +aatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgaca +aatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattga +atatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaat +cctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctac +gtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgccca +aaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgac +atgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttc +ggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcag +cgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgt +caacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaacta +tcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatat +catcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgata +atcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctc +tcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagct +gtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttaca +agcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatat +actatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgt +ctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtt +tcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttat +ttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtc +gggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgc +tctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcagg +taactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgat +agagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcg +acatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaa +cccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaatt +attgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgat +agaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatg +gtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctact +taatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgag +ctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcg +tgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtag +tcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatccc +aataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcg +tctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaa +atatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgt +ctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaa +aacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatc +actgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaattt +acgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacat +aagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactac +caatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctct +aagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatct +cccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaa +atcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacatt +ttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgtt +agatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgt +atcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataaga +ttaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatat +attaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattc +ttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccg +atcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgc +taaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggc +tttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacg +aaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctat +ttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagac +gaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccg +gcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagtt +ccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatata +cgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctca +ctagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgttt +aagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattg +taaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatg +gatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgc +gatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctt +tgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggat +attgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagactt +caactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgata +acatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgt +cgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaattta +taataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccat +taccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttag +tctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaa +ccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacc +taccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgttta +tcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttga +gtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaatt +gaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagc +cctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatag +aagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaa +gattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcg +agtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgt +agtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaatta +acaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttcc +gttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgca +tcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgt +atatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtgga +ccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaa +gaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacaga +gaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtg +gtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataat +atgatattaccttccttacataagacattaccggcataccctggttttcaacttgtgggg +ctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaat +acaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaa +tttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcgg +tcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagt +cacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattcc +aatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtc +gacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgag +ttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggc +taggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaa +gacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaacta +tttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgttta +tgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggc +caaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggc +ctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgct +gtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaag +ccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgc +aaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaa +ggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccagg +tgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggc +gcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtc +aaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagcc +ttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccaga +cttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtagga +attgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggct +ccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatc +gcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagt +ctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaa +atttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtag +atgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagc +atcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattca +cgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttg +cggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtg +gtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtga +accgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataac +tgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagat +aaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtg +cccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttt +tcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcg +cctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaa +acaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcata +cgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgta +ttacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgcta +agtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagc +cggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttcc +acagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgcca +gtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttaga +gtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggag +cataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatat +gaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccatttt +ccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagag +ctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttac +agacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtac +gtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacata +tgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaag +tataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccg +ccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaag +ggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaat +ataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctg +catgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgat +ttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacg +tgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctcc +aatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagct +gttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctga +agctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagat +atcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttt +taccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaag +tgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagcttta +cataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcc +cggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgt +tttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtc +catctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttg +catcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattat +ctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgctta +tctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgt +ttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatc +ccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtcctt +ctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgct +tgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatatt +ttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaa +tctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaacc +aggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagta +gctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgacc +ctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcact +agtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactc +taacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttc +ctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaagga +agtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaa +gtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtcca +agaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttcta +ttgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgact +ttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaat +acggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatat +aaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttcta +ctactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgta +ggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtg +tgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatatacc +gttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatata +ctattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctct +tacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtata +aaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatcta +ttattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaa +atattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggta +acaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctatt +gctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgtt +acttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacgg +ctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaa +ttcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatg +gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt +agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc +ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata +ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt +gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac +gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac +gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt +cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga +aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc +cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac +gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag +ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga +gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt +atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa +gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat +acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat +aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta +cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta +atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt +tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt +tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc +ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg +tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag +gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca +gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca +aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca +tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat +tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc +attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga +catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc +taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc +ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa +gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg +aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga +aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga +agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg +tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt +aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg +agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac +ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc +taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat +ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga +cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc +tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa +cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac +gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc +cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat +tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg +acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa +ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag +gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc +taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag +tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct +tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata +cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat +tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta +ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg +aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa +agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa +gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt +catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct +tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt +aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat +acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc +tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg +aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt +agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat +gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat +gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa +taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga +gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat +gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg +tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa +agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat +tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct +caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat +aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac +gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat +catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta +ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt +tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac +gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg +cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta +gagatacctttgcaattttt diff --git a/extra/benchmark/knucleotide/knucleotide.factor b/extra/benchmark/knucleotide/knucleotide.factor new file mode 100644 index 0000000000..327439015d --- /dev/null +++ b/extra/benchmark/knucleotide/knucleotide.factor @@ -0,0 +1,74 @@ +USING: kernel io io.files splitting strings + hashtables sequences assocs math namespaces prettyprint + math.parser combinators arrays sorting ; + +IN: benchmark.knucleotide + + +: float>string ( float places -- string ) + swap >float number>string + "." split1 rot + over length over < + [ CHAR: 0 pad-right ] + [ head ] if "." swap 3append +; + +: discard-lines ( -- ) + readln + [ ">THREE" head? [ discard-lines ] unless ] when* +; + +: read-input ( -- input ) + discard-lines + ">" read-until drop + CHAR: \n swap remove >upper +; + +: tally ( x exemplar -- b ) + clone tuck + [ + [ [ 1+ ] [ 1 ] if* ] change-at + ] curry each +; + +: small-groups ( x n -- b ) + swap + [ length swap - 1+ ] 2keep + [ >r over + r> subseq ] 2curry map +; + +: handle-table ( inputs n -- ) + small-groups + [ length ] keep + H{ } tally >alist + sort-values reverse + [ + dup first write bl + second 100 * over / 3 float>string print + ] each + drop +; + +: handle-n ( inputs x -- ) + tuck length + small-groups H{ } tally + at [ 0 ] unless* + number>string 8 CHAR: \s pad-right write +; + +: process-input ( input -- ) + dup 1 handle-table nl + dup 2 handle-table nl + { "GGT" "GGTA" "GGTATT" "GGTATTTTAATT" "GGTATTTTAATTTATAGT" } + [ [ dupd handle-n ] keep print ] each + drop +; + +: knucleotide ( -- ) + "extra/benchmark/knucleotide/knucleotide-input.txt" resource-path + + [ read-input ] with-stream + process-input +; + +MAIN: knucleotide From af2cb6d2e1aefda73f5d427bfa6782e1d195bdbf Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 19:15:45 -0600 Subject: [PATCH 57/90] Don't open all UI windows at 0,0 in Windows --- extra/ui/windows/windows.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/ui/windows/windows.factor b/extra/ui/windows/windows.factor index 290e4ef311..5fa078de89 100755 --- a/extra/ui/windows/windows.factor +++ b/extra/ui/windows/windows.factor @@ -381,7 +381,7 @@ M: windows-ui-backend (close-window) >r class-name-ptr get-global f r> >r >r >r ex-style r> r> WS_CLIPSIBLINGS WS_CLIPCHILDREN bitor style bitor - 0 0 r> + CW_USEDEFAULT dup r> get-RECT-dimensions f f f GetModuleHandle f CreateWindowEx dup win32-error=0/f ; From 72fe4e2d70a498ff1c1069fda3d008251b7cfb9e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 20:19:39 -0500 Subject: [PATCH 58/90] clean up io.unix.launcher parser, and parser-combinators --- extra/io/unix/launcher/launcher-tests.factor | 4 ++-- extra/io/unix/launcher/launcher.factor | 10 +++++----- extra/parser-combinators/parser-combinators.factor | 11 +++++++---- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/extra/io/unix/launcher/launcher-tests.factor b/extra/io/unix/launcher/launcher-tests.factor index 88f467385a..fec97baa5a 100755 --- a/extra/io/unix/launcher/launcher-tests.factor +++ b/extra/io/unix/launcher/launcher-tests.factor @@ -1,8 +1,8 @@ IN: temporary USING: io.unix.launcher tools.test ; -[ { } ] [ "" tokenize-command ] unit-test -[ { } ] [ " " tokenize-command ] unit-test +[ "" tokenize-command ] unit-test-fails +[ " " tokenize-command ] unit-test-fails [ { "a" } ] [ "a" tokenize-command ] unit-test [ { "abc" } ] [ "abc" tokenize-command ] unit-test [ { "abc" } ] [ "abc " tokenize-command ] unit-test diff --git a/extra/io/unix/launcher/launcher.factor b/extra/io/unix/launcher/launcher.factor index 322bef7e7f..4cf8f8b8d4 100755 --- a/extra/io/unix/launcher/launcher.factor +++ b/extra/io/unix/launcher/launcher.factor @@ -22,19 +22,19 @@ LAZY: 'quoted-char' ( delimiter -- parser' ) <|> ; inline LAZY: 'quoted' ( delimiter -- parser ) - dup 'quoted-char' <*> swap dup surrounded-by ; + dup 'quoted-char' swap dup surrounded-by ; -LAZY: 'unquoted' ( -- parser ) " " 'quoted-char' <+> ; +LAZY: 'unquoted' ( -- parser ) " '\"" 'quoted-char' ; LAZY: 'argument' ( -- parser ) "\"" 'quoted' "'" 'quoted' 'unquoted' <|> <|> [ >string ] <@ ; -MEMO: 'arguments' ( -- parser ) - 'argument' " " token <+> list-of ; +: 'arguments' ( -- parser ) + 'argument' " " token nonempty-list-of ; : tokenize-command ( command -- arguments ) - 'arguments' parse-1 ; + 'arguments' just parse-1 ; : get-arguments ( -- seq ) +command+ get [ tokenize-command ] [ +arguments+ get ] if* ; diff --git a/extra/parser-combinators/parser-combinators.factor b/extra/parser-combinators/parser-combinators.factor index 6301f778f5..5741c801f7 100755 --- a/extra/parser-combinators/parser-combinators.factor +++ b/extra/parser-combinators/parser-combinators.factor @@ -246,18 +246,21 @@ LAZY: <(+)> ( parser -- parser ) #! Implementation by Matthew Willis. dup <(*)> <&:> ; -LAZY: pack ( close body open -- parser ) +: pack ( close body open -- parser ) #! Parse a construct enclosed by two symbols, #! given a parser for the opening symbol, the #! closing symbol, and the body. <& &> ; -LAZY: list-of ( items separator -- parser ) +: nonempty-list-of ( items separator -- parser ) + [ over &> <*> <&:> ] keep tuck pack ; + +: list-of ( items separator -- parser ) #! Given a parser for the separator and for the #! items themselves, return a parser that parses #! lists of those items. The parse tree is an #! array of the parsed items. - dup -rot over &> <*> <&:> &> { } succeed <|> ; + nonempty-list-of { } succeed <|> ; LAZY: surrounded-by ( parser start end -- parser' ) - [ token ] 2apply swapd pack ; \ No newline at end of file + [ token ] 2apply swapd pack ; \ No newline at end of file From 30541ec78a93ab6f87f472818738af0e9f422b7f Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 20:27:09 -0500 Subject: [PATCH 59/90] Make parser constructor MEMO: again --- extra/io/unix/launcher/launcher.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/io/unix/launcher/launcher.factor b/extra/io/unix/launcher/launcher.factor index 4cf8f8b8d4..74bced16c4 100755 --- a/extra/io/unix/launcher/launcher.factor +++ b/extra/io/unix/launcher/launcher.factor @@ -30,7 +30,7 @@ LAZY: 'argument' ( -- parser ) "\"" 'quoted' "'" 'quoted' 'unquoted' <|> <|> [ >string ] <@ ; -: 'arguments' ( -- parser ) +MEMO: 'arguments' ( -- parser ) 'argument' " " token nonempty-list-of ; : tokenize-command ( command -- arguments ) From fa630952f32cf5fb98bf936bdd7cdfa3a8e57f35 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 20:48:29 -0600 Subject: [PATCH 60/90] Add notepad++ support to factor --- extra/editors/notepadpp/authors.txt | 1 + extra/editors/notepadpp/notepadpp.factor | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 extra/editors/notepadpp/authors.txt create mode 100644 extra/editors/notepadpp/notepadpp.factor diff --git a/extra/editors/notepadpp/authors.txt b/extra/editors/notepadpp/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/editors/notepadpp/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/editors/notepadpp/notepadpp.factor b/extra/editors/notepadpp/notepadpp.factor new file mode 100644 index 0000000000..080910731d --- /dev/null +++ b/extra/editors/notepadpp/notepadpp.factor @@ -0,0 +1,13 @@ +USING: editors io.launcher math.parser namespaces ; +IN: notepadpp + +: notepadpp ( file line -- ) + [ + \ notepadpp get-global % " -n" % # " " % % + ] "" make run-detached ; + +! Put in your .factor-boot-rc +! "c:\\Program Files\\notepad++\\notepad++.exe" \ notepadpp set-global +! "k:\\Program Files (x86)\\notepad++\\notepad++.exe" \ notepadpp set-global + +[ notepadpp ] edit-hook set-global From c0b8c4d4a95c1e07ef4ee16414701bae2f1eeaa1 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 21:00:21 -0600 Subject: [PATCH 61/90] Add missing summary files for editors --- extra/editors/editpadpro/summary.txt | 1 + extra/editors/emacs/summary.txt | 1 + extra/editors/gvim/summary.txt | 1 + extra/editors/notepadpp/summary.txt | 1 + extra/editors/scite/summary.txt | 1 + extra/editors/textmate/summary.txt | 1 + extra/editors/vim/summary.txt | 1 + 7 files changed, 7 insertions(+) create mode 100644 extra/editors/editpadpro/summary.txt create mode 100644 extra/editors/emacs/summary.txt create mode 100644 extra/editors/gvim/summary.txt create mode 100644 extra/editors/notepadpp/summary.txt create mode 100644 extra/editors/scite/summary.txt create mode 100644 extra/editors/textmate/summary.txt create mode 100644 extra/editors/vim/summary.txt diff --git a/extra/editors/editpadpro/summary.txt b/extra/editors/editpadpro/summary.txt new file mode 100644 index 0000000000..9be02c58b7 --- /dev/null +++ b/extra/editors/editpadpro/summary.txt @@ -0,0 +1 @@ +EditPadPro editor integration diff --git a/extra/editors/emacs/summary.txt b/extra/editors/emacs/summary.txt new file mode 100644 index 0000000000..cc15946aab --- /dev/null +++ b/extra/editors/emacs/summary.txt @@ -0,0 +1 @@ +Emacs editor integration diff --git a/extra/editors/gvim/summary.txt b/extra/editors/gvim/summary.txt new file mode 100644 index 0000000000..4096b820fc --- /dev/null +++ b/extra/editors/gvim/summary.txt @@ -0,0 +1 @@ +gVim editor integration diff --git a/extra/editors/notepadpp/summary.txt b/extra/editors/notepadpp/summary.txt new file mode 100644 index 0000000000..8988904216 --- /dev/null +++ b/extra/editors/notepadpp/summary.txt @@ -0,0 +1 @@ +Notepad++ editor integration diff --git a/extra/editors/scite/summary.txt b/extra/editors/scite/summary.txt new file mode 100644 index 0000000000..1088ee7f5a --- /dev/null +++ b/extra/editors/scite/summary.txt @@ -0,0 +1 @@ +SciTE editor integration diff --git a/extra/editors/textmate/summary.txt b/extra/editors/textmate/summary.txt new file mode 100644 index 0000000000..6c573c4829 --- /dev/null +++ b/extra/editors/textmate/summary.txt @@ -0,0 +1 @@ +Textmate editor integration diff --git a/extra/editors/vim/summary.txt b/extra/editors/vim/summary.txt new file mode 100644 index 0000000000..559053219f --- /dev/null +++ b/extra/editors/vim/summary.txt @@ -0,0 +1 @@ +Vim editor integration From c34c6bf206ecdae17f7ad35ac58cb55ac1f204f8 Mon Sep 17 00:00:00 2001 From: Debian User Date: Sat, 24 Nov 2007 21:03:32 -0600 Subject: [PATCH 62/90] Support NO_UI if libraries aren't found on Linux --- misc/factor.sh | 85 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 27 deletions(-) diff --git a/misc/factor.sh b/misc/factor.sh index eb231cd565..af0511ee50 100755 --- a/misc/factor.sh +++ b/misc/factor.sh @@ -10,6 +10,7 @@ shopt -s nocaseglob OS= ARCH= WORD= +NO_UI=0 ensure_program_installed() { echo -n "Checking for $1..." @@ -49,6 +50,34 @@ check_installed_programs() { check_gcc_version } +check_library_exists() { + GCC_TEST=factor-library-test.c + GCC_OUT=factor-library-test.out + echo "Checking for library $1" + echo "int main(){return 0;}" > $GCC_TEST + gcc $GCC_TEST -o $GCC_OUT -l $1 + if [[ $? -ne 0 ]] ; then + echo "Warning: library $1 not found." + echo "***Factor will compile NO_UI=1" + NO_UI=1 + fi + rm -f GCC_TEST + rm -f GCC_OUT +} + +check_X11_libraries() { + check_library_exists freetype + check_library_exists GLU + check_library_exists GL + check_library_exists X11 +} + +check_libraries() { + case $OS in + linux) check_X11_libraries;; + esac +} + check_factor_exists() { if [[ -d "factor" ]] ; then echo "A directory called 'factor' already exists." @@ -151,7 +180,7 @@ make_clean() { } make_factor() { - make $MAKE_TARGET -j5 + make NO_UI=$NO_UI $MAKE_TARGET -j5 check_ret make } @@ -185,31 +214,33 @@ usage() { echo "usage: $0 install|update" } +install() { + check_factor_exists + check_installed_programs + find_build_info + check_libraries + git_clone + cd_factor + make_factor + get_boot_image + maybe_download_dlls + bootstrap +} + +update() { + check_installed_programs + find_build_info + check_libraries + git_pull_factorcode + make_clean + make_factor + delete_boot_images + get_boot_image + bootstrap +} + case "$1" in - install) - check_factor_exists - check_installed_programs - find_build_info - git_clone - cd_factor - make_factor - get_boot_image - maybe_download_dlls - bootstrap - ;; - - update) - check_installed_programs - find_build_info - git_pull_factorcode - make_clean - make_factor - delete_boot_images - get_boot_image - bootstrap - ;; - - *) - usage - ;; + install) install ;; + update) update ;; + *) usage ;; esac From 4b92d10d64ee0ae304735e51e8f2fb717eea2980 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 22:09:40 -0500 Subject: [PATCH 63/90] Fix race condition with opening windows which affected get-workspace --- extra/ui/cocoa/cocoa.factor | 2 +- extra/ui/tools/workspace/workspace.factor | 9 ++++---- extra/ui/ui.factor | 25 +++++++++++------------ extra/ui/windows/windows.factor | 8 +++++--- extra/ui/x11/x11.factor | 2 +- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/extra/ui/cocoa/cocoa.factor b/extra/ui/cocoa/cocoa.factor index 6607a22f50..7492ad19b7 100755 --- a/extra/ui/cocoa/cocoa.factor +++ b/extra/ui/cocoa/cocoa.factor @@ -19,7 +19,7 @@ SYMBOL: stop-after-last-window? : event-loop ( -- ) event-loop? [ [ - [ NSApp do-events ui-step ] ui-try + [ NSApp do-events ui-step 10 sleep ] ui-try ] with-autorelease-pool event-loop ] when ; diff --git a/extra/ui/tools/workspace/workspace.factor b/extra/ui/tools/workspace/workspace.factor index 79857fa2e6..b8c41e17cc 100755 --- a/extra/ui/tools/workspace/workspace.factor +++ b/extra/ui/tools/workspace/workspace.factor @@ -2,11 +2,10 @@ ! See http://factorcode.org/license.txt for BSD license. USING: classes continuations help help.topics kernel models sequences ui ui.backend ui.tools.debugger ui.gadgets -ui.gadgets.books ui.gadgets.buttons -ui.gadgets.labelled ui.gadgets.panes ui.gadgets.scrollers -ui.gadgets.tracks ui.gadgets.worlds ui.gadgets.presentations -ui.gadgets.status-bar ui.commands ui.gestures assocs arrays -namespaces ; +ui.gadgets.books ui.gadgets.buttons ui.gadgets.labelled +ui.gadgets.panes ui.gadgets.scrollers ui.gadgets.tracks +ui.gadgets.worlds ui.gadgets.presentations ui.gadgets.status-bar +ui.commands ui.gestures assocs arrays namespaces ; IN: ui.tools.workspace TUPLE: workspace book listener popup ; diff --git a/extra/ui/ui.factor b/extra/ui/ui.factor index 98549a16f7..bafd6c40c5 100755 --- a/extra/ui/ui.factor +++ b/extra/ui/ui.factor @@ -65,18 +65,6 @@ M: world ungraft* dup world-handle (close-window) reset-world ; -: open-world-window ( world -- ) - dup pref-dim over set-gadget-dim dup relayout graft ; - -: open-window ( gadget title -- ) - >r [ 1 track, ] { 0 1 } make-track r> - f open-world-window ; - -HOOK: close-window ui-backend ( gadget -- ) - -M: object close-window - find-world [ ungraft ] when* ; - : find-window ( quot -- world ) windows get values [ gadget-child swap call ] curry* find-last nip ; inline @@ -148,9 +136,20 @@ SYMBOL: ui-hook notify-queued layout-queued redraw-worlds - 10 sleep ] assert-depth ; +: open-world-window ( world -- ) + dup pref-dim over set-gadget-dim dup relayout graft ui-step ; + +: open-window ( gadget title -- ) + >r [ 1 track, ] { 0 1 } make-track r> + f open-world-window ; + +HOOK: close-window ui-backend ( gadget -- ) + +M: object close-window + find-world [ ungraft ] when* ; + : start-ui ( -- ) init-timers restore-windows? [ diff --git a/extra/ui/windows/windows.factor b/extra/ui/windows/windows.factor index 290e4ef311..7c7e0298fe 100755 --- a/extra/ui/windows/windows.factor +++ b/extra/ui/windows/windows.factor @@ -94,8 +94,7 @@ SYMBOL: mouse-captured 3drop window draw-world ; : handle-wm-size ( hWnd uMsg wParam lParam -- ) - [ lo-word ] keep hi-word make-RECT get-RECT-dimensions 2array - 2nip + [ lo-word ] keep hi-word make-RECT get-RECT-dimensions 2array 2nip dup { 0 0 } = [ 2drop ] [ swap window set-gadget-dim ui-step ] if ; : wm-keydown-codes ( -- key ) @@ -348,7 +347,10 @@ M: windows-ui-backend (close-window) : event-loop ( msg -- ) { { [ windows get empty? ] [ drop ] } - { [ dup peek-message? ] [ >r [ ui-step ] ui-try r> event-loop ] } + { [ dup peek-message? ] [ + >r [ ui-step 10 sleep ] ui-try + r> event-loop + ] } { [ dup MSG-message WM_QUIT = ] [ drop ] } { [ t ] [ dup TranslateMessage drop diff --git a/extra/ui/x11/x11.factor b/extra/ui/x11/x11.factor index 857b13a973..2b1a5ba331 100755 --- a/extra/ui/x11/x11.factor +++ b/extra/ui/x11/x11.factor @@ -178,7 +178,7 @@ M: world client-event next-event dup None XFilterEvent zero? [ drop wait-event ] unless ] [ - ui-step wait-event + ui-step 10 sleep wait-event ] if ; : do-events ( -- ) From de2cc4b9de4c0187efd2b44a5bad8e98fb12ea6a Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 21:41:58 -0600 Subject: [PATCH 64/90] Make a special case for macosx-ppc, which doesn't follow the factor naming scheme --- misc/factor.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/misc/factor.sh b/misc/factor.sh index af0511ee50..76944b0bd6 100755 --- a/misc/factor.sh +++ b/misc/factor.sh @@ -145,8 +145,13 @@ set_build_info() { echo "OS, ARCH, or WORD is empty. Please report this" exit 5 fi + MAKE_TARGET=$OS-$ARCH-$WORD BOOT_IMAGE=boot.$ARCH.$WORD.image + if [[ $OS == macosx && $ARCH=ppc ]] ; then + MAKE_TARGET=$OS-$ARCH + BOOT_IMAGE=boot.macosx-ppc.image + fi } find_build_info() { From 39fc7f864f4f587ed157c4effa3432f693b28d05 Mon Sep 17 00:00:00 2001 From: erg Date: Sat, 24 Nov 2007 21:49:38 -0600 Subject: [PATCH 65/90] Set default to NO_UI= instead of NO_UI=0 --- misc/factor.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/factor.sh b/misc/factor.sh index af0511ee50..977a6b79f7 100755 --- a/misc/factor.sh +++ b/misc/factor.sh @@ -10,7 +10,7 @@ shopt -s nocaseglob OS= ARCH= WORD= -NO_UI=0 +NO_UI= ensure_program_installed() { echo -n "Checking for $1..." From ed1b0e1c52e426db941ec2b786a01e87bced7aef Mon Sep 17 00:00:00 2001 From: erg Date: Sat, 24 Nov 2007 21:55:18 -0600 Subject: [PATCH 66/90] Clean up after gcc --- misc/factor.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/factor.sh b/misc/factor.sh index 977a6b79f7..f736365384 100755 --- a/misc/factor.sh +++ b/misc/factor.sh @@ -61,8 +61,8 @@ check_library_exists() { echo "***Factor will compile NO_UI=1" NO_UI=1 fi - rm -f GCC_TEST - rm -f GCC_OUT + rm -f $GCC_TEST + rm -f $GCC_OUT } check_X11_libraries() { From 0d286a0b17408936817d71effed57c9aa2765d63 Mon Sep 17 00:00:00 2001 From: erg Date: Sat, 24 Nov 2007 22:06:45 -0600 Subject: [PATCH 67/90] Fix stack effect --- extra/pack/pack.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/pack/pack.factor b/extra/pack/pack.factor index fd39f83a98..c9d05c19d7 100644 --- a/extra/pack/pack.factor +++ b/extra/pack/pack.factor @@ -24,7 +24,7 @@ M: integer b, ( m n -- ) >endian % ; ! for doing native, platform-dependent sized values M: string b, ( n string -- ) heap-size b, ; -: read-native ( string -- ) heap-size read endian> ; +: read-native ( string -- n ) heap-size read endian> ; ! Portable : s8, ( n -- ) 1 b, ; From 9320a69451aca2ad6ddd27ef95a7fbf81cee11e9 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 22:29:22 -0600 Subject: [PATCH 68/90] Fix unit test, change quotation? to callable? --- extra/lint/lint.factor | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/extra/lint/lint.factor b/extra/lint/lint.factor index bd2be801fd..75f6abb9ae 100644 --- a/extra/lint/lint.factor +++ b/extra/lint/lint.factor @@ -13,7 +13,7 @@ SYMBOL: def-hash-keys 2dup at -rot >r >r ?push r> r> set-at ; : add-word-def ( word quot -- ) - dup quotation? [ + dup callable? [ def-hash get-global set-hash-vector ] [ 2drop @@ -33,6 +33,7 @@ SYMBOL: def-hash-keys { [ drop drop drop ] 3drop } { [ 0 = ] zero? } { [ pop drop ] pop* } + { [ [ ] if ] when } } [ first2 swap add-word-def ] each ; : accessor-words ( -- seq ) @@ -108,13 +109,13 @@ M: object lint ( obj -- seq ) : subseq/member? ( subseq/member seq -- ? ) { [ 2dup start ] [ 2dup member? ] } || 2nip ; -M: quotation lint ( quot -- seq ) +M: callable lint ( quot -- seq ) def-hash-keys get [ swap subseq/member? ] curry* subset ; M: word lint ( word -- seq ) - word-def dup quotation? [ lint ] [ drop f ] if ; + word-def dup callable? [ lint ] [ drop f ] if ; : word-path. ( word -- ) [ word-vocabulary ":" ] keep unparse 3append write nl ; From 53f8dca0bf6e4979e09dd3778157829e2e6396d6 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Sat, 24 Nov 2007 16:55:48 -0800 Subject: [PATCH 69/90] Initial import of knucleotide benchmark --- .../knucleotide/knucleotide-input.txt | 1671 +++++++++++++++++ .../benchmark/knucleotide/knucleotide.factor | 74 + 2 files changed, 1745 insertions(+) create mode 100644 extra/benchmark/knucleotide/knucleotide-input.txt create mode 100644 extra/benchmark/knucleotide/knucleotide.factor diff --git a/extra/benchmark/knucleotide/knucleotide-input.txt b/extra/benchmark/knucleotide/knucleotide-input.txt new file mode 100644 index 0000000000..fb23263397 --- /dev/null +++ b/extra/benchmark/knucleotide/knucleotide-input.txt @@ -0,0 +1,1671 @@ +>ONE Homo sapiens alu +GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA +TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT +AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG +GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG +CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT +GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA +GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA +TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG +AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA +GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT +AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC +AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG +GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC +CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG +AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT +TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA +TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT +GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG +TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT +CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG +CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG +TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA +CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG +AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG +GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC +TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA +TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA +GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT +GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC +ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT +TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC +CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG +CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG +GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC +CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT +GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC +GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA +GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA +GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA +GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG +AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT +CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA +GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA +AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC +GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT +ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG +GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC +GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC +GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG +TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA +AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG +GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT +CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC +TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG +ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC +GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA +ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA +CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA +CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA +ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG +CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG +AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC +CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG +AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC +CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG +CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG +CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG +CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC +ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA +AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC +TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC +ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG +CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG +AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT +AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA +TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC +CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA +TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG +CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT +GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG +GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG +CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG +GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG +GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT +AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT +GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT +CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG +GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC +TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT +CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG +ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG +CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG +AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA +CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG +CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC +ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC +GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC +GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG +GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT +TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG +CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA +GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG +CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC +GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG +CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA +CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG +CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA +ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC +CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT +GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA +AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG +ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC +TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA +GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC +GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG +TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC +AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA +ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA +GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC +AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG +TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC +CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT +GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC +CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA +GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT +TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC +ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC +TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG +GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG +TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG +GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC +GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT +ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC +GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC +GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC +CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA +ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG +AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC +TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT +CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG +TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG +CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC +GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT +GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC +CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC +TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG +CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG +AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG +AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG +AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT +GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA +TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC +AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA +AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG +CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC +TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG +GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT +CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG +CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG +GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA +AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA +GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC +TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC +CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA +GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG +CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG +AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG +ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC +ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC +AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC +GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG +GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT +CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC +GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC +CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA +GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA +GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG +GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT +CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA +AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG +CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC +CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG +GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG +GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT +TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA +ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG +CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA +ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA +GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG +TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC +GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA +GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT +GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT +GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG +TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT +TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC +TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC +GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT +CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC +TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA +GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG +GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT +GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT +ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG +GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG +CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA +CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT +CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC +GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC +TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG +GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC +AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG +GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG +CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG +GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG +ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG +GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA +AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC +CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG +TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA +AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG +GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA +CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG +AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG +CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG +GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT +CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA +AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG +AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC +CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT +GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA +CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG +TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA +CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC +AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC +TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA +CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC +CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA +GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC +GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA +GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC +CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC +TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC +CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC +CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA +CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA +AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT +GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA +CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC +TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA +GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA +GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT +CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC +TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT +CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC +CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG +GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG +GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC +GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG +GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG +TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA +ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG +CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC +AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG +GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT +CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC +GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA +TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC +GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA +GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC +AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC +AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA +CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG +CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG +AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG +GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT +GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC +GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG +CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC +CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG +CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC +GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC +TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC +CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA +CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC +AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG +AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA +GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA +TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT +AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG +GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG +CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT +GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA +GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA +TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG +AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA +GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT +AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC +AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG +GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC +CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG +AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT +TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA +TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT +GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG +TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT +CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG +CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG +TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA +CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG +AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG +GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC +TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA +TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA +GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT +GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC +ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT +TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC +CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG +CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG +GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC +CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT +GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC +GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA +GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA +GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA +GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG +AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT +CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA +GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA +AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC +GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT +ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG +GAGGCTGAGGCAGGAGAATC +>TWO IUB ambiguity codes +cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg +tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa +NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt +cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga +gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa +HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca +tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt +tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt +acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct +tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt +gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa +accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt +RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt +tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag +cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg +ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat +actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg +YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa +KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata +aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa +aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg +gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc +tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK +tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt +ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg +ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa +BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt +aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc +tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc +cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac +aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga +tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga +aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD +gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg +ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV +taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa +ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat +gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg +gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa +tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt +tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt +taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca +cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag +aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt +cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt +ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW +attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag +ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa +attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc +tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta +aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata +cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc +gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg +attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca +BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga +DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat +tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM +tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR +tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg +taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc +aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc +DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa +VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt +agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat +gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt +tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt +catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt +tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR +aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat +aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac +acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS +tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga +aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM +acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt +RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt +RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta +tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac +gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt +YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc +ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt +ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat +gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta +KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD +aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg +gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH +taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact +VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV +NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa +MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag +cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata +ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg +tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN +aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc +actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg +tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga +gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa +BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca +aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata +aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat +YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt +aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW +cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata +tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata +tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt +MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac +taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta +tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS +RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc +agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata +NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa +gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata +aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt +ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW +cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt +tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa +RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt +tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD +gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc +tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta +ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM +tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc +ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc +BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt +gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga +acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag +gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc +taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat +acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta +tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt +catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa +tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB +atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR +ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta +ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta +cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK +SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW +VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc +BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct +NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt +tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa +ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa +cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa +VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR +atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac +aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc +tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac +RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag +gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc +tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact +attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc +atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga +cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt +NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR +ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat +cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg +aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac +agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR +tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga +ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg +ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa +tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag +taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg +tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN +YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt +ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa +tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat +ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg +attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt +atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW +YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta +gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV +MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta +tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt +ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa +aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa +BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM +tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK +StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV +cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN +atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg +atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg +ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct +gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM +tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD +BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc +agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga +HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR +tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt +aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa +catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB +aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat +tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt +cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag +DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat +gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta +tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM +atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc +KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt +tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata +tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK +taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt +NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa +HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa +ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg +tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK +cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga +ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca +HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg +gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS +BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg +gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat +KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact +cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat +tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD +taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM +gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt +aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat +acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta +RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc +attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac +KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS +KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD +gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB +aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct +aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga +ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY +tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga +aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta +tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY +MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc +cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta +caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt +ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc +acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat +tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc +gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa +atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga +aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat +NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt +taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa +aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat +ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca +DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata +tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat +aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa +ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM +ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca +RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa +aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac +aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt +aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK +tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat +atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR +BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc +gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct +cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN +RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat +taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt +aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt +gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct +gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa +aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta +gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg +ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat +MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct +SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY +aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt +VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat +HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc +agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt +gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg +agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg +tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag +gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga +VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg +tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV +MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt +actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa +WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa +tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD +KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct +BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac +attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB +VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD +aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca +tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat +tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK +tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt +VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta +tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat +ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa +tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg +WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta +tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc +tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct +MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat +tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac +atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg +aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt +aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa +aatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtaga +YctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVtt +WtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBt +ttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatg +aDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtc +ctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttD +gaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtat +NgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtD +atttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKM +tHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttattt +aacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNa +gtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttat +gtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaag +tYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaa +aRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMaccc +ttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRta +tStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatN +catacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgtt +cttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatc +aYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRag +NtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacR +ctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSgg +RaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatH +SaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVM +RSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagc +agaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcW +gKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaacttt +MctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattW +aHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaN +cttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgta +ctgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHg +accaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagat +tgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtc +acaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcat +SVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaa +tgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattg +gatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtctt +attDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNcc +DtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDc +aDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtac +tggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttc +ttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaR +ctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMR +tgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYa +tagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttc +attaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHta +aggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgt +cttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcag +aMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttc +VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa +catYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctg +taggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatatttta +cVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBa +DtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDga +tgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctM +acaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMta +tgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStct +YSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSc +cKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtD +actaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacV +KgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVct +WgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtc +ScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRca +aatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRtt +aaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKtt +agDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatM +NYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccc +taDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttat +RtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNg +aNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWH +tWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagc +aSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacM +tRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgta +aattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRV +tccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHa +DaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaata +YaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagc +tNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStga +ccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccacta +cgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtag +atcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaat +cttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBB +aKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHac +acRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaa +tagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaa +ccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYa +gacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgat +ttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcg +aWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcat +cagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaat +MctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHg +atctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDat +taggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcg +taDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVga +ttaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgB +cgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtata +BaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBat +tgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKt +gBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacag +gatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMa +ataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBca +aaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtt +taaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDta +atatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVt +atattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSat +aggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYta +cYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttt +tgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYc +aHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNt +acKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgt +gatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKD +gcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaa +gMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgc +MaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHa +cMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagc +agttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgt +taaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRa +ttttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaSc +aatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRtttta +VaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaa +ccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatga +tagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNa +tcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggt +gaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagat +tYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcH +DtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHa +acttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWV +aagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttg +gataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcaca +agagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMa +aataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcB +gttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaa +ttgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMS +gggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaR +SataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttM +tattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYt +aNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRH +MaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttc +aggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaa +ggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKt +aNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYtt +YaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHta +aaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRY +aMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBtt +ctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaa +atVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaa +cVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMt +attattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatY +BtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatcc +aagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataa +agtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtact +BtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVta +agaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNtt +KgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaM +attaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattat +BRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggat +StattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWW +atMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDa +HggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggttt +gHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWK +gaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMactta +caaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtg +gattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMag +aggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtca +aKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcV +HtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcS +gRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaact +ttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBcca +taatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgta +atatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacaca +gtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagc +YRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaa +aacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatgg +tDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStcta +tttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtN +HaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHttt +gaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVt +SttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcg +HattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRac +tctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNataca +tttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWat +caatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttN +atWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNc +ttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataM +aaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaa +acaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtc +aagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNat +ttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVg +tVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaacca +actMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagag +cSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBc +ttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaat +tHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgH +tgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataata +YtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaD +ggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcata +aatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatg +DtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaM +tatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaa +ctttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtSt +>THREE Homo sapiens frequency +agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct +cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt +tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat +tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc +gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc +tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg +tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat +atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag +cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa +ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt +ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat +atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc +gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact +tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag +gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg +atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag +tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac +ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag +tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta +aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt +gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa +ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc +agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt +agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat +acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc +cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct +cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct +cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa +aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt +tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt +atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct +cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga +tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat +catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc +tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg +caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc +tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc +aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag +aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat +ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac +gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag +ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt +cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta +gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca +ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt +cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg +taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg +gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc +taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt +ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt +aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt +gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta +acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct +ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta +tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt +tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg +tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa +ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac +aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga +tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca +gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt +gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc +cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg +actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa +tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg +ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt +ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta +agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc +gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa +tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt +atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca +cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa +tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca +gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg +gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat +aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg +gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat +cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa +taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg +tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt +ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac +aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc +gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag +aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc +tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa +tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata +aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta +ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc +ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc +caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct +gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg +cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc +ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta +tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg +atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc +ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc +acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc +taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga +ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga +aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat +cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc +tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact +gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa +aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag +cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc +cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa +gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg +cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg +gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca +agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac +aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt +aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg +cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt +agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg +cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa +agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga +gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta +aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata +agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc +cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc +agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca +ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga +tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag +gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat +gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt +ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg +gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc +atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc +tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata +ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg +tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag +cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg +ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat +aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg +gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat +ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag +atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac +aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct +gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga +atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt +aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt +tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg +ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta +gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac +cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct +ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga +ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg +ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat +cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga +tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt +tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc +cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt +gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct +ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt +ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa +tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc +agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta +ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc +cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct +agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc +tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc +gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga +ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa +ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca +agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata +attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact +ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat +agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat +aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata +gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta +gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg +ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac +gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata +ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat +taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta +aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata +tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata +ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga +agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt +ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt +agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg +gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa +tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg +gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct +cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc +ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta +cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt +gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc +gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc +tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt +cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca +aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac +ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac +gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag +aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga +gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct +aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta +gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat +agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat +caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta +gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta +aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt +tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt +tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc +ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg +ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg +gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa +ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa +aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa +tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat +acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac +atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga +gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac +tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc +cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa +gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg +acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga +acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga +attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg +tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt +cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag +aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac +ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac +tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat +gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga +gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc +acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta +gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac +gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc +ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt +taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg +agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa +gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag +ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc +accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag +tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact +taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga +catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat +tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga +ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg +aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa +atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa +tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt +ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact +tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt +aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat +agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc +acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc +aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct +ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat +gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat +taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata +taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga +tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat +gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg +ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa +atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat +tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat +cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt +aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac +taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag +caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata +ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct +tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac +tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg +gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta +gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat +gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg +ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa +tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa +taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac +gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt +ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga +gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca +tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc +ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt +tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc +cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat +ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg +caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg +cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat +gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat +cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg +taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat +tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata +taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc +tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac +tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt +tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt +ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt +aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg +atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga +actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta +gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga +ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga +gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct +tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc +aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta +atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt +catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc +taaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagag +ctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagc +cagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcacca +agggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctga +atccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccg +tataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacatt +gttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaa +attacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataat +tcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaacca +tctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttccta +gaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacag +attctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaa +aatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatct +ggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaaca +taggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggata +atcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtcc +aaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttagg +agactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgttttt +gtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacg +tgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtt +taccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttc +cttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttct +aacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggct +ttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaag +gttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgagg +tagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttg +ctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacg +cagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgatta +aagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactga +cttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctc +ccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacg +tacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacg +ttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaat +atcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtt +tatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcg +ttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactc +acgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggt +ccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacg +aaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagc +gtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaac +ctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggca +tgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcacc +gtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaat +taattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattg +aacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttca +tgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaa +gttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaat +ttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcg +tgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaac +tccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagt +tctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagt +ttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttcca +gagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagag +ccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcatt +gtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagt +tagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttcta +caaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcag +tatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaa +gacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgc +tcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactaga +cgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgc +gctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccg +tctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcag +caaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaa +agattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagcc +atgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaat +ttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaa +atcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaaga +tacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatg +tggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctg +ccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctg +agtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtc +acacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagtt +cttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatat +taacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggtt +acaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaactt +ggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgt +ttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgata +cgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattat +ccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaac +cttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataa +attgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaacccc +gcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccata +ctggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgt +aagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgtt +acctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgc +tttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaac +tgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtact +agtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagc +ttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctt +tattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaat +ttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagc +aattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtct +cgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtg +tactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgt +tggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaat +accgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaagga +agaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattc +aaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgag +gctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgc +aattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcag +ttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaa +cctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattc +ctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctg +tgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacaca +tctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaata +aggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatac +gcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgc +cggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtat +aggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatatttt +gataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaa +gtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgc +tgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcata +tcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagt +accctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacac +atttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgc +tgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaa +atgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtc +gtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatga +ataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaacctta +tgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttga +gactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtt +tatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtata +gaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcg +ttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggac +agcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggt +aacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacact +tcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacg +tatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacagga +tagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcaca +aactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatg +aattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatg +aagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgt +ttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagcca +gtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttag +tcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatc +atggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccat +gtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagc +tttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaact +gtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgta +atgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccatt +gaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacatta +ttttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgccta +tagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagc +gtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatga +aaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggta +acggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatcc +acaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatact +accatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcatt +atatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtac +aagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaa +gtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaa +aatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaa +caatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggag +cgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtcc +ttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagag +aaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcag +tacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttc +agacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattat +caaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgcc +gaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataaca +gctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgt +acttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatcta +ttggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttat +gcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatg +cgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccac +ctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccata +actttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatca +tataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcagg +catatggccattatatatggccccagagcagaatgctacagcagacaaaatttggattta +tgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaag +tgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacg +tcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaata +cttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttg +cagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagac +tgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttg +aagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtgg +cactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaacctt +caactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaa +ctaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatgga +tttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaatttta +attacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgc +tccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggt +gttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaa +cccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccac +aactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcattta +ttttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaa +aagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtga +gtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttctta +gagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggaggg +cagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgag +gttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtact +tcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtctta +aacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattat +atacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattc +ctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagcca +aatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgta +aactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaact +cccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaa +gcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaacttt +ccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttat +tacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatattt +gtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccag +atttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctat +ttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttc +acagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagacca +cacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctg +atccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaatagg +tttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgaga +atgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtcta +ttgattacccttttactattcgacttagagataggagatagaacctcagtgtactttttt +agccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaa +agtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaa +atgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatg +tcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcga +tcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatca +taagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataa +aagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacg +tcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggata +acttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagagg +tcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgat +acctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttag +ttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgat +tctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaat +aggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactata +taatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggtt +cgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcat +ctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtga +attcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagc +caccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaag +aaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatca +atgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttact +tcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagact +cttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccct +ggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagacca +gatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagta +actagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggcca +cgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagc +ttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaa +aaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgc +ggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgta +gggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattcttt +ttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattg +cttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaat +tcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctcc +ttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaac +cacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctcca +ccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaat +attagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtctttt +agtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttc +ggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctat +aatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgaca +aatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattga +atatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaat +cctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctac +gtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgccca +aaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgac +atgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttc +ggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcag +cgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgt +caacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaacta +tcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatat +catcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgata +atcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctc +tcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagct +gtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttaca +agcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatat +actatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgt +ctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtt +tcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttat +ttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtc +gggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgc +tctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcagg +taactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgat +agagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcg +acatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaa +cccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaatt +attgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgat +agaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatg +gtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctact +taatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgag +ctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcg +tgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtag +tcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatccc +aataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcg +tctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaa +atatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgt +ctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaa +aacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatc +actgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaattt +acgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacat +aagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactac +caatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctct +aagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatct +cccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaa +atcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacatt +ttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgtt +agatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgt +atcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataaga +ttaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatat +attaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattc +ttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccg +atcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgc +taaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggc +tttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacg +aaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctat +ttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagac +gaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccg +gcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagtt +ccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatata +cgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctca +ctagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgttt +aagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattg +taaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatg +gatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgc +gatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctt +tgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggat +attgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagactt +caactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgata +acatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgt +cgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaattta +taataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccat +taccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttag +tctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaa +ccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacc +taccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgttta +tcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttga +gtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaatt +gaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagc +cctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatag +aagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaa +gattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcg +agtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgt +agtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaatta +acaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttcc +gttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgca +tcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgt +atatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtgga +ccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaa +gaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacaga +gaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtg +gtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataat +atgatattaccttccttacataagacattaccggcataccctggttttcaacttgtgggg +ctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaat +acaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaa +tttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcgg +tcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagt +cacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattcc +aatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtc +gacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgag +ttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggc +taggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaa +gacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaacta +tttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgttta +tgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggc +caaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggc +ctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgct +gtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaag +ccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgc +aaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaa +ggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccagg +tgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggc +gcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtc +aaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagcc +ttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccaga +cttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtagga +attgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggct +ccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatc +gcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagt +ctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaa +atttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtag +atgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagc +atcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattca +cgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttg +cggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtg +gtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtga +accgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataac +tgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagat +aaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtg +cccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttt +tcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcg +cctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaa +acaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcata +cgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgta +ttacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgcta +agtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagc +cggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttcc +acagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgcca +gtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttaga +gtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggag +cataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatat +gaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccatttt +ccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagag +ctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttac +agacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtac +gtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacata +tgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaag +tataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccg +ccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaag +ggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaat +ataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctg +catgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgat +ttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacg +tgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctcc +aatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagct +gttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctga +agctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagat +atcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttt +taccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaag +tgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagcttta +cataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcc +cggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgt +tttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtc +catctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttg +catcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattat +ctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgctta +tctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgt +ttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatc +ccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtcctt +ctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgct +tgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatatt +ttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaa +tctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaacc +aggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagta +gctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgacc +ctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcact +agtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactc +taacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttc +ctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaagga +agtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaa +gtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtcca +agaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttcta +ttgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgact +ttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaat +acggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatat +aaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttcta +ctactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgta +ggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtg +tgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatatacc +gttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatata +ctattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctct +tacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtata +aaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatcta +ttattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaa +atattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggta +acaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctatt +gctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgtt +acttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacgg +ctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaa +ttcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatg +gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt +agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc +ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata +ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt +gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac +gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac +gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt +cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga +aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc +cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac +gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag +ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga +gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt +atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa +gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat +acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat +aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta +cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta +atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt +tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt +tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc +ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg +tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag +gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca +gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca +aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca +tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat +tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc +attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga +catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc +taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc +ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa +gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg +aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga +aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga +agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg +tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt +aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg +agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac +ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc +taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat +ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga +cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc +tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa +cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac +gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc +cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat +tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg +acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa +ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag +gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc +taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag +tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct +tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata +cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat +tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta +ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg +aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa +agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa +gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt +catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct +tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt +aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat +acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc +tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg +aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt +agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat +gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat +gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa +taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga +gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat +gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg +tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa +agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat +tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct +caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat +aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac +gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat +catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta +ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt +tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac +gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg +cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta +gagatacctttgcaattttt diff --git a/extra/benchmark/knucleotide/knucleotide.factor b/extra/benchmark/knucleotide/knucleotide.factor new file mode 100644 index 0000000000..327439015d --- /dev/null +++ b/extra/benchmark/knucleotide/knucleotide.factor @@ -0,0 +1,74 @@ +USING: kernel io io.files splitting strings + hashtables sequences assocs math namespaces prettyprint + math.parser combinators arrays sorting ; + +IN: benchmark.knucleotide + + +: float>string ( float places -- string ) + swap >float number>string + "." split1 rot + over length over < + [ CHAR: 0 pad-right ] + [ head ] if "." swap 3append +; + +: discard-lines ( -- ) + readln + [ ">THREE" head? [ discard-lines ] unless ] when* +; + +: read-input ( -- input ) + discard-lines + ">" read-until drop + CHAR: \n swap remove >upper +; + +: tally ( x exemplar -- b ) + clone tuck + [ + [ [ 1+ ] [ 1 ] if* ] change-at + ] curry each +; + +: small-groups ( x n -- b ) + swap + [ length swap - 1+ ] 2keep + [ >r over + r> subseq ] 2curry map +; + +: handle-table ( inputs n -- ) + small-groups + [ length ] keep + H{ } tally >alist + sort-values reverse + [ + dup first write bl + second 100 * over / 3 float>string print + ] each + drop +; + +: handle-n ( inputs x -- ) + tuck length + small-groups H{ } tally + at [ 0 ] unless* + number>string 8 CHAR: \s pad-right write +; + +: process-input ( input -- ) + dup 1 handle-table nl + dup 2 handle-table nl + { "GGT" "GGTA" "GGTATT" "GGTATTTTAATT" "GGTATTTTAATTTATAGT" } + [ [ dupd handle-n ] keep print ] each + drop +; + +: knucleotide ( -- ) + "extra/benchmark/knucleotide/knucleotide-input.txt" resource-path + + [ read-input ] with-stream + process-input +; + +MAIN: knucleotide From 90ca90c9a7a1156fab3c5f230c985994bd73eacc Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Sat, 24 Nov 2007 17:24:54 -0800 Subject: [PATCH 70/90] Fix editors.gvim: vim-switches no longer defined --- extra/editors/gvim/gvim.factor | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/extra/editors/gvim/gvim.factor b/extra/editors/gvim/gvim.factor index d26bd70209..024f5cfffa 100644 --- a/extra/editors/gvim/gvim.factor +++ b/extra/editors/gvim/gvim.factor @@ -4,11 +4,7 @@ IN: editors.gvim TUPLE: gvim ; M: gvim vim-command ( file line -- string ) - [ - "\"" % vim-path get % "\"" % - vim-switches get [ % ] when* - "+" % # " \"" % % "\"" % - ] "" make ; + [ "\"" % vim-path get % "\" \"" % swap % "\" +" % # ] "" make ; T{ gvim } vim-editor set-global "gvim" vim-path set-global From ce0bbc78fa02985927eddc8d8d2b2132361d189e Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Sat, 24 Nov 2007 17:31:44 -0800 Subject: [PATCH 71/90] Add summary and authors to benchmark.knucleotide --- extra/benchmark/knucleotide/authors.txt | 1 + extra/benchmark/knucleotide/knucleotide.factor | 1 - extra/benchmark/knucleotide/summary.txt | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 extra/benchmark/knucleotide/authors.txt create mode 100644 extra/benchmark/knucleotide/summary.txt diff --git a/extra/benchmark/knucleotide/authors.txt b/extra/benchmark/knucleotide/authors.txt new file mode 100644 index 0000000000..16e1588016 --- /dev/null +++ b/extra/benchmark/knucleotide/authors.txt @@ -0,0 +1 @@ +Eric Mertens diff --git a/extra/benchmark/knucleotide/knucleotide.factor b/extra/benchmark/knucleotide/knucleotide.factor index 327439015d..cfa3550165 100644 --- a/extra/benchmark/knucleotide/knucleotide.factor +++ b/extra/benchmark/knucleotide/knucleotide.factor @@ -4,7 +4,6 @@ USING: kernel io io.files splitting strings IN: benchmark.knucleotide - : float>string ( float places -- string ) swap >float number>string "." split1 rot diff --git a/extra/benchmark/knucleotide/summary.txt b/extra/benchmark/knucleotide/summary.txt new file mode 100644 index 0000000000..c7346d4b0a --- /dev/null +++ b/extra/benchmark/knucleotide/summary.txt @@ -0,0 +1,2 @@ +The Great Computer Language Shootout's knucleotide benchmark to test +hashtables. From aa25860b5b5890c442e866353f4e9be52aec561c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 22:34:53 -0600 Subject: [PATCH 72/90] Fix typo --- misc/factor.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/factor.sh b/misc/factor.sh index a95ac6ce1e..98f9104549 100755 --- a/misc/factor.sh +++ b/misc/factor.sh @@ -148,7 +148,7 @@ set_build_info() { MAKE_TARGET=$OS-$ARCH-$WORD BOOT_IMAGE=boot.$ARCH.$WORD.image - if [[ $OS == macosx && $ARCH=ppc ]] ; then + if [[ $OS == macosx && $ARCH == ppc ]] ; then MAKE_TARGET=$OS-$ARCH BOOT_IMAGE=boot.macosx-ppc.image fi From 40dd61c0f20b166210cfee54af20bd496dccb7dc Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 24 Nov 2007 22:44:47 -0600 Subject: [PATCH 73/90] notepadpp was in the wrong vocab --- extra/editors/notepadpp/notepadpp.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/editors/notepadpp/notepadpp.factor b/extra/editors/notepadpp/notepadpp.factor index 080910731d..42f0568c3a 100644 --- a/extra/editors/notepadpp/notepadpp.factor +++ b/extra/editors/notepadpp/notepadpp.factor @@ -1,5 +1,5 @@ USING: editors io.launcher math.parser namespaces ; -IN: notepadpp +IN: editors.notepadpp : notepadpp ( file line -- ) [ From fd2d136df6f3972c479c5c4b253510b874629ba6 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 23:57:37 -0500 Subject: [PATCH 74/90] UI fixes --- extra/ui/cocoa/cocoa.factor | 2 +- extra/ui/gadgets/incremental/incremental.factor | 4 ++-- extra/ui/ui.factor | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/extra/ui/cocoa/cocoa.factor b/extra/ui/cocoa/cocoa.factor index 7492ad19b7..1e46544180 100755 --- a/extra/ui/cocoa/cocoa.factor +++ b/extra/ui/cocoa/cocoa.factor @@ -5,7 +5,7 @@ kernel memory namespaces cocoa.messages cocoa.runtime cocoa.subclassing cocoa.pasteboard cocoa.types cocoa.windows cocoa.classes cocoa.application sequences system ui ui.backend ui.clipboards ui.gadgets ui.gadgets.worlds ui.cocoa.views -core-foundation ; +core-foundation threads ; IN: ui.cocoa TUPLE: cocoa-ui-backend ; diff --git a/extra/ui/gadgets/incremental/incremental.factor b/extra/ui/gadgets/incremental/incremental.factor index a5c7431d36..c90b955eb7 100755 --- a/extra/ui/gadgets/incremental/incremental.factor +++ b/extra/ui/gadgets/incremental/incremental.factor @@ -40,13 +40,13 @@ M: incremental pref-dim* swap set-rect-loc ; : prefer-incremental ( gadget -- ) - dup forget-pref-dim dup pref-dim over set-rect-dim - layout ; + dup forget-pref-dim dup pref-dim swap set-rect-dim ; : add-incremental ( gadget incremental -- ) not-in-layout 2dup (add-gadget) over prefer-incremental + over layout-later 2dup incremental-loc tuck update-cursor dup prefer-incremental diff --git a/extra/ui/ui.factor b/extra/ui/ui.factor index bafd6c40c5..09c06035b8 100755 --- a/extra/ui/ui.factor +++ b/extra/ui/ui.factor @@ -4,7 +4,7 @@ USING: arrays assocs io kernel math models namespaces prettyprint dlists sequences threads sequences words timers debugger ui.gadgets ui.gadgets.worlds ui.gadgets.tracks ui.gestures ui.backend ui.render continuations init -combinators ; +combinators hashtables ; IN: ui ! Assoc mapping aliens to gadgets @@ -114,7 +114,7 @@ SYMBOL: ui-hook layout-queue [ dup layout find-world [ , ] when* ] dlist-slurp - ] { } make ; + ] { } make prune ; : redraw-worlds ( seq -- ) [ dup update-hand draw-world ] each ; From f1e91b97e289d4c86314853eeaf58b8c0d2982f4 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 24 Nov 2007 23:57:46 -0500 Subject: [PATCH 75/90] Fix jamshred unit test --- extra/jamshred/tunnel/tunnel-tests.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/jamshred/tunnel/tunnel-tests.factor b/extra/jamshred/tunnel/tunnel-tests.factor index e78ced83e0..2ea8a64bd9 100644 --- a/extra/jamshred/tunnel/tunnel-tests.factor +++ b/extra/jamshred/tunnel/tunnel-tests.factor @@ -12,4 +12,4 @@ IN: temporary [ 3 ] [ T{ oint f { 0 0 -3.25 } } 0 nearest-segment-forward segment-number ] unit-test -[ { 0 0 0 } ] [ T{ oint f { 0 0 -0.25 } } over first nearest-segment oint-location ] unit-test +[ F{ 0 0 0 } ] [ T{ oint f { 0 0 -0.25 } } over first nearest-segment oint-location ] unit-test From 94e0c7c8ebff77b7d5c5cc355ad4ae59bab2e982 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 25 Nov 2007 03:48:22 -0500 Subject: [PATCH 76/90] Callbacks were being blown away on startup --- core/alien/compiler/compiler.factor | 5 ++--- extra/tools/deploy/shaker/shaker.factor | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/alien/compiler/compiler.factor b/core/alien/compiler/compiler.factor index 7495be42ca..29957ac088 100755 --- a/core/alien/compiler/compiler.factor +++ b/core/alien/compiler/compiler.factor @@ -5,8 +5,7 @@ hashtables kernel math namespaces sequences words inference.backend inference.dataflow system math.parser classes alien.arrays alien.c-types alien.structs alien.syntax cpu.architecture alien inspector quotations assocs -kernel.private threads continuations.private libc combinators -init ; +kernel.private threads continuations.private libc combinators ; IN: alien.compiler ! Common protocol for alien-invoke/alien-callback/alien-indirect @@ -302,7 +301,7 @@ M: alien-indirect generate-node ! this hashtable, they will all be blown away by code GC, beware SYMBOL: callbacks -[ H{ } clone callbacks set-global ] "alien.compiler" add-init-hook +callbacks global [ H{ } assoc-like ] change-at : register-callback ( word -- ) dup callbacks get set-at ; diff --git a/extra/tools/deploy/shaker/shaker.factor b/extra/tools/deploy/shaker/shaker.factor index 3e1aa3ab53..7b6d3fdbb5 100755 --- a/extra/tools/deploy/shaker/shaker.factor +++ b/extra/tools/deploy/shaker/shaker.factor @@ -111,6 +111,10 @@ SYMBOL: deploy-vocab builtins , strip-io? [ io-backend , ] unless + deploy-compiler? get [ + "callbacks" "alien.compiler" lookup , + ] when + strip-dictionary? [ { dictionary From efde1afc2fcbb8420a9c99755afa79acd0c7f6b9 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 25 Nov 2007 04:33:46 -0500 Subject: [PATCH 77/90] Improve no-edit-hook error, make it restartable --- extra/editors/editors.factor | 29 ++++++++++++++++----- extra/ui/tools/operations/operations.factor | 2 ++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/extra/editors/editors.factor b/extra/editors/editors.factor index 930a39dfdf..7d95c8ce8a 100644 --- a/extra/editors/editors.factor +++ b/extra/editors/editors.factor @@ -1,21 +1,36 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: parser kernel namespaces sequences definitions io.files -inspector continuations tuples tools.crossref io prettyprint -source-files ; +inspector continuations tuples tools.crossref tools.browser +io prettyprint source-files assocs vocabs vocabs.loader ; IN: editors TUPLE: no-edit-hook ; -M: no-edit-hook summary drop "No edit hook is set" ; +M: no-edit-hook summary + drop "You must load one of the below vocabularies before using editor integration:" ; SYMBOL: edit-hook +: available-editors ( -- seq ) + "editors" all-child-vocabs + values concat [ vocab-name ] map ; + +: editor-restarts ( -- alist ) + available-editors + [ "Load " over append swap ] { } map>assoc ; + +: no-edit-hook ( -- ) + \ no-edit-hook construct-empty + editor-restarts throw-restarts + require ; + : edit-location ( file line -- ) - >r ?resource-path r> - edit-hook get dup [ - \ no-edit-hook construct-empty throw - ] if ; + edit-hook get [ + >r >r ?resource-path r> r> call + ] [ + no-edit-hook edit-location + ] if* ; : edit ( defspec -- ) where [ first2 edit-location ] when* ; diff --git a/extra/ui/tools/operations/operations.factor b/extra/ui/tools/operations/operations.factor index d2d7685f45..b7a59f5c28 100755 --- a/extra/ui/tools/operations/operations.factor +++ b/extra/ui/tools/operations/operations.factor @@ -64,6 +64,7 @@ V{ } clone operations set-global { +keyboard+ T{ key-down f { C+ } "E" } } { +primary+ t } { +secondary+ t } + { +listener+ t } } define-operation UNION: definition word method-spec link ; @@ -72,6 +73,7 @@ UNION: editable-definition definition vocab vocab-link ; [ editable-definition? ] \ edit H{ { +keyboard+ T{ key-down f { C+ } "E" } } + { +listener+ t } } define-operation UNION: reloadable-definition definition pathname ; From 75d9329f066401d50572c81b59a780efdaab0ff2 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 25 Nov 2007 04:35:16 -0500 Subject: [PATCH 78/90] 'watch' now respects effect-in/effect-out --- extra/tools/annotations/annotations.factor | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/extra/tools/annotations/annotations.factor b/extra/tools/annotations/annotations.factor index d24d60cef6..e97f292416 100644 --- a/extra/tools/annotations/annotations.factor +++ b/extra/tools/annotations/annotations.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel words parser io inspector quotations sequences -prettyprint continuations ; +prettyprint continuations effects ; IN: tools.annotations : annotate ( word quot -- ) @@ -9,17 +9,29 @@ IN: tools.annotations swap define-compound do-parse-hook ; inline -: entering ( str -- ) "! Entering: " write print .s flush ; +: entering ( str -- ) + "/-- Entering: " write dup . + stack-effect [ + >r datastack r> effect-in length tail* stack. + ] [ + .s + ] if* "\\--" print flush ; -: leaving ( str -- ) "! Leaving: " write print .s flush ; +: leaving ( str -- ) + "/-- Leaving: " write dup . + stack-effect [ + >r datastack r> effect-out length tail* stack. + ] [ + .s + ] if* "\\--" print flush ; -: (watch) ( str def -- def ) +: (watch) ( word def -- def ) over [ entering ] curry rot [ leaving ] curry swapd 3append ; : watch ( word -- ) - dup word-name swap [ (watch) ] annotate ; + dup [ (watch) ] annotate ; : breakpoint ( word -- ) [ \ break add* ] annotate ; From a019a64407a0d294f3311be99deab187dfe8e370 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 25 Nov 2007 03:51:30 -0600 Subject: [PATCH 79/90] initial checkin of regexps --- extra/regexp/regexp-tests.factor | 77 ++++++++++++++++++ extra/regexp/regexp.factor | 134 +++++++++++++++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 extra/regexp/regexp-tests.factor create mode 100644 extra/regexp/regexp.factor diff --git a/extra/regexp/regexp-tests.factor b/extra/regexp/regexp-tests.factor new file mode 100644 index 0000000000..597a4f5143 --- /dev/null +++ b/extra/regexp/regexp-tests.factor @@ -0,0 +1,77 @@ +USING: regexp tools.test ; +IN: regexp-tests + +[ f ] [ "b" "a*" matches? ] unit-test +[ t ] [ "" "a*" matches? ] unit-test +[ t ] [ "a" "a*" matches? ] unit-test +[ t ] [ "aaaaaaa" "a*" matches? ] unit-test +[ f ] [ "ab" "a*" matches? ] unit-test + +[ t ] [ "abc" "abc" matches? ] unit-test +[ t ] [ "a" "a|b|c" matches? ] unit-test +[ t ] [ "b" "a|b|c" matches? ] unit-test +[ t ] [ "c" "a|b|c" matches? ] unit-test +[ f ] [ "c" "d|e|f" matches? ] unit-test + +[ f ] [ "aa" "a|b|c" matches? ] unit-test +[ f ] [ "bb" "a|b|c" matches? ] unit-test +[ f ] [ "cc" "a|b|c" matches? ] unit-test +[ f ] [ "cc" "d|e|f" matches? ] unit-test + +[ f ] [ "" "a+" matches? ] unit-test +[ t ] [ "a" "a+" matches? ] unit-test +[ t ] [ "aa" "a+" matches? ] unit-test + +[ t ] [ "" "a?" matches? ] unit-test +[ t ] [ "a" "a?" matches? ] unit-test +[ f ] [ "aa" "a?" matches? ] unit-test + +[ f ] [ "" "." matches? ] unit-test +[ t ] [ "a" "." matches? ] unit-test +[ t ] [ "." "." matches? ] unit-test + +[ f ] [ "" ".+" matches? ] unit-test +[ t ] [ "a" ".+" matches? ] unit-test +[ t ] [ "ab" ".+" matches? ] unit-test + +[ t ] [ "" "a|b*|c+|d?" matches? ] unit-test +[ t ] [ "a" "a|b*|c+|d?" matches? ] unit-test +[ t ] [ "c" "a|b*|c+|d?" matches? ] unit-test +[ t ] [ "cc" "a|b*|c+|d?" matches? ] unit-test +[ f ] [ "ccd" "a|b*|c+|d?" matches? ] unit-test +[ t ] [ "d" "a|b*|c+|d?" matches? ] unit-test + +[ t ] [ "foo" "foo|bar" matches? ] unit-test +[ t ] [ "bar" "foo|bar" matches? ] unit-test +[ f ] [ "foobar" "foo|bar" matches? ] unit-test + +[ f ] [ "" "(a)" matches? ] unit-test +[ t ] [ "a" "(a)" matches? ] unit-test +[ f ] [ "aa" "(a)" matches? ] unit-test +[ t ] [ "aa" "(a*)" matches? ] unit-test + +[ f ] [ "aababaaabbac" "(a|b)+" matches? ] unit-test +[ t ] [ "ababaaabba" "(a|b)+" matches? ] unit-test + +[ f ] [ "" "a{1}" matches? ] unit-test +[ t ] [ "a" "a{1}" matches? ] unit-test +[ f ] [ "aa" "a{1}" matches? ] unit-test + +[ f ] [ "a" "a{2,}" matches? ] unit-test +[ t ] [ "aaa" "a{2,}" matches? ] unit-test +[ t ] [ "aaaa" "a{2,}" matches? ] unit-test +[ t ] [ "aaaaa" "a{2,}" matches? ] unit-test + +[ t ] [ "" "a{,2}" matches? ] unit-test +[ t ] [ "a" "a{,2}" matches? ] unit-test +[ t ] [ "aa" "a{,2}" matches? ] unit-test +[ f ] [ "aaa" "a{,2}" matches? ] unit-test +[ f ] [ "aaaa" "a{,2}" matches? ] unit-test +[ f ] [ "aaaaa" "a{,2}" matches? ] unit-test + +[ f ] [ "" "a{1,3}" matches? ] unit-test +[ t ] [ "a" "a{1,3}" matches? ] unit-test +[ t ] [ "aa" "a{1,3}" matches? ] unit-test +[ t ] [ "aaa" "a{1,3}" matches? ] unit-test +[ f ] [ "aaaa" "a{1,3}" matches? ] unit-test + diff --git a/extra/regexp/regexp.factor b/extra/regexp/regexp.factor new file mode 100644 index 0000000000..c7abaada26 --- /dev/null +++ b/extra/regexp/regexp.factor @@ -0,0 +1,134 @@ +USING: combinators kernel lazy-lists math math.parser +namespaces parser parser-combinators promises sequences +strings ; +USING: continuations io prettyprint ; +IN: regexp + +: 'any-char' + "." token [ drop any-char-parser ] <@ ; + +: 'escaped-char' + "\\" token any-char-parser &> ; + +: 'ordinary-char' + [ "*+?|(){}" member? not ] satisfy ; + +: 'char' 'escaped-char' 'ordinary-char' <|> ; + +: 'string' 'char' <+> [ >string token ] <@ ; + +: 'integer' [ digit? ] satisfy <+> [ string>number ] <@ ; + +: exactly-n ( parser n -- parser' ) + swap and-parser construct-boa ; + +: at-most-n ( parser n -- parser' ) + dup zero? [ + 2drop epsilon + ] [ + 2dup exactly-n + -rot 1- at-most-n <|> + ] if ; + +: at-least-n ( parser n -- parser' ) + dupd exactly-n swap <*> <&> ; + +: from-m-to-n ( parser m n -- parser' ) + >r [ exactly-n ] 2keep r> swap - at-most-n <&> ; + +DEFER: 'regexp' + +TUPLE: group-result str ; + +C: group-result + +: 'grouping' + "(" token + 'regexp' [ [ ] <@ ] <@ + ")" token <& &> ; + +: 'term' + 'any-char' + 'string' <|> + 'grouping' <|> + <+> [ + dup length 1 = + [ first ] [ and-parser construct-boa ] if + ] <@ ; + +: 'interval' + 'term' + "{" token + 'integer' &> + "," token <:&:> + 'integer' <:&:> + "}" token <& <&> [ + first2 dup length { + { 1 [ first exactly-n ] } + { 2 [ first2 dup integer? + [ nip at-most-n ] + [ drop at-least-n ] if ] } + { 3 [ first3 nip from-m-to-n ] } + } case + ] <@ ; + +: 'character-range' + any-char-parser "-" token <& any-char-parser &> ; + +: 'character-class-inside' + any-char-parser + 'character-range' <|> ; + +: 'character-class-inclusive' + "[" token + 'character-class-inside' + "]" token ; + +: 'character-class-exclusive' + "[^" token + 'character-class-inside' + "]" token ; + +: 'character-class' + 'character-class-inclusive' + 'character-class-exclusive' <|> ; + +: 'repetition' + 'term' + [ "*+?" member? ] satisfy <&> [ + first2 { + { CHAR: * [ <*> ] } + { CHAR: + [ <+> ] } + { CHAR: ? [ ] } + } case + ] <@ ; + +: 'simple' 'term' 'repetition' <|> 'interval' <|> ; + +LAZY: 'union' ( -- parser ) + 'simple' + 'simple' "|" token 'union' &> <&> [ first2 <|> ] <@ + <|> ; + +LAZY: 'regexp' ( -- parser ) + 'repetition' 'union' <|> ; + +: 'regexp' just parse-1 ; + + +GENERIC: >regexp ( obj -- parser ) +M: string >regexp 'regexp' just parse-1 ; +M: object >regexp ; + +: matches? ( string regexp -- ? ) >regexp just parse nil? not ; + +: parse-regexp ( accum end -- accum ) + lexer get dup skip-blank [ + [ index* dup 1+ swap ] 2keep swapd subseq swap + ] change-column parsed ; + +: R/ CHAR: / parse-regexp ; parsing +: R| CHAR: | parse-regexp ; parsing +: R" CHAR: " parse-regexp ; parsing +: R' CHAR: ' parse-regexp ; parsing +: R` CHAR: ` parse-regexp ; parsing From 3fc47bae3a2892007791591f7a653412f2ca509f Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 25 Nov 2007 03:55:15 -0600 Subject: [PATCH 80/90] Add <:&:> to parser-combinators --- extra/parser-combinators/parser-combinators.factor | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/extra/parser-combinators/parser-combinators.factor b/extra/parser-combinators/parser-combinators.factor index 5741c801f7..199f0cb136 100755 --- a/extra/parser-combinators/parser-combinators.factor +++ b/extra/parser-combinators/parser-combinators.factor @@ -190,6 +190,10 @@ M: some-parser (parse) ( input parser -- result ) #! Same as <&> except flatten the result. <&> [ dup second swap first [ , % ] { } make ] <@ ; +: <:&:> ( parser1 parser2 -- result ) + #! Same as <&> except flatten the result. + <&> [ dup second swap first [ % % ] { } make ] <@ ; + LAZY: <*> ( parser -- parser ) dup <*> <&:> { } succeed <|> ; @@ -263,4 +267,4 @@ LAZY: <(+)> ( parser -- parser ) nonempty-list-of { } succeed <|> ; LAZY: surrounded-by ( parser start end -- parser' ) - [ token ] 2apply swapd pack ; \ No newline at end of file + [ token ] 2apply swapd pack ; From 8d84a81141e0d780037b1f9aca90a3341762f23f Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 25 Nov 2007 03:56:04 -0600 Subject: [PATCH 81/90] Use the builtin 'integer' --- extra/regexp/regexp.factor | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/extra/regexp/regexp.factor b/extra/regexp/regexp.factor index c7abaada26..79f826bafa 100644 --- a/extra/regexp/regexp.factor +++ b/extra/regexp/regexp.factor @@ -1,6 +1,6 @@ USING: combinators kernel lazy-lists math math.parser -namespaces parser parser-combinators promises sequences -strings ; +namespaces parser parser-combinators parser-combinators.simple +promises sequences strings ; USING: continuations io prettyprint ; IN: regexp @@ -17,8 +17,6 @@ IN: regexp : 'string' 'char' <+> [ >string token ] <@ ; -: 'integer' [ digit? ] satisfy <+> [ string>number ] <@ ; - : exactly-n ( parser n -- parser' ) swap and-parser construct-boa ; From 286e261fb65cd418e3176e72e6bee609ee6ee46f Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Sun, 25 Nov 2007 13:37:05 -0600 Subject: [PATCH 82/90] Update factor.el --- misc/factor.el | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/misc/factor.el b/misc/factor.el index 88af0a6dab..985e10e285 100644 --- a/misc/factor.el +++ b/misc/factor.el @@ -113,13 +113,6 @@ (defvar factor-binary "/scratch/repos/Factor/factor") (defvar factor-image "/scratch/repos/Factor/factor.image") -(defun run-factor () - (interactive) - (switch-to-buffer - (make-comint-in-buffer "factor" nil factor-binary nil - (concat "-i=" factor-image) - "-run=listener"))) - (defun factor-telnet-to-port (port) (interactive "nPort: ") (switch-to-buffer @@ -166,12 +159,30 @@ (beginning-of-line) (insert "! ")) -(defun factor-refresh-all () - (interactive) - (comint-send-string "*factor*" "refresh-all\n")) - (define-key factor-mode-map "\C-c\C-f" 'factor-run-file) (define-key factor-mode-map "\C-c\C-r" 'factor-send-region) (define-key factor-mode-map "\C-c\C-s" 'factor-see) -(define-key factor-mode-map "\C-ce" 'factor-edit) +(define-key factor-mode-map "\C-ce" 'factor-edit) (define-key factor-mode-map "\C-c\C-h" 'factor-help) +(define-key factor-mode-map "\C-cc" 'comment-region) +(define-key factor-mode-map [return] 'newline-and-indent) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; factor-listener-mode +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-derived-mode factor-listener-mode comint-mode "Factor Listener") + +(define-key factor-listener-mode-map [f8] 'factor-refresh-all) + +(defun run-factor () + (interactive) + (switch-to-buffer + (make-comint-in-buffer "factor" nil factor-binary nil + (concat "-i=" factor-image) + "-run=listener")) + (factor-listener-mode)) + +(defun factor-refresh-all () + (interactive) + (comint-send-string "*factor*" "refresh-all\n")) \ No newline at end of file From e167a6b9d54a6ca3ca310415468cd32554676453 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Sun, 25 Nov 2007 13:37:27 -0600 Subject: [PATCH 83/90] raptor updates --- extra/raptor/config.factor | 5 ++++- extra/raptor/cronjobs.factor | 2 -- extra/raptor/raptor.factor | 6 ++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/extra/raptor/config.factor b/extra/raptor/config.factor index ecdbf98f17..29e26d4381 100644 --- a/extra/raptor/config.factor +++ b/extra/raptor/config.factor @@ -44,7 +44,10 @@ IN: raptor ! rcS.d "mountvirtfs" start-service - "hostname.sh" start-service + + ! "hostname.sh" start-service + "narodnik" set-hostname + "keymap.sh" start-service "linux-restricted-modules-common" start-service "udev" start-service diff --git a/extra/raptor/cronjobs.factor b/extra/raptor/cronjobs.factor index 894e8e5ce7..91263a31d9 100644 --- a/extra/raptor/cronjobs.factor +++ b/extra/raptor/cronjobs.factor @@ -6,8 +6,6 @@ IN: raptor ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: fork-exec-args-wait ( args -- ) [ first ] [ ] bi fork-exec-wait ; - : run-script ( path -- ) 1array [ fork-exec-args-wait ] curry in-thread ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/extra/raptor/raptor.factor b/extra/raptor/raptor.factor index e6f960cd8d..ef5359c313 100644 --- a/extra/raptor/raptor.factor +++ b/extra/raptor/raptor.factor @@ -22,6 +22,8 @@ SYMBOL: networking-hook : fork-exec-wait ( pathname args -- ) fork dup 0 = [ drop exec drop ] [ 2nip wait-for-pid drop ] if ; +: fork-exec-args-wait ( args -- ) [ first ] [ ] bi fork-exec-wait ; + ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : forever ( quot -- ) [ call ] [ forever ] bi ; @@ -59,6 +61,10 @@ SYMBOL: swap-devices : start-networking ( -- ) networking-hook get call ; +: set-hostname ( name -- ) `{ "/bin/hostname" , } fork-exec-args-wait ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + : boot ( -- ) boot-hook get call ; : reboot ( -- ) reboot-hook get call ; : shutdown ( -- ) shutdown-hook get call ; From 1f2001143c6d521f4df444bd395a9ef718c13837 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 25 Nov 2007 15:27:11 -0500 Subject: [PATCH 84/90] Add type check to curry primitive --- core/cpu/arm/intrinsics/intrinsics.factor | 11 ----------- core/cpu/ppc/intrinsics/intrinsics.factor | 12 ------------ core/cpu/x86/intrinsics/intrinsics.factor | 13 ------------- core/quotations/quotations-tests.factor | 6 ++++-- vm/quotations.c | 16 +++++++++++++--- 5 files changed, 17 insertions(+), 41 deletions(-) mode change 100644 => 100755 vm/quotations.c diff --git a/core/cpu/arm/intrinsics/intrinsics.factor b/core/cpu/arm/intrinsics/intrinsics.factor index 9eedd8e494..81b23ea8b2 100755 --- a/core/cpu/arm/intrinsics/intrinsics.factor +++ b/core/cpu/arm/intrinsics/intrinsics.factor @@ -418,17 +418,6 @@ IN: cpu.arm.intrinsics { +output+ { "out" } } } define-intrinsic -\ curry [ - \ curry 3 cells %allot - "obj" operand 1 %set-slot - "quot" operand 2 %set-slot - "out" get object %store-tagged -] H{ - { +input+ { { f "obj" } { f "quot" } } } - { +scratch+ { { f "out" } } } - { +output+ { "out" } } -} define-intrinsic - ! Alien intrinsics : %alien-accessor ( quot -- ) "offset" operand dup %untag-fixnum diff --git a/core/cpu/ppc/intrinsics/intrinsics.factor b/core/cpu/ppc/intrinsics/intrinsics.factor index f78b7c06e2..e1d86db178 100755 --- a/core/cpu/ppc/intrinsics/intrinsics.factor +++ b/core/cpu/ppc/intrinsics/intrinsics.factor @@ -580,18 +580,6 @@ IN: cpu.ppc.intrinsics { +output+ { "vector" } } } define-intrinsic -\ curry [ - \ curry 3 cells %allot - "obj" operand 11 1 cells STW - "quot" operand 11 2 cells STW - ! Store tagged ptr in reg - "curry" get object %store-tagged -] H{ - { +input+ { { f "obj" } { f "quot" } } } - { +scratch+ { { f "curry" } } } - { +output+ { "curry" } } -} define-intrinsic - ! Alien intrinsics : %alien-accessor ( quot -- ) "offset" operand dup %untag-fixnum diff --git a/core/cpu/x86/intrinsics/intrinsics.factor b/core/cpu/x86/intrinsics/intrinsics.factor index ff6975336d..d1a851b553 100755 --- a/core/cpu/x86/intrinsics/intrinsics.factor +++ b/core/cpu/x86/intrinsics/intrinsics.factor @@ -485,19 +485,6 @@ IN: cpu.x86.intrinsics { +output+ { "vector" } } } define-intrinsic -\ curry [ - \ curry 3 cells [ - 1 object@ "obj" operand MOV - 2 object@ "quot" operand MOV - ! Store tagged ptr in reg - "curry" get object %store-tagged - ] %allot -] H{ - { +input+ { { f "obj" } { f "quot" } } } - { +scratch+ { { f "curry" } } } - { +output+ { "curry" } } -} define-intrinsic - ! Alien intrinsics : %alien-accessor ( quot -- ) "offset" operand %untag-fixnum diff --git a/core/quotations/quotations-tests.factor b/core/quotations/quotations-tests.factor index 662b9e9f2a..f1cc6cd828 100644 --- a/core/quotations/quotations-tests.factor +++ b/core/quotations/quotations-tests.factor @@ -1,8 +1,8 @@ USING: math kernel quotations tools.test sequences ; IN: temporary -[ [ 3 ] ] [ 3 f curry ] unit-test -[ [ \ + ] ] [ \ + f curry ] unit-test +[ [ 3 ] ] [ 3 [ ] curry ] unit-test +[ [ \ + ] ] [ \ + [ ] curry ] unit-test [ [ \ + = ] ] [ \ + [ = ] curry ] unit-test [ [ 1 + 2 + 3 + ] ] [ @@ -14,3 +14,5 @@ IN: temporary [ [ 3 1 2 ] ] [ [ 1 2 ] 3 add* ] unit-test [ [ "hi" ] ] [ "hi" 1quotation ] unit-test + +[ 1 \ + curry ] unit-test-fails diff --git a/vm/quotations.c b/vm/quotations.c old mode 100644 new mode 100755 index 472ec76f1e..9d98fa7842 --- a/vm/quotations.c +++ b/vm/quotations.c @@ -192,9 +192,19 @@ XT quot_offset_to_pc(F_QUOTATION *quot, F_FIXNUM offset) DEFINE_PRIMITIVE(curry) { F_CURRY *curry = allot_object(CURRY_TYPE,sizeof(F_CURRY)); - curry->quot = dpop(); - curry->obj = dpop(); - dpush(tag_object(curry)); + + switch(type_of(dpeek())) + { + case QUOTATION_TYPE: + case CURRY_TYPE: + curry->quot = dpop(); + curry->obj = dpop(); + dpush(tag_object(curry)); + break; + default: + type_error(QUOTATION_TYPE,dpeek()); + break; + } } void uncurry(CELL obj) From 12599e03c4a195810d908c7d483e34068c186ad2 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 25 Nov 2007 17:07:32 -0500 Subject: [PATCH 85/90] Clean up parser combinators --- .../parser-combinators.factor | 304 +++++++++--------- 1 file changed, 153 insertions(+), 151 deletions(-) diff --git a/extra/parser-combinators/parser-combinators.factor b/extra/parser-combinators/parser-combinators.factor index 199f0cb136..d6c44659a5 100755 --- a/extra/parser-combinators/parser-combinators.factor +++ b/extra/parser-combinators/parser-combinators.factor @@ -1,22 +1,23 @@ ! Copyright (C) 2004 Chris Double. ! See http://factorcode.org/license.txt for BSD license. -USING: lazy-lists promises kernel sequences strings math io -arrays namespaces splitting ; +USING: lazy-lists promises kernel sequences strings math +arrays splitting ; IN: parser-combinators ! Parser combinator protocol -GENERIC: (parse) ( input parser -- list ) +GENERIC: parse ( input parser -- list ) -M: promise (parse) ( input parser -- list ) - force (parse) ; - -: parse ( input parser -- promise ) - (parse) ; +M: promise parse ( input parser -- list ) + force parse ; TUPLE: parse-result parsed unparsed ; : parse-1 ( input parser -- result ) - parse car parse-result-parsed ; + parse dup nil? [ + "Parse error" throw + ] [ + car parse-result-parsed + ] if ; C: parse-result @@ -24,105 +25,106 @@ TUPLE: token-parser string ; C: token token-parser ( string -- parser ) -M: token-parser (parse) ( input parser -- list ) - token-parser-string swap over ?head-slice [ - 1list - ] [ - 2drop nil - ] if ; +M: token-parser parse ( input parser -- list ) + token-parser-string swap over ?head-slice [ + 1list + ] [ + 2drop nil + ] if ; TUPLE: satisfy-parser quot ; C: satisfy satisfy-parser ( quot -- parser ) -M: satisfy-parser (parse) ( input parser -- list ) - #! A parser that succeeds if the predicate, - #! when passed the first character in the input, returns - #! true. - over empty? [ - 2drop nil - ] [ - satisfy-parser-quot >r unclip-slice dup r> call [ - swap 1list +M: satisfy-parser parse ( input parser -- list ) + #! A parser that succeeds if the predicate, + #! when passed the first character in the input, returns + #! true. + over empty? [ + 2drop nil ] [ - 2drop nil - ] if - ] if ; + satisfy-parser-quot >r unclip-slice dup r> call [ + swap 1list + ] [ + 2drop nil + ] if + ] if ; LAZY: any-char-parser ( -- parser ) - [ drop t ] satisfy ; + [ drop t ] satisfy ; TUPLE: epsilon-parser ; C: epsilon epsilon-parser ( -- parser ) -M: epsilon-parser (parse) ( input parser -- list ) - #! A parser that parses the empty string. It - #! does not consume any input and always returns - #! an empty list as the parse tree with the - #! unmodified input. - drop "" swap 1list ; +M: epsilon-parser parse ( input parser -- list ) + #! A parser that parses the empty string. It + #! does not consume any input and always returns + #! an empty list as the parse tree with the + #! unmodified input. + drop "" swap 1list ; TUPLE: succeed-parser result ; C: succeed succeed-parser ( result -- parser ) -M: succeed-parser (parse) ( input parser -- list ) - #! A parser that always returns 'result' as a - #! successful parse with no input consumed. - succeed-parser-result swap 1list ; +M: succeed-parser parse ( input parser -- list ) + #! A parser that always returns 'result' as a + #! successful parse with no input consumed. + succeed-parser-result swap 1list ; TUPLE: fail-parser ; C: fail fail-parser ( -- parser ) -M: fail-parser (parse) ( input parser -- list ) - #! A parser that always fails and returns - #! an empty list of successes. - 2drop nil ; +M: fail-parser parse ( input parser -- list ) + #! A parser that always fails and returns + #! an empty list of successes. + 2drop nil ; TUPLE: and-parser parsers ; : <&> ( parser1 parser2 -- parser ) - over and-parser? [ - >r and-parser-parsers r> add - ] [ - 2array - ] if \ and-parser construct-boa ; + over and-parser? [ + >r and-parser-parsers r> add + ] [ + 2array + ] if and-parser construct-boa ; : and-parser-parse ( list p1 -- list ) - swap [ - dup parse-result-unparsed rot parse - [ - >r parse-result-parsed r> - [ parse-result-parsed 2array ] keep - parse-result-unparsed - ] lmap-with - ] lmap-with lconcat ; + swap [ + dup parse-result-unparsed rot parse + [ + >r parse-result-parsed r> + [ parse-result-parsed 2array ] keep + parse-result-unparsed + ] lmap-with + ] lmap-with lconcat ; -M: and-parser (parse) ( input parser -- list ) - #! Parse 'input' by sequentially combining the - #! two parsers. First parser1 is applied to the - #! input then parser2 is applied to the rest of - #! the input strings from the first parser. - and-parser-parsers unclip swapd parse [ [ and-parser-parse ] reduce ] 2curry promise ; +M: and-parser parse ( input parser -- list ) + #! Parse 'input' by sequentially combining the + #! two parsers. First parser1 is applied to the + #! input then parser2 is applied to the rest of + #! the input strings from the first parser. + and-parser-parsers unclip swapd parse + [ [ and-parser-parse ] reduce ] 2curry promise ; TUPLE: or-parser p1 p2 ; C: <|> or-parser ( parser1 parser2 -- parser ) -M: or-parser (parse) ( input parser1 -- list ) - #! Return the combined list resulting from the parses - #! of parser1 and parser2 being applied to the same - #! input. This implements the choice parsing operator. - [ or-parser-p1 ] keep or-parser-p2 >r dupd parse swap r> parse lappend ; +M: or-parser parse ( input parser1 -- list ) + #! Return the combined list resulting from the parses + #! of parser1 and parser2 being applied to the same + #! input. This implements the choice parsing operator. + [ or-parser-p1 ] keep or-parser-p2 >r dupd parse swap r> parse lappend ; : left-trim-slice ( string -- string ) - #! Return a new string without any leading whitespace - #! from the original string. - dup empty? [ - dup first blank? [ 1 tail-slice left-trim-slice ] when - ] unless ; + #! Return a new string without any leading whitespace + #! from the original string. + dup empty? [ + dup first blank? [ 1 tail-slice left-trim-slice ] when + ] unless ; TUPLE: sp-parser p1 ; @@ -130,115 +132,115 @@ TUPLE: sp-parser p1 ; #! calling the original parser. C: sp sp-parser ( p1 -- parser ) -M: sp-parser (parse) ( input parser -- list ) - #! Skip all leading whitespace from the input then call - #! the parser on the remaining input. - >r left-trim-slice r> sp-parser-p1 parse ; +M: sp-parser parse ( input parser -- list ) + #! Skip all leading whitespace from the input then call + #! the parser on the remaining input. + >r left-trim-slice r> sp-parser-p1 parse ; TUPLE: just-parser p1 ; C: just just-parser ( p1 -- parser ) -M: just-parser (parse) ( input parser -- result ) - #! Calls the given parser on the input removes - #! from the results anything where the remaining - #! input to be parsed is not empty. So ensures a - #! fully parsed input string. - just-parser-p1 parse [ parse-result-unparsed empty? ] lsubset ; +M: just-parser parse ( input parser -- result ) + #! Calls the given parser on the input removes + #! from the results anything where the remaining + #! input to be parsed is not empty. So ensures a + #! fully parsed input string. + just-parser-p1 parse [ parse-result-unparsed empty? ] lsubset ; TUPLE: apply-parser p1 quot ; C: <@ apply-parser ( parser quot -- parser ) -M: apply-parser (parse) ( input parser -- result ) - #! Calls the parser on the input. For each successfull - #! parse the quot is call with the parse result on the stack. - #! The result of that quotation then becomes the new parse result. - #! This allows modification of parse tree results (like - #! converting strings to integers, etc). - [ apply-parser-p1 ] keep apply-parser-quot - -rot parse [ - [ parse-result-parsed swap call ] keep - parse-result-unparsed - ] lmap-with ; +M: apply-parser parse ( input parser -- result ) + #! Calls the parser on the input. For each successfull + #! parse the quot is call with the parse result on the stack. + #! The result of that quotation then becomes the new parse result. + #! This allows modification of parse tree results (like + #! converting strings to integers, etc). + [ apply-parser-p1 ] keep apply-parser-quot + -rot parse [ + [ parse-result-parsed swap call ] keep + parse-result-unparsed + ] lmap-with ; TUPLE: some-parser p1 ; C: some some-parser ( p1 -- parser ) -M: some-parser (parse) ( input parser -- result ) - #! Calls the parser on the input, guarantees - #! the parse is complete (the remaining input is empty), - #! picks the first solution and only returns the parse - #! tree since the remaining input is empty. - some-parser-p1 just parse-1 ; - +M: some-parser parse ( input parser -- result ) + #! Calls the parser on the input, guarantees + #! the parse is complete (the remaining input is empty), + #! picks the first solution and only returns the parse + #! tree since the remaining input is empty. + some-parser-p1 just parse-1 ; : <& ( parser1 parser2 -- parser ) - #! Same as <&> except discard the results of the second parser. - <&> [ first ] <@ ; + #! Same as <&> except discard the results of the second parser. + <&> [ first ] <@ ; : &> ( parser1 parser2 -- parser ) - #! Same as <&> except discard the results of the first parser. - <&> [ second ] <@ ; + #! Same as <&> except discard the results of the first parser. + <&> [ second ] <@ ; : <:&> ( parser1 parser2 -- result ) - #! Same as <&> except flatten the result. - <&> [ dup second swap first [ % , ] { } make ] <@ ; + #! Same as <&> except flatten the result. + <&> [ first2 add ] <@ ; : <&:> ( parser1 parser2 -- result ) - #! Same as <&> except flatten the result. - <&> [ dup second swap first [ , % ] { } make ] <@ ; + #! Same as <&> except flatten the result. + <&> [ first2 swap add* ] <@ ; : <:&:> ( parser1 parser2 -- result ) - #! Same as <&> except flatten the result. - <&> [ dup second swap first [ % % ] { } make ] <@ ; + #! Same as <&> except flatten the result. + <&> [ first2 append ] <@ ; LAZY: <*> ( parser -- parser ) - dup <*> <&:> { } succeed <|> ; + dup <*> <&:> { } succeed <|> ; : <+> ( parser -- parser ) - #! Return a parser that accepts one or more occurences of the original - #! parser. - dup <*> <&:> ; + #! Return a parser that accepts one or more occurences of the original + #! parser. + dup <*> <&:> ; LAZY: ( parser -- parser ) - #! Return a parser that optionally uses the parser - #! if that parser would be successfull. - [ 1array ] <@ f succeed <|> ; + #! Return a parser that optionally uses the parser + #! if that parser would be successfull. + [ 1array ] <@ f succeed <|> ; TUPLE: only-first-parser p1 ; -LAZY: only-first ( parser -- parser ) - \ only-first-parser construct-boa ; -M: only-first-parser (parse) ( input parser -- list ) - #! Transform a parser into a parser that only yields - #! the first possibility. - only-first-parser-p1 parse 1 swap ltake ; +LAZY: only-first ( parser -- parser ) + only-first-parser construct-boa ; + +M: only-first-parser parse ( input parser -- list ) + #! Transform a parser into a parser that only yields + #! the first possibility. + only-first-parser-p1 parse 1 swap ltake ; LAZY: ( parser -- parser ) - #! Like <*> but only return one possible result - #! containing all matching parses. Does not return - #! partial matches. Useful for efficiency since that's - #! usually the effect you want and cuts down on backtracking - #! required. - <*> only-first ; + #! Like <*> but only return one possible result + #! containing all matching parses. Does not return + #! partial matches. Useful for efficiency since that's + #! usually the effect you want and cuts down on backtracking + #! required. + <*> only-first ; LAZY: ( parser -- parser ) - #! Like <+> but only return one possible result - #! containing all matching parses. Does not return - #! partial matches. Useful for efficiency since that's - #! usually the effect you want and cuts down on backtracking - #! required. - <+> only-first ; + #! Like <+> but only return one possible result + #! containing all matching parses. Does not return + #! partial matches. Useful for efficiency since that's + #! usually the effect you want and cuts down on backtracking + #! required. + <+> only-first ; LAZY: ( parser -- parser ) - #! Like but only return one possible result - #! containing all matching parses. Does not return - #! partial matches. Useful for efficiency since that's - #! usually the effect you want and cuts down on backtracking - #! required. - only-first ; + #! Like but only return one possible result + #! containing all matching parses. Does not return + #! partial matches. Useful for efficiency since that's + #! usually the effect you want and cuts down on backtracking + #! required. + only-first ; LAZY: <(*)> ( parser -- parser ) #! Like <*> but take shortest match first. @@ -251,20 +253,20 @@ LAZY: <(+)> ( parser -- parser ) dup <(*)> <&:> ; : pack ( close body open -- parser ) - #! Parse a construct enclosed by two symbols, - #! given a parser for the opening symbol, the - #! closing symbol, and the body. - <& &> ; + #! Parse a construct enclosed by two symbols, + #! given a parser for the opening symbol, the + #! closing symbol, and the body. + <& &> ; : nonempty-list-of ( items separator -- parser ) - [ over &> <*> <&:> ] keep tuck pack ; + [ over &> <*> <&:> ] keep tuck pack ; : list-of ( items separator -- parser ) - #! Given a parser for the separator and for the - #! items themselves, return a parser that parses - #! lists of those items. The parse tree is an - #! array of the parsed items. - nonempty-list-of { } succeed <|> ; + #! Given a parser for the separator and for the + #! items themselves, return a parser that parses + #! lists of those items. The parse tree is an + #! array of the parsed items. + nonempty-list-of { } succeed <|> ; LAZY: surrounded-by ( parser start end -- parser' ) - [ token ] 2apply swapd pack ; + [ token ] 2apply swapd pack ; From 3a12daacfb4a7f9163d245a9eccac4752e9ec775 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 26 Nov 2007 16:11:32 -0600 Subject: [PATCH 86/90] x: Check for XOpenDisplay failure in "create" method of --- extra/x/x.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extra/x/x.factor b/extra/x/x.factor index e55dc3f5cd..8d9f869fa3 100644 --- a/extra/x/x.factor +++ b/extra/x/x.factor @@ -29,7 +29,8 @@ define-independent-class "create" !( name -- display ) [ new-empty swap >>name - dup $name dup [ string>char-alien ] [ ] if XOpenDisplay >>ptr + dup $name dup [ string>char-alien ] [ ] if XOpenDisplay + dup [ >>ptr ] [ "XOpenDisplay error" throw ] if dup $ptr XDefaultScreen >>default-screen dup $ptr XDefaultRootWindow dupd new >>default-root dup $ptr over $default-screen XDefaultGC >>default-gc From 6476eb765ea4a7fe9cbfdb2943be305dae0b2ef9 Mon Sep 17 00:00:00 2001 From: Chris Double Date: Tue, 27 Nov 2007 11:57:08 +1300 Subject: [PATCH 87/90] remove parse-state from peg --- extra/peg/peg-tests.factor | 74 ++++++++++++++++---------------------- extra/peg/peg.factor | 27 +++----------- 2 files changed, 36 insertions(+), 65 deletions(-) diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index a60d1eaaf0..9becc81b56 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -8,144 +8,132 @@ IN: temporary 0 next-id set-global get-next-id get-next-id get-next-id ] unit-test -{ "0123456789" } [ - "0123456789" 0 0 state-tail parse-state-input >string -] unit-test - -{ "56789" } [ - "0123456789" 5 0 state-tail parse-state-input >string -] unit-test - -{ "789" } [ - "0123456789" 5 2 state-tail parse-state-input >string -] unit-test - { f } [ - "endbegin" 0 "begin" token parse + "endbegin" "begin" token parse ] unit-test { "begin" "end" } [ - "beginend" 0 "begin" token parse + "beginend" "begin" token parse { parse-result-ast parse-result-remaining } get-slots - parse-state-input >string + >string ] unit-test { f } [ - "" 0 CHAR: a CHAR: z range parse + "" CHAR: a CHAR: z range parse ] unit-test { f } [ - "1bcd" 0 CHAR: a CHAR: z range parse + "1bcd" CHAR: a CHAR: z range parse ] unit-test { CHAR: a } [ - "abcd" 0 CHAR: a CHAR: z range parse parse-result-ast + "abcd" CHAR: a CHAR: z range parse parse-result-ast ] unit-test { CHAR: z } [ - "zbcd" 0 CHAR: a CHAR: z range parse parse-result-ast + "zbcd" CHAR: a CHAR: z range parse parse-result-ast ] unit-test { f } [ - "bad" 0 "a" token "b" token 2array seq parse + "bad" "a" token "b" token 2array seq parse ] unit-test { V{ "g" "o" } } [ - "good" 0 "g" token "o" token 2array seq parse parse-result-ast + "good" "g" token "o" token 2array seq parse parse-result-ast ] unit-test { "a" } [ - "abcd" 0 "a" token "b" token 2array choice parse parse-result-ast + "abcd" "a" token "b" token 2array choice parse parse-result-ast ] unit-test { "b" } [ - "bbcd" 0 "a" token "b" token 2array choice parse parse-result-ast + "bbcd" "a" token "b" token 2array choice parse parse-result-ast ] unit-test { f } [ - "cbcd" 0 "a" token "b" token 2array choice parse + "cbcd" "a" token "b" token 2array choice parse ] unit-test { f } [ - "" 0 "a" token "b" token 2array choice parse + "" "a" token "b" token 2array choice parse ] unit-test { 0 } [ - "" 0 "a" token repeat0 parse parse-result-ast length + "" "a" token repeat0 parse parse-result-ast length ] unit-test { 0 } [ - "b" 0 "a" token repeat0 parse parse-result-ast length + "b" "a" token repeat0 parse parse-result-ast length ] unit-test { V{ "a" "a" "a" } } [ - "aaab" 0 "a" token repeat0 parse parse-result-ast + "aaab" "a" token repeat0 parse parse-result-ast ] unit-test { f } [ - "" 0 "a" token repeat1 parse + "" "a" token repeat1 parse ] unit-test { f } [ - "b" 0 "a" token repeat1 parse + "b" "a" token repeat1 parse ] unit-test { V{ "a" "a" "a" } } [ - "aaab" 0 "a" token repeat1 parse parse-result-ast + "aaab" "a" token repeat1 parse parse-result-ast ] unit-test { V{ "a" "b" } } [ - "ab" 0 "a" token optional "b" token 2array seq parse parse-result-ast + "ab" "a" token optional "b" token 2array seq parse parse-result-ast ] unit-test { V{ f "b" } } [ - "b" 0 "a" token optional "b" token 2array seq parse parse-result-ast + "b" "a" token optional "b" token 2array seq parse parse-result-ast ] unit-test { f } [ - "cb" 0 "a" token optional "b" token 2array seq parse + "cb" "a" token optional "b" token 2array seq parse ] unit-test { V{ CHAR: a CHAR: b } } [ - "ab" 0 "a" token ensure CHAR: a CHAR: z range dup 3array seq parse parse-result-ast + "ab" "a" token ensure CHAR: a CHAR: z range dup 3array seq parse parse-result-ast ] unit-test { f } [ - "bb" 0 "a" token ensure CHAR: a CHAR: z range 2array seq parse + "bb" "a" token ensure CHAR: a CHAR: z range 2array seq parse ] unit-test { t } [ - "a+b" 0 + "a+b" "a" token "+" token dup ensure-not 2array seq "++" token 2array choice "b" token 3array seq parse [ t ] [ f ] if ] unit-test { t } [ - "a++b" 0 + "a++b" "a" token "+" token dup ensure-not 2array seq "++" token 2array choice "b" token 3array seq parse [ t ] [ f ] if ] unit-test { t } [ - "a+b" 0 + "a+b" "a" token "+" token "++" token 2array choice "b" token 3array seq parse [ t ] [ f ] if ] unit-test { f } [ - "a++b" 0 + "a++b" "a" token "+" token "++" token 2array choice "b" token 3array seq parse [ t ] [ f ] if ] unit-test { 1 } [ - "a" 0 "a" token [ drop 1 ] action parse parse-result-ast + "a" "a" token [ drop 1 ] action parse parse-result-ast ] unit-test { V{ 1 1 } } [ - "aa" 0 "a" token [ drop 1 ] action dup 2array seq parse parse-result-ast + "aa" "a" token [ drop 1 ] action dup 2array seq parse parse-result-ast ] unit-test { f } [ - "b" 0 "a" token [ drop 1 ] action parse + "b" "a" token [ drop 1 ] action parse ] unit-test \ No newline at end of file diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 2c985b68dc..34c17448fb 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -5,23 +5,6 @@ IN: peg SYMBOL: ignore -TUPLE: parse-state input cache ; - -: ( input index -- state ) - tail-slice { set-parse-state-input } parse-state construct ; - -: get-cached ( pid state -- result ) - tuck parse-state-cache at [ - swap parse-state-input slice-from swap nth - ] [ - drop f - ] if* ; - -: state-tail ( state n -- state ) - dupd [ parse-state-cache ] dipd - [ parse-state-input ] dip tail-slice - { set-parse-state-cache set-parse-state-input } parse-state construct ; - TUPLE: parse-result remaining ast ; : ( remaining ast -- parse-result ) @@ -42,8 +25,8 @@ GENERIC: parse ( state parser -- result ) TUPLE: token-parser symbol ; M: token-parser parse ( state parser -- result ) - token-parser-symbol 2dup >r parse-state-input r> head? [ - dup >r length state-tail r> + token-parser-symbol 2dup head? [ + dup >r length tail-slice r> ] [ 2drop f ] if ; @@ -54,12 +37,12 @@ M: token-parser parse ( state parser -- result ) TUPLE: range-parser min max ; M: range-parser parse ( state parser -- result ) - over parse-state-input empty? [ + over empty? [ 2drop f ] [ - 0 pick parse-state-input nth dup rot + 0 pick nth dup rot { range-parser-min range-parser-max } get-slots between? [ - [ 1 state-tail ] dip + [ 1 tail-slice ] dip ] [ 2drop f ] if From a9333780a024ef6d0019d1b99a9dd8a5b32b16c0 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 26 Nov 2007 18:19:58 -0500 Subject: [PATCH 88/90] Add missing USE: --- extra/ui/x11/x11.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/ui/x11/x11.factor b/extra/ui/x11/x11.factor index 2b1a5ba331..5984e3decd 100755 --- a/extra/ui/x11/x11.factor +++ b/extra/ui/x11/x11.factor @@ -5,7 +5,7 @@ ui.clipboards ui.gadgets.worlds assocs kernel math namespaces opengl sequences strings x11.xlib x11.events x11.xim x11.glx x11.clipboard x11.constants x11.windows io.utf8 combinators debugger system command-line ui.render math.vectors tuples -opengl.gl ; +opengl.gl threads ; IN: ui.x11 TUPLE: x11-ui-backend ; From 6b3db4f05d33e19c73e102c83b3ab9d79f2a18ae Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 26 Nov 2007 18:20:10 -0500 Subject: [PATCH 89/90] Fix infinite recursion --- extra/xml/data/data.factor | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extra/xml/data/data.factor b/extra/xml/data/data.factor index 56e34b7db2..1850171537 100644 --- a/extra/xml/data/data.factor +++ b/extra/xml/data/data.factor @@ -65,6 +65,8 @@ M: attrs set-at M: attrs assoc-size length ; M: attrs new-assoc drop V{ } new ; +M: attrs assoc-find >r delegate r> assoc-find ; +M: attrs >alist delegate >alist ; : >attrs ( assoc -- attrs ) V{ } assoc-clone-like From 99b39e03511df0aa979cd1ad8daa0dd2f0e7561c Mon Sep 17 00:00:00 2001 From: Chris Double Date: Tue, 27 Nov 2007 12:22:33 +1300 Subject: [PATCH 90/90] Some help for pegs --- extra/peg/peg-docs.factor | 108 +++++++++++++++++++++++++++++++++++-- extra/peg/peg-tests.factor | 2 +- extra/peg/peg.factor | 66 ++++++++++++----------- 3 files changed, 141 insertions(+), 35 deletions(-) diff --git a/extra/peg/peg-docs.factor b/extra/peg/peg-docs.factor index ec4a5d304d..40743132f3 100644 --- a/extra/peg/peg-docs.factor +++ b/extra/peg/peg-docs.factor @@ -2,10 +2,112 @@ ! See http://factorcode.org/license.txt for BSD license. USING: help.markup help.syntax peg ; +HELP: parse +{ $values + { "string" "a string" } + { "parse" "a parser" } + { "result" "a or f" } +} +{ $description + "Given the input string, parse it using the given parser. The result is a object if " + "the parse was successful, otherwise it is f." } ; + HELP: token { $values - { "string" "a string" } } + { "string" "a string" } + { "parser" "a parser" } +} { $description - "A parser generator that returns a parser that matches the given string." } -{ $example "\"begin foo end\" \"begin\" token parse" "result-here" } ; + "Returns a parser that matches the given string." } ; + +HELP: range +{ $values + { "min" "a character" } + { "max" "a character" } + { "parser" "a parser" } +} +{ $description + "Returns a parser that matches a single character that lies within the range of characters given, inclusive." } +{ $example ": digit ( -- parser ) CHAR: 0 CHAR: 9 range ;" } ; + +HELP: seq +{ $values + { "seq" "a sequence of parsers" } + { "parser" "a parser" } +} +{ $description + "Returns a parser that calls all parsers in the given sequence, in order. The parser succeeds if " + "all the parsers succeed, otherwise it fails. The AST produced is a sequence of the AST produced by " + "the individual parsers." } ; + +HELP: choice +{ $values + { "seq" "a sequence of parsers" } + { "parser" "a parser" } +} +{ $description + "Returns a parser that will try all the parsers in the sequence, in order, until one succeeds. " + "The resulting AST is that produced by the successful parser." } ; + +HELP: repeat0 +{ $values + { "p1" "a parser" } + { "p2" "a parser" } +} +{ $description + "Returns a parser that parses 0 or more instances of the 'p1' parser. The AST produced is " + "an array of the AST produced by the 'p1' parser. An empty array indicates 0 instances were " + "parsed." } ; + +HELP: repeat1 +{ $values + { "p1" "a parser" } + { "p2" "a parser" } +} +{ $description + "Returns a parser that parses 1 or more instances of the 'p1' parser. The AST produced is " + "an array of the AST produced by the 'p1' parser." } ; + +HELP: optional +{ $values + { "p1" "a parser" } + { "p2" "a parser" } +} +{ $description + "Returns a parser that parses 0 or 1 instances of the 'p1' parser. The AST produced is " + "'f' if 0 instances are parsed the AST produced is 'f', otherwise it is the AST produced by 'p1'." } ; + +HELP: ensure +{ $values + { "p1" "a parser" } + { "p2" "a parser" } +} +{ $description + "Returns a parser that succeeds if the 'p1' parser succeeds but does not add anything to the " + "AST and does not move the location in the input string. This can be used for lookahead and " + "disambiguation, along with the " { $link ensure-not } " word." } +{ $example "\"0\" token ensure octal-parser" } ; + +HELP: ensure-not +{ $values + { "p1" "a parser" } + { "p2" "a parser" } +} +{ $description + "Returns a parser that succeeds if the 'p1' parser fails but does not add anything to the " + "AST and does not move the location in the input string. This can be used for lookahead and " + "disambiguation, along with the " { $link ensure } " word." } +{ $example "\"+\" token \"=\" token ensure-not \"+=\" token 3array seq" } ; + +HELP: action +{ $values + { "p1" "a parser" } + { "quot" "a quotation with stack effect ( ast -- ast )" } +} +{ $description + "Returns a parser that calls the 'p1' parser and applies the quotation to the AST resulting " + "from that parse. The result of the quotation is then used as the final AST. This can be used " + "for manipulating the parse tree to produce a AST better suited for the task at hand rather than " + "the default AST." } +{ $example "CHAR: 0 CHAR: 9 range [ to-digit ] action" } ; diff --git a/extra/peg/peg-tests.factor b/extra/peg/peg-tests.factor index 9becc81b56..7648819a8c 100644 --- a/extra/peg/peg-tests.factor +++ b/extra/peg/peg-tests.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2007 Chris Double. ! See http://factorcode.org/license.txt for BSD license. ! -USING: kernel tools.test strings namespaces arrays sequences peg ; +USING: kernel tools.test strings namespaces arrays sequences peg peg.private ; IN: temporary { 0 1 2 } [ diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor index 34c17448fb..1fb8e7860d 100644 --- a/extra/peg/peg.factor +++ b/extra/peg/peg.factor @@ -3,10 +3,14 @@ USING: kernel sequences strings namespaces math assocs shuffle vectors combinators.lib ; IN: peg -SYMBOL: ignore - TUPLE: parse-result remaining ast ; +GENERIC: parse ( state parser -- result ) + + ( remaining ast -- parse-result ) parse-result construct-boa ; @@ -20,8 +24,6 @@ TUPLE: parser id ; : init-parser ( parser -- parser ) get-next-id parser construct-boa over set-delegate ; -GENERIC: parse ( state parser -- result ) - TUPLE: token-parser symbol ; M: token-parser parse ( state parser -- result ) @@ -31,9 +33,6 @@ M: token-parser parse ( state parser -- result ) 2drop f ] if ; -: token ( string -- parser ) - token-parser construct-boa init-parser ; - TUPLE: range-parser min max ; M: range-parser parse ( state parser -- result ) @@ -48,9 +47,6 @@ M: range-parser parse ( state parser -- result ) ] if ] if ; -: range ( min max -- parser ) - range-parser construct-boa init-parser ; - TUPLE: seq-parser parsers ; : do-seq-parser ( result parser -- result ) @@ -71,9 +67,6 @@ TUPLE: seq-parser parsers ; M: seq-parser parse ( state parser -- result ) seq-parser-parsers [ V{ } clone ] dip (seq-parser) ; -: seq ( seq -- parser ) - seq-parser construct-boa init-parser ; - TUPLE: choice-parser parsers ; : (choice-parser) ( state parsers -- result ) @@ -90,9 +83,6 @@ TUPLE: choice-parser parsers ; M: choice-parser parse ( state parser -- result ) choice-parser-parsers (choice-parser) ; -: choice ( seq -- parser ) - choice-parser construct-boa init-parser ; - TUPLE: repeat0-parser p1 ; : (repeat-parser) ( parser result -- result ) @@ -115,25 +105,16 @@ M: repeat0-parser parse ( state parser -- result ) drop V{ } clone ] if* ; -: repeat0 ( parser -- parser ) - repeat0-parser construct-boa init-parser ; - TUPLE: repeat1-parser p1 ; M: repeat1-parser parse ( state parser -- result ) repeat1-parser-p1 tuck parse dup [ clone-result (repeat-parser) ] [ nip ] if ; -: repeat1 ( parser -- parser ) - repeat1-parser construct-boa init-parser ; - TUPLE: optional-parser p1 ; M: optional-parser parse ( state parser -- result ) dupd optional-parser-p1 parse swap f or ; -: optional ( parser -- parser ) - optional-parser construct-boa init-parser ; - TUPLE: ensure-parser p1 ; M: ensure-parser parse ( state parser -- result ) @@ -143,9 +124,6 @@ M: ensure-parser parse ( state parser -- result ) drop f ] if ; -: ensure ( parser -- parser ) - ensure-parser construct-boa init-parser ; - TUPLE: ensure-not-parser p1 ; M: ensure-not-parser parse ( state parser -- result ) @@ -155,9 +133,6 @@ M: ensure-not-parser parse ( state parser -- result ) ignore ] if ; -: ensure-not ( parser -- parser ) - ensure-not-parser construct-boa init-parser ; - TUPLE: action-parser p1 quot ; M: action-parser parse ( state parser -- result ) @@ -168,5 +143,34 @@ M: action-parser parse ( state parser -- result ) nip ] if ; +PRIVATE> + +: token ( string -- parser ) + token-parser construct-boa init-parser ; + +: range ( min max -- parser ) + range-parser construct-boa init-parser ; + +: seq ( seq -- parser ) + seq-parser construct-boa init-parser ; + +: choice ( seq -- parser ) + choice-parser construct-boa init-parser ; + +: repeat0 ( parser -- parser ) + repeat0-parser construct-boa init-parser ; + +: repeat1 ( parser -- parser ) + repeat1-parser construct-boa init-parser ; + +: optional ( parser -- parser ) + optional-parser construct-boa init-parser ; + +: ensure ( parser -- parser ) + ensure-parser construct-boa init-parser ; + +: ensure-not ( parser -- parser ) + ensure-not-parser construct-boa init-parser ; + : action ( parser quot -- parser ) action-parser construct-boa init-parser ;