diff --git a/collects/scribblings/reference/bytes.scrbl b/collects/scribblings/reference/bytes.scrbl index 9eee201572..7618d306af 100644 --- a/collects/scribblings/reference/bytes.scrbl +++ b/collects/scribblings/reference/bytes.scrbl @@ -13,7 +13,8 @@ A @deftech{byte string} is a fixed-length array of bytes. A @defterm{mutable} or @defterm{immutable}. When an immutable byte string is provided to a procedure like @racket[bytes-set!], the @exnraise[exn:fail:contract]. Byte-string constants generated by the -default reader (see @secref["parse-string"]) are immutable. +default reader (see @secref["parse-string"]) are immutable +and @tech{interned}. Two byte strings are @racket[equal?] when they have the same length and contain the same sequence of bytes. diff --git a/collects/scribblings/reference/chars.scrbl b/collects/scribblings/reference/chars.scrbl index 0e183a9bc1..8756ad410d 100644 --- a/collects/scribblings/reference/chars.scrbl +++ b/collects/scribblings/reference/chars.scrbl @@ -16,7 +16,8 @@ characters whose values range from @racketvalfont{#x0} to Two characters are @racket[eqv?] if they correspond to the same scalar value. For each scalar value less than 256, character values that are -@racket[eqv?] are also @racket[eq?]. +@racket[eqv?] are also @racket[eq?]. Characters produced by the default +reader are @tech{interned}. @see-read-print["character"]{characters} diff --git a/collects/scribblings/reference/data.scrbl b/collects/scribblings/reference/data.scrbl index 2f0b7884b0..8271fa491e 100644 --- a/collects/scribblings/reference/data.scrbl +++ b/collects/scribblings/reference/data.scrbl @@ -24,105 +24,7 @@ manipulating instances of the datatype. @include-section["chars.scrbl"] @; ------------------------------------------------------------ -@section[#:tag "symbols"]{Symbols} - -@guideintro["symbols"]{symbols} - -@section-index["symbols" "generating"] -@section-index["symbols" "unique"] - -A @deftech{symbol} is like an immutable string, but symbols are -normally @deftech{interned}, so that two symbols with the same -character content are normally @racket[eq?]. All symbols produced by -the default reader (see @secref["parse-symbol"]) are interned. - -The two procedures @racket[string->uninterned-symbol] and -@racket[gensym] generate @deftech{uninterned} symbols, i.e., symbols -that are not @racket[eq?], @racket[eqv?], or @racket[equal?] to any -other symbol, although they may print the same as other symbols. - -The procedure @racket[string->unreadable-symbol] returns an -@deftech{unreadable symbol} that is partially interned. The default -reader (see @secref["parse-symbol"]) never produces a unreadable -symbol, but two calls to @racket[string->unreadable-symbol] with -@racket[equal?] strings produce @racket[eq?] results. An unreadable -symbol can print the same as an interned or uninterned -symbol. Unreadable symbols are useful in expansion and -compilation to avoid collisions with symbols that appear in the -source; they are usually not generated directly, but they can appear -in the result of functions like @racket[identifier-binding]. - -Interned and unreadable symbols are only weakly held by the internal -symbol table. This weakness can never affect the result of an -@racket[eq?], @racket[eqv?], or @racket[equal?] test, but a symbol may -disappear when placed into a weak box (see @secref["weakbox"]) used as -the key in a weak @tech{hash table} (see @secref["hashtables"]), or -used as an ephemeron key (see @secref["ephemerons"]). - -@see-read-print["symbol"]{symbols} - -@defproc[(symbol? [v any/c]) boolean?]{Returns @racket[#t] if @racket[v] is - a symbol, @racket[#f] otherwise. - -@examples[(symbol? 'Apple) (symbol? 10)]} - - -@defproc[(symbol-interned? [sym symbol?]) boolean?]{Returns @racket[#t] if @racket[sym] is - @tech{interned}, @racket[#f] otherwise. - -@examples[(symbol-interned? 'Apple) - (symbol-interned? (gensym)) - (symbol-interned? (string->unreadable-symbol "Apple"))]} - -@defproc[(symbol-unreadable? [sym symbol?]) boolean?]{Returns @racket[#t] if @racket[sym] is - an @tech{unreadable symbol}, @racket[#f] otherwise. - -@examples[(symbol-unreadable? 'Apple) - (symbol-unreadable? (gensym)) - (symbol-unreadable? (string->unreadable-symbol "Apple"))]} - -@defproc[(symbol->string [sym symbol?]) string?]{Returns a freshly - allocated mutable string whose characters are the same as in - @racket[sym]. - -@examples[(symbol->string 'Apple)]} - - -@defproc[(string->symbol [str string?]) symbol?]{Returns an - @tech{interned} symbol whose characters are the same as in - @racket[str]. - -@examples[(string->symbol "Apple") (string->symbol "1")]} - - -@defproc[(string->uninterned-symbol [str string?]) symbol?]{Like - @racket[(string->symbol str)], but the resulting symbol is a new - @tech{uninterned} symbol. Calling @racket[string->uninterned-symbol] - twice with the same @racket[str] returns two distinct symbols. - -@examples[(string->uninterned-symbol "Apple") - (eq? 'a (string->uninterned-symbol "a")) - (eq? (string->uninterned-symbol "a") - (string->uninterned-symbol "a"))]} - - -@defproc[(string->unreadable-symbol [str string?]) symbol?]{Like - @racket[(string->symbol str)], but the resulting symbol is a new - @tech{unreadable symbol}. Calling @racket[string->unreadable-symbol] - twice with equivalent @racket[str]s returns the same symbol, but - @racket[read] never produces the symbol. - -@examples[(string->unreadable-symbol "Apple") - (eq? 'a (string->unreadable-symbol "a")) - (eq? (string->unreadable-symbol "a") - (string->unreadable-symbol "a"))]} - - -@defproc[(gensym [base (or/c string? symbol?) "g"]) symbol?]{Returns a - new @tech{uninterned} symbol with an automatically-generated name. The - optional @racket[base] argument is a prefix symbol or string.} - -@examples[(gensym "apple")] +@include-section["symbols.scrbl"] @; ------------------------------------------------------------ @include-section["regexps.scrbl"] @@ -138,7 +40,8 @@ identifier. Furthermore, a keyword by itself is not a valid expression, though a keyword can be @racket[quote]d to form an expression that produces the symbol. -Two keywords are @racket[eq?] if and only if they print the same. +Two keywords are @racket[eq?] if and only if they print the same +(i.e., keywords are always @tech{interned}). Like symbols, keywords are only weakly held by the internal keyword table; see @secref["symbols"] for more information. diff --git a/collects/scribblings/reference/numbers.scrbl b/collects/scribblings/reference/numbers.scrbl index a5ac42d59c..fb56e61a06 100644 --- a/collects/scribblings/reference/numbers.scrbl +++ b/collects/scribblings/reference/numbers.scrbl @@ -80,7 +80,9 @@ with fixnums. See also the @racketmodname[racket/fixnum] module, below. Two fixnums that are @racket[=] are also the same according to @racket[eq?]. Otherwise, the result of @racket[eq?] -applied to two numbers is undefined. +applied to two numbers is undefined, except that numbers produced +by the default reader are @tech{interned} and therefore @racket[eq?] +when they are @racket[eqv?]. Two numbers are @racket[eqv?] when they are both inexact with the same precision or both exact, and when they are @racket[=] (except for @racket[+nan.0], @racket[+nan.f], diff --git a/collects/scribblings/reference/read.scrbl b/collects/scribblings/reference/read.scrbl index c8b903f444..c2760589cd 100644 --- a/collects/scribblings/reference/read.scrbl +++ b/collects/scribblings/reference/read.scrbl @@ -324,3 +324,34 @@ except that special-comment values (see The default port read handler itself can be customized through a readtable; see @secref["readtables"] for more information.} + + +@defproc[(read-intern-literal [v any/c]) any/c]{ + +Converts some values to be consistent with an @tech{interned} result +produced by the default reader. + +If @racket[v] is a @tech{number}, @tech{character}, @tech{string}, +@tech{byte string}, or @tech{regular expression}, then the result is a +value that is @racket[equal?] to @racket[v] and @racket[eq?] to a +potential result of the default reader. (Note that mutable strings and +byte strings are @tech{interned} as immutable strings and byte +strings.) + +If @racket[v] is an @tech{uninterned} or an @tech{unreadable symbol}, +the result is still @racket[v], since an @tech{interned} symbol would +not be @racket[equal?] to @racket[v]. + +The conversion process does not traverse compound values. For example, +if @racket[v] is a @tech{pair} containing strings, then the strings +within @racket[v] are not @tech{interned}. + +If @racket[_v1] and @racket[_v2] are @racket[equal?] but not +@racket[eq?], then it is possible that @racket[(read-intern-literal +_v1)] will return @racket[_v1] and---sometime after @racket[_v1] +becomes unreachable as determined by the garbage collector (see +@secref["gc-model"])---@racket[(read-intern-literal _v2)] can still +return @racket[_v2]. In other words, @racket[read-intern-literal] +may adopt a given value as an @tech{interned} representative, but +if a former representative becomes otherwise unreachable, then +@racket[read-intern-literal] may adopt a new representative.} diff --git a/collects/scribblings/reference/reader.scrbl b/collects/scribblings/reference/reader.scrbl index 22dc2fc2e3..fc52347b01 100644 --- a/collects/scribblings/reference/reader.scrbl +++ b/collects/scribblings/reference/reader.scrbl @@ -38,6 +38,16 @@ Reading is defined in terms of Unicode characters; see @secref["ports"] for information on how a byte stream is converted to a character stream. +Symbols, keywords, strings, byte strings, regexps, characters, and numbers +produced by the reader are @deftech{interned}, which means that such +values in the result of @racket[read] or @racket[read-syntax] are +always @racket[eq?] when they are @racket[equal?] (whether from the +same call or different calls to @racket[read] or +@racket[read-syntax]). Sending an @tech{interned} value across a +@tech{place channel} does not necessarily produce an @tech{interned} +value at the receiving @tech{place}. See also +@racket[read-intern-literal] and @racket[datum->syntax]. + @;------------------------------------------------------------------------ @section[#:tag "default-readtable-dispatch"]{Delimiters and Dispatch} @@ -159,11 +169,11 @@ on the next character or characters in the input stream as follows: A sequence that does not start with a delimiter or @litchar{#} is parsed as either a @tech{symbol} or a @tech{number} (see -@secref["parse-number"]), except that @litchar{.} by itself is -never parsed as a symbol or character (unless the -@racket[read-accept-dot] parameter is set to @racket[#f]). A -@as-index{@litchar{#%}} also starts a symbol. A successful number -parse takes precedence over a symbol parse. +@secref["parse-number"]), except that @litchar{.} by itself is never +parsed as a symbol or character (unless the @racket[read-accept-dot] +parameter is set to @racket[#f]). A @as-index{@litchar{#%}} also +starts a symbol. The resulting symbol is @tech{interned}. A successful +number parse takes precedence over a symbol parse. @index["case-sensitivity"]{@index["case-insensitive"]{When}} the @racket[read-case-sensitive] @tech{parameter} is set to @racket[#f], @@ -198,7 +208,7 @@ case-sensitive mode. A sequence that does not start with a delimiter is parsed as a @tech{number} when it matches the following grammar case-insenstively for @nonterm{number@sub{10}} (decimal), where @metavar{n} is a -meta-meta-variable in the grammar. +meta-meta-variable in the grammar. The resulting number is @tech{interned}. A number is optionally prefixed by an exactness specifier, @as-index{@litchar{#e}} (exact) or @as-index{@litchar{#i}} (inexact), @@ -383,7 +393,7 @@ exception, instead of the infix conversion. When the reader encounters @as-index{@litchar{"}}, it begins parsing characters to form a @tech{string}. The string continues until it is terminated by another @litchar{"} (that is not escaped by -@litchar{\}). +@litchar{\}). The resulting string is @tech{interned}. Within a string sequence, the following escape sequences are recognized: @@ -455,7 +465,8 @@ constant, the @exnraise[exn:fail:read]. A string constant preceded by @litchar{#} is parsed as a @tech{byte string}. (That is, @as-index{@litchar{#"}} starts a byte-string literal.) See @secref["bytestrings"] for information on byte -strings. Byte-string constants support the same escape sequences as +strings. The resulting byte string is @tech{interned}. +Byte-string constants support the same escape sequences as character strings, except @litchar{\u} and @litchar{\U}. When the reader encounters @as-index{@litchar{#<<}}, it starts parsing a @@ -712,7 +723,8 @@ one of the following forms: A @as-index{@litchar{#:}} starts a @tech{keyword}. The parsing of a keyword after the @litchar{#:} is the same as for a symbol, including case-folding in case-insensitive mode, except that the part after -@litchar{#:} is never parsed as a number. +@litchar{#:} is never parsed as a number. The resulting keyword is +@tech{interned}. @reader-examples[ "#:Apple" @@ -728,7 +740,7 @@ A @as-index{@litchar{#rx}} or @as-index{@litchar{#px}} starts a expression as would be constructed by @racket[regexp], @litchar{#px} as constructed by @racket[pregexp], @litchar{#rx#} as constructed by @racket[byte-regexp], and @litchar{#px#} as constructed by -@racket[byte-pregexp]. +@racket[byte-pregexp]. The resulting regular expression is @tech{interned}. @reader-examples[ "#rx\".*\"" diff --git a/collects/scribblings/reference/regexps.scrbl b/collects/scribblings/reference/regexps.scrbl index ed00b16b5d..09fcd60198 100644 --- a/collects/scribblings/reference/regexps.scrbl +++ b/collects/scribblings/reference/regexps.scrbl @@ -35,7 +35,7 @@ @guideintro["regexp"]{regular expressions} @deftech{Regular expressions} are specified as strings or byte -strings, using the same pattern language as the Unix utility +strings, using the same pattern language as either the Unix utility @exec{egrep} or Perl. A string-specified pattern produces a character regexp matcher, and a byte-string pattern produces a byte regexp matcher. If a character regexp is used with a byte string or input @@ -50,12 +50,15 @@ regexp value using one syntax of regular expressions that is most compatible to @exec{egrep}. The @racket[pregexp] and @racket[byte-pregexp] procedures produce a regexp value using a slightly different syntax of regular expressions that is more -compatible with Perl. In addition, Racket constants written with -@litchar{#rx} or @litchar{#px} (see @secref["reader"]) produce -compiled regexp values. +compatible with Perl. + +Two regular expressions are @racket[equal?] if they have the same +source, use the same pattern language, and are both character regexps +or both byte regexps. A literal or printed regular expression starts with @litchar{#rx} or -@litchar{#px}. @see-read-print["regexp"]{regular expressions} +@litchar{#px}. @see-read-print["regexp"]{regular expressions} Regular +expressions produced by the default reader are @tech{interned}. The internal size of a regexp value is limited to 32 kilobytes; this limit roughly corresponds to a source string with 32,000 literal diff --git a/collects/scribblings/reference/strings.scrbl b/collects/scribblings/reference/strings.scrbl index 1cd62544da..6bc31a51aa 100644 --- a/collects/scribblings/reference/strings.scrbl +++ b/collects/scribblings/reference/strings.scrbl @@ -13,7 +13,7 @@ A @deftech{string} is a fixed-length array of procedure like @racket[string-set!], the @exnraise[exn:fail:contract]. String constants generated by the default reader (see @secref["parse-string"]) are -immutable. +immutable and @tech{interned}. Two strings are @racket[equal?] when they have the same length and contain the same sequence of characters. diff --git a/collects/scribblings/reference/stx-ops.scrbl b/collects/scribblings/reference/stx-ops.scrbl index 93d75003c1..eb94f496f1 100644 --- a/collects/scribblings/reference/stx-ops.scrbl +++ b/collects/scribblings/reference/stx-ops.scrbl @@ -114,7 +114,10 @@ leaving nested syntax structure (if any) in place. The result of @item{an immutable @tech{prefab} structure containing @tech{syntax object}s} - @item{some other kind of datum---usually a number, boolean, or string} + @item{some other kind of datum---usually a number, boolean, or + string---that is @tech{interned} when + @racket[read-intern-literal] would convert the + value} ] @@ -185,7 +188,8 @@ boxes. For any kind of value other than a pair, vector, box, immutable @tech{hash table}, immutable @tech{prefab} structure, or @tech{syntax object}, conversion means wrapping the value with lexical information, source-location -information, and properties. +information, and properties after the value is @tech{interned} +via @racket[read-intern-literal]. Converted objects in @racket[v] are given the lexical context information of @racket[ctxt] and the source-location information of diff --git a/collects/scribblings/reference/symbols.scrbl b/collects/scribblings/reference/symbols.scrbl new file mode 100644 index 0000000000..b9ff19dff3 --- /dev/null +++ b/collects/scribblings/reference/symbols.scrbl @@ -0,0 +1,102 @@ +#lang scribble/doc +@(require "mz.rkt") + +@title[#:tag "symbols"]{Symbols} + +@guideintro["symbols"]{symbols} + +@section-index["symbols" "generating"] +@section-index["symbols" "unique"] + +A @deftech{symbol} is like an immutable string, but symbols are +normally @tech{interned}, so that two symbols with the same +character content are normally @racket[eq?]. All symbols produced by +the default reader (see @secref["parse-symbol"]) are @tech{interned}. + +The two procedures @racket[string->uninterned-symbol] and +@racket[gensym] generate @deftech{uninterned} symbols, i.e., symbols +that are not @racket[eq?], @racket[eqv?], or @racket[equal?] to any +other symbol, although they may print the same as other symbols. + +The procedure @racket[string->unreadable-symbol] returns an +@deftech{unreadable symbol} that is partially interned. The default +reader (see @secref["parse-symbol"]) never produces a unreadable +symbol, but two calls to @racket[string->unreadable-symbol] with +@racket[equal?] strings produce @racket[eq?] results. An unreadable +symbol can print the same as an interned or uninterned +symbol. Unreadable symbols are useful in expansion and +compilation to avoid collisions with symbols that appear in the +source; they are usually not generated directly, but they can appear +in the result of functions like @racket[identifier-binding]. + +Interned and unreadable symbols are only weakly held by the internal +symbol table. This weakness can never affect the result of an +@racket[eq?], @racket[eqv?], or @racket[equal?] test, but a symbol may +disappear when placed into a weak box (see @secref["weakbox"]) used as +the key in a weak @tech{hash table} (see @secref["hashtables"]), or +used as an ephemeron key (see @secref["ephemerons"]). + +@see-read-print["symbol"]{symbols} + +@defproc[(symbol? [v any/c]) boolean?]{Returns @racket[#t] if @racket[v] is + a symbol, @racket[#f] otherwise. + +@examples[(symbol? 'Apple) (symbol? 10)]} + + +@defproc[(symbol-interned? [sym symbol?]) boolean?]{Returns @racket[#t] if @racket[sym] is + @tech{interned}, @racket[#f] otherwise. + +@examples[(symbol-interned? 'Apple) + (symbol-interned? (gensym)) + (symbol-interned? (string->unreadable-symbol "Apple"))]} + +@defproc[(symbol-unreadable? [sym symbol?]) boolean?]{Returns @racket[#t] if @racket[sym] is + an @tech{unreadable symbol}, @racket[#f] otherwise. + +@examples[(symbol-unreadable? 'Apple) + (symbol-unreadable? (gensym)) + (symbol-unreadable? (string->unreadable-symbol "Apple"))]} + +@defproc[(symbol->string [sym symbol?]) string?]{Returns a freshly + allocated mutable string whose characters are the same as in + @racket[sym]. + +@examples[(symbol->string 'Apple)]} + + +@defproc[(string->symbol [str string?]) symbol?]{Returns an + @tech{interned} symbol whose characters are the same as in + @racket[str]. + +@examples[(string->symbol "Apple") (string->symbol "1")]} + + +@defproc[(string->uninterned-symbol [str string?]) symbol?]{Like + @racket[(string->symbol str)], but the resulting symbol is a new + @tech{uninterned} symbol. Calling @racket[string->uninterned-symbol] + twice with the same @racket[str] returns two distinct symbols. + +@examples[(string->uninterned-symbol "Apple") + (eq? 'a (string->uninterned-symbol "a")) + (eq? (string->uninterned-symbol "a") + (string->uninterned-symbol "a"))]} + + +@defproc[(string->unreadable-symbol [str string?]) symbol?]{Like + @racket[(string->symbol str)], but the resulting symbol is a new + @tech{unreadable symbol}. Calling @racket[string->unreadable-symbol] + twice with equivalent @racket[str]s returns the same symbol, but + @racket[read] never produces the symbol. + +@examples[(string->unreadable-symbol "Apple") + (eq? 'a (string->unreadable-symbol "a")) + (eq? (string->unreadable-symbol "a") + (string->unreadable-symbol "a"))]} + + +@defproc[(gensym [base (or/c string? symbol?) "g"]) symbol?]{Returns a + new @tech{uninterned} symbol with an automatically-generated name. The + optional @racket[base] argument is a prefix symbol or string.} + +@examples[(gensym "apple")] diff --git a/collects/tests/racket/basic.rktl b/collects/tests/racket/basic.rktl index 52ce51c3cf..11a7556e11 100644 --- a/collects/tests/racket/basic.rktl +++ b/collects/tests/racket/basic.rktl @@ -272,8 +272,11 @@ (test-mem memv 'memv) (test-mem member 'member) -(test #f memq "apple" '("apple")) -(test #f memv "apple" '("apple")) +(test '("apple") memq "apple" '("apple")) ; literals are interned +(test '(#"apple") memq #"apple" '(#"apple")) ; literals are interned +(test #f memq (list->string (string->list "apple")) '("apple")) +(test #f memq (list->bytes (bytes->list #"apple")) '(#"apple")) +(test #f memv (list->string (string->list "apple")) '("apple")) (test '("apple") member "apple" '("apple")) ; (test #f memq 1/2 '(1/2)) ; rationals are immutable and we may want to optimize @@ -2364,7 +2367,8 @@ (test '((1 . 2)) hash-map im-t cons) (test 2 hash-ref im-t 1) (define im-t (make-immutable-hasheq '(("hello" . 2)))) -(test 'none hash-ref im-t "hello" (lambda () 'none)) +(test 2 hash-ref im-t "hello" (lambda () 'none)) ; literals interned +(test 'none hash-ref im-t (list->string (string->list "hello")) (lambda () 'none)) (define im-t (make-immutable-hash '(("hello" . 2)))) (test 2 hash-ref im-t "hello" (lambda () 'none)) (test #f hash-eq? im-t) diff --git a/collects/tests/racket/read.rktl b/collects/tests/racket/read.rktl index 58b83d611f..764cfc4d49 100644 --- a/collects/tests/racket/read.rktl +++ b/collects/tests/racket/read.rktl @@ -352,16 +352,18 @@ (test-ht (readstr "#hasheq((1 . 2))") 1 #t 1 2) (test-ht (readstr "#hasheqv((1 . 2))") 1 #f 1 2) (test-ht (readstr "#hash((\"apple\" . 1))") 1 #f "apple" 1) -(test-ht (readstr "#hasheq((\"apple\" . 1))") 1 #t "apple" #f) -(test-ht (readstr "#hasheqv((\"apple\" . 1))") 1 #f "apple" #f) -(test-ht (readstr "#hash((\"apple\" . 1) (\"apple\" . 10))") 1 #f "apple" 10) -(test-ht (readstr "#hasheq((\"apple\" . 1) (\"apple\" . 10))") 2 #t "apple" #f) -(test-ht (readstr "#hasheqv((\"apple\" . 1) (\"apple\" . 10))") 2 #f "apple" #f) +(test-ht (readstr "#hash((\"apple\" . 1))") 1 #f (list->string (string->list "apple")) 1) +(test-ht (readstr "#hasheq((\"apple\" . 1))") 1 #t "apple" 1) +(test-ht (readstr "#hasheq((\"apple\" . 1))") 1 #t (list->string (string->list "apple")) #f) +(test-ht (readstr "#hasheqv((\"apple\" . 1))") 1 #f (list->string (string->list "apple")) #f) +(test-ht (readstr "#hash((#s(s \"apple\") . 1) (#s(s \"apple\") . 10))") 1 #f '#s(s "apple") 10) +(test-ht (readstr "#hasheq((#s(s \"apple\") . 1) (#s(s \"apple\") . 10))") 2 #t '#s(s "apple") #f) +(test-ht (readstr "#hasheqv((#s(s \"apple\") . 1) (#s(s \"apple\") . 10))") 2 #f #s(s "apple") #f) (test-ht (readstr "#hash((apple . 1) (apple . 10))") 1 #f 'apple 10) (test-ht (readstr "#hasheq((apple . 1) (apple . 10))") 1 #t 'apple 10) (test-ht (readstr "#hasheqv((apple . 1) (apple . 10))") 1 #f 'apple 10) -(test-ht (readstr "#hasheq((#0=\"apple\" . 1) (#0# . 10))") 1 #t "apple" #f) -(test-ht (readstr "#hash((#0=\"apple\" . 1) (\"banana\" . #0#))") 2 #f "banana" "apple") +(test-ht (readstr "#hasheq((#0=\"apple\" . 1) (#0# . 10))") 1 #t (list->string (string->list "apple")) #f) +(test-ht (readstr "#hash((#0=\"apple\" . 1) (\"banana\" . #0#))") 2 #f "banana" (list->string (string->list "apple"))) (test-ht (readstr "#hash((a . 1) (b . 2) (c . 3) (e . 4) (f . 5) (g . 6) (h . 7) (i . 8))") 8 #f 'f 5) (let ([t (readstr "#0=#hash((\"apple\" . #0#))")]) (test-ht t 1 #f "apple" t)) @@ -372,6 +374,13 @@ (let ([t (readstr "#0=#hash((#0# . 17))")]) ;; Don't look for t, because that's a hash on a circular object! (test-ht t 1 #f 'none #f)) +;; check intern and comparison of regexps: +(test-ht (readstr "#hasheq((#rx\"apple\" . 1))") 1 #t #rx"apple" 1) +(test-ht (readstr "#hasheq((#rx\"apple\" . 1))") 1 #t #px"apple" #f) +(test-ht (readstr "#hasheq((#rx#\"apple\" . 1))") 1 #t #rx#"apple" 1) +(test-ht (readstr "#hasheq((#rx#\"apple\" . 1))") 1 #t #rx"apple" #f) +(test-ht (readstr "#hasheq((#rx#\"apple\" . 1))") 1 #t #px#"apple" #f) +(test-ht (readstr "#hasheq((#px#\"apple\" . 1))") 1 #t #px#"apple" 1) (define (test-write-ht writer t . strings) (let ([o (open-output-string)]) diff --git a/collects/tests/racket/vector.rktl b/collects/tests/racket/vector.rktl index 945c4c893c..d6af8011ee 100644 --- a/collects/tests/racket/vector.rktl +++ b/collects/tests/racket/vector.rktl @@ -201,9 +201,9 @@ (test #f vector-member 7 #(0 1 2)) (test 1 vector-memq 'x #(7 x 2)) (test 1 vector-memv 'x #(7 x 2)) - (test #f vector-memq 1000000000000000000000 #(7 1000000000000000000000 2)) - (test 1 vector-memv 1000000000000000000000 #(7 1000000000000000000000 2)) - (test 1 vector-member 1000000000000000000000 #(7 1000000000000000000000 2)) + (test #f vector-memq (* 10 100000000000000000000) #(7 1000000000000000000000 2)) + (test 1 vector-memv (* 10 100000000000000000000) #(7 1000000000000000000000 2)) + (test 1 vector-member (* 10 100000000000000000000) #(7 1000000000000000000000 2)) (test #f vector-memq (cons 1 2) (vector 7 (cons 1 2) 2)) (test #f vector-memv (cons 1 2) (vector 7 (cons 1 2) 2)) (test 1 vector-member (cons 1 2) (vector 7 (cons 1 2) 2)) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 4c720db7e9..fbb2f41a3a 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,3 +1,9 @@ +Version 5.2.0.4 +Regexps are `equal?' when they have the same source [byte] string + and mode +Numbers, characters, strings, byte strings, and regexps are interned by + read and datum->syntax + Version 5.2.0.3 Added module-predefined? Changed the raacket -k command-line flag diff --git a/src/racket/include/schthread.h b/src/racket/include/schthread.h index 26d2002bd5..3b48e16413 100644 --- a/src/racket/include/schthread.h +++ b/src/racket/include/schthread.h @@ -328,6 +328,8 @@ typedef struct Thread_Local_Variables { struct Scheme_Hash_Table *place_local_symbol_table_; struct Scheme_Hash_Table *place_local_keyword_table_; struct Scheme_Hash_Table *place_local_parallel_symbol_table_; + struct Scheme_Bucket_Table *literal_string_table_; + struct Scheme_Bucket_Table *literal_number_table_; struct FFI_Sync_Queue *ffi_sync_queue_; struct Scheme_GC_Pre_Post_Callback_Desc *gc_prepost_callback_descs_; struct Scheme_Hash_Table *place_local_misc_table_; @@ -674,6 +676,8 @@ XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL; #define place_local_symbol_table XOA (scheme_get_thread_local_variables()->place_local_symbol_table_) #define place_local_keyword_table XOA (scheme_get_thread_local_variables()->place_local_keyword_table_) #define place_local_parallel_symbol_table XOA (scheme_get_thread_local_variables()->place_local_parallel_symbol_table_) +#define literal_string_table XOA (scheme_get_thread_local_variables()->literal_string_table_) +#define literal_number_table XOA (scheme_get_thread_local_variables()->literal_number_table_) #define ffi_sync_queue XOA (scheme_get_thread_local_variables()->ffi_sync_queue_) #define gc_prepost_callback_descs XOA (scheme_get_thread_local_variables()->gc_prepost_callback_descs_) #define place_local_misc_table XOA (scheme_get_thread_local_variables()->place_local_misc_table_) diff --git a/src/racket/src/bool.c b/src/racket/src/bool.c index 04eed5b246..ef50c01326 100644 --- a/src/racket/src/bool.c +++ b/src/racket/src/bool.c @@ -485,6 +485,14 @@ int is_equal (Scheme_Object *obj1, Scheme_Object *obj2, Equal_Info *eql) l2 = SCHEME_CHAR_STRTAG_VAL(obj2); return ((l1 == l2) && !memcmp(SCHEME_CHAR_STR_VAL(obj1), SCHEME_CHAR_STR_VAL(obj2), l1 * sizeof(mzchar))); + } else if (t1 == scheme_regexp_type) { + if (scheme_regexp_is_byte(obj1) != scheme_regexp_is_byte(obj2)) + return 0; + if (scheme_regexp_is_pregexp(obj1) != scheme_regexp_is_pregexp(obj2)) + return 0; + obj1 = scheme_regexp_source(obj1); + obj2 = scheme_regexp_source(obj2); + goto top; } else if ((t1 == scheme_structure_type) || (t1 == scheme_proc_struct_type)) { Scheme_Struct_Type *st1, *st2; diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 0123a2d4a2..5d1dda7b0b 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,14 +1,14 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,51,0,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,52,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,13,0,18, -0,25,0,30,0,33,0,40,0,53,0,58,0,62,0,66,0,73,0,82,0, +0,25,0,30,0,33,0,46,0,53,0,58,0,62,0,66,0,73,0,82,0, 85,0,91,0,105,0,119,0,122,0,128,0,132,0,134,0,145,0,147,0,161, 0,168,0,190,0,192,0,206,0,17,1,46,1,57,1,68,1,93,1,126,1, 159,1,218,1,17,2,95,2,150,2,155,2,175,2,68,3,88,3,140,3,206, 3,95,4,237,4,34,5,45,5,124,5,0,0,83,7,0,0,69,35,37,109, 105,110,45,115,116,120,29,11,11,64,119,104,101,110,66,100,101,102,105,110,101, -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,64,108,101,116,42,63,108,101,116,63,97,110,100,66, +64,99,111,110,100,62,111,114,72,112,97,114,97,109,101,116,101,114,105,122,101, +66,108,101,116,114,101,99,64,108,101,116,42,63,108,101,116,63,97,110,100,66, 117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11,11,65,113,117, 111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11,29,94,2,15, 68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103,105,110,63,115, @@ -87,10 +87,10 @@ 37,9,223,0,33,36,36,20,112,159,36,16,1,2,13,16,1,33,37,11,16, 5,2,6,88,163,8,36,37,56,37,9,223,0,33,38,36,20,112,159,36,16, 1,2,13,16,1,33,39,11,16,5,2,10,88,163,8,36,37,58,37,9,223, -0,33,42,36,20,112,159,36,16,1,2,13,16,0,11,16,5,2,7,88,163, +0,33,42,36,20,112,159,36,16,1,2,13,16,0,11,16,5,2,8,88,163, 8,36,37,53,37,9,223,0,33,44,36,20,112,159,36,16,1,2,13,16,0, 11,16,5,2,9,88,163,8,36,37,54,37,9,223,0,33,45,36,20,112,159, -36,16,1,2,13,16,0,11,16,5,2,8,88,163,8,36,37,56,37,9,223, +36,16,1,2,13,16,0,11,16,5,2,7,88,163,8,36,37,56,37,9,223, 0,33,46,36,20,112,159,36,16,1,2,13,16,0,11,16,5,2,5,88,163, 8,36,37,58,37,9,223,0,33,47,36,20,112,159,36,16,1,2,13,16,1, 33,49,11,16,5,2,4,88,163,8,36,37,54,37,9,223,0,33,50,36,20, @@ -99,507 +99,504 @@ EVAL_ONE_SIZED_STR((char *)expr, 2018); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,51,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,109,0,0,0,1,0,0,8,0,21,0,26, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,52,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,107,0,0,0,1,0,0,8,0,21,0,26, 0,43,0,65,0,94,0,109,0,127,0,143,0,157,0,179,0,195,0,212,0, 234,0,245,0,251,0,4,1,11,1,18,1,30,1,46,1,70,1,102,1,120, -1,140,1,156,1,174,1,205,1,219,1,224,1,234,1,242,1,251,1,253,1, -255,1,27,2,59,2,72,2,78,2,123,2,127,2,172,2,196,2,235,2,249, -2,252,2,255,2,9,3,20,3,187,3,31,5,149,5,11,6,52,6,125,7, -148,7,165,7,113,9,216,9,230,9,134,10,63,12,72,12,81,12,95,12,105, -12,146,13,248,13,78,14,164,14,8,15,92,15,106,15,220,15,48,16,62,16, -15,17,23,17,129,17,192,17,194,17,50,18,110,18,115,18,238,18,249,18,129, -19,139,19,62,21,84,21,93,21,86,22,104,22,118,22,77,23,96,23,34,26, -154,30,68,31,213,31,198,32,180,33,187,33,12,34,95,34,180,34,206,34,79, -35,0,0,177,39,0,0,67,35,37,117,116,105,108,115,72,112,97,116,104,45, -115,116,114,105,110,103,63,64,98,115,98,115,76,110,111,114,109,97,108,45,99, -97,115,101,45,112,97,116,104,1,20,102,105,110,100,45,101,120,101,99,117,116, -97,98,108,101,45,112,97,116,104,1,27,112,97,116,104,45,108,105,115,116,45, -115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,74,45,99,104, -101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111, -108,108,101,99,116,105,111,110,75,99,111,108,108,101,99,116,105,111,110,45,112, -97,116,104,73,102,105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111, -108,108,101,99,116,105,111,110,45,102,105,108,101,45,112,97,116,104,75,117,115, -101,114,45,108,105,110,107,115,45,112,97,116,104,76,117,115,101,114,45,108,105, -110,107,115,45,99,97,99,104,101,1,20,117,115,101,114,45,108,105,110,107,115, -45,116,105,109,101,115,116,97,109,112,70,108,105,110,107,115,45,112,97,116,104, -65,113,117,111,116,101,68,35,37,112,97,114,97,109,122,29,94,2,16,2,17, -11,29,94,2,16,2,17,11,71,108,105,110,107,115,45,99,97,99,104,101,75, -108,105,110,107,115,45,116,105,109,101,115,116,97,109,112,1,22,103,101,116,45, -108,105,110,107,101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110, -111,114,109,97,108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114, -101,102,101,114,101,110,99,101,77,99,104,101,99,107,45,115,117,102,102,105,120, -45,99,97,108,108,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117, -102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77, -108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102,105, -110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110, -45,112,97,116,104,115,73,101,109,98,101,100,100,101,100,45,108,111,97,100,64, -108,111,111,112,69,101,120,101,99,45,102,105,108,101,67,119,105,110,100,111,119, -115,68,114,101,108,97,116,105,118,101,5,0,5,0,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,72,99,111,108,108,101,99,116,115,45, -100,105,114,65,101,114,114,111,114,6,42,42,101,114,114,111,114,32,114,101,97, -100,105,110,103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115, -32,102,105,108,101,32,126,115,58,32,126,97,6,1,1,47,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,6,11, -11,80,76,84,67,79,76,76,69,67,84,83,6,0,0,6,0,0,69,97,100, -100,111,110,45,100,105,114,6,8,8,99,111,108,108,101,99,116,115,27,20,13, -159,80,159,37,51,37,250,80,159,40,52,37,249,22,27,11,80,159,42,51,37, -22,129,14,10,248,22,128,6,23,196,2,28,248,22,188,6,23,194,2,12,86, -94,248,22,147,9,23,194,1,27,20,13,159,80,159,38,51,37,250,80,159,41, -52,37,249,22,27,11,80,159,43,51,37,22,129,14,10,248,22,128,6,23,197, -2,28,248,22,188,6,23,194,2,12,86,94,248,22,147,9,23,194,1,27,20, -13,159,80,159,39,51,37,250,80,159,42,52,37,249,22,27,11,80,159,44,51, -37,22,129,14,10,248,22,128,6,23,198,2,28,248,22,188,6,23,194,2,12, -86,94,248,22,147,9,23,194,1,248,80,159,40,8,31,39,197,28,248,22,81, -23,195,2,9,27,248,22,74,23,196,2,27,28,248,22,178,14,23,195,2,23, -194,1,28,248,22,177,14,23,195,2,249,22,179,14,23,196,1,250,80,159,43, -39,39,248,22,130,15,2,31,11,10,250,80,159,41,39,39,248,22,130,15,2, -31,23,197,1,10,28,23,193,2,249,22,73,248,22,181,14,249,22,179,14,23, -198,1,247,22,131,15,27,248,22,75,23,200,1,28,248,22,81,23,194,2,9, -27,248,22,74,23,195,2,27,28,248,22,178,14,23,195,2,23,194,1,28,248, -22,177,14,23,195,2,249,22,179,14,23,196,1,250,80,159,48,39,39,248,22, -130,15,2,31,11,10,250,80,159,46,39,39,248,22,130,15,2,31,23,197,1, -10,28,23,193,2,249,22,73,248,22,181,14,249,22,179,14,23,198,1,247,22, -131,15,248,80,159,46,8,30,39,248,22,75,23,199,1,86,94,23,193,1,248, -80,159,44,8,30,39,248,22,75,23,197,1,86,94,23,193,1,27,248,22,75, -23,198,1,28,248,22,81,23,194,2,9,27,248,22,74,23,195,2,27,28,248, -22,178,14,23,195,2,23,194,1,28,248,22,177,14,23,195,2,249,22,179,14, -23,196,1,250,80,159,46,39,39,248,22,130,15,2,31,11,10,250,80,159,44, -39,39,248,22,130,15,2,31,23,197,1,10,28,23,193,2,249,22,73,248,22, -181,14,249,22,179,14,23,198,1,247,22,131,15,248,80,159,44,8,30,39,248, -22,75,23,199,1,248,80,159,42,8,30,39,248,22,75,196,28,248,22,81,23, -195,2,9,27,248,22,74,23,196,2,27,28,248,22,178,14,23,195,2,23,194, -1,28,248,22,177,14,23,195,2,249,22,179,14,23,196,1,250,80,159,43,39, -39,248,22,130,15,2,31,11,10,250,80,159,41,39,39,248,22,130,15,2,31, -23,197,1,10,28,23,193,2,249,22,73,248,22,181,14,249,22,179,14,23,198, -1,247,22,131,15,248,80,159,41,8,29,39,248,22,75,23,200,1,248,80,159, -39,8,29,39,248,22,75,197,28,248,22,81,23,195,2,9,27,248,22,74,23, -196,2,27,28,248,22,178,14,23,195,2,23,194,1,28,248,22,177,14,23,195, -2,249,22,179,14,23,196,1,250,80,159,43,39,39,248,22,130,15,2,31,11, -10,250,80,159,41,39,39,248,22,130,15,2,31,23,197,1,10,28,23,193,2, -249,22,73,248,22,181,14,249,22,179,14,23,198,1,247,22,131,15,248,80,159, -41,8,28,39,248,22,75,23,200,1,248,80,159,39,8,28,39,248,22,75,197, -27,248,22,154,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22, -129,7,23,195,2,27,248,22,176,14,195,28,192,192,248,22,177,14,195,11,86, -94,28,28,248,22,155,14,23,195,2,10,28,248,22,154,14,23,195,2,10,28, -248,22,129,7,23,195,2,28,248,22,176,14,23,195,2,10,248,22,177,14,23, -195,2,11,12,250,22,175,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,155,14,23,195,2,249,22, -139,9,248,22,156,14,23,197,2,2,32,249,22,139,9,247,22,151,8,2,32, -27,28,248,22,129,7,23,196,2,23,195,2,248,22,141,8,248,22,159,14,23, -197,2,28,249,22,146,15,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,129,7,195,248,22,162, -14,195,194,27,248,22,168,7,23,195,1,249,22,163,14,248,22,144,8,250,22, -154,15,0,6,35,114,120,34,47,34,28,249,22,146,15,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,154,15,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,44,37,38,2, -32,28,248,22,129,7,194,248,22,162,14,194,193,32,56,88,163,8,36,39,53, -11,70,102,111,117,110,100,45,101,120,101,99,222,33,59,32,57,88,163,8,36, -40,58,11,64,110,101,120,116,222,33,58,27,248,22,180,14,23,196,2,28,249, -22,141,9,23,195,2,23,197,1,11,28,248,22,176,14,23,194,2,27,249,22, -172,14,23,197,1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11, -248,22,175,14,23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27, -248,22,180,14,23,199,2,28,249,22,141,9,23,195,2,23,200,2,11,28,248, -22,176,14,23,194,2,250,2,56,23,205,2,23,206,2,249,22,172,14,23,200, -2,23,198,1,250,2,56,23,205,2,23,206,2,23,196,1,11,28,23,193,2, -192,86,94,23,193,1,27,28,248,22,154,14,23,196,2,27,249,22,172,14,23, -198,2,23,205,2,28,28,248,22,167,14,193,10,248,22,166,14,193,192,11,11, -28,23,193,2,192,86,94,23,193,1,28,23,203,2,11,27,248,22,180,14,23, -200,2,28,249,22,141,9,23,195,2,23,201,1,11,28,248,22,176,14,23,194, -2,250,2,56,23,206,1,23,207,1,249,22,172,14,23,201,1,23,198,1,250, -2,56,205,206,195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,89,161, -39,36,11,248,22,175,14,23,197,2,86,95,23,195,1,23,194,1,27,28,23, -201,2,27,248,22,180,14,23,199,2,28,249,22,141,9,23,195,2,23,200,2, -11,28,248,22,176,14,23,194,2,250,2,56,23,204,2,23,205,2,249,22,172, -14,23,200,2,23,198,1,250,2,56,23,204,2,23,205,2,23,196,1,11,28, -23,193,2,192,86,94,23,193,1,27,28,248,22,154,14,23,196,2,27,249,22, -172,14,23,198,2,23,204,2,28,28,248,22,167,14,193,10,248,22,166,14,193, -192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22, -180,14,23,200,2,28,249,22,141,9,23,195,2,23,201,1,11,28,248,22,176, -14,23,194,2,250,2,56,23,205,1,23,206,1,249,22,172,14,23,201,1,23, -198,1,250,2,56,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36, -11,248,22,175,14,23,199,2,86,95,23,195,1,23,194,1,27,28,23,198,2, -251,2,57,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,2,192, -86,94,23,193,1,27,28,248,22,154,14,195,27,249,22,172,14,197,200,28,28, -248,22,167,14,193,10,248,22,166,14,193,192,11,11,28,192,192,28,198,11,251, -2,57,198,203,201,202,194,32,60,88,163,8,36,40,58,11,2,30,222,33,61, -28,248,22,81,23,197,2,11,27,248,22,179,14,248,22,74,23,199,2,27,249, -22,172,14,23,196,1,23,197,2,28,248,22,166,14,23,194,2,250,2,56,198, -199,195,86,94,23,193,1,27,248,22,75,23,200,1,28,248,22,81,23,194,2, -11,27,248,22,179,14,248,22,74,23,196,2,27,249,22,172,14,23,196,1,23, -200,2,28,248,22,166,14,23,194,2,250,2,56,201,202,195,86,94,23,193,1, -27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,179,14,248, -22,74,195,27,249,22,172,14,23,196,1,202,28,248,22,166,14,193,250,2,56, -204,205,195,251,2,60,204,205,206,248,22,75,199,86,95,28,28,248,22,154,14, -23,195,2,10,28,248,22,129,7,23,195,2,28,248,22,176,14,23,195,2,10, -248,22,177,14,23,195,2,11,12,250,22,175,9,2,5,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,154,14,23,196,2,10,28,248, -22,129,7,23,196,2,28,248,22,176,14,23,196,2,10,248,22,177,14,23,196, -2,11,248,22,176,14,23,196,2,11,10,12,250,22,175,9,2,5,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,176,14,23,195,2,90, -159,39,11,89,161,39,36,11,248,22,175,14,23,198,2,249,22,139,9,194,2, -33,11,27,248,22,149,8,6,4,4,80,65,84,72,27,28,23,194,2,27,249, -80,158,41,40,23,197,1,9,28,249,22,139,9,247,22,151,8,2,32,249,22, -73,248,22,163,14,5,1,46,194,192,86,94,23,194,1,9,28,248,22,81,23, -194,2,11,27,248,22,179,14,248,22,74,23,196,2,27,249,22,172,14,23,196, -1,23,200,2,28,248,22,166,14,23,194,2,250,2,56,201,202,195,86,94,23, -193,1,27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,179, -14,248,22,74,23,196,2,27,249,22,172,14,23,196,1,23,203,2,28,248,22, -166,14,23,194,2,250,2,56,204,205,195,86,94,23,193,1,27,248,22,75,23, -197,1,28,248,22,81,23,194,2,11,27,248,22,179,14,248,22,74,195,27,249, -22,172,14,23,196,1,205,28,248,22,166,14,193,250,2,56,23,15,23,16,195, -251,2,60,23,15,23,16,23,17,248,22,75,199,27,248,22,179,14,23,196,1, -28,248,22,166,14,193,250,2,56,198,199,195,11,250,80,159,39,39,39,196,197, -11,250,80,159,39,39,39,196,11,11,32,65,88,163,8,36,39,57,11,2,30, -222,33,67,0,8,35,114,120,35,34,92,34,34,27,249,22,142,15,23,197,2, -23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,98,23,195,2,27,27, -248,22,107,23,197,1,27,249,22,142,15,23,201,2,23,196,2,28,23,193,2, -86,94,23,194,1,27,248,22,98,23,195,2,27,250,2,65,23,203,2,23,204, -1,248,22,107,23,199,1,28,249,22,190,7,23,196,2,2,34,249,22,87,23, -202,2,194,249,22,73,248,22,163,14,28,249,22,139,9,247,22,151,8,2,32, -250,22,154,15,2,66,23,200,1,2,35,23,197,1,194,86,95,23,199,1,23, -193,1,28,249,22,190,7,23,196,2,2,34,249,22,87,23,200,2,9,249,22, -73,248,22,163,14,28,249,22,139,9,247,22,151,8,2,32,250,22,154,15,2, -66,23,200,1,2,35,23,197,1,9,28,249,22,190,7,23,196,2,2,34,249, -22,87,197,194,86,94,23,196,1,249,22,73,248,22,163,14,28,249,22,139,9, -247,22,151,8,2,32,250,22,154,15,2,66,23,200,1,2,35,23,197,1,194, -86,94,23,193,1,28,249,22,190,7,23,198,2,2,34,249,22,87,195,9,86, -94,23,194,1,249,22,73,248,22,163,14,28,249,22,139,9,247,22,151,8,2, -32,250,22,154,15,2,66,23,202,1,2,35,23,199,1,9,86,95,28,28,248, -22,182,7,194,10,248,22,129,7,194,12,250,22,175,9,2,6,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,82,195,249,22,4,22,154,14,196,11,12,250,22,175,9,2,6, -6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,65,197, -195,28,248,22,129,7,197,248,22,143,8,197,196,86,94,28,28,248,22,154,14, -23,195,2,10,28,248,22,129,7,23,195,2,28,248,22,176,14,23,195,2,10, -248,22,177,14,23,195,2,11,12,250,22,175,9,23,196,2,2,36,23,197,2, -28,248,22,176,14,23,195,2,12,248,22,169,12,249,22,172,11,248,22,158,7, -250,22,177,7,2,37,23,200,1,23,201,1,247,22,23,86,94,28,28,248,22, -154,14,23,195,2,10,28,248,22,129,7,23,195,2,28,248,22,176,14,23,195, -2,10,248,22,177,14,23,195,2,11,12,250,22,175,9,23,196,2,2,36,23, -197,2,28,248,22,176,14,23,195,2,12,248,22,169,12,249,22,172,11,248,22, -158,7,250,22,177,7,2,37,23,200,1,23,201,1,247,22,23,86,94,86,94, -28,28,248,22,154,14,23,195,2,10,28,248,22,129,7,23,195,2,28,248,22, -176,14,23,195,2,10,248,22,177,14,23,195,2,11,12,250,22,175,9,195,2, -36,23,197,2,28,248,22,176,14,23,195,2,12,248,22,169,12,249,22,172,11, -248,22,158,7,250,22,177,7,2,37,199,23,201,1,247,22,23,249,22,3,88, -163,8,36,37,50,11,9,223,2,33,70,196,86,94,28,28,248,22,154,14,23, -194,2,10,28,248,22,129,7,23,194,2,28,248,22,176,14,23,194,2,10,248, -22,177,14,23,194,2,11,12,250,22,175,9,2,9,2,36,23,196,2,28,248, -22,176,14,23,194,2,12,248,22,169,12,249,22,172,11,248,22,158,7,250,22, -177,7,2,37,2,9,23,200,1,247,22,23,248,22,169,12,249,22,144,12,23, -196,1,247,22,23,86,94,86,94,86,94,28,28,248,22,154,14,194,10,28,248, -22,129,7,194,28,248,22,176,14,194,10,248,22,177,14,194,11,12,250,22,175, -9,2,9,2,36,196,28,248,22,176,14,194,12,248,22,169,12,249,22,172,11, -248,22,158,7,250,22,177,7,2,37,2,9,200,247,22,23,249,22,3,32,0, -88,163,8,36,37,49,11,9,222,33,72,196,252,80,158,41,44,2,9,32,0, -88,163,8,36,37,45,11,9,222,33,73,198,199,11,86,94,28,28,248,22,154, -14,23,194,2,10,28,248,22,129,7,23,194,2,28,248,22,176,14,23,194,2, -10,248,22,177,14,23,194,2,11,12,250,22,175,9,2,11,2,36,23,196,2, -28,248,22,176,14,23,194,2,12,248,22,169,12,249,22,172,11,248,22,158,7, -250,22,177,7,2,37,2,11,23,200,1,247,22,23,248,22,169,12,249,22,144, -12,23,196,1,247,22,23,86,95,86,94,28,28,248,22,154,14,194,10,28,248, -22,129,7,194,28,248,22,176,14,194,10,248,22,177,14,194,11,12,250,22,175, -9,2,11,2,36,196,28,248,22,176,14,194,12,248,22,169,12,249,22,172,11, -248,22,158,7,250,22,177,7,2,37,2,11,200,247,22,23,86,94,86,94,28, -28,248,22,154,14,23,196,2,10,28,248,22,129,7,23,196,2,28,248,22,176, -14,23,196,2,10,248,22,177,14,23,196,2,11,12,250,22,175,9,2,11,2, -36,23,198,2,28,248,22,176,14,23,196,2,12,248,22,169,12,249,22,172,11, -248,22,158,7,250,22,177,7,2,37,2,11,23,202,2,247,22,23,249,22,3, -32,0,88,163,8,36,37,49,11,9,222,33,75,23,198,2,249,22,172,14,252, -80,158,43,44,2,11,32,0,88,163,8,36,37,45,11,9,222,33,76,23,202, -1,23,203,1,200,195,0,6,45,105,110,102,46,48,27,248,22,130,15,2,38, -27,28,248,22,177,14,23,195,2,193,20,13,159,80,159,38,51,37,250,80,159, -41,52,37,249,22,27,11,80,159,43,51,37,22,131,15,248,22,130,15,68,111, -114,105,103,45,100,105,114,27,248,22,130,15,2,31,250,80,159,42,39,39,23, -196,1,23,198,1,11,28,192,250,22,172,14,195,6,6,6,99,111,110,102,105, -103,6,10,10,108,105,110,107,115,46,114,107,116,100,11,86,94,27,247,22,130, -10,28,249,22,187,9,23,195,2,2,39,251,22,190,9,23,197,1,2,39,250, -22,177,7,2,40,28,23,202,1,80,159,46,46,38,80,159,46,49,38,248,22, -164,11,23,205,1,247,22,23,12,248,193,247,22,133,2,2,78,86,95,27,247, -22,130,10,28,249,22,187,9,23,195,2,2,39,251,22,190,9,23,197,1,2, -39,250,22,177,7,2,40,28,202,80,159,47,46,38,80,159,47,49,38,248,22, -164,11,23,206,1,247,22,23,12,28,192,28,194,86,94,20,18,159,11,80,158, -39,47,247,22,133,2,20,18,159,11,80,158,39,48,192,86,94,20,18,159,11, -80,158,39,53,247,22,133,2,20,18,159,11,80,158,39,54,192,12,248,194,247, -22,133,2,20,20,94,248,22,128,6,23,194,2,28,248,22,188,6,248,22,128, -6,23,195,1,12,248,22,172,9,6,30,30,101,120,112,101,99,116,101,100,32, -97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101,115,115,105,111,110, -248,22,180,5,193,28,248,22,82,23,194,2,28,28,249,22,184,3,38,248,22, -86,23,196,2,10,249,22,184,3,39,248,22,86,23,196,2,28,28,248,22,129, -7,248,22,74,23,195,2,10,249,22,139,9,64,114,111,111,116,248,22,74,23, -196,2,28,27,248,22,98,194,28,248,22,154,14,23,194,2,10,28,248,22,129, -7,23,194,2,28,248,22,176,14,23,194,2,10,248,22,177,14,23,194,1,11, -27,248,22,81,248,22,100,195,28,192,192,248,22,155,15,248,22,107,195,11,11, -11,11,250,22,151,2,196,197,249,22,73,197,200,28,28,248,22,81,248,22,100, -23,197,2,10,249,22,146,15,248,22,107,23,198,2,247,22,147,8,27,248,22, -181,14,249,22,179,14,248,22,98,23,200,2,23,198,1,28,248,22,58,248,22, -74,23,198,2,86,94,23,196,1,86,94,28,250,22,153,2,196,11,11,12,250, -22,151,2,196,11,9,249,22,157,2,195,88,163,8,36,38,50,11,9,224,3, -2,33,86,27,248,22,61,248,22,74,23,199,1,250,22,151,2,23,198,2,23, -196,2,249,22,73,248,22,125,23,200,1,250,22,153,2,23,203,1,23,201,1, -9,12,250,22,151,2,195,196,248,22,88,198,20,13,159,80,159,37,56,37,88, -163,36,37,54,8,128,144,9,225,1,0,2,33,80,27,250,22,189,14,28,23, -197,2,80,159,41,46,38,80,159,41,49,38,11,32,0,88,163,8,36,36,41, -11,9,222,33,81,28,249,22,186,3,23,195,2,28,23,196,2,80,158,40,48, -80,158,40,54,20,13,159,80,159,38,56,37,20,20,94,88,163,36,37,55,8, -240,0,60,6,0,9,226,2,1,3,0,33,82,23,196,1,20,13,159,80,159, -38,51,37,26,29,80,159,8,31,52,37,249,22,27,11,80,159,8,33,51,37, -22,189,13,10,22,190,13,10,22,191,13,10,22,130,14,10,22,129,14,10,22, -131,14,10,22,128,14,10,22,132,14,10,22,133,14,10,22,134,14,10,22,135, -14,10,22,136,14,10,22,137,14,11,22,187,13,11,27,249,22,171,5,28,196, -80,159,41,46,38,80,159,41,49,38,66,98,105,110,97,114,121,27,250,22,40, -22,31,88,163,8,36,36,44,11,9,223,4,33,83,20,20,94,88,163,36,36, -43,11,9,223,4,33,84,23,197,1,86,94,28,28,248,22,82,23,194,2,249, -22,4,32,0,88,163,8,36,37,45,11,9,222,33,85,23,195,2,11,12,248, -22,172,9,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, -101,110,116,27,247,22,133,2,27,90,159,39,11,89,161,39,36,11,248,22,175, -14,28,201,80,159,46,46,38,80,159,46,49,38,192,86,96,249,22,3,20,20, -94,88,163,8,36,37,54,11,9,224,2,3,33,87,23,195,1,23,197,1,249, -22,157,2,195,88,163,8,36,38,48,11,9,223,3,33,88,28,197,86,94,20, -18,159,11,80,158,42,47,193,20,18,159,11,80,158,42,48,196,86,94,20,18, -159,11,80,158,42,53,193,20,18,159,11,80,158,42,54,196,193,28,193,80,158, -38,47,80,158,38,53,248,22,9,88,163,8,32,37,8,40,8,240,0,188,23, -0,9,224,1,2,33,89,0,7,35,114,120,34,47,43,34,28,248,22,129,7, -23,195,2,27,249,22,144,15,2,91,196,28,192,28,249,22,184,3,248,22,97, -195,248,22,174,3,248,22,132,7,198,249,22,7,250,22,151,7,199,36,248,22, -97,198,197,249,22,7,250,22,151,7,199,36,248,22,97,198,249,22,73,249,22, -151,7,200,248,22,99,199,199,249,22,7,196,197,90,159,39,11,89,161,39,36, -11,248,22,175,14,23,198,1,86,94,23,195,1,28,249,22,139,9,23,195,2, -2,33,249,22,7,195,199,27,249,22,73,23,197,1,23,201,1,28,248,22,129, -7,23,195,2,27,249,22,144,15,2,91,196,28,192,28,249,22,184,3,248,22, -97,195,248,22,174,3,248,22,132,7,198,249,22,7,250,22,151,7,199,36,248, -22,97,198,195,249,22,7,250,22,151,7,199,36,248,22,97,198,249,22,73,249, -22,151,7,200,248,22,99,199,197,249,22,7,196,195,90,159,39,11,89,161,39, -36,11,248,22,175,14,23,198,1,28,249,22,139,9,194,2,33,249,22,7,195, -197,249,80,159,45,57,39,194,249,22,73,197,199,32,93,88,163,36,44,8,36, -11,65,99,108,111,111,112,222,33,98,32,94,88,163,8,36,37,55,11,2,30, -222,33,95,28,248,22,81,248,22,75,23,195,2,248,22,83,27,248,22,74,23, -196,1,28,248,22,154,14,23,194,2,248,22,158,14,23,194,1,192,250,22,84, -27,248,22,74,23,198,2,28,248,22,154,14,23,194,2,248,22,158,14,23,194, -1,192,2,41,27,248,22,75,23,198,1,28,248,22,81,248,22,75,23,195,2, -248,22,83,27,248,22,74,23,196,1,28,248,22,154,14,23,194,2,248,22,158, -14,23,194,1,192,250,22,84,27,248,22,74,23,198,2,28,248,22,154,14,23, -194,2,248,22,158,14,23,194,1,192,2,41,27,248,22,75,23,198,1,28,248, -22,81,248,22,75,23,195,2,248,22,83,27,248,22,74,23,196,1,28,248,22, -154,14,23,194,2,248,22,158,14,23,194,1,192,250,22,84,27,248,22,74,23, -198,2,28,248,22,154,14,23,194,2,248,22,158,14,23,194,1,192,2,41,248, -2,94,248,22,75,23,198,1,32,96,88,163,8,36,38,57,11,66,102,105,108, -116,101,114,222,33,97,28,248,22,81,23,195,2,9,28,248,23,194,2,248,22, -74,23,196,2,249,22,73,248,22,74,23,197,2,27,248,22,75,23,198,1,28, -248,22,81,23,194,2,9,28,248,23,197,2,248,22,74,23,195,2,249,22,73, -248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9, -28,248,23,200,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27, -248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,23,203,2,248,22, -74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,96,23,206,1,248,22, -75,23,198,1,249,2,96,23,204,1,248,22,75,23,196,1,27,248,22,75,23, -195,1,28,248,22,81,23,194,2,9,28,248,23,201,2,248,22,74,23,195,2, -249,22,73,248,22,74,23,196,2,249,2,96,23,204,1,248,22,75,23,198,1, -249,2,96,23,202,1,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248, -22,81,23,194,2,9,28,248,23,198,2,248,22,74,23,195,2,249,22,73,248, -22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28, -248,23,201,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2, -96,23,204,1,248,22,75,23,198,1,249,2,96,23,202,1,248,22,75,23,196, -1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,23,199,2, -248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,96,23,202,1, -248,22,75,23,198,1,249,2,96,23,200,1,248,22,75,23,196,1,27,248,22, -75,23,196,1,28,248,22,81,23,194,2,9,28,248,23,195,2,248,22,74,23, -195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22, -81,23,194,2,9,28,248,23,198,2,248,22,74,23,195,2,249,22,73,248,22, -74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248, -23,201,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,96, -23,204,1,248,22,75,23,198,1,249,2,96,23,202,1,248,22,75,23,196,1, -27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,23,199,2,248, -22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,96,23,202,1,248, -22,75,23,198,1,249,2,96,23,200,1,248,22,75,23,196,1,27,248,22,75, -23,195,1,28,248,22,81,23,194,2,9,28,248,23,196,2,248,22,74,23,195, +1,140,1,156,1,174,1,205,1,219,1,224,1,234,1,23,2,31,2,40,2, +42,2,70,2,102,2,115,2,121,2,166,2,169,2,173,2,197,2,236,2,250, +2,4,3,15,3,182,3,26,5,144,5,6,6,47,6,77,7,100,7,117,7, +65,9,168,9,182,9,86,10,15,12,24,12,33,12,47,12,57,12,98,13,200, +13,30,14,116,14,216,14,44,15,58,15,172,15,0,16,14,16,223,16,231,16, +81,17,144,17,146,17,2,18,62,18,67,18,190,18,201,18,81,19,91,19,14, +21,36,21,45,21,38,22,56,22,70,22,29,23,48,23,242,25,102,30,16,31, +161,31,146,32,128,33,135,33,216,33,43,34,128,34,154,34,27,35,0,0,125, +39,0,0,67,35,37,117,116,105,108,115,72,112,97,116,104,45,115,116,114,105, +110,103,63,64,98,115,98,115,76,110,111,114,109,97,108,45,99,97,115,101,45, +112,97,116,104,1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101, +45,112,97,116,104,1,27,112,97,116,104,45,108,105,115,116,45,115,116,114,105, +110,103,45,62,112,97,116,104,45,108,105,115,116,74,45,99,104,101,99,107,45, +114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,108,108,101,99, +116,105,111,110,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,73, +102,105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101,99, +116,105,111,110,45,102,105,108,101,45,112,97,116,104,75,117,115,101,114,45,108, +105,110,107,115,45,112,97,116,104,76,117,115,101,114,45,108,105,110,107,115,45, +99,97,99,104,101,1,20,117,115,101,114,45,108,105,110,107,115,45,116,105,109, +101,115,116,97,109,112,70,108,105,110,107,115,45,112,97,116,104,65,113,117,111, +116,101,68,35,37,112,97,114,97,109,122,29,94,2,16,2,17,11,29,94,2, +16,2,17,11,71,108,105,110,107,115,45,99,97,99,104,101,75,108,105,110,107, +115,45,116,105,109,101,115,116,97,109,112,1,22,103,101,116,45,108,105,110,107, +101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109,97, +108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101,114, +101,110,99,101,77,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97,108, +108,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120, +75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108,111,97,100, +47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102,105,110,100,45,108, +105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,112,97,116, +104,115,73,101,109,98,101,100,100,101,100,45,108,111,97,100,64,108,111,111,112, +69,101,120,101,99,45,102,105,108,101,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,67,119,105,110,100,111,119,115, +68,114,101,108,97,116,105,118,101,5,0,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,72,99,111,108,108,101,99,116,115,45,100,105,114, +65,101,114,114,111,114,6,42,42,101,114,114,111,114,32,114,101,97,100,105,110, +103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,32,102,105, +108,101,32,126,115,58,32,126,97,6,0,0,6,1,1,47,6,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,6,11,11,80,76, +84,67,79,76,76,69,67,84,83,69,97,100,100,111,110,45,100,105,114,6,8, +8,99,111,108,108,101,99,116,115,27,20,13,159,80,159,37,51,37,250,80,159, +40,52,37,249,22,27,11,80,159,42,51,37,22,129,14,10,248,22,128,6,23, +196,2,28,248,22,188,6,23,194,2,12,86,94,248,22,147,9,23,194,1,27, +20,13,159,80,159,38,51,37,250,80,159,41,52,37,249,22,27,11,80,159,43, +51,37,22,129,14,10,248,22,128,6,23,197,2,28,248,22,188,6,23,194,2, +12,86,94,248,22,147,9,23,194,1,27,20,13,159,80,159,39,51,37,250,80, +159,42,52,37,249,22,27,11,80,159,44,51,37,22,129,14,10,248,22,128,6, +23,198,2,28,248,22,188,6,23,194,2,12,86,94,248,22,147,9,23,194,1, +248,80,159,40,8,31,39,197,28,248,22,81,23,195,2,9,27,248,22,74,23, +196,2,27,28,248,22,179,14,23,195,2,23,194,1,28,248,22,178,14,23,195, +2,249,22,180,14,23,196,1,250,80,159,43,39,39,248,22,131,15,2,31,11, +10,250,80,159,41,39,39,248,22,131,15,2,31,23,197,1,10,28,23,193,2, +249,22,73,248,22,182,14,249,22,180,14,23,198,1,247,22,132,15,27,248,22, +75,23,200,1,28,248,22,81,23,194,2,9,27,248,22,74,23,195,2,27,28, +248,22,179,14,23,195,2,23,194,1,28,248,22,178,14,23,195,2,249,22,180, +14,23,196,1,250,80,159,48,39,39,248,22,131,15,2,31,11,10,250,80,159, +46,39,39,248,22,131,15,2,31,23,197,1,10,28,23,193,2,249,22,73,248, +22,182,14,249,22,180,14,23,198,1,247,22,132,15,248,80,159,46,8,30,39, +248,22,75,23,199,1,86,94,23,193,1,248,80,159,44,8,30,39,248,22,75, +23,197,1,86,94,23,193,1,27,248,22,75,23,198,1,28,248,22,81,23,194, +2,9,27,248,22,74,23,195,2,27,28,248,22,179,14,23,195,2,23,194,1, +28,248,22,178,14,23,195,2,249,22,180,14,23,196,1,250,80,159,46,39,39, +248,22,131,15,2,31,11,10,250,80,159,44,39,39,248,22,131,15,2,31,23, +197,1,10,28,23,193,2,249,22,73,248,22,182,14,249,22,180,14,23,198,1, +247,22,132,15,248,80,159,44,8,30,39,248,22,75,23,199,1,248,80,159,42, +8,30,39,248,22,75,196,28,248,22,81,23,195,2,9,27,248,22,74,23,196, +2,27,28,248,22,179,14,23,195,2,23,194,1,28,248,22,178,14,23,195,2, +249,22,180,14,23,196,1,250,80,159,43,39,39,248,22,131,15,2,31,11,10, +250,80,159,41,39,39,248,22,131,15,2,31,23,197,1,10,28,23,193,2,249, +22,73,248,22,182,14,249,22,180,14,23,198,1,247,22,132,15,248,80,159,41, +8,29,39,248,22,75,23,200,1,248,80,159,39,8,29,39,248,22,75,197,28, +248,22,81,23,195,2,9,27,248,22,74,23,196,2,27,28,248,22,179,14,23, +195,2,23,194,1,28,248,22,178,14,23,195,2,249,22,180,14,23,196,1,250, +80,159,43,39,39,248,22,131,15,2,31,11,10,250,80,159,41,39,39,248,22, +131,15,2,31,23,197,1,10,28,23,193,2,249,22,73,248,22,182,14,249,22, +180,14,23,198,1,247,22,132,15,248,80,159,41,8,28,39,248,22,75,23,200, +1,248,80,159,39,8,28,39,248,22,75,197,27,248,22,155,14,23,195,2,28, +23,193,2,192,86,94,23,193,1,28,248,22,129,7,23,195,2,27,248,22,177, +14,195,28,192,192,248,22,178,14,195,11,86,94,28,28,248,22,156,14,23,195, +2,10,28,248,22,155,14,23,195,2,10,28,248,22,129,7,23,195,2,28,248, +22,177,14,23,195,2,10,248,22,178,14,23,195,2,11,12,250,22,175,9,76, +110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,2,32,23,197,2, +28,28,248,22,156,14,23,195,2,249,22,139,9,248,22,157,14,23,197,2,2, +33,249,22,139,9,247,22,151,8,2,33,27,28,248,22,129,7,23,196,2,23, +195,2,248,22,141,8,248,22,160,14,23,197,2,28,249,22,147,15,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,129,7,195,248,22,163,14,195,194,27,248,22,168,7,23,195, +1,249,22,164,14,248,22,144,8,250,22,155,15,0,6,35,114,120,34,47,34, +28,249,22,147,15,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,155,15,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,44,37,38,2,33,28,248,22,129,7,194,248,22,163, +14,194,193,32,54,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120, +101,99,222,33,57,32,55,88,163,8,36,40,58,11,64,110,101,120,116,222,33, +56,27,248,22,181,14,23,196,2,28,249,22,141,9,23,195,2,23,197,1,11, +28,248,22,177,14,23,194,2,27,249,22,173,14,23,197,1,23,196,1,28,23, +197,2,90,159,39,11,89,161,39,36,11,248,22,176,14,23,197,2,86,95,23, +195,1,23,194,1,27,28,23,202,2,27,248,22,181,14,23,199,2,28,249,22, +141,9,23,195,2,23,200,2,11,28,248,22,177,14,23,194,2,250,2,54,23, +205,2,23,206,2,249,22,173,14,23,200,2,23,198,1,250,2,54,23,205,2, +23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22, +155,14,23,196,2,27,249,22,173,14,23,198,2,23,205,2,28,28,248,22,168, +14,193,10,248,22,167,14,193,192,11,11,28,23,193,2,192,86,94,23,193,1, +28,23,203,2,11,27,248,22,181,14,23,200,2,28,249,22,141,9,23,195,2, +23,201,1,11,28,248,22,177,14,23,194,2,250,2,54,23,206,1,23,207,1, +249,22,173,14,23,201,1,23,198,1,250,2,54,205,206,195,192,86,94,23,194, +1,28,23,196,2,90,159,39,11,89,161,39,36,11,248,22,176,14,23,197,2, +86,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,181,14,23,199,2, +28,249,22,141,9,23,195,2,23,200,2,11,28,248,22,177,14,23,194,2,250, +2,54,23,204,2,23,205,2,249,22,173,14,23,200,2,23,198,1,250,2,54, +23,204,2,23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27, +28,248,22,155,14,23,196,2,27,249,22,173,14,23,198,2,23,204,2,28,28, +248,22,168,14,193,10,248,22,167,14,193,192,11,11,28,23,193,2,192,86,94, +23,193,1,28,23,202,2,11,27,248,22,181,14,23,200,2,28,249,22,141,9, +23,195,2,23,201,1,11,28,248,22,177,14,23,194,2,250,2,54,23,205,1, +23,206,1,249,22,173,14,23,201,1,23,198,1,250,2,54,204,205,195,192,28, +23,193,2,90,159,39,11,89,161,39,36,11,248,22,176,14,23,199,2,86,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,86,94,23,193,1,27,28,248,22,155, +14,195,27,249,22,173,14,197,200,28,28,248,22,168,14,193,10,248,22,167,14, +193,192,11,11,28,192,192,28,198,11,251,2,55,198,203,201,202,194,32,58,88, +163,8,36,40,58,11,2,30,222,33,59,28,248,22,81,23,197,2,11,27,248, +22,180,14,248,22,74,23,199,2,27,249,22,173,14,23,196,1,23,197,2,28, +248,22,167,14,23,194,2,250,2,54,198,199,195,86,94,23,193,1,27,248,22, +75,23,200,1,28,248,22,81,23,194,2,11,27,248,22,180,14,248,22,74,23, +196,2,27,249,22,173,14,23,196,1,23,200,2,28,248,22,167,14,23,194,2, +250,2,54,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,22, +81,23,194,2,11,27,248,22,180,14,248,22,74,195,27,249,22,173,14,23,196, +1,202,28,248,22,167,14,193,250,2,54,204,205,195,251,2,58,204,205,206,248, +22,75,199,86,95,28,28,248,22,155,14,23,195,2,10,28,248,22,129,7,23, +195,2,28,248,22,177,14,23,195,2,10,248,22,178,14,23,195,2,11,12,250, +22,175,9,2,5,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,155,14,23,196,2,10,28,248,22,129,7,23,196,2,28,248,22,177, +14,23,196,2,10,248,22,178,14,23,196,2,11,248,22,177,14,23,196,2,11, +10,12,250,22,175,9,2,5,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,177,14,23,195,2,90,159,39,11,89,161,39,36,11,248,22, +176,14,23,198,2,249,22,139,9,194,2,34,11,27,248,22,149,8,6,4,4, +80,65,84,72,27,28,23,194,2,27,249,80,158,41,40,23,197,1,9,28,249, +22,139,9,247,22,151,8,2,33,249,22,73,248,22,164,14,5,1,46,194,192, +86,94,23,194,1,9,28,248,22,81,23,194,2,11,27,248,22,180,14,248,22, +74,23,196,2,27,249,22,173,14,23,196,1,23,200,2,28,248,22,167,14,23, +194,2,250,2,54,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28, +248,22,81,23,194,2,11,27,248,22,180,14,248,22,74,23,196,2,27,249,22, +173,14,23,196,1,23,203,2,28,248,22,167,14,23,194,2,250,2,54,204,205, +195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,22,81,23,194,2,11, +27,248,22,180,14,248,22,74,195,27,249,22,173,14,23,196,1,205,28,248,22, +167,14,193,250,2,54,23,15,23,16,195,251,2,58,23,15,23,16,23,17,248, +22,75,199,27,248,22,180,14,23,196,1,28,248,22,167,14,193,250,2,54,198, +199,195,11,250,80,159,39,39,39,196,197,11,250,80,159,39,39,39,196,11,11, +32,63,88,163,8,36,39,57,11,2,30,222,33,65,0,8,35,114,120,35,34, +92,34,34,27,249,22,143,15,23,197,2,23,198,2,28,23,193,2,86,94,23, +196,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,143, +15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23, +195,2,27,250,2,63,23,203,2,23,204,1,248,22,107,23,199,1,28,249,22, +190,7,23,196,2,2,35,249,22,87,23,202,2,194,249,22,73,248,22,164,14, +28,249,22,139,9,247,22,151,8,2,33,250,22,155,15,2,64,23,200,1,2, +35,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,190,7,23,196,2, +2,35,249,22,87,23,200,2,9,249,22,73,248,22,164,14,28,249,22,139,9, +247,22,151,8,2,33,250,22,155,15,2,64,23,200,1,2,35,23,197,1,9, +28,249,22,190,7,23,196,2,2,35,249,22,87,197,194,86,94,23,196,1,249, +22,73,248,22,164,14,28,249,22,139,9,247,22,151,8,2,33,250,22,155,15, +2,64,23,200,1,2,35,23,197,1,194,86,94,23,193,1,28,249,22,190,7, +23,198,2,2,35,249,22,87,195,9,86,94,23,194,1,249,22,73,248,22,164, +14,28,249,22,139,9,247,22,151,8,2,33,250,22,155,15,2,64,23,202,1, +2,35,23,199,1,9,86,95,28,28,248,22,182,7,194,10,248,22,129,7,194, +12,250,22,175,9,2,6,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,82,195,249,22,4,22, +155,14,196,11,12,250,22,175,9,2,6,6,13,13,108,105,115,116,32,111,102, +32,112,97,116,104,115,197,250,2,63,197,195,28,248,22,129,7,197,248,22,143, +8,197,196,86,94,28,28,248,22,155,14,23,195,2,10,28,248,22,129,7,23, +195,2,28,248,22,177,14,23,195,2,10,248,22,178,14,23,195,2,11,12,250, +22,175,9,23,196,2,2,36,23,197,2,28,248,22,177,14,23,195,2,12,248, +22,169,12,249,22,172,11,248,22,158,7,250,22,177,7,2,37,23,200,1,23, +201,1,247,22,23,86,94,28,28,248,22,155,14,23,195,2,10,28,248,22,129, +7,23,195,2,28,248,22,177,14,23,195,2,10,248,22,178,14,23,195,2,11, +12,250,22,175,9,23,196,2,2,36,23,197,2,28,248,22,177,14,23,195,2, +12,248,22,169,12,249,22,172,11,248,22,158,7,250,22,177,7,2,37,23,200, +1,23,201,1,247,22,23,86,94,86,94,28,28,248,22,155,14,23,195,2,10, +28,248,22,129,7,23,195,2,28,248,22,177,14,23,195,2,10,248,22,178,14, +23,195,2,11,12,250,22,175,9,195,2,36,23,197,2,28,248,22,177,14,23, +195,2,12,248,22,169,12,249,22,172,11,248,22,158,7,250,22,177,7,2,37, +199,23,201,1,247,22,23,249,22,3,88,163,8,36,37,50,11,9,223,2,33, +68,196,86,94,28,28,248,22,155,14,23,194,2,10,28,248,22,129,7,23,194, +2,28,248,22,177,14,23,194,2,10,248,22,178,14,23,194,2,11,12,250,22, +175,9,2,9,2,36,23,196,2,28,248,22,177,14,23,194,2,12,248,22,169, +12,249,22,172,11,248,22,158,7,250,22,177,7,2,37,2,9,23,200,1,247, +22,23,248,22,169,12,249,22,144,12,23,196,1,247,22,23,86,94,86,94,86, +94,28,28,248,22,155,14,194,10,28,248,22,129,7,194,28,248,22,177,14,194, +10,248,22,178,14,194,11,12,250,22,175,9,2,9,2,36,196,28,248,22,177, +14,194,12,248,22,169,12,249,22,172,11,248,22,158,7,250,22,177,7,2,37, +2,9,200,247,22,23,249,22,3,32,0,88,163,8,36,37,49,11,9,222,33, +70,196,252,80,158,41,44,2,9,32,0,88,163,8,36,37,45,11,9,222,33, +71,198,199,11,86,94,28,28,248,22,155,14,23,194,2,10,28,248,22,129,7, +23,194,2,28,248,22,177,14,23,194,2,10,248,22,178,14,23,194,2,11,12, +250,22,175,9,2,11,2,36,23,196,2,28,248,22,177,14,23,194,2,12,248, +22,169,12,249,22,172,11,248,22,158,7,250,22,177,7,2,37,2,11,23,200, +1,247,22,23,248,22,169,12,249,22,144,12,23,196,1,247,22,23,86,95,86, +94,28,28,248,22,155,14,194,10,28,248,22,129,7,194,28,248,22,177,14,194, +10,248,22,178,14,194,11,12,250,22,175,9,2,11,2,36,196,28,248,22,177, +14,194,12,248,22,169,12,249,22,172,11,248,22,158,7,250,22,177,7,2,37, +2,11,200,247,22,23,86,94,86,94,28,28,248,22,155,14,23,196,2,10,28, +248,22,129,7,23,196,2,28,248,22,177,14,23,196,2,10,248,22,178,14,23, +196,2,11,12,250,22,175,9,2,11,2,36,23,198,2,28,248,22,177,14,23, +196,2,12,248,22,169,12,249,22,172,11,248,22,158,7,250,22,177,7,2,37, +2,11,23,202,2,247,22,23,249,22,3,32,0,88,163,8,36,37,49,11,9, +222,33,73,23,198,2,249,22,173,14,252,80,158,43,44,2,11,32,0,88,163, +8,36,37,45,11,9,222,33,74,23,202,1,23,203,1,200,195,0,6,45,105, +110,102,46,48,27,248,22,131,15,2,38,27,28,248,22,178,14,23,195,2,193, +20,13,159,80,159,38,51,37,250,80,159,41,52,37,249,22,27,11,80,159,43, +51,37,22,132,15,248,22,131,15,68,111,114,105,103,45,100,105,114,27,248,22, +131,15,2,31,250,80,159,42,39,39,23,196,1,23,198,1,11,28,192,250,22, +173,14,195,6,6,6,99,111,110,102,105,103,6,10,10,108,105,110,107,115,46, +114,107,116,100,11,86,94,27,247,22,130,10,28,249,22,187,9,23,195,2,2, +39,251,22,190,9,23,197,1,2,39,250,22,177,7,2,40,28,23,202,1,80, +159,46,46,38,80,159,46,49,38,248,22,164,11,23,205,1,247,22,23,12,248, +193,247,22,133,2,2,76,86,95,27,247,22,130,10,28,249,22,187,9,23,195, +2,2,39,251,22,190,9,23,197,1,2,39,250,22,177,7,2,40,28,202,80, +159,47,46,38,80,159,47,49,38,248,22,164,11,23,206,1,247,22,23,12,28, +192,28,194,86,94,20,18,159,11,80,158,39,47,247,22,133,2,20,18,159,11, +80,158,39,48,192,86,94,20,18,159,11,80,158,39,53,247,22,133,2,20,18, +159,11,80,158,39,54,192,12,248,194,247,22,133,2,20,20,94,248,22,128,6, +23,194,2,28,248,22,188,6,248,22,128,6,23,195,1,12,248,22,172,9,6, +30,30,101,120,112,101,99,116,101,100,32,97,32,115,105,110,103,108,101,32,83, +45,101,120,112,114,101,115,115,105,111,110,248,22,180,5,193,28,248,22,82,23, +194,2,28,28,249,22,184,3,38,248,22,86,23,196,2,10,249,22,184,3,39, +248,22,86,23,196,2,28,28,248,22,129,7,248,22,74,23,195,2,10,249,22, +139,9,64,114,111,111,116,248,22,74,23,196,2,28,27,248,22,98,194,28,248, +22,155,14,23,194,2,10,28,248,22,129,7,23,194,2,28,248,22,177,14,23, +194,2,10,248,22,178,14,23,194,1,11,27,248,22,81,248,22,100,195,28,192, +192,248,22,156,15,248,22,107,195,11,11,11,11,250,22,151,2,196,197,249,22, +73,197,200,28,28,248,22,81,248,22,100,23,197,2,10,249,22,147,15,248,22, +107,23,198,2,247,22,147,8,27,248,22,182,14,249,22,180,14,248,22,98,23, +200,2,23,198,1,28,248,22,58,248,22,74,23,198,2,86,94,23,196,1,86, +94,28,250,22,153,2,196,11,11,12,250,22,151,2,196,11,9,249,22,157,2, +195,88,163,8,36,38,50,11,9,224,3,2,33,84,27,248,22,61,248,22,74, +23,199,1,250,22,151,2,23,198,2,23,196,2,249,22,73,248,22,125,23,200, +1,250,22,153,2,23,203,1,23,201,1,9,12,250,22,151,2,195,196,248,22, +88,198,20,13,159,80,159,37,56,37,88,163,36,37,54,8,128,144,9,225,1, +0,2,33,78,27,250,22,190,14,28,23,197,2,80,159,41,46,38,80,159,41, +49,38,11,32,0,88,163,8,36,36,41,11,9,222,33,79,28,249,22,186,3, +23,195,2,28,23,196,2,80,158,40,48,80,158,40,54,20,13,159,80,159,38, +56,37,20,20,94,88,163,36,37,55,8,240,0,60,6,0,9,226,2,1,3, +0,33,80,23,196,1,20,13,159,80,159,38,51,37,26,29,80,159,8,31,52, +37,249,22,27,11,80,159,8,33,51,37,22,189,13,10,22,190,13,10,22,191, +13,10,22,130,14,10,22,129,14,10,22,131,14,10,22,128,14,10,22,132,14, +10,22,133,14,10,22,134,14,10,22,135,14,10,22,136,14,10,22,137,14,11, +22,187,13,11,27,249,22,171,5,28,196,80,159,41,46,38,80,159,41,49,38, +66,98,105,110,97,114,121,27,250,22,40,22,31,88,163,8,36,36,44,11,9, +223,4,33,81,20,20,94,88,163,36,36,43,11,9,223,4,33,82,23,197,1, +86,94,28,28,248,22,82,23,194,2,249,22,4,32,0,88,163,8,36,37,45, +11,9,222,33,83,23,195,2,11,12,248,22,172,9,6,18,18,105,108,108,45, +102,111,114,109,101,100,32,99,111,110,116,101,110,116,27,247,22,133,2,27,90, +159,39,11,89,161,39,36,11,248,22,176,14,28,201,80,159,46,46,38,80,159, +46,49,38,192,86,96,249,22,3,20,20,94,88,163,8,36,37,54,11,9,224, +2,3,33,85,23,195,1,23,197,1,249,22,157,2,195,88,163,8,36,38,48, +11,9,223,3,33,86,28,197,86,94,20,18,159,11,80,158,42,47,193,20,18, +159,11,80,158,42,48,196,86,94,20,18,159,11,80,158,42,53,193,20,18,159, +11,80,158,42,54,196,193,28,193,80,158,38,47,80,158,38,53,248,22,8,88, +163,8,32,37,8,40,8,240,0,188,23,0,9,224,1,2,33,87,0,7,35, +114,120,34,47,43,34,28,248,22,129,7,23,195,2,27,249,22,145,15,2,89, +196,28,192,28,249,22,184,3,248,22,97,195,248,22,174,3,248,22,132,7,198, +249,22,7,250,22,151,7,199,36,248,22,97,198,197,249,22,7,250,22,151,7, +199,36,248,22,97,198,249,22,73,249,22,151,7,200,248,22,99,199,199,249,22, +7,196,197,90,159,39,11,89,161,39,36,11,248,22,176,14,23,198,1,86,94, +23,195,1,28,249,22,139,9,23,195,2,2,34,249,22,7,195,199,27,249,22, +73,23,197,1,23,201,1,28,248,22,129,7,23,195,2,27,249,22,145,15,2, +89,196,28,192,28,249,22,184,3,248,22,97,195,248,22,174,3,248,22,132,7, +198,249,22,7,250,22,151,7,199,36,248,22,97,198,195,249,22,7,250,22,151, +7,199,36,248,22,97,198,249,22,73,249,22,151,7,200,248,22,99,199,197,249, +22,7,196,195,90,159,39,11,89,161,39,36,11,248,22,176,14,23,198,1,28, +249,22,139,9,194,2,34,249,22,7,195,197,249,80,159,45,57,39,194,249,22, +73,197,199,32,91,88,163,36,44,8,36,11,65,99,108,111,111,112,222,33,96, +32,92,88,163,8,36,37,55,11,2,30,222,33,93,28,248,22,81,248,22,75, +23,195,2,248,22,83,27,248,22,74,23,196,1,28,248,22,155,14,23,194,2, +248,22,159,14,23,194,1,192,250,22,84,27,248,22,74,23,198,2,28,248,22, +155,14,23,194,2,248,22,159,14,23,194,1,192,2,42,27,248,22,75,23,198, +1,28,248,22,81,248,22,75,23,195,2,248,22,83,27,248,22,74,23,196,1, +28,248,22,155,14,23,194,2,248,22,159,14,23,194,1,192,250,22,84,27,248, +22,74,23,198,2,28,248,22,155,14,23,194,2,248,22,159,14,23,194,1,192, +2,42,27,248,22,75,23,198,1,28,248,22,81,248,22,75,23,195,2,248,22, +83,27,248,22,74,23,196,1,28,248,22,155,14,23,194,2,248,22,159,14,23, +194,1,192,250,22,84,27,248,22,74,23,198,2,28,248,22,155,14,23,194,2, +248,22,159,14,23,194,1,192,2,42,248,2,92,248,22,75,23,198,1,32,94, +88,163,8,36,38,57,11,66,102,105,108,116,101,114,222,33,95,28,248,22,81, +23,195,2,9,28,248,23,194,2,248,22,74,23,196,2,249,22,73,248,22,74, +23,197,2,27,248,22,75,23,198,1,28,248,22,81,23,194,2,9,28,248,23, +197,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75, +23,197,1,28,248,22,81,23,194,2,9,28,248,23,200,2,248,22,74,23,195, 2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22,81, -23,194,2,9,28,248,23,199,2,248,22,74,23,195,2,249,22,73,248,22,74, -23,196,2,249,2,96,23,202,1,248,22,75,23,198,1,249,2,96,23,200,1, +23,194,2,9,28,248,23,203,2,248,22,74,23,195,2,249,22,73,248,22,74, +23,196,2,249,2,94,23,206,1,248,22,75,23,198,1,249,2,94,23,204,1, 248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9, -28,248,23,197,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249, -2,96,23,200,1,248,22,75,23,198,1,249,2,96,197,248,22,75,195,28,248, -22,81,23,200,2,86,95,23,199,1,23,198,1,28,23,200,2,199,86,94,23, -200,1,27,28,248,22,81,23,197,2,6,0,0,249,22,1,22,152,7,248,2, -94,23,199,2,248,23,199,1,252,22,177,7,6,44,44,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,126,97,23,203,1,28, -248,22,81,23,203,1,28,248,22,154,14,23,202,2,248,22,158,14,23,202,1, -23,201,1,250,22,152,7,28,248,22,154,14,23,205,2,248,22,158,14,23,205, -1,23,204,1,6,1,1,47,23,202,2,28,248,22,81,23,201,2,9,28,248, -22,154,14,248,22,74,23,202,2,249,22,73,248,22,74,23,203,2,27,248,22, -75,23,204,2,28,248,22,81,23,194,2,9,28,248,22,154,14,248,22,74,23, -195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197,1,28,248,22, -81,23,194,2,9,28,248,22,154,14,248,22,74,23,195,2,249,22,73,248,22, -74,23,196,2,249,2,96,22,154,14,248,22,75,23,198,1,249,2,96,22,154, -14,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2, -9,28,248,22,154,14,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2, -249,2,96,22,154,14,248,22,75,23,198,1,249,2,96,22,154,14,248,22,75, -23,196,1,27,248,22,75,23,202,2,28,248,22,81,23,194,2,9,28,248,22, -154,14,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75, -23,197,1,28,248,22,81,23,194,2,9,28,248,22,154,14,248,22,74,23,195, -2,249,22,73,248,22,74,23,196,2,249,2,96,22,154,14,248,22,75,23,198, -1,249,2,96,22,154,14,248,22,75,23,196,1,27,248,22,75,23,195,1,28, -248,22,81,23,194,2,9,28,248,22,154,14,248,22,74,23,195,2,249,22,73, -248,22,74,23,196,2,249,2,96,22,154,14,248,22,75,23,198,1,249,2,96, -22,154,14,248,22,75,23,196,1,28,249,22,5,22,127,23,202,2,250,22,177, -7,6,21,21,32,111,114,58,32,126,115,32,105,110,32,97,110,121,32,111,102, -58,32,126,115,23,202,1,249,22,2,22,128,2,28,248,22,81,23,206,2,86, -94,23,205,1,9,28,248,22,127,248,22,74,23,207,2,249,22,73,248,22,74, -23,208,2,27,248,22,75,23,209,1,28,248,22,81,23,194,2,9,28,248,22, -127,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23, -197,1,28,248,22,81,23,194,2,9,28,248,22,127,248,22,74,23,195,2,249, -22,73,248,22,74,23,196,2,249,2,96,22,127,248,22,75,23,198,1,249,2, -96,22,127,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23, -194,2,9,28,248,22,127,248,22,74,23,195,2,249,22,73,248,22,74,23,196, -2,249,2,96,22,127,248,22,75,23,198,1,249,2,96,22,127,248,22,75,23, -196,1,27,248,22,75,23,207,1,28,248,22,81,23,194,2,9,28,248,22,127, +28,248,23,201,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249, +2,94,23,204,1,248,22,75,23,198,1,249,2,94,23,202,1,248,22,75,23, +196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,23,198, +2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23, +197,1,28,248,22,81,23,194,2,9,28,248,23,201,2,248,22,74,23,195,2, +249,22,73,248,22,74,23,196,2,249,2,94,23,204,1,248,22,75,23,198,1, +249,2,94,23,202,1,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248, +22,81,23,194,2,9,28,248,23,199,2,248,22,74,23,195,2,249,22,73,248, +22,74,23,196,2,249,2,94,23,202,1,248,22,75,23,198,1,249,2,94,23, +200,1,248,22,75,23,196,1,27,248,22,75,23,196,1,28,248,22,81,23,194, +2,9,28,248,23,195,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196, +2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,23,198,2, 248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248,22,75,23,197, -1,28,248,22,81,23,194,2,9,28,248,22,127,248,22,74,23,195,2,249,22, -73,248,22,74,23,196,2,249,2,96,22,127,248,22,75,23,198,1,249,2,96, -22,127,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194, -2,9,28,248,22,127,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2, -249,2,96,22,127,248,22,75,23,198,1,249,2,96,22,127,248,22,75,23,196, -1,86,94,23,199,1,6,0,0,27,248,22,74,23,201,2,27,28,248,22,154, -14,23,195,2,249,22,172,14,23,196,1,23,198,2,248,22,128,2,23,195,1, -28,28,248,22,154,14,248,22,74,23,203,2,248,22,167,14,23,194,2,10,27, -250,22,1,22,172,14,23,197,1,23,201,2,28,28,248,22,81,23,199,2,10, -248,22,167,14,23,194,2,28,23,201,2,28,28,248,22,166,14,249,22,172,14, -195,203,10,27,28,248,22,154,14,202,248,22,158,14,202,201,27,248,22,132,7, -23,195,2,27,28,249,22,188,3,23,196,2,40,28,249,22,135,7,6,4,4, -46,114,107,116,249,22,151,7,23,199,2,249,22,176,3,23,200,2,40,249,22, -152,7,250,22,151,7,23,200,1,36,249,22,176,3,23,201,1,40,6,3,3, -46,115,115,86,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,166,14, -249,22,172,14,198,23,196,1,11,192,26,8,2,93,203,204,205,206,23,15,23, -16,248,22,75,23,18,28,23,18,23,18,200,192,26,8,2,93,203,204,205,206, -23,15,23,16,248,22,75,23,18,23,18,26,8,2,93,202,203,204,205,206,23, -15,248,22,75,23,17,23,17,90,159,38,11,89,161,38,36,11,249,80,159,40, -57,39,23,200,1,23,201,1,27,248,22,61,28,248,22,154,14,195,248,22,158, -14,195,194,27,247,22,135,15,27,250,22,87,28,23,197,2,28,247,22,134,15, -27,248,80,159,46,55,39,10,27,250,22,153,2,23,197,2,23,203,2,11,28, -23,193,2,192,86,94,23,193,1,250,22,153,2,23,197,1,11,9,9,9,28, -23,197,1,28,80,159,44,49,38,27,248,80,159,46,55,39,11,27,250,22,153, -2,23,197,2,23,203,1,11,28,23,193,2,192,86,94,23,193,1,250,22,153, -2,23,197,1,11,9,86,94,23,198,1,9,9,247,22,132,15,26,8,2,93, -200,203,204,206,23,15,23,18,200,11,86,95,28,28,248,22,155,14,23,194,2, -10,28,248,22,154,14,23,194,2,10,28,248,22,129,7,23,194,2,28,248,22, -176,14,23,194,2,10,248,22,177,14,23,194,2,11,12,252,22,175,9,23,200, -2,2,42,36,23,198,2,23,199,2,28,28,248,22,129,7,23,195,2,10,248, -22,182,7,23,195,2,86,94,23,194,1,12,252,22,175,9,23,200,2,2,43, -37,23,198,2,23,199,1,90,159,39,11,89,161,39,36,11,248,22,175,14,23, -197,2,86,94,23,195,1,86,94,28,192,12,250,22,176,9,23,201,1,2,44, -23,199,1,249,22,7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28, -248,22,155,14,23,196,2,10,28,248,22,154,14,23,196,2,10,28,248,22,129, -7,23,196,2,28,248,22,176,14,23,196,2,10,248,22,177,14,23,196,2,11, -12,252,22,175,9,2,25,2,42,36,23,200,2,23,201,2,28,28,248,22,129, -7,23,197,2,10,248,22,182,7,23,197,2,12,252,22,175,9,2,25,2,43, -37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,248,22,175,14,23, -199,2,86,94,23,195,1,86,94,28,192,12,250,22,176,9,2,25,2,44,23, -201,2,249,22,7,194,195,27,249,22,164,14,250,22,153,15,0,20,35,114,120, -35,34,40,63,58,91,46,93,91,94,46,93,42,124,41,36,34,248,22,160,14, -23,201,1,28,248,22,129,7,23,203,2,249,22,144,8,23,204,1,8,63,23, -202,1,28,248,22,155,14,23,199,2,248,22,156,14,23,199,1,86,94,23,198, -1,247,22,157,14,28,248,22,154,14,194,249,22,172,14,195,194,192,90,159,38, -11,89,161,38,36,11,86,95,28,28,248,22,155,14,23,196,2,10,28,248,22, -154,14,23,196,2,10,28,248,22,129,7,23,196,2,28,248,22,176,14,23,196, -2,10,248,22,177,14,23,196,2,11,12,252,22,175,9,2,26,2,42,36,23, -200,2,23,201,2,28,28,248,22,129,7,23,197,2,10,248,22,182,7,23,197, -2,12,252,22,175,9,2,26,2,43,37,23,200,2,23,201,2,90,159,39,11, -89,161,39,36,11,248,22,175,14,23,199,2,86,94,23,195,1,86,94,28,192, -12,250,22,176,9,2,26,2,44,23,201,2,249,22,7,194,195,27,249,22,164, -14,249,22,130,8,250,22,154,15,0,9,35,114,120,35,34,91,46,93,34,248, -22,160,14,23,203,1,6,1,1,95,28,248,22,129,7,23,202,2,249,22,144, -8,23,203,1,8,63,23,201,1,28,248,22,155,14,23,199,2,248,22,156,14, -23,199,1,86,94,23,198,1,247,22,157,14,28,248,22,154,14,194,249,22,172, -14,195,194,192,249,247,22,160,5,194,11,27,247,22,134,15,249,80,159,39,40, -38,28,23,195,2,27,248,22,149,8,2,45,28,192,192,2,46,2,47,27,28, -23,196,1,250,22,172,14,248,22,130,15,2,48,247,22,147,8,2,49,11,27, -248,80,159,42,8,28,39,250,22,87,9,248,22,83,248,22,130,15,2,38,9, -28,193,249,22,73,195,194,192,27,247,22,134,15,249,80,159,39,40,38,28,23, -195,2,27,248,22,149,8,2,45,28,192,192,2,46,2,47,27,28,23,196,1, -250,22,172,14,248,22,130,15,2,48,247,22,147,8,2,49,11,27,248,80,159, -42,8,29,39,250,22,87,23,203,1,248,22,83,248,22,130,15,2,38,9,28, -193,249,22,73,195,194,192,27,247,22,134,15,249,80,159,39,40,38,28,23,195, -2,27,248,22,149,8,2,45,28,192,192,2,46,2,47,27,28,23,196,1,250, -22,172,14,248,22,130,15,2,48,247,22,147,8,2,49,11,27,248,80,159,42, -8,30,39,250,22,87,23,203,1,248,22,83,248,22,130,15,2,38,23,204,1, -28,193,249,22,73,195,194,192,86,94,249,22,182,6,247,22,156,5,195,248,22, -143,6,249,22,128,4,36,249,22,176,3,197,198,27,28,23,197,2,86,95,23, -196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,130,15,2,31,27, -250,80,159,42,39,39,23,197,1,11,11,27,248,22,131,4,23,199,1,27,28, -23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,131,4,23,202,1,27, -28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,187,5,23,199,1,20, -20,95,88,163,8,36,36,48,11,9,224,4,2,33,107,23,195,1,23,197,1, -27,248,22,172,5,23,195,1,248,80,159,39,8,31,39,193,159,36,20,112,159, -36,16,1,11,16,0,20,26,141,2,1,2,1,29,11,11,11,11,11,10,43, -80,158,36,36,20,112,159,40,16,28,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,18,76, -102,105,110,100,45,108,105,110,107,115,45,112,97,116,104,33,4,30,2,19,1, -20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121, -6,30,2,19,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,20,2,21,2,22,30,2,18,1,21,101, -120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,2, -2,23,2,24,2,25,2,26,2,27,2,28,2,29,16,0,37,39,36,16,0, -36,16,12,2,8,2,7,2,3,2,24,2,22,2,20,2,15,2,21,2,23, -2,13,2,12,2,14,48,11,11,11,16,12,2,11,2,9,2,29,2,10,2, -5,2,28,2,27,2,4,2,26,2,6,2,25,2,2,16,12,11,11,11,11, -11,11,11,11,11,11,11,11,16,12,2,11,2,9,2,29,2,10,2,5,2, -28,2,27,2,4,2,26,2,6,2,25,2,2,48,48,37,12,11,11,16,0, -16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,28,20, -15,16,2,88,163,8,36,37,51,16,2,8,240,0,128,0,0,8,240,1,128, -0,0,2,30,223,0,33,50,80,159,36,8,31,39,20,15,16,2,88,163,8, -36,37,56,16,2,44,8,240,0,64,0,0,2,30,223,0,33,51,80,159,36, -8,30,39,20,15,16,2,88,163,8,36,37,51,16,2,44,8,128,128,2,30, -223,0,33,52,80,159,36,8,29,39,20,15,16,2,88,163,8,36,37,51,16, -2,44,8,128,64,2,30,223,0,33,53,80,159,36,8,28,39,20,15,16,2, -32,0,88,163,36,37,45,11,2,2,222,33,54,80,159,36,36,37,20,15,16, -2,249,22,131,7,7,92,7,92,80,159,36,37,37,20,15,16,2,88,163,36, -37,54,38,2,4,223,0,33,55,80,159,36,38,37,20,15,16,2,20,25,96, -2,5,88,163,8,36,39,8,24,52,9,223,0,33,62,88,163,36,38,47,44, -9,223,0,33,63,88,163,36,37,46,44,9,223,0,33,64,80,159,36,39,37, -20,15,16,2,27,248,22,138,15,248,22,143,8,27,28,249,22,139,9,247,22, -151,8,2,32,6,1,1,59,6,1,1,58,250,22,177,7,6,14,14,40,91, -94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1,88,163,8, -36,38,48,11,2,6,223,0,33,68,80,159,36,40,37,20,15,16,2,32,0, -88,163,8,36,38,50,11,2,7,222,33,69,80,159,36,41,37,20,15,16,2, -32,0,88,163,8,36,39,51,11,2,8,222,33,71,80,159,36,42,37,20,15, -16,2,88,163,45,38,51,8,128,4,2,9,223,0,33,74,80,159,36,43,37, -20,15,16,2,88,163,45,39,52,8,128,4,2,11,223,0,33,77,80,159,36, -45,37,20,15,16,2,248,22,130,15,70,108,105,110,107,115,45,102,105,108,101, -80,159,36,46,37,20,15,16,2,247,22,133,2,80,158,36,47,20,15,16,2, -2,78,80,158,36,48,20,15,16,2,248,80,159,37,50,37,88,163,36,36,49, -8,240,8,128,1,0,9,223,1,33,79,80,159,36,49,37,20,15,16,2,247, -22,133,2,80,158,36,53,20,15,16,2,2,78,80,158,36,54,20,15,16,2, -88,163,36,37,44,8,240,0,188,23,0,2,22,223,0,33,90,80,159,36,55, -37,20,15,16,2,88,163,36,38,56,8,240,0,0,32,0,2,23,223,0,33, -92,80,159,36,57,37,20,15,16,2,88,163,36,41,8,24,8,240,0,32,40, -0,2,10,223,0,33,99,80,159,36,44,37,20,15,16,2,32,0,88,163,36, -39,50,11,2,24,222,33,100,80,159,36,58,37,20,15,16,2,32,0,88,163, -36,38,53,11,2,25,222,33,101,80,159,36,59,37,20,15,16,2,32,0,88, -163,36,38,54,11,2,26,222,33,102,80,159,36,8,24,37,20,15,16,2,32, -0,88,163,36,37,44,11,2,27,222,33,103,80,159,36,8,25,37,20,15,16, -2,20,25,96,2,28,88,163,36,36,53,16,2,52,8,128,64,9,223,0,33, -104,88,163,36,37,54,16,2,52,8,128,128,9,223,0,33,105,88,163,36,38, -55,16,2,52,8,240,0,64,0,0,9,223,0,33,106,80,159,36,8,26,37, -20,15,16,2,88,163,8,36,39,54,16,2,44,8,240,0,128,0,0,2,29, -223,0,33,108,80,159,36,8,27,37,95,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,2,18, -9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 10420); +1,28,248,22,81,23,194,2,9,28,248,23,201,2,248,22,74,23,195,2,249, +22,73,248,22,74,23,196,2,249,2,94,23,204,1,248,22,75,23,198,1,249, +2,94,23,202,1,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22, +81,23,194,2,9,28,248,23,199,2,248,22,74,23,195,2,249,22,73,248,22, +74,23,196,2,249,2,94,23,202,1,248,22,75,23,198,1,249,2,94,23,200, +1,248,22,75,23,196,1,27,248,22,75,23,195,1,28,248,22,81,23,194,2, +9,28,248,23,196,2,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2, +27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,23,199,2,248, +22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,23,202,1,248, +22,75,23,198,1,249,2,94,23,200,1,248,22,75,23,196,1,27,248,22,75, +23,195,1,28,248,22,81,23,194,2,9,28,248,23,197,2,248,22,74,23,195, +2,249,22,73,248,22,74,23,196,2,249,2,94,23,200,1,248,22,75,23,198, +1,249,2,94,197,248,22,75,195,28,248,22,81,23,200,2,86,95,23,199,1, +23,198,1,28,23,200,2,199,86,94,23,200,1,27,28,248,22,81,23,197,2, +2,41,249,22,1,22,152,7,248,2,92,23,199,2,248,23,199,1,252,22,177, +7,6,44,44,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,126,97,23,203,1,28,248,22,81,23,203,1,28,248,22,155,14, +23,202,2,248,22,159,14,23,202,1,23,201,1,250,22,152,7,28,248,22,155, +14,23,205,2,248,22,159,14,23,205,1,23,204,1,2,42,23,202,2,28,248, +22,81,23,201,2,9,28,248,22,155,14,248,22,74,23,202,2,249,22,73,248, +22,74,23,203,2,27,248,22,75,23,204,2,28,248,22,81,23,194,2,9,28, +248,22,155,14,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,27,248, +22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,22,155,14,248,22,74, +23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,22,155,14,248,22,75, +23,198,1,249,2,94,22,155,14,248,22,75,23,196,1,27,248,22,75,23,195, +1,28,248,22,81,23,194,2,9,28,248,22,155,14,248,22,74,23,195,2,249, +22,73,248,22,74,23,196,2,249,2,94,22,155,14,248,22,75,23,198,1,249, +2,94,22,155,14,248,22,75,23,196,1,27,248,22,75,23,202,2,28,248,22, +81,23,194,2,9,28,248,22,155,14,248,22,74,23,195,2,249,22,73,248,22, +74,23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248, +22,155,14,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94, +22,155,14,248,22,75,23,198,1,249,2,94,22,155,14,248,22,75,23,196,1, +27,248,22,75,23,195,1,28,248,22,81,23,194,2,9,28,248,22,155,14,248, +22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,22,155,14,248, +22,75,23,198,1,249,2,94,22,155,14,248,22,75,23,196,1,28,249,22,5, +22,127,23,202,2,250,22,177,7,6,21,21,32,111,114,58,32,126,115,32,105, +110,32,97,110,121,32,111,102,58,32,126,115,23,202,1,249,22,2,22,128,2, +28,248,22,81,23,206,2,86,94,23,205,1,9,28,248,22,127,248,22,74,23, +207,2,249,22,73,248,22,74,23,208,2,27,248,22,75,23,209,1,28,248,22, +81,23,194,2,9,28,248,22,127,248,22,74,23,195,2,249,22,73,248,22,74, +23,196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,22, +127,248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,22,127, +248,22,75,23,198,1,249,2,94,22,127,248,22,75,23,196,1,27,248,22,75, +23,195,1,28,248,22,81,23,194,2,9,28,248,22,127,248,22,74,23,195,2, +249,22,73,248,22,74,23,196,2,249,2,94,22,127,248,22,75,23,198,1,249, +2,94,22,127,248,22,75,23,196,1,27,248,22,75,23,207,1,28,248,22,81, +23,194,2,9,28,248,22,127,248,22,74,23,195,2,249,22,73,248,22,74,23, +196,2,27,248,22,75,23,197,1,28,248,22,81,23,194,2,9,28,248,22,127, +248,22,74,23,195,2,249,22,73,248,22,74,23,196,2,249,2,94,22,127,248, +22,75,23,198,1,249,2,94,22,127,248,22,75,23,196,1,27,248,22,75,23, +195,1,28,248,22,81,23,194,2,9,28,248,22,127,248,22,74,23,195,2,249, +22,73,248,22,74,23,196,2,249,2,94,22,127,248,22,75,23,198,1,249,2, +94,22,127,248,22,75,23,196,1,86,94,23,199,1,2,41,27,248,22,74,23, +201,2,27,28,248,22,155,14,23,195,2,249,22,173,14,23,196,1,23,198,2, +248,22,128,2,23,195,1,28,28,248,22,155,14,248,22,74,23,203,2,248,22, +168,14,23,194,2,10,27,250,22,1,22,173,14,23,197,1,23,201,2,28,28, +248,22,81,23,199,2,10,248,22,168,14,23,194,2,28,23,201,2,28,28,248, +22,167,14,249,22,173,14,195,203,10,27,28,248,22,155,14,202,248,22,159,14, +202,201,27,248,22,132,7,23,195,2,27,28,249,22,188,3,23,196,2,40,28, +249,22,135,7,6,4,4,46,114,107,116,249,22,151,7,23,199,2,249,22,176, +3,23,200,2,40,249,22,152,7,250,22,151,7,23,200,1,36,249,22,176,3, +23,201,1,40,6,3,3,46,115,115,86,95,23,195,1,23,194,1,11,11,28, +23,193,2,248,22,167,14,249,22,173,14,198,23,196,1,11,192,26,8,2,91, +203,204,205,206,23,15,23,16,248,22,75,23,18,28,23,18,23,18,200,192,26, +8,2,91,203,204,205,206,23,15,23,16,248,22,75,23,18,23,18,26,8,2, +91,202,203,204,205,206,23,15,248,22,75,23,17,23,17,90,159,38,11,89,161, +38,36,11,249,80,159,40,57,39,23,200,1,23,201,1,27,248,22,61,28,248, +22,155,14,195,248,22,159,14,195,194,27,247,22,136,15,27,250,22,87,28,23, +197,2,28,247,22,135,15,27,248,80,159,46,55,39,10,27,250,22,153,2,23, +197,2,23,203,2,11,28,23,193,2,192,86,94,23,193,1,250,22,153,2,23, +197,1,11,9,9,9,28,23,197,1,28,80,159,44,49,38,27,248,80,159,46, +55,39,11,27,250,22,153,2,23,197,2,23,203,1,11,28,23,193,2,192,86, +94,23,193,1,250,22,153,2,23,197,1,11,9,86,94,23,198,1,9,9,247, +22,133,15,26,8,2,91,200,203,204,206,23,15,23,18,200,11,86,95,28,28, +248,22,156,14,23,194,2,10,28,248,22,155,14,23,194,2,10,28,248,22,129, +7,23,194,2,28,248,22,177,14,23,194,2,10,248,22,178,14,23,194,2,11, +12,252,22,175,9,23,200,2,2,32,36,23,198,2,23,199,2,28,28,248,22, +129,7,23,195,2,10,248,22,182,7,23,195,2,86,94,23,194,1,12,252,22, +175,9,23,200,2,2,43,37,23,198,2,23,199,1,90,159,39,11,89,161,39, +36,11,248,22,176,14,23,197,2,86,94,23,195,1,86,94,28,192,12,250,22, +176,9,23,201,1,2,44,23,199,1,249,22,7,194,195,90,159,38,11,89,161, +38,36,11,86,95,28,28,248,22,156,14,23,196,2,10,28,248,22,155,14,23, +196,2,10,28,248,22,129,7,23,196,2,28,248,22,177,14,23,196,2,10,248, +22,178,14,23,196,2,11,12,252,22,175,9,2,25,2,32,36,23,200,2,23, +201,2,28,28,248,22,129,7,23,197,2,10,248,22,182,7,23,197,2,12,252, +22,175,9,2,25,2,43,37,23,200,2,23,201,2,90,159,39,11,89,161,39, +36,11,248,22,176,14,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22, +176,9,2,25,2,44,23,201,2,249,22,7,194,195,27,249,22,165,14,250,22, +154,15,0,20,35,114,120,35,34,40,63,58,91,46,93,91,94,46,93,42,124, +41,36,34,248,22,161,14,23,201,1,28,248,22,129,7,23,203,2,249,22,144, +8,23,204,1,8,63,23,202,1,28,248,22,156,14,23,199,2,248,22,157,14, +23,199,1,86,94,23,198,1,247,22,158,14,28,248,22,155,14,194,249,22,173, +14,195,194,192,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,156,14, +23,196,2,10,28,248,22,155,14,23,196,2,10,28,248,22,129,7,23,196,2, +28,248,22,177,14,23,196,2,10,248,22,178,14,23,196,2,11,12,252,22,175, +9,2,26,2,32,36,23,200,2,23,201,2,28,28,248,22,129,7,23,197,2, +10,248,22,182,7,23,197,2,12,252,22,175,9,2,26,2,43,37,23,200,2, +23,201,2,90,159,39,11,89,161,39,36,11,248,22,176,14,23,199,2,86,94, +23,195,1,86,94,28,192,12,250,22,176,9,2,26,2,44,23,201,2,249,22, +7,194,195,27,249,22,165,14,249,22,130,8,250,22,155,15,0,9,35,114,120, +35,34,91,46,93,34,248,22,161,14,23,203,1,6,1,1,95,28,248,22,129, +7,23,202,2,249,22,144,8,23,203,1,8,63,23,201,1,28,248,22,156,14, +23,199,2,248,22,157,14,23,199,1,86,94,23,198,1,247,22,158,14,28,248, +22,155,14,194,249,22,173,14,195,194,192,249,247,22,160,5,194,11,27,247,22, +135,15,249,80,159,39,40,38,28,23,195,2,27,248,22,149,8,2,45,28,192, +192,2,41,2,41,27,28,23,196,1,250,22,173,14,248,22,131,15,2,46,247, +22,147,8,2,47,11,27,248,80,159,42,8,28,39,250,22,87,9,248,22,83, +248,22,131,15,2,38,9,28,193,249,22,73,195,194,192,27,247,22,135,15,249, +80,159,39,40,38,28,23,195,2,27,248,22,149,8,2,45,28,192,192,2,41, +2,41,27,28,23,196,1,250,22,173,14,248,22,131,15,2,46,247,22,147,8, +2,47,11,27,248,80,159,42,8,29,39,250,22,87,23,203,1,248,22,83,248, +22,131,15,2,38,9,28,193,249,22,73,195,194,192,27,247,22,135,15,249,80, +159,39,40,38,28,23,195,2,27,248,22,149,8,2,45,28,192,192,2,41,2, +41,27,28,23,196,1,250,22,173,14,248,22,131,15,2,46,247,22,147,8,2, +47,11,27,248,80,159,42,8,30,39,250,22,87,23,203,1,248,22,83,248,22, +131,15,2,38,23,204,1,28,193,249,22,73,195,194,192,86,94,249,22,182,6, +247,22,156,5,195,248,22,143,6,249,22,128,4,36,249,22,176,3,197,198,27, +28,23,197,2,86,95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27, +248,22,131,15,2,31,27,250,80,159,42,39,39,23,197,1,11,11,27,248,22, +131,4,23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248, +22,131,4,23,202,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,249, +22,187,5,23,199,1,20,20,95,88,163,8,36,36,48,11,9,224,4,2,33, +105,23,195,1,23,197,1,27,248,22,172,5,23,195,1,248,80,159,39,8,31, +39,193,159,36,20,112,159,36,16,1,11,16,0,20,26,141,2,1,2,1,29, +11,11,11,11,11,10,43,80,158,36,36,20,112,159,40,16,28,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,18,76,102,105,110,100,45,108,105,110,107,115,45,112,97,116, +104,33,4,30,2,19,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116, +105,111,110,45,107,101,121,6,30,2,19,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,20,2,21,2, +22,30,2,18,1,21,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108, +101,114,45,107,101,121,2,2,23,2,24,2,25,2,26,2,27,2,28,2,29, +16,0,37,39,36,16,0,36,16,12,2,8,2,7,2,3,2,24,2,22,2, +20,2,15,2,21,2,23,2,13,2,12,2,14,48,11,11,11,16,12,2,11, +2,9,2,29,2,10,2,5,2,28,2,27,2,4,2,26,2,6,2,25,2, +2,16,12,11,11,11,11,11,11,11,11,11,11,11,11,16,12,2,11,2,9, +2,29,2,10,2,5,2,28,2,27,2,4,2,26,2,6,2,25,2,2,48, +48,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0, +16,0,36,36,16,28,20,15,16,2,88,163,8,36,37,51,16,2,8,240,0, +128,0,0,8,240,1,128,0,0,2,30,223,0,33,48,80,159,36,8,31,39, +20,15,16,2,88,163,8,36,37,56,16,2,44,8,240,0,64,0,0,2,30, +223,0,33,49,80,159,36,8,30,39,20,15,16,2,88,163,8,36,37,51,16, +2,44,8,128,128,2,30,223,0,33,50,80,159,36,8,29,39,20,15,16,2, +88,163,8,36,37,51,16,2,44,8,128,64,2,30,223,0,33,51,80,159,36, +8,28,39,20,15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,52,80, +159,36,36,37,20,15,16,2,249,22,131,7,7,92,7,92,80,159,36,37,37, +20,15,16,2,88,163,36,37,54,38,2,4,223,0,33,53,80,159,36,38,37, +20,15,16,2,20,25,96,2,5,88,163,8,36,39,8,24,52,9,223,0,33, +60,88,163,36,38,47,44,9,223,0,33,61,88,163,36,37,46,44,9,223,0, +33,62,80,159,36,39,37,20,15,16,2,27,248,22,139,15,248,22,143,8,27, +28,249,22,139,9,247,22,151,8,2,33,6,1,1,59,6,1,1,58,250,22, +177,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196, +2,23,196,1,88,163,8,36,38,48,11,2,6,223,0,33,66,80,159,36,40, +37,20,15,16,2,32,0,88,163,8,36,38,50,11,2,7,222,33,67,80,159, +36,41,37,20,15,16,2,32,0,88,163,8,36,39,51,11,2,8,222,33,69, +80,159,36,42,37,20,15,16,2,88,163,45,38,51,8,128,4,2,9,223,0, +33,72,80,159,36,43,37,20,15,16,2,88,163,45,39,52,8,128,4,2,11, +223,0,33,75,80,159,36,45,37,20,15,16,2,248,22,131,15,70,108,105,110, +107,115,45,102,105,108,101,80,159,36,46,37,20,15,16,2,247,22,133,2,80, +158,36,47,20,15,16,2,2,76,80,158,36,48,20,15,16,2,248,80,159,37, +50,37,88,163,36,36,49,8,240,8,128,1,0,9,223,1,33,77,80,159,36, +49,37,20,15,16,2,247,22,133,2,80,158,36,53,20,15,16,2,2,76,80, +158,36,54,20,15,16,2,88,163,36,37,44,8,240,0,188,23,0,2,22,223, +0,33,88,80,159,36,55,37,20,15,16,2,88,163,36,38,56,8,240,0,0, +32,0,2,23,223,0,33,90,80,159,36,57,37,20,15,16,2,88,163,36,41, +8,24,8,240,0,32,40,0,2,10,223,0,33,97,80,159,36,44,37,20,15, +16,2,32,0,88,163,36,39,50,11,2,24,222,33,98,80,159,36,58,37,20, +15,16,2,32,0,88,163,36,38,53,11,2,25,222,33,99,80,159,36,59,37, +20,15,16,2,32,0,88,163,36,38,54,11,2,26,222,33,100,80,159,36,8, +24,37,20,15,16,2,32,0,88,163,36,37,44,11,2,27,222,33,101,80,159, +36,8,25,37,20,15,16,2,20,25,96,2,28,88,163,36,36,53,16,2,52, +8,128,64,9,223,0,33,102,88,163,36,37,54,16,2,52,8,128,128,9,223, +0,33,103,88,163,36,38,55,16,2,52,8,240,0,64,0,0,9,223,0,33, +104,80,159,36,8,26,37,20,15,16,2,88,163,8,36,39,54,16,2,44,8, +240,0,128,0,0,2,29,223,0,33,106,80,159,36,8,27,37,95,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,2,18,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 10364); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,51,0,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,52,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40,0,57, 0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0,175,1, 0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23,115,116, @@ -626,304 +623,303 @@ EVAL_ONE_SIZED_STR((char *)expr, 496); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,51,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,65,0,0,0,1,0,0,7,0,18,0,45, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,52,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,69,0,0,0,1,0,0,7,0,18,0,45, 0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,158,0,170,0,185,0, 201,0,219,0,239,0,251,0,11,1,34,1,46,1,77,1,84,1,89,1,94, -1,99,1,104,1,109,1,118,1,123,1,127,1,135,1,144,1,152,1,213,1, -60,2,81,2,102,2,132,2,162,2,220,2,22,3,71,3,120,3,54,9,105, -9,168,9,187,9,201,9,103,10,116,10,250,10,36,12,159,12,165,12,179,12, -206,12,226,12,30,13,117,13,119,13,194,13,199,19,252,19,20,20,0,0,109, -23,0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120, -1,25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111, -109,112,105,108,101,100,65,113,117,111,116,101,29,94,2,4,67,35,37,117,116, -105,108,115,11,68,35,37,112,97,114,97,109,122,29,94,2,4,2,6,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,67,67,65,67,72,69,45,78,71,45,112,97,116,104,45, -99,97,99,104,101,74,112,97,116,104,45,99,97,99,104,101,45,103,101,116,75, -112,97,116,104,45,99,97,99,104,101,45,115,101,116,33,77,45,108,111,97,100, -105,110,103,45,102,105,108,101,110,97,109,101,79,45,108,111,97,100,105,110,103, -45,112,114,111,109,112,116,45,116,97,103,71,45,112,114,101,118,45,114,101,108, -116,111,75,45,112,114,101,118,45,114,101,108,116,111,45,100,105,114,1,21,115, -112,108,105,116,45,114,101,108,97,116,105,118,101,45,115,116,114,105,110,103,71, -111,114,105,103,45,112,97,114,97,109,122,1,29,115,116,97,110,100,97,114,100, -45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114, -29,94,2,4,2,6,11,64,98,111,111,116,64,115,101,97,108,64,115,97,109, -101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,101,64, -108,111,111,112,63,108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80, -159,38,49,38,249,80,159,38,52,39,195,10,90,159,39,11,89,161,39,36,11, -248,22,175,14,197,86,95,23,195,1,23,193,1,28,249,22,142,15,0,11,35, -114,120,34,91,46,93,115,115,36,34,248,22,159,14,23,197,1,249,80,159,41, -56,39,198,5,4,46,114,107,116,196,27,28,23,195,2,28,249,22,139,9,23, -197,2,80,158,39,50,86,94,23,195,1,80,158,37,51,27,248,22,138,5,23, -197,2,28,248,22,154,14,23,194,2,90,159,39,11,89,161,39,36,11,248,22, -175,14,23,197,1,86,95,20,18,159,11,80,158,41,50,198,20,18,159,11,80, -158,41,51,192,192,11,11,28,23,193,2,192,86,94,23,193,1,27,247,22,161, -5,28,192,192,247,22,131,15,250,22,172,14,23,197,1,23,199,1,249,80,159, -43,39,39,23,198,1,2,26,250,22,172,14,23,197,1,23,199,1,249,80,159, -43,39,39,23,198,1,2,27,252,22,172,14,23,199,1,23,201,1,2,28,247, -22,152,8,249,80,159,45,39,39,23,200,1,80,159,45,36,38,252,22,172,14, -23,199,1,23,201,1,2,28,247,22,152,8,249,80,159,45,39,39,23,200,1, -80,159,45,36,38,27,252,22,172,14,23,200,1,23,202,1,2,28,247,22,152, -8,249,80,159,46,39,39,23,201,1,80,159,46,36,38,27,250,22,189,14,196, +1,100,1,105,1,110,1,119,1,124,1,128,1,139,1,146,1,149,1,157,1, +166,1,174,1,231,1,78,2,99,2,120,2,150,2,180,2,238,2,40,3,89, +3,138,3,68,9,119,9,182,9,201,9,215,9,117,10,130,10,8,11,50,12, +173,12,179,12,193,12,220,12,240,12,39,13,49,13,136,13,138,13,213,13,172, +19,225,19,249,19,0,0,82,23,0,0,66,35,37,98,111,111,116,70,100,108, +108,45,115,117,102,102,105,120,1,25,100,101,102,97,117,108,116,45,108,111,97, +100,47,117,115,101,45,99,111,109,112,105,108,101,100,65,113,117,111,116,101,29, +94,2,4,67,35,37,117,116,105,108,115,11,68,35,37,112,97,114,97,109,122, +29,94,2,4,2,6,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,67,67,65,67,72,69,45, +78,71,45,112,97,116,104,45,99,97,99,104,101,74,112,97,116,104,45,99,97, +99,104,101,45,103,101,116,75,112,97,116,104,45,99,97,99,104,101,45,115,101, +116,33,77,45,108,111,97,100,105,110,103,45,102,105,108,101,110,97,109,101,79, +45,108,111,97,100,105,110,103,45,112,114,111,109,112,116,45,116,97,103,71,45, +112,114,101,118,45,114,101,108,116,111,75,45,112,114,101,118,45,114,101,108,116, +111,45,100,105,114,1,21,115,112,108,105,116,45,114,101,108,97,116,105,118,101, +45,115,116,114,105,110,103,71,111,114,105,103,45,112,97,114,97,109,122,1,29, +115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45, +114,101,115,111,108,118,101,114,29,94,2,4,2,6,11,64,98,111,111,116,64, +115,101,97,108,5,4,46,114,107,116,64,115,97,109,101,5,3,46,122,111,6, +6,6,110,97,116,105,118,101,64,108,111,111,112,63,108,105,98,6,8,8,109, +97,105,110,46,114,107,116,6,4,4,46,114,107,116,6,0,0,67,105,103,110, +111,114,101,100,249,22,14,195,80,159,38,49,38,249,80,159,38,52,39,195,10, +90,159,39,11,89,161,39,36,11,248,22,176,14,197,86,95,23,195,1,23,193, +1,28,249,22,143,15,0,11,35,114,120,34,91,46,93,115,115,36,34,248,22, +160,14,23,197,1,249,80,159,41,56,39,198,2,25,196,27,28,23,195,2,28, +249,22,139,9,23,197,2,80,158,39,50,86,94,23,195,1,80,158,37,51,27, +248,22,138,5,23,197,2,28,248,22,155,14,23,194,2,90,159,39,11,89,161, +39,36,11,248,22,176,14,23,197,1,86,95,20,18,159,11,80,158,41,50,198, +20,18,159,11,80,158,41,51,192,192,11,11,28,23,193,2,192,86,94,23,193, +1,27,247,22,161,5,28,192,192,247,22,132,15,250,22,173,14,23,197,1,23, +199,1,249,80,159,43,39,39,23,198,1,2,27,250,22,173,14,23,197,1,23, +199,1,249,80,159,43,39,39,23,198,1,2,27,252,22,173,14,23,199,1,23, +201,1,2,28,247,22,152,8,249,80,159,45,39,39,23,200,1,80,159,45,36, +38,252,22,173,14,23,199,1,23,201,1,2,28,247,22,152,8,249,80,159,45, +39,39,23,200,1,80,159,45,36,38,27,252,22,173,14,23,200,1,23,202,1, +2,28,247,22,152,8,249,80,159,46,39,39,23,201,1,80,159,46,36,38,27, +250,22,190,14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, +22,73,195,194,11,27,252,22,173,14,23,200,1,23,202,1,2,28,247,22,152, +8,249,80,159,46,39,39,23,201,1,80,159,46,36,38,27,250,22,190,14,196, 11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11, -27,252,22,172,14,23,200,1,23,202,1,2,28,247,22,152,8,249,80,159,46, -39,39,23,201,1,80,159,46,36,38,27,250,22,189,14,196,11,32,0,88,163, -8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,250,22,172,14, -23,198,1,23,200,1,249,80,159,44,39,39,23,199,1,2,26,27,250,22,189, -14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195, -194,11,27,250,22,172,14,23,198,1,23,200,1,249,80,159,44,39,39,23,199, -1,2,27,27,250,22,189,14,196,11,32,0,88,163,8,36,36,41,11,9,222, -11,28,192,249,22,73,195,194,11,86,94,28,248,80,159,37,38,39,23,195,2, -12,250,22,175,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,90,159,46,11,89,161,37,36,11, -28,248,22,178,14,23,205,2,23,204,2,27,247,22,161,5,28,23,193,2,249, -22,179,14,23,207,2,23,195,1,23,205,2,89,161,39,37,11,248,22,175,14, -23,205,1,86,94,23,196,1,89,161,38,40,11,28,23,205,2,27,248,22,159, -14,23,197,2,27,248,22,187,7,23,195,2,28,28,249,22,188,3,23,195,2, -40,249,22,190,7,5,4,46,114,107,116,249,22,129,8,23,198,2,249,22,176, -3,23,199,2,40,11,249,22,7,23,199,2,248,22,163,14,249,22,130,8,250, -22,129,8,23,202,1,36,249,22,176,3,23,203,1,40,5,3,46,115,115,249, -22,7,23,199,2,11,249,22,7,23,197,2,11,89,161,37,42,11,28,249,22, -139,9,23,199,2,23,197,2,23,193,2,249,22,172,14,23,196,2,23,199,2, -89,161,37,43,11,28,23,198,2,28,249,22,139,9,23,200,2,23,197,1,23, -193,1,86,94,23,193,1,249,22,172,14,23,196,2,23,200,2,86,94,23,195, -1,11,89,161,37,44,11,28,249,22,139,9,23,196,2,68,114,101,108,97,116, -105,118,101,86,94,23,194,1,2,25,23,194,1,89,161,37,45,11,247,22,133, -15,27,250,22,189,14,23,203,2,11,32,0,88,163,8,36,36,41,11,9,222, -11,27,28,23,194,2,249,22,73,23,203,2,23,196,1,86,94,23,194,1,11, -27,28,23,203,2,28,23,194,2,11,27,250,22,189,14,23,207,2,11,32,0, -88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,23,206,2,194,11,11, -27,28,23,195,2,23,195,2,23,194,2,27,88,163,36,37,50,44,62,122,111, -225,15,13,9,33,36,27,88,163,36,37,50,44,66,97,108,116,45,122,111,225, -16,14,11,33,37,27,88,163,36,37,52,45,9,225,17,15,11,33,38,27,88, -163,36,37,52,45,9,225,18,16,13,33,39,27,28,23,200,2,23,200,2,248, -22,137,9,23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23, -200,2,248,22,137,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249, -22,5,88,163,8,36,37,53,45,9,225,24,22,18,33,40,23,216,2,27,28, -23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,188,3,248,22, -75,196,248,22,75,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23, -193,2,86,105,23,213,1,23,211,1,23,210,1,23,209,1,23,208,1,23,201, -1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,13, -159,80,159,57,40,37,250,80,159,8,24,41,37,249,22,27,11,80,159,8,26, -40,37,22,181,4,11,20,13,159,80,159,57,40,37,250,80,159,8,24,41,37, -249,22,27,11,80,159,8,26,40,37,22,161,5,28,248,22,154,14,23,216,2, -23,215,1,86,94,23,215,1,247,22,131,15,249,247,22,137,15,248,22,74,195, -23,25,86,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,88, -163,8,36,37,53,45,9,225,25,23,20,33,41,23,217,2,27,28,23,204,2, -11,193,28,192,192,28,193,28,203,28,249,22,188,3,248,22,75,196,248,22,75, -206,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214,1, -23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196,1, -23,195,1,20,13,159,80,159,58,40,37,250,80,159,8,25,41,37,249,22,27, -11,80,159,8,27,40,37,22,181,4,23,215,1,20,13,159,80,159,58,40,37, -250,80,159,8,25,41,37,249,22,27,11,80,159,8,27,40,37,22,161,5,28, -248,22,154,14,23,217,2,23,216,1,86,94,23,216,1,247,22,131,15,249,247, -22,137,15,248,22,74,195,23,26,86,94,23,193,1,27,28,23,197,2,28,23, -201,1,27,249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,26,24,20, -33,42,23,213,1,23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28, -23,204,2,28,249,22,188,3,248,22,75,196,248,22,75,23,207,2,193,11,11, -11,86,94,23,210,1,11,86,94,23,201,1,11,28,23,193,2,86,101,23,215, -1,23,213,1,23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23,196, -1,20,13,159,80,159,59,40,37,250,80,159,8,26,41,37,249,22,27,11,80, -159,8,28,40,37,22,181,4,11,20,13,159,80,159,59,40,37,250,80,159,8, -26,41,37,249,22,27,11,80,159,8,28,40,37,22,161,5,28,248,22,154,14, -23,218,2,23,217,1,86,94,23,217,1,247,22,131,15,249,247,22,159,5,248, -22,74,195,23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249, -22,5,20,20,94,88,163,8,36,37,51,44,9,225,27,25,22,33,43,23,215, -1,23,219,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22, -188,3,248,22,75,196,248,22,75,23,15,193,11,11,11,86,95,23,216,1,23, -212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23,213,1,23,198,1, -20,13,159,80,159,8,24,40,37,250,80,159,8,27,41,37,249,22,27,11,80, -159,8,29,40,37,22,181,4,23,217,1,20,13,159,80,159,8,24,40,37,250, -80,159,8,27,41,37,249,22,27,11,80,159,8,29,40,37,22,161,5,28,248, -22,154,14,23,219,2,23,218,1,86,94,23,218,1,247,22,131,15,249,247,22, -159,5,248,22,74,195,23,28,86,94,23,193,1,27,28,23,199,2,86,94,23, -215,1,23,214,1,86,94,23,214,1,23,215,1,20,13,159,80,159,8,25,40, -37,250,80,159,8,28,41,37,249,22,27,11,80,159,8,30,40,37,22,181,4, -28,23,30,28,23,202,1,11,195,86,94,23,202,1,11,20,13,159,80,159,8, -25,40,37,250,80,159,8,28,41,37,249,22,27,11,80,159,8,30,40,37,22, -161,5,28,248,22,154,14,23,220,2,23,219,1,86,94,23,219,1,247,22,131, -15,249,247,22,159,5,194,23,29,27,249,22,159,8,80,159,39,45,38,249,22, -183,3,248,22,179,3,248,22,166,2,200,8,128,8,27,28,193,248,22,169,2, -194,11,28,192,27,249,22,96,198,195,28,192,248,22,75,193,11,11,27,249,22, -183,3,248,22,179,3,248,22,166,2,198,8,128,8,27,249,22,159,8,80,159, -40,45,38,195,27,28,193,248,22,169,2,194,11,250,22,160,8,80,159,42,45, -38,197,248,22,168,2,249,22,73,249,22,73,204,205,28,198,198,9,0,17,35, -114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,48,88,163,8, -36,37,59,11,2,29,222,33,49,27,249,22,142,15,2,47,23,196,2,28,23, -193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23, -197,1,27,249,22,142,15,2,47,23,196,2,28,23,193,2,86,94,23,194,1, -249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,142,15, -2,47,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23, -196,2,27,248,22,107,23,197,1,27,249,22,142,15,2,47,23,196,2,28,23, -193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,248,2,48,248,22, -107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,194,248,22,83,194,32, -50,88,163,36,37,55,11,2,29,222,33,51,28,248,22,81,248,22,75,23,195, -2,249,22,7,9,248,22,74,195,90,159,38,11,89,161,38,36,11,27,248,22, -75,196,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,90, -159,38,11,89,161,38,36,11,27,248,22,75,196,28,248,22,81,248,22,75,23, -195,2,249,22,7,9,248,22,74,195,90,159,38,11,89,161,38,36,11,248,2, -50,248,22,75,196,249,22,7,249,22,73,248,22,74,199,196,195,249,22,7,249, -22,73,248,22,74,199,196,195,249,22,7,249,22,73,248,22,74,199,196,195,27, -27,249,22,142,15,2,47,23,197,2,28,23,193,2,86,94,23,195,1,249,22, -73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,142,15,2,47, -23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2, -27,248,22,107,23,197,1,27,249,22,142,15,2,47,23,196,2,28,23,193,2, -86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1, -27,249,22,142,15,2,47,23,196,2,28,23,193,2,86,94,23,194,1,249,22, -73,248,22,98,23,196,2,248,2,48,248,22,107,23,197,1,248,22,83,194,248, -22,83,194,248,22,83,194,248,22,83,195,28,23,195,1,192,28,248,22,81,248, -22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38, -11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248, -22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81, -248,22,75,23,197,2,249,22,7,9,248,22,74,197,90,159,38,11,89,161,38, -36,11,248,2,50,248,22,75,198,249,22,7,249,22,73,248,22,74,201,196,195, -249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74, -200,196,195,86,95,28,248,22,136,5,195,12,250,22,175,9,2,21,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,86,94,23,193,1,12,27,250,22,153,2,80, -159,41,43,38,248,22,167,15,247,22,133,13,11,27,28,23,194,2,193,86,94, -23,194,1,27,247,22,133,2,86,94,250,22,151,2,80,159,43,43,38,248,22, -167,15,247,22,133,13,195,192,250,22,151,2,195,199,66,97,116,116,97,99,104, -251,211,197,198,199,10,28,192,250,22,174,9,11,196,195,248,22,172,9,194,28, -249,22,135,7,194,6,1,1,46,2,25,28,249,22,135,7,194,6,2,2,46, -46,62,117,112,192,32,57,88,163,8,36,37,50,11,67,115,115,45,62,114,107, -116,222,33,58,27,248,22,132,7,194,28,249,22,188,3,194,39,28,249,22,135, -7,6,3,3,46,115,115,249,22,151,7,197,249,22,176,3,198,39,249,22,152, -7,250,22,151,7,198,36,249,22,176,3,199,39,6,4,4,46,114,107,116,193, -193,28,249,22,141,9,248,22,75,23,200,2,23,197,1,28,249,22,139,9,248, -22,74,23,200,2,23,196,1,251,22,172,9,2,21,6,28,28,99,121,99,108, -101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,46,115,58,32, -126,46,115,23,200,1,249,22,2,22,75,248,22,88,249,22,73,23,206,1,23, -202,1,12,12,247,192,20,13,159,80,159,41,48,38,249,22,73,249,22,73,248, -22,167,15,247,22,133,13,23,200,1,23,195,1,20,13,159,80,159,41,40,37, -250,80,159,44,41,37,249,22,27,11,80,159,46,40,37,22,180,4,23,197,1, -249,247,22,160,5,23,199,1,248,22,61,248,22,158,14,23,199,1,86,94,28, -28,248,22,154,14,23,196,2,10,248,22,145,5,23,196,2,12,28,23,197,2, -250,22,174,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,175,9,2,21,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,71,23, -196,2,249,22,139,9,248,22,74,23,198,2,2,4,11,248,22,137,5,248,22, -98,196,28,28,248,22,71,23,196,2,249,22,139,9,248,22,74,23,198,2,66, -112,108,97,110,101,116,11,86,94,28,207,12,20,13,159,80,159,37,55,37,80, -158,37,53,89,161,37,36,10,249,22,182,4,21,94,2,30,6,19,19,112,108, -97,110,101,116,47,114,101,115,111,108,118,101,114,46,114,107,116,1,27,112,108, -97,110,101,116,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111, -108,118,101,114,12,252,212,199,200,201,202,80,158,42,53,86,94,23,193,1,27, -88,163,8,36,37,46,11,79,115,104,111,119,45,99,111,108,108,101,99,116,105, -111,110,45,101,114,114,223,5,33,55,27,28,248,22,58,23,198,2,27,248,80, -159,41,46,39,249,22,73,23,201,2,247,22,132,15,28,23,193,2,192,86,94, -23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,44,52,39,248,22,64, -23,203,2,11,27,28,248,22,81,23,195,2,6,8,8,109,97,105,110,46,114, -107,116,249,22,152,7,23,197,2,6,4,4,46,114,107,116,27,252,80,159,49, -57,39,2,21,23,204,1,28,248,22,81,23,201,2,23,201,1,86,94,23,201, -1,248,22,74,23,201,2,28,248,22,81,23,201,2,86,94,23,200,1,9,248, -22,75,23,201,1,23,199,2,249,22,172,14,23,195,1,23,196,1,28,248,22, -129,7,23,198,2,86,94,23,194,1,27,248,80,159,41,8,26,39,23,200,2, -27,248,80,159,42,46,39,249,22,73,23,202,2,23,197,2,28,23,193,2,192, -86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,45,52,39,23, -203,2,11,250,22,1,22,172,14,23,199,1,249,22,87,249,22,2,32,0,88, -163,8,36,37,44,11,9,222,33,56,23,200,1,248,22,83,248,2,57,23,201, -1,28,248,22,154,14,23,198,2,86,94,23,194,1,28,248,22,177,14,23,198, -2,248,80,159,40,8,27,39,248,22,181,14,23,199,2,248,22,83,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,139,9,248,22,74,23,200,2,2,30,27,248,80, -159,41,46,39,249,22,73,23,201,2,247,22,132,15,28,23,193,2,192,86,94, -23,193,1,90,159,39,11,89,161,38,36,11,249,80,159,45,52,39,248,22,98, -23,204,2,11,89,161,37,38,11,28,248,22,81,248,22,100,23,203,2,28,248, -22,81,23,194,2,249,22,146,15,0,8,35,114,120,34,91,46,93,34,23,196, -2,11,10,27,28,23,196,2,248,2,57,23,196,2,28,248,22,81,23,195,2, -6,8,8,109,97,105,110,46,114,107,116,28,249,22,146,15,0,8,35,114,120, -34,91,46,93,34,23,197,2,248,2,57,23,196,2,249,22,152,7,23,197,2, -6,4,4,46,114,107,116,27,28,23,197,1,86,94,23,196,1,249,22,87,28, -248,22,81,248,22,100,23,207,2,21,93,6,5,5,109,122,108,105,98,249,22, -1,22,87,249,22,2,80,159,51,8,28,39,248,22,100,23,210,2,23,197,1, -28,248,22,81,23,196,2,86,94,23,195,1,248,22,83,23,197,1,86,94,23, -196,1,23,195,1,27,252,80,159,51,57,39,2,21,23,206,1,248,22,74,23, -200,2,248,22,75,23,200,1,23,200,2,249,22,172,14,23,195,1,23,197,1, -28,249,22,139,9,248,22,74,23,200,2,64,102,105,108,101,248,80,159,40,8, -27,39,248,22,181,14,249,22,179,14,248,22,183,14,248,22,98,23,203,2,248, -80,159,44,8,26,39,23,203,2,12,86,94,28,28,248,22,154,14,23,194,2, -10,248,22,154,8,23,194,2,86,94,23,199,1,12,28,23,199,2,250,22,174, -9,67,114,101,113,117,105,114,101,249,22,177,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,74,23,199, -2,6,0,0,23,202,1,86,94,23,199,1,250,22,175,9,2,21,249,22,177, -7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2, -248,22,74,23,199,2,6,0,0,23,200,2,27,28,248,22,154,8,23,195,2, -249,22,159,8,23,196,2,36,249,22,181,14,248,22,182,14,23,197,2,11,27, -28,248,22,154,8,23,196,2,249,22,159,8,23,197,2,37,248,80,159,42,58, -39,23,195,2,90,159,39,11,89,161,39,36,11,28,248,22,154,8,23,199,2, -250,22,7,2,31,249,22,159,8,23,203,2,38,2,31,248,22,175,14,23,198, -2,86,95,23,195,1,23,193,1,27,28,248,22,154,8,23,200,2,249,22,159, -8,23,201,2,39,249,80,159,47,56,39,23,197,2,5,0,27,28,248,22,154, -8,23,201,2,249,22,159,8,23,202,2,40,248,22,137,5,23,200,2,27,27, -250,22,153,2,80,159,51,43,38,248,22,167,15,247,22,133,13,11,28,23,193, -2,192,86,94,23,193,1,27,247,22,133,2,86,94,250,22,151,2,80,159,52, -43,38,248,22,167,15,247,22,133,13,195,192,86,95,28,23,208,1,27,250,22, -153,2,23,197,2,197,11,28,23,193,1,12,86,94,27,27,28,248,22,17,80, -159,51,49,38,80,159,50,49,38,247,22,19,251,22,27,11,80,159,54,48,38, -9,23,197,1,27,248,22,167,15,247,22,133,13,86,94,249,22,3,20,20,94, -88,163,8,36,37,55,11,9,226,12,11,2,3,33,59,23,195,1,23,196,2, -248,28,248,22,17,80,159,52,49,38,32,0,88,163,36,37,42,11,9,222,33, -60,80,159,51,8,29,39,20,20,94,88,163,36,36,52,8,176,64,9,228,15, -11,10,6,5,2,33,61,23,195,1,250,22,151,2,23,197,1,197,10,12,28, -28,248,22,154,8,23,202,1,11,28,248,22,129,7,23,206,2,10,28,248,22, -58,23,206,2,10,28,248,22,71,23,206,2,249,22,139,9,248,22,74,23,208, -2,2,30,11,249,80,159,49,47,39,28,248,22,129,7,23,208,2,249,22,73, -23,209,1,248,80,159,52,8,26,39,23,211,1,86,94,23,208,1,249,22,73, -23,209,1,247,22,132,15,252,22,156,8,23,207,1,23,206,1,23,204,1,23, -202,1,200,12,193,86,96,20,18,159,11,80,158,36,53,248,80,159,37,8,25, -37,249,22,27,11,80,159,39,55,37,248,22,179,4,80,159,37,54,38,248,22, -160,5,80,159,37,37,39,248,22,188,13,80,159,37,42,39,20,18,159,11,80, -158,36,53,248,80,159,37,8,25,37,249,22,27,11,80,159,39,55,37,159,36, -20,112,159,36,16,1,11,16,0,20,26,141,2,1,2,1,29,11,11,11,11, -11,10,38,80,158,36,36,20,112,159,40,16,26,2,2,2,3,30,2,5,72, -112,97,116,104,45,115,116,114,105,110,103,63,11,30,2,5,75,112,97,116,104, -45,97,100,100,45,115,117,102,102,105,120,8,30,2,7,2,8,6,30,2,7, -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,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16, -2,17,2,18,2,19,2,20,2,21,30,2,22,2,8,6,30,2,5,79,112, -97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2, -5,73,102,105,110,100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110, -111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,7,2,23,2,24,30, -2,22,74,114,101,112,97,114,97,109,101,116,101,114,105,122,101,7,16,0,37, -39,36,16,0,36,16,14,2,15,2,16,2,10,2,12,2,17,2,18,2,11, -2,3,2,9,2,2,2,13,2,14,2,19,2,21,50,11,11,11,16,3,2, -23,2,20,2,24,16,3,11,11,11,16,3,2,23,2,20,2,24,39,39,37, -12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0, -36,36,16,21,20,15,16,2,88,163,36,37,45,8,128,128,9,223,0,33,32, -80,159,36,8,29,39,20,15,16,2,88,163,8,36,37,45,8,240,0,0,1, -0,9,223,0,33,33,80,159,36,8,28,39,20,15,16,2,88,163,36,37,49, -8,240,0,0,16,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0, -33,34,80,159,36,8,27,39,20,15,16,2,88,163,36,37,49,8,240,0,192, -0,0,67,103,101,116,45,100,105,114,223,0,33,35,80,159,36,8,26,39,20, -15,16,2,248,22,151,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36, -37,20,15,16,2,88,163,36,38,8,38,8,61,2,3,223,0,33,44,80,159, -36,37,37,20,15,16,2,32,0,88,163,8,36,37,42,11,2,9,222,192,80, -159,36,42,37,20,15,16,2,247,22,136,2,80,159,36,43,37,20,15,16,2, -8,128,8,80,159,36,44,37,20,15,16,2,249,22,155,8,8,128,8,11,80, -159,36,45,37,20,15,16,2,88,163,8,36,37,50,8,128,8,2,13,223,0, -33,45,80,159,36,46,37,20,15,16,2,88,163,8,36,38,55,8,128,8,2, -14,223,0,33,46,80,159,36,47,37,20,15,16,2,247,22,69,80,159,36,48, -37,20,15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105, -110,103,80,159,36,49,37,20,15,16,2,11,80,158,36,50,20,15,16,2,11, -80,158,36,51,20,15,16,2,32,0,88,163,36,38,8,25,11,2,19,222,33, -52,80,159,36,52,37,20,15,16,2,11,80,158,36,53,20,15,16,2,27,11, -20,19,158,36,90,159,37,10,89,161,37,36,10,20,25,96,2,21,88,163,8, -36,37,51,8,128,2,9,224,2,1,33,53,88,163,36,39,49,11,9,223,0, -33,54,88,163,36,40,8,28,16,2,8,176,242,8,187,241,9,224,2,1,33, -62,207,80,159,36,54,37,20,15,16,2,88,163,36,36,45,8,240,66,0,14, -2,2,23,223,0,33,63,80,159,36,59,37,20,15,16,2,88,163,8,36,36, -45,8,240,0,0,10,2,2,24,223,0,33,64,80,159,36,8,24,37,96,29, -94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109, -105,110,45,115,116,120,11,2,5,2,22,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6168); +27,250,22,173,14,23,198,1,23,200,1,249,80,159,44,39,39,23,199,1,2, +27,27,250,22,190,14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28, +192,249,22,73,195,194,11,27,250,22,173,14,23,198,1,23,200,1,249,80,159, +44,39,39,23,199,1,2,27,27,250,22,190,14,196,11,32,0,88,163,8,36, +36,41,11,9,222,11,28,192,249,22,73,195,194,11,86,94,28,248,80,159,37, +38,39,23,195,2,12,250,22,175,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,90,159,46,11, +89,161,37,36,11,28,248,22,179,14,23,205,2,23,204,2,27,247,22,161,5, +28,23,193,2,249,22,180,14,23,207,2,23,195,1,23,205,2,89,161,39,37, +11,248,22,176,14,23,205,1,86,94,23,196,1,89,161,38,40,11,28,23,205, +2,27,248,22,160,14,23,197,2,27,248,22,187,7,23,195,2,28,28,249,22, +188,3,23,195,2,40,249,22,190,7,2,25,249,22,129,8,23,198,2,249,22, +176,3,23,199,2,40,11,249,22,7,23,199,2,248,22,164,14,249,22,130,8, +250,22,129,8,23,202,1,36,249,22,176,3,23,203,1,40,5,3,46,115,115, +249,22,7,23,199,2,11,249,22,7,23,197,2,11,89,161,37,42,11,28,249, +22,139,9,23,199,2,23,197,2,23,193,2,249,22,173,14,23,196,2,23,199, +2,89,161,37,43,11,28,23,198,2,28,249,22,139,9,23,200,2,23,197,1, +23,193,1,86,94,23,193,1,249,22,173,14,23,196,2,23,200,2,86,94,23, +195,1,11,89,161,37,44,11,28,249,22,139,9,23,196,2,68,114,101,108,97, +116,105,118,101,86,94,23,194,1,2,26,23,194,1,89,161,37,45,11,247,22, +134,15,27,250,22,190,14,23,203,2,11,32,0,88,163,8,36,36,41,11,9, +222,11,27,28,23,194,2,249,22,73,23,203,2,23,196,1,86,94,23,194,1, +11,27,28,23,203,2,28,23,194,2,11,27,250,22,190,14,23,207,2,11,32, +0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,23,206,2,194,11, +11,27,28,23,195,2,23,195,2,23,194,2,27,88,163,36,37,50,44,62,122, +111,225,15,13,9,33,39,27,88,163,36,37,50,44,66,97,108,116,45,122,111, +225,16,14,11,33,40,27,88,163,36,37,52,45,9,225,17,15,11,33,41,27, +88,163,36,37,52,45,9,225,18,16,13,33,42,27,28,23,200,2,23,200,2, +248,22,137,9,23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1, +23,200,2,248,22,137,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27, +249,22,5,88,163,8,36,37,53,45,9,225,24,22,18,33,43,23,216,2,27, +28,23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,188,3,248, +22,75,196,248,22,75,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28, +23,193,2,86,105,23,213,1,23,211,1,23,210,1,23,209,1,23,208,1,23, +201,1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20, +13,159,80,159,57,40,37,250,80,159,8,24,41,37,249,22,27,11,80,159,8, +26,40,37,22,181,4,11,20,13,159,80,159,57,40,37,250,80,159,8,24,41, +37,249,22,27,11,80,159,8,26,40,37,22,161,5,28,248,22,155,14,23,216, +2,23,215,1,86,94,23,215,1,247,22,132,15,249,247,22,138,15,248,22,74, +195,23,25,86,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5, +88,163,8,36,37,53,45,9,225,25,23,20,33,44,23,217,2,27,28,23,204, +2,11,193,28,192,192,28,193,28,203,28,249,22,188,3,248,22,75,196,248,22, +75,206,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214, +1,23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196, +1,23,195,1,20,13,159,80,159,58,40,37,250,80,159,8,25,41,37,249,22, +27,11,80,159,8,27,40,37,22,181,4,23,215,1,20,13,159,80,159,58,40, +37,250,80,159,8,25,41,37,249,22,27,11,80,159,8,27,40,37,22,161,5, +28,248,22,155,14,23,217,2,23,216,1,86,94,23,216,1,247,22,132,15,249, +247,22,138,15,248,22,74,195,23,26,86,94,23,193,1,27,28,23,197,2,28, +23,201,1,27,249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,26,24, +20,33,45,23,213,1,23,218,2,27,28,23,204,2,11,193,28,192,192,28,193, +28,23,204,2,28,249,22,188,3,248,22,75,196,248,22,75,23,207,2,193,11, +11,11,86,94,23,210,1,11,86,94,23,201,1,11,28,23,193,2,86,101,23, +215,1,23,213,1,23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23, +196,1,20,13,159,80,159,59,40,37,250,80,159,8,26,41,37,249,22,27,11, +80,159,8,28,40,37,22,181,4,11,20,13,159,80,159,59,40,37,250,80,159, +8,26,41,37,249,22,27,11,80,159,8,28,40,37,22,161,5,28,248,22,155, +14,23,218,2,23,217,1,86,94,23,217,1,247,22,132,15,249,247,22,159,5, +248,22,74,195,23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27, +249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,27,25,22,33,46,23, +215,1,23,219,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249, +22,188,3,248,22,75,196,248,22,75,23,15,193,11,11,11,86,95,23,216,1, +23,212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23,213,1,23,198, +1,20,13,159,80,159,8,24,40,37,250,80,159,8,27,41,37,249,22,27,11, +80,159,8,29,40,37,22,181,4,23,217,1,20,13,159,80,159,8,24,40,37, +250,80,159,8,27,41,37,249,22,27,11,80,159,8,29,40,37,22,161,5,28, +248,22,155,14,23,219,2,23,218,1,86,94,23,218,1,247,22,132,15,249,247, +22,159,5,248,22,74,195,23,28,86,94,23,193,1,27,28,23,199,2,86,94, +23,215,1,23,214,1,86,94,23,214,1,23,215,1,20,13,159,80,159,8,25, +40,37,250,80,159,8,28,41,37,249,22,27,11,80,159,8,30,40,37,22,181, +4,28,23,30,28,23,202,1,11,195,86,94,23,202,1,11,20,13,159,80,159, +8,25,40,37,250,80,159,8,28,41,37,249,22,27,11,80,159,8,30,40,37, +22,161,5,28,248,22,155,14,23,220,2,23,219,1,86,94,23,219,1,247,22, +132,15,249,247,22,159,5,194,23,29,27,249,22,159,8,80,159,39,45,38,249, +22,183,3,248,22,179,3,248,22,166,2,200,8,128,8,27,28,193,248,22,169, +2,194,11,28,192,27,249,22,96,198,195,28,192,248,22,75,193,11,11,27,249, +22,183,3,248,22,179,3,248,22,166,2,198,8,128,8,27,249,22,159,8,80, +159,40,45,38,195,27,28,193,248,22,169,2,194,11,250,22,160,8,80,159,42, +45,38,197,248,22,168,2,249,22,73,249,22,73,204,205,28,198,198,9,0,17, +35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,51,88,163, +8,36,37,59,11,2,29,222,33,52,27,249,22,143,15,2,50,23,196,2,28, +23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107, +23,197,1,27,249,22,143,15,2,50,23,196,2,28,23,193,2,86,94,23,194, +1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,143, +15,2,50,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98, +23,196,2,27,248,22,107,23,197,1,27,249,22,143,15,2,50,23,196,2,28, +23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,248,2,51,248, +22,107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,194,248,22,83,194, +32,53,88,163,36,37,55,11,2,29,222,33,54,28,248,22,81,248,22,75,23, +195,2,249,22,7,9,248,22,74,195,90,159,38,11,89,161,38,36,11,27,248, +22,75,196,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195, +90,159,38,11,89,161,38,36,11,27,248,22,75,196,28,248,22,81,248,22,75, +23,195,2,249,22,7,9,248,22,74,195,90,159,38,11,89,161,38,36,11,248, +2,53,248,22,75,196,249,22,7,249,22,73,248,22,74,199,196,195,249,22,7, +249,22,73,248,22,74,199,196,195,249,22,7,249,22,73,248,22,74,199,196,195, +27,27,249,22,143,15,2,50,23,197,2,28,23,193,2,86,94,23,195,1,249, +22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,143,15,2, +50,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196, +2,27,248,22,107,23,197,1,27,249,22,143,15,2,50,23,196,2,28,23,193, +2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197, +1,27,249,22,143,15,2,50,23,196,2,28,23,193,2,86,94,23,194,1,249, +22,73,248,22,98,23,196,2,248,2,51,248,22,107,23,197,1,248,22,83,194, +248,22,83,194,248,22,83,194,248,22,83,195,28,23,195,1,192,28,248,22,81, +248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159, +38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9, +248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22, +81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,90,159,38,11,89,161, +38,36,11,248,2,53,248,22,75,198,249,22,7,249,22,73,248,22,74,201,196, +195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22, +74,200,196,195,86,95,28,248,22,136,5,195,12,250,22,175,9,2,21,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,86,94,23,193,1,12,27,250,22,153,2, +80,159,41,43,38,248,22,168,15,247,22,133,13,11,27,28,23,194,2,193,86, +94,23,194,1,27,247,22,133,2,86,94,250,22,151,2,80,159,43,43,38,248, +22,168,15,247,22,133,13,195,192,250,22,151,2,195,199,66,97,116,116,97,99, +104,251,211,197,198,199,10,28,192,250,22,174,9,11,196,195,248,22,172,9,194, +28,249,22,135,7,194,6,1,1,46,2,26,28,249,22,135,7,194,6,2,2, +46,46,62,117,112,192,32,60,88,163,8,36,37,50,11,67,115,115,45,62,114, +107,116,222,33,61,27,248,22,132,7,194,28,249,22,188,3,194,39,28,249,22, +135,7,6,3,3,46,115,115,249,22,151,7,197,249,22,176,3,198,39,249,22, +152,7,250,22,151,7,198,36,249,22,176,3,199,39,2,32,193,193,0,8,35, +114,120,34,91,46,93,34,28,249,22,141,9,248,22,75,23,200,2,23,197,1, +28,249,22,139,9,248,22,74,23,200,2,23,196,1,251,22,172,9,2,21,6, +28,28,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116, +32,126,46,115,58,32,126,46,115,23,200,1,249,22,2,22,75,248,22,88,249, +22,73,23,206,1,23,202,1,12,12,247,192,20,13,159,80,159,41,48,38,249, +22,73,249,22,73,248,22,168,15,247,22,133,13,23,200,1,23,195,1,20,13, +159,80,159,41,40,37,250,80,159,44,41,37,249,22,27,11,80,159,46,40,37, +22,180,4,23,197,1,249,247,22,160,5,23,199,1,248,22,61,248,22,159,14, +23,199,1,86,94,28,28,248,22,155,14,23,196,2,10,248,22,145,5,23,196, +2,12,28,23,197,2,250,22,174,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,175,9,2,21,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,71,23,196,2,249,22,139,9,248,22,74,23,198,2,2,4,11, +248,22,137,5,248,22,98,196,28,28,248,22,71,23,196,2,249,22,139,9,248, +22,74,23,198,2,66,112,108,97,110,101,116,11,86,94,28,207,12,20,13,159, +80,159,37,55,37,80,158,37,53,89,161,37,36,10,249,22,182,4,21,94,2, +30,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114, +107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109, +101,45,114,101,115,111,108,118,101,114,12,252,212,199,200,201,202,80,158,42,53, +86,94,23,193,1,27,88,163,8,36,37,46,11,79,115,104,111,119,45,99,111, +108,108,101,99,116,105,111,110,45,101,114,114,223,5,33,58,27,28,248,22,58, +23,198,2,27,248,80,159,41,46,39,249,22,73,23,201,2,247,22,133,15,28, +23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159, +44,52,39,248,22,64,23,203,2,11,27,28,248,22,81,23,195,2,2,31,249, +22,152,7,23,197,2,2,32,27,252,80,159,49,57,39,2,21,23,204,1,28, +248,22,81,23,201,2,23,201,1,86,94,23,201,1,248,22,74,23,201,2,28, +248,22,81,23,201,2,86,94,23,200,1,9,248,22,75,23,201,1,23,199,2, +249,22,173,14,23,195,1,23,196,1,28,248,22,129,7,23,198,2,86,94,23, +194,1,27,248,80,159,41,8,26,39,23,200,2,27,248,80,159,42,46,39,249, +22,73,23,202,2,23,197,2,28,23,193,2,192,86,94,23,193,1,90,159,38, +11,89,161,38,36,11,249,80,159,45,52,39,23,203,2,11,250,22,1,22,173, +14,23,199,1,249,22,87,249,22,2,32,0,88,163,8,36,37,44,11,9,222, +33,59,23,200,1,248,22,83,248,2,60,23,201,1,28,248,22,155,14,23,198, +2,86,94,23,194,1,28,248,22,178,14,23,198,2,248,80,159,40,8,27,39, +248,22,182,14,23,199,2,248,22,83,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, +139,9,248,22,74,23,200,2,2,30,27,248,80,159,41,46,39,249,22,73,23, +201,2,247,22,133,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89, +161,38,36,11,249,80,159,45,52,39,248,22,98,23,204,2,11,89,161,37,38, +11,28,248,22,81,248,22,100,23,203,2,28,248,22,81,23,194,2,249,22,147, +15,2,62,23,196,2,11,10,27,28,23,196,2,248,2,60,23,196,2,28,248, +22,81,23,195,2,2,31,28,249,22,147,15,2,62,23,197,2,248,2,60,23, +196,2,249,22,152,7,23,197,2,2,32,27,28,23,197,1,86,94,23,196,1, +249,22,87,28,248,22,81,248,22,100,23,207,2,21,93,6,5,5,109,122,108, +105,98,249,22,1,22,87,249,22,2,80,159,51,8,28,39,248,22,100,23,210, +2,23,197,1,28,248,22,81,23,196,2,86,94,23,195,1,248,22,83,23,197, +1,86,94,23,196,1,23,195,1,27,252,80,159,51,57,39,2,21,23,206,1, +248,22,74,23,200,2,248,22,75,23,200,1,23,200,2,249,22,173,14,23,195, +1,23,197,1,28,249,22,139,9,248,22,74,23,200,2,64,102,105,108,101,248, +80,159,40,8,27,39,248,22,182,14,249,22,180,14,248,22,184,14,248,22,98, +23,203,2,248,80,159,44,8,26,39,23,203,2,12,86,94,28,28,248,22,155, +14,23,194,2,10,248,22,154,8,23,194,2,86,94,23,199,1,12,28,23,199, +2,250,22,174,9,67,114,101,113,117,105,114,101,249,22,177,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,74,23,199,2,2,33,23,202,1,86,94,23,199,1,250,22,175,9,2,21, +249,22,177,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28, +23,198,2,248,22,74,23,199,2,2,33,23,200,2,27,28,248,22,154,8,23, +195,2,249,22,159,8,23,196,2,36,249,22,182,14,248,22,183,14,23,197,2, +11,27,28,248,22,154,8,23,196,2,249,22,159,8,23,197,2,37,248,80,159, +42,58,39,23,195,2,90,159,39,11,89,161,39,36,11,28,248,22,154,8,23, +199,2,250,22,7,2,34,249,22,159,8,23,203,2,38,2,34,248,22,176,14, +23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,154,8,23,200,2,249, +22,159,8,23,201,2,39,249,80,159,47,56,39,23,197,2,5,0,27,28,248, +22,154,8,23,201,2,249,22,159,8,23,202,2,40,248,22,137,5,23,200,2, +27,27,250,22,153,2,80,159,51,43,38,248,22,168,15,247,22,133,13,11,28, +23,193,2,192,86,94,23,193,1,27,247,22,133,2,86,94,250,22,151,2,80, +159,52,43,38,248,22,168,15,247,22,133,13,195,192,86,95,28,23,208,1,27, +250,22,153,2,23,197,2,197,11,28,23,193,1,12,86,94,27,27,28,248,22, +17,80,159,51,49,38,80,159,50,49,38,247,22,19,251,22,27,11,80,159,54, +48,38,9,23,197,1,27,248,22,168,15,247,22,133,13,86,94,249,22,3,20, +20,94,88,163,8,36,37,55,11,9,226,12,11,2,3,33,63,23,195,1,23, +196,2,248,28,248,22,17,80,159,52,49,38,32,0,88,163,36,37,42,11,9, +222,33,64,80,159,51,8,29,39,20,20,94,88,163,36,36,52,8,176,64,9, +228,15,11,10,6,5,2,33,65,23,195,1,250,22,151,2,23,197,1,197,10, +12,28,28,248,22,154,8,23,202,1,11,28,248,22,129,7,23,206,2,10,28, +248,22,58,23,206,2,10,28,248,22,71,23,206,2,249,22,139,9,248,22,74, +23,208,2,2,30,11,249,80,159,49,47,39,28,248,22,129,7,23,208,2,249, +22,73,23,209,1,248,80,159,52,8,26,39,23,211,1,86,94,23,208,1,249, +22,73,23,209,1,247,22,133,15,252,22,156,8,23,207,1,23,206,1,23,204, +1,23,202,1,200,12,193,86,96,20,18,159,11,80,158,36,53,248,80,159,37, +8,25,37,249,22,27,11,80,159,39,55,37,248,22,179,4,80,159,37,54,38, +248,22,160,5,80,159,37,37,39,248,22,188,13,80,159,37,42,39,20,18,159, +11,80,158,36,53,248,80,159,37,8,25,37,249,22,27,11,80,159,39,55,37, +159,36,20,112,159,36,16,1,11,16,0,20,26,141,2,1,2,1,29,11,11, +11,11,11,10,38,80,158,36,36,20,112,159,40,16,26,2,2,2,3,30,2, +5,72,112,97,116,104,45,115,116,114,105,110,103,63,11,30,2,5,75,112,97, +116,104,45,97,100,100,45,115,117,102,102,105,120,8,30,2,7,2,8,6,30, +2,7,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,9,2,10,2,11,2,12,2,13,2,14,2,15, +2,16,2,17,2,18,2,19,2,20,2,21,30,2,22,2,8,6,30,2,5, +79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,10, +30,2,5,73,102,105,110,100,45,99,111,108,45,102,105,108,101,3,30,2,5, +76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,7,2,23,2, +24,30,2,22,74,114,101,112,97,114,97,109,101,116,101,114,105,122,101,7,16, +0,37,39,36,16,0,36,16,14,2,15,2,16,2,10,2,12,2,17,2,18, +2,11,2,3,2,9,2,2,2,13,2,14,2,19,2,21,50,11,11,11,16, +3,2,23,2,20,2,24,16,3,11,11,11,16,3,2,23,2,20,2,24,39, +39,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0, +16,0,36,36,16,21,20,15,16,2,88,163,36,37,45,8,128,128,9,223,0, +33,35,80,159,36,8,29,39,20,15,16,2,88,163,8,36,37,45,8,240,0, +0,1,0,9,223,0,33,36,80,159,36,8,28,39,20,15,16,2,88,163,36, +37,49,8,240,0,0,16,0,72,112,97,116,104,45,115,115,45,62,114,107,116, +223,0,33,37,80,159,36,8,27,39,20,15,16,2,88,163,36,37,49,8,240, +0,192,0,0,67,103,101,116,45,100,105,114,223,0,33,38,80,159,36,8,26, +39,20,15,16,2,248,22,151,8,69,115,111,45,115,117,102,102,105,120,80,159, +36,36,37,20,15,16,2,88,163,36,38,8,38,8,61,2,3,223,0,33,47, +80,159,36,37,37,20,15,16,2,32,0,88,163,8,36,37,42,11,2,9,222, +192,80,159,36,42,37,20,15,16,2,247,22,136,2,80,159,36,43,37,20,15, +16,2,8,128,8,80,159,36,44,37,20,15,16,2,249,22,155,8,8,128,8, +11,80,159,36,45,37,20,15,16,2,88,163,8,36,37,50,8,128,8,2,13, +223,0,33,48,80,159,36,46,37,20,15,16,2,88,163,8,36,38,55,8,128, +8,2,14,223,0,33,49,80,159,36,47,37,20,15,16,2,247,22,69,80,159, +36,48,37,20,15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97, +100,105,110,103,80,159,36,49,37,20,15,16,2,11,80,158,36,50,20,15,16, +2,11,80,158,36,51,20,15,16,2,32,0,88,163,36,38,8,25,11,2,19, +222,33,55,80,159,36,52,37,20,15,16,2,11,80,158,36,53,20,15,16,2, +27,11,20,19,158,36,90,159,37,10,89,161,37,36,10,20,25,96,2,21,88, +163,8,36,37,51,8,128,2,9,224,2,1,33,56,88,163,36,39,49,11,9, +223,0,33,57,88,163,36,40,8,28,16,2,8,176,242,8,187,241,9,224,2, +1,33,66,207,80,159,36,54,37,20,15,16,2,88,163,36,36,45,8,240,66, +0,14,2,2,23,223,0,33,67,80,159,36,59,37,20,15,16,2,88,163,8, +36,36,45,8,240,0,0,10,2,2,24,223,0,33,68,80,159,36,8,24,37, +96,29,94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35, +37,109,105,110,45,115,116,120,11,2,5,2,22,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6149); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,51,0,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,50,46,48,46,52,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16,0,29, 0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,94,1,0,0, 69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67, diff --git a/src/racket/src/env.c b/src/racket/src/env.c index 11dd683765..5fcde6b89d 100644 --- a/src/racket/src/env.c +++ b/src/racket/src/env.c @@ -56,6 +56,9 @@ READ_ONLY static Scheme_Env *futures_env; THREAD_LOCAL_DECL(static int builtin_ref_counter); THREAD_LOCAL_DECL(static int intdef_counter); +THREAD_LOCAL_DECL(static Scheme_Bucket_Table *literal_string_table); +THREAD_LOCAL_DECL(static Scheme_Bucket_Table *literal_number_table); + /* local functions */ static void make_kernel_env(void); @@ -489,6 +492,11 @@ static Scheme_Env *place_instance_init(void *stack_base, int initial_main_os_thr scheme_init_foreign(env); + REGISTER_SO(literal_string_table); + REGISTER_SO(literal_number_table); + literal_string_table = scheme_make_weak_equal_table(); + literal_number_table = scheme_make_weak_eqv_table(); + scheme_starting_up = 1; /* in case it's not set already */ scheme_add_embedded_builtins(env); @@ -1438,6 +1446,36 @@ const char *scheme_look_for_primitive(void *code) return NULL; } +/*========================================================================*/ +/* intern literal strings and numbers */ +/*========================================================================*/ + +Scheme_Object *scheme_intern_literal_string(Scheme_Object *str) +{ + Scheme_Bucket *b; + + scheme_start_atomic(); + b = scheme_bucket_from_table(literal_string_table, (const char *)str); + scheme_end_atomic_no_swap(); + if (!b->val) + b->val = scheme_true; + + return(Scheme_Object *)HT_EXTRACT_WEAK(b->key); +} + +Scheme_Object *scheme_intern_literal_number(Scheme_Object *num) +{ + Scheme_Bucket *b; + + scheme_start_atomic(); + b = scheme_bucket_from_table(literal_number_table, (const char *)num); + scheme_end_atomic_no_swap(); + if (!b->val) + b->val = scheme_true; + + return(Scheme_Object *)HT_EXTRACT_WEAK(b->key); +} + /*========================================================================*/ /* run-time and expansion-time Racket interface */ /*========================================================================*/ diff --git a/src/racket/src/hash.c b/src/racket/src/hash.c index ff82303822..6e848aedfc 100644 --- a/src/racket/src/hash.c +++ b/src/racket/src/hash.c @@ -1180,6 +1180,11 @@ static uintptr_t equal_hash_key(Scheme_Object *o, uintptr_t k, Hash_Info *hi) return k; } + case scheme_regexp_type: + { + o = scheme_regexp_source(o); + break; + } case scheme_structure_type: case scheme_proc_struct_type: { @@ -1605,6 +1610,11 @@ static uintptr_t equal_hash_key2(Scheme_Object *o, Hash_Info *hi) return k; } + case scheme_regexp_type: + { + o = scheme_regexp_source(o); + goto top; + } case scheme_structure_type: case scheme_proc_struct_type: { diff --git a/src/racket/src/mzmark_type.inc b/src/racket/src/mzmark_type.inc index a5767708b3..d724ef73fb 100644 --- a/src/racket/src/mzmark_type.inc +++ b/src/racket/src/mzmark_type.inc @@ -1661,7 +1661,7 @@ static int thread_val_SIZE(void *p, struct NewGC *gc) { static int thread_val_MARK(void *p, struct NewGC *gc) { Scheme_Thread *pr = (Scheme_Thread *)p; - + gcMARK2(pr->next, gc); gcMARK2(pr->prev, gc); @@ -1775,7 +1775,7 @@ static int thread_val_MARK(void *p, struct NewGC *gc) { static int thread_val_FIXUP(void *p, struct NewGC *gc) { Scheme_Thread *pr = (Scheme_Thread *)p; - + gcFIXUP2(pr->next, gc); gcFIXUP2(pr->prev, gc); diff --git a/src/racket/src/mzmarksrc.c b/src/racket/src/mzmarksrc.c index d49442af0e..1fd733b215 100644 --- a/src/racket/src/mzmarksrc.c +++ b/src/racket/src/mzmarksrc.c @@ -640,7 +640,7 @@ syntax_compiler { thread_val { mark: Scheme_Thread *pr = (Scheme_Thread *)p; - + gcMARK2(pr->next, gc); gcMARK2(pr->prev, gc); diff --git a/src/racket/src/optimize.c b/src/racket/src/optimize.c index 79846dc886..136b9f654b 100644 --- a/src/racket/src/optimize.c +++ b/src/racket/src/optimize.c @@ -2487,27 +2487,47 @@ static Scheme_Object *optimize_sequence(Scheme_Object *o, Optimize_Info *info, i return (Scheme_Object *)s; } +XFORM_NONGCING static int small_inline_number(Scheme_Object *o) +{ + if (SCHEME_BIGNUMP(o)) + return SCHEME_BIGLEN(o) < 32; + else if (SCHEME_COMPLEXP(o)) + return (small_inline_number(scheme_complex_real_part(o)) + && small_inline_number(scheme_complex_imaginary_part(o))); + else if (SCHEME_RATIONALP(o)) + return (small_inline_number(scheme_rational_numerator(o)) + && small_inline_number(scheme_rational_denominator(o))); + else + return 1; +} + +#define STR_INLINE_LIMIT 256 + int scheme_compiled_duplicate_ok(Scheme_Object *fb, int cross_module) { return (SCHEME_VOIDP(fb) || SAME_OBJ(fb, scheme_true) || SCHEME_FALSEP(fb) - || (SCHEME_SYMBOLP(fb) && (!cross_module || !SCHEME_SYM_WEIRDP(fb))) - || SCHEME_KEYWORDP(fb) + || (SCHEME_SYMBOLP(fb) + && (!cross_module || (!SCHEME_SYM_WEIRDP(fb) + && (SCHEME_SYM_LEN(fb) < STR_INLINE_LIMIT)))) + || (SCHEME_KEYWORDP(fb) + && (!cross_module || (SCHEME_KEYWORD_LEN(fb) < STR_INLINE_LIMIT))) || SCHEME_EOFP(fb) || SCHEME_INTP(fb) || SCHEME_NULLP(fb) - || (SCHEME_CHARP(fb) && (SCHEME_CHAR_VAL(fb) < 256)) || SAME_TYPE(SCHEME_TYPE(fb), scheme_local_type) - || (!cross_module - && - /* Values that are hashed by the printer to avoid - duplication: */ - (SCHEME_CHAR_STRINGP(fb) - || SCHEME_BYTE_STRINGP(fb) - || SAME_TYPE(SCHEME_TYPE(fb), scheme_regexp_type) - || SCHEME_NUMBERP(fb) - || SCHEME_PRIMP(fb)))); + || SCHEME_PRIMP(fb) + /* Values that are hashed by the printer and/or interned on + read to avoid duplication: */ + || SCHEME_CHARP(fb) + || (SCHEME_CHAR_STRINGP(fb) + && (!cross_module || (SCHEME_CHAR_STRLEN_VAL(fb) < STR_INLINE_LIMIT))) + || (SCHEME_BYTE_STRINGP(fb) + && (!cross_module || (SCHEME_BYTE_STRLEN_VAL(fb) < STR_INLINE_LIMIT))) + || SAME_TYPE(SCHEME_TYPE(fb), scheme_regexp_type) + || (SCHEME_NUMBERP(fb) + && (!cross_module || small_inline_number(fb)))); } static int equivalent_exprs(Scheme_Object *a, Scheme_Object *b) diff --git a/src/racket/src/read.c b/src/racket/src/read.c index 32ed9c1dde..c080820ce6 100644 --- a/src/racket/src/read.c +++ b/src/racket/src/read.c @@ -312,6 +312,8 @@ static Scheme_Object *readtable_mapping(int argc, Scheme_Object **argv); static Scheme_Object *current_readtable(int argc, Scheme_Object **argv); static Scheme_Object *current_reader_guard(int argc, Scheme_Object **argv); +static Scheme_Object *read_intern(int argc, Scheme_Object **argv); + /* A list stack is used to speed up the creation of intermediate lists during .zo reading. */ @@ -499,6 +501,8 @@ void scheme_init_read(Scheme_Env *env) GLOBAL_FOLDING_PRIM("readtable?", readtable_p, 1, 1, 1, env); GLOBAL_PRIM_W_ARITY2("readtable-mapping", readtable_mapping, 2, 2, 3, 3, env); + GLOBAL_NONCM_PRIM("read-intern-literal", read_intern, 1, 1, env); + if (getenv("PLT_DELAY_FROM_ZO")) { use_perma_cache = 0; } @@ -1466,6 +1470,8 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * return NULL; } + str = scheme_intern_literal_string(str); + if (stxsrc) str = scheme_make_stx_w_offset(str, line, col, pos, SPAN(port, pos), stxsrc, STX_SRCTAG); @@ -3007,8 +3013,10 @@ read_string(int is_byte, Scheme_Object *port, s[i] = 0; result = scheme_make_immutable_sized_byte_string(s, i, 0); } + result = scheme_intern_literal_string(result); if (stxsrc) result = scheme_make_stx_w_offset(result, line, col, pos, SPAN(port, pos), stxsrc, STX_SRCTAG); + return result; } @@ -3097,9 +3105,11 @@ read_here_string(Scheme_Object *port, Scheme_Object *stxsrc, str = scheme_make_sized_char_string(s, len, 1); + str = scheme_intern_literal_string(str); + if (stxsrc) str = scheme_make_stx_w_offset(str, line, col, pos, SPAN(port, pos), stxsrc, STX_SRCTAG); - + return str; } @@ -3419,6 +3429,8 @@ read_number_or_symbol(int init_ch, int skip_rt, Scheme_Object *port, port, NULL, 0, stxsrc, line, col, pos, SPAN(port, pos), indentation); + if (!SCHEME_INTP(o)) + o = scheme_intern_literal_number(o); } if (SAME_OBJ(o, scheme_false)) { @@ -3553,6 +3565,14 @@ static int u_strcmp(mzchar *s, const char *_t) return 0; } +static Scheme_Object *make_interned_char(int ch) +{ + if (ch < 256) + return scheme_make_character(ch); + else + return scheme_intern_literal_number(scheme_make_char(ch)); +} + /* "#\" has been read */ static Scheme_Object * read_character(Scheme_Object *port, @@ -3591,7 +3611,7 @@ read_character(Scheme_Object *port, ch = ((ch - '0') << 6) + ((next - '0') << 3) + (last - '0'); - return scheme_make_char(ch); + return make_interned_char(ch); } if (((ch == 'u') || (ch == 'U')) && NOT_EOF_OR_SPECIAL(next) && scheme_isxdigit(next)) { @@ -3691,7 +3711,7 @@ read_character(Scheme_Object *port, "read: expected a character after #\\"); } - return scheme_make_char(ch); + return make_interned_char(ch); } /*========================================================================*/ @@ -3800,6 +3820,39 @@ static Scheme_Object *read_hash(Scheme_Object *port, Scheme_Object *stxsrc, } } +/*========================================================================*/ +/* intern */ +/*========================================================================*/ + +static Scheme_Object *read_intern(int argc, Scheme_Object **argv) +{ + return scheme_read_intern(argv[0]); +} + +Scheme_Object *scheme_read_intern(Scheme_Object *o) +{ + if (!SCHEME_INTP(o) && SCHEME_NUMBERP(o)) + o = scheme_intern_literal_number(o); + else if (SCHEME_CHAR_STRINGP(o)) { + if (!SCHEME_IMMUTABLEP(o)) + o = scheme_make_immutable_sized_char_string(SCHEME_CHAR_STR_VAL(o), + SCHEME_CHAR_STRLEN_VAL(o), + 1); + o = scheme_intern_literal_string(o); + } else if (SCHEME_BYTE_STRINGP(o)) { + if (!SCHEME_IMMUTABLEP(o)) + o = scheme_make_immutable_sized_byte_string(SCHEME_BYTE_STR_VAL(o), + SCHEME_BYTE_STRLEN_VAL(o), + 1); + o = scheme_intern_literal_string(o); + } else if (SAME_TYPE(SCHEME_TYPE(o), scheme_regexp_type)) + o = scheme_intern_literal_string(o); + else if (SCHEME_CHARP(o) && (SCHEME_CHAR_VAL(o) >= 256)) + o = scheme_intern_literal_number(o); + + return o; +} + /*========================================================================*/ /* utilities */ /*========================================================================*/ @@ -4289,6 +4342,7 @@ static Scheme_Object *read_compact(CPort *port, int use_stack) RANGE_CHECK_GETS(l); s = read_compact_chars(port, buffer, BLK_BUF_SIZE, l); v = scheme_make_immutable_sized_byte_string(s, l, l < BLK_BUF_SIZE); + v = scheme_intern_literal_string(v); break; case CPT_CHAR_STRING: { @@ -4302,6 +4356,7 @@ static Scheme_Object *read_compact(CPort *port, int use_stack) scheme_utf8_decode_all((const unsigned char *)s, el, us, 0); us[l] = 0; v = scheme_make_immutable_sized_char_string(us, l, 0); + v = scheme_intern_literal_string(v); } break; case CPT_CHAR: diff --git a/src/racket/src/regexp.c b/src/racket/src/regexp.c index 80cc1e55fa..55c9f89cd5 100644 --- a/src/racket/src/regexp.c +++ b/src/racket/src/regexp.c @@ -5949,6 +5949,11 @@ int scheme_regexp_is_byte(Scheme_Object *re) return !(((regexp *)re)->flags & REGEXP_IS_UTF8); } +int scheme_regexp_is_pregexp(Scheme_Object *re) +{ + return !!(((regexp *)re)->flags & REGEXP_IS_PCRE); +} + #ifdef MZ_PRECISE_GC START_XFORM_SKIP; #include "mzmark_regexp.inc" diff --git a/src/racket/src/schminc.h b/src/racket/src/schminc.h index 1c0515a881..01419e4f4f 100644 --- a/src/racket/src/schminc.h +++ b/src/racket/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1040 +#define EXPECTED_PRIM_COUNT 1041 #define EXPECTED_UNSAFE_COUNT 78 #define EXPECTED_FLFXNUM_COUNT 68 #define EXPECTED_FUTURES_COUNT 11 diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index 2c9272c11b..665946abbb 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -692,6 +692,9 @@ struct Scheme_Hash_Tree #define SCHEME_HASHTR_FLAGS(tr) MZ_OPT_HASH_KEY(&(tr)->iso) +Scheme_Object *scheme_intern_literal_string(Scheme_Object *str); +Scheme_Object *scheme_intern_literal_number(Scheme_Object *num); + /*========================================================================*/ /* structs */ /*========================================================================*/ @@ -2121,6 +2124,7 @@ void scheme_install_type_reader(Scheme_Type type, Scheme_Type_Reader f); void scheme_install_type_writer(Scheme_Type type, Scheme_Type_Writer f); Scheme_Object *scheme_make_default_readtable(void); +Scheme_Object *scheme_read_intern(Scheme_Object *o); Scheme_Object *_scheme_apply_from_native(Scheme_Object *rator, int argc, @@ -3603,6 +3607,7 @@ void scheme_bad_vec_index(char *name, Scheme_Object *i, intptr_t bottom, intptr_t len); Scheme_Bucket_Table *scheme_make_weak_equal_table(void); +Scheme_Bucket_Table *scheme_make_weak_eqv_table(void); Scheme_Bucket_Table *scheme_make_nonlock_equal_bucket_table(void); int scheme_hash_table_equal_rec(Scheme_Hash_Table *t1, Scheme_Hash_Table *t2, void *eql); @@ -3619,6 +3624,7 @@ void scheme_reset_hash_table(Scheme_Hash_Table *ht, int *history); Scheme_Object *scheme_regexp_source(Scheme_Object *re); int scheme_regexp_is_byte(Scheme_Object *re); +int scheme_regexp_is_pregexp(Scheme_Object *re); Scheme_Object *scheme_make_regexp(Scheme_Object *str, int byte, int pcre, int * volatile result_is_err_string); int scheme_is_pregexp(Scheme_Object *o); void scheme_clear_rx_buffers(void); diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index b35ffebb89..6f539b375c 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.2.0.3" +#define MZSCHEME_VERSION "5.2.0.4" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 2 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 3 +#define MZSCHEME_VERSION_W 4 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/syntax.c b/src/racket/src/syntax.c index efc9354cdc..964a2cc72d 100644 --- a/src/racket/src/syntax.c +++ b/src/racket/src/syntax.c @@ -7367,6 +7367,8 @@ static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o, result = (Scheme_Object *)s; } else { + if (!wraps) + o = scheme_read_intern(o); result = o; }