diff --git a/collects/compiler/zo-marshal.ss b/collects/compiler/zo-marshal.ss index 1d68f5f44c..4f147dfc67 100644 --- a/collects/compiler/zo-marshal.ss +++ b/collects/compiler/zo-marshal.ss @@ -1,17 +1,30 @@ #lang scheme/base -(require compiler/zo-parse - scheme/match) +(require compiler/zo-structs + scheme/match + scheme/list + scheme/dict) (provide zo-marshal) +#| Unresolved Issues + + Less sharing occurs than in the C implementation, creating much larger files + + encode-all-from-module only handles one case + + What is the purpose of protect-quote? It was making it so certain things (like paths) weren't being encoded correctly. + +|# + ;; Doesn't write as compactly as MzScheme, since list and pair sequences ;; are not compacted, and symbols are not written in short form - +(define current-wrapped-ht (make-parameter #f)) (define (zo-marshal top) (match top [(struct compilation-top (max-let-depth prefix form)) (let ([encountered (make-hasheq)] - [shared (make-hasheq)]) + [shared (make-hasheq)] + [wrapped (make-hasheq)]) (let ([visit (lambda (v) (if (hash-ref shared v #f) #f @@ -24,34 +37,37 @@ (when (closure? v) (hash-set! shared v (add1 (hash-count shared)))) #t))))]) - (traverse-prefix prefix visit) - (traverse-form form visit)) + (parameterize ([current-wrapped-ht wrapped]) + (traverse-prefix prefix visit) + (traverse-form form visit))) (let* ([s (open-output-bytes)] - [out (make-out s (lambda (v) (hash-ref shared v #f)))] + [out (make-out s (lambda (v) (hash-ref shared v #f)) wrapped)] [offsets (map (lambda (v) (let ([v (cdr v)]) (begin0 - (file-position s) - (out-anything v (make-out - s - (let ([skip? #t]) - (lambda (v2) - (if (and skip? (eq? v v2)) - (begin - (set! skip? #f) - #f) - (hash-ref shared v2 #f))))))))) + (file-position s) + (out-anything v (make-out + s + (let ([skip? #t]) + (lambda (v2) + (if (and skip? (eq? v v2)) + (begin + (set! skip? #f) + #f) + (hash-ref shared v2 #f)))) + wrapped))))) (sort (hash-map shared (lambda (k v) (cons v k))) < #:key car))] [post-shared (file-position s)] [all-short? (post-shared . < . #xFFFF)]) (out-data (list* max-let-depth prefix (protect-quote form)) out) - (let ([res (get-output-bytes s)]) + (let ([res (get-output-bytes s)] + [version-bs (string->bytes/latin-1 (version))]) (bytes-append #"#~" - (bytes (string-length (version))) - (string->bytes/latin-1 (version)) + (bytes (bytes-length version-bs)) + version-bs (int->bytes (add1 (hash-count shared))) (bytes (if all-short? 1 @@ -103,8 +119,14 @@ (traverse-data modidx visit))) (traverse-data sym visit)])) -(define (traverse-stx tl visit) - (error "cannot handle syntax objects, yet")) +(define (traverse-wrapped w visit) + (define ew (hash-ref! (current-wrapped-ht) w (lambda () (encode-wrapped w)))) + (traverse-data ew visit)) + +(define (traverse-stx s visit) + (when s + (traverse-wrapped (stx-encoded s) visit))) + (define (traverse-form form visit) (match form @@ -166,7 +188,7 @@ (traverse-expr proc visit) (traverse-expr args-expr visit)] [(struct seq (exprs)) - (for-each (lambda (expr) (traverse-expr expr visit)) exprs)] + (for-each (lambda (expr) (traverse-form expr visit)) exprs)] [(struct beg0 (exprs)) (for-each (lambda (expr) (traverse-expr expr visit)) exprs)] [(struct with-cont-mark (key val body)) @@ -181,21 +203,31 @@ (define (traverse-data expr visit) (cond - [(or (symbol? expr) - (keyword? expr) - (string? expr) - (bytes? expr) - (path? expr)) - (visit expr)] - [(module-path-index? expr) - (visit expr) - (let-values ([(name base) (module-path-index-split expr)]) - (traverse-data name visit) - (traverse-data base visit))] - [(pair? expr) - (traverse-data (car expr) visit) - (traverse-data (cdr expr) visit)] - [else (void)])) + [(or (symbol? expr) + (keyword? expr) + (string? expr) + (bytes? expr) + (path? expr)) + (visit expr)] + [(module-path-index? expr) + (visit expr) + (let-values ([(name base) (module-path-index-split expr)]) + (traverse-data name visit) + (traverse-data base visit))] + [(pair? expr) + (traverse-data (car expr) visit) + (traverse-data (cdr expr) visit)] + [(vector? expr) + (for ([e (in-vector expr)]) + (traverse-data e visit))] + [(box? expr) + (traverse-data (unbox expr) visit)] + [(stx? expr) + (traverse-stx expr visit)] + [(wrapped? expr) + (traverse-wrapped expr visit)] + [else + (void)])) (define (traverse-lam expr visit) (match expr @@ -299,7 +331,7 @@ (define CLOS_PRESERVES_MARKS 4) (define CLOS_IS_METHOD 16) (define CLOS_SINGLE_RESULT 32) - + (define BITS_PER_MZSHORT 32) (define *dummy* #f) @@ -313,8 +345,7 @@ (define-struct case-seq (name lams)) (define-struct (seq0 seq) ()) -(define-struct out (s shared-index)) - +(define-struct out (s shared-index encoded-wraps)) (define (out-shared v out k) (let ([v ((out-shared-index out) v)]) (if v @@ -322,6 +353,10 @@ (out-byte CPT_SYMREF out) (out-number v out)) (k)))) +(define (display-byte b) + (if (b . <= . #xf) + (printf "0~x" b) + (printf "~x" b))) (define (out-byte v out) (write-byte v (out-s out))) @@ -331,20 +366,20 @@ (define (out-number n out) (cond - [(n . < . 0) - (if (n . > . -32) - (out-byte (bitwise-ior #xC0 (- n)) out) - (begin - (out-byte #xE0 out) - (out-bytes (int->bytes (- n)) out)))] - [(n . < . 128) - (out-byte n out)] - [(n . < . #x4000) - (out-byte (bitwise-ior #x80 (bitwise-and n #x3F)) out) - (out-byte (bitwise-and #xFF (arithmetic-shift n -6)) out)] - [else - (out-bytes #xF0 out) - (out-bytes (int->bytes n) out)])) + [(n . < . 0) + (if (n . > . -32) + (out-byte (bitwise-ior #xC0 (- n)) out) + (begin + (out-byte #xE0 out) + (out-bytes (int->bytes (- n)) out)))] + [(n . < . 128) + (out-byte n out)] + [(n . < . #x4000) + (out-byte (bitwise-ior #x80 (bitwise-and n #x3F)) out) + (out-byte (bitwise-and #xFF (arithmetic-shift n -6)) out)] + [else + (out-byte #xF0 out) + (out-bytes (int->bytes n) out)])) (define (out-syntax key val out) (out-marshaled syntax-type-num (list* key val) out)) @@ -356,12 +391,12 @@ (define (out-anything v out) (cond - [(module-variable? v) - (out-toplevel v out)] - [(closure? v) - (out-expr v out)] - [else - (out-data v out)])) + [(module-variable? v) + (out-toplevel v out)] + [(closure? v) + (out-expr v out)] + [else + (out-data v out)])) (define (out-prefix a-prefix out) (match a-prefix @@ -401,7 +436,13 @@ (if (andmap (lambda (x) (equal? x default)) l) #f (list->vector l)))] - [l (map cdr other-requires)] + [l + (let loop ([l other-requires]) + (match l + [(list) + empty] + [(list-rest (cons phase reqs) rst) + (list* phase reqs (loop rst))]))] [l (cons (length other-requires) l)] [l (cons (lookup-req #f) l)] ; dt-requires [l (cons (lookup-req -1) l)] ; tt-requires @@ -460,18 +501,98 @@ out (lambda () (out-byte CPT_MODULE_VAR out) - (let-values ([(p b) (module-path-index-split modidx)]) - (if (symbol? p) - (out-data p out) - (out-data modidx out))) + (out-data modidx out) (out-data sym out) (unless (zero? phase) (out-number -2 out)) (out-number pos out)))])) -(define (out-stx tl out) - (error "cannot handle syntax objects, yet")) +(define (encode-module-bindings module-bindings) + (define encode-nominal-path + (match-lambda + [(struct simple-nominal-path (value)) + value] + [(struct imported-nominal-path (value import-phase)) + (cons value import-phase)] + [(struct phased-nominal-path (value import-phase phase)) + (cons value (cons import-phase phase))])) + (define encoded-bindings (make-vector (* (length module-bindings) 2))) + (for ([i (in-naturals)] + [(k v) (in-dict module-bindings)]) + (vector-set! encoded-bindings (* i 2) k) + (vector-set! encoded-bindings (add1 (* i 2)) + (match v + [(struct simple-module-binding (path)) + path] + [(struct exported-module-binding (path export-name)) + (cons path export-name)] + [(struct nominal-module-binding (path nominal-path)) + (cons path (encode-nominal-path nominal-path))] + [(struct exported-nominal-module-binding (path export-name nominal-path nominal-export-name)) + (list* path export-name (encode-nominal-path nominal-path) nominal-export-name)] + [(struct phased-module-binding (path phase export-name nominal-path nominal-export-name)) + (list* path phase export-name (encode-nominal-path nominal-path) nominal-export-name)]))) + encoded-bindings) +(define (encode-all-from-module all) + (match all + [(struct all-from-module (path phase src-phase exceptions prefix)) + (list* path phase src-phase)])) + +(define (encode-wraps wraps) + (for/list ([wrap (in-list wraps)]) + (match wrap + [(struct phase-shift (amt src dest)) + (box (vector amt src dest #f))] + [(struct module-rename (phase kind set-id unmarshals renames mark-renames plus-kern?)) + (define encoded-kind (eq? kind 'marked)) + (define encoded-unmarshals (map encode-all-from-module unmarshals)) + (define encoded-renames (encode-module-bindings renames)) + (define-values (maybe-unmarshals maybe-renames) (if (null? encoded-unmarshals) + (values encoded-renames mark-renames) + (values encoded-unmarshals (cons encoded-renames mark-renames)))) + (define mod-rename (list* phase encoded-kind set-id maybe-unmarshals maybe-renames)) + (if plus-kern? + (cons #t mod-rename) + mod-rename)] + [(struct lexical-rename (bool1 bool2 alist)) + (define len (length alist)) + (define vec (make-vector (+ (* 2 len) 2))) ; + 2 for booleans at the beginning + (vector-set! vec 0 bool1) + (vector-set! vec 1 bool2) + (for ([(k v) (in-dict alist)] + [i (in-naturals)]) + (vector-set! vec (+ 2 i) k) + (vector-set! vec (+ 2 i len) v)) + vec] + [(struct prune (syms)) + (box syms)] + [(struct wrap-mark (val)) + (list val)]))) + +(define (encode-wrapped w) + (match w + [(struct wrapped (datum wraps certs)) + (vector + (cons + datum + (encode-wraps wraps)) + certs)])) + +(define (lookup-encoded-wrapped w out) + (hash-ref (out-encoded-wraps out) w)) + +(define (out-wrapped w out) + (out-data (lookup-encoded-wrapped w out) out)) + +(define (out-stx s out) + (out-shared s out + (lambda () + (match s + [(struct stx (encoded)) + (out-byte CPT_STX out) + (out-wrapped encoded out)])))) + (define (out-form form out) (match form [(? mod?) @@ -648,7 +769,7 @@ out)] [else (out-value expr out)])) -(define (out-lam expr out) +(define (out-lam expr out) (match expr [(struct indirect (val)) (out-lam val out)] [(struct closure (lam gen-id)) @@ -704,122 +825,143 @@ l) out))])) -(define (out-as-bytes expr ->bytes CPT len2 out) +(define (out-as-bytes expr ->bytes CPT len2 out #:before-length [before-length #f]) (out-shared expr out (lambda () (let ([s (->bytes expr)]) (out-byte CPT out) + (when before-length + (out-number before-length out)) (out-number (bytes-length s) out) (when len2 (out-number len2 out)) (out-bytes s out))))) (define (out-data expr out) (cond - [(prefix? expr) (out-prefix expr out)] - [(global-bucket? expr) (out-toplevel expr out)] - [(module-variable? expr) (out-toplevel expr out)] - [else (out-form expr out)])) + [(prefix? expr) (out-prefix expr out)] + [(global-bucket? expr) (out-toplevel expr out)] + [(module-variable? expr) (out-toplevel expr out)] + [else (out-form expr out)])) (define (out-value expr out) (cond - [(symbol? expr) - (out-as-bytes expr - (compose string->bytes/utf-8 symbol->string) - CPT_SYMBOL - #f - out)] - [(keyword? expr) - (out-as-bytes expr - (compose string->bytes/utf-8 keyword->string) - CPT_KEYWORD - #f - out)] - [(string? expr) - (out-as-bytes expr - string->bytes/utf-8 - CPT_CHAR_STRING - (string-length expr) - out)] - [(bytes? expr) - (out-as-bytes expr - values - CPT_BYTE_STRING - #f - out)] - [(path? expr) - (out-as-bytes expr - path->bytes - CPT_PATH - #f - out)] - [(char? expr) - (out-byte CPT_CHAR out) - (out-number (char->integer expr) out)] - [(and (exact-integer? expr) - (and (expr . >= . -1073741824) (expr . <= . 1073741823))) - (out-byte CPT_INT out) - (out-number expr out)] - [(null? expr) - (out-byte CPT_NULL out)] - [(eq? expr #t) - (out-byte CPT_TRUE out)] - [(eq? expr #f) - (out-byte CPT_FALSE out)] - [(void? expr) - (out-byte CPT_VOID out)] - [(box? expr) - (out-byte CPT_BOX out) - (out-data (unbox expr) out)] - [(pair? expr) - (out-byte CPT_LIST out) - (out-number 1 out) - (out-data (car expr) out) - (out-data (cdr expr) out)] - [(vector? expr) - (out-byte CPT_VECTOR out) - (out-number (vector-length expr) out) - (for ([v (in-vector expr)]) - (out-data v out))] - [(hash? expr) - (out-byte CPT_HASH_TABLE out) - (out-number (cond - [(hash-eqv? expr) 2] - [(hash-eq? expr) 0] - [else 1])) - (for ([(k v) (in-hash expr)]) - (out-data k out) - (out-data v out))] - [(svector? expr) - (out-byte CPT_SVECTOR out) - (out-number (vector-length (svector-vec expr)) out) - (let ([vec (svector-vec expr)]) - (for ([n (in-range (sub1 (vector-length vec)) -1 -1)]) - (out-number (vector-ref vec n) out)))] - [(module-path-index? expr) - (out-shared expr out - (lambda () - (out-byte CPT_MODULE_INDEX out) - (let-values ([(name base) (module-path-index-split expr)]) - (out-data name out) - (out-data base out))))] - [(module-decl? expr) - (out-marshaled module-type-num - (module-decl-content expr) + [(and (symbol? expr) (not (symbol-interned? expr))) + (out-as-bytes expr + #:before-length (if (symbol-unreadable? expr) 0 1) + (compose string->bytes/utf-8 symbol->string) + CPT_WEIRD_SYMBOL + #f + out)] + [(symbol? expr) + (out-as-bytes expr + (compose string->bytes/utf-8 symbol->string) + CPT_SYMBOL + #f out)] - [else - (out-byte CPT_QUOTE out) - (let ([s (open-output-bytes)]) - (write (if (quoted? expr) (quoted-v expr) expr) s) - (out-byte CPT_ESCAPE out) - (let ([bstr (get-output-bytes s)]) - (out-number (bytes-length bstr) out) - (out-bytes bstr out)))])) + [(keyword? expr) + (out-as-bytes expr + (compose string->bytes/utf-8 keyword->string) + CPT_KEYWORD + #f + out)] + [(string? expr) + (out-as-bytes expr + string->bytes/utf-8 + CPT_CHAR_STRING + (string-length expr) + out)] + [(bytes? expr) + (out-as-bytes expr + values + CPT_BYTE_STRING + #f + out)] + [(path? expr) + (out-as-bytes expr + path->bytes + CPT_PATH + #f + out)] + [(char? expr) + (out-byte CPT_CHAR out) + (out-number (char->integer expr) out)] + [(and (exact-integer? expr) + (and (expr . >= . -1073741824) (expr . <= . 1073741823))) + (out-byte CPT_INT out) + (out-number expr out)] + [(null? expr) + (out-byte CPT_NULL out)] + [(eq? expr #t) + (out-byte CPT_TRUE out)] + [(eq? expr #f) + (out-byte CPT_FALSE out)] + [(void? expr) + (out-byte CPT_VOID out)] + [(box? expr) + (out-byte CPT_BOX out) + (out-data (unbox expr) out)] + [(pair? expr) + (out-byte CPT_LIST out) + (out-number 1 out) + (out-data (car expr) out) + (out-data (cdr expr) out)] + [(vector? expr) + (out-byte CPT_VECTOR out) + (out-number (vector-length expr) out) + (for ([v (in-vector expr)]) + (out-data v out))] + [(hash? expr) + (out-byte CPT_HASH_TABLE out) + (out-number (cond + [(hash-eqv? expr) 2] + [(hash-eq? expr) 0] + [else 1]) + out) + (out-number (hash-count expr) out) + (for ([(k v) (in-hash expr)]) + (out-data k out) + (out-data v out))] + [(svector? expr) + (out-byte CPT_SVECTOR out) + (out-number (vector-length (svector-vec expr)) out) + (let ([vec (svector-vec expr)]) + (for ([n (in-range (sub1 (vector-length vec)) -1 -1)]) + (out-number (vector-ref vec n) out)))] + [(module-path-index? expr) + (out-shared expr out + (lambda () + (out-byte CPT_MODULE_INDEX out) + (let-values ([(name base) (module-path-index-split expr)]) + (out-data name out) + (out-data base out))))] + [(module-decl? expr) + (out-marshaled module-type-num + (module-decl-content expr) + out)] + [(stx? expr) + (out-stx expr out)] + [(wrapped? expr) + (out-wrapped expr out)] + [else + (out-byte CPT_QUOTE out) + (let ([s (open-output-bytes)]) + (write (if (quoted? expr) + (quoted-v expr) + expr) s) + (out-byte CPT_ESCAPE out) + (let ([bstr (get-output-bytes s)]) + (out-number (bytes-length bstr) out) + (out-bytes bstr out)))])) + + +(define-struct quoted (v) #:prefab) -(define-struct quoted (v)) (define (protect-quote v) - (if (or (list? v) (vector? v) (box? v) (hash? v)) + v + #;(if (or (list? v) (vector? v) (box? v) (hash? v)) (make-quoted v) v)) + (define-struct svector (vec)) ;; ---------------------------------------- diff --git a/collects/compiler/zo-parse.ss b/collects/compiler/zo-parse.ss index 6633050b26..8a3daddd2c 100644 --- a/collects/compiler/zo-parse.ss +++ b/collects/compiler/zo-parse.ss @@ -1,83 +1,33 @@ #lang scheme/base (require mzlib/etc scheme/match - scheme/list) + scheme/list + compiler/zo-structs) (provide zo-parse) +(provide (all-from-out compiler/zo-structs)) -;; ---------------------------------------- -;; Structures to represent bytecode +#| Unresolved Issues -(define-syntax-rule (define-form-struct* id id+par (field-id ...)) - (begin - (define-struct id+par (field-id ...) #:transparent) - (provide (struct-out id)))) + The order of indirect-et-provides, indirect-syntax-provides, indirect-provides was changed, is that okay? + + orig-port of cport struct is never used, is it needed? -(define-syntax define-form-struct - (syntax-rules () - [(_ (id sup) . rest) - (define-form-struct* id (id sup) . rest)] - [(_ id . rest) - (define-form-struct* id id . rest)])) + Lines 628, 630 seem to be only for debugging and should probably throw errors -(define-form-struct compilation-top (max-let-depth prefix code)) ; compiled code always wrapped with this + unmarshal-stx-get also seems to be for debugging and should probably throw an error -(define-form-struct prefix (num-lifts toplevels stxs)) ; sets up top-level and syntax-object array + vector and pair cases of decode-wraps seem to do different things from the corresponding C code -;; In toplevels of resove prefix: -(define-form-struct global-bucket (name)) ; top-level binding -(define-form-struct module-variable (modidx sym pos phase)) ; direct access to exported id + Line 816: This should be an eqv placeholder (but they don't exist) -;; In stxs of prefix: -(define-form-struct stx (encoded)) + Line 634: Export registry is always matched as false, but might not be -(define-form-struct form ()) -(define-form-struct (expr form) ()) + What are the real differences between the module-binding cases? -(define-form-struct (mod form) (name self-modidx prefix provides requires body syntax-body unexported - max-let-depth dummy lang-info internal-context)) - -(define-form-struct (lam expr) (name flags num-params param-types rest? closure-map closure-types max-let-depth body)) ; `lambda' -(define-form-struct (closure expr) (code gen-id)) ; a static closure (nothing to close over) -(define-form-struct (case-lam expr) (name clauses)) ; each clause is an lam - -(define-form-struct (let-one expr) (rhs body flonum?)) ; pushes one value onto stack -(define-form-struct (let-void expr) (count boxes? body)) ; create new stack slots -(define-form-struct (install-value expr) (count pos boxes? rhs body)) ; set existing stack slot(s) -(define-form-struct (let-rec expr) (procs body)) ; put `letrec'-bound closures into existing stack slots -(define-form-struct (boxenv expr) (pos body)) ; box existing stack element - -(define-form-struct (localref expr) (unbox? pos clear? other-clears? flonum?)) ; access local via stack - -(define-form-struct (toplevel expr) (depth pos const? ready?)) ; access binding via prefix array (which is on stack) -(define-form-struct (topsyntax expr) (depth pos midpt)) ; access syntax object via prefix array (which is on stack) - -(define-form-struct (application expr) (rator rands)) ; function call -(define-form-struct (branch expr) (test then else)) ; `if' -(define-form-struct (with-cont-mark expr) (key val body)) ; `with-continuation-mark' -(define-form-struct (beg0 expr) (seq)) ; `begin0' -(define-form-struct (seq form) (forms)) ; `begin' -(define-form-struct (splice form) (forms)) ; top-level `begin' -(define-form-struct (varref expr) (toplevel)) ; `#%variable-reference' -(define-form-struct (assign expr) (id rhs undef-ok?)) ; top-level or module-level set! -(define-form-struct (apply-values expr) (proc args-expr)) ; `(call-with-values (lambda () ,args-expr) ,proc) -(define-form-struct (primval expr) (id)) ; direct preference to a kernel primitive - -;; Definitions (top level or within module): -(define-form-struct (def-values form) (ids rhs)) -(define-form-struct (def-syntaxes form) (ids rhs prefix max-let-depth)) -(define-form-struct (def-for-syntax form) (ids rhs prefix max-let-depth)) - -;; Top-level `require' -(define-form-struct (req form) (reqs dummy)) - -;; A static closure can refer directly to itself, creating a cycle -(define-struct indirect ([v #:mutable]) #:prefab) -(provide (struct-out indirect)) - -;; A provided identifier -(define-form-struct provided (name src src-name nom-src src-phase protected? insp)) + I think parse-module-path-index was only used for debugging, so it is short-circuited now +|# ;; ---------------------------------------- ;; Bytecode unmarshalers for various forms @@ -236,14 +186,24 @@ (define (read-splice v) (make-splice (seq-forms v))) +(define (in-list* l n) + (make-do-sequence + (lambda () + (values (lambda (l) (apply values (take l n))) + (lambda (l) (drop l n)) + l + (lambda (l) (>= (length l) n)) + (lambda _ #t) + (lambda _ #t))))) + (define (read-module v) (match v [`(,name ,self-modidx ,lang-info ,functional? ,et-functional? ,rename ,max-let-depth ,dummy ,prefix - ,indirect-provides ,num-indirect-provides - ,indirect-syntax-provides ,num-indirect-syntax-provides ,indirect-et-provides ,num-indirect-et-provides + ,indirect-syntax-provides ,num-indirect-syntax-provides + ,indirect-provides ,num-indirect-provides ,protects ,et-protects ,provide-phase-count . ,rest) (let ([phase-data (take rest (* 9 provide-phase-count))]) @@ -288,15 +248,18 @@ (cons 1 syntax-requires) (cons -1 template-requires) (cons #f label-requires) - more-requires) + (for/list ([(phase reqs) (in-list* more-requires 2)]) + (cons phase reqs))) (vector->list body) (map (lambda (sb) (match sb + [(? def-syntaxes?) sb] + [(? def-for-syntax?) sb] [`#(,ids ,expr ,max-let-depth ,prefix ,for-stx?) ((if for-stx? make-def-for-syntax make-def-syntaxes) - ids expr prefix max-let-depth)])) + (if (list? ids) ids (list ids)) expr prefix max-let-depth)])) (vector->list syntax-body)) (list (vector->list indirect-provides) (vector->list indirect-syntax-provides) @@ -387,10 +350,13 @@ (loop (subbytes so n)))))) (define (read-simple-number p) - ;; not sure if it's really unsigned (integer-bytes->integer (read-bytes 4 p) #f #f)) -(define-struct cport ([pos #:mutable] orig-port size bytes symtab shared-offsets decoded rns mpis)) + +(define-struct cport ([pos #:mutable] shared-start orig-port size bytes symtab shared-offsets decoded rns mpis)) + +(define (cport-rpos cp) + (+ (cport-pos cp) (cport-shared-start cp))) (define (cp-getc cp) (begin-with-definitions @@ -453,17 +419,17 @@ (define (cpt-table-lookup i) (for/or ([ent cpt-table]) - (match ent - [(list k sym) (and (= k i) (cons k sym))] - [(list k k* sym) - (and (<= k i) - (< i k*) - (cons k sym))]))) + (match ent + [(list k sym) (and (= k i) (cons k sym))] + [(list k k* sym) + (and (<= k i) + (< i k*) + (cons k sym))]))) (define (read-compact-bytes port c) (begin0 - (subbytes (cport-bytes port) (cport-pos port) (+ (cport-pos port) c)) - (set-cport-pos! port (+ c (cport-pos port))))) + (subbytes (cport-bytes port) (cport-pos port) (+ (cport-pos port) c)) + (set-cport-pos! port (+ c (cport-pos port))))) (define (read-compact-chars port c) (bytes->string/utf-8 (read-compact-bytes port c))) @@ -516,18 +482,7 @@ (define-struct not-ready ()) ;; ---------------------------------------- -;; Synatx unmarshaling - -(define-form-struct wrapped (datum wraps certs)) - -(define-form-struct wrap ()) -(define-form-struct (lexical-rename wrap) (alist)) -(define-form-struct (phase-shift wrap) (amt src dest)) -(define-form-struct (prune wrap) (sym)) -(define-form-struct (module-rename wrap) (phase kind set-id unmarshals renames mark-renames plus-kern?)) - -(define-form-struct all-from-module (path phase src-phase exceptions prefix)) -(define-form-struct module-binding (path mod-phase import-phase id nominal-path nominal-phase nominal-id)) +;; Syntax unmarshaling (define (decode-stx cp v) (if (integer? v) @@ -546,52 +501,55 @@ (let* ([wraps (decode-wraps cp encoded-wraps)] [add-wrap (lambda (v) (make-wrapped v wraps cert-marks))]) (cond - [(pair? v) - (if (eq? #t (car v)) - ;; Share decoded wraps with all nested parts. - (let loop ([v (cdr v)]) - (cond - [(pair? v) - (let ploop ([v v]) + [(pair? v) + (if (eq? #t (car v)) + ;; Share decoded wraps with all nested parts. + (let loop ([v (cdr v)]) + (cond + [(pair? v) + (let ploop ([v v]) + (cond + [(null? v) null] + [(pair? v) (add-wrap (cons (loop (car v)) (ploop (cdr v))))] + [else (loop v)]))] + [(box? v) (add-wrap (box (loop (unbox v))))] + [(vector? v) + (add-wrap (list->vector (map loop (vector->list v))))] + [(prefab-struct-key v) + => (lambda (k) + (add-wrap + (apply + make-prefab-struct + k + (map loop (cdr (vector->list (struct->vector v)))))))] + [else (add-wrap v)])) + ;; Decode sub-elements that have their own wraps: + (let-values ([(v counter) (if (exact-integer? (car v)) + (values (cdr v) (car v)) + (values v -1))]) + (add-wrap + (let ploop ([v v][counter counter]) (cond - [(null? v) null] - [(pair? v) (add-wrap (cons (loop (car v)) (ploop (cdr v))))] - [else (loop v)]))] - [(box? v) (add-wrap (box (loop (unbox v))))] - [(vector? v) - (add-wrap (list->vector (map loop (vector->list v))))] - [(prefab-struct-key v) - => (lambda (k) - (add-wrap - (apply - make-prefab-struct - k - (map loop (cdr (vector->list (struct->vector v)))))))] - [else (add-wrap v)])) - ;; Decode sub-elements that have their own wraps: - (let-values ([(v counter) (if (exact-integer? (car v)) - (values (cdr v) (car v)) - (values v -1))]) + [(null? v) null] + [(or (not (pair? v)) (zero? counter)) (loop v)] + [(pair? v) (cons (loop (car v)) + (ploop (cdr v) (sub1 counter)))])))))] + [(box? v) (add-wrap (box (loop (unbox v))))] + [(vector? v) + (add-wrap (list->vector (map loop (vector->list v))))] + [(prefab-struct-key v) + => (lambda (k) (add-wrap - (let ploop ([v v][counter counter]) - (cond - [(null? v) null] - [(or (not (pair? v)) (zero? counter)) (loop v)] - [(pair? v) (cons (loop (car v)) - (ploop (cdr v) (sub1 counter)))])))))] - [(box? v) (add-wrap (box (loop (unbox v))))] - [(vector? v) - (add-wrap (list->vector (map loop (vector->list v))))] - [(prefab-struct-key v) - => (lambda (k) - (add-wrap - (apply - make-prefab-struct - k - (map loop (cdr (vector->list (struct->vector v)))))))] - [else (add-wrap v)])))))) + (apply + make-prefab-struct + k + (map loop (cdr (vector->list (struct->vector v)))))))] + [else (add-wrap v)])))))) + + (define (decode-wraps cp w) + ; A wraps is either a indirect reference or a list of wrap-elems (from stxobj.c:252) (if (integer? w) (let-values ([(w2 decoded?) (unmarshal-stx-get cp w)]) (if decoded? @@ -601,124 +559,131 @@ w2))) (map (lambda (a) (let aloop ([a a]) + ; A wrap-elem is either (cond - [(integer? a) - (let-values ([(a2 decoded?) (unmarshal-stx-get cp a)]) - (if decoded? - a2 - (let ([a2 (aloop a2)]) - (unmarshal-stx-set! cp a a2) - a2)))] - [(and (pair? a) (null? (cdr a)) (number? (car a))) - ;; a mark - (string->symbol (format "mark~a" (car a)))] - [(vector? a) - (make-lexical-rename - (let ([top (+ (/ (- (vector-length a) 2) 2) 2)]) - (let loop ([i 2]) - (if (= i top) - null - (cons (cons (vector-ref a i) - (vector-ref a (+ (- top 2) i))) - (loop (+ i 1)))))))] - [(pair? a) - (let-values ([(plus-kern? a) (if (eq? (car a) #t) - (values #t (cdr a)) - (values #f a))]) - (match a - [`(,phase ,kind ,set-id ,maybe-unmarshals . ,renames) - (let-values ([(unmarshals renames mark-renames) - (if (vector? maybe-unmarshals) - (values null maybe-unmarshals renames) - (values maybe-unmarshals - (car renames) - (cdr renames)))]) - (make-module-rename phase - (if kind 'marked 'normal) - set-id - (map (lambda (u) - (let ([just-phase? (let ([v (cddr u)]) - (or (number? v) (not v)))]) - (let-values ([(exns prefix) - (if just-phase? - (values null #f) - (let loop ([u (if just-phase? null (cdddr u))] - [a null]) - (if (pair? u) - (loop (cdr u) (cons (car u) a)) - (values (reverse a) u))))]) - (make-all-from-module - (parse-module-path-index cp (car u)) - (cadr u) - (if just-phase? - (cddr u) - (caddr u)) - exns - prefix)))) - unmarshals) - (let loop ([i 0]) - (if (= i (vector-length renames)) - null - (cons - (let ([key (vector-ref renames i)] - [make-mapping - (lambda (path mod-phase import-phase id nominal-path nominal-phase nominal-id) - (make-module-binding - (parse-module-path-index cp path) - mod-phase - import-phase - id - (parse-module-path-index cp nominal-path) - nominal-phase - (if (eq? id nominal-id) #t nominal-id)))]) - (cons key - (let ([m (vector-ref renames (add1 i))] - [parse-nominal-modidx-plus-phase - (lambda (modidx mod-phase exportname nominal-modidx-plus-phase nom-exportname) - (match nominal-modidx-plus-phase - [`(,nominal-modidx ,import-phase-plus-nominal-phase) - (match import-phase-plus-nominal-phase - [`(,import-phase ,nom-phase) - (make-mapping modidx mod-phase import-phase exportname - nominal-modidx nom-phase nom-exportname)] - [import-phase - (make-mapping modidx mod-phase import-phase exportname - modidx mod-phase nom-exportname)])] - [nominal-modidx - (make-mapping modidx mod-phase '* exportname - nominal-modidx mod-phase nom-exportname)]))]) - (match m - [`(,modidx ,mod-phase ,exportname ,nominal-modidx-plus-phase . ,nominal-exportname) - (parse-nominal-modidx-plus-phase modidx mod-phase exportname - nominal-modidx-plus-phase nominal-exportname)] - [`(,modidx ,exportname ,nominal-modidx-plus-phase . ,nominal-exportname) - (parse-nominal-modidx-plus-phase modidx '* exportname - nominal-modidx-plus-phase nominal-exportname)] - [`(,modidx ,nominal-modidx) - (make-mapping modidx '* '* key nominal-modidx '* key)] - [`(,modidx ,exportname) - (make-mapping modidx '* '* exportname modidx '* exportname)] - [modidx - (make-mapping modidx '* '* key modidx '* key)])))) - (loop (+ i 2))))) - mark-renames - (and plus-kern? 'plus-kern)))] - [else (error "bad module rename: ~e" a)]))] - [(boolean? a) - `(#%top-level-rename ,a)] - [(symbol? a) - '(#%mark-barrier)] - [(box? a) - (match (unbox a) - [(list (? symbol?) ...) (make-prune (unbox a))] - [`#(,amt ,src ,dest #f) - (make-phase-shift amt - (parse-module-path-index cp src) - (parse-module-path-index cp dest))] - [else (error 'parse "bad phase shift: ~e" a)])] - [else (error 'decode-wraps "bad wrap element: ~e" a)]))) + ; A reference + [(integer? a) + (let-values ([(a2 decoded?) (unmarshal-stx-get cp a)]) + (if decoded? + a2 + (let ([a2 (aloop a2)]) + (unmarshal-stx-set! cp a a2) + a2)))] + ; A mark (not actually a number as the C says, but a (list ) + [(and (pair? a) (null? (cdr a)) (number? (car a))) + (make-wrap-mark (car a))] + + [(vector? a) + (make-lexical-rename (vector-ref a 0) (vector-ref a 1) + (let ([top (+ (/ (- (vector-length a) 2) 2) 2)]) + (let loop ([i 2]) + (if (= i top) + null + (cons (cons (vector-ref a i) + (vector-ref a (+ (- top 2) i))) + (loop (+ i 1)))))))] + [(pair? a) + (let-values ([(plus-kern? a) (if (eq? (car a) #t) + (values #t (cdr a)) + (values #f a))]) + (match a + [`(,phase ,kind ,set-id ,maybe-unmarshals . ,renames) + (let-values ([(unmarshals renames mark-renames) + (if (vector? maybe-unmarshals) + (values null maybe-unmarshals renames) + (values maybe-unmarshals + (car renames) + (cdr renames)))]) + (make-module-rename phase + (if kind 'marked 'normal) + set-id + (let ([results (map (lambda (u) + (let ([just-phase? (let ([v (cddr u)]) + (or (number? v) (not v)))]) + (let-values ([(exns prefix) + (if just-phase? + (values null #f) + (let loop ([u (if just-phase? null (cdddr u))] + [a null]) + (if (pair? u) + (loop (cdr u) (cons (car u) a)) + (values (reverse a) u))))]) + (make-all-from-module + (parse-module-path-index cp (car u)) + (cadr u) + (if just-phase? + (cddr u) + (caddr u)) + exns + prefix)))) + unmarshals)]) + #;(printf "~nunmarshals: ~S~n" unmarshals) + #;(printf "~nunmarshal results: ~S~n" results) + results) + (decode-renames renames) + mark-renames + (and plus-kern? 'plus-kern)))] + [else (error "bad module rename: ~e" a)]))] + [(boolean? a) + `(#%top-level-rename ,a)] + [(symbol? a) + '(#%mark-barrier)] + [(box? a) + (match (unbox a) + [(list (? symbol?) ...) (make-prune (unbox a))] + [`#(,amt ,src ,dest #f) + (make-phase-shift amt + (parse-module-path-index cp src) + (parse-module-path-index cp dest))] + [else (error 'parse "bad phase shift: ~e" a)])] + [else (error 'decode-wraps "bad wrap element: ~e" a)]))) w))) +(define (in-vector* v n) + (make-do-sequence + (λ () + (values (λ (i) (vector->values v i (+ i n))) + (λ (i) (+ i n)) + 0 + (λ (i) (>= (vector-length v) (+ i n))) + (λ _ #t) + (λ _ #t))))) + +(define (decode-renames renames) + (define decode-nominal-path + (match-lambda + [(cons nominal-path (cons import-phase nominal-phase)) + (make-phased-nominal-path nominal-path import-phase nominal-phase)] + [(cons nominal-path import-phase) + (make-imported-nominal-path nominal-path import-phase)] + [nominal-path + (make-simple-nominal-path nominal-path)])) + + ; XXX Matthew, I'm ashamed + (define (nom_mod_p p) + (and (pair? p) (not (pair? (cdr p))) (not (symbol? (cdr p))))) + + (for/list ([(k v) (in-vector* renames 2)]) + (cons k + (match v + [(list-rest path phase export-name nominal-path nominal-export-name) + (make-phased-module-binding path + phase + export-name + (decode-nominal-path nominal-path) + nominal-export-name)] + [(list-rest path export-name nominal-path nominal-export-name) + (make-exported-nominal-module-binding path + export-name + (decode-nominal-path nominal-path) + nominal-export-name)] + [(cons module-path-index (? nom_mod_p nominal-path)) + (make-nominal-module-binding module-path-index (decode-nominal-path nominal-path))] + [(cons module-path-index export-name) + (make-exported-module-binding module-path-index export-name)] + [module-path-index + (make-simple-module-binding module-path-index)])))) + (define (unmarshal-stx-get cp pos) (if (pos . >= . (vector-length (cport-symtab cp))) (values `(#%bad-index ,pos) #t) @@ -737,19 +702,7 @@ (vector-set! (cport-decoded cp) pos #t)) (define (parse-module-path-index cp s) - (cond - [(not s) #f] - [(module-path-index? s) - (hash-ref (cport-mpis cp) s - (lambda () - (let-values ([(name base) (module-path-index-split s)]) - (let ([v `(module-path-index-join - (quote ,name) - ,(parse-module-path-index cp base))]) - (hash-set! (cport-mpis cp) s v) - v))))] - [else `(quote ,s)])) - + s) ;; ---------------------------------------- ;; Main parsing loop @@ -813,8 +766,8 @@ [pos (read-compact-number cp)]) (let-values ([(mod-phase pos) (if (= pos -2) - (values 1 (read-compact-number cp)) - (values 0 pos))]) + (values 1 (read-compact-number cp)) + (values 0 pos))]) (make-module-variable mod var pos mod-phase)))] [(local-unbox) (let* ([p* (read-compact-number cp)] @@ -857,9 +810,10 @@ [(hash-table) (let ([eq (read-compact-number cp)] [len (read-compact-number cp)]) - ((if (zero? eq) - make-hash-placeholder - make-hasheq-placeholder) + ((case eq + [(0) make-hasheq-placeholder] + [(1) make-hash-placeholder] + [(2) make-hash-placeholder]) (for/list ([i (in-range len)]) (cons (read-compact cp) (read-compact cp)))))] @@ -919,12 +873,15 @@ (set-cport-pos! cp pos) (vector-set! (cport-symtab cp) l v) v)) - v))] + v))] [(weird-symbol) - (let ([u (read-compact-number cp)] + (let ([uninterned (read-compact-number cp)] [str (read-compact-chars cp (read-compact-number cp))]) - ;; FIXME: no way to construct quasi-interned symbols: - (string->uninterned-symbol str))] + (if (= 1 uninterned) + ; uninterned is equivalent to weird in the C implementation + (string->uninterned-symbol str) + ; unreadable is equivalent to parallel in the C implementation + (string->unreadable-symbol str)))] [(small-marshalled) (read-marshalled (- ch cpt-start) cp)] [(small-application2) @@ -952,9 +909,9 @@ [cl (make-closure v (gensym (let ([s (lam-name v)]) (cond - [(symbol? s) s] - [(vector? s) (vector-ref s 0)] - [else 'closure]))))]) + [(symbol? s) s] + [(vector? s) (vector-ref s 0)] + [else 'closure]))))]) (set-indirect-v! ind cl) ind))] [(svector) @@ -973,49 +930,49 @@ ;; implementes read.c:read_compiled (define (zo-parse port) (begin-with-definitions - ;; skip the "#~" - (unless (equal? #"#~" (read-bytes 2 port)) - (error 'zo-parse "not a bytecode stream")) - - (define version (read-bytes (min 63 (read-byte port)) port)) - - (define symtabsize (read-simple-number port)) - - (define all-short (read-byte port)) - - (define cnt (* (if (not (zero? all-short)) 2 4) - (sub1 symtabsize))) - - (define so (read-bytes cnt port)) - - (define so* (list->vector (split-so all-short so))) - - (define shared-size (read-simple-number port)) - (define size* (read-simple-number port)) - - (when (shared-size . >= . size*) - (error 'bad-read)) - - (define rst (read-bytes size* port)) - - (unless (eof-object? (read-byte port)) - (error 'not-end)) - - (unless (= size* (bytes-length rst)) - (error "wrong number of bytes")) - - (define symtab (make-vector symtabsize (make-not-ready))) - - (define cp (make-cport 0 port size* rst symtab so* (make-vector symtabsize #f) (make-hash) (make-hash))) - - (for/list ([i (in-range 1 symtabsize)]) - (when (not-ready? (vector-ref symtab i)) - (set-cport-pos! cp (vector-ref so* (sub1 i))) - (let ([v (read-compact cp)]) - (vector-set! symtab i v)))) - - (set-cport-pos! cp shared-size) - (read-marshalled 'compilation-top-type cp))) + ;; skip the "#~" + (unless (equal? #"#~" (read-bytes 2 port)) + (error 'zo-parse "not a bytecode stream")) + + (define version (read-bytes (min 63 (read-byte port)) port)) + + (define symtabsize (read-simple-number port)) + + (define all-short (read-byte port)) + + (define cnt (* (if (not (zero? all-short)) 2 4) + (sub1 symtabsize))) + + (define so (read-bytes cnt port)) + + (define so* (list->vector (split-so all-short so))) + + (define shared-size (read-simple-number port)) + (define size* (read-simple-number port)) + + (when (shared-size . >= . size*) + (error 'zo-parse "Non-shared data segment start is not after shared data segment (according to offsets)")) + + (define rst (read-bytes size* port)) + + (unless (eof-object? (read-byte port)) + (error 'not-end)) + + (unless (= size* (bytes-length rst)) + (error "wrong number of bytes")) + + (define symtab (make-vector symtabsize (make-not-ready))) + + (define cp (make-cport 0 shared-size port size* rst symtab so* (make-vector symtabsize #f) (make-hash) (make-hash))) + + (for/list ([i (in-range 1 symtabsize)]) + (define vv (vector-ref symtab i)) + (when (not-ready? vv) + (set-cport-pos! cp (vector-ref so* (sub1 i))) + (let ([v (read-compact cp)]) + (vector-set! symtab i v)))) + (set-cport-pos! cp shared-size) + (read-marshalled 'compilation-top-type cp))) ;; ---------------------------------------- @@ -1028,12 +985,12 @@ (compile sexp)) s) (get-output-bytes s)) - + (define (compile/parse sexp) (let* ([bs (compile/write sexp)] [p (open-input-bytes bs)]) (zo-parse p))) - + #;(compile/parse #s(foo 10 13)) (zo-parse (open-input-file "/home/mflatt/proj/plt/collects/scheme/private/compiled/more-scheme_ss.zo")) -) + ) diff --git a/collects/scribblings/mzc/zo-parse.scrbl b/collects/scribblings/mzc/zo-parse.scrbl index 9c3abfcffd..4fbcf8f194 100644 --- a/collects/scribblings/mzc/zo-parse.scrbl +++ b/collects/scribblings/mzc/zo-parse.scrbl @@ -224,7 +224,7 @@ to its depth from before evaluating the form.} [max-let-depth exact-nonnegative-integer?] [dummy toplevel?] [lang-info (or/c #f (vector/c module-path? symbol? any/c))] - [internal-context (or/c #f #t syntax?)])]{ + [internal-context (or/c #f #t stx?)])]{ Represents a @scheme[module] declaration. The @scheme[body] forms use @scheme[prefix], rather than any prefix in place for the module @@ -268,7 +268,7 @@ embeds an arbitrary lexical context.} [nom-mod (or/c module-path-index? #f)] [src-phase (or/c 0 1)] [protected? boolean?] - [insp (or #t #f (void))])]{ + [insp (or #t #f void?)])]{ Describes an individual provided identifier within a @scheme[mod] instance.} @@ -527,7 +527,7 @@ kernel.} @defstruct+[wrapped ([datum any/c] [wraps (listof wrap?)] - [certs list?])]{ + [certs (or/c list? #f)])]{ Represents a syntax object, where @scheme[wraps] contain the lexical information and @scheme[certs] is certificate information. When the @@ -539,7 +539,7 @@ information and @scheme[certs] is certificate information. When the A supertype for lexical-information elements.} -@defstruct+[(lexical-rename wrap) ([alist (listof (cons/c identifier? identifier?))])]{ +@defstruct+[(lexical-rename wrap) ([alist (listof (cons/c symbol? symbol?))])]{ A local-binding mapping from symbols to binding-set names.} @@ -569,13 +569,60 @@ Represents a set of module and import bindings.} Represents a set of simple imports from one module within a @scheme[module-rename].} -@defstruct+[module-binding ([path module-path-index?] - [mod-phase (or/c exact-integer? #f)] - [import-phase (or/c exact-integer? #f)] - [id symbol?] - [nominal-path module-path-index?] - [nominal-phase (or/c exact-integer? #f)] - [nominal-id (or/c exact-integer? #f)])]{ +@defstruct+[module-binding ()]{ -Represents a single identifier import (i.e., the general case) within +A supertype for module bindings.} + +@defstruct+[(simple-module-binding module-binding) ([path module-path-index?])]{ + +Represents a single identifier import within a @scheme[module-rename].} + +@defstruct+[(phased-module-binding module-binding) ([path module-path-index?] + [phase exact-integer?] + [export-name any/c] + [nominal-path nominal-path?] + [nominal-export-name any/c])]{ + +Represents a single identifier import within +a @scheme[module-rename].} + +@defstruct+[(exported-nominal-module-binding module-binding) ([path module-path-index?] + [export-name any/c] + [nominal-path nominal-path?] + [nominal-export-name any/c])]{ + +Represents a single identifier import within +a @scheme[module-rename].} + +@defstruct+[(nominal-module-binding module-binding) ([path module-path-index?] + [nominal-path nominal-path?])]{ + +Represents a single identifier import within +a @scheme[module-rename].} + +@defstruct+[(exported-module-binding module-binding) ([path module-path-index?] + [export-name any/c])]{ + +Represents a single identifier import within +a @scheme[module-rename].} + + +@defstruct+[nominal-path ()]{ + +A supertype for nominal paths.} + +@defstruct+[(simple-nominal-path nominal-path) ([value module-path-index?])]{ + +Represents a simple nominal path.} + +@defstruct+[(imported-nominal-path nominal-path) ([value module-path-index?] + [import-phase exact-integer?])]{ + +Represents an imported nominal path.} + +@defstruct+[(phased-nominal-path nominal-path) ([value module-path-index?] + [import-phase exact-integer?] + [phase exact-integer?])]{ + +Represents a phased nominal path.} diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index a39b31cd0e..69eb44a864 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,646 +1,606 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,51,46,49,50,50,0,0,0,1,0,0,3,0,12, -0,19,0,23,0,30,0,34,0,47,0,52,0,55,0,60,0,65,0,72,0, -78,0,92,0,106,0,109,0,115,0,119,0,121,0,132,0,134,0,148,0,155, -0,177,0,179,0,193,0,4,1,33,1,44,1,55,1,65,1,101,1,134,1, -167,1,226,1,36,2,114,2,180,2,185,2,205,2,96,3,116,3,167,3,233, -3,118,4,4,5,56,5,79,5,158,5,0,0,105,7,0,0,29,11,11,68, -104,101,114,101,45,115,116,120,66,108,101,116,114,101,99,63,108,101,116,66,100, -101,102,105,110,101,63,97,110,100,72,112,97,114,97,109,101,116,101,114,105,122, -101,64,108,101,116,42,62,111,114,64,119,104,101,110,64,99,111,110,100,66,117, -110,108,101,115,115,65,113,117,111,116,101,29,94,2,13,68,35,37,107,101,114, -110,101,108,11,29,94,2,13,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,35,11,8,240,228,78,0,0,95,159,2,15,35,35,159,2,14,35,35,159, -2,14,35,35,16,20,2,4,2,1,2,5,2,1,2,6,2,1,2,9,2, -1,2,7,2,1,2,8,2,1,2,3,2,1,2,10,2,1,2,11,2,1, -2,12,2,1,97,36,11,8,240,228,78,0,0,93,159,2,14,35,36,16,2, -2,2,161,2,1,36,2,2,2,1,2,2,96,11,11,8,240,228,78,0,0, -16,0,96,37,11,8,240,228,78,0,0,16,0,13,16,4,35,29,11,11,2, -1,11,18,16,2,99,64,104,101,114,101,8,31,8,30,8,29,8,28,8,27, -93,8,224,235,78,0,0,95,9,8,224,235,78,0,0,2,1,27,248,22,137, -4,195,249,22,130,4,80,158,38,35,251,22,77,2,16,248,22,92,199,12,249, -22,67,2,17,248,22,94,201,27,248,22,137,4,195,249,22,130,4,80,158,38, -35,251,22,77,2,16,248,22,92,199,249,22,67,2,17,248,22,94,201,12,27, -248,22,69,248,22,137,4,196,28,248,22,75,193,20,15,159,36,35,36,28,248, -22,75,248,22,69,194,248,22,68,193,249,22,130,4,80,158,38,35,251,22,77, -2,16,248,22,68,199,249,22,67,2,6,248,22,69,201,11,18,16,2,101,10, -8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110, -118,49,50,55,53,48,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55, -53,49,93,8,224,236,78,0,0,95,9,8,224,236,78,0,0,2,1,27,248, -22,69,248,22,137,4,196,28,248,22,75,193,20,15,159,36,35,36,28,248,22, -75,248,22,69,194,248,22,68,193,249,22,130,4,80,158,38,35,250,22,77,2, -20,248,22,77,249,22,77,248,22,77,2,21,248,22,68,201,251,22,77,2,16, -2,21,2,21,249,22,67,2,9,248,22,69,204,18,16,2,101,11,8,31,8, -30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118,49,50, -55,53,51,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,53,52,93, -8,224,237,78,0,0,95,9,8,224,237,78,0,0,2,1,248,22,137,4,193, -27,248,22,137,4,194,249,22,67,248,22,77,248,22,68,196,248,22,69,195,27, -248,22,69,248,22,137,4,23,197,1,249,22,130,4,80,158,38,35,28,248,22, -53,248,22,131,4,248,22,68,23,198,2,27,249,22,2,32,0,89,162,8,44, -36,42,9,222,33,39,248,22,137,4,248,22,92,23,200,2,250,22,77,2,22, -248,22,77,249,22,77,248,22,77,248,22,68,23,204,2,250,22,78,2,23,249, -22,2,22,68,23,204,2,248,22,94,23,206,2,249,22,67,248,22,68,23,202, -1,249,22,2,22,92,23,200,1,250,22,78,2,20,249,22,2,32,0,89,162, -8,44,36,46,9,222,33,40,248,22,137,4,248,22,68,201,248,22,69,198,27, -248,22,137,4,194,249,22,67,248,22,77,248,22,68,196,248,22,69,195,27,248, -22,69,248,22,137,4,23,197,1,249,22,130,4,80,158,38,35,250,22,78,2, -22,249,22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,137,4,248, -22,68,201,248,22,69,198,27,248,22,69,248,22,137,4,196,27,248,22,137,4, -248,22,68,195,249,22,130,4,80,158,39,35,28,248,22,75,195,250,22,78,2, -20,9,248,22,69,199,250,22,77,2,4,248,22,77,248,22,68,199,250,22,78, -2,8,248,22,69,201,248,22,69,202,27,248,22,69,248,22,137,4,23,197,1, -27,249,22,1,22,81,249,22,2,22,137,4,248,22,137,4,248,22,68,199,249, -22,130,4,80,158,39,35,251,22,77,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,24,250,22,78,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,24,201,250,22,78,2,20,9, -248,22,69,203,27,248,22,69,248,22,137,4,196,28,248,22,75,193,20,15,159, -36,35,36,249,22,130,4,80,158,38,35,27,248,22,137,4,248,22,68,197,28, -249,22,169,8,62,61,62,248,22,131,4,248,22,92,196,250,22,77,2,20,248, -22,77,249,22,77,21,93,2,25,248,22,68,199,250,22,78,2,11,249,22,77, -2,25,249,22,77,248,22,101,203,2,25,248,22,69,202,251,22,77,2,16,28, -249,22,169,8,248,22,131,4,248,22,68,200,64,101,108,115,101,10,248,22,68, -197,250,22,78,2,20,9,248,22,69,200,249,22,67,2,11,248,22,69,202,100, -8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110, -118,49,50,55,55,54,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55, -55,55,93,8,224,238,78,0,0,18,16,2,158,94,10,64,118,111,105,100,8, -47,95,9,8,224,238,78,0,0,2,1,27,248,22,69,248,22,137,4,196,249, -22,130,4,80,158,38,35,28,248,22,53,248,22,131,4,248,22,68,197,250,22, -77,2,26,248,22,77,248,22,68,199,248,22,92,198,27,248,22,131,4,248,22, -68,197,250,22,77,2,26,248,22,77,248,22,68,197,250,22,78,2,23,248,22, -69,199,248,22,69,202,159,35,20,102,159,35,16,1,11,16,0,83,158,41,20, -100,144,69,35,37,109,105,110,45,115,116,120,2,1,11,11,11,10,35,80,158, -35,35,20,102,159,35,16,0,16,0,16,1,2,2,36,16,0,35,16,0,35, -11,11,38,35,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, -35,45,36,11,11,11,16,0,16,0,16,0,35,35,11,11,11,11,16,0,16, -0,16,0,35,35,16,11,16,5,2,2,20,15,159,35,35,35,35,20,102,159, -35,16,0,16,1,33,32,10,16,5,2,12,89,162,8,44,36,52,9,223,0, -33,33,35,20,102,159,35,16,1,2,2,16,0,11,16,5,2,10,89,162,8, -44,36,52,9,223,0,33,34,35,20,102,159,35,16,1,2,2,16,0,11,16, -5,2,6,89,162,8,44,36,52,9,223,0,33,35,35,20,102,159,35,16,1, -2,2,16,1,33,36,11,16,5,2,9,89,162,8,44,36,55,9,223,0,33, -37,35,20,102,159,35,16,1,2,2,16,1,33,38,11,16,5,2,4,89,162, -8,44,36,57,9,223,0,33,41,35,20,102,159,35,16,1,2,2,16,0,11, -16,5,2,3,89,162,8,44,36,52,9,223,0,33,43,35,20,102,159,35,16, -1,2,2,16,0,11,16,5,2,8,89,162,8,44,36,53,9,223,0,33,44, -35,20,102,159,35,16,1,2,2,16,0,11,16,5,2,7,89,162,8,44,36, -54,9,223,0,33,45,35,20,102,159,35,16,1,2,2,16,0,11,16,5,2, -11,89,162,8,44,36,57,9,223,0,33,46,35,20,102,159,35,16,1,2,2, -16,1,33,48,11,16,5,2,5,89,162,8,44,36,53,9,223,0,33,49,35, -20,102,159,35,16,1,2,2,16,0,11,16,0,94,2,14,2,15,93,2,14, -9,9,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2019); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,52,46,50,50,0,0,0,1,0,0,3,0,12,0, +17,0,20,0,27,0,40,0,47,0,51,0,58,0,63,0,68,0,72,0,78, +0,92,0,106,0,109,0,115,0,119,0,121,0,132,0,134,0,148,0,155,0, +177,0,179,0,193,0,4,1,33,1,44,1,55,1,65,1,101,1,134,1,167, +1,226,1,36,2,114,2,180,2,185,2,205,2,96,3,116,3,167,3,233,3, +118,4,4,5,56,5,79,5,158,5,0,0,105,7,0,0,29,11,11,68,104, +101,114,101,45,115,116,120,64,99,111,110,100,62,111,114,66,108,101,116,114,101, +99,72,112,97,114,97,109,101,116,101,114,105,122,101,66,117,110,108,101,115,115, +63,108,101,116,66,100,101,102,105,110,101,64,119,104,101,110,64,108,101,116,42, +63,97,110,100,65,113,117,111,116,101,29,94,2,13,68,35,37,107,101,114,110, +101,108,11,29,94,2,13,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, +35,11,8,240,161,75,0,0,95,159,2,15,35,35,159,2,14,35,35,159,2, +14,35,35,16,20,2,3,2,1,2,5,2,1,2,6,2,1,2,7,2,1, +2,8,2,1,2,9,2,1,2,10,2,1,2,4,2,1,2,11,2,1,2, +12,2,1,97,36,11,8,240,161,75,0,0,93,159,2,14,35,36,16,2,2, +2,161,2,1,36,2,2,2,1,2,2,96,37,11,8,240,161,75,0,0,16, +0,96,11,11,8,240,161,75,0,0,16,0,13,16,4,35,29,11,11,2,1, +11,18,16,2,99,64,104,101,114,101,8,31,8,30,8,29,8,28,8,27,93, +8,224,168,75,0,0,95,9,8,224,168,75,0,0,2,1,27,248,22,138,4, +195,249,22,131,4,80,158,38,35,251,22,78,2,16,248,22,93,199,12,249,22, +68,2,17,248,22,95,201,27,248,22,138,4,195,249,22,131,4,80,158,38,35, +251,22,78,2,16,248,22,93,199,249,22,68,2,17,248,22,95,201,12,27,248, +22,70,248,22,138,4,196,28,248,22,76,193,20,15,159,36,35,36,28,248,22, +76,248,22,70,194,248,22,69,193,249,22,131,4,80,158,38,35,251,22,78,2, +16,248,22,69,199,249,22,68,2,12,248,22,70,201,11,18,16,2,101,10,8, +31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118, +49,50,53,56,51,16,4,11,11,2,19,3,1,8,101,110,118,49,50,53,56, +52,93,8,224,169,75,0,0,95,9,8,224,169,75,0,0,2,1,27,248,22, +70,248,22,138,4,196,28,248,22,76,193,20,15,159,36,35,36,28,248,22,76, +248,22,70,194,248,22,69,193,249,22,131,4,80,158,38,35,250,22,78,2,20, +248,22,78,249,22,78,248,22,78,2,21,248,22,69,201,251,22,78,2,16,2, +21,2,21,249,22,68,2,4,248,22,70,204,18,16,2,101,11,8,31,8,30, +8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118,49,50,53, +56,54,16,4,11,11,2,19,3,1,8,101,110,118,49,50,53,56,55,93,8, +224,170,75,0,0,95,9,8,224,170,75,0,0,2,1,248,22,138,4,193,27, +248,22,138,4,194,249,22,68,248,22,78,248,22,69,196,248,22,70,195,27,248, +22,70,248,22,138,4,23,197,1,249,22,131,4,80,158,38,35,28,248,22,53, +248,22,132,4,248,22,69,23,198,2,27,249,22,2,32,0,89,162,8,44,36, +42,9,222,33,39,248,22,138,4,248,22,93,23,200,2,250,22,78,2,22,248, +22,78,249,22,78,248,22,78,248,22,69,23,204,2,250,22,79,2,23,249,22, +2,22,69,23,204,2,248,22,95,23,206,2,249,22,68,248,22,69,23,202,1, +249,22,2,22,93,23,200,1,250,22,79,2,20,249,22,2,32,0,89,162,8, +44,36,46,9,222,33,40,248,22,138,4,248,22,69,201,248,22,70,198,27,248, +22,138,4,194,249,22,68,248,22,78,248,22,69,196,248,22,70,195,27,248,22, +70,248,22,138,4,23,197,1,249,22,131,4,80,158,38,35,250,22,79,2,22, +249,22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,138,4,248,22, +69,201,248,22,70,198,27,248,22,70,248,22,138,4,196,27,248,22,138,4,248, +22,69,195,249,22,131,4,80,158,39,35,28,248,22,76,195,250,22,79,2,20, +9,248,22,70,199,250,22,78,2,8,248,22,78,248,22,69,199,250,22,79,2, +11,248,22,70,201,248,22,70,202,27,248,22,70,248,22,138,4,23,197,1,27, +249,22,1,22,82,249,22,2,22,138,4,248,22,138,4,248,22,69,199,249,22, +131,4,80,158,39,35,251,22,78,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,24,250,22,79,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,24,201,250,22,79,2,20,9,248, +22,70,203,27,248,22,70,248,22,138,4,196,28,248,22,76,193,20,15,159,36, +35,36,249,22,131,4,80,158,38,35,27,248,22,138,4,248,22,69,197,28,249, +22,170,8,62,61,62,248,22,132,4,248,22,93,196,250,22,78,2,20,248,22, +78,249,22,78,21,93,2,25,248,22,69,199,250,22,79,2,3,249,22,78,2, +25,249,22,78,248,22,102,203,2,25,248,22,70,202,251,22,78,2,16,28,249, +22,170,8,248,22,132,4,248,22,69,200,64,101,108,115,101,10,248,22,69,197, +250,22,79,2,20,9,248,22,70,200,249,22,68,2,3,248,22,70,202,100,8, +31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118, +49,50,54,48,57,16,4,11,11,2,19,3,1,8,101,110,118,49,50,54,49, +48,93,8,224,171,75,0,0,18,16,2,158,94,10,64,118,111,105,100,8,47, +95,9,8,224,171,75,0,0,2,1,27,248,22,70,248,22,138,4,196,249,22, +131,4,80,158,38,35,28,248,22,53,248,22,132,4,248,22,69,197,250,22,78, +2,26,248,22,78,248,22,69,199,248,22,93,198,27,248,22,132,4,248,22,69, +197,250,22,78,2,26,248,22,78,248,22,69,197,250,22,79,2,23,248,22,70, +199,248,22,70,202,159,35,20,102,159,35,16,1,11,16,0,83,158,41,20,100, +144,69,35,37,109,105,110,45,115,116,120,2,1,11,11,11,10,35,80,158,35, +35,20,102,159,35,16,0,16,0,16,1,2,2,36,16,0,35,16,0,35,11, +11,38,35,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,35, +45,36,11,11,11,16,0,16,0,16,0,35,35,11,11,11,11,16,0,16,0, +16,0,35,35,16,11,16,5,2,2,20,15,159,35,35,35,35,20,102,159,35, +16,0,16,1,33,32,10,16,5,2,7,89,162,8,44,36,52,9,223,0,33, +33,35,20,102,159,35,16,1,2,2,16,0,11,16,5,2,10,89,162,8,44, +36,52,9,223,0,33,34,35,20,102,159,35,16,1,2,2,16,0,11,16,5, +2,12,89,162,8,44,36,52,9,223,0,33,35,35,20,102,159,35,16,1,2, +2,16,1,33,36,11,16,5,2,4,89,162,8,44,36,55,9,223,0,33,37, +35,20,102,159,35,16,1,2,2,16,1,33,38,11,16,5,2,8,89,162,8, +44,36,57,9,223,0,33,41,35,20,102,159,35,16,1,2,2,16,0,11,16, +5,2,5,89,162,8,44,36,52,9,223,0,33,43,35,20,102,159,35,16,1, +2,2,16,0,11,16,5,2,11,89,162,8,44,36,53,9,223,0,33,44,35, +20,102,159,35,16,1,2,2,16,0,11,16,5,2,6,89,162,8,44,36,54, +9,223,0,33,45,35,20,102,159,35,16,1,2,2,16,0,11,16,5,2,3, +89,162,8,44,36,57,9,223,0,33,46,35,20,102,159,35,16,1,2,2,16, +1,33,48,11,16,5,2,9,89,162,8,44,36,53,9,223,0,33,49,35,20, +102,159,35,16,1,2,2,16,0,11,16,0,94,2,14,2,15,93,2,14,9, +9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2018); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,51,46,49,50,65,0,0,0,1,0,0,13,0,18, -0,35,0,50,0,68,0,84,0,94,0,112,0,132,0,148,0,166,0,197,0, -226,0,248,0,6,1,12,1,26,1,31,1,41,1,49,1,77,1,109,1,115, -1,160,1,205,1,229,1,12,2,69,2,159,3,200,3,17,5,103,5,189,5, -32,6,116,6,129,6,250,6,96,7,108,7,214,8,228,8,117,9,102,10,84, -11,91,11,99,11,107,11,232,11,245,11,10,12,41,12,94,12,196,12,218,12, -234,12,182,14,29,15,42,15,146,15,22,17,31,17,40,17,66,17,177,17,0, -0,167,20,0,0,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,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,75,99,111,108,108,101,99,116,105,111,110, -45,112,97,116,104,69,45,102,105,110,100,45,99,111,108,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,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, -1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116, -104,73,101,109,98,101,100,100,101,100,45,108,111,97,100,65,113,117,111,116,101, -29,94,2,16,68,35,37,112,97,114,97,109,122,11,64,108,111,111,112,69,101, -120,101,99,45,102,105,108,101,67,119,105,110,100,111,119,115,6,25,25,112,97, -116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105, -110,103,6,29,29,126,97,58,32,105,110,118,97,108,105,100,32,114,101,108,97, -116,105,118,101,32,112,97,116,104,58,32,126,115,65,99,108,111,111,112,6,42, -42,126,97,58,32,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102, -111,117,110,100,58,32,126,115,32,105,110,32,97,110,121,32,111,102,58,32,126, -115,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121,32,115,121,115, -116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116, -114,105,110,103,6,21,21,115,116,114,105,110,103,32,111,114,32,98,121,116,101, -32,115,116,114,105,110,103,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,27,20,14,159,80,158,36,50,250,80,158,39,51,249,22,27,11, -80,158,41,50,22,130,13,10,248,22,162,5,23,196,2,28,248,22,159,6,23, -194,2,12,87,94,248,22,173,8,23,194,1,248,80,159,37,53,36,195,28,248, -22,75,23,195,2,9,27,248,22,68,23,196,2,27,28,248,22,176,13,23,195, -2,23,194,1,28,248,22,175,13,23,195,2,249,22,177,13,23,196,1,250,80, -158,42,48,248,22,128,14,2,19,11,10,250,80,158,40,48,248,22,128,14,2, -19,23,197,1,10,28,23,193,2,249,22,67,248,22,179,13,249,22,177,13,23, -198,1,247,22,129,14,27,248,22,69,23,200,1,28,248,22,75,23,194,2,9, -27,248,22,68,23,195,2,27,28,248,22,176,13,23,195,2,23,194,1,28,248, -22,175,13,23,195,2,249,22,177,13,23,196,1,250,80,158,47,48,248,22,128, -14,2,19,11,10,250,80,158,45,48,248,22,128,14,2,19,23,197,1,10,28, -23,193,2,249,22,67,248,22,179,13,249,22,177,13,23,198,1,247,22,129,14, -248,80,159,45,52,36,248,22,69,23,199,1,87,94,23,193,1,248,80,159,43, -52,36,248,22,69,23,197,1,87,94,23,193,1,27,248,22,69,23,198,1,28, -248,22,75,23,194,2,9,27,248,22,68,23,195,2,27,28,248,22,176,13,23, -195,2,23,194,1,28,248,22,175,13,23,195,2,249,22,177,13,23,196,1,250, -80,158,45,48,248,22,128,14,2,19,11,10,250,80,158,43,48,248,22,128,14, -2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,179,13,249,22,177,13, -23,198,1,247,22,129,14,248,80,159,43,52,36,248,22,69,23,199,1,248,80, -159,41,52,36,248,22,69,196,27,248,22,152,13,23,195,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,164,6,23,195,2,27,248,22,174,13,195,28,192, -192,248,22,175,13,195,11,87,94,28,28,248,22,153,13,23,195,2,10,28,248, -22,152,13,23,195,2,10,28,248,22,164,6,23,195,2,28,248,22,174,13,23, -195,2,10,248,22,175,13,23,195,2,11,12,250,22,137,9,76,110,111,114,109, -97,108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32,40, -102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97, -108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197,2,28,28,248, -22,153,13,23,195,2,249,22,169,8,248,22,154,13,23,197,2,2,20,249,22, -169,8,247,22,183,7,2,20,27,28,248,22,164,6,23,196,2,23,195,2,248, -22,173,7,248,22,157,13,23,197,2,28,249,22,141,14,0,21,35,114,120,34, -94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,23,195,2,28, -248,22,164,6,195,248,22,160,13,195,194,27,248,22,139,7,23,195,1,249,22, -161,13,248,22,176,7,250,22,147,14,0,6,35,114,120,34,47,34,28,249,22, -141,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92, -92,93,42,36,34,23,201,2,23,199,1,250,22,147,14,0,19,35,114,120,34, -91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202,1,6,2,2, -92,49,80,159,43,36,37,2,20,28,248,22,164,6,194,248,22,160,13,194,193, -87,94,28,28,248,22,152,13,23,195,2,10,28,248,22,164,6,23,195,2,28, -248,22,174,13,23,195,2,10,248,22,175,13,23,195,2,11,12,250,22,137,9, -23,196,2,2,21,23,197,2,28,248,22,174,13,23,195,2,12,248,22,170,11, -249,22,176,10,248,22,129,7,250,22,148,7,2,22,23,200,1,23,201,1,247, -22,23,87,94,28,28,248,22,152,13,23,195,2,10,28,248,22,164,6,23,195, -2,28,248,22,174,13,23,195,2,10,248,22,175,13,23,195,2,11,12,250,22, -137,9,23,196,2,2,21,23,197,2,28,248,22,174,13,23,195,2,12,248,22, -170,11,249,22,176,10,248,22,129,7,250,22,148,7,2,22,23,200,1,23,201, -1,247,22,23,87,94,87,94,28,28,248,22,152,13,23,195,2,10,28,248,22, -164,6,23,195,2,28,248,22,174,13,23,195,2,10,248,22,175,13,23,195,2, -11,12,250,22,137,9,195,2,21,23,197,2,28,248,22,174,13,23,195,2,12, -248,22,170,11,249,22,176,10,248,22,129,7,250,22,148,7,2,22,199,23,201, -1,247,22,23,249,22,3,89,162,8,44,36,49,9,223,2,33,33,196,87,94, -28,28,248,22,152,13,23,194,2,10,28,248,22,164,6,23,194,2,28,248,22, -174,13,23,194,2,10,248,22,175,13,23,194,2,11,12,250,22,137,9,2,6, -2,21,23,196,2,28,248,22,174,13,23,194,2,12,248,22,170,11,249,22,176, -10,248,22,129,7,250,22,148,7,2,22,2,6,23,200,1,247,22,23,32,36, -89,162,8,44,39,54,2,23,222,33,37,28,248,22,75,23,197,2,87,94,23, -196,1,248,22,170,11,249,22,145,11,251,22,148,7,2,24,2,6,28,248,22, -75,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,170,13,23,204,1, -23,205,1,23,200,1,247,22,23,27,249,22,170,13,248,22,68,23,200,2,23, -197,2,28,248,22,165,13,23,194,2,27,250,22,1,22,170,13,23,197,1,199, -28,248,22,165,13,193,192,251,2,36,198,199,200,248,22,69,202,251,2,36,197, -198,199,248,22,69,201,87,94,87,94,87,94,28,28,248,22,152,13,193,10,28, -248,22,164,6,193,28,248,22,174,13,193,10,248,22,175,13,193,11,12,250,22, -137,9,2,6,2,21,195,28,248,22,174,13,193,12,248,22,170,11,249,22,176, -10,248,22,129,7,250,22,148,7,2,22,2,6,199,247,22,23,249,22,3,32, -0,89,162,8,44,36,48,9,222,33,35,195,27,247,22,130,14,251,2,36,196, -197,198,196,32,39,89,162,43,41,58,2,23,222,33,40,28,248,22,75,23,199, -2,87,94,23,198,1,248,23,196,1,251,22,148,7,2,24,23,199,1,28,248, -22,75,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,170,13,23,204, -1,23,205,1,23,198,1,27,249,22,170,13,248,22,68,23,202,2,23,199,2, -28,248,22,165,13,23,194,2,27,250,22,1,22,170,13,23,197,1,23,202,2, -28,248,22,165,13,23,194,2,192,87,94,23,193,1,27,248,22,69,23,202,1, -28,248,22,75,23,194,2,87,94,23,193,1,248,23,199,1,251,22,148,7,2, -24,23,202,1,28,248,22,75,23,206,2,87,94,23,205,1,23,204,1,250,22, -1,22,170,13,23,207,1,23,208,1,23,201,1,27,249,22,170,13,248,22,68, -23,197,2,23,202,2,28,248,22,165,13,23,194,2,27,250,22,1,22,170,13, -23,197,1,204,28,248,22,165,13,193,192,253,2,39,203,204,205,206,23,15,248, -22,69,201,253,2,39,202,203,204,205,206,248,22,69,200,87,94,23,193,1,27, -248,22,69,23,201,1,28,248,22,75,23,194,2,87,94,23,193,1,248,23,198, -1,251,22,148,7,2,24,23,201,1,28,248,22,75,23,205,2,87,94,23,204, -1,23,203,1,250,22,1,22,170,13,23,206,1,23,207,1,23,200,1,27,249, -22,170,13,248,22,68,23,197,2,23,201,2,28,248,22,165,13,23,194,2,27, -250,22,1,22,170,13,23,197,1,203,28,248,22,165,13,193,192,253,2,39,202, -203,204,205,206,248,22,69,201,253,2,39,201,202,203,204,205,248,22,69,200,27, -247,22,130,14,253,2,39,198,199,200,201,202,198,87,95,28,28,248,22,153,13, -23,194,2,10,28,248,22,152,13,23,194,2,10,28,248,22,164,6,23,194,2, -28,248,22,174,13,23,194,2,10,248,22,175,13,23,194,2,11,12,252,22,137, -9,23,200,2,2,25,35,23,198,2,23,199,2,28,28,248,22,164,6,23,195, -2,10,248,22,152,7,23,195,2,87,94,23,194,1,12,252,22,137,9,23,200, -2,2,26,36,23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22, -173,13,23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,138,9,23,201, -1,2,27,23,199,1,249,22,7,194,195,91,159,37,11,90,161,37,35,11,87, -95,28,28,248,22,153,13,23,196,2,10,28,248,22,152,13,23,196,2,10,28, -248,22,164,6,23,196,2,28,248,22,174,13,23,196,2,10,248,22,175,13,23, -196,2,11,12,252,22,137,9,2,9,2,25,35,23,200,2,23,201,2,28,28, -248,22,164,6,23,197,2,10,248,22,152,7,23,197,2,12,252,22,137,9,2, -9,2,26,36,23,200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22, -173,13,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,138,9,2,9, -2,27,23,201,2,249,22,7,194,195,27,249,22,162,13,250,22,146,14,0,20, -35,114,120,35,34,40,63,58,91,46,93,91,94,46,93,42,124,41,36,34,248, -22,158,13,23,201,1,28,248,22,164,6,23,203,2,249,22,176,7,23,204,1, -8,63,23,202,1,28,248,22,153,13,23,199,2,248,22,154,13,23,199,1,87, -94,23,198,1,247,22,155,13,28,248,22,152,13,194,249,22,170,13,195,194,192, -91,159,37,11,90,161,37,35,11,87,95,28,28,248,22,153,13,23,196,2,10, -28,248,22,152,13,23,196,2,10,28,248,22,164,6,23,196,2,28,248,22,174, -13,23,196,2,10,248,22,175,13,23,196,2,11,12,252,22,137,9,2,10,2, -25,35,23,200,2,23,201,2,28,28,248,22,164,6,23,197,2,10,248,22,152, -7,23,197,2,12,252,22,137,9,2,10,2,26,36,23,200,2,23,201,2,91, -159,38,11,90,161,38,35,11,248,22,173,13,23,199,2,87,94,23,195,1,87, -94,28,192,12,250,22,138,9,2,10,2,27,23,201,2,249,22,7,194,195,27, -249,22,162,13,249,22,162,7,250,22,147,14,0,9,35,114,120,35,34,91,46, -93,34,248,22,158,13,23,203,1,6,1,1,95,28,248,22,164,6,23,202,2, -249,22,176,7,23,203,1,8,63,23,201,1,28,248,22,153,13,23,199,2,248, -22,154,13,23,199,1,87,94,23,198,1,247,22,155,13,28,248,22,152,13,194, -249,22,170,13,195,194,192,249,247,22,131,5,194,11,249,80,159,37,46,36,9, -9,249,80,159,37,46,36,195,9,27,247,22,132,14,249,80,158,38,47,28,23, -195,2,27,248,22,181,7,6,11,11,80,76,84,67,79,76,76,69,67,84,83, -28,192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,170,13,248,22,128, -14,69,97,100,100,111,110,45,100,105,114,247,22,179,7,6,8,8,99,111,108, -108,101,99,116,115,11,27,248,80,159,41,52,36,250,22,81,23,203,1,248,22, -77,248,22,128,14,72,99,111,108,108,101,99,116,115,45,100,105,114,23,204,1, -28,193,249,22,67,195,194,192,32,49,89,162,8,44,38,51,2,18,222,33,52, -32,50,89,162,8,44,38,46,69,99,111,110,115,45,112,97,116,104,222,33,51, -28,249,22,158,7,23,196,2,5,0,249,22,81,194,196,87,94,23,193,1,249, -22,67,248,22,161,13,23,197,1,196,27,249,22,139,14,23,197,2,23,198,2, -28,23,193,2,87,94,23,196,1,250,2,50,23,197,2,248,22,92,23,197,2, -250,2,49,23,200,1,23,201,1,248,22,101,23,200,1,250,2,50,196,198,9, -87,95,28,28,248,22,152,7,194,10,248,22,164,6,194,12,250,22,137,9,2, -13,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116, -114,105,110,103,196,28,28,248,22,76,195,249,22,4,22,152,13,196,11,12,250, -22,137,9,2,13,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115, -197,250,2,49,197,195,28,248,22,164,6,197,248,22,175,7,197,196,32,54,89, -162,8,44,38,52,70,102,111,117,110,100,45,101,120,101,99,222,33,57,32,55, -89,162,8,44,39,57,64,110,101,120,116,222,33,56,27,248,22,178,13,23,196, -2,28,249,22,171,8,23,195,2,23,197,1,11,28,248,22,174,13,23,194,2, -27,249,22,170,13,23,197,1,23,196,1,28,23,197,2,91,159,38,11,90,161, -38,35,11,248,22,173,13,23,197,2,87,95,23,195,1,23,194,1,27,28,23, -202,2,27,248,22,178,13,23,199,2,28,249,22,171,8,23,195,2,23,200,2, -11,28,248,22,174,13,23,194,2,250,2,54,23,205,2,23,206,2,249,22,170, -13,23,200,2,23,198,1,250,2,54,23,205,2,23,206,2,23,196,1,11,28, -23,193,2,192,87,94,23,193,1,27,28,248,22,152,13,23,196,2,27,249,22, -170,13,23,198,2,23,205,2,28,28,248,22,165,13,193,10,248,22,164,13,193, -192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,203,2,11,27,248,22, -178,13,23,200,2,28,249,22,171,8,23,195,2,23,201,1,11,28,248,22,174, -13,23,194,2,250,2,54,23,206,1,23,207,1,249,22,170,13,23,201,1,23, -198,1,250,2,54,205,206,195,192,87,94,23,194,1,28,23,196,2,91,159,38, -11,90,161,38,35,11,248,22,173,13,23,197,2,87,95,23,195,1,23,194,1, -27,28,23,201,2,27,248,22,178,13,23,199,2,28,249,22,171,8,23,195,2, -23,200,2,11,28,248,22,174,13,23,194,2,250,2,54,23,204,2,23,205,2, -249,22,170,13,23,200,2,23,198,1,250,2,54,23,204,2,23,205,2,23,196, -1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,152,13,23,196,2, -27,249,22,170,13,23,198,2,23,204,2,28,28,248,22,165,13,193,10,248,22, -164,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,202,2,11, -27,248,22,178,13,23,200,2,28,249,22,171,8,23,195,2,23,201,1,11,28, -248,22,174,13,23,194,2,250,2,54,23,205,1,23,206,1,249,22,170,13,23, -201,1,23,198,1,250,2,54,204,205,195,192,28,23,193,2,91,159,38,11,90, -161,38,35,11,248,22,173,13,23,199,2,87,95,23,195,1,23,194,1,27,28, -23,198,2,251,2,55,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23, -193,2,192,87,94,23,193,1,27,28,248,22,152,13,195,27,249,22,170,13,197, -200,28,28,248,22,165,13,193,10,248,22,164,13,193,192,11,11,28,192,192,28, -198,11,251,2,55,198,203,201,202,194,32,58,89,162,8,44,39,54,2,18,222, -33,59,28,248,22,75,23,197,2,11,27,248,22,177,13,248,22,68,23,199,2, -27,249,22,170,13,23,196,1,23,197,2,28,248,22,164,13,23,194,2,250,2, -54,198,199,195,87,94,23,193,1,27,248,22,69,23,200,1,28,248,22,75,23, -194,2,11,27,248,22,177,13,248,22,68,195,27,249,22,170,13,23,196,1,199, -28,248,22,164,13,193,250,2,54,201,202,195,251,2,58,201,202,203,248,22,69, -199,87,95,28,28,248,22,152,13,23,195,2,10,28,248,22,164,6,23,195,2, -28,248,22,174,13,23,195,2,10,248,22,175,13,23,195,2,11,12,250,22,137, -9,2,14,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103,32, -40,115,97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28,28,248, -22,152,13,23,196,2,10,28,248,22,164,6,23,196,2,28,248,22,174,13,23, -196,2,10,248,22,175,13,23,196,2,11,248,22,174,13,23,196,2,11,10,12, -250,22,137,9,2,14,6,29,29,35,102,32,111,114,32,114,101,108,97,116,105, -118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198,2,28, -28,248,22,174,13,23,195,2,91,159,38,11,90,161,38,35,11,248,22,173,13, -23,198,2,249,22,169,8,194,68,114,101,108,97,116,105,118,101,11,27,248,22, -181,7,6,4,4,80,65,84,72,27,28,23,194,2,27,249,80,159,40,47,37, -23,197,1,9,28,249,22,169,8,247,22,183,7,2,20,249,22,67,248,22,161, -13,5,1,46,194,192,87,94,23,194,1,9,28,248,22,75,23,194,2,11,27, -248,22,177,13,248,22,68,23,196,2,27,249,22,170,13,23,196,1,23,200,2, -28,248,22,164,13,23,194,2,250,2,54,201,202,195,87,94,23,193,1,27,248, -22,69,23,197,1,28,248,22,75,23,194,2,11,27,248,22,177,13,248,22,68, -195,27,249,22,170,13,23,196,1,202,28,248,22,164,13,193,250,2,54,204,205, -195,251,2,58,204,205,206,248,22,69,199,27,248,22,177,13,23,196,1,28,248, -22,164,13,193,250,2,54,198,199,195,11,250,80,159,38,48,36,196,197,11,250, -80,159,38,48,36,196,11,11,87,94,249,22,155,6,247,22,191,4,195,248,22, -181,5,249,22,174,3,35,249,22,158,3,197,198,27,28,23,197,2,87,95,23, -196,1,23,195,1,23,197,1,87,94,23,197,1,27,248,22,128,14,2,19,27, -249,80,159,40,48,36,23,196,1,11,27,27,248,22,177,3,23,200,1,28,192, -192,35,27,27,248,22,177,3,23,202,1,28,192,192,35,249,22,158,5,23,197, -1,83,158,39,20,97,95,89,162,8,44,35,47,9,224,3,2,33,63,23,195, -1,23,196,1,27,248,22,143,5,23,195,1,248,80,159,38,53,36,193,159,35, -20,102,159,35,16,1,11,16,0,83,158,41,20,100,144,67,35,37,117,116,105, -108,115,29,11,11,11,11,11,10,42,80,158,35,35,20,102,159,37,16,17,2, -1,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,30,2,17,1,20,112,97,114,97,109,101,116,101, -114,105,122,97,116,105,111,110,45,107,101,121,4,30,2,17,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, -16,0,16,0,35,16,0,35,16,4,2,5,2,4,2,2,2,8,39,11,11, -38,35,11,11,11,16,11,2,7,2,6,2,15,2,14,2,12,2,11,2,3, -2,10,2,13,2,9,2,1,16,11,11,11,11,11,11,11,11,11,11,11,11, -16,11,2,7,2,6,2,15,2,14,2,12,2,11,2,3,2,10,2,13,2, -9,2,1,46,46,36,11,11,11,16,0,16,0,16,0,35,35,11,11,11,11, -16,0,16,0,16,0,35,35,16,0,16,17,83,158,35,16,2,89,162,43,36, -48,2,18,223,0,33,28,80,159,35,53,36,83,158,35,16,2,89,162,8,44, -36,55,2,18,223,0,33,29,80,159,35,52,36,83,158,35,16,2,32,0,89, -162,43,36,44,2,1,222,33,30,80,159,35,35,36,83,158,35,16,2,249,22, -166,6,7,92,7,92,80,159,35,36,36,83,158,35,16,2,89,162,43,36,53, -2,3,223,0,33,31,80,159,35,37,36,83,158,35,16,2,32,0,89,162,8, -44,37,49,2,4,222,33,32,80,159,35,38,36,83,158,35,16,2,32,0,89, -162,8,44,38,50,2,5,222,33,34,80,159,35,39,36,83,158,35,16,2,32, -0,89,162,8,45,37,49,2,6,222,33,38,80,159,35,40,36,83,158,35,16, -2,32,0,89,162,43,39,51,2,7,222,33,41,80,159,35,41,36,83,158,35, -16,2,32,0,89,162,43,38,49,2,8,222,33,42,80,159,35,42,36,83,158, -35,16,2,32,0,89,162,43,37,52,2,9,222,33,43,80,159,35,43,36,83, -158,35,16,2,32,0,89,162,43,37,53,2,10,222,33,44,80,159,35,44,36, -83,158,35,16,2,32,0,89,162,43,36,43,2,11,222,33,45,80,159,35,45, -36,83,158,35,16,2,83,158,38,20,96,96,2,12,89,162,43,35,43,9,223, -0,33,46,89,162,43,36,44,9,223,0,33,47,89,162,43,37,54,9,223,0, -33,48,80,159,35,46,36,83,158,35,16,2,27,248,22,135,14,248,22,175,7, -27,28,249,22,169,8,247,22,183,7,2,20,6,1,1,59,6,1,1,58,250, -22,148,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23, -196,2,23,196,1,89,162,8,44,37,47,2,13,223,0,33,53,80,159,35,47, -36,83,158,35,16,2,83,158,38,20,96,96,2,14,89,162,8,44,38,56,9, -223,0,33,60,89,162,43,37,46,9,223,0,33,61,89,162,43,36,45,9,223, -0,33,62,80,159,35,48,36,83,158,35,16,2,89,162,43,38,51,2,15,223, -0,33,64,80,159,35,49,36,94,29,94,2,16,68,35,37,107,101,114,110,101, -108,11,29,94,2,16,69,35,37,109,105,110,45,115,116,120,11,9,9,9,35, -0}; - EVAL_ONE_SIZED_STR((char *)expr, 5439); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,52,46,50,65,0,0,0,1,0,0,13,0,18,0, +35,0,50,0,68,0,84,0,94,0,112,0,132,0,148,0,166,0,197,0,226, +0,248,0,6,1,12,1,26,1,31,1,41,1,49,1,77,1,109,1,115,1, +160,1,205,1,229,1,12,2,69,2,159,3,200,3,17,5,103,5,189,5,32, +6,116,6,129,6,250,6,96,7,108,7,214,8,228,8,117,9,102,10,84,11, +91,11,99,11,107,11,232,11,245,11,10,12,41,12,94,12,196,12,218,12,234, +12,182,14,29,15,42,15,146,15,22,17,31,17,40,17,66,17,177,17,0,0, +167,20,0,0,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,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,75,99,111,108,108,101,99,116,105,111,110,45, +112,97,116,104,69,45,102,105,110,100,45,99,111,108,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,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,1, +20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104, +73,101,109,98,101,100,100,101,100,45,108,111,97,100,65,113,117,111,116,101,29, +94,2,16,68,35,37,112,97,114,97,109,122,11,64,108,111,111,112,69,101,120, +101,99,45,102,105,108,101,67,119,105,110,100,111,119,115,6,25,25,112,97,116, +104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110, +103,6,29,29,126,97,58,32,105,110,118,97,108,105,100,32,114,101,108,97,116, +105,118,101,32,112,97,116,104,58,32,126,115,65,99,108,111,111,112,6,42,42, +126,97,58,32,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102,111, +117,110,100,58,32,126,115,32,105,110,32,97,110,121,32,111,102,58,32,126,115, +6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121,32,115,121,115,116, +101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114, +105,110,103,6,21,21,115,116,114,105,110,103,32,111,114,32,98,121,116,101,32, +115,116,114,105,110,103,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,27,20,14,159,80,158,36,50,250,80,158,39,51,249,22,27,11,80, +158,41,50,22,131,13,10,248,22,163,5,23,196,2,28,248,22,160,6,23,194, +2,12,87,94,248,22,174,8,23,194,1,248,80,159,37,53,36,195,28,248,22, +76,23,195,2,9,27,248,22,69,23,196,2,27,28,248,22,177,13,23,195,2, +23,194,1,28,248,22,176,13,23,195,2,249,22,178,13,23,196,1,250,80,158, +42,48,248,22,129,14,2,19,11,10,250,80,158,40,48,248,22,129,14,2,19, +23,197,1,10,28,23,193,2,249,22,68,248,22,180,13,249,22,178,13,23,198, +1,247,22,130,14,27,248,22,70,23,200,1,28,248,22,76,23,194,2,9,27, +248,22,69,23,195,2,27,28,248,22,177,13,23,195,2,23,194,1,28,248,22, +176,13,23,195,2,249,22,178,13,23,196,1,250,80,158,47,48,248,22,129,14, +2,19,11,10,250,80,158,45,48,248,22,129,14,2,19,23,197,1,10,28,23, +193,2,249,22,68,248,22,180,13,249,22,178,13,23,198,1,247,22,130,14,248, +80,159,45,52,36,248,22,70,23,199,1,87,94,23,193,1,248,80,159,43,52, +36,248,22,70,23,197,1,87,94,23,193,1,27,248,22,70,23,198,1,28,248, +22,76,23,194,2,9,27,248,22,69,23,195,2,27,28,248,22,177,13,23,195, +2,23,194,1,28,248,22,176,13,23,195,2,249,22,178,13,23,196,1,250,80, +158,45,48,248,22,129,14,2,19,11,10,250,80,158,43,48,248,22,129,14,2, +19,23,197,1,10,28,23,193,2,249,22,68,248,22,180,13,249,22,178,13,23, +198,1,247,22,130,14,248,80,159,43,52,36,248,22,70,23,199,1,248,80,159, +41,52,36,248,22,70,196,27,248,22,153,13,23,195,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,165,6,23,195,2,27,248,22,175,13,195,28,192,192, +248,22,176,13,195,11,87,94,28,28,248,22,154,13,23,195,2,10,28,248,22, +153,13,23,195,2,10,28,248,22,165,6,23,195,2,28,248,22,175,13,23,195, +2,10,248,22,176,13,23,195,2,11,12,250,22,138,9,76,110,111,114,109,97, +108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32,40,102, +111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108, +105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197,2,28,28,248,22, +154,13,23,195,2,249,22,170,8,248,22,155,13,23,197,2,2,20,249,22,170, +8,247,22,184,7,2,20,27,28,248,22,165,6,23,196,2,23,195,2,248,22, +174,7,248,22,158,13,23,197,2,28,249,22,142,14,0,21,35,114,120,34,94, +91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,23,195,2,28,248, +22,165,6,195,248,22,161,13,195,194,27,248,22,140,7,23,195,1,249,22,162, +13,248,22,177,7,250,22,148,14,0,6,35,114,120,34,47,34,28,249,22,142, +14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92, +93,42,36,34,23,201,2,23,199,1,250,22,148,14,0,19,35,114,120,34,91, +32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202,1,6,2,2,92, +49,80,159,43,36,37,2,20,28,248,22,165,6,194,248,22,161,13,194,193,87, +94,28,28,248,22,153,13,23,195,2,10,28,248,22,165,6,23,195,2,28,248, +22,175,13,23,195,2,10,248,22,176,13,23,195,2,11,12,250,22,138,9,23, +196,2,2,21,23,197,2,28,248,22,175,13,23,195,2,12,248,22,171,11,249, +22,177,10,248,22,130,7,250,22,149,7,2,22,23,200,1,23,201,1,247,22, +23,87,94,28,28,248,22,153,13,23,195,2,10,28,248,22,165,6,23,195,2, +28,248,22,175,13,23,195,2,10,248,22,176,13,23,195,2,11,12,250,22,138, +9,23,196,2,2,21,23,197,2,28,248,22,175,13,23,195,2,12,248,22,171, +11,249,22,177,10,248,22,130,7,250,22,149,7,2,22,23,200,1,23,201,1, +247,22,23,87,94,87,94,28,28,248,22,153,13,23,195,2,10,28,248,22,165, +6,23,195,2,28,248,22,175,13,23,195,2,10,248,22,176,13,23,195,2,11, +12,250,22,138,9,195,2,21,23,197,2,28,248,22,175,13,23,195,2,12,248, +22,171,11,249,22,177,10,248,22,130,7,250,22,149,7,2,22,199,23,201,1, +247,22,23,249,22,3,89,162,8,44,36,49,9,223,2,33,33,196,87,94,28, +28,248,22,153,13,23,194,2,10,28,248,22,165,6,23,194,2,28,248,22,175, +13,23,194,2,10,248,22,176,13,23,194,2,11,12,250,22,138,9,2,6,2, +21,23,196,2,28,248,22,175,13,23,194,2,12,248,22,171,11,249,22,177,10, +248,22,130,7,250,22,149,7,2,22,2,6,23,200,1,247,22,23,32,36,89, +162,8,44,39,54,2,23,222,33,37,28,248,22,76,23,197,2,87,94,23,196, +1,248,22,171,11,249,22,146,11,251,22,149,7,2,24,2,6,28,248,22,76, +23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,171,13,23,204,1,23, +205,1,23,200,1,247,22,23,27,249,22,171,13,248,22,69,23,200,2,23,197, +2,28,248,22,166,13,23,194,2,27,250,22,1,22,171,13,23,197,1,199,28, +248,22,166,13,193,192,251,2,36,198,199,200,248,22,70,202,251,2,36,197,198, +199,248,22,70,201,87,94,87,94,87,94,28,28,248,22,153,13,193,10,28,248, +22,165,6,193,28,248,22,175,13,193,10,248,22,176,13,193,11,12,250,22,138, +9,2,6,2,21,195,28,248,22,175,13,193,12,248,22,171,11,249,22,177,10, +248,22,130,7,250,22,149,7,2,22,2,6,199,247,22,23,249,22,3,32,0, +89,162,8,44,36,48,9,222,33,35,195,27,247,22,131,14,251,2,36,196,197, +198,196,32,39,89,162,43,41,58,2,23,222,33,40,28,248,22,76,23,199,2, +87,94,23,198,1,248,23,196,1,251,22,149,7,2,24,23,199,1,28,248,22, +76,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,171,13,23,204,1, +23,205,1,23,198,1,27,249,22,171,13,248,22,69,23,202,2,23,199,2,28, +248,22,166,13,23,194,2,27,250,22,1,22,171,13,23,197,1,23,202,2,28, +248,22,166,13,23,194,2,192,87,94,23,193,1,27,248,22,70,23,202,1,28, +248,22,76,23,194,2,87,94,23,193,1,248,23,199,1,251,22,149,7,2,24, +23,202,1,28,248,22,76,23,206,2,87,94,23,205,1,23,204,1,250,22,1, +22,171,13,23,207,1,23,208,1,23,201,1,27,249,22,171,13,248,22,69,23, +197,2,23,202,2,28,248,22,166,13,23,194,2,27,250,22,1,22,171,13,23, +197,1,204,28,248,22,166,13,193,192,253,2,39,203,204,205,206,23,15,248,22, +70,201,253,2,39,202,203,204,205,206,248,22,70,200,87,94,23,193,1,27,248, +22,70,23,201,1,28,248,22,76,23,194,2,87,94,23,193,1,248,23,198,1, +251,22,149,7,2,24,23,201,1,28,248,22,76,23,205,2,87,94,23,204,1, +23,203,1,250,22,1,22,171,13,23,206,1,23,207,1,23,200,1,27,249,22, +171,13,248,22,69,23,197,2,23,201,2,28,248,22,166,13,23,194,2,27,250, +22,1,22,171,13,23,197,1,203,28,248,22,166,13,193,192,253,2,39,202,203, +204,205,206,248,22,70,201,253,2,39,201,202,203,204,205,248,22,70,200,27,247, +22,131,14,253,2,39,198,199,200,201,202,198,87,95,28,28,248,22,154,13,23, +194,2,10,28,248,22,153,13,23,194,2,10,28,248,22,165,6,23,194,2,28, +248,22,175,13,23,194,2,10,248,22,176,13,23,194,2,11,12,252,22,138,9, +23,200,2,2,25,35,23,198,2,23,199,2,28,28,248,22,165,6,23,195,2, +10,248,22,153,7,23,195,2,87,94,23,194,1,12,252,22,138,9,23,200,2, +2,26,36,23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,174, +13,23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,139,9,23,201,1, +2,27,23,199,1,249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95, +28,28,248,22,154,13,23,196,2,10,28,248,22,153,13,23,196,2,10,28,248, +22,165,6,23,196,2,28,248,22,175,13,23,196,2,10,248,22,176,13,23,196, +2,11,12,252,22,138,9,2,9,2,25,35,23,200,2,23,201,2,28,28,248, +22,165,6,23,197,2,10,248,22,153,7,23,197,2,12,252,22,138,9,2,9, +2,26,36,23,200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,174, +13,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,139,9,2,9,2, +27,23,201,2,249,22,7,194,195,27,249,22,163,13,250,22,147,14,0,20,35, +114,120,35,34,40,63,58,91,46,93,91,94,46,93,42,124,41,36,34,248,22, +159,13,23,201,1,28,248,22,165,6,23,203,2,249,22,177,7,23,204,1,8, +63,23,202,1,28,248,22,154,13,23,199,2,248,22,155,13,23,199,1,87,94, +23,198,1,247,22,156,13,28,248,22,153,13,194,249,22,171,13,195,194,192,91, +159,37,11,90,161,37,35,11,87,95,28,28,248,22,154,13,23,196,2,10,28, +248,22,153,13,23,196,2,10,28,248,22,165,6,23,196,2,28,248,22,175,13, +23,196,2,10,248,22,176,13,23,196,2,11,12,252,22,138,9,2,10,2,25, +35,23,200,2,23,201,2,28,28,248,22,165,6,23,197,2,10,248,22,153,7, +23,197,2,12,252,22,138,9,2,10,2,26,36,23,200,2,23,201,2,91,159, +38,11,90,161,38,35,11,248,22,174,13,23,199,2,87,94,23,195,1,87,94, +28,192,12,250,22,139,9,2,10,2,27,23,201,2,249,22,7,194,195,27,249, +22,163,13,249,22,163,7,250,22,148,14,0,9,35,114,120,35,34,91,46,93, +34,248,22,159,13,23,203,1,6,1,1,95,28,248,22,165,6,23,202,2,249, +22,177,7,23,203,1,8,63,23,201,1,28,248,22,154,13,23,199,2,248,22, +155,13,23,199,1,87,94,23,198,1,247,22,156,13,28,248,22,153,13,194,249, +22,171,13,195,194,192,249,247,22,132,5,194,11,249,80,159,37,46,36,9,9, +249,80,159,37,46,36,195,9,27,247,22,133,14,249,80,158,38,47,28,23,195, +2,27,248,22,182,7,6,11,11,80,76,84,67,79,76,76,69,67,84,83,28, +192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,171,13,248,22,129,14, +69,97,100,100,111,110,45,100,105,114,247,22,180,7,6,8,8,99,111,108,108, +101,99,116,115,11,27,248,80,159,41,52,36,250,22,82,23,203,1,248,22,78, +248,22,129,14,72,99,111,108,108,101,99,116,115,45,100,105,114,23,204,1,28, +193,249,22,68,195,194,192,32,49,89,162,8,44,38,51,2,18,222,33,52,32, +50,89,162,8,44,38,46,69,99,111,110,115,45,112,97,116,104,222,33,51,28, +249,22,159,7,23,196,2,5,0,249,22,82,194,196,87,94,23,193,1,249,22, +68,248,22,162,13,23,197,1,196,27,249,22,140,14,23,197,2,23,198,2,28, +23,193,2,87,94,23,196,1,250,2,50,23,197,2,248,22,93,23,197,2,250, +2,49,23,200,1,23,201,1,248,22,102,23,200,1,250,2,50,196,198,9,87, +95,28,28,248,22,153,7,194,10,248,22,165,6,194,12,250,22,138,9,2,13, +6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114, +105,110,103,196,28,28,248,22,77,195,249,22,4,22,153,13,196,11,12,250,22, +138,9,2,13,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197, +250,2,49,197,195,28,248,22,165,6,197,248,22,176,7,197,196,32,54,89,162, +8,44,38,52,70,102,111,117,110,100,45,101,120,101,99,222,33,57,32,55,89, +162,8,44,39,57,64,110,101,120,116,222,33,56,27,248,22,179,13,23,196,2, +28,249,22,172,8,23,195,2,23,197,1,11,28,248,22,175,13,23,194,2,27, +249,22,171,13,23,197,1,23,196,1,28,23,197,2,91,159,38,11,90,161,38, +35,11,248,22,174,13,23,197,2,87,95,23,195,1,23,194,1,27,28,23,202, +2,27,248,22,179,13,23,199,2,28,249,22,172,8,23,195,2,23,200,2,11, +28,248,22,175,13,23,194,2,250,2,54,23,205,2,23,206,2,249,22,171,13, +23,200,2,23,198,1,250,2,54,23,205,2,23,206,2,23,196,1,11,28,23, +193,2,192,87,94,23,193,1,27,28,248,22,153,13,23,196,2,27,249,22,171, +13,23,198,2,23,205,2,28,28,248,22,166,13,193,10,248,22,165,13,193,192, +11,11,28,23,193,2,192,87,94,23,193,1,28,23,203,2,11,27,248,22,179, +13,23,200,2,28,249,22,172,8,23,195,2,23,201,1,11,28,248,22,175,13, +23,194,2,250,2,54,23,206,1,23,207,1,249,22,171,13,23,201,1,23,198, +1,250,2,54,205,206,195,192,87,94,23,194,1,28,23,196,2,91,159,38,11, +90,161,38,35,11,248,22,174,13,23,197,2,87,95,23,195,1,23,194,1,27, +28,23,201,2,27,248,22,179,13,23,199,2,28,249,22,172,8,23,195,2,23, +200,2,11,28,248,22,175,13,23,194,2,250,2,54,23,204,2,23,205,2,249, +22,171,13,23,200,2,23,198,1,250,2,54,23,204,2,23,205,2,23,196,1, +11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,153,13,23,196,2,27, +249,22,171,13,23,198,2,23,204,2,28,28,248,22,166,13,193,10,248,22,165, +13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,202,2,11,27, +248,22,179,13,23,200,2,28,249,22,172,8,23,195,2,23,201,1,11,28,248, +22,175,13,23,194,2,250,2,54,23,205,1,23,206,1,249,22,171,13,23,201, +1,23,198,1,250,2,54,204,205,195,192,28,23,193,2,91,159,38,11,90,161, +38,35,11,248,22,174,13,23,199,2,87,95,23,195,1,23,194,1,27,28,23, +198,2,251,2,55,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23,193, +2,192,87,94,23,193,1,27,28,248,22,153,13,195,27,249,22,171,13,197,200, +28,28,248,22,166,13,193,10,248,22,165,13,193,192,11,11,28,192,192,28,198, +11,251,2,55,198,203,201,202,194,32,58,89,162,8,44,39,54,2,18,222,33, +59,28,248,22,76,23,197,2,11,27,248,22,178,13,248,22,69,23,199,2,27, +249,22,171,13,23,196,1,23,197,2,28,248,22,165,13,23,194,2,250,2,54, +198,199,195,87,94,23,193,1,27,248,22,70,23,200,1,28,248,22,76,23,194, +2,11,27,248,22,178,13,248,22,69,195,27,249,22,171,13,23,196,1,199,28, +248,22,165,13,193,250,2,54,201,202,195,251,2,58,201,202,203,248,22,70,199, +87,95,28,28,248,22,153,13,23,195,2,10,28,248,22,165,6,23,195,2,28, +248,22,175,13,23,195,2,10,248,22,176,13,23,195,2,11,12,250,22,138,9, +2,14,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103,32,40, +115,97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28,28,248,22, +153,13,23,196,2,10,28,248,22,165,6,23,196,2,28,248,22,175,13,23,196, +2,10,248,22,176,13,23,196,2,11,248,22,175,13,23,196,2,11,10,12,250, +22,138,9,2,14,6,29,29,35,102,32,111,114,32,114,101,108,97,116,105,118, +101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198,2,28,28, +248,22,175,13,23,195,2,91,159,38,11,90,161,38,35,11,248,22,174,13,23, +198,2,249,22,170,8,194,68,114,101,108,97,116,105,118,101,11,27,248,22,182, +7,6,4,4,80,65,84,72,27,28,23,194,2,27,249,80,159,40,47,37,23, +197,1,9,28,249,22,170,8,247,22,184,7,2,20,249,22,68,248,22,162,13, +5,1,46,194,192,87,94,23,194,1,9,28,248,22,76,23,194,2,11,27,248, +22,178,13,248,22,69,23,196,2,27,249,22,171,13,23,196,1,23,200,2,28, +248,22,165,13,23,194,2,250,2,54,201,202,195,87,94,23,193,1,27,248,22, +70,23,197,1,28,248,22,76,23,194,2,11,27,248,22,178,13,248,22,69,195, +27,249,22,171,13,23,196,1,202,28,248,22,165,13,193,250,2,54,204,205,195, +251,2,58,204,205,206,248,22,70,199,27,248,22,178,13,23,196,1,28,248,22, +165,13,193,250,2,54,198,199,195,11,250,80,159,38,48,36,196,197,11,250,80, +159,38,48,36,196,11,11,87,94,249,22,156,6,247,22,128,5,195,248,22,182, +5,249,22,175,3,35,249,22,159,3,197,198,27,28,23,197,2,87,95,23,196, +1,23,195,1,23,197,1,87,94,23,197,1,27,248,22,129,14,2,19,27,249, +80,159,40,48,36,23,196,1,11,27,27,248,22,178,3,23,200,1,28,192,192, +35,27,27,248,22,178,3,23,202,1,28,192,192,35,249,22,159,5,23,197,1, +83,158,39,20,97,95,89,162,8,44,35,47,9,224,3,2,33,63,23,195,1, +23,196,1,27,248,22,144,5,23,195,1,248,80,159,38,53,36,193,159,35,20, +102,159,35,16,1,11,16,0,83,158,41,20,100,144,67,35,37,117,116,105,108, +115,29,11,11,11,11,11,10,42,80,158,35,35,20,102,159,37,16,17,2,1, +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,30,2,17,1,20,112,97,114,97,109,101,116,101,114, +105,122,97,116,105,111,110,45,107,101,121,4,30,2,17,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,16, +0,16,0,35,16,0,35,16,4,2,5,2,4,2,2,2,8,39,11,11,38, +35,11,11,11,16,11,2,7,2,6,2,15,2,14,2,12,2,11,2,3,2, +10,2,13,2,9,2,1,16,11,11,11,11,11,11,11,11,11,11,11,11,16, +11,2,7,2,6,2,15,2,14,2,12,2,11,2,3,2,10,2,13,2,9, +2,1,46,46,36,11,11,11,16,0,16,0,16,0,35,35,11,11,11,11,16, +0,16,0,16,0,35,35,16,0,16,17,83,158,35,16,2,89,162,43,36,48, +2,18,223,0,33,28,80,159,35,53,36,83,158,35,16,2,89,162,8,44,36, +55,2,18,223,0,33,29,80,159,35,52,36,83,158,35,16,2,32,0,89,162, +43,36,44,2,1,222,33,30,80,159,35,35,36,83,158,35,16,2,249,22,167, +6,7,92,7,92,80,159,35,36,36,83,158,35,16,2,89,162,43,36,53,2, +3,223,0,33,31,80,159,35,37,36,83,158,35,16,2,32,0,89,162,8,44, +37,49,2,4,222,33,32,80,159,35,38,36,83,158,35,16,2,32,0,89,162, +8,44,38,50,2,5,222,33,34,80,159,35,39,36,83,158,35,16,2,32,0, +89,162,8,45,37,49,2,6,222,33,38,80,159,35,40,36,83,158,35,16,2, +32,0,89,162,43,39,51,2,7,222,33,41,80,159,35,41,36,83,158,35,16, +2,32,0,89,162,43,38,49,2,8,222,33,42,80,159,35,42,36,83,158,35, +16,2,32,0,89,162,43,37,52,2,9,222,33,43,80,159,35,43,36,83,158, +35,16,2,32,0,89,162,43,37,53,2,10,222,33,44,80,159,35,44,36,83, +158,35,16,2,32,0,89,162,43,36,43,2,11,222,33,45,80,159,35,45,36, +83,158,35,16,2,83,158,38,20,96,96,2,12,89,162,43,35,43,9,223,0, +33,46,89,162,43,36,44,9,223,0,33,47,89,162,43,37,54,9,223,0,33, +48,80,159,35,46,36,83,158,35,16,2,27,248,22,136,14,248,22,176,7,27, +28,249,22,170,8,247,22,184,7,2,20,6,1,1,59,6,1,1,58,250,22, +149,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196, +2,23,196,1,89,162,8,44,37,47,2,13,223,0,33,53,80,159,35,47,36, +83,158,35,16,2,83,158,38,20,96,96,2,14,89,162,8,44,38,56,9,223, +0,33,60,89,162,43,37,46,9,223,0,33,61,89,162,43,36,45,9,223,0, +33,62,80,159,35,48,36,83,158,35,16,2,89,162,43,38,51,2,15,223,0, +33,64,80,159,35,49,36,94,29,94,2,16,68,35,37,107,101,114,110,101,108, +11,29,94,2,16,69,35,37,109,105,110,45,115,116,120,11,9,9,9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 5438); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,51,46,49,50,8,0,0,0,1,0,0,6,0,19, -0,34,0,48,0,62,0,76,0,118,0,0,0,53,1,0,0,65,113,117,111, -116,101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35, -37,110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109, -122,11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,68, -35,37,107,101,114,110,101,108,11,97,35,11,8,240,106,79,0,0,98,159,2, -2,35,35,159,2,3,35,35,159,2,4,35,35,159,2,5,35,35,159,2,6, -35,35,159,2,6,35,35,16,0,159,35,20,102,159,35,16,1,11,16,0,83, -158,41,20,100,144,69,35,37,98,117,105,108,116,105,110,29,11,11,11,11,11, -18,96,11,42,42,42,35,80,158,35,35,20,102,159,35,16,0,16,0,16,0, -35,16,0,35,16,0,35,11,11,38,35,11,11,11,16,0,16,0,16,0,35, -35,36,11,11,11,16,0,16,0,16,0,35,35,11,11,11,11,16,0,16,0, -16,0,35,35,16,0,16,0,102,2,6,2,5,29,94,2,1,69,35,37,102, -111,114,101,105,103,110,11,29,94,2,1,68,35,37,117,110,115,97,102,101,11, -29,94,2,1,69,35,37,102,108,102,120,110,117,109,11,2,4,2,3,2,2, -29,94,2,1,67,35,37,112,108,97,99,101,11,29,94,2,1,69,35,37,102, -117,116,117,114,101,115,11,9,9,9,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 347); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,52,46,50,8,0,0,0,1,0,0,6,0,19,0, +34,0,48,0,62,0,76,0,118,0,0,0,53,1,0,0,65,113,117,111,116, +101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37, +110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122, +11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,68,35, +37,107,101,114,110,101,108,11,97,35,11,8,240,39,76,0,0,98,159,2,2, +35,35,159,2,3,35,35,159,2,4,35,35,159,2,5,35,35,159,2,6,35, +35,159,2,6,35,35,16,0,159,35,20,102,159,35,16,1,11,16,0,83,158, +41,20,100,144,69,35,37,98,117,105,108,116,105,110,29,11,11,11,11,11,18, +96,11,42,42,42,35,80,158,35,35,20,102,159,35,16,0,16,0,16,0,35, +16,0,35,16,0,35,11,11,38,35,11,11,11,16,0,16,0,16,0,35,35, +36,11,11,11,16,0,16,0,16,0,35,35,11,11,11,11,16,0,16,0,16, +0,35,35,16,0,16,0,102,2,6,2,5,29,94,2,1,69,35,37,102,111, +114,101,105,103,110,11,29,94,2,1,68,35,37,117,110,115,97,102,101,11,29, +94,2,1,69,35,37,102,108,102,120,110,117,109,11,2,4,2,3,2,2,29, +94,2,1,67,35,37,112,108,97,99,101,11,29,94,2,1,69,35,37,102,117, +116,117,114,101,115,11,9,9,9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 346); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,51,46,49,50,67,0,0,0,1,0,0,11,0,38, -0,44,0,57,0,66,0,73,0,95,0,117,0,143,0,155,0,173,0,193,0, -205,0,221,0,244,0,0,1,31,1,38,1,43,1,48,1,53,1,58,1,62, -1,70,1,79,1,124,1,147,1,183,1,214,1,248,1,2,2,36,2,46,2, -53,2,215,3,234,3,247,3,149,4,161,4,39,5,171,5,37,6,43,6,57, -6,70,6,150,6,162,6,208,6,221,6,45,7,57,7,103,7,130,7,143,7, -223,7,235,7,25,8,38,8,118,8,200,8,29,9,31,9,97,9,181,17,231, -17,252,17,0,0,182,20,0,0,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,29,94,2,3,67,35,37,117,116,105, -108,115,11,68,35,37,112,97,114,97,109,122,29,94,2,3,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,1, -20,100,101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100, -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,71,45,112,97,116,104,45,99,97,99,104,101,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,3,2,5,11,64,98,111,111,116,64,115,101,97,108,64,115, -97,109,101,64,108,111,111,112,63,108,105,98,67,105,103,110,111,114,101,100,249, -22,14,195,80,159,37,45,37,20,14,159,80,158,35,39,250,80,158,38,40,249, -22,27,11,80,158,40,39,22,132,5,28,248,22,152,13,23,198,2,23,197,1, -87,94,23,197,1,247,22,129,14,247,194,250,22,170,13,23,197,1,23,199,1, -249,80,158,42,38,23,198,1,5,3,46,122,111,252,22,170,13,23,199,1,23, -201,1,6,6,6,110,97,116,105,118,101,247,22,184,7,249,80,158,44,38,23, -200,1,80,159,44,35,37,87,94,23,194,1,27,250,22,187,13,196,11,32,0, -89,162,8,44,35,40,9,222,11,28,192,249,22,67,195,194,11,27,248,23,195, -1,23,196,1,27,250,22,187,13,196,11,32,0,89,162,8,44,35,40,9,222, -11,28,192,249,22,67,195,194,11,249,247,22,134,14,248,22,68,195,195,27,248, -23,195,1,23,196,1,27,250,22,187,13,196,11,32,0,89,162,8,44,35,40, -9,222,11,28,192,249,22,67,195,194,11,249,247,22,130,5,248,22,68,195,195, -249,247,22,130,5,194,195,87,94,28,248,80,158,36,37,23,195,2,12,250,22, -137,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,52,46,50,53,0,0,0,1,0,0,11,0,38,0, +44,0,57,0,66,0,73,0,95,0,117,0,143,0,155,0,173,0,193,0,205, +0,221,0,244,0,0,1,31,1,38,1,43,1,48,1,53,1,58,1,62,1, +70,1,79,1,87,1,132,1,155,1,191,1,222,1,0,2,10,2,44,2,54, +2,61,2,223,3,242,3,255,3,157,4,169,4,47,5,89,6,211,6,217,6, +231,6,2,7,87,7,89,7,155,7,133,14,183,14,204,14,0,0,157,17,0, +0,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,29,94,2,3,67,35,37,117,116,105,108,115,11,68,35,37,112,97, +114,97,109,122,29,94,2,3,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,1,20,100,101,102,97,117,108,116, +45,114,101,97,100,101,114,45,103,117,97,114,100,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,71,45,112, +97,116,104,45,99,97,99,104,101,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,3,2,5, +11,64,98,111,111,116,64,115,101,97,108,64,115,97,109,101,64,108,111,111,112, +63,108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80,159,37,45,37, +249,80,159,37,48,36,195,10,20,14,159,80,158,35,39,250,80,158,38,40,249, +22,27,11,80,158,40,39,22,133,5,28,248,22,153,13,23,198,2,23,197,1, +87,94,23,197,1,247,22,130,14,247,194,250,22,171,13,23,197,1,23,199,1, +249,80,158,42,38,23,198,1,5,3,46,122,111,252,22,171,13,23,199,1,23, +201,1,6,6,6,110,97,116,105,118,101,247,22,185,7,249,80,158,44,38,23, +200,1,80,159,44,35,37,87,94,23,194,1,27,250,22,188,13,196,11,32,0, +89,162,8,44,35,40,9,222,11,28,192,249,22,68,195,194,11,27,248,23,195, +1,23,196,1,27,250,22,188,13,196,11,32,0,89,162,8,44,35,40,9,222, +11,28,192,249,22,68,195,194,11,249,247,22,135,14,248,22,69,195,195,27,248, +23,195,1,23,196,1,27,250,22,188,13,196,11,32,0,89,162,8,44,35,40, +9,222,11,28,192,249,22,68,195,194,11,249,247,22,131,5,248,22,69,195,195, +249,247,22,131,5,194,195,87,94,28,248,80,158,36,37,23,195,2,12,250,22, +138,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6, 25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32, 115,116,114,105,110,103,23,197,2,91,159,41,11,90,161,36,35,11,28,248,22, -176,13,23,201,2,23,200,1,27,247,22,132,5,28,23,193,2,249,22,177,13, -23,203,1,23,195,1,200,90,161,38,36,11,248,22,173,13,23,194,2,87,94, -23,196,1,90,161,36,39,11,28,249,22,169,8,23,196,2,68,114,101,108,97, +177,13,23,201,2,23,200,1,27,247,22,133,5,28,23,193,2,249,22,178,13, +23,203,1,23,195,1,200,90,161,38,36,11,248,22,174,13,23,194,2,87,94, +23,196,1,90,161,36,39,11,28,249,22,170,8,23,196,2,68,114,101,108,97, 116,105,118,101,87,94,23,194,1,2,21,23,194,1,90,161,36,40,11,247,22, -131,14,27,89,162,43,36,49,62,122,111,225,7,5,3,33,27,27,83,158,39, -20,97,94,89,162,43,36,51,9,225,8,6,4,33,28,23,197,1,27,249,22, -5,89,162,8,44,36,46,9,223,5,33,29,23,203,2,27,28,23,195,2,27, -249,22,5,83,158,39,20,97,94,89,162,8,44,36,47,9,223,5,33,30,23, +132,14,27,89,162,43,36,49,62,122,111,225,7,5,3,33,28,27,83,158,39, +20,97,94,89,162,43,36,51,9,225,8,6,4,33,29,23,197,1,27,249,22, +5,89,162,8,44,36,46,9,223,5,33,30,23,203,2,27,28,23,195,2,27, +249,22,5,83,158,39,20,97,94,89,162,8,44,36,47,9,223,5,33,31,23, 198,1,23,205,2,27,28,23,196,2,11,193,28,192,192,28,193,28,23,196,2, -28,249,22,170,3,248,22,69,196,248,22,69,23,199,2,193,11,11,11,87,94, +28,249,22,171,3,248,22,70,196,248,22,70,23,199,2,193,11,11,11,87,94, 23,195,1,11,28,23,193,2,249,80,159,47,58,36,202,89,162,43,35,45,9, -224,14,2,33,31,87,94,23,193,1,27,28,23,197,2,27,249,22,5,83,158, -39,20,97,94,89,162,8,44,36,47,9,223,7,33,32,23,200,1,23,206,1, -27,28,196,11,193,28,192,192,28,193,28,196,28,249,22,170,3,248,22,69,196, -248,22,69,199,193,11,11,11,11,28,192,249,80,159,48,58,36,203,89,162,43, -35,45,9,224,15,2,33,33,249,80,159,48,58,36,203,89,162,43,35,44,9, -224,15,7,33,34,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42, -41,36,34,32,37,89,162,8,44,36,58,2,22,222,33,38,27,249,22,139,14, -2,36,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23, -196,2,27,248,22,101,23,197,1,27,249,22,139,14,2,36,23,196,2,28,23, -193,2,87,94,23,194,1,249,22,67,248,22,92,23,196,2,27,248,22,101,23, -197,1,27,249,22,139,14,2,36,23,196,2,28,23,193,2,87,94,23,194,1, -249,22,67,248,22,92,23,196,2,27,248,22,101,23,197,1,27,249,22,139,14, -2,36,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23, -196,2,248,2,37,248,22,101,23,197,1,248,22,77,194,248,22,77,194,248,22, -77,194,248,22,77,194,32,39,89,162,43,36,54,2,22,222,33,40,28,248,22, -75,248,22,69,23,195,2,249,22,7,9,248,22,68,195,91,159,37,11,90,161, -37,35,11,27,248,22,69,196,28,248,22,75,248,22,69,23,195,2,249,22,7, -9,248,22,68,195,91,159,37,11,90,161,37,35,11,27,248,22,69,196,28,248, -22,75,248,22,69,23,195,2,249,22,7,9,248,22,68,195,91,159,37,11,90, -161,37,35,11,248,2,39,248,22,69,196,249,22,7,249,22,67,248,22,68,199, -196,195,249,22,7,249,22,67,248,22,68,199,196,195,249,22,7,249,22,67,248, -22,68,199,196,195,27,27,249,22,139,14,2,36,23,197,2,28,23,193,2,87, -94,23,195,1,249,22,67,248,22,92,23,196,2,27,248,22,101,23,197,1,27, -249,22,139,14,2,36,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67, -248,22,92,23,196,2,248,2,37,248,22,101,23,197,1,248,22,77,194,248,22, -77,195,28,23,195,1,192,28,248,22,75,248,22,69,23,195,2,249,22,7,9, -248,22,68,195,91,159,37,11,90,161,37,35,11,248,2,39,248,22,69,196,249, -22,7,249,22,67,248,22,68,199,196,195,87,95,28,248,22,174,4,195,12,250, -22,137,9,2,17,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117, -108,101,45,112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193, -1,12,27,27,250,22,141,2,80,159,41,42,37,248,22,159,14,247,22,134,12, -11,28,23,193,2,192,87,94,23,193,1,27,247,22,125,87,94,250,22,139,2, -80,159,42,42,37,248,22,159,14,247,22,134,12,195,192,250,22,139,2,195,198, -66,97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,136,9,11,196, -195,248,22,134,9,194,32,45,89,162,8,44,36,50,2,22,222,33,46,27,249, -22,139,14,2,36,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,248, -22,92,23,196,2,27,248,22,101,23,197,1,27,249,22,139,14,2,36,23,196, -2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23,196,2,248,2, -45,248,22,101,23,197,1,248,22,77,194,248,22,77,194,32,47,89,162,43,36, -48,2,22,222,33,48,28,248,22,75,248,22,69,23,195,2,249,22,7,9,248, -22,68,195,91,159,37,11,90,161,37,35,11,248,2,47,248,22,69,196,249,22, -7,249,22,67,248,22,68,199,196,195,32,49,89,162,8,44,36,50,2,22,222, -33,50,27,249,22,139,14,2,36,23,196,2,28,23,193,2,87,94,23,194,1, -249,22,67,248,22,92,23,196,2,27,248,22,101,23,197,1,27,249,22,139,14, -2,36,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23, -196,2,248,2,49,248,22,101,23,197,1,248,22,77,194,248,22,77,194,32,51, -89,162,43,36,48,2,22,222,33,52,28,248,22,75,248,22,69,23,195,2,249, -22,7,9,248,22,68,195,91,159,37,11,90,161,37,35,11,248,2,51,248,22, -69,196,249,22,7,249,22,67,248,22,68,199,196,195,28,249,22,170,6,194,6, -1,1,46,2,21,28,249,22,170,6,194,6,2,2,46,46,62,117,112,192,32, -54,89,162,8,44,36,50,2,22,222,33,55,27,249,22,139,14,2,36,23,196, -2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23,196,2,27,248, -22,101,23,197,1,27,249,22,139,14,2,36,23,196,2,28,23,193,2,87,94, -23,194,1,249,22,67,248,22,92,23,196,2,248,2,54,248,22,101,23,197,1, -248,22,77,194,248,22,77,194,32,56,89,162,43,36,48,2,22,222,33,57,28, -248,22,75,248,22,69,23,195,2,249,22,7,9,248,22,68,195,91,159,37,11, -90,161,37,35,11,248,2,56,248,22,69,196,249,22,7,249,22,67,248,22,68, -199,196,195,32,58,89,162,8,44,36,50,2,22,222,33,59,27,249,22,139,14, -2,36,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23, -196,2,27,248,22,101,23,197,1,27,249,22,139,14,2,36,23,196,2,28,23, -193,2,87,94,23,194,1,249,22,67,248,22,92,23,196,2,248,2,58,248,22, -101,23,197,1,248,22,77,194,248,22,77,194,27,27,249,22,139,14,2,36,23, -197,2,28,23,193,2,87,94,23,195,1,249,22,67,248,22,92,23,196,2,27, -248,22,101,23,197,1,27,249,22,139,14,2,36,23,196,2,28,23,193,2,87, -94,23,194,1,249,22,67,248,22,92,23,196,2,248,2,58,248,22,101,23,197, -1,248,22,77,194,248,22,77,195,192,28,249,22,171,8,248,22,69,23,200,2, -23,197,1,28,249,22,169,8,248,22,68,23,200,2,23,196,1,251,22,134,9, +224,14,2,33,32,87,94,23,193,1,27,28,23,197,2,27,249,22,5,83,158, +39,20,97,94,89,162,8,44,36,47,9,223,7,33,33,23,200,1,23,206,1, +27,28,196,11,193,28,192,192,28,193,28,196,28,249,22,171,3,248,22,70,196, +248,22,70,199,193,11,11,11,11,28,192,249,80,159,48,58,36,203,89,162,43, +35,45,9,224,15,2,33,34,249,80,159,48,58,36,203,89,162,43,35,44,9, +224,15,7,33,35,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42, +41,36,34,32,38,89,162,8,44,36,58,2,22,222,33,39,27,249,22,140,14, +2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,68,248,22,93,23, +196,2,27,248,22,102,23,197,1,27,249,22,140,14,2,37,23,196,2,28,23, +193,2,87,94,23,194,1,249,22,68,248,22,93,23,196,2,27,248,22,102,23, +197,1,27,249,22,140,14,2,37,23,196,2,28,23,193,2,87,94,23,194,1, +249,22,68,248,22,93,23,196,2,27,248,22,102,23,197,1,27,249,22,140,14, +2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,68,248,22,93,23, +196,2,248,2,38,248,22,102,23,197,1,248,22,78,194,248,22,78,194,248,22, +78,194,248,22,78,194,32,40,89,162,43,36,54,2,22,222,33,41,28,248,22, +76,248,22,70,23,195,2,249,22,7,9,248,22,69,195,91,159,37,11,90,161, +37,35,11,27,248,22,70,196,28,248,22,76,248,22,70,23,195,2,249,22,7, +9,248,22,69,195,91,159,37,11,90,161,37,35,11,27,248,22,70,196,28,248, +22,76,248,22,70,23,195,2,249,22,7,9,248,22,69,195,91,159,37,11,90, +161,37,35,11,248,2,40,248,22,70,196,249,22,7,249,22,68,248,22,69,199, +196,195,249,22,7,249,22,68,248,22,69,199,196,195,249,22,7,249,22,68,248, +22,69,199,196,195,27,27,249,22,140,14,2,37,23,197,2,28,23,193,2,87, +94,23,195,1,249,22,68,248,22,93,23,196,2,27,248,22,102,23,197,1,27, +249,22,140,14,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,68, +248,22,93,23,196,2,27,248,22,102,23,197,1,27,249,22,140,14,2,37,23, +196,2,28,23,193,2,87,94,23,194,1,249,22,68,248,22,93,23,196,2,27, +248,22,102,23,197,1,27,249,22,140,14,2,37,23,196,2,28,23,193,2,87, +94,23,194,1,249,22,68,248,22,93,23,196,2,248,2,38,248,22,102,23,197, +1,248,22,78,194,248,22,78,194,248,22,78,194,248,22,78,195,28,23,195,1, +192,28,248,22,76,248,22,70,23,195,2,249,22,7,9,248,22,69,195,91,159, +37,11,90,161,37,35,11,27,248,22,70,196,28,248,22,76,248,22,70,23,195, +2,249,22,7,9,248,22,69,195,91,159,37,11,90,161,37,35,11,27,248,22, +70,196,28,248,22,76,248,22,70,23,195,2,249,22,7,9,248,22,69,195,91, +159,37,11,90,161,37,35,11,248,2,40,248,22,70,196,249,22,7,249,22,68, +248,22,69,199,196,195,249,22,7,249,22,68,248,22,69,199,196,195,249,22,7, +249,22,68,248,22,69,199,196,195,87,95,28,248,22,175,4,195,12,250,22,138, +9,2,17,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101, +45,112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12, +27,27,250,22,142,2,80,159,41,42,37,248,22,160,14,247,22,135,12,11,28, +23,193,2,192,87,94,23,193,1,27,247,22,126,87,94,250,22,140,2,80,159, +42,42,37,248,22,160,14,247,22,135,12,195,192,250,22,140,2,195,198,66,97, +116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,137,9,11,196,195,248, +22,135,9,194,28,249,22,171,6,194,6,1,1,46,2,21,28,249,22,171,6, +194,6,2,2,46,46,62,117,112,192,28,249,22,172,8,248,22,70,23,200,2, +23,197,1,28,249,22,170,8,248,22,69,23,200,2,23,196,1,251,22,135,9, 2,17,6,26,26,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103, -32,97,116,32,126,101,58,32,126,101,23,200,1,249,22,2,22,69,248,22,82, -249,22,67,23,206,1,23,202,1,12,12,247,192,20,14,159,80,159,39,44,37, -249,22,67,248,22,159,14,247,22,134,12,23,197,1,20,14,159,80,158,39,39, -250,80,158,42,40,249,22,27,11,80,158,44,39,22,156,4,23,196,1,249,247, -22,131,5,23,198,1,248,22,55,248,22,156,13,23,198,1,87,94,28,28,248, -22,152,13,23,196,2,10,248,22,182,4,23,196,2,12,28,23,197,2,250,22, -136,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,137,9,2,17,6,19,19,109,111,100,117,108,101,45,112,97, -116,104,32,111,114,32,112,97,116,104,23,198,2,28,28,248,22,65,23,196,2, -249,22,169,8,248,22,68,23,198,2,2,3,11,248,22,175,4,248,22,92,196, -28,28,248,22,65,23,196,2,249,22,169,8,248,22,68,23,198,2,66,112,108, +32,97,116,32,126,101,58,32,126,101,23,200,1,249,22,2,22,70,248,22,83, +249,22,68,23,206,1,23,202,1,12,12,247,192,20,14,159,80,159,39,44,37, +249,22,68,248,22,160,14,247,22,135,12,23,197,1,20,14,159,80,158,39,39, +250,80,158,42,40,249,22,27,11,80,158,44,39,22,157,4,23,196,1,249,247, +22,132,5,23,198,1,248,22,56,248,22,157,13,23,198,1,87,94,28,28,248, +22,153,13,23,196,2,10,248,22,183,4,23,196,2,12,28,23,197,2,250,22, +137,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,138,9,2,17,6,19,19,109,111,100,117,108,101,45,112,97, +116,104,32,111,114,32,112,97,116,104,23,198,2,28,28,248,22,66,23,196,2, +249,22,170,8,248,22,69,23,198,2,2,3,11,248,22,176,4,248,22,93,196, +28,28,248,22,66,23,196,2,249,22,170,8,248,22,69,23,198,2,66,112,108, 97,110,101,116,11,87,94,28,207,12,20,14,159,80,158,36,51,80,158,36,49, -90,161,36,35,10,249,22,157,4,21,94,2,23,6,18,18,112,108,97,110,101, +90,161,36,35,10,249,22,158,4,21,94,2,23,6,18,18,112,108,97,110,101, 116,47,114,101,115,111,108,118,101,114,46,115,115,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,252,212,199,200,201,202,80,158,41,49,87,94,23,193,1,27,89,162,8,44, 36,45,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114, -114,223,5,33,44,27,28,248,22,53,23,198,2,27,250,22,141,2,80,159,42, -43,37,249,22,67,23,203,2,247,22,130,14,11,28,23,193,2,192,87,94,23, -193,1,91,159,37,11,90,161,37,35,11,27,248,22,58,23,202,2,27,27,249, -22,139,14,2,36,23,197,2,28,23,193,2,87,94,23,195,1,249,22,67,248, -22,92,23,196,2,27,248,22,101,23,197,1,27,249,22,139,14,2,36,23,196, -2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23,196,2,248,2, -45,248,22,101,23,197,1,248,22,77,194,248,22,77,195,28,248,22,75,248,22, -69,23,195,2,249,22,7,9,248,22,68,195,91,159,37,11,90,161,37,35,11, -248,2,47,248,22,69,196,249,22,7,249,22,67,248,22,68,199,196,195,27,251, -80,158,46,52,2,17,23,202,1,28,248,22,75,23,199,2,23,199,2,248,22, -68,23,199,2,28,248,22,75,23,199,2,9,248,22,69,23,199,2,249,22,170, -13,23,195,1,28,248,22,75,23,197,1,87,94,23,197,1,6,7,7,109,97, -105,110,46,115,115,249,22,187,6,23,199,1,6,3,3,46,115,115,28,248,22, -164,6,23,198,2,87,94,23,194,1,27,27,28,23,200,2,28,249,22,169,8, -23,202,2,80,158,42,46,80,158,40,47,27,248,22,176,4,23,202,2,28,248, -22,152,13,23,194,2,91,159,38,11,90,161,38,35,11,248,22,173,13,23,197, -1,87,95,83,160,37,11,80,158,44,46,23,204,2,83,160,37,11,80,158,44, -47,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,132,5,28, -23,193,2,192,87,94,23,193,1,247,22,129,14,27,250,22,141,2,80,159,43, -43,37,249,22,67,23,204,2,23,199,2,11,28,23,193,2,192,87,94,23,193, -1,91,159,37,11,90,161,37,35,11,27,27,249,22,139,14,2,36,23,205,2, -28,23,193,2,249,22,67,248,22,92,23,196,2,27,248,22,101,23,197,1,27, -249,22,139,14,2,36,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67, -248,22,92,23,196,2,248,2,49,248,22,101,23,197,1,248,22,77,194,248,22, -77,23,204,2,28,248,22,75,248,22,69,23,195,2,249,22,7,9,248,22,68, -195,91,159,37,11,90,161,37,35,11,248,2,51,248,22,69,196,249,22,7,249, -22,67,248,22,68,199,196,195,250,22,1,22,170,13,23,199,1,249,22,81,249, -22,2,32,0,89,162,8,44,36,43,9,222,33,53,23,200,1,248,22,77,23, -200,1,28,248,22,152,13,23,198,2,87,94,23,194,1,28,248,22,175,13,23, -198,2,23,197,2,248,22,77,6,26,26,32,40,97,32,112,97,116,104,32,109, -117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,169,8, -248,22,68,23,200,2,2,23,27,250,22,141,2,80,159,42,43,37,249,22,67, -23,203,2,247,22,130,14,11,28,23,193,2,192,87,94,23,193,1,91,159,38, -11,90,161,37,35,11,27,248,22,92,23,203,2,27,27,249,22,139,14,2,36, -23,197,2,28,23,193,2,87,94,23,195,1,249,22,67,248,22,92,23,196,2, -27,248,22,101,23,197,1,27,249,22,139,14,2,36,23,196,2,28,23,193,2, -87,94,23,194,1,249,22,67,248,22,92,23,196,2,248,2,54,248,22,101,23, -197,1,248,22,77,194,248,22,77,195,28,248,22,75,248,22,69,23,195,2,249, -22,7,9,248,22,68,195,91,159,37,11,90,161,37,35,11,248,2,56,248,22, -69,196,249,22,7,249,22,67,248,22,68,199,196,195,90,161,36,37,11,28,248, -22,75,248,22,94,23,203,2,28,248,22,75,23,194,2,249,22,141,14,0,8, -35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197,2,249,22, -81,28,248,22,75,248,22,94,23,207,2,21,93,6,5,5,109,122,108,105,98, -249,22,1,22,81,249,22,2,32,0,89,162,8,44,36,51,9,222,33,60,248, -22,94,23,210,2,23,197,2,28,248,22,75,23,196,2,248,22,77,23,197,2, -23,195,2,251,80,158,48,52,2,17,23,204,1,248,22,68,23,198,2,248,22, -69,23,198,1,249,22,170,13,23,195,1,28,23,198,1,87,94,23,196,1,23, -197,1,28,248,22,75,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110, -46,115,115,28,249,22,141,14,0,8,35,114,120,34,91,46,93,34,23,199,2, -23,197,1,249,22,187,6,23,199,1,6,3,3,46,115,115,28,249,22,169,8, -248,22,68,23,200,2,64,102,105,108,101,249,22,177,13,248,22,181,13,248,22, -92,23,201,2,27,28,23,201,2,28,249,22,169,8,23,203,2,80,158,43,46, -80,158,41,47,27,248,22,176,4,23,203,2,28,248,22,152,13,23,194,2,91, -159,38,11,90,161,38,35,11,248,22,173,13,23,197,1,87,95,83,160,37,11, -80,158,45,46,23,205,2,83,160,37,11,80,158,45,47,192,192,11,11,28,23, -193,2,192,87,94,23,193,1,27,247,22,132,5,28,23,193,2,192,87,94,23, -193,1,247,22,129,14,12,87,94,28,28,248,22,152,13,23,194,2,10,248,22, -186,7,23,194,2,87,94,23,199,1,12,28,23,199,2,250,22,136,9,67,114, -101,113,117,105,114,101,249,22,148,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,68,23,199,2,6,0, -0,23,202,1,87,94,23,199,1,250,22,137,9,2,17,249,22,148,7,6,13, -13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,68, -23,199,2,6,0,0,23,200,2,27,28,248,22,186,7,23,195,2,249,22,191, -7,23,196,2,35,249,22,179,13,248,22,180,13,23,197,2,11,27,28,248,22, -186,7,23,196,2,249,22,191,7,23,197,2,36,248,80,158,41,53,23,195,2, -91,159,38,11,90,161,38,35,11,28,248,22,186,7,23,199,2,250,22,7,2, -24,249,22,191,7,23,203,2,37,2,24,248,22,173,13,23,198,2,87,95,23, -195,1,23,193,1,27,28,248,22,186,7,23,200,2,249,22,191,7,23,201,2, -38,249,80,158,46,54,23,197,2,5,0,27,28,248,22,186,7,23,201,2,249, -22,191,7,23,202,2,39,248,22,175,4,23,200,2,27,27,250,22,141,2,80, -159,50,42,37,248,22,159,14,247,22,134,12,11,28,23,193,2,192,87,94,23, -193,1,27,247,22,125,87,94,250,22,139,2,80,159,51,42,37,248,22,159,14, -247,22,134,12,195,192,87,95,28,23,208,1,27,250,22,141,2,23,197,2,197, -11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,159,50,45,37,80,159, -49,45,37,247,22,19,250,22,25,248,22,23,23,197,2,80,159,52,44,37,23, -196,1,27,248,22,159,14,247,22,134,12,249,22,3,83,158,39,20,97,94,89, -162,8,44,36,54,9,226,12,11,2,3,33,61,23,195,1,23,196,1,248,28, -248,22,17,80,159,49,45,37,32,0,89,162,43,36,41,9,222,33,62,80,159, -48,59,36,89,162,43,35,50,9,227,13,9,8,4,3,33,63,250,22,139,2, -23,197,1,197,10,12,28,28,248,22,186,7,23,202,1,11,28,248,22,164,6, -23,206,2,10,28,248,22,53,23,206,2,10,28,248,22,65,23,206,2,249,22, -169,8,248,22,68,23,208,2,2,23,11,250,22,139,2,80,159,49,43,37,28, -248,22,164,6,23,209,2,249,22,67,23,210,1,27,28,23,212,2,28,249,22, -169,8,23,214,2,80,158,54,46,87,94,23,212,1,80,158,52,47,27,248,22, -176,4,23,214,2,28,248,22,152,13,23,194,2,91,159,38,11,90,161,38,35, -11,248,22,173,13,23,197,1,87,95,83,160,37,11,80,158,56,46,23,23,83, -160,37,11,80,158,56,47,192,192,11,11,28,23,193,2,192,87,94,23,193,1, -27,247,22,132,5,28,23,193,2,192,87,94,23,193,1,247,22,129,14,249,22, -67,23,210,1,247,22,130,14,252,22,188,7,23,208,1,23,207,1,23,205,1, -23,203,1,201,12,193,87,96,83,160,37,11,80,158,35,49,248,80,158,36,57, -249,22,27,11,80,158,38,51,248,22,155,4,80,159,36,50,37,248,22,131,5, -80,159,36,36,36,248,22,189,12,80,159,36,41,36,83,160,37,11,80,158,35, -49,248,80,158,36,57,249,22,27,11,80,158,38,51,159,35,20,102,159,35,16, -1,11,16,0,83,158,41,20,100,144,66,35,37,98,111,111,116,29,11,11,11, -11,11,10,37,80,158,35,35,20,102,159,37,16,23,2,1,2,2,30,2,4, -72,112,97,116,104,45,115,116,114,105,110,103,63,10,30,2,4,75,112,97,116, -104,45,97,100,100,45,115,117,102,102,105,120,7,30,2,6,2,7,4,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,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2, -15,2,16,2,17,30,2,18,2,7,4,30,2,4,69,45,102,105,110,100,45, -99,111,108,0,30,2,4,76,110,111,114,109,97,108,45,99,97,115,101,45,112, -97,116,104,6,30,2,4,79,112,97,116,104,45,114,101,112,108,97,99,101,45, -115,117,102,102,105,120,9,2,19,2,20,30,2,18,74,114,101,112,97,114,97, -109,101,116,101,114,105,122,101,5,16,0,16,0,35,16,0,35,16,12,2,11, -2,12,2,9,2,10,2,13,2,14,2,2,2,8,2,1,2,16,2,15,2, -17,47,11,11,38,35,11,11,11,16,2,2,19,2,20,16,2,11,11,16,2, -2,19,2,20,37,37,36,11,11,11,16,0,16,0,16,0,35,35,11,11,11, -11,16,0,16,0,16,0,35,35,16,0,16,16,83,158,35,16,2,89,162,43, -36,44,9,223,0,33,25,80,159,35,59,36,83,158,35,16,2,89,162,43,37, -48,68,119,105,116,104,45,100,105,114,223,0,33,26,80,159,35,58,36,83,158, -35,16,2,248,22,183,7,69,115,111,45,115,117,102,102,105,120,80,159,35,35, -36,83,158,35,16,2,89,162,43,37,59,2,2,223,0,33,35,80,159,35,36, -36,83,158,35,16,2,32,0,89,162,8,44,36,41,2,8,222,192,80,159,35, -41,36,83,158,35,16,2,247,22,128,2,80,159,35,42,36,83,158,35,16,2, -247,22,127,80,159,35,43,36,83,158,35,16,2,247,22,63,80,159,35,44,36, -83,158,35,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105, -110,103,80,159,35,45,36,83,158,35,16,2,11,80,158,35,46,83,158,35,16, -2,11,80,158,35,47,83,158,35,16,2,32,0,89,162,43,37,52,2,15,222, -33,41,80,159,35,48,36,83,158,35,16,2,11,80,158,35,49,83,158,35,16, -2,91,159,37,10,90,161,36,35,10,11,90,161,36,36,10,83,158,38,20,96, -96,2,17,89,162,8,44,36,50,9,224,2,0,33,42,89,162,43,38,48,9, -223,1,33,43,89,162,43,39,8,32,9,224,2,0,33,64,208,80,159,35,50, -36,83,158,35,16,2,89,162,43,35,44,2,19,223,0,33,65,80,159,35,55, -36,83,158,35,16,2,89,162,8,44,35,44,2,20,223,0,33,66,80,159,35, -56,36,96,29,94,2,3,68,35,37,107,101,114,110,101,108,11,29,94,2,3, -69,35,37,109,105,110,45,115,116,120,11,2,4,2,18,9,9,9,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 5458); +114,223,5,33,45,27,28,248,22,53,23,198,2,27,250,22,142,2,80,159,42, +43,37,249,22,68,23,203,2,247,22,131,14,11,28,23,193,2,192,87,94,23, +193,1,91,159,37,11,90,161,37,35,11,249,80,159,43,48,36,248,22,59,23, +203,2,11,27,251,80,158,46,52,2,17,23,202,1,28,248,22,76,23,199,2, +23,199,2,248,22,69,23,199,2,28,248,22,76,23,199,2,9,248,22,70,23, +199,2,249,22,171,13,23,195,1,28,248,22,76,23,197,1,87,94,23,197,1, +6,7,7,109,97,105,110,46,115,115,249,22,188,6,23,199,1,6,3,3,46, +115,115,28,248,22,165,6,23,198,2,87,94,23,194,1,27,27,28,23,200,2, +28,249,22,170,8,23,202,2,80,158,42,46,80,158,40,47,27,248,22,177,4, +23,202,2,28,248,22,153,13,23,194,2,91,159,38,11,90,161,38,35,11,248, +22,174,13,23,197,1,87,95,83,160,37,11,80,158,44,46,23,204,2,83,160, +37,11,80,158,44,47,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27, +247,22,133,5,28,23,193,2,192,87,94,23,193,1,247,22,130,14,27,250,22, +142,2,80,159,43,43,37,249,22,68,23,204,2,23,199,2,11,28,23,193,2, +192,87,94,23,193,1,91,159,37,11,90,161,37,35,11,249,80,159,44,48,36, +23,203,2,11,250,22,1,22,171,13,23,199,1,249,22,82,249,22,2,32,0, +89,162,8,44,36,43,9,222,33,46,23,200,1,248,22,78,23,200,1,28,248, +22,153,13,23,198,2,87,94,23,194,1,28,248,22,176,13,23,198,2,23,197, +2,248,22,78,6,26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32, +98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,170,8,248,22,69,23, +200,2,2,23,27,250,22,142,2,80,159,42,43,37,249,22,68,23,203,2,247, +22,131,14,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90,161,37, +35,11,249,80,159,44,48,36,248,22,93,23,204,2,11,90,161,36,37,11,28, +248,22,76,248,22,95,23,203,2,28,248,22,76,23,194,2,249,22,142,14,0, +8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197,2,249, +22,82,28,248,22,76,248,22,95,23,207,2,21,93,6,5,5,109,122,108,105, +98,249,22,1,22,82,249,22,2,80,159,50,59,36,248,22,95,23,210,2,23, +197,2,28,248,22,76,23,196,2,248,22,78,23,197,2,23,195,2,251,80,158, +48,52,2,17,23,204,1,248,22,69,23,198,2,248,22,70,23,198,1,249,22, +171,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1,28,248,22,76, +23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115,115,28,249,22, +142,14,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1,249,22,188, +6,23,199,1,6,3,3,46,115,115,28,249,22,170,8,248,22,69,23,200,2, +64,102,105,108,101,249,22,178,13,248,22,182,13,248,22,93,23,201,2,27,28, +23,201,2,28,249,22,170,8,23,203,2,80,158,43,46,80,158,41,47,27,248, +22,177,4,23,203,2,28,248,22,153,13,23,194,2,91,159,38,11,90,161,38, +35,11,248,22,174,13,23,197,1,87,95,83,160,37,11,80,158,45,46,23,205, +2,83,160,37,11,80,158,45,47,192,192,11,11,28,23,193,2,192,87,94,23, +193,1,27,247,22,133,5,28,23,193,2,192,87,94,23,193,1,247,22,130,14, +12,87,94,28,28,248,22,153,13,23,194,2,10,248,22,187,7,23,194,2,87, +94,23,199,1,12,28,23,199,2,250,22,137,9,67,114,101,113,117,105,114,101, +249,22,149,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,69,23,199,2,6,0,0,23,202,1,87,94, +23,199,1,250,22,138,9,2,17,249,22,149,7,6,13,13,109,111,100,117,108, +101,32,112,97,116,104,126,97,28,23,198,2,248,22,69,23,199,2,6,0,0, +23,200,2,27,28,248,22,187,7,23,195,2,249,22,128,8,23,196,2,35,249, +22,180,13,248,22,181,13,23,197,2,11,27,28,248,22,187,7,23,196,2,249, +22,128,8,23,197,2,36,248,80,158,41,53,23,195,2,91,159,38,11,90,161, +38,35,11,28,248,22,187,7,23,199,2,250,22,7,2,24,249,22,128,8,23, +203,2,37,2,24,248,22,174,13,23,198,2,87,95,23,195,1,23,193,1,27, +28,248,22,187,7,23,200,2,249,22,128,8,23,201,2,38,249,80,158,46,54, +23,197,2,5,0,27,28,248,22,187,7,23,201,2,249,22,128,8,23,202,2, +39,248,22,176,4,23,200,2,27,27,250,22,142,2,80,159,50,42,37,248,22, +160,14,247,22,135,12,11,28,23,193,2,192,87,94,23,193,1,27,247,22,126, +87,94,250,22,140,2,80,159,51,42,37,248,22,160,14,247,22,135,12,195,192, +87,95,28,23,208,1,27,250,22,142,2,23,197,2,197,11,28,23,193,1,12, +87,95,27,27,28,248,22,17,80,159,50,45,37,80,159,49,45,37,247,22,19, +250,22,25,248,22,23,23,197,2,80,159,52,44,37,23,196,1,27,248,22,160, +14,247,22,135,12,249,22,3,83,158,39,20,97,94,89,162,8,44,36,54,9, +226,12,11,2,3,33,47,23,195,1,23,196,1,248,28,248,22,17,80,159,49, +45,37,32,0,89,162,43,36,41,9,222,33,48,80,159,48,8,25,36,89,162, +43,35,50,9,227,13,9,8,4,3,33,49,250,22,140,2,23,197,1,197,10, +12,28,28,248,22,187,7,23,202,1,11,28,248,22,165,6,23,206,2,10,28, +248,22,53,23,206,2,10,28,248,22,66,23,206,2,249,22,170,8,248,22,69, +23,208,2,2,23,11,250,22,140,2,80,159,49,43,37,28,248,22,165,6,23, +209,2,249,22,68,23,210,1,27,28,23,212,2,28,249,22,170,8,23,214,2, +80,158,54,46,87,94,23,212,1,80,158,52,47,27,248,22,177,4,23,214,2, +28,248,22,153,13,23,194,2,91,159,38,11,90,161,38,35,11,248,22,174,13, +23,197,1,87,95,83,160,37,11,80,158,56,46,23,23,83,160,37,11,80,158, +56,47,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,133,5, +28,23,193,2,192,87,94,23,193,1,247,22,130,14,249,22,68,23,210,1,247, +22,131,14,252,22,189,7,23,208,1,23,207,1,23,205,1,23,203,1,201,12, +193,87,96,83,160,37,11,80,158,35,49,248,80,158,36,57,249,22,27,11,80, +158,38,51,248,22,156,4,80,159,36,50,37,248,22,132,5,80,159,36,36,36, +248,22,190,12,80,159,36,41,36,83,160,37,11,80,158,35,49,248,80,158,36, +57,249,22,27,11,80,158,38,51,159,35,20,102,159,35,16,1,11,16,0,83, +158,41,20,100,144,66,35,37,98,111,111,116,29,11,11,11,11,11,10,37,80, +158,35,35,20,102,159,38,16,23,2,1,2,2,30,2,4,72,112,97,116,104, +45,115,116,114,105,110,103,63,10,30,2,4,75,112,97,116,104,45,97,100,100, +45,115,117,102,102,105,120,7,30,2,6,2,7,4,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,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17, +30,2,18,2,7,4,30,2,4,69,45,102,105,110,100,45,99,111,108,0,30, +2,4,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,6,30, +2,4,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105, +120,9,2,19,2,20,30,2,18,74,114,101,112,97,114,97,109,101,116,101,114, +105,122,101,5,16,0,16,0,35,16,0,35,16,12,2,11,2,12,2,9,2, +10,2,13,2,14,2,2,2,8,2,1,2,16,2,15,2,17,47,11,11,38, +35,11,11,11,16,2,2,19,2,20,16,2,11,11,16,2,2,19,2,20,37, +37,36,11,11,11,16,0,16,0,16,0,35,35,11,11,11,11,16,0,16,0, +16,0,35,35,16,0,16,17,83,158,35,16,2,89,162,43,36,44,9,223,0, +33,25,80,159,35,8,25,36,83,158,35,16,2,89,162,43,36,44,9,223,0, +33,26,80,159,35,59,36,83,158,35,16,2,89,162,43,37,48,68,119,105,116, +104,45,100,105,114,223,0,33,27,80,159,35,58,36,83,158,35,16,2,248,22, +184,7,69,115,111,45,115,117,102,102,105,120,80,159,35,35,36,83,158,35,16, +2,89,162,43,37,59,2,2,223,0,33,36,80,159,35,36,36,83,158,35,16, +2,32,0,89,162,8,44,36,41,2,8,222,192,80,159,35,41,36,83,158,35, +16,2,247,22,129,2,80,159,35,42,36,83,158,35,16,2,247,22,128,2,80, +159,35,43,36,83,158,35,16,2,247,22,64,80,159,35,44,36,83,158,35,16, +2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,159, +35,45,36,83,158,35,16,2,11,80,158,35,46,83,158,35,16,2,11,80,158, +35,47,83,158,35,16,2,32,0,89,162,43,37,8,25,2,15,222,33,42,80, +159,35,48,36,83,158,35,16,2,11,80,158,35,49,83,158,35,16,2,91,159, +37,10,90,161,36,35,10,11,90,161,36,36,10,83,158,38,20,96,96,2,17, +89,162,8,44,36,50,9,224,2,0,33,43,89,162,43,38,48,9,223,1,33, +44,89,162,43,39,8,32,9,224,2,0,33,50,208,80,159,35,50,36,83,158, +35,16,2,89,162,43,35,44,2,19,223,0,33,51,80,159,35,55,36,83,158, +35,16,2,89,162,8,44,35,44,2,20,223,0,33,52,80,159,35,56,36,96, +29,94,2,3,68,35,37,107,101,114,110,101,108,11,29,94,2,3,69,35,37, +109,105,110,45,115,116,120,11,2,4,2,18,9,9,9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 4636); } diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index 1a41ca18e0..e97861e212 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 964 +#define EXPECTED_PRIM_COUNT 965 #define EXPECTED_UNSAFE_COUNT 58 #define EXPECTED_FLFXNUM_COUNT 53 diff --git a/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index 87752942a1..2db1546d1f 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -255,7 +255,7 @@ static int is_rename_inspector_info(Scheme_Object *v) - A wrap-elem <-num> is a certificate-only mark (doesn't conttribute to id equivalence) - - A wrap-elem (vector ... ...) is a lexical rename + - A wrap-elem (vector ..._0 ..._0) is a lexical rename env (sym var : ->pos) void => not yet computed or #f sym => var-resolved is answer to replace #f @@ -266,7 +266,7 @@ static int is_rename_inspector_info(Scheme_Object *v) or: (cons (cons )) => free-id=? renaming to on match - - A wrap-elem (vector ... ...) is also a lexical rename + - A wrap-elem (vector ..._0 ..._0) is also a lexical rename bool var resolved: sym or (cons ), where is module/lexical binding info: (cons #f) => top-level binding diff --git a/src/mzscheme/src/symbol.c b/src/mzscheme/src/symbol.c index 327f22aafd..c79d31a152 100644 --- a/src/mzscheme/src/symbol.c +++ b/src/mzscheme/src/symbol.c @@ -70,6 +70,7 @@ void scheme_set_case_sensitive(int v) { scheme_case_sensitive = v; } /* locals */ static Scheme_Object *symbol_p_prim (int argc, Scheme_Object *argv[]); +static Scheme_Object *symbol_unreadable_p_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *symbol_interned_p_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *string_to_symbol_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *string_to_uninterned_symbol_prim (int argc, Scheme_Object *argv[]); @@ -318,6 +319,9 @@ scheme_init_symbol (Scheme_Env *env) p = scheme_make_folding_prim(symbol_p_prim, "symbol?", 1, 1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; scheme_add_global_constant("symbol?", p, env); + + p = scheme_make_folding_prim(symbol_unreadable_p_prim, "symbol-unreadable?", 1, 1, 1); + scheme_add_global_constant("symbol-unreadable?", p, env); p = scheme_make_folding_prim(symbol_interned_p_prim, "symbol-interned?", 1, 1, 1); scheme_add_global_constant("symbol-interned?", p, env); @@ -688,6 +692,16 @@ symbol_interned_p_prim (int argc, Scheme_Object *argv[]) return NULL; } +static Scheme_Object * +symbol_unreadable_p_prim (int argc, Scheme_Object *argv[]) +{ + if (SCHEME_SYMBOLP(argv[0])) + return (SCHEME_SYM_PARALLELP(argv[0]) ? scheme_true : scheme_false); + + scheme_wrong_type("symbol-unreadable?", "symbol", 0, argc, argv); + return NULL; +} + static Scheme_Object * string_to_symbol_prim (int argc, Scheme_Object *argv[]) { @@ -713,7 +727,7 @@ string_to_unreadable_symbol_prim (int argc, Scheme_Object *argv[]) long blen; if (!SCHEME_CHAR_STRINGP(argv[0])) - scheme_wrong_type("string->symbol", "string", 0, argc, argv); + scheme_wrong_type("string->unreadable-symbol", "string", 0, argc, argv); bs = scheme_utf8_encode_to_buffer_len(SCHEME_CHAR_STR_VAL(argv[0]), SCHEME_CHAR_STRTAG_VAL(argv[0]),