From 2274cc9f652fb808d67cc972c449a865044c24f1 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 20 Dec 2006 00:47:32 +0000 Subject: [PATCH] 359.2, core changes svn: r5142 --- src/mred/wxs/wxs_medi.cxx | 4 +- src/mred/wxs/wxs_medi.xc | 8 +- src/mzscheme/cmdline.inc | 8 +- src/mzscheme/include/mzscheme.exp | 19 + src/mzscheme/include/mzscheme3m.exp | 19 + src/mzscheme/include/mzwin.def | 15 + src/mzscheme/include/scheme.h | 6 +- src/mzscheme/src/cstartup.inc | 5115 ++++++++++++++------------- src/mzscheme/src/error.c | 58 +- src/mzscheme/src/eval.c | 380 +- src/mzscheme/src/fun.c | 974 +++-- src/mzscheme/src/hash.c | 11 +- src/mzscheme/src/jit.c | 70 +- src/mzscheme/src/mk-uchar.ss | 2 +- src/mzscheme/src/module.c | 20 +- src/mzscheme/src/mzmark.c | 20 +- src/mzscheme/src/mzmarksrc.c | 10 +- src/mzscheme/src/network.c | 36 +- src/mzscheme/src/port.c | 258 +- src/mzscheme/src/portfun.c | 350 +- src/mzscheme/src/print.c | 2 +- src/mzscheme/src/regexp.c | 8 +- src/mzscheme/src/schemef.h | 23 +- src/mzscheme/src/schemex.h | 19 + src/mzscheme/src/schemex.inc | 19 + src/mzscheme/src/schemexm.h | 19 + src/mzscheme/src/schminc.h | 2 +- src/mzscheme/src/schpriv.h | 60 +- src/mzscheme/src/schuchar.inc | 2 +- src/mzscheme/src/schvers.h | 4 +- src/mzscheme/src/startup.inc | 76 +- src/mzscheme/src/startup.ss | 130 +- src/mzscheme/src/string.c | 2 +- src/mzscheme/src/struct.c | 312 +- src/mzscheme/src/syntax.c | 157 + src/mzscheme/src/thread.c | 48 +- src/mzscheme/src/type.c | 2 - 37 files changed, 4860 insertions(+), 3408 deletions(-) diff --git a/src/mred/wxs/wxs_medi.cxx b/src/mred/wxs/wxs_medi.cxx index 4c2d3cc407..4d26569e95 100644 --- a/src/mred/wxs/wxs_medi.cxx +++ b/src/mred/wxs/wxs_medi.cxx @@ -2143,7 +2143,7 @@ static Scheme_Object *os_wxMediaBufferInsertPort(int n, Scheme_Object *p[]) VAR_STACK_PUSH(1, x0); - x0 = (SCHEME_INPORTP(p[POFFSET+0]) ? p[POFFSET+0] : (scheme_wrong_type(METHODNAME("editor<%>","insert-port"), "input port", -1, 1, &p[POFFSET+0]), (Scheme_Object *)NULL)); + x0 = (SCHEME_INPUT_PORTP(p[POFFSET+0]) ? p[POFFSET+0] : (scheme_wrong_type(METHODNAME("editor<%>","insert-port"), "input port", -1, 1, &p[POFFSET+0]), (Scheme_Object *)NULL)); if (n > (POFFSET+1)) { x1 = WITH_VAR_STACK(unbundle_symset_fileType(p[POFFSET+1], "insert-port in editor<%>")); } else @@ -2177,7 +2177,7 @@ static Scheme_Object *os_wxMediaBufferSavePort(int n, Scheme_Object *p[]) VAR_STACK_PUSH(1, x0); - x0 = (SCHEME_OUTPORTP(p[POFFSET+0]) ? p[POFFSET+0] : (scheme_wrong_type(METHODNAME("editor<%>","save-port"), "output port", -1, 1, &p[POFFSET+0]), (Scheme_Object *)NULL)); + x0 = (SCHEME_OUTPUT_PORTP(p[POFFSET+0]) ? p[POFFSET+0] : (scheme_wrong_type(METHODNAME("editor<%>","save-port"), "output port", -1, 1, &p[POFFSET+0]), (Scheme_Object *)NULL)); if (n > (POFFSET+1)) { x1 = WITH_VAR_STACK(unbundle_symset_fileType(p[POFFSET+1], "save-port in editor<%>")); } else diff --git a/src/mred/wxs/wxs_medi.xc b/src/mred/wxs/wxs_medi.xc index e29f7c8db7..a1754a2251 100644 --- a/src/mred/wxs/wxs_medi.xc +++ b/src/mred/wxs/wxs_medi.xc @@ -49,10 +49,10 @@ static void *wxbDCToBuffer(wxMediaBuffer *b, double x, double y) @MACRO rFALSE = return FALSE; @MACRO rZERO = return 0; -@MACRO ubiPort[who] = (SCHEME_INPORTP({x}) ? {x} : (scheme_wrong_type(METHODNAME("editor<%>",), "input port", -1, 1, &{x}), (Scheme_Object *)NULL)) -@MACRO ciPort = SCHEME_INPORTP({x}) -@MACRO uboPort[who] = (SCHEME_OUTPORTP({x}) ? {x} : (scheme_wrong_type(METHODNAME("editor<%>",), "output port", -1, 1, &{x}), (Scheme_Object *)NULL)) -@MACRO coPort = SCHEME_OUTPORTP({x}) +@MACRO ubiPort[who] = (SCHEME_INPUT_PORTP({x}) ? {x} : (scheme_wrong_type(METHODNAME("editor<%>",), "input port", -1, 1, &{x}), (Scheme_Object *)NULL)) +@MACRO ciPort = SCHEME_INPUT_PORTP({x}) +@MACRO uboPort[who] = (SCHEME_OUTPUT_PORTP({x}) ? {x} : (scheme_wrong_type(METHODNAME("editor<%>",), "output port", -1, 1, &{x}), (Scheme_Object *)NULL)) +@MACRO coPort = SCHEME_OUTPUT_PORTP({x}) @INCLUDE wxs_eds.xci diff --git a/src/mzscheme/cmdline.inc b/src/mzscheme/cmdline.inc index b063dc1535..91387502a7 100644 --- a/src/mzscheme/cmdline.inc +++ b/src/mzscheme/cmdline.inc @@ -312,7 +312,7 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl) save = p->error_buf; p->error_buf = &newbuf; if (!scheme_setjmp(newbuf)) - scheme_eval_string_all(fa->evals_and_loads[i], fa->global_env, 0); + scheme_eval_string_all_with_prompt(fa->evals_and_loads[i], fa->global_env, 0); else { exit_val = 1; p->error_buf = save; @@ -327,11 +327,11 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl) if (!scheme_setjmp(newbuf)) { Scheme_Object *a[1], *m, *fn; - m = scheme_eval_string("main", fa->global_env); + m = scheme_eval_string_with_prompt("main", fa->global_env); fn = scheme_make_locale_string(fa->evals_and_loads[i]); SCHEME_SET_CHAR_STRING_IMMUTABLE(fn); a[0] = scheme_make_pair(fn, scheme_vector_to_list(fa->main_args)); - (void)scheme_apply(m, 1, a); + (void)scheme_apply_multi_with_prompt(m, 1, a); } else { exit_val = 1; p->error_buf = save; @@ -358,7 +358,7 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl) if (SAME_OBJ(f, SCHEME_MULTIPLE_VALUES) && (scheme_multiple_count == 2)) { f = scheme_multiple_array[0]; - _scheme_apply(f, 0, NULL); + scheme_apply_multi_with_prompt(f, 0, NULL); } } else { exit_val = 1; diff --git a/src/mzscheme/include/mzscheme.exp b/src/mzscheme/include/mzscheme.exp index f5dbe0cf4b..2ef2e36da8 100644 --- a/src/mzscheme/include/mzscheme.exp +++ b/src/mzscheme/include/mzscheme.exp @@ -106,6 +106,8 @@ scheme_uchar_folds scheme_uchar_combining_classes scheme_eval scheme_eval_multi +scheme_eval_with_prompt +scheme_eval_multi_with_prompt scheme_eval_compiled scheme_eval_compiled_multi _scheme_eval_compiled @@ -115,13 +117,24 @@ scheme_apply_multi scheme_apply_no_eb scheme_apply_multi_no_eb scheme_apply_to_list +scheme_apply_with_prompt +scheme_apply_multi_with_prompt +_scheme_apply_with_prompt +_scheme_apply_multi_with_prompt scheme_eval_string scheme_eval_string_multi scheme_eval_string_all +scheme_eval_string_with_prompt +scheme_eval_string_multi_with_prompt +scheme_eval_string_all_with_prompt _scheme_apply_known_prim_closure _scheme_apply_known_prim_closure_multi _scheme_apply_prim_closure _scheme_apply_prim_closure_multi +scheme_call_with_prompt +scheme_call_with_prompt_multi +_scheme_call_with_prompt +_scheme_call_with_prompt_multi scheme_values scheme_check_one_value scheme_tail_apply @@ -179,6 +192,7 @@ scheme_make_hash_table scheme_make_hash_table_equal scheme_hash_set scheme_hash_get +scheme_eq_hash_get scheme_hash_table_equal scheme_is_hash_table_equal scheme_clone_hash_table @@ -348,6 +362,11 @@ scheme_close_output_port scheme_write_special scheme_write_special_nonblock scheme_make_write_evt +scheme_port_record +scheme_input_port_record +scheme_output_port_record +scheme_is_input_port +scheme_is_output_port scheme_make_port_type scheme_make_input_port scheme_make_output_port diff --git a/src/mzscheme/include/mzscheme3m.exp b/src/mzscheme/include/mzscheme3m.exp index 50d424098a..ea73106cf5 100644 --- a/src/mzscheme/include/mzscheme3m.exp +++ b/src/mzscheme/include/mzscheme3m.exp @@ -106,6 +106,8 @@ scheme_uchar_folds scheme_uchar_combining_classes scheme_eval scheme_eval_multi +scheme_eval_with_prompt +scheme_eval_multi_with_prompt scheme_eval_compiled scheme_eval_compiled_multi _scheme_eval_compiled @@ -115,13 +117,24 @@ scheme_apply_multi scheme_apply_no_eb scheme_apply_multi_no_eb scheme_apply_to_list +scheme_apply_with_prompt +scheme_apply_multi_with_prompt +_scheme_apply_with_prompt +_scheme_apply_multi_with_prompt scheme_eval_string scheme_eval_string_multi scheme_eval_string_all +scheme_eval_string_with_prompt +scheme_eval_string_multi_with_prompt +scheme_eval_string_all_with_prompt _scheme_apply_known_prim_closure _scheme_apply_known_prim_closure_multi _scheme_apply_prim_closure _scheme_apply_prim_closure_multi +scheme_call_with_prompt +scheme_call_with_prompt_multi +_scheme_call_with_prompt +_scheme_call_with_prompt_multi scheme_values scheme_check_one_value scheme_tail_apply @@ -186,6 +199,7 @@ scheme_make_hash_table scheme_make_hash_table_equal scheme_hash_set scheme_hash_get +scheme_eq_hash_get scheme_hash_table_equal scheme_is_hash_table_equal scheme_clone_hash_table @@ -355,6 +369,11 @@ scheme_close_output_port scheme_write_special scheme_write_special_nonblock scheme_make_write_evt +scheme_port_record +scheme_input_port_record +scheme_output_port_record +scheme_is_input_port +scheme_is_output_port scheme_make_port_type scheme_make_input_port scheme_make_output_port diff --git a/src/mzscheme/include/mzwin.def b/src/mzscheme/include/mzwin.def index 93fea36585..07e523ace3 100644 --- a/src/mzscheme/include/mzwin.def +++ b/src/mzscheme/include/mzwin.def @@ -108,6 +108,8 @@ EXPORTS scheme_uchar_combining_classes scheme_eval scheme_eval_multi + scheme_eval_with_prompt + scheme_eval_multi_with_prompt scheme_eval_compiled scheme_eval_compiled_multi scheme_apply @@ -115,9 +117,16 @@ EXPORTS scheme_apply_no_eb scheme_apply_multi_no_eb scheme_apply_to_list + scheme_apply_with_prompt + scheme_apply_multi_with_prompt scheme_eval_string scheme_eval_string_multi scheme_eval_string_all + scheme_eval_string_with_prompt + scheme_eval_string_multi_with_prompt + scheme_eval_string_all_with_prompt + scheme_call_with_prompt + scheme_call_with_prompt_multi scheme_values scheme_check_one_value scheme_tail_apply @@ -171,6 +180,7 @@ EXPORTS scheme_make_hash_table_equal scheme_hash_set scheme_hash_get + scheme_eq_hash_get scheme_hash_table_equal scheme_is_hash_table_equal scheme_clone_hash_table @@ -340,6 +350,11 @@ EXPORTS scheme_write_special scheme_write_special_nonblock scheme_make_write_evt + scheme_port_record + scheme_input_port_record + scheme_output_port_record + scheme_is_input_port + scheme_is_output_port scheme_make_port_type scheme_make_input_port scheme_make_output_port diff --git a/src/mzscheme/include/scheme.h b/src/mzscheme/include/scheme.h index b07ab4872b..2f47e3daa8 100644 --- a/src/mzscheme/include/scheme.h +++ b/src/mzscheme/include/scheme.h @@ -441,6 +441,9 @@ typedef void (*Scheme_Type_Printer)(Scheme_Object *v, int for_display, Scheme_Pr #define SCHEME_INPORTP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_input_port_type) #define SCHEME_OUTPORTP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_output_port_type) +#define SCHEME_INPUT_PORTP(obj) scheme_is_input_port(obj) +#define SCHEME_OUTPUT_PORTP(obj) scheme_is_output_port(obj) + #define SCHEME_THREADP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_thread_type) #define SCHEME_CUSTODIANP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_custodian_type) #define SCHEME_SEMAP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_sema_type) @@ -936,7 +939,6 @@ typedef struct Scheme_Thread { struct Scheme_Thread **cont_mark_stack_owner; struct Scheme_Cont_Mark *cont_mark_stack_swapped; - struct Scheme_Prompt *barrier_prompt; /* a pseudo-prompt */ struct Scheme_Prompt *meta_prompt; /* a pseudo-prompt */ struct Scheme_Meta_Continuation *meta_continuation; @@ -957,6 +959,7 @@ typedef struct Scheme_Thread { Scheme_Jumpup_Buf jmpup_buf; /* For jumping back to this thread */ struct Scheme_Dynamic_Wind *dw; + int next_meta; /* amount to move forward in the meta-continuaiton chain, starting with dw */ int running; Scheme_Object *suspended_box; /* contains pointer to thread when it's suspended */ @@ -1087,7 +1090,6 @@ enum { MZCONFIG_EXIT_HANDLER, - MZCONFIG_EXN_HANDLER, MZCONFIG_INIT_EXN_HANDLER, MZCONFIG_EVAL_HANDLER, diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index e4c693438f..a501b208ca 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,5 +1,5 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,54,252,225,7,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,54,252,225,7,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,65,35,37,115,116, 120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,99,159,36,16,16,30, 3,2,2,71,105,100,101,110,116,105,102,105,101,114,63,4,254,1,30,5,2, @@ -99,15 +99,15 @@ EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,134,252,215,18,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,135,252,241,18,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,71,35,37,113,113, 45,97,110,100,45,111,114,1,29,2,11,11,10,10,10,34,80,158,34,34,20, 99,159,34,16,1,30,3,2,2,69,113,113,45,97,112,112,101,110,100,4,254, -1,16,0,11,11,16,1,2,4,35,11,16,6,63,97,110,100,5,62,111,114, -6,66,108,101,116,114,101,99,7,64,108,101,116,42,8,70,113,117,97,115,105, -113,117,111,116,101,9,63,108,101,116,10,16,6,11,11,11,11,11,11,16,6, +1,16,0,11,11,16,1,2,4,35,11,16,6,66,108,101,116,114,101,99,5, +62,111,114,6,64,108,101,116,42,7,70,113,117,97,115,105,113,117,111,116,101, +8,63,97,110,100,9,63,108,101,116,10,16,6,11,11,11,11,11,11,16,6, 2,5,2,6,2,7,2,8,2,9,2,10,34,40,96,16,5,95,2,10,2, -8,2,7,87,98,83,159,34,93,80,159,34,52,35,89,162,8,64,38,46,65, +7,2,5,87,98,83,159,34,93,80,159,34,52,35,89,162,8,64,38,46,65, 99,104,101,99,107,11,223,0,28,248,22,63,196,12,27,28,194,248,22,83,197, 248,80,158,36,34,248,80,158,37,34,248,22,58,199,28,28,248,22,63,198,11, 28,249,22,228,194,248,22,58,200,10,27,248,22,59,199,28,248,22,63,193,11, @@ -176,164 +176,165 @@ 31,2,25,69,115,116,120,45,110,117,108,108,63,32,10,30,33,2,25,69,115, 116,120,45,108,105,115,116,63,34,8,30,35,2,25,69,115,116,120,45,62,108, 105,115,116,36,4,16,7,18,97,70,108,97,109,98,100,97,45,115,116,120,37, -39,97,37,10,34,11,16,14,2,4,2,2,2,6,2,2,2,9,2,2,2, -8,2,2,2,7,2,2,2,5,2,2,2,10,2,2,98,36,10,35,11,93, +39,97,37,10,34,11,16,14,2,7,2,2,2,6,2,2,2,4,2,2,2, +5,2,2,2,8,2,2,2,9,2,2,2,10,2,2,98,36,10,35,11,93, 159,2,25,9,11,16,0,96,35,8,254,1,11,16,0,18,16,2,158,73,108, -101,116,114,101,99,45,118,97,108,117,101,115,38,39,40,18,103,2,38,47,37, -36,35,16,6,46,11,2,37,77,108,101,116,114,101,99,45,118,97,108,117,101, -115,45,115,116,120,39,3,1,7,101,110,118,50,53,48,50,40,2,40,16,10, -45,11,63,115,116,120,41,66,110,97,109,101,100,63,42,65,115,116,97,114,63, -43,66,116,97,114,103,101,116,44,3,1,7,101,110,118,50,53,48,52,45,2, -45,2,45,2,45,16,8,44,11,2,19,2,13,2,20,3,1,7,101,110,118, -50,53,48,55,46,3,1,7,101,110,118,50,53,48,54,47,3,1,7,101,110, -118,50,53,48,53,48,16,4,43,11,64,110,97,109,101,49,3,1,7,101,110, -118,50,53,49,51,50,16,6,42,11,68,98,105,110,100,105,110,103,115,51,64, -98,111,100,121,52,3,1,7,101,110,118,50,53,49,53,53,2,53,16,4,41, -11,72,110,101,119,45,98,105,110,100,105,110,103,115,54,3,1,7,101,110,118, -50,53,49,54,55,18,16,2,158,66,108,97,109,98,100,97,56,47,48,18,100, -70,108,101,116,45,118,97,108,117,101,115,57,51,37,36,35,46,16,4,50,11, -2,21,3,1,7,101,110,118,50,53,48,51,58,16,4,49,11,2,41,3,1, -7,101,110,118,50,53,50,55,59,18,100,71,108,101,116,42,45,118,97,108,117, -101,115,60,53,37,36,35,46,50,16,4,52,11,2,41,3,1,7,101,110,118, -50,53,50,56,61,18,100,2,38,55,37,36,35,46,50,16,4,54,11,2,41, -3,1,7,101,110,118,50,53,50,57,62,11,16,5,93,2,9,87,97,83,159, -34,93,80,159,34,57,35,89,162,34,39,53,62,113,113,63,223,0,28,248,80, -158,35,35,197,27,248,80,158,36,38,198,28,28,248,80,158,36,34,193,28,249, -22,230,194,197,248,80,158,36,39,198,11,11,27,248,80,158,37,36,199,87,94, -28,28,248,80,158,37,35,193,248,22,252,17,2,248,80,158,38,37,248,80,158, -39,36,195,10,251,22,252,47,2,67,117,110,113,117,111,116,101,64,6,30,30, -101,120,112,101,99,116,115,32,101,120,97,99,116,108,121,32,111,110,101,32,101, -120,112,114,101,115,115,105,111,110,65,199,202,12,28,248,22,193,200,248,80,158, -37,38,193,252,80,159,41,58,35,200,201,202,203,248,22,178,205,28,28,248,80, -158,36,34,193,28,249,22,230,194,20,15,159,37,43,40,248,80,158,36,39,198, -11,11,252,80,159,40,58,35,199,200,201,202,248,22,177,204,28,28,248,80,158, -36,34,193,28,249,22,230,194,198,248,80,158,36,39,198,11,11,251,22,252,47, -2,76,117,110,113,117,111,116,101,45,115,112,108,105,99,105,110,103,66,6,33, -33,105,110,118,97,108,105,100,32,99,111,110,116,101,120,116,32,119,105,116,104, -105,110,32,113,117,97,115,105,113,117,111,116,101,67,198,201,28,28,248,80,158, -36,35,193,28,248,80,158,36,34,248,80,158,37,38,194,28,249,22,230,248,80, -158,38,38,195,198,248,80,158,36,39,193,11,11,11,27,248,80,158,37,36,194, -87,94,28,28,248,80,158,37,35,193,248,22,252,17,2,248,80,158,38,37,248, -80,158,39,36,195,10,251,22,252,47,2,2,64,6,30,30,101,120,112,101,99, -116,115,32,101,120,97,99,116,108,121,32,111,110,101,32,101,120,112,114,101,115, -115,105,111,110,68,199,202,12,27,248,80,158,38,38,194,27,248,80,158,39,36, -201,27,252,80,159,44,57,35,203,204,205,248,80,158,45,36,23,15,23,15,28, -248,22,193,203,27,28,249,22,252,19,2,195,196,28,248,80,158,41,37,194,20, -15,159,40,37,40,249,22,65,20,15,159,42,38,40,195,193,250,22,65,20,15, -159,43,44,40,198,195,27,252,80,159,45,58,35,204,205,206,201,248,22,178,23, -17,28,28,249,22,252,19,2,195,196,249,22,252,19,2,194,198,11,202,27,27, -20,15,159,42,45,40,27,28,249,22,252,19,2,197,201,28,248,80,158,44,37, -196,20,15,159,43,37,40,249,22,65,20,15,159,45,38,40,197,195,28,248,80, -158,44,37,193,249,22,65,20,15,159,45,39,40,195,28,28,248,22,56,193,28, -249,22,230,20,15,159,45,40,40,248,22,58,195,10,249,22,230,20,15,159,45, -41,40,248,22,58,195,11,250,22,67,248,22,58,196,196,248,22,59,196,250,22, -65,20,15,159,46,42,40,196,195,27,28,249,22,252,19,2,197,198,28,248,80, -158,43,37,196,20,15,159,42,37,40,249,22,65,20,15,159,44,38,40,197,195, -28,248,80,158,43,37,193,249,22,65,20,15,159,44,39,40,195,28,28,248,22, -56,193,28,249,22,230,20,15,159,44,40,40,248,22,58,195,10,249,22,230,20, -15,159,44,41,40,248,22,58,195,11,250,22,67,248,22,58,196,196,248,22,59, -196,250,22,65,20,15,159,45,42,40,196,195,252,80,159,40,58,35,199,200,201, -202,203,28,28,248,22,213,197,248,22,252,229,1,248,22,217,198,11,27,248,22, -252,236,1,248,22,217,199,27,252,80,159,41,57,35,200,201,202,198,204,28,249, -22,252,19,2,195,194,198,249,22,65,20,15,159,38,46,40,194,28,248,22,213, -197,28,248,22,113,248,22,217,198,27,248,22,114,248,22,217,199,27,252,80,159, -41,57,35,200,201,202,198,204,28,249,22,252,19,2,195,194,198,249,22,65,20, -15,159,38,47,40,194,196,196,83,159,34,93,80,159,34,58,35,89,162,8,36, -39,50,67,113,113,45,108,105,115,116,69,223,0,27,248,80,158,36,38,198,27, -248,80,158,37,36,199,27,252,80,159,42,57,35,201,202,203,199,205,27,252,80, -159,43,57,35,202,203,204,199,206,28,28,249,22,252,19,2,195,197,249,22,252, -19,2,194,196,11,200,27,28,249,22,252,19,2,196,198,28,248,80,158,40,37, -195,20,15,159,39,37,40,249,22,65,20,15,159,41,38,40,196,194,27,28,249, -22,252,19,2,196,198,28,248,80,158,41,37,195,20,15,159,40,37,40,249,22, -65,20,15,159,42,38,40,196,194,28,248,80,158,41,37,193,249,22,65,20,15, -159,42,39,40,195,28,28,248,22,56,193,28,249,22,230,20,15,159,42,40,40, -248,22,58,195,10,249,22,230,20,15,159,42,41,40,248,22,58,195,11,250,22, -67,248,22,58,196,196,248,22,59,196,250,22,65,20,15,159,43,42,40,196,195, -83,159,34,93,80,159,34,56,35,89,162,8,36,36,41,70,97,112,112,108,121, -45,99,111,110,115,70,223,0,28,248,80,158,35,37,195,249,22,65,20,15,159, -36,39,40,195,28,28,248,22,56,195,28,249,22,230,20,15,159,36,40,40,248, -22,58,197,10,249,22,230,20,15,159,36,41,40,248,22,58,197,11,250,22,67, -248,22,58,198,196,248,22,59,198,250,22,65,20,15,159,37,42,40,196,197,83, -159,34,93,80,159,34,55,35,89,162,8,36,36,39,66,110,111,114,109,97,108, -71,223,0,28,249,22,252,19,2,195,196,28,248,80,158,35,37,194,20,15,159, -34,37,40,249,22,65,20,15,159,36,38,40,195,193,27,20,15,159,35,34,40, -27,20,15,159,36,35,40,27,20,15,159,37,36,40,89,162,8,36,35,50,9, -226,3,0,1,2,87,94,28,248,80,158,38,34,197,250,22,252,47,2,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,72,199,12,27,28,248,80,158,39, -35,248,80,158,40,36,199,28,248,80,158,39,37,248,80,158,40,36,248,80,158, -41,36,200,248,80,158,39,38,248,80,158,40,36,199,250,22,252,47,2,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,73,200,250,22,252,47,2,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,74,200,250,22,216,196,27,252,80, -159,47,57,35,206,203,204,201,34,28,249,22,252,19,2,194,198,28,248,80,158, -43,37,193,20,15,159,42,37,40,249,22,65,20,15,159,44,38,40,194,192,200, -37,20,99,159,38,16,6,30,75,2,25,71,105,100,101,110,116,105,102,105,101, -114,63,76,2,2,29,2,27,2,31,2,24,2,33,16,14,18,97,64,104,101, -114,101,77,56,37,36,35,18,16,2,158,2,64,56,57,18,16,2,158,2,66, -56,58,18,100,9,8,28,37,36,35,16,8,8,27,11,2,77,71,117,110,113, -117,111,116,101,45,115,116,120,78,1,20,117,110,113,117,111,116,101,45,115,112, -108,105,99,105,110,103,45,115,116,120,79,3,1,7,101,110,118,50,53,51,49, -80,2,80,2,80,16,4,8,26,11,67,105,110,45,102,111,114,109,81,3,1, -7,101,110,118,50,53,51,50,82,16,6,59,11,61,120,83,63,111,108,100,84, -3,1,7,101,110,118,50,53,51,52,85,2,85,18,16,2,158,65,113,117,111, -116,101,86,8,28,8,29,18,100,64,108,105,115,116,87,8,31,37,36,35,8, -27,8,26,16,6,8,30,11,61,97,88,61,100,89,3,1,7,101,110,118,50, -53,51,53,90,2,90,18,16,2,158,2,87,8,31,8,32,18,16,2,158,65, -108,105,115,116,42,91,8,31,8,33,18,8,33,18,104,2,9,8,39,37,36, -35,8,27,8,26,16,8,8,38,11,64,102,111,114,109,92,2,71,2,70,3, -1,7,101,110,118,50,53,51,51,93,2,93,2,93,16,4,8,37,11,2,63, -3,1,7,101,110,118,50,53,51,54,94,16,6,8,36,11,2,83,65,108,101, -118,101,108,95,3,1,7,101,110,118,50,53,51,55,96,2,96,16,4,8,35, -11,2,69,3,1,7,101,110,118,50,53,51,56,97,16,4,8,34,11,65,102, -105,114,115,116,98,3,1,7,101,110,118,50,53,52,52,99,18,106,2,4,8, -42,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,8,34,16,4,8, -41,11,64,114,101,115,116,100,3,1,7,101,110,118,50,53,52,55,101,16,8, -8,40,11,64,117,113,115,100,102,65,111,108,100,45,108,103,61,108,104,3,1, -7,101,110,118,50,53,52,57,105,2,105,2,105,18,158,94,107,2,86,8,44, -37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,8,34,8,41,8,40, -16,4,8,43,11,65,114,101,115,116,120,106,3,1,7,101,110,118,50,53,53, -49,107,158,2,66,8,44,8,44,18,105,72,108,105,115,116,45,62,118,101,99, -116,111,114,108,8,47,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35, -16,4,8,46,11,2,104,3,1,7,101,110,118,50,53,53,50,109,16,4,8, -45,11,62,108,50,110,3,1,7,101,110,118,50,53,53,51,111,18,105,63,98, -111,120,112,8,50,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,16, -4,8,49,11,61,118,113,3,1,7,101,110,118,50,53,53,52,114,16,4,8, -48,11,62,113,118,115,3,1,7,101,110,118,50,53,53,53,116,11,16,5,93, -2,5,27,20,15,159,35,34,39,89,162,34,35,48,9,224,1,0,87,94,28, -248,80,158,36,34,195,12,250,22,252,47,2,11,6,10,10,98,97,100,32,115, -121,110,116,97,120,117,197,27,248,80,158,37,35,196,28,248,80,158,37,36,193, -20,15,159,36,35,39,28,28,248,80,158,37,37,193,248,80,158,37,36,248,80, -158,38,35,194,10,248,80,158,37,38,193,250,22,216,196,251,22,65,20,15,159, -43,36,39,248,80,158,44,38,200,249,22,57,20,15,159,45,37,39,248,80,158, -46,35,202,20,15,159,43,38,39,198,35,20,99,159,34,16,5,2,33,2,27, -2,31,2,29,2,24,16,5,18,16,2,158,2,77,56,8,51,18,100,10,8, -55,37,36,35,16,4,8,54,11,2,77,3,1,7,101,110,118,50,53,53,55, -118,16,4,8,53,11,2,83,3,1,7,101,110,118,50,53,53,56,119,16,4, -8,52,11,61,101,120,3,1,7,101,110,118,50,53,53,57,121,18,16,2,158, -62,105,102,122,8,55,8,56,18,16,2,158,2,5,8,55,8,57,18,158,11, -8,55,11,16,5,93,2,6,27,20,15,159,35,34,40,89,162,34,35,51,9, -224,1,0,87,94,28,248,80,158,36,34,195,250,22,252,47,2,11,6,10,10, -98,97,100,32,115,121,110,116,97,120,123,197,12,27,248,80,158,37,35,196,28, -248,80,158,37,36,193,20,15,159,36,35,40,28,28,248,80,158,37,37,193,248, -80,158,37,36,248,80,158,38,35,194,11,248,80,158,37,38,193,28,248,80,158, -37,39,193,250,22,216,196,250,22,65,20,15,159,42,36,40,248,22,65,249,22, -65,67,111,114,45,112,97,114,116,124,248,80,158,46,38,202,251,22,65,20,15, -159,46,37,40,2,124,2,124,249,22,57,20,15,159,48,38,40,248,80,158,49, -35,205,198,250,22,252,47,2,11,6,10,10,98,97,100,32,115,121,110,116,97, -120,125,198,35,20,99,159,34,16,6,2,75,2,27,2,31,2,29,2,24,2, -33,16,5,18,8,51,18,100,11,8,61,37,36,35,16,4,8,60,11,2,77, -3,1,7,101,110,118,50,53,54,49,126,16,4,8,59,11,2,83,3,1,7, -101,110,118,50,53,54,50,127,16,4,8,58,11,2,120,3,1,7,101,110,118, -50,53,54,51,128,18,101,2,10,8,63,37,36,35,8,60,8,59,8,58,16, -4,8,62,11,63,116,109,112,129,3,1,7,101,110,118,50,53,54,52,130,18, -16,2,158,2,122,8,63,8,64,18,16,2,158,2,6,8,63,8,65,11,93, -83,159,34,93,80,159,34,34,35,32,131,89,162,34,36,39,2,4,222,28,248, -22,64,193,249,22,71,194,195,250,22,252,48,2,2,66,6,11,11,112,114,111, -112,101,114,32,108,105,115,116,132,195,93,68,35,37,107,101,114,110,101,108,133, -94,2,25,2,133,0}; - EVAL_ONE_SIZED_STR((char *)expr, 4835); +101,116,114,101,99,45,118,97,108,117,101,115,38,39,40,18,104,2,38,48,37, +36,35,16,6,47,11,2,37,77,108,101,116,114,101,99,45,118,97,108,117,101, +115,45,115,116,120,39,3,1,7,101,110,118,50,53,48,52,40,2,40,16,10, +46,11,63,115,116,120,41,66,110,97,109,101,100,63,42,65,115,116,97,114,63, +43,66,116,97,114,103,101,116,44,3,1,7,101,110,118,50,53,48,54,45,2, +45,2,45,2,45,16,8,45,11,2,19,2,13,2,20,3,1,7,101,110,118, +50,53,48,57,46,3,1,7,101,110,118,50,53,48,56,47,3,1,7,101,110, +118,50,53,48,55,48,16,8,44,11,2,20,2,13,2,19,3,1,7,101,110, +118,50,53,49,48,49,2,49,2,49,16,4,43,11,64,110,97,109,101,50,3, +1,7,101,110,118,50,53,49,53,51,16,6,42,11,68,98,105,110,100,105,110, +103,115,52,64,98,111,100,121,53,3,1,7,101,110,118,50,53,49,55,54,2, +54,16,4,41,11,72,110,101,119,45,98,105,110,100,105,110,103,115,55,3,1, +7,101,110,118,50,53,49,56,56,18,16,2,158,66,108,97,109,98,100,97,57, +48,49,18,100,70,108,101,116,45,118,97,108,117,101,115,58,52,37,36,35,47, +16,4,51,11,2,21,3,1,7,101,110,118,50,53,48,53,59,16,4,50,11, +2,41,3,1,7,101,110,118,50,53,50,57,60,18,100,71,108,101,116,42,45, +118,97,108,117,101,115,61,54,37,36,35,47,51,16,4,53,11,2,41,3,1, +7,101,110,118,50,53,51,48,62,18,100,2,38,56,37,36,35,47,51,16,4, +55,11,2,41,3,1,7,101,110,118,50,53,51,49,63,11,16,5,93,2,8, +87,97,83,159,34,93,80,159,34,57,35,89,162,34,39,53,62,113,113,64,223, +0,28,248,80,158,35,35,197,27,248,80,158,36,38,198,28,28,248,80,158,36, +34,193,28,249,22,230,194,197,248,80,158,36,39,198,11,11,27,248,80,158,37, +36,199,87,94,28,28,248,80,158,37,35,193,248,22,252,17,2,248,80,158,38, +37,248,80,158,39,36,195,10,251,22,252,47,2,67,117,110,113,117,111,116,101, +65,6,30,30,101,120,112,101,99,116,115,32,101,120,97,99,116,108,121,32,111, +110,101,32,101,120,112,114,101,115,115,105,111,110,66,199,202,12,28,248,22,193, +200,248,80,158,37,38,193,252,80,159,41,58,35,200,201,202,203,248,22,178,205, +28,28,248,80,158,36,34,193,28,249,22,230,194,20,15,159,37,43,40,248,80, +158,36,39,198,11,11,252,80,159,40,58,35,199,200,201,202,248,22,177,204,28, +28,248,80,158,36,34,193,28,249,22,230,194,198,248,80,158,36,39,198,11,11, +251,22,252,47,2,76,117,110,113,117,111,116,101,45,115,112,108,105,99,105,110, +103,67,6,33,33,105,110,118,97,108,105,100,32,99,111,110,116,101,120,116,32, +119,105,116,104,105,110,32,113,117,97,115,105,113,117,111,116,101,68,198,201,28, +28,248,80,158,36,35,193,28,248,80,158,36,34,248,80,158,37,38,194,28,249, +22,230,248,80,158,38,38,195,198,248,80,158,36,39,193,11,11,11,27,248,80, +158,37,36,194,87,94,28,28,248,80,158,37,35,193,248,22,252,17,2,248,80, +158,38,37,248,80,158,39,36,195,10,251,22,252,47,2,2,65,6,30,30,101, +120,112,101,99,116,115,32,101,120,97,99,116,108,121,32,111,110,101,32,101,120, +112,114,101,115,115,105,111,110,69,199,202,12,27,248,80,158,38,38,194,27,248, +80,158,39,36,201,27,252,80,159,44,57,35,203,204,205,248,80,158,45,36,23, +15,23,15,28,248,22,193,203,27,28,249,22,252,19,2,195,196,28,248,80,158, +41,37,194,20,15,159,40,37,40,249,22,65,20,15,159,42,38,40,195,193,250, +22,65,20,15,159,43,44,40,198,195,27,252,80,159,45,58,35,204,205,206,201, +248,22,178,23,17,28,28,249,22,252,19,2,195,196,249,22,252,19,2,194,198, +11,202,27,27,20,15,159,42,45,40,27,28,249,22,252,19,2,197,201,28,248, +80,158,44,37,196,20,15,159,43,37,40,249,22,65,20,15,159,45,38,40,197, +195,28,248,80,158,44,37,193,249,22,65,20,15,159,45,39,40,195,28,28,248, +22,56,193,28,249,22,230,20,15,159,45,40,40,248,22,58,195,10,249,22,230, +20,15,159,45,41,40,248,22,58,195,11,250,22,67,248,22,58,196,196,248,22, +59,196,250,22,65,20,15,159,46,42,40,196,195,27,28,249,22,252,19,2,197, +198,28,248,80,158,43,37,196,20,15,159,42,37,40,249,22,65,20,15,159,44, +38,40,197,195,28,248,80,158,43,37,193,249,22,65,20,15,159,44,39,40,195, +28,28,248,22,56,193,28,249,22,230,20,15,159,44,40,40,248,22,58,195,10, +249,22,230,20,15,159,44,41,40,248,22,58,195,11,250,22,67,248,22,58,196, +196,248,22,59,196,250,22,65,20,15,159,45,42,40,196,195,252,80,159,40,58, +35,199,200,201,202,203,28,28,248,22,213,197,248,22,252,229,1,248,22,217,198, +11,27,248,22,252,236,1,248,22,217,199,27,252,80,159,41,57,35,200,201,202, +198,204,28,249,22,252,19,2,195,194,198,249,22,65,20,15,159,38,46,40,194, +28,248,22,213,197,28,248,22,113,248,22,217,198,27,248,22,114,248,22,217,199, +27,252,80,159,41,57,35,200,201,202,198,204,28,249,22,252,19,2,195,194,198, +249,22,65,20,15,159,38,47,40,194,196,196,83,159,34,93,80,159,34,58,35, +89,162,8,36,39,50,67,113,113,45,108,105,115,116,70,223,0,27,248,80,158, +36,38,198,27,248,80,158,37,36,199,27,252,80,159,42,57,35,201,202,203,199, +205,27,252,80,159,43,57,35,202,203,204,199,206,28,28,249,22,252,19,2,195, +197,249,22,252,19,2,194,196,11,200,27,28,249,22,252,19,2,196,198,28,248, +80,158,40,37,195,20,15,159,39,37,40,249,22,65,20,15,159,41,38,40,196, +194,27,28,249,22,252,19,2,196,198,28,248,80,158,41,37,195,20,15,159,40, +37,40,249,22,65,20,15,159,42,38,40,196,194,28,248,80,158,41,37,193,249, +22,65,20,15,159,42,39,40,195,28,28,248,22,56,193,28,249,22,230,20,15, +159,42,40,40,248,22,58,195,10,249,22,230,20,15,159,42,41,40,248,22,58, +195,11,250,22,67,248,22,58,196,196,248,22,59,196,250,22,65,20,15,159,43, +42,40,196,195,83,159,34,93,80,159,34,56,35,89,162,8,36,36,41,70,97, +112,112,108,121,45,99,111,110,115,71,223,0,28,248,80,158,35,37,195,249,22, +65,20,15,159,36,39,40,195,28,28,248,22,56,195,28,249,22,230,20,15,159, +36,40,40,248,22,58,197,10,249,22,230,20,15,159,36,41,40,248,22,58,197, +11,250,22,67,248,22,58,198,196,248,22,59,198,250,22,65,20,15,159,37,42, +40,196,197,83,159,34,93,80,159,34,55,35,89,162,8,36,36,39,66,110,111, +114,109,97,108,72,223,0,28,249,22,252,19,2,195,196,28,248,80,158,35,37, +194,20,15,159,34,37,40,249,22,65,20,15,159,36,38,40,195,193,27,20,15, +159,35,34,40,27,20,15,159,36,35,40,27,20,15,159,37,36,40,89,162,8, +36,35,50,9,226,3,0,1,2,87,94,28,248,80,158,38,34,197,250,22,252, +47,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,73,199,12,27,28, +248,80,158,39,35,248,80,158,40,36,199,28,248,80,158,39,37,248,80,158,40, +36,248,80,158,41,36,200,248,80,158,39,38,248,80,158,40,36,199,250,22,252, +47,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,74,200,250,22,252, +47,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,75,200,250,22,216, +196,27,252,80,159,47,57,35,206,203,204,201,34,28,249,22,252,19,2,194,198, +28,248,80,158,43,37,193,20,15,159,42,37,40,249,22,65,20,15,159,44,38, +40,194,192,200,37,20,99,159,38,16,6,30,76,2,25,71,105,100,101,110,116, +105,102,105,101,114,63,77,2,2,29,2,27,2,31,2,24,2,33,16,14,18, +97,64,104,101,114,101,78,57,37,36,35,18,16,2,158,2,65,57,58,18,16, +2,158,2,67,57,59,18,100,9,8,29,37,36,35,16,8,8,28,11,2,78, +71,117,110,113,117,111,116,101,45,115,116,120,79,1,20,117,110,113,117,111,116, +101,45,115,112,108,105,99,105,110,103,45,115,116,120,80,3,1,7,101,110,118, +50,53,51,51,81,2,81,2,81,16,4,8,27,11,67,105,110,45,102,111,114, +109,82,3,1,7,101,110,118,50,53,51,52,83,16,6,8,26,11,61,120,84, +63,111,108,100,85,3,1,7,101,110,118,50,53,51,54,86,2,86,18,16,2, +158,65,113,117,111,116,101,87,8,29,8,30,18,100,64,108,105,115,116,88,8, +32,37,36,35,8,28,8,27,16,6,8,31,11,61,97,89,61,100,90,3,1, +7,101,110,118,50,53,51,55,91,2,91,18,16,2,158,2,88,8,32,8,33, +18,16,2,158,65,108,105,115,116,42,92,8,32,8,34,18,8,34,18,104,2, +8,8,40,37,36,35,8,28,8,27,16,8,8,39,11,64,102,111,114,109,93, +2,72,2,71,3,1,7,101,110,118,50,53,51,53,94,2,94,2,94,16,4, +8,38,11,2,64,3,1,7,101,110,118,50,53,51,56,95,16,6,8,37,11, +2,84,65,108,101,118,101,108,96,3,1,7,101,110,118,50,53,51,57,97,2, +97,16,4,8,36,11,2,70,3,1,7,101,110,118,50,53,52,48,98,16,4, +8,35,11,65,102,105,114,115,116,99,3,1,7,101,110,118,50,53,52,54,100, +18,106,2,4,8,43,37,36,35,8,28,8,27,8,39,8,38,8,37,8,36, +8,35,16,4,8,42,11,64,114,101,115,116,101,3,1,7,101,110,118,50,53, +52,57,102,16,8,8,41,11,64,117,113,115,100,103,65,111,108,100,45,108,104, +61,108,105,3,1,7,101,110,118,50,53,53,49,106,2,106,2,106,18,158,94, +107,2,87,8,45,37,36,35,8,28,8,27,8,39,8,38,8,37,8,36,8, +35,8,42,8,41,16,4,8,44,11,65,114,101,115,116,120,107,3,1,7,101, +110,118,50,53,53,51,108,158,2,67,8,45,8,45,18,105,72,108,105,115,116, +45,62,118,101,99,116,111,114,109,8,48,37,36,35,8,28,8,27,8,39,8, +38,8,37,8,36,16,4,8,47,11,2,105,3,1,7,101,110,118,50,53,53, +52,110,16,4,8,46,11,62,108,50,111,3,1,7,101,110,118,50,53,53,53, +112,18,105,63,98,111,120,113,8,51,37,36,35,8,28,8,27,8,39,8,38, +8,37,8,36,16,4,8,50,11,61,118,114,3,1,7,101,110,118,50,53,53, +54,115,16,4,8,49,11,62,113,118,116,3,1,7,101,110,118,50,53,53,55, +117,11,16,5,93,2,9,27,20,15,159,35,34,39,89,162,34,35,48,9,224, +1,0,87,94,28,248,80,158,36,34,195,12,250,22,252,47,2,11,6,10,10, +98,97,100,32,115,121,110,116,97,120,118,197,27,248,80,158,37,35,196,28,248, +80,158,37,36,193,20,15,159,36,35,39,28,28,248,80,158,37,37,193,248,80, +158,37,36,248,80,158,38,35,194,10,248,80,158,37,38,193,250,22,216,196,251, +22,65,20,15,159,43,36,39,248,80,158,44,38,200,249,22,57,20,15,159,45, +37,39,248,80,158,46,35,202,20,15,159,43,38,39,198,35,20,99,159,34,16, +5,2,33,2,27,2,31,2,29,2,24,16,5,18,16,2,158,2,78,57,8, +52,18,100,10,8,56,37,36,35,16,4,8,55,11,2,78,3,1,7,101,110, +118,50,53,53,57,119,16,4,8,54,11,2,84,3,1,7,101,110,118,50,53, +54,48,120,16,4,8,53,11,61,101,121,3,1,7,101,110,118,50,53,54,49, +122,18,16,2,158,62,105,102,123,8,56,8,57,18,16,2,158,2,9,8,56, +8,58,18,158,11,8,56,11,16,5,93,2,6,27,20,15,159,35,34,40,89, +162,34,35,51,9,224,1,0,87,94,28,248,80,158,36,34,195,250,22,252,47, +2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,124,197,12,27,248,80, +158,37,35,196,28,248,80,158,37,36,193,20,15,159,36,35,40,28,28,248,80, +158,37,37,193,248,80,158,37,36,248,80,158,38,35,194,11,248,80,158,37,38, +193,28,248,80,158,37,39,193,250,22,216,196,250,22,65,20,15,159,42,36,40, +248,22,65,249,22,65,67,111,114,45,112,97,114,116,125,248,80,158,46,38,202, +251,22,65,20,15,159,46,37,40,2,125,2,125,249,22,57,20,15,159,48,38, +40,248,80,158,49,35,205,198,250,22,252,47,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,126,198,35,20,99,159,34,16,6,2,76,2,27,2,31, +2,29,2,24,2,33,16,5,18,8,52,18,100,11,8,62,37,36,35,16,4, +8,61,11,2,78,3,1,7,101,110,118,50,53,54,51,127,16,4,8,60,11, +2,84,3,1,7,101,110,118,50,53,54,52,128,16,4,8,59,11,2,121,3, +1,7,101,110,118,50,53,54,53,129,18,101,2,10,8,64,37,36,35,8,61, +8,60,8,59,16,4,8,63,11,63,116,109,112,130,3,1,7,101,110,118,50, +53,54,54,131,18,16,2,158,2,123,8,64,8,65,18,16,2,158,2,6,8, +64,8,66,11,93,83,159,34,93,80,159,34,34,35,32,132,89,162,34,36,39, +2,4,222,28,248,22,64,193,249,22,71,194,195,250,22,252,48,2,2,67,6, +11,11,112,114,111,112,101,114,32,108,105,115,116,133,195,93,68,35,37,107,101, +114,110,101,108,134,94,2,25,2,134,0}; + EVAL_ONE_SIZED_STR((char *)expr, 4861); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,49,252,238,4,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,49,252,234,4,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,66,35,37,99,111, 110,100,1,29,2,11,11,10,10,10,34,80,158,34,34,20,99,159,34,16,0, 16,0,11,11,16,0,34,11,16,1,64,99,111,110,100,3,16,1,11,16,1, @@ -376,28 +377,28 @@ 11,16,2,2,3,2,2,98,36,10,35,11,94,159,71,35,37,113,113,45,97, 110,100,45,111,114,22,9,11,159,2,11,9,11,16,0,96,35,8,254,1,11, 16,0,18,158,93,102,64,118,111,105,100,23,45,37,36,35,16,4,44,11,2, -21,3,1,7,101,110,118,50,53,54,56,24,16,4,43,11,67,105,110,45,102, -111,114,109,25,3,1,7,101,110,118,50,53,54,57,26,16,6,42,11,64,102, +21,3,1,7,101,110,118,50,53,55,48,24,16,4,43,11,67,105,110,45,102, +111,114,109,25,3,1,7,101,110,118,50,53,55,49,26,16,6,42,11,64,102, 111,114,109,27,66,115,101,114,114,111,114,28,3,1,7,101,110,118,50,53,55, -48,29,2,29,16,4,41,11,2,4,3,1,7,101,110,118,50,53,55,50,30, +50,29,2,29,16,4,41,11,2,4,3,1,7,101,110,118,50,53,55,52,30, 16,6,40,11,65,116,101,115,116,115,31,66,102,105,114,115,116,63,32,3,1, -7,101,110,118,50,53,55,51,33,2,33,45,18,104,64,101,108,115,101,34,48, +7,101,110,118,50,53,55,53,33,2,33,45,18,104,64,101,108,115,101,34,48, 37,36,35,44,43,42,41,40,16,6,47,11,64,108,105,110,101,35,64,114,101, -115,116,36,3,1,7,101,110,118,50,53,55,52,37,2,37,16,6,46,11,64, +115,116,36,3,1,7,101,110,118,50,53,55,54,37,2,37,16,6,46,11,64, 116,101,115,116,38,65,118,97,108,117,101,39,3,1,7,101,110,118,50,53,55, -53,40,2,40,18,104,62,61,62,41,50,37,36,35,44,43,42,41,40,47,16, +55,40,2,40,18,104,62,61,62,41,50,37,36,35,44,43,42,41,40,47,16, 8,49,11,2,38,2,39,65,101,108,115,101,63,42,2,40,2,40,2,40,18, 105,70,108,101,116,45,118,97,108,117,101,115,43,52,37,36,35,44,43,42,41, -40,47,49,16,6,51,11,2,38,63,103,101,110,44,3,1,7,101,110,118,50, -53,55,54,45,2,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158,2, -46,50,54,18,16,2,158,2,0,50,55,18,55,18,105,2,43,57,37,36,35, -44,43,42,41,40,47,49,16,4,56,11,2,44,3,1,7,101,110,118,50,53, -55,55,47,18,16,2,158,2,46,57,58,18,54,18,55,11,9,93,68,35,37, -107,101,114,110,101,108,48,95,2,11,2,22,2,48,0}; - EVAL_ONE_SIZED_STR((char *)expr, 1274); +40,47,49,16,4,51,11,63,103,101,110,44,3,1,7,101,110,118,50,53,55, +56,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158,2,46,50,54,18, +16,2,158,2,0,50,55,18,55,18,105,2,43,57,37,36,35,44,43,42,41, +40,47,49,16,4,56,11,2,44,3,1,7,101,110,118,50,53,55,57,47,18, +16,2,158,2,46,57,58,18,54,18,55,11,9,93,68,35,37,107,101,114,110, +101,108,48,95,2,11,2,22,2,48,0}; + EVAL_ONE_SIZED_STR((char *)expr, 1270); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,25,252,68,4,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,25,252,68,4,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,73,35,37,115,116, 114,117,99,116,45,105,110,102,111,1,29,2,11,11,10,10,10,34,80,158,34, 34,20,99,159,34,16,9,30,3,2,2,74,105,100,101,110,116,105,102,105,101, @@ -453,7 +454,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1104); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,37,252,208,4,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,37,252,208,4,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,71,35,37,100,115, 45,104,101,108,112,101,114,1,29,2,11,11,10,10,10,34,80,158,34,34,20, 99,159,34,16,6,30,3,2,2,1,20,108,105,115,116,45,62,105,109,109,117, @@ -472,7 +473,7 @@ 35,248,22,59,196,83,159,34,93,80,159,34,35,35,89,162,34,38,8,32,2, 6,223,0,27,28,197,247,22,54,11,27,28,198,89,162,8,36,35,40,62,113, 115,16,223,1,28,193,249,22,65,194,249,22,65,72,113,117,111,116,101,45,115, -121,110,116,97,120,17,197,11,22,7,27,28,197,249,22,252,101,3,199,32,18, +121,110,116,97,120,17,197,11,22,7,27,28,197,249,22,252,103,3,199,32,18, 89,162,8,44,34,34,9,222,11,11,87,94,28,197,28,28,248,80,158,38,36, 193,248,22,252,17,2,248,80,158,39,37,194,10,251,22,252,47,2,11,28,248, 80,158,42,36,197,6,63,63,112,97,114,101,110,116,32,115,116,114,117,99,116, @@ -516,15 +517,15 @@ EVAL_ONE_SIZED_STR((char *)expr, 1244); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,123,252,43,12,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,123,252,43,12,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,74,35,37,100,101, 102,105,110,101,45,101,116,45,97,108,1,29,2,11,11,10,10,10,34,80,158, -34,34,20,99,159,34,16,0,16,0,11,11,16,0,34,11,16,6,73,100,101, -102,105,110,101,45,115,116,114,117,99,116,3,66,108,101,116,47,101,99,4,66, -117,110,108,101,115,115,5,64,119,104,101,110,6,74,45,100,101,102,105,110,101, -45,115,121,110,116,97,120,7,67,45,100,101,102,105,110,101,8,16,6,11,11, +34,34,20,99,159,34,16,0,16,0,11,11,16,0,34,11,16,6,66,108,101, +116,47,101,99,3,66,117,110,108,101,115,115,4,67,45,100,101,102,105,110,101, +5,64,119,104,101,110,6,73,100,101,102,105,110,101,45,115,116,114,117,99,116, +7,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,8,16,6,11,11, 11,11,11,11,16,6,2,3,2,4,2,5,2,6,2,7,2,8,34,40,97, -16,5,94,2,8,2,7,27,20,15,159,35,34,39,27,89,162,8,36,35,37, +16,5,94,2,5,2,8,27,20,15,159,35,34,39,27,89,162,8,36,35,37, 69,109,107,45,100,101,102,105,110,101,9,224,2,1,89,162,8,36,35,53,9, 225,1,0,2,27,248,80,158,38,34,197,27,248,80,158,39,35,194,28,248,80, 158,39,36,193,250,22,216,198,250,22,67,200,248,22,65,199,249,80,158,46,37, @@ -543,14 +544,14 @@ 114,24,9,11,159,73,35,37,115,116,114,117,99,116,45,105,110,102,111,25,9, 11,159,66,35,37,99,111,110,100,26,9,11,159,2,19,9,11,159,2,12,9, 11,16,0,96,35,8,254,1,11,16,0,18,103,2,23,46,37,36,35,16,4, -45,11,2,23,3,1,7,101,110,118,50,54,48,56,27,16,4,44,11,64,98, -97,115,101,28,3,1,7,101,110,118,50,54,49,48,29,16,4,43,11,64,99, -111,100,101,30,3,1,7,101,110,118,50,54,49,49,31,16,4,42,11,64,98, -111,100,121,32,3,1,7,101,110,118,50,54,49,50,33,16,4,41,11,65,102, -105,114,115,116,34,3,1,7,101,110,118,50,54,49,51,35,16,4,40,11,65, -112,98,111,100,121,36,3,1,7,101,110,118,50,54,49,52,37,18,99,73,100, +45,11,2,23,3,1,7,101,110,118,50,54,49,48,27,16,4,44,11,64,98, +97,115,101,28,3,1,7,101,110,118,50,54,49,50,29,16,4,43,11,64,99, +111,100,101,30,3,1,7,101,110,118,50,54,49,51,31,16,4,42,11,64,98, +111,100,121,32,3,1,7,101,110,118,50,54,49,52,33,16,4,41,11,65,102, +105,114,115,116,34,3,1,7,101,110,118,50,54,49,53,35,16,4,40,11,65, +112,98,111,100,121,36,3,1,7,101,110,118,50,54,49,54,37,18,99,73,100, 101,102,105,110,101,45,118,97,108,117,101,115,38,48,37,36,35,45,16,4,47, -11,2,9,3,1,7,101,110,118,50,54,48,57,39,18,16,2,158,75,100,101, +11,2,9,3,1,7,101,110,118,50,54,49,49,39,18,16,2,158,75,100,101, 102,105,110,101,45,115,121,110,116,97,120,101,115,40,48,49,11,16,5,93,2, 6,89,162,34,35,47,9,223,0,27,248,22,223,195,28,28,192,249,22,190,248, 22,70,195,36,11,250,22,216,20,15,159,38,34,36,250,22,65,20,15,159,41, @@ -558,17 +559,17 @@ 36,248,80,158,44,35,248,80,158,45,35,204,197,250,22,252,47,2,11,6,10, 10,98,97,100,32,115,121,110,116,97,120,41,197,34,20,99,159,34,16,2,2, 14,2,11,16,3,18,99,2,23,52,37,36,35,16,4,51,11,61,120,42,3, -1,7,101,110,118,50,54,49,54,43,16,4,50,11,61,108,44,3,1,7,101, -110,118,50,54,49,55,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158, -2,0,52,54,11,16,5,93,2,5,89,162,34,35,47,9,223,0,27,248,22, +1,7,101,110,118,50,54,49,56,43,16,4,50,11,61,108,44,3,1,7,101, +110,118,50,54,49,57,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158, +2,0,52,54,11,16,5,93,2,4,89,162,34,35,47,9,223,0,27,248,22, 223,195,28,28,192,249,22,190,248,22,70,195,36,11,250,22,216,20,15,159,38, 34,34,251,22,65,20,15,159,42,35,34,248,22,84,200,20,15,159,42,36,34, 249,22,67,20,15,159,44,37,34,248,22,86,202,197,250,22,252,47,2,11,6, 10,10,98,97,100,32,115,121,110,116,97,120,47,197,34,20,99,159,34,16,0, 16,4,18,99,2,23,57,37,36,35,16,4,56,11,2,42,3,1,7,101,110, -118,50,54,49,57,48,16,4,55,11,2,44,3,1,7,101,110,118,50,54,50, -48,49,18,16,2,158,2,46,57,58,18,158,94,10,64,118,111,105,100,50,57, -18,16,2,158,2,0,57,59,11,16,5,93,2,4,89,162,34,35,50,9,223, +118,50,54,50,49,48,16,4,55,11,2,44,3,1,7,101,110,118,50,54,50, +50,49,18,16,2,158,2,46,57,58,18,158,94,10,64,118,111,105,100,50,57, +18,16,2,158,2,0,57,59,11,16,5,93,2,3,89,162,34,35,50,9,223, 0,27,248,22,223,195,28,28,192,28,249,22,190,248,22,70,195,36,248,80,158, 36,34,248,22,84,194,11,11,27,248,22,84,194,27,248,80,158,38,35,248,80, 158,39,35,198,250,22,216,20,15,159,40,34,38,249,22,65,67,99,97,108,108, @@ -576,9 +577,9 @@ 48,37,203,9,199,250,22,252,47,2,11,6,10,10,98,97,100,32,115,121,110, 116,97,120,52,197,34,20,99,159,34,16,4,2,16,2,11,2,18,2,21,16, 1,18,100,2,23,8,29,37,36,35,16,4,8,28,11,2,30,3,1,7,101, -110,118,50,54,50,50,53,16,4,8,27,11,2,44,3,1,7,101,110,118,50, -54,50,51,54,16,6,8,26,11,63,118,97,114,55,65,101,120,112,114,115,56, -3,1,7,101,110,118,50,54,50,52,57,2,57,11,16,5,93,2,3,27,89, +110,118,50,54,50,52,53,16,4,8,27,11,2,44,3,1,7,101,110,118,50, +54,50,53,54,16,6,8,26,11,63,118,97,114,55,65,101,120,112,114,115,56, +3,1,7,101,110,118,50,54,50,54,57,2,57,11,16,5,93,2,7,27,89, 162,8,36,38,8,26,69,109,97,107,101,45,99,111,114,101,58,223,1,250,22, 65,70,108,101,116,45,118,97,108,117,101,115,59,248,22,65,249,22,65,21,97, 64,116,121,112,101,60,65,109,97,107,101,114,61,64,112,114,101,100,62,66,97, @@ -623,7 +624,7 @@ 5,27,248,80,158,37,35,196,28,192,192,250,2,74,196,6,27,27,102,105,101, 108,100,32,110,97,109,101,32,110,111,116,32,97,32,105,100,101,110,116,105,102, 105,101,114,82,198,248,80,158,39,36,248,22,84,196,28,249,22,77,247,22,252, -103,3,21,93,70,101,120,112,114,101,115,115,105,111,110,83,249,2,74,197,6, +105,3,21,93,70,101,120,112,114,101,115,115,105,111,110,83,249,2,74,197,6, 35,35,97,108,108,111,119,101,100,32,111,110,108,121,32,105,110,32,100,101,102, 105,110,105,116,105,111,110,32,99,111,110,116,101,120,116,115,84,12,27,28,248, 80,158,38,35,248,22,58,195,248,22,58,194,248,80,158,38,40,248,22,58,195, @@ -643,50 +644,50 @@ 251,22,65,2,59,248,22,65,249,22,65,21,93,2,92,23,22,21,95,2,46, 96,2,46,2,92,94,63,110,111,116,93,94,70,105,110,115,112,101,99,116,111, 114,63,94,2,92,11,96,76,114,97,105,115,101,45,116,121,112,101,45,101,114, -114,111,114,95,94,2,66,2,3,6,15,15,105,110,115,112,101,99,116,111,114, +114,111,114,95,94,2,66,2,7,6,15,15,105,110,115,112,101,99,116,111,114, 32,111,114,32,35,102,96,2,92,196,192,250,22,65,2,40,248,22,65,23,17, 203,206,28,196,250,22,225,195,75,100,105,115,97,112,112,101,97,114,101,100,45, -117,115,101,97,248,22,252,106,3,200,192,35,20,99,159,34,16,9,2,18,2, +117,115,101,97,248,22,252,108,3,200,192,35,20,99,159,34,16,9,2,18,2, 16,2,21,2,11,30,98,2,12,69,115,116,120,45,108,105,115,116,63,99,8, 30,100,2,12,69,115,116,120,45,112,97,105,114,63,101,11,2,14,30,102,2, 12,69,115,116,120,45,110,117,108,108,63,103,10,30,104,2,24,72,103,101,116, 45,115,116,120,45,105,110,102,111,105,0,16,2,18,158,93,101,77,99,117,114, 114,101,110,116,45,105,110,115,112,101,99,116,111,114,106,8,34,37,36,35,16, -4,8,33,11,2,58,3,1,7,101,110,118,50,54,50,54,107,16,4,8,32, -11,63,115,116,120,108,3,1,7,101,110,118,50,54,51,48,109,16,4,8,31, -11,2,32,3,1,7,101,110,118,50,54,51,49,110,16,6,8,30,11,2,75, +4,8,33,11,2,58,3,1,7,101,110,118,50,54,50,56,107,16,4,8,32, +11,63,115,116,120,108,3,1,7,101,110,118,50,54,51,50,109,16,4,8,31, +11,2,32,3,1,7,101,110,118,50,54,51,51,110,16,6,8,30,11,2,75, 78,98,117,105,108,100,45,115,116,114,117,99,116,45,110,97,109,101,115,111,3, -1,7,101,110,118,50,54,51,50,112,2,112,8,34,18,104,2,23,8,38,37, +1,7,101,110,118,50,54,51,52,112,2,112,8,34,18,104,2,23,8,38,37, 36,35,8,33,8,32,8,31,8,30,16,10,8,37,11,64,110,97,109,101,113, 71,102,105,101,108,100,45,110,97,109,101,115,114,2,92,68,115,117,112,101,114, -45,105,100,115,3,1,7,101,110,118,50,54,52,54,116,2,116,2,116,2,116, +45,105,100,115,3,1,7,101,110,118,50,54,52,56,116,2,116,2,116,2,116, 16,4,8,36,11,73,100,101,102,105,110,101,100,45,110,97,109,101,115,117,3, -1,7,101,110,118,50,54,52,55,118,16,6,8,35,11,76,115,117,112,101,114, +1,7,101,110,118,50,54,52,57,118,16,6,8,35,11,76,115,117,112,101,114, 45,105,100,47,115,116,114,117,99,116,58,119,68,115,116,120,45,105,110,102,111, -120,3,1,7,101,110,118,50,54,52,57,121,2,121,11,9,93,68,35,37,107, +120,3,1,7,101,110,118,50,54,53,49,121,2,121,11,9,93,68,35,37,107, 101,114,110,101,108,122,98,2,122,2,12,2,19,2,26,2,25,2,24,0}; EVAL_ONE_SIZED_STR((char *)expr, 3127); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,21,252,37,1,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,21,252,37,1,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,74,35,37,115,109, 97,108,108,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,34,80,158, -34,34,20,99,159,34,16,0,16,0,11,11,16,0,34,11,16,13,66,108,101, -116,47,101,99,3,64,108,101,116,42,4,73,100,101,102,105,110,101,45,115,116, -114,117,99,116,5,63,97,110,100,6,64,99,111,110,100,7,64,119,104,101,110, -8,62,111,114,9,70,113,117,97,115,105,113,117,111,116,101,10,66,108,101,116, -114,101,99,11,66,117,110,108,101,115,115,12,74,45,100,101,102,105,110,101,45, -115,121,110,116,97,120,13,67,45,100,101,102,105,110,101,14,63,108,101,116,15, +34,34,20,99,159,34,16,0,16,0,11,11,16,0,34,11,16,13,67,45,100, +101,102,105,110,101,3,64,108,101,116,42,4,73,100,101,102,105,110,101,45,115, +116,114,117,99,116,5,66,108,101,116,47,101,99,6,70,113,117,97,115,105,113, +117,111,116,101,7,63,97,110,100,8,64,119,104,101,110,9,62,111,114,10,64, +99,111,110,100,11,66,117,110,108,101,115,115,12,66,108,101,116,114,101,99,13, +74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,14,63,108,101,116,15, 16,13,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,16,71,35,37, -113,113,45,97,110,100,45,111,114,17,2,16,2,17,66,35,37,99,111,110,100, -18,2,16,2,17,2,17,2,17,2,16,2,16,2,16,2,17,16,13,2,3, +113,113,45,97,110,100,45,111,114,17,2,16,2,16,2,17,2,17,2,16,2, +17,66,35,37,99,111,110,100,18,2,16,2,17,2,16,2,17,16,13,2,3, 2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2, 14,2,15,34,47,9,9,97,68,35,37,107,101,114,110,101,108,19,65,35,37, 115,116,120,20,2,17,2,18,2,16,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 305); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,233,252,170,53,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,233,252,170,53,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,115,64,35,37,115,99, 1,29,2,11,11,10,10,18,95,11,37,96,35,8,254,1,11,16,2,64,115, 101,116,33,3,68,35,37,107,101,114,110,101,108,4,42,80,158,34,34,20,99, @@ -737,30 +738,30 @@ 103,45,100,101,112,116,104,90,254,1,30,91,2,2,1,21,115,121,110,116,97, 120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,92,254,1,16,3, 18,98,63,46,46,46,93,41,98,40,10,34,11,94,159,74,35,37,115,109,97, -108,108,45,115,99,104,101,109,101,94,9,11,159,2,20,9,11,16,72,2,90, -2,2,2,46,2,2,2,62,2,2,2,86,2,2,2,48,2,2,2,84,2, -2,2,10,2,2,2,50,2,2,2,27,2,2,2,60,2,2,2,76,2,2, -2,80,2,2,2,6,2,2,2,12,2,2,2,64,2,2,2,16,2,2,2, -92,2,2,2,68,2,2,2,54,2,2,2,72,2,2,2,18,2,2,2,56, -2,2,2,58,2,2,2,29,2,2,2,31,2,2,2,70,2,2,2,74,2, -2,2,8,2,2,2,52,2,2,2,35,2,2,2,14,2,2,2,37,2,2, -2,78,2,2,2,66,2,2,2,88,2,2,2,82,2,2,96,39,35,11,16, -0,35,16,4,38,11,61,115,95,3,1,7,101,110,118,50,54,53,51,96,18, +108,108,45,115,99,104,101,109,101,94,9,11,159,2,20,9,11,16,72,2,56, +2,2,2,46,2,2,2,16,2,2,2,8,2,2,2,86,2,2,2,48,2, +2,2,37,2,2,2,82,2,2,2,50,2,2,2,90,2,2,2,84,2,2, +2,76,2,2,2,35,2,2,2,66,2,2,2,10,2,2,2,78,2,2,2, +12,2,2,2,68,2,2,2,92,2,2,2,62,2,2,2,60,2,2,2,54, +2,2,2,64,2,2,2,31,2,2,2,58,2,2,2,27,2,2,2,29,2, +2,2,70,2,2,2,18,2,2,2,72,2,2,2,6,2,2,2,14,2,2, +2,80,2,2,2,88,2,2,2,52,2,2,2,74,2,2,96,39,35,11,16, +0,35,16,4,38,11,61,115,95,3,1,7,101,110,118,50,54,53,53,96,18, 104,2,93,49,40,39,35,16,10,48,11,61,112,97,67,112,114,111,116,111,45, -114,98,61,107,99,64,100,101,115,116,100,3,1,7,101,110,118,50,55,51,51, +114,98,61,107,99,64,100,101,115,116,100,3,1,7,101,110,118,50,55,51,53, 101,2,101,2,101,2,101,16,6,47,11,68,101,120,112,97,110,100,101,114,102, -63,116,111,112,103,3,1,7,101,110,118,50,55,51,55,104,3,1,7,101,110, -118,50,55,51,53,105,16,6,46,11,2,102,2,103,3,1,7,101,110,118,50, -55,51,57,106,2,106,16,14,45,11,2,97,2,98,69,108,111,99,97,108,45, +63,116,111,112,103,3,1,7,101,110,118,50,55,51,57,104,3,1,7,101,110, +118,50,55,51,55,105,16,6,46,11,2,102,2,103,3,1,7,101,110,118,50, +55,52,49,106,2,106,16,14,45,11,2,97,2,98,69,108,111,99,97,108,45, 116,111,112,107,73,117,115,101,45,101,108,108,105,112,115,101,115,63,108,72,117, 115,101,45,116,97,105,108,45,112,111,115,109,65,104,97,115,104,33,110,3,1, -7,101,110,118,50,55,52,48,111,2,111,2,111,2,111,2,111,2,111,16,10, +7,101,110,118,50,55,52,50,111,2,111,2,111,2,111,2,111,2,111,16,10, 44,11,66,112,45,104,101,97,100,112,68,101,108,45,99,111,117,110,116,113,66, 114,101,115,116,45,112,114,67,108,97,115,116,45,101,108,115,3,1,7,101,110, -118,50,55,52,49,116,2,116,2,116,2,116,16,4,43,11,64,108,111,111,112, -117,3,1,7,101,110,118,50,55,52,52,118,16,4,42,11,2,113,3,1,7, -101,110,118,50,55,52,53,119,18,98,2,3,51,40,39,35,16,6,50,11,64, -115,101,108,102,120,63,115,116,120,121,3,1,7,101,110,118,50,56,51,57,122, +118,50,55,52,51,116,2,116,2,116,2,116,16,4,43,11,64,108,111,111,112, +117,3,1,7,101,110,118,50,55,52,54,118,16,4,42,11,2,113,3,1,7, +101,110,118,50,55,52,55,119,18,98,2,3,51,40,39,35,16,6,50,11,64, +115,101,108,102,120,63,115,116,120,121,3,1,7,101,110,118,50,56,52,49,122, 2,122,11,11,16,27,2,74,2,82,2,84,2,76,2,6,2,35,2,37,2, 31,2,60,2,56,2,58,2,62,2,52,2,18,2,54,2,29,2,27,2,16, 2,64,2,14,2,72,2,8,2,12,2,68,2,66,2,78,2,80,8,27,16, @@ -1322,8 +1323,8 @@ 35,50,194,248,22,252,17,2,28,248,22,47,248,22,217,196,249,22,230,196,20, 15,159,37,34,8,43,11,10,83,159,34,97,80,159,34,8,32,35,80,159,34, 8,33,35,80,159,34,8,34,35,80,159,34,8,35,35,80,159,34,8,36,35, -26,8,22,252,99,2,74,115,121,110,116,97,120,45,109,97,112,112,105,110,103, -230,11,36,34,11,9,247,22,252,122,2,89,162,34,36,44,9,223,8,28,248, +26,8,22,252,102,2,74,115,121,110,116,97,120,45,109,97,112,112,105,110,103, +230,11,36,34,11,9,247,22,252,125,2,89,162,34,36,44,9,223,8,28,248, 80,158,35,50,195,250,22,252,47,2,11,6,53,53,112,97,116,116,101,114,110, 32,118,97,114,105,97,98,108,101,32,99,97,110,110,111,116,32,98,101,32,117, 115,101,100,32,111,117,116,115,105,100,101,32,111,102,32,97,32,116,101,109,112, @@ -1332,345 +1333,343 @@ 117,115,101,100,32,111,117,116,115,105,100,101,32,111,102,32,97,32,116,101,109, 112,108,97,116,101,232,198,28,249,22,232,20,15,159,40,36,8,43,248,80,158, 41,43,201,248,80,158,39,43,248,80,158,40,42,200,248,80,158,39,43,199,83, -159,34,93,80,159,34,8,37,35,249,22,252,101,2,80,158,36,8,35,34,83, -159,34,93,80,159,34,8,38,35,249,22,252,101,2,80,158,36,8,35,35,83, +159,34,93,80,159,34,8,37,35,249,22,252,104,2,80,158,36,8,35,34,83, +159,34,93,80,159,34,8,38,35,249,22,252,104,2,80,158,36,8,35,35,83, 159,34,93,80,159,34,8,39,35,89,162,34,36,40,2,86,223,0,248,22,252, -109,3,249,80,158,37,8,33,196,197,83,159,34,93,80,159,34,8,40,35,89, -162,34,35,38,2,88,223,0,28,248,22,252,110,3,194,248,80,158,35,8,34, -248,22,252,111,3,195,11,83,159,34,93,80,159,34,8,41,35,89,162,34,35, -38,2,90,223,0,248,80,158,35,8,37,248,22,252,111,3,195,83,159,34,93, +111,3,249,80,158,37,8,33,196,197,83,159,34,93,80,159,34,8,40,35,89, +162,34,35,38,2,88,223,0,28,248,22,252,112,3,194,248,80,158,35,8,34, +248,22,252,113,3,195,11,83,159,34,93,80,159,34,8,41,35,89,162,34,35, +38,2,90,223,0,248,80,158,35,8,37,248,22,252,113,3,195,83,159,34,93, 80,159,34,8,42,35,89,162,34,35,38,2,92,223,0,248,80,158,35,8,38, -248,22,252,111,3,195,95,2,4,2,20,2,94,9,2,4,0}; +248,22,252,113,3,195,95,2,4,2,20,2,94,9,2,4,0}; EVAL_ONE_SIZED_STR((char *)expr, 13750); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,181,252,243,24,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,179,252,206,24,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,69,35,37,115,116, 120,99,97,115,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,99,159, -34,16,6,30,3,2,2,1,26,100,97,116,117,109,45,62,115,121,110,116,97, +34,16,5,30,3,2,2,1,26,100,97,116,117,109,45,62,115,121,110,116,97, 120,45,111,98,106,101,99,116,47,115,104,97,112,101,4,254,1,30,5,2,2, 1,20,99,97,116,99,104,45,101,108,108,105,112,115,105,115,45,101,114,114,111, -114,6,254,1,30,7,68,35,37,112,97,114,97,109,122,8,1,20,112,97,114, -97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,9,254,1,30, -10,2,8,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114, -105,122,97,116,105,111,110,11,254,1,30,12,2,2,75,115,117,98,115,116,105, -116,117,116,101,45,115,116,111,112,13,254,1,30,14,2,2,1,24,97,112,112, -108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101, -15,254,1,16,0,11,11,16,4,2,15,2,6,2,4,2,13,38,11,16,2, -73,115,121,110,116,97,120,45,99,97,115,101,42,42,16,66,115,121,110,116,97, -120,17,16,2,11,11,16,2,2,16,2,17,34,36,95,16,5,93,78,112,97, -116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,18,87,94,83,159, -34,93,80,159,34,41,35,89,162,8,100,37,45,64,108,111,111,112,19,223,0, -28,248,22,63,196,12,87,94,27,248,22,217,248,22,58,198,27,248,22,84,198, -28,28,248,80,158,37,37,193,10,28,248,80,158,37,38,193,28,249,22,77,248, -22,217,248,80,158,40,34,196,21,102,63,99,97,114,20,64,99,97,100,114,21, -65,99,97,100,100,114,22,66,99,97,100,100,100,114,23,63,99,100,114,24,64, -99,100,100,114,25,65,99,100,100,100,114,26,66,99,100,100,100,100,114,27,68, -108,105,115,116,45,114,101,102,28,69,108,105,115,116,45,116,97,105,108,29,28, -248,80,158,37,38,248,80,158,38,35,194,248,80,158,37,37,248,80,158,38,34, -248,80,158,39,35,195,11,11,11,27,248,22,215,194,27,250,22,122,200,196,11, -28,192,250,22,121,201,198,195,250,22,121,200,196,198,12,250,80,159,37,41,35, -196,197,248,22,86,199,89,162,8,36,35,56,9,223,0,27,248,80,158,36,34, -248,80,158,37,35,196,27,248,80,158,37,36,248,80,158,38,35,248,80,158,39, -35,198,27,248,22,116,65,101,113,117,97,108,30,27,247,22,116,87,94,250,80, -159,41,41,35,196,195,197,27,28,248,22,193,248,22,119,195,196,91,159,35,11, -20,12,95,35,248,193,198,89,162,8,64,35,42,2,19,224,2,0,28,248,22, -56,195,27,248,194,248,22,58,197,27,248,195,248,22,59,198,28,28,249,22,252, -19,2,195,248,22,58,199,249,22,252,19,2,194,248,22,59,199,11,196,249,22, -57,195,194,28,248,22,47,195,27,250,22,122,197,198,11,28,192,192,195,28,248, -22,213,195,27,248,194,248,22,217,197,28,249,22,252,19,2,248,22,217,198,194, -195,251,22,216,199,196,199,199,28,248,22,252,229,1,195,248,22,252,237,1,249, -22,2,195,248,22,252,236,1,198,28,248,22,113,195,248,22,111,248,194,248,22, -114,197,194,250,22,216,20,15,159,42,34,39,251,22,67,2,15,199,249,22,65, -65,113,117,111,116,101,31,28,248,22,63,205,9,28,250,22,122,205,248,22,217, -248,22,58,23,17,11,249,32,32,89,162,8,64,36,44,2,19,222,28,248,22, -63,194,9,28,250,22,122,195,248,22,217,248,22,58,198,11,27,248,22,86,195, -28,248,22,63,193,9,28,250,22,122,196,248,22,217,248,22,58,197,11,249,2, -32,195,248,22,86,195,249,22,57,248,22,58,195,249,2,32,197,248,22,86,197, -249,22,57,248,22,58,196,27,248,22,86,197,28,248,22,63,193,9,28,250,22, -122,198,248,22,217,248,22,58,197,11,249,2,32,197,248,22,86,195,249,22,57, -248,22,58,195,249,2,32,199,248,22,86,197,204,248,22,86,23,15,249,22,57, -248,22,58,23,15,249,2,32,206,248,22,86,23,17,28,248,22,63,203,9,28, -250,22,122,203,248,22,217,248,22,58,23,15,11,249,32,33,89,162,8,64,36, -44,2,19,222,28,248,22,63,194,9,28,250,22,122,195,248,22,217,248,22,58, -198,11,27,248,22,86,195,28,248,22,63,193,9,28,250,22,122,196,248,22,217, -248,22,58,197,11,249,2,33,195,248,22,86,195,249,22,57,248,22,84,195,249, -2,33,197,248,22,86,197,249,22,57,248,22,84,196,27,248,22,86,197,28,248, -22,63,193,9,28,250,22,122,198,248,22,217,248,22,58,197,11,249,2,33,197, -248,22,86,195,249,22,57,248,22,84,195,249,2,33,199,248,22,86,197,202,248, -22,86,205,249,22,57,248,22,84,205,249,2,33,204,248,22,86,23,15,201,34, -20,99,159,35,16,5,30,34,65,35,37,115,116,120,35,67,115,116,120,45,99, -97,114,36,5,30,37,2,35,67,115,116,120,45,99,100,114,38,6,30,39,2, -35,69,115,116,120,45,62,108,105,115,116,40,4,30,41,2,35,71,105,100,101, -110,116,105,102,105,101,114,63,42,2,30,43,2,35,69,115,116,120,45,112,97, -105,114,63,44,11,16,1,18,101,64,104,101,114,101,45,43,98,41,10,34,11, -95,159,2,8,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109, -101,46,9,11,159,2,35,9,11,16,14,2,17,2,2,2,16,2,2,2,6, -2,2,2,18,2,2,2,4,2,2,2,15,2,2,2,13,2,2,98,40,10, -35,11,95,159,64,35,37,115,99,47,9,11,159,2,46,9,11,159,2,35,9, -11,16,0,96,39,8,254,1,11,16,0,16,4,38,11,63,115,116,120,48,3, -1,7,101,110,118,50,56,53,49,49,16,6,37,11,63,112,97,116,50,64,115, -117,98,115,51,3,1,7,101,110,118,50,56,53,50,52,2,52,16,6,36,11, -69,104,116,45,99,111,109,109,111,110,53,66,104,116,45,109,97,112,54,3,1, -7,101,110,118,50,56,53,51,55,2,55,16,4,35,11,71,110,101,119,45,112, -97,116,116,101,114,110,56,3,1,7,101,110,118,50,56,54,49,57,11,16,5, -93,2,16,87,97,83,159,34,93,80,159,34,8,41,35,89,162,8,36,44,8, -41,2,19,223,0,28,248,22,63,200,251,22,65,20,15,159,38,41,43,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,58,197,27,26,10,80,159,45,8, -41,35,204,205,206,23,15,23,16,23,17,248,22,59,23,19,248,22,59,23,20, -248,22,59,23,21,248,22,59,23,22,27,248,22,58,202,27,248,22,58,204,27, -248,22,58,206,27,248,22,58,23,16,91,159,37,10,90,161,35,34,10,249,22, -2,32,59,89,162,8,36,35,40,9,222,28,248,22,213,193,192,27,248,22,58, -194,28,248,22,213,193,192,27,248,22,58,194,28,248,22,213,193,192,248,32,60, -89,162,8,100,35,40,2,19,222,28,248,22,213,193,192,27,248,22,58,194,28, -248,22,213,193,192,27,248,22,58,194,28,248,22,213,193,192,27,248,22,58,194, -28,248,22,213,193,192,248,2,60,248,22,58,194,248,22,58,194,198,90,161,35, -35,10,249,22,2,32,61,89,162,8,36,35,38,9,222,250,22,216,195,247,22, -54,11,209,90,161,35,36,10,248,22,178,248,22,70,209,27,28,248,22,58,23, -18,248,22,65,20,15,159,44,42,43,200,27,252,80,158,49,41,23,19,205,205, -248,80,158,50,35,23,21,248,22,252,17,2,23,19,27,28,206,249,22,252,21, -2,195,21,95,66,108,97,109,98,100,97,62,93,61,101,63,2,63,249,22,252, -21,2,195,21,95,2,62,94,2,63,79,109,111,100,117,108,101,45,105,100,101, -110,116,105,102,105,101,114,61,63,64,2,63,27,250,22,65,20,15,159,49,43, -43,248,22,65,249,22,65,23,20,28,199,23,19,250,22,67,250,22,216,20,15, -159,58,44,43,206,23,22,23,22,28,23,24,9,248,22,65,23,28,251,22,65, -20,15,159,53,45,43,28,200,10,23,21,250,22,65,20,15,159,56,46,43,250, -22,2,89,162,8,36,36,47,9,226,25,27,19,17,249,22,65,199,27,249,80, -158,42,42,201,212,27,28,249,22,188,214,195,28,249,22,252,19,2,195,34,64, -116,97,105,108,65,28,249,22,252,19,2,195,35,20,15,159,41,47,43,28,249, -22,252,19,2,195,36,20,15,159,41,48,43,28,249,22,252,19,2,195,37,20, -15,159,41,49,43,28,249,22,252,19,2,195,38,20,15,159,41,50,43,2,65, -28,249,22,252,19,2,195,34,20,15,159,41,51,43,28,249,22,252,19,2,195, -35,20,15,159,41,52,43,28,249,22,252,19,2,195,36,20,15,159,41,53,43, -28,249,22,252,19,2,195,37,20,15,159,41,54,43,11,28,249,22,252,19,2, -194,2,65,28,248,22,193,194,198,250,22,65,20,15,159,44,55,43,201,196,28, -192,249,22,65,194,200,250,22,65,20,15,159,44,56,43,201,196,24,17,24,18, -251,22,65,20,15,159,8,26,57,43,251,22,2,80,159,8,30,8,42,35,24, -22,23,26,24,23,9,28,23,23,251,22,65,20,15,159,8,30,8,26,43,23, -27,23,25,23,21,23,21,202,28,201,250,22,65,20,15,159,49,8,27,43,248, -22,65,249,22,65,68,116,114,121,45,110,101,120,116,66,250,22,65,20,15,159, -55,8,28,43,247,22,65,23,20,195,192,83,159,34,93,80,159,34,8,42,35, -89,162,8,36,37,49,9,223,0,249,22,65,248,22,65,196,250,22,65,20,15, -159,39,58,43,28,248,22,213,200,34,27,248,22,58,201,28,248,22,213,193,35, -27,248,22,58,194,28,248,22,213,193,36,249,32,67,89,162,8,100,36,45,2, -19,222,28,248,22,213,193,193,27,248,22,58,194,27,248,22,177,196,28,248,22, -213,194,192,27,248,22,58,195,27,248,22,177,195,28,248,22,213,194,192,27,248, -22,58,195,27,248,22,177,195,28,248,22,213,194,192,249,2,67,248,22,58,196, -248,22,177,195,248,22,58,195,37,249,22,65,20,15,159,41,59,43,202,83,159, -34,93,80,159,34,8,40,35,89,162,34,35,39,9,223,0,27,248,80,158,36, -39,248,80,158,37,39,196,28,248,80,158,36,38,193,248,80,158,36,37,193,248, -80,158,36,37,248,80,158,37,39,196,83,159,34,93,80,159,34,8,39,35,89, -162,34,35,39,9,223,0,28,248,80,158,35,38,248,80,158,36,39,248,80,158, -37,39,196,248,80,158,35,37,248,80,158,36,39,195,11,89,162,8,36,35,8, -33,9,223,0,91,159,35,10,90,161,35,34,10,28,248,80,158,36,34,195,248, -22,59,248,80,158,37,35,196,11,87,94,28,28,248,80,158,36,34,195,249,22, -190,248,22,70,210,37,11,12,250,22,252,47,2,11,6,8,8,98,97,100,32, -102,111,114,109,68,197,27,248,22,58,209,27,248,22,84,210,27,248,22,93,211, -27,248,22,96,212,27,248,22,96,248,22,59,214,27,248,22,95,248,22,59,215, -87,96,28,248,80,158,42,34,195,12,250,22,252,47,2,248,22,217,201,6,56, -56,101,120,112,101,99,116,101,100,32,97,32,112,97,114,101,110,116,104,101,115, -105,122,101,100,32,115,101,113,117,101,110,99,101,32,111,102,32,108,105,116,101, -114,97,108,32,105,100,101,110,116,105,102,105,101,114,115,69,197,249,22,3,89, -162,34,35,41,9,224,9,7,28,248,80,158,36,36,195,12,250,22,252,47,2, -248,22,217,196,6,28,28,108,105,116,101,114,97,108,32,105,115,32,110,111,116, -32,97,110,32,105,100,101,110,116,105,102,105,101,114,70,197,248,80,158,44,35, -197,249,22,3,89,162,34,35,42,9,224,9,7,28,28,248,80,158,36,34,195, -250,22,191,36,248,22,70,248,80,158,40,35,199,37,11,12,250,22,252,47,2, -248,22,217,196,6,10,10,98,97,100,32,99,108,97,117,115,101,71,197,194,27, -249,22,2,80,158,44,37,195,27,249,22,2,80,159,45,8,39,35,196,27,249, -22,2,80,159,46,8,40,35,197,27,20,15,159,45,34,43,27,20,15,159,46, -35,43,27,249,22,2,89,162,34,35,43,9,225,15,10,13,251,80,158,40,40, -196,199,199,248,80,158,41,35,198,248,80,158,50,35,200,27,28,248,80,158,49, -36,201,249,22,230,202,20,15,159,50,36,43,11,250,22,216,20,15,159,51,37, -43,250,22,65,20,15,159,54,38,43,248,22,65,249,22,65,204,28,248,22,217, -23,21,23,19,250,22,65,20,15,159,8,26,39,43,249,22,65,20,15,159,8, -28,40,43,249,22,216,23,26,2,45,23,22,26,10,80,159,8,30,8,41,35, -23,19,23,18,23,16,23,28,23,25,23,24,23,22,23,21,23,17,23,20,23, -18,34,20,99,159,38,16,9,30,72,2,35,69,115,116,120,45,108,105,115,116, -63,73,8,2,39,2,41,2,34,2,43,2,37,30,74,2,47,74,103,101,116, -45,109,97,116,99,104,45,118,97,114,115,75,0,30,76,2,47,74,109,97,107, -101,45,109,97,116,99,104,38,101,110,118,77,1,30,78,2,47,72,115,116,120, -45,109,101,109,113,45,112,111,115,79,5,16,29,18,102,63,97,114,103,80,49, -41,40,39,16,4,48,11,61,120,81,3,1,7,101,110,118,50,56,55,51,82, -16,4,47,11,61,108,83,3,1,7,101,110,118,50,56,55,53,84,16,4,46, -11,2,83,3,1,7,101,110,118,50,56,55,55,85,16,14,45,11,63,119,104, -111,86,71,97,114,103,45,105,115,45,115,116,120,63,87,64,101,120,112,114,88, -63,107,119,115,89,68,108,105,116,45,99,111,109,112,90,67,99,108,97,117,115, -101,115,91,3,1,7,101,110,118,50,56,55,56,92,2,92,2,92,2,92,2, -92,2,92,16,8,44,11,68,112,97,116,116,101,114,110,115,93,67,102,101,110, -100,101,114,115,94,67,97,110,115,119,101,114,115,95,3,1,7,101,110,118,50, -56,56,50,96,2,96,2,96,18,103,64,114,115,108,116,97,51,41,40,39,48, -47,46,45,44,16,4,50,11,2,80,3,1,7,101,110,118,50,56,56,54,98, -18,103,2,64,53,41,40,39,48,47,46,45,44,16,8,52,11,2,80,2,97, -73,112,97,116,116,101,114,110,45,118,97,114,115,115,99,2,98,2,98,2,98, -18,103,2,45,55,41,40,39,48,47,46,45,44,16,10,54,11,2,80,2,97, -2,99,76,108,105,116,45,99,111,109,112,45,105,115,45,109,111,100,63,100,2, -98,2,98,2,98,2,98,18,16,2,158,63,108,101,116,101,55,56,18,16,2, -158,1,20,100,97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101, -99,116,102,55,57,18,16,2,158,72,113,117,111,116,101,45,115,121,110,116,97, -120,103,55,58,18,105,78,114,97,105,115,101,45,115,121,110,116,97,120,45,101, -114,114,111,114,104,8,27,41,40,39,48,47,46,45,44,54,16,4,8,26,11, -2,19,3,1,7,101,110,118,50,56,56,56,105,16,4,59,11,1,20,117,110, -102,108,97,116,45,112,97,116,116,101,114,110,45,118,97,114,115,115,106,3,1, -7,101,110,118,50,56,56,57,107,18,109,2,66,8,32,41,40,39,48,47,46, -45,44,54,8,26,59,16,4,8,31,11,64,114,101,115,116,108,3,1,7,101, -110,118,50,56,57,48,109,16,10,8,30,11,67,112,97,116,116,101,114,110,110, -66,102,101,110,100,101,114,111,79,117,110,102,108,97,116,45,112,97,116,116,101, -114,110,45,118,97,114,115,112,66,97,110,115,119,101,114,113,3,1,7,101,110, -118,50,56,57,49,114,2,114,2,114,2,114,16,8,8,29,11,76,116,97,105, -108,45,112,97,116,116,101,114,110,45,118,97,114,115,69,116,101,109,112,45,118, -97,114,115,116,72,112,97,116,116,101,114,110,45,118,97,114,115,117,3,1,7, -101,110,118,50,56,57,55,118,3,1,7,101,110,118,50,56,57,53,119,3,1, -7,101,110,118,50,56,57,51,120,16,8,8,28,11,2,115,2,116,2,117,3, -1,7,101,110,118,50,56,57,57,121,2,121,2,121,18,110,2,101,8,35,41, -40,39,48,47,46,45,44,54,8,26,59,8,31,8,30,8,29,16,8,8,34, -11,2,115,2,116,2,117,2,121,2,121,2,121,16,8,8,33,11,71,100,111, -45,116,114,121,45,110,101,120,116,122,64,109,116,99,104,123,70,99,97,110,116, -45,102,97,105,108,63,124,3,1,7,101,110,118,50,57,48,52,125,2,125,2, -125,18,16,2,158,2,45,8,35,8,36,18,16,2,158,62,105,102,126,8,35, -8,37,18,16,2,158,2,101,8,35,8,38,18,112,2,24,8,41,41,40,39, -48,47,46,45,44,54,8,26,59,8,31,8,30,8,29,8,34,8,33,16,6, -8,40,11,71,112,97,116,116,101,114,110,45,118,97,114,127,68,116,101,109,112, -45,118,97,114,128,3,1,7,101,110,118,50,57,48,53,129,2,129,16,4,8, -39,11,63,112,111,115,130,3,1,7,101,110,118,50,57,48,54,131,18,16,2, -158,2,25,8,41,8,42,18,16,2,158,2,26,8,41,8,43,18,16,2,158, -2,27,8,41,8,44,18,16,2,158,2,20,8,41,8,45,18,16,2,158,2, -21,8,41,8,46,18,16,2,158,2,22,8,41,8,47,18,16,2,158,2,23, -8,41,8,48,18,113,2,29,8,50,41,40,39,48,47,46,45,44,54,8,26, -59,8,31,8,30,8,29,8,34,8,33,8,40,8,39,16,4,8,49,11,68, -97,99,99,101,115,115,111,114,132,3,1,7,101,110,118,50,57,48,55,133,18, -16,2,158,2,28,8,50,8,51,18,16,2,158,1,22,108,101,116,114,101,99, -45,115,121,110,116,97,120,101,115,43,118,97,108,117,101,115,134,8,35,8,52, -18,111,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105,110, -103,135,8,54,41,40,39,48,47,46,45,44,54,8,26,59,8,31,8,30,8, -29,8,34,8,33,16,8,8,53,11,2,127,78,117,110,102,108,97,116,45,112, -97,116,116,101,114,110,45,118,97,114,136,2,128,3,1,7,101,110,118,50,57, -48,56,137,2,137,2,137,18,16,2,158,2,103,8,54,8,55,18,8,37,18, -110,2,101,8,58,41,40,39,48,47,46,45,44,54,8,26,59,8,31,8,30, -8,29,16,8,8,57,11,2,115,2,116,2,117,2,121,2,121,2,121,16,10, -8,56,11,2,122,2,123,2,124,61,109,138,2,125,2,125,2,125,2,125,18, -16,2,158,2,62,8,58,8,59,11,16,5,93,2,17,87,96,83,159,34,93, -80,159,34,51,35,89,162,8,64,37,50,2,19,223,0,28,248,22,63,196,9, -28,248,22,58,196,249,22,57,250,22,216,248,22,58,200,248,22,217,248,80,158, -41,42,248,22,58,203,198,27,248,22,59,198,27,248,22,59,200,28,248,22,63, -193,9,28,248,22,58,193,249,22,57,250,22,216,248,22,58,199,248,22,217,248, -80,158,45,42,248,22,58,200,202,250,80,159,43,51,35,202,248,22,59,199,248, -22,59,198,250,80,159,41,51,35,200,248,22,59,197,248,22,59,196,27,248,22, -59,196,27,248,22,59,198,28,248,22,63,193,9,28,248,22,58,193,249,22,57, -250,22,216,248,22,58,199,248,22,217,248,80,158,43,42,248,22,58,200,200,250, -80,159,41,51,35,200,248,22,59,199,248,22,59,198,250,80,159,39,51,35,198, -248,22,59,197,248,22,59,196,83,159,34,93,80,159,34,50,35,89,162,8,64, -36,58,2,19,223,0,28,248,22,63,195,9,27,249,80,159,37,50,35,248,22, -59,197,248,22,59,198,28,248,22,58,196,249,22,57,27,248,22,58,198,27,248, -80,158,40,41,248,22,58,201,28,248,22,193,193,193,27,248,22,65,195,27,248, -22,178,195,28,248,22,193,193,193,27,248,22,65,195,27,248,22,178,195,28,248, -22,193,193,193,27,248,22,65,195,27,248,22,178,195,28,248,22,193,193,193,27, -248,22,65,195,27,248,22,178,195,28,248,22,193,193,193,27,248,22,65,195,27, +114,6,254,1,30,7,68,35,37,112,97,114,97,109,122,8,1,21,101,120,99, +101,112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,9,2,30, +10,2,2,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112,11,254, +1,30,12,2,2,1,24,97,112,112,108,121,45,112,97,116,116,101,114,110,45, +115,117,98,115,116,105,116,117,116,101,13,254,1,16,0,11,11,16,4,2,13, +2,6,2,4,2,11,38,11,16,2,73,115,121,110,116,97,120,45,99,97,115, +101,42,42,14,66,115,121,110,116,97,120,15,16,2,11,11,16,2,2,14,2, +15,34,36,95,16,5,93,78,112,97,116,116,101,114,110,45,115,117,98,115,116, +105,116,117,116,101,16,87,94,83,159,34,93,80,159,34,41,35,89,162,8,100, +37,45,64,108,111,111,112,17,223,0,28,248,22,63,196,12,87,94,27,248,22, +217,248,22,58,198,27,248,22,84,198,28,28,248,80,158,37,37,193,10,28,248, +80,158,37,38,193,28,249,22,77,248,22,217,248,80,158,40,34,196,21,102,63, +99,97,114,18,64,99,97,100,114,19,65,99,97,100,100,114,20,66,99,97,100, +100,100,114,21,63,99,100,114,22,64,99,100,100,114,23,65,99,100,100,100,114, +24,66,99,100,100,100,100,114,25,68,108,105,115,116,45,114,101,102,26,69,108, +105,115,116,45,116,97,105,108,27,28,248,80,158,37,38,248,80,158,38,35,194, +248,80,158,37,37,248,80,158,38,34,248,80,158,39,35,195,11,11,11,27,248, +22,215,194,27,250,22,122,200,196,11,28,192,250,22,121,201,198,195,250,22,121, +200,196,198,12,250,80,159,37,41,35,196,197,248,22,86,199,89,162,8,36,35, +56,9,223,0,27,248,80,158,36,34,248,80,158,37,35,196,27,248,80,158,37, +36,248,80,158,38,35,248,80,158,39,35,198,27,248,22,116,65,101,113,117,97, +108,28,27,247,22,116,87,94,250,80,159,41,41,35,196,195,197,27,28,248,22, +193,248,22,119,195,196,91,159,35,11,20,12,95,35,248,193,198,89,162,8,64, +35,42,2,17,224,2,0,28,248,22,56,195,27,248,194,248,22,58,197,27,248, +195,248,22,59,198,28,28,249,22,252,19,2,195,248,22,58,199,249,22,252,19, +2,194,248,22,59,199,11,196,249,22,57,195,194,28,248,22,47,195,27,250,22, +122,197,198,11,28,192,192,195,28,248,22,213,195,27,248,194,248,22,217,197,28, +249,22,252,19,2,248,22,217,198,194,195,251,22,216,199,196,199,199,28,248,22, +252,229,1,195,248,22,252,237,1,249,22,2,195,248,22,252,236,1,198,28,248, +22,113,195,248,22,111,248,194,248,22,114,197,194,250,22,216,20,15,159,42,34, +39,251,22,67,2,13,199,249,22,65,65,113,117,111,116,101,29,28,248,22,63, +205,9,28,250,22,122,205,248,22,217,248,22,58,23,17,11,249,32,30,89,162, +8,64,36,44,2,17,222,28,248,22,63,194,9,28,250,22,122,195,248,22,217, +248,22,58,198,11,27,248,22,86,195,28,248,22,63,193,9,28,250,22,122,196, +248,22,217,248,22,58,197,11,249,2,30,195,248,22,86,195,249,22,57,248,22, +58,195,249,2,30,197,248,22,86,197,249,22,57,248,22,58,196,27,248,22,86, +197,28,248,22,63,193,9,28,250,22,122,198,248,22,217,248,22,58,197,11,249, +2,30,197,248,22,86,195,249,22,57,248,22,58,195,249,2,30,199,248,22,86, +197,204,248,22,86,23,15,249,22,57,248,22,58,23,15,249,2,30,206,248,22, +86,23,17,28,248,22,63,203,9,28,250,22,122,203,248,22,217,248,22,58,23, +15,11,249,32,31,89,162,8,64,36,44,2,17,222,28,248,22,63,194,9,28, +250,22,122,195,248,22,217,248,22,58,198,11,27,248,22,86,195,28,248,22,63, +193,9,28,250,22,122,196,248,22,217,248,22,58,197,11,249,2,31,195,248,22, +86,195,249,22,57,248,22,84,195,249,2,31,197,248,22,86,197,249,22,57,248, +22,84,196,27,248,22,86,197,28,248,22,63,193,9,28,250,22,122,198,248,22, +217,248,22,58,197,11,249,2,31,197,248,22,86,195,249,22,57,248,22,84,195, +249,2,31,199,248,22,86,197,202,248,22,86,205,249,22,57,248,22,84,205,249, +2,31,204,248,22,86,23,15,201,34,20,99,159,35,16,5,30,32,65,35,37, +115,116,120,33,67,115,116,120,45,99,97,114,34,5,30,35,2,33,67,115,116, +120,45,99,100,114,36,6,30,37,2,33,69,115,116,120,45,62,108,105,115,116, +38,4,30,39,2,33,71,105,100,101,110,116,105,102,105,101,114,63,40,2,30, +41,2,33,69,115,116,120,45,112,97,105,114,63,42,11,16,1,18,101,64,104, +101,114,101,43,43,98,41,10,34,11,95,159,2,8,9,11,159,74,35,37,115, +109,97,108,108,45,115,99,104,101,109,101,44,9,11,159,2,33,9,11,16,14, +2,14,2,2,2,4,2,2,2,15,2,2,2,13,2,2,2,16,2,2,2, +11,2,2,2,6,2,2,98,40,10,35,11,95,159,64,35,37,115,99,45,9, +11,159,2,44,9,11,159,2,33,9,11,16,0,96,39,8,254,1,11,16,0, +16,4,38,11,63,115,116,120,46,3,1,7,101,110,118,50,56,53,51,47,16, +6,37,11,63,112,97,116,48,64,115,117,98,115,49,3,1,7,101,110,118,50, +56,53,52,50,2,50,16,6,36,11,69,104,116,45,99,111,109,109,111,110,51, +66,104,116,45,109,97,112,52,3,1,7,101,110,118,50,56,53,53,53,2,53, +16,4,35,11,71,110,101,119,45,112,97,116,116,101,114,110,54,3,1,7,101, +110,118,50,56,54,51,55,11,16,5,93,2,14,87,97,83,159,34,93,80,159, +34,8,41,35,89,162,8,36,44,8,41,2,17,223,0,28,248,22,63,200,251, +22,65,20,15,159,38,41,43,11,6,10,10,98,97,100,32,115,121,110,116,97, +120,56,197,27,26,10,80,159,45,8,41,35,204,205,206,23,15,23,16,23,17, +248,22,59,23,19,248,22,59,23,20,248,22,59,23,21,248,22,59,23,22,27, +248,22,58,202,27,248,22,58,204,27,248,22,58,206,27,248,22,58,23,16,91, +159,37,10,90,161,35,34,10,249,22,2,32,57,89,162,8,36,35,40,9,222, +28,248,22,213,193,192,27,248,22,58,194,28,248,22,213,193,192,27,248,22,58, +194,28,248,22,213,193,192,248,32,58,89,162,8,100,35,40,2,17,222,28,248, +22,213,193,192,27,248,22,58,194,28,248,22,213,193,192,27,248,22,58,194,28, +248,22,213,193,192,27,248,22,58,194,28,248,22,213,193,192,248,2,58,248,22, +58,194,248,22,58,194,198,90,161,35,35,10,249,22,2,32,59,89,162,8,36, +35,38,9,222,250,22,216,195,247,22,54,11,209,90,161,35,36,10,248,22,178, +248,22,70,209,27,28,248,22,58,23,18,248,22,65,20,15,159,44,42,43,200, +27,252,80,158,49,41,23,19,205,205,248,80,158,50,35,23,21,248,22,252,17, +2,23,19,27,28,206,249,22,252,21,2,195,21,95,66,108,97,109,98,100,97, +60,93,61,101,61,2,61,249,22,252,21,2,195,21,95,2,60,94,2,61,79, +109,111,100,117,108,101,45,105,100,101,110,116,105,102,105,101,114,61,63,62,2, +61,27,250,22,65,20,15,159,49,43,43,248,22,65,249,22,65,23,20,28,199, +23,19,250,22,67,250,22,216,20,15,159,58,44,43,206,23,22,23,22,28,23, +24,9,248,22,65,23,28,251,22,65,20,15,159,53,45,43,28,200,10,23,21, +250,22,65,20,15,159,56,46,43,250,22,2,89,162,8,36,36,47,9,226,25, +27,19,17,249,22,65,199,27,249,80,158,42,42,201,212,27,28,249,22,188,214, +195,28,249,22,252,19,2,195,34,64,116,97,105,108,63,28,249,22,252,19,2, +195,35,20,15,159,41,47,43,28,249,22,252,19,2,195,36,20,15,159,41,48, +43,28,249,22,252,19,2,195,37,20,15,159,41,49,43,28,249,22,252,19,2, +195,38,20,15,159,41,50,43,2,63,28,249,22,252,19,2,195,34,20,15,159, +41,51,43,28,249,22,252,19,2,195,35,20,15,159,41,52,43,28,249,22,252, +19,2,195,36,20,15,159,41,53,43,28,249,22,252,19,2,195,37,20,15,159, +41,54,43,11,28,249,22,252,19,2,194,2,63,28,248,22,193,194,198,250,22, +65,20,15,159,44,55,43,201,196,28,192,249,22,65,194,200,250,22,65,20,15, +159,44,56,43,201,196,24,17,24,18,251,22,65,20,15,159,8,26,57,43,251, +22,2,80,159,8,30,8,42,35,24,22,23,26,24,23,9,28,23,23,251,22, +65,20,15,159,8,30,8,26,43,23,27,23,25,23,21,23,21,202,28,201,250, +22,65,20,15,159,49,8,27,43,248,22,65,249,22,65,68,116,114,121,45,110, +101,120,116,64,250,22,65,20,15,159,55,8,28,43,247,22,65,23,20,195,192, +83,159,34,93,80,159,34,8,42,35,89,162,8,36,37,49,9,223,0,249,22, +65,248,22,65,196,250,22,65,20,15,159,39,58,43,28,248,22,213,200,34,27, +248,22,58,201,28,248,22,213,193,35,27,248,22,58,194,28,248,22,213,193,36, +249,32,65,89,162,8,100,36,45,2,17,222,28,248,22,213,193,193,27,248,22, +58,194,27,248,22,177,196,28,248,22,213,194,192,27,248,22,58,195,27,248,22, +177,195,28,248,22,213,194,192,27,248,22,58,195,27,248,22,177,195,28,248,22, +213,194,192,249,2,65,248,22,58,196,248,22,177,195,248,22,58,195,37,249,22, +65,20,15,159,41,59,43,202,83,159,34,93,80,159,34,8,40,35,89,162,34, +35,39,9,223,0,27,248,80,158,36,39,248,80,158,37,39,196,28,248,80,158, +36,38,193,248,80,158,36,37,193,248,80,158,36,37,248,80,158,37,39,196,83, +159,34,93,80,159,34,8,39,35,89,162,34,35,39,9,223,0,28,248,80,158, +35,38,248,80,158,36,39,248,80,158,37,39,196,248,80,158,35,37,248,80,158, +36,39,195,11,89,162,8,36,35,8,33,9,223,0,91,159,35,10,90,161,35, +34,10,28,248,80,158,36,34,195,248,22,59,248,80,158,37,35,196,11,87,94, +28,28,248,80,158,36,34,195,249,22,190,248,22,70,210,37,11,12,250,22,252, +47,2,11,6,8,8,98,97,100,32,102,111,114,109,66,197,27,248,22,58,209, +27,248,22,84,210,27,248,22,93,211,27,248,22,96,212,27,248,22,96,248,22, +59,214,27,248,22,95,248,22,59,215,87,96,28,248,80,158,42,34,195,12,250, +22,252,47,2,248,22,217,201,6,56,56,101,120,112,101,99,116,101,100,32,97, +32,112,97,114,101,110,116,104,101,115,105,122,101,100,32,115,101,113,117,101,110, +99,101,32,111,102,32,108,105,116,101,114,97,108,32,105,100,101,110,116,105,102, +105,101,114,115,67,197,249,22,3,89,162,34,35,41,9,224,9,7,28,248,80, +158,36,36,195,12,250,22,252,47,2,248,22,217,196,6,28,28,108,105,116,101, +114,97,108,32,105,115,32,110,111,116,32,97,110,32,105,100,101,110,116,105,102, +105,101,114,68,197,248,80,158,44,35,197,249,22,3,89,162,34,35,42,9,224, +9,7,28,28,248,80,158,36,34,195,250,22,191,36,248,22,70,248,80,158,40, +35,199,37,11,12,250,22,252,47,2,248,22,217,196,6,10,10,98,97,100,32, +99,108,97,117,115,101,69,197,194,27,249,22,2,80,158,44,37,195,27,249,22, +2,80,159,45,8,39,35,196,27,249,22,2,80,159,46,8,40,35,197,27,20, +15,159,45,34,43,27,20,15,159,46,35,43,27,249,22,2,89,162,34,35,43, +9,225,15,10,13,251,80,158,40,40,196,199,199,248,80,158,41,35,198,248,80, +158,50,35,200,27,28,248,80,158,49,36,201,249,22,230,202,20,15,159,50,36, +43,11,250,22,216,20,15,159,51,37,43,250,22,65,20,15,159,54,38,43,248, +22,65,249,22,65,204,28,248,22,217,23,21,23,19,250,22,65,20,15,159,8, +26,39,43,249,22,65,20,15,159,8,28,40,43,249,22,216,23,26,2,43,23, +22,26,10,80,159,8,30,8,41,35,23,19,23,18,23,16,23,28,23,25,23, +24,23,22,23,21,23,17,23,20,23,18,34,20,99,159,38,16,9,30,70,2, +33,69,115,116,120,45,108,105,115,116,63,71,8,2,37,2,39,2,32,2,41, +2,35,30,72,2,45,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115, +73,0,30,74,2,45,74,109,97,107,101,45,109,97,116,99,104,38,101,110,118, +75,1,30,76,2,45,72,115,116,120,45,109,101,109,113,45,112,111,115,77,5, +16,29,18,102,63,97,114,103,78,49,41,40,39,16,4,48,11,61,120,79,3, +1,7,101,110,118,50,56,55,53,80,16,4,47,11,61,108,81,3,1,7,101, +110,118,50,56,55,55,82,16,4,46,11,2,81,3,1,7,101,110,118,50,56, +55,57,83,16,14,45,11,63,119,104,111,84,71,97,114,103,45,105,115,45,115, +116,120,63,85,64,101,120,112,114,86,63,107,119,115,87,68,108,105,116,45,99, +111,109,112,88,67,99,108,97,117,115,101,115,89,3,1,7,101,110,118,50,56, +56,48,90,2,90,2,90,2,90,2,90,2,90,16,8,44,11,68,112,97,116, +116,101,114,110,115,91,67,102,101,110,100,101,114,115,92,67,97,110,115,119,101, +114,115,93,3,1,7,101,110,118,50,56,56,52,94,2,94,2,94,18,103,64, +114,115,108,116,95,51,41,40,39,48,47,46,45,44,16,4,50,11,2,78,3, +1,7,101,110,118,50,56,56,56,96,18,103,2,62,53,41,40,39,48,47,46, +45,44,16,8,52,11,2,78,2,95,73,112,97,116,116,101,114,110,45,118,97, +114,115,115,97,2,96,2,96,2,96,18,103,2,43,55,41,40,39,48,47,46, +45,44,16,10,54,11,2,78,2,95,2,97,76,108,105,116,45,99,111,109,112, +45,105,115,45,109,111,100,63,98,2,96,2,96,2,96,2,96,18,16,2,158, +63,108,101,116,99,55,56,18,16,2,158,1,20,100,97,116,117,109,45,62,115, +121,110,116,97,120,45,111,98,106,101,99,116,100,55,57,18,16,2,158,72,113, +117,111,116,101,45,115,121,110,116,97,120,101,55,58,18,105,78,114,97,105,115, +101,45,115,121,110,116,97,120,45,101,114,114,111,114,102,8,27,41,40,39,48, +47,46,45,44,54,16,4,8,26,11,2,17,3,1,7,101,110,118,50,56,57, +48,103,16,10,59,11,2,91,2,92,1,20,117,110,102,108,97,116,45,112,97, +116,116,101,114,110,45,118,97,114,115,115,104,2,93,3,1,7,101,110,118,50, +56,57,49,105,2,105,2,105,2,105,18,109,2,64,8,32,41,40,39,48,47, +46,45,44,54,8,26,59,16,4,8,31,11,64,114,101,115,116,106,3,1,7, +101,110,118,50,56,57,50,107,16,10,8,30,11,67,112,97,116,116,101,114,110, +108,66,102,101,110,100,101,114,109,79,117,110,102,108,97,116,45,112,97,116,116, +101,114,110,45,118,97,114,115,110,66,97,110,115,119,101,114,111,3,1,7,101, +110,118,50,56,57,51,112,2,112,2,112,2,112,16,8,8,29,11,76,116,97, +105,108,45,112,97,116,116,101,114,110,45,118,97,114,113,69,116,101,109,112,45, +118,97,114,115,114,72,112,97,116,116,101,114,110,45,118,97,114,115,115,3,1, +7,101,110,118,50,56,57,57,116,3,1,7,101,110,118,50,56,57,55,117,3, +1,7,101,110,118,50,56,57,53,118,16,8,8,28,11,2,113,2,114,2,115, +3,1,7,101,110,118,50,57,48,49,119,2,119,2,119,18,110,2,99,8,35, +41,40,39,48,47,46,45,44,54,8,26,59,8,31,8,30,8,29,16,8,8, +34,11,2,113,2,114,2,115,2,119,2,119,2,119,16,8,8,33,11,71,100, +111,45,116,114,121,45,110,101,120,116,120,64,109,116,99,104,121,70,99,97,110, +116,45,102,97,105,108,63,122,3,1,7,101,110,118,50,57,48,54,123,2,123, +2,123,18,16,2,158,2,43,8,35,8,36,18,16,2,158,62,105,102,124,8, +35,8,37,18,16,2,158,2,99,8,35,8,38,18,112,2,22,8,41,41,40, +39,48,47,46,45,44,54,8,26,59,8,31,8,30,8,29,8,34,8,33,16, +6,8,40,11,71,112,97,116,116,101,114,110,45,118,97,114,125,68,116,101,109, +112,45,118,97,114,126,3,1,7,101,110,118,50,57,48,55,127,2,127,16,4, +8,39,11,63,112,111,115,128,3,1,7,101,110,118,50,57,48,56,129,18,16, +2,158,2,23,8,41,8,42,18,16,2,158,2,24,8,41,8,43,18,16,2, +158,2,25,8,41,8,44,18,16,2,158,2,18,8,41,8,45,18,16,2,158, +2,19,8,41,8,46,18,16,2,158,2,20,8,41,8,47,18,16,2,158,2, +21,8,41,8,48,18,113,2,27,8,50,41,40,39,48,47,46,45,44,54,8, +26,59,8,31,8,30,8,29,8,34,8,33,8,40,8,39,16,4,8,49,11, +68,97,99,99,101,115,115,111,114,130,3,1,7,101,110,118,50,57,48,57,131, +18,16,2,158,2,26,8,50,8,51,18,16,2,158,1,22,108,101,116,114,101, +99,45,115,121,110,116,97,120,101,115,43,118,97,108,117,101,115,132,8,35,8, +52,18,111,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105, +110,103,133,8,54,41,40,39,48,47,46,45,44,54,8,26,59,8,31,8,30, +8,29,8,34,8,33,16,8,8,53,11,2,125,78,117,110,102,108,97,116,45, +112,97,116,116,101,114,110,45,118,97,114,134,2,126,3,1,7,101,110,118,50, +57,49,48,135,2,135,2,135,18,16,2,158,2,101,8,54,8,55,18,8,37, +18,110,2,99,8,58,41,40,39,48,47,46,45,44,54,8,26,59,8,31,8, +30,8,29,16,8,8,57,11,2,113,2,114,2,115,2,119,2,119,2,119,16, +10,8,56,11,2,120,2,121,2,122,61,109,136,2,123,2,123,2,123,2,123, +18,16,2,158,2,60,8,58,8,59,11,16,5,93,2,15,87,96,83,159,34, +93,80,159,34,51,35,89,162,8,64,37,50,2,17,223,0,28,248,22,63,196, +9,28,248,22,58,196,249,22,57,250,22,216,248,22,58,200,248,22,217,248,80, +158,41,42,248,22,58,203,198,27,248,22,59,198,27,248,22,59,200,28,248,22, +63,193,9,28,248,22,58,193,249,22,57,250,22,216,248,22,58,199,248,22,217, +248,80,158,45,42,248,22,58,200,202,250,80,159,43,51,35,202,248,22,59,199, +248,22,59,198,250,80,159,41,51,35,200,248,22,59,197,248,22,59,196,27,248, +22,59,196,27,248,22,59,198,28,248,22,63,193,9,28,248,22,58,193,249,22, +57,250,22,216,248,22,58,199,248,22,217,248,80,158,43,42,248,22,58,200,200, +250,80,159,41,51,35,200,248,22,59,199,248,22,59,198,250,80,159,39,51,35, +198,248,22,59,197,248,22,59,196,83,159,34,93,80,159,34,50,35,89,162,8, +64,36,58,2,17,223,0,28,248,22,63,195,9,27,249,80,159,37,50,35,248, +22,59,197,248,22,59,198,28,248,22,58,196,249,22,57,27,248,22,58,198,27, +248,80,158,40,41,248,22,58,201,28,248,22,193,193,193,27,248,22,65,195,27, 248,22,178,195,28,248,22,193,193,193,27,248,22,65,195,27,248,22,178,195,28, -248,22,193,193,193,249,32,139,89,162,8,64,36,45,2,19,222,28,248,22,193, -194,192,27,248,22,65,194,27,248,22,178,196,28,248,22,193,193,193,27,248,22, -65,195,27,248,22,178,195,28,248,22,193,193,193,27,248,22,65,195,27,248,22, -178,195,28,248,22,193,193,193,249,2,139,248,22,65,196,248,22,178,195,248,22, -65,196,248,22,178,195,194,192,83,159,34,93,80,159,34,49,35,89,162,8,36, -35,39,9,223,0,27,249,22,252,101,3,196,32,140,89,162,8,44,34,34,9, -222,11,28,248,80,158,36,39,193,192,11,89,162,8,36,35,56,9,223,0,91, -159,35,10,90,161,35,34,10,20,15,159,35,34,44,87,94,28,28,248,80,158, -36,34,195,27,248,80,158,37,35,196,28,248,80,158,37,34,193,248,80,158,37, -36,248,80,158,38,35,194,11,11,12,250,22,252,47,2,11,6,8,8,98,97, -100,32,102,111,114,109,141,197,250,22,216,210,27,248,80,158,40,37,248,80,158, -41,35,200,27,251,80,158,44,38,197,11,9,11,27,249,22,2,80,159,43,49, -35,195,28,28,28,248,22,63,193,10,248,22,252,17,2,249,22,5,32,142,89, -162,8,36,35,35,9,222,192,195,248,80,158,42,40,195,11,249,22,65,20,15, -159,43,35,44,196,27,249,80,159,44,50,35,196,195,27,28,248,22,63,195,9, -27,27,248,22,59,198,27,248,22,59,198,28,248,22,63,193,9,27,249,32,143, -89,162,8,64,36,46,2,19,222,28,248,22,63,194,9,27,27,248,22,59,195, -27,248,22,59,197,28,248,22,63,193,9,27,27,248,22,59,196,27,248,22,59, -196,28,248,22,63,193,9,27,249,2,143,248,22,59,197,248,22,59,196,28,248, -22,58,194,192,249,22,57,248,22,58,197,194,28,248,22,58,194,192,249,22,57, -248,22,58,197,194,28,248,22,58,195,192,249,22,57,248,22,58,196,194,248,22, -59,197,248,22,59,196,28,248,22,58,194,192,249,22,57,248,22,58,197,194,28, -248,22,58,196,192,249,22,57,248,22,58,199,194,27,251,80,158,48,38,201,198, -197,201,27,28,248,22,63,197,9,28,248,22,58,197,249,22,57,250,22,216,248, -22,58,203,248,22,217,248,80,158,52,42,248,22,58,204,23,17,250,80,159,50, -51,35,23,17,248,22,59,203,248,22,59,202,250,80,159,48,51,35,23,15,248, -22,59,201,248,22,59,200,28,248,80,158,46,43,199,248,22,58,193,249,22,65, -250,22,216,24,15,198,203,27,248,22,70,196,28,248,22,193,193,20,15,159,48, -36,44,28,249,22,188,194,35,248,22,58,196,249,22,57,20,15,159,50,37,44, -197,197,34,20,99,159,37,16,10,2,43,2,37,30,144,2,35,69,115,116,120, -45,110,117,108,108,63,145,10,2,34,30,146,2,47,72,109,97,107,101,45,112, -101,120,112,97,110,100,147,2,30,148,2,47,75,115,121,110,116,97,120,45,109, -97,112,112,105,110,103,63,149,8,30,150,2,47,72,110,111,45,101,108,108,105, -112,115,101,115,63,151,4,30,152,2,47,1,20,115,121,110,116,97,120,45,109, -97,112,112,105,110,103,45,100,101,112,116,104,153,6,30,154,2,47,1,21,115, -121,110,116,97,120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,155, -7,2,41,16,4,18,100,2,45,8,63,41,40,39,16,4,8,62,11,2,81, -3,1,7,101,110,118,50,57,49,50,156,16,4,8,61,11,68,104,101,114,101, -45,115,116,120,157,3,1,7,101,110,118,50,57,49,52,158,16,4,8,60,11, -2,157,2,158,18,103,2,103,8,69,41,40,39,8,62,16,4,8,68,11,2, -157,2,158,16,4,8,67,11,2,157,3,1,7,101,110,118,50,57,49,54,159, -16,4,8,66,11,2,110,3,1,7,101,110,118,50,57,49,56,160,16,4,8, -65,11,71,117,110,105,113,117,101,45,118,97,114,115,161,3,1,7,101,110,118, -50,57,49,57,162,16,4,8,64,11,72,118,97,114,45,98,105,110,100,105,110, -103,115,163,3,1,7,101,110,118,50,57,50,48,164,18,106,9,8,73,41,40, -39,8,62,8,68,8,67,8,66,8,65,8,64,16,6,8,72,11,67,112,114, -111,116,111,45,114,165,76,110,111,110,45,112,97,116,116,101,114,110,45,118,97, -114,115,166,3,1,7,101,110,118,50,57,50,54,167,2,167,16,6,8,71,11, -79,98,117,105,108,100,45,102,114,111,109,45,116,101,109,112,108,97,116,101,168, -61,114,169,3,1,7,101,110,118,50,57,51,53,170,2,170,16,4,8,70,11, -63,108,101,110,171,3,1,7,101,110,118,50,57,51,56,172,18,16,2,158,65, -108,105,115,116,42,173,8,73,8,74,11,96,83,159,34,93,80,159,34,34,35, -32,174,89,162,8,36,36,42,2,4,222,28,248,22,213,194,193,27,252,22,216, -198,199,198,11,198,27,249,22,225,196,71,112,97,114,101,110,45,115,104,97,112, -101,175,28,192,250,22,225,196,2,175,195,193,83,159,34,93,80,159,34,35,35, -89,162,34,37,39,2,6,223,0,247,248,22,8,89,162,8,32,35,44,9,226, -1,4,3,2,20,14,159,80,158,37,36,250,80,158,40,37,249,22,25,11,80, -158,42,36,22,252,193,2,89,162,34,35,39,9,225,5,4,7,248,193,89,162, -34,34,41,9,225,3,2,4,28,248,22,252,190,2,193,248,22,252,195,2,193, -251,22,252,47,2,2,17,6,47,47,105,110,99,111,109,112,97,116,105,98,108, -101,32,101,108,108,105,112,115,105,115,32,109,97,116,99,104,32,99,111,117,110, -116,115,32,102,111,114,32,116,101,109,112,108,97,116,101,176,197,198,27,247,193, -89,162,8,36,34,35,9,223,0,192,83,159,34,93,80,159,34,38,35,65,100, -117,109,109,121,177,83,159,34,93,80,159,34,39,35,89,162,8,37,37,40,2, -15,223,0,91,159,35,11,20,12,95,35,248,193,195,89,162,8,64,35,46,2, -19,226,1,4,3,0,28,248,22,56,197,27,248,194,248,22,58,199,27,248,195, -248,22,59,200,28,28,249,22,252,19,2,195,248,22,58,201,249,22,252,19,2, -194,248,22,59,201,11,198,249,22,57,195,194,28,248,22,47,197,28,248,22,63, -194,196,28,249,22,252,19,2,198,248,22,58,196,248,22,58,195,27,248,22,59, -195,27,248,22,59,197,28,248,22,63,194,198,28,249,22,252,19,2,200,248,22, -58,196,248,22,58,193,250,32,178,89,162,8,64,37,45,65,115,108,111,111,112, -179,222,28,248,22,63,194,192,28,249,22,252,19,2,194,248,22,58,196,248,22, -58,195,27,248,22,59,195,27,248,22,59,197,28,248,22,63,194,194,28,249,22, -252,19,2,196,248,22,58,196,248,22,58,193,27,248,22,59,195,27,248,22,59, -195,28,248,22,63,194,196,28,249,22,252,19,2,198,248,22,58,196,248,22,58, -193,250,2,178,199,248,22,59,197,248,22,59,196,201,248,22,59,197,248,22,59, -196,28,248,22,213,197,27,248,194,248,22,217,199,28,249,22,252,19,2,248,22, -217,200,194,197,28,248,22,213,193,192,27,252,22,216,203,198,203,11,203,27,249, -22,225,201,2,175,28,192,250,22,225,196,2,175,195,193,28,248,22,252,229,1, -197,248,22,252,237,1,249,22,2,195,248,22,252,236,1,200,28,248,22,113,197, -248,22,111,248,194,248,22,114,199,196,96,68,35,37,107,101,114,110,101,108,180, -2,35,2,46,2,8,96,2,35,2,46,2,47,2,180,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6399); +248,22,193,193,193,27,248,22,65,195,27,248,22,178,195,28,248,22,193,193,193, +27,248,22,65,195,27,248,22,178,195,28,248,22,193,193,193,27,248,22,65,195, +27,248,22,178,195,28,248,22,193,193,193,27,248,22,65,195,27,248,22,178,195, +28,248,22,193,193,193,249,32,137,89,162,8,64,36,45,2,17,222,28,248,22, +193,194,192,27,248,22,65,194,27,248,22,178,196,28,248,22,193,193,193,27,248, +22,65,195,27,248,22,178,195,28,248,22,193,193,193,27,248,22,65,195,27,248, +22,178,195,28,248,22,193,193,193,249,2,137,248,22,65,196,248,22,178,195,248, +22,65,196,248,22,178,195,194,192,83,159,34,93,80,159,34,49,35,89,162,8, +36,35,39,9,223,0,27,249,22,252,103,3,196,32,138,89,162,8,44,34,34, +9,222,11,28,248,80,158,36,39,193,192,11,89,162,8,36,35,56,9,223,0, +91,159,35,10,90,161,35,34,10,20,15,159,35,34,44,87,94,28,28,248,80, +158,36,34,195,27,248,80,158,37,35,196,28,248,80,158,37,34,193,248,80,158, +37,36,248,80,158,38,35,194,11,11,12,250,22,252,47,2,11,6,8,8,98, +97,100,32,102,111,114,109,139,197,250,22,216,210,27,248,80,158,40,37,248,80, +158,41,35,200,27,251,80,158,44,38,197,11,9,11,27,249,22,2,80,159,43, +49,35,195,28,28,28,248,22,63,193,10,248,22,252,17,2,249,22,5,32,140, +89,162,8,36,35,35,9,222,192,195,248,80,158,42,40,195,11,249,22,65,20, +15,159,43,35,44,196,27,249,80,159,44,50,35,196,195,27,28,248,22,63,195, +9,27,27,248,22,59,198,27,248,22,59,198,28,248,22,63,193,9,27,249,32, +141,89,162,8,64,36,46,2,17,222,28,248,22,63,194,9,27,27,248,22,59, +195,27,248,22,59,197,28,248,22,63,193,9,27,27,248,22,59,196,27,248,22, +59,196,28,248,22,63,193,9,27,249,2,141,248,22,59,197,248,22,59,196,28, +248,22,58,194,192,249,22,57,248,22,58,197,194,28,248,22,58,194,192,249,22, +57,248,22,58,197,194,28,248,22,58,195,192,249,22,57,248,22,58,196,194,248, +22,59,197,248,22,59,196,28,248,22,58,194,192,249,22,57,248,22,58,197,194, +28,248,22,58,196,192,249,22,57,248,22,58,199,194,27,251,80,158,48,38,201, +198,197,201,27,28,248,22,63,197,9,28,248,22,58,197,249,22,57,250,22,216, +248,22,58,203,248,22,217,248,80,158,52,42,248,22,58,204,23,17,250,80,159, +50,51,35,23,17,248,22,59,203,248,22,59,202,250,80,159,48,51,35,23,15, +248,22,59,201,248,22,59,200,28,248,80,158,46,43,199,248,22,58,193,249,22, +65,250,22,216,24,15,198,203,27,248,22,70,196,28,248,22,193,193,20,15,159, +48,36,44,28,249,22,188,194,35,248,22,58,196,249,22,57,20,15,159,50,37, +44,197,197,34,20,99,159,37,16,10,2,41,2,35,30,142,2,33,69,115,116, +120,45,110,117,108,108,63,143,10,2,32,30,144,2,45,72,109,97,107,101,45, +112,101,120,112,97,110,100,145,2,30,146,2,45,75,115,121,110,116,97,120,45, +109,97,112,112,105,110,103,63,147,8,30,148,2,45,72,110,111,45,101,108,108, +105,112,115,101,115,63,149,4,30,150,2,45,1,20,115,121,110,116,97,120,45, +109,97,112,112,105,110,103,45,100,101,112,116,104,151,6,30,152,2,45,1,21, +115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114, +153,7,2,39,16,4,18,100,2,43,8,63,41,40,39,16,4,8,62,11,2, +79,3,1,7,101,110,118,50,57,49,52,154,16,4,8,61,11,68,104,101,114, +101,45,115,116,120,155,3,1,7,101,110,118,50,57,49,54,156,16,4,8,60, +11,2,155,2,156,18,103,2,101,8,69,41,40,39,8,62,16,4,8,68,11, +2,155,2,156,16,4,8,67,11,2,155,3,1,7,101,110,118,50,57,49,56, +157,16,4,8,66,11,2,108,3,1,7,101,110,118,50,57,50,48,158,16,4, +8,65,11,71,117,110,105,113,117,101,45,118,97,114,115,159,3,1,7,101,110, +118,50,57,50,49,160,16,4,8,64,11,72,118,97,114,45,98,105,110,100,105, +110,103,115,161,3,1,7,101,110,118,50,57,50,50,162,18,106,9,8,73,41, +40,39,8,62,8,68,8,67,8,66,8,65,8,64,16,6,8,72,11,67,112, +114,111,116,111,45,114,163,76,110,111,110,45,112,97,116,116,101,114,110,45,118, +97,114,115,164,3,1,7,101,110,118,50,57,50,56,165,2,165,16,6,8,71, +11,79,98,117,105,108,100,45,102,114,111,109,45,116,101,109,112,108,97,116,101, +166,61,114,167,3,1,7,101,110,118,50,57,51,55,168,2,168,16,4,8,70, +11,63,108,101,110,169,3,1,7,101,110,118,50,57,52,48,170,18,16,2,158, +65,108,105,115,116,42,171,8,73,8,74,11,96,83,159,34,93,80,159,34,34, +35,32,172,89,162,8,36,36,42,2,4,222,28,248,22,213,194,193,27,252,22, +216,198,199,198,11,198,27,249,22,225,196,71,112,97,114,101,110,45,115,104,97, +112,101,173,28,192,250,22,225,196,2,173,195,193,83,159,34,93,80,159,34,35, +35,89,162,34,37,39,2,6,223,0,247,248,22,8,89,162,8,32,35,40,9, +226,1,4,3,2,20,14,159,80,158,37,36,89,162,34,35,39,9,225,2,1, +4,248,193,89,162,34,34,41,9,225,3,2,4,28,248,22,252,193,2,193,248, +22,252,197,2,193,251,22,252,47,2,2,15,6,47,47,105,110,99,111,109,112, +97,116,105,98,108,101,32,101,108,108,105,112,115,105,115,32,109,97,116,99,104, +32,99,111,117,110,116,115,32,102,111,114,32,116,101,109,112,108,97,116,101,174, +197,198,27,247,193,89,162,8,36,34,35,9,223,0,192,83,159,34,93,80,159, +34,37,35,65,100,117,109,109,121,175,83,159,34,93,80,159,34,38,35,89,162, +8,37,37,40,2,13,223,0,91,159,35,11,20,12,95,35,248,193,195,89,162, +8,64,35,46,2,17,226,1,4,3,0,28,248,22,56,197,27,248,194,248,22, +58,199,27,248,195,248,22,59,200,28,28,249,22,252,19,2,195,248,22,58,201, +249,22,252,19,2,194,248,22,59,201,11,198,249,22,57,195,194,28,248,22,47, +197,28,248,22,63,194,196,28,249,22,252,19,2,198,248,22,58,196,248,22,58, +195,27,248,22,59,195,27,248,22,59,197,28,248,22,63,194,198,28,249,22,252, +19,2,200,248,22,58,196,248,22,58,193,250,32,176,89,162,8,64,37,45,65, +115,108,111,111,112,177,222,28,248,22,63,194,192,28,249,22,252,19,2,194,248, +22,58,196,248,22,58,195,27,248,22,59,195,27,248,22,59,197,28,248,22,63, +194,194,28,249,22,252,19,2,196,248,22,58,196,248,22,58,193,27,248,22,59, +195,27,248,22,59,195,28,248,22,63,194,196,28,249,22,252,19,2,198,248,22, +58,196,248,22,58,193,250,2,176,199,248,22,59,197,248,22,59,196,201,248,22, +59,197,248,22,59,196,28,248,22,213,197,27,248,194,248,22,217,199,28,249,22, +252,19,2,248,22,217,200,194,197,28,248,22,213,193,192,27,252,22,216,203,198, +203,11,203,27,249,22,225,201,2,173,28,192,250,22,225,196,2,173,195,193,28, +248,22,252,229,1,197,248,22,252,237,1,249,22,2,195,248,22,252,236,1,200, +28,248,22,113,197,248,22,111,248,194,248,22,114,199,196,96,68,35,37,107,101, +114,110,101,108,178,2,33,2,44,2,8,96,2,33,2,44,2,45,2,178,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6362); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,81,252,148,6,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,81,252,148,6,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,68,35,37,115,116, 120,108,111,99,1,29,2,11,11,10,10,10,34,80,158,34,34,20,99,159,34, 16,1,30,3,2,2,68,114,101,108,111,99,97,116,101,4,254,1,16,0,11, -11,16,1,2,4,35,11,16,3,71,115,121,110,116,97,120,45,99,97,115,101, -5,72,115,121,110,116,97,120,45,99,97,115,101,42,6,70,115,121,110,116,97, +11,16,1,2,4,35,11,16,3,72,115,121,110,116,97,120,45,99,97,115,101, +42,5,71,115,121,110,116,97,120,45,99,97,115,101,6,70,115,121,110,116,97, 120,47,108,111,99,7,16,3,11,11,11,16,3,2,5,2,6,2,7,34,37, -95,16,5,93,2,6,89,162,34,35,51,9,223,0,27,28,248,80,158,36,34, +95,16,5,93,2,5,89,162,34,35,51,9,223,0,27,28,248,80,158,36,34, 195,249,80,158,37,35,248,80,158,38,36,197,27,248,80,158,39,37,198,28,248, 80,158,39,34,193,249,80,158,40,35,248,80,158,41,36,195,27,248,80,158,42, 37,196,28,248,80,158,42,34,193,249,80,158,43,35,248,80,158,44,36,195,27, 248,80,158,45,37,196,28,248,80,158,45,34,193,249,80,158,46,35,248,80,158, 47,36,195,27,248,80,158,48,37,196,28,248,80,158,48,38,193,248,80,158,48, 39,193,11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248, -22,93,196,27,248,22,96,197,27,248,22,95,198,27,252,22,67,202,198,199,200, -201,254,80,158,48,40,20,15,159,48,34,41,21,97,3,1,4,103,52,56,56, +22,93,196,27,248,22,96,197,27,248,22,95,198,27,252,22,67,200,201,198,202, +199,254,80,158,48,40,20,15,159,48,34,41,21,97,3,1,4,103,52,56,56, 8,3,1,4,103,52,56,55,9,3,1,4,103,52,56,54,10,3,1,4,103, -52,56,53,11,3,1,4,103,52,56,52,12,248,22,58,200,248,22,95,200,248, -22,96,200,248,22,93,200,248,22,84,200,250,22,252,47,2,11,6,10,10,98, +52,56,53,11,3,1,4,103,52,56,52,12,248,22,96,200,248,22,84,200,248, +22,58,200,248,22,95,200,248,22,93,200,250,22,252,47,2,11,6,10,10,98, 97,100,32,115,121,110,116,97,120,13,197,34,20,99,159,34,16,7,30,14,65, 35,37,115,116,120,15,69,115,116,120,45,112,97,105,114,63,16,11,30,17,2, 15,67,99,111,110,115,47,35,102,18,1,30,19,2,15,67,115,116,120,45,99, @@ -1684,30 +1683,30 @@ 37,113,113,45,97,110,100,45,111,114,32,9,11,16,8,2,5,2,2,2,4, 2,2,2,6,2,2,2,7,2,2,98,39,10,35,11,94,159,64,35,37,115, 99,33,9,11,159,2,28,9,11,16,0,96,38,8,254,1,11,16,0,16,4, -37,11,63,115,116,120,34,3,1,7,101,110,118,50,57,54,48,35,16,12,36, +37,11,63,115,116,120,34,3,1,7,101,110,118,50,57,54,50,35,16,12,36, 11,3,1,4,103,52,55,57,36,3,1,4,103,52,56,48,37,3,1,4,103, 52,56,49,38,3,1,4,103,52,56,50,39,3,1,4,103,52,56,51,40,3, -1,7,101,110,118,50,57,54,56,41,2,41,2,41,2,41,2,41,16,12,35, +1,7,101,110,118,50,57,55,48,41,2,41,2,41,2,41,2,41,16,12,35, 11,61,95,42,64,115,116,120,101,43,62,107,108,44,64,105,100,61,63,45,66, -99,108,97,117,115,101,46,3,1,7,101,110,118,50,57,54,57,47,2,47,2, +99,108,97,117,115,101,46,3,1,7,101,110,118,50,57,55,49,47,2,47,2, 47,2,47,2,47,158,2,8,42,158,11,42,158,2,9,42,158,2,10,42,158, -2,11,42,2,12,42,42,11,16,5,93,2,5,89,162,34,35,49,9,223,0, +2,11,42,2,12,42,42,11,16,5,93,2,6,89,162,34,35,49,9,223,0, 27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197,27,248, 80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,35,248,80,158,41, 36,195,27,248,80,158,42,37,196,28,248,80,158,42,34,193,249,80,158,43,35, 248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80,158,45,38,193,248, 80,158,45,39,193,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195, -27,248,22,93,196,27,248,22,94,197,27,251,22,67,200,197,198,199,253,80,158, +27,248,22,93,196,27,248,22,94,197,27,251,22,67,198,199,197,200,253,80,158, 46,40,20,15,159,46,34,41,21,96,3,1,4,103,52,57,54,48,3,1,4, 103,52,57,53,49,3,1,4,103,52,57,52,50,3,1,4,103,52,57,51,51, -248,22,58,199,248,22,94,199,248,22,93,199,248,22,84,199,250,22,252,47,2, +248,22,94,199,248,22,84,199,248,22,58,199,248,22,93,199,250,22,252,47,2, 11,2,13,197,34,20,99,159,34,16,7,2,14,2,17,2,19,2,21,2,23, 2,25,2,27,16,1,18,158,165,40,100,2,30,46,40,39,38,16,4,45,11, -2,34,3,1,7,101,110,118,50,57,56,51,52,16,10,44,11,3,1,4,103, +2,34,3,1,7,101,110,118,50,57,56,53,52,16,10,44,11,3,1,4,103, 52,56,57,53,3,1,4,103,52,57,48,54,3,1,4,103,52,57,49,55,3, -1,4,103,52,57,50,56,3,1,7,101,110,118,50,57,57,48,57,2,57,2, +1,4,103,52,57,50,56,3,1,7,101,110,118,50,57,57,50,57,2,57,2, 57,2,57,16,10,43,11,2,42,2,43,2,44,2,46,3,1,7,101,110,118, -50,57,57,49,58,2,58,2,58,2,58,158,2,48,46,158,11,46,158,2,49, +50,57,57,51,58,2,58,2,58,2,58,158,2,48,46,158,11,46,158,2,49, 46,158,2,50,46,158,79,109,111,100,117,108,101,45,105,100,101,110,116,105,102, 105,101,114,61,63,59,46,2,51,46,46,11,16,5,93,2,7,89,162,34,35, 47,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38, @@ -1715,7 +1714,7 @@ 248,80,158,41,36,195,27,248,80,158,42,37,196,28,248,80,158,42,34,193,249, 80,158,43,38,248,80,158,44,36,195,248,80,158,44,39,248,80,158,45,37,196, 11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,28, -28,248,22,47,248,22,217,194,248,80,158,39,40,249,22,252,101,3,195,32,60, +28,248,22,47,248,22,217,194,248,80,158,39,40,249,22,252,103,3,195,32,60, 89,162,8,44,34,34,9,222,11,11,250,80,158,41,41,20,15,159,41,34,42, 21,93,3,1,4,103,53,48,48,61,195,27,249,22,67,195,196,251,80,158,43, 41,20,15,159,43,35,42,21,94,3,1,4,103,53,48,50,62,3,1,4,103, @@ -1725,10 +1724,10 @@ 108,108,47,35,102,67,9,30,68,2,33,75,115,121,110,116,97,120,45,109,97, 112,112,105,110,103,63,69,8,2,27,16,2,18,158,94,100,66,115,121,110,116, 97,120,70,50,40,39,38,16,4,49,11,2,34,3,1,7,101,110,118,51,48, -48,51,71,16,8,48,11,3,1,4,103,52,57,55,72,3,1,4,103,52,57, -56,73,3,1,4,103,52,57,57,74,3,1,7,101,110,118,51,48,48,57,75, +48,53,71,16,8,48,11,3,1,4,103,52,57,55,72,3,1,4,103,52,57, +56,73,3,1,4,103,52,57,57,74,3,1,7,101,110,118,51,48,49,49,75, 2,75,2,75,16,8,47,11,2,42,63,108,111,99,76,67,112,97,116,116,101, -114,110,77,3,1,7,101,110,118,51,48,49,48,78,2,78,2,78,158,2,61, +114,110,77,3,1,7,101,110,118,51,48,49,50,78,2,78,2,78,158,2,61, 50,50,18,158,96,10,2,4,2,62,94,2,70,2,63,50,11,93,83,159,34, 93,80,159,34,34,35,32,79,89,162,8,36,36,42,2,4,222,28,248,22,222, 193,252,22,216,198,248,22,217,199,197,11,198,193,96,68,35,37,107,101,114,110, @@ -1736,7 +1735,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1696); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,101,252,191,8,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,101,252,198,8,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,70,35,37,119,105, 116,104,45,115,116,120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,99, 159,35,16,7,30,3,2,2,76,119,105,116,104,45,115,121,110,116,97,120,45, @@ -1750,8 +1749,8 @@ 105,116,104,45,115,121,110,116,97,120,18,16,2,11,11,16,2,2,10,2,18, 35,36,93,16,5,93,2,18,87,94,83,159,34,93,80,159,34,56,35,89,162, 8,64,38,58,64,108,111,111,112,19,223,0,28,248,22,63,196,27,249,22,67, -197,196,251,80,158,39,42,20,15,159,39,40,48,21,94,3,1,4,103,53,49, -52,20,3,1,4,103,53,49,51,21,248,22,59,197,248,22,58,197,26,8,22, +196,197,251,80,158,39,42,20,15,159,39,40,48,21,94,3,1,4,103,53,49, +52,20,3,1,4,103,53,49,51,21,248,22,58,197,248,22,59,197,26,8,22, 65,73,115,121,110,116,97,120,45,99,97,115,101,42,42,22,11,10,248,22,58, 204,9,79,109,111,100,117,108,101,45,105,100,101,110,116,105,102,105,101,114,61, 63,23,249,22,65,248,22,58,23,15,251,80,159,48,56,35,23,15,23,16,248, @@ -1764,9 +1763,9 @@ 41,37,194,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195, 27,248,80,158,44,37,196,28,248,80,158,44,39,193,248,80,158,44,40,193,11, 11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196, -249,80,158,41,41,200,27,249,22,67,197,198,251,80,158,46,42,20,15,159,46, +249,80,158,41,41,200,27,249,22,67,198,197,251,80,158,46,42,20,15,159,46, 35,48,21,94,3,1,4,103,53,49,50,26,3,1,4,103,53,49,49,27,248, -22,59,197,248,22,58,197,27,28,248,80,158,38,34,195,249,80,158,39,35,248, +22,58,197,248,22,59,197,27,28,248,80,158,38,34,195,249,80,158,39,35,248, 80,158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80, 158,42,43,27,248,80,158,44,36,196,28,248,80,158,44,39,193,248,22,8,89, 162,34,35,41,9,224,10,1,27,249,22,2,89,162,34,35,46,9,224,4,5, @@ -1802,80 +1801,80 @@ 47,115,104,97,112,101,61,2,30,62,64,35,37,115,99,63,74,103,101,116,45, 109,97,116,99,104,45,118,97,114,115,64,0,16,7,18,98,2,31,40,98,38, 10,34,11,96,159,2,52,9,11,159,74,35,37,115,109,97,108,108,45,115,99, -104,101,109,101,65,9,11,159,2,49,9,11,159,2,12,9,11,16,10,2,4, -2,2,2,18,2,2,2,6,2,2,2,8,2,2,2,10,2,2,98,37,10, +104,101,109,101,65,9,11,159,2,49,9,11,159,2,12,9,11,16,10,2,18, +2,2,2,4,2,2,2,6,2,2,2,8,2,2,2,10,2,2,98,37,10, 35,11,97,159,66,35,37,99,111,110,100,66,9,11,159,71,35,37,113,113,45, 97,110,100,45,111,114,67,9,11,159,2,63,9,11,159,2,49,9,11,159,2, 52,9,11,16,0,96,36,8,254,1,11,16,0,16,4,35,11,61,120,68,3, -1,7,101,110,118,51,48,50,51,69,18,158,161,36,100,2,0,43,38,37,36, +1,7,101,110,118,51,48,50,53,69,18,158,161,36,100,2,0,43,38,37,36, 35,16,8,42,11,3,1,4,103,53,48,56,70,3,1,4,103,53,48,57,71, -3,1,4,103,53,49,48,72,3,1,7,101,110,118,51,48,51,48,73,2,73, +3,1,4,103,53,49,48,72,3,1,7,101,110,118,51,48,51,50,73,2,73, 2,73,16,8,41,11,61,95,74,62,101,49,75,62,101,50,76,3,1,7,101, -110,118,51,48,51,49,77,2,77,2,77,158,2,26,43,2,27,43,43,18,100, +110,118,51,48,51,51,77,2,77,2,77,158,2,26,43,2,27,43,43,18,100, 64,100,101,115,116,78,46,38,37,36,35,16,12,45,11,3,1,4,103,53,48, 51,79,3,1,4,103,53,48,52,80,3,1,4,103,53,48,53,81,3,1,4, 103,53,48,54,82,3,1,4,103,53,48,55,83,3,1,7,101,110,118,51,48, -53,48,84,2,84,2,84,2,84,2,84,16,12,44,11,2,74,63,111,117,116, -85,62,105,110,86,2,75,2,76,3,1,7,101,110,118,51,48,53,49,87,2, +53,50,84,2,84,2,84,2,84,2,84,16,12,44,11,2,74,63,111,117,116, +85,62,105,110,86,2,75,2,76,3,1,7,101,110,118,51,48,53,51,87,2, 87,2,87,2,87,2,87,18,101,2,78,48,38,37,36,35,45,44,16,4,47, -11,63,105,110,115,88,3,1,7,101,110,118,51,48,54,51,89,18,16,2,158, -2,78,48,49,18,102,2,31,51,38,37,36,35,45,44,47,16,8,50,11,64, -116,109,112,115,90,65,104,101,114,101,115,91,64,111,117,116,115,92,3,1,7, -101,110,118,51,48,54,54,93,2,93,2,93,18,158,161,36,103,2,0,53,38, -37,36,35,45,44,47,50,16,4,52,11,2,19,3,1,7,101,110,118,51,48, -55,49,94,158,2,20,53,2,21,53,53,11,97,83,159,34,93,80,159,34,41, -35,89,162,34,35,44,9,223,0,248,247,22,252,107,3,28,248,22,47,195,249, -22,216,11,87,94,83,160,36,11,80,158,37,35,248,22,177,80,158,38,35,248, -22,48,250,22,252,191,1,6,4,4,126,97,126,115,95,200,80,158,41,35,28, -248,22,252,143,1,195,249,22,216,11,87,94,83,160,36,11,80,158,37,35,248, -22,177,80,158,38,35,248,22,48,250,22,252,191,1,2,95,200,80,158,41,35, -28,248,80,158,36,40,195,249,22,216,11,27,248,22,217,198,87,94,83,160,36, -11,80,158,38,35,248,22,177,80,158,39,35,248,22,48,250,22,252,191,1,2, -95,196,80,158,42,35,249,22,216,11,87,94,83,160,36,11,80,158,37,35,248, -22,177,80,158,38,35,248,22,48,250,22,252,191,1,2,95,64,116,101,109,112, -96,80,158,41,35,83,159,34,93,80,159,34,34,35,32,97,89,162,34,35,38, -2,4,222,250,22,252,47,2,2,18,6,20,20,98,105,110,100,105,110,103,32, -109,97,116,99,104,32,102,97,105,108,101,100,98,195,83,159,34,93,80,158,34, -35,34,83,159,34,93,80,159,34,36,35,89,162,34,35,40,2,8,223,0,87, -94,83,160,36,11,80,158,34,35,248,22,177,80,158,35,35,248,22,48,250,22, -252,191,1,2,95,197,80,158,38,35,83,159,34,93,80,159,34,37,35,89,162, -34,35,39,2,10,223,0,87,94,28,248,80,158,35,38,194,12,250,22,252,48, -2,2,10,6,11,11,115,121,110,116,97,120,32,112,97,105,114,99,196,27,248, -80,158,36,39,195,249,22,2,80,159,37,41,35,194,97,68,35,37,107,101,114, -110,101,108,100,2,12,2,49,2,65,2,52,98,2,100,2,52,2,49,2,63, -2,67,2,66,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2251); +11,63,105,110,115,88,3,1,7,101,110,118,51,48,54,53,89,18,16,2,158, +2,78,48,49,18,102,2,31,52,38,37,36,35,45,44,16,4,51,11,2,88, +2,89,16,8,50,11,64,116,109,112,115,90,65,104,101,114,101,115,91,64,111, +117,116,115,92,3,1,7,101,110,118,51,48,54,56,93,2,93,2,93,18,158, +161,36,103,2,0,54,38,37,36,35,45,44,51,50,16,4,53,11,2,19,3, +1,7,101,110,118,51,48,55,51,94,158,2,20,54,2,21,54,54,11,97,83, +159,34,93,80,159,34,41,35,89,162,34,35,44,9,223,0,248,247,22,252,109, +3,28,248,22,47,195,249,22,216,11,87,94,83,160,36,11,80,158,37,35,248, +22,177,80,158,38,35,248,22,48,250,22,252,191,1,6,4,4,126,97,126,115, +95,200,80,158,41,35,28,248,22,252,143,1,195,249,22,216,11,87,94,83,160, +36,11,80,158,37,35,248,22,177,80,158,38,35,248,22,48,250,22,252,191,1, +2,95,200,80,158,41,35,28,248,80,158,36,40,195,249,22,216,11,27,248,22, +217,198,87,94,83,160,36,11,80,158,38,35,248,22,177,80,158,39,35,248,22, +48,250,22,252,191,1,2,95,196,80,158,42,35,249,22,216,11,87,94,83,160, +36,11,80,158,37,35,248,22,177,80,158,38,35,248,22,48,250,22,252,191,1, +2,95,64,116,101,109,112,96,80,158,41,35,83,159,34,93,80,159,34,34,35, +32,97,89,162,34,35,38,2,4,222,250,22,252,47,2,2,18,6,20,20,98, +105,110,100,105,110,103,32,109,97,116,99,104,32,102,97,105,108,101,100,98,195, +83,159,34,93,80,158,34,35,34,83,159,34,93,80,159,34,36,35,89,162,34, +35,40,2,8,223,0,87,94,83,160,36,11,80,158,34,35,248,22,177,80,158, +35,35,248,22,48,250,22,252,191,1,2,95,197,80,158,38,35,83,159,34,93, +80,159,34,37,35,89,162,34,35,39,2,10,223,0,87,94,28,248,80,158,35, +38,194,12,250,22,252,48,2,2,10,6,11,11,115,121,110,116,97,120,32,112, +97,105,114,99,196,27,248,80,158,36,39,195,249,22,2,80,159,37,41,35,194, +97,68,35,37,107,101,114,110,101,108,100,2,12,2,49,2,65,2,52,98,2, +100,2,52,2,49,2,63,2,67,2,66,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2258); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,208,252,226,24,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,208,252,16,25,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,76,35,37,115,116, 120,99,97,115,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,34, 80,158,34,34,20,99,159,34,16,2,30,3,2,2,1,26,99,104,101,99,107, 45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114, 4,254,1,30,5,65,35,37,115,116,120,6,71,105,100,101,110,116,105,102,105, 101,114,63,7,2,16,0,11,11,16,0,34,11,16,26,2,4,1,20,103,101, -110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,8,75,108, -101,116,114,101,99,45,115,121,110,116,97,120,101,115,9,64,108,101,116,42,10, -70,115,121,110,116,97,120,47,108,111,99,11,73,108,101,116,114,101,99,45,115, -121,110,116,97,120,12,70,108,101,116,45,115,121,110,116,97,120,13,63,97,110, -100,14,64,119,104,101,110,15,62,111,114,16,66,117,110,108,101,115,115,17,72, -115,121,110,116,97,120,45,114,117,108,101,115,18,66,115,121,110,116,97,120,19, -75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,20,64,99,111,110, -100,21,71,119,105,116,104,45,115,121,110,116,97,120,22,66,108,101,116,47,101, -99,23,73,100,101,102,105,110,101,45,115,116,114,117,99,116,24,72,115,121,110, -116,97,120,45,99,97,115,101,42,25,63,108,101,116,26,70,113,117,97,115,105, -113,117,111,116,101,27,72,108,101,116,45,115,121,110,116,97,120,101,115,28,66, -108,101,116,114,101,99,29,71,115,121,110,116,97,120,45,99,97,115,101,30,67, -45,100,101,102,105,110,101,31,74,45,100,101,102,105,110,101,45,115,121,110,116, -97,120,32,16,26,11,70,35,37,119,105,116,104,45,115,116,120,33,11,71,35, -37,113,113,45,97,110,100,45,111,114,34,68,35,37,115,116,120,108,111,99,35, -11,11,2,34,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,36,2, -34,2,36,11,69,35,37,115,116,120,99,97,115,101,37,11,66,35,37,99,111, -110,100,38,2,33,2,36,2,36,2,35,2,34,2,34,11,2,34,2,35,2, -36,2,36,16,26,2,4,2,8,2,9,2,10,2,11,2,12,2,13,2,14, +110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,8,66,108, +101,116,47,101,99,9,67,45,100,101,102,105,110,101,10,64,108,101,116,42,11, +73,100,101,102,105,110,101,45,115,116,114,117,99,116,12,70,113,117,97,115,105, +113,117,111,116,101,13,70,115,121,110,116,97,120,47,108,111,99,14,64,119,104, +101,110,15,62,111,114,16,63,97,110,100,17,66,117,110,108,101,115,115,18,66, +108,101,116,114,101,99,19,72,108,101,116,45,115,121,110,116,97,120,101,115,20, +66,115,121,110,116,97,120,21,72,115,121,110,116,97,120,45,114,117,108,101,115, +22,72,115,121,110,116,97,120,45,99,97,115,101,42,23,64,99,111,110,100,24, +75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,25,70,108,101,116, +45,115,121,110,116,97,120,26,71,119,105,116,104,45,115,121,110,116,97,120,27, +63,108,101,116,28,71,115,121,110,116,97,120,45,99,97,115,101,29,75,108,101, +116,114,101,99,45,115,121,110,116,97,120,101,115,30,73,108,101,116,114,101,99, +45,115,121,110,116,97,120,31,74,45,100,101,102,105,110,101,45,115,121,110,116, +97,120,32,16,26,11,70,35,37,119,105,116,104,45,115,116,120,33,74,35,37, +100,101,102,105,110,101,45,101,116,45,97,108,34,2,34,71,35,37,113,113,45, +97,110,100,45,111,114,35,2,34,2,35,68,35,37,115,116,120,108,111,99,36, +2,34,2,35,2,35,2,34,2,35,11,69,35,37,115,116,120,99,97,115,101, +37,11,2,36,66,35,37,99,111,110,100,38,11,11,2,33,2,35,2,36,11, +11,2,34,16,26,2,4,2,8,2,9,2,10,2,11,2,12,2,13,2,14, 2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2, 25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,36,8,26,98,16,5, -93,2,9,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223, +93,2,30,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223, 0,251,80,158,38,46,20,15,159,38,36,47,21,94,3,1,4,103,53,50,49, 39,3,1,4,103,53,50,48,40,248,22,58,198,248,22,84,198,89,162,34,35, 50,9,223,0,27,249,22,216,20,15,159,37,34,47,196,27,28,248,80,158,37, @@ -1891,11 +1890,11 @@ 158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46, 39,193,248,80,158,46,41,193,11,11,11,11,28,192,27,248,22,58,194,27,248, 22,84,195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198,249,80,158, -43,44,202,27,251,22,67,201,200,202,199,250,80,158,47,45,89,162,34,34,45, +43,44,202,27,251,22,67,201,202,199,200,250,80,158,47,45,89,162,34,34,45, 9,224,13,3,252,80,158,40,46,20,15,159,40,35,47,21,95,3,1,4,103, 53,50,52,41,3,1,4,103,53,50,51,42,3,1,4,103,53,50,50,43,250, -22,2,80,159,43,52,35,248,22,93,201,248,22,58,201,248,22,84,198,248,22, -94,198,21,98,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115, +22,2,80,159,43,52,35,248,22,84,201,248,22,58,201,248,22,94,198,248,22, +93,198,21,98,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115, 43,118,97,108,117,101,115,44,94,94,94,62,105,100,45,63,46,46,46,46,64, 101,120,112,114,47,2,46,9,65,98,111,100,121,49,48,64,98,111,100,121,49, 2,46,20,15,159,47,37,47,250,22,252,47,2,11,6,10,10,98,97,100,32, @@ -1907,26 +1906,26 @@ 30,63,2,6,73,115,116,120,45,99,104,101,99,107,47,101,115,99,64,7,30, 65,2,6,69,115,116,120,45,62,108,105,115,116,66,4,30,67,2,6,71,115, 116,120,45,110,117,108,108,47,35,102,68,9,30,69,2,6,70,115,116,120,45, -114,111,116,97,116,101,70,12,30,71,2,35,68,114,101,108,111,99,97,116,101, +114,111,116,97,116,101,70,12,30,71,2,36,68,114,101,108,111,99,97,116,101, 72,0,30,73,2,37,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105, 115,45,101,114,114,111,114,74,1,30,75,2,37,1,24,97,112,112,108,121,45, 112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,76,0,16, -4,18,98,64,104,101,114,101,77,40,98,38,10,34,11,97,159,2,35,9,11, +4,18,98,64,104,101,114,101,77,40,98,38,10,34,11,97,159,2,36,9,11, 159,2,33,9,11,159,2,37,9,11,159,2,6,9,11,159,74,35,37,115,109, -97,108,108,45,115,99,104,101,109,101,78,9,11,16,14,2,18,2,2,2,9, -2,2,2,4,2,2,2,12,2,2,2,13,2,2,2,20,2,2,2,28,2, -2,98,37,10,35,11,97,159,2,35,9,11,159,2,33,9,11,159,2,37,9, +97,108,108,45,115,99,104,101,109,101,78,9,11,16,14,2,25,2,2,2,30, +2,2,2,31,2,2,2,20,2,2,2,4,2,2,2,26,2,2,2,22,2, +2,98,37,10,35,11,97,159,2,36,9,11,159,2,33,9,11,159,2,37,9, 11,159,2,6,9,11,159,2,78,9,11,16,0,96,36,8,254,1,11,16,0, -16,4,35,11,63,115,116,120,79,3,1,7,101,110,118,51,48,56,53,80,18, +16,4,35,11,63,115,116,120,79,3,1,7,101,110,118,51,48,56,55,80,18, 158,163,38,100,2,44,43,38,37,36,35,16,12,42,11,3,1,4,103,53,49, 53,81,3,1,4,103,53,49,54,82,3,1,4,103,53,49,55,83,3,1,4, -103,53,49,56,84,3,1,4,103,53,49,57,85,3,1,7,101,110,118,51,48, -57,56,86,2,86,2,86,2,86,2,86,16,12,41,11,61,95,87,2,45,2, -47,2,48,2,49,3,1,7,101,110,118,51,48,57,57,88,2,88,2,88,2, +103,53,49,56,84,3,1,4,103,53,49,57,85,3,1,7,101,110,118,51,49, +48,48,86,2,86,2,86,2,86,2,86,16,12,41,11,61,95,87,2,45,2, +47,2,48,2,49,3,1,7,101,110,118,51,49,48,49,88,2,88,2,88,2, 88,2,88,158,2,41,43,158,9,43,158,2,42,43,2,43,43,43,18,158,95, -10,2,39,2,40,43,18,16,2,96,2,46,45,93,8,252,157,10,16,4,44, -11,61,114,89,3,1,7,101,110,118,51,49,49,49,90,95,9,8,252,157,10, -2,37,11,16,5,93,2,12,87,94,83,159,34,93,80,159,34,52,35,89,162, +10,2,39,2,40,43,18,16,2,96,2,46,45,93,8,252,159,10,16,4,44, +11,61,114,89,3,1,7,101,110,118,51,49,49,51,90,95,9,8,252,159,10, +2,37,11,16,5,93,2,31,87,94,83,159,34,93,80,159,34,52,35,89,162, 35,35,41,9,223,0,251,80,158,38,46,20,15,159,38,36,47,21,94,3,1, 4,103,53,51,48,91,3,1,4,103,53,51,49,92,248,22,58,198,248,22,84, 198,89,162,34,35,50,9,223,0,27,249,22,216,20,15,159,37,34,47,196,27, @@ -1941,24 +1940,24 @@ 248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, 46,37,196,28,248,80,158,46,39,193,248,80,158,46,42,193,11,11,11,11,28, 192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197, -27,248,22,95,198,249,80,158,43,44,202,27,251,22,67,201,200,202,199,250,80, +27,248,22,95,198,249,80,158,43,44,202,27,251,22,67,201,202,199,200,250,80, 158,47,45,89,162,34,34,45,9,224,13,3,252,80,158,40,46,20,15,159,40, 35,47,21,95,3,1,4,103,53,51,52,93,3,1,4,103,53,51,51,94,3, -1,4,103,53,51,50,95,250,22,2,80,159,43,52,35,248,22,93,201,248,22, -58,201,248,22,84,198,248,22,94,198,21,98,2,44,94,94,93,2,45,2,47, +1,4,103,53,51,50,95,250,22,2,80,159,43,52,35,248,22,84,201,248,22, +58,201,248,22,94,198,248,22,93,198,21,98,2,44,94,94,93,2,45,2,47, 2,46,9,2,48,2,49,2,46,20,15,159,47,37,47,250,22,252,47,2,11, 2,50,196,34,20,99,159,35,16,13,2,51,2,53,2,55,2,57,2,59,2, 61,2,63,2,67,2,65,2,69,2,71,2,73,2,75,16,4,18,98,2,77, -47,38,37,36,16,4,46,11,2,79,3,1,7,101,110,118,51,49,49,54,96, +47,38,37,36,16,4,46,11,2,79,3,1,7,101,110,118,51,49,49,56,96, 18,158,163,38,100,2,44,50,38,37,36,46,16,12,49,11,3,1,4,103,53, 50,53,97,3,1,4,103,53,50,54,98,3,1,4,103,53,50,55,99,3,1, 4,103,53,50,56,100,3,1,4,103,53,50,57,101,3,1,7,101,110,118,51, -49,50,56,102,2,102,2,102,2,102,2,102,16,12,48,11,2,87,2,45,2, -47,2,48,2,49,3,1,7,101,110,118,51,49,50,57,103,2,103,2,103,2, +49,51,48,102,2,102,2,102,2,102,2,102,16,12,48,11,2,87,2,45,2, +47,2,48,2,49,3,1,7,101,110,118,51,49,51,49,103,2,103,2,103,2, 103,2,103,158,2,93,50,158,9,50,158,2,94,50,2,95,50,50,18,158,95, -10,93,2,91,2,92,50,18,16,2,96,2,46,52,93,8,252,177,10,16,4, -51,11,2,89,3,1,7,101,110,118,51,49,52,49,104,95,9,8,252,177,10, -2,37,11,16,5,93,2,28,87,96,83,159,34,93,80,159,34,8,29,35,89, +10,93,2,91,2,92,50,18,16,2,96,2,46,52,93,8,252,179,10,16,4, +51,11,2,89,3,1,7,101,110,118,51,49,52,51,104,95,9,8,252,179,10, +2,37,11,16,5,93,2,20,87,96,83,159,34,93,80,159,34,8,29,35,89, 162,35,35,43,9,223,0,251,80,158,38,49,20,15,159,38,39,51,21,94,3, 1,4,103,53,52,55,105,3,1,4,103,53,52,54,106,248,22,58,198,249,22, 2,80,159,40,8,28,35,248,22,84,200,83,159,34,93,80,159,34,8,28,35, @@ -1984,12 +1983,12 @@ 44,39,194,248,22,8,89,162,34,35,41,9,224,10,2,27,249,22,2,89,162, 34,35,41,9,224,4,5,249,80,158,37,40,28,248,80,158,38,39,197,248,22, 65,248,80,158,39,41,198,11,194,248,80,158,39,41,196,28,248,22,63,193,9, -248,80,158,37,46,193,11,28,192,249,80,158,45,47,204,27,252,22,67,200,205, -203,204,202,250,80,158,49,48,89,162,34,34,46,9,224,15,3,253,80,158,41, +248,80,158,37,46,193,11,28,192,249,80,158,45,47,204,27,252,22,67,200,204, +203,205,202,250,80,158,49,48,89,162,34,34,46,9,224,15,3,253,80,158,41, 49,20,15,159,41,37,51,21,96,3,1,4,103,53,53,49,110,3,1,4,103, 53,53,48,111,3,1,4,103,53,52,57,112,3,1,4,103,53,52,56,113,250, -22,2,80,159,44,8,27,35,248,22,58,202,248,22,96,202,250,22,2,80,159, -44,8,29,35,248,22,84,202,248,22,58,202,248,22,93,199,248,22,95,199,21, +22,2,80,159,44,8,27,35,248,22,58,202,248,22,84,202,250,22,2,80,159, +44,8,29,35,248,22,96,202,248,22,58,202,248,22,93,199,248,22,95,199,21, 96,2,44,94,94,94,63,116,109,112,114,2,46,2,47,2,46,9,98,2,44, 94,94,94,2,45,2,46,95,66,118,97,108,117,101,115,115,94,1,23,109,97, 107,101,45,114,101,110,97,109,101,45,116,114,97,110,115,102,111,114,109,101,114, @@ -2002,26 +2001,26 @@ 6,71,115,116,120,45,114,111,116,97,116,101,42,122,13,2,71,2,73,2,75, 30,123,2,33,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105,108, 124,3,16,9,18,98,2,77,54,38,37,36,16,4,53,11,2,79,3,1,7, -101,110,118,51,49,52,54,125,18,100,2,77,57,38,37,36,53,16,12,56,11, +101,110,118,51,49,52,56,125,18,100,2,77,57,38,37,36,53,16,12,56,11, 3,1,4,103,53,51,53,126,3,1,4,103,53,51,54,127,3,1,4,103,53, 51,55,128,3,1,4,103,53,51,56,129,3,1,4,103,53,51,57,130,3,1, -7,101,110,118,51,49,53,57,131,2,131,2,131,2,131,2,131,16,12,55,11, -2,87,2,45,2,47,2,48,2,49,3,1,7,101,110,118,51,49,54,48,132, +7,101,110,118,51,49,54,49,131,2,131,2,131,2,131,2,131,16,12,55,11, +2,87,2,45,2,47,2,48,2,49,3,1,7,101,110,118,51,49,54,50,132, 2,132,2,132,2,132,2,132,18,16,2,158,64,100,101,115,116,133,57,58,18, 158,96,102,2,44,8,27,38,37,36,53,56,55,16,4,8,26,11,3,1,4, -103,53,52,50,134,3,1,7,101,110,118,51,49,56,48,135,16,4,59,11,2, -114,3,1,7,101,110,118,51,49,56,49,136,158,2,110,8,27,158,9,8,27, +103,53,52,50,134,3,1,7,101,110,118,51,49,56,50,135,16,4,59,11,2, +114,3,1,7,101,110,118,51,49,56,51,136,158,2,110,8,27,158,9,8,27, 158,162,10,2,44,2,111,9,2,112,2,113,8,27,8,27,18,158,95,10,2, 108,2,109,8,27,18,158,95,10,2,105,158,2,115,2,106,8,27,18,158,95, 10,2,116,94,2,117,2,107,8,27,18,16,2,96,2,46,8,29,93,8,252, -208,10,16,4,8,28,11,2,89,3,1,7,101,110,118,51,49,56,53,137,95, -9,8,252,208,10,2,37,18,16,2,158,94,158,94,98,2,114,8,33,93,8, -252,196,10,16,4,8,32,11,3,1,8,119,115,116,109,112,53,52,48,138,3, -1,7,101,110,118,51,49,55,50,139,16,4,8,31,11,3,1,4,103,53,52, -49,140,3,1,7,101,110,118,51,49,57,52,141,16,4,8,30,11,65,95,101, -108,115,101,142,3,1,7,101,110,118,51,49,57,53,143,158,2,46,8,33,8, -33,158,2,46,8,33,8,33,95,9,8,252,196,10,2,33,11,16,5,93,2, -13,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223,0,251, +210,10,16,4,8,28,11,2,89,3,1,7,101,110,118,51,49,56,55,137,95, +9,8,252,210,10,2,37,18,16,2,158,94,158,94,98,2,114,8,33,93,8, +252,198,10,16,4,8,32,11,3,1,8,119,115,116,109,112,53,52,48,138,3, +1,7,101,110,118,51,49,55,52,139,16,4,8,31,11,3,1,4,103,53,52, +49,140,3,1,7,101,110,118,51,49,57,54,141,16,4,8,30,11,65,95,101, +108,115,101,142,3,1,7,101,110,118,51,49,57,55,143,158,2,46,8,33,8, +33,158,2,46,8,33,8,33,95,9,8,252,198,10,2,33,11,16,5,93,2, +26,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223,0,251, 80,158,38,46,20,15,159,38,36,47,21,94,3,1,4,103,53,53,55,144,3, 1,4,103,53,53,56,145,248,22,58,198,248,22,84,198,89,162,34,35,50,9, 223,0,27,249,22,216,20,15,159,37,34,47,196,27,28,248,80,158,37,34,194, @@ -2036,24 +2035,24 @@ 80,158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158, 46,39,193,248,80,158,46,42,193,11,11,11,11,28,192,27,248,22,58,194,27, 248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198,249,80, -158,43,44,202,27,251,22,67,201,200,202,199,250,80,158,47,45,89,162,34,34, +158,43,44,202,27,251,22,67,200,202,199,201,250,80,158,47,45,89,162,34,34, 45,9,224,13,3,252,80,158,40,46,20,15,159,40,35,47,21,95,3,1,4, 103,53,54,49,146,3,1,4,103,53,54,48,147,3,1,4,103,53,53,57,148, -250,22,2,80,159,43,52,35,248,22,93,201,248,22,58,201,248,22,84,198,248, -22,94,198,21,97,2,28,94,94,93,2,45,2,47,2,46,2,48,2,49,2, +250,22,2,80,159,43,52,35,248,22,84,201,248,22,94,201,248,22,58,198,248, +22,93,198,21,97,2,20,94,94,93,2,45,2,47,2,46,2,48,2,49,2, 46,20,15,159,47,37,47,250,22,252,47,2,11,2,50,196,34,20,99,159,35, 16,13,2,51,2,53,2,55,2,57,2,59,2,61,2,63,2,67,2,65,2, 69,2,71,2,73,2,75,16,4,18,98,2,77,8,35,38,37,36,16,4,8, -34,11,2,79,3,1,7,101,110,118,51,49,57,57,149,18,158,162,37,100,2, -28,8,38,38,37,36,8,34,16,12,8,37,11,3,1,4,103,53,53,50,150, +34,11,2,79,3,1,7,101,110,118,51,50,48,49,149,18,158,162,37,100,2, +20,8,38,38,37,36,8,34,16,12,8,37,11,3,1,4,103,53,53,50,150, 3,1,4,103,53,53,51,151,3,1,4,103,53,53,52,152,3,1,4,103,53, -53,53,153,3,1,4,103,53,53,54,154,3,1,7,101,110,118,51,50,49,49, +53,53,153,3,1,4,103,53,53,54,154,3,1,7,101,110,118,51,50,49,51, 155,2,155,2,155,2,155,2,155,16,12,8,36,11,2,87,2,45,2,47,2, -48,2,49,3,1,7,101,110,118,51,50,49,50,156,2,156,2,156,2,156,2, +48,2,49,3,1,7,101,110,118,51,50,49,52,156,2,156,2,156,2,156,2, 156,158,2,146,8,38,158,2,147,8,38,2,148,8,38,8,38,18,158,95,10, -93,2,144,2,145,8,38,18,16,2,96,2,46,8,40,93,8,252,233,10,16, -4,8,39,11,2,89,3,1,7,101,110,118,51,50,50,52,157,95,9,8,252, -233,10,2,37,11,16,5,93,2,18,87,94,83,159,34,93,80,159,34,58,35, +93,2,144,2,145,8,38,18,16,2,96,2,46,8,40,93,8,252,235,10,16, +4,8,39,11,2,89,3,1,7,101,110,118,51,50,50,54,157,95,9,8,252, +235,10,2,37,11,16,5,93,2,22,87,94,83,159,34,93,80,159,34,58,35, 89,162,35,35,42,9,223,0,252,80,158,39,48,20,15,159,39,38,50,21,95, 3,1,4,103,53,55,49,158,3,1,4,103,53,55,48,159,3,1,4,103,53, 55,50,160,248,22,58,199,248,22,84,199,248,22,93,199,89,162,34,35,52,9, @@ -2077,97 +2076,100 @@ 111,117,110,100,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,161,196, 198,248,22,49,248,22,50,248,22,217,197,248,22,223,249,80,158,48,45,20,15, 159,48,36,50,202,27,28,248,80,158,43,39,194,248,80,158,43,40,194,11,28, -192,249,80,158,44,46,203,27,252,22,67,205,203,202,200,206,250,80,158,48,47, +192,249,80,158,44,46,203,27,252,22,67,200,203,206,202,205,250,80,158,48,47, 89,162,34,34,46,9,224,14,3,252,80,158,40,48,20,15,159,40,37,50,21, 95,3,1,4,103,53,55,53,162,3,1,4,103,53,55,52,163,3,1,4,103, -53,55,51,164,248,22,95,198,248,22,58,198,251,22,2,80,159,44,58,35,248, -22,96,202,248,22,84,202,248,22,93,202,21,95,66,108,97,109,98,100,97,165, +53,55,51,164,248,22,93,198,248,22,95,198,251,22,2,80,159,44,58,35,248, +22,58,202,248,22,84,202,248,22,96,202,21,95,66,108,97,109,98,100,97,165, 93,61,120,166,100,73,115,121,110,116,97,120,45,99,97,115,101,42,42,167,2, 87,10,2,166,94,61,107,168,2,46,79,109,111,100,117,108,101,45,105,100,101, 110,116,105,102,105,101,114,61,63,169,94,158,65,100,117,109,109,121,170,67,112, -97,116,116,101,114,110,171,95,2,11,2,166,68,116,101,109,112,108,97,116,101, +97,116,116,101,114,110,171,95,2,14,2,166,68,116,101,109,112,108,97,116,101, 172,2,46,20,15,159,48,39,50,248,80,158,43,49,20,15,159,43,40,50,250, 22,252,47,2,11,2,50,202,250,22,252,47,2,11,2,50,197,34,20,99,159, 35,16,16,2,51,2,53,2,55,2,57,2,59,2,61,2,65,2,63,2,67, 2,121,30,173,2,6,2,7,2,2,119,2,71,2,73,2,75,2,123,16,7, 18,100,2,133,8,44,38,37,36,16,4,8,43,11,2,79,3,1,7,101,110, -118,51,50,50,57,174,16,12,8,42,11,3,1,4,103,53,54,50,175,3,1, +118,51,50,51,49,174,16,12,8,42,11,3,1,4,103,53,54,50,175,3,1, 4,103,53,54,51,176,3,1,4,103,53,54,52,177,3,1,4,103,53,54,53, -178,3,1,4,103,53,54,54,179,3,1,7,101,110,118,51,50,52,53,180,2, +178,3,1,4,103,53,54,54,179,3,1,7,101,110,118,51,50,52,55,180,2, 180,2,180,2,180,2,180,16,12,8,41,11,2,87,2,168,67,107,101,121,119, -111,114,100,181,2,171,2,172,3,1,7,101,110,118,51,50,52,54,182,2,182, +111,114,100,181,2,171,2,172,3,1,7,101,110,118,51,50,52,56,182,2,182, 2,182,2,182,2,182,18,16,2,158,2,77,8,44,8,45,18,16,2,158,2, -133,8,44,8,46,18,158,95,102,2,165,8,49,38,37,36,8,43,8,42,8, -41,16,4,8,48,11,3,1,4,103,53,54,57,183,3,1,7,101,110,118,51, -50,54,53,184,16,4,8,47,11,2,170,3,1,7,101,110,118,51,50,54,54, -185,158,94,10,2,166,8,49,158,164,10,2,167,2,162,10,2,166,2,163,2, -169,2,164,8,49,8,49,18,158,95,10,158,2,158,2,159,95,2,11,2,166, -2,160,8,49,18,16,2,96,2,46,8,51,93,8,252,8,11,16,4,8,50, -11,2,89,3,1,7,101,110,118,51,50,55,48,186,95,9,8,252,8,11,2, -37,18,16,2,158,94,98,2,170,8,55,93,8,252,255,10,16,4,8,54,11, -3,1,8,119,115,116,109,112,53,54,55,187,3,1,7,101,110,118,51,50,53, -56,188,16,4,8,53,11,3,1,4,103,53,54,56,189,3,1,7,101,110,118, -51,50,55,53,190,16,4,8,52,11,2,142,3,1,7,101,110,118,51,50,55, -54,191,158,2,46,8,55,8,55,95,9,8,252,255,10,2,33,11,16,5,93, -2,20,87,94,83,159,34,93,80,159,34,54,35,89,162,35,35,41,9,223,0, -251,80,158,38,48,20,15,159,38,36,49,21,94,3,1,4,103,53,56,49,192, -3,1,4,103,53,56,48,193,248,22,58,198,248,22,84,198,89,162,34,35,48, -9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36, -197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,38,27, -248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,65,248,80,158,43,40, -194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248,22,8,89,162, -34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249, -80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36, -199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248, -80,158,43,36,195,248,80,158,43,42,248,80,158,44,37,196,11,11,194,248,80, -158,39,40,196,28,248,22,63,193,21,93,9,248,80,158,37,43,193,11,11,11, -28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,94, -197,28,249,22,4,80,158,41,44,248,22,223,249,80,158,44,45,20,15,159,44, -34,49,199,249,80,158,41,46,200,27,251,22,67,201,200,199,202,250,80,158,45, -47,89,162,34,34,45,9,224,11,3,252,80,158,40,48,20,15,159,40,35,49, -21,95,3,1,4,103,53,56,52,194,3,1,4,103,53,56,51,195,3,1,4, -103,53,56,50,196,248,22,94,198,248,22,58,198,250,22,2,80,159,43,54,35, -248,22,84,201,248,22,93,201,21,94,1,21,109,97,107,101,45,115,101,116,33, -45,116,114,97,110,115,102,111,114,109,101,114,197,95,2,165,93,2,166,100,2, -167,2,87,10,2,166,94,2,168,2,46,2,169,94,2,171,95,2,11,2,166, -2,172,2,46,20,15,159,45,37,49,250,22,252,47,2,11,2,50,201,250,22, -252,47,2,11,2,50,197,34,20,99,159,35,16,15,2,51,2,53,2,55,2, -57,2,59,2,61,2,65,2,63,2,67,2,121,2,173,2,119,2,71,2,73, -2,75,16,4,18,100,2,133,8,59,38,37,36,16,4,8,58,11,2,166,3, -1,7,101,110,118,51,50,56,48,198,16,10,8,57,11,3,1,4,103,53,55, -54,199,3,1,4,103,53,55,55,200,3,1,4,103,53,55,56,201,3,1,4, -103,53,55,57,202,3,1,7,101,110,118,51,50,57,51,203,2,203,2,203,2, -203,16,10,8,56,11,2,87,2,168,2,171,2,172,3,1,7,101,110,118,51, -50,57,52,204,2,204,2,204,2,204,18,158,95,10,2,197,95,2,165,93,2, -166,163,2,167,2,194,10,2,166,2,195,2,169,2,196,8,59,18,158,95,10, -2,192,95,2,11,2,166,2,193,8,59,18,16,2,96,2,46,8,61,93,8, -252,32,11,16,4,8,60,11,2,89,3,1,7,101,110,118,51,51,48,52,205, -95,9,8,252,32,11,2,37,11,93,83,159,34,93,80,159,34,34,35,89,162, -34,35,37,2,4,223,0,248,22,8,89,162,8,36,35,40,9,224,1,2,27, -247,22,116,87,94,249,22,3,89,162,8,36,35,45,9,226,4,3,5,2,87, -94,28,248,80,158,38,35,197,12,250,22,252,48,2,2,4,6,19,19,108,105, -115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115,206,197,27,250, -22,122,196,248,22,217,201,9,87,94,28,249,22,5,89,162,8,36,35,38,9, -223,7,249,22,228,195,194,194,248,195,198,12,250,22,121,196,248,22,217,201,249, -22,57,202,197,195,11,98,68,35,37,107,101,114,110,101,108,207,2,78,2,6, -2,37,2,33,2,35,98,2,207,2,78,2,6,2,37,2,33,2,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6382); +133,8,44,8,46,18,158,95,102,2,165,8,51,38,37,36,8,43,16,12,8, +50,11,2,175,2,176,2,177,2,178,2,179,2,180,2,180,2,180,2,180,2, +180,16,12,8,49,11,2,87,2,168,2,181,2,171,2,172,2,182,2,182,2, +182,2,182,2,182,16,4,8,48,11,3,1,4,103,53,54,57,183,3,1,7, +101,110,118,51,50,54,55,184,16,4,8,47,11,2,170,3,1,7,101,110,118, +51,50,54,56,185,158,94,10,2,166,8,51,158,164,10,2,167,2,162,10,2, +166,2,163,2,169,2,164,8,51,8,51,18,158,95,10,158,2,158,2,159,95, +2,14,2,166,2,160,8,51,18,16,2,96,2,46,8,53,93,8,252,10,11, +16,4,8,52,11,2,89,3,1,7,101,110,118,51,50,55,50,186,95,9,8, +252,10,11,2,37,18,16,2,158,94,98,2,170,8,57,93,8,252,1,11,16, +4,8,56,11,3,1,8,119,115,116,109,112,53,54,55,187,3,1,7,101,110, +118,51,50,54,48,188,16,4,8,55,11,3,1,4,103,53,54,56,189,3,1, +7,101,110,118,51,50,55,55,190,16,4,8,54,11,2,142,3,1,7,101,110, +118,51,50,55,56,191,158,2,46,8,57,8,57,95,9,8,252,1,11,2,33, +11,16,5,93,2,25,87,94,83,159,34,93,80,159,34,54,35,89,162,35,35, +41,9,223,0,251,80,158,38,48,20,15,159,38,36,49,21,94,3,1,4,103, +53,56,49,192,3,1,4,103,53,56,48,193,248,22,58,198,248,22,84,198,89, +162,34,35,48,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248, +80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80, +158,40,38,27,248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,65,248, +80,158,43,40,194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248, +22,8,89,162,34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,46,9, +224,4,5,249,80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,35,248, +80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80, +158,42,35,248,80,158,43,36,195,248,80,158,43,42,248,80,158,44,37,196,11, +11,194,248,80,158,39,40,196,28,248,22,63,193,21,93,9,248,80,158,37,43, +193,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196, +27,248,22,94,197,28,249,22,4,80,158,41,44,248,22,223,249,80,158,44,45, +20,15,159,44,34,49,199,249,80,158,41,46,200,27,251,22,67,200,202,199,201, +250,80,158,45,47,89,162,34,34,45,9,224,11,3,252,80,158,40,48,20,15, +159,40,35,49,21,95,3,1,4,103,53,56,52,194,3,1,4,103,53,56,51, +195,3,1,4,103,53,56,50,196,248,22,84,198,248,22,94,198,250,22,2,80, +159,43,54,35,248,22,58,201,248,22,93,201,21,94,1,21,109,97,107,101,45, +115,101,116,33,45,116,114,97,110,115,102,111,114,109,101,114,197,95,2,165,93, +2,166,100,2,167,2,87,10,2,166,94,2,168,2,46,2,169,94,2,171,95, +2,14,2,166,2,172,2,46,20,15,159,45,37,49,250,22,252,47,2,11,2, +50,201,250,22,252,47,2,11,2,50,197,34,20,99,159,35,16,15,2,51,2, +53,2,55,2,57,2,59,2,61,2,65,2,63,2,67,2,121,2,173,2,119, +2,71,2,73,2,75,16,4,18,100,2,133,8,61,38,37,36,16,4,8,60, +11,2,166,3,1,7,101,110,118,51,50,56,50,198,16,10,8,59,11,3,1, +4,103,53,55,54,199,3,1,4,103,53,55,55,200,3,1,4,103,53,55,56, +201,3,1,4,103,53,55,57,202,3,1,7,101,110,118,51,50,57,53,203,2, +203,2,203,2,203,16,10,8,58,11,2,87,2,168,2,171,2,172,3,1,7, +101,110,118,51,50,57,54,204,2,204,2,204,2,204,18,158,95,10,2,197,95, +2,165,93,2,166,163,2,167,2,194,10,2,166,2,195,2,169,2,196,8,61, +18,158,95,10,2,192,95,2,14,2,166,2,193,8,61,18,16,2,96,2,46, +8,63,93,8,252,34,11,16,4,8,62,11,2,89,3,1,7,101,110,118,51, +51,48,54,205,95,9,8,252,34,11,2,37,11,93,83,159,34,93,80,159,34, +34,35,89,162,34,35,37,2,4,223,0,248,22,8,89,162,8,36,35,40,9, +224,1,2,27,247,22,116,87,94,249,22,3,89,162,8,36,35,45,9,226,4, +3,5,2,87,94,28,248,80,158,38,35,197,12,250,22,252,48,2,2,4,6, +19,19,108,105,115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115, +206,197,27,250,22,122,196,248,22,217,201,9,87,94,28,249,22,5,89,162,8, +36,35,38,9,223,7,249,22,228,195,194,194,248,195,198,12,250,22,121,196,248, +22,217,201,249,22,57,202,197,195,11,98,68,35,37,107,101,114,110,101,108,207, +2,78,2,6,2,37,2,33,2,36,98,2,207,2,78,2,6,2,37,2,33, +2,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6428); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,112,252,186,12,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,112,252,186,12,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,67,35,37,113,113, 115,116,120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,99,159,34,16, 2,30,3,2,2,79,99,104,101,99,107,45,115,112,108,105,99,105,110,103,45, 108,105,115,116,4,254,1,30,5,65,35,37,115,116,120,6,69,115,116,120,45, 108,105,115,116,63,7,8,16,0,11,11,16,1,2,4,35,11,16,4,68,117, 110,115,121,110,116,97,120,8,77,117,110,115,121,110,116,97,120,45,115,112,108, -105,99,105,110,103,9,71,113,117,97,115,105,115,121,110,116,97,120,10,75,113, -117,97,115,105,115,121,110,116,97,120,47,108,111,99,11,16,4,11,11,11,11, +105,99,105,110,103,9,75,113,117,97,115,105,115,121,110,116,97,120,47,108,111, +99,10,71,113,117,97,115,105,115,121,110,116,97,120,11,16,4,11,11,11,11, 16,4,2,8,2,9,2,10,2,11,34,38,94,16,5,94,2,8,2,9,27, 32,12,89,162,34,35,38,61,102,13,222,250,22,252,47,2,11,6,30,30,105, 108,108,101,103,97,108,32,111,117,116,115,105,100,101,32,111,102,32,113,117,97, 115,105,115,121,110,116,97,120,14,195,249,22,7,194,194,37,20,99,159,34,16, -0,16,0,11,16,5,94,2,10,2,11,87,96,83,159,34,93,80,159,34,8, +0,16,0,11,16,5,94,2,11,2,10,87,96,83,159,34,93,80,159,34,8, 32,35,89,162,8,36,35,38,9,223,0,249,22,65,20,15,159,36,51,43,195, 83,159,34,93,80,159,34,8,30,35,89,162,34,40,58,64,108,111,111,112,15, 223,0,27,249,22,216,20,15,159,37,35,43,198,27,28,248,80,158,37,34,194, @@ -2261,51 +2263,51 @@ 116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,48,0,16,20,18,98, 64,104,101,114,101,49,40,98,38,10,34,11,94,159,2,6,9,11,159,76,35, 37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,50,9,11,16,10,2, -8,2,2,2,11,2,2,2,10,2,2,2,4,2,2,2,9,2,2,98,37, +8,2,2,2,4,2,2,2,10,2,2,2,9,2,2,2,11,2,2,98,37, 10,35,11,94,159,2,6,9,11,159,2,50,9,11,16,0,96,36,8,254,1, 11,16,0,16,8,35,11,68,111,114,105,103,45,115,116,120,51,64,98,111,100, 121,52,68,109,107,45,102,105,110,97,108,53,3,1,7,101,110,118,51,51,50, -50,54,2,54,2,54,18,101,2,49,44,38,37,36,35,16,4,43,11,68,104, -101,114,101,45,115,116,120,55,3,1,7,101,110,118,51,51,50,51,56,16,4, -42,11,2,15,3,1,7,101,110,118,51,51,50,52,57,16,10,41,11,63,115, +52,54,2,54,2,54,18,101,2,49,44,38,37,36,35,16,4,43,11,68,104, +101,114,101,45,115,116,120,55,3,1,7,101,110,118,51,51,50,53,56,16,4, +42,11,2,15,3,1,7,101,110,118,51,51,50,54,57,16,10,41,11,63,115, 116,120,58,65,100,101,112,116,104,59,66,115,97,109,101,45,107,60,69,99,111, -110,118,101,114,116,45,107,61,3,1,7,101,110,118,51,51,50,53,62,2,62, +110,118,101,114,116,45,107,61,3,1,7,101,110,118,51,51,50,55,62,2,62, 2,62,2,62,18,16,2,158,2,8,44,45,18,45,18,16,2,158,2,9,44, 46,18,104,2,49,50,38,37,36,35,43,42,41,16,6,49,11,3,1,4,103, 53,56,55,63,3,1,4,103,53,56,56,64,3,1,7,101,110,118,51,51,52, -55,65,2,65,16,6,48,11,61,120,66,64,114,101,115,116,67,3,1,7,101, -110,118,51,51,52,56,68,2,68,16,6,47,11,66,114,101,115,116,45,118,69, -68,98,105,110,100,105,110,103,115,70,3,1,7,101,110,118,51,51,53,52,71, +57,65,2,65,16,6,48,11,61,120,66,64,114,101,115,116,67,3,1,7,101, +110,118,51,51,53,48,68,2,68,16,6,47,11,66,114,101,115,116,45,118,69, +68,98,105,110,100,105,110,103,115,70,3,1,7,101,110,118,51,51,53,54,71, 2,71,18,16,2,158,2,49,50,51,18,108,63,46,46,46,72,56,38,37,36, 35,43,42,41,49,48,47,16,4,55,11,3,1,4,103,53,57,51,73,3,1, -7,101,110,118,51,51,54,51,74,16,4,54,11,64,116,101,109,112,75,3,1, -7,101,110,118,51,51,54,52,76,16,4,53,11,3,1,4,103,53,57,53,77, -3,1,7,101,110,118,51,51,55,53,78,16,4,52,11,2,20,3,1,7,101, -110,118,51,51,55,54,79,18,158,95,10,94,2,21,2,22,95,2,4,2,23, +7,101,110,118,51,51,54,53,74,16,4,54,11,64,116,101,109,112,75,3,1, +7,101,110,118,51,51,54,54,76,16,4,53,11,3,1,4,103,53,57,53,77, +3,1,7,101,110,118,51,51,55,55,78,16,4,52,11,2,20,3,1,7,101, +110,118,51,51,55,56,79,18,158,95,10,94,2,21,2,22,95,2,4,2,23, 94,72,113,117,111,116,101,45,115,121,110,116,97,120,80,2,24,56,18,16,2, -158,2,72,56,57,18,46,18,16,2,158,2,10,44,58,18,106,2,8,8,30, +158,2,72,56,57,18,46,18,16,2,158,2,11,44,58,18,106,2,8,8,30, 38,37,36,35,43,42,41,16,4,8,29,11,3,1,4,103,53,56,53,81,3, -1,7,101,110,118,51,52,48,49,82,16,4,8,28,11,65,95,101,108,115,101, -83,3,1,7,101,110,118,51,52,48,50,84,16,4,8,27,11,2,26,3,1, -7,101,110,118,51,52,48,54,85,16,4,8,26,11,61,108,86,3,1,7,101, -110,118,51,52,48,55,87,16,4,59,11,61,97,88,3,1,7,101,110,118,51, -52,48,56,89,18,16,2,158,2,10,8,30,8,31,18,16,2,158,2,9,8, +1,7,101,110,118,51,52,48,51,82,16,4,8,28,11,65,95,101,108,115,101, +83,3,1,7,101,110,118,51,52,48,52,84,16,4,8,27,11,2,26,3,1, +7,101,110,118,51,52,48,56,85,16,4,8,26,11,61,108,86,3,1,7,101, +110,118,51,52,48,57,87,16,4,59,11,61,97,88,3,1,7,101,110,118,51, +52,49,48,89,18,16,2,158,2,11,8,30,8,31,18,16,2,158,2,9,8, 30,8,32,18,100,71,119,105,116,104,45,115,121,110,116,97,120,90,8,34,38, -37,36,35,43,16,4,8,33,11,2,70,3,1,7,101,110,118,51,52,50,48, +37,36,35,43,16,4,8,33,11,2,70,3,1,7,101,110,118,51,52,50,50, 91,18,99,2,49,8,37,38,37,36,16,4,8,36,11,2,27,3,1,7,101, -110,118,51,51,50,49,92,16,4,8,35,11,2,51,3,1,7,101,110,118,51, -52,50,49,93,18,102,66,115,121,110,116,97,120,94,8,41,38,37,36,8,36, +110,118,51,51,50,51,92,16,4,8,35,11,2,51,3,1,7,101,110,118,51, +52,50,51,93,18,102,66,115,121,110,116,97,120,94,8,41,38,37,36,8,36, 8,35,16,6,8,40,11,3,1,4,103,54,48,48,95,3,1,4,103,54,48, -49,96,3,1,7,101,110,118,51,52,50,54,97,2,97,16,6,8,39,11,61, -95,98,2,58,3,1,7,101,110,118,51,52,50,55,99,2,99,16,4,8,38, -11,2,52,3,1,7,101,110,118,51,52,51,50,100,18,99,2,49,8,43,38, -37,36,8,36,16,4,8,42,11,2,51,3,1,7,101,110,118,51,52,51,51, +49,96,3,1,7,101,110,118,51,52,50,56,97,2,97,16,6,8,39,11,61, +95,98,2,58,3,1,7,101,110,118,51,52,50,57,99,2,99,16,4,8,38, +11,2,52,3,1,7,101,110,118,51,52,51,52,100,18,99,2,49,8,43,38, +37,36,8,36,16,4,8,42,11,2,51,3,1,7,101,110,118,51,52,51,53, 101,18,102,70,115,121,110,116,97,120,47,108,111,99,102,8,47,38,37,36,8, 36,8,42,16,8,8,46,11,3,1,4,103,54,48,50,103,3,1,4,103,54, -48,51,104,3,1,4,103,54,48,52,105,3,1,7,101,110,118,51,52,51,57, +48,51,104,3,1,4,103,54,48,52,105,3,1,7,101,110,118,51,52,52,49, 106,2,106,2,106,16,8,8,45,11,2,98,63,108,111,99,107,2,58,3,1, -7,101,110,118,51,52,52,48,108,2,108,2,108,16,4,8,44,11,2,52,3, -1,7,101,110,118,51,52,52,55,109,11,93,83,159,34,93,80,159,34,34,35, +7,101,110,118,51,52,52,50,108,2,108,2,108,16,4,8,44,11,2,52,3, +1,7,101,110,118,51,52,52,57,109,11,93,83,159,34,93,80,159,34,34,35, 89,162,8,36,36,40,2,4,223,0,87,94,28,248,80,158,35,35,194,12,250, 22,252,48,2,2,9,6,18,18,112,114,111,112,101,114,32,115,121,110,116,97, 120,32,108,105,115,116,110,196,250,22,216,197,196,197,95,68,35,37,107,101,114, @@ -2313,14 +2315,14 @@ EVAL_ONE_SIZED_STR((char *)expr, 3270); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,204,252,159,24,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,204,252,159,24,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,68,35,37,100,101, 102,105,110,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,99,159,34, -16,0,16,0,11,11,16,0,34,11,16,4,76,98,101,103,105,110,45,102,111, -114,45,115,121,110,116,97,120,3,77,100,101,102,105,110,101,45,102,111,114,45, -115,121,110,116,97,120,4,66,100,101,102,105,110,101,5,73,100,101,102,105,110, -101,45,115,121,110,116,97,120,6,16,4,11,11,11,11,16,4,2,3,2,4, -2,5,2,6,34,38,94,16,5,95,2,5,2,6,2,4,87,99,83,159,34, +16,0,16,0,11,11,16,0,34,11,16,4,77,100,101,102,105,110,101,45,102, +111,114,45,115,121,110,116,97,120,3,73,100,101,102,105,110,101,45,115,121,110, +116,97,120,4,76,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120, +5,66,100,101,102,105,110,101,6,16,4,11,11,11,11,16,4,2,3,2,4, +2,5,2,6,34,38,94,16,5,95,2,6,2,4,2,3,87,99,83,159,34, 93,80,159,34,8,42,35,89,162,34,37,59,68,116,114,121,45,110,101,120,116, 7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36, 197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28,248,22,213,194, @@ -2368,10 +2370,10 @@ 32,101,120,112,114,101,115,115,105,111,110,115,32,102,111,114,32,112,114,111,99, 101,100,117,114,101,32,98,111,100,121,41,14,203,12,27,249,22,216,20,15,159, 43,45,49,204,27,249,22,216,20,15,159,44,46,49,196,27,249,22,216,20,15, -159,45,47,49,248,199,200,249,80,158,45,41,205,27,250,22,67,198,200,199,252, +159,45,47,49,248,199,200,249,80,158,45,41,205,27,250,22,67,200,198,199,252, 80,158,51,42,20,15,159,51,48,49,21,95,3,1,4,103,54,53,51,15,3, -1,4,103,54,53,49,16,3,1,4,103,54,53,50,17,248,22,84,198,248,22, -86,198,248,22,58,198,250,22,252,47,2,11,2,11,197,83,159,34,93,80,159, +1,4,103,54,53,49,16,3,1,4,103,54,53,50,17,248,22,58,198,248,22, +86,198,248,22,84,198,250,22,252,47,2,11,2,11,197,83,159,34,93,80,159, 34,8,38,35,89,162,34,36,45,73,103,101,110,101,114,97,108,45,112,114,111, 116,111,18,223,0,27,249,22,216,20,15,159,37,43,49,197,27,28,248,80,158, 37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, @@ -2401,20 +2403,20 @@ 80,158,42,38,193,248,80,158,42,39,193,11,11,28,192,27,248,22,58,194,27, 248,22,59,195,249,22,7,248,22,223,249,80,158,45,40,20,15,159,45,36,49, 197,89,162,34,35,47,9,225,8,9,2,27,249,22,216,20,15,159,39,37,49, -198,249,80,158,39,41,196,27,249,22,67,198,197,251,80,158,44,42,20,15,159, +198,249,80,158,39,41,196,27,249,22,67,197,198,251,80,158,44,42,20,15,159, 44,38,49,21,94,3,1,4,103,54,50,54,23,3,1,4,103,54,50,53,24, -248,22,58,197,248,22,59,197,27,28,248,80,158,40,34,195,249,80,158,41,35, +248,22,59,197,248,22,58,197,27,28,248,80,158,40,34,195,249,80,158,41,35, 248,80,158,42,36,197,27,248,80,158,43,37,198,91,159,37,11,90,161,37,34, 11,250,80,158,48,43,198,35,11,28,194,27,28,248,22,213,197,196,201,249,80, 158,48,44,28,248,80,158,49,38,196,248,22,65,248,80,158,50,39,197,11,250, 22,216,197,199,197,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248, -22,86,196,249,22,7,248,22,223,27,249,22,67,199,198,249,80,158,48,40,20, -15,159,48,39,49,249,22,71,248,22,58,197,250,80,158,53,42,20,15,159,53, -40,49,21,93,3,1,4,103,54,50,55,25,248,22,59,200,89,162,34,35,50, +22,86,196,249,22,7,248,22,223,27,249,22,67,198,199,249,80,158,48,40,20, +15,159,48,39,49,249,22,71,248,22,59,197,250,80,158,53,42,20,15,159,53, +40,49,21,93,3,1,4,103,54,50,55,25,248,22,58,200,89,162,34,35,50, 9,226,10,11,2,3,27,249,22,216,20,15,159,40,41,49,199,249,80,158,40, -41,197,27,250,22,67,198,199,200,251,80,158,45,42,20,15,159,45,42,49,21, +41,197,27,250,22,67,200,199,198,251,80,158,45,42,20,15,159,45,42,49,21, 94,3,1,4,103,54,51,50,26,3,1,4,103,54,51,49,27,249,22,71,248, -22,84,199,248,22,86,199,248,22,58,197,250,22,252,47,2,11,2,11,197,87, +22,84,199,248,22,58,199,248,22,86,197,250,22,252,47,2,11,2,11,197,87, 95,249,22,3,89,162,34,35,41,9,224,4,5,28,248,80,158,36,45,195,12, 251,22,252,47,2,11,6,40,40,110,111,116,32,97,110,32,105,100,101,110,116, 105,102,105,101,114,32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,97, @@ -2422,7 +2424,7 @@ 22,252,47,2,11,6,29,29,100,117,112,108,105,99,97,116,101,32,97,114,103, 117,109,101,110,116,32,105,100,101,110,116,105,102,105,101,114,29,200,196,12,193, 27,89,162,8,36,35,36,62,109,107,30,223,1,89,162,34,35,52,9,224,0, -1,87,94,28,249,22,77,247,22,252,103,3,21,93,70,101,120,112,114,101,115, +1,87,94,28,249,22,77,247,22,252,105,3,21,93,70,101,120,112,114,101,115, 115,105,111,110,31,250,22,252,47,2,11,6,36,36,110,111,116,32,97,108,108, 111,119,101,100,32,105,110,32,97,110,32,101,120,112,114,101,115,115,105,111,110, 32,99,111,110,116,101,120,116,32,197,12,27,249,22,216,20,15,159,38,34,49, @@ -2457,60 +2459,60 @@ 2,2,4,2,2,2,5,2,2,2,6,2,2,98,38,10,35,11,95,159,67, 35,37,113,113,115,116,120,71,9,11,159,2,37,9,11,159,2,64,9,11,16, 0,96,37,8,254,1,11,16,0,16,4,36,11,77,100,101,102,105,110,101,45, -118,97,108,117,101,115,45,115,116,120,72,3,1,7,101,110,118,51,52,53,51, -73,16,4,35,11,63,115,116,120,74,3,1,7,101,110,118,51,52,53,52,75, +118,97,108,117,101,115,45,115,116,120,72,3,1,7,101,110,118,51,52,53,53, +73,16,4,35,11,63,115,116,120,74,3,1,7,101,110,118,51,52,53,54,75, 18,102,2,70,45,39,38,37,36,35,16,8,44,11,3,1,4,103,54,48,53, 76,3,1,4,103,54,48,54,77,3,1,4,103,54,48,55,78,3,1,7,101, -110,118,51,52,54,57,79,2,79,2,79,16,8,43,11,61,95,80,65,112,114, -111,116,111,81,64,98,111,100,121,82,3,1,7,101,110,118,51,52,55,48,83, -2,83,2,83,16,6,42,11,2,22,2,18,3,1,7,101,110,118,51,52,55, -56,84,2,84,18,104,64,100,101,115,116,85,49,39,38,37,36,35,44,43,16, +110,118,51,52,55,49,79,2,79,2,79,16,8,43,11,61,95,80,65,112,114, +111,116,111,81,64,98,111,100,121,82,3,1,7,101,110,118,51,52,55,50,83, +2,83,2,83,16,6,42,11,2,22,2,18,3,1,7,101,110,118,51,52,56, +48,84,2,84,18,104,64,100,101,115,116,85,49,39,38,37,36,35,44,43,16, 6,48,11,2,22,2,18,2,84,2,84,16,6,47,11,3,1,4,103,54,50, -48,86,3,1,4,103,54,50,49,87,3,1,7,101,110,118,51,52,56,53,88, +48,86,3,1,4,103,54,50,49,87,3,1,7,101,110,118,51,52,56,55,88, 2,88,16,6,46,11,62,105,100,89,63,97,114,103,90,3,1,7,101,110,118, -51,52,56,54,91,2,91,18,16,2,158,2,70,49,50,18,158,160,10,66,108, +51,52,56,56,91,2,91,18,16,2,158,2,70,49,50,18,158,160,10,66,108, 97,109,98,100,97,92,2,23,2,24,49,18,104,2,85,53,39,38,37,36,35, 44,43,48,16,8,52,11,3,1,4,103,54,49,55,93,3,1,4,103,54,49, -56,94,3,1,4,103,54,49,57,95,3,1,7,101,110,118,51,53,49,53,96, +56,94,3,1,4,103,54,49,57,95,3,1,7,101,110,118,51,53,49,55,96, 2,96,2,96,16,8,51,11,2,89,2,90,64,114,101,115,116,97,3,1,7, -101,110,118,51,53,49,54,98,2,98,2,98,18,16,2,158,93,103,2,25,8, +101,110,118,51,53,49,56,98,2,98,2,98,18,16,2,158,93,103,2,25,8, 27,98,8,26,10,34,11,95,159,68,35,37,112,97,114,97,109,122,99,9,11, 159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,100,9,11,159,2, -37,9,11,16,14,66,115,121,110,116,97,120,101,29,102,11,11,73,115,121,110, -116,97,120,45,99,97,115,101,42,42,103,2,102,1,20,99,97,116,99,104,45, -101,108,108,105,112,115,105,115,45,101,114,114,111,114,104,2,102,78,112,97,116, -116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,105,2,102,2,51,2, -102,2,56,2,102,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112, +37,9,11,16,14,73,115,121,110,116,97,120,45,99,97,115,101,42,42,101,29, +102,11,11,2,51,2,102,66,115,121,110,116,97,120,103,2,102,2,56,2,102, +78,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,104,2, +102,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112,105,2,102,1, +20,99,97,116,99,104,45,101,108,108,105,112,115,105,115,45,101,114,114,111,114, 106,2,102,98,59,10,35,11,95,159,64,35,37,115,99,107,9,11,159,2,100, 9,11,159,2,37,9,11,16,0,96,58,8,254,1,11,16,0,16,4,57,11, 61,120,108,3,1,6,101,110,118,52,53,52,109,16,4,56,11,68,104,101,114, 101,45,115,116,120,110,3,1,6,101,110,118,52,53,54,111,16,4,55,11,2, -110,2,111,13,16,4,35,2,102,2,50,11,93,8,252,203,11,16,4,54,11, -61,114,112,3,1,7,101,110,118,51,53,50,51,113,8,27,95,9,8,252,203, +110,2,111,13,16,4,35,2,102,2,50,11,93,8,252,205,11,16,4,54,11, +61,114,112,3,1,7,101,110,118,51,53,50,53,113,8,27,95,9,8,252,205, 11,2,50,18,16,2,158,2,70,53,8,28,18,158,160,10,2,92,2,26,2, 27,53,18,16,2,158,2,70,45,8,29,18,158,160,35,104,2,19,8,32,39, 38,37,36,35,44,43,42,16,8,8,31,11,3,1,4,103,54,51,53,114,3, 1,4,103,54,51,54,115,3,1,4,103,54,51,55,116,3,1,7,101,110,118, -51,53,53,50,117,2,117,2,117,16,8,8,30,11,69,115,111,109,101,116,104, +51,53,53,52,117,2,117,2,117,16,8,8,30,11,69,115,111,109,101,116,104, 105,110,103,118,64,109,111,114,101,119,2,97,3,1,7,101,110,118,51,53,53, -51,120,2,120,2,120,2,20,8,32,8,32,18,102,2,70,8,34,39,38,37, +53,120,2,120,2,120,2,20,8,32,8,32,18,102,2,70,8,34,39,38,37, 36,35,44,43,16,6,8,33,11,2,89,66,109,107,45,114,104,115,121,3,1, -7,101,110,118,51,52,55,55,122,2,122,18,16,2,158,2,70,8,34,8,35, +7,101,110,118,51,52,55,57,122,2,122,18,16,2,158,2,70,8,34,8,35, 18,8,35,18,158,96,10,2,15,93,2,16,2,17,8,34,18,101,2,70,8, 38,39,38,37,36,35,16,8,8,37,11,3,1,4,103,54,49,49,123,3,1, 4,103,54,49,50,124,3,1,4,103,54,49,51,125,3,1,7,101,110,118,51, -54,52,51,126,2,126,2,126,16,8,8,36,11,2,80,2,89,2,97,3,1, -7,101,110,118,51,54,52,52,127,2,127,2,127,18,101,2,70,8,41,39,38, +54,52,53,126,2,126,2,126,16,8,8,36,11,2,80,2,89,2,97,3,1, +7,101,110,118,51,54,52,54,127,2,127,2,127,18,101,2,70,8,41,39,38, 37,36,35,16,8,8,40,11,3,1,4,103,54,49,52,128,3,1,4,103,54, -49,53,129,3,1,4,103,54,49,54,130,3,1,7,101,110,118,51,54,57,49, +49,53,129,3,1,4,103,54,49,54,130,3,1,7,101,110,118,51,54,57,51, 131,2,131,2,131,16,8,8,39,11,2,80,2,89,64,101,120,112,114,132,3, -1,7,101,110,118,51,54,57,50,133,2,133,2,133,18,158,96,10,2,33,93, +1,7,101,110,118,51,54,57,52,133,2,133,2,133,18,158,96,10,2,33,93, 2,34,2,35,8,41,18,98,73,100,101,102,105,110,101,45,118,97,108,117,101, 115,134,8,43,39,38,37,16,4,8,42,11,2,30,3,1,7,101,110,118,51, -52,53,50,135,18,16,2,158,75,100,101,102,105,110,101,45,115,121,110,116,97, +52,53,52,135,18,16,2,158,75,100,101,102,105,110,101,45,115,121,110,116,97, 120,101,115,136,8,43,8,44,18,16,2,158,1,24,100,101,102,105,110,101,45, 118,97,108,117,101,115,45,102,111,114,45,115,121,110,116,97,120,137,8,43,8, -45,11,16,5,93,2,3,87,95,83,159,34,93,80,159,34,8,29,35,89,162, +45,11,16,5,93,2,5,87,95,83,159,34,93,80,159,34,8,29,35,89,162, 34,36,47,2,7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,39,248, 80,158,38,36,197,27,248,80,158,39,38,198,28,248,80,158,39,40,193,248,80, 158,39,41,193,11,11,28,192,27,248,22,58,194,27,248,22,59,195,249,80,158, @@ -2518,7 +2520,7 @@ 55,52,138,249,22,2,80,159,44,8,28,35,199,250,22,252,47,2,11,2,11, 197,83,159,34,93,80,159,34,8,28,35,89,162,35,35,40,9,223,0,250,80, 158,37,43,20,15,159,37,37,45,21,93,3,1,4,103,54,55,51,139,248,22, -58,197,89,162,34,35,57,9,223,0,27,247,22,252,103,3,87,94,28,249,22, +58,197,89,162,34,35,57,9,223,0,27,247,22,252,105,3,87,94,28,249,22, 77,194,21,95,66,109,111,100,117,108,101,140,72,109,111,100,117,108,101,45,98, 101,103,105,110,141,69,116,111,112,45,108,101,118,101,108,142,12,250,22,252,47, 2,11,6,51,51,97,108,108,111,119,101,100,32,111,110,108,121,32,97,116,32, @@ -2565,18 +2567,18 @@ 1,4,103,54,56,56,150,200,249,80,159,40,8,29,35,196,199,34,20,99,159, 36,16,11,2,36,2,59,2,41,2,68,2,43,2,39,2,45,2,47,2,52, 2,55,2,61,16,16,18,99,2,70,8,48,39,38,37,16,4,8,47,11,2, -74,3,1,7,101,110,118,51,55,49,52,151,16,4,8,46,11,63,99,116,120, -152,3,1,7,101,110,118,51,55,49,53,153,18,158,93,101,2,0,8,51,39, +74,3,1,7,101,110,118,51,55,49,54,151,16,4,8,46,11,63,99,116,120, +152,3,1,7,101,110,118,51,55,49,55,153,18,158,93,101,2,0,8,51,39, 38,37,8,47,8,46,16,4,8,50,11,3,1,4,103,54,55,50,154,3,1, -7,101,110,118,51,55,50,48,155,16,4,8,49,11,2,80,3,1,7,101,110, -118,51,55,50,49,156,8,51,18,158,160,35,101,2,0,8,54,39,38,37,8, +7,101,110,118,51,55,50,50,155,16,4,8,49,11,2,80,3,1,7,101,110, +118,51,55,50,51,156,8,51,18,158,160,35,101,2,0,8,54,39,38,37,8, 47,8,46,16,6,8,53,11,3,1,4,103,54,54,56,157,3,1,4,103,54, -54,57,158,3,1,7,101,110,118,51,55,51,48,159,2,159,16,6,8,52,11, -2,80,64,101,108,101,109,160,3,1,7,101,110,118,51,55,51,49,161,2,161, -2,138,8,54,8,54,18,158,95,10,2,3,2,139,8,54,18,158,110,101,2, +54,57,158,3,1,7,101,110,118,51,55,51,50,159,2,159,16,6,8,52,11, +2,80,64,101,108,101,109,160,3,1,7,101,110,118,51,55,51,51,161,2,161, +2,138,8,54,8,54,18,158,95,10,2,5,2,139,8,54,18,158,110,101,2, 0,8,57,39,38,37,8,47,8,46,16,6,8,56,11,3,1,4,103,54,55, -48,162,3,1,4,103,54,55,49,163,3,1,7,101,110,118,51,55,52,51,164, -2,164,16,6,8,55,11,2,80,2,160,3,1,7,101,110,118,51,55,52,52, +48,162,3,1,4,103,54,55,49,163,3,1,7,101,110,118,51,55,52,53,164, +2,164,16,6,8,55,11,2,80,2,160,3,1,7,101,110,118,51,55,52,54, 165,2,165,158,2,134,8,57,158,2,136,8,57,158,2,137,8,57,158,64,115, 101,116,33,166,8,57,158,70,108,101,116,45,118,97,108,117,101,115,167,8,57, 158,71,108,101,116,42,45,118,97,108,117,101,115,168,8,57,158,73,108,101,116, @@ -2589,38 +2591,38 @@ 8,57,158,65,35,37,97,112,112,176,8,57,158,65,35,37,116,111,112,177,8, 57,158,67,35,37,100,97,116,117,109,178,8,57,8,57,18,102,2,70,8,59, 39,38,37,8,47,8,46,8,56,8,55,16,4,8,58,11,61,101,179,3,1, -7,101,110,118,51,55,52,57,180,18,16,2,158,2,0,8,59,8,60,18,158, -160,35,104,2,3,8,63,39,38,37,8,47,8,46,8,56,8,55,8,58,16, +7,101,110,118,51,55,53,49,180,18,16,2,158,2,0,8,59,8,60,18,158, +160,35,104,2,5,8,63,39,38,37,8,47,8,46,8,56,8,55,8,58,16, 4,8,62,11,3,1,4,103,54,56,50,181,3,1,7,101,110,118,51,55,53, -53,182,16,4,8,61,11,61,118,183,3,1,7,101,110,118,51,55,53,54,184, +55,182,16,4,8,61,11,61,118,183,3,1,7,101,110,118,51,55,53,56,184, 2,144,8,63,8,63,18,16,2,158,2,134,8,59,8,64,18,158,95,104,2, 137,8,67,39,38,37,8,47,8,46,8,56,8,55,8,58,16,6,8,66,11, 3,1,4,103,54,56,48,185,3,1,4,103,54,56,49,186,3,1,7,101,110, -118,51,55,54,55,187,2,187,16,6,8,65,11,2,89,2,132,3,1,7,101, -110,118,51,55,54,56,188,2,188,158,2,145,8,67,158,2,146,8,67,8,67, +118,51,55,54,57,187,2,187,16,6,8,65,11,2,89,2,132,3,1,7,101, +110,118,51,55,55,48,188,2,188,158,2,145,8,67,158,2,146,8,67,8,67, 18,16,2,158,67,114,101,113,117,105,114,101,189,8,59,8,68,18,158,160,35, 104,78,114,101,113,117,105,114,101,45,102,111,114,45,115,121,110,116,97,120,190, 8,71,39,38,37,8,47,8,46,8,56,8,55,8,58,16,4,8,70,11,3, -1,4,103,54,55,57,191,3,1,7,101,110,118,51,55,55,57,192,16,4,8, -69,11,2,183,3,1,7,101,110,118,51,55,56,48,193,2,147,8,71,8,71, +1,4,103,54,55,57,191,3,1,7,101,110,118,51,55,56,49,192,16,4,8, +69,11,2,183,3,1,7,101,110,118,51,55,56,50,193,2,147,8,71,8,71, 18,16,2,158,1,20,114,101,113,117,105,114,101,45,102,111,114,45,116,101,109, 112,108,97,116,101,194,8,59,8,72,18,158,160,35,104,2,189,8,75,39,38, 37,8,47,8,46,8,56,8,55,8,58,16,4,8,74,11,3,1,4,103,54, -55,56,195,3,1,7,101,110,118,51,55,56,57,196,16,4,8,73,11,2,183, -3,1,7,101,110,118,51,55,57,48,197,2,148,8,75,8,75,18,16,2,158, +55,56,195,3,1,7,101,110,118,51,55,57,49,196,16,4,8,73,11,2,183, +3,1,7,101,110,118,51,55,57,50,197,2,148,8,75,8,75,18,16,2,158, 2,136,8,59,8,76,18,158,95,104,2,137,8,79,39,38,37,8,47,8,46, 8,56,8,55,8,58,16,4,8,78,11,3,1,4,103,54,55,53,198,3,1, -7,101,110,118,51,56,48,56,199,16,4,8,77,11,65,111,116,104,101,114,200, -3,1,7,101,110,118,51,56,48,57,201,158,9,8,79,158,96,10,2,0,2, +7,101,110,118,51,56,49,48,199,16,4,8,77,11,65,111,116,104,101,114,200, +3,1,7,101,110,118,51,56,49,49,201,158,9,8,79,158,96,10,2,0,2, 150,93,66,118,97,108,117,101,115,202,8,79,8,79,11,9,93,68,35,37,107, 101,114,110,101,108,203,96,2,203,2,64,2,37,2,71,0}; EVAL_ONE_SIZED_STR((char *)expr, 6315); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,252,2,2,252,77,68,159,34,20,99,159,34,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,252,5,2,252,61,68,159,34,20,99,159,34,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,73,35,37, 109,111,114,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,48,80, -158,34,34,20,99,159,34,16,28,30,3,2,2,74,115,116,114,117,99,116,58, +158,34,34,20,99,159,34,16,31,30,3,2,2,74,115,116,114,117,99,116,58, 112,114,111,109,105,115,101,4,254,1,30,5,2,2,72,109,97,107,101,45,112, 114,111,109,105,115,101,6,254,1,30,7,2,2,68,112,114,111,109,105,115,101, 63,8,254,1,30,9,2,2,69,112,114,111,109,105,115,101,45,112,10,254,1, @@ -2629,832 +2631,831 @@ 117,114,114,101,110,116,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105, 111,110,16,254,1,30,17,68,35,37,112,97,114,97,109,122,18,1,23,101,120, 116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, -19,254,1,30,20,2,18,1,20,112,97,114,97,109,101,116,101,114,105,122,97, -116,105,111,110,45,107,101,121,21,254,1,30,22,2,2,1,26,99,97,108,108, -45,119,105,116,104,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, -110,23,254,1,30,24,2,2,79,115,116,114,117,99,116,58,98,114,101,97,107, -45,112,97,114,97,109,122,25,254,1,30,26,2,2,77,109,97,107,101,45,98, -114,101,97,107,45,112,97,114,97,109,122,27,254,1,30,28,2,2,73,98,114, -101,97,107,45,112,97,114,97,109,122,63,29,254,1,30,30,2,2,76,98,114, -101,97,107,45,112,97,114,97,109,122,45,114,101,102,31,254,1,30,32,2,2, -77,98,114,101,97,107,45,112,97,114,97,109,122,45,115,101,116,33,33,254,1, -30,34,2,2,1,29,115,116,114,117,99,116,58,98,114,101,97,107,45,112,97, -114,97,109,101,116,101,114,105,122,97,116,105,111,110,35,254,1,30,36,2,2, -1,27,109,97,107,101,45,98,114,101,97,107,45,112,97,114,97,109,101,116,101, -114,105,122,97,116,105,111,110,37,254,1,30,38,2,2,1,23,98,114,101,97, -107,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,63,39,254, -1,30,40,2,2,1,27,98,114,101,97,107,45,112,97,114,97,109,101,116,101, -114,105,122,97,116,105,111,110,45,99,101,108,108,41,254,1,30,42,2,2,1, -32,115,101,116,45,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114,105, -122,97,116,105,111,110,45,99,101,108,108,33,43,254,1,30,44,2,2,1,30, -99,117,114,114,101,110,116,45,98,114,101,97,107,45,112,97,114,97,109,101,116, -101,114,105,122,97,116,105,111,110,45,254,1,30,46,2,18,77,98,114,101,97, -107,45,101,110,97,98,108,101,100,45,107,101,121,47,254,1,30,48,2,2,1, -32,99,97,108,108,45,119,105,116,104,45,98,114,101,97,107,45,112,97,114,97, -109,101,116,101,114,105,122,97,116,105,111,110,49,254,1,30,50,2,18,75,99, -104,101,99,107,45,102,111,114,45,98,114,101,97,107,51,254,1,30,52,2,2, -1,24,115,101,108,101,99,116,45,104,97,110,100,108,101,114,47,110,111,45,98, -114,101,97,107,115,53,254,1,30,54,2,2,1,27,115,101,108,101,99,116,45, -104,97,110,100,108,101,114,47,98,114,101,97,107,115,45,97,115,45,105,115,55, -254,1,30,56,2,2,77,102,97,108,115,101,45,116,104,114,101,97,100,45,99, -101,108,108,57,254,1,30,58,2,2,1,30,99,104,101,99,107,45,119,105,116, -104,45,104,97,110,100,108,101,114,115,45,105,110,45,99,111,110,116,101,120,116, -59,254,1,16,0,11,11,16,18,2,41,2,39,2,31,2,33,2,29,2,59, -2,57,2,37,2,27,2,6,2,10,2,55,2,53,2,43,2,12,2,35,2, -25,2,4,52,11,16,18,2,49,2,23,2,45,2,16,2,14,2,8,69,102, -108,117,105,100,45,108,101,116,60,72,112,97,114,97,109,101,116,101,114,105,122, -101,61,70,108,101,116,45,115,116,114,117,99,116,62,66,108,101,116,47,99,99, -63,62,100,111,64,73,119,105,116,104,45,104,97,110,100,108,101,114,115,65,71, -115,101,116,33,45,118,97,108,117,101,115,66,78,112,97,114,97,109,101,116,101, -114,105,122,101,45,98,114,101,97,107,67,64,116,105,109,101,68,74,119,105,116, -104,45,104,97,110,100,108,101,114,115,42,69,65,100,101,108,97,121,70,64,99, -97,115,101,71,16,18,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, -11,11,11,16,18,2,49,2,23,2,45,2,16,2,14,2,8,2,60,2,61, -2,62,2,63,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2,71,40, -52,106,16,5,93,69,99,97,115,101,45,116,101,115,116,72,89,162,34,35,51, -9,223,0,27,249,22,216,20,15,159,37,34,43,196,27,28,248,80,158,37,34, -194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248, -80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43, -37,196,28,248,80,158,43,34,193,249,80,158,44,38,27,248,80,158,46,36,196, -28,248,80,158,46,34,193,249,80,158,47,38,248,80,158,48,36,195,248,80,158, -48,39,248,80,158,49,37,196,11,248,80,158,45,39,248,80,158,46,37,196,11, -11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,28,248, -22,47,248,22,217,194,27,249,22,67,196,195,251,80,158,44,40,20,15,159,44, -35,43,21,94,3,1,4,103,54,57,54,73,3,1,4,103,54,57,53,74,248, -22,58,197,248,22,59,197,27,249,22,67,196,195,251,80,158,44,40,20,15,159, -44,36,43,21,94,3,1,4,103,54,57,56,75,3,1,4,103,54,57,55,76, -248,22,58,197,248,22,59,197,27,28,248,80,158,38,34,195,249,80,158,39,35, -248,80,158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249, -80,158,42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158, -44,34,193,249,80,158,45,38,27,248,80,158,47,36,196,28,248,80,158,47,41, -193,248,80,158,47,42,193,11,248,80,158,46,39,248,80,158,47,37,196,11,11, -11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,27,249,22, -67,196,195,251,80,158,45,40,20,15,159,45,37,43,21,94,3,1,4,103,55, -48,48,77,3,1,4,103,54,57,57,78,248,22,58,197,248,22,59,197,250,22, -252,47,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,79,197,34,20, -99,159,34,16,9,30,80,65,35,37,115,116,120,81,69,115,116,120,45,112,97, -105,114,63,82,11,30,83,2,81,67,99,111,110,115,47,35,102,84,1,30,85, -2,81,67,115,116,120,45,99,97,114,86,5,30,87,2,81,67,115,116,120,45, -99,100,114,88,6,30,89,2,81,69,97,112,112,101,110,100,47,35,102,90,0, -30,91,2,81,71,115,116,120,45,110,117,108,108,47,35,102,92,9,30,93,69, -35,37,115,116,120,99,97,115,101,94,1,24,97,112,112,108,121,45,112,97,116, -116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,95,0,30,96,2,81, -69,115,116,120,45,108,105,115,116,63,97,8,30,98,2,81,69,115,116,120,45, -62,108,105,115,116,99,4,16,4,18,98,64,104,101,114,101,100,40,98,38,10, -34,11,95,159,2,18,9,11,159,68,35,37,100,101,102,105,110,101,101,9,11, -159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,102,9,11,16,78, -2,33,2,2,2,37,2,2,1,22,98,114,101,97,107,45,112,97,114,97,109, -101,116,101,114,105,122,97,116,105,111,110,103,2,2,2,39,2,2,2,23,2, -2,2,49,2,2,2,63,2,2,2,64,2,2,2,70,2,2,2,66,2,2, -2,41,2,2,2,71,2,2,67,112,114,111,109,105,115,101,104,2,2,2,68, -2,2,2,6,2,2,2,29,2,2,2,43,2,2,2,53,2,2,2,12,2, -2,2,4,2,2,2,61,2,2,2,62,2,2,2,45,2,2,2,25,2,2, -2,57,2,2,2,10,2,2,2,65,2,2,2,27,2,2,2,14,2,2,2, -67,2,2,2,59,2,2,2,60,2,2,2,31,2,2,2,69,2,2,2,72, -2,2,2,55,2,2,2,35,2,2,2,8,2,2,2,16,2,2,98,37,10, -35,11,95,159,67,35,37,113,113,115,116,120,105,9,11,159,76,35,37,115,116, -120,99,97,115,101,45,115,99,104,101,109,101,106,9,11,159,2,81,9,11,16, -0,96,36,8,254,1,11,16,0,16,4,35,11,61,120,107,3,1,7,101,110, -118,51,56,49,53,108,18,158,95,100,63,101,113,63,109,43,38,37,36,35,16, -8,42,11,3,1,4,103,54,57,50,110,3,1,4,103,54,57,51,111,3,1, -4,103,54,57,52,112,3,1,7,101,110,118,51,56,50,50,113,2,113,2,113, -16,8,41,11,61,95,114,2,107,61,107,115,3,1,7,101,110,118,51,56,50, -51,116,2,116,2,116,158,2,73,43,158,95,10,65,113,117,111,116,101,117,2, -74,43,43,18,158,96,10,64,101,113,118,63,118,2,75,94,2,117,2,76,43, -18,158,95,100,64,109,101,109,118,119,46,38,37,36,35,16,8,45,11,3,1, -4,103,54,56,57,120,3,1,4,103,54,57,48,121,3,1,4,103,54,57,49, -122,3,1,7,101,110,118,51,56,51,55,123,2,123,2,123,16,6,44,11,2, -114,2,115,3,1,7,101,110,118,51,56,51,56,124,2,124,158,2,77,46,158, -95,10,2,117,2,78,46,46,11,16,5,93,2,71,89,162,34,35,8,27,9, -223,0,27,249,22,216,20,15,159,37,34,46,196,27,28,248,80,158,37,34,194, -249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80, -158,40,34,193,249,80,158,41,38,248,80,158,42,36,195,248,80,158,42,39,248, -80,158,43,37,196,11,11,28,192,27,248,22,58,194,27,248,22,59,195,250,80, -158,41,40,20,15,159,41,35,46,21,93,3,1,4,103,55,51,49,125,195,27, -28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80, -158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36, -195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,38,27, -248,80,158,47,36,196,28,248,80,158,47,34,193,28,27,248,80,158,48,36,194, -28,248,80,158,48,41,193,28,249,22,230,194,20,15,159,49,36,46,9,11,11, -27,248,80,158,48,37,194,28,248,80,158,48,34,193,249,80,158,49,35,248,80, -158,50,36,195,27,248,80,158,51,37,196,28,248,80,158,51,42,193,248,80,158, -51,43,193,11,11,11,11,248,80,158,46,39,248,80,158,47,37,196,11,11,11, -28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,94, -197,249,80,158,43,44,202,27,250,22,67,198,200,199,252,80,158,49,40,20,15, -159,49,37,46,21,95,3,1,4,103,55,51,52,126,3,1,4,103,55,51,51, -127,3,1,4,103,55,51,50,128,248,22,84,198,248,22,86,198,248,22,58,198, -27,28,248,80,158,39,34,196,249,80,158,40,35,248,80,158,41,36,198,27,248, -80,158,42,37,199,28,248,80,158,42,34,193,249,80,158,43,35,248,80,158,44, -36,195,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249,80,158,46,38, -27,248,80,158,48,36,196,28,248,80,158,48,34,193,249,80,158,49,38,27,248, -80,158,51,36,196,28,248,80,158,51,42,193,248,22,65,248,80,158,52,43,194, -11,27,248,80,158,51,37,196,28,248,80,158,51,34,193,249,80,158,52,35,248, -80,158,53,36,195,27,248,80,158,54,37,196,28,248,80,158,54,42,193,248,80, -158,54,43,193,11,11,11,248,80,158,47,39,248,80,158,48,37,196,11,11,11, -28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96, -197,27,248,22,95,198,249,80,158,45,44,204,27,251,22,67,201,200,202,199,250, -80,158,49,45,89,162,34,34,43,9,224,15,3,253,80,158,41,40,20,15,159, -41,38,46,21,96,3,1,4,103,55,51,54,129,3,1,4,103,55,51,53,130, -3,1,4,103,55,51,56,131,3,1,4,103,55,51,55,132,248,22,93,199,248, -22,58,199,248,22,84,199,248,22,94,199,21,95,62,105,102,133,95,2,72,61, -118,134,94,2,115,63,46,46,46,135,96,2,0,62,101,49,136,62,101,50,137, -2,135,20,15,159,49,39,46,27,28,248,80,158,40,34,197,249,80,158,41,35, -248,80,158,42,36,199,27,248,80,158,43,37,200,28,248,80,158,43,34,193,249, -80,158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158, -46,34,193,249,80,158,47,38,27,248,80,158,49,36,196,28,248,80,158,49,34, -193,249,80,158,50,38,27,248,80,158,52,36,196,28,248,80,158,52,42,193,248, -22,65,248,80,158,53,43,194,11,27,248,80,158,52,37,196,28,248,80,158,52, -34,193,249,80,158,53,35,248,80,158,54,36,195,27,248,80,158,55,37,196,28, -248,80,158,55,42,193,248,22,65,248,80,158,56,43,194,11,11,11,27,248,80, -158,49,37,196,28,248,80,158,49,34,193,249,80,158,50,35,248,80,158,51,36, -195,27,248,80,158,52,37,196,28,248,80,158,52,42,193,248,80,158,52,43,193, -11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93, -196,27,248,22,96,197,27,249,22,76,199,38,27,249,22,76,200,39,27,249,22, -75,201,40,249,80,158,48,44,23,15,27,253,22,67,205,202,206,201,204,203,250, -80,158,52,45,89,162,34,34,46,9,224,18,3,26,8,80,158,43,40,20,15, -159,43,40,46,21,98,3,1,4,103,55,51,57,138,3,1,4,103,55,52,48, -139,3,1,4,103,55,52,50,140,3,1,4,103,55,52,49,141,3,1,4,103, -55,52,52,142,3,1,4,103,55,52,51,143,248,22,93,201,248,22,58,201,249, -22,76,202,38,249,22,75,202,39,248,22,84,201,248,22,96,201,21,95,63,108, -101,116,144,93,94,2,107,2,134,96,2,133,95,2,72,2,107,94,2,115,2, -135,96,2,0,2,136,2,137,2,135,97,2,71,2,107,62,99,49,145,62,99, -50,146,2,135,20,15,159,52,41,46,27,28,248,80,158,41,34,198,249,80,158, -42,35,248,80,158,43,36,200,27,248,80,158,44,37,201,28,248,80,158,44,34, -193,27,28,248,22,213,194,193,201,249,80,158,46,35,248,80,158,47,36,196,27, -248,80,158,48,37,197,28,248,80,158,48,34,193,27,28,248,22,213,194,193,196, -249,80,158,50,38,27,248,80,158,52,36,197,28,248,80,158,52,34,193,249,80, -158,53,35,248,80,158,54,36,195,27,248,80,158,55,37,196,28,248,80,158,55, -34,193,249,80,158,56,35,248,80,158,57,36,195,27,248,80,158,58,37,196,28, -248,80,158,58,42,193,248,22,65,248,80,158,59,43,194,11,11,11,27,248,80, -158,52,37,197,250,22,216,198,195,198,11,11,11,28,192,27,248,22,58,194,27, -248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,249,22,76,199,38,27, -249,22,75,200,39,251,22,252,47,2,11,6,33,33,98,97,100,32,115,121,110, -116,97,120,32,40,110,111,116,32,97,32,100,97,116,117,109,32,115,101,113,117, -101,110,99,101,41,147,23,17,199,27,28,248,80,158,42,34,199,249,80,158,43, -35,248,80,158,44,36,201,27,248,80,158,45,37,202,28,248,80,158,45,34,193, -27,28,248,22,213,194,193,202,249,80,158,47,35,248,80,158,48,36,196,27,248, -80,158,49,37,197,28,248,80,158,49,34,193,27,28,248,22,213,194,193,196,249, -80,158,51,35,248,80,158,52,36,196,27,248,80,158,53,37,197,250,22,216,198, -195,198,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93, -196,27,248,22,94,197,251,22,252,47,2,11,6,52,52,98,97,100,32,115,121, -110,116,97,120,32,40,109,105,115,115,105,110,103,32,101,120,112,114,101,115,115, -105,111,110,32,97,102,116,101,114,32,100,97,116,117,109,32,115,101,113,117,101, -110,99,101,41,148,23,16,197,27,28,248,80,158,43,34,200,249,80,158,44,35, -248,80,158,45,36,202,27,248,80,158,46,37,203,250,22,216,205,195,205,11,28, -192,27,248,22,58,194,27,248,22,59,195,28,248,22,63,248,22,217,194,250,22, -252,47,2,11,2,79,204,250,22,252,47,2,11,6,31,31,98,97,100,32,115, -121,110,116,97,120,32,40,105,108,108,101,103,97,108,32,117,115,101,32,111,102, -32,96,46,39,41,149,206,250,22,252,47,2,11,2,79,202,34,20,99,159,34, -16,12,2,80,2,83,2,85,2,87,2,89,2,91,2,93,30,150,2,81,71, -105,100,101,110,116,105,102,105,101,114,63,151,2,2,96,2,98,30,152,68,35, -37,115,116,120,108,111,99,153,68,114,101,108,111,99,97,116,101,154,0,30,155, -2,94,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105,115,45,101,114, -114,111,114,156,1,16,8,18,98,2,100,48,38,37,36,16,4,47,11,2,107, -3,1,7,101,110,118,51,56,52,56,157,18,158,95,100,2,0,51,38,37,36, -47,16,6,50,11,3,1,4,103,55,50,57,158,3,1,4,103,55,51,48,159, -3,1,7,101,110,118,51,56,53,51,160,2,160,16,6,49,11,2,114,2,134, -3,1,7,101,110,118,51,56,53,52,161,2,161,158,2,125,51,158,94,10,64, -99,111,110,100,162,51,51,18,16,2,158,64,101,108,115,101,163,48,52,18,158, -162,37,100,2,0,55,38,37,36,47,16,10,54,11,3,1,4,103,55,50,53, -164,3,1,4,103,55,50,54,165,3,1,4,103,55,50,55,166,3,1,4,103, -55,50,56,167,3,1,7,101,110,118,51,56,54,57,168,2,168,2,168,2,168, -16,10,53,11,2,114,2,134,2,136,2,137,3,1,7,101,110,118,51,56,55, -48,169,2,169,2,169,2,169,158,2,126,55,158,2,127,55,2,128,55,55,18, -158,95,100,2,133,58,38,37,36,47,16,12,57,11,3,1,4,103,55,50,48, -170,3,1,4,103,55,50,49,171,3,1,4,103,55,50,50,172,3,1,4,103, -55,50,51,173,3,1,4,103,55,50,52,174,3,1,7,101,110,118,51,56,56, -57,175,2,175,2,175,2,175,2,175,16,12,56,11,2,114,2,134,2,115,2, -136,2,137,3,1,7,101,110,118,51,56,57,48,176,2,176,2,176,2,176,2, -176,158,96,10,2,72,2,129,2,130,58,158,160,10,2,0,2,131,2,132,58, -58,18,16,2,96,2,135,8,26,93,8,252,219,12,16,4,59,11,61,114,177, -3,1,7,101,110,118,51,57,48,50,178,95,9,8,252,219,12,2,94,18,158, -95,100,2,144,8,29,38,37,36,47,16,16,8,28,11,3,1,4,103,55,49, -51,179,3,1,4,103,55,49,52,180,3,1,4,103,55,49,53,181,3,1,4, -103,55,49,54,182,3,1,4,103,55,49,55,183,3,1,4,103,55,49,56,184, -3,1,4,103,55,49,57,185,3,1,7,101,110,118,51,57,49,52,186,2,186, -2,186,2,186,2,186,2,186,2,186,16,16,8,27,11,2,114,2,134,2,115, -2,136,2,137,2,145,2,146,3,1,7,101,110,118,51,57,49,53,187,2,187, -2,187,2,187,2,187,2,187,2,187,158,94,10,94,2,107,2,138,8,29,158, -97,10,2,133,95,2,72,2,107,2,139,159,2,0,2,140,2,141,160,2,71, -2,107,2,142,2,143,8,29,8,29,18,16,2,96,2,135,8,31,93,8,252, -224,12,16,4,8,30,11,2,177,3,1,7,101,110,118,51,57,51,49,188,95, -9,8,252,224,12,2,94,11,16,5,93,2,64,87,95,83,159,34,93,80,159, -34,8,33,35,89,162,35,35,41,9,223,0,251,80,158,38,47,20,15,159,38, -46,49,21,94,3,1,4,103,55,54,54,189,3,1,4,103,55,54,53,190,248, -22,58,198,248,22,84,198,83,159,34,93,80,159,34,8,32,35,89,162,35,35, -41,9,223,0,251,80,158,38,47,20,15,159,38,42,49,21,94,3,1,4,103, -55,54,48,191,3,1,4,103,55,53,57,192,248,22,58,198,248,22,84,198,89, -162,34,35,8,28,9,223,0,27,249,22,216,20,15,159,37,34,49,196,27,28, -248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158, -40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,27,248,80,158,43,36, -196,28,248,80,158,43,39,193,248,22,8,89,162,34,35,41,9,224,9,1,27, -249,22,2,89,162,34,35,50,9,224,4,5,249,80,158,37,40,28,248,80,158, -38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200, -28,248,80,158,41,34,193,27,28,248,22,213,194,193,200,249,80,158,43,35,248, -80,158,44,36,196,27,248,80,158,45,37,197,248,22,65,250,22,216,199,196,199, -11,11,194,248,80,158,39,41,196,28,248,22,63,193,21,95,9,9,9,248,80, -158,37,42,193,11,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80, -158,44,38,27,248,80,158,46,36,196,28,248,80,158,46,34,193,249,80,158,47, -35,248,80,158,48,36,195,27,248,80,158,49,37,196,28,248,80,158,49,39,193, -248,22,65,248,80,158,50,41,194,11,11,27,248,80,158,46,37,196,28,248,80, -158,46,39,193,248,80,158,46,41,193,11,11,11,11,28,192,27,248,22,58,194, -27,248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,249,22,76,199,38, -27,249,22,76,200,39,27,249,22,75,201,40,27,249,22,216,20,15,159,46,35, -49,250,22,2,89,162,34,36,45,9,224,15,16,27,249,22,216,20,15,159,38, -36,49,198,27,248,80,158,38,43,194,28,192,196,27,28,248,80,158,39,34,195, -249,80,158,40,38,248,80,158,41,36,197,248,80,158,41,43,248,80,158,42,37, -198,11,28,192,192,250,22,252,47,2,11,6,19,19,98,97,100,32,118,97,114, -105,97,98,108,101,32,115,121,110,116,97,120,193,198,248,22,223,249,80,158,52, -44,20,15,159,52,37,49,206,248,22,223,249,80,158,52,44,20,15,159,52,38, -49,204,27,28,248,80,158,46,39,194,248,80,158,46,41,194,11,28,192,27,249, -22,216,20,15,159,48,39,49,249,80,158,50,44,20,15,159,50,40,49,200,27, -248,80,158,48,43,194,28,192,249,80,158,49,45,23,16,27,252,22,67,204,206, -23,17,23,16,202,250,80,158,53,46,89,162,34,34,47,9,224,19,3,252,80, -158,40,47,20,15,159,40,41,49,21,95,3,1,4,103,55,54,52,194,3,1, -4,103,55,54,49,195,3,1,4,103,55,54,51,196,250,22,2,80,159,43,8, -32,35,248,22,93,201,248,22,96,201,248,22,84,198,249,22,71,248,22,58,200, -250,80,158,45,47,20,15,159,45,43,49,21,93,3,1,4,103,55,54,50,197, -248,22,95,203,21,96,2,144,66,100,111,108,111,111,112,198,94,94,63,118,97, -114,199,64,105,110,105,116,200,2,135,95,2,133,94,63,110,111,116,201,62,101, -48,202,96,2,0,61,99,203,2,135,95,2,198,64,115,116,101,112,204,2,135, -20,15,159,53,44,49,27,28,248,80,158,49,34,195,249,80,158,50,35,248,80, -158,51,36,197,27,248,80,158,52,37,198,28,248,80,158,52,39,193,248,80,158, -52,41,193,11,11,28,192,27,248,22,58,194,27,248,22,59,195,249,80,158,52, -45,23,19,27,254,22,67,23,17,23,19,203,23,22,202,23,21,23,15,250,80, -158,56,46,89,162,34,34,50,9,224,22,3,254,80,158,42,47,20,15,159,42, -45,49,21,97,3,1,4,103,55,55,50,205,3,1,4,103,55,55,49,206,3, -1,4,103,55,54,56,207,3,1,4,103,55,54,55,208,3,1,4,103,55,55, -48,209,250,22,2,80,159,45,8,33,35,248,22,96,203,249,22,76,204,39,248, -22,84,200,248,22,93,200,249,22,76,201,38,249,22,71,248,22,58,202,250,80, -158,47,47,20,15,159,47,47,49,21,93,3,1,4,103,55,54,57,210,249,22, -75,206,40,21,96,2,144,2,198,94,94,2,199,2,200,2,135,96,2,133,2, -202,96,2,0,2,136,2,137,2,135,96,2,0,2,203,2,135,95,2,198,2, -204,2,135,20,15,159,56,48,49,250,22,252,47,2,11,2,79,197,248,80,158, -46,48,20,15,159,46,49,49,250,22,252,47,2,11,2,79,196,34,20,99,159, -36,16,15,2,80,2,83,2,85,2,87,2,89,2,96,30,211,2,81,73,115, -116,120,45,99,104,101,99,107,47,101,115,99,212,7,2,98,30,213,2,81,70, -115,116,120,45,114,111,116,97,116,101,214,12,2,91,30,215,2,94,1,26,100, -97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,47,115, -104,97,112,101,216,2,2,152,2,155,2,93,30,217,70,35,37,119,105,116,104, -45,115,116,120,218,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105, -108,219,3,16,16,18,98,2,100,8,33,38,37,36,16,4,8,32,11,66,111, -114,105,103,45,120,220,3,1,7,101,110,118,51,57,56,57,221,18,100,2,100, -8,36,38,37,36,8,32,16,16,8,35,11,3,1,4,103,55,52,53,222,3, -1,4,103,55,52,54,223,3,1,4,103,55,52,55,224,3,1,4,103,55,52, -56,225,3,1,4,103,55,52,57,226,3,1,4,103,55,53,48,227,3,1,4, -103,55,53,49,228,3,1,7,101,110,118,52,48,48,54,229,2,229,2,229,2, -229,2,229,2,229,2,229,16,16,8,34,11,2,114,2,199,2,200,2,204,2, -202,2,136,2,203,3,1,7,101,110,118,52,48,48,55,230,2,230,2,230,2, -230,2,230,2,230,2,230,18,101,2,100,8,38,38,37,36,8,32,8,35,8, -34,16,6,8,37,11,2,134,61,115,231,3,1,7,101,110,118,52,48,50,52, -232,2,232,18,16,2,158,64,100,101,115,116,233,8,36,8,39,18,8,39,18, -101,2,100,8,41,38,37,36,8,32,8,35,8,34,16,4,8,40,11,3,1, -4,103,55,53,54,234,3,1,7,101,110,118,52,48,52,54,235,18,16,2,158, -2,233,8,41,8,42,18,158,97,10,2,144,2,198,2,194,95,2,133,94,2, -201,2,195,158,2,0,2,196,8,41,18,158,95,10,2,191,2,192,8,41,18, -16,2,103,93,158,159,10,2,198,2,197,8,41,8,50,98,8,49,10,34,11, -95,159,2,18,9,11,159,2,102,9,11,159,2,81,9,11,16,14,66,115,121, -110,116,97,120,236,29,237,11,11,73,115,121,110,116,97,120,45,99,97,115,101, -42,42,238,2,237,2,156,2,237,78,112,97,116,116,101,114,110,45,115,117,98, -115,116,105,116,117,116,101,239,2,237,2,216,2,237,2,95,2,237,75,115,117, -98,115,116,105,116,117,116,101,45,115,116,111,112,240,2,237,98,8,48,10,35, -11,95,159,64,35,37,115,99,241,9,11,159,2,102,9,11,159,2,81,9,11, -16,0,96,8,47,8,254,1,11,16,0,16,4,8,46,11,2,107,3,1,6, -101,110,118,52,53,52,242,16,4,8,45,11,68,104,101,114,101,45,115,116,120, -243,3,1,6,101,110,118,52,53,54,244,16,4,8,44,11,2,243,2,244,13, -16,4,35,2,237,2,94,11,93,8,252,30,13,16,4,8,43,11,2,177,3, -1,7,101,110,118,52,48,53,55,245,95,9,8,252,30,13,2,94,18,16,2, -96,2,135,8,52,93,8,252,30,13,16,4,8,51,11,2,177,2,245,95,9, -8,252,30,13,2,94,18,158,96,103,2,144,8,55,38,37,36,8,32,8,35, -8,34,8,40,16,6,8,54,11,3,1,4,103,55,53,55,246,3,1,4,103, -55,53,56,247,3,1,7,101,110,118,52,48,54,52,248,2,248,16,4,8,53, -11,2,137,3,1,7,101,110,118,52,48,54,53,249,158,2,198,8,55,158,2, -205,8,55,158,97,10,2,133,2,206,159,2,0,2,207,2,208,158,2,0,2, -209,8,55,8,55,18,158,95,10,2,189,2,190,8,55,18,16,2,103,93,158, -159,10,2,198,2,210,8,55,8,57,8,49,8,48,8,47,8,46,8,45,8, -44,13,16,4,35,2,237,2,94,11,93,8,252,37,13,16,4,8,56,11,2, -177,3,1,7,101,110,118,52,48,55,49,250,95,9,8,252,37,13,2,94,18, -16,2,96,2,135,8,59,93,8,252,37,13,16,4,8,58,11,2,177,2,250, -95,9,8,252,37,13,2,94,18,16,2,158,94,98,2,204,8,63,93,8,252, -5,13,16,4,8,62,11,3,1,8,119,115,116,109,112,55,53,50,251,3,1, -7,101,110,118,52,48,50,51,252,252,0,16,4,8,61,11,3,1,4,103,55, -53,53,252,253,0,3,1,7,101,110,118,52,48,55,54,252,254,0,16,4,8, -60,11,65,95,101,108,115,101,252,255,0,3,1,7,101,110,118,52,48,55,55, -252,0,1,158,2,135,8,63,8,63,95,9,8,252,5,13,2,218,11,16,5, -93,2,70,89,162,34,35,45,9,223,0,27,249,22,216,20,15,159,37,34,42, -196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27, -248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,248,80,158, -42,36,195,248,80,158,42,39,248,80,158,43,37,196,11,11,28,192,27,248,22, -58,194,27,248,22,59,195,249,80,158,40,40,199,250,80,158,43,41,20,15,159, -43,35,42,21,93,3,1,4,103,55,55,53,252,1,1,197,250,22,252,47,2, -11,2,79,196,34,20,99,159,34,16,8,2,80,2,83,2,85,2,87,2,89, -2,91,2,152,2,93,16,2,18,98,2,100,8,65,38,37,36,16,4,8,64, -11,2,107,3,1,7,101,110,118,52,48,56,49,252,2,1,18,158,94,100,2, -6,8,68,38,37,36,8,64,16,6,8,67,11,3,1,4,103,55,55,51,252, -3,1,3,1,4,103,55,55,52,252,4,1,3,1,7,101,110,118,52,48,56, -54,252,5,1,2,252,5,1,16,6,8,66,11,2,70,63,101,120,112,252,6, -1,3,1,7,101,110,118,52,48,56,55,252,7,1,2,252,7,1,158,96,10, -66,108,97,109,98,100,97,252,8,1,9,2,252,1,1,8,68,8,68,11,16, -5,93,2,104,27,247,22,252,108,3,253,22,66,248,199,20,15,159,42,34,34, -248,199,20,15,159,42,35,34,248,199,20,15,159,42,36,34,248,22,66,248,200, -20,15,159,43,37,34,248,22,66,248,200,20,15,159,43,38,34,10,43,20,99, -159,34,16,0,16,5,18,97,2,4,8,69,38,37,36,18,16,2,158,2,6, -8,69,8,70,18,16,2,158,2,8,8,69,8,71,18,16,2,158,2,10,8, -69,8,72,18,16,2,158,2,12,8,69,8,73,11,16,5,93,2,61,89,162, -34,35,55,9,223,0,27,249,22,216,20,15,159,37,34,49,196,27,28,248,80, -158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37, -197,28,248,80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36,194,27, -248,80,158,41,37,194,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158, -43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,39,193,248,80,158,44, -40,193,11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248, -22,86,196,27,249,22,67,195,196,251,80,158,44,41,20,15,159,44,35,49,21, -94,3,1,4,103,55,56,54,252,9,1,3,1,4,103,55,56,53,252,10,1, -248,22,59,197,248,22,58,197,27,28,248,80,158,38,34,195,249,80,158,39,35, -248,80,158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249, -80,158,42,42,27,248,80,158,44,36,196,28,248,80,158,44,39,193,248,22,8, -89,162,34,35,41,9,224,10,1,27,249,22,2,89,162,34,35,46,9,224,4, -5,249,80,158,37,43,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158, -40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42, -35,248,80,158,43,36,195,248,80,158,43,38,248,80,158,44,37,196,11,11,194, -248,80,158,39,40,196,28,248,22,63,193,21,94,9,9,248,80,158,37,44,193, -11,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,35,248, -80,158,46,36,195,27,248,80,158,47,37,196,28,248,80,158,47,39,193,248,80, -158,47,40,193,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27, -248,22,93,196,27,248,22,96,197,27,248,22,95,198,27,249,22,216,20,15,159, -45,36,49,249,22,1,22,71,250,22,2,22,65,248,22,223,249,80,158,53,45, -20,15,159,53,37,49,206,248,22,223,249,80,158,53,45,20,15,159,53,38,49, -205,27,28,248,80,158,45,39,194,248,80,158,45,40,194,11,28,192,249,80,158, -46,46,205,27,250,22,67,200,201,198,250,80,158,50,47,89,162,34,34,42,9, -224,16,3,252,80,158,40,41,20,15,159,40,39,49,21,95,3,1,4,103,55, -57,48,252,11,1,3,1,4,103,55,57,50,252,12,1,3,1,4,103,55,57, -49,252,13,1,248,22,86,198,248,22,84,198,248,22,58,198,21,96,1,22,119, -105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107, -252,14,1,2,21,96,2,19,95,1,27,99,111,110,116,105,110,117,97,116,105, -111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116,252,15,1,11, -2,21,63,112,47,118,252,16,1,2,135,97,2,144,9,65,101,120,112,114,49, -252,17,1,64,101,120,112,114,252,18,1,2,135,20,15,159,50,40,49,248,80, -158,45,48,20,15,159,45,41,49,250,22,252,47,2,11,2,79,197,34,20,99, -159,34,16,15,2,80,2,83,2,85,2,87,2,91,2,96,2,98,2,93,2, -89,2,211,2,213,2,215,2,152,2,155,2,217,16,8,18,98,2,100,8,75, -38,37,36,16,4,8,74,11,63,115,116,120,252,19,1,3,1,7,101,110,118, -52,48,57,55,252,20,1,18,158,162,37,100,2,144,8,78,38,37,36,8,74, -16,8,8,77,11,3,1,4,103,55,56,50,252,21,1,3,1,4,103,55,56, -51,252,22,1,3,1,4,103,55,56,52,252,23,1,3,1,7,101,110,118,52, -49,48,52,252,24,1,2,252,24,1,2,252,24,1,16,8,8,76,11,2,114, -2,252,17,1,2,252,18,1,3,1,7,101,110,118,52,49,48,53,252,25,1, -2,252,25,1,2,252,25,1,158,9,8,78,158,2,252,9,1,8,78,2,252, -10,1,8,78,8,78,18,100,2,100,8,81,38,37,36,8,74,16,12,8,80, -11,3,1,4,103,55,55,55,252,26,1,3,1,4,103,55,55,56,252,27,1, -3,1,4,103,55,55,57,252,28,1,3,1,4,103,55,56,48,252,29,1,3, -1,4,103,55,56,49,252,30,1,3,1,7,101,110,118,52,49,50,52,252,31, -1,2,252,31,1,2,252,31,1,2,252,31,1,2,252,31,1,16,12,8,79, -11,2,114,65,112,97,114,97,109,252,32,1,63,118,97,108,252,33,1,2,252, -17,1,2,252,18,1,3,1,7,101,110,118,52,49,50,53,252,34,1,2,252, -34,1,2,252,34,1,2,252,34,1,2,252,34,1,18,16,2,158,2,233,8, -81,8,82,18,8,82,18,158,96,102,2,252,14,1,8,85,38,37,36,8,74, -8,80,8,79,16,4,8,84,11,3,1,4,103,55,56,57,252,35,1,3,1, -7,101,110,118,52,49,52,51,252,36,1,16,4,8,83,11,2,252,16,1,3, -1,7,101,110,118,52,49,52,52,252,37,1,158,2,21,8,85,158,160,10,2, -19,95,2,252,15,1,11,2,21,2,252,11,1,8,85,158,161,10,2,144,9, -2,252,12,1,2,252,13,1,8,85,8,85,18,16,2,96,2,135,8,87,93, -8,252,103,13,16,4,8,86,11,2,177,3,1,7,101,110,118,52,49,52,56, -252,38,1,95,9,8,252,103,13,2,94,18,16,2,158,94,98,2,252,16,1, -8,91,93,8,252,94,13,16,4,8,90,11,3,1,8,119,115,116,109,112,55, -56,55,252,39,1,3,1,7,101,110,118,52,49,51,55,252,40,1,16,4,8, -89,11,3,1,4,103,55,56,56,252,41,1,3,1,7,101,110,118,52,49,53, -49,252,42,1,16,4,8,88,11,2,252,255,0,3,1,7,101,110,118,52,49, -53,50,252,43,1,158,2,135,8,91,8,91,95,9,8,252,94,13,2,218,11, -16,5,93,2,67,89,162,34,35,51,9,223,0,27,249,22,216,20,15,159,37, -34,42,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36, +19,3,30,20,2,18,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116, +105,111,110,45,107,101,121,21,4,30,22,2,2,1,26,99,97,108,108,45,119, +105,116,104,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,23, +254,1,30,24,2,2,79,115,116,114,117,99,116,58,98,114,101,97,107,45,112, +97,114,97,109,122,25,254,1,30,26,2,2,77,109,97,107,101,45,98,114,101, +97,107,45,112,97,114,97,109,122,27,254,1,30,28,2,2,73,98,114,101,97, +107,45,112,97,114,97,109,122,63,29,254,1,30,30,2,2,76,98,114,101,97, +107,45,112,97,114,97,109,122,45,114,101,102,31,254,1,30,32,2,2,77,98, +114,101,97,107,45,112,97,114,97,109,122,45,115,101,116,33,33,254,1,30,34, +2,2,1,29,115,116,114,117,99,116,58,98,114,101,97,107,45,112,97,114,97, +109,101,116,101,114,105,122,97,116,105,111,110,35,254,1,30,36,2,2,1,27, +109,97,107,101,45,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114,105, +122,97,116,105,111,110,37,254,1,30,38,2,2,1,23,98,114,101,97,107,45, +112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,63,39,254,1,30, +40,2,2,1,27,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114,105, +122,97,116,105,111,110,45,99,101,108,108,41,254,1,30,42,2,2,1,32,115, +101,116,45,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114,105,122,97, +116,105,111,110,45,99,101,108,108,33,43,254,1,30,44,2,2,1,30,99,117, +114,114,101,110,116,45,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114, +105,122,97,116,105,111,110,45,254,1,30,46,2,18,77,98,114,101,97,107,45, +101,110,97,98,108,101,100,45,107,101,121,47,0,30,48,2,2,1,32,99,97, +108,108,45,119,105,116,104,45,98,114,101,97,107,45,112,97,114,97,109,101,116, +101,114,105,122,97,116,105,111,110,49,254,1,30,50,2,18,75,99,104,101,99, +107,45,102,111,114,45,98,114,101,97,107,51,1,30,52,2,2,1,24,115,101, +108,101,99,116,45,104,97,110,100,108,101,114,47,110,111,45,98,114,101,97,107, +115,53,254,1,30,54,2,2,1,27,115,101,108,101,99,116,45,104,97,110,100, +108,101,114,47,98,114,101,97,107,115,45,97,115,45,105,115,55,254,1,30,56, +2,2,77,102,97,108,115,101,45,116,104,114,101,97,100,45,99,101,108,108,57, +254,1,30,58,2,2,1,30,99,104,101,99,107,45,119,105,116,104,45,104,97, +110,100,108,101,114,115,45,105,110,45,99,111,110,116,101,120,116,59,254,1,30, +60,2,2,78,104,97,110,100,108,101,114,45,112,114,111,109,112,116,45,107,101, +121,61,254,1,30,62,2,2,1,27,99,97,108,108,45,119,105,116,104,45,101, +120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,63,254,1,30,64, +2,18,1,21,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114, +45,107,101,121,65,2,16,0,11,11,16,19,2,41,2,39,2,31,2,33,2, +29,2,59,2,57,2,61,2,37,2,27,2,6,2,10,2,55,2,53,2,43, +2,12,2,35,2,25,2,4,53,11,16,19,2,49,2,63,2,23,2,45,2, +16,2,14,2,8,64,116,105,109,101,66,70,108,101,116,45,115,116,114,117,99, +116,67,72,112,97,114,97,109,101,116,101,114,105,122,101,68,71,115,101,116,33, +45,118,97,108,117,101,115,69,65,100,101,108,97,121,70,78,112,97,114,97,109, +101,116,101,114,105,122,101,45,98,114,101,97,107,71,66,108,101,116,47,99,99, +72,69,102,108,117,105,100,45,108,101,116,73,62,100,111,74,73,119,105,116,104, +45,104,97,110,100,108,101,114,115,75,64,99,97,115,101,76,74,119,105,116,104, +45,104,97,110,100,108,101,114,115,42,77,16,19,11,11,11,11,11,11,11,11, +11,11,11,11,11,11,11,11,11,11,11,16,19,2,49,2,63,2,23,2,45, +2,16,2,14,2,8,2,66,2,67,2,68,2,69,2,70,2,71,2,72,2, +73,2,74,2,75,2,76,2,77,41,53,106,16,5,93,69,99,97,115,101,45, +116,101,115,116,78,89,162,34,35,51,9,223,0,27,249,22,216,20,15,159,37, +34,43,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36, 196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248, 80,158,42,36,195,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80, -158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46, -38,193,248,80,158,46,39,193,11,11,11,11,28,192,27,248,22,58,194,27,248, -22,84,195,27,248,22,93,196,27,248,22,94,197,249,80,158,42,40,201,27,250, -22,67,198,199,200,252,80,158,48,41,20,15,159,48,35,42,21,95,3,1,4, -103,55,57,55,252,44,1,3,1,4,103,55,57,57,252,45,1,3,1,4,103, -55,57,56,252,46,1,248,22,86,198,248,22,84,198,248,22,58,198,250,22,252, -47,2,11,2,79,196,34,20,99,159,34,16,8,2,80,2,83,2,85,2,87, -2,96,2,98,2,152,2,93,16,2,18,98,2,100,8,93,38,37,36,16,4, -8,92,11,2,252,19,1,3,1,7,101,110,118,52,49,53,54,252,47,1,18, -158,96,100,2,252,14,1,8,96,38,37,36,8,92,16,10,8,95,11,3,1, -4,103,55,57,51,252,48,1,3,1,4,103,55,57,52,252,49,1,3,1,4, -103,55,57,53,252,50,1,3,1,4,103,55,57,54,252,51,1,3,1,7,101, -110,118,52,49,54,51,252,52,1,2,252,52,1,2,252,52,1,2,252,52,1, -16,10,8,94,11,2,114,69,98,111,111,108,45,101,120,112,114,252,53,1,2, -252,17,1,2,252,18,1,3,1,7,101,110,118,52,49,54,52,252,54,1,2, -252,54,1,2,252,54,1,2,252,54,1,158,2,47,8,96,158,95,10,76,109, -97,107,101,45,116,104,114,101,97,100,45,99,101,108,108,252,55,1,95,63,97, -110,100,252,56,1,2,252,44,1,10,8,96,158,96,10,2,0,93,2,51,160, -2,144,9,2,252,45,1,2,252,46,1,8,96,8,96,11,16,5,93,2,103, -27,247,22,252,108,3,253,22,66,248,199,20,15,159,42,34,34,248,199,20,15, -159,42,35,34,248,199,20,15,159,42,36,34,248,22,66,248,200,20,15,159,43, -37,34,248,22,66,248,200,20,15,159,43,38,34,10,43,20,99,159,34,16,0, -16,5,18,16,2,158,2,35,8,69,8,97,18,16,2,158,2,37,8,69,8, -98,18,16,2,158,2,39,8,69,8,99,18,16,2,158,2,41,8,69,8,100, -18,16,2,158,2,43,8,69,8,101,11,16,5,94,2,65,2,69,87,96,83, -159,34,93,80,159,34,8,36,35,89,162,35,35,41,9,223,0,251,80,158,38, -42,20,15,159,38,47,50,21,94,3,1,4,103,56,50,53,252,57,1,3,1, -4,103,56,50,52,252,58,1,248,22,58,198,248,22,84,198,83,159,34,93,80, -159,34,8,35,35,89,162,35,35,41,9,223,0,251,80,158,38,42,20,15,159, -38,45,50,21,94,3,1,4,103,56,50,49,252,59,1,3,1,4,103,56,50, -48,252,60,1,248,22,58,198,248,22,84,198,83,159,34,93,80,159,34,8,34, -35,89,162,35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,44,50,21, -94,3,1,4,103,56,50,51,252,61,1,3,1,4,103,56,50,50,252,62,1, -248,22,58,198,248,22,84,198,27,89,162,8,36,35,36,62,119,104,252,63,1, -223,1,89,162,34,35,8,26,9,224,0,1,27,249,22,216,20,15,159,38,34, -50,197,27,28,248,80,158,38,34,194,249,80,158,39,35,248,80,158,40,36,196, -27,248,80,158,41,37,197,28,248,80,158,41,34,193,28,248,80,158,41,38,248, -80,158,42,36,194,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80, -158,43,35,248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80,158,45, -39,193,248,80,158,45,40,193,11,11,11,11,11,28,192,27,248,22,58,194,27, -248,22,84,195,27,248,22,86,196,249,80,158,42,41,201,27,249,22,67,197,198, -251,80,158,47,42,20,15,159,47,35,50,21,94,3,1,4,103,56,49,48,252, -64,1,3,1,4,103,56,48,57,252,65,1,248,22,59,197,248,22,58,197,27, -28,248,80,158,39,34,195,249,80,158,40,35,248,80,158,41,36,197,27,248,80, -158,42,37,198,28,248,80,158,42,34,193,249,80,158,43,43,27,248,80,158,45, -36,196,28,248,80,158,45,39,193,248,22,8,89,162,34,35,41,9,224,11,1, -27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,44,28,248,80, -158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37, -200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80, -158,43,38,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248,22, -63,193,21,94,9,9,248,80,158,37,45,193,11,27,248,80,158,45,37,196,28, -248,80,158,45,34,193,249,80,158,46,35,248,80,158,47,36,195,27,248,80,158, -48,37,196,28,248,80,158,48,39,193,248,80,158,48,40,193,11,11,11,11,28, -192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197, -27,248,22,95,198,27,249,22,216,20,15,159,46,36,50,248,80,158,47,46,249, -22,2,32,252,66,1,89,162,8,44,35,35,9,222,1,23,119,105,116,104,45, -104,97,110,100,108,101,114,115,45,112,114,101,100,105,99,97,116,101,252,67,1, -248,22,223,249,80,158,52,47,20,15,159,52,37,50,204,27,249,22,216,20,15, -159,47,38,50,248,80,158,48,46,249,22,2,32,252,68,1,89,162,8,44,35, -35,9,222,1,21,119,105,116,104,45,104,97,110,100,108,101,114,115,45,104,97, -110,100,108,101,114,252,69,1,248,22,223,249,80,158,53,47,20,15,159,53,39, -50,204,27,28,248,80,158,47,39,195,248,80,158,47,40,195,11,28,192,27,28, -248,80,158,48,39,195,248,80,158,48,40,195,11,28,192,27,249,22,216,20,15, -159,50,40,50,28,23,15,20,15,159,50,41,50,20,15,159,50,42,50,249,80, -158,50,41,23,17,27,254,22,67,204,203,23,17,23,15,23,18,23,16,202,250, -80,158,54,48,89,162,34,34,51,9,224,20,3,254,80,158,42,42,20,15,159, -42,43,50,21,97,3,1,4,103,56,51,48,252,70,1,3,1,4,103,56,50, -55,252,71,1,3,1,4,103,56,50,54,252,72,1,3,1,4,103,56,50,57, -252,73,1,3,1,4,103,56,50,56,252,74,1,249,22,71,250,22,2,80,159, -47,8,34,35,248,22,58,205,249,22,76,206,38,249,22,71,250,22,2,80,159, -49,8,35,35,248,22,84,23,15,248,22,93,23,15,20,15,159,46,46,50,249, -22,75,201,40,250,22,2,80,159,45,8,36,35,248,22,58,203,248,22,84,203, -249,22,76,201,39,248,22,96,200,21,95,2,144,97,94,69,112,114,101,100,45, -110,97,109,101,252,75,1,64,112,114,101,100,252,76,1,2,135,94,72,104,97, -110,100,108,101,114,45,110,97,109,101,252,77,1,67,104,97,110,100,108,101,114, -252,78,1,2,135,94,78,104,97,110,100,108,101,114,45,112,114,111,109,112,116, -45,107,101,121,252,79,1,93,1,28,109,97,107,101,45,99,111,110,116,105,110, -117,97,116,105,111,110,45,112,114,111,109,112,116,45,116,97,103,252,80,1,95, -2,144,93,94,63,98,112,122,252,81,1,95,2,252,15,1,11,2,47,96,2, -252,14,1,2,47,2,57,96,1,29,99,97,108,108,45,119,105,116,104,45,99, -111,110,116,105,110,117,97,116,105,111,110,45,112,114,111,109,112,116,252,82,1, -95,2,252,8,1,9,96,2,252,14,1,2,47,2,252,81,1,97,2,61,93, -94,1,25,99,117,114,114,101,110,116,45,101,120,99,101,112,116,105,111,110,45, -104,97,110,100,108,101,114,252,83,1,96,2,252,8,1,93,61,101,252,84,1, -94,2,59,2,252,79,1,95,1,26,97,98,111,114,116,45,99,117,114,114,101, -110,116,45,99,111,110,116,105,110,117,97,116,105,111,110,252,85,1,2,252,79, -1,95,2,252,8,1,9,96,63,117,113,49,252,86,1,2,252,84,1,2,252, -81,1,95,64,108,105,115,116,252,87,1,95,64,99,111,110,115,252,88,1,2, -252,75,1,2,252,77,1,2,135,2,252,17,1,2,252,18,1,2,135,2,252, -79,1,95,2,252,8,1,93,65,116,104,117,110,107,252,89,1,93,2,252,89, -1,20,15,159,54,48,50,248,80,158,48,49,20,15,159,48,49,50,248,80,158, -47,49,20,15,159,47,50,50,250,22,252,47,2,11,2,79,197,249,22,7,248, -195,10,248,195,11,38,20,99,159,37,16,16,2,80,2,83,2,85,2,87,2, -91,2,96,2,98,2,152,2,93,2,89,2,211,2,213,30,252,90,1,2,218, -1,20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101, -115,252,91,1,0,2,215,2,155,2,217,16,17,18,99,2,100,8,104,38,37, -36,16,4,8,103,11,74,100,105,115,97,98,108,101,45,98,114,101,97,107,63, -252,92,1,3,1,7,101,110,118,52,49,55,57,252,93,1,16,4,8,102,11, -2,252,19,1,3,1,7,101,110,118,52,49,56,48,252,94,1,18,158,162,37, -101,2,144,8,107,38,37,36,8,103,8,102,16,8,8,106,11,3,1,4,103, -56,48,54,252,95,1,3,1,4,103,56,48,55,252,96,1,3,1,4,103,56, -48,56,252,97,1,3,1,7,101,110,118,52,49,56,55,252,98,1,2,252,98, -1,2,252,98,1,16,8,8,105,11,2,114,2,252,17,1,2,252,18,1,3, -1,7,101,110,118,52,49,56,56,252,99,1,2,252,99,1,2,252,99,1,158, -9,8,107,158,2,252,64,1,8,107,2,252,65,1,8,107,8,107,18,101,2, -100,8,110,38,37,36,8,103,8,102,16,12,8,109,11,3,1,4,103,56,48, -49,252,100,1,3,1,4,103,56,48,50,252,101,1,3,1,4,103,56,48,51, -252,102,1,3,1,4,103,56,48,52,252,103,1,3,1,4,103,56,48,53,252, -104,1,3,1,7,101,110,118,52,50,48,55,252,105,1,2,252,105,1,2,252, -105,1,2,252,105,1,2,252,105,1,16,12,8,108,11,2,114,2,252,76,1, -2,252,78,1,2,252,17,1,2,252,18,1,3,1,7,101,110,118,52,50,48, -56,252,106,1,2,252,106,1,2,252,106,1,2,252,106,1,2,252,106,1,18, -16,2,158,2,233,8,110,8,111,18,16,2,158,2,100,8,110,8,112,18,8, -111,18,105,2,100,8,117,38,37,36,8,103,8,102,8,109,8,108,16,4,8, -116,11,3,1,4,103,56,49,52,252,107,1,3,1,7,101,110,118,52,50,50, -56,252,108,1,16,4,8,115,11,2,252,75,1,3,1,7,101,110,118,52,50, -50,57,252,109,1,16,4,8,114,11,3,1,4,103,56,49,54,252,110,1,3, -1,7,101,110,118,52,50,51,54,252,111,1,16,4,8,113,11,2,252,77,1, -3,1,7,101,110,118,52,50,51,55,252,112,1,18,16,2,158,2,53,8,117, -8,118,18,16,2,158,2,55,8,117,8,119,18,158,96,10,2,144,2,252,70, -1,95,2,144,93,94,2,252,81,1,95,2,252,15,1,11,2,47,96,2,252, -14,1,2,47,2,57,96,2,252,82,1,95,2,252,8,1,9,96,2,252,14, -1,2,47,2,252,81,1,160,2,61,93,94,2,252,83,1,96,2,252,8,1, -93,2,252,84,1,94,2,59,2,252,79,1,95,2,252,85,1,2,252,79,1, -95,2,252,8,1,9,96,2,252,71,1,2,252,84,1,2,252,81,1,158,2, -252,87,1,2,252,72,1,2,252,73,1,2,252,74,1,2,252,79,1,95,2, -252,8,1,93,2,252,89,1,93,2,252,89,1,8,117,18,158,95,10,2,252, -61,1,2,252,62,1,8,117,18,158,95,10,2,252,59,1,2,252,60,1,8, -117,18,16,2,103,93,158,95,10,2,252,79,1,93,2,252,80,1,8,117,8, -121,8,49,8,48,8,47,8,46,8,45,8,44,13,16,4,35,2,237,2,94, -11,93,8,252,192,13,16,4,8,120,11,2,177,3,1,7,101,110,118,52,50, -53,52,252,113,1,95,9,8,252,192,13,2,94,18,158,96,10,2,252,88,1, -2,252,57,1,2,252,58,1,8,117,18,16,2,96,2,135,8,123,93,8,252, -192,13,16,4,8,122,11,2,177,2,252,113,1,95,9,8,252,192,13,2,94, -18,16,2,158,94,98,2,252,77,1,8,127,93,8,252,167,13,16,6,8,126, -11,3,1,8,119,115,116,109,112,56,49,49,252,114,1,3,1,8,119,115,116, -109,112,56,49,50,252,115,1,3,1,7,101,110,118,52,50,50,48,252,116,1, -2,252,116,1,16,4,8,125,11,3,1,4,103,56,49,53,252,117,1,3,1, -7,101,110,118,52,50,54,51,252,118,1,16,4,8,124,11,2,252,255,0,3, -1,7,101,110,118,52,50,54,52,252,119,1,158,2,135,8,127,8,127,95,9, -8,252,167,13,2,218,18,16,2,158,94,98,2,252,75,1,8,131,93,8,252, -167,13,16,6,8,130,11,2,252,114,1,2,252,115,1,2,252,116,1,2,252, -116,1,16,4,8,129,11,3,1,4,103,56,49,51,252,120,1,3,1,7,101, -110,118,52,50,54,56,252,121,1,16,4,8,128,11,2,252,255,0,3,1,7, -101,110,118,52,50,54,57,252,122,1,158,2,135,8,131,8,131,95,9,8,252, -167,13,2,218,11,16,5,93,2,66,87,95,83,159,34,93,80,159,34,8,28, -35,89,162,34,36,49,68,116,114,121,45,110,101,120,116,252,123,1,223,0,27, -28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197,27,248,80, -158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,39,27,248,80,158,42, -36,196,28,248,80,158,42,41,193,248,22,65,248,80,158,43,42,194,11,27,248, -80,158,42,37,196,28,248,80,158,42,34,193,249,80,158,43,39,248,80,158,44, -36,195,248,80,158,44,38,248,80,158,45,37,196,11,11,11,28,192,27,248,22, -58,194,27,248,22,84,195,27,248,22,86,196,28,27,248,80,158,40,42,249,80, -158,42,43,20,15,159,42,36,50,197,87,94,249,22,3,89,162,34,35,41,9, -224,7,9,28,248,80,158,36,44,195,12,251,22,252,47,2,11,6,17,17,110, -111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,252,124,1,196,198, -194,27,248,80,158,41,45,194,28,192,251,22,252,47,2,11,6,20,20,100,117, -112,108,105,99,97,116,101,32,105,100,101,110,116,105,102,105,101,114,252,125,1, -204,196,12,27,249,22,216,20,15,159,41,37,50,248,80,158,42,46,249,80,158, -44,43,20,15,159,44,38,50,199,27,28,248,80,158,41,41,194,248,80,158,41, -42,194,11,28,192,249,80,158,42,47,202,27,250,22,67,200,201,198,250,80,158, -46,48,89,162,34,34,45,9,224,12,3,252,80,158,40,40,20,15,159,40,39, -50,21,95,3,1,4,103,56,52,52,252,126,1,3,1,4,103,56,52,51,252, -127,1,3,1,4,103,56,52,55,252,128,1,248,22,86,198,248,22,58,198,250, -22,2,80,159,43,8,27,35,248,22,84,201,248,22,86,201,21,96,70,108,101, -116,45,118,97,108,117,101,115,252,129,1,93,94,94,64,116,101,109,112,252,130, -1,2,135,2,252,18,1,95,64,115,101,116,33,252,131,1,62,105,100,252,132, -1,2,252,130,1,2,135,20,15,159,46,41,50,248,80,158,41,49,20,15,159, -41,42,50,250,22,252,47,2,11,2,79,200,250,22,252,47,2,11,2,79,197, -83,159,34,93,80,159,34,8,27,35,89,162,35,35,41,9,223,0,251,80,158, -38,40,20,15,159,38,40,50,21,94,3,1,4,103,56,52,54,252,133,1,3, -1,4,103,56,52,53,252,134,1,248,22,58,198,248,22,84,198,89,162,34,35, -49,9,223,0,27,249,22,216,20,15,159,37,34,50,196,27,28,248,80,158,37, -34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28, -248,80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36,194,27,248,80, -158,41,37,194,28,248,80,158,41,34,193,249,80,158,42,39,248,80,158,43,36, -195,248,80,158,43,38,248,80,158,44,37,196,11,11,11,11,28,192,27,248,22, -58,194,27,248,22,59,195,250,80,158,41,40,20,15,159,41,35,50,21,93,3, -1,4,103,56,51,57,252,135,1,195,27,28,248,80,158,38,34,195,249,80,158, -39,35,248,80,158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34, -193,249,80,158,42,39,27,248,80,158,44,36,196,28,248,80,158,44,34,193,249, -80,158,45,35,248,80,158,46,36,195,248,80,158,46,38,248,80,158,47,37,196, -11,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,39,248, -80,158,46,36,195,248,80,158,46,38,248,80,158,47,37,196,11,11,11,28,192, -27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,28,248,80,158,41,44, -194,27,249,22,67,195,196,251,80,158,45,40,20,15,159,45,43,50,21,94,3, -1,4,103,56,52,57,252,136,1,3,1,4,103,56,52,56,252,137,1,248,22, -59,197,248,22,58,197,249,80,159,42,8,28,35,199,201,249,80,159,39,8,28, -35,196,198,34,20,99,159,36,16,16,2,80,2,83,2,85,2,87,2,91,2, -89,2,93,2,96,2,98,2,215,2,150,30,252,138,1,2,106,1,26,99,104, -101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102, -105,101,114,252,139,1,0,2,252,90,1,2,152,2,155,2,217,16,10,18,98, -2,100,8,133,38,37,36,16,4,8,132,11,2,252,19,1,3,1,7,101,110, -118,52,50,55,51,252,140,1,18,158,95,100,2,252,129,1,8,136,38,37,36, -8,132,16,6,8,135,11,3,1,4,103,56,51,55,252,141,1,3,1,4,103, -56,51,56,252,142,1,3,1,7,101,110,118,52,50,55,57,252,143,1,2,252, -143,1,16,6,8,134,11,2,114,2,252,18,1,3,1,7,101,110,118,52,50, -56,48,252,144,1,2,252,144,1,158,94,10,94,9,2,252,135,1,8,136,158, -94,10,64,118,111,105,100,252,145,1,8,136,8,136,18,100,2,233,8,139,38, -37,36,8,132,16,8,8,138,11,3,1,4,103,56,51,49,252,146,1,3,1, -4,103,56,51,50,252,147,1,3,1,4,103,56,51,51,252,148,1,3,1,7, -101,110,118,52,50,57,54,252,149,1,2,252,149,1,2,252,149,1,16,8,8, -137,11,2,114,2,252,132,1,2,252,18,1,3,1,7,101,110,118,52,50,57, -55,252,150,1,2,252,150,1,2,252,150,1,18,16,2,158,2,100,8,139,8, -140,18,16,2,158,2,233,8,139,8,141,18,158,161,36,102,2,252,129,1,8, -146,38,37,36,8,132,16,8,8,145,11,2,252,146,1,2,252,147,1,2,252, -148,1,2,252,149,1,2,252,149,1,2,252,149,1,16,8,8,144,11,2,114, -2,252,132,1,2,252,18,1,2,252,150,1,2,252,150,1,2,252,150,1,16, -4,8,143,11,3,1,4,103,56,52,50,252,151,1,3,1,7,101,110,118,52, -51,49,51,252,152,1,16,4,8,142,11,2,252,130,1,3,1,7,101,110,118, -52,51,49,52,252,153,1,158,94,10,94,2,252,126,1,2,252,127,1,8,146, -2,252,128,1,8,146,8,146,18,158,96,10,2,252,131,1,2,252,133,1,2, -252,134,1,8,146,18,16,2,96,2,135,8,148,93,8,252,244,13,16,4,8, -147,11,2,177,3,1,7,101,110,118,52,51,49,56,252,154,1,95,9,8,252, -244,13,2,94,18,16,2,158,94,98,2,252,130,1,8,152,93,8,252,236,13, -16,4,8,151,11,3,1,8,119,115,116,109,112,56,52,48,252,155,1,3,1, -7,101,110,118,52,51,48,56,252,156,1,16,4,8,150,11,3,1,4,103,56, -52,49,252,157,1,3,1,7,101,110,118,52,51,50,51,252,158,1,16,4,8, -149,11,2,252,255,0,3,1,7,101,110,118,52,51,50,52,252,159,1,158,2, -135,8,152,8,152,95,9,8,252,236,13,2,218,18,158,95,100,2,252,131,1, -8,155,38,37,36,8,132,16,8,8,154,11,3,1,4,103,56,51,52,252,160, -1,3,1,4,103,56,51,53,252,161,1,3,1,4,103,56,51,54,252,162,1, -3,1,7,101,110,118,52,51,51,50,252,163,1,2,252,163,1,2,252,163,1, -16,8,8,153,11,2,114,2,252,132,1,2,252,18,1,3,1,7,101,110,118, -52,51,51,51,252,164,1,2,252,164,1,2,252,164,1,158,2,252,136,1,8, -155,158,2,252,137,1,8,155,8,155,11,16,5,93,2,63,89,162,34,35,51, +158,44,38,27,248,80,158,46,36,196,28,248,80,158,46,34,193,249,80,158,47, +38,248,80,158,48,36,195,248,80,158,48,39,248,80,158,49,37,196,11,248,80, +158,45,39,248,80,158,46,37,196,11,11,11,28,192,27,248,22,58,194,27,248, +22,84,195,27,248,22,86,196,28,248,22,47,248,22,217,194,27,249,22,67,196, +195,251,80,158,44,40,20,15,159,44,35,43,21,94,3,1,4,103,54,57,54, +79,3,1,4,103,54,57,53,80,248,22,58,197,248,22,59,197,27,249,22,67, +196,195,251,80,158,44,40,20,15,159,44,36,43,21,94,3,1,4,103,54,57, +56,81,3,1,4,103,54,57,55,82,248,22,58,197,248,22,59,197,27,28,248, +80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41, +37,198,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27, +248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,38,27,248,80, +158,47,36,196,28,248,80,158,47,41,193,248,80,158,47,42,193,11,248,80,158, +46,39,248,80,158,47,37,196,11,11,11,28,192,27,248,22,58,194,27,248,22, +84,195,27,248,22,86,196,27,249,22,67,196,195,251,80,158,45,40,20,15,159, +45,37,43,21,94,3,1,4,103,55,48,48,83,3,1,4,103,54,57,57,84, +248,22,58,197,248,22,59,197,250,22,252,47,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,85,197,34,20,99,159,34,16,9,30,86,65,35,37,115, +116,120,87,69,115,116,120,45,112,97,105,114,63,88,11,30,89,2,87,67,99, +111,110,115,47,35,102,90,1,30,91,2,87,67,115,116,120,45,99,97,114,92, +5,30,93,2,87,67,115,116,120,45,99,100,114,94,6,30,95,2,87,69,97, +112,112,101,110,100,47,35,102,96,0,30,97,2,87,71,115,116,120,45,110,117, +108,108,47,35,102,98,9,30,99,69,35,37,115,116,120,99,97,115,101,100,1, +24,97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116,105, +116,117,116,101,101,0,30,102,2,87,69,115,116,120,45,108,105,115,116,63,103, +8,30,104,2,87,69,115,116,120,45,62,108,105,115,116,105,4,16,4,18,98, +64,104,101,114,101,106,40,98,38,10,34,11,95,159,2,18,9,11,159,68,35, +37,100,101,102,105,110,101,107,9,11,159,74,35,37,115,109,97,108,108,45,115, +99,104,101,109,101,108,9,11,16,82,2,39,2,2,2,66,2,2,2,61,2, +2,2,49,2,2,2,45,2,2,2,59,2,2,2,35,2,2,2,10,2,2, +67,112,114,111,109,105,115,101,109,2,2,2,14,2,2,2,74,2,2,2,37, +2,2,2,12,2,2,2,6,2,2,2,43,2,2,2,78,2,2,2,69,2, +2,2,41,2,2,2,67,2,2,2,53,2,2,2,31,2,2,2,25,2,2, +2,73,2,2,2,57,2,2,2,4,2,2,2,55,2,2,2,68,2,2,2, +27,2,2,2,71,2,2,2,63,2,2,2,72,2,2,2,29,2,2,2,16, +2,2,2,70,2,2,1,22,98,114,101,97,107,45,112,97,114,97,109,101,116, +101,114,105,122,97,116,105,111,110,110,2,2,2,75,2,2,2,33,2,2,2, +76,2,2,2,8,2,2,2,77,2,2,2,23,2,2,98,37,10,35,11,95, +159,67,35,37,113,113,115,116,120,111,9,11,159,76,35,37,115,116,120,99,97, +115,101,45,115,99,104,101,109,101,112,9,11,159,2,87,9,11,16,0,96,36, +8,254,1,11,16,0,16,4,35,11,61,120,113,3,1,7,101,110,118,51,56, +49,55,114,18,158,95,100,63,101,113,63,115,43,38,37,36,35,16,8,42,11, +3,1,4,103,54,57,50,116,3,1,4,103,54,57,51,117,3,1,4,103,54, +57,52,118,3,1,7,101,110,118,51,56,50,52,119,2,119,2,119,16,8,41, +11,61,95,120,2,113,61,107,121,3,1,7,101,110,118,51,56,50,53,122,2, +122,2,122,158,2,79,43,158,95,10,65,113,117,111,116,101,123,2,80,43,43, +18,158,96,10,64,101,113,118,63,124,2,81,94,2,123,2,82,43,18,158,95, +100,64,109,101,109,118,125,46,38,37,36,35,16,8,45,11,3,1,4,103,54, +56,57,126,3,1,4,103,54,57,48,127,3,1,4,103,54,57,49,128,3,1, +7,101,110,118,51,56,51,57,129,2,129,2,129,16,6,44,11,2,120,2,121, +3,1,7,101,110,118,51,56,52,48,130,2,130,158,2,83,46,158,95,10,2, +123,2,84,46,46,11,16,5,93,2,76,89,162,34,35,8,27,9,223,0,27, +249,22,216,20,15,159,37,34,46,196,27,28,248,80,158,37,34,194,249,80,158, +38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34, +193,249,80,158,41,38,248,80,158,42,36,195,248,80,158,42,39,248,80,158,43, +37,196,11,11,28,192,27,248,22,58,194,27,248,22,59,195,250,80,158,41,40, +20,15,159,41,35,46,21,93,3,1,4,103,55,51,49,131,195,27,28,248,80, +158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37, +198,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27,248, +80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,38,27,248,80,158, +47,36,196,28,248,80,158,47,34,193,28,27,248,80,158,48,36,194,28,248,80, +158,48,41,193,28,249,22,230,194,20,15,159,49,36,46,9,11,11,27,248,80, +158,48,37,194,28,248,80,158,48,34,193,249,80,158,49,35,248,80,158,50,36, +195,27,248,80,158,51,37,196,28,248,80,158,51,42,193,248,80,158,51,43,193, +11,11,11,11,248,80,158,46,39,248,80,158,47,37,196,11,11,11,28,192,27, +248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,94,197,249,80, +158,43,44,202,27,250,22,67,200,199,198,252,80,158,49,40,20,15,159,49,37, +46,21,95,3,1,4,103,55,51,52,132,3,1,4,103,55,51,51,133,3,1, +4,103,55,51,50,134,248,22,58,198,248,22,84,198,248,22,86,198,27,28,248, +80,158,39,34,196,249,80,158,40,35,248,80,158,41,36,198,27,248,80,158,42, +37,199,28,248,80,158,42,34,193,249,80,158,43,35,248,80,158,44,36,195,27, +248,80,158,45,37,196,28,248,80,158,45,34,193,249,80,158,46,38,27,248,80, +158,48,36,196,28,248,80,158,48,34,193,249,80,158,49,38,27,248,80,158,51, +36,196,28,248,80,158,51,42,193,248,22,65,248,80,158,52,43,194,11,27,248, +80,158,51,37,196,28,248,80,158,51,34,193,249,80,158,52,35,248,80,158,53, +36,195,27,248,80,158,54,37,196,28,248,80,158,54,42,193,248,80,158,54,43, +193,11,11,11,248,80,158,47,39,248,80,158,48,37,196,11,11,11,28,192,27, +248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,248, +22,95,198,249,80,158,45,44,204,27,251,22,67,200,199,202,201,250,80,158,49, +45,89,162,34,34,43,9,224,15,3,253,80,158,41,40,20,15,159,41,38,46, +21,96,3,1,4,103,55,51,54,135,3,1,4,103,55,51,53,136,3,1,4, +103,55,51,56,137,3,1,4,103,55,51,55,138,248,22,93,199,248,22,94,199, +248,22,58,199,248,22,84,199,21,95,62,105,102,139,95,2,78,61,118,140,94, +2,121,63,46,46,46,141,96,2,0,62,101,49,142,62,101,50,143,2,141,20, +15,159,49,39,46,27,28,248,80,158,40,34,197,249,80,158,41,35,248,80,158, +42,36,199,27,248,80,158,43,37,200,28,248,80,158,43,34,193,249,80,158,44, +35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46,34,193, +249,80,158,47,38,27,248,80,158,49,36,196,28,248,80,158,49,34,193,249,80, +158,50,38,27,248,80,158,52,36,196,28,248,80,158,52,42,193,248,22,65,248, +80,158,53,43,194,11,27,248,80,158,52,37,196,28,248,80,158,52,34,193,249, +80,158,53,35,248,80,158,54,36,195,27,248,80,158,55,37,196,28,248,80,158, +55,42,193,248,22,65,248,80,158,56,43,194,11,11,11,27,248,80,158,49,37, +196,28,248,80,158,49,34,193,249,80,158,50,35,248,80,158,51,36,195,27,248, +80,158,52,37,196,28,248,80,158,52,42,193,248,80,158,52,43,193,11,11,11, +11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248, +22,96,197,27,249,22,76,199,38,27,249,22,76,200,39,27,249,22,75,201,40, +249,80,158,48,44,23,15,27,253,22,67,204,203,206,202,201,205,250,80,158,52, +45,89,162,34,34,46,9,224,18,3,26,8,80,158,43,40,20,15,159,43,40, +46,21,98,3,1,4,103,55,51,57,144,3,1,4,103,55,52,48,145,3,1, +4,103,55,52,50,146,3,1,4,103,55,52,49,147,3,1,4,103,55,52,52, +148,3,1,4,103,55,52,51,149,248,22,93,201,249,22,75,202,39,248,22,58, +201,248,22,84,201,248,22,96,201,249,22,76,202,38,21,95,63,108,101,116,150, +93,94,2,113,2,140,96,2,139,95,2,78,2,113,94,2,121,2,141,96,2, +0,2,142,2,143,2,141,97,2,76,2,113,62,99,49,151,62,99,50,152,2, +141,20,15,159,52,41,46,27,28,248,80,158,41,34,198,249,80,158,42,35,248, +80,158,43,36,200,27,248,80,158,44,37,201,28,248,80,158,44,34,193,27,28, +248,22,213,194,193,201,249,80,158,46,35,248,80,158,47,36,196,27,248,80,158, +48,37,197,28,248,80,158,48,34,193,27,28,248,22,213,194,193,196,249,80,158, +50,38,27,248,80,158,52,36,197,28,248,80,158,52,34,193,249,80,158,53,35, +248,80,158,54,36,195,27,248,80,158,55,37,196,28,248,80,158,55,34,193,249, +80,158,56,35,248,80,158,57,36,195,27,248,80,158,58,37,196,28,248,80,158, +58,42,193,248,22,65,248,80,158,59,43,194,11,11,11,27,248,80,158,52,37, +197,250,22,216,198,195,198,11,11,11,28,192,27,248,22,58,194,27,248,22,84, +195,27,248,22,93,196,27,248,22,96,197,27,249,22,76,199,38,27,249,22,75, +200,39,251,22,252,47,2,11,6,33,33,98,97,100,32,115,121,110,116,97,120, +32,40,110,111,116,32,97,32,100,97,116,117,109,32,115,101,113,117,101,110,99, +101,41,153,23,17,199,27,28,248,80,158,42,34,199,249,80,158,43,35,248,80, +158,44,36,201,27,248,80,158,45,37,202,28,248,80,158,45,34,193,27,28,248, +22,213,194,193,202,249,80,158,47,35,248,80,158,48,36,196,27,248,80,158,49, +37,197,28,248,80,158,49,34,193,27,28,248,22,213,194,193,196,249,80,158,51, +35,248,80,158,52,36,196,27,248,80,158,53,37,197,250,22,216,198,195,198,11, +11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248, +22,94,197,251,22,252,47,2,11,6,52,52,98,97,100,32,115,121,110,116,97, +120,32,40,109,105,115,115,105,110,103,32,101,120,112,114,101,115,115,105,111,110, +32,97,102,116,101,114,32,100,97,116,117,109,32,115,101,113,117,101,110,99,101, +41,154,23,16,197,27,28,248,80,158,43,34,200,249,80,158,44,35,248,80,158, +45,36,202,27,248,80,158,46,37,203,250,22,216,205,195,205,11,28,192,27,248, +22,58,194,27,248,22,59,195,28,248,22,63,248,22,217,194,250,22,252,47,2, +11,2,85,204,250,22,252,47,2,11,6,31,31,98,97,100,32,115,121,110,116, +97,120,32,40,105,108,108,101,103,97,108,32,117,115,101,32,111,102,32,96,46, +39,41,155,206,250,22,252,47,2,11,2,85,202,34,20,99,159,34,16,12,2, +86,2,89,2,91,2,93,2,95,2,97,2,99,30,156,2,87,71,105,100,101, +110,116,105,102,105,101,114,63,157,2,2,102,2,104,30,158,68,35,37,115,116, +120,108,111,99,159,68,114,101,108,111,99,97,116,101,160,0,30,161,2,100,1, +20,99,97,116,99,104,45,101,108,108,105,112,115,105,115,45,101,114,114,111,114, +162,1,16,8,18,98,2,106,48,38,37,36,16,4,47,11,2,113,3,1,7, +101,110,118,51,56,53,48,163,18,158,95,100,2,0,51,38,37,36,47,16,6, +50,11,3,1,4,103,55,50,57,164,3,1,4,103,55,51,48,165,3,1,7, +101,110,118,51,56,53,53,166,2,166,16,6,49,11,2,120,2,140,3,1,7, +101,110,118,51,56,53,54,167,2,167,158,2,131,51,158,94,10,64,99,111,110, +100,168,51,51,18,16,2,158,64,101,108,115,101,169,48,52,18,158,162,37,100, +2,0,55,38,37,36,47,16,10,54,11,3,1,4,103,55,50,53,170,3,1, +4,103,55,50,54,171,3,1,4,103,55,50,55,172,3,1,4,103,55,50,56, +173,3,1,7,101,110,118,51,56,55,49,174,2,174,2,174,2,174,16,10,53, +11,2,120,2,140,2,142,2,143,3,1,7,101,110,118,51,56,55,50,175,2, +175,2,175,2,175,158,2,132,55,158,2,133,55,2,134,55,55,18,158,95,100, +2,139,58,38,37,36,47,16,12,57,11,3,1,4,103,55,50,48,176,3,1, +4,103,55,50,49,177,3,1,4,103,55,50,50,178,3,1,4,103,55,50,51, +179,3,1,4,103,55,50,52,180,3,1,7,101,110,118,51,56,57,49,181,2, +181,2,181,2,181,2,181,16,12,56,11,2,120,2,140,2,121,2,142,2,143, +3,1,7,101,110,118,51,56,57,50,182,2,182,2,182,2,182,2,182,158,96, +10,2,78,2,135,2,136,58,158,160,10,2,0,2,137,2,138,58,58,18,16, +2,96,2,141,8,26,93,8,252,221,12,16,4,59,11,61,114,183,3,1,7, +101,110,118,51,57,48,52,184,95,9,8,252,221,12,2,100,18,158,95,100,2, +150,8,29,38,37,36,47,16,16,8,28,11,3,1,4,103,55,49,51,185,3, +1,4,103,55,49,52,186,3,1,4,103,55,49,53,187,3,1,4,103,55,49, +54,188,3,1,4,103,55,49,55,189,3,1,4,103,55,49,56,190,3,1,4, +103,55,49,57,191,3,1,7,101,110,118,51,57,49,54,192,2,192,2,192,2, +192,2,192,2,192,2,192,16,16,8,27,11,2,120,2,140,2,121,2,142,2, +143,2,151,2,152,3,1,7,101,110,118,51,57,49,55,193,2,193,2,193,2, +193,2,193,2,193,2,193,158,94,10,94,2,113,2,144,8,29,158,97,10,2, +139,95,2,78,2,113,2,145,159,2,0,2,146,2,147,160,2,76,2,113,2, +148,2,149,8,29,8,29,18,16,2,96,2,141,8,31,93,8,252,226,12,16, +4,8,30,11,2,183,3,1,7,101,110,118,51,57,51,51,194,95,9,8,252, +226,12,2,100,11,16,5,93,2,74,87,95,83,159,34,93,80,159,34,8,33, +35,89,162,35,35,41,9,223,0,251,80,158,38,47,20,15,159,38,46,49,21, +94,3,1,4,103,55,54,54,195,3,1,4,103,55,54,53,196,248,22,58,198, +248,22,84,198,83,159,34,93,80,159,34,8,32,35,89,162,35,35,41,9,223, +0,251,80,158,38,47,20,15,159,38,42,49,21,94,3,1,4,103,55,54,48, +197,3,1,4,103,55,53,57,198,248,22,58,198,248,22,84,198,89,162,34,35, +8,28,9,223,0,27,249,22,216,20,15,159,37,34,49,196,27,28,248,80,158, +37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, +28,248,80,158,40,34,193,249,80,158,41,38,27,248,80,158,43,36,196,28,248, +80,158,43,39,193,248,22,8,89,162,34,35,41,9,224,9,1,27,249,22,2, +89,162,34,35,50,9,224,4,5,249,80,158,37,40,28,248,80,158,38,34,197, +249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80, +158,41,34,193,27,28,248,22,213,194,193,200,249,80,158,43,35,248,80,158,44, +36,196,27,248,80,158,45,37,197,248,22,65,250,22,216,199,196,199,11,11,194, +248,80,158,39,41,196,28,248,22,63,193,21,95,9,9,9,248,80,158,37,42, +193,11,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,38, +27,248,80,158,46,36,196,28,248,80,158,46,34,193,249,80,158,47,35,248,80, +158,48,36,195,27,248,80,158,49,37,196,28,248,80,158,49,39,193,248,22,65, +248,80,158,50,41,194,11,11,27,248,80,158,46,37,196,28,248,80,158,46,39, +193,248,80,158,46,41,193,11,11,11,11,28,192,27,248,22,58,194,27,248,22, +84,195,27,248,22,93,196,27,248,22,96,197,27,249,22,76,199,38,27,249,22, +76,200,39,27,249,22,75,201,40,27,249,22,216,20,15,159,46,35,49,250,22, +2,89,162,34,36,45,9,224,15,16,27,249,22,216,20,15,159,38,36,49,198, +27,248,80,158,38,43,194,28,192,196,27,28,248,80,158,39,34,195,249,80,158, +40,38,248,80,158,41,36,197,248,80,158,41,43,248,80,158,42,37,198,11,28, +192,192,250,22,252,47,2,11,6,19,19,98,97,100,32,118,97,114,105,97,98, +108,101,32,115,121,110,116,97,120,199,198,248,22,223,249,80,158,52,44,20,15, +159,52,37,49,206,248,22,223,249,80,158,52,44,20,15,159,52,38,49,204,27, +28,248,80,158,46,39,194,248,80,158,46,41,194,11,28,192,27,249,22,216,20, +15,159,48,39,49,249,80,158,50,44,20,15,159,50,40,49,200,27,248,80,158, +48,43,194,28,192,249,80,158,49,45,23,16,27,252,22,67,204,206,23,16,202, +23,17,250,80,158,53,46,89,162,34,34,47,9,224,19,3,252,80,158,40,47, +20,15,159,40,41,49,21,95,3,1,4,103,55,54,52,200,3,1,4,103,55, +54,49,201,3,1,4,103,55,54,51,202,250,22,2,80,159,43,8,32,35,248, +22,95,201,248,22,93,201,248,22,84,198,249,22,71,248,22,58,200,250,80,158, +45,47,20,15,159,45,43,49,21,93,3,1,4,103,55,54,50,203,248,22,96, +203,21,96,2,150,66,100,111,108,111,111,112,204,94,94,63,118,97,114,205,64, +105,110,105,116,206,2,141,95,2,139,94,63,110,111,116,207,62,101,48,208,96, +2,0,61,99,209,2,141,95,2,204,64,115,116,101,112,210,2,141,20,15,159, +53,44,49,27,28,248,80,158,49,34,195,249,80,158,50,35,248,80,158,51,36, +197,27,248,80,158,52,37,198,28,248,80,158,52,39,193,248,80,158,52,41,193, +11,11,28,192,27,248,22,58,194,27,248,22,59,195,249,80,158,52,45,23,19, +27,254,22,67,203,23,19,23,21,23,17,23,15,202,23,22,250,80,158,56,46, +89,162,34,34,50,9,224,22,3,254,80,158,42,47,20,15,159,42,45,49,21, +97,3,1,4,103,55,55,50,211,3,1,4,103,55,55,49,212,3,1,4,103, +55,54,56,213,3,1,4,103,55,54,55,214,3,1,4,103,55,55,48,215,250, +22,2,80,159,45,8,33,35,249,22,75,204,40,248,22,93,203,248,22,84,200, +248,22,58,200,249,22,76,201,39,249,22,71,248,22,96,202,250,80,158,47,47, +20,15,159,47,47,49,21,93,3,1,4,103,55,54,57,216,249,22,76,206,38, +21,96,2,150,2,204,94,94,2,205,2,206,2,141,96,2,139,2,208,96,2, +0,2,142,2,143,2,141,96,2,0,2,209,2,141,95,2,204,2,210,2,141, +20,15,159,56,48,49,250,22,252,47,2,11,2,85,197,248,80,158,46,48,20, +15,159,46,49,49,250,22,252,47,2,11,2,85,196,34,20,99,159,36,16,15, +2,86,2,89,2,91,2,93,2,95,2,102,30,217,2,87,73,115,116,120,45, +99,104,101,99,107,47,101,115,99,218,7,2,104,30,219,2,87,70,115,116,120, +45,114,111,116,97,116,101,220,12,2,97,30,221,2,100,1,26,100,97,116,117, +109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,47,115,104,97,112, +101,222,2,2,158,2,161,2,99,30,223,70,35,37,119,105,116,104,45,115,116, +120,224,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105,108,225,3, +16,16,18,98,2,106,8,33,38,37,36,16,4,8,32,11,66,111,114,105,103, +45,120,226,3,1,7,101,110,118,51,57,57,49,227,18,100,2,106,8,36,38, +37,36,8,32,16,16,8,35,11,3,1,4,103,55,52,53,228,3,1,4,103, +55,52,54,229,3,1,4,103,55,52,55,230,3,1,4,103,55,52,56,231,3, +1,4,103,55,52,57,232,3,1,4,103,55,53,48,233,3,1,4,103,55,53, +49,234,3,1,7,101,110,118,52,48,48,56,235,2,235,2,235,2,235,2,235, +2,235,2,235,16,16,8,34,11,2,120,2,205,2,206,2,210,2,208,2,142, +2,209,3,1,7,101,110,118,52,48,48,57,236,2,236,2,236,2,236,2,236, +2,236,2,236,18,101,2,106,8,38,38,37,36,8,32,8,35,8,34,16,6, +8,37,11,2,140,61,115,237,3,1,7,101,110,118,52,48,50,54,238,2,238, +18,16,2,158,64,100,101,115,116,239,8,36,8,39,18,8,39,18,101,2,106, +8,41,38,37,36,8,32,8,35,8,34,16,4,8,40,11,3,1,4,103,55, +53,54,240,3,1,7,101,110,118,52,48,52,56,241,18,16,2,158,2,239,8, +41,8,42,18,158,97,10,2,150,2,204,2,200,95,2,139,94,2,207,2,201, +158,2,0,2,202,8,41,18,158,95,10,2,197,2,198,8,41,18,16,2,103, +93,158,159,10,2,204,2,203,8,41,8,50,98,8,49,10,34,11,95,159,2, +18,9,11,159,2,108,9,11,159,2,87,9,11,16,14,73,115,121,110,116,97, +120,45,99,97,115,101,42,42,242,29,243,11,11,2,222,2,243,66,115,121,110, +116,97,120,244,2,243,2,101,2,243,78,112,97,116,116,101,114,110,45,115,117, +98,115,116,105,116,117,116,101,245,2,243,75,115,117,98,115,116,105,116,117,116, +101,45,115,116,111,112,246,2,243,2,162,2,243,98,8,48,10,35,11,95,159, +64,35,37,115,99,247,9,11,159,2,108,9,11,159,2,87,9,11,16,0,96, +8,47,8,254,1,11,16,0,16,4,8,46,11,2,113,3,1,6,101,110,118, +52,53,52,248,16,4,8,45,11,68,104,101,114,101,45,115,116,120,249,3,1, +6,101,110,118,52,53,54,250,16,4,8,44,11,2,249,2,250,13,16,4,35, +2,243,2,100,11,93,8,252,32,13,16,4,8,43,11,2,183,3,1,7,101, +110,118,52,48,53,57,251,95,9,8,252,32,13,2,100,18,16,2,96,2,141, +8,52,93,8,252,32,13,16,4,8,51,11,2,183,2,251,95,9,8,252,32, +13,2,100,18,158,96,103,2,150,8,55,38,37,36,8,32,8,35,8,34,8, +40,16,6,8,54,11,3,1,4,103,55,53,55,252,252,0,3,1,4,103,55, +53,56,252,253,0,3,1,7,101,110,118,52,48,54,54,252,254,0,2,252,254, +0,16,4,8,53,11,2,143,3,1,7,101,110,118,52,48,54,55,252,255,0, +158,2,204,8,55,158,2,211,8,55,158,97,10,2,139,2,212,159,2,0,2, +213,2,214,158,2,0,2,215,8,55,8,55,18,158,95,10,2,195,2,196,8, +55,18,16,2,103,93,158,159,10,2,204,2,216,8,55,8,57,8,49,8,48, +8,47,8,46,8,45,8,44,13,16,4,35,2,243,2,100,11,93,8,252,39, +13,16,4,8,56,11,2,183,3,1,7,101,110,118,52,48,55,51,252,0,1, +95,9,8,252,39,13,2,100,18,16,2,96,2,141,8,59,93,8,252,39,13, +16,4,8,58,11,2,183,2,252,0,1,95,9,8,252,39,13,2,100,18,16, +2,158,94,98,2,210,8,63,93,8,252,7,13,16,4,8,62,11,3,1,8, +119,115,116,109,112,55,53,50,252,1,1,3,1,7,101,110,118,52,48,50,53, +252,2,1,16,4,8,61,11,3,1,4,103,55,53,53,252,3,1,3,1,7, +101,110,118,52,48,55,56,252,4,1,16,4,8,60,11,65,95,101,108,115,101, +252,5,1,3,1,7,101,110,118,52,48,55,57,252,6,1,158,2,141,8,63, +8,63,95,9,8,252,7,13,2,224,11,16,5,93,2,70,89,162,34,35,45, 9,223,0,27,249,22,216,20,15,159,37,34,42,196,27,28,248,80,158,37,34, 194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248, -80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43, -37,196,28,248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27, -248,80,158,46,37,196,28,248,80,158,46,38,193,248,80,158,46,39,193,11,11, -11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248, -22,94,197,249,80,158,42,40,201,27,250,22,67,200,199,198,252,80,158,48,41, -20,15,159,48,35,42,21,95,3,1,4,103,56,53,52,252,165,1,3,1,4, -103,56,53,54,252,166,1,3,1,4,103,56,53,53,252,167,1,248,22,58,198, -248,22,84,198,248,22,86,198,250,22,252,47,2,11,2,79,196,34,20,99,159, -34,16,8,2,80,2,83,2,85,2,87,2,96,2,98,2,152,2,93,16,2, -18,98,2,100,8,157,38,37,36,16,4,8,156,11,2,252,19,1,3,1,7, -101,110,118,52,51,52,50,252,168,1,18,158,94,100,67,99,97,108,108,47,99, -99,252,169,1,8,160,38,37,36,8,156,16,10,8,159,11,3,1,4,103,56, -53,48,252,170,1,3,1,4,103,56,53,49,252,171,1,3,1,4,103,56,53, -50,252,172,1,3,1,4,103,56,53,51,252,173,1,3,1,7,101,110,118,52, -51,52,57,252,174,1,2,252,174,1,2,252,174,1,2,252,174,1,16,10,8, -158,11,2,114,2,199,65,98,111,100,121,49,252,175,1,64,98,111,100,121,252, -176,1,3,1,7,101,110,118,52,51,53,48,252,177,1,2,252,177,1,2,252, -177,1,2,252,177,1,158,161,10,2,252,8,1,93,2,252,165,1,2,252,166, -1,2,252,167,1,8,160,8,160,11,16,5,93,2,62,89,162,34,35,51,9, -223,0,27,249,22,216,20,15,159,37,34,44,196,27,28,248,80,158,37,34,194, +80,158,40,34,193,249,80,158,41,38,248,80,158,42,36,195,248,80,158,42,39, +248,80,158,43,37,196,11,11,28,192,27,248,22,58,194,27,248,22,59,195,249, +80,158,40,40,199,250,80,158,43,41,20,15,159,43,35,42,21,93,3,1,4, +103,55,55,53,252,7,1,197,250,22,252,47,2,11,2,85,196,34,20,99,159, +34,16,8,2,86,2,89,2,91,2,93,2,95,2,97,2,158,2,99,16,2, +18,98,2,106,8,65,38,37,36,16,4,8,64,11,2,113,3,1,7,101,110, +118,52,48,56,51,252,8,1,18,158,94,100,2,6,8,68,38,37,36,8,64, +16,6,8,67,11,3,1,4,103,55,55,51,252,9,1,3,1,4,103,55,55, +52,252,10,1,3,1,7,101,110,118,52,48,56,56,252,11,1,2,252,11,1, +16,6,8,66,11,2,70,63,101,120,112,252,12,1,3,1,7,101,110,118,52, +48,56,57,252,13,1,2,252,13,1,158,96,10,66,108,97,109,98,100,97,252, +14,1,9,2,252,7,1,8,68,8,68,11,16,5,93,2,109,27,247,22,252, +110,3,253,22,66,248,199,20,15,159,42,34,34,248,199,20,15,159,42,35,34, +248,199,20,15,159,42,36,34,248,22,66,248,200,20,15,159,43,37,34,248,22, +66,248,200,20,15,159,43,38,34,10,43,20,99,159,34,16,0,16,5,18,97, +2,4,8,69,38,37,36,18,16,2,158,2,6,8,69,8,70,18,16,2,158, +2,8,8,69,8,71,18,16,2,158,2,10,8,69,8,72,18,16,2,158,2, +12,8,69,8,73,11,16,5,93,2,68,89,162,34,35,55,9,223,0,27,249, +22,216,20,15,159,37,34,49,196,27,28,248,80,158,37,34,194,249,80,158,38, +35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193, +28,248,80,158,40,38,248,80,158,41,36,194,27,248,80,158,41,37,194,28,248, +80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27,248,80,158,44, +37,196,28,248,80,158,44,39,193,248,80,158,44,40,193,11,11,11,11,11,28, +192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,27,249,22,67,195, +196,251,80,158,44,41,20,15,159,44,35,49,21,94,3,1,4,103,55,56,54, +252,15,1,3,1,4,103,55,56,53,252,16,1,248,22,59,197,248,22,58,197, +27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248, +80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,42,27,248,80,158, +44,36,196,28,248,80,158,44,39,193,248,22,8,89,162,34,35,41,9,224,10, +1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,43,28,248, +80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41, +37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248, +80,158,43,38,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248, +22,63,193,21,94,9,9,248,80,158,37,44,193,11,27,248,80,158,44,37,196, +28,248,80,158,44,34,193,249,80,158,45,35,248,80,158,46,36,195,27,248,80, +158,47,37,196,28,248,80,158,47,39,193,248,80,158,47,40,193,11,11,11,11, +28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96, +197,27,248,22,95,198,27,249,22,216,20,15,159,45,36,49,249,22,1,22,71, +250,22,2,22,65,248,22,223,249,80,158,53,45,20,15,159,53,37,49,206,248, +22,223,249,80,158,53,45,20,15,159,53,38,49,205,27,28,248,80,158,45,39, +194,248,80,158,45,40,194,11,28,192,249,80,158,46,46,205,27,250,22,67,198, +201,200,250,80,158,50,47,89,162,34,34,42,9,224,16,3,252,80,158,40,41, +20,15,159,40,39,49,21,95,3,1,4,103,55,57,48,252,17,1,3,1,4, +103,55,57,50,252,18,1,3,1,4,103,55,57,49,252,19,1,248,22,58,198, +248,22,84,198,248,22,86,198,21,96,1,22,119,105,116,104,45,99,111,110,116, +105,110,117,97,116,105,111,110,45,109,97,114,107,252,20,1,2,21,96,2,19, +95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,45, +115,101,116,45,102,105,114,115,116,252,21,1,11,2,21,63,112,47,118,252,22, +1,2,141,97,2,150,9,65,101,120,112,114,49,252,23,1,64,101,120,112,114, +252,24,1,2,141,20,15,159,50,40,49,248,80,158,45,48,20,15,159,45,41, +49,250,22,252,47,2,11,2,85,197,34,20,99,159,34,16,15,2,86,2,89, +2,91,2,93,2,97,2,102,2,104,2,99,2,95,2,217,2,219,2,221,2, +158,2,161,2,223,16,8,18,98,2,106,8,75,38,37,36,16,4,8,74,11, +63,115,116,120,252,25,1,3,1,7,101,110,118,52,48,57,57,252,26,1,18, +158,162,37,100,2,150,8,78,38,37,36,8,74,16,8,8,77,11,3,1,4, +103,55,56,50,252,27,1,3,1,4,103,55,56,51,252,28,1,3,1,4,103, +55,56,52,252,29,1,3,1,7,101,110,118,52,49,48,54,252,30,1,2,252, +30,1,2,252,30,1,16,8,8,76,11,2,120,2,252,23,1,2,252,24,1, +3,1,7,101,110,118,52,49,48,55,252,31,1,2,252,31,1,2,252,31,1, +158,9,8,78,158,2,252,15,1,8,78,2,252,16,1,8,78,8,78,18,100, +2,106,8,81,38,37,36,8,74,16,12,8,80,11,3,1,4,103,55,55,55, +252,32,1,3,1,4,103,55,55,56,252,33,1,3,1,4,103,55,55,57,252, +34,1,3,1,4,103,55,56,48,252,35,1,3,1,4,103,55,56,49,252,36, +1,3,1,7,101,110,118,52,49,50,54,252,37,1,2,252,37,1,2,252,37, +1,2,252,37,1,2,252,37,1,16,12,8,79,11,2,120,65,112,97,114,97, +109,252,38,1,63,118,97,108,252,39,1,2,252,23,1,2,252,24,1,3,1, +7,101,110,118,52,49,50,55,252,40,1,2,252,40,1,2,252,40,1,2,252, +40,1,2,252,40,1,18,16,2,158,2,239,8,81,8,82,18,8,82,18,158, +96,102,2,252,20,1,8,85,38,37,36,8,74,8,80,8,79,16,4,8,84, +11,3,1,4,103,55,56,57,252,41,1,3,1,7,101,110,118,52,49,52,53, +252,42,1,16,4,8,83,11,2,252,22,1,3,1,7,101,110,118,52,49,52, +54,252,43,1,158,2,21,8,85,158,160,10,2,19,95,2,252,21,1,11,2, +21,2,252,17,1,8,85,158,161,10,2,150,9,2,252,18,1,2,252,19,1, +8,85,8,85,18,16,2,96,2,141,8,87,93,8,252,105,13,16,4,8,86, +11,2,183,3,1,7,101,110,118,52,49,53,48,252,44,1,95,9,8,252,105, +13,2,100,18,16,2,158,94,98,2,252,22,1,8,91,93,8,252,96,13,16, +4,8,90,11,3,1,8,119,115,116,109,112,55,56,55,252,45,1,3,1,7, +101,110,118,52,49,51,57,252,46,1,16,4,8,89,11,3,1,4,103,55,56, +56,252,47,1,3,1,7,101,110,118,52,49,53,51,252,48,1,16,4,8,88, +11,2,252,5,1,3,1,7,101,110,118,52,49,53,52,252,49,1,158,2,141, +8,91,8,91,95,9,8,252,96,13,2,224,11,16,5,93,2,71,89,162,34, +35,51,9,223,0,27,249,22,216,20,15,159,37,34,42,196,27,28,248,80,158, +37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, +28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80, +158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36, +195,27,248,80,158,46,37,196,28,248,80,158,46,38,193,248,80,158,46,39,193, +11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196, +27,248,22,94,197,249,80,158,42,40,201,27,250,22,67,200,198,199,252,80,158, +48,41,20,15,159,48,35,42,21,95,3,1,4,103,55,57,55,252,50,1,3, +1,4,103,55,57,57,252,51,1,3,1,4,103,55,57,56,252,52,1,248,22, +58,198,248,22,86,198,248,22,84,198,250,22,252,47,2,11,2,85,196,34,20, +99,159,34,16,8,2,86,2,89,2,91,2,93,2,102,2,104,2,158,2,99, +16,2,18,98,2,106,8,93,38,37,36,16,4,8,92,11,2,252,25,1,3, +1,7,101,110,118,52,49,53,56,252,53,1,18,158,96,100,2,252,20,1,8, +96,38,37,36,8,92,16,10,8,95,11,3,1,4,103,55,57,51,252,54,1, +3,1,4,103,55,57,52,252,55,1,3,1,4,103,55,57,53,252,56,1,3, +1,4,103,55,57,54,252,57,1,3,1,7,101,110,118,52,49,54,53,252,58, +1,2,252,58,1,2,252,58,1,2,252,58,1,16,10,8,94,11,2,120,69, +98,111,111,108,45,101,120,112,114,252,59,1,2,252,23,1,2,252,24,1,3, +1,7,101,110,118,52,49,54,54,252,60,1,2,252,60,1,2,252,60,1,2, +252,60,1,158,2,47,8,96,158,95,10,76,109,97,107,101,45,116,104,114,101, +97,100,45,99,101,108,108,252,61,1,95,63,97,110,100,252,62,1,2,252,50, +1,10,8,96,158,96,10,2,0,93,2,51,160,2,150,9,2,252,51,1,2, +252,52,1,8,96,8,96,11,16,5,93,2,110,27,247,22,252,110,3,253,22, +66,248,199,20,15,159,42,34,34,248,199,20,15,159,42,35,34,248,199,20,15, +159,42,36,34,248,22,66,248,200,20,15,159,43,37,34,248,22,66,248,200,20, +15,159,43,38,34,10,43,20,99,159,34,16,0,16,5,18,16,2,158,2,35, +8,69,8,97,18,16,2,158,2,37,8,69,8,98,18,16,2,158,2,39,8, +69,8,99,18,16,2,158,2,41,8,69,8,100,18,16,2,158,2,43,8,69, +8,101,11,16,5,94,2,75,2,77,87,96,83,159,34,93,80,159,34,8,35, +35,89,162,35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,46,50,21, +94,3,1,4,103,56,50,53,252,63,1,3,1,4,103,56,50,52,252,64,1, +248,22,58,198,248,22,84,198,83,159,34,93,80,159,34,8,34,35,89,162,35, +35,41,9,223,0,251,80,158,38,42,20,15,159,38,45,50,21,94,3,1,4, +103,56,50,49,252,65,1,3,1,4,103,56,50,48,252,66,1,248,22,58,198, +248,22,84,198,83,159,34,93,80,159,34,8,33,35,89,162,35,35,41,9,223, +0,251,80,158,38,42,20,15,159,38,44,50,21,94,3,1,4,103,56,50,51, +252,67,1,3,1,4,103,56,50,50,252,68,1,248,22,58,198,248,22,84,198, +27,89,162,8,36,35,36,62,119,104,252,69,1,223,1,89,162,34,35,8,26, +9,224,0,1,27,249,22,216,20,15,159,38,34,50,197,27,28,248,80,158,38, +34,194,249,80,158,39,35,248,80,158,40,36,196,27,248,80,158,41,37,197,28, +248,80,158,41,34,193,28,248,80,158,41,38,248,80,158,42,36,194,27,248,80, +158,42,37,194,28,248,80,158,42,34,193,249,80,158,43,35,248,80,158,44,36, +195,27,248,80,158,45,37,196,28,248,80,158,45,39,193,248,80,158,45,40,193, +11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86, +196,249,80,158,42,41,201,27,249,22,67,197,198,251,80,158,47,42,20,15,159, +47,35,50,21,94,3,1,4,103,56,49,48,252,70,1,3,1,4,103,56,48, +57,252,71,1,248,22,59,197,248,22,58,197,27,28,248,80,158,39,34,195,249, +80,158,40,35,248,80,158,41,36,197,27,248,80,158,42,37,198,28,248,80,158, +42,34,193,249,80,158,43,43,27,248,80,158,45,36,196,28,248,80,158,45,39, +193,248,22,8,89,162,34,35,41,9,224,11,1,27,249,22,2,89,162,34,35, +46,9,224,4,5,249,80,158,37,44,28,248,80,158,38,34,197,249,80,158,39, +35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193, +249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,38,248,80,158,44,37, +196,11,11,194,248,80,158,39,40,196,28,248,22,63,193,21,94,9,9,248,80, +158,37,45,193,11,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249,80, +158,46,35,248,80,158,47,36,195,27,248,80,158,48,37,196,28,248,80,158,48, +39,193,248,80,158,48,40,193,11,11,11,11,28,192,27,248,22,58,194,27,248, +22,84,195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198,27,249,22, +216,20,15,159,46,36,50,248,80,158,47,46,249,22,2,32,252,72,1,89,162, +8,44,35,35,9,222,1,23,119,105,116,104,45,104,97,110,100,108,101,114,115, +45,112,114,101,100,105,99,97,116,101,252,73,1,248,22,223,249,80,158,52,47, +20,15,159,52,37,50,204,27,249,22,216,20,15,159,47,38,50,248,80,158,48, +46,249,22,2,32,252,74,1,89,162,8,44,35,35,9,222,1,21,119,105,116, +104,45,104,97,110,100,108,101,114,115,45,104,97,110,100,108,101,114,252,75,1, +248,22,223,249,80,158,53,47,20,15,159,53,39,50,204,27,28,248,80,158,47, +39,195,248,80,158,47,40,195,11,28,192,27,28,248,80,158,48,39,195,248,80, +158,48,40,195,11,28,192,27,249,22,216,20,15,159,50,40,50,28,23,15,20, +15,159,50,41,50,20,15,159,50,42,50,249,80,158,50,41,23,17,27,254,22, +67,23,16,203,23,15,23,17,23,18,202,204,250,80,158,54,48,89,162,34,34, +50,9,224,20,3,254,80,158,42,42,20,15,159,42,43,50,21,97,3,1,4, +103,56,51,48,252,76,1,3,1,4,103,56,50,55,252,77,1,3,1,4,103, +56,50,54,252,78,1,3,1,4,103,56,50,57,252,79,1,3,1,4,103,56, +50,56,252,80,1,249,22,71,250,22,2,80,159,47,8,33,35,249,22,75,206, +40,249,22,76,206,38,250,22,2,80,159,47,8,34,35,248,22,84,205,248,22, +96,205,249,22,76,201,39,250,22,2,80,159,45,8,35,35,249,22,75,204,40, +248,22,84,203,248,22,58,200,248,22,93,200,21,95,2,150,96,94,69,112,114, +101,100,45,110,97,109,101,252,81,1,64,112,114,101,100,252,82,1,2,141,94, +72,104,97,110,100,108,101,114,45,110,97,109,101,252,83,1,67,104,97,110,100, +108,101,114,252,84,1,2,141,95,2,150,93,94,63,98,112,122,252,85,1,95, +2,252,21,1,11,2,47,96,2,252,20,1,2,47,2,57,96,1,29,99,97, +108,108,45,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45, +112,114,111,109,112,116,252,86,1,95,2,252,14,1,9,96,2,252,20,1,2, +47,2,252,85,1,96,2,252,20,1,2,65,95,2,252,14,1,93,61,101,252, +87,1,95,1,26,97,98,111,114,116,45,99,117,114,114,101,110,116,45,99,111, +110,116,105,110,117,97,116,105,111,110,252,88,1,2,61,95,2,252,14,1,9, +96,63,117,113,49,252,89,1,2,252,87,1,2,252,85,1,95,64,108,105,115, +116,252,90,1,95,64,99,111,110,115,252,91,1,2,252,81,1,2,252,83,1, +2,141,97,2,150,9,2,252,23,1,2,252,24,1,2,141,2,61,95,2,252, +14,1,93,65,116,104,117,110,107,252,92,1,93,2,252,92,1,20,15,159,54, +47,50,248,80,158,48,49,20,15,159,48,48,50,248,80,158,47,49,20,15,159, +47,49,50,250,22,252,47,2,11,2,85,197,249,22,7,248,195,10,248,195,11, +38,20,99,159,37,16,16,2,86,2,89,2,91,2,93,2,97,2,102,2,104, +2,158,2,99,2,95,2,217,2,219,30,252,93,1,2,224,1,20,103,101,110, +101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,252,94,1,0, +2,221,2,161,2,223,16,16,18,99,2,106,8,104,38,37,36,16,4,8,103, +11,74,100,105,115,97,98,108,101,45,98,114,101,97,107,63,252,95,1,3,1, +7,101,110,118,52,49,56,49,252,96,1,16,4,8,102,11,2,252,25,1,3, +1,7,101,110,118,52,49,56,50,252,97,1,18,158,162,37,101,2,150,8,107, +38,37,36,8,103,8,102,16,8,8,106,11,3,1,4,103,56,48,54,252,98, +1,3,1,4,103,56,48,55,252,99,1,3,1,4,103,56,48,56,252,100,1, +3,1,7,101,110,118,52,49,56,57,252,101,1,2,252,101,1,2,252,101,1, +16,8,8,105,11,2,120,2,252,23,1,2,252,24,1,3,1,7,101,110,118, +52,49,57,48,252,102,1,2,252,102,1,2,252,102,1,158,9,8,107,158,2, +252,70,1,8,107,2,252,71,1,8,107,8,107,18,101,2,106,8,110,38,37, +36,8,103,8,102,16,12,8,109,11,3,1,4,103,56,48,49,252,103,1,3, +1,4,103,56,48,50,252,104,1,3,1,4,103,56,48,51,252,105,1,3,1, +4,103,56,48,52,252,106,1,3,1,4,103,56,48,53,252,107,1,3,1,7, +101,110,118,52,50,48,57,252,108,1,2,252,108,1,2,252,108,1,2,252,108, +1,2,252,108,1,16,12,8,108,11,2,120,2,252,82,1,2,252,84,1,2, +252,23,1,2,252,24,1,3,1,7,101,110,118,52,50,49,48,252,109,1,2, +252,109,1,2,252,109,1,2,252,109,1,2,252,109,1,18,16,2,158,2,239, +8,110,8,111,18,16,2,158,2,106,8,110,8,112,18,8,111,18,105,2,106, +8,117,38,37,36,8,103,8,102,8,109,8,108,16,4,8,116,11,3,1,4, +103,56,49,52,252,110,1,3,1,7,101,110,118,52,50,51,48,252,111,1,16, +4,8,115,11,2,252,81,1,3,1,7,101,110,118,52,50,51,49,252,112,1, +16,4,8,114,11,3,1,4,103,56,49,54,252,113,1,3,1,7,101,110,118, +52,50,51,56,252,114,1,16,4,8,113,11,2,252,83,1,3,1,7,101,110, +118,52,50,51,57,252,115,1,18,16,2,158,2,53,8,117,8,118,18,16,2, +158,2,55,8,117,8,119,18,158,96,10,2,150,2,252,76,1,95,2,150,93, +94,2,252,85,1,95,2,252,21,1,11,2,47,96,2,252,20,1,2,47,2, +57,96,2,252,86,1,95,2,252,14,1,9,96,2,252,20,1,2,47,2,252, +85,1,96,2,252,20,1,2,65,95,2,252,14,1,93,2,252,87,1,95,2, +252,88,1,2,61,95,2,252,14,1,9,96,2,252,77,1,2,252,87,1,2, +252,85,1,158,2,252,90,1,2,252,78,1,160,2,150,9,2,252,79,1,2, +252,80,1,2,61,95,2,252,14,1,93,2,252,92,1,93,2,252,92,1,8, +117,18,158,95,10,2,252,67,1,2,252,68,1,8,117,18,158,95,10,2,252, +65,1,2,252,66,1,8,117,18,158,96,10,2,252,91,1,2,252,63,1,2, +252,64,1,8,117,18,16,2,96,2,141,8,121,93,8,252,195,13,16,4,8, +120,11,2,183,3,1,7,101,110,118,52,50,53,54,252,116,1,95,9,8,252, +195,13,2,100,18,16,2,158,94,98,2,252,83,1,8,125,93,8,252,170,13, +16,6,8,124,11,3,1,8,119,115,116,109,112,56,49,49,252,117,1,3,1, +8,119,115,116,109,112,56,49,50,252,118,1,3,1,7,101,110,118,52,50,50, +50,252,119,1,2,252,119,1,16,4,8,123,11,3,1,4,103,56,49,53,252, +120,1,3,1,7,101,110,118,52,50,54,53,252,121,1,16,4,8,122,11,2, +252,5,1,3,1,7,101,110,118,52,50,54,54,252,122,1,158,2,141,8,125, +8,125,95,9,8,252,170,13,2,224,18,16,2,158,94,98,2,252,81,1,8, +129,93,8,252,170,13,16,6,8,128,11,2,252,117,1,2,252,118,1,2,252, +119,1,2,252,119,1,16,4,8,127,11,3,1,4,103,56,49,51,252,123,1, +3,1,7,101,110,118,52,50,55,48,252,124,1,16,4,8,126,11,2,252,5, +1,3,1,7,101,110,118,52,50,55,49,252,125,1,158,2,141,8,129,8,129, +95,9,8,252,170,13,2,224,11,16,5,93,2,69,87,95,83,159,34,93,80, +159,34,8,28,35,89,162,34,36,49,68,116,114,121,45,110,101,120,116,252,126, +1,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36, +197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,39,27, +248,80,158,42,36,196,28,248,80,158,42,41,193,248,22,65,248,80,158,43,42, +194,11,27,248,80,158,42,37,196,28,248,80,158,42,34,193,249,80,158,43,39, +248,80,158,44,36,195,248,80,158,44,38,248,80,158,45,37,196,11,11,11,28, +192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,28,27,248,80,158, +40,42,249,80,158,42,43,20,15,159,42,36,50,197,87,94,249,22,3,89,162, +34,35,41,9,224,7,9,28,248,80,158,36,44,195,12,251,22,252,47,2,11, +6,17,17,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,252, +127,1,196,198,194,27,248,80,158,41,45,194,28,192,251,22,252,47,2,11,6, +20,20,100,117,112,108,105,99,97,116,101,32,105,100,101,110,116,105,102,105,101, +114,252,128,1,204,196,12,27,249,22,216,20,15,159,41,37,50,248,80,158,42, +46,249,80,158,44,43,20,15,159,44,38,50,199,27,28,248,80,158,41,41,194, +248,80,158,41,42,194,11,28,192,249,80,158,42,47,202,27,250,22,67,201,200, +198,250,80,158,46,48,89,162,34,34,45,9,224,12,3,252,80,158,40,40,20, +15,159,40,39,50,21,95,3,1,4,103,56,52,52,252,129,1,3,1,4,103, +56,52,51,252,130,1,3,1,4,103,56,52,55,252,131,1,248,22,86,198,248, +22,84,198,250,22,2,80,159,43,8,27,35,248,22,58,201,248,22,86,201,21, +96,70,108,101,116,45,118,97,108,117,101,115,252,132,1,93,94,94,64,116,101, +109,112,252,133,1,2,141,2,252,24,1,95,64,115,101,116,33,252,134,1,62, +105,100,252,135,1,2,252,133,1,2,141,20,15,159,46,41,50,248,80,158,41, +49,20,15,159,41,42,50,250,22,252,47,2,11,2,85,200,250,22,252,47,2, +11,2,85,197,83,159,34,93,80,159,34,8,27,35,89,162,35,35,41,9,223, +0,251,80,158,38,40,20,15,159,38,40,50,21,94,3,1,4,103,56,52,54, +252,136,1,3,1,4,103,56,52,53,252,137,1,248,22,58,198,248,22,84,198, +89,162,34,35,49,9,223,0,27,249,22,216,20,15,159,37,34,50,196,27,28, +248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158, +40,37,197,28,248,80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36, +194,27,248,80,158,41,37,194,28,248,80,158,41,34,193,249,80,158,42,39,248, +80,158,43,36,195,248,80,158,43,38,248,80,158,44,37,196,11,11,11,11,28, +192,27,248,22,58,194,27,248,22,59,195,250,80,158,41,40,20,15,159,41,35, +50,21,93,3,1,4,103,56,51,57,252,138,1,195,27,28,248,80,158,38,34, +195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37,198,28,248, +80,158,41,34,193,249,80,158,42,39,27,248,80,158,44,36,196,28,248,80,158, +44,34,193,249,80,158,45,35,248,80,158,46,36,195,248,80,158,46,38,248,80, +158,47,37,196,11,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80, +158,45,39,248,80,158,46,36,195,248,80,158,46,38,248,80,158,47,37,196,11, +11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,86,196,28,248, +80,158,41,44,194,27,249,22,67,196,195,251,80,158,45,40,20,15,159,45,43, +50,21,94,3,1,4,103,56,52,57,252,139,1,3,1,4,103,56,52,56,252, +140,1,248,22,58,197,248,22,59,197,249,80,159,42,8,28,35,199,201,249,80, +159,39,8,28,35,196,198,34,20,99,159,36,16,16,2,86,2,89,2,91,2, +93,2,97,2,95,2,99,2,102,2,104,2,221,2,156,30,252,141,1,2,112, +1,26,99,104,101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101, +110,116,105,102,105,101,114,252,142,1,0,2,252,93,1,2,158,2,161,2,223, +16,10,18,98,2,106,8,131,38,37,36,16,4,8,130,11,2,252,25,1,3, +1,7,101,110,118,52,50,55,53,252,143,1,18,158,95,100,2,252,132,1,8, +134,38,37,36,8,130,16,6,8,133,11,3,1,4,103,56,51,55,252,144,1, +3,1,4,103,56,51,56,252,145,1,3,1,7,101,110,118,52,50,56,49,252, +146,1,2,252,146,1,16,6,8,132,11,2,120,2,252,24,1,3,1,7,101, +110,118,52,50,56,50,252,147,1,2,252,147,1,158,94,10,94,9,2,252,138, +1,8,134,158,94,10,64,118,111,105,100,252,148,1,8,134,8,134,18,100,2, +239,8,137,38,37,36,8,130,16,8,8,136,11,3,1,4,103,56,51,49,252, +149,1,3,1,4,103,56,51,50,252,150,1,3,1,4,103,56,51,51,252,151, +1,3,1,7,101,110,118,52,50,57,56,252,152,1,2,252,152,1,2,252,152, +1,16,8,8,135,11,2,120,2,252,135,1,2,252,24,1,3,1,7,101,110, +118,52,50,57,57,252,153,1,2,252,153,1,2,252,153,1,18,16,2,158,2, +106,8,137,8,138,18,16,2,158,2,239,8,137,8,139,18,158,161,36,102,2, +252,132,1,8,144,38,37,36,8,130,16,8,8,143,11,2,252,149,1,2,252, +150,1,2,252,151,1,2,252,152,1,2,252,152,1,2,252,152,1,16,8,8, +142,11,2,120,2,252,135,1,2,252,24,1,2,252,153,1,2,252,153,1,2, +252,153,1,16,4,8,141,11,3,1,4,103,56,52,50,252,154,1,3,1,7, +101,110,118,52,51,49,53,252,155,1,16,4,8,140,11,2,252,133,1,3,1, +7,101,110,118,52,51,49,54,252,156,1,158,94,10,94,2,252,129,1,2,252, +130,1,8,144,2,252,131,1,8,144,8,144,18,158,96,10,2,252,134,1,2, +252,136,1,2,252,137,1,8,144,18,16,2,96,2,141,8,146,93,8,252,248, +13,16,4,8,145,11,2,183,3,1,7,101,110,118,52,51,50,48,252,157,1, +95,9,8,252,248,13,2,100,18,16,2,158,94,98,2,252,133,1,8,150,93, +8,252,240,13,16,4,8,149,11,3,1,8,119,115,116,109,112,56,52,48,252, +158,1,3,1,7,101,110,118,52,51,49,48,252,159,1,16,4,8,148,11,3, +1,4,103,56,52,49,252,160,1,3,1,7,101,110,118,52,51,50,53,252,161, +1,16,4,8,147,11,2,252,5,1,3,1,7,101,110,118,52,51,50,54,252, +162,1,158,2,141,8,150,8,150,95,9,8,252,240,13,2,224,18,158,95,100, +2,252,134,1,8,153,38,37,36,8,130,16,8,8,152,11,3,1,4,103,56, +51,52,252,163,1,3,1,4,103,56,51,53,252,164,1,3,1,4,103,56,51, +54,252,165,1,3,1,7,101,110,118,52,51,51,52,252,166,1,2,252,166,1, +2,252,166,1,16,8,8,151,11,2,120,2,252,135,1,2,252,24,1,3,1, +7,101,110,118,52,51,51,53,252,167,1,2,252,167,1,2,252,167,1,158,2, +252,139,1,8,153,158,2,252,140,1,8,153,8,153,11,16,5,93,2,72,89, +162,34,35,51,9,223,0,27,249,22,216,20,15,159,37,34,42,196,27,28,248, +80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40, +37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27, +248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35,248,80,158, +45,36,195,27,248,80,158,46,37,196,28,248,80,158,46,38,193,248,80,158,46, +39,193,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22, +93,196,27,248,22,94,197,249,80,158,42,40,201,27,250,22,67,199,200,198,252, +80,158,48,41,20,15,159,48,35,42,21,95,3,1,4,103,56,53,52,252,168, +1,3,1,4,103,56,53,54,252,169,1,3,1,4,103,56,53,53,252,170,1, +248,22,84,198,248,22,58,198,248,22,86,198,250,22,252,47,2,11,2,85,196, +34,20,99,159,34,16,8,2,86,2,89,2,91,2,93,2,102,2,104,2,158, +2,99,16,2,18,98,2,106,8,155,38,37,36,16,4,8,154,11,2,252,25, +1,3,1,7,101,110,118,52,51,52,52,252,171,1,18,158,94,100,67,99,97, +108,108,47,99,99,252,172,1,8,158,38,37,36,8,154,16,10,8,157,11,3, +1,4,103,56,53,48,252,173,1,3,1,4,103,56,53,49,252,174,1,3,1, +4,103,56,53,50,252,175,1,3,1,4,103,56,53,51,252,176,1,3,1,7, +101,110,118,52,51,53,49,252,177,1,2,252,177,1,2,252,177,1,2,252,177, +1,16,10,8,156,11,2,120,2,205,65,98,111,100,121,49,252,178,1,64,98, +111,100,121,252,179,1,3,1,7,101,110,118,52,51,53,50,252,180,1,2,252, +180,1,2,252,180,1,2,252,180,1,158,161,10,2,252,14,1,93,2,252,168, +1,2,252,169,1,2,252,170,1,8,158,8,158,11,16,5,93,2,67,89,162, +34,35,51,9,223,0,27,249,22,216,20,15,159,37,34,44,196,27,28,248,80, +158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37, +197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248, +80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,38,27,248,80,158, +46,36,196,28,248,80,158,46,39,193,248,22,65,248,80,158,47,40,194,11,27, +248,80,158,46,37,196,28,248,80,158,46,34,193,249,80,158,47,35,248,80,158, +48,36,195,27,248,80,158,49,37,196,28,248,80,158,49,39,193,248,80,158,49, +40,193,11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248, +22,93,196,27,248,22,96,197,27,248,22,95,198,249,80,158,43,41,202,27,251, +22,67,200,202,201,199,250,80,158,47,42,89,162,34,34,43,9,224,13,3,253, +80,158,41,43,20,15,159,41,35,44,21,96,3,1,4,103,56,54,51,252,181, +1,3,1,4,103,56,54,50,252,182,1,3,1,4,103,56,54,53,252,183,1, +3,1,4,103,56,54,52,252,184,1,248,22,84,199,248,22,93,199,248,22,58, +199,248,22,94,199,21,98,2,150,9,95,73,100,101,102,105,110,101,45,115,116, +114,117,99,116,252,185,1,64,98,97,115,101,252,186,1,94,65,102,105,101,108, +100,252,187,1,2,141,2,252,178,1,2,252,179,1,2,141,20,15,159,47,36, +44,250,22,252,47,2,11,2,85,196,34,20,99,159,34,16,10,2,86,2,89, +2,91,2,93,2,95,2,102,2,104,2,158,2,161,2,99,16,3,18,98,2, +106,8,160,38,37,36,16,4,8,159,11,2,252,25,1,3,1,7,101,110,118, +52,51,54,52,252,188,1,18,158,163,38,100,2,150,8,163,38,37,36,8,159, +16,12,8,162,11,3,1,4,103,56,53,55,252,189,1,3,1,4,103,56,53, +56,252,190,1,3,1,4,103,56,53,57,252,191,1,3,1,4,103,56,54,48, +252,192,1,3,1,4,103,56,54,49,252,193,1,3,1,7,101,110,118,52,51, +55,51,252,194,1,2,252,194,1,2,252,194,1,2,252,194,1,2,252,194,1, +16,12,8,161,11,2,120,2,252,186,1,2,252,187,1,2,252,178,1,2,252, +179,1,3,1,7,101,110,118,52,51,55,52,252,195,1,2,252,195,1,2,252, +195,1,2,252,195,1,2,252,195,1,158,9,8,163,158,96,10,2,252,185,1, +2,252,181,1,2,252,182,1,8,163,158,2,252,183,1,8,163,2,252,184,1, +8,163,8,163,18,16,2,96,2,141,8,165,93,8,252,31,14,16,4,8,164, +11,2,183,3,1,7,101,110,118,52,51,56,54,252,196,1,95,9,8,252,31, +14,2,100,11,16,5,93,2,73,87,95,83,159,34,93,80,159,34,8,27,35, +89,162,35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,40,50,21,94, +3,1,4,103,56,56,49,252,197,1,3,1,4,103,56,56,50,252,198,1,248, +22,58,198,248,22,93,198,83,159,34,93,80,159,34,8,26,35,89,162,35,35, +41,9,223,0,251,80,158,38,42,20,15,159,38,39,50,21,94,3,1,4,103, +56,56,48,252,199,1,3,1,4,103,56,55,57,252,200,1,248,22,58,198,248, +22,84,198,89,162,34,35,54,9,223,0,27,249,22,216,20,15,159,37,34,50, +196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27, +248,80,158,40,37,197,28,248,80,158,40,34,193,28,248,80,158,40,38,248,80, +158,41,36,194,27,248,80,158,41,37,194,28,248,80,158,41,34,193,249,80,158, +42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,39, +193,248,80,158,44,40,193,11,11,11,11,11,28,192,27,248,22,58,194,27,248, +22,84,195,27,248,22,86,196,249,80,158,41,41,200,27,249,22,67,198,197,251, +80,158,46,42,20,15,159,46,35,50,21,94,3,1,4,103,56,55,53,252,201, +1,3,1,4,103,56,55,52,252,202,1,248,22,58,197,248,22,59,197,27,28, +248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158, +41,37,198,28,248,80,158,41,34,193,249,80,158,42,43,27,248,80,158,44,36, +196,28,248,80,158,44,39,193,248,22,8,89,162,34,35,41,9,224,10,1,27, +249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,44,28,248,80,158, +38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200, +28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158, +43,38,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248,22,63, +193,21,94,9,9,248,80,158,37,45,193,11,27,248,80,158,44,37,196,28,248, +80,158,44,34,193,249,80,158,45,35,248,80,158,46,36,195,27,248,80,158,47, +37,196,28,248,80,158,47,39,193,248,80,158,47,40,193,11,11,11,11,28,192, +27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197,27, +248,22,95,198,27,249,22,216,20,15,159,45,36,50,248,80,158,46,46,249,80, +158,48,47,20,15,159,48,37,50,201,27,28,248,80,158,45,39,194,248,80,158, +45,40,194,11,28,192,249,80,158,46,41,205,27,252,22,67,202,205,204,203,200, +250,80,158,50,48,89,162,34,34,48,9,224,16,3,253,80,158,41,42,20,15, +159,41,38,50,21,96,3,1,4,103,56,56,56,252,203,1,3,1,4,103,56, +56,53,252,204,1,3,1,4,103,56,56,55,252,205,1,3,1,4,103,56,56, +54,252,206,1,250,22,2,80,159,44,8,26,35,248,22,95,202,248,22,93,202, +252,22,2,80,159,46,8,27,35,248,22,95,204,248,22,95,204,248,22,84,204, +248,22,84,204,248,22,96,199,248,22,58,199,21,95,2,150,94,94,63,116,109, +112,252,207,1,2,252,39,1,2,141,95,2,150,93,94,64,115,119,97,112,252, +208,1,96,2,252,14,1,9,96,2,150,93,94,2,237,2,252,207,1,95,2, +252,134,1,2,252,207,1,64,110,97,109,101,252,209,1,95,2,252,134,1,2, +252,209,1,2,237,2,141,96,72,100,121,110,97,109,105,99,45,119,105,110,100, +252,210,1,2,252,208,1,97,2,252,14,1,9,2,252,178,1,2,252,179,1, +2,141,2,252,208,1,20,15,159,50,41,50,248,80,158,45,49,20,15,159,45, +42,50,250,22,252,47,2,11,2,85,197,34,20,99,159,36,16,16,2,86,2, +89,2,91,2,93,2,97,2,102,2,104,2,158,2,99,2,95,2,217,2,219, +2,252,93,1,2,221,2,161,2,223,16,9,18,98,2,106,8,167,38,37,36, +16,4,8,166,11,2,252,25,1,3,1,7,101,110,118,52,51,56,57,252,211, +1,18,158,162,37,100,2,150,8,170,38,37,36,8,166,16,8,8,169,11,3, +1,4,103,56,55,49,252,212,1,3,1,4,103,56,55,50,252,213,1,3,1, +4,103,56,55,51,252,214,1,3,1,7,101,110,118,52,51,57,54,252,215,1, +2,252,215,1,2,252,215,1,16,8,8,168,11,2,120,2,252,178,1,2,252, +179,1,3,1,7,101,110,118,52,51,57,55,252,216,1,2,252,216,1,2,252, +216,1,158,9,8,170,158,2,252,201,1,8,170,2,252,202,1,8,170,8,170, +18,100,2,106,8,173,38,37,36,8,166,16,12,8,172,11,3,1,4,103,56, +54,54,252,217,1,3,1,4,103,56,54,55,252,218,1,3,1,4,103,56,54, +56,252,219,1,3,1,4,103,56,54,57,252,220,1,3,1,4,103,56,55,48, +252,221,1,3,1,7,101,110,118,52,52,49,54,252,222,1,2,252,222,1,2, +252,222,1,2,252,222,1,2,252,222,1,16,12,8,171,11,2,120,2,252,209, +1,2,252,39,1,2,252,178,1,2,252,179,1,3,1,7,101,110,118,52,52, +49,55,252,223,1,2,252,223,1,2,252,223,1,2,252,223,1,2,252,223,1, +18,16,2,158,2,239,8,173,8,174,18,158,95,102,2,150,8,177,38,37,36, +8,166,8,172,8,171,16,4,8,176,11,3,1,4,103,56,55,56,252,224,1, +3,1,7,101,110,118,52,52,51,52,252,225,1,16,4,8,175,11,2,252,207, +1,3,1,7,101,110,118,52,52,51,53,252,226,1,158,2,252,203,1,8,177, +158,96,10,2,150,93,94,2,252,208,1,159,2,252,14,1,9,2,252,204,1, +96,2,252,210,1,2,252,208,1,160,2,252,14,1,9,2,252,205,1,2,252, +206,1,2,252,208,1,8,177,8,177,18,158,95,10,2,252,199,1,2,252,200, +1,8,177,18,158,97,10,2,150,93,94,2,237,2,252,197,1,95,2,252,134, +1,2,252,197,1,2,252,198,1,95,2,252,134,1,2,252,198,1,2,237,8, +177,18,16,2,96,2,141,8,179,93,8,252,67,14,16,4,8,178,11,2,183, +3,1,7,101,110,118,52,52,51,57,252,227,1,95,9,8,252,67,14,2,100, +18,16,2,158,94,98,2,252,207,1,8,183,93,8,252,59,14,16,4,8,182, +11,3,1,8,119,115,116,109,112,56,55,54,252,228,1,3,1,7,101,110,118, +52,52,50,57,252,229,1,16,4,8,181,11,3,1,4,103,56,55,55,252,230, +1,3,1,7,101,110,118,52,52,52,54,252,231,1,16,4,8,180,11,2,252, +5,1,3,1,7,101,110,118,52,52,52,55,252,232,1,158,2,141,8,183,8, +183,95,9,8,252,59,14,2,224,11,16,5,93,2,66,89,162,34,35,49,9, +223,0,27,249,22,216,20,15,159,37,34,42,196,27,28,248,80,158,37,34,194, 249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80, 158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43,37, -196,28,248,80,158,43,34,193,249,80,158,44,38,27,248,80,158,46,36,196,28, -248,80,158,46,39,193,248,22,65,248,80,158,47,40,194,11,27,248,80,158,46, -37,196,28,248,80,158,46,34,193,249,80,158,47,35,248,80,158,48,36,195,27, -248,80,158,49,37,196,28,248,80,158,49,39,193,248,80,158,49,40,193,11,11, -11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27, -248,22,96,197,27,248,22,95,198,249,80,158,43,41,202,27,251,22,67,199,202, -200,201,250,80,158,47,42,89,162,34,34,43,9,224,13,3,253,80,158,41,43, -20,15,159,41,35,44,21,96,3,1,4,103,56,54,51,252,178,1,3,1,4, -103,56,54,50,252,179,1,3,1,4,103,56,54,53,252,180,1,3,1,4,103, -56,54,52,252,181,1,248,22,84,199,248,22,94,199,248,22,93,199,248,22,58, -199,21,98,2,144,9,95,73,100,101,102,105,110,101,45,115,116,114,117,99,116, -252,182,1,64,98,97,115,101,252,183,1,94,65,102,105,101,108,100,252,184,1, -2,135,2,252,175,1,2,252,176,1,2,135,20,15,159,47,36,44,250,22,252, -47,2,11,2,79,196,34,20,99,159,34,16,10,2,80,2,83,2,85,2,87, -2,89,2,96,2,98,2,152,2,155,2,93,16,3,18,98,2,100,8,162,38, -37,36,16,4,8,161,11,2,252,19,1,3,1,7,101,110,118,52,51,54,50, -252,185,1,18,158,163,38,100,2,144,8,165,38,37,36,8,161,16,12,8,164, -11,3,1,4,103,56,53,55,252,186,1,3,1,4,103,56,53,56,252,187,1, -3,1,4,103,56,53,57,252,188,1,3,1,4,103,56,54,48,252,189,1,3, -1,4,103,56,54,49,252,190,1,3,1,7,101,110,118,52,51,55,49,252,191, -1,2,252,191,1,2,252,191,1,2,252,191,1,2,252,191,1,16,12,8,163, -11,2,114,2,252,183,1,2,252,184,1,2,252,175,1,2,252,176,1,3,1, -7,101,110,118,52,51,55,50,252,192,1,2,252,192,1,2,252,192,1,2,252, -192,1,2,252,192,1,158,9,8,165,158,96,10,2,252,182,1,2,252,178,1, -2,252,179,1,8,165,158,2,252,180,1,8,165,2,252,181,1,8,165,8,165, -18,16,2,96,2,135,8,167,93,8,252,27,14,16,4,8,166,11,2,177,3, -1,7,101,110,118,52,51,56,52,252,193,1,95,9,8,252,27,14,2,94,11, -16,5,93,2,60,87,95,83,159,34,93,80,159,34,8,27,35,89,162,35,35, -41,9,223,0,251,80,158,38,42,20,15,159,38,40,50,21,94,3,1,4,103, -56,56,49,252,194,1,3,1,4,103,56,56,50,252,195,1,248,22,58,198,248, -22,93,198,83,159,34,93,80,159,34,8,26,35,89,162,35,35,41,9,223,0, -251,80,158,38,42,20,15,159,38,39,50,21,94,3,1,4,103,56,56,48,252, -196,1,3,1,4,103,56,55,57,252,197,1,248,22,58,198,248,22,84,198,89, -162,34,35,54,9,223,0,27,249,22,216,20,15,159,37,34,50,196,27,28,248, -80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40, -37,197,28,248,80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36,194, -27,248,80,158,41,37,194,28,248,80,158,41,34,193,249,80,158,42,35,248,80, -158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,39,193,248,80,158, -44,40,193,11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27, -248,22,86,196,249,80,158,41,41,200,27,249,22,67,198,197,251,80,158,46,42, -20,15,159,46,35,50,21,94,3,1,4,103,56,55,53,252,198,1,3,1,4, -103,56,55,52,252,199,1,248,22,58,197,248,22,59,197,27,28,248,80,158,38, -34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37,198,28, -248,80,158,41,34,193,249,80,158,42,43,27,248,80,158,44,36,196,28,248,80, -158,44,39,193,248,22,8,89,162,34,35,41,9,224,10,1,27,249,22,2,89, -162,34,35,46,9,224,4,5,249,80,158,37,44,28,248,80,158,38,34,197,249, -80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158, -41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,38,248,80, -158,44,37,196,11,11,194,248,80,158,39,40,196,28,248,22,63,193,21,94,9, -9,248,80,158,37,45,193,11,27,248,80,158,44,37,196,28,248,80,158,44,34, -193,249,80,158,45,35,248,80,158,46,36,195,27,248,80,158,47,37,196,28,248, -80,158,47,39,193,248,80,158,47,40,193,11,11,11,11,28,192,27,248,22,58, -194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,248,22,95,198, -27,249,22,216,20,15,159,45,36,50,248,80,158,46,46,249,80,158,48,47,20, -15,159,48,37,50,201,27,28,248,80,158,45,39,194,248,80,158,45,40,194,11, -28,192,249,80,158,46,41,205,27,252,22,67,205,202,200,204,203,250,80,158,50, -48,89,162,34,34,48,9,224,16,3,253,80,158,41,42,20,15,159,41,38,50, -21,96,3,1,4,103,56,56,56,252,200,1,3,1,4,103,56,56,53,252,201, -1,3,1,4,103,56,56,55,252,202,1,3,1,4,103,56,56,54,252,203,1, -250,22,2,80,159,44,8,26,35,248,22,93,202,248,22,96,202,252,22,2,80, -159,46,8,27,35,248,22,93,204,248,22,93,204,248,22,58,204,248,22,58,204, -248,22,95,199,248,22,84,199,21,95,2,144,94,94,63,116,109,112,252,204,1, -2,252,33,1,2,135,95,2,144,93,94,64,115,119,97,112,252,205,1,96,2, -252,8,1,9,96,2,144,93,94,2,231,2,252,204,1,95,2,252,131,1,2, -252,204,1,64,110,97,109,101,252,206,1,95,2,252,131,1,2,252,206,1,2, -231,2,135,96,72,100,121,110,97,109,105,99,45,119,105,110,100,252,207,1,2, -252,205,1,97,2,252,8,1,9,2,252,175,1,2,252,176,1,2,135,2,252, -205,1,20,15,159,50,41,50,248,80,158,45,49,20,15,159,45,42,50,250,22, -252,47,2,11,2,79,197,34,20,99,159,36,16,16,2,80,2,83,2,85,2, -87,2,91,2,96,2,98,2,152,2,93,2,89,2,211,2,213,2,252,90,1, -2,215,2,155,2,217,16,9,18,98,2,100,8,169,38,37,36,16,4,8,168, -11,2,252,19,1,3,1,7,101,110,118,52,51,56,55,252,208,1,18,158,162, -37,100,2,144,8,172,38,37,36,8,168,16,8,8,171,11,3,1,4,103,56, -55,49,252,209,1,3,1,4,103,56,55,50,252,210,1,3,1,4,103,56,55, -51,252,211,1,3,1,7,101,110,118,52,51,57,52,252,212,1,2,252,212,1, -2,252,212,1,16,8,8,170,11,2,114,2,252,175,1,2,252,176,1,3,1, -7,101,110,118,52,51,57,53,252,213,1,2,252,213,1,2,252,213,1,158,9, -8,172,158,2,252,198,1,8,172,2,252,199,1,8,172,8,172,18,100,2,100, -8,175,38,37,36,8,168,16,12,8,174,11,3,1,4,103,56,54,54,252,214, -1,3,1,4,103,56,54,55,252,215,1,3,1,4,103,56,54,56,252,216,1, -3,1,4,103,56,54,57,252,217,1,3,1,4,103,56,55,48,252,218,1,3, -1,7,101,110,118,52,52,49,52,252,219,1,2,252,219,1,2,252,219,1,2, -252,219,1,2,252,219,1,16,12,8,173,11,2,114,2,252,206,1,2,252,33, -1,2,252,175,1,2,252,176,1,3,1,7,101,110,118,52,52,49,53,252,220, -1,2,252,220,1,2,252,220,1,2,252,220,1,2,252,220,1,18,16,2,158, -2,233,8,175,8,176,18,158,95,102,2,144,8,179,38,37,36,8,168,8,174, -8,173,16,4,8,178,11,3,1,4,103,56,55,56,252,221,1,3,1,7,101, -110,118,52,52,51,50,252,222,1,16,4,8,177,11,2,252,204,1,3,1,7, -101,110,118,52,52,51,51,252,223,1,158,2,252,200,1,8,179,158,96,10,2, -144,93,94,2,252,205,1,159,2,252,8,1,9,2,252,201,1,96,2,252,207, -1,2,252,205,1,160,2,252,8,1,9,2,252,202,1,2,252,203,1,2,252, -205,1,8,179,8,179,18,158,95,10,2,252,196,1,2,252,197,1,8,179,18, -158,97,10,2,144,93,94,2,231,2,252,194,1,95,2,252,131,1,2,252,194, -1,2,252,195,1,95,2,252,131,1,2,252,195,1,2,231,8,179,18,16,2, -96,2,135,8,181,93,8,252,63,14,16,4,8,180,11,2,177,3,1,7,101, -110,118,52,52,51,55,252,224,1,95,9,8,252,63,14,2,94,18,16,2,158, -94,98,2,252,204,1,8,185,93,8,252,55,14,16,4,8,184,11,3,1,8, -119,115,116,109,112,56,55,54,252,225,1,3,1,7,101,110,118,52,52,50,55, -252,226,1,16,4,8,183,11,3,1,4,103,56,55,55,252,227,1,3,1,7, -101,110,118,52,52,52,52,252,228,1,16,4,8,182,11,2,252,255,0,3,1, -7,101,110,118,52,52,52,53,252,229,1,158,2,135,8,185,8,185,95,9,8, -252,55,14,2,218,11,16,5,93,2,68,89,162,34,35,49,9,223,0,27,249, -22,216,20,15,159,37,34,42,196,27,28,248,80,158,37,34,194,249,80,158,38, -35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193, -249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43,37,196,28,248,80, -158,43,38,193,248,80,158,43,39,193,11,11,11,28,192,27,248,22,58,194,27, -248,22,84,195,27,248,22,86,196,249,80,158,41,40,200,27,249,22,67,197,198, -251,80,158,46,41,20,15,159,46,35,42,21,94,3,1,4,103,56,57,51,252, -230,1,3,1,4,103,56,57,50,252,231,1,248,22,59,197,248,22,58,197,250, -22,252,47,2,11,2,79,196,34,20,99,159,34,16,8,2,80,2,83,2,85, -2,87,2,96,2,98,2,152,2,93,16,2,18,98,2,100,8,187,38,37,36, -16,4,8,186,11,2,252,19,1,3,1,7,101,110,118,52,52,52,57,252,232, -1,18,158,96,100,2,252,129,1,8,190,38,37,36,8,186,16,8,8,189,11, -3,1,4,103,56,56,57,252,233,1,3,1,4,103,56,57,48,252,234,1,3, -1,4,103,56,57,49,252,235,1,3,1,7,101,110,118,52,52,53,53,252,236, -1,2,252,236,1,2,252,236,1,16,8,8,188,11,2,114,2,252,17,1,2, -252,18,1,3,1,7,101,110,118,52,52,53,54,252,237,1,2,252,237,1,2, -252,237,1,158,94,10,94,96,2,134,63,99,112,117,252,238,1,64,117,115,101, -114,252,239,1,62,103,99,252,240,1,95,70,116,105,109,101,45,97,112,112,108, -121,252,241,1,160,2,252,8,1,9,2,252,230,1,2,252,231,1,64,110,117, -108,108,252,242,1,8,190,158,98,10,66,112,114,105,110,116,102,252,243,1,6, -40,40,99,112,117,32,116,105,109,101,58,32,126,115,32,114,101,97,108,32,116, -105,109,101,58,32,126,115,32,103,99,32,116,105,109,101,58,32,126,115,126,110, -252,244,1,2,252,238,1,2,252,239,1,2,252,240,1,8,190,158,96,10,65, -97,112,112,108,121,252,245,1,66,118,97,108,117,101,115,252,246,1,2,134,8, -190,8,190,11,104,83,159,34,97,80,159,34,34,35,80,159,34,35,35,80,159, -34,36,35,80,159,34,37,35,80,159,34,38,35,27,247,22,252,122,2,87,94, -28,192,28,248,22,252,121,2,193,12,250,22,252,48,2,2,252,182,1,6,15, -15,105,110,115,112,101,99,116,111,114,32,111,114,32,35,102,252,247,1,195,12, -91,159,39,11,90,161,39,34,11,254,22,252,99,2,2,104,11,35,34,11,9, -204,252,22,7,197,198,199,250,22,252,101,2,203,34,61,112,252,248,1,250,22, -252,102,2,204,34,2,252,248,1,83,159,34,93,80,159,34,39,35,89,162,34, -35,41,2,14,223,0,87,94,28,248,80,158,35,36,194,12,250,22,252,48,2, -2,14,6,7,7,112,114,111,109,105,115,101,252,249,1,196,27,248,80,158,36, -37,195,28,248,22,0,193,27,249,22,6,195,22,65,87,94,28,248,22,0,248, -80,158,38,37,197,249,80,158,38,38,197,194,12,249,22,1,22,7,248,80,158, -39,37,198,249,22,1,22,7,194,83,159,34,93,80,159,34,40,35,89,162,34, -34,38,2,16,223,0,248,80,158,35,41,249,22,25,11,80,158,37,42,83,159, -34,93,80,159,34,43,35,89,162,34,36,42,2,23,223,0,87,95,28,248,22, -252,231,2,194,12,252,22,252,48,2,2,23,6,16,16,112,97,114,97,109,101, -116,101,114,105,122,97,116,105,111,110,252,250,1,34,198,199,28,28,248,22,0, -195,249,22,40,196,34,11,12,252,22,252,48,2,2,23,6,19,19,112,114,111, -99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41,252,251,1,35,198, -199,20,14,159,80,158,34,42,193,247,194,83,159,34,97,80,159,34,44,35,80, -159,34,45,35,80,159,34,46,35,80,159,34,47,35,80,159,34,48,35,252,22, -252,99,2,2,103,11,35,34,11,83,159,34,97,80,159,34,49,35,80,159,34, -50,35,80,159,34,51,35,80,159,34,52,35,80,159,34,53,35,27,247,22,252, -122,2,87,94,28,192,28,248,22,252,17,2,248,22,252,121,2,194,250,22,252, -48,2,2,252,182,1,2,252,247,1,195,12,12,91,159,39,11,90,161,39,34, -11,254,22,252,99,2,2,103,11,35,34,11,9,204,252,22,7,197,198,199,250, -22,252,101,2,203,34,64,99,101,108,108,252,252,1,250,22,252,102,2,204,34, -2,252,252,1,83,159,34,93,80,159,34,54,35,89,162,34,34,38,2,45,223, -0,248,80,158,35,45,249,22,25,11,80,158,37,55,83,159,34,93,80,159,34, -56,35,89,162,38,36,42,2,49,223,0,87,95,28,248,80,158,35,46,194,12, -252,22,252,48,2,2,49,6,22,22,98,114,101,97,107,32,112,97,114,97,109, -101,116,101,114,105,122,97,116,105,111,110,252,253,1,34,198,199,28,28,248,22, -0,195,249,22,40,196,34,11,12,252,22,252,48,2,2,23,6,19,19,112,114, -111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41,252,254,1,35, -198,199,83,158,38,20,94,94,20,14,159,80,158,34,55,249,80,158,36,47,195, -34,87,94,247,80,158,34,57,247,194,247,80,158,34,57,83,159,34,93,80,159, -34,58,35,89,162,34,37,42,2,53,223,0,28,248,22,63,196,248,22,252,195, -2,194,28,248,248,22,83,197,194,83,158,38,20,94,94,248,248,22,85,197,194, -20,14,159,80,158,34,55,194,247,80,158,34,57,250,80,158,37,58,196,197,248, -22,59,199,83,159,34,93,80,159,34,59,35,89,162,34,37,42,2,55,223,0, -28,248,22,63,196,248,22,252,195,2,194,28,248,248,22,83,197,194,20,14,159, -80,158,34,55,194,87,94,247,80,158,34,57,248,248,22,85,197,194,250,80,158, -37,59,196,197,248,22,59,199,83,159,34,93,80,159,34,8,26,35,248,22,252, -233,2,11,83,159,34,93,80,159,34,8,27,35,32,252,255,1,89,162,34,35, -37,2,59,222,28,248,22,16,193,12,249,22,252,45,2,2,65,6,37,37,101, -120,99,101,112,116,105,111,110,32,104,97,110,100,108,101,114,32,117,115,101,100, -32,111,117,116,32,111,102,32,99,111,110,116,101,120,116,252,0,2,96,68,35, -37,107,101,114,110,101,108,252,1,2,2,102,2,101,2,18,96,2,252,1,2, -2,81,2,106,2,105,0}; - EVAL_ONE_SIZED_STR((char *)expr, 17499); +196,28,248,80,158,43,38,193,248,80,158,43,39,193,11,11,11,28,192,27,248, +22,58,194,27,248,22,84,195,27,248,22,86,196,249,80,158,41,40,200,27,249, +22,67,197,198,251,80,158,46,41,20,15,159,46,35,42,21,94,3,1,4,103, +56,57,51,252,233,1,3,1,4,103,56,57,50,252,234,1,248,22,59,197,248, +22,58,197,250,22,252,47,2,11,2,85,196,34,20,99,159,34,16,8,2,86, +2,89,2,91,2,93,2,102,2,104,2,158,2,99,16,2,18,98,2,106,8, +185,38,37,36,16,4,8,184,11,2,252,25,1,3,1,7,101,110,118,52,52, +53,49,252,235,1,18,158,96,100,2,252,132,1,8,188,38,37,36,8,184,16, +8,8,187,11,3,1,4,103,56,56,57,252,236,1,3,1,4,103,56,57,48, +252,237,1,3,1,4,103,56,57,49,252,238,1,3,1,7,101,110,118,52,52, +53,55,252,239,1,2,252,239,1,2,252,239,1,16,8,8,186,11,2,120,2, +252,23,1,2,252,24,1,3,1,7,101,110,118,52,52,53,56,252,240,1,2, +252,240,1,2,252,240,1,158,94,10,94,96,2,140,63,99,112,117,252,241,1, +64,117,115,101,114,252,242,1,62,103,99,252,243,1,95,70,116,105,109,101,45, +97,112,112,108,121,252,244,1,160,2,252,14,1,9,2,252,233,1,2,252,234, +1,64,110,117,108,108,252,245,1,8,188,158,98,10,66,112,114,105,110,116,102, +252,246,1,6,40,40,99,112,117,32,116,105,109,101,58,32,126,115,32,114,101, +97,108,32,116,105,109,101,58,32,126,115,32,103,99,32,116,105,109,101,58,32, +126,115,126,110,252,247,1,2,252,241,1,2,252,242,1,2,252,243,1,8,188, +158,96,10,65,97,112,112,108,121,252,248,1,66,118,97,108,117,101,115,252,249, +1,2,140,8,188,8,188,11,106,83,159,34,97,80,159,34,34,35,80,159,34, +35,35,80,159,34,36,35,80,159,34,37,35,80,159,34,38,35,27,247,22,252, +125,2,87,94,28,192,28,248,22,252,124,2,193,12,250,22,252,48,2,2,252, +185,1,6,15,15,105,110,115,112,101,99,116,111,114,32,111,114,32,35,102,252, +250,1,195,12,91,159,39,11,90,161,39,34,11,254,22,252,102,2,2,109,11, +35,34,11,9,204,252,22,7,197,198,199,250,22,252,104,2,203,34,61,112,252, +251,1,250,22,252,105,2,204,34,2,252,251,1,83,159,34,93,80,159,34,39, +35,89,162,34,35,41,2,14,223,0,87,94,28,248,80,158,35,36,194,12,250, +22,252,48,2,2,14,6,7,7,112,114,111,109,105,115,101,252,252,1,196,27, +248,80,158,36,37,195,28,248,22,0,193,27,249,22,6,195,22,65,87,94,28, +248,22,0,248,80,158,38,37,197,249,80,158,38,38,197,194,12,249,22,1,22, +7,248,80,158,39,37,198,249,22,1,22,7,194,83,159,34,93,80,159,34,40, +35,89,162,34,34,38,2,16,223,0,248,80,158,35,41,249,22,25,11,80,158, +37,42,83,159,34,93,80,159,34,43,35,89,162,34,36,42,2,23,223,0,87, +95,28,248,22,252,233,2,194,12,252,22,252,48,2,2,23,6,16,16,112,97, +114,97,109,101,116,101,114,105,122,97,116,105,111,110,252,253,1,34,198,199,28, +28,248,22,0,195,249,22,40,196,34,11,12,252,22,252,48,2,2,23,6,19, +19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41,252, +254,1,35,198,199,20,14,159,80,158,34,42,193,247,194,83,159,34,97,80,159, +34,44,35,80,159,34,45,35,80,159,34,46,35,80,159,34,47,35,80,159,34, +48,35,252,22,252,102,2,2,110,11,35,34,11,83,159,34,97,80,159,34,49, +35,80,159,34,50,35,80,159,34,51,35,80,159,34,52,35,80,159,34,53,35, +27,247,22,252,125,2,87,94,28,192,28,248,22,252,17,2,248,22,252,124,2, +194,250,22,252,48,2,2,252,185,1,2,252,250,1,195,12,12,91,159,39,11, +90,161,39,34,11,254,22,252,102,2,2,110,11,35,34,11,9,204,252,22,7, +197,198,199,250,22,252,104,2,203,34,64,99,101,108,108,252,255,1,250,22,252, +105,2,204,34,2,252,255,1,83,159,34,93,80,159,34,54,35,89,162,34,34, +38,2,45,223,0,248,80,158,35,45,249,22,25,11,80,158,37,55,83,159,34, +93,80,159,34,56,35,89,162,38,36,42,2,49,223,0,87,95,28,248,80,158, +35,46,194,12,252,22,252,48,2,2,49,6,22,22,98,114,101,97,107,32,112, +97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,252,0,2,34,198,199, +28,28,248,22,0,195,249,22,40,196,34,11,12,252,22,252,48,2,2,23,6, +19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41, +252,1,2,35,198,199,83,158,38,20,94,94,20,14,159,80,158,34,55,249,80, +158,36,47,195,34,87,94,247,80,158,34,57,247,194,247,80,158,34,57,83,159, +34,93,80,159,34,58,35,89,162,34,37,42,2,53,223,0,28,248,22,63,196, +248,22,252,197,2,194,28,248,248,22,83,197,194,83,158,38,20,94,94,248,248, +22,85,197,194,20,14,159,80,158,34,55,194,247,80,158,34,57,250,80,158,37, +58,196,197,248,22,59,199,83,159,34,93,80,159,34,59,35,89,162,34,37,42, +2,55,223,0,28,248,22,63,196,248,22,252,197,2,194,28,248,248,22,83,197, +194,20,14,159,80,158,34,55,194,87,94,247,80,158,34,57,248,248,22,85,197, +194,250,80,158,37,59,196,197,248,22,59,199,83,159,34,93,80,159,34,8,26, +35,248,22,252,235,2,11,83,159,34,93,80,159,34,8,27,35,32,252,2,2, +89,162,34,35,37,2,59,222,28,248,22,16,193,12,249,22,252,45,2,2,75, +6,37,37,101,120,99,101,112,116,105,111,110,32,104,97,110,100,108,101,114,32, +117,115,101,100,32,111,117,116,32,111,102,32,99,111,110,116,101,120,116,252,3, +2,83,159,34,93,80,159,34,8,28,35,247,22,17,83,159,34,93,80,159,34, +8,29,35,89,162,34,36,37,2,63,223,0,20,14,159,80,158,34,8,30,193, +247,194,96,68,35,37,107,101,114,110,101,108,252,4,2,2,108,2,107,2,18, +96,2,252,4,2,2,87,2,112,2,111,0}; + EVAL_ONE_SIZED_STR((char *)expr, 17483); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,252,243,1,252,151,52,159,34,20,99,159,34,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,252,245,1,252,87,52,159,34,20,99,159,34,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,66,35,37, 109,105,115,99,1,29,2,11,11,10,10,10,46,80,158,34,34,20,99,159,39, 16,47,30,3,2,2,72,112,97,116,104,45,115,116,114,105,110,103,63,4,254, @@ -3464,917 +3465,925 @@ 110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,12,254,1,30,13, 2,2,71,114,97,116,105,111,110,97,108,105,122,101,14,254,1,30,15,2,2, 1,20,114,101,97,100,45,101,118,97,108,45,112,114,105,110,116,45,108,111,111, -112,16,254,1,30,17,68,35,37,112,97,114,97,109,122,18,1,20,112,97,114, -97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,19,254,1,30, -20,2,18,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114, -105,122,97,116,105,111,110,21,254,1,30,22,2,2,67,108,111,97,100,47,99, -100,23,254,1,30,24,2,2,65,45,108,111,97,100,25,254,1,30,26,2,2, -73,108,111,97,100,45,114,101,108,97,116,105,118,101,27,254,1,30,28,2,2, -1,23,108,111,97,100,45,114,101,108,97,116,105,118,101,45,101,120,116,101,110, -115,105,111,110,29,254,1,30,30,2,2,1,27,112,97,116,104,45,108,105,115, -116,45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,31,254, -1,30,32,2,2,1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108, -101,45,112,97,116,104,33,254,1,30,34,2,2,74,45,99,104,101,99,107,45, -114,101,108,112,97,116,104,35,254,1,30,36,2,2,77,45,99,104,101,99,107, -45,99,111,108,108,101,99,116,105,111,110,37,254,1,30,38,2,2,69,45,102, -105,110,100,45,99,111,108,39,254,1,30,40,2,2,70,100,108,108,45,115,117, -102,102,105,120,41,254,1,30,42,2,2,70,95,108,111,97,100,101,114,46,115, -111,43,254,1,30,44,2,2,1,25,99,117,114,114,101,110,116,45,108,111,97, -100,47,117,115,101,45,99,111,109,112,105,108,101,100,45,254,1,30,46,2,2, -75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,47,254,1,30,48, -2,2,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,49, -254,1,30,50,2,2,67,45,114,101,58,100,105,114,51,254,1,30,52,2,2, -68,45,114,101,58,97,117,116,111,53,254,1,30,54,2,2,74,45,114,101,58, -111,107,45,114,101,108,112,97,116,104,55,254,1,30,56,2,2,1,24,45,109, -111,100,117,108,101,45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108, -101,57,254,1,30,58,2,2,71,45,112,97,116,104,45,99,97,99,104,101,59, -254,1,30,60,2,2,77,45,108,111,97,100,105,110,103,45,102,105,108,101,110, -97,109,101,61,254,1,30,62,2,2,71,45,112,114,101,118,45,114,101,108,116, -111,63,254,1,30,64,2,2,75,45,112,114,101,118,45,114,101,108,116,111,45, -100,105,114,65,254,1,30,66,2,2,1,34,109,97,107,101,45,115,116,97,110, -100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111, -108,118,101,114,67,254,1,30,68,2,2,1,29,102,105,110,100,45,108,105,98, -114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,115, -69,254,1,30,70,2,2,65,112,111,114,116,63,71,254,1,30,72,2,2,72, -115,116,114,117,99,116,58,103,117,97,114,100,73,254,1,30,74,2,2,70,109, -97,107,101,45,103,117,97,114,100,75,254,1,30,76,2,2,66,103,117,97,114, -100,63,77,254,1,30,78,2,2,69,103,117,97,114,100,45,114,101,102,79,254, -1,30,80,2,2,70,103,117,97,114,100,45,115,101,116,33,81,254,1,30,82, -2,2,69,103,117,97,114,100,45,101,118,116,83,254,1,30,84,2,2,71,99, -104,97,110,110,101,108,45,103,101,116,85,254,1,30,86,2,2,75,99,104,97, -110,110,101,108,45,116,114,121,45,103,101,116,87,254,1,30,88,2,2,71,99, -104,97,110,110,101,108,45,112,117,116,89,254,1,30,90,2,2,1,23,105,110, -116,101,114,97,99,116,105,111,110,45,101,110,118,105,114,111,110,109,101,110,116, -91,254,1,30,92,2,2,1,25,115,99,104,101,109,101,45,114,101,112,111,114, -116,45,101,110,118,105,114,111,110,109,101,110,116,93,254,1,30,94,2,2,67, -109,107,45,114,53,114,115,95,254,1,30,96,2,2,76,110,117,108,108,45,101, -110,118,105,114,111,110,109,101,110,116,97,254,1,16,0,11,11,16,22,2,37, -2,35,2,39,2,25,2,61,2,57,2,59,2,63,2,65,2,53,2,51,2, -55,2,6,2,43,2,10,2,41,2,79,2,81,2,77,2,75,2,95,2,73, -56,11,16,24,2,85,2,89,2,87,2,47,2,45,2,33,2,69,2,83,2, -91,2,27,2,29,2,23,2,49,2,67,2,12,2,97,2,31,2,8,2,4, -2,71,2,14,2,16,2,93,79,109,101,109,111,114,121,45,116,114,97,99,101, -45,108,97,109,98,100,97,98,16,24,11,11,11,11,11,11,11,11,11,11,11, -11,11,11,11,11,11,11,11,11,11,11,11,11,16,24,2,85,2,89,2,87, -2,47,2,45,2,33,2,69,2,83,2,91,2,27,2,29,2,23,2,49,2, -67,2,12,2,97,2,31,2,8,2,4,2,71,2,14,2,16,2,93,2,98, -57,58,93,16,5,93,2,98,89,162,34,35,53,9,223,0,27,249,22,216,20, -15,159,37,34,41,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80, -158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158, -41,35,248,80,158,42,36,195,27,248,80,158,43,37,196,28,248,80,158,43,38, -193,248,80,158,43,39,193,11,11,11,28,192,27,248,22,58,194,27,248,22,84, -195,27,248,22,86,196,27,249,22,216,20,15,159,42,35,41,249,22,216,203,247, -22,54,27,249,22,216,20,15,159,43,36,41,249,22,216,204,247,22,54,27,249, -22,216,20,15,159,44,37,41,249,22,216,205,247,22,54,27,252,22,67,199,201, -202,200,198,254,80,158,50,40,20,15,159,50,38,41,21,97,3,1,4,103,57, -48,54,99,3,1,4,103,57,49,50,100,3,1,4,103,57,49,49,101,3,1, -4,103,57,48,56,102,3,1,4,103,57,48,57,103,248,22,96,200,248,22,58, -200,248,22,93,200,248,22,95,200,248,22,84,200,250,22,252,47,2,11,6,10, -10,98,97,100,32,115,121,110,116,97,120,104,196,34,20,99,159,34,16,7,30, -105,65,35,37,115,116,120,106,69,115,116,120,45,112,97,105,114,63,107,11,30, -108,2,106,67,99,111,110,115,47,35,102,109,1,30,110,2,106,67,115,116,120, -45,99,97,114,111,5,30,112,2,106,67,115,116,120,45,99,100,114,113,6,30, -114,2,106,69,115,116,120,45,108,105,115,116,63,115,8,30,116,2,106,69,115, -116,120,45,62,108,105,115,116,117,4,30,118,69,35,37,115,116,120,99,97,115, -101,119,1,24,97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98, -115,116,105,116,117,116,101,120,0,16,5,18,98,64,104,101,114,101,121,40,98, -38,10,34,11,96,159,68,35,37,100,101,102,105,110,101,122,9,11,159,70,35, -37,109,101,109,116,114,97,99,101,123,9,11,159,74,35,37,115,109,97,108,108, -45,115,99,104,101,109,101,124,9,11,159,73,35,37,109,111,114,101,45,115,99, -104,101,109,101,125,9,11,16,92,2,65,2,2,2,97,2,2,2,77,2,2, -2,89,2,2,2,49,2,2,2,25,2,2,2,51,2,2,2,85,2,2,2, -61,2,2,2,57,2,2,2,53,2,2,2,23,2,2,2,31,2,2,2,95, -2,2,2,59,2,2,2,73,2,2,2,6,2,2,2,8,2,2,2,63,2, -2,2,12,2,2,2,67,2,2,2,79,2,2,2,98,2,2,2,35,2,2, -2,14,2,2,2,39,2,2,2,29,2,2,2,16,2,2,2,10,2,2,2, -47,2,2,2,37,2,2,2,27,2,2,2,45,2,2,2,91,2,2,2,41, -2,2,2,75,2,2,2,87,2,2,2,43,2,2,2,4,2,2,2,33,2, -2,2,93,2,2,2,81,2,2,2,55,2,2,2,83,2,2,2,69,2,2, -2,71,2,2,98,37,10,35,11,94,159,76,35,37,115,116,120,99,97,115,101, -45,115,99,104,101,109,101,126,9,11,159,2,106,9,11,16,0,96,36,8,254, -1,11,16,0,16,4,35,11,61,120,127,3,1,7,101,110,118,52,52,57,54, -128,18,100,2,121,43,38,37,36,35,16,8,42,11,3,1,4,103,56,57,52, -129,3,1,4,103,56,57,53,130,3,1,4,103,56,57,54,131,3,1,7,101, -110,118,52,53,48,50,132,2,132,2,132,16,8,41,11,61,95,133,64,97,114, -103,115,134,64,98,111,100,121,135,3,1,7,101,110,118,52,53,48,51,136,2, -136,2,136,18,16,2,158,2,121,43,44,18,44,18,158,95,106,63,108,101,116, -137,51,38,37,36,35,42,41,16,4,50,11,3,1,4,103,57,48,49,138,3, -1,7,101,110,118,52,53,49,57,139,16,4,49,11,68,99,111,110,116,109,97, -114,107,140,3,1,7,101,110,118,52,53,50,48,141,16,4,48,11,3,1,4, -103,57,48,51,142,3,1,7,101,110,118,52,53,51,49,143,16,4,47,11,64, -102,117,110,99,144,3,1,7,101,110,118,52,53,51,50,145,16,4,46,11,3, -1,4,103,57,48,53,146,3,1,7,101,110,118,52,53,52,51,147,16,4,45, -11,67,110,101,119,109,97,114,107,148,3,1,7,101,110,118,52,53,52,52,149, -158,94,10,94,2,99,11,51,158,97,10,2,137,93,94,2,100,95,66,108,97, -109,98,100,97,150,2,101,95,2,137,93,94,2,102,94,1,31,117,110,105,111, -110,101,100,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103, -45,118,97,108,117,101,151,2,99,160,1,22,119,105,116,104,45,99,111,110,116, -105,110,117,97,116,105,111,110,45,109,97,114,107,152,1,30,109,101,109,111,114, -121,45,116,114,97,99,101,45,99,111,110,116,105,110,117,97,116,105,111,110,45, -109,97,114,107,153,2,102,2,103,95,64,115,101,116,33,154,2,99,94,1,30, -110,101,119,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103, -45,102,117,110,99,116,105,111,110,155,2,100,2,100,51,51,11,139,83,159,34, -93,80,159,34,8,51,35,89,162,8,64,35,44,64,108,111,111,112,156,223,0, -28,248,22,63,194,9,27,248,22,58,195,27,28,248,22,252,56,3,194,193,28, -248,22,252,55,3,194,249,22,252,57,3,195,250,80,158,41,48,248,22,252,70, -3,69,101,120,101,99,45,102,105,108,101,157,11,10,250,80,158,39,48,248,22, -252,70,3,2,157,196,10,28,192,249,22,57,248,22,252,59,3,249,22,252,57, -3,197,247,22,252,71,3,248,80,159,39,8,51,35,248,22,59,199,248,80,159, -37,8,51,35,248,22,59,197,83,159,34,93,80,159,34,8,50,35,89,162,34, -35,47,67,103,101,116,45,100,105,114,158,223,0,27,28,194,28,249,22,252,19, -2,196,80,158,37,8,29,80,158,35,8,30,27,248,22,252,220,1,248,22,50, -197,28,249,22,252,82,3,33,8,35,114,120,35,34,94,44,34,159,194,91,159, -37,11,90,161,37,34,11,248,22,252,53,3,248,22,252,42,3,250,22,252,204, -1,200,35,248,22,252,198,1,201,87,95,83,160,36,11,80,158,39,8,29,198, -83,160,36,11,80,158,39,8,30,192,192,11,11,28,192,192,27,247,22,252,97, -1,28,192,192,247,22,252,71,3,83,159,34,93,80,159,34,8,49,35,89,162, -34,35,43,9,223,0,87,94,28,27,248,22,252,34,3,195,28,192,192,28,248, -22,252,143,1,195,27,248,22,252,54,3,196,28,192,192,248,22,252,55,3,196, -11,12,250,22,252,48,2,2,47,6,25,25,112,97,116,104,32,111,114,32,118, -97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,160,196,28,248,22, -252,54,3,194,12,248,22,252,195,2,249,22,252,139,2,248,22,252,172,1,250, -22,252,191,1,6,29,29,126,97,58,32,105,110,118,97,108,105,100,32,114,101, -108,97,116,105,118,101,32,112,97,116,104,58,32,126,115,161,2,47,200,247,22, -21,83,159,34,93,80,159,34,8,48,35,89,162,34,36,42,68,119,105,116,104, -45,100,105,114,162,223,0,20,14,159,80,158,34,41,250,80,158,37,42,249,22, -25,11,80,158,39,41,22,252,97,1,28,248,22,252,34,3,197,196,247,22,252, -71,3,247,194,83,159,34,93,80,159,34,8,47,35,89,162,8,36,37,38,66, -103,101,116,45,115,111,163,223,0,89,162,34,35,46,9,226,0,1,3,2,252, -22,252,50,3,199,201,6,6,6,110,97,116,105,118,101,164,247,22,252,227,1, -28,198,249,80,159,44,36,35,199,80,158,44,52,197,83,159,34,93,80,159,34, -34,35,32,165,89,162,34,35,38,2,4,222,27,248,22,252,34,3,194,28,192, -192,28,248,22,252,143,1,194,27,248,22,252,54,3,195,28,192,192,248,22,252, -55,3,195,11,83,159,34,93,80,159,34,35,35,33,18,35,114,120,35,34,40, -91,46,93,91,94,46,93,42,124,41,36,34,166,83,159,34,93,80,159,34,36, -35,89,162,34,36,48,2,8,223,0,87,95,28,28,248,22,252,35,3,194,10, -27,248,22,252,34,3,195,28,192,192,28,248,22,252,143,1,195,27,248,22,252, -54,3,196,28,192,192,248,22,252,55,3,196,11,12,252,22,252,48,2,2,8, -6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121,32,115,121,115,116, -101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114, -105,110,103,167,34,198,199,28,28,248,22,252,143,1,195,10,248,22,252,195,1, -195,12,252,22,252,48,2,2,8,6,21,21,115,116,114,105,110,103,32,111,114, -32,98,121,116,101,32,115,116,114,105,110,103,168,35,198,199,91,159,37,11,90, -161,37,34,11,248,22,252,53,3,197,87,94,28,192,12,250,22,252,49,2,2, -8,6,36,36,99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102, -105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,169,199, -27,249,22,252,43,3,250,22,252,88,3,2,166,248,22,252,40,3,200,28,248, -22,252,143,1,204,249,22,252,219,1,205,8,63,203,28,248,22,252,35,3,200, -248,22,252,36,3,200,247,22,252,37,3,28,248,22,252,34,3,194,249,22,252, -50,3,195,194,192,83,159,34,93,80,159,34,37,35,249,22,252,145,1,7,92, -7,92,83,159,34,93,80,159,34,38,35,89,162,34,35,47,2,12,223,0,87, -94,28,28,248,22,252,35,3,194,10,27,248,22,252,34,3,195,28,192,192,28, -248,22,252,143,1,195,27,248,22,252,54,3,196,28,192,192,248,22,252,55,3, -196,11,12,250,22,252,48,2,76,110,111,114,109,97,108,45,112,97,116,104,45, -99,97,115,101,170,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121, -32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116, -104,32,115,116,114,105,110,103,171,196,28,28,248,22,252,35,3,194,249,22,252, -19,2,248,22,252,36,3,196,67,119,105,110,100,111,119,115,172,249,22,252,19, -2,247,22,252,226,1,2,172,27,28,248,22,252,143,1,195,194,248,22,252,216, -1,248,22,252,39,3,196,28,249,22,252,82,3,33,21,35,114,120,34,94,91, -92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,173,194,28,248,22,252, -143,1,195,248,22,252,41,3,195,194,27,248,22,252,182,1,194,249,22,252,42, -3,248,22,252,219,1,250,22,252,89,3,33,6,35,114,120,34,47,34,174,28, -249,22,252,82,3,33,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43, -91,47,92,92,93,42,36,34,175,200,198,250,22,252,89,3,33,19,35,114,120, -34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,176,201,6,2,2, -92,49,177,80,158,42,37,2,172,28,248,22,252,143,1,194,248,22,252,41,3, -194,193,83,159,34,93,80,159,34,39,35,91,159,36,11,90,161,35,35,11,32, -178,89,162,8,64,35,38,65,99,104,101,99,107,179,222,28,248,22,136,193,12, -250,22,252,48,2,2,14,6,4,4,114,101,97,108,180,195,20,12,95,35,89, -162,8,36,36,53,2,14,223,0,87,95,28,248,22,136,194,12,250,22,252,48, -2,2,14,2,180,196,28,248,22,136,195,12,250,22,252,48,2,2,14,2,180, -197,27,248,22,183,196,27,249,22,180,197,195,27,249,22,179,198,196,28,249,22, -188,198,198,28,250,22,191,196,34,195,28,248,22,139,197,34,33,3,48,46,48, -181,28,248,22,195,194,248,22,180,27,248,22,180,195,27,248,22,180,197,28,248, -22,138,194,193,27,248,22,151,195,27,248,22,151,195,28,249,22,189,195,194,248, -22,177,194,249,22,179,195,248,22,182,249,205,248,22,182,249,22,180,202,201,248, -22,182,249,22,180,203,201,28,248,22,138,194,193,27,248,22,151,195,27,248,22, -151,195,28,249,22,189,195,194,248,22,177,194,249,22,179,195,248,22,182,249,202, -248,22,182,249,22,180,202,201,248,22,182,249,22,180,203,201,33,6,43,110,97, -110,46,48,182,89,162,8,36,36,54,72,102,105,110,100,45,98,101,116,119,101, -101,110,183,223,0,28,248,22,138,194,193,27,248,22,151,195,27,248,22,151,197, -28,249,22,189,195,194,248,22,177,194,249,22,179,195,248,22,182,27,248,22,182, -249,22,180,203,200,27,248,22,182,249,22,180,203,201,28,248,22,138,194,193,27, -248,22,151,195,27,248,22,151,195,28,249,22,189,195,194,248,22,177,194,249,22, -179,195,248,22,182,249,206,248,22,182,249,22,180,202,201,248,22,182,249,22,180, -203,201,83,159,34,93,80,159,34,40,35,89,162,34,34,42,2,16,223,0,27, -247,22,54,27,89,162,34,34,38,1,25,114,101,112,108,45,101,114,114,111,114, -45,101,115,99,97,112,101,45,104,97,110,100,108,101,114,184,223,1,27,249,22, -25,11,195,28,192,247,192,249,22,252,45,2,2,184,6,19,19,117,115,101,100, -32,111,117,116,32,111,102,32,99,111,110,116,101,120,116,185,20,14,159,80,158, -36,41,250,80,158,39,42,249,22,25,11,80,158,41,41,22,252,53,2,195,248, -22,8,89,162,34,35,39,9,223,2,249,32,186,89,162,34,36,38,69,114,101, -112,108,45,108,111,111,112,187,222,87,94,248,22,8,89,162,34,35,40,9,224, -2,1,20,14,159,193,194,27,247,247,22,46,87,94,28,248,22,252,77,1,193, -248,194,12,12,83,159,45,32,188,89,162,35,35,37,9,222,249,22,3,247,22, -45,194,248,247,22,252,40,2,28,248,22,213,194,248,22,252,38,2,194,193,249, -2,186,194,195,195,194,83,159,34,93,80,159,34,43,35,32,189,89,162,34,35, -45,2,23,222,87,94,28,27,248,22,252,34,3,194,28,192,192,28,248,22,252, -143,1,194,27,248,22,252,54,3,195,28,192,192,248,22,252,55,3,195,11,12, -250,22,252,48,2,2,23,6,25,25,112,97,116,104,32,111,114,32,115,116,114, -105,110,103,32,40,115,97,110,115,32,110,117,108,41,190,195,91,159,37,11,90, -161,37,34,11,248,22,252,53,3,196,28,194,248,22,252,195,2,249,22,252,169, -2,248,22,252,172,1,249,22,252,191,1,6,36,36,108,111,97,100,47,99,100, -58,32,99,97,110,110,111,116,32,111,112,101,110,32,97,32,100,105,114,101,99, -116,111,114,121,58,32,126,115,191,201,247,22,21,28,248,22,252,34,3,193,87, -94,28,248,22,252,45,3,193,12,248,22,252,195,2,249,22,252,169,2,248,22, -252,172,1,250,22,252,191,1,6,65,65,108,111,97,100,47,99,100,58,32,100, -105,114,101,99,116,111,114,121,32,111,102,32,126,115,32,100,111,101,115,32,110, -111,116,32,101,120,105,115,116,32,40,99,117,114,114,101,110,116,32,100,105,114, -101,99,116,111,114,121,32,105,115,32,126,115,41,192,202,247,22,252,71,3,247, -22,21,27,247,22,252,71,3,250,22,37,89,162,34,34,36,9,223,4,248,22, -252,71,3,193,89,162,34,34,36,9,223,5,248,22,252,95,1,193,89,162,34, -34,36,9,223,3,248,22,252,71,3,193,248,22,252,95,1,196,83,159,34,93, -80,159,34,44,35,32,193,89,162,34,37,41,2,25,222,87,94,28,27,248,22, -252,34,3,196,28,192,192,28,248,22,252,143,1,196,27,248,22,252,54,3,197, -28,192,192,248,22,252,55,3,197,11,12,250,22,252,48,2,196,6,25,25,112, -97,116,104,32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110, -117,108,41,194,197,28,248,22,252,56,3,195,248,193,195,27,247,22,252,97,1, -248,194,28,193,249,22,252,57,3,198,195,196,83,159,34,93,80,159,34,45,35, -89,162,34,35,40,2,27,223,0,87,94,28,27,248,22,252,34,3,195,28,192, -192,28,248,22,252,143,1,195,27,248,22,252,54,3,196,28,192,192,248,22,252, -55,3,196,11,12,250,22,252,48,2,2,27,2,194,196,28,248,22,252,56,3, -194,248,22,252,95,1,194,27,247,22,252,97,1,248,22,252,95,1,28,193,249, -22,252,57,3,197,195,195,83,159,34,93,80,159,34,46,35,89,162,34,35,40, -2,29,223,0,87,94,28,27,248,22,252,34,3,195,28,192,192,28,248,22,252, -143,1,195,27,248,22,252,54,3,196,28,192,192,248,22,252,55,3,196,11,12, -250,22,252,48,2,2,29,2,194,196,28,248,22,252,56,3,194,248,22,252,75, -3,194,27,247,22,252,97,1,248,22,252,75,3,28,193,249,22,252,57,3,197, -195,195,83,159,34,93,80,159,34,47,35,27,248,22,252,77,3,248,22,252,218, -1,27,27,247,22,252,226,1,28,249,22,78,194,21,96,64,117,110,105,120,195, -64,98,101,111,115,196,65,111,115,107,105,116,197,66,109,97,99,111,115,120,198, -6,1,1,58,199,28,249,22,78,194,21,94,2,172,65,109,97,99,111,115,200, -6,1,1,59,201,12,250,22,252,191,1,6,14,14,40,91,94,126,97,93,42, -41,126,97,40,46,42,41,202,195,195,89,162,8,36,36,42,2,31,223,0,87, -95,28,28,248,22,252,195,1,194,10,248,22,252,143,1,194,12,250,22,252,48, -2,2,31,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32, -115,116,114,105,110,103,203,196,28,28,248,22,64,195,249,22,4,22,252,34,3, -196,11,12,250,22,252,48,2,2,31,6,13,13,108,105,115,116,32,111,102,32, -112,97,116,104,115,204,197,250,32,205,89,162,8,64,37,44,2,156,222,27,249, -22,252,81,3,196,197,28,192,27,248,22,84,194,27,250,2,205,198,199,248,22, -93,198,28,249,22,252,201,1,195,5,0,206,249,22,71,197,194,249,22,57,248, -22,252,42,3,196,194,28,249,22,252,201,1,197,2,206,249,22,71,195,9,249, -22,57,248,22,252,42,3,198,9,197,195,28,248,22,252,143,1,197,248,22,252, -218,1,197,196,83,159,34,93,80,159,34,48,35,83,158,37,20,93,96,2,33, -89,162,8,36,37,49,9,223,0,87,95,28,27,248,22,252,34,3,195,28,192, -192,28,248,22,252,143,1,195,27,248,22,252,54,3,196,28,192,192,248,22,252, -55,3,196,11,12,250,22,252,48,2,2,33,6,25,25,112,97,116,104,32,111, -114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,207,196, -28,28,194,28,27,248,22,252,34,3,196,28,192,192,28,248,22,252,143,1,196, -27,248,22,252,54,3,197,28,192,192,248,22,252,55,3,197,11,248,22,252,54, -3,195,11,10,12,250,22,252,48,2,2,33,6,29,29,35,102,32,111,114,32, -114,101,108,97,116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105, -110,103,208,197,28,28,248,22,252,54,3,194,91,159,37,11,90,161,37,34,11, -248,22,252,53,3,197,249,22,252,19,2,194,68,114,101,108,97,116,105,118,101, -209,11,27,248,22,252,224,1,6,4,4,80,65,84,72,210,27,28,193,27,249, -80,158,39,47,196,9,28,249,22,252,19,2,247,22,252,226,1,2,172,249,22, -57,248,22,252,42,3,5,1,46,211,194,192,9,28,248,22,63,193,11,27,248, -22,252,57,3,248,22,58,195,27,249,22,252,50,3,195,199,28,248,22,252,44, -3,193,250,32,212,89,162,8,100,37,48,70,102,111,117,110,100,45,101,120,101, -99,213,222,28,192,91,159,37,11,90,161,37,34,11,248,22,252,53,3,198,27, -28,197,27,248,22,252,58,3,200,28,249,22,252,21,2,194,201,11,28,248,22, -252,54,3,193,250,2,212,200,201,249,22,252,50,3,199,197,250,2,212,200,201, -195,11,28,192,192,27,28,248,22,252,34,3,195,27,249,22,252,50,3,197,200, -28,28,248,22,252,45,3,193,10,248,22,252,44,3,193,192,11,11,28,192,192, -28,198,11,27,248,22,252,58,3,201,28,249,22,252,21,2,194,202,11,28,248, -22,252,54,3,193,250,2,212,201,202,249,22,252,50,3,200,197,250,2,212,201, -202,195,194,201,202,195,251,32,214,89,162,8,100,38,48,2,156,222,28,248,22, -63,196,11,27,248,22,252,57,3,248,22,58,198,27,249,22,252,50,3,195,196, -28,248,22,252,44,3,193,250,2,212,198,199,195,27,248,22,59,199,28,248,22, -63,193,11,27,248,22,252,57,3,248,22,58,195,27,249,22,252,50,3,195,199, -28,248,22,252,44,3,193,250,2,212,201,202,195,251,2,214,201,202,203,248,22, -59,199,201,202,203,248,22,59,199,27,248,22,252,57,3,195,28,248,22,252,44, -3,193,250,2,212,198,199,195,11,89,162,34,36,40,9,223,0,250,80,158,37, -48,196,197,11,89,162,34,35,39,9,223,0,250,80,158,37,48,196,11,11,83, -159,34,93,80,159,34,49,35,32,215,89,162,34,36,43,2,35,222,87,94,28, -27,248,22,252,34,3,195,28,192,192,28,248,22,252,143,1,195,27,248,22,252, -54,3,196,28,192,192,248,22,252,55,3,196,11,12,250,22,252,48,2,195,2, -160,196,28,248,22,252,54,3,194,12,248,22,252,195,2,249,22,252,139,2,248, -22,252,172,1,250,22,252,191,1,2,161,199,200,247,22,21,83,159,34,93,80, -159,34,50,35,89,162,34,37,45,2,37,223,0,87,94,87,94,28,27,248,22, -252,34,3,196,28,192,192,28,248,22,252,143,1,196,27,248,22,252,54,3,197, -28,192,192,248,22,252,55,3,197,11,12,250,22,252,48,2,196,2,160,197,28, -248,22,252,54,3,195,12,248,22,252,195,2,249,22,252,139,2,248,22,252,172, -1,250,22,252,191,1,2,161,200,201,247,22,21,249,22,3,89,162,34,35,44, -9,224,2,3,87,94,28,27,248,22,252,34,3,196,28,192,192,28,248,22,252, -143,1,196,27,248,22,252,54,3,197,28,192,192,248,22,252,55,3,197,11,12, -250,22,252,48,2,195,2,160,197,28,248,22,252,54,3,195,12,248,22,252,195, -2,249,22,252,139,2,248,22,252,172,1,250,22,252,191,1,2,161,199,201,247, -22,21,197,83,159,34,93,80,159,34,51,35,32,216,89,162,34,37,44,2,39, -222,27,247,22,252,72,3,252,32,217,89,162,8,64,39,50,65,99,108,111,111, -112,218,222,28,248,22,63,197,248,22,252,195,2,249,22,252,169,2,248,22,252, -172,1,251,22,252,191,1,6,42,42,126,97,58,32,99,111,108,108,101,99,116, -105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32, -97,110,121,32,111,102,58,32,126,115,219,201,28,248,22,63,204,202,250,22,1, -22,252,50,3,205,206,200,247,22,21,27,249,22,252,50,3,248,22,58,200,197, -28,248,22,252,45,3,193,27,250,22,1,22,252,50,3,196,200,28,248,22,252, -45,3,193,192,252,2,217,199,200,201,202,248,22,59,204,252,2,217,198,199,200, -201,248,22,59,203,197,198,199,200,197,83,159,34,93,80,159,34,52,35,27,247, -22,252,226,1,28,249,22,252,19,2,194,2,172,5,4,46,100,108,108,220,28, -249,22,78,194,21,94,2,198,2,200,5,6,46,100,121,108,105,98,221,5,3, -46,115,111,222,83,159,34,93,80,159,34,53,35,249,80,159,36,36,35,248,22, -252,42,3,5,10,95,108,111,97,100,101,114,46,115,115,223,80,158,36,52,83, -159,34,93,80,159,34,54,35,249,22,252,229,2,27,89,162,34,36,8,28,1, -25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109, -112,105,108,101,100,224,223,3,87,94,28,27,248,22,252,34,3,195,28,192,192, -28,248,22,252,143,1,195,27,248,22,252,54,3,196,28,192,192,248,22,252,55, -3,196,11,12,250,22,252,48,2,2,49,6,25,25,112,97,116,104,32,111,114, -32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,225,196,91, -159,40,11,90,161,35,34,11,28,248,22,252,56,3,200,199,27,247,22,252,97, -1,28,192,249,22,252,57,3,202,194,200,90,161,37,35,11,248,22,252,53,3, -193,90,161,35,38,11,28,249,22,252,19,2,195,2,209,64,115,97,109,101,226, -193,90,161,35,39,11,247,22,252,73,3,27,89,162,34,35,43,62,122,111,227, -225,7,5,3,250,22,252,50,3,196,198,249,80,159,41,36,35,197,5,3,46, -122,111,228,27,89,162,34,35,45,9,225,8,6,4,252,22,252,50,3,198,200, -2,164,247,22,252,227,1,249,80,159,43,36,35,199,80,158,43,52,27,27,80, -158,44,53,89,162,34,35,43,9,225,10,8,0,252,22,252,50,3,198,200,2, -164,247,22,252,227,1,197,27,249,22,5,89,162,34,35,41,9,223,6,27,193, -27,250,22,252,66,3,196,11,32,229,89,162,8,44,34,34,9,222,11,28,192, -249,22,57,195,194,11,203,27,27,28,195,27,249,22,5,89,162,34,35,41,9, -223,6,27,248,194,195,27,250,22,252,66,3,196,11,32,230,89,162,8,44,34, -34,9,222,11,28,192,249,22,57,195,194,11,206,27,28,196,11,193,28,192,192, -28,193,28,196,28,249,22,192,248,22,59,196,248,22,59,199,193,11,11,11,11, -28,192,27,248,22,252,75,3,248,22,58,195,91,159,36,11,90,161,36,34,11, -248,195,248,22,48,248,22,252,217,1,248,22,252,39,3,249,80,159,55,36,35, -23,17,5,0,231,28,192,87,94,28,23,17,28,249,22,252,19,2,195,23,19, -12,248,22,252,195,2,249,22,252,136,2,248,22,252,172,1,251,22,252,191,1, -6,81,81,108,111,97,100,45,101,120,116,101,110,115,105,111,110,58,32,101,120, -112,101,99,116,101,100,32,109,111,100,117,108,101,32,100,101,99,108,97,114,97, -116,105,111,110,32,102,111,114,32,96,126,97,39,44,32,102,111,117,110,100,32, -126,97,32,116,104,114,111,117,103,104,32,108,111,97,100,101,114,58,32,126,101, -232,23,25,28,201,249,22,252,191,1,6,27,27,109,111,100,117,108,101,32,100, -101,99,108,97,114,97,116,105,111,110,32,102,111,114,32,96,126,97,39,233,203, -6,4,4,110,111,110,101,234,248,22,58,204,247,22,21,12,192,11,11,28,192, -249,80,159,47,8,48,35,203,194,27,28,196,27,249,22,5,89,162,34,35,41, -9,223,7,27,248,194,195,27,250,22,252,66,3,196,11,32,235,89,162,8,44, -34,34,9,222,11,28,192,249,22,57,195,194,11,206,27,28,196,11,193,28,192, -192,28,193,28,196,28,249,22,192,248,22,59,196,248,22,59,199,193,11,11,11, -11,28,192,249,80,159,48,8,48,35,204,89,162,34,34,39,9,224,16,2,249, -247,22,252,76,3,248,22,58,195,195,27,28,198,27,249,22,5,89,162,34,35, -41,9,223,9,27,248,194,195,27,250,22,252,66,3,196,11,32,236,89,162,8, -44,34,34,9,222,11,28,192,249,22,57,195,194,11,23,15,27,28,197,11,193, -28,192,192,28,193,28,197,28,249,22,192,248,22,59,196,248,22,59,200,193,11, -11,11,11,28,192,249,80,159,49,8,48,35,205,89,162,34,34,39,9,224,17, -2,249,247,22,252,96,1,248,22,58,195,195,249,80,159,49,8,48,35,205,89, -162,34,34,38,9,224,17,9,249,247,22,252,96,1,194,195,192,32,237,89,162, -8,36,35,38,9,222,87,94,28,28,248,22,0,193,249,22,40,194,36,11,12, -250,22,252,48,2,2,45,6,19,19,112,114,111,99,101,100,117,114,101,32,40, -97,114,105,116,121,32,50,41,238,195,192,83,159,34,93,80,159,34,55,35,89, -162,8,37,36,44,2,47,223,0,87,94,87,94,87,94,28,27,248,22,252,34, -3,195,28,192,192,28,248,22,252,143,1,195,27,248,22,252,54,3,196,28,192, -192,248,22,252,55,3,196,11,12,250,22,252,48,2,2,47,2,160,196,28,248, -22,252,54,3,194,12,248,22,252,195,2,249,22,252,139,2,248,22,252,172,1, -250,22,252,191,1,2,161,2,47,200,247,22,21,249,22,3,80,159,36,8,49, -35,196,27,247,22,252,72,3,251,32,239,89,162,8,64,38,49,2,218,222,28, -248,22,63,196,248,22,252,195,2,249,22,252,169,2,248,22,252,172,1,251,22, -252,191,1,2,219,2,47,28,248,22,63,203,201,250,22,1,22,252,50,3,204, -205,200,247,22,21,27,249,22,252,50,3,248,22,58,199,196,28,248,22,252,45, -3,193,27,250,22,1,22,252,50,3,196,199,28,248,22,252,45,3,193,192,251, -2,239,198,199,200,248,22,59,202,251,2,239,197,198,199,248,22,59,201,196,198, -199,196,83,159,34,93,80,159,34,56,35,89,162,34,35,38,2,49,223,0,249, -247,80,158,36,54,195,11,248,22,252,12,3,32,240,89,162,8,36,35,35,1, -20,100,101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100, -241,222,192,83,159,34,93,80,159,34,57,35,33,17,35,114,120,35,34,40,46, -43,63,41,47,43,40,46,42,41,34,242,83,159,34,93,80,159,34,58,35,2, -159,83,159,34,93,80,159,34,59,35,33,45,35,114,120,35,34,94,91,45,97, -45,122,65,45,90,48,45,57,95,46,32,93,43,40,47,43,91,45,97,45,122, -65,45,90,48,45,57,95,46,32,93,43,41,42,36,34,243,83,159,34,93,80, -159,34,8,26,35,248,22,116,64,119,101,97,107,244,83,159,34,93,80,159,34, -8,27,35,249,22,116,2,244,65,101,113,117,97,108,245,83,159,34,93,80,159, -34,8,28,35,247,22,54,83,159,34,93,80,158,34,8,29,11,83,159,34,93, -80,158,34,8,30,11,83,159,34,93,80,159,34,8,31,35,89,162,8,36,35, -38,2,67,223,0,91,159,36,10,90,161,35,34,10,11,90,161,35,35,10,83, -158,37,20,93,96,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108, -101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,246,89,162,8,36,35, -44,9,224,2,0,87,94,28,207,248,208,195,12,27,27,250,22,122,80,158,40, -8,26,248,22,252,99,3,247,22,252,220,2,11,28,192,192,27,247,22,116,87, -94,250,22,121,80,158,41,8,26,248,22,252,99,3,247,22,252,220,2,195,192, -250,22,121,195,198,66,97,116,116,97,99,104,247,89,162,34,37,42,9,223,1, -251,211,197,198,199,10,89,162,34,38,8,28,9,225,2,3,0,28,28,248,22, -56,196,249,22,252,19,2,248,22,58,198,66,112,108,97,110,101,116,248,11,87, -94,28,207,12,20,14,159,80,158,36,41,250,80,158,39,42,249,22,25,11,80, -158,41,41,22,252,220,2,196,90,161,35,34,10,249,22,242,21,95,63,108,105, -98,249,6,11,11,114,101,115,111,108,118,101,114,46,115,115,250,6,6,6,112, -108,97,110,101,116,251,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101, -45,110,97,109,101,45,114,101,115,111,108,118,101,114,252,252,0,12,251,211,199, -200,201,202,27,28,248,22,252,143,1,197,27,248,80,159,39,8,50,35,199,27, -250,22,122,80,158,42,8,27,249,22,57,203,198,11,28,192,192,27,248,22,252, -218,1,200,28,249,22,252,82,3,2,243,194,27,249,22,252,81,3,2,242,195, -28,192,249,32,252,253,0,89,162,8,64,36,47,2,156,222,27,249,22,252,81, -3,2,242,196,28,192,27,249,22,252,50,3,196,27,248,22,84,197,28,249,22, -252,201,1,194,5,1,46,252,254,0,2,226,28,249,22,252,201,1,194,5,2, -46,46,252,255,0,62,117,112,252,0,1,248,22,252,42,3,193,27,248,22,93, -195,27,249,22,252,81,3,2,242,195,28,192,249,2,252,253,0,249,22,252,50, -3,198,27,248,22,84,198,28,249,22,252,201,1,194,2,252,254,0,2,226,28, -249,22,252,201,1,194,2,252,255,0,2,252,0,1,248,22,252,42,3,193,248, -22,93,195,249,22,252,50,3,196,248,22,252,42,3,196,249,22,252,50,3,195, -248,22,252,42,3,197,249,22,252,50,3,199,27,248,22,84,198,28,249,22,252, -201,1,194,2,252,254,0,2,226,28,249,22,252,201,1,194,2,252,255,0,2, -252,0,1,248,22,252,42,3,193,248,22,93,195,249,22,252,50,3,197,248,22, -252,42,3,196,248,22,65,249,22,252,166,1,6,72,72,32,40,114,101,108,97, -116,105,118,101,32,115,116,114,105,110,103,32,102,111,114,109,32,109,117,115,116, -32,99,111,110,116,97,105,110,32,111,110,108,121,32,97,45,122,44,32,65,45, -90,44,32,48,45,57,44,32,45,44,32,95,44,32,46,44,32,47,44,32,97, -110,100,32,252,1,1,6,37,37,115,112,97,99,101,44,32,119,105,116,104,32, -110,111,32,108,101,97,100,105,110,103,32,111,114,32,116,114,97,105,108,105,110, -103,32,47,41,252,2,1,28,248,22,252,34,3,197,28,248,22,252,55,3,197, -196,248,22,65,6,25,25,40,97,32,112,97,116,104,32,109,117,115,116,32,98, -101,32,97,98,115,111,108,117,116,101,41,252,3,1,28,28,248,22,56,197,248, -22,252,17,2,248,22,64,198,10,11,28,249,22,252,19,2,248,22,58,199,2, -249,27,250,22,122,80,158,41,8,27,249,22,57,202,247,22,252,72,3,11,28, -192,192,27,27,248,22,70,200,28,249,22,188,194,36,248,22,65,6,5,5,109, -122,108,105,98,252,4,1,28,249,22,190,194,36,248,22,86,200,11,28,192,28, -249,22,4,32,252,5,1,89,162,34,35,36,9,222,28,248,22,252,143,1,193, -248,22,252,54,3,193,11,194,28,248,22,252,143,1,248,22,84,200,28,248,22, -252,54,3,248,22,84,200,27,27,248,22,58,195,27,248,22,59,196,27,247,22, -252,72,3,251,32,252,6,1,89,162,8,64,38,49,2,218,222,28,248,22,63, -196,248,22,252,195,2,249,22,252,169,2,248,22,252,172,1,251,22,252,191,1, -2,219,2,246,28,248,22,63,203,201,250,22,1,22,252,50,3,204,205,200,247, -22,21,27,249,22,252,50,3,248,22,58,199,196,28,248,22,252,45,3,193,27, -250,22,1,22,252,50,3,196,199,28,248,22,252,45,3,193,192,251,2,252,6, -1,198,199,200,248,22,59,202,251,2,252,6,1,197,198,199,248,22,59,201,196, -198,197,196,249,22,252,50,3,194,248,22,84,202,11,11,11,11,28,249,22,252, -19,2,248,22,58,199,64,102,105,108,101,252,7,1,28,249,22,188,248,22,70, -199,36,27,248,22,84,198,28,248,22,252,143,1,193,28,27,248,22,252,34,3, -194,28,192,192,28,248,22,252,143,1,194,27,248,22,252,54,3,195,28,192,192, -248,22,252,55,3,195,11,249,22,252,57,3,194,248,80,159,41,8,50,35,201, -11,11,11,11,87,94,28,28,248,22,252,34,3,193,10,248,22,252,229,1,193, -12,28,198,250,22,252,47,2,67,114,101,113,117,105,114,101,252,8,1,249,22, -252,191,1,6,17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104, -126,97,252,9,1,28,197,248,22,58,198,6,0,0,252,10,1,201,250,22,252, -48,2,2,246,249,22,252,191,1,6,13,13,109,111,100,117,108,101,32,112,97, -116,104,126,97,252,11,1,28,197,248,22,58,198,6,0,0,252,12,1,199,27, -28,248,22,252,229,1,194,249,22,252,234,1,195,34,248,22,252,59,3,248,22, -252,60,3,195,27,28,248,22,252,229,1,195,249,22,252,234,1,196,35,248,80, -159,40,38,35,194,91,159,37,11,90,161,37,34,11,28,248,22,252,229,1,198, -250,22,7,67,105,103,110,111,114,101,100,252,13,1,249,22,252,234,1,202,36, -2,252,13,1,248,22,252,53,3,197,27,28,248,22,252,229,1,199,249,22,252, -234,1,200,37,249,80,159,45,36,35,196,5,0,252,14,1,27,28,248,22,252, -229,1,200,249,22,252,234,1,201,38,249,22,252,191,1,6,3,3,44,126,97, -252,15,1,248,22,252,217,1,248,22,252,39,3,248,80,159,49,38,35,199,27, -28,248,22,252,229,1,201,249,22,252,234,1,202,39,248,22,48,249,22,252,166, -1,196,248,22,252,217,1,248,22,252,39,3,199,27,28,248,22,252,229,1,202, -249,22,252,234,1,203,40,27,249,22,252,81,3,2,166,248,22,252,39,3,201, -28,192,248,22,58,193,10,27,27,250,22,122,80,158,51,8,26,248,22,252,99, -3,247,22,252,220,2,11,28,192,192,27,247,22,116,87,94,250,22,121,80,158, -52,8,26,248,22,252,99,3,247,22,252,220,2,195,192,87,95,28,23,17,27, -250,22,122,196,198,11,87,94,28,192,28,28,248,22,47,193,10,249,22,252,21, -2,196,194,12,252,22,252,45,2,2,246,6,71,71,109,111,100,117,108,101,32, -112,114,101,118,105,111,117,115,108,121,32,108,111,97,100,101,100,32,119,105,116, -104,32,115,117,102,102,105,120,32,126,115,44,32,99,97,110,110,111,116,32,108, -111,97,100,32,119,105,116,104,32,115,117,102,102,105,120,32,126,115,58,32,126, -101,252,16,1,28,249,22,252,19,2,10,199,6,0,0,252,17,1,197,28,249, -22,252,19,2,10,201,6,0,0,252,18,1,199,23,15,12,28,192,12,87,95, -27,249,22,23,247,22,21,80,158,51,8,28,27,247,22,252,220,2,249,22,3, -89,162,34,35,48,9,226,13,14,2,3,28,249,22,252,21,2,248,22,59,199, -197,28,249,22,252,19,2,248,22,58,199,195,251,22,252,45,2,2,246,6,26, -26,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32, -126,101,58,32,126,101,252,19,1,198,249,22,2,22,59,248,22,73,249,22,57, -205,201,12,12,195,27,248,22,48,198,20,14,159,80,158,49,8,28,249,22,57, -247,22,252,220,2,204,20,14,159,80,158,49,41,250,80,158,52,42,249,22,25, -11,80,158,54,41,22,241,195,249,247,80,158,51,54,205,248,22,48,248,22,252, -217,1,248,22,252,39,3,203,250,22,121,196,198,197,12,28,28,248,22,252,229, -1,203,11,27,248,22,252,143,1,23,16,28,192,192,28,248,22,56,23,16,249, -22,252,19,2,248,22,58,23,18,2,249,11,250,22,121,80,158,50,8,27,28, -248,22,252,143,1,23,18,249,22,57,23,19,248,80,159,53,8,50,35,23,21, -249,22,57,23,19,247,22,252,72,3,254,22,252,231,1,23,19,23,18,23,16, -206,205,204,203,12,194,208,83,159,34,93,80,159,34,8,32,35,83,158,37,20, -93,95,2,69,89,162,34,34,36,9,223,0,248,80,158,35,8,32,9,89,162, -34,35,47,9,223,0,27,247,22,252,74,3,249,80,158,37,47,28,194,27,248, -22,252,224,1,6,11,11,80,76,84,67,79,76,76,69,67,84,83,252,20,1, -28,192,192,6,0,0,252,21,1,6,0,0,252,22,1,27,28,195,250,22,252, -50,3,248,22,252,70,3,69,97,100,100,111,110,45,100,105,114,252,23,1,247, -22,252,222,1,6,8,8,99,111,108,108,101,99,116,115,252,24,1,11,27,248, -80,159,40,8,51,35,249,22,71,201,248,22,65,248,22,252,70,3,72,99,111, -108,108,101,99,116,115,45,100,105,114,252,25,1,28,193,249,22,57,195,194,192, -83,159,34,93,80,159,34,8,33,35,32,252,26,1,89,162,8,36,35,37,2, -71,222,27,248,22,252,11,1,194,28,192,192,248,22,252,12,1,194,83,159,34, -97,80,159,34,8,34,35,80,159,34,8,35,35,80,159,34,8,36,35,80,159, -34,8,37,35,80,159,34,8,38,35,26,9,22,252,99,2,63,101,118,116,252, -27,1,11,35,34,11,248,22,65,249,22,57,22,252,98,2,34,247,22,252,122, -2,11,21,93,34,83,159,34,93,80,159,34,8,39,35,89,162,34,35,39,2, -83,223,0,87,94,28,28,248,22,0,194,249,22,40,195,34,11,12,250,22,252, -48,2,2,83,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105, -116,121,32,48,41,252,28,1,196,248,80,158,35,8,35,89,162,34,35,36,9, -223,2,247,192,83,159,34,93,80,159,34,8,40,35,32,252,29,1,89,162,34, -35,38,2,85,222,87,94,28,248,22,252,6,3,193,12,250,22,252,48,2,2, -85,6,7,7,99,104,97,110,110,101,108,252,30,1,195,248,22,252,247,2,193, -83,159,34,93,80,159,34,8,41,35,32,252,31,1,89,162,34,35,38,2,87, -222,87,94,28,248,22,252,6,3,193,12,250,22,252,48,2,2,87,6,7,7, -99,104,97,110,110,101,108,252,32,1,195,249,22,252,248,2,34,194,83,159,34, -93,80,159,34,8,42,35,32,252,33,1,89,162,34,36,39,2,89,222,87,94, -28,248,22,252,6,3,193,12,250,22,252,48,2,2,89,6,7,7,99,104,97, -110,110,101,108,252,34,1,195,28,248,22,252,247,2,249,22,252,5,3,195,196, -12,11,83,159,34,93,80,159,34,8,43,35,32,252,35,1,89,162,34,34,34, -2,91,222,247,22,252,220,2,83,159,34,93,80,159,34,8,44,35,89,162,34, -35,39,2,93,223,0,87,94,28,249,22,188,195,39,12,250,22,252,48,2,2, -93,6,1,1,53,252,36,1,196,248,80,158,35,8,45,11,83,159,34,93,80, -159,34,8,46,35,89,162,34,35,39,2,97,223,0,87,94,28,249,22,188,195, -39,12,250,22,252,48,2,2,97,6,1,1,53,252,37,1,196,248,80,158,35, -8,45,10,83,159,34,93,80,159,34,8,45,35,89,162,8,36,35,43,2,95, -223,0,27,248,22,252,198,2,65,101,109,112,116,121,252,38,1,27,247,22,252, -198,2,87,94,20,14,159,80,158,36,41,250,80,158,39,42,249,22,25,11,80, -158,41,41,22,252,220,2,196,87,96,249,22,246,194,66,35,37,114,53,114,115, -252,39,1,248,22,244,2,252,39,1,248,22,245,21,95,64,111,110,108,121,252, -40,1,68,109,122,115,99,104,101,109,101,252,41,1,72,115,121,110,116,97,120, -45,114,117,108,101,115,252,42,1,28,195,12,249,22,3,32,252,43,1,89,162, -34,35,39,9,222,249,22,252,96,3,194,249,22,242,2,252,41,1,196,21,15, -203,63,99,97,114,252,44,1,63,99,100,114,252,45,1,64,99,97,97,114,252, -46,1,64,99,97,100,114,252,47,1,64,99,100,97,114,252,48,1,64,99,100, -100,114,252,49,1,65,99,97,97,97,114,252,50,1,65,99,97,97,100,114,252, -51,1,65,99,97,100,97,114,252,52,1,65,99,97,100,100,114,252,53,1,65, -99,100,97,97,114,252,54,1,65,99,100,97,100,114,252,55,1,65,99,100,100, -97,114,252,56,1,65,99,100,100,100,114,252,57,1,66,99,97,97,97,97,114, -252,58,1,66,99,97,97,97,100,114,252,59,1,66,99,97,97,100,97,114,252, -60,1,66,99,97,97,100,100,114,252,61,1,66,99,97,100,97,97,114,252,62, -1,66,99,97,100,97,100,114,252,63,1,66,99,97,100,100,97,114,252,64,1, -66,99,97,100,100,100,114,252,65,1,66,99,100,97,97,97,114,252,66,1,66, -99,100,97,97,100,114,252,67,1,66,99,100,97,100,97,114,252,68,1,66,99, -100,97,100,100,114,252,69,1,66,99,100,100,97,97,114,252,70,1,66,99,100, -100,97,100,114,252,71,1,66,99,100,100,100,97,114,252,72,1,66,99,100,100, -100,100,114,252,73,1,63,109,97,112,252,74,1,61,61,252,75,1,61,60,252, -76,1,61,62,252,77,1,62,60,61,252,78,1,62,62,61,252,79,1,63,109, -97,120,252,80,1,63,109,105,110,252,81,1,61,43,252,82,1,61,45,252,83, -1,61,42,252,84,1,61,47,252,85,1,63,97,98,115,252,86,1,63,103,99, -100,252,87,1,63,108,99,109,252,88,1,63,101,120,112,252,89,1,63,108,111, -103,252,90,1,63,115,105,110,252,91,1,63,99,111,115,252,92,1,63,116,97, -110,252,93,1,63,110,111,116,252,94,1,63,101,113,63,252,95,1,1,30,99, -97,108,108,45,119,105,116,104,45,99,117,114,114,101,110,116,45,99,111,110,116, -105,110,117,97,116,105,111,110,252,96,1,71,109,97,107,101,45,115,116,114,105, -110,103,252,97,1,74,115,121,109,98,111,108,45,62,115,116,114,105,110,103,252, -98,1,74,115,116,114,105,110,103,45,62,115,121,109,98,111,108,252,99,1,76, -109,97,107,101,45,114,101,99,116,97,110,103,117,108,97,114,252,100,1,74,101, -120,97,99,116,45,62,105,110,101,120,97,99,116,252,101,1,74,105,110,101,120, -97,99,116,45,62,101,120,97,99,116,252,102,1,74,110,117,109,98,101,114,45, -62,115,116,114,105,110,103,252,103,1,74,115,116,114,105,110,103,45,62,110,117, -109,98,101,114,252,104,1,2,14,72,111,117,116,112,117,116,45,112,111,114,116, -63,252,105,1,78,99,117,114,114,101,110,116,45,105,110,112,117,116,45,112,111, -114,116,252,106,1,79,99,117,114,114,101,110,116,45,111,117,116,112,117,116,45, -112,111,114,116,252,107,1,78,99,117,114,114,101,110,116,45,101,114,114,111,114, -45,112,111,114,116,252,108,1,75,111,112,101,110,45,105,110,112,117,116,45,102, -105,108,101,252,109,1,76,111,112,101,110,45,111,117,116,112,117,116,45,102,105, -108,101,252,110,1,76,99,108,111,115,101,45,105,110,112,117,116,45,112,111,114, -116,252,111,1,77,99,108,111,115,101,45,111,117,116,112,117,116,45,112,111,114, -116,252,112,1,79,119,105,116,104,45,111,117,116,112,117,116,45,116,111,45,102, -105,108,101,252,113,1,73,116,114,97,110,115,99,114,105,112,116,45,111,110,252, -114,1,74,116,114,97,110,115,99,114,105,112,116,45,111,102,102,252,115,1,72, -102,108,117,115,104,45,111,117,116,112,117,116,252,116,1,73,115,116,114,105,110, -103,45,108,101,110,103,116,104,252,117,1,72,115,116,114,105,110,103,45,99,105, -60,61,63,252,118,1,72,115,116,114,105,110,103,45,99,105,62,61,63,252,119, -1,73,115,116,114,105,110,103,45,97,112,112,101,110,100,252,120,1,72,115,116, -114,105,110,103,45,62,108,105,115,116,252,121,1,72,108,105,115,116,45,62,115, -116,114,105,110,103,252,122,1,72,115,116,114,105,110,103,45,102,105,108,108,33, -252,123,1,73,118,101,99,116,111,114,45,108,101,110,103,116,104,252,124,1,72, -118,101,99,116,111,114,45,62,108,105,115,116,252,125,1,72,108,105,115,116,45, -62,118,101,99,116,111,114,252,126,1,72,118,101,99,116,111,114,45,102,105,108, -108,33,252,127,1,76,99,104,97,114,45,97,108,112,104,97,98,101,116,105,99, -63,252,128,1,73,99,104,97,114,45,110,117,109,101,114,105,99,63,252,129,1, -76,99,104,97,114,45,119,104,105,116,101,115,112,97,99,101,63,252,130,1,76, -99,104,97,114,45,117,112,112,101,114,45,99,97,115,101,63,252,131,1,76,99, -104,97,114,45,108,111,119,101,114,45,99,97,115,101,63,252,132,1,73,99,104, -97,114,45,62,105,110,116,101,103,101,114,252,133,1,73,105,110,116,101,103,101, -114,45,62,99,104,97,114,252,134,1,73,99,104,97,114,45,100,111,119,110,99, -97,115,101,252,135,1,1,21,99,97,108,108,45,119,105,116,104,45,111,117,116, -112,117,116,45,102,105,108,101,252,136,1,1,20,99,97,108,108,45,119,105,116, -104,45,105,110,112,117,116,45,102,105,108,101,252,137,1,1,20,119,105,116,104, -45,105,110,112,117,116,45,102,114,111,109,45,102,105,108,101,252,138,1,65,97, -112,112,108,121,252,139,1,68,102,111,114,45,101,97,99,104,252,140,1,67,115, -121,109,98,111,108,63,252,141,1,65,112,97,105,114,63,252,142,1,64,99,111, -110,115,252,143,1,68,115,101,116,45,99,97,114,33,252,144,1,68,115,101,116, -45,99,100,114,33,252,145,1,65,110,117,108,108,63,252,146,1,65,108,105,115, -116,63,252,147,1,64,108,105,115,116,252,148,1,66,108,101,110,103,116,104,252, -149,1,66,97,112,112,101,110,100,252,150,1,67,114,101,118,101,114,115,101,252, -151,1,69,108,105,115,116,45,116,97,105,108,252,152,1,68,108,105,115,116,45, -114,101,102,252,153,1,64,109,101,109,113,252,154,1,64,109,101,109,118,252,155, -1,66,109,101,109,98,101,114,252,156,1,64,97,115,115,113,252,157,1,64,97, -115,115,118,252,158,1,65,97,115,115,111,99,252,159,1,70,112,114,111,99,101, -100,117,114,101,63,252,160,1,67,110,117,109,98,101,114,63,252,161,1,68,99, -111,109,112,108,101,120,63,252,162,1,65,114,101,97,108,63,252,163,1,69,114, -97,116,105,111,110,97,108,63,252,164,1,68,105,110,116,101,103,101,114,63,252, -165,1,66,101,120,97,99,116,63,252,166,1,68,105,110,101,120,97,99,116,63, -252,167,1,65,122,101,114,111,63,252,168,1,69,112,111,115,105,116,105,118,101, -63,252,169,1,69,110,101,103,97,116,105,118,101,63,252,170,1,64,111,100,100, -63,252,171,1,65,101,118,101,110,63,252,172,1,68,113,117,111,116,105,101,110, -116,252,173,1,69,114,101,109,97,105,110,100,101,114,252,174,1,66,109,111,100, -117,108,111,252,175,1,65,102,108,111,111,114,252,176,1,67,99,101,105,108,105, -110,103,252,177,1,68,116,114,117,110,99,97,116,101,252,178,1,65,114,111,117, -110,100,252,179,1,69,110,117,109,101,114,97,116,111,114,252,180,1,71,100,101, -110,111,109,105,110,97,116,111,114,252,181,1,64,97,115,105,110,252,182,1,64, -97,99,111,115,252,183,1,64,97,116,97,110,252,184,1,64,115,113,114,116,252, -185,1,64,101,120,112,116,252,186,1,70,109,97,107,101,45,112,111,108,97,114, -252,187,1,69,114,101,97,108,45,112,97,114,116,252,188,1,69,105,109,97,103, -45,112,97,114,116,252,189,1,65,97,110,103,108,101,252,190,1,69,109,97,103, -110,105,116,117,100,101,252,191,1,71,105,110,112,117,116,45,112,111,114,116,63, -252,192,1,64,114,101,97,100,252,193,1,69,114,101,97,100,45,99,104,97,114, -252,194,1,69,112,101,101,107,45,99,104,97,114,252,195,1,71,101,111,102,45, -111,98,106,101,99,116,63,252,196,1,71,99,104,97,114,45,114,101,97,100,121, -63,252,197,1,65,119,114,105,116,101,252,198,1,67,100,105,115,112,108,97,121, -252,199,1,67,110,101,119,108,105,110,101,252,200,1,70,119,114,105,116,101,45, -99,104,97,114,252,201,1,64,108,111,97,100,252,202,1,67,115,116,114,105,110, -103,63,252,203,1,66,115,116,114,105,110,103,252,204,1,70,115,116,114,105,110, -103,45,114,101,102,252,205,1,71,115,116,114,105,110,103,45,115,101,116,33,252, -206,1,68,115,116,114,105,110,103,61,63,252,207,1,69,115,117,98,115,116,114, -105,110,103,252,208,1,71,115,116,114,105,110,103,45,99,111,112,121,252,209,1, -71,115,116,114,105,110,103,45,99,105,61,63,252,210,1,68,115,116,114,105,110, -103,60,63,252,211,1,68,115,116,114,105,110,103,62,63,252,212,1,69,115,116, -114,105,110,103,60,61,63,252,213,1,69,115,116,114,105,110,103,62,61,63,252, -214,1,71,115,116,114,105,110,103,45,99,105,60,63,252,215,1,71,115,116,114, -105,110,103,45,99,105,62,63,252,216,1,67,118,101,99,116,111,114,63,252,217, -1,71,109,97,107,101,45,118,101,99,116,111,114,252,218,1,66,118,101,99,116, -111,114,252,219,1,70,118,101,99,116,111,114,45,114,101,102,252,220,1,71,118, -101,99,116,111,114,45,115,101,116,33,252,221,1,65,99,104,97,114,63,252,222, -1,66,99,104,97,114,61,63,252,223,1,66,99,104,97,114,60,63,252,224,1, -66,99,104,97,114,62,63,252,225,1,67,99,104,97,114,60,61,63,252,226,1, -67,99,104,97,114,62,61,63,252,227,1,69,99,104,97,114,45,99,105,61,63, -252,228,1,69,99,104,97,114,45,99,105,60,63,252,229,1,69,99,104,97,114, -45,99,105,62,63,252,230,1,70,99,104,97,114,45,99,105,60,61,63,252,231, -1,70,99,104,97,114,45,99,105,62,61,63,252,232,1,71,99,104,97,114,45, -117,112,99,97,115,101,252,233,1,68,98,111,111,108,101,97,110,63,252,234,1, -64,101,113,118,63,252,235,1,66,101,113,117,97,108,63,252,236,1,65,102,111, -114,99,101,252,237,1,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117, -101,115,252,238,1,66,118,97,108,117,101,115,252,239,1,64,101,118,97,108,252, -240,1,2,71,2,93,2,97,2,91,72,100,121,110,97,109,105,99,45,119,105, -110,100,252,241,1,9,193,97,68,35,37,107,101,114,110,101,108,252,242,1,2, -125,2,124,2,123,2,122,95,2,252,242,1,2,106,2,126,0}; - EVAL_ONE_SIZED_STR((char *)expr, 13477); +112,16,254,1,30,17,2,2,67,108,111,97,100,47,99,100,18,254,1,30,19, +2,2,65,45,108,111,97,100,20,254,1,30,21,2,2,73,108,111,97,100,45, +114,101,108,97,116,105,118,101,22,254,1,30,23,2,2,1,23,108,111,97,100, +45,114,101,108,97,116,105,118,101,45,101,120,116,101,110,115,105,111,110,24,254, +1,30,25,2,2,1,27,112,97,116,104,45,108,105,115,116,45,115,116,114,105, +110,103,45,62,112,97,116,104,45,108,105,115,116,26,254,1,30,27,2,2,1, +20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104, +28,254,1,30,29,2,2,74,45,99,104,101,99,107,45,114,101,108,112,97,116, +104,30,254,1,30,31,2,2,77,45,99,104,101,99,107,45,99,111,108,108,101, +99,116,105,111,110,32,254,1,30,33,2,2,69,45,102,105,110,100,45,99,111, +108,34,254,1,30,35,2,2,70,100,108,108,45,115,117,102,102,105,120,36,254, +1,30,37,2,2,70,95,108,111,97,100,101,114,46,115,111,38,254,1,30,39, +2,2,1,25,99,117,114,114,101,110,116,45,108,111,97,100,47,117,115,101,45, +99,111,109,112,105,108,101,100,40,254,1,30,41,68,35,37,112,97,114,97,109, +122,42,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45, +107,101,121,43,4,30,44,2,42,1,23,101,120,116,101,110,100,45,112,97,114, +97,109,101,116,101,114,105,122,97,116,105,111,110,45,3,30,46,2,2,75,99, +111,108,108,101,99,116,105,111,110,45,112,97,116,104,47,254,1,30,48,2,2, +77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,49,254,1, +30,50,2,2,67,45,114,101,58,100,105,114,51,254,1,30,52,2,2,68,45, +114,101,58,97,117,116,111,53,254,1,30,54,2,2,74,45,114,101,58,111,107, +45,114,101,108,112,97,116,104,55,254,1,30,56,2,2,1,24,45,109,111,100, +117,108,101,45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,57, +254,1,30,58,2,2,71,45,112,97,116,104,45,99,97,99,104,101,59,254,1, +30,60,2,2,77,45,108,111,97,100,105,110,103,45,102,105,108,101,110,97,109, +101,61,254,1,30,62,2,2,71,45,112,114,101,118,45,114,101,108,116,111,63, +254,1,30,64,2,2,75,45,112,114,101,118,45,114,101,108,116,111,45,100,105, +114,65,254,1,30,66,2,2,1,34,109,97,107,101,45,115,116,97,110,100,97, +114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118, +101,114,67,254,1,30,68,2,2,1,29,102,105,110,100,45,108,105,98,114,97, +114,121,45,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,115,69,254, +1,30,70,2,2,65,112,111,114,116,63,71,254,1,30,72,2,2,72,115,116, +114,117,99,116,58,103,117,97,114,100,73,254,1,30,74,2,2,70,109,97,107, +101,45,103,117,97,114,100,75,254,1,30,76,2,2,66,103,117,97,114,100,63, +77,254,1,30,78,2,2,69,103,117,97,114,100,45,114,101,102,79,254,1,30, +80,2,2,70,103,117,97,114,100,45,115,101,116,33,81,254,1,30,82,2,2, +69,103,117,97,114,100,45,101,118,116,83,254,1,30,84,2,2,71,99,104,97, +110,110,101,108,45,103,101,116,85,254,1,30,86,2,2,75,99,104,97,110,110, +101,108,45,116,114,121,45,103,101,116,87,254,1,30,88,2,2,71,99,104,97, +110,110,101,108,45,112,117,116,89,254,1,30,90,2,2,1,23,105,110,116,101, +114,97,99,116,105,111,110,45,101,110,118,105,114,111,110,109,101,110,116,91,254, +1,30,92,2,2,1,25,115,99,104,101,109,101,45,114,101,112,111,114,116,45, +101,110,118,105,114,111,110,109,101,110,116,93,254,1,30,94,2,2,67,109,107, +45,114,53,114,115,95,254,1,30,96,2,2,76,110,117,108,108,45,101,110,118, +105,114,111,110,109,101,110,116,97,254,1,16,0,11,11,16,22,2,32,2,30, +2,34,2,20,2,61,2,57,2,59,2,63,2,65,2,53,2,51,2,55,2, +6,2,38,2,10,2,36,2,79,2,81,2,77,2,75,2,95,2,73,56,11, +16,24,2,85,2,89,2,87,2,47,2,40,2,28,2,69,2,83,2,91,2, +22,2,24,2,18,2,49,2,67,2,12,2,97,2,26,2,8,2,4,2,71, +2,14,2,16,2,93,79,109,101,109,111,114,121,45,116,114,97,99,101,45,108, +97,109,98,100,97,98,16,24,11,11,11,11,11,11,11,11,11,11,11,11,11, +11,11,11,11,11,11,11,11,11,11,11,16,24,2,85,2,89,2,87,2,47, +2,40,2,28,2,69,2,83,2,91,2,22,2,24,2,18,2,49,2,67,2, +12,2,97,2,26,2,8,2,4,2,71,2,14,2,16,2,93,2,98,57,58, +93,16,5,93,2,98,89,162,34,35,53,9,223,0,27,249,22,216,20,15,159, +37,34,41,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39, +36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,35, +248,80,158,42,36,195,27,248,80,158,43,37,196,28,248,80,158,43,38,193,248, +80,158,43,39,193,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27, +248,22,86,196,27,249,22,216,20,15,159,42,35,41,249,22,216,203,247,22,54, +27,249,22,216,20,15,159,43,36,41,249,22,216,204,247,22,54,27,249,22,216, +20,15,159,44,37,41,249,22,216,205,247,22,54,27,252,22,67,202,198,199,201, +200,254,80,158,50,40,20,15,159,50,38,41,21,97,3,1,4,103,57,48,54, +99,3,1,4,103,57,49,50,100,3,1,4,103,57,49,49,101,3,1,4,103, +57,48,56,102,3,1,4,103,57,48,57,103,248,22,95,200,248,22,93,200,248, +22,58,200,248,22,84,200,248,22,96,200,250,22,252,47,2,11,6,10,10,98, +97,100,32,115,121,110,116,97,120,104,196,34,20,99,159,34,16,7,30,105,65, +35,37,115,116,120,106,69,115,116,120,45,112,97,105,114,63,107,11,30,108,2, +106,67,99,111,110,115,47,35,102,109,1,30,110,2,106,67,115,116,120,45,99, +97,114,111,5,30,112,2,106,67,115,116,120,45,99,100,114,113,6,30,114,2, +106,69,115,116,120,45,108,105,115,116,63,115,8,30,116,2,106,69,115,116,120, +45,62,108,105,115,116,117,4,30,118,69,35,37,115,116,120,99,97,115,101,119, +1,24,97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116, +105,116,117,116,101,120,0,16,5,18,98,64,104,101,114,101,121,40,98,38,10, +34,11,96,159,68,35,37,100,101,102,105,110,101,122,9,11,159,70,35,37,109, +101,109,116,114,97,99,101,123,9,11,159,74,35,37,115,109,97,108,108,45,115, +99,104,101,109,101,124,9,11,159,73,35,37,109,111,114,101,45,115,99,104,101, +109,101,125,9,11,16,92,2,32,2,2,2,57,2,2,2,10,2,2,2,77, +2,2,2,40,2,2,2,34,2,2,2,18,2,2,2,14,2,2,2,20,2, +2,2,95,2,2,2,36,2,2,2,75,2,2,2,89,2,2,2,38,2,2, +2,79,2,2,2,55,2,2,2,85,2,2,2,8,2,2,2,81,2,2,2, +12,2,2,2,67,2,2,2,61,2,2,2,83,2,2,2,6,2,2,2,30, +2,2,2,65,2,2,2,73,2,2,2,16,2,2,2,51,2,2,2,47,2, +2,2,49,2,2,2,22,2,2,2,69,2,2,2,4,2,2,2,87,2,2, +2,97,2,2,2,93,2,2,2,53,2,2,2,24,2,2,2,98,2,2,2, +59,2,2,2,91,2,2,2,26,2,2,2,71,2,2,2,63,2,2,2,28, +2,2,98,37,10,35,11,94,159,76,35,37,115,116,120,99,97,115,101,45,115, +99,104,101,109,101,126,9,11,159,2,106,9,11,16,0,96,36,8,254,1,11, +16,0,16,4,35,11,61,120,127,3,1,7,101,110,118,52,53,48,49,128,18, +100,2,121,43,38,37,36,35,16,8,42,11,3,1,4,103,56,57,52,129,3, +1,4,103,56,57,53,130,3,1,4,103,56,57,54,131,3,1,7,101,110,118, +52,53,48,55,132,2,132,2,132,16,8,41,11,61,95,133,64,97,114,103,115, +134,64,98,111,100,121,135,3,1,7,101,110,118,52,53,48,56,136,2,136,2, +136,18,16,2,158,2,121,43,44,18,44,18,158,95,106,63,108,101,116,137,51, +38,37,36,35,42,41,16,4,50,11,3,1,4,103,57,48,49,138,3,1,7, +101,110,118,52,53,50,52,139,16,4,49,11,68,99,111,110,116,109,97,114,107, +140,3,1,7,101,110,118,52,53,50,53,141,16,4,48,11,3,1,4,103,57, +48,51,142,3,1,7,101,110,118,52,53,51,54,143,16,4,47,11,64,102,117, +110,99,144,3,1,7,101,110,118,52,53,51,55,145,16,4,46,11,3,1,4, +103,57,48,53,146,3,1,7,101,110,118,52,53,52,56,147,16,4,45,11,67, +110,101,119,109,97,114,107,148,3,1,7,101,110,118,52,53,52,57,149,158,94, +10,94,2,99,11,51,158,97,10,2,137,93,94,2,100,95,66,108,97,109,98, +100,97,150,2,101,95,2,137,93,94,2,102,94,1,31,117,110,105,111,110,101, +100,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103,45,118, +97,108,117,101,151,2,99,160,1,22,119,105,116,104,45,99,111,110,116,105,110, +117,97,116,105,111,110,45,109,97,114,107,152,1,30,109,101,109,111,114,121,45, +116,114,97,99,101,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97, +114,107,153,2,102,2,103,95,64,115,101,116,33,154,2,99,94,1,30,110,101, +119,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103,45,102, +117,110,99,116,105,111,110,155,2,100,2,100,51,51,11,139,83,159,34,93,80, +159,34,8,51,35,89,162,8,64,35,44,64,108,111,111,112,156,223,0,28,248, +22,63,194,9,27,248,22,58,195,27,28,248,22,252,58,3,194,193,28,248,22, +252,57,3,194,249,22,252,59,3,195,250,80,158,41,46,248,22,252,72,3,69, +101,120,101,99,45,102,105,108,101,157,11,10,250,80,158,39,46,248,22,252,72, +3,2,157,196,10,28,192,249,22,57,248,22,252,61,3,249,22,252,59,3,197, +247,22,252,73,3,248,80,159,39,8,51,35,248,22,59,199,248,80,159,37,8, +51,35,248,22,59,197,83,159,34,93,80,159,34,8,50,35,89,162,34,35,47, +67,103,101,116,45,100,105,114,158,223,0,27,28,194,28,249,22,252,19,2,196, +80,158,37,8,29,80,158,35,8,30,27,248,22,252,220,1,248,22,50,197,28, +249,22,252,84,3,33,8,35,114,120,35,34,94,44,34,159,194,91,159,37,11, +90,161,37,34,11,248,22,252,55,3,248,22,252,44,3,250,22,252,204,1,200, +35,248,22,252,198,1,201,87,95,83,160,36,11,80,158,39,8,29,198,83,160, +36,11,80,158,39,8,30,192,192,11,11,28,192,192,27,247,22,252,97,1,28, +192,192,247,22,252,73,3,83,159,34,93,80,159,34,8,49,35,89,162,34,35, +43,9,223,0,87,94,28,27,248,22,252,36,3,195,28,192,192,28,248,22,252, +143,1,195,27,248,22,252,56,3,196,28,192,192,248,22,252,57,3,196,11,12, +250,22,252,48,2,2,47,6,25,25,112,97,116,104,32,111,114,32,118,97,108, +105,100,45,112,97,116,104,32,115,116,114,105,110,103,160,196,28,248,22,252,56, +3,194,12,248,22,252,197,2,249,22,252,142,2,248,22,252,172,1,250,22,252, +191,1,6,29,29,126,97,58,32,105,110,118,97,108,105,100,32,114,101,108,97, +116,105,118,101,32,112,97,116,104,58,32,126,115,161,2,47,200,247,22,21,83, +159,34,93,80,159,34,8,48,35,89,162,34,36,42,68,119,105,116,104,45,100, +105,114,162,223,0,20,14,159,80,158,34,53,250,80,158,37,54,249,22,25,11, +80,158,39,53,22,252,97,1,28,248,22,252,36,3,197,196,247,22,252,73,3, +247,194,83,159,34,93,80,159,34,8,47,35,89,162,8,36,37,38,66,103,101, +116,45,115,111,163,223,0,89,162,34,35,46,9,226,0,1,3,2,252,22,252, +52,3,199,201,6,6,6,110,97,116,105,118,101,164,247,22,252,227,1,28,198, +249,80,159,44,36,35,199,80,158,44,50,197,83,159,34,93,80,159,34,34,35, +32,165,89,162,34,35,38,2,4,222,27,248,22,252,36,3,194,28,192,192,28, +248,22,252,143,1,194,27,248,22,252,56,3,195,28,192,192,248,22,252,57,3, +195,11,83,159,34,93,80,159,34,35,35,33,18,35,114,120,35,34,40,91,46, +93,91,94,46,93,42,124,41,36,34,166,83,159,34,93,80,159,34,36,35,89, +162,34,36,48,2,8,223,0,87,95,28,28,248,22,252,37,3,194,10,27,248, +22,252,36,3,195,28,192,192,28,248,22,252,143,1,195,27,248,22,252,56,3, +196,28,192,192,248,22,252,57,3,196,11,12,252,22,252,48,2,2,8,6,42, +42,112,97,116,104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109, +41,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110, +103,167,34,198,199,28,28,248,22,252,143,1,195,10,248,22,252,195,1,195,12, +252,22,252,48,2,2,8,6,21,21,115,116,114,105,110,103,32,111,114,32,98, +121,116,101,32,115,116,114,105,110,103,168,35,198,199,91,159,37,11,90,161,37, +34,11,248,22,252,55,3,197,87,94,28,192,12,250,22,252,49,2,2,8,6, +36,36,99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120, +32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,169,199,27,249, +22,252,45,3,250,22,252,90,3,2,166,248,22,252,42,3,200,28,248,22,252, +143,1,204,249,22,252,219,1,205,8,63,203,28,248,22,252,37,3,200,248,22, +252,38,3,200,247,22,252,39,3,28,248,22,252,36,3,194,249,22,252,52,3, +195,194,192,83,159,34,93,80,159,34,37,35,249,22,252,145,1,7,92,7,92, +83,159,34,93,80,159,34,38,35,89,162,34,35,47,2,12,223,0,87,94,28, +28,248,22,252,37,3,194,10,27,248,22,252,36,3,195,28,192,192,28,248,22, +252,143,1,195,27,248,22,252,56,3,196,28,192,192,248,22,252,57,3,196,11, +12,250,22,252,48,2,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97, +115,101,170,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121,32,115, +121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32, +115,116,114,105,110,103,171,196,28,28,248,22,252,37,3,194,249,22,252,19,2, +248,22,252,38,3,196,67,119,105,110,100,111,119,115,172,249,22,252,19,2,247, +22,252,226,1,2,172,27,28,248,22,252,143,1,195,194,248,22,252,216,1,248, +22,252,41,3,196,28,249,22,252,84,3,33,21,35,114,120,34,94,91,92,92, +93,91,92,92,93,91,63,93,91,92,92,93,34,173,194,28,248,22,252,143,1, +195,248,22,252,43,3,195,194,27,248,22,252,182,1,194,249,22,252,44,3,248, +22,252,219,1,250,22,252,91,3,33,6,35,114,120,34,47,34,174,28,249,22, +252,84,3,33,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47, +92,92,93,42,36,34,175,200,198,250,22,252,91,3,33,19,35,114,120,34,91, +32,46,93,43,40,91,47,92,92,93,42,41,36,34,176,201,6,2,2,92,49, +177,80,158,42,37,2,172,28,248,22,252,143,1,194,248,22,252,43,3,194,193, +83,159,34,93,80,159,34,39,35,91,159,36,11,90,161,35,35,11,32,178,89, +162,8,64,35,38,65,99,104,101,99,107,179,222,28,248,22,136,193,12,250,22, +252,48,2,2,14,6,4,4,114,101,97,108,180,195,20,12,95,35,89,162,8, +36,36,53,2,14,223,0,87,95,28,248,22,136,194,12,250,22,252,48,2,2, +14,2,180,196,28,248,22,136,195,12,250,22,252,48,2,2,14,2,180,197,27, +248,22,183,196,27,249,22,180,197,195,27,249,22,179,198,196,28,249,22,188,198, +198,28,250,22,191,196,34,195,28,248,22,139,197,34,33,3,48,46,48,181,28, +248,22,195,194,248,22,180,27,248,22,180,195,27,248,22,180,197,28,248,22,138, +194,193,27,248,22,151,195,27,248,22,151,195,28,249,22,189,195,194,248,22,177, +194,249,22,179,195,248,22,182,249,205,248,22,182,249,22,180,202,201,248,22,182, +249,22,180,203,201,28,248,22,138,194,193,27,248,22,151,195,27,248,22,151,195, +28,249,22,189,195,194,248,22,177,194,249,22,179,195,248,22,182,249,202,248,22, +182,249,22,180,202,201,248,22,182,249,22,180,203,201,33,6,43,110,97,110,46, +48,182,89,162,8,36,36,54,72,102,105,110,100,45,98,101,116,119,101,101,110, +183,223,0,28,248,22,138,194,193,27,248,22,151,195,27,248,22,151,197,28,249, +22,189,195,194,248,22,177,194,249,22,179,195,248,22,182,27,248,22,182,249,22, +180,203,200,27,248,22,182,249,22,180,203,201,28,248,22,138,194,193,27,248,22, +151,195,27,248,22,151,195,28,249,22,189,195,194,248,22,177,194,249,22,179,195, +248,22,182,249,206,248,22,182,249,22,180,202,201,248,22,182,249,22,180,203,201, +83,159,34,93,80,159,34,40,35,32,184,89,162,34,34,35,2,16,222,247,32, +185,89,162,8,64,34,37,69,114,101,112,108,45,108,111,111,112,186,222,250,22, +13,32,187,89,162,34,34,37,9,222,27,247,247,22,46,28,248,22,252,77,1, +193,12,87,94,83,159,45,32,188,89,162,35,35,37,9,222,249,22,3,247,22, +45,194,249,22,13,89,162,34,34,41,9,223,2,27,249,22,57,77,35,37,116, +111,112,45,105,110,116,101,114,97,99,116,105,111,110,189,195,248,247,22,252,40, +2,28,248,22,213,195,248,22,252,38,2,250,22,216,11,197,198,193,247,22,18, +248,22,15,247,22,18,247,22,18,32,190,89,162,8,37,34,34,9,222,247,2, +185,83,159,34,93,80,159,34,41,35,32,191,89,162,34,35,45,2,18,222,87, +94,28,27,248,22,252,36,3,194,28,192,192,28,248,22,252,143,1,194,27,248, +22,252,56,3,195,28,192,192,248,22,252,57,3,195,11,12,250,22,252,48,2, +2,18,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103,32,40, +115,97,110,115,32,110,117,108,41,192,195,91,159,37,11,90,161,37,34,11,248, +22,252,55,3,196,28,194,248,22,252,197,2,249,22,252,172,2,248,22,252,172, +1,249,22,252,191,1,6,36,36,108,111,97,100,47,99,100,58,32,99,97,110, +110,111,116,32,111,112,101,110,32,97,32,100,105,114,101,99,116,111,114,121,58, +32,126,115,193,201,247,22,21,28,248,22,252,36,3,193,87,94,28,248,22,252, +47,3,193,12,248,22,252,197,2,249,22,252,172,2,248,22,252,172,1,250,22, +252,191,1,6,65,65,108,111,97,100,47,99,100,58,32,100,105,114,101,99,116, +111,114,121,32,111,102,32,126,115,32,100,111,101,115,32,110,111,116,32,101,120, +105,115,116,32,40,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114, +121,32,105,115,32,126,115,41,194,202,247,22,252,73,3,247,22,21,27,247,22, +252,73,3,250,22,37,89,162,34,34,36,9,223,4,248,22,252,73,3,193,89, +162,34,34,36,9,223,5,248,22,252,95,1,193,89,162,34,34,36,9,223,3, +248,22,252,73,3,193,248,22,252,95,1,196,83,159,34,93,80,159,34,42,35, +32,195,89,162,34,37,41,2,20,222,87,94,28,27,248,22,252,36,3,196,28, +192,192,28,248,22,252,143,1,196,27,248,22,252,56,3,197,28,192,192,248,22, +252,57,3,197,11,12,250,22,252,48,2,196,6,25,25,112,97,116,104,32,111, +114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,196,197, +28,248,22,252,58,3,195,248,193,195,27,247,22,252,97,1,248,194,28,193,249, +22,252,59,3,198,195,196,83,159,34,93,80,159,34,43,35,89,162,34,35,40, +2,22,223,0,87,94,28,27,248,22,252,36,3,195,28,192,192,28,248,22,252, +143,1,195,27,248,22,252,56,3,196,28,192,192,248,22,252,57,3,196,11,12, +250,22,252,48,2,2,22,2,196,196,28,248,22,252,58,3,194,248,22,252,95, +1,194,27,247,22,252,97,1,248,22,252,95,1,28,193,249,22,252,59,3,197, +195,195,83,159,34,93,80,159,34,44,35,89,162,34,35,40,2,24,223,0,87, +94,28,27,248,22,252,36,3,195,28,192,192,28,248,22,252,143,1,195,27,248, +22,252,56,3,196,28,192,192,248,22,252,57,3,196,11,12,250,22,252,48,2, +2,24,2,196,196,28,248,22,252,58,3,194,248,22,252,77,3,194,27,247,22, +252,97,1,248,22,252,77,3,28,193,249,22,252,59,3,197,195,195,83,159,34, +93,80,159,34,45,35,27,248,22,252,79,3,248,22,252,218,1,27,27,247,22, +252,226,1,28,249,22,78,194,21,96,64,117,110,105,120,197,64,98,101,111,115, +198,65,111,115,107,105,116,199,66,109,97,99,111,115,120,200,6,1,1,58,201, +28,249,22,78,194,21,94,2,172,65,109,97,99,111,115,202,6,1,1,59,203, +12,250,22,252,191,1,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46, +42,41,204,195,195,89,162,8,36,36,42,2,26,223,0,87,95,28,28,248,22, +252,195,1,194,10,248,22,252,143,1,194,12,250,22,252,48,2,2,26,6,21, +21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114,105,110, +103,205,196,28,28,248,22,64,195,249,22,4,22,252,36,3,196,11,12,250,22, +252,48,2,2,26,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115, +206,197,250,32,207,89,162,8,64,37,44,2,156,222,27,249,22,252,83,3,196, +197,28,192,27,248,22,84,194,27,250,2,207,198,199,248,22,93,198,28,249,22, +252,201,1,195,5,0,208,249,22,71,197,194,249,22,57,248,22,252,44,3,196, +194,28,249,22,252,201,1,197,2,208,249,22,71,195,9,249,22,57,248,22,252, +44,3,198,9,197,195,28,248,22,252,143,1,197,248,22,252,218,1,197,196,83, +159,34,93,80,159,34,46,35,83,158,37,20,93,96,2,28,89,162,8,36,37, +49,9,223,0,87,95,28,27,248,22,252,36,3,195,28,192,192,28,248,22,252, +143,1,195,27,248,22,252,56,3,196,28,192,192,248,22,252,57,3,196,11,12, +250,22,252,48,2,2,28,6,25,25,112,97,116,104,32,111,114,32,115,116,114, +105,110,103,32,40,115,97,110,115,32,110,117,108,41,209,196,28,28,194,28,27, +248,22,252,36,3,196,28,192,192,28,248,22,252,143,1,196,27,248,22,252,56, +3,197,28,192,192,248,22,252,57,3,197,11,248,22,252,56,3,195,11,10,12, +250,22,252,48,2,2,28,6,29,29,35,102,32,111,114,32,114,101,108,97,116, +105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,210,197,28, +28,248,22,252,56,3,194,91,159,37,11,90,161,37,34,11,248,22,252,55,3, +197,249,22,252,19,2,194,68,114,101,108,97,116,105,118,101,211,11,27,248,22, +252,224,1,6,4,4,80,65,84,72,212,27,28,193,27,249,80,158,39,45,196, +9,28,249,22,252,19,2,247,22,252,226,1,2,172,249,22,57,248,22,252,44, +3,5,1,46,213,194,192,9,28,248,22,63,193,11,27,248,22,252,59,3,248, +22,58,195,27,249,22,252,52,3,195,199,28,248,22,252,46,3,193,250,32,214, +89,162,8,100,37,48,70,102,111,117,110,100,45,101,120,101,99,215,222,28,192, +91,159,37,11,90,161,37,34,11,248,22,252,55,3,198,27,28,197,27,248,22, +252,60,3,200,28,249,22,252,21,2,194,201,11,28,248,22,252,56,3,193,250, +2,214,200,201,249,22,252,52,3,199,197,250,2,214,200,201,195,11,28,192,192, +27,28,248,22,252,36,3,195,27,249,22,252,52,3,197,200,28,28,248,22,252, +47,3,193,10,248,22,252,46,3,193,192,11,11,28,192,192,28,198,11,27,248, +22,252,60,3,201,28,249,22,252,21,2,194,202,11,28,248,22,252,56,3,193, +250,2,214,201,202,249,22,252,52,3,200,197,250,2,214,201,202,195,194,201,202, +195,251,32,216,89,162,8,100,38,48,2,156,222,28,248,22,63,196,11,27,248, +22,252,59,3,248,22,58,198,27,249,22,252,52,3,195,196,28,248,22,252,46, +3,193,250,2,214,198,199,195,27,248,22,59,199,28,248,22,63,193,11,27,248, +22,252,59,3,248,22,58,195,27,249,22,252,52,3,195,199,28,248,22,252,46, +3,193,250,2,214,201,202,195,251,2,216,201,202,203,248,22,59,199,201,202,203, +248,22,59,199,27,248,22,252,59,3,195,28,248,22,252,46,3,193,250,2,214, +198,199,195,11,89,162,34,36,40,9,223,0,250,80,158,37,46,196,197,11,89, +162,34,35,39,9,223,0,250,80,158,37,46,196,11,11,83,159,34,93,80,159, +34,47,35,32,217,89,162,34,36,43,2,30,222,87,94,28,27,248,22,252,36, +3,195,28,192,192,28,248,22,252,143,1,195,27,248,22,252,56,3,196,28,192, +192,248,22,252,57,3,196,11,12,250,22,252,48,2,195,2,160,196,28,248,22, +252,56,3,194,12,248,22,252,197,2,249,22,252,142,2,248,22,252,172,1,250, +22,252,191,1,2,161,199,200,247,22,21,83,159,34,93,80,159,34,48,35,89, +162,34,37,45,2,32,223,0,87,94,87,94,28,27,248,22,252,36,3,196,28, +192,192,28,248,22,252,143,1,196,27,248,22,252,56,3,197,28,192,192,248,22, +252,57,3,197,11,12,250,22,252,48,2,196,2,160,197,28,248,22,252,56,3, +195,12,248,22,252,197,2,249,22,252,142,2,248,22,252,172,1,250,22,252,191, +1,2,161,200,201,247,22,21,249,22,3,89,162,34,35,44,9,224,2,3,87, +94,28,27,248,22,252,36,3,196,28,192,192,28,248,22,252,143,1,196,27,248, +22,252,56,3,197,28,192,192,248,22,252,57,3,197,11,12,250,22,252,48,2, +195,2,160,197,28,248,22,252,56,3,195,12,248,22,252,197,2,249,22,252,142, +2,248,22,252,172,1,250,22,252,191,1,2,161,199,201,247,22,21,197,83,159, +34,93,80,159,34,49,35,32,218,89,162,34,37,44,2,34,222,27,247,22,252, +74,3,252,32,219,89,162,8,64,39,50,65,99,108,111,111,112,220,222,28,248, +22,63,197,248,22,252,197,2,249,22,252,172,2,248,22,252,172,1,251,22,252, +191,1,6,42,42,126,97,58,32,99,111,108,108,101,99,116,105,111,110,32,110, +111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32,97,110,121,32,111, +102,58,32,126,115,221,201,28,248,22,63,204,202,250,22,1,22,252,52,3,205, +206,200,247,22,21,27,249,22,252,52,3,248,22,58,200,197,28,248,22,252,47, +3,193,27,250,22,1,22,252,52,3,196,200,28,248,22,252,47,3,193,192,252, +2,219,199,200,201,202,248,22,59,204,252,2,219,198,199,200,201,248,22,59,203, +197,198,199,200,197,83,159,34,93,80,159,34,50,35,27,247,22,252,226,1,28, +249,22,252,19,2,194,2,172,5,4,46,100,108,108,222,28,249,22,78,194,21, +94,2,200,2,202,5,6,46,100,121,108,105,98,223,5,3,46,115,111,224,83, +159,34,93,80,159,34,51,35,249,80,159,36,36,35,248,22,252,44,3,5,10, +95,108,111,97,100,101,114,46,115,115,225,80,158,36,50,83,159,34,93,80,159, +34,52,35,249,22,252,231,2,27,89,162,34,36,8,28,1,25,100,101,102,97, +117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100, +226,223,3,87,94,28,27,248,22,252,36,3,195,28,192,192,28,248,22,252,143, +1,195,27,248,22,252,56,3,196,28,192,192,248,22,252,57,3,196,11,12,250, +22,252,48,2,2,49,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105, +100,45,112,97,116,104,32,115,116,114,105,110,103,227,196,91,159,40,11,90,161, +35,34,11,28,248,22,252,58,3,200,199,27,247,22,252,97,1,28,192,249,22, +252,59,3,202,194,200,90,161,37,35,11,248,22,252,55,3,193,90,161,35,38, +11,28,249,22,252,19,2,195,2,211,64,115,97,109,101,228,193,90,161,35,39, +11,247,22,252,75,3,27,89,162,34,35,43,62,122,111,229,225,7,5,3,250, +22,252,52,3,196,198,249,80,159,41,36,35,197,5,3,46,122,111,230,27,89, +162,34,35,45,9,225,8,6,4,252,22,252,52,3,198,200,2,164,247,22,252, +227,1,249,80,159,43,36,35,199,80,158,43,50,27,27,80,158,44,51,89,162, +34,35,43,9,225,10,8,0,252,22,252,52,3,198,200,2,164,247,22,252,227, +1,197,27,249,22,5,89,162,34,35,41,9,223,6,27,193,27,250,22,252,68, +3,196,11,32,231,89,162,8,44,34,34,9,222,11,28,192,249,22,57,195,194, +11,203,27,27,28,195,27,249,22,5,89,162,34,35,41,9,223,6,27,248,194, +195,27,250,22,252,68,3,196,11,32,232,89,162,8,44,34,34,9,222,11,28, +192,249,22,57,195,194,11,206,27,28,196,11,193,28,192,192,28,193,28,196,28, +249,22,192,248,22,59,196,248,22,59,199,193,11,11,11,11,28,192,27,248,22, +252,77,3,248,22,58,195,91,159,36,11,90,161,36,34,11,248,195,248,22,48, +248,22,252,217,1,248,22,252,41,3,249,80,159,55,36,35,23,17,5,0,233, +28,192,87,94,28,23,17,28,249,22,252,19,2,195,23,19,12,248,22,252,197, +2,249,22,252,139,2,248,22,252,172,1,251,22,252,191,1,6,81,81,108,111, +97,100,45,101,120,116,101,110,115,105,111,110,58,32,101,120,112,101,99,116,101, +100,32,109,111,100,117,108,101,32,100,101,99,108,97,114,97,116,105,111,110,32, +102,111,114,32,96,126,97,39,44,32,102,111,117,110,100,32,126,97,32,116,104, +114,111,117,103,104,32,108,111,97,100,101,114,58,32,126,101,234,23,25,28,201, +249,22,252,191,1,6,27,27,109,111,100,117,108,101,32,100,101,99,108,97,114, +97,116,105,111,110,32,102,111,114,32,96,126,97,39,235,203,6,4,4,110,111, +110,101,236,248,22,58,204,247,22,21,12,192,11,11,28,192,249,80,159,47,8, +48,35,203,194,27,28,196,27,249,22,5,89,162,34,35,41,9,223,7,27,248, +194,195,27,250,22,252,68,3,196,11,32,237,89,162,8,44,34,34,9,222,11, +28,192,249,22,57,195,194,11,206,27,28,196,11,193,28,192,192,28,193,28,196, +28,249,22,192,248,22,59,196,248,22,59,199,193,11,11,11,11,28,192,249,80, +159,48,8,48,35,204,89,162,34,34,39,9,224,16,2,249,247,22,252,78,3, +248,22,58,195,195,27,28,198,27,249,22,5,89,162,34,35,41,9,223,9,27, +248,194,195,27,250,22,252,68,3,196,11,32,238,89,162,8,44,34,34,9,222, +11,28,192,249,22,57,195,194,11,23,15,27,28,197,11,193,28,192,192,28,193, +28,197,28,249,22,192,248,22,59,196,248,22,59,200,193,11,11,11,11,28,192, +249,80,159,49,8,48,35,205,89,162,34,34,39,9,224,17,2,249,247,22,252, +96,1,248,22,58,195,195,249,80,159,49,8,48,35,205,89,162,34,34,38,9, +224,17,9,249,247,22,252,96,1,194,195,192,32,239,89,162,8,36,35,38,9, +222,87,94,28,28,248,22,0,193,249,22,40,194,36,11,12,250,22,252,48,2, +2,40,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121, +32,50,41,240,195,192,83,159,34,93,80,159,34,55,35,89,162,8,37,36,44, +2,47,223,0,87,94,87,94,87,94,28,27,248,22,252,36,3,195,28,192,192, +28,248,22,252,143,1,195,27,248,22,252,56,3,196,28,192,192,248,22,252,57, +3,196,11,12,250,22,252,48,2,2,47,2,160,196,28,248,22,252,56,3,194, +12,248,22,252,197,2,249,22,252,142,2,248,22,252,172,1,250,22,252,191,1, +2,161,2,47,200,247,22,21,249,22,3,80,159,36,8,49,35,196,27,247,22, +252,74,3,251,32,241,89,162,8,64,38,49,2,220,222,28,248,22,63,196,248, +22,252,197,2,249,22,252,172,2,248,22,252,172,1,251,22,252,191,1,2,221, +2,47,28,248,22,63,203,201,250,22,1,22,252,52,3,204,205,200,247,22,21, +27,249,22,252,52,3,248,22,58,199,196,28,248,22,252,47,3,193,27,250,22, +1,22,252,52,3,196,199,28,248,22,252,47,3,193,192,251,2,241,198,199,200, +248,22,59,202,251,2,241,197,198,199,248,22,59,201,196,198,199,196,83,159,34, +93,80,159,34,56,35,89,162,34,35,38,2,49,223,0,249,247,80,158,36,52, +195,11,248,22,252,14,3,32,242,89,162,8,36,35,35,1,20,100,101,102,97, +117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100,243,222,192,83,159, +34,93,80,159,34,57,35,33,17,35,114,120,35,34,40,46,43,63,41,47,43, +40,46,42,41,34,244,83,159,34,93,80,159,34,58,35,2,159,83,159,34,93, +80,159,34,59,35,33,45,35,114,120,35,34,94,91,45,97,45,122,65,45,90, +48,45,57,95,46,32,93,43,40,47,43,91,45,97,45,122,65,45,90,48,45, +57,95,46,32,93,43,41,42,36,34,245,83,159,34,93,80,159,34,8,26,35, +248,22,116,64,119,101,97,107,246,83,159,34,93,80,159,34,8,27,35,249,22, +116,2,246,65,101,113,117,97,108,247,83,159,34,93,80,159,34,8,28,35,247, +22,54,83,159,34,93,80,158,34,8,29,11,83,159,34,93,80,158,34,8,30, +11,83,159,34,93,80,159,34,8,31,35,89,162,8,36,35,38,2,67,223,0, +91,159,36,10,90,161,35,34,10,11,90,161,35,35,10,83,158,37,20,93,96, +1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109, +101,45,114,101,115,111,108,118,101,114,248,89,162,8,36,35,44,9,224,2,0, +87,94,28,207,248,208,195,12,27,27,250,22,122,80,158,40,8,26,248,22,252, +101,3,247,22,252,222,2,11,28,192,192,27,247,22,116,87,94,250,22,121,80, +158,41,8,26,248,22,252,101,3,247,22,252,222,2,195,192,250,22,121,195,198, +66,97,116,116,97,99,104,249,89,162,34,37,42,9,223,1,251,211,197,198,199, +10,89,162,34,38,8,28,9,225,2,3,0,28,28,248,22,56,196,249,22,252, +19,2,248,22,58,198,66,112,108,97,110,101,116,250,11,87,94,28,207,12,20, +14,159,80,158,36,53,250,80,158,39,54,249,22,25,11,80,158,41,53,22,252, +222,2,196,90,161,35,34,10,249,22,242,21,95,63,108,105,98,251,6,11,11, +114,101,115,111,108,118,101,114,46,115,115,252,252,0,6,6,6,112,108,97,110, +101,116,252,253,0,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45, +110,97,109,101,45,114,101,115,111,108,118,101,114,252,254,0,12,251,211,199,200, +201,202,27,28,248,22,252,143,1,197,27,248,80,159,39,8,50,35,199,27,250, +22,122,80,158,42,8,27,249,22,57,203,198,11,28,192,192,27,248,22,252,218, +1,200,28,249,22,252,84,3,2,245,194,27,249,22,252,83,3,2,244,195,28, +192,249,32,252,255,0,89,162,8,64,36,47,2,156,222,27,249,22,252,83,3, +2,244,196,28,192,27,249,22,252,52,3,196,27,248,22,84,197,28,249,22,252, +201,1,194,5,1,46,252,0,1,2,228,28,249,22,252,201,1,194,5,2,46, +46,252,1,1,62,117,112,252,2,1,248,22,252,44,3,193,27,248,22,93,195, +27,249,22,252,83,3,2,244,195,28,192,249,2,252,255,0,249,22,252,52,3, +198,27,248,22,84,198,28,249,22,252,201,1,194,2,252,0,1,2,228,28,249, +22,252,201,1,194,2,252,1,1,2,252,2,1,248,22,252,44,3,193,248,22, +93,195,249,22,252,52,3,196,248,22,252,44,3,196,249,22,252,52,3,195,248, +22,252,44,3,197,249,22,252,52,3,199,27,248,22,84,198,28,249,22,252,201, +1,194,2,252,0,1,2,228,28,249,22,252,201,1,194,2,252,1,1,2,252, +2,1,248,22,252,44,3,193,248,22,93,195,249,22,252,52,3,197,248,22,252, +44,3,196,248,22,65,249,22,252,166,1,6,72,72,32,40,114,101,108,97,116, +105,118,101,32,115,116,114,105,110,103,32,102,111,114,109,32,109,117,115,116,32, +99,111,110,116,97,105,110,32,111,110,108,121,32,97,45,122,44,32,65,45,90, +44,32,48,45,57,44,32,45,44,32,95,44,32,46,44,32,47,44,32,97,110, +100,32,252,3,1,6,37,37,115,112,97,99,101,44,32,119,105,116,104,32,110, +111,32,108,101,97,100,105,110,103,32,111,114,32,116,114,97,105,108,105,110,103, +32,47,41,252,4,1,28,248,22,252,36,3,197,28,248,22,252,57,3,197,196, +248,22,65,6,25,25,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101, +32,97,98,115,111,108,117,116,101,41,252,5,1,28,28,248,22,56,197,248,22, +252,17,2,248,22,64,198,10,11,28,249,22,252,19,2,248,22,58,199,2,251, +27,250,22,122,80,158,41,8,27,249,22,57,202,247,22,252,74,3,11,28,192, +192,27,27,248,22,70,200,28,249,22,188,194,36,248,22,65,6,5,5,109,122, +108,105,98,252,6,1,28,249,22,190,194,36,248,22,86,200,11,28,192,28,249, +22,4,32,252,7,1,89,162,34,35,36,9,222,28,248,22,252,143,1,193,248, +22,252,56,3,193,11,194,28,248,22,252,143,1,248,22,84,200,28,248,22,252, +56,3,248,22,84,200,27,27,248,22,58,195,27,248,22,59,196,27,247,22,252, +74,3,251,32,252,8,1,89,162,8,64,38,49,2,220,222,28,248,22,63,196, +248,22,252,197,2,249,22,252,172,2,248,22,252,172,1,251,22,252,191,1,2, +221,2,248,28,248,22,63,203,201,250,22,1,22,252,52,3,204,205,200,247,22, +21,27,249,22,252,52,3,248,22,58,199,196,28,248,22,252,47,3,193,27,250, +22,1,22,252,52,3,196,199,28,248,22,252,47,3,193,192,251,2,252,8,1, +198,199,200,248,22,59,202,251,2,252,8,1,197,198,199,248,22,59,201,196,198, +197,196,249,22,252,52,3,194,248,22,84,202,11,11,11,11,28,249,22,252,19, +2,248,22,58,199,64,102,105,108,101,252,9,1,28,249,22,188,248,22,70,199, +36,27,248,22,84,198,28,248,22,252,143,1,193,28,27,248,22,252,36,3,194, +28,192,192,28,248,22,252,143,1,194,27,248,22,252,56,3,195,28,192,192,248, +22,252,57,3,195,11,249,22,252,59,3,194,248,80,159,41,8,50,35,201,11, +11,11,11,87,94,28,28,248,22,252,36,3,193,10,248,22,252,229,1,193,12, +28,198,250,22,252,47,2,67,114,101,113,117,105,114,101,252,10,1,249,22,252, +191,1,6,17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126, +97,252,11,1,28,197,248,22,58,198,6,0,0,252,12,1,201,250,22,252,48, +2,2,248,249,22,252,191,1,6,13,13,109,111,100,117,108,101,32,112,97,116, +104,126,97,252,13,1,28,197,248,22,58,198,6,0,0,252,14,1,199,27,28, +248,22,252,229,1,194,249,22,252,234,1,195,34,248,22,252,61,3,248,22,252, +62,3,195,27,28,248,22,252,229,1,195,249,22,252,234,1,196,35,248,80,159, +40,38,35,194,91,159,37,11,90,161,37,34,11,28,248,22,252,229,1,198,250, +22,7,67,105,103,110,111,114,101,100,252,15,1,249,22,252,234,1,202,36,2, +252,15,1,248,22,252,55,3,197,27,28,248,22,252,229,1,199,249,22,252,234, +1,200,37,249,80,159,45,36,35,196,5,0,252,16,1,27,28,248,22,252,229, +1,200,249,22,252,234,1,201,38,249,22,252,191,1,6,3,3,44,126,97,252, +17,1,248,22,252,217,1,248,22,252,41,3,248,80,159,49,38,35,199,27,28, +248,22,252,229,1,201,249,22,252,234,1,202,39,248,22,48,249,22,252,166,1, +196,248,22,252,217,1,248,22,252,41,3,199,27,28,248,22,252,229,1,202,249, +22,252,234,1,203,40,27,249,22,252,83,3,2,166,248,22,252,41,3,201,28, +192,248,22,58,193,10,27,27,250,22,122,80,158,51,8,26,248,22,252,101,3, +247,22,252,222,2,11,28,192,192,27,247,22,116,87,94,250,22,121,80,158,52, +8,26,248,22,252,101,3,247,22,252,222,2,195,192,87,95,28,23,17,27,250, +22,122,196,198,11,87,94,28,192,28,28,248,22,47,193,10,249,22,252,21,2, +196,194,12,252,22,252,45,2,2,248,6,71,71,109,111,100,117,108,101,32,112, +114,101,118,105,111,117,115,108,121,32,108,111,97,100,101,100,32,119,105,116,104, +32,115,117,102,102,105,120,32,126,115,44,32,99,97,110,110,111,116,32,108,111, +97,100,32,119,105,116,104,32,115,117,102,102,105,120,32,126,115,58,32,126,101, +252,18,1,28,249,22,252,19,2,10,199,6,0,0,252,19,1,197,28,249,22, +252,19,2,10,201,6,0,0,252,20,1,199,23,15,12,28,192,12,87,95,27, +249,22,23,247,22,21,80,158,51,8,28,27,247,22,252,222,2,249,22,3,89, +162,34,35,48,9,226,13,14,2,3,28,249,22,252,21,2,248,22,59,199,197, +28,249,22,252,19,2,248,22,58,199,195,251,22,252,45,2,2,248,6,26,26, +99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126, +101,58,32,126,101,252,21,1,198,249,22,2,22,59,248,22,73,249,22,57,205, +201,12,12,195,27,248,22,48,198,20,14,159,80,158,49,8,28,249,22,57,247, +22,252,222,2,204,20,14,159,80,158,49,53,250,80,158,52,54,249,22,25,11, +80,158,54,53,22,241,195,249,247,80,158,51,52,205,248,22,48,248,22,252,217, +1,248,22,252,41,3,203,250,22,121,196,198,197,12,28,28,248,22,252,229,1, +203,11,27,248,22,252,143,1,23,16,28,192,192,28,248,22,56,23,16,249,22, +252,19,2,248,22,58,23,18,2,251,11,250,22,121,80,158,50,8,27,28,248, +22,252,143,1,23,18,249,22,57,23,19,248,80,159,53,8,50,35,23,21,249, +22,57,23,19,247,22,252,74,3,254,22,252,231,1,23,19,23,18,23,16,206, +205,204,203,12,194,208,83,159,34,93,80,159,34,8,32,35,83,158,37,20,93, +95,2,69,89,162,34,34,36,9,223,0,248,80,158,35,8,32,9,89,162,34, +35,47,9,223,0,27,247,22,252,76,3,249,80,158,37,45,28,194,27,248,22, +252,224,1,6,11,11,80,76,84,67,79,76,76,69,67,84,83,252,22,1,28, +192,192,6,0,0,252,23,1,6,0,0,252,24,1,27,28,195,250,22,252,52, +3,248,22,252,72,3,69,97,100,100,111,110,45,100,105,114,252,25,1,247,22, +252,222,1,6,8,8,99,111,108,108,101,99,116,115,252,26,1,11,27,248,80, +159,40,8,51,35,249,22,71,201,248,22,65,248,22,252,72,3,72,99,111,108, +108,101,99,116,115,45,100,105,114,252,27,1,28,193,249,22,57,195,194,192,83, +159,34,93,80,159,34,8,33,35,32,252,28,1,89,162,8,36,35,37,2,71, +222,27,248,22,252,11,1,194,28,192,192,248,22,252,12,1,194,83,159,34,97, +80,159,34,8,34,35,80,159,34,8,35,35,80,159,34,8,36,35,80,159,34, +8,37,35,80,159,34,8,38,35,26,9,22,252,102,2,63,101,118,116,252,29, +1,11,35,34,11,248,22,65,249,22,57,22,252,98,2,34,247,22,252,125,2, +11,21,93,34,83,159,34,93,80,159,34,8,39,35,89,162,34,35,39,2,83, +223,0,87,94,28,28,248,22,0,194,249,22,40,195,34,11,12,250,22,252,48, +2,2,83,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116, +121,32,48,41,252,30,1,196,248,80,158,35,8,35,89,162,34,35,36,9,223, +2,247,192,83,159,34,93,80,159,34,8,40,35,32,252,31,1,89,162,34,35, +38,2,85,222,87,94,28,248,22,252,8,3,193,12,250,22,252,48,2,2,85, +6,7,7,99,104,97,110,110,101,108,252,32,1,195,248,22,252,249,2,193,83, +159,34,93,80,159,34,8,41,35,32,252,33,1,89,162,34,35,38,2,87,222, +87,94,28,248,22,252,8,3,193,12,250,22,252,48,2,2,87,6,7,7,99, +104,97,110,110,101,108,252,34,1,195,249,22,252,250,2,34,194,83,159,34,93, +80,159,34,8,42,35,32,252,35,1,89,162,34,36,39,2,89,222,87,94,28, +248,22,252,8,3,193,12,250,22,252,48,2,2,89,6,7,7,99,104,97,110, +110,101,108,252,36,1,195,28,248,22,252,249,2,249,22,252,7,3,195,196,12, +11,83,159,34,93,80,159,34,8,43,35,32,252,37,1,89,162,34,34,34,2, +91,222,247,22,252,222,2,83,159,34,93,80,159,34,8,44,35,89,162,34,35, +39,2,93,223,0,87,94,28,249,22,188,195,39,12,250,22,252,48,2,2,93, +6,1,1,53,252,38,1,196,248,80,158,35,8,45,11,83,159,34,93,80,159, +34,8,46,35,89,162,34,35,39,2,97,223,0,87,94,28,249,22,188,195,39, +12,250,22,252,48,2,2,97,6,1,1,53,252,39,1,196,248,80,158,35,8, +45,10,83,159,34,93,80,159,34,8,45,35,89,162,8,36,35,43,2,95,223, +0,27,248,22,252,200,2,65,101,109,112,116,121,252,40,1,27,247,22,252,200, +2,87,94,20,14,159,80,158,36,53,250,80,158,39,54,249,22,25,11,80,158, +41,53,22,252,222,2,196,87,96,249,22,246,194,66,35,37,114,53,114,115,252, +41,1,248,22,244,2,252,41,1,248,22,245,21,95,64,111,110,108,121,252,42, +1,68,109,122,115,99,104,101,109,101,252,43,1,72,115,121,110,116,97,120,45, +114,117,108,101,115,252,44,1,28,195,12,249,22,3,32,252,45,1,89,162,34, +35,39,9,222,249,22,252,98,3,194,249,22,242,2,252,43,1,196,21,15,203, +63,99,97,114,252,46,1,63,99,100,114,252,47,1,64,99,97,97,114,252,48, +1,64,99,97,100,114,252,49,1,64,99,100,97,114,252,50,1,64,99,100,100, +114,252,51,1,65,99,97,97,97,114,252,52,1,65,99,97,97,100,114,252,53, +1,65,99,97,100,97,114,252,54,1,65,99,97,100,100,114,252,55,1,65,99, +100,97,97,114,252,56,1,65,99,100,97,100,114,252,57,1,65,99,100,100,97, +114,252,58,1,65,99,100,100,100,114,252,59,1,66,99,97,97,97,97,114,252, +60,1,66,99,97,97,97,100,114,252,61,1,66,99,97,97,100,97,114,252,62, +1,66,99,97,97,100,100,114,252,63,1,66,99,97,100,97,97,114,252,64,1, +66,99,97,100,97,100,114,252,65,1,66,99,97,100,100,97,114,252,66,1,66, +99,97,100,100,100,114,252,67,1,66,99,100,97,97,97,114,252,68,1,66,99, +100,97,97,100,114,252,69,1,66,99,100,97,100,97,114,252,70,1,66,99,100, +97,100,100,114,252,71,1,66,99,100,100,97,97,114,252,72,1,66,99,100,100, +97,100,114,252,73,1,66,99,100,100,100,97,114,252,74,1,66,99,100,100,100, +100,114,252,75,1,63,109,97,112,252,76,1,61,61,252,77,1,61,60,252,78, +1,61,62,252,79,1,62,60,61,252,80,1,62,62,61,252,81,1,63,109,97, +120,252,82,1,63,109,105,110,252,83,1,61,43,252,84,1,61,45,252,85,1, +61,42,252,86,1,61,47,252,87,1,63,97,98,115,252,88,1,63,103,99,100, +252,89,1,63,108,99,109,252,90,1,63,101,120,112,252,91,1,63,108,111,103, +252,92,1,63,115,105,110,252,93,1,63,99,111,115,252,94,1,63,116,97,110, +252,95,1,63,110,111,116,252,96,1,63,101,113,63,252,97,1,1,30,99,97, +108,108,45,119,105,116,104,45,99,117,114,114,101,110,116,45,99,111,110,116,105, +110,117,97,116,105,111,110,252,98,1,71,109,97,107,101,45,115,116,114,105,110, +103,252,99,1,74,115,121,109,98,111,108,45,62,115,116,114,105,110,103,252,100, +1,74,115,116,114,105,110,103,45,62,115,121,109,98,111,108,252,101,1,76,109, +97,107,101,45,114,101,99,116,97,110,103,117,108,97,114,252,102,1,74,101,120, +97,99,116,45,62,105,110,101,120,97,99,116,252,103,1,74,105,110,101,120,97, +99,116,45,62,101,120,97,99,116,252,104,1,74,110,117,109,98,101,114,45,62, +115,116,114,105,110,103,252,105,1,74,115,116,114,105,110,103,45,62,110,117,109, +98,101,114,252,106,1,2,14,72,111,117,116,112,117,116,45,112,111,114,116,63, +252,107,1,78,99,117,114,114,101,110,116,45,105,110,112,117,116,45,112,111,114, +116,252,108,1,79,99,117,114,114,101,110,116,45,111,117,116,112,117,116,45,112, +111,114,116,252,109,1,78,99,117,114,114,101,110,116,45,101,114,114,111,114,45, +112,111,114,116,252,110,1,75,111,112,101,110,45,105,110,112,117,116,45,102,105, +108,101,252,111,1,76,111,112,101,110,45,111,117,116,112,117,116,45,102,105,108, +101,252,112,1,76,99,108,111,115,101,45,105,110,112,117,116,45,112,111,114,116, +252,113,1,77,99,108,111,115,101,45,111,117,116,112,117,116,45,112,111,114,116, +252,114,1,79,119,105,116,104,45,111,117,116,112,117,116,45,116,111,45,102,105, +108,101,252,115,1,73,116,114,97,110,115,99,114,105,112,116,45,111,110,252,116, +1,74,116,114,97,110,115,99,114,105,112,116,45,111,102,102,252,117,1,72,102, +108,117,115,104,45,111,117,116,112,117,116,252,118,1,73,115,116,114,105,110,103, +45,108,101,110,103,116,104,252,119,1,72,115,116,114,105,110,103,45,99,105,60, +61,63,252,120,1,72,115,116,114,105,110,103,45,99,105,62,61,63,252,121,1, +73,115,116,114,105,110,103,45,97,112,112,101,110,100,252,122,1,72,115,116,114, +105,110,103,45,62,108,105,115,116,252,123,1,72,108,105,115,116,45,62,115,116, +114,105,110,103,252,124,1,72,115,116,114,105,110,103,45,102,105,108,108,33,252, +125,1,73,118,101,99,116,111,114,45,108,101,110,103,116,104,252,126,1,72,118, +101,99,116,111,114,45,62,108,105,115,116,252,127,1,72,108,105,115,116,45,62, +118,101,99,116,111,114,252,128,1,72,118,101,99,116,111,114,45,102,105,108,108, +33,252,129,1,76,99,104,97,114,45,97,108,112,104,97,98,101,116,105,99,63, +252,130,1,73,99,104,97,114,45,110,117,109,101,114,105,99,63,252,131,1,76, +99,104,97,114,45,119,104,105,116,101,115,112,97,99,101,63,252,132,1,76,99, +104,97,114,45,117,112,112,101,114,45,99,97,115,101,63,252,133,1,76,99,104, +97,114,45,108,111,119,101,114,45,99,97,115,101,63,252,134,1,73,99,104,97, +114,45,62,105,110,116,101,103,101,114,252,135,1,73,105,110,116,101,103,101,114, +45,62,99,104,97,114,252,136,1,73,99,104,97,114,45,100,111,119,110,99,97, +115,101,252,137,1,1,21,99,97,108,108,45,119,105,116,104,45,111,117,116,112, +117,116,45,102,105,108,101,252,138,1,1,20,99,97,108,108,45,119,105,116,104, +45,105,110,112,117,116,45,102,105,108,101,252,139,1,1,20,119,105,116,104,45, +105,110,112,117,116,45,102,114,111,109,45,102,105,108,101,252,140,1,65,97,112, +112,108,121,252,141,1,68,102,111,114,45,101,97,99,104,252,142,1,67,115,121, +109,98,111,108,63,252,143,1,65,112,97,105,114,63,252,144,1,64,99,111,110, +115,252,145,1,68,115,101,116,45,99,97,114,33,252,146,1,68,115,101,116,45, +99,100,114,33,252,147,1,65,110,117,108,108,63,252,148,1,65,108,105,115,116, +63,252,149,1,64,108,105,115,116,252,150,1,66,108,101,110,103,116,104,252,151, +1,66,97,112,112,101,110,100,252,152,1,67,114,101,118,101,114,115,101,252,153, +1,69,108,105,115,116,45,116,97,105,108,252,154,1,68,108,105,115,116,45,114, +101,102,252,155,1,64,109,101,109,113,252,156,1,64,109,101,109,118,252,157,1, +66,109,101,109,98,101,114,252,158,1,64,97,115,115,113,252,159,1,64,97,115, +115,118,252,160,1,65,97,115,115,111,99,252,161,1,70,112,114,111,99,101,100, +117,114,101,63,252,162,1,67,110,117,109,98,101,114,63,252,163,1,68,99,111, +109,112,108,101,120,63,252,164,1,65,114,101,97,108,63,252,165,1,69,114,97, +116,105,111,110,97,108,63,252,166,1,68,105,110,116,101,103,101,114,63,252,167, +1,66,101,120,97,99,116,63,252,168,1,68,105,110,101,120,97,99,116,63,252, +169,1,65,122,101,114,111,63,252,170,1,69,112,111,115,105,116,105,118,101,63, +252,171,1,69,110,101,103,97,116,105,118,101,63,252,172,1,64,111,100,100,63, +252,173,1,65,101,118,101,110,63,252,174,1,68,113,117,111,116,105,101,110,116, +252,175,1,69,114,101,109,97,105,110,100,101,114,252,176,1,66,109,111,100,117, +108,111,252,177,1,65,102,108,111,111,114,252,178,1,67,99,101,105,108,105,110, +103,252,179,1,68,116,114,117,110,99,97,116,101,252,180,1,65,114,111,117,110, +100,252,181,1,69,110,117,109,101,114,97,116,111,114,252,182,1,71,100,101,110, +111,109,105,110,97,116,111,114,252,183,1,64,97,115,105,110,252,184,1,64,97, +99,111,115,252,185,1,64,97,116,97,110,252,186,1,64,115,113,114,116,252,187, +1,64,101,120,112,116,252,188,1,70,109,97,107,101,45,112,111,108,97,114,252, +189,1,69,114,101,97,108,45,112,97,114,116,252,190,1,69,105,109,97,103,45, +112,97,114,116,252,191,1,65,97,110,103,108,101,252,192,1,69,109,97,103,110, +105,116,117,100,101,252,193,1,71,105,110,112,117,116,45,112,111,114,116,63,252, +194,1,64,114,101,97,100,252,195,1,69,114,101,97,100,45,99,104,97,114,252, +196,1,69,112,101,101,107,45,99,104,97,114,252,197,1,71,101,111,102,45,111, +98,106,101,99,116,63,252,198,1,71,99,104,97,114,45,114,101,97,100,121,63, +252,199,1,65,119,114,105,116,101,252,200,1,67,100,105,115,112,108,97,121,252, +201,1,67,110,101,119,108,105,110,101,252,202,1,70,119,114,105,116,101,45,99, +104,97,114,252,203,1,64,108,111,97,100,252,204,1,67,115,116,114,105,110,103, +63,252,205,1,66,115,116,114,105,110,103,252,206,1,70,115,116,114,105,110,103, +45,114,101,102,252,207,1,71,115,116,114,105,110,103,45,115,101,116,33,252,208, +1,68,115,116,114,105,110,103,61,63,252,209,1,69,115,117,98,115,116,114,105, +110,103,252,210,1,71,115,116,114,105,110,103,45,99,111,112,121,252,211,1,71, +115,116,114,105,110,103,45,99,105,61,63,252,212,1,68,115,116,114,105,110,103, +60,63,252,213,1,68,115,116,114,105,110,103,62,63,252,214,1,69,115,116,114, +105,110,103,60,61,63,252,215,1,69,115,116,114,105,110,103,62,61,63,252,216, +1,71,115,116,114,105,110,103,45,99,105,60,63,252,217,1,71,115,116,114,105, +110,103,45,99,105,62,63,252,218,1,67,118,101,99,116,111,114,63,252,219,1, +71,109,97,107,101,45,118,101,99,116,111,114,252,220,1,66,118,101,99,116,111, +114,252,221,1,70,118,101,99,116,111,114,45,114,101,102,252,222,1,71,118,101, +99,116,111,114,45,115,101,116,33,252,223,1,65,99,104,97,114,63,252,224,1, +66,99,104,97,114,61,63,252,225,1,66,99,104,97,114,60,63,252,226,1,66, +99,104,97,114,62,63,252,227,1,67,99,104,97,114,60,61,63,252,228,1,67, +99,104,97,114,62,61,63,252,229,1,69,99,104,97,114,45,99,105,61,63,252, +230,1,69,99,104,97,114,45,99,105,60,63,252,231,1,69,99,104,97,114,45, +99,105,62,63,252,232,1,70,99,104,97,114,45,99,105,60,61,63,252,233,1, +70,99,104,97,114,45,99,105,62,61,63,252,234,1,71,99,104,97,114,45,117, +112,99,97,115,101,252,235,1,68,98,111,111,108,101,97,110,63,252,236,1,64, +101,113,118,63,252,237,1,66,101,113,117,97,108,63,252,238,1,65,102,111,114, +99,101,252,239,1,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117,101, +115,252,240,1,66,118,97,108,117,101,115,252,241,1,64,101,118,97,108,252,242, +1,2,71,2,93,2,97,2,91,72,100,121,110,97,109,105,99,45,119,105,110, +100,252,243,1,9,193,97,68,35,37,107,101,114,110,101,108,252,244,1,2,125, +2,124,2,123,2,122,95,2,252,244,1,2,106,2,126,0}; + EVAL_ONE_SIZED_STR((char *)expr, 13413); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,20,252,183,1,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,24,252,46,2,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,72,35,37,115,116, 120,109,122,45,98,111,100,121,1,29,2,11,11,18,95,11,37,98,35,10,34, 11,94,159,68,35,37,100,101,102,105,110,101,3,9,11,159,76,35,37,115,116, -120,99,97,115,101,45,115,99,104,101,109,101,4,9,11,16,4,1,28,109,122, +120,99,97,115,101,45,115,99,104,101,109,101,4,9,11,16,6,77,35,37,116, +111,112,45,105,110,116,101,114,97,99,116,105,111,110,5,2,2,1,28,109,122, 115,99,104,101,109,101,45,105,110,45,115,116,120,45,109,111,100,117,108,101,45, -98,101,103,105,110,5,2,2,1,20,35,37,112,108,97,105,110,45,109,111,100, -117,108,101,45,98,101,103,105,110,6,158,68,35,37,107,101,114,110,101,108,7, -74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,8,10,10,34,80,158, -34,34,20,99,159,34,16,0,16,0,11,11,16,0,34,11,16,1,2,5,16, -1,11,16,1,2,5,34,35,93,16,5,93,2,5,89,162,34,35,46,9,223, -0,28,248,80,158,35,34,194,250,22,216,20,15,159,37,34,36,250,22,67,20, -15,159,40,35,36,249,22,216,201,249,22,65,20,15,159,44,36,36,68,109,122, -115,99,104,101,109,101,9,248,80,158,41,35,200,196,250,22,252,47,2,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,10,196,34,20,99,159,34,16,2, -30,11,65,35,37,115,116,120,12,69,115,116,120,45,112,97,105,114,63,13,11, -30,14,2,12,67,115,116,120,45,99,100,114,15,6,16,3,18,98,64,104,101, -114,101,16,41,35,98,40,10,35,11,93,159,2,12,9,11,16,0,96,39,8, -254,1,11,16,0,16,4,38,11,63,115,116,120,17,3,1,7,101,110,118,52, -56,48,49,18,18,16,2,158,2,6,41,42,18,16,2,158,78,114,101,113,117, -105,114,101,45,102,111,114,45,115,121,110,116,97,120,19,41,43,11,9,95,2, -7,2,4,2,3,94,2,7,2,12,0}; - EVAL_ONE_SIZED_STR((char *)expr, 451); +98,101,103,105,110,6,2,2,1,20,35,37,112,108,97,105,110,45,109,111,100, +117,108,101,45,98,101,103,105,110,7,158,68,35,37,107,101,114,110,101,108,8, +74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,9,10,10,34,80,158, +34,34,20,99,159,34,16,0,16,0,11,11,16,0,34,11,16,2,2,5,2, +6,16,2,11,11,16,2,2,5,2,6,34,36,94,16,5,93,2,6,89,162, +34,35,46,9,223,0,28,248,80,158,35,34,194,250,22,216,20,15,159,37,34, +36,250,22,67,20,15,159,40,35,36,249,22,216,201,249,22,65,20,15,159,44, +36,36,68,109,122,115,99,104,101,109,101,10,248,80,158,41,35,200,196,250,22, +252,47,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,11,196,34,20, +99,159,34,16,2,30,12,65,35,37,115,116,120,13,69,115,116,120,45,112,97, +105,114,63,14,11,30,15,2,13,67,115,116,120,45,99,100,114,16,6,16,3, +18,98,64,104,101,114,101,17,41,35,98,40,10,35,11,93,159,2,13,9,11, +16,0,96,39,8,254,1,11,16,0,16,4,38,11,63,115,116,120,18,3,1, +7,101,110,118,52,56,48,51,19,18,16,2,158,2,7,41,42,18,16,2,158, +78,114,101,113,117,105,114,101,45,102,111,114,45,115,121,110,116,97,120,20,41, +43,11,16,5,93,2,5,89,162,8,36,35,41,9,223,0,87,94,28,249,22, +252,19,2,69,116,111,112,45,108,101,118,101,108,21,247,22,252,105,3,62,111, +107,22,250,22,252,47,2,11,6,16,16,110,111,116,32,97,116,32,116,111,112, +32,108,101,118,101,108,23,196,251,22,216,197,248,80,158,39,34,198,197,197,34, +20,99,159,34,16,1,2,15,16,0,11,9,95,2,8,2,4,2,3,94,2, +8,2,13,0}; + EVAL_ONE_SIZED_STR((char *)expr, 570); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,95,252,202,6,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,97,252,3,7,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,68,109,122,115,99, 104,101,109,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,99,159,34, 16,0,16,0,74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,3,10, -16,0,34,11,16,76,1,32,99,97,108,108,45,119,105,116,104,45,98,114,101, +16,0,34,11,16,78,1,32,99,97,108,108,45,119,105,116,104,45,98,114,101, 97,107,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,4,1, -26,99,97,108,108,45,119,105,116,104,45,112,97,114,97,109,101,116,101,114,105, -122,97,116,105,111,110,5,71,99,104,97,110,110,101,108,45,103,101,116,6,71, -99,104,97,110,110,101,108,45,112,117,116,7,75,99,104,97,110,110,101,108,45, -116,114,121,45,103,101,116,8,1,26,99,104,101,99,107,45,100,117,112,108,105, -99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,9,75,99,111,108,108, -101,99,116,105,111,110,45,112,97,116,104,10,1,30,99,117,114,114,101,110,116, -45,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105, -111,110,11,1,25,99,117,114,114,101,110,116,45,108,111,97,100,47,117,115,101, -45,99,111,109,112,105,108,101,100,12,1,24,99,117,114,114,101,110,116,45,112, -97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,13,1,20,102,105,110, -100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,14,1,29,102, -105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111, -110,45,112,97,116,104,115,15,65,102,111,114,99,101,16,1,20,103,101,110,101, -114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,17,69,103,117,97, -114,100,45,101,118,116,18,71,105,100,101,110,116,105,102,105,101,114,63,19,1, -23,105,110,116,101,114,97,99,116,105,111,110,45,101,110,118,105,114,111,110,109, -101,110,116,20,73,108,111,97,100,45,114,101,108,97,116,105,118,101,21,1,23, -108,111,97,100,45,114,101,108,97,116,105,118,101,45,101,120,116,101,110,115,105, -111,110,22,67,108,111,97,100,47,99,100,23,77,108,111,97,100,47,117,115,101, -45,99,111,109,112,105,108,101,100,24,76,110,111,114,109,97,108,45,99,97,115, -101,45,112,97,116,104,25,76,110,117,108,108,45,101,110,118,105,114,111,110,109, -101,110,116,26,1,27,112,97,116,104,45,108,105,115,116,45,115,116,114,105,110, -103,45,62,112,97,116,104,45,108,105,115,116,27,79,112,97,116,104,45,114,101, -112,108,97,99,101,45,115,117,102,102,105,120,28,72,112,97,116,104,45,115,116, -114,105,110,103,63,29,65,112,111,114,116,63,30,68,112,114,111,109,105,115,101, -63,31,71,114,97,116,105,111,110,97,108,105,122,101,32,1,20,114,101,97,100, -45,101,118,97,108,45,112,114,105,110,116,45,108,111,111,112,33,1,25,115,99, -104,101,109,101,45,114,101,112,111,114,116,45,101,110,118,105,114,111,110,109,101, -110,116,34,64,108,101,116,42,35,77,117,110,115,121,110,116,97,120,45,115,112, -108,105,99,105,110,103,36,71,115,121,110,116,97,120,45,99,97,115,101,37,62, -111,114,38,2,3,63,108,101,116,39,1,28,109,122,115,99,104,101,109,101,45, -105,110,45,115,116,120,45,109,111,100,117,108,101,45,98,101,103,105,110,40,71, -115,101,116,33,45,118,97,108,117,101,115,41,62,100,111,42,63,97,110,100,43, -76,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120,44,66,108,101, -116,47,101,99,45,78,112,97,114,97,109,101,116,101,114,105,122,101,45,98,114, -101,97,107,46,66,115,121,110,116,97,120,47,70,108,101,116,45,115,116,114,117, -99,116,48,70,115,121,110,116,97,120,47,108,111,99,49,66,108,101,116,114,101, -99,50,64,119,104,101,110,51,79,109,101,109,111,114,121,45,116,114,97,99,101, -45,108,97,109,98,100,97,52,64,99,111,110,100,53,66,117,110,108,101,115,115, -54,73,100,101,102,105,110,101,45,115,116,114,117,99,116,55,75,113,117,97,115, -105,115,121,110,116,97,120,47,108,111,99,56,71,119,105,116,104,45,115,121,110, -116,97,120,57,70,108,101,116,45,115,121,110,116,97,120,58,66,100,101,102,105, -110,101,59,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97,120, -60,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,61,73,108,101, -116,114,101,99,45,115,121,110,116,97,120,62,72,108,101,116,45,115,121,110,116, -97,120,101,115,63,72,115,121,110,116,97,120,45,114,117,108,101,115,64,75,115, -121,110,116,97,120,45,105,100,45,114,117,108,101,115,65,72,112,97,114,97,109, -101,116,101,114,105,122,101,66,73,119,105,116,104,45,104,97,110,100,108,101,114, -115,67,72,115,121,110,116,97,120,45,99,97,115,101,42,68,74,119,105,116,104, -45,104,97,110,100,108,101,114,115,42,69,69,102,108,117,105,100,45,108,101,116, -70,64,99,97,115,101,71,65,100,101,108,97,121,72,66,108,101,116,47,99,99, -73,64,116,105,109,101,74,73,100,101,102,105,110,101,45,115,121,110,116,97,120, -75,70,113,117,97,115,105,113,117,111,116,101,76,68,117,110,115,121,110,116,97, -120,77,71,113,117,97,115,105,115,121,110,116,97,120,78,16,76,73,35,37,109, -111,114,101,45,115,99,104,101,109,101,79,2,79,66,35,37,109,105,115,99,80, -2,80,2,80,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101, -81,2,80,2,79,2,80,2,79,2,80,2,80,2,79,70,35,37,119,105,116, -104,45,115,116,120,82,2,80,65,35,37,115,116,120,83,2,80,2,80,2,80, -2,80,2,80,2,80,2,80,2,80,2,80,2,80,2,80,2,79,2,80,2, -80,2,80,71,35,37,113,113,45,97,110,100,45,111,114,84,67,35,37,113,113, -115,116,120,85,68,35,37,115,116,120,108,111,99,86,2,84,68,35,37,107,101, -114,110,101,108,87,2,84,72,35,37,115,116,120,109,122,45,98,111,100,121,88, -2,79,2,79,2,84,68,35,37,100,101,102,105,110,101,89,74,35,37,100,101, -102,105,110,101,45,101,116,45,97,108,90,2,79,69,35,37,115,116,120,99,97, -115,101,91,2,79,2,86,2,84,2,90,2,80,66,35,37,99,111,110,100,92, -2,90,2,90,2,85,2,82,2,81,2,89,2,89,2,81,2,81,2,81,2, -81,2,81,2,79,2,79,2,86,2,79,2,79,2,79,2,79,2,79,2,79, -2,89,2,84,2,85,2,85,16,76,2,4,2,5,2,6,2,7,2,8,2, -9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19, -2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2, -30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,1,20,35,37, -112,108,97,105,110,45,109,111,100,117,108,101,45,98,101,103,105,110,93,2,39, -2,3,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2, -50,2,51,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60, -2,61,2,62,2,63,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2, -71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,8,31,8,76,9,9, -101,2,87,2,79,2,80,2,81,2,83,2,88,2,85,2,89,68,35,37,101, -120,112,111,98,115,94,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 1750); +27,99,97,108,108,45,119,105,116,104,45,101,120,99,101,112,116,105,111,110,45, +104,97,110,100,108,101,114,5,1,26,99,97,108,108,45,119,105,116,104,45,112, +97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,6,71,99,104,97,110, +110,101,108,45,103,101,116,7,71,99,104,97,110,110,101,108,45,112,117,116,8, +75,99,104,97,110,110,101,108,45,116,114,121,45,103,101,116,9,1,26,99,104, +101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102, +105,101,114,10,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,11, +1,30,99,117,114,114,101,110,116,45,98,114,101,97,107,45,112,97,114,97,109, +101,116,101,114,105,122,97,116,105,111,110,12,1,25,99,117,114,114,101,110,116, +45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,13,1,24, +99,117,114,114,101,110,116,45,112,97,114,97,109,101,116,101,114,105,122,97,116, +105,111,110,14,1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101, +45,112,97,116,104,15,1,29,102,105,110,100,45,108,105,98,114,97,114,121,45, +99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,115,16,65,102,111,114, +99,101,17,1,20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97, +114,105,101,115,18,69,103,117,97,114,100,45,101,118,116,19,71,105,100,101,110, +116,105,102,105,101,114,63,20,1,23,105,110,116,101,114,97,99,116,105,111,110, +45,101,110,118,105,114,111,110,109,101,110,116,21,73,108,111,97,100,45,114,101, +108,97,116,105,118,101,22,1,23,108,111,97,100,45,114,101,108,97,116,105,118, +101,45,101,120,116,101,110,115,105,111,110,23,67,108,111,97,100,47,99,100,24, +77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,25,76,110, +111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,26,76,110,117,108,108, +45,101,110,118,105,114,111,110,109,101,110,116,27,1,27,112,97,116,104,45,108, +105,115,116,45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116, +28,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120, +29,72,112,97,116,104,45,115,116,114,105,110,103,63,30,65,112,111,114,116,63, +31,68,112,114,111,109,105,115,101,63,32,71,114,97,116,105,111,110,97,108,105, +122,101,33,1,20,114,101,97,100,45,101,118,97,108,45,112,114,105,110,116,45, +108,111,111,112,34,1,25,115,99,104,101,109,101,45,114,101,112,111,114,116,45, +101,110,118,105,114,111,110,109,101,110,116,35,64,108,101,116,42,36,77,117,110, +115,121,110,116,97,120,45,115,112,108,105,99,105,110,103,37,1,28,109,122,115, +99,104,101,109,101,45,105,110,45,115,116,120,45,109,111,100,117,108,101,45,98, +101,103,105,110,38,70,108,101,116,45,115,121,110,116,97,120,39,76,98,101,103, +105,110,45,102,111,114,45,115,121,110,116,97,120,40,63,97,110,100,41,62,111, +114,42,72,115,121,110,116,97,120,45,114,117,108,101,115,43,71,115,101,116,33, +45,118,97,108,117,101,115,44,64,99,111,110,100,45,63,108,101,116,46,70,115, +121,110,116,97,120,47,108,111,99,47,66,117,110,108,101,115,115,48,71,119,105, +116,104,45,115,121,110,116,97,120,49,70,108,101,116,45,115,116,114,117,99,116, +50,66,100,101,102,105,110,101,51,65,100,101,108,97,121,52,66,108,101,116,114, +101,99,53,66,108,101,116,47,99,99,54,77,35,37,116,111,112,45,105,110,116, +101,114,97,99,116,105,111,110,55,77,100,101,102,105,110,101,45,102,111,114,45, +115,121,110,116,97,120,56,64,99,97,115,101,57,73,100,101,102,105,110,101,45, +115,116,114,117,99,116,58,2,3,75,108,101,116,114,101,99,45,115,121,110,116, +97,120,101,115,59,73,108,101,116,114,101,99,45,115,121,110,116,97,120,60,64, +116,105,109,101,61,72,108,101,116,45,115,121,110,116,97,120,101,115,62,66,115, +121,110,116,97,120,63,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101, +115,64,75,113,117,97,115,105,115,121,110,116,97,120,47,108,111,99,65,64,119, +104,101,110,66,72,115,121,110,116,97,120,45,99,97,115,101,42,67,66,108,101, +116,47,101,99,68,72,112,97,114,97,109,101,116,101,114,105,122,101,69,78,112, +97,114,97,109,101,116,101,114,105,122,101,45,98,114,101,97,107,70,73,119,105, +116,104,45,104,97,110,100,108,101,114,115,71,74,119,105,116,104,45,104,97,110, +100,108,101,114,115,42,72,79,109,101,109,111,114,121,45,116,114,97,99,101,45, +108,97,109,98,100,97,73,62,100,111,74,69,102,108,117,105,100,45,108,101,116, +75,73,100,101,102,105,110,101,45,115,121,110,116,97,120,76,70,113,117,97,115, +105,113,117,111,116,101,77,68,117,110,115,121,110,116,97,120,78,71,113,117,97, +115,105,115,121,110,116,97,120,79,71,115,121,110,116,97,120,45,99,97,115,101, +80,16,78,73,35,37,109,111,114,101,45,115,99,104,101,109,101,81,2,81,2, +81,66,35,37,109,105,115,99,82,2,82,2,82,76,35,37,115,116,120,99,97, +115,101,45,115,99,104,101,109,101,83,2,82,2,81,2,82,2,81,2,82,2, +82,2,81,70,35,37,119,105,116,104,45,115,116,120,84,2,82,65,35,37,115, +116,120,85,2,82,2,82,2,82,2,82,2,82,2,82,2,82,2,82,2,82, +2,82,2,82,2,81,2,82,2,82,2,82,71,35,37,113,113,45,97,110,100, +45,111,114,86,67,35,37,113,113,115,116,120,87,72,35,37,115,116,120,109,122, +45,98,111,100,121,88,2,83,68,35,37,100,101,102,105,110,101,89,2,86,2, +86,2,83,2,81,66,35,37,99,111,110,100,90,2,86,68,35,37,115,116,120, +108,111,99,91,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,92,2, +84,2,81,2,89,2,81,2,86,2,81,2,88,2,89,2,81,2,92,68,35, +37,107,101,114,110,101,108,93,2,83,2,83,2,81,2,83,69,35,37,115,116, +120,99,97,115,101,94,2,83,2,87,2,92,2,91,2,92,2,81,2,81,2, +81,2,81,2,82,2,81,2,81,2,89,2,86,2,87,2,87,2,91,16,78, +2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2, +14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24, +2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2, +35,2,36,2,37,2,3,2,39,2,40,2,41,2,42,2,43,2,44,2,45, +2,46,2,47,2,48,2,49,2,50,2,51,2,52,2,53,2,54,2,55,2, +56,2,57,2,58,1,20,35,37,112,108,97,105,110,45,109,111,100,117,108,101, +45,98,101,103,105,110,95,2,59,2,60,2,61,2,62,2,63,2,64,2,65, +2,66,2,67,2,68,2,69,2,70,2,71,2,72,2,73,2,74,2,75,2, +76,2,77,2,78,2,79,2,80,8,32,8,78,9,9,101,2,93,2,81,2, +82,2,83,2,85,2,88,2,87,2,89,68,35,37,101,120,112,111,98,115,96, +9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 1807); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,134,252,16,13,159,34,20,99,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,136,252,51,13,159,34,20,99,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,96,114,66,35,37,114,53, 114,115,1,29,2,11,11,10,10,10,35,80,158,34,34,20,99,159,34,16,1, 30,3,2,2,69,117,110,100,101,102,105,110,101,100,4,254,1,16,0,11,11, -16,1,2,4,35,11,16,24,64,108,101,116,42,5,73,108,101,116,114,101,99, -45,115,121,110,116,97,120,6,70,108,101,116,45,115,121,110,116,97,120,7,63, -97,110,100,8,62,100,111,9,64,99,111,110,100,10,62,111,114,11,65,113,117, -111,116,101,12,64,99,97,115,101,13,65,35,37,97,112,112,14,67,35,37,100, -97,116,117,109,15,63,108,101,116,16,66,100,101,102,105,110,101,17,67,117,110, -113,117,111,116,101,18,65,100,101,108,97,121,19,76,117,110,113,117,111,116,101, -45,115,112,108,105,99,105,110,103,20,70,113,117,97,115,105,113,117,111,116,101, -21,73,100,101,102,105,110,101,45,115,121,110,116,97,120,22,66,108,97,109,98, -100,97,23,2,0,62,105,102,24,71,114,53,114,115,58,108,101,116,114,101,99, -25,64,115,101,116,33,26,65,35,37,116,111,112,27,16,24,71,35,37,113,113, -45,97,110,100,45,111,114,28,76,35,37,115,116,120,99,97,115,101,45,115,99, -104,101,109,101,29,2,29,2,28,73,35,37,109,111,114,101,45,115,99,104,101, -109,101,30,66,35,37,99,111,110,100,31,2,28,68,35,37,107,101,114,110,101, -108,32,2,30,2,32,2,32,2,28,68,35,37,100,101,102,105,110,101,33,2, -32,2,30,2,32,2,28,2,33,2,32,2,32,2,32,11,2,32,2,32,16, -24,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14, -2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,0,2, -24,66,108,101,116,114,101,99,34,2,26,2,27,34,58,93,16,5,93,2,25, -87,98,83,159,34,93,80,159,34,8,30,35,89,162,35,35,41,9,223,0,251, -80,158,38,46,20,15,159,38,44,47,21,94,3,1,4,103,57,53,50,35,3, -1,4,103,57,53,49,36,248,22,58,198,248,22,84,198,83,159,34,93,80,159, -34,8,29,35,89,162,35,35,41,9,223,0,251,80,158,38,46,20,15,159,38, -40,47,21,94,3,1,4,103,57,52,54,37,3,1,4,103,57,52,53,38,248, -22,58,198,248,22,84,198,83,159,34,93,80,159,34,8,28,35,89,162,35,35, -41,9,223,0,251,80,158,38,46,20,15,159,38,39,47,21,94,3,1,4,103, -57,52,51,39,3,1,4,103,57,52,50,40,248,22,58,198,248,22,84,198,83, -159,34,93,80,159,34,8,27,35,89,162,35,35,40,9,223,0,250,80,158,37, -46,20,15,159,37,38,47,21,93,3,1,4,103,57,52,49,41,248,22,58,197, -83,159,34,93,80,159,34,8,26,35,89,162,35,35,41,9,223,0,251,80,158, -38,46,20,15,159,38,35,47,21,94,3,1,4,103,57,51,55,42,3,1,4, -103,57,51,54,43,248,22,58,198,248,22,84,198,89,162,34,35,54,9,223,0, -27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197,27,248, -80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,38,27,248,80,158, -42,36,196,28,248,80,158,42,39,193,248,22,8,89,162,34,35,41,9,224,8, -1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40,28,248, -80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41, -37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248, -80,158,43,41,248,80,158,44,37,196,11,11,194,248,80,158,39,42,196,28,248, -22,63,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,42,37,196, -28,248,80,158,42,39,193,248,80,158,42,42,193,11,11,11,28,192,27,248,22, -58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,94,197,249,80,158,41, -44,200,27,250,22,67,199,198,200,250,80,158,45,45,89,162,34,34,45,9,224, -11,3,252,80,158,40,46,20,15,159,40,34,47,21,95,3,1,4,103,57,52, -48,44,3,1,4,103,57,51,57,45,3,1,4,103,57,51,56,46,248,22,86, -198,250,22,2,80,159,43,8,26,35,248,22,86,201,248,22,58,201,248,22,84, -198,21,99,2,25,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112, -95,110,97,109,101,115,47,94,64,118,97,114,49,48,63,46,46,46,49,9,94, -94,2,48,65,105,110,105,116,49,50,2,49,64,98,111,100,121,51,2,49,20, -15,159,45,36,47,27,28,248,80,158,37,34,196,249,80,158,38,35,248,80,158, -39,36,198,27,248,80,158,40,37,199,28,248,80,158,40,34,193,28,27,248,80, -158,41,36,194,28,249,22,252,21,2,6,19,19,103,101,110,101,114,97,116,101, -95,116,101,109,112,95,110,97,109,101,115,52,248,22,217,195,9,11,27,248,80, -158,41,37,194,28,248,80,158,41,34,193,28,248,80,158,41,41,248,80,158,42, -36,194,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80,158,43,38, -27,248,80,158,45,36,196,28,248,80,158,45,39,193,248,22,65,248,80,158,46, -42,194,11,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249,80,158,46, -38,27,248,80,158,48,36,196,28,248,80,158,48,39,193,248,22,8,89,162,34, -35,41,9,224,14,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80, -158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199, -27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80, -158,43,36,195,248,80,158,43,41,248,80,158,44,37,196,11,11,194,248,80,158, -39,42,196,28,248,22,63,193,21,94,9,9,248,80,158,37,43,193,11,27,248, -80,158,48,37,196,28,248,80,158,48,39,193,248,80,158,48,42,193,11,11,11, -11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22,93, -196,27,248,22,96,197,27,248,22,95,198,249,80,158,43,44,202,27,251,22,67, -200,201,202,199,250,80,158,47,45,89,162,34,34,47,9,224,13,3,252,80,158, -40,46,20,15,159,40,37,47,21,95,3,1,4,103,57,52,57,53,3,1,4, -103,57,52,56,54,3,1,4,103,57,52,55,55,249,22,2,80,159,42,8,27, -35,248,22,84,200,250,22,2,80,159,43,8,28,35,248,22,93,201,248,22,58, -201,249,22,71,250,22,2,80,159,45,8,29,35,248,22,84,203,248,22,93,203, -250,80,158,45,46,20,15,159,45,41,47,21,93,3,1,4,103,57,52,52,56, -248,22,94,203,21,95,2,16,94,94,2,48,2,4,2,49,97,2,16,94,94, -65,116,101,109,112,49,57,2,50,2,49,95,2,26,2,48,2,57,2,49,96, -2,16,9,2,51,2,49,20,15,159,47,42,47,27,28,248,80,158,38,34,197, -249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80, -158,41,34,193,28,27,248,80,158,42,36,194,28,249,22,252,21,2,6,19,19, -103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,58,248, -22,217,195,9,11,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80, -158,43,38,27,248,80,158,45,36,196,28,248,80,158,45,34,193,249,80,158,46, -35,248,80,158,47,36,195,27,248,80,158,48,37,196,28,248,80,158,48,39,193, -248,22,65,248,80,158,49,42,194,11,11,27,248,80,158,45,37,196,28,248,80, -158,45,34,193,249,80,158,46,38,27,248,80,158,48,36,196,28,248,80,158,48, -39,193,248,22,65,248,80,158,49,42,194,11,27,248,80,158,48,37,196,28,248, -80,158,48,34,193,249,80,158,49,38,27,248,80,158,51,36,196,28,248,80,158, -51,39,193,248,22,8,89,162,34,35,41,9,224,17,1,27,249,22,2,89,162, +16,1,2,4,35,11,16,25,64,108,101,116,42,5,66,108,97,109,98,100,97, +6,73,100,101,102,105,110,101,45,115,121,110,116,97,120,7,70,113,117,97,115, +105,113,117,111,116,101,8,63,97,110,100,9,65,100,101,108,97,121,10,77,35, +37,116,111,112,45,105,110,116,101,114,97,99,116,105,111,110,11,71,114,53,114, +115,58,108,101,116,114,101,99,12,62,111,114,13,65,35,37,97,112,112,14,62, +100,111,15,67,35,37,100,97,116,117,109,16,63,108,101,116,17,64,99,111,110, +100,18,67,117,110,113,117,111,116,101,19,70,108,101,116,45,115,121,110,116,97, +120,20,76,117,110,113,117,111,116,101,45,115,112,108,105,99,105,110,103,21,66, +100,101,102,105,110,101,22,64,115,101,116,33,23,2,0,62,105,102,24,65,113, +117,111,116,101,25,73,108,101,116,114,101,99,45,115,121,110,116,97,120,26,64, +99,97,115,101,27,65,35,37,116,111,112,28,16,25,71,35,37,113,113,45,97, +110,100,45,111,114,29,68,35,37,107,101,114,110,101,108,30,68,35,37,100,101, +102,105,110,101,31,2,29,2,29,73,35,37,109,111,114,101,45,115,99,104,101, +109,101,32,72,35,37,115,116,120,109,122,45,98,111,100,121,33,11,2,29,2, +30,2,32,2,30,2,29,66,35,37,99,111,110,100,34,2,30,76,35,37,115, +116,120,99,97,115,101,45,115,99,104,101,109,101,35,2,30,2,31,2,30,2, +30,2,30,2,30,2,35,2,32,2,30,16,25,2,5,2,6,2,7,2,8, +2,9,2,10,2,11,66,108,101,116,114,101,99,36,2,13,2,14,2,15,2, +16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,0,2,24,2,25, +2,26,2,27,2,28,34,59,93,16,5,93,2,12,87,98,83,159,34,93,80, +159,34,8,30,35,89,162,35,35,41,9,223,0,251,80,158,38,46,20,15,159, +38,44,47,21,94,3,1,4,103,57,53,50,37,3,1,4,103,57,53,49,38, +248,22,58,198,248,22,84,198,83,159,34,93,80,159,34,8,29,35,89,162,35, +35,41,9,223,0,251,80,158,38,46,20,15,159,38,40,47,21,94,3,1,4, +103,57,52,54,39,3,1,4,103,57,52,53,40,248,22,58,198,248,22,84,198, +83,159,34,93,80,159,34,8,28,35,89,162,35,35,41,9,223,0,251,80,158, +38,46,20,15,159,38,39,47,21,94,3,1,4,103,57,52,51,41,3,1,4, +103,57,52,50,42,248,22,58,198,248,22,84,198,83,159,34,93,80,159,34,8, +27,35,89,162,35,35,40,9,223,0,250,80,158,37,46,20,15,159,37,38,47, +21,93,3,1,4,103,57,52,49,43,248,22,58,197,83,159,34,93,80,159,34, +8,26,35,89,162,35,35,41,9,223,0,251,80,158,38,46,20,15,159,38,35, +47,21,94,3,1,4,103,57,51,55,44,3,1,4,103,57,51,54,45,248,22, +58,198,248,22,84,198,89,162,34,35,54,9,223,0,27,28,248,80,158,36,34, +195,249,80,158,37,35,248,80,158,38,36,197,27,248,80,158,39,37,198,28,248, +80,158,39,34,193,249,80,158,40,38,27,248,80,158,42,36,196,28,248,80,158, +42,39,193,248,22,8,89,162,34,35,41,9,224,8,1,27,249,22,2,89,162, 34,35,46,9,224,4,5,249,80,158,37,40,28,248,80,158,38,34,197,249,80, 158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41, 34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,41,248,80,158, 44,37,196,11,11,194,248,80,158,39,42,196,28,248,22,63,193,21,94,9,9, -248,80,158,37,43,193,11,27,248,80,158,51,37,196,28,248,80,158,51,39,193, -248,80,158,51,42,193,11,11,11,11,11,11,11,28,192,27,248,22,58,194,27, -248,22,84,195,27,248,22,93,196,27,248,22,96,197,27,249,22,76,199,38,27, -249,22,76,200,39,27,249,22,75,201,40,249,80,158,46,44,205,27,252,22,67, -201,200,203,204,202,250,80,158,50,45,89,162,34,34,46,9,224,16,3,253,80, -158,41,46,20,15,159,41,43,47,21,96,3,1,4,103,57,53,53,59,3,1, -4,103,57,53,48,60,3,1,4,103,57,53,52,61,3,1,4,103,57,53,51, -62,248,22,96,199,248,22,93,199,250,22,2,80,159,44,8,30,35,248,22,95, -202,248,22,58,202,248,22,84,199,21,99,2,25,6,19,19,103,101,110,101,114, -97,116,101,95,116,101,109,112,95,110,97,109,101,115,63,94,61,121,64,2,49, -95,67,110,101,119,116,101,109,112,65,64,116,101,109,112,66,2,49,94,94,2, -48,2,50,2,49,2,51,2,49,20,15,159,50,45,47,250,22,252,47,2,11, -6,10,10,98,97,100,32,115,121,110,116,97,120,67,199,34,20,99,159,39,16, -13,30,68,65,35,37,115,116,120,69,69,115,116,120,45,112,97,105,114,63,70, -11,30,71,2,69,67,99,111,110,115,47,35,102,72,1,30,73,2,69,67,115, -116,120,45,99,97,114,74,5,30,75,2,69,67,115,116,120,45,99,100,114,76, -6,30,77,2,69,69,97,112,112,101,110,100,47,35,102,78,0,30,79,2,69, -69,115,116,120,45,108,105,115,116,63,80,8,30,81,2,69,73,115,116,120,45, -99,104,101,99,107,47,101,115,99,82,7,30,83,2,69,71,115,116,120,45,110, -117,108,108,47,35,102,84,9,30,85,2,69,69,115,116,120,45,62,108,105,115, -116,86,4,30,87,2,69,70,115,116,120,45,114,111,116,97,116,101,88,12,30, -89,68,35,37,115,116,120,108,111,99,90,68,114,101,108,111,99,97,116,101,91, -0,30,92,69,35,37,115,116,120,99,97,115,101,93,1,20,99,97,116,99,104, -45,101,108,108,105,112,115,105,115,45,101,114,114,111,114,94,1,30,95,2,93, -1,24,97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116, -105,116,117,116,101,96,0,16,12,18,158,164,39,99,2,25,41,98,39,10,34, -11,93,159,68,109,122,115,99,104,101,109,101,97,9,11,16,4,2,25,2,2, -2,4,2,2,98,38,10,35,11,93,159,2,97,9,11,16,0,96,37,8,254, -1,11,16,0,16,8,36,11,3,1,4,103,57,51,51,98,3,1,4,103,57, -51,52,99,3,1,4,103,57,51,53,100,3,1,7,101,110,118,52,56,49,52, -101,2,101,2,101,16,8,35,11,2,48,2,50,2,51,3,1,7,101,110,118, -52,56,49,53,102,2,102,2,102,158,2,47,41,158,2,44,41,158,9,41,158, -2,45,41,2,46,41,41,18,158,95,10,2,42,2,43,41,18,16,2,96,2, -49,43,93,8,252,233,15,16,4,42,11,61,114,103,3,1,7,101,110,118,52, -56,50,53,104,95,9,8,252,233,15,2,93,18,158,95,99,2,16,46,39,38, -37,16,10,45,11,3,1,4,103,57,50,56,105,3,1,4,103,57,50,57,106, -3,1,4,103,57,51,48,107,3,1,4,103,57,51,49,108,3,1,7,101,110, -118,52,56,52,51,109,2,109,2,109,2,109,16,10,44,11,2,57,2,48,2, -50,2,51,3,1,7,101,110,118,52,56,52,52,110,2,110,2,110,2,110,158, -2,53,46,158,160,10,2,16,2,54,2,55,46,46,18,158,95,10,2,41,2, -4,46,18,158,95,10,2,39,2,40,46,18,158,96,10,2,26,2,37,2,38, -46,18,16,2,103,93,158,160,10,2,16,9,2,56,46,54,98,53,10,34,11, -95,159,68,35,37,112,97,114,97,109,122,111,9,11,159,74,35,37,115,109,97, -108,108,45,115,99,104,101,109,101,112,9,11,159,2,69,9,11,16,14,66,115, -121,110,116,97,120,113,29,114,11,11,73,115,121,110,116,97,120,45,99,97,115, -101,42,42,115,2,114,2,94,2,114,78,112,97,116,116,101,114,110,45,115,117, -98,115,116,105,116,117,116,101,116,2,114,1,26,100,97,116,117,109,45,62,115, -121,110,116,97,120,45,111,98,106,101,99,116,47,115,104,97,112,101,117,2,114, -2,96,2,114,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112,118, -2,114,98,52,10,35,11,95,159,64,35,37,115,99,119,9,11,159,2,112,9, -11,159,2,69,9,11,16,0,96,51,8,254,1,11,16,0,16,4,50,11,61, -120,120,3,1,6,101,110,118,52,53,52,121,16,4,49,11,68,104,101,114,101, -45,115,116,120,122,3,1,6,101,110,118,52,53,54,123,16,4,48,11,2,122, -2,123,13,16,4,35,2,114,2,93,11,93,8,252,241,15,16,4,47,11,2, -103,3,1,7,101,110,118,52,56,53,54,124,95,9,8,252,241,15,2,93,18, -16,2,96,2,49,56,93,8,252,241,15,16,4,55,11,2,103,2,124,95,9, -8,252,241,15,2,93,18,158,164,39,99,2,25,59,39,38,37,16,14,58,11, -3,1,4,103,57,50,49,125,3,1,4,103,57,50,50,126,3,1,4,103,57, -50,51,127,3,1,4,103,57,50,52,128,3,1,4,103,57,50,53,129,3,1, -4,103,57,50,54,130,3,1,7,101,110,118,52,56,56,48,131,2,131,2,131, -2,131,2,131,2,131,16,14,57,11,2,120,2,64,2,66,2,48,2,50,2, -51,3,1,7,101,110,118,52,56,56,49,132,2,132,2,132,2,132,2,132,2, -132,158,2,63,59,158,2,59,59,158,159,10,2,65,2,60,59,158,2,61,59, -2,62,59,59,18,158,95,10,2,35,2,36,59,18,16,2,96,2,49,8,27, -93,8,252,253,15,16,4,8,26,11,2,103,3,1,7,101,110,118,52,56,57, -55,133,95,9,8,252,253,15,2,93,11,93,83,159,34,93,80,159,34,34,35, -91,159,35,10,90,161,35,34,10,207,207,93,2,97,93,2,97,0}; - EVAL_ONE_SIZED_STR((char *)expr, 3356); +248,80,158,37,43,193,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193, +248,80,158,42,42,193,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195, +27,248,22,93,196,27,248,22,94,197,249,80,158,41,44,200,27,250,22,67,200, +198,199,250,80,158,45,45,89,162,34,34,45,9,224,11,3,252,80,158,40,46, +20,15,159,40,34,47,21,95,3,1,4,103,57,52,48,46,3,1,4,103,57, +51,57,47,3,1,4,103,57,51,56,48,248,22,58,198,250,22,2,80,159,43, +8,26,35,248,22,58,201,248,22,86,201,248,22,84,198,21,99,2,12,6,19, +19,103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,49, +94,64,118,97,114,49,50,63,46,46,46,51,9,94,94,2,50,65,105,110,105, +116,49,52,2,51,64,98,111,100,121,53,2,51,20,15,159,45,36,47,27,28, +248,80,158,37,34,196,249,80,158,38,35,248,80,158,39,36,198,27,248,80,158, +40,37,199,28,248,80,158,40,34,193,28,27,248,80,158,41,36,194,28,249,22, +252,21,2,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112,95,110, +97,109,101,115,54,248,22,217,195,9,11,27,248,80,158,41,37,194,28,248,80, +158,41,34,193,28,248,80,158,41,41,248,80,158,42,36,194,27,248,80,158,42, +37,194,28,248,80,158,42,34,193,249,80,158,43,38,27,248,80,158,45,36,196, +28,248,80,158,45,39,193,248,22,65,248,80,158,46,42,194,11,27,248,80,158, +45,37,196,28,248,80,158,45,34,193,249,80,158,46,38,27,248,80,158,48,36, +196,28,248,80,158,48,39,193,248,22,8,89,162,34,35,41,9,224,14,1,27, +249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40,28,248,80,158, +38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200, +28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158, +43,41,248,80,158,44,37,196,11,11,194,248,80,158,39,42,196,28,248,22,63, +193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,48,37,196,28,248, +80,158,48,39,193,248,80,158,48,42,193,11,11,11,11,11,11,11,11,28,192, +27,248,22,58,194,27,248,22,84,195,27,248,22,93,196,27,248,22,96,197,27, +248,22,95,198,249,80,158,43,44,202,27,251,22,67,199,202,200,201,250,80,158, +47,45,89,162,34,34,47,9,224,13,3,252,80,158,40,46,20,15,159,40,37, +47,21,95,3,1,4,103,57,52,57,55,3,1,4,103,57,52,56,56,3,1, +4,103,57,52,55,57,249,22,2,80,159,42,8,27,35,248,22,94,200,250,22, +2,80,159,43,8,28,35,248,22,84,201,248,22,93,201,249,22,71,250,22,2, +80,159,45,8,29,35,248,22,94,203,248,22,84,203,250,80,158,45,46,20,15, +159,45,41,47,21,93,3,1,4,103,57,52,52,58,248,22,58,203,21,95,2, +17,94,94,2,50,2,4,2,51,97,2,17,94,94,65,116,101,109,112,49,59, +2,52,2,51,95,2,23,2,50,2,59,2,51,96,2,17,9,2,53,2,51, +20,15,159,47,42,47,27,28,248,80,158,38,34,197,249,80,158,39,35,248,80, +158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,28,27,248, +80,158,42,36,194,28,249,22,252,21,2,6,19,19,103,101,110,101,114,97,116, +101,95,116,101,109,112,95,110,97,109,101,115,60,248,22,217,195,9,11,27,248, +80,158,42,37,194,28,248,80,158,42,34,193,249,80,158,43,38,27,248,80,158, +45,36,196,28,248,80,158,45,34,193,249,80,158,46,35,248,80,158,47,36,195, +27,248,80,158,48,37,196,28,248,80,158,48,39,193,248,22,65,248,80,158,49, +42,194,11,11,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249,80,158, +46,38,27,248,80,158,48,36,196,28,248,80,158,48,39,193,248,22,65,248,80, +158,49,42,194,11,27,248,80,158,48,37,196,28,248,80,158,48,34,193,249,80, +158,49,38,27,248,80,158,51,36,196,28,248,80,158,51,39,193,248,22,8,89, +162,34,35,41,9,224,17,1,27,249,22,2,89,162,34,35,46,9,224,4,5, +249,80,158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40, +36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35, +248,80,158,43,36,195,248,80,158,43,41,248,80,158,44,37,196,11,11,194,248, +80,158,39,42,196,28,248,22,63,193,21,94,9,9,248,80,158,37,43,193,11, +27,248,80,158,51,37,196,28,248,80,158,51,39,193,248,80,158,51,42,193,11, +11,11,11,11,11,11,28,192,27,248,22,58,194,27,248,22,84,195,27,248,22, +93,196,27,248,22,96,197,27,249,22,76,199,38,27,249,22,76,200,39,27,249, +22,75,201,40,249,80,158,46,44,205,27,252,22,67,201,202,204,200,203,250,80, +158,50,45,89,162,34,34,46,9,224,16,3,253,80,158,41,46,20,15,159,41, +43,47,21,96,3,1,4,103,57,53,53,61,3,1,4,103,57,53,48,62,3, +1,4,103,57,53,52,63,3,1,4,103,57,53,51,64,248,22,93,199,248,22, +95,199,250,22,2,80,159,44,8,30,35,248,22,84,202,248,22,58,202,248,22, +96,199,21,99,2,12,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109, +112,95,110,97,109,101,115,65,94,61,121,66,2,51,95,67,110,101,119,116,101, +109,112,67,64,116,101,109,112,68,2,51,94,94,2,50,2,52,2,51,2,53, +2,51,20,15,159,50,45,47,250,22,252,47,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,69,199,34,20,99,159,39,16,13,30,70,65,35,37,115, +116,120,71,69,115,116,120,45,112,97,105,114,63,72,11,30,73,2,71,67,99, +111,110,115,47,35,102,74,1,30,75,2,71,67,115,116,120,45,99,97,114,76, +5,30,77,2,71,67,115,116,120,45,99,100,114,78,6,30,79,2,71,69,97, +112,112,101,110,100,47,35,102,80,0,30,81,2,71,69,115,116,120,45,108,105, +115,116,63,82,8,30,83,2,71,73,115,116,120,45,99,104,101,99,107,47,101, +115,99,84,7,30,85,2,71,71,115,116,120,45,110,117,108,108,47,35,102,86, +9,30,87,2,71,69,115,116,120,45,62,108,105,115,116,88,4,30,89,2,71, +70,115,116,120,45,114,111,116,97,116,101,90,12,30,91,68,35,37,115,116,120, +108,111,99,92,68,114,101,108,111,99,97,116,101,93,0,30,94,69,35,37,115, +116,120,99,97,115,101,95,1,20,99,97,116,99,104,45,101,108,108,105,112,115, +105,115,45,101,114,114,111,114,96,1,30,97,2,95,1,24,97,112,112,108,121, +45,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,98,0, +16,12,18,158,164,39,99,2,12,41,98,39,10,34,11,93,159,68,109,122,115, +99,104,101,109,101,99,9,11,16,4,2,12,2,2,2,4,2,2,98,38,10, +35,11,93,159,2,99,9,11,16,0,96,37,8,254,1,11,16,0,16,8,36, +11,3,1,4,103,57,51,51,100,3,1,4,103,57,51,52,101,3,1,4,103, +57,51,53,102,3,1,7,101,110,118,52,56,49,56,103,2,103,2,103,16,8, +35,11,2,50,2,52,2,53,3,1,7,101,110,118,52,56,49,57,104,2,104, +2,104,158,2,49,41,158,2,46,41,158,9,41,158,2,47,41,2,48,41,41, +18,158,95,10,2,44,2,45,41,18,16,2,96,2,51,43,93,8,252,233,15, +16,4,42,11,61,114,105,3,1,7,101,110,118,52,56,50,57,106,95,9,8, +252,233,15,2,95,18,158,95,99,2,17,46,39,38,37,16,10,45,11,3,1, +4,103,57,50,56,107,3,1,4,103,57,50,57,108,3,1,4,103,57,51,48, +109,3,1,4,103,57,51,49,110,3,1,7,101,110,118,52,56,52,55,111,2, +111,2,111,2,111,16,10,44,11,2,59,2,50,2,52,2,53,3,1,7,101, +110,118,52,56,52,56,112,2,112,2,112,2,112,158,2,55,46,158,160,10,2, +17,2,56,2,57,46,46,18,158,95,10,2,43,2,4,46,18,158,95,10,2, +41,2,42,46,18,158,96,10,2,23,2,39,2,40,46,18,16,2,103,93,158, +160,10,2,17,9,2,58,46,54,98,53,10,34,11,95,159,68,35,37,112,97, +114,97,109,122,113,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101, +109,101,114,9,11,159,2,71,9,11,16,14,73,115,121,110,116,97,120,45,99, +97,115,101,42,42,115,29,116,11,11,1,26,100,97,116,117,109,45,62,115,121, +110,116,97,120,45,111,98,106,101,99,116,47,115,104,97,112,101,117,2,116,66, +115,121,110,116,97,120,118,2,116,2,98,2,116,78,112,97,116,116,101,114,110, +45,115,117,98,115,116,105,116,117,116,101,119,2,116,75,115,117,98,115,116,105, +116,117,116,101,45,115,116,111,112,120,2,116,2,96,2,116,98,52,10,35,11, +95,159,64,35,37,115,99,121,9,11,159,2,114,9,11,159,2,71,9,11,16, +0,96,51,8,254,1,11,16,0,16,4,50,11,61,120,122,3,1,6,101,110, +118,52,53,52,123,16,4,49,11,68,104,101,114,101,45,115,116,120,124,3,1, +6,101,110,118,52,53,54,125,16,4,48,11,2,124,2,125,13,16,4,35,2, +116,2,95,11,93,8,252,241,15,16,4,47,11,2,105,3,1,7,101,110,118, +52,56,54,48,126,95,9,8,252,241,15,2,95,18,16,2,96,2,51,56,93, +8,252,241,15,16,4,55,11,2,105,2,126,95,9,8,252,241,15,2,95,18, +158,164,39,99,2,12,59,39,38,37,16,14,58,11,3,1,4,103,57,50,49, +127,3,1,4,103,57,50,50,128,3,1,4,103,57,50,51,129,3,1,4,103, +57,50,52,130,3,1,4,103,57,50,53,131,3,1,4,103,57,50,54,132,3, +1,7,101,110,118,52,56,56,52,133,2,133,2,133,2,133,2,133,2,133,16, +14,57,11,2,122,2,66,2,68,2,50,2,52,2,53,3,1,7,101,110,118, +52,56,56,53,134,2,134,2,134,2,134,2,134,2,134,158,2,65,59,158,2, +61,59,158,159,10,2,67,2,62,59,158,2,63,59,2,64,59,59,18,158,95, +10,2,37,2,38,59,18,16,2,96,2,51,8,27,93,8,252,253,15,16,4, +8,26,11,2,105,3,1,7,101,110,118,52,57,48,49,135,95,9,8,252,253, +15,2,95,11,93,83,159,34,93,80,159,34,34,35,91,159,35,10,90,161,35, +34,10,207,207,93,2,99,93,2,99,0}; + EVAL_ONE_SIZED_STR((char *)expr, 3391); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,5,89,159,34,20,99,159,34,16,1,20,24,65, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,5,89,159,34,20,99,159,34,16,1,20,24,65, 98,101,103,105,110,0,16,0,83,160,42,80,158,34,34,34,18,158,94,96,67, 114,101,113,117,105,114,101,1,36,10,11,158,96,10,64,111,110,108,121,2,68, 109,122,115,99,104,101,109,101,3,1,22,110,97,109,101,115,112,97,99,101,45, @@ -4382,17 +4391,17 @@ EVAL_ONE_SIZED_STR((char *)expr, 99); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,3,74,159,35,20,99,159,34,16,1,20,24,65, -98,101,103,105,110,0,16,0,87,94,248,22,248,68,109,122,115,99,104,101,109, -101,1,83,160,42,80,158,34,34,35,18,158,94,96,78,114,101,113,117,105,114, -101,45,102,111,114,45,115,121,110,116,97,120,2,36,10,11,158,2,1,36,36, -0}; - EVAL_ONE_SIZED_STR((char *)expr, 84); + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,3,77,159,35,20,99,159,34,16,1,20,24,65, +98,101,103,105,110,0,16,0,83,158,46,87,94,248,22,248,68,109,122,115,99, +104,101,109,101,1,83,160,42,80,158,34,34,35,18,158,94,96,78,114,101,113, +117,105,114,101,45,102,111,114,45,115,121,110,116,97,120,2,36,10,11,158,2, +1,36,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 87); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,49,2,67,159,38,20,99,159,34,16,0,16,0,248, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,54,57,46,50,2,67,159,38,20,99,159,34,16,0,16,0,248, 22,240,248,249,22,242,66,35,37,109,105,115,99,0,1,34,109,97,107,101,45, 115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45, -114,101,115,111,108,118,101,114,1,247,22,252,220,2,0}; +114,101,115,111,108,118,101,114,1,247,22,252,222,2,0}; EVAL_ONE_SIZED_STR((char *)expr, 77); } diff --git a/src/mzscheme/src/error.c b/src/mzscheme/src/error.c index 2f2d1dfe67..1b497e7752 100644 --- a/src/mzscheme/src/error.c +++ b/src/mzscheme/src/error.c @@ -631,9 +631,8 @@ call_error(char *buffer, int len, Scheme_Object *exn) scheme_make_pair(v, exn), "nested-exception-handler", 1, 1); - config = scheme_extend_config(orig_config, - MZCONFIG_EXN_HANDLER, - v); + + config = orig_config; if (SAME_OBJ(display_handler, default_display_handler)) config = scheme_extend_config(config, MZCONFIG_ERROR_DISPLAY_HANDLER, @@ -645,6 +644,7 @@ call_error(char *buffer, int len, Scheme_Object *exn) scheme_push_continuation_frame(&cframe); scheme_install_config(config); + scheme_set_cont_mark(scheme_exn_handler_key, v); scheme_push_break_enable(&cframe2, 0, 0); p[0] = scheme_make_immutable_sized_utf8_string(buffer, len); @@ -656,9 +656,7 @@ call_error(char *buffer, int len, Scheme_Object *exn) scheme_make_pair(v, exn), "nested-exception-handler", 1, 1); - config = scheme_extend_config(orig_config, - MZCONFIG_EXN_HANDLER, - v); + config = scheme_extend_config(config, MZCONFIG_ERROR_DISPLAY_HANDLER, default_display_handler); @@ -670,6 +668,7 @@ call_error(char *buffer, int len, Scheme_Object *exn) scheme_pop_continuation_frame(&cframe); scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(scheme_exn_handler_key, v); scheme_install_config(config); scheme_push_break_enable(&cframe2, 0, 0); @@ -2236,7 +2235,17 @@ def_error_value_string_proc(int argc, Scheme_Object *argv[]) static Scheme_Object * def_error_escape_proc(int argc, Scheme_Object *argv[]) -{ +{ + Scheme_Object *prompt; + Scheme_Thread *p = scheme_current_thread; + + prompt = scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(scheme_default_prompt_tag)); + + if (prompt) { + p->cjs.jumping_to_continuation = prompt; + p->cjs.num_vals = 1; + p->cjs.val = scheme_void_proc; + } scheme_longjmp(scheme_error_buf, 1); return scheme_void; /* Never get here */ @@ -2416,19 +2425,10 @@ def_exn_handler(int argc, Scheme_Object *argv[]) return scheme_void; } -static Scheme_Object * -exn_handler(int argc, Scheme_Object *argv[]) -{ - return scheme_param_config("current-exception-handler", - scheme_make_integer(MZCONFIG_EXN_HANDLER), - argc, argv, - 1, NULL, NULL, 0); -} - static Scheme_Object * init_exn_handler(int argc, Scheme_Object *argv[]) { - return scheme_param_config("initial-exception-handler", + return scheme_param_config("uncaught-exception-handler", scheme_make_integer(MZCONFIG_INIT_EXN_HANDLER), argc, argv, 1, NULL, NULL, 0); @@ -2486,7 +2486,6 @@ static Scheme_Object * do_raise(Scheme_Object *arg, int return_ok, int need_debug) { Scheme_Object *v, *p[1], *h; - Scheme_Config *config; Scheme_Cont_Frame_Data cframe, cframe2; if (scheme_current_thread->skip_error) { @@ -2499,8 +2498,10 @@ do_raise(Scheme_Object *arg, int return_ok, int need_debug) ((Scheme_Structure *)arg)->slots[1] = marks; } - config = scheme_current_config(); - h = scheme_get_param(config, MZCONFIG_EXN_HANDLER); + h = scheme_extract_one_cc_mark(NULL, scheme_exn_handler_key); + if (!h) { + h = scheme_get_param(scheme_current_config(), MZCONFIG_INIT_EXN_HANDLER); + } v = scheme_make_byte_string_without_copying("exception handler"); v = scheme_make_closed_prim_w_arity(nested_exn_handler, @@ -2508,12 +2509,8 @@ do_raise(Scheme_Object *arg, int return_ok, int need_debug) "nested-exception-handler", 1, 1); - config = scheme_extend_config(config, - MZCONFIG_EXN_HANDLER, - v); - scheme_push_continuation_frame(&cframe); - scheme_install_config(config); + scheme_set_cont_mark(scheme_exn_handler_key, v); scheme_push_break_enable(&cframe2, 0, 0); p[0] = arg; @@ -2702,15 +2699,9 @@ void scheme_init_exn(Scheme_Env *env) } } - scheme_add_global_constant("current-exception-handler", - scheme_register_parameter(exn_handler, - "current-exception-handler", - MZCONFIG_EXN_HANDLER), - env); - - scheme_add_global_constant("initial-exception-handler", + scheme_add_global_constant("uncaught-exception-handler", scheme_register_parameter(init_exn_handler, - "initial-exception-handler", + "uncaught-exception-handler", MZCONFIG_INIT_EXN_HANDLER), env); @@ -2731,7 +2722,6 @@ void scheme_init_exn_config(void) "default-exception-handler", 1, 1); - scheme_set_root_param(MZCONFIG_EXN_HANDLER, h); scheme_set_root_param(MZCONFIG_INIT_EXN_HANDLER, h); } diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 0534d77a40..17fe09948b 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -143,6 +143,7 @@ /* globals */ Scheme_Object *scheme_eval_waiting; Scheme_Object *scheme_multiple_values; +int scheme_continuation_application_count; volatile int scheme_fuel_counter; @@ -152,6 +153,7 @@ void scheme_set_startup_use_jit(int v) { scheme_startup_use_jit = v; } static Scheme_Object *app_symbol; static Scheme_Object *datum_symbol; static Scheme_Object *top_symbol; +static Scheme_Object *top_level_symbol; static Scheme_Object *app_expander; static Scheme_Object *datum_expander; @@ -222,7 +224,6 @@ static Scheme_Object *internal_define_symbol; static Scheme_Object *module_symbol; static Scheme_Object *module_begin_symbol; static Scheme_Object *expression_symbol; -static Scheme_Object *top_level_symbol; static Scheme_Object *protected_symbol; @@ -234,6 +235,8 @@ static Scheme_Object *scheme_compile_expand_expr(Scheme_Object *form, Scheme_Com Scheme_Compile_Expand_Info *rec, int drec, int app_position); +static Scheme_Object *_eval_compiled_multi_with_prompt(Scheme_Object *obj, Scheme_Env *env); + #define cons(x,y) scheme_make_pair(x,y) typedef void (*DW_PrePost_Proc)(void *); @@ -517,6 +520,8 @@ scheme_handle_stack_overflow(Scheme_Object *(*k)(void)) Scheme_Overflow *overflow; Scheme_Overflow_Jmp *jmp; + scheme_about_to_move_C_stack(); + scheme_overflow_k = k; scheme_overflow_count++; @@ -550,6 +555,11 @@ scheme_handle_stack_overflow(Scheme_Object *(*k)(void)) /* Jump directly to prompt: */ Scheme_Prompt *prompt = (Scheme_Prompt *)p->cjs.jumping_to_continuation; scheme_longjmp(*prompt->prompt_buf, 1); + } else if (p->cjs.jumping_to_continuation + && SCHEME_CONTP(p->cjs.jumping_to_continuation)) { + Scheme_Cont *c = (Scheme_Cont *)p->cjs.jumping_to_continuation; + p->cjs.jumping_to_continuation = NULL; + scheme_longjmpup(&c->buf); } else { /* Continue normal escape: */ scheme_longjmp(scheme_error_buf, 1); @@ -1454,7 +1464,7 @@ Scheme_Object *scheme_make_sequence_compilation(Scheme_Object *seq, int opt) if ((opt < 0) && !scheme_omittable_expr(SCHEME_CAR(seq), 1)) { /* We can't optimize (begin0 expr cont) to expr because exp is not in tail position in the original (so we'd mess - up continuation marks. */ + up continuation marks). */ addconst = 1; } else return good; @@ -3574,7 +3584,6 @@ static Scheme_Object *call_compile_handler(Scheme_Object *form, int immediate_ev return o; } - static Scheme_Object *add_renames_unless_module(Scheme_Object *form, Scheme_Env *genv) { if (genv->rename) { @@ -3804,7 +3813,7 @@ static void *compile_k(void) if (SCHEME_PAIRP(tl_queue)) { /* This compile is interleaved with evaluation, and we need to eval now before compiling more. */ - _scheme_eval_compiled_multi((Scheme_Object *)top, genv); + _eval_compiled_multi_with_prompt((Scheme_Object *)top, genv); form = SCHEME_CAR(tl_queue); tl_queue = SCHEME_CDR(tl_queue); @@ -5591,28 +5600,34 @@ static void make_tail_buffer_safe() } static Scheme_Dynamic_Wind *intersect_dw(Scheme_Dynamic_Wind *a, Scheme_Dynamic_Wind *b, - Scheme_Object *prompt_tag, int *_common_depth) + Scheme_Object *prompt_tag, int b_has_tag, int *_common_depth) { int alen = 0, blen = 0; - int prompt_delta = 0; + int a_has_tag = 0, a_prompt_delta = 0, b_prompt_delta = 0; + Scheme_Dynamic_Wind *dw; - if (prompt_tag) { - Scheme_Dynamic_Wind *dw; - for (dw = a; dw && (dw->prompt_tag != prompt_tag); dw = dw->prev) { - } - if (dw) - prompt_delta = dw->depth + 1; + for (dw = a; dw && (dw->prompt_tag != prompt_tag); dw = dw->prev) { + } + if (dw) { + /* Cut off `a' below the prompt dw. */ + a_prompt_delta = dw->depth; + a_has_tag = 1; } - alen = (a ? a->depth + 1 : 0) - prompt_delta; - blen = (b ? b->depth + 1 : 0); + if (a_has_tag) + a_prompt_delta += 1; + if (b_has_tag) + b_prompt_delta += 1; + + alen = (a ? a->depth + 1 : 0) - a_prompt_delta; + blen = (b ? b->depth + 1 : 0) - b_prompt_delta; while (alen > blen) { --alen; a = a->prev; } if (!alen) { - *_common_depth = -1; + *_common_depth = b_prompt_delta - 1; return a; } while (blen > alen) { @@ -5635,6 +5650,124 @@ static Scheme_Dynamic_Wind *intersect_dw(Scheme_Dynamic_Wind *a, Scheme_Dynamic_ return a; } +static Scheme_Prompt *lookup_cont_prompt(Scheme_Cont *c, + Scheme_Meta_Continuation **_prompt_mc, + MZ_MARK_POS_TYPE *_prompt_pos, + const char *msg) +{ + Scheme_Prompt *prompt; + + prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark_with_meta(NULL, + SCHEME_PTR_VAL(c->prompt_tag), + NULL, + _prompt_mc, + _prompt_pos); + if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, c->prompt_tag)) { + scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, + msg); + } + + return prompt; +} + +#define LOOKUP_NO_PROMPT "continuation application: no corresponding prompt in the current continuation" + +static Scheme_Prompt *check_barrier(Scheme_Prompt *prompt, + Scheme_Meta_Continuation *prompt_cont, MZ_MARK_POS_TYPE prompt_pos, + Scheme_Cont *c) +/* A continuation barrier is analogous to a dynamic-wind. A jump is + allowed if no dynamic-wind-like barriers would be executed for + the jump. */ +{ + Scheme_Prompt *barrier_prompt, *b1, *b2; + Scheme_Meta_Continuation *barrier_cont; + MZ_MARK_POS_TYPE barrier_pos; + + barrier_prompt = scheme_get_barrier_prompt(&barrier_cont, &barrier_pos); + b1 = barrier_prompt; + if (b1) { + if (!b1->is_barrier) + b1 = NULL; + else if (prompt + && scheme_is_cm_deeper(barrier_cont, barrier_pos, + prompt_cont, prompt_pos)) + b1 = NULL; + } + b2 = c->barrier_prompt; + if (b2) { + if (!b2->is_barrier) + b2 = NULL; + } + + if (b1 != b2) { + scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, + "continuation application: attempt to cross a continuation barrier"); + } + + return barrier_prompt; +} + +void scheme_recheck_prompt_and_barrier(Scheme_Cont *c) +/* Check for prompt & barrier, again. We need to + call this function like a d-w thunk, so that the meta + continuation is right in case of an error. */ +{ + Scheme_Prompt *prompt; + Scheme_Meta_Continuation *prompt_cont; + MZ_MARK_POS_TYPE prompt_pos; + prompt = lookup_cont_prompt(c, &prompt_cont, &prompt_pos, + LOOKUP_NO_PROMPT + " on return from `dynamic-wind' post thunk"); + check_barrier(prompt, prompt_cont, prompt_pos, c); +} + +static int exec_dyn_wind_posts(Scheme_Dynamic_Wind *common, Scheme_Cont *c, int common_depth) +{ + int meta_depth; + Scheme_Thread *p = scheme_current_thread; + Scheme_Dynamic_Wind *dw; + int old_cac = scheme_continuation_application_count; + + for (dw = p->dw; + ((common && common->id) ? dw->id != common->id : dw != common); + ) { + meta_depth = p->next_meta; + p->next_meta += dw->next_meta; + p->dw = dw->prev; + if (dw->post) { + if (meta_depth > 0) { + scheme_apply_dw_in_meta(dw, 1, meta_depth, c); + } else { + DW_PrePost_Proc post = dw->post; + + MZ_CONT_MARK_POS = dw->envss.cont_mark_pos; + MZ_CONT_MARK_STACK = dw->envss.cont_mark_stack; + post(dw->data); + + if (scheme_continuation_application_count != old_cac) { + scheme_recheck_prompt_and_barrier(c); + } + } + p = scheme_current_thread; + /* p->dw might not match dw if the post thunk captures a + continuation that is later restored in a different + meta continuation: */ + dw = p->dw; + + /* If any continuations were applied, then the set of dynamic + winds may be different now than before Re-compute the + intersection. */ + if (scheme_continuation_application_count != old_cac) { + old_cac = scheme_continuation_application_count; + + common = intersect_dw(p->dw, c->dw, c->prompt_tag, c->has_prompt_dw, &common_depth); + } + } else + dw = dw->prev; + } + return common_depth; +} + #ifdef REGISTER_POOR_MACHINE # define USE_LOCAL_RUNSTACK 0 # define DELAY_THREAD_RUNSTACK_UPDATE 0 @@ -6061,10 +6194,11 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, #endif } else if (type == scheme_cont_type) { Scheme_Cont *c; - Scheme_Dynamic_Wind *dw, *common; + Scheme_Dynamic_Wind *common; Scheme_Object *value; Scheme_Meta_Continuation *prompt_mc; - Scheme_Prompt *prompt; + MZ_MARK_POS_TYPE prompt_pos; + Scheme_Prompt *prompt, *barrier_prompt; int common_depth; if (num_rands != 1) { @@ -6098,85 +6232,39 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, if (c->composable) { /* Composable continuation. Jump right in... */ + scheme_continuation_application_count++; RUNSTACK = old_runstack; RUNSTACK_CHANGED(); UPDATE_THREAD_RSPTR(); v = scheme_compose_continuation(c, num_rands, value); } else { /* Aborting (Scheme-style) continuation. */ + int orig_cac = scheme_continuation_application_count; - prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark_with_meta(NULL, - SCHEME_PTR_VAL(c->prompt_tag), - NULL, - &prompt_mc); - if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, c->prompt_tag)) { - scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, - "continuation application: no corresponding prompt in the current continuation"); - } + UPDATE_THREAD_RSPTR(); - /* A continuation barrier is analogous to a dynamic-wind. A jump is - allowed if no dynamic-wind-like barriers would be executed for - the jump. */ - { - Scheme_Prompt *b1, *b2; + scheme_about_to_move_C_stack(); - b1 = p->barrier_prompt; - if (b1) { - if (!b1->is_barrier) - b1 = NULL; - else if (prompt && (prompt->depth > b1->depth)) - b1 = NULL; - } - b2 = c->ss.barrier_prompt; - if (b2) { - if (!b2->is_barrier) - b2 = NULL; - else if (c->prompt_depth > b2->depth) - b2 = NULL; - } - - if (b1 != b2) { - UPDATE_THREAD_RSPTR_FOR_ERROR(); - scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, - "continuation application: attempt to cross a continuation barrier"); - } - } + prompt = lookup_cont_prompt(c, &prompt_mc, &prompt_pos, LOOKUP_NO_PROMPT); + barrier_prompt = check_barrier(prompt, prompt_mc, prompt_pos, c); p->suspend_break++; /* restored at call/cc destination */ /* Find `common', the intersection of dynamic-wind chain for the current continuation and the given continuation, looking no further back in the current continuation than a prompt. */ - common = intersect_dw(p->dw, c->dw, c->prompt_tag, &common_depth); + common = intersect_dw(p->dw, c->dw, c->prompt_tag, c->has_prompt_dw, &common_depth); /* For dynamic-winds after `common' in this continuation, execute the post-thunks */ - { - int meta_depth = 0; - - for (dw = p->dw; - ((common && common->id) ? dw->id != common->id : dw != common); - ) { - if (dw->post) { - p->dw = dw->prev; - meta_depth += dw->next_meta; - if (meta_depth) { - scheme_apply_dw_in_meta(dw, 1, meta_depth); - } else { - DW_PrePost_Proc post = dw->post; + common_depth = exec_dyn_wind_posts(common, c, common_depth); + p = scheme_current_thread; - MZ_CONT_MARK_POS = dw->envss.cont_mark_pos; - MZ_CONT_MARK_STACK = dw->envss.cont_mark_stack; - post(dw->data); - } - p = scheme_current_thread; - /* p->dw might not match dw if the post thunk captures a - continuation that is later restored in a different - meta continuation: */ - dw = p->dw; - } else - dw = dw->prev; - } + if (orig_cac != scheme_continuation_application_count) { + /* We checked for a barrier in exec_dyn_wind_posts, but + get prompt & barrier again. */ + prompt = lookup_cont_prompt(c, &prompt_mc, &prompt_pos, "shouldn't fail!"); + barrier_prompt = scheme_get_barrier_prompt(NULL, NULL); } c->common_dw_depth = common_depth; @@ -6189,7 +6277,10 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, c->value = vals; } - p->dw = common; + c->common_dw = common; + c->common_next_meta = p->next_meta; + + scheme_continuation_application_count++; if (!prompt) { /* Invoke the continuation directly. If there's no prompt, @@ -6197,7 +6288,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, created with a new thread or a barrier prompt. */ p->meta_continuation = NULL; /* since prompt wasn't in any meta-continuation */ p->meta_prompt = NULL; - if (c->ss.barrier_prompt == p->barrier_prompt) { + if (c->barrier_prompt == barrier_prompt) { /* Barrier determines continuation end. */ c->resume_to = NULL; p->stack_start = c->stack_start; @@ -6211,6 +6302,32 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, p->stack_start = c->prompt_stack_start; } scheme_longjmpup(&c->buf); + } else if (prompt->id + && (prompt->id == c->prompt_id) + && !prompt_mc) { + /* The current prompt is the same as the one in place when + capturing the continuation, so we can jump directly. */ + scheme_drop_prompt_meta_continuations(c->prompt_tag); + c->shortcut_prompt = prompt; + if ((!prompt->boundary_overflow_id && !p->overflow) + || (prompt->boundary_overflow_id + && (prompt->boundary_overflow_id == p->overflow->id))) { + scheme_longjmpup(&c->buf); + } else { + /* Need to unwind overflows... */ + Scheme_Overflow *overflow; + overflow = p->overflow; + while (overflow->prev + && (!overflow->prev->id + || (overflow->prev->id != prompt->boundary_overflow_id))) { + overflow = overflow->prev; + } + /* Immediate destination is in scheme_handle_stack_overflow(). */ + p->cjs.jumping_to_continuation = (Scheme_Object *)c; + p->overflow = overflow; + p->stack_start = overflow->stack_start; + scheme_longjmpup(&overflow->jmp->cont); + } } else { p->cjs.jumping_to_continuation = (Scheme_Object *)prompt; p->cjs.num_vals = 1; @@ -6223,18 +6340,36 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, and continue from there. Immediate destination is in compose_continuation() in fun.c; the ultimate destination is in scheme_finish_apply_for_prompt() - in fun.c. */ + in fun.c. + We need to adjust the meta-continuation offsets in + common, based on the number that we're discarding + here. */ + { + Scheme_Meta_Continuation *xmc; + int offset = 1; + for (xmc = p->meta_continuation; + xmc->prompt_tag != prompt_mc->prompt_tag; + xmc = xmc->next) { + if (xmc->overflow) + offset++; + } + c->common_next_meta -= offset; + } p->meta_continuation = prompt_mc->next; p->stack_start = prompt_mc->overflow->stack_start; scheme_longjmpup(&prompt_mc->overflow->jmp->cont); } else if ((!prompt->boundary_overflow_id && !p->overflow) - || (prompt->boundary_overflow_id == p->overflow->id)) { + || (prompt->boundary_overflow_id + && (prompt->boundary_overflow_id == p->overflow->id))) { /* Jump directly to the prompt: destination is in scheme_finish_apply_for_prompt() in fun.c. */ + scheme_drop_prompt_meta_continuations(c->prompt_tag); scheme_longjmp(*prompt->prompt_buf, 1); } else { /* Need to unwind overflows to get to the prompt. */ - Scheme_Overflow *overflow = p->overflow; + Scheme_Overflow *overflow; + scheme_drop_prompt_meta_continuations(c->prompt_tag); + overflow = p->overflow; while (overflow->prev && (!overflow->prev->id || (overflow->prev->id != prompt->boundary_overflow_id))) { @@ -6955,6 +7090,34 @@ Scheme_Object *scheme_eval_multi(Scheme_Object *obj, Scheme_Env *env) return scheme_eval_compiled_multi(scheme_compile_for_eval(obj, env), env); } +static Scheme_Object *finish_eval_with_prompt(void *_data, int argc, Scheme_Object **argv) +{ + Scheme_Object *data = (Scheme_Object *)_data; + return _scheme_eval_compiled(SCHEME_CAR(data), (Scheme_Env *)SCHEME_CDR(data)); +} + +Scheme_Object *scheme_eval_with_prompt(Scheme_Object *obj, Scheme_Env *env) +{ + Scheme_Object *expr; + expr = scheme_compile_for_eval(obj, env); + return scheme_call_with_prompt(finish_eval_with_prompt, + scheme_make_pair(expr, (Scheme_Object *)env)); +} + +static Scheme_Object *finish_eval_multi_with_prompt(void *_data, int argc, Scheme_Object **argv) +{ + Scheme_Object *data = (Scheme_Object *)_data; + return _scheme_eval_compiled_multi(SCHEME_CAR(data), (Scheme_Env *)SCHEME_CDR(data)); +} + +Scheme_Object *scheme_eval_multi_with_prompt(Scheme_Object *obj, Scheme_Env *env) +{ + Scheme_Object *expr; + expr = scheme_compile_for_eval(obj, env); + return scheme_call_with_prompt(finish_eval_multi_with_prompt, + scheme_make_pair(expr, (Scheme_Object *)env)); +} + static void *eval_k(void) { Scheme_Thread *p = scheme_current_thread; @@ -7074,6 +7237,18 @@ Scheme_Object *_scheme_eval_compiled_multi(Scheme_Object *obj, Scheme_Env *env) return _eval(obj, env, 0, 1, 0, 0); } +static Scheme_Object *finish_compiled_multi_with_prompt(void *_data, int argc, Scheme_Object **argv) +{ + Scheme_Object *data = (Scheme_Object *)_data; + return _eval(SCHEME_CAR(data), (Scheme_Env *)SCHEME_CDR(data), 0, 1, 0, 0); +} + +Scheme_Object *_eval_compiled_multi_with_prompt(Scheme_Object *obj, Scheme_Env *env) +{ + return _scheme_call_with_prompt_multi(finish_compiled_multi_with_prompt, + scheme_make_pair(obj, (Scheme_Object *)env)); +} + Scheme_Object *scheme_eval_linked_expr(Scheme_Object *obj) { return _eval(obj, NULL, 1, 0, 1, 0); @@ -7672,7 +7847,7 @@ expand_stx_to_top_form(int argc, Scheme_Object **argv) return _expand(argv[0], scheme_new_expand_env(env, NULL, SCHEME_TOPLEVEL_FRAME), 1, -1, 1, 1, 0, NULL); } -Scheme_Object *scheme_eval_string_all(const char *str, Scheme_Env *env, int cont) +static Scheme_Object *do_eval_string_all(const char *str, Scheme_Env *env, int cont, int w_prompt) { Scheme_Object *port, *expr, *result = scheme_void; @@ -7681,23 +7856,50 @@ Scheme_Object *scheme_eval_string_all(const char *str, Scheme_Env *env, int cont expr = scheme_read_syntax(port, scheme_false); if (SAME_OBJ(expr, scheme_eof)) cont = 0; - else if (cont < 0) - result = scheme_eval(expr, env); - else - result = scheme_eval_multi(expr, env); + else if (cont < 0) { + if (w_prompt) + result = scheme_eval_with_prompt(expr, env); + else + result = scheme_eval(expr, env); + } else { + if (w_prompt) + result = scheme_eval_multi_with_prompt(expr, env); + else + result = scheme_eval_multi(expr, env); + } } while (cont > 0); return result; } +Scheme_Object *scheme_eval_string_all(const char *str, Scheme_Env *env, int cont) +{ + return do_eval_string_all(str, env, cont, 0); +} + Scheme_Object *scheme_eval_string(const char *str, Scheme_Env *env) { - return scheme_eval_string_all(str, env, -1); + return do_eval_string_all(str, env, -1, 0); } Scheme_Object *scheme_eval_string_multi(const char *str, Scheme_Env *env) { - return scheme_eval_string_all(str, env, 0); + return do_eval_string_all(str, env, 0, 0); +} + +Scheme_Object *scheme_eval_string_all_with_prompt(const char *str, Scheme_Env *env, int cont) +{ + return do_eval_string_all(str, env, cont, 1); +} + +Scheme_Object *scheme_eval_string_with_prompt(const char *str, Scheme_Env *env) +{ + return do_eval_string_all(str, env, -1, 1); +} + +Scheme_Object *scheme_eval_string_multi_with_prompt(const char *str, Scheme_Env *env) +{ + return do_eval_string_all(str, env, 0, 1); } static Scheme_Object *allow_set_undefined(int argc, Scheme_Object **argv) diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index 3e5a8927fa..81e3012c01 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -86,13 +86,10 @@ Scheme_Object *scheme_tail_call_waiting; Scheme_Object *scheme_inferred_name_symbol; int scheme_cont_capture_count; +int scheme_prompt_capture_count; Scheme_Object *scheme_default_prompt_tag; -static Scheme_Object *certify_mode_symbol, *transparent_symbol, *transparent_binding_symbol, *opaque_symbol; - -static Scheme_Object *null_val_key, *cont_key; - /* locals */ static Scheme_Object *procedure_p (int argc, Scheme_Object *argv[]); static Scheme_Object *apply (int argc, Scheme_Object *argv[]); @@ -155,8 +152,16 @@ static Scheme_Object *top_next_modidx; static Scheme_Env *top_next_menv; static int top_next_use_thread_cc_ok; +static Scheme_Prompt *original_default_prompt; /* for escapes, represents the implicit initial prompt */ + +static Scheme_Object *certify_mode_symbol, *transparent_symbol, *transparent_binding_symbol, *opaque_symbol; + +static Scheme_Object *cont_key, *barrier_prompt_key; + static Scheme_Object *is_method_symbol; +static Scheme_Object *call_with_prompt_proc, *abort_continuation_proc; + static Scheme_Prompt *available_prompt, *available_cws_prompt, *available_regular_prompt; static Scheme_Dynamic_Wind *available_prompt_dw; static Scheme_Meta_Continuation *available_prompt_mc; @@ -284,11 +289,13 @@ scheme_init_fun (Scheme_Env *env) 0, -1), env); + REGISTER_SO(call_with_prompt_proc); + call_with_prompt_proc = scheme_make_prim_w_arity2(call_with_prompt, + "call-with-continuation-prompt", + 1, 3, + 0, -1); scheme_add_global_constant("call-with-continuation-prompt", - scheme_make_prim_w_arity2(call_with_prompt, - "call-with-continuation-prompt", - 1, 3, - 0, -1), + call_with_prompt_proc, env); scheme_add_global_constant("call-with-composable-continuation", @@ -298,10 +305,12 @@ scheme_init_fun (Scheme_Env *env) 0, -1), env); + REGISTER_SO(abort_continuation_proc); + abort_continuation_proc = scheme_make_prim_w_arity(abort_continuation, + "abort-current-continuation", + 1, -1); scheme_add_global_constant("abort-current-continuation", - scheme_make_prim_w_arity(abort_continuation, - "abort-current-continuation", - 1, -1), + abort_continuation_proc, env); scheme_add_global_constant("continuation-prompt-available?", @@ -494,6 +503,11 @@ scheme_init_fun (Scheme_Env *env) a[0] = scheme_intern_symbol("default"); scheme_default_prompt_tag = make_prompt_tag(1, a); } + + REGISTER_SO(original_default_prompt); + original_default_prompt = MALLOC_ONE_TAGGED(Scheme_Prompt); + original_default_prompt->so.type = scheme_prompt_type; + original_default_prompt->tag = scheme_default_prompt_tag; } Scheme_Object * @@ -1596,19 +1610,12 @@ scheme_make_closure_compilation(Scheme_Comp_Env *env, Scheme_Object *code, static void initialize_prompt(Scheme_Thread *p, Scheme_Prompt *prompt, void *stack_boundary) { - int depth = 0; prompt->is_barrier = 0; - prompt->is_captured = 0; prompt->stack_boundary = stack_boundary; prompt->runstack_boundary_start = MZ_RUNSTACK_START; prompt->runstack_boundary_offset = (MZ_RUNSTACK - MZ_RUNSTACK_START); prompt->mark_boundary = MZ_CONT_MARK_STACK; prompt->boundary_mark_pos = MZ_CONT_MARK_POS; - if (p->barrier_prompt) - depth = p->barrier_prompt->depth; - if (p->meta_prompt && (p->meta_prompt->depth > depth)) - depth = p->meta_prompt->depth; - prompt->depth = depth + 1; } /*========================================================================*/ @@ -1761,7 +1768,7 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) barriers to full-continuation jumps. No barrier if !eb. */ { void *v; - Scheme_Prompt * volatile old_barrier_prompt, * volatile prompt; + Scheme_Prompt * volatile prompt; volatile long save_list_stack_pos; mz_jmp_buf *save, newbuf; Scheme_Stack_State envss; @@ -1771,6 +1778,8 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) Scheme_Simple_Object * volatile save_list_stack; Scheme_Thread * volatile p = scheme_current_thread; int thread_cc = top_next_use_thread_cc_ok; + volatile int old_pcc = scheme_prompt_capture_count; + Scheme_Cont_Frame_Data cframe; #ifdef MZ_PRECISE_GC void *external_stack; #endif @@ -1781,8 +1790,6 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) scheme_wake_up(); if (eb) { - old_barrier_prompt = p->barrier_prompt; - if (available_prompt) { prompt = available_prompt; available_prompt = NULL; @@ -1791,15 +1798,17 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) prompt->so.type = scheme_prompt_type; } - initialize_prompt(p, prompt, PROMPT_STACK(old_barrier_prompt)); - p->barrier_prompt = prompt; - + initialize_prompt(p, prompt, PROMPT_STACK(prompt)); if (!thread_cc) { prompt->is_barrier = 1; } + + if (!barrier_prompt_key) { + REGISTER_SO(barrier_prompt_key); + barrier_prompt_key = scheme_make_symbol("bar"); /* ininterned */ + } } else { prompt = NULL; - old_barrier_prompt = NULL; } #ifdef MZ_PRECISE_GC @@ -1837,6 +1846,11 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) scheme_create_overflow(); /* needed even if scheme_overflow_jmp is already set */ + if (prompt) { + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(barrier_prompt_key, (Scheme_Object *)prompt); + } + save = p->error_buf; p->error_buf = &newbuf; @@ -1849,11 +1863,11 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) scheme_set_external_stack_val(external_stack); #endif if (prompt) { - if (!prompt->is_captured) { + scheme_pop_continuation_frame(&cframe); + if (old_pcc == scheme_prompt_capture_count) { /* It wasn't used */ available_prompt = prompt; } - p->barrier_prompt = old_barrier_prompt; } p->current_local_env = save_current_local_env; p->current_local_mark = save_mark; @@ -1892,11 +1906,11 @@ void *top_level_do(void *(*k)(void), int eb, void *sj_start) } if (prompt) { - if (!prompt->is_captured) { + scheme_pop_continuation_frame(&cframe); + if (old_pcc == scheme_prompt_capture_count) { /* It wasn't used */ available_prompt = prompt; } - p->barrier_prompt = old_barrier_prompt; } if (scheme_active_but_sleeping) @@ -2097,6 +2111,76 @@ scheme_apply_multi_no_eb(Scheme_Object *rator, int num_rands, Scheme_Object **ra return _apply(rator, num_rands, rands, 1, 0); } +static Scheme_Object * +finish_apply_with_prompt(void *_data, int argc, Scheme_Object **argv) +{ + void **data = (void **)_data; + Scheme_Object *rator, *is_multi; + + argv = (Scheme_Object **)_data; + for (argc = 0; data[argc]; argc++) { } + + rator = (Scheme_Object *)data[argc+1]; + is_multi = (Scheme_Object *)data[argc+2]; + + if (SCHEME_TRUEP(is_multi)) + return _scheme_apply_multi(rator, argc, argv); + else + return _scheme_apply(rator, argc, argv); +} + +static Scheme_Object * +do_apply_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands, int multi, int top_level) +{ + void **a; + int i; + + a = MALLOC_N(void*, 3 + num_rands); + + for (i = 0; i < num_rands; i++) { + a[i] = rands[i]; + } + a[num_rands] = NULL; + a[num_rands + 1] = rator; + a[num_rands + 2] = (multi ? scheme_true : scheme_false); + + if (top_level) { + if (multi) + return scheme_call_with_prompt_multi(finish_apply_with_prompt, a); + else + return scheme_call_with_prompt(finish_apply_with_prompt, a); + } else { + if (multi) + return _scheme_call_with_prompt_multi(finish_apply_with_prompt, a); + else + return _scheme_call_with_prompt(finish_apply_with_prompt, a); + } +} + +Scheme_Object * +scheme_apply_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands) +{ + return do_apply_with_prompt(rator, num_rands, rands, 0, 1); +} + +Scheme_Object * +scheme_apply_multi_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands) +{ + return do_apply_with_prompt(rator, num_rands, rands, 1, 1); +} + +Scheme_Object * +_scheme_apply_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands) +{ + return do_apply_with_prompt(rator, num_rands, rands, 0, 0); +} + +Scheme_Object *_scheme_apply_multi_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands) +{ + return do_apply_with_prompt(rator, num_rands, rands, 1, 0); +} + + Scheme_Object * scheme_tail_apply (Scheme_Object *rator, int num_rands, Scheme_Object **rands) { @@ -2944,11 +3028,13 @@ static Scheme_Object *object_name(int argc, Scheme_Object **argv) s = scheme_regexp_source(a); if (s) return s; - } else if (SCHEME_INPORTP(a)) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)a; + } else if (SCHEME_INPUT_PORTP(a)) { + Scheme_Input_Port *ip; + ip = scheme_input_port_record(a); return ip->name; - } else if (SCHEME_OUTPORTP(a)) { - Scheme_Output_Port *op = (Scheme_Output_Port *)a; + } else if (SCHEME_OUTPUT_PORTP(a)) { + Scheme_Output_Port *op; + op = scheme_output_port_record(a); return op->name; } else if (SCHEME_THREADP(a)) { Scheme_Thread *t = (Scheme_Thread *)a; @@ -3268,6 +3354,7 @@ scheme_call_ec (int argc, Scheme_Object *argv[]) Scheme_Object * volatile v; Scheme_Object *a[1]; Scheme_Cont_Frame_Data cframe; + Scheme_Prompt *barrier_prompt; scheme_check_proc_arity("call-with-escape-continuation", 1, 0, argc, argv); @@ -3281,9 +3368,10 @@ scheme_call_ec (int argc, Scheme_Object *argv[]) scheme_save_env_stack_w_thread(cont->envss, p1); - if (p1->barrier_prompt) /* can be NULL if this is for raise_break() - called outside any Scheme evaluation */ - p1->barrier_prompt->is_captured = 1; + barrier_prompt = scheme_get_barrier_prompt(NULL, NULL); + cont->barrier_prompt = barrier_prompt; + + scheme_prompt_capture_count++; scheme_push_continuation_frame(&cframe); scheme_set_cont_mark((Scheme_Object *)cont, scheme_true); @@ -3330,11 +3418,12 @@ do_call_with_sema(const char *who, int enable_break, int argc, Scheme_Object *ar { mz_jmp_buf newbuf, * volatile savebuf; Scheme_Prompt * volatile prompt; - Scheme_Prompt * volatile old_barrier_prompt; int i, just_try; int volatile extra; Scheme_Object * volatile sema; Scheme_Object *v, *quick_args[4], **extra_args; + Scheme_Cont_Frame_Data cframe; + int old_pcc = scheme_prompt_capture_count; if (!SCHEME_SEMAP(argv[0])) { scheme_wrong_type(who, "semaphore", 0, argc, argv); @@ -3361,10 +3450,10 @@ do_call_with_sema(const char *who, int enable_break, int argc, Scheme_Object *ar if (just_try && enable_break && scheme_current_thread->external_break) { /* Check for a break before polling the semaphore */ - Scheme_Cont_Frame_Data cframe; - scheme_push_break_enable(&cframe, 1, 1); + Scheme_Cont_Frame_Data bcframe; + scheme_push_break_enable(&bcframe, 1, 1); scheme_check_break_now(); - scheme_pop_break_enable(&cframe, 0); + scheme_pop_break_enable(&bcframe, 0); } if (!scheme_wait_sema(sema, just_try ? 1 : (enable_break ? -1 : 0))) { @@ -3382,8 +3471,8 @@ do_call_with_sema(const char *who, int enable_break, int argc, Scheme_Object *ar prompt->so.type = scheme_prompt_type; } - old_barrier_prompt = scheme_current_thread->barrier_prompt; - scheme_current_thread->barrier_prompt = prompt; + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(barrier_prompt_key, (Scheme_Object *)prompt); if (scheme_setjmp(newbuf)) { v = NULL; @@ -3399,11 +3488,12 @@ do_call_with_sema(const char *who, int enable_break, int argc, Scheme_Object *ar v = _scheme_apply_multi(argv[1], extra, extra_args); } + scheme_pop_continuation_frame(&cframe); + scheme_post_sema(sema); /* FIXME: what if we reach the max count? */ - if (!prompt->is_captured) + if (old_pcc != scheme_prompt_capture_count) available_cws_prompt = prompt; - scheme_current_thread->barrier_prompt = old_barrier_prompt; if (!v) scheme_longjmp(*savebuf, 1); @@ -3569,7 +3659,7 @@ static void copy_in_runstack(Scheme_Thread *p, Scheme_Saved_Stack *isaved, int s isaved = isaved->prev; if (!isaved) { /* The saved stack can be shorter than the current stack if - there's a barrier prompt. */ + there's a barrier prompt, or if we're in shortcut mode. */ break; } size = isaved->runstack_size; @@ -3710,8 +3800,8 @@ static Scheme_Overflow *clone_overflows(Scheme_Overflow *overflow, void *limit, static Scheme_Dynamic_Wind *clone_dyn_wind(Scheme_Dynamic_Wind *dw, Scheme_Object *limit_prompt_tag, int limit_depth, - Scheme_Dynamic_Wind *tail, - int composable) + Scheme_Dynamic_Wind *tail, + int keep_tail, int composable) { Scheme_Dynamic_Wind *naya, *first = NULL, *prev = NULL; int cnt = 0; @@ -3730,9 +3820,13 @@ static Scheme_Dynamic_Wind *clone_dyn_wind(Scheme_Dynamic_Wind *dw, first = naya; prev = naya; cnt++; - if (limit_prompt_tag && (dw->prompt_tag == limit_prompt_tag)) + if (limit_prompt_tag && (dw->prompt_tag == limit_prompt_tag)) { + dw = dw->prev; /* in case keep_tail is true */ break; + } } + if (keep_tail) + tail = dw; if (first) { prev->prev = tail; if (tail) @@ -3760,6 +3854,7 @@ static Scheme_Meta_Continuation *clone_meta_cont(Scheme_Meta_Continuation *mc, Scheme_Meta_Continuation *tail) { Scheme_Meta_Continuation *naya, *first = NULL, *prev = NULL; + int cnt = 0, depth; for (; mc; mc = mc->next) { if (!limit_depth--) @@ -3767,6 +3862,7 @@ static Scheme_Meta_Continuation *clone_meta_cont(Scheme_Meta_Continuation *mc, if (!mc->pseudo && SAME_OBJ(mc->prompt_tag, limit_tag)) break; naya = MALLOC_ONE_RT(Scheme_Meta_Continuation); + cnt++; memcpy(naya, mc, sizeof(Scheme_Meta_Continuation)); if (SAME_OBJ(mc, prompt_cont)) { /* Need only part of this meta-continuation's marks. */ @@ -3808,17 +3904,23 @@ static Scheme_Meta_Continuation *clone_meta_cont(Scheme_Meta_Continuation *mc, else first = naya; prev = naya; - if (SAME_OBJ(mc, prompt_cont)) { - /* Don't need and meta-continuaton frames afterward. */ - break; - } } if (first) { prev->next = tail; - return first; } else - return tail; + first = tail; + + /* Set depth for newly prefixed meta-conts: */ + if (tail) + depth = tail->depth + 1; + else + depth = 0; + for (naya = first; cnt--; naya = naya->next) { + first->depth = depth + cnt; + } + + return first; } void prune_cont_marks(Scheme_Meta_Continuation *resume_mc, Scheme_Cont *cont, Scheme_Object *extra_marks) @@ -3901,9 +4003,10 @@ void prune_cont_marks(Scheme_Meta_Continuation *resume_mc, Scheme_Cont *cont, Sc } } -Scheme_Saved_Stack *clone_runstack_saved(Scheme_Saved_Stack *saved, Scheme_Object **boundary_start) +Scheme_Saved_Stack *clone_runstack_saved(Scheme_Saved_Stack *saved, Scheme_Object **boundary_start, + Scheme_Saved_Stack *last) { - Scheme_Saved_Stack *naya, *first = NULL, *prev = NULL; + Scheme_Saved_Stack *naya, *first = last, *prev = NULL; while (saved) { naya = MALLOC_ONE_RT(Scheme_Saved_Stack); @@ -3918,11 +4021,53 @@ Scheme_Saved_Stack *clone_runstack_saved(Scheme_Saved_Stack *saved, Scheme_Objec saved = saved->prev; } if (prev) - prev->prev = NULL; + prev->prev = last; return first; } +static MZ_MARK_STACK_TYPE exec_dyn_wind_pres(Scheme_Dynamic_Wind_List *dwl, + int dwl_len, + Scheme_Cont *cont, + MZ_MARK_STACK_TYPE copied_cms, + int clear_cm_caches, + Scheme_Object **_sub_conts) +{ + Scheme_Thread *p = scheme_current_thread; + int old_cac = scheme_continuation_application_count; + + for (; dwl; dwl = dwl->next) { + if (dwl->dw->pre) { + p->dw = dwl->dw->prev; + p->next_meta = dwl->meta_depth + dwl->dw->next_meta; + if (dwl->meta_depth > 0) { + scheme_apply_dw_in_meta(dwl->dw, 0, dwl->meta_depth, cont); + } else { + /* Restore the needed part of the mark stack for this + dynamic-wind context. Clear cached info on restore + if there's a prompt. */ + DW_PrePost_Proc pre = dwl->dw->pre; + MZ_CONT_MARK_POS = dwl->dw->envss.cont_mark_pos; + MZ_CONT_MARK_STACK = dwl->dw->envss.cont_mark_stack; + copy_in_mark_stack(p, cont->cont_mark_stack_copied, + MZ_CONT_MARK_STACK, copied_cms, + cont->cont_mark_offset, _sub_conts, + clear_cm_caches); + copied_cms = MZ_CONT_MARK_STACK; + + pre(dwl->dw->data); + + if (scheme_continuation_application_count != old_cac) { + old_cac = scheme_continuation_application_count; + scheme_recheck_prompt_and_barrier(cont); + } + } + p = scheme_current_thread; + } + } + return copied_cms; +} + static Scheme_Object * call_cc (int argc, Scheme_Object *argv[]) { @@ -3943,10 +4088,12 @@ call_cc (int argc, Scheme_Object *argv[]) static Scheme_Cont *grab_continuation(Scheme_Thread *p, int for_prompt, int composable, Scheme_Object *prompt_tag, Scheme_Cont *sub_cont, Scheme_Prompt *prompt, - Scheme_Meta_Continuation *prompt_cont) + Scheme_Meta_Continuation *prompt_cont, MZ_MARK_POS_TYPE prompt_pos, + Scheme_Prompt *barrier_prompt, + Scheme_Meta_Continuation *barrier_cont, MZ_MARK_POS_TYPE barrier_pos) { Scheme_Cont *cont; - Scheme_Prompt *effective_prompt; + Scheme_Prompt *effective_barrier_prompt; cont = MALLOC_ONE_TAGGED(Scheme_Cont); cont->so.type = scheme_cont_type; @@ -3960,18 +4107,21 @@ static Scheme_Cont *grab_continuation(Scheme_Thread *p, int for_prompt, int comp cont->composable = 1; scheme_init_jmpup_buf(&cont->buf); - p->barrier_prompt->is_captured = 1; cont->prompt_tag = prompt_tag; - cont->prompt_depth = (prompt ? prompt->depth : 0); - if (prompt) { + if (for_prompt) + cont->dw = NULL; + else if (prompt) { Scheme_Dynamic_Wind *dw; if (p->dw) { - dw = clone_dyn_wind(p->dw, prompt_tag, -1, NULL, composable); + dw = clone_dyn_wind(p->dw, prompt_tag, -1, NULL, 0, composable); cont->dw = dw; + cont->next_meta = p->next_meta; } else cont->dw = NULL; - } else + } else { cont->dw = p->dw; + cont->next_meta = p->next_meta; + } if (!for_prompt) ASSERT_SUSPEND_BREAK_ZERO(); copy_cjs(&cont->cjs, &p->cjs); @@ -3985,18 +4135,35 @@ static Scheme_Cont *grab_continuation(Scheme_Thread *p, int for_prompt, int comp cont->init_break_cell = p->init_break_cell; if (prompt) { Scheme_Meta_Continuation *mc; + Scheme_Object *id; mc = clone_meta_cont(p->meta_continuation, prompt_tag, -1, prompt_cont, prompt, NULL); cont->meta_continuation = mc; + if (!prompt_cont) { + /* Remember the prompt id, so we can maybe take a shortcut on + invocation. (The shortcut only works within a meta-continuation.) */ + if (!prompt->id) { + id = scheme_make_pair(scheme_false, scheme_false); + prompt->id = id; + } + cont->prompt_id = prompt->id; + } + cont->has_prompt_dw = 1; } else cont->meta_continuation = p->meta_continuation; - effective_prompt = p->barrier_prompt; - if (p->meta_prompt && prompt_cont) - prompt = p->meta_prompt; - if (prompt) { - if (prompt->depth > effective_prompt->depth) - effective_prompt = prompt; + effective_barrier_prompt = barrier_prompt; + if (effective_barrier_prompt && prompt) { + if (scheme_is_cm_deeper(barrier_cont, barrier_pos, + prompt_cont, prompt_pos)) + effective_barrier_prompt = NULL; } + if (effective_barrier_prompt) { + cont->barrier_prompt = effective_barrier_prompt; + scheme_prompt_capture_count++; + } + + if (p->meta_prompt && prompt_cont) /* prompt_cont => meta-prompt is shallower than prompt */ + prompt = p->meta_prompt; { Scheme_Overflow *overflow; @@ -4012,7 +4179,7 @@ static Scheme_Cont *grab_continuation(Scheme_Thread *p, int for_prompt, int comp } scheme_cont_capture_count++; - if (!effective_prompt->is_barrier) { + if (!barrier_prompt || !barrier_prompt->is_barrier) { /* This continuation can be used by other threads, so we need to track ownership of the runstack */ if (!p->runstack_owner) { @@ -4039,15 +4206,14 @@ static Scheme_Cont *grab_continuation(Scheme_Thread *p, int for_prompt, int comp { Scheme_Saved_Stack *saved; - saved = copy_out_runstack(p, MZ_RUNSTACK, MZ_RUNSTACK_START, sub_cont, effective_prompt); + saved = copy_out_runstack(p, MZ_RUNSTACK, MZ_RUNSTACK_START, sub_cont, + (for_prompt ? p->meta_prompt : prompt)); cont->runstack_copied = saved; - if (prompt) { + if (!for_prompt && prompt) { /* Prune cont->runstack_saved to drop unneeded saves. */ - if (prompt->runstack_boundary_start == MZ_RUNSTACK_START) - saved = NULL; - else - saved = clone_runstack_saved(cont->runstack_saved, - prompt->runstack_boundary_start); + saved = clone_runstack_saved(cont->runstack_saved, + prompt->runstack_boundary_start, + NULL); cont->runstack_saved = saved; } } @@ -4056,12 +4222,7 @@ static Scheme_Cont *grab_continuation(Scheme_Thread *p, int for_prompt, int comp Scheme_Cont_Mark *msaved; long offset; msaved = copy_out_mark_stack(p, cont->ss.cont_mark_stack, sub_cont, &offset, - (for_prompt - ? p->meta_prompt - /* Since continuation marks can be inspected in a - captured continuation, the only effective prompt - is a real prompt: */ - : prompt), + (for_prompt ? p->meta_prompt : prompt), /* If there's a prompt, then clear caches in the mark stack, since any cached values are wrong for the delimited continuation. Otherwise, leave the cache in place @@ -4105,6 +4266,8 @@ static Scheme_Cont *grab_continuation(Scheme_Thread *p, int for_prompt, int comp static void restore_continuation(Scheme_Cont *cont, Scheme_Thread *p, int for_prompt, Scheme_Object *result, Scheme_Overflow *resume, Scheme_Object *prompt_tag, Scheme_Cont *sub_cont, + Scheme_Dynamic_Wind *common_dw, int common_next_meta, + Scheme_Prompt *shortcut_prompt, int clear_cm_caches, int do_reset_cjs, Scheme_Cont *cm_cont, Scheme_Object *extra_marks) { @@ -4158,6 +4321,8 @@ static void restore_continuation(Scheme_Cont *cont, Scheme_Thread *p, int for_pr resume_mc->cm_caches = 1; /* conservative assumption */ resume_mc->next = p->meta_continuation; + if (p->meta_continuation) + resume_mc->depth = p->meta_continuation->depth + 1; } } else resume_mc = NULL; @@ -4169,13 +4334,36 @@ static void restore_continuation(Scheme_Cont *cont, Scheme_Thread *p, int for_pr } mc = clone_meta_cont(cont->meta_continuation, NULL, -1, NULL, NULL, resume_mc); + } else if (shortcut_prompt) { + mc = clone_meta_cont(cont->meta_continuation, NULL, -1, NULL, NULL, p->meta_continuation); } else mc = cont->meta_continuation; p->meta_continuation = mc; } - p->runstack_saved = cont->runstack_saved; + if (shortcut_prompt) { + /* In shortcut mode, we need to preserve saved runstacks + that were pruned when capturing the continuation. */ + Scheme_Saved_Stack *rs; + if (shortcut_prompt->runstack_boundary_start == MZ_RUNSTACK_START) + rs = p->runstack_saved; + else { + rs = p->runstack_saved; + while (rs && (rs->runstack_start != shortcut_prompt->runstack_boundary_start)) { + rs = rs->prev; + } + if (rs) + rs = rs->prev; + } + if (rs) + rs = clone_runstack_saved(cont->runstack_saved, NULL, rs); + else + rs = cont->runstack_saved; + p->runstack_saved = rs; + } else + p->runstack_saved = cont->runstack_saved; MZ_RUNSTACK_START = cont->runstack_start; p->runstack_size = cont->runstack_size; + scheme_restore_env_stack_w_thread(cont->ss, p); if (p->runstack_owner @@ -4246,7 +4434,6 @@ static void restore_continuation(Scheme_Cont *cont, Scheme_Thread *p, int for_pr meta_prompt = MALLOC_ONE_TAGGED(Scheme_Prompt); meta_prompt->so.type = scheme_prompt_type; - meta_prompt->depth = p->barrier_prompt->depth + 1; meta_prompt->stack_boundary = cont->prompt_stack_start; meta_prompt->boundary_overflow_id = NULL; { @@ -4255,14 +4442,18 @@ static void restore_continuation(Scheme_Cont *cont, Scheme_Thread *p, int for_pr } meta_prompt->mark_boundary = tc->cont_mark_offset; } - meta_prompt->boundary_dw_id = (cont->dw ? cont->dw->id : NULL); meta_prompt->prompt_buf = cont->prompt_buf; { /* Reverse-engineer where the saved runstack ends: */ Scheme_Cont *rs_cont = cont; Scheme_Saved_Stack *saved, *actual; + int delta = 0; while (rs_cont->buf.cont) { + delta += rs_cont->runstack_copied->runstack_size; rs_cont = rs_cont->buf.cont; + if (rs_cont->runstack_copied->runstack_size) { + delta -= 1; /* overlap for not-saved call/cc argument */ + } } actual = NULL; for (saved = rs_cont->runstack_copied; saved->prev; saved = saved->prev) { @@ -4276,7 +4467,7 @@ static void restore_continuation(Scheme_Cont *cont, Scheme_Thread *p, int for_pr meta_prompt->runstack_boundary_offset = actual->runstack_offset + saved->runstack_size; } else { meta_prompt->runstack_boundary_start = MZ_RUNSTACK_START; - meta_prompt->runstack_boundary_offset = (MZ_RUNSTACK - MZ_RUNSTACK_START) + saved->runstack_size; + meta_prompt->runstack_boundary_offset = (MZ_RUNSTACK - MZ_RUNSTACK_START) + saved->runstack_size + delta; } } @@ -4291,93 +4482,86 @@ static void restore_continuation(Scheme_Cont *cont, Scheme_Thread *p, int for_pr sub_conts = scheme_make_raw_pair((Scheme_Object *)sub_cont, sub_conts); } - { + if (!shortcut_prompt) { Scheme_Cont *tc; for (tc = cont; tc->buf.cont; tc = tc->buf.cont) { } p->cont_mark_stack_bottom = tc->cont_mark_offset; p->cont_mark_pos_bottom = tc->cont_mark_pos_bottom; } - - /* For dynamic-winds after the "common" intersection - (see eval.c), execute the pre thunks. Make a list - of these first because they have to be done in the - inverse order of `prev' linkage. */ + if (for_prompt) { - p->dw = cont->dw; - } else if (cont->dw) { + /* leave p->dw alone */ + } else { + /* For dynamic-winds after the "common" intersection + (see eval.c), execute the pre thunks. Make a list + of these first because they have to be done in the + inverse order of `prev' linkage. */ Scheme_Dynamic_Wind *dw, *all_dw; Scheme_Dynamic_Wind_List *dwl = NULL; - int common_depth, meta_depth = 0; + int common_depth, dwl_len = 0; /* The thread's dw is set to the common dw. */ if (resume) { - /* Figure out which dynamic winds use the meta-continuation, - and mark them (functionally, which means cloning some - records). */ + /* Figure out which dynamic winds use meta-continuations + after an added one. */ if (cont->composable) { - if (p->dw) { - /* All of them! */ - all_dw = clone_dyn_wind(p->dw, NULL, p->dw->depth - 1, p->dw->prev, 0); - all_dw->next_meta++; - p->dw = all_dw; - } + /* All of them! */ + p->next_meta++; } else { - /* After tag */ + /* D-Ws after the tag are now one further way: + after the newly inserted meta-continuation for this tag. */ + p->dw = common_dw; + p->next_meta = common_next_meta; if (p->dw) { /* can be empty if there's only the pseudo-prompt */ - all_dw = clone_dyn_wind(p->dw, cont->prompt_tag, -1, NULL, 0); - for (dw = all_dw; dw->prev; dw = dw->prev) { + all_dw = clone_dyn_wind(p->dw, cont->prompt_tag, -1, NULL, 1, 0); + for (dw = all_dw; !SAME_OBJ(dw->prompt_tag, cont->prompt_tag); dw = dw->prev) { p->dw = p->dw->prev; } - dw->next_meta++; - dw->prev = p->dw->prev; + dw->next_meta += 1; p->dw = all_dw; } } + } else { + p->dw = common_dw; + p->next_meta = common_next_meta; } - common_depth = (p->dw ? p->dw->depth : -1); - all_dw = clone_dyn_wind(cont->dw, NULL, cont->common_dw_depth, p->dw, 0); + if (cont->dw) { + int meta_depth; - for (dw = all_dw; dw && (dw->depth != common_depth); dw = dw->prev) { - Scheme_Dynamic_Wind_List *cell; + common_depth = (p->dw ? p->dw->depth : -1); + all_dw = clone_dyn_wind(cont->dw, NULL, cont->common_dw_depth, p->dw, 0, 0); - meta_depth += dw->next_meta; - - cell = MALLOC_ONE_RT(Scheme_Dynamic_Wind_List); -#ifdef MZTAG_REQUIRED - cell->type = scheme_rt_dyn_wind_cell; -#endif - cell->dw = dw; - cell->meta_depth = meta_depth; - cell->next = dwl; - dwl = cell; - } - for (; dwl; dwl = dwl->next) { - if (dwl->dw->pre) { - p->dw = dwl->dw->prev; - if (dwl->meta_depth) { - scheme_apply_dw_in_meta(dwl->dw, 0, dwl->meta_depth); - } else { - /* Restore the needed part of the mark stack for this - dynamic-wind context. Clear cached info on restore - if there's a prompt. */ - DW_PrePost_Proc pre = dwl->dw->pre; - MZ_CONT_MARK_POS = dwl->dw->envss.cont_mark_pos; - MZ_CONT_MARK_STACK = dwl->dw->envss.cont_mark_stack; - copy_in_mark_stack(p, cont->cont_mark_stack_copied, - MZ_CONT_MARK_STACK, copied_cms, - cont->cont_mark_offset, &sub_conts, - clear_cm_caches); - copied_cms = MZ_CONT_MARK_STACK; - - pre(dwl->dw->data); + if ((common_depth != -1) && (common_depth != all_dw->depth)) { + /* Move p->next_meta to the last added dw's next_meta. */ + for (dw = all_dw; dw->prev->depth != common_depth; dw = dw->prev) { } - p = scheme_current_thread; + dw->next_meta = p->next_meta; } + + meta_depth = cont->next_meta; + for (dw = all_dw; dw && (dw->depth != common_depth); dw = dw->prev) { + Scheme_Dynamic_Wind_List *cell; + + cell = MALLOC_ONE_RT(Scheme_Dynamic_Wind_List); +#ifdef MZTAG_REQUIRED + cell->type = scheme_rt_dyn_wind_cell; +#endif + cell->dw = dw; + cell->meta_depth = meta_depth; + cell->next = dwl; + dwl = cell; + dwl_len++; + + meta_depth += dw->next_meta; + } + copied_cms = exec_dyn_wind_pres(dwl, dwl_len, cont, copied_cms, clear_cm_caches, &sub_conts); + p = scheme_current_thread; + p->dw = all_dw; + p->next_meta = cont->next_meta; } - p->dw = all_dw; } if (!for_prompt) @@ -4404,9 +4588,10 @@ internal_call_cc (int argc, Scheme_Object *argv[]) Scheme_Object *ret, * volatile prompt_tag; Scheme_Cont * volatile cont; Scheme_Cont *sub_cont; - Scheme_Meta_Continuation *prompt_cont; + Scheme_Meta_Continuation *prompt_cont, *barrier_cont; + MZ_MARK_POS_TYPE prompt_pos, barrier_pos; Scheme_Thread *p = scheme_current_thread; - Scheme_Prompt *prompt; + Scheme_Prompt *prompt, *barrier_prompt; GC_CAN_IGNORE void *stack_start; int composable; @@ -4418,7 +4603,7 @@ internal_call_cc (int argc, Scheme_Object *argv[]) composable = (argc > 2); prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark_with_meta(NULL, SCHEME_PTR_VAL(prompt_tag), - NULL, &prompt_cont); + NULL, &prompt_cont, &prompt_pos); if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) { scheme_arg_mismatch((composable ? "call-with-composable-continuation" @@ -4427,11 +4612,15 @@ internal_call_cc (int argc, Scheme_Object *argv[]) prompt_tag); return NULL; } + + barrier_prompt = scheme_get_barrier_prompt(&barrier_cont, &barrier_pos); + if (composable) { - if (!prompt && !p->barrier_prompt->is_barrier) { + if (!prompt && !barrier_prompt->is_barrier) { /* Pseduo-prompt ok. */ } else { - if (p->barrier_prompt->depth >= (prompt ? prompt->depth : 0)) { + if (!prompt + || scheme_is_cm_deeper(prompt_cont, prompt_pos, barrier_cont, barrier_pos)) { scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, "call-with-composable-continuation: cannot capture past continuation barrier"); } @@ -4444,7 +4633,7 @@ internal_call_cc (int argc, Scheme_Object *argv[]) sub_cont = (Scheme_Cont *)scheme_extract_one_cc_mark(NULL, cont_key); if (sub_cont && ((sub_cont->save_overflow != p->overflow) || (sub_cont->prompt_tag != prompt_tag) - || (sub_cont->ss.barrier_prompt != p->barrier_prompt))) + || (sub_cont->barrier_prompt != barrier_prompt))) sub_cont = NULL; if (sub_cont && (sub_cont->ss.cont_mark_pos == MZ_CONT_MARK_POS)) { Scheme_Object *argv2[1]; @@ -4494,7 +4683,9 @@ internal_call_cc (int argc, Scheme_Object *argv[]) return _scheme_tail_apply(argv[0], 1, argv2); } - cont = grab_continuation(p, 0, composable, prompt_tag, sub_cont, prompt, prompt_cont); + cont = grab_continuation(p, 0, composable, prompt_tag, sub_cont, + prompt, prompt_cont, prompt_pos, + barrier_prompt, barrier_cont, barrier_pos); scheme_zero_unneeded_rands(p); @@ -4517,9 +4708,8 @@ internal_call_cc (int argc, Scheme_Object *argv[]) Must be inside overflow, or the ids wouldn't match. */ stack_start = prompt->stack_boundary; } else { - Scheme_Prompt *barrier_prompt, *meta_prompt; + Scheme_Prompt *meta_prompt; - barrier_prompt = p->barrier_prompt; if (!barrier_prompt->is_barrier) barrier_prompt = NULL; else if (barrier_prompt->boundary_overflow_id != overflow_id) @@ -4530,10 +4720,7 @@ internal_call_cc (int argc, Scheme_Object *argv[]) meta_prompt = NULL; if (barrier_prompt && meta_prompt) { - if (meta_prompt->depth < barrier_prompt->depth) - meta_prompt = NULL; - else - barrier_prompt = NULL; + barrier_prompt = NULL; } if (barrier_prompt) @@ -4561,6 +4748,9 @@ internal_call_cc (int argc, Scheme_Object *argv[]) Scheme_Object *result, *extra_marks; Scheme_Overflow *resume; Scheme_Cont *use_next_cont; + Scheme_Dynamic_Wind *common_dw; + Scheme_Prompt *shortcut_prompt; + int common_next_meta; p = scheme_current_thread; /* maybe different than before */ @@ -4575,8 +4765,19 @@ internal_call_cc (int argc, Scheme_Object *argv[]) extra_marks = cont->extra_marks; cont->extra_marks = NULL; + + common_dw = cont->common_dw; + cont->common_dw = NULL; + + common_next_meta = cont->common_next_meta; + cont->common_next_meta = 0; - restore_continuation(cont, p, 0, result, resume, prompt_tag, sub_cont, !!resume, 1, + shortcut_prompt = cont->shortcut_prompt; + cont->shortcut_prompt = NULL; + + restore_continuation(cont, p, 0, result, resume, prompt_tag, sub_cont, + common_dw, common_next_meta, shortcut_prompt, + !!resume, 1, use_next_cont, extra_marks); /* We may have just re-activated breaking: */ @@ -4634,6 +4835,17 @@ call_with_continuation_barrier (int argc, Scheme_Object *argv[]) return scheme_apply(argv[0], 0, NULL); } +Scheme_Prompt *scheme_get_barrier_prompt(Scheme_Meta_Continuation **_meta_cont, + MZ_MARK_POS_TYPE *_pos) +{ + return (Scheme_Prompt *)scheme_extract_one_cc_mark_with_meta(NULL, + barrier_prompt_key, + NULL, + _meta_cont, + _pos); +} + + static Scheme_Object *make_prompt_tag (int argc, Scheme_Object *argv[]) { Scheme_Object *o, *key; @@ -4667,6 +4879,22 @@ Scheme_Overflow *scheme_get_thread_end_overflow(void) return overflow; } + +void scheme_drop_prompt_meta_continuations(Scheme_Object *prompt_tag) +{ + Scheme_Meta_Continuation *mc; + + mc = scheme_current_thread->meta_continuation; + while (!SAME_OBJ(mc->prompt_tag, prompt_tag)) { + if (mc->overflow) { + scheme_signal_error("meta-continuation to drop is not just a placeholder?!"); + } + mc = mc->next; + } + + scheme_current_thread->meta_continuation = mc; +} + /* private, but declared public to avoid inlining: */ Scheme_Object *scheme_finish_apply_for_prompt(Scheme_Prompt *prompt, Scheme_Object *_prompt_tag, Scheme_Object *proc, int argc, Scheme_Object **argv) @@ -4704,27 +4932,34 @@ Scheme_Object *scheme_finish_apply_for_prompt(Scheme_Prompt *prompt, Scheme_Obje resume_mc->type = scheme_rt_meta_cont; #endif resume_mc->prompt_tag = prompt_tag; - resume_mc->next = p->meta_continuation; + if (p->meta_continuation) { + resume_mc->next = p->meta_continuation; + resume_mc->depth = p->meta_continuation->depth + 1; + } p->meta_continuation = resume_mc; } if (scheme_setjmp(newbuf)) { /* We can get here in three ways: - 1. abort-current-continuation with this prompt's tag + 1. abort-current-continuation with this prompt's tag: In this case, p->cjs.jumping_to_continuation is the prompt, p->cjs.val is a value to deliver to the prompt handler, and p->cjs.is_escape is unset. + [This is a jump in the normal error/abort chain.] 2. applying a continuation that is delimited by the prompt tag - (in which case the jump originates from scheme_do_eval) + (in which case the jump originates from scheme_do_eval): In this case, p->cjs.jumping_to_continuation is the prompt, p->cjs.val is a continuation, and p->cjs.is_escape is set. - 3. exception-level escape + [This is a jump in the special continuation-application + direct mode.] + 3. other exception-level escape: In this case, p->cjs.jumping_to_continuation is the target (maybe an escape continuation), p->cjs.val is information to propagate to the target, and p->cjs.is_escape is unset. + [This is a jump in the normal error/abort chain.] */ val = NULL; } else { @@ -4742,6 +4977,10 @@ Scheme_Object *scheme_finish_apply_for_prompt(Scheme_Prompt *prompt, Scheme_Obje resume_mc = p->meta_continuation; p->meta_continuation = p->meta_continuation->next; + if (!SAME_OBJ(resume_mc->prompt_tag, prompt_tag)) { + scheme_signal_error("meta-continuation prompt tag does not match current prompt tag"); + } + if (cc_count == scheme_cont_capture_count) { memset(resume_mc, 0, sizeof(Scheme_Meta_Continuation)); #ifdef MZTAG_REQUIRED @@ -4774,6 +5013,7 @@ Scheme_Object *scheme_finish_apply_for_prompt(Scheme_Prompt *prompt, Scheme_Obje val, then p->cjs.jumping_to_continuation is unset, so it's ok to communicate val via p->cjs.val. The target for this jump is in compose_continuation(). */ + p->next_meta -= 1; if (val) { if (val == SCHEME_MULTIPLE_VALUES) { if (SAME_OBJ(p->ku.multiple.array, p->values_buffer)) @@ -4810,19 +5050,21 @@ static Scheme_Object *compose_continuation(Scheme_Cont *cont, int exec_chain, Sc /* Apply continuation as composable. There may or may not be a prompt immediately wrapping this application, depending on whether the continuation was captured as composable. */ - Scheme_Overflow * volatile overflow; + Scheme_Overflow *overflow; Scheme_Overflow_Jmp *jmp; - Scheme_Cont * volatile saved; - Scheme_Prompt * volatile saved_meta_prompt; + Scheme_Cont *saved; + Scheme_Prompt *saved_meta_prompt; Scheme_Thread *p = scheme_current_thread; + scheme_about_to_move_C_stack(); + reset_cjs(&p->cjs); saved_meta_prompt = p->meta_prompt; /* Grab a continuation so that we capture the current Scheme stack, etc.: */ - saved = grab_continuation(p, 1, 0, NULL, NULL, NULL, NULL); + saved = grab_continuation(p, 1, 0, NULL, NULL, NULL, NULL, 0, NULL, NULL, 0); overflow = MALLOC_ONE_RT(Scheme_Overflow); #ifdef MZTAG_REQUIRED @@ -4835,12 +5077,12 @@ static Scheme_Object *compose_continuation(Scheme_Cont *cont, int exec_chain, Sc #ifdef MZTAG_REQUIRED jmp->type = scheme_rt_overflow_jmp; #endif - overflow->jmp = jmp; + overflow->jmp = jmp; scheme_init_jmpup_buf(&overflow->jmp->cont); if (scheme_setjmpup(&overflow->jmp->cont, overflow->jmp, ADJUST_STACK_START(p->stack_start))) { - /* Returning. (Jumped here from finish_apply_for_prompt - or scheme_compose_continuation.) + /* Returning. (Jumped here from finish_apply_for_prompt, + scheme_compose_continuation, or scheme_eval.) We can return for several reasons: 1. We got a result value. @@ -4857,6 +5099,7 @@ static Scheme_Object *compose_continuation(Scheme_Cont *cont, int exec_chain, Sc Scheme_Meta_Continuation *mc; p = scheme_current_thread; + if (!p->cjs.jumping_to_continuation) { /* Got a result: */ v = p->cjs.val; @@ -4871,9 +5114,13 @@ static Scheme_Object *compose_continuation(Scheme_Cont *cont, int exec_chain, Sc v = NULL; } mc = p->meta_continuation; - restore_continuation(saved, p, 1, v, NULL, NULL, NULL, 0, !p->cjs.jumping_to_continuation, + p->meta_prompt = saved_meta_prompt; /* Set meta_prompt before restoring runstack, + since GC erases meta-prompt-blocked portion + on the runstack. */ + restore_continuation(saved, p, 1, v, NULL, NULL, NULL, + NULL, 0, NULL, + 0, !p->cjs.jumping_to_continuation, NULL, NULL); - p->meta_prompt = saved_meta_prompt; p->meta_continuation = mc; @@ -4899,9 +5146,8 @@ static Scheme_Object *compose_continuation(Scheme_Cont *cont, int exec_chain, Sc cont->extra_marks = (Scheme_Object *)p->cjs.jumping_to_continuation; } reset_cjs(&p->cjs); - /* The current meta-continuation and dw chain may have changed since capture: */ + /* The current meta-continuation may have changed since capture: */ saved->meta_continuation = p->meta_continuation; - saved->dw = p->dw; /* Fall though to continuation application below. */ } else { return v; @@ -4920,6 +5166,31 @@ static Scheme_Object *compose_continuation(Scheme_Cont *cont, int exec_chain, Sc ESCAPED_BEFORE_HERE; } +static void continue_prompt_escape() +{ + Scheme_Thread *p = scheme_current_thread; + Scheme_Prompt *targetc = (Scheme_Prompt *)p->cjs.jumping_to_continuation; + + scheme_drop_prompt_meta_continuations(targetc->tag); + + if ((!targetc->boundary_overflow_id && !p->overflow) + || (targetc->boundary_overflow_id == p->overflow->id)) { + /* Jump directly to the target. */ + scheme_longjmp(*targetc->prompt_buf, 1); + } else { + /* More hassle: need to unwind overflows to get to the prompt. */ + Scheme_Overflow *overflow = p->overflow; + while (overflow->prev + && (!overflow->prev->id + || (overflow->prev->id != targetc->boundary_overflow_id))) { + overflow = overflow->prev; + } + p->overflow = overflow; + p->stack_start = overflow->stack_start; + scheme_longjmpup(&overflow->jmp->cont); + } +} + static void restore_from_prompt(Scheme_Prompt *prompt) { Scheme_Thread *p = scheme_current_thread; @@ -4941,17 +5212,38 @@ static void restore_from_prompt(Scheme_Prompt *prompt) } } else p->overflow = NULL; - if (prompt->boundary_dw_id) { - while (p->dw->id != prompt->boundary_dw_id) { - p->dw = p->dw->prev; - } +} + +static void prompt_unwind_dw(Scheme_Object *prompt_tag) +{ + int delta = 0; + Scheme_Thread *p = scheme_current_thread; + + while (p->dw && !SAME_OBJ(p->dw->prompt_tag, prompt_tag)) { + delta += p->dw->next_meta; + p->dw = p->dw->prev; + } + if (!p->dw) { + scheme_signal_error("Lost prompt dynamic-wind record!\n"); + } else { + delta += p->dw->next_meta; + p->dw = p->dw->prev; + p->next_meta += delta; + } +} + +static void prompt_unwind_one_dw(Scheme_Object *prompt_tag) +{ + Scheme_Thread *p = scheme_current_thread; + if (!p->dw || !SAME_OBJ(p->dw->prompt_tag, prompt_tag)) { + scheme_signal_error("Dynamic-wind record doesn't match prompt!\n"); } else - p->dw = NULL; + prompt_unwind_dw(prompt_tag); } static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) { - Scheme_Object * volatile v; + Scheme_Object *v; Scheme_Thread *p = scheme_current_thread; Scheme_Object *proc = in_argv[0], *prompt_tag; Scheme_Prompt *prompt; @@ -4995,6 +5287,8 @@ static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) prompt->so.type = scheme_prompt_type; + prompt->tag = prompt_tag; + scheme_push_continuation_frame(&cframe); scheme_set_cont_mark(SCHEME_PTR_VAL(prompt_tag), (Scheme_Object *)prompt); @@ -5011,10 +5305,6 @@ static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) ensure_overflow_id(p->overflow); prompt->boundary_overflow_id = p->overflow->id; } - if (p->dw) { - scheme_ensure_dw_id(p->dw); - prompt->boundary_dw_id = p->dw->id; - } prompt->runstack_size = p->runstack_size; @@ -5028,10 +5318,12 @@ static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) #endif prompt_dw->prompt_tag = prompt_tag; if (p->dw) { + prompt_dw->next_meta = p->next_meta; prompt_dw->prev = p->dw; prompt_dw->depth = p->dw->depth + 1; } + p->next_meta = 0; p->dw = prompt_dw; v = scheme_apply_for_prompt(prompt, prompt_tag, proc, argc, argv); @@ -5055,17 +5347,19 @@ static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) continuation... */ if (p->cjs.is_escape) { /* Yes, a different continuation. That is, apply a non-functional continuation - that is based on a (potentially) different prompt. Loop, in case - we have a kind of tail-call to another such contionuation: */ + that is based on a (potentially) different prompt. The d-w record + is already removed as necessary at the cont call site in "eval.c". + Loop, in case we have a kind of tail-call to another such contionuation: */ Scheme_Cont *target; target = (Scheme_Cont *)p->cjs.val; reset_cjs(&p->cjs); - + v = compose_continuation(target, 1, (Scheme_Object *)prompt); if (v) { /* Got a result: */ + prompt_unwind_one_dw(prompt_tag); handler = NULL; } else { /* Escaping, maybe to here... */ @@ -5081,39 +5375,27 @@ static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) } else { /* It's an abort to here, so fall though and pick up the values. */ + prompt_unwind_one_dw(prompt_tag); v = NULL; } } else if (p->cjs.is_escape) { /* We're trying to get to a prompt in this meta-continuation. Jump again. */ - Scheme_Prompt *targetc = (Scheme_Prompt *)p->cjs.jumping_to_continuation; - if ((!targetc->boundary_overflow_id && !p->overflow) - || (targetc->boundary_overflow_id == p->overflow->id)) { - /* Jump directly to the target. */ - scheme_longjmp(*targetc->prompt_buf, 1); - } else { - /* More hassle: need to unwind overflows to get to the prompt. */ - Scheme_Overflow *overflow = p->overflow; - while (overflow->prev - && (!overflow->prev->id - || (overflow->prev->id != targetc->boundary_overflow_id))) { - overflow = overflow->prev; - } - p->overflow = overflow; - p->stack_start = overflow->stack_start; - scheme_longjmpup(&overflow->jmp->cont); - } + continue_prompt_escape(); return NULL; } else { /* Exception-level or call/ec escape. Continue jumping: */ restore_from_prompt(prompt); + prompt_unwind_one_dw(prompt_tag); scheme_longjmp(*p->error_buf, 1); return NULL; } } } else { /* It was an abort to here; fall through, which picks up - p->cjs.val to deliver to the handler. */ + p->cjs.val to deliver to the handler. First discard the + dw record that we introduced. */ + prompt_unwind_one_dw(prompt_tag); v = NULL; } @@ -5157,10 +5439,17 @@ static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) } } else { /* Other error-like escape: */ + if ((p->dw != prompt_dw) + && (!p->dw || !prompt_dw->id || (p->dw->id != prompt_dw->id))) { + /* A full continuation jump was interrupted by an + escape continuation jump (in a dw pre or post thunk). */ + } else + prompt_unwind_one_dw(prompt_tag); scheme_longjmp(*p->error_buf, 1); return NULL; } } else { + prompt_unwind_one_dw(prompt_tag); handler = NULL; argc = 0; argv = NULL; @@ -5199,6 +5488,60 @@ static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[]) return v; } +static Scheme_Object *propagate_abort(int argc, Scheme_Object **argv) +{ + Scheme_Object **argv2; + + argv2 = MALLOC_N(Scheme_Object *, argc + 1); + memcpy(argv2 XFORM_OK_PLUS 1, argv, sizeof(Scheme_Object *) * argc); + argv2[0] = scheme_default_prompt_tag; + + return _scheme_apply(abort_continuation_proc, argc+1, argv2); +} + +static Scheme_Object *do_call_with_prompt(Scheme_Closed_Prim f, void *data, + int multi, int top_level) +{ + Scheme_Object *prim, *a[3]; + + prim = scheme_make_closed_prim(f, data); + a[0] = prim; + a[1] = scheme_default_prompt_tag; + a[2] = scheme_make_prim(propagate_abort); + + if (multi) { + if (top_level) + return scheme_apply_multi(call_with_prompt_proc, 3, a); + else + return _scheme_apply_multi(call_with_prompt_proc, 3, a); + } else { + if (top_level) + return scheme_apply(call_with_prompt_proc, 3, a); + else + return _scheme_apply(call_with_prompt_proc, 3, a); + } +} + +Scheme_Object *scheme_call_with_prompt(Scheme_Closed_Prim f, void *data) +{ + return do_call_with_prompt(f, data, 0, 1); +} + +Scheme_Object *scheme_call_with_prompt_multi(Scheme_Closed_Prim f, void *data) +{ + return do_call_with_prompt(f, data, 1, 1); +} + +Scheme_Object *_scheme_call_with_prompt(Scheme_Closed_Prim f, void *data) +{ + return do_call_with_prompt(f, data, 0, 0); +} + +Scheme_Object *_scheme_call_with_prompt_multi(Scheme_Closed_Prim f, void *data) +{ + return do_call_with_prompt(f, data, 1, 0); +} + Scheme_Object *scheme_compose_continuation(Scheme_Cont *cont, int num_rands, Scheme_Object *value) { Scheme_Meta_Continuation *mc; @@ -5273,9 +5616,19 @@ Scheme_Object *scheme_compose_continuation(Scheme_Cont *cont, int num_rands, Sch value = compose_continuation(cont, 0, NULL); + scheme_current_thread->next_meta -= 1; + if (!value) { - /* Continue escape */ - scheme_longjmp(*scheme_current_thread->error_buf, 1); + /* Continue escape --- maybe a direct jump to a prompt + in this meta-continuation. */ + Scheme_Thread *p = scheme_current_thread; + if (p->cjs.is_escape) { + /* We're trying to get to a prompt in this meta-continuation. + Jump again. */ + continue_prompt_escape(); + } else { + scheme_longjmp(*scheme_current_thread->error_buf, 1); + } } return value; @@ -5294,29 +5647,30 @@ static Scheme_Object *abort_continuation (int argc, Scheme_Object *argv[]) } prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag)); - if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) { + if (!prompt && SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) + prompt = original_default_prompt; + + if (!prompt) { scheme_arg_mismatch("abort-current-continuation", "continuation includes no prompt with the given tag: ", prompt_tag); return NULL; } - if (prompt) { - if (argc == 2) { - p->cjs.num_vals = 1; - p->cjs.val = argv[1]; - } else { - Scheme_Object **vals; - int i; - vals = MALLOC_N(Scheme_Object *, argc - 1); - for (i = argc; i-- > 1; ) { - vals[i-1] = argv[i]; - } - p->cjs.num_vals = argc - 1; - p->cjs.val = (Scheme_Object *)vals; + if (argc == 2) { + p->cjs.num_vals = 1; + p->cjs.val = argv[1]; + } else { + Scheme_Object **vals; + int i; + vals = MALLOC_N(Scheme_Object *, argc - 1); + for (i = argc; i-- > 1; ) { + vals[i-1] = argv[i]; } - p->cjs.jumping_to_continuation = (Scheme_Object *)prompt; + p->cjs.num_vals = argc - 1; + p->cjs.val = (Scheme_Object *)vals; } + p->cjs.jumping_to_continuation = (Scheme_Object *)prompt; scheme_longjmp(*p->error_buf, 1); @@ -5435,13 +5789,13 @@ static Scheme_Object *continuation_marks(Scheme_Thread *p, #f (empty) hash-table: maps prompt tag to tag-cache chain : for default_scheme_prompt_tag - (vector chain key val) : chain is for default_scheme_prompt_tag, - key+val is for !prompt_tag + (vector chain key val depth) : chain is for default_scheme_prompt_tag, + key+val+depth is for !prompt_tag A tag-cache is one of: chain : the chain we're looking for - (vector chain key val): key = NULL implies that val is - a table of mappings from keys to vals + (vector chain key val depth) : key = NULL implies that val is + a table of mappings from keys to (cons val depth)s */ if (prompt_tag && (find[pos].key == SCHEME_PTR_VAL(prompt_tag))) { @@ -5528,9 +5882,10 @@ static Scheme_Object *continuation_marks(Scheme_Thread *p, Scheme_Hash_Table *ht; Scheme_Object *vec; ht = scheme_make_hash_table(SCHEME_hash_ptr); - vec = scheme_make_vector(3, NULL); + vec = scheme_make_vector(4, NULL); SCHEME_VEC_ELS(vec)[1] = SCHEME_VEC_ELS(cache)[1]; SCHEME_VEC_ELS(vec)[2] = SCHEME_VEC_ELS(cache)[2]; + SCHEME_VEC_ELS(vec)[3] = SCHEME_VEC_ELS(cache)[3]; scheme_hash_set(ht, scheme_false, vec); if (!prompt_tag) SCHEME_VEC_ELS(vec)[0] = (Scheme_Object *)pr; @@ -5661,7 +6016,7 @@ cont_marks(int argc, Scheme_Object *argv[]) return NULL; } else { Scheme_Meta_Continuation *mc; - scheme_extract_one_cc_mark_with_meta(NULL, argv[0], NULL, &mc); + scheme_extract_one_cc_mark_with_meta(NULL, argv[0], NULL, &mc, NULL); return continuation_marks(scheme_current_thread, NULL, argv[0], mc, prompt_tag, "continuation-marks", 0); @@ -5705,7 +6060,8 @@ extract_cc_marks(int argc, Scheme_Object *argv[]) key = argv[1]; if ((key == scheme_parameterization_key) - || (key == scheme_break_enabled_key)) { + || (key == scheme_break_enabled_key) + || (key == scheme_exn_handler_key)) { scheme_signal_error("continuation-mark-set->list: secret key leaked!"); return NULL; } @@ -5764,7 +6120,8 @@ extract_cc_markses(int argc, Scheme_Object *argv[]) for (pr = argv[1], i = 0; SCHEME_PAIRP(pr); pr = SCHEME_CDR(pr), i++) { keys[i] = SCHEME_CAR(pr); if ((keys[i] == scheme_parameterization_key) - || (keys[i] == scheme_break_enabled_key)) { + || (keys[i] == scheme_break_enabled_key) + || (keys[i] == scheme_exn_handler_key)) { scheme_signal_error("continuation-mark-set->list: secret key leaked!"); return NULL; } @@ -5882,7 +6239,8 @@ extract_cc_proc_marks(int argc, Scheme_Object *argv[]) Scheme_Object * scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key, - Scheme_Object *prompt_tag, Scheme_Meta_Continuation **meta) + Scheme_Object *prompt_tag, Scheme_Meta_Continuation **_meta, + MZ_MARK_POS_TYPE *_vpos) { if (mark_set) { Scheme_Cont_Mark_Chain *chain; @@ -5897,6 +6255,7 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key long findpos, bottom, startpos; long pos; Scheme_Object *val = NULL; + MZ_MARK_POS_TYPE vpos = 0; Scheme_Object *cache; Scheme_Meta_Continuation *mc = NULL; GC_CAN_IGNORE Scheme_Cont_Mark *seg; @@ -5927,6 +6286,7 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key if (SAME_OBJ(seg[pos].key, key)) { val = seg[pos].val; + vpos = seg[pos].pos; break; } else { cache = seg[pos].cache; @@ -5941,6 +6301,7 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key if (SCHEME_VEC_ELS(cache)[1]) { if (SAME_OBJ(SCHEME_VEC_ELS(cache)[1], key)) { val = SCHEME_VEC_ELS(cache)[2]; + vpos = (MZ_MARK_POS_TYPE)SCHEME_VEC_ELS(cache)[3]; break; } } else { @@ -5948,10 +6309,8 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key ht = (Scheme_Hash_Table *)SCHEME_VEC_ELS(cache)[2]; val = scheme_hash_get(ht, key); if (val) { - /* In the hash table, null_val_key is used to indicate - that there's no value for the key. */ - if (SAME_OBJ(val, null_val_key)) - val = NULL; + vpos = (MZ_MARK_POS_TYPE)SCHEME_CDR(val); + val = SCHEME_CAR(val); break; } } @@ -5987,9 +6346,10 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key if (SCHEME_VEC_ELS(cache)[0]) scheme_hash_set(cht, scheme_default_prompt_tag, SCHEME_VEC_ELS(cache)[0]); /* Don't try to use cache just for the null key */ - vec = scheme_make_vector(3, NULL); + vec = scheme_make_vector(4, NULL); SCHEME_VEC_ELS(vec)[1] = SCHEME_VEC_ELS(cache)[1]; SCHEME_VEC_ELS(vec)[2] = SCHEME_VEC_ELS(cache)[2]; + SCHEME_VEC_ELS(vec)[3] = SCHEME_VEC_ELS(cache)[3]; scheme_hash_set(cht, scheme_false, vec); } else { scheme_hash_set(cht, scheme_default_prompt_tag, cache); @@ -6002,9 +6362,10 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key if (!cache || !SCHEME_VECTORP(cache)) { /* No cache so far, so map one key */ - cache = scheme_make_vector(3, NULL); + cache = scheme_make_vector(4, NULL); SCHEME_VEC_ELS(cache)[1] = key; SCHEME_VEC_ELS(cache)[2] = val; + SCHEME_VEC_ELS(cache)[3] = (Scheme_Object *)vpos; if (cht) { scheme_hash_set(cht, prompt_tag ? prompt_tag : scheme_false, cache); } else { @@ -6013,34 +6374,30 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key seg[pos].cache = cache; } } else { - if (!null_val_key) { - REGISTER_SO(null_val_key); - null_val_key = scheme_make_symbol("nul"); - } - if (SCHEME_VEC_ELS(cache)[1]) { /* More than one cached key, now; create hash table */ Scheme_Hash_Table *ht; - Scheme_Object *v2; ht = scheme_make_hash_table(SCHEME_hash_ptr); - scheme_hash_set(ht, key, val ? val : null_val_key); - v2 = SCHEME_VEC_ELS(cache)[2]; - scheme_hash_set(ht, SCHEME_VEC_ELS(cache)[1], v2 ? v2 : null_val_key); + scheme_hash_set(ht, key, scheme_make_raw_pair(val, (Scheme_Object *)vpos)); + scheme_hash_set(ht, SCHEME_VEC_ELS(cache)[1], scheme_make_raw_pair(SCHEME_VEC_ELS(cache)[2], + SCHEME_VEC_ELS(cache)[3])); SCHEME_VEC_ELS(cache)[1] = NULL; SCHEME_VEC_ELS(cache)[2] = (Scheme_Object *)ht; } else { /* Already have a hash table */ Scheme_Hash_Table *ht; ht = (Scheme_Hash_Table *)SCHEME_VEC_ELS(cache)[2]; - scheme_hash_set(ht, key, val ? val : null_val_key); + scheme_hash_set(ht, key, scheme_make_raw_pair(val, (Scheme_Object *)vpos)); } } } } if (val) { - if (meta) - *meta = mc; + if (_meta) + *_meta = mc; + if (_vpos) + *_vpos = vpos; return val; } @@ -6065,14 +6422,14 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key Scheme_Object * scheme_extract_one_cc_mark(Scheme_Object *mark_set, Scheme_Object *key) { - return scheme_extract_one_cc_mark_with_meta(mark_set, key, NULL, NULL); + return scheme_extract_one_cc_mark_with_meta(mark_set, key, NULL, NULL, NULL); } Scheme_Object * scheme_extract_one_cc_mark_to_tag(Scheme_Object *mark_set, Scheme_Object *key, Scheme_Object *prompt_tag) { - return scheme_extract_one_cc_mark_with_meta(mark_set, key, prompt_tag, NULL); + return scheme_extract_one_cc_mark_with_meta(mark_set, key, prompt_tag, NULL, NULL); } static Scheme_Object * @@ -6089,7 +6446,7 @@ extract_one_cc_mark(int argc, Scheme_Object *argv[]) || (argv[1] == scheme_break_enabled_key)) { /* Minor hack: these keys are used in "startup.ss" to access parameterizations, and we want that access to go through - prompts. If they keys somehow leake, it's ok, because that + prompts. If they keys somehow leaked, it's ok, because that doesn't expose anything that isn't already exposed by functions like `current-parameterization'. */ prompt_tag = NULL; @@ -6114,7 +6471,7 @@ extract_one_cc_mark(int argc, Scheme_Object *argv[]) } r = scheme_extract_one_cc_mark_with_meta(SCHEME_TRUEP(argv[0]) ? argv[0] : NULL, argv[1], - prompt_tag, NULL); + prompt_tag, NULL, NULL); if (!r) { if (argc > 2) r = argv[2]; @@ -6125,6 +6482,19 @@ extract_one_cc_mark(int argc, Scheme_Object *argv[]) return r; } +int scheme_is_cm_deeper(Scheme_Meta_Continuation *m1, MZ_MARK_POS_TYPE p1, + Scheme_Meta_Continuation *m2, MZ_MARK_POS_TYPE p2) +{ + if (m1 != m2) { + if (!m1) + return 0; + if (!m2) + return 1; + return (m1->depth < m2->depth); + } + return p1 < p2; +} + static Scheme_Object *continuation_prompt_available(int argc, Scheme_Object *argv[]) { Scheme_Object *prompt_tag; @@ -6148,7 +6518,7 @@ static Scheme_Object *continuation_prompt_available(int argc, Scheme_Object *arg if (SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) return scheme_true; - scheme_extract_one_cc_mark_with_meta(NULL, argv[1], NULL, &mc); + scheme_extract_one_cc_mark_with_meta(NULL, argv[1], NULL, &mc, NULL); if (continuation_marks(scheme_current_thread, NULL, argv[1], mc, prompt_tag, NULL, 0)) @@ -6281,8 +6651,9 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), Scheme_Object * volatile v, ** volatile save_values; volatile int err; Scheme_Dynamic_Wind * volatile dw; - volatile int save_count; + volatile int save_count, old_cac; Scheme_Thread *p; + int delta; p = scheme_current_thread; @@ -6299,6 +6670,7 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), dw->depth = dw->prev->depth + 1; else dw->depth = 0; + dw->next_meta = p->next_meta; if (pre) { ASSERT_SUSPEND_BREAK_ZERO(); @@ -6308,19 +6680,20 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), --p->suspend_break; } + p->next_meta = 0; p->dw = dw; dw->saveerr = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; - scheme_save_env_stack_w_thread(dw->envss, p); + scheme_save_env_stack_w_thread(dw->envss, p); if (scheme_setjmp(newbuf)) { p = scheme_current_thread; scheme_restore_env_stack_w_thread(dw->envss, p); if ((p->dw != dw) && (!p->dw || !dw->id || (p->dw->id != dw->id))) { - /* Apparently, a full continuation jump was interrupted by an + /* A full continuation jump was interrupted by an escape continuation jump (in a dw pre or post thunk). Either 1. this dw's post is already done for an interupted upward jump; or @@ -6359,13 +6732,17 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), save_values = NULL; } + delta = p->dw->next_meta; p->dw = p->dw->prev; /* note: use p->dw, not dw, in case continuation was composed */ + p->next_meta += delta; /* Don't run Scheme-based dyn-winds when we're killing a nested thread. */ if (err && p->cjs.is_kill && (post == post_dyn_wind)) post = NULL; + old_cac = scheme_continuation_application_count; + if (post) { p->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { @@ -6386,8 +6763,42 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), } } - if (err) + if (err) { + /* If we're escaping to a prompt or escape continuation, + check that it's still there. */ + if ((old_cac != scheme_continuation_application_count) + && p->cjs.jumping_to_continuation) { + p->error_buf = dw->saveerr; + if (SAME_TYPE(SCHEME_TYPE(p->cjs.jumping_to_continuation), scheme_prompt_type)) { + Scheme_Object *tag; + Scheme_Prompt *prompt; + tag = ((Scheme_Prompt *)p->cjs.jumping_to_continuation)->tag; + prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(tag)); + if (!prompt && SAME_OBJ(scheme_default_prompt_tag, tag)) { + prompt = original_default_prompt; + } + if (!prompt) { + scheme_arg_mismatch("abort-current-continuation", + "abort in progress, but current continuation includes" + " no prompt with the given tag" + " after a `dynamic-wind' post-thunk return: ", + tag); + return NULL; + } + p->cjs.jumping_to_continuation = (Scheme_Object *)prompt; + } else if (SCHEME_ECONTP(p->cjs.jumping_to_continuation)) { + if (!scheme_escape_continuation_ok(p->cjs.jumping_to_continuation)) { + scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION, + "jump to escape continuation in progress," + " but the target is not in the current continuation" + " after a `dynamic-wind' post-thunk return"); + return NULL; + } + } + } + scheme_longjmp(*dw->saveerr, 1); + } p->error_buf = dw->saveerr; @@ -6404,7 +6815,7 @@ Scheme_Object *scheme_dynamic_wind(void (*pre)(void *), return v; } -void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post_part, int meta_depth) +void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post_part, int meta_depth, Scheme_Cont *recheck) { /* Run the given dw pre/post thunk, but let it see only the continuation marks starting with the given meta-continuation. @@ -6419,7 +6830,7 @@ void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post_part, int meta_de The pre/post thunk might install it's own marks. In that case, it uses the current mark stack. We don't care about the current mark stack's state, since we're either on our way out, or we're on our - way in an we haven't started restoring the marks. So start with + way in and we haven't started restoring the marks. So start with a clean mark stack, but make sure it doesn't appear to be in tail position for a meta-continuation. @@ -6437,7 +6848,8 @@ void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post_part, int meta_de Scheme_Thread *p = scheme_current_thread; Scheme_Meta_Continuation *mc, *old_mc, *rest; long delta; - int i; + int i, actual_depth; + int old_cac; MZ_CONT_MARK_STACK = p->cont_mark_stack_bottom; MZ_CONT_MARK_POS = p->meta_continuation->meta_tail_pos + 2; @@ -6445,35 +6857,39 @@ void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post_part, int meta_de old_mc = p->meta_continuation; /* clone the first meta_depth meta continuations: */ - for (i = 0, rest = old_mc; i < meta_depth; i++) { + for (i = 0, actual_depth = 0, rest = old_mc; i < meta_depth; actual_depth++) { + if (rest->overflow) + i++; rest = rest->next; } - mc = clone_meta_cont(p->meta_continuation, NULL, meta_depth, NULL, NULL, rest); + mc = clone_meta_cont(p->meta_continuation, NULL, actual_depth, NULL, NULL, rest); p->meta_continuation = mc; - /* strip the marks of the first meta_depth-1 meta continuations */ + /* strip the marks of the first actual_depth-1 meta continuations */ rest = mc; - for (i = 0; i < meta_depth - 1; i++) { + for (i = 0; i < actual_depth - 1; i++) { rest->cont_mark_shareable = 0; rest->cont_mark_offset = 0; rest->cont_mark_stack_copied = NULL; rest = rest->next; } - /* prune the meta_depth's meta continuation's marks. */ - delta = dw->envss.cont_mark_stack - rest->cont_mark_offset; + /* prune the actual_depth's meta continuation's marks. */ + delta = rest->cont_mark_stack - dw->envss.cont_mark_stack; if (delta) { rest->cont_mark_shareable -= delta; - rest->cont_mark_offset += delta; + rest->cont_mark_stack -= delta; if (rest->cont_mark_shareable) { Scheme_Cont_Mark *cp; cp = MALLOC_N(Scheme_Cont_Mark, rest->cont_mark_shareable); - memcpy(cp, rest->cont_mark_stack_copied + delta, rest->cont_mark_shareable * sizeof(Scheme_Cont_Mark)); + memcpy(cp, rest->cont_mark_stack_copied, rest->cont_mark_shareable * sizeof(Scheme_Cont_Mark)); rest->cont_mark_stack_copied = cp; } else rest->cont_mark_stack_copied = NULL; } + old_cac = scheme_continuation_application_count; + /* Run the post or pre thunk: */ if (post_part) { DW_PrePost_Proc post = dw->post; @@ -6483,11 +6899,21 @@ void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post_part, int meta_de pre(dw->data); } - /* restore the first meta_depth meta continuations: */ - for (i = 0, rest = p->meta_continuation; i < meta_depth; i++) { + p = scheme_current_thread; + + if (recheck) { + if (scheme_continuation_application_count != old_cac) { + scheme_recheck_prompt_and_barrier(recheck); + } + } + + /* restore the first meta_depth meta continuations (onto + a tail that is possibly different than when we captured + old_mc) */ + for (i = 0, rest = p->meta_continuation; i < actual_depth; i++) { rest = rest->next; } - old_mc = clone_meta_cont(old_mc, NULL, meta_depth, NULL, NULL, rest); + old_mc = clone_meta_cont(old_mc, NULL, actual_depth, NULL, NULL, rest); p->meta_continuation = old_mc; } diff --git a/src/mzscheme/src/hash.c b/src/mzscheme/src/hash.c index 2502e7a0b4..2cedbdb863 100644 --- a/src/mzscheme/src/hash.c +++ b/src/mzscheme/src/hash.c @@ -310,7 +310,7 @@ static Scheme_Object *do_hash_set(Scheme_Hash_Table *table, Scheme_Object *key, return val; } -static Scheme_Object *do_hash_get(Scheme_Hash_Table *table, Scheme_Object *key) +XFORM_NONGCING static Scheme_Object *do_hash_get(Scheme_Hash_Table *table, Scheme_Object *key) { Scheme_Object *tkey, **keys; hash_v_t h, h2; @@ -368,6 +368,15 @@ Scheme_Object *scheme_hash_get(Scheme_Hash_Table *table, Scheme_Object *key) return do_hash_get(table, key); } +Scheme_Object *scheme_eq_hash_get(Scheme_Hash_Table *table, Scheme_Object *key) +/* Specialized to allow XFORM_NONGCING */ +{ + if (!table->vals) + return NULL; + else + return do_hash_get(table, key); +} + int scheme_hash_table_equal(Scheme_Hash_Table *t1, Scheme_Hash_Table *t2) { Scheme_Object **vals, **keys, *v; diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index af8ddbdf14..4fbdaa5794 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -120,6 +120,7 @@ static void *struct_pred_branch_code; static void *struct_get_code; static void *bad_app_vals_target; static void *app_values_slow_code, *app_values_multi_slow_code, *app_values_tail_slow_code; +static void *finish_tail_call_code, *finish_tail_call_fixup_code; typedef struct { MZTAG_IF_REQUIRED @@ -1280,7 +1281,9 @@ static int generate_direct_prim_tail_call(mz_jit_state *jitter, int num_rands) } static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_native, int need_set_rs) -/* If num_rands < 0, then argc is in LOCAL2 and arguments are already below RUNSTACK_BASE */ +/* If num_rands < 0, then argc is in LOCAL2 and arguments are already below RUNSTACK_BASE. + If direct_native == 2, then some arguments are already in place (shallower in the runstack + than the arguments to move). */ { int i; GC_CAN_IGNORE jit_insn *ref, *ref2, *ref4, *ref5; @@ -1389,6 +1392,23 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_na } else { mz_get_local_p(JIT_R0, JIT_LOCAL2); } + /* Since we've overwritten JIT_RUNSTACK, if this is not shared + code, and if this is 3m, then the runstack no longer + has a pointer to the closure for this code. To ensure that + an appropriate return point exists, jump to static code + for the rest. (This is the slow path, anyway.) */ + __END_SHORT_JUMPS__(num_rands < 100); + if (direct_native > 1) { + (void)jit_jmpi(finish_tail_call_fixup_code); + } else { + (void)jit_jmpi(finish_tail_call_code); + } + + return 1; +} + +static int generate_finish_tail_call(mz_jit_state *jitter, int direct_native) +{ mz_prepare(3); CHECK_LIMIT(); jit_pusharg_p(JIT_RUNSTACK); @@ -1399,14 +1419,13 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_na } else { (void)mz_finish(_scheme_tail_apply_from_native); } + CHECK_LIMIT(); /* Pop saved runstack val and return: */ mz_get_local_p(JIT_NOT_RET, JIT_LOCAL1); jit_sti_p(&scheme_current_runstack, JIT_NOT_RET); mz_pop_locals(); jit_ret(); - __END_SHORT_JUMPS__(num_rands < 100); - return 1; } @@ -4113,6 +4132,11 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m END_JIT_DATA(9); } break; + case SPLICE_EXPD: + { + scheme_signal_error("cannot JIT a top-level splice form"); + } + break; default: { JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); @@ -4993,6 +5017,31 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) jit_ret(); CHECK_LIMIT(); + /* *** app_values_tail_slow_code *** */ + /* RELIES ON jit_prolog(3) FROM ABOVE */ + /* Rator in V1, arguments are in thread's multiple-values cells. */ + app_values_tail_slow_code = jit_get_ip().ptr; + JIT_UPDATE_THREAD_RSPTR(); + mz_prepare(1); + jit_pusharg_p(JIT_V1); + (void)mz_finish(tail_call_with_values_from_multiple_result); + jit_retval(JIT_R0); + /* Pop saved runstack val and return: */ + mz_get_local_p(JIT_NOT_RET, JIT_LOCAL1); + jit_sti_p(&scheme_current_runstack, JIT_NOT_RET); + mz_pop_locals(); + jit_ret(); + CHECK_LIMIT(); + + /* *** finish_tail_call_[fixup_]code *** */ + /* RELIES ON jit_prolog(3) FROM ABOVE */ + finish_tail_call_code = jit_get_ip().ptr; + generate_finish_tail_call(jitter, 0); + CHECK_LIMIT(); + finish_tail_call_fixup_code = jit_get_ip().ptr; + generate_finish_tail_call(jitter, 2); + CHECK_LIMIT(); + /* *** get_stack_pointer_code *** */ get_stack_pointer_code = jit_get_ip().ptr; jit_leaf(0); @@ -5066,21 +5115,6 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) CHECK_LIMIT(); } - /* *** app_values_tail_slow_code *** */ - /* Rator in V1, arguments are in thread's multiple-values cells. */ - app_values_tail_slow_code = jit_get_ip().ptr; - JIT_UPDATE_THREAD_RSPTR(); - mz_prepare(1); - jit_pusharg_p(JIT_V1); - (void)mz_finish(tail_call_with_values_from_multiple_result); - jit_retval(JIT_R0); - /* Pop saved runstack val and return: */ - mz_get_local_p(JIT_NOT_RET, JIT_LOCAL1); - jit_sti_p(&scheme_current_runstack, JIT_NOT_RET); - mz_pop_locals(); - jit_ret(); - CHECK_LIMIT(); - /* *** {vector,string,bytes}_{ref,set}_[check_index_]code *** */ /* R0 is vector/string/bytes, R1 is index (Scheme number in check-index mode), V1 is vector/string/bytes offset in non-check-index mode (and for diff --git a/src/mzscheme/src/mk-uchar.ss b/src/mzscheme/src/mk-uchar.ss index 66c4dc030b..4316355772 100644 --- a/src/mzscheme/src/mk-uchar.ss +++ b/src/mzscheme/src/mk-uchar.ss @@ -344,7 +344,7 @@ #f ;; whitespace (or (member cat space-cats) - (member code '(#x9 #xa #xb #xc #xd))) + (member code '(#x9 #xa #xb #xc #xd #x85))) ;; control (or (<= #x0000 code #x001F) (<= #x007F code #x009F)) diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index 4a229e6870..41cbfae8bc 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -150,6 +150,7 @@ static Scheme_Object *set_stx; static Scheme_Object *with_continuation_mark_stx; static Scheme_Object *letrec_syntaxes_stx; static Scheme_Object *var_ref_stx; +static Scheme_Object *expression_stx; static Scheme_Env *initial_modules_env; static int num_initial_modules; @@ -483,6 +484,7 @@ void scheme_finish_kernel(Scheme_Env *env) REGISTER_SO(with_continuation_mark_stx); REGISTER_SO(letrec_syntaxes_stx); REGISTER_SO(var_ref_stx); + REGISTER_SO(expression_stx); w = scheme_sys_wraps0; scheme_module_stx = scheme_datum_to_syntax(scheme_intern_symbol("module"), scheme_false, w, 0, 0); @@ -507,6 +509,7 @@ void scheme_finish_kernel(Scheme_Env *env) with_continuation_mark_stx = scheme_datum_to_syntax(scheme_intern_symbol("with-continuation-mark"), scheme_false, w, 0, 0); letrec_syntaxes_stx = scheme_datum_to_syntax(scheme_intern_symbol("letrec-syntaxes+values"), scheme_false, w, 0, 0); var_ref_stx = scheme_datum_to_syntax(scheme_intern_symbol("#%variable-reference"), scheme_false, w, 0, 0); + expression_stx = scheme_datum_to_syntax(scheme_intern_symbol("#%expression"), scheme_false, w, 0, 0); REGISTER_SO(prefix_symbol); REGISTER_SO(only_symbol); @@ -2112,7 +2115,8 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object symbol = scheme_tl_id_sym(env, symbol, NULL, 0); if ((env == scheme_initial_env) - || (env->module->primitive) + || ((env->module->primitive + && !env->module->provide_protects)) /* For now[?], we're pretending that all definitions exists for non-0 local phase. */ || env->mod_phase) { @@ -2129,7 +2133,8 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object int need_cert = 0; if (position < env->module->me->num_var_provides) { - if (SCHEME_FALSEP(env->module->me->provide_srcs[position])) + if (!env->module->me->provide_srcs + || SCHEME_FALSEP(env->module->me->provide_srcs[position])) isym = env->module->me->provide_src_names[position]; else isym = NULL; @@ -2203,7 +2208,7 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object } if (want_pos) - return pos; + return pos; else return symbol; } @@ -2779,6 +2784,8 @@ void scheme_finish_primitive_module(Scheme_Env *env) m->me->num_provides = count; m->me->num_var_provides = count; + qsort_provides(exs, NULL, NULL, NULL, 0, count, 1); + env->running = 1; } @@ -2788,12 +2795,16 @@ void scheme_protect_primitive_provide(Scheme_Env *env, Scheme_Object *name) int i; if (!m->provide_protects) { + Scheme_Hash_Table *ht; char *exps; + ht = scheme_make_hash_table(SCHEME_hash_ptr); exps = MALLOC_N_ATOMIC(char, m->me->num_provides); for (i = m->me->num_provides; i--; ) { exps[i] = 0; + scheme_hash_set(ht, m->me->provides[i], scheme_make_integer(i)); } m->provide_protects = exps; + m->accessible = ht; } if (name) { @@ -3883,7 +3894,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, { Scheme_Object *stop; stop = scheme_get_stop_expander(); - scheme_add_local_syntax(20, xenv); + scheme_add_local_syntax(21, xenv); scheme_set_local_syntax(0, scheme_begin_stx, stop, xenv); scheme_set_local_syntax(1, scheme_define_values_stx, stop, xenv); scheme_set_local_syntax(2, scheme_define_syntaxes_stx, stop, xenv); @@ -3904,6 +3915,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, scheme_set_local_syntax(17, with_continuation_mark_stx, stop, xenv); scheme_set_local_syntax(18, letrec_syntaxes_stx, stop, xenv); scheme_set_local_syntax(19, var_ref_stx, stop, xenv); + scheme_set_local_syntax(20, expression_stx, stop, xenv); } first = scheme_null; diff --git a/src/mzscheme/src/mzmark.c b/src/mzscheme/src/mzmark.c index 4b15836641..2292375955 100644 --- a/src/mzscheme/src/mzmark.c +++ b/src/mzscheme/src/mzmark.c @@ -884,6 +884,7 @@ static int cont_proc_MARK(void *p) { gcMARK(c->dw); gcMARK(c->prompt_tag); gcMARK(c->meta_continuation); + gcMARK(c->common_dw); gcMARK(c->save_overflow); gcMARK(c->runstack_copied); gcMARK(c->runstack_owner); @@ -898,15 +899,19 @@ static int cont_proc_MARK(void *p) { MARK_jmpup(&c->buf); MARK_cjs(&c->cjs); MARK_stack_state(&c->ss); + gcMARK(c->barrier_prompt); gcMARK(c->runstack_start); gcMARK(c->runstack_saved); + gcMARK(c->prompt_id); + /* These shouldn't actually persist across a GC, but just in case... */ gcMARK(c->value); gcMARK(c->resume_to); gcMARK(c->use_next_cont); gcMARK(c->extra_marks); + gcMARK(c->shortcut_prompt); return gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); @@ -918,6 +923,7 @@ static int cont_proc_FIXUP(void *p) { gcFIXUP(c->dw); gcFIXUP(c->prompt_tag); gcFIXUP(c->meta_continuation); + gcFIXUP(c->common_dw); gcFIXUP(c->save_overflow); gcFIXUP(c->runstack_copied); gcFIXUP(c->runstack_owner); @@ -932,15 +938,19 @@ static int cont_proc_FIXUP(void *p) { FIXUP_jmpup(&c->buf); FIXUP_cjs(&c->cjs); FIXUP_stack_state(&c->ss); + gcFIXUP(c->barrier_prompt); gcFIXUP(c->runstack_start); gcFIXUP(c->runstack_saved); + gcFIXUP(c->prompt_id); + /* These shouldn't actually persist across a GC, but just in case... */ gcFIXUP(c->value); gcFIXUP(c->resume_to); gcFIXUP(c->use_next_cont); gcFIXUP(c->extra_marks); + gcFIXUP(c->shortcut_prompt); return gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); @@ -1090,6 +1100,7 @@ static int escaping_cont_proc_MARK(void *p) { gcMARK(c->native_trace); #endif + gcMARK(c->barrier_prompt); MARK_stack_state(&c->envss); return @@ -1103,6 +1114,7 @@ static int escaping_cont_proc_FIXUP(void *p) { gcFIXUP(c->native_trace); #endif + gcFIXUP(c->barrier_prompt); FIXUP_stack_state(&c->envss); return @@ -1574,7 +1586,6 @@ static int thread_val_MARK(void *p) { gcMARK(pr->runstack_swapped); pr->spare_runstack = NULL; /* just in case */ - gcMARK(pr->barrier_prompt); gcMARK(pr->meta_prompt); gcMARK(pr->meta_continuation); @@ -1664,7 +1675,6 @@ static int thread_val_FIXUP(void *p) { gcFIXUP(pr->runstack_swapped); pr->spare_runstack = NULL; /* just in case */ - gcFIXUP(pr->barrier_prompt); gcFIXUP(pr->meta_prompt); gcFIXUP(pr->meta_continuation); @@ -1740,8 +1750,9 @@ static int prompt_val_SIZE(void *p) { static int prompt_val_MARK(void *p) { Scheme_Prompt *pr = (Scheme_Prompt *)p; gcMARK(pr->boundary_overflow_id); - gcMARK(pr->boundary_dw_id); gcMARK(pr->runstack_boundary_start); + gcMARK(pr->tag); + gcMARK(pr->id); return gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); } @@ -1749,8 +1760,9 @@ static int prompt_val_MARK(void *p) { static int prompt_val_FIXUP(void *p) { Scheme_Prompt *pr = (Scheme_Prompt *)p; gcFIXUP(pr->boundary_overflow_id); - gcFIXUP(pr->boundary_dw_id); gcFIXUP(pr->runstack_boundary_start); + gcFIXUP(pr->tag); + gcFIXUP(pr->id); return gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); } diff --git a/src/mzscheme/src/mzmarksrc.c b/src/mzscheme/src/mzmarksrc.c index 0c9ae75eee..bfd8c663d1 100644 --- a/src/mzscheme/src/mzmarksrc.c +++ b/src/mzscheme/src/mzmarksrc.c @@ -331,6 +331,7 @@ cont_proc { gcMARK(c->dw); gcMARK(c->prompt_tag); gcMARK(c->meta_continuation); + gcMARK(c->common_dw); gcMARK(c->save_overflow); gcMARK(c->runstack_copied); gcMARK(c->runstack_owner); @@ -345,15 +346,19 @@ cont_proc { MARK_jmpup(&c->buf); MARK_cjs(&c->cjs); MARK_stack_state(&c->ss); + gcMARK(c->barrier_prompt); gcMARK(c->runstack_start); gcMARK(c->runstack_saved); + gcMARK(c->prompt_id); + /* These shouldn't actually persist across a GC, but just in case... */ gcMARK(c->value); gcMARK(c->resume_to); gcMARK(c->use_next_cont); gcMARK(c->extra_marks); + gcMARK(c->shortcut_prompt); size: gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); @@ -417,6 +422,7 @@ escaping_cont_proc { gcMARK(c->native_trace); #endif + gcMARK(c->barrier_prompt); MARK_stack_state(&c->envss); size: @@ -610,7 +616,6 @@ thread_val { gcMARK(pr->runstack_swapped); pr->spare_runstack = NULL; /* just in case */ - gcMARK(pr->barrier_prompt); gcMARK(pr->meta_prompt); gcMARK(pr->meta_continuation); @@ -678,8 +683,9 @@ prompt_val { mark: Scheme_Prompt *pr = (Scheme_Prompt *)p; gcMARK(pr->boundary_overflow_id); - gcMARK(pr->boundary_dw_id); gcMARK(pr->runstack_boundary_start); + gcMARK(pr->tag); + gcMARK(pr->id); size: gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); } diff --git a/src/mzscheme/src/network.c b/src/mzscheme/src/network.c index 512727fa52..81616ceea3 100644 --- a/src/mzscheme/src/network.c +++ b/src/mzscheme/src/network.c @@ -2286,15 +2286,15 @@ static Scheme_Object *tcp_addresses(int argc, Scheme_Object *argv[]) Scheme_Object *result[4]; int with_ports = 0; - if (SCHEME_OUTPORTP(argv[0])) { + if (SCHEME_OUTPUT_PORTP(argv[0])) { Scheme_Output_Port *op; - op = (Scheme_Output_Port *)argv[0]; + op = scheme_output_port_record(argv[0]); if (op->sub_type == scheme_tcp_output_port_type) tcp = op->port_data; closed = op->closed; - } else if (SCHEME_INPORTP(argv[0])) { + } else if (SCHEME_INPUT_PORTP(argv[0])) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)argv[0]; + ip = scheme_input_port_record(argv[0]); if (ip->sub_type == scheme_tcp_input_port_type) tcp = ip->port_data; closed = ip->closed; @@ -2375,9 +2375,9 @@ static Scheme_Object *tcp_addresses(int argc, Scheme_Object *argv[]) static Scheme_Object *tcp_abandon_port(int argc, Scheme_Object *argv[]) { #ifdef USE_TCP - if (SCHEME_OUTPORTP(argv[0])) { + if (SCHEME_OUTPUT_PORTP(argv[0])) { Scheme_Output_Port *op; - op = (Scheme_Output_Port *)argv[0]; + op = scheme_output_port_record(argv[0]); if (op->sub_type == scheme_tcp_output_port_type) { if (!op->closed) { ((Scheme_Tcp *)op->port_data)->flags |= MZ_TCP_ABANDON_OUTPUT; @@ -2385,11 +2385,11 @@ static Scheme_Object *tcp_abandon_port(int argc, Scheme_Object *argv[]) } return scheme_void; } - } else if (SCHEME_INPORTP(argv[0])) { + } else if (SCHEME_INPUT_PORTP(argv[0])) { /* Abandon is not really useful on input ports from the Schemer's perspective, but it's here for completeness. */ Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)argv[0]; + ip = scheme_input_port_record(argv[0]); if (ip->sub_type == scheme_tcp_input_port_type) { if (!ip->closed) { ((Scheme_Tcp *)ip->port_data)->flags |= MZ_TCP_ABANDON_INPUT; @@ -2408,12 +2408,16 @@ static Scheme_Object *tcp_abandon_port(int argc, Scheme_Object *argv[]) static Scheme_Object *tcp_port_p(int argc, Scheme_Object *argv[]) { #ifdef USE_TCP - if (SCHEME_OUTPORTP(argv[0])) { - if (((Scheme_Output_Port *)argv[0])->sub_type == scheme_tcp_output_port_type) { + if (SCHEME_OUTPUT_PORTP(argv[0])) { + Scheme_Output_Port *op; + op = scheme_output_port_record(argv[0]); + if (op->sub_type == scheme_tcp_output_port_type) { return scheme_true; } - } else if (SCHEME_INPORTP(argv[0])) { - if (((Scheme_Input_Port *)argv[0])->sub_type == scheme_tcp_input_port_type) { + } else if (SCHEME_INPUT_PORTP(argv[0])) { + Scheme_Input_Port *ip; + ip = scheme_input_port_record(argv[0]); + if (ip->sub_type == scheme_tcp_input_port_type) { return scheme_true; } } @@ -2462,18 +2466,18 @@ int scheme_get_port_socket(Scheme_Object *p, long *_s) tcp_t s = 0; int s_ok = 0; - if (SCHEME_OUTPORTP(p)) { + if (SCHEME_OUTPUT_PORTP(p)) { Scheme_Output_Port *op; - op = (Scheme_Output_Port *)p; + op = scheme_output_port_record(p); if (op->sub_type == scheme_tcp_output_port_type) { if (!op->closed) { s = ((Scheme_Tcp *)op->port_data)->tcp; s_ok = 1; } } - } else if (SCHEME_INPORTP(p)) { + } else if (SCHEME_INPUT_PORTP(p)) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)p; + ip = scheme_input_port_record(p); if (ip->sub_type == scheme_tcp_input_port_type) { if (!ip->closed) { s = ((Scheme_Tcp *)ip->port_data)->tcp; diff --git a/src/mzscheme/src/port.c b/src/mzscheme/src/port.c index 8125061e89..c99fc8fd9f 100644 --- a/src/mzscheme/src/port.c +++ b/src/mzscheme/src/port.c @@ -1113,7 +1113,7 @@ static int output_ready(Scheme_Object *port, Scheme_Schedule_Info *sinfo) { Scheme_Output_Port *op; - op = (Scheme_Output_Port *)port; + op = scheme_output_port_record(port); if (op->closed) return 1; @@ -1144,7 +1144,7 @@ static void output_need_wakeup (Scheme_Object *port, void *fds) /* If this is a user output port and its evt needs a wakeup, we shouldn't get here. The target use above will take care of it. */ - op = (Scheme_Output_Port *)port; + op = scheme_output_port_record(port); if (op->need_wakeup_fun) { Scheme_Need_Wakeup_Output_Fun f; f = op->need_wakeup_fun; @@ -1154,7 +1154,9 @@ static void output_need_wakeup (Scheme_Object *port, void *fds) int scheme_byte_ready_or_user_port_ready(Scheme_Object *p, Scheme_Schedule_Info *sinfo) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + Scheme_Input_Port *ip; + + ip = scheme_input_port_record(p); if (ip->closed) return 1; @@ -1185,7 +1187,10 @@ XFORM_NONGCING static int pipe_char_count(Scheme_Object *p) { if (p) { Scheme_Pipe *pipe; - pipe = (Scheme_Pipe *)((Scheme_Input_Port *)p)->port_data; + Scheme_Input_Port *ip; + + ip = (Scheme_Input_Port *)p; + pipe = (Scheme_Pipe *)ip->port_data; if (pipe->bufstart <= pipe->bufend) return pipe->bufend - pipe->bufstart; @@ -1357,7 +1362,7 @@ long scheme_get_byte_string_unless(const char *who, if (!peek_skip) peek_skip = scheme_make_integer(0); - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); gs = ip->get_string_fun; ps = ip->peek_string_fun; @@ -1769,7 +1774,9 @@ static void elect_new_main(Scheme_Input_Port *ip) static void release_input_lock_and_elect_new_main(void *_ip) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)_ip; + Scheme_Input_Port *ip; + + ip = scheme_input_port_record(_ip); release_input_lock(ip); elect_new_main(ip); @@ -1783,9 +1790,11 @@ static void check_suspended() static void remove_extra(void *ip_v) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)SCHEME_CAR(ip_v); + Scheme_Input_Port *ip; Scheme_Object *v = SCHEME_CDR(ip_v), *ll, *prev; + ip = scheme_input_port_record(SCHEME_CAR(ip_v)); + prev = NULL; for (ll = ip->input_extras; ll; prev = ll, ll = SCHEME_CDR(ll)) { if (SAME_OBJ(ll, SCHEME_CDR(v))) { @@ -2040,7 +2049,7 @@ int scheme_peeked_read(Scheme_Object *port, Scheme_Input_Port *ip; Scheme_Peeked_Read_Fun pr; - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); unless_evt = SCHEME_PTR2_VAL(unless_evt); @@ -2067,7 +2076,7 @@ Scheme_Object *scheme_progress_evt(Scheme_Object *port) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); if (ip->progress_evt_fun) { Scheme_Progress_Evt_Fun ce; @@ -2260,7 +2269,7 @@ long get_one_byte(const char *who, special_is_ok = 0; - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); CHECK_PORT_CLOSED(who, "input", port, ip->closed); @@ -2554,7 +2563,7 @@ int scheme_peekc_is_ungetc(Scheme_Object *port) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); return !ip->peek_string_fun; } @@ -2589,8 +2598,13 @@ static int rw_evt_ready(Scheme_Object *_rww, Scheme_Schedule_Info *sinfo) } if (rww->v) { - Scheme_Write_Special_Fun ws = ((Scheme_Output_Port *)rww->port)->write_special_fun; - v = ws((Scheme_Output_Port *)rww->port, rww->v, 1); + Scheme_Output_Port *op; + Scheme_Write_Special_Fun ws; + + op = scheme_output_port_record(rww->port); + ws = op->write_special_fun; + + v = ws(op, rww->v, 1); if (v) { scheme_set_sync_target(sinfo, scheme_true, NULL, NULL, 0, 0); return 1; @@ -2640,7 +2654,9 @@ Scheme_Object *scheme_write_special_evt_via_write_special(Scheme_Output_Port *po Scheme_Object *scheme_make_write_evt(const char *who, Scheme_Object *port, Scheme_Object *special, char *str, long start, long size) { - Scheme_Output_Port *op = (Scheme_Output_Port *)port; + Scheme_Output_Port *op; + + op = scheme_output_port_record(port); if (!special) { if (op->write_string_evt_fun) { @@ -2666,7 +2682,7 @@ scheme_ungetc (int ch, Scheme_Object *port) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); CHECK_PORT_CLOSED("#", "input", port, ip->closed); @@ -2716,7 +2732,7 @@ scheme_byte_ready (Scheme_Object *port) Scheme_Input_Port *ip; int retval; - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); CHECK_PORT_CLOSED("char-ready?", "input", port, ip->closed); @@ -2756,7 +2772,7 @@ Scheme_Object *scheme_get_special(Scheme_Object *port, SCHEME_USE_FUEL(1); - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); /* Only `read' and similar internals should call this function. A caller must should ensure that there are no ungotten @@ -2815,7 +2831,9 @@ static Scheme_Object *do_get_ready_special(Scheme_Object *port, long line, col, pos; if (!stxsrc) { - stxsrc = ((Scheme_Input_Port *)port)->name; + Scheme_Input_Port *ip; + ip = scheme_input_port_record(port); + stxsrc = ip->name; } /* Don't use scheme_tell_all(), because we always want the @@ -2880,7 +2898,7 @@ Scheme_Object *scheme_get_special_proc(Scheme_Object *inport) Scheme_Object *special, **sbox; Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)inport; + ip = scheme_input_port_record(inport); special = ip->special; ip->special = NULL; @@ -2896,7 +2914,7 @@ scheme_need_wakeup (Scheme_Object *port, void *fds) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); if (ip->need_wakeup_fun) { Scheme_Need_Wakeup_Input_Fun f = ip->need_wakeup_fun; @@ -2905,7 +2923,7 @@ scheme_need_wakeup (Scheme_Object *port, void *fds) } #define CHECK_IOPORT_CLOSED(who, port) \ - if (SCHEME_INPORTP(port)) { \ + if (SCHEME_INPORTP((Scheme_Object *)port)) { \ CHECK_PORT_CLOSED(who, "input", port, ((Scheme_Input_Port *)port)->closed); \ } else { \ CHECK_PORT_CLOSED(who, "output", port, ((Scheme_Output_Port *)port)->closed); \ @@ -2917,9 +2935,9 @@ scheme_tell (Scheme_Object *port) Scheme_Port *ip; long pos; - ip = (Scheme_Port *)port; + ip = scheme_port_record(port); - CHECK_IOPORT_CLOSED("get-file-position", port); + CHECK_IOPORT_CLOSED("get-file-position", ip); if (!ip->count_lines || (ip->position < 0)) pos = ip->position; @@ -2935,12 +2953,12 @@ scheme_tell_line (Scheme_Object *port) Scheme_Port *ip; long line; - ip = (Scheme_Port *)port; + ip = scheme_port_record(port); if (!ip->count_lines || (ip->position < 0)) return -1; - CHECK_IOPORT_CLOSED("get-file-line", port); + CHECK_IOPORT_CLOSED("get-file-line", ip); line = ip->lineNumber; @@ -2953,12 +2971,12 @@ scheme_tell_column (Scheme_Object *port) Scheme_Port *ip; long col; - ip = (Scheme_Port *)port; + ip = scheme_port_record(port); if (!ip->count_lines || (ip->position < 0)) return -1; - CHECK_IOPORT_CLOSED("get-file-column", port); + CHECK_IOPORT_CLOSED("get-file-column", ip); col = ip->column; @@ -2968,9 +2986,11 @@ scheme_tell_column (Scheme_Object *port) void scheme_tell_all (Scheme_Object *port, long *_line, long *_col, long *_pos) { - Scheme_Port *ip = (Scheme_Port *)port; + Scheme_Port *ip; long line = -1, col = -1, pos = -1; + ip = scheme_port_record(port); + if (ip->count_lines && ip->location_fun) { Scheme_Location_Fun location_fun; Scheme_Object *r, *a[3]; @@ -3039,7 +3059,9 @@ scheme_tell_all (Scheme_Object *port, long *_line, long *_col, long *_pos) void scheme_count_lines (Scheme_Object *port) { - Scheme_Port *ip = (Scheme_Port *)port; + Scheme_Port *ip; + + ip = scheme_port_record(port); if (!ip->count_lines) { ip->count_lines = 1; @@ -3055,7 +3077,7 @@ scheme_close_input_port (Scheme_Object *port) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)port; + ip = scheme_input_port_record(port); if (!ip->closed) { if (ip->close_fun) { @@ -3103,11 +3125,13 @@ scheme_put_byte_string(const char *who, Scheme_Object *port, have to deal with peeks and specials, so it's a thin wrapper on the port's function. */ - Scheme_Output_Port *op = (Scheme_Output_Port *)port; + Scheme_Output_Port *op; Scheme_Write_String_Fun ws; long out, llen, oout; int enable_break; + op = scheme_output_port_record(port); + CHECK_PORT_CLOSED(who, "output", port, op->closed); ws = op->write_string_fun; @@ -3203,7 +3227,7 @@ scheme_close_output_port(Scheme_Object *port) { Scheme_Output_Port *op; - op = (Scheme_Output_Port *)port; + op = scheme_output_port_record(port); if (!op->closed) { /* call close function first; it might raise an exception */ @@ -3255,8 +3279,10 @@ scheme_file_stream_port_p (int argc, Scheme_Object *argv[]) { Scheme_Object *p = argv[0]; - if (SCHEME_INPORTP(p)) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + if (SCHEME_INPUT_PORTP(p)) { + Scheme_Input_Port *ip; + + ip = scheme_input_port_record(p); if (SAME_OBJ(ip->sub_type, file_input_port_type)) return scheme_true; @@ -3264,8 +3290,10 @@ scheme_file_stream_port_p (int argc, Scheme_Object *argv[]) else if (SAME_OBJ(ip->sub_type, fd_input_port_type)) return scheme_true; #endif - } else if (SCHEME_OUTPORTP(p)) { - Scheme_Output_Port *op = (Scheme_Output_Port *)p; + } else if (SCHEME_OUTPUT_PORTP(p)) { + Scheme_Output_Port *op; + + op = scheme_output_port_record(p); if (SAME_OBJ(op->sub_type, file_output_port_type)) return scheme_true; @@ -3285,8 +3313,10 @@ int scheme_get_port_file_descriptor(Scheme_Object *p, long *_fd) long fd = 0; int fd_ok = 0; - if (SCHEME_INPORTP(p)) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + if (SCHEME_INPUT_PORTP(p)) { + Scheme_Input_Port *ip; + + ip = scheme_input_port_record(p); if (!ip->closed) { if (SAME_OBJ(ip->sub_type, file_input_port_type)) { @@ -3300,8 +3330,10 @@ int scheme_get_port_file_descriptor(Scheme_Object *p, long *_fd) } #endif } - } else if (SCHEME_OUTPORTP(p)) { - Scheme_Output_Port *op = (Scheme_Output_Port *)p; + } else if (SCHEME_OUTPUT_PORTP(p)) { + Scheme_Output_Port *op; + + op = scheme_output_port_record(p); if (!op->closed) { if (SAME_OBJ(op->sub_type, file_output_port_type)) { @@ -3336,12 +3368,16 @@ Scheme_Object *scheme_file_identity(int argc, Scheme_Object *argv[]) if (!fd_ok) { /* Maybe failed because it was closed... */ - if (SCHEME_INPORTP(p)) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + if (SCHEME_INPUT_PORTP(p)) { + Scheme_Input_Port *ip; + + ip = scheme_input_port_record(p); CHECK_PORT_CLOSED("port-file-identity", "input", p, ip->closed); - } else if (SCHEME_OUTPORTP(p)) { - Scheme_Output_Port *op = (Scheme_Output_Port *)p; + } else if (SCHEME_OUTPUT_PORTP(p)) { + Scheme_Output_Port *op; + + op = scheme_output_port_record(p); CHECK_PORT_CLOSED("port-file-identity", "output", p, op->closed); } @@ -3374,8 +3410,10 @@ Scheme_Object *scheme_terminal_port_p(int argc, Scheme_Object *argv[]) p = argv[0]; - if (SCHEME_INPORTP(p)) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + if (SCHEME_INPUT_PORTP(p)) { + Scheme_Input_Port *ip; + + ip = scheme_input_port_record(p); if (ip->closed) return scheme_false; @@ -3390,8 +3428,10 @@ Scheme_Object *scheme_terminal_port_p(int argc, Scheme_Object *argv[]) fd_ok = 1; } #endif - } else if (SCHEME_OUTPORTP(p)) { - Scheme_Output_Port *op = (Scheme_Output_Port *)p; + } else if (SCHEME_OUTPUT_PORTP(p)) { + Scheme_Output_Port *op; + + op = scheme_output_port_record(p); if (op->closed) return scheme_false; @@ -3999,7 +4039,7 @@ scheme_file_position(int argc, Scheme_Object *argv[]) #endif int wis; - if (!SCHEME_OUTPORTP(argv[0]) && !SCHEME_INPORTP(argv[0])) + if (!SCHEME_OUTPUT_PORTP(argv[0]) && !SCHEME_INPUT_PORTP(argv[0])) scheme_wrong_type("file-position", "port", 0, argc, argv); if (argc == 2) { if (!SCHEME_EOFP(argv[1])) { @@ -4026,10 +4066,11 @@ scheme_file_position(int argc, Scheme_Object *argv[]) had_fd = 0; #endif - if (SCHEME_OUTPORTP(argv[0])) { + if (!SCHEME_INPUT_PORTP(argv[0])) { Scheme_Output_Port *op; - op = (Scheme_Output_Port *)argv[0]; + op = scheme_output_port_record(argv[0]); + if (SAME_OBJ(op->sub_type, file_output_port_type)) { f = ((Scheme_Output_File *)op->port_data)->f; #ifdef MZ_FDS @@ -4042,10 +4083,11 @@ scheme_file_position(int argc, Scheme_Object *argv[]) wis = 1; } else if (argc < 2) return scheme_make_integer(scheme_output_tell(argv[0])); - } else if (SCHEME_INPORTP(argv[0])) { + } else { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)argv[0]; + ip = scheme_input_port_record(argv[0]); + if (SAME_OBJ(ip->sub_type, file_input_port_type)) { f = ((Scheme_Input_File *)ip->port_data)->f; #ifdef MZ_FDS @@ -4057,7 +4099,7 @@ scheme_file_position(int argc, Scheme_Object *argv[]) is = (Scheme_Indexed_String *)ip->port_data; else if (argc < 2) { long pos; - pos = ((Scheme_Input_Port *)argv[0])->p.position; + pos = ip->p.position; if (pos < 0) { scheme_raise_exn(MZEXN_FAIL, "the port's current position is not known: %v", @@ -4106,8 +4148,8 @@ scheme_file_position(int argc, Scheme_Object *argv[]) } else if (had_fd) { long lv; - if (SCHEME_OUTPORTP(argv[0])) { - flush_fd((Scheme_Output_Port *)argv[0], NULL, 0, 0, 0, 0); + if (!SCHEME_INPUT_PORTP(argv[0])) { + flush_fd(scheme_output_port_record(argv[0]), NULL, 0, 0, 0, 0); } # ifdef WINDOWS_FILE_HANDLES @@ -4138,14 +4180,16 @@ scheme_file_position(int argc, Scheme_Object *argv[]) errno); } - if (SCHEME_INPORTP(argv[0])) { + if (SCHEME_INPUT_PORTP(argv[0])) { /* Get rid of buffered data: */ Scheme_FD *sfd; - sfd = (Scheme_FD *)((Scheme_Input_Port *)argv[0])->port_data; + Scheme_Input_Port *ip; + ip = scheme_input_port_record(argv[0]); + sfd = (Scheme_FD *)ip->port_data; sfd->bufcount = 0; sfd->buffpos = 0; /* 1 means no pending eof, but can set: */ - ((Scheme_Input_Port *)argv[0])->pending_eof = 1; + ip->pending_eof = 1; } #endif } else { @@ -4182,9 +4226,9 @@ scheme_file_position(int argc, Scheme_Object *argv[]) } /* Remove any chars saved from peeks: */ - if (SCHEME_INPORTP(argv[0])) { + if (SCHEME_INPUT_PORTP(argv[0])) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)argv[0]; + ip = scheme_input_port_record(argv[0]); ip->ungotten_count = 0; if (pipe_char_count(ip->peeked_read)) { ip->peeked_read = NULL; @@ -4216,16 +4260,20 @@ scheme_file_position(int argc, Scheme_Object *argv[]) # endif # endif if (p < 0) { - if (SCHEME_INPORTP(argv[0])) { + if (SCHEME_INPUT_PORTP(argv[0])) { p = scheme_tell(argv[0]); } else { p = scheme_output_tell(argv[0]); } } else { - if (SCHEME_OUTPORTP(argv[0])) { - p += ((Scheme_FD *)((Scheme_Output_Port *)argv[0])->port_data)->bufcount; + if (SCHEME_INPUT_PORTP(argv[0])) { + Scheme_Input_Port *ip; + ip = scheme_input_port_record(argv[0]); + p -= ((Scheme_FD *)ip->port_data)->bufcount; } else { - p -= ((Scheme_FD *)((Scheme_Input_Port *)argv[0])->port_data)->bufcount; + Scheme_Output_Port *op; + op = scheme_output_port_record(argv[0]); + p += ((Scheme_FD *)op->port_data)->bufcount; } } #endif @@ -4240,9 +4288,9 @@ scheme_file_position(int argc, Scheme_Object *argv[]) } /* Back up for un-gotten & peeked chars: */ - if (SCHEME_INPORTP(argv[0])) { + if (SCHEME_INPUT_PORTP(argv[0])) { Scheme_Input_Port *ip; - ip = (Scheme_Input_Port *)argv[0]; + ip = scheme_input_port_record(argv[0]); p -= ip->ungotten_count; p -= pipe_char_count(ip->peeked_read); } @@ -4272,10 +4320,10 @@ scheme_file_buffer(int argc, Scheme_Object *argv[]) { Scheme_Port *p = NULL; - if (!SCHEME_OUTPORTP(argv[0]) && !SCHEME_INPORTP(argv[0])) + if (!SCHEME_OUTPUT_PORTP(argv[0]) && !SCHEME_INPUT_PORTP(argv[0])) scheme_wrong_type("file-stream-buffer-mode", "port", 0, argc, argv); - p = (Scheme_Port *)argv[0]; + p = scheme_port_record(argv[0]); if (argc == 1) { Scheme_Buffer_Mode_Fun bm; @@ -4302,7 +4350,7 @@ scheme_file_buffer(int argc, Scheme_Object *argv[]) && !SAME_OBJ(s, scheme_none_symbol)) scheme_wrong_type("file-stream-buffer-mode", "'none, 'line, or 'block", 1, argc, argv); - if (SCHEME_INPORTP(argv[0]) && SAME_OBJ(s, scheme_line_symbol)) + if (SCHEME_INPUT_PORTP(argv[0]) && SAME_OBJ(s, scheme_line_symbol)) scheme_arg_mismatch("file-stream-buffer-mode", "'line buffering not supported for an input port: ", argv[0]); @@ -4393,10 +4441,13 @@ file_buffer_mode(Scheme_Port *p, int mode) if (mode < 0) return -1; /* unknown mode */ - if (SCHEME_INPORTP(p)) - f = ((Scheme_Output_File *)((Scheme_Input_Port *)p)->port_data)->f; - else - f = ((Scheme_Output_File *)((Scheme_Output_Port *)p)->port_data)->f; + if (SCHEME_INPORTP((Scheme_Object *)p)) { + Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + f = ((Scheme_Output_File *)ip->port_data)->f; + } else { + Scheme_Output_Port *op = (Scheme_Output_Port *)p; + f = ((Scheme_Output_File *)op->port_data)->f; + } if (mode == MZ_FLUSH_NEVER) bad = setvbuf(f, NULL, _IOFBF, 0); @@ -4945,8 +4996,9 @@ fd_need_wakeup(Scheme_Input_Port *port, void *fds) static int fd_input_buffer_mode(Scheme_Port *p, int mode) { Scheme_FD *fd; + Scheme_Input_Port *ip = (Scheme_Input_Port *)p; - fd = (Scheme_FD *)((Scheme_Input_Port *)p)->port_data; + fd = (Scheme_FD *)ip->port_data; if (mode < 0) { return fd->flush; @@ -5447,8 +5499,11 @@ static int fd_flush_done(Scheme_Object *port) { Scheme_FD *fop; + Scheme_Output_Port *op; - fop = (Scheme_FD *)((Scheme_Output_Port *)port)->port_data; + op = scheme_output_port_record(port); + + fop = (Scheme_FD *)op->port_data; return !fop->flushing; } @@ -5506,10 +5561,12 @@ fd_write_ready (Scheme_Object *port) the port has been flushed. */ Scheme_FD *fop; + Scheme_Output_Port *op; - fop = (Scheme_FD *)((Scheme_Output_Port *)port)->port_data; + op = scheme_output_port_record(port); + fop = (Scheme_FD *)op->port_data; - if (fop->regfile || ((Scheme_Output_Port *)port)->closed) + if (fop->regfile || op->closed) return 1; #ifdef WINDOWS_FILE_HANDLES @@ -5568,6 +5625,7 @@ fd_write_ready (Scheme_Object *port) static void fd_write_need_wakeup(Scheme_Object *port, void *fds) { + Scheme_Output_Port *op; Scheme_FD *fop; #ifdef WINDOWS_FILE_HANDLES @@ -5579,7 +5637,8 @@ fd_write_need_wakeup(Scheme_Object *port, void *fds) # endif #endif - fop = (Scheme_FD *)((Scheme_Output_Port *)port)->port_data; + op = scheme_output_port_record(port); + fop = (Scheme_FD *)op->port_data; #ifdef WINDOWS_FILE_HANDLES if (fop->oth && !fd_write_ready(port)) @@ -6150,8 +6209,9 @@ fd_close_output(Scheme_Output_Port *port) static int fd_output_buffer_mode(Scheme_Port *p, int mode) { Scheme_FD *fd; - - fd = (Scheme_FD *)((Scheme_Output_Port *)p)->port_data; + Scheme_Output_Port *op = (Scheme_Output_Port *)p; + + fd = (Scheme_FD *)op->port_data; if (mode < 0) { return fd->flush; @@ -6160,7 +6220,7 @@ static int fd_output_buffer_mode(Scheme_Port *p, int mode) go = (mode > fd->flush); fd->flush = mode; if (go) - flush_fd((Scheme_Output_Port *)p, NULL, 0, 0, 0, 0); + flush_fd(op, NULL, 0, 0, 0, 0); return mode; } } @@ -6232,8 +6292,9 @@ make_fd_output_port(int fd, Scheme_Object *name, int regfile, int win_textmode, static void flush_if_output_fds(Scheme_Object *o, Scheme_Close_Custodian_Client *f, void *data) { - if (SCHEME_OUTPORTP(o)) { - Scheme_Output_Port *op = (Scheme_Output_Port *)o; + if (SCHEME_OUTPUT_PORTP(o)) { + Scheme_Output_Port *op; + op = scheme_output_port_record(o); if (SAME_OBJ(op->sub_type, fd_output_port_type)) { scheme_flush_output(o); } @@ -6606,7 +6667,8 @@ scheme_make_redirect_output_port(Scheme_Object *port) Scheme_Output_Port *op; int can_write_special; - can_write_special = !!((Scheme_Output_Port *)port)->write_special_fun; + op = scheme_output_port_record(port); + can_write_special = !!op->write_special_fun; op = scheme_make_output_port(scheme_redirect_output_port_type, port, @@ -6959,9 +7021,11 @@ static Scheme_Object *subprocess(int c, Scheme_Object *args[]) if (SCHEME_TRUEP(args[0])) { outport = args[0]; - if (SCHEME_OUTPORTP(outport) && SCHEME_TRUEP(scheme_file_stream_port_p(1, &outport))) { + if (SCHEME_OUTPUT_PORTP(outport) && SCHEME_TRUEP(scheme_file_stream_port_p(1, &outport))) { #ifdef PROCESS_FUNCTION - Scheme_Output_Port *op = (Scheme_Output_Port *)outport; + Scheme_Output_Port *op; + + op = scheme_output_port_record(outport); if (SAME_OBJ(op->sub_type, file_output_port_type)) { int tmp; @@ -6980,9 +7044,11 @@ static Scheme_Object *subprocess(int c, Scheme_Object *args[]) if (SCHEME_TRUEP(args[1])) { inport = args[1]; - if (SCHEME_INPORTP(inport) && SCHEME_TRUEP(scheme_file_stream_port_p(1, &inport))) { + if (SCHEME_INPUT_PORTP(inport) && SCHEME_TRUEP(scheme_file_stream_port_p(1, &inport))) { #ifdef PROCESS_FUNCTION - Scheme_Input_Port *ip = (Scheme_Input_Port *)inport; + Scheme_Input_Port *ip; + + ip = scheme_input_port_record(inport); if (SAME_OBJ(ip->sub_type, file_input_port_type)) { int tmp; @@ -7001,9 +7067,11 @@ static Scheme_Object *subprocess(int c, Scheme_Object *args[]) if (SCHEME_TRUEP(args[2])) { errport = args[2]; - if (SCHEME_OUTPORTP(errport) && SCHEME_TRUEP(scheme_file_stream_port_p(1, &errport))) { + if (SCHEME_OUTPUT_PORTP(errport) && SCHEME_TRUEP(scheme_file_stream_port_p(1, &errport))) { #ifdef PROCESS_FUNCTION - Scheme_Output_Port *op = (Scheme_Output_Port *)errport; + Scheme_Output_Port *op; + + op = scheme_output_port_record(errport); if (SAME_OBJ(op->sub_type, file_output_port_type)) { int tmp; @@ -8016,7 +8084,9 @@ void scheme_start_itimer_thread(long usec) void scheme_count_input_port(Scheme_Object *port, long *s, long *e, Scheme_Hash_Table *ht) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)port; + Scheme_Input_Port *ip; + + ip = scheme_input_port_record(port); *e = (ht ? scheme_count_memory(ip->read_handler, ht) : 0); *s = sizeof(Scheme_Input_Port); @@ -8053,7 +8123,9 @@ void scheme_count_input_port(Scheme_Object *port, long *s, long *e, void scheme_count_output_port(Scheme_Object *port, long *s, long *e, Scheme_Hash_Table *ht) { - Scheme_Output_Port *op = (Scheme_Output_Port *)port; + Scheme_Output_Port *op; + + op = scheme_output_port_record(port); *e = 0; *s = sizeof(Scheme_Output_Port); diff --git a/src/mzscheme/src/portfun.c b/src/mzscheme/src/portfun.c index 7a3ca9caad..10bb15c983 100644 --- a/src/mzscheme/src/portfun.c +++ b/src/mzscheme/src/portfun.c @@ -144,6 +144,8 @@ Scheme_Object *scheme_default_global_print_handler; Scheme_Object *scheme_write_proc, *scheme_display_proc, *scheme_print_proc; +static Scheme_Object *dummy_input_port, *dummy_output_port; + #define fail_err_symbol scheme_false /*========================================================================*/ @@ -753,6 +755,98 @@ void scheme_init_port_fun_config(void) scheme_default_global_print_handler); } +/*========================================================================*/ +/* port records */ +/*========================================================================*/ + +Scheme_Port *scheme_port_record(Scheme_Object *port) +{ + if (scheme_is_input_port(port)) + return (Scheme_Port *)scheme_input_port_record(port); + else + return (Scheme_Port *)scheme_output_port_record(port); +} + +Scheme_Input_Port *scheme_input_port_record(Scheme_Object *port) +{ + Scheme_Object *v; + + while (1) { + if (SCHEME_INPORTP(port)) + return (Scheme_Input_Port *)port; + + if (!SCHEME_STRUCTP(port)) { + /* Use dummy port: */ + if (!dummy_input_port) { + REGISTER_SO(dummy_input_port); + dummy_input_port = scheme_make_byte_string_input_port(""); + } + return (Scheme_Input_Port *)dummy_input_port; + } + + v = scheme_struct_type_property_ref(scheme_input_port_property, port); + if (!v) + v = scheme_false; + else if (SCHEME_INTP(v)) + v = ((Scheme_Structure *)port)->slots[SCHEME_INT_VAL(v)]; + port = v; + + SCHEME_USE_FUEL(1); + } +} + +Scheme_Output_Port *scheme_output_port_record(Scheme_Object *port) +{ + Scheme_Object *v; + + while (1) { + if (SCHEME_OUTPORTP(port)) + return (Scheme_Output_Port *)port; + + if (!SCHEME_STRUCTP(port)) { + /* Use dummy port: */ + if (!dummy_output_port) { + REGISTER_SO(dummy_output_port); + dummy_output_port = scheme_make_null_output_port(1); + } + return (Scheme_Output_Port *)dummy_output_port; + } + + v = scheme_struct_type_property_ref(scheme_output_port_property, port); + if (!v) + v = scheme_false; + else if (SCHEME_INTP(v)) + v = ((Scheme_Structure *)port)->slots[SCHEME_INT_VAL(v)]; + port = v; + + SCHEME_USE_FUEL(1); + } +} + +int scheme_is_input_port(Scheme_Object *port) +{ + if (SCHEME_INPORTP(port)) + return 1; + + if (SCHEME_STRUCTP(port)) + if (scheme_struct_type_property_ref(scheme_input_port_property, port)) + return 1; + + return 0; +} + +int scheme_is_output_port(Scheme_Object *port) +{ + if (SCHEME_OUTPORTP(port)) + return 1; + + if (SCHEME_STRUCTP(port)) + if (scheme_struct_type_property_ref(scheme_output_port_property, port)) + return 1; + + return 0; +} + /*========================================================================*/ /* string input ports */ /*========================================================================*/ @@ -960,10 +1054,10 @@ scheme_get_sized_byte_string_output(Scheme_Object *port, long *size) char *v; long len; - if (!SCHEME_OUTPORTP(port)) + if (!SCHEME_OUTPUT_PORTP(port)) return NULL; - op = (Scheme_Output_Port *)port; + op = scheme_output_port_record(port); if (op->sub_type != scheme_string_output_port_type) return NULL; @@ -1379,8 +1473,8 @@ user_close_input(Scheme_Input_Port *port) static Scheme_Object * user_input_location(Scheme_Port *p) { - Scheme_Input_Port *port = (Scheme_Input_Port *)p; - User_Input_Port *uip = (User_Input_Port *)port->port_data; + Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + User_Input_Port *uip = (User_Input_Port *)ip->port_data; return scheme_apply_multi(uip->location_proc, 0, NULL); } @@ -1388,8 +1482,8 @@ user_input_location(Scheme_Port *p) static void user_input_count_lines(Scheme_Port *p) { - Scheme_Input_Port *port = (Scheme_Input_Port *)p; - User_Input_Port *uip = (User_Input_Port *)port->port_data; + Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + User_Input_Port *uip = (User_Input_Port *)ip->port_data; scheme_apply_multi(uip->count_lines_proc, 0, NULL); } @@ -1438,9 +1532,9 @@ user_buffer_mode(Scheme_Object *buffer_mode_proc, int mode, int line_ok) static int user_input_buffer_mode(Scheme_Port *p, int mode) { - Scheme_Input_Port *port = (Scheme_Input_Port *)p; - User_Input_Port *uip = (User_Input_Port *)port->port_data; - + Scheme_Input_Port *ip = (Scheme_Input_Port *)p; + User_Input_Port *uip = (User_Input_Port *)ip->port_data; + return user_buffer_mode(uip->buffer_mode_proc, mode, 0); } @@ -1736,8 +1830,8 @@ user_write_special_evt (Scheme_Output_Port *port, Scheme_Object *v) static Scheme_Object * user_output_location(Scheme_Port *p) { - Scheme_Output_Port *port = (Scheme_Output_Port *)p; - User_Output_Port *uop = (User_Output_Port *)port->port_data; + Scheme_Output_Port *op = (Scheme_Output_Port *)p; + User_Output_Port *uop = (User_Output_Port *)op->port_data; return scheme_apply_multi(uop->location_proc, 0, NULL); } @@ -1745,8 +1839,8 @@ user_output_location(Scheme_Port *p) static void user_output_count_lines(Scheme_Port *p) { - Scheme_Output_Port *port = (Scheme_Output_Port *)p; - User_Output_Port *uop = (User_Output_Port *)port->port_data; + Scheme_Output_Port *op = (Scheme_Output_Port *)p; + User_Output_Port *uop = (User_Output_Port *)op->port_data; scheme_apply_multi(uop->count_lines_proc, 0, NULL); } @@ -1754,20 +1848,22 @@ user_output_count_lines(Scheme_Port *p) static int user_output_buffer_mode(Scheme_Port *p, int mode) { - Scheme_Output_Port *port = (Scheme_Output_Port *)p; - User_Output_Port *uop = (User_Output_Port *)port->port_data; + Scheme_Output_Port *op = (Scheme_Output_Port *)p; + User_Output_Port *uop = (User_Output_Port *)op->port_data; return user_buffer_mode(uop->buffer_mode_proc, mode, 1); } int scheme_is_user_port(Scheme_Object *port) { - if (SCHEME_INPORTP(port)) { - return SAME_OBJ(scheme_user_input_port_type, - ((Scheme_Input_Port *)port)->sub_type); + if (SCHEME_INPUT_PORTP(port)) { + Scheme_Input_Port *ip; + ip = scheme_input_port_record(port); + return SAME_OBJ(scheme_user_input_port_type, ip->sub_type); } else { - return SAME_OBJ(scheme_user_output_port_type, - ((Scheme_Output_Port *)port)->sub_type); + Scheme_Output_Port *op; + op = scheme_output_port_record(port); + return SAME_OBJ(scheme_user_output_port_type, op->sub_type); } } @@ -2267,13 +2363,15 @@ static Scheme_Object *pipe_length(int argc, Scheme_Object **argv) int avail; o = argv[0]; - if (SCHEME_OUTPORTP(o)) { - Scheme_Output_Port *op = (Scheme_Output_Port *)o; + if (SCHEME_OUTPUT_PORTP(o)) { + Scheme_Output_Port *op; + op = scheme_output_port_record(o); if (op->sub_type == scheme_pipe_write_port_type) { pipe = (Scheme_Pipe *)op->port_data; } - } else if (SCHEME_INPORTP(o)) { - Scheme_Input_Port *ip = (Scheme_Input_Port *)o; + } else if (SCHEME_INPUT_PORTP(o)) { + Scheme_Input_Port *ip; + ip = scheme_input_port_record(o); if (ip->sub_type == scheme_pipe_read_port_type) { pipe = (Scheme_Pipe *)ip->port_data; } @@ -2302,34 +2400,34 @@ static Scheme_Object *pipe_length(int argc, Scheme_Object **argv) static Scheme_Object * input_port_p (int argc, Scheme_Object *argv[]) { - return (SCHEME_INPORTP(argv[0]) ? scheme_true : scheme_false); + return (SCHEME_INPUT_PORTP(argv[0]) ? scheme_true : scheme_false); } static Scheme_Object * output_port_p (int argc, Scheme_Object *argv[]) { - return (SCHEME_OUTPORTP(argv[0]) ? scheme_true : scheme_false); + return (SCHEME_OUTPUT_PORTP(argv[0]) ? scheme_true : scheme_false); } static Scheme_Object *current_input_port(int argc, Scheme_Object *argv[]) { return scheme_param_config("current-input-port", scheme_make_integer(MZCONFIG_INPUT_PORT), argc, argv, - -1, input_port_p, "input port", 0); + -1, input_port_p, "input-port", 0); } static Scheme_Object *current_output_port(int argc, Scheme_Object *argv[]) { return scheme_param_config("current-output-port", scheme_make_integer(MZCONFIG_OUTPUT_PORT), argc, argv, - -1, output_port_p, "output port", 0); + -1, output_port_p, "output-port", 0); } static Scheme_Object *current_error_port(int argc, Scheme_Object *argv[]) { return scheme_param_config("current-error-port", scheme_make_integer(MZCONFIG_ERROR_PORT), argc, argv, - -1, output_port_p, "output port", 0); + -1, output_port_p, "output-port", 0); } static Scheme_Object * @@ -2630,8 +2728,8 @@ Scheme_Object *do_get_output_string(const char *who, int is_byte, char *s; long size; - op = (Scheme_Output_Port *)argv[0]; - if (!SCHEME_OUTPORTP(argv[0]) + op = scheme_output_port_record(argv[0]); + if (!SCHEME_OUTPUT_PORTP(argv[0]) || (op->sub_type != scheme_string_output_port_type)) scheme_wrong_type(who, "string output port", 0, argc, argv); @@ -2658,20 +2756,20 @@ get_output_char_string (int argc, Scheme_Object *argv[]) static Scheme_Object * close_input_port (int argc, Scheme_Object *argv[]) { - if (!SCHEME_INPORTP(argv[0])) + if (!SCHEME_INPUT_PORTP(argv[0])) scheme_wrong_type("close-input-port", "input-port", 0, argc, argv); - scheme_close_input_port (argv[0]); + scheme_close_input_port(argv[0]); return (scheme_void); } static Scheme_Object * close_output_port (int argc, Scheme_Object *argv[]) { - if (!SCHEME_OUTPORTP(argv[0])) + if (!SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("close-output-port", "output-port", 0, argc, argv); - scheme_close_output_port (argv[0]); + scheme_close_output_port(argv[0]); return (scheme_void); } @@ -2803,7 +2901,7 @@ static Scheme_Object *sch_default_read_handler(void *ignore, int argc, Scheme_Ob { Scheme_Object *src; - if (!SCHEME_INPORTP(argv[0])) + if (!SCHEME_INPUT_PORTP(argv[0])) scheme_wrong_type("default-port-read-handler", "input-port", 0, argc, argv); if ((Scheme_Object *)argv[0] == scheme_orig_stdin_port) @@ -2844,8 +2942,9 @@ static Scheme_Object *do_read_f(const char *who, int argc, Scheme_Object *argv[] { Scheme_Object *port, *readtable = NULL; int pre_char = -1; + Scheme_Input_Port *ip; - if (argc && !SCHEME_INPORTP(argv[0])) + if (argc && !SCHEME_INPUT_PORTP(argv[0])) scheme_wrong_type(who, "input-port", 0, argc, argv); if (argc) @@ -2857,10 +2956,12 @@ static Scheme_Object *do_read_f(const char *who, int argc, Scheme_Object *argv[] pre_char = extract_recur_args(who, argc, argv, 0, &readtable); } - if (((Scheme_Input_Port *)port)->read_handler && !honu_mode && !recur) { + ip = scheme_input_port_record(port); + + if (ip->read_handler && !honu_mode && !recur) { Scheme_Object *o[1]; o[0] = port; - return _scheme_apply(((Scheme_Input_Port *)port)->read_handler, 1, o); + return _scheme_apply(ip->read_handler, 1, o); } else { if (port == scheme_orig_stdin_port) scheme_flush_orig_outputs(); @@ -2893,8 +2994,9 @@ static Scheme_Object *do_read_syntax_f(const char *who, int argc, Scheme_Object { Scheme_Object *port, *readtable = NULL; int pre_char = -1; + Scheme_Input_Port *ip; - if ((argc > 1) && !SCHEME_INPORTP(argv[1])) + if ((argc > 1) && !SCHEME_INPUT_PORTP(argv[1])) scheme_wrong_type(who, "input-port", 1, argc, argv); if (argc > 1) @@ -2906,12 +3008,14 @@ static Scheme_Object *do_read_syntax_f(const char *who, int argc, Scheme_Object pre_char = extract_recur_args(who, argc, argv, 1, &readtable); } - if (((Scheme_Input_Port *)port)->read_handler && !honu_mode && !recur) { + ip = scheme_input_port_record(port); + + if (ip->read_handler && !honu_mode && !recur) { Scheme_Object *o[2], *result; o[0] = port; - o[1] = (argc ? argv[0] : ((Scheme_Input_Port *)port)->name); + o[1] = (argc ? argv[0] : ip->name); - result = _scheme_apply(((Scheme_Input_Port *)port)->read_handler, 2, o); + result = _scheme_apply(ip->read_handler, 2, o); if (SCHEME_STXP(result) || SCHEME_EOFP(result)) return result; else { @@ -2923,7 +3027,7 @@ static Scheme_Object *do_read_syntax_f(const char *who, int argc, Scheme_Object } else { Scheme_Object *src; - src = (argc ? argv[0] : ((Scheme_Input_Port *)port)->name); + src = (argc ? argv[0] : ip->name); if (port == scheme_orig_stdin_port) scheme_flush_orig_outputs(); @@ -2958,7 +3062,7 @@ do_read_char(char *name, int argc, Scheme_Object *argv[], int peek, int spec, in Scheme_Object *port; int ch; - if (argc && !SCHEME_INPORTP(argv[0])) + if (argc && !SCHEME_INPUT_PORTP(argv[0])) scheme_wrong_type(name, "input-port", 0, argc, argv); if (argc) @@ -3086,7 +3190,7 @@ do_read_line (int as_bytes, const char *who, int argc, Scheme_Object *argv[]) char *buf, *oldbuf, onstack[32]; long size = 31, oldsize, i = 0; - if (argc && !SCHEME_INPORTP(argv[0])) + if (argc && !SCHEME_INPUT_PORTP(argv[0])) scheme_wrong_type(who, "input-port", 0, argc, argv); if (argc > 1) { @@ -3245,8 +3349,8 @@ do_general_read_bytes(int as_bytes, delta = 0; } - if ((argc > (1+delta)) && !SCHEME_INPORTP(argv[1+delta])) - scheme_wrong_type(who, "input port", 1+delta, argc, argv); + if ((argc > (1+delta)) && !SCHEME_INPUT_PORTP(argv[1+delta])) + scheme_wrong_type(who, "input-port", 1+delta, argc, argv); if (alloc_mode) { start = 0; @@ -3406,8 +3510,8 @@ peeked_read(int argc, Scheme_Object *argv[]) if (argc > 3) { port = argv[3]; - if (!SCHEME_INPORTP(port)) - scheme_wrong_type("port-commit-peeked", "input port", 3, argc, argv); + if (!SCHEME_INPUT_PORTP(port)) + scheme_wrong_type("port-commit-peeked", "input-port", 3, argc, argv); } else port = CURRENT_INPUT_PORT(scheme_current_config()); @@ -3477,8 +3581,8 @@ progress_evt(int argc, Scheme_Object *argv[]) Scheme_Object *port, *v; if (argc) { - if (!SCHEME_INPORTP(argv[0])) { - scheme_wrong_type("port-progress-evt", "input port", 0, argc, argv); + if (!SCHEME_INPUT_PORTP(argv[0])) { + scheme_wrong_type("port-progress-evt", "input-port", 0, argc, argv); return NULL; } port = argv[0]; @@ -3511,7 +3615,7 @@ do_write_bytes_avail(int as_bytes, const char *who, return NULL; } else str = argv[0]; - if ((argc > 1) && !SCHEME_OUTPORTP(argv[1])) + if ((argc > 1) && !SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type(who, "output-port", 1, argc, argv); scheme_get_substring_indices(who, str, @@ -3581,22 +3685,25 @@ write_bytes_avail_evt(int argc, Scheme_Object *argv[]) static Scheme_Object * do_write_special(const char *name, int argc, Scheme_Object *argv[], int nonblock, int get_evt) { + Scheme_Output_Port *op; Scheme_Object *port; int ok; if (argc > 1) { - if (!SCHEME_OUTPORTP(argv[1])) + if (!SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type(name, "output-port", 1, argc, argv); port = argv[1]; } else port = CURRENT_OUTPUT_PORT(scheme_current_config()); - if (((Scheme_Output_Port *)port)->write_special_fun) { + op = scheme_output_port_record(port); + + if (op->write_special_fun) { if (get_evt) { return scheme_make_write_evt(name, port, argv[0], NULL, 0, 0); } else { - Scheme_Write_Special_Fun ws = ((Scheme_Output_Port *)port)->write_special_fun; - ok = ws((Scheme_Output_Port *)port, argv[0], nonblock); + Scheme_Write_Special_Fun ws = op->write_special_fun; + ok = ws(op, argv[0], nonblock); } } else { scheme_arg_mismatch(name, @@ -3606,7 +3713,8 @@ do_write_special(const char *name, int argc, Scheme_Object *argv[], int nonblock } if (ok) { - Scheme_Port *ip = (Scheme_Port *)port; + Scheme_Port *ip; + ip = scheme_port_record(port); if (ip->position >= 0) ip->position += 1; if (ip->count_lines) { @@ -3622,10 +3730,13 @@ do_write_special(const char *name, int argc, Scheme_Object *argv[], int nonblock static Scheme_Object *can_write_atomic(int argc, Scheme_Object *argv[]) { - if (!SCHEME_OUTPORTP(argv[0])) - scheme_wrong_type("port-writes-atomic?", "output port", 0, argc, argv); + Scheme_Output_Port *op; - if (((Scheme_Output_Port *)argv[0])->write_string_evt_fun) + if (!SCHEME_OUTPUT_PORTP(argv[0])) + scheme_wrong_type("port-writes-atomic?", "output-port", 0, argc, argv); + + op = scheme_output_port_record(argv[0]); + if (op->write_string_evt_fun) return scheme_true; else return scheme_false; @@ -3633,10 +3744,14 @@ static Scheme_Object *can_write_atomic(int argc, Scheme_Object *argv[]) static Scheme_Object *can_provide_progress_evt(int argc, Scheme_Object *argv[]) { - if (!SCHEME_INPORTP(argv[0])) - scheme_wrong_type("port-provides-progress-evt?", "input port", 0, argc, argv); + Scheme_Input_Port *ip; - if (((Scheme_Input_Port *)argv[0])->progress_evt_fun) + if (!SCHEME_INPUT_PORTP(argv[0])) + scheme_wrong_type("port-provides-progress-evt?", "input-port", 0, argc, argv); + + ip = scheme_input_port_record(argv[0]); + + if (ip->progress_evt_fun) return scheme_true; else return scheme_false; @@ -3645,10 +3760,14 @@ static Scheme_Object *can_provide_progress_evt(int argc, Scheme_Object *argv[]) static Scheme_Object * can_write_special(int argc, Scheme_Object *argv[]) { - if (!SCHEME_OUTPORTP(argv[0])) - scheme_wrong_type("port-writes-special?", "output port", 0, argc, argv); + Scheme_Output_Port *op; - if (((Scheme_Output_Port *)argv[0])->write_special_fun) + if (!SCHEME_OUTPUT_PORTP(argv[0])) + scheme_wrong_type("port-writes-special?", "output-port", 0, argc, argv); + + op = scheme_output_port_record(argv[0]); + + if (op->write_special_fun) return scheme_true; else return scheme_false; @@ -3699,8 +3818,8 @@ char_ready_p (int argc, Scheme_Object *argv[]) { Scheme_Object *port; - if (argc && !SCHEME_INPORTP(argv[0])) - scheme_wrong_type("char-ready?", "input port", 0, argc, argv); + if (argc && !SCHEME_INPUT_PORTP(argv[0])) + scheme_wrong_type("char-ready?", "input-port", 0, argc, argv); if (argc) port = argv[0]; @@ -3715,8 +3834,8 @@ byte_ready_p (int argc, Scheme_Object *argv[]) { Scheme_Object *port; - if (argc && !SCHEME_INPORTP(argv[0])) - scheme_wrong_type("byte-ready?", "input port", 0, argc, argv); + if (argc && !SCHEME_INPUT_PORTP(argv[0])) + scheme_wrong_type("byte-ready?", "input-port", 0, argc, argv); if (argc) port = argv[0]; @@ -3728,7 +3847,7 @@ byte_ready_p (int argc, Scheme_Object *argv[]) static Scheme_Object *sch_default_display_handler(int argc, Scheme_Object *argv[]) { - if (!SCHEME_OUTPORTP(argv[1])) + if (!SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type("default-port-display-handler", "output-port", 1, argc, argv); scheme_internal_display(argv[0], argv[1]); @@ -3738,7 +3857,7 @@ static Scheme_Object *sch_default_display_handler(int argc, Scheme_Object *argv[ static Scheme_Object *sch_default_write_handler(int argc, Scheme_Object *argv[]) { - if (!SCHEME_OUTPORTP(argv[1])) + if (!SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type("default-port-write-handler", "output-port", 1, argc, argv); scheme_internal_write(argv[0], argv[1]); @@ -3748,7 +3867,7 @@ static Scheme_Object *sch_default_write_handler(int argc, Scheme_Object *argv[]) static Scheme_Object *sch_default_print_handler(int argc, Scheme_Object *argv[]) { - if (!SCHEME_OUTPORTP(argv[1])) + if (!SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type("default-port-print-handler", "output-port", 1, argc, argv); return _scheme_apply(scheme_get_param(scheme_current_config(), @@ -3758,7 +3877,7 @@ static Scheme_Object *sch_default_print_handler(int argc, Scheme_Object *argv[]) static Scheme_Object *sch_default_global_port_print_handler(int argc, Scheme_Object *argv[]) { - if (!SCHEME_OUTPORTP(argv[1])) + if (!SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type("default-global-port-print-handler", "output-port", 1, argc, argv); scheme_internal_print(argv[0], argv[1]); @@ -3771,17 +3890,20 @@ display_write(char *name, int argc, Scheme_Object *argv[], int escape) { Scheme_Object *port; + Scheme_Output_Port *op; if (argc > 1) { - if (!SCHEME_OUTPORTP(argv[1])) + if (!SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type(name, "output-port", 1, argc, argv); port = argv[1]; } else port = CURRENT_OUTPUT_PORT(scheme_current_config()); + op = scheme_output_port_record(port); + if (escape > 0) { /* display */ - if (!((Scheme_Output_Port *)port)->display_handler) { + if (!op->display_handler) { Scheme_Object *v = argv[0]; if (SCHEME_BYTE_STRINGP(v)) { scheme_put_byte_string(name, port, @@ -3801,13 +3923,13 @@ display_write(char *name, Scheme_Object *a[2]; a[0] = argv[0]; a[1] = port; - _scheme_apply_multi(((Scheme_Output_Port *)port)->display_handler, 2, a); + _scheme_apply_multi(op->display_handler, 2, a); } } else if (!escape) { /* write */ Scheme_Object *h; - h = ((Scheme_Output_Port *)port)->write_handler; + h = op->write_handler; if (!h) scheme_internal_write(argv[0], port); @@ -3825,7 +3947,7 @@ display_write(char *name, a[0] = argv[0]; a[1] = port; - h = ((Scheme_Output_Port *)port)->print_handler; + h = op->print_handler; if (!h) sch_default_print_handler(2, a); @@ -3859,7 +3981,7 @@ newline (int argc, Scheme_Object *argv[]) { Scheme_Object *port; - if (argc && !SCHEME_OUTPORTP(argv[0])) + if (argc && !SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("newline", "output-port", 0, argc, argv); if (argc) @@ -3886,7 +4008,7 @@ write_byte (int argc, Scheme_Object *argv[]) scheme_wrong_type("write-byte", "exact integer in [0,255]", 0, argc, argv); if (argc > 1) { - if (!SCHEME_OUTPORTP(argv[1])) + if (!SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type("write-byte", "output-port", 1, argc, argv); port = argv[1]; } else @@ -3912,7 +4034,7 @@ write_char (int argc, Scheme_Object *argv[]) if (argc && !SCHEME_CHARP(argv[0])) scheme_wrong_type("write-char", "character", 0, argc, argv); if (argc > 1) { - if (!SCHEME_OUTPORTP(argv[1])) + if (!SCHEME_OUTPUT_PORTP(argv[1])) scheme_wrong_type("write-char", "output-port", 1, argc, argv); port = argv[1]; } else @@ -3932,10 +4054,10 @@ static Scheme_Object *port_read_handler(int argc, Scheme_Object *argv[]) { Scheme_Input_Port *ip; - if (!SCHEME_INPORTP(argv[0])) - scheme_wrong_type("port-read-handler", "input port", 0, argc, argv); + if (!SCHEME_INPUT_PORTP(argv[0])) + scheme_wrong_type("port-read-handler", "input-port", 0, argc, argv); - ip = (Scheme_Input_Port *)argv[0]; + ip = scheme_input_port_record(argv[0]); if (argc == 1) { if (ip->read_handler) return ip->read_handler; @@ -3962,10 +4084,10 @@ static Scheme_Object *port_display_handler(int argc, Scheme_Object *argv[]) { Scheme_Output_Port *op; - if (!SCHEME_OUTPORTP(argv[0])) + if (!SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("port-display-handler", "output-port", 0, argc, argv); - op = (Scheme_Output_Port *)argv[0]; + op = scheme_output_port_record(argv[0]); if (argc == 1) { if (op->display_handler) return op->display_handler; @@ -3986,10 +4108,10 @@ static Scheme_Object *port_write_handler(int argc, Scheme_Object *argv[]) { Scheme_Output_Port *op; - if (!SCHEME_OUTPORTP(argv[0])) + if (!SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("port-write-handler", "output-port", 0, argc, argv); - op = (Scheme_Output_Port *)argv[0]; + op = scheme_output_port_record(argv[0]); if (argc == 1) { if (op->write_handler) return op->write_handler; @@ -4010,10 +4132,10 @@ static Scheme_Object *port_print_handler(int argc, Scheme_Object *argv[]) { Scheme_Output_Port *op; - if (!SCHEME_OUTPORTP(argv[0])) + if (!SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("port-print-handler", "output-port", 0, argc, argv); - op = (Scheme_Output_Port *)argv[0]; + op = scheme_output_port_record(argv[0]); if (argc == 1) { if (op->print_handler) return op->print_handler; @@ -4040,7 +4162,7 @@ static Scheme_Object *global_port_print_handler(int argc, Scheme_Object *argv[]) static Scheme_Object *port_count_lines(int argc, Scheme_Object *argv[]) { - if (!SCHEME_INPORTP(argv[0]) && !SCHEME_OUTPORTP(argv[0])) + if (!SCHEME_INPUT_PORTP(argv[0]) && !SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("port-count-lines!", "port", 0, argc, argv); scheme_count_lines(argv[0]); @@ -4060,7 +4182,7 @@ static Scheme_Object *port_next_location(int argc, Scheme_Object *argv[]) Scheme_Object *a[3]; long line, col, pos; - if (!SCHEME_INPORTP(argv[0]) && !SCHEME_OUTPORTP(argv[0])) + if (!SCHEME_INPUT_PORTP(argv[0]) && !SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("port-next-location", "port", 0, argc, argv); scheme_tell_all(argv[0], &line, &col, &pos); @@ -4161,11 +4283,15 @@ static Scheme_Object *do_load_handler(void *data) other = scheme_make_sized_byte_string(s, len + slen + 1, 0); } - scheme_raise_exn(MZEXN_FAIL, - "default-load-handler: expected a `module' declaration for `%S', found: %T in: %V", - lhd->expected_module, - other, - ((Scheme_Input_Port *)port)->name); + { + Scheme_Input_Port *ip; + ip = scheme_input_port_record(port); + scheme_raise_exn(MZEXN_FAIL, + "default-load-handler: expected a `module' declaration for `%S', found: %T in: %V", + lhd->expected_module, + other, + ip->name); + } return NULL; } @@ -4173,10 +4299,13 @@ static Scheme_Object *do_load_handler(void *data) /* Check no more expressions: */ d = scheme_internal_read(port, lhd->stxsrc, 1, 0, 0, 0, -1, NULL, NULL, NULL); if (!SCHEME_EOFP(d)) { + Scheme_Input_Port *ip; + ip = scheme_input_port_record(port); scheme_raise_exn(MZEXN_FAIL, - "default-load-handler: expected only a `module' declaration for `%S', but found an extra expression in: %V", + "default-load-handler: expected only a `module' declaration for `%S'," + " but found an extra expression in: %V", lhd->expected_module, - ((Scheme_Input_Port *)port)->name); + ip->name); return NULL; } @@ -4189,6 +4318,11 @@ static Scheme_Object *do_load_handler(void *data) d = scheme_make_immutable_pair(a, d); obj = scheme_datum_to_syntax(d, obj, scheme_false, 0, 1); } + } else { + /* Add #%top-interaction, since we're in non-module mode: */ + Scheme_Object *a; + a = scheme_make_pair(scheme_intern_symbol("#%top-interaction"), obj); + obj = scheme_datum_to_syntax(a, obj, scheme_false, 0, 0); } /* ... end special support for module loading ... */ @@ -4201,8 +4335,8 @@ static Scheme_Object *do_load_handler(void *data) if (genv->template_env && genv->template_env->rename) obj = scheme_add_rename(obj, genv->template_env->rename); - last_val = _scheme_apply_multi(scheme_get_param(config, MZCONFIG_EVAL_HANDLER), - 1, &obj); + last_val = _scheme_apply_multi_with_prompt(scheme_get_param(config, MZCONFIG_EVAL_HANDLER), + 1, &obj); /* If multi, we must save then: */ if (last_val == SCHEME_MULTIPLE_VALUES) { @@ -4218,10 +4352,12 @@ static Scheme_Object *do_load_handler(void *data) } if (SCHEME_SYMBOLP(lhd->expected_module) && !got_one) { + Scheme_Input_Port *ip; + ip = scheme_input_port_record(port); scheme_raise_exn(MZEXN_FAIL, "default-load-handler: expected a `module' declaration for `%S', but found end-of-file in: %V", lhd->expected_module, - ((Scheme_Input_Port *)port)->name); + ip->name); return NULL; } @@ -4313,7 +4449,7 @@ static Scheme_Object *default_load(int argc, Scheme_Object *argv[]) lhd->p = p; lhd->config = config; lhd->port = port; - name = ((Scheme_Input_Port *)port)->name; + name = scheme_input_port_record(port)->name; lhd->stxsrc = name; lhd->expected_module = expected_module; @@ -4457,7 +4593,7 @@ Scheme_Object *scheme_load(const char *file) val = NULL; } else { val = scheme_apply_multi(scheme_make_prim((Scheme_Prim *)load), - 1, p); + 1, p); } scheme_current_thread->error_buf = savebuf; @@ -4490,7 +4626,7 @@ flush_output(int argc, Scheme_Object *argv[]) { Scheme_Object *op; - if (argc && !SCHEME_OUTPORTP(argv[0])) + if (argc && !SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("flush-output", "output-port", 0, argc, argv); if (argc) diff --git a/src/mzscheme/src/print.c b/src/mzscheme/src/print.c index 96f560d6fd..697b3a6172 100644 --- a/src/mzscheme/src/print.c +++ b/src/mzscheme/src/print.c @@ -2765,7 +2765,7 @@ static Scheme_Object *custom_recur(int notdisplay, void *_vec, int argc, Scheme_ if (!SCHEME_OUTPORTP(argv[1])) { scheme_wrong_type(notdisplay ? "write/recusrive" : "display/recursive", - "output port", 1, argc, argv); + "output-port", 1, argc, argv); return NULL; } diff --git a/src/mzscheme/src/regexp.c b/src/mzscheme/src/regexp.c index c1c3345217..78ed18913c 100644 --- a/src/mzscheme/src/regexp.c +++ b/src/mzscheme/src/regexp.c @@ -4845,13 +4845,13 @@ static Scheme_Object *gen_compare(char *name, int pos, && !SCHEME_CHAR_STRINGP(argv[0])) scheme_wrong_type(name, "regexp, byte-regexp, string, or byte string", 0, argc, argv); if ((peek || (!SCHEME_BYTE_STRINGP(argv[1]) && !SCHEME_CHAR_STRINGP(argv[1]))) - && !SCHEME_INPORTP(argv[1])) + && !SCHEME_INPUT_PORTP(argv[1])) scheme_wrong_type(name, peek ? "input-port" : "string, byte string, or input port", 1, argc, argv); if (SCHEME_CHAR_STRINGP(argv[1])) { iport = NULL; endset = SCHEME_CHAR_STRLEN_VAL(argv[1]); - } else if (SCHEME_INPORTP(argv[1])) { + } else if (SCHEME_INPUT_PORTP(argv[1])) { iport = argv[1]; endset = -2; } else { @@ -4917,8 +4917,8 @@ static Scheme_Object *gen_compare(char *name, int pos, } } else { if (SCHEME_TRUEP(argv[4])) { - if (!SCHEME_OUTPORTP(argv[4])) - scheme_wrong_type(name, "output-port or #f", 4, argc, argv); + if (!SCHEME_OUTPUT_PORTP(argv[4])) + scheme_wrong_type(name, "output port or #f", 4, argc, argv); oport = argv[4]; } } diff --git a/src/mzscheme/src/schemef.h b/src/mzscheme/src/schemef.h index 99839e06ad..5d7fa6338f 100644 --- a/src/mzscheme/src/schemef.h +++ b/src/mzscheme/src/schemef.h @@ -240,6 +240,8 @@ MZ_EXTERN unsigned char scheme_uchar_combining_classes[]; MZ_EXTERN Scheme_Object *scheme_eval(Scheme_Object *obj, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_eval_multi(Scheme_Object *obj, Scheme_Env *env); +MZ_EXTERN Scheme_Object *scheme_eval_with_prompt(Scheme_Object *obj, Scheme_Env *env); +MZ_EXTERN Scheme_Object *scheme_eval_multi_with_prompt(Scheme_Object *obj, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_eval_compiled(Scheme_Object *obj, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_eval_compiled_multi(Scheme_Object *obj, Scheme_Env *env); @@ -251,9 +253,16 @@ MZ_EXTERN Scheme_Object *scheme_apply_multi(Scheme_Object *rator, int num_rands, MZ_EXTERN Scheme_Object *scheme_apply_no_eb(Scheme_Object *rator, int num_rands, Scheme_Object **rands); MZ_EXTERN Scheme_Object *scheme_apply_multi_no_eb(Scheme_Object *rator, int num_rands, Scheme_Object **rands); MZ_EXTERN Scheme_Object *scheme_apply_to_list(Scheme_Object *rator, Scheme_Object *argss); +MZ_EXTERN Scheme_Object *scheme_apply_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands); +MZ_EXTERN Scheme_Object *scheme_apply_multi_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands); +MZ_EXTERN Scheme_Object *_scheme_apply_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands); +MZ_EXTERN Scheme_Object *_scheme_apply_multi_with_prompt(Scheme_Object *rator, int num_rands, Scheme_Object **rands); MZ_EXTERN Scheme_Object *scheme_eval_string(const char *str, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_eval_string_multi(const char *str, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_eval_string_all(const char *str, Scheme_Env *env, int all); +MZ_EXTERN Scheme_Object *scheme_eval_string_with_prompt(const char *str, Scheme_Env *env); +MZ_EXTERN Scheme_Object *scheme_eval_string_multi_with_prompt(const char *str, Scheme_Env *env); +MZ_EXTERN Scheme_Object *scheme_eval_string_all_with_prompt(const char *str, Scheme_Env *env, int all); MZ_EXTERN Scheme_Object *_scheme_apply_known_prim_closure(Scheme_Object *rator, int argc, Scheme_Object **argv); @@ -264,6 +273,11 @@ MZ_EXTERN Scheme_Object *_scheme_apply_prim_closure(Scheme_Object *rator, int ar MZ_EXTERN Scheme_Object *_scheme_apply_prim_closure_multi(Scheme_Object *rator, int argc, Scheme_Object **argv); +MZ_EXTERN Scheme_Object *scheme_call_with_prompt(Scheme_Closed_Prim f, void *data); +MZ_EXTERN Scheme_Object *scheme_call_with_prompt_multi(Scheme_Closed_Prim f, void *data); +MZ_EXTERN Scheme_Object *_scheme_call_with_prompt(Scheme_Closed_Prim f, void *data); +MZ_EXTERN Scheme_Object *_scheme_call_with_prompt_multi(Scheme_Closed_Prim f, void *data); + MZ_EXTERN Scheme_Object *scheme_values(int c, Scheme_Object **v); MZ_EXTERN Scheme_Object *scheme_check_one_value(Scheme_Object *v); @@ -384,6 +398,7 @@ MZ_EXTERN Scheme_Hash_Table *scheme_make_hash_table(int type); MZ_EXTERN Scheme_Hash_Table *scheme_make_hash_table_equal(); MZ_EXTERN void scheme_hash_set(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val); MZ_EXTERN Scheme_Object *scheme_hash_get(Scheme_Hash_Table *table, Scheme_Object *key); +XFORM_NONGCING MZ_EXTERN Scheme_Object *scheme_eq_hash_get(Scheme_Hash_Table *table, Scheme_Object *key); MZ_EXTERN int scheme_hash_table_equal(Scheme_Hash_Table *t1, Scheme_Hash_Table *t2); MZ_EXTERN int scheme_is_hash_table_equal(Scheme_Object *o); MZ_EXTERN Scheme_Hash_Table *scheme_clone_hash_table(Scheme_Hash_Table *bt); @@ -704,6 +719,12 @@ MZ_EXTERN Scheme_Object *scheme_write_special_nonblock(int argc, Scheme_Object * MZ_EXTERN Scheme_Object *scheme_make_write_evt(const char *who, Scheme_Object *port, Scheme_Object *special, char *str, long start, long size); +MZ_EXTERN Scheme_Port *scheme_port_record(Scheme_Object *port); +MZ_EXTERN Scheme_Input_Port *scheme_input_port_record(Scheme_Object *port); +MZ_EXTERN Scheme_Output_Port *scheme_output_port_record(Scheme_Object *port); +XFORM_NONGCING MZ_EXTERN int scheme_is_input_port(Scheme_Object *port); +XFORM_NONGCING MZ_EXTERN int scheme_is_output_port(Scheme_Object *port); + MZ_EXTERN Scheme_Object *scheme_make_port_type(const char *name); MZ_EXTERN Scheme_Input_Port *scheme_make_input_port(Scheme_Object *subtype, void *data, Scheme_Object *name, @@ -911,7 +932,7 @@ MZ_EXTERN void scheme_struct_set(Scheme_Object *s, int pos, Scheme_Object *v); MZ_EXTERN Scheme_Object *scheme_make_struct_type_property(Scheme_Object *name); MZ_EXTERN Scheme_Object *scheme_make_struct_type_property_w_guard(Scheme_Object *name, Scheme_Object *guard); -MZ_EXTERN Scheme_Object *scheme_struct_type_property_ref(Scheme_Object *prop, Scheme_Object *s); +XFORM_NONGCING MZ_EXTERN Scheme_Object *scheme_struct_type_property_ref(Scheme_Object *prop, Scheme_Object *s); MZ_EXTERN Scheme_Object *scheme_make_location(Scheme_Object *src, Scheme_Object *line, diff --git a/src/mzscheme/src/schemex.h b/src/mzscheme/src/schemex.h index 7b77e39c02..6361e37773 100644 --- a/src/mzscheme/src/schemex.h +++ b/src/mzscheme/src/schemex.h @@ -193,6 +193,8 @@ unsigned char *scheme_uchar_combining_classes; /*========================================================================*/ Scheme_Object *(*scheme_eval)(Scheme_Object *obj, Scheme_Env *env); Scheme_Object *(*scheme_eval_multi)(Scheme_Object *obj, Scheme_Env *env); +Scheme_Object *(*scheme_eval_with_prompt)(Scheme_Object *obj, Scheme_Env *env); +Scheme_Object *(*scheme_eval_multi_with_prompt)(Scheme_Object *obj, Scheme_Env *env); Scheme_Object *(*scheme_eval_compiled)(Scheme_Object *obj, Scheme_Env *env); Scheme_Object *(*scheme_eval_compiled_multi)(Scheme_Object *obj, Scheme_Env *env); Scheme_Object *(*_scheme_eval_compiled)(Scheme_Object *obj, Scheme_Env *env); @@ -202,9 +204,16 @@ Scheme_Object *(*scheme_apply_multi)(Scheme_Object *rator, int num_rands, Scheme Scheme_Object *(*scheme_apply_no_eb)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); Scheme_Object *(*scheme_apply_multi_no_eb)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); Scheme_Object *(*scheme_apply_to_list)(Scheme_Object *rator, Scheme_Object *argss); +Scheme_Object *(*scheme_apply_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); +Scheme_Object *(*scheme_apply_multi_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); +Scheme_Object *(*_scheme_apply_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); +Scheme_Object *(*_scheme_apply_multi_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands); Scheme_Object *(*scheme_eval_string)(const char *str, Scheme_Env *env); Scheme_Object *(*scheme_eval_string_multi)(const char *str, Scheme_Env *env); Scheme_Object *(*scheme_eval_string_all)(const char *str, Scheme_Env *env, int all); +Scheme_Object *(*scheme_eval_string_with_prompt)(const char *str, Scheme_Env *env); +Scheme_Object *(*scheme_eval_string_multi_with_prompt)(const char *str, Scheme_Env *env); +Scheme_Object *(*scheme_eval_string_all_with_prompt)(const char *str, Scheme_Env *env, int all); Scheme_Object *(*_scheme_apply_known_prim_closure)(Scheme_Object *rator, int argc, Scheme_Object **argv); Scheme_Object *(*_scheme_apply_known_prim_closure_multi)(Scheme_Object *rator, int argc, @@ -213,6 +222,10 @@ Scheme_Object *(*_scheme_apply_prim_closure)(Scheme_Object *rator, int argc, Scheme_Object **argv); Scheme_Object *(*_scheme_apply_prim_closure_multi)(Scheme_Object *rator, int argc, Scheme_Object **argv); +Scheme_Object *(*scheme_call_with_prompt)(Scheme_Closed_Prim f, void *data); +Scheme_Object *(*scheme_call_with_prompt_multi)(Scheme_Closed_Prim f, void *data); +Scheme_Object *(*_scheme_call_with_prompt)(Scheme_Closed_Prim f, void *data); +Scheme_Object *(*_scheme_call_with_prompt_multi)(Scheme_Closed_Prim f, void *data); Scheme_Object *(*scheme_values)(int c, Scheme_Object **v); Scheme_Object *(*scheme_check_one_value)(Scheme_Object *v); /* Tail calls - only use these when you're writing new functions/syntax */ @@ -310,6 +323,7 @@ Scheme_Hash_Table *(*scheme_make_hash_table)(int type); Scheme_Hash_Table *(*scheme_make_hash_table_equal)(); void (*scheme_hash_set)(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val); Scheme_Object *(*scheme_hash_get)(Scheme_Hash_Table *table, Scheme_Object *key); +Scheme_Object *(*scheme_eq_hash_get)(Scheme_Hash_Table *table, Scheme_Object *key); int (*scheme_hash_table_equal)(Scheme_Hash_Table *t1, Scheme_Hash_Table *t2); int (*scheme_is_hash_table_equal)(Scheme_Object *o); Scheme_Hash_Table *(*scheme_clone_hash_table)(Scheme_Hash_Table *bt); @@ -588,6 +602,11 @@ Scheme_Object *(*scheme_write_special)(int argc, Scheme_Object *argv[]); Scheme_Object *(*scheme_write_special_nonblock)(int argc, Scheme_Object *argv[]); Scheme_Object *(*scheme_make_write_evt)(const char *who, Scheme_Object *port, Scheme_Object *special, char *str, long start, long size); +Scheme_Port *(*scheme_port_record)(Scheme_Object *port); +Scheme_Input_Port *(*scheme_input_port_record)(Scheme_Object *port); +Scheme_Output_Port *(*scheme_output_port_record)(Scheme_Object *port); +int (*scheme_is_input_port)(Scheme_Object *port); +int (*scheme_is_output_port)(Scheme_Object *port); Scheme_Object *(*scheme_make_port_type)(const char *name); Scheme_Input_Port *(*scheme_make_input_port)(Scheme_Object *subtype, void *data, Scheme_Object *name, diff --git a/src/mzscheme/src/schemex.inc b/src/mzscheme/src/schemex.inc index 5f52884de5..39555498f6 100644 --- a/src/mzscheme/src/schemex.inc +++ b/src/mzscheme/src/schemex.inc @@ -114,6 +114,8 @@ scheme_extension_table->scheme_uchar_combining_classes = scheme_uchar_combining_classes; scheme_extension_table->scheme_eval = scheme_eval; scheme_extension_table->scheme_eval_multi = scheme_eval_multi; + scheme_extension_table->scheme_eval_with_prompt = scheme_eval_with_prompt; + scheme_extension_table->scheme_eval_multi_with_prompt = scheme_eval_multi_with_prompt; scheme_extension_table->scheme_eval_compiled = scheme_eval_compiled; scheme_extension_table->scheme_eval_compiled_multi = scheme_eval_compiled_multi; scheme_extension_table->_scheme_eval_compiled = _scheme_eval_compiled; @@ -123,13 +125,24 @@ scheme_extension_table->scheme_apply_no_eb = scheme_apply_no_eb; scheme_extension_table->scheme_apply_multi_no_eb = scheme_apply_multi_no_eb; scheme_extension_table->scheme_apply_to_list = scheme_apply_to_list; + scheme_extension_table->scheme_apply_with_prompt = scheme_apply_with_prompt; + scheme_extension_table->scheme_apply_multi_with_prompt = scheme_apply_multi_with_prompt; + scheme_extension_table->_scheme_apply_with_prompt = _scheme_apply_with_prompt; + scheme_extension_table->_scheme_apply_multi_with_prompt = _scheme_apply_multi_with_prompt; scheme_extension_table->scheme_eval_string = scheme_eval_string; scheme_extension_table->scheme_eval_string_multi = scheme_eval_string_multi; scheme_extension_table->scheme_eval_string_all = scheme_eval_string_all; + scheme_extension_table->scheme_eval_string_with_prompt = scheme_eval_string_with_prompt; + scheme_extension_table->scheme_eval_string_multi_with_prompt = scheme_eval_string_multi_with_prompt; + scheme_extension_table->scheme_eval_string_all_with_prompt = scheme_eval_string_all_with_prompt; scheme_extension_table->_scheme_apply_known_prim_closure = _scheme_apply_known_prim_closure; scheme_extension_table->_scheme_apply_known_prim_closure_multi = _scheme_apply_known_prim_closure_multi; scheme_extension_table->_scheme_apply_prim_closure = _scheme_apply_prim_closure; scheme_extension_table->_scheme_apply_prim_closure_multi = _scheme_apply_prim_closure_multi; + scheme_extension_table->scheme_call_with_prompt = scheme_call_with_prompt; + scheme_extension_table->scheme_call_with_prompt_multi = scheme_call_with_prompt_multi; + scheme_extension_table->_scheme_call_with_prompt = _scheme_call_with_prompt; + scheme_extension_table->_scheme_call_with_prompt_multi = _scheme_call_with_prompt_multi; scheme_extension_table->scheme_values = scheme_values; scheme_extension_table->scheme_check_one_value = scheme_check_one_value; scheme_extension_table->scheme_tail_apply = scheme_tail_apply; @@ -207,6 +220,7 @@ scheme_extension_table->scheme_make_hash_table_equal = scheme_make_hash_table_equal; scheme_extension_table->scheme_hash_set = scheme_hash_set; scheme_extension_table->scheme_hash_get = scheme_hash_get; + scheme_extension_table->scheme_eq_hash_get = scheme_eq_hash_get; scheme_extension_table->scheme_hash_table_equal = scheme_hash_table_equal; scheme_extension_table->scheme_is_hash_table_equal = scheme_is_hash_table_equal; scheme_extension_table->scheme_clone_hash_table = scheme_clone_hash_table; @@ -393,6 +407,11 @@ scheme_extension_table->scheme_write_special = scheme_write_special; scheme_extension_table->scheme_write_special_nonblock = scheme_write_special_nonblock; scheme_extension_table->scheme_make_write_evt = scheme_make_write_evt; + scheme_extension_table->scheme_port_record = scheme_port_record; + scheme_extension_table->scheme_input_port_record = scheme_input_port_record; + scheme_extension_table->scheme_output_port_record = scheme_output_port_record; + scheme_extension_table->scheme_is_input_port = scheme_is_input_port; + scheme_extension_table->scheme_is_output_port = scheme_is_output_port; scheme_extension_table->scheme_make_port_type = scheme_make_port_type; scheme_extension_table->scheme_make_input_port = scheme_make_input_port; scheme_extension_table->scheme_make_output_port = scheme_make_output_port; diff --git a/src/mzscheme/src/schemexm.h b/src/mzscheme/src/schemexm.h index 991ed5b1bf..4af1d699e5 100644 --- a/src/mzscheme/src/schemexm.h +++ b/src/mzscheme/src/schemexm.h @@ -114,6 +114,8 @@ #define scheme_uchar_combining_classes (scheme_extension_table->scheme_uchar_combining_classes) #define scheme_eval (scheme_extension_table->scheme_eval) #define scheme_eval_multi (scheme_extension_table->scheme_eval_multi) +#define scheme_eval_with_prompt (scheme_extension_table->scheme_eval_with_prompt) +#define scheme_eval_multi_with_prompt (scheme_extension_table->scheme_eval_multi_with_prompt) #define scheme_eval_compiled (scheme_extension_table->scheme_eval_compiled) #define scheme_eval_compiled_multi (scheme_extension_table->scheme_eval_compiled_multi) #define _scheme_eval_compiled (scheme_extension_table->_scheme_eval_compiled) @@ -123,13 +125,24 @@ #define scheme_apply_no_eb (scheme_extension_table->scheme_apply_no_eb) #define scheme_apply_multi_no_eb (scheme_extension_table->scheme_apply_multi_no_eb) #define scheme_apply_to_list (scheme_extension_table->scheme_apply_to_list) +#define scheme_apply_with_prompt (scheme_extension_table->scheme_apply_with_prompt) +#define scheme_apply_multi_with_prompt (scheme_extension_table->scheme_apply_multi_with_prompt) +#define _scheme_apply_with_prompt (scheme_extension_table->_scheme_apply_with_prompt) +#define _scheme_apply_multi_with_prompt (scheme_extension_table->_scheme_apply_multi_with_prompt) #define scheme_eval_string (scheme_extension_table->scheme_eval_string) #define scheme_eval_string_multi (scheme_extension_table->scheme_eval_string_multi) #define scheme_eval_string_all (scheme_extension_table->scheme_eval_string_all) +#define scheme_eval_string_with_prompt (scheme_extension_table->scheme_eval_string_with_prompt) +#define scheme_eval_string_multi_with_prompt (scheme_extension_table->scheme_eval_string_multi_with_prompt) +#define scheme_eval_string_all_with_prompt (scheme_extension_table->scheme_eval_string_all_with_prompt) #define _scheme_apply_known_prim_closure (scheme_extension_table->_scheme_apply_known_prim_closure) #define _scheme_apply_known_prim_closure_multi (scheme_extension_table->_scheme_apply_known_prim_closure_multi) #define _scheme_apply_prim_closure (scheme_extension_table->_scheme_apply_prim_closure) #define _scheme_apply_prim_closure_multi (scheme_extension_table->_scheme_apply_prim_closure_multi) +#define scheme_call_with_prompt (scheme_extension_table->scheme_call_with_prompt) +#define scheme_call_with_prompt_multi (scheme_extension_table->scheme_call_with_prompt_multi) +#define _scheme_call_with_prompt (scheme_extension_table->_scheme_call_with_prompt) +#define _scheme_call_with_prompt_multi (scheme_extension_table->_scheme_call_with_prompt_multi) #define scheme_values (scheme_extension_table->scheme_values) #define scheme_check_one_value (scheme_extension_table->scheme_check_one_value) #define scheme_tail_apply (scheme_extension_table->scheme_tail_apply) @@ -207,6 +220,7 @@ #define scheme_make_hash_table_equal (scheme_extension_table->scheme_make_hash_table_equal) #define scheme_hash_set (scheme_extension_table->scheme_hash_set) #define scheme_hash_get (scheme_extension_table->scheme_hash_get) +#define scheme_eq_hash_get (scheme_extension_table->scheme_eq_hash_get) #define scheme_hash_table_equal (scheme_extension_table->scheme_hash_table_equal) #define scheme_is_hash_table_equal (scheme_extension_table->scheme_is_hash_table_equal) #define scheme_clone_hash_table (scheme_extension_table->scheme_clone_hash_table) @@ -393,6 +407,11 @@ #define scheme_write_special (scheme_extension_table->scheme_write_special) #define scheme_write_special_nonblock (scheme_extension_table->scheme_write_special_nonblock) #define scheme_make_write_evt (scheme_extension_table->scheme_make_write_evt) +#define scheme_port_record (scheme_extension_table->scheme_port_record) +#define scheme_input_port_record (scheme_extension_table->scheme_input_port_record) +#define scheme_output_port_record (scheme_extension_table->scheme_output_port_record) +#define scheme_is_input_port (scheme_extension_table->scheme_is_input_port) +#define scheme_is_output_port (scheme_extension_table->scheme_is_output_port) #define scheme_make_port_type (scheme_extension_table->scheme_make_port_type) #define scheme_make_input_port (scheme_extension_table->scheme_make_input_port) #define scheme_make_output_port (scheme_extension_table->scheme_make_output_port) diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index 2abe213d2a..92c6943f1f 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 885 +#define EXPECTED_PRIM_COUNT 887 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 9c23718597..96929376cd 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -92,6 +92,7 @@ Scheme_Object *scheme_dump_gc_stats(int c, Scheme_Object *p[]); extern long scheme_total_gc_time; extern int scheme_cont_capture_count; +extern int scheme_continuation_application_count; int scheme_num_types(void); @@ -266,6 +267,8 @@ extern Scheme_Object *scheme_default_prompt_tag; extern Scheme_Object *scheme_system_idle_channel; +extern Scheme_Object *scheme_input_port_property, *scheme_output_port_property; + /*========================================================================*/ /* thread state and maintenance */ /*========================================================================*/ @@ -402,6 +405,7 @@ struct Scheme_Config { }; extern Scheme_Object *scheme_parameterization_key; +extern Scheme_Object *scheme_exn_handler_key; extern Scheme_Object *scheme_break_enabled_key; extern void scheme_flatten_config(Scheme_Config *c); @@ -940,7 +944,6 @@ typedef struct Scheme_Stack_State { long runstack_offset; MZ_MARK_POS_TYPE cont_mark_pos; MZ_MARK_STACK_TYPE cont_mark_stack; - struct Scheme_Prompt *barrier_prompt; } Scheme_Stack_State; typedef struct Scheme_Dynamic_Wind { @@ -952,29 +955,25 @@ typedef struct Scheme_Dynamic_Wind { void (*pre)(void *); void (*post)(void *); mz_jmp_buf *saveerr; - int next_meta; /* amount to move forward in the meta-continuation chain */ + int next_meta; /* amount to move forward in the meta-continuation chain, starting with next */ struct Scheme_Stack_State envss; struct Scheme_Dynamic_Wind *prev; } Scheme_Dynamic_Wind; typedef struct Scheme_Cont { Scheme_Object so; - short composable; - Scheme_Object *value; /* Set just before jump */ - struct Scheme_Overflow *resume_to; /* Set just before jump */ - struct Scheme_Cont *use_next_cont; /* Set just before jump */ - int common_dw_depth; /* Set just before jump; id common dw record */ - Scheme_Object *extra_marks; /* Set just before jump; vector extra keys and marks to add to meta-cont */ + char composable, has_prompt_dw; struct Scheme_Meta_Continuation *meta_continuation; Scheme_Jumpup_Buf buf; Scheme_Dynamic_Wind *dw; + int next_meta; Scheme_Continuation_Jump_State cjs; Scheme_Stack_State ss; + struct Scheme_Prompt *barrier_prompt; /* NULL if no barrier between cont and prompt */ Scheme_Object **runstack_start; long runstack_size; Scheme_Saved_Stack *runstack_saved; Scheme_Object *prompt_tag; - int prompt_depth; mz_jmp_buf *prompt_buf; /* needed for meta-prompt */ MZ_MARK_POS_TYPE meta_tail_pos; /* to recognize opportunity for meta-tail calls */ MZ_MARK_POS_TYPE cont_mark_pos_bottom; /* to splice cont mark values with meta-cont */ @@ -985,6 +984,7 @@ typedef struct Scheme_Cont { Scheme_Thread **cont_mark_stack_owner; long cont_mark_shareable, cont_mark_offset; void *stack_start; + Scheme_Object *prompt_id; /* allows direct-jump optimization */ Scheme_Config *init_config; Scheme_Object *init_break_cell; #ifdef MZ_USE_JIT @@ -992,11 +992,22 @@ typedef struct Scheme_Cont { #endif struct Scheme_Overflow *save_overflow; mz_jmp_buf *savebuf; /* save old error buffer here */ + + /* Arguments passed to a continuation invocation to the continuation restorer: */ + Scheme_Object *value; /* argument(s) to continuation */ + struct Scheme_Overflow *resume_to; /* meta-continuation return */ + struct Scheme_Cont *use_next_cont; /* more meta-continuation return */ + int common_dw_depth; /* id for common dw record */ + Scheme_Dynamic_Wind *common_dw; /* shared part with source cont */ + int common_next_meta; /* for common_dw */ + Scheme_Object *extra_marks; /* vector of extra keys and marks to add to meta-cont */ + struct Scheme_Prompt *shortcut_prompt; /* prompt common to save and restore enabling shortcut */ } Scheme_Cont; typedef struct Scheme_Escaping_Cont { Scheme_Object so; struct Scheme_Stack_State envss; + struct Scheme_Prompt *barrier_prompt; #ifdef MZ_USE_JIT Scheme_Object *native_trace; #endif @@ -1009,12 +1020,10 @@ int scheme_escape_continuation_ok(Scheme_Object *); #define scheme_save_env_stack_w_thread(ss, p) \ (ss.runstack_offset = MZ_RUNSTACK - MZ_RUNSTACK_START, \ - ss.cont_mark_stack = MZ_CONT_MARK_STACK, ss.cont_mark_pos = MZ_CONT_MARK_POS, \ - ss.barrier_prompt = p->barrier_prompt) + ss.cont_mark_stack = MZ_CONT_MARK_STACK, ss.cont_mark_pos = MZ_CONT_MARK_POS) #define scheme_restore_env_stack_w_thread(ss, p) \ (MZ_RUNSTACK = MZ_RUNSTACK_START + ss.runstack_offset, \ - MZ_CONT_MARK_STACK = ss.cont_mark_stack, MZ_CONT_MARK_POS = ss.cont_mark_pos, \ - p->barrier_prompt = ss.barrier_prompt) + MZ_CONT_MARK_STACK = ss.cont_mark_stack, MZ_CONT_MARK_POS = ss.cont_mark_pos) #define scheme_save_env_stack(ss) \ scheme_save_env_stack_w_thread(ss, scheme_current_thread) #define scheme_restore_env_stack(ss) \ @@ -1052,6 +1061,7 @@ typedef struct Scheme_Meta_Continuation { char cm_caches; /* cached info in copied cm */ char cm_shared; /* cm is shared, so copy before setting cache entries */ int copy_after_captured; /* for mutating a meta-continuation in set_cont_stack_mark */ + int depth; Scheme_Object *prompt_tag; /* The C stack: */ Scheme_Overflow *overflow; @@ -1068,15 +1078,15 @@ typedef struct Scheme_Meta_Continuation { typedef struct Scheme_Prompt { Scheme_Object so; - char is_barrier, is_captured; - int depth; + char is_barrier; + Scheme_Object *tag; + Scheme_Object *id; /* created as needed; allows direct-jump optimization for cont app */ void *stack_boundary; /* where to stop copying the C stack */ void *boundary_overflow_id; /* indicates the C stack segment */ MZ_MARK_STACK_TYPE mark_boundary; /* where to stop copying cont marks */ MZ_MARK_POS_TYPE boundary_mark_pos; /* mark position of prompt */ Scheme_Object **runstack_boundary_start; /* which stack has runstack_boundary */ long runstack_boundary_offset; /* where to stop copying the Scheme stack */ - void *boundary_dw_id; /* where to stop copying the dynamic-wind stack */ mz_jmp_buf *prompt_buf; /* to jump directly to the prompt */ long runstack_size; /* needed for restore */ } Scheme_Prompt; @@ -1087,12 +1097,23 @@ typedef struct Scheme_Prompt { Scheme_Object *scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key, Scheme_Object *prompt_tag, - Scheme_Meta_Continuation **meta_cont); + Scheme_Meta_Continuation **_meta_cont, + MZ_MARK_POS_TYPE *_pos); Scheme_Object *scheme_compose_continuation(Scheme_Cont *c, int num_rands, Scheme_Object *value); Scheme_Overflow *scheme_get_thread_end_overflow(void); void scheme_end_current_thread(void); void scheme_ensure_dw_id(Scheme_Dynamic_Wind *dw); -void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post, int mc_depth); +void scheme_apply_dw_in_meta(Scheme_Dynamic_Wind *dw, int post, int mc_depth, struct Scheme_Cont *recheck); + +void scheme_drop_prompt_meta_continuations(Scheme_Object *prompt_tag); + +struct Scheme_Prompt *scheme_get_barrier_prompt(struct Scheme_Meta_Continuation **_meta_cont, + MZ_MARK_POS_TYPE *_pos); +int scheme_is_cm_deeper(struct Scheme_Meta_Continuation *m1, MZ_MARK_POS_TYPE p1, + struct Scheme_Meta_Continuation *m2, MZ_MARK_POS_TYPE p2); +void scheme_recheck_prompt_and_barrier(struct Scheme_Cont *c); + +void scheme_about_to_move_C_stack(void); /*========================================================================*/ /* semaphores and locks */ @@ -1850,7 +1871,8 @@ int scheme_is_sub_env(Scheme_Comp_Env *stx_env, Scheme_Comp_Env *env); #define DEFINE_FOR_SYNTAX_EXPD 9 #define REF_EXPD 10 #define APPVALS_EXPD 11 -#define _COUNT_EXPD_ 12 +#define SPLICE_EXPD 12 +#define _COUNT_EXPD_ 13 #define scheme_register_syntax(i, fo, fr, fv, fe, fj, cl, sh, pa) \ (scheme_syntax_optimizers[i] = fo, \ diff --git a/src/mzscheme/src/schuchar.inc b/src/mzscheme/src/schuchar.inc index 715ee71b08..854f309553 100644 --- a/src/mzscheme/src/schuchar.inc +++ b/src/mzscheme/src/schuchar.inc @@ -44,7 +44,7 @@ static unsigned short udata[] = { 0x8a80, 0xa80, 0x8a80, 0x8a80, 0x8a80, 0x8a80, 0x8a80, 0x8a80, 0x8a80, 0x8a80, 0x8a80, 0x804, 0x804, 0x804, 0x1802, 0x804, 0x1802, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0xc80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x804, 0x802, 0x804, 0x802, 0x8, - 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, + 0x8, 0x8, 0x8, 0x8, 0x8, 0x18, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x4011, 0x804, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0xd802, 0x802, 0x4c80, 0x804, 0x802, 0x1000, 0x802, 0x5802, 0x802, 0x802, 0x4000, 0x4000, 0x5802, 0x4c80, 0x802, 0x1804, 0x5802, 0x4000, 0x4c80, 0x804, 0x4000, 0x4000, 0x4000, 0x804, diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index 8330f24785..6a4fdf23f5 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -9,6 +9,6 @@ #define MZSCHEME_VERSION_MAJOR 369 -#define MZSCHEME_VERSION_MINOR 1 +#define MZSCHEME_VERSION_MINOR 2 -#define MZSCHEME_VERSION "369.1" _MZ_SPECIAL_TAG +#define MZSCHEME_VERSION "369.2" _MZ_SPECIAL_TAG diff --git a/src/mzscheme/src/startup.inc b/src/mzscheme/src/startup.inc index 84f47fbdd4..d99591003e 100644 --- a/src/mzscheme/src/startup.inc +++ b/src/mzscheme/src/startup.inc @@ -1619,10 +1619,7 @@ "(-define(catch-ellipsis-error thunk sexp sloc)" "((let/ec esc" "(with-continuation-mark" -" parameterization-key" -"(extend-parameterization" -"(continuation-mark-set-first #f parameterization-key)" -" current-exception-handler" +" exception-handler-key" "(lambda(exn)" "(esc" "(lambda()" @@ -1632,7 +1629,7 @@ " 'syntax" " \"incompatible ellipsis match counts for template\"" " sexp" -" sloc))))))" +" sloc)))))" "(let((v(thunk)))" "(lambda() v))))))" "(-define substitute-stop 'dummy)" @@ -2730,6 +2727,7 @@ "(unless(continuation-prompt-available? handler-prompt-key) " "(error 'with-handlers" " \"exception handler used out of context\")))" +"(define handler-prompt-key(make-continuation-prompt-tag))" "(define-syntaxes(with-handlers with-handlers*)" "(let((wh " "(lambda(disable-break?)" @@ -2743,8 +2741,7 @@ "(syntax->list #'(handler ...))))))" "(quasisyntax/loc stx" "(let((pred-name pred) ..." -"(handler-name handler) ..." -"(handler-prompt-key(make-continuation-prompt-tag)))" +"(handler-name handler) ...)" "(let((bpz(continuation-mark-set-first #f break-enabled-key)))" "(with-continuation-mark" " break-enabled-key" @@ -2754,9 +2751,9 @@ "(with-continuation-mark " " break-enabled-key" " bpz" -"(parameterize((current-exception-handler" +"(with-continuation-mark " +" exception-handler-key" "(lambda(e)" -"(check-with-handlers-in-context handler-prompt-key)" "(abort-current-continuation" " handler-prompt-key" "(lambda()" @@ -2764,11 +2761,17 @@ " #'select-handler/no-breaks" " #'select-handler/breaks-as-is)" " e bpz" -"(list(cons pred-name handler-name) ...)))))))" -" expr1 expr ...)))" +"(list(cons pred-name handler-name) ...)))))" +"(let()" +" expr1 expr ...))))" " handler-prompt-key" "(lambda(thunk)(thunk))))))))))))))" "(values(wh #t)(wh #f))))" +"(define(call-with-exception-handler exnh thunk)" +"(with-continuation-mark" +" exception-handler-key" +" exnh" +"(thunk)))" "(define-syntax set!-values" "(lambda(stx)" "(syntax-case stx()" @@ -2838,7 +2841,8 @@ "(provide case do delay force promise?" " parameterize current-parameterization call-with-parameterization" " parameterize-break current-break-parameterization call-with-break-parameterization" -" with-handlers with-handlers* set!-values" +" with-handlers with-handlers* call-with-exception-handler" +" set!-values" " let/cc let-struct fluid-let time))" ); EVAL_ONE_STR( @@ -2921,26 +2925,25 @@ "((negative? lo)(-(find-between(- hi)(- lo))))" "(else(find-between lo hi)))))))" "(define(read-eval-print-loop)" -"(let*((jump-key(gensym))" -"(repl-error-escape-handler" -"(lambda()" -"(let((jump-k(continuation-mark-set-first #f jump-key)))" -"(if jump-k" -"(jump-k)" -" (error 'repl-error-escape-handler \"used out of context\"))))))" -"(parameterize((error-escape-handler repl-error-escape-handler))" -"(let/ec done-k" "(let repl-loop()" -"(let/ec k" -"(with-continuation-mark jump-key k" +"(call-with-continuation-prompt" +"(lambda()" "(let((v((current-prompt-read))))" -"(when(eof-object? v)(done-k(void)))" +"(unless(eof-object? v)" "(call-with-values" -"(lambda()((current-eval)(if(syntax? v)" -"(namespace-syntax-introduce v)" -" v)))" -"(lambda results(for-each(current-print) results))))))" -"(repl-loop))))))" +"(lambda() " +"(call-with-continuation-prompt" +"(lambda()" +"(let((w(cons '#%top-interaction v)))" +"((current-eval)(if(syntax? v)" +"(namespace-syntax-introduce " +"(datum->syntax-object #f w v))" +" w))))" +"(default-continuation-prompt-tag)))" +"(lambda results(for-each(current-print) results)))" +"(abort-current-continuation(default-continuation-prompt-tag)))))" +"(default-continuation-prompt-tag)" +"(lambda args(repl-loop)))))" "(define load/cd" "(lambda(n)" "(unless(path-string? n)" @@ -3544,7 +3547,17 @@ "(stx-cdr stx))" " stx)" " (raise-syntax-error #f \"bad syntax\" stx))))" -"(provide mzscheme-in-stx-module-begin))" +"(define-syntax #%top-interaction" +"(lambda(stx)" +"(if(eq? 'top-level(syntax-local-context))" +" 'ok" +"(raise-syntax-error" +" #f" +" \"not at top level\"" +" stx))" +"(datum->syntax-object stx(stx-cdr stx) stx stx)))" +"(provide mzscheme-in-stx-module-begin" +" #%top-interaction))" ); EVAL_ONE_STR( "(module mzscheme #%kernel" @@ -3563,6 +3576,7 @@ "(all-from #%qqstx)" "(all-from #%define)" "(all-from-except #%kernel #%module-begin)" +" #%top-interaction" "(rename mzscheme-in-stx-module-begin #%module-begin)" "(rename #%module-begin #%plain-module-begin)))" ); @@ -3603,7 +3617,7 @@ "(rename r5rs:letrec letrec)" " let* begin lambda quote set!" " define-syntax let-syntax letrec-syntax" -" #%app #%datum #%top))" +" #%app #%datum #%top #%top-interaction))" ); EVAL_ONE_STR( "(require(only mzscheme namespace-require/copy))" diff --git a/src/mzscheme/src/startup.ss b/src/mzscheme/src/startup.ss index 7264371208..8f49a17bf2 100644 --- a/src/mzscheme/src/startup.ss +++ b/src/mzscheme/src/startup.ss @@ -1906,20 +1906,17 @@ (-define (catch-ellipsis-error thunk sexp sloc) ((let/ec esc (with-continuation-mark - parameterization-key - (extend-parameterization - (continuation-mark-set-first #f parameterization-key) - current-exception-handler - (lambda (exn) - (esc - (lambda () - (if (exn:break? exn) - (raise exn) - (raise-syntax-error - 'syntax - "incompatible ellipsis match counts for template" - sexp - sloc)))))) + exception-handler-key + (lambda (exn) + (esc + (lambda () + (if (exn:break? exn) + (raise exn) + (raise-syntax-error + 'syntax + "incompatible ellipsis match counts for template" + sexp + sloc))))) (let ([v (thunk)]) (lambda () v)))))) @@ -3142,6 +3139,8 @@ (error 'with-handlers "exception handler used out of context"))) + (define handler-prompt-key (make-continuation-prompt-tag)) + (define-syntaxes (with-handlers with-handlers*) (let ([wh (lambda (disable-break?) @@ -3155,8 +3154,7 @@ (syntax->list #'(handler ...))))]) (quasisyntax/loc stx (let ([pred-name pred] ... - [handler-name handler] ... - [handler-prompt-key (make-continuation-prompt-tag)]) + [handler-name handler] ...) ;; Capture current break parameterization, so we can use it to ;; evaluate the body (let ([bpz (continuation-mark-set-first #f break-enabled-key)]) @@ -3176,24 +3174,31 @@ (with-continuation-mark break-enabled-key bpz - (parameterize ([current-exception-handler - (lambda (e) - (check-with-handlers-in-context handler-prompt-key) - ;; Deliver a thunk to the escape handler: - (abort-current-continuation - handler-prompt-key - (lambda () - (#,(if disable-break? - #'select-handler/no-breaks - #'select-handler/breaks-as-is) - e bpz - (list (cons pred-name handler-name) ...)))))]) - expr1 expr ...))) + (with-continuation-mark + exception-handler-key + (lambda (e) + ;; Deliver a thunk to the escape handler: + (abort-current-continuation + handler-prompt-key + (lambda () + (#,(if disable-break? + #'select-handler/no-breaks + #'select-handler/breaks-as-is) + e bpz + (list (cons pred-name handler-name) ...))))) + (let () + expr1 expr ...)))) handler-prompt-key ;; On escape, apply the handler thunk (lambda (thunk) (thunk))))))))])))]) (values (wh #t) (wh #f)))) + (define (call-with-exception-handler exnh thunk) + (with-continuation-mark + exception-handler-key + exnh + (thunk))) + (define-syntax set!-values (lambda (stx) (syntax-case stx () @@ -3268,7 +3273,8 @@ (provide case do delay force promise? parameterize current-parameterization call-with-parameterization parameterize-break current-break-parameterization call-with-break-parameterization - with-handlers with-handlers* set!-values + with-handlers with-handlers* call-with-exception-handler + set!-values let/cc let-struct fluid-let time)) ;;---------------------------------------------------------------------- @@ -3360,30 +3366,30 @@ [else (find-between lo hi)]))))) (define (read-eval-print-loop) - (let* ([jump-key (gensym)] - [repl-error-escape-handler - (lambda () - (let ([jump-k (continuation-mark-set-first #f jump-key)]) - (if jump-k - (jump-k) - (error 'repl-error-escape-handler "used out of context"))))]) - ;; This parameterize is outside the loop so that - ;; expressions evaluated in the REPL can set the - ;; error escape handler. That's why we communicate the - ;; actual escape target through a continuation mark. - (parameterize ([error-escape-handler repl-error-escape-handler]) - (let/ec done-k - (let repl-loop () - (let/ec k - (with-continuation-mark jump-key k - (let ([v ((current-prompt-read))]) - (when (eof-object? v) (done-k (void))) - (call-with-values - (lambda () ((current-eval) (if (syntax? v) - (namespace-syntax-introduce v) - v))) - (lambda results (for-each (current-print) results)))))) - (repl-loop)))))) + (let repl-loop () + ;; This prompt catches all error escapes, including from read and print. + (call-with-continuation-prompt + (lambda () + (let ([v ((current-prompt-read))]) + (unless (eof-object? v) + (call-with-values + (lambda () + ;; This prompt catches escapes during evaluation. + ;; Unlike the outer prompt, the handler prints + ;; the results. + (call-with-continuation-prompt + (lambda () + (let ([w (cons '#%top-interaction v)]) + ((current-eval) (if (syntax? v) + (namespace-syntax-introduce + (datum->syntax-object #f w v)) + w)))) + (default-continuation-prompt-tag))) + (lambda results (for-each (current-print) results))) + ;; Abort to loop. (Calling `repl-loop' directory would not be a tail call.) + (abort-current-continuation (default-continuation-prompt-tag))))) + (default-continuation-prompt-tag) + (lambda args (repl-loop))))) (define load/cd (lambda (n) @@ -4046,7 +4052,18 @@ stx) (raise-syntax-error #f "bad syntax" stx)))) - (provide mzscheme-in-stx-module-begin)) + (define-syntax #%top-interaction + (lambda (stx) + (if (eq? 'top-level (syntax-local-context)) + 'ok + (raise-syntax-error + #f + "not at top level" + stx)) + (datum->syntax-object stx (stx-cdr stx) stx stx))) + + (provide mzscheme-in-stx-module-begin + #%top-interaction)) ;;---------------------------------------------------------------------- ;; mzscheme: provide everything @@ -4068,6 +4085,7 @@ (all-from #%qqstx) (all-from #%define) (all-from-except #%kernel #%module-begin) + #%top-interaction (rename mzscheme-in-stx-module-begin #%module-begin) (rename #%module-begin #%plain-module-begin))) @@ -4116,7 +4134,7 @@ ;; We have to include the following MzScheme-isms to do anything, ;; but they're not legal R5RS names, anyway. - #%app #%datum #%top)) + #%app #%datum #%top #%top-interaction)) ;;---------------------------------------------------------------------- ;; init namespace diff --git a/src/mzscheme/src/string.c b/src/mzscheme/src/string.c index 5dd320dcd2..057d094ee9 100644 --- a/src/mzscheme/src/string.c +++ b/src/mzscheme/src/string.c @@ -1835,7 +1835,7 @@ sch_printf(int argc, Scheme_Object *argv[]) static Scheme_Object * sch_fprintf(int argc, Scheme_Object *argv[]) { - if (!SCHEME_OUTPORTP(argv[0])) + if (!SCHEME_OUTPUT_PORTP(argv[0])) scheme_wrong_type("fprintf", "output-port", 0, argc, argv); scheme_do_format("fprintf", argv[0], NULL, 0, 1, 2, argc, argv); diff --git a/src/mzscheme/src/struct.c b/src/mzscheme/src/struct.c index 4a6b87337a..1b844525e8 100644 --- a/src/mzscheme/src/struct.c +++ b/src/mzscheme/src/struct.c @@ -26,6 +26,7 @@ Scheme_Object *scheme_arity_at_least, *scheme_date; Scheme_Object *scheme_make_arity_at_least; Scheme_Object *scheme_source_property; +Scheme_Object *scheme_input_port_property, *scheme_output_port_property; /* locals */ @@ -60,6 +61,8 @@ static Scheme_Object *make_struct_type_property(int argc, Scheme_Object *argv[]) static Scheme_Object *struct_type_property_p(int argc, Scheme_Object *argv[]); static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_write_property_value_ok(int argc, Scheme_Object *argv[]); +static Scheme_Object *check_input_port_property_value_ok(int argc, Scheme_Object *argv[]); +static Scheme_Object *check_output_port_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *make_struct_type(int argc, Scheme_Object *argv[]); @@ -99,6 +102,8 @@ static Scheme_Object *evt_property; static int evt_struct_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); static int is_evt_struct(Scheme_Object *); +static Scheme_Object *proc_property; + static int wrapped_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); static int nack_guard_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); static int nack_evt_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo); @@ -229,7 +234,7 @@ scheme_init_struct (Scheme_Env *env) { Scheme_Object *guard, *a[2], *pred, *access; guard = scheme_make_prim_w_arity(check_write_property_value_ok, - "prop:custom-write-guard", + "guard-for-prop:custom-write", 2, 2); a[0] = scheme_intern_symbol("custom-write"); @@ -247,10 +252,10 @@ scheme_init_struct (Scheme_Env *env) { Scheme_Object *guard; guard = scheme_make_prim_w_arity(check_evt_property_value_ok, - "prop:evt-guard", + "guard-for-prop:evt", 2, 2); evt_property = scheme_make_struct_type_property_w_guard(scheme_intern_symbol("evt"), - guard); + guard); scheme_add_global_constant("prop:evt", evt_property, env); scheme_add_evt(scheme_structure_type, @@ -259,6 +264,33 @@ scheme_init_struct (Scheme_Env *env) is_evt_struct, 1); } + { + REGISTER_SO(proc_property); + proc_property = scheme_make_struct_type_property(scheme_intern_symbol("procedure")); + scheme_add_global_constant("prop:procedure", proc_property, env); + } + + { + Scheme_Object *guard; + REGISTER_SO(scheme_input_port_property); + REGISTER_SO(scheme_output_port_property); + + guard = scheme_make_prim_w_arity(check_input_port_property_value_ok, + "guard-for-prop:input-port", + 2, 2); + scheme_input_port_property = scheme_make_struct_type_property_w_guard(scheme_intern_symbol("input-port"), + guard); + + guard = scheme_make_prim_w_arity(check_output_port_property_value_ok, + "guard-for-prop:output-port", + 2, 2); + scheme_output_port_property = scheme_make_struct_type_property_w_guard(scheme_intern_symbol("output-port"), + guard); + + scheme_add_global_constant("prop:input-port", scheme_input_port_property, env); + scheme_add_global_constant("prop:output-port", scheme_output_port_property, env); + } + REGISTER_SO(scheme_recur_symbol); REGISTER_SO(scheme_display_symbol); REGISTER_SO(scheme_write_special_symbol); @@ -451,7 +483,7 @@ scheme_init_struct (Scheme_Env *env) { Scheme_Object *guard; guard = scheme_make_prim_w_arity(check_exn_source_property_value_ok, - "prop:exn:srclocs-guard", + "guard-for-prop:exn:srclocs", 2, 2); scheme_source_property = scheme_make_struct_type_property_w_guard(scheme_intern_symbol("prop:exn:srclocs"), guard); @@ -587,7 +619,7 @@ static Scheme_Object *prop_pred(int argc, Scheme_Object **args, Scheme_Object *p return scheme_false; } -static Scheme_Object *do_prop_accessor(Scheme_Object *prop, Scheme_Object *arg, int error_ok, const char *name) +XFORM_NONGCING static Scheme_Object *do_prop_accessor(Scheme_Object *prop, Scheme_Object *arg) { Scheme_Struct_Type *stype; @@ -601,7 +633,7 @@ static Scheme_Object *do_prop_accessor(Scheme_Object *prop, Scheme_Object *arg, if (stype) { if (stype->num_props < 0) { Scheme_Object *v; - v = (Scheme_Object *)scheme_hash_get((Scheme_Hash_Table *)stype->props, prop); + v = (Scheme_Object *)scheme_eq_hash_get((Scheme_Hash_Table *)stype->props, prop); if (v) return v; } else { @@ -613,17 +645,21 @@ static Scheme_Object *do_prop_accessor(Scheme_Object *prop, Scheme_Object *arg, } } - if (error_ok) /* hack; see scheme_struct_type_property_ref */ - scheme_wrong_type(name ? name : "property accessor", - "struct or struct-type with property", - 0, 1, (Scheme_Object **)&arg); return NULL; } static Scheme_Object *prop_accessor(int argc, Scheme_Object **args, Scheme_Object *prim) { - return do_prop_accessor(SCHEME_PRIM_CLOSURE_ELS(prim)[0], args[0], 1, - ((Scheme_Primitive_Proc *)prim)->name); + Scheme_Object *v; + + v = do_prop_accessor(SCHEME_PRIM_CLOSURE_ELS(prim)[0], args[0]); + + if (!v) + scheme_wrong_type(((Scheme_Primitive_Proc *)prim)->name, + "struct or struct-type with property", + 0, 1, args); + + return v; } static Scheme_Object *make_struct_type_property(int argc, Scheme_Object *argv[]) @@ -693,7 +729,7 @@ Scheme_Object *scheme_make_struct_type_property(Scheme_Object *name) Scheme_Object *scheme_struct_type_property_ref(Scheme_Object *prop, Scheme_Object *s) { - return do_prop_accessor(prop, s, 0, NULL); + return do_prop_accessor(prop, s); } static Scheme_Object *struct_type_property_p(int argc, Scheme_Object *argv[]) @@ -726,10 +762,20 @@ static Scheme_Object *guard_property(Scheme_Object *prop, Scheme_Object *v, Sche /* evt structs */ /*========================================================================*/ +static int extract_accessor_offset(Scheme_Object *acc) +{ + Struct_Proc_Info *i = (Struct_Proc_Info *)SCHEME_PRIM_CLOSURE_ELS(acc)[0]; + + if (i->struct_type->name_pos) + return i->struct_type->parent_types[i->struct_type->name_pos - 1]->num_slots; + else + return 0; +} + static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[]) /* This is the guard for prop:evt */ { - Scheme_Object *v, *l; + Scheme_Object *v, *l, *acc; int pos, num_islots; v = argv[0]; @@ -742,7 +788,7 @@ static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[ if (!((SCHEME_INTP(v) && (SCHEME_INT_VAL(v) >= 0)) || (SCHEME_BIGNUMP(v) && SCHEME_BIGPOS(v)))) - scheme_arg_mismatch("prop:evt-guard", + scheme_arg_mismatch("guard-for-prop:evt", "property value is not a evt, procedure (arity 1), or exact non-negative integer: ", v); @@ -751,6 +797,7 @@ static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[ num_islots = SCHEME_INT_VAL(SCHEME_CAR(l)); l = SCHEME_CDR(l); l = SCHEME_CDR(l); + acc = SCHEME_CAR(l); l = SCHEME_CDR(l); l = SCHEME_CDR(l); l = SCHEME_CAR(l); @@ -761,7 +808,7 @@ static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[ pos = SCHEME_INT_VAL(v); if (pos >= num_islots) { - scheme_arg_mismatch("evt-property-guard", + scheme_arg_mismatch("guard-for-prop:evt", "field index >= initialized-field count for structure type: ", v); } @@ -772,11 +819,14 @@ static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[ } if (!SCHEME_PAIRP(l)) { - scheme_arg_mismatch("evt-property-guard", + scheme_arg_mismatch("guard-for-prop:evt", "field index not declared immutable: ", v); } + pos += extract_accessor_offset(acc); + v = scheme_make_integer(pos); + return v; } @@ -786,6 +836,17 @@ static int evt_struct_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo) v = scheme_struct_type_property_ref(evt_property, o); + if (!v) { + /* Must be an input or output port: */ + if (SCHEME_INPUT_PORTP(o)) { + v = (Scheme_Object *)scheme_input_port_record(o); + } else { + v = (Scheme_Object *)scheme_output_port_record(o); + } + scheme_set_sync_target(sinfo, v, NULL, NULL, 0, 1); + return 0; + } + if (SCHEME_INTP(v)) v = ((Scheme_Structure *)o)->slots[SCHEME_INT_VAL(v)]; @@ -825,7 +886,85 @@ static int evt_struct_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo) static int is_evt_struct(Scheme_Object *o) { - return !!scheme_struct_type_property_ref(evt_property, o); + if (scheme_struct_type_property_ref(evt_property, o)) + return 1; + if (scheme_struct_type_property_ref(scheme_input_port_property, o)) + return 1; + if (scheme_struct_type_property_ref(scheme_output_port_property, o)) + return 1; + return 0; +} + +/*========================================================================*/ +/* port structs */ +/*========================================================================*/ + +static Scheme_Object *check_port_property_value_ok(const char *name, int input, int argc, Scheme_Object *argv[]) +/* This is the guard for prop:input-port and prop:output-port */ +{ + Scheme_Object *v, *l, *acc; + int pos, num_islots; + + v = argv[0]; + + if ((input && SCHEME_INPUT_PORTP(v)) + || (!input && SCHEME_OUTPUT_PORTP(v))) + return v; + + if (!((SCHEME_INTP(v) && (SCHEME_INT_VAL(v) >= 0)) + || (SCHEME_BIGNUMP(v) && SCHEME_BIGPOS(v)))) + scheme_arg_mismatch(name, + (input + ? "property value is not an input port or exact non-negative integer: " + : "property value is not an output port or exact non-negative integer: "), + v); + + l = argv[1]; + l = SCHEME_CDR(l); + num_islots = SCHEME_INT_VAL(SCHEME_CAR(l)); + l = SCHEME_CDR(l); + l = SCHEME_CDR(l); + acc = SCHEME_CAR(l); + l = SCHEME_CDR(l); + l = SCHEME_CDR(l); + l = SCHEME_CAR(l); + + if (SCHEME_BIGNUMP(v)) + pos = num_islots; /* too big */ + else + pos = SCHEME_INT_VAL(v); + + if (pos >= num_islots) { + scheme_arg_mismatch(name, + "field index >= initialized-field count for structure type: ", + v); + } + + for (; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { + if (SCHEME_INT_VAL(SCHEME_CAR(l)) == pos) + break; + } + + if (!SCHEME_PAIRP(l)) { + scheme_arg_mismatch(name, + "field index not declared immutable: ", + v); + } + + pos += extract_accessor_offset(acc); + v = scheme_make_integer(pos); + + return v; +} + +static Scheme_Object *check_input_port_property_value_ok(int argc, Scheme_Object *argv[]) +{ + return check_port_property_value_ok("guard-for-prop:input-port", 1, argc, argv); +} + +static Scheme_Object *check_output_port_property_value_ok(int argc, Scheme_Object *argv[]) +{ + return check_port_property_value_ok("guard-for-prop:output-port", 0, argc, argv); } /*========================================================================*/ @@ -839,7 +978,7 @@ static Scheme_Object *check_write_property_value_ok(int argc, Scheme_Object *arg v = argv[0]; if (!scheme_check_proc_arity(NULL, 3, 0, argc, argv)) { - scheme_arg_mismatch("prop:custom-write-guard", + scheme_arg_mismatch("guard-for-prop:custom-write", "not a procedure of arity 3: ", v); } @@ -2255,14 +2394,15 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base { Scheme_Struct_Type *struct_type, *parent_type; int j, depth; + int props_delta = 0, prop_needs_const = 0; parent_type = (Scheme_Struct_Type *)parent; depth = parent_type ? (1 + parent_type->name_pos) : 0; - struct_type =(Scheme_Struct_Type *)scheme_malloc_tagged(sizeof(Scheme_Struct_Type) - + (depth - * sizeof(Scheme_Struct_Type *))); + struct_type = (Scheme_Struct_Type *)scheme_malloc_tagged(sizeof(Scheme_Struct_Type) + + (depth + * sizeof(Scheme_Struct_Type *))); /* defeats optimizer bug in gcc 2.7.2.3: */ depth = parent_type ? (1 + parent_type->name_pos) : 0; @@ -2317,23 +2457,43 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base } /* In principle, we should check for duplicate properties here - to keep the mismatch exceptions in the right order. */ + to keep the mismatch exceptions in the right order. */ if (!uninit_val) uninit_val = scheme_false; struct_type->uninit_val = uninit_val; + if (props) { + Scheme_Object *l; + for (l = props; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) { + if (SAME_OBJ(SCHEME_CAAR(l), proc_property)) { + if (proc_attr) { + scheme_arg_mismatch("make-struct-type", + "given both a prop:procedure property value and a procedure specification: ", + proc_attr); + } + proc_attr = SCHEME_CDR(SCHEME_CAR(l)); + if (SCHEME_INTP(proc_attr)) + prop_needs_const = 1; + props_delta = 1; + break; + } + } + } + if (proc_attr) { - if (SCHEME_INTP(proc_attr) || SCHEME_BIGNUMP(proc_attr)) { + Scheme_Object *pa = proc_attr; + + if (SCHEME_INTP(pa) || SCHEME_BIGNUMP(pa)) { long pos; - if (SCHEME_INTP(proc_attr)) - pos = SCHEME_INT_VAL(proc_attr); + if (SCHEME_INTP(pa)) + pos = SCHEME_INT_VAL(pa); else pos = struct_type->num_slots; /* too big */ if (pos >= struct_type->num_islots) { - scheme_arg_mismatch("make-struct-type", "index for procedure >= initialized-field count: ", proc_attr); + scheme_arg_mismatch("make-struct-type", "index for procedure >= initialized-field count: ", pa); return NULL; } @@ -2341,16 +2501,16 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base if (parent_type->proc_attr) { scheme_arg_mismatch("make-struct-type", "parent type already has procedure specification, new one disallowed: ", - proc_attr); + pa); return NULL; } pos += parent_type->num_slots; - proc_attr = scheme_make_integer(pos); + pa = scheme_make_integer(pos); } } - struct_type->proc_attr = proc_attr; + struct_type->proc_attr = pa; } if ((struct_type->proc_attr && SCHEME_INTP(struct_type->proc_attr)) @@ -2365,12 +2525,9 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base ims = (char *)scheme_malloc_atomic(n); memset(ims, 0, n); - if (SCHEME_INTP(struct_type->proc_attr)) { - p = SCHEME_INT_VAL(struct_type->proc_attr); - if (parent_type) - p -= parent_type->num_slots; - if (p >= 0) - ims[p] = 1; + if (proc_attr && SCHEME_INTP(proc_attr) && !prop_needs_const) { + p = SCHEME_INT_VAL(proc_attr); + ims[p] = 1; } for (l = immutable_pos_list; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { @@ -2396,6 +2553,15 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base ims[p] = 1; } + + if (proc_attr && SCHEME_INTP(proc_attr) && prop_needs_const) { + p = SCHEME_INT_VAL(proc_attr); + if (!ims[p]) { + scheme_arg_mismatch("make-struct-type", + "field is not specified as immutable for a prop:procedure index: ", + proc_attr); + } + } struct_type->immutables = ims; } @@ -2410,7 +2576,7 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base can_override = scheme_make_hash_table(SCHEME_hash_ptr); - num_props = scheme_list_length(props); + num_props = scheme_list_length(props) - props_delta; if ((struct_type->num_props < 0) || (struct_type->num_props + num_props > PROP_USE_HT_COUNT)) { Scheme_Hash_Table *ht; @@ -2438,17 +2604,24 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base for (l = props; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { a = SCHEME_CAR(l); prop = SCHEME_CAR(a); - if (scheme_hash_get(ht, prop)) { - /* Property is already in the superstruct_type */ - if (!scheme_hash_get(can_override, prop)) - break; - /* otherwise we override */ - scheme_hash_set(can_override, prop, NULL); - } - - propv = guard_property(prop, SCHEME_CDR(a), struct_type); - - scheme_hash_set(ht, prop, propv); + if (SAME_OBJ(prop, proc_property)) { + if (props_delta) + props_delta = 0; + else + break; + } else { + if (scheme_hash_get(ht, prop)) { + /* Property is already in the superstruct_type */ + if (!scheme_hash_get(can_override, prop)) + break; + /* otherwise we override */ + scheme_hash_set(can_override, prop, NULL); + } + + propv = guard_property(prop, SCHEME_CDR(a), struct_type); + + scheme_hash_set(ht, prop, propv); + } } struct_type->props = (Scheme_Object **)ht; @@ -2474,25 +2647,32 @@ static Scheme_Object *_make_struct_type(Scheme_Object *basesym, const char *base prop = SCHEME_CAR(a); - /* Check whether already in table: */ - for (j = 0; j < num_props; j++) { - if (SAME_OBJ(SCHEME_CAR(pa[j]), prop)) - break; - } - if (j < num_props) { - /* already there */ - if (!scheme_hash_get(can_override, prop)) - break; - /* overriding it: */ - scheme_hash_set(can_override, prop, NULL); - } else { - num_props++; - } + if (SAME_OBJ(prop, proc_property)) { + if (props_delta) + props_delta = 0; + else + break; + } else { + /* Check whether already in table: */ + for (j = 0; j < num_props; j++) { + if (SAME_OBJ(SCHEME_CAR(pa[j]), prop)) + break; + } + if (j < num_props) { + /* already there */ + if (!scheme_hash_get(can_override, prop)) + break; + /* overriding it: */ + scheme_hash_set(can_override, prop, NULL); + } else { + num_props++; + } - propv = guard_property(prop, SCHEME_CDR(a), struct_type); + propv = guard_property(prop, SCHEME_CDR(a), struct_type); - a = scheme_make_pair(prop, propv); - pa[j] = a; + a = scheme_make_pair(prop, propv); + pa[j] = a; + } } struct_type->num_props = num_props; @@ -2849,7 +3029,7 @@ static Scheme_Object *exn_source_get(int argc, Scheme_Object **argv) static Scheme_Object *check_exn_source_property_value_ok(int argc, Scheme_Object *argv[]) /* This is the guard for prop:exn:srclocs */ { - scheme_check_proc_arity("prop:exn:srclocs-guard", 1, 0, argc, argv); + scheme_check_proc_arity("guard-for-prop:exn:srclocs", 1, 0, argc, argv); return argv[0]; } diff --git a/src/mzscheme/src/syntax.c b/src/mzscheme/src/syntax.c index c6aa528460..847f23f31c 100644 --- a/src/mzscheme/src/syntax.c +++ b/src/mzscheme/src/syntax.c @@ -74,6 +74,8 @@ static Scheme_Object *begin_syntax (Scheme_Object *form, Scheme_Comp_Env *env, S static Scheme_Object *begin_expand (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec); static Scheme_Object *begin0_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec); static Scheme_Object *begin0_expand (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec); +static Scheme_Object *expression_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec); +static Scheme_Object *expression_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec); static Scheme_Object *unquote_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec); static Scheme_Object *unquote_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec); @@ -98,6 +100,7 @@ static Scheme_Object *define_for_syntaxes_execute(Scheme_Object *expr); static Scheme_Object *case_lambda_execute(Scheme_Object *expr); static Scheme_Object *begin0_execute(Scheme_Object *data); static Scheme_Object *apply_values_execute(Scheme_Object *data); +static Scheme_Object *splice_execute(Scheme_Object *data); static Scheme_Object *bangboxenv_execute(Scheme_Object *data); static Scheme_Object *bangboxvalue_execute(Scheme_Object *data); @@ -110,16 +113,19 @@ static Scheme_Object *define_for_syntaxes_optimize(Scheme_Object *expr, Optimize static Scheme_Object *case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info); static Scheme_Object *begin0_optimize(Scheme_Object *data, Optimize_Info *info); static Scheme_Object *apply_values_optimize(Scheme_Object *data, Optimize_Info *info); +static Scheme_Object *splice_optimize(Scheme_Object *data, Optimize_Info *info); static Scheme_Object *begin0_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); static Scheme_Object *set_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); static Scheme_Object *apply_values_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); +static Scheme_Object *splice_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); static Scheme_Object *begin0_shift(Scheme_Object *data, int delta, int after_depth); static Scheme_Object *set_shift(Scheme_Object *data, int delta, int after_depth); static Scheme_Object *ref_shift(Scheme_Object *data, int delta, int after_depth); static Scheme_Object *case_lambda_shift(Scheme_Object *data, int delta, int after_depth); static Scheme_Object *apply_values_shift(Scheme_Object *data, int delta, int after_depth); +static Scheme_Object *splice_shift(Scheme_Object *data, int delta, int after_depth); static Scheme_Object *define_values_resolve(Scheme_Object *data, Resolve_Info *info); static Scheme_Object *ref_resolve(Scheme_Object *data, Resolve_Info *info); @@ -129,6 +135,7 @@ static Scheme_Object *define_for_syntaxes_resolve(Scheme_Object *expr, Resolve_I static Scheme_Object *case_lambda_resolve(Scheme_Object *expr, Resolve_Info *info); static Scheme_Object *begin0_resolve(Scheme_Object *data, Resolve_Info *info); static Scheme_Object *apply_values_resolve(Scheme_Object *data, Resolve_Info *info); +static Scheme_Object *splice_resolve(Scheme_Object *data, Resolve_Info *info); static void define_values_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Scheme_Hash_Table *ht, Scheme_Object **tls, @@ -162,6 +169,10 @@ static void apply_values_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Scheme_Hash_Table *ht, Scheme_Object **tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts); +static void splice_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Scheme_Hash_Table *ht, Scheme_Object **tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts); static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Scheme_Hash_Table *ht, Scheme_Object **tls, int depth, int letlimit, int delta, @@ -179,6 +190,7 @@ static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr); static Scheme_Object *case_lambda_jit(Scheme_Object *expr); static Scheme_Object *begin0_jit(Scheme_Object *data); static Scheme_Object *apply_values_jit(Scheme_Object *data); +static Scheme_Object *splice_jit(Scheme_Object *data); static Scheme_Object *bangboxvalue_jit(Scheme_Object *data); static Scheme_Object *expand_lam(int argc, Scheme_Object **argv); @@ -293,6 +305,12 @@ scheme_init_syntax (Scheme_Env *env) apply_values_execute, apply_values_jit, apply_values_clone, apply_values_shift, 1); + scheme_register_syntax(SPLICE_EXPD, + splice_optimize, + splice_resolve, splice_validate, + splice_execute, splice_jit, + splice_clone, splice_shift, 0); + scheme_register_syntax(BOXENV_EXPD, NULL, NULL, bangboxenv_validate, bangboxenv_execute, NULL, @@ -357,6 +375,11 @@ scheme_init_syntax (Scheme_Env *env) ref_expand), env); + scheme_add_global_keyword("#%expression", + scheme_make_compiled_syntax(expression_syntax, + expression_expand), + env); + scheme_add_global_keyword("case-lambda", scheme_make_compiled_syntax(case_lambda_syntax, case_lambda_expand), @@ -4186,6 +4209,12 @@ do_begin_syntax(char *name, forms = scheme_make_sequence_compilation(body, zero ? -1 : 1); + if (!zero + && SAME_TYPE(SCHEME_TYPE(forms), scheme_sequence_type) + && scheme_is_toplevel(env)) { + return scheme_make_syntax_compiled(SPLICE_EXPD, forms); + } + if (!zero || (NOT_SAME_TYPE(SCHEME_TYPE(forms), scheme_begin0_sequence_type))) return forms; @@ -4291,6 +4320,134 @@ begin0_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *ere return do_begin_expand("begin0", form, env, erec, drec, 1); } +/**********************************************************************/ +/* top-level splicing begin */ +/**********************************************************************/ + +static Scheme_Object *splice_one_expr(void *expr, int argc, Scheme_Object **argv) +{ + return _scheme_eval_linked_expr_multi((Scheme_Object *)expr); +} + +static Scheme_Object *splice_execute(Scheme_Object *data) +{ + Scheme_Sequence *seq = (Scheme_Sequence *)data; + int i, cnt = seq->count - 1; + + for (i = 0; i < cnt; i++) { + (void)_scheme_call_with_prompt_multi(splice_one_expr, seq->array[i]); + } + + return _scheme_eval_linked_expr_multi(seq->array[cnt]); +} + +static Scheme_Object *splice_jit(Scheme_Object *data) +{ + return scheme_jit_expr(data); +} + +static Scheme_Object * +splice_optimize(Scheme_Object *data, Optimize_Info *info) +{ + data = scheme_optimize_expr(data, info); + + if (SCHEME_TYPE(data) != scheme_sequence_type) + return data; + + return scheme_make_syntax_compiled(SPLICE_EXPD, data); +} + +static Scheme_Object * +splice_resolve(Scheme_Object *data, Resolve_Info *rslv) +{ + return scheme_make_syntax_resolved(SPLICE_EXPD, + scheme_resolve_expr(data, rslv)); +} + +static Scheme_Object * +splice_shift(Scheme_Object *data, int delta, int after_depth) +{ + return scheme_make_syntax_compiled(SPLICE_EXPD, + scheme_optimize_shift(data, delta, after_depth)); +} + +static Scheme_Object * +splice_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth) +{ + data = scheme_optimize_clone(dup_ok, data, info, delta, closure_depth); + if (!data) return NULL; + return scheme_make_syntax_compiled(SPLICE_EXPD, data); +} + +static void splice_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Scheme_Hash_Table *ht, Scheme_Object **tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts) +{ + scheme_validate_expr(port, data, stack, ht, tls, + depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, + NULL, 0); +} + +/**********************************************************************/ +/* #%non-module and #%expression */ +/**********************************************************************/ + +static Scheme_Object *check_single(Scheme_Object *form, Scheme_Comp_Env *top_only) +{ + Scheme_Object *rest; + + check_form(form, form); + + rest = SCHEME_STX_CDR(form); + if (!(SCHEME_STX_PAIRP(rest) && SCHEME_STX_NULLP(SCHEME_STX_CDR(rest)))) + scheme_wrong_syntax(NULL, NULL, form, "bad syntax (wrong number of parts)"); + + if (top_only && !scheme_is_toplevel(top_only)) + scheme_wrong_syntax(NULL, NULL, form, "illegal use (not at top-level)"); + + return SCHEME_STX_CAR(rest); +} + +static Scheme_Object * +single_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec, int top_only) +{ + return scheme_compile_expr(check_single(form, top_only ? env: NULL), env, rec, drec); +} + +static Scheme_Object * +single_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec, + int top_only, int simplify) +{ + Scheme_Object *expr, *form_name; + + expr = check_single(form, top_only ? env : NULL); + expr = scheme_expand_expr(expr, env, erec, drec); + + if (simplify && (erec[drec].depth == -1)) { + return expr; + } + + form_name = SCHEME_STX_CAR(form); + + return scheme_datum_to_syntax(icons(form_name, icons(expr, scheme_null)), + form, form, + 0, 2); +} + +static Scheme_Object *expression_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec) +{ + return single_syntax(form, scheme_no_defines(env), rec, drec, 0); +} + +static Scheme_Object *expression_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) +{ + return single_expand(form, scheme_no_defines(env), erec, drec, 0, + !scheme_is_toplevel(env)); +} + + /**********************************************************************/ /* unquote, unquote-splicing */ /**********************************************************************/ diff --git a/src/mzscheme/src/thread.c b/src/mzscheme/src/thread.c index 3947463a69..0f26eaf62b 100644 --- a/src/mzscheme/src/thread.c +++ b/src/mzscheme/src/thread.c @@ -178,6 +178,7 @@ static Scheme_Custodian *last_custodian; static Scheme_Object *scheduled_kills; Scheme_Object *scheme_parameterization_key; +Scheme_Object *scheme_exn_handler_key; Scheme_Object *scheme_break_enabled_key; long scheme_total_gc_time; @@ -754,8 +755,10 @@ void scheme_init_parameterization(Scheme_Env *env) Scheme_Object *v; Scheme_Env *newenv; + REGISTER_SO(scheme_exn_handler_key); REGISTER_SO(scheme_parameterization_key); REGISTER_SO(scheme_break_enabled_key); + scheme_exn_handler_key = scheme_make_symbol("exnh"); scheme_parameterization_key = scheme_make_symbol("paramz"); scheme_break_enabled_key = scheme_make_symbol("break-on?"); @@ -765,6 +768,9 @@ void scheme_init_parameterization(Scheme_Env *env) v = scheme_intern_symbol("#%paramz"); newenv = scheme_primitive_module(v, env); + scheme_add_global_constant("exception-handler-key", + scheme_exn_handler_key, + newenv); scheme_add_global_constant("parameterization-key", scheme_parameterization_key, newenv); @@ -786,6 +792,7 @@ void scheme_init_parameterization(Scheme_Env *env) scheme_finish_primitive_module(newenv); + scheme_protect_primitive_provide(newenv, NULL); } static Scheme_Object *collect_garbage(int c, Scheme_Object *p[]) @@ -2526,11 +2533,6 @@ static Scheme_Object *make_subprocess(Scheme_Object *child_thunk, maybe_recycle_cell = NULL; } - config = scheme_init_error_escape_proc(config); - config = scheme_extend_config(config, MZCONFIG_EXN_HANDLER, - scheme_get_thread_param(config, cells, - MZCONFIG_INIT_EXN_HANDLER)); - child = make_thread(config, cells, break_cell, mgr); /* Use child_thunk name, if any, for the thread name: */ @@ -2884,15 +2886,6 @@ Scheme_Object *scheme_call_as_nested_thread(int argc, Scheme_Object *argv[], voi { Scheme_Config *config; config = scheme_current_config(); - config = scheme_init_error_escape_proc(config); - if (!nested_exn_handler) { - REGISTER_SO(nested_exn_handler); - nested_exn_handler = scheme_make_prim_w_arity(def_nested_exn_handler, - "nested-thread-exception-handler", - 1, 1); - } - config = scheme_extend_config(config, MZCONFIG_EXN_HANDLER, nested_exn_handler); - np->init_config = config; } { @@ -2946,6 +2939,14 @@ Scheme_Object *scheme_call_as_nested_thread(int argc, Scheme_Object *argv[], voi if (p != scheme_main_thread) scheme_weak_suspend_thread(p); + if (!nested_exn_handler) { + REGISTER_SO(nested_exn_handler); + nested_exn_handler = scheme_make_prim_w_arity(def_nested_exn_handler, + "nested-thread-exception-handler", + 1, 1); + } + scheme_set_cont_mark(scheme_exn_handler_key, nested_exn_handler); + /* Call thunk, catch escape: */ np->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { @@ -3969,6 +3970,11 @@ void scheme_weak_resume_thread(Scheme_Thread *r) } } +void scheme_about_to_move_C_stack(void) +{ + wait_until_suspend_ok(); +} + static Scheme_Object * sch_sleep(int argc, Scheme_Object *args[]) { @@ -5533,7 +5539,19 @@ static Scheme_Object *do_param(void *data, int argc, Scheme_Object *argv[]); Scheme_Config *scheme_current_config() { - return (Scheme_Config *)scheme_extract_one_cc_mark(NULL, scheme_parameterization_key); + Scheme_Object *v; + + v = scheme_extract_one_cc_mark(NULL, scheme_parameterization_key); + + if (!SAME_TYPE(scheme_config_type, SCHEME_TYPE(v))) { + /* Someone has grabbed parameterization-key out of #%paramz + and misused it. + Printing an error message requires consulting parameters, + so just escape. */ + scheme_longjmp(scheme_error_buf, 1); + } + + return (Scheme_Config *)v; } static Scheme_Config *do_extend_config(Scheme_Config *c, Scheme_Object *key, Scheme_Object *cell) diff --git a/src/mzscheme/src/type.c b/src/mzscheme/src/type.c index 9d0013bb12..a10e280122 100644 --- a/src/mzscheme/src/type.c +++ b/src/mzscheme/src/type.c @@ -355,12 +355,10 @@ static void FIXUP_cjs(Scheme_Continuation_Jump_State *cjs) static void MARK_stack_state(Scheme_Stack_State *ss) { - gcMARK(ss->barrier_prompt); } static void FIXUP_stack_state(Scheme_Stack_State *ss) { - gcFIXUP(ss->barrier_prompt); } static void MARK_jmpup(Scheme_Jumpup_Buf *buf)