diff --git a/collects/mzlib/pregexp.ss b/collects/mzlib/pregexp.ss index 6e493f69ab..b2ef9605f7 100644 --- a/collects/mzlib/pregexp.ss +++ b/collects/mzlib/pregexp.ss @@ -1,708 +1,39 @@ ;pregexp.ss -;Portable regular expressions for Scheme -;Dorai Sitaram -;http://www.ccs.neu.edu/~dorai/pregexp/pregexp.html +;; Originally: +;; ;Portable regular expressions for Scheme +;; ;Dorai Sitaram +;; ;http://www.ccs.neu.edu/~dorai/pregexp/pregexp.html +;; but `pregexp' functionality is now built into MzScheme, so +;; this is mostly a wrapper module. (module pregexp mzscheme - (provide pregexp - pregexp-match-positions - pregexp-match - pregexp-split - pregexp-replace - pregexp-replace* - pregexp-quote - *pregexp-comment-char*) + (require (lib "string.ss") + (lib "kw.ss")) + (provide pregexp + pregexp-match-positions + pregexp-match + pregexp-split + pregexp-replace + pregexp-replace* + (rename regexp-quote pregexp-quote)) -;Configured for Scheme dialect plt by scmxlate, v 2004-09-08, -;(c) Dorai Sitaram, -;http://www.ccs.neu.edu/~dorai/scmxlate/scmxlate.html - -(define *pregexp-version* 20050502) - -(define *pregexp-comment-char* #\;) - -(define *pregexp-space-sensitive?* #t) - -(define pregexp-error - (lambda whatever - (display "Error:") - (for-each (lambda (x) (display #\space) (write x)) whatever) - (newline) - (error "pregexp-error"))) - -(define pregexp-read-pattern - (lambda (s i n) - (if (>= i n) - (list (list ':or (list ':seq)) i) - (let loop ((branches '()) (i i)) - (if (or (>= i n) (char=? (string-ref s i) #\))) - (list (cons ':or (reverse! branches)) i) - (let ((vv - (pregexp-read-branch - s - (if (char=? (string-ref s i) #\|) (+ i 1) i) - n))) - (loop (cons (car vv) branches) (cadr vv)))))))) - -(define pregexp-read-branch - (lambda (s i n) - (let loop ((pieces '()) (i i)) - (cond - ((>= i n) (list (cons ':seq (reverse! pieces)) i)) - ((let ((c (string-ref s i))) (or (char=? c #\|) (char=? c #\)))) - (list (cons ':seq (reverse! pieces)) i)) - (else - (let ((vv (pregexp-read-piece s i n))) - (loop (cons (car vv) pieces) (cadr vv)))))))) - -(define pregexp-read-piece - (lambda (s i n) - (let ((c (string-ref s i))) - (case c - ((#\^) (list ':bos (+ i 1))) - ((#\$) (list ':eos (+ i 1))) - ((#\.) (pregexp-wrap-quantifier-if-any (list ':any (+ i 1)) s n)) - ((#\[) - (let ((i+1 (+ i 1))) - (pregexp-wrap-quantifier-if-any - (case (and (< i+1 n) (string-ref s i+1)) - ((#\^) - (let ((vv (pregexp-read-char-list s (+ i 2) n))) - (list (list ':neg-char (car vv)) (cadr vv)))) - (else (pregexp-read-char-list s i+1 n))) - s - n))) - ((#\() - (pregexp-wrap-quantifier-if-any - (pregexp-read-subpattern s (+ i 1) n) - s - n)) - ((#\\) - (pregexp-wrap-quantifier-if-any - (cond - ((pregexp-read-escaped-number s i n) - => - (lambda (num-i) (list (list ':backref (car num-i)) (cadr num-i)))) - ((pregexp-read-escaped-char s i n) - => - (lambda (char-i) (list (car char-i) (cadr char-i)))) - (else (pregexp-error 'pregexp-read-piece 'backslash))) - s - n)) - (else - (if (or *pregexp-space-sensitive?* - (and (not (char-whitespace? c)) - (not (char=? c *pregexp-comment-char*)))) - (pregexp-wrap-quantifier-if-any (list c (+ i 1)) s n) - (let loop ((i i) (in-comment? #f)) - (if (>= i n) - (list ':empty i) - (let ((c (string-ref s i))) - (cond - (in-comment? (loop (+ i 1) (not (char=? c #\newline)))) - ((char-whitespace? c) (loop (+ i 1) #f)) - ((char=? c *pregexp-comment-char*) (loop (+ i 1) #t)) - (else (list ':empty i)))))))))))) - -(define pregexp-read-escaped-number - (lambda (s i n) - (and (< (+ i 1) n) - (let ((c (string-ref s (+ i 1)))) - (and (char-numeric? c) - (let loop ((i (+ i 2)) (r (list c))) - (if (>= i n) - (list (string->number (list->string (reverse! r))) i) - (let ((c (string-ref s i))) - (if (char-numeric? c) - (loop (+ i 1) (cons c r)) - (list - (string->number (list->string (reverse! r))) - i)))))))))) - -(define pregexp-read-escaped-char - (lambda (s i n) - (and (< (+ i 1) n) - (let ((c (string-ref s (+ i 1)))) - (case c - ((#\b) (list ':wbdry (+ i 2))) - ((#\B) (list ':not-wbdry (+ i 2))) - ((#\d) (list ':digit (+ i 2))) - ((#\D) (list '(:neg-char :digit) (+ i 2))) - ((#\n) (list #\newline (+ i 2))) - ((#\r) (list #\return (+ i 2))) - ((#\s) (list ':space (+ i 2))) - ((#\S) (list '(:neg-char :space) (+ i 2))) - ((#\t) (list #\tab (+ i 2))) - ((#\w) (list ':word (+ i 2))) - ((#\W) (list '(:neg-char :word) (+ i 2))) - (else (list c (+ i 2)))))))) - -(define pregexp-read-posix-char-class - (lambda (s i n) - (let ((neg? #f)) - (let loop ((i i) (r (list #\:))) - (if (>= i n) - (pregexp-error 'pregexp-read-posix-char-class) - (let ((c (string-ref s i))) - (cond - ((char=? c #\^) (set! neg? #t) (loop (+ i 1) r)) - ((char-alphabetic? c) (loop (+ i 1) (cons c r))) - ((char=? c #\:) - (if (or (>= (+ i 1) n) (not (char=? (string-ref s (+ i 1)) #\]))) - (pregexp-error 'pregexp-read-posix-char-class) - (let ((posix-class - (string->symbol (list->string (reverse! r))))) - (list - (if neg? (list ':neg-char posix-class) posix-class) - (+ i 2))))) - (else (pregexp-error 'pregexp-read-posix-char-class))))))))) - -(define pregexp-read-cluster-type - (lambda (s i n) - (let ((c (string-ref s i))) - (case c - ((#\?) - (let ((i (+ i 1))) - (case (string-ref s i) - ((#\:) (list '() (+ i 1))) - ((#\=) (list '(:lookahead) (+ i 1))) - ((#\!) (list '(:neg-lookahead) (+ i 1))) - ((#\>) (list '(:no-backtrack) (+ i 1))) - ((#\<) - (list - (case (string-ref s (+ i 1)) - ((#\=) '(:lookbehind)) - ((#\!) '(:neg-lookbehind)) - (else (pregexp-error 'pregexp-read-cluster-type))) - (+ i 2))) - (else - (let loop ((i i) (r '()) (inv? #f)) - (let ((c (string-ref s i))) - (case c - ((#\-) (loop (+ i 1) r #t)) - ((#\i) - (loop - (+ i 1) - (cons (if inv? ':case-sensitive ':case-insensitive) r) - #f)) - ((#\x) - (set! *pregexp-space-sensitive?* inv?) - (loop (+ i 1) r #f)) - ((#\:) (list r (+ i 1))) - (else (pregexp-error 'pregexp-read-cluster-type))))))))) - (else (list '(:sub) i)))))) - -(define pregexp-read-subpattern - (lambda (s i n) - (let* ((remember-space-sensitive? *pregexp-space-sensitive?*) - (ctyp-i (pregexp-read-cluster-type s i n)) - (ctyp (car ctyp-i)) - (i (cadr ctyp-i)) - (vv (pregexp-read-pattern s i n))) - (set! *pregexp-space-sensitive?* remember-space-sensitive?) - (let ((vv-re (car vv)) (vv-i (cadr vv))) - (if (and (< vv-i n) (char=? (string-ref s vv-i) #\))) - (list - (let loop ((ctyp ctyp) (re vv-re)) - (if (null? ctyp) re (loop (cdr ctyp) (list (car ctyp) re)))) - (+ vv-i 1)) - (pregexp-error 'pregexp-read-subpattern)))))) - -(define pregexp-wrap-quantifier-if-any - (lambda (vv s n) - (let ((re (car vv))) - (let loop ((i (cadr vv))) - (if (>= i n) - vv - (let ((c (string-ref s i))) - (if (and (char-whitespace? c) (not *pregexp-space-sensitive?*)) - (loop (+ i 1)) - (case c - ((#\* #\+ #\? #\{) - (let* ((new-re - (list ':between 'minimal? 'at-least 'at-most re)) - (new-vv (list new-re 'next-i))) - (case c - ((#\*) - (set-car! (cddr new-re) 0) - (set-car! (cdddr new-re) #f)) - ((#\+) - (set-car! (cddr new-re) 1) - (set-car! (cdddr new-re) #f)) - ((#\?) - (set-car! (cddr new-re) 0) - (set-car! (cdddr new-re) 1)) - ((#\{) - (let ((pq (pregexp-read-nums s (+ i 1) n))) - (if (not pq) - (pregexp-error - 'pregexp-wrap-quantifier-if-any - 'left-brace-must-be-followed-by-number)) - (set-car! (cddr new-re) (car pq)) - (set-car! (cdddr new-re) (cadr pq)) - (set! i (caddr pq))))) - (let loop ((i (+ i 1))) - (if (>= i n) - (begin - (set-car! (cdr new-re) #f) - (set-car! (cdr new-vv) i)) - (let ((c (string-ref s i))) - (cond - ((and (char-whitespace? c) - (not *pregexp-space-sensitive?*)) - (loop (+ i 1))) - ((char=? c #\?) - (set-car! (cdr new-re) #t) - (set-car! (cdr new-vv) (+ i 1))) - (else - (set-car! (cdr new-re) #f) - (set-car! (cdr new-vv) i)))))) - new-vv)) - (else vv))))))))) - -(define pregexp-read-nums - (lambda (s i n) - (let loop ((p '()) (q '()) (k i) (reading 1)) - (if (>= k n) (pregexp-error 'pregexp-read-nums)) - (let ((c (string-ref s k))) - (cond - ((char-numeric? c) - (if (= reading 1) - (loop (cons c p) q (+ k 1) 1) - (loop p (cons c q) (+ k 1) 2))) - ((and (char-whitespace? c) (not *pregexp-space-sensitive?*)) - (loop p q (+ k 1) reading)) - ((and (char=? c #\,) (= reading 1)) (loop p q (+ k 1) 2)) - ((char=? c #\}) - (let ((p (string->number (list->string (reverse! p)))) - (q (string->number (list->string (reverse! q))))) - (cond - ((and (not p) (= reading 1)) (list 0 #f k)) - ((= reading 1) (list p p k)) - (else (list p q k))))) - (else #f)))))) - -(define pregexp-invert-char-list - (lambda (vv) (set-car! (car vv) ':none-of-chars) vv)) - -(define pregexp-read-char-list - (lambda (s i n) - (let loop ((r '()) (i i)) - (if (>= i n) - (pregexp-error 'pregexp-read-char-list 'character-class-ended-too-soon) - (let ((c (string-ref s i))) - (case c - ((#\]) - (if (null? r) - (loop (cons c r) (+ i 1)) - (list (cons ':one-of-chars (reverse! r)) (+ i 1)))) - ((#\\) - (let ((char-i (pregexp-read-escaped-char s i n))) - (if char-i - (loop (cons (car char-i) r) (cadr char-i)) - (pregexp-error 'pregexp-read-char-list 'backslash)))) - ((#\-) - (if (or (null? r) - (let ((i+1 (+ i 1))) - (and (< i+1 n) (char=? (string-ref s i+1) #\])))) - (loop (cons c r) (+ i 1)) - (let ((c-prev (car r))) - (if (char? c-prev) - (loop - (cons - (list ':char-range c-prev (string-ref s (+ i 1))) - (cdr r)) - (+ i 2)) - (loop (cons c r) (+ i 1)))))) - ((#\[) - (if (char=? (string-ref s (+ i 1)) #\:) - (let ((posix-char-class-i - (pregexp-read-posix-char-class s (+ i 2) n))) - (loop - (cons (car posix-char-class-i) r) - (cadr posix-char-class-i))) - (loop (cons c r) (+ i 1)))) - (else (loop (cons c r) (+ i 1))))))))) - -(define pregexp-string-match - (lambda (s1 s i n sk fk) - (let ((n1 (string-length s1))) - (if (> n1 n) - (fk) - (let loop ((j 0) (k i)) - (cond - ((>= j n1) (sk k)) - ((>= k n) (fk)) - ((char=? (string-ref s1 j) (string-ref s k)) (loop (+ j 1) (+ k 1))) - (else (fk)))))))) - -(define pregexp-char-word? - (lambda (c) (or (char-alphabetic? c) (char-numeric? c) (char=? c #\_)))) - -(define pregexp-at-word-boundary? - (lambda (s i n) - (or (= i 0) - (>= i n) - (let ((c/i (string-ref s i)) (c/i-1 (string-ref s (- i 1)))) - (let ((c/i/w? (pregexp-check-if-in-char-class? c/i ':word)) - (c/i-1/w? (pregexp-check-if-in-char-class? c/i-1 ':word))) - (or (and c/i/w? (not c/i-1/w?)) (and (not c/i/w?) c/i-1/w?))))))) - -(define pregexp-check-if-in-char-class? - (lambda (c char-class) - (case char-class - ((:any) (not (char=? c #\newline))) - ((:alnum) (or (char-alphabetic? c) (char-numeric? c))) - ((:alpha) (char-alphabetic? c)) - ((:ascii) (< (char->integer c) 128)) - ((:blank) (or (char=? c #\space) (char=? c #\tab))) - ((:cntrl) (< (char->integer c) 32)) - ((:digit) (char-numeric? c)) - ((:graph) (and (>= (char->integer c) 32) (not (char-whitespace? c)))) - ((:lower) (char-lower-case? c)) - ((:print) (>= (char->integer c) 32)) - ((:punct) - (and (>= (char->integer c) 32) - (not (char-whitespace? c)) - (not (char-alphabetic? c)) - (not (char-numeric? c)))) - ((:space) (char-whitespace? c)) - ((:upper) (char-upper-case? c)) - ((:word) (or (char-alphabetic? c) (char-numeric? c) (char=? c #\_))) - ((:xdigit) - (or (char-numeric? c) - (char-ci=? c #\a) - (char-ci=? c #\b) - (char-ci=? c #\c) - (char-ci=? c #\d) - (char-ci=? c #\e) - (char-ci=? c #\f))) - (else (pregexp-error 'pregexp-check-if-in-char-class?))))) - -(define pregexp-list-ref - (lambda (s i) - (let loop ((s s) (k 0)) - (cond ((null? s) #f) ((= k i) (car s)) (else (loop (cdr s) (+ k 1))))))) - -(define pregexp-make-backref-list - (lambda (re) - (let sub ((re re)) - (if (pair? re) - (let ((car-re (car re)) (sub-cdr-re (sub (cdr re)))) - (if (eqv? car-re ':sub) - (cons (cons re #f) sub-cdr-re) - (append (sub car-re) sub-cdr-re))) - '())))) - -(define pregexp-match-positions-aux - (lambda (re s sn start n i) - (let ((identity (lambda (x) x)) - (backrefs (pregexp-make-backref-list re)) - (case-sensitive? #t)) - (let sub ((re re) (i i) (sk identity) (fk (lambda () #f))) - (cond - ((eqv? re ':bos) (if (= i start) (sk i) (fk))) - ((eqv? re ':eos) (if (>= i n) (sk i) (fk))) - ((eqv? re ':empty) (sk i)) - ((eqv? re ':wbdry) (if (pregexp-at-word-boundary? s i n) (sk i) (fk))) - ((eqv? re ':not-wbdry) - (if (pregexp-at-word-boundary? s i n) (fk) (sk i))) - ((and (char? re) (< i n)) - (if ((if case-sensitive? char=? char-ci=?) (string-ref s i) re) - (sk (+ i 1)) - (fk))) - ((and (not (pair? re)) (< i n)) - (if (pregexp-check-if-in-char-class? (string-ref s i) re) - (sk (+ i 1)) - (fk))) - ((and (pair? re) (eqv? (car re) ':char-range) (< i n)) - (let ((c (string-ref s i))) - (if (let ((c< (if case-sensitive? char<=? char-ci<=?))) - (and (c< (cadr re) c) (c< c (caddr re)))) - (sk (+ i 1)) - (fk)))) - ((pair? re) - (case (car re) - ((:char-range) - (if (>= i n) (fk) (pregexp-error 'pregexp-match-positions-aux))) - ((:one-of-chars) - (if (>= i n) - (fk) - (let loup-one-of-chars ((chars (cdr re))) - (if (null? chars) - (fk) - (sub - (car chars) - i - sk - (lambda () (loup-one-of-chars (cdr chars)))))))) - ((:neg-char) - (if (>= i n) - (fk) - (sub (cadr re) i (lambda (i1) (fk)) (lambda () (sk (+ i 1)))))) - ((:seq) - (let loup-seq ((res (cdr re)) (i i)) - (if (null? res) - (sk i) - (sub (car res) i (lambda (i1) (loup-seq (cdr res) i1)) fk)))) - ((:or) - (let loup-or ((res (cdr re))) - (if (null? res) - (fk) - (sub - (car res) - i - (lambda (i1) (or (sk i1) (loup-or (cdr res)))) - (lambda () (loup-or (cdr res))))))) - ((:backref) - (let* ((c (pregexp-list-ref backrefs (cadr re))) - (backref - (cond - (c => cdr) - (else - (pregexp-error - 'pregexp-match-positions-aux - 'non-existent-backref - re) - #f)))) - (if backref - (pregexp-string-match - (substring s (car backref) (cdr backref)) - s - i - n - (lambda (i) (sk i)) - fk) - (sk i)))) - ((:sub) - (sub - (cadr re) - i - (lambda (i1) (set-cdr! (assv re backrefs) (cons i i1)) (sk i1)) - fk)) - ((:lookahead) - (let ((found-it? (sub (cadr re) i identity (lambda () #f)))) - (if found-it? (sk i) (fk)))) - ((:neg-lookahead) - (let ((found-it? (sub (cadr re) i identity (lambda () #f)))) - (if found-it? (fk) (sk i)))) - ((:lookbehind) - (let ((n-actual n) (sn-actual sn)) - (set! n i) - (set! sn i) - (let ((found-it? - (sub - (list ':seq '(:between #f 0 #f :any) (cadr re) ':eos) - 0 - identity - (lambda () #f)))) - (set! n n-actual) - (set! sn sn-actual) - (if found-it? (sk i) (fk))))) - ((:neg-lookbehind) - (let ((n-actual n) (sn-actual sn)) - (set! n i) - (set! sn i) - (let ((found-it? - (sub - (list ':seq '(:between #f 0 #f :any) (cadr re) ':eos) - 0 - identity - (lambda () #f)))) - (set! n n-actual) - (set! sn sn-actual) - (if found-it? (fk) (sk i))))) - ((:no-backtrack) - (let ((found-it? (sub (cadr re) i identity (lambda () #f)))) - (if found-it? (sk found-it?) (fk)))) - ((:case-sensitive :case-insensitive) - (let ((old case-sensitive?)) - (set! case-sensitive? (eqv? (car re) ':case-sensitive)) - (sub - (cadr re) - i - (lambda (i1) (set! case-sensitive? old) (sk i1)) - (lambda () (set! case-sensitive? old) (fk))))) - ((:between) - (let* ((maximal? (not (cadr re))) - (p (caddr re)) - (q (cadddr re)) - (could-loop-infinitely? (and maximal? (not q))) - (re (car (cddddr re)))) - (let loup-p ((k 0) (i i)) - (if (< k p) - (sub - re - i - (lambda (i1) - (if (and could-loop-infinitely? (= i1 i)) - (pregexp-error - 'pregexp-match-positions-aux - 'greedy-quantifier-operand-could-be-empty)) - (loup-p (+ k 1) i1)) - fk) - (let ((q (and q (- q p)))) - (let loup-q ((k 0) (i i)) - (let ((fk (lambda () (sk i)))) - (if (and q (>= k q)) - (fk) - (if maximal? - (sub - re - i - (lambda (i1) - (if (and could-loop-infinitely? (= i1 i)) - (pregexp-error - 'pregexp-match-positions-aux - 'greedy-quantifier-operand-could-be-empty)) - (or (loup-q (+ k 1) i1) (fk))) - fk) - (or (fk) - (sub - re - i - (lambda (i1) (loup-q (+ k 1) i1)) - fk))))))))))) - (else (pregexp-error 'pregexp-match-positions-aux)))) - ((>= i n) (fk)) - (else (pregexp-error 'pregexp-match-positions-aux)))) - (let ((backrefs (map cdr backrefs))) (and (car backrefs) backrefs))))) - -(define pregexp-replace-aux - (lambda (str ins n backrefs) - (let loop ((i 0) (r "")) - (if (>= i n) - r - (let ((c (string-ref ins i))) - (if (char=? c #\\) - (let* ((br-i (pregexp-read-escaped-number ins i n)) - (br - (if br-i - (car br-i) - (if (char=? (string-ref ins (+ i 1)) #\&) 0 #f))) - (i (if br-i (cadr br-i) (if br (+ i 2) (+ i 1))))) - (if (not br) - (let ((c2 (string-ref ins i))) - (loop - (+ i 1) - (if (char=? c2 #\$) r (string-append r (string c2))))) - (loop - i - (let ((backref (pregexp-list-ref backrefs br))) - (if backref - (string-append - r - (substring str (car backref) (cdr backref))) - r))))) - (loop (+ i 1) (string-append r (string c))))))))) - -(define pregexp - (lambda (s) - (set! *pregexp-space-sensitive?* #t) - (list ':sub (car (pregexp-read-pattern s 0 (string-length s)))))) - -(define pregexp-match-positions - (lambda (pat str . opt-args) + (define (pattern->pregexp pattern) (cond - ((string? pat) (set! pat (pregexp pat))) - ((pair? pat) #t) - (else - (pregexp-error - 'pregexp-match-positions - 'pattern-must-be-compiled-or-string-regexp - pat))) - (let* ((str-len (string-length str)) - (start - (if (null? opt-args) - 0 - (let ((start (car opt-args))) - (set! opt-args (cdr opt-args)) - start))) - (end (if (null? opt-args) str-len (car opt-args)))) - (let loop ((i start)) - (and (<= i end) - (or (pregexp-match-positions-aux pat str str-len start end i) - (loop (+ i 1)))))))) + [(bytes? pattern) (byte-pregexp pattern)] + [(string? pattern) (pregexp pattern)] + [else pattern])) -(define pregexp-match - (lambda (pat str . opt-args) - (let ((ix-prs (apply pregexp-match-positions pat str opt-args))) - (and ix-prs - (map - (lambda (ix-pr) - (and ix-pr (substring str (car ix-pr) (cdr ix-pr)))) - ix-prs))))) + (define/kw (pregexp-match pattern input #:optional [start-k 0] [end-k #f] [output-port #f]) + (regexp-match (pattern->pregexp pattern) input start-k end-k output-port)) -(define pregexp-split - (lambda (pat str) - (let ((n (string-length str))) - (let loop ((i 0) (r '()) (picked-up-one-undelimited-char? #f)) - (cond - ((>= i n) (reverse! r)) - ((pregexp-match-positions pat str i n) - => - (lambda (y) - (let ((jk (car y))) - (let ((j (car jk)) (k (cdr jk))) - (cond - ((= j k) (loop (+ k 1) (cons (substring str i (+ j 1)) r) #t)) - ((and (= j i) picked-up-one-undelimited-char?) (loop k r #f)) - (else (loop k (cons (substring str i j) r) #f))))))) - (else (loop n (cons (substring str i n) r) #f))))))) + (define/kw (pregexp-match-positions pattern input #:optional [start-k 0] [end-k #f] [output-port #f]) + (regexp-match (pattern->pregexp pattern) input start-k end-k output-port)) + + (define/kw (pregexp-split pattern string #:optional [start 0] [end #f]) + (pregexp-split (pattern->pregexp pattern) string start end)) -(define pregexp-replace - (lambda (pat str ins) - (let* ((n (string-length str)) (pp (pregexp-match-positions pat str 0 n))) - (if (not pp) - str - (let ((m-i (caar pp)) (m-n (cdar pp))) - (string-append - (substring str 0 m-i) - (if (procedure? ins) - (apply ins - (map (lambda (p) - (substring str (car p) (cdr p))) - pp)) - (pregexp-replace-aux str ins (string-length ins) pp)) - (substring str m-n n))))))) + (define/kw (pregexp-replace pattern input insert) + (regexp-replace (pattern->pregexp pattern) input insert)) -(define pregexp-replace* - (lambda (pat str ins) - (let ((pat (if (string? pat) (pregexp pat) pat)) - (n (string-length str)) - (ins-len (and (string? ins) - (string-length ins)))) - (let loop ((i 0) (r "")) - (if (>= i n) - r - (let ((pp (pregexp-match-positions pat str i n))) - (if (not pp) - (if (= i 0) str (string-append r (substring str i n))) - (loop - (cdar pp) - (string-append - r - (substring str i (caar pp)) - (if (procedure? ins) - (apply ins - (map (lambda (p) - (substring str (car p) (cdr p))) - pp)) - (pregexp-replace-aux str ins ins-len pp))))))))))) - -(define pregexp-quote - (lambda (s) - (let loop ((i (- (string-length s) 1)) (r '())) - (if (< i 0) - (list->string r) - (loop - (- i 1) - (let ((c (string-ref s i))) - (if (memv - c - '(#\\ #\. #\? #\* #\+ #\| #\^ #\$ #\[ #\] #\{ #\} #\( #\))) - (cons #\\ (cons c r)) - (cons c r)))))))) - - -) + (define/kw (pregexp-replace* pattern input insert) + (regexp-replace* (pattern->pregexp pattern) input insert))) diff --git a/src/mzscheme/sconfig.h b/src/mzscheme/sconfig.h index bd44172a63..200669f13c 100644 --- a/src/mzscheme/sconfig.h +++ b/src/mzscheme/sconfig.h @@ -302,9 +302,14 @@ /************** x86/FreeBSD with gcc ****************/ -# if defined(__FreeBSD__) && defined(i386) +# if defined(__FreeBSD__) && (defined(i386) || defined(__x86_64__)) +#if defined(i386) # define SCHEME_PLATFORM_LIBRARY_SUBPATH "i386-freebsd" +#endif +#if defined(__x86_64__) +# define SCHEME_PLATFORM_LIBRARY_SUBPATH "x86_64-freebsd" +#endif # include "uconfig.h" # undef HAS_STANDARD_IOB @@ -318,7 +323,6 @@ # define USE_UNDERSCORE_SETJMP # define USE_IEEE_FP_PREDS -# define FREEBSD_CONTROL_387 # define POW_HANDLES_INF_CORRECTLY # define USE_DYNAMIC_FDSET_SIZE @@ -329,8 +333,13 @@ # define REGISTER_POOR_MACHINE +#if defined(__x86_64__) +# define MZ_USE_JIT_X86_64 +# define MZ_JIT_USE_MPROTECT +#else # define MZ_USE_JIT_I386 # define MZ_JIT_USE_MPROTECT +#endif # define FLAGS_ALREADY_SET @@ -1126,15 +1135,15 @@ '387 with Microsoft-style _control87. DONT_IGNORE_PIPE_SIGNAL can be on or off. */ - /* FREEBSD_CONTROL_387 controls the floating-point processor under i386 - FreeBSD */ - /* LINUX_CONTROL_387 controls the floating-point processor under i386 Linux using __setfpucw(). libc 6.1 doesn't export __setfpucw() and it doesn't matter; for Linux 2.0 and up, the default FP behavior is the one we want. This flag might be needed for older versions of Linux. */ + /* FREEBSD_CONTROL_387 controls the floating-point processor under i386 + FreeBSD. As for Linux, this does not appear necessary anymore. */ + /* APLHA_CONTROL_FP controls the floating-point processor for Alpha OSF1 */ diff --git a/src/mzscheme/src/Makefile.in b/src/mzscheme/src/Makefile.in index 17407b7bab..b829133460 100644 --- a/src/mzscheme/src/Makefile.in +++ b/src/mzscheme/src/Makefile.in @@ -291,7 +291,7 @@ read.@LTO@: $(srcdir)/schpriv.h $(srcdir)/schexn.h $(SCONFIG) $(srcdir)/../inclu $(srcdir)/../src/schcpt.h $(srcdir)/schvers.h $(srcdir)/schminc.h \ $(srcdir)/../src/stypes.h $(srcdir)/mzmark.c regexp.@LTO@: $(srcdir)/schpriv.h $(srcdir)/schexn.h $(SCONFIG) $(srcdir)/../include/scheme.h \ - $(srcdir)/../src/stypes.h $(srcdir)/mzmark.c + $(srcdir)/../src/stypes.h $(srcdir)/mzmark.c $(srcdir)/schrx.h setjmpup.@LTO@: $(srcdir)/schpriv.h $(srcdir)/schexn.h $(SCONFIG) $(srcdir)/../include/scheme.h \ $(srcdir)/../src/stypes.h $(srcdir)/schmach.h string.@LTO@: $(srcdir)/schpriv.h $(srcdir)/schexn.h $(SCONFIG) $(srcdir)/../include/scheme.h \ diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 62f6e9ccf2..56c328268a 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,5 +1,5 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,54,252,225,7,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,54,252,225,7,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,65,35,37,115,116, 120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,36,16,16,30, 3,2,2,71,105,100,101,110,116,105,102,105,101,114,63,4,254,1,30,5,2, @@ -99,15 +99,15 @@ EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,134,252,252,18,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,134,252,215,18,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,71,35,37,113,113, 45,97,110,100,45,111,114,1,29,2,11,11,10,10,10,34,80,158,34,34,20, 98,159,34,16,1,30,3,2,2,69,113,113,45,97,112,112,101,110,100,4,254, -1,16,0,11,11,16,1,2,4,35,11,16,6,70,113,117,97,115,105,113,117, -111,116,101,5,64,108,101,116,42,6,62,111,114,7,63,97,110,100,8,66,108, -101,116,114,101,99,9,63,108,101,116,10,16,6,11,11,11,11,11,11,16,6, -2,5,2,6,2,7,2,8,2,9,2,10,34,40,96,16,5,95,2,10,2, -6,2,9,87,98,83,159,34,93,80,159,34,52,35,89,162,8,64,38,46,65, +1,16,0,11,11,16,1,2,4,35,11,16,6,62,111,114,5,63,108,101,116, +6,64,108,101,116,42,7,70,113,117,97,115,105,113,117,111,116,101,8,63,97, +110,100,9,66,108,101,116,114,101,99,10,16,6,11,11,11,11,11,11,16,6, +2,5,2,6,2,7,2,8,2,9,2,10,34,40,96,16,5,95,2,6,2, +7,2,10,87,98,83,159,34,93,80,159,34,52,35,89,162,8,64,38,46,65, 99,104,101,99,107,11,223,0,28,248,22,57,196,12,27,28,194,248,22,77,197, 248,80,158,36,34,248,80,158,37,34,248,22,52,199,28,28,248,22,57,198,11, 28,249,22,221,194,248,22,52,200,10,27,248,22,53,199,28,248,22,57,193,11, @@ -175,167 +175,165 @@ 100,114,28,6,30,29,2,25,69,115,116,120,45,112,97,105,114,63,30,11,30, 31,2,25,69,115,116,120,45,110,117,108,108,63,32,10,30,33,2,25,69,115, 116,120,45,108,105,115,116,63,34,8,30,35,2,25,69,115,116,120,45,62,108, -105,115,116,36,4,16,7,18,16,2,97,70,108,97,109,98,100,97,45,115,116, -120,37,39,97,37,10,34,11,16,14,2,5,2,2,2,7,2,2,2,10,2, -2,2,4,2,2,2,6,2,2,2,8,2,2,2,9,2,2,98,36,10,35, -11,93,159,2,25,9,11,16,0,96,35,8,254,1,11,16,0,9,18,16,2, -158,73,108,101,116,114,101,99,45,118,97,108,117,101,115,38,39,9,18,16,2, -103,2,38,46,37,36,35,16,6,45,11,2,37,77,108,101,116,114,101,99,45, -118,97,108,117,101,115,45,115,116,120,39,3,1,7,101,110,118,50,53,53,55, -40,2,40,16,10,44,11,63,115,116,120,41,66,110,97,109,101,100,63,42,65, -115,116,97,114,63,43,66,116,97,114,103,101,116,44,3,1,7,101,110,118,50, -53,53,57,45,2,45,2,45,2,45,16,8,43,11,2,19,2,13,2,20,3, -1,7,101,110,118,50,53,54,50,46,3,1,7,101,110,118,50,53,54,49,47, -3,1,7,101,110,118,50,53,54,48,48,16,4,42,11,64,110,97,109,101,49, -3,1,7,101,110,118,50,53,54,56,50,16,6,41,11,68,98,105,110,100,105, -110,103,115,51,64,98,111,100,121,52,3,1,7,101,110,118,50,53,55,48,53, -2,53,16,4,40,11,72,110,101,119,45,98,105,110,100,105,110,103,115,54,3, -1,7,101,110,118,50,53,55,49,55,9,18,16,2,158,66,108,97,109,98,100, -97,56,46,9,18,16,2,100,70,108,101,116,45,118,97,108,117,101,115,57,49, -37,36,35,45,16,4,48,11,2,21,3,1,7,101,110,118,50,53,53,56,58, -16,4,47,11,2,41,3,1,7,101,110,118,50,53,56,50,59,9,18,16,2, -100,71,108,101,116,42,45,118,97,108,117,101,115,60,51,37,36,35,45,48,16, -4,50,11,2,41,3,1,7,101,110,118,50,53,56,51,61,9,18,16,2,100, -2,38,53,37,36,35,45,48,16,4,52,11,2,41,3,1,7,101,110,118,50, -53,56,52,62,9,11,16,5,93,2,5,87,97,83,159,34,93,80,159,34,57, -35,89,162,34,39,53,62,113,113,63,223,0,28,248,80,158,35,35,197,27,248, -80,158,36,38,198,28,28,248,80,158,36,34,193,28,249,22,223,194,197,248,80, -158,36,39,198,11,11,27,248,80,158,37,36,199,87,94,28,28,248,80,158,37, -35,193,248,22,252,9,2,248,80,158,38,37,248,80,158,39,36,195,10,251,22, -252,39,2,67,117,110,113,117,111,116,101,64,6,30,30,101,120,112,101,99,116, -115,32,101,120,97,99,116,108,121,32,111,110,101,32,101,120,112,114,101,115,115, -105,111,110,65,199,202,12,28,248,22,186,200,248,80,158,37,38,193,252,80,159, -41,58,35,200,201,202,203,248,22,171,205,28,28,248,80,158,36,34,193,28,249, -22,223,194,20,15,159,37,43,40,248,80,158,36,39,198,11,11,252,80,159,40, -58,35,199,200,201,202,248,22,170,204,28,28,248,80,158,36,34,193,28,249,22, -223,194,198,248,80,158,36,39,198,11,11,251,22,252,39,2,76,117,110,113,117, -111,116,101,45,115,112,108,105,99,105,110,103,66,6,33,33,105,110,118,97,108, -105,100,32,99,111,110,116,101,120,116,32,119,105,116,104,105,110,32,113,117,97, -115,105,113,117,111,116,101,67,198,201,28,28,248,80,158,36,35,193,28,248,80, -158,36,34,248,80,158,37,38,194,28,249,22,223,248,80,158,38,38,195,198,248, -80,158,36,39,193,11,11,11,27,248,80,158,37,36,194,87,94,28,28,248,80, -158,37,35,193,248,22,252,9,2,248,80,158,38,37,248,80,158,39,36,195,10, -251,22,252,39,2,2,64,6,30,30,101,120,112,101,99,116,115,32,101,120,97, -99,116,108,121,32,111,110,101,32,101,120,112,114,101,115,115,105,111,110,68,199, -202,12,27,248,80,158,38,38,194,27,248,80,158,39,36,201,27,252,80,159,44, -57,35,203,204,205,248,80,158,45,36,23,15,23,15,28,248,22,186,203,27,28, -249,22,252,11,2,195,196,28,248,80,158,41,37,194,20,15,159,40,37,40,249, -22,59,20,15,159,42,38,40,195,193,250,22,59,20,15,159,43,44,40,198,195, -27,252,80,159,45,58,35,204,205,206,201,248,22,171,23,17,28,28,249,22,252, -11,2,195,196,249,22,252,11,2,194,198,11,202,27,27,20,15,159,42,45,40, -27,28,249,22,252,11,2,197,201,28,248,80,158,44,37,196,20,15,159,43,37, -40,249,22,59,20,15,159,45,38,40,197,195,28,248,80,158,44,37,193,249,22, -59,20,15,159,45,39,40,195,28,28,248,22,50,193,28,249,22,223,20,15,159, -45,40,40,248,22,52,195,10,249,22,223,20,15,159,45,41,40,248,22,52,195, -11,250,22,61,248,22,52,196,196,248,22,53,196,250,22,59,20,15,159,46,42, -40,196,195,27,28,249,22,252,11,2,197,198,28,248,80,158,43,37,196,20,15, -159,42,37,40,249,22,59,20,15,159,44,38,40,197,195,28,248,80,158,43,37, -193,249,22,59,20,15,159,44,39,40,195,28,28,248,22,50,193,28,249,22,223, -20,15,159,44,40,40,248,22,52,195,10,249,22,223,20,15,159,44,41,40,248, -22,52,195,11,250,22,61,248,22,52,196,196,248,22,53,196,250,22,59,20,15, -159,45,42,40,196,195,252,80,159,40,58,35,199,200,201,202,203,28,28,248,22, -206,197,248,22,252,222,1,248,22,210,198,11,27,248,22,252,229,1,248,22,210, -199,27,252,80,159,41,57,35,200,201,202,198,204,28,249,22,252,11,2,195,194, -198,249,22,59,20,15,159,38,46,40,194,28,248,22,206,197,28,248,22,107,248, -22,210,198,27,248,22,108,248,22,210,199,27,252,80,159,41,57,35,200,201,202, -198,204,28,249,22,252,11,2,195,194,198,249,22,59,20,15,159,38,47,40,194, -196,196,83,159,34,93,80,159,34,58,35,89,162,8,36,39,50,67,113,113,45, -108,105,115,116,69,223,0,27,248,80,158,36,38,198,27,248,80,158,37,36,199, -27,252,80,159,42,57,35,201,202,203,199,205,27,252,80,159,43,57,35,202,203, -204,199,206,28,28,249,22,252,11,2,195,197,249,22,252,11,2,194,196,11,200, -27,28,249,22,252,11,2,196,198,28,248,80,158,40,37,195,20,15,159,39,37, -40,249,22,59,20,15,159,41,38,40,196,194,27,28,249,22,252,11,2,196,198, -28,248,80,158,41,37,195,20,15,159,40,37,40,249,22,59,20,15,159,42,38, -40,196,194,28,248,80,158,41,37,193,249,22,59,20,15,159,42,39,40,195,28, -28,248,22,50,193,28,249,22,223,20,15,159,42,40,40,248,22,52,195,10,249, -22,223,20,15,159,42,41,40,248,22,52,195,11,250,22,61,248,22,52,196,196, -248,22,53,196,250,22,59,20,15,159,43,42,40,196,195,83,159,34,93,80,159, -34,56,35,89,162,8,36,36,41,70,97,112,112,108,121,45,99,111,110,115,70, -223,0,28,248,80,158,35,37,195,249,22,59,20,15,159,36,39,40,195,28,28, -248,22,50,195,28,249,22,223,20,15,159,36,40,40,248,22,52,197,10,249,22, -223,20,15,159,36,41,40,248,22,52,197,11,250,22,61,248,22,52,198,196,248, -22,53,198,250,22,59,20,15,159,37,42,40,196,197,83,159,34,93,80,159,34, -55,35,89,162,8,36,36,39,66,110,111,114,109,97,108,71,223,0,28,249,22, -252,11,2,195,196,28,248,80,158,35,37,194,20,15,159,34,37,40,249,22,59, -20,15,159,36,38,40,195,193,27,20,15,159,35,34,40,27,20,15,159,36,35, -40,27,20,15,159,37,36,40,89,162,8,36,35,50,9,226,3,0,1,2,87, -94,28,248,80,158,38,34,197,250,22,252,39,2,11,6,10,10,98,97,100,32, -115,121,110,116,97,120,72,199,12,27,28,248,80,158,39,35,248,80,158,40,36, -199,28,248,80,158,39,37,248,80,158,40,36,248,80,158,41,36,200,248,80,158, -39,38,248,80,158,40,36,199,250,22,252,39,2,11,6,10,10,98,97,100,32, -115,121,110,116,97,120,73,200,250,22,252,39,2,11,6,10,10,98,97,100,32, -115,121,110,116,97,120,74,200,250,22,209,196,27,252,80,159,47,57,35,206,203, -204,201,34,28,249,22,252,11,2,194,198,28,248,80,158,43,37,193,20,15,159, -42,37,40,249,22,59,20,15,159,44,38,40,194,192,200,37,20,98,159,38,16, -6,30,75,2,25,71,105,100,101,110,116,105,102,105,101,114,63,76,2,2,29, -2,27,2,31,2,24,2,33,16,14,18,16,2,97,64,104,101,114,101,77,54, -37,36,35,9,18,16,2,158,2,64,54,9,18,16,2,158,2,66,54,9,18, -16,2,100,9,58,37,36,35,16,8,57,11,2,77,71,117,110,113,117,111,116, -101,45,115,116,120,78,1,20,117,110,113,117,111,116,101,45,115,112,108,105,99, -105,110,103,45,115,116,120,79,3,1,7,101,110,118,50,53,56,54,80,2,80, -2,80,16,4,56,11,67,105,110,45,102,111,114,109,81,3,1,7,101,110,118, -50,53,56,55,82,16,6,55,11,61,120,83,63,111,108,100,84,3,1,7,101, -110,118,50,53,56,57,85,2,85,9,18,16,2,158,65,113,117,111,116,101,86, -58,9,18,16,2,100,64,108,105,115,116,87,8,26,37,36,35,57,56,16,6, -59,11,61,97,88,61,100,89,3,1,7,101,110,118,50,53,57,48,90,2,90, -9,18,16,2,158,2,87,8,26,9,18,16,2,158,65,108,105,115,116,42,91, -8,26,9,18,16,2,158,2,91,8,26,9,18,16,2,104,2,5,8,32,37, -36,35,57,56,16,8,8,31,11,64,102,111,114,109,92,2,71,2,70,3,1, -7,101,110,118,50,53,56,56,93,2,93,2,93,16,4,8,30,11,2,63,3, -1,7,101,110,118,50,53,57,49,94,16,6,8,29,11,2,83,65,108,101,118, -101,108,95,3,1,7,101,110,118,50,53,57,50,96,2,96,16,4,8,28,11, -2,69,3,1,7,101,110,118,50,53,57,51,97,16,4,8,27,11,65,102,105, -114,115,116,98,3,1,7,101,110,118,50,53,57,57,99,9,18,16,2,106,2, -4,8,35,37,36,35,57,56,8,31,8,30,8,29,8,28,8,27,16,4,8, -34,11,64,114,101,115,116,100,3,1,7,101,110,118,50,54,48,50,101,16,8, -8,33,11,64,117,113,115,100,102,65,111,108,100,45,108,103,61,108,104,3,1, -7,101,110,118,50,54,48,52,105,2,105,2,105,9,18,16,2,158,94,107,2, -86,8,37,37,36,35,57,56,8,31,8,30,8,29,8,28,8,27,8,34,8, -33,16,4,8,36,11,65,114,101,115,116,120,106,3,1,7,101,110,118,50,54, -48,54,107,158,2,66,8,37,8,37,9,18,16,2,105,72,108,105,115,116,45, -62,118,101,99,116,111,114,108,8,40,37,36,35,57,56,8,31,8,30,8,29, -8,28,16,4,8,39,11,2,104,3,1,7,101,110,118,50,54,48,55,109,16, -4,8,38,11,62,108,50,110,3,1,7,101,110,118,50,54,48,56,111,9,18, -16,2,105,63,98,111,120,112,8,43,37,36,35,57,56,8,31,8,30,8,29, -8,28,16,4,8,42,11,61,118,113,3,1,7,101,110,118,50,54,48,57,114, -16,4,8,41,11,62,113,118,115,3,1,7,101,110,118,50,54,49,48,116,9, -11,16,5,93,2,8,27,20,15,159,35,34,39,89,162,34,35,48,9,224,1, -0,87,94,28,248,80,158,36,34,195,12,250,22,252,39,2,11,6,10,10,98, -97,100,32,115,121,110,116,97,120,117,197,27,248,80,158,37,35,196,28,248,80, -158,37,36,193,20,15,159,36,35,39,28,28,248,80,158,37,37,193,248,80,158, -37,36,248,80,158,38,35,194,10,248,80,158,37,38,193,250,22,209,196,251,22, -59,20,15,159,43,36,39,248,80,158,44,38,200,249,22,51,20,15,159,45,37, -39,248,80,158,46,35,202,20,15,159,43,38,39,198,35,20,98,159,34,16,5, -2,33,2,27,2,31,2,29,2,24,16,5,18,16,2,158,2,77,54,9,18, -16,2,100,10,8,47,37,36,35,16,4,8,46,11,2,77,3,1,7,101,110, -118,50,54,49,50,118,16,4,8,45,11,2,83,3,1,7,101,110,118,50,54, -49,51,119,16,4,8,44,11,61,101,120,3,1,7,101,110,118,50,54,49,52, -121,9,18,16,2,158,62,105,102,122,8,47,9,18,16,2,158,2,8,8,47, -9,18,16,2,158,11,8,47,9,11,16,5,93,2,7,27,20,15,159,35,34, -40,89,162,34,35,51,9,224,1,0,87,94,28,248,80,158,36,34,195,250,22, -252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,123,197,12,27, -248,80,158,37,35,196,28,248,80,158,37,36,193,20,15,159,36,35,40,28,28, -248,80,158,37,37,193,248,80,158,37,36,248,80,158,38,35,194,11,248,80,158, -37,38,193,28,248,80,158,37,39,193,250,22,209,196,250,22,59,20,15,159,42, -36,40,248,22,59,249,22,59,67,111,114,45,112,97,114,116,124,248,80,158,46, -38,202,251,22,59,20,15,159,46,37,40,2,124,2,124,249,22,51,20,15,159, -48,38,40,248,80,158,49,35,205,198,250,22,252,39,2,11,6,10,10,98,97, -100,32,115,121,110,116,97,120,125,198,35,20,98,159,34,16,6,2,75,2,27, -2,31,2,29,2,24,2,33,16,5,18,16,2,158,2,77,54,9,18,16,2, -100,11,8,51,37,36,35,16,4,8,50,11,2,77,3,1,7,101,110,118,50, -54,49,54,126,16,4,8,49,11,2,83,3,1,7,101,110,118,50,54,49,55, -127,16,4,8,48,11,2,120,3,1,7,101,110,118,50,54,49,56,128,9,18, -16,2,101,2,10,8,53,37,36,35,8,50,8,49,8,48,16,4,8,52,11, -63,116,109,112,129,3,1,7,101,110,118,50,54,49,57,130,9,18,16,2,158, -2,122,8,53,9,18,16,2,158,2,7,8,53,9,11,93,83,159,34,93,80, -159,34,34,35,32,131,89,162,34,36,39,2,4,222,28,248,22,58,193,249,22, -65,194,195,250,22,252,40,2,2,66,6,11,11,112,114,111,112,101,114,32,108, -105,115,116,132,195,93,68,35,37,107,101,114,110,101,108,133,94,2,25,2,133, -0}; - EVAL_ONE_SIZED_STR((char *)expr, 4872); +105,115,116,36,4,16,7,18,97,70,108,97,109,98,100,97,45,115,116,120,37, +39,97,37,10,34,11,16,14,2,4,2,2,2,9,2,2,2,8,2,2,2, +6,2,2,2,5,2,2,2,7,2,2,2,10,2,2,98,36,10,35,11,93, +159,2,25,9,11,16,0,96,35,8,254,1,11,16,0,18,16,2,158,73,108, +101,116,114,101,99,45,118,97,108,117,101,115,38,39,40,18,103,2,38,47,37, +36,35,16,6,46,11,2,37,77,108,101,116,114,101,99,45,118,97,108,117,101, +115,45,115,116,120,39,3,1,7,101,110,118,50,52,54,52,40,2,40,16,10, +45,11,63,115,116,120,41,66,110,97,109,101,100,63,42,65,115,116,97,114,63, +43,66,116,97,114,103,101,116,44,3,1,7,101,110,118,50,52,54,54,45,2, +45,2,45,2,45,16,8,44,11,2,19,2,13,2,20,3,1,7,101,110,118, +50,52,54,57,46,3,1,7,101,110,118,50,52,54,56,47,3,1,7,101,110, +118,50,52,54,55,48,16,4,43,11,64,110,97,109,101,49,3,1,7,101,110, +118,50,52,55,53,50,16,6,42,11,68,98,105,110,100,105,110,103,115,51,64, +98,111,100,121,52,3,1,7,101,110,118,50,52,55,55,53,2,53,16,4,41, +11,72,110,101,119,45,98,105,110,100,105,110,103,115,54,3,1,7,101,110,118, +50,52,55,56,55,18,16,2,158,66,108,97,109,98,100,97,56,47,48,18,100, +70,108,101,116,45,118,97,108,117,101,115,57,51,37,36,35,46,16,4,50,11, +2,21,3,1,7,101,110,118,50,52,54,53,58,16,4,49,11,2,41,3,1, +7,101,110,118,50,52,56,57,59,18,100,71,108,101,116,42,45,118,97,108,117, +101,115,60,53,37,36,35,46,50,16,4,52,11,2,41,3,1,7,101,110,118, +50,52,57,48,61,18,100,2,38,55,37,36,35,46,50,16,4,54,11,2,41, +3,1,7,101,110,118,50,52,57,49,62,11,16,5,93,2,8,87,97,83,159, +34,93,80,159,34,57,35,89,162,34,39,53,62,113,113,63,223,0,28,248,80, +158,35,35,197,27,248,80,158,36,38,198,28,28,248,80,158,36,34,193,28,249, +22,223,194,197,248,80,158,36,39,198,11,11,27,248,80,158,37,36,199,87,94, +28,28,248,80,158,37,35,193,248,22,252,9,2,248,80,158,38,37,248,80,158, +39,36,195,10,251,22,252,39,2,67,117,110,113,117,111,116,101,64,6,30,30, +101,120,112,101,99,116,115,32,101,120,97,99,116,108,121,32,111,110,101,32,101, +120,112,114,101,115,115,105,111,110,65,199,202,12,28,248,22,186,200,248,80,158, +37,38,193,252,80,159,41,58,35,200,201,202,203,248,22,171,205,28,28,248,80, +158,36,34,193,28,249,22,223,194,20,15,159,37,43,40,248,80,158,36,39,198, +11,11,252,80,159,40,58,35,199,200,201,202,248,22,170,204,28,28,248,80,158, +36,34,193,28,249,22,223,194,198,248,80,158,36,39,198,11,11,251,22,252,39, +2,76,117,110,113,117,111,116,101,45,115,112,108,105,99,105,110,103,66,6,33, +33,105,110,118,97,108,105,100,32,99,111,110,116,101,120,116,32,119,105,116,104, +105,110,32,113,117,97,115,105,113,117,111,116,101,67,198,201,28,28,248,80,158, +36,35,193,28,248,80,158,36,34,248,80,158,37,38,194,28,249,22,223,248,80, +158,38,38,195,198,248,80,158,36,39,193,11,11,11,27,248,80,158,37,36,194, +87,94,28,28,248,80,158,37,35,193,248,22,252,9,2,248,80,158,38,37,248, +80,158,39,36,195,10,251,22,252,39,2,2,64,6,30,30,101,120,112,101,99, +116,115,32,101,120,97,99,116,108,121,32,111,110,101,32,101,120,112,114,101,115, +115,105,111,110,68,199,202,12,27,248,80,158,38,38,194,27,248,80,158,39,36, +201,27,252,80,159,44,57,35,203,204,205,248,80,158,45,36,23,15,23,15,28, +248,22,186,203,27,28,249,22,252,11,2,195,196,28,248,80,158,41,37,194,20, +15,159,40,37,40,249,22,59,20,15,159,42,38,40,195,193,250,22,59,20,15, +159,43,44,40,198,195,27,252,80,159,45,58,35,204,205,206,201,248,22,171,23, +17,28,28,249,22,252,11,2,195,196,249,22,252,11,2,194,198,11,202,27,27, +20,15,159,42,45,40,27,28,249,22,252,11,2,197,201,28,248,80,158,44,37, +196,20,15,159,43,37,40,249,22,59,20,15,159,45,38,40,197,195,28,248,80, +158,44,37,193,249,22,59,20,15,159,45,39,40,195,28,28,248,22,50,193,28, +249,22,223,20,15,159,45,40,40,248,22,52,195,10,249,22,223,20,15,159,45, +41,40,248,22,52,195,11,250,22,61,248,22,52,196,196,248,22,53,196,250,22, +59,20,15,159,46,42,40,196,195,27,28,249,22,252,11,2,197,198,28,248,80, +158,43,37,196,20,15,159,42,37,40,249,22,59,20,15,159,44,38,40,197,195, +28,248,80,158,43,37,193,249,22,59,20,15,159,44,39,40,195,28,28,248,22, +50,193,28,249,22,223,20,15,159,44,40,40,248,22,52,195,10,249,22,223,20, +15,159,44,41,40,248,22,52,195,11,250,22,61,248,22,52,196,196,248,22,53, +196,250,22,59,20,15,159,45,42,40,196,195,252,80,159,40,58,35,199,200,201, +202,203,28,28,248,22,206,197,248,22,252,222,1,248,22,210,198,11,27,248,22, +252,229,1,248,22,210,199,27,252,80,159,41,57,35,200,201,202,198,204,28,249, +22,252,11,2,195,194,198,249,22,59,20,15,159,38,46,40,194,28,248,22,206, +197,28,248,22,107,248,22,210,198,27,248,22,108,248,22,210,199,27,252,80,159, +41,57,35,200,201,202,198,204,28,249,22,252,11,2,195,194,198,249,22,59,20, +15,159,38,47,40,194,196,196,83,159,34,93,80,159,34,58,35,89,162,8,36, +39,50,67,113,113,45,108,105,115,116,69,223,0,27,248,80,158,36,38,198,27, +248,80,158,37,36,199,27,252,80,159,42,57,35,201,202,203,199,205,27,252,80, +159,43,57,35,202,203,204,199,206,28,28,249,22,252,11,2,195,197,249,22,252, +11,2,194,196,11,200,27,28,249,22,252,11,2,196,198,28,248,80,158,40,37, +195,20,15,159,39,37,40,249,22,59,20,15,159,41,38,40,196,194,27,28,249, +22,252,11,2,196,198,28,248,80,158,41,37,195,20,15,159,40,37,40,249,22, +59,20,15,159,42,38,40,196,194,28,248,80,158,41,37,193,249,22,59,20,15, +159,42,39,40,195,28,28,248,22,50,193,28,249,22,223,20,15,159,42,40,40, +248,22,52,195,10,249,22,223,20,15,159,42,41,40,248,22,52,195,11,250,22, +61,248,22,52,196,196,248,22,53,196,250,22,59,20,15,159,43,42,40,196,195, +83,159,34,93,80,159,34,56,35,89,162,8,36,36,41,70,97,112,112,108,121, +45,99,111,110,115,70,223,0,28,248,80,158,35,37,195,249,22,59,20,15,159, +36,39,40,195,28,28,248,22,50,195,28,249,22,223,20,15,159,36,40,40,248, +22,52,197,10,249,22,223,20,15,159,36,41,40,248,22,52,197,11,250,22,61, +248,22,52,198,196,248,22,53,198,250,22,59,20,15,159,37,42,40,196,197,83, +159,34,93,80,159,34,55,35,89,162,8,36,36,39,66,110,111,114,109,97,108, +71,223,0,28,249,22,252,11,2,195,196,28,248,80,158,35,37,194,20,15,159, +34,37,40,249,22,59,20,15,159,36,38,40,195,193,27,20,15,159,35,34,40, +27,20,15,159,36,35,40,27,20,15,159,37,36,40,89,162,8,36,35,50,9, +226,3,0,1,2,87,94,28,248,80,158,38,34,197,250,22,252,39,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,72,199,12,27,28,248,80,158,39, +35,248,80,158,40,36,199,28,248,80,158,39,37,248,80,158,40,36,248,80,158, +41,36,200,248,80,158,39,38,248,80,158,40,36,199,250,22,252,39,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,73,200,250,22,252,39,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,74,200,250,22,209,196,27,252,80, +159,47,57,35,206,203,204,201,34,28,249,22,252,11,2,194,198,28,248,80,158, +43,37,193,20,15,159,42,37,40,249,22,59,20,15,159,44,38,40,194,192,200, +37,20,98,159,38,16,6,30,75,2,25,71,105,100,101,110,116,105,102,105,101, +114,63,76,2,2,29,2,27,2,31,2,24,2,33,16,14,18,97,64,104,101, +114,101,77,56,37,36,35,18,16,2,158,2,64,56,57,18,16,2,158,2,66, +56,58,18,100,9,8,28,37,36,35,16,8,8,27,11,2,77,71,117,110,113, +117,111,116,101,45,115,116,120,78,1,20,117,110,113,117,111,116,101,45,115,112, +108,105,99,105,110,103,45,115,116,120,79,3,1,7,101,110,118,50,52,57,51, +80,2,80,2,80,16,4,8,26,11,67,105,110,45,102,111,114,109,81,3,1, +7,101,110,118,50,52,57,52,82,16,6,59,11,61,120,83,63,111,108,100,84, +3,1,7,101,110,118,50,52,57,54,85,2,85,18,16,2,158,65,113,117,111, +116,101,86,8,28,8,29,18,100,64,108,105,115,116,87,8,31,37,36,35,8, +27,8,26,16,6,8,30,11,61,97,88,61,100,89,3,1,7,101,110,118,50, +52,57,55,90,2,90,18,16,2,158,2,87,8,31,8,32,18,16,2,158,65, +108,105,115,116,42,91,8,31,8,33,18,8,33,18,104,2,8,8,39,37,36, +35,8,27,8,26,16,8,8,38,11,64,102,111,114,109,92,2,71,2,70,3, +1,7,101,110,118,50,52,57,53,93,2,93,2,93,16,4,8,37,11,2,63, +3,1,7,101,110,118,50,52,57,56,94,16,6,8,36,11,2,83,65,108,101, +118,101,108,95,3,1,7,101,110,118,50,52,57,57,96,2,96,16,4,8,35, +11,2,69,3,1,7,101,110,118,50,53,48,48,97,16,4,8,34,11,65,102, +105,114,115,116,98,3,1,7,101,110,118,50,53,48,54,99,18,106,2,4,8, +42,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,8,34,16,4,8, +41,11,64,114,101,115,116,100,3,1,7,101,110,118,50,53,48,57,101,16,8, +8,40,11,64,117,113,115,100,102,65,111,108,100,45,108,103,61,108,104,3,1, +7,101,110,118,50,53,49,49,105,2,105,2,105,18,158,94,107,2,86,8,44, +37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,8,34,8,41,8,40, +16,4,8,43,11,65,114,101,115,116,120,106,3,1,7,101,110,118,50,53,49, +51,107,158,2,66,8,44,8,44,18,105,72,108,105,115,116,45,62,118,101,99, +116,111,114,108,8,47,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35, +16,4,8,46,11,2,104,3,1,7,101,110,118,50,53,49,52,109,16,4,8, +45,11,62,108,50,110,3,1,7,101,110,118,50,53,49,53,111,18,105,63,98, +111,120,112,8,50,37,36,35,8,27,8,26,8,38,8,37,8,36,8,35,16, +4,8,49,11,61,118,113,3,1,7,101,110,118,50,53,49,54,114,16,4,8, +48,11,62,113,118,115,3,1,7,101,110,118,50,53,49,55,116,11,16,5,93, +2,9,27,20,15,159,35,34,39,89,162,34,35,48,9,224,1,0,87,94,28, +248,80,158,36,34,195,12,250,22,252,39,2,11,6,10,10,98,97,100,32,115, +121,110,116,97,120,117,197,27,248,80,158,37,35,196,28,248,80,158,37,36,193, +20,15,159,36,35,39,28,28,248,80,158,37,37,193,248,80,158,37,36,248,80, +158,38,35,194,10,248,80,158,37,38,193,250,22,209,196,251,22,59,20,15,159, +43,36,39,248,80,158,44,38,200,249,22,51,20,15,159,45,37,39,248,80,158, +46,35,202,20,15,159,43,38,39,198,35,20,98,159,34,16,5,2,33,2,27, +2,31,2,29,2,24,16,5,18,16,2,158,2,77,56,8,51,18,100,10,8, +55,37,36,35,16,4,8,54,11,2,77,3,1,7,101,110,118,50,53,49,57, +118,16,4,8,53,11,2,83,3,1,7,101,110,118,50,53,50,48,119,16,4, +8,52,11,61,101,120,3,1,7,101,110,118,50,53,50,49,121,18,16,2,158, +62,105,102,122,8,55,8,56,18,16,2,158,2,9,8,55,8,57,18,158,11, +8,55,11,16,5,93,2,5,27,20,15,159,35,34,40,89,162,34,35,51,9, +224,1,0,87,94,28,248,80,158,36,34,195,250,22,252,39,2,11,6,10,10, +98,97,100,32,115,121,110,116,97,120,123,197,12,27,248,80,158,37,35,196,28, +248,80,158,37,36,193,20,15,159,36,35,40,28,28,248,80,158,37,37,193,248, +80,158,37,36,248,80,158,38,35,194,11,248,80,158,37,38,193,28,248,80,158, +37,39,193,250,22,209,196,250,22,59,20,15,159,42,36,40,248,22,59,249,22, +59,67,111,114,45,112,97,114,116,124,248,80,158,46,38,202,251,22,59,20,15, +159,46,37,40,2,124,2,124,249,22,51,20,15,159,48,38,40,248,80,158,49, +35,205,198,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97, +120,125,198,35,20,98,159,34,16,6,2,75,2,27,2,31,2,29,2,24,2, +33,16,5,18,8,51,18,100,11,8,61,37,36,35,16,4,8,60,11,2,77, +3,1,7,101,110,118,50,53,50,51,126,16,4,8,59,11,2,83,3,1,7, +101,110,118,50,53,50,52,127,16,4,8,58,11,2,120,3,1,7,101,110,118, +50,53,50,53,128,18,101,2,6,8,63,37,36,35,8,60,8,59,8,58,16, +4,8,62,11,63,116,109,112,129,3,1,7,101,110,118,50,53,50,54,130,18, +16,2,158,2,122,8,63,8,64,18,16,2,158,2,5,8,63,8,65,11,93, +83,159,34,93,80,159,34,34,35,32,131,89,162,34,36,39,2,4,222,28,248, +22,58,193,249,22,65,194,195,250,22,252,40,2,2,66,6,11,11,112,114,111, +112,101,114,32,108,105,115,116,132,195,93,68,35,37,107,101,114,110,101,108,133, +94,2,25,2,133,0}; + EVAL_ONE_SIZED_STR((char *)expr, 4835); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,49,252,231,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,49,252,234,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37,99,111, 110,100,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34,16,0, 16,0,11,11,16,0,34,11,16,1,64,99,111,110,100,3,16,1,11,16,1, @@ -378,28 +376,28 @@ 11,16,2,2,3,2,2,98,36,10,35,11,94,159,71,35,37,113,113,45,97, 110,100,45,111,114,22,9,11,159,2,11,9,11,16,0,96,35,8,254,1,11, 16,0,18,158,93,102,64,118,111,105,100,23,45,37,36,35,16,4,44,11,2, -21,3,1,7,101,110,118,50,54,50,51,24,16,4,43,11,67,105,110,45,102, -111,114,109,25,3,1,7,101,110,118,50,54,50,52,26,16,6,42,11,64,102, -111,114,109,27,66,115,101,114,114,111,114,28,3,1,7,101,110,118,50,54,50, -53,29,2,29,16,4,41,11,2,4,3,1,7,101,110,118,50,54,50,55,30, +21,3,1,7,101,110,118,50,53,51,48,24,16,4,43,11,67,105,110,45,102, +111,114,109,25,3,1,7,101,110,118,50,53,51,49,26,16,6,42,11,64,102, +111,114,109,27,66,115,101,114,114,111,114,28,3,1,7,101,110,118,50,53,51, +50,29,2,29,16,4,41,11,2,4,3,1,7,101,110,118,50,53,51,52,30, 16,6,40,11,65,116,101,115,116,115,31,66,102,105,114,115,116,63,32,3,1, -7,101,110,118,50,54,50,56,33,2,33,45,18,104,64,101,108,115,101,34,48, +7,101,110,118,50,53,51,53,33,2,33,45,18,104,64,101,108,115,101,34,48, 37,36,35,44,43,42,41,40,16,6,47,11,64,108,105,110,101,35,64,114,101, -115,116,36,3,1,7,101,110,118,50,54,50,57,37,2,37,16,6,46,11,64, -116,101,115,116,38,65,118,97,108,117,101,39,3,1,7,101,110,118,50,54,51, -48,40,2,40,18,104,62,61,62,41,50,37,36,35,44,43,42,41,40,47,16, +115,116,36,3,1,7,101,110,118,50,53,51,54,37,2,37,16,6,46,11,64, +116,101,115,116,38,65,118,97,108,117,101,39,3,1,7,101,110,118,50,53,51, +55,40,2,40,18,104,62,61,62,41,50,37,36,35,44,43,42,41,40,47,16, 8,49,11,2,38,2,39,65,101,108,115,101,63,42,2,40,2,40,2,40,18, 105,70,108,101,116,45,118,97,108,117,101,115,43,52,37,36,35,44,43,42,41, -40,47,49,16,4,51,11,63,103,101,110,44,3,1,7,101,110,118,50,54,51, -49,45,18,158,62,105,102,46,52,18,158,2,46,50,18,158,2,0,50,18,158, -2,0,50,18,105,2,43,54,37,36,35,44,43,42,41,40,47,49,16,4,53, -11,2,44,3,1,7,101,110,118,50,54,51,50,47,18,158,2,46,54,18,158, -2,46,50,18,158,2,0,50,11,9,93,68,35,37,107,101,114,110,101,108,48, -95,2,11,2,22,2,48,0}; - EVAL_ONE_SIZED_STR((char *)expr, 1267); +40,47,49,16,4,51,11,63,103,101,110,44,3,1,7,101,110,118,50,53,51, +56,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158,2,46,50,54,18, +16,2,158,2,0,50,55,18,55,18,105,2,43,57,37,36,35,44,43,42,41, +40,47,49,16,4,56,11,2,44,3,1,7,101,110,118,50,53,51,57,47,18, +16,2,158,2,46,57,58,18,54,18,55,11,9,93,68,35,37,107,101,114,110, +101,108,48,95,2,11,2,22,2,48,0}; + EVAL_ONE_SIZED_STR((char *)expr, 1270); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,25,252,68,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,25,252,68,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,73,35,37,115,116, 114,117,99,116,45,105,110,102,111,1,29,2,11,11,10,10,10,34,80,158,34, 34,20,98,159,34,16,9,30,3,2,2,74,105,100,101,110,116,105,102,105,101, @@ -455,7 +453,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1104); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,37,252,208,4,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,37,252,208,4,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,71,35,37,100,115, 45,104,101,108,112,101,114,1,29,2,11,11,10,10,10,34,80,158,34,34,20, 98,159,34,16,6,30,3,2,2,1,20,108,105,115,116,45,62,105,109,109,117, @@ -474,7 +472,7 @@ 35,248,22,53,196,83,159,34,93,80,159,34,35,35,89,162,34,38,8,32,2, 6,223,0,27,28,197,247,22,48,11,27,28,198,89,162,8,36,35,40,62,113, 115,16,223,1,28,193,249,22,59,194,249,22,59,72,113,117,111,116,101,45,115, -121,110,116,97,120,17,197,11,22,7,27,28,197,249,22,252,82,3,199,32,18, +121,110,116,97,120,17,197,11,22,7,27,28,197,249,22,252,87,3,199,32,18, 89,162,8,44,34,34,9,222,11,11,87,94,28,197,28,28,248,80,158,38,36, 193,248,22,252,9,2,248,80,158,39,37,194,10,251,22,252,39,2,11,28,248, 80,158,42,36,197,6,63,63,112,97,114,101,110,116,32,115,116,114,117,99,116, @@ -518,15 +516,15 @@ EVAL_ONE_SIZED_STR((char *)expr, 1244); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,123,252,23,12,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,123,252,43,12,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,74,35,37,100,101, 102,105,110,101,45,101,116,45,97,108,1,29,2,11,11,10,10,10,34,80,158, -34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,6,73,100,101, -102,105,110,101,45,115,116,114,117,99,116,3,66,108,101,116,47,101,99,4,66, -117,110,108,101,115,115,5,64,119,104,101,110,6,74,45,100,101,102,105,110,101, -45,115,121,110,116,97,120,7,67,45,100,101,102,105,110,101,8,16,6,11,11, +34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,6,74,45,100, +101,102,105,110,101,45,115,121,110,116,97,120,3,66,117,110,108,101,115,115,4, +73,100,101,102,105,110,101,45,115,116,114,117,99,116,5,66,108,101,116,47,101, +99,6,64,119,104,101,110,7,67,45,100,101,102,105,110,101,8,16,6,11,11, 11,11,11,11,16,6,2,3,2,4,2,5,2,6,2,7,2,8,34,40,97, -16,5,94,2,8,2,7,27,20,15,159,35,34,39,27,89,162,8,36,35,37, +16,5,94,2,8,2,3,27,20,15,159,35,34,39,27,89,162,8,36,35,37, 69,109,107,45,100,101,102,105,110,101,9,224,2,1,89,162,8,36,35,53,9, 225,1,0,2,27,248,80,158,38,34,197,27,248,80,158,39,35,194,28,248,80, 158,39,36,193,250,22,209,198,250,22,61,200,248,22,59,199,249,80,158,46,37, @@ -545,153 +543,154 @@ 114,24,9,11,159,73,35,37,115,116,114,117,99,116,45,105,110,102,111,25,9, 11,159,66,35,37,99,111,110,100,26,9,11,159,2,19,9,11,159,2,12,9, 11,16,0,96,35,8,254,1,11,16,0,18,103,2,23,46,37,36,35,16,4, -45,11,2,23,3,1,7,101,110,118,50,54,54,51,27,16,4,44,11,64,98, -97,115,101,28,3,1,7,101,110,118,50,54,54,53,29,16,4,43,11,64,99, -111,100,101,30,3,1,7,101,110,118,50,54,54,54,31,16,4,42,11,64,98, -111,100,121,32,3,1,7,101,110,118,50,54,54,55,33,16,4,41,11,65,102, -105,114,115,116,34,3,1,7,101,110,118,50,54,54,56,35,16,4,40,11,65, -112,98,111,100,121,36,3,1,7,101,110,118,50,54,54,57,37,18,99,73,100, +45,11,2,23,3,1,7,101,110,118,50,53,55,48,27,16,4,44,11,64,98, +97,115,101,28,3,1,7,101,110,118,50,53,55,50,29,16,4,43,11,64,99, +111,100,101,30,3,1,7,101,110,118,50,53,55,51,31,16,4,42,11,64,98, +111,100,121,32,3,1,7,101,110,118,50,53,55,52,33,16,4,41,11,65,102, +105,114,115,116,34,3,1,7,101,110,118,50,53,55,53,35,16,4,40,11,65, +112,98,111,100,121,36,3,1,7,101,110,118,50,53,55,54,37,18,99,73,100, 101,102,105,110,101,45,118,97,108,117,101,115,38,48,37,36,35,45,16,4,47, -11,2,9,3,1,7,101,110,118,50,54,54,52,39,18,158,75,100,101,102,105, -110,101,45,115,121,110,116,97,120,101,115,40,48,11,16,5,93,2,6,89,162, -34,35,47,9,223,0,27,248,22,216,195,28,28,192,249,22,183,248,22,64,195, -36,11,250,22,209,20,15,159,38,34,36,250,22,59,20,15,159,41,35,36,248, -80,158,42,34,248,80,158,43,35,202,249,22,61,20,15,159,43,36,36,248,80, -158,44,35,248,80,158,45,35,204,197,250,22,252,39,2,11,6,10,10,98,97, -100,32,115,121,110,116,97,120,41,197,34,20,98,159,34,16,2,2,14,2,11, -16,3,18,99,2,23,51,37,36,35,16,4,50,11,61,120,42,3,1,7,101, -110,118,50,54,55,49,43,16,4,49,11,61,108,44,3,1,7,101,110,118,50, -54,55,50,45,18,158,62,105,102,46,51,18,158,2,0,51,11,16,5,93,2, -5,89,162,34,35,47,9,223,0,27,248,22,216,195,28,28,192,249,22,183,248, -22,64,195,36,11,250,22,209,20,15,159,38,34,34,251,22,59,20,15,159,42, -35,34,248,22,78,200,20,15,159,42,36,34,249,22,61,20,15,159,44,37,34, -248,22,80,202,197,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110, -116,97,120,47,197,34,20,98,159,34,16,0,16,4,18,99,2,23,54,37,36, -35,16,4,53,11,2,42,3,1,7,101,110,118,50,54,55,52,48,16,4,52, -11,2,44,3,1,7,101,110,118,50,54,55,53,49,18,158,2,46,54,18,158, -93,158,64,118,111,105,100,50,54,54,18,158,2,0,54,11,16,5,93,2,4, -89,162,34,35,50,9,223,0,27,248,22,216,195,28,28,192,28,249,22,183,248, -22,64,195,36,248,80,158,36,34,248,22,78,194,11,11,27,248,22,78,194,27, -248,80,158,38,35,248,80,158,39,35,198,250,22,209,20,15,159,40,34,38,249, -22,59,67,99,97,108,108,47,101,99,51,250,22,61,2,10,248,22,59,202,249, -80,158,47,36,248,80,158,48,37,203,9,199,250,22,252,39,2,11,6,10,10, -98,97,100,32,115,121,110,116,97,120,52,197,34,20,98,159,34,16,4,2,16, -2,11,2,18,2,21,16,1,18,100,2,23,58,37,36,35,16,4,57,11,2, -30,3,1,7,101,110,118,50,54,55,55,53,16,4,56,11,2,44,3,1,7, -101,110,118,50,54,55,56,54,16,6,55,11,63,118,97,114,55,65,101,120,112, -114,115,56,3,1,7,101,110,118,50,54,55,57,57,2,57,11,16,5,93,2, -3,27,89,162,8,36,38,8,26,69,109,97,107,101,45,99,111,114,101,58,223, -1,250,22,59,70,108,101,116,45,118,97,108,117,101,115,59,248,22,59,249,22, -59,21,97,64,116,121,112,101,60,65,109,97,107,101,114,61,64,112,114,101,100, -62,66,97,99,99,101,115,115,63,66,109,117,116,97,116,101,64,26,8,22,59, -76,109,97,107,101,45,115,116,114,117,99,116,45,116,121,112,101,65,249,22,59, -65,113,117,111,116,101,66,23,17,23,17,248,22,64,23,19,34,11,64,110,117, -108,108,67,23,16,252,22,61,66,118,97,108,117,101,115,68,2,60,2,61,2, -62,249,80,158,44,34,28,248,22,57,23,15,9,250,22,61,251,22,59,1,26, -109,97,107,101,45,115,116,114,117,99,116,45,102,105,101,108,100,45,97,99,99, -101,115,115,111,114,69,2,63,34,249,22,59,2,66,248,22,52,23,24,251,22, -59,1,25,109,97,107,101,45,115,116,114,117,99,116,45,102,105,101,108,100,45, -109,117,116,97,116,111,114,70,2,64,34,249,22,59,2,66,248,22,52,23,24, -249,32,71,89,162,8,100,36,51,64,108,111,111,112,72,222,28,248,22,57,193, -9,250,22,61,251,22,59,2,69,2,63,200,249,22,59,2,66,248,22,52,202, -251,22,59,2,70,2,64,200,249,22,59,2,66,248,22,52,202,27,248,22,53, -197,27,248,22,170,199,28,248,22,57,194,9,250,22,61,251,22,59,2,69,2, -63,199,249,22,59,2,66,248,22,52,203,251,22,59,2,70,2,64,199,249,22, -59,2,66,248,22,52,203,249,2,71,248,22,53,199,248,22,170,198,248,22,53, -23,20,35,9,89,162,8,36,35,8,29,9,224,1,0,87,94,28,248,80,158, -36,35,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97, -120,73,197,12,27,248,80,158,37,36,248,80,158,38,37,197,87,100,27,248,22, -50,194,28,192,192,249,32,74,89,162,35,37,42,72,115,121,110,116,97,120,45, -101,114,114,111,114,75,222,252,22,1,22,252,39,2,11,198,197,199,198,6,17, -17,101,109,112,116,121,32,100,101,99,108,97,114,97,116,105,111,110,76,27,248, -80,158,38,38,194,28,192,192,249,2,74,198,6,18,18,105,108,108,101,103,97, -108,32,117,115,101,32,111,102,32,96,46,39,77,27,250,22,184,36,248,22,64, -197,37,28,192,192,249,2,74,198,6,21,21,119,114,111,110,103,32,110,117,109, -98,101,114,32,111,102,32,112,97,114,116,115,78,27,248,80,158,38,35,248,22, -52,195,28,192,192,27,28,248,80,158,39,39,248,22,52,196,28,248,80,158,39, -35,248,80,158,40,40,248,22,52,197,28,248,80,158,39,39,248,80,158,40,37, -248,22,52,197,28,248,80,158,39,35,248,80,158,40,40,248,80,158,41,37,248, -22,52,198,248,80,158,39,41,248,80,158,40,37,248,80,158,41,37,248,22,52, -198,11,11,11,11,28,192,192,249,2,74,199,6,55,55,102,105,114,115,116,32, -112,97,114,116,32,109,117,115,116,32,98,101,32,97,110,32,105,100,101,110,116, -105,102,105,101,114,32,111,114,32,112,97,105,114,32,111,102,32,105,100,101,110, -116,105,102,105,101,114,115,79,27,248,80,158,38,38,248,22,78,195,28,192,192, -28,248,80,158,38,39,248,22,78,195,249,2,74,198,6,41,41,105,108,108,101, -103,97,108,32,117,115,101,32,111,102,32,96,46,39,32,105,110,32,102,105,101, -108,100,32,110,97,109,101,32,115,101,113,117,101,110,99,101,80,249,2,74,198, -6,30,30,102,105,101,108,100,32,110,97,109,101,115,32,109,117,115,116,32,98, -101,32,97,32,115,101,113,117,101,110,99,101,81,249,22,3,89,162,34,35,41, -9,224,4,5,27,248,80,158,37,35,196,28,192,192,250,2,74,196,6,27,27, -102,105,101,108,100,32,110,97,109,101,32,110,111,116,32,97,32,105,100,101,110, -116,105,102,105,101,114,82,198,248,80,158,39,36,248,22,78,196,28,249,22,71, -247,22,252,84,3,21,93,70,101,120,112,114,101,115,115,105,111,110,83,249,2, -74,197,6,35,35,97,108,108,111,119,101,100,32,111,110,108,121,32,105,110,32, -100,101,102,105,110,105,116,105,111,110,32,99,111,110,116,101,120,116,115,84,12, -27,28,248,80,158,38,35,248,22,52,195,248,22,52,194,248,80,158,38,40,248, -22,52,195,27,248,80,158,39,36,248,22,78,196,27,28,248,22,57,248,22,80, -197,20,15,159,39,34,43,248,22,87,196,27,28,248,80,158,41,35,248,22,52, -198,11,248,80,158,41,40,248,80,158,42,37,248,22,52,199,27,249,22,2,89, -162,8,36,35,39,9,223,6,250,22,209,195,196,195,27,248,22,44,248,22,210, -201,27,249,22,2,22,44,249,22,2,22,210,203,249,22,2,22,42,249,22,65, -250,22,59,249,22,252,159,1,6,7,7,115,116,114,117,99,116,58,85,202,249, -22,252,159,1,6,5,5,109,97,107,101,45,86,202,249,22,252,159,1,202,6, -1,1,63,87,249,22,1,22,65,249,22,2,89,162,8,36,35,43,9,223,9, -249,22,59,250,22,252,159,1,197,6,1,1,45,88,198,252,22,252,159,1,6, -4,4,115,101,116,45,89,199,6,1,1,45,90,200,6,1,1,33,91,200,91, -159,36,11,90,161,36,34,11,251,80,158,47,42,206,199,198,10,27,250,22,209, -20,15,159,47,35,43,250,22,59,2,0,250,22,59,2,38,204,27,251,23,23, -23,21,28,23,19,69,105,110,115,112,101,99,116,111,114,92,11,23,15,23,20, -28,23,15,251,22,59,2,59,248,22,59,249,22,59,21,93,2,92,23,22,21, -95,2,46,96,2,46,2,92,94,63,110,111,116,93,94,70,105,110,115,112,101, -99,116,111,114,63,94,2,92,11,96,76,114,97,105,115,101,45,116,121,112,101, -45,101,114,114,111,114,95,94,2,66,2,3,6,15,15,105,110,115,112,101,99, -116,111,114,32,111,114,32,35,102,96,2,92,196,192,250,22,59,2,40,248,22, -59,23,17,203,206,28,196,250,22,218,195,75,100,105,115,97,112,112,101,97,114, -101,100,45,117,115,101,97,248,22,252,87,3,200,192,35,20,98,159,34,16,9, -2,18,2,16,2,21,2,11,30,98,2,12,69,115,116,120,45,108,105,115,116, -63,99,8,30,100,2,12,69,115,116,120,45,112,97,105,114,63,101,11,2,14, -30,102,2,12,69,115,116,120,45,110,117,108,108,63,103,10,30,104,2,24,72, -103,101,116,45,115,116,120,45,105,110,102,111,105,0,16,2,18,158,93,101,77, -99,117,114,114,101,110,116,45,105,110,115,112,101,99,116,111,114,106,8,29,37, -36,35,16,4,8,28,11,2,58,3,1,7,101,110,118,50,54,56,49,107,16, -4,8,27,11,63,115,116,120,108,3,1,7,101,110,118,50,54,56,53,109,16, -4,8,26,11,2,32,3,1,7,101,110,118,50,54,56,54,110,16,6,59,11, -2,75,78,98,117,105,108,100,45,115,116,114,117,99,116,45,110,97,109,101,115, -111,3,1,7,101,110,118,50,54,56,55,112,2,112,8,29,18,104,2,23,8, -33,37,36,35,8,28,8,27,8,26,59,16,10,8,32,11,64,110,97,109,101, -113,71,102,105,101,108,100,45,110,97,109,101,115,114,2,92,68,115,117,112,101, -114,45,105,100,115,3,1,7,101,110,118,50,55,48,49,116,2,116,2,116,2, -116,16,4,8,31,11,73,100,101,102,105,110,101,100,45,110,97,109,101,115,117, -3,1,7,101,110,118,50,55,48,50,118,16,6,8,30,11,76,115,117,112,101, -114,45,105,100,47,115,116,114,117,99,116,58,119,68,115,116,120,45,105,110,102, -111,120,3,1,7,101,110,118,50,55,48,52,121,2,121,11,9,93,68,35,37, -107,101,114,110,101,108,122,98,2,122,2,12,2,19,2,26,2,25,2,24,0}; - EVAL_ONE_SIZED_STR((char *)expr, 3107); +11,2,9,3,1,7,101,110,118,50,53,55,49,39,18,16,2,158,75,100,101, +102,105,110,101,45,115,121,110,116,97,120,101,115,40,48,49,11,16,5,93,2, +7,89,162,34,35,47,9,223,0,27,248,22,216,195,28,28,192,249,22,183,248, +22,64,195,36,11,250,22,209,20,15,159,38,34,36,250,22,59,20,15,159,41, +35,36,248,80,158,42,34,248,80,158,43,35,202,249,22,61,20,15,159,43,36, +36,248,80,158,44,35,248,80,158,45,35,204,197,250,22,252,39,2,11,6,10, +10,98,97,100,32,115,121,110,116,97,120,41,197,34,20,98,159,34,16,2,2, +14,2,11,16,3,18,99,2,23,52,37,36,35,16,4,51,11,61,120,42,3, +1,7,101,110,118,50,53,55,56,43,16,4,50,11,61,108,44,3,1,7,101, +110,118,50,53,55,57,45,18,16,2,158,62,105,102,46,52,53,18,16,2,158, +2,0,52,54,11,16,5,93,2,4,89,162,34,35,47,9,223,0,27,248,22, +216,195,28,28,192,249,22,183,248,22,64,195,36,11,250,22,209,20,15,159,38, +34,34,251,22,59,20,15,159,42,35,34,248,22,78,200,20,15,159,42,36,34, +249,22,61,20,15,159,44,37,34,248,22,80,202,197,250,22,252,39,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,47,197,34,20,98,159,34,16,0, +16,4,18,99,2,23,57,37,36,35,16,4,56,11,2,42,3,1,7,101,110, +118,50,53,56,49,48,16,4,55,11,2,44,3,1,7,101,110,118,50,53,56, +50,49,18,16,2,158,2,46,57,58,18,158,94,10,64,118,111,105,100,50,57, +18,16,2,158,2,0,57,59,11,16,5,93,2,6,89,162,34,35,50,9,223, +0,27,248,22,216,195,28,28,192,28,249,22,183,248,22,64,195,36,248,80,158, +36,34,248,22,78,194,11,11,27,248,22,78,194,27,248,80,158,38,35,248,80, +158,39,35,198,250,22,209,20,15,159,40,34,38,249,22,59,67,99,97,108,108, +47,101,99,51,250,22,61,2,10,248,22,59,202,249,80,158,47,36,248,80,158, +48,37,203,9,199,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110, +116,97,120,52,197,34,20,98,159,34,16,4,2,16,2,11,2,18,2,21,16, +1,18,100,2,23,8,29,37,36,35,16,4,8,28,11,2,30,3,1,7,101, +110,118,50,53,56,52,53,16,4,8,27,11,2,44,3,1,7,101,110,118,50, +53,56,53,54,16,6,8,26,11,63,118,97,114,55,65,101,120,112,114,115,56, +3,1,7,101,110,118,50,53,56,54,57,2,57,11,16,5,93,2,5,27,89, +162,8,36,38,8,26,69,109,97,107,101,45,99,111,114,101,58,223,1,250,22, +59,70,108,101,116,45,118,97,108,117,101,115,59,248,22,59,249,22,59,21,97, +64,116,121,112,101,60,65,109,97,107,101,114,61,64,112,114,101,100,62,66,97, +99,99,101,115,115,63,66,109,117,116,97,116,101,64,26,8,22,59,76,109,97, +107,101,45,115,116,114,117,99,116,45,116,121,112,101,65,249,22,59,65,113,117, +111,116,101,66,23,17,23,17,248,22,64,23,19,34,11,64,110,117,108,108,67, +23,16,252,22,61,66,118,97,108,117,101,115,68,2,60,2,61,2,62,249,80, +158,44,34,28,248,22,57,23,15,9,250,22,61,251,22,59,1,26,109,97,107, +101,45,115,116,114,117,99,116,45,102,105,101,108,100,45,97,99,99,101,115,115, +111,114,69,2,63,34,249,22,59,2,66,248,22,52,23,24,251,22,59,1,25, +109,97,107,101,45,115,116,114,117,99,116,45,102,105,101,108,100,45,109,117,116, +97,116,111,114,70,2,64,34,249,22,59,2,66,248,22,52,23,24,249,32,71, +89,162,8,100,36,51,64,108,111,111,112,72,222,28,248,22,57,193,9,250,22, +61,251,22,59,2,69,2,63,200,249,22,59,2,66,248,22,52,202,251,22,59, +2,70,2,64,200,249,22,59,2,66,248,22,52,202,27,248,22,53,197,27,248, +22,170,199,28,248,22,57,194,9,250,22,61,251,22,59,2,69,2,63,199,249, +22,59,2,66,248,22,52,203,251,22,59,2,70,2,64,199,249,22,59,2,66, +248,22,52,203,249,2,71,248,22,53,199,248,22,170,198,248,22,53,23,20,35, +9,89,162,8,36,35,8,29,9,224,1,0,87,94,28,248,80,158,36,35,195, +250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,73,197, +12,27,248,80,158,37,36,248,80,158,38,37,197,87,100,27,248,22,50,194,28, +192,192,249,32,74,89,162,35,37,42,72,115,121,110,116,97,120,45,101,114,114, +111,114,75,222,252,22,1,22,252,39,2,11,198,197,199,198,6,17,17,101,109, +112,116,121,32,100,101,99,108,97,114,97,116,105,111,110,76,27,248,80,158,38, +38,194,28,192,192,249,2,74,198,6,18,18,105,108,108,101,103,97,108,32,117, +115,101,32,111,102,32,96,46,39,77,27,250,22,184,36,248,22,64,197,37,28, +192,192,249,2,74,198,6,21,21,119,114,111,110,103,32,110,117,109,98,101,114, +32,111,102,32,112,97,114,116,115,78,27,248,80,158,38,35,248,22,52,195,28, +192,192,27,28,248,80,158,39,39,248,22,52,196,28,248,80,158,39,35,248,80, +158,40,40,248,22,52,197,28,248,80,158,39,39,248,80,158,40,37,248,22,52, +197,28,248,80,158,39,35,248,80,158,40,40,248,80,158,41,37,248,22,52,198, +248,80,158,39,41,248,80,158,40,37,248,80,158,41,37,248,22,52,198,11,11, +11,11,28,192,192,249,2,74,199,6,55,55,102,105,114,115,116,32,112,97,114, +116,32,109,117,115,116,32,98,101,32,97,110,32,105,100,101,110,116,105,102,105, +101,114,32,111,114,32,112,97,105,114,32,111,102,32,105,100,101,110,116,105,102, +105,101,114,115,79,27,248,80,158,38,38,248,22,78,195,28,192,192,28,248,80, +158,38,39,248,22,78,195,249,2,74,198,6,41,41,105,108,108,101,103,97,108, +32,117,115,101,32,111,102,32,96,46,39,32,105,110,32,102,105,101,108,100,32, +110,97,109,101,32,115,101,113,117,101,110,99,101,80,249,2,74,198,6,30,30, +102,105,101,108,100,32,110,97,109,101,115,32,109,117,115,116,32,98,101,32,97, +32,115,101,113,117,101,110,99,101,81,249,22,3,89,162,34,35,41,9,224,4, +5,27,248,80,158,37,35,196,28,192,192,250,2,74,196,6,27,27,102,105,101, +108,100,32,110,97,109,101,32,110,111,116,32,97,32,105,100,101,110,116,105,102, +105,101,114,82,198,248,80,158,39,36,248,22,78,196,28,249,22,71,247,22,252, +89,3,21,93,70,101,120,112,114,101,115,115,105,111,110,83,249,2,74,197,6, +35,35,97,108,108,111,119,101,100,32,111,110,108,121,32,105,110,32,100,101,102, +105,110,105,116,105,111,110,32,99,111,110,116,101,120,116,115,84,12,27,28,248, +80,158,38,35,248,22,52,195,248,22,52,194,248,80,158,38,40,248,22,52,195, +27,248,80,158,39,36,248,22,78,196,27,28,248,22,57,248,22,80,197,20,15, +159,39,34,43,248,22,87,196,27,28,248,80,158,41,35,248,22,52,198,11,248, +80,158,41,40,248,80,158,42,37,248,22,52,199,27,249,22,2,89,162,8,36, +35,39,9,223,6,250,22,209,195,196,195,27,248,22,44,248,22,210,201,27,249, +22,2,22,44,249,22,2,22,210,203,249,22,2,22,42,249,22,65,250,22,59, +249,22,252,159,1,6,7,7,115,116,114,117,99,116,58,85,202,249,22,252,159, +1,6,5,5,109,97,107,101,45,86,202,249,22,252,159,1,202,6,1,1,63, +87,249,22,1,22,65,249,22,2,89,162,8,36,35,43,9,223,9,249,22,59, +250,22,252,159,1,197,6,1,1,45,88,198,252,22,252,159,1,6,4,4,115, +101,116,45,89,199,6,1,1,45,90,200,6,1,1,33,91,200,91,159,36,11, +90,161,36,34,11,251,80,158,47,42,206,199,198,10,27,250,22,209,20,15,159, +47,35,43,250,22,59,2,0,250,22,59,2,38,204,27,251,23,23,23,21,28, +23,19,69,105,110,115,112,101,99,116,111,114,92,11,23,15,23,20,28,23,15, +251,22,59,2,59,248,22,59,249,22,59,21,93,2,92,23,22,21,95,2,46, +96,2,46,2,92,94,63,110,111,116,93,94,70,105,110,115,112,101,99,116,111, +114,63,94,2,92,11,96,76,114,97,105,115,101,45,116,121,112,101,45,101,114, +114,111,114,95,94,2,66,2,5,6,15,15,105,110,115,112,101,99,116,111,114, +32,111,114,32,35,102,96,2,92,196,192,250,22,59,2,40,248,22,59,23,17, +203,206,28,196,250,22,218,195,75,100,105,115,97,112,112,101,97,114,101,100,45, +117,115,101,97,248,22,252,92,3,200,192,35,20,98,159,34,16,9,2,18,2, +16,2,21,2,11,30,98,2,12,69,115,116,120,45,108,105,115,116,63,99,8, +30,100,2,12,69,115,116,120,45,112,97,105,114,63,101,11,2,14,30,102,2, +12,69,115,116,120,45,110,117,108,108,63,103,10,30,104,2,24,72,103,101,116, +45,115,116,120,45,105,110,102,111,105,0,16,2,18,158,93,101,77,99,117,114, +114,101,110,116,45,105,110,115,112,101,99,116,111,114,106,8,34,37,36,35,16, +4,8,33,11,2,58,3,1,7,101,110,118,50,53,56,56,107,16,4,8,32, +11,63,115,116,120,108,3,1,7,101,110,118,50,53,57,50,109,16,4,8,31, +11,2,32,3,1,7,101,110,118,50,53,57,51,110,16,6,8,30,11,2,75, +78,98,117,105,108,100,45,115,116,114,117,99,116,45,110,97,109,101,115,111,3, +1,7,101,110,118,50,53,57,52,112,2,112,8,34,18,104,2,23,8,38,37, +36,35,8,33,8,32,8,31,8,30,16,10,8,37,11,64,110,97,109,101,113, +71,102,105,101,108,100,45,110,97,109,101,115,114,2,92,68,115,117,112,101,114, +45,105,100,115,3,1,7,101,110,118,50,54,48,56,116,2,116,2,116,2,116, +16,4,8,36,11,73,100,101,102,105,110,101,100,45,110,97,109,101,115,117,3, +1,7,101,110,118,50,54,48,57,118,16,6,8,35,11,76,115,117,112,101,114, +45,105,100,47,115,116,114,117,99,116,58,119,68,115,116,120,45,105,110,102,111, +120,3,1,7,101,110,118,50,54,49,49,121,2,121,11,9,93,68,35,37,107, +101,114,110,101,108,122,98,2,122,2,12,2,19,2,26,2,25,2,24,0}; + EVAL_ONE_SIZED_STR((char *)expr, 3127); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,21,252,37,1,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,21,252,37,1,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,74,35,37,115,109, 97,108,108,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,34,80,158, -34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,13,64,99,111, -110,100,3,70,113,117,97,115,105,113,117,111,116,101,4,66,117,110,108,101,115, -115,5,62,111,114,6,66,108,101,116,47,101,99,7,64,108,101,116,42,8,64, -119,104,101,110,9,66,108,101,116,114,101,99,10,67,45,100,101,102,105,110,101, -11,63,108,101,116,12,73,100,101,102,105,110,101,45,115,116,114,117,99,116,13, -74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,14,63,97,110,100,15, -16,13,66,35,37,99,111,110,100,16,71,35,37,113,113,45,97,110,100,45,111, -114,17,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,18,2,17,2, -18,2,17,2,18,2,17,2,18,2,17,2,18,2,18,2,17,16,13,2,3, +34,34,20,98,159,34,16,0,16,0,11,11,16,0,34,11,16,13,63,97,110, +100,3,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,4,62,111,114, +5,64,108,101,116,42,6,73,100,101,102,105,110,101,45,115,116,114,117,99,116, +7,66,108,101,116,114,101,99,8,63,108,101,116,9,70,113,117,97,115,105,113, +117,111,116,101,10,64,119,104,101,110,11,66,108,101,116,47,101,99,12,66,117, +110,108,101,115,115,13,67,45,100,101,102,105,110,101,14,64,99,111,110,100,15, +16,13,71,35,37,113,113,45,97,110,100,45,111,114,16,74,35,37,100,101,102, +105,110,101,45,101,116,45,97,108,17,2,16,2,16,2,17,2,16,2,16,2, +16,2,17,2,17,2,17,2,17,66,35,37,99,111,110,100,18,16,13,2,3, 2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2, 14,2,15,34,47,9,9,97,68,35,37,107,101,114,110,101,108,19,65,35,37, -115,116,120,20,2,17,2,16,2,18,9,0}; +115,116,120,20,2,16,2,18,2,17,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 305); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,237,252,142,50,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,231,252,135,53,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,115,64,35,37,115,99, 1,29,2,11,11,10,10,18,95,11,37,96,35,8,254,1,11,16,2,64,115, 101,116,33,3,68,35,37,107,101,114,110,101,108,4,42,80,158,34,34,20,98, -159,42,16,41,30,5,2,2,64,46,46,46,63,6,254,1,30,7,2,2,68, +159,42,16,43,30,5,2,2,64,46,46,46,63,6,254,1,30,7,2,2,68, 115,116,120,45,109,101,109,113,8,254,1,30,9,2,2,72,115,116,120,45,109, 101,109,113,45,112,111,115,10,254,1,30,11,2,2,73,115,116,120,45,109,101, 109,113,42,45,112,111,115,12,254,1,30,13,2,2,76,112,105,99,107,45,115, @@ -719,913 +718,1023 @@ 2,70,97,112,112,108,121,45,99,111,110,115,60,254,1,30,61,2,2,77,99, 104,101,99,107,45,110,111,116,45,112,97,116,116,101,114,110,62,254,1,30,63, 2,2,1,23,109,117,108,116,105,112,108,101,45,101,108,108,105,112,115,105,115, -45,118,97,114,115,63,64,254,1,30,65,2,2,72,110,111,45,101,108,108,105, -112,115,101,115,63,66,254,1,30,67,2,2,1,21,115,116,114,117,99,116,58, -115,121,110,116,97,120,45,109,97,112,112,105,110,103,68,254,1,30,69,2,2, -1,20,45,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105,110, -103,70,254,1,30,71,2,2,76,45,115,121,110,116,97,120,45,109,97,112,112, -105,110,103,63,72,254,1,30,73,2,2,78,115,121,110,116,97,120,45,109,97, -112,112,105,110,103,45,114,101,102,74,254,1,30,75,2,2,79,115,121,110,116, -97,120,45,109,97,112,112,105,110,103,45,115,101,116,33,76,254,1,30,77,2, -2,1,21,45,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,100,101, -112,116,104,78,254,1,30,79,2,2,1,22,45,115,121,110,116,97,120,45,109, -97,112,112,105,110,103,45,118,97,108,118,97,114,80,254,1,30,81,2,2,79, -109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105,110,103,82,254, -1,30,83,2,2,75,115,121,110,116,97,120,45,109,97,112,112,105,110,103,63, -84,254,1,30,85,2,2,1,20,115,121,110,116,97,120,45,109,97,112,112,105, -110,103,45,100,101,112,116,104,86,254,1,30,87,2,2,1,21,115,121,110,116, -97,120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,88,254,1,16, -3,18,98,63,46,46,46,89,41,98,40,10,34,11,94,159,74,35,37,115,109, -97,108,108,45,115,99,104,101,109,101,90,9,11,159,2,20,9,11,16,68,2, -82,2,2,2,31,2,2,2,37,2,2,2,86,2,2,2,80,2,2,2,29, -2,2,2,62,2,2,2,66,2,2,2,60,2,2,2,6,2,2,2,70,2, -2,2,88,2,2,2,54,2,2,2,74,2,2,2,16,2,2,2,76,2,2, -2,46,2,2,2,56,2,2,2,84,2,2,2,48,2,2,2,35,2,2,2, -8,2,2,2,58,2,2,2,72,2,2,2,64,2,2,2,78,2,2,2,52, -2,2,2,50,2,2,2,27,2,2,2,10,2,2,2,68,2,2,2,14,2, -2,2,12,2,2,2,18,2,2,96,39,35,11,16,0,35,16,4,38,11,61, -115,91,3,1,7,101,110,118,50,55,48,56,92,18,103,2,89,48,40,39,35, -16,10,47,11,61,112,93,67,112,114,111,116,111,45,114,94,61,107,95,64,100, -101,115,116,96,3,1,7,101,110,118,50,55,56,56,97,2,97,2,97,2,97, -16,6,46,11,68,101,120,112,97,110,100,101,114,98,63,116,111,112,99,3,1, -7,101,110,118,50,55,57,50,100,3,1,7,101,110,118,50,55,57,48,101,16, -6,45,11,2,98,2,99,2,100,2,101,16,10,44,11,69,108,111,99,97,108, -45,116,111,112,102,73,117,115,101,45,101,108,108,105,112,115,101,115,63,103,72, -117,115,101,45,116,97,105,108,45,112,111,115,104,65,104,97,115,104,33,105,3, -1,7,101,110,118,50,55,57,53,106,2,106,2,106,2,106,16,10,43,11,66, -112,45,104,101,97,100,107,68,101,108,45,99,111,117,110,116,108,66,114,101,115, -116,45,112,109,67,108,97,115,116,45,101,108,110,3,1,7,101,110,118,50,55, -57,54,111,2,111,2,111,2,111,16,4,42,11,64,108,111,111,112,112,3,1, -7,101,110,118,50,55,57,57,113,18,16,2,98,2,3,50,40,39,35,16,6, -49,11,64,115,101,108,102,114,63,115,116,120,115,3,1,7,101,110,118,50,56, -56,51,116,2,116,9,11,11,16,25,2,70,2,78,2,80,2,72,2,6,2, -35,2,37,2,31,2,60,2,56,2,58,2,62,2,52,2,18,2,54,2,29, -2,27,2,16,2,64,2,14,2,68,2,8,2,12,2,74,2,76,59,16,9, -10,10,10,10,10,10,10,10,10,16,9,2,48,2,46,2,50,2,82,2,66, -2,10,2,86,2,88,2,84,16,9,11,11,11,11,11,11,11,11,11,16,9, -2,48,2,46,2,50,2,82,2,66,2,10,2,86,2,88,2,84,43,43,9, -130,83,159,34,93,80,159,34,8,51,35,89,162,8,64,37,47,63,115,117,98, -117,223,0,28,28,195,28,248,80,158,35,47,195,27,248,80,158,36,42,196,28, -248,80,158,36,47,193,28,27,248,80,158,37,43,194,28,248,22,41,248,22,210, -194,249,22,223,194,20,15,159,38,34,8,41,11,248,22,252,9,2,27,248,80, -158,38,43,198,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,39,34, -8,41,11,11,11,11,11,91,159,36,11,90,161,36,34,11,27,248,80,158,38, -42,248,80,158,39,42,199,28,28,248,80,158,38,47,193,27,248,80,158,39,43, -194,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,40,34,8,41,11, -11,27,248,80,158,39,42,194,27,32,118,89,162,8,36,35,37,9,222,248,22, -59,248,22,59,194,28,28,248,80,158,40,47,194,27,248,80,158,41,43,195,28, -248,22,41,248,22,210,194,249,22,223,194,20,15,159,42,34,8,41,11,11,249, -80,159,41,8,52,35,248,80,158,42,42,196,32,119,89,162,8,36,35,38,9, -222,248,22,59,248,22,59,248,22,59,195,249,22,7,195,194,249,22,7,194,22, -59,27,250,80,159,40,8,51,35,199,248,80,158,41,43,201,10,249,22,65,249, -22,2,198,196,250,80,159,42,8,51,35,201,198,10,28,248,80,158,35,47,195, -27,248,80,158,36,43,196,28,28,196,28,248,80,158,36,50,193,28,28,248,22, -41,248,22,210,194,249,22,223,194,20,15,159,37,34,8,41,11,248,80,158,36, -47,248,80,158,37,42,197,11,11,11,250,80,159,38,8,51,35,197,248,80,158, -39,43,248,80,158,40,42,200,11,249,22,66,250,80,159,40,8,51,35,199,248, -80,158,41,43,201,201,250,80,159,40,8,51,35,199,248,80,158,41,42,201,201, -28,248,80,158,35,50,195,28,249,22,5,89,162,8,36,35,38,9,223,4,28, -248,22,206,194,249,22,221,194,195,11,195,9,248,22,59,195,28,249,80,158,36, -51,196,11,250,80,159,37,8,51,35,196,248,22,252,229,1,248,22,210,199,198, -9,83,159,34,93,80,159,34,8,52,35,89,162,8,64,36,44,2,112,223,0, -28,28,248,80,158,35,47,194,27,248,80,158,36,43,195,28,248,22,41,248,22, -210,194,249,22,223,194,20,15,159,37,34,8,41,11,11,27,248,80,158,36,42, -195,27,89,162,8,36,35,38,9,223,4,248,22,59,248,194,195,28,28,248,80, -158,37,47,194,27,248,80,158,38,43,195,28,248,22,41,248,22,210,194,249,22, -223,194,20,15,159,39,34,8,41,11,11,27,248,80,158,38,42,195,27,89,162, -8,36,35,39,9,223,6,248,22,59,248,22,59,248,195,196,28,28,248,80,158, -39,47,194,27,248,80,158,40,43,195,28,248,22,41,248,22,210,194,249,22,223, -194,20,15,159,41,34,8,41,11,11,249,80,159,40,8,52,35,248,80,158,41, -42,196,89,162,8,36,35,40,9,223,8,248,22,59,248,22,59,248,22,59,248, -196,197,249,22,7,195,194,249,22,7,195,194,249,22,7,195,196,83,159,34,93, -80,159,34,8,50,35,89,162,8,100,36,8,35,2,112,223,0,28,248,22,186, -195,193,249,22,209,11,249,22,59,27,248,22,171,200,28,248,22,186,193,198,249, -22,209,11,249,22,59,27,248,22,171,198,28,248,22,186,193,203,249,22,209,11, -249,22,59,27,248,22,171,198,28,248,22,186,193,23,16,249,22,209,11,249,22, -59,27,248,22,171,198,28,248,22,186,193,23,21,249,22,209,11,249,22,59,27, -248,22,171,198,28,248,22,186,193,23,26,249,22,209,11,249,22,59,249,80,159, -8,31,8,50,35,23,32,248,22,171,199,20,15,159,8,29,35,8,41,20,15, -159,58,35,8,41,20,15,159,53,35,8,41,20,15,159,48,35,8,41,20,15, -159,43,35,8,41,20,15,159,38,35,8,41,83,159,34,93,80,159,34,8,49, -35,89,162,8,64,37,48,2,112,223,0,28,28,248,80,158,35,47,194,27,248, -80,158,36,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,37, -34,8,41,11,11,27,248,80,158,36,42,195,27,248,22,170,197,27,248,80,158, -38,43,197,28,28,248,80,158,38,47,195,27,248,80,158,39,43,196,28,248,22, -41,248,22,210,194,249,22,223,194,20,15,159,40,34,8,41,11,11,27,248,80, -158,39,42,196,27,248,22,170,196,27,248,80,158,41,43,198,28,28,248,80,158, -41,47,195,27,248,80,158,42,43,196,28,248,22,41,248,22,210,194,249,22,223, -194,20,15,159,43,34,8,41,11,11,250,80,159,43,8,49,35,248,80,158,44, -42,198,248,22,170,197,248,80,158,44,43,198,250,22,7,196,197,195,250,22,7, -196,197,195,250,22,7,197,196,198,83,159,34,93,80,159,34,8,45,35,89,162, -34,43,8,45,63,109,38,101,120,223,0,28,28,199,28,248,80,158,35,47,198, -27,248,80,158,36,42,199,28,248,80,158,36,47,193,28,27,248,80,158,37,43, -194,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,38,34,8,41,11, -248,22,252,9,2,27,248,80,158,38,43,201,28,248,22,41,248,22,210,194,249, -22,223,194,20,15,159,39,34,8,41,11,11,11,11,11,28,248,80,158,35,41, -248,80,158,36,42,248,80,158,37,42,200,27,248,80,158,36,43,199,27,249,80, -159,38,44,35,195,199,91,159,37,11,90,161,37,34,11,26,9,80,159,48,8, -45,35,23,15,23,16,23,17,23,18,205,205,10,11,11,28,201,250,22,7,249, -22,2,22,59,200,11,11,27,249,80,159,42,45,35,198,32,121,89,162,8,44, -35,35,9,222,10,250,22,7,250,22,59,66,108,97,109,98,100,97,122,21,93, -61,101,123,251,22,61,62,105,102,124,21,94,69,115,116,120,45,108,105,115,116, -63,125,2,123,27,248,80,159,52,46,35,205,28,249,22,252,13,2,194,21,94, -64,108,105,115,116,126,2,123,28,23,25,21,94,69,115,116,120,45,62,108,105, -115,116,127,2,123,21,94,2,126,94,2,127,2,123,28,248,22,57,204,250,22, -61,66,97,110,100,109,97,112,128,250,22,59,2,122,21,93,2,123,198,21,93, -94,2,127,2,123,250,22,59,66,108,101,116,47,101,99,129,63,101,115,99,130, -250,22,59,63,108,101,116,131,248,22,59,249,22,59,61,108,132,250,22,61,63, -109,97,112,133,250,22,59,2,122,21,93,2,123,250,22,61,73,115,116,120,45, -99,104,101,99,107,47,101,115,99,134,23,18,21,93,2,130,21,93,94,2,127, -2,123,251,22,59,2,124,21,94,65,110,117,108,108,63,135,2,132,249,22,59, -65,113,117,111,116,101,136,27,249,22,2,32,137,89,97,8,44,35,35,9,222, -23,26,28,23,38,249,22,1,22,61,194,192,249,22,61,28,23,37,71,115,116, -120,45,114,111,116,97,116,101,42,138,70,115,116,120,45,114,111,116,97,116,101, -139,21,93,2,132,21,93,11,197,11,27,249,22,59,248,80,158,38,43,201,248, -80,158,38,43,248,80,158,39,42,202,27,248,80,158,37,42,248,80,158,38,42, -201,91,159,36,11,90,161,36,34,11,28,248,80,158,39,41,195,249,22,7,34, -10,28,248,80,158,39,47,195,87,94,28,27,248,80,158,40,43,196,28,248,22, -41,248,22,210,194,249,22,223,194,20,15,159,41,34,8,41,11,251,22,252,39, -2,248,22,210,202,6,54,54,109,105,115,112,108,97,99,101,100,32,101,108,108, -105,112,115,101,115,32,105,110,32,112,97,116,116,101,114,110,32,40,102,111,108, -108,111,119,115,32,111,116,104,101,114,32,101,108,108,105,112,115,101,115,41,140, -202,248,80,158,43,43,199,12,251,80,159,42,8,46,35,201,202,248,80,158,43, -42,199,35,249,22,7,35,11,91,159,43,11,90,161,37,34,11,28,23,17,26, -9,80,159,56,8,45,35,23,23,23,24,23,25,23,26,23,21,23,21,23,29, -11,11,250,22,7,11,11,11,90,161,37,37,11,26,9,80,159,56,8,45,35, -23,23,23,24,23,25,23,26,23,20,23,28,23,29,23,30,10,90,161,37,40, -11,28,23,17,250,22,7,195,196,11,26,9,80,159,56,8,45,35,23,23,23, -24,23,25,23,26,23,21,23,21,23,29,28,23,30,248,22,252,9,2,206,11, -11,28,23,17,250,22,7,249,22,65,203,200,11,11,250,22,7,250,22,59,2, -122,21,93,2,123,250,22,59,71,108,101,116,42,45,118,97,108,117,101,115,141, -248,22,59,249,22,59,21,95,69,112,114,101,45,105,116,101,109,115,142,70,112, -111,115,116,45,105,116,101,109,115,143,63,111,107,63,144,251,22,59,74,115,112, -108,105,116,45,115,116,120,45,108,105,115,116,145,2,123,23,25,23,26,251,22, -61,2,124,2,144,27,27,249,80,159,8,30,48,35,23,23,2,142,27,249,80, -159,8,31,48,35,23,21,2,143,28,23,23,28,28,248,22,50,194,28,249,22, -252,11,2,248,22,52,196,2,126,28,248,22,50,248,22,53,195,248,22,57,248, -22,80,195,11,11,11,250,22,59,67,99,111,110,115,47,35,102,146,248,22,78, -197,195,250,22,59,69,97,112,112,101,110,100,47,35,102,147,196,195,251,22,61, -2,124,197,196,21,93,11,28,23,19,28,23,36,250,22,59,2,131,21,93,94, -63,99,97,112,148,96,2,124,94,67,115,121,110,116,97,120,63,149,2,123,2, -123,2,148,195,250,22,59,2,131,21,93,94,2,148,2,123,195,192,21,93,11, -28,202,202,199,28,200,23,25,11,28,248,80,158,35,47,198,27,248,80,158,36, -43,199,28,28,200,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,37, -34,8,41,11,11,28,28,248,80,158,36,47,248,80,158,37,42,200,248,80,158, -36,41,248,80,158,37,42,248,80,158,38,42,201,11,27,248,80,158,37,43,248, -80,158,38,42,201,26,9,80,159,45,8,45,35,204,205,206,23,15,201,201,11, -23,19,11,251,22,252,39,2,248,22,210,199,6,29,29,109,105,115,112,108,97, +45,118,97,114,115,63,64,254,1,30,65,2,2,77,115,116,120,45,115,109,97, +108,108,101,114,45,116,104,97,110,63,66,254,1,30,67,2,2,68,115,116,120, +45,115,105,122,101,68,254,1,30,69,2,2,72,110,111,45,101,108,108,105,112, +115,101,115,63,70,254,1,30,71,2,2,1,21,115,116,114,117,99,116,58,115, +121,110,116,97,120,45,109,97,112,112,105,110,103,72,254,1,30,73,2,2,1, +20,45,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105,110,103, +74,254,1,30,75,2,2,76,45,115,121,110,116,97,120,45,109,97,112,112,105, +110,103,63,76,254,1,30,77,2,2,78,115,121,110,116,97,120,45,109,97,112, +112,105,110,103,45,114,101,102,78,254,1,30,79,2,2,79,115,121,110,116,97, +120,45,109,97,112,112,105,110,103,45,115,101,116,33,80,254,1,30,81,2,2, +1,21,45,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,100,101,112, +116,104,82,254,1,30,83,2,2,1,22,45,115,121,110,116,97,120,45,109,97, +112,112,105,110,103,45,118,97,108,118,97,114,84,254,1,30,85,2,2,79,109, +97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105,110,103,86,254,1, +30,87,2,2,75,115,121,110,116,97,120,45,109,97,112,112,105,110,103,63,88, +254,1,30,89,2,2,1,20,115,121,110,116,97,120,45,109,97,112,112,105,110, +103,45,100,101,112,116,104,90,254,1,30,91,2,2,1,21,115,121,110,116,97, +120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,92,254,1,16,3, +18,98,63,46,46,46,93,41,98,40,10,34,11,94,159,74,35,37,115,109,97, +108,108,45,115,99,104,101,109,101,94,9,11,159,2,20,9,11,16,72,2,62, +2,2,2,16,2,2,2,86,2,2,2,12,2,2,2,6,2,2,2,35,2, +2,2,88,2,2,2,66,2,2,2,54,2,2,2,64,2,2,2,27,2,2, +2,84,2,2,2,56,2,2,2,60,2,2,2,90,2,2,2,92,2,2,2, +70,2,2,2,10,2,2,2,58,2,2,2,46,2,2,2,8,2,2,2,18, +2,2,2,72,2,2,2,31,2,2,2,52,2,2,2,76,2,2,2,29,2, +2,2,48,2,2,2,78,2,2,2,50,2,2,2,74,2,2,2,80,2,2, +2,14,2,2,2,37,2,2,2,68,2,2,2,82,2,2,96,39,35,11,16, +0,35,16,4,38,11,61,115,95,3,1,7,101,110,118,50,54,49,53,96,18, +103,2,93,48,40,39,35,16,10,47,11,61,112,97,67,112,114,111,116,111,45, +114,98,61,107,99,64,100,101,115,116,100,3,1,7,101,110,118,50,54,57,53, +101,2,101,2,101,2,101,16,6,46,11,68,101,120,112,97,110,100,101,114,102, +63,116,111,112,103,3,1,7,101,110,118,50,54,57,57,104,3,1,7,101,110, +118,50,54,57,55,105,16,6,45,11,2,102,2,103,2,104,2,105,16,10,44, +11,69,108,111,99,97,108,45,116,111,112,106,73,117,115,101,45,101,108,108,105, +112,115,101,115,63,107,72,117,115,101,45,116,97,105,108,45,112,111,115,108,65, +104,97,115,104,33,109,3,1,7,101,110,118,50,55,48,50,110,2,110,2,110, +2,110,16,10,43,11,66,112,45,104,101,97,100,111,68,101,108,45,99,111,117, +110,116,112,66,114,101,115,116,45,112,113,67,108,97,115,116,45,101,108,114,3, +1,7,101,110,118,50,55,48,51,115,2,115,2,115,2,115,16,4,42,11,64, +108,111,111,112,116,3,1,7,101,110,118,50,55,48,54,117,18,98,2,3,50, +40,39,35,16,6,49,11,64,115,101,108,102,118,63,115,116,120,119,3,1,7, +101,110,118,50,56,48,49,120,2,120,11,11,16,27,2,74,2,82,2,84,2, +76,2,6,2,35,2,37,2,31,2,60,2,56,2,58,2,62,2,52,2,18, +2,54,2,29,2,27,2,16,2,64,2,14,2,72,2,8,2,12,2,68,2, +66,2,78,2,80,8,27,16,9,10,10,10,10,10,10,10,10,10,16,9,2, +48,2,46,2,50,2,86,2,70,2,10,2,90,2,92,2,88,16,9,11,11, +11,11,11,11,11,11,11,16,9,2,48,2,46,2,50,2,86,2,70,2,10, +2,90,2,92,2,88,43,43,9,132,83,159,34,93,80,159,34,8,53,35,89, +162,8,64,37,47,63,115,117,98,121,223,0,28,28,195,28,248,80,158,35,47, +195,27,248,80,158,36,42,196,28,248,80,158,36,47,193,28,27,248,80,158,37, +43,194,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,38,34,8,43, +11,248,22,252,9,2,27,248,80,158,38,43,198,28,248,22,41,248,22,210,194, +249,22,223,194,20,15,159,39,34,8,43,11,11,11,11,11,91,159,36,11,90, +161,36,34,11,27,248,80,158,38,42,248,80,158,39,42,199,28,28,248,80,158, +38,47,193,27,248,80,158,39,43,194,28,248,22,41,248,22,210,194,249,22,223, +194,20,15,159,40,34,8,43,11,11,27,248,80,158,39,42,194,27,32,122,89, +162,8,36,35,37,9,222,248,22,59,248,22,59,194,28,28,248,80,158,40,47, +194,27,248,80,158,41,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20, +15,159,42,34,8,43,11,11,249,80,159,41,8,54,35,248,80,158,42,42,196, +32,123,89,162,8,36,35,38,9,222,248,22,59,248,22,59,248,22,59,195,249, +22,7,195,194,249,22,7,194,22,59,27,250,80,159,40,8,53,35,199,248,80, +158,41,43,201,10,249,22,65,249,22,2,198,196,250,80,159,42,8,53,35,201, +198,10,28,248,80,158,35,47,195,27,248,80,158,36,43,196,28,28,196,28,248, +80,158,36,50,193,28,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, +37,34,8,43,11,248,80,158,36,47,248,80,158,37,42,197,11,11,11,250,80, +159,38,8,53,35,197,248,80,158,39,43,248,80,158,40,42,200,11,249,22,66, +250,80,159,40,8,53,35,199,248,80,158,41,43,201,201,250,80,159,40,8,53, +35,199,248,80,158,41,42,201,201,28,248,80,158,35,50,195,28,249,22,5,89, +162,8,36,35,38,9,223,4,28,248,22,206,194,249,22,221,194,195,11,195,9, +248,22,59,195,28,249,80,158,36,51,196,11,250,80,159,37,8,53,35,196,248, +22,252,229,1,248,22,210,199,198,9,83,159,34,93,80,159,34,8,54,35,89, +162,8,64,36,44,2,116,223,0,28,28,248,80,158,35,47,194,27,248,80,158, +36,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,37,34,8, +43,11,11,27,248,80,158,36,42,195,27,89,162,8,36,35,38,9,223,4,248, +22,59,248,194,195,28,28,248,80,158,37,47,194,27,248,80,158,38,43,195,28, +248,22,41,248,22,210,194,249,22,223,194,20,15,159,39,34,8,43,11,11,27, +248,80,158,38,42,195,27,89,162,8,36,35,39,9,223,6,248,22,59,248,22, +59,248,195,196,28,28,248,80,158,39,47,194,27,248,80,158,40,43,195,28,248, +22,41,248,22,210,194,249,22,223,194,20,15,159,41,34,8,43,11,11,249,80, +159,40,8,54,35,248,80,158,41,42,196,89,162,8,36,35,40,9,223,8,248, +22,59,248,22,59,248,22,59,248,196,197,249,22,7,195,194,249,22,7,195,194, +249,22,7,195,196,83,159,34,93,80,159,34,8,52,35,89,162,8,100,36,8, +35,2,116,223,0,28,248,22,186,195,193,249,22,209,11,249,22,59,27,248,22, +171,200,28,248,22,186,193,198,249,22,209,11,249,22,59,27,248,22,171,198,28, +248,22,186,193,203,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186, +193,23,16,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186,193,23, +21,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186,193,23,26,249, +22,209,11,249,22,59,249,80,159,8,31,8,52,35,23,32,248,22,171,199,20, +15,159,8,29,35,8,43,20,15,159,58,35,8,43,20,15,159,53,35,8,43, +20,15,159,48,35,8,43,20,15,159,43,35,8,43,20,15,159,38,35,8,43, +83,159,34,93,80,159,34,8,51,35,89,162,8,64,37,48,2,116,223,0,28, +28,248,80,158,35,47,194,27,248,80,158,36,43,195,28,248,22,41,248,22,210, +194,249,22,223,194,20,15,159,37,34,8,43,11,11,27,248,80,158,36,42,195, +27,248,22,170,197,27,248,80,158,38,43,197,28,28,248,80,158,38,47,195,27, +248,80,158,39,43,196,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, +40,34,8,43,11,11,27,248,80,158,39,42,196,27,248,22,170,196,27,248,80, +158,41,43,198,28,28,248,80,158,41,47,195,27,248,80,158,42,43,196,28,248, +22,41,248,22,210,194,249,22,223,194,20,15,159,43,34,8,43,11,11,250,80, +159,43,8,51,35,248,80,158,44,42,198,248,22,170,197,248,80,158,44,43,198, +250,22,7,196,197,195,250,22,7,196,197,195,250,22,7,197,196,198,83,159,34, +93,80,159,34,8,47,35,89,162,34,43,8,45,63,109,38,101,124,223,0,28, +28,199,28,248,80,158,35,47,198,27,248,80,158,36,42,199,28,248,80,158,36, +47,193,28,27,248,80,158,37,43,194,28,248,22,41,248,22,210,194,249,22,223, +194,20,15,159,38,34,8,43,11,248,22,252,9,2,27,248,80,158,38,43,201, +28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,39,34,8,43,11,11, +11,11,11,28,248,80,158,35,41,248,80,158,36,42,248,80,158,37,42,200,27, +248,80,158,36,43,199,27,249,80,159,38,44,35,195,199,91,159,37,11,90,161, +37,34,11,26,9,80,159,48,8,47,35,23,15,23,16,23,17,23,18,205,205, +10,11,11,28,201,250,22,7,249,22,2,22,59,200,11,11,27,249,80,159,42, +45,35,198,32,125,89,162,8,44,35,35,9,222,10,250,22,7,250,22,59,66, +108,97,109,98,100,97,126,21,93,61,101,127,251,22,61,62,105,102,128,21,94, +69,115,116,120,45,108,105,115,116,63,129,2,127,27,248,80,159,52,46,35,205, +28,249,22,252,13,2,194,21,94,64,108,105,115,116,130,2,127,28,23,25,21, +94,69,115,116,120,45,62,108,105,115,116,131,2,127,21,94,2,130,94,2,131, +2,127,28,248,22,57,204,250,22,61,66,97,110,100,109,97,112,132,250,22,59, +2,126,21,93,2,127,198,21,93,94,2,131,2,127,250,22,59,66,108,101,116, +47,101,99,133,63,101,115,99,134,250,22,59,63,108,101,116,135,248,22,59,249, +22,59,61,108,136,250,22,61,63,109,97,112,137,250,22,59,2,126,21,93,2, +127,250,22,61,73,115,116,120,45,99,104,101,99,107,47,101,115,99,138,23,18, +21,93,2,134,21,93,94,2,131,2,127,251,22,59,2,128,21,94,65,110,117, +108,108,63,139,2,136,249,22,59,65,113,117,111,116,101,140,27,249,22,2,32, +141,89,97,8,44,35,35,9,222,23,26,28,23,38,249,22,1,22,61,194,192, +249,22,61,28,23,37,71,115,116,120,45,114,111,116,97,116,101,42,142,70,115, +116,120,45,114,111,116,97,116,101,143,21,93,2,136,21,93,11,197,11,27,249, +22,59,248,80,158,38,43,201,248,80,158,38,43,248,80,158,39,42,202,27,248, +80,158,37,42,248,80,158,38,42,201,91,159,36,11,90,161,36,34,11,28,248, +80,158,39,41,195,249,22,7,34,10,28,248,80,158,39,47,195,87,94,28,27, +248,80,158,40,43,196,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, +41,34,8,43,11,251,22,252,39,2,248,22,210,202,6,54,54,109,105,115,112, +108,97,99,101,100,32,101,108,108,105,112,115,101,115,32,105,110,32,112,97,116, +116,101,114,110,32,40,102,111,108,108,111,119,115,32,111,116,104,101,114,32,101, +108,108,105,112,115,101,115,41,144,202,248,80,158,43,43,199,12,251,80,159,42, +8,48,35,201,202,248,80,158,43,42,199,35,249,22,7,35,11,91,159,43,11, +90,161,37,34,11,28,23,17,26,9,80,159,56,8,47,35,23,23,23,24,23, +25,23,26,23,21,23,21,23,29,11,11,250,22,7,11,11,11,90,161,37,37, +11,26,9,80,159,56,8,47,35,23,23,23,24,23,25,23,26,23,20,23,28, +23,29,23,30,10,90,161,37,40,11,28,23,17,250,22,7,195,196,11,26,9, +80,159,56,8,47,35,23,23,23,24,23,25,23,26,23,21,23,21,23,29,28, +23,30,248,22,252,9,2,206,11,11,28,23,17,250,22,7,249,22,65,203,200, +11,11,250,22,7,250,22,59,2,126,21,93,2,127,250,22,59,71,108,101,116, +42,45,118,97,108,117,101,115,145,248,22,59,249,22,59,21,95,69,112,114,101, +45,105,116,101,109,115,146,70,112,111,115,116,45,105,116,101,109,115,147,63,111, +107,63,148,251,22,59,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116, +149,2,127,23,25,23,26,251,22,61,2,128,2,148,27,27,249,80,159,8,30, +48,35,23,23,2,146,27,249,80,159,8,31,48,35,23,21,2,147,28,23,23, +28,28,248,22,50,194,28,249,22,252,11,2,248,22,52,196,2,130,28,248,22, +50,248,22,53,195,248,22,57,248,22,80,195,11,11,11,250,22,59,67,99,111, +110,115,47,35,102,150,248,22,78,197,195,250,22,59,69,97,112,112,101,110,100, +47,35,102,151,196,195,251,22,61,2,128,197,196,21,93,11,28,23,19,28,23, +36,250,22,59,2,135,21,93,94,63,99,97,112,152,96,2,128,94,67,115,121, +110,116,97,120,63,153,2,127,2,127,2,152,195,250,22,59,2,135,21,93,94, +2,152,2,127,195,192,21,93,11,28,202,202,199,28,200,23,25,11,28,248,80, +158,35,47,198,27,248,80,158,36,43,199,28,28,200,28,248,22,41,248,22,210, +194,249,22,223,194,20,15,159,37,34,8,43,11,11,28,28,248,80,158,36,47, +248,80,158,37,42,200,248,80,158,36,41,248,80,158,37,42,248,80,158,38,42, +201,11,27,248,80,158,37,43,248,80,158,38,42,201,26,9,80,159,45,8,47, +35,204,205,206,23,15,201,201,11,23,19,11,251,22,252,39,2,248,22,210,199, +6,29,29,109,105,115,112,108,97,99,101,100,32,101,108,108,105,112,115,101,115, +32,105,110,32,112,97,116,116,101,114,110,154,199,196,91,159,43,11,90,161,37, +34,11,28,206,26,9,80,159,53,8,47,35,23,20,23,21,23,22,23,23,23, +18,23,18,23,26,11,11,250,22,7,11,11,11,90,161,37,37,11,26,9,80, +159,53,8,47,35,23,20,23,21,23,22,23,23,248,80,158,54,42,23,25,23, +25,23,26,23,27,10,90,161,37,40,11,28,206,250,22,7,195,196,11,26,9, +80,159,53,8,47,35,23,20,23,21,23,22,23,23,23,18,23,18,23,26,28, +23,27,248,22,252,9,2,206,11,11,28,206,250,22,7,249,22,65,203,200,11, +11,250,22,7,250,22,59,2,126,21,93,2,127,251,22,61,2,128,21,94,2, +33,2,127,27,27,249,80,159,58,48,35,23,20,21,94,2,25,2,127,27,249, +80,159,59,48,35,23,18,21,94,2,23,2,127,28,23,20,28,28,248,22,50, +194,28,249,22,252,11,2,248,22,52,196,2,130,28,248,22,50,248,22,53,195, +248,22,57,248,22,80,195,11,11,11,250,22,59,2,150,248,22,78,197,195,250, +22,59,2,151,196,195,251,22,61,2,128,197,196,21,93,11,28,23,16,28,23, +30,250,22,59,2,135,21,93,94,2,152,96,2,128,94,2,153,2,127,2,127, +2,152,195,250,22,59,2,135,21,93,94,2,152,2,127,195,192,21,93,11,28, +202,202,199,28,200,23,22,11,28,248,80,158,35,41,198,28,196,250,22,7,9, +11,11,250,22,7,71,115,116,120,45,110,117,108,108,47,35,102,155,11,11,28, +248,80,158,35,50,198,28,249,22,5,89,162,8,36,35,38,9,223,7,28,248, +22,206,194,249,22,221,194,195,11,197,28,196,250,22,7,9,11,11,250,22,7, +250,22,59,2,126,21,93,2,127,251,22,61,2,128,21,94,2,39,2,127,250, +22,61,2,128,250,22,59,79,109,111,100,117,108,101,45,105,100,101,110,116,105, +102,105,101,114,61,63,156,2,127,249,22,59,72,113,117,111,116,101,45,115,121, +110,116,97,120,157,23,23,21,94,64,110,117,108,108,158,11,21,93,11,11,11, +28,28,199,28,248,22,41,248,22,210,199,249,22,223,199,20,15,159,36,34,8, +43,11,11,251,22,252,39,2,248,22,210,198,6,29,29,109,105,115,112,108,97, 99,101,100,32,101,108,108,105,112,115,101,115,32,105,110,32,112,97,116,116,101, -114,110,150,199,196,91,159,43,11,90,161,37,34,11,28,206,26,9,80,159,53, -8,45,35,23,20,23,21,23,22,23,23,23,18,23,18,23,26,11,11,250,22, -7,11,11,11,90,161,37,37,11,26,9,80,159,53,8,45,35,23,20,23,21, -23,22,23,23,248,80,158,54,42,23,25,23,25,23,26,23,27,10,90,161,37, -40,11,28,206,250,22,7,195,196,11,26,9,80,159,53,8,45,35,23,20,23, -21,23,22,23,23,23,18,23,18,23,26,28,23,27,248,22,252,9,2,206,11, -11,28,206,250,22,7,249,22,65,203,200,11,11,250,22,7,250,22,59,2,122, -21,93,2,123,251,22,61,2,124,21,94,2,33,2,123,27,27,249,80,159,58, -48,35,23,20,21,94,2,25,2,123,27,249,80,159,59,48,35,23,18,21,94, -2,23,2,123,28,23,20,28,28,248,22,50,194,28,249,22,252,11,2,248,22, -52,196,2,126,28,248,22,50,248,22,53,195,248,22,57,248,22,80,195,11,11, -11,250,22,59,2,146,248,22,78,197,195,250,22,59,2,147,196,195,251,22,61, -2,124,197,196,21,93,11,28,23,16,28,23,30,250,22,59,2,131,21,93,94, -2,148,96,2,124,94,2,149,2,123,2,123,2,148,195,250,22,59,2,131,21, -93,94,2,148,2,123,195,192,21,93,11,28,202,202,199,28,200,23,22,11,28, -248,80,158,35,41,198,28,196,250,22,7,9,11,11,250,22,7,71,115,116,120, -45,110,117,108,108,47,35,102,151,11,11,28,248,80,158,35,50,198,28,249,22, -5,89,162,8,36,35,38,9,223,7,28,248,22,206,194,249,22,221,194,195,11, -197,28,196,250,22,7,9,11,11,250,22,7,250,22,59,2,122,21,93,2,123, -251,22,61,2,124,21,94,2,39,2,123,250,22,61,2,124,250,22,59,79,109, -111,100,117,108,101,45,105,100,101,110,116,105,102,105,101,114,61,63,152,2,123, -249,22,59,72,113,117,111,116,101,45,115,121,110,116,97,120,153,23,23,21,94, -64,110,117,108,108,154,11,21,93,11,11,11,28,28,199,28,248,22,41,248,22, -210,199,249,22,223,199,20,15,159,36,34,8,41,11,11,251,22,252,39,2,248, -22,210,198,6,29,29,109,105,115,112,108,97,99,101,100,32,101,108,108,105,112, -115,101,115,32,105,110,32,112,97,116,116,101,114,110,155,198,201,28,196,250,22, -7,248,22,59,201,11,11,250,22,7,27,28,204,32,156,89,162,8,36,35,38, -64,119,114,97,112,157,222,250,22,59,2,122,21,93,2,123,195,32,158,89,162, -8,36,35,40,2,157,222,250,22,59,2,122,21,93,2,123,249,22,59,2,126, -197,28,205,248,193,21,96,1,20,100,97,116,117,109,45,62,115,121,110,116,97, -120,45,111,98,106,101,99,116,159,2,148,2,123,2,148,248,193,2,123,10,204, -28,249,80,158,36,51,199,11,27,248,22,252,229,1,248,22,210,200,28,28,197, -11,27,248,22,252,9,2,202,28,192,192,249,22,4,80,159,38,8,47,35,195, -27,248,22,252,226,1,248,22,210,201,26,10,80,159,46,8,48,35,202,23,17, -23,19,205,206,23,15,23,16,202,248,22,252,9,2,23,21,9,91,159,37,11, -90,161,37,34,11,26,9,80,159,47,8,45,35,206,23,15,23,16,23,17,204, -23,18,23,20,23,21,11,28,200,250,22,7,195,11,11,250,22,7,250,22,59, -2,122,21,93,2,123,251,22,61,2,124,21,95,2,41,2,123,11,249,80,159, -50,48,35,204,21,94,72,118,101,99,116,111,114,45,62,108,105,115,116,160,94, -68,115,121,110,116,97,120,45,101,161,2,123,21,93,11,196,11,28,196,250,22, -7,9,11,11,250,22,7,250,22,59,2,122,21,93,2,123,250,22,61,2,124, -27,250,22,61,66,101,113,117,97,108,63,162,248,22,210,23,19,21,93,94,2, -161,2,123,28,23,19,250,22,59,63,97,110,100,163,21,94,2,149,2,123,195, -192,21,94,2,154,11,11,11,83,159,34,93,80,159,34,8,48,35,89,162,8, -64,44,8,31,2,112,223,0,28,248,22,186,201,250,22,7,250,22,59,2,122, -21,93,2,123,251,22,61,2,124,250,22,59,2,41,2,123,206,23,20,21,93, -11,204,11,91,159,37,11,90,161,37,34,11,27,249,22,252,227,1,248,22,210, -201,248,22,171,23,15,26,9,80,159,47,8,45,35,23,17,23,18,23,19,23, -20,201,201,23,16,248,22,252,9,2,23,23,11,26,10,80,159,47,8,48,35, -206,23,15,23,16,23,17,23,18,23,19,23,20,248,22,171,23,22,28,23,22, -23,22,203,27,249,80,159,50,48,35,205,250,22,59,74,115,116,120,45,118,101, -99,116,111,114,45,114,101,102,164,2,123,248,22,171,23,28,28,248,22,57,23, -25,192,28,204,28,28,248,22,50,193,28,249,22,252,11,2,248,22,52,195,2, -126,28,248,22,50,248,22,53,194,248,22,57,248,22,80,194,11,11,11,250,22, -59,2,146,248,22,78,196,23,27,250,22,59,2,147,195,23,27,251,22,61,2, -124,196,23,28,21,93,11,83,159,34,93,80,159,34,8,47,35,89,162,8,36, -35,39,9,223,0,248,22,252,9,2,28,248,22,41,248,22,210,196,249,22,223, -196,20,15,159,37,34,8,41,11,83,159,34,93,80,159,34,8,46,35,89,162, -8,64,38,46,2,112,223,0,28,248,80,158,35,41,196,249,22,7,198,10,28, -248,80,158,35,47,196,87,94,28,27,248,80,158,36,43,197,28,248,22,41,248, -22,210,194,249,22,223,194,20,15,159,37,34,8,41,11,251,22,252,39,2,248, -22,210,198,2,140,198,248,80,158,39,43,200,12,27,248,80,158,36,42,197,27, -248,22,170,199,28,248,80,158,37,41,194,249,22,7,194,10,28,248,80,158,37, -47,194,87,94,28,27,248,80,158,38,43,195,28,248,22,41,248,22,210,194,249, -22,223,194,20,15,159,39,34,8,41,11,251,22,252,39,2,248,22,210,200,2, -140,200,248,80,158,41,43,198,12,251,80,159,40,8,46,35,199,200,248,80,158, -41,42,198,248,22,170,197,249,22,7,248,22,170,195,11,249,22,7,248,22,170, -199,11,83,159,34,93,80,159,34,34,35,89,162,34,35,38,2,6,223,0,28, -248,22,41,248,22,210,195,249,22,223,195,20,15,159,36,34,8,41,11,83,159, -34,93,80,159,34,35,35,32,165,89,162,34,36,38,2,8,222,249,22,5,89, -162,8,36,35,38,9,223,2,28,248,22,206,194,249,22,221,194,195,11,195,83, -159,34,93,80,159,34,36,35,32,166,89,162,34,36,42,2,10,222,28,248,22, -57,194,11,28,28,248,22,206,248,22,52,195,249,22,221,194,248,22,52,196,11, -34,27,248,22,53,195,28,248,22,57,193,11,28,28,248,22,206,248,22,52,194, -249,22,221,195,248,22,52,195,11,35,250,32,167,89,162,8,100,37,45,2,112, -222,28,248,22,57,195,11,28,28,248,22,206,248,22,52,196,249,22,221,194,248, -22,52,197,11,193,27,248,22,170,195,27,248,22,53,197,28,248,22,57,193,11, -28,28,248,22,206,248,22,52,194,249,22,221,196,248,22,52,195,11,193,27,248, -22,170,195,27,248,22,53,195,28,248,22,57,193,11,28,28,248,22,206,248,22, -52,194,249,22,221,198,248,22,52,195,11,193,250,2,167,199,248,22,170,197,248, -22,53,196,196,36,248,22,53,196,83,159,34,93,80,159,34,37,35,32,168,89, -162,34,36,40,2,12,222,250,32,169,89,162,8,100,37,53,2,112,222,28,248, -22,57,195,11,28,249,22,221,194,27,248,22,52,198,28,248,22,206,193,192,27, +114,110,159,198,201,28,196,250,22,7,248,22,59,201,11,11,250,22,7,27,28, +204,32,160,89,162,8,36,35,38,64,119,114,97,112,161,222,250,22,59,2,126, +21,93,2,127,195,32,162,89,162,8,36,35,40,2,161,222,250,22,59,2,126, +21,93,2,127,249,22,59,2,130,197,28,205,248,193,21,96,1,20,100,97,116, +117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,163,2,152,2, +127,2,152,248,193,2,127,10,204,28,249,80,158,36,51,199,11,27,248,22,252, +229,1,248,22,210,200,28,28,197,11,27,248,22,252,9,2,202,28,192,192,249, +22,4,80,159,38,8,49,35,195,27,248,22,252,226,1,248,22,210,201,26,10, +80,159,46,8,50,35,202,23,17,23,19,205,206,23,15,23,16,202,248,22,252, +9,2,23,21,9,91,159,37,11,90,161,37,34,11,26,9,80,159,47,8,47, +35,206,23,15,23,16,23,17,204,23,18,23,20,23,21,11,28,200,250,22,7, +195,11,11,250,22,7,250,22,59,2,126,21,93,2,127,251,22,61,2,128,21, +95,2,41,2,127,11,249,80,159,50,48,35,204,21,94,72,118,101,99,116,111, +114,45,62,108,105,115,116,164,94,68,115,121,110,116,97,120,45,101,165,2,127, +21,93,11,196,11,28,196,250,22,7,9,11,11,250,22,7,250,22,59,2,126, +21,93,2,127,250,22,61,2,128,27,250,22,61,66,101,113,117,97,108,63,166, +248,22,210,23,19,21,93,94,2,165,2,127,28,23,19,250,22,59,63,97,110, +100,167,21,94,2,153,2,127,195,192,21,94,2,158,11,11,11,83,159,34,93, +80,159,34,8,50,35,89,162,8,64,44,8,31,2,116,223,0,28,248,22,186, +201,250,22,7,250,22,59,2,126,21,93,2,127,251,22,61,2,128,250,22,59, +2,41,2,127,206,23,20,21,93,11,204,11,91,159,37,11,90,161,37,34,11, +27,249,22,252,227,1,248,22,210,201,248,22,171,23,15,26,9,80,159,47,8, +47,35,23,17,23,18,23,19,23,20,201,201,23,16,248,22,252,9,2,23,23, +11,26,10,80,159,47,8,50,35,206,23,15,23,16,23,17,23,18,23,19,23, +20,248,22,171,23,22,28,23,22,23,22,203,27,249,80,159,50,48,35,205,250, +22,59,74,115,116,120,45,118,101,99,116,111,114,45,114,101,102,168,2,127,248, +22,171,23,28,28,248,22,57,23,25,192,28,204,28,28,248,22,50,193,28,249, +22,252,11,2,248,22,52,195,2,130,28,248,22,50,248,22,53,194,248,22,57, +248,22,80,194,11,11,11,250,22,59,2,150,248,22,78,196,23,27,250,22,59, +2,151,195,23,27,251,22,61,2,128,196,23,28,21,93,11,83,159,34,93,80, +159,34,8,49,35,89,162,8,36,35,39,9,223,0,248,22,252,9,2,28,248, +22,41,248,22,210,196,249,22,223,196,20,15,159,37,34,8,43,11,83,159,34, +93,80,159,34,8,48,35,89,162,8,64,38,46,2,116,223,0,28,248,80,158, +35,41,196,249,22,7,198,10,28,248,80,158,35,47,196,87,94,28,27,248,80, +158,36,43,197,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,37,34, +8,43,11,251,22,252,39,2,248,22,210,198,2,144,198,248,80,158,39,43,200, +12,27,248,80,158,36,42,197,27,248,22,170,199,28,248,80,158,37,41,194,249, +22,7,194,10,28,248,80,158,37,47,194,87,94,28,27,248,80,158,38,43,195, +28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,39,34,8,43,11,251, +22,252,39,2,248,22,210,200,2,144,200,248,80,158,41,43,198,12,251,80,159, +40,8,48,35,199,200,248,80,158,41,42,198,248,22,170,197,249,22,7,248,22, +170,195,11,249,22,7,248,22,170,199,11,83,159,34,93,80,159,34,34,35,89, +162,34,35,38,2,6,223,0,28,248,22,41,248,22,210,195,249,22,223,195,20, +15,159,36,34,8,43,11,83,159,34,93,80,159,34,35,35,32,169,89,162,34, +36,38,2,8,222,249,22,5,89,162,8,36,35,38,9,223,2,28,248,22,206, +194,249,22,221,194,195,11,195,83,159,34,93,80,159,34,36,35,32,170,89,162, +34,36,42,2,10,222,28,248,22,57,194,11,28,28,248,22,206,248,22,52,195, +249,22,221,194,248,22,52,196,11,34,27,248,22,53,195,28,248,22,57,193,11, +28,28,248,22,206,248,22,52,194,249,22,221,195,248,22,52,195,11,35,250,32, +171,89,162,8,100,37,45,2,116,222,28,248,22,57,195,11,28,28,248,22,206, +248,22,52,196,249,22,221,194,248,22,52,197,11,193,27,248,22,170,195,27,248, +22,53,197,28,248,22,57,193,11,28,28,248,22,206,248,22,52,194,249,22,221, +196,248,22,52,195,11,193,27,248,22,170,195,27,248,22,53,195,28,248,22,57, +193,11,28,28,248,22,206,248,22,52,194,249,22,221,198,248,22,52,195,11,193, +250,2,171,199,248,22,170,197,248,22,53,196,196,36,248,22,53,196,83,159,34, +93,80,159,34,37,35,32,172,89,162,34,36,40,2,12,222,250,32,173,89,162, +8,100,37,53,2,116,222,28,248,22,57,195,11,28,249,22,221,194,27,248,22, +52,198,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248, +22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27, 248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192, 27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193, 192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206, -193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22, -206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248, -22,206,193,192,248,32,170,89,162,8,64,35,44,2,112,222,28,248,22,206,193, +193,192,27,248,22,52,194,28,248,22,206,193,192,248,32,174,89,162,8,64,35, +44,2,116,222,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192, +27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193, 192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206, 193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22, -206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248, -22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,2,170,248,22,52, -194,248,22,52,194,193,250,2,169,195,248,22,170,197,248,22,53,198,195,34,196, -83,159,34,93,80,159,34,38,35,32,171,89,162,34,36,38,2,14,222,28,249, -22,252,11,2,194,195,248,22,59,193,249,22,59,194,195,83,159,34,93,80,159, -34,39,35,89,162,8,36,40,54,2,16,223,0,91,159,37,11,90,161,37,34, -11,26,9,80,159,46,8,45,35,205,206,23,16,23,17,23,15,23,15,10,10, -11,28,200,27,247,22,110,87,94,251,32,172,89,162,8,100,38,44,2,112,222, -28,248,22,206,196,27,250,22,116,196,248,22,210,200,9,87,94,28,249,22,5, -89,162,8,36,35,38,9,223,6,249,22,221,195,194,194,251,22,252,39,2,248, -22,210,199,6,30,30,118,97,114,105,97,98,108,101,32,117,115,101,100,32,116, -119,105,99,101,32,105,110,32,112,97,116,116,101,114,110,173,199,200,12,250,22, -115,196,248,22,210,200,249,22,51,201,197,28,248,22,50,196,87,94,251,2,172, -196,197,198,248,22,52,200,251,2,172,196,197,198,248,22,53,200,12,196,201,202, -197,193,28,249,22,252,13,2,194,21,95,2,122,93,2,123,2,123,28,201,21, -95,2,122,94,2,123,2,152,2,123,21,95,2,122,93,2,123,2,123,250,22, -59,2,122,249,22,61,2,123,249,80,158,44,52,28,23,16,21,93,2,152,9, -9,248,80,159,41,46,35,196,83,159,34,93,80,159,34,53,35,89,162,34,39, -46,2,46,223,0,253,80,158,40,39,199,200,201,202,11,203,83,159,34,93,80, -159,34,54,35,89,162,34,38,45,2,48,223,0,253,80,158,40,39,199,200,201, -202,10,11,83,159,34,93,80,159,34,46,35,32,174,89,162,34,35,38,2,31, -222,28,28,248,22,50,193,28,249,22,252,11,2,248,22,52,195,2,122,249,22, -252,13,2,248,22,78,195,21,93,2,123,11,11,248,22,87,193,249,22,61,194, -21,93,2,123,83,159,34,93,80,159,34,48,35,32,175,89,162,34,36,40,2, -35,222,28,28,248,22,50,193,28,249,22,252,11,2,248,22,52,195,2,122,249, -22,252,13,2,248,22,78,195,21,93,2,123,11,11,27,248,22,87,194,28,249, -22,252,11,2,194,2,123,194,28,28,248,22,50,193,28,249,22,252,11,2,248, -22,52,195,2,126,28,248,22,50,248,22,53,194,28,249,22,252,11,2,248,22, -78,195,2,123,248,22,57,248,22,80,194,11,11,11,11,249,22,59,2,126,196, -249,22,59,195,196,249,22,59,194,195,83,159,34,93,80,159,34,49,35,32,176, -89,162,34,36,40,2,37,222,28,28,248,22,50,193,28,249,22,252,11,2,248, -22,52,195,2,126,28,248,22,50,248,22,53,194,248,22,57,248,22,80,194,11, -11,11,250,22,59,2,146,248,22,78,196,196,250,22,59,2,147,195,196,83,159, -34,93,80,159,34,55,35,89,162,34,38,8,50,2,50,223,0,91,159,36,10, -90,161,35,34,10,195,90,161,35,35,10,89,162,34,40,8,59,2,98,226,2, -5,3,1,28,28,199,28,248,80,158,38,47,197,27,248,80,158,39,42,198,28, -248,80,158,39,47,193,28,27,248,80,158,40,43,194,28,248,22,41,248,22,210, -194,249,22,223,194,20,15,159,41,34,8,41,11,248,22,252,9,2,27,248,80, -158,41,43,200,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,42,34, -8,41,11,11,11,11,11,91,159,40,11,90,161,35,34,11,248,80,158,44,43, -203,90,161,37,35,11,27,248,80,158,45,42,248,80,158,46,42,205,27,248,80, -158,46,43,248,80,158,47,42,206,28,28,248,80,158,46,47,194,27,248,80,158, -47,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,48,34,8, -41,11,11,27,248,80,158,47,42,195,27,248,80,158,48,43,196,28,28,248,80, -158,48,47,194,27,248,80,158,49,43,195,28,248,22,41,248,22,210,194,249,22, -223,194,20,15,159,50,34,8,41,11,11,27,248,80,158,49,42,195,27,248,80, -158,50,43,196,28,28,248,80,158,50,47,194,27,248,80,158,51,43,195,28,248, -22,41,248,22,210,194,249,22,223,194,20,15,159,52,34,8,41,11,11,27,248, -80,158,51,42,195,27,248,80,158,52,43,196,28,28,248,80,158,52,47,194,27, -248,80,158,53,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, -54,34,8,41,11,11,27,248,80,158,53,42,195,27,248,80,158,54,43,196,28, -28,248,80,158,54,47,194,27,248,80,158,55,43,195,28,248,22,41,248,22,210, -194,249,22,223,194,20,15,159,56,34,8,41,11,11,250,80,159,56,8,49,35, -248,80,158,57,42,197,39,248,80,158,57,43,197,250,22,7,38,196,195,250,22, -7,37,196,195,250,22,7,36,196,195,250,22,7,35,196,195,250,22,7,34,196, -195,90,161,35,38,11,28,248,22,186,194,192,249,22,209,11,249,22,59,27,248, -22,171,199,28,248,22,186,193,197,249,22,209,11,249,22,59,27,248,22,171,198, -28,248,22,186,193,202,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22, -186,193,23,15,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186,193, -23,20,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186,193,23,25, -249,22,209,11,249,22,59,27,248,22,171,198,28,248,22,186,193,23,30,249,22, -209,11,249,22,59,27,248,22,171,198,28,248,22,186,193,23,35,249,22,209,11, -249,22,59,249,80,159,8,50,8,50,35,23,41,248,22,171,199,20,15,159,8, -48,35,8,41,20,15,159,8,43,35,8,41,20,15,159,8,38,35,8,41,20, -15,159,8,33,35,8,41,20,15,159,8,28,35,8,41,20,15,159,57,35,8, -41,20,15,159,52,35,8,41,20,15,159,47,35,8,41,90,161,35,39,11,28, -203,249,80,159,45,44,35,198,202,11,87,94,28,248,22,57,198,251,22,1,22, -252,39,2,66,115,121,110,116,97,120,177,6,48,48,110,111,32,112,97,116,116, -101,114,110,32,118,97,114,105,97,98,108,101,115,32,98,101,102,111,114,101,32, -101,108,108,105,112,115,101,115,32,105,110,32,116,101,109,112,108,97,116,101,178, -28,249,22,252,11,2,205,201,248,22,59,204,249,22,59,205,201,12,27,28,204, -249,22,2,89,162,34,35,43,9,226,12,10,15,14,251,80,158,41,56,200,196, -198,197,200,11,27,28,205,28,248,22,57,194,9,28,248,22,79,194,27,248,22, -53,195,28,248,22,57,193,9,28,248,22,79,193,248,32,179,89,162,8,64,35, -45,2,112,222,28,248,22,57,193,9,28,248,22,79,193,27,248,22,53,194,28, -248,22,57,193,9,28,248,22,79,193,27,248,22,53,194,28,248,22,57,193,9, -28,248,22,79,193,248,2,179,248,22,53,194,249,22,51,248,22,77,195,248,2, -179,248,22,53,196,249,22,51,248,22,77,195,27,248,22,53,196,28,248,22,57, -193,9,28,248,22,79,193,248,2,179,248,22,53,194,249,22,51,248,22,77,195, -248,2,179,248,22,53,196,249,22,51,248,22,77,195,27,248,22,53,196,28,248, -22,57,193,9,28,248,22,79,193,27,248,22,53,194,28,248,22,57,193,9,28, -248,22,79,193,248,2,179,248,22,53,194,249,22,51,248,22,77,195,248,2,179, -248,22,53,196,249,22,51,248,22,77,195,27,248,22,53,196,28,248,22,57,193, -9,28,248,22,79,193,248,2,179,248,22,53,194,249,22,51,248,22,77,195,248, -2,179,248,22,53,196,248,22,53,194,249,22,51,248,22,77,195,248,2,179,248, -22,53,196,249,22,51,248,22,77,196,27,248,22,53,197,28,248,22,57,193,9, -28,248,22,79,193,248,2,179,248,22,53,194,249,22,51,248,22,77,195,248,2, -179,248,22,53,196,11,27,28,206,28,248,22,57,195,9,28,248,22,79,195,249, -22,51,248,22,77,197,27,248,22,53,198,28,248,22,57,193,9,28,248,22,79, -193,249,22,51,248,22,77,195,248,32,180,89,162,8,64,35,45,2,112,222,28, -248,22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,27,248,22,53, -196,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,27,248, +206,193,192,248,2,174,248,22,52,194,248,22,52,194,193,250,2,173,195,248,22, +170,197,248,22,53,198,195,34,196,83,159,34,93,80,159,34,38,35,32,175,89, +162,34,36,38,2,14,222,28,249,22,252,11,2,194,195,248,22,59,193,249,22, +59,194,195,83,159,34,93,80,159,34,39,35,89,162,8,36,40,54,2,16,223, +0,91,159,37,11,90,161,37,34,11,26,9,80,159,46,8,47,35,205,206,23, +16,23,17,23,15,23,15,10,10,11,28,200,27,247,22,110,87,94,251,32,176, +89,162,8,100,38,44,2,116,222,28,248,22,206,196,27,250,22,116,196,248,22, +210,200,9,87,94,28,249,22,5,89,162,8,36,35,38,9,223,6,249,22,221, +195,194,194,251,22,252,39,2,248,22,210,199,6,30,30,118,97,114,105,97,98, +108,101,32,117,115,101,100,32,116,119,105,99,101,32,105,110,32,112,97,116,116, +101,114,110,177,199,200,12,250,22,115,196,248,22,210,200,249,22,51,201,197,28, +248,22,50,196,87,94,251,2,176,196,197,198,248,22,52,200,251,2,176,196,197, +198,248,22,53,200,12,196,201,202,197,193,28,249,22,252,13,2,194,21,95,2, +126,93,2,127,2,127,28,201,21,95,2,126,94,2,127,2,156,2,127,21,95, +2,126,93,2,127,2,127,250,22,59,2,126,249,22,61,2,127,249,80,158,44, +52,28,23,16,21,93,2,156,9,9,248,80,159,41,46,35,196,83,159,34,93, +80,159,34,53,35,89,162,34,39,46,2,46,223,0,253,80,158,40,39,199,200, +201,202,11,203,83,159,34,93,80,159,34,54,35,89,162,34,38,45,2,48,223, +0,253,80,158,40,39,199,200,201,202,10,11,83,159,34,93,80,159,34,46,35, +32,178,89,162,34,35,38,2,31,222,28,28,248,22,50,193,28,249,22,252,11, +2,248,22,52,195,2,126,249,22,252,13,2,248,22,78,195,21,93,2,127,11, +11,248,22,87,193,249,22,61,194,21,93,2,127,83,159,34,93,80,159,34,48, +35,32,179,89,162,34,36,40,2,35,222,28,28,248,22,50,193,28,249,22,252, +11,2,248,22,52,195,2,126,249,22,252,13,2,248,22,78,195,21,93,2,127, +11,11,27,248,22,87,194,28,249,22,252,11,2,194,2,127,194,28,28,248,22, +50,193,28,249,22,252,11,2,248,22,52,195,2,130,28,248,22,50,248,22,53, +194,28,249,22,252,11,2,248,22,78,195,2,127,248,22,57,248,22,80,194,11, +11,11,11,249,22,59,2,130,196,249,22,59,195,196,249,22,59,194,195,83,159, +34,93,80,159,34,49,35,32,180,89,162,34,36,40,2,37,222,28,28,248,22, +50,193,28,249,22,252,11,2,248,22,52,195,2,130,28,248,22,50,248,22,53, +194,248,22,57,248,22,80,194,11,11,11,250,22,59,2,150,248,22,78,196,196, +250,22,59,2,151,195,196,83,159,34,93,80,159,34,55,35,89,162,34,38,56, +2,50,223,0,91,159,36,10,90,161,35,34,10,195,90,161,35,35,10,89,162, +34,40,8,59,2,102,226,2,5,3,1,28,28,199,28,248,80,158,38,47,197, +27,248,80,158,39,42,198,28,248,80,158,39,47,193,28,27,248,80,158,40,43, +194,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,41,34,8,43,11, +248,22,252,9,2,27,248,80,158,41,43,200,28,248,22,41,248,22,210,194,249, +22,223,194,20,15,159,42,34,8,43,11,11,11,11,11,91,159,40,11,90,161, +35,34,11,248,80,158,44,43,203,90,161,37,35,11,27,248,80,158,45,42,248, +80,158,46,42,205,27,248,80,158,46,43,248,80,158,47,42,206,28,28,248,80, +158,46,47,194,27,248,80,158,47,43,195,28,248,22,41,248,22,210,194,249,22, +223,194,20,15,159,48,34,8,43,11,11,27,248,80,158,47,42,195,27,248,80, +158,48,43,196,28,28,248,80,158,48,47,194,27,248,80,158,49,43,195,28,248, +22,41,248,22,210,194,249,22,223,194,20,15,159,50,34,8,43,11,11,27,248, +80,158,49,42,195,27,248,80,158,50,43,196,28,28,248,80,158,50,47,194,27, +248,80,158,51,43,195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159, +52,34,8,43,11,11,27,248,80,158,51,42,195,27,248,80,158,52,43,196,28, +28,248,80,158,52,47,194,27,248,80,158,53,43,195,28,248,22,41,248,22,210, +194,249,22,223,194,20,15,159,54,34,8,43,11,11,27,248,80,158,53,42,195, +27,248,80,158,54,43,196,28,28,248,80,158,54,47,194,27,248,80,158,55,43, +195,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,56,34,8,43,11, +11,250,80,159,56,8,51,35,248,80,158,57,42,197,39,248,80,158,57,43,197, +250,22,7,38,196,195,250,22,7,37,196,195,250,22,7,36,196,195,250,22,7, +35,196,195,250,22,7,34,196,195,90,161,35,38,11,28,248,22,186,194,192,249, +22,209,11,249,22,59,27,248,22,171,199,28,248,22,186,193,197,249,22,209,11, +249,22,59,27,248,22,171,198,28,248,22,186,193,202,249,22,209,11,249,22,59, +27,248,22,171,198,28,248,22,186,193,23,15,249,22,209,11,249,22,59,27,248, +22,171,198,28,248,22,186,193,23,20,249,22,209,11,249,22,59,27,248,22,171, +198,28,248,22,186,193,23,25,249,22,209,11,249,22,59,27,248,22,171,198,28, +248,22,186,193,23,30,249,22,209,11,249,22,59,27,248,22,171,198,28,248,22, +186,193,23,35,249,22,209,11,249,22,59,249,80,159,8,50,8,52,35,23,41, +248,22,171,199,20,15,159,8,48,35,8,43,20,15,159,8,43,35,8,43,20, +15,159,8,38,35,8,43,20,15,159,8,33,35,8,43,20,15,159,8,28,35, +8,43,20,15,159,57,35,8,43,20,15,159,52,35,8,43,20,15,159,47,35, +8,43,90,161,35,39,11,28,203,249,80,159,45,44,35,198,202,11,87,94,28, +248,22,57,198,251,22,1,22,252,39,2,66,115,121,110,116,97,120,181,6,48, +48,110,111,32,112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101,115, +32,98,101,102,111,114,101,32,101,108,108,105,112,115,101,115,32,105,110,32,116, +101,109,112,108,97,116,101,182,28,249,22,252,11,2,205,201,248,22,59,204,249, +22,59,205,201,12,27,28,204,249,22,2,89,162,34,35,43,9,226,12,10,15, +14,251,80,158,41,56,200,196,198,197,200,11,27,28,205,28,248,22,57,194,9, +28,248,22,79,194,27,248,22,53,195,28,248,22,57,193,9,28,248,22,79,193, +248,32,183,89,162,8,64,35,45,2,116,222,28,248,22,57,193,9,28,248,22, +79,193,27,248,22,53,194,28,248,22,57,193,9,28,248,22,79,193,27,248,22, +53,194,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53,194,249, +22,51,248,22,77,195,248,2,183,248,22,53,196,249,22,51,248,22,77,195,27, +248,22,53,196,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53, +194,249,22,51,248,22,77,195,248,2,183,248,22,53,196,249,22,51,248,22,77, +195,27,248,22,53,196,28,248,22,57,193,9,28,248,22,79,193,27,248,22,53, +194,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53,194,249,22, +51,248,22,77,195,248,2,183,248,22,53,196,249,22,51,248,22,77,195,27,248, +22,53,196,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53,194, +249,22,51,248,22,77,195,248,2,183,248,22,53,196,248,22,53,194,249,22,51, +248,22,77,195,248,2,183,248,22,53,196,249,22,51,248,22,77,196,27,248,22, +53,197,28,248,22,57,193,9,28,248,22,79,193,248,2,183,248,22,53,194,249, +22,51,248,22,77,195,248,2,183,248,22,53,196,11,27,28,206,28,248,22,57, +195,9,28,248,22,79,195,249,22,51,248,22,77,197,27,248,22,53,198,28,248, +22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,248,32,184,89,162, +8,64,35,45,2,116,222,28,248,22,57,193,9,28,248,22,79,193,249,22,51, +248,22,77,195,27,248,22,53,196,28,248,22,57,193,9,28,248,22,79,193,249, +22,51,248,22,77,195,27,248,22,53,196,28,248,22,57,193,9,28,248,22,79, +193,249,22,51,248,22,77,195,248,2,184,248,22,53,196,248,2,184,248,22,53, +194,27,248,22,53,194,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248, +22,77,195,248,2,184,248,22,53,196,248,2,184,248,22,53,194,27,248,22,53, +194,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,27,248, 22,53,196,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195, -248,2,180,248,22,53,196,248,2,180,248,22,53,194,27,248,22,53,194,28,248, -22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,248,2,180,248,22, -53,196,248,2,180,248,22,53,194,27,248,22,53,194,28,248,22,57,193,9,28, -248,22,79,193,249,22,51,248,22,77,195,27,248,22,53,196,28,248,22,57,193, -9,28,248,22,79,193,249,22,51,248,22,77,195,248,2,180,248,22,53,196,248, -2,180,248,22,53,194,27,248,22,53,194,28,248,22,57,193,9,28,248,22,79, -193,249,22,51,248,22,77,195,248,2,180,248,22,53,196,248,2,180,248,22,53, -194,248,22,53,196,248,2,180,248,22,53,194,27,248,22,53,196,28,248,22,57, -193,9,28,248,22,79,193,249,22,51,248,22,77,195,248,2,180,248,22,53,196, -248,2,180,248,22,53,194,11,27,28,23,15,248,80,159,48,57,35,195,11,27, -28,23,16,248,80,159,49,57,35,195,11,27,28,248,22,57,196,12,28,248,22, -57,197,251,22,1,22,252,39,2,2,177,6,29,29,116,111,111,32,109,97,110, -121,32,101,108,108,105,112,115,101,115,32,105,110,32,116,101,109,112,108,97,116, -101,181,28,249,22,252,11,2,23,19,23,15,248,22,59,23,18,249,22,59,23, -19,23,15,12,27,253,24,19,23,15,23,24,23,25,10,23,27,23,28,27,253, -24,20,23,18,28,23,25,249,22,65,205,206,11,23,18,10,11,23,29,28,23, -19,250,22,59,2,122,21,93,61,114,182,27,27,27,249,22,2,89,162,8,36, -35,43,9,225,25,30,27,250,80,159,39,58,35,2,182,249,80,159,41,37,35, -200,197,196,204,28,28,249,22,181,35,248,22,64,195,28,249,22,181,34,23,17, -28,248,22,57,202,249,22,252,13,2,200,21,95,2,122,93,2,182,94,63,99, -97,114,183,2,182,11,11,11,248,22,52,193,28,28,249,22,181,36,248,22,64, +248,2,184,248,22,53,196,248,2,184,248,22,53,194,27,248,22,53,194,28,248, +22,57,193,9,28,248,22,79,193,249,22,51,248,22,77,195,248,2,184,248,22, +53,196,248,2,184,248,22,53,194,248,22,53,196,248,2,184,248,22,53,194,27, +248,22,53,196,28,248,22,57,193,9,28,248,22,79,193,249,22,51,248,22,77, +195,248,2,184,248,22,53,196,248,2,184,248,22,53,194,11,27,28,23,15,248, +80,159,48,57,35,195,11,27,28,23,16,248,80,159,49,57,35,195,11,27,28, +248,22,57,196,12,28,248,22,57,197,251,22,1,22,252,39,2,2,181,6,29, +29,116,111,111,32,109,97,110,121,32,101,108,108,105,112,115,101,115,32,105,110, +32,116,101,109,112,108,97,116,101,185,28,249,22,252,11,2,23,19,23,15,248, +22,59,23,18,249,22,59,23,19,23,15,12,27,253,24,19,23,15,23,24,23, +25,10,23,27,23,28,27,253,24,20,23,18,28,23,25,249,22,65,205,206,11, +23,18,10,11,23,29,28,23,19,250,22,59,2,126,21,93,61,114,186,27,27, +27,249,22,2,89,162,8,36,35,43,9,225,25,30,27,250,80,159,39,58,35, +2,186,249,80,159,41,37,35,200,197,196,204,28,28,249,22,181,35,248,22,64, 195,28,249,22,181,34,23,17,28,248,22,57,202,249,22,252,13,2,200,21,95, -2,122,93,2,182,95,2,126,94,2,183,2,182,94,64,99,97,100,114,184,2, -182,11,11,11,250,22,61,2,133,21,95,2,122,94,61,97,185,61,98,186,95, -2,126,2,185,2,186,249,80,158,8,28,52,197,9,27,250,22,61,2,133,250, -22,59,2,122,64,118,97,108,115,187,249,22,59,23,15,28,248,22,57,23,19, -2,187,21,95,66,97,112,112,101,110,100,188,68,115,104,97,108,108,111,119,115, -189,2,187,249,80,158,8,29,52,198,9,28,248,22,186,23,17,192,27,250,22, -59,65,97,112,112,108,121,190,2,188,196,27,248,22,171,23,19,28,248,22,186, -193,193,27,250,22,59,2,190,2,188,197,27,248,22,171,195,28,248,22,186,193, -193,27,250,22,59,2,190,2,188,197,27,248,22,171,195,28,248,22,186,193,193, -27,250,22,59,2,190,2,188,197,27,248,22,171,195,28,248,22,186,193,193,27, -250,22,59,2,190,2,188,197,27,248,22,171,195,28,248,22,186,193,193,27,250, -22,59,2,190,2,188,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22, -59,2,190,2,188,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59, -2,190,2,188,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2, -190,2,188,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2,190, -2,188,197,27,248,22,171,195,28,248,22,186,193,193,249,32,191,89,162,8,64, -36,55,2,157,222,28,248,22,186,194,192,27,250,22,59,2,190,2,188,196,27, -248,22,171,196,28,248,22,186,193,193,27,250,22,59,2,190,2,188,197,27,248, -22,171,195,28,248,22,186,193,193,27,250,22,59,2,190,2,188,197,27,248,22, -171,195,28,248,22,186,193,193,27,250,22,59,2,190,2,188,197,27,248,22,171, -195,28,248,22,186,193,193,27,250,22,59,2,190,2,188,197,27,248,22,171,195, -28,248,22,186,193,193,27,250,22,59,2,190,2,188,197,27,248,22,171,195,28, -248,22,186,193,193,27,250,22,59,2,190,2,188,197,27,248,22,171,195,28,248, -22,186,193,193,249,2,191,250,22,59,2,190,2,188,198,248,22,171,195,250,22, -59,2,190,2,188,198,248,22,171,195,28,248,22,57,201,192,250,22,59,2,131, -248,22,59,249,22,59,2,189,249,22,61,2,126,249,80,158,8,32,52,249,22, -2,89,162,8,36,35,43,9,225,34,39,36,250,80,159,39,58,35,2,182,249, -80,159,41,37,35,200,197,196,23,20,9,195,27,248,80,159,57,59,35,199,28, -249,22,252,11,2,194,2,154,193,250,22,59,2,188,196,195,12,28,248,80,158, -38,47,197,27,248,80,158,39,43,198,28,28,200,28,248,22,41,248,22,210,194, -249,22,223,194,20,15,159,40,34,8,41,11,11,28,28,248,80,158,39,47,248, -80,158,40,42,199,248,80,158,39,41,248,80,158,40,42,248,80,158,41,42,200, -11,27,248,80,158,40,43,248,80,158,41,42,200,253,215,198,205,198,11,23,16, -23,17,251,22,252,39,2,2,177,6,30,30,109,105,115,112,108,97,99,101,100, +2,126,93,2,186,94,63,99,97,114,187,2,186,11,11,11,248,22,52,193,28, +28,249,22,181,36,248,22,64,195,28,249,22,181,34,23,17,28,248,22,57,202, +249,22,252,13,2,200,21,95,2,126,93,2,186,95,2,130,94,2,187,2,186, +94,64,99,97,100,114,188,2,186,11,11,11,250,22,61,2,137,21,95,2,126, +94,61,97,189,61,98,190,95,2,130,2,189,2,190,249,80,158,8,28,52,197, +9,27,250,22,61,2,137,250,22,59,2,126,64,118,97,108,115,191,249,22,59, +23,15,28,248,22,57,23,19,2,191,21,95,66,97,112,112,101,110,100,192,68, +115,104,97,108,108,111,119,115,193,2,191,249,80,158,8,29,52,198,9,28,248, +22,186,23,17,192,27,250,22,59,65,97,112,112,108,121,194,2,192,196,27,248, +22,171,23,19,28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248, +22,171,195,28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22, +171,195,28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171, +195,28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195, +28,248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28, +248,22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28,248, +22,186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28,248,22, +186,193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28,248,22,186, +193,193,27,250,22,59,2,194,2,192,197,27,248,22,171,195,28,248,22,186,193, +193,249,32,195,89,162,8,64,36,55,2,161,222,28,248,22,186,194,192,27,250, +22,59,2,194,2,192,196,27,248,22,171,196,28,248,22,186,193,193,27,250,22, +59,2,194,2,192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59, +2,194,2,192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2, +194,2,192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2,194, +2,192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2,194,2, +192,197,27,248,22,171,195,28,248,22,186,193,193,27,250,22,59,2,194,2,192, +197,27,248,22,171,195,28,248,22,186,193,193,249,2,195,250,22,59,2,194,2, +192,198,248,22,171,195,250,22,59,2,194,2,192,198,248,22,171,195,28,248,22, +57,201,192,250,22,59,2,135,248,22,59,249,22,59,2,193,249,22,61,2,130, +249,80,158,8,32,52,249,22,2,89,162,8,36,35,43,9,225,34,39,36,250, +80,159,39,58,35,2,186,249,80,159,41,37,35,200,197,196,23,20,9,195,27, +248,80,159,57,59,35,199,28,249,22,252,11,2,194,2,158,193,250,22,59,2, +192,196,195,12,28,248,80,158,38,47,197,27,248,80,158,39,43,198,28,28,200, +28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,40,34,8,43,11,11, +28,28,248,80,158,39,47,248,80,158,40,42,199,248,80,158,39,41,248,80,158, +40,42,248,80,158,41,42,200,11,27,248,80,158,40,43,248,80,158,41,42,200, +253,215,198,205,198,11,23,16,23,17,251,22,252,39,2,2,181,6,30,30,109, +105,115,112,108,97,99,101,100,32,101,108,108,105,112,115,101,115,32,105,110,32, +116,101,109,112,108,97,116,101,196,198,196,27,253,215,199,205,199,23,15,23,16, +23,17,27,253,216,248,80,158,47,42,206,206,23,15,23,16,23,17,23,18,28, +200,250,22,59,2,126,21,93,2,186,251,80,159,47,8,26,35,206,248,80,159, +48,59,35,201,248,80,159,48,59,35,200,206,12,28,249,80,158,39,51,198,11, +27,253,214,248,22,252,229,1,248,22,210,205,204,203,206,23,15,23,16,28,198, +250,22,59,2,126,21,93,2,186,249,22,59,72,108,105,115,116,45,62,118,101, +99,116,111,114,197,249,22,59,2,131,248,80,159,46,59,35,200,12,28,248,80, +158,38,50,197,28,249,22,5,89,162,8,36,35,38,9,223,6,28,248,22,206, +194,249,22,221,194,195,11,196,28,197,250,22,59,2,126,21,93,2,186,249,22, +59,2,157,201,12,28,197,27,249,22,5,89,162,8,36,35,38,9,223,7,28, +248,22,206,194,249,22,221,194,195,11,200,28,192,250,22,59,2,126,21,93,2, +186,250,80,159,44,58,35,2,186,249,80,159,46,36,35,205,206,23,15,87,95, +28,200,28,28,248,22,41,248,22,210,199,249,22,223,199,20,15,159,40,34,8, +43,11,251,22,252,39,2,2,181,6,30,30,109,105,115,112,108,97,99,101,100, 32,101,108,108,105,112,115,101,115,32,105,110,32,116,101,109,112,108,97,116,101, -192,198,196,27,253,215,199,205,199,23,15,23,16,23,17,27,253,216,248,80,158, -47,42,206,206,23,15,23,16,23,17,23,18,28,200,250,22,59,2,122,21,93, -2,182,251,80,159,47,8,26,35,206,248,80,159,48,59,35,201,248,80,159,48, -59,35,200,206,12,28,249,80,158,39,51,198,11,27,253,214,248,22,252,229,1, -248,22,210,205,204,203,206,23,15,23,16,28,198,250,22,59,2,122,21,93,2, -182,249,22,59,72,108,105,115,116,45,62,118,101,99,116,111,114,193,249,22,59, -2,127,248,80,159,46,59,35,200,12,28,248,80,158,38,50,197,28,249,22,5, -89,162,8,36,35,38,9,223,6,28,248,22,206,194,249,22,221,194,195,11,196, -28,197,250,22,59,2,122,21,93,2,182,249,22,59,2,153,201,12,28,197,27, -249,22,5,89,162,8,36,35,38,9,223,7,28,248,22,206,194,249,22,221,194, -195,11,200,28,192,250,22,59,2,122,21,93,2,182,250,80,159,44,58,35,2, -182,249,80,159,46,36,35,205,206,23,15,87,95,28,200,28,28,248,22,41,248, -22,210,199,249,22,223,199,20,15,159,40,34,8,41,11,251,22,252,39,2,2, -177,6,30,30,109,105,115,112,108,97,99,101,100,32,101,108,108,105,112,115,101, -115,32,105,110,32,116,101,109,112,108,97,116,101,194,198,201,12,12,249,80,159, -40,8,27,35,199,200,250,22,59,2,122,21,93,2,182,249,22,59,2,153,202, -28,28,28,248,22,41,248,22,210,198,249,22,223,198,20,15,159,39,34,8,41, -11,199,11,12,248,202,197,28,248,22,57,197,28,197,21,95,2,122,93,2,182, -2,154,12,28,197,250,22,59,2,122,21,93,2,182,249,22,59,2,153,201,12, -27,28,197,11,247,22,110,27,253,216,203,204,203,10,28,204,248,22,171,248,22, -64,206,11,28,204,11,89,162,8,36,35,42,9,223,7,27,250,22,116,196,248, -22,210,198,9,28,28,248,22,50,193,249,22,5,89,162,8,36,35,38,9,223, -4,249,22,221,195,194,194,11,12,250,22,115,196,248,22,210,198,249,22,51,199, -197,28,198,250,22,59,2,122,21,94,2,182,63,115,114,99,195,27,251,22,61, -2,159,249,22,59,2,153,28,23,18,250,22,209,23,21,2,96,11,11,248,80, -159,47,59,35,201,21,93,2,195,28,248,80,159,43,8,28,35,203,250,22,59, -2,131,21,93,94,64,101,120,110,104,196,11,248,22,59,250,22,59,2,129,2, -130,251,22,61,72,100,121,110,97,109,105,99,45,119,105,110,100,197,251,22,59, -2,122,9,21,95,2,3,2,196,93,1,25,99,117,114,114,101,110,116,45,101, -120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,198,249,22,59,2, -198,250,22,59,2,122,21,93,63,101,120,110,199,249,22,59,2,130,250,22,59, -2,122,9,251,22,59,2,124,21,94,70,101,120,110,58,98,114,101,97,107,63, -200,2,199,21,94,65,114,97,105,115,101,201,2,199,250,22,59,1,20,101,108, -108,105,112,115,105,115,45,99,111,117,110,116,45,101,114,114,111,114,202,249,22, -59,2,136,23,43,249,22,59,2,153,250,22,209,11,2,89,23,46,250,22,59, -2,122,9,250,22,61,2,131,248,22,59,249,22,59,61,118,203,23,20,21,93, -95,2,122,9,2,203,21,93,95,2,122,9,94,2,198,2,196,192,249,22,1, -22,65,249,22,118,197,32,204,89,162,8,36,36,36,9,222,193,83,159,34,93, -80,159,34,59,35,32,205,89,162,34,35,38,2,58,222,28,28,248,22,50,193, -28,249,22,252,11,2,248,22,52,195,2,122,249,22,252,13,2,248,22,78,195, -21,93,2,182,11,11,248,22,87,193,249,22,61,194,21,93,2,182,83,159,34, -93,80,159,34,8,26,35,89,162,34,38,48,2,60,223,0,28,28,248,22,50, -195,28,249,22,252,11,2,248,22,52,197,2,153,28,249,22,252,11,2,248,22, -78,197,248,80,158,37,43,199,27,249,22,252,11,2,198,2,154,28,192,192,28, -248,22,50,197,28,249,22,252,11,2,248,22,52,199,2,153,249,22,252,11,2, -248,22,78,199,248,80,158,38,42,200,11,11,11,11,11,249,22,59,2,153,198, -28,248,22,206,194,27,250,22,209,197,63,99,116,120,206,197,251,22,59,2,159, -249,22,59,2,153,198,251,80,159,43,8,26,35,11,203,204,205,249,22,59,2, -153,198,28,249,22,252,11,2,197,2,154,249,22,59,74,108,105,115,116,45,105, -109,109,117,116,97,98,108,101,207,196,28,28,248,22,50,196,249,22,71,248,22, -52,198,21,94,2,207,75,108,105,115,116,42,45,105,109,109,117,116,97,98,108, -101,208,11,250,22,61,248,22,52,199,197,249,80,158,39,52,248,22,53,201,9, -28,28,248,22,50,196,249,22,252,11,2,248,22,52,198,74,99,111,110,115,45, -105,109,109,117,116,97,98,108,101,209,11,250,22,61,2,208,197,249,80,158,39, -52,248,22,53,201,9,28,28,248,22,50,195,28,248,22,50,196,28,249,22,252, -11,2,248,22,52,197,2,183,28,249,22,252,11,2,248,22,52,198,63,99,100, -114,210,28,248,22,41,248,22,78,196,249,22,252,11,2,248,22,78,197,248,22, -78,198,11,11,11,11,11,248,22,78,195,250,22,59,2,209,197,198,83,159,34, -93,80,159,34,58,35,32,211,89,162,34,37,40,2,56,222,28,28,194,249,22, -181,195,196,11,28,249,22,252,11,2,195,34,192,28,249,22,252,11,2,195,35, -249,22,59,2,210,194,28,249,22,252,11,2,195,36,249,22,59,64,99,100,100, -114,212,194,28,249,22,252,11,2,195,37,249,22,59,65,99,100,100,100,114,213, -194,28,249,22,252,11,2,195,38,249,22,59,66,99,100,100,100,100,114,214,194, -250,22,59,69,108,105,115,116,45,116,97,105,108,215,195,196,28,249,22,252,11, -2,195,34,249,22,59,2,183,194,28,249,22,252,11,2,195,35,249,22,59,2, -184,194,28,249,22,252,11,2,195,36,249,22,59,65,99,97,100,100,114,216,194, -28,249,22,252,11,2,195,37,249,22,59,66,99,97,100,100,100,114,217,194,250, -22,59,68,108,105,115,116,45,114,101,102,218,195,196,83,159,34,93,80,159,34, -44,35,89,162,34,36,41,2,27,223,0,250,80,159,37,8,51,35,197,196,10, -83,159,34,93,80,159,34,56,35,89,162,8,36,38,54,2,52,223,0,27,249, -22,5,89,162,34,35,45,9,223,4,27,28,248,22,50,195,248,22,52,195,194, -27,248,22,50,196,28,28,248,22,50,194,248,22,50,195,11,252,32,219,89,162, -8,64,39,47,2,112,222,28,28,248,22,50,195,248,22,50,196,11,27,248,22, -52,196,27,248,22,52,198,28,28,248,22,50,194,248,22,50,193,11,252,2,219, -199,200,248,22,52,199,248,22,52,198,10,28,248,22,50,193,252,2,219,199,200, -198,248,22,52,198,11,28,248,22,206,194,28,248,22,206,193,28,249,22,221,195, -194,249,22,51,196,11,11,11,11,28,248,22,50,196,27,248,22,52,197,28,28, -248,22,50,196,248,22,50,193,11,252,2,219,198,199,248,22,52,201,248,22,52, -198,10,28,248,22,50,193,252,2,219,198,199,200,248,22,52,198,11,28,248,22, -206,196,28,248,22,206,193,28,249,22,221,197,194,249,22,51,196,10,11,11,11, -28,248,22,206,195,28,248,22,206,196,28,249,22,221,196,197,249,22,51,28,198, -194,195,248,22,252,9,2,199,11,11,11,198,200,248,22,52,199,248,22,52,200, -10,28,248,22,50,195,252,2,219,198,200,198,248,22,52,200,11,28,248,22,206, -194,28,248,22,206,195,28,249,22,221,195,196,249,22,51,28,194,195,197,248,22, -252,9,2,195,11,11,11,197,87,94,28,192,12,251,22,1,22,252,39,2,2, -177,6,49,49,116,111,111,32,102,101,119,32,101,108,108,105,112,115,101,115,32, -102,111,114,32,112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101,32, -105,110,32,116,101,109,112,108,97,116,101,220,27,28,248,22,206,200,199,27,248, -22,52,201,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27, -248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192, +198,198,201,12,12,249,80,159,40,8,27,35,199,200,250,22,59,2,126,21,93, +2,186,249,22,59,2,157,202,28,28,28,248,22,41,248,22,210,198,249,22,223, +198,20,15,159,39,34,8,43,11,199,11,12,248,202,197,28,248,22,57,197,28, +197,21,95,2,126,93,2,186,2,158,12,28,197,250,22,59,2,126,21,93,2, +186,249,22,59,2,157,201,12,27,28,197,11,247,22,110,27,253,216,203,204,203, +10,28,204,248,22,171,248,22,64,206,11,28,204,11,89,162,8,36,35,42,9, +223,7,27,250,22,116,196,248,22,210,198,9,28,28,248,22,50,193,249,22,5, +89,162,8,36,35,38,9,223,4,249,22,221,195,194,194,11,12,250,22,115,196, +248,22,210,198,249,22,51,199,197,28,198,250,22,59,2,126,21,93,2,186,27, +27,248,80,159,44,59,35,198,28,28,248,22,50,193,249,22,252,11,2,248,22, +52,195,78,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101, +199,11,192,27,28,206,250,22,209,23,17,2,100,23,17,11,250,22,59,1,26, +100,97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,47, +115,104,97,112,101,200,249,22,59,2,157,197,196,28,248,80,159,43,8,28,35, +203,251,22,59,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105,115,45, +101,114,114,111,114,201,250,22,59,2,126,9,199,249,22,59,2,140,23,15,249, +22,59,2,157,250,22,209,11,2,93,23,18,192,249,22,1,22,65,249,22,118, +197,32,202,89,162,8,36,36,36,9,222,193,83,159,34,93,80,159,34,59,35, +32,203,89,162,34,35,38,2,58,222,28,28,248,22,50,193,28,249,22,252,11, +2,248,22,52,195,2,126,249,22,252,13,2,248,22,78,195,21,93,2,186,11, +11,248,22,87,193,249,22,61,194,21,93,2,186,83,159,34,93,80,159,34,8, +26,35,89,162,34,38,50,2,60,223,0,28,28,248,22,50,195,28,249,22,252, +11,2,248,22,52,197,2,157,28,249,22,252,11,2,248,22,78,197,248,80,158, +37,43,199,27,249,22,252,11,2,198,2,158,28,192,192,28,248,22,50,197,28, +249,22,252,11,2,248,22,52,199,2,157,249,22,252,11,2,248,22,78,199,248, +80,158,38,42,200,11,11,11,11,11,249,22,59,2,157,198,28,28,248,22,50, +196,249,22,252,11,2,248,22,52,198,2,199,11,28,28,248,22,50,195,28,249, +22,252,11,2,248,22,52,197,2,157,249,22,252,11,2,248,22,78,197,248,80, +158,37,43,199,11,11,250,22,61,2,199,249,22,59,2,157,27,249,22,51,248, +22,78,203,248,22,95,204,28,248,22,206,200,251,22,209,203,196,203,203,192,248, +22,80,199,28,28,248,22,50,195,249,22,252,11,2,2,199,248,22,52,197,11, +250,22,61,2,199,249,22,59,2,157,27,249,22,51,248,22,95,203,248,22,95, +204,28,248,22,206,200,251,22,209,203,196,203,203,192,249,80,158,39,52,248,22, +80,200,248,22,80,201,27,247,22,48,27,249,22,51,195,248,22,95,200,27,28, +248,22,206,197,251,22,209,200,197,200,200,193,252,22,61,2,199,249,22,59,2, +157,199,199,202,248,22,80,204,28,249,22,252,11,2,197,2,158,251,80,159,38, +8,26,35,197,198,21,94,2,199,94,2,157,9,200,28,28,248,22,50,196,28, +249,22,252,11,2,248,22,52,198,2,157,27,248,22,52,197,249,22,183,44,249, +80,159,39,8,30,35,196,45,11,11,251,80,159,38,8,26,35,197,198,249,22, +59,2,199,201,200,251,80,159,38,8,26,35,197,198,27,247,22,48,251,22,59, +2,199,249,22,59,2,157,198,196,204,200,83,159,34,93,80,159,34,8,29,35, +89,162,34,36,47,2,66,223,0,249,22,183,196,27,248,22,170,198,28,249,22, +182,194,35,34,28,248,22,206,197,249,80,159,39,8,30,35,248,22,210,199,194, +28,248,22,50,197,27,249,80,159,40,8,30,35,248,22,52,200,195,249,22,172, +194,249,80,159,42,8,30,35,248,22,53,202,249,22,173,199,198,28,248,22,252, +222,1,197,249,80,159,39,8,30,35,248,22,252,229,1,199,194,28,248,22,107, +197,248,22,170,249,80,159,40,8,30,35,248,22,108,200,248,22,171,196,35,83, +159,34,93,80,159,34,8,30,35,89,162,34,36,49,2,68,223,0,28,249,22, +182,196,35,34,28,248,22,206,194,27,248,22,210,195,28,249,22,182,197,35,34, +28,248,22,206,193,249,80,159,37,8,30,35,248,22,210,195,197,28,248,22,50, +193,27,249,80,159,38,8,30,35,248,22,52,196,198,249,22,172,194,249,80,159, +40,8,30,35,248,22,53,198,249,22,173,202,198,28,248,22,252,222,1,193,249, +80,159,37,8,30,35,248,22,252,229,1,195,197,28,248,22,107,193,248,22,170, +249,80,159,38,8,30,35,248,22,108,196,248,22,171,199,35,28,248,22,50,194, +27,27,248,22,52,196,28,249,22,182,198,35,34,28,248,22,206,193,249,80,159, +38,8,30,35,248,22,210,195,198,28,248,22,50,193,27,249,80,159,39,8,30, +35,248,22,52,196,199,249,22,172,194,249,80,159,41,8,30,35,248,22,53,198, +249,22,173,203,198,28,248,22,252,222,1,193,249,80,159,38,8,30,35,248,22, +252,229,1,195,198,28,248,22,107,193,248,22,170,249,80,159,39,8,30,35,248, +22,108,196,248,22,171,200,35,249,22,172,194,27,248,22,53,198,27,249,22,173, +201,198,28,249,22,182,194,35,34,28,248,22,206,194,249,80,159,41,8,30,35, +248,22,210,196,194,28,248,22,50,194,27,249,80,159,42,8,30,35,248,22,52, +197,195,249,22,172,194,249,80,159,44,8,30,35,248,22,53,199,249,22,173,199, +198,28,248,22,252,222,1,194,249,80,159,41,8,30,35,248,22,252,229,1,196, +194,28,248,22,107,194,248,22,170,249,80,159,42,8,30,35,248,22,108,197,248, +22,171,196,35,28,248,22,252,222,1,194,27,248,22,252,229,1,195,28,249,22, +182,197,35,34,28,248,22,206,193,249,80,159,37,8,30,35,248,22,210,195,197, +28,248,22,50,193,27,249,80,159,38,8,30,35,248,22,52,196,198,249,22,172, +194,249,80,159,40,8,30,35,248,22,53,198,249,22,173,202,198,28,248,22,252, +222,1,193,249,80,159,37,8,30,35,248,22,252,229,1,195,197,28,248,22,107, +193,248,22,170,249,80,159,38,8,30,35,248,22,108,196,248,22,171,199,35,28, +248,22,107,194,248,22,170,27,248,22,108,196,27,248,22,171,198,28,249,22,182, +194,35,34,28,248,22,206,194,249,80,159,39,8,30,35,248,22,210,196,194,28, +248,22,50,194,27,249,80,159,40,8,30,35,248,22,52,197,195,249,22,172,194, +249,80,159,42,8,30,35,248,22,53,199,249,22,173,199,198,28,248,22,252,222, +1,194,249,80,159,39,8,30,35,248,22,252,229,1,196,194,28,248,22,107,194, +248,22,170,249,80,159,40,8,30,35,248,22,108,197,248,22,171,196,35,35,83, +159,34,93,80,159,34,58,35,32,204,89,162,34,37,40,2,56,222,28,28,194, +249,22,181,195,196,11,28,249,22,252,11,2,195,34,192,28,249,22,252,11,2, +195,35,249,22,59,63,99,100,114,205,194,28,249,22,252,11,2,195,36,249,22, +59,64,99,100,100,114,206,194,28,249,22,252,11,2,195,37,249,22,59,65,99, +100,100,100,114,207,194,28,249,22,252,11,2,195,38,249,22,59,66,99,100,100, +100,100,114,208,194,250,22,59,69,108,105,115,116,45,116,97,105,108,209,195,196, +28,249,22,252,11,2,195,34,249,22,59,2,187,194,28,249,22,252,11,2,195, +35,249,22,59,2,188,194,28,249,22,252,11,2,195,36,249,22,59,65,99,97, +100,100,114,210,194,28,249,22,252,11,2,195,37,249,22,59,66,99,97,100,100, +100,114,211,194,250,22,59,68,108,105,115,116,45,114,101,102,212,195,196,83,159, +34,93,80,159,34,44,35,89,162,34,36,41,2,27,223,0,250,80,159,37,8, +53,35,197,196,10,83,159,34,93,80,159,34,56,35,89,162,8,36,38,54,2, +52,223,0,27,249,22,5,89,162,34,35,45,9,223,4,27,28,248,22,50,195, +248,22,52,195,194,27,248,22,50,196,28,28,248,22,50,194,248,22,50,195,11, +252,32,213,89,162,8,64,39,47,2,116,222,28,28,248,22,50,195,248,22,50, +196,11,27,248,22,52,196,27,248,22,52,198,28,28,248,22,50,194,248,22,50, +193,11,252,2,213,199,200,248,22,52,199,248,22,52,198,10,28,248,22,50,193, +252,2,213,199,200,198,248,22,52,198,11,28,248,22,206,194,28,248,22,206,193, +28,249,22,221,195,194,249,22,51,196,11,11,11,11,28,248,22,50,196,27,248, +22,52,197,28,28,248,22,50,196,248,22,50,193,11,252,2,213,198,199,248,22, +52,201,248,22,52,198,10,28,248,22,50,193,252,2,213,198,199,200,248,22,52, +198,11,28,248,22,206,196,28,248,22,206,193,28,249,22,221,197,194,249,22,51, +196,10,11,11,11,28,248,22,206,195,28,248,22,206,196,28,249,22,221,196,197, +249,22,51,28,198,194,195,248,22,252,9,2,199,11,11,11,198,200,248,22,52, +199,248,22,52,200,10,28,248,22,50,195,252,2,213,198,200,198,248,22,52,200, +11,28,248,22,206,194,28,248,22,206,195,28,249,22,221,195,196,249,22,51,28, +194,195,197,248,22,252,9,2,195,11,11,11,197,87,94,28,192,12,251,22,1, +22,252,39,2,2,181,6,49,49,116,111,111,32,102,101,119,32,101,108,108,105, +112,115,101,115,32,102,111,114,32,112,97,116,116,101,114,110,32,118,97,114,105, +97,98,108,101,32,105,110,32,116,101,109,112,108,97,116,101,214,27,28,248,22, +206,200,199,27,248,22,52,201,28,248,22,206,193,192,27,248,22,52,194,28,248, +22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28, +248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194, +28,248,22,206,193,192,248,32,215,89,162,8,100,35,44,2,116,222,28,248,22, +206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248, +22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28, +248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194, +28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,2,215,248, +22,52,194,248,22,52,194,28,249,22,252,11,2,203,194,248,22,59,202,249,22, +59,203,194,192,83,159,34,93,80,159,34,57,35,32,216,89,162,34,35,37,2, +54,222,249,22,2,32,217,89,162,8,36,35,44,9,222,28,248,22,206,193,192, 27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193, -192,248,32,221,89,162,8,100,35,44,2,112,222,28,248,22,206,193,192,27,248, -22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27, -248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192, +192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206, +193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22, +206,193,192,248,32,218,89,162,8,100,35,44,2,116,222,28,248,22,206,193,192, 27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193, -192,27,248,22,52,194,28,248,22,206,193,192,248,2,221,248,22,52,194,248,22, -52,194,28,249,22,252,11,2,203,194,248,22,59,202,249,22,59,203,194,192,83, -159,34,93,80,159,34,57,35,32,222,89,162,34,35,37,2,54,222,249,22,2, -32,223,89,162,8,36,35,44,9,222,28,248,22,206,193,192,27,248,22,52,194, -28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22, -52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,32, -224,89,162,8,100,35,44,2,112,222,28,248,22,206,193,192,27,248,22,52,194, -28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22, -52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248, -22,52,194,28,248,22,206,193,192,248,2,224,248,22,52,194,248,22,52,194,194, -83,159,34,93,80,159,34,8,27,35,32,225,89,162,34,36,38,2,62,222,249, -22,3,89,162,34,35,42,9,223,2,28,248,22,50,194,27,248,22,52,195,28, -248,22,206,193,28,249,22,221,194,195,250,22,252,39,2,2,177,6,50,50,109, -105,115,115,105,110,103,32,101,108,108,105,112,115,101,115,32,119,105,116,104,32, -112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101,32,105,110,32,116, -101,109,112,108,97,116,101,226,196,12,27,248,22,52,194,28,248,22,206,193,28, -249,22,221,194,196,250,22,252,39,2,2,177,2,226,197,12,249,32,227,89,162, -8,64,36,41,2,112,222,28,248,22,206,194,28,249,22,221,195,194,250,22,252, -39,2,2,177,2,226,195,12,27,248,22,52,195,28,248,22,206,193,28,249,22, -221,194,195,250,22,252,39,2,2,177,2,226,196,12,27,248,22,52,194,28,248, -22,206,193,28,249,22,221,194,196,250,22,252,39,2,2,177,2,226,197,12,249, -2,227,196,248,22,52,195,196,248,22,52,195,12,195,83,159,34,93,80,159,34, -40,35,89,162,34,35,41,2,18,223,0,28,248,80,158,35,47,194,27,248,80, -158,36,42,195,28,248,80,158,36,47,193,28,27,248,80,158,37,43,194,28,248, -22,41,248,22,210,194,249,22,223,194,20,15,159,38,34,8,41,11,248,22,252, -9,2,27,248,80,158,38,43,197,28,248,22,41,248,22,210,194,249,22,223,194, -20,15,159,39,34,8,41,11,11,11,11,83,159,34,93,80,159,34,45,35,32, -228,89,162,34,36,39,2,29,222,249,32,229,89,162,8,64,36,52,2,112,222, -28,248,22,57,194,9,28,248,193,248,22,52,195,249,22,51,27,248,22,52,197, -28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22, -52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248, -22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27, -248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192, -27,248,22,52,194,28,248,22,206,193,192,248,32,230,89,162,8,64,35,44,2, -112,222,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248, -22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27, -248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192, -27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193, -192,248,2,230,248,22,52,194,248,22,52,194,249,2,229,196,248,22,53,198,249, -2,229,194,248,22,53,196,195,194,83,159,34,93,80,159,34,8,28,35,32,231, -89,162,34,35,37,2,64,222,248,32,232,89,162,8,64,35,40,2,112,222,28, -248,22,57,193,11,28,248,22,50,248,22,52,194,27,248,22,53,194,28,248,22, -57,193,11,28,248,22,50,248,22,52,194,10,27,248,22,53,194,28,248,22,57, -193,11,28,248,22,50,248,22,52,194,10,248,32,233,89,162,8,64,35,39,2, -112,222,28,248,22,57,193,11,28,248,22,50,248,22,52,194,10,27,248,22,53, -194,28,248,22,57,193,11,28,248,22,50,248,22,52,194,10,27,248,22,53,194, -28,248,22,57,193,11,28,248,22,50,248,22,52,194,10,248,2,233,248,22,53, -194,248,22,53,194,248,2,232,248,22,53,194,193,83,159,34,93,80,159,34,8, -29,35,89,162,34,35,41,2,66,223,0,28,248,80,158,35,47,194,28,27,248, -80,158,36,43,195,28,248,80,158,36,47,193,28,27,248,80,158,37,43,194,28, -248,80,158,37,47,193,28,248,80,159,37,8,29,35,248,80,158,38,43,194,248, -80,159,37,8,29,35,248,80,158,38,42,194,11,28,248,80,158,37,50,193,248, -22,252,9,2,28,248,22,41,248,22,210,195,249,22,223,195,20,15,159,39,34, -8,41,11,10,27,248,80,158,37,42,194,28,248,80,158,37,47,193,28,248,80, -159,37,8,29,35,248,80,158,38,43,194,248,80,159,37,8,29,35,248,80,158, -38,42,194,11,28,248,80,158,37,50,193,248,22,252,9,2,28,248,22,41,248, -22,210,195,249,22,223,195,20,15,159,39,34,8,41,11,10,11,28,248,80,158, -36,50,193,248,22,252,9,2,28,248,22,41,248,22,210,195,249,22,223,195,20, -15,159,38,34,8,41,11,10,27,248,80,158,36,42,195,28,248,80,158,36,47, -193,28,27,248,80,158,37,43,194,28,248,80,158,37,47,193,28,248,80,159,37, -8,29,35,248,80,158,38,43,194,248,80,159,37,8,29,35,248,80,158,38,42, -194,11,28,248,80,158,37,50,193,248,22,252,9,2,28,248,22,41,248,22,210, -195,249,22,223,195,20,15,159,39,34,8,41,11,10,27,248,80,158,37,42,194, -28,248,80,158,37,47,193,28,248,80,159,37,8,29,35,248,80,158,38,43,194, -248,80,159,37,8,29,35,248,80,158,38,42,194,11,28,248,80,158,37,50,193, -248,22,252,9,2,28,248,22,41,248,22,210,195,249,22,223,195,20,15,159,39, -34,8,41,11,10,11,28,248,80,158,36,50,193,248,22,252,9,2,28,248,22, -41,248,22,210,195,249,22,223,195,20,15,159,38,34,8,41,11,10,11,28,248, -80,158,35,50,194,248,22,252,9,2,28,248,22,41,248,22,210,196,249,22,223, -196,20,15,159,37,34,8,41,11,10,83,159,34,97,80,159,34,8,30,35,80, -159,34,8,31,35,80,159,34,8,32,35,80,159,34,8,33,35,80,159,34,8, -34,35,26,8,22,252,91,2,74,115,121,110,116,97,120,45,109,97,112,112,105, -110,103,234,11,36,34,11,9,247,22,252,114,2,89,162,34,36,44,9,223,8, -28,248,80,158,35,50,195,250,22,252,39,2,11,6,53,53,112,97,116,116,101, -114,110,32,118,97,114,105,97,98,108,101,32,99,97,110,110,111,116,32,98,101, -32,117,115,101,100,32,111,117,116,115,105,100,101,32,111,102,32,97,32,116,101, -109,112,108,97,116,101,235,197,251,22,252,39,2,11,6,53,53,112,97,116,116, -101,114,110,32,118,97,114,105,97,98,108,101,32,99,97,110,110,111,116,32,98, -101,32,117,115,101,100,32,111,117,116,115,105,100,101,32,111,102,32,97,32,116, -101,109,112,108,97,116,101,236,198,28,249,22,225,20,15,159,40,36,8,41,248, -80,158,41,43,201,248,80,158,39,43,248,80,158,40,42,200,248,80,158,39,43, -199,83,159,34,93,80,159,34,8,35,35,249,22,252,93,2,80,158,36,8,33, -34,83,159,34,93,80,159,34,8,36,35,249,22,252,93,2,80,158,36,8,33, -35,83,159,34,93,80,159,34,8,37,35,89,162,34,36,40,2,82,223,0,248, -22,252,90,3,249,80,158,37,8,31,196,197,83,159,34,93,80,159,34,8,38, -35,89,162,34,35,38,2,84,223,0,28,248,22,252,91,3,194,248,80,158,35, -8,32,248,22,252,92,3,195,11,83,159,34,93,80,159,34,8,39,35,89,162, -34,35,38,2,86,223,0,248,80,158,35,8,35,248,22,252,92,3,195,83,159, -34,93,80,159,34,8,40,35,89,162,34,35,38,2,88,223,0,248,80,158,35, -8,36,248,22,252,92,3,195,95,2,4,2,20,2,90,9,2,4,0}; - EVAL_ONE_SIZED_STR((char *)expr, 12954); +192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206, +193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22, +206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,2,218,248,22,52,194, +248,22,52,194,194,83,159,34,93,80,159,34,8,27,35,32,219,89,162,34,36, +38,2,62,222,249,22,3,89,162,34,35,42,9,223,2,28,248,22,50,194,27, +248,22,52,195,28,248,22,206,193,28,249,22,221,194,195,250,22,252,39,2,2, +181,6,50,50,109,105,115,115,105,110,103,32,101,108,108,105,112,115,101,115,32, +119,105,116,104,32,112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101, +32,105,110,32,116,101,109,112,108,97,116,101,220,196,12,27,248,22,52,194,28, +248,22,206,193,28,249,22,221,194,196,250,22,252,39,2,2,181,2,220,197,12, +249,32,221,89,162,8,64,36,41,2,116,222,28,248,22,206,194,28,249,22,221, +195,194,250,22,252,39,2,2,181,2,220,195,12,27,248,22,52,195,28,248,22, +206,193,28,249,22,221,194,195,250,22,252,39,2,2,181,2,220,196,12,27,248, +22,52,194,28,248,22,206,193,28,249,22,221,194,196,250,22,252,39,2,2,181, +2,220,197,12,249,2,221,196,248,22,52,195,196,248,22,52,195,12,195,83,159, +34,93,80,159,34,40,35,89,162,34,35,41,2,18,223,0,28,248,80,158,35, +47,194,27,248,80,158,36,42,195,28,248,80,158,36,47,193,28,27,248,80,158, +37,43,194,28,248,22,41,248,22,210,194,249,22,223,194,20,15,159,38,34,8, +43,11,248,22,252,9,2,27,248,80,158,38,43,197,28,248,22,41,248,22,210, +194,249,22,223,194,20,15,159,39,34,8,43,11,11,11,11,83,159,34,93,80, +159,34,45,35,32,222,89,162,34,36,39,2,29,222,249,32,223,89,162,8,64, +36,52,2,116,222,28,248,22,57,194,9,28,248,193,248,22,52,195,249,22,51, +27,248,22,52,197,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193, +192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206, +193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22, +206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248, +22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28, +248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,32,224,89,162, +8,64,35,44,2,116,222,28,248,22,206,193,192,27,248,22,52,194,28,248,22, +206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248, +22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194,28, +248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194, +28,248,22,206,193,192,248,2,224,248,22,52,194,248,22,52,194,249,2,223,196, +248,22,53,198,249,2,223,194,248,22,53,196,195,194,83,159,34,93,80,159,34, +8,28,35,32,225,89,162,34,35,37,2,64,222,248,32,226,89,162,8,64,35, +40,2,116,222,28,248,22,57,193,11,28,248,22,50,248,22,52,194,27,248,22, +53,194,28,248,22,57,193,11,28,248,22,50,248,22,52,194,10,27,248,22,53, +194,28,248,22,57,193,11,28,248,22,50,248,22,52,194,10,248,32,227,89,162, +8,64,35,39,2,116,222,28,248,22,57,193,11,28,248,22,50,248,22,52,194, +10,27,248,22,53,194,28,248,22,57,193,11,28,248,22,50,248,22,52,194,10, +27,248,22,53,194,28,248,22,57,193,11,28,248,22,50,248,22,52,194,10,248, +2,227,248,22,53,194,248,22,53,194,248,2,226,248,22,53,194,193,83,159,34, +93,80,159,34,8,31,35,89,162,34,35,41,2,70,223,0,28,248,80,158,35, +47,194,28,27,248,80,158,36,43,195,28,248,80,158,36,47,193,28,27,248,80, +158,37,43,194,28,248,80,158,37,47,193,28,248,80,159,37,8,31,35,248,80, +158,38,43,194,248,80,159,37,8,31,35,248,80,158,38,42,194,11,28,248,80, +158,37,50,193,248,22,252,9,2,28,248,22,41,248,22,210,195,249,22,223,195, +20,15,159,39,34,8,43,11,10,27,248,80,158,37,42,194,28,248,80,158,37, +47,193,28,248,80,159,37,8,31,35,248,80,158,38,43,194,248,80,159,37,8, +31,35,248,80,158,38,42,194,11,28,248,80,158,37,50,193,248,22,252,9,2, +28,248,22,41,248,22,210,195,249,22,223,195,20,15,159,39,34,8,43,11,10, +11,28,248,80,158,36,50,193,248,22,252,9,2,28,248,22,41,248,22,210,195, +249,22,223,195,20,15,159,38,34,8,43,11,10,27,248,80,158,36,42,195,28, +248,80,158,36,47,193,28,27,248,80,158,37,43,194,28,248,80,158,37,47,193, +28,248,80,159,37,8,31,35,248,80,158,38,43,194,248,80,159,37,8,31,35, +248,80,158,38,42,194,11,28,248,80,158,37,50,193,248,22,252,9,2,28,248, +22,41,248,22,210,195,249,22,223,195,20,15,159,39,34,8,43,11,10,27,248, +80,158,37,42,194,28,248,80,158,37,47,193,28,248,80,159,37,8,31,35,248, +80,158,38,43,194,248,80,159,37,8,31,35,248,80,158,38,42,194,11,28,248, +80,158,37,50,193,248,22,252,9,2,28,248,22,41,248,22,210,195,249,22,223, +195,20,15,159,39,34,8,43,11,10,11,28,248,80,158,36,50,193,248,22,252, +9,2,28,248,22,41,248,22,210,195,249,22,223,195,20,15,159,38,34,8,43, +11,10,11,28,248,80,158,35,50,194,248,22,252,9,2,28,248,22,41,248,22, +210,196,249,22,223,196,20,15,159,37,34,8,43,11,10,83,159,34,97,80,159, +34,8,32,35,80,159,34,8,33,35,80,159,34,8,34,35,80,159,34,8,35, +35,80,159,34,8,36,35,26,8,22,252,91,2,74,115,121,110,116,97,120,45, +109,97,112,112,105,110,103,228,11,36,34,11,9,247,22,252,114,2,89,162,34, +36,44,9,223,8,28,248,80,158,35,50,195,250,22,252,39,2,11,6,53,53, +112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101,32,99,97,110,110, +111,116,32,98,101,32,117,115,101,100,32,111,117,116,115,105,100,101,32,111,102, +32,97,32,116,101,109,112,108,97,116,101,229,197,251,22,252,39,2,11,6,53, +53,112,97,116,116,101,114,110,32,118,97,114,105,97,98,108,101,32,99,97,110, +110,111,116,32,98,101,32,117,115,101,100,32,111,117,116,115,105,100,101,32,111, +102,32,97,32,116,101,109,112,108,97,116,101,230,198,28,249,22,225,20,15,159, +40,36,8,43,248,80,158,41,43,201,248,80,158,39,43,248,80,158,40,42,200, +248,80,158,39,43,199,83,159,34,93,80,159,34,8,37,35,249,22,252,93,2, +80,158,36,8,35,34,83,159,34,93,80,159,34,8,38,35,249,22,252,93,2, +80,158,36,8,35,35,83,159,34,93,80,159,34,8,39,35,89,162,34,36,40, +2,86,223,0,248,22,252,95,3,249,80,158,37,8,33,196,197,83,159,34,93, +80,159,34,8,40,35,89,162,34,35,38,2,88,223,0,28,248,22,252,96,3, +194,248,80,158,35,8,34,248,22,252,97,3,195,11,83,159,34,93,80,159,34, +8,41,35,89,162,34,35,38,2,90,223,0,248,80,158,35,8,37,248,22,252, +97,3,195,83,159,34,93,80,159,34,8,42,35,89,162,34,35,38,2,92,223, +0,248,80,158,35,8,38,248,22,252,97,3,195,95,2,4,2,20,2,94,9, +2,4,0}; + EVAL_ONE_SIZED_STR((char *)expr, 13715); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,149,252,22,18,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,178,252,176,24,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,69,35,37,115,116, 120,99,97,115,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159, -34,16,1,30,3,2,2,1,20,101,108,108,105,112,115,105,115,45,99,111,117, -110,116,45,101,114,114,111,114,4,254,1,16,0,11,11,16,1,2,4,35,11, -16,2,66,115,121,110,116,97,120,5,73,115,121,110,116,97,120,45,99,97,115, -101,42,42,6,16,2,11,11,16,2,2,5,2,6,34,36,94,16,5,93,2, -6,87,97,83,159,34,93,80,159,34,8,41,35,89,162,8,36,44,8,41,64, -108,111,111,112,7,223,0,28,248,22,57,200,251,22,59,20,15,159,38,41,43, -11,6,10,10,98,97,100,32,115,121,110,116,97,120,8,197,27,26,10,80,159, -45,8,41,35,204,205,206,23,15,23,16,23,17,248,22,53,23,19,248,22,53, -23,20,248,22,53,23,21,248,22,53,23,22,27,248,22,52,202,27,248,22,52, -204,27,248,22,52,206,27,248,22,52,23,16,91,159,37,10,90,161,35,34,10, -249,22,2,32,9,89,162,8,36,35,40,9,222,28,248,22,206,193,192,27,248, -22,52,194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248, -32,10,89,162,8,100,35,40,2,7,222,28,248,22,206,193,192,27,248,22,52, -194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22, -52,194,28,248,22,206,193,192,248,2,10,248,22,52,194,248,22,52,194,198,90, -161,35,35,10,249,22,2,32,11,89,162,8,36,35,38,9,222,250,22,209,195, -247,22,48,11,209,90,161,35,36,10,248,22,171,248,22,64,209,27,28,248,22, -52,23,18,248,22,59,20,15,159,44,42,43,200,27,252,80,158,49,41,23,19, -205,205,248,80,158,50,35,23,21,248,22,252,9,2,23,19,27,28,206,249,22, -252,13,2,195,21,95,66,108,97,109,98,100,97,12,93,61,101,13,2,13,249, -22,252,13,2,195,21,95,2,12,94,2,13,79,109,111,100,117,108,101,45,105, -100,101,110,116,105,102,105,101,114,61,63,14,2,13,27,250,22,59,20,15,159, -49,43,43,248,22,59,249,22,59,23,20,28,199,23,19,250,22,61,250,22,209, -20,15,159,58,44,43,206,23,22,23,22,28,23,24,9,248,22,59,23,28,251, -22,59,20,15,159,53,45,43,28,200,10,23,21,250,22,59,20,15,159,56,46, -43,250,22,2,89,162,8,36,36,47,9,226,25,27,19,17,249,22,59,199,27, -249,80,158,42,42,201,212,27,28,249,22,181,214,195,28,249,22,252,11,2,195, -34,64,116,97,105,108,15,28,249,22,252,11,2,195,35,20,15,159,41,47,43, -28,249,22,252,11,2,195,36,20,15,159,41,48,43,28,249,22,252,11,2,195, -37,20,15,159,41,49,43,28,249,22,252,11,2,195,38,20,15,159,41,50,43, -2,15,28,249,22,252,11,2,195,34,20,15,159,41,51,43,28,249,22,252,11, -2,195,35,20,15,159,41,52,43,28,249,22,252,11,2,195,36,20,15,159,41, -53,43,28,249,22,252,11,2,195,37,20,15,159,41,54,43,11,28,249,22,252, -11,2,194,2,15,28,248,22,186,194,198,250,22,59,20,15,159,44,55,43,201, -196,28,192,249,22,59,194,200,250,22,59,20,15,159,44,56,43,201,196,24,17, -24,18,251,22,59,20,15,159,8,26,57,43,251,22,2,80,159,8,30,8,42, -35,24,22,23,26,24,23,9,28,23,23,251,22,59,20,15,159,8,30,8,26, -43,23,27,23,25,23,21,23,21,202,28,201,250,22,59,20,15,159,49,8,27, -43,248,22,59,249,22,59,68,116,114,121,45,110,101,120,116,16,250,22,59,20, -15,159,55,8,28,43,247,22,59,23,20,195,192,83,159,34,93,80,159,34,8, -42,35,89,162,8,36,37,49,9,223,0,249,22,59,248,22,59,196,250,22,59, -20,15,159,39,58,43,28,248,22,206,200,34,27,248,22,52,201,28,248,22,206, -193,35,27,248,22,52,194,28,248,22,206,193,36,249,32,17,89,162,8,100,36, -45,2,7,222,28,248,22,206,193,193,27,248,22,52,194,27,248,22,170,196,28, -248,22,206,194,192,27,248,22,52,195,27,248,22,170,195,28,248,22,206,194,192, -27,248,22,52,195,27,248,22,170,195,28,248,22,206,194,192,249,2,17,248,22, -52,196,248,22,170,195,248,22,52,195,37,249,22,59,20,15,159,41,59,43,202, -83,159,34,93,80,159,34,8,40,35,89,162,34,35,39,9,223,0,27,248,80, -158,36,39,248,80,158,37,39,196,28,248,80,158,36,38,193,248,80,158,36,37, -193,248,80,158,36,37,248,80,158,37,39,196,83,159,34,93,80,159,34,8,39, -35,89,162,34,35,39,9,223,0,28,248,80,158,35,38,248,80,158,36,39,248, -80,158,37,39,196,248,80,158,35,37,248,80,158,36,39,195,11,89,162,8,36, -35,8,33,9,223,0,91,159,35,10,90,161,35,34,10,28,248,80,158,36,34, -195,248,22,53,248,80,158,37,35,196,11,87,94,28,28,248,80,158,36,34,195, -249,22,183,248,22,64,210,37,11,12,250,22,252,39,2,11,6,8,8,98,97, -100,32,102,111,114,109,18,197,27,248,22,52,209,27,248,22,78,210,27,248,22, -87,211,27,248,22,90,212,27,248,22,90,248,22,53,214,27,248,22,89,248,22, -53,215,87,96,28,248,80,158,42,34,195,12,250,22,252,39,2,248,22,210,201, -6,56,56,101,120,112,101,99,116,101,100,32,97,32,112,97,114,101,110,116,104, -101,115,105,122,101,100,32,115,101,113,117,101,110,99,101,32,111,102,32,108,105, -116,101,114,97,108,32,105,100,101,110,116,105,102,105,101,114,115,19,197,249,22, -3,89,162,34,35,41,9,224,9,7,28,248,80,158,36,36,195,12,250,22,252, -39,2,248,22,210,196,6,28,28,108,105,116,101,114,97,108,32,105,115,32,110, -111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,20,197,248,80,158, -44,35,197,249,22,3,89,162,34,35,42,9,224,9,7,28,28,248,80,158,36, -34,195,250,22,184,36,248,22,64,248,80,158,40,35,199,37,11,12,250,22,252, -39,2,248,22,210,196,6,10,10,98,97,100,32,99,108,97,117,115,101,21,197, -194,27,249,22,2,80,158,44,37,195,27,249,22,2,80,159,45,8,39,35,196, -27,249,22,2,80,159,46,8,40,35,197,27,20,15,159,45,34,43,27,20,15, -159,46,35,43,27,249,22,2,89,162,34,35,43,9,225,15,10,13,251,80,158, -40,40,196,199,199,248,80,158,41,35,198,248,80,158,50,35,200,27,28,248,80, -158,49,36,201,249,22,223,202,20,15,159,50,36,43,11,250,22,209,20,15,159, -51,37,43,250,22,59,20,15,159,54,38,43,248,22,59,249,22,59,204,28,248, -22,210,23,21,23,19,250,22,59,20,15,159,8,26,39,43,249,22,59,20,15, -159,8,28,40,43,249,22,209,23,26,64,104,101,114,101,22,23,22,26,10,80, -159,8,30,8,41,35,23,19,23,18,23,16,23,28,23,25,23,24,23,22,23, -21,23,17,23,20,23,18,34,20,98,159,38,16,9,30,23,65,35,37,115,116, -120,24,69,115,116,120,45,108,105,115,116,63,25,8,30,26,2,24,69,115,116, -120,45,62,108,105,115,116,27,4,30,28,2,24,71,105,100,101,110,116,105,102, -105,101,114,63,29,2,30,30,2,24,67,115,116,120,45,99,97,114,31,5,30, -32,2,24,69,115,116,120,45,112,97,105,114,63,33,11,30,34,2,24,67,115, -116,120,45,99,100,114,35,6,30,36,64,35,37,115,99,37,74,103,101,116,45, -109,97,116,99,104,45,118,97,114,115,38,0,30,39,2,37,74,109,97,107,101, -45,109,97,116,99,104,38,101,110,118,40,1,30,41,2,37,72,115,116,120,45, -109,101,109,113,45,112,111,115,42,5,16,29,18,101,63,97,114,103,43,43,98, -41,10,34,11,94,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101, -44,9,11,159,2,24,9,11,16,6,2,6,2,2,2,5,2,2,2,4,2, -2,98,40,10,35,11,95,159,2,37,9,11,159,2,44,9,11,159,2,24,9, -11,16,0,96,39,8,254,1,11,16,0,16,4,38,11,61,120,45,3,1,7, -101,110,118,50,56,57,53,46,16,4,37,11,61,108,47,3,1,7,101,110,118, -50,56,57,55,48,16,14,36,11,63,119,104,111,49,71,97,114,103,45,105,115, -45,115,116,120,63,50,64,101,120,112,114,51,63,107,119,115,52,68,108,105,116, -45,99,111,109,112,53,67,99,108,97,117,115,101,115,54,3,1,7,101,110,118, -50,57,48,48,55,2,55,2,55,2,55,2,55,2,55,16,8,35,11,68,112, -97,116,116,101,114,110,115,56,67,102,101,110,100,101,114,115,57,67,97,110,115, -119,101,114,115,58,3,1,7,101,110,118,50,57,48,52,59,2,59,2,59,18, -102,64,114,115,108,116,60,45,41,40,39,38,37,36,35,16,4,44,11,2,43, -3,1,7,101,110,118,50,57,48,56,61,18,102,2,14,47,41,40,39,38,37, -36,35,16,8,46,11,2,43,2,60,73,112,97,116,116,101,114,110,45,118,97, -114,115,115,62,2,61,2,61,2,61,18,102,2,22,49,41,40,39,38,37,36, -35,16,10,48,11,2,43,2,60,2,62,76,108,105,116,45,99,111,109,112,45, -105,115,45,109,111,100,63,63,2,61,2,61,2,61,2,61,18,158,63,108,101, -116,64,49,18,158,1,20,100,97,116,117,109,45,62,115,121,110,116,97,120,45, -111,98,106,101,99,116,65,49,18,158,72,113,117,111,116,101,45,115,121,110,116, -97,120,66,49,18,104,78,114,97,105,115,101,45,115,121,110,116,97,120,45,101, -114,114,111,114,67,52,41,40,39,38,37,36,35,48,16,4,51,11,2,7,3, -1,7,101,110,118,50,57,49,48,68,16,4,50,11,1,20,117,110,102,108,97, -116,45,112,97,116,116,101,114,110,45,118,97,114,115,115,69,3,1,7,101,110, -118,50,57,49,49,70,18,108,2,16,57,41,40,39,38,37,36,35,48,51,50, -16,4,56,11,64,114,101,115,116,71,3,1,7,101,110,118,50,57,49,50,72, -16,10,55,11,67,112,97,116,116,101,114,110,73,66,102,101,110,100,101,114,74, -79,117,110,102,108,97,116,45,112,97,116,116,101,114,110,45,118,97,114,115,75, -66,97,110,115,119,101,114,76,3,1,7,101,110,118,50,57,49,51,77,2,77, -2,77,2,77,16,8,54,11,76,116,97,105,108,45,112,97,116,116,101,114,110, -45,118,97,114,78,69,116,101,109,112,45,118,97,114,115,79,72,112,97,116,116, -101,114,110,45,118,97,114,115,80,3,1,7,101,110,118,50,57,49,57,81,3, -1,7,101,110,118,50,57,49,55,82,3,1,7,101,110,118,50,57,49,53,83, -16,8,53,11,2,78,2,79,2,80,2,81,2,82,2,83,18,109,2,64,8, -26,41,40,39,38,37,36,35,48,51,50,56,55,54,16,8,59,11,2,78,2, -79,2,80,2,81,2,82,2,83,16,8,58,11,71,100,111,45,116,114,121,45, -110,101,120,116,84,64,109,116,99,104,85,70,99,97,110,116,45,102,97,105,108, -63,86,3,1,7,101,110,118,50,57,50,54,87,2,87,2,87,18,158,2,22, -8,26,18,158,62,105,102,88,8,26,18,158,2,64,8,26,18,111,63,99,100, -114,89,8,29,41,40,39,38,37,36,35,48,51,50,56,55,54,59,58,16,6, -8,28,11,71,112,97,116,116,101,114,110,45,118,97,114,90,68,116,101,109,112, -45,118,97,114,91,3,1,7,101,110,118,50,57,50,55,92,2,92,16,4,8, -27,11,63,112,111,115,93,3,1,7,101,110,118,50,57,50,56,94,18,158,64, -99,100,100,114,95,8,29,18,158,65,99,100,100,100,114,96,8,29,18,158,66, -99,100,100,100,100,114,97,8,29,18,158,63,99,97,114,98,8,29,18,158,64, -99,97,100,114,99,8,29,18,158,65,99,97,100,100,114,100,8,29,18,158,66, -99,97,100,100,100,114,101,8,29,18,112,69,108,105,115,116,45,116,97,105,108, -102,8,31,41,40,39,38,37,36,35,48,51,50,56,55,54,59,58,8,28,8, -27,16,4,8,30,11,68,97,99,99,101,115,115,111,114,103,3,1,7,101,110, -118,50,57,50,57,104,18,158,68,108,105,115,116,45,114,101,102,105,8,31,18, -158,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,43,118,97, -108,117,101,115,106,8,26,18,110,79,109,97,107,101,45,115,121,110,116,97,120, -45,109,97,112,112,105,110,103,107,8,33,41,40,39,38,37,36,35,48,51,50, -56,55,54,59,58,16,8,8,32,11,2,90,78,117,110,102,108,97,116,45,112, -97,116,116,101,114,110,45,118,97,114,108,2,91,3,1,7,101,110,118,50,57, -51,48,109,2,109,2,109,18,158,2,66,8,33,18,158,2,88,8,26,18,109, -2,64,8,36,41,40,39,38,37,36,35,48,51,50,56,55,54,16,8,8,35, -11,2,78,2,79,2,80,2,81,2,82,2,83,16,10,8,34,11,2,84,2, -85,2,86,61,109,110,2,87,2,87,2,87,2,87,18,158,2,12,8,36,11, -16,5,93,2,5,87,96,83,159,34,93,80,159,34,52,35,89,162,8,64,37, -50,2,7,223,0,28,248,22,57,196,9,28,248,22,52,196,249,22,51,250,22, -209,248,22,52,200,248,22,210,248,80,158,41,42,248,22,52,203,198,27,248,22, -53,198,27,248,22,53,200,28,248,22,57,193,9,28,248,22,52,193,249,22,51, -250,22,209,248,22,52,199,248,22,210,248,80,158,45,42,248,22,52,200,202,250, -80,159,43,52,35,202,248,22,53,199,248,22,53,198,250,80,159,41,52,35,200, -248,22,53,197,248,22,53,196,27,248,22,53,196,27,248,22,53,198,28,248,22, -57,193,9,28,248,22,52,193,249,22,51,250,22,209,248,22,52,199,248,22,210, -248,80,158,43,42,248,22,52,200,200,250,80,159,41,52,35,200,248,22,53,199, -248,22,53,198,250,80,159,39,52,35,198,248,22,53,197,248,22,53,196,83,159, -34,93,80,159,34,51,35,89,162,8,64,36,58,2,7,223,0,28,248,22,57, -195,9,27,249,80,159,37,51,35,248,22,53,197,248,22,53,198,28,248,22,52, -196,249,22,51,27,248,22,52,198,27,248,80,158,40,41,248,22,52,201,28,248, -22,186,193,193,27,248,22,59,195,27,248,22,171,195,28,248,22,186,193,193,27, -248,22,59,195,27,248,22,171,195,28,248,22,186,193,193,27,248,22,59,195,27, -248,22,171,195,28,248,22,186,193,193,27,248,22,59,195,27,248,22,171,195,28, -248,22,186,193,193,27,248,22,59,195,27,248,22,171,195,28,248,22,186,193,193, -27,248,22,59,195,27,248,22,171,195,28,248,22,186,193,193,249,32,111,89,162, -8,64,36,45,2,7,222,28,248,22,186,194,192,27,248,22,59,194,27,248,22, -171,196,28,248,22,186,193,193,27,248,22,59,195,27,248,22,171,195,28,248,22, -186,193,193,27,248,22,59,195,27,248,22,171,195,28,248,22,186,193,193,249,2, -111,248,22,59,196,248,22,171,195,248,22,59,196,248,22,171,195,194,192,83,159, -34,93,80,159,34,50,35,89,162,8,36,35,39,9,223,0,27,249,22,252,82, -3,196,32,112,89,162,8,44,34,34,9,222,11,28,248,80,158,36,39,193,192, -11,89,162,8,36,35,56,9,223,0,91,159,35,10,90,161,35,34,10,20,15, -159,35,34,44,87,94,28,28,248,80,158,36,34,195,27,248,80,158,37,35,196, -28,248,80,158,37,34,193,248,80,158,37,36,248,80,158,38,35,194,11,11,12, -250,22,252,39,2,11,6,8,8,98,97,100,32,102,111,114,109,113,197,250,22, -209,210,27,248,80,158,40,37,248,80,158,41,35,200,27,251,80,158,44,38,197, -11,9,11,27,249,22,2,80,159,43,50,35,195,28,28,28,248,22,57,193,10, -248,22,252,9,2,249,22,5,32,114,89,162,8,36,35,35,9,222,192,195,248, -80,158,42,40,195,11,249,22,59,20,15,159,43,35,44,196,27,249,80,159,44, -51,35,196,195,27,28,248,22,57,195,9,27,27,248,22,53,198,27,248,22,53, -198,28,248,22,57,193,9,27,249,32,115,89,162,8,64,36,46,2,7,222,28, -248,22,57,194,9,27,27,248,22,53,195,27,248,22,53,197,28,248,22,57,193, -9,27,27,248,22,53,196,27,248,22,53,196,28,248,22,57,193,9,27,249,2, -115,248,22,53,197,248,22,53,196,28,248,22,52,194,192,249,22,51,248,22,52, -197,194,28,248,22,52,194,192,249,22,51,248,22,52,197,194,28,248,22,52,195, -192,249,22,51,248,22,52,196,194,248,22,53,197,248,22,53,196,28,248,22,52, -194,192,249,22,51,248,22,52,197,194,28,248,22,52,196,192,249,22,51,248,22, -52,199,194,27,251,80,158,48,38,201,198,197,201,27,28,248,22,57,197,9,28, -248,22,52,197,249,22,51,250,22,209,248,22,52,203,248,22,210,248,80,158,52, -42,248,22,52,204,23,17,250,80,159,50,52,35,23,17,248,22,53,203,248,22, -53,202,250,80,159,48,52,35,23,15,248,22,53,201,248,22,53,200,28,248,80, -158,46,43,199,248,22,52,193,250,22,59,250,22,209,24,16,199,204,27,248,22, -64,197,28,248,22,186,193,20,15,159,49,36,44,28,249,22,181,194,35,248,22, -52,197,249,22,51,20,15,159,51,37,44,198,249,22,59,20,15,159,50,38,44, -250,22,209,11,66,115,114,99,116,97,103,116,23,20,197,34,20,98,159,37,16, -10,2,32,2,34,30,117,2,24,69,115,116,120,45,110,117,108,108,63,118,10, -2,30,30,119,2,37,72,109,97,107,101,45,112,101,120,112,97,110,100,120,2, -30,121,2,37,75,115,121,110,116,97,120,45,109,97,112,112,105,110,103,63,122, -8,30,123,2,37,72,110,111,45,101,108,108,105,112,115,101,115,63,124,4,30, -125,2,37,1,20,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,100, -101,112,116,104,126,6,30,127,2,37,1,21,115,121,110,116,97,120,45,109,97, -112,112,105,110,103,45,118,97,108,118,97,114,128,7,2,28,16,5,18,100,2, -22,8,40,41,40,39,16,4,8,39,11,2,45,3,1,7,101,110,118,50,57, -51,52,129,16,4,8,38,11,68,104,101,114,101,45,115,116,120,130,3,1,7, -101,110,118,50,57,51,54,131,16,4,8,37,11,2,130,2,131,18,102,2,66, -8,45,41,40,39,8,39,16,4,8,44,11,2,130,2,131,16,4,8,43,11, -2,73,3,1,7,101,110,118,50,57,52,48,132,16,4,8,42,11,71,117,110, -105,113,117,101,45,118,97,114,115,133,3,1,7,101,110,118,50,57,52,49,134, -16,4,8,41,11,72,118,97,114,45,98,105,110,100,105,110,103,115,135,3,1, -7,101,110,118,50,57,52,50,136,18,105,9,8,49,41,40,39,8,39,8,44, -8,43,8,42,8,41,16,6,8,48,11,67,112,114,111,116,111,45,114,137,76, -110,111,110,45,112,97,116,116,101,114,110,45,118,97,114,115,138,3,1,7,101, -110,118,50,57,52,56,139,2,139,16,6,8,47,11,79,98,117,105,108,100,45, -102,114,111,109,45,116,101,109,112,108,97,116,101,140,61,114,141,3,1,7,101, -110,118,50,57,53,55,142,2,142,16,4,8,46,11,63,108,101,110,143,3,1, -7,101,110,118,50,57,54,48,144,18,158,65,108,105,115,116,42,145,8,49,18, -104,2,66,8,50,41,40,39,8,39,8,44,8,43,8,42,8,41,8,48,8, -47,11,93,83,159,34,93,80,159,34,34,35,32,146,89,162,34,36,40,2,4, -222,251,22,252,39,2,2,5,6,47,47,105,110,99,111,109,112,97,116,105,98, -108,101,32,101,108,108,105,112,115,105,115,32,109,97,116,99,104,32,99,111,117, -110,116,115,32,102,111,114,32,116,101,109,112,108,97,116,101,147,196,197,95,68, -35,37,107,101,114,110,101,108,148,2,24,2,44,96,2,24,2,44,2,37,2, -148,0}; - EVAL_ONE_SIZED_STR((char *)expr, 4642); +34,16,6,30,3,2,2,1,26,100,97,116,117,109,45,62,115,121,110,116,97, +120,45,111,98,106,101,99,116,47,115,104,97,112,101,4,254,1,30,5,2,2, +1,20,99,97,116,99,104,45,101,108,108,105,112,115,105,115,45,101,114,114,111, +114,6,254,1,30,7,68,35,37,112,97,114,97,109,122,8,1,20,112,97,114, +97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,9,254,1,30, +10,2,8,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114, +105,122,97,116,105,111,110,11,254,1,30,12,2,2,75,115,117,98,115,116,105, +116,117,116,101,45,115,116,111,112,13,254,1,30,14,2,2,1,24,97,112,112, +108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101, +15,254,1,16,0,11,11,16,4,2,15,2,6,2,4,2,13,38,11,16,2, +66,115,121,110,116,97,120,16,73,115,121,110,116,97,120,45,99,97,115,101,42, +42,17,16,2,11,11,16,2,2,16,2,17,34,36,95,16,5,93,78,112,97, +116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,18,87,94,83,159, +34,93,80,159,34,41,35,89,162,8,100,37,45,64,108,111,111,112,19,223,0, +28,248,22,57,196,12,87,94,27,248,22,210,248,22,52,198,27,248,22,78,198, +28,28,248,80,158,37,37,193,10,28,248,80,158,37,38,193,28,249,22,71,248, +22,210,248,80,158,40,34,196,21,102,63,99,97,114,20,64,99,97,100,114,21, +65,99,97,100,100,114,22,66,99,97,100,100,100,114,23,63,99,100,114,24,64, +99,100,100,114,25,65,99,100,100,100,114,26,66,99,100,100,100,100,114,27,68, +108,105,115,116,45,114,101,102,28,69,108,105,115,116,45,116,97,105,108,29,28, +248,80,158,37,38,248,80,158,38,35,194,248,80,158,37,37,248,80,158,38,34, +248,80,158,39,35,195,11,11,11,27,248,22,208,194,27,250,22,116,200,196,11, +28,192,250,22,115,201,198,195,250,22,115,200,196,198,12,250,80,159,37,41,35, +196,197,248,22,80,199,89,162,8,36,35,56,9,223,0,27,248,80,158,36,34, +248,80,158,37,35,196,27,248,80,158,37,36,248,80,158,38,35,248,80,158,39, +35,198,27,248,22,110,65,101,113,117,97,108,30,27,247,22,110,87,94,250,80, +159,41,41,35,196,195,197,27,28,248,22,186,248,22,113,195,196,91,159,35,11, +20,12,95,35,248,193,198,89,162,8,64,35,42,2,19,224,2,0,28,248,22, +50,195,27,248,194,248,22,52,197,27,248,195,248,22,53,198,28,28,249,22,252, +11,2,195,248,22,52,199,249,22,252,11,2,194,248,22,53,199,11,196,249,22, +51,195,194,28,248,22,41,195,27,250,22,116,197,198,11,28,192,192,195,28,248, +22,206,195,27,248,194,248,22,210,197,28,249,22,252,11,2,248,22,210,198,194, +195,251,22,209,199,196,199,199,28,248,22,252,222,1,195,248,22,252,230,1,249, +22,2,195,248,22,252,229,1,198,28,248,22,107,195,248,22,105,248,194,248,22, +108,197,194,250,22,209,20,15,159,42,34,39,251,22,61,2,15,199,249,22,59, +65,113,117,111,116,101,31,28,248,22,57,205,9,28,250,22,116,205,248,22,210, +248,22,52,23,17,11,249,32,32,89,162,8,64,36,44,2,19,222,28,248,22, +57,194,9,28,250,22,116,195,248,22,210,248,22,52,198,11,27,248,22,80,195, +28,248,22,57,193,9,28,250,22,116,196,248,22,210,248,22,52,197,11,249,2, +32,195,248,22,80,195,249,22,51,248,22,52,195,249,2,32,197,248,22,80,197, +249,22,51,248,22,52,196,27,248,22,80,197,28,248,22,57,193,9,28,250,22, +116,198,248,22,210,248,22,52,197,11,249,2,32,197,248,22,80,195,249,22,51, +248,22,52,195,249,2,32,199,248,22,80,197,204,248,22,80,23,15,249,22,51, +248,22,52,23,15,249,2,32,206,248,22,80,23,17,28,248,22,57,203,9,28, +250,22,116,203,248,22,210,248,22,52,23,15,11,249,32,33,89,162,8,64,36, +44,2,19,222,28,248,22,57,194,9,28,250,22,116,195,248,22,210,248,22,52, +198,11,27,248,22,80,195,28,248,22,57,193,9,28,250,22,116,196,248,22,210, +248,22,52,197,11,249,2,33,195,248,22,80,195,249,22,51,248,22,78,195,249, +2,33,197,248,22,80,197,249,22,51,248,22,78,196,27,248,22,80,197,28,248, +22,57,193,9,28,250,22,116,198,248,22,210,248,22,52,197,11,249,2,33,197, +248,22,80,195,249,22,51,248,22,78,195,249,2,33,199,248,22,80,197,202,248, +22,80,205,249,22,51,248,22,78,205,249,2,33,204,248,22,80,23,15,201,34, +20,98,159,35,16,5,30,34,65,35,37,115,116,120,35,67,115,116,120,45,99, +97,114,36,5,30,37,2,35,67,115,116,120,45,99,100,114,38,6,30,39,2, +35,69,115,116,120,45,62,108,105,115,116,40,4,30,41,2,35,71,105,100,101, +110,116,105,102,105,101,114,63,42,2,30,43,2,35,69,115,116,120,45,112,97, +105,114,63,44,11,16,1,18,101,64,104,101,114,101,45,43,98,41,10,34,11, +95,159,2,8,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109, +101,46,9,11,159,2,35,9,11,16,14,2,16,2,2,2,4,2,2,2,6, +2,2,2,17,2,2,2,18,2,2,2,15,2,2,2,13,2,2,98,40,10, +35,11,95,159,64,35,37,115,99,47,9,11,159,2,46,9,11,159,2,35,9, +11,16,0,96,39,8,254,1,11,16,0,16,4,38,11,63,115,116,120,48,3, +1,7,101,110,118,50,56,49,51,49,16,6,37,11,63,112,97,116,50,64,115, +117,98,115,51,3,1,7,101,110,118,50,56,49,52,52,2,52,16,6,36,11, +69,104,116,45,99,111,109,109,111,110,53,66,104,116,45,109,97,112,54,3,1, +7,101,110,118,50,56,49,53,55,2,55,16,4,35,11,71,110,101,119,45,112, +97,116,116,101,114,110,56,3,1,7,101,110,118,50,56,50,51,57,11,16,5, +93,2,17,87,97,83,159,34,93,80,159,34,8,41,35,89,162,8,36,44,8, +41,2,19,223,0,28,248,22,57,200,251,22,59,20,15,159,38,41,43,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,58,197,27,26,10,80,159,45,8, +41,35,204,205,206,23,15,23,16,23,17,248,22,53,23,19,248,22,53,23,20, +248,22,53,23,21,248,22,53,23,22,27,248,22,52,202,27,248,22,52,204,27, +248,22,52,206,27,248,22,52,23,16,91,159,37,10,90,161,35,34,10,249,22, +2,32,59,89,162,8,36,35,40,9,222,28,248,22,206,193,192,27,248,22,52, +194,28,248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,248,32,60, +89,162,8,100,35,40,2,19,222,28,248,22,206,193,192,27,248,22,52,194,28, +248,22,206,193,192,27,248,22,52,194,28,248,22,206,193,192,27,248,22,52,194, +28,248,22,206,193,192,248,2,60,248,22,52,194,248,22,52,194,198,90,161,35, +35,10,249,22,2,32,61,89,162,8,36,35,38,9,222,250,22,209,195,247,22, +48,11,209,90,161,35,36,10,248,22,171,248,22,64,209,27,28,248,22,52,23, +18,248,22,59,20,15,159,44,42,43,200,27,252,80,158,49,41,23,19,205,205, +248,80,158,50,35,23,21,248,22,252,9,2,23,19,27,28,206,249,22,252,13, +2,195,21,95,66,108,97,109,98,100,97,62,93,61,101,63,2,63,249,22,252, +13,2,195,21,95,2,62,94,2,63,79,109,111,100,117,108,101,45,105,100,101, +110,116,105,102,105,101,114,61,63,64,2,63,27,250,22,59,20,15,159,49,43, +43,248,22,59,249,22,59,23,20,28,199,23,19,250,22,61,250,22,209,20,15, +159,58,44,43,206,23,22,23,22,28,23,24,9,248,22,59,23,28,251,22,59, +20,15,159,53,45,43,28,200,10,23,21,250,22,59,20,15,159,56,46,43,250, +22,2,89,162,8,36,36,47,9,226,25,27,19,17,249,22,59,199,27,249,80, +158,42,42,201,212,27,28,249,22,181,214,195,28,249,22,252,11,2,195,34,64, +116,97,105,108,65,28,249,22,252,11,2,195,35,20,15,159,41,47,43,28,249, +22,252,11,2,195,36,20,15,159,41,48,43,28,249,22,252,11,2,195,37,20, +15,159,41,49,43,28,249,22,252,11,2,195,38,20,15,159,41,50,43,2,65, +28,249,22,252,11,2,195,34,20,15,159,41,51,43,28,249,22,252,11,2,195, +35,20,15,159,41,52,43,28,249,22,252,11,2,195,36,20,15,159,41,53,43, +28,249,22,252,11,2,195,37,20,15,159,41,54,43,11,28,249,22,252,11,2, +194,2,65,28,248,22,186,194,198,250,22,59,20,15,159,44,55,43,201,196,28, +192,249,22,59,194,200,250,22,59,20,15,159,44,56,43,201,196,24,17,24,18, +251,22,59,20,15,159,8,26,57,43,251,22,2,80,159,8,30,8,42,35,24, +22,23,26,24,23,9,28,23,23,251,22,59,20,15,159,8,30,8,26,43,23, +27,23,25,23,21,23,21,202,28,201,250,22,59,20,15,159,49,8,27,43,248, +22,59,249,22,59,68,116,114,121,45,110,101,120,116,66,250,22,59,20,15,159, +55,8,28,43,247,22,59,23,20,195,192,83,159,34,93,80,159,34,8,42,35, +89,162,8,36,37,49,9,223,0,249,22,59,248,22,59,196,250,22,59,20,15, +159,39,58,43,28,248,22,206,200,34,27,248,22,52,201,28,248,22,206,193,35, +27,248,22,52,194,28,248,22,206,193,36,249,32,67,89,162,8,100,36,45,2, +19,222,28,248,22,206,193,193,27,248,22,52,194,27,248,22,170,196,28,248,22, +206,194,192,27,248,22,52,195,27,248,22,170,195,28,248,22,206,194,192,27,248, +22,52,195,27,248,22,170,195,28,248,22,206,194,192,249,2,67,248,22,52,196, +248,22,170,195,248,22,52,195,37,249,22,59,20,15,159,41,59,43,202,83,159, +34,93,80,159,34,8,40,35,89,162,34,35,39,9,223,0,27,248,80,158,36, +39,248,80,158,37,39,196,28,248,80,158,36,38,193,248,80,158,36,37,193,248, +80,158,36,37,248,80,158,37,39,196,83,159,34,93,80,159,34,8,39,35,89, +162,34,35,39,9,223,0,28,248,80,158,35,38,248,80,158,36,39,248,80,158, +37,39,196,248,80,158,35,37,248,80,158,36,39,195,11,89,162,8,36,35,8, +33,9,223,0,91,159,35,10,90,161,35,34,10,28,248,80,158,36,34,195,248, +22,53,248,80,158,37,35,196,11,87,94,28,28,248,80,158,36,34,195,249,22, +183,248,22,64,210,37,11,12,250,22,252,39,2,11,6,8,8,98,97,100,32, +102,111,114,109,68,197,27,248,22,52,209,27,248,22,78,210,27,248,22,87,211, +27,248,22,90,212,27,248,22,90,248,22,53,214,27,248,22,89,248,22,53,215, +87,96,28,248,80,158,42,34,195,12,250,22,252,39,2,248,22,210,201,6,56, +56,101,120,112,101,99,116,101,100,32,97,32,112,97,114,101,110,116,104,101,115, +105,122,101,100,32,115,101,113,117,101,110,99,101,32,111,102,32,108,105,116,101, +114,97,108,32,105,100,101,110,116,105,102,105,101,114,115,69,197,249,22,3,89, +162,34,35,41,9,224,9,7,28,248,80,158,36,36,195,12,250,22,252,39,2, +248,22,210,196,6,28,28,108,105,116,101,114,97,108,32,105,115,32,110,111,116, +32,97,110,32,105,100,101,110,116,105,102,105,101,114,70,197,248,80,158,44,35, +197,249,22,3,89,162,34,35,42,9,224,9,7,28,28,248,80,158,36,34,195, +250,22,184,36,248,22,64,248,80,158,40,35,199,37,11,12,250,22,252,39,2, +248,22,210,196,6,10,10,98,97,100,32,99,108,97,117,115,101,71,197,194,27, +249,22,2,80,158,44,37,195,27,249,22,2,80,159,45,8,39,35,196,27,249, +22,2,80,159,46,8,40,35,197,27,20,15,159,45,34,43,27,20,15,159,46, +35,43,27,249,22,2,89,162,34,35,43,9,225,15,10,13,251,80,158,40,40, +196,199,199,248,80,158,41,35,198,248,80,158,50,35,200,27,28,248,80,158,49, +36,201,249,22,223,202,20,15,159,50,36,43,11,250,22,209,20,15,159,51,37, +43,250,22,59,20,15,159,54,38,43,248,22,59,249,22,59,204,28,248,22,210, +23,21,23,19,250,22,59,20,15,159,8,26,39,43,249,22,59,20,15,159,8, +28,40,43,249,22,209,23,26,2,45,23,22,26,10,80,159,8,30,8,41,35, +23,19,23,18,23,16,23,28,23,25,23,24,23,22,23,21,23,17,23,20,23, +18,34,20,98,159,38,16,9,30,72,2,35,69,115,116,120,45,108,105,115,116, +63,73,8,2,39,2,41,2,34,2,43,2,37,30,74,2,47,74,103,101,116, +45,109,97,116,99,104,45,118,97,114,115,75,0,30,76,2,47,74,109,97,107, +101,45,109,97,116,99,104,38,101,110,118,77,1,30,78,2,47,72,115,116,120, +45,109,101,109,113,45,112,111,115,79,5,16,29,18,101,63,97,114,103,80,48, +41,40,39,16,4,47,11,61,120,81,3,1,7,101,110,118,50,56,51,53,82, +16,4,46,11,61,108,83,3,1,7,101,110,118,50,56,51,55,84,16,14,45, +11,63,119,104,111,85,71,97,114,103,45,105,115,45,115,116,120,63,86,64,101, +120,112,114,87,63,107,119,115,88,68,108,105,116,45,99,111,109,112,89,67,99, +108,97,117,115,101,115,90,3,1,7,101,110,118,50,56,52,48,91,2,91,2, +91,2,91,2,91,2,91,16,8,44,11,68,112,97,116,116,101,114,110,115,92, +67,102,101,110,100,101,114,115,93,67,97,110,115,119,101,114,115,94,3,1,7, +101,110,118,50,56,52,52,95,2,95,2,95,18,102,64,114,115,108,116,96,50, +41,40,39,47,46,45,44,16,4,49,11,2,80,3,1,7,101,110,118,50,56, +52,56,97,18,102,2,64,52,41,40,39,47,46,45,44,16,8,51,11,2,80, +2,96,73,112,97,116,116,101,114,110,45,118,97,114,115,115,98,2,97,2,97, +2,97,18,102,2,45,54,41,40,39,47,46,45,44,16,10,53,11,2,80,2, +96,2,98,76,108,105,116,45,99,111,109,112,45,105,115,45,109,111,100,63,99, +2,97,2,97,2,97,2,97,18,16,2,158,63,108,101,116,100,54,55,18,16, +2,158,1,20,100,97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106, +101,99,116,101,54,56,18,16,2,158,72,113,117,111,116,101,45,115,121,110,116, +97,120,102,54,57,18,104,78,114,97,105,115,101,45,115,121,110,116,97,120,45, +101,114,114,111,114,103,8,26,41,40,39,47,46,45,44,53,16,4,59,11,2, +19,3,1,7,101,110,118,50,56,53,48,104,16,4,58,11,1,20,117,110,102, +108,97,116,45,112,97,116,116,101,114,110,45,118,97,114,115,115,105,3,1,7, +101,110,118,50,56,53,49,106,18,108,2,66,8,31,41,40,39,47,46,45,44, +53,59,58,16,4,8,30,11,64,114,101,115,116,107,3,1,7,101,110,118,50, +56,53,50,108,16,10,8,29,11,67,112,97,116,116,101,114,110,109,66,102,101, +110,100,101,114,110,79,117,110,102,108,97,116,45,112,97,116,116,101,114,110,45, +118,97,114,115,111,66,97,110,115,119,101,114,112,3,1,7,101,110,118,50,56, +53,51,113,2,113,2,113,2,113,16,8,8,28,11,76,116,97,105,108,45,112, +97,116,116,101,114,110,45,118,97,114,114,69,116,101,109,112,45,118,97,114,115, +115,72,112,97,116,116,101,114,110,45,118,97,114,115,116,3,1,7,101,110,118, +50,56,53,57,117,3,1,7,101,110,118,50,56,53,55,118,3,1,7,101,110, +118,50,56,53,53,119,16,8,8,27,11,2,114,2,115,2,116,2,117,2,118, +2,119,18,109,2,100,8,34,41,40,39,47,46,45,44,53,59,58,8,30,8, +29,8,28,16,8,8,33,11,2,114,2,115,2,116,2,117,2,118,2,119,16, +8,8,32,11,71,100,111,45,116,114,121,45,110,101,120,116,120,64,109,116,99, +104,121,70,99,97,110,116,45,102,97,105,108,63,122,3,1,7,101,110,118,50, +56,54,54,123,2,123,2,123,18,16,2,158,2,45,8,34,8,35,18,16,2, +158,62,105,102,124,8,34,8,36,18,16,2,158,2,100,8,34,8,37,18,111, +2,24,8,40,41,40,39,47,46,45,44,53,59,58,8,30,8,29,8,28,8, +33,8,32,16,6,8,39,11,71,112,97,116,116,101,114,110,45,118,97,114,125, +68,116,101,109,112,45,118,97,114,126,3,1,7,101,110,118,50,56,54,55,127, +2,127,16,4,8,38,11,63,112,111,115,128,3,1,7,101,110,118,50,56,54, +56,129,18,16,2,158,2,25,8,40,8,41,18,16,2,158,2,26,8,40,8, +42,18,16,2,158,2,27,8,40,8,43,18,16,2,158,2,20,8,40,8,44, +18,16,2,158,2,21,8,40,8,45,18,16,2,158,2,22,8,40,8,46,18, +16,2,158,2,23,8,40,8,47,18,112,2,29,8,49,41,40,39,47,46,45, +44,53,59,58,8,30,8,29,8,28,8,33,8,32,8,39,8,38,16,4,8, +48,11,68,97,99,99,101,115,115,111,114,130,3,1,7,101,110,118,50,56,54, +57,131,18,16,2,158,2,28,8,49,8,50,18,16,2,158,1,22,108,101,116, +114,101,99,45,115,121,110,116,97,120,101,115,43,118,97,108,117,101,115,132,8, +34,8,51,18,110,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112, +112,105,110,103,133,8,53,41,40,39,47,46,45,44,53,59,58,8,30,8,29, +8,28,8,33,8,32,16,8,8,52,11,2,125,78,117,110,102,108,97,116,45, +112,97,116,116,101,114,110,45,118,97,114,134,2,126,3,1,7,101,110,118,50, +56,55,48,135,2,135,2,135,18,16,2,158,2,102,8,53,8,54,18,8,36, +18,109,2,100,8,57,41,40,39,47,46,45,44,53,59,58,8,30,8,29,8, +28,16,8,8,56,11,2,114,2,115,2,116,2,117,2,118,2,119,16,10,8, +55,11,2,120,2,121,2,122,61,109,136,2,123,2,123,2,123,2,123,18,16, +2,158,2,62,8,57,8,58,11,16,5,93,2,16,87,96,83,159,34,93,80, +159,34,51,35,89,162,8,64,37,50,2,19,223,0,28,248,22,57,196,9,28, +248,22,52,196,249,22,51,250,22,209,248,22,52,200,248,22,210,248,80,158,41, +42,248,22,52,203,198,27,248,22,53,198,27,248,22,53,200,28,248,22,57,193, +9,28,248,22,52,193,249,22,51,250,22,209,248,22,52,199,248,22,210,248,80, +158,45,42,248,22,52,200,202,250,80,159,43,51,35,202,248,22,53,199,248,22, +53,198,250,80,159,41,51,35,200,248,22,53,197,248,22,53,196,27,248,22,53, +196,27,248,22,53,198,28,248,22,57,193,9,28,248,22,52,193,249,22,51,250, +22,209,248,22,52,199,248,22,210,248,80,158,43,42,248,22,52,200,200,250,80, +159,41,51,35,200,248,22,53,199,248,22,53,198,250,80,159,39,51,35,198,248, +22,53,197,248,22,53,196,83,159,34,93,80,159,34,50,35,89,162,8,64,36, +58,2,19,223,0,28,248,22,57,195,9,27,249,80,159,37,50,35,248,22,53, +197,248,22,53,198,28,248,22,52,196,249,22,51,27,248,22,52,198,27,248,80, +158,40,41,248,22,52,201,28,248,22,186,193,193,27,248,22,59,195,27,248,22, +171,195,28,248,22,186,193,193,27,248,22,59,195,27,248,22,171,195,28,248,22, +186,193,193,27,248,22,59,195,27,248,22,171,195,28,248,22,186,193,193,27,248, +22,59,195,27,248,22,171,195,28,248,22,186,193,193,27,248,22,59,195,27,248, +22,171,195,28,248,22,186,193,193,27,248,22,59,195,27,248,22,171,195,28,248, +22,186,193,193,249,32,137,89,162,8,64,36,45,2,19,222,28,248,22,186,194, +192,27,248,22,59,194,27,248,22,171,196,28,248,22,186,193,193,27,248,22,59, +195,27,248,22,171,195,28,248,22,186,193,193,27,248,22,59,195,27,248,22,171, +195,28,248,22,186,193,193,249,2,137,248,22,59,196,248,22,171,195,248,22,59, +196,248,22,171,195,194,192,83,159,34,93,80,159,34,49,35,89,162,8,36,35, +39,9,223,0,27,249,22,252,87,3,196,32,138,89,162,8,44,34,34,9,222, +11,28,248,80,158,36,39,193,192,11,89,162,8,36,35,56,9,223,0,91,159, +35,10,90,161,35,34,10,20,15,159,35,34,44,87,94,28,28,248,80,158,36, +34,195,27,248,80,158,37,35,196,28,248,80,158,37,34,193,248,80,158,37,36, +248,80,158,38,35,194,11,11,12,250,22,252,39,2,11,6,8,8,98,97,100, +32,102,111,114,109,139,197,250,22,209,210,27,248,80,158,40,37,248,80,158,41, +35,200,27,251,80,158,44,38,197,11,9,11,27,249,22,2,80,159,43,49,35, +195,28,28,28,248,22,57,193,10,248,22,252,9,2,249,22,5,32,140,89,162, +8,36,35,35,9,222,192,195,248,80,158,42,40,195,11,249,22,59,20,15,159, +43,35,44,196,27,249,80,159,44,50,35,196,195,27,28,248,22,57,195,9,27, +27,248,22,53,198,27,248,22,53,198,28,248,22,57,193,9,27,249,32,141,89, +162,8,64,36,46,2,19,222,28,248,22,57,194,9,27,27,248,22,53,195,27, +248,22,53,197,28,248,22,57,193,9,27,27,248,22,53,196,27,248,22,53,196, +28,248,22,57,193,9,27,249,2,141,248,22,53,197,248,22,53,196,28,248,22, +52,194,192,249,22,51,248,22,52,197,194,28,248,22,52,194,192,249,22,51,248, +22,52,197,194,28,248,22,52,195,192,249,22,51,248,22,52,196,194,248,22,53, +197,248,22,53,196,28,248,22,52,194,192,249,22,51,248,22,52,197,194,28,248, +22,52,196,192,249,22,51,248,22,52,199,194,27,251,80,158,48,38,201,198,197, +201,27,28,248,22,57,197,9,28,248,22,52,197,249,22,51,250,22,209,248,22, +52,203,248,22,210,248,80,158,52,42,248,22,52,204,23,17,250,80,159,50,51, +35,23,17,248,22,53,203,248,22,53,202,250,80,159,48,51,35,23,15,248,22, +53,201,248,22,53,200,28,248,80,158,46,43,199,248,22,52,193,249,22,59,250, +22,209,24,15,198,203,27,248,22,64,196,28,248,22,186,193,20,15,159,48,36, +44,28,249,22,181,194,35,248,22,52,196,249,22,51,20,15,159,50,37,44,197, +197,34,20,98,159,37,16,10,2,43,2,37,30,142,2,35,69,115,116,120,45, +110,117,108,108,63,143,10,2,34,30,144,2,47,72,109,97,107,101,45,112,101, +120,112,97,110,100,145,2,30,146,2,47,75,115,121,110,116,97,120,45,109,97, +112,112,105,110,103,63,147,8,30,148,2,47,72,110,111,45,101,108,108,105,112, +115,101,115,63,149,4,30,150,2,47,1,20,115,121,110,116,97,120,45,109,97, +112,112,105,110,103,45,100,101,112,116,104,151,6,30,152,2,47,1,21,115,121, +110,116,97,120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,153,7, +2,41,16,4,18,100,2,45,8,62,41,40,39,16,4,8,61,11,2,81,3, +1,7,101,110,118,50,56,55,52,154,16,4,8,60,11,68,104,101,114,101,45, +115,116,120,155,3,1,7,101,110,118,50,56,55,54,156,16,4,8,59,11,2, +155,2,156,18,102,2,102,8,67,41,40,39,8,61,16,4,8,66,11,2,155, +2,156,16,4,8,65,11,2,109,3,1,7,101,110,118,50,56,56,48,157,16, +4,8,64,11,71,117,110,105,113,117,101,45,118,97,114,115,158,3,1,7,101, +110,118,50,56,56,49,159,16,4,8,63,11,72,118,97,114,45,98,105,110,100, +105,110,103,115,160,3,1,7,101,110,118,50,56,56,50,161,18,105,9,8,71, +41,40,39,8,61,8,66,8,65,8,64,8,63,16,6,8,70,11,67,112,114, +111,116,111,45,114,162,76,110,111,110,45,112,97,116,116,101,114,110,45,118,97, +114,115,163,3,1,7,101,110,118,50,56,56,56,164,2,164,16,6,8,69,11, +79,98,117,105,108,100,45,102,114,111,109,45,116,101,109,112,108,97,116,101,165, +61,114,166,3,1,7,101,110,118,50,56,57,55,167,2,167,16,4,8,68,11, +63,108,101,110,168,3,1,7,101,110,118,50,57,48,48,169,18,16,2,158,65, +108,105,115,116,42,170,8,71,8,72,11,96,83,159,34,93,80,159,34,34,35, +32,171,89,162,8,36,36,41,2,4,222,28,248,22,206,194,193,27,250,22,209, +196,197,196,27,249,22,218,195,71,112,97,114,101,110,45,115,104,97,112,101,172, +28,192,250,22,218,196,2,172,195,193,83,159,34,93,80,159,34,35,35,89,162, +34,37,39,2,6,223,0,247,248,22,9,89,162,8,32,35,44,9,226,1,4, +3,2,20,14,159,80,158,37,36,250,80,158,40,37,249,22,19,11,80,158,42, +36,22,252,185,2,89,162,34,35,39,9,225,5,4,7,248,193,89,162,34,34, +41,9,225,3,2,4,28,248,22,252,182,2,193,248,22,252,187,2,193,251,22, +252,39,2,2,16,6,47,47,105,110,99,111,109,112,97,116,105,98,108,101,32, +101,108,108,105,112,115,105,115,32,109,97,116,99,104,32,99,111,117,110,116,115, +32,102,111,114,32,116,101,109,112,108,97,116,101,173,197,198,27,247,193,89,162, +8,36,34,35,9,223,0,192,83,159,34,93,80,159,34,38,35,65,100,117,109, +109,121,174,83,159,34,93,80,159,34,39,35,89,162,8,37,37,40,2,15,223, +0,91,159,35,11,20,12,95,35,248,193,195,89,162,8,64,35,46,2,19,226, +1,4,3,0,28,248,22,50,197,27,248,194,248,22,52,199,27,248,195,248,22, +53,200,28,28,249,22,252,11,2,195,248,22,52,201,249,22,252,11,2,194,248, +22,53,201,11,198,249,22,51,195,194,28,248,22,41,197,28,248,22,57,194,196, +28,249,22,252,11,2,198,248,22,52,196,248,22,52,195,27,248,22,53,195,27, +248,22,53,197,28,248,22,57,194,198,28,249,22,252,11,2,200,248,22,52,196, +248,22,52,193,250,32,175,89,162,8,64,37,45,65,115,108,111,111,112,176,222, +28,248,22,57,194,192,28,249,22,252,11,2,194,248,22,52,196,248,22,52,195, +27,248,22,53,195,27,248,22,53,197,28,248,22,57,194,194,28,249,22,252,11, +2,196,248,22,52,196,248,22,52,193,27,248,22,53,195,27,248,22,53,195,28, +248,22,57,194,196,28,249,22,252,11,2,198,248,22,52,196,248,22,52,193,250, +2,175,199,248,22,53,197,248,22,53,196,201,248,22,53,197,248,22,53,196,28, +248,22,206,197,27,248,194,248,22,210,199,28,249,22,252,11,2,248,22,210,200, +194,197,28,248,22,206,193,192,27,250,22,209,201,196,201,27,249,22,218,195,2, +172,28,192,250,22,218,196,2,172,195,193,28,248,22,252,222,1,197,248,22,252, +230,1,249,22,2,195,248,22,252,229,1,200,28,248,22,107,197,248,22,105,248, +194,248,22,108,199,196,96,68,35,37,107,101,114,110,101,108,177,2,35,2,46, +2,8,96,2,35,2,46,2,47,2,177,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6332); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,71,252,81,7,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,82,252,192,6,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,35,37,115,116, 120,108,111,99,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, 16,2,30,3,2,2,68,108,111,99,45,105,110,115,112,4,254,1,30,5,2, 2,68,114,101,108,111,99,97,116,101,6,254,1,16,0,11,11,16,2,2,4, -2,6,36,11,16,3,72,115,121,110,116,97,120,45,99,97,115,101,42,7,71, -115,121,110,116,97,120,45,99,97,115,101,8,70,115,121,110,116,97,120,47,108, -111,99,9,16,3,11,11,11,16,3,2,7,2,8,2,9,34,37,95,16,5, -93,2,7,89,162,34,35,58,9,223,0,27,28,248,80,158,36,34,195,249,80, +2,6,36,11,16,3,70,115,121,110,116,97,120,47,108,111,99,7,71,115,121, +110,116,97,120,45,99,97,115,101,8,72,115,121,110,116,97,120,45,99,97,115, +101,42,9,16,3,11,11,11,16,3,2,7,2,8,2,9,34,37,95,16,5, +93,2,9,89,162,34,35,51,9,223,0,27,28,248,80,158,36,34,195,249,80, 158,37,35,248,80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39, 34,193,249,80,158,40,35,248,80,158,41,36,195,27,248,80,158,42,37,196,28, 248,80,158,42,34,193,249,80,158,43,35,248,80,158,44,36,195,27,248,80,158, 45,37,196,28,248,80,158,45,34,193,249,80,158,46,35,248,80,158,47,36,195, 27,248,80,158,48,37,196,28,248,80,158,48,38,193,248,80,158,48,39,193,11, 11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196, -27,248,22,90,197,27,248,22,89,198,27,252,22,61,200,201,202,198,199,27,20, -15,159,42,34,40,250,22,209,20,15,159,45,35,40,250,22,209,20,15,159,48, -36,40,254,22,62,20,15,159,55,37,40,248,22,87,23,15,20,15,159,55,38, -40,248,22,78,23,15,248,22,52,23,15,248,22,89,23,15,248,22,90,23,15, -20,15,159,48,39,40,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115, -121,110,116,97,120,10,197,34,20,98,159,34,16,6,30,11,65,35,37,115,116, -120,12,69,115,116,120,45,112,97,105,114,63,13,11,30,14,2,12,67,99,111, -110,115,47,35,102,15,1,30,16,2,12,67,115,116,120,45,99,97,114,17,5, -30,18,2,12,67,115,116,120,45,99,100,114,19,6,30,20,2,12,69,115,116, -120,45,108,105,115,116,63,21,8,30,22,2,12,69,115,116,120,45,62,108,105, -115,116,23,4,16,6,18,16,2,95,66,115,114,99,116,97,103,24,36,93,8, -252,141,9,95,9,8,252,141,9,69,35,37,115,116,120,99,97,115,101,25,18, -100,64,100,101,115,116,26,43,98,42,10,34,11,95,159,74,35,37,100,101,102, -105,110,101,45,101,116,45,97,108,27,9,11,159,2,25,9,11,159,71,35,37, -113,113,45,97,110,100,45,111,114,28,9,11,16,10,2,4,2,2,2,8,2, -2,2,9,2,2,2,7,2,2,2,6,2,2,98,41,10,35,11,94,159,64, -35,37,115,99,29,9,11,159,2,25,9,11,16,0,96,40,8,254,1,11,16, -0,16,4,39,11,63,115,116,120,30,3,1,7,101,110,118,50,57,54,52,31, -16,12,38,11,3,1,4,103,50,56,50,32,3,1,4,103,50,56,51,33,3, -1,4,103,50,56,52,34,3,1,4,103,50,56,53,35,3,1,4,103,50,56, -54,36,3,1,7,101,110,118,50,57,55,50,37,2,37,2,37,2,37,2,37, -16,12,37,11,61,95,38,64,115,116,120,101,39,62,107,108,40,64,105,100,61, -63,41,66,99,108,97,117,115,101,42,3,1,7,101,110,118,50,57,55,51,43, -2,43,2,43,2,43,2,43,18,158,63,99,116,120,44,43,18,158,73,115,121, -110,116,97,120,45,99,97,115,101,42,42,45,43,18,158,11,43,18,158,2,44, -43,11,16,5,93,2,8,89,162,34,35,57,9,223,0,27,28,248,80,158,36, -34,195,249,80,158,37,35,248,80,158,38,36,197,27,248,80,158,39,37,198,28, -248,80,158,39,34,193,249,80,158,40,35,248,80,158,41,36,195,27,248,80,158, -42,37,196,28,248,80,158,42,34,193,249,80,158,43,35,248,80,158,44,36,195, -27,248,80,158,45,37,196,28,248,80,158,45,38,193,248,80,158,45,39,193,11, -11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27, -248,22,88,197,27,251,22,61,198,199,200,197,27,20,15,159,41,34,40,250,22, -209,20,15,159,44,35,40,250,22,209,20,15,159,47,36,40,254,22,62,20,15, -159,54,37,40,248,22,87,23,15,20,15,159,54,38,40,248,22,78,23,15,248, -22,52,23,15,20,15,159,54,39,40,248,22,88,23,15,20,15,159,47,40,40, -195,250,22,252,39,2,11,2,10,197,34,20,98,159,34,16,6,2,11,2,14, -2,16,2,18,2,20,2,22,16,7,18,16,2,95,2,24,44,93,8,252,152, -9,95,9,8,252,152,9,2,25,18,100,2,26,48,42,41,40,16,4,47,11, -2,30,3,1,7,101,110,118,50,57,56,55,46,16,10,46,11,3,1,4,103, -50,56,55,47,3,1,4,103,50,56,56,48,3,1,4,103,50,56,57,49,3, -1,4,103,50,57,48,50,3,1,7,101,110,118,50,57,57,52,51,2,51,2, -51,2,51,16,10,45,11,2,38,2,39,2,40,2,42,3,1,7,101,110,118, -50,57,57,53,52,2,52,2,52,2,52,18,158,2,44,48,18,158,2,45,48, -18,158,11,48,18,158,79,109,111,100,117,108,101,45,105,100,101,110,116,105,102, -105,101,114,61,63,53,48,18,158,2,44,48,11,16,5,93,2,9,89,162,34, -35,57,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158, +27,248,22,90,197,27,248,22,89,198,27,252,22,61,198,202,199,200,201,254,80, +158,48,40,20,15,159,48,34,41,21,97,3,1,4,103,52,55,55,10,3,1, +4,103,52,55,54,11,3,1,4,103,52,55,53,12,3,1,4,103,52,55,52, +13,3,1,4,103,52,55,51,14,248,22,78,200,248,22,89,200,248,22,90,200, +248,22,87,200,248,22,52,200,250,22,252,39,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,15,197,34,20,98,159,34,16,7,30,16,65,35,37,115, +116,120,17,69,115,116,120,45,112,97,105,114,63,18,11,30,19,2,17,67,99, +111,110,115,47,35,102,20,1,30,21,2,17,67,115,116,120,45,99,97,114,22, +5,30,23,2,17,67,115,116,120,45,99,100,114,24,6,30,25,2,17,69,115, +116,120,45,108,105,115,116,63,26,8,30,27,2,17,69,115,116,120,45,62,108, +105,115,116,28,4,30,29,69,35,37,115,116,120,99,97,115,101,30,1,24,97, +112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117, +116,101,31,0,16,1,18,158,165,40,100,73,115,121,110,116,97,120,45,99,97, +115,101,42,42,32,42,98,40,10,34,11,95,159,74,35,37,100,101,102,105,110, +101,45,101,116,45,97,108,33,9,11,159,2,30,9,11,159,71,35,37,113,113, +45,97,110,100,45,111,114,34,9,11,16,10,2,7,2,2,2,8,2,2,2, +9,2,2,2,6,2,2,2,4,2,2,98,39,10,35,11,94,159,64,35,37, +115,99,35,9,11,159,2,30,9,11,16,0,96,38,8,254,1,11,16,0,16, +4,37,11,63,115,116,120,36,3,1,7,101,110,118,50,57,50,50,37,16,12, +36,11,3,1,4,103,52,54,56,38,3,1,4,103,52,54,57,39,3,1,4, +103,52,55,48,40,3,1,4,103,52,55,49,41,3,1,4,103,52,55,50,42, +3,1,7,101,110,118,50,57,51,48,43,2,43,2,43,2,43,2,43,16,12, +35,11,61,95,44,64,115,116,120,101,45,62,107,108,46,64,105,100,61,63,47, +66,99,108,97,117,115,101,48,3,1,7,101,110,118,50,57,51,49,49,2,49, +2,49,2,49,2,49,158,2,10,42,158,11,42,158,2,11,42,158,2,12,42, +158,2,13,42,2,14,42,42,11,16,5,93,2,8,89,162,34,35,49,9,223, +0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197,27, +248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,35,248,80,158, +41,36,195,27,248,80,158,42,37,196,28,248,80,158,42,34,193,249,80,158,43, +35,248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80,158,45,38,193, +248,80,158,45,39,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78, +195,27,248,22,87,196,27,248,22,88,197,27,251,22,61,197,200,198,199,253,80, +158,46,40,20,15,159,46,34,41,21,96,3,1,4,103,52,56,53,50,3,1, +4,103,52,56,52,51,3,1,4,103,52,56,51,52,3,1,4,103,52,56,50, +53,248,22,78,199,248,22,88,199,248,22,87,199,248,22,52,199,250,22,252,39, +2,11,2,15,197,34,20,98,159,34,16,7,2,16,2,19,2,21,2,23,2, +25,2,27,2,29,16,1,18,158,165,40,100,2,32,46,40,39,38,16,4,45, +11,2,36,3,1,7,101,110,118,50,57,52,53,54,16,10,44,11,3,1,4, +103,52,55,56,55,3,1,4,103,52,55,57,56,3,1,4,103,52,56,48,57, +3,1,4,103,52,56,49,58,3,1,7,101,110,118,50,57,53,50,59,2,59, +2,59,2,59,16,10,43,11,2,44,2,45,2,46,2,48,3,1,7,101,110, +118,50,57,53,51,60,2,60,2,60,2,60,158,2,50,46,158,11,46,158,2, +51,46,158,2,52,46,158,79,109,111,100,117,108,101,45,105,100,101,110,116,105, +102,105,101,114,61,63,61,46,2,53,46,46,11,16,5,93,2,7,89,162,34, +35,47,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158, 38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40, 35,248,80,158,41,36,195,27,248,80,158,42,37,196,28,248,80,158,42,34,193, 249,80,158,43,38,248,80,158,44,36,195,248,80,158,44,39,248,80,158,45,37, 196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, -28,28,248,22,41,248,22,210,194,248,80,158,39,40,249,22,252,82,3,195,32, -54,89,162,8,44,34,34,9,222,11,11,27,20,15,159,39,34,41,250,22,209, -20,15,159,42,35,41,250,22,209,20,15,159,45,36,41,249,22,60,20,15,159, -47,37,41,201,20,15,159,45,38,41,195,27,249,22,61,195,196,27,20,15,159, -40,39,41,250,22,209,20,15,159,43,40,41,250,22,209,20,15,159,46,41,41, -250,22,60,20,15,159,49,42,41,248,22,53,203,250,22,209,20,15,159,52,43, -41,249,22,60,20,15,159,54,44,41,248,22,52,23,16,20,15,159,52,45,41, -20,15,159,46,46,41,195,250,22,252,39,2,11,2,10,197,34,20,98,159,34, -16,7,2,11,2,14,2,16,2,18,30,55,2,12,69,97,112,112,101,110,100, -47,35,102,56,0,30,57,2,12,71,115,116,120,45,110,117,108,108,47,35,102, -58,9,30,59,2,29,75,115,121,110,116,97,120,45,109,97,112,112,105,110,103, -63,60,8,16,13,18,16,2,95,2,24,49,93,8,252,167,9,95,9,8,252, -167,9,2,25,18,100,2,26,53,42,41,40,16,4,52,11,2,30,3,1,7, -101,110,118,51,48,48,55,61,16,8,51,11,3,1,4,103,50,57,49,62,3, -1,4,103,50,57,50,63,3,1,4,103,50,57,51,64,3,1,7,101,110,118, -51,48,49,51,65,2,65,2,65,16,8,50,11,2,38,63,108,111,99,66,67, -112,97,116,116,101,114,110,67,3,1,7,101,110,118,51,48,49,52,68,2,68, -2,68,18,158,2,44,53,18,158,66,115,121,110,116,97,120,69,53,18,158,2, -44,53,18,16,2,95,2,24,54,93,8,252,168,9,95,9,8,252,168,9,2, -25,18,158,2,26,53,18,158,2,44,53,18,158,2,6,53,18,158,2,44,53, -18,158,2,69,53,18,158,2,44,53,18,158,2,44,53,11,94,83,159,34,93, -80,159,34,34,35,247,22,252,115,2,83,159,34,93,80,159,34,35,35,89,162, -8,36,36,42,2,6,223,0,28,248,22,215,194,27,250,22,209,198,248,22,210, -199,197,251,22,232,196,199,80,158,39,34,11,194,96,68,35,37,107,101,114,110, -101,108,70,2,28,2,25,2,27,95,2,70,2,25,2,29,0}; - EVAL_ONE_SIZED_STR((char *)expr, 1885); +28,28,248,22,41,248,22,210,194,248,80,158,39,40,249,22,252,87,3,195,32, +62,89,162,8,44,34,34,9,222,11,11,250,80,158,41,41,20,15,159,41,34, +42,21,93,3,1,4,103,52,56,57,63,195,27,249,22,61,195,196,251,80,158, +43,41,20,15,159,43,35,42,21,94,3,1,4,103,52,57,49,64,3,1,4, +103,52,57,48,65,248,22,53,197,248,22,52,197,250,22,252,39,2,11,2,15, +197,34,20,98,159,34,16,8,2,16,2,19,2,21,2,23,30,66,2,17,69, +97,112,112,101,110,100,47,35,102,67,0,30,68,2,17,71,115,116,120,45,110, +117,108,108,47,35,102,69,9,30,70,2,35,75,115,121,110,116,97,120,45,109, +97,112,112,105,110,103,63,71,8,2,29,16,2,18,158,94,100,66,115,121,110, +116,97,120,72,50,40,39,38,16,4,49,11,2,36,3,1,7,101,110,118,50, +57,54,53,73,16,8,48,11,3,1,4,103,52,56,54,74,3,1,4,103,52, +56,55,75,3,1,4,103,52,56,56,76,3,1,7,101,110,118,50,57,55,49, +77,2,77,2,77,16,8,47,11,2,44,63,108,111,99,78,67,112,97,116,116, +101,114,110,79,3,1,7,101,110,118,50,57,55,50,80,2,80,2,80,158,2, +63,50,50,18,158,96,10,2,6,2,64,94,2,72,2,65,50,11,94,83,159, +34,93,80,159,34,34,35,247,22,252,115,2,83,159,34,93,80,159,34,35,35, +89,162,8,36,36,42,2,6,223,0,28,248,22,215,194,27,250,22,209,198,248, +22,210,199,197,251,22,232,196,199,80,158,39,34,11,194,96,68,35,37,107,101, +114,110,101,108,81,2,34,2,30,2,33,95,2,81,2,30,2,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 1740); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,95,252,11,10,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,101,252,198,8,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,70,35,37,119,105, 116,104,45,115,116,120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98, 159,35,16,7,30,3,2,2,76,119,105,116,104,45,115,121,110,116,97,120,45, @@ -1637,263 +1746,137 @@ 115,116,15,4,30,16,2,12,71,105,100,101,110,116,105,102,105,101,114,63,17, 2,16,0,11,11,16,3,2,8,2,6,2,4,37,11,16,2,2,10,71,119, 105,116,104,45,115,121,110,116,97,120,18,16,2,11,11,16,2,2,10,2,18, -35,36,93,16,5,93,2,18,87,94,83,159,34,93,80,159,34,8,31,35,89, -162,8,100,38,8,36,64,108,111,111,112,19,223,0,28,248,22,57,196,27,249, -22,61,196,197,27,20,15,159,36,47,46,250,22,209,20,15,159,39,48,46,250, -22,209,20,15,159,42,49,46,249,22,56,20,15,159,44,50,46,201,20,15,159, -42,51,46,195,26,8,22,59,73,115,121,110,116,97,120,45,99,97,115,101,42, -42,20,11,10,248,22,52,204,9,79,109,111,100,117,108,101,45,105,100,101,110, -116,105,102,105,101,114,61,63,21,249,22,59,248,22,52,23,15,27,248,22,53, -23,15,27,248,22,53,23,17,28,248,22,57,194,27,249,22,61,23,16,23,17, -27,20,15,159,48,47,46,250,22,209,20,15,159,51,48,46,250,22,209,20,15, -159,54,49,46,249,22,56,20,15,159,56,50,46,201,20,15,159,54,51,46,195, -26,8,22,59,2,20,11,10,248,22,52,202,9,2,21,249,22,59,248,22,52, -203,251,80,159,8,26,8,31,35,23,27,23,28,248,22,53,23,16,248,22,53, -23,15,249,22,59,65,95,101,108,115,101,22,249,22,59,2,4,249,22,59,72, -113,117,111,116,101,45,115,121,110,116,97,120,23,250,22,209,11,248,22,208,248, -22,52,23,19,248,22,52,23,18,249,22,59,2,22,249,22,59,2,4,249,22, -59,2,23,250,22,209,11,248,22,208,248,22,52,23,23,248,22,52,23,22,89, -162,34,35,8,40,9,223,0,27,249,22,209,20,15,159,37,34,46,196,27,28, -248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158, -40,37,197,28,248,80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36, -194,27,248,80,158,41,37,194,28,248,80,158,41,34,193,249,80,158,42,35,248, -80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,39,193,248,80, -158,44,40,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, -27,248,22,80,196,249,80,158,41,41,200,27,249,22,61,198,197,27,20,15,159, -43,35,46,250,22,209,20,15,159,46,36,46,250,22,209,20,15,159,49,37,46, -249,22,56,20,15,159,51,38,46,201,20,15,159,49,39,46,195,27,28,248,80, -158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37, -198,28,248,80,158,41,34,193,249,80,158,42,42,27,248,80,158,44,36,196,28, -248,80,158,44,39,193,248,22,9,89,162,34,35,41,9,224,10,1,27,249,22, -2,89,162,34,35,46,9,224,4,5,249,80,158,37,43,28,248,80,158,38,34, -197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248, -80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,38, -248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248,22,57,193,21, -94,9,9,248,80,158,37,44,193,11,27,248,80,158,44,37,196,28,248,80,158, -44,34,193,249,80,158,45,35,248,80,158,46,36,195,27,248,80,158,47,37,196, -28,248,80,158,47,39,193,248,80,158,47,40,193,11,11,11,11,28,192,27,248, -22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22, -89,198,27,248,22,216,27,20,15,159,45,40,46,250,22,209,20,15,159,48,41, -46,200,195,87,94,251,80,158,47,45,201,206,27,20,15,159,48,42,46,250,22, -209,20,15,159,51,43,46,204,195,9,27,249,22,2,32,24,89,162,8,36,35, -36,9,222,248,22,48,65,119,115,116,109,112,25,195,27,249,22,2,32,26,89, -162,8,36,35,38,9,222,250,22,209,195,64,104,101,114,101,27,195,196,27,248, -22,216,27,20,15,159,48,44,46,250,22,209,20,15,159,51,45,46,204,195,250, -22,209,20,15,159,49,46,46,250,22,59,63,108,101,116,28,251,22,2,32,29, -89,162,8,36,37,44,9,222,249,22,59,194,250,22,59,1,20,100,97,116,117, -109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,30,249,22,59,2, -23,200,199,204,203,205,28,248,22,57,201,27,249,22,61,206,205,27,20,15,159, -54,47,46,250,22,209,20,15,159,57,48,46,250,22,209,20,15,159,8,26,49, -46,249,22,56,20,15,159,8,28,50,46,201,20,15,159,8,26,51,46,195,26, -8,22,59,2,20,11,10,248,22,52,23,17,9,2,21,249,22,59,248,22,52, -23,17,251,80,159,8,32,8,31,35,23,25,23,24,248,22,53,23,23,248,22, -53,23,21,249,22,59,2,22,249,22,59,2,4,249,22,59,2,23,250,22,209, -11,248,22,208,248,22,52,23,25,248,22,52,23,24,23,16,250,22,252,39,2, -11,6,10,10,98,97,100,32,115,121,110,116,97,120,31,197,34,20,98,159,35, -16,12,30,32,2,12,69,115,116,120,45,112,97,105,114,63,33,11,30,34,2, -12,67,99,111,110,115,47,35,102,35,1,30,36,2,12,67,115,116,120,45,99, -97,114,37,5,30,38,2,12,67,115,116,120,45,99,100,114,39,6,30,40,2, -12,71,115,116,120,45,110,117,108,108,47,35,102,41,9,30,42,2,12,2,13, -8,30,43,2,12,2,15,4,30,44,68,35,37,115,116,120,108,111,99,45,68, -114,101,108,111,99,97,116,101,46,1,30,47,2,12,69,97,112,112,101,110,100, -47,35,102,48,0,30,49,2,12,73,115,116,120,45,99,104,101,99,107,47,101, -115,99,50,7,30,51,2,12,70,115,116,120,45,114,111,116,97,116,101,52,12, -30,53,64,35,37,115,99,54,74,103,101,116,45,109,97,116,99,104,45,118,97, -114,115,55,0,16,18,18,98,2,27,40,98,38,10,34,11,96,159,69,35,37, -115,116,120,99,97,115,101,56,9,11,159,74,35,37,115,109,97,108,108,45,115, -99,104,101,109,101,57,9,11,159,2,45,9,11,159,2,12,9,11,16,10,2, -8,2,2,2,10,2,2,2,6,2,2,2,18,2,2,2,4,2,2,98,37, -10,35,11,97,159,66,35,37,99,111,110,100,58,9,11,159,71,35,37,113,113, -45,97,110,100,45,111,114,59,9,11,159,2,54,9,11,159,2,45,9,11,159, -2,56,9,11,16,0,96,36,8,254,1,11,16,0,16,4,35,11,61,120,60, -3,1,7,101,110,118,51,48,50,57,61,18,16,2,95,66,115,114,99,116,97, -103,62,41,93,8,252,190,9,95,9,8,252,190,9,2,56,18,100,64,100,101, -115,116,63,44,38,37,36,35,16,8,43,11,3,1,4,103,50,57,57,64,3, -1,4,103,51,48,48,65,3,1,4,103,51,48,49,66,3,1,7,101,110,118, -51,48,51,54,67,2,67,2,67,16,8,42,11,61,95,68,62,101,49,69,62, -101,50,70,3,1,7,101,110,118,51,48,51,55,71,2,71,2,71,18,158,63, -99,116,120,72,44,18,158,2,0,44,18,158,2,72,44,18,16,2,95,2,62, -45,93,8,252,196,9,95,9,8,252,196,9,2,56,18,100,2,63,48,38,37, -36,35,16,12,47,11,3,1,4,103,50,57,52,73,3,1,4,103,50,57,53, -74,3,1,4,103,50,57,54,75,3,1,4,103,50,57,55,76,3,1,4,103, -50,57,56,77,3,1,7,101,110,118,51,48,53,54,78,2,78,2,78,2,78, -2,78,16,12,46,11,2,68,63,111,117,116,79,62,105,110,80,2,69,2,70, -3,1,7,101,110,118,51,48,53,55,81,2,81,2,81,2,81,2,81,18,16, -2,95,2,62,49,93,8,252,198,9,95,9,8,252,198,9,2,56,18,101,2, -63,51,38,37,36,35,47,46,16,4,50,11,63,105,110,115,82,3,1,7,101, -110,118,51,48,54,57,83,18,16,2,95,2,62,52,93,8,252,200,9,95,9, -8,252,200,9,2,56,18,158,2,63,51,18,102,2,27,55,38,37,36,35,47, -46,16,4,54,11,2,82,2,83,16,8,53,11,64,116,109,112,115,84,65,104, -101,114,101,115,85,64,111,117,116,115,86,3,1,7,101,110,118,51,48,55,50, -87,2,87,2,87,18,16,2,95,2,62,56,93,8,252,206,9,95,9,8,252, -206,9,2,56,18,103,2,63,58,38,37,36,35,47,46,54,53,16,4,57,11, -2,19,3,1,7,101,110,118,51,48,55,55,88,18,158,2,72,58,18,158,2, -0,58,18,158,2,72,58,11,97,83,159,34,93,80,159,34,41,35,89,162,34, -35,44,9,223,0,248,247,22,252,88,3,28,248,22,41,195,249,22,209,11,87, -94,83,160,36,11,80,158,37,35,248,22,170,80,158,38,35,248,22,42,250,22, -252,184,1,6,4,4,126,97,126,115,89,200,80,158,41,35,28,248,22,252,136, -1,195,249,22,209,11,87,94,83,160,36,11,80,158,37,35,248,22,170,80,158, -38,35,248,22,42,250,22,252,184,1,2,89,200,80,158,41,35,28,248,80,158, -36,40,195,249,22,209,11,27,248,22,210,198,87,94,83,160,36,11,80,158,38, -35,248,22,170,80,158,39,35,248,22,42,250,22,252,184,1,2,89,196,80,158, -42,35,249,22,209,11,87,94,83,160,36,11,80,158,37,35,248,22,170,80,158, -38,35,248,22,42,250,22,252,184,1,2,89,64,116,101,109,112,90,80,158,41, -35,83,159,34,93,80,159,34,34,35,32,91,89,162,34,35,38,2,4,222,250, -22,252,39,2,2,18,6,20,20,98,105,110,100,105,110,103,32,109,97,116,99, -104,32,102,97,105,108,101,100,92,195,83,159,34,93,80,158,34,35,34,83,159, -34,93,80,159,34,36,35,89,162,34,35,40,2,8,223,0,87,94,83,160,36, -11,80,158,34,35,248,22,170,80,158,35,35,248,22,42,250,22,252,184,1,2, -89,197,80,158,38,35,83,159,34,93,80,159,34,37,35,89,162,34,35,39,2, -10,223,0,87,94,28,248,80,158,35,38,194,12,250,22,252,40,2,2,10,6, -11,11,115,121,110,116,97,120,32,112,97,105,114,93,196,27,248,80,158,36,39, -195,249,22,2,80,159,37,41,35,194,97,68,35,37,107,101,114,110,101,108,94, -2,12,2,45,2,57,2,56,98,2,94,2,56,2,45,2,54,2,59,2,58, -0}; - EVAL_ONE_SIZED_STR((char *)expr, 2583); +35,36,93,16,5,93,2,18,87,94,83,159,34,93,80,159,34,56,35,89,162, +8,64,38,58,64,108,111,111,112,19,223,0,28,248,22,57,196,27,249,22,61, +197,196,251,80,158,39,42,20,15,159,39,40,48,21,94,3,1,4,103,53,48, +51,20,3,1,4,103,53,48,50,21,248,22,53,197,248,22,52,197,26,8,22, +59,73,115,121,110,116,97,120,45,99,97,115,101,42,42,22,11,10,248,22,52, +204,9,79,109,111,100,117,108,101,45,105,100,101,110,116,105,102,105,101,114,61, +63,23,249,22,59,248,22,52,23,15,251,80,159,48,56,35,23,15,23,16,248, +22,53,23,18,248,22,53,23,19,249,22,59,65,95,101,108,115,101,24,249,22, +59,2,4,249,22,59,72,113,117,111,116,101,45,115,121,110,116,97,120,25,250, +22,209,11,248,22,208,248,22,52,23,23,248,22,52,23,22,89,162,34,35,59, +9,223,0,27,249,22,209,20,15,159,37,34,48,196,27,28,248,80,158,37,34, +194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248, +80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36,194,27,248,80,158, +41,37,194,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195, +27,248,80,158,44,37,196,28,248,80,158,44,39,193,248,80,158,44,40,193,11, +11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, +249,80,158,41,41,200,27,249,22,61,197,198,251,80,158,46,42,20,15,159,46, +35,48,21,94,3,1,4,103,53,48,49,26,3,1,4,103,53,48,48,27,248, +22,53,197,248,22,52,197,27,28,248,80,158,38,34,195,249,80,158,39,35,248, +80,158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80, +158,42,43,27,248,80,158,44,36,196,28,248,80,158,44,39,193,248,22,9,89, +162,34,35,41,9,224,10,1,27,249,22,2,89,162,34,35,46,9,224,4,5, +249,80,158,37,44,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40, +36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35, +248,80,158,43,36,195,248,80,158,43,38,248,80,158,44,37,196,11,11,194,248, +80,158,39,40,196,28,248,22,57,193,21,94,9,9,248,80,158,37,45,193,11, +27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,35,248,80, +158,46,36,195,27,248,80,158,47,37,196,28,248,80,158,47,39,193,248,80,158, +47,40,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, +22,87,196,27,248,22,90,197,27,248,22,89,198,27,248,22,216,249,80,158,46, +46,20,15,159,46,36,48,198,87,94,251,80,158,47,47,201,206,249,80,158,49, +46,20,15,159,49,37,48,202,9,27,249,22,2,32,28,89,162,8,36,35,36, +9,222,248,22,48,65,119,115,116,109,112,29,195,27,249,22,2,32,30,89,162, +8,36,35,38,9,222,250,22,209,195,64,104,101,114,101,31,195,196,27,248,22, +216,249,80,158,49,46,20,15,159,49,38,48,202,250,22,209,20,15,159,49,39, +48,250,22,59,63,108,101,116,32,251,22,2,32,33,89,162,8,36,37,44,9, +222,249,22,59,194,250,22,59,1,20,100,97,116,117,109,45,62,115,121,110,116, +97,120,45,111,98,106,101,99,116,34,249,22,59,2,25,200,199,204,203,205,251, +80,159,56,56,35,23,15,206,204,202,23,16,250,22,252,39,2,11,6,10,10, +98,97,100,32,115,121,110,116,97,120,35,197,34,20,98,159,35,16,14,30,36, +2,12,69,115,116,120,45,112,97,105,114,63,37,11,30,38,2,12,67,99,111, +110,115,47,35,102,39,1,30,40,2,12,67,115,116,120,45,99,97,114,41,5, +30,42,2,12,67,115,116,120,45,99,100,114,43,6,30,44,2,12,71,115,116, +120,45,110,117,108,108,47,35,102,45,9,30,46,2,12,2,13,8,30,47,2, +12,2,15,4,30,48,68,35,37,115,116,120,108,111,99,49,68,114,101,108,111, +99,97,116,101,50,1,30,51,69,35,37,115,116,120,99,97,115,101,52,1,24, +97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116, +117,116,101,53,0,30,54,2,12,69,97,112,112,101,110,100,47,35,102,55,0, +30,56,2,12,73,115,116,120,45,99,104,101,99,107,47,101,115,99,57,7,30, +58,2,12,70,115,116,120,45,114,111,116,97,116,101,59,12,30,60,2,52,1, +26,100,97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116, +47,115,104,97,112,101,61,2,30,62,64,35,37,115,99,63,74,103,101,116,45, +109,97,116,99,104,45,118,97,114,115,64,0,16,7,18,98,2,31,40,98,38, +10,34,11,96,159,2,52,9,11,159,74,35,37,115,109,97,108,108,45,115,99, +104,101,109,101,65,9,11,159,2,49,9,11,159,2,12,9,11,16,10,2,10, +2,2,2,4,2,2,2,8,2,2,2,18,2,2,2,6,2,2,98,37,10, +35,11,97,159,66,35,37,99,111,110,100,66,9,11,159,71,35,37,113,113,45, +97,110,100,45,111,114,67,9,11,159,2,63,9,11,159,2,49,9,11,159,2, +52,9,11,16,0,96,36,8,254,1,11,16,0,16,4,35,11,61,120,68,3, +1,7,101,110,118,50,57,56,55,69,18,158,161,36,100,2,0,43,38,37,36, +35,16,8,42,11,3,1,4,103,52,57,55,70,3,1,4,103,52,57,56,71, +3,1,4,103,52,57,57,72,3,1,7,101,110,118,50,57,57,52,73,2,73, +2,73,16,8,41,11,61,95,74,62,101,49,75,62,101,50,76,3,1,7,101, +110,118,50,57,57,53,77,2,77,2,77,158,2,26,43,2,27,43,43,18,100, +64,100,101,115,116,78,46,38,37,36,35,16,12,45,11,3,1,4,103,52,57, +50,79,3,1,4,103,52,57,51,80,3,1,4,103,52,57,52,81,3,1,4, +103,52,57,53,82,3,1,4,103,52,57,54,83,3,1,7,101,110,118,51,48, +49,52,84,2,84,2,84,2,84,2,84,16,12,44,11,2,74,63,111,117,116, +85,62,105,110,86,2,75,2,76,3,1,7,101,110,118,51,48,49,53,87,2, +87,2,87,2,87,2,87,18,101,2,78,48,38,37,36,35,45,44,16,4,47, +11,63,105,110,115,88,3,1,7,101,110,118,51,48,50,55,89,18,16,2,158, +2,78,48,49,18,102,2,31,52,38,37,36,35,45,44,16,4,51,11,2,88, +2,89,16,8,50,11,64,116,109,112,115,90,65,104,101,114,101,115,91,64,111, +117,116,115,92,3,1,7,101,110,118,51,48,51,48,93,2,93,2,93,18,158, +161,36,103,2,0,54,38,37,36,35,45,44,51,50,16,4,53,11,2,19,3, +1,7,101,110,118,51,48,51,53,94,158,2,20,54,2,21,54,54,11,97,83, +159,34,93,80,159,34,41,35,89,162,34,35,44,9,223,0,248,247,22,252,93, +3,28,248,22,41,195,249,22,209,11,87,94,83,160,36,11,80,158,37,35,248, +22,170,80,158,38,35,248,22,42,250,22,252,184,1,6,4,4,126,97,126,115, +95,200,80,158,41,35,28,248,22,252,136,1,195,249,22,209,11,87,94,83,160, +36,11,80,158,37,35,248,22,170,80,158,38,35,248,22,42,250,22,252,184,1, +2,95,200,80,158,41,35,28,248,80,158,36,40,195,249,22,209,11,27,248,22, +210,198,87,94,83,160,36,11,80,158,38,35,248,22,170,80,158,39,35,248,22, +42,250,22,252,184,1,2,95,196,80,158,42,35,249,22,209,11,87,94,83,160, +36,11,80,158,37,35,248,22,170,80,158,38,35,248,22,42,250,22,252,184,1, +2,95,64,116,101,109,112,96,80,158,41,35,83,159,34,93,80,159,34,34,35, +32,97,89,162,34,35,38,2,4,222,250,22,252,39,2,2,18,6,20,20,98, +105,110,100,105,110,103,32,109,97,116,99,104,32,102,97,105,108,101,100,98,195, +83,159,34,93,80,158,34,35,34,83,159,34,93,80,159,34,36,35,89,162,34, +35,40,2,8,223,0,87,94,83,160,36,11,80,158,34,35,248,22,170,80,158, +35,35,248,22,42,250,22,252,184,1,2,95,197,80,158,38,35,83,159,34,93, +80,159,34,37,35,89,162,34,35,39,2,10,223,0,87,94,28,248,80,158,35, +38,194,12,250,22,252,40,2,2,10,6,11,11,115,121,110,116,97,120,32,112, +97,105,114,99,196,27,248,80,158,36,39,195,249,22,2,80,159,37,41,35,194, +97,68,35,37,107,101,114,110,101,108,100,2,12,2,49,2,65,2,52,98,2, +100,2,52,2,49,2,63,2,67,2,66,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2258); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,193,252,147,31,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,208,252,145,24,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,76,35,37,115,116, 120,99,97,115,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,34, 80,158,34,34,20,98,159,34,16,2,30,3,2,2,1,26,99,104,101,99,107, 45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114, 4,254,1,30,5,65,35,37,115,116,120,6,71,105,100,101,110,116,105,102,105, 101,114,63,7,2,16,0,11,11,16,0,34,11,16,26,2,4,1,20,103,101, -110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,8,70,113, -117,97,115,105,113,117,111,116,101,9,62,111,114,10,73,108,101,116,114,101,99, -45,115,121,110,116,97,120,11,73,100,101,102,105,110,101,45,115,116,114,117,99, -116,12,72,108,101,116,45,115,121,110,116,97,120,101,115,13,67,45,100,101,102, -105,110,101,14,70,108,101,116,45,115,121,110,116,97,120,15,72,115,121,110,116, -97,120,45,99,97,115,101,42,16,72,115,121,110,116,97,120,45,114,117,108,101, -115,17,63,108,101,116,18,71,115,121,110,116,97,120,45,99,97,115,101,19,64, -119,104,101,110,20,64,108,101,116,42,21,75,115,121,110,116,97,120,45,105,100, -45,114,117,108,101,115,22,66,108,101,116,114,101,99,23,66,108,101,116,47,101, -99,24,64,99,111,110,100,25,70,115,121,110,116,97,120,47,108,111,99,26,66, -115,121,110,116,97,120,27,66,117,110,108,101,115,115,28,71,119,105,116,104,45, -115,121,110,116,97,120,29,74,45,100,101,102,105,110,101,45,115,121,110,116,97, -120,30,63,97,110,100,31,75,108,101,116,114,101,99,45,115,121,110,116,97,120, -101,115,32,16,26,11,70,35,37,119,105,116,104,45,115,116,120,33,71,35,37, -113,113,45,97,110,100,45,111,114,34,2,34,11,74,35,37,100,101,102,105,110, -101,45,101,116,45,97,108,35,11,2,35,11,68,35,37,115,116,120,108,111,99, -36,11,2,34,2,36,2,35,2,34,11,2,34,2,35,66,35,37,99,111,110, -100,37,2,36,69,35,37,115,116,120,99,97,115,101,38,2,35,2,33,2,35, -2,34,11,16,26,2,4,2,8,2,9,2,10,2,11,2,12,2,13,2,14, +110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,8,72,108, +101,116,45,115,121,110,116,97,120,101,115,9,63,97,110,100,10,66,108,101,116, +114,101,99,11,62,111,114,12,75,115,121,110,116,97,120,45,105,100,45,114,117, +108,101,115,13,72,115,121,110,116,97,120,45,99,97,115,101,42,14,64,119,104, +101,110,15,63,108,101,116,16,66,117,110,108,101,115,115,17,66,108,101,116,47, +101,99,18,71,119,105,116,104,45,115,121,110,116,97,120,19,66,115,121,110,116, +97,120,20,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,21,64, +99,111,110,100,22,70,108,101,116,45,115,121,110,116,97,120,23,73,108,101,116, +114,101,99,45,115,121,110,116,97,120,24,72,115,121,110,116,97,120,45,114,117, +108,101,115,25,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,26,71, +115,121,110,116,97,120,45,99,97,115,101,27,64,108,101,116,42,28,73,100,101, +102,105,110,101,45,115,116,114,117,99,116,29,70,113,117,97,115,105,113,117,111, +116,101,30,70,115,121,110,116,97,120,47,108,111,99,31,67,45,100,101,102,105, +110,101,32,16,26,11,70,35,37,119,105,116,104,45,115,116,120,33,11,71,35, +37,113,113,45,97,110,100,45,111,114,34,2,34,2,34,11,68,35,37,115,116, +120,108,111,99,35,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,36, +2,34,2,36,2,36,2,33,69,35,37,115,116,120,99,97,115,101,37,11,66, +35,37,99,111,110,100,38,11,11,11,2,36,2,35,2,34,2,36,2,34,2, +35,2,36,16,26,2,4,2,8,2,9,2,10,2,11,2,12,2,13,2,14, 2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2, 25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,36,8,26,98,16,5, -93,2,32,87,94,83,159,34,93,80,159,34,57,35,89,162,8,37,35,42,9, -223,0,250,22,209,20,15,159,37,40,46,249,22,60,248,22,52,199,248,22,78, -199,20,15,159,37,41,46,89,162,34,35,50,9,223,0,27,249,22,209,20,15, -159,37,34,46,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158, -39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41, -38,27,248,80,158,43,36,196,28,248,80,158,43,39,193,248,22,9,89,162,34, -35,41,9,224,9,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80, -158,37,40,28,248,80,158,38,34,197,249,80,158,39,38,27,248,80,158,41,36, -200,28,248,80,158,41,39,193,248,22,59,248,80,158,42,41,194,11,27,248,80, -158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36, -195,248,80,158,43,42,248,80,158,44,37,196,11,11,194,248,80,158,39,41,196, -28,248,22,57,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,43, -37,196,28,248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27, -248,80,158,46,37,196,28,248,80,158,46,39,193,248,80,158,46,41,193,11,11, -11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248, -22,90,197,27,248,22,89,198,249,80,158,43,44,202,27,251,22,61,201,200,202, -199,27,20,15,159,45,35,46,91,159,35,11,90,161,35,34,11,83,160,40,34, -35,11,247,248,22,9,89,162,34,35,42,9,226,13,2,3,1,250,22,31,89, -162,34,34,38,9,225,6,3,7,90,161,35,35,10,247,22,252,185,2,248,22, -252,185,2,89,162,34,35,38,9,224,3,1,248,193,89,162,34,34,38,9,224, -2,3,28,248,22,252,182,2,193,248,22,252,187,2,193,249,80,158,37,45,21, -98,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,43,118,97, -108,117,101,115,39,94,94,94,62,105,100,40,63,46,46,46,41,64,101,120,112, -114,42,2,41,9,65,98,111,100,121,49,43,64,98,111,100,121,44,2,41,20, -15,159,37,36,46,89,162,8,36,34,53,9,225,6,5,4,27,250,22,209,20, -15,159,40,37,46,250,22,209,20,15,159,43,38,46,252,22,62,20,15,159,48, -39,46,250,22,2,80,159,51,57,35,248,22,87,23,16,248,22,52,23,16,20, -15,159,48,42,46,248,22,78,205,248,22,88,205,20,15,159,43,43,46,197,89, -162,8,36,34,35,9,223,0,192,89,162,34,34,36,9,223,3,248,22,252,185, -2,208,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120, -45,196,34,20,98,159,35,16,12,30,46,2,6,69,115,116,120,45,112,97,105, -114,63,47,11,30,48,2,6,67,99,111,110,115,47,35,102,49,1,30,50,2, -6,67,115,116,120,45,99,97,114,51,5,30,52,2,6,67,115,116,120,45,99, -100,114,53,6,30,54,2,6,69,97,112,112,101,110,100,47,35,102,55,0,30, -56,2,6,69,115,116,120,45,108,105,115,116,63,57,8,30,58,2,6,73,115, -116,120,45,99,104,101,99,107,47,101,115,99,59,7,30,60,2,6,69,115,116, -120,45,62,108,105,115,116,61,4,30,62,2,6,71,115,116,120,45,110,117,108, -108,47,35,102,63,9,30,64,2,6,70,115,116,120,45,114,111,116,97,116,101, -65,12,30,66,2,36,68,114,101,108,111,99,97,116,101,67,1,30,68,2,38, -1,20,101,108,108,105,112,115,105,115,45,99,111,117,110,116,45,101,114,114,111, -114,69,0,16,10,18,98,64,104,101,114,101,70,40,98,38,10,34,11,97,159, -2,36,9,11,159,2,33,9,11,159,2,38,9,11,159,2,6,9,11,159,74, -35,37,115,109,97,108,108,45,115,99,104,101,109,101,71,9,11,16,14,2,15, -2,2,2,22,2,2,2,4,2,2,2,17,2,2,2,11,2,2,2,13,2, -2,2,32,2,2,98,37,10,35,11,97,159,2,36,9,11,159,2,33,9,11, -159,2,38,9,11,159,2,6,9,11,159,2,71,9,11,16,0,96,36,8,254, -1,11,16,0,16,4,35,11,63,115,116,120,72,3,1,7,101,110,118,51,48, -57,49,73,18,16,2,95,66,115,114,99,116,97,103,74,41,93,8,252,232,9, -95,9,8,252,232,9,2,38,18,16,2,99,2,41,46,93,8,252,232,9,16, -6,45,11,61,114,75,63,115,114,99,76,3,1,7,101,110,118,51,49,49,55, -77,2,77,16,4,44,11,64,101,120,110,104,78,3,1,7,101,110,118,51,49, -49,56,79,16,4,43,11,63,101,115,99,80,3,1,7,101,110,118,51,49,49, -57,81,16,4,42,11,63,101,120,110,82,3,1,7,101,110,118,51,49,50,49, -83,95,9,8,252,232,9,2,38,18,100,64,100,101,115,116,84,49,38,37,36, -35,16,12,48,11,3,1,4,103,51,48,50,85,3,1,4,103,51,48,51,86, -3,1,4,103,51,48,52,87,3,1,4,103,51,48,53,88,3,1,4,103,51, -48,54,89,3,1,7,101,110,118,51,49,48,52,90,2,90,2,90,2,90,2, -90,16,12,47,11,61,95,91,2,40,2,42,2,43,2,44,3,1,7,101,110, -118,51,49,48,53,92,2,92,2,92,2,92,2,92,18,158,63,99,116,120,93, -49,18,158,2,39,49,18,158,2,93,49,18,158,2,93,49,18,158,9,49,18, -158,2,93,49,11,16,5,93,2,11,87,94,83,159,34,93,80,159,34,59,35, -89,162,8,37,35,46,9,223,0,250,22,209,20,15,159,37,40,46,249,22,60, -250,22,209,20,15,159,42,41,46,248,22,60,248,22,52,203,20,15,159,42,42, -46,248,22,78,199,20,15,159,37,43,46,89,162,34,35,50,9,223,0,27,249, -22,209,20,15,159,37,34,46,196,27,28,248,80,158,37,34,194,249,80,158,38, -35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193, -249,80,158,41,38,27,248,80,158,43,36,196,28,248,80,158,43,39,193,248,22, -9,89,162,34,35,41,9,224,9,1,27,249,22,2,89,162,34,35,46,9,224, -4,5,249,80,158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80, -158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158, -42,35,248,80,158,43,36,195,248,80,158,43,41,248,80,158,44,37,196,11,11, -194,248,80,158,39,42,196,28,248,22,57,193,21,94,9,9,248,80,158,37,43, -193,11,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35, -248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46,39,193,248, -80,158,46,42,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, -27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,44,202, -27,251,22,61,201,200,202,199,27,20,15,159,45,35,46,91,159,35,11,90,161, -35,34,11,83,160,40,34,35,11,247,248,22,9,89,162,34,35,42,9,226,13, -2,3,1,250,22,31,89,162,34,34,38,9,225,6,3,7,90,161,35,35,10, -247,22,252,185,2,248,22,252,185,2,89,162,34,35,38,9,224,3,1,248,193, -89,162,34,34,38,9,224,2,3,28,248,22,252,182,2,193,248,22,252,187,2, -193,249,80,158,37,45,21,98,2,39,94,94,93,2,40,2,42,2,41,9,2, -43,2,44,2,41,20,15,159,37,36,46,89,162,8,36,34,53,9,225,6,5, -4,27,250,22,209,20,15,159,40,37,46,250,22,209,20,15,159,43,38,46,252, -22,62,20,15,159,48,39,46,250,22,2,80,159,51,59,35,248,22,87,23,16, -248,22,52,23,16,20,15,159,48,44,46,248,22,78,205,248,22,88,205,20,15, -159,43,45,46,197,89,162,8,36,34,35,9,223,0,192,89,162,34,34,36,9, -223,3,248,22,252,185,2,208,250,22,252,39,2,11,2,45,196,34,20,98,159, -35,16,12,2,46,2,48,2,50,2,52,2,54,2,56,2,58,2,62,2,60, -2,64,2,66,2,68,16,12,18,98,2,70,51,38,37,36,16,4,50,11,2, -72,3,1,7,101,110,118,51,49,51,48,94,18,16,2,95,2,74,52,93,8, -252,253,9,95,9,8,252,253,9,2,38,18,16,2,99,2,41,57,93,8,252, -253,9,16,6,56,11,2,75,2,76,3,1,7,101,110,118,51,49,53,53,95, -2,95,16,4,55,11,2,78,3,1,7,101,110,118,51,49,53,54,96,16,4, -54,11,2,80,3,1,7,101,110,118,51,49,53,55,97,16,4,53,11,2,82, -3,1,7,101,110,118,51,49,53,57,98,95,9,8,252,253,9,2,38,18,100, -2,84,8,26,38,37,36,50,16,12,59,11,3,1,4,103,51,48,55,99,3, -1,4,103,51,48,56,100,3,1,4,103,51,48,57,101,3,1,4,103,51,49, -48,102,3,1,4,103,51,49,49,103,3,1,7,101,110,118,51,49,52,50,104, -2,104,2,104,2,104,2,104,16,12,58,11,2,91,2,40,2,42,2,43,2, -44,3,1,7,101,110,118,51,49,52,51,105,2,105,2,105,2,105,2,105,18, -158,2,93,8,26,18,158,2,39,8,26,18,158,2,93,8,26,18,158,2,93, -8,26,18,158,2,93,8,26,18,158,2,93,8,26,18,158,9,8,26,18,158, -2,93,8,26,11,16,5,93,2,13,87,96,83,159,34,93,80,159,34,8,47, -35,89,162,8,37,35,49,9,223,0,250,22,209,20,15,159,37,48,49,249,22, -60,248,22,52,199,250,22,209,20,15,159,42,49,49,249,22,56,20,15,159,44, -50,49,249,22,2,80,159,46,8,46,35,248,22,78,206,20,15,159,42,57,49, -20,15,159,37,58,49,83,159,34,93,80,159,34,8,46,35,89,162,8,37,35, -47,9,223,0,250,22,209,20,15,159,37,51,49,249,22,60,20,15,159,39,52, -49,250,22,209,20,15,159,42,53,49,249,22,60,20,15,159,44,54,49,248,22, -52,204,20,15,159,42,55,49,20,15,159,37,56,49,83,159,34,93,80,159,34, -8,45,35,89,162,8,37,35,42,9,223,0,250,22,209,20,15,159,37,43,49, -249,22,60,248,22,52,199,248,22,78,199,20,15,159,37,44,49,89,162,34,35, -53,9,223,0,27,249,22,209,20,15,159,37,34,49,196,27,28,248,80,158,37, +93,2,21,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223, +0,251,80,158,38,46,20,15,159,38,36,47,21,94,3,1,4,103,53,49,48, +39,3,1,4,103,53,48,57,40,248,22,52,198,248,22,78,198,89,162,34,35, +50,9,223,0,27,249,22,209,20,15,159,37,34,47,196,27,28,248,80,158,37, 34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28, 248,80,158,40,34,193,249,80,158,41,38,27,248,80,158,43,36,196,28,248,80, 158,43,39,193,248,22,9,89,162,34,35,41,9,224,9,1,27,249,22,2,89, @@ -1905,479 +1888,499 @@ 158,37,43,193,11,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80, 158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46, 39,193,248,80,158,46,41,193,11,11,11,11,28,192,27,248,22,52,194,27,248, -22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,27,249,22, -209,20,15,159,44,35,49,249,22,2,80,158,46,44,248,22,216,27,20,15,159, -48,36,49,250,22,209,20,15,159,51,37,49,205,195,27,28,248,80,158,44,39, -194,248,22,9,89,162,34,35,41,9,224,10,2,27,249,22,2,89,162,34,35, -41,9,224,4,5,249,80,158,37,40,28,248,80,158,38,39,197,248,22,59,248, -80,158,39,41,198,11,194,248,80,158,39,41,196,28,248,22,57,193,9,248,80, -158,37,45,193,11,28,192,249,80,158,45,46,204,27,252,22,61,205,200,204,203, -202,27,20,15,159,47,38,49,91,159,35,11,90,161,35,34,11,83,160,40,34, -35,11,247,248,22,9,89,162,34,35,42,9,226,15,2,3,1,250,22,31,89, -162,34,34,38,9,225,6,3,7,90,161,35,35,10,247,22,252,185,2,248,22, -252,185,2,89,162,34,35,38,9,224,3,1,248,193,89,162,34,34,38,9,224, -2,3,28,248,22,252,182,2,193,248,22,252,187,2,193,249,80,158,37,47,21, -96,2,39,94,94,94,63,116,109,112,106,2,41,2,42,2,41,9,98,2,39, -94,94,94,2,40,2,41,95,66,118,97,108,117,101,115,107,94,1,23,109,97, -107,101,45,114,101,110,97,109,101,45,116,114,97,110,115,102,111,114,109,101,114, -108,94,72,113,117,111,116,101,45,115,121,110,116,97,120,109,2,106,2,41,2, -41,9,2,43,2,44,2,41,20,15,159,37,39,49,89,162,8,36,34,8,26, -9,225,6,5,4,27,250,22,209,20,15,159,40,40,49,250,22,209,20,15,159, -43,41,49,251,22,60,20,15,159,47,42,49,250,22,2,80,159,50,8,45,35, -248,22,78,23,15,248,22,87,23,15,20,15,159,47,45,49,250,22,209,20,15, -159,50,46,49,252,22,62,20,15,159,55,47,49,250,22,2,80,159,58,8,47, -35,248,22,52,23,23,248,22,78,23,23,20,15,159,55,59,49,248,22,90,23, -20,248,22,89,23,20,20,15,159,50,8,26,49,20,15,159,43,8,27,49,197, -89,162,8,36,34,35,9,223,0,192,89,162,34,34,36,9,223,3,248,22,252, -185,2,208,248,80,158,44,48,20,15,159,44,8,28,49,250,22,252,39,2,11, -2,45,196,34,20,98,159,37,16,15,2,46,2,48,2,50,2,52,2,54,2, -56,2,58,2,60,2,62,2,64,30,110,2,33,2,8,0,30,111,2,6,71, -115,116,120,45,114,111,116,97,116,101,42,112,13,2,66,2,68,30,113,2,33, -76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105,108,114,3,16,29, -18,98,2,70,8,28,38,37,36,16,4,8,27,11,2,72,3,1,7,101,110, -118,51,49,54,56,115,18,100,2,70,8,31,38,37,36,8,27,16,12,8,30, -11,3,1,4,103,51,49,50,116,3,1,4,103,51,49,51,117,3,1,4,103, -51,49,52,118,3,1,4,103,51,49,53,119,3,1,4,103,51,49,54,120,3, -1,7,101,110,118,51,49,56,49,121,2,121,2,121,2,121,2,121,16,12,8, -29,11,2,91,2,40,2,42,2,43,2,44,3,1,7,101,110,118,51,49,56, -50,122,2,122,2,122,2,122,2,122,18,16,2,95,2,74,8,32,93,8,252, -19,10,95,9,8,252,19,10,2,38,18,158,2,84,8,31,18,16,2,95,2, -74,8,33,93,8,252,29,10,95,9,8,252,29,10,2,38,18,16,2,99,2, -41,8,38,93,8,252,29,10,16,6,8,37,11,2,75,2,76,3,1,7,101, -110,118,51,50,48,55,123,2,123,16,4,8,36,11,2,78,3,1,7,101,110, -118,51,50,48,56,124,16,4,8,35,11,2,80,3,1,7,101,110,118,51,50, -48,57,125,16,4,8,34,11,2,82,3,1,7,101,110,118,51,50,49,49,126, -95,9,8,252,29,10,2,38,18,102,2,84,8,41,38,37,36,8,27,8,30, -8,29,16,4,8,40,11,3,1,4,103,51,49,57,127,3,1,7,101,110,118, -51,50,48,50,128,16,4,8,39,11,2,106,3,1,7,101,110,118,51,50,48, -51,129,18,158,2,93,8,41,18,158,2,39,8,41,18,158,2,93,8,41,18, -158,2,93,8,41,18,158,9,8,41,18,158,2,93,8,41,18,158,2,39,8, -41,18,158,2,93,8,41,18,158,2,93,8,41,18,158,2,107,8,41,18,158, -2,93,8,41,18,158,2,108,8,41,18,158,2,93,8,41,18,158,2,109,8, -41,18,158,2,93,8,41,18,158,2,93,8,41,18,158,2,93,8,41,18,158, -2,93,8,41,18,158,9,8,41,18,158,2,93,8,41,18,158,2,93,8,41, -18,16,2,158,94,16,2,158,94,16,2,98,2,106,8,45,93,8,252,17,10, -16,4,8,44,11,3,1,8,119,115,116,109,112,51,49,55,130,3,1,7,101, -110,118,51,49,57,52,131,16,4,8,43,11,3,1,4,103,51,49,56,132,3, -1,7,101,110,118,51,50,50,52,133,16,4,8,42,11,65,95,101,108,115,101, -134,3,1,7,101,110,118,51,50,50,53,135,9,16,2,158,2,41,8,45,9, -8,45,9,16,2,158,2,41,8,45,9,8,45,95,9,8,252,17,10,2,33, -11,16,5,93,2,15,87,94,83,159,34,93,80,159,34,58,35,89,162,8,37, -35,46,9,223,0,250,22,209,20,15,159,37,40,46,249,22,60,250,22,209,20, -15,159,42,41,46,248,22,60,248,22,52,203,20,15,159,42,42,46,248,22,78, -199,20,15,159,37,43,46,89,162,34,35,50,9,223,0,27,249,22,209,20,15, -159,37,34,46,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158, -39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41, -38,27,248,80,158,43,36,196,28,248,80,158,43,39,193,248,22,9,89,162,34, -35,41,9,224,9,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80, -158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199, -27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80, -158,43,36,195,248,80,158,43,41,248,80,158,44,37,196,11,11,194,248,80,158, -39,42,196,28,248,22,57,193,21,94,9,9,248,80,158,37,43,193,11,27,248, -80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35,248,80,158,45, -36,195,27,248,80,158,46,37,196,28,248,80,158,46,39,193,248,80,158,46,42, -193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87, -196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,44,202,27,251,22,61, -202,199,201,200,27,20,15,159,45,35,46,91,159,35,11,90,161,35,34,11,83, -160,40,34,35,11,247,248,22,9,89,162,34,35,42,9,226,13,2,3,1,250, -22,31,89,162,34,34,38,9,225,6,3,7,90,161,35,35,10,247,22,252,185, -2,248,22,252,185,2,89,162,34,35,38,9,224,3,1,248,193,89,162,34,34, -38,9,224,2,3,28,248,22,252,182,2,193,248,22,252,187,2,193,249,80,158, -37,45,21,97,2,13,94,94,93,2,40,2,42,2,41,2,43,2,44,2,41, -20,15,159,37,36,46,89,162,8,36,34,52,9,225,6,5,4,27,250,22,209, -20,15,159,40,37,46,250,22,209,20,15,159,43,38,46,251,22,62,20,15,159, -47,39,46,250,22,2,80,159,50,58,35,248,22,52,23,15,248,22,87,23,15, -248,22,88,204,248,22,78,204,20,15,159,43,44,46,197,89,162,8,36,34,35, -9,223,0,192,89,162,34,34,36,9,223,3,248,22,252,185,2,208,250,22,252, -39,2,11,2,45,196,34,20,98,159,35,16,12,2,46,2,48,2,50,2,52, -2,54,2,56,2,58,2,62,2,60,2,64,2,66,2,68,16,11,18,98,2, -70,8,47,38,37,36,16,4,8,46,11,2,72,3,1,7,101,110,118,51,50, -50,57,136,18,16,2,95,2,74,8,48,93,8,252,53,10,95,9,8,252,53, -10,2,38,18,16,2,99,2,41,8,53,93,8,252,53,10,16,6,8,52,11, -2,75,2,76,3,1,7,101,110,118,51,50,53,52,137,2,137,16,4,8,51, -11,2,78,3,1,7,101,110,118,51,50,53,53,138,16,4,8,50,11,2,80, -3,1,7,101,110,118,51,50,53,54,139,16,4,8,49,11,2,82,3,1,7, -101,110,118,51,50,53,56,140,95,9,8,252,53,10,2,38,18,100,2,84,8, -56,38,37,36,8,46,16,12,8,55,11,3,1,4,103,51,50,48,141,3,1, -4,103,51,50,49,142,3,1,4,103,51,50,50,143,3,1,4,103,51,50,51, -144,3,1,4,103,51,50,52,145,3,1,7,101,110,118,51,50,52,49,146,2, -146,2,146,2,146,2,146,16,12,8,54,11,2,91,2,40,2,42,2,43,2, -44,3,1,7,101,110,118,51,50,52,50,147,2,147,2,147,2,147,2,147,18, -158,2,93,8,56,18,158,2,13,8,56,18,158,2,93,8,56,18,158,2,93, -8,56,18,158,2,93,8,56,18,158,2,93,8,56,18,158,2,93,8,56,11, -16,5,93,2,17,87,94,83,159,34,93,80,159,34,8,42,35,89,162,8,37, -35,48,9,223,0,250,22,209,20,15,159,37,50,48,249,22,60,250,22,209,20, -15,159,42,51,48,249,22,56,248,22,52,204,248,22,78,204,20,15,159,42,52, -48,250,22,209,20,15,159,42,53,48,250,22,60,20,15,159,45,54,48,20,15, -159,45,55,48,248,22,87,205,20,15,159,42,56,48,20,15,159,37,57,48,89, -162,34,35,52,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248, -80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80, -158,40,38,27,248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,59,248, -80,158,43,40,194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248, -22,9,89,162,34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,49,9, -224,4,5,249,80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,38,27, -248,80,158,41,36,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158, -43,36,195,27,248,80,158,44,37,196,248,22,59,250,22,209,199,196,199,11,27, -248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158, -43,36,195,248,80,158,43,42,248,80,158,44,37,196,11,11,194,248,80,158,39, -40,196,28,248,22,57,193,21,94,9,9,248,80,158,37,43,193,11,11,11,28, +22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158, +43,44,202,27,251,22,61,201,200,199,202,250,80,158,47,45,89,162,34,34,45, +9,224,13,3,252,80,158,40,46,20,15,159,40,35,47,21,95,3,1,4,103, +53,49,51,41,3,1,4,103,53,49,50,42,3,1,4,103,53,49,49,43,250, +22,2,80,159,43,52,35,248,22,88,201,248,22,52,201,248,22,78,198,248,22, +87,198,21,98,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115, +43,118,97,108,117,101,115,44,94,94,94,62,105,100,45,63,46,46,46,46,64, +101,120,112,114,47,2,46,9,65,98,111,100,121,49,48,64,98,111,100,121,49, +2,46,20,15,159,47,37,47,250,22,252,39,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,50,196,34,20,98,159,35,16,13,30,51,2,6,69,115, +116,120,45,112,97,105,114,63,52,11,30,53,2,6,67,99,111,110,115,47,35, +102,54,1,30,55,2,6,67,115,116,120,45,99,97,114,56,5,30,57,2,6, +67,115,116,120,45,99,100,114,58,6,30,59,2,6,69,97,112,112,101,110,100, +47,35,102,60,0,30,61,2,6,69,115,116,120,45,108,105,115,116,63,62,8, +30,63,2,6,73,115,116,120,45,99,104,101,99,107,47,101,115,99,64,7,30, +65,2,6,69,115,116,120,45,62,108,105,115,116,66,4,30,67,2,6,71,115, +116,120,45,110,117,108,108,47,35,102,68,9,30,69,2,6,70,115,116,120,45, +114,111,116,97,116,101,70,12,30,71,2,35,68,114,101,108,111,99,97,116,101, +72,1,30,73,2,37,1,20,99,97,116,99,104,45,101,108,108,105,112,115,105, +115,45,101,114,114,111,114,74,1,30,75,2,37,1,24,97,112,112,108,121,45, +112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,76,0,16, +4,18,98,64,104,101,114,101,77,40,98,38,10,34,11,97,159,2,35,9,11, +159,2,33,9,11,159,2,37,9,11,159,2,6,9,11,159,74,35,37,115,109, +97,108,108,45,115,99,104,101,109,101,78,9,11,16,14,2,9,2,2,2,25, +2,2,2,24,2,2,2,23,2,2,2,13,2,2,2,21,2,2,2,4,2, +2,98,37,10,35,11,97,159,2,35,9,11,159,2,33,9,11,159,2,37,9, +11,159,2,6,9,11,159,2,78,9,11,16,0,96,36,8,254,1,11,16,0, +16,4,35,11,63,115,116,120,79,3,1,7,101,110,118,51,48,52,57,80,18, +158,163,38,100,2,44,43,38,37,36,35,16,12,42,11,3,1,4,103,53,48, +52,81,3,1,4,103,53,48,53,82,3,1,4,103,53,48,54,83,3,1,4, +103,53,48,55,84,3,1,4,103,53,48,56,85,3,1,7,101,110,118,51,48, +54,50,86,2,86,2,86,2,86,2,86,16,12,41,11,61,95,87,2,45,2, +47,2,48,2,49,3,1,7,101,110,118,51,48,54,51,88,2,88,2,88,2, +88,2,88,158,2,41,43,158,9,43,158,2,42,43,2,43,43,43,18,158,95, +10,2,39,2,40,43,18,16,2,96,2,46,45,93,8,252,123,10,16,4,44, +11,61,114,89,3,1,7,101,110,118,51,48,55,53,90,95,9,8,252,123,10, +2,37,11,16,5,93,2,24,87,94,83,159,34,93,80,159,34,52,35,89,162, +35,35,41,9,223,0,251,80,158,38,46,20,15,159,38,36,47,21,94,3,1, +4,103,53,49,57,91,3,1,4,103,53,50,48,92,248,22,52,198,248,22,78, +198,89,162,34,35,50,9,223,0,27,249,22,209,20,15,159,37,34,47,196,27, +28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, +158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,27,248,80,158,43, +36,196,28,248,80,158,43,39,193,248,22,9,89,162,34,35,41,9,224,9,1, +27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40,28,248,80, +158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37, +200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80, +158,43,41,248,80,158,44,37,196,11,11,194,248,80,158,39,42,196,28,248,22, +57,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,43,37,196,28, +248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, +46,37,196,28,248,80,158,46,39,193,248,80,158,46,42,193,11,11,11,11,28, 192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197, -27,248,22,89,198,28,249,22,4,80,158,42,44,248,22,216,27,20,15,159,44, -34,48,250,22,209,20,15,159,47,35,48,202,195,27,249,22,209,20,15,159,43, -36,48,249,22,2,32,148,89,162,8,36,35,38,9,222,248,22,43,248,22,44, -248,22,210,195,248,22,216,27,20,15,159,47,37,48,250,22,209,20,15,159,50, -38,48,204,195,27,28,248,80,158,43,39,194,248,80,158,43,40,194,11,28,192, -249,80,158,44,45,203,27,252,22,61,206,200,205,202,203,27,20,15,159,46,39, -48,91,159,35,11,90,161,35,34,11,83,160,40,34,35,11,247,248,22,9,89, -162,34,35,42,9,226,14,2,3,1,250,22,31,89,162,34,34,38,9,225,6, -3,7,90,161,35,35,10,247,22,252,185,2,248,22,252,185,2,89,162,34,35, -38,9,224,3,1,248,193,89,162,34,34,38,9,224,2,3,28,248,22,252,182, -2,193,248,22,252,187,2,193,249,80,158,37,46,21,95,66,108,97,109,98,100, -97,149,93,61,120,150,100,73,115,121,110,116,97,120,45,99,97,115,101,42,42, -151,2,91,10,2,150,94,61,107,152,2,41,79,109,111,100,117,108,101,45,105, -100,101,110,116,105,102,105,101,114,61,63,153,94,158,65,100,117,109,109,121,154, -67,112,97,116,116,101,114,110,155,95,2,26,2,150,68,116,101,109,112,108,97, -116,101,156,2,41,20,15,159,37,40,48,89,162,8,36,34,8,28,9,225,6, -5,4,27,250,22,209,20,15,159,40,41,48,250,22,209,20,15,159,43,42,48, -250,22,60,20,15,159,46,43,48,20,15,159,46,44,48,250,22,209,20,15,159, -49,45,48,254,22,62,20,15,159,56,46,48,248,22,52,23,21,20,15,159,56, -47,48,20,15,159,56,48,48,248,22,87,23,21,20,15,159,56,49,48,251,22, -2,80,159,8,26,8,42,35,248,22,78,23,25,248,22,89,23,25,248,22,90, -23,25,20,15,159,49,58,48,20,15,159,43,59,48,197,89,162,8,36,34,35, -9,223,0,192,89,162,34,34,36,9,223,3,248,22,252,185,2,208,248,80,158, -43,47,20,15,159,43,8,26,48,250,22,252,39,2,11,2,45,202,250,22,252, -39,2,11,2,45,197,34,20,98,159,35,16,14,2,46,2,48,2,50,2,52, -2,54,2,56,2,60,2,58,2,62,2,111,30,157,2,6,2,7,2,2,66, -2,68,2,113,16,27,18,16,2,95,2,74,8,57,93,8,252,75,10,95,9, -8,252,75,10,2,38,18,100,2,84,8,61,38,37,36,16,4,8,60,11,2, -150,3,1,7,101,110,118,51,50,54,55,158,16,12,8,59,11,3,1,4,103, -51,50,53,159,3,1,4,103,51,50,54,160,3,1,4,103,51,50,55,161,3, -1,4,103,51,50,56,162,3,1,4,103,51,50,57,163,3,1,7,101,110,118, -51,50,56,51,164,2,164,2,164,2,164,2,164,16,12,8,58,11,2,91,2, -152,67,107,101,121,119,111,114,100,165,2,155,2,156,3,1,7,101,110,118,51, -50,56,52,166,2,166,2,166,2,166,2,166,18,158,2,70,8,61,18,16,2, -95,2,74,8,62,93,8,252,78,10,95,9,8,252,78,10,2,38,18,158,2, -84,8,61,18,16,2,95,2,74,8,63,93,8,252,84,10,95,9,8,252,84, -10,2,38,18,16,2,99,2,41,8,68,93,8,252,84,10,16,6,8,67,11, -2,75,2,76,3,1,7,101,110,118,51,51,48,55,167,2,167,16,4,8,66, -11,2,78,3,1,7,101,110,118,51,51,48,56,168,16,4,8,65,11,2,80, -3,1,7,101,110,118,51,51,48,57,169,16,4,8,64,11,2,82,3,1,7, -101,110,118,51,51,49,49,170,95,9,8,252,84,10,2,38,18,102,2,84,8, -71,38,37,36,8,60,8,59,8,58,16,4,8,70,11,3,1,4,103,51,51, -50,171,3,1,7,101,110,118,51,51,48,50,172,16,4,8,69,11,2,154,3, -1,7,101,110,118,51,51,48,51,173,18,158,2,93,8,71,18,158,2,149,8, -71,18,158,93,158,2,150,8,71,8,71,18,158,2,93,8,71,18,158,2,151, -8,71,18,158,10,8,71,18,158,2,150,8,71,18,158,2,153,8,71,18,158, -2,93,8,71,18,158,2,93,8,71,18,158,2,93,8,71,18,158,2,93,8, -71,18,158,2,26,8,71,18,158,2,150,8,71,18,158,2,93,8,71,18,158, -2,93,8,71,18,158,2,93,8,71,18,158,2,93,8,71,18,16,2,158,94, -16,2,98,2,154,8,75,93,8,252,76,10,16,4,8,74,11,3,1,8,119, -115,116,109,112,51,51,48,174,3,1,7,101,110,118,51,50,57,54,175,16,4, -8,73,11,3,1,4,103,51,51,49,176,3,1,7,101,110,118,51,51,50,48, -177,16,4,8,72,11,2,134,3,1,7,101,110,118,51,51,50,49,178,9,16, -2,158,2,41,8,75,9,8,75,95,9,8,252,76,10,2,33,11,16,5,93, -2,22,87,94,83,159,34,93,80,159,34,8,38,35,89,162,8,37,35,48,9, -223,0,250,22,209,20,15,159,37,49,47,249,22,60,248,22,52,199,250,22,209, -20,15,159,42,50,47,250,22,60,20,15,159,45,51,47,20,15,159,45,52,47, -248,22,78,205,20,15,159,42,53,47,20,15,159,37,54,47,89,162,34,35,48, -9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36, -197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,38,27, -248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,59,248,80,158,43,40, -194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248,22,9,89,162, -34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249, -80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36, -199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248, -80,158,43,36,195,248,80,158,43,42,248,80,158,44,37,196,11,11,194,248,80, -158,39,40,196,28,248,22,57,193,21,93,9,248,80,158,37,43,193,11,11,11, -28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,88, -197,28,249,22,4,80,158,41,44,248,22,216,27,20,15,159,43,34,47,250,22, -209,20,15,159,46,35,47,201,195,249,80,158,41,45,200,27,251,22,61,202,201, -199,200,27,20,15,159,43,36,47,91,159,35,11,90,161,35,34,11,83,160,40, -34,35,11,247,248,22,9,89,162,34,35,42,9,226,11,2,3,1,250,22,31, -89,162,34,34,38,9,225,6,3,7,90,161,35,35,10,247,22,252,185,2,248, -22,252,185,2,89,162,34,35,38,9,224,3,1,248,193,89,162,34,34,38,9, -224,2,3,28,248,22,252,182,2,193,248,22,252,187,2,193,249,80,158,37,46, -21,94,1,21,109,97,107,101,45,115,101,116,33,45,116,114,97,110,115,102,111, -114,109,101,114,179,95,2,149,93,2,150,100,2,151,2,91,10,2,150,94,2, -152,2,41,2,153,94,2,155,95,2,26,2,150,2,156,2,41,20,15,159,37, -37,47,89,162,8,36,34,8,32,9,225,6,5,4,27,250,22,209,20,15,159, -40,38,47,250,22,209,20,15,159,43,39,47,249,22,60,20,15,159,45,40,47, -250,22,209,20,15,159,48,41,47,250,22,60,20,15,159,51,42,47,20,15,159, -51,43,47,250,22,209,20,15,159,54,44,47,254,22,62,20,15,159,8,27,45, -47,248,22,52,23,26,20,15,159,8,27,46,47,20,15,159,8,27,47,47,248, -22,78,23,26,20,15,159,8,27,48,47,250,22,2,80,159,8,30,8,38,35, -248,22,88,23,29,248,22,87,23,29,20,15,159,54,55,47,20,15,159,48,56, -47,20,15,159,43,57,47,197,89,162,8,36,34,35,9,223,0,192,89,162,34, -34,36,9,223,3,248,22,252,185,2,208,250,22,252,39,2,11,2,45,201,250, -22,252,39,2,11,2,45,197,34,20,98,159,35,16,13,2,46,2,48,2,50, -2,52,2,54,2,56,2,60,2,58,2,62,2,111,2,157,2,66,2,68,16, -24,18,16,2,95,2,74,8,76,93,8,252,107,10,95,9,8,252,107,10,2, -38,18,100,2,84,8,80,38,37,36,16,4,8,79,11,2,150,3,1,7,101, -110,118,51,51,50,53,180,16,10,8,78,11,3,1,4,103,51,51,51,181,3, -1,4,103,51,51,52,182,3,1,4,103,51,51,53,183,3,1,4,103,51,51, -54,184,3,1,7,101,110,118,51,51,51,56,185,2,185,2,185,2,185,16,10, -8,77,11,2,91,2,152,2,155,2,156,3,1,7,101,110,118,51,51,51,57, -186,2,186,2,186,2,186,18,16,2,95,2,74,8,81,93,8,252,109,10,95, -9,8,252,109,10,2,38,18,16,2,99,2,41,8,86,93,8,252,109,10,16, -6,8,85,11,2,75,2,76,3,1,7,101,110,118,51,51,52,57,187,2,187, -16,4,8,84,11,2,78,3,1,7,101,110,118,51,51,53,48,188,16,4,8, -83,11,2,80,3,1,7,101,110,118,51,51,53,49,189,16,4,8,82,11,2, -82,3,1,7,101,110,118,51,51,53,51,190,95,9,8,252,109,10,2,38,18, -158,2,84,8,80,18,158,2,93,8,80,18,158,2,179,8,80,18,158,2,93, -8,80,18,158,2,149,8,80,18,158,93,16,2,158,2,150,8,80,9,8,80, -18,158,2,93,8,80,18,158,2,151,8,80,18,158,10,8,80,18,158,2,150, -8,80,18,158,2,153,8,80,18,158,2,93,8,80,18,158,2,93,8,80,18, -158,2,26,8,80,18,158,2,150,8,80,18,158,2,93,8,80,18,158,2,93, -8,80,18,158,2,93,8,80,18,158,2,93,8,80,18,158,2,93,8,80,11, -93,83,159,34,93,80,159,34,34,35,89,162,34,35,37,2,4,223,0,248,22, -9,89,162,8,36,35,40,9,224,1,2,27,247,22,110,87,94,249,22,3,89, -162,8,36,35,45,9,226,4,3,5,2,87,94,28,248,80,158,38,35,197,12, -250,22,252,40,2,2,4,6,19,19,108,105,115,116,32,111,102,32,105,100,101, -110,116,105,102,105,101,114,115,191,197,27,250,22,116,196,248,22,210,201,9,87, -94,28,249,22,5,89,162,8,36,35,38,9,223,7,249,22,221,195,194,194,248, -195,198,12,250,22,115,196,248,22,210,201,249,22,51,202,197,195,11,98,68,35, -37,107,101,114,110,101,108,192,2,71,2,6,2,38,2,33,2,36,98,2,192, -2,71,2,6,2,38,2,33,2,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 8095); +27,248,22,89,198,249,80,158,43,44,202,27,251,22,61,201,200,199,202,250,80, +158,47,45,89,162,34,34,45,9,224,13,3,252,80,158,40,46,20,15,159,40, +35,47,21,95,3,1,4,103,53,50,51,93,3,1,4,103,53,50,50,94,3, +1,4,103,53,50,49,95,250,22,2,80,159,43,52,35,248,22,88,201,248,22, +52,201,248,22,78,198,248,22,87,198,21,98,2,44,94,94,93,2,45,2,47, +2,46,9,2,48,2,49,2,46,20,15,159,47,37,47,250,22,252,39,2,11, +2,50,196,34,20,98,159,35,16,13,2,51,2,53,2,55,2,57,2,59,2, +61,2,63,2,67,2,65,2,69,2,71,2,73,2,75,16,4,18,98,2,77, +47,38,37,36,16,4,46,11,2,79,3,1,7,101,110,118,51,48,56,48,96, +18,158,163,38,100,2,44,50,38,37,36,46,16,12,49,11,3,1,4,103,53, +49,52,97,3,1,4,103,53,49,53,98,3,1,4,103,53,49,54,99,3,1, +4,103,53,49,55,100,3,1,4,103,53,49,56,101,3,1,7,101,110,118,51, +48,57,50,102,2,102,2,102,2,102,2,102,16,12,48,11,2,87,2,45,2, +47,2,48,2,49,3,1,7,101,110,118,51,48,57,51,103,2,103,2,103,2, +103,2,103,158,2,93,50,158,9,50,158,2,94,50,2,95,50,50,18,158,95, +10,93,2,91,2,92,50,18,16,2,96,2,46,52,93,8,252,143,10,16,4, +51,11,2,89,3,1,7,101,110,118,51,49,48,53,104,95,9,8,252,143,10, +2,37,11,16,5,93,2,9,87,96,83,159,34,93,80,159,34,8,29,35,89, +162,35,35,43,9,223,0,251,80,158,38,49,20,15,159,38,39,51,21,94,3, +1,4,103,53,51,54,105,3,1,4,103,53,51,53,106,248,22,52,198,249,22, +2,80,159,40,8,28,35,248,22,78,200,83,159,34,93,80,159,34,8,28,35, +89,162,35,35,40,9,223,0,250,80,158,37,49,20,15,159,37,40,51,21,93, +3,1,4,103,53,51,52,107,248,22,52,197,83,159,34,93,80,159,34,8,27, +35,89,162,35,35,41,9,223,0,251,80,158,38,49,20,15,159,38,38,51,21, +94,3,1,4,103,53,51,51,108,3,1,4,103,53,51,50,109,248,22,52,198, +248,22,78,198,89,162,34,35,53,9,223,0,27,249,22,209,20,15,159,37,34, +51,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196, +27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,27,248, +80,158,43,36,196,28,248,80,158,43,39,193,248,22,9,89,162,34,35,41,9, +224,9,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40, +28,248,80,158,38,34,197,249,80,158,39,38,27,248,80,158,41,36,200,28,248, +80,158,41,39,193,248,22,59,248,80,158,42,41,194,11,27,248,80,158,41,37, +200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80, +158,43,42,248,80,158,44,37,196,11,11,194,248,80,158,39,41,196,28,248,22, +57,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,43,37,196,28, +248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, +46,37,196,28,248,80,158,46,39,193,248,80,158,46,41,193,11,11,11,11,28, +192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197, +27,248,22,89,198,27,249,22,209,20,15,159,44,35,51,249,22,2,80,158,46, +44,248,22,216,249,80,158,49,45,20,15,159,49,36,51,203,27,28,248,80,158, +44,39,194,248,22,9,89,162,34,35,41,9,224,10,2,27,249,22,2,89,162, +34,35,41,9,224,4,5,249,80,158,37,40,28,248,80,158,38,39,197,248,22, +59,248,80,158,39,41,198,11,194,248,80,158,39,41,196,28,248,22,57,193,9, +248,80,158,37,46,193,11,28,192,249,80,158,45,47,204,27,252,22,61,203,205, +204,200,202,250,80,158,49,48,89,162,34,34,46,9,224,15,3,253,80,158,41, +49,20,15,159,41,37,51,21,96,3,1,4,103,53,52,48,110,3,1,4,103, +53,51,57,111,3,1,4,103,53,51,56,112,3,1,4,103,53,51,55,113,250, +22,2,80,159,44,8,27,35,248,22,90,202,248,22,87,202,250,22,2,80,159, +44,8,29,35,248,22,78,202,248,22,90,202,248,22,52,199,248,22,89,199,21, +96,2,44,94,94,94,63,116,109,112,114,2,46,2,47,2,46,9,98,2,44, +94,94,94,2,45,2,46,95,66,118,97,108,117,101,115,115,94,1,23,109,97, +107,101,45,114,101,110,97,109,101,45,116,114,97,110,115,102,111,114,109,101,114, +116,94,72,113,117,111,116,101,45,115,121,110,116,97,120,117,2,114,2,46,2, +46,9,2,48,2,49,2,46,20,15,159,49,41,51,248,80,158,44,50,20,15, +159,44,42,51,250,22,252,39,2,11,2,50,196,34,20,98,159,37,16,17,2, +51,2,53,2,55,2,57,2,59,2,61,2,63,2,65,2,67,2,69,30,118, +2,33,2,8,0,30,119,2,37,1,26,100,97,116,117,109,45,62,115,121,110, +116,97,120,45,111,98,106,101,99,116,47,115,104,97,112,101,120,2,30,121,2, +6,71,115,116,120,45,114,111,116,97,116,101,42,122,13,2,71,2,73,2,75, +30,123,2,33,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105,108, +124,3,16,9,18,98,2,77,54,38,37,36,16,4,53,11,2,79,3,1,7, +101,110,118,51,49,49,48,125,18,100,2,77,57,38,37,36,53,16,12,56,11, +3,1,4,103,53,50,52,126,3,1,4,103,53,50,53,127,3,1,4,103,53, +50,54,128,3,1,4,103,53,50,55,129,3,1,4,103,53,50,56,130,3,1, +7,101,110,118,51,49,50,51,131,2,131,2,131,2,131,2,131,16,12,55,11, +2,87,2,45,2,47,2,48,2,49,3,1,7,101,110,118,51,49,50,52,132, +2,132,2,132,2,132,2,132,18,16,2,158,64,100,101,115,116,133,57,58,18, +158,96,102,2,44,8,27,38,37,36,53,56,55,16,4,8,26,11,3,1,4, +103,53,51,49,134,3,1,7,101,110,118,51,49,52,52,135,16,4,59,11,2, +114,3,1,7,101,110,118,51,49,52,53,136,158,2,110,8,27,158,9,8,27, +158,162,10,2,44,2,111,9,2,112,2,113,8,27,8,27,18,158,95,10,2, +108,2,109,8,27,18,158,95,10,2,105,158,2,115,2,106,8,27,18,158,95, +10,2,116,94,2,117,2,107,8,27,18,16,2,96,2,46,8,29,93,8,252, +174,10,16,4,8,28,11,2,89,3,1,7,101,110,118,51,49,52,57,137,95, +9,8,252,174,10,2,37,18,16,2,158,94,158,94,98,2,114,8,33,93,8, +252,162,10,16,4,8,32,11,3,1,8,119,115,116,109,112,53,50,57,138,3, +1,7,101,110,118,51,49,51,54,139,16,4,8,31,11,3,1,4,103,53,51, +48,140,3,1,7,101,110,118,51,49,53,56,141,16,4,8,30,11,65,95,101, +108,115,101,142,3,1,7,101,110,118,51,49,53,57,143,158,2,46,8,33,8, +33,158,2,46,8,33,8,33,95,9,8,252,162,10,2,33,11,16,5,93,2, +23,87,94,83,159,34,93,80,159,34,52,35,89,162,35,35,41,9,223,0,251, +80,158,38,46,20,15,159,38,36,47,21,94,3,1,4,103,53,52,54,144,3, +1,4,103,53,52,55,145,248,22,52,198,248,22,78,198,89,162,34,35,50,9, +223,0,27,249,22,209,20,15,159,37,34,47,196,27,28,248,80,158,37,34,194, +249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80, +158,40,34,193,249,80,158,41,38,27,248,80,158,43,36,196,28,248,80,158,43, +39,193,248,22,9,89,162,34,35,41,9,224,9,1,27,249,22,2,89,162,34, +35,46,9,224,4,5,249,80,158,37,40,28,248,80,158,38,34,197,249,80,158, +39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34, +193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,41,248,80,158,44, +37,196,11,11,194,248,80,158,39,42,196,28,248,22,57,193,21,94,9,9,248, +80,158,37,43,193,11,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249, +80,158,44,35,248,80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158, +46,39,193,248,80,158,46,42,193,11,11,11,11,28,192,27,248,22,52,194,27, +248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80, +158,43,44,202,27,251,22,61,200,199,202,201,250,80,158,47,45,89,162,34,34, +45,9,224,13,3,252,80,158,40,46,20,15,159,40,35,47,21,95,3,1,4, +103,53,53,48,146,3,1,4,103,53,52,57,147,3,1,4,103,53,52,56,148, +250,22,2,80,159,43,52,35,248,22,87,201,248,22,88,201,248,22,52,198,248, +22,78,198,21,97,2,9,94,94,93,2,45,2,47,2,46,2,48,2,49,2, +46,20,15,159,47,37,47,250,22,252,39,2,11,2,50,196,34,20,98,159,35, +16,13,2,51,2,53,2,55,2,57,2,59,2,61,2,63,2,67,2,65,2, +69,2,71,2,73,2,75,16,4,18,98,2,77,8,35,38,37,36,16,4,8, +34,11,2,79,3,1,7,101,110,118,51,49,54,51,149,18,158,162,37,100,2, +9,8,38,38,37,36,8,34,16,12,8,37,11,3,1,4,103,53,52,49,150, +3,1,4,103,53,52,50,151,3,1,4,103,53,52,51,152,3,1,4,103,53, +52,52,153,3,1,4,103,53,52,53,154,3,1,7,101,110,118,51,49,55,53, +155,2,155,2,155,2,155,2,155,16,12,8,36,11,2,87,2,45,2,47,2, +48,2,49,3,1,7,101,110,118,51,49,55,54,156,2,156,2,156,2,156,2, +156,158,2,146,8,38,158,2,147,8,38,2,148,8,38,8,38,18,158,95,10, +93,2,144,2,145,8,38,18,16,2,96,2,46,8,40,93,8,252,199,10,16, +4,8,39,11,2,89,3,1,7,101,110,118,51,49,56,56,157,95,9,8,252, +199,10,2,37,11,16,5,93,2,25,87,94,83,159,34,93,80,159,34,58,35, +89,162,35,35,42,9,223,0,252,80,158,39,48,20,15,159,39,38,50,21,95, +3,1,4,103,53,54,48,158,3,1,4,103,53,53,57,159,3,1,4,103,53, +54,49,160,248,22,52,199,248,22,78,199,248,22,87,199,89,162,34,35,52,9, +223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197, +27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,38,27,248, +80,158,42,36,196,28,248,80,158,42,39,193,248,22,59,248,80,158,43,40,194, +11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248,22,9,89,162,34, +35,41,9,224,8,1,27,249,22,2,89,162,34,35,49,9,224,4,5,249,80, +158,37,41,28,248,80,158,38,34,197,249,80,158,39,38,27,248,80,158,41,36, +200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27,248, +80,158,44,37,196,248,22,59,250,22,209,199,196,199,11,27,248,80,158,41,37, +200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80, +158,43,42,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248,22, +57,193,21,94,9,9,248,80,158,37,43,193,11,11,11,28,192,27,248,22,52, +194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198, +28,249,22,4,80,158,42,44,248,22,216,249,80,158,45,45,20,15,159,45,34, +50,200,27,249,22,209,20,15,159,43,35,50,249,22,2,32,161,89,162,8,36, +35,38,9,222,248,22,43,248,22,44,248,22,210,195,248,22,216,249,80,158,48, +45,20,15,159,48,36,50,202,27,28,248,80,158,43,39,194,248,80,158,43,40, +194,11,28,192,249,80,158,44,46,203,27,252,22,61,203,205,206,200,202,250,80, +158,48,47,89,162,34,34,46,9,224,14,3,252,80,158,40,48,20,15,159,40, +37,50,21,95,3,1,4,103,53,54,52,162,3,1,4,103,53,54,51,163,3, +1,4,103,53,54,50,164,248,22,87,198,248,22,78,198,251,22,2,80,159,44, +58,35,248,22,90,202,248,22,52,202,248,22,89,202,21,95,66,108,97,109,98, +100,97,165,93,61,120,166,100,73,115,121,110,116,97,120,45,99,97,115,101,42, +42,167,2,87,10,2,166,94,61,107,168,2,46,79,109,111,100,117,108,101,45, +105,100,101,110,116,105,102,105,101,114,61,63,169,94,158,65,100,117,109,109,121, +170,67,112,97,116,116,101,114,110,171,95,2,31,2,166,68,116,101,109,112,108, +97,116,101,172,2,46,20,15,159,48,39,50,248,80,158,43,49,20,15,159,43, +40,50,250,22,252,39,2,11,2,50,202,250,22,252,39,2,11,2,50,197,34, +20,98,159,35,16,16,2,51,2,53,2,55,2,57,2,59,2,61,2,65,2, +63,2,67,2,121,30,173,2,6,2,7,2,2,119,2,71,2,73,2,75,2, +123,16,7,18,100,2,133,8,44,38,37,36,16,4,8,43,11,2,166,3,1, +7,101,110,118,51,49,57,51,174,16,12,8,42,11,3,1,4,103,53,53,49, +175,3,1,4,103,53,53,50,176,3,1,4,103,53,53,51,177,3,1,4,103, +53,53,52,178,3,1,4,103,53,53,53,179,3,1,7,101,110,118,51,50,48, +57,180,2,180,2,180,2,180,2,180,16,12,8,41,11,2,87,2,168,67,107, +101,121,119,111,114,100,181,2,171,2,172,3,1,7,101,110,118,51,50,49,48, +182,2,182,2,182,2,182,2,182,18,16,2,158,2,77,8,44,8,45,18,16, +2,158,2,133,8,44,8,46,18,158,95,102,2,165,8,49,38,37,36,8,43, +8,42,8,41,16,4,8,48,11,3,1,4,103,53,53,56,183,3,1,7,101, +110,118,51,50,50,56,184,16,4,8,47,11,2,170,3,1,7,101,110,118,51, +50,50,57,185,158,94,10,2,166,8,49,158,164,10,2,167,2,162,10,2,166, +2,163,2,169,2,164,8,49,8,49,18,158,95,10,158,2,158,2,159,95,2, +31,2,166,2,160,8,49,18,16,2,96,2,46,8,51,93,8,252,229,10,16, +4,8,50,11,2,89,3,1,7,101,110,118,51,50,51,51,186,95,9,8,252, +229,10,2,37,18,16,2,158,94,98,2,170,8,55,93,8,252,221,10,16,4, +8,54,11,3,1,8,119,115,116,109,112,53,53,54,187,3,1,7,101,110,118, +51,50,50,50,188,16,4,8,53,11,3,1,4,103,53,53,55,189,3,1,7, +101,110,118,51,50,51,56,190,16,4,8,52,11,2,142,3,1,7,101,110,118, +51,50,51,57,191,158,2,46,8,55,8,55,95,9,8,252,221,10,2,33,11, +16,5,93,2,13,87,94,83,159,34,93,80,159,34,54,35,89,162,35,35,41, +9,223,0,251,80,158,38,48,20,15,159,38,36,49,21,94,3,1,4,103,53, +55,48,192,3,1,4,103,53,54,57,193,248,22,52,198,248,22,78,198,89,162, +34,35,48,9,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80, +158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,249,80,158, +40,38,27,248,80,158,42,36,196,28,248,80,158,42,39,193,248,22,59,248,80, +158,43,40,194,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193,248,22, +9,89,162,34,35,41,9,224,8,1,27,249,22,2,89,162,34,35,46,9,224, +4,5,249,80,158,37,41,28,248,80,158,38,34,197,249,80,158,39,35,248,80, +158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158, +42,35,248,80,158,43,36,195,248,80,158,43,42,248,80,158,44,37,196,11,11, +194,248,80,158,39,40,196,28,248,22,57,193,21,93,9,248,80,158,37,43,193, +11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27, +248,22,88,197,28,249,22,4,80,158,41,44,248,22,216,249,80,158,44,45,20, +15,159,44,34,49,199,249,80,158,41,46,200,27,251,22,61,200,201,202,199,250, +80,158,45,47,89,162,34,34,45,9,224,11,3,252,80,158,40,48,20,15,159, +40,35,49,21,95,3,1,4,103,53,55,51,194,3,1,4,103,53,55,50,195, +3,1,4,103,53,55,49,196,248,22,87,198,248,22,78,198,250,22,2,80,159, +43,54,35,248,22,52,201,248,22,88,201,21,94,1,21,109,97,107,101,45,115, +101,116,33,45,116,114,97,110,115,102,111,114,109,101,114,197,95,2,165,93,2, +166,100,2,167,2,87,10,2,166,94,2,168,2,46,2,169,94,2,171,95,2, +31,2,166,2,172,2,46,20,15,159,45,37,49,250,22,252,39,2,11,2,50, +201,250,22,252,39,2,11,2,50,197,34,20,98,159,35,16,15,2,51,2,53, +2,55,2,57,2,59,2,61,2,65,2,63,2,67,2,121,2,173,2,119,2, +71,2,73,2,75,16,4,18,100,2,133,8,59,38,37,36,16,4,8,58,11, +2,166,3,1,7,101,110,118,51,50,52,51,198,16,10,8,57,11,3,1,4, +103,53,54,53,199,3,1,4,103,53,54,54,200,3,1,4,103,53,54,55,201, +3,1,4,103,53,54,56,202,3,1,7,101,110,118,51,50,53,54,203,2,203, +2,203,2,203,16,10,8,56,11,2,87,2,168,2,171,2,172,3,1,7,101, +110,118,51,50,53,55,204,2,204,2,204,2,204,18,158,95,10,2,197,95,2, +165,93,2,166,163,2,167,2,194,10,2,166,2,195,2,169,2,196,8,59,18, +158,95,10,2,192,95,2,31,2,166,2,193,8,59,18,16,2,96,2,46,8, +61,93,8,252,253,10,16,4,8,60,11,2,89,3,1,7,101,110,118,51,50, +54,55,205,95,9,8,252,253,10,2,37,11,93,83,159,34,93,80,159,34,34, +35,89,162,34,35,37,2,4,223,0,248,22,9,89,162,8,36,35,40,9,224, +1,2,27,247,22,110,87,94,249,22,3,89,162,8,36,35,45,9,226,4,3, +5,2,87,94,28,248,80,158,38,35,197,12,250,22,252,40,2,2,4,6,19, +19,108,105,115,116,32,111,102,32,105,100,101,110,116,105,102,105,101,114,115,206, +197,27,250,22,116,196,248,22,210,201,9,87,94,28,249,22,5,89,162,8,36, +35,38,9,223,7,249,22,221,195,194,194,248,195,198,12,250,22,115,196,248,22, +210,201,249,22,51,202,197,195,11,98,68,35,37,107,101,114,110,101,108,207,2, +78,2,6,2,37,2,33,2,35,98,2,207,2,78,2,6,2,37,2,33,2, +35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6301); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,108,252,10,13,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,112,252,186,12,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,67,35,37,113,113, 115,116,120,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34,16, 2,30,3,2,2,79,99,104,101,99,107,45,115,112,108,105,99,105,110,103,45, 108,105,115,116,4,254,1,30,5,65,35,37,115,116,120,6,69,115,116,120,45, -108,105,115,116,63,7,8,16,0,11,11,16,1,2,4,35,11,16,4,77,117, -110,115,121,110,116,97,120,45,115,112,108,105,99,105,110,103,8,75,113,117,97, -115,105,115,121,110,116,97,120,47,108,111,99,9,71,113,117,97,115,105,115,121, -110,116,97,120,10,68,117,110,115,121,110,116,97,120,11,16,4,11,11,11,11, -16,4,2,8,2,9,2,10,2,11,34,38,94,16,5,94,2,11,2,8,27, +108,105,115,116,63,7,8,16,0,11,11,16,1,2,4,35,11,16,4,68,117, +110,115,121,110,116,97,120,8,75,113,117,97,115,105,115,121,110,116,97,120,47, +108,111,99,9,71,113,117,97,115,105,115,121,110,116,97,120,10,77,117,110,115, +121,110,116,97,120,45,115,112,108,105,99,105,110,103,11,16,4,11,11,11,11, +16,4,2,8,2,9,2,10,2,11,34,38,94,16,5,94,2,8,2,11,27, 32,12,89,162,34,35,38,61,102,13,222,250,22,252,39,2,11,6,30,30,105, 108,108,101,103,97,108,32,111,117,116,115,105,100,101,32,111,102,32,113,117,97, 115,105,115,121,110,116,97,120,14,195,249,22,7,194,194,37,20,98,159,34,16, 0,16,0,11,16,5,94,2,10,2,9,87,96,83,159,34,93,80,159,34,8, -42,35,89,162,8,36,35,38,9,223,0,249,22,59,20,15,159,36,8,28,42, -195,83,159,34,93,80,159,34,8,40,35,89,162,34,40,58,64,108,111,111,112, -15,223,0,27,249,22,209,20,15,159,37,35,42,198,27,28,248,80,158,37,34, -194,28,27,248,80,158,38,35,195,28,248,80,158,38,36,193,28,249,22,223,194, -20,15,159,39,36,42,9,11,11,27,248,80,158,38,37,195,28,248,80,158,38, -34,193,249,80,158,39,38,248,80,158,40,35,195,248,80,158,40,39,248,80,158, -41,37,196,11,11,11,28,192,28,248,22,186,199,27,248,22,52,248,80,158,39, -40,21,93,62,117,113,16,249,203,194,248,22,59,249,22,59,197,198,253,80,159, -42,8,40,35,201,202,198,248,22,171,205,205,89,162,34,36,48,9,226,8,9, -14,11,249,195,250,22,209,199,249,22,59,248,80,158,45,35,200,203,197,199,27, -28,248,80,158,38,36,195,28,249,22,223,196,20,15,159,39,37,42,9,11,11, -28,192,251,22,252,39,2,11,6,25,25,109,105,115,117,115,101,32,119,105,116, -104,105,110,32,113,117,97,115,105,115,121,110,116,97,120,17,201,202,27,28,248, -80,158,39,34,196,249,80,158,40,38,27,248,80,158,42,35,199,28,248,80,158, -42,34,193,28,27,248,80,158,43,35,194,28,248,80,158,43,36,193,28,249,22, -223,194,20,15,159,44,38,42,9,11,11,27,248,80,158,43,37,194,28,248,80, -158,43,34,193,249,80,158,44,41,248,80,158,45,35,195,248,80,158,45,39,248, -80,158,46,37,196,11,11,11,27,248,80,158,42,37,199,250,22,209,201,195,201, -11,28,192,27,248,22,52,194,27,248,22,53,195,28,248,22,186,203,27,89,162, -34,36,8,34,71,114,101,115,116,45,100,111,110,101,45,107,18,226,7,13,10, -2,27,249,22,209,20,15,159,40,39,42,248,22,52,248,80,158,42,40,21,93, -63,117,113,115,19,27,249,22,209,20,15,159,41,40,42,250,22,209,199,63,99, -116,120,20,199,249,198,250,22,209,200,250,22,61,201,20,15,159,47,41,42,206, -200,249,22,51,27,250,22,61,200,202,201,27,20,15,159,45,42,42,250,22,209, -20,15,159,48,43,42,250,22,209,20,15,159,51,44,42,249,22,60,250,22,209, -20,15,159,56,45,42,249,22,60,248,22,80,23,15,20,15,159,58,46,42,20, -15,159,56,47,42,250,22,209,20,15,159,56,48,42,250,22,60,20,15,159,59, -49,42,248,22,78,23,16,250,22,209,20,15,159,8,28,50,42,249,22,60,20, -15,159,8,30,51,42,248,22,52,23,21,20,15,159,8,28,52,42,20,15,159, -56,53,42,20,15,159,51,54,42,195,203,253,80,159,47,8,40,35,206,23,15, -199,23,17,89,162,34,34,38,9,224,7,6,249,194,195,9,198,253,80,159,46, -8,40,35,205,206,199,248,22,171,23,17,89,162,34,34,50,9,230,12,14,13, -18,17,16,15,6,253,80,159,47,8,40,35,203,204,198,200,201,27,248,80,158, -49,35,201,89,162,34,36,46,9,225,11,8,0,249,196,250,22,209,198,249,22, -51,199,202,198,249,22,65,9,200,89,162,34,36,52,9,229,12,14,13,18,16, -15,6,27,27,250,22,209,248,80,158,46,35,199,249,22,59,248,80,158,48,35, -248,80,158,49,35,202,206,248,80,158,46,35,199,89,162,34,36,47,9,226,5, -3,10,0,249,197,250,22,209,199,249,22,51,199,203,199,249,22,65,197,201,253, -80,159,47,8,40,35,203,204,199,201,89,162,34,34,38,9,224,7,6,249,194, -195,9,198,27,28,248,80,158,40,36,197,28,249,22,223,198,20,15,159,41,55, -42,9,11,11,28,192,251,22,252,39,2,11,6,25,25,109,105,115,117,115,101, -32,119,105,116,104,105,110,32,113,117,97,115,105,115,121,110,116,97,120,21,203, -204,27,28,248,80,158,41,34,198,28,27,248,80,158,42,35,199,28,248,80,158, -42,36,193,28,249,22,223,194,20,15,159,43,56,42,9,11,11,27,248,80,158, -42,37,199,28,248,80,158,42,34,193,249,80,158,43,38,248,80,158,44,35,195, -248,80,158,44,39,248,80,158,45,37,196,11,11,11,28,192,253,80,159,46,8, -40,35,205,206,198,248,22,170,23,17,23,17,89,162,34,36,47,9,225,12,18, -15,249,195,250,22,209,197,249,22,59,248,80,158,44,35,200,202,197,198,28,248, -22,50,248,22,210,203,253,80,159,46,8,41,35,23,16,205,206,248,22,210,23, -16,23,17,89,162,34,36,43,9,224,18,15,249,195,250,22,209,197,199,197,197, -28,248,22,252,222,1,248,22,210,203,253,80,159,46,8,40,35,205,206,250,22, -209,23,18,248,22,252,229,1,248,22,210,23,20,23,18,23,16,23,17,89,162, -34,36,45,9,224,18,15,249,195,250,22,209,197,248,22,252,230,1,248,22,216, -201,197,197,247,203,83,159,34,93,80,159,34,8,41,35,89,162,8,64,40,50, -65,112,108,111,111,112,22,223,0,28,248,22,50,197,28,27,248,22,52,198,27, -28,248,80,158,37,36,194,27,249,22,223,196,20,15,159,39,57,42,28,192,192, -249,22,223,196,20,15,159,39,58,42,11,28,192,192,28,248,80,158,37,34,194, -27,248,80,158,38,35,195,28,248,80,158,38,36,193,249,22,223,194,20,15,159, -39,59,42,11,11,253,80,159,40,8,40,35,200,201,250,22,209,11,205,11,199, -203,204,253,80,159,40,8,41,35,199,200,201,248,22,53,203,89,162,34,34,48, -9,229,6,9,8,7,12,11,10,253,80,159,46,8,40,35,202,203,248,22,52, -199,201,199,89,162,34,36,46,9,224,8,6,249,195,249,22,51,250,22,209,248, -22,52,200,201,248,22,52,200,248,22,53,197,197,89,162,34,36,49,9,228,6, -9,8,7,12,10,253,80,159,45,8,40,35,201,202,248,22,52,199,200,89,162, -34,34,43,9,226,7,6,13,12,249,197,249,22,51,248,22,52,199,196,195,89, -162,34,36,48,9,226,7,6,13,12,249,197,249,22,51,250,22,209,248,22,52, -202,203,248,22,52,202,196,249,22,65,201,197,28,248,22,57,197,247,197,253,80, -159,40,8,40,35,200,201,202,199,203,204,27,89,162,34,37,46,62,113,113,23, -223,1,27,20,15,159,35,34,42,253,80,159,41,8,40,35,198,200,201,34,89, -162,8,36,34,42,9,226,10,9,8,6,250,22,209,195,248,199,198,196,89,162, -8,36,36,47,9,226,7,10,8,6,250,22,209,195,250,22,59,20,15,159,43, -8,26,42,203,248,201,203,196,249,22,7,89,162,34,35,46,9,224,3,2,27, -249,22,209,20,15,159,38,8,27,42,197,27,28,248,80,158,38,34,194,249,80, -158,39,41,248,80,158,40,35,196,27,248,80,158,41,37,197,28,248,80,158,41, -34,193,249,80,158,42,38,248,80,158,43,35,195,248,80,158,43,39,248,80,158, -44,37,196,11,11,28,192,27,248,22,52,194,27,248,22,53,195,250,199,201,195, -80,159,42,8,42,35,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121, -110,116,97,120,24,196,89,162,34,35,49,9,224,3,2,27,249,22,209,20,15, -159,38,8,29,42,197,27,28,248,80,158,38,34,194,249,80,158,39,41,248,80, -158,40,35,196,27,248,80,158,41,37,197,28,248,80,158,41,34,193,249,80,158, -42,41,248,80,158,43,35,195,27,248,80,158,44,37,196,28,248,80,158,44,34, -193,249,80,158,45,38,248,80,158,46,35,195,248,80,158,46,39,248,80,158,47, -37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80, -196,250,200,202,195,89,162,8,36,35,40,9,224,9,4,250,22,59,20,15,159, -38,8,30,42,195,197,250,22,252,39,2,11,2,24,196,37,20,98,159,37,16, -8,30,25,2,6,69,115,116,120,45,112,97,105,114,63,26,11,30,27,2,6, -67,115,116,120,45,99,97,114,28,5,30,29,2,6,71,105,100,101,110,116,105, -102,105,101,114,63,30,2,30,31,2,6,67,115,116,120,45,99,100,114,32,6, -30,33,2,6,69,97,112,112,101,110,100,47,35,102,34,0,30,35,2,6,71, -115,116,120,45,110,117,108,108,47,35,102,36,9,30,37,70,35,37,119,105,116, -104,45,115,116,120,38,1,20,103,101,110,101,114,97,116,101,45,116,101,109,112, -111,114,97,114,105,101,115,39,0,30,40,2,6,67,99,111,110,115,47,35,102, -41,1,16,31,18,98,64,104,101,114,101,42,40,98,38,10,34,11,94,159,2, -6,9,11,159,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101, -43,9,11,16,10,2,8,2,2,2,9,2,2,2,10,2,2,2,4,2,2, -2,11,2,2,98,37,10,35,11,94,159,2,6,9,11,159,2,43,9,11,16, -0,96,36,8,254,1,11,16,0,16,8,35,11,68,111,114,105,103,45,115,116, -120,44,64,98,111,100,121,45,68,109,107,45,102,105,110,97,108,46,3,1,7, -101,110,118,51,51,55,53,47,2,47,2,47,18,101,2,42,44,38,37,36,35, -16,4,43,11,68,104,101,114,101,45,115,116,120,48,3,1,7,101,110,118,51, -51,55,54,49,16,4,42,11,2,15,3,1,7,101,110,118,51,51,55,55,50, -16,10,41,11,63,115,116,120,51,65,100,101,112,116,104,52,66,115,97,109,101, -45,107,53,69,99,111,110,118,101,114,116,45,107,54,3,1,7,101,110,118,51, -51,55,56,55,2,55,2,55,2,55,18,158,2,11,44,18,158,2,11,44,18, -158,2,8,44,18,104,2,42,48,38,37,36,35,43,42,41,16,6,47,11,3, -1,4,103,51,51,57,56,3,1,4,103,51,52,48,57,3,1,7,101,110,118, -51,52,48,48,58,2,58,16,6,46,11,61,120,59,64,114,101,115,116,60,3, -1,7,101,110,118,51,52,48,49,61,2,61,16,6,45,11,66,114,101,115,116, -45,118,62,68,98,105,110,100,105,110,103,115,63,3,1,7,101,110,118,51,52, -48,55,64,2,64,18,158,2,42,48,18,108,63,46,46,46,65,53,38,37,36, -35,43,42,41,47,46,45,16,4,52,11,3,1,4,103,51,52,53,66,3,1, -7,101,110,118,51,52,49,54,67,16,4,51,11,64,116,101,109,112,68,3,1, -7,101,110,118,51,52,49,55,69,16,4,50,11,3,1,4,103,51,52,55,70, -3,1,7,101,110,118,51,52,50,56,71,16,4,49,11,2,20,3,1,7,101, -110,118,51,52,50,57,72,18,16,2,95,66,115,114,99,116,97,103,73,54,93, -8,252,168,10,95,9,8,252,168,10,69,35,37,115,116,120,99,97,115,101,74, -18,158,64,100,101,115,116,75,53,18,158,2,20,53,18,158,2,20,53,18,158, -2,65,53,18,158,2,20,53,18,158,2,20,53,18,158,2,4,53,18,158,2, -20,53,18,158,72,113,117,111,116,101,45,115,121,110,116,97,120,76,53,18,158, -2,20,53,18,158,2,20,53,18,158,2,20,53,18,158,2,8,44,18,158,2, -10,44,18,106,2,11,8,26,38,37,36,35,43,42,41,16,4,59,11,3,1, -4,103,51,51,55,77,3,1,7,101,110,118,51,52,53,52,78,16,4,58,11, -65,95,101,108,115,101,79,3,1,7,101,110,118,51,52,53,53,80,16,4,57, -11,2,22,3,1,7,101,110,118,51,52,53,57,81,16,4,56,11,61,108,82, -3,1,7,101,110,118,51,52,54,48,83,16,4,55,11,61,97,84,3,1,7, -101,110,118,51,52,54,49,85,18,158,2,10,8,26,18,158,2,8,8,26,18, -100,71,119,105,116,104,45,115,121,110,116,97,120,86,8,28,38,37,36,35,43, -16,4,8,27,11,2,63,3,1,7,101,110,118,51,52,55,51,87,18,99,2, -42,8,31,38,37,36,16,4,8,30,11,2,23,3,1,7,101,110,118,51,51, -55,52,88,16,4,8,29,11,2,44,3,1,7,101,110,118,51,52,55,52,89, -18,102,66,115,121,110,116,97,120,90,8,35,38,37,36,8,30,8,29,16,6, -8,34,11,3,1,4,103,51,52,56,91,3,1,4,103,51,52,57,92,3,1, -7,101,110,118,51,52,55,57,93,2,93,16,6,8,33,11,61,95,94,2,51, -3,1,7,101,110,118,51,52,56,48,95,2,95,16,4,8,32,11,2,45,3, -1,7,101,110,118,51,52,56,53,96,18,99,2,42,8,37,38,37,36,8,30, -16,4,8,36,11,2,44,3,1,7,101,110,118,51,52,56,54,97,18,102,70, -115,121,110,116,97,120,47,108,111,99,98,8,41,38,37,36,8,30,8,36,16, -8,8,40,11,3,1,4,103,51,53,48,99,3,1,4,103,51,53,49,100,3, -1,4,103,51,53,50,101,3,1,7,101,110,118,51,52,57,50,102,2,102,2, -102,16,8,8,39,11,2,94,63,108,111,99,103,2,51,3,1,7,101,110,118, -51,52,57,51,104,2,104,2,104,16,4,8,38,11,2,45,3,1,7,101,110, -118,51,53,48,48,105,11,93,83,159,34,93,80,159,34,34,35,89,162,8,36, -36,40,2,4,223,0,87,94,28,248,80,158,35,35,194,12,250,22,252,40,2, -2,8,6,18,18,112,114,111,112,101,114,32,115,121,110,116,97,120,32,108,105, -115,116,106,196,250,22,209,197,196,197,95,68,35,37,107,101,114,110,101,108,107, -2,43,2,6,95,2,107,2,43,2,6,0}; - EVAL_ONE_SIZED_STR((char *)expr, 3350); +32,35,89,162,8,36,35,38,9,223,0,249,22,59,20,15,159,36,51,43,195, +83,159,34,93,80,159,34,8,30,35,89,162,34,40,58,64,108,111,111,112,15, +223,0,27,249,22,209,20,15,159,37,35,43,198,27,28,248,80,158,37,34,194, +28,27,248,80,158,38,35,195,28,248,80,158,38,36,193,28,249,22,223,194,20, +15,159,39,36,43,9,11,11,27,248,80,158,38,37,195,28,248,80,158,38,34, +193,249,80,158,39,38,248,80,158,40,35,195,248,80,158,40,39,248,80,158,41, +37,196,11,11,11,28,192,28,248,22,186,199,27,248,22,52,248,80,158,39,40, +21,93,62,117,113,16,249,203,194,248,22,59,249,22,59,197,198,253,80,159,42, +8,30,35,201,202,198,248,22,171,205,205,89,162,34,36,48,9,226,8,9,14, +11,249,195,250,22,209,199,249,22,59,248,80,158,45,35,200,203,197,199,27,28, +248,80,158,38,36,195,28,249,22,223,196,20,15,159,39,37,43,9,11,11,28, +192,251,22,252,39,2,11,6,25,25,109,105,115,117,115,101,32,119,105,116,104, +105,110,32,113,117,97,115,105,115,121,110,116,97,120,17,201,202,27,28,248,80, +158,39,34,196,249,80,158,40,38,27,248,80,158,42,35,199,28,248,80,158,42, +34,193,28,27,248,80,158,43,35,194,28,248,80,158,43,36,193,28,249,22,223, +194,20,15,159,44,38,43,9,11,11,27,248,80,158,43,37,194,28,248,80,158, +43,34,193,249,80,158,44,41,248,80,158,45,35,195,248,80,158,45,39,248,80, +158,46,37,196,11,11,11,27,248,80,158,42,37,199,250,22,209,201,195,201,11, +28,192,27,248,22,52,194,27,248,22,53,195,28,248,22,186,203,27,89,162,34, +36,54,71,114,101,115,116,45,100,111,110,101,45,107,18,226,7,13,10,2,27, +249,22,209,20,15,159,40,39,43,248,22,52,248,80,158,42,40,21,93,63,117, +113,115,19,27,249,22,209,20,15,159,41,40,43,250,22,209,199,63,99,116,120, +20,199,249,198,250,22,209,200,250,22,61,201,20,15,159,47,41,43,206,200,249, +22,51,27,250,22,61,200,202,201,253,80,158,50,42,20,15,159,50,42,43,21, +96,3,1,4,103,53,56,54,21,3,1,4,103,53,56,53,22,3,1,4,103, +53,56,56,23,3,1,4,103,53,56,55,24,248,22,80,199,20,15,159,50,43, +43,248,22,78,199,248,22,52,199,203,253,80,159,47,8,30,35,206,23,15,199, +23,17,89,162,34,34,38,9,224,7,6,249,194,195,9,198,253,80,159,46,8, +30,35,205,206,199,248,22,171,23,17,89,162,34,34,50,9,230,12,14,13,18, +17,16,15,6,253,80,159,47,8,30,35,203,204,198,200,201,27,248,80,158,49, +35,201,89,162,34,36,46,9,225,11,8,0,249,196,250,22,209,198,249,22,51, +199,202,198,249,22,65,9,200,89,162,34,36,52,9,229,12,14,13,18,16,15, +6,27,27,250,22,209,248,80,158,46,35,199,249,22,59,248,80,158,48,35,248, +80,158,49,35,202,206,248,80,158,46,35,199,89,162,34,36,47,9,226,5,3, +10,0,249,197,250,22,209,199,249,22,51,199,203,199,249,22,65,197,201,253,80, +159,47,8,30,35,203,204,199,201,89,162,34,34,38,9,224,7,6,249,194,195, +9,198,27,28,248,80,158,40,36,197,28,249,22,223,198,20,15,159,41,44,43, +9,11,11,28,192,251,22,252,39,2,11,6,25,25,109,105,115,117,115,101,32, +119,105,116,104,105,110,32,113,117,97,115,105,115,121,110,116,97,120,25,203,204, +27,28,248,80,158,41,34,198,28,27,248,80,158,42,35,199,28,248,80,158,42, +36,193,28,249,22,223,194,20,15,159,43,45,43,9,11,11,27,248,80,158,42, +37,199,28,248,80,158,42,34,193,249,80,158,43,38,248,80,158,44,35,195,248, +80,158,44,39,248,80,158,45,37,196,11,11,11,28,192,253,80,159,46,8,30, +35,205,206,198,248,22,170,23,17,23,17,89,162,34,36,47,9,225,12,18,15, +249,195,250,22,209,197,249,22,59,248,80,158,44,35,200,202,197,198,28,248,22, +50,248,22,210,203,253,80,159,46,8,31,35,23,16,205,206,248,22,210,23,16, +23,17,89,162,34,36,43,9,224,18,15,249,195,250,22,209,197,199,197,197,28, +248,22,252,222,1,248,22,210,203,253,80,159,46,8,30,35,205,206,250,22,209, +23,18,248,22,252,229,1,248,22,210,23,20,23,18,23,16,23,17,89,162,34, +36,45,9,224,18,15,249,195,250,22,209,197,248,22,252,230,1,248,22,216,201, +197,197,247,203,83,159,34,93,80,159,34,8,31,35,89,162,8,64,40,50,65, +112,108,111,111,112,26,223,0,28,248,22,50,197,28,27,248,22,52,198,27,28, +248,80,158,37,36,194,27,249,22,223,196,20,15,159,39,46,43,28,192,192,249, +22,223,196,20,15,159,39,47,43,11,28,192,192,28,248,80,158,37,34,194,27, +248,80,158,38,35,195,28,248,80,158,38,36,193,249,22,223,194,20,15,159,39, +48,43,11,11,253,80,159,40,8,30,35,200,201,250,22,209,11,205,11,199,203, +204,253,80,159,40,8,31,35,199,200,201,248,22,53,203,89,162,34,34,48,9, +229,6,9,8,7,12,11,10,253,80,159,46,8,30,35,202,203,248,22,52,199, +201,199,89,162,34,36,46,9,224,8,6,249,195,249,22,51,250,22,209,248,22, +52,200,201,248,22,52,200,248,22,53,197,197,89,162,34,36,49,9,228,6,9, +8,7,12,10,253,80,159,45,8,30,35,201,202,248,22,52,199,200,89,162,34, +34,43,9,226,7,6,13,12,249,197,249,22,51,248,22,52,199,196,195,89,162, +34,36,48,9,226,7,6,13,12,249,197,249,22,51,250,22,209,248,22,52,202, +203,248,22,52,202,196,249,22,65,201,197,28,248,22,57,197,247,197,253,80,159, +40,8,30,35,200,201,202,199,203,204,27,89,162,34,37,46,62,113,113,27,223, +1,27,20,15,159,35,34,43,253,80,159,41,8,30,35,198,200,201,34,89,162, +8,36,34,42,9,226,10,9,8,6,250,22,209,195,248,199,198,196,89,162,8, +36,36,47,9,226,7,10,8,6,250,22,209,195,250,22,59,20,15,159,43,49, +43,203,248,201,203,196,249,22,7,89,162,34,35,46,9,224,3,2,27,249,22, +209,20,15,159,38,50,43,197,27,28,248,80,158,38,34,194,249,80,158,39,41, +248,80,158,40,35,196,27,248,80,158,41,37,197,28,248,80,158,41,34,193,249, +80,158,42,38,248,80,158,43,35,195,248,80,158,43,39,248,80,158,44,37,196, +11,11,28,192,27,248,22,52,194,27,248,22,53,195,250,199,201,195,80,159,42, +8,32,35,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97, +120,28,196,89,162,34,35,49,9,224,3,2,27,249,22,209,20,15,159,38,52, +43,197,27,28,248,80,158,38,34,194,249,80,158,39,41,248,80,158,40,35,196, +27,248,80,158,41,37,197,28,248,80,158,41,34,193,249,80,158,42,41,248,80, +158,43,35,195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158, +45,38,248,80,158,46,35,195,248,80,158,46,39,248,80,158,47,37,196,11,11, +11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,250,200,202, +195,89,162,8,36,35,40,9,224,9,4,250,22,59,20,15,159,38,53,43,195, +197,250,22,252,39,2,11,2,28,196,37,20,98,159,37,16,9,30,29,2,6, +69,115,116,120,45,112,97,105,114,63,30,11,30,31,2,6,67,115,116,120,45, +99,97,114,32,5,30,33,2,6,71,105,100,101,110,116,105,102,105,101,114,63, +34,2,30,35,2,6,67,115,116,120,45,99,100,114,36,6,30,37,2,6,69, +97,112,112,101,110,100,47,35,102,38,0,30,39,2,6,71,115,116,120,45,110, +117,108,108,47,35,102,40,9,30,41,70,35,37,119,105,116,104,45,115,116,120, +42,1,20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105, +101,115,43,0,30,44,2,6,67,99,111,110,115,47,35,102,45,1,30,46,69, +35,37,115,116,120,99,97,115,101,47,1,24,97,112,112,108,121,45,112,97,116, +116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,48,0,16,20,18,98, +64,104,101,114,101,49,40,98,38,10,34,11,94,159,2,6,9,11,159,76,35, +37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,50,9,11,16,10,2, +8,2,2,2,9,2,2,2,4,2,2,2,10,2,2,2,11,2,2,98,37, +10,35,11,94,159,2,6,9,11,159,2,50,9,11,16,0,96,36,8,254,1, +11,16,0,16,8,35,11,68,111,114,105,103,45,115,116,120,51,64,98,111,100, +121,52,68,109,107,45,102,105,110,97,108,53,3,1,7,101,110,118,51,50,56, +53,54,2,54,2,54,18,101,2,49,44,38,37,36,35,16,4,43,11,68,104, +101,114,101,45,115,116,120,55,3,1,7,101,110,118,51,50,56,54,56,16,4, +42,11,2,15,3,1,7,101,110,118,51,50,56,55,57,16,10,41,11,63,115, +116,120,58,65,100,101,112,116,104,59,66,115,97,109,101,45,107,60,69,99,111, +110,118,101,114,116,45,107,61,3,1,7,101,110,118,51,50,56,56,62,2,62, +2,62,2,62,18,16,2,158,2,8,44,45,18,45,18,16,2,158,2,11,44, +46,18,104,2,49,50,38,37,36,35,43,42,41,16,6,49,11,3,1,4,103, +53,55,54,63,3,1,4,103,53,55,55,64,3,1,7,101,110,118,51,51,49, +48,65,2,65,16,6,48,11,61,120,66,64,114,101,115,116,67,3,1,7,101, +110,118,51,51,49,49,68,2,68,16,6,47,11,66,114,101,115,116,45,118,69, +68,98,105,110,100,105,110,103,115,70,3,1,7,101,110,118,51,51,49,55,71, +2,71,18,16,2,158,2,49,50,51,18,108,63,46,46,46,72,56,38,37,36, +35,43,42,41,49,48,47,16,4,55,11,3,1,4,103,53,56,50,73,3,1, +7,101,110,118,51,51,50,54,74,16,4,54,11,64,116,101,109,112,75,3,1, +7,101,110,118,51,51,50,55,76,16,4,53,11,3,1,4,103,53,56,52,77, +3,1,7,101,110,118,51,51,51,56,78,16,4,52,11,2,20,3,1,7,101, +110,118,51,51,51,57,79,18,158,95,10,94,2,21,2,22,95,2,4,2,23, +94,72,113,117,111,116,101,45,115,121,110,116,97,120,80,2,24,56,18,16,2, +158,2,72,56,57,18,46,18,16,2,158,2,10,44,58,18,106,2,8,8,30, +38,37,36,35,43,42,41,16,4,8,29,11,3,1,4,103,53,55,52,81,3, +1,7,101,110,118,51,51,54,52,82,16,4,8,28,11,65,95,101,108,115,101, +83,3,1,7,101,110,118,51,51,54,53,84,16,4,8,27,11,2,26,3,1, +7,101,110,118,51,51,54,57,85,16,4,8,26,11,61,108,86,3,1,7,101, +110,118,51,51,55,48,87,16,4,59,11,61,97,88,3,1,7,101,110,118,51, +51,55,49,89,18,16,2,158,2,10,8,30,8,31,18,16,2,158,2,11,8, +30,8,32,18,100,71,119,105,116,104,45,115,121,110,116,97,120,90,8,34,38, +37,36,35,43,16,4,8,33,11,2,70,3,1,7,101,110,118,51,51,56,51, +91,18,99,2,49,8,37,38,37,36,16,4,8,36,11,2,27,3,1,7,101, +110,118,51,50,56,52,92,16,4,8,35,11,2,51,3,1,7,101,110,118,51, +51,56,52,93,18,102,66,115,121,110,116,97,120,94,8,41,38,37,36,8,36, +8,35,16,6,8,40,11,3,1,4,103,53,56,57,95,3,1,4,103,53,57, +48,96,3,1,7,101,110,118,51,51,56,57,97,2,97,16,6,8,39,11,61, +95,98,2,58,3,1,7,101,110,118,51,51,57,48,99,2,99,16,4,8,38, +11,2,52,3,1,7,101,110,118,51,51,57,53,100,18,99,2,49,8,43,38, +37,36,8,36,16,4,8,42,11,2,51,3,1,7,101,110,118,51,51,57,54, +101,18,102,70,115,121,110,116,97,120,47,108,111,99,102,8,47,38,37,36,8, +36,8,42,16,8,8,46,11,3,1,4,103,53,57,49,103,3,1,4,103,53, +57,50,104,3,1,4,103,53,57,51,105,3,1,7,101,110,118,51,52,48,50, +106,2,106,2,106,16,8,8,45,11,2,98,63,108,111,99,107,2,58,3,1, +7,101,110,118,51,52,48,51,108,2,108,2,108,16,4,8,44,11,2,52,3, +1,7,101,110,118,51,52,49,48,109,11,93,83,159,34,93,80,159,34,34,35, +89,162,8,36,36,40,2,4,223,0,87,94,28,248,80,158,35,35,194,12,250, +22,252,40,2,2,11,6,18,18,112,114,111,112,101,114,32,115,121,110,116,97, +120,32,108,105,115,116,110,196,250,22,209,197,196,197,95,68,35,37,107,101,114, +110,101,108,111,2,50,2,6,95,2,111,2,50,2,6,0}; + EVAL_ONE_SIZED_STR((char *)expr, 3270); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,178,252,199,26,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,204,252,159,24,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,35,37,100,101, 102,105,110,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, 16,0,16,0,11,11,16,0,34,11,16,4,77,100,101,102,105,110,101,45,102, -111,114,45,115,121,110,116,97,120,3,73,100,101,102,105,110,101,45,115,121,110, -116,97,120,4,76,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120, -5,66,100,101,102,105,110,101,6,16,4,11,11,11,11,16,4,2,3,2,4, -2,5,2,6,34,38,94,16,5,95,2,6,2,4,2,3,87,99,83,159,34, -93,80,159,34,8,62,35,89,162,34,37,59,68,116,114,121,45,110,101,120,116, +111,114,45,115,121,110,116,97,120,3,66,100,101,102,105,110,101,4,73,100,101, +102,105,110,101,45,115,121,110,116,97,120,5,76,98,101,103,105,110,45,102,111, +114,45,115,121,110,116,97,120,6,16,4,11,11,11,11,16,4,2,3,2,4, +2,5,2,6,34,38,94,16,5,95,2,4,2,5,2,3,87,99,83,159,34, +93,80,159,34,8,42,35,89,162,34,37,59,68,116,114,121,45,110,101,120,116, 7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36, 197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28,248,22,206,194, 193,198,249,80,158,41,35,248,80,158,42,36,196,27,248,80,158,43,37,197,250, 22,209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,80,196,28,248,80,158,39,43,194,250,22,252,39,2,11,27,249,22,209,20, -15,159,44,8,32,47,204,27,28,248,80,158,44,34,194,249,80,158,45,35,248, -80,158,46,36,196,27,248,80,158,47,37,197,28,248,80,158,47,34,193,249,80, -158,48,42,248,80,158,49,36,195,248,80,158,49,46,248,80,158,50,37,196,11, -11,28,192,27,248,22,52,194,27,248,22,53,195,6,46,46,98,97,100,32,115, -121,110,116,97,120,32,40,122,101,114,111,32,101,120,112,114,101,115,115,105,111, -110,115,32,97,102,116,101,114,32,105,100,101,110,116,105,102,105,101,114,41,8, -27,28,248,80,158,45,34,195,249,80,158,46,35,248,80,158,47,36,197,27,248, -80,158,48,37,198,28,248,80,158,48,34,193,249,80,158,49,35,248,80,158,50, -36,195,27,248,80,158,51,37,196,28,248,80,158,51,38,193,248,80,158,51,39, -193,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, -6,50,50,98,97,100,32,115,121,110,116,97,120,32,40,109,117,108,116,105,112, -108,101,32,101,120,112,114,101,115,115,105,111,110,115,32,97,102,116,101,114,32, -105,100,101,110,116,105,102,105,101,114,41,9,27,28,248,80,158,46,34,196,249, -80,158,47,35,248,80,158,48,36,198,27,248,80,158,49,37,199,28,248,80,158, -49,34,193,27,28,248,22,206,194,193,199,249,80,158,51,35,248,80,158,52,36, -196,27,248,80,158,53,37,197,250,22,209,198,195,198,11,11,28,192,27,248,22, -52,194,27,248,22,78,195,27,248,22,80,196,6,31,31,98,97,100,32,115,121, -110,116,97,120,32,40,105,108,108,101,103,97,108,32,117,115,101,32,111,102,32, -96,46,39,41,10,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110, -116,97,120,11,198,201,250,80,159,41,8,61,35,200,201,202,250,80,159,38,8, -61,35,197,198,199,83,159,34,93,80,159,34,8,61,35,89,162,34,37,49,2, -7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36, -197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28,248,22,206,194, -193,198,249,80,158,41,35,248,80,158,42,36,196,27,248,80,158,43,37,197,250, -22,209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,80,196,28,248,80,158,39,34,194,250,80,159,41,8,60,35,200,201,202,251, -22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,12,202,197, -250,80,159,38,8,60,35,197,198,199,83,159,34,93,80,159,34,8,60,35,89, -162,34,37,8,31,2,7,223,0,27,28,248,80,158,36,34,195,249,80,158,37, -35,248,80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193, -27,28,248,22,206,194,193,198,249,80,158,41,35,248,80,158,42,36,196,27,248, -80,158,43,37,197,250,22,209,198,195,198,11,11,28,192,27,248,22,52,194,27, -248,22,78,195,27,248,22,80,196,91,159,36,11,90,161,36,34,11,249,80,159, -42,8,58,35,202,197,87,95,28,248,80,158,41,38,195,12,250,22,252,39,2, -11,6,50,50,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101,103, -97,108,32,117,115,101,32,111,102,32,96,46,39,32,102,111,114,32,112,114,111, -99,101,100,117,114,101,32,98,111,100,121,41,13,203,28,248,80,158,41,45,195, -250,22,252,39,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40, -110,111,32,101,120,112,114,101,115,115,105,111,110,115,32,102,111,114,32,112,114, -111,99,101,100,117,114,101,32,98,111,100,121,41,14,203,12,27,249,22,209,20, -15,159,43,57,47,204,27,249,22,209,20,15,159,44,58,47,196,27,249,22,209, -20,15,159,45,59,47,248,199,200,249,80,158,45,40,205,27,250,22,61,198,199, -200,27,20,15,159,47,8,26,47,250,22,209,20,15,159,50,8,27,47,250,22, -209,20,15,159,53,8,28,47,250,22,60,248,22,80,203,250,22,209,20,15,159, -59,8,29,47,248,22,60,248,22,78,23,15,20,15,159,59,8,30,47,248,22, -52,203,20,15,159,53,8,31,47,195,250,22,252,39,2,11,2,11,197,83,159, -34,93,80,159,34,8,58,35,89,162,34,36,45,73,103,101,110,101,114,97,108, -45,112,114,111,116,111,15,223,0,27,249,22,209,20,15,159,37,52,47,197,27, -28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, -158,40,37,197,250,22,209,199,195,199,11,28,192,27,248,22,52,194,27,248,22, -53,195,28,248,80,158,39,43,194,249,22,7,195,249,80,159,42,8,57,35,201, -202,250,80,159,41,8,59,35,198,201,200,250,80,159,39,8,59,35,196,199,198, -83,159,34,93,80,159,34,8,59,35,89,162,34,37,54,2,7,223,0,27,28, -248,80,158,36,34,195,249,80,158,37,42,27,248,80,158,39,36,198,28,248,80, -158,39,34,193,249,80,158,40,35,248,80,158,41,36,195,27,248,80,158,42,37, -196,248,22,59,250,22,209,199,196,199,11,27,248,80,158,39,37,198,250,22,209, -200,195,200,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, -91,159,36,11,90,161,36,34,11,249,80,159,42,8,58,35,203,27,249,22,61, -201,200,27,20,15,159,44,53,47,250,22,209,20,15,159,47,54,47,250,22,209, -20,15,159,50,55,47,199,20,15,159,50,56,47,195,27,249,80,159,43,8,57, +22,80,196,28,248,80,158,39,45,194,250,22,252,39,2,11,27,249,22,209,20, +15,159,44,49,49,204,27,28,248,80,158,44,34,194,249,80,158,45,35,248,80, +158,46,36,196,27,248,80,158,47,37,197,28,248,80,158,47,34,193,249,80,158, +48,44,248,80,158,49,36,195,248,80,158,49,48,248,80,158,50,37,196,11,11, +28,192,27,248,22,52,194,27,248,22,53,195,6,46,46,98,97,100,32,115,121, +110,116,97,120,32,40,122,101,114,111,32,101,120,112,114,101,115,115,105,111,110, +115,32,97,102,116,101,114,32,105,100,101,110,116,105,102,105,101,114,41,8,27, +28,248,80,158,45,34,195,249,80,158,46,35,248,80,158,47,36,197,27,248,80, +158,48,37,198,28,248,80,158,48,34,193,249,80,158,49,35,248,80,158,50,36, +195,27,248,80,158,51,37,196,28,248,80,158,51,38,193,248,80,158,51,39,193, +11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,6, +50,50,98,97,100,32,115,121,110,116,97,120,32,40,109,117,108,116,105,112,108, +101,32,101,120,112,114,101,115,115,105,111,110,115,32,97,102,116,101,114,32,105, +100,101,110,116,105,102,105,101,114,41,9,27,28,248,80,158,46,34,196,249,80, +158,47,35,248,80,158,48,36,198,27,248,80,158,49,37,199,28,248,80,158,49, +34,193,27,28,248,22,206,194,193,199,249,80,158,51,35,248,80,158,52,36,196, +27,248,80,158,53,37,197,250,22,209,198,195,198,11,11,28,192,27,248,22,52, +194,27,248,22,78,195,27,248,22,80,196,6,31,31,98,97,100,32,115,121,110, +116,97,120,32,40,105,108,108,101,103,97,108,32,117,115,101,32,111,102,32,96, +46,39,41,10,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116, +97,120,11,198,201,250,80,159,41,8,41,35,200,201,202,250,80,159,38,8,41, +35,197,198,199,83,159,34,93,80,159,34,8,41,35,89,162,34,37,49,2,7, +223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197, +27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28,248,22,206,194,193, +198,249,80,158,41,35,248,80,158,42,36,196,27,248,80,158,43,37,197,250,22, +209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, +80,196,28,248,80,158,39,34,194,250,80,159,41,8,40,35,200,201,202,251,22, +252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,12,202,197,250, +80,159,38,8,40,35,197,198,199,83,159,34,93,80,159,34,8,40,35,89,162, +34,37,56,2,7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,35,248, +80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193,27,28, +248,22,206,194,193,198,249,80,158,41,35,248,80,158,42,36,196,27,248,80,158, +43,37,197,250,22,209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22, +78,195,27,248,22,80,196,91,159,36,11,90,161,36,34,11,249,80,159,42,8, +38,35,202,197,87,95,28,248,80,158,41,38,195,12,250,22,252,39,2,11,6, +50,50,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101,103,97,108, +32,117,115,101,32,111,102,32,96,46,39,32,102,111,114,32,112,114,111,99,101, +100,117,114,101,32,98,111,100,121,41,13,203,28,248,80,158,41,47,195,250,22, +252,39,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40,110,111, +32,101,120,112,114,101,115,115,105,111,110,115,32,102,111,114,32,112,114,111,99, +101,100,117,114,101,32,98,111,100,121,41,14,203,12,27,249,22,209,20,15,159, +43,45,49,204,27,249,22,209,20,15,159,44,46,49,196,27,249,22,209,20,15, +159,45,47,49,248,199,200,249,80,158,45,41,205,27,250,22,61,198,200,199,252, +80,158,51,42,20,15,159,51,48,49,21,95,3,1,4,103,54,52,50,15,3, +1,4,103,54,52,48,16,3,1,4,103,54,52,49,17,248,22,78,198,248,22, +80,198,248,22,52,198,250,22,252,39,2,11,2,11,197,83,159,34,93,80,159, +34,8,38,35,89,162,34,36,45,73,103,101,110,101,114,97,108,45,112,114,111, +116,111,18,223,0,27,249,22,209,20,15,159,37,43,49,197,27,28,248,80,158, +37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, +250,22,209,199,195,199,11,28,192,27,248,22,52,194,27,248,22,53,195,28,248, +80,158,39,45,194,249,22,7,195,249,80,159,42,8,37,35,201,202,250,80,159, +41,8,39,35,198,201,200,250,80,159,39,8,39,35,196,199,198,83,159,34,93, +80,159,34,8,39,35,89,162,34,37,52,2,7,223,0,27,28,248,80,158,36, +34,195,249,80,158,37,44,27,248,80,158,39,36,198,28,248,80,158,39,34,193, +249,80,158,40,35,248,80,158,41,36,195,27,248,80,158,42,37,196,248,22,59, +250,22,209,199,196,199,11,27,248,80,158,39,37,198,250,22,209,200,195,200,11, +28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,91,159,36,11, +90,161,36,34,11,249,80,159,42,8,38,35,203,27,249,22,61,201,200,251,80, +158,47,42,20,15,159,47,44,49,21,94,3,1,4,103,54,51,48,19,3,1, +4,103,54,50,57,20,248,22,52,197,248,22,53,197,27,249,80,159,43,8,37, 35,204,203,249,22,7,195,89,162,34,35,40,9,224,4,2,248,194,248,22,59, 248,195,197,27,28,248,80,158,37,34,196,249,80,158,38,35,248,80,158,39,36, 198,27,248,80,158,40,37,199,250,22,209,201,195,201,11,28,192,27,248,22,52, @@ -2385,257 +2388,231 @@ 110,116,97,120,32,40,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105, 101,114,32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,110,97,109,101, 44,32,97,110,100,32,110,111,116,32,97,32,110,101,115,116,101,100,32,112,114, -111,99,101,100,117,114,101,32,102,111,114,109,41,16,203,197,250,22,252,39,2, -11,2,11,198,83,159,34,93,80,159,34,8,57,35,89,162,8,100,36,57,72, -115,105,109,112,108,101,45,112,114,111,116,111,17,223,0,91,159,36,11,90,161, -36,34,11,27,249,22,209,20,15,159,39,35,47,199,27,28,248,80,158,39,34, +111,99,101,100,117,114,101,32,102,111,114,109,41,21,203,197,250,22,252,39,2, +11,2,11,198,83,159,34,93,80,159,34,8,37,35,89,162,8,100,36,57,72, +115,105,109,112,108,101,45,112,114,111,116,111,22,223,0,91,159,36,11,90,161, +36,34,11,27,249,22,209,20,15,159,39,35,49,199,27,28,248,80,158,39,34, 194,249,80,158,40,35,248,80,158,41,36,196,27,248,80,158,42,37,197,28,248, 80,158,42,38,193,248,80,158,42,39,193,11,11,28,192,27,248,22,52,194,27, -248,22,53,195,249,22,7,248,22,216,27,20,15,159,44,36,47,250,22,209,20, -15,159,47,37,47,199,195,89,162,34,35,53,9,225,8,9,2,27,249,22,209, -20,15,159,39,38,47,198,249,80,158,39,40,196,27,249,22,61,197,198,27,20, -15,159,41,39,47,250,22,209,20,15,159,44,40,47,250,22,209,20,15,159,47, -41,47,250,22,62,20,15,159,50,42,47,248,22,53,203,248,22,52,203,20,15, -159,47,43,47,195,27,28,248,80,158,40,34,195,249,80,158,41,35,248,80,158, -42,36,197,27,248,80,158,43,37,198,91,159,37,11,90,161,37,34,11,250,80, -158,48,41,198,35,11,28,194,27,28,248,22,206,197,196,201,249,80,158,48,42, -28,248,80,158,49,38,196,248,22,59,248,80,158,50,39,197,11,250,22,209,197, -199,197,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, -249,22,7,248,22,216,27,249,22,61,198,199,27,20,15,159,47,44,47,250,22, -209,20,15,159,50,45,47,249,22,65,248,22,53,199,248,22,60,248,22,52,200, -195,89,162,34,35,56,9,226,10,11,2,3,27,249,22,209,20,15,159,40,46, -47,199,249,80,158,40,40,197,27,250,22,61,198,200,199,27,20,15,159,42,47, -47,250,22,209,20,15,159,45,48,47,250,22,209,20,15,159,48,49,47,250,22, -62,20,15,159,51,50,47,249,22,65,248,22,80,205,248,22,78,205,248,22,52, -203,20,15,159,48,51,47,195,250,22,252,39,2,11,2,11,197,87,95,249,22, -3,89,162,34,35,41,9,224,4,5,28,248,80,158,36,43,195,12,251,22,252, -39,2,11,6,40,40,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105, -101,114,32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,97,114,103,117, -109,101,110,116,18,196,198,194,27,248,80,158,38,44,194,28,192,251,22,252,39, -2,11,6,29,29,100,117,112,108,105,99,97,116,101,32,97,114,103,117,109,101, -110,116,32,105,100,101,110,116,105,102,105,101,114,19,200,196,12,193,27,89,162, -8,36,35,36,62,109,107,20,223,1,89,162,34,35,8,27,9,224,0,1,87, -94,28,249,22,71,247,22,252,84,3,21,93,70,101,120,112,114,101,115,115,105, -111,110,21,250,22,252,39,2,11,6,36,36,110,111,116,32,97,108,108,111,119, -101,100,32,105,110,32,97,110,32,101,120,112,114,101,115,115,105,111,110,32,99, -111,110,116,101,120,116,22,197,12,27,249,22,209,20,15,159,38,34,47,197,27, -28,248,80,158,38,34,194,249,80,158,39,35,248,80,158,40,36,196,27,248,80, -158,41,37,197,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36, -195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45,42,248, -80,158,46,36,195,248,80,158,46,46,248,80,158,47,37,196,11,11,11,28,192, -27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,28,248,80,158,41,43, -194,27,249,22,209,20,15,159,43,8,33,47,200,249,80,158,43,40,202,27,250, -22,61,199,200,198,27,20,15,159,45,8,34,47,250,22,209,20,15,159,48,8, -35,47,250,22,209,20,15,159,51,8,36,47,250,22,60,248,22,80,203,250,22, -209,20,15,159,57,8,37,47,248,22,60,248,22,78,23,15,20,15,159,57,8, -38,47,248,22,52,203,20,15,159,51,8,39,47,195,250,80,159,43,8,62,35, -199,202,200,250,80,159,40,8,62,35,196,199,197,250,22,7,248,196,20,15,159, -39,8,40,47,248,196,20,15,159,39,8,41,47,248,196,20,15,159,39,8,42, -47,39,20,98,159,40,16,13,30,23,65,35,37,115,116,120,24,69,115,116,120, -45,112,97,105,114,63,25,11,30,26,2,24,67,99,111,110,115,47,35,102,27, -1,30,28,2,24,67,115,116,120,45,99,97,114,29,5,30,30,2,24,67,115, -116,120,45,99,100,114,31,6,30,32,2,24,69,115,116,120,45,108,105,115,116, -63,33,8,30,34,2,24,69,115,116,120,45,62,108,105,115,116,35,4,30,36, -68,35,37,115,116,120,108,111,99,37,68,114,101,108,111,99,97,116,101,38,1, -30,39,2,24,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116,40,3, -30,41,2,24,69,97,112,112,101,110,100,47,35,102,42,0,30,43,2,24,71, -105,100,101,110,116,105,102,105,101,114,63,44,2,30,45,76,35,37,115,116,120, -99,97,115,101,45,115,99,104,101,109,101,46,1,26,99,104,101,99,107,45,100, -117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,47,0, -30,48,2,24,69,115,116,120,45,110,117,108,108,63,49,10,30,50,2,24,71, -115,116,120,45,110,117,108,108,47,35,102,51,9,16,43,18,99,64,104,101,114, -101,52,41,97,39,10,34,11,16,8,2,3,2,2,2,4,2,2,2,5,2, -2,2,6,2,2,98,38,10,35,11,95,159,67,35,37,113,113,115,116,120,53, -9,11,159,2,24,9,11,159,2,46,9,11,16,0,96,37,8,254,1,11,16, -0,16,4,36,11,77,100,101,102,105,110,101,45,118,97,108,117,101,115,45,115, -116,120,54,3,1,7,101,110,118,51,53,48,54,55,16,4,35,11,63,115,116, -120,56,3,1,7,101,110,118,51,53,48,55,57,18,102,2,52,45,39,38,37, -36,35,16,8,44,11,3,1,4,103,51,53,51,58,3,1,4,103,51,53,52, -59,3,1,4,103,51,53,53,60,3,1,7,101,110,118,51,53,50,50,61,2, -61,2,61,16,8,43,11,61,95,62,65,112,114,111,116,111,63,64,98,111,100, -121,64,3,1,7,101,110,118,51,53,50,51,65,2,65,2,65,16,6,42,11, -2,17,2,15,3,1,7,101,110,118,51,53,51,49,66,2,66,18,16,2,95, -66,115,114,99,116,97,103,67,46,93,8,252,6,11,95,9,8,252,6,11,69, -35,37,115,116,120,99,97,115,101,68,18,104,64,100,101,115,116,69,49,39,38, -37,36,35,44,43,42,16,6,48,11,3,1,4,103,51,54,56,70,3,1,4, -103,51,54,57,71,3,1,7,101,110,118,51,53,51,56,72,2,72,16,6,47, -11,62,105,100,73,63,97,114,103,74,3,1,7,101,110,118,51,53,51,57,75, -2,75,18,158,2,52,49,18,16,2,95,2,67,50,93,8,252,18,11,95,9, -8,252,18,11,2,68,18,158,2,69,49,18,158,63,99,116,120,76,49,18,158, -66,108,97,109,98,100,97,77,49,18,158,2,76,49,18,16,2,95,2,67,51, -93,8,252,23,11,95,9,8,252,23,11,2,68,18,104,2,69,54,39,38,37, -36,35,44,43,42,16,8,53,11,3,1,4,103,51,54,53,78,3,1,4,103, -51,54,54,79,3,1,4,103,51,54,55,80,3,1,7,101,110,118,51,53,54, -56,81,2,81,2,81,16,8,52,11,2,73,2,74,64,114,101,115,116,82,3, -1,7,101,110,118,51,53,54,57,83,2,83,2,83,18,158,2,52,54,18,16, -2,95,2,67,55,93,8,252,35,11,95,9,8,252,35,11,2,68,18,158,2, -69,54,18,158,2,76,54,18,158,2,77,54,18,158,2,76,54,18,158,2,52, -45,18,16,2,95,2,67,56,93,8,252,54,11,95,9,8,252,54,11,2,68, -18,104,2,69,8,26,39,38,37,36,35,44,43,16,6,59,11,2,17,2,15, -2,66,2,66,16,8,58,11,3,1,4,103,51,55,56,84,3,1,4,103,51, -55,57,85,3,1,4,103,51,56,48,86,3,1,7,101,110,118,51,54,48,53, -87,2,87,2,87,16,8,57,11,69,115,111,109,101,116,104,105,110,103,88,64, -109,111,114,101,89,2,82,3,1,7,101,110,118,51,54,48,54,90,2,90,2, -90,18,158,2,76,8,26,18,158,2,76,8,26,18,102,2,52,8,28,39,38, -37,36,35,44,43,16,6,8,27,11,2,73,66,109,107,45,114,104,115,91,3, -1,7,101,110,118,51,53,51,48,92,2,92,18,158,2,52,8,28,18,158,2, -52,8,28,18,16,2,95,2,67,8,29,93,8,252,96,11,95,9,8,252,96, -11,2,68,18,158,2,69,8,28,18,158,2,76,8,28,18,158,2,76,8,28, -18,158,2,76,8,28,18,158,2,76,8,28,18,101,2,52,8,32,39,38,37, -36,35,16,8,8,31,11,3,1,4,103,51,53,57,93,3,1,4,103,51,54, -48,94,3,1,4,103,51,54,49,95,3,1,7,101,110,118,51,54,57,54,96, -2,96,2,96,16,8,8,30,11,2,62,2,73,2,82,3,1,7,101,110,118, -51,54,57,55,97,2,97,2,97,18,101,2,52,8,35,39,38,37,36,35,16, -8,8,34,11,3,1,4,103,51,54,50,98,3,1,4,103,51,54,51,99,3, -1,4,103,51,54,52,100,3,1,7,101,110,118,51,55,52,52,101,2,101,2, -101,16,8,8,33,11,2,62,2,73,64,101,120,112,114,102,3,1,7,101,110, -118,51,55,52,53,103,2,103,2,103,18,16,2,95,2,67,8,36,93,8,252, -145,11,95,9,8,252,145,11,2,68,18,158,2,69,8,35,18,158,2,76,8, -35,18,158,2,76,8,35,18,158,2,76,8,35,18,158,2,76,8,35,18,98, -73,100,101,102,105,110,101,45,118,97,108,117,101,115,104,8,38,39,38,37,16, -4,8,37,11,2,20,3,1,7,101,110,118,51,53,48,53,105,18,158,75,100, -101,102,105,110,101,45,115,121,110,116,97,120,101,115,106,8,38,18,158,1,24, -100,101,102,105,110,101,45,118,97,108,117,101,115,45,102,111,114,45,115,121,110, -116,97,120,107,8,38,11,16,5,93,2,5,87,95,83,159,34,93,80,159,34, -8,59,35,89,162,34,36,53,2,7,223,0,27,28,248,80,158,36,34,195,249, -80,158,37,39,248,80,158,38,36,197,27,248,80,158,39,38,198,28,248,80,158, -39,40,193,248,80,158,39,41,193,11,11,28,192,27,248,22,52,194,27,248,22, -53,195,249,80,158,39,42,199,27,20,15,159,40,36,44,250,22,209,20,15,159, -43,37,44,250,22,209,20,15,159,46,38,44,249,22,56,20,15,159,48,39,44, -249,22,2,80,159,50,8,58,35,205,20,15,159,46,43,44,195,250,22,252,39, -2,11,2,11,197,83,159,34,93,80,159,34,8,58,35,89,162,8,37,35,42, -9,223,0,250,22,209,20,15,159,37,40,44,249,22,60,20,15,159,39,41,44, -248,22,52,199,20,15,159,37,42,44,89,162,34,35,8,31,9,223,0,27,247, -22,252,84,3,87,94,28,249,22,71,194,21,95,66,109,111,100,117,108,101,108, -72,109,111,100,117,108,101,45,98,101,103,105,110,109,69,116,111,112,45,108,101, -118,101,108,110,12,250,22,252,39,2,11,6,51,51,97,108,108,111,119,101,100, -32,111,110,108,121,32,97,116,32,116,104,101,32,116,111,112,45,108,101,118,101, -108,32,111,114,32,97,32,109,111,100,117,108,101,32,116,111,112,45,108,101,118, -101,108,111,197,27,249,22,209,20,15,159,38,34,44,197,27,28,248,80,158,38, -34,194,249,80,158,39,35,248,80,158,40,36,196,248,80,158,40,37,248,80,158, -41,38,197,11,28,192,20,15,159,37,35,44,27,28,248,80,158,39,34,195,249, -80,158,40,39,248,80,158,41,36,197,27,248,80,158,42,38,198,28,248,80,158, -42,34,193,249,80,158,43,35,248,80,158,44,36,195,248,80,158,44,37,248,80, -158,45,38,196,11,11,28,192,27,248,22,52,194,27,248,22,53,195,28,249,22, -252,11,2,199,2,109,249,80,159,42,8,59,35,198,201,27,250,22,252,25,2, -196,201,248,22,216,20,15,159,45,44,44,27,249,22,209,20,15,159,44,45,44, -195,27,28,248,80,158,44,34,194,28,27,248,80,158,45,36,195,28,248,80,158, -45,43,193,28,249,22,224,194,20,15,159,46,46,44,9,11,11,27,248,80,158, -45,38,195,28,248,80,158,45,40,193,248,80,158,45,41,193,11,11,11,28,192, -27,20,15,159,44,47,44,250,22,209,20,15,159,47,48,44,250,22,209,20,15, -159,50,49,44,249,22,56,20,15,159,52,50,44,201,20,15,159,50,51,44,195, -27,28,248,80,158,45,34,195,28,27,248,80,158,46,36,196,28,248,80,158,46, -43,193,28,249,22,224,194,20,15,159,47,52,44,9,11,11,27,248,80,158,46, -38,196,28,248,80,158,46,34,193,249,80,158,47,35,27,248,80,158,49,36,196, -28,248,80,158,49,40,193,248,22,59,248,80,158,50,41,194,11,27,248,80,158, -49,38,196,28,248,80,158,49,34,193,249,80,158,50,35,248,80,158,51,36,195, -248,80,158,51,37,248,80,158,52,38,196,11,11,11,11,28,192,27,248,22,52, -194,27,248,22,53,195,27,249,22,61,195,196,27,20,15,159,48,53,44,250,22, -209,20,15,159,51,54,44,250,22,209,20,15,159,54,55,44,250,22,60,20,15, -159,57,56,44,248,22,53,203,248,22,52,203,20,15,159,54,57,44,195,27,28, -248,80,158,46,34,196,28,27,248,80,158,47,36,197,28,248,80,158,47,43,193, -28,249,22,224,194,20,15,159,48,58,44,9,11,11,27,248,80,158,47,38,197, -28,248,80,158,47,40,193,248,80,158,47,41,193,11,11,11,28,192,27,20,15, -159,46,59,44,250,22,209,20,15,159,49,8,26,44,250,22,209,20,15,159,52, -8,27,44,249,22,56,20,15,159,54,8,28,44,201,20,15,159,52,8,29,44, -195,27,28,248,80,158,47,34,197,28,27,248,80,158,48,36,198,28,248,80,158, -48,43,193,28,249,22,224,194,20,15,159,49,8,30,44,9,11,11,27,248,80, -158,48,38,198,28,248,80,158,48,40,193,248,80,158,48,41,193,11,11,11,28, -192,27,20,15,159,47,8,31,44,250,22,209,20,15,159,50,8,32,44,250,22, -209,20,15,159,53,8,33,44,249,22,56,20,15,159,55,8,34,44,201,20,15, -159,53,8,35,44,195,27,28,248,80,158,48,34,198,28,27,248,80,158,49,36, -199,28,248,80,158,49,43,193,28,249,22,224,194,20,15,159,50,8,36,44,9, -11,11,27,248,80,158,49,38,199,28,248,80,158,49,34,193,249,80,158,50,35, -27,248,80,158,52,36,196,28,248,80,158,52,40,193,248,22,59,248,80,158,53, -41,194,11,27,248,80,158,52,38,196,28,248,80,158,52,34,193,249,80,158,53, -35,248,80,158,54,36,195,248,80,158,54,37,248,80,158,55,38,196,11,11,11, -11,28,192,27,248,22,52,194,27,248,22,53,195,250,22,252,39,2,11,6,54, -54,115,121,110,116,97,120,32,100,101,102,105,110,105,116,105,111,110,115,32,110, -111,116,32,97,108,108,111,119,101,100,32,119,105,116,104,105,110,32,98,101,103, -105,110,45,102,111,114,45,115,121,110,116,97,120,112,204,27,20,15,159,48,8, -37,44,250,22,209,20,15,159,51,8,38,44,250,22,209,20,15,159,54,8,39, -44,250,22,60,20,15,159,57,8,40,44,20,15,159,57,8,41,44,250,22,209, -20,15,159,8,26,8,42,44,250,22,62,20,15,159,8,29,8,43,44,23,21, -20,15,159,8,29,8,44,44,20,15,159,8,26,8,45,44,20,15,159,54,8, -46,44,195,249,80,159,40,8,59,35,196,199,34,20,98,159,36,16,10,2,23, -2,41,2,28,2,50,2,30,2,26,2,32,2,34,2,36,2,43,16,47,18, -99,2,52,8,41,39,38,37,16,4,8,40,11,2,56,3,1,7,101,110,118, -51,55,54,55,113,16,4,8,39,11,2,76,3,1,7,101,110,118,51,55,54, -56,114,18,158,93,16,2,101,2,0,8,44,39,38,37,8,40,8,39,16,4, -8,43,11,3,1,4,103,52,48,55,115,3,1,7,101,110,118,51,55,55,51, -116,16,4,8,42,11,2,62,3,1,7,101,110,118,51,55,55,52,117,9,8, -44,18,16,2,95,2,67,8,45,93,8,252,166,11,95,9,8,252,166,11,2, -68,18,101,2,69,8,48,39,38,37,8,40,8,39,16,6,8,47,11,3,1, -4,103,52,48,51,118,3,1,4,103,52,48,52,119,3,1,7,101,110,118,51, -55,56,51,120,2,120,16,6,8,46,11,2,62,64,101,108,101,109,121,3,1, -7,101,110,118,51,55,56,52,122,2,122,18,158,2,76,8,48,18,158,2,0, -8,48,18,158,2,76,8,48,18,158,2,5,8,48,18,158,2,76,8,48,18, -158,2,76,8,48,18,158,110,16,2,101,2,0,8,51,39,38,37,8,40,8, -39,16,6,8,50,11,3,1,4,103,52,48,53,123,3,1,4,103,52,48,54, -124,3,1,7,101,110,118,51,55,57,54,125,2,125,16,6,8,49,11,2,62, -2,121,3,1,7,101,110,118,51,55,57,55,126,2,126,9,16,2,158,2,104, -8,51,9,16,2,158,2,106,8,51,9,16,2,158,2,107,8,51,9,16,2, -158,64,115,101,116,33,127,8,51,9,16,2,158,70,108,101,116,45,118,97,108, -117,101,115,128,8,51,9,16,2,158,71,108,101,116,42,45,118,97,108,117,101, -115,129,8,51,9,16,2,158,73,108,101,116,114,101,99,45,118,97,108,117,101, -115,130,8,51,9,16,2,158,2,77,8,51,9,16,2,158,71,99,97,115,101, -45,108,97,109,98,100,97,131,8,51,9,16,2,158,62,105,102,132,8,51,9, -16,2,158,65,113,117,111,116,101,133,8,51,9,16,2,158,1,22,108,101,116, -114,101,99,45,115,121,110,116,97,120,101,115,43,118,97,108,117,101,115,134,8, -51,9,16,2,158,76,102,108,117,105,100,45,108,101,116,45,115,121,110,116,97, -120,135,8,51,9,16,2,158,1,22,119,105,116,104,45,99,111,110,116,105,110, -117,97,116,105,111,110,45,109,97,114,107,136,8,51,9,16,2,158,65,35,37, -97,112,112,137,8,51,9,16,2,158,65,35,37,116,111,112,138,8,51,9,16, -2,158,67,35,37,100,97,116,117,109,139,8,51,9,8,51,18,102,2,52,8, -53,39,38,37,8,40,8,39,8,50,8,49,16,4,8,52,11,61,101,140,3, -1,7,101,110,118,51,56,48,50,141,18,158,2,0,8,53,18,16,2,95,2, -67,8,54,93,8,252,187,11,95,9,8,252,187,11,2,68,18,104,2,69,8, -57,39,38,37,8,40,8,39,8,50,8,49,8,52,16,4,8,56,11,3,1, -4,103,52,49,53,142,3,1,7,101,110,118,51,56,48,56,143,16,4,8,55, -11,61,118,144,3,1,7,101,110,118,51,56,48,57,145,18,158,2,76,8,57, -18,158,2,5,8,57,18,158,2,76,8,57,18,158,2,104,8,53,18,16,2, -95,2,67,8,58,93,8,252,190,11,95,9,8,252,190,11,2,68,18,104,2, -69,8,61,39,38,37,8,40,8,39,8,50,8,49,8,52,16,6,8,60,11, -3,1,4,103,52,49,51,146,3,1,4,103,52,49,52,147,3,1,7,101,110, -118,51,56,50,48,148,2,148,16,6,8,59,11,2,73,2,102,3,1,7,101, -110,118,51,56,50,49,149,2,149,18,158,2,76,8,61,18,158,2,107,8,61, -18,158,2,76,8,61,18,158,67,114,101,113,117,105,114,101,150,8,53,18,16, -2,95,2,67,8,62,93,8,252,193,11,95,9,8,252,193,11,2,68,18,104, -2,69,8,65,39,38,37,8,40,8,39,8,50,8,49,8,52,16,4,8,64, -11,3,1,4,103,52,49,50,151,3,1,7,101,110,118,51,56,51,50,152,16, -4,8,63,11,2,144,3,1,7,101,110,118,51,56,51,51,153,18,158,2,76, -8,65,18,158,78,114,101,113,117,105,114,101,45,102,111,114,45,115,121,110,116, -97,120,154,8,65,18,158,2,76,8,65,18,158,1,20,114,101,113,117,105,114, -101,45,102,111,114,45,116,101,109,112,108,97,116,101,155,8,53,18,16,2,95, -2,67,8,66,93,8,252,196,11,95,9,8,252,196,11,2,68,18,104,2,69, -8,69,39,38,37,8,40,8,39,8,50,8,49,8,52,16,4,8,68,11,3, -1,4,103,52,49,49,156,3,1,7,101,110,118,51,56,52,50,157,16,4,8, -67,11,2,144,3,1,7,101,110,118,51,56,52,51,158,18,158,2,76,8,69, -18,158,2,150,8,69,18,158,2,76,8,69,18,158,2,106,8,53,18,16,2, -95,2,67,8,70,93,8,252,202,11,95,9,8,252,202,11,2,68,18,104,2, -69,8,73,39,38,37,8,40,8,39,8,50,8,49,8,52,16,4,8,72,11, -3,1,4,103,52,48,56,159,3,1,7,101,110,118,51,56,54,49,160,16,4, -8,71,11,65,111,116,104,101,114,161,3,1,7,101,110,118,51,56,54,50,162, -18,158,2,76,8,73,18,158,2,107,8,73,18,158,9,8,73,18,158,2,76, -8,73,18,158,2,0,8,73,18,16,2,103,93,16,2,158,93,16,2,158,66, -118,97,108,117,101,115,163,8,73,9,8,73,9,8,81,98,8,80,10,34,11, -94,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,164,9,11,159, -2,24,9,11,16,6,73,115,121,110,116,97,120,45,99,97,115,101,42,42,165, -29,166,11,11,66,115,121,110,116,97,120,167,2,166,1,20,101,108,108,105,112, -115,105,115,45,99,111,117,110,116,45,101,114,114,111,114,168,2,166,98,8,79, -10,35,11,95,159,64,35,37,115,99,169,9,11,159,2,164,9,11,159,2,24, -9,11,16,0,96,8,78,8,254,1,11,16,0,16,4,8,77,11,61,120,170, -3,1,6,101,110,118,52,50,49,171,16,4,8,76,11,68,104,101,114,101,45, -115,116,120,172,3,1,6,101,110,118,52,50,51,173,16,4,8,75,11,2,172, -2,173,13,16,4,35,2,166,2,68,11,93,8,252,202,11,16,6,8,74,11, -61,114,174,63,115,114,99,175,3,1,7,101,110,118,51,56,54,54,176,2,176, -95,9,8,252,202,11,2,68,18,158,2,76,8,73,18,158,2,76,8,73,11, -9,93,68,35,37,107,101,114,110,101,108,177,96,2,177,2,46,2,24,2,53, -0}; - EVAL_ONE_SIZED_STR((char *)expr, 6867); +248,22,53,195,249,22,7,248,22,216,249,80,158,45,40,20,15,159,45,36,49, +197,89,162,34,35,47,9,225,8,9,2,27,249,22,209,20,15,159,39,37,49, +198,249,80,158,39,41,196,27,249,22,61,198,197,251,80,158,44,42,20,15,159, +44,38,49,21,94,3,1,4,103,54,49,53,23,3,1,4,103,54,49,52,24, +248,22,52,197,248,22,53,197,27,28,248,80,158,40,34,195,249,80,158,41,35, +248,80,158,42,36,197,27,248,80,158,43,37,198,91,159,37,11,90,161,37,34, +11,250,80,158,48,43,198,35,11,28,194,27,28,248,22,206,197,196,201,249,80, +158,48,44,28,248,80,158,49,38,196,248,22,59,248,80,158,50,39,197,11,250, +22,209,197,199,197,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, +22,80,196,249,22,7,248,22,216,27,249,22,61,198,199,249,80,158,48,40,20, +15,159,48,39,49,249,22,65,248,22,53,197,250,80,158,53,42,20,15,159,53, +40,49,21,93,3,1,4,103,54,49,54,25,248,22,52,200,89,162,34,35,50, +9,226,10,11,2,3,27,249,22,209,20,15,159,40,41,49,199,249,80,158,40, +41,197,27,250,22,61,200,198,199,251,80,158,45,42,20,15,159,45,42,49,21, +94,3,1,4,103,54,50,49,26,3,1,4,103,54,50,48,27,249,22,65,248, +22,80,199,248,22,52,199,248,22,78,197,250,22,252,39,2,11,2,11,197,87, +95,249,22,3,89,162,34,35,41,9,224,4,5,28,248,80,158,36,45,195,12, +251,22,252,39,2,11,6,40,40,110,111,116,32,97,110,32,105,100,101,110,116, +105,102,105,101,114,32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,97, +114,103,117,109,101,110,116,28,196,198,194,27,248,80,158,38,46,194,28,192,251, +22,252,39,2,11,6,29,29,100,117,112,108,105,99,97,116,101,32,97,114,103, +117,109,101,110,116,32,105,100,101,110,116,105,102,105,101,114,29,200,196,12,193, +27,89,162,8,36,35,36,62,109,107,30,223,1,89,162,34,35,52,9,224,0, +1,87,94,28,249,22,71,247,22,252,89,3,21,93,70,101,120,112,114,101,115, +115,105,111,110,31,250,22,252,39,2,11,6,36,36,110,111,116,32,97,108,108, +111,119,101,100,32,105,110,32,97,110,32,101,120,112,114,101,115,115,105,111,110, +32,99,111,110,116,101,120,116,32,197,12,27,249,22,209,20,15,159,38,34,49, +197,27,28,248,80,158,38,34,194,249,80,158,39,35,248,80,158,40,36,196,27, +248,80,158,41,37,197,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158, +43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80,158,45, +44,248,80,158,46,36,195,248,80,158,46,48,248,80,158,47,37,196,11,11,11, +28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,28,248,80,158, +41,45,194,27,249,22,209,20,15,159,43,50,49,200,249,80,158,43,41,202,27, +250,22,61,198,200,199,252,80,158,49,42,20,15,159,49,51,49,21,95,3,1, +4,103,54,53,54,33,3,1,4,103,54,53,52,34,3,1,4,103,54,53,53, +35,248,22,52,198,248,22,78,198,248,22,80,198,250,80,159,43,8,42,35,199, +202,200,250,80,159,40,8,42,35,196,199,197,250,22,7,248,196,20,15,159,39, +52,49,248,196,20,15,159,39,53,49,248,196,20,15,159,39,54,49,39,20,98, +159,40,16,15,30,36,65,35,37,115,116,120,37,69,115,116,120,45,112,97,105, +114,63,38,11,30,39,2,37,67,99,111,110,115,47,35,102,40,1,30,41,2, +37,67,115,116,120,45,99,97,114,42,5,30,43,2,37,67,115,116,120,45,99, +100,114,44,6,30,45,2,37,69,115,116,120,45,108,105,115,116,63,46,8,30, +47,2,37,69,115,116,120,45,62,108,105,115,116,48,4,30,49,69,35,37,115, +116,120,99,97,115,101,50,1,26,100,97,116,117,109,45,62,115,121,110,116,97, +120,45,111,98,106,101,99,116,47,115,104,97,112,101,51,2,30,52,68,35,37, +115,116,120,108,111,99,53,68,114,101,108,111,99,97,116,101,54,1,30,55,2, +50,1,24,97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115, +116,105,116,117,116,101,56,0,30,57,2,37,74,115,112,108,105,116,45,115,116, +120,45,108,105,115,116,58,3,30,59,2,37,69,97,112,112,101,110,100,47,35, +102,60,0,30,61,2,37,71,105,100,101,110,116,105,102,105,101,114,63,62,2, +30,63,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,64,1, +26,99,104,101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110, +116,105,102,105,101,114,65,0,30,66,2,37,69,115,116,120,45,110,117,108,108, +63,67,10,30,68,2,37,71,115,116,120,45,110,117,108,108,47,35,102,69,9, +16,21,18,99,64,104,101,114,101,70,41,97,39,10,34,11,16,8,2,3,2, +2,2,4,2,2,2,5,2,2,2,6,2,2,98,38,10,35,11,95,159,67, +35,37,113,113,115,116,120,71,9,11,159,2,37,9,11,159,2,64,9,11,16, +0,96,37,8,254,1,11,16,0,16,4,36,11,77,100,101,102,105,110,101,45, +118,97,108,117,101,115,45,115,116,120,72,3,1,7,101,110,118,51,52,49,54, +73,16,4,35,11,63,115,116,120,74,3,1,7,101,110,118,51,52,49,55,75, +18,102,2,70,45,39,38,37,36,35,16,8,44,11,3,1,4,103,53,57,52, +76,3,1,4,103,53,57,53,77,3,1,4,103,53,57,54,78,3,1,7,101, +110,118,51,52,51,50,79,2,79,2,79,16,8,43,11,61,95,80,65,112,114, +111,116,111,81,64,98,111,100,121,82,3,1,7,101,110,118,51,52,51,51,83, +2,83,2,83,16,6,42,11,2,22,2,18,3,1,7,101,110,118,51,52,52, +49,84,2,84,18,104,64,100,101,115,116,85,48,39,38,37,36,35,44,43,42, +16,6,47,11,3,1,4,103,54,48,57,86,3,1,4,103,54,49,48,87,3, +1,7,101,110,118,51,52,52,56,88,2,88,16,6,46,11,62,105,100,89,63, +97,114,103,90,3,1,7,101,110,118,51,52,52,57,91,2,91,18,16,2,158, +2,70,48,49,18,158,160,10,66,108,97,109,98,100,97,92,2,23,2,24,48, +18,104,2,85,52,39,38,37,36,35,44,43,42,16,8,51,11,3,1,4,103, +54,48,54,93,3,1,4,103,54,48,55,94,3,1,4,103,54,48,56,95,3, +1,7,101,110,118,51,52,55,56,96,2,96,2,96,16,8,50,11,2,89,2, +90,64,114,101,115,116,97,3,1,7,101,110,118,51,52,55,57,98,2,98,2, +98,18,16,2,158,93,103,2,25,8,26,98,59,10,34,11,95,159,68,35,37, +112,97,114,97,109,122,99,9,11,159,74,35,37,115,109,97,108,108,45,115,99, +104,101,109,101,100,9,11,159,2,37,9,11,16,14,66,115,121,110,116,97,120, +101,29,102,11,11,2,51,2,102,1,20,99,97,116,99,104,45,101,108,108,105, +112,115,105,115,45,101,114,114,111,114,103,2,102,73,115,121,110,116,97,120,45, +99,97,115,101,42,42,104,2,102,78,112,97,116,116,101,114,110,45,115,117,98, +115,116,105,116,117,116,101,105,2,102,2,56,2,102,75,115,117,98,115,116,105, +116,117,116,101,45,115,116,111,112,106,2,102,98,58,10,35,11,95,159,64,35, +37,115,99,107,9,11,159,2,100,9,11,159,2,37,9,11,16,0,96,57,8, +254,1,11,16,0,16,4,56,11,61,120,108,3,1,6,101,110,118,52,53,52, +109,16,4,55,11,68,104,101,114,101,45,115,116,120,110,3,1,6,101,110,118, +52,53,54,111,16,4,54,11,2,110,2,111,13,16,4,35,2,102,2,50,11, +93,8,252,168,11,16,4,53,11,61,114,112,3,1,7,101,110,118,51,52,56, +54,113,8,26,95,9,8,252,168,11,2,50,18,16,2,158,2,70,52,8,27, +18,158,160,10,2,92,2,26,2,27,52,18,16,2,158,2,70,45,8,28,18, +158,160,35,104,2,19,8,32,39,38,37,36,35,44,43,16,6,8,31,11,2, +22,2,18,2,84,2,84,16,8,8,30,11,3,1,4,103,54,50,52,114,3, +1,4,103,54,50,53,115,3,1,4,103,54,50,54,116,3,1,7,101,110,118, +51,53,49,53,117,2,117,2,117,16,8,8,29,11,69,115,111,109,101,116,104, +105,110,103,118,64,109,111,114,101,119,2,97,3,1,7,101,110,118,51,53,49, +54,120,2,120,2,120,2,20,8,32,8,32,18,102,2,70,8,34,39,38,37, +36,35,44,43,16,6,8,33,11,2,89,66,109,107,45,114,104,115,121,3,1, +7,101,110,118,51,52,52,48,122,2,122,18,16,2,158,2,70,8,34,8,35, +18,8,35,18,158,96,10,2,15,93,2,16,2,17,8,34,18,101,2,70,8, +38,39,38,37,36,35,16,8,8,37,11,3,1,4,103,54,48,48,123,3,1, +4,103,54,48,49,124,3,1,4,103,54,48,50,125,3,1,7,101,110,118,51, +54,48,54,126,2,126,2,126,16,8,8,36,11,2,80,2,89,2,97,3,1, +7,101,110,118,51,54,48,55,127,2,127,2,127,18,101,2,70,8,41,39,38, +37,36,35,16,8,8,40,11,3,1,4,103,54,48,51,128,3,1,4,103,54, +48,52,129,3,1,4,103,54,48,53,130,3,1,7,101,110,118,51,54,53,52, +131,2,131,2,131,16,8,8,39,11,2,80,2,89,64,101,120,112,114,132,3, +1,7,101,110,118,51,54,53,53,133,2,133,2,133,18,158,96,10,2,33,93, +2,34,2,35,8,41,18,98,73,100,101,102,105,110,101,45,118,97,108,117,101, +115,134,8,43,39,38,37,16,4,8,42,11,2,30,3,1,7,101,110,118,51, +52,49,53,135,18,16,2,158,75,100,101,102,105,110,101,45,115,121,110,116,97, +120,101,115,136,8,43,8,44,18,16,2,158,1,24,100,101,102,105,110,101,45, +118,97,108,117,101,115,45,102,111,114,45,115,121,110,116,97,120,137,8,43,8, +45,11,16,5,93,2,6,87,95,83,159,34,93,80,159,34,8,29,35,89,162, +34,36,47,2,7,223,0,27,28,248,80,158,36,34,195,249,80,158,37,39,248, +80,158,38,36,197,27,248,80,158,39,38,198,28,248,80,158,39,40,193,248,80, +158,39,41,193,11,11,28,192,27,248,22,52,194,27,248,22,53,195,249,80,158, +39,42,199,250,80,158,42,43,20,15,159,42,36,45,21,93,3,1,4,103,54, +54,51,138,249,22,2,80,159,44,8,28,35,199,250,22,252,39,2,11,2,11, +197,83,159,34,93,80,159,34,8,28,35,89,162,35,35,40,9,223,0,250,80, +158,37,43,20,15,159,37,37,45,21,93,3,1,4,103,54,54,50,139,248,22, +52,197,89,162,34,35,57,9,223,0,27,247,22,252,89,3,87,94,28,249,22, +71,194,21,95,66,109,111,100,117,108,101,140,72,109,111,100,117,108,101,45,98, +101,103,105,110,141,69,116,111,112,45,108,101,118,101,108,142,12,250,22,252,39, +2,11,6,51,51,97,108,108,111,119,101,100,32,111,110,108,121,32,97,116,32, +116,104,101,32,116,111,112,45,108,101,118,101,108,32,111,114,32,97,32,109,111, +100,117,108,101,32,116,111,112,45,108,101,118,101,108,143,197,27,249,22,209,20, +15,159,38,34,45,197,27,28,248,80,158,38,34,194,249,80,158,39,35,248,80, +158,40,36,196,248,80,158,40,37,248,80,158,41,38,197,11,28,192,20,15,159, +37,35,45,27,28,248,80,158,39,34,195,249,80,158,40,39,248,80,158,41,36, +197,27,248,80,158,42,38,198,28,248,80,158,42,34,193,249,80,158,43,35,248, +80,158,44,36,195,248,80,158,44,37,248,80,158,45,38,196,11,11,28,192,27, +248,22,52,194,27,248,22,53,195,28,249,22,252,11,2,199,2,141,249,80,159, +42,8,29,35,198,201,27,250,22,252,25,2,196,201,248,22,216,20,15,159,45, +38,45,27,249,22,209,20,15,159,44,39,45,195,27,28,248,80,158,44,34,194, +28,27,248,80,158,45,36,195,28,248,80,158,45,44,193,28,249,22,224,194,20, +15,159,46,40,45,9,11,11,27,248,80,158,45,38,195,28,248,80,158,45,40, +193,248,80,158,45,41,193,11,11,11,28,192,250,80,158,46,43,20,15,159,46, +41,45,21,93,3,1,4,103,54,55,50,144,195,27,28,248,80,158,45,34,195, +28,27,248,80,158,46,36,196,28,248,80,158,46,44,193,28,249,22,224,194,20, +15,159,47,42,45,9,11,11,27,248,80,158,46,38,196,28,248,80,158,46,34, +193,249,80,158,47,35,27,248,80,158,49,36,196,28,248,80,158,49,40,193,248, +22,59,248,80,158,50,41,194,11,27,248,80,158,49,38,196,28,248,80,158,49, +34,193,249,80,158,50,35,248,80,158,51,36,195,248,80,158,51,37,248,80,158, +52,38,196,11,11,11,11,28,192,27,248,22,52,194,27,248,22,53,195,27,249, +22,61,196,195,251,80,158,51,43,20,15,159,51,43,45,21,94,3,1,4,103, +54,55,52,145,3,1,4,103,54,55,51,146,248,22,52,197,248,22,53,197,27, +28,248,80,158,46,34,196,28,27,248,80,158,47,36,197,28,248,80,158,47,44, +193,28,249,22,224,194,20,15,159,48,44,45,9,11,11,27,248,80,158,47,38, +197,28,248,80,158,47,40,193,248,80,158,47,41,193,11,11,11,28,192,250,80, +158,48,43,20,15,159,48,45,45,21,93,3,1,4,103,54,55,53,147,195,27, +28,248,80,158,47,34,197,28,27,248,80,158,48,36,198,28,248,80,158,48,44, +193,28,249,22,224,194,20,15,159,49,46,45,9,11,11,27,248,80,158,48,38, +198,28,248,80,158,48,40,193,248,80,158,48,41,193,11,11,11,28,192,250,80, +158,49,43,20,15,159,49,47,45,21,93,3,1,4,103,54,55,54,148,195,27, +28,248,80,158,48,34,198,28,27,248,80,158,49,36,199,28,248,80,158,49,44, +193,28,249,22,224,194,20,15,159,50,48,45,9,11,11,27,248,80,158,49,38, +199,28,248,80,158,49,34,193,249,80,158,50,35,27,248,80,158,52,36,196,28, +248,80,158,52,40,193,248,22,59,248,80,158,53,41,194,11,27,248,80,158,52, +38,196,28,248,80,158,52,34,193,249,80,158,53,35,248,80,158,54,36,195,248, +80,158,54,37,248,80,158,55,38,196,11,11,11,11,28,192,27,248,22,52,194, +27,248,22,53,195,250,22,252,39,2,11,6,54,54,115,121,110,116,97,120,32, +100,101,102,105,110,105,116,105,111,110,115,32,110,111,116,32,97,108,108,111,119, +101,100,32,119,105,116,104,105,110,32,98,101,103,105,110,45,102,111,114,45,115, +121,110,116,97,120,149,204,250,80,158,50,43,20,15,159,50,49,45,21,93,3, +1,4,103,54,55,55,150,200,249,80,159,40,8,29,35,196,199,34,20,98,159, +36,16,11,2,36,2,59,2,41,2,68,2,43,2,39,2,45,2,47,2,52, +2,55,2,61,16,16,18,99,2,70,8,48,39,38,37,16,4,8,47,11,2, +74,3,1,7,101,110,118,51,54,55,55,151,16,4,8,46,11,63,99,116,120, +152,3,1,7,101,110,118,51,54,55,56,153,18,158,93,101,2,0,8,51,39, +38,37,8,47,8,46,16,4,8,50,11,3,1,4,103,54,54,49,154,3,1, +7,101,110,118,51,54,56,51,155,16,4,8,49,11,2,80,3,1,7,101,110, +118,51,54,56,52,156,8,51,18,158,160,35,101,2,0,8,54,39,38,37,8, +47,8,46,16,6,8,53,11,3,1,4,103,54,53,55,157,3,1,4,103,54, +53,56,158,3,1,7,101,110,118,51,54,57,51,159,2,159,16,6,8,52,11, +2,80,64,101,108,101,109,160,3,1,7,101,110,118,51,54,57,52,161,2,161, +2,138,8,54,8,54,18,158,95,10,2,6,2,139,8,54,18,158,110,101,2, +0,8,57,39,38,37,8,47,8,46,16,6,8,56,11,3,1,4,103,54,53, +57,162,3,1,4,103,54,54,48,163,3,1,7,101,110,118,51,55,48,54,164, +2,164,16,6,8,55,11,2,80,2,160,3,1,7,101,110,118,51,55,48,55, +165,2,165,158,2,134,8,57,158,2,136,8,57,158,2,137,8,57,158,64,115, +101,116,33,166,8,57,158,70,108,101,116,45,118,97,108,117,101,115,167,8,57, +158,71,108,101,116,42,45,118,97,108,117,101,115,168,8,57,158,73,108,101,116, +114,101,99,45,118,97,108,117,101,115,169,8,57,158,2,92,8,57,158,71,99, +97,115,101,45,108,97,109,98,100,97,170,8,57,158,62,105,102,171,8,57,158, +65,113,117,111,116,101,172,8,57,158,1,22,108,101,116,114,101,99,45,115,121, +110,116,97,120,101,115,43,118,97,108,117,101,115,173,8,57,158,76,102,108,117, +105,100,45,108,101,116,45,115,121,110,116,97,120,174,8,57,158,1,22,119,105, +116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,175, +8,57,158,65,35,37,97,112,112,176,8,57,158,65,35,37,116,111,112,177,8, +57,158,67,35,37,100,97,116,117,109,178,8,57,8,57,18,102,2,70,8,59, +39,38,37,8,47,8,46,8,56,8,55,16,4,8,58,11,61,101,179,3,1, +7,101,110,118,51,55,49,50,180,18,16,2,158,2,0,8,59,8,60,18,158, +160,35,104,2,6,8,63,39,38,37,8,47,8,46,8,56,8,55,8,58,16, +4,8,62,11,3,1,4,103,54,55,49,181,3,1,7,101,110,118,51,55,49, +56,182,16,4,8,61,11,61,118,183,3,1,7,101,110,118,51,55,49,57,184, +2,144,8,63,8,63,18,16,2,158,2,134,8,59,8,64,18,158,95,104,2, +137,8,67,39,38,37,8,47,8,46,8,56,8,55,8,58,16,6,8,66,11, +3,1,4,103,54,54,57,185,3,1,4,103,54,55,48,186,3,1,7,101,110, +118,51,55,51,48,187,2,187,16,6,8,65,11,2,89,2,132,3,1,7,101, +110,118,51,55,51,49,188,2,188,158,2,145,8,67,158,2,146,8,67,8,67, +18,16,2,158,67,114,101,113,117,105,114,101,189,8,59,8,68,18,158,160,35, +104,78,114,101,113,117,105,114,101,45,102,111,114,45,115,121,110,116,97,120,190, +8,71,39,38,37,8,47,8,46,8,56,8,55,8,58,16,4,8,70,11,3, +1,4,103,54,54,56,191,3,1,7,101,110,118,51,55,52,50,192,16,4,8, +69,11,2,183,3,1,7,101,110,118,51,55,52,51,193,2,147,8,71,8,71, +18,16,2,158,1,20,114,101,113,117,105,114,101,45,102,111,114,45,116,101,109, +112,108,97,116,101,194,8,59,8,72,18,158,160,35,104,2,189,8,75,39,38, +37,8,47,8,46,8,56,8,55,8,58,16,4,8,74,11,3,1,4,103,54, +54,55,195,3,1,7,101,110,118,51,55,53,50,196,16,4,8,73,11,2,183, +3,1,7,101,110,118,51,55,53,51,197,2,148,8,75,8,75,18,16,2,158, +2,136,8,59,8,76,18,158,95,104,2,137,8,79,39,38,37,8,47,8,46, +8,56,8,55,8,58,16,4,8,78,11,3,1,4,103,54,54,52,198,3,1, +7,101,110,118,51,55,55,49,199,16,4,8,77,11,65,111,116,104,101,114,200, +3,1,7,101,110,118,51,55,55,50,201,158,9,8,79,158,96,10,2,0,2, +150,93,66,118,97,108,117,101,115,202,8,79,8,79,11,9,93,68,35,37,107, +101,114,110,101,108,203,96,2,203,2,64,2,37,2,71,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6315); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,252,183,1,252,239,86,159,34,20,98,159,34,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,252,228,1,252,129,63,159,34,20,98,159,34,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,73,35,37, 109,111,114,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,48,80, 158,34,34,20,98,159,34,16,24,30,3,2,2,74,115,116,114,117,99,116,58, @@ -2673,1035 +2650,749 @@ 104,101,99,107,45,102,111,114,45,98,114,101,97,107,51,254,1,16,0,11,11, 16,14,2,41,2,39,2,31,2,33,2,29,2,37,2,27,2,6,2,10,2, 43,2,12,2,35,2,25,2,4,48,11,16,18,2,49,2,23,2,45,2,16, -2,14,2,8,70,108,101,116,45,115,116,114,117,99,116,52,64,99,97,115,101, -53,78,112,97,114,97,109,101,116,101,114,105,122,101,45,98,114,101,97,107,54, -65,100,101,108,97,121,55,71,115,101,116,33,45,118,97,108,117,101,115,56,73, -119,105,116,104,45,104,97,110,100,108,101,114,115,57,64,116,105,109,101,58,72, -112,97,114,97,109,101,116,101,114,105,122,101,59,66,108,101,116,47,99,99,60, -74,119,105,116,104,45,104,97,110,100,108,101,114,115,42,61,62,100,111,62,69, -102,108,117,105,100,45,108,101,116,63,16,18,11,11,11,11,11,11,11,11,11, +2,14,2,8,62,100,111,52,73,119,105,116,104,45,104,97,110,100,108,101,114, +115,53,69,102,108,117,105,100,45,108,101,116,54,64,116,105,109,101,55,74,119, +105,116,104,45,104,97,110,100,108,101,114,115,42,56,78,112,97,114,97,109,101, +116,101,114,105,122,101,45,98,114,101,97,107,57,66,108,101,116,47,99,99,58, +65,100,101,108,97,121,59,72,112,97,114,97,109,101,116,101,114,105,122,101,60, +71,115,101,116,33,45,118,97,108,117,101,115,61,70,108,101,116,45,115,116,114, +117,99,116,62,64,99,97,115,101,63,16,18,11,11,11,11,11,11,11,11,11, 11,11,11,11,11,11,11,11,11,16,18,2,49,2,23,2,45,2,16,2,14, 2,8,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2, 61,2,62,2,63,40,52,106,16,5,93,69,99,97,115,101,45,116,101,115,116, -64,89,162,34,35,59,9,223,0,27,249,22,209,20,15,159,37,34,42,196,27, +64,89,162,34,35,51,9,223,0,27,249,22,209,20,15,159,37,34,43,196,27, 28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, 158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36, 195,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,38,27, 248,80,158,46,36,196,28,248,80,158,46,34,193,249,80,158,47,38,248,80,158, 48,36,195,248,80,158,48,39,248,80,158,49,37,196,11,248,80,158,45,39,248, 80,158,46,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27, -248,22,80,196,28,248,22,41,248,22,210,194,27,249,22,61,195,196,27,20,15, -159,41,35,42,250,22,209,20,15,159,44,36,42,250,22,209,20,15,159,47,37, -42,250,22,60,20,15,159,50,38,42,248,22,53,203,250,22,209,20,15,159,53, -39,42,249,22,60,20,15,159,55,40,42,248,22,52,23,16,20,15,159,53,41, -42,20,15,159,47,42,42,195,27,249,22,61,195,196,27,20,15,159,41,43,42, -250,22,209,20,15,159,44,44,42,250,22,209,20,15,159,47,45,42,250,22,60, -20,15,159,50,46,42,248,22,53,203,250,22,209,20,15,159,53,47,42,249,22, -60,20,15,159,55,48,42,248,22,52,23,16,20,15,159,53,49,42,20,15,159, -47,50,42,195,27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40, -36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,35, -248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249, -80,158,45,38,27,248,80,158,47,36,196,28,248,80,158,47,40,193,248,80,158, -47,41,193,11,248,80,158,46,39,248,80,158,47,37,196,11,11,11,28,192,27, -248,22,52,194,27,248,22,78,195,27,248,22,80,196,27,249,22,61,195,196,27, -20,15,159,42,51,42,250,22,209,20,15,159,45,52,42,250,22,209,20,15,159, -48,53,42,250,22,60,20,15,159,51,54,42,248,22,53,203,250,22,209,20,15, -159,54,55,42,249,22,60,20,15,159,56,56,42,248,22,52,23,16,20,15,159, -54,57,42,20,15,159,48,58,42,195,250,22,252,39,2,11,6,10,10,98,97, -100,32,115,121,110,116,97,120,65,197,34,20,98,159,34,16,8,30,66,65,35, -37,115,116,120,67,69,115,116,120,45,112,97,105,114,63,68,11,30,69,2,67, -67,99,111,110,115,47,35,102,70,1,30,71,2,67,67,115,116,120,45,99,97, -114,72,5,30,73,2,67,67,115,116,120,45,99,100,114,74,6,30,75,2,67, -69,97,112,112,101,110,100,47,35,102,76,0,30,77,2,67,71,115,116,120,45, -110,117,108,108,47,35,102,78,9,30,79,2,67,69,115,116,120,45,108,105,115, -116,63,80,8,30,81,2,67,69,115,116,120,45,62,108,105,115,116,82,4,16, -25,18,98,64,104,101,114,101,83,40,98,38,10,34,11,95,159,2,18,9,11, -159,68,35,37,100,101,102,105,110,101,84,9,11,159,74,35,37,115,109,97,108, -108,45,115,99,104,101,109,101,85,9,11,16,70,2,29,2,2,2,45,2,2, -2,31,2,2,2,57,2,2,2,4,2,2,2,58,2,2,2,55,2,2,2, -33,2,2,2,43,2,2,2,64,2,2,2,52,2,2,2,61,2,2,2,53, -2,2,2,6,2,2,2,56,2,2,1,22,98,114,101,97,107,45,112,97,114, -97,109,101,116,101,114,105,122,97,116,105,111,110,86,2,2,2,37,2,2,2, -35,2,2,2,60,2,2,2,14,2,2,2,8,2,2,2,54,2,2,2,39, -2,2,2,10,2,2,2,25,2,2,2,16,2,2,2,12,2,2,2,62,2, -2,2,41,2,2,2,59,2,2,2,49,2,2,2,23,2,2,2,63,2,2, -67,112,114,111,109,105,115,101,87,2,2,2,27,2,2,98,37,10,35,11,95, -159,67,35,37,113,113,115,116,120,88,9,11,159,76,35,37,115,116,120,99,97, -115,101,45,115,99,104,101,109,101,89,9,11,159,2,67,9,11,16,0,96,36, -8,254,1,11,16,0,16,4,35,11,61,120,90,3,1,7,101,110,118,51,56, -54,56,91,18,16,2,95,66,115,114,99,116,97,103,92,41,93,8,252,220,11, -95,9,8,252,220,11,69,35,37,115,116,120,99,97,115,101,93,18,100,64,100, -101,115,116,94,44,38,37,36,35,16,8,43,11,3,1,4,103,52,49,57,95, -3,1,4,103,52,50,48,96,3,1,4,103,52,50,49,97,3,1,7,101,110, -118,51,56,55,53,98,2,98,2,98,16,6,42,11,61,95,99,61,107,100,3, -1,7,101,110,118,51,56,55,54,101,2,101,18,158,63,99,116,120,102,44,18, -158,63,101,113,63,103,44,18,158,2,102,44,18,158,65,113,117,111,116,101,104, -44,18,158,2,102,44,18,158,2,102,44,18,16,2,95,2,92,45,93,8,252, -221,11,95,9,8,252,221,11,2,93,18,158,2,94,44,18,158,2,102,44,18, -158,64,101,113,118,63,105,44,18,158,2,102,44,18,158,2,104,44,18,158,2, -102,44,18,158,2,102,44,18,16,2,95,2,92,46,93,8,252,224,11,95,9, -8,252,224,11,2,93,18,100,2,94,49,38,37,36,35,16,8,48,11,3,1, -4,103,52,49,54,106,3,1,4,103,52,49,55,107,3,1,4,103,52,49,56, -108,3,1,7,101,110,118,51,56,57,48,109,2,109,2,109,16,6,47,11,2, -99,2,100,3,1,7,101,110,118,51,56,57,49,110,2,110,18,158,2,102,49, -18,158,64,109,101,109,118,111,49,18,158,2,102,49,18,158,2,104,49,18,158, -2,102,49,18,158,2,102,49,11,16,5,93,2,53,89,162,34,35,8,27,9, -223,0,27,249,22,209,20,15,159,37,34,45,196,27,28,248,80,158,37,34,194, -249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80, -158,40,34,193,249,80,158,41,38,248,80,158,42,36,195,248,80,158,42,39,248, -80,158,43,37,196,11,11,28,192,27,248,22,52,194,27,248,22,53,195,27,20, -15,159,39,35,45,250,22,209,20,15,159,42,36,45,250,22,209,20,15,159,45, -37,45,250,22,62,20,15,159,48,38,45,202,20,15,159,48,39,45,20,15,159, -45,40,45,195,27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40, -36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,35, -248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249, -80,158,45,38,27,248,80,158,47,36,196,28,248,80,158,47,34,193,28,27,248, -80,158,48,36,194,28,248,80,158,48,40,193,28,249,22,223,194,20,15,159,49, -41,45,9,11,11,27,248,80,158,48,37,194,28,248,80,158,48,34,193,249,80, -158,49,35,248,80,158,50,36,195,27,248,80,158,51,37,196,28,248,80,158,51, -41,193,248,80,158,51,42,193,11,11,11,11,248,80,158,46,39,248,80,158,47, -37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87, -196,27,248,22,88,197,249,80,158,43,43,202,27,250,22,61,198,199,200,27,20, -15,159,45,42,45,250,22,209,20,15,159,48,43,45,250,22,209,20,15,159,51, -44,45,251,22,62,20,15,159,55,45,45,248,22,80,204,248,22,78,204,248,22, -52,204,20,15,159,51,46,45,195,27,28,248,80,158,39,34,196,249,80,158,40, -35,248,80,158,41,36,198,27,248,80,158,42,37,199,28,248,80,158,42,34,193, -249,80,158,43,35,248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80, -158,45,34,193,249,80,158,46,38,27,248,80,158,48,36,196,28,248,80,158,48, -34,193,249,80,158,49,38,27,248,80,158,51,36,196,28,248,80,158,51,41,193, -248,22,59,248,80,158,52,42,194,11,27,248,80,158,51,37,196,28,248,80,158, -51,34,193,249,80,158,52,35,248,80,158,53,36,195,27,248,80,158,54,37,196, -28,248,80,158,54,41,193,248,80,158,54,42,193,11,11,11,248,80,158,47,39, -248,80,158,48,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, -27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,45,43,204, -27,251,22,61,200,202,199,201,27,20,15,159,47,47,45,91,159,35,11,90,161, -35,34,11,83,160,40,34,35,11,247,248,22,9,89,162,34,35,42,9,226,15, -2,3,1,250,22,31,89,162,34,34,38,9,225,6,3,7,90,161,35,35,10, -247,22,252,185,2,248,22,252,185,2,89,162,34,35,38,9,224,3,1,248,193, -89,162,34,34,38,9,224,2,3,28,248,22,252,182,2,193,248,22,252,187,2, -193,249,80,158,37,44,21,95,62,105,102,112,95,2,64,61,118,113,94,2,100, -63,46,46,46,114,96,2,0,62,101,49,115,62,101,50,116,2,114,20,15,159, -37,48,45,89,162,8,36,34,54,9,225,6,5,4,27,250,22,209,20,15,159, -40,49,45,250,22,209,20,15,159,43,50,45,250,22,60,20,15,159,46,51,45, -250,22,209,20,15,159,49,52,45,250,22,60,20,15,159,52,53,45,248,22,78, -23,17,248,22,88,23,17,20,15,159,49,54,45,250,22,209,20,15,159,49,55, -45,250,22,62,20,15,159,52,56,45,248,22,52,23,17,248,22,87,23,17,20, -15,159,49,57,45,20,15,159,43,58,45,197,89,162,8,36,34,35,9,223,0, -192,89,162,34,34,36,9,223,3,248,22,252,185,2,208,27,28,248,80,158,40, +248,22,80,196,28,248,22,41,248,22,210,194,27,249,22,61,195,196,251,80,158, +44,40,20,15,159,44,35,43,21,94,3,1,4,103,54,56,53,65,3,1,4, +103,54,56,52,66,248,22,53,197,248,22,52,197,27,249,22,61,195,196,251,80, +158,44,40,20,15,159,44,36,43,21,94,3,1,4,103,54,56,55,67,3,1, +4,103,54,56,54,68,248,22,53,197,248,22,52,197,27,28,248,80,158,38,34, +195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37,198,28,248, +80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27,248,80,158,44, +37,196,28,248,80,158,44,34,193,249,80,158,45,38,27,248,80,158,47,36,196, +28,248,80,158,47,41,193,248,80,158,47,42,193,11,248,80,158,46,39,248,80, +158,47,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, +22,80,196,27,249,22,61,195,196,251,80,158,45,40,20,15,159,45,37,43,21, +94,3,1,4,103,54,56,57,69,3,1,4,103,54,56,56,70,248,22,53,197, +248,22,52,197,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116, +97,120,71,197,34,20,98,159,34,16,9,30,72,65,35,37,115,116,120,73,69, +115,116,120,45,112,97,105,114,63,74,11,30,75,2,73,67,99,111,110,115,47, +35,102,76,1,30,77,2,73,67,115,116,120,45,99,97,114,78,5,30,79,2, +73,67,115,116,120,45,99,100,114,80,6,30,81,2,73,69,97,112,112,101,110, +100,47,35,102,82,0,30,83,2,73,71,115,116,120,45,110,117,108,108,47,35, +102,84,9,30,85,69,35,37,115,116,120,99,97,115,101,86,1,24,97,112,112, +108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101, +87,0,30,88,2,73,69,115,116,120,45,108,105,115,116,63,89,8,30,90,2, +73,69,115,116,120,45,62,108,105,115,116,91,4,16,4,18,98,64,104,101,114, +101,92,40,98,38,10,34,11,95,159,2,18,9,11,159,68,35,37,100,101,102, +105,110,101,93,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109, +101,94,9,11,16,70,2,52,2,2,2,54,2,2,2,35,2,2,2,25,2, +2,2,55,2,2,2,43,2,2,2,29,2,2,2,27,2,2,2,57,2,2, +2,4,2,2,2,12,2,2,2,31,2,2,2,53,2,2,2,59,2,2,2, +60,2,2,67,112,114,111,109,105,115,101,95,2,2,2,33,2,2,2,8,2, +2,2,14,2,2,2,10,2,2,2,37,2,2,2,23,2,2,2,56,2,2, +2,41,2,2,2,58,2,2,1,22,98,114,101,97,107,45,112,97,114,97,109, +101,116,101,114,105,122,97,116,105,111,110,96,2,2,2,61,2,2,2,45,2, +2,2,64,2,2,2,39,2,2,2,16,2,2,2,49,2,2,2,62,2,2, +2,6,2,2,2,63,2,2,98,37,10,35,11,95,159,67,35,37,113,113,115, +116,120,97,9,11,159,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101, +109,101,98,9,11,159,2,73,9,11,16,0,96,36,8,254,1,11,16,0,16, +4,35,11,61,120,99,3,1,7,101,110,118,51,55,55,56,100,18,158,95,100, +63,101,113,63,101,43,38,37,36,35,16,8,42,11,3,1,4,103,54,56,49, +102,3,1,4,103,54,56,50,103,3,1,4,103,54,56,51,104,3,1,7,101, +110,118,51,55,56,53,105,2,105,2,105,16,6,41,11,61,95,106,61,107,107, +3,1,7,101,110,118,51,55,56,54,108,2,108,158,2,65,43,158,95,10,65, +113,117,111,116,101,109,2,66,43,43,18,158,96,10,64,101,113,118,63,110,2, +67,94,2,109,2,68,43,18,158,95,100,64,109,101,109,118,111,46,38,37,36, +35,16,8,45,11,3,1,4,103,54,55,56,112,3,1,4,103,54,55,57,113, +3,1,4,103,54,56,48,114,3,1,7,101,110,118,51,56,48,48,115,2,115, +2,115,16,6,44,11,2,106,2,107,3,1,7,101,110,118,51,56,48,49,116, +2,116,158,2,69,46,158,95,10,2,109,2,70,46,46,11,16,5,93,2,63, +89,162,34,35,8,27,9,223,0,27,249,22,209,20,15,159,37,34,46,196,27, +28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, +158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,248,80,158,42,36, +195,248,80,158,42,39,248,80,158,43,37,196,11,11,28,192,27,248,22,52,194, +27,248,22,53,195,250,80,158,41,40,20,15,159,41,35,46,21,93,3,1,4, +103,55,50,48,117,195,27,28,248,80,158,38,34,195,249,80,158,39,35,248,80, +158,40,36,197,27,248,80,158,41,37,198,28,248,80,158,41,34,193,249,80,158, +42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158,44,34, +193,249,80,158,45,38,27,248,80,158,47,36,196,28,248,80,158,47,34,193,28, +27,248,80,158,48,36,194,28,248,80,158,48,41,193,28,249,22,223,194,20,15, +159,49,36,46,9,11,11,27,248,80,158,48,37,194,28,248,80,158,48,34,193, +249,80,158,49,35,248,80,158,50,36,195,27,248,80,158,51,37,196,28,248,80, +158,51,42,193,248,80,158,51,43,193,11,11,11,11,248,80,158,46,39,248,80, +158,47,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, +22,87,196,27,248,22,88,197,249,80,158,43,44,202,27,250,22,61,198,200,199, +252,80,158,49,40,20,15,159,49,37,46,21,95,3,1,4,103,55,50,51,118, +3,1,4,103,55,50,50,119,3,1,4,103,55,50,49,120,248,22,78,198,248, +22,80,198,248,22,52,198,27,28,248,80,158,39,34,196,249,80,158,40,35,248, +80,158,41,36,198,27,248,80,158,42,37,199,28,248,80,158,42,34,193,249,80, +158,43,35,248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80,158,45, +34,193,249,80,158,46,38,27,248,80,158,48,36,196,28,248,80,158,48,34,193, +249,80,158,49,38,27,248,80,158,51,36,196,28,248,80,158,51,42,193,248,22, +59,248,80,158,52,43,194,11,27,248,80,158,51,37,196,28,248,80,158,51,34, +193,249,80,158,52,35,248,80,158,53,36,195,27,248,80,158,54,37,196,28,248, +80,158,54,42,193,248,80,158,54,43,193,11,11,11,248,80,158,47,39,248,80, +158,48,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, +22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,45,44,204,27,251, +22,61,199,201,202,200,250,80,158,49,45,89,162,34,34,43,9,224,15,3,253, +80,158,41,40,20,15,159,41,38,46,21,96,3,1,4,103,55,50,53,121,3, +1,4,103,55,50,52,122,3,1,4,103,55,50,55,123,3,1,4,103,55,50, +54,124,248,22,87,199,248,22,78,199,248,22,88,199,248,22,52,199,21,95,62, +105,102,125,95,2,64,61,118,126,94,2,107,63,46,46,46,127,96,2,0,62, +101,49,128,62,101,50,129,2,127,20,15,159,49,39,46,27,28,248,80,158,40, 34,197,249,80,158,41,35,248,80,158,42,36,199,27,248,80,158,43,37,200,28, 248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, 46,37,196,28,248,80,158,46,34,193,249,80,158,47,38,27,248,80,158,49,36, 196,28,248,80,158,49,34,193,249,80,158,50,38,27,248,80,158,52,36,196,28, -248,80,158,52,41,193,248,22,59,248,80,158,53,42,194,11,27,248,80,158,52, +248,80,158,52,42,193,248,22,59,248,80,158,53,43,194,11,27,248,80,158,52, 37,196,28,248,80,158,52,34,193,249,80,158,53,35,248,80,158,54,36,195,27, -248,80,158,55,37,196,28,248,80,158,55,41,193,248,22,59,248,80,158,56,42, +248,80,158,55,37,196,28,248,80,158,55,42,193,248,22,59,248,80,158,56,43, 194,11,11,11,27,248,80,158,49,37,196,28,248,80,158,49,34,193,249,80,158, -50,35,248,80,158,51,36,195,27,248,80,158,52,37,196,28,248,80,158,52,41, -193,248,80,158,52,42,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248, +50,35,248,80,158,51,36,195,27,248,80,158,52,37,196,28,248,80,158,52,42, +193,248,80,158,52,43,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248, 22,78,195,27,248,22,87,196,27,248,22,90,197,27,249,22,70,199,38,27,249, -22,70,200,39,27,249,22,69,201,40,249,80,158,48,43,23,15,27,253,22,61, -201,206,204,205,202,203,27,20,15,159,50,59,45,91,159,35,11,90,161,35,34, -11,83,160,40,34,35,11,247,248,22,9,89,162,34,35,42,9,226,18,2,3, -1,250,22,31,89,162,34,34,38,9,225,6,3,7,90,161,35,35,10,247,22, -252,185,2,248,22,252,185,2,89,162,34,35,38,9,224,3,1,248,193,89,162, -34,34,38,9,224,2,3,28,248,22,252,182,2,193,248,22,252,187,2,193,249, -80,158,37,44,21,95,63,108,101,116,117,93,94,2,90,2,113,96,2,112,95, -2,64,2,90,94,2,100,2,114,96,2,0,2,115,2,116,2,114,97,2,53, -2,90,62,99,49,118,62,99,50,119,2,114,20,15,159,37,8,26,45,89,162, -8,36,34,8,29,9,225,6,5,4,27,250,22,209,20,15,159,40,8,27,45, -250,22,209,20,15,159,43,8,28,45,250,22,60,20,15,159,46,8,29,45,250, -22,209,20,15,159,49,8,30,45,248,22,60,250,22,209,20,15,159,53,8,31, -45,249,22,60,20,15,159,55,8,32,45,248,22,78,23,20,20,15,159,53,8, -33,45,20,15,159,49,8,34,45,250,22,209,20,15,159,49,8,35,45,251,22, -60,20,15,159,53,8,36,45,250,22,209,20,15,159,56,8,37,45,250,22,60, -20,15,159,59,8,38,45,20,15,159,59,8,39,45,248,22,90,23,24,20,15, -159,56,8,40,45,250,22,209,20,15,159,56,8,41,45,250,22,62,20,15,159, -59,8,42,45,248,22,87,23,24,249,22,69,23,25,39,20,15,159,56,8,43, -45,250,22,209,20,15,159,56,8,44,45,251,22,62,20,15,159,8,26,8,45, -45,20,15,159,8,26,8,46,45,249,22,70,23,26,38,248,22,52,23,25,20, -15,159,56,8,47,45,20,15,159,49,8,48,45,20,15,159,43,8,49,45,197, -89,162,8,36,34,35,9,223,0,192,89,162,34,34,36,9,223,3,248,22,252, -185,2,208,27,28,248,80,158,41,34,198,249,80,158,42,35,248,80,158,43,36, -200,27,248,80,158,44,37,201,28,248,80,158,44,34,193,27,28,248,22,206,194, -193,201,249,80,158,46,35,248,80,158,47,36,196,27,248,80,158,48,37,197,28, -248,80,158,48,34,193,27,28,248,22,206,194,193,196,249,80,158,50,38,27,248, -80,158,52,36,197,28,248,80,158,52,34,193,249,80,158,53,35,248,80,158,54, -36,195,27,248,80,158,55,37,196,28,248,80,158,55,34,193,249,80,158,56,35, -248,80,158,57,36,195,27,248,80,158,58,37,196,28,248,80,158,58,41,193,248, -22,59,248,80,158,59,42,194,11,11,11,27,248,80,158,52,37,197,250,22,209, -198,195,198,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, -87,196,27,248,22,90,197,27,249,22,70,199,38,27,249,22,69,200,39,251,22, -252,39,2,11,6,33,33,98,97,100,32,115,121,110,116,97,120,32,40,110,111, -116,32,97,32,100,97,116,117,109,32,115,101,113,117,101,110,99,101,41,120,23, -17,199,27,28,248,80,158,42,34,199,249,80,158,43,35,248,80,158,44,36,201, -27,248,80,158,45,37,202,28,248,80,158,45,34,193,27,28,248,22,206,194,193, -202,249,80,158,47,35,248,80,158,48,36,196,27,248,80,158,49,37,197,28,248, -80,158,49,34,193,27,28,248,22,206,194,193,196,249,80,158,51,35,248,80,158, -52,36,196,27,248,80,158,53,37,197,250,22,209,198,195,198,11,11,11,28,192, -27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,88,197,251, -22,252,39,2,11,6,52,52,98,97,100,32,115,121,110,116,97,120,32,40,109, -105,115,115,105,110,103,32,101,120,112,114,101,115,115,105,111,110,32,97,102,116, -101,114,32,100,97,116,117,109,32,115,101,113,117,101,110,99,101,41,121,23,16, -197,27,28,248,80,158,43,34,200,249,80,158,44,35,248,80,158,45,36,202,27, -248,80,158,46,37,203,250,22,209,205,195,205,11,28,192,27,248,22,52,194,27, -248,22,53,195,28,248,22,57,248,22,210,194,250,22,252,39,2,11,2,65,204, -250,22,252,39,2,11,6,31,31,98,97,100,32,115,121,110,116,97,120,32,40, -105,108,108,101,103,97,108,32,117,115,101,32,111,102,32,96,46,39,41,122,206, -250,22,252,39,2,11,2,65,202,34,20,98,159,34,16,11,2,66,2,69,2, -71,2,73,2,75,2,77,30,123,2,67,71,105,100,101,110,116,105,102,105,101, -114,63,124,2,2,79,2,81,30,125,68,35,37,115,116,120,108,111,99,126,68, -114,101,108,111,99,97,116,101,127,1,30,128,2,93,1,20,101,108,108,105,112, -115,105,115,45,99,111,117,110,116,45,101,114,114,111,114,129,0,16,50,18,98, -2,83,51,38,37,36,16,4,50,11,2,90,3,1,7,101,110,118,51,57,48, -49,130,18,16,2,95,2,92,52,93,8,252,14,12,95,9,8,252,14,12,2, -93,18,100,2,94,55,38,37,36,50,16,6,54,11,3,1,4,103,52,53,48, -131,3,1,4,103,52,53,49,132,3,1,7,101,110,118,51,57,48,54,133,2, -133,16,6,53,11,2,99,2,113,3,1,7,101,110,118,51,57,48,55,134,2, -134,18,158,2,102,55,18,158,2,0,55,18,16,2,103,93,16,2,158,93,16, -2,158,64,99,111,110,100,135,55,9,55,9,8,29,98,8,28,10,34,11,94, -159,2,85,9,11,159,2,67,9,11,16,6,73,115,121,110,116,97,120,45,99, -97,115,101,42,42,136,29,137,11,11,66,115,121,110,116,97,120,138,2,137,2, -129,2,137,98,8,27,10,35,11,95,159,64,35,37,115,99,139,9,11,159,2, -85,9,11,159,2,67,9,11,16,0,96,8,26,8,254,1,11,16,0,16,4, -59,11,2,90,3,1,6,101,110,118,52,50,49,140,16,4,58,11,68,104,101, -114,101,45,115,116,120,141,3,1,6,101,110,118,52,50,51,142,16,4,57,11, -2,141,2,142,13,16,4,35,2,137,2,93,11,93,8,252,14,12,16,6,56, -11,61,114,143,63,115,114,99,144,3,1,7,101,110,118,51,57,49,51,145,2, -145,95,9,8,252,14,12,2,93,18,158,2,102,55,18,158,64,101,108,115,101, -146,51,18,16,2,95,2,92,8,30,93,8,252,18,12,95,9,8,252,18,12, -2,93,18,100,2,94,8,33,38,37,36,50,16,10,8,32,11,3,1,4,103, -52,52,54,147,3,1,4,103,52,52,55,148,3,1,4,103,52,52,56,149,3, -1,4,103,52,52,57,150,3,1,7,101,110,118,51,57,50,50,151,2,151,2, -151,2,151,16,10,8,31,11,2,99,2,113,2,115,2,116,3,1,7,101,110, -118,51,57,50,51,152,2,152,2,152,2,152,18,158,2,102,8,33,18,158,2, -0,8,33,18,158,2,102,8,33,18,16,2,95,2,92,8,34,93,8,252,22, -12,95,9,8,252,22,12,2,93,18,16,2,99,2,114,8,39,93,8,252,22, -12,16,6,8,38,11,2,143,2,144,3,1,7,101,110,118,51,57,53,53,153, -2,153,16,4,8,37,11,64,101,120,110,104,154,3,1,7,101,110,118,51,57, -53,54,155,16,4,8,36,11,63,101,115,99,156,3,1,7,101,110,118,51,57, -53,55,157,16,4,8,35,11,63,101,120,110,158,3,1,7,101,110,118,51,57, -53,57,159,95,9,8,252,22,12,2,93,18,100,2,94,8,42,38,37,36,50, -16,12,8,41,11,3,1,4,103,52,52,49,160,3,1,4,103,52,52,50,161, -3,1,4,103,52,52,51,162,3,1,4,103,52,52,52,163,3,1,4,103,52, -52,53,164,3,1,7,101,110,118,51,57,52,50,165,2,165,2,165,2,165,2, -165,16,12,8,40,11,2,99,2,113,2,100,2,115,2,116,3,1,7,101,110, -118,51,57,52,51,166,2,166,2,166,2,166,2,166,18,158,2,102,8,42,18, -158,2,112,8,42,18,158,2,102,8,42,18,158,2,64,8,42,18,158,2,102, -8,42,18,158,2,102,8,42,18,158,2,0,8,42,18,158,2,102,8,42,18, -158,2,102,8,42,18,16,2,95,2,92,8,43,93,8,252,29,12,95,9,8, -252,29,12,2,93,18,16,2,99,2,114,8,48,93,8,252,29,12,16,6,8, -47,11,2,143,2,144,3,1,7,101,110,118,51,57,57,50,167,2,167,16,4, -8,46,11,2,154,3,1,7,101,110,118,51,57,57,51,168,16,4,8,45,11, -2,156,3,1,7,101,110,118,51,57,57,52,169,16,4,8,44,11,2,158,3, -1,7,101,110,118,51,57,57,54,170,95,9,8,252,29,12,2,93,18,100,2, -94,8,51,38,37,36,50,16,16,8,50,11,3,1,4,103,52,51,52,171,3, -1,4,103,52,51,53,172,3,1,4,103,52,51,54,173,3,1,4,103,52,51, -55,174,3,1,4,103,52,51,56,175,3,1,4,103,52,51,57,176,3,1,4, -103,52,52,48,177,3,1,7,101,110,118,51,57,55,53,178,2,178,2,178,2, -178,2,178,2,178,2,178,16,16,8,49,11,2,99,2,113,2,100,2,115,2, -116,2,118,2,119,3,1,7,101,110,118,51,57,55,54,179,2,179,2,179,2, -179,2,179,2,179,2,179,18,158,2,102,8,51,18,158,2,117,8,51,18,158, -2,102,8,51,18,158,2,102,8,51,18,158,2,90,8,51,18,158,2,102,8, -51,18,158,2,102,8,51,18,158,2,102,8,51,18,158,2,112,8,51,18,158, -2,102,8,51,18,158,2,64,8,51,18,158,2,90,8,51,18,158,2,102,8, -51,18,158,2,102,8,51,18,158,2,0,8,51,18,158,2,102,8,51,18,158, -2,102,8,51,18,158,2,53,8,51,18,158,2,90,8,51,18,158,2,102,8, -51,18,158,2,102,8,51,18,158,2,102,8,51,11,16,5,93,2,62,87,95, -83,159,34,93,80,159,34,8,68,35,89,162,8,37,35,42,9,223,0,250,22, -209,20,15,159,37,8,37,47,249,22,60,248,22,52,199,248,22,78,199,20,15, -159,37,8,38,47,83,159,34,93,80,159,34,8,67,35,89,162,8,37,35,42, -9,223,0,250,22,209,20,15,159,37,50,47,249,22,60,248,22,52,199,248,22, -78,199,20,15,159,37,51,47,89,162,34,35,8,28,9,223,0,27,249,22,209, -20,15,159,37,34,47,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248, -80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80, -158,41,38,27,248,80,158,43,36,196,28,248,80,158,43,39,193,248,22,9,89, -162,34,35,41,9,224,9,1,27,249,22,2,89,162,34,35,50,9,224,4,5, -249,80,158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40, -36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,27,28,248,22,206, -194,193,200,249,80,158,43,35,248,80,158,44,36,196,27,248,80,158,45,37,197, -248,22,59,250,22,209,199,196,199,11,11,194,248,80,158,39,41,196,28,248,22, -57,193,21,95,9,9,9,248,80,158,37,42,193,11,27,248,80,158,43,37,196, -28,248,80,158,43,34,193,249,80,158,44,38,27,248,80,158,46,36,196,28,248, -80,158,46,34,193,249,80,158,47,35,248,80,158,48,36,195,27,248,80,158,49, -37,196,28,248,80,158,49,39,193,248,22,59,248,80,158,50,41,194,11,11,27, -248,80,158,46,37,196,28,248,80,158,46,39,193,248,80,158,46,41,193,11,11, -11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248, -22,90,197,27,249,22,70,199,38,27,249,22,70,200,39,27,249,22,69,201,40, -27,249,22,209,20,15,159,46,35,47,250,22,2,89,162,34,36,45,9,224,15, -16,27,249,22,209,20,15,159,38,36,47,198,27,248,80,158,38,43,194,28,192, -196,27,28,248,80,158,39,34,195,249,80,158,40,38,248,80,158,41,36,197,248, -80,158,41,43,248,80,158,42,37,198,11,28,192,192,250,22,252,39,2,11,6, -19,19,98,97,100,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120, -180,198,248,22,216,27,20,15,159,51,37,47,250,22,209,20,15,159,54,38,47, -23,16,195,248,22,216,27,20,15,159,51,39,47,250,22,209,20,15,159,54,40, -47,206,195,27,28,248,80,158,46,39,194,248,80,158,46,41,194,11,28,192,27, -249,22,209,20,15,159,48,41,47,27,20,15,159,49,42,47,250,22,209,20,15, -159,52,43,47,202,195,27,248,80,158,48,43,194,28,192,249,80,158,49,44,23, -16,27,252,22,61,206,23,16,202,23,17,204,27,20,15,159,51,44,47,91,159, -35,11,90,161,35,34,11,83,160,40,34,35,11,247,248,22,9,89,162,34,35, -42,9,226,19,2,3,1,250,22,31,89,162,34,34,38,9,225,6,3,7,90, -161,35,35,10,247,22,252,185,2,248,22,252,185,2,89,162,34,35,38,9,224, -3,1,248,193,89,162,34,34,38,9,224,2,3,28,248,22,252,182,2,193,248, -22,252,187,2,193,249,80,158,37,45,21,96,2,117,66,100,111,108,111,111,112, -181,94,94,63,118,97,114,182,64,105,110,105,116,183,2,114,95,2,112,94,63, -110,111,116,184,62,101,48,185,96,2,0,61,99,186,2,114,95,2,181,64,115, -116,101,112,187,2,114,20,15,159,37,45,47,89,162,8,36,34,8,34,9,225, -6,5,4,27,250,22,209,20,15,159,40,46,47,250,22,209,20,15,159,43,47, -47,251,22,60,20,15,159,47,48,47,20,15,159,47,49,47,250,22,2,80,159, -50,8,67,35,248,22,90,23,15,248,22,78,23,15,250,22,209,20,15,159,50, -52,47,250,22,60,20,15,159,53,53,47,250,22,209,20,15,159,56,54,47,249, -22,60,20,15,159,58,55,47,248,22,52,23,23,20,15,159,56,56,47,250,22, -209,20,15,159,56,57,47,249,22,56,20,15,159,58,58,47,249,22,65,248,22, -89,23,25,248,22,60,250,22,209,20,15,159,8,30,59,47,249,22,56,20,15, -159,8,32,8,26,47,248,22,87,23,31,20,15,159,8,30,8,27,47,20,15, -159,56,8,28,47,20,15,159,50,8,29,47,20,15,159,43,8,30,47,197,89, -162,8,36,34,35,9,223,0,192,89,162,34,34,36,9,223,3,248,22,252,185, -2,208,27,28,248,80,158,49,34,195,249,80,158,50,35,248,80,158,51,36,197, -27,248,80,158,52,37,198,28,248,80,158,52,39,193,248,80,158,52,41,193,11, -11,28,192,27,248,22,52,194,27,248,22,53,195,249,80,158,52,44,23,19,27, -254,22,61,23,22,23,21,203,23,17,202,23,19,23,15,27,20,15,159,54,8, -31,47,91,159,35,11,90,161,35,34,11,83,160,40,34,35,11,247,248,22,9, -89,162,34,35,42,9,226,22,2,3,1,250,22,31,89,162,34,34,38,9,225, -6,3,7,90,161,35,35,10,247,22,252,185,2,248,22,252,185,2,89,162,34, -35,38,9,224,3,1,248,193,89,162,34,34,38,9,224,2,3,28,248,22,252, -182,2,193,248,22,252,187,2,193,249,80,158,37,45,21,96,2,117,2,181,94, -94,2,182,2,183,2,114,96,2,112,2,185,96,2,0,2,115,2,116,2,114, -96,2,0,2,186,2,114,95,2,181,2,187,2,114,20,15,159,37,8,32,47, -89,162,8,36,34,8,36,9,225,6,5,4,27,250,22,209,20,15,159,40,8, -33,47,250,22,209,20,15,159,43,8,34,47,251,22,60,20,15,159,47,8,35, -47,20,15,159,47,8,36,47,250,22,2,80,159,50,8,68,35,248,22,52,23, -15,248,22,78,23,15,250,22,209,20,15,159,50,8,39,47,251,22,60,20,15, -159,54,8,40,47,249,22,70,23,20,39,250,22,209,20,15,159,57,8,41,47, -250,22,62,20,15,159,8,26,8,42,47,248,22,87,23,25,249,22,70,23,26, -38,20,15,159,57,8,43,47,250,22,209,20,15,159,57,8,44,47,249,22,56, -20,15,159,59,8,45,47,249,22,65,248,22,90,23,26,248,22,60,250,22,209, -20,15,159,8,31,8,46,47,249,22,56,20,15,159,8,33,8,47,47,249,22, -69,23,33,40,20,15,159,8,31,8,48,47,20,15,159,57,8,49,47,20,15, -159,50,8,50,47,20,15,159,43,8,51,47,197,89,162,8,36,34,35,9,223, -0,192,89,162,34,34,36,9,223,3,248,22,252,185,2,208,250,22,252,39,2, -11,2,65,197,248,80,158,46,46,20,15,159,46,8,52,47,250,22,252,39,2, -11,2,65,196,34,20,98,159,36,16,13,2,66,2,69,2,71,2,73,2,75, -2,79,30,188,2,67,73,115,116,120,45,99,104,101,99,107,47,101,115,99,189, -7,2,81,30,190,2,67,70,115,116,120,45,114,111,116,97,116,101,191,12,2, -77,2,125,2,128,30,192,70,35,37,119,105,116,104,45,115,116,120,193,76,119, -105,116,104,45,115,121,110,116,97,120,45,102,97,105,108,194,3,16,53,18,98, -2,83,8,53,38,37,36,16,4,8,52,11,66,111,114,105,103,45,120,195,3, -1,7,101,110,118,52,48,53,56,196,18,100,2,83,8,56,38,37,36,8,52, -16,16,8,55,11,3,1,4,103,52,53,50,197,3,1,4,103,52,53,51,198, -3,1,4,103,52,53,52,199,3,1,4,103,52,53,53,200,3,1,4,103,52, -53,54,201,3,1,4,103,52,53,55,202,3,1,4,103,52,53,56,203,3,1, -7,101,110,118,52,48,55,53,204,2,204,2,204,2,204,2,204,2,204,2,204, -16,16,8,54,11,2,99,2,182,2,183,2,187,2,185,2,115,2,186,3,1, -7,101,110,118,52,48,55,54,205,2,205,2,205,2,205,2,205,2,205,2,205, -18,101,2,83,8,58,38,37,36,8,52,8,55,8,54,16,6,8,57,11,2, -113,61,115,206,3,1,7,101,110,118,52,48,57,51,207,2,207,18,16,2,95, -2,92,8,59,93,8,252,80,12,95,9,8,252,80,12,2,93,18,158,2,94, -8,56,18,16,2,95,2,92,8,60,93,8,252,81,12,95,9,8,252,81,12, -2,93,18,158,2,94,8,56,18,101,2,83,8,62,38,37,36,8,52,8,55, -8,54,16,4,8,61,11,3,1,4,103,52,54,51,208,3,1,7,101,110,118, -52,49,49,53,209,18,16,2,95,2,92,8,63,93,8,252,89,12,95,9,8, -252,89,12,2,93,18,158,2,94,8,62,18,16,2,95,2,92,8,64,93,8, -252,93,12,95,9,8,252,93,12,2,93,18,16,2,99,2,114,8,69,93,8, -252,93,12,16,6,8,68,11,2,143,2,144,3,1,7,101,110,118,52,49,50, -54,210,2,210,16,4,8,67,11,2,154,3,1,7,101,110,118,52,49,50,55, -211,16,4,8,66,11,2,156,3,1,7,101,110,118,52,49,50,56,212,16,4, -8,65,11,2,158,3,1,7,101,110,118,52,49,51,48,213,95,9,8,252,93, -12,2,93,18,158,2,94,8,62,18,158,2,102,8,62,18,158,2,117,8,62, -18,158,2,181,8,62,18,158,2,102,8,62,18,158,2,102,8,62,18,158,2, -102,8,62,18,158,2,112,8,62,18,158,2,102,8,62,18,158,2,184,8,62, -18,158,2,102,8,62,18,158,2,102,8,62,18,158,2,0,8,62,18,158,2, -102,8,62,18,158,2,181,8,62,18,158,2,102,8,62,18,158,2,102,8,62, -18,158,2,102,8,62,18,158,2,102,8,62,18,16,2,95,2,92,8,70,93, -8,252,100,12,95,9,8,252,100,12,2,93,18,16,2,99,2,114,8,75,93, -8,252,100,12,16,6,8,74,11,2,143,2,144,3,1,7,101,110,118,52,49, -52,56,214,2,214,16,4,8,73,11,2,154,3,1,7,101,110,118,52,49,52, -57,215,16,4,8,72,11,2,156,3,1,7,101,110,118,52,49,53,48,216,16, -4,8,71,11,2,158,3,1,7,101,110,118,52,49,53,50,217,95,9,8,252, -100,12,2,93,18,103,2,94,8,78,38,37,36,8,52,8,55,8,54,8,61, -16,6,8,77,11,3,1,4,103,52,54,52,218,3,1,4,103,52,54,53,219, -3,1,7,101,110,118,52,49,52,49,220,2,220,16,4,8,76,11,2,116,3, -1,7,101,110,118,52,49,52,50,221,18,158,2,102,8,78,18,158,2,117,8, -78,18,158,2,181,8,78,18,158,2,102,8,78,18,158,2,102,8,78,18,158, -2,102,8,78,18,158,2,112,8,78,18,158,2,102,8,78,18,158,2,0,8, -78,18,158,2,102,8,78,18,158,2,102,8,78,18,158,2,0,8,78,18,158, -2,102,8,78,18,158,2,181,8,78,18,158,2,102,8,78,18,158,2,102,8, -78,18,158,2,102,8,78,18,158,2,102,8,78,18,16,2,158,94,16,2,98, -2,187,8,82,93,8,252,68,12,16,4,8,81,11,3,1,8,119,115,116,109, -112,52,53,57,222,3,1,7,101,110,118,52,48,57,50,223,16,4,8,80,11, -3,1,4,103,52,54,50,224,3,1,7,101,110,118,52,49,54,49,225,16,4, -8,79,11,65,95,101,108,115,101,226,3,1,7,101,110,118,52,49,54,50,227, -9,16,2,158,2,114,8,82,9,8,82,95,9,8,252,68,12,2,193,11,16, -5,93,2,55,89,162,34,35,57,9,223,0,27,249,22,209,20,15,159,37,34, -41,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196, -27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,248,80, -158,42,36,195,248,80,158,42,39,248,80,158,43,37,196,11,11,28,192,27,248, -22,52,194,27,248,22,53,195,249,80,158,40,40,199,27,20,15,159,41,35,41, -250,22,209,20,15,159,44,36,41,250,22,209,20,15,159,47,37,41,249,22,60, -20,15,159,49,38,41,250,22,209,20,15,159,52,39,41,250,22,60,20,15,159, -55,40,41,20,15,159,55,41,41,23,17,20,15,159,52,42,41,20,15,159,47, -43,41,195,250,22,252,39,2,11,2,65,196,34,20,98,159,34,16,7,2,66, -2,69,2,71,2,73,2,75,2,77,2,125,16,10,18,98,2,83,8,84,38, -37,36,16,4,8,83,11,2,90,3,1,7,101,110,118,52,49,54,54,228,18, -16,2,95,2,92,8,85,93,8,252,117,12,95,9,8,252,117,12,2,93,18, -100,2,94,8,88,38,37,36,8,83,16,6,8,87,11,3,1,4,103,52,54, -54,229,3,1,4,103,52,54,55,230,3,1,7,101,110,118,52,49,55,49,231, -2,231,16,6,8,86,11,2,55,63,101,120,112,232,3,1,7,101,110,118,52, -49,55,50,233,2,233,18,158,2,102,8,88,18,158,2,6,8,88,18,158,2, -102,8,88,18,158,66,108,97,109,98,100,97,234,8,88,18,158,9,8,88,18, -158,2,102,8,88,18,158,2,102,8,88,11,16,5,93,2,87,27,247,22,252, -89,3,253,22,60,248,199,20,15,159,42,34,34,248,199,20,15,159,42,35,34, -248,199,20,15,159,42,36,34,248,22,60,248,200,20,15,159,43,37,34,248,22, -60,248,200,20,15,159,43,38,34,10,43,20,98,159,34,16,0,16,5,18,97, -2,4,8,89,38,37,36,18,158,2,6,8,89,18,158,2,8,8,89,18,158, -2,10,8,89,18,158,2,12,8,89,11,16,5,93,2,59,89,162,34,35,57, -9,223,0,27,249,22,209,20,15,159,37,34,47,196,27,28,248,80,158,37,34, -194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248, -80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36,194,27,248,80,158, -41,37,194,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195, -27,248,80,158,44,37,196,28,248,80,158,44,39,193,248,80,158,44,40,193,11, -11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, -27,249,22,61,196,195,27,20,15,159,41,35,47,250,22,209,20,15,159,44,36, -47,250,22,209,20,15,159,47,37,47,250,22,62,20,15,159,50,38,47,20,15, -159,50,39,47,202,20,15,159,47,40,47,195,27,28,248,80,158,38,34,195,249, -80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37,198,28,248,80,158, -41,34,193,249,80,158,42,41,27,248,80,158,44,36,196,28,248,80,158,44,39, -193,248,22,9,89,162,34,35,41,9,224,10,1,27,249,22,2,89,162,34,35, -46,9,224,4,5,249,80,158,37,42,28,248,80,158,38,34,197,249,80,158,39, -35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193, -249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,38,248,80,158,44,37, -196,11,11,194,248,80,158,39,40,196,28,248,22,57,193,21,94,9,9,248,80, -158,37,43,193,11,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249,80, -158,45,35,248,80,158,46,36,195,27,248,80,158,47,37,196,28,248,80,158,47, -39,193,248,80,158,47,40,193,11,11,11,11,28,192,27,248,22,52,194,27,248, -22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,27,249,22, -209,20,15,159,45,41,47,249,22,1,22,65,250,22,2,22,59,248,22,216,27, -20,15,159,52,42,47,250,22,209,20,15,159,55,43,47,23,16,195,248,22,216, -27,20,15,159,52,44,47,250,22,209,20,15,159,55,45,47,23,15,195,27,28, -248,80,158,45,39,194,248,80,158,45,40,194,11,28,192,249,80,158,46,44,205, -27,250,22,61,201,200,198,27,20,15,159,48,46,47,91,159,35,11,90,161,35, -34,11,83,160,40,34,35,11,247,248,22,9,89,162,34,35,42,9,226,16,2, -3,1,250,22,31,89,162,34,34,38,9,225,6,3,7,90,161,35,35,10,247, -22,252,185,2,248,22,252,185,2,89,162,34,35,38,9,224,3,1,248,193,89, -162,34,34,38,9,224,2,3,28,248,22,252,182,2,193,248,22,252,187,2,193, -249,80,158,37,45,21,96,1,22,119,105,116,104,45,99,111,110,116,105,110,117, -97,116,105,111,110,45,109,97,114,107,235,2,21,96,2,19,95,1,27,99,111, -110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,45,115,101,116,45,102, -105,114,115,116,236,11,2,21,63,112,47,118,237,2,114,97,2,117,9,65,101, -120,112,114,49,238,64,101,120,112,114,239,2,114,20,15,159,37,47,47,89,162, -8,36,34,56,9,225,6,5,4,27,250,22,209,20,15,159,40,48,47,250,22, -209,20,15,159,43,49,47,251,22,60,20,15,159,47,50,47,20,15,159,47,51, -47,250,22,209,20,15,159,50,52,47,250,22,62,20,15,159,53,53,47,20,15, -159,53,54,47,248,22,80,23,18,20,15,159,50,55,47,250,22,209,20,15,159, -50,56,47,251,22,62,20,15,159,54,57,47,20,15,159,54,58,47,248,22,52, -23,19,248,22,78,23,19,20,15,159,50,59,47,20,15,159,43,8,26,47,197, -89,162,8,36,34,35,9,223,0,192,89,162,34,34,36,9,223,3,248,22,252, -185,2,208,248,80,158,45,46,20,15,159,45,8,27,47,250,22,252,39,2,11, -2,65,197,34,20,98,159,34,16,13,2,66,2,69,2,71,2,73,2,77,2, -79,2,81,2,75,2,188,2,190,2,125,2,128,2,192,16,28,18,98,2,83, -8,91,38,37,36,16,4,8,90,11,63,115,116,120,240,3,1,7,101,110,118, -52,49,56,50,241,18,16,2,95,2,92,8,92,93,8,252,150,12,95,9,8, -252,150,12,2,93,18,100,2,94,8,95,38,37,36,8,90,16,8,8,94,11, -3,1,4,103,52,55,52,242,3,1,4,103,52,55,53,243,3,1,4,103,52, -55,54,244,3,1,7,101,110,118,52,49,56,57,245,2,245,2,245,16,8,8, -93,11,2,99,2,238,2,239,3,1,7,101,110,118,52,49,57,48,246,2,246, -2,246,18,158,2,102,8,95,18,158,2,117,8,95,18,158,9,8,95,18,158, -2,102,8,95,18,100,2,83,8,98,38,37,36,8,90,16,12,8,97,11,3, -1,4,103,52,54,57,247,3,1,4,103,52,55,48,248,3,1,4,103,52,55, -49,249,3,1,4,103,52,55,50,250,3,1,4,103,52,55,51,251,3,1,7, -101,110,118,52,50,48,57,252,252,0,2,252,252,0,2,252,252,0,2,252,252, -0,2,252,252,0,16,12,8,96,11,2,99,65,112,97,114,97,109,252,253,0, -63,118,97,108,252,254,0,2,238,2,239,3,1,7,101,110,118,52,50,49,48, -252,255,0,2,252,255,0,2,252,255,0,2,252,255,0,2,252,255,0,18,16, -2,95,2,92,8,99,93,8,252,157,12,95,9,8,252,157,12,2,93,18,158, -2,94,8,98,18,16,2,95,2,92,8,100,93,8,252,158,12,95,9,8,252, -158,12,2,93,18,158,2,94,8,98,18,16,2,95,2,92,8,101,93,8,252, -164,12,95,9,8,252,164,12,2,93,18,16,2,99,2,114,8,106,93,8,252, -164,12,16,6,8,105,11,2,143,2,144,3,1,7,101,110,118,52,50,51,51, -252,0,1,2,252,0,1,16,4,8,104,11,2,154,3,1,7,101,110,118,52, -50,51,52,252,1,1,16,4,8,103,11,2,156,3,1,7,101,110,118,52,50, -51,53,252,2,1,16,4,8,102,11,2,158,3,1,7,101,110,118,52,50,51, -55,252,3,1,95,9,8,252,164,12,2,93,18,102,2,94,8,109,38,37,36, -8,90,8,97,8,96,16,4,8,108,11,3,1,4,103,52,55,57,252,4,1, -3,1,7,101,110,118,52,50,50,56,252,5,1,16,4,8,107,11,2,237,3, -1,7,101,110,118,52,50,50,57,252,6,1,18,158,2,102,8,109,18,158,2, -235,8,109,18,158,2,21,8,109,18,158,2,102,8,109,18,158,2,19,8,109, -18,158,95,16,2,158,2,236,8,109,9,16,2,158,11,8,109,9,16,2,158, -2,21,8,109,9,8,109,18,158,2,102,8,109,18,158,2,102,8,109,18,158, -2,117,8,109,18,158,9,8,109,18,158,2,102,8,109,18,158,2,102,8,109, -18,16,2,158,94,16,2,98,2,237,8,113,93,8,252,155,12,16,4,8,112, -11,3,1,8,119,115,116,109,112,52,55,55,252,7,1,3,1,7,101,110,118, -52,50,50,50,252,8,1,16,4,8,111,11,3,1,4,103,52,55,56,252,9, -1,3,1,7,101,110,118,52,50,52,52,252,10,1,16,4,8,110,11,2,226, -3,1,7,101,110,118,52,50,52,53,252,11,1,9,16,2,158,2,114,8,113, -9,8,113,95,9,8,252,155,12,2,193,11,16,5,93,2,54,89,162,34,35, -8,36,9,223,0,27,249,22,209,20,15,159,37,34,41,196,27,28,248,80,158, -37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, -28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80, -158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36, -195,27,248,80,158,46,37,196,28,248,80,158,46,38,193,248,80,158,46,39,193, -11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196, -27,248,22,88,197,249,80,158,42,40,201,27,250,22,61,199,198,200,27,20,15, -159,44,35,41,250,22,209,20,15,159,47,36,41,250,22,209,20,15,159,50,37, -41,251,22,60,20,15,159,54,38,41,20,15,159,54,39,41,250,22,209,20,15, -159,57,40,41,249,22,60,20,15,159,59,41,41,250,22,209,20,15,159,8,28, -42,41,250,22,62,20,15,159,8,31,43,41,248,22,80,23,23,20,15,159,8, -31,44,41,20,15,159,8,28,45,41,20,15,159,57,46,41,250,22,209,20,15, -159,57,47,41,250,22,60,20,15,159,8,26,48,41,20,15,159,8,26,49,41, -250,22,209,20,15,159,8,29,50,41,251,22,62,20,15,159,8,33,51,41,20, -15,159,8,33,52,41,248,22,52,23,25,248,22,78,23,25,20,15,159,8,29, -53,41,20,15,159,57,54,41,20,15,159,50,55,41,195,250,22,252,39,2,11, -2,65,196,34,20,98,159,34,16,7,2,66,2,69,2,71,2,73,2,79,2, -81,2,125,16,22,18,98,2,83,8,115,38,37,36,16,4,8,114,11,2,240, -3,1,7,101,110,118,52,50,52,57,252,12,1,18,16,2,95,2,92,8,116, -93,8,252,184,12,95,9,8,252,184,12,2,93,18,100,2,94,8,119,38,37, -36,8,114,16,10,8,118,11,3,1,4,103,52,56,48,252,13,1,3,1,4, -103,52,56,49,252,14,1,3,1,4,103,52,56,50,252,15,1,3,1,4,103, -52,56,51,252,16,1,3,1,7,101,110,118,52,50,53,54,252,17,1,2,252, -17,1,2,252,17,1,2,252,17,1,16,10,8,117,11,2,99,69,98,111,111, -108,45,101,120,112,114,252,18,1,2,238,2,239,3,1,7,101,110,118,52,50, -53,55,252,19,1,2,252,19,1,2,252,19,1,2,252,19,1,18,158,2,102, -8,119,18,158,2,235,8,119,18,158,2,47,8,119,18,158,2,102,8,119,18, -158,76,109,97,107,101,45,116,104,114,101,97,100,45,99,101,108,108,252,20,1, -8,119,18,158,2,102,8,119,18,158,63,97,110,100,252,21,1,8,119,18,16, -2,103,93,16,2,158,10,8,119,9,8,121,8,28,8,27,8,26,59,58,57, -13,16,4,35,2,137,2,93,11,93,8,252,184,12,16,6,8,120,11,2,143, -2,144,3,1,7,101,110,118,52,50,54,55,252,22,1,2,252,22,1,95,9, -8,252,184,12,2,93,18,158,2,102,8,119,18,158,2,102,8,119,18,158,2, -102,8,119,18,158,2,0,8,119,18,158,93,16,2,158,2,51,8,119,9,8, -119,18,158,2,102,8,119,18,158,2,117,8,119,18,158,9,8,119,18,158,2, -102,8,119,18,158,2,102,8,119,18,158,2,102,8,119,11,16,5,93,2,86, -27,247,22,252,89,3,253,22,60,248,199,20,15,159,42,34,34,248,199,20,15, -159,42,35,34,248,199,20,15,159,42,36,34,248,22,60,248,200,20,15,159,43, -37,34,248,22,60,248,200,20,15,159,43,38,34,10,43,20,98,159,34,16,0, -16,5,18,158,2,35,8,89,18,158,2,37,8,89,18,158,2,39,8,89,18, -158,2,41,8,89,18,158,2,43,8,89,11,16,5,94,2,57,2,61,87,94, -83,159,34,93,80,159,34,8,103,35,89,162,8,37,35,43,9,223,0,250,22, -209,20,15,159,37,54,46,250,22,60,20,15,159,40,55,46,248,22,52,200,248, -22,78,200,20,15,159,37,56,46,27,89,162,8,36,35,36,62,119,104,252,23, -1,223,1,89,162,34,35,55,9,224,0,1,27,249,22,209,20,15,159,38,34, -46,197,27,28,248,80,158,38,34,194,249,80,158,39,35,248,80,158,40,36,196, -27,248,80,158,41,37,197,28,248,80,158,41,34,193,28,248,80,158,41,38,248, -80,158,42,36,194,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80, -158,43,35,248,80,158,44,36,195,27,248,80,158,45,37,196,28,248,80,158,45, -39,193,248,80,158,45,40,193,11,11,11,11,11,28,192,27,248,22,52,194,27, -248,22,78,195,27,248,22,80,196,249,80,158,42,41,201,27,249,22,61,198,197, -27,20,15,159,44,35,46,250,22,209,20,15,159,47,36,46,250,22,209,20,15, -159,50,37,46,250,22,62,20,15,159,53,38,46,20,15,159,53,39,46,202,20, -15,159,50,40,46,195,27,28,248,80,158,39,34,195,249,80,158,40,35,248,80, -158,41,36,197,27,248,80,158,42,37,198,28,248,80,158,42,34,193,249,80,158, -43,42,27,248,80,158,45,36,196,28,248,80,158,45,39,193,248,22,9,89,162, -34,35,41,9,224,11,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249, -80,158,37,43,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36, -199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248, -80,158,43,36,195,248,80,158,43,38,248,80,158,44,37,196,11,11,194,248,80, -158,39,40,196,28,248,22,57,193,21,94,9,9,248,80,158,37,44,193,11,27, -248,80,158,45,37,196,28,248,80,158,45,34,193,249,80,158,46,35,248,80,158, -47,36,195,27,248,80,158,48,37,196,28,248,80,158,48,39,193,248,80,158,48, -40,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, -87,196,27,248,22,90,197,27,248,22,89,198,27,249,22,209,20,15,159,46,41, -46,28,203,20,15,159,46,42,46,20,15,159,46,43,46,249,80,158,46,41,205, -27,252,22,61,201,200,202,203,204,27,20,15,159,48,44,46,91,159,35,11,90, -161,35,34,11,83,160,40,34,35,11,247,248,22,9,89,162,34,35,42,9,226, -16,2,3,1,250,22,31,89,162,34,34,38,9,225,6,3,7,90,161,35,35, -10,247,22,252,185,2,248,22,252,185,2,89,162,34,35,38,9,224,3,1,248, -193,89,162,34,34,38,9,224,2,3,28,248,22,252,182,2,193,248,22,252,187, -2,193,249,80,158,37,45,21,95,2,117,93,94,61,108,252,24,1,95,64,108, -105,115,116,252,25,1,95,64,99,111,110,115,252,26,1,64,112,114,101,100,252, -27,1,67,104,97,110,100,108,101,114,252,28,1,2,114,95,2,117,93,94,63, -98,112,122,252,29,1,95,2,236,11,2,47,96,2,235,2,47,94,2,252,20, -1,11,93,94,67,99,97,108,108,47,101,99,252,30,1,95,2,234,93,2,100, -96,2,235,2,47,2,252,29,1,95,2,59,93,94,1,25,99,117,114,114,101, -110,116,45,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,252, -31,1,95,2,234,93,61,101,252,32,1,94,2,100,95,2,234,9,96,2,117, -64,108,111,111,112,252,33,1,93,94,2,252,24,1,2,252,24,1,96,2,135, -94,94,65,110,117,108,108,63,252,34,1,2,252,24,1,94,65,114,97,105,115, -101,252,35,1,2,252,32,1,94,94,94,64,99,97,97,114,252,36,1,2,252, -24,1,2,252,32,1,63,117,113,49,252,37,1,94,2,146,94,2,252,33,1, -94,63,99,100,114,252,38,1,2,252,24,1,95,76,99,97,108,108,45,119,105, -116,104,45,118,97,108,117,101,115,252,39,1,97,2,234,9,2,238,2,239,2, -114,95,2,234,64,97,114,103,115,252,40,1,95,2,234,9,95,65,97,112,112, -108,121,252,41,1,66,118,97,108,117,101,115,252,42,1,2,252,40,1,20,15, -159,37,45,46,89,162,8,36,34,8,100,9,225,6,5,4,27,250,22,209,20, -15,159,40,46,46,250,22,209,20,15,159,43,47,46,250,22,60,20,15,159,46, -48,46,250,22,209,20,15,159,49,49,46,248,22,60,250,22,209,20,15,159,53, -50,46,249,22,60,20,15,159,55,51,46,250,22,209,20,15,159,58,52,46,249, -22,56,20,15,159,8,26,53,46,250,22,2,80,159,8,29,8,103,35,248,22, -89,23,28,248,22,90,23,28,20,15,159,58,57,46,20,15,159,53,58,46,20, -15,159,49,59,46,250,22,209,20,15,159,49,8,26,46,250,22,60,20,15,159, -52,8,27,46,20,15,159,52,8,28,46,250,22,209,20,15,159,55,8,29,46, -251,22,60,20,15,159,59,8,30,46,20,15,159,59,8,31,46,20,15,159,59, -8,32,46,250,22,209,20,15,159,8,28,8,33,46,248,22,60,250,22,209,20, -15,159,8,32,8,34,46,249,22,60,20,15,159,8,34,8,35,46,250,22,209, -20,15,159,8,37,8,36,46,250,22,60,20,15,159,8,40,8,37,46,20,15, -159,8,40,8,38,46,250,22,209,20,15,159,8,43,8,39,46,251,22,60,20, -15,159,8,47,8,40,46,20,15,159,8,47,8,41,46,20,15,159,8,47,8, -42,46,250,22,209,20,15,159,8,50,8,43,46,250,22,60,20,15,159,8,53, -8,44,46,250,22,209,20,15,159,8,56,8,45,46,248,22,60,250,22,209,20, -15,159,8,60,8,46,46,249,22,60,20,15,159,8,62,8,47,46,250,22,209, -20,15,159,8,65,8,48,46,250,22,60,20,15,159,8,68,8,49,46,20,15, -159,8,68,8,50,46,250,22,209,20,15,159,8,71,8,51,46,249,22,60,20, -15,159,8,73,8,52,46,250,22,209,20,15,159,8,76,8,53,46,250,22,60, -20,15,159,8,79,8,54,46,20,15,159,8,79,8,55,46,250,22,209,20,15, -159,8,82,8,56,46,251,22,60,20,15,159,8,86,8,57,46,20,15,159,8, -86,8,58,46,20,15,159,8,86,8,59,46,250,22,209,20,15,159,8,89,8, -60,46,251,22,62,20,15,159,8,93,8,61,46,20,15,159,8,93,8,62,46, -250,22,209,20,15,159,8,96,8,63,46,249,22,60,20,15,159,8,98,8,64, -46,248,22,78,23,97,20,15,159,8,96,8,65,46,20,15,159,8,93,8,66, -46,20,15,159,8,89,8,67,46,20,15,159,8,82,8,68,46,20,15,159,8, -76,8,69,46,20,15,159,8,71,8,70,46,20,15,159,8,65,8,71,46,20, -15,159,8,60,8,72,46,20,15,159,8,56,8,73,46,250,22,209,20,15,159, -8,56,8,74,46,250,22,62,20,15,159,8,59,8,75,46,250,22,209,20,15, -159,8,62,8,76,46,251,22,62,20,15,159,8,66,8,77,46,20,15,159,8, -66,8,78,46,248,22,87,23,65,248,22,52,23,65,20,15,159,8,62,8,79, -46,20,15,159,8,59,8,80,46,20,15,159,8,56,8,81,46,20,15,159,8, -50,8,82,46,20,15,159,8,43,8,83,46,20,15,159,8,37,8,84,46,20, -15,159,8,32,8,85,46,20,15,159,8,28,8,86,46,20,15,159,55,8,87, -46,20,15,159,49,8,88,46,20,15,159,43,8,89,46,197,89,162,8,36,34, -35,9,223,0,192,89,162,34,34,36,9,223,3,248,22,252,185,2,208,250,22, -252,39,2,11,2,65,197,249,22,7,248,195,10,248,195,11,38,20,98,159,35, -16,12,2,66,2,69,2,71,2,73,2,77,2,79,2,81,2,125,2,75,2, -188,2,190,2,128,16,90,18,99,2,83,8,124,38,37,36,16,4,8,123,11, -74,100,105,115,97,98,108,101,45,98,114,101,97,107,63,252,43,1,3,1,7, -101,110,118,52,50,55,50,252,44,1,16,4,8,122,11,2,240,3,1,7,101, -110,118,52,50,55,51,252,45,1,18,16,2,95,2,92,8,125,93,8,252,219, -12,95,9,8,252,219,12,2,93,18,101,2,94,8,128,38,37,36,8,123,8, -122,16,8,8,127,11,3,1,4,103,52,57,48,252,46,1,3,1,4,103,52, -57,49,252,47,1,3,1,4,103,52,57,50,252,48,1,3,1,7,101,110,118, -52,50,56,48,252,49,1,2,252,49,1,2,252,49,1,16,8,8,126,11,2, -99,2,238,2,239,3,1,7,101,110,118,52,50,56,49,252,50,1,2,252,50, -1,2,252,50,1,18,158,2,102,8,128,18,158,2,117,8,128,18,158,9,8, -128,18,158,2,102,8,128,18,101,2,83,8,131,38,37,36,8,123,8,122,16, -12,8,130,11,3,1,4,103,52,56,53,252,51,1,3,1,4,103,52,56,54, -252,52,1,3,1,4,103,52,56,55,252,53,1,3,1,4,103,52,56,56,252, -54,1,3,1,4,103,52,56,57,252,55,1,3,1,7,101,110,118,52,51,48, -48,252,56,1,2,252,56,1,2,252,56,1,2,252,56,1,2,252,56,1,16, -12,8,129,11,2,99,2,252,27,1,2,252,28,1,2,238,2,239,3,1,7, -101,110,118,52,51,48,49,252,57,1,2,252,57,1,2,252,57,1,2,252,57, -1,2,252,57,1,18,158,95,16,2,158,66,98,101,103,105,110,48,252,58,1, -8,131,9,16,2,158,94,16,2,158,94,16,2,158,64,99,100,97,114,252,59, -1,8,131,9,16,2,158,2,252,24,1,8,131,9,8,131,9,16,2,158,2, -252,32,1,8,131,9,8,131,9,16,2,158,96,16,2,158,2,235,8,131,9, -16,2,158,2,47,8,131,9,16,2,158,2,252,29,1,8,131,9,16,2,158, -93,16,2,158,2,51,8,131,9,8,131,9,8,131,9,8,131,18,158,96,16, -2,158,2,235,8,131,9,16,2,158,2,47,8,131,9,16,2,158,2,252,29, -1,8,131,9,16,2,158,95,16,2,158,2,0,8,131,9,16,2,158,93,16, -2,158,2,51,8,131,9,8,131,9,16,2,158,94,16,2,158,94,16,2,158, -2,252,59,1,8,131,9,16,2,158,2,252,24,1,8,131,9,8,131,9,16, -2,158,2,252,32,1,8,131,9,8,131,9,8,131,9,8,131,18,16,2,95, -2,92,8,132,93,8,252,237,12,95,9,8,252,237,12,2,93,18,16,2,99, -2,114,8,137,93,8,252,237,12,16,6,8,136,11,2,143,2,144,3,1,7, -101,110,118,52,51,50,54,252,60,1,2,252,60,1,16,4,8,135,11,2,154, -3,1,7,101,110,118,52,51,50,55,252,61,1,16,4,8,134,11,2,156,3, -1,7,101,110,118,52,51,50,56,252,62,1,16,4,8,133,11,2,158,3,1, -7,101,110,118,52,51,51,48,252,63,1,95,9,8,252,237,12,2,93,18,158, -2,94,8,131,18,158,2,102,8,131,18,158,2,117,8,131,18,158,2,102,8, -131,18,158,2,102,8,131,18,158,2,252,24,1,8,131,18,158,2,102,8,131, -18,158,2,252,25,1,8,131,18,158,2,102,8,131,18,158,2,252,26,1,8, -131,18,158,2,102,8,131,18,158,2,102,8,131,18,158,2,102,8,131,18,158, -2,102,8,131,18,158,2,102,8,131,18,158,2,117,8,131,18,158,93,16,2, -158,94,16,2,158,2,252,29,1,8,131,9,16,2,158,95,16,2,158,2,236, -8,131,9,16,2,158,11,8,131,9,16,2,158,2,47,8,131,9,8,131,9, -8,131,9,8,131,18,158,2,102,8,131,18,158,2,235,8,131,18,158,2,47, -8,131,18,158,94,16,2,158,2,252,20,1,8,131,9,16,2,158,11,8,131, -9,8,131,18,158,2,102,8,131,18,158,2,102,8,131,18,158,2,252,30,1, -8,131,18,158,2,102,8,131,18,158,2,234,8,131,18,158,93,16,2,158,2, -100,8,131,9,8,131,18,158,2,102,8,131,18,158,2,235,8,131,18,158,2, -47,8,131,18,158,2,252,29,1,8,131,18,158,2,102,8,131,18,158,2,59, -8,131,18,158,2,102,8,131,18,158,2,102,8,131,18,158,2,252,31,1,8, -131,18,158,2,102,8,131,18,158,2,234,8,131,18,158,93,16,2,158,2,252, -32,1,8,131,9,8,131,18,158,2,102,8,131,18,158,2,100,8,131,18,158, -2,102,8,131,18,158,2,234,8,131,18,158,9,8,131,18,158,2,102,8,131, -18,158,2,117,8,131,18,158,2,252,33,1,8,131,18,158,93,16,2,158,94, -16,2,158,2,252,24,1,8,131,9,16,2,158,2,252,24,1,8,131,9,8, -131,9,8,131,18,158,2,102,8,131,18,158,2,135,8,131,18,158,94,16,2, -158,94,16,2,158,2,252,34,1,8,131,9,16,2,158,2,252,24,1,8,131, -9,8,131,9,16,2,158,94,16,2,158,2,252,35,1,8,131,9,16,2,158, -2,252,32,1,8,131,9,8,131,9,8,131,18,158,2,102,8,131,18,158,94, -16,2,158,94,16,2,158,2,252,36,1,8,131,9,16,2,158,2,252,24,1, -8,131,9,8,131,9,16,2,158,2,252,32,1,8,131,9,8,131,18,158,2, -102,8,131,18,16,2,105,93,16,2,158,94,16,2,158,2,146,8,131,9,16, -2,158,94,16,2,158,2,252,33,1,8,131,9,16,2,158,94,16,2,158,2, -252,38,1,8,131,9,16,2,158,2,252,24,1,8,131,9,8,131,9,8,131, -9,8,131,9,8,141,8,28,8,27,8,26,59,58,57,13,16,4,35,2,137, -2,93,11,93,8,252,237,12,16,6,8,140,11,2,143,2,144,2,252,60,1, -2,252,60,1,16,4,8,139,11,2,154,2,252,61,1,16,4,8,138,11,2, -156,2,252,62,1,95,9,8,252,237,12,2,93,18,158,2,102,8,131,18,158, -2,102,8,131,18,158,2,102,8,131,18,158,2,102,8,131,18,158,2,102,8, -131,18,158,2,102,8,131,18,158,2,102,8,131,18,158,2,102,8,131,18,158, -2,252,39,1,8,131,18,158,2,102,8,131,18,158,2,234,8,131,18,158,9, -8,131,18,158,2,102,8,131,18,16,2,158,93,16,2,158,95,16,2,158,2, -234,8,131,9,16,2,158,2,252,40,1,8,131,9,16,2,158,95,16,2,158, -2,234,8,131,9,16,2,158,9,8,131,9,16,2,158,95,16,2,158,2,252, -41,1,8,131,9,16,2,158,2,252,42,1,8,131,9,16,2,158,2,252,40, -1,8,131,9,8,131,9,8,131,9,8,131,9,8,141,95,9,8,252,237,12, -2,93,18,158,2,102,8,131,18,158,2,102,8,131,18,158,2,102,8,131,18, -158,2,102,8,131,18,158,2,102,8,131,18,158,2,102,8,131,18,158,2,102, -8,131,18,158,2,102,8,131,18,158,2,102,8,131,11,16,5,93,2,56,87, -95,83,159,34,93,80,159,34,8,52,35,89,162,34,36,49,68,116,114,121,45, -110,101,120,116,252,64,1,223,0,27,28,248,80,158,36,34,195,249,80,158,37, -35,248,80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34,193, -249,80,158,40,39,27,248,80,158,42,36,196,28,248,80,158,42,40,193,248,22, -59,248,80,158,43,41,194,11,27,248,80,158,42,37,196,28,248,80,158,42,34, -193,249,80,158,43,39,248,80,158,44,36,195,248,80,158,44,38,248,80,158,45, -37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80, -196,28,27,248,80,158,40,41,27,20,15,159,41,46,48,250,22,209,20,15,159, -44,47,48,199,195,87,94,249,22,3,89,162,34,35,41,9,224,7,9,28,248, -80,158,36,42,195,12,251,22,252,39,2,11,6,17,17,110,111,116,32,97,110, -32,105,100,101,110,116,105,102,105,101,114,252,65,1,196,198,194,27,248,80,158, -41,43,194,28,192,251,22,252,39,2,11,6,20,20,100,117,112,108,105,99,97, -116,101,32,105,100,101,110,116,105,102,105,101,114,252,66,1,204,196,12,27,249, -22,209,20,15,159,41,48,48,248,80,158,42,44,27,20,15,159,43,49,48,250, -22,209,20,15,159,46,50,48,201,195,27,28,248,80,158,41,40,194,248,80,158, -41,41,194,11,28,192,249,80,158,42,45,202,27,250,22,61,200,198,201,27,20, -15,159,44,51,48,91,159,35,11,90,161,35,34,11,83,160,40,34,35,11,247, -248,22,9,89,162,34,35,42,9,226,12,2,3,1,250,22,31,89,162,34,34, -38,9,225,6,3,7,90,161,35,35,10,247,22,252,185,2,248,22,252,185,2, -89,162,34,35,38,9,224,3,1,248,193,89,162,34,34,38,9,224,2,3,28, -248,22,252,182,2,193,248,22,252,187,2,193,249,80,158,37,46,21,96,70,108, -101,116,45,118,97,108,117,101,115,252,67,1,93,94,94,64,116,101,109,112,252, -68,1,2,114,2,239,95,64,115,101,116,33,252,69,1,62,105,100,252,70,1, -2,252,68,1,2,114,20,15,159,37,52,48,89,162,8,36,34,57,9,225,6, -5,4,27,250,22,209,20,15,159,40,53,48,250,22,209,20,15,159,43,54,48, -250,22,62,20,15,159,46,55,48,250,22,209,20,15,159,49,56,48,248,22,60, -250,22,209,20,15,159,53,57,48,249,22,60,248,22,78,23,20,248,22,52,23, -20,20,15,159,53,58,48,20,15,159,49,59,48,250,22,2,80,159,49,8,51, -35,248,22,80,206,248,22,78,206,20,15,159,43,8,29,48,197,89,162,8,36, -34,35,9,223,0,192,89,162,34,34,36,9,223,3,248,22,252,185,2,208,248, -80,158,41,47,20,15,159,41,8,30,48,250,22,252,39,2,11,2,65,200,250, -22,252,39,2,11,2,65,197,83,159,34,93,80,159,34,8,51,35,89,162,8, -37,35,43,9,223,0,250,22,209,20,15,159,37,8,26,48,250,22,60,20,15, -159,40,8,27,48,248,22,52,200,248,22,78,200,20,15,159,37,8,28,48,89, -162,34,35,59,9,223,0,27,249,22,209,20,15,159,37,34,48,196,27,28,248, -80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40, -37,197,28,248,80,158,40,34,193,28,248,80,158,40,38,248,80,158,41,36,194, -27,248,80,158,41,37,194,28,248,80,158,41,34,193,249,80,158,42,39,248,80, -158,43,36,195,248,80,158,43,38,248,80,158,44,37,196,11,11,11,11,28,192, -27,248,22,52,194,27,248,22,53,195,27,20,15,159,39,35,48,250,22,209,20, -15,159,42,36,48,250,22,209,20,15,159,45,37,48,250,22,62,20,15,159,48, -38,48,250,22,209,20,15,159,51,39,48,248,22,60,250,22,209,20,15,159,55, -40,48,249,22,60,20,15,159,57,41,48,23,19,20,15,159,55,42,48,20,15, -159,51,43,48,20,15,159,48,44,48,20,15,159,45,45,48,195,27,28,248,80, -158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37, -198,28,248,80,158,41,34,193,249,80,158,42,39,27,248,80,158,44,36,196,28, -248,80,158,44,34,193,249,80,158,45,35,248,80,158,46,36,195,248,80,158,46, -38,248,80,158,47,37,196,11,27,248,80,158,44,37,196,28,248,80,158,44,34, -193,249,80,158,45,39,248,80,158,46,36,195,248,80,158,46,38,248,80,158,47, -37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80, -196,28,248,80,158,41,42,194,27,249,22,61,196,195,27,20,15,159,42,8,31, -48,250,22,209,20,15,159,45,8,32,48,250,22,209,20,15,159,48,8,33,48, -250,22,60,20,15,159,51,8,34,48,248,22,52,203,248,22,53,203,20,15,159, -48,8,35,48,195,249,80,159,42,8,52,35,199,201,249,80,159,39,8,52,35, -196,198,34,20,98,159,36,16,14,2,66,2,69,2,71,2,73,2,77,2,75, -2,79,2,81,2,123,30,252,71,1,2,89,1,26,99,104,101,99,107,45,100, -117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,252,72, -1,0,30,252,73,1,2,193,1,20,103,101,110,101,114,97,116,101,45,116,101, -109,112,111,114,97,114,105,101,115,252,74,1,0,2,125,2,128,2,192,16,36, -18,98,2,83,8,143,38,37,36,16,4,8,142,11,2,240,3,1,7,101,110, -118,52,51,51,57,252,75,1,18,16,2,95,2,92,8,144,93,8,252,8,13, -95,9,8,252,8,13,2,93,18,100,2,94,8,147,38,37,36,8,142,16,6, -8,146,11,3,1,4,103,53,48,50,252,76,1,3,1,4,103,53,48,51,252, -77,1,3,1,7,101,110,118,52,51,52,53,252,78,1,2,252,78,1,16,6, -8,145,11,2,99,2,239,3,1,7,101,110,118,52,51,52,54,252,79,1,2, -252,79,1,18,158,2,102,8,147,18,158,2,252,67,1,8,147,18,158,2,102, -8,147,18,158,2,102,8,147,18,158,9,8,147,18,158,2,102,8,147,18,158, -2,102,8,147,18,16,2,103,93,16,2,158,93,16,2,158,64,118,111,105,100, -252,80,1,8,147,9,8,147,9,8,149,8,28,8,27,8,26,59,58,57,13, -16,4,35,2,137,2,93,11,93,8,252,8,13,16,6,8,148,11,2,143,2, -144,3,1,7,101,110,118,52,51,53,50,252,81,1,2,252,81,1,95,9,8, -252,8,13,2,93,18,158,2,102,8,147,18,16,2,95,2,92,8,150,93,8, -252,14,13,95,9,8,252,14,13,2,93,18,100,2,94,8,153,38,37,36,8, -142,16,8,8,152,11,3,1,4,103,52,57,54,252,82,1,3,1,4,103,52, -57,55,252,83,1,3,1,4,103,52,57,56,252,84,1,3,1,7,101,110,118, -52,51,54,50,252,85,1,2,252,85,1,2,252,85,1,16,8,8,151,11,2, -99,2,252,70,1,2,239,3,1,7,101,110,118,52,51,54,51,252,86,1,2, -252,86,1,2,252,86,1,18,158,2,83,8,153,18,16,2,95,2,92,8,154, -93,8,252,20,13,95,9,8,252,20,13,2,93,18,158,2,94,8,153,18,16, -2,95,2,92,8,155,93,8,252,26,13,95,9,8,252,26,13,2,93,18,16, -2,99,2,114,8,160,93,8,252,26,13,16,6,8,159,11,2,143,2,144,3, -1,7,101,110,118,52,51,56,52,252,87,1,2,252,87,1,16,4,8,158,11, -2,154,3,1,7,101,110,118,52,51,56,53,252,88,1,16,4,8,157,11,2, -156,3,1,7,101,110,118,52,51,56,54,252,89,1,16,4,8,156,11,2,158, -3,1,7,101,110,118,52,51,56,56,252,90,1,95,9,8,252,26,13,2,93, -18,102,2,94,8,163,38,37,36,8,142,8,152,8,151,16,4,8,162,11,3, -1,4,103,53,48,54,252,91,1,3,1,7,101,110,118,52,51,55,57,252,92, -1,16,4,8,161,11,2,252,68,1,3,1,7,101,110,118,52,51,56,48,252, -93,1,18,158,2,102,8,163,18,158,2,252,67,1,8,163,18,158,2,102,8, -163,18,158,2,102,8,163,18,158,2,102,8,163,18,158,2,102,8,163,18,158, -2,102,8,163,18,158,2,252,69,1,8,163,18,158,2,102,8,163,18,158,2, -102,8,163,18,16,2,158,94,16,2,98,2,252,68,1,8,167,93,8,252,18, -13,16,4,8,166,11,3,1,8,119,115,116,109,112,53,48,52,252,94,1,3, -1,7,101,110,118,52,51,55,52,252,95,1,16,4,8,165,11,3,1,4,103, -53,48,53,252,96,1,3,1,7,101,110,118,52,51,57,55,252,97,1,16,4, -8,164,11,2,226,3,1,7,101,110,118,52,51,57,56,252,98,1,9,16,2, -158,2,114,8,167,9,8,167,95,9,8,252,18,13,2,193,18,16,2,95,2, -92,8,168,93,8,252,35,13,95,9,8,252,35,13,2,93,18,100,2,94,8, -171,38,37,36,8,142,16,8,8,170,11,3,1,4,103,52,57,57,252,99,1, -3,1,4,103,53,48,48,252,100,1,3,1,4,103,53,48,49,252,101,1,3, -1,7,101,110,118,52,52,48,54,252,102,1,2,252,102,1,2,252,102,1,16, -8,8,169,11,2,99,2,252,70,1,2,239,3,1,7,101,110,118,52,52,48, -55,252,103,1,2,252,103,1,2,252,103,1,18,158,2,102,8,171,18,158,2, -252,69,1,8,171,18,158,2,102,8,171,11,16,5,93,2,60,89,162,34,35, -8,32,9,223,0,27,249,22,209,20,15,159,37,34,41,196,27,28,248,80,158, -37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197, -28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80, -158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36, -195,27,248,80,158,46,37,196,28,248,80,158,46,38,193,248,80,158,46,39,193, -11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196, -27,248,22,88,197,249,80,158,42,40,201,27,250,22,61,199,200,198,27,20,15, -159,44,35,41,250,22,209,20,15,159,47,36,41,250,22,209,20,15,159,50,37, -41,249,22,60,20,15,159,52,38,41,250,22,209,20,15,159,55,39,41,251,22, -62,20,15,159,59,40,41,250,22,209,20,15,159,8,28,41,41,248,22,60,248, -22,78,23,21,20,15,159,8,28,42,41,248,22,52,23,17,248,22,80,23,17, -20,15,159,55,43,41,20,15,159,50,44,41,195,250,22,252,39,2,11,2,65, -196,34,20,98,159,34,16,7,2,66,2,69,2,71,2,73,2,79,2,81,2, -125,16,11,18,98,2,83,8,173,38,37,36,16,4,8,172,11,2,240,3,1, -7,101,110,118,52,52,49,54,252,104,1,18,16,2,95,2,92,8,174,93,8, -252,48,13,95,9,8,252,48,13,2,93,18,100,2,94,8,177,38,37,36,8, -172,16,10,8,176,11,3,1,4,103,53,48,55,252,105,1,3,1,4,103,53, -48,56,252,106,1,3,1,4,103,53,48,57,252,107,1,3,1,4,103,53,49, -48,252,108,1,3,1,7,101,110,118,52,52,50,51,252,109,1,2,252,109,1, -2,252,109,1,2,252,109,1,16,10,8,175,11,2,99,2,182,65,98,111,100, -121,49,252,110,1,64,98,111,100,121,252,111,1,3,1,7,101,110,118,52,52, -50,52,252,112,1,2,252,112,1,2,252,112,1,2,252,112,1,18,158,2,102, -8,177,18,158,67,99,97,108,108,47,99,99,252,113,1,8,177,18,158,2,102, -8,177,18,158,2,234,8,177,18,158,2,102,8,177,18,158,2,102,8,177,18, -158,2,102,8,177,18,158,2,102,8,177,11,16,5,93,2,52,89,162,34,35, -51,9,223,0,27,249,22,209,20,15,159,37,34,43,196,27,28,248,80,158,37, -34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28, -248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158, -43,37,196,28,248,80,158,43,34,193,249,80,158,44,38,27,248,80,158,46,36, -196,28,248,80,158,46,39,193,248,22,59,248,80,158,47,40,194,11,27,248,80, -158,46,37,196,28,248,80,158,46,34,193,249,80,158,47,35,248,80,158,48,36, -195,27,248,80,158,49,37,196,28,248,80,158,49,39,193,248,80,158,49,40,193, -11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87, -196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,41,202,27,251,22,61, -199,200,202,201,27,20,15,159,45,35,43,91,159,35,11,90,161,35,34,11,83, -160,40,34,35,11,247,248,22,9,89,162,34,35,42,9,226,13,2,3,1,250, -22,31,89,162,34,34,38,9,225,6,3,7,90,161,35,35,10,247,22,252,185, -2,248,22,252,185,2,89,162,34,35,38,9,224,3,1,248,193,89,162,34,34, -38,9,224,2,3,28,248,22,252,182,2,193,248,22,252,187,2,193,249,80,158, -37,42,21,98,2,117,9,95,73,100,101,102,105,110,101,45,115,116,114,117,99, -116,252,114,1,64,98,97,115,101,252,115,1,94,65,102,105,101,108,100,252,116, -1,2,114,2,252,110,1,2,252,111,1,2,114,20,15,159,37,36,43,89,162, -8,36,34,56,9,225,6,5,4,27,250,22,209,20,15,159,40,37,43,250,22, -209,20,15,159,43,38,43,252,22,62,20,15,159,48,39,43,20,15,159,48,40, -43,250,22,209,20,15,159,51,41,43,250,22,60,20,15,159,54,42,43,248,22, -87,23,19,248,22,88,23,19,20,15,159,51,43,43,248,22,78,205,248,22,52, -205,20,15,159,43,44,43,197,89,162,8,36,34,35,9,223,0,192,89,162,34, -34,36,9,223,3,248,22,252,185,2,208,250,22,252,39,2,11,2,65,196,34, -20,98,159,34,16,9,2,66,2,69,2,71,2,73,2,75,2,79,2,81,2, -125,2,128,16,11,18,98,2,83,8,179,38,37,36,16,4,8,178,11,2,240, -3,1,7,101,110,118,52,52,51,54,252,117,1,18,16,2,95,2,92,8,180, -93,8,252,64,13,95,9,8,252,64,13,2,93,18,16,2,99,2,114,8,185, -93,8,252,64,13,16,6,8,184,11,2,143,2,144,3,1,7,101,110,118,52, -52,53,56,252,118,1,2,252,118,1,16,4,8,183,11,2,154,3,1,7,101, -110,118,52,52,53,57,252,119,1,16,4,8,182,11,2,156,3,1,7,101,110, -118,52,52,54,48,252,120,1,16,4,8,181,11,2,158,3,1,7,101,110,118, -52,52,54,50,252,121,1,95,9,8,252,64,13,2,93,18,100,2,94,8,188, -38,37,36,8,178,16,12,8,187,11,3,1,4,103,53,49,49,252,122,1,3, -1,4,103,53,49,50,252,123,1,3,1,4,103,53,49,51,252,124,1,3,1, -4,103,53,49,52,252,125,1,3,1,4,103,53,49,53,252,126,1,3,1,7, -101,110,118,52,52,52,53,252,127,1,2,252,127,1,2,252,127,1,2,252,127, -1,2,252,127,1,16,12,8,186,11,2,99,2,252,115,1,2,252,116,1,2, -252,110,1,2,252,111,1,3,1,7,101,110,118,52,52,52,54,252,128,1,2, -252,128,1,2,252,128,1,2,252,128,1,2,252,128,1,18,158,2,102,8,188, -18,158,2,117,8,188,18,158,9,8,188,18,158,2,102,8,188,18,158,2,252, -114,1,8,188,18,158,2,102,8,188,18,158,2,102,8,188,11,16,5,93,2, -63,87,95,83,159,34,93,80,159,34,8,71,35,89,162,8,37,35,53,9,223, -0,250,22,209,20,15,159,37,59,48,251,22,60,20,15,159,41,8,26,48,250, -22,209,20,15,159,44,8,27,48,248,22,60,250,22,209,20,15,159,48,8,28, -48,249,22,60,20,15,159,50,8,29,48,248,22,52,23,18,20,15,159,48,8, -30,48,20,15,159,44,8,31,48,250,22,209,20,15,159,44,8,32,48,250,22, -60,20,15,159,47,8,33,48,248,22,52,23,15,248,22,87,23,15,20,15,159, -44,8,34,48,250,22,209,20,15,159,44,8,35,48,250,22,62,20,15,159,47, -8,36,48,248,22,87,23,15,20,15,159,47,8,37,48,20,15,159,44,8,38, -48,20,15,159,37,8,39,48,83,159,34,93,80,159,34,8,70,35,89,162,8, -37,35,42,9,223,0,250,22,209,20,15,159,37,49,48,249,22,60,248,22,52, -199,248,22,78,199,20,15,159,37,50,48,89,162,34,35,54,9,223,0,27,249, -22,209,20,15,159,37,34,48,196,27,28,248,80,158,37,34,194,249,80,158,38, -35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193, -28,248,80,158,40,38,248,80,158,41,36,194,27,248,80,158,41,37,194,28,248, -80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,27,248,80,158,44, -37,196,28,248,80,158,44,39,193,248,80,158,44,40,193,11,11,11,11,11,28, -192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,249,80,158,41,41, -200,27,249,22,61,198,197,27,20,15,159,43,35,48,250,22,209,20,15,159,46, -36,48,250,22,209,20,15,159,49,37,48,250,22,62,20,15,159,52,38,48,20, -15,159,52,39,48,202,20,15,159,49,40,48,195,27,28,248,80,158,38,34,195, -249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41,37,198,28,248,80, -158,41,34,193,249,80,158,42,42,27,248,80,158,44,36,196,28,248,80,158,44, -39,193,248,22,9,89,162,34,35,41,9,224,10,1,27,249,22,2,89,162,34, -35,46,9,224,4,5,249,80,158,37,43,28,248,80,158,38,34,197,249,80,158, +22,70,200,39,27,249,22,69,201,40,249,80,158,48,44,23,15,27,253,22,61, +201,203,205,202,206,204,250,80,158,52,45,89,162,34,34,46,9,224,18,3,26, +8,80,158,43,40,20,15,159,43,40,46,21,98,3,1,4,103,55,50,56,130, +3,1,4,103,55,50,57,131,3,1,4,103,55,51,49,132,3,1,4,103,55, +51,48,133,3,1,4,103,55,51,51,134,3,1,4,103,55,51,50,135,249,22, +70,202,38,248,22,87,201,249,22,69,202,39,248,22,78,201,248,22,90,201,248, +22,52,201,21,95,63,108,101,116,136,93,94,2,99,2,126,96,2,125,95,2, +64,2,99,94,2,107,2,127,96,2,0,2,128,2,129,2,127,97,2,63,2, +99,62,99,49,137,62,99,50,138,2,127,20,15,159,52,41,46,27,28,248,80, +158,41,34,198,249,80,158,42,35,248,80,158,43,36,200,27,248,80,158,44,37, +201,28,248,80,158,44,34,193,27,28,248,22,206,194,193,201,249,80,158,46,35, +248,80,158,47,36,196,27,248,80,158,48,37,197,28,248,80,158,48,34,193,27, +28,248,22,206,194,193,196,249,80,158,50,38,27,248,80,158,52,36,197,28,248, +80,158,52,34,193,249,80,158,53,35,248,80,158,54,36,195,27,248,80,158,55, +37,196,28,248,80,158,55,34,193,249,80,158,56,35,248,80,158,57,36,195,27, +248,80,158,58,37,196,28,248,80,158,58,42,193,248,22,59,248,80,158,59,43, +194,11,11,11,27,248,80,158,52,37,197,250,22,209,198,195,198,11,11,11,28, +192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197, +27,249,22,70,199,38,27,249,22,69,200,39,251,22,252,39,2,11,6,33,33, +98,97,100,32,115,121,110,116,97,120,32,40,110,111,116,32,97,32,100,97,116, +117,109,32,115,101,113,117,101,110,99,101,41,139,23,17,199,27,28,248,80,158, +42,34,199,249,80,158,43,35,248,80,158,44,36,201,27,248,80,158,45,37,202, +28,248,80,158,45,34,193,27,28,248,22,206,194,193,202,249,80,158,47,35,248, +80,158,48,36,196,27,248,80,158,49,37,197,28,248,80,158,49,34,193,27,28, +248,22,206,194,193,196,249,80,158,51,35,248,80,158,52,36,196,27,248,80,158, +53,37,197,250,22,209,198,195,198,11,11,11,28,192,27,248,22,52,194,27,248, +22,78,195,27,248,22,87,196,27,248,22,88,197,251,22,252,39,2,11,6,52, +52,98,97,100,32,115,121,110,116,97,120,32,40,109,105,115,115,105,110,103,32, +101,120,112,114,101,115,115,105,111,110,32,97,102,116,101,114,32,100,97,116,117, +109,32,115,101,113,117,101,110,99,101,41,140,23,16,197,27,28,248,80,158,43, +34,200,249,80,158,44,35,248,80,158,45,36,202,27,248,80,158,46,37,203,250, +22,209,205,195,205,11,28,192,27,248,22,52,194,27,248,22,53,195,28,248,22, +57,248,22,210,194,250,22,252,39,2,11,2,71,204,250,22,252,39,2,11,6, +31,31,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101,103,97,108, +32,117,115,101,32,111,102,32,96,46,39,41,141,206,250,22,252,39,2,11,2, +71,202,34,20,98,159,34,16,12,2,72,2,75,2,77,2,79,2,81,2,83, +2,85,30,142,2,73,71,105,100,101,110,116,105,102,105,101,114,63,143,2,2, +88,2,90,30,144,68,35,37,115,116,120,108,111,99,145,68,114,101,108,111,99, +97,116,101,146,1,30,147,2,86,1,20,99,97,116,99,104,45,101,108,108,105, +112,115,105,115,45,101,114,114,111,114,148,1,16,8,18,98,2,92,48,38,37, +36,16,4,47,11,2,99,3,1,7,101,110,118,51,56,49,49,149,18,158,95, +100,2,0,51,38,37,36,47,16,6,50,11,3,1,4,103,55,49,56,150,3, +1,4,103,55,49,57,151,3,1,7,101,110,118,51,56,49,54,152,2,152,16, +6,49,11,2,106,2,126,3,1,7,101,110,118,51,56,49,55,153,2,153,158, +2,117,51,158,94,10,64,99,111,110,100,154,51,51,18,16,2,158,64,101,108, +115,101,155,48,52,18,158,162,37,100,2,0,55,38,37,36,47,16,10,54,11, +3,1,4,103,55,49,52,156,3,1,4,103,55,49,53,157,3,1,4,103,55, +49,54,158,3,1,4,103,55,49,55,159,3,1,7,101,110,118,51,56,51,50, +160,2,160,2,160,2,160,16,10,53,11,2,106,2,126,2,128,2,129,3,1, +7,101,110,118,51,56,51,51,161,2,161,2,161,2,161,158,2,118,55,158,2, +119,55,2,120,55,55,18,158,95,100,2,125,58,38,37,36,47,16,12,57,11, +3,1,4,103,55,48,57,162,3,1,4,103,55,49,48,163,3,1,4,103,55, +49,49,164,3,1,4,103,55,49,50,165,3,1,4,103,55,49,51,166,3,1, +7,101,110,118,51,56,53,50,167,2,167,2,167,2,167,2,167,16,12,56,11, +2,106,2,126,2,107,2,128,2,129,3,1,7,101,110,118,51,56,53,51,168, +2,168,2,168,2,168,2,168,158,96,10,2,64,2,121,2,122,58,158,160,10, +2,0,2,123,2,124,58,58,18,16,2,96,2,127,8,26,93,8,252,184,12, +16,4,59,11,61,114,169,3,1,7,101,110,118,51,56,54,53,170,95,9,8, +252,184,12,2,86,18,158,95,100,2,136,8,29,38,37,36,47,16,16,8,28, +11,3,1,4,103,55,48,50,171,3,1,4,103,55,48,51,172,3,1,4,103, +55,48,52,173,3,1,4,103,55,48,53,174,3,1,4,103,55,48,54,175,3, +1,4,103,55,48,55,176,3,1,4,103,55,48,56,177,3,1,7,101,110,118, +51,56,55,55,178,2,178,2,178,2,178,2,178,2,178,2,178,16,16,8,27, +11,2,106,2,126,2,107,2,128,2,129,2,137,2,138,3,1,7,101,110,118, +51,56,55,56,179,2,179,2,179,2,179,2,179,2,179,2,179,158,94,10,94, +2,99,2,130,8,29,158,97,10,2,125,95,2,64,2,99,2,131,159,2,0, +2,132,2,133,160,2,63,2,99,2,134,2,135,8,29,8,29,18,16,2,96, +2,127,8,31,93,8,252,189,12,16,4,8,30,11,2,169,3,1,7,101,110, +118,51,56,57,52,180,95,9,8,252,189,12,2,86,11,16,5,93,2,52,87, +95,83,159,34,93,80,159,34,8,33,35,89,162,35,35,41,9,223,0,251,80, +158,38,47,20,15,159,38,46,49,21,94,3,1,4,103,55,53,53,181,3,1, +4,103,55,53,52,182,248,22,52,198,248,22,78,198,83,159,34,93,80,159,34, +8,32,35,89,162,35,35,41,9,223,0,251,80,158,38,47,20,15,159,38,42, +49,21,94,3,1,4,103,55,52,57,183,3,1,4,103,55,52,56,184,248,22, +52,198,248,22,78,198,89,162,34,35,8,28,9,223,0,27,249,22,209,20,15, +159,37,34,49,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158, +39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158,41, +38,27,248,80,158,43,36,196,28,248,80,158,43,39,193,248,22,9,89,162,34, +35,41,9,224,9,1,27,249,22,2,89,162,34,35,50,9,224,4,5,249,80, +158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199, +27,248,80,158,41,37,200,28,248,80,158,41,34,193,27,28,248,22,206,194,193, +200,249,80,158,43,35,248,80,158,44,36,196,27,248,80,158,45,37,197,248,22, +59,250,22,209,199,196,199,11,11,194,248,80,158,39,41,196,28,248,22,57,193, +21,95,9,9,9,248,80,158,37,42,193,11,27,248,80,158,43,37,196,28,248, +80,158,43,34,193,249,80,158,44,38,27,248,80,158,46,36,196,28,248,80,158, +46,34,193,249,80,158,47,35,248,80,158,48,36,195,27,248,80,158,49,37,196, +28,248,80,158,49,39,193,248,22,59,248,80,158,50,41,194,11,11,27,248,80, +158,46,37,196,28,248,80,158,46,39,193,248,80,158,46,41,193,11,11,11,11, +28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90, +197,27,249,22,70,199,38,27,249,22,70,200,39,27,249,22,69,201,40,27,249, +22,209,20,15,159,46,35,49,250,22,2,89,162,34,36,45,9,224,15,16,27, +249,22,209,20,15,159,38,36,49,198,27,248,80,158,38,43,194,28,192,196,27, +28,248,80,158,39,34,195,249,80,158,40,38,248,80,158,41,36,197,248,80,158, +41,43,248,80,158,42,37,198,11,28,192,192,250,22,252,39,2,11,6,19,19, +98,97,100,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,185,198, +248,22,216,249,80,158,52,44,20,15,159,52,37,49,206,248,22,216,249,80,158, +52,44,20,15,159,52,38,49,204,27,28,248,80,158,46,39,194,248,80,158,46, +41,194,11,28,192,27,249,22,209,20,15,159,48,39,49,249,80,158,50,44,20, +15,159,50,40,49,200,27,248,80,158,48,43,194,28,192,249,80,158,49,45,23, +16,27,252,22,61,23,17,206,23,16,204,202,250,80,158,53,46,89,162,34,34, +47,9,224,19,3,252,80,158,40,47,20,15,159,40,41,49,21,95,3,1,4, +103,55,53,51,186,3,1,4,103,55,53,48,187,3,1,4,103,55,53,50,188, +250,22,2,80,159,43,8,32,35,248,22,52,201,248,22,87,201,248,22,78,198, +249,22,65,248,22,90,200,250,80,158,45,47,20,15,159,45,43,49,21,93,3, +1,4,103,55,53,49,189,248,22,89,203,21,96,2,136,66,100,111,108,111,111, +112,190,94,94,63,118,97,114,191,64,105,110,105,116,192,2,127,95,2,125,94, +63,110,111,116,193,62,101,48,194,96,2,0,61,99,195,2,127,95,2,190,64, +115,116,101,112,196,2,127,20,15,159,53,44,49,27,28,248,80,158,49,34,195, +249,80,158,50,35,248,80,158,51,36,197,27,248,80,158,52,37,198,28,248,80, +158,52,39,193,248,80,158,52,41,193,11,11,28,192,27,248,22,52,194,27,248, +22,53,195,249,80,158,52,45,23,19,27,254,22,61,202,23,19,23,22,23,21, +23,17,23,15,203,250,80,158,56,46,89,162,34,34,50,9,224,22,3,254,80, +158,42,47,20,15,159,42,45,49,21,97,3,1,4,103,55,54,49,197,3,1, +4,103,55,54,48,198,3,1,4,103,55,53,55,199,3,1,4,103,55,53,54, +200,3,1,4,103,55,53,57,201,250,22,2,80,159,45,8,33,35,248,22,87, +203,248,22,90,203,248,22,78,200,249,22,69,201,40,248,22,52,200,249,22,65, +249,22,70,203,38,250,80,158,47,47,20,15,159,47,47,49,21,93,3,1,4, +103,55,53,56,202,249,22,70,206,39,21,96,2,136,2,190,94,94,2,191,2, +192,2,127,96,2,125,2,194,96,2,0,2,128,2,129,2,127,96,2,0,2, +195,2,127,95,2,190,2,196,2,127,20,15,159,56,48,49,250,22,252,39,2, +11,2,71,197,248,80,158,46,48,20,15,159,46,49,49,250,22,252,39,2,11, +2,71,196,34,20,98,159,36,16,15,2,72,2,75,2,77,2,79,2,81,2, +88,30,203,2,73,73,115,116,120,45,99,104,101,99,107,47,101,115,99,204,7, +2,90,30,205,2,73,70,115,116,120,45,114,111,116,97,116,101,206,12,2,83, +30,207,2,86,1,26,100,97,116,117,109,45,62,115,121,110,116,97,120,45,111, +98,106,101,99,116,47,115,104,97,112,101,208,2,2,144,2,147,2,85,30,209, +70,35,37,119,105,116,104,45,115,116,120,210,76,119,105,116,104,45,115,121,110, +116,97,120,45,102,97,105,108,211,3,16,16,18,98,2,92,8,33,38,37,36, +16,4,8,32,11,66,111,114,105,103,45,120,212,3,1,7,101,110,118,51,57, +53,50,213,18,100,2,92,8,36,38,37,36,8,32,16,16,8,35,11,3,1, +4,103,55,51,52,214,3,1,4,103,55,51,53,215,3,1,4,103,55,51,54, +216,3,1,4,103,55,51,55,217,3,1,4,103,55,51,56,218,3,1,4,103, +55,51,57,219,3,1,4,103,55,52,48,220,3,1,7,101,110,118,51,57,54, +57,221,2,221,2,221,2,221,2,221,2,221,2,221,16,16,8,34,11,2,106, +2,191,2,192,2,196,2,194,2,128,2,195,3,1,7,101,110,118,51,57,55, +48,222,2,222,2,222,2,222,2,222,2,222,2,222,18,101,2,92,8,38,38, +37,36,8,32,8,35,8,34,16,6,8,37,11,2,126,61,115,223,3,1,7, +101,110,118,51,57,56,55,224,2,224,18,16,2,158,64,100,101,115,116,225,8, +36,8,39,18,8,39,18,101,2,92,8,41,38,37,36,8,32,8,35,8,34, +16,4,8,40,11,3,1,4,103,55,52,53,226,3,1,7,101,110,118,52,48, +48,57,227,18,16,2,158,2,225,8,41,8,42,18,158,97,10,2,136,2,190, +2,186,95,2,125,94,2,193,2,187,158,2,0,2,188,8,41,18,158,95,10, +2,183,2,184,8,41,18,16,2,103,93,158,159,10,2,190,2,189,8,41,8, +50,98,8,49,10,34,11,95,159,2,18,9,11,159,2,94,9,11,159,2,73, +9,11,16,14,66,115,121,110,116,97,120,228,29,229,11,11,2,208,2,229,2, +148,2,229,73,115,121,110,116,97,120,45,99,97,115,101,42,42,230,2,229,78, +112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,231,2,229, +2,87,2,229,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112,232, +2,229,98,8,48,10,35,11,95,159,64,35,37,115,99,233,9,11,159,2,94, +9,11,159,2,73,9,11,16,0,96,8,47,8,254,1,11,16,0,16,4,8, +46,11,2,99,3,1,6,101,110,118,52,53,52,234,16,4,8,45,11,68,104, +101,114,101,45,115,116,120,235,3,1,6,101,110,118,52,53,54,236,16,4,8, +44,11,2,235,2,236,13,16,4,35,2,229,2,86,11,93,8,252,251,12,16, +4,8,43,11,2,169,3,1,7,101,110,118,52,48,50,48,237,95,9,8,252, +251,12,2,86,18,16,2,96,2,127,8,52,93,8,252,251,12,16,4,8,51, +11,2,169,2,237,95,9,8,252,251,12,2,86,18,158,96,103,2,136,8,55, +38,37,36,8,32,8,35,8,34,8,40,16,6,8,54,11,3,1,4,103,55, +52,54,238,3,1,4,103,55,52,55,239,3,1,7,101,110,118,52,48,50,55, +240,2,240,16,4,8,53,11,2,129,3,1,7,101,110,118,52,48,50,56,241, +158,2,190,8,55,158,2,197,8,55,158,97,10,2,125,2,198,159,2,0,2, +199,2,200,158,2,0,2,201,8,55,8,55,18,158,95,10,2,181,2,182,8, +55,18,16,2,103,93,158,159,10,2,190,2,202,8,55,8,57,8,49,8,48, +8,47,8,46,8,45,8,44,13,16,4,35,2,229,2,86,11,93,8,252,2, +13,16,4,8,56,11,2,169,3,1,7,101,110,118,52,48,51,52,242,95,9, +8,252,2,13,2,86,18,16,2,96,2,127,8,59,93,8,252,2,13,16,4, +8,58,11,2,169,2,242,95,9,8,252,2,13,2,86,18,16,2,158,94,98, +2,196,8,63,93,8,252,226,12,16,4,8,62,11,3,1,8,119,115,116,109, +112,55,52,49,243,3,1,7,101,110,118,51,57,56,54,244,16,4,8,61,11, +3,1,4,103,55,52,52,245,3,1,7,101,110,118,52,48,51,57,246,16,4, +8,60,11,65,95,101,108,115,101,247,3,1,7,101,110,118,52,48,52,48,248, +158,2,127,8,63,8,63,95,9,8,252,226,12,2,210,11,16,5,93,2,59, +89,162,34,35,45,9,223,0,27,249,22,209,20,15,159,37,34,42,196,27,28, +248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158, +40,37,197,28,248,80,158,40,34,193,249,80,158,41,38,248,80,158,42,36,195, +248,80,158,42,39,248,80,158,43,37,196,11,11,28,192,27,248,22,52,194,27, +248,22,53,195,249,80,158,40,40,199,250,80,158,43,41,20,15,159,43,35,42, +21,93,3,1,4,103,55,54,52,249,197,250,22,252,39,2,11,2,71,196,34, +20,98,159,34,16,8,2,72,2,75,2,77,2,79,2,81,2,83,2,144,2, +85,16,2,18,98,2,92,8,65,38,37,36,16,4,8,64,11,2,99,3,1, +7,101,110,118,52,48,52,52,250,18,158,94,100,2,6,8,68,38,37,36,8, +64,16,6,8,67,11,3,1,4,103,55,54,50,251,3,1,4,103,55,54,51, +252,252,0,3,1,7,101,110,118,52,48,52,57,252,253,0,2,252,253,0,16, +6,8,66,11,2,59,63,101,120,112,252,254,0,3,1,7,101,110,118,52,48, +53,48,252,255,0,2,252,255,0,158,96,10,66,108,97,109,98,100,97,252,0, +1,9,2,249,8,68,8,68,11,16,5,93,2,95,27,247,22,252,94,3,253, +22,60,248,199,20,15,159,42,34,34,248,199,20,15,159,42,35,34,248,199,20, +15,159,42,36,34,248,22,60,248,200,20,15,159,43,37,34,248,22,60,248,200, +20,15,159,43,38,34,10,43,20,98,159,34,16,0,16,5,18,97,2,4,8, +69,38,37,36,18,16,2,158,2,6,8,69,8,70,18,16,2,158,2,8,8, +69,8,71,18,16,2,158,2,10,8,69,8,72,18,16,2,158,2,12,8,69, +8,73,11,16,5,93,2,60,89,162,34,35,55,9,223,0,27,249,22,209,20, +15,159,37,34,49,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80, +158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,28,248,80, +158,40,38,248,80,158,41,36,194,27,248,80,158,41,37,194,28,248,80,158,41, +34,193,249,80,158,42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28, +248,80,158,44,39,193,248,80,158,44,40,193,11,11,11,11,11,28,192,27,248, +22,52,194,27,248,22,78,195,27,248,22,80,196,27,249,22,61,195,196,251,80, +158,44,41,20,15,159,44,35,49,21,94,3,1,4,103,55,55,53,252,1,1, +3,1,4,103,55,55,52,252,2,1,248,22,53,197,248,22,52,197,27,28,248, +80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248,80,158,41, +37,198,28,248,80,158,41,34,193,249,80,158,42,42,27,248,80,158,44,36,196, +28,248,80,158,44,39,193,248,22,9,89,162,34,35,41,9,224,10,1,27,249, +22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,43,28,248,80,158,38, +34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28, +248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43, +38,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248,22,57,193, +21,94,9,9,248,80,158,37,44,193,11,27,248,80,158,44,37,196,28,248,80, +158,44,34,193,249,80,158,45,35,248,80,158,46,36,195,27,248,80,158,47,37, +196,28,248,80,158,47,39,193,248,80,158,47,40,193,11,11,11,11,28,192,27, +248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248, +22,89,198,27,249,22,209,20,15,159,45,36,49,249,22,1,22,65,250,22,2, +22,59,248,22,216,249,80,158,53,45,20,15,159,53,37,49,206,248,22,216,249, +80,158,53,45,20,15,159,53,38,49,205,27,28,248,80,158,45,39,194,248,80, +158,45,40,194,11,28,192,249,80,158,46,46,205,27,250,22,61,198,200,201,250, +80,158,50,47,89,162,34,34,42,9,224,16,3,252,80,158,40,41,20,15,159, +40,39,49,21,95,3,1,4,103,55,55,57,252,3,1,3,1,4,103,55,56, +49,252,4,1,3,1,4,103,55,56,48,252,5,1,248,22,52,198,248,22,80, +198,248,22,78,198,21,96,1,22,119,105,116,104,45,99,111,110,116,105,110,117, +97,116,105,111,110,45,109,97,114,107,252,6,1,2,21,96,2,19,95,1,27, +99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,45,115,101,116, +45,102,105,114,115,116,252,7,1,11,2,21,63,112,47,118,252,8,1,2,127, +97,2,136,9,65,101,120,112,114,49,252,9,1,64,101,120,112,114,252,10,1, +2,127,20,15,159,50,40,49,248,80,158,45,48,20,15,159,45,41,49,250,22, +252,39,2,11,2,71,197,34,20,98,159,34,16,15,2,72,2,75,2,77,2, +79,2,83,2,88,2,90,2,85,2,81,2,203,2,205,2,207,2,144,2,147, +2,209,16,8,18,98,2,92,8,75,38,37,36,16,4,8,74,11,63,115,116, +120,252,11,1,3,1,7,101,110,118,52,48,54,48,252,12,1,18,158,162,37, +100,2,136,8,78,38,37,36,8,74,16,8,8,77,11,3,1,4,103,55,55, +49,252,13,1,3,1,4,103,55,55,50,252,14,1,3,1,4,103,55,55,51, +252,15,1,3,1,7,101,110,118,52,48,54,55,252,16,1,2,252,16,1,2, +252,16,1,16,8,8,76,11,2,106,2,252,9,1,2,252,10,1,3,1,7, +101,110,118,52,48,54,56,252,17,1,2,252,17,1,2,252,17,1,158,9,8, +78,158,2,252,1,1,8,78,2,252,2,1,8,78,8,78,18,100,2,92,8, +81,38,37,36,8,74,16,12,8,80,11,3,1,4,103,55,54,54,252,18,1, +3,1,4,103,55,54,55,252,19,1,3,1,4,103,55,54,56,252,20,1,3, +1,4,103,55,54,57,252,21,1,3,1,4,103,55,55,48,252,22,1,3,1, +7,101,110,118,52,48,56,55,252,23,1,2,252,23,1,2,252,23,1,2,252, +23,1,2,252,23,1,16,12,8,79,11,2,106,65,112,97,114,97,109,252,24, +1,63,118,97,108,252,25,1,2,252,9,1,2,252,10,1,3,1,7,101,110, +118,52,48,56,56,252,26,1,2,252,26,1,2,252,26,1,2,252,26,1,2, +252,26,1,18,16,2,158,2,225,8,81,8,82,18,8,82,18,158,96,102,2, +252,6,1,8,85,38,37,36,8,74,8,80,8,79,16,4,8,84,11,3,1, +4,103,55,55,56,252,27,1,3,1,7,101,110,118,52,49,48,54,252,28,1, +16,4,8,83,11,2,252,8,1,3,1,7,101,110,118,52,49,48,55,252,29, +1,158,2,21,8,85,158,160,10,2,19,95,2,252,7,1,11,2,21,2,252, +3,1,8,85,158,161,10,2,136,9,2,252,4,1,2,252,5,1,8,85,8, +85,18,16,2,96,2,127,8,87,93,8,252,68,13,16,4,8,86,11,2,169, +3,1,7,101,110,118,52,49,49,49,252,30,1,95,9,8,252,68,13,2,86, +18,16,2,158,94,98,2,252,8,1,8,91,93,8,252,59,13,16,4,8,90, +11,3,1,8,119,115,116,109,112,55,55,54,252,31,1,3,1,7,101,110,118, +52,49,48,48,252,32,1,16,4,8,89,11,3,1,4,103,55,55,55,252,33, +1,3,1,7,101,110,118,52,49,49,52,252,34,1,16,4,8,88,11,2,247, +3,1,7,101,110,118,52,49,49,53,252,35,1,158,2,127,8,91,8,91,95, +9,8,252,59,13,2,210,11,16,5,93,2,57,89,162,34,35,51,9,223,0, +27,249,22,209,20,15,159,37,34,42,196,27,28,248,80,158,37,34,194,249,80, +158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40, +34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43,37,196,28, +248,80,158,43,34,193,249,80,158,44,35,248,80,158,45,36,195,27,248,80,158, +46,37,196,28,248,80,158,46,38,193,248,80,158,46,39,193,11,11,11,11,28, +192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,88,197, +249,80,158,42,40,201,27,250,22,61,200,198,199,252,80,158,48,41,20,15,159, +48,35,42,21,95,3,1,4,103,55,56,54,252,36,1,3,1,4,103,55,56, +56,252,37,1,3,1,4,103,55,56,55,252,38,1,248,22,52,198,248,22,80, +198,248,22,78,198,250,22,252,39,2,11,2,71,196,34,20,98,159,34,16,8, +2,72,2,75,2,77,2,79,2,88,2,90,2,144,2,85,16,2,18,98,2, +92,8,93,38,37,36,16,4,8,92,11,2,252,11,1,3,1,7,101,110,118, +52,49,49,57,252,39,1,18,158,96,100,2,252,6,1,8,96,38,37,36,8, +92,16,10,8,95,11,3,1,4,103,55,56,50,252,40,1,3,1,4,103,55, +56,51,252,41,1,3,1,4,103,55,56,52,252,42,1,3,1,4,103,55,56, +53,252,43,1,3,1,7,101,110,118,52,49,50,54,252,44,1,2,252,44,1, +2,252,44,1,2,252,44,1,16,10,8,94,11,2,106,69,98,111,111,108,45, +101,120,112,114,252,45,1,2,252,9,1,2,252,10,1,3,1,7,101,110,118, +52,49,50,55,252,46,1,2,252,46,1,2,252,46,1,2,252,46,1,158,2, +47,8,96,158,95,10,76,109,97,107,101,45,116,104,114,101,97,100,45,99,101, +108,108,252,47,1,95,63,97,110,100,252,48,1,2,252,36,1,10,8,96,158, +96,10,2,0,93,2,51,160,2,136,9,2,252,37,1,2,252,38,1,8,96, +8,96,11,16,5,93,2,96,27,247,22,252,94,3,253,22,60,248,199,20,15, +159,42,34,34,248,199,20,15,159,42,35,34,248,199,20,15,159,42,36,34,248, +22,60,248,200,20,15,159,43,37,34,248,22,60,248,200,20,15,159,43,38,34, +10,43,20,98,159,34,16,0,16,5,18,16,2,158,2,35,8,69,8,97,18, +16,2,158,2,37,8,69,8,98,18,16,2,158,2,39,8,69,8,99,18,16, +2,158,2,41,8,69,8,100,18,16,2,158,2,43,8,69,8,101,11,16,5, +94,2,53,2,56,87,94,83,159,34,93,80,159,34,56,35,89,162,35,35,41, +9,223,0,251,80,158,38,42,20,15,159,38,40,47,21,94,3,1,4,103,56, +48,52,252,49,1,3,1,4,103,56,48,51,252,50,1,248,22,52,198,248,22, +78,198,27,89,162,8,36,35,36,62,119,104,252,51,1,223,1,89,162,34,35, +54,9,224,0,1,27,249,22,209,20,15,159,38,34,47,197,27,28,248,80,158, +38,34,194,249,80,158,39,35,248,80,158,40,36,196,27,248,80,158,41,37,197, +28,248,80,158,41,34,193,28,248,80,158,41,38,248,80,158,42,36,194,27,248, +80,158,42,37,194,28,248,80,158,42,34,193,249,80,158,43,35,248,80,158,44, +36,195,27,248,80,158,45,37,196,28,248,80,158,45,39,193,248,80,158,45,40, +193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, +80,196,249,80,158,42,41,201,27,249,22,61,197,198,251,80,158,47,42,20,15, +159,47,35,47,21,94,3,1,4,103,55,57,57,252,52,1,3,1,4,103,55, +57,56,252,53,1,248,22,53,197,248,22,52,197,27,28,248,80,158,39,34,195, +249,80,158,40,35,248,80,158,41,36,197,27,248,80,158,42,37,198,28,248,80, +158,42,34,193,249,80,158,43,43,27,248,80,158,45,36,196,28,248,80,158,45, +39,193,248,22,9,89,162,34,35,41,9,224,11,1,27,249,22,2,89,162,34, +35,46,9,224,4,5,249,80,158,37,44,28,248,80,158,38,34,197,249,80,158, 39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34, 193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,38,248,80,158,44, 37,196,11,11,194,248,80,158,39,40,196,28,248,22,57,193,21,94,9,9,248, -80,158,37,44,193,11,27,248,80,158,44,37,196,28,248,80,158,44,34,193,249, -80,158,45,35,248,80,158,46,36,195,27,248,80,158,47,37,196,28,248,80,158, -47,39,193,248,80,158,47,40,193,11,11,11,11,28,192,27,248,22,52,194,27, +80,158,37,45,193,11,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249, +80,158,46,35,248,80,158,47,36,195,27,248,80,158,48,37,196,28,248,80,158, +48,39,193,248,80,158,48,40,193,11,11,11,11,28,192,27,248,22,52,194,27, 248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,27,249, -22,209,20,15,159,45,41,48,248,80,158,46,45,27,20,15,159,47,42,48,250, -22,209,20,15,159,50,43,48,203,195,27,28,248,80,158,45,39,194,248,80,158, -45,40,194,11,28,192,249,80,158,46,41,205,27,252,22,61,203,202,204,205,200, -27,20,15,159,48,44,48,91,159,35,11,90,161,35,34,11,83,160,40,34,35, -11,247,248,22,9,89,162,34,35,42,9,226,16,2,3,1,250,22,31,89,162, -34,34,38,9,225,6,3,7,90,161,35,35,10,247,22,252,185,2,248,22,252, -185,2,89,162,34,35,38,9,224,3,1,248,193,89,162,34,34,38,9,224,2, -3,28,248,22,252,182,2,193,248,22,252,187,2,193,249,80,158,37,46,21,95, -2,117,94,94,63,116,109,112,252,129,1,2,252,254,0,2,114,95,2,117,93, -94,64,115,119,97,112,252,130,1,96,2,234,9,96,2,117,93,94,2,206,2, -252,129,1,95,2,252,69,1,2,252,129,1,64,110,97,109,101,252,131,1,95, -2,252,69,1,2,252,131,1,2,206,2,114,96,72,100,121,110,97,109,105,99, -45,119,105,110,100,252,132,1,2,252,130,1,97,2,234,9,2,252,110,1,2, -252,111,1,2,114,2,252,130,1,20,15,159,37,45,48,89,162,8,36,34,8, -40,9,225,6,5,4,27,250,22,209,20,15,159,40,46,48,250,22,209,20,15, -159,43,47,48,250,22,60,20,15,159,46,48,48,250,22,2,80,159,49,8,70, -35,248,22,89,206,248,22,87,206,250,22,209,20,15,159,49,51,48,250,22,60, -20,15,159,52,52,48,250,22,209,20,15,159,55,53,48,248,22,60,250,22,209, -20,15,159,59,54,48,249,22,60,20,15,159,8,27,55,48,250,22,209,20,15, -159,8,30,56,48,250,22,62,20,15,159,8,33,57,48,20,15,159,8,33,58, -48,252,22,2,80,159,8,38,8,71,35,248,22,89,23,37,248,22,89,23,37, -248,22,90,23,37,248,22,90,23,37,20,15,159,8,30,8,40,48,20,15,159, -59,8,41,48,20,15,159,55,8,42,48,250,22,209,20,15,159,55,8,43,48, -251,22,62,20,15,159,59,8,44,48,20,15,159,59,8,45,48,250,22,209,20, -15,159,8,28,8,46,48,251,22,62,20,15,159,8,32,8,47,48,20,15,159, -8,32,8,48,48,248,22,52,23,31,248,22,78,23,31,20,15,159,8,28,8, -49,48,20,15,159,59,8,50,48,20,15,159,55,8,51,48,20,15,159,49,8, -52,48,20,15,159,43,8,53,48,197,89,162,8,36,34,35,9,223,0,192,89, -162,34,34,36,9,223,3,248,22,252,185,2,208,248,80,158,45,47,20,15,159, -45,8,54,48,250,22,252,39,2,11,2,65,197,34,20,98,159,36,16,14,2, -66,2,69,2,71,2,73,2,77,2,79,2,81,2,125,2,75,2,188,2,190, -2,252,73,1,2,128,2,192,16,55,18,98,2,83,8,190,38,37,36,16,4, -8,189,11,2,240,3,1,7,101,110,118,52,52,54,57,252,133,1,18,16,2, -95,2,92,8,191,93,8,252,88,13,95,9,8,252,88,13,2,93,18,100,2, -94,8,194,38,37,36,8,189,16,8,8,193,11,3,1,4,103,53,50,49,252, -134,1,3,1,4,103,53,50,50,252,135,1,3,1,4,103,53,50,51,252,136, -1,3,1,7,101,110,118,52,52,55,54,252,137,1,2,252,137,1,2,252,137, -1,16,8,8,192,11,2,99,2,252,110,1,2,252,111,1,3,1,7,101,110, -118,52,52,55,55,252,138,1,2,252,138,1,2,252,138,1,18,158,2,102,8, -194,18,158,2,117,8,194,18,158,9,8,194,18,158,2,102,8,194,18,100,2, -83,8,197,38,37,36,8,189,16,12,8,196,11,3,1,4,103,53,49,54,252, -139,1,3,1,4,103,53,49,55,252,140,1,3,1,4,103,53,49,56,252,141, -1,3,1,4,103,53,49,57,252,142,1,3,1,4,103,53,50,48,252,143,1, -3,1,7,101,110,118,52,52,57,54,252,144,1,2,252,144,1,2,252,144,1, -2,252,144,1,2,252,144,1,16,12,8,195,11,2,99,2,252,131,1,2,252, -254,0,2,252,110,1,2,252,111,1,3,1,7,101,110,118,52,52,57,55,252, -145,1,2,252,145,1,2,252,145,1,2,252,145,1,2,252,145,1,18,16,2, -95,2,92,8,198,93,8,252,95,13,95,9,8,252,95,13,2,93,18,158,2, -94,8,197,18,16,2,95,2,92,8,199,93,8,252,101,13,95,9,8,252,101, -13,2,93,18,16,2,99,2,114,8,204,93,8,252,101,13,16,6,8,203,11, -2,143,2,144,3,1,7,101,110,118,52,53,49,57,252,146,1,2,252,146,1, -16,4,8,202,11,2,154,3,1,7,101,110,118,52,53,50,48,252,147,1,16, -4,8,201,11,2,156,3,1,7,101,110,118,52,53,50,49,252,148,1,16,4, -8,200,11,2,158,3,1,7,101,110,118,52,53,50,51,252,149,1,95,9,8, -252,101,13,2,93,18,102,2,94,8,207,38,37,36,8,189,8,196,8,195,16, -4,8,206,11,3,1,4,103,53,50,54,252,150,1,3,1,7,101,110,118,52, -53,49,52,252,151,1,16,4,8,205,11,2,252,129,1,3,1,7,101,110,118, -52,53,49,53,252,152,1,18,158,2,102,8,207,18,158,2,117,8,207,18,158, -2,102,8,207,18,158,2,102,8,207,18,158,2,102,8,207,18,158,2,117,8, -207,18,158,2,102,8,207,18,158,2,102,8,207,18,158,2,252,130,1,8,207, -18,158,2,102,8,207,18,158,2,234,8,207,18,158,9,8,207,18,158,2,102, -8,207,18,158,2,117,8,207,18,158,2,102,8,207,18,158,2,102,8,207,18, -158,2,206,8,207,18,158,2,102,8,207,18,158,2,102,8,207,18,158,2,102, -8,207,18,158,2,252,69,1,8,207,18,158,2,102,8,207,18,158,2,102,8, -207,18,158,2,252,69,1,8,207,18,16,2,106,93,16,2,158,2,206,8,207, -9,8,212,8,28,8,27,8,26,59,58,57,13,16,4,35,2,137,2,93,11, -93,8,252,101,13,16,6,8,211,11,2,143,2,144,2,252,146,1,2,252,146, -1,16,4,8,210,11,2,154,2,252,147,1,16,4,8,209,11,2,156,2,252, -148,1,16,4,8,208,11,64,118,97,108,115,252,153,1,3,1,7,101,110,118, -52,53,50,57,252,154,1,95,9,8,252,101,13,2,93,18,158,2,102,8,207, -18,158,2,102,8,207,18,158,2,102,8,207,18,158,2,102,8,207,18,158,2, -102,8,207,18,158,2,102,8,207,18,158,2,252,132,1,8,207,18,158,2,252, -130,1,8,207,18,158,2,102,8,207,18,158,2,234,8,207,18,158,9,8,207, -18,158,2,102,8,207,18,16,2,105,93,16,2,158,2,252,130,1,8,207,9, -8,213,8,28,8,27,8,26,59,58,57,13,16,4,35,2,137,2,93,11,93, -8,252,101,13,8,211,8,210,8,209,95,9,8,252,101,13,2,93,18,158,2, -102,8,207,18,158,2,102,8,207,18,158,2,102,8,207,18,16,2,158,94,16, -2,98,2,252,129,1,8,217,93,8,252,93,13,16,4,8,216,11,3,1,8, -119,115,116,109,112,53,50,52,252,155,1,3,1,7,101,110,118,52,53,48,57, -252,156,1,16,4,8,215,11,3,1,4,103,53,50,53,252,157,1,3,1,7, -101,110,118,52,53,51,52,252,158,1,16,4,8,214,11,2,226,3,1,7,101, -110,118,52,53,51,53,252,159,1,9,16,2,158,2,114,8,217,9,8,217,95, -9,8,252,93,13,2,193,11,16,5,93,2,58,89,162,34,35,8,41,9,223, -0,27,249,22,209,20,15,159,37,34,41,196,27,28,248,80,158,37,34,194,249, -80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158, -40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43,37,196, -28,248,80,158,43,38,193,248,80,158,43,39,193,11,11,11,28,192,27,248,22, -52,194,27,248,22,78,195,27,248,22,80,196,249,80,158,41,40,200,27,249,22, -61,198,197,27,20,15,159,43,35,41,250,22,209,20,15,159,46,36,41,250,22, -209,20,15,159,49,37,41,250,22,62,20,15,159,52,38,41,250,22,209,20,15, -159,55,39,41,248,22,60,250,22,209,20,15,159,59,40,41,249,22,60,20,15, -159,8,27,41,41,250,22,209,20,15,159,8,30,42,41,250,22,62,20,15,159, -8,33,43,41,250,22,209,20,15,159,8,36,44,41,250,22,62,20,15,159,8, -39,45,41,20,15,159,8,39,46,41,23,31,20,15,159,8,36,47,41,20,15, -159,8,33,48,41,20,15,159,8,30,49,41,20,15,159,59,50,41,20,15,159, -55,51,41,20,15,159,52,52,41,20,15,159,49,53,41,195,250,22,252,39,2, -11,2,65,196,34,20,98,159,34,16,7,2,66,2,69,2,71,2,73,2,79, -2,81,2,125,16,20,18,98,2,83,8,219,38,37,36,16,4,8,218,11,2, -240,3,1,7,101,110,118,52,53,51,57,252,160,1,18,16,2,95,2,92,8, -220,93,8,252,119,13,95,9,8,252,119,13,2,93,18,100,2,94,8,223,38, -37,36,8,218,16,8,8,222,11,3,1,4,103,53,50,55,252,161,1,3,1, -4,103,53,50,56,252,162,1,3,1,4,103,53,50,57,252,163,1,3,1,7, -101,110,118,52,53,52,53,252,164,1,2,252,164,1,2,252,164,1,16,8,8, -221,11,2,99,2,238,2,239,3,1,7,101,110,118,52,53,52,54,252,165,1, -2,252,165,1,2,252,165,1,18,158,2,102,8,223,18,158,2,252,67,1,8, -223,18,158,2,102,8,223,18,158,2,102,8,223,18,158,96,16,2,158,2,113, -8,223,9,16,2,158,63,99,112,117,252,166,1,8,223,9,16,2,158,64,117, -115,101,114,252,167,1,8,223,9,16,2,158,62,103,99,252,168,1,8,223,9, -8,223,18,158,2,102,8,223,18,158,70,116,105,109,101,45,97,112,112,108,121, -252,169,1,8,223,18,158,2,102,8,223,18,158,2,234,8,223,18,158,9,8, -223,18,158,2,102,8,223,18,16,2,103,93,16,2,158,64,110,117,108,108,252, -170,1,8,223,9,8,225,8,28,8,27,8,26,59,58,57,13,16,4,35,2, -137,2,93,11,93,8,252,119,13,16,6,8,224,11,2,143,2,144,3,1,7, -101,110,118,52,53,53,52,252,171,1,2,252,171,1,95,9,8,252,119,13,2, -93,18,158,2,102,8,223,18,158,2,102,8,223,18,158,2,102,8,223,18,16, -2,158,94,16,2,158,97,158,66,112,114,105,110,116,102,252,172,1,8,223,158, -6,40,40,99,112,117,32,116,105,109,101,58,32,126,115,32,114,101,97,108,32, -116,105,109,101,58,32,126,115,32,103,99,32,116,105,109,101,58,32,126,115,126, -110,252,173,1,8,223,158,2,252,166,1,8,223,158,2,252,167,1,8,223,158, -2,252,168,1,8,223,8,223,9,16,2,158,95,158,2,252,41,1,8,223,158, -2,252,42,1,8,223,158,2,113,8,223,8,223,9,8,225,95,9,8,252,119, -13,2,93,18,158,2,102,8,223,11,100,83,159,34,97,80,159,34,34,35,80, -159,34,35,35,80,159,34,36,35,80,159,34,37,35,80,159,34,38,35,27,247, -22,252,114,2,87,94,28,192,28,248,22,252,113,2,193,12,250,22,252,40,2, -2,252,114,1,6,15,15,105,110,115,112,101,99,116,111,114,32,111,114,32,35, -102,252,174,1,195,12,91,159,39,11,90,161,39,34,11,254,22,252,91,2,2, -87,11,35,34,11,9,204,252,22,7,197,198,199,250,22,252,93,2,203,34,61, -112,252,175,1,250,22,252,94,2,204,34,2,252,175,1,83,159,34,93,80,159, -34,39,35,89,162,34,35,41,2,14,223,0,87,94,28,248,80,158,35,36,194, -12,250,22,252,40,2,2,14,6,7,7,112,114,111,109,105,115,101,252,176,1, -196,27,248,80,158,36,37,195,28,248,22,0,193,27,249,22,6,195,22,59,87, -94,28,248,22,0,248,80,158,38,37,197,249,80,158,38,38,197,194,12,249,22, -1,22,7,248,80,158,39,37,198,249,22,1,22,7,194,83,159,34,93,80,159, -34,40,35,89,162,34,34,38,2,16,223,0,248,80,158,35,41,249,22,19,11, -80,158,37,42,83,159,34,93,80,159,34,43,35,89,162,34,36,42,2,23,223, -0,87,95,28,248,22,252,223,2,194,12,252,22,252,40,2,2,23,6,16,16, -112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,252,177,1,34,198, -199,28,28,248,22,0,195,249,22,34,196,34,11,12,252,22,252,40,2,2,23, -6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48, -41,252,178,1,35,198,199,20,14,159,80,158,34,42,193,247,194,83,159,34,97, -80,159,34,44,35,80,159,34,45,35,80,159,34,46,35,80,159,34,47,35,80, -159,34,48,35,252,22,252,91,2,2,86,11,35,34,11,83,159,34,97,80,159, -34,49,35,80,159,34,50,35,80,159,34,51,35,80,159,34,52,35,80,159,34, -53,35,27,247,22,252,114,2,87,94,28,192,28,248,22,252,9,2,248,22,252, -113,2,194,250,22,252,40,2,2,252,114,1,2,252,174,1,195,12,12,91,159, -39,11,90,161,39,34,11,254,22,252,91,2,2,86,11,35,34,11,9,204,252, -22,7,197,198,199,250,22,252,93,2,203,34,64,99,101,108,108,252,179,1,250, -22,252,94,2,204,34,2,252,179,1,83,159,34,93,80,159,34,54,35,89,162, -34,34,38,2,45,223,0,248,80,158,35,45,249,22,19,11,80,158,37,55,83, -159,34,93,80,159,34,56,35,89,162,38,36,42,2,49,223,0,87,95,28,248, -80,158,35,46,194,12,252,22,252,40,2,2,49,6,22,22,98,114,101,97,107, -32,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,252,180,1,34, -198,199,28,28,248,22,0,195,249,22,34,196,34,11,12,252,22,252,40,2,2, -23,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32, -48,41,252,181,1,35,198,199,83,158,38,20,93,94,20,14,159,80,158,34,55, -249,80,158,36,47,195,34,87,94,247,80,158,34,57,247,194,247,80,158,34,57, -96,68,35,37,107,101,114,110,101,108,252,182,1,2,85,2,84,2,18,96,2, -252,182,1,2,67,2,89,2,88,0}; - EVAL_ONE_SIZED_STR((char *)expr, 22269); +22,209,20,15,159,46,36,47,28,203,20,15,159,46,37,47,20,15,159,46,38, +47,249,80,158,46,41,205,27,252,22,61,203,204,201,202,200,250,80,158,50,46, +89,162,34,34,46,9,224,16,3,253,80,158,41,42,20,15,159,41,39,47,21, +96,3,1,4,103,56,48,53,252,54,1,3,1,4,103,56,48,54,252,55,1, +3,1,4,103,56,48,56,252,56,1,3,1,4,103,56,48,55,252,57,1,250, +22,2,80,159,44,56,35,248,22,78,202,248,22,52,202,248,22,89,199,248,22, +90,199,248,22,87,199,21,95,2,136,93,94,61,108,252,58,1,95,64,108,105, +115,116,252,59,1,95,64,99,111,110,115,252,60,1,64,112,114,101,100,252,61, +1,67,104,97,110,100,108,101,114,252,62,1,2,127,95,2,136,93,94,63,98, +112,122,252,63,1,95,2,252,7,1,11,2,47,96,2,252,6,1,2,47,94, +2,252,47,1,11,93,94,67,99,97,108,108,47,101,99,252,64,1,95,2,252, +0,1,93,2,107,96,2,252,6,1,2,47,2,252,63,1,95,2,60,93,94, +1,25,99,117,114,114,101,110,116,45,101,120,99,101,112,116,105,111,110,45,104, +97,110,100,108,101,114,252,65,1,95,2,252,0,1,93,61,101,252,66,1,94, +2,107,95,2,252,0,1,9,96,2,136,64,108,111,111,112,252,67,1,93,94, +2,252,58,1,2,252,58,1,96,2,154,94,94,65,110,117,108,108,63,252,68, +1,2,252,58,1,94,65,114,97,105,115,101,252,69,1,2,252,66,1,94,94, +94,64,99,97,97,114,252,70,1,2,252,58,1,2,252,66,1,63,117,113,49, +252,71,1,94,2,155,94,2,252,67,1,94,63,99,100,114,252,72,1,2,252, +58,1,95,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117,101,115,252, +73,1,97,2,252,0,1,9,2,252,9,1,2,252,10,1,2,127,95,2,252, +0,1,64,97,114,103,115,252,74,1,95,2,252,0,1,9,95,65,97,112,112, +108,121,252,75,1,66,118,97,108,117,101,115,252,76,1,2,252,74,1,20,15, +159,50,41,47,250,22,252,39,2,11,2,71,197,249,22,7,248,195,10,248,195, +11,38,20,98,159,35,16,13,2,72,2,75,2,77,2,79,2,83,2,88,2, +90,2,144,2,85,2,81,2,203,2,205,2,147,16,8,18,99,2,92,8,104, +38,37,36,16,4,8,103,11,74,100,105,115,97,98,108,101,45,98,114,101,97, +107,63,252,77,1,3,1,7,101,110,118,52,49,52,50,252,78,1,16,4,8, +102,11,2,252,11,1,3,1,7,101,110,118,52,49,52,51,252,79,1,18,158, +162,37,101,2,136,8,107,38,37,36,8,103,8,102,16,8,8,106,11,3,1, +4,103,55,57,53,252,80,1,3,1,4,103,55,57,54,252,81,1,3,1,4, +103,55,57,55,252,82,1,3,1,7,101,110,118,52,49,53,48,252,83,1,2, +252,83,1,2,252,83,1,16,8,8,105,11,2,106,2,252,9,1,2,252,10, +1,3,1,7,101,110,118,52,49,53,49,252,84,1,2,252,84,1,2,252,84, +1,158,9,8,107,158,2,252,52,1,8,107,2,252,53,1,8,107,8,107,18, +101,2,92,8,110,38,37,36,8,103,8,102,16,12,8,109,11,3,1,4,103, +55,57,48,252,85,1,3,1,4,103,55,57,49,252,86,1,3,1,4,103,55, +57,50,252,87,1,3,1,4,103,55,57,51,252,88,1,3,1,4,103,55,57, +52,252,89,1,3,1,7,101,110,118,52,49,55,48,252,90,1,2,252,90,1, +2,252,90,1,2,252,90,1,2,252,90,1,16,12,8,108,11,2,106,2,252, +61,1,2,252,62,1,2,252,9,1,2,252,10,1,3,1,7,101,110,118,52, +49,55,49,252,91,1,2,252,91,1,2,252,91,1,2,252,91,1,2,252,91, +1,18,158,96,10,66,98,101,103,105,110,48,252,92,1,94,94,64,99,100,97, +114,252,93,1,2,252,58,1,2,252,66,1,96,2,252,6,1,2,47,2,252, +63,1,93,2,51,8,110,18,158,97,10,2,252,6,1,2,47,2,252,63,1, +95,2,0,93,2,51,94,94,2,252,93,1,2,252,58,1,2,252,66,1,8, +110,18,158,96,10,2,136,93,94,2,252,58,1,158,2,252,59,1,2,252,54, +1,95,2,136,93,94,2,252,63,1,95,2,252,7,1,11,2,47,96,2,252, +6,1,2,47,94,2,252,47,1,11,93,94,2,252,64,1,95,2,252,0,1, +93,2,107,96,2,252,6,1,2,47,2,252,63,1,95,2,60,93,94,2,252, +65,1,95,2,252,0,1,93,2,252,66,1,94,2,107,95,2,252,0,1,9, +96,2,136,2,252,67,1,93,94,2,252,58,1,2,252,58,1,96,2,154,94, +94,2,252,68,1,2,252,58,1,94,2,252,69,1,2,252,66,1,94,94,94, +2,252,70,1,2,252,58,1,2,252,66,1,2,252,55,1,94,2,155,94,2, +252,67,1,94,2,252,72,1,2,252,58,1,95,2,252,73,1,160,2,252,0, +1,9,2,252,56,1,2,252,57,1,95,2,252,0,1,2,252,74,1,95,2, +252,0,1,9,95,2,252,75,1,2,252,76,1,2,252,74,1,8,110,18,158, +96,10,2,252,60,1,2,252,49,1,2,252,50,1,8,110,18,16,2,96,2, +127,8,112,93,8,252,141,13,16,4,8,111,11,2,169,3,1,7,101,110,118, +52,49,57,54,252,94,1,95,9,8,252,141,13,2,86,11,16,5,93,2,61, +87,95,83,159,34,93,80,159,34,8,28,35,89,162,34,36,49,68,116,114,121, +45,110,101,120,116,252,95,1,223,0,27,28,248,80,158,36,34,195,249,80,158, +37,35,248,80,158,38,36,197,27,248,80,158,39,37,198,28,248,80,158,39,34, +193,249,80,158,40,39,27,248,80,158,42,36,196,28,248,80,158,42,41,193,248, +22,59,248,80,158,43,42,194,11,27,248,80,158,42,37,196,28,248,80,158,42, +34,193,249,80,158,43,39,248,80,158,44,36,195,248,80,158,44,38,248,80,158, +45,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, +80,196,28,27,248,80,158,40,42,249,80,158,42,43,20,15,159,42,36,50,197, +87,94,249,22,3,89,162,34,35,41,9,224,7,9,28,248,80,158,36,44,195, +12,251,22,252,39,2,11,6,17,17,110,111,116,32,97,110,32,105,100,101,110, +116,105,102,105,101,114,252,96,1,196,198,194,27,248,80,158,41,45,194,28,192, +251,22,252,39,2,11,6,20,20,100,117,112,108,105,99,97,116,101,32,105,100, +101,110,116,105,102,105,101,114,252,97,1,204,196,12,27,249,22,209,20,15,159, +41,37,50,248,80,158,42,46,249,80,158,44,43,20,15,159,44,38,50,199,27, +28,248,80,158,41,41,194,248,80,158,41,42,194,11,28,192,249,80,158,42,47, +202,27,250,22,61,200,201,198,250,80,158,46,48,89,162,34,34,45,9,224,12, +3,252,80,158,40,40,20,15,159,40,39,50,21,95,3,1,4,103,56,50,50, +252,98,1,3,1,4,103,56,50,49,252,99,1,3,1,4,103,56,50,53,252, +100,1,248,22,80,198,248,22,52,198,250,22,2,80,159,43,8,27,35,248,22, +78,201,248,22,80,201,21,96,70,108,101,116,45,118,97,108,117,101,115,252,101, +1,93,94,94,64,116,101,109,112,252,102,1,2,127,2,252,10,1,95,64,115, +101,116,33,252,103,1,62,105,100,252,104,1,2,252,102,1,2,127,20,15,159, +46,41,50,248,80,158,41,49,20,15,159,41,42,50,250,22,252,39,2,11,2, +71,200,250,22,252,39,2,11,2,71,197,83,159,34,93,80,159,34,8,27,35, +89,162,35,35,41,9,223,0,251,80,158,38,40,20,15,159,38,40,50,21,94, +3,1,4,103,56,50,52,252,105,1,3,1,4,103,56,50,51,252,106,1,248, +22,52,198,248,22,78,198,89,162,34,35,49,9,223,0,27,249,22,209,20,15, +159,37,34,50,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158, +39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,28,248,80,158, +40,38,248,80,158,41,36,194,27,248,80,158,41,37,194,28,248,80,158,41,34, +193,249,80,158,42,39,248,80,158,43,36,195,248,80,158,43,38,248,80,158,44, +37,196,11,11,11,11,28,192,27,248,22,52,194,27,248,22,53,195,250,80,158, +41,40,20,15,159,41,35,50,21,93,3,1,4,103,56,49,55,252,107,1,195, +27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248, +80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,39,27,248,80,158, +44,36,196,28,248,80,158,44,34,193,249,80,158,45,35,248,80,158,46,36,195, +248,80,158,46,38,248,80,158,47,37,196,11,27,248,80,158,44,37,196,28,248, +80,158,44,34,193,249,80,158,45,39,248,80,158,46,36,195,248,80,158,46,38, +248,80,158,47,37,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, +27,248,22,80,196,28,248,80,158,41,44,194,27,249,22,61,195,196,251,80,158, +45,40,20,15,159,45,43,50,21,94,3,1,4,103,56,50,55,252,108,1,3, +1,4,103,56,50,54,252,109,1,248,22,53,197,248,22,52,197,249,80,159,42, +8,28,35,199,201,249,80,159,39,8,28,35,196,198,34,20,98,159,36,16,16, +2,72,2,75,2,77,2,79,2,83,2,81,2,85,2,88,2,90,2,207,2, +142,30,252,110,1,2,98,1,26,99,104,101,99,107,45,100,117,112,108,105,99, +97,116,101,45,105,100,101,110,116,105,102,105,101,114,252,111,1,0,30,252,112, +1,2,210,1,20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97, +114,105,101,115,252,113,1,0,2,144,2,147,2,209,16,10,18,98,2,92,8, +114,38,37,36,16,4,8,113,11,2,252,11,1,3,1,7,101,110,118,52,50, +48,49,252,114,1,18,158,95,100,2,252,101,1,8,117,38,37,36,8,113,16, +6,8,116,11,3,1,4,103,56,49,53,252,115,1,3,1,4,103,56,49,54, +252,116,1,3,1,7,101,110,118,52,50,48,55,252,117,1,2,252,117,1,16, +6,8,115,11,2,106,2,252,10,1,3,1,7,101,110,118,52,50,48,56,252, +118,1,2,252,118,1,158,94,10,94,9,2,252,107,1,8,117,158,94,10,64, +118,111,105,100,252,119,1,8,117,8,117,18,100,2,225,8,120,38,37,36,8, +113,16,8,8,119,11,3,1,4,103,56,48,57,252,120,1,3,1,4,103,56, +49,48,252,121,1,3,1,4,103,56,49,49,252,122,1,3,1,7,101,110,118, +52,50,50,52,252,123,1,2,252,123,1,2,252,123,1,16,8,8,118,11,2, +106,2,252,104,1,2,252,10,1,3,1,7,101,110,118,52,50,50,53,252,124, +1,2,252,124,1,2,252,124,1,18,16,2,158,2,92,8,120,8,121,18,16, +2,158,2,225,8,120,8,122,18,158,161,36,102,2,252,101,1,8,125,38,37, +36,8,113,8,119,8,118,16,4,8,124,11,3,1,4,103,56,50,48,252,125, +1,3,1,7,101,110,118,52,50,52,49,252,126,1,16,4,8,123,11,2,252, +102,1,3,1,7,101,110,118,52,50,52,50,252,127,1,158,94,10,94,2,252, +98,1,2,252,99,1,8,125,2,252,100,1,8,125,8,125,18,158,96,10,2, +252,103,1,2,252,105,1,2,252,106,1,8,125,18,16,2,96,2,127,8,127, +93,8,252,186,13,16,4,8,126,11,2,169,3,1,7,101,110,118,52,50,52, +54,252,128,1,95,9,8,252,186,13,2,86,18,16,2,158,94,98,2,252,102, +1,8,131,93,8,252,178,13,16,4,8,130,11,3,1,8,119,115,116,109,112, +56,49,56,252,129,1,3,1,7,101,110,118,52,50,51,54,252,130,1,16,4, +8,129,11,3,1,4,103,56,49,57,252,131,1,3,1,7,101,110,118,52,50, +53,49,252,132,1,16,4,8,128,11,2,247,3,1,7,101,110,118,52,50,53, +50,252,133,1,158,2,127,8,131,8,131,95,9,8,252,178,13,2,210,18,158, +95,100,2,252,103,1,8,134,38,37,36,8,113,16,8,8,133,11,3,1,4, +103,56,49,50,252,134,1,3,1,4,103,56,49,51,252,135,1,3,1,4,103, +56,49,52,252,136,1,3,1,7,101,110,118,52,50,54,48,252,137,1,2,252, +137,1,2,252,137,1,16,8,8,132,11,2,106,2,252,104,1,2,252,10,1, +3,1,7,101,110,118,52,50,54,49,252,138,1,2,252,138,1,2,252,138,1, +158,2,252,108,1,8,134,158,2,252,109,1,8,134,8,134,11,16,5,93,2, +58,89,162,34,35,51,9,223,0,27,249,22,209,20,15,159,37,34,42,196,27, +28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80, +158,40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36, +195,27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,35,248, +80,158,45,36,195,27,248,80,158,46,37,196,28,248,80,158,46,38,193,248,80, +158,46,39,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27, +248,22,87,196,27,248,22,88,197,249,80,158,42,40,201,27,250,22,61,200,199, +198,252,80,158,48,41,20,15,159,48,35,42,21,95,3,1,4,103,56,51,50, +252,139,1,3,1,4,103,56,51,52,252,140,1,3,1,4,103,56,51,51,252, +141,1,248,22,52,198,248,22,78,198,248,22,80,198,250,22,252,39,2,11,2, +71,196,34,20,98,159,34,16,8,2,72,2,75,2,77,2,79,2,88,2,90, +2,144,2,85,16,2,18,98,2,92,8,136,38,37,36,16,4,8,135,11,2, +252,11,1,3,1,7,101,110,118,52,50,55,48,252,142,1,18,158,94,100,67, +99,97,108,108,47,99,99,252,143,1,8,139,38,37,36,8,135,16,10,8,138, +11,3,1,4,103,56,50,56,252,144,1,3,1,4,103,56,50,57,252,145,1, +3,1,4,103,56,51,48,252,146,1,3,1,4,103,56,51,49,252,147,1,3, +1,7,101,110,118,52,50,55,55,252,148,1,2,252,148,1,2,252,148,1,2, +252,148,1,16,10,8,137,11,2,106,2,191,65,98,111,100,121,49,252,149,1, +64,98,111,100,121,252,150,1,3,1,7,101,110,118,52,50,55,56,252,151,1, +2,252,151,1,2,252,151,1,2,252,151,1,158,161,10,2,252,0,1,93,2, +252,139,1,2,252,140,1,2,252,141,1,8,139,8,139,11,16,5,93,2,62, +89,162,34,35,51,9,223,0,27,249,22,209,20,15,159,37,34,44,196,27,28, +248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36,196,27,248,80,158, +40,37,197,28,248,80,158,40,34,193,249,80,158,41,35,248,80,158,42,36,195, +27,248,80,158,43,37,196,28,248,80,158,43,34,193,249,80,158,44,38,27,248, +80,158,46,36,196,28,248,80,158,46,39,193,248,22,59,248,80,158,47,40,194, +11,27,248,80,158,46,37,196,28,248,80,158,46,34,193,249,80,158,47,35,248, +80,158,48,36,195,27,248,80,158,49,37,196,28,248,80,158,49,39,193,248,80, +158,49,40,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, +27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,41,202, +27,251,22,61,201,202,199,200,250,80,158,47,42,89,162,34,34,43,9,224,13, +3,253,80,158,41,43,20,15,159,41,35,44,21,96,3,1,4,103,56,52,49, +252,152,1,3,1,4,103,56,52,48,252,153,1,3,1,4,103,56,52,51,252, +154,1,3,1,4,103,56,52,50,252,155,1,248,22,78,199,248,22,52,199,248, +22,88,199,248,22,87,199,21,98,2,136,9,95,73,100,101,102,105,110,101,45, +115,116,114,117,99,116,252,156,1,64,98,97,115,101,252,157,1,94,65,102,105, +101,108,100,252,158,1,2,127,2,252,149,1,2,252,150,1,2,127,20,15,159, +47,36,44,250,22,252,39,2,11,2,71,196,34,20,98,159,34,16,10,2,72, +2,75,2,77,2,79,2,81,2,88,2,90,2,144,2,147,2,85,16,3,18, +98,2,92,8,141,38,37,36,16,4,8,140,11,2,252,11,1,3,1,7,101, +110,118,52,50,57,48,252,159,1,18,158,163,38,100,2,136,8,144,38,37,36, +8,140,16,12,8,143,11,3,1,4,103,56,51,53,252,160,1,3,1,4,103, +56,51,54,252,161,1,3,1,4,103,56,51,55,252,162,1,3,1,4,103,56, +51,56,252,163,1,3,1,4,103,56,51,57,252,164,1,3,1,7,101,110,118, +52,50,57,57,252,165,1,2,252,165,1,2,252,165,1,2,252,165,1,2,252, +165,1,16,12,8,142,11,2,106,2,252,157,1,2,252,158,1,2,252,149,1, +2,252,150,1,3,1,7,101,110,118,52,51,48,48,252,166,1,2,252,166,1, +2,252,166,1,2,252,166,1,2,252,166,1,158,9,8,144,158,96,10,2,252, +156,1,2,252,152,1,2,252,153,1,8,144,158,2,252,154,1,8,144,2,252, +155,1,8,144,8,144,18,16,2,96,2,127,8,146,93,8,252,225,13,16,4, +8,145,11,2,169,3,1,7,101,110,118,52,51,49,50,252,167,1,95,9,8, +252,225,13,2,86,11,16,5,93,2,54,87,95,83,159,34,93,80,159,34,8, +27,35,89,162,35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,40,50, +21,94,3,1,4,103,56,53,57,252,168,1,3,1,4,103,56,54,48,252,169, +1,248,22,52,198,248,22,87,198,83,159,34,93,80,159,34,8,26,35,89,162, +35,35,41,9,223,0,251,80,158,38,42,20,15,159,38,39,50,21,94,3,1, +4,103,56,53,56,252,170,1,3,1,4,103,56,53,55,252,171,1,248,22,52, +198,248,22,78,198,89,162,34,35,54,9,223,0,27,249,22,209,20,15,159,37, +34,50,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80,158,39,36, +196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,28,248,80,158,40,38, +248,80,158,41,36,194,27,248,80,158,41,37,194,28,248,80,158,41,34,193,249, +80,158,42,35,248,80,158,43,36,195,27,248,80,158,44,37,196,28,248,80,158, +44,39,193,248,80,158,44,40,193,11,11,11,11,11,28,192,27,248,22,52,194, +27,248,22,78,195,27,248,22,80,196,249,80,158,41,41,200,27,249,22,61,198, +197,251,80,158,46,42,20,15,159,46,35,50,21,94,3,1,4,103,56,53,51, +252,172,1,3,1,4,103,56,53,50,252,173,1,248,22,52,197,248,22,53,197, +27,28,248,80,158,38,34,195,249,80,158,39,35,248,80,158,40,36,197,27,248, +80,158,41,37,198,28,248,80,158,41,34,193,249,80,158,42,43,27,248,80,158, +44,36,196,28,248,80,158,44,39,193,248,22,9,89,162,34,35,41,9,224,10, +1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,44,28,248, +80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41, +37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248, +80,158,43,38,248,80,158,44,37,196,11,11,194,248,80,158,39,40,196,28,248, +22,57,193,21,94,9,9,248,80,158,37,45,193,11,27,248,80,158,44,37,196, +28,248,80,158,44,34,193,249,80,158,45,35,248,80,158,46,36,195,27,248,80, +158,47,37,196,28,248,80,158,47,39,193,248,80,158,47,40,193,11,11,11,11, +28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90, +197,27,248,22,89,198,27,249,22,209,20,15,159,45,36,50,248,80,158,46,46, +249,80,158,48,47,20,15,159,48,37,50,201,27,28,248,80,158,45,39,194,248, +80,158,45,40,194,11,28,192,249,80,158,46,41,205,27,252,22,61,202,205,204, +203,200,250,80,158,50,48,89,162,34,34,48,9,224,16,3,253,80,158,41,42, +20,15,159,41,38,50,21,96,3,1,4,103,56,54,54,252,174,1,3,1,4, +103,56,54,51,252,175,1,3,1,4,103,56,54,53,252,176,1,3,1,4,103, +56,54,52,252,177,1,250,22,2,80,159,44,8,26,35,248,22,89,202,248,22, +87,202,252,22,2,80,159,46,8,27,35,248,22,89,204,248,22,89,204,248,22, +78,204,248,22,78,204,248,22,90,199,248,22,52,199,21,95,2,136,94,94,63, +116,109,112,252,178,1,2,252,25,1,2,127,95,2,136,93,94,64,115,119,97, +112,252,179,1,96,2,252,0,1,9,96,2,136,93,94,2,223,2,252,178,1, +95,2,252,103,1,2,252,178,1,64,110,97,109,101,252,180,1,95,2,252,103, +1,2,252,180,1,2,223,2,127,96,72,100,121,110,97,109,105,99,45,119,105, +110,100,252,181,1,2,252,179,1,97,2,252,0,1,9,2,252,149,1,2,252, +150,1,2,127,2,252,179,1,20,15,159,50,41,50,248,80,158,45,49,20,15, +159,45,42,50,250,22,252,39,2,11,2,71,197,34,20,98,159,36,16,16,2, +72,2,75,2,77,2,79,2,83,2,88,2,90,2,144,2,85,2,81,2,203, +2,205,2,252,112,1,2,207,2,147,2,209,16,9,18,98,2,92,8,148,38, +37,36,16,4,8,147,11,2,252,11,1,3,1,7,101,110,118,52,51,49,53, +252,182,1,18,158,162,37,100,2,136,8,151,38,37,36,8,147,16,8,8,150, +11,3,1,4,103,56,52,57,252,183,1,3,1,4,103,56,53,48,252,184,1, +3,1,4,103,56,53,49,252,185,1,3,1,7,101,110,118,52,51,50,50,252, +186,1,2,252,186,1,2,252,186,1,16,8,8,149,11,2,106,2,252,149,1, +2,252,150,1,3,1,7,101,110,118,52,51,50,51,252,187,1,2,252,187,1, +2,252,187,1,158,9,8,151,158,2,252,172,1,8,151,2,252,173,1,8,151, +8,151,18,100,2,92,8,154,38,37,36,8,147,16,12,8,153,11,3,1,4, +103,56,52,52,252,188,1,3,1,4,103,56,52,53,252,189,1,3,1,4,103, +56,52,54,252,190,1,3,1,4,103,56,52,55,252,191,1,3,1,4,103,56, +52,56,252,192,1,3,1,7,101,110,118,52,51,52,50,252,193,1,2,252,193, +1,2,252,193,1,2,252,193,1,2,252,193,1,16,12,8,152,11,2,106,2, +252,180,1,2,252,25,1,2,252,149,1,2,252,150,1,3,1,7,101,110,118, +52,51,52,51,252,194,1,2,252,194,1,2,252,194,1,2,252,194,1,2,252, +194,1,18,16,2,158,2,225,8,154,8,155,18,158,95,102,2,136,8,158,38, +37,36,8,147,8,153,8,152,16,4,8,157,11,3,1,4,103,56,53,54,252, +195,1,3,1,7,101,110,118,52,51,54,48,252,196,1,16,4,8,156,11,2, +252,178,1,3,1,7,101,110,118,52,51,54,49,252,197,1,158,2,252,174,1, +8,158,158,96,10,2,136,93,94,2,252,179,1,159,2,252,0,1,9,2,252, +175,1,96,2,252,181,1,2,252,179,1,160,2,252,0,1,9,2,252,176,1, +2,252,177,1,2,252,179,1,8,158,8,158,18,158,95,10,2,252,170,1,2, +252,171,1,8,158,18,158,97,10,2,136,93,94,2,223,2,252,168,1,95,2, +252,103,1,2,252,168,1,2,252,169,1,95,2,252,103,1,2,252,169,1,2, +223,8,158,18,16,2,96,2,127,8,160,93,8,252,5,14,16,4,8,159,11, +2,169,3,1,7,101,110,118,52,51,54,53,252,198,1,95,9,8,252,5,14, +2,86,18,16,2,158,94,98,2,252,178,1,8,164,93,8,252,253,13,16,4, +8,163,11,3,1,8,119,115,116,109,112,56,53,52,252,199,1,3,1,7,101, +110,118,52,51,53,53,252,200,1,16,4,8,162,11,3,1,4,103,56,53,53, +252,201,1,3,1,7,101,110,118,52,51,55,50,252,202,1,16,4,8,161,11, +2,247,3,1,7,101,110,118,52,51,55,51,252,203,1,158,2,127,8,164,8, +164,95,9,8,252,253,13,2,210,11,16,5,93,2,55,89,162,34,35,49,9, +223,0,27,249,22,209,20,15,159,37,34,42,196,27,28,248,80,158,37,34,194, +249,80,158,38,35,248,80,158,39,36,196,27,248,80,158,40,37,197,28,248,80, +158,40,34,193,249,80,158,41,35,248,80,158,42,36,195,27,248,80,158,43,37, +196,28,248,80,158,43,38,193,248,80,158,43,39,193,11,11,11,28,192,27,248, +22,52,194,27,248,22,78,195,27,248,22,80,196,249,80,158,41,40,200,27,249, +22,61,197,198,251,80,158,46,41,20,15,159,46,35,42,21,94,3,1,4,103, +56,55,49,252,204,1,3,1,4,103,56,55,48,252,205,1,248,22,53,197,248, +22,52,197,250,22,252,39,2,11,2,71,196,34,20,98,159,34,16,8,2,72, +2,75,2,77,2,79,2,88,2,90,2,144,2,85,16,2,18,98,2,92,8, +166,38,37,36,16,4,8,165,11,2,252,11,1,3,1,7,101,110,118,52,51, +55,55,252,206,1,18,158,96,100,2,252,101,1,8,169,38,37,36,8,165,16, +8,8,168,11,3,1,4,103,56,54,55,252,207,1,3,1,4,103,56,54,56, +252,208,1,3,1,4,103,56,54,57,252,209,1,3,1,7,101,110,118,52,51, +56,51,252,210,1,2,252,210,1,2,252,210,1,16,8,8,167,11,2,106,2, +252,9,1,2,252,10,1,3,1,7,101,110,118,52,51,56,52,252,211,1,2, +252,211,1,2,252,211,1,158,94,10,94,96,2,126,63,99,112,117,252,212,1, +64,117,115,101,114,252,213,1,62,103,99,252,214,1,95,70,116,105,109,101,45, +97,112,112,108,121,252,215,1,160,2,252,0,1,9,2,252,204,1,2,252,205, +1,64,110,117,108,108,252,216,1,8,169,158,98,10,66,112,114,105,110,116,102, +252,217,1,6,40,40,99,112,117,32,116,105,109,101,58,32,126,115,32,114,101, +97,108,32,116,105,109,101,58,32,126,115,32,103,99,32,116,105,109,101,58,32, +126,115,126,110,252,218,1,2,252,212,1,2,252,213,1,2,252,214,1,8,169, +158,96,10,2,252,75,1,2,252,76,1,2,126,8,169,8,169,11,100,83,159, +34,97,80,159,34,34,35,80,159,34,35,35,80,159,34,36,35,80,159,34,37, +35,80,159,34,38,35,27,247,22,252,114,2,87,94,28,192,28,248,22,252,113, +2,193,12,250,22,252,40,2,2,252,156,1,6,15,15,105,110,115,112,101,99, +116,111,114,32,111,114,32,35,102,252,219,1,195,12,91,159,39,11,90,161,39, +34,11,254,22,252,91,2,2,95,11,35,34,11,9,204,252,22,7,197,198,199, +250,22,252,93,2,203,34,61,112,252,220,1,250,22,252,94,2,204,34,2,252, +220,1,83,159,34,93,80,159,34,39,35,89,162,34,35,41,2,14,223,0,87, +94,28,248,80,158,35,36,194,12,250,22,252,40,2,2,14,6,7,7,112,114, +111,109,105,115,101,252,221,1,196,27,248,80,158,36,37,195,28,248,22,0,193, +27,249,22,6,195,22,59,87,94,28,248,22,0,248,80,158,38,37,197,249,80, +158,38,38,197,194,12,249,22,1,22,7,248,80,158,39,37,198,249,22,1,22, +7,194,83,159,34,93,80,159,34,40,35,89,162,34,34,38,2,16,223,0,248, +80,158,35,41,249,22,19,11,80,158,37,42,83,159,34,93,80,159,34,43,35, +89,162,34,36,42,2,23,223,0,87,95,28,248,22,252,223,2,194,12,252,22, +252,40,2,2,23,6,16,16,112,97,114,97,109,101,116,101,114,105,122,97,116, +105,111,110,252,222,1,34,198,199,28,28,248,22,0,195,249,22,34,196,34,11, +12,252,22,252,40,2,2,23,6,19,19,112,114,111,99,101,100,117,114,101,32, +40,97,114,105,116,121,32,48,41,252,223,1,35,198,199,20,14,159,80,158,34, +42,193,247,194,83,159,34,97,80,159,34,44,35,80,159,34,45,35,80,159,34, +46,35,80,159,34,47,35,80,159,34,48,35,252,22,252,91,2,2,96,11,35, +34,11,83,159,34,97,80,159,34,49,35,80,159,34,50,35,80,159,34,51,35, +80,159,34,52,35,80,159,34,53,35,27,247,22,252,114,2,87,94,28,192,28, +248,22,252,9,2,248,22,252,113,2,194,250,22,252,40,2,2,252,156,1,2, +252,219,1,195,12,12,91,159,39,11,90,161,39,34,11,254,22,252,91,2,2, +96,11,35,34,11,9,204,252,22,7,197,198,199,250,22,252,93,2,203,34,64, +99,101,108,108,252,224,1,250,22,252,94,2,204,34,2,252,224,1,83,159,34, +93,80,159,34,54,35,89,162,34,34,38,2,45,223,0,248,80,158,35,45,249, +22,19,11,80,158,37,55,83,159,34,93,80,159,34,56,35,89,162,38,36,42, +2,49,223,0,87,95,28,248,80,158,35,46,194,12,252,22,252,40,2,2,49, +6,22,22,98,114,101,97,107,32,112,97,114,97,109,101,116,101,114,105,122,97, +116,105,111,110,252,225,1,34,198,199,28,28,248,22,0,195,249,22,34,196,34, +11,12,252,22,252,40,2,2,23,6,19,19,112,114,111,99,101,100,117,114,101, +32,40,97,114,105,116,121,32,48,41,252,226,1,35,198,199,83,158,38,20,93, +94,20,14,159,80,158,34,55,249,80,158,36,47,195,34,87,94,247,80,158,34, +57,247,194,247,80,158,34,57,96,68,35,37,107,101,114,110,101,108,252,227,1, +2,94,2,93,2,18,96,2,252,227,1,2,73,2,98,2,97,0}; + EVAL_ONE_SIZED_STR((char *)expr, 16271); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,252,249,1,252,201,55,159,34,20,98,159,34,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,252,243,1,252,231,52,159,34,20,98,159,34,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37, -109,105,115,99,1,29,2,11,11,10,10,10,46,80,158,34,34,20,98,159,40, +109,105,115,99,1,29,2,11,11,10,10,10,46,80,158,34,34,20,98,159,39, 16,47,30,3,2,2,72,112,97,116,104,45,115,116,114,105,110,103,63,4,254, 1,30,5,2,2,70,45,114,101,58,115,117,102,102,105,120,6,254,1,30,7, 2,2,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105, @@ -3763,627 +3454,592 @@ 11,11,11,11,11,11,11,11,11,11,11,11,11,16,24,2,85,2,89,2,87, 2,47,2,40,2,28,2,69,2,83,2,91,2,22,2,24,2,18,2,49,2, 67,2,12,2,97,2,26,2,8,2,4,2,71,2,14,2,16,2,93,2,98, -57,58,93,16,5,93,2,98,89,162,34,35,8,64,9,223,0,27,249,22,209, -20,15,159,37,34,40,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248, -80,158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80, -158,41,35,248,80,158,42,36,195,27,248,80,158,43,37,196,28,248,80,158,43, -38,193,248,80,158,43,39,193,11,11,11,28,192,27,248,22,52,194,27,248,22, -78,195,27,248,22,80,196,27,249,22,209,20,15,159,42,35,40,249,22,209,203, -247,22,48,27,249,22,209,20,15,159,43,36,40,249,22,209,204,247,22,48,27, -249,22,209,20,15,159,44,37,40,249,22,209,205,247,22,48,27,252,22,61,198, -201,199,202,200,27,20,15,159,44,38,40,250,22,209,20,15,159,47,39,40,250, -22,209,20,15,159,50,40,40,250,22,60,20,15,159,53,41,40,250,22,209,20, -15,159,56,42,40,248,22,60,250,22,209,20,15,159,8,26,43,40,249,22,56, -248,22,89,23,20,20,15,159,8,28,44,40,20,15,159,8,26,45,40,20,15, -159,56,46,40,250,22,209,20,15,159,56,47,40,251,22,60,20,15,159,8,26, -48,40,250,22,209,20,15,159,8,29,49,40,248,22,60,250,22,209,20,15,159, -8,33,50,40,249,22,60,248,22,87,23,27,250,22,209,20,15,159,8,38,51, -40,250,22,60,20,15,159,8,41,52,40,248,22,90,23,33,250,22,209,20,15, -159,8,44,53,40,250,22,60,20,15,159,8,47,54,40,250,22,209,20,15,159, -8,50,55,40,248,22,60,250,22,209,20,15,159,8,54,56,40,249,22,60,248, -22,52,23,48,250,22,209,20,15,159,8,59,57,40,249,22,60,20,15,159,8, -61,58,40,248,22,89,23,53,20,15,159,8,59,59,40,20,15,159,8,54,8, -26,40,20,15,159,8,50,8,27,40,250,22,209,20,15,159,8,50,8,28,40, -251,22,62,20,15,159,8,54,8,29,40,20,15,159,8,54,8,30,40,248,22, -52,23,46,248,22,78,23,46,20,15,159,8,50,8,31,40,20,15,159,8,44, -8,32,40,20,15,159,8,38,8,33,40,20,15,159,8,33,8,34,40,20,15, -159,8,29,8,35,40,250,22,209,20,15,159,8,29,8,36,40,250,22,60,20, -15,159,8,32,8,37,40,248,22,89,23,24,250,22,209,20,15,159,8,35,8, -38,40,249,22,60,20,15,159,8,37,8,39,40,248,22,87,23,29,20,15,159, -8,35,8,40,40,20,15,159,8,29,8,41,40,248,22,87,23,18,20,15,159, -56,8,42,40,20,15,159,50,8,43,40,195,250,22,252,39,2,11,6,10,10, -98,97,100,32,115,121,110,116,97,120,99,196,34,20,98,159,34,16,6,30,100, -65,35,37,115,116,120,101,69,115,116,120,45,112,97,105,114,63,102,11,30,103, -2,101,67,99,111,110,115,47,35,102,104,1,30,105,2,101,67,115,116,120,45, -99,97,114,106,5,30,107,2,101,67,115,116,120,45,99,100,114,108,6,30,109, -2,101,69,115,116,120,45,108,105,115,116,63,110,8,30,111,2,101,69,115,116, -120,45,62,108,105,115,116,112,4,16,44,18,98,64,104,101,114,101,113,40,98, -38,10,34,11,96,159,68,35,37,100,101,102,105,110,101,114,9,11,159,70,35, -37,109,101,109,116,114,97,99,101,115,9,11,159,74,35,37,115,109,97,108,108, -45,115,99,104,101,109,101,116,9,11,159,73,35,37,109,111,114,101,45,115,99, -104,101,109,101,117,9,11,16,92,2,26,2,2,2,34,2,2,2,85,2,2, -2,47,2,2,2,4,2,2,2,6,2,2,2,73,2,2,2,93,2,2,2, -87,2,2,2,8,2,2,2,22,2,2,2,95,2,2,2,77,2,2,2,28, -2,2,2,14,2,2,2,53,2,2,2,12,2,2,2,67,2,2,2,57,2, -2,2,32,2,2,2,55,2,2,2,97,2,2,2,30,2,2,2,75,2,2, -2,59,2,2,2,24,2,2,2,89,2,2,2,38,2,2,2,16,2,2,2, -63,2,2,2,10,2,2,2,71,2,2,2,91,2,2,2,65,2,2,2,20, -2,2,2,79,2,2,2,69,2,2,2,81,2,2,2,51,2,2,2,36,2, -2,2,49,2,2,2,18,2,2,2,83,2,2,2,61,2,2,2,40,2,2, -2,98,2,2,98,37,10,35,11,94,159,76,35,37,115,116,120,99,97,115,101, -45,115,99,104,101,109,101,118,9,11,159,2,101,9,11,16,0,96,36,8,254, -1,11,16,0,16,4,35,11,61,120,119,3,1,7,101,110,118,52,53,55,57, -120,18,100,2,113,43,38,37,36,35,16,8,42,11,3,1,4,103,53,51,48, -121,3,1,4,103,53,51,49,122,3,1,4,103,53,51,50,123,3,1,7,101, -110,118,52,53,56,53,124,2,124,2,124,16,8,41,11,61,95,125,64,97,114, -103,115,126,64,98,111,100,121,127,3,1,7,101,110,118,52,53,56,54,128,2, -128,2,128,18,158,2,113,43,18,158,2,113,43,18,16,2,95,66,115,114,99, -116,97,103,129,44,93,8,252,175,13,95,9,8,252,175,13,69,35,37,115,116, -120,99,97,115,101,130,18,106,64,100,101,115,116,131,51,38,37,36,35,42,41, -16,4,50,11,3,1,4,103,53,51,55,132,3,1,7,101,110,118,52,54,48, -50,133,16,4,49,11,68,99,111,110,116,109,97,114,107,134,3,1,7,101,110, -118,52,54,48,51,135,16,4,48,11,3,1,4,103,53,51,57,136,3,1,7, -101,110,118,52,54,49,52,137,16,4,47,11,64,102,117,110,99,138,3,1,7, -101,110,118,52,54,49,53,139,16,4,46,11,3,1,4,103,53,52,49,140,3, -1,7,101,110,118,52,54,50,54,141,16,4,45,11,67,110,101,119,109,97,114, -107,142,3,1,7,101,110,118,52,54,50,55,143,18,158,63,99,116,120,144,51, -18,158,63,108,101,116,145,51,18,158,2,144,51,18,158,2,144,51,18,16,2, -103,93,16,2,158,11,51,9,59,98,58,10,34,11,94,159,2,116,9,11,159, -2,101,9,11,16,6,73,115,121,110,116,97,120,45,99,97,115,101,42,42,146, -29,147,11,11,66,115,121,110,116,97,120,148,2,147,1,20,101,108,108,105,112, -115,105,115,45,99,111,117,110,116,45,101,114,114,111,114,149,2,147,98,57,10, -35,11,95,159,64,35,37,115,99,150,9,11,159,2,116,9,11,159,2,101,9, -11,16,0,96,56,8,254,1,11,16,0,16,4,55,11,2,119,3,1,6,101, -110,118,52,50,49,151,16,4,54,11,68,104,101,114,101,45,115,116,120,152,3, -1,6,101,110,118,52,50,51,153,16,4,53,11,2,152,2,153,13,16,4,35, -2,147,2,130,11,93,8,252,175,13,16,6,52,11,61,114,154,63,115,114,99, -155,3,1,7,101,110,118,52,54,51,49,156,2,156,95,9,8,252,175,13,2, -130,18,158,2,144,51,18,158,2,144,51,18,158,2,144,51,18,158,2,145,51, -18,158,2,144,51,18,158,2,144,51,18,158,2,144,51,18,158,66,108,97,109, -98,100,97,157,51,18,158,2,144,51,18,158,2,145,51,18,158,2,144,51,18, -158,2,144,51,18,158,2,144,51,18,158,1,31,117,110,105,111,110,101,100,45, -109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103,45,118,97,108, -117,101,158,51,18,158,2,144,51,18,158,2,144,51,18,158,2,144,51,18,158, -2,144,51,18,158,1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116, -105,111,110,45,109,97,114,107,159,51,18,158,1,30,109,101,109,111,114,121,45, -116,114,97,99,101,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97, -114,107,160,51,18,158,2,144,51,18,158,2,144,51,18,158,2,144,51,18,158, -2,144,51,18,158,2,144,51,18,158,2,144,51,18,158,64,115,101,116,33,161, -51,18,158,2,144,51,18,158,1,30,110,101,119,45,109,101,109,116,114,97,99, -101,45,116,114,97,99,107,105,110,103,45,102,117,110,99,116,105,111,110,162,51, -18,158,2,144,51,18,158,2,144,51,18,158,2,144,51,18,158,2,144,51,11, -140,83,159,34,93,80,159,34,8,52,35,89,162,8,64,35,44,64,108,111,111, -112,163,223,0,28,248,22,57,194,9,27,248,22,52,195,27,28,248,22,252,40, -3,194,193,28,248,22,252,39,3,194,249,22,252,41,3,195,250,80,158,41,46, -248,22,252,54,3,69,101,120,101,99,45,102,105,108,101,164,11,10,250,80,158, -39,46,248,22,252,54,3,2,164,196,10,28,192,249,22,51,248,22,252,43,3, -249,22,252,41,3,197,247,22,252,55,3,248,80,159,39,8,52,35,248,22,53, -199,248,80,159,37,8,52,35,248,22,53,197,83,159,34,93,80,159,34,8,51, -35,89,162,8,64,36,48,2,163,223,0,27,249,22,252,65,3,80,158,37,57, -197,28,192,27,249,22,252,36,3,197,27,248,22,78,197,28,249,22,252,194,1, -194,5,1,46,165,64,115,97,109,101,166,28,249,22,252,194,1,194,5,2,46, -46,167,62,117,112,168,248,22,252,29,3,193,27,248,22,87,195,27,249,22,252, -65,3,80,158,40,57,195,28,192,249,80,159,40,8,51,35,249,22,252,36,3, -198,27,248,22,78,198,28,249,22,252,194,1,194,2,165,2,166,28,249,22,252, -194,1,194,2,167,2,168,248,22,252,29,3,193,248,22,87,195,249,22,252,36, -3,196,248,22,252,29,3,196,249,22,252,36,3,196,248,22,252,29,3,198,83, -159,34,93,80,159,34,8,50,35,89,162,34,35,47,67,103,101,116,45,100,105, -114,169,223,0,27,28,194,28,249,22,252,11,2,196,80,158,37,8,29,80,158, -35,8,30,27,248,22,252,213,1,248,22,44,197,28,249,22,252,66,3,80,158, -38,58,194,91,159,37,11,90,161,37,34,11,248,22,252,37,3,248,22,252,29, -3,250,22,252,197,1,200,35,248,22,252,191,1,201,87,95,83,160,36,11,80, -158,39,8,29,198,83,160,36,11,80,158,39,8,30,192,192,11,11,28,192,192, -27,247,22,252,90,1,28,192,192,247,22,252,55,3,83,159,34,93,80,159,34, -8,49,35,89,162,34,35,43,9,223,0,87,94,28,27,248,22,252,25,3,195, -28,192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248, -22,252,39,3,196,11,12,250,22,252,40,2,2,47,6,25,25,112,97,116,104, -32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103, -170,196,28,248,22,252,38,3,194,12,248,22,252,187,2,249,22,252,131,2,248, -22,252,165,1,250,22,252,184,1,6,29,29,126,97,58,32,105,110,118,97,108, -105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,58,32,126,115,171, -2,47,200,247,22,15,83,159,34,93,80,159,34,8,48,35,89,162,34,36,42, -68,119,105,116,104,45,100,105,114,172,223,0,20,14,159,80,158,34,53,250,80, -158,37,54,249,22,19,11,80,158,39,53,22,252,90,1,28,248,22,252,25,3, -197,196,247,22,252,55,3,247,194,83,159,34,93,80,159,34,8,47,35,89,162, -8,36,37,38,66,103,101,116,45,115,111,173,223,0,89,162,34,35,46,9,226, -0,1,3,2,252,22,252,36,3,199,201,6,6,6,110,97,116,105,118,101,174, -247,22,252,220,1,28,198,249,80,159,44,36,35,199,80,158,44,50,197,83,159, -34,93,80,159,34,34,35,32,175,89,162,34,35,38,2,4,222,27,248,22,252, -25,3,194,28,192,192,28,248,22,252,136,1,194,27,248,22,252,38,3,195,28, -192,192,248,22,252,39,3,195,11,83,159,34,93,80,159,34,35,35,248,22,252, -63,3,5,12,40,91,46,93,91,94,46,93,42,124,41,36,176,83,159,34,93, -80,159,34,36,35,89,162,34,36,47,2,8,223,0,87,95,28,27,248,22,252, -25,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28, -192,192,248,22,252,39,3,196,11,12,252,22,252,40,2,2,8,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,177,34,198,199,28,28,248,22,252,136,1,195,10,248,22,252,188,1, -195,12,252,22,252,40,2,2,8,6,21,21,115,116,114,105,110,103,32,111,114, -32,98,121,116,101,32,115,116,114,105,110,103,178,35,198,199,91,159,37,11,90, -161,37,34,11,248,22,252,37,3,197,87,94,28,192,12,250,22,252,41,2,2, -8,6,36,36,99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102, -105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,179,199, -27,248,22,252,29,3,250,22,252,71,3,80,158,42,35,248,22,252,27,3,199, -28,248,22,252,136,1,203,249,22,252,212,1,204,8,63,202,28,248,22,252,25, -3,194,249,22,252,36,3,195,194,192,83,159,34,93,80,159,34,37,35,249,22, -252,138,1,7,92,7,92,83,159,34,93,80,159,34,38,35,89,162,34,35,45, -2,12,223,0,87,94,28,27,248,22,252,25,3,195,28,192,192,28,248,22,252, -136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196,11,12, -250,22,252,40,2,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115, -101,180,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,181,196,28,249,22,252,11,2,247,22,252,219, -1,67,119,105,110,100,111,119,115,182,27,28,248,22,252,136,1,195,194,248,22, -252,26,3,195,28,249,22,252,66,3,33,21,35,114,120,34,94,91,92,92,93, -91,92,92,93,91,63,93,91,92,92,93,34,183,194,28,248,22,252,136,1,195, -248,22,252,28,3,195,194,27,248,22,252,175,1,194,248,22,252,28,3,250,22, -252,72,3,33,6,35,114,120,34,47,34,184,28,249,22,252,66,3,33,22,35, -114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,34, -185,198,196,250,22,252,72,3,33,19,35,114,120,34,91,32,46,93,43,40,91, -47,92,92,93,42,41,36,34,186,199,6,2,2,92,49,187,80,158,40,37,28, -249,22,252,11,2,247,22,252,219,1,65,109,97,99,111,115,188,248,22,252,28, -3,248,22,252,175,1,28,248,22,252,136,1,196,195,248,22,252,26,3,196,28, -248,22,252,136,1,194,248,22,252,28,3,194,193,83,159,34,93,80,159,34,39, -35,91,159,36,11,90,161,35,35,11,32,189,89,162,8,64,35,38,65,99,104, -101,99,107,190,222,28,248,22,130,193,12,250,22,252,40,2,2,14,6,4,4, -114,101,97,108,191,195,20,12,95,35,89,162,8,36,36,53,2,14,223,0,87, -95,28,248,22,130,194,12,250,22,252,40,2,2,14,2,191,196,28,248,22,130, -195,12,250,22,252,40,2,2,14,2,191,197,27,248,22,176,196,27,249,22,173, -197,195,27,249,22,172,198,196,28,249,22,181,198,198,28,250,22,184,196,34,195, -28,248,22,133,197,34,33,3,48,46,48,192,28,248,22,188,194,248,22,173,27, -248,22,173,195,27,248,22,173,197,28,248,22,132,194,193,27,248,22,144,195,27, -248,22,144,195,28,249,22,182,195,194,248,22,170,194,249,22,172,195,248,22,175, -249,205,248,22,175,249,22,173,202,201,248,22,175,249,22,173,203,201,28,248,22, -132,194,193,27,248,22,144,195,27,248,22,144,195,28,249,22,182,195,194,248,22, -170,194,249,22,172,195,248,22,175,249,202,248,22,175,249,22,173,202,201,248,22, -175,249,22,173,203,201,33,6,43,110,97,110,46,48,193,89,162,8,36,36,54, -72,102,105,110,100,45,98,101,116,119,101,101,110,194,223,0,28,248,22,132,194, -193,27,248,22,144,195,27,248,22,144,197,28,249,22,182,195,194,248,22,170,194, -249,22,172,195,248,22,175,27,248,22,175,249,22,173,203,200,27,248,22,175,249, -22,173,203,201,28,248,22,132,194,193,27,248,22,144,195,27,248,22,144,195,28, -249,22,182,195,194,248,22,170,194,249,22,172,195,248,22,175,249,206,248,22,175, -249,22,173,202,201,248,22,175,249,22,173,203,201,83,159,34,93,80,159,34,40, -35,32,195,89,162,34,34,41,2,16,222,91,159,38,11,90,161,35,34,11,83, -160,40,34,35,11,90,161,35,35,11,83,160,40,34,35,11,90,161,35,36,11, -83,160,40,34,35,11,90,161,35,37,11,89,162,34,34,35,1,24,114,101,112, -45,101,114,114,111,114,45,101,115,99,97,112,101,45,104,97,110,100,108,101,114, -196,223,1,247,207,250,22,31,89,162,34,34,38,9,225,6,5,3,90,161,35, -34,10,247,22,252,45,2,90,161,35,35,10,247,22,252,31,2,87,94,248,22, -252,45,2,195,248,22,252,31,2,11,89,162,34,34,37,9,224,5,4,248,22, -9,89,162,8,36,35,41,9,224,2,1,250,32,197,89,163,8,102,37,40,69, -114,101,112,108,45,108,111,111,112,198,34,223,6,87,94,248,22,9,89,162,34, -35,41,9,225,3,2,1,250,22,31,89,162,8,36,34,38,9,225,5,4,6, -87,94,248,22,252,31,2,210,90,161,35,35,10,192,12,89,162,34,34,38,9, -223,3,27,247,247,22,40,87,94,28,248,22,252,70,1,193,248,194,12,12,83, -159,45,32,199,89,162,35,35,37,9,222,249,22,3,247,22,39,194,248,247,22, -252,32,2,28,248,22,206,194,248,22,252,30,2,194,193,89,162,8,36,34,37, -9,224,5,4,90,161,35,35,10,247,22,252,31,2,87,94,248,22,252,31,2, -11,90,161,35,34,10,11,12,250,2,197,195,196,197,197,195,196,89,162,8,36, -34,38,9,225,5,4,3,87,95,248,22,252,45,2,208,248,22,252,31,2,210, -90,161,35,35,10,11,90,161,35,34,10,11,12,83,159,34,93,80,159,34,41, -35,32,200,89,162,34,35,45,2,18,222,87,94,28,27,248,22,252,25,3,194, -28,192,192,28,248,22,252,136,1,194,27,248,22,252,38,3,195,28,192,192,248, -22,252,39,3,195,11,12,250,22,252,40,2,2,18,6,25,25,112,97,116,104, -32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41, -201,195,91,159,37,11,90,161,37,34,11,248,22,252,37,3,196,28,194,248,22, -252,187,2,249,22,252,161,2,248,22,252,165,1,249,22,252,184,1,6,36,36, -108,111,97,100,47,99,100,58,32,99,97,110,110,111,116,32,111,112,101,110,32, -97,32,100,105,114,101,99,116,111,114,121,58,32,126,115,202,201,247,22,15,28, -248,22,252,25,3,193,87,94,28,248,22,252,31,3,193,12,248,22,252,187,2, -249,22,252,161,2,248,22,252,165,1,250,22,252,184,1,6,65,65,108,111,97, -100,47,99,100,58,32,100,105,114,101,99,116,111,114,121,32,111,102,32,126,115, -32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,32,40,99,117,114,114, -101,110,116,32,100,105,114,101,99,116,111,114,121,32,105,115,32,126,115,41,203, -202,247,22,252,55,3,247,22,15,27,247,22,252,55,3,250,22,31,89,162,34, -34,36,9,223,4,248,22,252,55,3,193,89,162,34,34,36,9,223,5,248,22, -252,88,1,193,89,162,34,34,36,9,223,3,248,22,252,55,3,193,248,22,252, -88,1,196,83,159,34,93,80,159,34,42,35,32,204,89,162,34,37,41,2,20, -222,87,94,28,27,248,22,252,25,3,196,28,192,192,28,248,22,252,136,1,196, -27,248,22,252,38,3,197,28,192,192,248,22,252,39,3,197,11,12,250,22,252, -40,2,196,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103,32, -40,115,97,110,115,32,110,117,108,41,205,197,28,248,22,252,40,3,195,248,193, -195,27,247,22,252,90,1,248,194,28,193,249,22,252,41,3,198,195,196,83,159, -34,93,80,159,34,43,35,89,162,34,35,40,2,22,223,0,87,94,28,27,248, -22,252,25,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22,252,38,3, -196,28,192,192,248,22,252,39,3,196,11,12,250,22,252,40,2,2,22,2,205, -196,28,248,22,252,40,3,194,248,22,252,88,1,194,27,247,22,252,90,1,248, -22,252,88,1,28,193,249,22,252,41,3,197,195,195,83,159,34,93,80,159,34, -44,35,89,162,34,35,40,2,24,223,0,87,94,28,27,248,22,252,25,3,195, -28,192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248, -22,252,39,3,196,11,12,250,22,252,40,2,2,24,2,205,196,28,248,22,252, -40,3,194,248,22,252,59,3,194,27,247,22,252,90,1,248,22,252,59,3,28, -193,249,22,252,41,3,197,195,195,83,159,34,93,80,159,34,45,35,27,248,22, -252,63,3,248,22,252,211,1,27,27,247,22,252,219,1,28,249,22,72,194,21, -96,64,117,110,105,120,206,64,98,101,111,115,207,65,111,115,107,105,116,208,66, -109,97,99,111,115,120,209,6,1,1,58,210,28,249,22,72,194,21,94,2,182, -2,188,6,1,1,59,211,12,250,22,252,184,1,6,14,14,40,91,94,126,97, -93,42,41,126,97,40,46,42,41,212,195,195,89,162,8,36,36,42,2,26,223, -0,87,95,28,28,248,22,252,188,1,194,10,248,22,252,136,1,194,12,250,22, -252,40,2,2,26,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111, -114,32,115,116,114,105,110,103,213,196,28,28,248,22,58,195,249,22,4,22,252, -25,3,196,11,12,250,22,252,40,2,2,26,6,13,13,108,105,115,116,32,111, -102,32,112,97,116,104,115,214,197,250,32,215,89,162,8,64,37,44,2,163,222, -27,249,22,252,65,3,196,197,28,192,27,248,22,78,194,27,250,2,215,198,199, -248,22,87,198,28,249,22,252,194,1,195,5,0,216,249,22,65,197,194,249,22, -51,248,22,252,29,3,196,194,28,249,22,252,194,1,197,2,216,249,22,65,195, -9,249,22,51,248,22,252,29,3,198,9,197,195,28,248,22,252,136,1,197,248, -22,252,211,1,197,196,83,159,34,93,80,159,34,46,35,83,158,37,20,92,96, -2,28,89,162,8,36,37,49,9,223,0,87,95,28,27,248,22,252,25,3,195, -28,192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248, -22,252,39,3,196,11,12,250,22,252,40,2,2,28,6,25,25,112,97,116,104, -32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41, -217,196,28,28,194,28,27,248,22,252,25,3,196,28,192,192,28,248,22,252,136, -1,196,27,248,22,252,38,3,197,28,192,192,248,22,252,39,3,197,11,248,22, -252,38,3,195,11,10,12,250,22,252,40,2,2,28,6,29,29,35,102,32,111, -114,32,114,101,108,97,116,105,118,101,32,112,97,116,104,32,111,114,32,115,116, -114,105,110,103,218,197,28,28,248,22,252,38,3,194,91,159,37,11,90,161,37, -34,11,248,22,252,37,3,197,249,22,252,11,2,194,68,114,101,108,97,116,105, -118,101,219,11,27,248,22,252,217,1,6,4,4,80,65,84,72,220,27,28,193, -27,249,80,158,39,45,196,9,28,249,22,252,11,2,247,22,252,219,1,2,182, -249,22,51,248,22,252,29,3,5,1,46,221,194,192,9,28,248,22,57,193,11, -27,248,22,252,41,3,248,22,52,195,27,249,22,252,36,3,195,199,28,248,22, -252,30,3,193,250,32,222,89,162,8,100,37,48,70,102,111,117,110,100,45,101, -120,101,99,223,222,28,192,91,159,37,11,90,161,37,34,11,248,22,252,37,3, -198,27,28,197,27,248,22,252,42,3,200,28,249,22,252,13,2,194,201,11,28, -248,22,252,38,3,193,250,2,222,200,201,249,22,252,36,3,199,197,250,2,222, -200,201,195,11,28,192,192,27,28,248,22,252,25,3,195,27,249,22,252,36,3, -197,200,28,28,248,22,252,31,3,193,10,248,22,252,30,3,193,192,11,11,28, -192,192,28,198,11,27,248,22,252,42,3,201,28,249,22,252,13,2,194,202,11, -28,248,22,252,38,3,193,250,2,222,201,202,249,22,252,36,3,200,197,250,2, -222,201,202,195,194,201,202,195,251,32,224,89,162,8,100,38,48,2,163,222,28, -248,22,57,196,11,27,248,22,252,41,3,248,22,52,198,27,249,22,252,36,3, -195,196,28,248,22,252,30,3,193,250,2,222,198,199,195,27,248,22,53,199,28, -248,22,57,193,11,27,248,22,252,41,3,248,22,52,195,27,249,22,252,36,3, -195,199,28,248,22,252,30,3,193,250,2,222,201,202,195,251,2,224,201,202,203, -248,22,53,199,201,202,203,248,22,53,199,27,248,22,252,41,3,195,28,248,22, -252,30,3,193,250,2,222,198,199,195,11,89,162,34,36,40,9,223,0,250,80, -158,37,46,196,197,11,89,162,34,35,39,9,223,0,250,80,158,37,46,196,11, -11,83,159,34,93,80,159,34,47,35,32,225,89,162,34,36,43,2,30,222,87, -94,28,27,248,22,252,25,3,195,28,192,192,28,248,22,252,136,1,195,27,248, -22,252,38,3,196,28,192,192,248,22,252,39,3,196,11,12,250,22,252,40,2, -195,2,170,196,28,248,22,252,38,3,194,12,248,22,252,187,2,249,22,252,131, -2,248,22,252,165,1,250,22,252,184,1,2,171,199,200,247,22,15,83,159,34, -93,80,159,34,48,35,89,162,34,37,45,2,32,223,0,87,94,87,94,28,27, -248,22,252,25,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252,38, -3,197,28,192,192,248,22,252,39,3,197,11,12,250,22,252,40,2,196,2,170, -197,28,248,22,252,38,3,195,12,248,22,252,187,2,249,22,252,131,2,248,22, -252,165,1,250,22,252,184,1,2,171,200,201,247,22,15,249,22,3,89,162,34, -35,44,9,224,2,3,87,94,28,27,248,22,252,25,3,196,28,192,192,28,248, -22,252,136,1,196,27,248,22,252,38,3,197,28,192,192,248,22,252,39,3,197, -11,12,250,22,252,40,2,195,2,170,197,28,248,22,252,38,3,195,12,248,22, -252,187,2,249,22,252,131,2,248,22,252,165,1,250,22,252,184,1,2,171,199, -201,247,22,15,197,83,159,34,93,80,159,34,49,35,32,226,89,162,34,37,44, -2,34,222,27,247,22,252,56,3,252,32,227,89,162,8,64,39,50,65,99,108, -111,111,112,228,222,28,248,22,57,197,248,22,252,187,2,249,22,252,161,2,248, -22,252,165,1,251,22,252,184,1,6,42,42,126,97,58,32,99,111,108,108,101, -99,116,105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105, -110,32,97,110,121,32,111,102,58,32,126,115,229,201,28,248,22,57,204,202,250, -22,1,22,252,36,3,205,206,200,247,22,15,27,249,22,252,36,3,248,22,52, -200,197,28,248,22,252,31,3,193,27,250,22,1,22,252,36,3,196,200,28,248, -22,252,31,3,193,192,252,2,227,199,200,201,202,248,22,53,204,252,2,227,198, -199,200,201,248,22,53,203,197,198,199,200,197,83,159,34,93,80,159,34,50,35, -27,247,22,252,219,1,28,249,22,252,11,2,194,2,182,5,4,46,100,108,108, -230,28,249,22,72,194,21,94,2,209,2,188,5,6,46,100,121,108,105,98,231, -5,3,46,115,111,232,83,159,34,93,80,159,34,51,35,249,80,159,36,36,35, -248,22,252,29,3,5,10,95,108,111,97,100,101,114,46,115,115,233,80,158,36, -50,83,159,34,93,80,159,34,52,35,249,22,252,221,2,27,89,162,34,36,8, -28,1,25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99, -111,109,112,105,108,101,100,234,223,3,87,94,28,27,248,22,252,25,3,195,28, +57,58,93,16,5,93,2,98,89,162,34,35,53,9,223,0,27,249,22,209,20, +15,159,37,34,41,196,27,28,248,80,158,37,34,194,249,80,158,38,35,248,80, +158,39,36,196,27,248,80,158,40,37,197,28,248,80,158,40,34,193,249,80,158, +41,35,248,80,158,42,36,195,27,248,80,158,43,37,196,28,248,80,158,43,38, +193,248,80,158,43,39,193,11,11,11,28,192,27,248,22,52,194,27,248,22,78, +195,27,248,22,80,196,27,249,22,209,20,15,159,42,35,41,249,22,209,203,247, +22,48,27,249,22,209,20,15,159,43,36,41,249,22,209,204,247,22,48,27,249, +22,209,20,15,159,44,37,41,249,22,209,205,247,22,48,27,252,22,61,200,199, +198,202,201,254,80,158,50,40,20,15,159,50,38,41,21,97,3,1,4,103,56, +56,52,99,3,1,4,103,56,57,48,100,3,1,4,103,56,56,57,101,3,1, +4,103,56,56,54,102,3,1,4,103,56,56,55,103,248,22,52,200,248,22,78, +200,248,22,90,200,248,22,87,200,248,22,89,200,250,22,252,39,2,11,6,10, +10,98,97,100,32,115,121,110,116,97,120,104,196,34,20,98,159,34,16,7,30, +105,65,35,37,115,116,120,106,69,115,116,120,45,112,97,105,114,63,107,11,30, +108,2,106,67,99,111,110,115,47,35,102,109,1,30,110,2,106,67,115,116,120, +45,99,97,114,111,5,30,112,2,106,67,115,116,120,45,99,100,114,113,6,30, +114,2,106,69,115,116,120,45,108,105,115,116,63,115,8,30,116,2,106,69,115, +116,120,45,62,108,105,115,116,117,4,30,118,69,35,37,115,116,120,99,97,115, +101,119,1,24,97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98, +115,116,105,116,117,116,101,120,0,16,5,18,98,64,104,101,114,101,121,40,98, +38,10,34,11,96,159,68,35,37,100,101,102,105,110,101,122,9,11,159,70,35, +37,109,101,109,116,114,97,99,101,123,9,11,159,74,35,37,115,109,97,108,108, +45,115,99,104,101,109,101,124,9,11,159,73,35,37,109,111,114,101,45,115,99, +104,101,109,101,125,9,11,16,92,2,71,2,2,2,81,2,2,2,87,2,2, +2,30,2,2,2,93,2,2,2,73,2,2,2,83,2,2,2,40,2,2,2, +97,2,2,2,47,2,2,2,77,2,2,2,57,2,2,2,24,2,2,2,91, +2,2,2,10,2,2,2,69,2,2,2,89,2,2,2,67,2,2,2,8,2, +2,2,98,2,2,2,16,2,2,2,95,2,2,2,79,2,2,2,51,2,2, +2,55,2,2,2,20,2,2,2,59,2,2,2,65,2,2,2,63,2,2,2, +28,2,2,2,6,2,2,2,12,2,2,2,34,2,2,2,14,2,2,2,4, +2,2,2,85,2,2,2,53,2,2,2,18,2,2,2,36,2,2,2,75,2, +2,2,32,2,2,2,61,2,2,2,49,2,2,2,38,2,2,2,26,2,2, +2,22,2,2,98,37,10,35,11,94,159,76,35,37,115,116,120,99,97,115,101, +45,115,99,104,101,109,101,126,9,11,159,2,106,9,11,16,0,96,36,8,254, +1,11,16,0,16,4,35,11,61,120,127,3,1,7,101,110,118,52,52,49,55, +128,18,100,2,121,43,38,37,36,35,16,8,42,11,3,1,4,103,56,55,50, +129,3,1,4,103,56,55,51,130,3,1,4,103,56,55,52,131,3,1,7,101, +110,118,52,52,50,51,132,2,132,2,132,16,8,41,11,61,95,133,64,97,114, +103,115,134,64,98,111,100,121,135,3,1,7,101,110,118,52,52,50,52,136,2, +136,2,136,18,16,2,158,2,121,43,44,18,44,18,158,95,106,63,108,101,116, +137,51,38,37,36,35,42,41,16,4,50,11,3,1,4,103,56,55,57,138,3, +1,7,101,110,118,52,52,52,48,139,16,4,49,11,68,99,111,110,116,109,97, +114,107,140,3,1,7,101,110,118,52,52,52,49,141,16,4,48,11,3,1,4, +103,56,56,49,142,3,1,7,101,110,118,52,52,53,50,143,16,4,47,11,64, +102,117,110,99,144,3,1,7,101,110,118,52,52,53,51,145,16,4,46,11,3, +1,4,103,56,56,51,146,3,1,7,101,110,118,52,52,54,52,147,16,4,45, +11,67,110,101,119,109,97,114,107,148,3,1,7,101,110,118,52,52,54,53,149, +158,94,10,94,2,99,11,51,158,97,10,2,137,93,94,2,100,95,66,108,97, +109,98,100,97,150,2,101,95,2,137,93,94,2,102,94,1,31,117,110,105,111, +110,101,100,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103, +45,118,97,108,117,101,151,2,99,160,1,22,119,105,116,104,45,99,111,110,116, +105,110,117,97,116,105,111,110,45,109,97,114,107,152,1,30,109,101,109,111,114, +121,45,116,114,97,99,101,45,99,111,110,116,105,110,117,97,116,105,111,110,45, +109,97,114,107,153,2,102,2,103,95,64,115,101,116,33,154,2,99,94,1,30, +110,101,119,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103, +45,102,117,110,99,116,105,111,110,155,2,100,2,100,51,51,11,139,83,159,34, +93,80,159,34,8,51,35,89,162,8,64,35,44,64,108,111,111,112,156,223,0, +28,248,22,57,194,9,27,248,22,52,195,27,28,248,22,252,40,3,194,193,28, +248,22,252,39,3,194,249,22,252,41,3,195,250,80,158,41,46,248,22,252,54, +3,69,101,120,101,99,45,102,105,108,101,157,11,10,250,80,158,39,46,248,22, +252,54,3,2,157,196,10,28,192,249,22,51,248,22,252,43,3,249,22,252,41, +3,197,247,22,252,55,3,248,80,159,39,8,51,35,248,22,53,199,248,80,159, +37,8,51,35,248,22,53,197,83,159,34,93,80,159,34,8,50,35,89,162,34, +35,47,67,103,101,116,45,100,105,114,158,223,0,27,28,194,28,249,22,252,11, +2,196,80,158,37,8,29,80,158,35,8,30,27,248,22,252,213,1,248,22,44, +197,28,249,22,252,68,3,33,8,35,114,120,35,34,94,44,34,159,194,91,159, +37,11,90,161,37,34,11,248,22,252,37,3,248,22,252,29,3,250,22,252,197, +1,200,35,248,22,252,191,1,201,87,95,83,160,36,11,80,158,39,8,29,198, +83,160,36,11,80,158,39,8,30,192,192,11,11,28,192,192,27,247,22,252,90, +1,28,192,192,247,22,252,55,3,83,159,34,93,80,159,34,8,49,35,89,162, +34,35,43,9,223,0,87,94,28,27,248,22,252,25,3,195,28,192,192,28,248, +22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196, +11,12,250,22,252,40,2,2,47,6,25,25,112,97,116,104,32,111,114,32,118, +97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,160,196,28,248,22, +252,38,3,194,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1,250, +22,252,184,1,6,29,29,126,97,58,32,105,110,118,97,108,105,100,32,114,101, +108,97,116,105,118,101,32,112,97,116,104,58,32,126,115,161,2,47,200,247,22, +15,83,159,34,93,80,159,34,8,48,35,89,162,34,36,42,68,119,105,116,104, +45,100,105,114,162,223,0,20,14,159,80,158,34,53,250,80,158,37,54,249,22, +19,11,80,158,39,53,22,252,90,1,28,248,22,252,25,3,197,196,247,22,252, +55,3,247,194,83,159,34,93,80,159,34,8,47,35,89,162,8,36,37,38,66, +103,101,116,45,115,111,163,223,0,89,162,34,35,46,9,226,0,1,3,2,252, +22,252,36,3,199,201,6,6,6,110,97,116,105,118,101,164,247,22,252,220,1, +28,198,249,80,159,44,36,35,199,80,158,44,50,197,83,159,34,93,80,159,34, +34,35,32,165,89,162,34,35,38,2,4,222,27,248,22,252,25,3,194,28,192, +192,28,248,22,252,136,1,194,27,248,22,252,38,3,195,28,192,192,248,22,252, +39,3,195,11,83,159,34,93,80,159,34,35,35,33,18,35,114,120,35,34,40, +91,46,93,91,94,46,93,42,124,41,36,34,166,83,159,34,93,80,159,34,36, +35,89,162,34,36,47,2,8,223,0,87,95,28,27,248,22,252,25,3,195,28, 192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22, -252,39,3,196,11,12,250,22,252,40,2,2,49,6,25,25,112,97,116,104,32, -111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,235, -196,91,159,40,11,90,161,35,34,11,28,248,22,252,40,3,200,199,27,247,22, -252,90,1,28,192,249,22,252,41,3,202,194,200,90,161,37,35,11,248,22,252, -37,3,193,90,161,35,38,11,28,249,22,252,11,2,195,2,219,2,166,193,90, -161,35,39,11,247,22,252,57,3,27,89,162,34,35,43,62,122,111,236,225,7, -5,3,250,22,252,36,3,196,198,249,80,159,41,36,35,197,5,3,46,122,111, -237,27,89,162,34,35,45,9,225,8,6,4,252,22,252,36,3,198,200,2,174, -247,22,252,220,1,249,80,159,43,36,35,199,80,158,43,50,27,27,80,158,44, -51,89,162,34,35,43,9,225,10,8,0,252,22,252,36,3,198,200,2,174,247, -22,252,220,1,197,27,249,22,5,89,162,34,35,41,9,223,6,27,193,27,250, -22,252,50,3,196,11,32,238,89,162,8,44,34,34,9,222,11,28,192,249,22, -51,195,194,11,203,27,27,28,195,27,249,22,5,89,162,34,35,41,9,223,6, -27,248,194,195,27,250,22,252,50,3,196,11,32,239,89,162,8,44,34,34,9, -222,11,28,192,249,22,51,195,194,11,206,27,28,196,11,193,28,192,192,28,193, -28,196,28,249,22,185,248,22,53,196,248,22,53,199,193,11,11,11,11,28,192, -27,248,22,252,59,3,248,22,52,195,91,159,36,11,90,161,36,34,11,248,195, -248,22,42,248,22,252,210,1,248,22,252,27,3,249,80,159,55,36,35,23,17, -5,0,240,28,192,87,94,28,23,17,28,249,22,252,11,2,195,23,19,12,248, -22,252,187,2,249,22,252,128,2,248,22,252,165,1,251,22,252,184,1,6,81, -81,108,111,97,100,45,101,120,116,101,110,115,105,111,110,58,32,101,120,112,101, -99,116,101,100,32,109,111,100,117,108,101,32,100,101,99,108,97,114,97,116,105, -111,110,32,102,111,114,32,96,126,97,39,44,32,102,111,117,110,100,32,126,97, -32,116,104,114,111,117,103,104,32,108,111,97,100,101,114,58,32,126,101,241,23, -25,28,201,249,22,252,184,1,6,27,27,109,111,100,117,108,101,32,100,101,99, -108,97,114,97,116,105,111,110,32,102,111,114,32,96,126,97,39,242,203,6,4, -4,110,111,110,101,243,248,22,52,204,247,22,15,12,192,11,11,28,192,249,80, -159,47,8,48,35,203,194,27,28,196,27,249,22,5,89,162,34,35,41,9,223, -7,27,248,194,195,27,250,22,252,50,3,196,11,32,244,89,162,8,44,34,34, -9,222,11,28,192,249,22,51,195,194,11,206,27,28,196,11,193,28,192,192,28, -193,28,196,28,249,22,185,248,22,53,196,248,22,53,199,193,11,11,11,11,28, -192,249,80,159,48,8,48,35,204,89,162,34,34,39,9,224,16,2,249,247,22, -252,60,3,248,22,52,195,195,27,28,198,27,249,22,5,89,162,34,35,41,9, -223,9,27,248,194,195,27,250,22,252,50,3,196,11,32,245,89,162,8,44,34, -34,9,222,11,28,192,249,22,51,195,194,11,23,15,27,28,197,11,193,28,192, -192,28,193,28,197,28,249,22,185,248,22,53,196,248,22,53,200,193,11,11,11, -11,28,192,249,80,159,49,8,48,35,205,89,162,34,34,39,9,224,17,2,249, -247,22,252,89,1,248,22,52,195,195,249,80,159,49,8,48,35,205,89,162,34, -34,38,9,224,17,9,249,247,22,252,89,1,194,195,192,32,246,89,162,8,36, -35,38,9,222,87,94,28,28,248,22,0,193,249,22,34,194,36,11,12,250,22, -252,40,2,2,40,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114, -105,116,121,32,50,41,247,195,192,83,159,34,93,80,159,34,55,35,89,162,8, -37,36,44,2,47,223,0,87,94,87,94,87,94,28,27,248,22,252,25,3,195, -28,192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248, -22,252,39,3,196,11,12,250,22,252,40,2,2,47,2,170,196,28,248,22,252, -38,3,194,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1,250,22, -252,184,1,2,171,2,47,200,247,22,15,249,22,3,80,159,36,8,49,35,196, -27,247,22,252,56,3,251,32,248,89,162,8,64,38,49,2,228,222,28,248,22, -57,196,248,22,252,187,2,249,22,252,161,2,248,22,252,165,1,251,22,252,184, -1,2,229,2,47,28,248,22,57,203,201,250,22,1,22,252,36,3,204,205,200, -247,22,15,27,249,22,252,36,3,248,22,52,199,196,28,248,22,252,31,3,193, -27,250,22,1,22,252,36,3,196,199,28,248,22,252,31,3,193,192,251,2,248, -198,199,200,248,22,53,202,251,2,248,197,198,199,248,22,53,201,196,198,199,196, -83,159,34,93,80,159,34,56,35,89,162,34,35,38,2,49,223,0,249,247,80, -158,36,52,195,11,248,22,252,3,3,32,249,89,162,8,36,35,35,1,20,100, -101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100,250,222, -192,83,159,34,93,80,159,34,57,35,248,22,252,63,3,5,11,40,46,43,63, -41,47,43,40,46,42,41,251,83,159,34,93,80,159,34,58,35,248,22,252,63, -3,5,2,94,44,252,252,0,83,159,34,93,80,159,34,59,35,248,22,252,63, -3,5,39,94,91,45,97,45,122,65,45,90,48,45,57,95,46,32,93,43,40, -47,43,91,45,97,45,122,65,45,90,48,45,57,95,46,32,93,43,41,42,36, -252,253,0,83,159,34,93,80,159,34,8,26,35,248,22,110,64,119,101,97,107, -252,254,0,83,159,34,93,80,159,34,8,27,35,249,22,110,2,252,254,0,65, -101,113,117,97,108,252,255,0,83,159,34,93,80,159,34,8,28,35,247,22,48, -83,159,34,93,80,158,34,8,29,11,83,159,34,93,80,158,34,8,30,11,83, -159,34,93,80,159,34,8,31,35,89,162,8,36,35,38,2,67,223,0,91,159, -36,10,90,161,35,34,10,11,90,161,35,35,10,83,158,37,20,92,96,1,29, -115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45, -114,101,115,111,108,118,101,114,252,0,1,89,162,8,36,35,44,9,224,2,0, -87,94,28,207,248,208,195,12,27,27,250,22,116,80,158,40,8,26,248,22,252, -80,3,247,22,252,212,2,11,28,192,192,27,247,22,110,87,94,250,22,115,80, -158,41,8,26,248,22,252,80,3,247,22,252,212,2,195,192,250,22,115,195,198, -66,97,116,116,97,99,104,252,1,1,89,162,34,37,42,9,223,1,251,211,197, -198,199,10,89,162,34,38,8,28,9,225,2,3,0,28,28,248,22,50,196,249, -22,252,11,2,248,22,52,198,66,112,108,97,110,101,116,252,2,1,11,87,94, -28,207,12,20,14,159,80,158,36,53,250,80,158,39,54,249,22,19,11,80,158, -41,53,22,252,212,2,196,90,161,35,34,10,249,22,235,21,95,63,108,105,98, -252,3,1,6,11,11,114,101,115,111,108,118,101,114,46,115,115,252,4,1,6, -6,6,112,108,97,110,101,116,252,5,1,1,27,112,108,97,110,101,116,45,109, -111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,252,6, -1,12,251,211,199,200,201,202,27,28,248,22,252,136,1,197,27,248,80,159,39, -8,50,35,199,27,250,22,116,80,158,42,8,27,249,22,51,203,198,11,28,192, -192,27,248,22,252,211,1,200,28,249,22,252,66,3,80,158,42,59,194,27,249, -22,252,65,3,80,158,43,57,195,28,192,249,80,159,43,8,51,35,249,22,252, -36,3,199,27,248,22,78,198,28,249,22,252,194,1,194,2,165,2,166,28,249, -22,252,194,1,194,2,167,2,168,248,22,252,29,3,193,248,22,87,195,249,22, -252,36,3,197,248,22,252,29,3,196,248,22,59,249,22,252,159,1,6,72,72, -32,40,114,101,108,97,116,105,118,101,32,115,116,114,105,110,103,32,102,111,114, -109,32,109,117,115,116,32,99,111,110,116,97,105,110,32,111,110,108,121,32,97, -45,122,44,32,65,45,90,44,32,48,45,57,44,32,45,44,32,95,44,32,46, -44,32,47,44,32,97,110,100,32,252,7,1,6,37,37,115,112,97,99,101,44, -32,119,105,116,104,32,110,111,32,108,101,97,100,105,110,103,32,111,114,32,116, -114,97,105,108,105,110,103,32,47,41,252,8,1,28,248,22,252,25,3,197,28, -248,22,252,39,3,197,196,248,22,59,6,25,25,40,97,32,112,97,116,104,32, -109,117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,252,9,1,28, -28,248,22,50,197,248,22,252,9,2,248,22,58,198,10,11,28,249,22,252,11, -2,248,22,52,199,2,252,3,1,27,250,22,116,80,158,41,8,27,249,22,51, -202,247,22,252,56,3,11,28,192,192,27,27,248,22,64,200,28,249,22,181,194, -36,248,22,59,6,5,5,109,122,108,105,98,252,10,1,28,249,22,183,194,36, -248,22,80,200,11,28,192,28,249,22,4,32,252,11,1,89,162,34,35,36,9, -222,28,248,22,252,136,1,193,248,22,252,38,3,193,11,194,28,248,22,252,136, -1,248,22,78,200,28,248,22,252,38,3,248,22,78,200,27,27,248,22,52,195, -27,248,22,53,196,27,247,22,252,56,3,251,32,252,12,1,89,162,8,64,38, -49,2,228,222,28,248,22,57,196,248,22,252,187,2,249,22,252,161,2,248,22, -252,165,1,251,22,252,184,1,2,229,2,252,0,1,28,248,22,57,203,201,250, -22,1,22,252,36,3,204,205,200,247,22,15,27,249,22,252,36,3,248,22,52, -199,196,28,248,22,252,31,3,193,27,250,22,1,22,252,36,3,196,199,28,248, -22,252,31,3,193,192,251,2,252,12,1,198,199,200,248,22,53,202,251,2,252, -12,1,197,198,199,248,22,53,201,196,198,197,196,249,22,252,36,3,194,248,22, -78,202,11,11,11,11,28,249,22,252,11,2,248,22,52,199,64,102,105,108,101, -252,13,1,28,249,22,181,248,22,64,199,36,27,248,22,78,198,28,248,22,252, -136,1,193,28,27,248,22,252,25,3,194,28,192,192,28,248,22,252,136,1,194, -27,248,22,252,38,3,195,28,192,192,248,22,252,39,3,195,11,249,22,252,41, -3,194,248,80,159,41,8,50,35,201,11,11,11,11,87,94,28,28,248,22,252, -25,3,193,10,248,22,252,222,1,193,12,28,198,250,22,252,39,2,67,114,101, -113,117,105,114,101,252,14,1,249,22,252,184,1,6,17,17,98,97,100,32,109, -111,100,117,108,101,32,112,97,116,104,126,97,252,15,1,28,197,248,22,52,198, -6,0,0,252,16,1,201,250,22,252,40,2,2,252,0,1,249,22,252,184,1, -6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,252,17,1,28,197, -248,22,52,198,6,0,0,252,18,1,199,27,28,248,22,252,222,1,194,249,22, -252,227,1,195,34,248,22,252,43,3,248,22,252,44,3,195,27,28,248,22,252, -222,1,195,249,22,252,227,1,196,35,248,80,159,40,38,35,194,91,159,37,11, -90,161,37,34,11,28,248,22,252,222,1,198,250,22,7,67,105,103,110,111,114, -101,100,252,19,1,249,22,252,227,1,202,36,2,252,19,1,248,22,252,37,3, -197,27,28,248,22,252,222,1,199,249,22,252,227,1,200,37,249,80,159,45,36, -35,196,5,0,252,20,1,27,28,248,22,252,222,1,200,249,22,252,227,1,201, -38,249,22,252,184,1,6,3,3,44,126,97,252,21,1,248,22,252,210,1,248, -22,252,27,3,248,80,159,49,38,35,199,27,28,248,22,252,222,1,201,249,22, -252,227,1,202,39,248,22,42,249,22,252,159,1,196,248,22,252,210,1,248,22, -252,27,3,199,27,28,248,22,252,222,1,202,249,22,252,227,1,203,40,27,249, -22,252,65,3,80,158,49,35,248,22,252,27,3,201,28,192,248,22,52,193,10, -27,27,250,22,116,80,158,51,8,26,248,22,252,80,3,247,22,252,212,2,11, -28,192,192,27,247,22,110,87,94,250,22,115,80,158,52,8,26,248,22,252,80, -3,247,22,252,212,2,195,192,87,95,28,23,17,27,250,22,116,196,198,11,87, -94,28,192,28,28,248,22,41,193,10,249,22,252,13,2,196,194,12,252,22,252, -37,2,2,252,0,1,6,71,71,109,111,100,117,108,101,32,112,114,101,118,105, -111,117,115,108,121,32,108,111,97,100,101,100,32,119,105,116,104,32,115,117,102, -102,105,120,32,126,115,44,32,99,97,110,110,111,116,32,108,111,97,100,32,119, -105,116,104,32,115,117,102,102,105,120,32,126,115,58,32,126,101,252,22,1,28, -249,22,252,11,2,10,199,6,0,0,252,23,1,197,28,249,22,252,11,2,10, -201,6,0,0,252,24,1,199,23,15,12,28,192,12,87,95,27,249,22,17,247, -22,15,80,158,51,8,28,27,247,22,252,212,2,249,22,3,89,162,34,35,48, -9,226,13,14,2,3,28,249,22,252,13,2,248,22,53,199,197,28,249,22,252, -11,2,248,22,52,199,195,251,22,252,37,2,2,252,0,1,6,26,26,99,121, -99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101,58, -32,126,101,252,25,1,198,249,22,2,22,53,248,22,67,249,22,51,205,201,12, -12,195,27,248,22,42,198,20,14,159,80,158,49,8,28,249,22,51,247,22,252, -212,2,204,20,14,159,80,158,49,53,250,80,158,52,54,249,22,19,11,80,158, -54,53,22,234,195,249,247,80,158,51,52,205,248,22,42,248,22,252,210,1,248, -22,252,27,3,203,250,22,115,196,198,197,12,28,28,248,22,252,222,1,203,11, -27,248,22,252,136,1,23,16,28,192,192,28,248,22,50,23,16,249,22,252,11, -2,248,22,52,23,18,2,252,3,1,11,250,22,115,80,158,50,8,27,28,248, -22,252,136,1,23,18,249,22,51,23,19,248,80,159,53,8,50,35,23,21,249, -22,51,23,19,247,22,252,56,3,254,22,252,224,1,23,19,23,18,23,16,206, -205,204,203,12,194,208,83,159,34,93,80,159,34,8,32,35,83,158,37,20,92, -95,2,69,89,162,34,34,36,9,223,0,248,80,158,35,8,32,9,89,162,34, -35,47,9,223,0,27,247,22,252,58,3,249,80,158,37,45,28,194,27,248,22, -252,217,1,6,11,11,80,76,84,67,79,76,76,69,67,84,83,252,26,1,28, -192,192,6,0,0,252,27,1,6,0,0,252,28,1,27,28,195,250,22,252,36, -3,248,22,252,54,3,69,97,100,100,111,110,45,100,105,114,252,29,1,247,22, -252,215,1,6,8,8,99,111,108,108,101,99,116,115,252,30,1,11,27,248,80, -159,40,8,52,35,249,22,65,201,248,22,59,248,22,252,54,3,72,99,111,108, -108,101,99,116,115,45,100,105,114,252,31,1,28,193,249,22,51,195,194,192,83, -159,34,93,80,159,34,8,33,35,32,252,32,1,89,162,8,36,35,37,2,71, -222,27,248,22,252,4,1,194,28,192,192,248,22,252,5,1,194,83,159,34,97, -80,159,34,8,34,35,80,159,34,8,35,35,80,159,34,8,36,35,80,159,34, -8,37,35,80,159,34,8,38,35,26,9,22,252,91,2,63,101,118,116,252,33, -1,11,35,34,11,248,22,59,249,22,51,22,252,90,2,34,247,22,252,114,2, -11,21,93,34,83,159,34,93,80,159,34,8,39,35,89,162,34,35,39,2,83, -223,0,87,94,28,28,248,22,0,194,249,22,34,195,34,11,12,250,22,252,40, -2,2,83,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116, -121,32,48,41,252,34,1,196,248,80,158,35,8,35,89,162,34,35,36,9,223, -2,247,192,83,159,34,93,80,159,34,8,40,35,32,252,35,1,89,162,34,35, -38,2,85,222,87,94,28,248,22,252,254,2,193,12,250,22,252,40,2,2,85, -6,7,7,99,104,97,110,110,101,108,252,36,1,195,248,22,252,239,2,193,83, -159,34,93,80,159,34,8,41,35,32,252,37,1,89,162,34,35,38,2,87,222, -87,94,28,248,22,252,254,2,193,12,250,22,252,40,2,2,87,6,7,7,99, -104,97,110,110,101,108,252,38,1,195,249,22,252,240,2,34,194,83,159,34,93, -80,159,34,8,42,35,32,252,39,1,89,162,34,36,39,2,89,222,87,94,28, -248,22,252,254,2,193,12,250,22,252,40,2,2,89,6,7,7,99,104,97,110, -110,101,108,252,40,1,195,28,248,22,252,239,2,249,22,252,253,2,195,196,12, -11,83,159,34,93,80,159,34,8,43,35,32,252,41,1,89,162,34,34,34,2, -91,222,247,22,252,212,2,83,159,34,93,80,159,34,8,44,35,89,162,34,35, -39,2,93,223,0,87,94,28,249,22,181,195,39,12,250,22,252,40,2,2,93, -6,1,1,53,252,42,1,196,248,80,158,35,8,45,11,83,159,34,93,80,159, -34,8,46,35,89,162,34,35,39,2,97,223,0,87,94,28,249,22,181,195,39, -12,250,22,252,40,2,2,97,6,1,1,53,252,43,1,196,248,80,158,35,8, -45,10,83,159,34,93,80,159,34,8,45,35,89,162,8,36,35,43,2,95,223, -0,27,248,22,252,190,2,65,101,109,112,116,121,252,44,1,27,247,22,252,190, -2,87,94,20,14,159,80,158,36,53,250,80,158,39,54,249,22,19,11,80,158, -41,53,22,252,212,2,196,87,96,249,22,239,194,66,35,37,114,53,114,115,252, -45,1,248,22,237,2,252,45,1,248,22,238,21,95,64,111,110,108,121,252,46, -1,68,109,122,115,99,104,101,109,101,252,47,1,72,115,121,110,116,97,120,45, -114,117,108,101,115,252,48,1,28,195,12,249,22,3,32,252,49,1,89,162,34, -35,39,9,222,249,22,252,77,3,194,249,22,235,2,252,47,1,196,21,15,203, -63,99,97,114,252,50,1,63,99,100,114,252,51,1,64,99,97,97,114,252,52, -1,64,99,97,100,114,252,53,1,64,99,100,97,114,252,54,1,64,99,100,100, -114,252,55,1,65,99,97,97,97,114,252,56,1,65,99,97,97,100,114,252,57, -1,65,99,97,100,97,114,252,58,1,65,99,97,100,100,114,252,59,1,65,99, -100,97,97,114,252,60,1,65,99,100,97,100,114,252,61,1,65,99,100,100,97, -114,252,62,1,65,99,100,100,100,114,252,63,1,66,99,97,97,97,97,114,252, -64,1,66,99,97,97,97,100,114,252,65,1,66,99,97,97,100,97,114,252,66, -1,66,99,97,97,100,100,114,252,67,1,66,99,97,100,97,97,114,252,68,1, -66,99,97,100,97,100,114,252,69,1,66,99,97,100,100,97,114,252,70,1,66, -99,97,100,100,100,114,252,71,1,66,99,100,97,97,97,114,252,72,1,66,99, -100,97,97,100,114,252,73,1,66,99,100,97,100,97,114,252,74,1,66,99,100, -97,100,100,114,252,75,1,66,99,100,100,97,97,114,252,76,1,66,99,100,100, -97,100,114,252,77,1,66,99,100,100,100,97,114,252,78,1,66,99,100,100,100, -100,114,252,79,1,63,109,97,112,252,80,1,61,61,252,81,1,61,60,252,82, -1,61,62,252,83,1,62,60,61,252,84,1,62,62,61,252,85,1,63,109,97, -120,252,86,1,63,109,105,110,252,87,1,61,43,252,88,1,61,45,252,89,1, -61,42,252,90,1,61,47,252,91,1,63,97,98,115,252,92,1,63,103,99,100, -252,93,1,63,108,99,109,252,94,1,63,101,120,112,252,95,1,63,108,111,103, -252,96,1,63,115,105,110,252,97,1,63,99,111,115,252,98,1,63,116,97,110, -252,99,1,63,110,111,116,252,100,1,63,101,113,63,252,101,1,1,30,99,97, -108,108,45,119,105,116,104,45,99,117,114,114,101,110,116,45,99,111,110,116,105, -110,117,97,116,105,111,110,252,102,1,71,109,97,107,101,45,115,116,114,105,110, -103,252,103,1,74,115,121,109,98,111,108,45,62,115,116,114,105,110,103,252,104, -1,74,115,116,114,105,110,103,45,62,115,121,109,98,111,108,252,105,1,76,109, -97,107,101,45,114,101,99,116,97,110,103,117,108,97,114,252,106,1,74,101,120, -97,99,116,45,62,105,110,101,120,97,99,116,252,107,1,74,105,110,101,120,97, -99,116,45,62,101,120,97,99,116,252,108,1,74,110,117,109,98,101,114,45,62, -115,116,114,105,110,103,252,109,1,74,115,116,114,105,110,103,45,62,110,117,109, -98,101,114,252,110,1,2,14,72,111,117,116,112,117,116,45,112,111,114,116,63, -252,111,1,78,99,117,114,114,101,110,116,45,105,110,112,117,116,45,112,111,114, -116,252,112,1,79,99,117,114,114,101,110,116,45,111,117,116,112,117,116,45,112, -111,114,116,252,113,1,78,99,117,114,114,101,110,116,45,101,114,114,111,114,45, -112,111,114,116,252,114,1,75,111,112,101,110,45,105,110,112,117,116,45,102,105, -108,101,252,115,1,76,111,112,101,110,45,111,117,116,112,117,116,45,102,105,108, -101,252,116,1,76,99,108,111,115,101,45,105,110,112,117,116,45,112,111,114,116, -252,117,1,77,99,108,111,115,101,45,111,117,116,112,117,116,45,112,111,114,116, -252,118,1,79,119,105,116,104,45,111,117,116,112,117,116,45,116,111,45,102,105, -108,101,252,119,1,73,116,114,97,110,115,99,114,105,112,116,45,111,110,252,120, -1,74,116,114,97,110,115,99,114,105,112,116,45,111,102,102,252,121,1,72,102, -108,117,115,104,45,111,117,116,112,117,116,252,122,1,73,115,116,114,105,110,103, -45,108,101,110,103,116,104,252,123,1,72,115,116,114,105,110,103,45,99,105,60, -61,63,252,124,1,72,115,116,114,105,110,103,45,99,105,62,61,63,252,125,1, -73,115,116,114,105,110,103,45,97,112,112,101,110,100,252,126,1,72,115,116,114, -105,110,103,45,62,108,105,115,116,252,127,1,72,108,105,115,116,45,62,115,116, -114,105,110,103,252,128,1,72,115,116,114,105,110,103,45,102,105,108,108,33,252, -129,1,73,118,101,99,116,111,114,45,108,101,110,103,116,104,252,130,1,72,118, -101,99,116,111,114,45,62,108,105,115,116,252,131,1,72,108,105,115,116,45,62, -118,101,99,116,111,114,252,132,1,72,118,101,99,116,111,114,45,102,105,108,108, -33,252,133,1,76,99,104,97,114,45,97,108,112,104,97,98,101,116,105,99,63, -252,134,1,73,99,104,97,114,45,110,117,109,101,114,105,99,63,252,135,1,76, -99,104,97,114,45,119,104,105,116,101,115,112,97,99,101,63,252,136,1,76,99, -104,97,114,45,117,112,112,101,114,45,99,97,115,101,63,252,137,1,76,99,104, -97,114,45,108,111,119,101,114,45,99,97,115,101,63,252,138,1,73,99,104,97, -114,45,62,105,110,116,101,103,101,114,252,139,1,73,105,110,116,101,103,101,114, -45,62,99,104,97,114,252,140,1,73,99,104,97,114,45,100,111,119,110,99,97, -115,101,252,141,1,1,21,99,97,108,108,45,119,105,116,104,45,111,117,116,112, -117,116,45,102,105,108,101,252,142,1,1,20,99,97,108,108,45,119,105,116,104, -45,105,110,112,117,116,45,102,105,108,101,252,143,1,1,20,119,105,116,104,45, -105,110,112,117,116,45,102,114,111,109,45,102,105,108,101,252,144,1,65,97,112, -112,108,121,252,145,1,68,102,111,114,45,101,97,99,104,252,146,1,67,115,121, -109,98,111,108,63,252,147,1,65,112,97,105,114,63,252,148,1,64,99,111,110, -115,252,149,1,68,115,101,116,45,99,97,114,33,252,150,1,68,115,101,116,45, -99,100,114,33,252,151,1,65,110,117,108,108,63,252,152,1,65,108,105,115,116, -63,252,153,1,64,108,105,115,116,252,154,1,66,108,101,110,103,116,104,252,155, -1,66,97,112,112,101,110,100,252,156,1,67,114,101,118,101,114,115,101,252,157, -1,69,108,105,115,116,45,116,97,105,108,252,158,1,68,108,105,115,116,45,114, -101,102,252,159,1,64,109,101,109,113,252,160,1,64,109,101,109,118,252,161,1, -66,109,101,109,98,101,114,252,162,1,64,97,115,115,113,252,163,1,64,97,115, -115,118,252,164,1,65,97,115,115,111,99,252,165,1,70,112,114,111,99,101,100, -117,114,101,63,252,166,1,67,110,117,109,98,101,114,63,252,167,1,68,99,111, -109,112,108,101,120,63,252,168,1,65,114,101,97,108,63,252,169,1,69,114,97, -116,105,111,110,97,108,63,252,170,1,68,105,110,116,101,103,101,114,63,252,171, -1,66,101,120,97,99,116,63,252,172,1,68,105,110,101,120,97,99,116,63,252, -173,1,65,122,101,114,111,63,252,174,1,69,112,111,115,105,116,105,118,101,63, -252,175,1,69,110,101,103,97,116,105,118,101,63,252,176,1,64,111,100,100,63, -252,177,1,65,101,118,101,110,63,252,178,1,68,113,117,111,116,105,101,110,116, -252,179,1,69,114,101,109,97,105,110,100,101,114,252,180,1,66,109,111,100,117, -108,111,252,181,1,65,102,108,111,111,114,252,182,1,67,99,101,105,108,105,110, -103,252,183,1,68,116,114,117,110,99,97,116,101,252,184,1,65,114,111,117,110, -100,252,185,1,69,110,117,109,101,114,97,116,111,114,252,186,1,71,100,101,110, -111,109,105,110,97,116,111,114,252,187,1,64,97,115,105,110,252,188,1,64,97, -99,111,115,252,189,1,64,97,116,97,110,252,190,1,64,115,113,114,116,252,191, -1,64,101,120,112,116,252,192,1,70,109,97,107,101,45,112,111,108,97,114,252, -193,1,69,114,101,97,108,45,112,97,114,116,252,194,1,69,105,109,97,103,45, -112,97,114,116,252,195,1,65,97,110,103,108,101,252,196,1,69,109,97,103,110, -105,116,117,100,101,252,197,1,71,105,110,112,117,116,45,112,111,114,116,63,252, -198,1,64,114,101,97,100,252,199,1,69,114,101,97,100,45,99,104,97,114,252, -200,1,69,112,101,101,107,45,99,104,97,114,252,201,1,71,101,111,102,45,111, -98,106,101,99,116,63,252,202,1,71,99,104,97,114,45,114,101,97,100,121,63, -252,203,1,65,119,114,105,116,101,252,204,1,67,100,105,115,112,108,97,121,252, -205,1,67,110,101,119,108,105,110,101,252,206,1,70,119,114,105,116,101,45,99, -104,97,114,252,207,1,64,108,111,97,100,252,208,1,67,115,116,114,105,110,103, -63,252,209,1,66,115,116,114,105,110,103,252,210,1,70,115,116,114,105,110,103, -45,114,101,102,252,211,1,71,115,116,114,105,110,103,45,115,101,116,33,252,212, -1,68,115,116,114,105,110,103,61,63,252,213,1,69,115,117,98,115,116,114,105, -110,103,252,214,1,71,115,116,114,105,110,103,45,99,111,112,121,252,215,1,71, -115,116,114,105,110,103,45,99,105,61,63,252,216,1,68,115,116,114,105,110,103, -60,63,252,217,1,68,115,116,114,105,110,103,62,63,252,218,1,69,115,116,114, -105,110,103,60,61,63,252,219,1,69,115,116,114,105,110,103,62,61,63,252,220, -1,71,115,116,114,105,110,103,45,99,105,60,63,252,221,1,71,115,116,114,105, -110,103,45,99,105,62,63,252,222,1,67,118,101,99,116,111,114,63,252,223,1, -71,109,97,107,101,45,118,101,99,116,111,114,252,224,1,66,118,101,99,116,111, -114,252,225,1,70,118,101,99,116,111,114,45,114,101,102,252,226,1,71,118,101, -99,116,111,114,45,115,101,116,33,252,227,1,65,99,104,97,114,63,252,228,1, -66,99,104,97,114,61,63,252,229,1,66,99,104,97,114,60,63,252,230,1,66, -99,104,97,114,62,63,252,231,1,67,99,104,97,114,60,61,63,252,232,1,67, -99,104,97,114,62,61,63,252,233,1,69,99,104,97,114,45,99,105,61,63,252, -234,1,69,99,104,97,114,45,99,105,60,63,252,235,1,69,99,104,97,114,45, -99,105,62,63,252,236,1,70,99,104,97,114,45,99,105,60,61,63,252,237,1, -70,99,104,97,114,45,99,105,62,61,63,252,238,1,71,99,104,97,114,45,117, -112,99,97,115,101,252,239,1,68,98,111,111,108,101,97,110,63,252,240,1,64, -101,113,118,63,252,241,1,66,101,113,117,97,108,63,252,242,1,65,102,111,114, -99,101,252,243,1,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117,101, -115,252,244,1,66,118,97,108,117,101,115,252,245,1,64,101,118,97,108,252,246, -1,2,71,2,93,2,97,2,91,72,100,121,110,97,109,105,99,45,119,105,110, -100,252,247,1,9,193,97,68,35,37,107,101,114,110,101,108,252,248,1,2,117, -2,116,2,115,2,114,95,2,252,248,1,2,101,2,118,0}; - EVAL_ONE_SIZED_STR((char *)expr, 14295); +252,39,3,196,11,12,252,22,252,40,2,2,8,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,167, +34,198,199,28,28,248,22,252,136,1,195,10,248,22,252,188,1,195,12,252,22, +252,40,2,2,8,6,21,21,115,116,114,105,110,103,32,111,114,32,98,121,116, +101,32,115,116,114,105,110,103,168,35,198,199,91,159,37,11,90,161,37,34,11, +248,22,252,37,3,197,87,94,28,192,12,250,22,252,41,2,2,8,6,36,36, +99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116, +111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,169,199,27,248,22,252, +29,3,250,22,252,74,3,2,166,248,22,252,27,3,199,28,248,22,252,136,1, +203,249,22,252,212,1,204,8,63,202,28,248,22,252,25,3,194,249,22,252,36, +3,195,194,192,83,159,34,93,80,159,34,37,35,249,22,252,138,1,7,92,7, +92,83,159,34,93,80,159,34,38,35,89,162,34,35,45,2,12,223,0,87,94, +28,27,248,22,252,25,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22, +252,38,3,196,28,192,192,248,22,252,39,3,196,11,12,250,22,252,40,2,76, +110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,170,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,171,196,28,249,22,252,11,2,247,22,252,219,1,67,119,105,110,100, +111,119,115,172,27,28,248,22,252,136,1,195,194,248,22,252,26,3,195,28,249, +22,252,68,3,33,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63, +93,91,92,92,93,34,173,194,28,248,22,252,136,1,195,248,22,252,28,3,195, +194,27,248,22,252,175,1,194,248,22,252,28,3,250,22,252,75,3,33,6,35, +114,120,34,47,34,174,28,249,22,252,68,3,33,22,35,114,120,34,91,47,92, +92,93,91,46,32,93,43,91,47,92,92,93,42,36,34,175,198,196,250,22,252, +75,3,33,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41, +36,34,176,199,6,2,2,92,49,177,80,158,40,37,28,249,22,252,11,2,247, +22,252,219,1,65,109,97,99,111,115,178,248,22,252,28,3,248,22,252,175,1, +28,248,22,252,136,1,196,195,248,22,252,26,3,196,28,248,22,252,136,1,194, +248,22,252,28,3,194,193,83,159,34,93,80,159,34,39,35,91,159,36,11,90, +161,35,35,11,32,179,89,162,8,64,35,38,65,99,104,101,99,107,180,222,28, +248,22,130,193,12,250,22,252,40,2,2,14,6,4,4,114,101,97,108,181,195, +20,12,95,35,89,162,8,36,36,53,2,14,223,0,87,95,28,248,22,130,194, +12,250,22,252,40,2,2,14,2,181,196,28,248,22,130,195,12,250,22,252,40, +2,2,14,2,181,197,27,248,22,176,196,27,249,22,173,197,195,27,249,22,172, +198,196,28,249,22,181,198,198,28,250,22,184,196,34,195,28,248,22,133,197,34, +33,3,48,46,48,182,28,248,22,188,194,248,22,173,27,248,22,173,195,27,248, +22,173,197,28,248,22,132,194,193,27,248,22,144,195,27,248,22,144,195,28,249, +22,182,195,194,248,22,170,194,249,22,172,195,248,22,175,249,205,248,22,175,249, +22,173,202,201,248,22,175,249,22,173,203,201,28,248,22,132,194,193,27,248,22, +144,195,27,248,22,144,195,28,249,22,182,195,194,248,22,170,194,249,22,172,195, +248,22,175,249,202,248,22,175,249,22,173,202,201,248,22,175,249,22,173,203,201, +33,6,43,110,97,110,46,48,183,89,162,8,36,36,54,72,102,105,110,100,45, +98,101,116,119,101,101,110,184,223,0,28,248,22,132,194,193,27,248,22,144,195, +27,248,22,144,197,28,249,22,182,195,194,248,22,170,194,249,22,172,195,248,22, +175,27,248,22,175,249,22,173,203,200,27,248,22,175,249,22,173,203,201,28,248, +22,132,194,193,27,248,22,144,195,27,248,22,144,195,28,249,22,182,195,194,248, +22,170,194,249,22,172,195,248,22,175,249,206,248,22,175,249,22,173,202,201,248, +22,175,249,22,173,203,201,83,159,34,93,80,159,34,40,35,32,185,89,162,34, +34,41,2,16,222,91,159,38,11,90,161,35,34,11,83,160,40,34,35,11,90, +161,35,35,11,83,160,40,34,35,11,90,161,35,36,11,83,160,40,34,35,11, +90,161,35,37,11,89,162,34,34,35,1,24,114,101,112,45,101,114,114,111,114, +45,101,115,99,97,112,101,45,104,97,110,100,108,101,114,186,223,1,247,207,250, +22,31,89,162,34,34,38,9,225,6,5,3,90,161,35,34,10,247,22,252,45, +2,90,161,35,35,10,247,22,252,31,2,87,94,248,22,252,45,2,195,248,22, +252,31,2,11,89,162,34,34,37,9,224,5,4,248,22,9,89,162,8,36,35, +41,9,224,2,1,250,32,187,89,163,8,102,37,40,69,114,101,112,108,45,108, +111,111,112,188,34,223,6,87,94,248,22,9,89,162,34,35,41,9,225,3,2, +1,250,22,31,89,162,8,36,34,38,9,225,5,4,6,87,94,248,22,252,31, +2,210,90,161,35,35,10,192,12,89,162,34,34,38,9,223,3,27,247,247,22, +40,87,94,28,248,22,252,70,1,193,248,194,12,12,83,159,45,32,189,89,162, +35,35,37,9,222,249,22,3,247,22,39,194,248,247,22,252,32,2,28,248,22, +206,194,248,22,252,30,2,194,193,89,162,8,36,34,37,9,224,5,4,90,161, +35,35,10,247,22,252,31,2,87,94,248,22,252,31,2,11,90,161,35,34,10, +11,12,250,2,187,195,196,197,197,195,196,89,162,8,36,34,38,9,225,5,4, +3,87,95,248,22,252,45,2,208,248,22,252,31,2,210,90,161,35,35,10,11, +90,161,35,34,10,11,12,83,159,34,93,80,159,34,41,35,32,190,89,162,34, +35,45,2,18,222,87,94,28,27,248,22,252,25,3,194,28,192,192,28,248,22, +252,136,1,194,27,248,22,252,38,3,195,28,192,192,248,22,252,39,3,195,11, +12,250,22,252,40,2,2,18,6,25,25,112,97,116,104,32,111,114,32,115,116, +114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,191,195,91,159,37,11, +90,161,37,34,11,248,22,252,37,3,196,28,194,248,22,252,187,2,249,22,252, +161,2,248,22,252,165,1,249,22,252,184,1,6,36,36,108,111,97,100,47,99, +100,58,32,99,97,110,110,111,116,32,111,112,101,110,32,97,32,100,105,114,101, +99,116,111,114,121,58,32,126,115,192,201,247,22,15,28,248,22,252,25,3,193, +87,94,28,248,22,252,31,3,193,12,248,22,252,187,2,249,22,252,161,2,248, +22,252,165,1,250,22,252,184,1,6,65,65,108,111,97,100,47,99,100,58,32, +100,105,114,101,99,116,111,114,121,32,111,102,32,126,115,32,100,111,101,115,32, +110,111,116,32,101,120,105,115,116,32,40,99,117,114,114,101,110,116,32,100,105, +114,101,99,116,111,114,121,32,105,115,32,126,115,41,193,202,247,22,252,55,3, +247,22,15,27,247,22,252,55,3,250,22,31,89,162,34,34,36,9,223,4,248, +22,252,55,3,193,89,162,34,34,36,9,223,5,248,22,252,88,1,193,89,162, +34,34,36,9,223,3,248,22,252,55,3,193,248,22,252,88,1,196,83,159,34, +93,80,159,34,42,35,32,194,89,162,34,37,41,2,20,222,87,94,28,27,248, +22,252,25,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252,38,3, +197,28,192,192,248,22,252,39,3,197,11,12,250,22,252,40,2,196,6,25,25, +112,97,116,104,32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32, +110,117,108,41,195,197,28,248,22,252,40,3,195,248,193,195,27,247,22,252,90, +1,248,194,28,193,249,22,252,41,3,198,195,196,83,159,34,93,80,159,34,43, +35,89,162,34,35,40,2,22,223,0,87,94,28,27,248,22,252,25,3,195,28, +192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22, +252,39,3,196,11,12,250,22,252,40,2,2,22,2,195,196,28,248,22,252,40, +3,194,248,22,252,88,1,194,27,247,22,252,90,1,248,22,252,88,1,28,193, +249,22,252,41,3,197,195,195,83,159,34,93,80,159,34,44,35,89,162,34,35, +40,2,24,223,0,87,94,28,27,248,22,252,25,3,195,28,192,192,28,248,22, +252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196,11, +12,250,22,252,40,2,2,24,2,195,196,28,248,22,252,40,3,194,248,22,252, +59,3,194,27,247,22,252,90,1,248,22,252,59,3,28,193,249,22,252,41,3, +197,195,195,83,159,34,93,80,159,34,45,35,27,248,22,252,63,3,248,22,252, +211,1,27,27,247,22,252,219,1,28,249,22,72,194,21,96,64,117,110,105,120, +196,64,98,101,111,115,197,65,111,115,107,105,116,198,66,109,97,99,111,115,120, +199,6,1,1,58,200,28,249,22,72,194,21,94,2,172,2,178,6,1,1,59, +201,12,250,22,252,184,1,6,14,14,40,91,94,126,97,93,42,41,126,97,40, +46,42,41,202,195,195,89,162,8,36,36,42,2,26,223,0,87,95,28,28,248, +22,252,188,1,194,10,248,22,252,136,1,194,12,250,22,252,40,2,2,26,6, +21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114,105, +110,103,203,196,28,28,248,22,58,195,249,22,4,22,252,25,3,196,11,12,250, +22,252,40,2,2,26,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104, +115,204,197,250,32,205,89,162,8,64,37,44,2,156,222,27,249,22,252,67,3, +196,197,28,192,27,248,22,78,194,27,250,2,205,198,199,248,22,87,198,28,249, +22,252,194,1,195,5,0,206,249,22,65,197,194,249,22,51,248,22,252,29,3, +196,194,28,249,22,252,194,1,197,2,206,249,22,65,195,9,249,22,51,248,22, +252,29,3,198,9,197,195,28,248,22,252,136,1,197,248,22,252,211,1,197,196, +83,159,34,93,80,159,34,46,35,83,158,37,20,92,96,2,28,89,162,8,36, +37,49,9,223,0,87,95,28,27,248,22,252,25,3,195,28,192,192,28,248,22, +252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196,11, +12,250,22,252,40,2,2,28,6,25,25,112,97,116,104,32,111,114,32,115,116, +114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,207,196,28,28,194,28, +27,248,22,252,25,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252, +38,3,197,28,192,192,248,22,252,39,3,197,11,248,22,252,38,3,195,11,10, +12,250,22,252,40,2,2,28,6,29,29,35,102,32,111,114,32,114,101,108,97, +116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,208,197, +28,28,248,22,252,38,3,194,91,159,37,11,90,161,37,34,11,248,22,252,37, +3,197,249,22,252,11,2,194,68,114,101,108,97,116,105,118,101,209,11,27,248, +22,252,217,1,6,4,4,80,65,84,72,210,27,28,193,27,249,80,158,39,45, +196,9,28,249,22,252,11,2,247,22,252,219,1,2,172,249,22,51,248,22,252, +29,3,5,1,46,211,194,192,9,28,248,22,57,193,11,27,248,22,252,41,3, +248,22,52,195,27,249,22,252,36,3,195,199,28,248,22,252,30,3,193,250,32, +212,89,162,8,100,37,48,70,102,111,117,110,100,45,101,120,101,99,213,222,28, +192,91,159,37,11,90,161,37,34,11,248,22,252,37,3,198,27,28,197,27,248, +22,252,42,3,200,28,249,22,252,13,2,194,201,11,28,248,22,252,38,3,193, +250,2,212,200,201,249,22,252,36,3,199,197,250,2,212,200,201,195,11,28,192, +192,27,28,248,22,252,25,3,195,27,249,22,252,36,3,197,200,28,28,248,22, +252,31,3,193,10,248,22,252,30,3,193,192,11,11,28,192,192,28,198,11,27, +248,22,252,42,3,201,28,249,22,252,13,2,194,202,11,28,248,22,252,38,3, +193,250,2,212,201,202,249,22,252,36,3,200,197,250,2,212,201,202,195,194,201, +202,195,251,32,214,89,162,8,100,38,48,2,156,222,28,248,22,57,196,11,27, +248,22,252,41,3,248,22,52,198,27,249,22,252,36,3,195,196,28,248,22,252, +30,3,193,250,2,212,198,199,195,27,248,22,53,199,28,248,22,57,193,11,27, +248,22,252,41,3,248,22,52,195,27,249,22,252,36,3,195,199,28,248,22,252, +30,3,193,250,2,212,201,202,195,251,2,214,201,202,203,248,22,53,199,201,202, +203,248,22,53,199,27,248,22,252,41,3,195,28,248,22,252,30,3,193,250,2, +212,198,199,195,11,89,162,34,36,40,9,223,0,250,80,158,37,46,196,197,11, +89,162,34,35,39,9,223,0,250,80,158,37,46,196,11,11,83,159,34,93,80, +159,34,47,35,32,215,89,162,34,36,43,2,30,222,87,94,28,27,248,22,252, +25,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28, +192,192,248,22,252,39,3,196,11,12,250,22,252,40,2,195,2,160,196,28,248, +22,252,38,3,194,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1, +250,22,252,184,1,2,161,199,200,247,22,15,83,159,34,93,80,159,34,48,35, +89,162,34,37,45,2,32,223,0,87,94,87,94,28,27,248,22,252,25,3,196, +28,192,192,28,248,22,252,136,1,196,27,248,22,252,38,3,197,28,192,192,248, +22,252,39,3,197,11,12,250,22,252,40,2,196,2,160,197,28,248,22,252,38, +3,195,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1,250,22,252, +184,1,2,161,200,201,247,22,15,249,22,3,89,162,34,35,44,9,224,2,3, +87,94,28,27,248,22,252,25,3,196,28,192,192,28,248,22,252,136,1,196,27, +248,22,252,38,3,197,28,192,192,248,22,252,39,3,197,11,12,250,22,252,40, +2,195,2,160,197,28,248,22,252,38,3,195,12,248,22,252,187,2,249,22,252, +131,2,248,22,252,165,1,250,22,252,184,1,2,161,199,201,247,22,15,197,83, +159,34,93,80,159,34,49,35,32,216,89,162,34,37,44,2,34,222,27,247,22, +252,56,3,252,32,217,89,162,8,64,39,50,65,99,108,111,111,112,218,222,28, +248,22,57,197,248,22,252,187,2,249,22,252,161,2,248,22,252,165,1,251,22, +252,184,1,6,42,42,126,97,58,32,99,111,108,108,101,99,116,105,111,110,32, +110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32,97,110,121,32, +111,102,58,32,126,115,219,201,28,248,22,57,204,202,250,22,1,22,252,36,3, +205,206,200,247,22,15,27,249,22,252,36,3,248,22,52,200,197,28,248,22,252, +31,3,193,27,250,22,1,22,252,36,3,196,200,28,248,22,252,31,3,193,192, +252,2,217,199,200,201,202,248,22,53,204,252,2,217,198,199,200,201,248,22,53, +203,197,198,199,200,197,83,159,34,93,80,159,34,50,35,27,247,22,252,219,1, +28,249,22,252,11,2,194,2,172,5,4,46,100,108,108,220,28,249,22,72,194, +21,94,2,199,2,178,5,6,46,100,121,108,105,98,221,5,3,46,115,111,222, +83,159,34,93,80,159,34,51,35,249,80,159,36,36,35,248,22,252,29,3,5, +10,95,108,111,97,100,101,114,46,115,115,223,80,158,36,50,83,159,34,93,80, +159,34,52,35,249,22,252,221,2,27,89,162,34,36,8,28,1,25,100,101,102, +97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101, +100,224,223,3,87,94,28,27,248,22,252,25,3,195,28,192,192,28,248,22,252, +136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252,39,3,196,11,12, +250,22,252,40,2,2,49,6,25,25,112,97,116,104,32,111,114,32,118,97,108, +105,100,45,112,97,116,104,32,115,116,114,105,110,103,225,196,91,159,40,11,90, +161,35,34,11,28,248,22,252,40,3,200,199,27,247,22,252,90,1,28,192,249, +22,252,41,3,202,194,200,90,161,37,35,11,248,22,252,37,3,193,90,161,35, +38,11,28,249,22,252,11,2,195,2,209,64,115,97,109,101,226,193,90,161,35, +39,11,247,22,252,57,3,27,89,162,34,35,43,62,122,111,227,225,7,5,3, +250,22,252,36,3,196,198,249,80,159,41,36,35,197,5,3,46,122,111,228,27, +89,162,34,35,45,9,225,8,6,4,252,22,252,36,3,198,200,2,164,247,22, +252,220,1,249,80,159,43,36,35,199,80,158,43,50,27,27,80,158,44,51,89, +162,34,35,43,9,225,10,8,0,252,22,252,36,3,198,200,2,164,247,22,252, +220,1,197,27,249,22,5,89,162,34,35,41,9,223,6,27,193,27,250,22,252, +50,3,196,11,32,229,89,162,8,44,34,34,9,222,11,28,192,249,22,51,195, +194,11,203,27,27,28,195,27,249,22,5,89,162,34,35,41,9,223,6,27,248, +194,195,27,250,22,252,50,3,196,11,32,230,89,162,8,44,34,34,9,222,11, +28,192,249,22,51,195,194,11,206,27,28,196,11,193,28,192,192,28,193,28,196, +28,249,22,185,248,22,53,196,248,22,53,199,193,11,11,11,11,28,192,27,248, +22,252,59,3,248,22,52,195,91,159,36,11,90,161,36,34,11,248,195,248,22, +42,248,22,252,210,1,248,22,252,27,3,249,80,159,55,36,35,23,17,5,0, +231,28,192,87,94,28,23,17,28,249,22,252,11,2,195,23,19,12,248,22,252, +187,2,249,22,252,128,2,248,22,252,165,1,251,22,252,184,1,6,81,81,108, +111,97,100,45,101,120,116,101,110,115,105,111,110,58,32,101,120,112,101,99,116, +101,100,32,109,111,100,117,108,101,32,100,101,99,108,97,114,97,116,105,111,110, +32,102,111,114,32,96,126,97,39,44,32,102,111,117,110,100,32,126,97,32,116, +104,114,111,117,103,104,32,108,111,97,100,101,114,58,32,126,101,232,23,25,28, +201,249,22,252,184,1,6,27,27,109,111,100,117,108,101,32,100,101,99,108,97, +114,97,116,105,111,110,32,102,111,114,32,96,126,97,39,233,203,6,4,4,110, +111,110,101,234,248,22,52,204,247,22,15,12,192,11,11,28,192,249,80,159,47, +8,48,35,203,194,27,28,196,27,249,22,5,89,162,34,35,41,9,223,7,27, +248,194,195,27,250,22,252,50,3,196,11,32,235,89,162,8,44,34,34,9,222, +11,28,192,249,22,51,195,194,11,206,27,28,196,11,193,28,192,192,28,193,28, +196,28,249,22,185,248,22,53,196,248,22,53,199,193,11,11,11,11,28,192,249, +80,159,48,8,48,35,204,89,162,34,34,39,9,224,16,2,249,247,22,252,60, +3,248,22,52,195,195,27,28,198,27,249,22,5,89,162,34,35,41,9,223,9, +27,248,194,195,27,250,22,252,50,3,196,11,32,236,89,162,8,44,34,34,9, +222,11,28,192,249,22,51,195,194,11,23,15,27,28,197,11,193,28,192,192,28, +193,28,197,28,249,22,185,248,22,53,196,248,22,53,200,193,11,11,11,11,28, +192,249,80,159,49,8,48,35,205,89,162,34,34,39,9,224,17,2,249,247,22, +252,89,1,248,22,52,195,195,249,80,159,49,8,48,35,205,89,162,34,34,38, +9,224,17,9,249,247,22,252,89,1,194,195,192,32,237,89,162,8,36,35,38, +9,222,87,94,28,28,248,22,0,193,249,22,34,194,36,11,12,250,22,252,40, +2,2,40,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116, +121,32,50,41,238,195,192,83,159,34,93,80,159,34,55,35,89,162,8,37,36, +44,2,47,223,0,87,94,87,94,87,94,28,27,248,22,252,25,3,195,28,192, +192,28,248,22,252,136,1,195,27,248,22,252,38,3,196,28,192,192,248,22,252, +39,3,196,11,12,250,22,252,40,2,2,47,2,160,196,28,248,22,252,38,3, +194,12,248,22,252,187,2,249,22,252,131,2,248,22,252,165,1,250,22,252,184, +1,2,161,2,47,200,247,22,15,249,22,3,80,159,36,8,49,35,196,27,247, +22,252,56,3,251,32,239,89,162,8,64,38,49,2,218,222,28,248,22,57,196, +248,22,252,187,2,249,22,252,161,2,248,22,252,165,1,251,22,252,184,1,2, +219,2,47,28,248,22,57,203,201,250,22,1,22,252,36,3,204,205,200,247,22, +15,27,249,22,252,36,3,248,22,52,199,196,28,248,22,252,31,3,193,27,250, +22,1,22,252,36,3,196,199,28,248,22,252,31,3,193,192,251,2,239,198,199, +200,248,22,53,202,251,2,239,197,198,199,248,22,53,201,196,198,199,196,83,159, +34,93,80,159,34,56,35,89,162,34,35,38,2,49,223,0,249,247,80,158,36, +52,195,11,248,22,252,3,3,32,240,89,162,8,36,35,35,1,20,100,101,102, +97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100,241,222,192,83, +159,34,93,80,159,34,57,35,33,17,35,114,120,35,34,40,46,43,63,41,47, +43,40,46,42,41,34,242,83,159,34,93,80,159,34,58,35,2,159,83,159,34, +93,80,159,34,59,35,33,45,35,114,120,35,34,94,91,45,97,45,122,65,45, +90,48,45,57,95,46,32,93,43,40,47,43,91,45,97,45,122,65,45,90,48, +45,57,95,46,32,93,43,41,42,36,34,243,83,159,34,93,80,159,34,8,26, +35,248,22,110,64,119,101,97,107,244,83,159,34,93,80,159,34,8,27,35,249, +22,110,2,244,65,101,113,117,97,108,245,83,159,34,93,80,159,34,8,28,35, +247,22,48,83,159,34,93,80,158,34,8,29,11,83,159,34,93,80,158,34,8, +30,11,83,159,34,93,80,159,34,8,31,35,89,162,8,36,35,38,2,67,223, +0,91,159,36,10,90,161,35,34,10,11,90,161,35,35,10,83,158,37,20,92, +96,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97, +109,101,45,114,101,115,111,108,118,101,114,246,89,162,8,36,35,44,9,224,2, +0,87,94,28,207,248,208,195,12,27,27,250,22,116,80,158,40,8,26,248,22, +252,85,3,247,22,252,212,2,11,28,192,192,27,247,22,110,87,94,250,22,115, +80,158,41,8,26,248,22,252,85,3,247,22,252,212,2,195,192,250,22,115,195, +198,66,97,116,116,97,99,104,247,89,162,34,37,42,9,223,1,251,211,197,198, +199,10,89,162,34,38,8,28,9,225,2,3,0,28,28,248,22,50,196,249,22, +252,11,2,248,22,52,198,66,112,108,97,110,101,116,248,11,87,94,28,207,12, +20,14,159,80,158,36,53,250,80,158,39,54,249,22,19,11,80,158,41,53,22, +252,212,2,196,90,161,35,34,10,249,22,235,21,95,63,108,105,98,249,6,11, +11,114,101,115,111,108,118,101,114,46,115,115,250,6,6,6,112,108,97,110,101, +116,251,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109, +101,45,114,101,115,111,108,118,101,114,252,252,0,12,251,211,199,200,201,202,27, +28,248,22,252,136,1,197,27,248,80,159,39,8,50,35,199,27,250,22,116,80, +158,42,8,27,249,22,51,203,198,11,28,192,192,27,248,22,252,211,1,200,28, +249,22,252,68,3,2,243,194,27,249,22,252,67,3,2,242,195,28,192,249,32, +252,253,0,89,162,8,64,36,47,2,156,222,27,249,22,252,67,3,2,242,196, +28,192,27,249,22,252,36,3,196,27,248,22,78,197,28,249,22,252,194,1,194, +5,1,46,252,254,0,2,226,28,249,22,252,194,1,194,5,2,46,46,252,255, +0,62,117,112,252,0,1,248,22,252,29,3,193,27,248,22,87,195,27,249,22, +252,67,3,2,242,195,28,192,249,2,252,253,0,249,22,252,36,3,198,27,248, +22,78,198,28,249,22,252,194,1,194,2,252,254,0,2,226,28,249,22,252,194, +1,194,2,252,255,0,2,252,0,1,248,22,252,29,3,193,248,22,87,195,249, +22,252,36,3,196,248,22,252,29,3,196,249,22,252,36,3,195,248,22,252,29, +3,197,249,22,252,36,3,199,27,248,22,78,198,28,249,22,252,194,1,194,2, +252,254,0,2,226,28,249,22,252,194,1,194,2,252,255,0,2,252,0,1,248, +22,252,29,3,193,248,22,87,195,249,22,252,36,3,197,248,22,252,29,3,196, +248,22,59,249,22,252,159,1,6,72,72,32,40,114,101,108,97,116,105,118,101, +32,115,116,114,105,110,103,32,102,111,114,109,32,109,117,115,116,32,99,111,110, +116,97,105,110,32,111,110,108,121,32,97,45,122,44,32,65,45,90,44,32,48, +45,57,44,32,45,44,32,95,44,32,46,44,32,47,44,32,97,110,100,32,252, +1,1,6,37,37,115,112,97,99,101,44,32,119,105,116,104,32,110,111,32,108, +101,97,100,105,110,103,32,111,114,32,116,114,97,105,108,105,110,103,32,47,41, +252,2,1,28,248,22,252,25,3,197,28,248,22,252,39,3,197,196,248,22,59, +6,25,25,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98, +115,111,108,117,116,101,41,252,3,1,28,28,248,22,50,197,248,22,252,9,2, +248,22,58,198,10,11,28,249,22,252,11,2,248,22,52,199,2,249,27,250,22, +116,80,158,41,8,27,249,22,51,202,247,22,252,56,3,11,28,192,192,27,27, +248,22,64,200,28,249,22,181,194,36,248,22,59,6,5,5,109,122,108,105,98, +252,4,1,28,249,22,183,194,36,248,22,80,200,11,28,192,28,249,22,4,32, +252,5,1,89,162,34,35,36,9,222,28,248,22,252,136,1,193,248,22,252,38, +3,193,11,194,28,248,22,252,136,1,248,22,78,200,28,248,22,252,38,3,248, +22,78,200,27,27,248,22,52,195,27,248,22,53,196,27,247,22,252,56,3,251, +32,252,6,1,89,162,8,64,38,49,2,218,222,28,248,22,57,196,248,22,252, +187,2,249,22,252,161,2,248,22,252,165,1,251,22,252,184,1,2,219,2,246, +28,248,22,57,203,201,250,22,1,22,252,36,3,204,205,200,247,22,15,27,249, +22,252,36,3,248,22,52,199,196,28,248,22,252,31,3,193,27,250,22,1,22, +252,36,3,196,199,28,248,22,252,31,3,193,192,251,2,252,6,1,198,199,200, +248,22,53,202,251,2,252,6,1,197,198,199,248,22,53,201,196,198,197,196,249, +22,252,36,3,194,248,22,78,202,11,11,11,11,28,249,22,252,11,2,248,22, +52,199,64,102,105,108,101,252,7,1,28,249,22,181,248,22,64,199,36,27,248, +22,78,198,28,248,22,252,136,1,193,28,27,248,22,252,25,3,194,28,192,192, +28,248,22,252,136,1,194,27,248,22,252,38,3,195,28,192,192,248,22,252,39, +3,195,11,249,22,252,41,3,194,248,80,159,41,8,50,35,201,11,11,11,11, +87,94,28,28,248,22,252,25,3,193,10,248,22,252,222,1,193,12,28,198,250, +22,252,39,2,67,114,101,113,117,105,114,101,252,8,1,249,22,252,184,1,6, +17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,252,9, +1,28,197,248,22,52,198,6,0,0,252,10,1,201,250,22,252,40,2,2,246, +249,22,252,184,1,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97, +252,11,1,28,197,248,22,52,198,6,0,0,252,12,1,199,27,28,248,22,252, +222,1,194,249,22,252,227,1,195,34,248,22,252,43,3,248,22,252,44,3,195, +27,28,248,22,252,222,1,195,249,22,252,227,1,196,35,248,80,159,40,38,35, +194,91,159,37,11,90,161,37,34,11,28,248,22,252,222,1,198,250,22,7,67, +105,103,110,111,114,101,100,252,13,1,249,22,252,227,1,202,36,2,252,13,1, +248,22,252,37,3,197,27,28,248,22,252,222,1,199,249,22,252,227,1,200,37, +249,80,159,45,36,35,196,5,0,252,14,1,27,28,248,22,252,222,1,200,249, +22,252,227,1,201,38,249,22,252,184,1,6,3,3,44,126,97,252,15,1,248, +22,252,210,1,248,22,252,27,3,248,80,159,49,38,35,199,27,28,248,22,252, +222,1,201,249,22,252,227,1,202,39,248,22,42,249,22,252,159,1,196,248,22, +252,210,1,248,22,252,27,3,199,27,28,248,22,252,222,1,202,249,22,252,227, +1,203,40,27,249,22,252,67,3,2,166,248,22,252,27,3,201,28,192,248,22, +52,193,10,27,27,250,22,116,80,158,51,8,26,248,22,252,85,3,247,22,252, +212,2,11,28,192,192,27,247,22,110,87,94,250,22,115,80,158,52,8,26,248, +22,252,85,3,247,22,252,212,2,195,192,87,95,28,23,17,27,250,22,116,196, +198,11,87,94,28,192,28,28,248,22,41,193,10,249,22,252,13,2,196,194,12, +252,22,252,37,2,2,246,6,71,71,109,111,100,117,108,101,32,112,114,101,118, +105,111,117,115,108,121,32,108,111,97,100,101,100,32,119,105,116,104,32,115,117, +102,102,105,120,32,126,115,44,32,99,97,110,110,111,116,32,108,111,97,100,32, +119,105,116,104,32,115,117,102,102,105,120,32,126,115,58,32,126,101,252,16,1, +28,249,22,252,11,2,10,199,6,0,0,252,17,1,197,28,249,22,252,11,2, +10,201,6,0,0,252,18,1,199,23,15,12,28,192,12,87,95,27,249,22,17, +247,22,15,80,158,51,8,28,27,247,22,252,212,2,249,22,3,89,162,34,35, +48,9,226,13,14,2,3,28,249,22,252,13,2,248,22,53,199,197,28,249,22, +252,11,2,248,22,52,199,195,251,22,252,37,2,2,246,6,26,26,99,121,99, +108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101,58,32, +126,101,252,19,1,198,249,22,2,22,53,248,22,67,249,22,51,205,201,12,12, +195,27,248,22,42,198,20,14,159,80,158,49,8,28,249,22,51,247,22,252,212, +2,204,20,14,159,80,158,49,53,250,80,158,52,54,249,22,19,11,80,158,54, +53,22,234,195,249,247,80,158,51,52,205,248,22,42,248,22,252,210,1,248,22, +252,27,3,203,250,22,115,196,198,197,12,28,28,248,22,252,222,1,203,11,27, +248,22,252,136,1,23,16,28,192,192,28,248,22,50,23,16,249,22,252,11,2, +248,22,52,23,18,2,249,11,250,22,115,80,158,50,8,27,28,248,22,252,136, +1,23,18,249,22,51,23,19,248,80,159,53,8,50,35,23,21,249,22,51,23, +19,247,22,252,56,3,254,22,252,224,1,23,19,23,18,23,16,206,205,204,203, +12,194,208,83,159,34,93,80,159,34,8,32,35,83,158,37,20,92,95,2,69, +89,162,34,34,36,9,223,0,248,80,158,35,8,32,9,89,162,34,35,47,9, +223,0,27,247,22,252,58,3,249,80,158,37,45,28,194,27,248,22,252,217,1, +6,11,11,80,76,84,67,79,76,76,69,67,84,83,252,20,1,28,192,192,6, +0,0,252,21,1,6,0,0,252,22,1,27,28,195,250,22,252,36,3,248,22, +252,54,3,69,97,100,100,111,110,45,100,105,114,252,23,1,247,22,252,215,1, +6,8,8,99,111,108,108,101,99,116,115,252,24,1,11,27,248,80,159,40,8, +51,35,249,22,65,201,248,22,59,248,22,252,54,3,72,99,111,108,108,101,99, +116,115,45,100,105,114,252,25,1,28,193,249,22,51,195,194,192,83,159,34,93, +80,159,34,8,33,35,32,252,26,1,89,162,8,36,35,37,2,71,222,27,248, +22,252,4,1,194,28,192,192,248,22,252,5,1,194,83,159,34,97,80,159,34, +8,34,35,80,159,34,8,35,35,80,159,34,8,36,35,80,159,34,8,37,35, +80,159,34,8,38,35,26,9,22,252,91,2,63,101,118,116,252,27,1,11,35, +34,11,248,22,59,249,22,51,22,252,90,2,34,247,22,252,114,2,11,21,93, +34,83,159,34,93,80,159,34,8,39,35,89,162,34,35,39,2,83,223,0,87, +94,28,28,248,22,0,194,249,22,34,195,34,11,12,250,22,252,40,2,2,83, +6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48, +41,252,28,1,196,248,80,158,35,8,35,89,162,34,35,36,9,223,2,247,192, +83,159,34,93,80,159,34,8,40,35,32,252,29,1,89,162,34,35,38,2,85, +222,87,94,28,248,22,252,254,2,193,12,250,22,252,40,2,2,85,6,7,7, +99,104,97,110,110,101,108,252,30,1,195,248,22,252,239,2,193,83,159,34,93, +80,159,34,8,41,35,32,252,31,1,89,162,34,35,38,2,87,222,87,94,28, +248,22,252,254,2,193,12,250,22,252,40,2,2,87,6,7,7,99,104,97,110, +110,101,108,252,32,1,195,249,22,252,240,2,34,194,83,159,34,93,80,159,34, +8,42,35,32,252,33,1,89,162,34,36,39,2,89,222,87,94,28,248,22,252, +254,2,193,12,250,22,252,40,2,2,89,6,7,7,99,104,97,110,110,101,108, +252,34,1,195,28,248,22,252,239,2,249,22,252,253,2,195,196,12,11,83,159, +34,93,80,159,34,8,43,35,32,252,35,1,89,162,34,34,34,2,91,222,247, +22,252,212,2,83,159,34,93,80,159,34,8,44,35,89,162,34,35,39,2,93, +223,0,87,94,28,249,22,181,195,39,12,250,22,252,40,2,2,93,6,1,1, +53,252,36,1,196,248,80,158,35,8,45,11,83,159,34,93,80,159,34,8,46, +35,89,162,34,35,39,2,97,223,0,87,94,28,249,22,181,195,39,12,250,22, +252,40,2,2,97,6,1,1,53,252,37,1,196,248,80,158,35,8,45,10,83, +159,34,93,80,159,34,8,45,35,89,162,8,36,35,43,2,95,223,0,27,248, +22,252,190,2,65,101,109,112,116,121,252,38,1,27,247,22,252,190,2,87,94, +20,14,159,80,158,36,53,250,80,158,39,54,249,22,19,11,80,158,41,53,22, +252,212,2,196,87,96,249,22,239,194,66,35,37,114,53,114,115,252,39,1,248, +22,237,2,252,39,1,248,22,238,21,95,64,111,110,108,121,252,40,1,68,109, +122,115,99,104,101,109,101,252,41,1,72,115,121,110,116,97,120,45,114,117,108, +101,115,252,42,1,28,195,12,249,22,3,32,252,43,1,89,162,34,35,39,9, +222,249,22,252,82,3,194,249,22,235,2,252,41,1,196,21,15,203,63,99,97, +114,252,44,1,63,99,100,114,252,45,1,64,99,97,97,114,252,46,1,64,99, +97,100,114,252,47,1,64,99,100,97,114,252,48,1,64,99,100,100,114,252,49, +1,65,99,97,97,97,114,252,50,1,65,99,97,97,100,114,252,51,1,65,99, +97,100,97,114,252,52,1,65,99,97,100,100,114,252,53,1,65,99,100,97,97, +114,252,54,1,65,99,100,97,100,114,252,55,1,65,99,100,100,97,114,252,56, +1,65,99,100,100,100,114,252,57,1,66,99,97,97,97,97,114,252,58,1,66, +99,97,97,97,100,114,252,59,1,66,99,97,97,100,97,114,252,60,1,66,99, +97,97,100,100,114,252,61,1,66,99,97,100,97,97,114,252,62,1,66,99,97, +100,97,100,114,252,63,1,66,99,97,100,100,97,114,252,64,1,66,99,97,100, +100,100,114,252,65,1,66,99,100,97,97,97,114,252,66,1,66,99,100,97,97, +100,114,252,67,1,66,99,100,97,100,97,114,252,68,1,66,99,100,97,100,100, +114,252,69,1,66,99,100,100,97,97,114,252,70,1,66,99,100,100,97,100,114, +252,71,1,66,99,100,100,100,97,114,252,72,1,66,99,100,100,100,100,114,252, +73,1,63,109,97,112,252,74,1,61,61,252,75,1,61,60,252,76,1,61,62, +252,77,1,62,60,61,252,78,1,62,62,61,252,79,1,63,109,97,120,252,80, +1,63,109,105,110,252,81,1,61,43,252,82,1,61,45,252,83,1,61,42,252, +84,1,61,47,252,85,1,63,97,98,115,252,86,1,63,103,99,100,252,87,1, +63,108,99,109,252,88,1,63,101,120,112,252,89,1,63,108,111,103,252,90,1, +63,115,105,110,252,91,1,63,99,111,115,252,92,1,63,116,97,110,252,93,1, +63,110,111,116,252,94,1,63,101,113,63,252,95,1,1,30,99,97,108,108,45, +119,105,116,104,45,99,117,114,114,101,110,116,45,99,111,110,116,105,110,117,97, +116,105,111,110,252,96,1,71,109,97,107,101,45,115,116,114,105,110,103,252,97, +1,74,115,121,109,98,111,108,45,62,115,116,114,105,110,103,252,98,1,74,115, +116,114,105,110,103,45,62,115,121,109,98,111,108,252,99,1,76,109,97,107,101, +45,114,101,99,116,97,110,103,117,108,97,114,252,100,1,74,101,120,97,99,116, +45,62,105,110,101,120,97,99,116,252,101,1,74,105,110,101,120,97,99,116,45, +62,101,120,97,99,116,252,102,1,74,110,117,109,98,101,114,45,62,115,116,114, +105,110,103,252,103,1,74,115,116,114,105,110,103,45,62,110,117,109,98,101,114, +252,104,1,2,14,72,111,117,116,112,117,116,45,112,111,114,116,63,252,105,1, +78,99,117,114,114,101,110,116,45,105,110,112,117,116,45,112,111,114,116,252,106, +1,79,99,117,114,114,101,110,116,45,111,117,116,112,117,116,45,112,111,114,116, +252,107,1,78,99,117,114,114,101,110,116,45,101,114,114,111,114,45,112,111,114, +116,252,108,1,75,111,112,101,110,45,105,110,112,117,116,45,102,105,108,101,252, +109,1,76,111,112,101,110,45,111,117,116,112,117,116,45,102,105,108,101,252,110, +1,76,99,108,111,115,101,45,105,110,112,117,116,45,112,111,114,116,252,111,1, +77,99,108,111,115,101,45,111,117,116,112,117,116,45,112,111,114,116,252,112,1, +79,119,105,116,104,45,111,117,116,112,117,116,45,116,111,45,102,105,108,101,252, +113,1,73,116,114,97,110,115,99,114,105,112,116,45,111,110,252,114,1,74,116, +114,97,110,115,99,114,105,112,116,45,111,102,102,252,115,1,72,102,108,117,115, +104,45,111,117,116,112,117,116,252,116,1,73,115,116,114,105,110,103,45,108,101, +110,103,116,104,252,117,1,72,115,116,114,105,110,103,45,99,105,60,61,63,252, +118,1,72,115,116,114,105,110,103,45,99,105,62,61,63,252,119,1,73,115,116, +114,105,110,103,45,97,112,112,101,110,100,252,120,1,72,115,116,114,105,110,103, +45,62,108,105,115,116,252,121,1,72,108,105,115,116,45,62,115,116,114,105,110, +103,252,122,1,72,115,116,114,105,110,103,45,102,105,108,108,33,252,123,1,73, +118,101,99,116,111,114,45,108,101,110,103,116,104,252,124,1,72,118,101,99,116, +111,114,45,62,108,105,115,116,252,125,1,72,108,105,115,116,45,62,118,101,99, +116,111,114,252,126,1,72,118,101,99,116,111,114,45,102,105,108,108,33,252,127, +1,76,99,104,97,114,45,97,108,112,104,97,98,101,116,105,99,63,252,128,1, +73,99,104,97,114,45,110,117,109,101,114,105,99,63,252,129,1,76,99,104,97, +114,45,119,104,105,116,101,115,112,97,99,101,63,252,130,1,76,99,104,97,114, +45,117,112,112,101,114,45,99,97,115,101,63,252,131,1,76,99,104,97,114,45, +108,111,119,101,114,45,99,97,115,101,63,252,132,1,73,99,104,97,114,45,62, +105,110,116,101,103,101,114,252,133,1,73,105,110,116,101,103,101,114,45,62,99, +104,97,114,252,134,1,73,99,104,97,114,45,100,111,119,110,99,97,115,101,252, +135,1,1,21,99,97,108,108,45,119,105,116,104,45,111,117,116,112,117,116,45, +102,105,108,101,252,136,1,1,20,99,97,108,108,45,119,105,116,104,45,105,110, +112,117,116,45,102,105,108,101,252,137,1,1,20,119,105,116,104,45,105,110,112, +117,116,45,102,114,111,109,45,102,105,108,101,252,138,1,65,97,112,112,108,121, +252,139,1,68,102,111,114,45,101,97,99,104,252,140,1,67,115,121,109,98,111, +108,63,252,141,1,65,112,97,105,114,63,252,142,1,64,99,111,110,115,252,143, +1,68,115,101,116,45,99,97,114,33,252,144,1,68,115,101,116,45,99,100,114, +33,252,145,1,65,110,117,108,108,63,252,146,1,65,108,105,115,116,63,252,147, +1,64,108,105,115,116,252,148,1,66,108,101,110,103,116,104,252,149,1,66,97, +112,112,101,110,100,252,150,1,67,114,101,118,101,114,115,101,252,151,1,69,108, +105,115,116,45,116,97,105,108,252,152,1,68,108,105,115,116,45,114,101,102,252, +153,1,64,109,101,109,113,252,154,1,64,109,101,109,118,252,155,1,66,109,101, +109,98,101,114,252,156,1,64,97,115,115,113,252,157,1,64,97,115,115,118,252, +158,1,65,97,115,115,111,99,252,159,1,70,112,114,111,99,101,100,117,114,101, +63,252,160,1,67,110,117,109,98,101,114,63,252,161,1,68,99,111,109,112,108, +101,120,63,252,162,1,65,114,101,97,108,63,252,163,1,69,114,97,116,105,111, +110,97,108,63,252,164,1,68,105,110,116,101,103,101,114,63,252,165,1,66,101, +120,97,99,116,63,252,166,1,68,105,110,101,120,97,99,116,63,252,167,1,65, +122,101,114,111,63,252,168,1,69,112,111,115,105,116,105,118,101,63,252,169,1, +69,110,101,103,97,116,105,118,101,63,252,170,1,64,111,100,100,63,252,171,1, +65,101,118,101,110,63,252,172,1,68,113,117,111,116,105,101,110,116,252,173,1, +69,114,101,109,97,105,110,100,101,114,252,174,1,66,109,111,100,117,108,111,252, +175,1,65,102,108,111,111,114,252,176,1,67,99,101,105,108,105,110,103,252,177, +1,68,116,114,117,110,99,97,116,101,252,178,1,65,114,111,117,110,100,252,179, +1,69,110,117,109,101,114,97,116,111,114,252,180,1,71,100,101,110,111,109,105, +110,97,116,111,114,252,181,1,64,97,115,105,110,252,182,1,64,97,99,111,115, +252,183,1,64,97,116,97,110,252,184,1,64,115,113,114,116,252,185,1,64,101, +120,112,116,252,186,1,70,109,97,107,101,45,112,111,108,97,114,252,187,1,69, +114,101,97,108,45,112,97,114,116,252,188,1,69,105,109,97,103,45,112,97,114, +116,252,189,1,65,97,110,103,108,101,252,190,1,69,109,97,103,110,105,116,117, +100,101,252,191,1,71,105,110,112,117,116,45,112,111,114,116,63,252,192,1,64, +114,101,97,100,252,193,1,69,114,101,97,100,45,99,104,97,114,252,194,1,69, +112,101,101,107,45,99,104,97,114,252,195,1,71,101,111,102,45,111,98,106,101, +99,116,63,252,196,1,71,99,104,97,114,45,114,101,97,100,121,63,252,197,1, +65,119,114,105,116,101,252,198,1,67,100,105,115,112,108,97,121,252,199,1,67, +110,101,119,108,105,110,101,252,200,1,70,119,114,105,116,101,45,99,104,97,114, +252,201,1,64,108,111,97,100,252,202,1,67,115,116,114,105,110,103,63,252,203, +1,66,115,116,114,105,110,103,252,204,1,70,115,116,114,105,110,103,45,114,101, +102,252,205,1,71,115,116,114,105,110,103,45,115,101,116,33,252,206,1,68,115, +116,114,105,110,103,61,63,252,207,1,69,115,117,98,115,116,114,105,110,103,252, +208,1,71,115,116,114,105,110,103,45,99,111,112,121,252,209,1,71,115,116,114, +105,110,103,45,99,105,61,63,252,210,1,68,115,116,114,105,110,103,60,63,252, +211,1,68,115,116,114,105,110,103,62,63,252,212,1,69,115,116,114,105,110,103, +60,61,63,252,213,1,69,115,116,114,105,110,103,62,61,63,252,214,1,71,115, +116,114,105,110,103,45,99,105,60,63,252,215,1,71,115,116,114,105,110,103,45, +99,105,62,63,252,216,1,67,118,101,99,116,111,114,63,252,217,1,71,109,97, +107,101,45,118,101,99,116,111,114,252,218,1,66,118,101,99,116,111,114,252,219, +1,70,118,101,99,116,111,114,45,114,101,102,252,220,1,71,118,101,99,116,111, +114,45,115,101,116,33,252,221,1,65,99,104,97,114,63,252,222,1,66,99,104, +97,114,61,63,252,223,1,66,99,104,97,114,60,63,252,224,1,66,99,104,97, +114,62,63,252,225,1,67,99,104,97,114,60,61,63,252,226,1,67,99,104,97, +114,62,61,63,252,227,1,69,99,104,97,114,45,99,105,61,63,252,228,1,69, +99,104,97,114,45,99,105,60,63,252,229,1,69,99,104,97,114,45,99,105,62, +63,252,230,1,70,99,104,97,114,45,99,105,60,61,63,252,231,1,70,99,104, +97,114,45,99,105,62,61,63,252,232,1,71,99,104,97,114,45,117,112,99,97, +115,101,252,233,1,68,98,111,111,108,101,97,110,63,252,234,1,64,101,113,118, +63,252,235,1,66,101,113,117,97,108,63,252,236,1,65,102,111,114,99,101,252, +237,1,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117,101,115,252,238, +1,66,118,97,108,117,101,115,252,239,1,64,101,118,97,108,252,240,1,2,71, +2,93,2,97,2,91,72,100,121,110,97,109,105,99,45,119,105,110,100,252,241, +1,9,193,97,68,35,37,107,101,114,110,101,108,252,242,1,2,125,2,124,2, +123,2,122,95,2,252,242,1,2,106,2,126,0}; + EVAL_ONE_SIZED_STR((char *)expr, 13557); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,20,252,177,1,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,20,252,183,1,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,72,35,37,115,116, 120,109,122,45,98,111,100,121,1,29,2,11,11,18,95,11,37,98,35,10,34, 11,94,159,68,35,37,100,101,102,105,110,101,3,9,11,159,76,35,37,115,116, @@ -4402,13 +4058,13 @@ 30,14,2,12,67,115,116,120,45,99,100,114,15,6,16,3,18,98,64,104,101, 114,101,16,41,35,98,40,10,35,11,93,159,2,12,9,11,16,0,96,39,8, 254,1,11,16,0,16,4,38,11,63,115,116,120,17,3,1,7,101,110,118,52, -56,56,55,18,18,158,2,6,41,18,158,78,114,101,113,117,105,114,101,45,102, -111,114,45,115,121,110,116,97,120,19,41,11,9,95,2,7,2,4,2,3,94, -2,7,2,12,0}; - EVAL_ONE_SIZED_STR((char *)expr, 445); +55,50,53,18,18,16,2,158,2,6,41,42,18,16,2,158,78,114,101,113,117, +105,114,101,45,102,111,114,45,115,121,110,116,97,120,19,41,43,11,9,95,2, +7,2,4,2,3,94,2,7,2,12,0}; + EVAL_ONE_SIZED_STR((char *)expr, 451); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,95,252,202,6,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,95,252,202,6,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,68,109,122,115,99, 104,101,109,101,1,29,2,11,11,10,10,10,34,80,158,34,34,20,98,159,34, 16,0,16,0,74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,3,10, @@ -4442,264 +4098,231 @@ 63,31,71,114,97,116,105,111,110,97,108,105,122,101,32,1,20,114,101,97,100, 45,101,118,97,108,45,112,114,105,110,116,45,108,111,111,112,33,1,25,115,99, 104,101,109,101,45,114,101,112,111,114,116,45,101,110,118,105,114,111,110,109,101, -110,116,34,73,119,105,116,104,45,104,97,110,100,108,101,114,115,35,74,119,105, -116,104,45,104,97,110,100,108,101,114,115,42,36,70,115,121,110,116,97,120,47, -108,111,99,37,64,99,111,110,100,38,66,115,121,110,116,97,120,39,70,113,117, -97,115,105,113,117,111,116,101,40,68,117,110,115,121,110,116,97,120,41,71,113, -117,97,115,105,115,121,110,116,97,120,42,75,108,101,116,114,101,99,45,115,121, -110,116,97,120,101,115,43,66,108,101,116,47,99,99,44,66,108,101,116,114,101, -99,45,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97,120,46, -76,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120,47,64,116,105, -109,101,48,63,108,101,116,49,64,108,101,116,42,50,69,102,108,117,105,100,45, -108,101,116,51,63,97,110,100,52,62,111,114,53,75,113,117,97,115,105,115,121, -110,116,97,120,47,108,111,99,54,66,117,110,108,101,115,115,55,72,115,121,110, -116,97,120,45,99,97,115,101,42,56,72,112,97,114,97,109,101,116,101,114,105, -122,101,57,65,100,101,108,97,121,58,73,108,101,116,114,101,99,45,115,121,110, -116,97,120,59,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,60, -73,100,101,102,105,110,101,45,115,116,114,117,99,116,61,64,119,104,101,110,62, -2,3,1,28,109,122,115,99,104,101,109,101,45,105,110,45,115,116,120,45,109, -111,100,117,108,101,45,98,101,103,105,110,63,71,115,101,116,33,45,118,97,108, -117,101,115,64,70,108,101,116,45,115,116,114,117,99,116,65,72,108,101,116,45, -115,121,110,116,97,120,101,115,66,70,108,101,116,45,115,121,110,116,97,120,67, -72,115,121,110,116,97,120,45,114,117,108,101,115,68,66,100,101,102,105,110,101, -69,71,115,121,110,116,97,120,45,99,97,115,101,70,64,99,97,115,101,71,77, -117,110,115,121,110,116,97,120,45,115,112,108,105,99,105,110,103,72,62,100,111, -73,66,108,101,116,47,101,99,74,78,112,97,114,97,109,101,116,101,114,105,122, -101,45,98,114,101,97,107,75,73,100,101,102,105,110,101,45,115,121,110,116,97, -120,76,71,119,105,116,104,45,115,121,110,116,97,120,77,79,109,101,109,111,114, -121,45,116,114,97,99,101,45,108,97,109,98,100,97,78,16,76,73,35,37,109, +110,116,34,64,108,101,116,42,35,1,28,109,122,115,99,104,101,109,101,45,105, +110,45,115,116,120,45,109,111,100,117,108,101,45,98,101,103,105,110,36,63,97, +110,100,37,66,108,101,116,114,101,99,38,62,111,114,39,2,3,64,119,104,101, +110,40,66,117,110,108,101,115,115,41,66,108,101,116,47,101,99,42,71,115,101, +116,33,45,118,97,108,117,101,115,43,70,108,101,116,45,115,116,114,117,99,116, +44,72,108,101,116,45,115,121,110,116,97,120,101,115,45,64,99,111,110,100,46, +72,115,121,110,116,97,120,45,114,117,108,101,115,47,63,108,101,116,48,71,115, +121,110,116,97,120,45,99,97,115,101,49,70,108,101,116,45,115,121,110,116,97, +120,50,73,108,101,116,114,101,99,45,115,121,110,116,97,120,51,66,100,101,102, +105,110,101,52,66,115,121,110,116,97,120,53,76,98,101,103,105,110,45,102,111, +114,45,115,121,110,116,97,120,54,73,100,101,102,105,110,101,45,115,121,110,116, +97,120,55,69,102,108,117,105,100,45,108,101,116,56,77,117,110,115,121,110,116, +97,120,45,115,112,108,105,99,105,110,103,57,77,100,101,102,105,110,101,45,102, +111,114,45,115,121,110,116,97,120,58,64,99,97,115,101,59,65,100,101,108,97, +121,60,79,109,101,109,111,114,121,45,116,114,97,99,101,45,108,97,109,98,100, +97,61,66,108,101,116,47,99,99,62,62,100,111,63,64,116,105,109,101,64,73, +100,101,102,105,110,101,45,115,116,114,117,99,116,65,78,112,97,114,97,109,101, +116,101,114,105,122,101,45,98,114,101,97,107,66,72,115,121,110,116,97,120,45, +99,97,115,101,42,67,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101, +115,68,71,119,105,116,104,45,115,121,110,116,97,120,69,70,115,121,110,116,97, +120,47,108,111,99,70,75,113,117,97,115,105,115,121,110,116,97,120,47,108,111, +99,71,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,72,70,113, +117,97,115,105,113,117,111,116,101,73,68,117,110,115,121,110,116,97,120,74,71, +113,117,97,115,105,115,121,110,116,97,120,75,72,112,97,114,97,109,101,116,101, +114,105,122,101,76,73,119,105,116,104,45,104,97,110,100,108,101,114,115,77,74, +119,105,116,104,45,104,97,110,100,108,101,114,115,42,78,16,76,73,35,37,109, 111,114,101,45,115,99,104,101,109,101,79,2,79,66,35,37,109,105,115,99,80, 2,80,2,80,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101, 81,2,80,2,79,2,80,2,79,2,80,2,80,2,79,70,35,37,119,105,116, 104,45,115,116,120,82,2,80,65,35,37,115,116,120,83,2,80,2,80,2,80, 2,80,2,80,2,80,2,80,2,80,2,80,2,80,2,80,2,79,2,80,2, -80,2,80,2,79,2,79,68,35,37,115,116,120,108,111,99,84,66,35,37,99, -111,110,100,85,69,35,37,115,116,120,99,97,115,101,86,71,35,37,113,113,45, -97,110,100,45,111,114,87,67,35,37,113,113,115,116,120,88,2,88,2,81,2, -79,2,87,68,35,37,100,101,102,105,110,101,89,2,89,2,79,2,87,2,87, -2,79,2,87,2,87,2,88,74,35,37,100,101,102,105,110,101,45,101,116,45, -97,108,90,2,84,2,79,2,79,2,81,2,81,2,90,2,90,68,35,37,107, -101,114,110,101,108,91,72,35,37,115,116,120,109,122,45,98,111,100,121,92,2, -79,2,79,2,81,2,81,2,81,2,89,2,84,2,79,2,88,2,79,2,90, -2,79,2,89,2,82,2,80,16,76,2,4,2,5,2,6,2,7,2,8,2, +80,2,80,71,35,37,113,113,45,97,110,100,45,111,114,84,72,35,37,115,116, +120,109,122,45,98,111,100,121,85,2,84,2,84,2,84,68,35,37,107,101,114, +110,101,108,86,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,87,2, +87,2,87,2,79,2,79,2,81,66,35,37,99,111,110,100,88,2,81,2,84, +68,35,37,115,116,120,108,111,99,89,2,81,2,81,68,35,37,100,101,102,105, +110,101,90,69,35,37,115,116,120,99,97,115,101,91,2,90,2,90,2,79,67, +35,37,113,113,115,116,120,92,2,90,2,79,2,79,2,80,2,79,2,79,2, +79,2,87,2,79,2,89,2,81,2,82,2,89,2,92,2,81,2,84,2,92, +2,92,2,79,2,79,2,79,16,76,2,4,2,5,2,6,2,7,2,8,2, 9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19, 2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2, -30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40, -2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2, -51,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61, -2,62,1,20,35,37,112,108,97,105,110,45,109,111,100,117,108,101,45,98,101, -103,105,110,93,2,3,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2, +30,2,31,2,32,2,33,2,34,2,35,2,3,2,37,2,38,2,39,1,20, +35,37,112,108,97,105,110,45,109,111,100,117,108,101,45,98,101,103,105,110,93, +2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2, +50,2,51,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60, +2,61,2,62,2,63,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2, 71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,8,31,8,76,9,9, -101,2,91,2,79,2,80,2,81,2,83,2,92,2,88,2,89,68,35,37,101, +101,2,86,2,79,2,80,2,81,2,83,2,85,2,92,2,90,68,35,37,101, 120,112,111,98,115,94,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 1750); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,126,252,183,15,159,34,20,98,159,34,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,134,252,16,13,159,34,20,98,159,34,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,41,20,95,114,66,35,37,114,53, 114,115,1,29,2,11,11,10,10,10,35,80,158,34,34,20,98,159,34,16,1, 30,3,2,2,69,117,110,100,101,102,105,110,101,100,4,254,1,16,0,11,11, -16,1,2,4,35,11,16,24,70,113,117,97,115,105,113,117,111,116,101,5,2, -0,62,111,114,6,73,108,101,116,114,101,99,45,115,121,110,116,97,120,7,65, -100,101,108,97,121,8,65,113,117,111,116,101,9,62,105,102,10,70,108,101,116, -45,115,121,110,116,97,120,11,73,100,101,102,105,110,101,45,115,121,110,116,97, -120,12,64,99,97,115,101,13,67,117,110,113,117,111,116,101,14,66,108,97,109, -98,100,97,15,64,108,101,116,42,16,63,108,101,116,17,76,117,110,113,117,111, -116,101,45,115,112,108,105,99,105,110,103,18,64,99,111,110,100,19,65,35,37, -97,112,112,20,71,114,53,114,115,58,108,101,116,114,101,99,21,62,100,111,22, -66,100,101,102,105,110,101,23,67,35,37,100,97,116,117,109,24,64,115,101,116, -33,25,65,35,37,116,111,112,26,63,97,110,100,27,16,24,71,35,37,113,113, -45,97,110,100,45,111,114,28,68,35,37,107,101,114,110,101,108,29,2,28,76, -35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,30,73,35,37,109, -111,114,101,45,115,99,104,101,109,101,31,2,29,2,29,2,30,68,35,37,100, -101,102,105,110,101,32,2,31,2,29,2,29,2,28,2,28,2,29,66,35,37, -99,111,110,100,33,2,29,11,2,31,2,32,2,29,2,29,2,29,2,28,16, -24,2,5,2,0,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13, -2,14,2,15,2,16,2,17,2,18,2,19,2,20,66,108,101,116,114,101,99, -34,2,22,2,23,2,24,2,25,2,26,2,27,34,58,93,16,5,93,2,21, -87,98,83,159,34,93,80,159,34,8,60,35,89,162,8,37,35,42,9,223,0, -250,22,209,20,15,159,37,8,40,46,249,22,60,248,22,52,199,248,22,78,199, -20,15,159,37,8,41,46,83,159,34,93,80,159,34,8,59,35,89,162,8,37, -35,43,9,223,0,250,22,209,20,15,159,37,56,46,250,22,60,20,15,159,40, -57,46,248,22,52,200,248,22,78,200,20,15,159,37,58,46,83,159,34,93,80, -159,34,8,58,35,89,162,8,37,35,42,9,223,0,250,22,209,20,15,159,37, -54,46,249,22,60,248,22,52,199,248,22,78,199,20,15,159,37,55,46,83,159, -34,93,80,159,34,8,57,35,89,162,8,37,35,42,9,223,0,250,22,209,20, -15,159,37,49,46,249,22,56,248,22,52,199,20,15,159,39,50,46,20,15,159, -37,51,46,83,159,34,93,80,159,34,8,56,35,89,162,8,37,35,42,9,223, -0,250,22,209,20,15,159,37,41,46,249,22,60,248,22,52,199,248,22,78,199, -20,15,159,37,42,46,89,162,34,35,54,9,223,0,27,28,248,80,158,36,34, -195,249,80,158,37,35,248,80,158,38,36,197,27,248,80,158,39,37,198,28,248, -80,158,39,34,193,249,80,158,40,38,27,248,80,158,42,36,196,28,248,80,158, -42,39,193,248,22,9,89,162,34,35,41,9,224,8,1,27,249,22,2,89,162, +16,1,2,4,35,11,16,24,66,108,97,109,98,100,97,5,63,97,110,100,6, +2,0,62,111,114,7,65,113,117,111,116,101,8,65,35,37,116,111,112,9,63, +108,101,116,10,65,35,37,97,112,112,11,67,35,37,100,97,116,117,109,12,66, +100,101,102,105,110,101,13,65,100,101,108,97,121,14,64,99,111,110,100,15,62, +100,111,16,70,108,101,116,45,115,121,110,116,97,120,17,73,108,101,116,114,101, +99,45,115,121,110,116,97,120,18,76,117,110,113,117,111,116,101,45,115,112,108, +105,99,105,110,103,19,64,108,101,116,42,20,70,113,117,97,115,105,113,117,111, +116,101,21,71,114,53,114,115,58,108,101,116,114,101,99,22,73,100,101,102,105, +110,101,45,115,121,110,116,97,120,23,62,105,102,24,64,115,101,116,33,25,64, +99,97,115,101,26,67,117,110,113,117,111,116,101,27,16,24,68,35,37,107,101, +114,110,101,108,28,71,35,37,113,113,45,97,110,100,45,111,114,29,2,28,2, +29,2,28,2,28,2,29,2,28,2,28,68,35,37,100,101,102,105,110,101,30, +73,35,37,109,111,114,101,45,115,99,104,101,109,101,31,66,35,37,99,111,110, +100,32,2,31,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101, +33,2,33,2,28,2,29,2,29,11,2,30,2,28,2,28,2,31,2,28,16, +24,2,5,2,6,2,0,2,7,2,8,2,9,2,10,2,11,2,12,2,13, +2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,66,108,101,116,114, +101,99,34,2,23,2,24,2,25,2,26,2,27,34,58,93,16,5,93,2,22, +87,98,83,159,34,93,80,159,34,8,30,35,89,162,35,35,41,9,223,0,251, +80,158,38,46,20,15,159,38,44,47,21,94,3,1,4,103,57,51,48,35,3, +1,4,103,57,50,57,36,248,22,52,198,248,22,78,198,83,159,34,93,80,159, +34,8,29,35,89,162,35,35,41,9,223,0,251,80,158,38,46,20,15,159,38, +40,47,21,94,3,1,4,103,57,50,52,37,3,1,4,103,57,50,51,38,248, +22,52,198,248,22,78,198,83,159,34,93,80,159,34,8,28,35,89,162,35,35, +41,9,223,0,251,80,158,38,46,20,15,159,38,39,47,21,94,3,1,4,103, +57,50,49,39,3,1,4,103,57,50,48,40,248,22,52,198,248,22,78,198,83, +159,34,93,80,159,34,8,27,35,89,162,35,35,40,9,223,0,250,80,158,37, +46,20,15,159,37,38,47,21,93,3,1,4,103,57,49,57,41,248,22,52,197, +83,159,34,93,80,159,34,8,26,35,89,162,35,35,41,9,223,0,251,80,158, +38,46,20,15,159,38,35,47,21,94,3,1,4,103,57,49,53,42,3,1,4, +103,57,49,52,43,248,22,52,198,248,22,78,198,89,162,34,35,54,9,223,0, +27,28,248,80,158,36,34,195,249,80,158,37,35,248,80,158,38,36,197,27,248, +80,158,39,37,198,28,248,80,158,39,34,193,249,80,158,40,38,27,248,80,158, +42,36,196,28,248,80,158,42,39,193,248,22,9,89,162,34,35,41,9,224,8, +1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40,28,248, +80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41, +37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248, +80,158,43,41,248,80,158,44,37,196,11,11,194,248,80,158,39,42,196,28,248, +22,57,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,42,37,196, +28,248,80,158,42,39,193,248,80,158,42,42,193,11,11,11,28,192,27,248,22, +52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,88,197,249,80,158,41, +44,200,27,250,22,61,198,199,200,250,80,158,45,45,89,162,34,34,45,9,224, +11,3,252,80,158,40,46,20,15,159,40,34,47,21,95,3,1,4,103,57,49, +56,44,3,1,4,103,57,49,55,45,3,1,4,103,57,49,54,46,248,22,80, +198,250,22,2,80,159,43,8,26,35,248,22,80,201,248,22,78,201,248,22,52, +198,21,99,2,22,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112, +95,110,97,109,101,115,47,94,64,118,97,114,49,48,63,46,46,46,49,9,94, +94,2,48,65,105,110,105,116,49,50,2,49,64,98,111,100,121,51,2,49,20, +15,159,45,36,47,27,28,248,80,158,37,34,196,249,80,158,38,35,248,80,158, +39,36,198,27,248,80,158,40,37,199,28,248,80,158,40,34,193,28,27,248,80, +158,41,36,194,28,249,22,252,13,2,6,19,19,103,101,110,101,114,97,116,101, +95,116,101,109,112,95,110,97,109,101,115,52,248,22,210,195,9,11,27,248,80, +158,41,37,194,28,248,80,158,41,34,193,28,248,80,158,41,41,248,80,158,42, +36,194,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80,158,43,38, +27,248,80,158,45,36,196,28,248,80,158,45,39,193,248,22,59,248,80,158,46, +42,194,11,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249,80,158,46, +38,27,248,80,158,48,36,196,28,248,80,158,48,39,193,248,22,9,89,162,34, +35,41,9,224,14,1,27,249,22,2,89,162,34,35,46,9,224,4,5,249,80, +158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199, +27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42,35,248,80, +158,43,36,195,248,80,158,43,41,248,80,158,44,37,196,11,11,194,248,80,158, +39,42,196,28,248,22,57,193,21,94,9,9,248,80,158,37,43,193,11,27,248, +80,158,48,37,196,28,248,80,158,48,39,193,248,80,158,48,42,193,11,11,11, +11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87, +196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,44,202,27,251,22,61, +199,202,200,201,250,80,158,47,45,89,162,34,34,47,9,224,13,3,252,80,158, +40,46,20,15,159,40,37,47,21,95,3,1,4,103,57,50,55,53,3,1,4, +103,57,50,54,54,3,1,4,103,57,50,53,55,249,22,2,80,159,42,8,27, +35,248,22,88,200,250,22,2,80,159,43,8,28,35,248,22,78,201,248,22,87, +201,249,22,65,250,22,2,80,159,45,8,29,35,248,22,88,203,248,22,78,203, +250,80,158,45,46,20,15,159,45,41,47,21,93,3,1,4,103,57,50,50,56, +248,22,52,203,21,95,2,10,94,94,2,48,2,4,2,49,97,2,10,94,94, +65,116,101,109,112,49,57,2,50,2,49,95,2,25,2,48,2,57,2,49,96, +2,10,9,2,51,2,49,20,15,159,47,42,47,27,28,248,80,158,38,34,197, +249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80, +158,41,34,193,28,27,248,80,158,42,36,194,28,249,22,252,13,2,6,19,19, +103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,58,248, +22,210,195,9,11,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80, +158,43,38,27,248,80,158,45,36,196,28,248,80,158,45,34,193,249,80,158,46, +35,248,80,158,47,36,195,27,248,80,158,48,37,196,28,248,80,158,48,39,193, +248,22,59,248,80,158,49,42,194,11,11,27,248,80,158,45,37,196,28,248,80, +158,45,34,193,249,80,158,46,38,27,248,80,158,48,36,196,28,248,80,158,48, +39,193,248,22,59,248,80,158,49,42,194,11,27,248,80,158,48,37,196,28,248, +80,158,48,34,193,249,80,158,49,38,27,248,80,158,51,36,196,28,248,80,158, +51,39,193,248,22,9,89,162,34,35,41,9,224,17,1,27,249,22,2,89,162, 34,35,46,9,224,4,5,249,80,158,37,40,28,248,80,158,38,34,197,249,80, 158,39,35,248,80,158,40,36,199,27,248,80,158,41,37,200,28,248,80,158,41, 34,193,249,80,158,42,35,248,80,158,43,36,195,248,80,158,43,41,248,80,158, 44,37,196,11,11,194,248,80,158,39,42,196,28,248,22,57,193,21,94,9,9, -248,80,158,37,43,193,11,27,248,80,158,42,37,196,28,248,80,158,42,39,193, -248,80,158,42,42,193,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, -27,248,22,87,196,27,248,22,88,197,249,80,158,41,44,200,27,250,22,61,199, -200,198,27,20,15,159,43,34,46,91,159,35,11,90,161,35,34,11,83,160,40, -34,35,11,247,248,22,9,89,162,34,35,42,9,226,11,2,3,1,250,22,31, -89,162,34,34,38,9,225,6,3,7,90,161,35,35,10,247,22,252,185,2,248, -22,252,185,2,89,162,34,35,38,9,224,3,1,248,193,89,162,34,34,38,9, -224,2,3,28,248,22,252,182,2,193,248,22,252,187,2,193,249,80,158,37,45, -21,99,2,21,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112,95, -110,97,109,101,115,35,94,64,118,97,114,49,36,63,46,46,46,37,9,94,94, -2,36,65,105,110,105,116,49,38,2,37,64,98,111,100,121,39,2,37,20,15, -159,37,35,46,89,162,8,36,34,54,9,225,6,5,4,27,250,22,209,20,15, -159,40,36,46,250,22,209,20,15,159,43,37,46,253,22,62,20,15,159,49,38, -46,20,15,159,49,39,46,248,22,78,206,20,15,159,49,40,46,250,22,2,80, -159,52,8,56,35,248,22,78,23,17,248,22,52,23,17,248,22,80,206,20,15, -159,43,43,46,197,89,162,8,36,34,35,9,223,0,192,89,162,34,34,36,9, -223,3,248,22,252,185,2,208,27,28,248,80,158,37,34,196,249,80,158,38,35, -248,80,158,39,36,198,27,248,80,158,40,37,199,28,248,80,158,40,34,193,28, -27,248,80,158,41,36,194,28,249,22,252,13,2,6,19,19,103,101,110,101,114, -97,116,101,95,116,101,109,112,95,110,97,109,101,115,40,248,22,210,195,9,11, -27,248,80,158,41,37,194,28,248,80,158,41,34,193,28,248,80,158,41,41,248, -80,158,42,36,194,27,248,80,158,42,37,194,28,248,80,158,42,34,193,249,80, -158,43,38,27,248,80,158,45,36,196,28,248,80,158,45,39,193,248,22,59,248, -80,158,46,42,194,11,27,248,80,158,45,37,196,28,248,80,158,45,34,193,249, -80,158,46,38,27,248,80,158,48,36,196,28,248,80,158,48,39,193,248,22,9, -89,162,34,35,41,9,224,14,1,27,249,22,2,89,162,34,35,46,9,224,4, -5,249,80,158,37,40,28,248,80,158,38,34,197,249,80,158,39,35,248,80,158, -40,36,199,27,248,80,158,41,37,200,28,248,80,158,41,34,193,249,80,158,42, -35,248,80,158,43,36,195,248,80,158,43,41,248,80,158,44,37,196,11,11,194, -248,80,158,39,42,196,28,248,22,57,193,21,94,9,9,248,80,158,37,43,193, -11,27,248,80,158,48,37,196,28,248,80,158,48,39,193,248,80,158,48,42,193, -11,11,11,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27, -248,22,87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,44,202,27, -251,22,61,199,201,202,200,27,20,15,159,45,44,46,91,159,35,11,90,161,35, -34,11,83,160,40,34,35,11,247,248,22,9,89,162,34,35,42,9,226,13,2, -3,1,250,22,31,89,162,34,34,38,9,225,6,3,7,90,161,35,35,10,247, -22,252,185,2,248,22,252,185,2,89,162,34,35,38,9,224,3,1,248,193,89, -162,34,34,38,9,224,2,3,28,248,22,252,182,2,193,248,22,252,187,2,193, -249,80,158,37,45,21,95,2,17,94,94,2,36,2,4,2,37,97,2,17,94, -94,65,116,101,109,112,49,41,2,38,2,37,95,2,25,2,36,2,41,2,37, -96,2,17,9,2,39,2,37,20,15,159,37,45,46,89,162,8,36,34,8,29, -9,225,6,5,4,27,250,22,209,20,15,159,40,46,46,250,22,209,20,15,159, -43,47,46,250,22,60,20,15,159,46,48,46,249,22,2,80,159,48,8,57,35, -248,22,78,205,250,22,209,20,15,159,49,52,46,250,22,62,20,15,159,52,53, -46,250,22,2,80,159,55,8,58,35,248,22,87,23,20,248,22,88,23,20,249, -22,65,250,22,2,80,159,57,8,59,35,248,22,78,23,22,248,22,87,23,22, -248,22,60,250,22,209,20,15,159,58,59,46,250,22,62,20,15,159,8,27,8, -26,46,20,15,159,8,27,8,27,46,248,22,52,23,26,20,15,159,58,8,28, -46,20,15,159,49,8,29,46,20,15,159,43,8,30,46,197,89,162,8,36,34, -35,9,223,0,192,89,162,34,34,36,9,223,3,248,22,252,185,2,208,27,28, -248,80,158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158, -41,37,200,28,248,80,158,41,34,193,28,27,248,80,158,42,36,194,28,249,22, -252,13,2,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112,95,110, -97,109,101,115,42,248,22,210,195,9,11,27,248,80,158,42,37,194,28,248,80, -158,42,34,193,249,80,158,43,38,27,248,80,158,45,36,196,28,248,80,158,45, -34,193,249,80,158,46,35,248,80,158,47,36,195,27,248,80,158,48,37,196,28, -248,80,158,48,39,193,248,22,59,248,80,158,49,42,194,11,11,27,248,80,158, -45,37,196,28,248,80,158,45,34,193,249,80,158,46,38,27,248,80,158,48,36, -196,28,248,80,158,48,39,193,248,22,59,248,80,158,49,42,194,11,27,248,80, -158,48,37,196,28,248,80,158,48,34,193,249,80,158,49,38,27,248,80,158,51, -36,196,28,248,80,158,51,39,193,248,22,9,89,162,34,35,41,9,224,17,1, -27,249,22,2,89,162,34,35,46,9,224,4,5,249,80,158,37,40,28,248,80, -158,38,34,197,249,80,158,39,35,248,80,158,40,36,199,27,248,80,158,41,37, -200,28,248,80,158,41,34,193,249,80,158,42,35,248,80,158,43,36,195,248,80, -158,43,41,248,80,158,44,37,196,11,11,194,248,80,158,39,42,196,28,248,22, -57,193,21,94,9,9,248,80,158,37,43,193,11,27,248,80,158,51,37,196,28, -248,80,158,51,39,193,248,80,158,51,42,193,11,11,11,11,11,11,11,28,192, -27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27, -249,22,70,199,38,27,249,22,70,200,39,27,249,22,69,201,40,249,80,158,46, -44,205,27,252,22,61,201,202,204,203,200,27,20,15,159,48,8,31,46,91,159, -35,11,90,161,35,34,11,83,160,40,34,35,11,247,248,22,9,89,162,34,35, -42,9,226,16,2,3,1,250,22,31,89,162,34,34,38,9,225,6,3,7,90, -161,35,35,10,247,22,252,185,2,248,22,252,185,2,89,162,34,35,38,9,224, -3,1,248,193,89,162,34,34,38,9,224,2,3,28,248,22,252,182,2,193,248, -22,252,187,2,193,249,80,158,37,45,21,99,2,21,6,19,19,103,101,110,101, -114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,43,94,61,121,44,2, -37,95,67,110,101,119,116,101,109,112,45,64,116,101,109,112,46,2,37,94,94, -2,36,2,38,2,37,2,39,2,37,20,15,159,37,8,32,46,89,162,8,36, -34,56,9,225,6,5,4,27,250,22,209,20,15,159,40,8,33,46,250,22,209, -20,15,159,43,8,34,46,253,22,62,20,15,159,49,8,35,46,20,15,159,49, -8,36,46,248,22,87,206,250,22,209,20,15,159,52,8,37,46,249,22,56,20, -15,159,54,8,38,46,248,22,90,23,19,20,15,159,52,8,39,46,250,22,2, -80,159,52,8,60,35,248,22,78,23,17,248,22,52,23,17,248,22,89,206,20, -15,159,43,8,42,46,197,89,162,8,36,34,35,9,223,0,192,89,162,34,34, -36,9,223,3,248,22,252,185,2,208,250,22,252,39,2,11,6,10,10,98,97, -100,32,115,121,110,116,97,120,47,199,34,20,98,159,39,16,12,30,48,65,35, -37,115,116,120,49,69,115,116,120,45,112,97,105,114,63,50,11,30,51,2,49, -67,99,111,110,115,47,35,102,52,1,30,53,2,49,67,115,116,120,45,99,97, -114,54,5,30,55,2,49,67,115,116,120,45,99,100,114,56,6,30,57,2,49, -69,97,112,112,101,110,100,47,35,102,58,0,30,59,2,49,69,115,116,120,45, -108,105,115,116,63,60,8,30,61,2,49,73,115,116,120,45,99,104,101,99,107, -47,101,115,99,62,7,30,63,2,49,71,115,116,120,45,110,117,108,108,47,35, -102,64,9,30,65,2,49,69,115,116,120,45,62,108,105,115,116,66,4,30,67, -2,49,70,115,116,120,45,114,111,116,97,116,101,68,12,30,69,68,35,37,115, -116,120,108,111,99,70,68,114,101,108,111,99,97,116,101,71,1,30,72,69,35, -37,115,116,120,99,97,115,101,73,1,20,101,108,108,105,112,115,105,115,45,99, -111,117,110,116,45,101,114,114,111,114,74,0,16,43,18,16,2,95,66,115,114, -99,116,97,103,75,36,93,8,252,1,15,95,9,8,252,1,15,2,73,18,16, -2,99,2,37,41,93,8,252,1,15,16,6,40,11,61,114,76,63,115,114,99, -77,3,1,7,101,110,118,52,57,49,49,78,2,78,16,4,39,11,64,101,120, -110,104,79,3,1,7,101,110,118,52,57,49,50,80,16,4,38,11,63,101,115, -99,81,3,1,7,101,110,118,52,57,49,51,82,16,4,37,11,63,101,120,110, -83,3,1,7,101,110,118,52,57,49,53,84,95,9,8,252,1,15,2,73,18, -99,64,100,101,115,116,85,47,98,46,10,34,11,93,159,68,109,122,115,99,104, -101,109,101,86,9,11,16,4,2,4,2,2,2,21,2,2,98,45,10,35,11, -93,159,2,86,9,11,16,0,96,44,8,254,1,11,16,0,16,8,43,11,3, -1,4,103,53,53,57,87,3,1,4,103,53,54,48,88,3,1,4,103,53,54, -49,89,3,1,7,101,110,118,52,57,48,48,90,2,90,2,90,16,8,42,11, -2,36,2,38,2,39,3,1,7,101,110,118,52,57,48,49,91,2,91,2,91, -18,158,63,99,116,120,92,47,18,158,2,21,47,18,158,2,35,47,18,158,9, -47,18,158,2,92,47,18,158,2,92,47,18,158,2,92,47,18,16,2,95,2, -75,48,93,8,252,10,15,95,9,8,252,10,15,2,73,18,16,2,99,2,37, -53,93,8,252,10,15,16,6,52,11,2,76,2,77,3,1,7,101,110,118,52, -57,53,48,93,2,93,16,4,51,11,2,79,3,1,7,101,110,118,52,57,53, -49,94,16,4,50,11,2,81,3,1,7,101,110,118,52,57,53,50,95,16,4, -49,11,2,83,3,1,7,101,110,118,52,57,53,52,96,95,9,8,252,10,15, -2,73,18,99,2,85,56,46,45,44,16,10,55,11,3,1,4,103,53,53,52, -97,3,1,4,103,53,53,53,98,3,1,4,103,53,53,54,99,3,1,4,103, -53,53,55,100,3,1,7,101,110,118,52,57,51,55,101,2,101,2,101,2,101, -16,10,54,11,2,41,2,36,2,38,2,39,3,1,7,101,110,118,52,57,51, -56,102,2,102,2,102,2,102,18,158,2,92,56,18,158,2,17,56,18,158,2, -92,56,18,16,2,106,93,16,2,158,2,4,56,9,8,33,98,8,32,10,34, -11,94,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,103,9,11, -159,2,49,9,11,16,6,73,115,121,110,116,97,120,45,99,97,115,101,42,42, -104,29,105,11,11,66,115,121,110,116,97,120,106,2,105,2,74,2,105,98,8, -31,10,35,11,95,159,64,35,37,115,99,107,9,11,159,2,103,9,11,159,2, -49,9,11,16,0,96,8,30,8,254,1,11,16,0,16,4,8,29,11,61,120, -108,3,1,6,101,110,118,52,50,49,109,16,4,8,28,11,68,104,101,114,101, -45,115,116,120,110,3,1,6,101,110,118,52,50,51,111,16,4,8,27,11,2, -110,2,111,13,16,4,35,2,105,2,73,11,93,8,252,10,15,16,6,8,26, -11,2,76,2,77,2,93,2,93,16,4,59,11,2,79,2,94,16,4,58,11, -2,81,2,95,16,4,57,11,64,118,97,108,115,112,3,1,7,101,110,118,52, -57,53,56,113,95,9,8,252,10,15,2,73,18,158,2,92,56,18,158,2,92, -56,18,158,2,17,56,18,158,2,92,56,18,158,2,92,56,18,158,2,92,56, -18,158,2,25,56,18,158,2,92,56,18,158,2,92,56,18,158,2,17,56,18, -158,9,56,18,158,2,92,56,18,158,2,92,56,18,158,2,92,56,18,16,2, -95,2,75,8,34,93,8,252,20,15,95,9,8,252,20,15,2,73,18,16,2, -99,2,37,8,39,93,8,252,20,15,16,6,8,38,11,2,76,2,77,3,1, -7,101,110,118,52,57,57,57,114,2,114,16,4,8,37,11,2,79,3,1,7, -101,110,118,53,48,48,48,115,16,4,8,36,11,2,81,3,1,7,101,110,118, -53,48,48,49,116,16,4,8,35,11,2,83,3,1,7,101,110,118,53,48,48, -51,117,95,9,8,252,20,15,2,73,18,99,2,85,8,42,46,45,44,16,14, -8,41,11,3,1,4,103,53,52,55,118,3,1,4,103,53,52,56,119,3,1, -4,103,53,52,57,120,3,1,4,103,53,53,48,121,3,1,4,103,53,53,49, -122,3,1,4,103,53,53,50,123,3,1,7,101,110,118,52,57,56,50,124,2, -124,2,124,2,124,2,124,2,124,16,14,8,40,11,2,108,2,44,2,46,2, -36,2,38,2,39,3,1,7,101,110,118,52,57,56,51,125,2,125,2,125,2, -125,2,125,2,125,18,158,2,92,8,42,18,158,2,21,8,42,18,158,2,43, -8,42,18,158,2,92,8,42,18,158,2,45,8,42,18,158,2,92,8,42,18, -158,2,92,8,42,18,158,2,92,8,42,18,158,2,92,8,42,11,93,83,159, -34,93,80,159,34,34,35,91,159,35,10,90,161,35,34,10,207,207,93,2,86, -93,2,86,0}; - EVAL_ONE_SIZED_STR((char *)expr, 4035); +248,80,158,37,43,193,11,27,248,80,158,51,37,196,28,248,80,158,51,39,193, +248,80,158,51,42,193,11,11,11,11,11,11,11,28,192,27,248,22,52,194,27, +248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,249,22,70,199,38,27, +249,22,70,200,39,27,249,22,69,201,40,249,80,158,46,44,205,27,252,22,61, +200,203,204,201,202,250,80,158,50,45,89,162,34,34,46,9,224,16,3,253,80, +158,41,46,20,15,159,41,43,47,21,96,3,1,4,103,57,51,51,59,3,1, +4,103,57,50,56,60,3,1,4,103,57,51,50,61,3,1,4,103,57,51,49, +62,248,22,87,199,248,22,78,199,250,22,2,80,159,44,8,30,35,248,22,89, +202,248,22,90,202,248,22,52,199,21,99,2,22,6,19,19,103,101,110,101,114, +97,116,101,95,116,101,109,112,95,110,97,109,101,115,63,94,61,121,64,2,49, +95,67,110,101,119,116,101,109,112,65,64,116,101,109,112,66,2,49,94,94,2, +48,2,50,2,49,2,51,2,49,20,15,159,50,45,47,250,22,252,39,2,11, +6,10,10,98,97,100,32,115,121,110,116,97,120,67,199,34,20,98,159,39,16, +13,30,68,65,35,37,115,116,120,69,69,115,116,120,45,112,97,105,114,63,70, +11,30,71,2,69,67,99,111,110,115,47,35,102,72,1,30,73,2,69,67,115, +116,120,45,99,97,114,74,5,30,75,2,69,67,115,116,120,45,99,100,114,76, +6,30,77,2,69,69,97,112,112,101,110,100,47,35,102,78,0,30,79,2,69, +69,115,116,120,45,108,105,115,116,63,80,8,30,81,2,69,73,115,116,120,45, +99,104,101,99,107,47,101,115,99,82,7,30,83,2,69,71,115,116,120,45,110, +117,108,108,47,35,102,84,9,30,85,2,69,69,115,116,120,45,62,108,105,115, +116,86,4,30,87,2,69,70,115,116,120,45,114,111,116,97,116,101,88,12,30, +89,68,35,37,115,116,120,108,111,99,90,68,114,101,108,111,99,97,116,101,91, +1,30,92,69,35,37,115,116,120,99,97,115,101,93,1,20,99,97,116,99,104, +45,101,108,108,105,112,115,105,115,45,101,114,114,111,114,94,1,30,95,2,93, +1,24,97,112,112,108,121,45,112,97,116,116,101,114,110,45,115,117,98,115,116, +105,116,117,116,101,96,0,16,12,18,158,164,39,99,2,22,41,98,39,10,34, +11,93,159,68,109,122,115,99,104,101,109,101,97,9,11,16,4,2,4,2,2, +2,22,2,2,98,38,10,35,11,93,159,2,97,9,11,16,0,96,37,8,254, +1,11,16,0,16,8,36,11,3,1,4,103,57,49,49,98,3,1,4,103,57, +49,50,99,3,1,4,103,57,49,51,100,3,1,7,101,110,118,52,55,51,56, +101,2,101,2,101,16,8,35,11,2,48,2,50,2,51,3,1,7,101,110,118, +52,55,51,57,102,2,102,2,102,158,2,47,41,158,2,44,41,158,9,41,158, +2,45,41,2,46,41,41,18,158,95,10,2,42,2,43,41,18,16,2,96,2, +49,43,93,8,252,163,15,16,4,42,11,61,114,103,3,1,7,101,110,118,52, +55,52,57,104,95,9,8,252,163,15,2,93,18,158,95,99,2,10,46,39,38, +37,16,10,45,11,3,1,4,103,57,48,54,105,3,1,4,103,57,48,55,106, +3,1,4,103,57,48,56,107,3,1,4,103,57,48,57,108,3,1,7,101,110, +118,52,55,54,55,109,2,109,2,109,2,109,16,10,44,11,2,57,2,48,2, +50,2,51,3,1,7,101,110,118,52,55,54,56,110,2,110,2,110,2,110,158, +2,53,46,158,160,10,2,10,2,54,2,55,46,46,18,158,95,10,2,41,2, +4,46,18,158,95,10,2,39,2,40,46,18,158,96,10,2,25,2,37,2,38, +46,18,16,2,103,93,158,160,10,2,10,9,2,56,46,54,98,53,10,34,11, +95,159,68,35,37,112,97,114,97,109,122,111,9,11,159,74,35,37,115,109,97, +108,108,45,115,99,104,101,109,101,112,9,11,159,2,69,9,11,16,14,66,115, +121,110,116,97,120,113,29,114,11,11,1,26,100,97,116,117,109,45,62,115,121, +110,116,97,120,45,111,98,106,101,99,116,47,115,104,97,112,101,115,2,114,2, +94,2,114,73,115,121,110,116,97,120,45,99,97,115,101,42,42,116,2,114,78, +112,97,116,116,101,114,110,45,115,117,98,115,116,105,116,117,116,101,117,2,114, +2,96,2,114,75,115,117,98,115,116,105,116,117,116,101,45,115,116,111,112,118, +2,114,98,52,10,35,11,95,159,64,35,37,115,99,119,9,11,159,2,112,9, +11,159,2,69,9,11,16,0,96,51,8,254,1,11,16,0,16,4,50,11,61, +120,120,3,1,6,101,110,118,52,53,52,121,16,4,49,11,68,104,101,114,101, +45,115,116,120,122,3,1,6,101,110,118,52,53,54,123,16,4,48,11,2,122, +2,123,13,16,4,35,2,114,2,93,11,93,8,252,171,15,16,4,47,11,2, +103,3,1,7,101,110,118,52,55,56,48,124,95,9,8,252,171,15,2,93,18, +16,2,96,2,49,56,93,8,252,171,15,16,4,55,11,2,103,2,124,95,9, +8,252,171,15,2,93,18,158,164,39,99,2,22,59,39,38,37,16,14,58,11, +3,1,4,103,56,57,57,125,3,1,4,103,57,48,48,126,3,1,4,103,57, +48,49,127,3,1,4,103,57,48,50,128,3,1,4,103,57,48,51,129,3,1, +4,103,57,48,52,130,3,1,7,101,110,118,52,56,48,52,131,2,131,2,131, +2,131,2,131,2,131,16,14,57,11,2,120,2,64,2,66,2,48,2,50,2, +51,3,1,7,101,110,118,52,56,48,53,132,2,132,2,132,2,132,2,132,2, +132,158,2,63,59,158,2,59,59,158,159,10,2,65,2,60,59,158,2,61,59, +2,62,59,59,18,158,95,10,2,35,2,36,59,18,16,2,96,2,49,8,27, +93,8,252,183,15,16,4,8,26,11,2,103,3,1,7,101,110,118,52,56,50, +49,133,95,9,8,252,183,15,2,93,11,93,83,159,34,93,80,159,34,34,35, +91,159,35,10,90,161,35,34,10,207,207,93,2,97,93,2,97,0}; + EVAL_ONE_SIZED_STR((char *)expr, 3356); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,5,94,159,34,20,98,159,34,16,1,20,24,65, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,5,89,159,34,20,98,159,34,16,1,20,24,65, 98,101,103,105,110,0,16,0,83,160,42,80,158,34,34,34,18,158,94,96,67, -114,101,113,117,105,114,101,1,36,10,11,158,95,158,64,111,110,108,121,2,36, -158,68,109,122,115,99,104,101,109,101,3,36,158,1,22,110,97,109,101,115,112, -97,99,101,45,114,101,113,117,105,114,101,47,99,111,112,121,4,36,36,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 104); +114,101,113,117,105,114,101,1,36,10,11,158,96,10,64,111,110,108,121,2,68, +109,122,115,99,104,101,109,101,3,1,22,110,97,109,101,115,112,97,99,101,45, +114,101,113,117,105,114,101,47,99,111,112,121,4,36,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 99); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,3,74,159,35,20,98,159,34,16,1,20,24,65, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,3,74,159,35,20,98,159,34,16,1,20,24,65, 98,101,103,105,110,0,16,0,87,94,248,22,241,68,109,122,115,99,104,101,109, 101,1,83,160,42,80,158,34,34,35,18,158,94,96,78,114,101,113,117,105,114, 101,45,102,111,114,45,115,121,110,116,97,120,2,36,10,11,158,2,1,36,36, @@ -4707,7 +4330,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 84); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,53,2,67,159,38,20,98,159,34,16,0,16,0,248, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,50,46,54,2,67,159,38,20,98,159,34,16,0,16,0,248, 22,233,248,249,22,235,66,35,37,109,105,115,99,0,1,34,109,97,107,101,45, 115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45, 114,101,115,111,108,118,101,114,1,247,22,252,212,2,0}; diff --git a/src/mzscheme/src/hash.c b/src/mzscheme/src/hash.c index 2993724093..595fac4f0e 100644 --- a/src/mzscheme/src/hash.c +++ b/src/mzscheme/src/hash.c @@ -33,10 +33,7 @@ int scheme_hash_iteration_count; #ifdef MZ_PRECISE_GC static short keygen; -XFORM_NONGCING static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif +XFORM_NONGCING static MZ_INLINE long PTR_TO_LONG(Scheme_Object *o) { short v; @@ -257,32 +254,115 @@ static Scheme_Object *do_hash(Scheme_Hash_Table *table, Scheme_Object *key, int return val; } +static Scheme_Object *do_hash_set(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val) +{ + Scheme_Object *tkey, **keys; + hash_v_t h, h2, useme = 0; + unsigned long mask; + unsigned long lkey; + int set = 2; + + mask = table->size - 1; + + lkey = (unsigned long)PTR_TO_LONG((Scheme_Object *)key); + h = (lkey >> 2) & mask; + h2 = (lkey >> 3) & mask; + + h2 |= 1; + + keys = table->keys; + + scheme_hash_request_count++; + while ((tkey = keys[h])) { + if (SAME_PTR(tkey, key)) { + table->vals[h] = val; + if (!val) { + keys[h] = GONE; + --table->count; + } + return val; + } else if (SAME_PTR(tkey, GONE)) { + if (set > 1) { + useme = h; + set = 1; + } + } + scheme_hash_iteration_count++; + h = (h + h2) & mask; + } + + if (set == 1) + h = useme; + else if (table->mcount * FILL_FACTOR >= table->size) { + /* Use slow path to grow table: */ + return do_hash(table, key, 2, val); + } else { + table->mcount++; + } + + table->count++; + table->keys[h] = key; + table->vals[h] = val; + + return val; +} + +static Scheme_Object *do_hash_get(Scheme_Hash_Table *table, Scheme_Object *key) +{ + Scheme_Object *tkey, **keys; + hash_v_t h, h2; + unsigned long mask; + unsigned long lkey; + + mask = table->size - 1; + + lkey = (unsigned long)PTR_TO_LONG((Scheme_Object *)key); + h = (lkey >> 2) & mask; + h2 = (lkey >> 3) & mask; + + h2 |= 1; + + keys = table->keys; + + scheme_hash_request_count++; + while ((tkey = keys[h])) { + if (SAME_PTR(tkey, key)) { + return table->vals[h]; + } + scheme_hash_iteration_count++; + h = (h + h2) & mask; + } + + return NULL; +} + void scheme_hash_set(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val) { if (!table->vals) { Scheme_Object **ba; - + table->size = 8; - + ba = MALLOC_N(Scheme_Object *, table->size); table->vals = ba; ba = MALLOC_N(Scheme_Object *, table->size); table->keys = ba; } - do_hash(table, key, 2, val); + if (table->make_hash_indices) + do_hash(table, key, 2, val); + else + do_hash_set(table, key, val); } Scheme_Object *scheme_hash_get(Scheme_Hash_Table *table, Scheme_Object *key) { - Scheme_Object *val; - if (!table->vals) - val = NULL; + return NULL; + else if (table->make_hash_indices) + return do_hash(table, key, 0, NULL); else - val = do_hash(table, key, 0, NULL); - - return val; + return do_hash_get(table, key); } int scheme_hash_table_equal(Scheme_Hash_Table *t1, Scheme_Hash_Table *t2) diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index ecfe14f7ae..b8b50f18ec 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -491,11 +491,7 @@ static void emit_indentation(mz_jit_state *jitter) /* run time */ /*========================================================================*/ -static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif - Scheme_Object *do_make_native_closure(Scheme_Native_Closure_Data *code, int size) +static MZ_INLINE Scheme_Object *do_make_native_closure(Scheme_Native_Closure_Data *code, int size) { Scheme_Native_Closure *o; diff --git a/src/mzscheme/src/list.c b/src/mzscheme/src/list.c index 5c00386131..ed1d7371d9 100644 --- a/src/mzscheme/src/list.c +++ b/src/mzscheme/src/list.c @@ -1537,19 +1537,22 @@ int scheme_is_hash_table_equal(Scheme_Object *o) static Scheme_Object *hash_table_put(int argc, Scheme_Object *argv[]) { - if (!(SCHEME_HASHTP(argv[0]) && SCHEME_MUTABLEP(argv[0])) && !SCHEME_BUCKTP(argv[0])) - scheme_wrong_type("hash-table-put!", "mutable hash-table", 0, argc, argv); + Scheme_Object *v = argv[0]; - if (SCHEME_BUCKTP(argv[0])) { - Scheme_Bucket_Table *t = (Scheme_Bucket_Table *)argv[0]; + if (SCHEME_BUCKTP(v)) { + Scheme_Bucket_Table *t = (Scheme_Bucket_Table *)v; if (t->mutex) scheme_wait_sema(t->mutex,0); scheme_add_to_table(t, (char *)argv[1], (void *)argv[2], 0); if (t->mutex) scheme_post_sema(t->mutex); - } else{ - Scheme_Hash_Table *t = (Scheme_Hash_Table *)argv[0]; - if (t->mutex) scheme_wait_sema(t->mutex, 0); + } else if (!SCHEME_HASHTP(v) || !SCHEME_MUTABLEP(v)) { + scheme_wrong_type("hash-table-put!", "mutable hash-table", 0, argc, argv); + } else if (((Scheme_Hash_Table *)v)->mutex) { + Scheme_Hash_Table *t = (Scheme_Hash_Table *)v; + scheme_wait_sema(t->mutex, 0); scheme_hash_set(t, argv[1], argv[2]); - if (t->mutex) scheme_post_sema(t->mutex); + scheme_post_sema(t->mutex); + } else { + scheme_hash_set((Scheme_Hash_Table *)v, argv[1], argv[2]); } return scheme_void; @@ -1559,19 +1562,23 @@ static Scheme_Object *hash_table_get(int argc, Scheme_Object *argv[]) { Scheme_Object *v; - if (!(SCHEME_HASHTP(argv[0]) || SCHEME_BUCKTP(argv[0]))) - scheme_wrong_type("hash-table-get", "hash-table", 0, argc, argv); + v = argv[0]; - if (SCHEME_BUCKTP(argv[0])){ - Scheme_Bucket_Table *t = (Scheme_Bucket_Table *)argv[0]; + if (SCHEME_BUCKTP(v)) { + Scheme_Bucket_Table *t = (Scheme_Bucket_Table *)v; if (t->mutex) scheme_wait_sema(t->mutex, 0); v = (Scheme_Object *)scheme_lookup_in_table(t, (char *)argv[1]); if (t->mutex) scheme_post_sema(t->mutex); - } else { - Scheme_Hash_Table *t = (Scheme_Hash_Table *)argv[0]; - if (t->mutex) scheme_wait_sema(t->mutex, 0); + } else if (!SCHEME_HASHTP(v)) { + scheme_wrong_type("hash-table-get", "hash-table", 0, argc, argv); + return NULL; + } else if (((Scheme_Hash_Table *)v)->mutex) { + Scheme_Hash_Table *t = (Scheme_Hash_Table *)v; + scheme_wait_sema(t->mutex, 0); v = scheme_hash_get(t, argv[1]); - if (t->mutex) scheme_post_sema(t->mutex); + scheme_post_sema(t->mutex); + } else { + v = scheme_hash_get((Scheme_Hash_Table *)v, argv[1]); } if (v) diff --git a/src/mzscheme/src/mk-uchar.ss b/src/mzscheme/src/mk-uchar.ss index 06dbc9e4f1..66c4dc030b 100644 --- a/src/mzscheme/src/mk-uchar.ss +++ b/src/mzscheme/src/mk-uchar.ss @@ -54,13 +54,22 @@ (indirect cases (list up down title fold combining) 256)) (define general-categories (make-hash-table 'equal)) -(hash-table-put! general-categories "Cn" 0) (define (combine-cat cat) (hash-table-get general-categories cat (lambda () (let ([v (hash-table-count general-categories)]) (hash-table-put! general-categories cat v) v)))) +;; So they're in order: +(with-input-from-file "schgencat.h" + (lambda () + (let loop () + (let ([l (read-line)]) + (unless (eof-object? l) + (let ([m (regexp-match #rx"mzu_([A-Z][a-z])" l)]) + (when m + (combine-cat (cadr m)))) + (loop)))))) (define hexes (map char->integer (string->list "0123456789abcdefABCDEF"))) diff --git a/src/mzscheme/src/mkmark.ss b/src/mzscheme/src/mkmark.ss index dbc65bd24b..7fe6d00c2d 100644 --- a/src/mzscheme/src/mkmark.ss +++ b/src/mzscheme/src/mkmark.ss @@ -2,7 +2,7 @@ (define re:start "^START ([a-z]+);") (define re:end "^END ([a-z]+);") -(define re:form "^([a-zA-Z0-9_]+) {") +(define re:form "^([a-zA-Z0-9_]+) [{]") (define re:mark "^ mark:") (define re:size "^ size:") diff --git a/src/mzscheme/src/mzmark.c b/src/mzscheme/src/mzmark.c index 5be7fe23f7..d6c8b3f334 100644 --- a/src/mzscheme/src/mzmark.c +++ b/src/mzscheme/src/mzmark.c @@ -4231,6 +4231,7 @@ static int mark_regexp_SIZE(void *p) { static int mark_regexp_MARK(void *p) { regexp *r = (regexp *)p; gcMARK(r->source); + gcMARK(r->regstart); return gcBYTES_TO_WORDS((sizeof(regexp) + r->regsize)); } @@ -4238,6 +4239,7 @@ static int mark_regexp_MARK(void *p) { static int mark_regexp_FIXUP(void *p) { regexp *r = (regexp *)p; gcFIXUP(r->source); + gcFIXUP(r->regstart); return gcBYTES_TO_WORDS((sizeof(regexp) + r->regsize)); } @@ -4258,7 +4260,9 @@ static int mark_regwork_MARK(void *p) { gcMARK(r->port); gcMARK(r->unless_evt); gcMARK(r->startp); + gcMARK(r->maybep); gcMARK(r->endp); + gcMARK(r->counters); gcMARK(r->peekskip); return gcBYTES_TO_WORDS(sizeof(Regwork)); @@ -4271,7 +4275,9 @@ static int mark_regwork_FIXUP(void *p) { gcFIXUP(r->port); gcFIXUP(r->unless_evt); gcFIXUP(r->startp); + gcFIXUP(r->maybep); gcFIXUP(r->endp); + gcFIXUP(r->counters); gcFIXUP(r->peekskip); return gcBYTES_TO_WORDS(sizeof(Regwork)); diff --git a/src/mzscheme/src/mzmarksrc.c b/src/mzscheme/src/mzmarksrc.c index cb91f01806..bb81b858fc 100644 --- a/src/mzscheme/src/mzmarksrc.c +++ b/src/mzscheme/src/mzmarksrc.c @@ -1708,6 +1708,7 @@ mark_regexp { regexp *r = (regexp *)p; mark: gcMARK(r->source); + gcMARK(r->regstart); size: gcBYTES_TO_WORDS((sizeof(regexp) + r->regsize)); } @@ -1720,7 +1721,9 @@ mark_regwork { gcMARK(r->port); gcMARK(r->unless_evt); gcMARK(r->startp); + gcMARK(r->maybep); gcMARK(r->endp); + gcMARK(r->counters); gcMARK(r->peekskip); size: gcBYTES_TO_WORDS(sizeof(Regwork)); diff --git a/src/mzscheme/src/number.c b/src/mzscheme/src/number.c index 7ccd557473..33929fbf95 100644 --- a/src/mzscheme/src/number.c +++ b/src/mzscheme/src/number.c @@ -612,11 +612,7 @@ double scheme_real_to_double(Scheme_Object *r) return 0.0; } -static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif -int minus_zero_p(double d) +static MZ_INLINE int minus_zero_p(double d) { return (1 / d) < 0; } diff --git a/src/mzscheme/src/numcomp.c b/src/mzscheme/src/numcomp.c index d3df542490..c7653643f1 100644 --- a/src/mzscheme/src/numcomp.c +++ b/src/mzscheme/src/numcomp.c @@ -82,21 +82,13 @@ void scheme_init_numcomp(Scheme_Env *env) } /* Prototype needed for 3m conversion: */ -static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif -Scheme_Object *force_rat(Scheme_Object *n, Small_Rational *sr); +static MZ_INLINE Scheme_Object *force_rat(Scheme_Object *n, Small_Rational *sr); #ifdef MZ_XFORM START_XFORM_SKIP; #endif -static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif -Scheme_Object *force_rat(Scheme_Object *n, Small_Rational *sr) +static MZ_INLINE Scheme_Object *force_rat(Scheme_Object *n, Small_Rational *sr) { Scheme_Type t = SCHEME_TYPE(n); if (t == scheme_rational_type) diff --git a/src/mzscheme/src/port.c b/src/mzscheme/src/port.c index da5dd9dff6..a85ec89ade 100644 --- a/src/mzscheme/src/port.c +++ b/src/mzscheme/src/port.c @@ -2247,10 +2247,7 @@ long scheme_get_char_string(const char *who, } } -static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif +static MZ_INLINE long get_one_byte(const char *who, Scheme_Object *port, char *buffer, long offset, diff --git a/src/mzscheme/src/print.c b/src/mzscheme/src/print.c index b72c957eb2..f52d883f78 100644 --- a/src/mzscheme/src/print.c +++ b/src/mzscheme/src/print.c @@ -1827,7 +1827,10 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, Scheme_Object *src; src = scheme_regexp_source(obj); if (src) { - print_utf8_string(pp, "#rx", 0, 3); + if (scheme_is_pregexp(obj)) + print_utf8_string(pp, "#px", 0, 3); + else + print_utf8_string(pp, "#rx", 0, 3); print(src, 1, 0, ht,symtab, rnht, pp); } else if (compact || !pp->print_unreadable) cannot_print(pp, notdisplay, obj, ht, compact); diff --git a/src/mzscheme/src/read.c b/src/mzscheme/src/read.c index 10cb2a9017..36171c71a1 100644 --- a/src/mzscheme/src/read.c +++ b/src/mzscheme/src/read.c @@ -87,11 +87,7 @@ static Scheme_Object *print_honu(int, Scheme_Object *[]); #define RETURN_FOR_DELIM 0x4 #define RETURN_FOR_COMMENT 0x8 -static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif -long SPAN(Scheme_Object *port, long pos) { +static MZ_INLINE long SPAN(Scheme_Object *port, long pos) { long cpos; scheme_tell_all(port, NULL, NULL, &cpos); return cpos - pos + 1; @@ -1254,7 +1250,9 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * } break; case 'r': + case 'p': if (!params->honu_mode) { + int orig_ch = ch; int cnt = 0, is_byte = 0; char *expect; @@ -1280,11 +1278,13 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * if (stxsrc) str = SCHEME_STX_VAL(str); - str = scheme_make_regexp(str, is_byte, &is_err); + str = scheme_make_regexp(str, is_byte, (orig_ch == 'p'), &is_err); if (is_err) { scheme_read_err(port, stxsrc, line, col, pos, 2, 0, indentation, - "read: bad regexp string: %s", (char *)str); + "read: bad %sregexp string: %s", + (orig_ch == 'r') ? "" : "p", + (char *)str); return NULL; } @@ -1293,7 +1293,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * return str; } - } else if (ch == 'e') { + } else if ((orig_ch == 'r') && (ch == 'e')) { expect = "eader"; cnt++; while (expect[cnt]) { @@ -1336,8 +1336,8 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), ch, indentation, - "read: bad syntax `#r%u'", - a, cnt); + "read: bad syntax `#%c%u'", + orig_ch, a, cnt); return NULL; } } diff --git a/src/mzscheme/src/regexp.c b/src/mzscheme/src/regexp.c index ee63968539..9bc884fdae 100644 --- a/src/mzscheme/src/regexp.c +++ b/src/mzscheme/src/regexp.c @@ -29,6 +29,10 @@ * Changed to index-based instead of pointer-based (better for GC) * Added non-greedy operators *?, +?, and ?? * Added (?:...) grouping without reporting the group match + * Added (?=...), (?!...), (?<=...), and (? #include -typedef long rxpos; #ifdef SIXTY_FOUR_BIT_INTEGERS # define BIGGEST_RXPOS 0x7FFFFFFFFFFFFFFF #else # define BIGGEST_RXPOS 0x7FFFFFFF #endif -/* The INDIRECT_TO_PROGRAM mode can be useful for debugging - in 3m to ensure that a regexp "program" is not misinterpreted - as a pointer by the conservative collector. (This was a problem - once, anyway.) */ -/* #define INDIRECT_TO_PROGRAM */ +# define rOP(o) OP(o, regstr) +# define rNEXT(o) NEXT(o, regstr) +# define rOPLEN(o) OPLEN(o, regstr) +# define rOPRNGS(o) OPRNGS(o, regstr) +# define NEXT_OP(scan) (scan + rNEXT(scan)) -typedef struct regexp { - Scheme_Type type; - MZ_HASH_KEY_EX - Scheme_Object *source; - long nsubexp; - long regsize; - char is_utf8; - char regstart; /* Internal use only. */ - char reganch; /* Internal use only. */ - long regmust; /* Internal use only: => pointer relative to self */ - long regmlen; /* Internal use only. */ -#ifdef INDIRECT_TO_PROGRAM - char *program; -#else - char program[1]; /* Unwarranted chumminess with compiler. */ -#endif -} regexp; - -#ifdef INDIRECT_TO_PROGRAM -# define N_ITO_DELTA(prog, extra, re) extra -# define N_ITO_SPACE(v) 0 -# define ITO(x, y) x -#else -# define N_ITO_DELTA(prog, extra, re) ((prog+extra) - re) -# define N_ITO_SPACE(v) v -# define ITO(x, y) y -#endif - -static regexp *regcomp(char *, rxpos, int); +static regexp *regcomp(char *, rxpos, int, int); /* static int regexec(regexp *, char *, int, int, rxpos *, rxpos * ...); */ -/* 156 is octal 234: */ -#define MAGIC 156 - -#ifdef MZ_PRECISE_GC -# define MZREGISTER /**/ -#else -# define MZREGISTER register -#endif - -/* - * The "internal use only" fields in regexp.h are present to pass info from - * compile to execute that permits the execute phase to run lots faster on - * simple cases. They are: - * - * regstart char that must begin a match; '\0' if none obvious - * reganch is the match anchored (at beginning-of-line only)? - * regmust string (pointer into program) that match must include, or NULL - * regmlen length of regmust string - * - * Regstart and reganch permit very fast decisions on suitable starting points - * for a match, cutting down the work a lot. Regmust permits fast rejection - * of lines that cannot possibly match. The regmust tests are costly enough - * that regcomp() supplies a regmust only if the r.e. contains something - * potentially expensive (at present, the only such thing detected is * or + - * at the start of the r.e., which can involve a lot of backup). Regmlen is - * supplied because the test in regexec() needs it and regcomp() is computing - * it anyway. - */ - -/* - * Structure for regexp "program". This is essentially a linear encoding - * of a nondeterministic finite-state machine (aka syntax charts or - * "railroad normal form" in parsing technology). Each node is an opcode - * plus a "next" pointer, possibly plus an operand. "Next" pointers of - * all nodes except BRANCH implement concatenation; a "next" pointer with - * a BRANCH on both ends of it is connecting two alternatives. (Here we - * have one of the subtle syntax dependencies: an individual BRANCH (as - * opposed to a collection of them) is never concatenated with anything - * because of operator precedence.) The operand of some types of node is - * a literal string; for others, it is a node leading into a sub-FSM. In - * particular, the operand of a BRANCH node is the first node of the branch. - * (NB this is *not* a tree structure: the tail of the branch connects - * to the thing following the set of BRANCHes.) The opcodes are: - */ - -/* definition number opnd? meaning */ -#define END 0 /* no End of program. */ -#define BOL 1 /* no Match "" at beginning of line. */ -#define EOL 2 /* no Match "" at end of line. */ -#define ANY 3 /* no Match any one character. */ -#define ANYOF 4 /* str Match any character in this string. */ -#define ANYBUT 5 /* str Match any character not in this string. */ -#define INRANGE 6 /* str Match character in range */ -#define BRANCH 7 /* node Match this alternative, or the next... */ -#define BACK 8 /* no Match "", "next" ptr points backward. */ -#define EXACTLY 9 /* str Match this string. */ -#define NOTHING 10 /* no Match empty string. */ -#define STAR 11 /* node Match this (simple) thing 0 or more times. */ -#define PLUS 12 /* node Match this (simple) thing 1 or more times. */ -#define STAR2 13 /* non-greedy star. */ -#define PLUS2 14 /* non-greedy plus. */ -#define OPENN 15 /* like OPEN, but with an n >= 50, or n == 0 means (?:...) */ -#define CLOSEN 16 /* like CLOSE, but with an n >= 50 */ -#define OPEN 20 /* no Mark this point in input as start of #n. */ -/* OPEN+1 is number 1, etc. */ -#define CLOSE 70 /* no Analogous to OPEN. */ - -# define OPSTR(o) (o + 2) -# define OPLEN(o) ((int)(((unsigned char *)regstr)[o] << 8) | (((unsigned char *)regstr)[o+1])) - -/* - * Opcode notes: - * - * BRANCH The set of branches constituting a single choice are hooked - * together with their "next" pointers, since precedence prevents - * anything being concatenated to any individual branch. The - * "next" pointer of the last BRANCH in a choice points to the - * thing following the whole choice. This is also where the - * final "next" pointer of each individual branch points; each - * branch starts with the operand node of a BRANCH node. - * - * BACK Normal "next" pointers all implicitly point forward; BACK - * exists to make loop structures possible. - * - * STAR,PLUS '?', and complex '*' and '+', are implemented as circular - * BRANCH structures using BACK. Simple cases (one character - * per match) are implemented with STAR and PLUS for speed - * and to minimize recursive plunges. - * - * OPEN,CLOSE ...are numbered at compile time. - */ - -/* - * A node is one char of opcode followed by two chars of "next" pointer. - * "Next" pointers are stored as two 8-bit pieces, high order first. The - * value is a positive offset from the opcode of the node containing it. - * An operand, if any, simply follows the node. (Note that much of the - * code generation knows about this implicit relationship.) - * - * Using two bytes for the "next" pointer is vast overkill for most things, - * but allows patterns to get big without disasters. - */ -#define OP(p) (regstr[p]) -#define NEXT(p) (((((unsigned char *)regstr)[(p)+1]&255)<<8) + (((unsigned char *)regstr)[(p)+2]&255)) -#define OPERAND(p) ((p) + 3) - -/* - * See regmagic.h for one further detail of program structure. - */ - - -/* - * Utility definitions. - */ -#ifndef CHARBITS -#define UCHARAT(p) ((int)*(unsigned char *)(p)) -#else -#define UCHARAT(p) ((int)*(p)&CHARBITS) -#endif - -#define FAIL(m) { regcomperror(m); return 0; } -#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?') -#define META "^$.[()|?+*\\" - -/* - * Flags to be passed up and down. - */ -#define HASWIDTH 01 /* Known never to match null string. */ -#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */ -#define SPSTART 04 /* Starts with * or +. */ -#define WORST 0 /* Worst case. */ - /* * Global work variables for regcomp(). */ static char *regstr, *regparsestr; +static int regmatchmin, regmatchmax, regmaxbackposn, regsavepos; + +static Scheme_Hash_Table *regbackknown; /* known/assumed backreference [non-]empty */ +static Scheme_Hash_Table *regbackdepends; /* backreferences required to be non-empty for the current to be non-empty */ static rxpos regparse, regparse_end; /* Input-scan pointer. */ static int regnpar; /* () count. */ -static char regdummy; -static rxpos regcode; /* Code-emit pointer; ®dummy = don't. */ -static long regsize; /* Code size. */ - -#define REGDUMMY ®dummy +static int regncounter; /* {} count */ +static rxpos regcode; /* Code-emit pointer, if less than regcodesize */ +static rxpos regcodesize; +static rxpos regcodemax; +static long regmaxlookback; /* * Forward declarations for regcomp()'s friends. @@ -239,22 +86,34 @@ static long regsize; /* Code size. */ #ifndef STATIC #define STATIC static #endif -STATIC rxpos reg(int, int *, int); -STATIC rxpos regbranch(int *); -STATIC rxpos regpiece(int *); -STATIC rxpos regatom(int *); +STATIC rxpos reg(int, int *, int, int, int); +STATIC rxpos regbranch(int *, int, int); +STATIC rxpos regpiece(int *, int, int); +STATIC rxpos regatom(int *, int, int); +STATIC rxpos regranges(int parse_flags, int at_start); +STATIC rxpos regunicode(int invert); +STATIC int regdigit(); STATIC rxpos regnode(char); +STATIC void regarg(int); STATIC rxpos regnext(rxpos); STATIC void regc(char); STATIC void reginsert(char, rxpos); +STATIC rxpos reginsertwithop(char, rxpos, int); +STATIC rxpos reginsertwithopop(char, rxpos, int, int); STATIC void regtail(rxpos, rxpos); STATIC void regoptail(rxpos, rxpos); STATIC int regstrcspn(char *, char *, char *); +STATIC unsigned char *extract_regstart(rxpos scan, int *_anch); + +static int check_and_propagate_depends(void); +static int merge_tables(Scheme_Hash_Table *dest, Scheme_Hash_Table *src); + +#define FAIL(m) { regcomperror(m); return 0; } static void regerror(char *s) { - scheme_raise_exn(MZEXN_FAIL, + scheme_raise_exn(MZEXN_FAIL_CONTRACT, "regexp: %s", s); } @@ -286,46 +145,60 @@ regcomperror(char *s) * of the structure of the compiled regexp. */ static regexp * -regcomp(char *expstr, rxpos exp, int explen) +regcomp(char *expstr, rxpos exp, int explen, int pcre) { regexp *r; rxpos scan, next; rxpos longest; - int len; + int len, longest_is_ci; int flags; - + /* First pass: determine size, legality. */ - regstr = REGDUMMY; + regstr = NULL; regparsestr = expstr; regparse = exp; regparse_end = exp + explen; regnpar = 1; - regsize = 0L; + regncounter = 0; + regmaxlookback = 0; regcode = 1; + regcodesize = 0; + regcodemax = 0; + regmaxbackposn = 0; + regbackknown = NULL; + regbackdepends = NULL; regc(MAGIC); - if (reg(0, &flags, 0) == 0) - return NULL; + if (reg(0, &flags, 0, 0, PARSE_CASE_SENS | PARSE_SINGLE_LINE | (pcre ? PARSE_PCRE : 0)) == 0) { + FAIL("unknown regexp failure"); + } /* Small enough for pointer-storage convention? */ - if (regsize >= 32767L) /* Probably could be 65535L. */ + if (regcodemax >= 32767L) /* Probably could be 65535L. */ FAIL("regexp too big"); + + if (regmaxbackposn >= regnpar) + FAIL("backreference number is larger than the highest-numbered cluster"); /* Allocate space. */ - r = (regexp *)scheme_malloc_tagged(sizeof(regexp) + N_ITO_SPACE((unsigned)regsize)); + r = (regexp *)scheme_malloc_tagged(sizeof(regexp) + N_ITO_SPACE((unsigned)regcodemax)); r->type = scheme_regexp_type; #ifdef INDIRECT_TO_PROGRAM - r->program = (char *)scheme_malloc_atomic((unsigned)regsize + 1); + r->program = (char *)scheme_malloc_atomic((unsigned)regcodemax + 1); #endif - r->regsize = regsize; + r->regsize = regcodemax; r->nsubexp = regnpar; + r->ncounter = regncounter; + r->maxlookback = regmaxlookback; /* Second pass: emit code. */ regparse = exp; regparse_end = exp + explen; regnpar = 1; + regncounter = 0; + regcodesize = regcodemax; #ifdef INDIRECT_TO_PROGRAM regstr = r->program; regcode = 0; @@ -333,26 +206,36 @@ regcomp(char *expstr, rxpos exp, int explen) regstr = (char *)r; regcode = (char *)r->program - (char *)r; #endif + regcodesize += regcode; + regcodemax = 0; + regbackknown = NULL; + regbackdepends = NULL; regc(MAGIC); - if (reg(0, &flags, 0) == 0) - return NULL; - + if (reg(0, &flags, 0, 0, PARSE_CASE_SENS | PARSE_SINGLE_LINE | (pcre ? PARSE_PCRE : 0)) == 0) { + FAIL("unknown regexp failure (late)"); + } + + if (regcode >= regcodesize) { + FAIL("wrote too far"); + } + /* Dig out information for optimizations. */ - r->regstart = '\0'; /* Worst-case defaults. */ - r->reganch = 0; + r->regstart = NULL; /* Worst-case defaults. */ r->regmust = -1; r->regmlen = 0; scan = N_ITO_DELTA(r->program, 1, (char *)r); /* First BRANCH. */ + { + unsigned char *rs; + int anch = 0; + rs = extract_regstart(scan, &anch); + r->regstart = rs; + if (anch) + r->flags |= REGEXP_ANCH; + + } next = regnext(scan); - if (OP(next) == END) { /* Only one top-level choice. */ + if (rOP(next) == END) { /* Only one top-level choice. */ scan = OPERAND(scan); - - /* Starting-point info. */ - if (OP(scan) == EXACTLY) - r->regstart = regstr[OPSTR(OPERAND(scan))]; - else if (OP(scan) == BOL) - r->reganch++; - /* * If there's something expensive in the r.e., find the * longest literal string that must appear and make it the @@ -363,12 +246,14 @@ regcomp(char *expstr, rxpos exp, int explen) */ if (flags&SPSTART) { longest = 0; + longest_is_ci = 0; len = 0; for (; scan != 0; scan = regnext(scan)) { - if (OP(scan) == EXACTLY && OPLEN(OPERAND(scan)) >= len) { + if (((rOP(scan) == EXACTLY) || (rOP(scan) == EXACTLY_CI)) + && rOPLEN(OPERAND(scan)) >= len) { /* Skip regmust if it contains a null character: */ rxpos ls = OPSTR(OPERAND(scan)); - int ll = OPLEN(OPERAND(scan)), i; + int ll = rOPLEN(OPERAND(scan)), i; for (i = 0; i < ll; i++) { if (!regstr[ls + i]) break; @@ -376,12 +261,16 @@ regcomp(char *expstr, rxpos exp, int explen) if (i >= ll) { longest = ls; len = ll; + longest_is_ci = (rOP(scan) == EXACTLY_CI); } } } - if (longest) + if (longest) { r->regmust = longest; - r->regmlen = len; + if (longest_is_ci) + r->flags |= REGEXP_MUST_CI; + r->regmlen = len; + } } } @@ -393,6 +282,149 @@ regcomp(char *expstr, rxpos exp, int explen) return(r); } +static unsigned char *map_create(unsigned char *map) +{ + if (!map) { + map = (unsigned char *)scheme_malloc_atomic(32); + memset(map, 0, 32); + } + return map; +} + +static unsigned char *map_start(unsigned char *map, int c) +{ + map = map_create(map); + map[c >> 3] |= ((unsigned char)1 << (c & 0x7)); + return map; +} + +static unsigned char *map_copy(unsigned char *map, char *s, int pos) +{ + map = map_create(map); + memcpy(map, s XFORM_OK_PLUS pos, 32); + return map; +} + +static unsigned char *map_range(unsigned char *map, char *s, int pos, int invert) +{ + int rs, re; + + rs = UCHAR(s[pos++]); + re = UCHAR(s[pos++]); + + if (!invert) { + while (rs <= re) { + map = map_start(map, rs); + rs++; + } + } else { + while (rs > 0) { + map = map_start(map, rs - 1); + --rs; + } + while (re < 255) { + map = map_start(map, re + 1); + re++; + } + } + + return map; +} + +static unsigned char *extract_regstart(rxpos scan, int *_anch) +{ + rxpos next; + int retry, the_op; + unsigned char *map = NULL; + + do { + retry = 0; + + the_op = rOP(scan); + switch (the_op) { + case BOL: + case EOL: + case NOTHING: + case SAVECONST: + case MAYBECONST: + case COUNTINIT: + case COUNTOVER: + case COUNTUNDER: + /* We can ignore zero-length things when finding starting info */ + scan = regnext(scan); + retry = 1; + break; + case LOOKT: + case LOOKF: + case LOOKBT: + case LOOKBF: + /* Zero-length, but continuation in an unusual place */ + scan += rOPLEN(OPERAND(scan)); + scan = regnext(scan); + retry = 1; + break; + case LOOKTX: + scan = regnext(scan); + retry = 1; + break; + case PLUS: + case PLUS2: + scan = OPERAND(scan); + retry = 1; + break; + case STAR3: + case STAR4: + if (rOPLEN(OPERAND(scan)) > 0) { + scan = OPERAND3(scan); + retry = 1; + } + break; + case EXACTLY: + map = map_start(map, UCHAR(regstr[OPSTR(OPERAND(scan))])); + break; + case EXACTLY_CI: + { + int c = UCHAR(regstr[OPSTR(OPERAND(scan))]); + map = map_start(map, c); + map = map_start(map, rx_toupper(c)); + } + break; + case ANYOF: + map = map_copy(map, regstr, OPERAND(scan)); + break; + case EXACTLY1: + map = map_start(map, UCHAR(regstr[OPERAND(scan)])); + break; + case RANGE: + map = map_range(map, regstr, OPERAND(scan), 0); + break; + case NOTRANGE: + map = map_range(map, regstr, OPERAND(scan), 1); + break; + case BOI: + if (_anch) + *_anch = 1; + break; + case BRANCH: + next = regnext(scan); + if (!next || (rOP(next) == END) || (rOP(next) == LOOKE)) { + /* Only one branch */ + scan = OPERAND(scan); + retry = 1; + } + break; + default: + if ((the_op == OPENN) || (the_op >= OPEN && the_op < CLOSE)) { + scan = NEXT_OP(scan); + retry = 1; + } + break; + } + } while (retry); + + return map; +} + #ifdef DO_STACK_CHECK static Scheme_Object *reg_k(void) @@ -403,7 +435,7 @@ static Scheme_Object *reg_k(void) p->ku.k.p1 = NULL; - res = reg(p->ku.k.i1, flagp, p->ku.k.i2); + res = reg(p->ku.k.i1, flagp, p->ku.k.i2, p->ku.k.i3, p->ku.k.i4); return scheme_make_integer(res); } @@ -420,13 +452,14 @@ static Scheme_Object *reg_k(void) * follows makes it hard to avoid. */ static rxpos -reg(int paren, int *flagp, int paren_set) +reg(int paren, int *flagp, int paren_set, int lookahead, int parse_flags) { rxpos ret; rxpos br; rxpos ender; int parno = 0; - int flags; + int flags, matchmin, matchmax, brcount; + Scheme_Hash_Table *backdepends; #ifdef DO_STACK_CHECK { @@ -437,6 +470,8 @@ reg(int paren, int *flagp, int paren_set) p->ku.k.i1 = paren; p->ku.k.p1 = (void *)flagp; p->ku.k.i2 = paren_set; + p->ku.k.i3 = lookahead; + p->ku.k.i4 = parse_flags; ov = scheme_handle_stack_overflow(reg_k); return SCHEME_INT_VAL(ov); } @@ -447,61 +482,176 @@ reg(int paren, int *flagp, int paren_set) /* Make an OPEN node, if parenthesized. */ if (paren) { - if (paren_set) { + if (lookahead) { + parno = 0; + ret = regnode(lookahead); + regarg(0); /* space for LOOKE pointer */ + if ((lookahead == LOOKBT) || (lookahead == LOOKBF)) { + regarg(0); /* space for min count */ + regarg(0); /* space for max count */ + } + } else if (paren_set) { parno = regnpar; regnpar++; + if (OPEN + parno >= CLOSE) { + ret = regnode(OPENN); + regarg(parno); + } else { + ret = regnode(OPEN+parno); + } } else - parno = 0; - if (!paren_set || (OPEN + parno >= CLOSE)) { - ret = regcode; - regc(parno >> 8); - regc(parno & 255); - reginsert(OPENN, ret); - } else { - ret = regnode(OPEN+parno); - } + ret = 0; } else ret = 0; /* Pick up the branches, linking them together. */ - br = regbranch(&flags); + br = regbranch(&flags, parse_flags, 0); if (br == 0) - return 0; + FAIL("branch failed!?"); if (ret != 0) regtail(ret, br); /* OPEN -> first. */ else ret = br; - if (!(flags&HASWIDTH)) + if (!(flags&HASWIDTH)) { *flagp &= ~HASWIDTH; - *flagp |= flags&SPSTART; + backdepends = NULL; + } else if (regbackdepends) { + backdepends = regbackdepends; + regbackdepends = NULL; + } else + backdepends = NULL; + *flagp |= flags&(SPSTART|SPFIXED); + matchmin = regmatchmin; + matchmax = regmatchmax; + brcount = 1; while (regparsestr[regparse] == '|') { + brcount++; regparse++; - br = regbranch(&flags); + br = regbranch(&flags, parse_flags, 0); if (br == 0) - return 0; + FAIL("next branch failed!?"); regtail(ret, br); /* BRANCH -> BRANCH. */ if (!(flags&HASWIDTH)) *flagp &= ~HASWIDTH; + else if ((*flagp) & HASWIDTH) { + if (regbackdepends) { + if (backdepends) + merge_tables(backdepends, regbackdepends); + else + backdepends = regbackdepends; + regbackdepends = NULL; + } else + backdepends = NULL; + } *flagp |= flags&SPSTART; + if (!(flags&SPFIXED)) + *flagp &= ~SPFIXED; + else { + if (regmatchmin < matchmin) + matchmin = regmatchmin; + if (regmatchmax > matchmax) + matchmax = regmatchmax; + } + } + regbackdepends = backdepends; + regmatchmin = matchmin; + regmatchmax = matchmax; + + if (paren && paren_set) { + Scheme_Object *assumed; + + if (!regbackknown) + regbackknown = scheme_make_hash_table(SCHEME_hash_ptr); + assumed = scheme_hash_get(regbackknown, scheme_make_integer(parno)); + + if (!((*flagp) & HASWIDTH)) { + if (assumed && !SCHEME_FALSEP(assumed)) { + FAIL("`*', `+', or `{...,}' operand can be empty due to backreference"); + } + scheme_hash_set(regbackknown, scheme_make_integer(parno), scheme_false); + } else { + if (!backdepends) + scheme_hash_set(regbackknown, scheme_make_integer(parno), scheme_true); + else { + if (assumed) { + check_and_propagate_depends(); + } else + scheme_hash_set(regbackknown, scheme_make_integer(parno), (Scheme_Object *)backdepends); + } + } } - /* Make a closing node, and hook it on the end. */ - if (paren) { - if (!paren_set || (OPEN + parno >= CLOSE)) { - ender = regcode; - regc(parno >> 8); - regc(parno & 255); - reginsert(CLOSEN, ender); - } else - ender = regnode(CLOSE+parno); + if ((brcount == 1) + && paren + && (!paren_set || ((flags & SPFIXED) + && (regmatchmin == regmatchmax) + && (regmatchmax < 0x7FFFF))) + && !lookahead) { + /* Simplify to just the single branch: */ + if (br + 3 < regcodesize) { + int top; + if (regcode <= regcodesize) + top = regcode; + else + top = regcodesize; + memmove(regstr + ret, regstr + br + 3, top - (br + 3)); + } + *flagp = flags; + regcode -= (br + 3 - ret); + if (paren_set) { + /* Collude with regpiece: */ + *flagp |= NEEDSAVECONST; + *flagp &= ~SPNOTHING; + regsavepos = parno; + } } else { - ender = regnode(END); - } - regtail(ret, ender); + if (lookahead) { + if ((lookahead == LOOKBT) || (lookahead == LOOKBF)) { + if (!((*flagp) & SPFIXED)) + FAIL("lookbehind pattern does not match a bounded byte width"); + if (matchmax > 0x7FFF) + FAIL("lookbehind match is potentially too long (more than 32767 bytes)"); + if (matchmax > regmaxlookback) + regmaxlookback = matchmax; + if (ret + 8 < regcodesize) { + regstr[ret + 5] = (matchmin >> 8); + regstr[ret + 6] = (matchmin & 255); + regstr[ret + 7] = (matchmax >> 8); + regstr[ret + 8] = (matchmax & 255); + } + } + } - /* Hook the tails of the branches to the closing node. */ - for (br = ret; br != 0; br = regnext(br)) { - regoptail(br, ender); + /* Make a closing node, and hook it on the end. */ + if (paren) { + if (lookahead) { + ender = regnode(LOOKE); + if (ret + 4 < regcodesize) { + int delta = (ender - ret); + regstr[ret + 3] = (delta >> 8); + regstr[ret + 4] = (delta & 255); + } + } else if (paren_set) { + if (OPEN + parno >= CLOSE) { + ender = regcode; + regarg(parno); + reginsert(CLOSEN, ender); + } else + ender = regnode(CLOSE+parno); + } else { + ender = regnode(NOTHING); + } + } else { + ender = regnode(END); + } + regtail(ret, ender); + + /* Hook the tails of the branches to the closing node. */ + if (regcodesize) { + for (br = ret; br != 0; br = regnext(br)) { + regoptail(br, ender); + } + } } /* Check for proper termination. */ @@ -524,32 +674,61 @@ reg(int paren, int *flagp, int paren_set) * Implements the concatenation operator. */ static rxpos -regbranch(int *flagp) +regbranch(int *flagp, int parse_flags, int without_branch_node) { rxpos ret; - rxpos chain; - rxpos latest; - int flags; + rxpos chain, latest; + int flags = 0, matchmin = 0, matchmax = 0, pcount = 0, save_flags; - *flagp = WORST; /* Tentatively. */ + *flagp = (WORST|SPFIXED); /* Tentatively. */ - ret = regnode(BRANCH); + if (!without_branch_node) + ret = regnode(BRANCH); + else + ret = 0; chain = 0; while (regparse != regparse_end && regparsestr[regparse] != '|' && regparsestr[regparse] != ')') { - latest = regpiece(&flags); + save_flags = flags; + latest = regpiece(&flags, parse_flags, !chain && !without_branch_node); if (latest == 0) - return 0; - *flagp |= flags&HASWIDTH; - if (chain == 0) /* First piece. */ - *flagp |= flags&SPSTART; - else - regtail(chain, latest); - chain = latest; + FAIL("piece failed!?"); + if (flags & SPNOTHING) { + /* no need to match nothing */ + regcode = latest; /* throw away dead code */ + flags = save_flags; /* in case all but the first is discarded */ + } else { + pcount++; + *flagp |= flags&HASWIDTH; + if (chain == 0) { /* First piece. */ + *flagp |= flags&SPSTART; + if (without_branch_node) + ret = latest; + } else + regtail(chain, latest); + if (!(flags&SPFIXED)) + *flagp &= ~SPFIXED; + matchmin += regmatchmin; + matchmax += regmatchmax; + if (matchmax > 0x7FFF) + matchmax = 0x10000; + chain = latest; + } + } + regmatchmin = matchmin; + regmatchmax = matchmax; + if (chain == 0) { /* Loop ran zero times. */ + latest = regnode(NOTHING); + if (without_branch_node) + ret = latest; + *flagp = SIMPLE|SPNOTHING|SPFIXED; + regmatchmin = regmatchmax = 0; + } + + if (pcount == 1) { + *flagp = flags; /* BRANCH will be deleted if simplicity is relevant */ } - if (chain == 0) /* Loop ran zero times. */ - (void) regnode(NOTHING); return(ret); } @@ -564,92 +743,266 @@ regbranch(int *flagp) * endmarker role is not redundant. */ static rxpos -regpiece(int *flagp) +regpiece(int *flagp, int parse_flags, int at_start) { rxpos ret; char op; rxpos next; int flags, greedy; + int minreps = 0, maxreps = 0, counter; + int origsavepos, origmatchmin, origmatchmax; - ret = regatom(&flags); + ret = regatom(&flags, parse_flags, at_start); if (ret == 0) - return 0; + FAIL("atom failed!?"); + + origsavepos = regsavepos; + origmatchmin = regmatchmin; + origmatchmax = regmatchmax; op = regparsestr[regparse]; - if (!ISMULT(op)) { - *flagp = flags; - return(ret); - } + if (!ISMULT(op, parse_flags)) { + *flagp = (flags & ~NEEDSAVECONST); + } else { + if (op == '{') { + int ch, maxspec = 0; + minreps = maxreps = 0; + regparse++; + do { + ch = regparsestr[regparse]; + if ((ch >= '0') && (ch <= '9')) { + minreps = (minreps * 10) + (ch - '0'); + if (minreps > 0x7FFF) + FAIL("minimum repetition count too large"); + regparse++; + } else if (ch == ',' || ch == '}') + break; + else { + FAIL("expected digit, comma, or `}' to end repetition specification started with `{'"); + } + } while (1); + if (ch == ',') { + regparse++; + do { + ch = regparsestr[regparse]; + if ((ch >= '0') && (ch <= '9')) { + maxspec = 1; + maxreps = (maxreps * 10) + (ch - '0'); + if (maxreps > 0x7FFF) + FAIL("maximum repetition count too large"); + regparse++; + } else if (ch == '}') + break; + else { + FAIL("expected digit or `}' to end repetition specification started with `{'"); + } + } while (1); + } else { + maxspec = 1; + maxreps = minreps; + } + if (maxspec && (maxreps < minreps)) { + FAIL("maximum repetition count is less than maximum repetition count"); + } + if (maxspec && !maxreps) { + /* Match 0 instances */ + regparse++; + if (regparsestr[regparse] == '?') + regparse++; /* non-greedy */ + if (ISMULT(regparsestr[regparse], parse_flags)) + FAIL("nested `*', `?', `+', or `{...}' in pattern"); + regcode = ret; /* throw away dead code */ + *flagp = SPFIXED|SPNOTHING; + regmatchmin = regmatchmax = 0; + return regnode(NOTHING); + } + op = '*'; + if (maxreps || minreps) + counter = regncounter++; + else + counter = 0; + } else + counter = 0; - if (!(flags&HASWIDTH) && op != '?') - FAIL("* or + operand could be empty"); - *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH); + if (!(flags&HASWIDTH) && (op != '?')) { + FAIL("`*', `+', or `{...}' operand could be empty"); + } - if (regparsestr[regparse+1] == '?') { - greedy = 0; + if (regbackdepends) { + /* Operand has width only if the indicated backreferences have width. */ + check_and_propagate_depends(); + /* Assumptions are registered, so we no longer need these backdepends: */ + regbackdepends = NULL; + } + + if (maxreps || minreps) { + if (minreps > 0) + *flagp = HASWIDTH; + if ((flags & SPFIXED) && maxreps) { + regmatchmin = (origmatchmin * minreps); + regmatchmax = (origmatchmax * maxreps); + if (regmatchmax > 0x7FFF) + regmatchmax = 0x10000; + *flagp |= SPFIXED; + } + } else + *flagp = (op != '+') ? WORST : HASWIDTH; + *flagp |= SPSTART; + + if (regparsestr[regparse+1] == '?') { + greedy = 0; + regparse++; + } else + greedy = 1; + + if (op == '*' && (flags&SIMPLE)) { + if (!minreps && !maxreps) + reginsert(greedy ? STAR : STAR2, ret); + else + reginsertwithopop(greedy ? STAR3 : STAR4, ret, minreps, maxreps); + } else if (op == '*' && greedy) { + /* Emit x* as (x&|), where & means "self". + If minreps or maxreps, also insert counter-managing + nodes. This counter detects empty matches, too. + The code is a little difficult to read because it often + uses reginsert, which puts nodes before existing nodes. + So, you almost have to read it backward. */ + rxpos br, nothing; + if (minreps || maxreps) { + /* Increment iteration counter, and fail if it's + already at the max: */ + rxpos x; + x = reginsertwithopop(COUNTUNDER, ret, counter, maxreps); + regtail(ret, x); + } + reginsert(BRANCH, ret); /* Either x */ + if (minreps || maxreps) { + /* Initialize the iteration counter on entry: */ + br = reginsertwithop(COUNTINIT, ret, counter); + regtail(ret, br); + } else + br = ret; + regoptail(br, regnode(BACK)); /* and loop */ + regoptail(br, br); /* back */ + regtail(br, regnode(BRANCH)); /* or */ + nothing = regnode(NOTHING); + if (minreps) { + /* Fail to match if the counter isn't big enough, yet: */ + rxpos n; + n = reginsertwithopop(COUNTOVER, nothing, counter, minreps); + regtail(nothing, n); + } + if (minreps || maxreps) { + /* We incremented the counter for an x match, but now + we're backtracking, so decrement it: */ + rxpos n; + n = reginsertwithop(COUNTBACK, nothing, counter); + regtail(nothing, n); + } + regtail(br, nothing); /* null. */ + } else if (op == '*') { + /* Emit x*? as (|x&), where & means "self". + With a counter, we need (|(x|-)&), where - reverts + the iteration count and fails. */ + rxpos br, nothing, x, next_to_x; + if (minreps || maxreps) { + /* Increment iteration counter, and fail if it's + already at the max: */ + rxpos fail; + x = reginsertwithopop(COUNTUNDER, ret, counter, maxreps); + regtail(ret, x); + + fail = regnode(BRANCH); + regnode(COUNTBACKFAIL); + regarg(counter); + reginsert(BRANCH, ret); + fail += 3; + regtail(ret, fail); + x += 3; + } else + x = ret; + reginsert(BRANCH, ret); /* = next */ + next = ret; + next_to_x = (x - next) + 3; + reginsert(NOTHING, ret); /* = nothing */ + next += 3; + nothing = ret; + if (minreps) { + /* Fail to match if the counter isn't big enough, yet: */ + nothing = reginsertwithopop(COUNTOVER, ret, counter, minreps); + regtail(ret, nothing); /* chain countover -> nothing */ + next += (nothing - ret); + } + reginsert(BRANCH, ret); /* b3 */ + next += 3; + nothing += 3; + if (minreps || maxreps) { + /* Initialize the iteration counter on entry: */ + br = reginsertwithop(COUNTINIT, ret, counter); + regtail(ret, br); /* chain countinit to b3 */ + next += (br - ret); + nothing += (br - ret); + } else + br = ret; + regtail(br, next); /* chain b3 to next */ + x = next + next_to_x; + regtail(x, regnode(BACK)); /* loop */ + regtail(x, br); /* back. */ + regtail(next, regnode(BACK)); /* chain next to nothing */ + regtail(next, nothing); + } else if (op == '+' && (flags&SIMPLE)) + reginsert(greedy ? PLUS : PLUS2, ret); + else if (op == '+' && greedy) { + /* Emit x+ as x(&|), where & means "self". */ + next = regnode(BRANCH); /* Either */ + regtail(ret, next); + regtail(regnode(BACK), ret); /* loop back */ + regtail(next, regnode(BRANCH)); /* or */ + regtail(ret, regnode(NOTHING)); /* null. */ + } else if (op == '+') { + /* Emit x+? as x(|&), where & means "self". */ + next = regnode(BRANCH); /* Either */ + regtail(ret, next); + regnode(NOTHING); /* op */ + regtail(next, regnode(BRANCH)); /* or */ + regtail(regnode(BACK), ret); /* loop back. */ + regtail(next, regnode(BACK)); + regtail(next, next + 3); + } else if (op == '?' && greedy) { + /* Emit x? as (x|) */ + reginsert(BRANCH, ret); /* Either x */ + regtail(ret, regnode(BRANCH)); /* or */ + next = regnode(NOTHING); /* null. */ + regtail(ret, next); + regoptail(ret, next); + } else if (op == '?') { + /* Emit x?? as (|x) */ + reginsert(BRANCH, ret); /* will be next... */ + reginsert(NOTHING, ret); + reginsert(BRANCH, ret); + regtail(ret, ret + 6); + next = regnode(BACK); + regtail(ret + 6, next); + regoptail(ret + 6, next); + regoptail(ret + 6, ret + 3); + } regparse++; - } else - greedy = 1; - - if (op == '*' && (flags&SIMPLE)) - reginsert(greedy ? STAR : STAR2, ret); - else if (op == '*' && greedy) { - /* Emit x* as (x&|), where & means "self". */ - reginsert(BRANCH, ret); /* Either x */ - regoptail(ret, regnode(BACK)); /* and loop */ - regoptail(ret, ret); /* back */ - regtail(ret, regnode(BRANCH)); /* or */ - regtail(ret, regnode(NOTHING)); /* null. */ - } else if (op == '*') { - /* Emit x*? as (|x&), where & means "self". */ - reginsert(BRANCH, ret); /* will be next... */ - reginsert(NOTHING, ret); - reginsert(BRANCH, ret); - next = ret + 6; - regtail(ret, next); - regoptail(next, regnode(BACK)); /* loop */ - regoptail(next, ret); /* back. */ - regtail(next, regnode(BACK)); - regtail(next, ret + 3); - } else if (op == '+' && (flags&SIMPLE)) - reginsert(greedy ? PLUS : PLUS2, ret); - else if (op == '+' && greedy) { - /* Emit x+ as x(&|), where & means "self". */ - next = regnode(BRANCH); /* Either */ - regtail(ret, next); - regtail(regnode(BACK), ret); /* loop back */ - regtail(next, regnode(BRANCH)); /* or */ - regtail(ret, regnode(NOTHING)); /* null. */ - } else if (op == '+') { - /* Emit x+? as x(|&), where & means "self". */ - next = regnode(BRANCH); /* Either */ - regtail(ret, next); - regnode(NOTHING); /* op */ - regtail(next, regnode(BRANCH)); /* or */ - regtail(regnode(BACK), ret); /* loop back. */ - regtail(next, regnode(BACK)); - regtail(next, next + 3); - } else if (op == '?' && greedy) { - /* Emit x? as (x|) */ - reginsert(BRANCH, ret); /* Either x */ - regtail(ret, regnode(BRANCH)); /* or */ - next = regnode(NOTHING); /* null. */ - regtail(ret, next); - regoptail(ret, next); - } else if (op == '?') { - /* Emit x?? as (|x) */ - reginsert(BRANCH, ret); /* will be next... */ - reginsert(NOTHING, ret); - reginsert(BRANCH, ret); - regtail(ret, ret + 6); - next = regnode(BACK); - regtail(ret + 6, next); - regoptail(ret + 6, next); - regoptail(ret + 6, ret + 3); + if (ISMULT(regparsestr[regparse], parse_flags)) + FAIL("nested `*', `?', `+', or `{...}' in pattern"); + } + + if (flags & NEEDSAVECONST) { + rxpos sv; + sv = regnode(SAVECONST); + regarg(origsavepos); + regarg(origmatchmax); + regtail(ret, sv); + if (origmatchmax) { + sv = reginsertwithop(MAYBECONST, ret, origsavepos); + regtail(ret, sv); + } + *flagp &= ~SIMPLE; } - regparse++; - if (ISMULT(regparsestr[regparse])) - FAIL("nested *, ?, or + in pattern"); return(ret); } @@ -663,152 +1016,966 @@ regpiece(int *flagp) * separate node; the code is simpler that way and it's not worth fixing. */ static rxpos -regatom(int *flagp) +regatom(int *flagp, int parse_flags, int at_start) { rxpos ret; int flags; - *flagp = WORST; /* Tentatively. */ + *flagp = (WORST|SPFIXED); /* Tentatively. */ + regmatchmin = regmatchmax = 1; switch (regparsestr[regparse++]) { case '^': - ret = regnode(BOL); + if (parse_flags & PARSE_SINGLE_LINE) + ret = regnode(BOI); + else + ret = regnode(BOL); + regmatchmin = regmatchmax = 0; break; case '$': - ret = regnode(EOL); + if (parse_flags & PARSE_SINGLE_LINE) + ret = regnode(EOI); + else + ret = regnode(EOL); + regmatchmin = regmatchmax = 0; break; case '.': - ret = regnode(ANY); + --regparse; + ret = regranges(parse_flags, at_start); *flagp |= HASWIDTH|SIMPLE; break; case '[': - /* Check for simple-range special case: */ - if (((regparse + 4) <= regparse_end) - && (regparsestr[regparse] != '^') - && (regparsestr[regparse] != '-') - && (regparsestr[regparse] != ']') - && (regparsestr[regparse + 1] == '-') - && (regparsestr[regparse + 2] != '-') - && (regparsestr[regparse + 2] != ']') - && (regparsestr[regparse + 3] == ']')) { - ret = regnode(INRANGE); - regc(regparsestr[regparse]); - regc(regparsestr[regparse + 2]); - regparse += 4; - *flagp |= HASWIDTH|SIMPLE; - } else { - int xclass; - int classend, len, can_range = 0; - rxpos l0, l1; + --regparse; + ret = regranges(parse_flags, at_start); + *flagp |= HASWIDTH|SIMPLE; + break; + case '(': + { + if (regparsestr[regparse] == '?') { + int moded = 0; - if (regparsestr[regparse] == '^') { /* Complement of range. */ - ret = regnode(ANYBUT); - regparse++; - } else - ret = regnode(ANYOF); - len = 0; - l0 = regcode; - regc(0); - l1 = regcode; - regc(0); - if (regparsestr[regparse] == ']' || regparsestr[regparse] == '-') { - regc(regparsestr[regparse++]); - len++; - } - while (regparse != regparse_end && regparsestr[regparse] != ']') { - if (regparsestr[regparse] == '-') { - regparse++; - if (regparsestr[regparse] == ']' || regparse == regparse_end) { - regc('-'); - len++; - } else { - if (!can_range) { - FAIL("misplaced hypen within square brackets in pattern"); - } - xclass = UCHARAT(regparsestr + (regparse-2))+1; - classend = UCHARAT(regparsestr + regparse); - if (classend == '-') { - FAIL("misplaced hypen within square brackets in pattern"); - } - if (xclass > classend+1) - FAIL("invalid range within square brackets in pattern"); - for (; xclass <= classend; xclass++) { - regc(xclass); - len++; - } + while (1) { + if (regparsestr[regparse+1] == 'i') { + parse_flags &= ~PARSE_CASE_SENS; regparse++; + moded = 1; + } else if (regparsestr[regparse+1] == 'm') { + parse_flags &= ~PARSE_SINGLE_LINE; + regparse++; + moded = 1; + } else if (regparsestr[regparse+1] == 's') { + parse_flags |= PARSE_SINGLE_LINE; + regparse++; + moded = 1; + } else if ((regparsestr[regparse+1] == '-') + && (regparsestr[regparse+2] == 'i')) { + parse_flags |= PARSE_CASE_SENS; + regparse += 2; + moded = 1; + } else if ((regparsestr[regparse+1] == '-') + && (regparsestr[regparse+2] == 'm')) { + parse_flags |= PARSE_SINGLE_LINE; + regparse += 2; + moded = 1; + } else if ((regparsestr[regparse+1] == '-') + && (regparsestr[regparse+2] == 's')) { + parse_flags &= ~PARSE_SINGLE_LINE; + regparse += 2; + moded = 1; + } else { + break; } - can_range = 0; + } + + if (regparsestr[regparse+1] == ':') { + regparse += 2; + ret = reg(1, &flags, 0, 0, parse_flags); + *flagp = flags; + } else if (moded) { + FAIL("expected `:' or another mode after `(?' and a mode sequence (where a mode is `i', `-i', `m', `-m', `s', or `-s')"); + } else if (regparsestr[regparse+1] == '(') { + /* Conditional */ + if (((regparsestr[regparse+2] >= '0') + && (regparsestr[regparse+2] <= '9')) + || ((regparsestr[regparse+2] == '?') + && ((regparsestr[regparse+3] == '=') + || (regparsestr[regparse+3] == '!') + || (regparsestr[regparse+3] == '<')))) { + rxpos test, tbr, fbr, ender; + int flags, matchmin, matchmax; + Scheme_Hash_Table *backdepends; + + regparse++; + ret = regnode(CONDITIONAL); + regarg(0); /* space for then */ + regarg(0); /* space for else */ + if (regparsestr[regparse+1] != '?') { + int posn; + regparse++; + posn = regdigit(); + test = regnode(BACKREF); + regarg(posn); + if (regparsestr[regparse] == ')') { + regparse++; + } else { + FAIL("expected `)' after `(?(' followed by a digit"); + } + } else { + test = regatom(&flags, parse_flags, 1); + } + if (test != OPERAND3(ret)) { + FAIL("test went to wrong place!?"); + } + regtail(test, regnode(END)); + if (regparsestr[regparse] == ')') { + FAIL("expected an expression after test in `(?(...))'"); + } + + regbackdepends = NULL; + *flagp |= HASWIDTH; /* tentatively */ + + tbr = regbranch(&flags, parse_flags, 1); + + if (!(flags&HASWIDTH)) { + *flagp &= ~HASWIDTH; + backdepends = NULL; + } else if (regbackdepends) { + backdepends = regbackdepends; + regbackdepends = NULL; + } else + backdepends = NULL; + + if (!(flags & SPFIXED)) + *flagp &= ~SPFIXED; + matchmin = regmatchmin; + matchmax = regmatchmax; + + if (regparsestr[regparse] == ')') { + fbr = regnode(NOTHING); + *flagp &= ~HASWIDTH; + matchmin = 0; + } else if (regparsestr[regparse] != '|') { + FAIL("expected `)' or `|' after first branch of `(?(...)...)'"); + } else { + regparse++; + fbr = regbranch(&flags, parse_flags, 1); + if (regparsestr[regparse] != ')') { + FAIL("expected `)' to close `(?(...)...' after second branch"); + } + + if (!(flags&HASWIDTH)) { + *flagp &= ~HASWIDTH; + backdepends = NULL; + } else if (regbackdepends) { + if (backdepends) + merge_tables(backdepends, regbackdepends); + else + backdepends = regbackdepends; + } + + if (!(flags & SPFIXED)) + *flagp &= ~SPFIXED; + else { + if (regmatchmin < matchmin) + matchmin = regmatchmin; + if (regmatchmax > matchmax) + matchmax = regmatchmax; + } + } + + regmatchmax = matchmax; + regmatchmin = matchmin; + regbackdepends = backdepends; + + if (OPERAND2(ret) + 1 < regcodesize) { + int delta; + delta = tbr - ret; + regstr[OPERAND(ret)] = delta >> 8; + regstr[OPERAND(ret)+1] = delta & 255; + delta = fbr - ret; + regstr[OPERAND2(ret)] = delta >> 8; + regstr[OPERAND2(ret)+1] = delta & 255; + } + ender = regnode(NOTHING); + regtail(tbr, ender); + regtail(fbr, ender); + regtail(ret, ender); + regparse++; + } else + FAIL("expected `(?=', `(?!', `(?<', or digit after `(?('"); + } else if (regparsestr[regparse+1] == '>') { + regparse += 2; + ret = reg(1, &flags, 0, LOOKTX, parse_flags); + *flagp = flags; } else { - regc(regparsestr[regparse++]); - len++; - can_range = 1; + if (regparsestr[regparse+1] == '=') { + regparse += 2; + ret = reg(1, &flags, 0, LOOKT, parse_flags); + } else if (regparsestr[regparse+1] == '!') { + regparse += 2; + ret = reg(1, &flags, 0, LOOKF, parse_flags); + } else if ((regparsestr[regparse+1] == '<') + && (regparsestr[regparse+2] == '=')) { + regparse += 3; + ret = reg(1, &flags, 0, LOOKBT, parse_flags); + } else if ((regparsestr[regparse+1] == '<') + && (regparsestr[regparse+2] == '!')) { + regparse += 3; + ret = reg(1, &flags, 0, LOOKBF, parse_flags); + } else { + FAIL("expected `:', `=', `!', `<=', `> 8); - regstr[l1] = (len & 255); - *flagp |= HASWIDTH|SIMPLE; + /* otherwise, regmatchmin/regmatchmax is set */ + if (ret == 0) + FAIL("cluster failed!?"); } - break; - case '(': - if ((regparsestr[regparse] == '?') - && (regparsestr[regparse+1] == ':')) { - regparse += 2; - ret = reg(1, &flags, 0); - } else - ret = reg(1, &flags, 1); - if (ret == 0) - return 0; - *flagp |= flags&(HASWIDTH|SPSTART); break; case '|': case ')': FAIL("internal urp"); /* Supposed to be caught earlier. */ break; case '?': + FAIL("`?' follows nothing in pattern"); + break; case '+': + FAIL("`+' follows nothing in pattern"); + break; case '*': - FAIL("?, +, or * follows nothing in pattern"); + FAIL("`*' follows nothing in pattern"); break; case '\\': - if (regparse == regparse_end) - FAIL("trailing backslash in pattern"); - ret = regnode(EXACTLY); - regc(0); - regc(1); - regc(regparsestr[regparse++]); - *flagp |= HASWIDTH|SIMPLE; + { + int c; + if (regparse == regparse_end) + FAIL("trailing backslash in pattern"); + c = regparsestr[regparse++]; + if (c == '$') { + ret = regnode(NOTHING); + regmatchmin = regmatchmax = 0; + *flagp |= SIMPLE|SPNOTHING; + } else if ((parse_flags & PARSE_PCRE) && (c == 'b')) { + ret = regnode(WORDBOUND); + regmatchmin = regmatchmax = 0; + if (!regmaxlookback) + regmaxlookback = 1; + } else if ((parse_flags & PARSE_PCRE) && (c == 'B')) { + ret = regnode(NOTWORDBOUND); + regmatchmin = regmatchmax = 0; + if (!regmaxlookback) + regmaxlookback = 1; + } else if ((parse_flags & PARSE_PCRE) && (c == 'p')) { + ret = regunicode(0); + regmatchmax = MAX_UTF8_CHAR_BYTES; + *flagp |= HASWIDTH; + } else if ((parse_flags & PARSE_PCRE) && (c == 'P')) { + ret = regunicode(1); + regmatchmax = MAX_UTF8_CHAR_BYTES; + *flagp |= HASWIDTH; + } else if ((parse_flags & PARSE_PCRE) && (c >= '0') && (c <= '9')) { + int posn; + --regparse; + posn = regdigit(); + if (parse_flags & PARSE_CASE_SENS) + ret = regnode(BACKREF); + else + ret = regnode(BACKREF_CI); + regarg(posn); + *flagp &= ~SPFIXED; + /* Set HASWIDTH flag: */ + { + Scheme_Object *f; + if (regbackknown) + f = scheme_hash_get(regbackknown, scheme_make_integer(posn)); + else + f = NULL; + if (f) { + if (SCHEME_TRUEP(f)) + *flagp |= HASWIDTH; + } else { + *flagp |= HASWIDTH; + if (!regbackdepends) + regbackdepends = scheme_make_hash_table(SCHEME_hash_ptr); + scheme_hash_set(regbackdepends, scheme_make_integer(posn), scheme_true); + } + } + } else { + regparse -= 2; + ret = regranges(parse_flags, at_start); + *flagp |= HASWIDTH|SIMPLE; + } + } break; - default: { - int len; + default: + { + int len, ilen, c; char ender; regparse--; - len = regstrcspn(regparsestr + regparse, regparsestr + regparse_end, META); + + if (parse_flags & PARSE_PCRE) { + if (regparsestr[regparse] == '{') + FAIL("`{' follows nothing in pattern"); + if (regparsestr[regparse] == '}') + FAIL("unmatched `}' in pattern"); + if (regparsestr[regparse] == ']') + FAIL("unmatched `]' in pattern"); + } + + for (len = ilen = 0; regparse + ilen < regparse_end; len++, ilen++) { + if (regparsestr[regparse + ilen] == '\\') { + if (regparse + ilen + 1 >= regparse_end) + break; + c = regparsestr[regparse + ilen + 1]; + if (((c >= 'a') && (c <= 'z')) + || ((c >= 'A') && (c <= 'Z')) + || ((c >= '0') && (c <= '9'))) + break; + ilen++; + } else if (regstrcspn(regparsestr + regparse + ilen, regparsestr + regparse + ilen + 1, + (parse_flags & PARSE_PCRE) ? PCRE_META : META) < 1) + break; + } if (len <= 0) FAIL("internal disaster"); - ender = regparsestr[regparse+len]; - if (len > 1 && ISMULT(ender)) - len--; /* Back off clear of ?+* operand. */ - *flagp |= HASWIDTH; - if (len == 1) - *flagp |= SIMPLE; - ret = regnode(EXACTLY); - regc(len >> 8); regc(len & 255); - while (len > 0) { - regc(regparsestr[regparse++]); - len--; + + if ((len == 1) && at_start) { + /* Maybe convert "x|y" to "[xy]", etc.: */ + ret = regranges(parse_flags, at_start); + *flagp |= HASWIDTH|SIMPLE; + } else { + if (!(parse_flags & PARSE_CASE_SENS)) { + /* Need case insensitivity? */ + int i; + for (i = 0; i < ilen; i++) { + c = regparsestr[regparse + i]; + if ((rx_toupper(c) != c) + || (rx_tolower(c) != c)) { + break; + } + } + if (i >= ilen) + parse_flags |= PARSE_CASE_SENS; + } + + ender = regparsestr[regparse+ilen]; + if (len > 1 && ISMULT(ender, parse_flags)) { + /* Back off from ?+* operand. */ + len--; + ilen--; + if (regparsestr[regparse + ilen] == '\\') + --ilen; + } + *flagp |= HASWIDTH; + if (len == 1) + *flagp |= SIMPLE; + regmatchmin = regmatchmax = len; + ret = regnode((parse_flags & PARSE_CASE_SENS) ? EXACTLY : EXACTLY_CI); + regarg(len); + while (len > 0) { + c = regparsestr[regparse++]; + if (c == '\\') + c = regparsestr[regparse++]; + if (!(parse_flags & PARSE_CASE_SENS)) + c = rx_tolower(c); + regc(c); + len--; + } } } break; } + + if (!ret) + FAIL("failed!?"); return ret; } +static int regcharclass(int c, char *map) +{ + switch(c) { + case 'd': + for (c = 0; c < 10; c++) { + map['0' + c] = 1; + } + break; + case 'D': + for (c = 0; c < '0'; c++) { + map[c] = 1; + } + for (c = '9' + 1; c < 256; c++) { + map[c] = 1; + } + break; + case 'w': + for (c = 0; c < 26; c++) { + map['a' + c] = 1; + map['A' + c] = 1; + } + for (c = 0; c < 10; c++) { + map['0' + c] = 1; + } + map['_'] = 1; + break; + case 'W': + for (c = 0; c < '0'; c++) { + map[c] = 1; + } + for (c = '9' + 1; c < 'A'; c++) { + map[c] = 1; + } + for (c = 'Z' + 1; c < '_'; c++) { + map[c] = 1; + } + for (c = 'z' + 1; c < 256; c++) { + map[c] = 1; + } + break; + case 's': + map['\t'] = 1; + map['\n'] = 1; + map['\f'] = 1; + map['\r'] = 1; + map[' '] = 1; + break; + case 'S': + for (c = 0; c < 256; c++) { + switch (c) { + case '\t': + case '\n': + case '\f': + case '\r': + case ' ': + break; + default: + map[c] = 1; + break; + } + } + break; + default: + if (((c >= 'a') && (c <= 'z')) + || ((c >= 'A') && (c <= 'Z'))) { + FAIL("illegal alphabetic escape"); + } + map[c] = 1; + break; + } + + return 1; +} + +static int is_posix_char_class(int pos, char *map) +{ + int c; + + if (!scheme_strncmp(":alnum:", regparsestr XFORM_OK_PLUS pos, 7)) { + regcharclass('d', map); + for (c = 'a'; c <= 'z'; c++) { + map[c] = 1; + map[c - ('a' - 'A')] = 1; + } + return 1; + } else if (!scheme_strncmp(":alpha:", regparsestr XFORM_OK_PLUS pos, 7)) { + for (c = 'a'; c <= 'z'; c++) { + map[c] = 1; + map[c - ('a' - 'A')] = 1; + } + return 1; + } else if (!scheme_strncmp(":ascii:", regparsestr XFORM_OK_PLUS pos, 7)) { + for (c = 0; c <= 127; c++) { + map[c] = 1; + } + return 1; + } else if (!scheme_strncmp(":blank:", regparsestr XFORM_OK_PLUS pos, 7)) { + map[' '] = 1; + map['\t'] = 1; + return 1; + } else if (!scheme_strncmp(":cntrl:", regparsestr XFORM_OK_PLUS pos, 7)) { + for (c = 0; c <= 31; c++) { + map[c] = 1; + } + return 1; + } else if (!scheme_strncmp(":digit:", regparsestr XFORM_OK_PLUS pos, 7)) { + regcharclass('d', map); + return 1; + } else if (!scheme_strncmp(":graph:", regparsestr XFORM_OK_PLUS pos, 7)) { + for (c = 0; c <= 127; c++) { + if (scheme_isgraphic(c)) + map[c] = 1; + } + return 1; + } else if (!scheme_strncmp(":lower:", regparsestr XFORM_OK_PLUS pos, 7)) { + for (c = 'a'; c <= 'z'; c++) { + map[c] = 1; + } + return 1; + } else if (!scheme_strncmp(":print:", regparsestr XFORM_OK_PLUS pos, 7)) { + for (c = 0; c <= 127; c++) { + if (scheme_isgraphic(c)) + map[c] = 1; + } + map[' '] = 1; + map['\t'] = 1; + return 1; + } else if (!scheme_strncmp(":space:", regparsestr XFORM_OK_PLUS pos, 7)) { + regcharclass('s', map); + return 1; + } else if (!scheme_strncmp(":upper:", regparsestr XFORM_OK_PLUS pos, 7)) { + for (c = 'A'; c <= 'Z'; c++) { + map[c] = 1; + } + return 1; + } else if (!scheme_strncmp(":word:", regparsestr XFORM_OK_PLUS pos, 6)) { + regcharclass('w', map); + return 1; + } else if (!scheme_strncmp(":xdigit:", regparsestr XFORM_OK_PLUS pos, 8)) { + regcharclass('d', map); + for (c = 'a'; c <= 'f'; c++) { + map[c] = 1; + map[c - ('a' - 'A')] = 1; + } + return 1; + } + return 0; +} + +static char *regrange(int parse_flags, char *map) +/* [ is already consumed; result is an array of 256 bytes of included chars */ +{ + int xclass, c; + int classend, can_range = 0; + int exclude = 0; + + if (regparsestr[regparse] == '^') { /* Complement of range. */ + exclude = 1; + regparse++; + } + + if (regparsestr[regparse] == ']' || regparsestr[regparse] == '-') { + c = regparsestr[regparse]; + map[c] = 1; + regparse++; + } + while (regparse != regparse_end && regparsestr[regparse] != ']') { + if (regparsestr[regparse] == '-') { + regparse++; + if (regparsestr[regparse] == ']' || regparse == regparse_end) { + map['-'] = 1; + } else { + if (!can_range) { + FAIL("misplaced hypen within square brackets in pattern"); + } else { + xclass = UCHAR(regparsestr[regparse-2])+1; + classend = UCHAR(regparsestr[regparse]); + if (classend == '-') { + FAIL("misplaced hypen within square brackets in pattern"); + } + if ((classend == '\\') && (parse_flags & PARSE_PCRE)) { + if (regparse+1 == regparse_end) { + FAIL("escaping backslash at end pattern (within square brackets)"); + } + regparse++; + classend = UCHAR(regparsestr[regparse]); + if (((classend >= 'a') && (classend <= 'z')) + || ((classend >= 'A') && (classend <= 'Z'))) { + FAIL("misplaced hypen within square brackets in pattern"); + } + } + if (xclass > classend+1) + FAIL("invalid range within square brackets in pattern"); + for (; xclass <= classend; xclass++) { + c = xclass; + map[c] = 1; + if (!(parse_flags & PARSE_CASE_SENS)) { + c = rx_toupper(c); + map[c] = 1; + c = rx_tolower(c); + map[c] = 1; + } + } + regparse++; + } + } + can_range = 0; + } else if ((regparsestr[regparse] == '\\') && (parse_flags & PARSE_PCRE)) { + c = UCHAR(regparsestr[regparse + 1]); + if (((c >= 'a') && (c <= 'z')) + || ((c >= 'A') && (c <= 'Z'))) { + regcharclass(c, map); + can_range = 0; + } else { + map[c] = 1; + can_range = 1; + } + regparse += 2; + } else if ((regparsestr[regparse] == '[') + && (parse_flags & PARSE_PCRE) + && (regparsestr[regparse+1] == ':') + && is_posix_char_class(regparse + 1, map)) { + regparse += 2; + while (regparsestr[regparse] != ']') { + regparse++; + } + regparse++; + can_range = 0; + } else { + c = UCHAR(regparsestr[regparse++]); + map[c] = 1; + if (!(parse_flags & PARSE_CASE_SENS)) { + c = rx_tolower(c); + map[c] = 1; + c = rx_toupper(c); + map[c] = 1; + } + can_range = 1; + } + } + + if (exclude) { + for (c = 0; c < 256; c++) { + map[c] = !map[c]; + } + } + + if (regparsestr[regparse] != ']') + FAIL("missing closing square bracket in pattern"); + regparse++; + + return map; +} + +static rxpos +regranges(int parse_flags, int at_start) +{ + int c; + rxpos ret, save_regparse = 0; + int count, all_ci, num_ci, off_ranges, on_ranges, now_on, last_on, use_ci; + char *new_map = NULL, *accum_map = NULL; + + count = 0; + while (1) { + /* This loop can end up parsing a range and not using the result, + so that the range is parsed twice. That's ok, because there's + no nesting (and therefore no exponential explosion). */ + + if (!new_map) + new_map = (char *)scheme_malloc_atomic(256); + memset(new_map, 0, 256); + + if (regparsestr[regparse] == '\\' + && (regparse + 1 < regparse_end)) { + /* \ */ + c = UCHAR(regparsestr[++regparse]); + if (parse_flags & PARSE_PCRE) { + if ((c >= '0') && (c <= '9')) + break; + regcharclass(regparsestr[regparse], new_map); + } else + new_map[c] = 1; + regparse++; + } else if (regstrcspn(regparsestr + regparse, regparsestr + regparse + 1, + (parse_flags & PARSE_PCRE) ? PCRE_META : META)) { + /* */ + c = UCHAR(regparsestr[regparse]); + new_map[c] = 1; + if (!(parse_flags & PARSE_CASE_SENS)) { + c = rx_tolower(c); + new_map[c] = 1; + c = rx_toupper(c); + new_map[c] = 1; + } + regparse++; + } else if (regparsestr[regparse] == '.') { + /* . */ + for (c = 0; c < 256; c++) { + new_map[c] = 1; + } + if (!(parse_flags & PARSE_SINGLE_LINE)) + new_map['\n'] = 0; + regparse++; + } else if (regparsestr[regparse] == '[') { + /* [...] */ + regparse++; + regrange(parse_flags, new_map); + } else + break; + + /* If the most recently parsed range is not + continued by a branch or the end of a sub-sequence, + then abandon it, because it actually belongs + with a new sequence. */ + if (accum_map + && (regparse < regparse_end) + && (regparsestr[regparse] != '|') + && (regparsestr[regparse] != ')')) + break; + + /* We'll keep it. Merge char maps so far: */ + if (accum_map) { + for (c = 0; c < 256; c++) { + accum_map[c] |= new_map[c]; + } + } else { + accum_map = new_map; + new_map = NULL; + } + save_regparse = regparse; + + /* If we're at the end, or if we can only do one, then we're done. */ + if (!at_start + || (regparsestr[regparse] != '|') + || (regparse >= regparse_end) + || (regparsestr[regparse] == ')')) + break; + + regparse++; + } + + regparse = save_regparse; + + if (!accum_map) + FAIL("should have found one range!"); + + use_ci = 0; + while (1) { + /* Collect stats to pick the best run-time implementation for a range. + We may do this twice if we decide to use a _CI variant. */ + count = 0; + num_ci = 0; + all_ci = 1; + on_ranges = 0; + off_ranges = 0; + now_on = 0; + last_on = -1; + for (c = 0; c < 256; c++) { + if (accum_map[c]) { + if (now_on < 0) + off_ranges++; + now_on = 1; + count++; + last_on = c; + + if (c != rx_tolower(c)) { + if (accum_map[rx_tolower(c)] != accum_map[c]) + all_ci = 0; + num_ci++; + } else if (c != rx_toupper(c)) { + if (accum_map[rx_toupper(c)] != accum_map[c]) + all_ci = 0; + num_ci++; + } + } else { + if (now_on > 0) + on_ranges++; + now_on = -1; + } + } + if (now_on > 0) + on_ranges++; + else + off_ranges++; + + /* Pick the best run-time implementation for a range. */ + if (count == 256) { + return regnode(ANY); + } else if ((count == 255) && !accum_map['\n']) { + return regnode(ANYL); + } else if (count == 1) { + ret = regnode(EXACTLY1); + regc(last_on); + return ret; + } else if ((on_ranges == 1) + || (off_ranges == 1)) { + int rs = 0, re = 0, on; + + if (on_ranges == 1) + on = 1; + else + on = 0; + + for (c = 0; c < 256; c++) { + if (!!accum_map[c] == on) { + rs = c; + break; + } + } + for (c++; c < 256; c++) { + if (!accum_map[c] == on) { + re = c - 1; + break; + } + } + + if (on) + ret = regnode(RANGE); + else + ret = regnode(NOTRANGE); + regc(rs); + regc(re); + return ret; + } else { + rxpos a; + + ret = regnode(ANYOF); + a = regcode; + for (c = 0; c < 32; c++) { + regc(0); + } + + if (regcode <= regcodesize) { + for (c = 0; c < 256; c++) { + if (accum_map[c]) { + regstr[a + (c >> 3)] |= (1 << (c & 0x7)); + } + } + } + + return ret; + } + } +} + +static char *prop_names[] = { "Cn", + "Cc", + "Cf", + "Cs", + "Co", + "Ll", + "Lu", + "Lt", + "Lm", + "Lo", + "Nd", + "Nl", + "No", + "Ps", + "Pe", + "Pi", + "Pf", + "Pc", + "Pd", + "Po", + "Mn", + "Mc", + "Me", + "Sc", + "Sk", + "Sm", + "So", + "Zl", + "Zp", + "Zs", + NULL}; + +static rxpos +regunicode(int negate) +{ + rxpos ret; + int len, bottom, top, i; + + if (regparsestr[regparse] != '{') { + FAIL("expected { after \\p or \\P"); + } + regparse++; + if (regparsestr[regparse] == '^') { + negate = !negate; + regparse++; + } + + len = 0; + while ((regparsestr[regparse + len] != '}') + && (regparse + len < regparse_end)) { + len++; + } + + if (regparse + len >= regparse_end) { + FAIL("missing } to close \\p{ or \\P{"); + } + + bottom = top = -1; + if (len == 2) { + for (i = 0; prop_names[i]; i++) { + if ((regparsestr[regparse] == prop_names[i][0]) + && (regparsestr[regparse+1] == prop_names[i][1])) { + bottom = top = i; + break; + } + } + if (bottom == -1) { + if ((regparsestr[regparse] == 'L') + && (regparsestr[regparse+1] == '&')) { + bottom = mzu_Ll; + top = mzu_Lm; + } + } + } else if (len == 1) { + if (regparsestr[regparse] == '.') { + bottom = 0; + top = mzu_LAST; + } else { + for (i = 0; prop_names[i]; i++) { + if (regparsestr[regparse] == prop_names[i][0]) { + bottom = i; + while (prop_names[i+1]) { + if (regparsestr[regparse] != prop_names[i+1][0]) + break; + i++; + } + top = i; + break; + } + } + } + } + + if (bottom < 0) { + FAIL("unrecognized property name in \\p{} or \\P{}"); + } + + regparse += len + 1; + + ret = regnode(UNIPROP); + /* This encoding accomodates up to 63 categories: */ + regarg((negate << 13) | (bottom << 6) | top); + + return ret; +} + +static int regdigit() +{ + int posn, c; + c = regparsestr[regparse++]; + posn = c - '0'; + while (regparse < regparse_end) { + c = regparsestr[regparse]; + if ((c >= '0') && (c <= '9')) { + posn = (posn * 10) + (c - '0'); + if (posn > 0x7FFF) + FAIL("backreference number is too large"); + regparse++; + } else + break; + } + if (posn > regmaxbackposn) + regmaxbackposn = posn; + return posn; +} + /* - regnode - emit a node */ @@ -819,8 +1986,10 @@ regnode(char op) rxpos ptr; ret = regcode; - if (regstr == REGDUMMY) { - regsize += 3; + if (regcode + 3 >= regcodesize) { + regcode += 3; + if (regcode > regcodemax) + regcodemax = regcode; return ret; } @@ -830,6 +1999,9 @@ regnode(char op) regstr[ptr++] = '\0'; regcode = ptr; + if (regcode > regcodemax) + regcodemax = regcode; + return ret; } @@ -839,10 +2011,18 @@ regnode(char op) static void regc(char b) { - if (regstr != REGDUMMY) - regstr[regcode++] = b; - else - regsize++; + if (regcode + 1 < regcodesize) + regstr[regcode] = b; + regcode++; + if (regcode > regcodemax) + regcodemax = regcode; +} + +static void +regarg(int v) +{ + regc(v >> 8); + regc(v & 255); } /* @@ -850,29 +2030,69 @@ regc(char b) * * Means relocating the operand. */ +static void +regshift(int amt, rxpos opnd) +{ + if (regcode + amt < regcodesize) { + memmove(regstr XFORM_OK_PLUS opnd + amt, + regstr XFORM_OK_PLUS opnd, + regcode - opnd); + } + regcode += amt; + if (regcode > regcodemax) + regcodemax = regcode; +} + static void reginsert(char op, rxpos opnd) { - rxpos src; - rxpos dst; - rxpos place; + regshift(3, opnd); - if (regstr == REGDUMMY) { - regsize += 3; + if (opnd + 3 >= regcodesize) { return; } - src = regcode; - regcode += 3; - dst = regcode; - while (src > opnd) { - regstr[--dst] = regstr[--src]; + regstr[opnd++] = op; + regstr[opnd++] = '\0'; /* tail */ + regstr[opnd++] = '\0'; +} + +static rxpos +reginsertwithop(char op, rxpos opnd, int arg) +{ + regshift(5, opnd); + + if (opnd + 5 >= regcodesize) { + return opnd + 5; } - place = opnd; /* Op node, where operand used to be. */ - regstr[place++] = op; - regstr[place++] = '\0'; - regstr[place++] = '\0'; + regstr[opnd++] = op; + regstr[opnd++] = '\0'; /* tail */ + regstr[opnd++] = '\0'; + regstr[opnd++] = (arg >> 8); + regstr[opnd++] = (arg & 255); + + return opnd; +} + +static rxpos +reginsertwithopop(char op, rxpos opnd, int arg, int arg2) +{ + regshift(7, opnd); + + if (opnd + 7 >= regcodesize) { + return opnd + 7; + } + + regstr[opnd++] = op; + regstr[opnd++] = '\0'; /* tail */ + regstr[opnd++] = '\0'; + regstr[opnd++] = (arg >> 8); + regstr[opnd++] = (arg & 255); + regstr[opnd++] = (arg2 >> 8); + regstr[opnd++] = (arg2 & 255); + + return opnd; } /* @@ -885,19 +2105,23 @@ regtail(rxpos p, rxpos val) rxpos temp; int offset; - if (regstr == REGDUMMY) - return; - /* Find last node. */ scan = p; for (;;) { + if (scan + 2 >= regcodesize) { + return; + } temp = regnext(scan); if (temp == 0) break; scan = temp; } - if (OP(scan) == BACK) + if (scan + 2 >= regcodesize) { + return; + } + + if (rOP(scan) == BACK) offset = scan - val; else offset = val - scan; @@ -912,16 +2136,72 @@ static void regoptail(rxpos p, rxpos val) { /* "Operandless" and "op != BRANCH" are synonymous in practice. */ - if (p == 0 || regstr == REGDUMMY || OP(p) != BRANCH) + if (p == 0 || (p >= regcodesize) || rOP(p) != BRANCH) { return; + } regtail(OPERAND(p), val); } -static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif - rxpos l_strchr(char *str, rxpos a, int l, int c) +static int merge_tables(Scheme_Hash_Table *dest, Scheme_Hash_Table *src) +{ + int i; + + for (i = src->size; i--; ) { + if (src->vals[i]) { + scheme_hash_set(dest, src->keys[i], src->vals[i]); + } + } + + return 1; +} + +static int check_and_propagate_depends(void) +{ + int i, j; + Scheme_Hash_Table *backdepends = regbackdepends, *ht, *next_ht = NULL; + Scheme_Object *v; + + while (backdepends) { + for (i = backdepends->size; i--; ) { + if (backdepends->vals[i]) { + if (regbackknown) + v = scheme_hash_get(regbackknown, backdepends->keys[i]); + else + v = NULL; + if (v) { + /* Check assumption: */ + if (SCHEME_FALSEP(v)) { + FAIL("*, +, or {...,} operand could be empty (via empty backreference)"); + } + if (SCHEME_HASHTP(v)) { + /* Check/propagate assumption. The fixpoint direction is + determined by assuming "true" whil erecursively checking. */ + scheme_hash_set(regbackknown, backdepends->keys[i], scheme_true); + if (!next_ht) + next_ht = scheme_make_hash_table(SCHEME_hash_ptr); + ht = (Scheme_Hash_Table *)v; + for (j = ht->size; j--; ) { + if (ht->vals[j]) { + scheme_hash_set(next_ht, ht->keys[j], ht->vals[j]); + } + } + } + } else { + /* Add assumption */ + if (!regbackknown) + regbackknown = scheme_make_hash_table(SCHEME_hash_ptr); + scheme_hash_set(regbackknown, backdepends->keys[i], scheme_true); + } + } + } + backdepends = next_ht; + next_ht = NULL; + } + + return 1; +} + +static MZ_INLINE rxpos l_strchr(char *str, rxpos a, int l, int c) { int i; @@ -933,38 +2213,64 @@ MSC_IZE(inline) return -1; } +static MZ_INLINE rxpos l_strchr_ci(char *str, rxpos a, int l, int c) +{ + int i, ch; + + for (i = 0; i < l; i++) { + ch = str[a + i]; + ch = rx_tolower(ch); + if (ch == c) + return a + i; + } + + return -1; +} + +static MZ_INLINE int in_ranges(char *str, rxpos a, int l, int c) +{ + int i; + + l *= 2; + + for (i = 0; i < l; i += 2) { + if ((UCHAR(str[a + i]) <= c) && (UCHAR(str[a + i + 1]) >= c)) + return 1; + } + + return 0; +} + +static MZ_INLINE int in_ranges_ci(char *str, rxpos a, int l, int c) +{ + int i; + + l *= 2; + + c = rx_tolower(c); + + for (i = 0; i < l; i += 2) { + if ((UCHAR(str[a + i]) <= c) && (UCHAR(str[a + i + 1]) >= c)) + return 1; + } + + return 0; +} + /* * regexec and friends */ -/* - * Work variables for regtry(). - */ -typedef struct Regwork { - MZTAG_IF_REQUIRED - char *str; /* copy of regstr; used only to protect before thread swaps */ - char *instr; - Scheme_Object *port; - Scheme_Object *unless_evt; - short nonblock, aborted; - rxpos instr_size; /* For port reads */ - rxpos input_maxend; /* For port reads */ - rxpos input, input_end; /* String-input pointer. */ - rxpos bol; /* Beginning of input, for ^ check. */ - rxpos *startp; /* Pointer to startp array. */ - rxpos *endp; /* Ditto for endp. */ - Scheme_Object *peekskip; -} Regwork; - /* * Forwards. */ -STATIC int regtry(regexp *, char *, int, int, rxpos *, rxpos *, Regwork *rw, int); +STATIC int regtry(regexp *, char *, int, int, rxpos *, rxpos *, rxpos *, int *, Regwork *rw, rxpos, int, int, int); STATIC int regtry_port(regexp *, Scheme_Object *, Scheme_Object *, int nonblock, - rxpos *, rxpos *, - char **, rxpos *, rxpos *, rxpos, Scheme_Object*, Scheme_Object*, int); + rxpos *, rxpos *, rxpos *, int *, + char **, rxpos *, rxpos *, rxpos, Scheme_Object*, Scheme_Object*, rxpos, int, int, + int); STATIC int regmatch(Regwork *rw, rxpos); -STATIC int regrepeat(Regwork *rw, rxpos); +STATIC int regrepeat(Regwork *rw, rxpos, int); #ifdef DEBUG int regnarrate = 0; @@ -983,7 +2289,7 @@ regexec(const char *who, /* used only for strings: */ int stringpos, int stringlen, /* Always used: */ - rxpos *startp, rxpos *endp, + rxpos *startp, rxpos *maybep, rxpos *endp, Scheme_Object *port, Scheme_Object *unless_evt, int nonblock, /* Used only when port is non-NULL: */ char **stringp, int peek, int get_offsets, @@ -991,11 +2297,11 @@ regexec(const char *who, Scheme_Object *portstart, Scheme_Object *portend, Scheme_Object **_dropped) { int spos; - int slen; + int *counters; Scheme_Object *dropped = NULL, *peekskip = NULL; /* used for ports, only */ /* Check validity of program. */ - if (UCHARAT(prog->program) != MAGIC) { + if (UCHAR(prog->program[0]) != MAGIC) { regerror("corrupted program"); return(0); } @@ -1003,26 +2309,48 @@ regexec(const char *who, /* If there is a "must appear" string, look for it. */ if (!port && (prog->regmust >= 0)) { spos = stringpos; - slen = stringlen; - while ((spos = l_strchr(string, spos, slen, - (ITO(prog->program, (char *)prog) XFORM_OK_PLUS prog->regmust)[0])) != -1) { - int i, l = prog->regmlen; + while (1) { + int i, l = prog->regmlen, ch, pos; + GC_CAN_IGNORE char *p; + + if ((spos - stringpos) + l <= stringlen) { + if (prog->flags & REGEXP_MUST_CI) + pos = l_strchr_ci(string, spos, stringlen - (l - 1), + (ITO(prog->program, (char *)prog) XFORM_OK_PLUS prog->regmust)[0]); + else + pos = l_strchr(string, spos, stringlen - (l - 1), + (ITO(prog->program, (char *)prog) XFORM_OK_PLUS prog->regmust)[0]); + if (pos == -1) + return 0; /* Not present. */ + } else + return 0; /* Not present, since there's not enough room left. */ + /* ASSUMING NO GC HERE! */ - GC_CAN_IGNORE char *p = (ITO(prog->program, (char *)prog) XFORM_OK_PLUS prog->regmust); - slen = stringlen - (spos - stringpos); - for (i = 0; (i < l) && (i < slen); i++) { - if (string[spos + i] != p[i]) - break; + p = (ITO(prog->program, (char *)prog) XFORM_OK_PLUS prog->regmust); + if (prog->flags & REGEXP_MUST_CI) { + for (i = 0; i < l; i++) { + ch = string[pos + i]; + ch = rx_tolower(ch); + if (ch != p[i]) + break; + } + } else { + for (i = 0; i < l; i++) { + if (string[pos + i] != p[i]) + break; + } } if (i >= l) break; /* Found it. */ - spos++; - slen--; + spos = pos + 1; } - if (spos == -1) /* Not present. */ - return 0; } + if (prog->ncounter) { + counters = (int *)scheme_malloc_atomic(sizeof(int) * prog->ncounter); + } else + counters = NULL; + if (port) { if (peek) { peekskip = portstart; @@ -1069,14 +2397,14 @@ regexec(const char *who, } /* Simplest case: anchored match need be tried only once. */ - if (prog->reganch) { + if (prog->flags & REGEXP_ANCH) { if (port) { rxpos len = 0, space = 0; *stringp = NULL; if (regtry_port(prog, port, unless_evt, nonblock, - startp, endp, stringp, &len, &space, 0, - portend, peekskip, 1)) { + startp, maybep, endp, counters, stringp, &len, &space, 0, + portend, peekskip, 0, 1, 1, 0)) { if (!peek) { /* Need to consume matched chars: */ char *drain; @@ -1129,87 +2457,79 @@ regexec(const char *who, return 0; } } else - return regtry(prog, string, stringpos, stringlen, startp, endp, 0, 1); + return regtry(prog, string, stringpos, stringlen, startp, maybep, endp, counters, 0, + stringpos, 1, 1, 0); } /* Messy cases: unanchored match. */ spos = stringpos; - if (!port && (prog->regstart != '\0')) { - /* We know what char the string must start with. */ - while ((spos = l_strchr(string, spos, stringlen - (spos - stringpos), prog->regstart)) != -1) { - if (regtry(prog, string, spos, stringlen - (spos - stringpos), startp, endp, 0, spos == stringpos)) + if (port) { + int at_line_start = 1; + rxpos len = 0, skip = 0, space = 0; + *stringp = NULL; + + do { + int discard = skip - prog->maxlookback; + if (discard >= REGPORT_FLUSH_THRESHOLD) { + if (!peek) { + if (discard_oport) + scheme_put_byte_string(who, discard_oport, *stringp, 0, discard, 0); + + scheme_get_byte_string(who, port, *stringp, 0, discard, 0, 0, 0); + + if (portend) + portend = scheme_bin_minus(portend, scheme_make_integer(discard)); + } else { + peekskip = scheme_bin_plus(peekskip, scheme_make_integer(discard)); + } + + dropped = scheme_bin_plus(dropped, scheme_make_integer(discard)); + + len -= discard; + skip -= discard; + memmove(*stringp, *stringp + discard, len); + } + + if (regtry_port(prog, port, unless_evt, nonblock, + startp, maybep, endp, counters, stringp, &len, &space, skip, + portend, peekskip, 0, !space, at_line_start, 1)) { + if (!peek) { + char *drain; + + if (discard_oport && *startp) + scheme_put_byte_string(who, discard_oport, *stringp, 0, *startp, 0); + + if (get_offsets) + drain = *stringp; + else + /* Allocate fresh in case we get different results from previous peek: */ + drain = (char *)scheme_malloc_atomic(*endp); + + scheme_get_byte_string(who, port, drain, 0, *endp, 0, 0, 0); + } + + *_dropped = dropped; + return 1; - spos++; + } + at_line_start = ((skip < len) && ((*stringp)[skip] == '\n')); + skip++; + } while (len >= skip); + + if (!peek) { + /* If we get here, there must be `len' leftover characters in the port, + and `*stringp' must hold the characters: */ + if (len > 0) { + if (discard_oport) + scheme_put_byte_string(who, discard_oport, *stringp, 0, len, 0); + scheme_get_byte_string(who, port, *stringp, 0, len, 0, 0, 0); + } } } else { - /* We don't know the starting char, or we have a port -- general - case. */ - if (port) { - rxpos len = 0, skip = 0, space = 0; - *stringp = NULL; - - do { - if (skip >= REGPORT_FLUSH_THRESHOLD) { - if (!peek) { - if (discard_oport) - scheme_put_byte_string(who, discard_oport, *stringp, 0, skip, 0); - - scheme_get_byte_string(who, port, *stringp, 0, skip, 0, 0, 0); - - if (portend) - portend = scheme_bin_minus(portend, scheme_make_integer(skip)); - } else { - peekskip = scheme_bin_plus(peekskip, scheme_make_integer(skip)); - } - - dropped = scheme_bin_plus(dropped, scheme_make_integer(skip)); - - len -= skip; - memmove(*stringp, *stringp + skip, len); - skip = 0; - } - - if (regtry_port(prog, port, unless_evt, nonblock, - startp, endp, stringp, &len, &space, skip, - portend, peekskip, !space)) { - if (!peek) { - char *drain; - - if (discard_oport && *startp) - scheme_put_byte_string(who, discard_oport, *stringp, 0, *startp, 0); - - if (get_offsets) - drain = *stringp; - else - /* Allocate fresh in case we get different results from previous peek: */ - drain = (char *)scheme_malloc_atomic(*endp); - - scheme_get_byte_string(who, port, drain, 0, *endp, 0, 0, 0); - } - - *_dropped = dropped; - - return 1; - } - skip++; - } while (len >= skip); - - if (!peek) { - /* If we get here, there must be `len' leftover characters in the port, - and `*stringp' must hold the characters: */ - if (len > 0) { - if (discard_oport) - scheme_put_byte_string(who, discard_oport, *stringp, 0, len, 0); - scheme_get_byte_string(who, port, *stringp, 0, len, 0, 0, 0); - } - } - } else { - rxpos e = stringpos + stringlen; - do { - if (regtry(prog, string, spos, stringlen - (spos - stringpos), startp, endp, 0, spos == stringpos)) - return 1; - } while (spos++ != e); - } + if (regtry(prog, string, spos, stringlen - (spos - stringpos), + startp, maybep, endp, counters, + 0, stringpos, 1, 1, 1)) + return 1; } /* Failure. */ @@ -1220,10 +2540,12 @@ regexec(const char *who, - regtry - try match at specific point */ static int /* 0 failure, 1 success */ -regtry(regexp *prog, char *string, int stringpos, int stringlen, rxpos *startp, rxpos *endp, Regwork *rw, int atstart) +regtry(regexp *prog, char *string, int stringpos, int stringlen, + rxpos *startp, rxpos *maybep, rxpos *endp, int *counters, + Regwork *rw, rxpos stringorigin, int atstart, int atlinestart, + int unanchored) { int i; - GC_CAN_IGNORE rxpos *sp, *ep; Regwork _rw; if (!rw) { @@ -1233,69 +2555,72 @@ regtry(regexp *prog, char *string, int stringpos, int stringlen, rxpos *startp, rw->instr = string; rw->input = stringpos; rw->input_end = stringpos + stringlen; + rw->input_start = stringorigin; rw->startp = startp; + rw->maybep = maybep; rw->endp = endp; + rw->counters = counters; if (atstart) + rw->boi = stringpos; + else + rw->boi = -1; + if (atlinestart) rw->bol = stringpos; else rw->bol = -1; - /* ASSUMING NO GC in this loop: */ - sp = startp; - ep = endp; - for (i = prog->nsubexp; i > 0; i--) { - *sp++ = -1; - *ep++ = -1; + for (i = prog->nsubexp; i--; ) { + startp[i] = -1; + endp[i] = -1; } - sp = ep = NULL; #ifdef INDIRECT_TO_PROGRAM regstr = prog->program; #else regstr = (char *)prog; #endif - if (regmatch(rw, N_ITO_DELTA(prog->program, 1, (char *)prog))) { - startp[0] = stringpos; - endp[0] = rw->input; - return 1; - } else - return 0; -} -/* - - regtry - try match in a port - */ -static int /* 0 failure, 1 success */ -regtry_port(regexp *prog, Scheme_Object *port, Scheme_Object *unless_evt, int nonblock, - rxpos *startp, rxpos *endp, - char **work_string, rxpos *len, rxpos *size, rxpos skip, - Scheme_Object *maxlen, Scheme_Object *peekskip, - int atstart) -{ - int m; - Regwork rw; + while (1) { + int found; - rw.port = port; - rw.unless_evt = unless_evt; - rw.nonblock = (short)nonblock; - rw.aborted = 0; - rw.instr_size = *size; - if (maxlen && SCHEME_INTP(maxlen)) - rw.input_maxend = SCHEME_INT_VAL(maxlen); - else - rw.input_maxend = BIGGEST_RXPOS; - rw.peekskip = peekskip; + found = regmatch(rw, N_ITO_DELTA(prog->program, 1, (char *)prog)); - m = regtry(prog, *work_string, skip, *len - skip, startp, endp, &rw, atstart); - - *work_string = rw.instr; - *len = rw.input_end; - *size = rw.instr_size; - - if (rw.aborted) - return 0; - else - return m; + if (found) { + startp[0] = stringpos; + endp[0] = rw->input; + return 1; + } else if (unanchored) { + if (!stringlen) + return 0; + stringpos++; + --stringlen; + if (prog->regstart) { + unsigned char *rs = prog->regstart; + int c; + while (1) { + if (!stringlen) + return 0; + c = UCHAR(string[stringpos]); + if (rs[c >> 3] & (1 << (c & 0x7))) + break; + stringpos++; + --stringlen; + } + } + if (string[stringpos - 1] == '\n') + rw->bol = stringpos; + else + rw->bol = -1; + rw->boi = -1; + rw->input = stringpos; + for (i = prog->nsubexp; i--; ) { + startp[i] = -1; + endp[i] = -1; + } + /* try again... */ + } else + return 0; + } } #define NEED_INPUT(rw, v, n) if (rw->port && (((v) + (n)) > rw->input_end)) read_more_from_regport(rw, (v) + (n)) @@ -1394,6 +2719,52 @@ static void read_more_from_regport(Regwork *rw, rxpos need_total) } } +/* + - regtry - try match in a port + */ +static int +regtry_port(regexp *prog, Scheme_Object *port, Scheme_Object *unless_evt, int nonblock, + rxpos *startp, rxpos *maybep, rxpos *endp, int *counters, + char **work_string, rxpos *len, rxpos *size, rxpos skip, + Scheme_Object *maxlen, Scheme_Object *peekskip, + rxpos origin, int atstart, int atlinestart, + int read_at_least_one) +{ + int m; + Regwork rw; + + rw.port = port; + rw.unless_evt = unless_evt; + rw.nonblock = (short)nonblock; + rw.aborted = 0; + rw.instr_size = *size; + if (maxlen && SCHEME_INTP(maxlen)) + rw.input_maxend = SCHEME_INT_VAL(maxlen); + else + rw.input_maxend = BIGGEST_RXPOS; + rw.peekskip = peekskip; + + m = regtry(prog, *work_string, skip, (*len) - skip, + startp, maybep, endp, counters, + &rw, origin, atstart, atlinestart, 0); + + if (read_at_least_one + && !rw.aborted + && (rw.input_end == skip) + && rw.port) { + read_more_from_regport(&rw, rw.input_end + 1); + } + + *work_string = rw.instr; + *len = rw.input_end; + *size = rw.instr_size; + + if (rw.aborted) + return 0; + else + return m; +} + #ifdef DO_STACK_CHECK static Scheme_Object *regmatch_k(void) @@ -1427,7 +2798,8 @@ static int /* 0 failure, 1 success */ regmatch(Regwork *rw, rxpos prog) { rxpos scan; /* Current node. */ - rxpos next; /* Next node. */ + rxpos is; /* Input string pos */ + int the_op; #ifdef DO_STACK_CHECK { @@ -1464,255 +2836,672 @@ regmatch(Regwork *rw, rxpos prog) regstr = rs; } + is = rw->input; scan = prog; while (scan != 0) { - next = regnext(scan); - - switch (OP(scan)) { - case BOL: - if (rw->input != rw->bol) + the_op = rOP(scan); + switch (the_op) { + case BOI: + if (is != rw->boi) return(0); + scan = NEXT_OP(scan); + break; + case EOI: + NEED_INPUT(rw, is, 1); + if (is != rw->input_end) + return(0); + scan = NEXT_OP(scan); + break; + case BOL: + if ((is != rw->bol) + && ((is <= rw->input_start) + || (rw->instr[is - 1] != '\n'))) + return(0); + scan = NEXT_OP(scan); break; case EOL: - NEED_INPUT(rw, rw->input, 1); - if (rw->input != rw->input_end) - return(0); + NEED_INPUT(rw, is, 1); + if (is != rw->input_end) { + if (rw->instr[is] != '\n') + return(0); + } + scan = NEXT_OP(scan); break; case ANY: - NEED_INPUT(rw, rw->input, 1); - if (rw->input == rw->input_end) + NEED_INPUT(rw, is, 1); + if (is == rw->input_end) return(0); - rw->input++; + is++; + scan = NEXT_OP(scan); break; - case EXACTLY: { - int len, i; - rxpos opnd; + case ANYL: + NEED_INPUT(rw, is, 1); + if (is == rw->input_end) + return(0); + if (rw->instr[is] == '\n') + return 0; + is++; + scan = NEXT_OP(scan); + break; + case EXACTLY: + { + int len, i; + rxpos opnd; - opnd = OPSTR(OPERAND(scan)); - len = OPLEN(OPERAND(scan)); - if (rw->port) { - /* Like the other branch, but demand chars one at a time, as - we need them */ - for (i = 0; i < len; i++) { - NEED_INPUT(rw, rw->input + i, 1); - if (rw->input + i >= rw->input_end) - return 0; - if (regstr[opnd+i] != rw->instr[rw->input+i]) - return 0; - } - } else { - if (len > rw->input_end - rw->input) - return 0; - for (i = 0; i < len; i++) { - if (regstr[opnd+i] != rw->instr[rw->input+i]) + opnd = OPSTR(OPERAND(scan)); + len = rOPLEN(OPERAND(scan)); + if (rw->port) { + /* Like the other branch, but demand chars one at a time, as + we need them */ + for (i = 0; i < len; i++) { + NEED_INPUT(rw, is + i, 1); + if (is + i >= rw->input_end) + return 0; + if (regstr[opnd+i] != rw->instr[is+i]) + return 0; + } + } else { + if (len > rw->input_end - is) return 0; + for (i = 0; i < len; i++) { + if (regstr[opnd+i] != rw->instr[is+i]) + return 0; + } } + is += len; } - rw->input += len; - } + scan = NEXT_OP(scan); + break; + case EXACTLY_CI: + { + int len, i; + char c; + rxpos opnd; + + opnd = OPSTR(OPERAND(scan)); + len = rOPLEN(OPERAND(scan)); + if (rw->port) { + /* Like the other branch, but demand chars one at a time, as + we need them */ + for (i = 0; i < len; i++) { + NEED_INPUT(rw, is + i, 1); + if (is + i >= rw->input_end) + return 0; + c = rw->instr[is+i]; + c = rx_tolower(c); + if (regstr[opnd+i] != c) + return 0; + } + } else { + if (len > rw->input_end - is) + return 0; + for (i = 0; i < len; i++) { + c = rw->instr[is+i]; + c = rx_tolower(c); + if (regstr[opnd+i] != c) + return 0; + } + } + is += len; + } + scan = NEXT_OP(scan); break; case ANYOF: - NEED_INPUT(rw, rw->input, 1); - if (rw->input == rw->input_end || (l_strchr(regstr, OPSTR(OPERAND(scan)), - OPLEN(OPERAND(scan)), - rw->instr[rw->input]) == -1)) - return(0); - rw->input++; - break; - case ANYBUT: - NEED_INPUT(rw, rw->input, 1); - if (rw->input == rw->input_end || (l_strchr(regstr, OPSTR(OPERAND(scan)), - OPLEN(OPERAND(scan)), - rw->instr[rw->input]) != -1)) - return(0); - rw->input++; - break; - case INRANGE: { - int lo, hi; - lo = ((unsigned char *)(regstr + OPERAND(scan)))[0]; - hi = ((unsigned char *)(regstr + OPERAND(scan)))[1]; - NEED_INPUT(rw, rw->input, 1); - if (rw->input == rw->input_end - || (((unsigned char *)rw->instr)[rw->input] < lo) - || (((unsigned char *)rw->instr)[rw->input] > hi)) + int c; + NEED_INPUT(rw, is, 1); + if (is == rw->input_end) + return 0; + c = UCHAR(rw->instr[is]); + if (!(regstr[OPERAND(scan) + (c >> 3)] & (1 << (c & 0x7)))) return(0); - rw->input++; + is++; + scan = NEXT_OP(scan); + } + break; + case EXACTLY1: + NEED_INPUT(rw, is, 1); + if (is == rw->input_end) + return 0; + if (rw->instr[is] != regstr[OPERAND(scan)]) + return 0; + is++; + scan = NEXT_OP(scan); + break; + case RANGE: + { + int c; + NEED_INPUT(rw, is, 1); + if (is == rw->input_end) + return 0; + c = UCHAR(rw->instr[is]); + if ((c < UCHAR(regstr[OPERAND(scan)])) + || (c > UCHAR(regstr[OPERAND(scan)+1]))) + return(0); + is++; + scan = NEXT_OP(scan); + } + break; + case NOTRANGE: + { + int c; + NEED_INPUT(rw, is, 1); + if (is == rw->input_end) + return 0; + c = UCHAR(rw->instr[is]); + if ((c >= UCHAR(regstr[OPERAND(scan)])) + && (c <= UCHAR(regstr[OPERAND(scan)+1]))) + return(0); + is++; + scan = NEXT_OP(scan); } break; case NOTHING: + scan = NEXT_OP(scan); break; case BACK: + scan = scan - rNEXT(scan); break; - case BRANCH: { - rxpos save; + case BRANCH: + { + rxpos delta; + rxpos next; /* Next node. */ - if (OP(next) != BRANCH) /* No choice. */ - next = OPERAND(scan); /* Avoid recursion. */ - else { - do { - save = rw->input; - if (regmatch(rw, OPERAND(scan))) - return(1); - rw->input = save; - scan = regnext(scan); - } while (scan != 0 && OP(scan) == BRANCH); - return(0); - /* NOTREACHED */ + next = NEXT_OP(scan); + + if (rOP(next) != BRANCH) /* No choice. */ + scan = OPERAND(scan); /* Avoid recursion. */ + else { + do { + rw->input = is; + if (regmatch(rw, OPERAND(scan))) + return(1); + scan = next; + delta = rNEXT(scan); + if (!delta) + break; + next = scan + delta; + } while (rOP(next) == BRANCH); + scan = OPERAND(scan); + } } - } break; case STAR: case PLUS: case STAR2: - case PLUS2: { - char nextch; - int no; - rxpos save; - int min; - int nongreedy = (OP(scan) == STAR2 || OP(scan) == PLUS2); - - /* - * Lookahead to avoid useless match attempts - * when we know what character comes next. - */ - nextch = '\0'; - if (OP(next) == EXACTLY) - nextch = regstr[OPSTR(OPERAND(next))]; - min = ((OP(scan) == STAR) || (OP(scan) == STAR2)) ? 0 : 1; - save = rw->input; - - if (nongreedy && rw->port) { - /* Get at least one, but then don't - let regrepeat pull in arbitrary code: */ - Scheme_Object *saveport; - NEED_INPUT(rw, save, 1); - saveport = rw->port; - rw->port = NULL; - no = regrepeat(rw, OPERAND(scan)); - rw->port = saveport; - nongreedy = 2; - } else - no = regrepeat(rw, OPERAND(scan)); - - if (!nongreedy) { - while (no >= min) { - /* If it could work, try it. */ - if (nextch == '\0' || rw->instr[rw->input] == nextch) - if (regmatch(rw, next)) - return(1); - /* Couldn't or didn't -- back up. */ - no--; - rw->input = save + no; + case PLUS2: + case STAR3: + case STAR4: + { + char nextch; + int no; + rxpos save, body; + int min, maxc; + int nongreedy = (the_op == STAR2 || the_op == PLUS2 || the_op == STAR4); + rxpos next; /* Next node. */ + + /* + * Lookahead to avoid useless match attempts + * when we know what character comes next. + */ + nextch = '\0'; + next = NEXT_OP(scan); + if (rOP(next) == EXACTLY) + nextch = regstr[OPSTR(OPERAND(next))]; + if ((the_op == STAR3) || (the_op == STAR4)) { + min = rOPLEN(OPERAND(scan)); + maxc = rOPLEN(OPERAND2(scan)); + body = OPERAND3(scan); + } else { + body = OPERAND(scan); + min = ((the_op == STAR) || (the_op == STAR2)) ? 0 : 1; + maxc = 0; } - } else { - int i; - for (i = min; i <= no; i++) { - rw->input = save + i; - /* If it could work, try it. */ - NEED_INPUT(rw, save + i, 1); - if (nextch == '\0' || rw->instr[rw->input] == nextch) - if (regmatch(rw, next)) { - return(1); + save = is; + + rw->input = is; + if (nongreedy && rw->port) { + /* Get at least one, but then don't + let regrepeat pull in arbitrary code: */ + Scheme_Object *saveport; + NEED_INPUT(rw, save, 1); + saveport = rw->port; + rw->port = NULL; + no = regrepeat(rw, body, maxc); + rw->port = saveport; + nongreedy = 2; + } else + no = regrepeat(rw, body, maxc); + + if (!nongreedy) { + if (nextch) + NEED_INPUT(rw, save + no, 1); + while (no >= min) { + /* If it could work, try it. */ + if (nextch == '\0' || ((save + no < rw->input_end) + && (rw->instr[save + no] == nextch))) { + rw->input = is + no; + if (regmatch(rw, next)) + return(1); + } + /* Couldn't or didn't -- back up. */ + no--; + } + } else { + int i; + for (i = min; i <= no; i++) { + /* If it could work, try it. */ + if (nextch) + NEED_INPUT(rw, save + i, 1); + if (nextch == '\0' || ((save+i < rw->input_end) + && (rw->instr[save+i] == nextch))) { + rw->input = save + i; + if (regmatch(rw, next)) { + return(1); + } } - if ((i == no) && (nongreedy == 2)) { - /* Maybe regrepeat can match more if we let it read from - the port. */ - if ((rw->input_end - save) > no) { - /* We have pulled-in chars to try. */ - int moreno; - Scheme_Object *saveport; + if ((i == no) && (nongreedy == 2)) { + /* Maybe regrepeat can match more if we let it read from + the port. */ + if ((rw->input_end - save) > no) { + /* We have pulled-in chars to try. */ + int moreno; + Scheme_Object *saveport; - saveport = rw->port; - rw->port = NULL; - rw->input = save + no; - moreno = regrepeat(rw, OPERAND(scan)); - rw->port = saveport; + saveport = rw->port; + rw->port = NULL; + is = save + no; + rw->input = is; + moreno = regrepeat(rw, body, maxc ? maxc - no : 0); + rw->port = saveport; - if (!moreno) - nongreedy = 1; - else - no += moreno; + if (!moreno) + nongreedy = 1; + else + no += moreno; + } } } } + return(0); } - return(0); - } break; case END: + case LOOKE: + rw->input = is; return(1); /* Success! */ break; + case BACKREF: + { + int no, len, start, i; + no = rOPLEN(OPERAND(scan)); + if (rw->endp[no] == -1) + return 0; + + start = rw->startp[no]; + len = rw->endp[no] - start; + + if (rw->port) { + /* Like the other branch, but demand chars one at a time, as + we need them */ + for (i = 0; i < len; i++) { + NEED_INPUT(rw, is + i, 1); + if (is + i >= rw->input_end) + return 0; + if (rw->instr[start+i] != rw->instr[is+i]) + return 0; + } + } else { + if (len > rw->input_end - is) + return 0; + for (i = 0; i < len; i++) { + if (rw->instr[start+i] != rw->instr[is+i]) + return 0; + } + } + is += len; + scan = NEXT_OP(scan); + break; + } + case BACKREF_CI: + { + int no, len, start, i, c1, c2; + no = rOPLEN(OPERAND(scan)); + if (rw->endp[no] == -1) + return 0; + + start = rw->startp[no]; + len = rw->endp[no] - start; + + if (rw->port) { + /* Like the other branch, but demand chars one at a time, as + we need them */ + for (i = 0; i < len; i++) { + NEED_INPUT(rw, is + i, 1); + if (is + i >= rw->input_end) + return 0; + c1 = rw->instr[start+i]; + c1 = rx_tolower(c1); + c2 = rw->instr[is+i]; + c2 = rx_tolower(c2); + if (c1 != c2) + return 0; + } + } else { + if (len > rw->input_end - is) + return 0; + for (i = 0; i < len; i++) { + c1 = rw->instr[start+i]; + c1 = rx_tolower(c1); + c2 = rw->instr[is+i]; + c2 = rx_tolower(c2); + if (c1 != c2) + return 0; + } + } + is += len; + scan = NEXT_OP(scan); + break; + } + case LOOKT: + case LOOKF: + case LOOKTX: + case LOOKBT: + case LOOKBF: + { + int t, no, no_start, no_end; + rxpos save, next; + next = NEXT_OP(scan); + t = ((the_op != LOOKF) && (the_op != LOOKBF)); + if ((the_op == LOOKBT) || (the_op == LOOKBF)) { + no_start = rOPLEN(OPERAND2(scan)); + no_end = rOPLEN(OPERAND3(scan)); + } else + no_start = no_end = 0; + save = is; + if (no_end) { + for (no = no_start; no <= no_end; no++) { + if (is - rw->input_start >= no) { + rw->input = save - no; + if (regmatch(rw, next)) { + if (is == save) { + /* Match */ + if (!t) return 0; + break; + } + } + } else { + no = no_end + 1; + break; + } + } + if (no > no_end) { + /* No matches */ + if (t) return 0; + } + } else { + rw->input = is; + if (regmatch(rw, next)) { + if (!t) return 0; + } else { + if (t) return 0; + } + if (the_op == LOOKTX) + is = rw->input; + } + scan = scan + rOPLEN(OPERAND(scan)); + scan = NEXT_OP(scan); + } + break; + case COUNTINIT: + { + int no; + no = rOPLEN(OPERAND(scan)); + rw->counters[no] = 0; + scan = NEXT_OP(scan); + } + break; + case COUNTBACK: + { + int no; + no = rOPLEN(OPERAND(scan)); + rw->counters[no] -= 1; + scan = NEXT_OP(scan); + } + break; + case COUNTBACKFAIL: + { + int no; + no = rOPLEN(OPERAND(scan)); + rw->counters[no] -= 1; + return 0; + } + break; + case COUNTUNDER: + { + int no, maxreps; + no = rOPLEN(OPERAND(scan)); + maxreps = rOPLEN(OPERAND2(scan)); + rw->counters[no]++; + if (maxreps && (rw->counters[no] > maxreps)) + return 0; + scan = NEXT_OP(scan); + } + break; + case COUNTOVER: + { + int no, minreps; + no = rOPLEN(OPERAND(scan)); + minreps = rOPLEN(OPERAND2(scan)); + if (rw->counters[no] < minreps) + return 0; + scan = NEXT_OP(scan); + } + break; + case SAVECONST: + { + int no, len; + no = rOPLEN(OPERAND(scan)); + len = rOPLEN(OPERAND2(scan)); + /* Check that the match happened more than 0 times: */ + if (!len || (is > rw->maybep[no])) { + rw->startp[no] = is - len; + rw->endp[no] = is; + } else { + rw->startp[no] = -1; + rw->endp[no] = -1; + } + scan = NEXT_OP(scan); + } + break; + case MAYBECONST: + { + int no; + no = rOPLEN(OPERAND(scan)); + rw->maybep[no] = is; + scan = NEXT_OP(scan); + } + break; + case WORDBOUND: + { + int c, w1, w2; + NEED_INPUT(rw, is, 1); + if (is > rw->input_start) { + c = rw->instr[is - 1]; + w1 = rx_isword(c); + } else + w1 = 0; + if (is < rw->input_end) { + c = rw->instr[is]; + w2 = rx_isword(c); + } else + w2 = 0; + if (w1 == w2) return 0; + scan = NEXT_OP(scan); + } + break; + case NOTWORDBOUND: + { + int c, w1, w2; + NEED_INPUT(rw, is, 1); + if (is > rw->input_start) { + c = rw->instr[is - 1]; + w1 = rx_isword(c); + } else + w1 = 0; + if (is < rw->input_end) { + c = rw->instr[is]; + w2 = rx_isword(c); + } else + w2 = 0; + if (w1 != w2) return 0; + scan = NEXT_OP(scan); + } + break; + case UNIPROP: + { + unsigned char buf[MAX_UTF8_CHAR_BYTES]; + mzchar us[1]; + int c, data; + int v, pos; + int negate, bottom, top; + + data = rOPLEN(OPERAND(scan)); + + negate = data >> 13; + bottom = (data >> 6) & 0x3F; + top = data & 0x3F; + + NEED_INPUT(rw, rw->input, 1); + if (rw->input < rw->input_end) { + c = UCHAR(rw->instr[rw->input]); + if (c < 128) { + v = c; + pos = 1; + } else { + pos = 1; + buf[0] = c; + while (1) { + v = scheme_utf8_decode_prefix(buf, pos, us, 0); + if (v == 1) { + v = us[0]; + break; + } else if (v < -1) + return 0; + NEED_INPUT(rw, rw->input, pos+1); + if (rw->input + pos < rw->input_end) { + buf[pos] = rw->instr[rw->input + pos]; + pos++; + } else + return 0; + } + } + } else + return 0; + + is += pos; + + v = scheme_general_category(v); + + if (negate) { + if ((v >= bottom) && (v <= top)) + return 0; + } else { + if ((v < bottom) || (v > top)) + return 0; + } + + scan = NEXT_OP(scan); + } + break; + case CONDITIONAL: + { + rxpos test = OPERAND3(scan); + int t; + + if (rOP(test) == BACKREF) { + int no; + no = rOPLEN(OPERAND(test)); + t = (rw->endp[no] > -1); + } else { + rw->input = is; + t = regmatch(rw, test); + } + + if (t) + scan = scan + rOPLEN(OPERAND(scan)); + else + scan = scan + rOPLEN(OPERAND2(scan)); + } + break; default: { int isopen; int no; - rxpos save; - switch (OP(scan)) { + switch (the_op) { case OPENN: isopen = 1; - no = OPLEN(OPERAND(scan)); + no = rOPLEN(OPERAND(scan)); if (!no) no = -1; /* => don't set in result array */ break; case CLOSEN: isopen = 0; - no = OPLEN(OPERAND(scan)); + no = rOPLEN(OPERAND(scan)); if (!no) no = -1; /* => don't set in result array */ break; default: - if (OP(scan) < CLOSE) { + if (the_op < CLOSE) { isopen = 1; - no = OP(scan) - OPEN; + no = the_op - OPEN; } else { isopen = 0; - no = OP(scan) - CLOSE; + no = the_op - CLOSE; } } if (no < 0) { /* No need to recur */ + scan = NEXT_OP(scan); } else { - save = rw->input; + rxpos next; + next = NEXT_OP(scan); + rw->input = is; + if (isopen) { - if (regmatch(rw, next)) { - if (no >= 0) { - /* - * Don't set startp if some later - * invocation of the same parentheses - * already has. - */ - if (rw->startp[no] == -1) - rw->startp[no] = save; - } + int oldmaybe; + oldmaybe = rw->maybep[no]; + rw->maybep[no] = is; + if (regmatch(rw, next)) return(1); - } else + else { + rw->maybep[no] = oldmaybe; return(0); + } } else { + int oldstart, oldend; + + oldstart = rw->startp[no]; + oldend = rw->endp[no]; + rw->startp[no] = rw->maybep[no]; + rw->endp[no] = is; + if (regmatch(rw, next)) { - if (no >= 0) { - /* - * Don't set endp if some later - * invocation of the same parentheses - * already has. - */ - if (rw->endp[no] == -1) - rw->endp[no] = save; - } return(1); - } else - return(0); + } else { + rw->startp[no] = oldstart; + rw->endp[no] = oldend; + return(0); + } } } } break; } - - scan = next; } /* @@ -1727,7 +3516,7 @@ regmatch(Regwork *rw, rxpos prog) - regrepeat - repeatedly match something simple, report how many */ static int -regrepeat(Regwork *rw, rxpos p) +regrepeat(Regwork *rw, rxpos p, int maxc) { int count = 0; rxpos scan; @@ -1735,15 +3524,37 @@ regrepeat(Regwork *rw, rxpos p) scan = rw->input; opnd = OPERAND(p); - switch (OP(p)) { + switch (rOP(p)) { case ANY: - /* need all port input: */ - while (rw->port) { - read_more_from_regport(rw, rw->input_end + 4096); + if (rw->port) { + if (maxc) { + while (rw->port && (rw->input_end < scan + maxc)) { + read_more_from_regport(rw, scan + maxc); + } + } else { + /* need all port input: */ + while (rw->port) { + read_more_from_regport(rw, rw->input_end + 4096); + } + } } count = rw->input_end - scan; + if (maxc && (count > maxc)) + count = maxc; scan += count; break; + case ANYL: + { + NEED_INPUT(rw, scan, 1); + while (scan != rw->input_end + && (rw->instr[scan] != '\n')) { + count++; + scan++; + if (maxc) { maxc--; if (!maxc) break; } + NEED_INPUT(rw, scan, 1); + } + } + break; case EXACTLY: { rxpos opnd2 = OPSTR(opnd); @@ -1752,42 +3563,139 @@ regrepeat(Regwork *rw, rxpos p) && (regstr[opnd2] == rw->instr[scan])) { count++; scan++; + if (maxc) { maxc--; if (!maxc) break; } + NEED_INPUT(rw, scan, 1); + } + } + break; + case EXACTLY_CI: + { + char c; + rxpos opnd2 = OPSTR(opnd); + NEED_INPUT(rw, scan, 1); + while (scan != rw->input_end) { + c = rw->instr[scan]; + c = rx_tolower(c); + if (regstr[opnd2] != c) + break; + count++; + scan++; + if (maxc) { maxc--; if (!maxc) break; } NEED_INPUT(rw, scan, 1); } } break; case ANYOF: - NEED_INPUT(rw, scan, 1); - while (scan != rw->input_end - && (l_strchr(regstr, OPSTR(opnd), OPLEN(opnd), rw->instr[scan]) != -1)) { - count++; - scan++; - NEED_INPUT(rw, scan, 1); - } - break; - case ANYBUT: - NEED_INPUT(rw, scan, 1); - while (scan != rw->input_end - && (l_strchr(regstr, OPSTR(opnd), OPLEN(opnd), rw->instr[scan]) == -1)) { - count++; - scan++; - NEED_INPUT(rw, scan, 1); - } - break; - case INRANGE: - NEED_INPUT(rw, scan, 1); { - int lo, hi; - lo = ((unsigned char *)(regstr + opnd))[0]; - hi = ((unsigned char *)(regstr + opnd))[1]; - NEED_INPUT(rw, scan, 1); - while (scan != rw->input_end - && (((unsigned char *)rw->instr)[scan] >= lo) - && (((unsigned char *)rw->instr)[scan] <= hi)) { - scan++; - count++; + int c; + rxpos init = scan; + if (rw->port || maxc) { + /* Slow but general version */ NEED_INPUT(rw, scan, 1); + while (scan != rw->input_end) { + c = UCHAR(rw->instr[scan]); + if (!(regstr[opnd + (c >> 3)] & (1 << (c & 0x7)))) + break; + scan++; + if (maxc) { maxc--; if (!maxc) break; } + NEED_INPUT(rw, scan, 1); + } + } else { + /* Fast version */ + int e = rw->input_end; + while (scan != e) { + c = UCHAR(rw->instr[scan]); + if (!(regstr[opnd + (c >> 3)] & (1 << (c & 0x7)))) + break; + scan++; + } } + count = scan - init; + } + break; + case EXACTLY1: + { + rxpos init = scan; + char c; + c = regstr[opnd]; + if (rw->port || maxc) { + /* Slow but general version */ + NEED_INPUT(rw, scan, 1); + while ((scan != rw->input_end) + && (rw->instr[scan] == c)) { + scan++; + if (maxc) { maxc--; if (!maxc) break; } + NEED_INPUT(rw, scan, 1); + } + } else { + /* Fast version */ + int e = rw->input_end; + while ((scan != e) + && (rw->instr[scan] == c)) { + scan++; + } + } + count = scan - init; + } + break; + case RANGE: + { + rxpos init = scan; + int c, sr, er; + NEED_INPUT(rw, scan, 1); + sr = UCHAR(regstr[opnd]); + er = UCHAR(regstr[opnd + 1]); + if (rw->port || maxc) { + /* Slow but general version */ + while (scan != rw->input_end) { + c = UCHAR(rw->instr[scan]); + if ((c < sr) || (c > er)) + break; + scan++; + if (maxc) { maxc--; if (!maxc) break; } + NEED_INPUT(rw, scan, 1); + } + } else { + /* Fast version */ + int e = rw->input_end; + while (scan != e) { + c = UCHAR(rw->instr[scan]); + if ((c < sr) || (c > er)) + break; + scan++; + } + } + count = scan - init; + } + break; + case NOTRANGE: + { + rxpos init = scan; + int c, sr, er; + NEED_INPUT(rw, scan, 1); + sr = UCHAR(regstr[opnd]); + er = UCHAR(regstr[opnd + 1]); + if (rw->port || maxc) { + /* Slow but general version */ + while (scan != rw->input_end) { + c = UCHAR(rw->instr[scan]); + if ((c >= sr) && (c <= er)) + break; + scan++; + if (maxc) { maxc--; if (!maxc) break; } + NEED_INPUT(rw, scan, 1); + } + } else { + /* Fast version */ + int e = rw->input_end; + while (scan != e) { + c = UCHAR(rw->instr[scan]); + if ((c >= sr) && (c <= er)) + break; + scan++; + } + } + count = scan - init; } break; default: /* Oh dear. Called inappropriately. */ @@ -1808,14 +3716,14 @@ regnext(rxpos p) { int offset; - if (regstr == REGDUMMY) + if (p + 2 >= regcodesize) return 0; - offset = NEXT(p); + offset = rNEXT(p); if (offset == 0) return 0; - if (OP(p) == BACK) + if (rOP(p) == BACK) return (p-offset); else return (p+offset); @@ -1852,7 +3760,8 @@ regstrcspn(char *s1, char *e1, char *s2) - regsub - perform substitutions after a regexp match */ static -char *regsub(regexp *prog, char *src, int sourcelen, long *lenout, char *insrc, rxpos *startp, rxpos *endp) +char *regsub(regexp *prog, char *src, int sourcelen, long *lenout, char *insrc, + rxpos *startp, rxpos *endp) { char *dest; char c; @@ -2178,11 +4087,25 @@ static unsigned char *add_range(unsigned char *r, int *_j, RoomState *rs, return add_byte_range(lo, hi, count, r, _j, rs, did_alt, 0); } -static int translate(unsigned char *s, int len, char **result) +static int need_ci_alternates(unsigned char *s, int delta, int len) { - int j; + mzchar us[1], c; + + scheme_utf8_decode(s, delta, len, us, 0, 1, NULL, 0, 0); + c = us[0]; + + return ((c != scheme_toupper(c)) + || (c != scheme_tolower(c)) + || (c != scheme_tofold(c)) + || (c != scheme_totitle(c))); +} + +static int translate(unsigned char *s, int len, char **result, int pcre) +{ + int j, parse_flags = PARSE_CASE_SENS | PARSE_SINGLE_LINE; RoomState rs; unsigned char *r; + Scheme_Object *parse_params = NULL; rs.orig_len = len; rs.size = len; @@ -2212,6 +4135,8 @@ static int translate(unsigned char *s, int len, char **result) while ((k < len) && (s[k] != ']')) { if (s[k] > 127) saw_big = 1; + if (pcre && (s[k] == '\\') && (k + 1 < len)) + k++; k++; } if ((k >= len) || (!saw_big && !not_mode)) { @@ -2247,23 +4172,73 @@ static int translate(unsigned char *s, int len, char **result) while (p < ulen) { if (((p + 2) < ulen) - && us[p+1] == '-') { + && us[p+1] == '-' + && (!pcre || ((us[p] != '\\') && (us[p+2] != '\\')))) { int beg = us[p], end = us[p+2]; if (end == '-') { FAIL("misplaced hypen within square brackets in pattern"); - return 0; } if (end < beg) { /* Bad regexp */ FAIL("invalid range within square brackets in pattern"); - return 0; } if ((beg > 127) || (end > 127)) { /* A big-char range */ - ranges = scheme_make_pair(scheme_make_pair(scheme_make_integer_value_from_unsigned(us[p]), - scheme_make_integer_value_from_unsigned(us[p+2])), + ranges = scheme_make_pair(scheme_make_pair(scheme_make_integer_value_from_unsigned(beg), + scheme_make_integer_value_from_unsigned(end)), ranges); + if (!(parse_flags & PARSE_CASE_SENS)) { + /* Try to build up parallel ranges, though they may + not turn out to be parallel. If the ranges overlap, + we'll clean them up in the final sort-and-merge + pass for the whole ranges list. */ + int c, beg2, end2, c2, mode; + for (mode = 0; mode < 4; mode++) { + for (c = beg; c <= end; c++) { + switch (mode) { + case 0: + beg2 = scheme_tofold(c); + break; + case 1: + beg2 = scheme_tolower(c); + break; + case 2: + beg2 = scheme_toupper(c); + break; + case 3: + default: + beg2 = scheme_totitle(c); + break; + } + if (c != beg2) { + end2 = beg2; + for (; c <= end; c++) { + switch (mode) { + case 0: + c2 = scheme_tofold(c); + break; + case 1: + c2 = scheme_tolower(c); + break; + case 2: + c2 = scheme_toupper(c); + break; + case 3: + default: + c2 = scheme_totitle(c); + break; + } + if ((c2 == c) || (c2 != end2 + 1)) + break; + } + ranges = scheme_make_pair(scheme_make_pair(scheme_make_integer_value_from_unsigned(beg2), + scheme_make_integer_value_from_unsigned(end2)), + ranges); + } + } + } + } } else { /* Small range */ int w; @@ -2272,10 +4247,52 @@ static int translate(unsigned char *s, int len, char **result) } } p += 3; + } else if (pcre && (us[p] == '\\')) { + if ((p + 1) < ulen) { + int c = us[p + 1]; + if (((c >= 'a') && (c <= 'z')) + || ((c >= 'A') && (c <= 'Z'))) { + regcharclass(c, simple_on); + p++; + } else if (c < 128) { + simple_on[c] = 1; + p++; + } else { + /* Let next iteration handle it. + (There's no danger of using it as a meta-character.) */ + } + } else + FAIL("trailing \\ in pattern"); } else if (us[p] > 127) { - ranges = scheme_make_pair(scheme_make_pair(scheme_make_integer_value_from_unsigned(us[p]), - scheme_make_integer_value_from_unsigned(us[p])), + int c = us[p]; + ranges = scheme_make_pair(scheme_make_pair(scheme_make_integer_value_from_unsigned(c), + scheme_make_integer_value_from_unsigned(c)), ranges); + if (!(parse_flags & PARSE_CASE_SENS)) { + int mode, c2; + for (mode = 0; mode < 4; mode++) { + switch (mode) { + case 0: + c2 = scheme_tofold(c); + break; + case 1: + c2 = scheme_tolower(c); + break; + case 2: + c2 = scheme_toupper(c); + break; + case 3: + default: + c2 = scheme_totitle(c); + break; + } + if (c2 != c) { + ranges = scheme_make_pair(scheme_make_pair(scheme_make_integer_value_from_unsigned(c2), + scheme_make_integer_value_from_unsigned(c2)), + ranges); + } + } + } p++; } else { if (((p + 1) < ulen) && (us[p] == '-')) { @@ -2311,6 +4328,15 @@ static int translate(unsigned char *s, int len, char **result) } } + if (!(parse_flags & PARSE_CASE_SENS)) { + for (p = 'a'; p <= 'z'; p++) { + if (simple_on[p]) + simple_on[rx_toupper(p)] = 1; + if (simple_on[rx_toupper(p)]) + simple_on[p] = 1; + } + } + /* Count simples that are on */ on_count = 0; for (p = 0; p < 128; p++) { @@ -2323,7 +4349,7 @@ static int translate(unsigned char *s, int len, char **result) /* Start with "(?:[...]|" for simples. */ unsigned int last_end; int did_alt; - r = make_room(r, j, 6 + (128 - on_count), &rs); + r = make_room(r, j, 6 + (128 - on_count) + ((pcre && !simple_on['\\']) ? 1 : 0), &rs); r[j++] = '('; r[j++] = '?'; r[j++] = ':'; @@ -2339,10 +4365,14 @@ static int translate(unsigned char *s, int len, char **result) if (!simple_on[']']) r[j++] = ']'; for (p = 0; p < 128; p++) { - if ((p != '-') && (p != ']')) + if ((p != '-') && (p != ']') && (!pcre || (p != '\\'))) if (!simple_on[p]) r[j++] = p; } + if (pcre && !simple_on['\\']) { + r[j++] = '\\'; + r[j++] = '\\'; + } if (!simple_on['-']) r[j++] = '-'; r[j++] = ']'; @@ -2375,7 +4405,7 @@ static int translate(unsigned char *s, int len, char **result) /* Normal mode */ /* Start with "(?:[...]|" for simples. */ int p, did_alt; - r = make_room(r, j, 5 + on_count, &rs); + r = make_room(r, j, 5 + on_count + ((pcre && simple_on['\\']) ? 1 : 0), &rs); r[j++] = '('; r[j++] = '?'; r[j++] = ':'; @@ -2391,10 +4421,14 @@ static int translate(unsigned char *s, int len, char **result) if (simple_on[']']) r[j++] = ']'; for (p = 0; p < 128; p++) { - if ((p != '-') && (p != ']')) + if ((p != '-') && (p != ']') && (!pcre || (p != '\\'))) if (simple_on[p]) r[j++] = p; } + if (pcre && simple_on['\\']) { + r[j++] = '\\'; + r[j++] = '\\'; + } if (simple_on['-']) r[j++] = '-'; r[j++] = ']'; @@ -2422,15 +4456,26 @@ static int translate(unsigned char *s, int len, char **result) } } else r[j++] = s[rs.i++]; - } else if (s[rs.i] == '.') { + } else if ((s[rs.i] == '.') + && (!pcre + || (rs.i < 3) + || (s[rs.i-1] != '{') + || ((s[rs.i-2] == 'p') + && (s[rs.i-2] == 'P')) + || (s[rs.i-3] != '\\'))) { /* "." has to be expanded. */ - r = make_room(r, j, 8, &rs); + r = make_room(r, j, (parse_flags & PARSE_SINGLE_LINE) ? 9 : 8, &rs); r[j++] = '('; r[j++] = '?'; r[j++] = ':'; r[j++] = '['; r[j++] = '\00'; r[j++] = '-'; + if (!(parse_flags & PARSE_SINGLE_LINE)) { + r[j++] = '\n' - 1; + r[j++] = '\n' + 1; + r[j++] = '-'; + } r[j++] = '\177'; r[j++] = ']'; r = add_range(r, &j, &rs, 128, 0xD7FF, 0); @@ -2446,15 +4491,60 @@ static int translate(unsigned char *s, int len, char **result) } if ((k < len) && ((s[k] == '+') || (s[k] == '*') - || (s[k] == '?'))) { + || (s[k] == '?') + || (!(parse_flags & PARSE_CASE_SENS) + && need_ci_alternates(s, rs.i, k)))) { /* Need to translate; wrap char in (?: ...) */ + int orig_i; r = make_room(r, j, 4, &rs); r[j++] = '('; r[j++] = '?'; r[j++] = ':'; + orig_i = rs.i; while (rs.i < k) { r[j++] = s[rs.i++]; } + if (!(parse_flags & PARSE_CASE_SENS)) { + /* Add alternates for different cases: */ + mzchar us[1], c0, c1, wrote[4]; + int clen, ci, num_wrote = 1, mode; + unsigned char s2[MAX_UTF8_CHAR_BYTES]; + + scheme_utf8_decode(s, orig_i, k, us, 0, 1, NULL, 0, 0); + c0 = us[0]; + wrote[0] = c0; + for (mode = 0; mode < 4; mode++) { + switch (mode) { + case 0: + c1 = scheme_tofold(c0); + break; + case 1: + c1 = scheme_tolower(c0); + break; + case 2: + c1 = scheme_toupper(c0); + break; + case 3: + default: + c1 = scheme_totitle(c0); + break; + } + for (ci = 0; ci < num_wrote; ci++) { + if (c1 == wrote[ci]) + break; + } + if (ci >= num_wrote) { + wrote[num_wrote++] = c1; + us[0] = c1; + clen = scheme_utf8_encode(us, 0, 1, s2, 0, 0); + r = make_room(r, j, clen + 1, &rs); + r[j++] = '|'; + for (ci = 0; ci < clen; ci++) { + r[j++] = s2[ci]; + } + } + } + } r[j++] = ')'; } else { /* No translation. */ @@ -2463,6 +4553,49 @@ static int translate(unsigned char *s, int len, char **result) } } } else { + /* The translation needs to know about case-insensitive + and single-line modes, so track parens: */ + if (s[rs.i] == '(') { + int old_flags = parse_flags; + if ((rs.i + 1 < len) && (s[rs.i + 1] == '?')) { + int k; + for (k = rs.i + 2; k < len; k++) { + if ((s[k] == ':') + || (s[k] == '<') + || (s[k] == '>') + || (s[k] == '=') + || (s[k] == '!')) + break; + if (s[k] == 'i') { + parse_flags &= ~PARSE_CASE_SENS; + } else if (s[k] == 's') { + parse_flags |= PARSE_SINGLE_LINE; + } else if (s[k] == 'm') { + parse_flags &= ~PARSE_SINGLE_LINE; + } else if (s[k] == '-') { + if (k + 1 < len) { + k++; + if (s[k] == 'i') { + parse_flags |= PARSE_CASE_SENS; + } else if (s[k] == 's') { + parse_flags &= ~PARSE_SINGLE_LINE; + } else if (s[k] == 'm') { + parse_flags |= PARSE_SINGLE_LINE; + } + } + } + } + } + if (parse_params || (parse_flags != old_flags)) { + parse_params = scheme_make_raw_pair(scheme_make_integer(old_flags), + parse_params); + } + } else if (s[rs.i] == ')') { + if (parse_params) { + parse_flags = SCHEME_INT_VAL(SCHEME_CAR(parse_params)); + parse_params = SCHEME_CDR(parse_params); + } + } r[j++] = s[rs.i++]; } } @@ -2476,8 +4609,12 @@ static int translate(unsigned char *s, int len, char **result) /* Scheme front end */ /************************************************************/ +int scheme_is_pregexp(Scheme_Object *o) +{ + return !!(((regexp *)o)->flags & REGEXP_IS_PCRE); +} -static Scheme_Object *do_make_regexp(const char *who, int is_byte, int argc, Scheme_Object *argv[]) +static Scheme_Object *do_make_regexp(const char *who, int is_byte, int pcre, int argc, Scheme_Object *argv[]) { Scheme_Object *re, *bs; char *s; @@ -2497,7 +4634,7 @@ static Scheme_Object *do_make_regexp(const char *who, int is_byte, int argc, Sch slen = SCHEME_BYTE_STRTAG_VAL(bs); if (!is_byte) { - slen = translate((unsigned char *)s, slen, &s); + slen = translate((unsigned char *)s, slen, &s, pcre); #if 0 /* Debugging, to see the translated regexp: */ { @@ -2507,16 +4644,18 @@ static Scheme_Object *do_make_regexp(const char *who, int is_byte, int argc, Sch memcpy(cp, s, slen + 1); for (i = 0; i < slen; i++) { if (!cp[i]) cp[i] = '0'; - } + } printf("%d %s\n", slen, scheme_write_to_string(scheme_make_byte_string(cp), 0)); } #endif } - re = (Scheme_Object *)regcomp(s, 0, slen); + re = (Scheme_Object *)regcomp(s, 0, slen, pcre); if (!is_byte) - ((regexp *)re)->is_utf8 = 1; + ((regexp *)re)->flags |= REGEXP_IS_UTF8; + if (pcre) + ((regexp *)re)->flags |= REGEXP_IS_PCRE; if (SCHEME_IMMUTABLEP(argv[0])) ((regexp *)re)->source = argv[0]; @@ -2533,21 +4672,38 @@ static Scheme_Object *do_make_regexp(const char *who, int is_byte, int argc, Sch 1); ((regexp *)re)->source = src; } + + { + Scheme_Object *b; + b = scheme_get_param(scheme_current_config(), MZCONFIG_USE_JIT); + if (SCHEME_TRUEP(b)) + ((regexp *)re)->flags |= REGEXP_JIT; + } return re; } static Scheme_Object *make_regexp(int argc, Scheme_Object *argv[]) { - return do_make_regexp("byte-regexp", 1, argc, argv); + return do_make_regexp("byte-regexp", 1, 0, argc, argv); } static Scheme_Object *make_utf8_regexp(int argc, Scheme_Object *argv[]) { - return do_make_regexp("regexp", 0, argc, argv); + return do_make_regexp("regexp", 0, 0, argc, argv); } -Scheme_Object *scheme_make_regexp(Scheme_Object *str, int is_byte, int * volatile result_is_err_string) +static Scheme_Object *make_pregexp(int argc, Scheme_Object *argv[]) +{ + return do_make_regexp("byte-pregexp", 1, 1, argc, argv); +} + +static Scheme_Object *make_utf8_pregexp(int argc, Scheme_Object *argv[]) +{ + return do_make_regexp("pregexp", 0, 1, argc, argv); +} + +Scheme_Object *scheme_make_regexp(Scheme_Object *str, int is_byte, int pcre, int * volatile result_is_err_string) { mz_jmp_buf * volatile save, newbuf; Scheme_Object * volatile result; @@ -2559,10 +4715,17 @@ Scheme_Object *scheme_make_regexp(Scheme_Object *str, int is_byte, int * volatil scheme_current_thread->error_buf = &newbuf; failure_msg_for_read = "yes"; if (!scheme_setjmp(newbuf)) { - if (is_byte) - result = make_regexp(1, &str); - else - result = make_utf8_regexp(1, &str); + if (is_byte) { + if (pcre) + result = make_pregexp(1, &str); + else + result = make_regexp(1, &str); + } else { + if (pcre) + result = make_utf8_pregexp(1, &str); + else + result = make_utf8_regexp(1, &str); + } } else { result = (Scheme_Object *)failure_msg_for_read; *result_is_err_string = 1; @@ -2581,13 +4744,23 @@ static regexp *regcomp_object(Scheme_Object *str) return (regexp *)make_utf8_regexp(1, &str); } +long rx_buffer_size; +rxpos *startp_buffer, *endp_buffer, *maybep_buffer; + +void scheme_clear_rx_buffers(void) +{ + startp_buffer = NULL; + endp_buffer = NULL; + maybep_buffer = NULL; +} + static Scheme_Object *gen_compare(char *name, int pos, int argc, Scheme_Object *argv[], int peek, int nonblock) { regexp *r; char *full_s; - rxpos *startp, *endp; + rxpos *startp, *maybep, *endp; int offset = 0, orig_offset, endset, m, was_non_byte; Scheme_Object *iport, *oport = NULL, *startv = NULL, *endv = NULL, *dropped, *unless_evt = NULL; @@ -2704,7 +4877,7 @@ static Scheme_Object *gen_compare(char *name, int pos, orig_offset = offset; offset = 0; endset = blen; - if (r->is_utf8) + if (r->flags & REGEXP_IS_UTF8) was_non_byte = 1; else { /* Convert orig_offset into encoded bytes */ @@ -2716,12 +4889,22 @@ static Scheme_Object *gen_compare(char *name, int pos, } else full_s = NULL; - startp = MALLOC_N_ATOMIC(rxpos, r->nsubexp); - endp = MALLOC_N_ATOMIC(rxpos, r->nsubexp); + if (startp_buffer && (r->nsubexp <= rx_buffer_size)) { + startp = startp_buffer; + maybep = maybep_buffer; + endp = endp_buffer; + startp_buffer = NULL; + } else { + startp = MALLOC_N_ATOMIC(rxpos, r->nsubexp); + maybep = NULL; + endp = MALLOC_N_ATOMIC(rxpos, r->nsubexp); + } + if ((r->nsubexp > 1) && !maybep) + maybep = MALLOC_N_ATOMIC(rxpos, r->nsubexp); dropped = scheme_make_integer(0); - m = regexec(name, r, full_s, offset, endset - offset, startp, endp, + m = regexec(name, r, full_s, offset, endset - offset, startp, maybep, endp, iport, unless_evt, nonblock, &full_s, peek, pos, oport, startv, endv, &dropped); @@ -2733,64 +4916,79 @@ static Scheme_Object *gen_compare(char *name, int pos, if (oport && !iport) scheme_put_byte_string(name, oport, full_s, 0, *startp, 0); - for (i = r->nsubexp; i--; ) { - if (startp[i] != -1) { - if (pos) { - Scheme_Object *startpd, *endpd; + if (pos > 1) { + /* pos == 2 => just get true or false */ + dropped = scheme_true; + } else { + for (i = r->nsubexp; i--; ) { + if (startp[i] != -1) { + if (pos) { + Scheme_Object *startpd, *endpd; - if (was_non_byte) { - /* Need to figure out how startpd and endpd correspond to - code points. Note that the input regexp matches only - unicode chars, so the start and end points can't be in - the middle of encoded characters. */ - int uspd, uepd; - uspd = scheme_utf8_decode((const unsigned char *)full_s, offset, startp[i], - NULL, 0, -1, - NULL, 0, 0); - uspd += orig_offset; - startpd = scheme_make_integer(uspd); - uepd = scheme_utf8_decode((const unsigned char *)full_s, startp[i], endp[i], - NULL, 0, -1, - NULL, 0, 0); - uepd += uspd; - endpd = scheme_make_integer(uepd); - } else { - int v; - v = startp[i] + orig_offset; - startpd = scheme_make_integer(v); - v = endp[i] + orig_offset; - endpd = scheme_make_integer(v); + if (was_non_byte) { + /* Need to figure out how startpd and endpd correspond to + code points. Note that the input regexp matches only + unicode chars, so the start and end points can't be in + the middle of encoded characters. */ + int uspd, uepd; + uspd = scheme_utf8_decode((const unsigned char *)full_s, offset, startp[i], + NULL, 0, -1, + NULL, 0, 0); + uspd += orig_offset; + startpd = scheme_make_integer(uspd); + uepd = scheme_utf8_decode((const unsigned char *)full_s, startp[i], endp[i], + NULL, 0, -1, + NULL, 0, 0); + uepd += uspd; + endpd = scheme_make_integer(uepd); + } else { + int v; + v = startp[i] + orig_offset; + startpd = scheme_make_integer(v); + v = endp[i] + orig_offset; + endpd = scheme_make_integer(v); - if (iport) { - /* Increment by drop count: */ - startpd = scheme_bin_plus(startpd, dropped); - endpd = scheme_bin_plus(endpd, dropped); + if (iport) { + /* Increment by drop count: */ + startpd = scheme_bin_plus(startpd, dropped); + endpd = scheme_bin_plus(endpd, dropped); + } } - } - l = scheme_make_pair(scheme_make_pair(startpd, endpd), - l); - } else { - long len; - len = endp[i] - startp[i]; - if (was_non_byte) { - rs = scheme_make_sized_offset_utf8_string(full_s, startp[i], len); + l = scheme_make_pair(scheme_make_pair(startpd, endpd), + l); } else { - rs = scheme_make_sized_offset_byte_string(full_s, startp[i], len, 1); + long len; + len = endp[i] - startp[i]; + if (was_non_byte) { + rs = scheme_make_sized_offset_utf8_string(full_s, startp[i], len); + } else { + rs = scheme_make_sized_offset_byte_string(full_s, startp[i], len, 1); + } + l = scheme_make_pair(rs, l); } - l = scheme_make_pair(rs, l); - } - } else - l = scheme_make_pair(scheme_false, l); + } else + l = scheme_make_pair(scheme_false, l); + } + dropped = l; } - - return l; } else { if (oport && !iport) scheme_put_byte_string(name, oport, full_s, 0, endset, 0); - return scheme_false; + dropped = scheme_false; } + + if (!startp_buffer || (r->nsubexp > rx_buffer_size)) { + rx_buffer_size = r->nsubexp; + startp_buffer = startp; + maybep_buffer = maybep; + endp_buffer = endp; + } else if (maybep && !maybep_buffer && (r->nsubexp == rx_buffer_size)) { + maybep_buffer = maybep; + } + + return dropped; } static Scheme_Object *compare(int argc, Scheme_Object *argv[]) @@ -2803,6 +5001,11 @@ static Scheme_Object *positions(int argc, Scheme_Object *argv[]) return gen_compare("regexp-match-positions", 1, argc, argv, 0, 0); } +static Scheme_Object *compare_bool(int argc, Scheme_Object *argv[]) +{ + return gen_compare("regexp-match?", 2, argc, argv, 0, 0); +} + static Scheme_Object *compare_peek(int argc, Scheme_Object *argv[]) { return gen_compare("regexp-match-peek", 0, argc, argv, 1, 0); @@ -2839,7 +5042,7 @@ static Scheme_Object *gen_replace(const char *name, int argc, Scheme_Object *arg Scheme_Object *orig; regexp *r; char *source, *prefix = NULL, *deststr; - rxpos *startp, *endp; + rxpos *startp, *maybep, *endp; int prefix_len = 0, sourcelen, srcoffset = 0, was_non_byte, destlen; if (SCHEME_TYPE(argv[0]) != scheme_regexp_type @@ -2857,7 +5060,7 @@ static Scheme_Object *gen_replace(const char *name, int argc, Scheme_Object *arg if (SCHEME_BYTE_STRINGP(argv[2])) { if (SCHEME_CHAR_STRINGP(argv[0]) || ((SCHEME_TYPE(argv[0]) == scheme_regexp_type) - && ((regexp *)argv[0])->is_utf8)) { + && (((regexp *)argv[0])->flags & REGEXP_IS_UTF8))) { if (SCHEME_CHAR_STRINGP(argv[1])) { scheme_arg_mismatch(name, "cannot replace a string with a byte string: ", argv[2]); @@ -2883,7 +5086,7 @@ static Scheme_Object *gen_replace(const char *name, int argc, Scheme_Object *arg if (SCHEME_CHAR_STRINGP(argv[1])) { orig = scheme_char_string_to_byte_string(argv[1]); - if (r->is_utf8) + if (r->flags & REGEXP_IS_UTF8) was_non_byte = 1; else was_non_byte = 0; @@ -2897,12 +5100,16 @@ static Scheme_Object *gen_replace(const char *name, int argc, Scheme_Object *arg destlen = 0; startp = MALLOC_N_ATOMIC(rxpos, r->nsubexp); + if (r->nsubexp > 1) + maybep = MALLOC_N_ATOMIC(rxpos, r->nsubexp); + else + maybep = NULL; endp = MALLOC_N_ATOMIC(rxpos, r->nsubexp); while (1) { int m; - m = regexec(name, r, source, srcoffset, sourcelen - srcoffset, startp, endp, + m = regexec(name, r, source, srcoffset, sourcelen - srcoffset, startp, maybep, endp, NULL, NULL, 0, NULL, 0, 0, NULL, NULL, NULL, NULL); @@ -3061,7 +5268,7 @@ static Scheme_Object *replace_star(int argc, Scheme_Object *argv[]) static Scheme_Object *regexp_p(int argc, Scheme_Object *argv[]) { return (((SCHEME_TYPE(argv[0]) == scheme_regexp_type) - && ((regexp *)argv[0])->is_utf8) + && (((regexp *)argv[0])->flags & REGEXP_IS_UTF8)) ? scheme_true : scheme_false); } @@ -3069,7 +5276,25 @@ static Scheme_Object *regexp_p(int argc, Scheme_Object *argv[]) static Scheme_Object *byte_regexp_p(int argc, Scheme_Object *argv[]) { return (((SCHEME_TYPE(argv[0]) == scheme_regexp_type) - && !((regexp *)argv[0])->is_utf8) + && !(((regexp *)argv[0])->flags & REGEXP_IS_UTF8)) + ? scheme_true + : scheme_false); +} + +static Scheme_Object *pregexp_p(int argc, Scheme_Object *argv[]) +{ + return (((SCHEME_TYPE(argv[0]) == scheme_regexp_type) + && (((regexp *)argv[0])->flags & REGEXP_IS_UTF8) + && (((regexp *)argv[0])->flags & REGEXP_IS_PCRE)) + ? scheme_true + : scheme_false); +} + +static Scheme_Object *byte_pregexp_p(int argc, Scheme_Object *argv[]) +{ + return (((SCHEME_TYPE(argv[0]) == scheme_regexp_type) + && !(((regexp *)argv[0])->flags & REGEXP_IS_UTF8) + && (((regexp *)argv[0])->flags & REGEXP_IS_PCRE)) ? scheme_true : scheme_false); } @@ -3081,7 +5306,7 @@ Scheme_Object *scheme_regexp_source(Scheme_Object *re) int scheme_regexp_is_byte(Scheme_Object *re) { - return !((regexp *)re)->is_utf8; + return !(((regexp *)re)->flags & REGEXP_IS_UTF8); } #ifdef MZ_PRECISE_GC @@ -3100,7 +5325,9 @@ void scheme_regexp_initialize(Scheme_Env *env) REGISTER_SO(regparsestr); REGISTER_SO(regstr); - + REGISTER_SO(regbackknown); + REGISTER_SO(regbackdepends); + scheme_add_global_constant("byte-regexp", scheme_make_prim_w_arity(make_regexp, "byte-regexp", @@ -3111,6 +5338,16 @@ void scheme_regexp_initialize(Scheme_Env *env) "regexp", 1, 1), env); + scheme_add_global_constant("byte-pregexp", + scheme_make_prim_w_arity(make_pregexp, + "byte-pregexp", + 1, 1), + env); + scheme_add_global_constant("pregexp", + scheme_make_prim_w_arity(make_utf8_pregexp, + "pregexp", + 1, 1), + env); scheme_add_global_constant("regexp-match", scheme_make_prim_w_arity(compare, "regexp-match", @@ -3121,6 +5358,11 @@ void scheme_regexp_initialize(Scheme_Env *env) "regexp-match-positions", 2, 5), env); + scheme_add_global_constant("regexp-match?", + scheme_make_prim_w_arity(compare_bool, + "regexp-match?", + 2, 5), + env); scheme_add_global_constant("regexp-match-peek", scheme_make_prim_w_arity(compare_peek, "regexp-match-peek", @@ -3152,16 +5394,23 @@ void scheme_regexp_initialize(Scheme_Env *env) 3, 3), env); scheme_add_global_constant("regexp?", - scheme_make_prim_w_arity(regexp_p, + scheme_make_folding_prim(regexp_p, "regexp?", - 1, 1), + 1, 1, 1), env); scheme_add_global_constant("byte-regexp?", - scheme_make_prim_w_arity(byte_regexp_p, + scheme_make_folding_prim(byte_regexp_p, "byte-regexp?", - 1, 1), + 1, 1, 1), + env); + scheme_add_global_constant("pregexp?", + scheme_make_folding_prim(pregexp_p, + "pregexp?", + 1, 1, 1), + env); + scheme_add_global_constant("byte-pregexp?", + scheme_make_folding_prim(byte_pregexp_p, + "byte-pregexp?", + 1, 1, 1), env); } - -#endif -/* NO_REGEXP_UTILS */ diff --git a/src/mzscheme/src/schgencat.h b/src/mzscheme/src/schgencat.h new file mode 100644 index 0000000000..0ffba7a00e --- /dev/null +++ b/src/mzscheme/src/schgencat.h @@ -0,0 +1,34 @@ + +enum { + mzu_Cn, /* this one should be first */ + mzu_Cc, + mzu_Cf, + mzu_Cs, + mzu_Co, + mzu_Ll, + mzu_Lu, + mzu_Lt, + mzu_Lm, + mzu_Lo, + mzu_Nd, + mzu_Nl, + mzu_No, + mzu_Ps, + mzu_Pe, + mzu_Pi, + mzu_Pf, + mzu_Pc, + mzu_Pd, + mzu_Po, + mzu_Mn, + mzu_Mc, + mzu_Me, + mzu_Sc, + mzu_Sk, + mzu_Sm, + mzu_So, + mzu_Zl, + mzu_Zp, + mzu_Zs +}; +#define mzu_LAST mzu_Zs diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index f0f3b97f96..263ee0133f 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 866 +#define EXPECTED_PRIM_COUNT 871 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 5cfbaaffe0..fb85bccc8c 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -116,6 +116,12 @@ void scheme_clear_ephemerons(void); #define BITS_PER_MZSHORT (8 * sizeof(mzshort)) +#ifndef NO_INLINE_KEYWORD +# define MZ_INLINE MSC_IZE(inline) +#else +# define MZ_INLINE /* empty */ +#endif + /*========================================================================*/ /* initialization */ /*========================================================================*/ @@ -2545,7 +2551,9 @@ 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); -Scheme_Object *scheme_make_regexp(Scheme_Object *str, int byte, int * volatile result_is_err_string); +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); unsigned short * scheme_ucs4_to_utf16(const mzchar *text, int start, int end, unsigned short *buf, int bufsize, long *ulen, int term_size); diff --git a/src/mzscheme/src/schrx.h b/src/mzscheme/src/schrx.h new file mode 100644 index 0000000000..7a52ae915f --- /dev/null +++ b/src/mzscheme/src/schrx.h @@ -0,0 +1,231 @@ + +/* The INDIRECT_TO_PROGRAM mode can be useful for debugging + in 3m to ensure that a regexp "program" is not misinterpreted + as a pointer by the conservative collector. (This was a problem + once, anyway.) */ +/* #define INDIRECT_TO_PROGRAM */ + +typedef long rxpos; + +struct Regwork; + +typedef int (*Scheme_Regexp_Matcher)(struct Regwork *rw); + +typedef struct regexp { + Scheme_Type type; + MZ_HASH_KEY_EX + Scheme_Object *source; + long nsubexp, ncounter, maxlookback; + long regsize; + short flags; + unsigned char *regstart; /* Infor about required starting bytes */ + long regmust; /* pointer relative to self to required starting string */ + long regmlen; /* length of the string at regmust */ +#ifdef INDIRECT_TO_PROGRAM + char *program; +#else + char program[1]; /* Unwarranted chumminess with compiler. */ +#endif +} regexp; + +#define REGEXP_IS_UTF8 0x01 +#define REGEXP_IS_PCRE 0x02 +#define REGEXP_ANCH 0x04 +#define REGEXP_MUST_CI 0x08 +#define REGEXP_JIT 0x10 + +#ifdef INDIRECT_TO_PROGRAM +# define N_ITO_DELTA(prog, extra, re) extra +# define N_ITO_SPACE(v) 0 +# define ITO(x, y) x +#else +# define N_ITO_DELTA(prog, extra, re) ((prog+extra) - re) +# define N_ITO_SPACE(v) v +# define ITO(x, y) y +#endif + +/* 156 is octal 234: */ +#define MAGIC 156 + +/* + * The "internal use only" fields in regexp.h are present to pass info from + * compile to execute that permits the execute phase to run lots faster on + * simple cases. They are: + * + * regstart bitmap for chars that must begin a match; NULL if none obvious + * reganch is the match anchored (at beginning-of-line only)? + * regmust string (pointer into program) that match must include, or NULL + * regmlen length of regmust string + * + * Regstart and reganch permit very fast decisions on suitable starting points + * for a match, cutting down the work a lot. Regmust permits fast rejection + * of lines that cannot possibly match. The regmust tests are costly enough + * that regcomp() supplies a regmust only if the r.e. contains something + * potentially expensive (at present, the only such thing detected is * or + + * at the start of the r.e., which can involve a lot of backup). Regmlen is + * supplied because the test in regexec() needs it and regcomp() is computing + * it anyway. + */ + +/* + * Structure for regexp "program". This is essentially a linear encoding + * of a nondeterministic finite-state machine (aka syntax charts or + * "railroad normal form" in parsing technology). Each node is an opcode + * plus a "next" pointer, possibly plus an operand. "Next" pointers of + * all nodes except BRANCH implement concatenation; a "next" pointer with + * a BRANCH on both ends of it is connecting two alternatives. (Here we + * have one of the subtle syntax dependencies: an individual BRANCH (as + * opposed to a collection of them) is never concatenated with anything + * because of operator precedence.) The operand of some types of node is + * a literal string; for others, it is a node leading into a sub-FSM. In + * particular, the operand of a BRANCH node is the first node of the branch. + * (NB this is *not* a tree structure: the tail of the branch connects + * to the thing following the set of BRANCHes.) The opcodes are: + */ + +/* definition number opnd? meaning */ +#define END 0 /* no End of program. */ +#define BOI 1 /* no Match "" at beginning of input. */ +#define EOI 2 /* no Match "" at end of input. */ +#define ANY 3 /* no Match any one character. */ +#define ANYL 4 /* no Anything but a linefeed */ +#define ANYOF 5 /* bitmap Match any character in the bitmap. */ +#define EXACTLY1 6 /* byte Match the character. */ +#define RANGE 7 /* byte,byte Match any character in this range. */ +#define NOTRANGE 8 /* byte,byte Match any character not in this range. */ +#define BRANCH 9 /* node Match this alternative, or the next... */ +#define BACK 10 /* no Match "", "next" ptr points backward. */ +#define EXACTLY 11 /* str Match this string. */ +#define EXACTLY_CI 12 /* str Match this string. */ +#define NOTHING 13 /* no Match empty string. */ +#define STAR 14 /* node Match this (simple) thing 0 or more times. */ +#define PLUS 15 /* node Match this (simple) thing 1 or more times. */ +#define STAR2 16 /* non-greedy star. */ +#define PLUS2 17 /* non-greedy plus. */ +#define STAR3 18 /* 2 nos Like STAR, but with numeric quantifiers */ +#define STAR4 19 /* 2 nos non-greedy STAR3 */ +#define OPENN 20 /* like OPEN, but with an n >= 50, or n == 0 means (?:...) */ +#define CLOSEN 21 /* like CLOSE, but with an n >= 50 */ +#define LOOKT 22 /* (?=...) or (?<=...)*/ +#define LOOKF 23 /* (?!...) or (?...) */ +#define LOOKBT 25 /* (?<=...)*/ +#define LOOKBF 26 /* (?, to match exactly the result for cluster */ +#define BACKREF_CI 29 /* case-insensitive version */ +#define COUNTINIT 30 +#define COUNTOVER 31 +#define COUNTUNDER 32 +#define COUNTBACK 33 +#define COUNTBACKFAIL 34 +#define SAVECONST 35 /* no no Save position and count */ +#define MAYBECONST 36 /* no no Save position and count */ +#define WORDBOUND 37 +#define NOTWORDBOUND 38 +#define BOL 39 /* no Match "" at beginning of line. */ +#define EOL 40 /* no Match "" at end of line. */ +#define UNIPROP 41 +#define CONDITIONAL 42 +#define OPEN 43 /* no Mark this point in input as start of #n. */ +/* OPEN+1 is number 1, etc. */ +#define CLOSE 77 /* no Analogous to OPEN. */ + +# define OPSTR(o) (o + 2) +# define OPSTRx(o) (o + 1) +# define OPLEN(o, regstr) ((int)(((unsigned char *)regstr)[o] << 8) | (((unsigned char *)regstr)[o+1])) +# define OPRNGS(o, regstr) ((int)(((unsigned char *)regstr)[o])) + +/* + * Opcode notes: + * + * BRANCH The set of branches constituting a single choice are hooked + * together with their "next" pointers, since precedence prevents + * anything being concatenated to any individual branch. The + * "next" pointer of the last BRANCH in a choice points to the + * thing following the whole choice. This is also where the + * final "next" pointer of each individual branch points; each + * branch starts with the operand node of a BRANCH node. + * + * BACK Normal "next" pointers all implicitly point forward; BACK + * exists to make loop structures possible. + * + * STAR,PLUS '?', and complex '*' and '+', are implemented as circular + * BRANCH structures using BACK. Simple cases (one character + * per match) are implemented with STAR and PLUS for speed + * and to minimize recursive plunges. + * + * OPEN,CLOSE ...are numbered at compile time. + */ + +/* + * A node is one char of opcode followed by two chars of "next" pointer. + * "Next" pointers are stored as two 8-bit pieces, high order first. The + * value is a positive offset from the opcode of the node containing it. + * An operand, if any, simply follows the node. (Note that much of the + * code generation knows about this implicit relationship.) + * + * Using two bytes for the "next" pointer is vast overkill for most things, + * but allows patterns to get big without disasters. + */ +#define OP(p, regstr) (regstr[p]) +#define NEXT(p, regstr) (((((unsigned char *)regstr)[(p)+1]&255)<<8) + (((unsigned char *)regstr)[(p)+2]&255)) +#define OPERAND(p) ((p) + 3) +#define OPERAND2(p) ((p) + 5) +#define OPERAND3(p) ((p) + 7) +#define OPERAND4(p) ((p) + 9) + +/* + * See regmagic.h for one further detail of program structure. + */ + + +/* + * Utility definitions. + */ +#define UCHAR(v) ((unsigned char)(v)) + +#define ISMULT(c, parse_flags) ((c) == '*' || (c) == '+' || (c) == '?' || ((parse_flags & PARSE_PCRE) && ((c) == '{'))) +#define META "^$.[()|?+*\\" +#define PCRE_META "^$.[()|?+*\\{}]" + +/* + * Flags to be passed up and down. + */ +#define HASWIDTH 0x01 /* Known never to match null string. */ +#define SIMPLE 0x02 /* Simple enough to be STAR/PLUS operand. */ +#define SPSTART 0x04 /* Starts with * or +. */ +#define SPFIXED 0x08 /* Always matches a particular length */ +#define NEEDSAVECONST 0x10 /* Fixed-size thing inside (), lift out save in case of repeat. */ +#define SPNOTHING 0x20 /* Unconditionally matches nothing. */ +#define WORST 0 /* Worst case. */ + +/* Parser flags: */ +#define PARSE_CASE_SENS 0x1 +#define PARSE_PCRE 0x2 +#define PARSE_SINGLE_LINE 0x4 + +#define rx_tolower(c) (((c >= 'A') && (c <= 'Z')) ? (c + ('a' - 'A')) : c) +#define rx_toupper(c) (((c >= 'a') && (c <= 'z')) ? (c - ('a' - 'A')) : c) +#define rx_isword(c) (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) || ((c >= '0') && (c <= '9')) || (c == '_')) + +/* + * Work variables for regtry(). + */ +typedef struct Regwork { + MZTAG_IF_REQUIRED + char *str; /* copy of regstr; used only to protect before thread swaps */ + char *instr; + Scheme_Object *port; + Scheme_Object *unless_evt; + short nonblock, aborted; + rxpos instr_size; /* For port reads */ + rxpos input_maxend; /* For port reads */ + rxpos input, input_end, input_start; /* String-input pointer. */ + rxpos boi, bol; /* Beginning of input/line, for ^ check. */ + rxpos *startp; /* Pointer to startp array. */ + rxpos *maybep; /* Pointer to tentative startp array. */ + rxpos *endp; /* Ditto for endp. */ + int *counters; /* For {} counters */ + Scheme_Object *peekskip; +} Regwork; diff --git a/src/mzscheme/src/schuchar.inc b/src/mzscheme/src/schuchar.inc index 254f357551..715ee71b08 100644 --- a/src/mzscheme/src/schuchar.inc +++ b/src/mzscheme/src/schuchar.inc @@ -2100,431 +2100,431 @@ static unsigned char udata_cats[] = { /* 1 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 3, 3, 3, 4, 3, 3, 3, 5, 6, 3, 7, 3, 8, 3, 3, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 7, 7, 7, 3, - 3, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 3, 6, 11, 12, - 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 7, 6, 7, 1, + 29, 19, 19, 19, 23, 19, 19, 19, 13, 14, 19, 25, 19, 18, 19, 19, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 19, 19, 25, 25, 25, 19, + 19, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 13, 19, 14, 24, 17, + 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 25, 14, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 3, 4, 4, 4, 4, 14, 14, 11, 14, 13, 15, 7, 16, 14, 11, - 14, 7, 17, 17, 11, 13, 14, 3, 11, 17, 13, 18, 17, 17, 17, 3, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 7, 10, 10, 10, 10, 10, 10, 10, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 13, 13, + 29, 19, 23, 23, 23, 23, 26, 26, 24, 26, 5, 15, 25, 2, 26, 24, + 26, 25, 12, 12, 24, 5, 26, 19, 24, 12, 5, 16, 12, 12, 12, 19, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 25, 6, 6, 6, 6, 6, 6, 6, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 25, 5, 5, 5, 5, 5, 5, 5, 5, /* 2 */ - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13, 10, 13, 10, 13, 10, - 13, 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 10, 13, 10, 13, 10, 13, 13, - 13, 10, 10, 13, 10, 13, 10, 10, 13, 10, 10, 10, 13, 13, 10, 10, - 10, 10, 13, 10, 10, 13, 10, 10, 10, 13, 13, 13, 10, 10, 13, 10, - 10, 13, 10, 13, 10, 13, 10, 10, 13, 10, 13, 13, 10, 13, 10, 10, - 13, 10, 10, 10, 13, 10, 13, 10, 10, 13, 13, 19, 10, 13, 13, 13, - 19, 19, 19, 19, 10, 20, 13, 10, 20, 13, 10, 20, 13, 10, 13, 10, - 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 13, 10, 20, 13, 10, 13, 10, 10, 10, 13, 10, 13, 10, 13, 10, 13, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 5, 6, 5, 6, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 5, 6, 5, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 5, 6, 5, 6, 5, 5, + 5, 6, 6, 5, 6, 5, 6, 6, 5, 6, 6, 6, 5, 5, 6, 6, + 6, 6, 5, 6, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 5, 6, + 6, 5, 6, 5, 6, 5, 6, 6, 5, 6, 5, 5, 6, 5, 6, 6, + 5, 6, 6, 6, 5, 6, 5, 6, 6, 5, 5, 9, 6, 5, 5, 5, + 9, 9, 9, 9, 6, 7, 5, 6, 7, 5, 6, 7, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 5, 6, 7, 5, 6, 5, 6, 6, 6, 5, 6, 5, 6, 5, 6, 5, /* 3 */ - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 13, 13, 13, 13, 13, 13, 10, 10, 13, 10, 10, 13, - 13, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 11, 11, 11, 11, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 21, 21, 21, 21, 21, 11, 11, 11, 11, 11, 11, 11, 11, 11, 21, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 6, 6, 5, + 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 24, 24, 24, 24, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 8, 8, 8, 8, 8, 24, 24, 24, 24, 24, 24, 24, 24, 24, 8, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, /* 4 */ - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 0, 0, 0, 0, 11, 11, 0, 0, 0, 0, 21, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 11, 11, 10, 3, 10, 10, 10, 0, 10, 0, 10, 10, - 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, - 13, 13, 10, 10, 10, 13, 13, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 13, 13, 13, 13, 10, 13, 7, 10, 13, 10, 10, 13, 13, 10, 10, 10, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 8, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 24, 24, 6, 19, 6, 6, 6, 0, 6, 0, 6, 6, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, + 5, 5, 6, 6, 6, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 5, 5, 5, 5, 6, 5, 25, 6, 5, 6, 6, 5, 5, 6, 6, 6, /* 5 */ - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 14, 22, 22, 22, 22, 0, 23, 23, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 0, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 0, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 26, 20, 20, 20, 20, 0, 22, 22, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 0, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 0, 0, 0, 0, 0, 0, /* 6 */ - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 0, 0, 21, 3, 3, 3, 3, 3, 3, - 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 0, 3, 8, 0, 0, 0, 0, 0, - 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 3, 22, - 3, 22, 22, 3, 22, 22, 3, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, - 19, 19, 19, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 0, 0, 8, 19, 19, 19, 19, 19, 19, + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 19, 18, 0, 0, 0, 0, 0, + 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 19, 20, + 19, 20, 20, 19, 20, 20, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7 */ - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 4, 3, 3, 14, 14, - 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0, 3, 0, 0, 3, 3, - 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, - 21, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 19, 19, - 22, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 3, 19, 22, 22, 22, 22, 22, 22, 22, 16, 23, 22, - 22, 22, 22, 22, 22, 21, 21, 22, 22, 14, 22, 22, 22, 22, 19, 19, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 19, 19, 19, 14, 14, 19, + 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 23, 19, 19, 26, 26, + 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 19, 0, 0, 19, 19, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 19, 19, 19, 19, 9, 9, + 20, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 19, 9, 20, 20, 20, 20, 20, 20, 20, 2, 22, 20, + 20, 20, 20, 20, 20, 8, 8, 20, 20, 26, 20, 20, 20, 20, 9, 9, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 26, 26, 9, /* 8 */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 16, - 19, 22, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 2, + 9, 20, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 9 */ - 0, 22, 22, 24, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 22, 19, 24, 24, - 24, 22, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24, 24, 22, 0, 0, - 19, 22, 22, 22, 22, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 22, 24, 24, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 19, - 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, - 19, 0, 19, 0, 0, 0, 19, 19, 19, 19, 0, 0, 22, 19, 24, 24, - 24, 22, 22, 22, 22, 0, 0, 24, 24, 0, 0, 24, 24, 22, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 19, 19, 0, 19, - 19, 19, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 19, 19, 4, 4, 17, 17, 17, 17, 17, 17, 14, 0, 0, 0, 0, 0, + 0, 20, 20, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 20, 9, 21, 21, + 21, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 20, 0, 0, + 9, 20, 20, 20, 20, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 20, 20, 19, 19, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, + 0, 20, 21, 21, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 0, 0, 0, 9, 9, 9, 9, 0, 0, 20, 9, 21, 21, + 21, 20, 20, 20, 20, 0, 0, 21, 21, 0, 0, 21, 21, 20, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 9, 9, 0, 9, + 9, 9, 20, 20, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 9, 9, 23, 23, 12, 12, 12, 12, 12, 12, 26, 0, 0, 0, 0, 0, /* 10 */ - 0, 22, 22, 24, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 19, - 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, - 19, 0, 19, 19, 0, 19, 19, 0, 19, 19, 0, 0, 22, 0, 24, 24, - 24, 22, 22, 0, 0, 0, 0, 22, 22, 0, 0, 22, 22, 22, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 22, 22, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 22, 22, 24, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, - 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, - 19, 0, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 22, 19, 24, 24, - 24, 22, 22, 22, 22, 22, 0, 22, 22, 24, 0, 24, 24, 22, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 22, 22, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 20, 20, 21, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 0, 9, 9, 0, 9, 9, 0, 0, 20, 0, 21, 21, + 21, 20, 20, 0, 0, 0, 0, 20, 20, 0, 0, 20, 20, 20, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 20, 20, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 20, 20, 21, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 20, 9, 21, 21, + 21, 20, 20, 20, 20, 20, 0, 20, 20, 21, 0, 21, 21, 20, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 20, 20, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 11 */ - 0, 22, 24, 24, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 19, - 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, - 19, 0, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 22, 19, 24, 22, - 24, 22, 22, 22, 0, 0, 0, 24, 24, 0, 0, 24, 24, 22, 0, 0, - 0, 0, 0, 0, 0, 0, 22, 24, 0, 0, 0, 0, 19, 19, 0, 19, - 19, 19, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 14, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 22, 19, 0, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, - 19, 0, 19, 19, 19, 19, 0, 0, 0, 19, 19, 0, 19, 0, 19, 19, - 0, 0, 0, 19, 19, 0, 0, 0, 19, 19, 19, 0, 0, 0, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 24, 24, - 22, 24, 24, 0, 0, 0, 24, 24, 24, 0, 24, 24, 24, 22, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 17, 17, 17, 14, 14, 14, 14, 14, 14, 4, 14, 0, 0, 0, 0, 0, + 0, 20, 21, 21, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 20, 9, 21, 20, + 21, 20, 20, 20, 0, 0, 0, 21, 21, 0, 0, 21, 21, 20, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 9, 9, 0, 9, + 9, 9, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 26, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 9, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, + 9, 0, 9, 9, 9, 9, 0, 0, 0, 9, 9, 0, 9, 0, 9, 9, + 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 9, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 21, 21, + 20, 21, 21, 0, 0, 0, 21, 21, 21, 0, 21, 21, 21, 20, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 12, 12, 12, 26, 26, 26, 26, 26, 26, 23, 26, 0, 0, 0, 0, 0, /* 12 */ - 0, 24, 24, 24, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, - 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 22, 22, - 22, 24, 24, 24, 24, 0, 22, 22, 22, 0, 22, 22, 22, 22, 0, 0, - 0, 0, 0, 0, 0, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 21, 21, 21, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 20, 20, + 20, 21, 21, 21, 21, 0, 20, 20, 20, 0, 20, 20, 20, 20, 0, 0, + 0, 0, 0, 0, 0, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 24, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, - 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 0, 0, 22, 19, 24, 22, - 24, 24, 24, 24, 24, 0, 22, 24, 24, 0, 24, 24, 22, 22, 0, 0, - 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 0, 19, 0, - 19, 19, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 21, 21, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 20, 9, 21, 20, + 21, 21, 21, 21, 21, 0, 20, 21, 21, 0, 21, 21, 20, 20, 0, 0, + 0, 0, 0, 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 9, 0, + 9, 9, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 13 */ - 0, 0, 24, 24, 0, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, - 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 24, 24, - 24, 22, 22, 22, 0, 0, 24, 24, 24, 0, 24, 24, 24, 22, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 21, 21, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 21, 21, + 21, 20, 20, 20, 0, 0, 21, 21, 21, 0, 21, 21, 21, 20, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 24, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 22, 0, 0, 0, 0, 24, - 24, 24, 22, 22, 22, 0, 22, 0, 24, 24, 24, 24, 24, 24, 24, 24, + 0, 0, 21, 21, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 20, 0, 0, 0, 0, 21, + 21, 21, 20, 20, 20, 0, 20, 0, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 21, 21, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 14 */ - 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 19, 19, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 4, - 19, 19, 19, 19, 19, 19, 21, 22, 22, 22, 22, 22, 22, 22, 22, 3, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 20, 9, 9, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 23, + 9, 9, 9, 9, 9, 9, 8, 20, 20, 20, 20, 20, 20, 20, 20, 19, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 19, 0, 19, 0, 0, 19, 19, 0, 19, 0, 0, 19, 0, 0, - 0, 0, 0, 0, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, - 0, 19, 19, 19, 0, 19, 0, 19, 0, 0, 19, 19, 0, 19, 19, 19, - 19, 22, 19, 19, 22, 22, 22, 22, 22, 22, 0, 22, 22, 19, 0, 0, - 19, 19, 19, 19, 19, 0, 21, 0, 22, 22, 22, 22, 22, 22, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 19, 19, 0, 0, + 0, 9, 9, 0, 9, 0, 0, 9, 9, 0, 9, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 0, 9, 0, 9, 0, 0, 9, 9, 0, 9, 9, 9, + 9, 20, 9, 9, 20, 20, 20, 20, 20, 20, 0, 20, 20, 9, 0, 0, + 9, 9, 9, 9, 9, 0, 8, 0, 20, 20, 20, 20, 20, 20, 0, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 15 */ - 19, 14, 14, 14, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 14, 14, 14, 14, 14, 22, 22, 14, 14, 14, 14, 14, 14, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 14, 22, 14, 22, 14, 22, 5, 6, 5, 6, 24, 24, - 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, - 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24, - 22, 22, 22, 22, 22, 3, 22, 22, 19, 19, 19, 19, 0, 0, 0, 0, - 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 14, 14, - 14, 14, 14, 14, 14, 14, 22, 14, 14, 14, 14, 14, 14, 0, 0, 14, - 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 26, 26, 26, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 26, 26, 26, 26, 26, 20, 20, 26, 26, 26, 26, 26, 26, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 26, 20, 26, 20, 26, 20, 13, 14, 13, 14, 21, 21, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, + 20, 20, 20, 20, 20, 19, 20, 20, 9, 9, 9, 9, 0, 0, 0, 0, + 20, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 26, 26, + 26, 26, 26, 26, 26, 26, 20, 26, 26, 26, 26, 26, 26, 0, 0, 26, + 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 16 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 0, 19, 19, 19, 19, 19, 0, 19, 19, 0, 24, 22, 22, 22, - 22, 24, 22, 0, 0, 0, 22, 22, 24, 22, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, - 19, 19, 19, 19, 19, 19, 24, 24, 22, 22, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 0, 21, 20, 20, 20, + 20, 21, 20, 0, 0, 0, 20, 20, 21, 20, 0, 0, 0, 0, 0, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 19, 19, 19, 19, 19, 19, + 9, 9, 9, 9, 9, 9, 21, 21, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 3, 21, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 19, 8, 0, 0, 0, /* 17 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, /* 18 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 0, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, - 19, 0, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* 19 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 0, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 22, - 14, 3, 3, 3, 3, 3, 3, 3, 3, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 20, + 26, 19, 19, 19, 19, 19, 19, 19, 19, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 20 */ - 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* 21 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* 22 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 3, 3, 19, - 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 6, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 3, 3, 3, 25, 25, - 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 19, 19, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 13, 14, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 19, 19, 19, 11, 11, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 23 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, - 19, 19, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, - 19, 0, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 16, 16, 24, 22, 22, 22, 22, 22, 22, 22, 24, 24, - 24, 24, 24, 24, 24, 24, 22, 24, 24, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 3, 3, 3, 21, 3, 3, 3, 4, 19, 22, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 9, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 20, 20, 20, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 9, 0, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 2, 2, 21, 20, 20, 20, 20, 20, 20, 20, 21, 21, + 21, 21, 21, 21, 21, 21, 20, 21, 21, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 19, 19, 19, 8, 19, 19, 19, 23, 9, 20, 0, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, /* 24 */ - 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 22, 22, 22, 2, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 21, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 22, 0, 0, 0, 0, 0, 0, + 19, 19, 19, 19, 19, 19, 18, 19, 19, 19, 19, 20, 20, 20, 29, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 25 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, - 22, 22, 22, 24, 24, 24, 24, 22, 22, 24, 24, 24, 0, 0, 0, 0, - 24, 24, 22, 24, 24, 24, 24, 24, 24, 22, 22, 22, 0, 0, 0, 0, - 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, - 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 19, 19, 19, 19, 19, 19, 19, 24, 24, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 20, 20, 20, 21, 21, 21, 21, 20, 20, 21, 21, 21, 0, 0, 0, 0, + 21, 21, 20, 21, 21, 21, 21, 21, 21, 20, 20, 20, 0, 0, 0, 0, + 26, 0, 0, 0, 19, 19, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 9, 9, 9, 9, 9, 9, 9, 21, 21, 0, 0, 0, 0, 0, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 19, 19, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, /* 26 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 22, 22, 24, 24, 24, 0, 0, 3, 3, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 20, 20, 21, 21, 21, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2540,229 +2540,229 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 27 */ - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 21, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 22, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 28 */ - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 0, 0, 0, 0, 0, 0, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 0, 0, 0, 0, 0, 0, /* 29 */ - 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, - 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, - 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, - 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, - 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 0, 0, - 13, 13, 13, 13, 13, 13, 13, 13, 0, 10, 0, 10, 0, 10, 0, 10, - 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, - 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20, - 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20, - 13, 13, 13, 13, 13, 13, 13, 13, 20, 20, 20, 20, 20, 20, 20, 20, - 13, 13, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 13, 11, - 11, 11, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 11, 11, - 13, 13, 13, 13, 0, 0, 13, 13, 10, 10, 10, 10, 0, 11, 11, 11, - 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 11, 11, 11, - 0, 0, 13, 13, 13, 0, 13, 13, 10, 10, 10, 10, 20, 11, 11, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 5, 5, 5, 5, 5, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 5, 5, 5, 5, 5, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 6, 0, 6, 0, 6, 0, 6, + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, + 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, + 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, + 5, 5, 5, 5, 5, 0, 5, 5, 6, 6, 6, 6, 7, 24, 5, 24, + 24, 24, 5, 5, 5, 0, 5, 5, 6, 6, 6, 6, 7, 24, 24, 24, + 5, 5, 5, 5, 0, 0, 5, 5, 6, 6, 6, 6, 0, 24, 24, 24, + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 24, 24, 24, + 0, 0, 5, 5, 5, 0, 5, 5, 6, 6, 6, 6, 7, 24, 24, 0, /* 30 */ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 16, - 8, 8, 8, 8, 8, 8, 3, 3, 15, 18, 5, 15, 15, 18, 5, 15, - 3, 3, 3, 3, 3, 3, 3, 3, 26, 27, 16, 16, 16, 16, 16, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 15, 18, 3, 3, 3, 3, 12, - 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, - 17, 13, 0, 0, 17, 17, 17, 17, 17, 17, 7, 7, 7, 5, 6, 13, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 7, 7, 7, 5, 6, 0, - 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 2, 2, 2, 2, 2, + 18, 18, 18, 18, 18, 18, 19, 19, 15, 16, 13, 15, 15, 16, 13, 15, + 19, 19, 19, 19, 19, 19, 19, 19, 27, 28, 2, 2, 2, 2, 2, 29, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 15, 16, 19, 19, 19, 19, 17, + 17, 19, 19, 19, 25, 13, 14, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 25, 19, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 29, + 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, + 12, 5, 0, 0, 12, 12, 12, 12, 12, 12, 25, 25, 25, 13, 14, 5, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 25, 25, 25, 13, 14, 0, + 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, - 23, 22, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 22, 22, 22, + 22, 20, 22, 22, 22, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 31 */ - 14, 14, 10, 14, 14, 14, 14, 10, 14, 14, 13, 10, 10, 10, 13, 13, - 10, 10, 10, 13, 14, 10, 14, 14, 14, 10, 10, 10, 10, 10, 14, 14, - 14, 14, 14, 14, 10, 14, 10, 14, 10, 14, 10, 10, 10, 10, 14, 13, - 10, 10, 14, 10, 13, 19, 19, 19, 19, 13, 14, 14, 13, 13, 10, 10, - 7, 7, 7, 7, 7, 10, 13, 13, 13, 13, 14, 7, 14, 0, 0, 0, - 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14, - 7, 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, - 14, 14, 7, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 26, 26, 6, 26, 26, 26, 26, 6, 26, 26, 5, 6, 6, 6, 5, 5, + 6, 6, 6, 5, 26, 6, 26, 26, 26, 6, 6, 6, 6, 6, 26, 26, + 26, 26, 26, 26, 6, 26, 6, 26, 6, 26, 6, 6, 6, 6, 26, 5, + 6, 6, 26, 6, 5, 9, 9, 9, 9, 5, 26, 26, 5, 5, 6, 6, + 25, 25, 25, 25, 25, 6, 5, 5, 5, 5, 26, 25, 26, 0, 0, 0, + 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 25, 25, 26, 26, 26, 26, + 25, 26, 26, 25, 26, 26, 25, 26, 26, 26, 26, 26, 26, 26, 25, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, + 26, 26, 25, 26, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, /* 32 */ - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, /* 33 */ - 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 7, 7, 14, 14, 14, 14, 14, 14, 14, 5, 6, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 5, 6, 3, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 25, 25, 26, 26, 26, 26, 26, 26, 26, 13, 14, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 13, 14, 19, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 34 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, /* 35 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 25, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 25, /* 36 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 37 */ - 0, 14, 14, 14, 14, 0, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 0, 14, - 14, 14, 14, 0, 0, 0, 14, 0, 14, 14, 14, 14, 14, 14, 14, 0, - 0, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6, - 5, 6, 5, 6, 5, 6, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 14, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, - 7, 7, 7, 7, 7, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, 6, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 26, 26, 26, 26, 0, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 0, 26, + 26, 26, 26, 0, 0, 0, 26, 0, 26, 26, 26, 26, 26, 26, 26, 0, + 0, 26, 26, 26, 26, 26, 26, 26, 13, 14, 13, 14, 13, 14, 13, 14, + 13, 14, 13, 14, 13, 14, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, + 25, 25, 25, 25, 25, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 13, 14, 13, 14, 13, 14, 0, 0, 0, 0, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, /* 38 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, /* 39 */ - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 7, 7, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, + 14, 13, 14, 13, 14, 13, 14, 13, 14, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 13, 14, 13, 14, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 13, 14, 25, 25, /* 40 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2778,195 +2778,195 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 41 */ - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, 10, 13, - 10, 13, 10, 13, 13, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 17, 3, 3, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 5, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 12, 19, 19, /* 42 */ - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, - 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, - 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, - 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 43 */ - 3, 3, 15, 18, 15, 18, 3, 3, 3, 15, 18, 3, 15, 18, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 8, 0, 0, 0, 0, 15, 18, 0, 0, + 19, 19, 15, 16, 15, 16, 19, 19, 19, 15, 16, 19, 15, 16, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 18, 0, 0, 0, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 44 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, /* 45 */ - 2, 3, 3, 3, 14, 21, 19, 25, 5, 6, 5, 6, 5, 6, 5, 6, - 5, 6, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6, 8, 5, 6, 6, - 14, 25, 25, 25, 25, 25, 25, 25, 25, 25, 22, 22, 22, 22, 22, 22, - 8, 21, 21, 21, 21, 21, 14, 14, 25, 25, 25, 21, 19, 3, 14, 14, - 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 0, 0, 22, 22, 11, 11, 21, 21, 19, - 8, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 3, 21, 21, 21, 19, + 29, 19, 19, 19, 26, 8, 9, 11, 13, 14, 13, 14, 13, 14, 13, 14, + 13, 14, 26, 26, 13, 14, 13, 14, 13, 14, 13, 14, 18, 13, 14, 14, + 26, 11, 11, 11, 11, 11, 11, 11, 11, 11, 20, 20, 20, 20, 20, 20, + 18, 8, 8, 8, 8, 8, 26, 26, 11, 11, 11, 8, 9, 19, 26, 26, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 20, 20, 24, 24, 8, 8, 9, + 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 19, 8, 8, 8, 9, /* 46 */ - 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, - 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, - 14, 14, 17, 17, 17, 17, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 26, 26, 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* 47 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, /* 48 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, /* 49 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 50 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 21, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* 51 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 52 */ - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2982,9 +2982,9 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 53 */ - 19, 19, 24, 19, 19, 19, 22, 19, 19, 19, 19, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 24, 24, 22, 22, 24, 14, 14, 14, 14, 0, 0, 0, 0, + 9, 9, 21, 9, 9, 9, 20, 9, 9, 9, 9, 20, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 21, 21, 20, 20, 21, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2999,168 +2999,168 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 54 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 55 */ - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 56 */ - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* 57 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 58 */ - 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 19, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 7, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 0, 19, 0, - 19, 19, 0, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 9, 20, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 25, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 0, + 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* 59 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 6, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 4, 14, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 23, 26, 0, 0, /* 60 */ - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 3, 3, 3, 3, 3, 3, 3, 5, 6, 3, 0, 0, 0, 0, 0, 0, - 22, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 8, 8, 12, 12, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 6, 5, 6, 5, 6, 3, 3, 5, 6, 3, 3, 3, 3, 12, 12, 12, - 3, 3, 3, 0, 3, 3, 3, 3, 8, 5, 6, 5, 6, 5, 6, 3, - 3, 3, 7, 8, 7, 7, 7, 0, 3, 4, 3, 3, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 16, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 19, 19, 19, 19, 19, 19, 19, 13, 14, 19, 0, 0, 0, 0, 0, 0, + 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 18, 18, 17, 17, 13, 14, 13, 14, 13, 14, 13, 14, 13, 14, 13, + 14, 13, 14, 13, 14, 19, 19, 13, 14, 19, 19, 19, 19, 17, 17, 17, + 19, 19, 19, 0, 19, 19, 19, 19, 18, 13, 14, 13, 14, 13, 14, 19, + 19, 19, 25, 18, 25, 25, 25, 0, 19, 23, 19, 19, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 2, /* 61 */ - 0, 3, 3, 3, 4, 3, 3, 3, 5, 6, 3, 7, 3, 8, 3, 3, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 7, 7, 7, 3, - 3, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 5, 3, 6, 11, 12, - 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 5, 7, 6, 7, 5, - 6, 3, 5, 6, 3, 3, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 21, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 21, 21, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, - 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 19, 19, 19, - 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, 19, 19, 19, 0, 0, 0, - 4, 4, 7, 11, 14, 4, 4, 0, 14, 7, 7, 7, 7, 14, 14, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 14, 14, 0, 0, + 0, 19, 19, 19, 23, 19, 19, 19, 13, 14, 19, 25, 19, 18, 19, 19, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 19, 19, 25, 25, 25, 19, + 19, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 13, 19, 14, 24, 17, + 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 25, 14, 25, 13, + 14, 19, 13, 14, 19, 19, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, + 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 0, 0, 0, + 23, 23, 25, 24, 26, 23, 23, 0, 26, 25, 25, 25, 25, 26, 26, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 26, 26, 0, 0, /* 62 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, /* 63 */ - 3, 3, 14, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 17, 17, 17, 17, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 17, 0, 0, 0, 0, 0, + 19, 19, 26, 0, 0, 0, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3169,44 +3169,44 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 64 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, - 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 25, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 3, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, - 14, 25, 25, 25, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 19, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 26, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 65 */ - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 66 */ - 19, 19, 19, 19, 19, 19, 0, 0, 19, 0, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 0, 19, 19, 0, 0, 0, 19, 0, 0, 19, + 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3220,12 +3220,12 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 67 */ - 19, 22, 22, 22, 0, 22, 22, 0, 0, 0, 0, 0, 22, 22, 22, 22, - 19, 19, 19, 19, 0, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 0, 0, 0, 0, 22, 22, 22, 0, 0, 0, 0, 22, - 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, + 9, 20, 20, 20, 0, 20, 20, 0, 0, 0, 0, 0, 20, 20, 20, 20, + 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 20, 20, 20, 0, 0, 0, 0, 20, + 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3237,45 +3237,45 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 68 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 69 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 24, 24, 22, 22, 22, 14, 14, 14, 24, 24, 24, - 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 22, 22, 22, 22, 22, - 22, 22, 22, 14, 14, 22, 22, 22, 22, 22, 22, 22, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 22, 22, 22, 22, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 21, 21, 20, 20, 20, 26, 26, 26, 21, 21, 21, + 21, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 20, 20, 20, 20, 20, + 20, 20, 20, 26, 26, 20, 20, 20, 20, 20, 20, 20, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 20, 20, 20, 20, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 70 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 22, 22, 22, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 20, 20, 20, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3288,12 +3288,12 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 71 */ - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3305,93 +3305,93 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 72 */ - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, - 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 0, 10, 10, - 0, 0, 10, 0, 0, 10, 10, 0, 0, 10, 10, 10, 10, 0, 10, 10, - 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 0, 13, 0, 13, 13, 13, - 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 0, 6, 6, + 0, 0, 6, 0, 0, 6, 6, 0, 0, 6, 6, 6, 6, 0, 6, 6, + 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, + 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* 73 */ - 13, 13, 13, 13, 10, 10, 0, 10, 10, 10, 10, 0, 0, 10, 10, 10, - 10, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 0, 10, 10, 10, 10, 0, - 10, 10, 10, 10, 10, 0, 10, 0, 0, 0, 10, 10, 10, 10, 10, 10, - 10, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 5, 5, 5, 5, 6, 6, 0, 6, 6, 6, 6, 0, 0, 6, 6, 6, + 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 0, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 0, 6, 6, 6, 6, 0, + 6, 6, 6, 6, 6, 0, 6, 0, 0, 0, 6, 6, 6, 6, 6, 6, + 6, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* 74 */ - 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 7, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, - 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 13, 13, 13, 13, + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 25, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 5, 5, 5, 5, + 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 5, 5, 5, 5, /* 75 */ - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 25, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 25, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, + 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 25, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 7, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, - 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 7, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* 76 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 77 */ - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3407,14 +3407,14 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 78 */ - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3424,39 +3424,39 @@ static unsigned char udata_cats[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 79 */ - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 */ - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 0, 0 + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0 }; /* Case mapping size: 157 */ @@ -3529,34 +3529,34 @@ unsigned char scheme_uchar_combining_classes[] = { static const char *general_category_names[] = { "cn", "cc", - "zs", - "po", - "sc", - "ps", - "pe", - "sm", - "pd", - "nd", - "lu", - "sk", - "pc", - "ll", - "so", - "pi", "cf", - "no", - "pf", - "lo", + "cs", + "co", + "ll", + "lu", "lt", "lm", - "mn", - "me", - "mc", + "lo", + "nd", "nl", + "no", + "ps", + "pe", + "pi", + "pf", + "pc", + "pd", + "po", + "mn", + "mc", + "me", + "sc", + "sk", + "sm", + "so", "zl", "zp", - "cs", - "co" + "zs" }; #define NUM_UCHAR_RANGES 420 diff --git a/src/mzscheme/src/schustr.inc b/src/mzscheme/src/schustr.inc index bb6be9beef..525aa20a1e 100644 --- a/src/mzscheme/src/schustr.inc +++ b/src/mzscheme/src/schustr.inc @@ -283,131 +283,131 @@ static unsigned int utable_compose_pairs[] = { 0x30ad3099, 0x30af3099, 0x30b13099, 0x30b33099, 0x30b53099, 0x30b73099, 0x30b93099, 0x30bb3099, 0x30bd3099, 0x30bf3099, 0x30c13099, 0x30c43099, 0x30c63099, 0x30c83099, 0x30cf3099, 0x30cf309a, 0x30d23099, 0x30d2309a, 0x30d53099, 0x30d5309a, 0x30d83099, 0x30d8309a, 0x30db3099, 0x30db309a, - 0x30ef3099, 0x30f03099, 0x30f13099, 0x30f23099, 0x30fd3099, 0x20030000, 0xb40000, 0x38f0000, - 0x38c0000, 0x600000, 0x38e0000, 0x3b00000, 0x38a0000, 0x3900000, 0x3890000, 0x3880000, - 0x3b90000, 0x3860000, 0x3ce0000, 0x3cd0000, 0x3cc0000, 0x3af0000, 0x3ae0000, 0x3ad0000, - 0x3ac0000, 0x57170000, 0x5e405bf, 0x5d105bf, 0x5ea05bc, 0x5e805bc, 0x5e605bc, 0x5e405bc, - 0x5e305bc, 0x5e105bc, 0x5de05bc, 0x5dc05bc, 0x5db05bc, 0x5d905bc, 0x5d605bc, 0x5d505bc, - 0x5d305bc, 0x5d105bc, 0x5d005b8, 0xfb4905c2, 0x5e905c2, 0x5f205b7, 0x5d905b4, 0x9f8e0000, - 0x40180000, 0x9b120000, 0x980b0000, 0x97560000, 0x96e30000, 0x92760000, 0x90720000, 0x8d080000, - 0x8b390000, 0x8afe0000, 0x8acb0000, 0x8abf0000, 0x89860000, 0x87790000, 0x83520000, 0x7f3e0000, - 0x7d5b0000, 0x7bc00000, 0x78cc0000, 0x774a0000, 0x76db0000, 0x761f0000, 0x753b0000, 0x74710000, - 0x72af0000, 0x77a70000, 0x701e0000, 0x6ecb0000, 0x6d410000, 0x6b790000, 0x671b0000, 0x66740000, - 0x64520000, 0x63c40000, 0x61f20000, 0x618e0000, 0x614e0000, 0x5fad0000, 0x5ed90000, 0x5b280000, - 0x59540000, 0x58b30000, 0x55e20000, 0x55550000, 0x52fa0000, 0x51800000, 0x51680000, 0x4e260000, - 0x983b0000, 0x97ff0000, 0x90380000, 0x8d080000, 0x8b390000, 0x89960000, 0x84570000, 0x82790000, - 0x80050000, 0x7e410000, 0x7df40000, 0x7a810000, 0x798e0000, 0x795d0000, 0x79500000, 0x79490000, - 0x78910000, 0x722b0000, 0x6f220000, 0x6d770000, 0x65e20000, 0x654f0000, 0x618e0000, 0x60940000, - 0x5c640000, 0x58400000, 0x56060000, 0x53510000, 0x52c90000, 0x50e70000, 0x9db40000, 0x98fc0000, - 0x90fd0000, 0x90380000, 0x8af80000, 0x86120000, 0x7fbd0000, 0x7cbe0000, 0x798f0000, 0x795e0000, - 0x76ca0000, 0x51de0000, 0x66740000, 0x585a0000, 0x55c00000, 0x898b0000, 0x964d0000, 0x66b40000, - 0x6d1e0000, 0x7cd60000, 0x5ea60000, 0x523a0000, 0x4ec00000, 0x70990000, 0x7c920000, 0x7acb0000, - 0x6dcb0000, 0x9e9f0000, 0x85fa0000, 0x74980000, 0x541d0000, 0x533f0000, 0x91cc0000, 0x88cf0000, - 0x75e20000, 0x6ce50000, 0x674e0000, 0x5c650000, 0x52290000, 0x73870000, 0x61440000, 0x8f2a0000, - 0x5d190000, 0x96780000, 0x516d0000, 0x7d100000, 0x75590000, 0x6d410000, 0x677b0000, 0x52890000, - 0x66880000, 0x907c0000, 0x76420000, 0x65990000, 0x5c3f0000, 0x50da0000, 0x60e10000, 0x91b40000, - 0x4f8b0000, 0x97480000, 0x92340000, 0x74690000, 0x73b20000, 0x5be70000, 0x56f90000, 0x7c3e0000, - 0x6bae0000, 0x5ff50000, 0x8aaa0000, 0x70c80000, 0x52170000, 0x934a0000, 0x8f260000, 0x806f0000, - 0x79ca0000, 0x71490000, 0x649a0000, 0x61900000, 0x8f620000, 0x66c60000, 0x9e970000, 0x9a6a0000, - 0x792a0000, 0x65c50000, 0x59730000, 0x52f50000, 0x826f0000, 0x7ce70000, 0x51c90000, 0x4eae0000, - 0x82e50000, 0x62fe0000, 0x8fb00000, 0x8aaa0000, 0x77010000, 0x53c30000, 0x65780000, 0x4e0d0000, - 0x78fb0000, 0x53170000, 0x73870000, 0x5be70000, 0x8afe0000, 0x62cf0000, 0x96750000, 0x7dbe0000, - 0x51cc0000, 0x808b0000, 0x964b0000, 0x7d2f0000, 0x6dda0000, 0x5c620000, 0x96f70000, 0x78ca0000, - 0x7c600000, 0x5f040000, 0x8ad60000, 0x93040000, 0x797f0000, 0x788c0000, 0x9b6f0000, 0x865c0000, - 0x80010000, 0x76e70000, 0x64c40000, 0x51b70000, 0x90ce0000, 0x6d6a0000, 0x5eca0000, 0x81d80000, - 0x89640000, 0x85cd0000, 0x5d500000, 0x721b0000, 0x6b040000, 0x99f10000, 0x916a0000, 0x70d90000, - 0x6a020000, 0x908f0000, 0x863f0000, 0x7f850000, 0x61f60000, 0x55870000, 0x59510000, 0x9f9c0000, - 0x4e320000, 0x8cc80000, 0x66f40000, 0x7a4a0000, 0x412f0000, 0x798f0000, 0x78cc0000, 0x784e0000, - 0x40960000, 0x778b0000, 0x774a0000, 0x771f0000, 0x76f40000, 0x3ffc0000, 0x5db05bf, 0x75700000, - 0x5d505b9, 0x5e905bc, 0x74ca0000, 0x5e705bc, 0x74470000, 0x3eb80000, 0x3eac0000, 0x5e005bc, - 0x72800000, 0x72500000, 0x72280000, 0x5da05bc, 0x5d805bc, 0x70ad0000, 0x707d0000, 0x5d405bc, - 0x701e0000, 0x5d205bc, 0x5d005bc, 0x6df90000, 0x5d005b7, 0xfb4905c1, 0x6e2f0000, 0x5e905c1, - 0x6d780000, 0x6d410000, 0x6d3e0000, 0x6c670000, 0x6cbf0000, 0x6c4e0000, 0x6bbb0000, 0x6b9f0000, - 0x3c4e0000, 0x3c180000, 0x69ea0000, 0x69420000, 0x69140000, 0x688e0000, 0x68850000, 0x67850000, - 0x3b490000, 0x67530000, 0x67210000, 0x67170000, 0x80ad0000, 0x67000000, 0x51920000, 0x3b080000, - 0x3b190000, 0x66f80000, 0x654f0000, 0x64770000, 0x647e0000, 0x3a2e0000, 0x63c50000, 0x63830000, - 0x62fc0000, 0x62d40000, 0x625d0000, 0x62100000, 0x61f20000, 0x61af0000, 0x61b20000, 0x617a0000, - 0x614e0000, 0x61480000, 0x391c0000, 0x60810000, 0x5fd70000, 0x5f9a0000, 0x5f6b0000, 0x38c70000, - 0x5f220000, 0x5efe0000, 0x5eca0000, 0x9f430000, 0x387c0000, 0x40390000, 0x5dfd0000, 0x3b9d0000, - 0x5d6e0000, 0x9f9c0000, 0x983b0000, 0x5c6e0000, 0x97ff0000, 0x97db0000, 0x5bff0000, 0x967c0000, - 0x91990000, 0x8f380000, 0x8b8a0000, 0x5a660000, 0x8aed0000, 0x8b010000, 0x8af80000, 0x89960000, - 0x58f20000, 0x89410000, 0x83ef0000, 0x580d0000, 0x80050000, 0x7df40000, 0x56510000, 0x7c7b0000, - 0x7ab10000, 0x55ab0000, 0x77400000, 0x76f40000, 0x55100000, 0x76ca0000, 0x761d0000, 0x549e0000, - 0x75060000, 0x732a0000, 0x53ca0000, 0x72350000, 0x716e0000, 0x537d0000, 0x6f220000, 0x6edb0000, - 0x53060000, 0x6bba0000, 0x67560000, 0x35150000, 0x67170000, 0x65560000, 0x52030000, 0x641c0000, - 0x62340000, 0x51a40000, 0x61600000, 0x61080000, 0x60d80000, 0x5f690000, 0x349e0000, 0x5ed20000, - 0x5a620000, 0x4fbb0000, 0x59440000, 0x585a0000, 0x4e3d0000, 0x55990000, 0x559d0000, 0x52c70000, - 0x51450000, 0xf9c0fb7, 0x4f800000, 0x51b50000, 0x96e30000, 0x8fb60000, 0x8cd30000, 0x8b010000, - 0x89100000, 0x82790000, 0x81ed0000, 0x7f720000, 0x7e090000, 0x7bc00000, 0x7a400000, 0x798d0000, - 0x79560000, 0x79480000, 0x793e0000, 0x74220000, 0x716e0000, 0x6e1a0000, 0x68850000, 0x66910000, - 0x61f20000, 0x61680000, 0x5c6e0000, 0x58a80000, 0x56680000, 0x559d0000, 0x52e40000, 0x514d0000, - 0x4fae0000, 0x99280000, 0x98ef0000, 0x97560000, 0x79650000, 0x793c0000, 0x732a0000, 0x51400000, - 0x5ed30000, 0x884c0000, 0x8f3b0000, 0x5b850000, 0x62d30000, 0x52070000, 0x83360000, 0x8b580000, - 0x72c00000, 0x7b200000, 0x81e80000, 0x67970000, 0x9c570000, 0x96a30000, 0x71d00000, 0x6eba0000, - 0x96e20000, 0x88e10000, 0x7f790000, 0x74060000, 0x68a80000, 0x66130000, 0x540f0000, 0x96860000, - 0x68170000, 0x5f8b0000, 0x6dea0000, 0x502b0000, 0x622e0000, 0x985e0000, 0x786b0000, 0x74090000, - 0x6e9c0000, 0x67f30000, 0x962e0000, 0x9f8d0000, 0x84fc0000, 0x71ce0000, 0x6a020000, 0x5bee0000, - 0x4e860000, 0x96b80000, 0x79ae0000, 0x98180000, 0x96f60000, 0x80460000, 0x7f9a0000, 0x601c0000, - 0x5dba0000, 0x4ee40000, 0x73750000, 0x637b0000, 0x5ec90000, 0x88c20000, 0x54bd0000, 0x52a30000, - 0x90230000, 0x84ee0000, 0x7df40000, 0x74890000, 0x6f230000, 0x62000000, 0x5e740000, 0x6b770000, - 0x529b0000, 0x9ece0000, 0x95ad0000, 0x6ffe0000, 0x5eec0000, 0x54420000, 0x91cf0000, 0x8ad20000, - 0x68810000, 0x51690000, 0x75650000, 0x63a00000, 0x6c880000, 0x6bba0000, 0x84490000, 0x585e0000, - 0x7d220000, 0x6ccc0000, 0x5fa90000, 0x4fbf0000, 0x75700000, 0x60120000, 0x4e390000, 0x6a020000, - 0x8b800000, 0x83f10000, 0x7a1c0000, 0x51dc0000, 0x52d20000, 0x7e370000, 0x6f0f0000, 0x6a130000, - 0x58d80000, 0x8cc20000, 0x72620000, 0x807e0000, 0x58df0000, 0x9e7f0000, 0x83c90000, 0x7da00000, - 0x9dfa0000, 0x97320000, 0x8def0000, 0x86060000, 0x72100000, 0x6ad30000, 0x52de0000, 0x4f860000, - 0x72fc0000, 0x67170000, 0x881f0000, 0x62c90000, 0x6feb0000, 0x9e1e0000, 0x862d0000, 0x53750000, - 0x4e820000, 0x843d0000, 0x73de0000, 0x6d1b0000, 0x88f80000, 0x87ba0000, 0x76690000, 0x59480000, - 0x91d10000, 0x9f9c0000, 0x53e50000, 0x6ed10000, 0x8eca0000, 0x8c480000, 0x7aee0000, 0x7a4f0000, - 0x7a400000, 0x79eb0000, 0x79560000, 0x40e30000, 0x788c0000, 0x40460000, 0x40390000, 0x771f0000, - 0x771e0000, 0x40080000, 0x76100000, 0x753e0000, 0x75240000, 0x3f1b0000, 0x74710000, 0x745c0000, - 0x3eb80000, 0x73a50000, 0x737a0000, 0x72950000, 0x72350000, 0x719c0000, 0x71450000, 0x70770000, - 0x3d960000, 0x701b0000, 0x6fc60000, 0x6f6e0000, 0x6ec70000, 0x3d330000, 0x6e6e0000, 0x6d850000, - 0x6d690000, 0x6d770000, 0x6d160000, 0x6ccd0000, 0x6bba0000, 0x6b720000, 0x6b540000, 0x6b210000, - 0x6adb0000, 0x6aa80000, 0x69a30000, 0x3b9d0000, 0x681f0000, 0x68520000, 0x67fa0000, 0x675e0000, - 0x671b0000, 0x43d90000, 0x669c0000, 0x51950000, 0x3ae40000, 0x66910000, 0x66490000, 0x656c0000, - 0x3a6c0000, 0x649d0000, 0x64690000, 0x63a90000, 0x63e40000, 0x63680000, 0x633d0000, 0x63500000, - 0x62b10000, 0x621b0000, 0x61f60000, 0x61de0000, 0x61a40000, 0x618e0000, 0x614c0000, 0x614c0000, - 0x60c70000, 0x60940000, 0x393a0000, 0x5ff90000, 0x5fcd0000, 0x38e30000, 0x5f620000, 0x5f220000, - 0x82010000, 0x5eb30000, 0x38620000, 0x5e3d0000, 0x5e280000, 0x5de20000, 0x5d6b0000, 0x5d430000, - 0x5c8d0000, 0x5cc00000, 0x37810000, 0x5f530000, 0x5c060000, 0x5bf30000, 0x5bd80000, 0x5bc30000, - 0x5b3e0000, 0x36fc0000, 0x5a270000, 0x59060000, 0x58f70000, 0x58ac0000, 0x578b0000, 0x52070000, - 0x56060000, 0x55c20000, 0x55b30000, 0x55840000, 0x55630000, 0x55530000, 0x54a20000, 0x54480000, - 0x54380000, 0x53f10000, 0x53df0000, 0x537f0000, 0x537f0000, 0x535a0000, 0x53490000, 0x53170000, - 0x52fa0000, 0x52c70000, 0x52720000, 0x523b0000, 0x51ac0000, 0x4ecc0000, 0x51670000, 0x34b90000, - 0x51640000, 0x514d0000, 0x50e70000, 0x507a0000, 0x50020000, 0x4f600000, 0x9f3b0000, 0x9f0f0000, - 0x9efe0000, 0x4d560000, 0x9cfd0000, 0x9b120000, 0x4bce0000, 0x99c20000, 0x99290000, 0x98e20000, - 0x98290000, 0x980b0000, 0x4ab20000, 0xc50000, 0x97e00000, 0x4a6e0000, 0x5db20000, 0x49e60000, - 0x95b70000, 0x958b0000, 0x94150000, 0x927c0000, 0x92d70000, 0x911b0000, 0x90940000, 0x8ed40000, - 0x8df00000, 0x8dcb0000, 0x8d1b0000, 0x8cab0000, 0x8c550000, 0x8aed0000, 0x46c70000, 0x34bb0000, - 0x46350000, 0x88d70000, 0x88630000, 0x45f90000, 0x87e10000, 0x87280000, 0x86e20000, 0x86880000, - 0x86690000, 0x865c0000, 0x456b0000, 0x455d0000, 0x85640000, 0x85160000, 0x84f10000, 0x83cc0000, - 0x83530000, 0x83e70000, 0x83230000, 0x83630000, 0x82e50000, 0x82e60000, 0x82b30000, 0x52b30000, - 0x828b0000, 0x446b0000, 0x82040000, 0x5ab50000, 0x440b0000, 0x80b20000, 0x80050000, 0x7f950000, - 0x7f7a0000, 0x43590000, 0x7e450000, 0x7dc70000, 0x7d630000, 0x4b0000, 0x7ce80000, 0x3a90000, - 0x7cd20000, 0x7bc60000, 0x42020000, 0x74850000, 0x738b0000, 0xb210b3c, 0x70390000, 0x65e30000, - 0x5eb60000, 0x20020000, 0x5eb00000, 0x382f0000, 0x5d7c0000, 0x3850000, 0x9f050000, 0x5c220000, - 0x4cce0000, 0xf900fb5, 0x5b080000, 0x36ee0000, 0xfab0fb7, 0x99fe0000, 0xfa60fb7, 0xfa10fb7, - 0x59220000, 0x591a0000, 0xf920fb7, 0x57ce0000, 0xa1c0a3c, 0xf710f80, 0xfb30f80, 0xfb20f80, - 0xf710f74, 0x55840000, 0xf400fb5, 0x92d80000, 0xf5b0fb7, 0xf560fb7, 0xf510fb7, 0x90f10000, - 0xf4c0fb7, 0xf420fb7, 0x53510000, 0x53050000, 0x8d770000, 0x52460000, 0x34df0000, 0x518d0000, - 0x51770000, 0x51540000, 0x88010000, 0x50990000, 0x4fae0000, 0x870e0000, 0x86a90000, 0x86500000, - 0x9a109bc, 0x84570000, 0x83ad0000, 0x82bd0000, 0x82910000, 0x82010000, 0x81030000, 0x80600000, - 0x43340000, 0x7d000000, 0x42270000, 0x92b093c, 0x922093c, 0x91c093c, 0x915093c, 0x704a0000, - 0x6ecb0000, 0x9f160000, 0x9ef90000, 0x9ebb0000, 0x4ced0000, 0x64220000, 0x9c400000, 0x99a70000, - 0x4b330000, 0x980b0000, 0x4a760000, 0x97230000, 0x96c30000, 0x49950000, 0x93f90000, 0x92380000, - 0x91110000, 0x8f380000, 0x5e690000, 0x8dbc0000, 0x5de10000, 0x8cc10000, 0x8b8a0000, 0x5c600000, - 0x8aa00000, 0x46be0000, 0x5be70000, 0x5b3e0000, 0x59d80000, 0x59ec0000, 0x87860000, 0x876b0000, - 0x59620000, 0x58320000, 0x57f40000, 0x58ee0000, 0x56740000, 0xb220b3c, 0x57160000, 0x84f30000, - 0x452b0000, 0x54f60000, 0x83dc0000, 0x54680000, 0x54060000, 0x53eb0000, 0x70700000, 0x831d0000, - 0x537f0000, 0x53730000, 0x82b10000, 0x829d0000, 0x52c90000, 0x52770000, 0x51f50000, 0x813e0000, - 0x51b50000, 0x2add0338, 0x51970000, 0x80700000, 0x7ffa0000, 0x50cf0000, 0x4e410000, 0x4e380000, - 0x7e020000, 0x7ce30000, 0x42a00000, 0x7bc90000, 0xa2b0a3c, 0xa170a3c, 0xa160a3c, 0xa380a3c, - 0xa320a3c, 0x9af09bc, 0x9a209bc, 0x6d340000, 0x92f093c, 0x921093c, 0x917093c, 0x916093c, - 0x4cf80000, 0x9d670000, 0x88fa0000, 0x88de0000, 0x88600000, 0x45d70000, 0x87790000, 0x86670000, - 0x45610000, 0x83ca0000, 0x83bd0000, 0x5a1b0000, 0x58310000, 0x43d50000, 0x55990000, 0x43010000, - 0x52e40000, 0xf710f72, 0x3130000, 0x3000000, 0x8f9e0000, 0xb70000, 0x3b0000, 0x2b90000, - 0x3080301, 0x3010000, 0x30090000, 0x30080000 + 0x30ef3099, 0x30f03099, 0x30f13099, 0x30f23099, 0x30fd3099, 0xb40000, 0x38f0000, 0x38c0000, + 0x600000, 0x38e0000, 0x3b00000, 0x38a0000, 0x3900000, 0x3890000, 0x3880000, 0x3b90000, + 0x3860000, 0x3ce0000, 0x3cd0000, 0x3cc0000, 0x3af0000, 0x3ae0000, 0x3ad0000, 0x3ac0000, + 0x5e405bf, 0x5d105bf, 0x5ea05bc, 0x5e805bc, 0x5e605bc, 0x5e405bc, 0x5e305bc, 0x5e005bc, + 0x5de05bc, 0x5dc05bc, 0x5db05bc, 0x5d905bc, 0x5d605bc, 0x5d505bc, 0x5d305bc, 0x5d105bc, + 0x5d005b8, 0xfb4905c2, 0x5e905c2, 0x5f205b7, 0x5d905b4, 0x9f8e0000, 0x40180000, 0x9b120000, + 0x980b0000, 0x97db0000, 0x96e30000, 0x92760000, 0x90720000, 0x8d080000, 0x8b390000, 0x8afe0000, + 0x8acb0000, 0x8abf0000, 0x89860000, 0x87790000, 0x83520000, 0x7f3e0000, 0x7d5b0000, 0x7bc00000, + 0x78cc0000, 0x774a0000, 0x76db0000, 0x761f0000, 0x753b0000, 0x74710000, 0x72af0000, 0x77a70000, + 0x701e0000, 0x6ecb0000, 0x6d410000, 0x6b790000, 0x671b0000, 0x66740000, 0x64520000, 0x63c40000, + 0x61f20000, 0x618e0000, 0x614e0000, 0x5fad0000, 0x5ed90000, 0x5b280000, 0x59540000, 0x58b30000, + 0x55e20000, 0x55550000, 0x52fa0000, 0x51800000, 0x4f800000, 0x51b50000, 0x983b0000, 0x97ff0000, + 0x90380000, 0x8d080000, 0x8b390000, 0x89960000, 0x84570000, 0x82790000, 0x80050000, 0x7e410000, + 0x7df40000, 0x7a810000, 0x798e0000, 0x795d0000, 0x79500000, 0x79490000, 0x78910000, 0x722b0000, + 0x6e1a0000, 0x6d770000, 0x66910000, 0x654f0000, 0x618e0000, 0x60940000, 0x58a80000, 0x58400000, + 0x56060000, 0x53510000, 0x52c90000, 0x50e70000, 0x9db40000, 0x98ef0000, 0x90fd0000, 0x90380000, + 0x8af80000, 0x86120000, 0x7fbd0000, 0x7cbe0000, 0x798f0000, 0x795e0000, 0x76ca0000, 0x51de0000, + 0x66740000, 0x585a0000, 0x4ced0000, 0x55c00000, 0x5ed30000, 0x964d0000, 0x8f3b0000, 0x6d1e0000, + 0x7cd60000, 0x5ea60000, 0x83360000, 0x4ec00000, 0x70990000, 0x7c920000, 0x7acb0000, 0x6dcb0000, + 0x9e9f0000, 0x96a30000, 0x71d00000, 0x541d0000, 0x533f0000, 0x91cc0000, 0x88cf0000, 0x75e20000, + 0x6ce50000, 0x674e0000, 0x5c650000, 0x52290000, 0x73870000, 0x61440000, 0x6dea0000, 0x5d190000, + 0x96780000, 0x516d0000, 0x7d100000, 0x75590000, 0x6d410000, 0x677b0000, 0x52890000, 0x66880000, + 0x907c0000, 0x76420000, 0x6a020000, 0x5c3f0000, 0x50da0000, 0x60e10000, 0x91b40000, 0x4f8b0000, + 0x97480000, 0x92340000, 0x7f9a0000, 0x73b20000, 0x5dba0000, 0x56f90000, 0x73750000, 0x6bae0000, + 0x5ff50000, 0x8aaa0000, 0x70c80000, 0x52a30000, 0x934a0000, 0x84ee0000, 0x806f0000, 0x79ca0000, + 0x71490000, 0x649a0000, 0x61900000, 0x8f620000, 0x66c60000, 0x9ece0000, 0x9a6a0000, 0x792a0000, + 0x65c50000, 0x59730000, 0x52f50000, 0x826f0000, 0x7ce70000, 0x51c90000, 0x4eae0000, 0x63a00000, + 0x62fe0000, 0x6bba0000, 0x84490000, 0x77010000, 0x53c30000, 0x6ccc0000, 0x4e0d0000, 0x4fbf0000, + 0x53170000, 0x60120000, 0x4e390000, 0x6a020000, 0x8b800000, 0x83f10000, 0x7dbe0000, 0x51cc0000, + 0x808b0000, 0x964b0000, 0x7d2f0000, 0x6dda0000, 0x5c620000, 0x96f70000, 0x78ca0000, 0x807e0000, + 0x5f040000, 0x9e7f0000, 0x83c90000, 0x797f0000, 0x788c0000, 0x97320000, 0x865c0000, 0x80010000, + 0x76e70000, 0x6ad30000, 0x51b70000, 0x4f860000, 0x72fc0000, 0x67170000, 0x81d80000, 0x89640000, + 0x6feb0000, 0x9e1e0000, 0x862d0000, 0x6b040000, 0x4e820000, 0x916a0000, 0x73de0000, 0x6d1b0000, + 0x908f0000, 0x87ba0000, 0x7f850000, 0x61f60000, 0x55870000, 0x59510000, 0x9f9c0000, 0x4e320000, + 0x8eca0000, 0x8c480000, 0x6c670000, 0x6cbf0000, 0x6c4e0000, 0x6bbb0000, 0x6b9f0000, 0x5db05bf, + 0x5d505b9, 0x5e905bc, 0x69ea0000, 0x5e705bc, 0x69140000, 0x688e0000, 0x5e105bc, 0x67850000, + 0x3b490000, 0x67530000, 0x67210000, 0x5da05bc, 0x5d805bc, 0x67000000, 0x51920000, 0x3b080000, + 0x5d405bc, 0x5d205bc, 0x5d005bc, 0x654f0000, 0x64770000, 0x5d005b7, 0xfb4905c1, 0x5e905c1, + 0x63830000, 0x62fc0000, 0x62d40000, 0x625d0000, 0x62100000, 0x61f20000, 0x61af0000, 0x61b20000, + 0x617a0000, 0x614e0000, 0x61480000, 0x391c0000, 0x60810000, 0x5fd70000, 0x5f9a0000, 0x5f6b0000, + 0x38c70000, 0x5f220000, 0x5efe0000, 0x5eca0000, 0x5eb30000, 0x387c0000, 0x38620000, 0x5e3d0000, + 0x5dfd0000, 0x5de20000, 0x5d7c0000, 0x5d6e0000, 0x5d430000, 0x5c8d0000, 0x5c6e0000, 0x37810000, + 0x5f530000, 0x5bff0000, 0x5bf30000, 0x5bd80000, 0x5b3e0000, 0x36fc0000, 0x5a660000, 0x5a270000, + 0x59ec0000, 0x59220000, 0x59060000, 0x58f20000, 0x58ac0000, 0x58320000, 0x580d0000, 0x57ce0000, + 0x52070000, 0x56510000, 0x56060000, 0x55c20000, 0x55ab0000, 0x9f430000, 0x55630000, 0x55100000, + 0x40390000, 0x3b9d0000, 0x53ca0000, 0x9f9c0000, 0x983b0000, 0x97ff0000, 0x97560000, 0x53490000, + 0x53060000, 0x967c0000, 0x91990000, 0x8f380000, 0x8b8a0000, 0x523b0000, 0x52030000, 0x8aed0000, + 0x8b010000, 0x8af80000, 0x89960000, 0x51670000, 0x89410000, 0x83ef0000, 0x80050000, 0x7df40000, + 0x507a0000, 0x4fbb0000, 0x7c7b0000, 0x7ab10000, 0x77400000, 0x76f40000, 0x76ca0000, 0x761d0000, + 0x75060000, 0x732a0000, 0x72350000, 0x716e0000, 0x6f220000, 0x6edb0000, 0x6bba0000, 0x67560000, + 0x67170000, 0x65560000, 0x641c0000, 0x62340000, 0x61600000, 0x61080000, 0x60d80000, 0x5f690000, + 0x5ed20000, 0x5a620000, 0x59440000, 0x585a0000, 0x55990000, 0x559d0000, 0x52c70000, 0x51450000, + 0x51680000, 0x4e260000, 0x96e30000, 0x8fb60000, 0x8cd30000, 0x8b010000, 0x89100000, 0x82790000, + 0x81ed0000, 0x7f720000, 0x7e090000, 0x7bc00000, 0x7a400000, 0x798d0000, 0x79560000, 0x79480000, + 0x793e0000, 0x74220000, 0x716e0000, 0x6f220000, 0x68850000, 0x65e20000, 0x61f20000, 0x61680000, + 0x5c6e0000, 0x5c640000, 0x56680000, 0x559d0000, 0x52e40000, 0x514d0000, 0x4fae0000, 0x99280000, + 0x98fc0000, 0xfb30f80, 0xf710f74, 0x97560000, 0x79650000, 0x793c0000, 0x732a0000, 0x9d670000, + 0x51400000, 0x898b0000, 0x884c0000, 0x66b40000, 0x5b850000, 0x62d30000, 0x52070000, 0x523a0000, + 0x8b580000, 0x72c00000, 0x7b200000, 0x81e80000, 0x67970000, 0x9c570000, 0x85fa0000, 0x74980000, + 0x6eba0000, 0x96e20000, 0x88e10000, 0x7f790000, 0x74060000, 0x68a80000, 0x66130000, 0x540f0000, + 0x96860000, 0x68170000, 0x5f8b0000, 0x8f2a0000, 0x502b0000, 0x622e0000, 0x985e0000, 0x786b0000, + 0x74090000, 0x6e9c0000, 0x67f30000, 0x962e0000, 0x9f8d0000, 0x84fc0000, 0x71ce0000, 0x65990000, + 0x5bee0000, 0x4e860000, 0x96b80000, 0x79ae0000, 0x98180000, 0x96f60000, 0x80460000, 0x74690000, + 0x601c0000, 0x5be70000, 0x4ee40000, 0x7c3e0000, 0x637b0000, 0x5ec90000, 0x88c20000, 0x54bd0000, + 0x52170000, 0x90230000, 0x8f260000, 0x7df40000, 0x74890000, 0x6f230000, 0x62000000, 0x5e740000, + 0x6b770000, 0x529b0000, 0x9e970000, 0x95ad0000, 0x6ffe0000, 0x5eec0000, 0x54420000, 0x91cf0000, + 0x8ad20000, 0x68810000, 0x51690000, 0x75650000, 0x82e50000, 0x6c880000, 0x8fb00000, 0x8aaa0000, + 0x585e0000, 0x7d220000, 0x65780000, 0x5fa90000, 0x78fb0000, 0x75700000, 0x73870000, 0x5be70000, + 0x8afe0000, 0x62cf0000, 0x96750000, 0x7a1c0000, 0x51dc0000, 0x52d20000, 0x7e370000, 0x6f0f0000, + 0x6a130000, 0x58d80000, 0x8cc20000, 0x72620000, 0x7c600000, 0x58df0000, 0x8ad60000, 0x93040000, + 0x7da00000, 0x9dfa0000, 0x9b6f0000, 0x8def0000, 0x86060000, 0x72100000, 0x64c40000, 0x52de0000, + 0x90ce0000, 0x6d6a0000, 0x5eca0000, 0x881f0000, 0x62c90000, 0x85cd0000, 0x5d500000, 0x721b0000, + 0x53750000, 0x99f10000, 0x843d0000, 0x70d90000, 0x6a020000, 0x88f80000, 0x863f0000, 0x76690000, + 0x59480000, 0x91d10000, 0x9f9c0000, 0x53e50000, 0x6ed10000, 0x8cc80000, 0x66f40000, 0x6d160000, + 0x6ccd0000, 0x6bba0000, 0x3c4e0000, 0x3c180000, 0x6adb0000, 0x6aa80000, 0x69420000, 0x3b9d0000, + 0x681f0000, 0x68850000, 0x68520000, 0x67fa0000, 0x675e0000, 0x67170000, 0x80ad0000, 0x669c0000, + 0x51950000, 0x3ae40000, 0x3b190000, 0x66f80000, 0x656c0000, 0x3a6c0000, 0x647e0000, 0x3a2e0000, + 0x63c50000, 0x64220000, 0x63e40000, 0x63680000, 0x633d0000, 0x63500000, 0x62b10000, 0x621b0000, + 0x61f60000, 0x61de0000, 0x61a40000, 0x618e0000, 0x614c0000, 0x614c0000, 0x60c70000, 0x60940000, + 0x393a0000, 0x5ff90000, 0x5fcd0000, 0x38e30000, 0x5f620000, 0x5f220000, 0x82010000, 0x5eb60000, + 0x5eb00000, 0x5e690000, 0x5e280000, 0x382f0000, 0x5de10000, 0x30080000, 0x5d6b0000, 0x5cc00000, + 0x5c600000, 0x5c220000, 0x5c060000, 0x5be70000, 0x5bc30000, 0x5b3e0000, 0x5b080000, 0x36ee0000, + 0x59d80000, 0x5a1b0000, 0x59620000, 0x591a0000, 0x58f70000, 0x578b0000, 0x57f40000, 0x58ee0000, + 0x56740000, 0x57170000, 0x57160000, 0x55b30000, 0x55840000, 0x55840000, 0x55530000, 0x54480000, + 0x549e0000, 0x53f10000, 0x53eb0000, 0x53df0000, 0x537f0000, 0x537d0000, 0x535a0000, 0x53510000, + 0x53170000, 0x52fa0000, 0x52c90000, 0x35150000, 0x52720000, 0x52460000, 0x34df0000, 0x51ac0000, + 0x51a40000, 0x4cf80000, 0x518d0000, 0x34b90000, 0x51640000, 0x9cfd0000, 0x9b120000, 0x514d0000, + 0x349e0000, 0x50e70000, 0x50990000, 0x99c20000, 0x50020000, 0x4f600000, 0x980b0000, 0x4ab20000, + 0x97e00000, 0x4a6e0000, 0x5db20000, 0x49e60000, 0x95b70000, 0x958b0000, 0x94150000, 0x927c0000, + 0x92d70000, 0x911b0000, 0x91110000, 0x8ed40000, 0x8df00000, 0x8cab0000, 0x8c550000, 0x46c70000, + 0x34bb0000, 0x88d70000, 0x88630000, 0x45f90000, 0x87e10000, 0x87860000, 0x87280000, 0x86e20000, + 0x86880000, 0x86690000, 0x865c0000, 0x456b0000, 0x455d0000, 0x85640000, 0x85160000, 0x84f10000, + 0x83cc0000, 0x83530000, 0x83e70000, 0x82e50000, 0x82e60000, 0x82b30000, 0x52b30000, 0x828b0000, + 0x446b0000, 0x82040000, 0x5ab50000, 0x440b0000, 0x80050000, 0x7f950000, 0x7f7a0000, 0x43590000, + 0x7e450000, 0x7dc70000, 0x7d630000, 0x7d000000, 0x7ce80000, 0x7cd20000, 0x42270000, 0x7bc60000, + 0x42020000, 0x7a4a0000, 0x798f0000, 0x78cc0000, 0x784e0000, 0x40960000, 0x778b0000, 0x774a0000, + 0x771f0000, 0x3ffc0000, 0x76100000, 0x75700000, 0x753e0000, 0x74ca0000, 0x74710000, 0x74470000, + 0x3eb80000, 0x3eac0000, 0x737a0000, 0x72800000, 0x72500000, 0x72280000, 0x719c0000, 0x71450000, + 0x70ad0000, 0x707d0000, 0x3d960000, 0x701e0000, 0x6fc60000, 0x6df90000, 0x6ec70000, 0x3d330000, + 0x6e2f0000, 0x6d780000, 0x6d410000, 0x6d3e0000, 0x6b720000, 0x6b540000, 0x6b210000, 0x69a30000, + 0x4b0000, 0x3a90000, 0x671b0000, 0x43d90000, 0x66910000, 0x66490000, 0x65e30000, 0x649d0000, + 0x64690000, 0x63a90000, 0x9f3b0000, 0x9f0f0000, 0x9efe0000, 0x4d560000, 0x9ebb0000, 0x4cce0000, + 0x9c400000, 0x4bce0000, 0x99fe0000, 0xb210b3c, 0x98e20000, 0x98290000, 0x4a760000, 0x97230000, + 0x96c30000, 0x93f90000, 0x92d80000, 0x58310000, 0x8f380000, 0x8dcb0000, 0x8cc10000, 0x8aed0000, + 0x55990000, 0x54a20000, 0x8aa00000, 0x46be0000, 0x88de0000, 0x52e40000, 0x52c70000, 0x52770000, + 0x86a90000, 0x86670000, 0x86500000, 0x51f50000, 0x51b50000, 0x4ecc0000, 0x45610000, 0x51970000, + 0x51770000, 0x452b0000, 0x51540000, 0x50cf0000, 0x4fae0000, 0x4e410000, 0x4e3d0000, 0x20030000, + 0x82bd0000, 0x829d0000, 0x3850000, 0x82010000, 0x813e0000, 0xf900fb5, 0x80600000, 0xfab0fb7, + 0xfa60fb7, 0xfa10fb7, 0x43340000, 0xf9c0fb7, 0xf920fb7, 0x43010000, 0xa170a3c, 0xf710f80, + 0x42a00000, 0xfb20f80, 0xf710f72, 0xf400fb5, 0x7a4f0000, 0x412f0000, 0xf5b0fb7, 0xf560fb7, + 0xf510fb7, 0xf4c0fb7, 0xf420fb7, 0x788c0000, 0x40460000, 0x76f40000, 0x75240000, 0x73a50000, + 0x738b0000, 0x9a209bc, 0x70390000, 0x6f6e0000, 0x6d340000, 0x6d850000, 0x9f050000, 0x92f093c, + 0x921093c, 0x91c093c, 0x915093c, 0x8b8a0000, 0x46350000, 0x88010000, 0x870e0000, 0x84f30000, + 0x83dc0000, 0x83ca0000, 0x84570000, 0x83230000, 0x83630000, 0x831d0000, 0x82b10000, 0x54f60000, + 0x8f9e0000, 0x54680000, 0x54380000, 0x54060000, 0x80b20000, 0x43d50000, 0x70700000, 0x537f0000, + 0x537f0000, 0x80700000, 0x53730000, 0x53050000, 0x7ce30000, 0x7bc90000, 0x7aee0000, 0x7a400000, + 0x4e380000, 0x79eb0000, 0x79560000, 0x40e30000, 0x40390000, 0x771f0000, 0x40080000, 0x3f1b0000, + 0x74850000, 0x745c0000, 0x3eb80000, 0x72950000, 0x9f160000, 0xb220b3c, 0x70770000, 0x704a0000, + 0x701b0000, 0x6ecb0000, 0x6e6e0000, 0x99290000, 0x4b330000, 0x6d690000, 0x6d770000, 0x980b0000, + 0x2add0338, 0x49950000, 0x92380000, 0x90940000, 0x8dbc0000, 0x8d1b0000, 0xa2b0a3c, 0xa1c0a3c, + 0xa160a3c, 0x88fa0000, 0xa380a3c, 0xa320a3c, 0x88600000, 0x45d70000, 0x876b0000, 0x87790000, + 0x9af09bc, 0x9a109bc, 0x83bd0000, 0x83ad0000, 0x82910000, 0x92b093c, 0x922093c, 0x917093c, + 0x916093c, 0x81030000, 0x7ffa0000, 0x7e020000, 0x771e0000, 0x9ef90000, 0x99a70000, 0x72350000, + 0x90f10000, 0x8d770000, 0x3010000, 0xb70000, 0x3b0000, 0x2b90000, 0x3080301, 0x3130000, + 0x3000000, 0x30090000, 0xc50000, 0x20020000 }; static unsigned int utable_compose_result[] = { 0x226e, 0x2260, 0x226f, 0xc0, 0xc1, 0xc2, 0xc3, 0x100, @@ -533,36 +533,36 @@ static unsigned int utable_compose_result[] = { the mapped index, negate, then multiply by 2 to find the pair. */ static unsigned int utable_compose_long_pairs[] = { 0x27ed3, 0x0, 0x25249, 0x0, 0x233d5, 0x0, 0x2284a, 0x0, - 0x25aa7, 0x0, 0x2597c, 0x0, 0x2569a, 0x0, 0x25626, 0x0, - 0x25133, 0x0, 0x250f2, 0x0, 0x24fb8, 0x0, 0x24735, 0x0, - 0x21d0b, 0x0, 0x238a7, 0x0, 0x236a3, 0x0, 0x2300a, 0x0, - 0x22bf1, 0x0, 0x22b0c, 0x0, 0x226d4, 0x0, 0x261da, 0x0, - 0x22331, 0x0, 0x25cd0, 0x0, 0x22844, 0x0, 0x219c8, 0x0, - 0x216a8, 0x0, 0x2051c, 0x0, 0x25aa7, 0x0, 0x256c5, 0x0, - 0x2541d, 0x0, 0x25119, 0x0, 0x250f3, 0x0, 0x25044, 0x0, - 0x2219f, 0x0, 0x24814, 0x0, 0x24608, 0x0, 0x20525, 0x0, - 0x23f5e, 0x0, 0x23d1e, 0x0, 0x23cbc, 0x0, 0x23afa, 0x0, - 0x23a8d, 0x0, 0x2346d, 0x0, 0x233c3, 0x0, 0x232b8, 0x0, - 0x22331, 0x0, 0x2a392, 0x0, 0x216ea, 0x0, 0x20b63, 0x0, - 0x20a2c, 0x0, 0x291df, 0x0, 0x2054b, 0x0, 0x2063a, 0x0, - 0x1d158, 0x1d165, 0x2a291, 0x0, 0x2a105, 0x0, 0x29145, 0x0, - 0x285d2, 0x0, 0x27f2f, 0x0, 0x27966, 0x0, 0x26fb1, 0x0, - 0x26cd5, 0x0, 0x26c36, 0x0, 0x2339c, 0x0, 0x267b5, 0x0, - 0x2335f, 0x0, 0x265a8, 0x0, 0x26523, 0x0, 0x26228, 0x0, - 0x1d1bc, 0x1d16f, 0x1d1bc, 0x1d16e, 0x1d1ba, 0x1d165, 0x1d1b9, 0x1d165, - 0x24fa1, 0x0, 0x24c92, 0x0, 0x24c36, 0x0, 0x243ab, 0x0, - 0x24263, 0x0, 0x1d15f, 0x1d172, 0x1d15f, 0x1d170, 0x1d15f, 0x1d16e, - 0x23f8e, 0x0, 0x23ed1, 0x0, 0x22183, 0x0, 0x2a20e, 0x0, - 0x214e4, 0x0, 0x29496, 0x0, 0x2940a, 0x0, 0x208de, 0x0, - 0x278ae, 0x0, 0x27667, 0x0, 0x26f2c, 0x0, 0x23393, 0x0, - 0x2633e, 0x0, 0x2a600, 0x0, 0x2a0ce, 0x0, 0x29b30, 0x0, - 0x295b6, 0x0, 0x2921a, 0x0, 0x28d77, 0x0, 0x28bfa, 0x0, - 0x285ed, 0x0, 0x21de6, 0x0, 0x27ca8, 0x0, 0x21b18, 0x0, - 0x1d1bb, 0x1d16f, 0x273ca, 0x0, 0x26d6b, 0x0, 0x26b3c, 0x0, - 0x264da, 0x0, 0x262d9, 0x0, 0x26247, 0x0, 0x1d15f, 0x1d171, - 0x1d15f, 0x1d16f, 0x1d157, 0x1d165, 0x25c80, 0x0, 0x25bab, 0x0, - 0x2872e, 0x0, 0x20804, 0x0, 0x270d2, 0x0, 0x21de4, 0x0, - 0x25f86, 0x0, 0x20122, 0x0, 0x1d1bb, 0x1d16e, 0x267a7, 0x0 + 0x21d0b, 0x0, 0x236a3, 0x0, 0x22bf1, 0x0, 0x22b0c, 0x0, + 0x226d4, 0x0, 0x261da, 0x0, 0x22331, 0x0, 0x219c8, 0x0, + 0x216a8, 0x0, 0x25cd0, 0x0, 0x22844, 0x0, 0x20b63, 0x0, + 0x2051c, 0x0, 0x2a291, 0x0, 0x2a105, 0x0, 0x2a0ce, 0x0, + 0x23cbc, 0x0, 0x23afa, 0x0, 0x23a8d, 0x0, 0x238a7, 0x0, + 0x233c3, 0x0, 0x2300a, 0x0, 0x232b8, 0x0, 0x22331, 0x0, + 0x2a392, 0x0, 0x22183, 0x0, 0x21de6, 0x0, 0x21de4, 0x0, + 0x21b18, 0x0, 0x216ea, 0x0, 0x214e4, 0x0, 0x20a2c, 0x0, + 0x291df, 0x0, 0x2054b, 0x0, 0x29145, 0x0, 0x285d2, 0x0, + 0x27f2f, 0x0, 0x27966, 0x0, 0x26fb1, 0x0, 0x26cd5, 0x0, + 0x26c36, 0x0, 0x2339c, 0x0, 0x267b5, 0x0, 0x2335f, 0x0, + 0x265a8, 0x0, 0x26523, 0x0, 0x26228, 0x0, 0x25aa7, 0x0, + 0x2597c, 0x0, 0x2569a, 0x0, 0x25626, 0x0, 0x25133, 0x0, + 0x250f2, 0x0, 0x24fb8, 0x0, 0x24735, 0x0, 0x23f5e, 0x0, + 0x23d1e, 0x0, 0x2346d, 0x0, 0x1d1bc, 0x1d16e, 0x1d1ba, 0x1d165, + 0x1d1b9, 0x1d165, 0x1d15f, 0x1d172, 0x1d15f, 0x1d170, 0x1d15f, 0x1d16e, + 0x1d157, 0x1d165, 0x2a20e, 0x0, 0x2921a, 0x0, 0x28d77, 0x0, + 0x28bfa, 0x0, 0x208de, 0x0, 0x20804, 0x0, 0x27ca8, 0x0, + 0x27667, 0x0, 0x270d2, 0x0, 0x26f2c, 0x0, 0x273ca, 0x0, + 0x2063a, 0x0, 0x26b3c, 0x0, 0x23393, 0x0, 0x26247, 0x0, + 0x25c80, 0x0, 0x2541d, 0x0, 0x25119, 0x0, 0x243ab, 0x0, + 0x23f8e, 0x0, 0x29b30, 0x0, 0x285ed, 0x0, 0x26d6b, 0x0, + 0x267a7, 0x0, 0x264da, 0x0, 0x1d1bc, 0x1d16f, 0x2633e, 0x0, + 0x262d9, 0x0, 0x25f86, 0x0, 0x25bab, 0x0, 0x25aa7, 0x0, + 0x20122, 0x0, 0x256c5, 0x0, 0x250f3, 0x0, 0x25044, 0x0, + 0x24fa1, 0x0, 0x2219f, 0x0, 0x24c92, 0x0, 0x24c36, 0x0, + 0x1d15f, 0x1d171, 0x1d15f, 0x1d16f, 0x24814, 0x0, 0x24608, 0x0, + 0x1d158, 0x1d165, 0x2a600, 0x0, 0x24263, 0x0, 0x20525, 0x0, + 0x23ed1, 0x0, 0x29496, 0x0, 0x2940a, 0x0, 0x2872e, 0x0, + 0x278ae, 0x0, 0x295b6, 0x0, 0x1d1bb, 0x1d16f, 0x1d1bb, 0x1d16e }; /* utable_decomp_keys identifies characters that have a canonical decomposition; @@ -862,8 +862,8 @@ static short utable_decomp_indices[] = { 125, 311, 126, 312, 155, 342, 156, 343, 135, 321, 140, 327, 61, 246, 9, 194, 46, 231, 401, 428, 399, 426, 110, 296, - 486, 487, 177, 365, 1899, 1905, 1898, 1904, - 1903, 1902, 378, 490, 1901, 497, 501, 506, + 486, 487, 177, 365, 1904, 1898, 1903, 1902, + 1901, 1900, 378, 490, 1899, 497, 501, 506, 513, 518, 524, 577, 509, 521, 531, 539, 543, 549, 580, 552, 566, 557, 563, 571, 583, 584, 589, 591, 588, 585, 599, 595, @@ -874,14 +874,14 @@ static short utable_decomp_indices[] = { 635, 636, 607, 629, 601, 623, 603, 625, 604, 626, 605, 627, 606, 628, 637, 638, 640, 639, 641, 644, 642, 643, 645, 646, - 647, 1798, 1879, 1878, 1797, 1877, 1796, 1795, - 1876, 648, 649, 1784, 1874, 1873, 1872, 1871, - 1870, 1869, 1756, 1868, 651, 650, 652, 1733, - 1837, 653, 654, 656, 655, 657, 658, 660, + 647, 1810, 1888, 1887, 1809, 1808, 1886, 1885, + 1807, 648, 649, 1881, 1801, 1880, 1875, 1874, + 1872, 1782, 1871, 1870, 651, 650, 652, 1731, + 1853, 653, 654, 656, 655, 657, 658, 660, 661, 659, 662, 663, 665, 664, 666, 667, - 669, 668, 1769, 1768, 1766, 1765, 1764, 1762, - 1897, 1760, 1759, 1758, 1757, 1754, 1345, 1751, - 1750, 1748, 1745, 670, 17, 202, 19, 204, + 669, 668, 1794, 1793, 1792, 1791, 1790, 1787, + 1786, 1362, 1785, 1361, 1783, 1780, 1779, 1777, + 1776, 1775, 1773, 670, 17, 202, 19, 204, 20, 205, 21, 206, 388, 415, 27, 212, 29, 214, 32, 217, 30, 215, 31, 216, 442, 444, 443, 445, 48, 233, 49, 234, @@ -924,167 +924,167 @@ static short utable_decomp_indices[] = { 768, 567, 568, 769, 772, 770, 773, 771, 774, 522, 775, 776, 777, 572, 573, 778, 782, 779, 783, 780, 784, 525, 526, 792, - 796, 793, 797, 794, 798, 530, 936, 538, - 935, 542, 934, 548, 933, 556, 932, 562, - 931, 570, 930, 688, 692, 693, 694, 695, + 796, 793, 797, 794, 798, 530, 935, 538, + 934, 542, 933, 548, 932, 556, 931, 562, + 930, 570, 929, 688, 692, 693, 694, 695, 696, 697, 698, 702, 706, 707, 708, 709, 710, 711, 712, 724, 728, 729, 730, 731, 732, 733, 734, 738, 742, 743, 744, 745, 746, 747, 748, 781, 785, 786, 787, 788, 789, 790, 791, 795, 799, 800, 801, 802, 803, 804, 805, 533, 532, 806, 537, 528, - 536, 809, 492, 491, 489, 929, 495, 928, - 379, 807, 547, 529, 546, 813, 496, 927, - 500, 926, 504, 810, 811, 812, 551, 550, - 576, 925, 555, 578, 508, 507, 505, 924, - 815, 816, 817, 565, 564, 579, 923, 560, - 561, 569, 581, 520, 519, 517, 922, 516, - 377, 1741, 921, 808, 575, 582, 574, 814, - 512, 920, 523, 919, 527, 918, 1737, 917, - 1727, 1725, 1667, 818, 819, 820, 821, 823, + 536, 809, 492, 491, 489, 928, 495, 927, + 379, 807, 547, 529, 546, 813, 496, 926, + 500, 925, 504, 810, 811, 812, 551, 550, + 576, 924, 555, 578, 508, 507, 505, 923, + 815, 816, 817, 565, 564, 579, 922, 560, + 561, 569, 581, 520, 519, 517, 921, 516, + 377, 1770, 920, 808, 575, 582, 574, 814, + 512, 919, 523, 918, 527, 917, 1907, 1767, + 1713, 1712, 1906, 818, 819, 820, 821, 823, 822, 824, 825, 826, 827, 828, 829, 830, 831, 832, 1, 834, 833, 0, 2, 835, 836, 837, 838, 839, 840, 841, 842, 845, 846, 847, 848, 851, 852, 853, 854, 843, - 844, 849, 850, 855, 856, 857, 858, 1907, - 1906, 1857, 860, 861, 862, 863, 864, 865, + 844, 849, 850, 855, 856, 857, 858, 1557, + 1905, 1864, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 859, 885, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 886, 912, - 913, 914, 915, 916, 1517, 1186, 1516, 1185, - 1515, 1184, 1514, 1183, 1513, 1182, 1512, 1181, - 1511, 1180, 1510, 1179, 1178, 1509, 1508, 1177, - 1176, 1507, 1175, 1506, 1505, 1174, 1173, 1504, - 1503, 1172, 1171, 1502, 1501, 1170, 1500, 1169, - 1168, 1499, 1167, 1498, 1166, 1497, 1165, 1496, - 1164, 1495, 1163, 1494, 1162, 1493, 1492, 1161, - 1160, 1491, 1159, 1490, 1489, 1158, 1488, 1157, - 1156, 1487, 1486, 1155, 1485, 1154, 1484, 1153, - 1152, 1483, 1482, 1151, 1481, 1150, 1480, 1149, - 1479, 1148, 1478, 1147, 1477, 1146, 1476, 1145, - 1475, 1144, 1474, 1143, 1473, 1142, 1472, 1141, - 1471, 1140, 1470, 1139, 1469, 1138, 1468, 1137, - 1136, 1467, 1466, 1135, 1465, 1134, 1464, 1133, - 1463, 1132, 1462, 1131, 1461, 1130, 1460, 1129, - 1128, 1459, 1458, 1127, 1457, 1126, 1456, 1125, - 1124, 1455, 1454, 1123, 1453, 1122, 1452, 1121, - 1451, 1120, 1450, 1119, 1118, 1449, 1448, 1117, - 1447, 1116, 1446, 1115, 1445, 1114, 1444, 1113, - 1443, 1112, 1442, 1111, 1110, 1441, 1440, 1109, - 1108, 1439, 1438, 1107, 1437, 1106, 1436, 1105, - 1435, 1104, 1103, 1434, 1433, 1102, 1101, 1432, - 1431, 1100, 1099, 1430, 1429, 1098, 1428, 1097, - 1427, 1096, 1426, 1095, 1425, 1094, 1424, 1093, - 1423, 1092, 1091, 1422, 1421, 1090, 1420, 1089, - 1419, 1088, 1418, 1087, 1086, 1417, 1085, 1416, - 1415, 1084, 1414, 1083, 1413, 1082, 1412, 1081, - 1411, 1080, 1410, 1079, 1409, 1078, 1408, 1077, - 1407, 1076, 1406, 1075, 1405, 1074, 1404, 1073, - 1403, 1072, 1402, 1071, 1401, 1070, 1400, 1069, - 1399, 1068, 1398, 1067, 1066, 1397, 1396, 1065, - 1395, 1064, 1394, 1063, 1393, 1062, 1392, 1061, - 1391, 1060, 1390, 1059, 1389, 1058, 1388, 1057, - 1387, 1056, 1055, 1386, 1385, 1054, 1053, 1384, - 1383, 1052, 1051, 1050, 1049, 1382, 1048, 1381, - 1047, 1380, 1046, 1379, 1045, 1044, 1043, 1042, - 1041, 1040, 1378, 1039, 1377, 1038, 1376, 1037, - 1375, 1036, 1374, 1035, 1373, 1034, 1372, 1033, - 1371, 1032, 1370, 1031, 1369, 1030, 1368, 1029, - 1028, 1367, 1366, 1027, 1365, 1026, 1364, 1025, - 1363, 1024, 1362, 1023, 1361, 1022, 1360, 1021, - 1359, 1020, 1358, 1019, 1357, 1018, 1356, 1017, - 1355, 1016, 1354, 1015, 1353, 1014, 1352, 1013, - 1351, 1012, 1350, 1011, 1349, 1010, 1348, 1009, - 1008, 1007, 1347, 1006, 1346, 1344, 1005, 1343, - 1004, 1342, 1003, 1341, 1002, 1339, 1001, 1338, - 1000, 1336, 999, 1335, 998, 1333, 997, 1332, - 996, 1331, 995, 1330, 994, 1328, 993, 1327, - 992, 1325, 991, 1324, 990, 1322, 989, 1321, - 988, 1319, 987, 1318, 986, 1316, 985, 1315, - 984, 1313, 983, 1312, 982, 1310, 981, 1309, - 980, 1307, 979, 1306, 978, 1304, 977, 1303, - 976, 1301, 975, 1300, 974, 1298, 973, 1297, - 972, 1295, 971, 1294, 970, 1293, 969, 1292, - 968, 1290, 967, 1289, 966, 1288, 965, 1287, - 964, 963, 1285, 1284, 962, 1282, 961, 1281, - -4, -23, -3, 1279, 960, 1277, -2, -22, - -1, 1275, 959, 958, 957, 1223, 956, 1221, - 955, 1220, 954, 1218, 953, 1217, 952, 1215, - 951, 950, 1212, 949, 1211, 948, 947, 946, - 1207, 945, 944, 943, 942, 1203, 941, 1201, - 940, 1200, 939, 1198, 938, -114, -53, -80, - -113, -79, -112, -78, -72, -71, -123, -70, - -105, -69, 1340, 1863, 1862, -122, 1653, 1780, - 1337, 1652, 1651, 1779, 1650, 1861, 1334, -52, - 1649, 1777, 1648, 1776, -26, 1647, 1646, 1775, - -51, 1858, 1329, 1645, 1644, 1856, -50, 1854, - 1326, 1774, 1643, 1773, 1642, 1853, 1323, 1641, - 1852, 1896, 1640, 1771, 1320, 1639, 1638, 1770, - 1637, 1849, 1317, 1636, 1635, 1848, -49, 1846, - 1314, 1634, -48, 1845, 1633, 1844, 1311, 1632, - 1631, 1843, 1630, 1841, 1308, 1629, 1628, 1761, - 1627, 1894, 1305, 1626, 1625, 1838, 1624, 937, - 1302, 1836, 1623, 1835, 1755, 1834, 1299, 1622, - 1833, 1892, 1621, -85, 1296, 1620, 1619, 1753, - 1752, 1832, -25, -47, 1829, 1891, 1618, 1828, - 1291, 1747, 1617, 1746, 1616, 1827, -24, 1615, - 1614, 1826, 1613, -104, 1286, 1612, 1611, 1743, - 1610, 1823, 1283, 1609, 1608, -120, 1607, -102, - 1280, 1606, 1740, 1820, 1605, 1739, 1278, 1604, - 1603, 1818, 1602, -83, 1276, 1738, 1601, 1736, - 1274, -46, 1273, -45, -21, 1600, 1272, 1599, - 1271, -44, -20, 1598, 1270, 1597, 1269, 1596, - 1268, 1595, 1267, 1594, 1266, 1593, -19, 1592, - 1265, 1591, 1264, 1590, 1263, 1589, 1262, 1588, - 1261, 1587, 1260, 1586, 1259, 1585, 1258, 1584, - 1257, 1583, -18, 1582, 1256, 1581, 1255, 1580, - -17, 1805, 1254, 1579, 1253, 1578, 1252, 1577, - 1251, 1576, 1250, 1575, -16, 1735, 1249, 1574, - 1248, 1573, 1247, 1572, 1246, 1571, 1245, 1570, - 1244, 1569, 1243, 1568, 1242, 1567, 1241, -43, - 1240, 1566, 1239, 1565, 1238, -42, 1237, 1564, - 1236, 1563, 1235, 1562, 1234, 1561, -15, 1560, - 1233, 1559, -14, 1558, 1232, 1557, 1231, 1556, - 1230, -41, -13, -40, 1229, -39, 1228, 1555, - 1227, 1554, 1226, 1553, 1225, 1552, 1224, 1551, - -38, 1875, 1222, 1550, 1549, 1800, 1548, -82, - 1219, 1547, -37, -81, 1546, 1734, 1216, 1545, - 1544, 1799, 1214, 1543, 1213, -36, 1542, -77, - 1541, -76, 1210, 1540, 1209, -35, 1208, 1539, - -12, -34, 1538, 1732, 1206, 1537, 1205, 1536, - 1204, 1535, 1534, 1731, 1202, 1533, 1532, -75, - 1531, -74, 1199, -33, 1530, -73, -11, -32, - 1197, 1529, 1196, -31, -10, -30, -9, 1528, - 1195, 1527, 1194, 1526, 1193, 1525, 1192, -29, - 1191, 1524, 1190, 1523, -8, 1522, -7, -28, - 1189, 1521, 1188, 1520, 1187, 1519, -6, -27, - -5, 1518, 1730, -116, 1729, 1867, 1794, -115, - 1728, 1866, 1726, 1865, 1793, -121, 1724, 1895, - 1723, 1864, 1722, 1792, -68, -111, 1721, -110, - 1720, -93, 1719, 1860, 1718, -109, -67, 1791, - -66, 1859, -65, 1893, 1717, 1790, 1716, 1855, - 1715, -124, -64, -92, -63, 1789, 1714, 1900, - 1713, 1788, 1712, 1851, 1711, 1850, 1710, 1787, - 1709, -108, 1708, 1847, 1707, 1786, 1706, 1890, - 1705, 1785, 1704, 1889, 1703, 1842, -62, -107, - -61, 1840, 1702, 1839, 1701, -106, 1700, -91, - 1699, 1888, -60, -119, 1698, 1783, 1697, 1887, - 1696, 1782, 1695, 1781, 1694, 1886, 1693, 1831, - 1830, 1885, 1692, 1778, 1691, 1884, 1690, -90, - 1689, 1883, 1688, 1882, 1687, -89, -59, 1825, - 1686, 1824, 1685, 1822, 1684, -103, 1683, 1821, - 1682, 1772, -58, -118, 1681, 1819, 1680, -88, - 1679, 1817, -57, -101, 1678, 1767, 1816, -117, - 1677, 1815, 1676, 1763, 1675, 1814, 1674, -100, - 1673, 1813, 1672, -99, 1671, 1812, 1670, 1811, - -56, -98, 1669, 1810, 1668, -87, 1666, -86, - 1665, 1809, 1664, -97, 1663, 1808, 1662, 1807, - 1661, 1749, 1660, -96, 1659, 1806, 1658, 1744, - 1804, 1881, -95, 1880, -55, -84, -54, 1803, - 1657, 1802, 1656, 1742, 1655, 1801, 1654, -94 + 913, 914, 915, 916, 1185, 1502, 1184, 1501, + 1500, 1183, 1499, 1182, 1498, 1181, 1497, 1180, + 1496, 1179, 1495, 1178, 1494, 1177, 1493, 1176, + 1492, 1175, 1491, 1174, 1490, 1173, 1489, 1172, + 1488, 1171, 1487, 1170, 1169, 1486, 1168, 1485, + 1167, 1484, 1166, 1483, 1482, 1165, 1481, 1164, + 1480, 1163, 1162, 1479, 1478, 1161, 1477, 1160, + 1159, 1476, 1158, 1475, 1157, 1474, 1473, 1156, + 1155, 1472, 1154, 1471, 1153, 1470, 1469, 1152, + 1468, 1151, 1467, 1150, 1466, 1149, 1465, 1148, + 1464, 1147, 1463, 1146, 1462, 1145, 1461, 1144, + 1460, 1143, 1459, 1142, 1141, 1458, 1140, 1457, + 1139, 1456, 1138, 1455, 1137, 1454, 1453, 1136, + 1452, 1135, 1451, 1134, 1133, 1450, 1449, 1132, + 1448, 1131, 1130, 1447, 1129, 1446, 1445, 1128, + 1444, 1127, 1443, 1126, 1442, 1125, 1441, 1124, + 1123, 1440, 1439, 1122, 1438, 1121, 1437, 1120, + 1436, 1119, 1435, 1118, 1434, 1117, 1433, 1116, + 1432, 1115, 1431, 1114, 1430, 1113, 1429, 1112, + 1428, 1111, 1427, 1110, 1426, 1109, 1425, 1108, + 1424, 1107, 1423, 1106, 1422, 1105, 1421, 1104, + 1420, 1103, 1419, 1102, 1418, 1101, 1417, 1100, + 1416, 1099, 1415, 1098, 1414, 1097, 1413, 1096, + 1412, 1095, 1411, 1094, 1410, 1093, 1409, 1092, + 1408, 1091, 1407, 1090, 1406, 1089, 1405, 1088, + 1404, 1087, 1403, 1086, 1085, 1402, 1084, 1401, + 1400, 1083, 1399, 1082, 1398, 1081, 1397, 1080, + 1396, 1079, 1078, 1395, 1394, 1077, 1393, 1076, + 1392, 1075, 1391, 1074, 1390, 1073, 1389, 1072, + 1388, 1071, 1387, 1070, 1386, 1069, 1385, 1068, + 1384, 1067, 1066, 1383, 1382, 1065, 1381, 1064, + 1380, 1063, 1379, 1062, 1378, 1061, 1377, 1060, + 1376, 1059, 1058, 1375, 1374, 1057, 1373, 1056, + 1372, 1055, 1371, 1054, 1370, 1053, 1369, 1052, + 1368, 1051, 1049, 1048, 1047, 1366, 1046, 1365, + 1045, 1364, 1044, 1363, 1043, 1042, 1041, 1040, + 1039, 1038, 1037, 1360, 1359, 1036, 1358, 1035, + 1357, 1034, 1356, 1033, 1355, 1032, 1354, 1031, + 1030, 1353, 1352, 1029, 1351, 1028, 1350, 1027, + 1349, 1026, 1348, 1025, 1024, 1347, 1346, 1023, + 1345, 1022, 1344, 1021, 1343, 1020, 1342, 1019, + 1341, 1018, 1340, 1017, 1339, 1016, 1338, 1015, + 1337, 1014, 1336, 1013, 1335, 1012, 1334, 1011, + 1333, 1010, 1332, 1009, 1331, 1008, 1330, 1007, + 1006, 1329, 1005, 1328, 1004, 1327, 1003, 1326, + 1002, 1325, 1001, 1324, 1000, 1323, 999, 1322, + 998, 1321, 997, 1320, 996, 1319, 995, 1318, + 994, 1317, 993, 1316, 992, 1315, 991, 1314, + 990, 1313, 989, 1312, 988, 1311, 987, 1310, + 986, 1309, 985, 1308, 984, 1307, 983, 1306, + 982, 1305, 981, 1304, 980, 1303, 979, 1302, + 978, 1301, 977, 1300, 976, 1299, 975, 1298, + 974, 1295, 973, 1294, 972, 1293, 971, 1292, + 970, 1290, 969, 1289, 968, 1288, 967, 1287, + 966, 1284, 965, 1283, 964, 1282, 963, 1281, + 962, 1278, 961, 1277, 960, 1276, 959, 1275, + -4, -15, -3, 1273, 958, 1272, -2, -14, + -1, 1269, 957, 956, 955, 1215, 954, 1214, + 953, 1213, 952, 1210, 951, 1209, 950, 1208, + 949, 948, 1204, 947, 1203, 946, 945, 944, + 943, 1198, 942, 941, 940, 1195, 939, 1193, + 938, 1192, 937, 1191, 936, -69, -113, -68, + -110, -67, -109, -66, -65, -64, -124, -63, + -123, -95, 1766, 1840, 1765, -101, 1613, 1764, + 1297, 1612, 1296, 1610, 1609, 1763, 1608, -81, + 1607, 1762, 1604, 1760, -17, 1603, 1291, 1602, + -38, 1759, 1600, 1757, 1599, 1756, -37, 1755, + 1286, 1598, 1285, 1597, 1596, 1751, 1595, 1750, + 1594, 1749, 1593, 1835, 1280, 1592, 1279, 1591, + 1590, 1834, 1589, 1832, 1588, 1831, -36, 1830, + 1274, 1587, -16, 1586, 1585, 1827, 1584, 1826, + 1583, 1825, 1745, 1823, 1271, 1582, 1270, 1581, + 1580, 1744, 1268, 1579, 1267, 1578, 1266, 1577, + 1265, 1576, 1264, 1575, 1263, 1574, 1262, 1573, + 1261, 1739, 1260, -35, 1259, 1572, 1258, 1571, + 1257, 1570, -13, -34, 1256, 1569, 1255, 1568, + 1254, 1567, 1253, 1566, 1252, 1565, -12, 1564, + 1251, 1563, 1250, -33, 1249, 1562, 1248, 1561, + 1247, 1560, 1246, 1559, 1245, -32, 1244, -31, + 1243, 1558, 1242, 1556, 1241, 1555, 1240, 1554, + 1239, 1553, 1238, -30, 1237, 1552, 1236, 1551, + 1235, -29, 1234, -28, -11, 1550, 1233, 1549, + 1232, -27, -10, 1548, 1231, 1547, 1230, 1546, + 1229, 1545, 1228, 1544, 1227, 1543, -9, 1542, + 1226, 1541, 1225, 1540, 1224, 1539, 1223, 1538, + 1222, 1537, 1221, 1536, 1220, 1535, 1219, 1534, + 1218, 1533, -8, 1532, 1217, 1531, 1216, 1530, + -7, 1529, 1528, 1721, 1527, 1720, 1526, 1719, + 1212, 1525, 1211, 1524, -26, 1718, 1523, 1717, + 1522, 1716, 1207, 1521, 1206, 1520, 1205, 1519, + 1518, 1715, 1517, 1714, 1202, 1516, 1201, -25, + 1200, 1515, 1199, 1514, 1513, -62, 1197, 1512, + 1196, 1511, 1510, 1711, 1194, 1509, -6, 1508, + 1507, 1710, -24, 1709, 1506, 1708, 1190, 1505, + 1189, -23, -5, -22, 1188, -21, 1187, 1504, + 1186, 1503, 1707, 1862, 1706, 1861, 1705, 1805, + -61, 1804, 1704, 1858, 1703, 1857, 1702, -117, + 1701, 1803, -60, -89, 1700, 1802, 1699, 1856, + 1698, 1855, 1697, 1854, 1696, -116, 1695, -115, + 1694, -88, 1693, 1895, 1692, -112, 1691, 1851, + -59, -111, 1690, 1800, 1689, 1799, 1688, 1850, + 1687, 1849, 1686, 1848, 1685, 1847, 1798, -108, + 1684, -107, 1683, -106, 1682, -105, -58, -104, + 1681, 1846, 1797, -103, -57, -87, -56, 1892, + 1680, 1845, 1679, 1844, 1678, 1796, 1677, -86, + 1676, 1795, 1675, 1843, -55, 1842, -54, -102, + 1674, 1841, 1789, 1839, 1673, 1788, -53, -100, + -52, 1838, 1672, -99, 1671, 1837, 1670, -85, + 1669, 1784, 1668, 1836, 1667, -98, 1666, 1781, + 1665, 1891, 1664, 1778, -51, -84, 1663, -97, + 1662, -96, 1661, 1890, 1660, -94, -50, 1774, + -49, 1833, -48, 1829, 1828, 1889, 1659, 1772, + 1658, -93, -47, -83, -46, 1771, 1657, 1824, + 1656, 1884, 1655, 1769, 1654, 1822, 1653, 1768, + 1652, -82, 1651, 1821, 1820, 1883, 1819, 1882, + 1650, 1818, 1649, 1817, 1648, 1816, -45, -92, + -44, 1761, 1647, 1815, 1646, -80, 1645, -79, + 1644, 1758, -43, -78, 1643, 1754, 1642, 1753, + 1641, 1752, 1640, 1814, 1639, 1879, 1638, 1878, + 1637, 1877, 1636, 1813, 1635, 1876, 1634, -77, + 1633, 1748, 1812, 1873, 1632, -121, -42, 1747, + 1631, 1746, 1743, 1811, 1630, -76, 1629, 1742, + 1869, 1897, -41, -75, 1741, 1868, 1628, -74, + 1627, 1740, -40, -91, 1867, 1896, 1626, -120, + 1625, 1866, 1624, 1738, 1623, 1737, 1622, -73, + 1621, 1865, 1620, -72, 1619, 1736, 1618, 1735, + -39, -71, 1617, 1734, 1616, -119, 1615, -118, + 1614, 1863, 1733, -122, 1732, 1860, 1859, 1894, + 1611, 1730, 1729, -90, 1606, 1728, 1605, 1727, + 1050, 1367, -20, 1601, -19, -70, -18, 1726, + 1725, 1893, 1724, 1806, 1723, 1852, 1722, -114 }; /* utable_kompat_decomp_keys identifies characters that have a compatability decomposition; diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index 5c484b439a..a1161fc13d 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -9,6 +9,6 @@ #define MZSCHEME_VERSION_MAJOR 352 -#define MZSCHEME_VERSION_MINOR 5 +#define MZSCHEME_VERSION_MINOR 6 -#define MZSCHEME_VERSION "352.5" _MZ_SPECIAL_TAG +#define MZSCHEME_VERSION "352.6" _MZ_SPECIAL_TAG diff --git a/src/mzscheme/src/startup.inc b/src/mzscheme/src/startup.inc index 2940a1f72a..d21109a8ae 100644 --- a/src/mzscheme/src/startup.inc +++ b/src/mzscheme/src/startup.inc @@ -1334,34 +1334,23 @@ "(ormap(lambda(i)(bound-identifier=? i r)) l))" "(hash-table-put! ht(syntax-e r)(cons r l)))))))))" "(if proto-r" -" `(lambda(r src)" -" ,(let((main `(datum->syntax-object(quote-syntax ,(and dest" -"(datum->syntax-object" +" `(lambda(r)" +" ,(let((main(let((build(apply-to-r l)))" +"(if(and(pair? build)" +"(eq?(car build) 'pattern-substitute))" +" build" +"(let((small-dest " +"(and dest(datum->syntax-object" " dest" " 'dest" -" #f)))" -" ,(apply-to-r l)" -" src)))" +" dest))))" +" `(datum->syntax-object/shape(quote-syntax ,small-dest)" +" ,build))))))" "(if(multiple-ellipsis-vars? proto-r)" -" `(let((exnh #f))" -"((let/ec esc" -"(dynamic-wind" -"(lambda()" -"(set! exnh(current-exception-handler))" -"(current-exception-handler" -"(lambda(exn)" -"(esc" -"(lambda()" -"(if(exn:break? exn)" -"(raise exn)" -"(ellipsis-count-error" +" `(catch-ellipsis-error" +"(lambda() ,main)" "(quote ,p)" -"(quote-syntax ,(datum->syntax-object #f '... p)))))))))" -"(lambda()" -"(let((v ,main))" -"(lambda() v)))" -"(lambda()" -"(current-exception-handler exnh))))))" +"(quote-syntax ,(datum->syntax-object #f '... p)))" " main)))" "(apply append(hash-table-map ht(lambda(k v) v))))))" "(-define(apply-to-r rest)" @@ -1381,27 +1370,72 @@ "(eq?(car t) 'quote-syntax)" "(eq?(cadr t)(stx-cdr p)))))" " `(quote-syntax ,p))" -"((syntax? stx)" -"(let((ctx(datum->syntax-object stx 'ctx stx)))" -" `(datum->syntax-object(quote-syntax ,ctx)" -" ,(apply-cons #f h t p) " -"(quote-syntax ,ctx))))" -"((eq? t 'null)" -" `(list-immutable ,h))" "((and(pair? t)" -"(memq(car t) '(list-immutable list*-immutable)))" -" `(,(car t) ,h ,@(cdr t)))" -"((and(pair? t)" -"(eq?(car t) 'cons-immutable))" -" `(list*-immutable ,h ,@(cdr t)))" -"((and(pair? h)(pair? t)" -"(eq?(car h) 'car)" -"(eq?(car t) 'cdr)" -"(symbol?(cadr h))" -"(eq?(cadr h)(cadr t)))" -"(cadr h))" +"(eq?(car t) 'pattern-substitute))" +"(cond" +"((and(pair? h)" +"(eq?(car h) 'quote-syntax)" +"(eq?(cadr h)(stx-car p)))" +" `(pattern-substitute" +"(quote-syntax ,(let((v(cons(cadr h)(cadadr t))))" +"(if(syntax? stx)" +"(datum->syntax-object stx" +" v" +" stx" +" stx)" +" v)))" +" . ,(cddr t)))" +"((and(pair? h)" +"(eq? 'pattern-substitute(car h)))" +" `(pattern-substitute(quote-syntax ,(let((v(cons(cadadr h)(cadadr t))))" +"(if(syntax? stx)" +"(datum->syntax-object stx" +" v" +" stx" +" stx)" +" v)))" +" ,@(cddr h) " +" . ,(cddr t)))" "(else" -" `(cons-immutable ,h ,t))))" +"(let*((id(gensym))" +"(expr(cons id(cadadr t)))" +"(expr(if(syntax? stx)" +"(datum->syntax-object stx" +" expr" +" stx" +" stx)" +" expr)))" +" `(pattern-substitute" +"(quote-syntax ,expr)" +" ,id ,h" +" . ,(cddr t))))))" +"((eq? t 'null)" +"(apply-cons stx h " +" `(pattern-substitute(quote-syntax()))" +" p))" +"((and(pair? t)" +"(eq?(car t) 'quote-syntax)" +"(stx-smaller-than?(car t) 10))" +"(apply-cons stx h " +" `(pattern-substitute ,t)" +" p))" +"(else" +"(apply-cons stx h" +"(let((id(gensym)))" +" `(pattern-substitute(quote-syntax ,id)" +" ,id ,t))" +" p))))" +"(-define(stx-smaller-than? stx sz)" +"(sz . > .(stx-size stx(add1 sz))))" +"(-define(stx-size stx up-to)" +"(cond" +"((up-to . < . 1) 0)" +"((syntax? stx)(stx-size(syntax-e stx) up-to))" +"((pair? stx)(let((s1(stx-size(car stx) up-to)))" +"(+ s1(stx-size(cdr stx)(- up-to s1)))))" +"((vector? stx)(stx-size(vector->list stx) up-to))" +"((box? stx)(add1(stx-size(unbox stx)(sub1 up-to))))" +"(else 1)))" "(-define(apply-list-ref e p use-tail-pos)" "(cond" "((and use-tail-pos(= p use-tail-pos))" @@ -1568,14 +1602,126 @@ ); EVAL_ONE_STR( "(module #%stxcase #%kernel" -"(require #%stx #%small-scheme)" +"(require #%stx #%small-scheme #%paramz)" "(require-for-syntax #%stx #%small-scheme #%sc #%kernel)" -"(-define(ellipsis-count-error sexp sloc)" +"(-define(datum->syntax-object/shape orig datum)" +"(if(syntax? datum)" +" datum" +"(let((stx(datum->syntax-object orig datum orig)))" +"(let((shape(syntax-property stx 'paren-shape)))" +"(if shape" +"(syntax-property stx 'paren-shape shape)" +" stx)))))" +"(-define(catch-ellipsis-error thunk sexp sloc)" +"((let/ec esc" +"(with-continuation-mark" +" parameterization-key" +"(extend-parameterization" +"(continuation-mark-set-first #f parameterization-key)" +" current-exception-handler" +"(lambda(exn)" +"(esc" +"(lambda()" +"(if(exn:break? exn)" +"(raise exn)" "(raise-syntax-error" " 'syntax" " \"incompatible ellipsis match counts for template\"" " sexp" -" sloc))" +" sloc))))))" +"(let((v(thunk)))" +"(lambda() v))))))" +"(-define substitute-stop 'dummy)" +"(-define-syntax pattern-substitute" +"(lambda(stx)" +"(let((pat(stx-car(stx-cdr stx)))" +"(subs(stx->list(stx-cdr(stx-cdr stx)))))" +"(let((ht-common(make-hash-table 'equal))" +"(ht-map(make-hash-table)))" +"(let loop((subs subs))" +"(unless(null? subs)" +"(let((id(syntax-e(car subs)))" +"(expr(cadr subs)))" +"(when(or(identifier? expr)" +"(and(stx-pair? expr)" +"(memq(syntax-e(stx-car expr))" +" '(car cadr caddr cadddr" +" cdr cddr cdddr cddddr" +" list-ref list-tail))" +"(stx-pair?(stx-cdr expr))" +"(identifier?(stx-car(stx-cdr expr)))))" +"(let((s-expr(syntax-object->datum expr)))" +"(let((new-id(hash-table-get ht-common s-expr #f)))" +"(if new-id" +"(hash-table-put! ht-map id new-id)" +"(hash-table-put! ht-common s-expr id))))))" +"(loop(cddr subs))))" +"(let((new-pattern(if(zero?(hash-table-count ht-map))" +" pat" +"(let loop((stx pat))" +"(cond" +"((pair? stx)" +"(let((a(loop(car stx)))" +"(b(loop(cdr stx))))" +"(if(and(eq? a(car stx))" +"(eq? b(cdr stx)))" +" stx" +"(cons a b))))" +"((symbol? stx)" +"(let((new-id(hash-table-get ht-map stx #f)))" +"(or new-id stx)))" +"((syntax? stx) " +"(let((new-e(loop(syntax-e stx))))" +"(if(eq?(syntax-e stx) new-e)" +" stx" +"(datum->syntax-object stx new-e stx stx))))" +"((vector? stx)" +"(list->vector(map loop(vector->list stx))))" +"((box? stx)(box(loop(unbox stx))))" +"(else stx))))))" +"(datum->syntax-object(quote-syntax here)" +" `(apply-pattern-substitute" +" ,new-pattern" +"(quote ,(let loop((subs subs))" +"(cond" +"((null? subs) null)" +"((hash-table-get ht-map(syntax-e(car subs)) #f)" +"(loop(cddr subs)))" +"(else" +"(cons(car subs)(loop(cddr subs)))))))" +" . ,(let loop((subs subs))" +"(cond" +"((null? subs) null)" +"((hash-table-get ht-map(syntax-e(car subs)) #f)" +"(loop(cddr subs)))" +"(else" +"(cons(cadr subs)(loop(cddr subs)))))))" +" stx))))))" +"(-define apply-pattern-substitute" +"(lambda(stx sub-ids . sub-vals)" +"(let loop((stx stx))" +"(cond" +"((pair? stx)(let((a(loop(car stx)))" +"(b(loop(cdr stx))))" +"(if(and(eq? a(car stx))" +"(eq? b(cdr stx)))" +" stx" +"(cons a b))))" +"((symbol? stx)" +"(let sloop((sub-ids sub-ids)(sub-vals sub-vals))" +"(cond" +"((null? sub-ids) stx)" +"((eq? stx(car sub-ids))(car sub-vals))" +"(else(sloop(cdr sub-ids)(cdr sub-vals))))))" +"((syntax? stx) " +"(let((new-e(loop(syntax-e stx))))" +"(if(eq?(syntax-e stx) new-e)" +" stx" +"(datum->syntax-object/shape stx new-e))))" +"((vector? stx)" +"(list->vector(map loop(vector->list stx))))" +"((box? stx)(box(loop(unbox stx))))" +"(else stx)))))" "(-define-syntax syntax-case**" "(lambda(x)" "(-define l(and(stx-list? x)(cdr(stx->list x))))" @@ -1845,9 +1991,7 @@ "((zero? len)(quote-syntax()))" "((= len 1)(car r))" "(else" -"(cons(quote-syntax list*) r))))" -"(list(quote-syntax quote-syntax)" -"(datum->syntax-object #f 'srctag x))))))))))" +"(cons(quote-syntax list*) r))))))))))))" " x)))" "(provide syntax-case** syntax))" ); @@ -2672,7 +2816,7 @@ "(and(string? s)" "(or(relative-path? s)" "(absolute-path? s)))))" -" (define -re:suffix (byte-regexp #\"([.][^.]*|)$\")) " +" (define -re:suffix #rx#\"([.][^.]*|)$\")" "(define(path-replace-suffix s sfx)" "(unless(path-string? s)" " (raise-type-error 'path-replace-suffix \"path or valid-path string\" 0 s sfx))" @@ -3037,9 +3181,9 @@ "(define(load/use-compiled f)((current-load/use-compiled) f #f))" "(current-reader-guard(let((default-reader-guard(lambda(path) path)))" " default-reader-guard))" -" (define -re:dir (byte-regexp #\"(.+?)/+(.*)\"))" -" (define -re:auto (byte-regexp #\"^,\"))" -" (define -re:ok-relpath (byte-regexp #\"^[-a-zA-Z0-9_. ]+(/+[-a-zA-Z0-9_. ]+)*$\"))" +" (define -re:dir #rx#\"(.+?)/+(.*)\")" +" (define -re:auto #rx#\"^,\")" +" (define -re:ok-relpath #rx#\"^[-a-zA-Z0-9_. ]+(/+[-a-zA-Z0-9_. ]+)*$\")" "(define -module-hash-table-table(make-hash-table 'weak)) " "(define -path-cache(make-hash-table 'weak 'equal)) " "(define -loading-filename(gensym))" diff --git a/src/mzscheme/src/startup.ss b/src/mzscheme/src/startup.ss index fd926509ff..d7c3bfb07a 100644 --- a/src/mzscheme/src/startup.ss +++ b/src/mzscheme/src/startup.ss @@ -1558,36 +1558,24 @@ (ormap (lambda (i) (bound-identifier=? i r)) l)) (hash-table-put! ht (syntax-e r) (cons r l)))))))]) (if proto-r - `(lambda (r src) - ,(let ([main `(datum->syntax-object (quote-syntax ,(and dest - ;; In case dest has significant structure... - (datum->syntax-object - dest - 'dest - #f))) - ,(apply-to-r l) - src)]) + `(lambda (r) + ,(let ([main (let ([build (apply-to-r l)]) + (if (and (pair? build) + (eq? (car build) 'pattern-substitute)) + build + (let ([small-dest ;; In case dest has significant structure... + (and dest (datum->syntax-object + dest + 'dest + dest))]) + `(datum->syntax-object/shape (quote-syntax ,small-dest) + ,build))))]) (if (multiple-ellipsis-vars? proto-r) - `(let ([exnh #f]) - ((let/ec esc - (dynamic-wind - (lambda () - (set! exnh (current-exception-handler)) - (current-exception-handler - (lambda (exn) - (esc - (lambda () - (if (exn:break? exn) - (raise exn) - (ellipsis-count-error - (quote ,p) - ;; This is a trick to minimize the syntax structure we keep: - (quote-syntax ,(datum->syntax-object #f '... p))))))))) - (lambda () - (let ([v ,main]) - (lambda () v))) - (lambda () - (current-exception-handler exnh)))))) + `(catch-ellipsis-error + (lambda () ,main) + (quote ,p) + ;; This is a trick to minimize the syntax structure we keep: + (quote-syntax ,(datum->syntax-object #f '... p))) main))) ;; Get list of unique vars: (apply append (hash-table-map ht (lambda (k v) v)))))) @@ -1619,32 +1607,86 @@ (eq? (car t) 'quote-syntax) (eq? (cadr t) (stx-cdr p))))) `(quote-syntax ,p)] - [(syntax? stx) - ;; Keep context and location information - (let ([ctx (datum->syntax-object stx 'ctx stx)]) - `(datum->syntax-object (quote-syntax ,ctx) - ,(apply-cons #f h t p) - (quote-syntax ,ctx)))] - ;; (cons X null) => (list X) + [(and (pair? t) + (eq? (car t) 'pattern-substitute)) + ;; fold h into the existing pattern-substitute: + (cond + [(and (pair? h) + (eq? (car h) 'quote-syntax) + (eq? (cadr h) (stx-car p))) + ;; Just extend constant part: + `(pattern-substitute + (quote-syntax ,(let ([v (cons (cadr h) (cadadr t))]) + ;; We exploit the fact that we're + ;; building an S-expression to + ;; preserve the source's distinction + ;; between (x y) and (x . (y)). + (if (syntax? stx) + (datum->syntax-object stx + v + stx + stx) + v))) + . ,(cddr t))] + [(and (pair? h) + (eq? 'pattern-substitute (car h))) + ;; Combine two pattern substitutions: + `(pattern-substitute (quote-syntax ,(let ([v (cons (cadadr h) (cadadr t))]) + (if (syntax? stx) + (datum->syntax-object stx + v + stx + stx) + v))) + ,@(cddr h) ;; <-- WARNING: potential quadratic expansion + . ,(cddr t))] + [else + ;; General case: add a substitution: + (let* ([id (gensym)] + [expr (cons id (cadadr t))] + [expr (if (syntax? stx) + (datum->syntax-object stx + expr + stx + stx) + expr)]) + `(pattern-substitute + (quote-syntax ,expr) + ,id ,h + . ,(cddr t)))])] [(eq? t 'null) - `(list-immutable ,h)] - ;; (cons X (list[*] Y ...)) => (list[*] X Y ...) + (apply-cons stx h + `(pattern-substitute (quote-syntax ())) + p)] [(and (pair? t) - (memq (car t) '(list-immutable list*-immutable))) - `(,(car t) ,h ,@(cdr t))] - ;; (cons X (cons Y Z)) => (list* X Y Z) - [(and (pair? t) - (eq? (car t) 'cons-immutable)) - `(list*-immutable ,h ,@(cdr t))] - ;; (cons (car X) (cdr X)) => X - [(and (pair? h) (pair? t) - (eq? (car h) 'car) - (eq? (car t) 'cdr) - (symbol? (cadr h)) - (eq? (cadr h) (cadr t))) - (cadr h)] + (eq? (car t) 'quote-syntax) + (stx-smaller-than? (car t) 10)) + ;; Shift into `pattern-substitute' mode with an intitial constant. + ;; (Only do this for small constants, so we don't traverse + ;; big constants when looking for substitutions.) + (apply-cons stx h + `(pattern-substitute ,t) + p)] [else - `(cons-immutable ,h ,t)])) + ;; Shift into `pattern-substitute' with an initial substitution: + (apply-cons stx h + (let ([id (gensym)]) + `(pattern-substitute (quote-syntax ,id) + ,id ,t)) + p)])) + + (-define (stx-smaller-than? stx sz) + (sz . > . (stx-size stx (add1 sz)))) + + (-define (stx-size stx up-to) + (cond + [(up-to . < . 1) 0] + [(syntax? stx) (stx-size (syntax-e stx) up-to)] + [(pair? stx) (let ([s1 (stx-size (car stx) up-to)]) + (+ s1 (stx-size (cdr stx) (- up-to s1))))] + [(vector? stx) (stx-size (vector->list stx) up-to)] + [(box? stx) (add1 (stx-size (unbox stx) (sub1 up-to)))] + [else 1])) ;; Generates a list-ref expression; if use-tail-pos ;; is not #f, then the argument list is really a list* @@ -1845,15 +1887,137 @@ ;; syntax-case and syntax (module #%stxcase #%kernel - (require #%stx #%small-scheme) + (require #%stx #%small-scheme #%paramz) (require-for-syntax #%stx #%small-scheme #%sc #%kernel) - (-define (ellipsis-count-error sexp sloc) - (raise-syntax-error - 'syntax - "incompatible ellipsis match counts for template" - sexp - sloc)) + (-define (datum->syntax-object/shape orig datum) + (if (syntax? datum) + datum + (let ([stx (datum->syntax-object orig datum orig)]) + (let ([shape (syntax-property stx 'paren-shape)]) + (if shape + (syntax-property stx 'paren-shape shape) + stx))))) + + (-define (catch-ellipsis-error thunk sexp sloc) + ((let/ec esc + (with-continuation-mark + parameterization-key + (extend-parameterization + (continuation-mark-set-first #f parameterization-key) + current-exception-handler + (lambda (exn) + (esc + (lambda () + (if (exn:break? exn) + (raise exn) + (raise-syntax-error + 'syntax + "incompatible ellipsis match counts for template" + sexp + sloc)))))) + (let ([v (thunk)]) + (lambda () v)))))) + + (-define substitute-stop 'dummy) + + ;; pattern-substitute optimizes a pattern substitution by + ;; merging variables that look up the same simple mapping + (-define-syntax pattern-substitute + (lambda (stx) + (let ([pat (stx-car (stx-cdr stx))] + [subs (stx->list (stx-cdr (stx-cdr stx)))]) + (let ([ht-common (make-hash-table 'equal)] + [ht-map (make-hash-table)]) + ;; Determine merges: + (let loop ([subs subs]) + (unless (null? subs) + (let ([id (syntax-e (car subs))] + [expr (cadr subs)]) + (when (or (identifier? expr) + (and (stx-pair? expr) + (memq (syntax-e (stx-car expr)) + '(car cadr caddr cadddr + cdr cddr cdddr cddddr + list-ref list-tail)) + (stx-pair? (stx-cdr expr)) + (identifier? (stx-car (stx-cdr expr))))) + (let ([s-expr (syntax-object->datum expr)]) + (let ([new-id (hash-table-get ht-common s-expr #f)]) + (if new-id + (hash-table-put! ht-map id new-id) + (hash-table-put! ht-common s-expr id)))))) + (loop (cddr subs)))) + ;; Merge: + (let ([new-pattern (if (zero? (hash-table-count ht-map)) + pat + (let loop ([stx pat]) + (cond + [(pair? stx) + (let ([a (loop (car stx))] + [b (loop (cdr stx))]) + (if (and (eq? a (car stx)) + (eq? b (cdr stx))) + stx + (cons a b)))] + [(symbol? stx) + (let ([new-id (hash-table-get ht-map stx #f)]) + (or new-id stx))] + [(syntax? stx) + (let ([new-e (loop (syntax-e stx))]) + (if (eq? (syntax-e stx) new-e) + stx + (datum->syntax-object stx new-e stx stx)))] + [(vector? stx) + (list->vector (map loop (vector->list stx)))] + [(box? stx) (box (loop (unbox stx)))] + [else stx])))]) + (datum->syntax-object (quote-syntax here) + `(apply-pattern-substitute + ,new-pattern + (quote ,(let loop ([subs subs]) + (cond + [(null? subs) null] + [(hash-table-get ht-map (syntax-e (car subs)) #f) + ;; Drop mapped id + (loop (cddr subs))] + [else + (cons (car subs) (loop (cddr subs)))]))) + . ,(let loop ([subs subs]) + (cond + [(null? subs) null] + [(hash-table-get ht-map (syntax-e (car subs)) #f) + ;; Drop mapped id + (loop (cddr subs))] + [else + (cons (cadr subs) (loop (cddr subs)))]))) + stx)))))) + + (-define apply-pattern-substitute + (lambda (stx sub-ids . sub-vals) + (let loop ([stx stx]) + (cond + [(pair? stx) (let ([a (loop (car stx))] + [b (loop (cdr stx))]) + (if (and (eq? a (car stx)) + (eq? b (cdr stx))) + stx + (cons a b)))] + [(symbol? stx) + (let sloop ([sub-ids sub-ids][sub-vals sub-vals]) + (cond + [(null? sub-ids) stx] + [(eq? stx (car sub-ids)) (car sub-vals)] + [else (sloop (cdr sub-ids) (cdr sub-vals))]))] + [(syntax? stx) + (let ([new-e (loop (syntax-e stx))]) + (if (eq? (syntax-e stx) new-e) + stx + (datum->syntax-object/shape stx new-e)))] + [(vector? stx) + (list->vector (map loop (vector->list stx)))] + [(box? stx) (box (loop (unbox stx)))] + [else stx])))) (-define-syntax syntax-case** (lambda (x) @@ -2142,9 +2306,7 @@ [(zero? len) (quote-syntax ())] [(= len 1) (car r)] [else - (cons (quote-syntax list*) r)])) - (list (quote-syntax quote-syntax) - (datum->syntax-object #f 'srctag x)))))))))) + (cons (quote-syntax list*) r)])))))))))) x))) (provide syntax-case** syntax)) @@ -3081,7 +3243,7 @@ (or (relative-path? s) (absolute-path? s))))) - (define -re:suffix (byte-regexp #"([.][^.]*|)$")) + (define -re:suffix #rx#"([.][^.]*|)$") (define (path-replace-suffix s sfx) (unless (path-string? s) (raise-type-error 'path-replace-suffix "path or valid-path string" 0 s sfx)) @@ -3472,9 +3634,9 @@ (current-reader-guard (let ([default-reader-guard (lambda (path) path)]) default-reader-guard)) - (define -re:dir (byte-regexp #"(.+?)/+(.*)")) - (define -re:auto (byte-regexp #"^,")) - (define -re:ok-relpath (byte-regexp #"^[-a-zA-Z0-9_. ]+(/+[-a-zA-Z0-9_. ]+)*$")) + (define -re:dir #rx#"(.+?)/+(.*)") + (define -re:auto #rx#"^,") + (define -re:ok-relpath #rx#"^[-a-zA-Z0-9_. ]+(/+[-a-zA-Z0-9_. ]+)*$") (define -module-hash-table-table (make-hash-table 'weak)) ; weak map from namespace to module ht (define -path-cache (make-hash-table 'weak 'equal)) ; weak map from `lib' path + corrent-library-paths to symbols diff --git a/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index 953b609be1..7ed44ce1c1 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -269,11 +269,7 @@ XFORM_NONGCING static void WRAP_POS_SET_FIRST(Wrap_Pos *w) } } -XFORM_NONGCING static -#ifndef NO_INLINE_KEYWORD -MSC_IZE(inline) -#endif -void DO_WRAP_POS_INC(Wrap_Pos *w) +XFORM_NONGCING static MZ_INLINE void DO_WRAP_POS_INC(Wrap_Pos *w) { Scheme_Object *a; if (w->is_limb && (w->pos + 1 < ((Wrap_Chunk *)SCHEME_CAR(w->l))->len)) { @@ -4073,6 +4069,72 @@ static Scheme_Object *wraps_to_datum(Scheme_Object *w_in, /* syntax->datum */ /*========================================================================*/ +/* This code can convert a syntax object plus its wraps to something + writeable. In that case, the result is a : + + = (vector ) + | + = | ... + + = (cons (cons (cons ... )) ) + | (cons (cons ... null) ) + | (cons (cons #t ) ) + ; where has no boxes or vectors, and + ; is shared in all elements + = (cons (box ) ) + = (cons (vector ...) ) + = (cons ) + ; where is not a pair, vector, or box +*/ + +static Scheme_Object *extract_for_common_wrap(Scheme_Object *a, int get_mark, int pair_ok) +{ + /* We only share wraps for things constucted with pairs and + atomic (w.r.t. syntax) values, where there are no certificates + on any of the sub-parts. */ + Scheme_Object *v; + + if (SCHEME_PAIRP(a)) { + v = SCHEME_CAR(a); + + if (SCHEME_PAIRP(v)) { + if (pair_ok && SAME_OBJ(SCHEME_CAR(v), scheme_true)) { + /* A pair with shared wraps for its elements */ + if (get_mark) + return SCHEME_CDR(a); + else + return SCHEME_CDR(v); + } + } else if (!SCHEME_BOXP(v) && !SCHEME_VECTORP(v)) { + /* It's atomic. */ + if (get_mark) + return SCHEME_CDR(a); + else + return v; + } + } + + return NULL; +} + +static void lift_common_wraps(Scheme_Object *l, Scheme_Object *common_wraps, int cnt, int tail) +{ + Scheme_Object *a; + + while (cnt--) { + a = SCHEME_CAR(l); + a = extract_for_common_wrap(a, 0, 1); + SCHEME_CAR(l) = a; + if (cnt) + l = SCHEME_CDR(l); + } + if (tail) { + a = SCHEME_CDR(l); + a = extract_for_common_wrap(a, 0, 0); + SCHEME_CDR(l) = a; + } +} + #ifdef DO_STACK_CHECK static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o, Scheme_Hash_Table **ht, @@ -4100,7 +4162,7 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o, Scheme_Hash_Table *rns) { Scheme_Stx *stx = (Scheme_Stx *)o; - Scheme_Object *ph, *v, *result; + Scheme_Object *ph, *v, *result, *converted_wraps = NULL; #ifdef DO_STACK_CHECK { @@ -4152,7 +4214,7 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o, v = stx->val; if (SCHEME_PAIRP(v)) { - Scheme_Object *first = NULL, *last = NULL, *p; + Scheme_Object *first = NULL, *last = NULL, *p, *common_wraps = NULL; int cnt = 0; while (SCHEME_PAIRP(v)) { @@ -4161,7 +4223,7 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o, cnt++; a = syntax_to_datum_inner(SCHEME_CAR(v), ht, with_marks, rns); - + p = CONS(a, scheme_null); if (last) @@ -4170,12 +4232,35 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o, first = p; last = p; v = SCHEME_CDR(v); + + if (with_marks) { + a = extract_for_common_wrap(a, 1, 1); + if (!common_wraps) { + if (a) + common_wraps = a; + else + common_wraps = scheme_false; + } else if (!a || !SAME_OBJ(common_wraps, a)) + common_wraps = scheme_false; + } } if (!SCHEME_NULLP(v)) { v = syntax_to_datum_inner(v, ht, with_marks, rns); SCHEME_CDR(last) = v; - if (with_marks > 1) { + if (with_marks) { + v = extract_for_common_wrap(v, 1, 0); + if (v && SAME_OBJ(common_wraps, v)) { + converted_wraps = wraps_to_datum(stx->wraps, rns, 0); + if (SAME_OBJ(common_wraps, converted_wraps)) + lift_common_wraps(first, common_wraps, cnt, 1); + else + common_wraps = scheme_false; + } else + common_wraps = scheme_false; + } + + if ((with_marks > 1) && SCHEME_FALSEP(common_wraps)) { /* v is likely a pair, and v's car might be a pair, which means that the datum->syntax part won't be able to detect that v is a "non-pair" @@ -4183,8 +4268,18 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o, length before the terminal to datum->syntax: */ first = scheme_make_pair(scheme_make_integer(cnt), first); } + } else if (with_marks && SCHEME_TRUEP(common_wraps)) { + converted_wraps = wraps_to_datum(stx->wraps, rns, 0); + if (SAME_OBJ(common_wraps, converted_wraps)) + lift_common_wraps(first, common_wraps, cnt, 0); + else + common_wraps = scheme_false; } - + + if (with_marks && SCHEME_TRUEP(common_wraps)) { + first = scheme_make_pair(scheme_true, first); + } + result = first; } else if (SCHEME_BOXP(v)) { v = syntax_to_datum_inner(SCHEME_BOX_VAL(v), ht, with_marks, rns); @@ -4209,7 +4304,9 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o, result = v; if (with_marks > 1) { - result = CONS(result, wraps_to_datum(stx->wraps, rns, 0)); + if (!converted_wraps) + converted_wraps = wraps_to_datum(stx->wraps, rns, 0); + result = CONS(result, converted_wraps); if (stx->certs) { Scheme_Object *cert_marks = scheme_null, *icert_marks = scheme_null; Scheme_Cert *certs; @@ -4226,13 +4323,16 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o, icert_marks = scheme_make_pair(certs->mark, icert_marks); certs = certs->next; } - - v = scheme_make_vector(2, NULL); - SCHEME_VEC_ELS(v)[0] = result; - if (SCHEME_PAIRP(icert_marks)) - cert_marks = scheme_make_pair(cert_marks, icert_marks); - SCHEME_VEC_ELS(v)[1] = cert_marks; - result = v; + + if (SCHEME_PAIRP(cert_marks) + || SCHEME_PAIRP(icert_marks)) { + v = scheme_make_vector(2, NULL); + SCHEME_VEC_ELS(v)[0] = result; + if (SCHEME_PAIRP(icert_marks)) + cert_marks = scheme_make_pair(cert_marks, icert_marks); + SCHEME_VEC_ELS(v)[1] = cert_marks; + result = v; + } } } @@ -4250,6 +4350,33 @@ Scheme_Object *scheme_syntax_to_datum(Scheme_Object *stx, int with_marks, v = syntax_to_datum_inner(stx, &ht, with_marks, rns); + if (with_marks > 1) { + if (SCHEME_PAIRP(v) + && SCHEME_SYMBOLP(SCHEME_CAR(v)) + && SCHEME_INTP(SCHEME_CDR(v))) { + /* A symbol+wrap combination is likely to be used multiple + times. This is a relatively minor optimization in .zo size, + since v is already fairly compact, but it also avoids + allocating extra syntax objects at load time. */ + Scheme_Hash_Table *reverse_map; + Scheme_Object *code; + + reverse_map = (Scheme_Hash_Table *)scheme_hash_get(rns, scheme_undefined); + if (reverse_map) { + code = scheme_hash_get(reverse_map, v); + if (code) { + return code; + } else { + code = scheme_make_integer(rns->count); + scheme_hash_set(rns, code, v); + scheme_hash_set(reverse_map, v, code); + v = scheme_make_vector(2, v); + SCHEME_VEC_ELS(v)[1] = code; + } + } + } + } + if (ht) v = scheme_resolve_placeholders(v, 0); @@ -4748,10 +4875,11 @@ static Scheme_Object *datum_to_syntax_k(void) static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o, Scheme_Stx *stx_src, - Scheme_Stx *stx_wraps, /* or rename table */ + Scheme_Stx *stx_wraps, /* or rename table, or boxed precomputed wrap */ Scheme_Hash_Table *ht) { Scheme_Object *result, *ph = NULL, *wraps, *cert_marks = NULL; + int do_not_unpack_wraps = 0; if (SCHEME_STXP(o)) return o; @@ -4803,6 +4931,10 @@ static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o, return_NULL; wraps = SCHEME_CDR(o); o = SCHEME_CAR(o); + } else if (SCHEME_BOXP(stx_wraps)) { + /* Shared wraps, to be used directly everywhere: */ + wraps = SCHEME_BOX_VAL(stx_wraps); + do_not_unpack_wraps = 1; } else wraps = NULL; @@ -4821,8 +4953,17 @@ static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o, result = o; } else { int cnt = -1; - - if (wraps && SCHEME_INTP(SCHEME_CAR(o))) { + Scheme_Stx *sub_stx_wraps = stx_wraps; + + if (wraps && !SCHEME_BOXP(stx_wraps) && SAME_OBJ(SCHEME_CAR(o), scheme_true)) { + /* Resolve wraps now, and then share it with + all nested objects (as indicated by a box + for stx_wraps). */ + wraps = datum_to_wraps(wraps, (Scheme_Hash_Table *)stx_wraps); + do_not_unpack_wraps = 1; + sub_stx_wraps = (Scheme_Stx *)scheme_box(wraps); + o = SCHEME_CDR(o); + } else if (wraps && !SCHEME_BOXP(stx_wraps) && SCHEME_INTP(SCHEME_CAR(o))) { /* First element is the number of items before a non-null terminal: */ cnt = SCHEME_INT_VAL(SCHEME_CAR(o)); @@ -4840,7 +4981,7 @@ static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o, } } - a = datum_to_syntax_inner(SCHEME_CAR(o), stx_src, stx_wraps, ht); + a = datum_to_syntax_inner(SCHEME_CAR(o), stx_src, sub_stx_wraps, ht); if (!a) return_NULL; p = scheme_make_immutable_pair(a, scheme_null); @@ -4855,7 +4996,7 @@ static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o, --cnt; } if (!SCHEME_NULLP(o)) { - o = datum_to_syntax_inner(o, stx_src, stx_wraps, ht); + o = datum_to_syntax_inner(o, stx_src, sub_stx_wraps, ht); if (!o) return_NULL; SCHEME_CDR(last) = o; } @@ -4891,9 +5032,11 @@ static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o, result = scheme_make_stx(result, stx_src->srcloc, NULL); if (wraps) { - wraps = datum_to_wraps(wraps, (Scheme_Hash_Table *)stx_wraps); - if (!wraps) - return_NULL; + if (!do_not_unpack_wraps) { + wraps = datum_to_wraps(wraps, (Scheme_Hash_Table *)stx_wraps); + if (!wraps) + return_NULL; + } ((Scheme_Stx *)result)->wraps = wraps; } else if (SCHEME_FALSEP((Scheme_Object *)stx_wraps)) { /* wraps already nulled */ @@ -4941,7 +5084,7 @@ Scheme_Object *scheme_datum_to_syntax(Scheme_Object *o, { Scheme_Hash_Table *ht; - Scheme_Object *v; + Scheme_Object *v, *code = NULL; if (!SCHEME_FALSEP(stx_src) && !SCHEME_STXP(stx_src)) return o; @@ -4954,6 +5097,19 @@ Scheme_Object *scheme_datum_to_syntax(Scheme_Object *o, else ht = NULL; + if (SCHEME_HASHTP(stx_wraps)) { + /* If o is just a number, look it up in the table. */ + if (SCHEME_INTP(o)) + return scheme_hash_get((Scheme_Hash_Table *)stx_wraps, o); + /* If it's a vector where the second element is a number, we'll need to hash. */ + if (SCHEME_VECTORP(o) + && (SCHEME_VEC_SIZE(o) == 2) + && SCHEME_INTP(SCHEME_VEC_ELS(o)[1])) { + code = SCHEME_VEC_ELS(o)[1]; + o = SCHEME_VEC_ELS(o)[0]; + } + } + v = datum_to_syntax_inner(o, (Scheme_Stx *)stx_src, (Scheme_Stx *)stx_wraps, @@ -4961,6 +5117,10 @@ Scheme_Object *scheme_datum_to_syntax(Scheme_Object *o, if (!v) return_NULL; /* only happens with bad wraps from a bad .zo */ + if (code) { + scheme_hash_set((Scheme_Hash_Table *)stx_wraps, code, v); + } + if (ht) v = scheme_resolve_placeholders(v, 1); diff --git a/src/mzscheme/src/thread.c b/src/mzscheme/src/thread.c index 044cc704be..0906aea87a 100644 --- a/src/mzscheme/src/thread.c +++ b/src/mzscheme/src/thread.c @@ -1711,13 +1711,7 @@ static void check_current_custodian_allows(const char *who, Scheme_Thread *p) /* thread sets */ /*========================================================================*/ -#define TSET_IL /* */ -#ifndef NO_INLINE_KEYWORD -# ifndef DONT_INLINE_NZERO_TEST -# undef TSET_IL -# define TSET_IL MSC_IZE(inline) -# endif -#endif +#define TSET_IL MZ_INLINE static Scheme_Thread_Set *create_thread_set(Scheme_Thread_Set *parent) { @@ -5600,8 +5594,7 @@ Scheme_Object *scheme_get_thread_param(Scheme_Config *c, Scheme_Thread_Cell_Tabl cell = find_param_cell(c, scheme_make_integer(pos), 0); if (SCHEME_THREAD_CELLP(cell)) return scheme_thread_cell_get(cell, cells); - return - cell; + return cell; } Scheme_Object *scheme_get_param(Scheme_Config *c, int pos) @@ -6607,6 +6600,7 @@ static void get_ready_for_GC() scheme_clear_modidx_cache(); scheme_clear_shift_cache(); scheme_clear_cc_ok(); + scheme_clear_rx_buffers(); #ifdef RUNSTACK_IS_GLOBAL scheme_current_thread->runstack = MZ_RUNSTACK;