From c727afef0444e8a583c63f17fe6b993b983ba00c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 18 May 2006 15:03:05 +0000 Subject: [PATCH] 301.15: new install tree for Unix, moved docs, moved teachpacks, added config.ss svn: r2962 --- collects/compiler/start.ss | 65 +- collects/config/config.ss | 8 + .../private/language-configuration.ss | 4 +- collects/help/installer.ss | 8 +- collects/help/private/colldocs.ss | 54 +- collects/help/private/config.ss | 15 +- collects/help/private/finddoc.ss | 23 +- collects/help/private/get-help-url.ss | 55 +- collects/help/private/gui.ss | 86 +- collects/help/private/internal-hp.ss | 42 +- collects/help/private/manuals.ss | 124 +- collects/help/private/search.ss | 34 +- collects/help/private/tcp-intercept.ss | 3 +- collects/help/refresh-manuals.ss | 11 +- collects/help/servlets/release/notes.ss | 3 +- collects/help/servlets/results.ss | 3 +- collects/mzlib/foreign.ss | 10 +- collects/openssl/mzssl.ss | 20 +- collects/setup/configtab.ss | 92 + collects/setup/dirs.ss | 157 +- collects/setup/doc.txt | 211 +- collects/setup/main-collects.ss | 6 +- collects/setup/pack.ss | 137 +- collects/setup/setup-unit.ss | 6 +- collects/setup/unpack.ss | 113 +- collects/setup/winvers.ss | 2 +- collects/sgl/make-gl-info.ss | 7 +- .../teachpack}/htdc/Docs/draw.thtml | 0 .../teachpack}/htdc/Docs/foot.tinc | 0 .../teachpack}/htdc/Docs/head.tinc | 0 .../teachpack}/htdc/Docs/idraw.thtml | 0 .../teachpack}/htdc/Docs/index.thtml | 0 .../teachpack}/htdc/Docs/mkdocs | 0 .../teachpack}/htdc/draw.ss | 0 .../teachpack}/htdc/idraw.ss | 0 .../teachpack}/htdp/Docs/arrow-gui.thtml | 0 .../teachpack}/htdp/Docs/arrow.thtml | 0 .../teachpack}/htdp/Docs/convert.thtml | 0 .../teachpack}/htdp/Docs/dir.thtml | 0 .../teachpack}/htdp/Docs/docs.thtml | 0 .../teachpack}/htdp/Docs/draw.thtml | 0 .../teachpack}/htdp/Docs/elevator.thtml | 0 .../teachpack}/htdp/Docs/foot.tinc | 0 .../teachpack}/htdp/Docs/graphing.thtml | 0 .../teachpack}/htdp/Docs/guess-gui.thtml | 0 .../teachpack}/htdp/Docs/guess.thtml | 0 .../teachpack}/htdp/Docs/gui.thtml | 0 .../teachpack}/htdp/Docs/hangman.thtml | 0 .../teachpack}/htdp/Docs/head.tinc | 0 .../teachpack}/htdp/Docs/image.thtml | 0 .../teachpack}/htdp/Docs/index.thtml | 0 .../teachpack}/htdp/Docs/lkup-gui.thtml | 0 .../teachpack}/htdp/Docs/master.thtml | 0 .../teachpack}/htdp/Docs/mkdocs | 0 .../teachpack}/htdp/Docs/servlet.thtml | 0 .../teachpack}/htdp/Docs/servlet2.thtml | 0 .../teachpack}/htdp/Docs/show-queen.thtml | 0 .../teachpack}/htdp/Docs/world.thtml | 0 .../teachpack}/htdp/arrow-gui.ss | 0 .../teachpack}/htdp/arrow.ss | 0 .../teachpack}/htdp/convert.ss | 0 {teachpack => collects/teachpack}/htdp/dir.ss | 0 .../teachpack}/htdp/docs.ss | 0 .../teachpack}/htdp/draw.ss | 0 .../teachpack}/htdp/elevator.ss | 0 .../teachpack}/htdp/graphing.ss | 0 .../teachpack}/htdp/guess-gui.ss | 0 .../teachpack}/htdp/guess.ss | 0 {teachpack => collects/teachpack}/htdp/gui.ss | 0 .../teachpack}/htdp/hangman.ss | 0 .../teachpack}/htdp/image.ss | 0 .../teachpack}/htdp/lkup-gui.ss | 0 .../teachpack}/htdp/master.ss | 0 .../teachpack}/htdp/servlet.ss | 0 .../teachpack}/htdp/servlet2.ss | 0 .../teachpack}/htdp/show-queen.ss | 0 .../teachpack}/htdp/world.ss | 0 {teachpack => collects/teachpack}/turtles.ss | 0 .../teachpack}/value-turtles.ss | 0 .../release-notes}/COPYING-libscheme.txt | 0 {notes => doc/release-notes}/COPYING.LIB | 0 {notes => doc/release-notes}/drscheme/HISTORY | 0 {notes => doc/release-notes}/mred/HISTORY | 0 .../release-notes}/mred/MrEd_100.txt | 0 .../mred/MrEd_100_Framework.txt | 0 {notes => doc/release-notes}/mzscheme/HISTORY | 0 .../release-notes}/mzscheme/MzScheme_200.txt | 0 .../release-notes}/mzscheme/MzScheme_300.txt | 0 .../mzscheme/rename-super-fixup.ss | 0 .../release-notes}/stepper/DESIGN-NOTES | 0 {notes => doc/release-notes}/stepper/HISTORY | 0 .../release-notes}/teachpack/HISTORY | 0 src/Makefile.in | 24 +- src/README | 20 +- src/configure | 168 +- src/copytree.ss | 54 + src/mkdirs.ss | 14 + src/mred/Makefile.in | 40 +- src/mzscheme/Makefile.in | 56 +- src/mzscheme/configure.ac | 111 +- src/mzscheme/dynsrc/Makefile.in | 4 +- src/mzscheme/make-configure | 45 +- src/mzscheme/mkincludes.ss | 2 +- src/mzscheme/src/cstartup.inc | 2487 +++++++++-------- src/mzscheme/src/list.c | 31 +- src/mzscheme/src/schvers.h | 4 +- 106 files changed, 2485 insertions(+), 1874 deletions(-) create mode 100644 collects/config/config.ss create mode 100644 collects/setup/configtab.ss rename {teachpack => collects/teachpack}/htdc/Docs/draw.thtml (100%) rename {teachpack => collects/teachpack}/htdc/Docs/foot.tinc (100%) rename {teachpack => collects/teachpack}/htdc/Docs/head.tinc (100%) rename {teachpack => collects/teachpack}/htdc/Docs/idraw.thtml (100%) rename {teachpack => collects/teachpack}/htdc/Docs/index.thtml (100%) rename {teachpack => collects/teachpack}/htdc/Docs/mkdocs (100%) rename {teachpack => collects/teachpack}/htdc/draw.ss (100%) rename {teachpack => collects/teachpack}/htdc/idraw.ss (100%) rename {teachpack => collects/teachpack}/htdp/Docs/arrow-gui.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/arrow.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/convert.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/dir.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/docs.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/draw.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/elevator.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/foot.tinc (100%) rename {teachpack => collects/teachpack}/htdp/Docs/graphing.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/guess-gui.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/guess.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/gui.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/hangman.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/head.tinc (100%) rename {teachpack => collects/teachpack}/htdp/Docs/image.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/index.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/lkup-gui.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/master.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/mkdocs (100%) rename {teachpack => collects/teachpack}/htdp/Docs/servlet.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/servlet2.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/show-queen.thtml (100%) rename {teachpack => collects/teachpack}/htdp/Docs/world.thtml (100%) rename {teachpack => collects/teachpack}/htdp/arrow-gui.ss (100%) rename {teachpack => collects/teachpack}/htdp/arrow.ss (100%) rename {teachpack => collects/teachpack}/htdp/convert.ss (100%) rename {teachpack => collects/teachpack}/htdp/dir.ss (100%) rename {teachpack => collects/teachpack}/htdp/docs.ss (100%) rename {teachpack => collects/teachpack}/htdp/draw.ss (100%) rename {teachpack => collects/teachpack}/htdp/elevator.ss (100%) rename {teachpack => collects/teachpack}/htdp/graphing.ss (100%) rename {teachpack => collects/teachpack}/htdp/guess-gui.ss (100%) rename {teachpack => collects/teachpack}/htdp/guess.ss (100%) rename {teachpack => collects/teachpack}/htdp/gui.ss (100%) rename {teachpack => collects/teachpack}/htdp/hangman.ss (100%) rename {teachpack => collects/teachpack}/htdp/image.ss (100%) rename {teachpack => collects/teachpack}/htdp/lkup-gui.ss (100%) rename {teachpack => collects/teachpack}/htdp/master.ss (100%) rename {teachpack => collects/teachpack}/htdp/servlet.ss (100%) rename {teachpack => collects/teachpack}/htdp/servlet2.ss (100%) rename {teachpack => collects/teachpack}/htdp/show-queen.ss (100%) rename {teachpack => collects/teachpack}/htdp/world.ss (100%) rename {teachpack => collects/teachpack}/turtles.ss (100%) rename {teachpack => collects/teachpack}/value-turtles.ss (100%) rename {notes => doc/release-notes}/COPYING-libscheme.txt (100%) rename {notes => doc/release-notes}/COPYING.LIB (100%) rename {notes => doc/release-notes}/drscheme/HISTORY (100%) rename {notes => doc/release-notes}/mred/HISTORY (100%) rename {notes => doc/release-notes}/mred/MrEd_100.txt (100%) rename {notes => doc/release-notes}/mred/MrEd_100_Framework.txt (100%) rename {notes => doc/release-notes}/mzscheme/HISTORY (100%) rename {notes => doc/release-notes}/mzscheme/MzScheme_200.txt (100%) rename {notes => doc/release-notes}/mzscheme/MzScheme_300.txt (100%) rename {notes => doc/release-notes}/mzscheme/rename-super-fixup.ss (100%) rename {notes => doc/release-notes}/stepper/DESIGN-NOTES (100%) rename {notes => doc/release-notes}/stepper/HISTORY (100%) rename {notes => doc/release-notes}/teachpack/HISTORY (100%) create mode 100644 src/copytree.ss create mode 100644 src/mkdirs.ss diff --git a/collects/compiler/start.ss b/collects/compiler/start.ss index 320a9e99f4..3c874fac0c 100644 --- a/collects/compiler/start.ss +++ b/collects/compiler/start.ss @@ -54,6 +54,7 @@ (define plt-files-replace (make-parameter #f)) (define plt-files-plt-relative? (make-parameter #f)) (define plt-files-plt-home-relative? (make-parameter #f)) + (define plt-force-install-dir? (make-parameter #f)) (define plt-setup-collections (make-parameter null)) (define plt-include-compiled (make-parameter #f)) @@ -311,10 +312,17 @@ ("Files in archive replace existing files when unpacked")] [("--at-plt") ,(lambda (f) (plt-files-plt-relative? #t)) - ("Files/dirs in archive are relative to PLT add-ons directory")] + ("Files/dirs in archive are relative to user's add-ons directory")]] + [once-any [("--all-users") ,(lambda (f) (plt-files-plt-home-relative? #t)) - ("Files/dirs in archive are relative to PLT installation directory")] + ("Files/dirs in archive go to PLT installation if writable")] + [("--force-all-users") + ,(lambda (f) + (plt-files-plt-home-relative? #t) + (plt-force-install-dir? #t)) + ("Files/dirs forced to PLT installation")]] + [once-each [("--include-compiled") ,(lambda (f) (plt-include-compiled #t)) ("Include \"compiled\" subdirectories in the archive")]] @@ -539,25 +547,27 @@ "file/directory is not relative to the current directory: \"~a\"" fd))) source-files) - (pack (plt-output) (plt-name) - source-files - (map list (plt-setup-collections)) - std-filter #t - (if (plt-files-replace) - 'file-replace - 'file) - #f - (or (plt-files-plt-relative?) - (plt-files-plt-home-relative?)) - ;; Get current version of mzscheme for require: - (let ([i (get-info '("mzscheme"))]) - (let ([v (and i (i 'version (lambda () #f)))]) - (list (list '("mzscheme") v)))) - null - (plt-files-plt-home-relative?)) + (pack-plt (plt-output) (plt-name) + source-files + #:collections (map list (plt-setup-collections)) + #:file-mode (if (plt-files-replace) + 'file-replace + 'file) + #:plt-relative? (or (plt-files-plt-relative?) + (plt-files-plt-home-relative?)) + #:at-plt-home? (plt-files-plt-home-relative?) + #:test-plt-dirs (if (or (plt-force-install-dir?) + (not (plt-files-plt-home-relative?))) + #f + (list "collects" "doc" "include" "lib")) + #:requires + ;; Get current version of mzscheme for require: + (let ([i (get-info '("mzscheme"))]) + (let ([v (and i (i 'version (lambda () #f)))]) + (list (list '("mzscheme") v))))) (printf " [output to \"~a\"]~n" (plt-output))] [(plt-collect) - (pack-collections + (pack-collections-plt (plt-output) (if (eq? default-plt-name (plt-name)) #f @@ -569,13 +579,14 @@ (cons (cadr m) (loop (caddr m))) (list sf))))) source-files) - (plt-files-replace) - (map list (plt-setup-collections)) - (if (plt-include-compiled) - (lambda (path) - (or (regexp-match #rx"compiled$" path) - (std-filter path))) - std-filter) - (plt-files-plt-home-relative?)) + #:replace? (plt-files-replace) + #:extra-setup-collections (map list (plt-setup-collections)) + #:filter (if (plt-include-compiled) + (lambda (path) + (or (regexp-match #rx"compiled$" path) + (std-filter path))) + std-filter) + #:at-plt-home? (plt-files-plt-home-relative?) + #:test-plt-collects? (not (plt-force-install-dir?))) (printf " [output to \"~a\"]~n" (plt-output))] [else (printf "bad mode: ~a~n" mode)])) diff --git a/collects/config/config.ss b/collects/config/config.ss new file mode 100644 index 0000000000..abdada422b --- /dev/null +++ b/collects/config/config.ss @@ -0,0 +1,8 @@ + +;; The config module doesn't have to use "configtab.ss"; +;; it just has the have the right exports. But using +;; "configtab.ss" makes it easier to generate the +;; code at install time. +(module config (lib "configtab.ss" "setup") + ;; An empty table means that all defaults apply + ) diff --git a/collects/drscheme/private/language-configuration.ss b/collects/drscheme/private/language-configuration.ss index 62eef96b9a..954ad6a524 100644 --- a/collects/drscheme/private/language-configuration.ss +++ b/collects/drscheme/private/language-configuration.ss @@ -1024,9 +1024,7 @@ (floor (inexact->exact (unbox y-box)))))) (define teachpack-directory - (let ([lib-dir (build-path - (collection-path "mzlib") - 'up 'up "teachpack")]) + (let ([lib-dir (collection-path "teachpack")]) (if (directory-exists? lib-dir) lib-dir #f))) diff --git a/collects/help/installer.ss b/collects/help/installer.ss index 83df745d35..9f2c7bc747 100644 --- a/collects/help/installer.ss +++ b/collects/help/installer.ss @@ -3,7 +3,8 @@ (require (lib "match.ss") (lib "file.ss") - (lib "list.ss")) + (lib "list.ss") + (lib "dirs.ss" "setup")) (define installer (lambda (path) @@ -28,9 +29,8 @@ (build-path (collection-path "help") "servlets"))) (define exploded-servlet-dir-len (length (explode-path servlet-dir))) - ;; assume that there is only a single `help' collection and that the - ;; original PLT tree help directory is a sibling of that. - (define dest-dir (build-path (collection-path "help") 'up "doc" "help")) + ;; assume that "help" is in the main doc directory + (define dest-dir (build-path (find-doc-dir) "help")) (unless (directory-exists? dest-dir) (make-directory* dest-dir)) diff --git a/collects/help/private/colldocs.ss b/collects/help/private/colldocs.ss index 830deb5aa7..6f55a23197 100644 --- a/collects/help/private/colldocs.ss +++ b/collects/help/private/colldocs.ss @@ -27,56 +27,4 @@ docs) (cons name names)) (loop (cdr dirs) docs names))) - (loop (cdr dirs) docs names)))]))) - - - ; Gets a list of collections that contain a doc.txt file - ; returns two parallel lists. - ; the first has the locations of the docs and the second is their names. - #; - (define (colldocs) - (let loop ([collection-paths (current-library-collection-paths)] - [docs null] - [names null]) - (cond - [(null? collection-paths) - (let* ([collections-docs (map cons docs names)] - [l (sort collections-docs - (lambda (a b) (stringstring coll) names))) - (let* ([lcollpath (append collpath (list coll))] - [doc-txt-file (list colldir (string->path "doc.txt"))] - [this? (file-exists? (apply build-path doc-txt-file))]) - (let-values ([(sub-docs sub-names) - (with-handlers ([exn:fail:filesystem? - (lambda (x) (values null null))]) - (let ([info-proc/f (get-info lcollpath)]) - (if info-proc/f - (let ([l (info-proc/f 'doc-sub-collections (lambda () null))]) - (cloop (map string->path l) colldir lcollpath null null)) - (values null null))))]) - (let ([sub-names (map (lambda (s) (string-append (path->string coll) " " s)) sub-names)]) - (let-values ([(ldocs lnames) - (if this? - (values (cons doc-txt-file sub-docs) - (cons (path->string coll) sub-names)) - (values sub-docs sub-names))]) - (cloop (cdr l) path collpath (append ldocs docs) (append lnames names))))))] - [else (cloop (cdr l) path collpath docs names)]))])))])))) + (loop (cdr dirs) docs names)))])))) \ No newline at end of file diff --git a/collects/help/private/config.ss b/collects/help/private/config.ss index 1517eab753..26f9685274 100644 --- a/collects/help/private/config.ss +++ b/collects/help/private/config.ss @@ -1,6 +1,7 @@ (module config mzscheme (require (lib "file.ss") (lib "configuration.ss" "web-server") + (lib "dirs.ss" "setup") "internal-hp.ss") (provide config) @@ -11,7 +12,6 @@ (normalize-path (apply build-path args)))] [help-path (build-normal-path (collection-path "help"))] - [doc-path (build-normal-path help-path 'up "doc")] [host-root (build-normal-path help-path "web-root")] [servlet-root help-path] [make-host-config @@ -46,8 +46,11 @@ (max-waiting 40) (initial-connection-timeout 30) (default-host-table - ,(make-host-config (build-normal-path doc-path 'up))) - (virtual-host-table - (,addon-host - ,(make-host-config - (build-path (find-system-path 'addon-dir)))))))))) + ,(make-host-config (find-collects-dir))) + (virtual-host-table + ,@(map + (lambda (virtual-host dir) + `(,virtual-host + ,(make-host-config dir))) + (append doc-hosts collects-hosts) + (append doc-dirs collects-dirs)))))))) diff --git a/collects/help/private/finddoc.ss b/collects/help/private/finddoc.ss index 90aade2191..14359e228b 100644 --- a/collects/help/private/finddoc.ss +++ b/collects/help/private/finddoc.ss @@ -1,10 +1,12 @@ (module finddoc mzscheme - (require "path.ss") + (require "path.ss" + (lib "dirs.ss" "setup")) (provide finddoc findreldoc finddoc-page - finddoc-page-anchor) + finddoc-page-anchor + find-doc-directory) ;; Creates a "file:" link into the indicated manual. ;; The link doesn't go to a particular anchor, @@ -39,7 +41,7 @@ (let ([path (if anchor? (string-append (caddr m) "#" (cadddr m)) (caddr m))]) - (if (servlet-path? path) + (if (servlet-path? (string->path (caddr m))) path (format "/doc/~a/~a" manual path)))))) @@ -63,7 +65,7 @@ ;; (list docdir index-key filename anchor title) (define (lookup manual index-key label) (let ([key (string->symbol manual)] - [docdir (build-path (collection-path "doc") manual)]) + [docdir (find-doc-directory manual)]) (let ([l (hash-table-get ht key @@ -77,6 +79,13 @@ (let ([m (assoc index-key l)]) (if m (cons docdir m) - (error 'finddoc "index key ~s not found in manual ~s" index-key manual))))))) - - + (error 'finddoc "index key ~s not found in manual ~s" index-key manual)))))) + + ;; finds the full path of the doc directory, if one exists + ;; input is just the short name of the directory (as a path) + (define (find-doc-directory doc) + (ormap (lambda (d) + (let ([p (build-path d doc)]) + (and (directory-exists? p) + p))) + (get-doc-search-dirs)))) diff --git a/collects/help/private/get-help-url.ss b/collects/help/private/get-help-url.ss index ce6ad76383..c55f76b72f 100644 --- a/collects/help/private/get-help-url.ss +++ b/collects/help/private/get-help-url.ss @@ -4,7 +4,8 @@ (require (lib "file.ss") "internal-hp.ss" (lib "contract.ss") - (lib "etc.ss")) + (lib "etc.ss") + (lib "dirs.ss" "setup")) (provide/contract (get-help-url (((lambda (x) @@ -20,37 +21,39 @@ (let ([segments (explode-path (normalize-path manual-path))]) (let loop ([candidates manual-path-candidates]) (cond - ;; shouldn't happen, unless documentation is found outside the user's addon dir - ;; and also outside the PLT tree. - [(null? candidates) "/cannot-find-docs.html"] - [else - (let ([candidate (car candidates)]) - (cond - [(subpath/tail (car candidate) segments) - => - (λ (l-o-path) - ((cadr candidate) l-o-path anchor))] - [else (loop (cdr candidates))]))]))))) - + ;; shouldn't happen, unless documentation is outside + ;; the set of doc dirs: + [(null? candidates) "/cannot-find-docs.html"] + [else + (let ([candidate (car candidates)]) + (cond + [(subpath/tail (car candidate) segments) + => + (λ (l-o-path) + ((cadr candidate) l-o-path anchor))] + [else (loop (cdr candidates))]))]))))) + (define manual-path-candidates '()) (define (maybe-add-candidate candidate host) (with-handlers ([exn:fail? void]) (set! manual-path-candidates (cons (list (explode-path (normalize-path candidate)) (λ (segments anchor) - (format "http://~a:~a~a~a" - host - internal-port - (apply string-append (map (λ (x) (format "/~a" (path->string x))) - segments)) - (if anchor - (string-append "#" anchor) - "")))) - manual-path-candidates)))) - (define stupid-internal-define-syntax1 - (maybe-add-candidate (build-path (collection-path "doc") 'up) internal-host)) - (define stupid-internal-define-syntax2 - (maybe-add-candidate (build-path (find-system-path 'addon-dir)) addon-host)) + (format "http://~a:~a~a~a" + host + internal-port + (apply string-append (map (λ (x) (format "/~a" (path->string x))) + segments)) + (if anchor + (string-append "#" anchor) + "")))) + manual-path-candidates)))) + + ;; Add doc dirs later, so that they take precedence: + (for-each (lambda (dir host) + (maybe-add-candidate dir host)) + (append collects-dirs doc-dirs) + (append collects-hosts doc-hosts)) (define (subpath/tail short long) (let loop ([short short] diff --git a/collects/help/private/gui.ss b/collects/help/private/gui.ss index f1914a0a46..785225396b 100644 --- a/collects/help/private/gui.ss +++ b/collects/help/private/gui.ss @@ -24,6 +24,7 @@ "standard-urls.ss" "docpos.ss" "manuals.ss" + "get-help-url.ss" "internal-hp.ss") @@ -115,27 +116,58 @@ [(is-download.plt-scheme.org/doc-url? url) url] - ;; on the internal host - [(and (equal? internal-host (url-host url)) - (equal? internal-port (url-port url))) - (let* ([path (url-path url)] - [coll (and (pair? path) - (pair? (cdr path)) - (path/param-path (cadr path)))] - [coll-path (and coll (string->path coll))] - [doc-pr (and coll-path (assoc coll-path known-docs))]) - - ;; check to see if the docs are installed - (if (and doc-pr - (not (has-index-installed? coll-path))) - (let ([url-str (url->string url)]) - (string->url - (make-missing-manual-url coll (cdr doc-pr) url-str))) - url))] - - [(and (equal? addon-host (url-host url)) - (equal? internal-port (url-port url))) - url] + ;; one of the "collects" hosts: + [(and (equal? internal-port (url-port url)) + (or (equal? internal-host (url-host url)) + (ormap (lambda (host) + (equal? host (url-host url))) + collects-hosts))) + url] + + ;; one of the "doc" hosts: + [(and (equal? internal-port (url-port url)) + (ormap (lambda (host) + (equal? host (url-host url))) + doc-hosts)) + ;; Two things can go wrong with the URL: + ;; 1. The corresponding doc might not be installed + ;; 2. There's a relative reference from X to Y, and + ;; X and Y are installed in different directories, + ;; so the host is wrong for Y + ;; Resolve 2, then check 1. + (let* ([path (url-path url)] + [manual (and (pair? path) + (path/param-path (car path)))]) + (if manual + ;; Find out where this manual is really located: + (let* ([path (find-doc-directory (string->path manual))] + [real-url (and path + (get-help-url path))] + [url (if real-url + ;; Use the actual host: + (make-url (url-scheme url) + (url-user url) + (url-host (string->url real-url)) + (url-port url) + (url-path-absolute? url) + (url-path url) + (url-query url) + (url-fragment url)) + ;; Can't do better than the original URL? + ;; The manual is not installed. + url)]) + (if (or (not path) + (not (has-index-installed? path))) + ;; Manual not installed... + (let ([doc-pr (assoc (string->path manual) known-docs)]) + (string->url + (make-missing-manual-url manual + (cdr doc-pr) + (url->string url)))) + ;; Manual here; use revised URL + url)) + ;; Not a manual? Shouldn't happen. + url))] ;; send the url off to another browser [(or (and (string? (url-scheme url)) @@ -151,16 +183,8 @@ (super-new))) ;; has-index-installed? : path -> boolean - (define (has-index-installed? doc-coll) - (let loop ([docs-dirs (find-doc-directories)]) - (cond - [(null? docs-dirs) #f] - [else - (let ([doc-dir (car docs-dirs)]) - (let-values ([(base name dir?) (split-path doc-dir)]) - (or (and (equal? doc-coll name) - (get-index-file doc-dir)) - (loop (cdr docs-dirs)))))]))) + (define (has-index-installed? path) + (and (get-index-file path) #t)) (define sk-bitmap #f) diff --git a/collects/help/private/internal-hp.ss b/collects/help/private/internal-hp.ss index 79bd120172..9784e33396 100644 --- a/collects/help/private/internal-hp.ss +++ b/collects/help/private/internal-hp.ss @@ -1,6 +1,38 @@ (module internal-hp mzscheme - (provide internal-host internal-port addon-host) - - (define internal-host "helpdesk.plt-scheme.org") ;; should not exist. - (define addon-host "addon-helpdesk.plt-scheme.org") ;; ditto - (define internal-port 8000)) + (require (lib "dirs.ss" "setup")) + (provide internal-port internal-host + collects-hosts collects-dirs + doc-hosts doc-dirs) + + ;; Hostnames defined here should not exist as real machines + + ;; The general idea is that there's one virtual host for + ;; every filesystem tree that we need to access. + ;; The "get-help-url.ss" library provides a function to + ;; convert a path into a suitable URL (i.e., a URL using + ;; the right virtual host). + ;; The "gui.ss" library performs a bit of extra URL + ;; processing at the last minute, sometimes switching + ;; a URL for a manual to a different host. (That's needed + ;; when cross-manual references are implemented as relative + ;; URLs.) + + (define internal-host "helpdesk.plt-scheme.org") + (define internal-port 8000) + + (define (generate-hosts prefix dirs) + (let loop ([dirs dirs][n 0]) + (if (null? dirs) + null + (cons (format "~a~a.helpdesk.plt-scheme.org" prefix n) + (loop (cdr dirs) (add1 n)))))) + + (define collects-dirs + (get-collects-search-dirs)) + (define collects-hosts + (generate-hosts "collects" collects-dirs)) + + (define doc-dirs + (get-doc-search-dirs)) + (define doc-hosts + (generate-hosts "doc" doc-dirs))) diff --git a/collects/help/private/manuals.ss b/collects/help/private/manuals.ss index c42d908a6d..ad157eeb8a 100644 --- a/collects/help/private/manuals.ss +++ b/collects/help/private/manuals.ss @@ -7,6 +7,8 @@ (lib "contract.ss") (lib "getinfo.ss" "setup") (lib "uri-codec.ss" "net") + (lib "dirs.ss" "setup") + "finddoc.ss" "colldocs.ss" "docpos.ss" "path.ss" @@ -50,87 +52,13 @@ (make-sec "Libraries" #rx"SRFI|MzLib|Framework|PLT Miscellaneous|Teachpack|Swindle" '()) (make-sec "Writing extensions" #rx"Tools|Inside|Foreign" '()) (make-sec "Other" #rx"" '()))) - - ;; Creates a "file:" link into the indicated manual. - ;; The link doesn't go to a particular anchor, - ;; because "file:" does not support that. - (define (finddoc manual index-key label) - (let ([m (finddoc-lookup manual index-key label)]) - (if (string? m) - m - (format "~a" - (path->string (build-path (car m) (caddr m))) - label)))) - - ;; Given a Unix-style relative path to reach the "doc" - ;; collection, creates a link that can go to a - ;; particular anchor. - (define (findreldoc todocs manual index-key label) - (let ([m (finddoc-lookup manual index-key label)]) - (if (string? m) - m - (format "~a" - todocs - manual - (caddr m) - (cadddr m) - label)))) - - (define (finddoc-page-help manual index-key anchor?) - (let ([m (finddoc-lookup manual index-key "dummy")]) - (if (string? m) - (error (format "Error finding index \"~a\" in manual \"~a\"" - index-key manual)) - (let ([path (if anchor? - (string-append (caddr m) "#" (cadddr m)) - (caddr m))]) - (if (servlet-path? (string->path (caddr m))) - path - (format "/doc/~a/~a" manual path)))))) - - ; finddoc-page : string string -> string - ; returns path for use by PLT Web server - ; path is of form /doc/manual/page, or - ; /servlet/ - (define (finddoc-page manual index-key) - (finddoc-page-help manual index-key #f)) - - ; finddoc-page-anchor : string string -> string - ; returns path (with anchor) for use by PLT Web server - ; path is of form /doc/manual/page#anchor, or - ; /servlet/#anchor - (define (finddoc-page-anchor manual index-key) - (finddoc-page-help manual index-key #t)) - - ;; returns either a string (failure) or - ;; (list docdir index-key filename anchor title) - (define finddoc-ht (make-hash-table)) - (define (finddoc-lookup manual index-key label) - (let ([key (string->symbol manual)] - [docdir (find-doc-directory (string->path manual))]) - (unless docdir - (error 'finddoc-lookup "manual ~s not found" manual)) - (let ([l (hash-table-get - finddoc-ht - key - (lambda () - (let ([f (build-path docdir "hdindex")]) - (if (file-exists? f) - (let ([l (with-input-from-file f read)]) - (hash-table-put! finddoc-ht key l) - l) - (error 'finddoc "manual index ~s not installed" manual)))))]) - (let ([m (assoc index-key l)]) - (if m - (cons docdir m) - (error 'finddoc "index key ~s not found in manual ~s" index-key manual)))))) - + ; manual is doc collection subdirectory, e.g. "mred" (define (main-manual-page manual) (let* ([entry (assoc (string->path manual) known-docs)] [name (or (and entry (cdr entry)) manual)] - [href (string-append "/doc/" manual "/")]) + [href (get-help-url (find-doc-directory manual))]) `(A ((HREF ,href)) ,name))) ; string string string -> xexpr @@ -197,36 +125,22 @@ [else (loop (cdr dirs))]))])))) (define (find-doc-directories-in-doc-collection) - (let loop ([paths (current-library-collection-paths)] - [acc null]) + (let loop ([dirs (get-doc-search-dirs)] + [acc null]) (cond - [(null? paths) acc] - [else (let* ([path (car paths)] - [doc-path (build-path path "doc")]) - (if (directory-exists? doc-path) - (let dloop ([doc-contents (directory-list doc-path)] - [acc acc]) - (cond - [(null? doc-contents) (loop (cdr paths) acc)] - [else - (let ([candidate (build-path doc-path (car doc-contents))]) - (if (directory-exists? candidate) - (dloop (cdr doc-contents) (cons candidate acc)) - (dloop (cdr doc-contents) acc)))])) - (loop (cdr paths) acc)))]))) - - ;; finds the full path of the doc directory, if one exists - ;; input is just the short name of the directory (as a path) - (define (find-doc-directory doc) - (let loop ([dirs (find-doc-directories-in-doc-collection)]) - (cond - [(null? dirs) #f] - [else (let ([dir (car dirs)]) - (let-values ([(base name dir?) (split-path dir)]) - (if (equal? name doc) - dir - (loop (cdr dirs)))))]))) - + [(null? dirs) acc] + [else (let* ([doc-path (car dirs)]) + (if (directory-exists? doc-path) + (let dloop ([doc-contents (directory-list doc-path)] + [acc acc]) + (cond + [(null? doc-contents) (loop (cdr dirs) acc)] + [else + (let ([candidate (build-path doc-path (car doc-contents))]) + (if (directory-exists? candidate) + (dloop (cdr doc-contents) (cons candidate acc)) + (dloop (cdr doc-contents) acc)))])) + (loop (cdr dirs) acc)))]))) (define re:title (regexp "<[tT][iI][tT][lL][eE]>(.*)")) diff --git a/collects/help/private/search.ss b/collects/help/private/search.ss index e17cdf784f..cdb78587bf 100644 --- a/collects/help/private/search.ss +++ b/collects/help/private/search.ss @@ -5,7 +5,8 @@ "manuals.ss" (lib "list.ss") (lib "plt-match.ss") - (lib "contract.ss")) + (lib "contract.ss") + (lib "dirs.ss" "setup")) (provide doc-collections-changed) (provide/contract @@ -33,6 +34,7 @@ (non-regexp (string? . -> . string?))) + (define doc-dirs (get-doc-search-dirs)) ; These are set by reset-doc-lists: ; docs, doc-names and doc-kinds are parallel lists. doc-kinds @@ -44,8 +46,12 @@ ; doc-kinds : (list-of symbol) (define doc-kinds null) ; doc-collection-date : (union #f number 'none) - (define doc-collection-date #f) + (define doc-collection-dates (map (lambda (x) #f) doc-dirs)) + (define (dir-date/none dir) + (with-handlers ([exn:fail:filesystem? (lambda (x) 'none)]) + (file-or-directory-modify-seconds dir))) + (define (reset-doc-lists) ; Locate standard HTML documentation (define-values (std-docs std-doc-names) @@ -64,10 +70,7 @@ txt-doc-names))) (set! doc-kinds (append (map (lambda (x) 'html) std-docs) (map (lambda (x) 'text) txt-docs))) - (with-handlers ([exn:fail:filesystem? (lambda (x) (set! doc-collection-date 'none))]) - (set! doc-collection-date - (file-or-directory-modify-seconds - (collection-path "doc"))))) + (set! doc-collection-dates (map dir-date/none doc-dirs))) (define MAX-HIT-COUNT 300) @@ -284,7 +287,7 @@ (string->list s))))) (define (doc-collections-changed) - (set! doc-collection-date #f) + (set! doc-collection-dates (map (lambda (x) #f) doc-dirs)) (set! html-keywords (make-hash-table 'equal)) (set! html-indices (make-hash-table 'equal)) (set! text-keywords (make-hash-table 'equal)) @@ -325,11 +328,18 @@ add-doc-section add-kind-section add-choice) ; When new docs are installed, the directory's modification date changes: (set! max-reached #f) - (unless (eq? doc-collection-date 'none) - (when (or (not doc-collection-date) - (> (file-or-directory-modify-seconds (collection-path "doc")) - doc-collection-date)) - (reset-doc-lists))) + + (when (ormap (lambda (date new-date) + (cond + [(not date) #t] + [(equal? date new-date) #f] + [(eq? date 'none) #t] + [(eq? new-date 'none) #t] + [else (new-date . > . date)])) + doc-collection-dates + (map dir-date/none doc-dirs)) + (reset-doc-lists)) + (let ([hit-count 0]) (let-values ([(string-finds finds) (build-string-finds/finds given-find regexp? exact?)] [(filtered-docs filtered-doc-names filtered-doc-kinds) diff --git a/collects/help/private/tcp-intercept.ss b/collects/help/private/tcp-intercept.ss index c74ce8258f..b15a4b6646 100644 --- a/collects/help/private/tcp-intercept.ss +++ b/collects/help/private/tcp-intercept.ss @@ -108,7 +108,8 @@ (define (gen-tcp-connect raw) (lambda (hostname-string port) (if (and (or (string=? internal-host hostname-string) - (string=? addon-host hostname-string)) + (ormap (lambda (host) string=? host hostname-string) + doc-hosts)) (equal? internal-port port)) (let-values ([(req-in req-out) (make-pipe)] [(resp-in resp-out) (make-pipe)]) diff --git a/collects/help/refresh-manuals.ss b/collects/help/refresh-manuals.ss index b47c4db92d..d4cfefa215 100644 --- a/collects/help/refresh-manuals.ss +++ b/collects/help/refresh-manuals.ss @@ -175,7 +175,12 @@ (when doc-dir (display (format sc-refresh-deleting... full-name)) (newline) - (delete-directory/r doc-dir))))) + (with-handlers ([exn:fail:filesystem? + (lambda (exn) + (fprintf (current-error-port) + "Warning: delete failed: ~a\n" + (exn-message exn)))]) + (delete-directory/r doc-dir)))))) (define delete-local-plt-files (lambda (tmp-dir) @@ -216,5 +221,7 @@ (display (format sc-refresh-installing... (cdr pr))) (newline) (run-single-installer (make-local-doc-filename tmp-dir (car pr)) - parent)) + (lambda () + (error 'install-docs + "expected PLT-relative archive")))) docs-to-install)))) diff --git a/collects/help/servlets/release/notes.ss b/collects/help/servlets/release/notes.ss index 136bcfe769..3877701ad2 100644 --- a/collects/help/servlets/release/notes.ss +++ b/collects/help/servlets/release/notes.ss @@ -2,6 +2,7 @@ (require (lib "servlet.ss" "web-server") (lib "list.ss") (lib "uri-codec.ss" "net") + (lib "dirs.ss" "setup") "../private/util.ss" "../private/headelts.ss") @@ -9,7 +10,7 @@ (let* ([label (car s)] [dir (cadr s)] [filename (caddr s)] - [file (build-path (collection-path "mzlib") 'up 'up "notes" dir filename)]) + [file (build-path (find-doc-dir) "release-notes" dir filename)]) (if (file-exists? file) `(LI (A ((HREF ,(format "/servlets/doc-anchor.ss?file=~a&name=~a&caption=~a" (uri-encode (path->string file)) diff --git a/collects/help/servlets/results.ss b/collects/help/servlets/results.ss index 38709b89e0..d63e05e548 100644 --- a/collects/help/servlets/results.ss +++ b/collects/help/servlets/results.ss @@ -13,6 +13,7 @@ is stored in a module top-level and that's namespace-specific. (lib "string.ss") (lib "servlet.ss" "web-server") (lib "uri-codec.ss" "net") + (lib "dirs.ss" "setup") "../private/internal-hp.ss" "../private/path.ss" "../private/docpos.ss" @@ -81,7 +82,7 @@ is stored in a module top-level and that's namespace-specific. (define exp-web-root (explode-path (normalize-path - (build-path (collection-path "mzlib") 'up)))) + (find-collects-dir)))) (define web-root-len (length exp-web-root)) (define (keyword-string? ekey) diff --git a/collects/mzlib/foreign.ss b/collects/mzlib/foreign.ss index 374de69eb1..d8679d5050 100644 --- a/collects/mzlib/foreign.ss +++ b/collects/mzlib/foreign.ss @@ -2,7 +2,8 @@ (module foreign mzscheme -(require #%foreign) +(require #%foreign + (lib "dirs.ss" "setup")) (require-for-syntax (lib "stx.ss" "syntax")) ;; This module is full of unsafe bindings that are not provided to requiring @@ -166,7 +167,12 @@ [name (if (regexp-match lib-suffix-re name0) ; name + suffix (string-append name0 version) (string-append name0 "." lib-suffix version))]) - (or (ffi-lib name #t) ; try good name first + (or (ormap (lambda (dir) + (or (ffi-lib (build-path dir name) #t) ; try good name first + (ffi-lib (build-path dir name0) #t))) ; try original + (get-lib-search-dirs)) + ;; Try without DLL path: + (ffi-lib name #t) ; try good name first (ffi-lib name0 #t) ; try original (and (file-exists? name) ; try a relative path (ffi-lib (fullpath name) #t)) diff --git a/collects/openssl/mzssl.ss b/collects/openssl/mzssl.ss index 9b8c7ff28a..65f4e18b41 100644 --- a/collects/openssl/mzssl.ss +++ b/collects/openssl/mzssl.ss @@ -18,8 +18,7 @@ (lib "port.ss") (lib "etc.ss") (lib "kw.ss") - (lib "filename-version.ss" "dynext") - (lib "dirs.ss" "setup")) + (lib "filename-version.ss" "dynext")) (provide ssl-available? ssl-load-fail-reason @@ -53,20 +52,11 @@ (define ssl-load-fail-reason #f) - (define (ffi-lib-win name) - (let* ([d (find-dll-dir)] - [f (and d (build-path d (format "~a.dll" name)))]) - ;; Try PLT-specific lib: - (if (and f (file-exists? f)) - (ffi-lib f) - ;; Try system-wide: - (ffi-lib (format "~a.dll" name))))) - (define (ffi-lib-xxxxxxx name) (let* ([f (format "~a~a" name filename-version-part)]) (or (with-handlers ([exn? (lambda (x) #f)]) - (ffi-lib-win (format "~a~a" name filename-version-part))) - (ffi-lib-win (format "~axxxxxxx" name))))) + (ffi-lib (format "~a~a" name filename-version-part))) + (ffi-lib (format "~axxxxxxx" name))))) (define 3m? (regexp-match #rx#"3m" (path->bytes (system-library-subpath)))) @@ -76,7 +66,7 @@ #f)]) (case (system-type) [(windows) - (ffi-lib-win "libeay32")] + (ffi-lib "libeay32")] [else (ffi-lib "libcrypto")]))) @@ -87,7 +77,7 @@ #f)]) (case (system-type) [(windows) - (ffi-lib-win "ssleay32")] + (ffi-lib "ssleay32")] [else (ffi-lib "libssl")])))) diff --git a/collects/setup/configtab.ss b/collects/setup/configtab.ss new file mode 100644 index 0000000000..4d426d3ede --- /dev/null +++ b/collects/setup/configtab.ss @@ -0,0 +1,92 @@ + +;; Defines a language to be used by the "config.ss" file + +(module configtab mzscheme + + ;; These are the name that need to be provided + ;; by the "config.ss" library: + (define-for-syntax exports + '(doc-dir + doc-search-dirs + lib-dir + lib-search-dirs + include-dir + include-search-dirs + bin-dir)) + + ;; ---------------------------------------- + ;; For configure into into absolute paths + + (define use-default (delay #f)) + + (define (to-path l) + (cond + [(string? l) (complete-path (string->path l))] + [(bytes? l) (complete-path (bytes->path l))] + [(list? l) (map to-path l)] + [else l])) + + (define (complete-path p) + (cond + [(complete-path? p) p] + [(absolute-path? p) (exe-relative p)] + [else + (or (parameterize ([current-directory (find-system-path 'orig-dir)]) + (find-executable-path (find-system-path 'exec-file) p)) + (exe-relative p))])) + + (define (exe-relative p) + (let ([exec (path->complete-path + (find-executable-path (find-system-path 'exec-file)) + (find-system-path 'orig-dir))]) + (let-values ([(base name dir?) (split-path exec)]) + (path->complete-path p base)))) + + ;; ---------------------------------------- + ;; module-begin + + (define-syntax config-module-begin + (lambda (stx) + (syntax-case stx (define define-values) + [(_ (define-values (name) val)) + ;; This can happen because a lone definition is expanded + #'(config-module-begin (define name val))] + [(_ (define name val) ...) + (let ([names (syntax->list #'(name ...))]) + (unless (andmap identifier? names) + (raise-syntax-error + #f + "bad syntax" + stx)) + (for-each (lambda (name) + (unless (memq (syntax-e name) exports) + (raise-syntax-error + #f + "not a config name" + name))) + names) + (let ([syms (map syntax-e names)]) + (let loop ([names names][syms syms]) + (cond + [(null? names) 'done] + [(memq (car syms) (cdr syms)) + (raise-syntax-error + #f + "duplicate definition" + (car names))] + [else + (loop (cdr names) (cdr syms))])) + #`(#%plain-module-begin + (provide #,@exports) + (define name (delay (to-path val))) ... + #,@(apply + append + (map (lambda (id) + (if (memq id syms) + () + (list #`(define #,id use-default)))) + exports)))))]))) + + (provide (rename config-module-begin #%module-begin) + define + #%datum quote)) diff --git a/collects/setup/dirs.ss b/collects/setup/dirs.ss index 3bce270f22..8feafb936e 100644 --- a/collects/setup/dirs.ss +++ b/collects/setup/dirs.ss @@ -1,7 +1,11 @@ (module dirs mzscheme - (require (lib "winutf16.ss" "compiler" "private") + (require (prefix config: (lib "config.ss" "config")) + (lib "winutf16.ss" "compiler" "private") (lib "mach-o.ss" "compiler" "private")) + ;; ---------------------------------------- + ;; "collects" + (define main-collects-dir (delay (let ([d (find-system-path 'collects-dir)]) @@ -10,11 +14,11 @@ [(absolute-path? d) ;; This happens only under Windows; add a drive ;; specification to make the path complete - (let ([exec (find-system-path 'exec-file)]) - (if (complete-path? exec) - (let-values ([(base name dir?) (split-path exec)]) - (path->complete-path d base)) - (path->complete-path d (find-system-path 'orig-dir))))] + (let ([exec (path->complete-path + (find-executable-path (find-system-path 'exec-file)) + (find-system-path 'orig-dir))]) + (let-values ([(base name dir?) (split-path exec)]) + (path->complete-path d base)))] [else ;; Relative to executable... (parameterize ([current-directory (find-system-path 'orig-dir)]) @@ -24,36 +28,137 @@ (and p (simplify-path p))))])))) - (provide find-main-collects-dir) - (define (find-main-collects-dir) + (provide find-collects-dir + find-user-collects-dir + get-collects-search-dirs) + (define (find-collects-dir) (force main-collects-dir)) + (define user-collects-dir + (delay (build-path (find-system-path 'addon-dir) (version) "collects"))) + (define (find-user-collects-dir) + (force user-collects-dir)) + (define (get-collects-search-dirs) + (current-library-collection-paths)) + + ;; ---------------------------------------- + ;; Helpers + + (define (single p) (if p (list p) null)) + (define (extra a l) (if (and a (not (member a l))) (cons a l) l)) + (define (combine-search l default) + ;; Replace #f in list with default path: + (if l + (let loop ([l l]) + (cond + [(null? l) null] + [(not (car l)) (append default (loop (cdr l)))] + [else (cons (car l) (loop (cdr l)))])) + default)) (define-syntax define-finder (syntax-rules () - [(_ provide id default) + [(_ provide config:id id user-id config:search-id search-id default) (begin - (provide id) + (define-finder provide config:id id user-id default) + (provide search-id) + (define (search-id) + (combine-search (force config:search-id) + (cons (user-id) (single (id))))))] + [(_ provide config:id id user-id config:search-id search-id extra-search-dir default) + (begin + (define-finder provide config:id id user-id default) + (provide search-id) + (define (search-id) + (combine-search (force config:search-id) + (extra (extra-search-dir) + (cons (user-id) (single (id)))))))] + [(_ provide config:id id user-id default) + (begin + (provide id user-id) (define dir (delay - (let ([p (find-main-collects-dir)]) - (and p - (simplify-path (build-path p - 'up - default)))))) + (or (force config:id) + (let ([p (find-collects-dir)]) + (and p + (simplify-path (build-path p + 'up + default))))))) (define (id) - (force dir)))])) + (force dir)) + (define user-dir + (delay (build-path (find-system-path 'addon-dir) (version) default))) + (define (user-id) + (force user-dir)))])) - (define-finder provide find-include-dir "include") - (define-finder provide find-lib-dir "lib") + (define-syntax no-provide (syntax-rules () [(_ . rest) (begin)])) - (define-finder provide find-console-bin-dir (case (system-type) - [(windows) 'same] - [(macosx unix) "bin"])) + ;; ---------------------------------------- + ;; "doc" - (define-finder provide find-gui-bin-dir (case (system-type) - [(windows macosx) 'same] - [(unix) "bin"])) + (define delayed-#f (delay #f)) + (provide find-doc-dir + find-user-doc-dir + get-doc-search-dirs) + (define-finder no-provide + config:doc-dir + find-doc-dir + find-user-doc-dir + delayed-#f + get-new-doc-search-dirs + "doc") + ;; For now, include "doc" pseudo-collections in search path: + (define (get-doc-search-dirs) + (combine-search (force config:doc-search-dirs) + (append (get-new-doc-search-dirs) + (map (lambda (p) + (build-path p "doc")) + (current-library-collection-paths))))) + + ;; ---------------------------------------- + ;; "include" + + (define-finder provide + config:include-dir + find-include-dir + find-user-include-dir + config:include-search-dirs + get-include-search-dirs + "include") + + ;; ---------------------------------------- + ;; "lib" + + (define-finder provide + config:lib-dir + find-lib-dir + find-user-lib-dir + config:lib-search-dirs + get-lib-search-dirs find-dll-dir + "lib") + + ;; ---------------------------------------- + ;; Executables + + (define-finder provide + config:bin-dir + find-console-bin-dir + find-user-console-bin-dir + (case (system-type) + [(windows) 'same] + [(macosx unix) "bin"])) + + (define-finder provide + config:bin-dir + find-gui-bin-dir + find-user-gui-bin-dir + (case (system-type) + [(windows macosx) 'same] + [(unix) "bin"])) + + ;; ---------------------------------------- + ;; DLLs + (provide find-dll-dir) (define dll-dir (delay (case (system-type) @@ -111,6 +216,4 @@ [else (find-lib-dir)]))) (define (find-dll-dir) - (force dll-dir)) - - ) + (force dll-dir))) diff --git a/collects/setup/doc.txt b/collects/setup/doc.txt index 6fdf4f4367..8dc5063894 100644 --- a/collects/setup/doc.txt +++ b/collects/setup/doc.txt @@ -242,8 +242,10 @@ parameters that control the setup process: "collects" directory, and a list of path choices; it returns a path for a "plt-relative" install; when unpacking an archive, either this or the procedure in - `current-target-directory-getter' will be called [default: - (lambda (preferred main-parent-dir choices) preferred)] + `current-target-directory-getter' will be called, and in + the former case, this procedure one may be called multiple + times [default: (lambda (preferred main-parent-dir choices) + preferred)] Thus, to unpack a single .plt archive "x.plt", set the `archives' parameter to (list "x.plt") and leave `specific-collections' as null. @@ -281,17 +283,33 @@ installation directories: #f if none can be found. (A #f result is likely only in an stand-alone executable that is distributed without libraries.) -> (find-console-bin-dir) +> (find-user-collects-dir) - Returns a path to the installation's executable directory, where the - stand-alone MzScheme executable resides. The result is #f if no such - directory is available. + Returns a path to the user-specific "collects" directory; the + directory indicated by the returned path may or may not exist. -> (find-include-dir) +> (get-collects-search-dir) + + Returns the same result as `(current-library-collection-paths)'. + + +> (find-doc-dir) + + Returns a path to the installation's "doc" directory. The result is + #f if no such directory is available. + +> (find-user-doc-dir) + + Returns a path to a user-specific "doc" directory; the directory + indicated by the returned path may or may not exist. + +> (get-doc-search-dir) + + Returns a list of paths to search for documentation, not including + documentation stored in individual collections. Unless it is + configured otherwise, the result includes any non-#f result of + `(find-doc-dir)' and `(find-user-doc-dir)'. - Returns a path to the installation's "include" directory, which - contains .h files for building MzScheme extensions and embedding - programs. The result is #f if no such directory is available. > (find-lib-dir) @@ -306,6 +324,49 @@ installation directories: is #f if no such directory is available, or if no specific directory is available (i.e., other than the platform's normal search path). +> (find-user-lib-dir) + + Returns a path to a user-specific "lib" directory; the directory + indicated by the returned path may or may not exist. + +> (get-lib-search-dir) + + Returns a list of paths to search for libraries. Unless it is + configured otherwise, the result includes any non-#f result of + `(find-lib-dir)', `(find-dll-dir)', and `(find-user-lib-dir)'. + + +> (find-include-dir) + + Returns a path to the installation's "include" directory, which + contains .h files for building MzScheme extensions and embedding + programs. The result is #f if no such directory is available. + +> (find-user-include-dir) + + Returns a path to a user-specific "include" directory; the directory + indicated by the returned path may or may not exist. + +> (get-include-search-dir) + + Returns a list of paths to search for .h files. Unless it is + configured otherwise, the result includes any non-#f result of + `(find-include-dir)' and `(find-user-include-dir)'. + + +> (find-console-bin-dir) + + Returns a path to the installation's executable directory, where the + stand-alone MzScheme executable resides. The result is #f if no such + directory is available. + +> (find-gui-bin-dir) + + Returns a path to the installation's executable directory, where the + stand-alone MrEd executable resides. The result is #f if no such + directory is available. + + _Getting info.ss fields_ ======================== @@ -411,7 +472,12 @@ The raw format is + 'plt-home-relative? - a boolean; if true and if `plt-relative?' is true, then the archive's content should be unpacked relative - to the plt installation directory. + to the PLT installation. + + + 'test-plt-dirs - #f or a list of path strings; in the latter + case, a true value of 'plt-home-relative? is cancelled if + any of the directories in the list (relative to the PLT + installation) is unwritable by the user. The procedure is extracted from the archive using MzScheme's `read' and `eval' procedures (in a fresh namespace). @@ -437,8 +503,9 @@ The raw format is + a relative path string - the pathname of the directory or file to be unpacked, relative to the unpack directory; and - + a path string for the unpack directory (which is often the - parent of the main "collects" directory). + + a path string for the unpack directory (which can vary for a + PLT-relative install when elements of the archive start with + "collects", "lib", etc.). If the filter procedure returns #f for a directory or file, the directory or file is not unpacked. If the filter procedure returns @@ -492,7 +559,12 @@ mzc supports the creation of simple .plt files (see the mzc manual for details) but the setup collection's _pack.ss_ library provides more general functions to help make .plt archives: -> (pack-collections dest name collections replace? extra-setup-collections [filter] [at-plt-home?]) +> (pack-collections-plt dest name collections + [#:replace? replace?] + [#:at-plt-home? at-home?] + [#:test-plt-collects? test?] + [#:extra-setup-collections collection-list] + [#:filter filter-proc]) Creates the .plt file specified by the pathname `dest', using the string `name' as the name reported to Setup PLT as the archive's @@ -502,55 +574,96 @@ general functions to help make .plt archives: should be a list of collection paths; each collection path is, in turn, a list of relative-path strings. - If `replace?' is #f, then attempting to unpack the archive will - report an error when any of the collections exist already, otherwise - unpacking the archive will overwrite an existing collection. + If the #:replace? argument is #f, then attempting to unpack the + archive will report an error when any of the collections exist + already, otherwise unpacking the archive will overwrite an existing + collection. - The `extra-setup-collections' argument is a list of collection paths - that are not included in the archive, but are set-up when the - archive is unpacked. + If the #:at-plt-home? argument is true, then the archived + collections will be installed into the PLT installation directory + instead of the user's directory if the main "collects" directory is + writable by the user. If the #:test-plt-collects? argument is #f + (the default is #t) and the #:at-plt-home? argument is true, then + installation fails if the main "collects" directory is not writable. - The optional `filter' argument is the same as for `pack' (see + The optional #:extra-setup-collections argument is a list of + collection paths that are not included in the archive, but are + set-up when the archive is unpacked. + + The optional #:filter argument is the same as for `pack-plt' (see below). - The optional `at-plt-home?' argument is the same as for `pack' - where `plt-relative?' is true. +> (pack-collections dest name collections replace? extra-setup-collections [filter] [at-plt-home?]) -> (pack dest name paths collections [filter encode? file-mode unpack-unit plt-relative? requires conflicts at-plt-home?]) + Old, keywordless variant of `pack-collections-plt' for backward compatibility. + +> (pack-plt dest name paths + [#:filter filter-proc] + [#:encode? encode?] + [#:file-mode file-mode-sym] + [#:unpack-unit unit-expr-or-#f] + [#:collections collection-list] + [#:plt-relative? plt-relative?] + [#:at-plt-home? at-plt-home?] + [#:test-plt-dirs dir-list-or-#f] + [#:requires mod-and-version-list] + [#:conflicts mod-list]) Creates the .plt file specified by the pathname `dest', using the string `name' as the name reported to Setup PLT as the archive's - description, and `collections' as the list of collection paths (to - be compiled) returned by the unpacking unit. The `paths' argument - must be a list of relative paths for directories and files; the - contents of these files and directories will be packed into the - archive. + description. The `paths' argument must be a list of relative paths + for directories and files; the contents of these files and + directories will be packed into the archive. - The `filter' procedure is called with the relative path of each + The #:filter procedure is called with the relative path of each candidate for packing. If it returns #f for some path, then that file or directory is omitted from the archive. If it returns 'file or 'file-replace for a file, the file is packed with that mode, - rather than the default mode. The default `filter' is `std-filter' - (defined below). + rather than the default mode. The default is `std-filter' (defined + below). - If `encode?' is #f, then the output archive is in raw form, and - still must be gzipped and mime-encoded (in that order). The default - value is #t. + If the #:encode? argument is #f, then the output archive is in raw + form, and still must be gzipped and mime-encoded (in that + order). The default value is #t. - The `file-mode' argument must be 'file or 'file-replace, indicating - the default mode for a file in the archive. The default value is - 'file. + The #:file-mode argument must be 'file or 'file-replace, + indicating the default mode for a file in the archive. The default + is 'file. The `unpack-unit' argument is usually #f. Otherwise, it must be an - unsigned unit that performs the work of unpacking; see the above - section on .plt internals for more information about the unit. If - `unpack-unit' is #f, an appropriate unpacking unit is generated. + S-expression for a unsigned unit that performs the work of + unpacking; see the above section on .plt internals for more + information about the unit. If `unpack-unit' is #f, an appropriate + unpacking unit is generated. - If `plt-relative?', the archive's files and directories are to be - unpacked relative to the plt add-ons directory (unless - `plt-at-home?' is #t; see below). + The #:collections argument is a list of collection paths to be + compiled after the archive is unpacked. The default is the empty + list. - The `requires' argument should have the shape + If the #:plt-relative? argument is true (the default is #f), the + archive's files and directories are to be unpacked relative to the + user's add-ons directory or the PLT installation directories, + depending on whether the #:at-plt-home? argument is true and whether + directories specified by #;test-plt-dirs are writable by the user. + + If the #:at-plt-home? argument is true (the default is #f), then + #:plt-relative? must be true, and the archive is unpacked relative + to the PLT installation directory. In that case, a relative path + that starts with "collects" is mapped to the installation's main + "collects" directory, and so on, for the following the initial + directory names: + - "collects" + - "doc" + - "lib" + - "include" + + If #:test-plt-dirs is a list, then #:at-plt-home? must be true. In + that case, when the archive is unpacked, if any of the relative + directories in the #;test-plt-dirs list is unwritable by the current + user, then the archive is unpacked in the user's add-ons directory + after all. + + The #:requires argument should have the shape (list (list ) ...) where each is a non-empty list of relative-path strings, and each is a (possibly empty) list of exact integers. The @@ -559,15 +672,15 @@ general functions to help make .plt archives: specified in the corresponding . A collection's version is indicated by the `version' field of it's info.ss file. - The `conflicts' argument should have the shape + The #:conflicts argument should have the shape (list ...) where each is a non-empty list of relative-path strings. The indicated collections must *not* be installed at unpacking time. - If `at-plt-home?' and `plt-relative?', the archive is to be unpacked - relative to the parent of the PLT Scheme installation's main - "collects" directory. The default is #f. +> (pack dest name paths collections [filter encode? file-mode unpack-unit plt-relative? requires conflicts at-plt-home?]) + + Old, keywordless variant of `pack-plt' for backward compatibility. > (std-filter p) - returns #t unless `p', after stripping its directory path and converting to a byte string, matches one of the diff --git a/collects/setup/main-collects.ss b/collects/setup/main-collects.ss index 5dda03cc3f..5a0dae4bba 100644 --- a/collects/setup/main-collects.ss +++ b/collects/setup/main-collects.ss @@ -28,8 +28,8 @@ simplify-bytes-path)) (define main-collects-dir-bytes - (delay (and (find-main-collects-dir) - (path->bytes (find-main-collects-dir))))) + (delay (and (find-collects-dir) + (path->bytes (find-collects-dir))))) (define main-collects-dir/ (delay (and (force main-collects-dir-bytes) @@ -68,7 +68,7 @@ (cond [(and (pair? path) (eq? 'collects (car path)) (bytes? (cdr path))) - (let ([dir (or (find-main-collects-dir) + (let ([dir (or (find-collects-dir) ;; No main "collects"? Use original working directory: (find-system-path 'orig-dir))]) (if (equal? (cdr path) #"") diff --git a/collects/setup/pack.ss b/collects/setup/pack.ss index 7fed21284f..0771eed96c 100644 --- a/collects/setup/pack.ss +++ b/collects/setup/pack.ss @@ -7,9 +7,23 @@ (lib "etc.ss") (lib "port.ss") (lib "file.ss") + (lib "kw.ss") (lib "getinfo.ss" "setup")) - (provide pack mztar std-filter pack-collections) + (provide pack + pack-plt + mztar + std-filter + pack-collections + pack-collections-plt) + + (define (x-arg-needs-true-arg who arg1-name v arg2-name) + (error who + (string-append + "true value for `~a' argument: ~e " + "requires a true value for `~a' argument") + arg1-name v + arg2-name)) (define pack (opt-lambda (dest name paths collections @@ -20,7 +34,37 @@ [plt-relative? #t] [requires null] [conflicts null] - [plt-home-relative? #f]) + [at-plt-home? #f]) + (pack-plt dest name paths + #:collections collections + #:filter filter + #:encode? encode? + #:file-mode file-mode + #:unpack-unit unpack-unit + #:plt-relative? plt-relative? + #:requires null + #:conflicts null + #:at-plt-home? at-plt-home?))) + + (define pack-plt + (lambda/kw (dest name paths + #:key + [collections null] + [filter std-filter] + [encode? #t] + [file-mode 'file] + [unpack-unit #f] + [plt-relative? #t] + [requires null] + [conflicts null] + [at-plt-home? #f] + [test-plt-dirs #f]) + (when at-plt-home? + (unless plt-relative? + (x-arg-needs-true-arg 'pack-plt 'at-plt-home? at-plt-home? 'plt-relative?))) + (when test-plt-dirs + (unless at-plt-home? + (x-arg-needs-true-arg 'pack-plt 'test-plt-dirs test-plt-dirs 'at-plt-home?))) (let*-values ([(file) (open-output-file dest 'truncate/replace)] [(fileout thd) (if encode? @@ -83,7 +127,10 @@ [(conflicts) ',conflicts] [(plt-relative?) ,plt-relative?] [(plt-home-relative?) ,(and plt-relative? - plt-home-relative?)] + at-plt-home?)] + [(test-plt-dirs) ,(and plt-relative? + at-plt-home? + `',test-plt-dirs)] [else (failure)])) fileout) (newline fileout) @@ -161,7 +208,21 @@ (regexp-match #rx#"^[.]#" name)))))) (define pack-collections - (opt-lambda (output name collections replace? extra-setup-collections [file-filter std-filter] [plt-home-relative? #f]) + (opt-lambda (output name collections replace? extra-setup-collections [file-filter std-filter] [at-plt-home? #f]) + (pack-collections-plt output name collections + #:replace? replace? + #:extra-setup-collections extra-setup-collections + #:filter file-filter + #:at-plt-home? at-plt-home?))) + + (define pack-collections-plt + (lambda/kw (output name collections + #:key + [replace? #f] + [extra-setup-collections null] + [file-filter std-filter] + [at-plt-home? #f] + [test-plt-collects? #t]) (let-values ([(dir source-files requires conflicts name) (let ([dirs (map (lambda (cp) (apply collection-path cp)) collections)]) ;; Figure out the base path: @@ -224,35 +285,39 @@ (lambda () (caar collections)))))))]) (let ([output (path->complete-path output)]) (parameterize ([current-directory dir]) - (pack output name - source-files - (append - extra-setup-collections - (filter get-info collections)) - file-filter #t - (if replace? - 'file-replace - 'file) - #f - #t ; plt-relative - ;; For each require, get current version - (map (lambda (r) - (let ([i (get-info r)]) - (let ([v (and i (i 'version (lambda () #f)))]) - (if v - (begin - (unless (and (list? v) - (andmap number? v) - (andmap exact? v) - (andmap integer? v)) - (error - 'mzc - "bad version specification in info.ss for collection ~s" - r)) - (list r v)) - (list r null))))) - (cons - '("mzscheme") - requires)) - conflicts - plt-home-relative?))))))) + (pack-plt + output name + source-files + #:collections (append + extra-setup-collections + (filter get-info collections)) + #:filter file-filter + #:file-mode (if replace? + 'file-replace + 'file) + #:plt-relative? #t + #:requires + ;; For each require, get current version + (map (lambda (r) + (let ([i (get-info r)]) + (let ([v (and i (i 'version (lambda () #f)))]) + (if v + (begin + (unless (and (list? v) + (andmap number? v) + (andmap exact? v) + (andmap integer? v)) + (error + 'mzc + "bad version specification in info.ss for collection ~s" + r)) + (list r v)) + (list r null))))) + (cons + '("mzscheme") + requires)) + #:conflicts conflicts + #:at-plt-home? at-plt-home? + #:test-plt-dirs (and at-plt-home? + test-plt-collects? + '("collects"))))))))) diff --git a/collects/setup/setup-unit.ss b/collects/setup/setup-unit.ss index e2cc361d1e..944838b731 100644 --- a/collects/setup/setup-unit.ss +++ b/collects/setup/setup-unit.ss @@ -39,7 +39,7 @@ (apply setup-fprintf (current-output-port) s args))) (setup-printf "Setup version is ~a" (version)) - (setup-printf "Main collection path is ~a" (find-main-collects-dir)) + (setup-printf "Main collection path is ~a" (find-collects-dir)) (setup-printf "Collection search path is ~a" (if (null? (current-library-collection-paths)) "empty!" "")) @@ -75,7 +75,7 @@ (specific-collections) (map (lambda (x) (unpack x - (build-path (find-main-collects-dir) 'up) + (build-path (find-collects-dir) 'up) (lambda (s) (setup-printf "~a" s)) (current-target-directory-getter) (force-unpacks) @@ -536,7 +536,7 @@ (setup-printf "~aInstalling ~a" (case part [(pre) "Pre-"] [(post) "Post-"] [else ""]) (cc-name cc)) - (let ([dir (build-path (find-main-collects-dir) 'up)]) + (let ([dir (build-path (find-collects-dir) 'up)]) (if (procedure-arity-includes? installer 2) (installer dir (cc-path cc)) (installer dir))))))))) diff --git a/collects/setup/unpack.ss b/collects/setup/unpack.ss index 1a53a4781a..a4d959fe04 100644 --- a/collects/setup/unpack.ss +++ b/collects/setup/unpack.ss @@ -6,7 +6,8 @@ (lib "file.ss") (lib "unit.ss") (lib "base64.ss" "net") - (lib "getinfo.ss" "setup")) + (lib "getinfo.ss" "setup") + "dirs.ss") ;; Returns a port and a kill thunk (define (port64gz->port p64gz) @@ -41,34 +42,58 @@ (path->string base) base))))) - (define (unmztar p filter main-collects-parent-dir print-status) + (define (shuffle-path parent-dir get-dir shuffle? v) + (if shuffle? + ;; Re-arrange for "collects', etc. + (cond + [(null? v) (values #f 'same)] + [else + (let ([dir + (cond + [(string=? (car v) "collects") + (get-dir find-collects-dir find-user-collects-dir)] + [(string=? (car v) "doc") + (get-dir find-doc-dir find-user-doc-dir)] + [(string=? (car v) "lib") + (get-dir find-lib-dir find-user-lib-dir)] + [(string=? (car v) "include") + (get-dir find-include-dir find-user-include-dir)] + [else #f])]) + (if dir + (if (null? (cdr v)) + (values dir 'same) + (values dir (apply build-path (cdr v)))) + (values parent-dir (apply build-path v))))]) + (values parent-dir + (if (null? v) + 'same + (apply build-path v))))) + + (define (unmztar p filter parent-dir get-dir shuffle? print-status) (define bufsize 4096) (define buffer (make-bytes bufsize)) (let loop () (let ([kind (read p)]) (unless (eof-object? kind) (case kind - [(dir) (let ([s (let ([v (read p)]) - (if (null? v) - 'same - (apply build-path v)))]) + [(dir) (let-values ([(target-dir s) (shuffle-path parent-dir get-dir shuffle? (read p))]) (unless (or (eq? s 'same) (relative-path? s)) (error "expected a directory name relative path string, got" s)) - (when (or (eq? s 'same) (filter 'dir s main-collects-parent-dir)) - (let ([d (build-path main-collects-parent-dir s)]) + (when (or (eq? s 'same) (filter 'dir s target-dir)) + (let ([d (build-path target-dir s)]) (unless (directory-exists? d) (print-status (format " making directory ~a" (pretty-name d))) (make-directory* d)))))] [(file file-replace) - (let ([s (apply build-path (read p))]) + (let-values ([(target-dir s) (shuffle-path parent-dir get-dir shuffle? (read p))]) (unless (relative-path? s) (error "expected a file name relative path string, got" s)) (let ([len (read p)]) (unless (and (number? len) (integer? len)) (error "expected a file name size, got" len)) - (let* ([write? (filter kind s main-collects-parent-dir)] - [path (build-path main-collects-parent-dir s)]) + (let* ([write? (filter kind s target-dir)] + [path (build-path target-dir s)]) (let ([out (and write? (if (file-exists? path) (if (eq? kind 'file) @@ -147,26 +172,51 @@ (lambda (n) (unless (eq? n 'mzscheme) (error "unpacker isn't mzscheme:" n))))] - [target-dir (let ([rel? (call-info info 'plt-relative? (lambda () #f) values)] - [not-user-rel? (call-info info 'plt-home-relative? (lambda () #f) values)]) - (if rel? - (if (and not-user-rel? - ;; Check for void because old unpacker didn't use - ;; the failure thunk. - (not (void? not-user-rel?))) - (get-target-plt-directory main-collects-parent-dir + [target-dir-info + (let ([rel? (call-info info 'plt-relative? (lambda () #f) values)] + [not-user-rel? (call-info info 'plt-home-relative? (lambda () #f) values)] + [test-dirs (call-info info 'test-plt-dirs (lambda () #f) values)]) + (if rel? + ;; Shuffling... + (if (and not-user-rel? + ;; Check for void because old unpacker didn't use + ;; the failure thunk. + (not (void? not-user-rel?)) + ;; Non-user optional if test-dirs are writable + (or (not test-dirs) + (andmap (lambda (p) + (and (string? p) + (let ([dir (let-values ([(base dir) + (shuffle-path main-collects-parent-dir + (lambda (a b) (a)) + #t (list p))]) + (build-path base dir))]) + (memq 'write + (with-handlers ([exn:fail:filesystem? (lambda (x) null)]) + (file-or-directory-permissions dir)))))) + test-dirs))) + ;; Shuffle to main directory always: + (let ([dir (get-target-plt-directory main-collects-parent-dir main-collects-parent-dir - (list main-collects-parent-dir)) - (let ([addons (build-path (find-system-path 'addon-dir) - (version))]) - (get-target-plt-directory + (list main-collects-parent-dir))]) + (list dir (lambda (sys user) + (let ([a (sys)]) + (get-target-plt-directory a a (list a)))))) + ;; Prefer to shuffle to user directory: + (let ([addons (find-user-collects-dir)]) + (let ([dir (get-target-plt-directory addons main-collects-parent-dir - (list addons main-collects-parent-dir)))) - (get-target-directory)))]) + (list addons main-collects-parent-dir))]) + (list dir (lambda (sys user) + (let ([a (sys)] + [b (user)]) + (get-target-plt-directory b a (list b a)))))))) + ;; No shuffling --- install to target directory: + (list (get-target-directory))))]) ;; Stop if no target directory: - (if target-dir + (if (car target-dir-info) ;; Check declared dependencies (none means v103) (begin @@ -252,10 +302,15 @@ (let ([u (eval (read p) n)]) (unless (eval `(unit? ,u) n) (error "expected a unit, got" u)) - (make-directory* target-dir) + (make-directory* (car target-dir-info)) (let ([unmztar (lambda (filter) - (unmztar p filter target-dir print-status))]) - (eval `(invoke-unit ,u ,target-dir ,unmztar) n)))) + (unmztar p filter + (car target-dir-info) + (lambda (a b) + ((cadr target-dir-info) a b)) + ((length target-dir-info) . > . 1) + print-status))]) + (eval `(invoke-unit ,u ,(car target-dir-info) ,unmztar) n)))) ;; Cancelled: no collections null)))) diff --git a/collects/setup/winvers.ss b/collects/setup/winvers.ss index 7c1a3a6958..cc4df2e2d0 100644 --- a/collects/setup/winvers.ss +++ b/collects/setup/winvers.ss @@ -22,7 +22,7 @@ (dynamic-require `(lib "winvers-change.ss" "setup") #f))) (define collects-dir - (path->string (find-main-collects-dir))) + (path->string (find-collects-dir))) (let ([argv (current-command-line-arguments)]) (cond diff --git a/collects/sgl/make-gl-info.ss b/collects/sgl/make-gl-info.ss index a516cd1bf1..a235453517 100644 --- a/collects/sgl/make-gl-info.ss +++ b/collects/sgl/make-gl-info.ss @@ -3,6 +3,7 @@ (all-except (lib "file.ss" "dynext") append-c-suffix) (prefix dynext: (lib "link.ss" "dynext")) (lib "file.ss") + (lib "dirs.ss" "setup") (lib "string.ss" "srfi" "13")) (provide make-gl-info) @@ -87,7 +88,7 @@ end-string (string-tokenize s))) (define (get-args which-arg home) - (let ((fp (build-path home "lib" "buildinfo"))) + (let ((fp (build-path (find-lib-dir) "buildinfo"))) (cond ((file-exists? fp) (call-with-input-file fp @@ -108,7 +109,7 @@ end-string file.c file.o `(,@(parse-includes (get-args "X_CFLAGS" home)) - ,(build-path home "collects" "compiler"))) + ,(collection-path "compiler"))) (dynext:link-extension #f (list file.o) file.so) (delete/continue file.o))) @@ -129,7 +130,7 @@ end-string (let ([t (system-type)]) (if (eq? t 'unix) ;; Check "buildinfo" for USE_GL flag: - (let ([buildinfo (build-path home "lib" "buildinfo")]) + (let ([buildinfo (build-path (find-lib-dir) "buildinfo")]) (if (file-exists? buildinfo) (with-input-from-file buildinfo (lambda () diff --git a/teachpack/htdc/Docs/draw.thtml b/collects/teachpack/htdc/Docs/draw.thtml similarity index 100% rename from teachpack/htdc/Docs/draw.thtml rename to collects/teachpack/htdc/Docs/draw.thtml diff --git a/teachpack/htdc/Docs/foot.tinc b/collects/teachpack/htdc/Docs/foot.tinc similarity index 100% rename from teachpack/htdc/Docs/foot.tinc rename to collects/teachpack/htdc/Docs/foot.tinc diff --git a/teachpack/htdc/Docs/head.tinc b/collects/teachpack/htdc/Docs/head.tinc similarity index 100% rename from teachpack/htdc/Docs/head.tinc rename to collects/teachpack/htdc/Docs/head.tinc diff --git a/teachpack/htdc/Docs/idraw.thtml b/collects/teachpack/htdc/Docs/idraw.thtml similarity index 100% rename from teachpack/htdc/Docs/idraw.thtml rename to collects/teachpack/htdc/Docs/idraw.thtml diff --git a/teachpack/htdc/Docs/index.thtml b/collects/teachpack/htdc/Docs/index.thtml similarity index 100% rename from teachpack/htdc/Docs/index.thtml rename to collects/teachpack/htdc/Docs/index.thtml diff --git a/teachpack/htdc/Docs/mkdocs b/collects/teachpack/htdc/Docs/mkdocs similarity index 100% rename from teachpack/htdc/Docs/mkdocs rename to collects/teachpack/htdc/Docs/mkdocs diff --git a/teachpack/htdc/draw.ss b/collects/teachpack/htdc/draw.ss similarity index 100% rename from teachpack/htdc/draw.ss rename to collects/teachpack/htdc/draw.ss diff --git a/teachpack/htdc/idraw.ss b/collects/teachpack/htdc/idraw.ss similarity index 100% rename from teachpack/htdc/idraw.ss rename to collects/teachpack/htdc/idraw.ss diff --git a/teachpack/htdp/Docs/arrow-gui.thtml b/collects/teachpack/htdp/Docs/arrow-gui.thtml similarity index 100% rename from teachpack/htdp/Docs/arrow-gui.thtml rename to collects/teachpack/htdp/Docs/arrow-gui.thtml diff --git a/teachpack/htdp/Docs/arrow.thtml b/collects/teachpack/htdp/Docs/arrow.thtml similarity index 100% rename from teachpack/htdp/Docs/arrow.thtml rename to collects/teachpack/htdp/Docs/arrow.thtml diff --git a/teachpack/htdp/Docs/convert.thtml b/collects/teachpack/htdp/Docs/convert.thtml similarity index 100% rename from teachpack/htdp/Docs/convert.thtml rename to collects/teachpack/htdp/Docs/convert.thtml diff --git a/teachpack/htdp/Docs/dir.thtml b/collects/teachpack/htdp/Docs/dir.thtml similarity index 100% rename from teachpack/htdp/Docs/dir.thtml rename to collects/teachpack/htdp/Docs/dir.thtml diff --git a/teachpack/htdp/Docs/docs.thtml b/collects/teachpack/htdp/Docs/docs.thtml similarity index 100% rename from teachpack/htdp/Docs/docs.thtml rename to collects/teachpack/htdp/Docs/docs.thtml diff --git a/teachpack/htdp/Docs/draw.thtml b/collects/teachpack/htdp/Docs/draw.thtml similarity index 100% rename from teachpack/htdp/Docs/draw.thtml rename to collects/teachpack/htdp/Docs/draw.thtml diff --git a/teachpack/htdp/Docs/elevator.thtml b/collects/teachpack/htdp/Docs/elevator.thtml similarity index 100% rename from teachpack/htdp/Docs/elevator.thtml rename to collects/teachpack/htdp/Docs/elevator.thtml diff --git a/teachpack/htdp/Docs/foot.tinc b/collects/teachpack/htdp/Docs/foot.tinc similarity index 100% rename from teachpack/htdp/Docs/foot.tinc rename to collects/teachpack/htdp/Docs/foot.tinc diff --git a/teachpack/htdp/Docs/graphing.thtml b/collects/teachpack/htdp/Docs/graphing.thtml similarity index 100% rename from teachpack/htdp/Docs/graphing.thtml rename to collects/teachpack/htdp/Docs/graphing.thtml diff --git a/teachpack/htdp/Docs/guess-gui.thtml b/collects/teachpack/htdp/Docs/guess-gui.thtml similarity index 100% rename from teachpack/htdp/Docs/guess-gui.thtml rename to collects/teachpack/htdp/Docs/guess-gui.thtml diff --git a/teachpack/htdp/Docs/guess.thtml b/collects/teachpack/htdp/Docs/guess.thtml similarity index 100% rename from teachpack/htdp/Docs/guess.thtml rename to collects/teachpack/htdp/Docs/guess.thtml diff --git a/teachpack/htdp/Docs/gui.thtml b/collects/teachpack/htdp/Docs/gui.thtml similarity index 100% rename from teachpack/htdp/Docs/gui.thtml rename to collects/teachpack/htdp/Docs/gui.thtml diff --git a/teachpack/htdp/Docs/hangman.thtml b/collects/teachpack/htdp/Docs/hangman.thtml similarity index 100% rename from teachpack/htdp/Docs/hangman.thtml rename to collects/teachpack/htdp/Docs/hangman.thtml diff --git a/teachpack/htdp/Docs/head.tinc b/collects/teachpack/htdp/Docs/head.tinc similarity index 100% rename from teachpack/htdp/Docs/head.tinc rename to collects/teachpack/htdp/Docs/head.tinc diff --git a/teachpack/htdp/Docs/image.thtml b/collects/teachpack/htdp/Docs/image.thtml similarity index 100% rename from teachpack/htdp/Docs/image.thtml rename to collects/teachpack/htdp/Docs/image.thtml diff --git a/teachpack/htdp/Docs/index.thtml b/collects/teachpack/htdp/Docs/index.thtml similarity index 100% rename from teachpack/htdp/Docs/index.thtml rename to collects/teachpack/htdp/Docs/index.thtml diff --git a/teachpack/htdp/Docs/lkup-gui.thtml b/collects/teachpack/htdp/Docs/lkup-gui.thtml similarity index 100% rename from teachpack/htdp/Docs/lkup-gui.thtml rename to collects/teachpack/htdp/Docs/lkup-gui.thtml diff --git a/teachpack/htdp/Docs/master.thtml b/collects/teachpack/htdp/Docs/master.thtml similarity index 100% rename from teachpack/htdp/Docs/master.thtml rename to collects/teachpack/htdp/Docs/master.thtml diff --git a/teachpack/htdp/Docs/mkdocs b/collects/teachpack/htdp/Docs/mkdocs similarity index 100% rename from teachpack/htdp/Docs/mkdocs rename to collects/teachpack/htdp/Docs/mkdocs diff --git a/teachpack/htdp/Docs/servlet.thtml b/collects/teachpack/htdp/Docs/servlet.thtml similarity index 100% rename from teachpack/htdp/Docs/servlet.thtml rename to collects/teachpack/htdp/Docs/servlet.thtml diff --git a/teachpack/htdp/Docs/servlet2.thtml b/collects/teachpack/htdp/Docs/servlet2.thtml similarity index 100% rename from teachpack/htdp/Docs/servlet2.thtml rename to collects/teachpack/htdp/Docs/servlet2.thtml diff --git a/teachpack/htdp/Docs/show-queen.thtml b/collects/teachpack/htdp/Docs/show-queen.thtml similarity index 100% rename from teachpack/htdp/Docs/show-queen.thtml rename to collects/teachpack/htdp/Docs/show-queen.thtml diff --git a/teachpack/htdp/Docs/world.thtml b/collects/teachpack/htdp/Docs/world.thtml similarity index 100% rename from teachpack/htdp/Docs/world.thtml rename to collects/teachpack/htdp/Docs/world.thtml diff --git a/teachpack/htdp/arrow-gui.ss b/collects/teachpack/htdp/arrow-gui.ss similarity index 100% rename from teachpack/htdp/arrow-gui.ss rename to collects/teachpack/htdp/arrow-gui.ss diff --git a/teachpack/htdp/arrow.ss b/collects/teachpack/htdp/arrow.ss similarity index 100% rename from teachpack/htdp/arrow.ss rename to collects/teachpack/htdp/arrow.ss diff --git a/teachpack/htdp/convert.ss b/collects/teachpack/htdp/convert.ss similarity index 100% rename from teachpack/htdp/convert.ss rename to collects/teachpack/htdp/convert.ss diff --git a/teachpack/htdp/dir.ss b/collects/teachpack/htdp/dir.ss similarity index 100% rename from teachpack/htdp/dir.ss rename to collects/teachpack/htdp/dir.ss diff --git a/teachpack/htdp/docs.ss b/collects/teachpack/htdp/docs.ss similarity index 100% rename from teachpack/htdp/docs.ss rename to collects/teachpack/htdp/docs.ss diff --git a/teachpack/htdp/draw.ss b/collects/teachpack/htdp/draw.ss similarity index 100% rename from teachpack/htdp/draw.ss rename to collects/teachpack/htdp/draw.ss diff --git a/teachpack/htdp/elevator.ss b/collects/teachpack/htdp/elevator.ss similarity index 100% rename from teachpack/htdp/elevator.ss rename to collects/teachpack/htdp/elevator.ss diff --git a/teachpack/htdp/graphing.ss b/collects/teachpack/htdp/graphing.ss similarity index 100% rename from teachpack/htdp/graphing.ss rename to collects/teachpack/htdp/graphing.ss diff --git a/teachpack/htdp/guess-gui.ss b/collects/teachpack/htdp/guess-gui.ss similarity index 100% rename from teachpack/htdp/guess-gui.ss rename to collects/teachpack/htdp/guess-gui.ss diff --git a/teachpack/htdp/guess.ss b/collects/teachpack/htdp/guess.ss similarity index 100% rename from teachpack/htdp/guess.ss rename to collects/teachpack/htdp/guess.ss diff --git a/teachpack/htdp/gui.ss b/collects/teachpack/htdp/gui.ss similarity index 100% rename from teachpack/htdp/gui.ss rename to collects/teachpack/htdp/gui.ss diff --git a/teachpack/htdp/hangman.ss b/collects/teachpack/htdp/hangman.ss similarity index 100% rename from teachpack/htdp/hangman.ss rename to collects/teachpack/htdp/hangman.ss diff --git a/teachpack/htdp/image.ss b/collects/teachpack/htdp/image.ss similarity index 100% rename from teachpack/htdp/image.ss rename to collects/teachpack/htdp/image.ss diff --git a/teachpack/htdp/lkup-gui.ss b/collects/teachpack/htdp/lkup-gui.ss similarity index 100% rename from teachpack/htdp/lkup-gui.ss rename to collects/teachpack/htdp/lkup-gui.ss diff --git a/teachpack/htdp/master.ss b/collects/teachpack/htdp/master.ss similarity index 100% rename from teachpack/htdp/master.ss rename to collects/teachpack/htdp/master.ss diff --git a/teachpack/htdp/servlet.ss b/collects/teachpack/htdp/servlet.ss similarity index 100% rename from teachpack/htdp/servlet.ss rename to collects/teachpack/htdp/servlet.ss diff --git a/teachpack/htdp/servlet2.ss b/collects/teachpack/htdp/servlet2.ss similarity index 100% rename from teachpack/htdp/servlet2.ss rename to collects/teachpack/htdp/servlet2.ss diff --git a/teachpack/htdp/show-queen.ss b/collects/teachpack/htdp/show-queen.ss similarity index 100% rename from teachpack/htdp/show-queen.ss rename to collects/teachpack/htdp/show-queen.ss diff --git a/teachpack/htdp/world.ss b/collects/teachpack/htdp/world.ss similarity index 100% rename from teachpack/htdp/world.ss rename to collects/teachpack/htdp/world.ss diff --git a/teachpack/turtles.ss b/collects/teachpack/turtles.ss similarity index 100% rename from teachpack/turtles.ss rename to collects/teachpack/turtles.ss diff --git a/teachpack/value-turtles.ss b/collects/teachpack/value-turtles.ss similarity index 100% rename from teachpack/value-turtles.ss rename to collects/teachpack/value-turtles.ss diff --git a/notes/COPYING-libscheme.txt b/doc/release-notes/COPYING-libscheme.txt similarity index 100% rename from notes/COPYING-libscheme.txt rename to doc/release-notes/COPYING-libscheme.txt diff --git a/notes/COPYING.LIB b/doc/release-notes/COPYING.LIB similarity index 100% rename from notes/COPYING.LIB rename to doc/release-notes/COPYING.LIB diff --git a/notes/drscheme/HISTORY b/doc/release-notes/drscheme/HISTORY similarity index 100% rename from notes/drscheme/HISTORY rename to doc/release-notes/drscheme/HISTORY diff --git a/notes/mred/HISTORY b/doc/release-notes/mred/HISTORY similarity index 100% rename from notes/mred/HISTORY rename to doc/release-notes/mred/HISTORY diff --git a/notes/mred/MrEd_100.txt b/doc/release-notes/mred/MrEd_100.txt similarity index 100% rename from notes/mred/MrEd_100.txt rename to doc/release-notes/mred/MrEd_100.txt diff --git a/notes/mred/MrEd_100_Framework.txt b/doc/release-notes/mred/MrEd_100_Framework.txt similarity index 100% rename from notes/mred/MrEd_100_Framework.txt rename to doc/release-notes/mred/MrEd_100_Framework.txt diff --git a/notes/mzscheme/HISTORY b/doc/release-notes/mzscheme/HISTORY similarity index 100% rename from notes/mzscheme/HISTORY rename to doc/release-notes/mzscheme/HISTORY diff --git a/notes/mzscheme/MzScheme_200.txt b/doc/release-notes/mzscheme/MzScheme_200.txt similarity index 100% rename from notes/mzscheme/MzScheme_200.txt rename to doc/release-notes/mzscheme/MzScheme_200.txt diff --git a/notes/mzscheme/MzScheme_300.txt b/doc/release-notes/mzscheme/MzScheme_300.txt similarity index 100% rename from notes/mzscheme/MzScheme_300.txt rename to doc/release-notes/mzscheme/MzScheme_300.txt diff --git a/notes/mzscheme/rename-super-fixup.ss b/doc/release-notes/mzscheme/rename-super-fixup.ss similarity index 100% rename from notes/mzscheme/rename-super-fixup.ss rename to doc/release-notes/mzscheme/rename-super-fixup.ss diff --git a/notes/stepper/DESIGN-NOTES b/doc/release-notes/stepper/DESIGN-NOTES similarity index 100% rename from notes/stepper/DESIGN-NOTES rename to doc/release-notes/stepper/DESIGN-NOTES diff --git a/notes/stepper/HISTORY b/doc/release-notes/stepper/HISTORY similarity index 100% rename from notes/stepper/HISTORY rename to doc/release-notes/stepper/HISTORY diff --git a/notes/teachpack/HISTORY b/doc/release-notes/teachpack/HISTORY similarity index 100% rename from notes/teachpack/HISTORY rename to doc/release-notes/teachpack/HISTORY diff --git a/src/Makefile.in b/src/Makefile.in index 5d16f9c828..c993c06787 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,6 +1,20 @@ # Builds MzScheme and MrEd +srcdir = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +libdir = @libdir@ +includepltdir = @includepltdir@ +libpltdir = @libpltdir@ +collectsdir = @collectsdir@ +mandir = @mandir@ +docdir = @docdir@ +builddir = @builddir@ + +ALLDIRINFO = "$(bindir)" "$(collectsdir)" "$(docdir)" "$(libdir)" "$(includepltdir)" "$(libpltdir)" "$(mandir)" + all: $(MAKE) mz $(MAKE) mred-stub @@ -23,6 +37,7 @@ install: $(MAKE) setup-plt install-normal: + mzscheme/mzscheme -mvqu "$(srcdir)/mkdirs.ss" $(ALLDIRINFO) if [ ! -d $(prefix) ] ; then mkdir $(prefix) ; fi $(MAKE) mzinstall $(MAKE) mredinstall-stub @@ -78,16 +93,11 @@ mrinstall: mrinstall3m: cd mred; $(MAKE) install-3m - lib-finish: - @LIBFINISH@ @prefix@/lib + @LIBFINISH@ "$(prefix)/lib" srcdir = @srcdir@ prefix = @prefix@ copytree: - cp -p -r $(srcdir)/../collects $(prefix)/. - cp -p -r $(srcdir)/../include $(prefix)/. - cp -p -r $(srcdir)/../notes $(prefix)/. - cp -p -r $(srcdir)/../man $(prefix)/. - if [ -d $(srcdir)/../teachpack ] ; then cp -r $(srcdir)/../teachpack $(prefix)/teachpack ; fi + mzscheme/mzscheme -mvqu "$(srcdir)/copytree.ss" "$(srcdir)" $(ALLDIRINFO) @INSTALL_ORIG_TREE@ diff --git a/src/README b/src/README index 56197b9420..ddad72986b 100644 --- a/src/README +++ b/src/README @@ -94,11 +94,12 @@ the Unix instructions below, but note the following: your shell and PATH setting). If the --prefix flag is omitted, the binaries are built for an - in-place installation (i.e., the plt directory containing this - README will be used directly). Unless --enable-shared is used, the - plt directory can be moved later; most system administrators - would recommend that you use --enable-shared, but the PLT Scheme - developers distribute binaries built without --enable-shared. + in-place installation (i.e., the parent of the directory + containing this README will be used directly). Unless + --enable-shared is used, the plt directory can be moved later; + most system administrators would recommend that you use + --enable-shared, but the PLT Scheme developers distribute binaries + built without --enable-shared. The `configure' script generates the makefiles for building MzScheme and/or MrEd. The current directory at the time @@ -164,6 +165,15 @@ the Unix instructions below, but note the following: --enabled-shared, beware that you may accumlate many old, unused versions of the dynamic libraries in plt/lib. + 4. [Optional] Run `help-desk' to install missing documentation. + + The source distribution (or Subversion-based source) includes only + the release notes, and not the rest of the core documentation. + Run the newly installed `help-desk' and follow the "Manuals" link + to install the rest of the documentation. For a Subversion-based + build, the "Manuals" page includes a link to update previously + installed documentation. + After an "in-place" install without Subversion, the plt/src directory is no longer needed, and it can be safely deleted. Build information is recorded in plt/lib/buildinfo. diff --git a/src/configure b/src/configure index 2fab856756..e6d17f17fd 100755 --- a/src/configure +++ b/src/configure @@ -314,7 +314,7 @@ ac_subdirs_all="$ac_subdirs_all foreign/gcc/libffi" ac_subdirs_all="$ac_subdirs_all llvm/llvm" ac_subdirs_all="$ac_subdirs_all wxcommon/jpeg" ac_subdirs_all="$ac_subdirs_all wxxt/src/x/wbuild" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP CXX CXXFLAGS ac_ct_CXX CXXCPP RANLIB ac_ct_RANLIB PERL X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS PREFLAGS COMPFLAGS PROFFLAGS SED AS AR STATIC_AR ARFLAGS WBUILD CC_FOR_BUILD REZ MZLINKER PLAIN_CC DYN_CFLAGS x_includes x_libraries OPTIONS MZOPTIONS CGCOPTIONS GC2OPTIONS MROPTIONS GCDIR MZBINTARGET MZINSTALLTARGET EXTRA_GMP_OBJ OSX NOT_OSX FRAMEWORK_INSTALL_DIR FRAMEWORK_REL_INSTALL MREDLINKER LIBSFX WXLIBS WXVARIANT ICP MRLIBINSTALL LIBFINISH MAKE_MRED MAKE_MRED3M MAKE_MREDINSTALL MAKE_MREDINSTALL3M MAKE_WBUILD MAKE_COPYTREE MAKE_FINISH WXPRECOMP USE_WXPRECOMP INCLUDEDEP WX_MMD_FLAG JPEG_A JPEG_INC ZLIB_A ZLIB_INC PNG_A OSKHOME EXTRA_OSK_LIBS FOREIGN_OBJSLIB_IF_USED FOREIGN_LIB_IF_USED FOREIGN_OBJSLIB FOREIGN_CONVENIENCE FOREIGNTARGET LIBMZSCHEME_DEP LIBMRED_DEP LLVMTARGET LTO LTA subdirs LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP CXX CXXFLAGS ac_ct_CXX CXXCPP RANLIB ac_ct_RANLIB PERL X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS PREFLAGS COMPFLAGS PROFFLAGS SED AS AR STATIC_AR ARFLAGS WBUILD CC_FOR_BUILD REZ MZLINKER PLAIN_CC DYN_CFLAGS x_includes x_libraries OPTIONS MZOPTIONS CGCOPTIONS GC2OPTIONS MROPTIONS GCDIR MZBINTARGET MZINSTALLTARGET EXTRA_GMP_OBJ OSX NOT_OSX FRAMEWORK_INSTALL_DIR FRAMEWORK_REL_INSTALL INSTALL_ORIG_TREE MREDLINKER LIBSFX WXLIBS WXVARIANT ICP MRLIBINSTALL LIBFINISH MAKE_MRED MAKE_MRED3M MAKE_MREDINSTALL MAKE_MREDINSTALL3M MAKE_WBUILD MAKE_COPYTREE MAKE_FINISH WXPRECOMP USE_WXPRECOMP INCLUDEDEP WX_MMD_FLAG JPEG_A JPEG_INC ZLIB_A ZLIB_INC PNG_A OSKHOME EXTRA_OSK_LIBS FOREIGN_OBJSLIB_IF_USED FOREIGN_LIB_IF_USED FOREIGN_OBJSLIB FOREIGN_CONVENIENCE FOREIGNTARGET LIBMZSCHEME_DEP LIBMRED_DEP LLVMTARGET LTO LTA collectsdir libpltdir includepltdir docdir COLLECTS_PATH subdirs LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -819,34 +819,26 @@ _ACEOF cat <<_ACEOF Installation directories: - --prefix=TARGETDIR install to TARGETDIR (usually ..../plt) + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --mandir=DIR man documentation [PREFIX/man] _ACEOF - - - - - - - - - - - - - - - - - - - - - - - - - cat <<\_ACEOF X features: @@ -871,6 +863,7 @@ Optional Features: --enable-libjpeg use libjpeg instead of building (enabled by default) --enable-shared create shared libraries --enable-dynlib same as --enable-shared + --enable-origtree install with original directory structure --enable-foreign compile foreign support (enabled by default) --enable-llvm compile llvm support (disabled by default) --enable-sgc use Senora GC instead of the Boehm GC @@ -1399,6 +1392,11 @@ fi; if test "${enable_dynlib+set}" = set; then enableval="$enable_dynlib" +fi; +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + fi; # Check whether --enable-foreign or --disable-foreign was given. @@ -5043,6 +5041,7 @@ if test "${enable_xonx}" = "yes" ; then else if test "$OS" = "Darwin" ; then enable_quartz=yes + enable_origtree=yes fi fi @@ -5056,31 +5055,66 @@ if test "${enable_perl}" = "" ; then fi fi -if test "${prefix}" = "NONE" ; then - prefix=`cd "${srcdir}/.." && pwd` -else - # Check whether ${prefix} is redundant, because - # $prefix/src is $srcdir. - here_inode=`(ls -i -l -d ${srcdir}/. | cut -d d -f 1) 2> /dev/null` - there_inode=`(ls -i -l -d ${prefix}/src | cut -d d -f 1) 2> /dev/null` - if test "${here_inode}" = "${there_inode}" ; then - echo "in-place install, --prefix specification is redundant" - else - echo "----> Installation will go to ${prefix}:" - echo "----> ${prefix}/collects/..." - echo "----> ${prefix}/bin/..." - echo "----> ${prefix}/lib/..." - echo "----> ${prefix}/include/..." - echo "----> ${prefix}/man/..." - echo "----> ${prefix}/notes/..." - MAKE_COPYTREE=copytree - fi -fi - if test "${enable_iconv}" = "" ; then enable_iconv=yes fi +############## Install targets ################ + +unixstyle=no +if test "${prefix}" != "NONE" ; then + if test "${enable_origtree}" != "yes" ; then + unixstyle=yes + fi +fi +if test "${exec_prefix}" != "NONE" ; then + unixstyle=yes +fi +if test "${bindir}" != '${exec_prefix}/bin' ; then + unixstyle=yes +fi +if test "${datadir}" != '${prefix}/share' ; then + unixstyle=yes +fi +if test "${libdir}" != '${exec_prefix}/lib' ; then + unixstyle=yes +fi +if test "${includedir}" != '${prefix}/include' ; then + unixstyle=yes +fi +if test "${mandir}" != '${prefix}/man' ; then + unixstyle=yes +fi + +if test "${unixstyle}" = "no" ; then + if test "${prefix}" = "NONE" ; then + inplacebuild=yes + prefix=`cd "${srcdir}/.." && pwd` + else + MAKE_COPYTREE=copytree + fi + bindir='${prefix}/bin' + libpltdir='${prefix}/lib' + collectsdir='${prefix}/collects' + includepltdir='${prefix}/include' + docdir='${prefix}/doc' + mandir='${prefix}/man' + COLLECTS_PATH="../collects" + INSTALL_ORIG_TREE=yes +else + if test "${prefix}" = "NONE" ; then + # Set prefix explicitly so we can use it during configure + prefix="${ac_default_prefix}" + fi + libpltdir="${libdir}/plt" + collectsdir="${libdir}/plt/collects" + includepltdir="${includedir}/plt" + docdir="${datadir}/plt/doc" + MAKE_COPYTREE=copytree + COLLECTS_PATH='${collectsdir}' + INSTALL_ORIG_TREE=no +fi + ###### Make sure MrEd is really there ###### if test "${enable_mred}" = "yes" ; then @@ -8561,12 +8595,6 @@ case $OS in X_LIBS="-L/usr/contrib/X11R6/lib/ $X_LIBS" ;; CYGWIN*) - # Old cygwin approach, to make it Windows-like instead of Unix-like: - # MZBINTARGET=cygwin-bin - # MZINSTALLTARGET=cygwin-install - # EXTRALIBS="$LIBS gmzwin.exp" - # MZOPTIONS="$MZOPTIONS -DGC_DLL" - # CGCOPTIONS="$CGCOPTIONS -DGC_DLL -DGC_BUILD -DUSE_MSVC_MD_LIBRARY -DMD_LIB_MAIN" MZINSTALLTARGET=unix-cygwin-install if test "${enable_shared}" = "yes" ; then ar_libtool_no_undefined=" -no-undefined" @@ -8634,7 +8662,7 @@ case $OS in FRAMEWORK_INSTALL_DIR=~/Library/Frameworks FRAMEWORK_REL_INSTALL=no else - FRAMEWORK_INSTALL_DIR='${LIBIDIR}' + FRAMEWORK_INSTALL_DIR='${libdir}' FRAMEWORK_REL_INSTALL=yes fi else @@ -11794,6 +11822,13 @@ LIBS="$LIBS $EXTRALIBS" + + + + + + + @@ -12636,6 +12671,7 @@ s,@OSX@,$OSX,;t t s,@NOT_OSX@,$NOT_OSX,;t t s,@FRAMEWORK_INSTALL_DIR@,$FRAMEWORK_INSTALL_DIR,;t t s,@FRAMEWORK_REL_INSTALL@,$FRAMEWORK_REL_INSTALL,;t t +s,@INSTALL_ORIG_TREE@,$INSTALL_ORIG_TREE,;t t s,@MREDLINKER@,$MREDLINKER,;t t s,@LIBSFX@,$LIBSFX,;t t s,@WXLIBS@,$WXLIBS,;t t @@ -12671,6 +12707,11 @@ s,@LIBMRED_DEP@,$LIBMRED_DEP,;t t s,@LLVMTARGET@,$LLVMTARGET,;t t s,@LTO@,$LTO,;t t s,@LTA@,$LTA,;t t +s,@collectsdir@,$collectsdir,;t t +s,@libpltdir@,$libpltdir,;t t +s,@includepltdir@,$includepltdir,;t t +s,@docdir@,$docdir,;t t +s,@COLLECTS_PATH@,$COLLECTS_PATH,;t t s,@subdirs@,$subdirs,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t @@ -13337,3 +13378,20 @@ echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} done fi + +if test "${inplacebuild}" = "yes" ; then + echo ">>> Installation is in-place" +else + echo ">>> Installation targets:" + echo " executables : ${bindir}/..." + echo " Scheme code : ${collectsdir}/..." + echo " core docs : ${docdir}/..." + echo " C libraries : ${libdir}/..." + echo " C headers : ${includepltdir}/..." + echo " extra C objs : ${libpltdir}/..." + echo " man pages : ${mandir}/..." + echo " where prefix = ${prefix}" + if test "${unixstyle}" = "yes" ; then + echo " and exec_prefix = ${exec_prefix}" + fi +fi diff --git a/src/copytree.ss b/src/copytree.ss new file mode 100644 index 0000000000..5aebe6cd1e --- /dev/null +++ b/src/copytree.ss @@ -0,0 +1,54 @@ + +(module copytree mzscheme + + (define-values (srcdir bindir collectsdir docdir libdir includepltdir libpltdir mandir origtree) + (apply + values + (vector->list (current-command-line-arguments)))) + + (define pltdir (build-path srcdir 'up)) + + (define (skip-name? n) + (let ([s (path->bytes n)]) + (or (regexp-match #rx#"^[.]svn$" s) + (regexp-match #rx#"^compiled$" s)))) + + (define (copytree src dest) + (for-each (lambda (n) + (unless (skip-name? n) + (let ([p (build-path src n)]) + (cond + [(file-exists? p) + (let ([q (build-path dest n)]) + (when (file-exists? q) + (delete-file q)) + (copy-file p q) + (let ([t (file-or-directory-modify-seconds p)]) + (file-or-directory-modify-seconds q t)))] + [(directory-exists? p) + (let ([q (build-path dest n)]) + (unless (directory-exists? q) + (make-directory q)) + (copytree p q))])))) + (directory-list src))) + + (define (copytree* src dest) + (printf "Copying ~a\n to ~a\n" src dest) + (copytree src dest)) + + (copytree* (build-path pltdir "collects") collectsdir) + (copytree* (build-path pltdir "doc") docdir) + (copytree* (build-path pltdir "man") mandir) + + (unless (equal? origtree "yes") + ;; Replace "config.ss" + (with-output-to-file (build-path collectsdir "config" "config.ss") + (lambda () + (printf "(module config (lib \"configtab.ss\" \"setup\")\n") + (printf " (define doc-dir ~s)\n" docdir) + (printf " (define lib-dir ~s)\n" libpltdir) + (printf " (define include-dir ~s)\n" includepltdir) + (printf " (define bin-dir ~s))\n" bindir)) + 'truncate/replace)) + + ) diff --git a/src/mkdirs.ss b/src/mkdirs.ss new file mode 100644 index 0000000000..19e57aa5e5 --- /dev/null +++ b/src/mkdirs.ss @@ -0,0 +1,14 @@ + +(module mkdirs mzscheme + + (define dirs (vector->list (current-command-line-arguments))) + + (define (make-directory* dir) + (unless (directory-exists? dir) + (let-values ([(base name dir?) (split-path dir)]) + (when (path? base) + (make-directory* base)) + (printf "Making ~a\n" dir) + (make-directory dir)))) + + (for-each make-directory* dirs)) diff --git a/src/mred/Makefile.in b/src/mred/Makefile.in index 19477b7fff..00dace9bbc 100644 --- a/src/mred/Makefile.in +++ b/src/mred/Makefile.in @@ -1,6 +1,11 @@ srcdir = @srcdir@ prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +libdir = @libdir@ +libpltdir = @libpltdir@ +collectsdir = @collectsdir@ builddir = @builddir@ # for version.mak: @@ -231,17 +236,16 @@ install-no-lib: echo "no dynamic libs" install-lib: - cd ..; $(ICP) mred/libmred.@LIBSFX@ `(cd $(prefix); pwd)`/lib/ + cd ..; $(ICP) mred/libmred.@LIBSFX@ "$(libdir)" install_wx_xt: - cd ..; if [ ! -d $(prefix)/bin ] ; then mkdir $(prefix)/bin ; fi - cd ..; rm -f $(prefix)/bin/mred + cd ..; if [ ! -d "$(bindir)" ] ; then mkdir "$(bindir)" ; fi + cd ..; rm -f "$(bindir)/mred" $(MAKE) @MRLIBINSTALL@ - cd ..; $(ICP) mred/mred `(cd $(prefix); pwd)`/bin/ - $(MZSCHEME) -mvqu "$(srcdir)/../mzscheme/collects-path.ss" "$(prefix)/bin/mred" ../collects + cd ..; $(ICP) mred/mred "$(bindir)" + $(MZSCHEME) -mvqu "$(srcdir)/../mzscheme/collects-path.ss" "$(prefix)/bin/mred" @COLLECTS_PATH@ -LIBIDIR=$(prefix)/lib -BUILDINFO=$(LIBIDIR)/buildinfo +BUILDINFO=$(libpltdir)/buildinfo MRFWDIR = @FRAMEWORK_INSTALL_DIR@/PLT_MrEd.framework @@ -255,16 +259,16 @@ install_wx_mac: if [ ! -d $(MRFWDIR) ] ; then mkdir $(MRFWDIR) ; fi if [ ! -d $(MRFWDIR)/Versions ] ; then mkdir $(MRFWDIR)/Versions ; fi if [ ! -d $(MRFWDIR)/Versions/$(FWVERSION) ] ; then mkdir $(MRFWDIR)/Versions/$(FWVERSION) ; fi - cd ..; rm -rf $(prefix)/collects/launcher/Starter.app + cd ..; rm -rf $(collectsdir)/launcher/Starter.app cd ..; rm -rf $(prefix)/MrEd.app cd ..; $(ICP) -r mred/MrEd.app $(prefix)/. $(ICP) PLT_MrEd.framework/Versions/$(FWVERSION)/PLT_MrEd $(MRFWDIR)/Versions/$(FWVERSION)/PLT_MrEd $(ICP) -r PLT_MrEd.framework/Versions/$(FWVERSION)/Resources $(MRFWDIR)/Versions/$(FWVERSION)/Resources ln -s Versions/$(FWVERSION)/PLT_MrEd $(MRFWDIR)/ ln -s Versions/$(FWVERSION)/Resources $(MRFWDIR)/ - if [ ! -d $(prefix)/collects ] ; then mkdir $(prefix)/collects ; fi - if [ ! -d $(prefix)/collects/launcher ] ; then mkdir $(prefix)/collects/launcher ; fi - cd ..; $(ICP) -r mred/Starter.app $(prefix)/collects/launcher/. + if [ ! -d $(collectsdir) ] ; then mkdir $(collectsdir) ; fi + if [ ! -d $(collectsdir)/launcher ] ; then mkdir $(collectsdir)/launcher ; fi + cd ..; $(ICP) -r mred/Starter.app $(collectsdir)/launcher/. if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "@executable_path/../../../PLT_MrEd.framework/Versions/$(FWVERSION)/PLT_MrEd" "@executable_path/../../../lib/PLT_MrEd.framework/Versions/$(FWVERSION)/PLT_MrEd" "$(prefix)/MrEd.app/Contents/MacOS/MrEd" ; fi $(MZSCHEME) -mvqu "$(srcdir)/../mzscheme/collects-path.ss" "$(prefix)/MrEd.app/Contents/MacOS/MrEd" ../../../collects @@ -286,25 +290,25 @@ install-no-lib3m: echo "no dynamic libs" install-lib3m: - cd ..; $(ICP) mred/libmred3m.@LIBSFX@ `(cd $(prefix); pwd)`/lib/ + cd ..; $(ICP) mred/libmred3m.@LIBSFX@ "$(libdir)" install-3m_wx_xt: - cd ..; $(ICP) mred/mred3m $(prefix)/bin/ - $(MZSCHEME) -mvqu "$(srcdir)/../mzscheme/collects-path.ss" "$(prefix)/bin/mred3m" ../collects + cd ..; $(ICP) mred/mred3m "$(bindir)" + $(MZSCHEME) -mvqu "$(srcdir)/../mzscheme/collects-path.ss" "$(bindir)/mred3m" @COLLECTS_PATH@ $(MAKE) @MRLIBINSTALL@3m install-3m_wx_mac: rm -f $(MRFWDIR)/Versions/$(FWVERSION)_3m/PLT_MrEd rm -rf $(MRFWDIR)/Versions/$(FWVERSION)_3m/Resources if [ ! -d $(MRFWDIR)/Versions/$(FWVERSION)_3m ] ; then mkdir $(MRFWDIR)/Versions/$(FWVERSION)_3m ; fi - cd ..; rm -rf $(prefix)/collects/launcher/Starter3m.app + cd ..; rm -rf $(collectsdir)/launcher/Starter3m.app cd ..; rm -rf $(prefix)/MrEd3m.app cd ..; $(ICP) -r mred/MrEd3m.app $(prefix)/. $(ICP) PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd $(MRFWDIR)/Versions/$(FWVERSION)_3m/PLT_MrEd $(ICP) -r PLT_MrEd.framework/Versions/$(FWVERSION)_3m/Resources $(MRFWDIR)/Versions/$(FWVERSION)_3m/Resources - if [ ! -d $(prefix)/collects ] ; then mkdir $(prefix)/collects ; fi - if [ ! -d $(prefix)/collects/launcher ] ; then mkdir $(prefix)/collects/launcher ; fi - cd ..; $(ICP) -r mred/Starter3m.app $(prefix)/collects/launcher/. + if [ ! -d $(collectsdir) ] ; then mkdir $(collectsdir) ; fi + if [ ! -d $(collectsdir)/launcher ] ; then mkdir $(collectsdir)/launcher ; fi + cd ..; $(ICP) -r mred/Starter3m.app $(collectsdir)/launcher/. if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "@executable_path/../../../PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd" "@executable_path/../../../lib/PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd" "$(prefix)/MrEd3m.app/Contents/MacOS/MrEd3m" ; fi $(MZSCHEME) -mvqu "$(srcdir)/../mzscheme/collects-path.ss" "$(prefix)/MrEd3m.app/Contents/MacOS/MrEd3m" ../../../collects diff --git a/src/mzscheme/Makefile.in b/src/mzscheme/Makefile.in index 25ec86b5ab..644f341b9a 100644 --- a/src/mzscheme/Makefile.in +++ b/src/mzscheme/Makefile.in @@ -4,6 +4,12 @@ srcdir = @srcdir@ prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +libdir = @libdir@ +includepltdir = @includepltdir@ +libpltdir = @libpltdir@ +collectsdir = @collectsdir@ builddir = @builddir@ # for version.mak: @@ -200,7 +206,7 @@ mark: $(MAKE) $(srcdir)/src/mzmark.c headers: - ./mzscheme -qr $(srcdir)/mkincludes.ss $(srcdir)/../.. . $(srcdir) + ./mzscheme -qr $(srcdir)/mkincludes.ss "$(includepltdir)" . "$(srcdir)" $(MAKE) $(srcdir)/../../collects/mzscheme/lib/mzdyn.c # mzdyn.c, used for MacOS "library" @@ -228,7 +234,7 @@ zo: 3m: $(MAKE) bin cd gc2; $(MAKE) all - cd dynsrc; $(MAKE) LIBDIR='$(LIBDIR)' dynlib3m + cd dynsrc; $(MAKE) dynlib3m cd gc2; $(MAKE) ../mzscheme3m palmos: @@ -254,9 +260,7 @@ clean@OSX@: rm -rf PLT_MzScheme.framework $(MAKE) clean@NOT_OSX@ -LIBIDIR=`(cd $(prefix); pwd)`/lib -BINDIR=`(cd $(prefix); pwd)`/bin -BUILDINFO=$(LIBIDIR)/buildinfo +BUILDINFO="$(libpltdir)/buildinfo" ICP=@ICP@ install: @@ -264,25 +268,23 @@ install: $(MAKE) @MZINSTALLTARGET@ install-3m-basic: - cd ..; $(ICP) mzscheme/mzscheme3m $(prefix)/bin/mzscheme3m - cd ..; $(ICP) mzscheme/mzdyn3m.o $(prefix)/lib/mzdyn3m.o - ./mzscheme -mvqu "$(srcdir)/collects-path.ss" "$(prefix)/bin/mzscheme3m" ../collects + cd ..; $(ICP) mzscheme/mzscheme3m $(bindir)/mzscheme3m + cd ..; $(ICP) mzscheme/mzdyn3m.o $(libpltdir)/mzdyn3m.o + ./mzscheme -mvqu "$(srcdir)/collects-path.ss" "$(bindir)/mzscheme3m" @COLLECTS_PATH@ install-3m@NOT_OSX@: $(MAKE) install-3m-basic - cd ..; $(ICP) mzscheme/libmzscheme3m.@LIBSFX@ $(LIBIDIR)/libmzscheme3m.@LIBSFX@ + cd ..; $(ICP) mzscheme/libmzscheme3m.@LIBSFX@ "$(libdir)/libmzscheme3m.@LIBSFX@" # Prefix might be relative to srcdir, or it might be absolute, so we # have to go up and install things from there. unix-install: - cd ..; if [ ! -d $(prefix)/bin ] ; then mkdir $(prefix)/bin ; fi - cd ..; rm -f $(prefix)/bin/mzscheme - cd ..; if [ ! -d $(LIBIDIR) ] ; then mkdir $(LIBIDIR) ; fi - cd ..; $(ICP) mzscheme/libmzgc.@LIBSFX@ $(LIBIDIR)/libmzgc.@LIBSFX@ - cd ..; $(ICP) mzscheme/libmzscheme.@LIBSFX@ $(LIBIDIR)/libmzscheme.@LIBSFX@ - cd ..; $(ICP) mzscheme/mzscheme "$(BINDIR)/mzscheme" - ./mzscheme -mvqu "$(srcdir)/collects-path.ss" "$(BINDIR)/mzscheme" ../collects + cd ..; rm -f $(bindir)/mzscheme + cd ..; $(ICP) mzscheme/libmzgc.@LIBSFX@ "$(libdir)/libmzgc.@LIBSFX@" + cd ..; $(ICP) mzscheme/libmzscheme.@LIBSFX@ "$(libdir)/libmzscheme.@LIBSFX@" + cd ..; $(ICP) mzscheme/mzscheme "$(bindir)/mzscheme" + ./mzscheme -mvqu "$(srcdir)/collects-path.ss" "$(bindir)/mzscheme" @COLLECTS_PATH@ cd ..; echo 'CC=@CC@' > $(BUILDINFO) cd ..; echo 'CFLAGS=@CFLAGS@ @PREFLAGS@ @COMPFLAGS@' >> $(BUILDINFO) cd ..; echo 'OPTIONS=@OPTIONS@' >> $(BUILDINFO) @@ -292,7 +294,7 @@ unix-install: normal-install: $(MAKE) unix-install - cd ..; cp mzscheme/mzdyn.o $(LIBIDIR)/mzdyn.o + cd ..; cp mzscheme/mzdyn.o $(libpltdir)/mzdyn.o MZFWDIR = @FRAMEWORK_INSTALL_DIR@/PLT_MzScheme.framework @@ -307,7 +309,7 @@ osx-install: if [ ! -d $(MZFWDIR)/Versions/$(FWVERSION) ] ; then mkdir $(MZFWDIR)/Versions/$(FWVERSION) ; fi cp $(MZFW) $(MZFWDIR)/Versions/$(FWVERSION)/ ln -s Versions/$(FWVERSION)/PLT_MzScheme $(MZFWDIR)/ - if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "@executable_path/PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "@executable_path/../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "$(BINDIR)/mzscheme" ; fi + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "@executable_path/PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "@executable_path/../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "$(bindir)/mzscheme" ; fi MZFWMMM = PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme @@ -316,23 +318,7 @@ install-3m@OSX@: rm -f $(MZFWDIR)/Versions/$(FWVERSION)_3m/PLT_MzScheme if [ ! -d $(MZFWDIR)/Versions/$(FWVERSION)_3m ] ; then mkdir $(MZFWDIR)/Versions/$(FWVERSION)_3m ; fi cp $(MZFWMMM) $(MZFWDIR)/Versions/$(FWVERSION)_3m/ - if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "@executable_path/PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "@executable_path/../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "$(BINDIR)/mzscheme3m" ; fi - -WLIBIDIR=`(cd $(prefix); pwd)`/lib -WBUILDINFO=$(WLIBIDIR)/buildinfo - -# OBSOLTE: -cygwin-install: - cd ..; rm -f $(prefix)/mzscheme.exe - cd ..; cp mzscheme/mzscheme.exe $(prefix)/mzscheme.exe - cd ..; cp mzscheme/libmzschxxxxxxx.dll $(prefix)/libmzschxxxxxxx.dll - cd ..; cp mzscheme/libmzgcxxxxxxx.dll $(prefix)/libmzgcxxxxxxx.dll - cd dynsrc; $(MAKE) cygwin-install - cd ..; $(ICP) mzscheme/mzstart.exe `(cd $(prefix); pwd)`/collects/launcher/mzstart.exe - cd ..; if [ ! -d $(WLIBIDIR) ] ; then mkdir $(WLIBIDIR) ; fi - cd ..; echo 'CC=gcc' > $(WBUILDINFO) - cd ..; echo 'CFLAGS=@CFLAGS@ @OPTIONS@' >> $(WBUILDINFO) - cd ..; echo 'LIBS=@LIBS@' >> $(WBUILDINFO) + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "@executable_path/PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "@executable_path/../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "$(bindir)/mzscheme3m" ; fi unix-cygwin-install: $(MAKE) unix-install diff --git a/src/mzscheme/configure.ac b/src/mzscheme/configure.ac index 57ca2e0d93..143cd48cfd 100644 --- a/src/mzscheme/configure.ac +++ b/src/mzscheme/configure.ac @@ -35,6 +35,7 @@ AC_ARG_ENABLE(libjpeg, [ --enable-libjpeg use libjpeg instead of buildin AC_ARG_ENABLE(shared, [ --enable-shared create shared libraries]) AC_ARG_ENABLE(dynlib, [ --enable-dynlib same as --enable-shared]) +AC_ARG_ENABLE(shared, [ --enable-origtree install with original directory structure]) AC_ARG_ENABLE(foreign, [ --enable-foreign compile foreign support (enabled by default)], , enable_foreign=yes) AC_ARG_ENABLE(llvm, [ --enable-llvm compile llvm support (disabled by default)], , enable_llvm=no) @@ -108,6 +109,7 @@ if test "${enable_xonx}" = "yes" ; then else if test "$OS" = "Darwin" ; then enable_quartz=yes + enable_origtree=yes fi fi @@ -121,31 +123,66 @@ if test "${enable_perl}" = "" ; then fi fi -if test "${prefix}" = "NONE" ; then - prefix=`cd "${srcdir}/.." && pwd` -else - # Check whether ${prefix} is redundant, because - # $prefix/src is $srcdir. - here_inode=`(ls -i -l -d ${srcdir}/. | cut -d d -f 1) 2> /dev/null` - there_inode=`(ls -i -l -d ${prefix}/src | cut -d d -f 1) 2> /dev/null` - if test "${here_inode}" = "${there_inode}" ; then - echo "in-place install, --prefix specification is redundant" - else - echo "----> Installation will go to ${prefix}:" - echo "----> ${prefix}/collects/..." - echo "----> ${prefix}/bin/..." - echo "----> ${prefix}/lib/..." - echo "----> ${prefix}/include/..." - echo "----> ${prefix}/man/..." - echo "----> ${prefix}/notes/..." - MAKE_COPYTREE=copytree - fi -fi - if test "${enable_iconv}" = "" ; then enable_iconv=yes fi +############## Install targets ################ + +unixstyle=no +if test "${prefix}" != "NONE" ; then + if test "${enable_origtree}" != "yes" ; then + unixstyle=yes + fi +fi +if test "${exec_prefix}" != "NONE" ; then + unixstyle=yes +fi +if test "${bindir}" != '${exec_prefix}/bin' ; then + unixstyle=yes +fi +if test "${datadir}" != '${prefix}/share' ; then + unixstyle=yes +fi +if test "${libdir}" != '${exec_prefix}/lib' ; then + unixstyle=yes +fi +if test "${includedir}" != '${prefix}/include' ; then + unixstyle=yes +fi +if test "${mandir}" != '${prefix}/man' ; then + unixstyle=yes +fi + +if test "${unixstyle}" = "no" ; then + if test "${prefix}" = "NONE" ; then + inplacebuild=yes + prefix=`cd "${srcdir}/.." && pwd` + else + MAKE_COPYTREE=copytree + fi + bindir='${prefix}/bin' + libpltdir='${prefix}/lib' + collectsdir='${prefix}/collects' + includepltdir='${prefix}/include' + docdir='${prefix}/doc' + mandir='${prefix}/man' + COLLECTS_PATH="../collects" + INSTALL_ORIG_TREE=yes +else + if test "${prefix}" = "NONE" ; then + # Set prefix explicitly so we can use it during configure + prefix="${ac_default_prefix}" + fi + libpltdir="${libdir}/plt" + collectsdir="${libdir}/plt/collects" + includepltdir="${includedir}/plt" + docdir="${datadir}/plt/doc" + MAKE_COPYTREE=copytree + COLLECTS_PATH='${collectsdir}' + INSTALL_ORIG_TREE=no +fi + ###### Make sure MrEd is really there ###### if test "${enable_mred}" = "yes" ; then @@ -428,12 +465,6 @@ case $OS in X_LIBS="-L/usr/contrib/X11R6/lib/ $X_LIBS" ;; CYGWIN*) - # Old cygwin approach, to make it Windows-like instead of Unix-like: - # MZBINTARGET=cygwin-bin - # MZINSTALLTARGET=cygwin-install - # EXTRALIBS="$LIBS gmzwin.exp" - # MZOPTIONS="$MZOPTIONS -DGC_DLL" - # CGCOPTIONS="$CGCOPTIONS -DGC_DLL -DGC_BUILD -DUSE_MSVC_MD_LIBRARY -DMD_LIB_MAIN" MZINSTALLTARGET=unix-cygwin-install if test "${enable_shared}" = "yes" ; then ar_libtool_no_undefined=" -no-undefined" @@ -501,7 +532,7 @@ case $OS in FRAMEWORK_INSTALL_DIR=~/Library/Frameworks FRAMEWORK_REL_INSTALL=no else - FRAMEWORK_INSTALL_DIR='${LIBIDIR}' + FRAMEWORK_INSTALL_DIR='${libdir}' FRAMEWORK_REL_INSTALL=yes fi else @@ -1092,6 +1123,7 @@ AC_SUBST(OSX) AC_SUBST(NOT_OSX) AC_SUBST(FRAMEWORK_INSTALL_DIR) AC_SUBST(FRAMEWORK_REL_INSTALL) +AC_SUBST(INSTALL_ORIG_TREE) AC_SUBST(MREDLINKER) AC_SUBST(LIBSFX) @@ -1137,6 +1169,12 @@ AC_SUBST(LLVMTARGET) AC_SUBST(LTO) AC_SUBST(LTA) +AC_SUBST(collectsdir) +AC_SUBST(libpltdir) +AC_SUBST(includepltdir) +AC_SUBST(docdir) +AC_SUBST(COLLECTS_PATH) + mk_needed_dir() { if test ! -d "$1" ; then @@ -1228,3 +1266,20 @@ if test "${enable_wbuild}" = "yes" ; then fi AC_OUTPUT($makefiles) + +if test "${inplacebuild}" = "yes" ; then + echo ">>> Installation is in-place" +else + echo ">>> Installation targets:" + echo " executables : ${bindir}/..." + echo " Scheme code : ${collectsdir}/..." + echo " core docs : ${docdir}/..." + echo " C libraries : ${libdir}/..." + echo " C headers : ${includepltdir}/..." + echo " extra C objs : ${libpltdir}/..." + echo " man pages : ${mandir}/..." + echo " where prefix = ${prefix}" + if test "${unixstyle}" = "yes" ; then + echo " and exec_prefix = ${exec_prefix}" + fi +fi diff --git a/src/mzscheme/dynsrc/Makefile.in b/src/mzscheme/dynsrc/Makefile.in index bc1b467f82..f182b679e5 100644 --- a/src/mzscheme/dynsrc/Makefile.in +++ b/src/mzscheme/dynsrc/Makefile.in @@ -7,6 +7,8 @@ DYNLINK = mzc --ld srcdir = @srcdir@ prefix = @prefix@ +exec_prefix = @exec_prefix@ +libpltdir = @libpltdir@ builddir = @builddir@ MZSRC = $(srcdir)/../src @@ -41,7 +43,7 @@ MZDYNDEP = ../mzdyn.o $(srcdir)/../include/ext.exp $(srcdir)/../include/mzscheme dynexmpl.o: $(srcdir)/dynexmpl.c $(HEADERS) $(PLAIN_CC) $(CFLAGS) -c $(srcdir)/dynexmpl.c -o dynexmpl.o -ILIBDIR = $(prefix)/lib +ILIBDIR = $(libpltdir) # Prefix might be relative to srcdir, or it might be absolute, so we # have to go up and install things from there. diff --git a/src/mzscheme/make-configure b/src/mzscheme/make-configure index 6df7e45b6b..437995e2c2 100755 --- a/src/mzscheme/make-configure +++ b/src/mzscheme/make-configure @@ -18,28 +18,27 @@ exit 0 ;; get rid of them, so that `configure --help' produces ;; valid information. -(let loop ([skip #f]) +(define skip-rxs + (map (lambda (s) + (regexp (format "^ --~a=DIR" s))) + '(sbindir + libexecdir + sysconfdir + sharedstatedir + localstatedir + oldincludedir + infodir))) + +(let loop () (let ([l (read-line)]) (unless (eof-object? l) - (cond - [(regexp-match "^Installation directories:" l) - (printf "~a~n" l) - ;; start skipping lines, except --prefix: - (loop 1)] - [(and skip (regexp-match "^(_AC)?EOF$" l)) - ;; Done skipping. Output line, then add blank lines - ;; to keep the rest of the file in sync. - (printf "~a~n" l) - (let loop ([n skip]) - (unless (zero? n) - (newline) - (loop (sub1 n)))) - (loop #f)] - [(and skip (regexp-match "^ *--prefix=" l)) - (printf " --prefix=TARGETDIR install to TARGETDIR (usually ..../plt)~n") - (loop skip)] - [skip - (loop (add1 skip))] - [else - (printf "~a~n" l) - (loop skip)])))) + (if (ormap (lambda (rx) + (regexp-match rx l)) + skip-rxs) + ;; Skip + (loop) + ;; Copy + (begin + (printf "~a~n" l) + (loop)))))) + diff --git a/src/mzscheme/mkincludes.ss b/src/mzscheme/mkincludes.ss index 10f463bcb0..b70e37e2a1 100644 --- a/src/mzscheme/mkincludes.ss +++ b/src/mzscheme/mkincludes.ss @@ -11,7 +11,7 @@ (define (dir path) (parameterize ([current-directory path]) (current-directory ".") (current-directory))) - (values (build-path (dir (car args)) "include") + (values (dir (car args)) (dir (cadr args)) (if (null? (cddr args)) (build-path (dir (car args)) "src" "mzscheme") diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 9af0f15632..cff89a4a73 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,6,51,48,49,46,49,52,37,252,132,5,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,37,252,132,5,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,65,35,37,115,116, 120,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,16,30,3, 2,2,71,105,100,101,110,116,105,102,105,101,114,63,4,254,1,30,5,2,2, @@ -70,7 +70,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1425); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,80,252,70,10,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,80,252,70,10,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,71,35,37,113,113, 45,97,110,100,45,111,114,1,29,2,11,11,10,10,10,32,80,158,32,32,20, 98,158,16,1,30,3,2,2,69,113,113,45,97,112,112,101,110,100,4,254,1, @@ -199,7 +199,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2643); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,44,252,209,4,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,44,252,209,4,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,66,35,37,99,111, 110,100,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,0,16, 0,11,11,16,0,32,11,16,1,64,99,111,110,100,3,16,1,11,16,1,2, @@ -262,7 +262,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1246); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,24,252,36,4,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,24,252,36,4,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,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,32,80,158,32, 32,20,98,158,16,9,30,3,2,2,74,105,100,101,110,116,105,102,105,101,114, @@ -317,7 +317,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1073); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,27,252,223,3,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,27,252,223,3,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,71,35,37,100,115, 45,104,101,108,112,101,114,1,29,2,11,11,10,10,10,32,80,158,32,32,20, 98,158,16,6,30,3,2,2,1,20,108,105,115,116,45,62,105,109,109,117,116, @@ -368,7 +368,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1004); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,102,252,162,11,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,102,252,162,11,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,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,32,80,158, 32,32,20,98,158,16,0,16,0,11,11,16,0,32,11,16,6,64,119,104,101, @@ -514,7 +514,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2991); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,18,252,4,1,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,18,252,4,1,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,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,32,80,158, 32,32,20,98,158,16,0,16,0,11,11,16,0,32,11,16,10,63,97,110,100, @@ -531,7 +531,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 273); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,181,252,227,36,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,181,252,227,36,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,64,35,37,115,99, 1,29,2,11,11,10,10,10,48,80,158,32,32,20,98,158,16,37,30,3,2, 2,64,46,46,46,63,4,254,1,30,5,2,2,68,115,116,120,45,109,101,109, @@ -985,7 +985,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 9456); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,133,252,150,15,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,133,252,150,15,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,69,35,37,115,116, 120,99,97,115,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158, 16,1,30,3,2,2,1,20,101,108,108,105,112,115,105,115,45,99,111,117,110, @@ -1179,7 +1179,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 4003); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,65,252,188,6,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,65,252,188,6,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,68,35,37,115,116, 120,108,111,99,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16, 2,30,3,2,2,68,108,111,99,45,105,110,115,112,4,254,1,30,5,2,2, @@ -1194,10 +1194,10 @@ 35,196,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158,45,34,195,27, 248,80,158,46,35,196,28,248,80,158,46,36,193,248,80,158,46,37,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,202,200,201,199,198,27,20,15, +248,22,90,197,27,248,22,89,198,27,252,22,61,201,199,202,200,198,27,20,15, 159,40,32,38,250,22,209,20,15,159,43,33,38,250,22,209,20,15,159,46,34, -38,254,22,62,20,15,159,53,35,38,248,22,52,23,15,20,15,159,53,36,38, -248,22,87,23,15,248,22,78,23,15,248,22,90,23,15,248,22,89,23,15,20, +38,254,22,62,20,15,159,53,35,38,248,22,87,23,15,20,15,159,53,36,38, +248,22,52,23,15,248,22,90,23,15,248,22,78,23,15,248,22,89,23,15,20, 15,159,46,37,38,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121, 110,116,97,120,197,32,20,98,158,16,6,30,10,65,35,37,115,116,120,11,69, 115,116,120,45,112,97,105,114,63,12,11,30,13,2,11,67,99,111,110,115,47, @@ -1207,8 +1207,8 @@ 4,16,6,18,16,2,95,66,115,114,99,116,97,103,23,34,93,8,252,56,7, 95,9,8,252,56,7,69,35,37,115,116,120,99,97,115,101,24,18,100,64,100, 101,115,116,25,41,98,40,10,32,11,94,159,74,35,37,100,101,102,105,110,101, -45,101,116,45,97,108,26,9,11,159,2,24,9,11,16,10,2,6,2,2,2, -4,2,2,2,8,2,2,2,7,2,2,2,9,2,2,98,39,10,33,11,93, +45,101,116,45,97,108,26,9,11,159,2,24,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,33,11,93, 159,2,24,9,11,16,0,96,38,8,254,1,11,16,0,16,4,37,11,63,115, 116,120,27,3,1,7,101,110,118,50,54,49,51,28,16,12,36,11,3,1,4, 103,50,56,48,29,3,1,4,103,50,56,49,30,3,1,4,103,50,56,50,31, @@ -1224,9 +1224,9 @@ 40,32,193,249,80,158,41,33,248,80,158,42,34,195,27,248,80,158,43,35,196, 28,248,80,158,43,36,193,248,80,158,43,37,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,200,198,199,197,27,20,15,159,39,32,38,250,22,209,20,15,159,42,33,38, -250,22,209,20,15,159,45,34,38,254,22,62,20,15,159,52,35,38,248,22,52, -23,15,20,15,159,52,36,38,248,22,87,23,15,248,22,78,23,15,20,15,159, +61,199,200,198,197,27,20,15,159,39,32,38,250,22,209,20,15,159,42,33,38, +250,22,209,20,15,159,45,34,38,254,22,62,20,15,159,52,35,38,248,22,78, +23,15,20,15,159,52,36,38,248,22,52,23,15,248,22,87,23,15,20,15,159, 52,37,38,248,22,88,23,15,20,15,159,45,38,38,195,250,22,252,39,2,11, 6,10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,98,158,16,6,2, 10,2,13,2,15,2,17,2,19,2,21,16,7,18,16,2,95,2,23,42,93, @@ -1265,7 +1265,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1737); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,87,252,121,8,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,87,252,135,8,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,70,35,37,119,105, 116,104,45,115,116,120,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98, 158,16,7,30,3,2,2,76,119,105,116,104,45,115,121,110,116,97,120,45,102, @@ -1284,95 +1284,96 @@ 193,249,80,158,40,33,248,80,158,41,34,195,27,248,80,158,42,35,196,28,248, 80,158,42,37,193,248,80,158,42,38,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,39,39,200,27,249,22, -61,198,197,27,20,15,159,41,33,44,250,22,209,20,15,159,44,34,44,250,22, -209,20,15,159,47,35,44,249,22,56,20,15,159,49,36,44,201,20,15,159,47, -37,44,195,27,28,248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34, -197,27,248,80,158,39,35,198,28,248,80,158,39,32,193,249,80,158,40,40,27, -248,80,158,42,34,196,28,248,80,158,42,37,193,248,22,8,89,162,32,33,39, -9,224,10,1,27,249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35, -41,28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248, -80,158,39,35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41, -34,195,248,80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38, -196,28,248,22,57,193,21,94,9,9,248,80,158,35,42,193,11,27,248,80,158, -42,35,196,28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195, -27,248,80,158,45,35,196,28,248,80,158,45,37,193,248,80,158,45,38,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,43,38,44,250, -22,209,20,15,159,46,39,44,200,195,87,94,251,80,158,45,43,201,206,27,20, -15,159,46,40,44,250,22,209,20,15,159,49,41,44,204,195,9,27,249,22,2, -89,162,32,33,34,9,222,248,22,48,65,119,115,116,109,112,19,195,27,249,22, -2,89,162,32,33,36,9,222,250,22,209,195,64,104,101,114,101,20,195,196,27, -248,22,216,27,20,15,159,46,42,44,250,22,209,20,15,159,49,43,44,204,195, -250,22,209,20,15,159,47,44,44,250,22,59,63,108,101,116,21,251,22,2,89, -162,32,35,42,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,22,249,22,59,72,113,117, -111,116,101,45,115,121,110,116,97,120,23,200,199,204,203,205,249,91,159,33,11, -20,12,95,33,192,89,162,32,34,57,64,108,111,111,112,24,226,21,13,14,0, -28,248,22,57,197,27,249,22,61,196,197,27,20,15,159,37,45,44,250,22,209, -20,15,159,40,46,44,250,22,209,20,15,159,43,47,44,249,22,56,20,15,159, -45,48,44,201,20,15,159,43,49,44,195,26,8,22,59,73,115,121,110,116,97, -120,45,99,97,115,101,42,42,25,11,10,248,22,52,205,9,79,109,111,100,117, -108,101,45,105,100,101,110,116,105,102,105,101,114,61,63,26,249,22,59,248,22, -52,23,16,249,204,248,22,53,23,17,248,22,53,23,18,249,22,59,65,95,101, -108,115,101,27,249,22,59,2,4,249,22,59,2,23,250,22,209,11,248,22,208, -248,22,52,23,24,248,22,52,23,23,202,200,23,16,250,22,252,39,2,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,98,158,16,12,30,28, -2,12,69,115,116,120,45,112,97,105,114,63,29,11,30,30,2,12,67,99,111, -110,115,47,35,102,31,1,30,32,2,12,67,115,116,120,45,99,97,114,33,5, -30,34,2,12,67,115,116,120,45,99,100,114,35,6,30,36,2,12,71,115,116, -120,45,110,117,108,108,47,35,102,37,9,30,38,2,12,2,13,8,30,39,2, -12,2,15,4,30,40,68,35,37,115,116,120,108,111,99,41,68,114,101,108,111, -99,97,116,101,42,1,30,43,2,12,69,97,112,112,101,110,100,47,35,102,44, -0,30,45,2,12,73,115,116,120,45,99,104,101,99,107,47,101,115,99,46,7, -30,47,2,12,70,115,116,120,45,114,111,116,97,116,101,48,12,30,49,64,35, -37,115,99,50,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115,51,0, -16,18,18,98,2,20,38,98,36,10,32,11,96,159,69,35,37,115,116,120,99, -97,115,101,52,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109, -101,53,9,11,159,2,41,9,11,159,2,12,9,11,16,10,2,4,2,2,2, -6,2,2,2,18,2,2,2,10,2,2,2,8,2,2,98,35,10,33,11,97, -159,66,35,37,99,111,110,100,54,9,11,159,71,35,37,113,113,45,97,110,100, -45,111,114,55,9,11,159,2,50,9,11,159,2,41,9,11,159,2,52,9,11, -16,0,96,34,8,254,1,11,16,0,16,4,33,11,61,120,56,3,1,7,101, -110,118,50,54,54,53,57,18,16,2,95,66,115,114,99,116,97,103,58,39,93, -8,252,107,7,95,9,8,252,107,7,2,52,18,100,64,100,101,115,116,59,42, -36,35,34,33,16,8,41,11,3,1,4,103,50,57,55,60,3,1,4,103,50, -57,56,61,3,1,4,103,50,57,57,62,3,1,7,101,110,118,50,54,55,50, -63,2,63,2,63,16,8,40,11,61,95,64,62,101,49,65,62,101,50,66,3, -1,7,101,110,118,50,54,55,51,67,2,67,2,67,18,158,63,99,116,120,68, -42,18,158,2,0,42,18,158,2,68,42,18,16,2,95,2,58,43,93,8,252, -109,7,95,9,8,252,109,7,2,52,18,100,2,59,46,36,35,34,33,16,12, -45,11,3,1,4,103,50,57,50,69,3,1,4,103,50,57,51,70,3,1,4, -103,50,57,52,71,3,1,4,103,50,57,53,72,3,1,4,103,50,57,54,73, -3,1,7,101,110,118,50,54,56,57,74,2,74,2,74,2,74,2,74,16,12, -44,11,2,64,63,111,117,116,75,62,105,110,76,2,65,2,66,3,1,7,101, -110,118,50,54,57,48,77,2,77,2,77,2,77,2,77,18,16,2,95,2,58, -47,93,8,252,125,7,95,9,8,252,125,7,2,52,18,101,2,59,49,36,35, -34,33,45,44,16,4,48,11,63,105,110,115,78,3,1,7,101,110,118,50,54, -57,54,79,18,16,2,95,2,58,50,93,8,252,126,7,95,9,8,252,126,7, -2,52,18,158,2,59,49,18,102,2,20,52,36,35,34,33,45,44,48,16,8, -51,11,64,116,109,112,115,80,65,104,101,114,101,115,81,64,111,117,116,115,82, -3,1,7,101,110,118,50,54,57,57,83,2,83,2,83,18,16,2,95,2,58, -53,93,8,252,131,7,95,9,8,252,131,7,2,52,18,103,2,59,55,36,35, -34,33,45,44,48,51,16,4,54,11,2,24,3,1,7,101,110,118,50,55,48, -52,84,18,158,2,68,55,18,158,2,0,55,18,158,2,68,55,11,96,83,159, -32,93,80,159,32,32,33,89,162,32,33,36,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,195,83,159,32,93,80,159,32,33,34,32,83,159,32,93,80,159,32, -34,33,89,162,32,33,38,2,8,223,0,87,94,83,160,34,11,80,159,32,33, -34,248,22,170,80,159,33,33,34,248,22,42,250,22,252,184,1,6,4,4,126, -97,126,115,197,80,159,36,33,34,83,159,32,93,80,159,32,35,33,89,162,32, -33,37,2,10,223,0,87,94,28,248,80,158,33,36,194,12,250,22,252,40,2, -2,10,6,11,11,115,121,110,116,97,120,32,112,97,105,114,196,27,248,80,158, -34,37,195,249,22,2,89,162,32,33,39,9,223,3,248,247,22,252,86,3,28, -248,22,41,195,249,22,209,11,248,80,159,36,34,34,197,28,248,22,252,136,1, -195,249,22,209,11,248,80,159,36,34,34,197,28,248,80,158,34,38,195,249,22, -209,11,248,80,159,36,34,34,248,22,210,198,249,22,209,11,248,80,159,36,34, -34,64,116,101,109,112,85,194,97,68,35,37,107,101,114,110,101,108,86,2,12, -2,41,2,53,2,52,98,2,86,2,52,2,41,2,50,2,55,2,54,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2182); +61,197,198,27,20,15,159,41,33,44,250,22,209,20,15,159,44,34,44,250,22, +209,20,15,159,47,35,44,250,22,62,20,15,159,50,36,44,248,22,53,203,248, +22,52,203,20,15,159,47,37,44,195,27,28,248,80,158,36,32,195,249,80,158, +37,33,248,80,158,38,34,197,27,248,80,158,39,35,198,28,248,80,158,39,32, +193,249,80,158,40,40,27,248,80,158,42,34,196,28,248,80,158,42,37,193,248, +22,8,89,162,32,33,39,9,224,10,1,27,249,22,2,89,162,32,33,45,9, +224,4,5,249,80,158,35,41,28,248,80,158,36,32,197,249,80,158,37,33,248, +80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158,39,32,193,249,80, +158,40,33,248,80,158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11, +11,194,248,80,158,37,38,196,28,248,22,57,193,21,94,9,9,248,80,158,35, +42,193,11,27,248,80,158,42,35,196,28,248,80,158,42,32,193,249,80,158,43, +33,248,80,158,44,34,195,27,248,80,158,45,35,196,28,248,80,158,45,37,193, +248,80,158,45,38,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,43,38,44,250,22,209,20,15,159,46,39,44,200,195,87,94,251,80, +158,45,43,201,206,27,20,15,159,46,40,44,250,22,209,20,15,159,49,41,44, +204,195,9,27,249,22,2,89,162,32,33,34,9,222,248,22,48,65,119,115,116, +109,112,19,195,27,249,22,2,89,162,32,33,36,9,222,250,22,209,195,64,104, +101,114,101,20,195,196,27,248,22,216,27,20,15,159,46,42,44,250,22,209,20, +15,159,49,43,44,204,195,250,22,209,20,15,159,47,44,44,250,22,59,63,108, +101,116,21,251,22,2,89,162,32,35,42,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, +22,249,22,59,72,113,117,111,116,101,45,115,121,110,116,97,120,23,200,199,204, +203,205,249,91,159,33,11,20,12,95,33,192,89,162,32,34,57,64,108,111,111, +112,24,226,21,13,14,0,28,248,22,57,197,27,249,22,61,197,196,27,20,15, +159,37,45,44,250,22,209,20,15,159,40,46,44,250,22,209,20,15,159,43,47, +44,250,22,62,20,15,159,46,48,44,248,22,53,203,248,22,52,203,20,15,159, +43,49,44,195,26,8,22,59,73,115,121,110,116,97,120,45,99,97,115,101,42, +42,25,11,10,248,22,52,205,9,79,109,111,100,117,108,101,45,105,100,101,110, +116,105,102,105,101,114,61,63,26,249,22,59,248,22,52,23,16,249,204,248,22, +53,23,17,248,22,53,23,18,249,22,59,65,95,101,108,115,101,27,249,22,59, +2,4,249,22,59,2,23,250,22,209,11,248,22,208,248,22,52,23,24,248,22, +52,23,23,202,200,23,16,250,22,252,39,2,11,6,10,10,98,97,100,32,115, +121,110,116,97,120,197,32,20,98,158,16,12,30,28,2,12,69,115,116,120,45, +112,97,105,114,63,29,11,30,30,2,12,67,99,111,110,115,47,35,102,31,1, +30,32,2,12,67,115,116,120,45,99,97,114,33,5,30,34,2,12,67,115,116, +120,45,99,100,114,35,6,30,36,2,12,71,115,116,120,45,110,117,108,108,47, +35,102,37,9,30,38,2,12,2,13,8,30,39,2,12,2,15,4,30,40,68, +35,37,115,116,120,108,111,99,41,68,114,101,108,111,99,97,116,101,42,1,30, +43,2,12,69,97,112,112,101,110,100,47,35,102,44,0,30,45,2,12,73,115, +116,120,45,99,104,101,99,107,47,101,115,99,46,7,30,47,2,12,70,115,116, +120,45,114,111,116,97,116,101,48,12,30,49,64,35,37,115,99,50,74,103,101, +116,45,109,97,116,99,104,45,118,97,114,115,51,0,16,18,18,98,2,20,38, +98,36,10,32,11,96,159,69,35,37,115,116,120,99,97,115,101,52,9,11,159, +74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,53,9,11,159,2,41, +9,11,159,2,12,9,11,16,10,2,4,2,2,2,18,2,2,2,10,2,2, +2,6,2,2,2,8,2,2,98,35,10,33,11,97,159,66,35,37,99,111,110, +100,54,9,11,159,71,35,37,113,113,45,97,110,100,45,111,114,55,9,11,159, +2,50,9,11,159,2,41,9,11,159,2,52,9,11,16,0,96,34,8,254,1, +11,16,0,16,4,33,11,61,120,56,3,1,7,101,110,118,50,54,54,53,57, +18,16,2,95,66,115,114,99,116,97,103,58,39,93,8,252,107,7,95,9,8, +252,107,7,2,52,18,100,64,100,101,115,116,59,42,36,35,34,33,16,8,41, +11,3,1,4,103,50,57,55,60,3,1,4,103,50,57,56,61,3,1,4,103, +50,57,57,62,3,1,7,101,110,118,50,54,55,50,63,2,63,2,63,16,8, +40,11,61,95,64,62,101,49,65,62,101,50,66,3,1,7,101,110,118,50,54, +55,51,67,2,67,2,67,18,158,63,99,116,120,68,42,18,158,2,0,42,18, +158,2,68,42,18,16,2,95,2,58,43,93,8,252,109,7,95,9,8,252,109, +7,2,52,18,100,2,59,46,36,35,34,33,16,12,45,11,3,1,4,103,50, +57,50,69,3,1,4,103,50,57,51,70,3,1,4,103,50,57,52,71,3,1, +4,103,50,57,53,72,3,1,4,103,50,57,54,73,3,1,7,101,110,118,50, +54,56,57,74,2,74,2,74,2,74,2,74,16,12,44,11,2,64,63,111,117, +116,75,62,105,110,76,2,65,2,66,3,1,7,101,110,118,50,54,57,48,77, +2,77,2,77,2,77,2,77,18,16,2,95,2,58,47,93,8,252,125,7,95, +9,8,252,125,7,2,52,18,101,2,59,49,36,35,34,33,45,44,16,4,48, +11,63,105,110,115,78,3,1,7,101,110,118,50,54,57,54,79,18,16,2,95, +2,58,50,93,8,252,126,7,95,9,8,252,126,7,2,52,18,158,2,59,49, +18,102,2,20,52,36,35,34,33,45,44,48,16,8,51,11,64,116,109,112,115, +80,65,104,101,114,101,115,81,64,111,117,116,115,82,3,1,7,101,110,118,50, +54,57,57,83,2,83,2,83,18,16,2,95,2,58,53,93,8,252,131,7,95, +9,8,252,131,7,2,52,18,103,2,59,55,36,35,34,33,45,44,48,51,16, +4,54,11,2,24,3,1,7,101,110,118,50,55,48,52,84,18,158,2,68,55, +18,158,2,0,55,18,158,2,68,55,11,96,83,159,32,93,80,159,32,32,33, +89,162,32,33,36,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,195,83,159,32, +93,80,159,32,33,34,32,83,159,32,93,80,159,32,34,33,89,162,32,33,38, +2,8,223,0,87,94,83,160,34,11,80,159,32,33,34,248,22,170,80,159,33, +33,34,248,22,42,250,22,252,184,1,6,4,4,126,97,126,115,197,80,159,36, +33,34,83,159,32,93,80,159,32,35,33,89,162,32,33,37,2,10,223,0,87, +94,28,248,80,158,33,36,194,12,250,22,252,40,2,2,10,6,11,11,115,121, +110,116,97,120,32,112,97,105,114,196,27,248,80,158,34,37,195,249,22,2,89, +162,32,33,39,9,223,3,248,247,22,252,86,3,28,248,22,41,195,249,22,209, +11,248,80,159,36,34,34,197,28,248,22,252,136,1,195,249,22,209,11,248,80, +159,36,34,34,197,28,248,80,158,34,38,195,249,22,209,11,248,80,159,36,34, +34,248,22,210,198,249,22,209,11,248,80,159,36,34,34,64,116,101,109,112,85, +194,97,68,35,37,107,101,114,110,101,108,86,2,12,2,41,2,53,2,52,98, +2,86,2,52,2,41,2,50,2,55,2,54,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2196); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,188,252,5,31,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,188,252,5,31,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,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,32, 80,158,32,32,20,98,158,16,2,30,3,2,2,1,26,99,104,101,99,107,45, @@ -1380,25 +1381,25 @@ 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,32,11,16,23,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,64,119,104, -101,110,9,70,115,121,110,116,97,120,47,108,111,99,10,73,108,101,116,114,101, -99,45,115,121,110,116,97,120,11,66,117,110,108,101,115,115,12,72,108,101,116, -45,115,121,110,116,97,120,101,115,13,71,119,105,116,104,45,115,121,110,116,97, -120,14,66,115,121,110,116,97,120,15,72,115,121,110,116,97,120,45,114,117,108, -101,115,16,62,111,114,17,71,115,121,110,116,97,120,45,99,97,115,101,18,70, -108,101,116,45,115,121,110,116,97,120,19,74,45,100,101,102,105,110,101,45,115, -121,110,116,97,120,20,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101, -115,21,67,45,100,101,102,105,110,101,22,66,108,101,116,47,101,99,23,64,99, -111,110,100,24,70,113,117,97,115,105,113,117,111,116,101,25,73,100,101,102,105, -110,101,45,115,116,114,117,99,116,26,72,115,121,110,116,97,120,45,99,97,115, -101,42,27,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,28,63, +101,110,9,70,115,121,110,116,97,120,47,108,111,99,10,75,115,121,110,116,97, +120,45,105,100,45,114,117,108,101,115,11,62,111,114,12,66,117,110,108,101,115, +115,13,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,14,66,115, +121,110,116,97,120,15,73,108,101,116,114,101,99,45,115,121,110,116,97,120,16, +71,115,121,110,116,97,120,45,99,97,115,101,17,70,108,101,116,45,115,121,110, +116,97,120,18,72,115,121,110,116,97,120,45,99,97,115,101,42,19,74,45,100, +101,102,105,110,101,45,115,121,110,116,97,120,20,72,108,101,116,45,115,121,110, +116,97,120,101,115,21,67,45,100,101,102,105,110,101,22,66,108,101,116,47,101, +99,23,64,99,111,110,100,24,71,119,105,116,104,45,115,121,110,116,97,120,25, +73,100,101,102,105,110,101,45,115,116,114,117,99,116,26,72,115,121,110,116,97, +120,45,114,117,108,101,115,27,70,113,117,97,115,105,113,117,111,116,101,28,63, 97,110,100,29,16,23,11,70,35,37,119,105,116,104,45,115,116,120,30,74,35, 37,100,101,102,105,110,101,45,101,116,45,97,108,31,68,35,37,115,116,120,108, -111,99,32,11,2,31,11,2,30,69,35,37,115,116,120,99,97,115,101,33,11, -71,35,37,113,113,45,97,110,100,45,111,114,34,2,32,11,2,31,11,2,31, -2,31,66,35,37,99,111,110,100,35,2,34,2,31,2,32,11,2,34,16,23, +111,99,32,11,71,35,37,113,113,45,97,110,100,45,111,114,33,2,31,11,69, +35,37,115,116,120,99,97,115,101,34,11,2,32,11,2,32,2,31,11,2,31, +2,31,66,35,37,99,111,110,100,35,2,30,2,31,11,2,33,2,33,16,23, 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,34,55,98,16,5,93,2,28,89,162,32,33,50,9,223,0,27, +2,28,2,29,34,55,98,16,5,93,2,14,89,162,32,33,50,9,223,0,27, 249,22,209,20,15,159,35,32,44,196,27,28,248,80,158,35,32,194,249,80,158, 36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32, 193,249,80,158,39,36,27,248,80,158,41,34,196,28,248,80,158,41,37,193,248, @@ -1412,7 +1413,7 @@ 158,43,34,195,27,248,80,158,44,35,196,28,248,80,158,44,37,193,248,80,158, 44,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,90,197,27,248,22,89,198,249,80,158,41,42,202,27,251, -22,61,199,200,201,202,27,20,15,159,43,33,44,91,159,33,11,90,161,33,32, +22,61,202,200,201,199,27,20,15,159,43,33,44,91,159,33,11,90,161,33,32, 11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,13,2,3, 1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22, 252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162, @@ -1424,8 +1425,8 @@ 250,22,209,20,15,159,38,35,44,250,22,209,20,15,159,41,36,44,252,22,62, 20,15,159,46,37,44,250,22,2,89,162,33,33,41,9,223,17,250,22,209,20, 15,159,35,38,44,249,22,60,248,22,52,199,248,22,78,199,20,15,159,35,39, -44,248,22,88,23,16,248,22,87,23,16,20,15,159,46,40,44,248,22,78,205, -248,22,52,205,20,15,159,41,41,44,197,89,162,32,32,33,9,223,0,192,89, +44,248,22,52,23,16,248,22,87,23,16,20,15,159,46,40,44,248,22,78,205, +248,22,88,205,20,15,159,41,41,44,197,89,162,32,32,33,9,223,0,192,89, 162,32,32,34,9,223,3,248,22,252,184,2,208,250,22,252,39,2,11,6,10, 10,98,97,100,32,115,121,110,116,97,120,196,32,20,98,158,16,12,30,42,2, 6,69,115,116,120,45,112,97,105,114,63,43,11,30,44,2,6,67,99,111,110, @@ -1436,28 +1437,28 @@ 55,7,30,56,2,6,69,115,116,120,45,62,108,105,115,116,57,4,30,58,2, 6,71,115,116,120,45,110,117,108,108,47,35,102,59,9,30,60,2,6,70,115, 116,120,45,114,111,116,97,116,101,61,12,30,62,2,32,68,114,101,108,111,99, -97,116,101,63,1,30,64,2,33,1,20,101,108,108,105,112,115,105,115,45,99, +97,116,101,63,1,30,64,2,34,1,20,101,108,108,105,112,115,105,115,45,99, 111,117,110,116,45,101,114,114,111,114,65,0,16,10,18,98,64,104,101,114,101, -66,38,98,36,10,32,11,97,159,2,32,9,11,159,2,30,9,11,159,2,33, +66,38,98,36,10,32,11,97,159,2,32,9,11,159,2,30,9,11,159,2,34, 9,11,159,2,6,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101, -109,101,67,9,11,16,14,2,11,2,2,2,4,2,2,2,13,2,2,2,19, -2,2,2,16,2,2,2,21,2,2,2,28,2,2,98,35,10,33,11,97,159, -2,32,9,11,159,2,30,9,11,159,2,33,9,11,159,2,6,9,11,159,2, +109,101,67,9,11,16,14,2,11,2,2,2,4,2,2,2,14,2,2,2,16, +2,2,2,18,2,2,2,21,2,2,2,27,2,2,98,35,10,33,11,97,159, +2,32,9,11,159,2,30,9,11,159,2,34,9,11,159,2,6,9,11,159,2, 67,9,11,16,0,96,34,8,254,1,11,16,0,16,4,33,11,63,115,116,120, 68,3,1,7,101,110,118,50,55,49,56,69,18,16,2,95,66,115,114,99,116, -97,103,70,39,93,8,252,166,7,95,9,8,252,166,7,2,33,18,16,2,99, +97,103,70,39,93,8,252,166,7,95,9,8,252,166,7,2,34,18,16,2,99, 2,38,44,93,8,252,166,7,16,6,43,11,61,114,71,63,115,114,99,72,3, 1,7,101,110,118,50,55,51,57,73,2,73,16,4,42,11,64,101,120,110,104, 74,3,1,7,101,110,118,50,55,52,48,75,16,4,41,11,63,101,115,99,76, 3,1,7,101,110,118,50,55,52,49,77,16,4,40,11,63,101,120,110,78,3, -1,7,101,110,118,50,55,52,51,79,95,9,8,252,166,7,2,33,18,100,64, +1,7,101,110,118,50,55,52,51,79,95,9,8,252,166,7,2,34,18,100,64, 100,101,115,116,80,47,36,35,34,33,16,12,46,11,3,1,4,103,51,48,48, 81,3,1,4,103,51,48,49,82,3,1,4,103,51,48,50,83,3,1,4,103, 51,48,51,84,3,1,4,103,51,48,52,85,3,1,7,101,110,118,50,55,51, 49,86,2,86,2,86,2,86,2,86,16,12,45,11,61,95,87,2,37,2,39, 2,40,2,41,3,1,7,101,110,118,50,55,51,50,88,2,88,2,88,2,88, 2,88,18,158,63,99,116,120,89,47,18,158,2,36,47,18,158,2,89,47,18, -158,2,89,47,18,158,9,47,18,158,2,89,47,11,16,5,93,2,11,89,162, +158,2,89,47,18,158,9,47,18,158,2,89,47,11,16,5,93,2,16,89,162, 32,33,50,9,223,0,27,249,22,209,20,15,159,35,32,44,196,27,28,248,80, 158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35, 197,28,248,80,158,38,32,193,249,80,158,39,36,27,248,80,158,41,34,196,28, @@ -1470,7 +1471,7 @@ 41,32,193,249,80,158,42,33,248,80,158,43,34,195,27,248,80,158,44,35,196, 28,248,80,158,44,37,193,248,80,158,44,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,249,80,158,41,42,202,27,251,22,61,199,200,201,202,27,20,15,159,43, +89,198,249,80,158,41,42,202,27,251,22,61,202,200,201,199,27,20,15,159,43, 33,44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8, 89,162,32,33,40,9,226,13,2,3,1,250,22,31,89,162,32,32,36,9,225, 6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32, @@ -1481,18 +1482,18 @@ 20,15,159,41,36,44,252,22,62,20,15,159,46,37,44,250,22,2,89,162,33, 33,45,9,223,17,250,22,209,20,15,159,35,38,44,249,22,60,250,22,209,20, 15,159,40,39,44,248,22,60,248,22,52,203,20,15,159,40,40,44,248,22,78, -199,20,15,159,35,41,44,248,22,88,23,16,248,22,87,23,16,20,15,159,46, -42,44,248,22,78,205,248,22,52,205,20,15,159,41,43,44,197,89,162,32,32, +199,20,15,159,35,41,44,248,22,52,23,16,248,22,87,23,16,20,15,159,46, +42,44,248,22,78,205,248,22,88,205,20,15,159,41,43,44,197,89,162,32,32, 33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208,250,22, 252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,32,20,98, 158,16,12,2,42,2,44,2,46,2,48,2,50,2,52,2,54,2,58,2,56, 2,60,2,62,2,64,16,12,18,98,2,66,49,36,35,34,16,4,48,11,2, 68,3,1,7,101,110,118,50,55,53,50,90,18,16,2,95,2,70,50,93,8, -252,181,7,95,9,8,252,181,7,2,33,18,16,2,99,2,38,55,93,8,252, +252,181,7,95,9,8,252,181,7,2,34,18,16,2,99,2,38,55,93,8,252, 181,7,16,6,54,11,2,71,2,72,3,1,7,101,110,118,50,55,55,50,91, 2,91,16,4,53,11,2,74,3,1,7,101,110,118,50,55,55,51,92,16,4, 52,11,2,76,3,1,7,101,110,118,50,55,55,52,93,16,4,51,11,2,78, -3,1,7,101,110,118,50,55,55,54,94,95,9,8,252,181,7,2,33,18,100, +3,1,7,101,110,118,50,55,55,54,94,95,9,8,252,181,7,2,34,18,100, 2,80,58,36,35,34,48,16,12,57,11,3,1,4,103,51,48,53,95,3,1, 4,103,51,48,54,96,3,1,4,103,51,48,55,97,3,1,4,103,51,48,56, 98,3,1,4,103,51,48,57,99,3,1,7,101,110,118,50,55,54,52,100,2, @@ -1500,7 +1501,7 @@ 3,1,7,101,110,118,50,55,54,53,101,2,101,2,101,2,101,2,101,18,158, 2,89,58,18,158,2,36,58,18,158,2,89,58,18,158,2,89,58,18,158,2, 89,58,18,158,2,89,58,18,158,9,58,18,158,2,89,58,11,16,5,93,2, -13,89,162,32,33,52,9,223,0,27,249,22,209,20,15,159,35,32,47,196,27, +21,89,162,32,33,52,9,223,0,27,249,22,209,20,15,159,35,32,47,196,27, 28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80, 158,38,35,197,28,248,80,158,38,32,193,249,80,158,39,36,27,248,80,158,41, 34,196,28,248,80,158,41,37,193,248,22,8,89,162,32,33,39,9,224,9,1, @@ -1519,7 +1520,7 @@ 2,89,162,32,33,39,9,224,4,5,249,80,158,35,38,28,248,80,158,36,37, 197,248,22,59,248,80,158,37,39,198,11,194,248,80,158,37,39,196,28,248,22, 57,193,9,248,80,158,35,43,193,11,28,192,249,80,158,43,44,204,27,252,22, -61,205,203,204,200,202,27,20,15,159,45,36,47,91,159,33,11,90,161,33,32, +61,203,204,200,202,205,27,20,15,159,45,36,47,91,159,33,11,90,161,33,32, 11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,15,2,3, 1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22, 252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162, @@ -1532,7 +1533,7 @@ 32,32,58,9,225,6,5,4,27,250,22,209,20,15,159,38,38,47,250,22,209, 20,15,159,41,39,47,251,22,60,20,15,159,45,40,47,250,22,2,89,162,33, 33,41,9,223,16,250,22,209,20,15,159,35,41,47,249,22,60,248,22,52,199, -248,22,78,199,20,15,159,35,42,47,248,22,90,23,15,248,22,87,23,15,20, +248,22,78,199,20,15,159,35,42,47,248,22,87,23,15,248,22,78,23,15,20, 15,159,45,43,47,250,22,209,20,15,159,48,44,47,252,22,62,20,15,159,53, 45,47,250,22,2,89,162,33,33,47,9,223,24,250,22,209,20,15,159,35,46, 47,249,22,60,248,22,52,199,250,22,209,20,15,159,40,47,47,249,22,56,20, @@ -1540,8 +1541,8 @@ 159,35,49,47,249,22,60,20,15,159,37,50,47,250,22,209,20,15,159,40,51, 47,249,22,60,20,15,159,42,52,47,248,22,52,204,20,15,159,40,53,47,20, 15,159,35,54,47,248,22,78,206,20,15,159,40,55,47,20,15,159,35,56,47, -248,22,52,23,23,248,22,90,23,23,20,15,159,53,57,47,248,22,78,23,20, -248,22,89,23,20,20,15,159,48,58,47,20,15,159,41,59,47,197,89,162,32, +248,22,89,23,23,248,22,87,23,23,20,15,159,53,57,47,248,22,52,23,20, +248,22,90,23,20,20,15,159,48,58,47,20,15,159,41,59,47,197,89,162,32, 32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208,248, 80,158,42,46,20,15,159,42,8,28,47,250,22,252,39,2,11,6,10,10,98, 97,100,32,115,121,110,116,97,120,196,32,20,98,158,16,15,2,42,2,44,2, @@ -1555,13 +1556,13 @@ 49,52,116,3,1,7,101,110,118,50,55,57,56,117,2,117,2,117,2,117,2, 117,16,12,8,29,11,2,87,2,37,2,39,2,40,2,41,3,1,7,101,110, 118,50,55,57,57,118,2,118,2,118,2,118,2,118,18,16,2,95,2,70,8, -32,93,8,252,196,7,95,9,8,252,196,7,2,33,18,158,2,80,8,31,18, -16,2,95,2,70,8,33,93,8,252,202,7,95,9,8,252,202,7,2,33,18, +32,93,8,252,196,7,95,9,8,252,196,7,2,34,18,158,2,80,8,31,18, +16,2,95,2,70,8,33,93,8,252,202,7,95,9,8,252,202,7,2,34,18, 16,2,99,2,38,8,38,93,8,252,202,7,16,6,8,37,11,2,71,2,72, 3,1,7,101,110,118,50,56,49,56,119,2,119,16,4,8,36,11,2,74,3, 1,7,101,110,118,50,56,49,57,120,16,4,8,35,11,2,76,3,1,7,101, 110,118,50,56,50,48,121,16,4,8,34,11,2,78,3,1,7,101,110,118,50, -56,50,50,122,95,9,8,252,202,7,2,33,18,102,2,80,8,41,36,35,34, +56,50,50,122,95,9,8,252,202,7,2,34,18,102,2,80,8,41,36,35,34, 59,8,30,8,29,16,4,8,40,11,3,1,4,103,51,49,55,123,3,1,7, 101,110,118,50,56,49,52,124,16,4,8,39,11,2,102,3,1,7,101,110,118, 50,56,49,53,125,18,158,2,89,8,41,18,158,2,36,8,41,18,158,2,89, @@ -1576,7 +1577,7 @@ 54,128,3,1,7,101,110,118,50,56,51,53,129,16,4,8,42,11,65,95,101, 108,115,101,130,3,1,7,101,110,118,50,56,51,54,131,9,16,2,158,2,38, 8,45,9,8,45,9,16,2,158,2,38,8,45,9,8,45,95,9,8,252,195, -7,2,30,11,16,5,93,2,19,89,162,32,33,50,9,223,0,27,249,22,209, +7,2,30,11,16,5,93,2,18,89,162,32,33,50,9,223,0,27,249,22,209, 20,15,159,35,32,44,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248, 80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80, 158,39,36,27,248,80,158,41,34,196,28,248,80,158,41,37,193,248,22,8,89, @@ -1589,36 +1590,36 @@ 158,43,34,195,27,248,80,158,44,35,196,28,248,80,158,44,37,193,248,80,158, 44,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,249,80,158,41,42,202,27,251, -22,61,199,200,201,202,27,20,15,159,43,33,44,91,159,33,11,90,161,33,32, +22,61,202,200,201,199,27,20,15,159,43,33,44,91,159,33,11,90,161,33,32, 11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,13,2,3, 1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22, 252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162, 32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249, -80,158,35,43,21,97,2,13,94,94,93,2,37,2,39,2,38,2,40,2,41, +80,158,35,43,21,97,2,21,94,94,93,2,37,2,39,2,38,2,40,2,41, 2,38,20,15,159,35,34,44,89,162,32,32,50,9,225,6,5,4,27,250,22, 209,20,15,159,38,35,44,250,22,209,20,15,159,41,36,44,251,22,62,20,15, 159,45,37,44,250,22,2,89,162,33,33,45,9,223,16,250,22,209,20,15,159, 35,38,44,249,22,60,250,22,209,20,15,159,40,39,44,248,22,60,248,22,52, -203,20,15,159,40,40,44,248,22,78,199,20,15,159,35,41,44,248,22,88,23, -15,248,22,87,23,15,248,22,78,204,248,22,52,204,20,15,159,41,42,44,197, +203,20,15,159,40,40,44,248,22,78,199,20,15,159,35,41,44,248,22,52,23, +15,248,22,87,23,15,248,22,78,204,248,22,88,204,20,15,159,41,42,44,197, 89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184, 2,208,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120, 196,32,20,98,158,16,12,2,42,2,44,2,46,2,48,2,50,2,52,2,54, 2,58,2,56,2,60,2,62,2,64,16,11,18,98,2,66,8,47,36,35,34, 16,4,8,46,11,2,68,3,1,7,101,110,118,50,56,51,57,132,18,16,2, -95,2,70,8,48,93,8,252,218,7,95,9,8,252,218,7,2,33,18,16,2, +95,2,70,8,48,93,8,252,218,7,95,9,8,252,218,7,2,34,18,16,2, 99,2,38,8,53,93,8,252,218,7,16,6,8,52,11,2,71,2,72,3,1, 7,101,110,118,50,56,53,57,133,2,133,16,4,8,51,11,2,74,3,1,7, 101,110,118,50,56,54,48,134,16,4,8,50,11,2,76,3,1,7,101,110,118, 50,56,54,49,135,16,4,8,49,11,2,78,3,1,7,101,110,118,50,56,54, -51,136,95,9,8,252,218,7,2,33,18,100,2,80,8,56,36,35,34,8,46, +51,136,95,9,8,252,218,7,2,34,18,100,2,80,8,56,36,35,34,8,46, 16,12,8,55,11,3,1,4,103,51,49,56,137,3,1,4,103,51,49,57,138, 3,1,4,103,51,50,48,139,3,1,4,103,51,50,49,140,3,1,4,103,51, 50,50,141,3,1,7,101,110,118,50,56,53,49,142,2,142,2,142,2,142,2, 142,16,12,8,54,11,2,87,2,37,2,39,2,40,2,41,3,1,7,101,110, 118,50,56,53,50,143,2,143,2,143,2,143,2,143,18,158,2,89,8,56,18, -158,2,13,8,56,18,158,2,89,8,56,18,158,2,89,8,56,18,158,2,89, -8,56,18,158,2,89,8,56,18,158,2,89,8,56,11,16,5,93,2,16,89, +158,2,21,8,56,18,158,2,89,8,56,18,158,2,89,8,56,18,158,2,89, +8,56,18,158,2,89,8,56,18,158,2,89,8,56,11,16,5,93,2,27,89, 162,32,33,52,9,223,0,27,89,162,32,32,36,68,116,114,121,45,110,101,120, 116,144,223,2,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116, 97,120,195,27,28,248,80,158,35,32,196,249,80,158,36,33,248,80,158,37,34, @@ -1638,7 +1639,7 @@ 2,89,162,32,33,36,9,222,248,22,43,248,22,44,248,22,210,195,248,22,216, 27,20,15,159,46,35,46,250,22,209,20,15,159,49,36,46,204,195,27,28,248, 80,158,42,37,194,248,80,158,42,38,194,11,28,192,249,80,158,43,43,204,27, -252,22,61,206,200,205,202,203,27,20,15,159,45,37,46,91,159,33,11,90,161, +252,22,61,200,203,206,205,202,27,20,15,159,45,37,46,91,159,33,11,90,161, 33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,15, 2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10, 247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193, @@ -1651,18 +1652,18 @@ 159,35,38,46,89,162,32,32,8,28,9,225,6,5,4,27,250,22,209,20,15, 159,38,39,46,250,22,209,20,15,159,41,40,46,250,22,60,20,15,159,44,41, 46,20,15,159,44,42,46,250,22,209,20,15,159,47,43,46,254,22,62,20,15, -159,54,44,46,248,22,52,23,21,20,15,159,54,45,46,20,15,159,54,46,46, -248,22,87,23,21,20,15,159,54,47,46,251,22,2,89,162,33,33,49,9,223, +159,54,44,46,248,22,87,23,21,20,15,159,54,45,46,20,15,159,54,46,46, +248,22,90,23,21,20,15,159,54,47,46,251,22,2,89,162,33,33,49,9,223, 26,250,22,209,20,15,159,35,48,46,249,22,60,250,22,209,20,15,159,40,49, 46,249,22,56,248,22,52,204,248,22,78,204,20,15,159,40,50,46,250,22,209, 20,15,159,40,51,46,250,22,60,20,15,159,43,52,46,20,15,159,43,53,46, -248,22,87,205,20,15,159,40,54,46,20,15,159,35,55,46,248,22,78,23,25, -248,22,89,23,25,248,22,90,23,25,20,15,159,47,56,46,20,15,159,41,57, +248,22,87,205,20,15,159,40,54,46,20,15,159,35,55,46,248,22,52,23,25, +248,22,78,23,25,248,22,89,23,25,20,15,159,47,56,46,20,15,159,41,57, 46,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22, 252,184,2,208,248,80,158,42,45,20,15,159,42,58,46,247,198,247,193,32,20, 98,158,16,14,2,42,2,44,2,46,2,48,2,50,2,52,2,56,2,54,2, 58,2,107,30,153,2,6,2,7,2,2,62,2,64,2,109,16,27,18,16,2, -95,2,70,8,57,93,8,252,232,7,95,9,8,252,232,7,2,33,18,100,2, +95,2,70,8,57,93,8,252,232,7,95,9,8,252,232,7,2,34,18,100,2, 80,8,61,36,35,34,16,4,8,60,11,2,146,3,1,7,101,110,118,50,56, 55,50,154,16,12,8,59,11,3,1,4,103,51,50,51,155,3,1,4,103,51, 50,52,156,3,1,4,103,51,50,53,157,3,1,4,103,51,50,54,158,3,1, @@ -1670,13 +1671,13 @@ 2,160,2,160,16,12,8,58,11,2,87,2,148,67,107,101,121,119,111,114,100, 161,2,151,2,152,3,1,7,101,110,118,50,56,56,57,162,2,162,2,162,2, 162,2,162,18,158,2,66,8,61,18,16,2,95,2,70,8,62,93,8,252,234, -7,95,9,8,252,234,7,2,33,18,158,2,80,8,61,18,16,2,95,2,70, -8,63,93,8,252,237,7,95,9,8,252,237,7,2,33,18,16,2,99,2,38, +7,95,9,8,252,234,7,2,34,18,158,2,80,8,61,18,16,2,95,2,70, +8,63,93,8,252,237,7,95,9,8,252,237,7,2,34,18,16,2,99,2,38, 8,68,93,8,252,237,7,16,6,8,67,11,2,71,2,72,3,1,7,101,110, 118,50,57,48,54,163,2,163,16,4,8,66,11,2,74,3,1,7,101,110,118, 50,57,48,55,164,16,4,8,65,11,2,76,3,1,7,101,110,118,50,57,48, 56,165,16,4,8,64,11,2,78,3,1,7,101,110,118,50,57,49,48,166,95, -9,8,252,237,7,2,33,18,102,2,80,8,71,36,35,34,8,60,8,59,8, +9,8,252,237,7,2,34,18,102,2,80,8,71,36,35,34,8,60,8,59,8, 58,16,4,8,70,11,3,1,4,103,51,51,48,167,3,1,7,101,110,118,50, 57,48,50,168,16,4,8,69,11,2,150,3,1,7,101,110,118,50,57,48,51, 169,18,158,2,89,8,71,18,158,2,145,8,71,18,158,93,16,2,158,2,146, @@ -1689,7 +1690,7 @@ 56,170,3,1,7,101,110,118,50,56,57,54,171,16,4,8,73,11,3,1,4, 103,51,50,57,172,3,1,7,101,110,118,50,57,49,57,173,16,4,8,72,11, 2,130,3,1,7,101,110,118,50,57,50,48,174,9,16,2,158,2,38,8,75, -9,8,75,95,9,8,252,233,7,2,30,11,16,5,93,2,21,89,162,32,33, +9,8,75,95,9,8,252,233,7,2,30,11,16,5,93,2,11,89,162,32,33, 48,9,223,0,27,89,162,32,32,36,2,144,223,2,250,22,252,39,2,11,6, 10,10,98,97,100,32,115,121,110,116,97,120,195,27,28,248,80,158,35,32,196, 249,80,158,36,33,248,80,158,37,34,198,27,248,80,158,38,35,199,28,248,80, @@ -1703,7 +1704,7 @@ 9,248,80,158,35,41,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,40,42,248,22, 216,27,20,15,159,42,32,45,250,22,209,20,15,159,45,33,45,201,195,249,80, -158,40,43,201,27,251,22,61,202,199,201,200,27,20,15,159,42,34,45,91,159, +158,40,43,201,27,251,22,61,200,202,199,201,27,20,15,159,42,34,45,91,159, 33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33, 40,9,226,12,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90, 161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224, @@ -1715,28 +1716,28 @@ 5,4,27,250,22,209,20,15,159,38,36,45,250,22,209,20,15,159,41,37,45, 249,22,60,20,15,159,43,38,45,250,22,209,20,15,159,46,39,45,250,22,60, 20,15,159,49,40,45,20,15,159,49,41,45,250,22,209,20,15,159,52,42,45, -254,22,62,20,15,159,59,43,45,248,22,52,23,26,20,15,159,59,44,45,20, -15,159,59,45,45,248,22,87,23,26,20,15,159,59,46,45,250,22,2,89,162, +254,22,62,20,15,159,59,43,45,248,22,78,23,26,20,15,159,59,44,45,20, +15,159,59,45,45,248,22,88,23,26,20,15,159,59,46,45,250,22,2,89,162, 33,33,46,9,223,30,250,22,209,20,15,159,35,47,45,249,22,60,248,22,52, 199,250,22,209,20,15,159,40,48,45,250,22,60,20,15,159,43,49,45,20,15, 159,43,50,45,248,22,78,205,20,15,159,40,51,45,20,15,159,35,52,45,248, -22,88,23,29,248,22,78,23,29,20,15,159,52,53,45,20,15,159,46,54,45, +22,52,23,29,248,22,87,23,29,20,15,159,52,53,45,20,15,159,46,54,45, 20,15,159,41,55,45,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34, 9,223,3,248,22,252,184,2,208,247,197,247,193,32,20,98,158,16,13,2,42, 2,44,2,46,2,48,2,50,2,52,2,56,2,54,2,58,2,107,2,153,2, 62,2,64,16,24,18,16,2,95,2,70,8,76,93,8,252,251,7,95,9,8, -252,251,7,2,33,18,100,2,80,8,80,36,35,34,16,4,8,79,11,2,146, +252,251,7,2,34,18,100,2,80,8,80,36,35,34,16,4,8,79,11,2,146, 3,1,7,101,110,118,50,57,50,51,176,16,10,8,78,11,3,1,4,103,51, 51,49,177,3,1,4,103,51,51,50,178,3,1,4,103,51,51,51,179,3,1, 4,103,51,51,52,180,3,1,7,101,110,118,50,57,51,54,181,2,181,2,181, 2,181,16,10,8,77,11,2,87,2,148,2,151,2,152,3,1,7,101,110,118, 50,57,51,55,182,2,182,2,182,2,182,18,16,2,95,2,70,8,81,93,8, -252,253,7,95,9,8,252,253,7,2,33,18,16,2,99,2,38,8,86,93,8, +252,253,7,95,9,8,252,253,7,2,34,18,16,2,99,2,38,8,86,93,8, 252,253,7,16,6,8,85,11,2,71,2,72,3,1,7,101,110,118,50,57,52, 51,183,2,183,16,4,8,84,11,2,74,3,1,7,101,110,118,50,57,52,52, 184,16,4,8,83,11,2,76,3,1,7,101,110,118,50,57,52,53,185,16,4, 8,82,11,2,78,3,1,7,101,110,118,50,57,52,55,186,95,9,8,252,253, -7,2,33,18,158,2,80,8,80,18,158,2,89,8,80,18,158,2,175,8,80, +7,2,34,18,158,2,80,8,80,18,158,2,89,8,80,18,158,2,175,8,80, 18,158,2,89,8,80,18,158,2,145,8,80,18,158,93,16,2,158,2,146,8, 80,9,8,80,18,158,2,89,8,80,18,158,2,147,8,80,18,158,10,8,80, 18,158,2,146,8,80,18,158,2,149,8,80,18,158,2,89,8,80,18,158,2, @@ -1749,12 +1750,12 @@ 100,101,110,116,105,102,105,101,114,115,197,27,250,22,116,196,248,22,210,201,89, 97,40,32,32,9,222,87,94,28,249,22,5,89,162,32,33,36,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,187,2,67,2,6,2,33,2, -30,2,32,98,2,187,2,67,2,6,2,33,2,30,2,32,0}; +197,195,11,98,68,35,37,107,101,114,110,101,108,187,2,67,2,6,2,34,2, +30,2,32,98,2,187,2,67,2,6,2,34,2,30,2,32,0}; EVAL_ONE_SIZED_STR((char *)expr, 7954); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,102,252,138,12,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,102,252,138,12,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,67,35,37,113,113, 115,116,120,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,2, 30,3,2,2,79,99,104,101,99,107,45,115,112,108,105,99,105,110,103,45,108, @@ -1911,14 +1912,14 @@ EVAL_ONE_SIZED_STR((char *)expr, 3223); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,165,252,66,26,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,165,252,49,26,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,68,35,37,100,101, 102,105,110,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16, 0,16,0,11,11,16,0,32,11,16,4,77,100,101,102,105,110,101,45,102,111, -114,45,115,121,110,116,97,120,3,76,98,101,103,105,110,45,102,111,114,45,115, -121,110,116,97,120,4,73,100,101,102,105,110,101,45,115,121,110,116,97,120,5, +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,32,36,94,16,5,95,2,6,2,5,2,3,27,89,162,32,33,34, +5,2,6,32,36,94,16,5,95,2,6,2,4,2,3,27,89,162,32,33,34, 62,109,107,7,223,1,89,162,32,33,8,28,9,224,0,1,87,94,28,249,22, 71,247,22,252,82,3,21,93,70,101,120,112,114,101,115,115,105,111,110,8,250, 22,252,39,2,11,6,36,36,110,111,116,32,97,108,108,111,119,101,100,32,105, @@ -1936,306 +1937,305 @@ 27,28,248,80,158,38,32,194,249,80,158,39,33,248,80,158,40,34,196,27,248, 80,158,41,35,197,28,248,80,158,41,36,193,248,80,158,41,37,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, -43,34,45,250,22,209,20,15,159,46,35,45,199,195,89,162,32,33,51,9,225, +43,34,45,250,22,209,20,15,159,46,35,45,199,195,89,162,32,33,49,9,225, 9,8,2,27,249,22,209,20,15,159,37,36,45,198,249,80,158,37,38,196,27, -249,22,61,197,198,27,20,15,159,39,37,45,250,22,209,20,15,159,42,38,45, -250,22,209,20,15,159,45,39,45,250,22,62,20,15,159,48,40,45,248,22,53, -203,248,22,52,203,20,15,159,45,41,45,195,27,28,248,80,158,39,32,195,249, -80,158,40,33,248,80,158,41,34,197,27,248,80,158,42,35,198,91,159,35,11, -90,161,35,32,11,250,80,158,47,39,198,33,11,28,194,27,28,248,22,206,197, -196,201,249,80,158,47,40,28,248,80,158,48,36,196,248,22,59,248,80,158,49, -37,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,199,198,27,20, -15,159,46,42,45,250,22,209,20,15,159,49,43,45,249,22,65,248,22,52,199, -248,22,60,248,22,53,200,195,89,162,32,33,55,9,226,11,10,2,3,27,249, -22,209,20,15,159,38,44,45,199,249,80,158,38,38,197,27,250,22,61,198,199, -200,27,20,15,159,40,45,45,250,22,209,20,15,159,43,46,45,250,22,209,20, -15,159,46,47,45,250,22,62,20,15,159,49,48,45,249,22,65,248,22,78,205, -248,22,80,205,248,22,52,203,20,15,159,46,49,45,195,250,22,252,39,2,11, -6,10,10,98,97,100,32,115,121,110,116,97,120,197,87,95,249,22,3,89,162, -32,33,39,9,224,5,4,28,248,80,158,34,41,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,196,198,194,27,248,80,158,37,42,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,199,196,12,193,89,162,32,33,47,73,103,101, -110,101,114,97,108,45,112,114,111,116,111,11,226,11,9,1,0,27,249,22,209, -20,15,159,38,50,45,199,27,89,162,32,32,57,2,9,228,5,4,3,2,6, -1,27,28,248,80,158,39,32,194,249,80,158,40,40,27,248,80,158,42,34,197, -28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,27,248,80, -158,45,35,196,248,22,59,250,22,209,199,196,199,11,27,248,80,158,42,35,197, -250,22,209,199,195,199,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,80,196,91,159,34,11,90,161,34,32,11,248,202,27,249,22,61,199,200,27, -20,15,159,46,51,45,250,22,209,20,15,159,49,52,45,250,22,209,20,15,159, -52,53,45,249,22,56,248,22,53,202,248,22,52,202,20,15,159,52,54,45,195, -27,248,202,201,249,22,7,195,89,162,32,33,38,9,224,4,2,248,194,248,22, -59,248,195,197,27,28,248,80,158,40,32,195,249,80,158,41,33,248,80,158,42, -34,197,27,248,80,158,43,35,198,250,22,209,200,195,200,11,28,192,27,248,22, -52,194,27,248,22,53,195,251,22,252,39,2,11,6,82,82,98,97,100,32,115, -121,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,204,197,250,22,252,39,2, -11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,27,28,248,80,158,39, -32,195,249,80,158,40,33,248,80,158,41,34,197,27,248,80,158,42,35,198,250, -22,209,200,195,200,11,28,192,27,248,22,52,194,27,248,22,53,195,28,248,80, -158,41,41,194,249,22,7,195,248,200,204,247,195,247,193,87,95,28,248,80,158, -42,36,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, -202,28,248,80,158,42,43,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, -202,12,27,249,22,209,20,15,159,44,55,45,203,27,249,22,209,20,15,159,45, -56,45,196,27,249,22,209,20,15,159,46,57,45,248,199,200,249,80,158,46,38, -204,27,250,22,61,199,200,198,27,20,15,159,48,58,45,250,22,209,20,15,159, -51,59,45,250,22,209,20,15,159,54,8,28,45,250,22,60,248,22,78,203,250, -22,209,20,15,159,8,28,8,29,45,248,22,60,248,22,52,23,15,20,15,159, -8,28,8,30,45,248,22,80,203,20,15,159,54,8,31,45,195,250,22,252,39, -2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,27,28,248,80,158, -38,32,195,249,80,158,39,33,248,80,158,40,34,197,27,248,80,158,41,35,198, -28,248,80,158,41,32,193,27,28,248,22,206,194,193,198,249,80,158,43,33,248, -80,158,44,34,196,27,248,80,158,45,35,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,41, -32,194,247,196,251,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116, -97,120,202,197,247,193,27,28,248,80,158,38,32,195,249,80,158,39,33,248,80, -158,40,34,197,27,248,80,158,41,35,198,28,248,80,158,41,32,193,27,28,248, -22,206,194,193,198,249,80,158,43,33,248,80,158,44,34,196,27,248,80,158,45, -35,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,41,41,194,250,22,252,39,2,11,27,249, -22,209,20,15,159,46,8,32,45,204,27,28,248,80,158,46,32,194,249,80,158, -47,33,248,80,158,48,34,196,27,248,80,158,49,35,197,28,248,80,158,49,32, -193,249,80,158,50,33,248,80,158,51,34,195,27,248,80,158,52,35,196,28,248, -80,158,52,36,193,248,80,158,52,37,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, -27,28,248,80,158,47,32,195,249,80,158,48,33,248,80,158,49,34,197,27,248, -80,158,50,35,198,28,248,80,158,50,32,193,249,80,158,51,40,248,80,158,52, -34,195,248,80,158,52,44,248,80,158,53,35,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,27,28,248,80,158,48,32,196, -249,80,158,49,33,248,80,158,50,34,198,27,248,80,158,51,35,199,28,248,80, -158,51,32,193,27,28,248,22,206,194,193,199,249,80,158,53,33,248,80,158,54, -34,196,27,248,80,158,55,35,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,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110, -116,97,120,198,201,247,196,247,193,27,28,248,80,158,37,32,195,249,80,158,38, -33,248,80,158,39,34,197,27,248,80,158,40,35,198,28,248,80,158,40,32,193, -249,80,158,41,33,248,80,158,42,34,195,27,248,80,158,43,35,196,28,248,80, -158,43,32,193,249,80,158,44,40,248,80,158,45,34,195,248,80,158,45,44,248, -80,158,46,35,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,40,41,194,27,249,22,209,20,15,159,42,8,33, -45,201,249,80,158,42,38,203,27,250,22,61,198,199,200,27,20,15,159,44,8, -34,45,250,22,209,20,15,159,47,8,35,45,250,22,209,20,15,159,50,8,36, -45,250,22,60,248,22,52,203,250,22,209,20,15,159,56,8,37,45,248,22,60, -248,22,80,23,15,20,15,159,56,8,38,45,248,22,78,203,20,15,159,50,8, -39,45,195,247,196,247,193,250,22,7,248,196,20,15,159,37,8,40,45,248,196, -20,15,159,37,8,41,45,248,196,20,15,159,37,8,42,45,37,20,98,158,16, -13,30,12,65,35,37,115,116,120,13,69,115,116,120,45,112,97,105,114,63,14, -11,30,15,2,13,67,99,111,110,115,47,35,102,16,1,30,17,2,13,67,115, -116,120,45,99,97,114,18,5,30,19,2,13,67,115,116,120,45,99,100,114,20, -6,30,21,2,13,69,115,116,120,45,108,105,115,116,63,22,8,30,23,2,13, -69,115,116,120,45,62,108,105,115,116,24,4,30,25,68,35,37,115,116,120,108, -111,99,26,68,114,101,108,111,99,97,116,101,27,1,30,28,2,13,74,115,112, -108,105,116,45,115,116,120,45,108,105,115,116,29,3,30,30,2,13,69,97,112, -112,101,110,100,47,35,102,31,0,30,32,2,13,71,105,100,101,110,116,105,102, -105,101,114,63,33,2,30,34,76,35,37,115,116,120,99,97,115,101,45,115,99, -104,101,109,101,35,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,36,0,30,37,2,13,69,115,116, -120,45,110,117,108,108,63,38,10,30,39,2,13,71,115,116,120,45,110,117,108, -108,47,35,102,40,9,16,43,18,99,64,104,101,114,101,41,39,97,37,10,32, -11,16,8,2,3,2,2,2,4,2,2,2,5,2,2,2,6,2,2,98,36, -10,33,11,95,159,67,35,37,113,113,115,116,120,42,9,11,159,2,13,9,11, -159,2,35,9,11,16,0,96,35,8,254,1,11,16,0,16,4,34,11,77,100, -101,102,105,110,101,45,118,97,108,117,101,115,45,115,116,120,43,3,1,7,101, -110,118,51,48,56,55,44,16,4,33,11,63,115,116,120,45,3,1,7,101,110, -118,51,48,56,56,46,18,102,2,41,43,37,36,35,34,33,16,8,42,11,3, -1,4,103,51,53,49,47,3,1,4,103,51,53,50,48,3,1,4,103,51,53, -51,49,3,1,7,101,110,118,51,49,48,51,50,2,50,2,50,16,8,41,11, -61,95,51,65,112,114,111,116,111,52,64,98,111,100,121,53,3,1,7,101,110, -118,51,49,48,52,54,2,54,2,54,16,6,40,11,2,10,2,11,3,1,7, -101,110,118,51,49,48,57,55,2,55,18,16,2,95,66,115,114,99,116,97,103, -56,44,93,8,252,117,8,95,9,8,252,117,8,69,35,37,115,116,120,99,97, -115,101,57,18,104,64,100,101,115,116,58,47,37,36,35,34,33,42,41,40,16, -6,46,11,3,1,4,103,51,54,54,59,3,1,4,103,51,54,55,60,3,1, -7,101,110,118,51,49,49,54,61,2,61,16,6,45,11,62,105,100,62,63,97, -114,103,63,3,1,7,101,110,118,51,49,49,55,64,2,64,18,158,2,41,47, -18,16,2,95,2,56,48,93,8,252,123,8,95,9,8,252,123,8,2,57,18, -158,2,58,47,18,158,63,99,116,120,65,47,18,158,66,108,97,109,98,100,97, -66,47,18,158,2,65,47,18,16,2,95,2,56,49,93,8,252,124,8,95,9, -8,252,124,8,2,57,18,104,2,58,52,37,36,35,34,33,42,41,40,16,8, -51,11,3,1,4,103,51,54,51,67,3,1,4,103,51,54,52,68,3,1,4, -103,51,54,53,69,3,1,7,101,110,118,51,49,52,50,70,2,70,2,70,16, -8,50,11,2,62,2,63,64,114,101,115,116,71,3,1,7,101,110,118,51,49, -52,51,72,2,72,2,72,18,158,2,41,52,18,16,2,95,2,56,53,93,8, -252,130,8,95,9,8,252,130,8,2,57,18,158,2,58,52,18,158,2,65,52, -18,158,2,66,52,18,158,2,65,52,18,158,2,41,43,18,16,2,95,2,56, -54,93,8,252,142,8,95,9,8,252,142,8,2,57,18,104,2,58,58,37,36, -35,34,33,42,41,16,6,57,11,2,10,2,11,2,55,2,55,16,8,56,11, -3,1,4,103,51,55,54,73,3,1,4,103,51,55,55,74,3,1,4,103,51, -55,56,75,3,1,7,101,110,118,51,49,55,52,76,2,76,2,76,16,8,55, -11,69,115,111,109,101,116,104,105,110,103,77,64,109,111,114,101,78,2,71,3, -1,7,101,110,118,51,49,55,53,79,2,79,2,79,18,158,2,65,58,18,158, -2,65,58,18,102,2,41,8,28,37,36,35,34,33,42,41,16,6,59,11,2, -62,66,109,107,45,114,104,115,80,3,1,7,101,110,118,51,49,48,56,81,2, -81,18,158,2,41,8,28,18,158,2,41,8,28,18,16,2,95,2,56,8,29, -93,8,252,161,8,95,9,8,252,161,8,2,57,18,158,2,58,8,28,18,158, -2,65,8,28,18,158,2,65,8,28,18,158,2,65,8,28,18,158,2,65,8, -28,18,101,2,41,8,32,37,36,35,34,33,16,8,8,31,11,3,1,4,103, -51,53,55,82,3,1,4,103,51,53,56,83,3,1,4,103,51,53,57,84,3, -1,7,101,110,118,51,50,52,57,85,2,85,2,85,16,8,8,30,11,2,51, -2,62,2,71,3,1,7,101,110,118,51,50,53,48,86,2,86,2,86,18,101, -2,41,8,35,37,36,35,34,33,16,8,8,34,11,3,1,4,103,51,54,48, -87,3,1,4,103,51,54,49,88,3,1,4,103,51,54,50,89,3,1,7,101, -110,118,51,50,56,54,90,2,90,2,90,16,8,8,33,11,2,51,2,62,64, -101,120,112,114,91,3,1,7,101,110,118,51,50,56,55,92,2,92,2,92,18, -16,2,95,2,56,8,36,93,8,252,185,8,95,9,8,252,185,8,2,57,18, -158,2,58,8,35,18,158,2,65,8,35,18,158,2,65,8,35,18,158,2,65, -8,35,18,158,2,65,8,35,18,98,73,100,101,102,105,110,101,45,118,97,108, -117,101,115,93,8,38,37,36,35,16,4,8,37,11,2,7,3,1,7,101,110, -118,51,48,56,54,94,18,158,75,100,101,102,105,110,101,45,115,121,110,116,97, -120,101,115,95,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,96,8,38,11,16,5,93,2, -4,89,162,32,33,8,32,9,223,0,27,247,22,252,82,3,87,94,28,249,22, -71,194,21,95,66,109,111,100,117,108,101,97,72,109,111,100,117,108,101,45,98, -101,103,105,110,98,69,116,111,112,45,108,101,118,101,108,99,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,197,27,249,22,209,20,15, -159,36,32,42,197,27,28,248,80,158,36,32,194,249,80,158,37,33,248,80,158, -38,34,196,248,80,158,38,35,248,80,158,39,36,197,11,28,192,20,15,159,35, -33,42,27,89,162,32,32,51,2,9,225,4,5,2,27,28,248,80,158,36,32, -194,249,80,158,37,37,248,80,158,38,34,196,27,248,80,158,39,36,197,28,248, -80,158,39,38,193,248,80,158,39,39,193,11,11,28,192,27,248,22,52,194,27, -248,22,53,195,249,80,158,39,40,198,27,20,15,159,40,34,42,250,22,209,20, -15,159,43,35,42,250,22,209,20,15,159,46,36,42,249,22,56,20,15,159,48, -37,42,249,22,2,89,162,33,33,40,9,223,18,250,22,209,20,15,159,35,38, -42,249,22,60,20,15,159,37,39,42,248,22,52,199,20,15,159,35,40,42,205, -20,15,159,46,41,42,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115, -121,110,116,97,120,196,27,28,248,80,158,38,32,196,249,80,158,39,37,248,80, -158,40,34,198,27,248,80,158,41,36,199,28,248,80,158,41,32,193,249,80,158, -42,33,248,80,158,43,34,195,248,80,158,43,35,248,80,158,44,36,196,11,11, -28,192,27,248,22,52,194,27,248,22,53,195,28,249,22,252,11,2,200,2,98, -247,195,27,250,22,252,25,2,196,202,248,22,216,20,15,159,44,42,42,27,249, -22,209,20,15,159,43,43,42,195,27,28,248,80,158,43,32,194,28,27,248,80, -158,44,34,195,28,248,80,158,44,41,193,28,249,22,224,194,20,15,159,45,44, -42,9,11,11,27,248,80,158,44,36,195,28,248,80,158,44,38,193,248,80,158, -44,39,193,11,11,11,28,192,27,20,15,159,43,45,42,250,22,209,20,15,159, -46,46,42,250,22,209,20,15,159,49,47,42,249,22,56,20,15,159,51,48,42, -201,20,15,159,49,49,42,195,27,28,248,80,158,44,32,195,28,27,248,80,158, -45,34,196,28,248,80,158,45,41,193,28,249,22,224,194,20,15,159,46,50,42, -9,11,11,27,248,80,158,45,36,196,28,248,80,158,45,32,193,249,80,158,46, -33,27,248,80,158,48,34,196,28,248,80,158,48,38,193,248,22,59,248,80,158, -49,39,194,11,27,248,80,158,48,36,196,28,248,80,158,48,32,193,249,80,158, -49,33,248,80,158,50,34,195,248,80,158,50,35,248,80,158,51,36,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,47,51,42,250,22,209,20,15,159,50,52,42,250,22,209,20,15,159, -53,53,42,250,22,60,20,15,159,56,54,42,248,22,53,203,248,22,52,203,20, -15,159,53,55,42,195,27,28,248,80,158,45,32,196,28,27,248,80,158,46,34, -197,28,248,80,158,46,41,193,28,249,22,224,194,20,15,159,47,56,42,9,11, -11,27,248,80,158,46,36,197,28,248,80,158,46,38,193,248,80,158,46,39,193, -11,11,11,28,192,27,20,15,159,45,57,42,250,22,209,20,15,159,48,58,42, -250,22,209,20,15,159,51,59,42,249,22,56,20,15,159,53,8,28,42,201,20, -15,159,51,8,29,42,195,27,28,248,80,158,46,32,197,28,27,248,80,158,47, -34,198,28,248,80,158,47,41,193,28,249,22,224,194,20,15,159,48,8,30,42, -9,11,11,27,248,80,158,47,36,198,28,248,80,158,47,38,193,248,80,158,47, -39,193,11,11,11,28,192,27,20,15,159,46,8,31,42,250,22,209,20,15,159, -49,8,32,42,250,22,209,20,15,159,52,8,33,42,249,22,56,20,15,159,54, -8,34,42,201,20,15,159,52,8,35,42,195,27,28,248,80,158,47,32,198,28, -27,248,80,158,48,34,199,28,248,80,158,48,41,193,28,249,22,224,194,20,15, -159,49,8,36,42,9,11,11,27,248,80,158,48,36,199,28,248,80,158,48,32, -193,249,80,158,49,33,27,248,80,158,51,34,196,28,248,80,158,51,38,193,248, -22,59,248,80,158,52,39,194,11,27,248,80,158,51,36,196,28,248,80,158,51, -32,193,249,80,158,52,33,248,80,158,53,34,195,248,80,158,53,35,248,80,158, -54,36,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,204,27, -20,15,159,47,8,37,42,250,22,209,20,15,159,50,8,38,42,250,22,209,20, -15,159,53,8,39,42,250,22,60,20,15,159,56,8,40,42,20,15,159,56,8, -41,42,250,22,209,20,15,159,59,8,42,42,250,22,62,20,15,159,8,30,8, -43,42,23,21,20,15,159,8,30,8,44,42,20,15,159,59,8,45,42,20,15, -159,53,8,46,42,195,247,193,32,20,98,158,16,10,2,12,2,30,2,17,2, -39,2,19,2,15,2,21,2,23,2,25,2,32,16,47,18,99,2,41,8,41, -37,36,35,16,4,8,40,11,2,45,3,1,7,101,110,118,51,51,48,52,100, -16,4,8,39,11,2,65,3,1,7,101,110,118,51,51,48,53,101,18,158,93, -16,2,101,2,0,8,44,37,36,35,8,40,8,39,16,4,8,43,11,3,1, -4,103,52,48,53,102,3,1,7,101,110,118,51,51,49,48,103,16,4,8,42, -11,2,51,3,1,7,101,110,118,51,51,49,49,104,9,8,44,18,16,2,95, -2,56,8,45,93,8,252,199,8,95,9,8,252,199,8,2,57,18,101,2,58, -8,48,37,36,35,8,40,8,39,16,6,8,47,11,3,1,4,103,52,48,49, -105,3,1,4,103,52,48,50,106,3,1,7,101,110,118,51,51,49,57,107,2, -107,16,6,8,46,11,2,51,64,101,108,101,109,108,3,1,7,101,110,118,51, -51,50,48,109,2,109,18,158,2,65,8,48,18,158,2,0,8,48,18,158,2, -65,8,48,18,158,2,4,8,48,18,158,2,65,8,48,18,158,2,65,8,48, -18,158,110,16,2,101,2,0,8,51,37,36,35,8,40,8,39,16,6,8,50, -11,3,1,4,103,52,48,51,110,3,1,4,103,52,48,52,111,3,1,7,101, -110,118,51,51,51,48,112,2,112,16,6,8,49,11,2,51,2,108,3,1,7, -101,110,118,51,51,51,49,113,2,113,9,16,2,158,2,93,8,51,9,16,2, -158,2,95,8,51,9,16,2,158,2,96,8,51,9,16,2,158,64,115,101,116, -33,114,8,51,9,16,2,158,70,108,101,116,45,118,97,108,117,101,115,115,8, -51,9,16,2,158,71,108,101,116,42,45,118,97,108,117,101,115,116,8,51,9, -16,2,158,73,108,101,116,114,101,99,45,118,97,108,117,101,115,117,8,51,9, -16,2,158,2,66,8,51,9,16,2,158,71,99,97,115,101,45,108,97,109,98, -100,97,118,8,51,9,16,2,158,62,105,102,119,8,51,9,16,2,158,65,113, -117,111,116,101,120,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,121,8,51,9,16,2,158, -76,102,108,117,105,100,45,108,101,116,45,115,121,110,116,97,120,122,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,123,8,51,9,16,2,158,65,35,37,97,112,112,124,8, -51,9,16,2,158,65,35,37,116,111,112,125,8,51,9,16,2,158,67,35,37, -100,97,116,117,109,126,8,51,9,8,51,18,102,2,41,8,53,37,36,35,8, -40,8,39,8,50,8,49,16,4,8,52,11,61,101,127,3,1,7,101,110,118, -51,51,51,52,128,18,158,2,0,8,53,18,16,2,95,2,56,8,54,93,8, -252,214,8,95,9,8,252,214,8,2,57,18,104,2,58,8,57,37,36,35,8, -40,8,39,8,50,8,49,8,52,16,4,8,56,11,3,1,4,103,52,49,51, -129,3,1,7,101,110,118,51,51,52,48,130,16,4,8,55,11,61,118,131,3, -1,7,101,110,118,51,51,52,49,132,18,158,2,65,8,57,18,158,2,4,8, -57,18,158,2,65,8,57,18,158,2,93,8,53,18,16,2,95,2,56,8,58, -93,8,252,215,8,95,9,8,252,215,8,2,57,18,104,2,58,8,61,37,36, -35,8,40,8,39,8,50,8,49,8,52,16,6,8,60,11,3,1,4,103,52, -49,49,133,3,1,4,103,52,49,50,134,3,1,7,101,110,118,51,51,53,49, -135,2,135,16,6,8,59,11,2,62,2,91,3,1,7,101,110,118,51,51,53, -50,136,2,136,18,158,2,65,8,61,18,158,2,96,8,61,18,158,2,65,8, -61,18,158,67,114,101,113,117,105,114,101,137,8,53,18,16,2,95,2,56,8, -62,93,8,252,216,8,95,9,8,252,216,8,2,57,18,104,2,58,8,65,37, -36,35,8,40,8,39,8,50,8,49,8,52,16,4,8,64,11,3,1,4,103, -52,49,48,138,3,1,7,101,110,118,51,51,54,49,139,16,4,8,63,11,2, -131,3,1,7,101,110,118,51,51,54,50,140,18,158,2,65,8,65,18,158,78, -114,101,113,117,105,114,101,45,102,111,114,45,115,121,110,116,97,120,141,8,65, -18,158,2,65,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,142,8,53,18,16,2,95,2,56,8,66,93, -8,252,217,8,95,9,8,252,217,8,2,57,18,104,2,58,8,69,37,36,35, -8,40,8,39,8,50,8,49,8,52,16,4,8,68,11,3,1,4,103,52,48, -57,143,3,1,7,101,110,118,51,51,55,48,144,16,4,8,67,11,2,131,3, -1,7,101,110,118,51,51,55,49,145,18,158,2,65,8,69,18,158,2,137,8, -69,18,158,2,65,8,69,18,158,2,95,8,53,18,16,2,95,2,56,8,70, -93,8,252,219,8,95,9,8,252,219,8,2,57,18,104,2,58,8,73,37,36, -35,8,40,8,39,8,50,8,49,8,52,16,4,8,72,11,3,1,4,103,52, -48,54,146,3,1,7,101,110,118,51,51,56,54,147,16,4,8,71,11,65,111, -116,104,101,114,148,3,1,7,101,110,118,51,51,56,55,149,18,158,2,65,8, -73,18,158,2,96,8,73,18,158,9,8,73,18,158,2,65,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,150,8,73,9,8,73,9,8,81,98,8,80,10,32,11,94,159,74,35,37, -115,109,97,108,108,45,115,99,104,101,109,101,151,9,11,159,2,13,9,11,16, -6,66,115,121,110,116,97,120,152,29,153,11,11,73,115,121,110,116,97,120,45, -99,97,115,101,42,42,154,2,153,1,20,101,108,108,105,112,115,105,115,45,99, -111,117,110,116,45,101,114,114,111,114,155,2,153,98,8,79,10,33,11,95,159, -64,35,37,115,99,156,9,11,159,2,151,9,11,159,2,13,9,11,16,0,96, -8,78,8,254,1,11,16,0,16,4,8,77,11,61,120,157,3,1,6,101,110, -118,51,55,55,158,16,4,8,76,11,68,104,101,114,101,45,115,116,120,159,3, -1,6,101,110,118,51,55,57,160,16,4,8,75,11,2,159,2,160,13,16,3, -33,2,153,2,57,93,8,252,219,8,16,6,8,74,11,61,114,161,63,115,114, -99,162,3,1,7,101,110,118,51,51,57,48,163,2,163,95,9,8,252,219,8, -2,57,18,158,2,65,8,73,18,158,2,65,8,73,11,9,93,68,35,37,107, -101,114,110,101,108,164,96,2,164,2,35,2,13,2,42,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6735); +249,22,61,198,197,27,20,15,159,39,37,45,250,22,209,20,15,159,42,38,45, +250,22,209,20,15,159,45,39,45,249,22,56,20,15,159,47,40,45,201,20,15, +159,45,41,45,195,27,28,248,80,158,39,32,195,249,80,158,40,33,248,80,158, +41,34,197,27,248,80,158,42,35,198,91,159,35,11,90,161,35,32,11,250,80, +158,47,39,198,33,11,28,194,27,28,248,22,206,197,196,201,249,80,158,47,40, +28,248,80,158,48,36,196,248,22,59,248,80,158,49,37,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,199,198,27,20,15,159,46,42,45,250,22, +209,20,15,159,49,43,45,249,22,65,248,22,52,199,248,22,60,248,22,53,200, +195,89,162,32,33,55,9,226,11,10,2,3,27,249,22,209,20,15,159,38,44, +45,199,249,80,158,38,38,197,27,250,22,61,199,198,200,27,20,15,159,40,45, +45,250,22,209,20,15,159,43,46,45,250,22,209,20,15,159,46,47,45,250,22, +62,20,15,159,49,48,45,249,22,65,248,22,52,205,248,22,80,205,248,22,78, +203,20,15,159,46,49,45,195,250,22,252,39,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,197,87,95,249,22,3,89,162,32,33,39,9,224,5,4, +28,248,80,158,34,41,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,196,198,194,27,248,80, +158,37,42,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,199,196,12,193,89,162,32,33,47,73,103,101,110,101,114,97,108,45,112, +114,111,116,111,11,226,11,9,1,0,27,249,22,209,20,15,159,38,50,45,199, +27,89,162,32,32,54,2,9,228,5,4,3,2,6,1,27,28,248,80,158,39, +32,194,249,80,158,40,40,27,248,80,158,42,34,197,28,248,80,158,42,32,193, +249,80,158,43,33,248,80,158,44,34,195,27,248,80,158,45,35,196,248,22,59, +250,22,209,199,196,199,11,27,248,80,158,42,35,197,250,22,209,199,195,199,11, +28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,91,159,34,11, +90,161,34,32,11,248,202,27,249,22,61,200,199,27,20,15,159,46,51,45,250, +22,209,20,15,159,49,52,45,250,22,209,20,15,159,52,53,45,199,20,15,159, +52,54,45,195,27,248,202,201,249,22,7,195,89,162,32,33,38,9,224,4,2, +248,194,248,22,59,248,195,197,27,28,248,80,158,40,32,195,249,80,158,41,33, +248,80,158,42,34,197,27,248,80,158,43,35,198,250,22,209,200,195,200,11,28, +192,27,248,22,52,194,27,248,22,53,195,251,22,252,39,2,11,6,82,82,98, +97,100,32,115,121,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,204,197,250, +22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,27,28, +248,80,158,39,32,195,249,80,158,40,33,248,80,158,41,34,197,27,248,80,158, +42,35,198,250,22,209,200,195,200,11,28,192,27,248,22,52,194,27,248,22,53, +195,28,248,80,158,41,41,194,249,22,7,195,248,200,204,247,195,247,193,87,95, +28,248,80,158,42,36,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,202,28,248,80,158,42,43,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,202,12,27,249,22,209,20,15,159,44,55,45,203,27,249,22,209, +20,15,159,45,56,45,196,27,249,22,209,20,15,159,46,57,45,248,199,200,249, +80,158,46,38,204,27,250,22,61,200,199,198,27,20,15,159,48,58,45,250,22, +209,20,15,159,51,59,45,250,22,209,20,15,159,54,8,28,45,250,22,60,248, +22,52,203,250,22,209,20,15,159,8,28,8,29,45,248,22,60,248,22,78,23, +15,20,15,159,8,28,8,30,45,248,22,80,203,20,15,159,54,8,31,45,195, +250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,27, +28,248,80,158,38,32,195,249,80,158,39,33,248,80,158,40,34,197,27,248,80, +158,41,35,198,28,248,80,158,41,32,193,27,28,248,22,206,194,193,198,249,80, +158,43,33,248,80,158,44,34,196,27,248,80,158,45,35,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,41,32,194,247,196,251,22,252,39,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,202,197,247,193,27,28,248,80,158,38,32,195,249,80,158, +39,33,248,80,158,40,34,197,27,248,80,158,41,35,198,28,248,80,158,41,32, +193,27,28,248,22,206,194,193,198,249,80,158,43,33,248,80,158,44,34,196,27, +248,80,158,45,35,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,41,41,194,250,22,252,39, +2,11,27,249,22,209,20,15,159,46,8,32,45,204,27,28,248,80,158,46,32, +194,249,80,158,47,33,248,80,158,48,34,196,27,248,80,158,49,35,197,28,248, +80,158,49,32,193,249,80,158,50,33,248,80,158,51,34,195,27,248,80,158,52, +35,196,28,248,80,158,52,36,193,248,80,158,52,37,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,27,28,248,80,158,47,32,195,249,80,158,48,33,248,80,158,49, +34,197,27,248,80,158,50,35,198,28,248,80,158,50,32,193,249,80,158,51,40, +248,80,158,52,34,195,248,80,158,52,44,248,80,158,53,35,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,27,28,248,80, +158,48,32,196,249,80,158,49,33,248,80,158,50,34,198,27,248,80,158,51,35, +199,28,248,80,158,51,32,193,27,28,248,22,206,194,193,199,249,80,158,53,33, +248,80,158,54,34,196,27,248,80,158,55,35,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,250,22,252,39,2,11,6,10,10,98,97,100, +32,115,121,110,116,97,120,198,201,247,196,247,193,27,28,248,80,158,37,32,195, +249,80,158,38,33,248,80,158,39,34,197,27,248,80,158,40,35,198,28,248,80, +158,40,32,193,249,80,158,41,33,248,80,158,42,34,195,27,248,80,158,43,35, +196,28,248,80,158,43,32,193,249,80,158,44,40,248,80,158,45,34,195,248,80, +158,45,44,248,80,158,46,35,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,40,41,194,27,249,22,209,20,15, +159,42,8,33,45,201,249,80,158,42,38,203,27,250,22,61,198,200,199,27,20, +15,159,44,8,34,45,250,22,209,20,15,159,47,8,35,45,250,22,209,20,15, +159,50,8,36,45,250,22,60,248,22,52,203,250,22,209,20,15,159,56,8,37, +45,248,22,60,248,22,78,23,15,20,15,159,56,8,38,45,248,22,80,203,20, +15,159,50,8,39,45,195,247,196,247,193,250,22,7,248,196,20,15,159,37,8, +40,45,248,196,20,15,159,37,8,41,45,248,196,20,15,159,37,8,42,45,37, +20,98,158,16,13,30,12,65,35,37,115,116,120,13,69,115,116,120,45,112,97, +105,114,63,14,11,30,15,2,13,67,99,111,110,115,47,35,102,16,1,30,17, +2,13,67,115,116,120,45,99,97,114,18,5,30,19,2,13,67,115,116,120,45, +99,100,114,20,6,30,21,2,13,69,115,116,120,45,108,105,115,116,63,22,8, +30,23,2,13,69,115,116,120,45,62,108,105,115,116,24,4,30,25,68,35,37, +115,116,120,108,111,99,26,68,114,101,108,111,99,97,116,101,27,1,30,28,2, +13,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116,29,3,30,30,2, +13,69,97,112,112,101,110,100,47,35,102,31,0,30,32,2,13,71,105,100,101, +110,116,105,102,105,101,114,63,33,2,30,34,76,35,37,115,116,120,99,97,115, +101,45,115,99,104,101,109,101,35,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,36,0,30,37,2, +13,69,115,116,120,45,110,117,108,108,63,38,10,30,39,2,13,71,115,116,120, +45,110,117,108,108,47,35,102,40,9,16,43,18,99,64,104,101,114,101,41,39, +97,37,10,32,11,16,8,2,3,2,2,2,4,2,2,2,5,2,2,2,6, +2,2,98,36,10,33,11,95,159,67,35,37,113,113,115,116,120,42,9,11,159, +2,13,9,11,159,2,35,9,11,16,0,96,35,8,254,1,11,16,0,16,4, +34,11,77,100,101,102,105,110,101,45,118,97,108,117,101,115,45,115,116,120,43, +3,1,7,101,110,118,51,48,56,55,44,16,4,33,11,63,115,116,120,45,3, +1,7,101,110,118,51,48,56,56,46,18,102,2,41,43,37,36,35,34,33,16, +8,42,11,3,1,4,103,51,53,49,47,3,1,4,103,51,53,50,48,3,1, +4,103,51,53,51,49,3,1,7,101,110,118,51,49,48,51,50,2,50,2,50, +16,8,41,11,61,95,51,65,112,114,111,116,111,52,64,98,111,100,121,53,3, +1,7,101,110,118,51,49,48,52,54,2,54,2,54,16,6,40,11,2,10,2, +11,3,1,7,101,110,118,51,49,48,57,55,2,55,18,16,2,95,66,115,114, +99,116,97,103,56,44,93,8,252,117,8,95,9,8,252,117,8,69,35,37,115, +116,120,99,97,115,101,57,18,104,64,100,101,115,116,58,48,37,36,35,34,33, +42,41,16,6,47,11,2,10,2,11,2,55,2,55,16,6,46,11,3,1,4, +103,51,54,54,59,3,1,4,103,51,54,55,60,3,1,7,101,110,118,51,49, +49,54,61,2,61,16,6,45,11,62,105,100,62,63,97,114,103,63,3,1,7, +101,110,118,51,49,49,55,64,2,64,18,158,2,41,48,18,16,2,95,2,56, +49,93,8,252,123,8,95,9,8,252,123,8,2,57,18,158,2,58,48,18,158, +63,99,116,120,65,48,18,158,66,108,97,109,98,100,97,66,48,18,158,2,65, +48,18,16,2,95,2,56,50,93,8,252,124,8,95,9,8,252,124,8,2,57, +18,104,2,58,53,37,36,35,34,33,42,41,47,16,8,52,11,3,1,4,103, +51,54,51,67,3,1,4,103,51,54,52,68,3,1,4,103,51,54,53,69,3, +1,7,101,110,118,51,49,52,50,70,2,70,2,70,16,8,51,11,2,62,2, +63,64,114,101,115,116,71,3,1,7,101,110,118,51,49,52,51,72,2,72,2, +72,18,158,2,41,53,18,16,2,95,2,56,54,93,8,252,130,8,95,9,8, +252,130,8,2,57,18,158,2,58,53,18,158,2,65,53,18,158,2,66,53,18, +158,2,65,53,18,158,2,41,43,18,16,2,95,2,56,55,93,8,252,142,8, +95,9,8,252,142,8,2,57,18,104,2,58,58,37,36,35,34,33,42,41,40, +16,8,57,11,3,1,4,103,51,55,54,73,3,1,4,103,51,55,55,74,3, +1,4,103,51,55,56,75,3,1,7,101,110,118,51,49,55,52,76,2,76,2, +76,16,8,56,11,69,115,111,109,101,116,104,105,110,103,77,64,109,111,114,101, +78,2,71,3,1,7,101,110,118,51,49,55,53,79,2,79,2,79,18,158,2, +65,58,18,158,2,65,58,18,102,2,41,8,28,37,36,35,34,33,42,41,16, +6,59,11,2,62,66,109,107,45,114,104,115,80,3,1,7,101,110,118,51,49, +48,56,81,2,81,18,158,2,41,8,28,18,158,2,41,8,28,18,16,2,95, +2,56,8,29,93,8,252,161,8,95,9,8,252,161,8,2,57,18,158,2,58, +8,28,18,158,2,65,8,28,18,158,2,65,8,28,18,158,2,65,8,28,18, +158,2,65,8,28,18,101,2,41,8,32,37,36,35,34,33,16,8,8,31,11, +3,1,4,103,51,53,55,82,3,1,4,103,51,53,56,83,3,1,4,103,51, +53,57,84,3,1,7,101,110,118,51,50,52,57,85,2,85,2,85,16,8,8, +30,11,2,51,2,62,2,71,3,1,7,101,110,118,51,50,53,48,86,2,86, +2,86,18,101,2,41,8,35,37,36,35,34,33,16,8,8,34,11,3,1,4, +103,51,54,48,87,3,1,4,103,51,54,49,88,3,1,4,103,51,54,50,89, +3,1,7,101,110,118,51,50,56,54,90,2,90,2,90,16,8,8,33,11,2, +51,2,62,64,101,120,112,114,91,3,1,7,101,110,118,51,50,56,55,92,2, +92,2,92,18,16,2,95,2,56,8,36,93,8,252,185,8,95,9,8,252,185, +8,2,57,18,158,2,58,8,35,18,158,2,65,8,35,18,158,2,65,8,35, +18,158,2,65,8,35,18,158,2,65,8,35,18,98,73,100,101,102,105,110,101, +45,118,97,108,117,101,115,93,8,38,37,36,35,16,4,8,37,11,2,7,3, +1,7,101,110,118,51,48,56,54,94,18,158,75,100,101,102,105,110,101,45,115, +121,110,116,97,120,101,115,95,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,96,8,38,11, +16,5,93,2,5,89,162,32,33,8,32,9,223,0,27,247,22,252,82,3,87, +94,28,249,22,71,194,21,95,66,109,111,100,117,108,101,97,72,109,111,100,117, +108,101,45,98,101,103,105,110,98,69,116,111,112,45,108,101,118,101,108,99,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,197,27,249, +22,209,20,15,159,36,32,42,197,27,28,248,80,158,36,32,194,249,80,158,37, +33,248,80,158,38,34,196,248,80,158,38,35,248,80,158,39,36,197,11,28,192, +20,15,159,35,33,42,27,89,162,32,32,51,2,9,225,4,5,2,27,28,248, +80,158,36,32,194,249,80,158,37,37,248,80,158,38,34,196,27,248,80,158,39, +36,197,28,248,80,158,39,38,193,248,80,158,39,39,193,11,11,28,192,27,248, +22,52,194,27,248,22,53,195,249,80,158,39,40,198,27,20,15,159,40,34,42, +250,22,209,20,15,159,43,35,42,250,22,209,20,15,159,46,36,42,249,22,56, +20,15,159,48,37,42,249,22,2,89,162,33,33,40,9,223,18,250,22,209,20, +15,159,35,38,42,249,22,60,20,15,159,37,39,42,248,22,52,199,20,15,159, +35,40,42,205,20,15,159,46,41,42,195,250,22,252,39,2,11,6,10,10,98, +97,100,32,115,121,110,116,97,120,196,27,28,248,80,158,38,32,196,249,80,158, +39,37,248,80,158,40,34,198,27,248,80,158,41,36,199,28,248,80,158,41,32, +193,249,80,158,42,33,248,80,158,43,34,195,248,80,158,43,35,248,80,158,44, +36,196,11,11,28,192,27,248,22,52,194,27,248,22,53,195,28,249,22,252,11, +2,200,2,98,247,195,27,250,22,252,25,2,196,202,248,22,216,20,15,159,44, +42,42,27,249,22,209,20,15,159,43,43,42,195,27,28,248,80,158,43,32,194, +28,27,248,80,158,44,34,195,28,248,80,158,44,41,193,28,249,22,224,194,20, +15,159,45,44,42,9,11,11,27,248,80,158,44,36,195,28,248,80,158,44,38, +193,248,80,158,44,39,193,11,11,11,28,192,27,20,15,159,43,45,42,250,22, +209,20,15,159,46,46,42,250,22,209,20,15,159,49,47,42,249,22,56,20,15, +159,51,48,42,201,20,15,159,49,49,42,195,27,28,248,80,158,44,32,195,28, +27,248,80,158,45,34,196,28,248,80,158,45,41,193,28,249,22,224,194,20,15, +159,46,50,42,9,11,11,27,248,80,158,45,36,196,28,248,80,158,45,32,193, +249,80,158,46,33,27,248,80,158,48,34,196,28,248,80,158,48,38,193,248,22, +59,248,80,158,49,39,194,11,27,248,80,158,48,36,196,28,248,80,158,48,32, +193,249,80,158,49,33,248,80,158,50,34,195,248,80,158,50,35,248,80,158,51, +36,196,11,11,11,11,28,192,27,248,22,52,194,27,248,22,53,195,27,249,22, +61,196,195,27,20,15,159,47,51,42,250,22,209,20,15,159,50,52,42,250,22, +209,20,15,159,53,53,42,250,22,60,20,15,159,56,54,42,248,22,52,203,248, +22,53,203,20,15,159,53,55,42,195,27,28,248,80,158,45,32,196,28,27,248, +80,158,46,34,197,28,248,80,158,46,41,193,28,249,22,224,194,20,15,159,47, +56,42,9,11,11,27,248,80,158,46,36,197,28,248,80,158,46,38,193,248,80, +158,46,39,193,11,11,11,28,192,27,20,15,159,45,57,42,250,22,209,20,15, +159,48,58,42,250,22,209,20,15,159,51,59,42,249,22,56,20,15,159,53,8, +28,42,201,20,15,159,51,8,29,42,195,27,28,248,80,158,46,32,197,28,27, +248,80,158,47,34,198,28,248,80,158,47,41,193,28,249,22,224,194,20,15,159, +48,8,30,42,9,11,11,27,248,80,158,47,36,198,28,248,80,158,47,38,193, +248,80,158,47,39,193,11,11,11,28,192,27,20,15,159,46,8,31,42,250,22, +209,20,15,159,49,8,32,42,250,22,209,20,15,159,52,8,33,42,249,22,56, +20,15,159,54,8,34,42,201,20,15,159,52,8,35,42,195,27,28,248,80,158, +47,32,198,28,27,248,80,158,48,34,199,28,248,80,158,48,41,193,28,249,22, +224,194,20,15,159,49,8,36,42,9,11,11,27,248,80,158,48,36,199,28,248, +80,158,48,32,193,249,80,158,49,33,27,248,80,158,51,34,196,28,248,80,158, +51,38,193,248,22,59,248,80,158,52,39,194,11,27,248,80,158,51,36,196,28, +248,80,158,51,32,193,249,80,158,52,33,248,80,158,53,34,195,248,80,158,53, +35,248,80,158,54,36,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,204,27,20,15,159,47,8,37,42,250,22,209,20,15,159,50,8,38,42, +250,22,209,20,15,159,53,8,39,42,250,22,60,20,15,159,56,8,40,42,20, +15,159,56,8,41,42,250,22,209,20,15,159,59,8,42,42,250,22,62,20,15, +159,8,30,8,43,42,23,21,20,15,159,8,30,8,44,42,20,15,159,59,8, +45,42,20,15,159,53,8,46,42,195,247,193,32,20,98,158,16,10,2,12,2, +30,2,17,2,39,2,19,2,15,2,21,2,23,2,25,2,32,16,47,18,99, +2,41,8,41,37,36,35,16,4,8,40,11,2,45,3,1,7,101,110,118,51, +51,48,52,100,16,4,8,39,11,2,65,3,1,7,101,110,118,51,51,48,53, +101,18,158,93,16,2,101,2,0,8,44,37,36,35,8,40,8,39,16,4,8, +43,11,3,1,4,103,52,48,53,102,3,1,7,101,110,118,51,51,49,48,103, +16,4,8,42,11,2,51,3,1,7,101,110,118,51,51,49,49,104,9,8,44, +18,16,2,95,2,56,8,45,93,8,252,199,8,95,9,8,252,199,8,2,57, +18,101,2,58,8,48,37,36,35,8,40,8,39,16,6,8,47,11,3,1,4, +103,52,48,49,105,3,1,4,103,52,48,50,106,3,1,7,101,110,118,51,51, +49,57,107,2,107,16,6,8,46,11,2,51,64,101,108,101,109,108,3,1,7, +101,110,118,51,51,50,48,109,2,109,18,158,2,65,8,48,18,158,2,0,8, +48,18,158,2,65,8,48,18,158,2,5,8,48,18,158,2,65,8,48,18,158, +2,65,8,48,18,158,110,16,2,101,2,0,8,51,37,36,35,8,40,8,39, +16,6,8,50,11,3,1,4,103,52,48,51,110,3,1,4,103,52,48,52,111, +3,1,7,101,110,118,51,51,51,48,112,2,112,16,6,8,49,11,2,51,2, +108,3,1,7,101,110,118,51,51,51,49,113,2,113,9,16,2,158,2,93,8, +51,9,16,2,158,2,95,8,51,9,16,2,158,2,96,8,51,9,16,2,158, +64,115,101,116,33,114,8,51,9,16,2,158,70,108,101,116,45,118,97,108,117, +101,115,115,8,51,9,16,2,158,71,108,101,116,42,45,118,97,108,117,101,115, +116,8,51,9,16,2,158,73,108,101,116,114,101,99,45,118,97,108,117,101,115, +117,8,51,9,16,2,158,2,66,8,51,9,16,2,158,71,99,97,115,101,45, +108,97,109,98,100,97,118,8,51,9,16,2,158,62,105,102,119,8,51,9,16, +2,158,65,113,117,111,116,101,120,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,121,8,51, +9,16,2,158,76,102,108,117,105,100,45,108,101,116,45,115,121,110,116,97,120, +122,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,123,8,51,9,16,2,158,65,35,37,97, +112,112,124,8,51,9,16,2,158,65,35,37,116,111,112,125,8,51,9,16,2, +158,67,35,37,100,97,116,117,109,126,8,51,9,8,51,18,102,2,41,8,53, +37,36,35,8,40,8,39,8,50,8,49,16,4,8,52,11,61,101,127,3,1, +7,101,110,118,51,51,51,52,128,18,158,2,0,8,53,18,16,2,95,2,56, +8,54,93,8,252,214,8,95,9,8,252,214,8,2,57,18,104,2,58,8,57, +37,36,35,8,40,8,39,8,50,8,49,8,52,16,4,8,56,11,3,1,4, +103,52,49,51,129,3,1,7,101,110,118,51,51,52,48,130,16,4,8,55,11, +61,118,131,3,1,7,101,110,118,51,51,52,49,132,18,158,2,65,8,57,18, +158,2,5,8,57,18,158,2,65,8,57,18,158,2,93,8,53,18,16,2,95, +2,56,8,58,93,8,252,215,8,95,9,8,252,215,8,2,57,18,104,2,58, +8,61,37,36,35,8,40,8,39,8,50,8,49,8,52,16,6,8,60,11,3, +1,4,103,52,49,49,133,3,1,4,103,52,49,50,134,3,1,7,101,110,118, +51,51,53,49,135,2,135,16,6,8,59,11,2,62,2,91,3,1,7,101,110, +118,51,51,53,50,136,2,136,18,158,2,65,8,61,18,158,2,96,8,61,18, +158,2,65,8,61,18,158,67,114,101,113,117,105,114,101,137,8,53,18,16,2, +95,2,56,8,62,93,8,252,216,8,95,9,8,252,216,8,2,57,18,104,2, +58,8,65,37,36,35,8,40,8,39,8,50,8,49,8,52,16,4,8,64,11, +3,1,4,103,52,49,48,138,3,1,7,101,110,118,51,51,54,49,139,16,4, +8,63,11,2,131,3,1,7,101,110,118,51,51,54,50,140,18,158,2,65,8, +65,18,158,78,114,101,113,117,105,114,101,45,102,111,114,45,115,121,110,116,97, +120,141,8,65,18,158,2,65,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,142,8,53,18,16,2,95,2, +56,8,66,93,8,252,217,8,95,9,8,252,217,8,2,57,18,104,2,58,8, +69,37,36,35,8,40,8,39,8,50,8,49,8,52,16,4,8,68,11,3,1, +4,103,52,48,57,143,3,1,7,101,110,118,51,51,55,48,144,16,4,8,67, +11,2,131,3,1,7,101,110,118,51,51,55,49,145,18,158,2,65,8,69,18, +158,2,137,8,69,18,158,2,65,8,69,18,158,2,95,8,53,18,16,2,95, +2,56,8,70,93,8,252,219,8,95,9,8,252,219,8,2,57,18,104,2,58, +8,73,37,36,35,8,40,8,39,8,50,8,49,8,52,16,4,8,72,11,3, +1,4,103,52,48,54,146,3,1,7,101,110,118,51,51,56,54,147,16,4,8, +71,11,65,111,116,104,101,114,148,3,1,7,101,110,118,51,51,56,55,149,18, +158,2,65,8,73,18,158,2,96,8,73,18,158,9,8,73,18,158,2,65,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,150,8,73,9,8,73,9,8,81,98,8,80,10,32,11,94, +159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,151,9,11,159,2, +13,9,11,16,6,66,115,121,110,116,97,120,152,29,153,11,11,73,115,121,110, +116,97,120,45,99,97,115,101,42,42,154,2,153,1,20,101,108,108,105,112,115, +105,115,45,99,111,117,110,116,45,101,114,114,111,114,155,2,153,98,8,79,10, +33,11,95,159,64,35,37,115,99,156,9,11,159,2,151,9,11,159,2,13,9, +11,16,0,96,8,78,8,254,1,11,16,0,16,4,8,77,11,61,120,157,3, +1,6,101,110,118,51,55,55,158,16,4,8,76,11,68,104,101,114,101,45,115, +116,120,159,3,1,6,101,110,118,51,55,57,160,16,4,8,75,11,2,159,2, +160,13,16,3,33,2,153,2,57,93,8,252,219,8,16,6,8,74,11,61,114, +161,63,115,114,99,162,3,1,7,101,110,118,51,51,57,48,163,2,163,95,9, +8,252,219,8,2,57,18,158,2,65,8,73,18,158,2,65,8,73,11,9,93, +68,35,37,107,101,114,110,101,108,164,96,2,164,2,35,2,13,2,42,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6718); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,252,169,1,252,231,86,159,32,20,98,158,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,252,169,1,252,39,87,159,32,20,98,158,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,39,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,46,80, 158,32,32,20,98,158,16,24,30,3,2,2,74,115,116,114,117,99,116,58,112, @@ -2273,13 +2273,13 @@ 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,46,11,16,18,2,49,2,23,2,45,2,16,2, -14,2,8,65,100,101,108,97,121,52,78,112,97,114,97,109,101,116,101,114,105, -122,101,45,98,114,101,97,107,53,64,99,97,115,101,54,71,115,101,116,33,45, -118,97,108,117,101,115,55,72,112,97,114,97,109,101,116,101,114,105,122,101,56, -70,108,101,116,45,115,116,114,117,99,116,57,64,116,105,109,101,58,73,119,105, -116,104,45,104,97,110,100,108,101,114,115,59,62,100,111,60,74,119,105,116,104, -45,104,97,110,100,108,101,114,115,42,61,69,102,108,117,105,100,45,108,101,116, -62,66,108,101,116,47,99,99,63,16,18,11,11,11,11,11,11,11,11,11,11, +14,2,8,72,112,97,114,97,109,101,116,101,114,105,122,101,52,69,102,108,117, +105,100,45,108,101,116,53,65,100,101,108,97,121,54,64,116,105,109,101,55,73, +119,105,116,104,45,104,97,110,100,108,101,114,115,56,74,119,105,116,104,45,104, +97,110,100,108,101,114,115,42,57,66,108,101,116,47,99,99,58,62,100,111,59, +64,99,97,115,101,60,71,115,101,116,33,45,118,97,108,117,101,115,61,78,112, +97,114,97,109,101,116,101,114,105,122,101,45,98,114,101,97,107,62,70,108,101, +116,45,115,116,114,117,99,116,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,38,50,106,16,5,93,69,99,97,115,101,45,116,101,115,116,64, @@ -2317,15 +2317,15 @@ 8,30,80,2,66,69,115,116,120,45,62,108,105,115,116,81,4,16,25,18,98, 64,104,101,114,101,82,38,98,36,10,32,11,95,159,2,18,9,11,159,68,35, 37,100,101,102,105,110,101,83,9,11,159,74,35,37,115,109,97,108,108,45,115, -99,104,101,109,101,84,9,11,16,70,2,64,2,2,2,23,2,2,2,27,2, -2,2,12,2,2,2,57,2,2,2,56,2,2,2,31,2,2,2,45,2,2, -2,55,2,2,2,62,2,2,2,29,2,2,2,49,2,2,2,33,2,2,2, -39,2,2,2,60,2,2,2,54,2,2,2,35,2,2,2,63,2,2,2,61, -2,2,2,37,2,2,2,59,2,2,2,8,2,2,2,52,2,2,2,41,2, -2,2,58,2,2,2,4,2,2,67,112,114,111,109,105,115,101,85,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,14,2,2,2,43,2,2,2,53,2,2,2,16,2,2, -2,6,2,2,2,10,2,2,2,25,2,2,98,35,10,33,11,95,159,67,35, +99,104,101,109,101,84,9,11,16,70,2,41,2,2,2,23,2,2,2,55,2, +2,2,14,2,2,2,63,2,2,2,59,2,2,2,29,2,2,2,25,2,2, +2,62,2,2,2,4,2,2,2,56,2,2,2,53,2,2,2,27,2,2,2, +45,2,2,2,57,2,2,2,52,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,85,2,2,2,31,2,2, +2,39,2,2,2,12,2,2,2,58,2,2,2,33,2,2,2,60,2,2,2, +64,2,2,2,35,2,2,2,8,2,2,2,10,2,2,2,43,2,2,2,37, +2,2,2,16,2,2,2,6,2,2,2,54,2,2,2,61,2,2,2,49,2, +2,67,112,114,111,109,105,115,101,86,2,2,98,35,10,33,11,95,159,67,35, 37,113,113,115,116,120,87,9,11,159,76,35,37,115,116,120,99,97,115,101,45, 115,99,104,101,109,101,88,9,11,159,2,66,9,11,16,0,96,34,8,254,1, 11,16,0,16,4,33,11,61,120,89,3,1,7,101,110,118,51,51,57,50,90, @@ -2345,7 +2345,7 @@ 7,101,110,118,51,52,49,49,108,2,108,2,108,16,6,45,11,2,98,2,99, 3,1,7,101,110,118,51,52,49,50,109,2,109,18,158,2,101,47,18,158,64, 109,101,109,118,110,47,18,158,2,101,47,18,158,2,103,47,18,158,2,101,47, -18,158,2,101,47,11,16,5,93,2,54,89,162,32,33,8,36,9,223,0,27, +18,158,2,101,47,11,16,5,93,2,60,89,162,32,33,8,36,9,223,0,27, 249,22,209,20,15,159,35,32,43,196,27,28,248,80,158,35,32,194,249,80,158, 36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32, 193,249,80,158,39,36,248,80,158,40,34,195,248,80,158,40,37,248,80,158,41, @@ -2361,9 +2361,9 @@ 248,80,158,48,34,195,27,248,80,158,49,35,196,28,248,80,158,49,39,193,248, 80,158,49,40,193,11,11,11,11,248,80,158,44,37,248,80,158,45,35,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,41,41,202,27,250,22,61,200,199,198,27,20,15,159,43, +22,88,197,249,80,158,41,41,202,27,250,22,61,200,198,199,27,20,15,159,43, 40,43,250,22,209,20,15,159,46,41,43,250,22,209,20,15,159,49,42,43,251, -22,62,20,15,159,53,43,43,248,22,52,204,248,22,78,204,248,22,80,204,20, +22,62,20,15,159,53,43,43,248,22,52,204,248,22,80,204,248,22,78,204,20, 15,159,49,44,43,195,27,28,248,80,158,37,32,196,249,80,158,38,33,248,80, 158,39,34,198,27,248,80,158,40,35,199,28,248,80,158,40,32,193,249,80,158, 41,33,248,80,158,42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,32, @@ -2374,7 +2374,7 @@ 158,52,39,193,248,80,158,52,40,193,11,11,11,248,80,158,45,37,248,80,158, 46,35,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,43,41,204,27,251,22, -61,202,200,201,199,27,20,15,159,45,45,43,91,159,33,11,90,161,33,32,11, +61,202,201,200,199,27,20,15,159,45,45,43,91,159,33,11,90,161,33,32,11, 83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,15,2,3,1, 250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252, 184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32, @@ -2384,8 +2384,8 @@ 89,162,32,32,52,9,225,6,5,4,27,250,22,209,20,15,159,38,47,43,250, 22,209,20,15,159,41,48,43,250,22,60,20,15,159,44,49,43,250,22,209,20, 15,159,47,50,43,250,22,60,20,15,159,50,51,43,248,22,52,23,17,248,22, -87,23,17,20,15,159,47,52,43,250,22,209,20,15,159,47,53,43,250,22,62, -20,15,159,50,54,43,248,22,78,23,17,248,22,88,23,17,20,15,159,47,55, +78,23,17,20,15,159,47,52,43,250,22,209,20,15,159,47,53,43,250,22,62, +20,15,159,50,54,43,248,22,87,23,17,248,22,88,23,17,20,15,159,47,55, 43,20,15,159,41,56,43,197,89,162,32,32,33,9,223,0,192,89,162,32,32, 34,9,223,3,248,22,252,184,2,208,27,28,248,80,158,38,32,197,249,80,158, 39,33,248,80,158,40,34,199,27,248,80,158,41,35,200,28,248,80,158,41,32, @@ -2399,26 +2399,26 @@ 49,34,195,27,248,80,158,50,35,196,28,248,80,158,50,39,193,248,80,158,50, 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,249,22,70,199,36,27,249,22,70,200,37,27, -249,22,69,201,38,249,80,158,46,41,23,15,27,253,22,61,206,204,205,202,203, -201,27,20,15,159,48,57,43,91,159,33,11,90,161,33,32,11,83,160,38,32, +249,22,69,201,38,249,80,158,46,41,23,15,27,253,22,61,206,202,201,205,204, +203,27,20,15,159,48,57,43,91,159,33,11,90,161,33,32,11,83,160,38,32, 33,11,247,248,22,8,89,162,32,33,40,9,226,18,2,3,1,250,22,31,89, 162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22, 252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224, 2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80,158,35,42,21, 95,63,108,101,116,116,93,94,2,89,2,112,96,2,111,95,2,64,2,89,94, -2,99,2,113,96,2,0,2,114,2,115,2,113,97,2,54,2,89,62,99,49, -117,62,99,50,118,2,113,20,15,159,35,58,43,89,162,32,32,8,29,9,225, +2,99,2,113,96,2,0,2,114,2,115,2,113,97,2,60,2,89,62,99,49, +117,62,99,50,118,2,113,20,15,159,35,58,43,89,162,32,32,8,28,9,225, 6,5,4,27,250,22,209,20,15,159,38,59,43,250,22,209,20,15,159,41,8, 28,43,250,22,60,20,15,159,44,8,29,43,250,22,209,20,15,159,47,8,30, 43,248,22,60,250,22,209,20,15,159,51,8,31,43,249,22,60,20,15,159,53, 8,32,43,248,22,52,23,20,20,15,159,51,8,33,43,20,15,159,47,8,34, 43,250,22,209,20,15,159,47,8,35,43,251,22,60,20,15,159,51,8,36,43, 250,22,209,20,15,159,54,8,37,43,250,22,60,20,15,159,57,8,38,43,20, -15,159,57,8,39,43,248,22,87,23,24,20,15,159,54,8,40,43,250,22,209, -20,15,159,54,8,41,43,250,22,62,20,15,159,57,8,42,43,248,22,78,23, -24,249,22,70,23,25,36,20,15,159,54,8,43,43,250,22,209,20,15,159,54, -8,44,43,251,22,62,20,15,159,58,8,45,43,20,15,159,58,8,46,43,248, -22,90,23,25,249,22,69,23,26,37,20,15,159,54,8,47,43,20,15,159,47, +15,159,57,8,39,43,248,22,90,23,24,20,15,159,54,8,40,43,250,22,209, +20,15,159,54,8,41,43,250,22,62,20,15,159,57,8,42,43,249,22,70,23, +25,36,249,22,69,23,25,37,20,15,159,54,8,43,43,250,22,209,20,15,159, +54,8,44,43,251,22,62,20,15,159,58,8,45,43,20,15,159,58,8,46,43, +248,22,78,23,25,248,22,87,23,25,20,15,159,54,8,47,43,20,15,159,47, 8,48,43,20,15,159,41,8,49,43,197,89,162,32,32,33,9,223,0,192,89, 162,32,32,34,9,223,3,248,22,252,184,2,208,27,28,248,80,158,39,32,198, 249,80,158,40,33,248,80,158,41,34,200,27,248,80,158,42,35,201,28,248,80, @@ -2505,9 +2505,9 @@ 8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,101,8,51,18, 158,2,111,8,51,18,158,2,101,8,51,18,158,2,64,8,51,18,158,2,89, 8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,0,8,51,18, -158,2,101,8,51,18,158,2,101,8,51,18,158,2,54,8,51,18,158,2,89, +158,2,101,8,51,18,158,2,101,8,51,18,158,2,60,8,51,18,158,2,89, 8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,101,8,51,11, -16,5,93,2,60,89,162,32,33,8,29,9,223,0,27,249,22,209,20,15,159, +16,5,93,2,59,89,162,32,33,8,29,9,223,0,27,249,22,209,20,15,159, 35,32,45,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37, 34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39,36, 27,248,80,158,41,34,196,28,248,80,158,41,37,193,248,22,8,89,162,32,33, @@ -2533,7 +2533,7 @@ 28,248,80,158,44,37,194,248,80,158,44,39,194,11,28,192,27,249,22,209,20, 15,159,46,39,45,27,20,15,159,47,40,45,250,22,209,20,15,159,50,41,45, 202,195,27,248,80,158,46,41,194,28,192,249,80,158,47,42,23,16,27,252,22, -61,202,23,16,206,23,17,204,27,20,15,159,49,42,45,91,159,33,11,90,161, +61,23,16,202,206,204,23,17,27,20,15,159,49,42,45,91,159,33,11,90,161, 33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,19, 2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10, 247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193, @@ -2545,18 +2545,18 @@ 22,209,20,15,159,38,44,45,250,22,209,20,15,159,41,45,45,251,22,60,20, 15,159,45,46,45,20,15,159,45,47,45,250,22,2,89,162,33,33,41,9,223, 16,250,22,209,20,15,159,35,48,45,249,22,60,248,22,52,199,248,22,78,199, -20,15,159,35,49,45,248,22,90,23,15,248,22,78,23,15,250,22,209,20,15, +20,15,159,35,49,45,248,22,89,23,15,248,22,52,23,15,250,22,209,20,15, 159,48,50,45,250,22,60,20,15,159,51,51,45,250,22,209,20,15,159,54,52, 45,249,22,60,20,15,159,56,53,45,248,22,87,23,23,20,15,159,54,54,45, 250,22,209,20,15,159,54,55,45,249,22,56,20,15,159,56,56,45,249,22,65, -248,22,89,23,25,248,22,60,250,22,209,20,15,159,8,30,57,45,249,22,56, -20,15,159,8,32,58,45,248,22,52,23,31,20,15,159,8,30,59,45,20,15, +248,22,90,23,25,248,22,60,250,22,209,20,15,159,8,30,57,45,249,22,56, +20,15,159,8,32,58,45,248,22,78,23,31,20,15,159,8,30,59,45,20,15, 159,54,8,28,45,20,15,159,48,8,29,45,20,15,159,41,8,30,45,197,89, 162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2, 208,27,28,248,80,158,47,32,195,249,80,158,48,33,248,80,158,49,34,197,27, 248,80,158,50,35,198,28,248,80,158,50,37,193,248,80,158,50,39,193,11,11, 28,192,27,248,22,52,194,27,248,22,53,195,249,80,158,50,42,23,19,27,254, -22,61,203,23,17,23,15,23,21,23,19,23,22,202,27,20,15,159,52,8,31, +22,61,23,21,23,15,23,19,23,17,23,22,203,202,27,20,15,159,52,8,31, 45,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89, 162,32,33,40,9,226,22,2,3,1,250,22,31,89,162,32,32,36,9,225,6, 3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33, @@ -2568,13 +2568,13 @@ 250,22,209,20,15,159,41,8,34,45,251,22,60,20,15,159,45,8,35,45,20, 15,159,45,8,36,45,250,22,2,89,162,33,33,41,9,223,16,250,22,209,20, 15,159,35,8,37,45,249,22,60,248,22,52,199,248,22,78,199,20,15,159,35, -8,38,45,249,22,70,23,16,37,248,22,90,23,15,250,22,209,20,15,159,48, -8,39,45,251,22,60,20,15,159,52,8,40,45,249,22,70,23,20,36,250,22, -209,20,15,159,55,8,41,45,250,22,62,20,15,159,58,8,42,45,248,22,52, -23,25,249,22,69,23,26,38,20,15,159,55,8,43,45,250,22,209,20,15,159, -55,8,44,45,249,22,56,20,15,159,57,8,45,45,249,22,65,248,22,78,23, +8,38,45,249,22,70,23,16,36,248,22,52,23,15,250,22,209,20,15,159,48, +8,39,45,251,22,60,20,15,159,52,8,40,45,248,22,87,23,19,250,22,209, +20,15,159,55,8,41,45,250,22,62,20,15,159,58,8,42,45,249,22,70,23, +26,37,249,22,69,23,26,38,20,15,159,55,8,43,45,250,22,209,20,15,159, +55,8,44,45,249,22,56,20,15,159,57,8,45,45,249,22,65,248,22,90,23, 26,248,22,60,250,22,209,20,15,159,8,31,8,46,45,249,22,56,20,15,159, -8,33,8,47,45,248,22,87,23,32,20,15,159,8,31,8,48,45,20,15,159, +8,33,8,47,45,248,22,78,23,32,20,15,159,8,31,8,48,45,20,15,159, 55,8,49,45,20,15,159,48,8,50,45,20,15,159,41,8,51,45,197,89,162, 32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208, 250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,248, @@ -2630,7 +2630,7 @@ 16,4,8,80,11,3,1,4,103,52,54,48,220,3,1,7,101,110,118,51,54, 51,55,221,16,4,8,79,11,65,95,101,108,115,101,222,3,1,7,101,110,118, 51,54,51,56,223,9,16,2,158,2,113,8,82,9,8,82,95,9,8,252,61, -9,2,189,11,16,5,93,2,52,89,162,32,33,55,9,223,0,27,249,22,209, +9,2,189,11,16,5,93,2,54,89,162,32,33,55,9,223,0,27,249,22,209, 20,15,159,35,32,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248, 80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80, 158,39,36,248,80,158,40,34,195,248,80,158,40,37,248,80,158,41,35,196,11, @@ -2645,661 +2645,664 @@ 85,93,8,252,85,9,95,9,8,252,85,9,2,92,18,100,2,93,8,88,36, 35,34,8,83,16,6,8,87,11,3,1,4,103,52,54,52,225,3,1,4,103, 52,54,53,226,3,1,7,101,110,118,51,54,52,54,227,2,227,16,6,8,86, -11,2,52,63,101,120,112,228,3,1,7,101,110,118,51,54,52,55,229,2,229, +11,2,54,63,101,120,112,228,3,1,7,101,110,118,51,54,52,55,229,2,229, 18,158,2,101,8,88,18,158,2,6,8,88,18,158,2,101,8,88,18,158,66, 108,97,109,98,100,97,230,8,88,18,158,9,8,88,18,158,2,101,8,88,18, -158,2,101,8,88,11,16,5,93,2,85,253,22,60,248,247,22,252,87,3,20, +158,2,101,8,88,11,16,5,93,2,86,253,22,60,248,247,22,252,87,3,20, 15,159,39,32,32,248,247,22,252,87,3,20,15,159,39,33,32,248,247,22,252, 87,3,20,15,159,39,34,32,248,22,60,248,247,22,252,87,3,20,15,159,40, 35,32,248,22,60,248,247,22,252,87,3,20,15,159,40,36,32,10,40,20,98, 158,16,0,16,5,18,97,2,4,8,89,36,35,34,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,56,89,162,32,33,55,9,223,0,27,249,22,209,20,15,159,35,32,45,196, +2,52,89,162,32,33,55,9,223,0,27,249,22,209,20,15,159,35,32,45,196, 27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248, 80,158,38,35,197,28,248,80,158,38,32,193,28,248,80,158,38,36,248,80,158, 39,34,194,27,248,80,158,39,35,194,28,248,80,158,39,32,193,249,80,158,40, 33,248,80,158,41,34,195,27,248,80,158,42,35,196,28,248,80,158,42,37,193, 248,80,158,42,38,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,39,33,45,250, -22,209,20,15,159,42,34,45,250,22,209,20,15,159,45,35,45,250,22,62,20, -15,159,48,36,45,20,15,159,48,37,45,202,20,15,159,45,38,45,195,27,28, -248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34,197,27,248,80,158, -39,35,198,28,248,80,158,39,32,193,249,80,158,40,39,27,248,80,158,42,34, -196,28,248,80,158,42,37,193,248,22,8,89,162,32,33,39,9,224,10,1,27, -249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35,40,28,248,80,158, -36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200, -28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158, -41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,57, -193,21,94,9,9,248,80,158,35,41,193,11,27,248,80,158,42,35,196,28,248, -80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,27,248,80,158,45, -35,196,28,248,80,158,45,37,193,248,80,158,45,38,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,43,39,45,249,22,1,22,65,250,22, -2,22,59,248,22,216,27,20,15,159,50,40,45,250,22,209,20,15,159,53,41, -45,23,16,195,248,22,216,27,20,15,159,50,42,45,250,22,209,20,15,159,53, -43,45,23,15,195,27,28,248,80,158,43,37,194,248,80,158,43,38,194,11,28, -192,249,80,158,44,42,205,27,250,22,61,200,198,201,27,20,15,159,46,44,45, -91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162, -32,33,40,9,226,16,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3, -7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33,36, -9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,181,2, -193,248,22,252,186,2,193,249,80,158,35,43,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,231,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,232,11,2,21,63,112,47,118,233,2, -113,97,2,116,9,65,101,120,112,114,49,234,64,101,120,112,114,235,2,113,20, -15,159,35,45,45,89,162,32,32,54,9,225,6,5,4,27,250,22,209,20,15, -159,38,46,45,250,22,209,20,15,159,41,47,45,251,22,60,20,15,159,45,48, -45,20,15,159,45,49,45,250,22,209,20,15,159,48,50,45,250,22,62,20,15, -159,51,51,45,20,15,159,51,52,45,248,22,78,23,18,20,15,159,48,53,45, -250,22,209,20,15,159,48,54,45,251,22,62,20,15,159,52,55,45,20,15,159, -52,56,45,248,22,80,23,19,248,22,52,23,19,20,15,159,48,57,45,20,15, -159,41,58,45,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223, -3,248,22,252,184,2,208,248,80,158,43,44,20,15,159,43,59,45,250,22,252, -39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,98,158, -16,13,2,65,2,68,2,70,2,72,2,76,2,78,2,80,2,74,2,184,2, -186,2,122,2,125,2,188,16,28,18,98,2,82,8,91,36,35,34,16,4,8, -90,11,63,115,116,120,236,3,1,7,101,110,118,51,54,53,52,237,18,16,2, -95,2,91,8,92,93,8,252,115,9,95,9,8,252,115,9,2,92,18,100,2, -93,8,95,36,35,34,8,90,16,8,8,94,11,3,1,4,103,52,55,49,238, -3,1,4,103,52,55,50,239,3,1,4,103,52,55,51,240,3,1,7,101,110, -118,51,54,54,49,241,2,241,2,241,16,8,8,93,11,2,98,2,234,2,235, -3,1,7,101,110,118,51,54,54,50,242,2,242,2,242,18,158,2,101,8,95, -18,158,2,116,8,95,18,158,9,8,95,18,158,2,101,8,95,18,100,2,82, -8,98,36,35,34,8,90,16,12,8,97,11,3,1,4,103,52,54,54,243,3, -1,4,103,52,54,55,244,3,1,4,103,52,54,56,245,3,1,4,103,52,54, -57,246,3,1,4,103,52,55,48,247,3,1,7,101,110,118,51,54,55,56,248, -2,248,2,248,2,248,2,248,16,12,8,96,11,2,98,65,112,97,114,97,109, -249,63,118,97,108,250,2,234,2,235,3,1,7,101,110,118,51,54,55,57,251, -2,251,2,251,2,251,2,251,18,16,2,95,2,91,8,99,93,8,252,118,9, -95,9,8,252,118,9,2,92,18,158,2,93,8,98,18,16,2,95,2,91,8, -100,93,8,252,119,9,95,9,8,252,119,9,2,92,18,158,2,93,8,98,18, -16,2,95,2,91,8,101,93,8,252,122,9,95,9,8,252,122,9,2,92,18, -16,2,99,2,113,8,106,93,8,252,122,9,16,6,8,105,11,2,140,2,141, -3,1,7,101,110,118,51,54,57,54,252,252,0,2,252,252,0,16,4,8,104, -11,2,151,3,1,7,101,110,118,51,54,57,55,252,253,0,16,4,8,103,11, -2,153,3,1,7,101,110,118,51,54,57,56,252,254,0,16,4,8,102,11,2, -155,3,1,7,101,110,118,51,55,48,48,252,255,0,95,9,8,252,122,9,2, -92,18,102,2,93,8,109,36,35,34,8,90,8,97,8,96,16,4,8,108,11, -3,1,4,103,52,55,54,252,0,1,3,1,7,101,110,118,51,54,57,50,252, -1,1,16,4,8,107,11,2,233,3,1,7,101,110,118,51,54,57,51,252,2, -1,18,158,2,101,8,109,18,158,2,231,8,109,18,158,2,21,8,109,18,158, -2,101,8,109,18,158,2,19,8,109,18,158,95,16,2,158,2,232,8,109,9, -16,2,158,11,8,109,9,16,2,158,2,21,8,109,9,8,109,18,158,2,101, -8,109,18,158,2,101,8,109,18,158,2,116,8,109,18,158,9,8,109,18,158, -2,101,8,109,18,158,2,101,8,109,18,16,2,158,94,16,2,98,2,233,8, -113,93,8,252,117,9,16,4,8,112,11,3,1,8,119,115,116,109,112,52,55, -52,252,3,1,3,1,7,101,110,118,51,54,56,54,252,4,1,16,4,8,111, -11,3,1,4,103,52,55,53,252,5,1,3,1,7,101,110,118,51,55,48,55, -252,6,1,16,4,8,110,11,2,222,3,1,7,101,110,118,51,55,48,56,252, -7,1,9,16,2,158,2,113,8,113,9,8,113,95,9,8,252,117,9,2,189, -11,16,5,93,2,53,89,162,32,33,8,36,9,223,0,27,249,22,209,20,15, -159,35,32,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158, -37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39, -33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80,158,41,32,193, -249,80,158,42,33,248,80,158,43,34,195,27,248,80,158,44,35,196,28,248,80, -158,44,36,193,248,80,158,44,37,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,40,38,201, -27,250,22,61,198,199,200,27,20,15,159,42,33,39,250,22,209,20,15,159,45, -34,39,250,22,209,20,15,159,48,35,39,251,22,60,20,15,159,52,36,39,20, -15,159,52,37,39,250,22,209,20,15,159,55,38,39,249,22,60,20,15,159,57, -39,39,250,22,209,20,15,159,8,28,40,39,250,22,62,20,15,159,8,31,41, -39,248,22,80,23,23,20,15,159,8,31,42,39,20,15,159,8,28,43,39,20, -15,159,55,44,39,250,22,209,20,15,159,55,45,39,250,22,60,20,15,159,58, -46,39,20,15,159,58,47,39,250,22,209,20,15,159,8,29,48,39,251,22,62, -20,15,159,8,33,49,39,20,15,159,8,33,50,39,248,22,78,23,25,248,22, -52,23,25,20,15,159,8,29,51,39,20,15,159,55,52,39,20,15,159,48,53, -39,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120, -196,32,20,98,158,16,7,2,65,2,68,2,70,2,72,2,78,2,80,2,122, -16,22,18,98,2,82,8,115,36,35,34,16,4,8,114,11,2,236,3,1,7, -101,110,118,51,55,49,49,252,8,1,18,16,2,95,2,91,8,116,93,8,252, -135,9,95,9,8,252,135,9,2,92,18,100,2,93,8,119,36,35,34,8,114, -16,10,8,118,11,3,1,4,103,52,55,55,252,9,1,3,1,4,103,52,55, -56,252,10,1,3,1,4,103,52,55,57,252,11,1,3,1,4,103,52,56,48, -252,12,1,3,1,7,101,110,118,51,55,49,56,252,13,1,2,252,13,1,2, -252,13,1,2,252,13,1,16,10,8,117,11,2,98,69,98,111,111,108,45,101, -120,112,114,252,14,1,2,234,2,235,3,1,7,101,110,118,51,55,49,57,252, -15,1,2,252,15,1,2,252,15,1,2,252,15,1,18,158,2,101,8,119,18, -158,2,231,8,119,18,158,2,47,8,119,18,158,2,101,8,119,18,158,76,109, -97,107,101,45,116,104,114,101,97,100,45,99,101,108,108,252,16,1,8,119,18, -158,2,101,8,119,18,158,63,97,110,100,252,17,1,8,119,18,16,2,103,93, -16,2,158,10,8,119,9,8,121,8,28,59,58,57,56,55,13,16,3,33,2, -134,2,92,93,8,252,135,9,16,6,8,120,11,2,140,2,141,3,1,7,101, -110,118,51,55,50,53,252,18,1,2,252,18,1,95,9,8,252,135,9,2,92, -18,158,2,101,8,119,18,158,2,101,8,119,18,158,2,101,8,119,18,158,2, -0,8,119,18,158,93,16,2,158,2,51,8,119,9,8,119,18,158,2,101,8, -119,18,158,2,116,8,119,18,158,9,8,119,18,158,2,101,8,119,18,158,2, -101,8,119,18,158,2,101,8,119,11,16,5,93,2,86,253,22,60,248,247,22, -252,87,3,20,15,159,39,32,32,248,247,22,252,87,3,20,15,159,39,33,32, -248,247,22,252,87,3,20,15,159,39,34,32,248,22,60,248,247,22,252,87,3, -20,15,159,40,35,32,248,22,60,248,247,22,252,87,3,20,15,159,40,36,32, -10,40,20,98,158,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,59,2,61,27,89,162,32,33,34,62,119,104,252,19,1,223,1,89,162, -32,33,53,9,224,0,1,27,249,22,209,20,15,159,36,32,44,197,27,28,248, -80,158,36,32,194,249,80,158,37,33,248,80,158,38,34,196,27,248,80,158,39, -35,197,28,248,80,158,39,32,193,28,248,80,158,39,36,248,80,158,40,34,194, -27,248,80,158,40,35,194,28,248,80,158,40,32,193,249,80,158,41,33,248,80, -158,42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,37,193,248,80,158, -43,38,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,40,39,201,27,249,22,61,198,197,27,20,15,159,42, -33,44,250,22,209,20,15,159,45,34,44,250,22,209,20,15,159,48,35,44,250, -22,62,20,15,159,51,36,44,20,15,159,51,37,44,202,20,15,159,48,38,44, -195,27,28,248,80,158,37,32,195,249,80,158,38,33,248,80,158,39,34,197,27, -248,80,158,40,35,198,28,248,80,158,40,32,193,249,80,158,41,40,27,248,80, -158,43,34,196,28,248,80,158,43,37,193,248,22,8,89,162,32,33,39,9,224, -11,1,27,249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35,41,28, -248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158, -39,35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195, -248,80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28, -248,22,57,193,21,94,9,9,248,80,158,35,42,193,11,27,248,80,158,43,35, -196,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158,45,34,195,27,248, -80,158,46,35,196,28,248,80,158,46,37,193,248,80,158,46,38,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,39,44,28,203,20,15, -159,44,40,44,20,15,159,44,41,44,249,80,158,44,39,205,27,252,22,61,203, -200,204,201,202,27,20,15,159,46,42,44,91,159,33,11,90,161,33,32,11,83, -160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,16,2,3,1,250, -22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184, -2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32, -36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80,158, -35,43,21,95,2,116,94,94,61,108,252,20,1,95,64,108,105,115,116,252,21, -1,95,64,99,111,110,115,252,22,1,64,112,114,101,100,252,23,1,67,104,97, -110,100,108,101,114,252,24,1,2,113,94,64,98,111,100,121,252,25,1,97,2, -230,9,2,234,2,235,2,113,95,2,116,93,94,63,98,112,122,252,26,1,95, -2,232,11,2,47,96,2,231,2,47,94,2,252,16,1,11,93,94,67,99,97, -108,108,47,101,99,252,27,1,95,2,230,93,2,99,96,2,231,2,47,2,252, -26,1,95,2,56,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,28,1,95,2,230,93,61, -101,252,29,1,94,2,99,95,2,230,9,96,2,116,64,108,111,111,112,252,30, -1,93,94,2,252,20,1,2,252,20,1,96,2,132,94,94,65,110,117,108,108, -63,252,31,1,2,252,20,1,94,65,114,97,105,115,101,252,32,1,2,252,29, -1,94,94,94,64,99,97,97,114,252,33,1,2,252,20,1,2,252,29,1,63, -117,113,49,252,34,1,94,2,143,94,2,252,30,1,94,63,99,100,114,252,35, -1,2,252,20,1,95,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117, -101,115,252,36,1,2,252,25,1,95,2,230,64,97,114,103,115,252,37,1,95, -2,230,9,95,65,97,112,112,108,121,252,38,1,66,118,97,108,117,101,115,252, -39,1,2,252,37,1,20,15,159,35,43,44,89,162,32,32,8,100,9,225,6, -5,4,27,250,22,209,20,15,159,38,44,44,250,22,209,20,15,159,41,45,44, -250,22,60,20,15,159,44,46,44,250,22,209,20,15,159,47,47,44,249,22,60, -250,22,209,20,15,159,52,48,44,249,22,60,20,15,159,54,49,44,250,22,209, -20,15,159,57,50,44,249,22,56,20,15,159,59,51,44,250,22,2,89,162,33, -33,41,9,223,30,250,22,209,20,15,159,35,52,44,250,22,60,20,15,159,38, -53,44,248,22,52,200,248,22,78,200,20,15,159,35,54,44,248,22,87,23,29, -248,22,52,23,29,20,15,159,57,55,44,20,15,159,52,56,44,250,22,209,20, -15,159,52,57,44,249,22,60,20,15,159,54,58,44,250,22,209,20,15,159,57, -59,44,251,22,62,20,15,159,8,29,8,28,44,20,15,159,8,29,8,29,44, -248,22,89,23,28,248,22,90,23,28,20,15,159,57,8,30,44,20,15,159,52, -8,31,44,20,15,159,47,8,32,44,250,22,209,20,15,159,47,8,33,44,250, -22,60,20,15,159,50,8,34,44,20,15,159,50,8,35,44,250,22,209,20,15, -159,53,8,36,44,251,22,60,20,15,159,57,8,37,44,20,15,159,57,8,38, -44,20,15,159,57,8,39,44,250,22,209,20,15,159,8,28,8,40,44,248,22, -60,250,22,209,20,15,159,8,32,8,41,44,249,22,60,20,15,159,8,34,8, -42,44,250,22,209,20,15,159,8,37,8,43,44,250,22,60,20,15,159,8,40, -8,44,44,20,15,159,8,40,8,45,44,250,22,209,20,15,159,8,43,8,46, -44,251,22,60,20,15,159,8,47,8,47,44,20,15,159,8,47,8,48,44,20, -15,159,8,47,8,49,44,250,22,209,20,15,159,8,50,8,50,44,250,22,62, -20,15,159,8,53,8,51,44,250,22,209,20,15,159,8,56,8,52,44,248,22, -60,250,22,209,20,15,159,8,60,8,53,44,249,22,60,20,15,159,8,62,8, -54,44,250,22,209,20,15,159,8,65,8,55,44,250,22,60,20,15,159,8,68, -8,56,44,20,15,159,8,68,8,57,44,250,22,209,20,15,159,8,71,8,58, -44,249,22,60,20,15,159,8,73,8,59,44,250,22,209,20,15,159,8,76,8, -60,44,250,22,60,20,15,159,8,79,8,61,44,20,15,159,8,79,8,62,44, -250,22,209,20,15,159,8,82,8,63,44,251,22,60,20,15,159,8,86,8,64, -44,20,15,159,8,86,8,65,44,20,15,159,8,86,8,66,44,250,22,209,20, -15,159,8,89,8,67,44,251,22,62,20,15,159,8,93,8,68,44,20,15,159, -8,93,8,69,44,250,22,209,20,15,159,8,96,8,70,44,249,22,60,20,15, -159,8,98,8,71,44,248,22,78,23,97,20,15,159,8,96,8,72,44,20,15, -159,8,93,8,73,44,20,15,159,8,89,8,74,44,20,15,159,8,82,8,75, -44,20,15,159,8,76,8,76,44,20,15,159,8,71,8,77,44,20,15,159,8, -65,8,78,44,20,15,159,8,60,8,79,44,20,15,159,8,56,8,80,44,20, -15,159,8,53,8,81,44,20,15,159,8,50,8,82,44,20,15,159,8,43,8, -83,44,20,15,159,8,37,8,84,44,20,15,159,8,32,8,85,44,20,15,159, -8,28,8,86,44,20,15,159,53,8,87,44,20,15,159,47,8,88,44,20,15, -159,41,8,89,44,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9, -223,3,248,22,252,184,2,208,250,22,252,39,2,11,6,10,10,98,97,100,32, -115,121,110,116,97,120,197,249,22,7,248,195,10,248,195,11,37,20,98,158,16, -12,2,65,2,68,2,70,2,72,2,76,2,78,2,80,2,122,2,74,2,184, -2,186,2,125,16,90,18,99,2,82,8,124,36,35,34,16,4,8,123,11,74, -100,105,115,97,98,108,101,45,98,114,101,97,107,63,252,40,1,3,1,7,101, -110,118,51,55,50,57,252,41,1,16,4,8,122,11,2,236,3,1,7,101,110, -118,51,55,51,48,252,42,1,18,16,2,95,2,91,8,125,93,8,252,166,9, -95,9,8,252,166,9,2,92,18,101,2,93,8,128,36,35,34,8,123,8,122, -16,8,8,127,11,3,1,4,103,52,56,54,252,43,1,3,1,4,103,52,56, -55,252,44,1,3,1,4,103,52,56,56,252,45,1,3,1,7,101,110,118,51, -55,51,55,252,46,1,2,252,46,1,2,252,46,1,16,8,8,126,11,2,98, -2,234,2,235,3,1,7,101,110,118,51,55,51,56,252,47,1,2,252,47,1, -2,252,47,1,18,158,2,101,8,128,18,158,2,116,8,128,18,158,9,8,128, -18,158,2,101,8,128,18,101,2,82,8,131,36,35,34,8,123,8,122,16,12, -8,130,11,3,1,4,103,52,56,49,252,48,1,3,1,4,103,52,56,50,252, -49,1,3,1,4,103,52,56,51,252,50,1,3,1,4,103,52,56,52,252,51, -1,3,1,4,103,52,56,53,252,52,1,3,1,7,101,110,118,51,55,53,52, -252,53,1,2,252,53,1,2,252,53,1,2,252,53,1,2,252,53,1,16,12, -8,129,11,2,98,2,252,23,1,2,252,24,1,2,234,2,235,3,1,7,101, -110,118,51,55,53,53,252,54,1,2,252,54,1,2,252,54,1,2,252,54,1, -2,252,54,1,18,158,95,16,2,158,66,98,101,103,105,110,48,252,55,1,8, -131,9,16,2,158,94,16,2,158,94,16,2,158,64,99,100,97,114,252,56,1, -8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,16,2,158,2,252, -29,1,8,131,9,8,131,9,16,2,158,96,16,2,158,2,231,8,131,9,16, -2,158,2,47,8,131,9,16,2,158,2,252,26,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,231,8,131,9,16,2,158,2,47,8,131,9,16,2,158,2,252,26,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,56,1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,16,2, -158,2,252,29,1,8,131,9,8,131,9,8,131,9,8,131,18,16,2,95,2, -91,8,132,93,8,252,175,9,95,9,8,252,175,9,2,92,18,16,2,99,2, -113,8,137,93,8,252,175,9,16,6,8,136,11,2,140,2,141,3,1,7,101, -110,118,51,55,55,51,252,57,1,2,252,57,1,16,4,8,135,11,2,151,3, -1,7,101,110,118,51,55,55,52,252,58,1,16,4,8,134,11,2,153,3,1, -7,101,110,118,51,55,55,53,252,59,1,16,4,8,133,11,2,155,3,1,7, -101,110,118,51,55,55,55,252,60,1,95,9,8,252,175,9,2,92,18,158,2, -93,8,131,18,158,2,101,8,131,18,158,2,116,8,131,18,158,2,101,8,131, -18,158,2,101,8,131,18,158,2,252,20,1,8,131,18,158,2,101,8,131,18, -158,2,252,21,1,8,131,18,158,2,101,8,131,18,158,2,252,22,1,8,131, -18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2, -101,8,131,18,158,2,252,25,1,8,131,18,158,2,101,8,131,18,158,2,230, -8,131,18,158,9,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158, -2,101,8,131,18,158,2,101,8,131,18,158,2,116,8,131,18,158,93,16,2, -158,94,16,2,158,2,252,26,1,8,131,9,16,2,158,95,16,2,158,2,232, -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,101,8,131,18,158,2,231,8,131,18,158,2,47, -8,131,18,158,94,16,2,158,2,252,16,1,8,131,9,16,2,158,11,8,131, -9,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,252,27,1, -8,131,18,158,2,101,8,131,18,158,2,230,8,131,18,158,93,16,2,158,2, -99,8,131,9,8,131,18,158,2,101,8,131,18,158,2,231,8,131,18,158,2, -47,8,131,18,158,2,252,26,1,8,131,18,158,2,101,8,131,18,158,2,56, -8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,252,28,1,8, -131,18,158,2,101,8,131,18,158,2,230,8,131,18,158,93,16,2,158,2,252, -29,1,8,131,9,8,131,18,158,2,101,8,131,18,158,2,99,8,131,18,158, -2,101,8,131,18,158,2,230,8,131,18,158,9,8,131,18,158,2,101,8,131, -18,158,2,116,8,131,18,158,2,252,30,1,8,131,18,158,93,16,2,158,94, -16,2,158,2,252,20,1,8,131,9,16,2,158,2,252,20,1,8,131,9,8, -131,9,8,131,18,158,2,101,8,131,18,158,2,132,8,131,18,158,94,16,2, -158,94,16,2,158,2,252,31,1,8,131,9,16,2,158,2,252,20,1,8,131, -9,8,131,9,16,2,158,94,16,2,158,2,252,32,1,8,131,9,16,2,158, -2,252,29,1,8,131,9,8,131,9,8,131,18,158,2,101,8,131,18,158,94, -16,2,158,94,16,2,158,2,252,33,1,8,131,9,16,2,158,2,252,20,1, -8,131,9,8,131,9,16,2,158,2,252,29,1,8,131,9,8,131,18,158,2, -101,8,131,18,16,2,105,93,16,2,158,94,16,2,158,2,143,8,131,9,16, -2,158,94,16,2,158,2,252,30,1,8,131,9,16,2,158,94,16,2,158,2, -252,35,1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,8,131, -9,8,131,9,8,141,8,28,59,58,57,56,55,13,16,3,33,2,134,2,92, -93,8,252,175,9,16,6,8,140,11,2,140,2,141,2,252,57,1,2,252,57, -1,16,4,8,139,11,2,151,2,252,58,1,16,4,8,138,11,2,153,2,252, -59,1,95,9,8,252,175,9,2,92,18,158,2,101,8,131,18,158,2,101,8, -131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158, -2,101,8,131,18,158,2,101,8,131,18,16,2,158,93,16,2,158,95,16,2, -158,2,252,36,1,8,131,9,16,2,158,2,252,25,1,8,131,9,16,2,158, -95,16,2,158,2,230,8,131,9,16,2,158,2,252,37,1,8,131,9,16,2, -158,95,16,2,158,2,230,8,131,9,16,2,158,9,8,131,9,16,2,158,95, -16,2,158,2,252,38,1,8,131,9,16,2,158,2,252,39,1,8,131,9,16, -2,158,2,252,37,1,8,131,9,8,131,9,8,131,9,8,131,9,8,131,9, -8,141,95,9,8,252,175,9,2,92,18,158,2,101,8,131,18,158,2,101,8, -131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158, -2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,11,16,5,93,2, -55,89,162,32,33,57,9,223,0,27,249,22,209,20,15,159,35,32,46,196,27, -28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80, -158,38,35,197,28,248,80,158,38,32,193,28,248,80,158,38,36,248,80,158,39, -34,194,27,248,80,158,39,35,194,28,248,80,158,39,32,193,249,80,158,40,37, -248,80,158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11,11,11,11, -28,192,27,248,22,52,194,27,248,22,53,195,27,20,15,159,37,33,46,250,22, -209,20,15,159,40,34,46,250,22,209,20,15,159,43,35,46,250,22,62,20,15, -159,46,36,46,250,22,209,20,15,159,49,37,46,248,22,60,250,22,209,20,15, -159,53,38,46,249,22,60,20,15,159,55,39,46,23,19,20,15,159,53,40,46, -20,15,159,49,41,46,20,15,159,46,42,46,20,15,159,43,43,46,195,27,89, -162,32,32,51,2,119,225,3,4,2,27,89,162,32,32,36,2,119,223,1,250, -22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,195,27,28, -248,80,158,37,32,195,249,80,158,38,33,248,80,158,39,34,197,27,248,80,158, -40,35,198,28,248,80,158,40,32,193,249,80,158,41,37,27,248,80,158,43,34, -196,28,248,80,158,43,38,193,248,22,59,248,80,158,44,39,194,11,27,248,80, -158,43,35,196,28,248,80,158,43,32,193,249,80,158,44,37,248,80,158,45,34, -195,248,80,158,45,36,248,80,158,46,35,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,41,39,27,20,15, -159,42,44,46,250,22,209,20,15,159,45,45,46,199,195,87,94,249,22,3,89, -162,32,33,39,9,224,10,9,28,248,80,158,34,40,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, -196,198,194,27,248,80,158,42,41,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,204, -196,12,27,249,22,209,20,15,159,42,46,46,248,80,158,43,42,27,20,15,159, -44,47,46,250,22,209,20,15,159,47,48,46,201,195,27,28,248,80,158,42,38, -194,248,80,158,42,39,194,11,28,192,249,80,158,43,43,202,27,250,22,61,201, -200,198,27,20,15,159,45,49,46,91,159,33,11,90,161,33,32,11,83,160,38, -32,33,11,247,248,22,8,89,162,32,33,40,9,226,15,2,3,1,250,22,31, -89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184,2,248, -22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9, -224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80,158,35,44, -21,96,70,108,101,116,45,118,97,108,117,101,115,252,61,1,93,94,94,64,116, -101,109,112,252,62,1,2,113,2,235,95,64,115,101,116,33,252,63,1,62,105, -100,252,64,1,2,252,62,1,2,113,20,15,159,35,50,46,89,162,32,32,56, -9,225,6,5,4,27,250,22,209,20,15,159,38,51,46,250,22,209,20,15,159, -41,52,46,250,22,62,20,15,159,44,53,46,250,22,209,20,15,159,47,54,46, -248,22,60,250,22,209,20,15,159,51,55,46,249,22,60,248,22,80,23,20,248, -22,78,23,20,20,15,159,51,56,46,20,15,159,47,57,46,250,22,2,89,162, -33,33,41,9,223,15,250,22,209,20,15,159,35,58,46,250,22,60,20,15,159, -38,59,46,248,22,52,200,248,22,78,200,20,15,159,35,8,28,46,248,22,52, -206,248,22,80,206,20,15,159,41,8,29,46,197,89,162,32,32,33,9,223,0, -192,89,162,32,32,34,9,223,3,248,22,252,184,2,208,248,80,158,42,45,20, -15,159,42,8,30,46,247,196,247,193,27,28,248,80,158,37,32,196,249,80,158, -38,33,248,80,158,39,34,198,27,248,80,158,40,35,199,28,248,80,158,40,32, -193,249,80,158,41,37,27,248,80,158,43,34,196,28,248,80,158,43,32,193,249, -80,158,44,33,248,80,158,45,34,195,248,80,158,45,36,248,80,158,46,35,196, -11,27,248,80,158,43,35,196,28,248,80,158,43,32,193,249,80,158,44,37,248, -80,158,45,34,195,248,80,158,45,36,248,80,158,46,35,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,40,40, -194,27,249,22,61,195,196,27,20,15,159,41,8,31,46,250,22,209,20,15,159, -44,8,32,46,250,22,209,20,15,159,47,8,33,46,250,22,60,20,15,159,50, -8,34,46,248,22,53,203,248,22,52,203,20,15,159,47,8,35,46,195,247,196, -247,193,32,20,98,158,16,14,2,65,2,68,2,70,2,72,2,76,2,74,2, -78,2,80,2,120,30,252,65,1,2,88,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,66,1, -0,30,252,67,1,2,189,1,20,103,101,110,101,114,97,116,101,45,116,101,109, -112,111,114,97,114,105,101,115,252,68,1,0,2,122,2,125,2,188,16,36,18, -98,2,82,8,143,36,35,34,16,4,8,142,11,2,236,3,1,7,101,110,118, -51,55,56,54,252,69,1,18,16,2,95,2,91,8,144,93,8,252,197,9,95, -9,8,252,197,9,2,92,18,100,2,93,8,147,36,35,34,8,142,16,6,8, -146,11,3,1,4,103,52,57,56,252,70,1,3,1,4,103,52,57,57,252,71, -1,3,1,7,101,110,118,51,55,57,50,252,72,1,2,252,72,1,16,6,8, -145,11,2,98,2,235,3,1,7,101,110,118,51,55,57,51,252,73,1,2,252, -73,1,18,158,2,101,8,147,18,158,2,252,61,1,8,147,18,158,2,101,8, -147,18,158,2,101,8,147,18,158,9,8,147,18,158,2,101,8,147,18,158,2, -101,8,147,18,16,2,103,93,16,2,158,93,16,2,158,64,118,111,105,100,252, -74,1,8,147,9,8,147,9,8,149,8,28,59,58,57,56,55,13,16,3,33, -2,134,2,92,93,8,252,197,9,16,6,8,148,11,2,140,2,141,3,1,7, -101,110,118,51,55,57,55,252,75,1,2,252,75,1,95,9,8,252,197,9,2, -92,18,158,2,101,8,147,18,16,2,95,2,91,8,150,93,8,252,198,9,95, -9,8,252,198,9,2,92,18,100,2,93,8,153,36,35,34,8,142,16,8,8, -152,11,3,1,4,103,52,57,50,252,76,1,3,1,4,103,52,57,51,252,77, -1,3,1,4,103,52,57,52,252,78,1,3,1,7,101,110,118,51,56,48,55, -252,79,1,2,252,79,1,2,252,79,1,16,8,8,151,11,2,98,2,252,64, -1,2,235,3,1,7,101,110,118,51,56,48,56,252,80,1,2,252,80,1,2, -252,80,1,18,158,2,82,8,153,18,16,2,95,2,91,8,154,93,8,252,202, -9,95,9,8,252,202,9,2,92,18,158,2,93,8,153,18,16,2,95,2,91, -8,155,93,8,252,205,9,95,9,8,252,205,9,2,92,18,16,2,99,2,113, -8,160,93,8,252,205,9,16,6,8,159,11,2,140,2,141,3,1,7,101,110, -118,51,56,50,53,252,81,1,2,252,81,1,16,4,8,158,11,2,151,3,1, -7,101,110,118,51,56,50,54,252,82,1,16,4,8,157,11,2,153,3,1,7, -101,110,118,51,56,50,55,252,83,1,16,4,8,156,11,2,155,3,1,7,101, -110,118,51,56,50,57,252,84,1,95,9,8,252,205,9,2,92,18,102,2,93, -8,163,36,35,34,8,142,8,152,8,151,16,4,8,162,11,3,1,4,103,53, -48,50,252,85,1,3,1,7,101,110,118,51,56,50,49,252,86,1,16,4,8, -161,11,2,252,62,1,3,1,7,101,110,118,51,56,50,50,252,87,1,18,158, -2,101,8,163,18,158,2,252,61,1,8,163,18,158,2,101,8,163,18,158,2, -101,8,163,18,158,2,101,8,163,18,158,2,101,8,163,18,158,2,101,8,163, -18,158,2,252,63,1,8,163,18,158,2,101,8,163,18,158,2,101,8,163,18, -16,2,158,94,16,2,98,2,252,62,1,8,167,93,8,252,201,9,16,4,8, -166,11,3,1,8,119,115,116,109,112,53,48,48,252,88,1,3,1,7,101,110, -118,51,56,49,54,252,89,1,16,4,8,165,11,3,1,4,103,53,48,49,252, -90,1,3,1,7,101,110,118,51,56,51,56,252,91,1,16,4,8,164,11,2, -222,3,1,7,101,110,118,51,56,51,57,252,92,1,9,16,2,158,2,113,8, -167,9,8,167,95,9,8,252,201,9,2,189,18,16,2,95,2,91,8,168,93, -8,252,208,9,95,9,8,252,208,9,2,92,18,100,2,93,8,171,36,35,34, -8,142,16,8,8,170,11,3,1,4,103,52,57,53,252,93,1,3,1,4,103, -52,57,54,252,94,1,3,1,4,103,52,57,55,252,95,1,3,1,7,101,110, -118,51,56,52,54,252,96,1,2,252,96,1,2,252,96,1,16,8,8,169,11, -2,98,2,252,64,1,2,235,3,1,7,101,110,118,51,56,52,55,252,97,1, -2,252,97,1,2,252,97,1,18,158,2,101,8,171,18,158,2,252,63,1,8, -171,18,158,2,101,8,171,11,16,5,93,2,63,89,162,32,33,8,32,9,223, +78,195,27,248,22,80,196,27,249,22,61,195,196,27,20,15,159,39,33,45,250, +22,209,20,15,159,42,34,45,250,22,209,20,15,159,45,35,45,251,22,62,20, +15,159,49,36,45,20,15,159,49,37,45,248,22,53,204,248,22,52,204,20,15, +159,45,38,45,195,27,28,248,80,158,36,32,195,249,80,158,37,33,248,80,158, +38,34,197,27,248,80,158,39,35,198,28,248,80,158,39,32,193,249,80,158,40, +39,27,248,80,158,42,34,196,28,248,80,158,42,37,193,248,22,8,89,162,32, +33,39,9,224,10,1,27,249,22,2,89,162,32,33,45,9,224,4,5,249,80, +158,35,40,28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199, +27,248,80,158,39,35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80, +158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158, +37,38,196,28,248,22,57,193,21,94,9,9,248,80,158,35,41,193,11,27,248, +80,158,42,35,196,28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44, +34,195,27,248,80,158,45,35,196,28,248,80,158,45,37,193,248,80,158,45,38, +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,43,39,45, +249,22,1,22,65,250,22,2,22,59,248,22,216,27,20,15,159,50,40,45,250, +22,209,20,15,159,53,41,45,23,16,195,248,22,216,27,20,15,159,50,42,45, +250,22,209,20,15,159,53,43,45,23,15,195,27,28,248,80,158,43,37,194,248, +80,158,43,38,194,11,28,192,249,80,158,44,42,205,27,250,22,61,200,201,198, +27,20,15,159,46,44,45,91,159,33,11,90,161,33,32,11,83,160,38,32,33, +11,247,248,22,8,89,162,32,33,40,9,226,16,2,3,1,250,22,31,89,162, +32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252, +184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2, +3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80,158,35,43,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,231,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,232,11,2, +21,63,112,47,118,233,2,113,97,2,116,9,65,101,120,112,114,49,234,64,101, +120,112,114,235,2,113,20,15,159,35,45,45,89,162,32,32,54,9,225,6,5, +4,27,250,22,209,20,15,159,38,46,45,250,22,209,20,15,159,41,47,45,251, +22,60,20,15,159,45,48,45,20,15,159,45,49,45,250,22,209,20,15,159,48, +50,45,250,22,62,20,15,159,51,51,45,20,15,159,51,52,45,248,22,80,23, +18,20,15,159,48,53,45,250,22,209,20,15,159,48,54,45,251,22,62,20,15, +159,52,55,45,20,15,159,52,56,45,248,22,78,23,19,248,22,52,23,19,20, +15,159,48,57,45,20,15,159,41,58,45,197,89,162,32,32,33,9,223,0,192, +89,162,32,32,34,9,223,3,248,22,252,184,2,208,248,80,158,43,44,20,15, +159,43,59,45,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116, +97,120,197,32,20,98,158,16,13,2,65,2,68,2,70,2,72,2,76,2,78, +2,80,2,74,2,184,2,186,2,122,2,125,2,188,16,28,18,98,2,82,8, +91,36,35,34,16,4,8,90,11,63,115,116,120,236,3,1,7,101,110,118,51, +54,53,52,237,18,16,2,95,2,91,8,92,93,8,252,115,9,95,9,8,252, +115,9,2,92,18,100,2,93,8,95,36,35,34,8,90,16,8,8,94,11,3, +1,4,103,52,55,49,238,3,1,4,103,52,55,50,239,3,1,4,103,52,55, +51,240,3,1,7,101,110,118,51,54,54,49,241,2,241,2,241,16,8,8,93, +11,2,98,2,234,2,235,3,1,7,101,110,118,51,54,54,50,242,2,242,2, +242,18,158,2,101,8,95,18,158,2,116,8,95,18,158,9,8,95,18,158,2, +101,8,95,18,100,2,82,8,98,36,35,34,8,90,16,12,8,97,11,3,1, +4,103,52,54,54,243,3,1,4,103,52,54,55,244,3,1,4,103,52,54,56, +245,3,1,4,103,52,54,57,246,3,1,4,103,52,55,48,247,3,1,7,101, +110,118,51,54,55,56,248,2,248,2,248,2,248,2,248,16,12,8,96,11,2, +98,65,112,97,114,97,109,249,63,118,97,108,250,2,234,2,235,3,1,7,101, +110,118,51,54,55,57,251,2,251,2,251,2,251,2,251,18,16,2,95,2,91, +8,99,93,8,252,118,9,95,9,8,252,118,9,2,92,18,158,2,93,8,98, +18,16,2,95,2,91,8,100,93,8,252,119,9,95,9,8,252,119,9,2,92, +18,158,2,93,8,98,18,16,2,95,2,91,8,101,93,8,252,122,9,95,9, +8,252,122,9,2,92,18,16,2,99,2,113,8,106,93,8,252,122,9,16,6, +8,105,11,2,140,2,141,3,1,7,101,110,118,51,54,57,54,252,252,0,2, +252,252,0,16,4,8,104,11,2,151,3,1,7,101,110,118,51,54,57,55,252, +253,0,16,4,8,103,11,2,153,3,1,7,101,110,118,51,54,57,56,252,254, +0,16,4,8,102,11,2,155,3,1,7,101,110,118,51,55,48,48,252,255,0, +95,9,8,252,122,9,2,92,18,102,2,93,8,109,36,35,34,8,90,8,97, +8,96,16,4,8,108,11,3,1,4,103,52,55,54,252,0,1,3,1,7,101, +110,118,51,54,57,50,252,1,1,16,4,8,107,11,2,233,3,1,7,101,110, +118,51,54,57,51,252,2,1,18,158,2,101,8,109,18,158,2,231,8,109,18, +158,2,21,8,109,18,158,2,101,8,109,18,158,2,19,8,109,18,158,95,16, +2,158,2,232,8,109,9,16,2,158,11,8,109,9,16,2,158,2,21,8,109, +9,8,109,18,158,2,101,8,109,18,158,2,101,8,109,18,158,2,116,8,109, +18,158,9,8,109,18,158,2,101,8,109,18,158,2,101,8,109,18,16,2,158, +94,16,2,98,2,233,8,113,93,8,252,117,9,16,4,8,112,11,3,1,8, +119,115,116,109,112,52,55,52,252,3,1,3,1,7,101,110,118,51,54,56,54, +252,4,1,16,4,8,111,11,3,1,4,103,52,55,53,252,5,1,3,1,7, +101,110,118,51,55,48,55,252,6,1,16,4,8,110,11,2,222,3,1,7,101, +110,118,51,55,48,56,252,7,1,9,16,2,158,2,113,8,113,9,8,113,95, +9,8,252,117,9,2,189,11,16,5,93,2,62,89,162,32,33,8,36,9,223, 0,27,249,22,209,20,15,159,35,32,39,196,27,28,248,80,158,35,32,194,249, 80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158, 38,32,193,249,80,158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196, 28,248,80,158,41,32,193,249,80,158,42,33,248,80,158,43,34,195,27,248,80, 158,44,35,196,28,248,80,158,44,36,193,248,80,158,44,37,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,40,38,201,27,250,22,61,199,200,198,27,20,15,159,42,33,39, -250,22,209,20,15,159,45,34,39,250,22,209,20,15,159,48,35,39,249,22,60, -20,15,159,50,36,39,250,22,209,20,15,159,53,37,39,251,22,62,20,15,159, -57,38,39,250,22,209,20,15,159,8,28,39,39,248,22,60,248,22,78,23,21, -20,15,159,8,28,40,39,248,22,52,23,17,248,22,80,23,17,20,15,159,53, -41,39,20,15,159,48,42,39,195,250,22,252,39,2,11,6,10,10,98,97,100, +197,249,80,158,40,38,201,27,250,22,61,198,200,199,27,20,15,159,42,33,39, +250,22,209,20,15,159,45,34,39,250,22,209,20,15,159,48,35,39,251,22,60, +20,15,159,52,36,39,20,15,159,52,37,39,250,22,209,20,15,159,55,38,39, +249,22,60,20,15,159,57,39,39,250,22,209,20,15,159,8,28,40,39,250,22, +62,20,15,159,8,31,41,39,248,22,78,23,23,20,15,159,8,31,42,39,20, +15,159,8,28,43,39,20,15,159,55,44,39,250,22,209,20,15,159,55,45,39, +250,22,60,20,15,159,58,46,39,20,15,159,58,47,39,250,22,209,20,15,159, +8,29,48,39,251,22,62,20,15,159,8,33,49,39,20,15,159,8,33,50,39, +248,22,80,23,25,248,22,52,23,25,20,15,159,8,29,51,39,20,15,159,55, +52,39,20,15,159,48,53,39,195,250,22,252,39,2,11,6,10,10,98,97,100, 32,115,121,110,116,97,120,196,32,20,98,158,16,7,2,65,2,68,2,70,2, -72,2,78,2,80,2,122,16,11,18,98,2,82,8,173,36,35,34,16,4,8, -172,11,2,236,3,1,7,101,110,118,51,56,53,51,252,98,1,18,16,2,95, -2,91,8,174,93,8,252,218,9,95,9,8,252,218,9,2,92,18,100,2,93, -8,177,36,35,34,8,172,16,10,8,176,11,3,1,4,103,53,48,51,252,99, -1,3,1,4,103,53,48,52,252,100,1,3,1,4,103,53,48,53,252,101,1, -3,1,4,103,53,48,54,252,102,1,3,1,7,101,110,118,51,56,54,48,252, -103,1,2,252,103,1,2,252,103,1,2,252,103,1,16,10,8,175,11,2,98, -2,178,65,98,111,100,121,49,252,104,1,2,252,25,1,3,1,7,101,110,118, -51,56,54,49,252,105,1,2,252,105,1,2,252,105,1,2,252,105,1,18,158, -2,101,8,177,18,158,67,99,97,108,108,47,99,99,252,106,1,8,177,18,158, -2,101,8,177,18,158,2,230,8,177,18,158,2,101,8,177,18,158,2,101,8, -177,18,158,2,101,8,177,18,158,2,101,8,177,11,16,5,93,2,57,89,162, -32,33,55,9,223,0,27,249,22,209,20,15,159,35,32,41,196,27,28,248,80, -158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35, -197,28,248,80,158,38,32,193,249,80,158,39,33,248,80,158,40,34,195,27,248, -80,158,41,35,196,28,248,80,158,41,32,193,249,80,158,42,36,27,248,80,158, -44,34,196,28,248,80,158,44,37,193,248,22,59,248,80,158,45,38,194,11,27, -248,80,158,44,35,196,28,248,80,158,44,32,193,249,80,158,45,33,248,80,158, -46,34,195,27,248,80,158,47,35,196,28,248,80,158,47,37,193,248,80,158,47, -38,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,41,39,202,27,251, -22,61,200,199,201,202,27,20,15,159,43,33,41,91,159,33,11,90,161,33,32, -11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,13,2,3, -1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22, -252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162, -32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249, -80,158,35,40,21,98,2,116,9,95,73,100,101,102,105,110,101,45,115,116,114, -117,99,116,252,107,1,64,98,97,115,101,252,108,1,94,65,102,105,101,108,100, -252,109,1,2,113,2,252,104,1,2,252,25,1,2,113,20,15,159,35,34,41, -89,162,32,32,54,9,225,6,5,4,27,250,22,209,20,15,159,38,35,41,250, -22,209,20,15,159,41,36,41,252,22,62,20,15,159,46,37,41,20,15,159,46, -38,41,250,22,209,20,15,159,49,39,41,250,22,60,20,15,159,52,40,41,248, -22,88,23,19,248,22,87,23,19,20,15,159,49,41,41,248,22,52,205,248,22, -78,205,20,15,159,41,42,41,197,89,162,32,32,33,9,223,0,192,89,162,32, -32,34,9,223,3,248,22,252,184,2,208,250,22,252,39,2,11,6,10,10,98, -97,100,32,115,121,110,116,97,120,196,32,20,98,158,16,9,2,65,2,68,2, -70,2,72,2,74,2,78,2,80,2,122,2,125,16,11,18,98,2,82,8,179, -36,35,34,16,4,8,178,11,2,236,3,1,7,101,110,118,51,56,54,57,252, -110,1,18,16,2,95,2,91,8,180,93,8,252,231,9,95,9,8,252,231,9, -2,92,18,16,2,99,2,113,8,185,93,8,252,231,9,16,6,8,184,11,2, -140,2,141,3,1,7,101,110,118,51,56,56,54,252,111,1,2,252,111,1,16, -4,8,183,11,2,151,3,1,7,101,110,118,51,56,56,55,252,112,1,16,4, -8,182,11,2,153,3,1,7,101,110,118,51,56,56,56,252,113,1,16,4,8, -181,11,2,155,3,1,7,101,110,118,51,56,57,48,252,114,1,95,9,8,252, -231,9,2,92,18,100,2,93,8,188,36,35,34,8,178,16,12,8,187,11,3, -1,4,103,53,48,55,252,115,1,3,1,4,103,53,48,56,252,116,1,3,1, -4,103,53,48,57,252,117,1,3,1,4,103,53,49,48,252,118,1,3,1,4, -103,53,49,49,252,119,1,3,1,7,101,110,118,51,56,55,56,252,120,1,2, -252,120,1,2,252,120,1,2,252,120,1,2,252,120,1,16,12,8,186,11,2, -98,2,252,108,1,2,252,109,1,2,252,104,1,2,252,25,1,3,1,7,101, -110,118,51,56,55,57,252,121,1,2,252,121,1,2,252,121,1,2,252,121,1, -2,252,121,1,18,158,2,101,8,188,18,158,2,116,8,188,18,158,9,8,188, -18,158,2,101,8,188,18,158,2,252,107,1,8,188,18,158,2,101,8,188,18, -158,2,101,8,188,11,16,5,93,2,62,89,162,32,33,54,9,223,0,27,249, -22,209,20,15,159,35,32,46,196,27,28,248,80,158,35,32,194,249,80,158,36, -33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193, -28,248,80,158,38,36,248,80,158,39,34,194,27,248,80,158,39,35,194,28,248, -80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,27,248,80,158,42, -35,196,28,248,80,158,42,37,193,248,80,158,42,38,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,39,39, -200,27,249,22,61,197,198,27,20,15,159,41,33,46,250,22,209,20,15,159,44, -34,46,250,22,209,20,15,159,47,35,46,251,22,62,20,15,159,51,36,46,20, -15,159,51,37,46,248,22,53,204,248,22,52,204,20,15,159,47,38,46,195,27, -28,248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34,197,27,248,80, -158,39,35,198,28,248,80,158,39,32,193,249,80,158,40,40,27,248,80,158,42, -34,196,28,248,80,158,42,37,193,248,22,8,89,162,32,33,39,9,224,10,1, -27,249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35,41,28,248,80, -158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35, -200,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80, -158,41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22, -57,193,21,94,9,9,248,80,158,35,42,193,11,27,248,80,158,42,35,196,28, -248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,27,248,80,158, -45,35,196,28,248,80,158,45,37,193,248,80,158,45,38,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,43,39,46,248,80,158,44,43,27, -20,15,159,45,40,46,250,22,209,20,15,159,48,41,46,203,195,27,28,248,80, -158,43,37,194,248,80,158,43,38,194,11,28,192,249,80,158,44,39,205,27,252, -22,61,205,203,202,204,200,27,20,15,159,46,42,46,91,159,33,11,90,161,33, -32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,16,2, +72,2,78,2,80,2,122,16,22,18,98,2,82,8,115,36,35,34,16,4,8, +114,11,2,236,3,1,7,101,110,118,51,55,49,49,252,8,1,18,16,2,95, +2,91,8,116,93,8,252,135,9,95,9,8,252,135,9,2,92,18,100,2,93, +8,119,36,35,34,8,114,16,10,8,118,11,3,1,4,103,52,55,55,252,9, +1,3,1,4,103,52,55,56,252,10,1,3,1,4,103,52,55,57,252,11,1, +3,1,4,103,52,56,48,252,12,1,3,1,7,101,110,118,51,55,49,56,252, +13,1,2,252,13,1,2,252,13,1,2,252,13,1,16,10,8,117,11,2,98, +69,98,111,111,108,45,101,120,112,114,252,14,1,2,234,2,235,3,1,7,101, +110,118,51,55,49,57,252,15,1,2,252,15,1,2,252,15,1,2,252,15,1, +18,158,2,101,8,119,18,158,2,231,8,119,18,158,2,47,8,119,18,158,2, +101,8,119,18,158,76,109,97,107,101,45,116,104,114,101,97,100,45,99,101,108, +108,252,16,1,8,119,18,158,2,101,8,119,18,158,63,97,110,100,252,17,1, +8,119,18,16,2,103,93,16,2,158,10,8,119,9,8,121,8,28,59,58,57, +56,55,13,16,3,33,2,134,2,92,93,8,252,135,9,16,6,8,120,11,2, +140,2,141,3,1,7,101,110,118,51,55,50,53,252,18,1,2,252,18,1,95, +9,8,252,135,9,2,92,18,158,2,101,8,119,18,158,2,101,8,119,18,158, +2,101,8,119,18,158,2,0,8,119,18,158,93,16,2,158,2,51,8,119,9, +8,119,18,158,2,101,8,119,18,158,2,116,8,119,18,158,9,8,119,18,158, +2,101,8,119,18,158,2,101,8,119,18,158,2,101,8,119,11,16,5,93,2, +85,253,22,60,248,247,22,252,87,3,20,15,159,39,32,32,248,247,22,252,87, +3,20,15,159,39,33,32,248,247,22,252,87,3,20,15,159,39,34,32,248,22, +60,248,247,22,252,87,3,20,15,159,40,35,32,248,22,60,248,247,22,252,87, +3,20,15,159,40,36,32,10,40,20,98,158,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,56,2,57,27,89,162,32,33,34,62,119,104, +252,19,1,223,1,89,162,32,33,55,9,224,0,1,27,249,22,209,20,15,159, +36,32,44,197,27,28,248,80,158,36,32,194,249,80,158,37,33,248,80,158,38, +34,196,27,248,80,158,39,35,197,28,248,80,158,39,32,193,28,248,80,158,39, +36,248,80,158,40,34,194,27,248,80,158,40,35,194,28,248,80,158,40,32,193, +249,80,158,41,33,248,80,158,42,34,195,27,248,80,158,43,35,196,28,248,80, +158,43,37,193,248,80,158,43,38,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,40,39,201,27,249,22,61, +197,198,27,20,15,159,42,33,44,250,22,209,20,15,159,45,34,44,250,22,209, +20,15,159,48,35,44,251,22,62,20,15,159,52,36,44,20,15,159,52,37,44, +248,22,53,204,248,22,52,204,20,15,159,48,38,44,195,27,28,248,80,158,37, +32,195,249,80,158,38,33,248,80,158,39,34,197,27,248,80,158,40,35,198,28, +248,80,158,40,32,193,249,80,158,41,40,27,248,80,158,43,34,196,28,248,80, +158,43,37,193,248,22,8,89,162,32,33,39,9,224,11,1,27,249,22,2,89, +162,32,33,45,9,224,4,5,249,80,158,35,41,28,248,80,158,36,32,197,249, +80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158, +39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158,41,36,248,80, +158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,57,193,21,94,9, +9,248,80,158,35,42,193,11,27,248,80,158,43,35,196,28,248,80,158,43,32, +193,249,80,158,44,33,248,80,158,45,34,195,27,248,80,158,46,35,196,28,248, +80,158,46,37,193,248,80,158,46,38,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,39,44,28,203,20,15,159,44,40,44,20,15,159, +44,41,44,249,80,158,44,39,205,27,252,22,61,200,202,203,201,204,27,20,15, +159,46,42,44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248, +22,8,89,162,32,33,40,9,226,16,2,3,1,250,22,31,89,162,32,32,36, +9,225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89, +162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248, +22,252,181,2,193,248,22,252,186,2,193,249,80,158,35,43,21,95,2,116,94, +94,61,108,252,20,1,95,64,108,105,115,116,252,21,1,95,64,99,111,110,115, +252,22,1,64,112,114,101,100,252,23,1,67,104,97,110,100,108,101,114,252,24, +1,2,113,94,64,98,111,100,121,252,25,1,97,2,230,9,2,234,2,235,2, +113,95,2,116,93,94,63,98,112,122,252,26,1,95,2,232,11,2,47,96,2, +231,2,47,94,2,252,16,1,11,93,94,67,99,97,108,108,47,101,99,252,27, +1,95,2,230,93,2,99,96,2,231,2,47,2,252,26,1,95,2,52,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,28,1,95,2,230,93,61,101,252,29,1,94,2,99, +95,2,230,9,96,2,116,64,108,111,111,112,252,30,1,93,94,2,252,20,1, +2,252,20,1,96,2,132,94,94,65,110,117,108,108,63,252,31,1,2,252,20, +1,94,65,114,97,105,115,101,252,32,1,2,252,29,1,94,94,94,64,99,97, +97,114,252,33,1,2,252,20,1,2,252,29,1,63,117,113,49,252,34,1,94, +2,143,94,2,252,30,1,94,63,99,100,114,252,35,1,2,252,20,1,95,76, +99,97,108,108,45,119,105,116,104,45,118,97,108,117,101,115,252,36,1,2,252, +25,1,95,2,230,64,97,114,103,115,252,37,1,95,2,230,9,95,65,97,112, +112,108,121,252,38,1,66,118,97,108,117,101,115,252,39,1,2,252,37,1,20, +15,159,35,43,44,89,162,32,32,8,100,9,225,6,5,4,27,250,22,209,20, +15,159,38,44,44,250,22,209,20,15,159,41,45,44,250,22,60,20,15,159,44, +46,44,250,22,209,20,15,159,47,47,44,249,22,60,250,22,209,20,15,159,52, +48,44,249,22,60,20,15,159,54,49,44,250,22,209,20,15,159,57,50,44,249, +22,56,20,15,159,59,51,44,250,22,2,89,162,33,33,41,9,223,30,250,22, +209,20,15,159,35,52,44,250,22,60,20,15,159,38,53,44,248,22,52,200,248, +22,78,200,20,15,159,35,54,44,248,22,89,23,29,248,22,87,23,29,20,15, +159,57,55,44,20,15,159,52,56,44,250,22,209,20,15,159,52,57,44,249,22, +60,20,15,159,54,58,44,250,22,209,20,15,159,57,59,44,251,22,62,20,15, +159,8,29,8,28,44,20,15,159,8,29,8,29,44,248,22,78,23,28,248,22, +90,23,28,20,15,159,57,8,30,44,20,15,159,52,8,31,44,20,15,159,47, +8,32,44,250,22,209,20,15,159,47,8,33,44,250,22,60,20,15,159,50,8, +34,44,20,15,159,50,8,35,44,250,22,209,20,15,159,53,8,36,44,251,22, +60,20,15,159,57,8,37,44,20,15,159,57,8,38,44,20,15,159,57,8,39, +44,250,22,209,20,15,159,8,28,8,40,44,248,22,60,250,22,209,20,15,159, +8,32,8,41,44,249,22,60,20,15,159,8,34,8,42,44,250,22,209,20,15, +159,8,37,8,43,44,250,22,60,20,15,159,8,40,8,44,44,20,15,159,8, +40,8,45,44,250,22,209,20,15,159,8,43,8,46,44,251,22,60,20,15,159, +8,47,8,47,44,20,15,159,8,47,8,48,44,20,15,159,8,47,8,49,44, +250,22,209,20,15,159,8,50,8,50,44,250,22,62,20,15,159,8,53,8,51, +44,250,22,209,20,15,159,8,56,8,52,44,248,22,60,250,22,209,20,15,159, +8,60,8,53,44,249,22,60,20,15,159,8,62,8,54,44,250,22,209,20,15, +159,8,65,8,55,44,250,22,60,20,15,159,8,68,8,56,44,20,15,159,8, +68,8,57,44,250,22,209,20,15,159,8,71,8,58,44,249,22,60,20,15,159, +8,73,8,59,44,250,22,209,20,15,159,8,76,8,60,44,250,22,60,20,15, +159,8,79,8,61,44,20,15,159,8,79,8,62,44,250,22,209,20,15,159,8, +82,8,63,44,251,22,60,20,15,159,8,86,8,64,44,20,15,159,8,86,8, +65,44,20,15,159,8,86,8,66,44,250,22,209,20,15,159,8,89,8,67,44, +251,22,62,20,15,159,8,93,8,68,44,20,15,159,8,93,8,69,44,250,22, +209,20,15,159,8,96,8,70,44,249,22,60,20,15,159,8,98,8,71,44,248, +22,52,23,97,20,15,159,8,96,8,72,44,20,15,159,8,93,8,73,44,20, +15,159,8,89,8,74,44,20,15,159,8,82,8,75,44,20,15,159,8,76,8, +76,44,20,15,159,8,71,8,77,44,20,15,159,8,65,8,78,44,20,15,159, +8,60,8,79,44,20,15,159,8,56,8,80,44,20,15,159,8,53,8,81,44, +20,15,159,8,50,8,82,44,20,15,159,8,43,8,83,44,20,15,159,8,37, +8,84,44,20,15,159,8,32,8,85,44,20,15,159,8,28,8,86,44,20,15, +159,53,8,87,44,20,15,159,47,8,88,44,20,15,159,41,8,89,44,197,89, +162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2, +208,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197, +249,22,7,248,195,10,248,195,11,37,20,98,158,16,12,2,65,2,68,2,70, +2,72,2,76,2,78,2,80,2,122,2,74,2,184,2,186,2,125,16,90,18, +99,2,82,8,124,36,35,34,16,4,8,123,11,74,100,105,115,97,98,108,101, +45,98,114,101,97,107,63,252,40,1,3,1,7,101,110,118,51,55,50,57,252, +41,1,16,4,8,122,11,2,236,3,1,7,101,110,118,51,55,51,48,252,42, +1,18,16,2,95,2,91,8,125,93,8,252,166,9,95,9,8,252,166,9,2, +92,18,101,2,93,8,128,36,35,34,8,123,8,122,16,8,8,127,11,3,1, +4,103,52,56,54,252,43,1,3,1,4,103,52,56,55,252,44,1,3,1,4, +103,52,56,56,252,45,1,3,1,7,101,110,118,51,55,51,55,252,46,1,2, +252,46,1,2,252,46,1,16,8,8,126,11,2,98,2,234,2,235,3,1,7, +101,110,118,51,55,51,56,252,47,1,2,252,47,1,2,252,47,1,18,158,2, +101,8,128,18,158,2,116,8,128,18,158,9,8,128,18,158,2,101,8,128,18, +101,2,82,8,131,36,35,34,8,123,8,122,16,12,8,130,11,3,1,4,103, +52,56,49,252,48,1,3,1,4,103,52,56,50,252,49,1,3,1,4,103,52, +56,51,252,50,1,3,1,4,103,52,56,52,252,51,1,3,1,4,103,52,56, +53,252,52,1,3,1,7,101,110,118,51,55,53,52,252,53,1,2,252,53,1, +2,252,53,1,2,252,53,1,2,252,53,1,16,12,8,129,11,2,98,2,252, +23,1,2,252,24,1,2,234,2,235,3,1,7,101,110,118,51,55,53,53,252, +54,1,2,252,54,1,2,252,54,1,2,252,54,1,2,252,54,1,18,158,95, +16,2,158,66,98,101,103,105,110,48,252,55,1,8,131,9,16,2,158,94,16, +2,158,94,16,2,158,64,99,100,97,114,252,56,1,8,131,9,16,2,158,2, +252,20,1,8,131,9,8,131,9,16,2,158,2,252,29,1,8,131,9,8,131, +9,16,2,158,96,16,2,158,2,231,8,131,9,16,2,158,2,47,8,131,9, +16,2,158,2,252,26,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,231,8,131,9,16, +2,158,2,47,8,131,9,16,2,158,2,252,26,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,56,1,8,131,9,16, +2,158,2,252,20,1,8,131,9,8,131,9,16,2,158,2,252,29,1,8,131, +9,8,131,9,8,131,9,8,131,18,16,2,95,2,91,8,132,93,8,252,175, +9,95,9,8,252,175,9,2,92,18,16,2,99,2,113,8,137,93,8,252,175, +9,16,6,8,136,11,2,140,2,141,3,1,7,101,110,118,51,55,55,51,252, +57,1,2,252,57,1,16,4,8,135,11,2,151,3,1,7,101,110,118,51,55, +55,52,252,58,1,16,4,8,134,11,2,153,3,1,7,101,110,118,51,55,55, +53,252,59,1,16,4,8,133,11,2,155,3,1,7,101,110,118,51,55,55,55, +252,60,1,95,9,8,252,175,9,2,92,18,158,2,93,8,131,18,158,2,101, +8,131,18,158,2,116,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18, +158,2,252,20,1,8,131,18,158,2,101,8,131,18,158,2,252,21,1,8,131, +18,158,2,101,8,131,18,158,2,252,22,1,8,131,18,158,2,101,8,131,18, +158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,252, +25,1,8,131,18,158,2,101,8,131,18,158,2,230,8,131,18,158,9,8,131, +18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2, +101,8,131,18,158,2,116,8,131,18,158,93,16,2,158,94,16,2,158,2,252, +26,1,8,131,9,16,2,158,95,16,2,158,2,232,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,101,8,131,18,158,2,231,8,131,18,158,2,47,8,131,18,158,94,16,2, +158,2,252,16,1,8,131,9,16,2,158,11,8,131,9,8,131,18,158,2,101, +8,131,18,158,2,101,8,131,18,158,2,252,27,1,8,131,18,158,2,101,8, +131,18,158,2,230,8,131,18,158,93,16,2,158,2,99,8,131,9,8,131,18, +158,2,101,8,131,18,158,2,231,8,131,18,158,2,47,8,131,18,158,2,252, +26,1,8,131,18,158,2,101,8,131,18,158,2,52,8,131,18,158,2,101,8, +131,18,158,2,101,8,131,18,158,2,252,28,1,8,131,18,158,2,101,8,131, +18,158,2,230,8,131,18,158,93,16,2,158,2,252,29,1,8,131,9,8,131, +18,158,2,101,8,131,18,158,2,99,8,131,18,158,2,101,8,131,18,158,2, +230,8,131,18,158,9,8,131,18,158,2,101,8,131,18,158,2,116,8,131,18, +158,2,252,30,1,8,131,18,158,93,16,2,158,94,16,2,158,2,252,20,1, +8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,8,131,18,158,2, +101,8,131,18,158,2,132,8,131,18,158,94,16,2,158,94,16,2,158,2,252, +31,1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,16,2,158, +94,16,2,158,2,252,32,1,8,131,9,16,2,158,2,252,29,1,8,131,9, +8,131,9,8,131,18,158,2,101,8,131,18,158,94,16,2,158,94,16,2,158, +2,252,33,1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,16, +2,158,2,252,29,1,8,131,9,8,131,18,158,2,101,8,131,18,16,2,105, +93,16,2,158,94,16,2,158,2,143,8,131,9,16,2,158,94,16,2,158,2, +252,30,1,8,131,9,16,2,158,94,16,2,158,2,252,35,1,8,131,9,16, +2,158,2,252,20,1,8,131,9,8,131,9,8,131,9,8,131,9,8,141,8, +28,59,58,57,56,55,13,16,3,33,2,134,2,92,93,8,252,175,9,16,6, +8,140,11,2,140,2,141,2,252,57,1,2,252,57,1,16,4,8,139,11,2, +151,2,252,58,1,16,4,8,138,11,2,153,2,252,59,1,95,9,8,252,175, +9,2,92,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131, +18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2, +101,8,131,18,16,2,158,93,16,2,158,95,16,2,158,2,252,36,1,8,131, +9,16,2,158,2,252,25,1,8,131,9,16,2,158,95,16,2,158,2,230,8, +131,9,16,2,158,2,252,37,1,8,131,9,16,2,158,95,16,2,158,2,230, +8,131,9,16,2,158,9,8,131,9,16,2,158,95,16,2,158,2,252,38,1, +8,131,9,16,2,158,2,252,39,1,8,131,9,16,2,158,2,252,37,1,8, +131,9,8,131,9,8,131,9,8,131,9,8,131,9,8,141,95,9,8,252,175, +9,2,92,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131, +18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2, +101,8,131,18,158,2,101,8,131,11,16,5,93,2,61,89,162,32,33,57,9, +223,0,27,249,22,209,20,15,159,35,32,46,196,27,28,248,80,158,35,32,194, +249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80, +158,38,32,193,28,248,80,158,38,36,248,80,158,39,34,194,27,248,80,158,39, +35,194,28,248,80,158,39,32,193,249,80,158,40,37,248,80,158,41,34,195,248, +80,158,41,36,248,80,158,42,35,196,11,11,11,11,28,192,27,248,22,52,194, +27,248,22,53,195,27,20,15,159,37,33,46,250,22,209,20,15,159,40,34,46, +250,22,209,20,15,159,43,35,46,250,22,62,20,15,159,46,36,46,250,22,209, +20,15,159,49,37,46,248,22,60,250,22,209,20,15,159,53,38,46,249,22,60, +20,15,159,55,39,46,23,19,20,15,159,53,40,46,20,15,159,49,41,46,20, +15,159,46,42,46,20,15,159,43,43,46,195,27,89,162,32,32,51,2,119,225, +3,4,2,27,89,162,32,32,36,2,119,223,1,250,22,252,39,2,11,6,10, +10,98,97,100,32,115,121,110,116,97,120,195,27,28,248,80,158,37,32,195,249, +80,158,38,33,248,80,158,39,34,197,27,248,80,158,40,35,198,28,248,80,158, +40,32,193,249,80,158,41,37,27,248,80,158,43,34,196,28,248,80,158,43,38, +193,248,22,59,248,80,158,44,39,194,11,27,248,80,158,43,35,196,28,248,80, +158,43,32,193,249,80,158,44,37,248,80,158,45,34,195,248,80,158,45,36,248, +80,158,46,35,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,41,39,27,20,15,159,42,44,46,250,22,209, +20,15,159,45,45,46,199,195,87,94,249,22,3,89,162,32,33,39,9,224,10, +9,28,248,80,158,34,40,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,196,198,194,27,248,80,158, +42,41,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,204,196,12,27,249,22,209,20, +15,159,42,46,46,248,80,158,43,42,27,20,15,159,44,47,46,250,22,209,20, +15,159,47,48,46,201,195,27,28,248,80,158,42,38,194,248,80,158,42,39,194, +11,28,192,249,80,158,43,43,202,27,250,22,61,198,200,201,27,20,15,159,45, +49,46,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8, +89,162,32,33,40,9,226,15,2,3,1,250,22,31,89,162,32,32,36,9,225, +6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32, +33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252, +181,2,193,248,22,252,186,2,193,249,80,158,35,44,21,96,70,108,101,116,45, +118,97,108,117,101,115,252,61,1,93,94,94,64,116,101,109,112,252,62,1,2, +113,2,235,95,64,115,101,116,33,252,63,1,62,105,100,252,64,1,2,252,62, +1,2,113,20,15,159,35,50,46,89,162,32,32,56,9,225,6,5,4,27,250, +22,209,20,15,159,38,51,46,250,22,209,20,15,159,41,52,46,250,22,62,20, +15,159,44,53,46,250,22,209,20,15,159,47,54,46,248,22,60,250,22,209,20, +15,159,51,55,46,249,22,60,248,22,52,23,20,248,22,78,23,20,20,15,159, +51,56,46,20,15,159,47,57,46,250,22,2,89,162,33,33,41,9,223,15,250, +22,209,20,15,159,35,58,46,250,22,60,20,15,159,38,59,46,248,22,52,200, +248,22,78,200,20,15,159,35,8,28,46,248,22,80,206,248,22,52,206,20,15, +159,41,8,29,46,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9, +223,3,248,22,252,184,2,208,248,80,158,42,45,20,15,159,42,8,30,46,247, +196,247,193,27,28,248,80,158,37,32,196,249,80,158,38,33,248,80,158,39,34, +198,27,248,80,158,40,35,199,28,248,80,158,40,32,193,249,80,158,41,37,27, +248,80,158,43,34,196,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158, +45,34,195,248,80,158,45,36,248,80,158,46,35,196,11,27,248,80,158,43,35, +196,28,248,80,158,43,32,193,249,80,158,44,37,248,80,158,45,34,195,248,80, +158,45,36,248,80,158,46,35,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,40,40,194,27,249,22,61,196,195, +27,20,15,159,41,8,31,46,250,22,209,20,15,159,44,8,32,46,250,22,209, +20,15,159,47,8,33,46,250,22,60,20,15,159,50,8,34,46,248,22,52,203, +248,22,53,203,20,15,159,47,8,35,46,195,247,196,247,193,32,20,98,158,16, +14,2,65,2,68,2,70,2,72,2,76,2,74,2,78,2,80,2,120,30,252, +65,1,2,88,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,66,1,0,30,252,67,1,2,189, +1,20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101, +115,252,68,1,0,2,122,2,125,2,188,16,36,18,98,2,82,8,143,36,35, +34,16,4,8,142,11,2,236,3,1,7,101,110,118,51,55,56,54,252,69,1, +18,16,2,95,2,91,8,144,93,8,252,197,9,95,9,8,252,197,9,2,92, +18,100,2,93,8,147,36,35,34,8,142,16,6,8,146,11,3,1,4,103,52, +57,56,252,70,1,3,1,4,103,52,57,57,252,71,1,3,1,7,101,110,118, +51,55,57,50,252,72,1,2,252,72,1,16,6,8,145,11,2,98,2,235,3, +1,7,101,110,118,51,55,57,51,252,73,1,2,252,73,1,18,158,2,101,8, +147,18,158,2,252,61,1,8,147,18,158,2,101,8,147,18,158,2,101,8,147, +18,158,9,8,147,18,158,2,101,8,147,18,158,2,101,8,147,18,16,2,103, +93,16,2,158,93,16,2,158,64,118,111,105,100,252,74,1,8,147,9,8,147, +9,8,149,8,28,59,58,57,56,55,13,16,3,33,2,134,2,92,93,8,252, +197,9,16,6,8,148,11,2,140,2,141,3,1,7,101,110,118,51,55,57,55, +252,75,1,2,252,75,1,95,9,8,252,197,9,2,92,18,158,2,101,8,147, +18,16,2,95,2,91,8,150,93,8,252,198,9,95,9,8,252,198,9,2,92, +18,100,2,93,8,153,36,35,34,8,142,16,8,8,152,11,3,1,4,103,52, +57,50,252,76,1,3,1,4,103,52,57,51,252,77,1,3,1,4,103,52,57, +52,252,78,1,3,1,7,101,110,118,51,56,48,55,252,79,1,2,252,79,1, +2,252,79,1,16,8,8,151,11,2,98,2,252,64,1,2,235,3,1,7,101, +110,118,51,56,48,56,252,80,1,2,252,80,1,2,252,80,1,18,158,2,82, +8,153,18,16,2,95,2,91,8,154,93,8,252,202,9,95,9,8,252,202,9, +2,92,18,158,2,93,8,153,18,16,2,95,2,91,8,155,93,8,252,205,9, +95,9,8,252,205,9,2,92,18,16,2,99,2,113,8,160,93,8,252,205,9, +16,6,8,159,11,2,140,2,141,3,1,7,101,110,118,51,56,50,53,252,81, +1,2,252,81,1,16,4,8,158,11,2,151,3,1,7,101,110,118,51,56,50, +54,252,82,1,16,4,8,157,11,2,153,3,1,7,101,110,118,51,56,50,55, +252,83,1,16,4,8,156,11,2,155,3,1,7,101,110,118,51,56,50,57,252, +84,1,95,9,8,252,205,9,2,92,18,102,2,93,8,165,36,35,34,8,142, +16,8,8,164,11,2,252,76,1,2,252,77,1,2,252,78,1,2,252,79,1, +2,252,79,1,2,252,79,1,16,8,8,163,11,2,98,2,252,64,1,2,235, +2,252,80,1,2,252,80,1,2,252,80,1,16,4,8,162,11,3,1,4,103, +53,48,50,252,85,1,3,1,7,101,110,118,51,56,50,49,252,86,1,16,4, +8,161,11,2,252,62,1,3,1,7,101,110,118,51,56,50,50,252,87,1,18, +158,2,101,8,165,18,158,2,252,61,1,8,165,18,158,2,101,8,165,18,158, +2,101,8,165,18,158,2,101,8,165,18,158,2,101,8,165,18,158,2,101,8, +165,18,158,2,252,63,1,8,165,18,158,2,101,8,165,18,158,2,101,8,165, +18,16,2,158,94,16,2,98,2,252,62,1,8,169,93,8,252,201,9,16,4, +8,168,11,3,1,8,119,115,116,109,112,53,48,48,252,88,1,3,1,7,101, +110,118,51,56,49,54,252,89,1,16,4,8,167,11,3,1,4,103,53,48,49, +252,90,1,3,1,7,101,110,118,51,56,51,56,252,91,1,16,4,8,166,11, +2,222,3,1,7,101,110,118,51,56,51,57,252,92,1,9,16,2,158,2,113, +8,169,9,8,169,95,9,8,252,201,9,2,189,18,16,2,95,2,91,8,170, +93,8,252,208,9,95,9,8,252,208,9,2,92,18,100,2,93,8,173,36,35, +34,8,142,16,8,8,172,11,3,1,4,103,52,57,53,252,93,1,3,1,4, +103,52,57,54,252,94,1,3,1,4,103,52,57,55,252,95,1,3,1,7,101, +110,118,51,56,52,54,252,96,1,2,252,96,1,2,252,96,1,16,8,8,171, +11,2,98,2,252,64,1,2,235,3,1,7,101,110,118,51,56,52,55,252,97, +1,2,252,97,1,2,252,97,1,18,158,2,101,8,173,18,158,2,252,63,1, +8,173,18,158,2,101,8,173,11,16,5,93,2,58,89,162,32,33,8,32,9, +223,0,27,249,22,209,20,15,159,35,32,39,196,27,28,248,80,158,35,32,194, +249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80, +158,38,32,193,249,80,158,39,33,248,80,158,40,34,195,27,248,80,158,41,35, +196,28,248,80,158,41,32,193,249,80,158,42,33,248,80,158,43,34,195,27,248, +80,158,44,35,196,28,248,80,158,44,36,193,248,80,158,44,37,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,40,38,201,27,250,22,61,200,199,198,27,20,15,159,42,33, +39,250,22,209,20,15,159,45,34,39,250,22,209,20,15,159,48,35,39,249,22, +60,20,15,159,50,36,39,250,22,209,20,15,159,53,37,39,251,22,62,20,15, +159,57,38,39,250,22,209,20,15,159,8,28,39,39,248,22,60,248,22,52,23, +21,20,15,159,8,28,40,39,248,22,78,23,17,248,22,80,23,17,20,15,159, +53,41,39,20,15,159,48,42,39,195,250,22,252,39,2,11,6,10,10,98,97, +100,32,115,121,110,116,97,120,196,32,20,98,158,16,7,2,65,2,68,2,70, +2,72,2,78,2,80,2,122,16,11,18,98,2,82,8,175,36,35,34,16,4, +8,174,11,2,236,3,1,7,101,110,118,51,56,53,51,252,98,1,18,16,2, +95,2,91,8,176,93,8,252,218,9,95,9,8,252,218,9,2,92,18,100,2, +93,8,179,36,35,34,8,174,16,10,8,178,11,3,1,4,103,53,48,51,252, +99,1,3,1,4,103,53,48,52,252,100,1,3,1,4,103,53,48,53,252,101, +1,3,1,4,103,53,48,54,252,102,1,3,1,7,101,110,118,51,56,54,48, +252,103,1,2,252,103,1,2,252,103,1,2,252,103,1,16,10,8,177,11,2, +98,2,178,65,98,111,100,121,49,252,104,1,2,252,25,1,3,1,7,101,110, +118,51,56,54,49,252,105,1,2,252,105,1,2,252,105,1,2,252,105,1,18, +158,2,101,8,179,18,158,67,99,97,108,108,47,99,99,252,106,1,8,179,18, +158,2,101,8,179,18,158,2,230,8,179,18,158,2,101,8,179,18,158,2,101, +8,179,18,158,2,101,8,179,18,158,2,101,8,179,11,16,5,93,2,63,89, +162,32,33,55,9,223,0,27,249,22,209,20,15,159,35,32,41,196,27,28,248, +80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38, +35,197,28,248,80,158,38,32,193,249,80,158,39,33,248,80,158,40,34,195,27, +248,80,158,41,35,196,28,248,80,158,41,32,193,249,80,158,42,36,27,248,80, +158,44,34,196,28,248,80,158,44,37,193,248,22,59,248,80,158,45,38,194,11, +27,248,80,158,44,35,196,28,248,80,158,44,32,193,249,80,158,45,33,248,80, +158,46,34,195,27,248,80,158,47,35,196,28,248,80,158,47,37,193,248,80,158, +47,38,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,41,39,202,27, +251,22,61,200,199,201,202,27,20,15,159,43,33,41,91,159,33,11,90,161,33, +32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,13,2, 3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247, 22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89, 162,32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193, -249,80,158,35,44,21,95,2,116,94,94,63,116,109,112,252,122,1,2,250,2, -113,95,2,116,93,94,64,115,119,97,112,252,123,1,96,2,230,9,96,2,116, -93,94,2,202,2,252,122,1,95,2,252,63,1,2,252,122,1,64,110,97,109, -101,252,124,1,95,2,252,63,1,2,252,124,1,2,202,2,113,96,72,100,121, -110,97,109,105,99,45,119,105,110,100,252,125,1,2,252,123,1,97,2,230,9, -2,252,104,1,2,252,25,1,2,113,2,252,123,1,20,15,159,35,43,46,89, -162,32,32,8,40,9,225,6,5,4,27,250,22,209,20,15,159,38,44,46,250, -22,209,20,15,159,41,45,46,250,22,60,20,15,159,44,46,46,250,22,2,89, -162,33,33,41,9,223,15,250,22,209,20,15,159,35,47,46,249,22,60,248,22, -52,199,248,22,78,199,20,15,159,35,48,46,248,22,89,206,248,22,90,206,250, -22,209,20,15,159,47,49,46,250,22,60,20,15,159,50,50,46,250,22,209,20, -15,159,53,51,46,248,22,60,250,22,209,20,15,159,57,52,46,249,22,60,20, -15,159,59,53,46,250,22,209,20,15,159,8,30,54,46,250,22,62,20,15,159, -8,33,55,46,20,15,159,8,33,56,46,252,22,2,89,162,33,33,51,9,223, -38,250,22,209,20,15,159,35,57,46,251,22,60,20,15,159,39,58,46,250,22, -209,20,15,159,42,59,46,248,22,60,250,22,209,20,15,159,46,8,28,46,249, -22,60,20,15,159,48,8,29,46,248,22,52,23,18,20,15,159,46,8,30,46, -20,15,159,42,8,31,46,250,22,209,20,15,159,42,8,32,46,250,22,60,20, -15,159,45,8,33,46,248,22,52,23,15,248,22,87,23,15,20,15,159,42,8, -34,46,250,22,209,20,15,159,42,8,35,46,250,22,62,20,15,159,45,8,36, -46,248,22,87,23,15,20,15,159,45,8,37,46,20,15,159,42,8,38,46,20, -15,159,35,8,39,46,248,22,89,23,37,248,22,89,23,37,248,22,52,23,37, -248,22,52,23,37,20,15,159,8,30,8,40,46,20,15,159,57,8,41,46,20, -15,159,53,8,42,46,250,22,209,20,15,159,53,8,43,46,251,22,62,20,15, -159,57,8,44,46,20,15,159,57,8,45,46,250,22,209,20,15,159,8,28,8, -46,46,251,22,62,20,15,159,8,32,8,47,46,20,15,159,8,32,8,48,46, -248,22,78,23,31,248,22,87,23,31,20,15,159,8,28,8,49,46,20,15,159, -57,8,50,46,20,15,159,53,8,51,46,20,15,159,47,8,52,46,20,15,159, -41,8,53,46,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223, -3,248,22,252,184,2,208,248,80,158,43,45,20,15,159,43,8,54,46,250,22, -252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,98, -158,16,14,2,65,2,68,2,70,2,72,2,76,2,78,2,80,2,122,2,74, -2,184,2,186,2,252,67,1,2,125,2,188,16,55,18,98,2,82,8,190,36, -35,34,16,4,8,189,11,2,236,3,1,7,101,110,118,51,56,57,55,252,126, -1,18,16,2,95,2,91,8,191,93,8,252,250,9,95,9,8,252,250,9,2, -92,18,100,2,93,8,194,36,35,34,8,189,16,8,8,193,11,3,1,4,103, -53,49,55,252,127,1,3,1,4,103,53,49,56,252,128,1,3,1,4,103,53, -49,57,252,129,1,3,1,7,101,110,118,51,57,48,52,252,130,1,2,252,130, -1,2,252,130,1,16,8,8,192,11,2,98,2,252,104,1,2,252,25,1,3, -1,7,101,110,118,51,57,48,53,252,131,1,2,252,131,1,2,252,131,1,18, -158,2,101,8,194,18,158,2,116,8,194,18,158,9,8,194,18,158,2,101,8, -194,18,100,2,82,8,197,36,35,34,8,189,16,12,8,196,11,3,1,4,103, -53,49,50,252,132,1,3,1,4,103,53,49,51,252,133,1,3,1,4,103,53, -49,52,252,134,1,3,1,4,103,53,49,53,252,135,1,3,1,4,103,53,49, -54,252,136,1,3,1,7,101,110,118,51,57,50,49,252,137,1,2,252,137,1, -2,252,137,1,2,252,137,1,2,252,137,1,16,12,8,195,11,2,98,2,252, -124,1,2,250,2,252,104,1,2,252,25,1,3,1,7,101,110,118,51,57,50, -50,252,138,1,2,252,138,1,2,252,138,1,2,252,138,1,2,252,138,1,18, -16,2,95,2,91,8,198,93,8,252,253,9,95,9,8,252,253,9,2,92,18, -158,2,93,8,197,18,16,2,95,2,91,8,199,93,8,252,0,10,95,9,8, -252,0,10,2,92,18,16,2,99,2,113,8,204,93,8,252,0,10,16,6,8, -203,11,2,140,2,141,3,1,7,101,110,118,51,57,51,56,252,139,1,2,252, -139,1,16,4,8,202,11,2,151,3,1,7,101,110,118,51,57,51,57,252,140, -1,16,4,8,201,11,2,153,3,1,7,101,110,118,51,57,52,48,252,141,1, -16,4,8,200,11,2,155,3,1,7,101,110,118,51,57,52,50,252,142,1,95, -9,8,252,0,10,2,92,18,102,2,93,8,207,36,35,34,8,189,8,196,8, -195,16,4,8,206,11,3,1,4,103,53,50,50,252,143,1,3,1,7,101,110, -118,51,57,51,52,252,144,1,16,4,8,205,11,2,252,122,1,3,1,7,101, -110,118,51,57,51,53,252,145,1,18,158,2,101,8,207,18,158,2,116,8,207, -18,158,2,101,8,207,18,158,2,101,8,207,18,158,2,101,8,207,18,158,2, -116,8,207,18,158,2,101,8,207,18,158,2,101,8,207,18,158,2,252,123,1, -8,207,18,158,2,101,8,207,18,158,2,230,8,207,18,158,9,8,207,18,158, -2,101,8,207,18,158,2,116,8,207,18,158,2,101,8,207,18,158,2,101,8, -207,18,158,2,202,8,207,18,158,2,101,8,207,18,158,2,101,8,207,18,158, -2,101,8,207,18,158,2,252,63,1,8,207,18,158,2,101,8,207,18,158,2, -101,8,207,18,158,2,252,63,1,8,207,18,16,2,106,93,16,2,158,2,202, -8,207,9,8,212,8,28,59,58,57,56,55,13,16,3,33,2,134,2,92,93, -8,252,0,10,16,6,8,211,11,2,140,2,141,2,252,139,1,2,252,139,1, -16,4,8,210,11,2,151,2,252,140,1,16,4,8,209,11,2,153,2,252,141, -1,16,4,8,208,11,64,118,97,108,115,252,146,1,3,1,7,101,110,118,51, -57,52,56,252,147,1,95,9,8,252,0,10,2,92,18,158,2,101,8,207,18, -158,2,101,8,207,18,158,2,101,8,207,18,158,2,101,8,207,18,158,2,101, -8,207,18,158,2,101,8,207,18,158,2,252,125,1,8,207,18,158,2,252,123, -1,8,207,18,158,2,101,8,207,18,158,2,230,8,207,18,158,9,8,207,18, -158,2,101,8,207,18,16,2,105,93,16,2,158,2,252,123,1,8,207,9,8, -213,8,28,59,58,57,56,55,13,16,3,33,2,134,2,92,93,8,252,0,10, -8,211,8,210,8,209,95,9,8,252,0,10,2,92,18,158,2,101,8,207,18, -158,2,101,8,207,18,158,2,101,8,207,18,16,2,158,94,16,2,98,2,252, -122,1,8,217,93,8,252,252,9,16,4,8,216,11,3,1,8,119,115,116,109, -112,53,50,48,252,148,1,3,1,7,101,110,118,51,57,50,57,252,149,1,16, -4,8,215,11,3,1,4,103,53,50,49,252,150,1,3,1,7,101,110,118,51, -57,53,51,252,151,1,16,4,8,214,11,2,222,3,1,7,101,110,118,51,57, -53,52,252,152,1,9,16,2,158,2,113,8,217,9,8,217,95,9,8,252,252, -9,2,189,11,16,5,93,2,58,89,162,32,33,8,43,9,223,0,27,249,22, -209,20,15,159,35,32,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33, -248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249, -80,158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80,158, -41,36,193,248,80,158,41,37,193,11,11,11,28,192,27,248,22,52,194,27,248, -22,78,195,27,248,22,80,196,249,80,158,39,38,200,27,249,22,61,197,198,27, -20,15,159,41,33,39,250,22,209,20,15,159,44,34,39,250,22,209,20,15,159, -47,35,39,250,22,62,20,15,159,50,36,39,250,22,209,20,15,159,53,37,39, -248,22,60,250,22,209,20,15,159,57,38,39,249,22,60,20,15,159,59,39,39, -250,22,209,20,15,159,8,30,40,39,250,22,62,20,15,159,8,33,41,39,250, -22,209,20,15,159,8,36,42,39,251,22,62,20,15,159,8,40,43,39,20,15, -159,8,40,44,39,248,22,53,23,33,248,22,52,23,33,20,15,159,8,36,45, -39,20,15,159,8,33,46,39,20,15,159,8,30,47,39,20,15,159,57,48,39, -20,15,159,53,49,39,20,15,159,50,50,39,20,15,159,47,51,39,195,250,22, -252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,32,20,98, -158,16,7,2,65,2,68,2,70,2,72,2,78,2,80,2,122,16,20,18,98, -2,82,8,219,36,35,34,16,4,8,218,11,2,236,3,1,7,101,110,118,51, -57,53,55,252,153,1,18,16,2,95,2,91,8,220,93,8,252,11,10,95,9, -8,252,11,10,2,92,18,100,2,93,8,223,36,35,34,8,218,16,8,8,222, -11,3,1,4,103,53,50,51,252,154,1,3,1,4,103,53,50,52,252,155,1, -3,1,4,103,53,50,53,252,156,1,3,1,7,101,110,118,51,57,54,51,252, -157,1,2,252,157,1,2,252,157,1,16,8,8,221,11,2,98,2,234,2,235, -3,1,7,101,110,118,51,57,54,52,252,158,1,2,252,158,1,2,252,158,1, -18,158,2,101,8,223,18,158,2,252,61,1,8,223,18,158,2,101,8,223,18, -158,2,101,8,223,18,158,96,16,2,158,2,112,8,223,9,16,2,158,63,99, -112,117,252,159,1,8,223,9,16,2,158,64,117,115,101,114,252,160,1,8,223, -9,16,2,158,62,103,99,252,161,1,8,223,9,8,223,18,158,2,101,8,223, -18,158,70,116,105,109,101,45,97,112,112,108,121,252,162,1,8,223,18,158,2, -101,8,223,18,158,2,230,8,223,18,158,9,8,223,18,158,2,101,8,223,18, -16,2,103,93,16,2,158,64,110,117,108,108,252,163,1,8,223,9,8,225,8, -28,59,58,57,56,55,13,16,3,33,2,134,2,92,93,8,252,11,10,16,6, -8,224,11,2,140,2,141,3,1,7,101,110,118,51,57,54,57,252,164,1,2, -252,164,1,95,9,8,252,11,10,2,92,18,158,2,101,8,223,18,158,2,101, -8,223,18,158,2,101,8,223,18,16,2,158,94,16,2,158,97,16,2,158,66, -112,114,105,110,116,102,252,165,1,8,223,9,16,2,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,8,223,9,16,2, -158,2,252,159,1,8,223,9,16,2,158,2,252,160,1,8,223,9,16,2,158, -2,252,161,1,8,223,9,8,223,9,16,2,158,95,16,2,158,2,252,38,1, -8,223,9,16,2,158,2,252,39,1,8,223,9,16,2,158,2,112,8,223,9, -8,223,9,8,225,95,9,8,252,11,10,2,92,18,158,2,101,8,223,11,100, -83,159,32,97,80,159,32,32,33,80,159,32,33,33,80,159,32,34,33,80,159, -32,35,33,80,159,32,36,33,27,247,22,252,113,2,87,94,28,192,28,248,22, -252,112,2,193,12,250,22,252,40,2,2,252,107,1,6,15,15,105,110,115,112, -101,99,116,111,114,32,111,114,32,35,102,195,12,91,159,37,11,90,161,37,32, -11,254,22,252,90,2,2,85,11,33,32,11,9,204,252,22,7,197,198,199,250, -22,252,92,2,203,32,61,112,252,166,1,250,22,252,93,2,204,32,2,252,166, -1,83,159,32,93,80,159,32,37,33,89,162,32,33,39,2,14,223,0,87,94, -28,248,80,159,33,34,34,194,12,250,22,252,40,2,2,14,6,7,7,112,114, -111,109,105,115,101,196,27,248,80,159,34,35,34,195,28,248,22,0,193,27,249, -22,6,195,22,59,87,94,28,248,22,0,248,80,159,36,35,34,197,249,80,159, -36,36,34,197,194,12,249,22,1,22,7,248,80,159,37,35,34,198,249,22,1, -22,7,194,83,159,32,93,80,159,32,38,33,89,162,32,32,36,2,16,223,0, -248,80,158,33,39,249,22,19,11,80,158,35,40,83,159,32,93,80,159,32,41, -33,89,162,32,34,40,2,23,223,0,87,95,28,248,22,252,222,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,32,198,199,28,28,248,22,0,195,249,22,34,196,32,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,33,198,199,20,14,159,80,158,32,40,193,247,194,83, -159,32,97,80,159,32,42,33,80,159,32,43,33,80,159,32,44,33,80,159,32, -45,33,80,159,32,46,33,252,22,252,90,2,2,86,11,33,32,11,83,159,32, -97,80,159,32,47,33,80,159,32,48,33,80,159,32,49,33,80,159,32,50,33, -80,159,32,51,33,27,247,22,252,113,2,87,94,28,192,28,248,22,252,9,2, -248,22,252,112,2,194,250,22,252,40,2,2,252,107,1,6,15,15,105,110,115, -112,101,99,116,111,114,32,111,114,32,35,102,195,12,12,91,159,37,11,90,161, -37,32,11,254,22,252,90,2,2,86,11,33,32,11,9,204,252,22,7,197,198, -199,250,22,252,92,2,203,32,64,99,101,108,108,252,167,1,250,22,252,93,2, -204,32,2,252,167,1,83,159,32,93,80,159,32,52,33,89,162,32,32,36,2, -45,223,0,248,80,159,33,43,34,249,22,19,11,80,158,35,53,83,159,32,93, -80,159,32,54,33,89,162,32,34,40,2,49,223,0,87,95,28,248,80,159,33, -44,34,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,32,198,199,28,28,248, -22,0,195,249,22,34,196,32,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,33,198,199, -83,158,36,20,93,94,20,14,159,80,158,32,53,249,80,159,34,45,34,195,32, -87,94,247,80,158,32,55,247,194,247,80,158,32,55,96,68,35,37,107,101,114, -110,101,108,252,168,1,2,84,2,83,2,18,96,2,252,168,1,2,66,2,88, -2,87,0}; - EVAL_ONE_SIZED_STR((char *)expr, 22262); +249,80,158,35,40,21,98,2,116,9,95,73,100,101,102,105,110,101,45,115,116, +114,117,99,116,252,107,1,64,98,97,115,101,252,108,1,94,65,102,105,101,108, +100,252,109,1,2,113,2,252,104,1,2,252,25,1,2,113,20,15,159,35,34, +41,89,162,32,32,54,9,225,6,5,4,27,250,22,209,20,15,159,38,35,41, +250,22,209,20,15,159,41,36,41,252,22,62,20,15,159,46,37,41,20,15,159, +46,38,41,250,22,209,20,15,159,49,39,41,250,22,60,20,15,159,52,40,41, +248,22,88,23,19,248,22,87,23,19,20,15,159,49,41,41,248,22,52,205,248, +22,78,205,20,15,159,41,42,41,197,89,162,32,32,33,9,223,0,192,89,162, +32,32,34,9,223,3,248,22,252,184,2,208,250,22,252,39,2,11,6,10,10, +98,97,100,32,115,121,110,116,97,120,196,32,20,98,158,16,9,2,65,2,68, +2,70,2,72,2,74,2,78,2,80,2,122,2,125,16,11,18,98,2,82,8, +181,36,35,34,16,4,8,180,11,2,236,3,1,7,101,110,118,51,56,54,57, +252,110,1,18,16,2,95,2,91,8,182,93,8,252,231,9,95,9,8,252,231, +9,2,92,18,16,2,99,2,113,8,187,93,8,252,231,9,16,6,8,186,11, +2,140,2,141,3,1,7,101,110,118,51,56,56,54,252,111,1,2,252,111,1, +16,4,8,185,11,2,151,3,1,7,101,110,118,51,56,56,55,252,112,1,16, +4,8,184,11,2,153,3,1,7,101,110,118,51,56,56,56,252,113,1,16,4, +8,183,11,2,155,3,1,7,101,110,118,51,56,57,48,252,114,1,95,9,8, +252,231,9,2,92,18,100,2,93,8,190,36,35,34,8,180,16,12,8,189,11, +3,1,4,103,53,48,55,252,115,1,3,1,4,103,53,48,56,252,116,1,3, +1,4,103,53,48,57,252,117,1,3,1,4,103,53,49,48,252,118,1,3,1, +4,103,53,49,49,252,119,1,3,1,7,101,110,118,51,56,55,56,252,120,1, +2,252,120,1,2,252,120,1,2,252,120,1,2,252,120,1,16,12,8,188,11, +2,98,2,252,108,1,2,252,109,1,2,252,104,1,2,252,25,1,3,1,7, +101,110,118,51,56,55,57,252,121,1,2,252,121,1,2,252,121,1,2,252,121, +1,2,252,121,1,18,158,2,101,8,190,18,158,2,116,8,190,18,158,9,8, +190,18,158,2,101,8,190,18,158,2,252,107,1,8,190,18,158,2,101,8,190, +18,158,2,101,8,190,11,16,5,93,2,53,89,162,32,33,54,9,223,0,27, +249,22,209,20,15,159,35,32,46,196,27,28,248,80,158,35,32,194,249,80,158, +36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32, +193,28,248,80,158,38,36,248,80,158,39,34,194,27,248,80,158,39,35,194,28, +248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,27,248,80,158, +42,35,196,28,248,80,158,42,37,193,248,80,158,42,38,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,39, +39,200,27,249,22,61,197,198,27,20,15,159,41,33,46,250,22,209,20,15,159, +44,34,46,250,22,209,20,15,159,47,35,46,251,22,62,20,15,159,51,36,46, +20,15,159,51,37,46,248,22,53,204,248,22,52,204,20,15,159,47,38,46,195, +27,28,248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34,197,27,248, +80,158,39,35,198,28,248,80,158,39,32,193,249,80,158,40,40,27,248,80,158, +42,34,196,28,248,80,158,42,37,193,248,22,8,89,162,32,33,39,9,224,10, +1,27,249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35,41,28,248, +80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158,39, +35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,248, +80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28,248, +22,57,193,21,94,9,9,248,80,158,35,42,193,11,27,248,80,158,42,35,196, +28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,27,248,80, +158,45,35,196,28,248,80,158,45,37,193,248,80,158,45,38,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,43,39,46,248,80,158,44,43, +27,20,15,159,45,40,46,250,22,209,20,15,159,48,41,46,203,195,27,28,248, +80,158,43,37,194,248,80,158,43,38,194,11,28,192,249,80,158,44,39,205,27, +252,22,61,205,203,202,200,204,27,20,15,159,46,42,46,91,159,33,11,90,161, +33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,16, +2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10, +247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193, +89,162,32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2, +193,249,80,158,35,44,21,95,2,116,94,94,63,116,109,112,252,122,1,2,250, +2,113,95,2,116,93,94,64,115,119,97,112,252,123,1,96,2,230,9,96,2, +116,93,94,2,202,2,252,122,1,95,2,252,63,1,2,252,122,1,64,110,97, +109,101,252,124,1,95,2,252,63,1,2,252,124,1,2,202,2,113,96,72,100, +121,110,97,109,105,99,45,119,105,110,100,252,125,1,2,252,123,1,97,2,230, +9,2,252,104,1,2,252,25,1,2,113,2,252,123,1,20,15,159,35,43,46, +89,162,32,32,8,40,9,225,6,5,4,27,250,22,209,20,15,159,38,44,46, +250,22,209,20,15,159,41,45,46,250,22,60,20,15,159,44,46,46,250,22,2, +89,162,33,33,41,9,223,15,250,22,209,20,15,159,35,47,46,249,22,60,248, +22,52,199,248,22,78,199,20,15,159,35,48,46,248,22,90,206,248,22,89,206, +250,22,209,20,15,159,47,49,46,250,22,60,20,15,159,50,50,46,250,22,209, +20,15,159,53,51,46,248,22,60,250,22,209,20,15,159,57,52,46,249,22,60, +20,15,159,59,53,46,250,22,209,20,15,159,8,30,54,46,250,22,62,20,15, +159,8,33,55,46,20,15,159,8,33,56,46,252,22,2,89,162,33,33,51,9, +223,38,250,22,209,20,15,159,35,57,46,251,22,60,20,15,159,39,58,46,250, +22,209,20,15,159,42,59,46,248,22,60,250,22,209,20,15,159,46,8,28,46, +249,22,60,20,15,159,48,8,29,46,248,22,52,23,18,20,15,159,46,8,30, +46,20,15,159,42,8,31,46,250,22,209,20,15,159,42,8,32,46,250,22,60, +20,15,159,45,8,33,46,248,22,52,23,15,248,22,87,23,15,20,15,159,42, +8,34,46,250,22,209,20,15,159,42,8,35,46,250,22,62,20,15,159,45,8, +36,46,248,22,87,23,15,20,15,159,45,8,37,46,20,15,159,42,8,38,46, +20,15,159,35,8,39,46,248,22,90,23,37,248,22,90,23,37,248,22,52,23, +37,248,22,52,23,37,20,15,159,8,30,8,40,46,20,15,159,57,8,41,46, +20,15,159,53,8,42,46,250,22,209,20,15,159,53,8,43,46,251,22,62,20, +15,159,57,8,44,46,20,15,159,57,8,45,46,250,22,209,20,15,159,8,28, +8,46,46,251,22,62,20,15,159,8,32,8,47,46,20,15,159,8,32,8,48, +46,248,22,78,23,31,248,22,87,23,31,20,15,159,8,28,8,49,46,20,15, +159,57,8,50,46,20,15,159,53,8,51,46,20,15,159,47,8,52,46,20,15, +159,41,8,53,46,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9, +223,3,248,22,252,184,2,208,248,80,158,43,45,20,15,159,43,8,54,46,250, +22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,32,20, +98,158,16,14,2,65,2,68,2,70,2,72,2,76,2,78,2,80,2,122,2, +74,2,184,2,186,2,252,67,1,2,125,2,188,16,55,18,98,2,82,8,192, +36,35,34,16,4,8,191,11,2,236,3,1,7,101,110,118,51,56,57,55,252, +126,1,18,16,2,95,2,91,8,193,93,8,252,250,9,95,9,8,252,250,9, +2,92,18,100,2,93,8,196,36,35,34,8,191,16,8,8,195,11,3,1,4, +103,53,49,55,252,127,1,3,1,4,103,53,49,56,252,128,1,3,1,4,103, +53,49,57,252,129,1,3,1,7,101,110,118,51,57,48,52,252,130,1,2,252, +130,1,2,252,130,1,16,8,8,194,11,2,98,2,252,104,1,2,252,25,1, +3,1,7,101,110,118,51,57,48,53,252,131,1,2,252,131,1,2,252,131,1, +18,158,2,101,8,196,18,158,2,116,8,196,18,158,9,8,196,18,158,2,101, +8,196,18,100,2,82,8,199,36,35,34,8,191,16,12,8,198,11,3,1,4, +103,53,49,50,252,132,1,3,1,4,103,53,49,51,252,133,1,3,1,4,103, +53,49,52,252,134,1,3,1,4,103,53,49,53,252,135,1,3,1,4,103,53, +49,54,252,136,1,3,1,7,101,110,118,51,57,50,49,252,137,1,2,252,137, +1,2,252,137,1,2,252,137,1,2,252,137,1,16,12,8,197,11,2,98,2, +252,124,1,2,250,2,252,104,1,2,252,25,1,3,1,7,101,110,118,51,57, +50,50,252,138,1,2,252,138,1,2,252,138,1,2,252,138,1,2,252,138,1, +18,16,2,95,2,91,8,200,93,8,252,253,9,95,9,8,252,253,9,2,92, +18,158,2,93,8,199,18,16,2,95,2,91,8,201,93,8,252,0,10,95,9, +8,252,0,10,2,92,18,16,2,99,2,113,8,206,93,8,252,0,10,16,6, +8,205,11,2,140,2,141,3,1,7,101,110,118,51,57,51,56,252,139,1,2, +252,139,1,16,4,8,204,11,2,151,3,1,7,101,110,118,51,57,51,57,252, +140,1,16,4,8,203,11,2,153,3,1,7,101,110,118,51,57,52,48,252,141, +1,16,4,8,202,11,2,155,3,1,7,101,110,118,51,57,52,50,252,142,1, +95,9,8,252,0,10,2,92,18,102,2,93,8,209,36,35,34,8,191,8,198, +8,197,16,4,8,208,11,3,1,4,103,53,50,50,252,143,1,3,1,7,101, +110,118,51,57,51,52,252,144,1,16,4,8,207,11,2,252,122,1,3,1,7, +101,110,118,51,57,51,53,252,145,1,18,158,2,101,8,209,18,158,2,116,8, +209,18,158,2,101,8,209,18,158,2,101,8,209,18,158,2,101,8,209,18,158, +2,116,8,209,18,158,2,101,8,209,18,158,2,101,8,209,18,158,2,252,123, +1,8,209,18,158,2,101,8,209,18,158,2,230,8,209,18,158,9,8,209,18, +158,2,101,8,209,18,158,2,116,8,209,18,158,2,101,8,209,18,158,2,101, +8,209,18,158,2,202,8,209,18,158,2,101,8,209,18,158,2,101,8,209,18, +158,2,101,8,209,18,158,2,252,63,1,8,209,18,158,2,101,8,209,18,158, +2,101,8,209,18,158,2,252,63,1,8,209,18,16,2,106,93,16,2,158,2, +202,8,209,9,8,214,8,28,59,58,57,56,55,13,16,3,33,2,134,2,92, +93,8,252,0,10,16,6,8,213,11,2,140,2,141,2,252,139,1,2,252,139, +1,16,4,8,212,11,2,151,2,252,140,1,16,4,8,211,11,2,153,2,252, +141,1,16,4,8,210,11,64,118,97,108,115,252,146,1,3,1,7,101,110,118, +51,57,52,56,252,147,1,95,9,8,252,0,10,2,92,18,158,2,101,8,209, +18,158,2,101,8,209,18,158,2,101,8,209,18,158,2,101,8,209,18,158,2, +101,8,209,18,158,2,101,8,209,18,158,2,252,125,1,8,209,18,158,2,252, +123,1,8,209,18,158,2,101,8,209,18,158,2,230,8,209,18,158,9,8,209, +18,158,2,101,8,209,18,16,2,105,93,16,2,158,2,252,123,1,8,209,9, +8,215,8,28,59,58,57,56,55,13,16,3,33,2,134,2,92,93,8,252,0, +10,8,213,8,212,8,211,95,9,8,252,0,10,2,92,18,158,2,101,8,209, +18,158,2,101,8,209,18,158,2,101,8,209,18,16,2,158,94,16,2,98,2, +252,122,1,8,219,93,8,252,252,9,16,4,8,218,11,3,1,8,119,115,116, +109,112,53,50,48,252,148,1,3,1,7,101,110,118,51,57,50,57,252,149,1, +16,4,8,217,11,3,1,4,103,53,50,49,252,150,1,3,1,7,101,110,118, +51,57,53,51,252,151,1,16,4,8,216,11,2,222,3,1,7,101,110,118,51, +57,53,52,252,152,1,9,16,2,158,2,113,8,219,9,8,219,95,9,8,252, +252,9,2,189,11,16,5,93,2,55,89,162,32,33,8,43,9,223,0,27,249, +22,209,20,15,159,35,32,39,196,27,28,248,80,158,35,32,194,249,80,158,36, +33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193, +249,80,158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80, +158,41,36,193,248,80,158,41,37,193,11,11,11,28,192,27,248,22,52,194,27, +248,22,78,195,27,248,22,80,196,249,80,158,39,38,200,27,249,22,61,197,198, +27,20,15,159,41,33,39,250,22,209,20,15,159,44,34,39,250,22,209,20,15, +159,47,35,39,250,22,62,20,15,159,50,36,39,250,22,209,20,15,159,53,37, +39,248,22,60,250,22,209,20,15,159,57,38,39,249,22,60,20,15,159,59,39, +39,250,22,209,20,15,159,8,30,40,39,250,22,62,20,15,159,8,33,41,39, +250,22,209,20,15,159,8,36,42,39,251,22,62,20,15,159,8,40,43,39,20, +15,159,8,40,44,39,248,22,53,23,33,248,22,52,23,33,20,15,159,8,36, +45,39,20,15,159,8,33,46,39,20,15,159,8,30,47,39,20,15,159,57,48, +39,20,15,159,53,49,39,20,15,159,50,50,39,20,15,159,47,51,39,195,250, +22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,32,20, +98,158,16,7,2,65,2,68,2,70,2,72,2,78,2,80,2,122,16,20,18, +98,2,82,8,221,36,35,34,16,4,8,220,11,2,236,3,1,7,101,110,118, +51,57,53,55,252,153,1,18,16,2,95,2,91,8,222,93,8,252,11,10,95, +9,8,252,11,10,2,92,18,100,2,93,8,225,36,35,34,8,220,16,8,8, +224,11,3,1,4,103,53,50,51,252,154,1,3,1,4,103,53,50,52,252,155, +1,3,1,4,103,53,50,53,252,156,1,3,1,7,101,110,118,51,57,54,51, +252,157,1,2,252,157,1,2,252,157,1,16,8,8,223,11,2,98,2,234,2, +235,3,1,7,101,110,118,51,57,54,52,252,158,1,2,252,158,1,2,252,158, +1,18,158,2,101,8,225,18,158,2,252,61,1,8,225,18,158,2,101,8,225, +18,158,2,101,8,225,18,158,96,16,2,158,2,112,8,225,9,16,2,158,63, +99,112,117,252,159,1,8,225,9,16,2,158,64,117,115,101,114,252,160,1,8, +225,9,16,2,158,62,103,99,252,161,1,8,225,9,8,225,18,158,2,101,8, +225,18,158,70,116,105,109,101,45,97,112,112,108,121,252,162,1,8,225,18,158, +2,101,8,225,18,158,2,230,8,225,18,158,9,8,225,18,158,2,101,8,225, +18,16,2,103,93,16,2,158,64,110,117,108,108,252,163,1,8,225,9,8,227, +8,28,59,58,57,56,55,13,16,3,33,2,134,2,92,93,8,252,11,10,16, +6,8,226,11,2,140,2,141,3,1,7,101,110,118,51,57,54,57,252,164,1, +2,252,164,1,95,9,8,252,11,10,2,92,18,158,2,101,8,225,18,158,2, +101,8,225,18,158,2,101,8,225,18,16,2,158,94,16,2,158,97,16,2,158, +66,112,114,105,110,116,102,252,165,1,8,225,9,16,2,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,8,225,9,16, +2,158,2,252,159,1,8,225,9,16,2,158,2,252,160,1,8,225,9,16,2, +158,2,252,161,1,8,225,9,8,225,9,16,2,158,95,16,2,158,2,252,38, +1,8,225,9,16,2,158,2,252,39,1,8,225,9,16,2,158,2,112,8,225, +9,8,225,9,8,227,95,9,8,252,11,10,2,92,18,158,2,101,8,225,11, +100,83,159,32,97,80,159,32,32,33,80,159,32,33,33,80,159,32,34,33,80, +159,32,35,33,80,159,32,36,33,27,247,22,252,113,2,87,94,28,192,28,248, +22,252,112,2,193,12,250,22,252,40,2,2,252,107,1,6,15,15,105,110,115, +112,101,99,116,111,114,32,111,114,32,35,102,195,12,91,159,37,11,90,161,37, +32,11,254,22,252,90,2,2,86,11,33,32,11,9,204,252,22,7,197,198,199, +250,22,252,92,2,203,32,61,112,252,166,1,250,22,252,93,2,204,32,2,252, +166,1,83,159,32,93,80,159,32,37,33,89,162,32,33,39,2,14,223,0,87, +94,28,248,80,159,33,34,34,194,12,250,22,252,40,2,2,14,6,7,7,112, +114,111,109,105,115,101,196,27,248,80,159,34,35,34,195,28,248,22,0,193,27, +249,22,6,195,22,59,87,94,28,248,22,0,248,80,159,36,35,34,197,249,80, +159,36,36,34,197,194,12,249,22,1,22,7,248,80,159,37,35,34,198,249,22, +1,22,7,194,83,159,32,93,80,159,32,38,33,89,162,32,32,36,2,16,223, +0,248,80,158,33,39,249,22,19,11,80,158,35,40,83,159,32,93,80,159,32, +41,33,89,162,32,34,40,2,23,223,0,87,95,28,248,22,252,222,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,32,198,199,28,28,248,22,0,195,249,22,34,196,32,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,33,198,199,20,14,159,80,158,32,40,193,247,194, +83,159,32,97,80,159,32,42,33,80,159,32,43,33,80,159,32,44,33,80,159, +32,45,33,80,159,32,46,33,252,22,252,90,2,2,85,11,33,32,11,83,159, +32,97,80,159,32,47,33,80,159,32,48,33,80,159,32,49,33,80,159,32,50, +33,80,159,32,51,33,27,247,22,252,113,2,87,94,28,192,28,248,22,252,9, +2,248,22,252,112,2,194,250,22,252,40,2,2,252,107,1,6,15,15,105,110, +115,112,101,99,116,111,114,32,111,114,32,35,102,195,12,12,91,159,37,11,90, +161,37,32,11,254,22,252,90,2,2,85,11,33,32,11,9,204,252,22,7,197, +198,199,250,22,252,92,2,203,32,64,99,101,108,108,252,167,1,250,22,252,93, +2,204,32,2,252,167,1,83,159,32,93,80,159,32,52,33,89,162,32,32,36, +2,45,223,0,248,80,159,33,43,34,249,22,19,11,80,158,35,53,83,159,32, +93,80,159,32,54,33,89,162,32,34,40,2,49,223,0,87,95,28,248,80,159, +33,44,34,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,32,198,199,28,28, +248,22,0,195,249,22,34,196,32,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,33,198, +199,83,158,36,20,93,94,20,14,159,80,158,32,53,249,80,159,34,45,34,195, +32,87,94,247,80,158,32,55,247,194,247,80,158,32,55,96,68,35,37,107,101, +114,110,101,108,252,168,1,2,84,2,83,2,18,96,2,252,168,1,2,66,2, +88,2,87,0}; + EVAL_ONE_SIZED_STR((char *)expr, 22326); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,252,150,1,252,94,49,159,32,20,98,158,16, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,252,150,1,252,94,49,159,32,20,98,158,16, 1,20,24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,66,35,37, 109,105,115,99,1,29,2,11,11,10,10,10,44,80,158,32,32,20,98,158,16, 47,30,3,2,2,72,112,97,116,104,45,115,116,114,105,110,103,63,4,254,1, @@ -3370,27 +3373,27 @@ 193,248,80,158,41,37,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,40,33,38,249,22,209,203,247, 22,48,27,249,22,209,20,15,159,41,34,38,249,22,209,204,247,22,48,27,249, -22,209,20,15,159,42,35,38,249,22,209,205,247,22,48,27,252,22,61,202,201, -199,198,200,27,20,15,159,42,36,38,250,22,209,20,15,159,45,37,38,250,22, +22,209,20,15,159,42,35,38,249,22,209,205,247,22,48,27,252,22,61,202,199, +201,198,200,27,20,15,159,42,36,38,250,22,209,20,15,159,45,37,38,250,22, 209,20,15,159,48,38,38,250,22,60,20,15,159,51,39,38,250,22,209,20,15, 159,54,40,38,248,22,60,250,22,209,20,15,159,58,41,38,249,22,56,248,22, 89,23,20,20,15,159,8,28,42,38,20,15,159,58,43,38,20,15,159,54,44, 38,250,22,209,20,15,159,54,45,38,251,22,60,20,15,159,58,46,38,250,22, 209,20,15,159,8,29,47,38,248,22,60,250,22,209,20,15,159,8,33,48,38, -249,22,60,248,22,87,23,27,250,22,209,20,15,159,8,38,49,38,250,22,60, +249,22,60,248,22,78,23,27,250,22,209,20,15,159,8,38,49,38,250,22,60, 20,15,159,8,41,50,38,248,22,52,23,33,250,22,209,20,15,159,8,44,51, 38,250,22,60,20,15,159,8,47,52,38,250,22,209,20,15,159,8,50,53,38, 248,22,60,250,22,209,20,15,159,8,54,54,38,249,22,60,248,22,90,23,48, 250,22,209,20,15,159,8,59,55,38,249,22,60,20,15,159,8,61,56,38,248, 22,89,23,53,20,15,159,8,59,57,38,20,15,159,8,54,58,38,20,15,159, 8,50,59,38,250,22,209,20,15,159,8,50,8,28,38,251,22,62,20,15,159, -8,54,8,29,38,20,15,159,8,54,8,30,38,248,22,90,23,46,248,22,78, +8,54,8,29,38,20,15,159,8,54,8,30,38,248,22,90,23,46,248,22,87, 23,46,20,15,159,8,50,8,31,38,20,15,159,8,44,8,32,38,20,15,159, 8,38,8,33,38,20,15,159,8,33,8,34,38,20,15,159,8,29,8,35,38, 250,22,209,20,15,159,8,29,8,36,38,250,22,60,20,15,159,8,32,8,37, 38,248,22,89,23,24,250,22,209,20,15,159,8,35,8,38,38,249,22,60,20, -15,159,8,37,8,39,38,248,22,87,23,29,20,15,159,8,35,8,40,38,20, -15,159,8,29,8,41,38,248,22,87,23,18,20,15,159,54,8,42,38,20,15, +15,159,8,37,8,39,38,248,22,78,23,29,20,15,159,8,35,8,40,38,20, +15,159,8,29,8,41,38,248,22,78,23,18,20,15,159,54,8,42,38,20,15, 159,48,8,43,38,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121, 110,116,97,120,196,32,20,98,158,16,6,30,99,65,35,37,115,116,120,100,69, 115,116,120,45,112,97,105,114,63,101,11,30,102,2,100,67,99,111,110,115,47, @@ -3401,15 +3404,15 @@ 37,100,101,102,105,110,101,113,9,11,159,70,35,37,109,101,109,116,114,97,99, 101,114,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,115, 9,11,159,73,35,37,109,111,114,101,45,115,99,104,101,109,101,116,9,11,16, -92,2,14,2,2,2,75,2,2,2,57,2,2,2,73,2,2,2,22,2,2, -2,79,2,2,2,87,2,2,2,81,2,2,2,61,2,2,2,83,2,2,2, -91,2,2,2,85,2,2,2,47,2,2,2,71,2,2,2,12,2,2,2,89, -2,2,2,10,2,2,2,69,2,2,2,51,2,2,2,18,2,2,2,8,2, -2,2,77,2,2,2,6,2,2,2,34,2,2,2,55,2,2,2,20,2,2, -2,95,2,2,2,36,2,2,2,65,2,2,2,93,2,2,2,49,2,2,2, -32,2,2,2,16,2,2,2,26,2,2,2,30,2,2,2,98,2,2,2,97, -2,2,2,24,2,2,2,40,2,2,2,67,2,2,2,53,2,2,2,28,2, -2,2,59,2,2,2,38,2,2,2,63,2,2,2,4,2,2,98,35,10,33, +92,2,22,2,2,2,57,2,2,2,73,2,2,2,51,2,2,2,87,2,2, +2,18,2,2,2,14,2,2,2,6,2,2,2,53,2,2,2,91,2,2,2, +20,2,2,2,59,2,2,2,61,2,2,2,12,2,2,2,63,2,2,2,69, +2,2,2,8,2,2,2,10,2,2,2,81,2,2,2,75,2,2,2,4,2, +2,2,79,2,2,2,47,2,2,2,71,2,2,2,77,2,2,2,83,2,2, +2,26,2,2,2,85,2,2,2,55,2,2,2,89,2,2,2,95,2,2,2, +65,2,2,2,93,2,2,2,49,2,2,2,32,2,2,2,16,2,2,2,30, +2,2,2,98,2,2,2,24,2,2,2,34,2,2,2,40,2,2,2,97,2, +2,2,67,2,2,2,28,2,2,2,36,2,2,2,38,2,2,98,35,10,33, 11,94,159,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,117, 9,11,159,2,100,9,11,16,0,96,34,8,254,1,11,16,0,16,4,33,11, 61,120,118,3,1,7,101,110,118,51,57,57,52,119,18,100,2,112,41,36,35, @@ -3905,7 +3908,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 12653); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,19,252,173,1,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,19,252,173,1,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,72,35,37,115,116, 120,109,122,45,98,111,100,121,1,29,2,11,11,18,95,11,35,98,33,10,32, 11,94,159,68,35,37,100,101,102,105,110,101,3,9,11,159,76,35,37,115,116, @@ -3930,7 +3933,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 442); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,91,252,159,6,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,91,252,159,6,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,68,109,122,115,99, 104,101,109,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16, 0,16,0,74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,3,10,16, @@ -3964,79 +3967,79 @@ 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,66,108,101,116,47,99,99,35,62,100,111,36,73,100,101,102,105,110,101, -45,115,116,114,117,99,116,37,75,113,117,97,115,105,115,121,110,116,97,120,47, -108,111,99,38,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,39, -73,108,101,116,114,101,99,45,115,121,110,116,97,120,40,72,108,101,116,45,115, -121,110,116,97,120,101,115,41,72,115,121,110,116,97,120,45,114,117,108,101,115, -42,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,43,72,115,121, -110,116,97,120,45,99,97,115,101,42,44,72,112,97,114,97,109,101,116,101,114, -105,122,101,45,73,119,105,116,104,45,104,97,110,100,108,101,114,115,46,74,119, -105,116,104,45,104,97,110,100,108,101,114,115,42,47,66,115,121,110,116,97,120, -48,66,100,101,102,105,110,101,49,77,100,101,102,105,110,101,45,102,111,114,45, -115,121,110,116,97,120,50,76,98,101,103,105,110,45,102,111,114,45,115,121,110, -116,97,120,51,73,100,101,102,105,110,101,45,115,121,110,116,97,120,52,70,113, -117,97,115,105,113,117,111,116,101,53,62,111,114,54,79,109,101,109,111,114,121, -45,116,114,97,99,101,45,108,97,109,98,100,97,55,65,100,101,108,97,121,56, -77,117,110,115,121,110,116,97,120,45,115,112,108,105,99,105,110,103,57,64,116, -105,109,101,58,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,59,64,99,97,115,101,60,63, -97,110,100,61,78,112,97,114,97,109,101,116,101,114,105,122,101,45,98,114,101, -97,107,62,71,115,101,116,33,45,118,97,108,117,101,115,63,70,108,101,116,45, -115,116,114,117,99,116,64,69,102,108,117,105,100,45,108,101,116,65,71,115,121, -110,116,97,120,45,99,97,115,101,66,70,108,101,116,45,115,121,110,116,97,120, -67,70,115,121,110,116,97,120,47,108,111,99,68,71,119,105,116,104,45,115,121, -110,116,97,120,69,68,117,110,115,121,110,116,97,120,70,71,113,117,97,115,105, -115,121,110,116,97,120,71,2,3,64,99,111,110,100,72,64,119,104,101,110,73, +116,34,71,115,121,110,116,97,120,45,99,97,115,101,35,70,115,121,110,116,97, +120,47,108,111,99,36,62,100,111,37,66,100,101,102,105,110,101,38,75,115,121, +110,116,97,120,45,105,100,45,114,117,108,101,115,39,70,108,101,116,45,115,121, +110,116,97,120,40,73,100,101,102,105,110,101,45,115,116,114,117,99,116,41,72, +112,97,114,97,109,101,116,101,114,105,122,101,42,75,108,101,116,114,101,99,45, +115,121,110,116,97,120,101,115,43,73,108,101,116,114,101,99,45,115,121,110,116, +97,120,44,72,108,101,116,45,115,121,110,116,97,120,101,115,45,73,119,105,116, +104,45,104,97,110,100,108,101,114,115,46,74,119,105,116,104,45,104,97,110,100, +108,101,114,115,42,47,66,115,121,110,116,97,120,48,79,109,101,109,111,114,121, +45,116,114,97,99,101,45,108,97,109,98,100,97,49,73,100,101,102,105,110,101, +45,115,121,110,116,97,120,50,72,115,121,110,116,97,120,45,99,97,115,101,42, +51,76,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120,52,70,113, +117,97,115,105,113,117,111,116,101,53,62,111,114,54,77,117,110,115,121,110,116, +97,120,45,115,112,108,105,99,105,110,103,55,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, +56,63,97,110,100,57,78,112,97,114,97,109,101,116,101,114,105,122,101,45,98, +114,101,97,107,58,75,113,117,97,115,105,115,121,110,116,97,120,47,108,111,99, +59,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97,120,60,71, +119,105,116,104,45,115,121,110,116,97,120,61,68,117,110,115,121,110,116,97,120, +62,71,115,101,116,33,45,118,97,108,117,101,115,63,70,108,101,116,45,115,116, +114,117,99,116,64,71,113,117,97,115,105,115,121,110,116,97,120,65,69,102,108, +117,105,100,45,108,101,116,66,64,99,97,115,101,67,64,116,105,109,101,68,65, +100,101,108,97,121,69,2,3,66,108,101,116,47,99,99,70,72,115,121,110,116, +97,120,45,114,117,108,101,115,71,64,99,111,110,100,72,64,119,104,101,110,73, 66,117,110,108,101,115,115,74,66,108,101,116,47,101,99,75,16,73,73,35,37, 109,111,114,101,45,115,99,104,101,109,101,76,2,76,66,35,37,109,105,115,99, 77,2,77,2,77,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109, 101,78,2,77,2,76,2,77,2,76,2,77,2,77,2,76,70,35,37,119,105, 116,104,45,115,116,120,79,2,77,65,35,37,115,116,120,80,2,77,2,77,2, 77,2,77,2,77,2,77,2,77,2,77,2,77,2,77,2,77,2,76,2,77, -2,77,2,77,2,76,2,76,74,35,37,100,101,102,105,110,101,45,101,116,45, -97,108,81,67,35,37,113,113,115,116,120,82,2,78,2,78,2,78,2,78,2, -78,68,35,37,115,116,120,108,111,99,83,2,76,2,76,2,76,69,35,37,115, -116,120,99,97,115,101,84,68,35,37,100,101,102,105,110,101,85,2,85,2,85, -2,85,71,35,37,113,113,45,97,110,100,45,111,114,86,2,86,2,77,2,76, -2,82,2,76,72,35,37,115,116,120,109,122,45,98,111,100,121,87,2,76,2, -86,2,76,2,76,2,76,2,76,2,83,2,78,2,83,2,79,2,82,2,82, -68,35,37,107,101,114,110,101,108,88,66,35,37,99,111,110,100,89,2,81,2, -81,2,81,16,73,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11, +2,77,2,77,68,35,37,115,116,120,108,111,99,81,2,81,2,76,68,35,37, +100,101,102,105,110,101,82,2,78,2,78,74,35,37,100,101,102,105,110,101,45, +101,116,45,97,108,83,2,76,2,78,2,78,2,78,2,76,2,76,69,35,37, +115,116,120,99,97,115,101,84,2,77,2,82,2,81,2,82,71,35,37,113,113, +45,97,110,100,45,111,114,85,2,85,67,35,37,113,113,115,116,120,86,72,35, +37,115,116,120,109,122,45,98,111,100,121,87,2,85,2,76,2,86,2,82,2, +79,2,86,2,76,2,76,2,86,2,76,2,76,2,76,2,76,68,35,37,107, +101,114,110,101,108,88,2,76,2,78,66,35,37,99,111,110,100,89,2,83,2, +83,2,83,16,73,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,3,2,60,2,61,2,62,2,63,2, -64,2,65,2,66,2,67,2,68,2,69,2,70,2,71,1,20,35,37,112,108, -97,105,110,45,109,111,100,117,108,101,45,98,101,103,105,110,90,2,72,2,73, +2,54,2,55,2,3,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,1,20,35,37,112,108,97,105,110,45, +109,111,100,117,108,101,45,98,101,103,105,110,90,2,70,2,71,2,72,2,73, 2,74,2,75,8,31,8,73,9,9,100,2,88,2,76,2,77,2,78,2,80, -2,87,2,82,2,85,9,0}; +2,87,2,86,2,82,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 1708); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,121,252,116,15,159,32,20,98,158,16,1,20, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,121,252,116,15,159,32,20,98,158,16,1,20, 24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,66,35,37,114,53, 114,115,1,29,2,11,11,10,10,10,33,80,158,32,32,20,98,158,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,33,11,16,24,64,99,111,110,100,5,65,35,37,116,111,112,6,66, -108,97,109,98,100,97,7,71,114,53,114,115,58,108,101,116,114,101,99,8,63, -108,101,116,9,64,108,101,116,42,10,70,108,101,116,45,115,121,110,116,97,120, -11,2,0,62,105,102,12,62,100,111,13,64,99,97,115,101,14,65,113,117,111, -116,101,15,62,111,114,16,64,115,101,116,33,17,67,117,110,113,117,111,116,101, -18,73,108,101,116,114,101,99,45,115,121,110,116,97,120,19,70,113,117,97,115, -105,113,117,111,116,101,20,65,100,101,108,97,121,21,76,117,110,113,117,111,116, -101,45,115,112,108,105,99,105,110,103,22,66,100,101,102,105,110,101,23,63,97, -110,100,24,65,35,37,97,112,112,25,73,100,101,102,105,110,101,45,115,121,110, -116,97,120,26,67,35,37,100,97,116,117,109,27,16,24,66,35,37,99,111,110, -100,28,68,35,37,107,101,114,110,101,108,29,2,29,11,2,29,2,29,76,35, -37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,30,2,29,2,29,73, -35,37,109,111,114,101,45,115,99,104,101,109,101,31,2,31,2,29,71,35,37, -113,113,45,97,110,100,45,111,114,32,2,29,2,29,2,30,2,32,2,31,2, -29,68,35,37,100,101,102,105,110,101,33,2,32,2,29,2,33,2,29,16,24, -2,5,2,6,2,7,66,108,101,116,114,101,99,34,2,9,2,10,2,11,2, -0,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,32,56,93,16,5,93,2,8,89, +108,97,109,98,100,97,7,62,100,111,8,71,114,53,114,115,58,108,101,116,114, +101,99,9,63,108,101,116,10,64,108,101,116,42,11,73,100,101,102,105,110,101, +45,115,121,110,116,97,120,12,2,0,62,105,102,13,65,113,117,111,116,101,14, +64,115,101,116,33,15,67,117,110,113,117,111,116,101,16,64,99,97,115,101,17, +70,113,117,97,115,105,113,117,111,116,101,18,76,117,110,113,117,111,116,101,45, +115,112,108,105,99,105,110,103,19,73,108,101,116,114,101,99,45,115,121,110,116, +97,120,20,66,100,101,102,105,110,101,21,70,108,101,116,45,115,121,110,116,97, +120,22,63,97,110,100,23,65,35,37,97,112,112,24,65,100,101,108,97,121,25, +62,111,114,26,67,35,37,100,97,116,117,109,27,16,24,66,35,37,99,111,110, +100,28,68,35,37,107,101,114,110,101,108,29,2,29,73,35,37,109,111,114,101, +45,115,99,104,101,109,101,30,11,2,29,2,29,68,35,37,100,101,102,105,110, +101,31,2,29,2,29,2,29,2,29,2,29,2,30,71,35,37,113,113,45,97, +110,100,45,111,114,32,2,29,76,35,37,115,116,120,99,97,115,101,45,115,99, +104,101,109,101,33,2,31,2,33,2,32,2,29,2,30,2,32,2,29,16,24, +2,5,2,6,2,7,2,8,66,108,101,116,114,101,99,34,2,10,2,11,2, +12,2,0,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,32,56,93,16,5,93,2,9,89, 162,32,33,8,32,9,223,0,27,28,248,80,158,34,32,195,249,80,158,35,33, 248,80,158,36,34,197,27,248,80,158,37,35,198,28,248,80,158,37,32,193,249, 80,158,38,36,27,248,80,158,40,34,196,28,248,80,158,40,37,193,248,22,8, @@ -4047,20 +4050,20 @@ 248,80,158,37,40,196,28,248,22,57,193,21,94,9,9,248,80,158,35,41,193, 11,27,248,80,158,40,35,196,28,248,80,158,40,37,193,248,80,158,40,40,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,39,42,200,27,250,22,61,200,198,199,27,20,15,159, +248,22,88,197,249,80,158,39,42,200,27,250,22,61,198,199,200,27,20,15,159, 41,32,44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22, 8,89,162,32,33,40,9,226,11,2,3,1,250,22,31,89,162,32,32,36,9, 225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162, 32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22, -252,181,2,193,248,22,252,186,2,193,249,80,158,35,43,21,99,2,8,6,19, +252,181,2,193,248,22,252,186,2,193,249,80,158,35,43,21,99,2,9,6,19, 19,103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,94, 64,118,97,114,49,35,63,46,46,46,36,9,94,94,2,35,65,105,110,105,116, 49,37,2,36,64,98,111,100,121,38,2,36,20,15,159,35,33,44,89,162,32, 32,52,9,225,6,5,4,27,250,22,209,20,15,159,38,34,44,250,22,209,20, 15,159,41,35,44,253,22,62,20,15,159,47,36,44,20,15,159,47,37,44,248, -22,52,206,20,15,159,47,38,44,250,22,2,89,162,33,33,41,9,223,18,250, +22,80,206,20,15,159,47,38,44,250,22,2,89,162,33,33,41,9,223,18,250, 22,209,20,15,159,35,39,44,249,22,60,248,22,52,199,248,22,78,199,20,15, -159,35,40,44,248,22,52,23,17,248,22,80,23,17,248,22,78,206,20,15,159, +159,35,40,44,248,22,80,23,17,248,22,78,23,17,248,22,52,206,20,15,159, 41,41,44,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3, 248,22,252,184,2,208,27,28,248,80,158,35,32,196,249,80,158,36,33,248,80, 158,37,34,198,27,248,80,158,38,35,199,28,248,80,158,38,32,193,28,27,248, @@ -4084,8 +4087,8 @@ 22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184, 2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32, 36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80,158, -35,43,21,95,2,9,94,94,2,35,2,4,2,36,97,2,9,94,94,65,116, -101,109,112,49,39,2,37,2,36,95,2,17,2,35,2,39,2,36,96,2,9, +35,43,21,95,2,10,94,94,2,35,2,4,2,36,97,2,10,94,94,65,116, +101,109,112,49,39,2,37,2,36,95,2,15,2,35,2,39,2,36,96,2,10, 9,2,38,2,36,20,15,159,35,43,44,89,162,32,32,8,29,9,225,6,5, 4,27,250,22,209,20,15,159,38,44,44,250,22,209,20,15,159,41,45,44,250, 22,60,20,15,159,44,46,44,249,22,2,89,162,33,33,40,9,223,14,250,22, @@ -4119,19 +4122,19 @@ 158,49,37,193,248,80,158,49,40,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,36,27,249,22,70,200,37,27,249,22,69,201,38,249,80,158,44,42,205, -27,252,22,61,200,202,201,204,203,27,20,15,159,46,8,31,44,91,159,33,11, +27,252,22,61,200,202,201,203,204,27,20,15,159,46,8,31,44,91,159,33,11, 90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9, 226,16,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33, 33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1, 248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252, -186,2,193,249,80,158,35,43,21,99,2,8,6,19,19,103,101,110,101,114,97, +186,2,193,249,80,158,35,43,21,99,2,9,6,19,19,103,101,110,101,114,97, 116,101,95,116,101,109,112,95,110,97,109,101,115,94,61,121,40,2,36,95,67, 110,101,119,116,101,109,112,41,64,116,101,109,112,42,2,36,94,94,2,35,2, 37,2,36,2,38,2,36,20,15,159,35,8,32,44,89,162,32,32,54,9,225, 6,5,4,27,250,22,209,20,15,159,38,8,33,44,250,22,209,20,15,159,41, 8,34,44,253,22,62,20,15,159,47,8,35,44,20,15,159,47,8,36,44,248, -22,90,206,250,22,209,20,15,159,50,8,37,44,249,22,56,20,15,159,52,8, -38,44,248,22,89,23,19,20,15,159,50,8,39,44,250,22,2,89,162,33,33, +22,89,206,250,22,209,20,15,159,50,8,37,44,249,22,56,20,15,159,52,8, +38,44,248,22,90,23,19,20,15,159,50,8,39,44,250,22,2,89,162,33,33, 41,9,223,18,250,22,209,20,15,159,35,8,40,44,249,22,60,248,22,52,199, 248,22,78,199,20,15,159,35,8,41,44,248,22,78,23,17,248,22,87,23,17, 248,22,52,206,20,15,159,41,8,42,44,197,89,162,32,32,33,9,223,0,192, @@ -4155,12 +4158,12 @@ 101,115,99,76,3,1,7,101,110,118,52,51,49,49,77,16,4,35,11,63,101, 120,110,78,3,1,7,101,110,118,52,51,49,51,79,95,9,8,252,52,11,2, 68,18,99,64,100,101,115,116,80,45,98,44,10,32,11,93,159,68,109,122,115, -99,104,101,109,101,81,9,11,16,4,2,8,2,2,2,4,2,2,98,43,10, +99,104,101,109,101,81,9,11,16,4,2,9,2,2,2,4,2,2,98,43,10, 33,11,93,159,2,81,9,11,16,0,96,42,8,254,1,11,16,0,16,8,41, 11,3,1,4,103,53,53,53,82,3,1,4,103,53,53,54,83,3,1,4,103, 53,53,55,84,3,1,7,101,110,118,52,51,48,50,85,2,85,2,85,16,8, 40,11,2,35,2,37,2,38,3,1,7,101,110,118,52,51,48,51,86,2,86, -2,86,18,158,63,99,116,120,87,45,18,158,2,8,45,18,158,6,19,19,103, +2,86,18,158,63,99,116,120,87,45,18,158,2,9,45,18,158,6,19,19,103, 101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,45,18,158, 9,45,18,158,2,87,45,18,158,2,87,45,18,158,2,87,45,18,16,2,95, 2,70,46,93,8,252,56,11,95,9,8,252,56,11,2,68,18,16,2,99,2, @@ -4172,7 +4175,7 @@ 48,92,3,1,4,103,53,53,49,93,3,1,4,103,53,53,50,94,3,1,4, 103,53,53,51,95,3,1,7,101,110,118,52,51,51,53,96,2,96,2,96,2, 96,16,10,52,11,2,39,2,35,2,37,2,38,3,1,7,101,110,118,52,51, -51,54,97,2,97,2,97,2,97,18,158,2,87,54,18,158,2,9,54,18,158, +51,54,97,2,97,2,97,2,97,18,158,2,87,54,18,158,2,10,54,18,158, 2,87,54,18,16,2,106,93,16,2,158,2,4,54,9,8,33,98,8,32,10, 32,11,94,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,98,9, 11,159,2,44,9,11,16,6,66,115,121,110,116,97,120,99,29,100,11,11,73, @@ -4185,8 +4188,8 @@ 71,2,72,2,88,2,88,16,4,57,11,2,74,2,89,16,4,56,11,2,76, 2,90,16,4,55,11,64,118,97,108,115,107,3,1,7,101,110,118,52,51,53, 49,108,95,9,8,252,56,11,2,68,18,158,2,87,54,18,158,2,87,54,18, -158,2,9,54,18,158,2,87,54,18,158,2,87,54,18,158,2,87,54,18,158, -2,17,54,18,158,2,87,54,18,158,2,87,54,18,158,2,9,54,18,158,9, +158,2,10,54,18,158,2,87,54,18,158,2,87,54,18,158,2,87,54,18,158, +2,15,54,18,158,2,87,54,18,158,2,87,54,18,158,2,10,54,18,158,9, 54,18,158,2,87,54,18,158,2,87,54,18,158,2,87,54,18,16,2,95,2, 70,8,34,93,8,252,61,11,95,9,8,252,61,11,2,68,18,16,2,99,2, 36,8,39,93,8,252,61,11,16,6,8,38,11,2,71,2,72,3,1,7,101, @@ -4199,7 +4202,7 @@ 1,4,103,53,52,56,118,3,1,7,101,110,118,52,51,55,53,119,2,119,2, 119,2,119,2,119,2,119,16,14,8,40,11,2,103,2,40,2,42,2,35,2, 37,2,38,3,1,7,101,110,118,52,51,55,54,120,2,120,2,120,2,120,2, -120,2,120,18,158,2,87,8,42,18,158,2,8,8,42,18,158,6,19,19,103, +120,2,120,18,158,2,87,8,42,18,158,2,9,8,42,18,158,6,19,19,103, 101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,8,42,18, 158,2,87,8,42,18,158,2,41,8,42,18,158,2,87,8,42,18,158,2,87, 8,42,18,158,2,87,8,42,18,158,2,87,8,42,11,93,83,159,32,93,80, @@ -4208,7 +4211,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 3969); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,5,93,159,32,20,98,158,16,1,20,24,65, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,5,93,159,32,20,98,158,16,1,20,24,65, 98,101,103,105,110,0,16,0,83,160,40,80,158,32,32,32,18,158,94,96,67, 114,101,113,117,105,114,101,1,34,10,11,158,95,158,64,111,110,108,121,2,34, 158,68,109,122,115,99,104,101,109,101,3,34,158,1,22,110,97,109,101,115,112, @@ -4216,7 +4219,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 104); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,3,73,159,33,20,98,158,16,1,20,24,65, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,3,73,159,33,20,98,158,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,40,80,158,32,32,33,18,158,94,96,78,114,101,113,117,105,114, 101,45,102,111,114,45,115,121,110,116,97,120,2,34,10,11,158,2,1,34,34, @@ -4224,7 +4227,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 84); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,52,2,66,159,36,20,98,158,16,0,16,0,248, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,6,51,48,49,46,49,53,2,66,159,36,20,98,158,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,211,2,0}; diff --git a/src/mzscheme/src/list.c b/src/mzscheme/src/list.c index 557d326af9..fc3c795f62 100644 --- a/src/mzscheme/src/list.c +++ b/src/mzscheme/src/list.c @@ -1140,15 +1140,25 @@ list_ref_prim(int argc, Scheme_Object *argv[]) static Scheme_Object * \ name (int argc, Scheme_Object *argv[]) \ { \ - Scheme_Object *list; \ - list = argv[1]; \ + Scheme_Object *list, *turtle; \ + list = turtle = argv[1]; \ while (SCHEME_PAIRP(list)) \ { \ if (comp (argv[0], SCHEME_CAR (list))) \ { \ - return (list); \ + return list; \ } \ list = SCHEME_CDR (list); \ + if (SCHEME_PAIRP(list)) { \ + if (comp (argv[0], SCHEME_CAR (list))) \ + { \ + return list; \ + } \ + if (SAME_OBJ(list, turtle)) break; \ + list = SCHEME_CDR (list); \ + turtle = SCHEME_CDR (turtle); \ + SCHEME_USE_FUEL(1); \ + } \ } \ if (!SCHEME_NULLP(list)) { \ scheme_raise_exn(MZEXN_FAIL_CONTRACT, \ @@ -1166,8 +1176,8 @@ GEN_MEM(member, member, scheme_equal) static Scheme_Object * \ name (int argc, Scheme_Object *argv[]) \ { \ - Scheme_Object *pair, *list; \ - list = argv[1]; \ + Scheme_Object *pair, *list, *turtle; \ + list = turtle = argv[1]; \ while (SCHEME_PAIRP (list)) \ { \ pair = SCHEME_CAR (list); \ @@ -1187,6 +1197,17 @@ name (int argc, Scheme_Object *argv[]) \ return (pair); \ } \ list = SCHEME_CDR (list); \ + if (SCHEME_PAIRP(list)) { \ + pair = SCHEME_CAR (list); \ + if (SCHEME_PAIRP(pair)) { \ + if (comp (argv[0], SCHEME_CAR (pair))) \ + return pair; \ + list = SCHEME_CDR (list); \ + if (SAME_OBJ(list, turtle)) break; \ + turtle = SCHEME_CDR (turtle); \ + SCHEME_USE_FUEL(1); \ + } \ + } \ } \ if (!SCHEME_NULLP(list)) {\ scheme_raise_exn(MZEXN_FAIL_CONTRACT, \ diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index ea9c504283..5a40328e3d 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -9,6 +9,6 @@ #define MZSCHEME_VERSION_MAJOR 301 -#define MZSCHEME_VERSION_MINOR 14 +#define MZSCHEME_VERSION_MINOR 15 -#define MZSCHEME_VERSION "301.14" _MZ_SPECIAL_TAG +#define MZSCHEME_VERSION "301.15" _MZ_SPECIAL_TAG