diff --git a/collects/compiler/decompile.rkt b/collects/compiler/decompile.rkt index 645d294e68..1411e6d50f 100644 --- a/collects/compiler/decompile.rkt +++ b/collects/compiler/decompile.rkt @@ -73,7 +73,7 @@ [(? symbol?) (string->symbol (format "_~a" tl))] [(struct global-bucket (name)) (string->symbol (format "_~a" name))] - [(struct module-variable (modidx sym pos phase)) + [(struct module-variable (modidx sym pos phase constantness)) (if (and (module-path-index? modidx) (let-values ([(n b) (module-path-index-split modidx)]) (and (not n) (not b)))) diff --git a/collects/compiler/demodularizer/merge.rkt b/collects/compiler/demodularizer/merge.rkt index aff21cee1b..5b087e257f 100644 --- a/collects/compiler/demodularizer/merge.rkt +++ b/collects/compiler/demodularizer/merge.rkt @@ -59,7 +59,7 @@ (define (compute-new-modvar mv rw) (match mv - [(struct module-variable (modidx sym pos phase)) + [(struct module-variable (modidx sym pos phase constantness)) (match rw [(struct modvar-rewrite (self-modidx provide->toplevel)) (log-debug (format "Rewriting ~a of ~S" pos (mpi->path* modidx))) @@ -76,7 +76,7 @@ [remap empty]) ([tl (in-list mod-toplevels)]) (match tl - [(and mv (struct module-variable (modidx sym pos phase))) + [(and mv (struct module-variable (modidx sym pos phase constantness))) (define rw ((current-get-modvar-rewrite) modidx)) ; XXX We probably don't need to deal with #f phase (unless (or (not phase) (zero? phase)) diff --git a/collects/compiler/demodularizer/nodep.rkt b/collects/compiler/demodularizer/nodep.rkt index cb717a1a2c..60afbaf7ec 100644 --- a/collects/compiler/demodularizer/nodep.rkt +++ b/collects/compiler/demodularizer/nodep.rkt @@ -118,7 +118,7 @@ (define new-prefix prefix) ; Cache all the mpi paths (for-each (match-lambda - [(and mv (struct module-variable (modidx sym pos phase))) + [(and mv (struct module-variable (modidx sym pos phase constantness))) (mpi->path! modidx)] [tl (void)]) diff --git a/collects/compiler/zo-marshal.rkt b/collects/compiler/zo-marshal.rkt index e0a96c0feb..9f39c208ad 100644 --- a/collects/compiler/zo-marshal.rkt +++ b/collects/compiler/zo-marshal.rkt @@ -603,10 +603,14 @@ (out-byte CPT_FALSE out)] [(? void?) (out-byte CPT_VOID out)] - [(struct module-variable (modidx sym pos phase)) + [(struct module-variable (modidx sym pos phase constantness)) (out-byte CPT_MODULE_VAR out) (out-anything modidx out) (out-anything sym out) + (case constantness + [(constant) (out-number -4 out)] + [(fixed) (out-number -5 out)] + [else (void)]) (unless (zero? phase) (out-number -2 out) (out-number phase out)) diff --git a/collects/compiler/zo-parse.rkt b/collects/compiler/zo-parse.rkt index 229ecc9544..13856e48e0 100644 --- a/collects/compiler/zo-parse.rkt +++ b/collects/compiler/zo-parse.rkt @@ -857,11 +857,21 @@ (let ([mod (read-compact cp)] [var (read-compact cp)] [pos (read-compact-number cp)]) - (let-values ([(mod-phase pos) - (if (= pos -2) - (values (read-compact-number cp) (read-compact-number cp)) - (values 0 pos))]) - (make-module-variable mod var pos mod-phase)))] + (let-values ([(flags mod-phase pos) + (let loop ([pos pos]) + (cond + [(pos . < . -3) + (let ([real-pos (read-compact-number cp)]) + (define-values (_ m p) (loop real-pos)) + (values (- (+ pos 3)) m p))] + [(= pos -2) + (values 0 (read-compact-number cp) (read-compact-number cp))] + [else (values 0 0 pos)]))]) + (make-module-variable mod var pos mod-phase + (cond + [(not (zero? (bitwise-and #x1 flags))) 'constant] + [(not (zero? (bitwise-and #x2 flags))) 'fixed] + [else #f]))))] [(local-unbox) (let* ([p* (read-compact-number cp)] [p (if (< p* 0) (- (add1 p*)) p*)] diff --git a/collects/compiler/zo-structs.rkt b/collects/compiler/zo-structs.rkt index 1065cf265c..3fc6b2c11d 100644 --- a/collects/compiler/zo-structs.rkt +++ b/collects/compiler/zo-structs.rkt @@ -43,7 +43,8 @@ (define-form-struct module-variable ([modidx module-path-index?] [sym symbol?] [pos exact-integer?] - [phase exact-nonnegative-integer?])) + [phase exact-nonnegative-integer?] + [constantness (or/c #f 'constant 'fixed)])) ;; Syntax object (define ((alist/c k? v?) l) diff --git a/collects/scribblings/raco/zo-struct.scrbl b/collects/scribblings/raco/zo-struct.scrbl index d6355a72c2..8114c00927 100644 --- a/collects/scribblings/raco/zo-struct.scrbl +++ b/collects/scribblings/raco/zo-struct.scrbl @@ -72,12 +72,19 @@ structures that are produced by @racket[zo-parse] and consumed by ([modidx module-path-index?] [sym symbol?] [pos exact-integer?] - [phase exact-nonnegative-integer?])]{ + [phase exact-nonnegative-integer?] + [constantness (or/c #f 'constant 'fixed)])]{ Represents a top-level variable, and used only in a @racket[prefix]. The @racket[pos] may record the variable's offset within its module, or it can be @racket[-1] if the variable is always located by name. The @racket[phase] indicates the phase level of the definition within - its module.} + its module. The @racket[constantness] field is either @racket['constant] + to indicate that + variable's value is always the same for every instantiation of its module, + @racket['fixed] to indicate + that it doesn't change within a particular instantiation of the module, + or @racket[#f] to indicate that the variable's value + can change even for one particular instantiation of its module.} @defstruct+[(stx zo) ([encoded wrapped?])]{ diff --git a/collects/tests/racket/optimize.rktl b/collects/tests/racket/optimize.rktl index 692d4fc145..0c8168bdc4 100644 --- a/collects/tests/racket/optimize.rktl +++ b/collects/tests/racket/optimize.rktl @@ -6,7 +6,8 @@ (require racket/flonum racket/fixnum racket/unsafe/ops - compiler/zo-parse) + compiler/zo-parse + compiler/zo-marshal) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -2219,5 +2220,65 @@ (test #t (dynamic-require ''check-tail-call-by-jit-for-struct-predicate 'go)) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Test bytecode validator's checking of constantness + +(let () + (define c1 + '(module c1 racket/base + (void ((if (zero? (random 1)) + (lambda (f) (displayln (f))) + #f) + (lambda () + ;; This access of i should raise an exception: + i))) + (define i (random 1)))) + + (define o (open-output-bytes)) + + (parameterize ([current-namespace (make-base-namespace)]) + (write (compile c1) o)) + + (define m (zo-parse (open-input-bytes (get-output-bytes o)))) + + (define o2 (open-output-bytes)) + + ;; construct bytecode that is broken by claiming that `i' is constant + ;; in the too-early reference: + (void + (write-bytes + (zo-marshal + (match m + [(compilation-top max-let-depth prefix code) + (compilation-top max-let-depth prefix + (let ([body (mod-body code)]) + (struct-copy mod code [body + (match body + [(list a b) + (list (match a + [(application rator (list rand)) + (application + rator + (list + (match rand + [(application rator (list rand)) + (application + rator + (list + (struct-copy + lam rand + [body + (match (lam-body rand) + [(toplevel depth pos const? ready?) + (toplevel depth pos #t #t)])])))])))]) + b)])])))])) + o2)) + + ;; validator should reject this at read or eval time (depending on how lazy validation is): + (err/rt-test (parameterize ([current-namespace (make-base-namespace)] + [read-accept-compiled #t]) + (eval (read (open-input-bytes (get-output-bytes o2))))) + exn:fail:read?)) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 776ca6970a..2faafc9d63 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,3 +1,6 @@ +Version 5.3.1.2 +compiler/zo-structs: added a constantness field to module-variable + Version 5.3.1.1 Added arguments to impersonate-prompt-tag and chaperone-prompt-tag to support interposition on non-composable continuation results diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 24428100d2..aa06b8fe50 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,1036 +1,1036 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,52,84,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,14, -0,27,0,31,0,38,0,42,0,49,0,54,0,61,0,66,0,69,0,74,0, -83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149, -0,163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,1, -129,1,162,1,221,1,21,2,99,2,155,2,160,2,180,2,73,3,93,3,145, -3,211,3,100,4,242,4,40,5,51,5,130,5,0,0,92,7,0,0,69,35, -37,109,105,110,45,115,116,120,29,11,11,11,72,112,97,114,97,109,101,116,101, -114,105,122,101,63,97,110,100,66,100,101,102,105,110,101,63,108,101,116,66,117, -110,108,101,115,115,64,99,111,110,100,66,108,101,116,114,101,99,64,108,101,116, -42,62,111,114,64,119,104,101,110,68,104,101,114,101,45,115,116,120,29,11,11, -11,65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11, -29,94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103, -105,110,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120, -73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97, -1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101, -121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8, -240,89,87,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36, -16,20,2,8,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2, -2,2,10,2,2,2,3,2,2,2,9,2,2,2,11,2,2,2,12,2,2, -97,37,11,8,240,89,87,0,0,93,159,2,16,36,37,16,2,2,13,161,2, -2,37,2,13,2,2,2,13,96,11,11,8,240,89,87,0,0,16,0,96,38, -11,8,240,89,87,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2, -14,2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,163,4,195,249, -22,156,4,80,158,39,36,251,22,89,2,18,248,22,104,199,12,249,22,79,2, -19,248,22,106,201,27,248,22,163,4,195,249,22,156,4,80,158,39,36,251,22, -89,2,18,248,22,104,199,249,22,79,2,19,248,22,106,201,12,27,248,22,81, -248,22,163,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87,248, -22,81,194,248,22,80,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248, -22,80,199,249,22,79,2,4,248,22,81,201,11,18,100,10,13,16,6,36,2, -14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,3, -1,8,101,110,118,49,55,48,48,56,16,4,11,11,2,21,3,1,8,101,110, -118,49,55,48,48,57,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20, -14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,80,193,249,22,156,4, -80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,22,89,2,23,248, -22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,11,248,22,81,204, -18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8, -29,16,4,11,11,2,20,3,1,8,101,110,118,49,55,48,49,49,16,4,11, -11,2,21,3,1,8,101,110,118,49,55,48,49,50,248,22,163,4,193,27,248, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,50,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,14,0, +27,0,31,0,38,0,42,0,49,0,54,0,61,0,66,0,69,0,74,0,83, +0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149,0, +163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,1,129, +1,162,1,221,1,21,2,99,2,155,2,160,2,180,2,73,3,93,3,145,3, +211,3,100,4,242,4,40,5,51,5,130,5,0,0,92,7,0,0,69,35,37, +109,105,110,45,115,116,120,29,11,11,11,72,112,97,114,97,109,101,116,101,114, +105,122,101,63,97,110,100,66,100,101,102,105,110,101,63,108,101,116,66,117,110, +108,101,115,115,64,99,111,110,100,66,108,101,116,114,101,99,64,108,101,116,42, +62,111,114,64,119,104,101,110,68,104,101,114,101,45,115,116,120,29,11,11,11, +65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11,29, +94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103,105, +110,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73, +108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1, +20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121, +61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240, +85,88,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16, +20,2,8,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2, +2,10,2,2,2,3,2,2,2,9,2,2,2,11,2,2,2,12,2,2,97, +37,11,8,240,85,88,0,0,93,159,2,16,36,37,16,2,2,13,161,2,2, +37,2,13,2,2,2,13,96,11,11,8,240,85,88,0,0,16,0,96,38,11, +8,240,85,88,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2,14, +2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,163,4,195,249,22, +156,4,80,158,39,36,251,22,89,2,18,248,22,104,199,12,249,22,79,2,19, +248,22,106,201,27,248,22,163,4,195,249,22,156,4,80,158,39,36,251,22,89, +2,18,248,22,104,199,249,22,79,2,19,248,22,106,201,12,27,248,22,81,248, +22,163,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87,248,22, +81,194,248,22,80,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248,22, +80,199,249,22,79,2,4,248,22,81,201,11,18,100,10,13,16,6,36,2,14, +2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1, +8,101,110,118,49,55,50,57,54,16,4,11,11,2,21,3,1,8,101,110,118, +49,55,50,57,55,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20,14, +159,37,36,37,28,248,22,87,248,22,81,194,248,22,80,193,249,22,156,4,80, +158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,22,89,2,23,248,22, +80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,11,248,22,81,204,18, +100,11,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29, +16,4,11,11,2,20,3,1,8,101,110,118,49,55,50,57,57,16,4,11,11, +2,21,3,1,8,101,110,118,49,55,51,48,48,248,22,163,4,193,27,248,22, +163,4,194,249,22,79,248,22,89,248,22,80,196,248,22,81,195,27,248,22,81, +248,22,163,4,23,197,1,249,22,156,4,80,158,39,36,28,248,22,64,248,22, +157,4,248,22,80,23,198,2,27,249,22,2,32,0,88,163,8,36,37,43,11, +9,222,33,40,248,22,163,4,248,22,104,23,200,2,250,22,89,2,24,248,22, +89,249,22,89,248,22,89,248,22,80,23,204,2,250,22,90,2,25,249,22,2, +22,80,23,204,2,248,22,106,23,206,2,249,22,79,248,22,80,23,202,1,249, +22,2,22,104,23,200,1,250,22,90,2,22,249,22,2,32,0,88,163,8,36, +37,47,11,9,222,33,41,248,22,163,4,248,22,80,201,248,22,81,198,27,248, 22,163,4,194,249,22,79,248,22,89,248,22,80,196,248,22,81,195,27,248,22, -81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,36,28,248,22,64,248, -22,157,4,248,22,80,23,198,2,27,249,22,2,32,0,88,163,8,36,37,43, -11,9,222,33,40,248,22,163,4,248,22,104,23,200,2,250,22,89,2,24,248, -22,89,249,22,89,248,22,89,248,22,80,23,204,2,250,22,90,2,25,249,22, -2,22,80,23,204,2,248,22,106,23,206,2,249,22,79,248,22,80,23,202,1, -249,22,2,22,104,23,200,1,250,22,90,2,22,249,22,2,32,0,88,163,8, -36,37,47,11,9,222,33,41,248,22,163,4,248,22,80,201,248,22,81,198,27, -248,22,163,4,194,249,22,79,248,22,89,248,22,80,196,248,22,81,195,27,248, -22,81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,36,250,22,90,2, -24,249,22,2,32,0,88,163,8,36,37,47,11,9,222,33,43,248,22,163,4, -248,22,80,201,248,22,81,198,27,248,22,81,248,22,163,4,196,27,248,22,163, -4,248,22,80,195,249,22,156,4,80,158,40,36,28,248,22,87,195,250,22,90, -2,22,9,248,22,81,199,250,22,89,2,6,248,22,89,248,22,80,199,250,22, -90,2,10,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197, -1,27,249,22,1,22,93,249,22,2,22,163,4,248,22,163,4,248,22,80,199, -248,22,183,4,249,22,156,4,80,158,41,36,251,22,89,1,22,119,105,116,104, -45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,2,26,250, -22,90,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,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,11,2,26,202,250, -22,90,2,22,9,248,22,81,204,27,248,22,81,248,22,163,4,196,28,248,22, -87,193,20,14,159,37,36,37,249,22,156,4,80,158,39,36,27,248,22,163,4, -248,22,80,197,28,249,22,152,9,62,61,62,248,22,157,4,248,22,104,196,250, -22,89,2,22,248,22,89,249,22,89,21,93,2,27,248,22,80,199,250,22,90, -2,8,249,22,89,2,27,249,22,89,248,22,113,203,2,27,248,22,81,202,251, -22,89,2,18,28,249,22,152,9,248,22,157,4,248,22,80,200,64,101,108,115, -101,10,248,22,80,197,250,22,90,2,22,9,248,22,81,200,249,22,79,2,8, -248,22,81,202,99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8, -30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,55,48,51,52,16, -4,11,11,2,21,3,1,8,101,110,118,49,55,48,51,53,18,158,94,10,64, -118,111,105,100,8,48,27,248,22,81,248,22,163,4,196,249,22,156,4,80,158, -39,36,28,248,22,64,248,22,157,4,248,22,80,197,250,22,89,2,28,248,22, -89,248,22,80,199,248,22,104,198,27,248,22,157,4,248,22,80,197,250,22,89, -2,28,248,22,89,248,22,80,197,250,22,90,2,25,248,22,81,199,248,22,81, -202,159,36,20,113,159,36,16,1,11,16,0,20,26,149,9,2,1,2,1,2, -2,9,9,11,11,11,10,36,80,158,36,36,20,113,159,36,16,0,16,0,38, -39,36,16,0,36,16,0,36,11,11,11,16,10,2,3,2,4,2,5,2,6, -2,7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,11,11,11, -11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10, -2,11,2,12,36,46,37,16,0,36,16,1,2,13,37,11,11,11,16,0,16, -0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,5, -11,20,15,16,2,20,14,159,36,36,37,80,158,36,36,36,20,113,159,36,16, -1,2,13,16,1,33,33,10,16,5,2,7,88,163,8,36,37,53,37,9,223, -0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,12,88,163, -8,36,37,53,37,9,223,0,33,35,36,20,113,159,36,16,1,2,13,16,0, -11,16,5,2,4,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, -36,16,1,2,13,16,1,33,37,11,16,5,2,11,88,163,8,36,37,56,37, -9,223,0,33,38,36,20,113,159,36,16,1,2,13,16,1,33,39,11,16,5, -2,6,88,163,8,36,37,58,37,9,223,0,33,42,36,20,113,159,36,16,1, -2,13,16,0,11,16,5,2,9,88,163,8,36,37,53,37,9,223,0,33,44, -36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,10,88,163,8,36,37, -54,37,9,223,0,33,45,36,20,113,159,36,16,1,2,13,16,0,11,16,5, -2,3,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1, -2,13,16,0,11,16,5,2,8,88,163,8,36,37,58,37,9,223,0,33,47, -36,20,113,159,36,16,1,2,13,16,1,33,49,11,16,5,2,5,88,163,8, -36,37,54,37,9,223,0,33,50,36,20,113,159,36,16,1,2,13,16,0,11, -16,0,94,2,16,2,17,93,2,16,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2029); +81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,36,250,22,90,2,24, +249,22,2,32,0,88,163,8,36,37,47,11,9,222,33,43,248,22,163,4,248, +22,80,201,248,22,81,198,27,248,22,81,248,22,163,4,196,27,248,22,163,4, +248,22,80,195,249,22,156,4,80,158,40,36,28,248,22,87,195,250,22,90,2, +22,9,248,22,81,199,250,22,89,2,6,248,22,89,248,22,80,199,250,22,90, +2,10,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197,1, +27,249,22,1,22,93,249,22,2,22,163,4,248,22,163,4,248,22,80,199,248, +22,183,4,249,22,156,4,80,158,41,36,251,22,89,1,22,119,105,116,104,45, +99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,2,26,250,22, +90,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,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,11,2,26,202,250,22, +90,2,22,9,248,22,81,204,27,248,22,81,248,22,163,4,196,28,248,22,87, +193,20,14,159,37,36,37,249,22,156,4,80,158,39,36,27,248,22,163,4,248, +22,80,197,28,249,22,152,9,62,61,62,248,22,157,4,248,22,104,196,250,22, +89,2,22,248,22,89,249,22,89,21,93,2,27,248,22,80,199,250,22,90,2, +8,249,22,89,2,27,249,22,89,248,22,113,203,2,27,248,22,81,202,251,22, +89,2,18,28,249,22,152,9,248,22,157,4,248,22,80,200,64,101,108,115,101, +10,248,22,80,197,250,22,90,2,22,9,248,22,81,200,249,22,79,2,8,248, +22,81,202,99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30, +8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,55,51,50,50,16,4, +11,11,2,21,3,1,8,101,110,118,49,55,51,50,51,18,158,94,10,64,118, +111,105,100,8,48,27,248,22,81,248,22,163,4,196,249,22,156,4,80,158,39, +36,28,248,22,64,248,22,157,4,248,22,80,197,250,22,89,2,28,248,22,89, +248,22,80,199,248,22,104,198,27,248,22,157,4,248,22,80,197,250,22,89,2, +28,248,22,89,248,22,80,197,250,22,90,2,25,248,22,81,199,248,22,81,202, +159,36,20,113,159,36,16,1,11,16,0,20,26,149,9,2,1,2,1,2,2, +9,9,11,11,11,10,36,80,158,36,36,20,113,159,36,16,0,16,0,38,39, +36,16,0,36,16,0,36,11,11,11,16,10,2,3,2,4,2,5,2,6,2, +7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,11,11,11,11, +11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2, +11,2,12,36,46,37,16,0,36,16,1,2,13,37,11,11,11,16,0,16,0, +16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,5,11, +20,15,16,2,20,14,159,36,36,37,80,158,36,36,36,20,113,159,36,16,1, +2,13,16,1,33,33,10,16,5,2,7,88,163,8,36,37,53,37,9,223,0, +33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,12,88,163,8, +36,37,53,37,9,223,0,33,35,36,20,113,159,36,16,1,2,13,16,0,11, +16,5,2,4,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159,36, +16,1,2,13,16,1,33,37,11,16,5,2,11,88,163,8,36,37,56,37,9, +223,0,33,38,36,20,113,159,36,16,1,2,13,16,1,33,39,11,16,5,2, +6,88,163,8,36,37,58,37,9,223,0,33,42,36,20,113,159,36,16,1,2, +13,16,0,11,16,5,2,9,88,163,8,36,37,53,37,9,223,0,33,44,36, +20,113,159,36,16,1,2,13,16,0,11,16,5,2,10,88,163,8,36,37,54, +37,9,223,0,33,45,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2, +3,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1,2, +13,16,0,11,16,5,2,8,88,163,8,36,37,58,37,9,223,0,33,47,36, +20,113,159,36,16,1,2,13,16,1,33,49,11,16,5,2,5,88,163,8,36, +37,54,37,9,223,0,33,50,36,20,113,159,36,16,1,2,13,16,0,11,16, +0,94,2,16,2,17,93,2,16,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2028); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,52,84,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,1,0,0,8,0,21, -0,26,0,43,0,55,0,77,0,106,0,121,0,139,0,151,0,167,0,181,0, -203,0,219,0,236,0,2,1,13,1,19,1,28,1,35,1,42,1,54,1,70, -1,94,1,126,1,144,1,164,1,180,1,198,1,229,1,243,1,248,1,2,2, -19,2,63,2,71,2,76,2,120,2,127,2,137,2,152,2,161,2,163,2,187, -2,208,2,221,2,227,2,16,3,19,3,23,3,32,3,56,3,95,3,109,3, -119,3,130,3,65,4,165,5,27,6,145,6,186,6,209,6,217,6,241,6,6, -7,206,7,236,7,105,11,128,11,145,11,93,13,196,13,210,13,114,14,37,16, -46,16,55,16,69,16,79,16,120,17,223,17,22,18,77,18,164,18,185,18,242, -18,95,19,152,19,62,20,70,20,176,20,239,20,241,20,97,21,157,21,162,21, -29,22,40,22,177,22,187,22,113,24,135,24,144,24,137,25,155,25,169,25,190, -25,202,25,247,25,254,25,16,26,64,26,77,26,139,28,50,29,195,29,180,30, -162,31,169,31,176,31,1,32,84,32,169,32,195,32,68,33,0,0,241,37,0, -0,67,35,37,117,116,105,108,115,72,112,97,116,104,45,115,116,114,105,110,103, -63,64,98,115,98,115,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97, -116,104,71,114,101,114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45, -101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,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,74,45,99,104,101,99,107,45,114,101,108,112,97,116,104,77,45,99,104, -101,99,107,45,99,111,108,108,101,99,116,105,111,110,71,45,99,104,101,99,107, -45,102,97,105,108,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104, -73,102,105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101, -99,116,105,111,110,45,102,105,108,101,45,112,97,116,104,75,117,115,101,114,45, -108,105,110,107,115,45,112,97,116,104,76,117,115,101,114,45,108,105,110,107,115, -45,99,97,99,104,101,1,20,117,115,101,114,45,108,105,110,107,115,45,116,105, -109,101,115,116,97,109,112,70,108,105,110,107,115,45,112,97,116,104,65,113,117, -111,116,101,68,35,37,112,97,114,97,109,122,29,94,2,18,2,19,11,29,94, -2,18,2,19,11,71,108,105,110,107,115,45,99,97,99,104,101,75,108,105,110, -107,115,45,116,105,109,101,115,116,97,109,112,1,22,103,101,116,45,108,105,110, -107,101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109, -97,108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101, -114,101,110,99,101,77,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97, -108,108,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105, -120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108,111,97, -100,47,117,115,101,45,99,111,109,112,105,108,101,100,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,73,101,109,98,101,100,100,101,100,45,108,111,97,100,64,108,111,111, -112,69,101,120,101,99,45,102,105,108,101,76,110,111,114,109,97,108,45,112,97, -116,104,45,99,97,115,101,6,41,41,40,111,114,47,99,32,112,97,116,104,45, -102,111,114,45,115,111,109,101,45,115,121,115,116,101,109,63,32,112,97,116,104, -45,115,116,114,105,110,103,63,41,67,119,105,110,100,111,119,115,6,2,2,92, -49,6,41,41,40,111,114,47,99,32,112,97,116,104,45,115,116,114,105,110,103, -63,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,116,101, -109,63,41,6,4,4,112,97,116,104,5,8,92,92,63,92,82,69,76,92,6, -12,12,112,97,116,104,45,115,116,114,105,110,103,63,68,114,101,108,97,116,105, -118,101,5,0,6,21,21,105,110,118,97,108,105,100,32,114,101,108,97,116,105, -118,101,32,112,97,116,104,6,18,18,40,97,110,121,47,99,32,46,32,45,62, -32,46,32,97,110,121,41,72,99,111,108,108,101,99,116,115,45,100,105,114,65, -101,114,114,111,114,6,42,42,101,114,114,111,114,32,114,101,97,100,105,110,103, -32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,32,102,105,108, -101,32,126,115,58,32,126,97,6,0,0,6,1,1,47,6,6,6,10,32,32, -32,126,97,6,21,21,40,111,114,47,99,32,115,116,114,105,110,103,63,32,98, -121,116,101,115,63,41,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,6,11,11,80,76,84,67,79,76,76,69,67,84,83,69,97,100,100, -111,110,45,100,105,114,6,8,8,99,111,108,108,101,99,116,115,27,20,13,159, -80,159,37,53,37,254,80,159,44,54,37,249,22,33,11,80,159,46,53,37,22, -158,14,10,22,165,14,10,22,166,14,10,248,22,139,6,23,196,2,28,248,22, -137,7,23,194,2,12,86,94,248,22,160,9,23,194,1,27,20,13,159,80,159, -38,53,37,254,80,159,45,54,37,249,22,33,11,80,159,47,53,37,22,158,14, -10,22,165,14,10,22,166,14,10,248,22,139,6,23,197,2,28,248,22,137,7, -23,194,2,12,86,94,248,22,160,9,23,194,1,27,20,13,159,80,159,39,53, -37,254,80,159,46,54,37,249,22,33,11,80,159,48,53,37,22,158,14,10,22, -165,14,10,22,166,14,10,248,22,139,6,23,198,2,28,248,22,137,7,23,194, -2,12,86,94,248,22,160,9,23,194,1,248,80,159,40,8,33,39,197,28,248, -22,87,23,195,2,9,27,248,22,80,23,196,2,27,28,248,22,144,15,23,195, -2,23,194,1,28,248,22,143,15,23,195,2,249,22,145,15,23,196,1,250,80, -159,43,40,39,248,22,160,15,2,33,11,10,250,80,159,41,40,39,248,22,160, -15,2,33,23,197,1,10,28,23,193,2,249,22,79,248,22,147,15,249,22,145, -15,23,198,1,247,22,161,15,27,248,22,81,23,200,1,28,248,22,87,23,194, -2,9,27,248,22,80,23,195,2,27,28,248,22,144,15,23,195,2,23,194,1, -28,248,22,143,15,23,195,2,249,22,145,15,23,196,1,250,80,159,48,40,39, -248,22,160,15,2,33,11,10,250,80,159,46,40,39,248,22,160,15,2,33,23, -197,1,10,28,23,193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1, -247,22,161,15,248,80,159,46,8,32,39,248,22,81,23,199,1,86,94,23,193, -1,248,80,159,44,8,32,39,248,22,81,23,197,1,86,94,23,193,1,27,248, -22,81,23,198,1,28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27, -28,248,22,144,15,23,195,2,23,194,1,28,248,22,143,15,23,195,2,249,22, -145,15,23,196,1,250,80,159,46,40,39,248,22,160,15,2,33,11,10,250,80, -159,44,40,39,248,22,160,15,2,33,23,197,1,10,28,23,193,2,249,22,79, -248,22,147,15,249,22,145,15,23,198,1,247,22,161,15,248,80,159,44,8,32, -39,248,22,81,23,199,1,248,80,159,42,8,32,39,248,22,81,196,28,248,22, -87,23,195,2,9,27,248,22,80,23,196,2,27,28,248,22,144,15,23,195,2, -23,194,1,28,248,22,143,15,23,195,2,249,22,145,15,23,196,1,250,80,159, -43,40,39,248,22,160,15,2,33,11,10,250,80,159,41,40,39,248,22,160,15, -2,33,23,197,1,10,28,23,193,2,249,22,79,248,22,147,15,249,22,145,15, -23,198,1,247,22,161,15,248,80,159,41,8,31,39,248,22,81,23,200,1,248, -80,159,39,8,31,39,248,22,81,197,28,248,22,87,23,195,2,9,27,248,22, -80,23,196,2,27,28,248,22,144,15,23,195,2,23,194,1,28,248,22,143,15, -23,195,2,249,22,145,15,23,196,1,250,80,159,43,40,39,248,22,160,15,2, -33,11,10,250,80,159,41,40,39,248,22,160,15,2,33,23,197,1,10,28,23, -193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247,22,161,15,248, -80,159,41,8,30,39,248,22,81,23,200,1,248,80,159,39,8,30,39,248,22, -81,197,27,248,22,184,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28, -248,22,142,7,23,195,2,27,248,22,142,15,195,28,192,192,248,22,143,15,195, -11,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92, -92,93,34,0,6,35,114,120,34,47,34,0,22,35,114,120,34,91,47,92,92, -93,91,46,32,93,43,91,47,92,92,93,42,36,34,0,19,35,114,120,34,91, -32,46,93,43,40,91,47,92,92,93,42,41,36,34,86,94,28,28,248,22,185, -14,23,195,2,10,28,248,22,184,14,23,195,2,10,28,248,22,142,7,23,195, -2,28,248,22,142,15,23,195,2,10,248,22,143,15,23,195,2,11,12,250,22, -189,9,2,34,2,35,23,197,2,28,28,248,22,185,14,23,195,2,249,22,152, -9,248,22,186,14,23,197,2,2,36,249,22,152,9,247,22,164,8,2,36,27, -28,248,22,142,7,23,196,2,23,195,2,248,22,154,8,248,22,189,14,23,197, -2,28,249,22,177,15,2,62,23,195,2,28,248,22,142,7,195,248,22,128,15, -195,194,27,248,22,181,7,23,195,1,249,22,129,15,248,22,157,8,250,22,185, -15,2,63,28,249,22,177,15,2,64,23,201,2,23,199,1,250,22,185,15,2, -65,23,202,1,2,37,80,159,44,37,38,2,36,28,248,22,142,7,194,248,22, -128,15,194,193,0,28,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63, -93,92,92,92,92,85,78,67,92,92,92,92,34,86,95,28,28,28,248,22,184, -14,23,195,2,10,28,248,22,142,7,23,195,2,28,248,22,142,15,23,195,2, -10,248,22,143,15,23,195,2,11,10,248,22,185,14,23,195,2,12,252,22,189, -9,2,5,2,38,36,23,199,2,23,200,2,28,28,28,248,22,184,14,23,196, -2,10,28,248,22,142,7,23,196,2,28,248,22,142,15,23,196,2,10,248,22, -143,15,23,196,2,11,10,248,22,185,14,23,196,2,12,252,22,189,9,2,5, -2,38,37,23,199,2,23,200,2,27,28,248,22,185,14,23,196,2,248,22,186, -14,23,196,2,247,22,187,14,86,95,28,28,248,22,144,15,23,196,2,10,249, -22,152,9,247,22,187,14,23,195,2,12,253,22,191,9,2,5,6,54,54,112, -97,116,104,32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,32,97, -110,100,32,110,111,116,32,116,104,101,32,112,108,97,116,102,111,114,109,39,115, -32,99,111,110,118,101,110,116,105,111,110,2,39,23,201,2,6,24,24,112,108, -97,116,102,111,114,109,32,99,111,110,118,101,110,116,105,111,110,32,116,121,112, -101,247,22,187,14,28,249,22,152,9,28,248,22,185,14,23,199,2,248,22,186, -14,23,199,2,247,22,187,14,23,195,2,12,253,22,191,9,2,5,6,37,37, -103,105,118,101,110,32,112,97,116,104,115,32,117,115,101,32,100,105,102,102,101, -114,101,110,116,32,99,111,110,118,101,110,116,105,111,110,115,2,39,23,201,2, -6,9,9,114,111,111,116,32,112,97,116,104,23,202,2,27,27,248,22,148,15, -28,248,22,144,15,23,199,2,23,198,1,248,22,145,15,23,199,1,86,94,28, -28,248,22,185,14,23,194,2,10,28,248,22,184,14,23,194,2,10,28,248,22, -142,7,23,194,2,28,248,22,142,15,23,194,2,10,248,22,143,15,23,194,2, -11,12,250,22,189,9,2,34,2,35,23,196,2,28,28,248,22,185,14,23,194, -2,249,22,152,9,248,22,186,14,23,196,2,2,36,249,22,152,9,247,22,164, -8,2,36,27,28,248,22,142,7,23,195,2,23,194,2,248,22,154,8,248,22, -189,14,23,196,2,28,249,22,177,15,2,62,23,195,2,86,94,23,193,1,28, -248,22,142,7,23,195,2,248,22,128,15,23,195,1,193,27,248,22,181,7,23, -195,1,249,22,129,15,248,22,157,8,250,22,185,15,2,63,28,249,22,177,15, -2,64,23,201,2,23,199,1,250,22,185,15,2,65,23,202,1,2,37,80,159, -47,37,38,2,36,28,248,22,142,7,23,194,2,248,22,128,15,23,194,1,192, -27,248,22,189,14,23,195,2,28,249,22,152,9,23,197,2,64,117,110,105,120, -28,249,22,139,8,23,195,1,5,1,47,28,248,22,185,14,198,197,248,22,128, -15,198,249,22,138,15,23,200,1,249,22,129,15,249,22,142,8,248,22,189,14, -23,201,1,37,23,199,1,28,249,22,152,9,23,197,2,2,36,249,22,138,15, -23,200,1,249,22,129,15,28,249,22,177,15,0,27,35,114,120,34,94,92,92, -92,92,92,92,92,92,91,63,93,92,92,92,92,91,97,45,122,93,58,34,23, -199,2,251,22,143,8,2,40,250,22,142,8,23,204,2,40,41,5,1,92,249, -22,142,8,23,203,1,42,28,249,22,177,15,2,67,23,199,2,249,22,143,8, -2,40,249,22,142,8,23,201,1,40,28,249,22,177,15,2,67,23,199,2,249, -22,143,8,2,40,249,22,142,8,23,201,1,40,28,249,22,177,15,0,14,35, -114,120,34,94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,143,8,5, -4,85,78,67,92,249,22,142,8,23,201,1,38,28,249,22,177,15,0,12,35, -114,120,34,94,91,97,45,122,93,58,34,23,199,2,249,22,143,8,250,22,142, -8,23,202,2,36,37,249,22,142,8,23,201,1,38,86,94,23,197,1,12,23, -199,1,12,32,69,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120, -101,99,222,33,72,32,70,88,163,8,36,40,58,11,64,110,101,120,116,222,33, -71,27,248,22,146,15,23,196,2,28,249,22,154,9,23,195,2,23,197,1,11, -28,248,22,142,15,23,194,2,27,249,22,138,15,23,197,1,23,196,1,28,23, -197,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,197,2,86,95,23, -195,1,23,194,1,27,28,23,202,2,27,248,22,146,15,23,199,2,28,249,22, -154,9,23,195,2,23,200,2,11,28,248,22,142,15,23,194,2,250,2,69,23, -205,2,23,206,2,249,22,138,15,23,200,2,23,198,1,250,2,69,23,205,2, -23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22, -184,14,23,196,2,27,249,22,138,15,23,198,2,23,205,2,28,28,248,22,133, -15,193,10,248,22,132,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1, -28,23,203,2,11,27,248,22,146,15,23,200,2,28,249,22,154,9,23,195,2, -23,201,1,11,28,248,22,142,15,23,194,2,250,2,69,23,206,1,23,207,1, -249,22,138,15,23,201,1,23,198,1,250,2,69,205,206,195,192,86,94,23,194, -1,28,23,196,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,197,2, -86,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,146,15,23,199,2, -28,249,22,154,9,23,195,2,23,200,2,11,28,248,22,142,15,23,194,2,250, -2,69,23,204,2,23,205,2,249,22,138,15,23,200,2,23,198,1,250,2,69, -23,204,2,23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27, -28,248,22,184,14,23,196,2,27,249,22,138,15,23,198,2,23,204,2,28,28, -248,22,133,15,193,10,248,22,132,15,193,192,11,11,28,23,193,2,192,86,94, -23,193,1,28,23,202,2,11,27,248,22,146,15,23,200,2,28,249,22,154,9, -23,195,2,23,201,1,11,28,248,22,142,15,23,194,2,250,2,69,23,205,1, -23,206,1,249,22,138,15,23,201,1,23,198,1,250,2,69,204,205,195,192,28, -23,193,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,199,2,86,95, -23,195,1,23,194,1,27,28,23,198,2,251,2,70,23,198,2,23,203,2,23, -201,2,23,202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,184, -14,195,27,249,22,138,15,197,200,28,28,248,22,133,15,193,10,248,22,132,15, -193,192,11,11,28,192,192,28,198,11,251,2,70,198,203,201,202,194,32,73,88, -163,8,36,40,58,11,2,32,222,33,74,28,248,22,87,23,197,2,11,27,248, -22,145,15,248,22,80,23,199,2,27,249,22,138,15,23,196,1,23,197,2,28, -248,22,132,15,23,194,2,250,2,69,198,199,195,86,94,23,193,1,27,248,22, -81,23,200,1,28,248,22,87,23,194,2,11,27,248,22,145,15,248,22,80,23, -196,2,27,249,22,138,15,23,196,1,23,200,2,28,248,22,132,15,23,194,2, -250,2,69,201,202,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22, -87,23,194,2,11,27,248,22,145,15,248,22,80,195,27,249,22,138,15,23,196, -1,202,28,248,22,132,15,193,250,2,69,204,205,195,251,2,73,204,205,206,248, -22,81,199,86,95,28,28,248,22,184,14,23,195,2,10,28,248,22,142,7,23, -195,2,28,248,22,142,15,23,195,2,10,248,22,143,15,23,195,2,11,12,250, -22,189,9,2,6,2,41,23,197,2,28,28,23,195,2,28,28,248,22,184,14, -23,196,2,10,28,248,22,142,7,23,196,2,28,248,22,142,15,23,196,2,10, -248,22,143,15,23,196,2,11,248,22,142,15,23,196,2,11,10,12,250,22,189, -9,2,6,6,45,45,40,111,114,47,99,32,35,102,32,40,97,110,100,47,99, -32,112,97,116,104,45,115,116,114,105,110,103,63,32,114,101,108,97,116,105,118, -101,45,112,97,116,104,63,41,41,23,198,2,28,28,248,22,142,15,23,195,2, -90,159,39,11,89,161,39,36,11,248,22,141,15,23,198,2,249,22,152,9,194, -2,42,11,27,248,22,162,8,6,4,4,80,65,84,72,27,28,23,194,2,249, -80,158,40,41,23,196,1,9,86,94,23,194,1,9,27,28,249,22,152,9,247, -22,164,8,2,36,249,22,79,248,22,129,15,5,1,46,23,196,1,23,194,1, -28,248,22,87,23,194,2,11,27,248,22,145,15,248,22,80,23,196,2,27,249, -22,138,15,23,196,1,23,201,2,28,248,22,132,15,23,194,2,250,2,69,202, -203,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,50,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,126,0,0,0,1,0,0,8,0,21,0, +26,0,43,0,55,0,77,0,106,0,121,0,139,0,151,0,167,0,181,0,203, +0,219,0,236,0,2,1,13,1,19,1,28,1,35,1,42,1,54,1,70,1, +94,1,126,1,144,1,164,1,180,1,198,1,229,1,243,1,4,2,48,2,56, +2,61,2,105,2,112,2,122,2,137,2,146,2,151,2,153,2,177,2,198,2, +211,2,221,2,227,2,16,3,19,3,23,3,32,3,56,3,95,3,109,3,119, +3,130,3,171,3,194,3,202,3,226,3,247,3,191,4,221,4,90,8,113,8, +130,8,78,10,181,10,195,10,99,11,22,13,31,13,40,13,54,13,64,13,105, +14,208,14,7,15,62,15,149,15,170,15,227,15,80,16,137,16,47,17,55,17, +161,17,224,17,226,17,82,18,142,18,147,18,14,19,25,19,162,19,172,19,98, +21,120,21,129,21,122,22,140,22,154,22,175,22,187,22,232,22,239,22,1,23, +49,23,62,23,124,25,35,26,180,26,165,27,147,28,154,28,161,28,23,29,141, +29,241,30,66,31,149,31,234,31,169,32,195,32,68,33,0,0,241,37,0,0, +67,35,37,117,116,105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63, +64,98,115,98,115,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116, +104,71,114,101,114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101, +120,101,99,117,116,97,98,108,101,45,112,97,116,104,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,74,45,99,104,101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101, +99,107,45,99,111,108,108,101,99,116,105,111,110,71,45,99,104,101,99,107,45, +102,97,105,108,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,73, +102,105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101,99, +116,105,111,110,45,102,105,108,101,45,112,97,116,104,75,117,115,101,114,45,108, +105,110,107,115,45,112,97,116,104,76,117,115,101,114,45,108,105,110,107,115,45, +99,97,99,104,101,1,20,117,115,101,114,45,108,105,110,107,115,45,116,105,109, +101,115,116,97,109,112,70,108,105,110,107,115,45,112,97,116,104,65,113,117,111, +116,101,68,35,37,112,97,114,97,109,122,29,94,2,18,2,19,11,29,94,2, +18,2,19,11,71,108,105,110,107,115,45,99,97,99,104,101,75,108,105,110,107, +115,45,116,105,109,101,115,116,97,109,112,1,22,103,101,116,45,108,105,110,107, +101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109,97, +108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101,114, +101,110,99,101,77,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97,108, +108,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120, +75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108,111,97,100, +47,117,115,101,45,99,111,109,112,105,108,101,100,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,73,101,109,98,101,100,100,101,100,45,108,111,97,100,76,110,111,114,109, +97,108,45,112,97,116,104,45,99,97,115,101,6,41,41,40,111,114,47,99,32, +112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,116,101,109,63, +32,112,97,116,104,45,115,116,114,105,110,103,63,41,67,119,105,110,100,111,119, +115,6,2,2,92,49,6,41,41,40,111,114,47,99,32,112,97,116,104,45,115, +116,114,105,110,103,63,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45, +115,121,115,116,101,109,63,41,6,4,4,112,97,116,104,5,8,92,92,63,92, +82,69,76,92,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,68,114, +101,108,97,116,105,118,101,64,108,111,111,112,5,0,6,21,21,105,110,118,97, +108,105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,6,18,18,40, +97,110,121,47,99,32,46,32,45,62,32,46,32,97,110,121,41,72,99,111,108, +108,101,99,116,115,45,100,105,114,69,101,120,101,99,45,102,105,108,101,65,101, +114,114,111,114,6,42,42,101,114,114,111,114,32,114,101,97,100,105,110,103,32, +99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,32,102,105,108,101, +32,126,115,58,32,126,97,6,0,0,6,1,1,47,6,6,6,10,32,32,32, +126,97,6,21,21,40,111,114,47,99,32,115,116,114,105,110,103,63,32,98,121, +116,101,115,63,41,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,6,11,11,80,76,84,67,79,76,76,69,67,84,83,69,97,100,100,111, +110,45,100,105,114,6,8,8,99,111,108,108,101,99,116,115,27,248,22,184,14, +23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,142,7,23,195,2, +27,248,22,142,15,195,28,192,192,248,22,143,15,195,11,0,21,35,114,120,34, +94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,0,6,35,114, +120,34,47,34,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91, +47,92,92,93,42,36,34,0,19,35,114,120,34,91,32,46,93,43,40,91,47, +92,92,93,42,41,36,34,86,94,28,28,248,22,185,14,23,195,2,10,28,248, +22,184,14,23,195,2,10,28,248,22,142,7,23,195,2,28,248,22,142,15,23, +195,2,10,248,22,143,15,23,195,2,11,12,250,22,189,9,2,32,2,33,23, +197,2,28,28,248,22,185,14,23,195,2,249,22,152,9,248,22,186,14,23,197, +2,2,34,249,22,152,9,247,22,164,8,2,34,27,28,248,22,142,7,23,196, +2,23,195,2,248,22,154,8,248,22,189,14,23,197,2,28,249,22,177,15,2, +58,23,195,2,28,248,22,142,7,195,248,22,128,15,195,194,27,248,22,181,7, +23,195,1,249,22,129,15,248,22,157,8,250,22,185,15,2,59,28,249,22,177, +15,2,60,23,201,2,23,199,1,250,22,185,15,2,61,23,202,1,2,35,80, +159,44,37,38,2,34,28,248,22,142,7,194,248,22,128,15,194,193,0,28,35, +114,120,34,94,92,92,92,92,92,92,92,92,91,63,93,92,92,92,92,85,78, +67,92,92,92,92,34,86,95,28,28,28,248,22,184,14,23,195,2,10,28,248, +22,142,7,23,195,2,28,248,22,142,15,23,195,2,10,248,22,143,15,23,195, +2,11,10,248,22,185,14,23,195,2,12,252,22,189,9,2,5,2,36,36,23, +199,2,23,200,2,28,28,28,248,22,184,14,23,196,2,10,28,248,22,142,7, +23,196,2,28,248,22,142,15,23,196,2,10,248,22,143,15,23,196,2,11,10, +248,22,185,14,23,196,2,12,252,22,189,9,2,5,2,36,37,23,199,2,23, +200,2,27,28,248,22,185,14,23,196,2,248,22,186,14,23,196,2,247,22,187, +14,86,95,28,28,248,22,144,15,23,196,2,10,249,22,152,9,247,22,187,14, +23,195,2,12,253,22,191,9,2,5,6,54,54,112,97,116,104,32,105,115,32, +110,111,116,32,99,111,109,112,108,101,116,101,32,97,110,100,32,110,111,116,32, +116,104,101,32,112,108,97,116,102,111,114,109,39,115,32,99,111,110,118,101,110, +116,105,111,110,2,37,23,201,2,6,24,24,112,108,97,116,102,111,114,109,32, +99,111,110,118,101,110,116,105,111,110,32,116,121,112,101,247,22,187,14,28,249, +22,152,9,28,248,22,185,14,23,199,2,248,22,186,14,23,199,2,247,22,187, +14,23,195,2,12,253,22,191,9,2,5,6,37,37,103,105,118,101,110,32,112, +97,116,104,115,32,117,115,101,32,100,105,102,102,101,114,101,110,116,32,99,111, +110,118,101,110,116,105,111,110,115,2,37,23,201,2,6,9,9,114,111,111,116, +32,112,97,116,104,23,202,2,27,27,248,22,148,15,28,248,22,144,15,23,199, +2,23,198,1,248,22,145,15,23,199,1,86,94,28,28,248,22,185,14,23,194, +2,10,28,248,22,184,14,23,194,2,10,28,248,22,142,7,23,194,2,28,248, +22,142,15,23,194,2,10,248,22,143,15,23,194,2,11,12,250,22,189,9,2, +32,2,33,23,196,2,28,28,248,22,185,14,23,194,2,249,22,152,9,248,22, +186,14,23,196,2,2,34,249,22,152,9,247,22,164,8,2,34,27,28,248,22, +142,7,23,195,2,23,194,2,248,22,154,8,248,22,189,14,23,196,2,28,249, +22,177,15,2,58,23,195,2,86,94,23,193,1,28,248,22,142,7,23,195,2, +248,22,128,15,23,195,1,193,27,248,22,181,7,23,195,1,249,22,129,15,248, +22,157,8,250,22,185,15,2,59,28,249,22,177,15,2,60,23,201,2,23,199, +1,250,22,185,15,2,61,23,202,1,2,35,80,159,47,37,38,2,34,28,248, +22,142,7,23,194,2,248,22,128,15,23,194,1,192,27,248,22,189,14,23,195, +2,28,249,22,152,9,23,197,2,64,117,110,105,120,28,249,22,139,8,23,195, +1,5,1,47,28,248,22,185,14,198,197,248,22,128,15,198,249,22,138,15,23, +200,1,249,22,129,15,249,22,142,8,248,22,189,14,23,201,1,37,23,199,1, +28,249,22,152,9,23,197,2,2,34,249,22,138,15,23,200,1,249,22,129,15, +28,249,22,177,15,0,27,35,114,120,34,94,92,92,92,92,92,92,92,92,91, +63,93,92,92,92,92,91,97,45,122,93,58,34,23,199,2,251,22,143,8,2, +38,250,22,142,8,23,204,2,40,41,5,1,92,249,22,142,8,23,203,1,42, +28,249,22,177,15,2,63,23,199,2,249,22,143,8,2,38,249,22,142,8,23, +201,1,40,28,249,22,177,15,2,63,23,199,2,249,22,143,8,2,38,249,22, +142,8,23,201,1,40,28,249,22,177,15,0,14,35,114,120,34,94,92,92,92, +92,92,92,92,92,34,23,199,2,249,22,143,8,5,4,85,78,67,92,249,22, +142,8,23,201,1,38,28,249,22,177,15,0,12,35,114,120,34,94,91,97,45, +122,93,58,34,23,199,2,249,22,143,8,250,22,142,8,23,202,2,36,37,249, +22,142,8,23,201,1,38,86,94,23,197,1,12,23,199,1,12,32,65,88,163, +8,36,39,53,11,70,102,111,117,110,100,45,101,120,101,99,222,33,68,32,66, +88,163,8,36,40,58,11,64,110,101,120,116,222,33,67,27,248,22,146,15,23, +196,2,28,249,22,154,9,23,195,2,23,197,1,11,28,248,22,142,15,23,194, +2,27,249,22,138,15,23,197,1,23,196,1,28,23,197,2,90,159,39,11,89, +161,39,36,11,248,22,141,15,23,197,2,86,95,23,195,1,23,194,1,27,28, +23,202,2,27,248,22,146,15,23,199,2,28,249,22,154,9,23,195,2,23,200, +2,11,28,248,22,142,15,23,194,2,250,2,65,23,205,2,23,206,2,249,22, +138,15,23,200,2,23,198,1,250,2,65,23,205,2,23,206,2,23,196,1,11, +28,23,193,2,192,86,94,23,193,1,27,28,248,22,184,14,23,196,2,27,249, +22,138,15,23,198,2,23,205,2,28,28,248,22,133,15,193,10,248,22,132,15, +193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,203,2,11,27,248, +22,146,15,23,200,2,28,249,22,154,9,23,195,2,23,201,1,11,28,248,22, +142,15,23,194,2,250,2,65,23,206,1,23,207,1,249,22,138,15,23,201,1, +23,198,1,250,2,65,205,206,195,192,86,94,23,194,1,28,23,196,2,90,159, +39,11,89,161,39,36,11,248,22,141,15,23,197,2,86,95,23,195,1,23,194, +1,27,28,23,201,2,27,248,22,146,15,23,199,2,28,249,22,154,9,23,195, +2,23,200,2,11,28,248,22,142,15,23,194,2,250,2,65,23,204,2,23,205, +2,249,22,138,15,23,200,2,23,198,1,250,2,65,23,204,2,23,205,2,23, +196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,184,14,23,196, +2,27,249,22,138,15,23,198,2,23,204,2,28,28,248,22,133,15,193,10,248, +22,132,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2, +11,27,248,22,146,15,23,200,2,28,249,22,154,9,23,195,2,23,201,1,11, +28,248,22,142,15,23,194,2,250,2,65,23,205,1,23,206,1,249,22,138,15, +23,201,1,23,198,1,250,2,65,204,205,195,192,28,23,193,2,90,159,39,11, +89,161,39,36,11,248,22,141,15,23,199,2,86,95,23,195,1,23,194,1,27, +28,23,198,2,251,2,66,23,198,2,23,203,2,23,201,2,23,202,2,11,28, +23,193,2,192,86,94,23,193,1,27,28,248,22,184,14,195,27,249,22,138,15, +197,200,28,28,248,22,133,15,193,10,248,22,132,15,193,192,11,11,28,192,192, +28,198,11,251,2,66,198,203,201,202,194,32,69,88,163,8,36,40,58,11,2, +41,222,33,70,28,248,22,87,23,197,2,11,27,248,22,145,15,248,22,80,23, +199,2,27,249,22,138,15,23,196,1,23,197,2,28,248,22,132,15,23,194,2, +250,2,65,198,199,195,86,94,23,193,1,27,248,22,81,23,200,1,28,248,22, +87,23,194,2,11,27,248,22,145,15,248,22,80,23,196,2,27,249,22,138,15, +23,196,1,23,200,2,28,248,22,132,15,23,194,2,250,2,65,201,202,195,86, +94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11,27,248, +22,145,15,248,22,80,195,27,249,22,138,15,23,196,1,202,28,248,22,132,15, +193,250,2,65,204,205,195,251,2,69,204,205,206,248,22,81,199,86,95,28,28, +248,22,184,14,23,195,2,10,28,248,22,142,7,23,195,2,28,248,22,142,15, +23,195,2,10,248,22,143,15,23,195,2,11,12,250,22,189,9,2,6,2,39, +23,197,2,28,28,23,195,2,28,28,248,22,184,14,23,196,2,10,28,248,22, +142,7,23,196,2,28,248,22,142,15,23,196,2,10,248,22,143,15,23,196,2, +11,248,22,142,15,23,196,2,11,10,12,250,22,189,9,2,6,6,45,45,40, +111,114,47,99,32,35,102,32,40,97,110,100,47,99,32,112,97,116,104,45,115, +116,114,105,110,103,63,32,114,101,108,97,116,105,118,101,45,112,97,116,104,63, +41,41,23,198,2,28,28,248,22,142,15,23,195,2,90,159,39,11,89,161,39, +36,11,248,22,141,15,23,198,2,249,22,152,9,194,2,40,11,27,248,22,162, +8,6,4,4,80,65,84,72,27,28,23,194,2,249,80,158,40,41,23,196,1, +9,86,94,23,194,1,9,27,28,249,22,152,9,247,22,164,8,2,34,249,22, +79,248,22,129,15,5,1,46,23,196,1,23,194,1,28,248,22,87,23,194,2, 11,27,248,22,145,15,248,22,80,23,196,2,27,249,22,138,15,23,196,1,23, -204,2,28,248,22,132,15,23,194,2,250,2,69,205,206,195,86,94,23,193,1, +201,2,28,248,22,132,15,23,194,2,250,2,65,202,203,195,86,94,23,193,1, 27,248,22,81,23,197,1,28,248,22,87,23,194,2,11,27,248,22,145,15,248, -22,80,195,27,249,22,138,15,23,196,1,206,28,248,22,132,15,193,250,2,69, -23,16,23,17,195,251,2,73,23,16,23,17,23,18,248,22,81,199,27,248,22, -145,15,23,196,1,28,248,22,132,15,193,250,2,69,198,199,195,11,250,80,159, -39,40,39,196,197,11,250,80,159,39,40,39,196,11,11,32,78,88,163,8,36, -39,57,11,2,32,222,33,80,0,8,35,114,120,35,34,92,34,34,27,249,22, -173,15,23,197,2,23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,104, -23,195,2,27,27,248,22,113,23,197,1,27,249,22,173,15,23,201,2,23,196, -2,28,23,193,2,86,94,23,194,1,27,248,22,104,23,195,2,27,250,2,78, -23,203,2,23,204,1,248,22,113,23,199,1,28,249,22,139,8,23,196,2,2, -43,249,22,93,23,202,2,194,249,22,79,248,22,129,15,28,249,22,152,9,247, -22,164,8,2,36,250,22,185,15,2,79,23,200,1,2,43,23,197,1,194,86, -95,23,199,1,23,193,1,28,249,22,139,8,23,196,2,2,43,249,22,93,23, -200,2,9,249,22,79,248,22,129,15,28,249,22,152,9,247,22,164,8,2,36, -250,22,185,15,2,79,23,200,1,2,43,23,197,1,9,28,249,22,139,8,23, -196,2,2,43,249,22,93,197,194,86,94,23,196,1,249,22,79,248,22,129,15, -28,249,22,152,9,247,22,164,8,2,36,250,22,185,15,2,79,23,200,1,2, -43,23,197,1,194,86,94,23,193,1,28,249,22,139,8,23,198,2,2,43,249, -22,93,195,9,86,94,23,194,1,249,22,79,248,22,129,15,28,249,22,152,9, -247,22,164,8,2,36,250,22,185,15,2,79,23,202,1,2,43,23,199,1,9, -86,95,28,28,248,22,131,8,194,10,248,22,142,7,194,12,250,22,189,9,2, -7,6,21,21,40,111,114,47,99,32,98,121,116,101,115,63,32,115,116,114,105, -110,103,63,41,196,28,28,248,22,88,195,249,22,4,22,184,14,196,11,12,250, -22,189,9,2,7,6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63, -41,197,250,2,78,197,195,28,248,22,142,7,197,248,22,156,8,197,196,86,94, -28,28,248,22,184,14,194,10,28,248,22,142,7,194,28,248,22,142,15,194,10, -248,22,143,15,194,11,12,250,22,189,9,195,2,41,196,28,248,22,142,15,194, -12,251,22,191,9,196,2,44,2,39,197,86,94,28,28,248,22,184,14,194,10, -28,248,22,142,7,194,28,248,22,142,15,194,10,248,22,143,15,194,11,12,250, -22,189,9,195,2,41,196,28,248,22,142,15,194,12,251,22,191,9,196,2,44, -2,39,197,86,94,86,94,28,28,248,22,184,14,23,195,2,10,28,248,22,142, -7,23,195,2,28,248,22,142,15,23,195,2,10,248,22,143,15,23,195,2,11, -12,250,22,189,9,195,2,41,23,197,2,28,248,22,142,15,23,195,2,12,251, -22,191,9,196,2,44,2,39,23,198,1,249,22,3,88,163,8,36,37,47,11, -9,223,2,33,83,196,28,28,248,22,0,194,249,22,50,195,37,11,12,250,22, -189,9,195,2,45,196,86,94,28,28,248,22,184,14,193,10,28,248,22,142,7, -193,28,248,22,142,15,193,10,248,22,143,15,193,11,12,250,22,189,9,2,11, -2,41,195,28,248,22,142,15,193,12,251,22,191,9,2,11,2,44,2,39,196, -86,95,86,94,86,94,28,28,248,22,184,14,195,10,28,248,22,142,7,195,28, -248,22,142,15,195,10,248,22,143,15,195,11,12,250,22,189,9,2,11,2,41, -197,28,248,22,142,15,195,12,251,22,191,9,2,11,2,44,2,39,198,249,22, -3,32,0,88,163,8,36,37,46,11,9,222,33,86,197,28,28,248,22,0,194, -249,22,50,195,37,11,12,250,22,189,9,2,11,2,45,196,251,80,158,40,46, -197,198,199,11,86,94,28,28,248,22,184,14,193,10,28,248,22,142,7,193,28, -248,22,142,15,193,10,248,22,143,15,193,11,12,250,22,189,9,2,13,2,41, -195,28,248,22,142,15,193,12,251,22,191,9,2,13,2,44,2,39,196,86,96, -86,94,28,28,248,22,184,14,195,10,28,248,22,142,7,195,28,248,22,142,15, -195,10,248,22,143,15,195,11,12,250,22,189,9,2,13,2,41,197,28,248,22, -142,15,195,12,251,22,191,9,2,13,2,44,2,39,198,86,94,86,94,28,28, -248,22,184,14,196,10,28,248,22,142,7,196,28,248,22,142,15,196,10,248,22, -143,15,196,11,12,250,22,189,9,2,13,2,41,198,28,248,22,142,15,196,12, -251,22,191,9,2,13,2,44,2,39,199,249,22,3,32,0,88,163,8,36,37, -46,11,9,222,33,88,198,28,28,248,22,0,194,249,22,50,195,37,11,12,250, -22,189,9,2,13,2,45,196,251,80,158,40,46,197,199,200,198,0,6,45,105, -110,102,46,48,27,248,22,160,15,2,46,27,28,248,22,143,15,23,195,2,193, -20,13,159,80,159,38,53,37,250,80,159,41,54,37,249,22,33,11,80,159,43, -53,37,22,161,15,248,22,160,15,68,111,114,105,103,45,100,105,114,27,248,22, -160,15,2,33,250,80,159,42,40,39,23,196,1,23,198,1,11,28,192,250,22, -138,15,195,6,6,6,99,111,110,102,105,103,6,10,10,108,105,110,107,115,46, -114,107,116,100,11,86,94,27,247,22,148,10,28,249,22,140,10,23,195,2,2, -47,251,22,144,10,23,197,1,2,47,250,22,190,7,2,48,28,23,202,1,80, -159,46,48,38,80,159,46,51,38,248,22,184,11,23,205,1,247,22,29,12,248, -193,247,22,140,2,2,90,86,95,27,247,22,148,10,28,249,22,140,10,23,195, -2,2,47,251,22,144,10,23,197,1,2,47,250,22,190,7,2,48,28,202,80, -159,47,48,38,80,159,47,51,38,248,22,184,11,23,206,1,247,22,29,12,28, -192,28,194,86,94,20,18,159,11,80,158,39,49,247,22,140,2,20,18,159,11, -80,158,39,50,192,86,94,20,18,159,11,80,158,39,55,247,22,140,2,20,18, -159,11,80,158,39,56,192,12,248,194,247,22,140,2,20,20,94,248,22,139,6, -23,194,2,28,248,22,137,7,248,22,139,6,23,195,1,12,248,22,185,9,6, -30,30,101,120,112,101,99,116,101,100,32,97,32,115,105,110,103,108,101,32,83, -45,101,120,112,114,101,115,115,105,111,110,248,22,191,5,193,28,248,22,88,23, -194,2,28,28,249,22,191,3,38,248,22,92,23,196,2,10,249,22,191,3,39, -248,22,92,23,196,2,28,28,248,22,142,7,248,22,80,23,195,2,10,249,22, -152,9,64,114,111,111,116,248,22,80,23,196,2,28,27,248,22,104,194,28,248, -22,184,14,23,194,2,10,28,248,22,142,7,23,194,2,28,248,22,142,15,23, -194,2,10,248,22,143,15,23,194,1,11,27,248,22,87,248,22,106,195,28,192, -192,248,22,186,15,248,22,113,195,11,11,11,11,250,22,158,2,196,197,249,22, -79,197,200,28,28,248,22,87,248,22,106,23,197,2,10,249,22,177,15,248,22, -113,23,198,2,247,22,160,8,27,248,22,147,15,249,22,145,15,248,22,104,23, -200,2,23,198,1,28,248,22,64,248,22,80,23,198,2,86,94,23,196,1,86, -94,28,250,22,160,2,196,11,11,12,250,22,158,2,196,11,9,249,22,164,2, -195,88,163,8,36,38,50,11,9,224,3,2,33,98,27,248,22,67,248,22,80, -23,199,1,250,22,158,2,23,198,2,23,196,2,249,22,79,248,22,131,2,23, -200,1,250,22,160,2,23,203,1,23,201,1,9,12,250,22,158,2,195,196,248, -22,94,198,20,13,159,80,159,37,58,37,88,163,36,37,54,8,240,0,144,0, -0,9,225,1,0,2,33,92,27,250,22,155,15,28,23,197,2,80,159,41,48, -38,80,159,41,51,38,11,32,0,88,163,8,36,36,41,11,9,222,33,93,28, -249,22,129,4,23,195,2,28,23,196,2,80,158,40,50,80,158,40,56,20,13, -159,80,159,38,58,37,20,20,94,88,163,36,37,55,8,240,0,240,24,0,9, -226,2,1,3,0,33,94,23,196,1,20,13,159,80,159,38,53,37,26,29,80, -159,8,31,54,37,249,22,33,11,80,159,8,33,53,37,22,154,14,10,22,155, -14,10,22,156,14,10,22,159,14,10,22,158,14,10,22,160,14,10,22,157,14, -10,22,161,14,10,22,162,14,10,22,163,14,10,22,164,14,10,22,165,14,10, -22,166,14,11,22,152,14,11,27,249,22,182,5,28,196,80,159,41,48,38,80, -159,41,51,38,66,98,105,110,97,114,121,27,250,22,46,22,37,88,163,8,36, -36,44,11,9,223,4,33,95,20,20,94,88,163,36,36,43,11,9,223,4,33, -96,23,197,1,86,94,28,28,248,22,88,23,194,2,249,22,4,32,0,88,163, -8,36,37,45,11,9,222,33,97,23,195,2,11,12,248,22,185,9,6,18,18, -105,108,108,45,102,111,114,109,101,100,32,99,111,110,116,101,110,116,27,247,22, -140,2,27,90,159,39,11,89,161,39,36,11,248,22,141,15,28,201,80,159,46, -48,38,80,159,46,51,38,192,86,96,249,22,3,20,20,94,88,163,8,36,37, -54,11,9,224,2,3,33,99,23,195,1,23,197,1,249,22,164,2,195,88,163, -8,36,38,48,11,9,223,3,33,100,28,197,86,94,20,18,159,11,80,158,42, -49,193,20,18,159,11,80,158,42,50,196,86,94,20,18,159,11,80,158,42,55, -193,20,18,159,11,80,158,42,56,196,193,28,193,80,158,38,49,80,158,38,55, -248,22,9,88,163,8,32,37,8,40,8,240,0,240,94,0,9,224,1,2,33, -101,0,7,35,114,120,34,47,43,34,28,248,22,142,7,23,195,2,27,249,22, -175,15,2,103,196,28,192,28,249,22,191,3,248,22,103,195,248,22,181,3,248, -22,145,7,198,249,22,7,250,22,164,7,199,36,248,22,103,198,197,249,22,7, -250,22,164,7,199,36,248,22,103,198,249,22,79,249,22,164,7,200,248,22,105, -199,199,249,22,7,196,197,90,159,39,11,89,161,39,36,11,248,22,141,15,23, -198,1,86,94,23,195,1,28,249,22,152,9,23,195,2,2,42,249,22,7,195, -199,27,249,22,79,23,197,1,23,201,1,28,248,22,142,7,23,195,2,27,249, -22,175,15,2,103,196,28,192,28,249,22,191,3,248,22,103,195,248,22,181,3, -248,22,145,7,198,249,22,7,250,22,164,7,199,36,248,22,103,198,195,249,22, -7,250,22,164,7,199,36,248,22,103,198,249,22,79,249,22,164,7,200,248,22, -105,199,197,249,22,7,196,195,90,159,39,11,89,161,39,36,11,248,22,141,15, -23,198,1,28,249,22,152,9,194,2,42,249,22,7,195,197,249,80,159,45,59, -39,194,249,22,79,197,199,32,105,88,163,36,43,8,27,11,65,99,108,111,111, -112,222,33,114,32,106,88,163,8,36,37,47,11,2,32,222,33,109,32,107,88, -163,36,37,43,11,69,116,111,45,115,116,114,105,110,103,222,33,108,28,248,22, -184,14,193,248,22,188,14,193,192,28,248,22,87,248,22,81,23,195,2,248,22, -89,248,2,107,248,22,80,23,196,1,250,22,90,248,2,107,248,22,80,23,198, -2,2,50,248,2,106,248,22,81,23,198,1,249,22,190,7,2,51,194,32,111, -88,163,36,38,48,11,66,102,105,108,116,101,114,222,33,112,28,248,22,87,23, -195,2,9,28,248,23,194,2,248,22,80,23,196,2,249,22,79,248,22,80,23, -197,2,249,2,111,23,197,1,248,22,81,23,199,1,249,2,111,194,248,22,81, -196,249,22,190,7,2,51,248,22,134,2,23,196,1,28,248,22,87,23,199,2, -86,94,23,198,1,28,23,199,2,28,196,249,22,138,15,200,198,198,27,28,248, -22,87,23,197,2,2,49,249,22,1,22,165,7,248,2,106,23,199,2,248,23, -198,1,251,22,190,7,6,70,70,99,111,108,108,101,99,116,105,111,110,32,110, -111,116,32,102,111,117,110,100,10,32,32,99,111,108,108,101,99,116,105,111,110, -58,32,126,115,10,32,32,105,110,32,99,111,108,108,101,99,116,105,111,110,32, -100,105,114,101,99,116,111,114,105,101,115,58,126,97,126,97,28,248,22,87,23, -202,1,248,2,107,23,201,1,250,22,165,7,248,2,107,23,204,1,2,50,23, -201,2,249,22,1,22,165,7,249,22,2,32,0,88,163,8,36,37,44,11,9, -222,33,110,249,2,111,22,184,14,23,205,2,28,249,22,5,22,133,2,23,201, -2,250,22,190,7,6,49,49,10,32,32,32,115,117,98,45,99,111,108,108,101, -99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,112,97,114,101,110,116, -32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,23,201,1,249,22,1, -22,165,7,249,22,2,32,0,88,163,8,36,37,45,11,9,222,33,113,249,2, -111,22,133,2,23,208,1,86,95,23,199,1,23,198,1,2,49,27,248,22,80, -23,200,2,27,28,248,22,184,14,23,195,2,249,22,138,15,23,196,1,23,198, -2,248,22,134,2,23,195,1,28,28,248,22,184,14,248,22,80,23,202,2,248, -22,133,15,23,194,2,10,27,250,22,1,22,138,15,23,197,1,23,201,2,28, -28,248,22,87,23,199,2,10,248,22,133,15,23,194,2,28,23,200,2,28,28, -248,22,132,15,249,22,138,15,195,202,10,27,28,248,22,184,14,201,248,22,188, -14,201,200,27,248,22,145,7,23,195,2,27,28,249,22,131,4,23,196,2,40, -28,249,22,148,7,6,4,4,46,114,107,116,249,22,164,7,23,199,2,249,22, -183,3,23,200,2,40,249,22,165,7,250,22,164,7,23,200,1,36,249,22,183, -3,23,201,1,40,6,3,3,46,115,115,86,95,23,195,1,23,194,1,11,11, -28,23,193,2,248,22,132,15,249,22,138,15,198,23,196,1,11,28,199,249,22, -138,15,194,201,192,254,2,105,202,203,204,205,206,248,22,81,23,16,28,23,16, -23,16,199,28,199,249,22,138,15,194,201,192,254,2,105,202,203,204,205,206,248, -22,81,23,16,23,16,254,2,105,201,202,203,204,205,248,22,81,23,15,23,15, -90,159,38,11,89,161,38,36,11,249,80,159,40,59,39,23,199,1,23,200,1, -27,248,22,67,28,248,22,184,14,195,248,22,188,14,195,194,27,247,22,166,15, -27,250,22,93,28,23,197,2,28,247,22,165,15,27,248,80,159,46,57,39,10, -27,250,22,160,2,23,197,2,23,203,2,11,28,23,193,2,192,86,94,23,193, -1,250,22,160,2,23,197,1,11,9,9,9,28,23,197,1,28,80,159,44,51, -38,27,248,80,159,46,57,39,11,27,250,22,160,2,23,197,2,23,203,1,11, -28,23,193,2,192,86,94,23,193,1,250,22,160,2,23,197,1,11,9,86,94, -23,198,1,9,9,247,22,162,15,254,2,105,199,202,203,205,23,16,199,11,86, -95,28,28,248,22,185,14,23,194,2,10,28,248,22,184,14,23,194,2,10,28, -248,22,142,7,23,194,2,28,248,22,142,15,23,194,2,10,248,22,143,15,23, -194,2,11,12,252,22,189,9,23,200,2,2,35,36,23,198,2,23,199,2,28, -28,248,22,142,7,23,195,2,10,248,22,131,8,23,195,2,86,94,23,194,1, -12,252,22,189,9,23,200,2,2,52,37,23,198,2,23,199,1,90,159,39,11, -89,161,39,36,11,248,22,141,15,23,197,2,86,94,23,195,1,86,94,28,192, -12,250,22,128,10,23,201,1,2,53,23,199,1,249,22,7,194,195,90,159,38, -11,89,161,38,36,11,86,95,28,28,248,22,185,14,23,196,2,10,28,248,22, -184,14,23,196,2,10,28,248,22,142,7,23,196,2,28,248,22,142,15,23,196, -2,10,248,22,143,15,23,196,2,11,12,252,22,189,9,2,27,2,35,36,23, -200,2,23,201,2,28,28,248,22,142,7,23,197,2,10,248,22,131,8,23,197, -2,12,252,22,189,9,2,27,2,52,37,23,200,2,23,201,2,90,159,39,11, -89,161,39,36,11,248,22,141,15,23,199,2,86,94,23,195,1,86,94,28,192, -12,250,22,128,10,2,27,2,53,23,201,2,249,22,7,194,195,27,249,22,130, -15,250,22,184,15,0,20,35,114,120,35,34,40,63,58,91,46,93,91,94,46, -93,42,124,41,36,34,248,22,190,14,23,201,1,28,248,22,142,7,23,203,2, -249,22,157,8,23,204,1,8,63,23,202,1,28,248,22,185,14,23,199,2,248, +22,80,23,196,2,27,249,22,138,15,23,196,1,23,204,2,28,248,22,132,15, +23,194,2,250,2,65,205,206,195,86,94,23,193,1,27,248,22,81,23,197,1, +28,248,22,87,23,194,2,11,27,248,22,145,15,248,22,80,195,27,249,22,138, +15,23,196,1,206,28,248,22,132,15,193,250,2,65,23,16,23,17,195,251,2, +69,23,16,23,17,23,18,248,22,81,199,27,248,22,145,15,23,196,1,28,248, +22,132,15,193,250,2,65,198,199,195,11,250,80,159,39,40,39,196,197,11,250, +80,159,39,40,39,196,11,11,32,74,88,163,8,36,39,57,11,2,41,222,33, +76,0,8,35,114,120,35,34,92,34,34,27,249,22,173,15,23,197,2,23,198, +2,28,23,193,2,86,94,23,196,1,27,248,22,104,23,195,2,27,27,248,22, +113,23,197,1,27,249,22,173,15,23,201,2,23,196,2,28,23,193,2,86,94, +23,194,1,27,248,22,104,23,195,2,27,250,2,74,23,203,2,23,204,1,248, +22,113,23,199,1,28,249,22,139,8,23,196,2,2,42,249,22,93,23,202,2, +194,249,22,79,248,22,129,15,28,249,22,152,9,247,22,164,8,2,34,250,22, +185,15,2,75,23,200,1,2,42,23,197,1,194,86,95,23,199,1,23,193,1, +28,249,22,139,8,23,196,2,2,42,249,22,93,23,200,2,9,249,22,79,248, +22,129,15,28,249,22,152,9,247,22,164,8,2,34,250,22,185,15,2,75,23, +200,1,2,42,23,197,1,9,28,249,22,139,8,23,196,2,2,42,249,22,93, +197,194,86,94,23,196,1,249,22,79,248,22,129,15,28,249,22,152,9,247,22, +164,8,2,34,250,22,185,15,2,75,23,200,1,2,42,23,197,1,194,86,94, +23,193,1,28,249,22,139,8,23,198,2,2,42,249,22,93,195,9,86,94,23, +194,1,249,22,79,248,22,129,15,28,249,22,152,9,247,22,164,8,2,34,250, +22,185,15,2,75,23,202,1,2,42,23,199,1,9,86,95,28,28,248,22,131, +8,194,10,248,22,142,7,194,12,250,22,189,9,2,7,6,21,21,40,111,114, +47,99,32,98,121,116,101,115,63,32,115,116,114,105,110,103,63,41,196,28,28, +248,22,88,195,249,22,4,22,184,14,196,11,12,250,22,189,9,2,7,6,14, +14,40,108,105,115,116,111,102,32,112,97,116,104,63,41,197,250,2,74,197,195, +28,248,22,142,7,197,248,22,156,8,197,196,86,94,28,28,248,22,184,14,194, +10,28,248,22,142,7,194,28,248,22,142,15,194,10,248,22,143,15,194,11,12, +250,22,189,9,195,2,39,196,28,248,22,142,15,194,12,251,22,191,9,196,2, +43,2,37,197,86,94,28,28,248,22,184,14,194,10,28,248,22,142,7,194,28, +248,22,142,15,194,10,248,22,143,15,194,11,12,250,22,189,9,195,2,39,196, +28,248,22,142,15,194,12,251,22,191,9,196,2,43,2,37,197,86,94,86,94, +28,28,248,22,184,14,23,195,2,10,28,248,22,142,7,23,195,2,28,248,22, +142,15,23,195,2,10,248,22,143,15,23,195,2,11,12,250,22,189,9,195,2, +39,23,197,2,28,248,22,142,15,23,195,2,12,251,22,191,9,196,2,43,2, +37,23,198,1,249,22,3,88,163,8,36,37,47,11,9,223,2,33,79,196,28, +28,248,22,0,194,249,22,50,195,37,11,12,250,22,189,9,195,2,44,196,86, +94,28,28,248,22,184,14,193,10,28,248,22,142,7,193,28,248,22,142,15,193, +10,248,22,143,15,193,11,12,250,22,189,9,2,11,2,39,195,28,248,22,142, +15,193,12,251,22,191,9,2,11,2,43,2,37,196,86,95,86,94,86,94,28, +28,248,22,184,14,195,10,28,248,22,142,7,195,28,248,22,142,15,195,10,248, +22,143,15,195,11,12,250,22,189,9,2,11,2,39,197,28,248,22,142,15,195, +12,251,22,191,9,2,11,2,43,2,37,198,249,22,3,32,0,88,163,8,36, +37,46,11,9,222,33,82,197,28,28,248,22,0,194,249,22,50,195,37,11,12, +250,22,189,9,2,11,2,44,196,251,80,158,40,46,197,198,199,11,86,94,28, +28,248,22,184,14,193,10,28,248,22,142,7,193,28,248,22,142,15,193,10,248, +22,143,15,193,11,12,250,22,189,9,2,13,2,39,195,28,248,22,142,15,193, +12,251,22,191,9,2,13,2,43,2,37,196,86,96,86,94,28,28,248,22,184, +14,195,10,28,248,22,142,7,195,28,248,22,142,15,195,10,248,22,143,15,195, +11,12,250,22,189,9,2,13,2,39,197,28,248,22,142,15,195,12,251,22,191, +9,2,13,2,43,2,37,198,86,94,86,94,28,28,248,22,184,14,196,10,28, +248,22,142,7,196,28,248,22,142,15,196,10,248,22,143,15,196,11,12,250,22, +189,9,2,13,2,39,198,28,248,22,142,15,196,12,251,22,191,9,2,13,2, +43,2,37,199,249,22,3,32,0,88,163,8,36,37,46,11,9,222,33,84,198, +28,28,248,22,0,194,249,22,50,195,37,11,12,250,22,189,9,2,13,2,44, +196,251,80,158,40,46,197,199,200,198,0,6,45,105,110,102,46,48,27,248,22, +160,15,2,45,27,28,248,22,143,15,23,195,2,193,20,13,159,80,159,38,53, +37,250,80,159,41,54,37,249,22,33,11,80,159,43,53,37,22,161,15,248,22, +160,15,68,111,114,105,103,45,100,105,114,27,248,22,160,15,2,46,250,80,159, +42,40,39,23,196,1,23,198,1,11,28,192,250,22,138,15,195,6,6,6,99, +111,110,102,105,103,6,10,10,108,105,110,107,115,46,114,107,116,100,11,86,94, +27,247,22,148,10,28,249,22,140,10,23,195,2,2,47,251,22,144,10,23,197, +1,2,47,250,22,190,7,2,48,28,23,202,1,80,159,46,48,38,80,159,46, +51,38,248,22,184,11,23,205,1,247,22,29,12,248,193,247,22,140,2,2,86, +86,95,27,247,22,148,10,28,249,22,140,10,23,195,2,2,47,251,22,144,10, +23,197,1,2,47,250,22,190,7,2,48,28,202,80,159,47,48,38,80,159,47, +51,38,248,22,184,11,23,206,1,247,22,29,12,28,192,28,194,86,94,20,18, +159,11,80,158,39,49,247,22,140,2,20,18,159,11,80,158,39,50,192,86,94, +20,18,159,11,80,158,39,55,247,22,140,2,20,18,159,11,80,158,39,56,192, +12,248,194,247,22,140,2,20,20,94,248,22,139,6,23,194,2,28,248,22,137, +7,248,22,139,6,23,195,1,12,248,22,185,9,6,30,30,101,120,112,101,99, +116,101,100,32,97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101,115, +115,105,111,110,248,22,191,5,193,28,248,22,88,23,194,2,28,28,249,22,191, +3,38,248,22,92,23,196,2,10,249,22,191,3,39,248,22,92,23,196,2,28, +28,248,22,142,7,248,22,80,23,195,2,10,249,22,152,9,64,114,111,111,116, +248,22,80,23,196,2,28,27,248,22,104,194,28,248,22,184,14,23,194,2,10, +28,248,22,142,7,23,194,2,28,248,22,142,15,23,194,2,10,248,22,143,15, +23,194,1,11,27,248,22,87,248,22,106,195,28,192,192,248,22,186,15,248,22, +113,195,11,11,11,11,250,22,158,2,196,197,249,22,79,197,200,28,28,248,22, +87,248,22,106,23,197,2,10,249,22,177,15,248,22,113,23,198,2,247,22,160, +8,27,248,22,147,15,249,22,145,15,248,22,104,23,200,2,23,198,1,28,248, +22,64,248,22,80,23,198,2,86,94,23,196,1,86,94,28,250,22,160,2,196, +11,11,12,250,22,158,2,196,11,9,249,22,164,2,195,88,163,8,36,38,50, +11,9,224,3,2,33,94,27,248,22,67,248,22,80,23,199,1,250,22,158,2, +23,198,2,23,196,2,249,22,79,248,22,131,2,23,200,1,250,22,160,2,23, +203,1,23,201,1,9,12,250,22,158,2,195,196,248,22,94,198,20,13,159,80, +159,37,58,37,88,163,36,37,54,8,240,0,144,0,0,9,225,1,0,2,33, +88,27,250,22,155,15,28,23,197,2,80,159,41,48,38,80,159,41,51,38,11, +32,0,88,163,8,36,36,41,11,9,222,33,89,28,249,22,129,4,23,195,2, +28,23,196,2,80,158,40,50,80,158,40,56,20,13,159,80,159,38,58,37,20, +20,94,88,163,36,37,55,8,240,0,240,24,0,9,226,2,1,3,0,33,90, +23,196,1,20,13,159,80,159,38,53,37,26,29,80,159,8,31,54,37,249,22, +33,11,80,159,8,33,53,37,22,154,14,10,22,155,14,10,22,156,14,10,22, +159,14,10,22,158,14,10,22,160,14,10,22,157,14,10,22,161,14,10,22,162, +14,10,22,163,14,10,22,164,14,10,22,165,14,10,22,166,14,11,22,152,14, +11,27,249,22,182,5,28,196,80,159,41,48,38,80,159,41,51,38,66,98,105, +110,97,114,121,27,250,22,46,22,37,88,163,8,36,36,44,11,9,223,4,33, +91,20,20,94,88,163,36,36,43,11,9,223,4,33,92,23,197,1,86,94,28, +28,248,22,88,23,194,2,249,22,4,32,0,88,163,8,36,37,45,11,9,222, +33,93,23,195,2,11,12,248,22,185,9,6,18,18,105,108,108,45,102,111,114, +109,101,100,32,99,111,110,116,101,110,116,27,247,22,140,2,27,90,159,39,11, +89,161,39,36,11,248,22,141,15,28,201,80,159,46,48,38,80,159,46,51,38, +192,86,96,249,22,3,20,20,94,88,163,8,36,37,54,11,9,224,2,3,33, +95,23,195,1,23,197,1,249,22,164,2,195,88,163,8,36,38,48,11,9,223, +3,33,96,28,197,86,94,20,18,159,11,80,158,42,49,193,20,18,159,11,80, +158,42,50,196,86,94,20,18,159,11,80,158,42,55,193,20,18,159,11,80,158, +42,56,196,193,28,193,80,158,38,49,80,158,38,55,248,22,8,88,163,8,32, +37,8,40,8,240,0,240,94,0,9,224,1,2,33,97,0,7,35,114,120,34, +47,43,34,28,248,22,142,7,23,195,2,27,249,22,175,15,2,99,196,28,192, +28,249,22,191,3,248,22,103,195,248,22,181,3,248,22,145,7,198,249,22,7, +250,22,164,7,199,36,248,22,103,198,197,249,22,7,250,22,164,7,199,36,248, +22,103,198,249,22,79,249,22,164,7,200,248,22,105,199,199,249,22,7,196,197, +90,159,39,11,89,161,39,36,11,248,22,141,15,23,198,1,86,94,23,195,1, +28,249,22,152,9,23,195,2,2,40,249,22,7,195,199,27,249,22,79,23,197, +1,23,201,1,28,248,22,142,7,23,195,2,27,249,22,175,15,2,99,196,28, +192,28,249,22,191,3,248,22,103,195,248,22,181,3,248,22,145,7,198,249,22, +7,250,22,164,7,199,36,248,22,103,198,195,249,22,7,250,22,164,7,199,36, +248,22,103,198,249,22,79,249,22,164,7,200,248,22,105,199,197,249,22,7,196, +195,90,159,39,11,89,161,39,36,11,248,22,141,15,23,198,1,28,249,22,152, +9,194,2,40,249,22,7,195,197,249,80,159,45,59,39,194,249,22,79,197,199, +32,101,88,163,36,43,8,27,11,65,99,108,111,111,112,222,33,110,32,102,88, +163,8,36,37,47,11,2,41,222,33,105,32,103,88,163,36,37,43,11,69,116, +111,45,115,116,114,105,110,103,222,33,104,28,248,22,184,14,193,248,22,188,14, +193,192,28,248,22,87,248,22,81,23,195,2,248,22,89,248,2,103,248,22,80, +23,196,1,250,22,90,248,2,103,248,22,80,23,198,2,2,50,248,2,102,248, +22,81,23,198,1,249,22,190,7,2,51,194,32,107,88,163,36,38,48,11,66, +102,105,108,116,101,114,222,33,108,28,248,22,87,23,195,2,9,28,248,23,194, +2,248,22,80,23,196,2,249,22,79,248,22,80,23,197,2,249,2,107,23,197, +1,248,22,81,23,199,1,249,2,107,194,248,22,81,196,249,22,190,7,2,51, +248,22,134,2,23,196,1,28,248,22,87,23,199,2,86,94,23,198,1,28,23, +199,2,28,196,249,22,138,15,200,198,198,27,28,248,22,87,23,197,2,2,49, +249,22,1,22,165,7,248,2,102,23,199,2,248,23,198,1,251,22,190,7,6, +70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102,111,117,110, +100,10,32,32,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32, +105,110,32,99,111,108,108,101,99,116,105,111,110,32,100,105,114,101,99,116,111, +114,105,101,115,58,126,97,126,97,28,248,22,87,23,202,1,248,2,103,23,201, +1,250,22,165,7,248,2,103,23,204,1,2,50,23,201,2,249,22,1,22,165, +7,249,22,2,32,0,88,163,8,36,37,44,11,9,222,33,106,249,2,107,22, +184,14,23,205,2,28,249,22,5,22,133,2,23,201,2,250,22,190,7,6,49, +49,10,32,32,32,115,117,98,45,99,111,108,108,101,99,116,105,111,110,58,32, +126,115,10,32,32,105,110,32,112,97,114,101,110,116,32,100,105,114,101,99,116, +111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,165,7,249,22,2,32, +0,88,163,8,36,37,45,11,9,222,33,109,249,2,107,22,133,2,23,208,1, +86,95,23,199,1,23,198,1,2,49,27,248,22,80,23,200,2,27,28,248,22, +184,14,23,195,2,249,22,138,15,23,196,1,23,198,2,248,22,134,2,23,195, +1,28,28,248,22,184,14,248,22,80,23,202,2,248,22,133,15,23,194,2,10, +27,250,22,1,22,138,15,23,197,1,23,201,2,28,28,248,22,87,23,199,2, +10,248,22,133,15,23,194,2,28,23,200,2,28,28,248,22,132,15,249,22,138, +15,195,202,10,27,28,248,22,184,14,201,248,22,188,14,201,200,27,248,22,145, +7,23,195,2,27,28,249,22,131,4,23,196,2,40,28,249,22,148,7,6,4, +4,46,114,107,116,249,22,164,7,23,199,2,249,22,183,3,23,200,2,40,249, +22,165,7,250,22,164,7,23,200,1,36,249,22,183,3,23,201,1,40,6,3, +3,46,115,115,86,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,132, +15,249,22,138,15,198,23,196,1,11,28,199,249,22,138,15,194,201,192,254,2, +101,202,203,204,205,206,248,22,81,23,16,28,23,16,23,16,199,28,199,249,22, +138,15,194,201,192,254,2,101,202,203,204,205,206,248,22,81,23,16,23,16,254, +2,101,201,202,203,204,205,248,22,81,23,15,23,15,90,159,38,11,89,161,38, +36,11,249,80,159,40,59,39,23,199,1,23,200,1,27,248,22,67,28,248,22, +184,14,195,248,22,188,14,195,194,27,247,22,166,15,27,250,22,93,28,23,197, +2,28,247,22,165,15,27,248,80,159,46,57,39,10,27,250,22,160,2,23,197, +2,23,203,2,11,28,23,193,2,192,86,94,23,193,1,250,22,160,2,23,197, +1,11,9,9,9,28,23,197,1,28,80,159,44,51,38,27,248,80,159,46,57, +39,11,27,250,22,160,2,23,197,2,23,203,1,11,28,23,193,2,192,86,94, +23,193,1,250,22,160,2,23,197,1,11,9,86,94,23,198,1,9,9,247,22, +162,15,254,2,101,199,202,203,205,23,16,199,11,86,95,28,28,248,22,185,14, +23,194,2,10,28,248,22,184,14,23,194,2,10,28,248,22,142,7,23,194,2, +28,248,22,142,15,23,194,2,10,248,22,143,15,23,194,2,11,12,252,22,189, +9,23,200,2,2,33,36,23,198,2,23,199,2,28,28,248,22,142,7,23,195, +2,10,248,22,131,8,23,195,2,86,94,23,194,1,12,252,22,189,9,23,200, +2,2,52,37,23,198,2,23,199,1,90,159,39,11,89,161,39,36,11,248,22, +141,15,23,197,2,86,94,23,195,1,86,94,28,192,12,250,22,128,10,23,201, +1,2,53,23,199,1,249,22,7,194,195,90,159,38,11,89,161,38,36,11,86, +95,28,28,248,22,185,14,23,196,2,10,28,248,22,184,14,23,196,2,10,28, +248,22,142,7,23,196,2,28,248,22,142,15,23,196,2,10,248,22,143,15,23, +196,2,11,12,252,22,189,9,2,27,2,33,36,23,200,2,23,201,2,28,28, +248,22,142,7,23,197,2,10,248,22,131,8,23,197,2,12,252,22,189,9,2, +27,2,52,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,248,22, +141,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,128,10,2,27, +2,53,23,201,2,249,22,7,194,195,27,249,22,130,15,250,22,184,15,0,20, +35,114,120,35,34,40,63,58,91,46,93,91,94,46,93,42,124,41,36,34,248, +22,190,14,23,201,1,28,248,22,142,7,23,203,2,249,22,157,8,23,204,1, +8,63,23,202,1,28,248,22,185,14,23,199,2,248,22,186,14,23,199,1,86, +94,23,198,1,247,22,187,14,28,248,22,184,14,194,249,22,138,15,195,194,192, +90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,185,14,23,196,2,10, +28,248,22,184,14,23,196,2,10,28,248,22,142,7,23,196,2,28,248,22,142, +15,23,196,2,10,248,22,143,15,23,196,2,11,12,252,22,189,9,2,28,2, +33,36,23,200,2,23,201,2,28,28,248,22,142,7,23,197,2,10,248,22,131, +8,23,197,2,12,252,22,189,9,2,28,2,52,37,23,200,2,23,201,2,90, +159,39,11,89,161,39,36,11,248,22,141,15,23,199,2,86,94,23,195,1,86, +94,28,192,12,250,22,128,10,2,28,2,53,23,201,2,249,22,7,194,195,27, +249,22,130,15,249,22,143,8,250,22,185,15,0,9,35,114,120,35,34,91,46, +93,34,248,22,190,14,23,203,1,6,1,1,95,28,248,22,142,7,23,202,2, +249,22,157,8,23,203,1,8,63,23,201,1,28,248,22,185,14,23,199,2,248, 22,186,14,23,199,1,86,94,23,198,1,247,22,187,14,28,248,22,184,14,194, -249,22,138,15,195,194,192,90,159,38,11,89,161,38,36,11,86,95,28,28,248, -22,185,14,23,196,2,10,28,248,22,184,14,23,196,2,10,28,248,22,142,7, -23,196,2,28,248,22,142,15,23,196,2,10,248,22,143,15,23,196,2,11,12, -252,22,189,9,2,28,2,35,36,23,200,2,23,201,2,28,28,248,22,142,7, -23,197,2,10,248,22,131,8,23,197,2,12,252,22,189,9,2,28,2,52,37, -23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,199, -2,86,94,23,195,1,86,94,28,192,12,250,22,128,10,2,28,2,53,23,201, -2,249,22,7,194,195,27,249,22,130,15,249,22,143,8,250,22,185,15,0,9, -35,114,120,35,34,91,46,93,34,248,22,190,14,23,203,1,6,1,1,95,28, -248,22,142,7,23,202,2,249,22,157,8,23,203,1,8,63,23,201,1,28,248, -22,185,14,23,199,2,248,22,186,14,23,199,1,86,94,23,198,1,247,22,187, -14,28,248,22,184,14,194,249,22,138,15,195,194,192,249,247,22,171,5,194,11, -249,247,22,171,5,194,11,27,247,22,165,15,249,80,159,39,41,38,28,23,195, -2,27,248,22,162,8,2,54,28,192,192,2,49,2,49,27,28,23,196,1,250, -22,138,15,248,22,160,15,2,55,247,22,160,8,2,56,11,27,248,80,159,42, -8,30,39,250,22,93,9,248,22,89,248,22,160,15,2,46,9,28,193,249,22, -79,195,194,192,27,247,22,165,15,249,80,159,39,41,38,28,23,195,2,27,248, +249,22,138,15,195,194,192,249,247,22,171,5,194,11,249,247,22,171,5,194,11, +28,248,22,87,23,195,2,9,27,248,22,80,23,196,2,27,28,248,22,144,15, +23,195,2,23,194,1,28,248,22,143,15,23,195,2,249,22,145,15,23,196,1, +250,80,159,43,40,39,248,22,160,15,2,46,11,10,250,80,159,41,40,39,248, +22,160,15,2,46,23,197,1,10,28,23,193,2,249,22,79,248,22,147,15,249, +22,145,15,23,198,1,247,22,161,15,248,80,159,41,8,30,39,248,22,81,23, +200,1,248,80,159,39,8,30,39,248,22,81,197,28,248,22,87,23,195,2,9, +27,248,22,80,23,196,2,27,28,248,22,144,15,23,195,2,23,194,1,28,248, +22,143,15,23,195,2,249,22,145,15,23,196,1,250,80,159,43,40,39,248,22, +160,15,2,46,11,10,250,80,159,41,40,39,248,22,160,15,2,46,23,197,1, +10,28,23,193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247,22, +161,15,248,80,159,41,8,31,39,248,22,81,23,200,1,248,80,159,39,8,31, +39,248,22,81,197,28,248,22,87,23,195,2,9,27,248,22,80,23,196,2,27, +28,248,22,144,15,23,195,2,23,194,1,28,248,22,143,15,23,195,2,249,22, +145,15,23,196,1,250,80,159,43,40,39,248,22,160,15,2,46,11,10,250,80, +159,41,40,39,248,22,160,15,2,46,23,197,1,10,28,23,193,2,249,22,79, +248,22,147,15,249,22,145,15,23,198,1,247,22,161,15,27,248,22,81,23,200, +1,28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,144, +15,23,195,2,23,194,1,28,248,22,143,15,23,195,2,249,22,145,15,23,196, +1,250,80,159,48,40,39,248,22,160,15,2,46,11,10,250,80,159,46,40,39, +248,22,160,15,2,46,23,197,1,10,28,23,193,2,249,22,79,248,22,147,15, +249,22,145,15,23,198,1,247,22,161,15,248,80,159,46,8,32,39,248,22,81, +23,199,1,86,94,23,193,1,248,80,159,44,8,32,39,248,22,81,23,197,1, +86,94,23,193,1,27,248,22,81,23,198,1,28,248,22,87,23,194,2,9,27, +248,22,80,23,195,2,27,28,248,22,144,15,23,195,2,23,194,1,28,248,22, +143,15,23,195,2,249,22,145,15,23,196,1,250,80,159,46,40,39,248,22,160, +15,2,46,11,10,250,80,159,44,40,39,248,22,160,15,2,46,23,197,1,10, +28,23,193,2,249,22,79,248,22,147,15,249,22,145,15,23,198,1,247,22,161, +15,248,80,159,44,8,32,39,248,22,81,23,199,1,248,80,159,42,8,32,39, +248,22,81,196,27,247,22,165,15,249,80,159,39,41,38,28,23,195,2,27,248, 22,162,8,2,54,28,192,192,2,49,2,49,27,28,23,196,1,250,22,138,15, -248,22,160,15,2,55,247,22,160,8,2,56,11,27,248,80,159,42,8,31,39, -250,22,93,23,203,1,248,22,89,248,22,160,15,2,46,9,28,193,249,22,79, -195,194,192,27,247,22,165,15,249,80,159,39,41,38,28,23,195,2,27,248,22, -162,8,2,54,28,192,192,2,49,2,49,27,28,23,196,1,250,22,138,15,248, -22,160,15,2,55,247,22,160,8,2,56,11,27,248,80,159,42,8,32,39,250, -22,93,23,203,1,248,22,89,248,22,160,15,2,46,23,204,1,28,193,249,22, -79,195,194,192,86,94,249,22,130,7,247,22,167,5,195,248,22,154,6,249,22, -135,4,36,249,22,183,3,197,198,27,28,23,197,2,86,95,23,196,1,23,195, -1,23,197,1,86,94,23,197,1,27,248,22,160,15,2,33,27,250,80,159,42, -40,39,23,197,1,11,11,27,248,22,138,4,23,199,1,27,28,23,194,2,23, -194,1,86,94,23,194,1,36,27,248,22,138,4,23,202,1,27,28,23,194,2, -23,194,1,86,94,23,194,1,36,249,22,134,6,23,199,1,20,20,95,88,163, -8,36,36,48,11,9,224,4,2,33,124,23,195,1,23,197,1,27,248,22,183, -5,23,195,1,248,80,159,39,8,33,39,193,159,36,20,113,159,36,16,1,11, -16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10,43, -80,158,36,36,20,113,159,40,16,30,2,2,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,2,16,2,17, -30,2,20,76,102,105,110,100,45,108,105,110,107,115,45,112,97,116,104,33,4, -30,2,21,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, -45,107,101,121,6,30,2,21,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,3,2,22,2,23,2,24,30,2, -20,1,21,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,45, -107,101,121,2,2,25,2,26,2,27,2,28,2,29,2,30,2,31,16,0,37, -39,36,16,0,36,16,13,2,9,2,10,2,8,2,3,2,26,2,24,2,22, -2,17,2,23,2,25,2,15,2,14,2,16,49,11,11,11,16,13,2,13,2, +248,22,160,15,2,55,247,22,160,8,2,56,11,27,248,80,159,42,8,30,39, +250,22,93,9,248,22,89,248,22,160,15,2,45,9,28,193,249,22,79,195,194, +192,27,247,22,165,15,249,80,159,39,41,38,28,23,195,2,27,248,22,162,8, +2,54,28,192,192,2,49,2,49,27,28,23,196,1,250,22,138,15,248,22,160, +15,2,55,247,22,160,8,2,56,11,27,248,80,159,42,8,31,39,250,22,93, +23,203,1,248,22,89,248,22,160,15,2,45,9,28,193,249,22,79,195,194,192, +27,247,22,165,15,249,80,159,39,41,38,28,23,195,2,27,248,22,162,8,2, +54,28,192,192,2,49,2,49,27,28,23,196,1,250,22,138,15,248,22,160,15, +2,55,247,22,160,8,2,56,11,27,248,80,159,42,8,32,39,250,22,93,23, +203,1,248,22,89,248,22,160,15,2,45,23,204,1,28,193,249,22,79,195,194, +192,27,20,13,159,80,159,37,53,37,254,80,159,44,54,37,249,22,33,11,80, +159,46,53,37,22,158,14,10,22,165,14,10,22,166,14,10,248,22,139,6,23, +196,2,28,248,22,137,7,23,194,2,12,86,94,248,22,160,9,23,194,1,27, +20,13,159,80,159,38,53,37,254,80,159,45,54,37,249,22,33,11,80,159,47, +53,37,22,158,14,10,22,165,14,10,22,166,14,10,248,22,139,6,23,197,2, +28,248,22,137,7,23,194,2,12,86,94,248,22,160,9,23,194,1,27,20,13, +159,80,159,39,53,37,254,80,159,46,54,37,249,22,33,11,80,159,48,53,37, +22,158,14,10,22,165,14,10,22,166,14,10,248,22,139,6,23,198,2,28,248, +22,137,7,23,194,2,12,86,94,248,22,160,9,23,194,1,248,80,159,40,8, +33,39,197,86,94,249,22,130,7,247,22,167,5,195,248,22,154,6,249,22,135, +4,36,249,22,183,3,197,198,27,28,23,197,2,86,95,23,196,1,23,195,1, +23,197,1,86,94,23,197,1,27,248,22,160,15,2,46,27,250,80,159,42,40, +39,23,197,1,11,11,27,248,22,138,4,23,199,1,27,28,23,194,2,23,194, +1,86,94,23,194,1,36,27,248,22,138,4,23,202,1,27,28,23,194,2,23, +194,1,86,94,23,194,1,36,249,22,134,6,23,199,1,20,20,95,88,163,8, +36,36,48,11,9,224,4,2,33,124,23,195,1,23,197,1,27,248,22,183,5, +23,195,1,248,80,159,39,8,33,39,193,159,36,20,113,159,36,16,1,11,16, +0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10,43,80, +158,36,36,20,113,159,40,16,30,2,2,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,2,16,2,17,30, +2,20,76,102,105,110,100,45,108,105,110,107,115,45,112,97,116,104,33,4,30, +2,21,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45, +107,101,121,6,30,2,21,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,3,2,22,2,23,2,24,30,2,20, +1,21,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,45,107, +101,121,2,2,25,2,26,2,27,2,28,2,29,2,30,2,31,16,0,37,39, +36,16,0,36,16,13,2,9,2,10,2,8,2,3,2,26,2,24,2,22,2, +17,2,23,2,25,2,15,2,14,2,16,49,11,11,11,16,13,2,13,2,11, +2,31,2,12,2,6,2,30,2,29,2,4,2,28,2,7,2,27,2,2,2, +5,16,13,11,11,11,11,11,11,11,11,11,11,11,11,11,16,13,2,13,2, 11,2,31,2,12,2,6,2,30,2,29,2,4,2,28,2,7,2,27,2,2, -2,5,16,13,11,11,11,11,11,11,11,11,11,11,11,11,11,16,13,2,13, -2,11,2,31,2,12,2,6,2,30,2,29,2,4,2,28,2,7,2,27,2, -2,2,5,49,49,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11, -16,0,16,0,16,0,36,36,16,30,20,15,16,2,88,163,8,36,37,55,16, -4,36,42,38,36,2,32,223,0,33,57,80,159,36,8,33,39,20,15,16,2, -88,163,8,36,37,56,16,4,52,36,37,36,2,32,223,0,33,58,80,159,36, -8,32,39,20,15,16,2,88,163,8,36,37,51,16,2,52,8,240,0,128,0, -0,2,32,223,0,33,59,80,159,36,8,31,39,20,15,16,2,88,163,8,36, -37,51,16,2,52,8,240,0,64,0,0,2,32,223,0,33,60,80,159,36,8, -30,39,20,15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,61,80,159, -36,36,37,20,15,16,2,249,22,144,7,7,92,7,92,80,159,36,37,37,20, -15,16,2,88,163,36,37,54,38,2,4,223,0,33,66,80,159,36,38,37,20, -15,16,2,88,163,36,38,58,38,2,5,223,0,33,68,80,159,36,39,37,20, -15,16,2,20,25,96,2,6,88,163,8,36,39,8,25,8,32,9,223,0,33, -75,88,163,36,38,47,52,9,223,0,33,76,88,163,36,37,46,52,9,223,0, -33,77,80,159,36,40,37,20,15,16,2,27,248,22,169,15,248,22,156,8,27, -28,249,22,152,9,247,22,164,8,2,36,6,1,1,59,6,1,1,58,250,22, -190,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196, -2,23,196,1,88,163,8,36,38,48,11,2,7,223,0,33,81,80,159,36,41, -37,20,15,16,2,32,0,88,163,8,36,38,47,11,2,8,222,33,82,80,159, -36,42,37,20,15,16,2,32,0,88,163,8,36,39,48,11,2,9,222,33,84, -80,159,36,43,37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,10,222, -33,85,80,159,36,44,37,20,15,16,2,88,163,45,39,49,8,128,16,2,11, -223,0,33,87,80,159,36,45,37,20,15,16,2,88,163,45,40,50,8,128,16, -2,13,223,0,33,89,80,159,36,47,37,20,15,16,2,248,22,160,15,70,108, -105,110,107,115,45,102,105,108,101,80,159,36,48,37,20,15,16,2,247,22,140, -2,80,158,36,49,20,15,16,2,2,90,80,158,36,50,20,15,16,2,248,80, -159,37,52,37,88,163,36,36,49,8,240,16,0,6,0,9,223,1,33,91,80, -159,36,51,37,20,15,16,2,247,22,140,2,80,158,36,55,20,15,16,2,2, -90,80,158,36,56,20,15,16,2,88,163,36,37,44,8,240,0,240,94,0,2, -24,223,0,33,102,80,159,36,57,37,20,15,16,2,88,163,36,38,56,8,240, -0,0,128,0,2,25,223,0,33,104,80,159,36,59,37,20,15,16,2,88,163, -36,40,59,8,240,0,128,160,0,2,12,223,0,33,115,80,159,36,46,37,20, -15,16,2,32,0,88,163,36,39,50,11,2,26,222,33,116,80,159,36,8,24, -37,20,15,16,2,32,0,88,163,36,38,53,11,2,27,222,33,117,80,159,36, -8,25,37,20,15,16,2,32,0,88,163,36,38,54,11,2,28,222,33,118,80, -159,36,8,26,37,20,15,16,2,20,27,158,32,0,88,163,36,37,44,11,2, -29,222,33,119,32,0,88,163,36,37,44,11,2,29,222,33,120,80,159,36,8, -27,37,20,15,16,2,20,25,96,2,30,88,163,36,36,53,16,2,8,32,8, -240,0,64,0,0,9,223,0,33,121,88,163,36,37,54,16,2,8,32,8,240, -0,128,0,0,9,223,0,33,122,88,163,36,38,55,16,4,8,32,36,37,36, -9,223,0,33,123,80,159,36,8,28,37,20,15,16,2,88,163,8,36,39,54, -16,4,52,36,38,36,2,31,223,0,33,125,80,159,36,8,29,37,95,29,94, -2,18,68,35,37,107,101,114,110,101,108,11,29,94,2,18,69,35,37,109,105, -110,45,115,116,120,11,2,20,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 10008); +2,5,49,49,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16, +0,16,0,16,0,36,36,16,30,20,15,16,2,32,0,88,163,36,37,45,11, +2,2,222,33,57,80,159,36,36,37,20,15,16,2,249,22,144,7,7,92,7, +92,80,159,36,37,37,20,15,16,2,88,163,36,37,54,38,2,4,223,0,33, +62,80,159,36,38,37,20,15,16,2,88,163,36,38,58,38,2,5,223,0,33, +64,80,159,36,39,37,20,15,16,2,20,25,96,2,6,88,163,8,36,39,8, +25,8,32,9,223,0,33,71,88,163,36,38,47,52,9,223,0,33,72,88,163, +36,37,46,52,9,223,0,33,73,80,159,36,40,37,20,15,16,2,27,248,22, +169,15,248,22,156,8,27,28,249,22,152,9,247,22,164,8,2,34,6,1,1, +59,6,1,1,58,250,22,190,7,6,14,14,40,91,94,126,97,93,42,41,126, +97,40,46,42,41,23,196,2,23,196,1,88,163,8,36,38,48,11,2,7,223, +0,33,77,80,159,36,41,37,20,15,16,2,32,0,88,163,8,36,38,47,11, +2,8,222,33,78,80,159,36,42,37,20,15,16,2,32,0,88,163,8,36,39, +48,11,2,9,222,33,80,80,159,36,43,37,20,15,16,2,32,0,88,163,8, +36,38,46,11,2,10,222,33,81,80,159,36,44,37,20,15,16,2,88,163,45, +39,49,8,128,16,2,11,223,0,33,83,80,159,36,45,37,20,15,16,2,88, +163,45,40,50,8,128,16,2,13,223,0,33,85,80,159,36,47,37,20,15,16, +2,248,22,160,15,70,108,105,110,107,115,45,102,105,108,101,80,159,36,48,37, +20,15,16,2,247,22,140,2,80,158,36,49,20,15,16,2,2,86,80,158,36, +50,20,15,16,2,248,80,159,37,52,37,88,163,36,36,49,8,240,16,0,6, +0,9,223,1,33,87,80,159,36,51,37,20,15,16,2,247,22,140,2,80,158, +36,55,20,15,16,2,2,86,80,158,36,56,20,15,16,2,88,163,36,37,44, +8,240,0,240,94,0,2,24,223,0,33,98,80,159,36,57,37,20,15,16,2, +88,163,36,38,56,8,240,0,0,128,0,2,25,223,0,33,100,80,159,36,59, +37,20,15,16,2,88,163,36,40,59,8,240,0,128,160,0,2,12,223,0,33, +111,80,159,36,46,37,20,15,16,2,32,0,88,163,36,39,50,11,2,26,222, +33,112,80,159,36,8,24,37,20,15,16,2,32,0,88,163,36,38,53,11,2, +27,222,33,113,80,159,36,8,25,37,20,15,16,2,32,0,88,163,36,38,54, +11,2,28,222,33,114,80,159,36,8,26,37,20,15,16,2,20,27,158,32,0, +88,163,36,37,44,11,2,29,222,33,115,32,0,88,163,36,37,44,11,2,29, +222,33,116,80,159,36,8,27,37,20,15,16,2,88,163,8,36,37,51,16,2, +52,8,240,0,64,0,0,2,41,223,0,33,117,80,159,36,8,30,39,20,15, +16,2,88,163,8,36,37,51,16,2,52,8,240,0,128,0,0,2,41,223,0, +33,118,80,159,36,8,31,39,20,15,16,2,88,163,8,36,37,56,16,4,52, +36,37,36,2,41,223,0,33,119,80,159,36,8,32,39,20,15,16,2,20,25, +96,2,30,88,163,36,36,53,16,2,8,32,8,240,0,64,0,0,9,223,0, +33,120,88,163,36,37,54,16,2,8,32,8,240,0,128,0,0,9,223,0,33, +121,88,163,36,38,55,16,4,8,32,36,37,36,9,223,0,33,122,80,159,36, +8,28,37,20,15,16,2,88,163,8,36,37,55,16,4,36,42,38,36,2,41, +223,0,33,123,80,159,36,8,33,39,20,15,16,2,88,163,8,36,39,54,16, +4,52,36,38,36,2,31,223,0,33,125,80,159,36,8,29,37,95,29,94,2, +18,68,35,37,107,101,114,110,101,108,11,29,94,2,18,69,35,37,109,105,110, +45,115,116,120,11,2,20,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 10007); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,52,84,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40, -0,57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0, -179,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23, -115,116,114,117,99,116,58,84,72,45,112,108,97,99,101,45,99,104,97,110,110, -101,108,76,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,77,84, -72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,63,1,20,84,72,45, -112,108,97,99,101,45,99,104,97,110,110,101,108,45,114,101,102,1,21,84,72, -45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,115,101,116,33,79,84, -72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,105,110,1,20,84, -72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,111,117,116,249,80, -158,38,39,195,36,249,80,158,38,39,195,36,249,80,158,38,39,195,37,159,36, -20,113,159,36,16,1,11,16,0,20,26,144,9,2,1,2,1,29,11,11,11, -9,9,11,11,11,10,45,80,158,36,36,20,113,159,36,16,7,2,2,2,3, -2,4,2,5,2,6,2,7,2,8,16,0,37,39,36,16,0,36,16,2,2, -5,2,6,38,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16,5, -11,11,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37,12, -11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36, -36,16,2,20,15,16,6,253,22,135,11,2,3,11,38,36,11,248,22,89,249, -22,79,22,186,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37, -80,159,36,37,37,80,159,36,38,37,80,159,36,39,37,80,159,36,40,37,20, -15,16,3,249,22,7,88,163,36,37,45,44,9,223,2,33,10,88,163,36,37, -45,44,9,223,2,33,11,80,159,36,41,37,80,159,36,42,37,93,29,94,65, -113,117,111,116,101,68,35,37,107,101,114,110,101,108,11,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 502); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,50,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40,0, +57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0,179, +1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23,115, +116,114,117,99,116,58,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101, +108,76,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,77,84,72, +45,112,108,97,99,101,45,99,104,97,110,110,101,108,63,1,20,84,72,45,112, +108,97,99,101,45,99,104,97,110,110,101,108,45,114,101,102,1,21,84,72,45, +112,108,97,99,101,45,99,104,97,110,110,101,108,45,115,101,116,33,79,84,72, +45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,105,110,1,20,84,72, +45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,111,117,116,249,80,158, +38,39,195,36,249,80,158,38,39,195,36,249,80,158,38,39,195,37,159,36,20, +113,159,36,16,1,11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9, +9,11,11,11,10,45,80,158,36,36,20,113,159,36,16,7,2,2,2,3,2, +4,2,5,2,6,2,7,2,8,16,0,37,39,36,16,0,36,16,2,2,5, +2,6,38,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16,5,11, +11,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37,12,11, +11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36, +16,2,20,15,16,6,253,22,135,11,2,3,11,38,36,11,248,22,89,249,22, +79,22,186,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37,80, +159,36,37,37,80,159,36,38,37,80,159,36,39,37,80,159,36,40,37,20,15, +16,3,249,22,7,88,163,36,37,45,44,9,223,2,33,10,88,163,36,37,45, +44,9,223,2,33,11,80,159,36,41,37,80,159,36,42,37,93,29,94,65,113, +117,111,116,101,68,35,37,107,101,114,110,101,108,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 501); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,52,84,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,89,0,0,0,1,0,0,7,0,18, -0,45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175,0, -187,0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,63,1,94,1,101, -1,106,1,111,1,117,1,121,1,139,1,144,1,149,1,158,1,163,1,178,1, -185,1,190,1,194,1,199,1,206,1,217,1,224,1,232,1,241,1,249,1,50, -2,170,2,252,2,62,3,128,3,203,3,22,4,125,4,146,4,249,4,14,5, -108,5,129,5,223,5,244,5,137,13,155,13,206,13,13,14,32,14,46,14,204, -14,217,14,95,15,137,16,160,17,166,17,194,17,207,17,113,18,120,18,174,18, -196,18,216,18,15,19,25,19,39,19,76,19,174,19,176,19,26,20,213,27,10, -28,34,28,58,28,0,0,40,32,0,0,66,35,37,98,111,111,116,70,100,108, -108,45,115,117,102,102,105,120,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,65,113,117,111,116,101,68, -35,37,112,97,114,97,109,122,29,94,2,4,2,5,11,1,20,112,97,114,97, -109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,29,94,2,4,67, -35,37,117,116,105,108,115,11,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,76,114,101,103,105,115,116,101, -114,45,122,111,45,112,97,116,104,1,20,100,101,102,97,117,108,116,45,114,101, -97,100,101,114,45,103,117,97,114,100,67,67,65,67,72,69,45,78,71,45,112, -97,116,104,45,99,97,99,104,101,74,112,97,116,104,45,99,97,99,104,101,45, -103,101,116,75,112,97,116,104,45,99,97,99,104,101,45,115,101,116,33,77,45, -108,111,97,100,105,110,103,45,102,105,108,101,110,97,109,101,79,45,108,111,97, -100,105,110,103,45,112,114,111,109,112,116,45,116,97,103,71,45,112,114,101,118, -45,114,101,108,116,111,75,45,112,114,101,118,45,114,101,108,116,111,45,100,105, -114,1,21,115,112,108,105,116,45,114,101,108,97,116,105,118,101,45,115,116,114, -105,110,103,71,111,114,105,103,45,112,97,114,97,109,122,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,29,94,2,4,2,5,11,64,98,111,111,116,64,115,101,97,108, -5,4,46,114,107,116,63,108,105,98,77,108,111,97,100,47,117,115,101,45,99, -111,109,112,105,108,101,100,64,115,97,109,101,5,3,46,122,111,6,6,6,110, -97,116,105,118,101,64,108,111,111,112,6,12,12,109,111,100,117,108,101,45,112, -97,116,104,63,66,115,117,98,109,111,100,6,2,2,46,46,6,1,1,46,64, -102,105,108,101,66,112,108,97,110,101,116,6,8,8,109,97,105,110,46,114,107, -116,6,4,4,46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80, -159,38,51,38,249,80,159,38,54,39,195,10,90,159,39,11,89,161,39,36,11, -248,22,141,15,197,86,95,23,195,1,23,193,1,28,249,22,173,15,0,11,35, -114,120,34,91,46,93,115,115,36,34,248,22,189,14,23,197,1,249,80,159,41, -58,39,198,2,26,196,27,28,23,195,2,28,249,22,152,9,23,197,2,80,158, -39,52,86,94,23,195,1,80,158,37,53,27,248,22,148,5,23,197,2,27,28, -248,22,77,23,195,2,248,22,80,23,195,1,23,194,1,28,248,22,184,14,23, -194,2,90,159,39,11,89,161,39,36,11,248,22,141,15,23,197,1,86,95,20, -18,159,11,80,158,42,52,199,20,18,159,11,80,158,42,53,192,192,11,11,28, -23,193,2,192,86,94,23,193,1,27,247,22,172,5,28,192,192,247,22,161,15, -28,24,194,2,12,20,13,159,80,159,36,57,37,80,158,36,55,89,161,37,37, -10,249,22,190,4,21,94,2,27,6,19,19,112,108,97,110,101,116,47,114,101, -115,111,108,118,101,114,46,114,107,116,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,12,250,22, -138,15,28,249,22,152,9,23,201,2,2,29,86,94,23,199,1,23,197,1,28, -248,22,142,15,23,200,2,249,22,138,15,23,199,1,23,201,1,249,80,159,43, -42,39,23,199,1,23,201,1,23,200,1,249,80,159,43,43,39,23,198,1,2, -30,250,22,138,15,28,249,22,152,9,23,201,2,2,29,86,94,23,199,1,23, -197,1,28,248,22,142,15,23,200,2,249,22,138,15,23,199,1,23,201,1,249, -80,159,43,42,39,23,199,1,23,201,1,23,200,1,249,80,159,43,43,39,23, -198,1,2,30,252,22,138,15,28,249,22,152,9,23,203,2,2,29,86,94,23, -201,1,23,199,1,28,248,22,142,15,23,202,2,249,22,138,15,23,201,1,23, -203,1,249,80,159,45,42,39,23,201,1,23,203,1,23,202,1,2,31,247,22, -165,8,249,80,159,45,43,39,23,200,1,80,159,45,36,38,252,22,138,15,28, -249,22,152,9,23,203,2,2,29,86,94,23,201,1,23,199,1,28,248,22,142, -15,23,202,2,249,22,138,15,23,201,1,23,203,1,249,80,159,45,42,39,23, -201,1,23,203,1,23,202,1,2,31,247,22,165,8,249,80,159,45,43,39,23, -200,1,80,159,45,36,38,27,252,22,138,15,28,249,22,152,9,23,201,2,2, -29,86,94,23,199,1,23,201,1,28,248,22,142,15,23,200,2,249,22,138,15, -23,203,1,23,201,1,249,80,159,47,42,39,23,203,1,23,201,1,23,203,1, -2,31,247,22,165,8,249,80,159,47,43,39,23,202,1,80,159,47,36,38,27, -250,22,155,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, -22,79,195,194,11,249,22,5,88,163,8,36,37,54,8,129,3,9,226,5,3, -2,6,33,51,196,27,252,22,138,15,28,249,22,152,9,23,201,2,2,29,86, -94,23,199,1,23,201,1,28,248,22,142,15,23,200,2,249,22,138,15,23,203, -1,23,201,1,249,80,159,47,42,39,23,203,1,23,201,1,23,203,1,2,31, -247,22,165,8,249,80,159,47,43,39,23,202,1,80,159,47,36,38,27,250,22, -155,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79, -195,194,11,249,22,5,88,163,8,36,37,54,8,129,3,9,226,5,3,2,6, -33,53,196,27,250,22,138,15,28,249,22,152,9,23,199,2,2,29,86,94,23, -197,1,23,199,1,28,248,22,142,15,23,198,2,249,22,138,15,23,201,1,23, -199,1,249,80,159,45,42,39,23,201,1,23,199,1,23,201,1,249,80,159,45, -43,39,23,200,1,2,30,27,250,22,155,15,196,11,32,0,88,163,8,36,36, -41,11,9,222,11,28,192,249,22,79,195,194,11,249,22,5,88,163,8,36,37, -52,8,128,3,9,226,5,3,2,6,33,55,196,27,250,22,138,15,28,249,22, -152,9,23,199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,142,15,23, -198,2,249,22,138,15,23,201,1,23,199,1,249,80,159,45,42,39,23,201,1, -23,199,1,23,201,1,249,80,159,45,43,39,23,200,1,2,30,27,250,22,155, -15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195, -194,11,249,22,5,88,163,8,36,37,52,8,128,3,9,226,5,3,2,6,33, -57,196,86,95,28,248,80,159,37,40,39,23,195,2,12,250,22,189,9,2,28, -6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,23,197,2,28,28,23, -195,2,28,248,22,64,23,196,2,10,28,248,22,88,23,196,2,28,249,22,129, -4,248,22,92,23,198,2,37,28,28,248,22,64,248,22,80,23,197,2,10,248, -22,150,9,248,22,80,23,197,2,249,22,4,22,64,248,22,81,23,198,2,11, -11,11,10,12,250,22,189,9,2,28,6,71,71,40,111,114,47,99,32,35,102, -32,115,121,109,98,111,108,63,32,40,99,111,110,115,47,99,32,40,111,114,47, -99,32,35,102,32,115,121,109,98,111,108,63,41,32,40,110,111,110,45,101,109, -112,116,121,45,108,105,115,116,111,102,32,115,121,109,98,111,108,63,41,41,41, -23,197,2,27,28,23,196,2,247,22,188,4,11,27,28,23,194,2,250,22,160, -2,80,158,41,41,248,22,134,16,247,22,159,13,11,11,27,28,23,194,2,250, -22,160,2,248,22,81,23,198,2,23,198,2,11,11,28,23,193,2,86,96,23, -197,1,23,195,1,23,194,1,20,13,159,80,159,39,38,37,250,80,159,42,39, -37,249,22,33,11,80,159,44,38,37,22,189,4,248,22,104,196,27,248,22,113, -194,20,13,159,80,159,40,38,37,250,80,159,43,39,37,249,22,33,11,80,159, -45,38,37,22,172,5,28,248,22,184,14,23,197,2,23,196,1,86,94,23,196, -1,247,22,161,15,249,247,22,170,5,248,22,80,196,200,86,94,23,193,1,90, -159,47,11,89,161,37,36,11,28,248,22,144,15,23,209,2,23,208,2,27,247, -22,172,5,28,23,193,2,249,22,145,15,23,211,2,23,195,1,23,209,2,89, -161,39,37,11,248,22,141,15,23,209,1,86,94,23,196,1,89,161,38,40,11, -28,23,209,2,27,248,22,189,14,23,197,2,27,248,22,136,8,23,195,2,28, -28,249,22,131,4,23,195,2,40,249,22,139,8,2,26,249,22,142,8,23,198, -2,249,22,183,3,23,199,2,40,11,249,22,7,23,199,2,248,22,129,15,249, -22,143,8,250,22,142,8,23,202,1,36,249,22,183,3,23,203,1,40,5,3, -46,115,115,249,22,7,23,199,2,11,249,22,7,23,197,2,11,89,161,37,42, -11,28,249,22,152,9,23,199,2,23,197,2,23,193,2,249,22,138,15,23,196, -2,23,199,2,89,161,37,43,11,28,23,198,2,28,249,22,152,9,23,200,2, -23,197,1,23,193,1,86,94,23,193,1,249,22,138,15,23,196,2,23,200,2, -86,94,23,195,1,11,89,161,37,44,11,28,249,22,152,9,23,196,2,68,114, -101,108,97,116,105,118,101,86,94,23,194,1,2,29,23,194,1,89,161,37,45, -11,247,22,163,15,89,161,37,46,11,247,22,164,15,27,250,22,155,15,23,203, -2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249,22, -79,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23,203,2,28,23,194, -2,11,27,250,22,155,15,23,207,2,11,32,0,88,163,8,36,36,41,11,9, -222,11,28,192,249,22,79,23,206,2,194,11,11,27,28,23,195,2,23,195,2, -23,194,2,27,88,163,36,38,51,8,128,3,62,122,111,225,19,13,9,33,47, -27,88,163,36,38,51,8,128,3,66,97,108,116,45,122,111,225,20,14,11,33, -48,27,88,163,36,38,53,8,129,3,9,225,21,15,11,33,49,27,88,163,36, -38,53,8,129,3,9,225,22,16,13,33,50,27,28,23,200,2,23,200,2,248, -22,150,9,23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23, -200,2,248,22,150,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249, -22,5,88,163,36,37,48,8,129,3,9,226,28,23,22,18,33,52,23,217,2, -27,28,23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,131,4, -248,22,81,196,248,22,81,23,205,2,193,11,11,11,11,86,94,23,197,1,11, -28,23,193,2,86,108,23,217,1,23,216,1,23,214,1,23,213,1,23,211,1, -23,210,1,23,209,1,23,208,1,23,201,1,23,200,1,23,199,1,23,198,1, -23,196,1,23,195,1,23,194,1,20,13,159,80,159,8,25,38,37,250,80,159, -8,28,39,37,249,22,33,11,80,159,8,30,38,37,22,189,4,11,20,13,159, -80,159,8,25,38,37,250,80,159,8,28,39,37,249,22,33,11,80,159,8,30, -38,37,22,172,5,28,248,22,184,14,23,216,2,23,215,1,86,94,23,215,1, -247,22,161,15,249,247,22,168,15,248,22,80,195,23,29,86,94,23,193,1,27, -28,23,195,2,28,23,197,1,27,249,22,5,88,163,36,37,48,8,129,3,9, -226,29,24,23,20,33,54,23,218,2,27,28,23,204,2,11,193,28,192,192,28, -193,28,203,28,249,22,131,4,248,22,81,196,248,22,81,206,193,11,11,11,11, -86,94,23,197,1,11,28,23,193,2,86,105,23,218,1,23,217,1,23,215,1, -23,214,1,23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1, -23,196,1,23,195,1,20,13,159,80,159,8,26,38,37,250,80,159,8,29,39, -37,249,22,33,11,80,159,8,31,38,37,22,189,4,23,215,1,20,13,159,80, -159,8,26,38,37,250,80,159,8,29,39,37,249,22,33,11,80,159,8,31,38, -37,22,172,5,28,248,22,184,14,23,217,2,23,216,1,86,94,23,216,1,247, -22,161,15,249,247,22,168,15,248,22,80,195,23,30,86,94,23,193,1,27,28, -23,197,2,28,23,201,1,27,249,22,5,20,20,94,88,163,36,37,48,8,128, -3,9,226,30,25,24,20,33,56,23,213,1,23,219,2,27,28,23,204,2,11, -193,28,192,192,28,193,28,23,204,2,28,249,22,131,4,248,22,81,196,248,22, -81,23,207,2,193,11,11,11,86,94,23,210,1,11,86,94,23,201,1,11,28, -23,193,2,86,102,23,216,1,23,215,1,23,213,1,23,212,1,23,211,1,23, -202,1,23,200,1,23,197,1,23,196,1,86,94,27,248,22,80,194,28,23,219, -2,250,22,158,2,248,22,81,23,223,1,23,223,1,250,22,89,23,199,1,11, -23,221,2,12,20,13,159,80,159,8,27,38,37,250,80,159,8,30,39,37,249, -22,33,11,80,159,8,32,38,37,22,189,4,11,20,13,159,80,159,8,27,38, -37,250,80,159,8,30,39,37,249,22,33,11,80,159,8,32,38,37,22,172,5, -28,248,22,184,14,23,218,2,23,217,1,86,94,23,217,1,247,22,161,15,249, -247,22,170,5,248,22,80,195,23,31,86,94,23,193,1,27,28,23,197,1,28, -23,201,1,27,249,22,5,20,20,95,88,163,36,37,48,8,128,3,9,226,31, -26,25,22,33,58,23,215,1,23,219,1,23,220,1,27,28,23,205,2,11,193, -28,192,192,28,193,28,204,28,249,22,131,4,248,22,81,196,248,22,81,23,15, -193,11,11,11,86,96,23,217,1,23,216,1,23,212,1,11,86,94,23,201,1, -11,28,23,193,2,86,95,23,213,1,23,198,1,86,94,27,248,22,80,194,28, -23,220,2,250,22,158,2,248,22,81,23,224,32,0,0,0,1,23,224,32,0, -0,0,1,250,22,89,23,199,1,23,221,2,23,222,2,12,20,13,159,80,159, -8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159,8,33,38,37, -22,189,4,23,217,1,20,13,159,80,159,8,28,38,37,250,80,159,8,31,39, -37,249,22,33,11,80,159,8,33,38,37,22,172,5,28,248,22,184,14,23,219, -2,23,218,1,86,94,23,218,1,247,22,161,15,249,247,22,170,5,248,22,80, -195,23,32,86,94,23,193,1,28,28,248,22,77,23,224,32,0,0,0,2,248, -22,80,23,224,32,0,0,0,2,10,27,28,23,199,2,86,94,23,215,1,23, -214,1,86,94,23,214,1,23,215,1,28,28,248,22,77,23,224,33,0,0,0, -2,248,22,150,9,248,22,132,15,23,195,2,11,12,20,13,159,80,159,8,29, -38,37,250,80,159,8,32,39,37,249,22,33,11,80,159,8,34,38,37,22,189, -4,28,23,34,28,23,202,1,11,195,86,94,23,202,1,11,20,13,159,80,159, -8,29,38,37,250,80,159,8,32,39,37,249,22,33,11,80,159,8,34,38,37, -22,172,5,28,248,22,184,14,23,220,2,23,219,1,86,94,23,219,1,247,22, -161,15,249,247,22,170,5,194,23,33,12,28,193,250,22,158,2,248,22,81,197, -195,250,22,89,200,201,202,12,27,249,22,172,8,80,159,39,47,38,249,22,190, -3,248,22,186,3,248,22,173,2,200,8,128,8,27,28,193,248,22,176,2,194, -11,28,192,27,249,22,102,198,195,28,192,248,22,81,193,11,11,27,249,22,190, -3,248,22,186,3,248,22,173,2,198,8,128,8,27,249,22,172,8,80,159,40, -47,38,195,27,28,193,248,22,176,2,194,11,250,22,173,8,80,159,42,47,38, -197,248,22,175,2,249,22,79,249,22,79,204,205,28,198,198,9,0,17,35,114, -120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,64,88,163,8,36, -37,59,11,2,32,222,33,65,27,249,22,173,15,2,63,23,196,2,28,23,193, -2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197, -1,27,249,22,173,15,2,63,23,196,2,28,23,193,2,86,94,23,194,1,249, -22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,173,15,2, -63,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196, -2,27,248,22,113,23,197,1,27,249,22,173,15,2,63,23,196,2,28,23,193, -2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,248,2,64,248,22,113, -23,197,1,248,22,89,194,248,22,89,194,248,22,89,194,248,22,89,194,32,66, -88,163,36,37,55,11,2,32,222,33,67,28,248,22,87,248,22,81,23,195,2, -249,22,7,9,248,22,80,195,90,159,38,11,89,161,38,36,11,27,248,22,81, -196,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,80,195,90,159, -38,11,89,161,38,36,11,27,248,22,81,196,28,248,22,87,248,22,81,23,195, -2,249,22,7,9,248,22,80,195,90,159,38,11,89,161,38,36,11,248,2,66, -248,22,81,196,249,22,7,249,22,79,248,22,80,199,196,195,249,22,7,249,22, -79,248,22,80,199,196,195,249,22,7,249,22,79,248,22,80,199,196,195,27,27, -249,22,173,15,2,63,23,197,2,28,23,193,2,86,94,23,195,1,249,22,79, -248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,173,15,2,63,23, -196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27, -248,22,113,23,197,1,27,249,22,173,15,2,63,23,196,2,28,23,193,2,86, -94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27, -249,22,173,15,2,63,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79, -248,22,104,23,196,2,248,2,64,248,22,113,23,197,1,248,22,89,194,248,22, -89,194,248,22,89,194,248,22,89,195,28,23,195,1,192,28,248,22,87,248,22, -81,23,195,2,249,22,7,9,248,22,80,195,27,248,22,81,194,90,159,38,11, -89,161,38,36,11,28,248,22,87,248,22,81,23,197,2,249,22,7,9,248,22, -80,197,27,248,22,81,196,90,159,38,11,89,161,38,36,11,28,248,22,87,248, -22,81,23,197,2,249,22,7,9,248,22,80,197,90,159,38,11,89,161,38,36, -11,248,2,66,248,22,81,198,249,22,7,249,22,79,248,22,80,201,196,195,249, -22,7,249,22,79,248,22,80,202,196,195,249,22,7,249,22,79,248,22,80,200, -196,195,86,96,28,248,22,146,5,23,196,2,12,250,22,189,9,2,22,6,21, -21,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104, -63,23,198,2,28,28,23,196,2,248,22,160,13,23,197,2,10,12,250,22,189, -9,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97,109,101,115,112, -97,99,101,63,41,23,199,2,28,24,193,2,248,24,194,1,23,196,2,86,94, -23,193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,134,16,247,22,159, -13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249,22,79,247,22, -140,2,247,22,140,2,86,94,250,22,158,2,80,159,43,41,38,248,22,134,16, -247,22,159,13,195,192,86,94,250,22,158,2,248,22,80,23,197,2,23,200,2, -68,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22,77,248,22,148, -5,23,200,2,248,22,147,5,248,22,80,248,22,148,5,23,201,1,23,198,1, -27,250,22,160,2,80,159,44,41,38,248,22,134,16,23,204,1,11,28,23,193, -2,27,250,22,160,2,248,22,81,23,198,1,197,11,28,192,250,22,158,2,248, -22,81,199,197,195,12,12,12,251,211,197,198,199,10,32,71,88,163,36,38,47, -11,76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116,104,222,33,74, -32,72,88,163,36,40,54,11,2,32,222,33,73,28,248,22,87,23,197,2,28, -248,22,87,195,192,249,22,79,194,248,22,94,197,28,249,22,154,9,248,22,80, -23,199,2,2,35,28,248,22,87,23,196,2,86,95,23,196,1,23,195,1,250, -22,185,9,2,22,6,37,37,116,111,111,32,109,97,110,121,32,34,46,46,34, -115,32,105,110,32,115,117,98,109,111,100,117,108,101,32,112,97,116,104,58,32, -126,46,115,250,22,90,2,34,28,249,22,154,9,23,201,2,2,36,198,28,248, -22,184,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37,200,199,251,2, -72,196,197,248,22,81,199,248,22,81,200,251,2,72,196,197,249,22,79,248,22, -80,202,200,248,22,81,200,251,2,72,196,197,9,197,27,249,22,165,7,6,31, -31,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,58,32,196,28,193,250,22,187,9,11,195,196, -248,22,185,9,193,28,249,22,148,7,194,2,36,2,29,28,249,22,148,7,194, -2,35,62,117,112,192,32,77,88,163,8,36,37,50,11,67,115,115,45,62,114, -107,116,222,33,78,27,248,22,145,7,194,28,249,22,131,4,194,39,28,249,22, -148,7,6,3,3,46,115,115,249,22,164,7,197,249,22,183,3,198,39,249,22, -165,7,250,22,164,7,198,36,249,22,183,3,199,39,2,40,193,193,0,8,35, -114,120,34,91,46,93,34,32,80,88,163,8,36,37,47,11,2,32,222,33,81, -28,248,22,87,23,194,2,9,250,22,90,6,4,4,10,32,32,32,248,22,188, -14,248,22,105,23,198,2,248,2,80,248,22,81,23,198,1,28,249,22,154,9, -248,22,81,23,200,2,23,197,1,28,249,22,152,9,248,22,80,23,200,1,23, -196,1,251,22,185,9,2,22,6,41,41,99,121,99,108,101,32,105,110,32,108, -111,97,100,105,110,103,10,32,32,97,116,32,112,97,116,104,58,32,126,97,10, -32,32,112,97,116,104,115,58,126,97,23,200,1,249,22,1,22,165,7,248,2, -80,248,22,94,23,201,1,12,12,247,192,20,13,159,80,159,43,50,38,249,22, -79,249,22,79,248,22,134,16,247,22,159,13,23,201,1,23,195,1,20,13,159, -80,159,43,38,37,250,80,159,46,39,37,249,22,33,11,80,159,48,38,37,22, -188,4,23,198,2,249,247,22,171,5,23,200,1,27,248,22,67,248,22,188,14, -23,201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201,1,23,201,1, -11,249,22,79,11,203,249,22,79,194,203,192,86,94,28,248,22,156,5,23,196, -2,12,28,23,197,2,250,22,187,9,11,6,15,15,98,97,100,32,109,111,100, -117,108,101,32,112,97,116,104,23,200,2,250,22,189,9,2,22,2,33,23,198, -2,28,28,248,22,77,23,196,2,249,22,152,9,248,22,80,23,198,2,2,4, -11,248,22,147,5,248,22,104,196,28,28,248,22,77,23,196,2,28,249,22,152, -9,248,22,80,23,198,2,2,34,28,248,22,77,248,22,104,23,197,2,249,22, -152,9,248,22,108,23,198,2,2,4,11,11,11,86,97,23,198,1,23,197,1, -23,196,1,23,193,1,248,22,147,5,249,2,71,248,22,121,23,199,2,248,22, -106,23,199,1,28,28,248,22,77,23,196,2,28,249,22,152,9,248,22,80,23, -198,2,2,34,28,28,249,22,154,9,248,22,104,23,198,2,2,36,10,249,22, -154,9,248,22,104,23,198,2,2,35,28,23,196,2,27,248,22,148,5,23,198, -2,28,248,22,64,193,10,28,248,22,77,193,248,22,64,248,22,80,194,11,11, -11,11,11,86,96,23,198,1,23,197,1,23,193,1,27,248,22,148,5,23,198, -1,248,22,147,5,249,2,71,28,248,22,77,23,197,2,248,22,80,23,197,2, -23,196,2,27,28,249,22,154,9,248,22,104,23,203,2,2,35,248,22,81,200, -248,22,106,200,28,248,22,77,23,198,2,249,22,93,248,22,81,199,194,192,28, -28,248,22,77,23,196,2,249,22,152,9,248,22,80,23,198,2,2,38,11,86, -94,248,80,159,38,8,28,39,193,253,213,200,201,202,203,11,80,158,43,55,28, -28,248,22,77,23,196,2,28,249,22,152,9,248,22,80,23,198,2,2,34,28, -248,22,77,248,22,104,23,197,2,249,22,152,9,248,22,108,23,198,2,2,38, -11,11,11,86,94,248,80,159,38,8,28,39,193,253,213,248,22,104,201,201,202, -203,248,22,106,201,80,158,43,55,86,94,23,193,1,27,88,163,8,36,37,47, -11,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114, -223,5,33,75,27,28,248,22,77,23,198,2,28,249,22,152,9,2,34,248,22, -80,23,200,2,27,248,22,104,23,199,2,28,28,249,22,154,9,23,195,2,2, -36,10,249,22,154,9,23,195,2,2,35,86,94,23,193,1,28,23,199,2,27, -248,22,148,5,23,201,2,28,248,22,77,193,248,22,80,193,192,250,22,185,9, -2,22,6,45,45,110,111,32,98,97,115,101,32,112,97,116,104,32,102,111,114, -32,114,101,108,97,116,105,118,101,32,115,117,98,109,111,100,117,108,101,32,112, -97,116,104,58,32,126,46,115,23,201,2,192,23,197,2,23,197,2,27,28,248, -22,77,23,199,2,28,249,22,152,9,2,34,248,22,80,23,201,2,27,28,28, -28,249,22,154,9,248,22,104,23,202,2,2,36,10,249,22,154,9,248,22,104, -23,202,2,2,35,23,200,2,11,27,248,22,148,5,23,202,2,27,28,249,22, -154,9,248,22,104,23,204,2,2,35,248,22,81,23,202,1,248,22,106,23,202, -1,28,248,22,77,23,195,2,249,2,71,248,22,80,23,197,2,249,22,93,248, -22,81,23,199,1,23,197,1,249,2,71,23,196,1,23,195,1,249,2,71,2, -36,28,249,22,154,9,248,22,104,23,204,2,2,35,248,22,81,23,202,1,248, -22,106,23,202,1,28,248,22,77,193,248,22,81,193,11,11,11,27,28,248,22, -64,23,196,2,27,248,80,159,43,48,39,249,22,79,23,199,2,247,22,162,15, -28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80, -159,46,54,39,248,22,70,23,201,2,11,27,28,248,22,87,23,195,2,2,39, -249,22,165,7,23,197,2,2,40,251,80,159,49,59,39,23,204,1,28,248,22, -87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199,2,28,248,22, -87,23,199,2,86,94,23,198,1,9,248,22,81,23,199,1,23,197,1,28,248, -22,142,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8,29,39,23,202, -2,27,248,80,159,44,48,39,249,22,79,23,200,2,23,197,2,28,23,193,2, -192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,47,54,39, -23,201,2,11,250,22,1,22,138,15,23,199,1,249,22,93,249,22,2,32,0, -88,163,8,36,37,44,11,9,222,33,76,23,200,1,248,22,89,248,2,77,23, -201,1,28,248,22,184,14,23,196,2,86,94,23,196,1,248,80,159,42,8,30, -39,248,22,147,15,28,248,22,144,15,23,198,2,23,197,2,249,22,145,15,23, -199,2,248,80,159,46,8,29,39,23,205,2,28,249,22,152,9,248,22,80,23, -198,2,2,27,27,248,80,159,43,48,39,249,22,79,23,199,2,247,22,162,15, -28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38,36,11,249,80, -159,47,54,39,248,22,104,23,202,2,11,89,161,37,38,11,28,248,22,87,248, -22,106,23,201,2,28,248,22,87,23,194,2,249,22,177,15,2,79,23,196,2, -11,10,27,28,23,196,2,248,2,77,23,196,2,28,248,22,87,23,195,2,2, -39,28,249,22,177,15,2,79,23,197,2,248,2,77,23,196,2,249,22,165,7, -23,197,2,2,40,27,28,23,197,1,86,94,23,196,1,249,22,93,28,248,22, -87,248,22,106,23,205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22, -93,249,22,2,80,159,53,8,31,39,248,22,106,23,208,2,23,197,1,28,248, -22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86,94,23,196,1, -23,195,1,251,80,159,51,59,39,23,206,1,248,22,80,23,198,2,248,22,81, -23,198,1,23,198,1,28,249,22,152,9,248,22,80,23,198,2,2,37,248,80, -159,42,8,30,39,248,22,147,15,249,22,145,15,248,22,149,15,248,22,104,23, -201,2,248,80,159,46,8,29,39,23,205,2,12,86,94,28,28,248,22,184,14, -23,194,2,10,248,22,167,8,23,194,2,86,94,23,201,1,12,28,23,201,2, -250,22,187,9,67,114,101,113,117,105,114,101,249,22,190,7,6,17,17,98,97, -100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22, -80,23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22,189,9,2,22, -2,33,23,198,2,27,28,248,22,167,8,23,195,2,249,22,172,8,23,196,2, -36,249,22,147,15,248,22,148,15,23,197,2,11,27,28,248,22,167,8,23,196, -2,249,22,172,8,23,197,2,37,248,80,159,44,8,24,39,23,195,2,90,159, -39,11,89,161,39,36,11,28,248,22,167,8,23,199,2,250,22,7,2,41,249, -22,172,8,23,203,2,38,2,41,248,22,141,15,23,198,2,86,95,23,195,1, -23,193,1,27,28,248,22,167,8,23,200,2,249,22,172,8,23,201,2,39,249, -80,159,49,58,39,23,197,2,5,0,27,28,248,22,167,8,23,201,2,249,22, -172,8,23,202,2,40,248,22,147,5,23,200,2,27,250,22,160,2,80,159,52, -41,38,248,22,134,16,247,22,159,13,11,27,28,23,194,2,23,194,1,86,94, -23,194,1,27,249,22,79,247,22,140,2,247,22,140,2,86,94,250,22,158,2, -80,159,54,41,38,248,22,134,16,247,22,159,13,195,192,27,28,23,204,2,248, -22,147,5,249,22,79,248,22,148,5,23,200,2,23,207,2,23,196,2,86,95, -28,23,212,1,27,250,22,160,2,248,22,80,23,199,2,196,11,28,23,193,1, -12,27,27,28,248,22,17,80,159,55,51,38,80,159,54,51,38,247,22,19,251, -22,33,11,80,159,58,50,38,9,23,197,1,27,248,22,134,16,247,22,159,13, -86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14,13,2,3, -33,82,23,195,1,23,196,2,248,28,248,22,17,80,159,56,51,38,32,0,88, -163,36,37,42,11,9,222,33,83,80,159,55,8,32,39,20,20,96,88,163,36, -36,56,8,240,12,64,0,0,9,230,19,15,13,12,8,7,5,2,33,84,23, -195,1,23,198,1,23,208,1,12,28,28,248,22,167,8,23,204,1,11,28,248, -22,142,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23,206, -2,249,22,152,9,248,22,80,23,208,2,2,27,11,249,80,159,53,49,39,28, -248,22,142,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,29,39,23, -215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,162,15,252,22,169,8, -23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18, -159,11,80,158,36,55,248,80,159,37,8,27,37,249,22,33,11,80,159,39,57, -37,248,22,187,4,80,159,37,56,38,248,22,171,5,80,159,37,37,39,248,22, -153,14,80,159,37,45,39,20,18,159,11,80,158,36,55,248,80,159,37,8,27, -37,249,22,33,11,80,159,39,57,37,20,18,159,11,80,158,36,55,248,80,159, -37,8,27,37,249,22,33,11,80,159,39,57,37,159,36,20,113,159,36,16,1, -11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10, -38,80,158,36,36,20,113,159,41,16,28,2,2,2,3,30,2,6,2,7,6, -30,2,6,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,3,30,2,8,72,112,97,116,104,45,115,116,114,105, -110,103,63,11,2,9,30,2,8,71,114,101,114,111,111,116,45,112,97,116,104, -12,30,2,8,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,8, -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,30,2,23,2,7,6,30,2,8,79,112,97,116,104,45,114, -101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2,8,73,102,105,110, -100,45,99,111,108,45,102,105,108,101,3,30,2,8,76,110,111,114,109,97,108, -45,99,97,115,101,45,112,97,116,104,7,2,24,2,25,30,2,23,74,114,101, -112,97,114,97,109,101,116,101,114,105,122,101,7,16,0,37,39,36,16,0,36, -16,15,2,16,2,17,2,9,2,13,2,18,2,19,2,12,2,3,2,11,2, -2,2,14,2,15,2,10,2,20,2,22,51,11,11,11,16,3,2,24,2,21, -2,25,16,3,11,11,11,16,3,2,24,2,21,2,25,39,39,37,12,11,11, -16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16, -23,20,15,16,2,88,163,36,37,45,8,240,0,128,0,0,9,223,0,33,42, -80,159,36,8,32,39,20,15,16,2,88,163,8,36,37,45,8,240,0,0,4, -0,9,223,0,33,43,80,159,36,8,31,39,20,15,16,2,88,163,36,37,49, -8,240,0,0,64,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0, -33,44,80,159,36,8,30,39,20,15,16,2,88,163,36,37,50,8,240,0,0, -3,0,67,103,101,116,45,100,105,114,223,0,33,45,80,159,36,8,29,39,20, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,50,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,89,0,0,0,1,0,0,7,0,18,0, +45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175,0,187, +0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,63,1,94,1,101,1, +106,1,111,1,129,1,135,1,140,1,145,1,154,1,159,1,163,1,178,1,185, +1,190,1,194,1,199,1,206,1,217,1,224,1,232,1,42,2,108,2,183,2, +2,3,105,3,126,3,229,3,250,3,88,4,109,4,203,4,224,4,117,12,135, +12,186,12,249,12,12,13,26,13,184,13,197,13,75,14,117,15,199,15,63,16, +120,16,128,16,137,16,160,17,166,17,194,17,207,17,113,18,120,18,174,18,196, +18,216,18,15,19,25,19,39,19,76,19,174,19,176,19,26,20,213,27,10,28, +34,28,58,28,0,0,46,32,0,0,66,35,37,98,111,111,116,70,100,108,108, +45,115,117,102,102,105,120,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,65,113,117,111,116,101,68,35, +37,112,97,114,97,109,122,29,94,2,4,2,5,11,1,20,112,97,114,97,109, +101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,29,94,2,4,67,35, +37,117,116,105,108,115,11,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,76,114,101,103,105,115,116,101,114, +45,122,111,45,112,97,116,104,1,20,100,101,102,97,117,108,116,45,114,101,97, +100,101,114,45,103,117,97,114,100,67,67,65,67,72,69,45,78,71,45,112,97, +116,104,45,99,97,99,104,101,74,112,97,116,104,45,99,97,99,104,101,45,103, +101,116,75,112,97,116,104,45,99,97,99,104,101,45,115,101,116,33,77,45,108, +111,97,100,105,110,103,45,102,105,108,101,110,97,109,101,79,45,108,111,97,100, +105,110,103,45,112,114,111,109,112,116,45,116,97,103,71,45,112,114,101,118,45, +114,101,108,116,111,75,45,112,114,101,118,45,114,101,108,116,111,45,100,105,114, +1,21,115,112,108,105,116,45,114,101,108,97,116,105,118,101,45,115,116,114,105, +110,103,71,111,114,105,103,45,112,97,114,97,109,122,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,29,94,2,4,2,5,11,64,98,111,111,116,64,115,101,97,108,77, +108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,5,4,46,114, +107,116,64,115,97,109,101,5,3,46,122,111,6,6,6,110,97,116,105,118,101, +64,108,111,111,112,63,108,105,98,6,12,12,109,111,100,117,108,101,45,112,97, +116,104,63,66,115,117,98,109,111,100,6,2,2,46,46,6,1,1,46,64,102, +105,108,101,66,112,108,97,110,101,116,6,8,8,109,97,105,110,46,114,107,116, +6,4,4,46,114,107,116,67,105,103,110,111,114,101,100,250,22,138,15,28,249, +22,152,9,23,201,2,2,28,86,94,23,199,1,23,197,1,28,248,22,142,15, +23,200,2,249,22,138,15,23,199,1,23,201,1,249,80,159,43,42,39,23,199, +1,23,201,1,23,200,1,249,80,159,43,43,39,23,198,1,2,29,250,22,138, +15,28,249,22,152,9,23,201,2,2,28,86,94,23,199,1,23,197,1,28,248, +22,142,15,23,200,2,249,22,138,15,23,199,1,23,201,1,249,80,159,43,42, +39,23,199,1,23,201,1,23,200,1,249,80,159,43,43,39,23,198,1,2,29, +252,22,138,15,28,249,22,152,9,23,203,2,2,28,86,94,23,201,1,23,199, +1,28,248,22,142,15,23,202,2,249,22,138,15,23,201,1,23,203,1,249,80, +159,45,42,39,23,201,1,23,203,1,23,202,1,2,30,247,22,165,8,249,80, +159,45,43,39,23,200,1,80,159,45,36,38,252,22,138,15,28,249,22,152,9, +23,203,2,2,28,86,94,23,201,1,23,199,1,28,248,22,142,15,23,202,2, +249,22,138,15,23,201,1,23,203,1,249,80,159,45,42,39,23,201,1,23,203, +1,23,202,1,2,30,247,22,165,8,249,80,159,45,43,39,23,200,1,80,159, +45,36,38,27,252,22,138,15,28,249,22,152,9,23,201,2,2,28,86,94,23, +199,1,23,201,1,28,248,22,142,15,23,200,2,249,22,138,15,23,203,1,23, +201,1,249,80,159,47,42,39,23,203,1,23,201,1,23,203,1,2,30,247,22, +165,8,249,80,159,47,43,39,23,202,1,80,159,47,36,38,27,250,22,155,15, +196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194, +11,249,22,5,88,163,8,36,37,54,8,129,3,9,226,5,3,2,6,33,46, +196,27,252,22,138,15,28,249,22,152,9,23,201,2,2,28,86,94,23,199,1, +23,201,1,28,248,22,142,15,23,200,2,249,22,138,15,23,203,1,23,201,1, +249,80,159,47,42,39,23,203,1,23,201,1,23,203,1,2,30,247,22,165,8, +249,80,159,47,43,39,23,202,1,80,159,47,36,38,27,250,22,155,15,196,11, +32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,249, +22,5,88,163,8,36,37,54,8,129,3,9,226,5,3,2,6,33,48,196,27, +250,22,138,15,28,249,22,152,9,23,199,2,2,28,86,94,23,197,1,23,199, +1,28,248,22,142,15,23,198,2,249,22,138,15,23,201,1,23,199,1,249,80, +159,45,42,39,23,201,1,23,199,1,23,201,1,249,80,159,45,43,39,23,200, +1,2,29,27,250,22,155,15,196,11,32,0,88,163,8,36,36,41,11,9,222, +11,28,192,249,22,79,195,194,11,249,22,5,88,163,8,36,37,52,8,128,3, +9,226,5,3,2,6,33,50,196,27,250,22,138,15,28,249,22,152,9,23,199, +2,2,28,86,94,23,197,1,23,199,1,28,248,22,142,15,23,198,2,249,22, +138,15,23,201,1,23,199,1,249,80,159,45,42,39,23,201,1,23,199,1,23, +201,1,249,80,159,45,43,39,23,200,1,2,29,27,250,22,155,15,196,11,32, +0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,249,22, +5,88,163,8,36,37,52,8,128,3,9,226,5,3,2,6,33,52,196,86,95, +28,248,80,159,37,40,39,23,195,2,12,250,22,189,9,2,26,6,12,12,112, +97,116,104,45,115,116,114,105,110,103,63,23,197,2,28,28,23,195,2,28,248, +22,64,23,196,2,10,28,248,22,88,23,196,2,28,249,22,129,4,248,22,92, +23,198,2,37,28,28,248,22,64,248,22,80,23,197,2,10,248,22,150,9,248, +22,80,23,197,2,249,22,4,22,64,248,22,81,23,198,2,11,11,11,10,12, +250,22,189,9,2,26,6,71,71,40,111,114,47,99,32,35,102,32,115,121,109, +98,111,108,63,32,40,99,111,110,115,47,99,32,40,111,114,47,99,32,35,102, +32,115,121,109,98,111,108,63,41,32,40,110,111,110,45,101,109,112,116,121,45, +108,105,115,116,111,102,32,115,121,109,98,111,108,63,41,41,41,23,197,2,27, +28,23,196,2,247,22,188,4,11,27,28,23,194,2,250,22,160,2,80,158,41, +41,248,22,134,16,247,22,159,13,11,11,27,28,23,194,2,250,22,160,2,248, +22,81,23,198,2,23,198,2,11,11,28,23,193,2,86,96,23,197,1,23,195, +1,23,194,1,20,13,159,80,159,39,38,37,250,80,159,42,39,37,249,22,33, +11,80,159,44,38,37,22,189,4,248,22,104,196,27,248,22,113,194,20,13,159, +80,159,40,38,37,250,80,159,43,39,37,249,22,33,11,80,159,45,38,37,22, +172,5,28,248,22,184,14,23,197,2,23,196,1,86,94,23,196,1,247,22,161, +15,249,247,22,170,5,248,22,80,196,200,86,94,23,193,1,90,159,47,11,89, +161,37,36,11,28,248,22,144,15,23,209,2,23,208,2,27,247,22,172,5,28, +23,193,2,249,22,145,15,23,211,2,23,195,1,23,209,2,89,161,39,37,11, +248,22,141,15,23,209,1,86,94,23,196,1,89,161,38,40,11,28,23,209,2, +27,248,22,189,14,23,197,2,27,248,22,136,8,23,195,2,28,28,249,22,131, +4,23,195,2,40,249,22,139,8,2,27,249,22,142,8,23,198,2,249,22,183, +3,23,199,2,40,11,249,22,7,23,199,2,248,22,129,15,249,22,143,8,250, +22,142,8,23,202,1,36,249,22,183,3,23,203,1,40,5,3,46,115,115,249, +22,7,23,199,2,11,249,22,7,23,197,2,11,89,161,37,42,11,28,249,22, +152,9,23,199,2,23,197,2,23,193,2,249,22,138,15,23,196,2,23,199,2, +89,161,37,43,11,28,23,198,2,28,249,22,152,9,23,200,2,23,197,1,23, +193,1,86,94,23,193,1,249,22,138,15,23,196,2,23,200,2,86,94,23,195, +1,11,89,161,37,44,11,28,249,22,152,9,23,196,2,68,114,101,108,97,116, +105,118,101,86,94,23,194,1,2,28,23,194,1,89,161,37,45,11,247,22,163, +15,89,161,37,46,11,247,22,164,15,27,250,22,155,15,23,203,2,11,32,0, +88,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249,22,79,23,203,2, +23,196,1,86,94,23,194,1,11,27,28,23,203,2,28,23,194,2,11,27,250, +22,155,15,23,207,2,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192, +249,22,79,23,206,2,194,11,11,27,28,23,195,2,23,195,2,23,194,2,27, +88,163,36,38,51,8,128,3,62,122,111,225,19,13,9,33,42,27,88,163,36, +38,51,8,128,3,66,97,108,116,45,122,111,225,20,14,11,33,43,27,88,163, +36,38,53,8,129,3,9,225,21,15,11,33,44,27,88,163,36,38,53,8,129, +3,9,225,22,16,13,33,45,27,28,23,200,2,23,200,2,248,22,150,9,23, +200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248,22, +150,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,88,163, +36,37,48,8,129,3,9,226,28,23,22,18,33,47,23,217,2,27,28,23,202, +2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,131,4,248,22,81,196, +248,22,81,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2, +86,108,23,217,1,23,216,1,23,214,1,23,213,1,23,211,1,23,210,1,23, +209,1,23,208,1,23,201,1,23,200,1,23,199,1,23,198,1,23,196,1,23, +195,1,23,194,1,20,13,159,80,159,8,25,38,37,250,80,159,8,28,39,37, +249,22,33,11,80,159,8,30,38,37,22,189,4,11,20,13,159,80,159,8,25, +38,37,250,80,159,8,28,39,37,249,22,33,11,80,159,8,30,38,37,22,172, +5,28,248,22,184,14,23,216,2,23,215,1,86,94,23,215,1,247,22,161,15, +249,247,22,168,15,248,22,80,195,23,29,86,94,23,193,1,27,28,23,195,2, +28,23,197,1,27,249,22,5,88,163,36,37,48,8,129,3,9,226,29,24,23, +20,33,49,23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28,203,28, +249,22,131,4,248,22,81,196,248,22,81,206,193,11,11,11,11,86,94,23,197, +1,11,28,23,193,2,86,105,23,218,1,23,217,1,23,215,1,23,214,1,23, +211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196,1,23, +195,1,20,13,159,80,159,8,26,38,37,250,80,159,8,29,39,37,249,22,33, +11,80,159,8,31,38,37,22,189,4,23,215,1,20,13,159,80,159,8,26,38, +37,250,80,159,8,29,39,37,249,22,33,11,80,159,8,31,38,37,22,172,5, +28,248,22,184,14,23,217,2,23,216,1,86,94,23,216,1,247,22,161,15,249, +247,22,168,15,248,22,80,195,23,30,86,94,23,193,1,27,28,23,197,2,28, +23,201,1,27,249,22,5,20,20,94,88,163,36,37,48,8,128,3,9,226,30, +25,24,20,33,51,23,213,1,23,219,2,27,28,23,204,2,11,193,28,192,192, +28,193,28,23,204,2,28,249,22,131,4,248,22,81,196,248,22,81,23,207,2, +193,11,11,11,86,94,23,210,1,11,86,94,23,201,1,11,28,23,193,2,86, +102,23,216,1,23,215,1,23,213,1,23,212,1,23,211,1,23,202,1,23,200, +1,23,197,1,23,196,1,86,94,27,248,22,80,194,28,23,219,2,250,22,158, +2,248,22,81,23,223,1,23,223,1,250,22,89,23,199,1,11,23,221,2,12, +20,13,159,80,159,8,27,38,37,250,80,159,8,30,39,37,249,22,33,11,80, +159,8,32,38,37,22,189,4,11,20,13,159,80,159,8,27,38,37,250,80,159, +8,30,39,37,249,22,33,11,80,159,8,32,38,37,22,172,5,28,248,22,184, +14,23,218,2,23,217,1,86,94,23,217,1,247,22,161,15,249,247,22,170,5, +248,22,80,195,23,31,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27, +249,22,5,20,20,95,88,163,36,37,48,8,128,3,9,226,31,26,25,22,33, +53,23,215,1,23,219,1,23,220,1,27,28,23,205,2,11,193,28,192,192,28, +193,28,204,28,249,22,131,4,248,22,81,196,248,22,81,23,15,193,11,11,11, +86,96,23,217,1,23,216,1,23,212,1,11,86,94,23,201,1,11,28,23,193, +2,86,95,23,213,1,23,198,1,86,94,27,248,22,80,194,28,23,220,2,250, +22,158,2,248,22,81,23,224,32,0,0,0,1,23,224,32,0,0,0,1,250, +22,89,23,199,1,23,221,2,23,222,2,12,20,13,159,80,159,8,28,38,37, +250,80,159,8,31,39,37,249,22,33,11,80,159,8,33,38,37,22,189,4,23, +217,1,20,13,159,80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33, +11,80,159,8,33,38,37,22,172,5,28,248,22,184,14,23,219,2,23,218,1, +86,94,23,218,1,247,22,161,15,249,247,22,170,5,248,22,80,195,23,32,86, +94,23,193,1,28,28,248,22,77,23,224,32,0,0,0,2,248,22,80,23,224, +32,0,0,0,2,10,27,28,23,199,2,86,94,23,215,1,23,214,1,86,94, +23,214,1,23,215,1,28,28,248,22,77,23,224,33,0,0,0,2,248,22,150, +9,248,22,132,15,23,195,2,11,12,20,13,159,80,159,8,29,38,37,250,80, +159,8,32,39,37,249,22,33,11,80,159,8,34,38,37,22,189,4,28,23,34, +28,23,202,1,11,195,86,94,23,202,1,11,20,13,159,80,159,8,29,38,37, +250,80,159,8,32,39,37,249,22,33,11,80,159,8,34,38,37,22,172,5,28, +248,22,184,14,23,220,2,23,219,1,86,94,23,219,1,247,22,161,15,249,247, +22,170,5,194,23,33,12,28,193,250,22,158,2,248,22,81,197,195,250,22,89, +200,201,202,12,27,249,22,172,8,80,159,39,47,38,249,22,190,3,248,22,186, +3,248,22,173,2,200,8,128,8,27,28,193,248,22,176,2,194,11,28,192,27, +249,22,102,198,195,28,192,248,22,81,193,11,11,27,249,22,190,3,248,22,186, +3,248,22,173,2,198,8,128,8,27,249,22,172,8,80,159,40,47,38,195,27, +28,193,248,22,176,2,194,11,250,22,173,8,80,159,42,47,38,197,248,22,175, +2,249,22,79,249,22,79,204,205,28,198,198,9,0,17,35,114,120,34,94,40, +46,42,63,41,47,40,46,42,41,36,34,32,59,88,163,8,36,37,59,11,2, +31,222,33,60,27,249,22,173,15,2,58,23,196,2,28,23,193,2,86,94,23, +194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22, +173,15,2,58,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22, +104,23,196,2,27,248,22,113,23,197,1,27,249,22,173,15,2,58,23,196,2, +28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22, +113,23,197,1,27,249,22,173,15,2,58,23,196,2,28,23,193,2,86,94,23, +194,1,249,22,79,248,22,104,23,196,2,248,2,59,248,22,113,23,197,1,248, +22,89,194,248,22,89,194,248,22,89,194,248,22,89,194,32,61,88,163,36,37, +55,11,2,31,222,33,62,28,248,22,87,248,22,81,23,195,2,249,22,7,9, +248,22,80,195,90,159,38,11,89,161,38,36,11,27,248,22,81,196,28,248,22, +87,248,22,81,23,195,2,249,22,7,9,248,22,80,195,90,159,38,11,89,161, +38,36,11,27,248,22,81,196,28,248,22,87,248,22,81,23,195,2,249,22,7, +9,248,22,80,195,90,159,38,11,89,161,38,36,11,248,2,61,248,22,81,196, +249,22,7,249,22,79,248,22,80,199,196,195,249,22,7,249,22,79,248,22,80, +199,196,195,249,22,7,249,22,79,248,22,80,199,196,195,27,27,249,22,173,15, +2,58,23,197,2,28,23,193,2,86,94,23,195,1,249,22,79,248,22,104,23, +196,2,27,248,22,113,23,197,1,27,249,22,173,15,2,58,23,196,2,28,23, +193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23, +197,1,27,249,22,173,15,2,58,23,196,2,28,23,193,2,86,94,23,194,1, +249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,173,15, +2,58,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23, +196,2,248,2,59,248,22,113,23,197,1,248,22,89,194,248,22,89,194,248,22, +89,194,248,22,89,195,28,23,195,1,192,28,248,22,87,248,22,81,23,195,2, +249,22,7,9,248,22,80,195,27,248,22,81,194,90,159,38,11,89,161,38,36, +11,28,248,22,87,248,22,81,23,197,2,249,22,7,9,248,22,80,197,27,248, +22,81,196,90,159,38,11,89,161,38,36,11,28,248,22,87,248,22,81,23,197, +2,249,22,7,9,248,22,80,197,90,159,38,11,89,161,38,36,11,248,2,61, +248,22,81,198,249,22,7,249,22,79,248,22,80,201,196,195,249,22,7,249,22, +79,248,22,80,202,196,195,249,22,7,249,22,79,248,22,80,200,196,195,28,24, +194,2,12,20,13,159,80,159,36,57,37,80,158,36,55,89,161,37,37,10,249, +22,190,4,21,94,2,32,6,19,19,112,108,97,110,101,116,47,114,101,115,111, +108,118,101,114,46,114,107,116,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,12,27,28,23,195, +2,28,249,22,152,9,23,197,2,80,158,39,52,86,94,23,195,1,80,158,37, +53,27,248,22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22,80,23, +195,1,23,194,1,28,248,22,184,14,23,194,2,90,159,39,11,89,161,39,36, +11,248,22,141,15,23,197,1,86,95,20,18,159,11,80,158,42,52,199,20,18, +159,11,80,158,42,53,192,192,11,11,28,23,193,2,192,86,94,23,193,1,27, +247,22,172,5,28,192,192,247,22,161,15,90,159,39,11,89,161,39,36,11,248, +22,141,15,197,86,95,23,195,1,23,193,1,28,249,22,173,15,0,11,35,114, +120,34,91,46,93,115,115,36,34,248,22,189,14,23,197,1,249,80,159,41,58, +39,198,2,27,196,249,80,159,38,54,39,195,10,249,22,14,195,80,159,38,51, +38,86,96,28,248,22,146,5,23,196,2,12,250,22,189,9,2,22,6,21,21, +114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,63, +23,198,2,28,28,23,196,2,248,22,160,13,23,197,2,10,12,250,22,189,9, +2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97,109,101,115,112,97, +99,101,63,41,23,199,2,28,24,193,2,248,24,194,1,23,196,2,86,94,23, +193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,134,16,247,22,159,13, +11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249,22,79,247,22,140, +2,247,22,140,2,86,94,250,22,158,2,80,159,43,41,38,248,22,134,16,247, +22,159,13,195,192,86,94,250,22,158,2,248,22,80,23,197,2,23,200,2,68, +100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22,77,248,22,148,5, +23,200,2,248,22,147,5,248,22,80,248,22,148,5,23,201,1,23,198,1,27, +250,22,160,2,80,159,44,41,38,248,22,134,16,23,204,1,11,28,23,193,2, +27,250,22,160,2,248,22,81,23,198,1,197,11,28,192,250,22,158,2,248,22, +81,199,197,195,12,12,12,251,211,197,198,199,10,32,71,88,163,36,38,47,11, +76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116,104,222,33,74,32, +72,88,163,36,40,54,11,2,31,222,33,73,28,248,22,87,23,197,2,28,248, +22,87,195,192,249,22,79,194,248,22,94,197,28,249,22,154,9,248,22,80,23, +199,2,2,35,28,248,22,87,23,196,2,86,95,23,196,1,23,195,1,250,22, +185,9,2,22,6,37,37,116,111,111,32,109,97,110,121,32,34,46,46,34,115, +32,105,110,32,115,117,98,109,111,100,117,108,101,32,112,97,116,104,58,32,126, +46,115,250,22,90,2,34,28,249,22,154,9,23,201,2,2,36,198,28,248,22, +184,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37,200,199,251,2,72, +196,197,248,22,81,199,248,22,81,200,251,2,72,196,197,249,22,79,248,22,80, +202,200,248,22,81,200,251,2,72,196,197,9,197,27,249,22,165,7,6,31,31, +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,58,32,196,28,193,250,22,187,9,11,195,196,248, +22,185,9,193,28,249,22,148,7,194,2,36,2,28,28,249,22,148,7,194,2, +35,62,117,112,192,32,77,88,163,8,36,37,50,11,67,115,115,45,62,114,107, +116,222,33,78,27,248,22,145,7,194,28,249,22,131,4,194,39,28,249,22,148, +7,6,3,3,46,115,115,249,22,164,7,197,249,22,183,3,198,39,249,22,165, +7,250,22,164,7,198,36,249,22,183,3,199,39,2,40,193,193,0,8,35,114, +120,34,91,46,93,34,32,80,88,163,8,36,37,47,11,2,31,222,33,81,28, +248,22,87,23,194,2,9,250,22,90,6,4,4,10,32,32,32,248,22,188,14, +248,22,105,23,198,2,248,2,80,248,22,81,23,198,1,28,249,22,154,9,248, +22,81,23,200,2,23,197,1,28,249,22,152,9,248,22,80,23,200,1,23,196, +1,251,22,185,9,2,22,6,41,41,99,121,99,108,101,32,105,110,32,108,111, +97,100,105,110,103,10,32,32,97,116,32,112,97,116,104,58,32,126,97,10,32, +32,112,97,116,104,115,58,126,97,23,200,1,249,22,1,22,165,7,248,2,80, +248,22,94,23,201,1,12,12,247,192,20,13,159,80,159,43,50,38,249,22,79, +249,22,79,248,22,134,16,247,22,159,13,23,201,1,23,195,1,20,13,159,80, +159,43,38,37,250,80,159,46,39,37,249,22,33,11,80,159,48,38,37,22,188, +4,23,198,2,249,247,22,171,5,23,200,1,27,248,22,67,248,22,188,14,23, +201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201,1,23,201,1,11, +249,22,79,11,203,249,22,79,194,203,192,86,94,28,248,22,156,5,23,196,2, +12,28,23,197,2,250,22,187,9,11,6,15,15,98,97,100,32,109,111,100,117, +108,101,32,112,97,116,104,23,200,2,250,22,189,9,2,22,2,33,23,198,2, +28,28,248,22,77,23,196,2,249,22,152,9,248,22,80,23,198,2,2,4,11, +248,22,147,5,248,22,104,196,28,28,248,22,77,23,196,2,28,249,22,152,9, +248,22,80,23,198,2,2,34,28,248,22,77,248,22,104,23,197,2,249,22,152, +9,248,22,108,23,198,2,2,4,11,11,11,86,97,23,198,1,23,197,1,23, +196,1,23,193,1,248,22,147,5,249,2,71,248,22,121,23,199,2,248,22,106, +23,199,1,28,28,248,22,77,23,196,2,28,249,22,152,9,248,22,80,23,198, +2,2,34,28,28,249,22,154,9,248,22,104,23,198,2,2,36,10,249,22,154, +9,248,22,104,23,198,2,2,35,28,23,196,2,27,248,22,148,5,23,198,2, +28,248,22,64,193,10,28,248,22,77,193,248,22,64,248,22,80,194,11,11,11, +11,11,86,96,23,198,1,23,197,1,23,193,1,27,248,22,148,5,23,198,1, +248,22,147,5,249,2,71,28,248,22,77,23,197,2,248,22,80,23,197,2,23, +196,2,27,28,249,22,154,9,248,22,104,23,203,2,2,35,248,22,81,200,248, +22,106,200,28,248,22,77,23,198,2,249,22,93,248,22,81,199,194,192,28,28, +248,22,77,23,196,2,249,22,152,9,248,22,80,23,198,2,2,38,11,86,94, +248,80,159,38,8,28,39,193,253,213,200,201,202,203,11,80,158,43,55,28,28, +248,22,77,23,196,2,28,249,22,152,9,248,22,80,23,198,2,2,34,28,248, +22,77,248,22,104,23,197,2,249,22,152,9,248,22,108,23,198,2,2,38,11, +11,11,86,94,248,80,159,38,8,28,39,193,253,213,248,22,104,201,201,202,203, +248,22,106,201,80,158,43,55,86,94,23,193,1,27,88,163,8,36,37,47,11, +79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223, +5,33,75,27,28,248,22,77,23,198,2,28,249,22,152,9,2,34,248,22,80, +23,200,2,27,248,22,104,23,199,2,28,28,249,22,154,9,23,195,2,2,36, +10,249,22,154,9,23,195,2,2,35,86,94,23,193,1,28,23,199,2,27,248, +22,148,5,23,201,2,28,248,22,77,193,248,22,80,193,192,250,22,185,9,2, +22,6,45,45,110,111,32,98,97,115,101,32,112,97,116,104,32,102,111,114,32, +114,101,108,97,116,105,118,101,32,115,117,98,109,111,100,117,108,101,32,112,97, +116,104,58,32,126,46,115,23,201,2,192,23,197,2,23,197,2,27,28,248,22, +77,23,199,2,28,249,22,152,9,2,34,248,22,80,23,201,2,27,28,28,28, +249,22,154,9,248,22,104,23,202,2,2,36,10,249,22,154,9,248,22,104,23, +202,2,2,35,23,200,2,11,27,248,22,148,5,23,202,2,27,28,249,22,154, +9,248,22,104,23,204,2,2,35,248,22,81,23,202,1,248,22,106,23,202,1, +28,248,22,77,23,195,2,249,2,71,248,22,80,23,197,2,249,22,93,248,22, +81,23,199,1,23,197,1,249,2,71,23,196,1,23,195,1,249,2,71,2,36, +28,249,22,154,9,248,22,104,23,204,2,2,35,248,22,81,23,202,1,248,22, +106,23,202,1,28,248,22,77,193,248,22,81,193,11,11,11,27,28,248,22,64, +23,196,2,27,248,80,159,43,48,39,249,22,79,23,199,2,247,22,162,15,28, +23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159, +46,54,39,248,22,70,23,201,2,11,27,28,248,22,87,23,195,2,2,39,249, +22,165,7,23,197,2,2,40,251,80,159,49,59,39,23,204,1,28,248,22,87, +23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199,2,28,248,22,87, +23,199,2,86,94,23,198,1,9,248,22,81,23,199,1,23,197,1,28,248,22, +142,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8,29,39,23,202,2, +27,248,80,159,44,48,39,249,22,79,23,200,2,23,197,2,28,23,193,2,192, +86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,47,54,39,23, +201,2,11,250,22,1,22,138,15,23,199,1,249,22,93,249,22,2,32,0,88, +163,8,36,37,44,11,9,222,33,76,23,200,1,248,22,89,248,2,77,23,201, +1,28,248,22,184,14,23,196,2,86,94,23,196,1,248,80,159,42,8,30,39, +248,22,147,15,28,248,22,144,15,23,198,2,23,197,2,249,22,145,15,23,199, +2,248,80,159,46,8,29,39,23,205,2,28,249,22,152,9,248,22,80,23,198, +2,2,32,27,248,80,159,43,48,39,249,22,79,23,199,2,247,22,162,15,28, +23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38,36,11,249,80,159, +47,54,39,248,22,104,23,202,2,11,89,161,37,38,11,28,248,22,87,248,22, +106,23,201,2,28,248,22,87,23,194,2,249,22,177,15,2,79,23,196,2,11, +10,27,28,23,196,2,248,2,77,23,196,2,28,248,22,87,23,195,2,2,39, +28,249,22,177,15,2,79,23,197,2,248,2,77,23,196,2,249,22,165,7,23, +197,2,2,40,27,28,23,197,1,86,94,23,196,1,249,22,93,28,248,22,87, +248,22,106,23,205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,93, +249,22,2,80,159,53,8,31,39,248,22,106,23,208,2,23,197,1,28,248,22, +87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86,94,23,196,1,23, +195,1,251,80,159,51,59,39,23,206,1,248,22,80,23,198,2,248,22,81,23, +198,1,23,198,1,28,249,22,152,9,248,22,80,23,198,2,2,37,248,80,159, +42,8,30,39,248,22,147,15,249,22,145,15,248,22,149,15,248,22,104,23,201, +2,248,80,159,46,8,29,39,23,205,2,12,86,94,28,28,248,22,184,14,23, +194,2,10,248,22,167,8,23,194,2,86,94,23,201,1,12,28,23,201,2,250, +22,187,9,67,114,101,113,117,105,114,101,249,22,190,7,6,17,17,98,97,100, +32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,80, +23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22,189,9,2,22,2, +33,23,198,2,27,28,248,22,167,8,23,195,2,249,22,172,8,23,196,2,36, +249,22,147,15,248,22,148,15,23,197,2,11,27,28,248,22,167,8,23,196,2, +249,22,172,8,23,197,2,37,248,80,159,44,8,24,39,23,195,2,90,159,39, +11,89,161,39,36,11,28,248,22,167,8,23,199,2,250,22,7,2,41,249,22, +172,8,23,203,2,38,2,41,248,22,141,15,23,198,2,86,95,23,195,1,23, +193,1,27,28,248,22,167,8,23,200,2,249,22,172,8,23,201,2,39,249,80, +159,49,58,39,23,197,2,5,0,27,28,248,22,167,8,23,201,2,249,22,172, +8,23,202,2,40,248,22,147,5,23,200,2,27,250,22,160,2,80,159,52,41, +38,248,22,134,16,247,22,159,13,11,27,28,23,194,2,23,194,1,86,94,23, +194,1,27,249,22,79,247,22,140,2,247,22,140,2,86,94,250,22,158,2,80, +159,54,41,38,248,22,134,16,247,22,159,13,195,192,27,28,23,204,2,248,22, +147,5,249,22,79,248,22,148,5,23,200,2,23,207,2,23,196,2,86,95,28, +23,212,1,27,250,22,160,2,248,22,80,23,199,2,196,11,28,23,193,1,12, +27,27,28,248,22,17,80,159,55,51,38,80,159,54,51,38,247,22,19,251,22, +33,11,80,159,58,50,38,9,23,197,1,27,248,22,134,16,247,22,159,13,86, +94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14,13,2,3,33, +82,23,195,1,23,196,2,248,28,248,22,17,80,159,56,51,38,32,0,88,163, +36,37,42,11,9,222,33,83,80,159,55,8,32,39,20,20,96,88,163,36,36, +56,8,240,12,64,0,0,9,230,19,15,13,12,8,7,5,2,33,84,23,195, +1,23,198,1,23,208,1,12,28,28,248,22,167,8,23,204,1,11,28,248,22, +142,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23,206,2, +249,22,152,9,248,22,80,23,208,2,2,32,11,249,80,159,53,49,39,28,248, +22,142,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,29,39,23,215, +1,86,94,23,212,1,249,22,79,23,209,1,247,22,162,15,252,22,169,8,23, +209,1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18,159, +11,80,158,36,55,248,80,159,37,8,27,37,249,22,33,11,80,159,39,57,37, +248,22,187,4,80,159,37,56,38,248,22,171,5,80,159,37,37,39,248,22,153, +14,80,159,37,45,39,20,18,159,11,80,158,36,55,248,80,159,37,8,27,37, +249,22,33,11,80,159,39,57,37,20,18,159,11,80,158,36,55,248,80,159,37, +8,27,37,249,22,33,11,80,159,39,57,37,159,36,20,113,159,36,16,1,11, +16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10,38, +80,158,36,36,20,113,159,41,16,28,2,2,2,3,30,2,6,2,7,6,30, +2,6,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,3,30,2,8,72,112,97,116,104,45,115,116,114,105,110, +103,63,196,11,2,9,30,2,8,71,114,101,114,111,111,116,45,112,97,116,104, +196,12,30,2,8,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120, +196,8,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,30,2,23,2,7,6,30,2,8,79,112,97,116,104, +45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,196,10,30,2,8,73, +102,105,110,100,45,99,111,108,45,102,105,108,101,196,3,30,2,8,76,110,111, +114,109,97,108,45,99,97,115,101,45,112,97,116,104,196,7,2,24,2,25,30, +2,23,74,114,101,112,97,114,97,109,101,116,101,114,105,122,101,7,16,0,37, +39,36,16,0,36,16,15,2,16,2,17,2,9,2,13,2,18,2,19,2,12, +2,3,2,11,2,2,2,14,2,15,2,10,2,20,2,22,51,11,11,11,16, +3,2,24,2,21,2,25,16,3,11,11,11,16,3,2,24,2,21,2,25,39, +39,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0, +16,0,36,36,16,23,20,15,16,2,248,22,164,8,69,115,111,45,115,117,102, +102,105,120,80,159,36,36,37,20,15,16,2,88,163,36,38,8,43,8,189,3, +2,3,223,0,33,54,80,159,36,37,37,20,15,16,2,32,0,88,163,8,36, +41,52,11,2,10,222,33,55,80,159,36,44,37,20,15,16,2,20,27,158,32, +0,88,163,8,36,37,42,11,2,11,222,192,32,0,88,163,8,36,37,42,11, +2,11,222,192,80,159,36,45,37,20,15,16,2,247,22,143,2,80,159,36,41, +37,20,15,16,2,8,128,8,80,159,36,46,37,20,15,16,2,249,22,168,8, +8,128,8,11,80,159,36,47,37,20,15,16,2,88,163,8,36,37,50,8,128, +32,2,14,223,0,33,56,80,159,36,48,37,20,15,16,2,88,163,8,36,38, +55,8,128,32,2,15,223,0,33,57,80,159,36,49,37,20,15,16,2,247,22, +75,80,159,36,50,37,20,15,16,2,248,22,18,74,109,111,100,117,108,101,45, +108,111,97,100,105,110,103,80,159,36,51,37,20,15,16,2,11,80,158,36,52, +20,15,16,2,11,80,158,36,53,20,15,16,2,32,0,88,163,36,38,8,25, +11,2,20,222,33,63,80,159,36,54,37,20,15,16,2,11,80,158,36,55,20, 15,16,2,88,164,8,34,37,45,8,240,0,0,40,0,1,21,112,114,101,112, 45,112,108,97,110,101,116,45,114,101,115,111,108,118,101,114,33,37,224,1,0, -33,46,80,159,36,8,28,39,20,15,16,2,248,22,164,8,69,115,111,45,115, -117,102,102,105,120,80,159,36,36,37,20,15,16,2,88,163,36,38,8,43,8, -189,3,2,3,223,0,33,59,80,159,36,37,37,20,15,16,2,32,0,88,163, -8,36,41,52,11,2,10,222,33,60,80,159,36,44,37,20,15,16,2,20,27, -158,32,0,88,163,8,36,37,42,11,2,11,222,192,32,0,88,163,8,36,37, -42,11,2,11,222,192,80,159,36,45,37,20,15,16,2,247,22,143,2,80,159, -36,41,37,20,15,16,2,8,128,8,80,159,36,46,37,20,15,16,2,249,22, -168,8,8,128,8,11,80,159,36,47,37,20,15,16,2,88,163,8,36,37,50, -8,128,32,2,14,223,0,33,61,80,159,36,48,37,20,15,16,2,88,163,8, -36,38,55,8,128,32,2,15,223,0,33,62,80,159,36,49,37,20,15,16,2, -247,22,75,80,159,36,50,37,20,15,16,2,248,22,18,74,109,111,100,117,108, -101,45,108,111,97,100,105,110,103,80,159,36,51,37,20,15,16,2,11,80,158, -36,52,20,15,16,2,11,80,158,36,53,20,15,16,2,32,0,88,163,36,38, -8,25,11,2,20,222,33,68,80,159,36,54,37,20,15,16,2,11,80,158,36, -55,20,15,16,2,27,11,20,19,158,36,90,159,37,10,89,161,37,36,10,20, -25,96,2,22,88,163,8,36,38,54,8,32,9,224,2,1,33,69,88,163,36, -39,49,11,9,223,0,33,70,88,163,36,40,8,32,16,4,8,240,44,240,0, -0,8,240,204,241,0,0,37,36,9,224,2,1,33,85,207,80,159,36,56,37, -20,15,16,2,88,163,36,36,45,16,2,8,130,8,8,184,32,2,24,223,0, -33,86,80,159,36,8,25,37,20,15,16,2,20,27,158,88,163,8,36,36,45, -16,2,36,8,168,32,2,25,223,0,33,87,88,163,8,36,36,45,16,2,36, -8,168,32,2,25,223,0,33,88,80,159,36,8,26,37,96,29,94,2,4,68, -35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115, -116,120,11,2,8,2,23,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 8453); +33,64,80,159,36,8,28,39,20,15,16,2,88,163,36,37,50,8,240,0,0, +3,0,67,103,101,116,45,100,105,114,223,0,33,65,80,159,36,8,29,39,20, +15,16,2,88,163,36,37,49,8,240,0,0,64,0,72,112,97,116,104,45,115, +115,45,62,114,107,116,223,0,33,66,80,159,36,8,30,39,20,15,16,2,88, +163,8,36,37,45,8,240,0,0,4,0,9,223,0,33,67,80,159,36,8,31, +39,20,15,16,2,88,163,36,37,45,8,240,0,128,0,0,9,223,0,33,68, +80,159,36,8,32,39,20,15,16,2,27,11,20,19,158,36,90,159,37,10,89, +161,37,36,10,20,25,96,2,22,88,163,8,36,38,54,8,32,9,224,2,1, +33,69,88,163,36,39,49,11,9,223,0,33,70,88,163,36,40,8,32,16,4, +8,240,44,240,0,0,8,240,204,241,0,0,37,36,9,224,2,1,33,85,207, +80,159,36,56,37,20,15,16,2,88,163,36,36,45,16,2,8,130,8,8,184, +32,2,24,223,0,33,86,80,159,36,8,25,37,20,15,16,2,20,27,158,88, +163,8,36,36,45,16,2,36,8,168,32,2,25,223,0,33,87,88,163,8,36, +36,45,16,2,36,8,168,32,2,25,223,0,33,88,80,159,36,8,26,37,96, +29,94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37, +109,105,110,45,115,116,120,11,2,8,2,23,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 8458); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,50,52,84,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16, -0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,98,1, -0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2, -2,67,35,37,117,116,105,108,115,11,29,94,2,2,69,35,37,110,101,116,119, -111,114,107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2, -2,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2, -66,35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115, -11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,115, -89,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2, -6,36,36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9, -36,36,16,0,159,36,20,113,159,36,16,1,11,16,0,20,26,144,9,2,1, -2,1,29,11,11,11,9,9,11,11,11,18,96,11,46,46,46,36,80,158,36, -36,20,113,159,36,16,0,16,0,37,39,36,16,0,36,16,0,36,11,11,11, -16,0,16,0,16,0,36,36,37,12,11,11,16,0,16,0,16,0,36,36,11, -12,11,11,16,0,16,0,16,0,36,36,16,0,104,2,9,2,8,29,94,2, -2,69,35,37,102,111,114,101,105,103,110,11,29,94,2,2,68,35,37,117,110, -115,97,102,101,11,29,94,2,2,69,35,37,102,108,102,120,110,117,109,11,2, -7,2,6,2,5,2,4,2,3,29,94,2,2,67,35,37,112,108,97,99,101, -11,29,94,2,2,69,35,37,102,117,116,117,114,101,115,11,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 419); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,51,46,49,46,50,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16,0, +29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,98,1,0, +0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2, +67,35,37,117,116,105,108,115,11,29,94,2,2,69,35,37,110,101,116,119,111, +114,107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2, +74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2,66, +35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115,11, +29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,111,90, +0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6, +36,36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9,36, +36,16,0,159,36,20,113,159,36,16,1,11,16,0,20,26,144,9,2,1,2, +1,29,11,11,11,9,9,11,11,11,18,96,11,46,46,46,36,80,158,36,36, +20,113,159,36,16,0,16,0,37,39,36,16,0,36,16,0,36,11,11,11,16, +0,16,0,16,0,36,36,37,12,11,11,16,0,16,0,16,0,36,36,11,12, +11,11,16,0,16,0,16,0,36,36,16,0,104,2,9,2,8,29,94,2,2, +69,35,37,102,111,114,101,105,103,110,11,29,94,2,2,68,35,37,117,110,115, +97,102,101,11,29,94,2,2,69,35,37,102,108,102,120,110,117,109,11,2,7, +2,6,2,5,2,4,2,3,29,94,2,2,67,35,37,112,108,97,99,101,11, +29,94,2,2,69,35,37,102,117,116,117,114,101,115,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 418); } diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index a9d9b42852..98c293b3f7 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -787,7 +787,8 @@ static Scheme_Object *link_module_variable(Scheme_Object *modidx, int pos, int mod_phase, Scheme_Env *env, Scheme_Object **exprs, int which, - char *import_map) + char *import_map, + int flags) { Scheme_Object *modname; Scheme_Env *menv; @@ -840,20 +841,41 @@ static Scheme_Object *link_module_variable(Scheme_Object *modidx, bkt = scheme_global_bucket(varname, menv); if (!self) { + const char *bad_reason = NULL; + if (!bkt->val) { + bad_reason = "uninitialized"; + } else if (flags) { + if (flags & SCHEME_MODVAR_CONST) { + /* The fact that the link target is consistent is a fine + sanity check, but the check is not good enough for the JIT + to rely on it. To be useful for the JIT, we'd have to make + sure that every link goes to the same value. Since we can't + currently guarantee that, all the JIT assumes is that the + value is "fixed". */ + if (!(((Scheme_Bucket_With_Flags *)bkt)->flags & GLOB_IS_CONSISTENT)) + bad_reason = "not constant across all instantiations"; + } else { + if (!(((Scheme_Bucket_With_Flags *)bkt)->flags & GLOB_IS_IMMUTATED)) + bad_reason = "not constant"; + } + } + + if (bad_reason) { scheme_wrong_syntax("link", NULL, varname, "bad variable linkage;\n" - " reference to a variable that is uninitialized\n" + " reference to a variable that is %s\n" " reference phase level: %d\n" " variable module: %D\n" " variable phase: %d\n" " reference in module: %D", + bad_reason, env->phase, modname, mod_phase, env->module ? env->module->modsrc : scheme_false); } - + if (!(((Scheme_Bucket_With_Flags *)bkt)->flags & (GLOB_IS_IMMUTATED | GLOB_IS_LINKED))) ((Scheme_Bucket_With_Flags *)bkt)->flags |= GLOB_IS_LINKED; } @@ -909,7 +931,8 @@ static Scheme_Object *link_toplevel(Scheme_Object **exprs, int which, Scheme_Env -1, mod_phase, env, NULL, 0, - import_map); + import_map, + 0); } else if (SAME_TYPE(SCHEME_TYPE(expr), scheme_variable_type)) { Scheme_Bucket *b = (Scheme_Bucket *)expr; Scheme_Env *home; @@ -925,7 +948,7 @@ static Scheme_Object *link_toplevel(Scheme_Object **exprs, int which, Scheme_Env -1, home->mod_phase, env, exprs, which, - import_map); + import_map, 0); } else { Module_Variable *mv = (Module_Variable *)expr; @@ -939,7 +962,8 @@ static Scheme_Object *link_toplevel(Scheme_Object **exprs, int which, Scheme_Env mv->pos, mv->mod_phase, env, exprs, which, - import_map); + import_map, + SCHEME_MODVAR_FLAGS(mv) & 0x3); } } @@ -1924,7 +1948,8 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro, int flags = GLOB_IS_IMMUTATED; if (SCHEME_PROCP(vals_expr) || SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_unclosed_procedure_type) - || SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_case_lambda_sequence_type)) + || SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_case_lambda_sequence_type) + || SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_inline_variant_type)) flags |= GLOB_IS_CONSISTENT; ((Scheme_Bucket_With_Flags *)b)->flags |= flags; } @@ -2401,6 +2426,10 @@ void scheme_delay_load_closure(Scheme_Closure_Data *data) (SCHEME_TRUEP(SCHEME_VEC_ELS(vinfo)[8]) ? (void *)SCHEME_VEC_ELS(vinfo)[8] : NULL), + (SCHEME_TRUEP(SCHEME_VEC_ELS(vinfo)[9]) + ? (mzshort *)(SCHEME_VEC_ELS(vinfo)[9]) + : NULL), + SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[10]), SCHEME_INT_VAL(SCHEME_VEC_ELS(vinfo)[6]), (SCHEME_TRUEP(SCHEME_VEC_ELS(vinfo)[7]) ? (Scheme_Hash_Tree *)SCHEME_VEC_ELS(vinfo)[7] @@ -4000,6 +4029,7 @@ static void *compile_k(void) top->prefix->num_stxes, top->prefix->num_lifts, NULL, + NULL, 0); } } diff --git a/src/racket/src/optimize.c b/src/racket/src/optimize.c index 0cb6fc8780..639d9d48c3 100644 --- a/src/racket/src/optimize.c +++ b/src/racket/src/optimize.c @@ -202,6 +202,24 @@ static void note_match(int actual, int expected, Optimize_Info *warn_info) } } +int scheme_is_functional_primitive(Scheme_Object *rator, int num_args, int expected_vals) +/* return 2 => results are a constant when arguments are constants */ +{ + if (SCHEME_PRIMP(rator) + && (SCHEME_PRIM_PROC_FLAGS(rator) & (SCHEME_PRIM_IS_OMITABLE | SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) + && (num_args >= ((Scheme_Primitive_Proc *)rator)->mina) + && (num_args <= ((Scheme_Primitive_Proc *)rator)->mu.maxa) + && ((expected_vals < 0) + || ((expected_vals == 1) && !(SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_MULTI_RESULT)) + || (SAME_OBJ(scheme_values_func, rator) + && (expected_vals == num_args)))) { + if (SAME_OBJ(scheme_values_func, rator)) + return 2; + return 1; + } else + return 0; +} + int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved, Optimize_Info *warn_info, int deeper_than, int no_id) /* Checks whether the bytecode `o' returns `vals' values with no @@ -373,13 +391,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved, } if (SCHEME_PRIMP(app->args[0])) { - if ((SCHEME_PRIM_PROC_FLAGS(app->args[0]) & (SCHEME_PRIM_IS_OMITABLE | SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) - && (app->num_args >= ((Scheme_Primitive_Proc *)app->args[0])->mina) - && (app->num_args <= ((Scheme_Primitive_Proc *)app->args[0])->mu.maxa) - && ((vals < 0) - || ((vals == 1) && !(SCHEME_PRIM_PROC_FLAGS(app->args[0]) & SCHEME_PRIM_IS_MULTI_RESULT)) - || (SAME_OBJ(scheme_values_func, app->args[0]) - && (vals == app->num_args)))) { + if (scheme_is_functional_primitive(app->args[0], app->num_args, vals)) { int i; for (i = app->num_args; i--; ) { if (!scheme_omittable_expr(app->args[i + 1], 1, fuel - 1, resolved, warn_info, @@ -400,12 +412,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved, if (vtype == scheme_application2_type) { Scheme_App2_Rec *app = (Scheme_App2_Rec *)o; if (SCHEME_PRIMP(app->rator)) { - if ((SCHEME_PRIM_PROC_FLAGS(app->rator) & (SCHEME_PRIM_IS_OMITABLE | SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) - && (1 >= ((Scheme_Primitive_Proc *)app->rator)->mina) - && (1 <= ((Scheme_Primitive_Proc *)app->rator)->mu.maxa) - && ((vals < 0) - || ((vals == 1) && !(SCHEME_PRIM_PROC_FLAGS(app->rator) & SCHEME_PRIM_IS_MULTI_RESULT)) - || ((vals == 1) && SAME_OBJ(scheme_values_func, app->rator)))) { + if (scheme_is_functional_primitive(app->rator, 1, vals)) { if (scheme_omittable_expr(app->rand, 1, fuel - 1, resolved, warn_info, deeper_than + (resolved ? 1 : 0), 0)) return 1; @@ -420,12 +427,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved, if (vtype == scheme_application3_type) { Scheme_App3_Rec *app = (Scheme_App3_Rec *)o; if (SCHEME_PRIMP(app->rator)) { - if ((SCHEME_PRIM_PROC_FLAGS(app->rator) & (SCHEME_PRIM_IS_OMITABLE | SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) - && (2 >= ((Scheme_Primitive_Proc *)app->rator)->mina) - && (2 <= ((Scheme_Primitive_Proc *)app->rator)->mu.maxa) - && ((vals < 0) - || ((vals == 1) && !(SCHEME_PRIM_PROC_FLAGS(app->rator) & SCHEME_PRIM_IS_MULTI_RESULT)) - || ((vals == 2) && SAME_OBJ(scheme_values_func, app->rator)))) { + if (scheme_is_functional_primitive(app->rator, 2, vals)) { if (scheme_omittable_expr(app->rand1, 1, fuel - 1, resolved, warn_info, deeper_than + (resolved ? 2 : 0), 0) && scheme_omittable_expr(app->rand2, 1, fuel - 1, resolved, warn_info, @@ -1800,7 +1802,7 @@ static Scheme_Object *lookup_constant_proc(Optimize_Info *info, Scheme_Object *r c = SCHEME_BOX_VAL(c); while (SAME_TYPE(SCHEME_TYPE(c), scheme_compiled_let_void_type)) { - /* This must be (let ([x ]) ); see scheme_is_statically_proc() */ + /* This must be (let ([x ]) ); see scheme_is_statically_proc() */ Scheme_Let_Header *lh = (Scheme_Let_Header *)c; Scheme_Compiled_Let_Value *lv = (Scheme_Compiled_Let_Value *)lh->body; c = lv->body; @@ -3095,7 +3097,7 @@ int scheme_is_statically_proc(Scheme_Object *value, Optimize_Info *info) else if (SAME_TYPE(SCHEME_TYPE(value), scheme_case_lambda_sequence_type)) { return 1; } else if (SAME_TYPE(SCHEME_TYPE(value), scheme_compiled_let_void_type)) { - /* Look for (let ([x ]) ), which is generated for optional arguments. */ + /* Look for (let ([x ]) ), which is generated for optional arguments. */ Scheme_Let_Header *lh = (Scheme_Let_Header *)value; if (lh->num_clauses == 1) { Scheme_Compiled_Let_Value *lv = (Scheme_Compiled_Let_Value *)lh->body; diff --git a/src/racket/src/print.c b/src/racket/src/print.c index 252d5085e8..6f6a5d0efb 100644 --- a/src/racket/src/print.c +++ b/src/racket/src/print.c @@ -2885,10 +2885,10 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, if (idx) { print_symtab_ref(pp, idx); } else { - Module_Variable *mv; + Module_Variable *mv = (Module_Variable *)obj; + int flags = SCHEME_MODVAR_FLAGS(mv); print_compact(pp, CPT_MODULE_VAR); - mv = (Module_Variable *)obj; if (SAME_TYPE(SCHEME_TYPE(mv->modidx), scheme_resolved_module_path_type) && SCHEME_SYMBOLP(SCHEME_PTR_VAL(mv->modidx))) { print(SCHEME_PTR_VAL(mv->modidx), notdisplay, 1, ht, mt, pp); @@ -2896,6 +2896,9 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, print(mv->modidx, notdisplay, 1, ht, mt, pp); } print(mv->sym, notdisplay, 1, ht, mt, pp); + if (flags & 0x3) { + print_compact_number(pp, -3-(flags&0x3)); + } if (((Module_Variable *)obj)->mod_phase) { print_compact_number(pp, -2); print_compact_number(pp, mv->mod_phase); diff --git a/src/racket/src/read.c b/src/racket/src/read.c index 2626d7a0b6..b33ebd8c31 100644 --- a/src/racket/src/read.c +++ b/src/racket/src/read.c @@ -4705,6 +4705,11 @@ static Scheme_Object *read_compact(CPort *port, int use_stack) mod = scheme_intern_resolved_module_path(mod); mv->modidx = mod; mv->sym = var; + if (pos < -3) { + pos = -(pos + 3); + SCHEME_MODVAR_FLAGS(mv) = pos; + pos = read_compact_number(port); + } if (pos == -2) { pos = read_compact_number(port); mv->mod_phase = pos; @@ -5366,6 +5371,7 @@ static Scheme_Object *read_compiled(Scheme_Object *port, top->prefix->num_stxes, top->prefix->num_lifts, NULL, + NULL, 0); /* If no exception, the resulting code is ok. */ diff --git a/src/racket/src/resolve.c b/src/racket/src/resolve.c index 8c4d3c575a..5635b1d17c 100644 --- a/src/racket/src/resolve.c +++ b/src/racket/src/resolve.c @@ -2239,7 +2239,7 @@ static Scheme_Object * module_expr_resolve(Scheme_Object *data, Resolve_Info *old_rslv) { Scheme_Module *m = (Scheme_Module *)data; - Scheme_Object *b, *lift_vec; + Scheme_Object *b, *lift_vec, *body = scheme_null; Resolve_Prefix *rp; Resolve_Info *rslv; int i, cnt; @@ -2264,19 +2264,27 @@ module_expr_resolve(Scheme_Object *data, Resolve_Info *old_rslv) for (i = 0; i < cnt; i++) { Scheme_Object *e; e = scheme_resolve_expr(SCHEME_VEC_ELS(m->bodies[0])[i], rslv); - SCHEME_VEC_ELS(m->bodies[0])[i] = e; + + /* add lift just before the expression that introduced it; + this ordering is needed for bytecode validation of + constantness for top-level references */ + lift_vec = rslv->lifts; + if (!SCHEME_NULLP(SCHEME_VEC_ELS(lift_vec)[0])) { + body = scheme_append(SCHEME_VEC_ELS(lift_vec)[0], body); + SCHEME_VEC_ELS(lift_vec)[0] = scheme_null; + } + + body = scheme_make_pair(e, body); } m->max_let_depth = rslv->max_let_depth; lift_vec = rslv->lifts; - if (!SCHEME_NULLP(SCHEME_VEC_ELS(lift_vec)[0])) { - b = scheme_append(SCHEME_VEC_ELS(lift_vec)[0], scheme_vector_to_list(m->bodies[0])); - b = scheme_list_to_vector(b); - m->bodies[0] = b; - } rp->num_lifts = SCHEME_INT_VAL(SCHEME_VEC_ELS(lift_vec)[1]); + body = scheme_list_to_vector(scheme_reverse(body)); + m->bodies[0] = body; + rp = scheme_remap_prefix(rp, rslv); m->prefix = rp; diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index 9fdec67d23..c81e6053a8 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -2346,21 +2346,6 @@ typedef struct Scheme_Object * typedef struct CPort Mz_CPort; -typedef mzshort **Validate_TLS; -struct Validate_Clearing; - -typedef void (*Scheme_Syntax_Validater)(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); - -typedef struct Scheme_Object *(*Scheme_Syntax_Executer)(struct Scheme_Object *data); - -typedef struct Scheme_Object *(*Scheme_Syntax_Jitter)(struct Scheme_Object *data); - typedef struct Scheme_Closure_Data { Scheme_Inclhash_Object iso; /* keyex used for flags */ @@ -2883,6 +2868,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved, Optimize_Info *warn_info, int deeper_than, int no_id); int scheme_might_invoke_call_cc(Scheme_Object *value); int scheme_is_liftable(Scheme_Object *o, int bind_count, int fuel, int as_rator); +int scheme_is_functional_primitive(Scheme_Object *rator, int num_args, int expected_vals); int scheme_is_env_variable_boxed(Scheme_Comp_Env *env, int which); @@ -2922,23 +2908,16 @@ Scheme_Env *scheme_environment_from_dummy(Scheme_Object *dummy); void scheme_validate_code(Mz_CPort *port, Scheme_Object *code, int depth, int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + Scheme_Object **toplevels, int code_vec); -void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, - Scheme_Object *app_rator, int proc_with_refs_ok, - int result_ignored, struct Validate_Clearing *vc, - int tailpos, int need_flonum, Scheme_Hash_Tree *procs); -int scheme_validate_rator_wants_box(Scheme_Object *app_rator, int pos, - int hope, - Validate_TLS tls, - int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map); +typedef mzshort **Validate_TLS; +struct Validate_Clearing; void scheme_validate_closure(Mz_CPort *port, Scheme_Object *expr, - char *new_stack, Validate_TLS tls, + char *closure_stack, Validate_TLS tls, int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, int self_pos_in_closure, Scheme_Hash_Tree *procs); #define TRACK_ILL_FORMED_CATCH_LINES 1 diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index 2c076d18bf..eec864f698 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.3.1.1" +#define MZSCHEME_VERSION "5.3.1.2" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 3 #define MZSCHEME_VERSION_Z 1 -#define MZSCHEME_VERSION_W 1 +#define MZSCHEME_VERSION_W 2 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/validate.c b/src/racket/src/validate.c index 18d0372fc3..a17a87389c 100644 --- a/src/racket/src/validate.c +++ b/src/racket/src/validate.c @@ -34,6 +34,20 @@ /* FIXME: validation doesn't check CLOS_SINGLE_RESULT or CLOS_PRESERVES_MARKS. (Maybe check them in the JIT pass?) */ +static int validate_expr(Mz_CPort *port, Scheme_Object *expr, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + Scheme_Object *app_rator, int proc_with_refs_ok, + int result_ignored, struct Validate_Clearing *vc, + int tailpos, int need_flonum, Scheme_Hash_Tree *procs, + int expected_results); +static int validate_rator_wants_box(Scheme_Object *app_rator, int pos, + int hope, + Validate_TLS tls, + int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map); + #ifdef MZ_PRECISE_GC static void register_traversers(void); #endif @@ -110,12 +124,14 @@ static void noclear_stack_push(struct Validate_Clearing *vc, int pos) void scheme_validate_code(Mz_CPort *port, Scheme_Object *code, int depth, int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + Scheme_Object **toplevels, int code_vec) { char *stack; int delta; struct Validate_Clearing *vc; Validate_TLS tls; + mzshort *tl_state; depth += ((num_toplevels || num_stxes || num_lifts) ? 1 : 0); @@ -129,60 +145,117 @@ void scheme_validate_code(Mz_CPort *port, Scheme_Object *code, delta = depth - ((num_toplevels || num_stxes || num_lifts) ? 1 : 0); tls = MALLOC_N(mzshort*, num_lifts); + + if (code_vec) { + int i; + tl_state = MALLOC_N_ATOMIC(mzshort, num_toplevels); + memset(tl_state, 0, sizeof(mzshort) * num_toplevels); + for (i = 0; i < num_toplevels; i++) { + if (SAME_TYPE(SCHEME_TYPE(toplevels[i]), scheme_module_variable_type)) { + int mv_flags = SCHEME_MODVAR_FLAGS(toplevels[i]); + if (mv_flags & SCHEME_MODVAR_CONST) + tl_state[i] = SCHEME_TOPLEVEL_CONST; + else if (mv_flags & SCHEME_MODVAR_FIXED) + tl_state[i] = SCHEME_TOPLEVEL_FIXED; + else + tl_state[i] = SCHEME_TOPLEVEL_READY; + } + if (0) { + if (i < num_toplevels) { + if (SCHEME_SYMBOLP(toplevels[i])) + printf("%d is %s\n", i, SCHEME_SYM_VAL(toplevels[i])); + if (SAME_TYPE(SCHEME_TYPE(toplevels[i]), scheme_module_variable_type)) + printf("%d is imported %s (%d)\n", i, + SCHEME_SYM_VAL(((Module_Variable *)toplevels[i])->sym), + SCHEME_MODVAR_FLAGS(toplevels[i]) & 0x3); + } + } + } + } else { + tl_state = NULL; + } vc = make_clearing_stack(); if (code_vec) { - int i, cnt; + int i, cnt, tl_timestamp = 1; cnt = SCHEME_VEC_SIZE(code); for (i = 0; i < cnt; i++) { reset_clearing(vc); - scheme_validate_expr(port, SCHEME_VEC_ELS(code)[i], - stack, tls, - depth, delta, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, - vc, 1, 0, NULL); - } - } else { - scheme_validate_expr(port, code, + if (!validate_expr(port, SCHEME_VEC_ELS(code)[i], stack, tls, depth, delta, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, NULL, 0, 0, - vc, 1, 0, NULL); + vc, 1, 0, NULL, -1)) { + tl_timestamp++; + if (0) { + printf("increment to %d for %d %p\n", tl_timestamp, + SCHEME_TYPE(SCHEME_VEC_ELS(code)[i]), + SCHEME_VEC_ELS(code)[i]); + } + } + } + } else { + validate_expr(port, code, + stack, tls, + depth, delta, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, 0, + NULL, 0, 0, + vc, 1, 0, NULL, -1); } } +static int validate_join(int r1, int r2) +/* both r1 and r2 is result */ +{ + if (!r1 || !r2) return 0; + if ((r1 == 2) && (r2 == 2)) return 2; + return 1; +} + +static int validate_join_seq(int r1, int r2) +/* only r2 is result */ +{ + if (!r1 || !r2) return 0; + return r2; +} + /*========================================================================*/ /* other syntax */ /*========================================================================*/ -static void validate_toplevel(Scheme_Object *expr, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int delta, - int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, - int skip_refs_check) +static int validate_toplevel(Scheme_Object *expr, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int delta, + int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int skip_refs_check) { if (!SAME_TYPE(scheme_toplevel_type, SCHEME_TYPE(expr))) scheme_ill_formed_code(port); - scheme_validate_expr(port, expr, stack, tls, + return validate_expr(port, expr, stack, tls, depth, delta, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, NULL, skip_refs_check ? 1 : 0, 0, - make_clearing_stack(), 0, 0, NULL); + make_clearing_stack(), 0, 0, NULL, 1); } -static void define_values_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs) +static int define_values_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs) { - int i, size; + int i, size, flags, result; Scheme_Object *val, *only_var; val = SCHEME_VEC_ELS(data)[0]; @@ -192,10 +265,11 @@ static void define_values_validate(Scheme_Object *data, Mz_CPort *port, only_var = SCHEME_VEC_ELS(data)[1]; else only_var = NULL; - + for (i = 1; i < size; i++) { validate_toplevel(SCHEME_VEC_ELS(data)[i], port, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + NULL, tl_timestamp, 1); } @@ -270,9 +344,9 @@ static void define_values_validate(Scheme_Object *data, Mz_CPort *port, for (i = 0; i < cnt; i++) { if (a[i + 1]) { int is; - is = scheme_validate_rator_wants_box(val, i, - a[i + 1] == 2, - tls, num_toplevels, num_stxes, num_lifts, tl_use_map); + is = validate_rator_wants_box(val, i, + a[i + 1] == 2, + tls, num_toplevels, num_stxes, num_lifts, tl_use_map); if ((is && (a[i + 1] == 1)) || (!is && (a[i + 1] == 2))) scheme_ill_formed_code(port); @@ -283,75 +357,136 @@ static void define_values_validate(Scheme_Object *data, Mz_CPort *port, only_var = NULL; } - scheme_validate_expr(port, val, stack, tls, - depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, !!only_var, 0, vc, 0, 0, NULL); + result = validate_expr(port, val, stack, tls, + depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, !!only_var, 0, vc, 0, 0, NULL, + size-1); + + flags = SCHEME_TOPLEVEL_READY; + if (result == 2) { + /* We may treat more things as constant (more than fixed) + than the compiler would in terms of copyable literals, but + that's good enough for ensuring safety. */ + flags = SCHEME_TOPLEVEL_CONST; + } + + for (i = 1; i < size; i++) { + int ts = (tl_timestamp + (result ? 0 : 1)); + if (tl_state) { + int p = SCHEME_TOPLEVEL_POS(SCHEME_VEC_ELS(data)[i]); + if (p < num_toplevels) { + int s = -tl_state[p]; + int expected_flags = s & SCHEME_TOPLEVEL_FLAGS_MASK; + int this_flags = flags; + if ((this_flags == SCHEME_TOPLEVEL_READY) + && (SCHEME_TOPLEVEL_FLAGS(SCHEME_VEC_ELS(data)[i]) & SCHEME_TOPLEVEL_SEAL)) + this_flags = SCHEME_TOPLEVEL_FIXED; + if (0) { + printf("%d is %d for %d %p; at %d\n", p, this_flags, SCHEME_TYPE(val), val, ts); + } + if (tl_state[p] > 0) + scheme_ill_formed_code(port); + if ((expected_flags > this_flags) + || (expected_flags + /* Use "<=" instead of "<" to prevent things like + `(define x x)' with `x' claimed as constant. The + `tl_timestamp++' before checking a closure body + allows things like `(define x (lambda () x))'. */ + && ((s >> 2) <= ts))) + scheme_ill_formed_code(port); + tl_state[p] = (ts << 2) | this_flags; + } + } + } + + return result; } -static void set_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs) +static int set_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs) { Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data; + int r1, r2; + + r1 = validate_expr(port, sb->val, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); + r2 = validate_toplevel(sb->var, port, stack, tls, depth, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + 0); - scheme_validate_expr(port, sb->val, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); - validate_toplevel(sb->var, port, stack, tls, depth, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - 0); + return validate_join(validate_join_seq(r1, r2), 2); } static void ref_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { validate_toplevel(SCHEME_PTR1_VAL(data), port, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, 0); if (!SCHEME_FALSEP(SCHEME_PTR2_VAL(data))) validate_toplevel(SCHEME_PTR2_VAL(data), port, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, 0); } -static void apply_values_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs) +static int apply_values_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs) { Scheme_Object *f, *e; + int r1, r2; f = SCHEME_PTR1_VAL(data); e = SCHEME_PTR2_VAL(data); - scheme_validate_expr(port, f, stack, tls, - depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); - scheme_validate_expr(port, e, stack, tls, - depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); + r1 = validate_expr(port, f, stack, tls, + depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); + r2 = validate_expr(port, e, stack, tls, + depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, -1); + + return validate_join(r1, r2); } static void inline_variant_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { @@ -360,20 +495,24 @@ static void inline_variant_validate(Scheme_Object *data, Mz_CPort *port, f1 = SCHEME_VEC_ELS(data)[0]; f2 = SCHEME_VEC_ELS(data)[1]; - scheme_validate_expr(port, f1, stack, tls, - depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); - scheme_validate_expr(port, f2, stack, tls, - depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); + validate_expr(port, f1, stack, tls, + depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); + validate_expr(port, f2, stack, tls, + depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); } static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { @@ -389,9 +528,10 @@ static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port, char *stac if (!SAME_TYPE(SCHEME_TYPE(e), scheme_unclosed_procedure_type) && !SAME_TYPE(SCHEME_TYPE(e), scheme_closure_type)) scheme_ill_formed_code(port); - scheme_validate_expr(port, e, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); + validate_expr(port, e, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); } } @@ -406,48 +546,61 @@ static void validate_boxenv(int p, Mz_CPort *port, char *stack, int depth, int d stack[p] = VALID_BOX; } -static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs) +static int bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs, + int expected_results) { validate_boxenv(SCHEME_INT_VAL(SCHEME_PTR1_VAL(data)), port, stack, depth, delta, letlimit); - scheme_validate_expr(port, SCHEME_PTR2_VAL(data), stack, tls, depth, letlimit, delta, + return validate_expr(port, SCHEME_PTR2_VAL(data), stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, result_ignored, vc, tailpos, 0, procs); + tl_state, tl_timestamp, + NULL, 0, result_ignored, vc, tailpos, 0, procs, expected_results); } -static void begin0_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs) +static int begin0_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs, + int expected_results) { Scheme_Sequence *seq = (Scheme_Sequence *)data; - int i; + int i, r, result = 2; if (!SAME_TYPE(SCHEME_TYPE(seq), scheme_begin0_sequence_type) && !SAME_TYPE(SCHEME_TYPE(seq), scheme_sequence_type)) scheme_ill_formed_code(port); for (i = 0; i < seq->count; i++) { - scheme_validate_expr(port, seq->array[i], stack, tls, - depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, i > 0, vc, 0, 0, procs); + r = validate_expr(port, seq->array[i], stack, tls, + depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, i > 0, vc, 0, 0, procs, + (i > 0) ? -1 : expected_results); + result = validate_join_seq(r, result); } + + return result; } static void do_define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, int for_stx) { Resolve_Prefix *rp; @@ -481,14 +634,17 @@ static void do_define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, validate_toplevel(dummy, port, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, 0); if (!for_stx) { - scheme_validate_code(port, SCHEME_VEC_ELS(data)[0], sdepth, rp->num_toplevels, rp->num_stxes, rp->num_lifts, NULL, 0); + scheme_validate_code(port, SCHEME_VEC_ELS(data)[0], sdepth, rp->num_toplevels, rp->num_stxes, rp->num_lifts, + NULL, NULL, 0); } else { val = SCHEME_VEC_ELS(data)[0]; while (SCHEME_PAIRP(val)) { - scheme_validate_code(port, SCHEME_CAR(val), sdepth, rp->num_toplevels, rp->num_stxes, rp->num_lifts, NULL, 0); + scheme_validate_code(port, SCHEME_CAR(val), sdepth, rp->num_toplevels, rp->num_stxes, rp->num_lifts, + NULL, NULL, 0); val = SCHEME_CDR(val); } if (!SCHEME_NULLP(val)) @@ -500,24 +656,30 @@ static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { do_define_syntaxes_validate(data, port, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, 0); + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, 0); } static void begin_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { do_define_syntaxes_validate(data, port, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, 1); + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp,1); } /*========================================================================*/ @@ -536,6 +698,8 @@ static Scheme_Object *validate_k(void) Scheme_Hash_Tree *procs = (Scheme_Hash_Tree *)(((void **)p->ku.k.p5)[3]); struct Validate_Clearing *vc = (struct Validate_Clearing *)p->ku.k.p4; void *tl_use_map = (((void **)p->ku.k.p5)[4]); + mzshort *tl_state = (((void **)p->ku.k.p5)[5]); + int r; p->ku.k.p1 = NULL; p->ku.k.p2 = NULL; @@ -543,22 +707,23 @@ static Scheme_Object *validate_k(void) p->ku.k.p4 = NULL; p->ku.k.p5 = NULL; - scheme_validate_expr(port, expr, stack, tls, - args[0], args[1], args[2], - args[3], args[4], args[5], tl_use_map, - app_rator, args[6], args[7], vc, args[8], - args[9], procs); - - return scheme_true; + r = validate_expr(port, expr, stack, tls, + args[0], args[1], args[2], + args[3], args[4], args[5], tl_use_map, + tl_state, args[10], + app_rator, args[6], args[7], vc, args[8], + args[9], procs, args[11]); + + return scheme_make_integer(r); } /* FIXME: need to validate that a flonum is provided when a procedure expects a flonum */ -int scheme_validate_rator_wants_box(Scheme_Object *app_rator, int pos, - int hope, - Validate_TLS tls, - int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map) +int validate_rator_wants_box(Scheme_Object *app_rator, int pos, + int hope, + Validate_TLS tls, + int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map) { Scheme_Closure_Data *data = NULL; Scheme_Type ty; @@ -660,6 +825,7 @@ static int argument_to_arity_error(Scheme_Object *app_rator, int proc_with_refs_ void scheme_validate_closure(Mz_CPort *port, Scheme_Object *expr, char *closure_stack, Validate_TLS tls, int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, int self_pos_in_closure, Scheme_Hash_Tree *procs) { Scheme_Closure_Data *data = (Scheme_Closure_Data *)expr; @@ -732,9 +898,10 @@ void scheme_validate_closure(Mz_CPort *port, Scheme_Object *expr, tl_use_map = data->tl_map; } - scheme_validate_expr(port, data->code, new_stack, tls, sz, sz, base, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 1, 0, procs); + validate_expr(port, data->code, new_stack, tls, sz, sz, base, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 1, 0, procs, -1); } static Scheme_Hash_Tree *as_nonempty_procs(Scheme_Hash_Tree *procs) @@ -748,6 +915,7 @@ static void validate_unclosed_procedure(Mz_CPort *port, Scheme_Object *expr, char *stack, Validate_TLS tls, int depth, int delta, int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, Scheme_Object *app_rator, int proc_with_refs_ok, int self_pos, Scheme_Hash_Tree *procs) { @@ -833,11 +1001,13 @@ static void validate_unclosed_procedure(Mz_CPort *port, Scheme_Object *expr, && !argument_to_arity_error(app_rator, proc_with_refs_ok)) scheme_ill_formed_code(port); } + + tl_timestamp++; /* closure delays use; needed for self-use <= check */ if (SCHEME_RPAIRP(data->code)) { /* Delay validation */ Scheme_Object *vec; - vec = scheme_make_vector(9, NULL); + vec = scheme_make_vector(11, NULL); SCHEME_VEC_ELS(vec)[0] = SCHEME_CAR(data->code); SCHEME_VEC_ELS(vec)[1] = (Scheme_Object *)closure_stack; SCHEME_VEC_ELS(vec)[2] = (Scheme_Object *)tls; @@ -847,10 +1017,13 @@ static void validate_unclosed_procedure(Mz_CPort *port, Scheme_Object *expr, SCHEME_VEC_ELS(vec)[6] = scheme_make_integer(self_pos_in_closure); SCHEME_VEC_ELS(vec)[7] = new_procs ? (Scheme_Object *)new_procs : scheme_false; SCHEME_VEC_ELS(vec)[8] = tl_use_map ? tl_use_map : scheme_false; + SCHEME_VEC_ELS(vec)[9] = tl_state ? (Scheme_Object *)tl_state : scheme_false; + SCHEME_VEC_ELS(vec)[10] = scheme_make_integer(tl_timestamp); SCHEME_CAR(data->code) = vec; } else scheme_validate_closure(port, expr, closure_stack, tls, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, self_pos_in_closure, new_procs); } @@ -875,7 +1048,9 @@ static void module_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { @@ -891,11 +1066,12 @@ static void module_validate(Scheme_Object *data, Mz_CPort *port, validate_toplevel(m->dummy, port, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, 0); scheme_validate_code(port, m->bodies[0], m->max_let_depth, m->prefix->num_toplevels, m->prefix->num_stxes, m->prefix->num_lifts, - NULL, + NULL, m->prefix->toplevels, 1); /* validate exp-time code */ @@ -909,7 +1085,7 @@ static void module_validate(Scheme_Object *data, Mz_CPort *port, e = SCHEME_VEC_ELS(e)[1]; scheme_validate_code(port, e, let_depth, - rp->num_toplevels, rp->num_stxes, rp->num_lifts, NULL, + rp->num_toplevels, rp->num_stxes, rp->num_lifts, NULL, NULL, 0); } } @@ -919,7 +1095,9 @@ static void top_level_require_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, + void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + int result_ignored, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { @@ -938,6 +1116,14 @@ static void check_flo(Scheme_Object *expr, int need_flonum, Mz_CPort *port) } } +static int validate_join_const(int result, int expected_results) +{ + return validate_join_seq(result, + (((expected_results == 1) || (expected_results == -1)) + ? 2 + : 0)); +} + #define CAN_RESET_STACK_SLOT 0 #if !CAN_RESET_STACK_SLOT # define WHEN_CAN_RESET_STACK_SLOT(x) 0 @@ -945,26 +1131,33 @@ static void check_flo(Scheme_Object *expr, int need_flonum, Mz_CPort *port) # define WHEN_CAN_RESET_STACK_SLOT(x) (x) #endif -void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, - Scheme_Object *app_rator, int proc_with_refs_ok, - int result_ignored, - struct Validate_Clearing *vc, int tailpos, - int need_flonum, Scheme_Hash_Tree *procs) +static int validate_expr(Mz_CPort *port, Scheme_Object *expr, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, + mzshort *tl_state, mzshort tl_timestamp, + Scheme_Object *app_rator, int proc_with_refs_ok, + int result_ignored, + struct Validate_Clearing *vc, int tailpos, + int need_flonum, Scheme_Hash_Tree *procs, + int expected_results) +/* result is 1 if result is `expected_results' values with no + exceptions and no use of any non-ready binding; it's 2 if the + result is furthermore a "constant" (i.e., the same shape result for + every instantiation) */ { Scheme_Type type; - int did_one = 0, vc_merge = 0, vc_merge_start = 0; + int did_one = 0, vc_merge = 0, vc_merge_start = 0, result = 2; #ifdef DO_STACK_CHECK # include "mzstkchk.h" { Scheme_Thread *p = scheme_current_thread; + Scheme_Object *r; void **pr; int *args; - args = MALLOC_N_ATOMIC(int, 10); + args = MALLOC_N_ATOMIC(int, 11); p->ku.k.p1 = (void *)port; p->ku.k.p2 = (void *)expr; @@ -981,6 +1174,8 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, args[7] = result_ignored; args[8] = tailpos; args[9] = need_flonum; + args[10] = tl_timestamp; + args[11] = expected_results; pr = MALLOC_N(void*, 5); pr[0] = (void *)args; @@ -988,21 +1183,22 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, pr[2] = (void *)tls; pr[3] = (void *)procs; pr[4] = tl_use_map; + pr[5] = tl_state; p->ku.k.p5 = (void *)pr; - (void)scheme_handle_stack_overflow(validate_k); + r = scheme_handle_stack_overflow(validate_k); - return; + return SCHEME_INT_VAL(r); } #endif top: if (did_one) { if (app_rator) { - if (scheme_validate_rator_wants_box(app_rator, proc_with_refs_ok - 2, 0, - tls, num_toplevels, num_stxes, num_lifts, - tl_use_map)) + if (validate_rator_wants_box(app_rator, proc_with_refs_ok - 2, 0, + tls, num_toplevels, num_stxes, num_lifts, + tl_use_map)) scheme_ill_formed_code(port); app_rator = NULL; } @@ -1018,6 +1214,7 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, int c = SCHEME_TOPLEVEL_DEPTH(expr); int d = c + delta; int p = SCHEME_TOPLEVEL_POS(expr); + int flags = (SCHEME_TOPLEVEL_FLAGS(expr) & SCHEME_TOPLEVEL_FLAGS_MASK); no_flo(need_flonum, port); @@ -1044,6 +1241,26 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, } } + if ((flags > SCHEME_TOPLEVEL_UNKNOWN) && tl_state && (p < num_toplevels)) { + if (tl_state[p] <= 0) { + /* record expectation */ + int s = -tl_state[p]; + int new_flags; + new_flags = ((flags > (s & SCHEME_TOPLEVEL_FLAGS_MASK)) + ? flags + : (s & SCHEME_TOPLEVEL_FLAGS_MASK)); + s >>= 2; + if (!s || (tl_timestamp < s)) + s = tl_timestamp; + tl_state[p] = -((s << 2) | new_flags); + } else { + /* check expectation */ + if (((tl_state[p] & SCHEME_TOPLEVEL_FLAGS_MASK) < flags) + || ((tl_state[p] >> 2) > tl_timestamp)) + scheme_ill_formed_code(port); + } + } + if ((proc_with_refs_ok != 1) && !argument_to_arity_error(app_rator, proc_with_refs_ok)) { if (p >= (num_toplevels + num_stxes + (num_stxes ? 1 : 0))) { @@ -1073,6 +1290,14 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, } } } + + if (flags == SCHEME_TOPLEVEL_UNKNOWN) + result = validate_join_seq(result, 0); + else { + result = validate_join_const(result, expected_results); + if (flags < SCHEME_TOPLEVEL_CONST) + result = validate_join_seq(result, 1); + } } break; case scheme_local_type: @@ -1096,9 +1321,9 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, /* ok to look up and ignore box or flonum */ } else if ((proc_with_refs_ok >= 2) && ((stack[p] == VALID_BOX) || (stack[p] == VALID_BOX_NOCLEAR)) - && scheme_validate_rator_wants_box(app_rator, proc_with_refs_ok - 2, 1, - tls, num_toplevels, num_stxes, num_lifts, - tl_use_map)) { + && validate_rator_wants_box(app_rator, proc_with_refs_ok - 2, 1, + tls, num_toplevels, num_stxes, num_lifts, + tl_use_map)) { /* It's ok - the function wants us to pass it a box, and we did. */ app_rator = NULL; @@ -1128,6 +1353,8 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, if (scheme_hash_tree_get(procs, scheme_make_integer(p))) scheme_ill_formed_code(port); } + + result = validate_join_const(result, expected_results); } break; case scheme_local_unbox_type: @@ -1155,13 +1382,15 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, stack[p] = VALID_BOX_NOCLEAR; } } + + result = validate_join_const(result, expected_results); } break; case scheme_application_type: { Scheme_App_Rec *app = (Scheme_App_Rec *)expr; - int i, n; - + int i, n, r; + check_flo(expr, need_flonum, port); n = app->num_args + 1; @@ -1172,18 +1401,26 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, memset(stack + delta, VALID_NOT, n - 1); for (i = 0; i < n; i++) { - scheme_validate_expr(port, app->args[i], stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - i ? app->args[0] : NULL, i + 1, 0, vc, 0, 0, procs); + r = validate_expr(port, app->args[i], stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + i ? app->args[0] : NULL, i + 1, 0, vc, 0, 0, procs, 1); + result = validate_join(result, r); } if (tailpos) check_self_call_valid(app->args[0], port, vc, delta, stack); + + if (result) { + r = scheme_is_functional_primitive(app->args[0], app->num_args, expected_results); + result = validate_join(result, r); + } } break; case scheme_application2_type: { Scheme_App2_Rec *app = (Scheme_App2_Rec *)expr; + int r; check_flo(expr, need_flonum, port); @@ -1192,20 +1429,30 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, scheme_ill_formed_code(port); stack[delta] = VALID_NOT; - scheme_validate_expr(port, app->rator, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 1, 0, vc, 0, 0, procs); - scheme_validate_expr(port, app->rand, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - app->rator, 2, 0, vc, 0, 0, procs); + r = validate_expr(port, app->rator, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 1, 0, vc, 0, 0, procs, 1); + result = validate_join(r, result); + r = validate_expr(port, app->rand, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + app->rator, 2, 0, vc, 0, 0, procs, 1); + result = validate_join(r, result); if (tailpos) check_self_call_valid(app->rator, port, vc, delta, stack); + + if (result) { + r = scheme_is_functional_primitive(app->rator, 1, expected_results); + result = validate_join(result, r); + } } break; case scheme_application3_type: { Scheme_App3_Rec *app = (Scheme_App3_Rec *)expr; + int r; check_flo(expr, need_flonum, port); @@ -1215,18 +1462,29 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, stack[delta] = VALID_NOT; stack[delta+1] = VALID_NOT; - scheme_validate_expr(port, app->rator, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 1, 0, vc, 0, 0, procs); - scheme_validate_expr(port, app->rand1, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - app->rator, 2, 0, vc, 0, 0, procs); - scheme_validate_expr(port, app->rand2, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - app->rator, 3, 0, vc, 0, 0, procs); + r = validate_expr(port, app->rator, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 1, 0, vc, 0, 0, procs, 1); + result = validate_join(r, result); + r = validate_expr(port, app->rand1, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + app->rator, 2, 0, vc, 0, 0, procs, 1); + result = validate_join(r, result); + r = validate_expr(port, app->rand2, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + app->rator, 3, 0, vc, 0, 0, procs, 1); + result = validate_join(r, result); if (tailpos) check_self_call_valid(app->rator, port, vc, delta, stack); + + if (result) { + r = scheme_is_functional_primitive(app->rator, 2, expected_results); + result = validate_join(r, result); + } } break; case scheme_sequence_type: @@ -1234,16 +1492,18 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, { Scheme_Sequence *seq = (Scheme_Sequence *)expr; int cnt; - int i; + int i, r; no_flo(need_flonum, port); cnt = seq->count; for (i = 0; i < cnt - 1; i++) { - scheme_validate_expr(port, seq->array[i], stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 1, vc, 0, 0, procs); + r = validate_expr(port, seq->array[i], stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 1, vc, 0, 0, procs, -1); + result = validate_join_seq(result, r); } expr = seq->array[cnt - 1]; @@ -1253,23 +1513,32 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, case scheme_branch_type: { Scheme_Branch_Rec *b; - int vc_pos, vc_ncpos; + int vc_pos, vc_ncpos, r; no_flo(need_flonum, port); b = (Scheme_Branch_Rec *)expr; - scheme_validate_expr(port, b->test, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); + r = validate_expr(port, b->test, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); + result = validate_join(r, result); + /* This is where letlimit is useful. It prevents let-assignment in the "then" branch that could permit bad code in the "else" branch (or the same thing with either branch affecting later code in a sequence). */ letlimit = delta; vc_pos = vc->stackpos; vc_ncpos = vc->ncstackpos; - scheme_validate_expr(port, b->tbranch, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, result_ignored, vc, tailpos, 0, procs); + r = validate_expr(port, b->tbranch, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, result_ignored, vc, tailpos, 0, procs, + expected_results); + result = validate_join_seq(result, r); + + /* since we're branchig, the result isn't constant: */ + result = validate_join(1, result); /* Rewind clears and noclears, but also save the clears, so that the branches' effects can be merged. */ @@ -1302,15 +1571,21 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, case scheme_with_cont_mark_type: { Scheme_With_Continuation_Mark *wcm = (Scheme_With_Continuation_Mark *)expr; + int r; no_flo(need_flonum, port); - scheme_validate_expr(port, wcm->key, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); - scheme_validate_expr(port, wcm->val, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); + r = validate_expr(port, wcm->key, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); + result = validate_join_seq(result, r); + r = validate_expr(port, wcm->val, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); + result = validate_join_seq(result, r); + expr = wcm->body; goto top; } @@ -1330,6 +1605,8 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, || (p != num_toplevels) || (i >= num_stxes)) scheme_ill_formed_code(port); + + result = validate_join_const(result, expected_results); } break; case scheme_unclosed_procedure_type: @@ -1337,17 +1614,23 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, no_flo(need_flonum, port); validate_unclosed_procedure(port, expr, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, app_rator, proc_with_refs_ok, -1, procs); + + result = validate_join_const(result, expected_results); } break; case scheme_let_value_type: { Scheme_Let_Value *lv = (Scheme_Let_Value *)expr; - int q, p, c, i; + int q, p, c, i, r; - scheme_validate_expr(port, lv->value, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); + r = validate_expr(port, lv->value, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, lv->count); + result = validate_join_seq(r, result); + /* memset(stack, VALID_NOT, delta); <-- seems unnecessary (and slow) */ c = lv->count; @@ -1430,6 +1713,7 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, for (i = 0; i < c; i++) { validate_unclosed_procedure(port, l->procs[i], stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, NULL, 1, i, procs); } @@ -1440,15 +1724,19 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, case scheme_let_one_type: { Scheme_Let_One *lo = (Scheme_Let_One *)expr; + int r; --delta; if (delta < 0) scheme_ill_formed_code(port); stack[delta] = VALID_UNINIT; - - scheme_validate_expr(port, lo->value, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, SCHEME_LET_EVAL_TYPE(lo) & LET_ONE_FLONUM, procs); + + r = validate_expr(port, lo->value, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, SCHEME_LET_EVAL_TYPE(lo) & LET_ONE_FLONUM, procs, + 1); + result = validate_join_seq(r, result); #if !CAN_RESET_STACK_SLOT if (stack[delta] != VALID_UNINIT) @@ -1470,80 +1758,102 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, case scheme_define_values_type: no_flo(need_flonum, port); - define_values_validate(expr, port, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - result_ignored, vc, tailpos, procs); + result = validate_join_seq(result, + define_values_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + result_ignored, vc, tailpos, procs)); break; case scheme_define_syntaxes_type: no_flo(need_flonum, port); define_syntaxes_validate(expr, port, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, result_ignored, vc, tailpos, procs); break; case scheme_begin_for_syntax_type: no_flo(need_flonum, port); begin_for_syntaxes_validate(expr, port, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, result_ignored, vc, tailpos, procs); break; case scheme_set_bang_type: no_flo(need_flonum, port); - set_validate(expr, port, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - result_ignored, vc, tailpos, procs); + result = validate_join_seq(result, + set_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + result_ignored, vc, tailpos, procs)); break; case scheme_boxenv_type: no_flo(need_flonum, port); - bangboxenv_validate(expr, port, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - result_ignored, vc, tailpos, procs); + result = validate_join_seq(result, + bangboxenv_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + result_ignored, vc, tailpos, procs, expected_results)); break; case scheme_begin0_sequence_type: no_flo(need_flonum, port); - begin0_validate(expr, port, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - result_ignored, vc, tailpos, procs); + result = validate_join_seq(result, + begin0_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + result_ignored, vc, tailpos, procs, expected_results)); break; case scheme_require_form_type: no_flo(need_flonum, port); top_level_require_validate(expr, port, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, result_ignored, vc, tailpos, procs); break; case scheme_varref_form_type: no_flo(need_flonum, port); ref_validate(expr, port, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, result_ignored, vc, tailpos, procs); + result = validate_join_const(result, expected_results); break; case scheme_apply_values_type: no_flo(need_flonum, port); apply_values_validate(expr, port, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, result_ignored, vc, tailpos, procs); + result = validate_join(0, result); break; case scheme_case_lambda_sequence_type: no_flo(need_flonum, port); case_lambda_validate(expr, port, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, result_ignored, vc, tailpos, procs); + result = validate_join_const(result, expected_results); break; case scheme_module_type: no_flo(need_flonum, port); module_validate(expr, port, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, result_ignored, vc, tailpos, procs); + result = validate_join(0, result); break; case scheme_inline_variant_type: no_flo(need_flonum, port); inline_variant_validate(expr, port, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, result_ignored, vc, tailpos, procs); + result = validate_join_const(result, expected_results); break; default: /* All values are definitely ok, except pre-closed closures. Such a closure can refer back to itself, so we use a flag to track cycles. Also check need_flonum. */ + result = validate_join_const(result, expected_results); if (SAME_TYPE(type, scheme_closure_type)) { Scheme_Closure_Data *data; no_flo(need_flonum, port); @@ -1561,9 +1871,10 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, int i; seq = (Scheme_Case_Lambda *)expr; for (i = 0; i < seq->count; i++) { - scheme_validate_expr(port, seq->array[i], stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); + validate_expr(port, seq->array[i], stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + tl_state, tl_timestamp, + NULL, 0, 0, vc, 0, 0, procs, 1); } } else if (need_flonum) { if (!SCHEME_FLOATP(expr)) @@ -1573,8 +1884,8 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, } if (app_rator) - if (scheme_validate_rator_wants_box(app_rator, proc_with_refs_ok - 2, 0, - tls, num_toplevels, num_stxes, num_lifts, tl_use_map)) + if (validate_rator_wants_box(app_rator, proc_with_refs_ok - 2, 0, + tls, num_toplevels, num_stxes, num_lifts, tl_use_map)) scheme_ill_formed_code(port); if (vc_merge) { @@ -1585,6 +1896,8 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, stack[p] = VALID_NOT; } } + + return result; } /*========================================================================*/