diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/raco/config.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/raco/config.scrbl index 2ff79caaf9..480b596b62 100644 --- a/pkgs/racket-pkgs/racket-doc/scribblings/raco/config.scrbl +++ b/pkgs/racket-pkgs/racket-doc/scribblings/raco/config.scrbl @@ -1,5 +1,6 @@ #lang scribble/doc @(require scribble/manual + "common.rkt" (for-label racket/base racket/contract setup/dirs)) @@ -12,8 +13,6 @@ selected at install time, or its location can be changed via the command-line flag. Use @racket[find-config-dir] to locate the configuration directory. - - Modify the @filepath{config.rktd} file as described below to configure other directories, but use the @racketmodname[setup/dirs] library (which combines information from the configuration files and other sources) @@ -27,36 +26,49 @@ symbolic keys: @item{@racket['doc-dir] --- a path, string, or byte string for the main documentation directory. The value defaults to a - @filepath{doc} sibling directory of the main collection - directory's parent.} + @filepath{doc} sibling directory of the configuration directory.} @item{@racket['lib-dir] --- a path, string, or byte string for the - main library directory; it defaults to the parent of the main - collection directory.} + main library directory; it defaults to a @filepath{lib} sibling + directory of the configuration directory.} + + @item{@racket['lib-search-dirs] --- a list of paths, strings, byte + strings, or @racket[#f] representing the search path for + directories containing foreign libraries; each @racket[#f] in + the list, if any, is replaced with the default search path, + which is the user- and version-specific @filepath{lib} + directory followed by the main library directory.} @item{@racket['dll-dir] --- a path, string, or byte string for a directory containing Unix shared libraries for the main executable; it defaults to the main library directory.} - @item{@racket['include-dir] --- a path, string, or byte string for - the main directory containing C header files; it defaults to an - @filepath{include} sibling directory of the main library - directory.} + @item{@racket['links-file] --- a path, string, or byte string for the + @tech[#:doc reference-doc]{collection links file}; it defaults + to a @filepath{links.rktd} file in the main library directory.} + + @item{@racket['links-search-files] --- like @racket['lib-search-dirs], + but for @tech[#:doc reference-doc]{collection links file}.} + + @item{@racket['pkg-dir] --- a path, string, or byte string for + packages that have installation scope; it defaults to the main + library directory.} + + @item{@racket['pkg-search-dirs] --- like @racket['lib-search-dirs], + but for packages in installation scope.} @item{@racket['bin-dir] --- a path, string, or byte string for the main directory containing executables; it defaults to a @filepath{bin} sibling directory of the main library directory.} - @item{@racket['doc-search-dirs] --- a path, string, byte string, or - @racket[#f] representing the search path for documentation; - each @racket[#f] in the list, if any, is replaced with the - default search path, which is the user- and version-specific - @filepath{doc} directory followed by the main documentation - directory.} + @item{@racket['doc-search-dirs] --- like @racket['lib-search-dirs], + but for directories containing documentation.} - @item{@racket['lib-search-dirs] --- like @racket[doc-search-dirs], - but for directories containing foreign libraries.} + @item{@racket['include-dir] --- a path, string, or byte string for + the main directory containing C header files; it defaults to an + @filepath{include} sibling directory of the main library + directory.} @item{@racket['include-search-dirs] --- like @racket[doc-search-dirs], but for directories containing C diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/raco/setup.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/raco/setup.scrbl index 268b7ca379..8274bfcc15 100644 --- a/pkgs/racket-pkgs/racket-doc/scribblings/raco/setup.scrbl +++ b/pkgs/racket-pkgs/racket-doc/scribblings/raco/setup.scrbl @@ -16,6 +16,7 @@ setup/getinfo setup/pack setup/unpack + setup/link compiler/compiler launcher/launcher compiler/sig @@ -922,6 +923,41 @@ v contains configuration and package information---including configuration of some of the other directories (see @secref["config-file"]).} +@defproc[(find-links-file) path?]{ + Returns a path to the installation's @tech[#:doc + reference-doc]{collection links file}. The file indicated by the + returned path may or may not exist.} + +@defproc[(get-links-search-files) path?]{ + Returns a list of paths to installation @tech[#:doc + reference-doc]{collection links files} that are search in + order. (Normally, the result includes the result of + @racket[(find-links-files)], which is where new installation-wide + links are installed by @exec{raco link} or @racket[links].) The + files indicated by the returned paths may or may not exist.} + +@defproc[(find-pkg-dir) path?]{ + Returns a path to the directory containing packages with + installation scope; the directory indicated by the returned path may + or may not exist.} + +@defproc[(find-user-pkg-dir) path?]{ + Returns a path to the directory containing packages with + user- and version-specific scope; the directory indicated by + the returned path may or may not exist.} + +@defproc[(find-shared-pkg-dir) path?]{ + Returns a path to the directory containing packages with + user-specific, all-version scope; the directory indicated by the + returned path may or may not exist.} + +@defproc[(get-pkg-search-dirs) (listof path?)]{ + Returns a list of paths to the directories containing packages in + installation scope. (Normally, the result includes the result of + @racket[(find-pkg-dir)], which is where new packages are installed + by @exec{raco pkg install}.) The directories indicated by the returned + paths may or may not exist.} + @defproc[(find-doc-dir) (or/c path? #f)]{ Returns a path to the installation's @filepath{doc} directory. The result is @racket[#f] if no such directory is available.} diff --git a/racket/lib/collects/compiler/compiler-unit.rkt b/racket/lib/collects/compiler/compiler-unit.rkt index c6735e2502..32c3cdc0d2 100644 --- a/racket/lib/collects/compiler/compiler-unit.rkt +++ b/racket/lib/collects/compiler/compiler-unit.rkt @@ -104,14 +104,14 @@ (define (compile-directory-visitor dir info worker omit-root #:verbose [verbose? #t] #:skip-path [orig-skip-path #f] + #:skip-paths [orig-skip-paths null] #:skip-doc-sources? [skip-docs? #f]) (define info* (or info (lambda (key mk-default) (mk-default)))) (define omit-paths (omitted-paths dir c-get-info/full omit-root)) - (define skip-path (and orig-skip-path (path->bytes - (simplify-path (if (string? orig-skip-path) - (string->path orig-skip-path) - orig-skip-path) - #f)))) + (define skip-paths (for/list ([p (in-list (if orig-skip-path + (cons orig-skip-path orig-skip-paths) + orig-skip-paths))]) + (path->bytes (simplify-path p #f)))) (unless (eq? 'all omit-paths) (let ([init (parameterize ([current-directory dir] [current-load-relative-directory dir] @@ -125,12 +125,13 @@ (lambda (path) ((compile-notify-handler) path))] [manager-skip-file-handler (lambda (path) - (and skip-path - (let ([b (path->bytes (simplify-path path #f))] - [len (bytes-length skip-path)]) - (and ((bytes-length b) . > . len) - (bytes=? (subbytes b 0 len) skip-path))) - (cons -inf.0 "")))]) + (and (pair? skip-paths) + (let ([b (path->bytes (simplify-path path #f))]) + (for/or ([skip-path (in-list skip-paths)]) + (let ([len (bytes-length skip-path)]) + (and ((bytes-length b) . > . len) + (bytes=? (subbytes b 0 len) skip-path) + (cons -inf.0 "")))))))]) (let* ([sses (append ;; Find all .rkt/.ss/.scm files: (filter extract-base-filename/ss (directory-list)) @@ -152,13 +153,15 @@ (if (and (directory-exists? p*) (not (member p omit-paths))) (compile-directory-visitor p* (c-get-info/full p*) worker omit-root #:verbose verbose? - #:skip-path skip-path + #:skip-path orig-skip-path + #:skip-paths orig-skip-paths #:skip-doc-sources? skip-docs?) init)))) init)))) (define (compile-directory dir info #:verbose [verbose? #t] #:skip-path [orig-skip-path #f] + #:skip-paths [orig-skip-paths null] #:skip-doc-sources? [skip-docs? #f] #:managed-compile-zo [managed-compile-zo (make-caching-managed-compile-zo)] @@ -168,11 +171,13 @@ (compile-directory-visitor dir info worker omit-root #:verbose verbose? #:skip-path orig-skip-path + #:skip-paths orig-skip-paths #:skip-doc-sources? skip-docs?)) (define (get-compile-directory-srcs dir info #:verbose [verbose? #t] #:skip-path [orig-skip-path #f] + #:skip-paths [orig-skip-paths null] #:skip-doc-sources? [skip-docs? #f] #:managed-compile-zo [managed-compile-zo (make-caching-managed-compile-zo)] @@ -180,6 +185,7 @@ (compile-directory-visitor dir info append omit-root #:verbose verbose? #:skip-path orig-skip-path + #:skip-paths orig-skip-paths #:skip-doc-sources? skip-docs? #:managed-compile-zo managed-compile-zo)) @@ -187,6 +193,7 @@ (define (compile-collection-zos collection #:skip-path [skip-path #f] + #:skip-paths [skip-paths null] #:skip-doc-sources? [skip-docs? #f] #:managed-compile-zo [managed-compile-zo (make-caching-managed-compile-zo)] @@ -200,6 +207,7 @@ omit-root) #:verbose #f #:skip-path skip-path + #:skip-paths skip-paths #:skip-doc-sources? skip-docs? #:managed-compile-zo managed-compile-zo)) diff --git a/racket/lib/collects/pkg/lib.rkt b/racket/lib/collects/pkg/lib.rkt index 95bd56ee04..46046b6d86 100644 --- a/racket/lib/collects/pkg/lib.rkt +++ b/racket/lib/collects/pkg/lib.rkt @@ -111,20 +111,17 @@ (λ (ip) (copy-port ip op))))))) (define (pkg-dir config?) - (build-path (case (current-pkg-scope) - [(installation) (if config? - (find-config-dir) - (find-lib-dir))] - [(user) - (build-path (find-system-path 'addon-dir) (current-pkg-scope-version))] - [(shared) - (find-system-path 'addon-dir)] - [else (error "unknown package scope")]) - "pkgs")) + (case (current-pkg-scope) + [(installation) (if config? + (find-config-dir) + (find-pkg-dir))] + [(user) (find-user-pkg-dir (current-pkg-scope-version))] + [(shared) (find-shared-pkg-dir)] + [else (error "unknown package scope")])) (define (pkg-config-file) (build-path (pkg-dir #t) "config.rktd")) (define (pkg-db-file) - (build-path (pkg-dir #t) "pkgs.rktd")) + (build-path (pkg-dir #f) "pkgs.rktd")) (define (pkg-installed-dir) (pkg-dir #f)) (define (pkg-lock-file) @@ -262,7 +259,7 @@ (if (or (eq? mode held-mode) (eq? 'exclusive held-mode)) (t) - (let ([d (pkg-dir #t)]) + (let ([d (pkg-dir #f)]) (unless read-only? (make-directory* d)) (if (directory-exists? d) ;; If the directory exists, assume that a lock file is @@ -411,15 +408,40 @@ (define (read-pkg-db) (if (current-no-pkg-db) #hash() - (let ([the-db (read-file-hash (pkg-db-file))]) - ;; compatibility: map 'pnr to 'catalog: - (for/hash ([(k v) (in-hash the-db)]) - (values k - (if (eq? 'pnr (car (pkg-info-orig-pkg v))) - ;; note: legacy 'pnr entry cannot be a single-collection package - (struct-copy pkg-info v - [orig-pkg `(catalog ,(cadr (pkg-info-orig-pkg v)))]) - v)))))) + (read-pkg-db-file (pkg-db-file)))) + +(define (read-pkg-db-file file) + (let ([the-db (read-file-hash file)]) + ;; compatibility: map 'pnr to 'catalog: + (for/hash ([(k v) (in-hash the-db)]) + (values k + (if (eq? 'pnr (car (pkg-info-orig-pkg v))) + ;; note: legacy 'pnr entry cannot be a single-collection package + (struct-copy pkg-info v + [orig-pkg `(catalog ,(cadr (pkg-info-orig-pkg v)))]) + v))))) + +;; read all packages in this scope or wider +(define (merge-pkg-dbs [scope (current-pkg-scope)]) + (define (merge-next-pkg-dbs scope) + (parameterize ([current-pkg-scope scope]) + (with-pkg-lock/read-only (merge-pkg-dbs scope)))) + (case scope + [(installation) + (for*/hash ([dir (in-list (get-pkg-search-dirs))] + [file (in-value (build-path dir "pkgs.rktd"))] + #:when (file-exists? file) + [(k v) (read-pkg-db-file file)]) + (values k v))] + [(shared) + (define db (read-pkg-db)) + (for/fold ([ht (merge-next-pkg-dbs 'installation)]) ([(v k) (in-hash db)]) + (hash-set ht k v))] + [(user) + (define db (read-pkg-db)) + (for/fold ([ht (merge-next-pkg-dbs 'shared)]) ([(v k) (in-hash db)]) + (hash-set ht k v))])) + (define (package-info pkg-name [fail? #t]) (define db (read-pkg-db)) @@ -988,30 +1010,7 @@ descs) (define download-printf (if quiet? void printf)) (define check-sums? (not ignore-checksums?)) - (define db (read-pkg-db)) - (define db+with-dbs - (let ([with-sys-wide (lambda (t) - (parameterize ([current-pkg-scope 'installation]) - (t)))] - [with-vers-spec (lambda (t) - (parameterize ([current-pkg-scope 'user]) - (t)))] - [with-vers-all (lambda (t) - (parameterize ([current-pkg-scope 'shared]) - (t)))] - [with-current (lambda (t) (t))]) - (case (current-pkg-scope) - [(installation) - (list (cons db with-current))] - [(user) - (list (cons (with-sys-wide read-pkg-db) with-sys-wide) - (cons db with-current) - (cons (with-vers-all read-pkg-db) with-vers-all))] - [(shared) - (list (cons (with-sys-wide read-pkg-db) with-sys-wide) - (cons (with-vers-spec read-pkg-db) with-vers-spec) - (cons db with-current))] - [else (error "unknown package scope")]))) + (define all-db (merge-pkg-dbs)) (define (install-package/outer infos desc info) (match-define (pkg-desc pkg type orig-name auto?) desc) (match-define @@ -1025,7 +1024,7 @@ (for/hash ([i (in-list infos)]) (values (install-info-name i) (install-info-directory i)))) (cond - [(and (not updating?) (package-info pkg-name #f)) + [(and (not updating?) (hash-ref all-db pkg-name #f)) (clean!) (pkg-error "package is already installed\n package: ~a" pkg-name)] [(and @@ -1084,7 +1083,7 @@ (or (equal? name "racket") (not (dependency-this-platform? dep)) (hash-ref simultaneous-installs name #f) - (hash-has-key? db name))) + (hash-has-key? all-db name))) deps))) (and (not (empty? unsatisfied-deps)) unsatisfied-deps))) @@ -1418,28 +1417,45 @@ (define (pkg-show indent #:directory? [dir? #f]) (let () (define db (read-pkg-db)) - (define pkgs (sort (hash-keys db) string-ci<=?)) + (define all-db (if (eq? (current-pkg-scope) 'installation) + (merge-pkg-dbs) + db)) + (define has-const? (not (equal? all-db db))) + (define pkgs (sort (hash-keys all-db) string-ci<=?)) (if (null? pkgs) (printf " [none]\n") (table-display (list* - (list* (format "~aPackage[*=auto]" indent) "Checksum" "Source" - (if dir? - (list "Directory") - empty)) + (append + (list (format "~aPackage[*=auto~a]" + indent + (if has-const? + "; .=constant" + "")) + "Checksum" + "Source") + (if dir? + (list "Directory") + empty)) (for/list ([pkg (in-list pkgs)]) - (match-define (pkg-info orig-pkg checksum auto?) (hash-ref db pkg)) - (list* (format "~a~a~a" + (match-define (pkg-info orig-pkg checksum auto?) (hash-ref all-db pkg)) + (append + (list (format "~a~a~a~a" indent pkg (if auto? - "*" - "")) + "*" + "") + (if (and has-const? + (not (equal? (hash-ref all-db pkg) + (hash-ref db pkg #f)))) + "." + "")) (format "~a" checksum) - (format "~a" orig-pkg) - (if dir? - (list (~a (pkg-directory* pkg))) - empty)))))))) + (format "~a" orig-pkg)) + (if dir? + (list (~a (pkg-directory* pkg))) + empty)))))))) (define (installed-pkg-table #:scope [given-scope #f]) (parameterize ([current-pkg-scope diff --git a/racket/lib/collects/racket/HISTORY.txt b/racket/lib/collects/racket/HISTORY.txt index e4451843c4..36fdbe3a01 100644 --- a/racket/lib/collects/racket/HISTORY.txt +++ b/racket/lib/collects/racket/HISTORY.txt @@ -5,6 +5,10 @@ Changed link-file handling to separate "user" and "shared" modes; raco link: -u/--user mode installs a version-specific link, added -s/--shared for user-specific, all-version links Added PLTCONFIGDIR +Added links-file and links-search-dirs to config, enabling + a search path of installation-wide link files +setup/dir: default paths found relative to the config directory, + instead of the main collection directory Version 5.3.900.1 Reorganized collections into packages diff --git a/racket/lib/collects/setup/commands/link.rkt b/racket/lib/collects/setup/commands/link.rkt index da74390c72..4f086cb439 100644 --- a/racket/lib/collects/setup/commands/link.rkt +++ b/racket/lib/collects/setup/commands/link.rkt @@ -1,6 +1,7 @@ #lang scheme/base (require racket/cmdline raco/command-name + setup/dirs "../link.rkt") (define link-file (make-parameter #f)) @@ -101,7 +102,13 @@ (printf "User-specific, all-version links:\n") (void (links #:user? #t #:shared? #t #:show? #t)) (printf "Installation links:\n") - (void (links #:user? #f #:show? #t))) + (void (links #:user? #f #:show? #t)) + (let ([p (filter file-exists? + (remove (find-links-file) (get-links-search-files)))]) + (unless (null? p) + (printf "Installation constant links:\n") + (for ([f (in-list p)]) + (void (links #:file f #:show? #t)))))) (when (and (remove-mode) (null? l1) diff --git a/racket/lib/collects/setup/dirs.rkt b/racket/lib/collects/setup/dirs.rkt index 7f6435da8b..8d34b88e6d 100644 --- a/racket/lib/collects/setup/dirs.rkt +++ b/racket/lib/collects/setup/dirs.rkt @@ -56,8 +56,9 @@ (wrap (hash-ref (force config-table) key #f))))) +(define-config config:collects-search-dirs 'collects-search-dirs to-path) (define-config config:doc-dir 'doc-dir to-path) -(define-config config:doc-search-dirs 'doc-search-dir to-path) +(define-config config:doc-search-dirs 'doc-search-dirs to-path) (define-config config:dll-dir 'dll-dir to-path) (define-config config:lib-dir 'lib-dir to-path) (define-config config:lib-search-dirs 'lib-search-dirs to-path) @@ -65,6 +66,10 @@ (define-config config:include-search-dirs 'include-search-dirs to-path) (define-config config:bin-dir 'bin-dir to-path) (define-config config:man-dir 'man-dir to-path) +(define-config config:links-file 'links-file to-path) +(define-config config:links-search-files 'links-search-files to-path) +(define-config config:pkg-dir 'pkg-dir to-path) +(define-config config:pkg-search-dirs 'pkg-search-dirs to-path) (define-config config:cgc-suffix 'cgc-suffix values) (define-config config:3m-suffix '3m-suffix values) (define-config config:absolute-installation? 'absolute-installation? (lambda (x) (and x #t))) @@ -84,10 +89,14 @@ (delay (find-main-collects))) (provide find-collects-dir + get-main-collects-search-dirs find-user-collects-dir get-collects-search-dirs) (define (find-collects-dir) (force main-collects-dir)) +(define (get-main-collects-search-dirs) + (combine-search (force config:collects-search-dirs) + (list (find-collects-dir)))) (define user-collects-dir (delay (build-path (system-path* 'addon-dir) (version) "collects"))) (define (find-user-collects-dir) @@ -110,10 +119,14 @@ [else (cons (car l) (loop (cdr l)))])) default)) (define (cons-user u r) - (if (use-user-specific-search-paths) (cons u r) r)) + (if (and u (use-user-specific-search-paths)) + (cons u r) + r)) +(define (get-false) #f) +(define (chain-to f) f) (define-syntax define-finder - (syntax-rules () + (syntax-rules (get-false chain-to) [(_ provide config:id id user-id config:search-id search-id default) (begin (define-finder provide config:id id user-id default) @@ -130,16 +143,28 @@ (combine-search (force config:search-id) (extra (extra-search-dir) (cons-user (user-id) (single (id)))))))] - [(_ provide config:id id user-id default) + [(_ provide config:id id get-false (chain-to get-default)) (begin - (provide id user-id) + (provide id) + (define dir + (delay + (or (force config:id) (get-default)))) + (define (id) + (force dir)))] + [(_ provide config:id id get-false default) + (begin + (provide id) (define dir (delay (or (force config:id) - (let ([p (find-collects-dir)]) - (and p (simplify-path (build-path p 'up 'up default))))))) + (let ([p (find-config-dir)]) + (and p (simplify-path (build-path p 'up default))))))) (define (id) - (force dir)) + (force dir)))] + [(_ provide config:id id user-id default) + (begin + (define-finder provide config:id id get-false default) + (provide user-id) (define user-dir (delay (build-path (system-path* 'addon-dir) (version) default))) (define (user-id) @@ -288,3 +313,37 @@ #f)]))) (define (find-dll-dir) (force dll-dir)) + +;; ---------------------------------------- +;; Links files + +(provide find-links-file + get-links-search-files) + +(define (find-links-file) + (or (force config:links-file) + (build-path (find-lib-dir) "links.rktd"))) +(define (get-links-search-files) + (combine-search (force config:links-search-files) + (list (find-links-file)))) + +;; ---------------------------------------- +;; Packages + +(define-finder provide + config:pkg-dir + find-pkg-dir + get-false + config:pkg-search-dirs + get-pkg-search-dirs + (chain-to (lambda () (build-path (find-lib-dir) "pkgs")))) + +(provide find-user-pkg-dir + find-shared-pkg-dir) +(define (find-user-pkg-dir [vers (version)]) + (build-path (find-system-path 'addon-dir) + vers + "pkgs")) +(define (find-shared-pkg-dir) + (build-path (find-system-path 'addon-dir) + "pkgs")) diff --git a/racket/lib/collects/setup/link.rkt b/racket/lib/collects/setup/link.rkt index 77b723d874..d4492951a0 100644 --- a/racket/lib/collects/setup/link.rkt +++ b/racket/lib/collects/setup/link.rkt @@ -31,16 +31,7 @@ (if shared? (build-path (find-system-path 'addon-dir) "links.rktd") (build-path (find-system-path 'addon-dir) (version) "links.rktd")) - (let ([d (find-config-dir)]) - (if d - (build-path d "links.rktd") - (if (or name - (pair? dirs) - repair? - remove?) - (error 'links - "cannot find installation configuration path") - #f)))))) + (find-links-file)))) (define need-repair? #f) diff --git a/racket/lib/collects/setup/setup-unit.rkt b/racket/lib/collects/setup/setup-unit.rkt index 9372344261..6680fa8832 100644 --- a/racket/lib/collects/setup/setup-unit.rkt +++ b/racket/lib/collects/setup/setup-unit.rkt @@ -61,7 +61,9 @@ (define name-str (setup-program-name)) (define name-sym (string->symbol name-str)) - (define main-collects-dir (find-collects-dir)) + (define main-collects-dir (simple-form-path (find-collects-dir))) + (define main-collects-dirs (for/hash ([p (in-list (get-main-collects-search-dirs))]) + (values (simple-form-path p) #t))) (define mode-dir (if (compile-mode) (build-path "compiled" (compile-mode)) @@ -69,9 +71,9 @@ (unless (make-user) (current-library-collection-paths - (if (member main-collects-dir (current-library-collection-paths)) - (list main-collects-dir) - '()))) + (for/list ([p (current-library-collection-paths)] + #:when (hash-ref main-collects-dirs p #f)) + p))) (current-library-collection-paths (map simple-form-path (current-library-collection-paths))) @@ -340,7 +342,7 @@ (collection-cc! (list collection) #:info-root cp #:path (build-path cp collection) - #:main? (equal? cp main-collects-dir))) + #:main? (hash-ref main-collects-dirs cp #f))) (let () (define info-root (find-lib-dir)) (define info-path (build-path info-root "info-cache.rktd")) @@ -1026,7 +1028,7 @@ (for ([c (in-list (current-library-collection-paths))]) (when (and (directory-exists? c) (not (and (avoid-main-installation) - (equal? c main-collects-dir)))) + (hash-ref main-collects-dirs c #f)))) (define info-path (build-path c "info-domain" "compiled" "cache.rktd")) (when (file-exists? info-path) (get-info-ht c info-path 'relative)))) diff --git a/racket/lib/collects/setup/unixstyle-install.rkt b/racket/lib/collects/setup/unixstyle-install.rkt index bce2887d30..200429b920 100644 --- a/racket/lib/collects/setup/unixstyle-install.rkt +++ b/racket/lib/collects/setup/unixstyle-install.rkt @@ -440,6 +440,7 @@ ;; grab paths before we change them (define bindir (dir: 'bin)) (define librktdir (dir: 'librkt)) + (define configdir (dir: 'config)) (define (remove-dest p) (let ([pfx (and (< destdirlen (string-length p)) (substring p 0 destdirlen))]) @@ -451,7 +452,7 @@ ;; only when DESTDIR is present, so we're installing to a directory that ;; has only our binaries (fix-executables bindir librktdir) - (unless origtree? (write-config librktdir))) + (unless origtree? (write-config configdir))) ;; -------------------------------------------------------------------------- diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 7248322b0e..0e2598554b 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -1,5 +1,5 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0, 14,0,19,0,32,0,37,0,40,0,47,0,54,0,59,0,63,0,67,0,74, 0,83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0, @@ -16,12 +16,12 @@ 120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100, 97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107, 101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11, -8,240,49,89,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36, +8,240,76,89,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36, 36,16,20,2,3,2,2,2,5,2,2,2,4,2,2,2,6,2,2,2,7, 2,2,2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2, -2,97,37,11,8,240,49,89,0,0,93,159,2,16,36,37,16,2,2,13,161, -2,2,37,2,13,2,2,2,13,96,38,11,8,240,49,89,0,0,16,0,96, -11,11,8,240,49,89,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36, +2,97,37,11,8,240,76,89,0,0,93,159,2,16,36,37,16,2,2,13,161, +2,2,37,2,13,2,2,2,13,96,38,11,8,240,76,89,0,0,16,0,96, +11,11,8,240,76,89,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36, 2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,161,4,195, 249,22,154,4,80,158,39,36,251,22,89,2,18,248,22,101,199,12,249,22,79, 2,19,248,22,103,201,27,248,22,161,4,195,249,22,154,4,80,158,39,36,251, @@ -30,14 +30,14 @@ 248,22,81,194,248,22,132,18,193,249,22,154,4,80,158,39,36,251,22,89,2, 18,248,22,132,18,199,249,22,79,2,11,248,22,133,18,201,11,18,100,10,13, 16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11, -11,2,20,3,1,8,101,110,118,49,55,51,57,48,16,4,11,11,2,21,3, -1,8,101,110,118,49,55,51,57,49,27,248,22,81,248,22,161,4,196,28,248, +11,2,20,3,1,8,101,110,118,49,55,52,50,48,16,4,11,11,2,21,3, +1,8,101,110,118,49,55,52,50,49,27,248,22,81,248,22,161,4,196,28,248, 22,87,193,20,14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,132,18, 193,249,22,154,4,80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248, 22,89,2,23,248,22,132,18,201,251,22,89,2,18,2,23,2,23,249,22,79, 2,6,248,22,133,18,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11, 8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49, -55,51,57,51,16,4,11,11,2,21,3,1,8,101,110,118,49,55,51,57,52, +55,52,50,51,16,4,11,11,2,21,3,1,8,101,110,118,49,55,52,50,52, 248,22,161,4,193,27,248,22,161,4,194,249,22,79,248,22,89,248,22,80,196, 248,22,133,18,195,27,248,22,81,248,22,161,4,23,197,1,249,22,154,4,80, 158,39,36,28,248,22,64,248,22,155,4,248,22,80,23,198,2,27,249,22,2, @@ -68,8 +68,8 @@ 22,159,9,248,22,155,4,248,22,80,200,64,101,108,115,101,10,248,22,132,18, 197,250,22,90,2,22,9,248,22,133,18,200,249,22,79,2,5,248,22,81,202, 99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16, -4,11,11,2,20,3,1,8,101,110,118,49,55,52,49,54,16,4,11,11,2, -21,3,1,8,101,110,118,49,55,52,49,55,18,158,94,10,64,118,111,105,100, +4,11,11,2,20,3,1,8,101,110,118,49,55,52,52,54,16,4,11,11,2, +21,3,1,8,101,110,118,49,55,52,52,55,18,158,94,10,64,118,111,105,100, 8,48,27,248,22,81,248,22,161,4,196,249,22,154,4,80,158,39,36,28,248, 22,64,248,22,155,4,248,22,80,197,250,22,89,2,28,248,22,89,248,22,132, 18,199,248,22,101,198,27,248,22,155,4,248,22,132,18,197,250,22,89,2,28, @@ -100,660 +100,795 @@ EVAL_ONE_SIZED_STR((char *)expr, 2051); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,148,0,0,0,1,0,0,8,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,170,0,0,0,1,0,0,8,0, 21,0,26,0,43,0,55,0,77,0,106,0,121,0,139,0,151,0,167,0,181, -0,203,0,219,0,236,0,253,0,15,1,34,1,53,1,64,1,70,1,79,1, -86,1,93,1,105,1,117,1,129,1,153,1,185,1,203,1,222,1,242,1,2, -2,20,2,51,2,65,2,82,2,126,2,134,2,139,2,183,2,190,2,200,2, -215,2,224,2,229,2,231,2,255,2,20,3,30,3,43,3,53,3,59,3,104, -3,107,3,111,3,135,3,174,3,177,3,190,3,201,3,214,3,10,4,33,4, -41,4,65,4,86,4,43,5,73,5,210,8,233,8,250,8,198,10,45,11,59, -11,219,11,151,13,160,13,169,13,183,13,193,13,234,14,81,15,154,15,227,15, -75,16,104,16,175,16,56,17,127,17,81,18,182,18,189,18,232,18,246,18,100, -19,2,20,9,20,72,20,98,20,200,20,139,21,199,21,206,21,74,22,93,22, -246,22,6,23,212,24,244,24,253,24,72,26,90,26,104,26,125,26,141,26,189, -26,210,26,230,26,248,26,47,27,17,30,209,30,112,31,126,31,21,34,149,36, -164,36,54,38,248,38,250,38,20,39,35,39,215,40,153,41,168,41,177,41,184, -41,53,42,178,42,29,44,120,44,213,44,52,45,2,46,34,46,164,46,0,0, -248,51,0,0,67,35,37,117,116,105,108,115,72,112,97,116,104,45,115,116,114, -105,110,103,63,64,98,115,98,115,76,110,111,114,109,97,108,45,99,97,115,101, -45,112,97,116,104,71,114,101,114,111,111,116,45,112,97,116,104,1,20,102,105, -110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,1,27,112, -97,116,104,45,108,105,115,116,45,115,116,114,105,110,103,45,62,112,97,116,104, -45,108,105,115,116,74,45,99,104,101,99,107,45,114,101,108,112,97,116,104,77, -45,99,104,101,99,107,45,99,111,108,108,101,99,116,105,111,110,71,45,99,104, -101,99,107,45,102,97,105,108,75,99,111,108,108,101,99,116,105,111,110,45,112, -97,116,104,73,102,105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111, -108,108,101,99,116,105,111,110,45,102,105,108,101,45,112,97,116,104,75,117,115, -101,114,45,108,105,110,107,115,45,112,97,116,104,76,117,115,101,114,45,108,105, -110,107,115,45,99,97,99,104,101,76,117,115,101,114,45,108,105,110,107,115,45, -115,116,97,109,112,77,115,104,97,114,101,100,45,108,105,110,107,115,45,112,97, -116,104,78,115,104,97,114,101,100,45,108,105,110,107,115,45,99,97,99,104,101, -78,115,104,97,114,101,100,45,108,105,110,107,115,45,115,116,97,109,112,70,108, -105,110,107,115,45,112,97,116,104,65,113,117,111,116,101,68,35,37,112,97,114, -97,109,122,29,94,2,21,2,22,11,29,94,2,21,2,22,11,71,108,105,110, -107,115,45,99,97,99,104,101,71,108,105,110,107,115,45,115,116,97,109,112,71, -102,105,108,101,45,62,115,116,97,109,112,1,22,103,101,116,45,108,105,110,107, -101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109,97, -108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101,114, -101,110,99,101,77,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97,108, -108,78,112,97,116,104,45,97,100,106,117,115,116,45,115,117,102,102,105,120,79, -112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,75,112, -97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108,111,97,100,47,117, -115,101,45,99,111,109,112,105,108,101,100,1,29,102,105,110,100,45,108,105,98, -114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,115, -73,101,109,98,101,100,100,101,100,45,108,111,97,100,76,110,111,114,109,97,108, -45,112,97,116,104,45,99,97,115,101,6,41,41,40,111,114,47,99,32,112,97, -116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,116,101,109,63,32,112, -97,116,104,45,115,116,114,105,110,103,63,41,67,119,105,110,100,111,119,115,6, -2,2,92,49,6,41,41,40,111,114,47,99,32,112,97,116,104,45,115,116,114, -105,110,103,63,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121, -115,116,101,109,63,41,6,4,4,112,97,116,104,5,8,92,92,63,92,82,69, -76,92,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,68,114,101,108, -97,116,105,118,101,64,108,111,111,112,5,0,6,21,21,105,110,118,97,108,105, -100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,6,18,18,40,97,110, -121,47,99,32,46,32,45,62,32,46,32,97,110,121,41,69,97,100,100,111,110, -45,100,105,114,6,10,10,108,105,110,107,115,46,114,107,116,100,69,101,120,101, -99,45,102,105,108,101,65,101,114,114,111,114,6,42,42,101,114,114,111,114,32, -114,101,97,100,105,110,103,32,99,111,108,108,101,99,116,105,111,110,32,108,105, -110,107,115,32,102,105,108,101,32,126,115,58,32,126,97,6,0,0,6,1,1, -47,6,21,21,40,111,114,47,99,32,115,116,114,105,110,103,63,32,98,121,116, -101,115,63,41,6,36,36,99,97,110,110,111,116,32,97,100,100,32,97,32,115, -117,102,102,105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58, -32,5,1,95,5,11,80,76,84,67,79,76,76,69,67,84,83,6,8,8,99, -111,108,108,101,99,116,115,72,99,111,108,108,101,99,116,115,45,100,105,114,27, -248,22,150,15,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,144, -7,23,195,2,27,248,22,173,15,23,196,2,28,23,193,2,192,86,94,23,193, -1,248,22,174,15,23,196,1,11,0,21,35,114,120,34,94,91,92,92,93,91, -92,92,93,91,63,93,91,92,92,93,34,0,6,35,114,120,34,47,34,0,22, -35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36, -34,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36, -34,86,94,28,28,248,22,151,15,23,195,2,10,28,248,22,150,15,23,195,2, -10,28,248,22,144,7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174, -15,23,195,2,11,12,250,22,168,11,2,37,2,38,23,197,2,28,28,248,22, -151,15,23,195,2,249,22,159,9,248,22,152,15,23,197,2,2,39,249,22,159, -9,247,22,171,8,2,39,27,28,248,22,144,7,23,196,2,23,195,2,248,22, -156,8,248,22,155,15,23,197,2,28,249,22,145,16,2,64,23,195,2,86,94, -23,193,1,28,248,22,144,7,23,196,2,248,22,158,15,23,196,1,194,27,248, -22,183,7,23,195,1,249,22,159,15,248,22,159,8,250,22,153,16,2,65,28, -249,22,145,16,2,66,23,201,2,23,199,1,250,22,153,16,2,67,23,202,1, -2,40,80,159,44,37,38,2,39,28,248,22,144,7,23,195,2,248,22,158,15, -23,195,1,193,0,28,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63, -93,92,92,92,92,85,78,67,92,92,92,92,34,86,95,28,28,28,248,22,150, -15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173,15,23,195,2, -10,248,22,174,15,23,195,2,11,10,248,22,151,15,23,195,2,12,252,22,168, -11,2,5,2,41,36,23,199,2,23,200,2,28,28,28,248,22,150,15,23,196, -2,10,28,248,22,144,7,23,196,2,28,248,22,173,15,23,196,2,10,248,22, -174,15,23,196,2,11,10,248,22,151,15,23,196,2,12,252,22,168,11,2,5, -2,41,37,23,199,2,23,200,2,27,28,248,22,151,15,23,196,2,248,22,152, -15,23,196,2,247,22,153,15,86,95,28,28,248,22,175,15,23,196,2,10,249, -22,159,9,247,22,153,15,23,195,2,12,253,22,170,11,2,5,6,54,54,112, -97,116,104,32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,32,97, -110,100,32,110,111,116,32,116,104,101,32,112,108,97,116,102,111,114,109,39,115, -32,99,111,110,118,101,110,116,105,111,110,2,42,23,201,2,6,24,24,112,108, -97,116,102,111,114,109,32,99,111,110,118,101,110,116,105,111,110,32,116,121,112, -101,247,22,153,15,28,249,22,159,9,28,248,22,151,15,23,199,2,248,22,152, -15,23,199,2,247,22,153,15,23,195,2,12,253,22,170,11,2,5,6,37,37, -103,105,118,101,110,32,112,97,116,104,115,32,117,115,101,32,100,105,102,102,101, -114,101,110,116,32,99,111,110,118,101,110,116,105,111,110,115,2,42,23,201,2, -6,9,9,114,111,111,116,32,112,97,116,104,23,202,2,27,27,248,22,179,15, -28,248,22,175,15,23,199,2,23,198,1,248,22,176,15,23,199,1,86,94,28, -28,248,22,151,15,23,194,2,10,28,248,22,150,15,23,194,2,10,28,248,22, -144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2, -11,12,250,22,168,11,2,37,2,38,23,196,2,28,28,248,22,151,15,23,194, -2,249,22,159,9,248,22,152,15,23,196,2,2,39,249,22,159,9,247,22,171, -8,2,39,27,28,248,22,144,7,23,195,2,23,194,2,248,22,156,8,248,22, -155,15,23,196,2,28,249,22,145,16,2,64,23,195,2,86,94,23,193,1,28, -248,22,144,7,23,195,2,248,22,158,15,23,195,1,193,27,248,22,183,7,23, -195,1,249,22,159,15,248,22,159,8,250,22,153,16,2,65,28,249,22,145,16, -2,66,23,201,2,23,199,1,250,22,153,16,2,67,23,202,1,2,40,80,159, -47,37,38,2,39,28,248,22,144,7,23,194,2,248,22,158,15,23,194,1,192, -27,248,22,155,15,23,195,2,28,249,22,159,9,23,197,2,64,117,110,105,120, -28,249,22,141,8,23,195,1,5,1,47,86,95,23,195,1,23,194,1,28,248, -22,151,15,23,199,2,197,248,22,158,15,23,199,1,249,22,168,15,23,200,1, -249,22,159,15,249,22,144,8,248,22,155,15,23,201,1,37,23,199,1,28,249, -22,159,9,23,197,2,2,39,249,22,168,15,23,200,1,249,22,159,15,28,249, -22,145,16,0,27,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93, -92,92,92,92,91,97,45,122,93,58,34,23,199,2,251,22,145,8,2,43,250, -22,144,8,23,204,2,40,41,5,1,92,249,22,144,8,23,203,1,42,28,249, -22,145,16,2,69,23,199,2,249,22,145,8,2,43,249,22,144,8,23,201,1, -40,28,249,22,145,16,2,69,23,199,2,249,22,145,8,2,43,249,22,144,8, -23,201,1,40,28,249,22,145,16,0,14,35,114,120,34,94,92,92,92,92,92, -92,92,92,34,23,199,2,249,22,145,8,5,4,85,78,67,92,249,22,144,8, -23,201,1,38,28,249,22,145,16,0,12,35,114,120,34,94,91,97,45,122,93, -58,34,23,199,2,249,22,145,8,250,22,144,8,23,202,2,36,37,249,22,144, -8,23,201,1,38,86,94,23,197,1,12,23,199,1,12,32,71,88,163,8,36, -39,53,11,70,102,111,117,110,100,45,101,120,101,99,222,33,74,32,72,88,163, -8,36,40,58,11,64,110,101,120,116,222,33,73,27,248,22,177,15,23,196,2, -28,249,22,161,9,23,195,2,23,197,1,11,28,248,22,173,15,23,194,2,27, -249,22,168,15,23,197,1,23,196,1,28,23,197,2,90,159,39,11,89,161,39, -36,11,248,22,171,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,202, -2,27,248,22,177,15,23,199,2,28,249,22,161,9,23,195,2,23,200,2,11, -28,248,22,173,15,23,194,2,250,2,71,23,205,2,23,206,2,249,22,168,15, -23,200,2,23,198,1,250,2,71,23,205,2,23,206,2,23,196,1,11,28,23, -193,2,192,86,94,23,193,1,27,28,248,22,150,15,23,196,2,27,249,22,168, -15,23,198,2,23,205,2,28,28,248,22,163,15,193,10,248,22,162,15,193,192, -11,11,28,23,193,2,192,86,94,23,193,1,28,23,203,2,11,27,248,22,177, -15,23,200,2,28,249,22,161,9,23,195,2,23,201,1,11,28,248,22,173,15, -23,194,2,250,2,71,23,206,1,23,207,1,249,22,168,15,23,201,1,23,198, -1,250,2,71,205,206,195,192,86,94,23,194,1,28,23,196,2,90,159,39,11, -89,161,39,36,11,248,22,171,15,23,197,2,86,95,23,195,1,23,194,1,27, -28,23,201,2,27,248,22,177,15,23,199,2,28,249,22,161,9,23,195,2,23, -200,2,11,28,248,22,173,15,23,194,2,250,2,71,23,204,2,23,205,2,249, -22,168,15,23,200,2,23,198,1,250,2,71,23,204,2,23,205,2,23,196,1, -11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,150,15,23,196,2,27, -249,22,168,15,23,198,2,23,204,2,28,28,248,22,163,15,193,10,248,22,162, -15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27, -248,22,177,15,23,200,2,28,249,22,161,9,23,195,2,23,201,1,11,28,248, -22,173,15,23,194,2,250,2,71,23,205,1,23,206,1,249,22,168,15,23,201, -1,23,198,1,250,2,71,204,205,195,192,28,23,193,2,90,159,39,11,89,161, -39,36,11,248,22,171,15,23,199,2,86,95,23,195,1,23,194,1,27,28,23, -198,2,251,2,72,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23,193, -2,192,86,94,23,193,1,27,28,248,22,150,15,195,27,249,22,168,15,197,200, -28,28,248,22,163,15,193,10,248,22,162,15,193,192,11,11,28,192,192,28,198, -11,251,2,72,198,203,201,202,194,32,75,88,163,8,36,40,58,11,2,46,222, -33,76,28,248,22,87,23,197,2,11,27,248,22,176,15,248,22,80,23,199,2, -27,249,22,168,15,23,196,1,23,197,2,28,248,22,162,15,23,194,2,250,2, -71,198,199,195,86,94,23,193,1,27,248,22,81,23,200,1,28,248,22,87,23, -194,2,11,27,248,22,176,15,248,22,80,23,196,2,27,249,22,168,15,23,196, -1,23,200,2,28,248,22,162,15,23,194,2,250,2,71,201,202,195,86,94,23, -193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11,27,248,22,176, -15,248,22,80,195,27,249,22,168,15,23,196,1,202,28,248,22,162,15,193,250, -2,71,204,205,195,251,2,75,204,205,206,248,22,81,199,86,95,28,28,248,22, -150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173,15,23,195, -2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,2,6,2,44,23,197, -2,28,28,23,195,2,28,28,248,22,150,15,23,196,2,10,28,248,22,144,7, -23,196,2,28,248,22,173,15,23,196,2,10,248,22,174,15,23,196,2,11,248, -22,173,15,23,196,2,11,10,12,250,22,168,11,2,6,6,45,45,40,111,114, -47,99,32,35,102,32,40,97,110,100,47,99,32,112,97,116,104,45,115,116,114, -105,110,103,63,32,114,101,108,97,116,105,118,101,45,112,97,116,104,63,41,41, -23,198,2,28,28,248,22,173,15,23,195,2,90,159,39,11,89,161,39,36,11, -248,22,171,15,23,198,2,249,22,159,9,194,2,45,11,27,249,22,166,8,247, -22,165,8,5,4,80,65,84,72,27,28,23,194,2,249,80,158,40,41,249,22, -156,8,23,198,1,7,63,9,86,94,23,194,1,9,27,28,249,22,159,9,247, -22,171,8,2,39,249,22,79,248,22,159,15,5,1,46,23,196,1,23,194,1, -28,248,22,87,23,194,2,11,27,248,22,176,15,248,22,80,23,196,2,27,249, -22,168,15,23,196,1,23,201,2,28,248,22,162,15,23,194,2,250,2,71,202, -203,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2, -11,27,248,22,176,15,248,22,80,23,196,2,27,249,22,168,15,23,196,1,23, -204,2,28,248,22,162,15,23,194,2,250,2,71,205,206,195,86,94,23,193,1, -27,248,22,81,23,197,1,28,248,22,87,23,194,2,11,27,248,22,176,15,248, -22,80,195,27,249,22,168,15,23,196,1,206,28,248,22,162,15,193,250,2,71, -23,16,23,17,195,251,2,75,23,16,23,17,23,18,248,22,81,199,27,248,22, -176,15,23,196,1,28,248,22,162,15,193,250,2,71,198,199,195,11,250,80,159, -39,40,39,196,197,11,250,80,159,39,40,39,196,11,11,32,80,88,163,8,36, -39,57,11,2,46,222,33,82,0,8,35,114,120,35,34,92,34,34,27,249,22, -141,16,23,197,2,23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,101, -23,195,2,27,27,248,22,110,23,197,1,27,249,22,141,16,23,201,2,23,196, -2,28,23,193,2,86,94,23,194,1,27,248,22,101,23,195,2,27,250,2,80, -23,203,2,23,204,1,248,22,110,23,199,1,28,249,22,141,8,23,196,2,2, -47,249,22,93,23,202,2,194,249,22,79,248,22,159,15,28,249,22,159,9,247, -22,171,8,2,39,250,22,153,16,2,81,23,200,1,2,47,23,197,1,194,86, -95,23,199,1,23,193,1,28,249,22,141,8,23,196,2,2,47,249,22,93,23, -200,2,9,249,22,79,248,22,159,15,28,249,22,159,9,247,22,171,8,2,39, -250,22,153,16,2,81,23,200,1,2,47,23,197,1,9,28,249,22,141,8,23, -196,2,2,47,249,22,93,197,194,86,94,23,196,1,249,22,79,248,22,159,15, -28,249,22,159,9,247,22,171,8,2,39,250,22,153,16,2,81,23,200,1,2, -47,23,197,1,194,86,94,23,193,1,28,249,22,141,8,23,198,2,2,47,249, -22,93,195,9,86,94,23,194,1,249,22,79,248,22,159,15,28,249,22,159,9, -247,22,171,8,2,39,250,22,153,16,2,81,23,202,1,2,47,23,199,1,9, -86,95,28,28,248,22,133,8,194,10,248,22,144,7,194,12,250,22,168,11,2, -7,6,21,21,40,111,114,47,99,32,98,121,116,101,115,63,32,115,116,114,105, -110,103,63,41,196,28,28,248,22,88,195,249,22,4,22,150,15,196,11,12,250, -22,168,11,2,7,6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63, -41,197,250,2,80,197,195,28,248,22,144,7,197,248,22,158,8,197,196,86,94, -28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22, -173,15,23,195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,23,196, -2,2,44,23,197,2,28,248,22,173,15,23,195,2,12,251,22,170,11,23,197, -1,2,48,2,42,23,198,1,86,94,28,28,248,22,150,15,23,195,2,10,28, -248,22,144,7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,15,23, -195,2,11,12,250,22,168,11,23,196,2,2,44,23,197,2,28,248,22,173,15, -23,195,2,12,251,22,170,11,23,197,1,2,48,2,42,23,198,1,86,94,86, -94,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248, -22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,23, -196,2,2,44,23,197,2,28,248,22,173,15,23,195,2,86,94,23,194,1,12, -251,22,170,11,23,197,2,2,48,2,42,23,198,1,249,22,3,20,20,94,88, -163,8,36,37,47,11,9,223,2,33,85,23,195,1,23,197,1,28,28,248,22, -0,23,195,2,249,22,50,23,196,2,37,11,12,250,22,168,11,23,196,1,2, -49,23,197,1,86,94,28,28,248,22,150,15,23,194,2,10,28,248,22,144,7, -23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2,11,12, -250,22,168,11,2,11,2,44,23,196,2,28,248,22,173,15,23,194,2,12,251, -22,170,11,2,11,2,48,2,42,23,197,1,86,95,86,94,86,94,28,28,248, -22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173,15,23, -196,2,10,248,22,174,15,23,196,2,11,12,250,22,168,11,2,11,2,44,23, -198,2,28,248,22,173,15,23,196,2,12,251,22,170,11,2,11,2,48,2,42, -23,199,2,249,22,3,32,0,88,163,8,36,37,46,11,9,222,33,88,23,198, -2,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,22,168, -11,2,11,2,49,23,197,2,251,80,158,40,46,23,198,1,23,199,1,23,200, -1,11,86,94,28,28,248,22,150,15,23,194,2,10,28,248,22,144,7,23,194, -2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2,11,12,250,22, -168,11,2,13,2,44,23,196,2,28,248,22,173,15,23,194,2,12,251,22,170, -11,2,13,2,48,2,42,23,197,1,86,96,86,94,28,28,248,22,150,15,23, +0,203,0,219,0,236,0,253,0,15,1,34,1,53,1,69,1,75,1,84,1, +91,1,108,1,123,1,141,1,153,1,160,1,173,1,186,1,198,1,222,1,254, +1,16,2,35,2,55,2,71,2,89,2,120,2,134,2,151,2,195,2,203,2, +208,2,252,2,3,3,13,3,28,3,37,3,42,3,44,3,68,3,89,3,99, +3,112,3,123,3,132,3,142,3,148,3,193,3,196,3,200,3,224,3,7,4, +10,4,23,4,34,4,47,4,69,4,121,4,144,4,152,4,176,4,197,4,154, +5,184,5,65,9,88,9,105,9,53,11,156,11,170,11,74,12,6,14,15,14, +24,14,38,14,48,14,89,15,192,15,9,16,82,16,186,16,215,16,30,17,167, +17,238,17,192,18,87,19,136,19,167,19,181,19,6,22,24,23,38,23,39,24, +117,25,124,25,167,25,181,25,35,26,193,26,200,26,7,27,33,27,151,27,116, +28,176,28,183,28,51,29,70,29,223,29,239,29,253,31,38,32,47,32,122,33, +64,34,84,34,100,34,123,34,139,34,190,34,211,34,231,34,251,34,52,35,31, +38,94,39,253,39,13,40,165,42,38,45,53,45,199,46,137,47,139,47,165,47, +180,47,104,49,42,50,57,50,66,50,73,50,198,50,67,51,192,51,208,51,43, +52,174,52,190,52,25,53,158,53,174,53,179,54,58,55,8,56,40,56,170,56, +0,0,212,62,0,0,67,35,37,117,116,105,108,115,72,112,97,116,104,45,115, +116,114,105,110,103,63,64,98,115,98,115,76,110,111,114,109,97,108,45,99,97, +115,101,45,112,97,116,104,71,114,101,114,111,111,116,45,112,97,116,104,1,20, +102,105,110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,1, +27,112,97,116,104,45,108,105,115,116,45,115,116,114,105,110,103,45,62,112,97, +116,104,45,108,105,115,116,74,45,99,104,101,99,107,45,114,101,108,112,97,116, +104,77,45,99,104,101,99,107,45,99,111,108,108,101,99,116,105,111,110,71,45, +99,104,101,99,107,45,102,97,105,108,75,99,111,108,108,101,99,116,105,111,110, +45,112,97,116,104,73,102,105,110,100,45,99,111,108,45,102,105,108,101,1,20, +99,111,108,108,101,99,116,105,111,110,45,102,105,108,101,45,112,97,116,104,75, +117,115,101,114,45,108,105,110,107,115,45,112,97,116,104,76,117,115,101,114,45, +108,105,110,107,115,45,99,97,99,104,101,76,117,115,101,114,45,108,105,110,107, +115,45,115,116,97,109,112,77,115,104,97,114,101,100,45,108,105,110,107,115,45, +112,97,116,104,78,115,104,97,114,101,100,45,108,105,110,107,115,45,99,97,99, +104,101,78,115,104,97,114,101,100,45,108,105,110,107,115,45,115,116,97,109,112, +75,102,105,110,100,45,99,111,110,102,105,103,45,100,105,114,65,113,117,111,116, +101,68,35,37,112,97,114,97,109,122,29,94,2,21,2,22,11,76,103,101,116, +45,99,111,110,102,105,103,45,116,97,98,108,101,74,99,111,101,114,99,101,45, +116,111,45,112,97,116,104,77,97,100,100,45,99,111,110,102,105,103,45,115,101, +97,114,99,104,71,108,105,110,107,115,45,112,97,116,104,115,29,94,2,21,2, +22,11,72,108,105,110,107,115,45,99,97,99,104,101,115,72,108,105,110,107,115, +45,115,116,97,109,112,115,71,102,105,108,101,45,62,115,116,97,109,112,1,22, +103,101,116,45,108,105,110,107,101,100,45,99,111,108,108,101,99,116,105,111,110, +115,1,30,110,111,114,109,97,108,105,122,101,45,99,111,108,108,101,99,116,105, +111,110,45,114,101,102,101,114,101,110,99,101,77,99,104,101,99,107,45,115,117, +102,102,105,120,45,99,97,108,108,78,112,97,116,104,45,97,100,106,117,115,116, +45,115,117,102,102,105,120,79,112,97,116,104,45,114,101,112,108,97,99,101,45, +115,117,102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105, +120,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29, +102,105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105, +111,110,45,112,97,116,104,115,73,101,109,98,101,100,100,101,100,45,108,111,97, +100,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,41,41, +40,111,114,47,99,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115, +121,115,116,101,109,63,32,112,97,116,104,45,115,116,114,105,110,103,63,41,67, +119,105,110,100,111,119,115,6,2,2,92,49,6,41,41,40,111,114,47,99,32, +112,97,116,104,45,115,116,114,105,110,103,63,32,112,97,116,104,45,102,111,114, +45,115,111,109,101,45,115,121,115,116,101,109,63,41,6,4,4,112,97,116,104, +5,8,92,92,63,92,82,69,76,92,6,12,12,112,97,116,104,45,115,116,114, +105,110,103,63,68,114,101,108,97,116,105,118,101,64,108,111,111,112,5,0,6, +21,21,105,110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32,112,97, +116,104,6,18,18,40,97,110,121,47,99,32,46,32,45,62,32,46,32,97,110, +121,41,69,97,100,100,111,110,45,100,105,114,6,10,10,108,105,110,107,115,46, +114,107,116,100,70,99,111,110,102,105,103,45,100,105,114,68,111,114,105,103,45, +100,105,114,69,101,120,101,99,45,102,105,108,101,65,101,114,114,111,114,6,42, +42,101,114,114,111,114,32,114,101,97,100,105,110,103,32,99,111,108,108,101,99, +116,105,111,110,32,108,105,110,107,115,32,102,105,108,101,32,126,115,58,32,126, +97,6,0,0,6,1,1,47,6,21,21,40,111,114,47,99,32,115,116,114,105, +110,103,63,32,98,121,116,101,115,63,41,6,36,36,99,97,110,110,111,116,32, +97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32,114,111,111, +116,32,112,97,116,104,58,32,5,1,95,5,11,80,76,84,67,79,76,76,69, +67,84,83,6,8,8,99,111,108,108,101,99,116,115,72,99,111,108,108,101,99, +116,115,45,100,105,114,1,20,99,111,108,108,101,99,116,115,45,115,101,97,114, +99,104,45,100,105,114,115,27,248,22,150,15,23,195,2,28,23,193,2,192,86, +94,23,193,1,28,248,22,144,7,23,195,2,27,248,22,173,15,23,196,2,28, +23,193,2,192,86,94,23,193,1,248,22,174,15,23,196,1,11,0,21,35,114, +120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,0,6, +35,114,120,34,47,34,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93, +43,91,47,92,92,93,42,36,34,0,19,35,114,120,34,91,32,46,93,43,40, +91,47,92,92,93,42,41,36,34,86,94,28,28,248,22,151,15,23,195,2,10, +28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173, +15,23,195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,2,41,2, +42,23,197,2,28,28,248,22,151,15,23,195,2,249,22,159,9,248,22,152,15, +23,197,2,2,43,249,22,159,9,247,22,171,8,2,43,27,28,248,22,144,7, +23,196,2,23,195,2,248,22,156,8,248,22,155,15,23,197,2,28,249,22,145, +16,2,71,23,195,2,86,94,23,193,1,28,248,22,144,7,23,196,2,248,22, +158,15,23,196,1,194,27,248,22,183,7,23,195,1,249,22,159,15,248,22,159, +8,250,22,153,16,2,72,28,249,22,145,16,2,73,23,201,2,23,199,1,250, +22,153,16,2,74,23,202,1,2,44,80,159,44,37,38,2,43,28,248,22,144, +7,23,195,2,248,22,158,15,23,195,1,193,0,28,35,114,120,34,94,92,92, +92,92,92,92,92,92,91,63,93,92,92,92,92,85,78,67,92,92,92,92,34, +86,95,28,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2, +28,248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,10,248,22,151, +15,23,195,2,12,252,22,168,11,2,5,2,45,36,23,199,2,23,200,2,28, +28,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22, +173,15,23,196,2,10,248,22,174,15,23,196,2,11,10,248,22,151,15,23,196, +2,12,252,22,168,11,2,5,2,45,37,23,199,2,23,200,2,27,28,248,22, +151,15,23,196,2,248,22,152,15,23,196,2,247,22,153,15,86,95,28,28,248, +22,175,15,23,196,2,10,249,22,159,9,247,22,153,15,23,195,2,12,253,22, +170,11,2,5,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99,111, +109,112,108,101,116,101,32,97,110,100,32,110,111,116,32,116,104,101,32,112,108, +97,116,102,111,114,109,39,115,32,99,111,110,118,101,110,116,105,111,110,2,46, +23,201,2,6,24,24,112,108,97,116,102,111,114,109,32,99,111,110,118,101,110, +116,105,111,110,32,116,121,112,101,247,22,153,15,28,249,22,159,9,28,248,22, +151,15,23,199,2,248,22,152,15,23,199,2,247,22,153,15,23,195,2,12,253, +22,170,11,2,5,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32,117, +115,101,32,100,105,102,102,101,114,101,110,116,32,99,111,110,118,101,110,116,105, +111,110,115,2,46,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104,23, +202,2,27,27,248,22,179,15,28,248,22,175,15,23,199,2,23,198,1,248,22, +176,15,23,199,1,86,94,28,28,248,22,151,15,23,194,2,10,28,248,22,150, +15,23,194,2,10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2, +10,248,22,174,15,23,194,2,11,12,250,22,168,11,2,41,2,42,23,196,2, +28,28,248,22,151,15,23,194,2,249,22,159,9,248,22,152,15,23,196,2,2, +43,249,22,159,9,247,22,171,8,2,43,27,28,248,22,144,7,23,195,2,23, +194,2,248,22,156,8,248,22,155,15,23,196,2,28,249,22,145,16,2,71,23, +195,2,86,94,23,193,1,28,248,22,144,7,23,195,2,248,22,158,15,23,195, +1,193,27,248,22,183,7,23,195,1,249,22,159,15,248,22,159,8,250,22,153, +16,2,72,28,249,22,145,16,2,73,23,201,2,23,199,1,250,22,153,16,2, +74,23,202,1,2,44,80,159,47,37,38,2,43,28,248,22,144,7,23,194,2, +248,22,158,15,23,194,1,192,27,248,22,155,15,23,195,2,28,249,22,159,9, +23,197,2,64,117,110,105,120,28,249,22,141,8,23,195,1,5,1,47,86,95, +23,195,1,23,194,1,28,248,22,151,15,23,199,2,197,248,22,158,15,23,199, +1,249,22,168,15,23,200,1,249,22,159,15,249,22,144,8,248,22,155,15,23, +201,1,37,23,199,1,28,249,22,159,9,23,197,2,2,43,249,22,168,15,23, +200,1,249,22,159,15,28,249,22,145,16,0,27,35,114,120,34,94,92,92,92, +92,92,92,92,92,91,63,93,92,92,92,92,91,97,45,122,93,58,34,23,199, +2,251,22,145,8,2,47,250,22,144,8,23,204,2,40,41,5,1,92,249,22, +144,8,23,203,1,42,28,249,22,145,16,2,76,23,199,2,249,22,145,8,2, +47,249,22,144,8,23,201,1,40,28,249,22,145,16,2,76,23,199,2,249,22, +145,8,2,47,249,22,144,8,23,201,1,40,28,249,22,145,16,0,14,35,114, +120,34,94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,145,8,5,4, +85,78,67,92,249,22,144,8,23,201,1,38,28,249,22,145,16,0,12,35,114, +120,34,94,91,97,45,122,93,58,34,23,199,2,249,22,145,8,250,22,144,8, +23,202,2,36,37,249,22,144,8,23,201,1,38,86,94,23,197,1,12,23,199, +1,12,32,78,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120,101, +99,222,33,81,32,79,88,163,8,36,40,58,11,64,110,101,120,116,222,33,80, +27,248,22,177,15,23,196,2,28,249,22,161,9,23,195,2,23,197,1,11,28, +248,22,173,15,23,194,2,27,249,22,168,15,23,197,1,23,196,1,28,23,197, +2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,197,2,86,95,23,195, +1,23,194,1,27,28,23,202,2,27,248,22,177,15,23,199,2,28,249,22,161, +9,23,195,2,23,200,2,11,28,248,22,173,15,23,194,2,250,2,78,23,205, +2,23,206,2,249,22,168,15,23,200,2,23,198,1,250,2,78,23,205,2,23, +206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,150, +15,23,196,2,27,249,22,168,15,23,198,2,23,205,2,28,28,248,22,163,15, +193,10,248,22,162,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28, +23,203,2,11,27,248,22,177,15,23,200,2,28,249,22,161,9,23,195,2,23, +201,1,11,28,248,22,173,15,23,194,2,250,2,78,23,206,1,23,207,1,249, +22,168,15,23,201,1,23,198,1,250,2,78,205,206,195,192,86,94,23,194,1, +28,23,196,2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,197,2,86, +95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,177,15,23,199,2,28, +249,22,161,9,23,195,2,23,200,2,11,28,248,22,173,15,23,194,2,250,2, +78,23,204,2,23,205,2,249,22,168,15,23,200,2,23,198,1,250,2,78,23, +204,2,23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28, +248,22,150,15,23,196,2,27,249,22,168,15,23,198,2,23,204,2,28,28,248, +22,163,15,193,10,248,22,162,15,193,192,11,11,28,23,193,2,192,86,94,23, +193,1,28,23,202,2,11,27,248,22,177,15,23,200,2,28,249,22,161,9,23, +195,2,23,201,1,11,28,248,22,173,15,23,194,2,250,2,78,23,205,1,23, +206,1,249,22,168,15,23,201,1,23,198,1,250,2,78,204,205,195,192,28,23, +193,2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,95,23, +195,1,23,194,1,27,28,23,198,2,251,2,79,23,198,2,23,203,2,23,201, +2,23,202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,150,15, +195,27,249,22,168,15,197,200,28,28,248,22,163,15,193,10,248,22,162,15,193, +192,11,11,28,192,192,28,198,11,251,2,79,198,203,201,202,194,32,82,88,163, +8,36,40,58,11,2,50,222,33,83,28,248,22,87,23,197,2,11,27,248,22, +176,15,248,22,80,23,199,2,27,249,22,168,15,23,196,1,23,197,2,28,248, +22,162,15,23,194,2,250,2,78,198,199,195,86,94,23,193,1,27,248,22,81, +23,200,1,28,248,22,87,23,194,2,11,27,248,22,176,15,248,22,80,23,196, +2,27,249,22,168,15,23,196,1,23,200,2,28,248,22,162,15,23,194,2,250, +2,78,201,202,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87, +23,194,2,11,27,248,22,176,15,248,22,80,195,27,249,22,168,15,23,196,1, +202,28,248,22,162,15,193,250,2,78,204,205,195,251,2,82,204,205,206,248,22, +81,199,86,95,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195, +2,28,248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,12,250,22, +168,11,2,6,2,48,23,197,2,28,28,23,195,2,28,28,248,22,150,15,23, 196,2,10,28,248,22,144,7,23,196,2,28,248,22,173,15,23,196,2,10,248, -22,174,15,23,196,2,11,12,250,22,168,11,2,13,2,44,23,198,2,28,248, -22,173,15,23,196,2,12,251,22,170,11,2,13,2,48,2,42,23,199,2,86, -94,86,94,28,28,248,22,150,15,23,197,2,10,28,248,22,144,7,23,197,2, -28,248,22,173,15,23,197,2,10,248,22,174,15,23,197,2,11,12,250,22,168, -11,2,13,2,44,23,199,2,28,248,22,173,15,23,197,2,12,251,22,170,11, -2,13,2,48,2,42,23,200,2,249,22,3,32,0,88,163,8,36,37,46,11, -9,222,33,90,23,199,2,28,28,248,22,0,23,195,2,249,22,50,23,196,2, -37,11,12,250,22,168,11,2,13,2,49,23,197,2,251,80,158,40,46,23,198, -1,23,200,1,23,201,1,23,199,1,27,248,22,191,15,70,99,111,110,102,105, -103,45,100,105,114,27,28,248,22,174,15,23,195,2,23,194,1,20,13,159,80, -159,38,56,37,250,80,159,41,57,37,249,22,33,11,80,159,43,56,37,22,128, -16,248,22,191,15,68,111,114,105,103,45,100,105,114,27,248,22,191,15,2,52, -250,80,159,42,40,39,23,196,1,23,198,1,11,28,23,193,2,249,22,168,15, -23,195,1,2,51,11,248,22,158,13,23,194,1,28,248,22,178,12,23,194,2, -86,94,23,193,1,249,22,16,247,22,19,32,0,88,163,8,36,36,41,11,9, -222,11,88,163,8,36,36,43,11,9,223,0,33,93,32,95,88,163,8,36,37, -55,11,2,46,222,33,96,27,249,22,154,6,8,128,128,23,196,2,28,248,22, +22,174,15,23,196,2,11,248,22,173,15,23,196,2,11,10,12,250,22,168,11, +2,6,6,45,45,40,111,114,47,99,32,35,102,32,40,97,110,100,47,99,32, +112,97,116,104,45,115,116,114,105,110,103,63,32,114,101,108,97,116,105,118,101, +45,112,97,116,104,63,41,41,23,198,2,28,28,248,22,173,15,23,195,2,90, +159,39,11,89,161,39,36,11,248,22,171,15,23,198,2,249,22,159,9,194,2, +49,11,27,249,22,166,8,247,22,165,8,5,4,80,65,84,72,27,28,23,194, +2,249,80,158,40,41,249,22,156,8,23,198,1,7,63,9,86,94,23,194,1, +9,27,28,249,22,159,9,247,22,171,8,2,43,249,22,79,248,22,159,15,5, +1,46,23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,176,15, +248,22,80,23,196,2,27,249,22,168,15,23,196,1,23,201,2,28,248,22,162, +15,23,194,2,250,2,78,202,203,195,86,94,23,193,1,27,248,22,81,23,197, +1,28,248,22,87,23,194,2,11,27,248,22,176,15,248,22,80,23,196,2,27, +249,22,168,15,23,196,1,23,204,2,28,248,22,162,15,23,194,2,250,2,78, +205,206,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194, +2,11,27,248,22,176,15,248,22,80,195,27,249,22,168,15,23,196,1,206,28, +248,22,162,15,193,250,2,78,23,16,23,17,195,251,2,82,23,16,23,17,23, +18,248,22,81,199,27,248,22,176,15,23,196,1,28,248,22,162,15,193,250,2, +78,198,199,195,11,250,80,159,39,40,39,196,197,11,250,80,159,39,40,39,196, +11,11,32,87,88,163,8,36,39,57,11,2,50,222,33,89,0,8,35,114,120, +35,34,92,34,34,27,249,22,141,16,23,197,2,23,198,2,28,23,193,2,86, +94,23,196,1,27,248,22,101,23,195,2,27,27,248,22,110,23,197,1,27,249, +22,141,16,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22, +101,23,195,2,27,250,2,87,23,203,2,23,204,1,248,22,110,23,199,1,28, +249,22,141,8,23,196,2,2,51,249,22,93,23,202,2,194,249,22,79,248,22, +159,15,28,249,22,159,9,247,22,171,8,2,43,250,22,153,16,2,88,23,200, +1,2,51,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,141,8,23, +196,2,2,51,249,22,93,23,200,2,9,249,22,79,248,22,159,15,28,249,22, +159,9,247,22,171,8,2,43,250,22,153,16,2,88,23,200,1,2,51,23,197, +1,9,28,249,22,141,8,23,196,2,2,51,249,22,93,197,194,86,94,23,196, +1,249,22,79,248,22,159,15,28,249,22,159,9,247,22,171,8,2,43,250,22, +153,16,2,88,23,200,1,2,51,23,197,1,194,86,94,23,193,1,28,249,22, +141,8,23,198,2,2,51,249,22,93,195,9,86,94,23,194,1,249,22,79,248, +22,159,15,28,249,22,159,9,247,22,171,8,2,43,250,22,153,16,2,88,23, +202,1,2,51,23,199,1,9,86,95,28,28,248,22,133,8,194,10,248,22,144, +7,194,12,250,22,168,11,2,7,6,21,21,40,111,114,47,99,32,98,121,116, +101,115,63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,88,195,249,22, +4,22,150,15,196,11,12,250,22,168,11,2,7,6,14,14,40,108,105,115,116, +111,102,32,112,97,116,104,63,41,197,250,2,87,197,195,28,248,22,144,7,197, +248,22,158,8,197,196,86,94,28,28,248,22,150,15,23,195,2,10,28,248,22, +144,7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,15,23,195,2, +11,12,250,22,168,11,23,196,2,2,48,23,197,2,28,248,22,173,15,23,195, +2,12,251,22,170,11,23,197,1,2,52,2,46,23,198,1,86,94,28,28,248, +22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173,15,23, +195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,23,196,2,2,48, +23,197,2,28,248,22,173,15,23,195,2,12,251,22,170,11,23,197,1,2,52, +2,46,23,198,1,86,94,86,94,28,28,248,22,150,15,23,195,2,10,28,248, +22,144,7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,15,23,195, +2,11,12,250,22,168,11,23,196,2,2,48,23,197,2,28,248,22,173,15,23, +195,2,86,94,23,194,1,12,251,22,170,11,23,197,2,2,52,2,46,23,198, +1,249,22,3,20,20,94,88,163,8,36,37,47,11,9,223,2,33,92,23,195, +1,23,197,1,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12, +250,22,168,11,23,196,1,2,53,23,197,1,86,94,28,28,248,22,150,15,23, +194,2,10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248, +22,174,15,23,194,2,11,12,250,22,168,11,2,11,2,48,23,196,2,28,248, +22,173,15,23,194,2,12,251,22,170,11,2,11,2,52,2,46,23,197,1,86, +95,86,94,86,94,28,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23, +196,2,28,248,22,173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,250, +22,168,11,2,11,2,48,23,198,2,28,248,22,173,15,23,196,2,12,251,22, +170,11,2,11,2,52,2,46,23,199,2,249,22,3,32,0,88,163,8,36,37, +46,11,9,222,33,95,23,198,2,28,28,248,22,0,23,195,2,249,22,50,23, +196,2,37,11,12,250,22,168,11,2,11,2,53,23,197,2,251,80,158,40,46, +23,198,1,23,199,1,23,200,1,11,86,94,28,28,248,22,150,15,23,194,2, +10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174, +15,23,194,2,11,12,250,22,168,11,2,13,2,48,23,196,2,28,248,22,173, +15,23,194,2,12,251,22,170,11,2,13,2,52,2,46,23,197,1,86,96,86, +94,28,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248, +22,173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,250,22,168,11,2, +13,2,48,23,198,2,28,248,22,173,15,23,196,2,12,251,22,170,11,2,13, +2,52,2,46,23,199,2,86,94,86,94,28,28,248,22,150,15,23,197,2,10, +28,248,22,144,7,23,197,2,28,248,22,173,15,23,197,2,10,248,22,174,15, +23,197,2,11,12,250,22,168,11,2,13,2,48,23,199,2,28,248,22,173,15, +23,197,2,12,251,22,170,11,2,13,2,52,2,46,23,200,2,249,22,3,32, +0,88,163,8,36,37,46,11,9,222,33,97,23,199,2,28,28,248,22,0,23, +195,2,249,22,50,23,196,2,37,11,12,250,22,168,11,2,13,2,53,23,197, +2,251,80,158,40,46,23,198,1,23,200,1,23,201,1,23,199,1,27,248,22, +191,15,2,56,28,248,22,175,15,23,194,2,192,27,28,248,22,173,15,23,195, +2,20,13,159,80,159,38,55,37,250,80,159,41,56,37,249,22,33,11,80,159, +43,55,37,22,128,16,248,22,191,15,2,57,27,248,22,191,15,2,58,250,80, +159,42,40,39,23,196,1,23,198,2,11,11,28,23,193,2,192,86,94,23,193, +1,27,249,22,176,15,27,248,22,191,15,2,58,250,80,159,45,40,39,23,196, +1,11,11,248,22,191,15,2,57,90,159,39,11,89,161,39,36,11,248,22,171, +15,23,197,1,86,95,23,195,1,23,194,1,249,22,176,15,23,200,1,23,195, +1,27,249,22,168,15,23,196,1,6,11,11,99,111,110,102,105,103,46,114,107, +116,100,27,28,248,22,162,15,23,195,2,249,22,132,6,23,196,1,22,139,6, +11,28,192,192,21,17,1,0,28,248,22,144,7,23,194,2,248,22,158,15,23, +194,1,28,248,22,133,8,23,194,2,248,22,159,15,23,194,1,192,32,102,88, +163,8,36,38,54,11,2,50,222,33,103,28,248,22,87,23,195,2,9,28,248, +22,80,23,195,2,249,22,79,27,248,22,132,18,23,198,2,28,248,22,144,7, +23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248,22,159, +15,23,194,1,192,27,248,22,133,18,23,198,1,28,248,22,87,23,194,2,9, +28,248,22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22, +144,7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248, +22,159,15,23,194,1,192,27,248,22,133,18,23,197,1,28,248,22,87,23,194, +2,9,28,248,22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28, +248,22,144,7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194, +2,248,22,159,15,23,194,1,192,249,2,102,23,203,1,248,22,133,18,23,198, +1,249,22,93,23,201,2,249,2,102,23,203,1,248,22,133,18,23,198,1,249, +22,93,23,198,2,27,248,22,133,18,23,197,1,28,248,22,87,23,194,2,9, +28,248,22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22, +144,7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248, +22,159,15,23,194,1,192,249,2,102,23,203,1,248,22,133,18,23,198,1,249, +22,93,23,201,2,249,2,102,23,203,1,248,22,133,18,23,198,1,249,22,93, +23,195,2,27,248,22,133,18,23,198,1,28,248,22,87,23,194,2,9,28,248, +22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22,144,7, +23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248,22,159, +15,23,194,1,192,27,248,22,133,18,23,197,1,28,248,22,87,23,194,2,9, +28,248,22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22, +144,7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248, +22,159,15,23,194,1,192,249,2,102,23,203,1,248,22,133,18,23,198,1,249, +22,93,23,201,2,249,2,102,23,203,1,248,22,133,18,23,198,1,249,22,93, +23,198,2,27,248,22,133,18,23,197,1,28,248,22,87,23,194,2,9,28,248, +22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22,144,7, +23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248,22,159, +15,23,194,1,192,249,2,102,23,203,1,248,22,133,18,23,198,1,249,22,93, +23,201,2,249,2,102,23,203,1,248,22,133,18,23,198,1,27,250,22,157,2, +23,198,1,23,199,1,11,28,23,193,2,28,248,22,87,23,194,2,9,28,248, +22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22,144,7, +23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248,22,159, +15,23,194,1,192,27,248,22,133,18,23,197,1,28,248,22,87,23,194,2,9, +28,248,22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22, +144,7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248, +22,159,15,23,194,1,192,249,2,102,23,204,1,248,22,133,18,23,198,1,249, +22,93,23,202,2,249,2,102,23,204,1,248,22,133,18,23,198,1,249,22,93, +23,199,2,27,248,22,133,18,23,197,1,28,248,22,87,23,194,2,9,28,248, +22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22,144,7, +23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248,22,159, +15,23,194,1,192,249,2,102,23,204,1,248,22,133,18,23,198,1,249,22,93, +23,202,2,249,2,102,23,204,1,248,22,133,18,23,198,1,196,32,105,88,163, +8,36,38,51,11,2,50,222,33,106,28,248,22,87,23,195,2,9,28,248,22, +80,23,195,2,249,22,79,27,248,22,132,18,23,198,2,28,248,22,144,7,23, +194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248,22,159,15, +23,194,1,192,27,248,22,133,18,23,198,1,28,248,22,87,23,194,2,9,28, +248,22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22,144, +7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248,22, +159,15,23,194,1,192,249,2,105,23,200,1,248,22,133,18,23,198,1,249,22, +93,23,198,2,249,2,105,23,200,1,248,22,133,18,23,198,1,249,22,93,23, +195,2,27,248,22,133,18,23,198,1,28,248,22,87,23,194,2,9,28,248,22, +80,23,194,2,249,22,79,27,248,22,132,18,23,197,2,28,248,22,144,7,23, +194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2,248,22,159,15, +23,194,1,192,249,2,105,23,200,1,248,22,133,18,23,198,1,249,22,93,23, +198,2,249,2,105,23,200,1,248,22,133,18,23,198,1,27,27,248,22,191,15, +2,56,28,248,22,175,15,23,194,2,192,27,28,248,22,173,15,23,195,2,20, +13,159,80,159,39,55,37,250,80,159,42,56,37,249,22,33,11,80,159,44,55, +37,22,128,16,248,22,191,15,2,57,27,248,22,191,15,2,58,250,80,159,43, +40,39,23,196,1,23,198,2,11,11,28,23,193,2,192,86,94,23,193,1,27, +249,22,176,15,27,248,22,191,15,2,58,250,80,159,46,40,39,23,196,1,11, +11,248,22,191,15,2,57,90,159,39,11,89,161,39,36,11,248,22,171,15,23, +197,1,86,95,23,195,1,23,194,1,249,22,176,15,23,200,1,23,195,1,27, +248,80,159,39,57,39,23,195,2,27,250,22,157,2,23,197,2,70,108,105,110, +107,115,45,102,105,108,101,11,27,28,23,194,2,86,94,23,196,1,23,194,1, +86,94,23,194,1,249,22,168,15,27,27,250,22,157,2,23,202,2,67,108,105, +98,45,100,105,114,11,28,248,22,144,7,23,194,2,248,22,158,15,23,194,1, +28,248,22,133,8,23,194,2,248,22,159,15,23,194,1,192,28,23,193,2,192, +86,94,23,193,1,250,22,168,15,23,202,1,62,117,112,6,3,3,108,105,98, +2,55,248,22,182,8,27,248,22,89,23,196,1,27,250,22,157,2,23,201,1, +78,108,105,110,107,115,45,115,101,97,114,99,104,45,102,105,108,101,115,11,28, +23,193,2,249,2,105,23,196,1,23,195,1,193,248,22,158,13,23,194,1,28, +248,22,178,12,23,194,2,86,94,23,193,1,249,22,16,247,22,19,32,0,88, +163,8,36,36,41,11,9,222,11,88,163,8,36,36,43,11,9,223,0,33,108, +32,110,88,163,8,36,37,55,11,2,50,222,33,111,27,249,22,154,6,8,128, +128,23,196,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249, +22,154,6,8,128,128,23,199,2,28,248,22,139,7,23,194,2,9,249,22,79, +23,195,1,27,249,22,154,6,8,128,128,23,202,2,28,248,22,139,7,23,194, +2,9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23,205,2,28,248, +22,139,7,23,194,2,9,249,22,79,23,195,1,248,2,110,23,206,1,27,249, +22,154,6,8,128,128,23,196,2,28,248,22,133,8,23,194,2,28,249,22,129, +4,248,22,138,8,23,196,2,8,128,128,249,22,1,22,145,8,249,22,79,23, +197,1,27,249,22,154,6,8,128,128,23,201,2,28,248,22,139,7,23,194,2, +9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23,204,2,28,248,22, 139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23, -199,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,154, -6,8,128,128,23,202,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195, -1,27,249,22,154,6,8,128,128,23,205,2,28,248,22,139,7,23,194,2,9, -249,22,79,23,195,1,248,2,95,23,206,1,27,249,22,154,6,8,128,128,23, -196,2,28,248,22,133,8,23,194,2,28,249,22,129,4,248,22,138,8,23,196, -2,8,128,128,249,22,1,22,145,8,249,22,79,23,197,1,27,249,22,154,6, -8,128,128,23,201,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1, -27,249,22,154,6,8,128,128,23,204,2,28,248,22,139,7,23,194,2,9,249, -22,79,23,195,1,27,249,22,154,6,8,128,128,23,207,2,28,248,22,139,7, -23,194,2,9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23,210,2, -28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,248,2,95,23,211,1, -192,192,248,22,191,5,23,194,1,20,13,159,80,159,37,8,25,37,32,0,88, -163,36,37,44,11,9,222,33,94,27,248,22,182,5,23,195,1,250,22,46,22, -37,88,163,36,36,8,24,11,9,223,3,33,97,20,20,94,88,163,36,36,43, -11,9,223,3,33,98,23,196,1,248,22,14,20,20,94,88,163,36,36,47,8, -240,0,0,0,2,9,224,1,2,33,99,23,195,1,86,94,28,248,22,135,12, -23,198,2,27,247,22,191,11,28,249,22,183,11,23,195,2,2,53,251,22,187, -11,23,197,1,2,53,250,22,128,8,2,54,28,23,202,1,86,94,23,203,1, -80,159,47,48,38,28,23,203,1,80,159,47,51,38,80,159,47,54,38,248,22, -131,12,23,206,2,247,22,29,12,12,28,248,22,135,12,23,198,2,86,94,23, -197,1,248,23,194,1,247,22,137,2,196,86,95,28,248,22,135,12,23,199,2, -27,247,22,191,11,28,249,22,183,11,23,195,2,2,53,251,22,187,11,23,197, -1,2,53,250,22,128,8,2,54,28,23,203,2,80,159,48,48,38,28,23,204, -2,80,159,48,51,38,80,159,48,54,38,248,22,131,12,23,207,2,247,22,29, -12,12,28,23,193,2,28,23,195,1,86,94,23,196,1,86,94,20,18,159,11, -80,158,40,49,247,22,137,2,20,18,159,11,80,158,40,50,23,193,1,28,23, -196,1,86,94,20,18,159,11,80,158,40,52,247,22,137,2,20,18,159,11,80, -158,40,53,23,193,1,86,94,20,18,159,11,80,158,40,58,247,22,137,2,20, -18,159,11,80,158,40,59,23,193,1,86,94,23,195,1,12,28,248,22,135,12, -23,199,2,86,94,23,198,1,248,23,195,1,247,22,137,2,197,20,20,94,248, -22,139,6,23,194,2,28,248,22,139,7,248,22,139,6,23,195,1,12,248,22, -164,11,6,30,30,101,120,112,101,99,116,101,100,32,97,32,115,105,110,103,108, -101,32,83,45,101,120,112,114,101,115,115,105,111,110,248,22,191,5,23,194,1, -28,248,22,88,23,194,2,28,28,249,22,189,3,38,248,22,92,23,196,2,10, -249,22,189,3,39,248,22,92,23,196,2,28,28,248,22,144,7,248,22,80,23, -195,2,10,249,22,159,9,64,114,111,111,116,248,22,132,18,23,196,2,28,27, -248,22,101,194,28,248,22,150,15,23,194,2,10,28,248,22,144,7,23,194,2, -28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,1,11,27,248,22,87, -248,22,103,195,28,192,192,248,22,154,16,248,22,110,195,11,11,11,11,250,22, -155,2,23,197,1,23,198,1,249,22,79,23,198,1,23,201,1,28,28,248,22, -87,248,22,103,23,197,2,10,249,22,145,16,248,22,110,23,198,2,247,22,162, -8,27,248,22,178,15,249,22,176,15,248,22,101,23,200,2,23,198,1,28,248, -22,64,248,22,80,23,198,2,86,94,23,196,1,86,94,28,250,22,157,2,23, -197,2,11,11,12,250,22,155,2,23,197,2,11,9,249,22,161,2,23,196,2, -20,20,95,88,163,8,36,38,50,11,9,224,3,2,33,106,23,195,1,23,196, -1,27,248,22,67,248,22,132,18,23,199,1,250,22,155,2,23,198,2,23,196, -2,249,22,79,248,22,128,2,23,200,1,250,22,157,2,23,203,1,23,201,1, -9,12,250,22,155,2,23,196,1,23,197,1,248,22,94,23,199,1,20,13,159, -80,159,38,8,25,37,88,163,36,37,55,8,240,0,144,4,0,9,226,2,1, -0,3,33,101,27,28,23,194,2,80,159,39,48,38,28,23,195,2,80,159,39, -51,38,80,159,39,54,38,27,248,80,159,41,8,24,39,23,195,2,28,249,22, -161,9,23,195,2,28,23,197,2,80,158,42,50,28,23,198,2,80,158,42,53, -80,158,42,59,28,194,80,158,40,49,28,195,80,158,40,52,80,158,40,58,20, -13,159,80,159,40,8,25,37,20,20,94,88,163,36,37,56,8,240,0,240,199, -0,9,227,4,3,2,5,0,33,102,23,198,1,20,13,159,80,159,40,56,37, -26,29,80,159,8,33,57,37,249,22,33,11,80,159,8,35,56,37,22,184,14, -10,22,185,14,10,22,186,14,10,22,189,14,10,22,188,14,10,22,190,14,10, -22,187,14,10,22,191,14,10,22,128,15,10,22,129,15,10,22,130,15,10,22, -131,15,10,22,132,15,11,22,182,14,11,27,249,22,182,5,23,197,2,66,98, -105,110,97,114,121,27,250,22,46,22,37,88,163,8,36,36,44,11,9,223,4, -33,103,20,20,94,88,163,36,36,43,11,9,223,4,33,104,23,197,1,86,94, -28,28,248,22,88,23,194,2,249,22,4,32,0,88,163,8,36,37,45,11,9, -222,33,105,23,195,2,11,12,248,22,164,11,6,18,18,105,108,108,45,102,111, -114,109,101,100,32,99,111,110,116,101,110,116,27,247,22,137,2,27,90,159,39, -11,89,161,39,36,11,248,22,171,15,23,202,1,192,86,96,249,22,3,20,20, -94,88,163,8,36,37,54,11,9,224,2,3,33,107,23,195,1,23,197,1,249, -22,161,2,195,88,163,8,36,38,48,11,9,223,3,33,108,28,198,86,94,20, -18,159,11,80,158,44,49,193,20,18,159,11,80,158,44,50,196,28,199,86,94, -20,18,159,11,80,158,44,52,193,20,18,159,11,80,158,44,53,196,86,94,20, -18,159,11,80,158,44,58,193,20,18,159,11,80,158,44,59,196,193,248,22,9, -20,20,95,88,163,8,32,37,8,42,8,240,0,240,247,3,9,225,1,3,2, -33,109,23,195,1,23,196,1,0,7,35,114,120,34,47,43,34,28,248,22,144, -7,23,195,2,27,249,22,143,16,2,111,23,197,2,28,23,193,2,28,249,22, -189,3,248,22,100,23,196,2,248,22,179,3,248,22,147,7,23,199,2,249,22, -7,250,22,166,7,23,200,1,36,248,22,100,23,199,1,23,198,1,249,22,7, -250,22,166,7,23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,166,7, -23,201,1,248,22,102,23,200,1,23,200,1,249,22,7,23,197,1,23,198,1, -90,159,39,11,89,161,39,36,11,248,22,171,15,23,198,1,86,94,23,195,1, -28,249,22,159,9,23,195,2,2,45,86,94,23,193,1,249,22,7,23,196,1, -23,200,1,27,249,22,79,23,197,1,23,201,1,28,248,22,144,7,23,195,2, -27,249,22,143,16,2,111,23,197,2,28,23,193,2,28,249,22,189,3,248,22, +207,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,154, +6,8,128,128,23,210,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195, +1,248,2,110,23,211,1,192,192,248,22,191,5,23,194,1,20,13,159,80,159, +37,8,29,37,32,0,88,163,36,37,44,11,9,222,33,109,27,248,22,182,5, +23,195,1,250,22,46,22,37,88,163,36,36,8,24,11,9,223,3,33,112,20, +20,94,88,163,36,36,43,11,9,223,3,33,113,23,196,1,248,22,14,20,20, +94,88,163,36,36,47,16,2,36,8,128,128,9,224,1,2,33,114,23,195,1, +86,94,28,248,22,135,12,23,199,2,27,247,22,191,11,28,249,22,183,11,23, +195,2,2,59,251,22,187,11,23,197,1,2,59,250,22,128,8,2,60,28,23, +202,1,86,95,23,204,1,23,203,1,80,159,48,48,38,28,23,203,1,86,94, +23,204,1,80,159,48,51,38,249,22,179,8,80,159,50,8,24,38,23,206,1, +248,22,131,12,23,207,2,247,22,29,12,12,28,248,22,135,12,23,199,2,86, +94,23,198,1,248,23,194,1,247,22,137,2,197,86,95,28,248,22,135,12,23, +200,2,27,247,22,191,11,28,249,22,183,11,23,195,2,2,59,251,22,187,11, +23,197,1,2,59,250,22,128,8,2,60,28,23,203,2,80,159,49,48,38,28, +23,204,2,80,159,49,51,38,249,22,179,8,80,159,51,8,24,38,23,207,2, +248,22,131,12,23,208,2,247,22,29,12,12,28,23,193,2,28,23,195,1,86, +95,23,197,1,23,196,1,86,94,20,18,159,11,80,158,41,49,247,22,137,2, +20,18,159,11,80,158,41,50,23,193,1,28,23,196,1,86,94,23,197,1,86, +94,20,18,159,11,80,158,41,52,247,22,137,2,20,18,159,11,80,158,41,53, +23,193,1,86,94,250,22,180,8,80,159,44,8,26,38,23,200,2,247,22,137, +2,250,22,180,8,80,159,44,8,27,38,23,200,1,23,196,1,86,94,23,195, +1,12,28,248,22,135,12,23,200,2,86,94,23,199,1,248,23,195,1,247,22, +137,2,198,20,20,94,248,22,139,6,23,194,2,28,248,22,139,7,248,22,139, +6,23,195,1,12,248,22,164,11,6,30,30,101,120,112,101,99,116,101,100,32, +97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101,115,115,105,111,110, +248,22,191,5,23,194,1,28,248,22,88,23,194,2,28,28,249,22,189,3,38, +248,22,92,23,196,2,10,249,22,189,3,39,248,22,92,23,196,2,28,28,248, +22,144,7,248,22,80,23,195,2,10,249,22,159,9,64,114,111,111,116,248,22, +132,18,23,196,2,28,27,248,22,101,194,28,248,22,150,15,23,194,2,10,28, +248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23, +194,1,11,27,248,22,87,248,22,103,195,28,192,192,248,22,154,16,248,22,110, +195,11,11,11,11,250,22,155,2,23,197,1,23,198,1,249,22,79,23,198,1, +23,201,1,28,28,248,22,87,248,22,103,23,197,2,10,249,22,145,16,248,22, +110,23,198,2,247,22,162,8,27,248,22,178,15,249,22,176,15,248,22,101,23, +200,2,23,198,1,28,248,22,64,248,22,80,23,198,2,86,94,23,196,1,86, +94,28,250,22,157,2,23,197,2,11,11,12,250,22,155,2,23,197,2,11,9, +249,22,161,2,23,196,2,20,20,95,88,163,8,36,38,50,11,9,224,3,2, +33,121,23,195,1,23,196,1,27,248,22,67,248,22,132,18,23,199,1,250,22, +155,2,23,198,2,23,196,2,249,22,79,248,22,128,2,23,200,1,250,22,157, +2,23,203,1,23,201,1,9,12,250,22,155,2,23,196,1,23,197,1,248,22, +94,23,199,1,20,13,159,80,159,39,8,29,37,88,163,36,37,57,8,240,0, +144,0,1,9,227,3,2,1,0,4,33,116,27,28,23,194,2,80,159,40,48, +38,28,23,195,2,80,159,40,51,38,249,22,179,8,80,159,42,8,24,38,23, +198,2,27,248,80,159,42,8,28,39,23,195,2,28,249,22,161,9,23,195,2, +28,23,197,2,80,158,43,50,28,23,198,2,80,158,43,53,249,22,179,8,80, +159,45,8,27,38,23,201,2,86,96,23,199,1,23,194,1,23,193,1,28,23, +195,1,80,158,41,49,28,23,196,1,80,158,41,52,249,22,179,8,80,159,43, +8,26,38,23,199,1,20,13,159,80,159,41,8,29,37,20,20,94,88,163,36, +37,58,16,2,8,240,0,240,0,0,8,131,52,9,228,5,4,3,2,6,0, +33,117,23,199,1,20,13,159,80,159,41,55,37,26,29,80,159,8,34,56,37, +249,22,33,11,80,159,8,36,55,37,22,184,14,10,22,185,14,10,22,186,14, +10,22,189,14,10,22,188,14,10,22,190,14,10,22,187,14,10,22,191,14,10, +22,128,15,10,22,129,15,10,22,130,15,10,22,131,15,10,22,132,15,11,22, +182,14,11,27,249,22,182,5,23,197,2,66,98,105,110,97,114,121,27,250,22, +46,22,37,88,163,8,36,36,44,11,9,223,4,33,118,20,20,94,88,163,36, +36,43,11,9,223,4,33,119,23,197,1,86,94,28,28,248,22,88,23,194,2, +249,22,4,32,0,88,163,8,36,37,45,11,9,222,33,120,23,195,2,11,12, +248,22,164,11,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110, +116,101,110,116,27,247,22,137,2,27,90,159,39,11,89,161,39,36,11,248,22, +171,15,23,202,1,192,86,96,249,22,3,20,20,94,88,163,8,36,37,54,11, +9,224,2,3,33,122,23,195,1,23,197,1,249,22,161,2,195,88,163,8,36, +38,48,11,9,223,3,33,123,28,23,199,1,86,94,20,18,159,11,80,158,45, +49,193,20,18,159,11,80,158,45,50,196,28,23,200,1,86,94,20,18,159,11, +80,158,45,52,193,20,18,159,11,80,158,45,53,196,86,94,250,22,180,8,80, +159,48,8,26,38,23,204,2,196,250,22,180,8,80,159,48,8,27,38,23,204, +1,23,200,1,193,248,22,9,20,20,96,88,163,8,32,37,8,43,16,2,8, +240,0,240,0,0,8,155,244,9,226,1,4,3,2,33,124,23,195,1,23,196, +1,23,197,1,0,7,35,114,120,34,47,43,34,28,248,22,144,7,23,195,2, +27,249,22,143,16,2,126,23,197,2,28,23,193,2,28,249,22,189,3,248,22, 100,23,196,2,248,22,179,3,248,22,147,7,23,199,2,249,22,7,250,22,166, -7,23,200,1,36,248,22,100,23,199,1,23,196,1,249,22,7,250,22,166,7, +7,23,200,1,36,248,22,100,23,199,1,23,198,1,249,22,7,250,22,166,7, 23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,166,7,23,201,1,248, -22,102,23,200,1,23,198,1,249,22,7,23,197,1,23,196,1,90,159,39,11, +22,102,23,200,1,23,200,1,249,22,7,23,197,1,23,198,1,90,159,39,11, 89,161,39,36,11,248,22,171,15,23,198,1,86,94,23,195,1,28,249,22,159, -9,23,195,2,2,45,86,94,23,193,1,249,22,7,23,196,1,23,198,1,249, -80,159,45,8,27,39,194,249,22,79,197,199,32,113,88,163,36,43,8,31,11, -65,99,108,111,111,112,222,33,122,32,114,88,163,8,36,37,47,11,2,46,222, -33,117,32,115,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103,222, -33,116,28,248,22,150,15,23,194,2,248,22,154,15,23,194,1,192,28,248,22, -87,248,22,81,23,195,2,248,22,89,248,2,115,248,22,132,18,23,196,1,250, -22,90,248,2,115,248,22,132,18,23,198,2,2,56,248,2,114,248,22,133,18, -23,198,1,250,22,128,8,6,7,7,10,32,126,97,32,126,97,6,1,1,32, -23,196,1,249,22,128,8,6,6,6,10,32,32,32,126,97,248,22,131,2,23, -196,1,32,120,88,163,36,38,48,11,66,102,105,108,116,101,114,222,33,121,28, -248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196,2,249,22,79, -248,22,132,18,23,197,2,249,2,120,23,197,1,248,22,133,18,23,199,1,249, -2,120,23,195,1,248,22,133,18,23,197,1,28,248,22,87,23,199,2,86,94, -23,198,1,28,23,199,2,86,97,23,196,1,23,195,1,23,194,1,23,193,1, -28,23,197,2,249,22,168,15,23,201,1,23,199,1,198,27,28,248,22,87,23, -197,2,2,55,249,22,1,22,167,7,248,2,114,23,199,2,248,23,198,1,251, -22,128,8,6,70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32, -102,111,117,110,100,10,32,32,99,111,108,108,101,99,116,105,111,110,58,32,126, -115,10,32,32,105,110,32,99,111,108,108,101,99,116,105,111,110,32,100,105,114, -101,99,116,111,114,105,101,115,58,126,97,126,97,28,248,22,87,23,202,1,248, -2,115,23,201,1,250,22,167,7,248,2,115,23,204,1,2,56,23,201,2,249, -22,1,22,167,7,249,22,2,32,0,88,163,8,36,37,45,11,9,222,33,118, -27,248,22,92,23,205,2,27,248,22,92,247,22,130,16,28,249,22,190,3,249, -22,181,3,23,198,2,23,197,2,41,23,205,2,249,22,93,247,22,130,16,248, -22,89,249,22,128,8,6,50,50,46,46,46,32,91,126,97,32,97,100,100,105, -116,105,111,110,97,108,32,108,105,110,107,101,100,32,97,110,100,32,112,97,99, -107,97,103,101,32,100,105,114,101,99,116,111,114,105,101,115,93,249,22,181,3, -23,201,1,23,200,1,28,249,22,5,22,130,2,23,201,2,250,22,128,8,6, -49,49,10,32,32,32,115,117,98,45,99,111,108,108,101,99,116,105,111,110,58, -32,126,115,10,32,32,105,110,32,112,97,114,101,110,116,32,100,105,114,101,99, -116,111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,167,7,249,22,2, -32,0,88,163,8,36,37,45,11,9,222,33,119,249,2,120,22,130,2,23,208, -1,86,95,23,199,1,23,198,1,2,55,27,248,22,80,23,200,2,27,28,248, -22,150,15,23,195,2,249,22,168,15,23,196,1,23,198,2,248,22,131,2,23, -195,1,28,28,248,22,150,15,248,22,80,23,202,2,248,22,163,15,23,194,2, -10,27,250,22,1,22,168,15,23,197,1,23,201,2,28,28,248,22,87,23,199, -2,10,248,22,163,15,23,194,2,28,23,200,2,28,28,248,22,162,15,249,22, -168,15,23,196,2,23,203,2,10,27,28,248,22,150,15,23,202,2,248,22,154, -15,23,202,2,23,201,2,19,248,22,147,7,23,195,2,27,28,249,22,129,4, -23,196,4,40,28,249,22,150,7,6,4,4,46,114,107,116,249,22,166,7,23, -199,2,249,22,181,3,23,200,4,40,249,22,167,7,250,22,166,7,23,200,1, -36,249,22,181,3,23,201,4,40,6,3,3,46,115,115,86,94,23,195,1,11, -11,28,23,193,2,248,22,162,15,249,22,168,15,23,199,2,23,196,1,11,2, -86,99,23,202,1,23,201,1,23,199,1,23,198,1,23,197,1,23,196,1,28, -23,200,2,249,22,168,15,23,195,1,23,202,1,192,254,2,113,202,203,204,205, -206,248,22,81,23,16,28,23,16,23,16,199,28,23,200,2,249,22,168,15,23, -195,1,23,202,1,192,254,2,113,202,203,204,205,206,248,22,81,23,16,23,16, -254,2,113,201,202,203,204,205,248,22,81,23,15,23,15,90,159,38,11,89,161, -38,36,11,249,80,159,40,8,27,39,23,199,1,23,200,1,27,248,22,67,28, -248,22,150,15,195,248,22,154,15,195,194,27,247,22,134,16,27,250,22,93,28, -23,197,2,28,247,22,133,16,249,22,93,27,249,80,159,49,8,26,39,10,11, -249,22,93,250,22,157,2,23,198,2,23,206,2,9,250,22,157,2,23,198,1, -11,9,27,249,80,159,49,8,26,39,11,10,249,22,93,250,22,157,2,23,198, -2,23,206,2,9,250,22,157,2,23,198,1,11,9,9,9,28,23,197,1,28, -80,159,44,54,38,27,249,80,159,47,8,26,39,11,11,249,22,93,250,22,157, -2,23,198,2,23,204,1,9,250,22,157,2,23,198,1,11,9,86,94,23,198, -1,9,9,247,22,130,16,254,2,113,199,202,203,205,23,16,199,11,86,95,28, -28,248,22,151,15,23,194,2,10,28,248,22,150,15,23,194,2,10,28,248,22, -144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2, -11,12,252,22,168,11,23,200,2,2,38,36,23,198,2,23,199,2,28,28,248, -22,144,7,23,195,2,10,248,22,133,8,23,195,2,86,94,23,194,1,12,252, -22,168,11,23,200,2,2,57,37,23,198,2,23,199,1,90,159,39,11,89,161, -39,36,11,248,22,171,15,23,197,2,86,94,23,195,1,86,94,28,23,193,2, -86,95,23,198,1,23,196,1,12,250,22,171,11,23,201,1,2,58,23,199,1, -249,22,7,23,195,1,23,196,1,32,125,88,163,36,42,8,24,11,2,46,222, -33,126,28,248,22,130,4,23,199,2,86,95,23,198,1,23,194,1,19,248,22, -138,8,23,195,2,19,248,22,138,8,23,196,2,249,22,160,15,251,22,145,8, -250,22,144,8,23,204,2,36,23,203,4,2,47,249,23,205,1,23,203,1,23, -201,4,28,248,22,144,7,23,206,2,249,22,159,8,23,207,1,8,63,23,205, -1,28,248,22,151,15,23,201,2,248,22,152,15,23,201,1,86,94,23,200,1, -247,22,153,15,2,2,27,248,22,179,3,23,200,1,28,249,22,159,9,8,46, -249,22,139,8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160, -15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,1,23,202,1,249,23, -205,1,23,203,1,23,201,1,28,248,22,144,7,23,206,2,249,22,159,8,23, -207,1,8,63,23,205,1,28,248,22,151,15,23,201,2,248,22,152,15,23,201, -1,86,94,23,200,1,247,22,153,15,28,248,22,130,4,23,194,2,86,95,23, -195,1,23,193,1,19,248,22,138,8,23,196,2,19,248,22,138,8,23,197,2, -249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,4,2,47, -249,23,206,1,23,204,1,23,201,4,28,248,22,144,7,23,207,2,249,22,159, -8,23,208,1,8,63,23,206,1,28,248,22,151,15,23,202,2,248,22,152,15, -23,202,1,86,94,23,201,1,247,22,153,15,2,2,27,248,22,179,3,23,195, -1,28,249,22,159,9,8,46,249,22,139,8,23,199,2,23,197,2,27,248,22, -178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36, -23,203,1,23,203,1,249,23,206,1,23,204,1,23,201,1,28,248,22,144,7, -23,207,2,249,22,159,8,23,208,1,8,63,23,206,1,28,248,22,151,15,23, -202,2,248,22,152,15,23,202,1,86,94,23,201,1,247,22,153,15,28,248,22, -130,4,23,194,2,86,95,23,196,1,23,193,1,19,248,22,138,8,23,197,2, -19,248,22,138,8,23,198,2,249,22,160,15,251,22,145,8,250,22,144,8,23, -206,2,36,23,203,4,2,47,249,23,207,1,23,205,1,23,201,4,28,248,22, -144,7,23,208,2,249,22,159,8,23,209,1,8,63,23,207,1,28,248,22,151, -15,23,203,2,248,22,152,15,23,203,1,86,94,23,202,1,247,22,153,15,2, +9,23,195,2,2,49,86,94,23,193,1,249,22,7,23,196,1,23,200,1,27, +249,22,79,23,197,1,23,201,1,28,248,22,144,7,23,195,2,27,249,22,143, +16,2,126,23,197,2,28,23,193,2,28,249,22,189,3,248,22,100,23,196,2, +248,22,179,3,248,22,147,7,23,199,2,249,22,7,250,22,166,7,23,200,1, +36,248,22,100,23,199,1,23,196,1,249,22,7,250,22,166,7,23,200,2,36, +248,22,100,23,199,2,249,22,79,249,22,166,7,23,201,1,248,22,102,23,200, +1,23,198,1,249,22,7,23,197,1,23,196,1,90,159,39,11,89,161,39,36, +11,248,22,171,15,23,198,1,86,94,23,195,1,28,249,22,159,9,23,195,2, +2,49,86,94,23,193,1,249,22,7,23,196,1,23,198,1,249,80,159,45,8, +31,39,194,249,22,79,197,199,28,249,22,129,4,23,197,2,248,22,178,8,80, +159,39,8,24,38,9,27,250,80,159,40,8,30,39,11,11,23,199,2,250,22, +93,250,22,157,2,23,199,2,23,201,2,9,250,22,157,2,23,199,1,11,9, +27,248,22,178,3,23,201,1,28,249,22,129,4,23,195,2,248,22,178,8,80, +159,44,8,24,38,9,27,250,80,159,45,8,30,39,11,11,23,197,2,250,22, +93,250,22,157,2,23,199,2,23,206,2,9,250,22,157,2,23,199,1,11,9, +27,248,22,178,3,23,199,1,28,249,22,129,4,23,195,2,248,22,178,8,80, +159,49,8,24,38,9,27,250,80,159,50,8,30,39,11,11,23,197,2,250,22, +93,250,22,157,2,23,199,2,23,211,2,9,250,22,157,2,23,199,1,11,9, +249,80,159,52,8,39,39,23,210,1,248,22,178,3,23,200,1,32,129,2,88, +163,36,43,8,31,11,65,99,108,111,111,112,222,33,138,2,32,130,2,88,163, +8,36,37,47,11,2,50,222,33,133,2,32,131,2,88,163,36,37,43,11,69, +116,111,45,115,116,114,105,110,103,222,33,132,2,28,248,22,150,15,23,194,2, +248,22,154,15,23,194,1,192,28,248,22,87,248,22,81,23,195,2,248,22,89, +248,2,131,2,248,22,132,18,23,196,1,250,22,90,248,2,131,2,248,22,132, +18,23,198,2,2,62,248,2,130,2,248,22,133,18,23,198,1,250,22,128,8, +6,7,7,10,32,126,97,32,126,97,6,1,1,32,23,196,1,249,22,128,8, +6,6,6,10,32,32,32,126,97,248,22,131,2,23,196,1,32,136,2,88,163, +36,38,48,11,66,102,105,108,116,101,114,222,33,137,2,28,248,22,87,23,195, +2,9,28,248,23,194,2,248,22,80,23,196,2,249,22,79,248,22,132,18,23, +197,2,249,2,136,2,23,197,1,248,22,133,18,23,199,1,249,2,136,2,23, +195,1,248,22,133,18,23,197,1,28,248,22,87,23,199,2,86,94,23,198,1, +28,23,199,2,86,97,23,196,1,23,195,1,23,194,1,23,193,1,28,23,197, +2,249,22,168,15,23,201,1,23,199,1,198,27,28,248,22,87,23,197,2,2, +61,249,22,1,22,167,7,248,2,130,2,23,199,2,248,23,198,1,251,22,128, +8,6,70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102,111, +117,110,100,10,32,32,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10, +32,32,105,110,32,99,111,108,108,101,99,116,105,111,110,32,100,105,114,101,99, +116,111,114,105,101,115,58,126,97,126,97,28,248,22,87,23,202,1,248,2,131, +2,23,201,1,250,22,167,7,248,2,131,2,23,204,1,2,62,23,201,2,249, +22,1,22,167,7,249,22,2,32,0,88,163,8,36,37,45,11,9,222,33,134, +2,27,248,22,92,23,205,2,27,248,22,92,247,22,130,16,28,249,22,190,3, +249,22,181,3,23,198,2,23,197,2,41,23,205,2,249,22,93,247,22,130,16, +248,22,89,249,22,128,8,6,50,50,46,46,46,32,91,126,97,32,97,100,100, +105,116,105,111,110,97,108,32,108,105,110,107,101,100,32,97,110,100,32,112,97, +99,107,97,103,101,32,100,105,114,101,99,116,111,114,105,101,115,93,249,22,181, +3,23,201,1,23,200,1,28,249,22,5,22,130,2,23,201,2,250,22,128,8, +6,49,49,10,32,32,32,115,117,98,45,99,111,108,108,101,99,116,105,111,110, +58,32,126,115,10,32,32,105,110,32,112,97,114,101,110,116,32,100,105,114,101, +99,116,111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,167,7,249,22, +2,32,0,88,163,8,36,37,45,11,9,222,33,135,2,249,2,136,2,22,130, +2,23,208,1,86,95,23,199,1,23,198,1,2,61,27,248,22,80,23,200,2, +27,28,248,22,150,15,23,195,2,249,22,168,15,23,196,1,23,198,2,248,22, +131,2,23,195,1,28,28,248,22,150,15,248,22,80,23,202,2,248,22,163,15, +23,194,2,10,27,250,22,1,22,168,15,23,197,1,23,201,2,28,28,248,22, +87,23,199,2,10,248,22,163,15,23,194,2,28,23,200,2,28,28,248,22,162, +15,249,22,168,15,23,196,2,23,203,2,10,27,28,248,22,150,15,23,202,2, +248,22,154,15,23,202,2,23,201,2,19,248,22,147,7,23,195,2,27,28,249, +22,129,4,23,196,4,40,28,249,22,150,7,6,4,4,46,114,107,116,249,22, +166,7,23,199,2,249,22,181,3,23,200,4,40,249,22,167,7,250,22,166,7, +23,200,1,36,249,22,181,3,23,201,4,40,6,3,3,46,115,115,86,94,23, +195,1,11,11,28,23,193,2,248,22,162,15,249,22,168,15,23,199,2,23,196, +1,11,2,86,99,23,202,1,23,201,1,23,199,1,23,198,1,23,197,1,23, +196,1,28,23,200,2,249,22,168,15,23,195,1,23,202,1,192,254,2,129,2, +202,203,204,205,206,248,22,81,23,16,28,23,16,23,16,199,28,23,200,2,249, +22,168,15,23,195,1,23,202,1,192,254,2,129,2,202,203,204,205,206,248,22, +81,23,16,23,16,254,2,129,2,201,202,203,204,205,248,22,81,23,15,23,15, +90,159,38,11,89,161,38,36,11,249,80,159,40,8,31,39,23,199,1,23,200, +1,27,248,22,67,28,248,22,150,15,195,248,22,154,15,195,194,27,247,22,134, +16,27,250,22,93,28,23,197,2,28,247,22,133,16,249,22,93,27,250,80,159, +50,8,30,39,10,11,36,249,22,93,250,22,157,2,23,198,2,23,206,2,9, +250,22,157,2,23,198,1,11,9,27,250,80,159,50,8,30,39,11,10,36,249, +22,93,250,22,157,2,23,198,2,23,206,2,9,250,22,157,2,23,198,1,11, +9,9,9,28,23,197,1,28,249,22,129,4,36,248,22,178,8,80,159,47,8, +24,38,86,94,23,198,1,9,27,250,80,159,48,8,30,39,11,11,36,250,22, +93,250,22,157,2,23,199,2,23,205,2,9,250,22,157,2,23,199,1,11,9, +28,249,22,129,4,37,248,22,178,8,80,159,51,8,24,38,9,27,250,80,159, +52,8,30,39,11,11,37,250,22,93,250,22,157,2,23,199,2,23,209,2,9, +250,22,157,2,23,199,1,11,9,28,249,22,129,4,38,248,22,178,8,80,159, +55,8,24,38,9,27,250,80,159,56,8,30,39,11,11,38,250,22,93,250,22, +157,2,23,199,2,23,213,2,9,250,22,157,2,23,199,1,11,9,249,80,159, +58,8,39,39,23,212,1,39,9,247,22,130,16,254,2,129,2,199,202,203,205, +23,16,199,11,86,95,28,28,248,22,151,15,23,194,2,10,28,248,22,150,15, +23,194,2,10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10, +248,22,174,15,23,194,2,11,12,252,22,168,11,23,200,2,2,42,36,23,198, +2,23,199,2,28,28,248,22,144,7,23,195,2,10,248,22,133,8,23,195,2, +86,94,23,194,1,12,252,22,168,11,23,200,2,2,63,37,23,198,2,23,199, +1,90,159,39,11,89,161,39,36,11,248,22,171,15,23,197,2,86,94,23,195, +1,86,94,28,23,193,2,86,95,23,198,1,23,196,1,12,250,22,171,11,23, +201,1,2,64,23,199,1,249,22,7,23,195,1,23,196,1,32,141,2,88,163, +36,42,8,24,11,2,50,222,33,142,2,28,248,22,130,4,23,199,2,86,95, +23,198,1,23,194,1,19,248,22,138,8,23,195,2,19,248,22,138,8,23,196, +2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,4,2, +51,249,23,205,1,23,203,1,23,201,4,28,248,22,144,7,23,206,2,249,22, +159,8,23,207,1,8,63,23,205,1,28,248,22,151,15,23,201,2,248,22,152, +15,23,201,1,86,94,23,200,1,247,22,153,15,2,2,27,248,22,179,3,23, +200,1,28,249,22,159,9,8,46,249,22,139,8,23,198,2,23,197,2,27,248, +22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,2, +36,23,203,1,23,202,1,249,23,205,1,23,203,1,23,201,1,28,248,22,144, +7,23,206,2,249,22,159,8,23,207,1,8,63,23,205,1,28,248,22,151,15, +23,201,2,248,22,152,15,23,201,1,86,94,23,200,1,247,22,153,15,28,248, +22,130,4,23,194,2,86,95,23,195,1,23,193,1,19,248,22,138,8,23,196, +2,19,248,22,138,8,23,197,2,249,22,160,15,251,22,145,8,250,22,144,8, +23,205,2,36,23,203,4,2,51,249,23,206,1,23,204,1,23,201,4,28,248, +22,144,7,23,207,2,249,22,159,8,23,208,1,8,63,23,206,1,28,248,22, +151,15,23,202,2,248,22,152,15,23,202,1,86,94,23,201,1,247,22,153,15, +2,2,27,248,22,179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8, +23,199,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145, +8,250,22,144,8,23,205,2,36,23,203,1,23,203,1,249,23,206,1,23,204, +1,23,201,1,28,248,22,144,7,23,207,2,249,22,159,8,23,208,1,8,63, +23,206,1,28,248,22,151,15,23,202,2,248,22,152,15,23,202,1,86,94,23, +201,1,247,22,153,15,28,248,22,130,4,23,194,2,86,95,23,196,1,23,193, +1,19,248,22,138,8,23,197,2,19,248,22,138,8,23,198,2,249,22,160,15, +251,22,145,8,250,22,144,8,23,206,2,36,23,203,4,2,51,249,23,207,1, +23,205,1,23,201,4,28,248,22,144,7,23,208,2,249,22,159,8,23,209,1, +8,63,23,207,1,28,248,22,151,15,23,203,2,248,22,152,15,23,203,1,86, +94,23,202,1,247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,249,22, +159,9,8,46,249,22,139,8,23,200,2,23,197,2,27,248,22,178,3,23,195, +2,249,22,160,15,251,22,145,8,250,22,144,8,23,206,2,36,23,203,1,23, +204,1,249,23,207,1,23,205,1,23,201,1,28,248,22,144,7,23,208,2,249, +22,159,8,23,209,1,8,63,23,207,1,28,248,22,151,15,23,203,2,248,22, +152,15,23,203,1,86,94,23,202,1,247,22,153,15,253,2,141,2,201,202,203, +204,205,198,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23, +199,2,10,28,248,22,150,15,23,199,2,10,28,248,22,144,7,23,199,2,28, +248,22,173,15,23,199,2,10,248,22,174,15,23,199,2,11,12,252,22,168,11, +23,200,2,2,42,36,23,203,2,23,204,2,28,28,248,22,144,7,23,200,2, +10,248,22,133,8,23,200,2,12,252,22,168,11,23,200,2,2,63,37,23,203, +2,23,204,2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,202,2,86, +94,23,195,1,86,94,28,192,12,250,22,171,11,23,201,1,2,64,23,204,2, +249,22,7,194,195,27,248,22,156,15,23,196,1,27,19,248,22,138,8,23,196, +2,28,248,22,130,4,23,194,4,86,94,23,199,1,19,248,22,138,8,23,197, +2,19,248,22,138,8,23,198,2,249,22,160,15,251,22,145,8,250,22,144,8, +23,206,2,36,23,203,4,2,51,249,23,210,1,23,205,1,23,201,4,28,248, +22,144,7,23,211,2,249,22,159,8,23,212,1,8,63,23,210,1,28,248,22, +151,15,23,206,2,248,22,152,15,23,206,1,86,94,23,205,1,247,22,153,15, +2,2,27,248,22,179,3,23,195,4,28,249,22,159,9,8,46,249,22,139,8, +23,200,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145, +8,250,22,144,8,23,206,2,36,23,203,1,23,207,1,249,23,210,1,23,205, +1,23,201,1,28,248,22,144,7,23,211,2,249,22,159,8,23,212,1,8,63, +23,210,1,28,248,22,151,15,23,206,2,248,22,152,15,23,206,1,86,94,23, +205,1,247,22,153,15,28,248,22,130,4,23,194,2,86,95,23,200,1,23,193, +1,19,248,22,138,8,23,198,2,19,248,22,138,8,23,199,2,249,22,160,15, +251,22,145,8,250,22,144,8,23,207,2,36,23,203,4,2,51,249,23,211,1, +23,206,1,23,201,4,28,248,22,144,7,23,212,2,249,22,159,8,23,213,1, +8,63,23,211,1,28,248,22,151,15,23,207,2,248,22,152,15,23,207,1,86, +94,23,206,1,247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,249,22, +159,9,8,46,249,22,139,8,23,201,2,23,197,2,27,248,22,178,3,23,195, +2,249,22,160,15,251,22,145,8,250,22,144,8,23,207,2,36,23,203,1,23, +208,1,249,23,211,1,23,206,1,23,201,1,28,248,22,144,7,23,212,2,249, +22,159,8,23,213,1,8,63,23,211,1,28,248,22,151,15,23,207,2,248,22, +152,15,23,207,1,86,94,23,206,1,247,22,153,15,253,2,141,2,23,203,1, +23,207,1,23,208,1,23,209,1,23,210,1,23,199,1,2,28,248,22,150,15, +23,196,2,249,22,168,15,23,197,1,23,195,1,192,32,144,2,88,163,36,40, +57,11,2,50,222,33,145,2,28,248,22,130,4,23,197,2,86,94,23,196,1, +19,248,22,138,8,23,195,2,35,248,22,138,8,23,196,2,249,22,160,15,251, +22,145,8,250,22,144,8,23,204,1,36,23,203,4,2,51,2,51,28,248,22, +144,7,23,204,2,249,22,159,8,23,205,1,8,63,23,203,1,28,248,22,151, +15,23,199,2,248,22,152,15,23,199,1,86,94,23,198,1,247,22,153,15,2, +27,248,22,179,3,23,198,1,28,249,22,159,9,8,46,249,22,139,8,23,198, +2,23,197,2,35,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250, +22,144,8,23,204,1,36,23,203,1,2,51,2,51,28,248,22,144,7,23,204, +2,249,22,159,8,23,205,1,8,63,23,203,1,28,248,22,151,15,23,199,2, +248,22,152,15,23,199,1,86,94,23,198,1,247,22,153,15,28,248,22,130,4, +23,194,2,86,94,23,193,1,19,248,22,138,8,23,196,2,35,248,22,138,8, +23,197,2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,1,36,23,203, +4,2,51,2,51,28,248,22,144,7,23,205,2,249,22,159,8,23,206,1,8, +63,23,204,1,28,248,22,151,15,23,200,2,248,22,152,15,23,200,1,86,94, +23,199,1,247,22,153,15,2,27,248,22,179,3,23,195,1,28,249,22,159,9, +8,46,249,22,139,8,23,199,2,23,197,2,35,248,22,178,3,23,195,2,249, +22,160,15,251,22,145,8,250,22,144,8,23,205,1,36,23,203,1,2,51,2, +51,28,248,22,144,7,23,205,2,249,22,159,8,23,206,1,8,63,23,204,1, +28,248,22,151,15,23,200,2,248,22,152,15,23,200,1,86,94,23,199,1,247, +22,153,15,251,2,144,2,198,199,200,196,90,159,38,11,89,161,38,36,11,86, +95,28,28,248,22,151,15,23,196,2,10,28,248,22,150,15,23,196,2,10,28, +248,22,144,7,23,196,2,28,248,22,173,15,23,196,2,10,248,22,174,15,23, +196,2,11,12,252,22,168,11,2,36,2,42,36,23,200,2,23,201,2,28,28, +248,22,144,7,23,197,2,10,248,22,133,8,23,197,2,12,252,22,168,11,2, +36,2,63,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,248,22, +171,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,171,11,2,36, +2,64,23,201,2,249,22,7,194,195,27,248,22,156,15,23,196,1,27,251,2, +144,2,23,198,2,23,201,1,23,202,1,248,22,138,8,23,199,1,28,248,22, +150,15,23,196,2,249,22,168,15,23,197,1,23,195,1,192,2,51,252,80,158, +41,8,33,2,36,2,51,32,0,88,163,8,36,38,43,11,9,222,33,147,2, +198,199,32,149,2,88,163,36,40,57,11,2,50,222,33,150,2,28,248,22,130, +4,23,197,2,86,94,23,196,1,19,248,22,138,8,23,195,2,19,248,22,138, +8,23,196,2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,2,36,23, +203,4,2,51,249,22,144,8,23,203,1,23,201,4,28,248,22,144,7,23,204, +2,249,22,159,8,23,205,1,8,63,23,203,1,28,248,22,151,15,23,199,2, +248,22,152,15,23,199,1,86,94,23,198,1,247,22,153,15,2,2,27,248,22, +179,3,23,198,1,28,249,22,159,9,8,46,249,22,139,8,23,198,2,23,197, +2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8, +23,204,2,36,23,203,1,2,65,249,22,144,8,23,203,1,23,201,1,28,248, +22,144,7,23,204,2,249,22,159,8,23,205,1,8,63,23,203,1,28,248,22, +151,15,23,199,2,248,22,152,15,23,199,1,86,94,23,198,1,247,22,153,15, +28,248,22,130,4,23,194,2,86,94,23,193,1,19,248,22,138,8,23,196,2, +19,248,22,138,8,23,197,2,249,22,160,15,251,22,145,8,250,22,144,8,23, +205,2,36,23,203,4,2,51,249,22,144,8,23,204,1,23,201,4,28,248,22, +144,7,23,205,2,249,22,159,8,23,206,1,8,63,23,204,1,28,248,22,151, +15,23,200,2,248,22,152,15,23,200,1,86,94,23,199,1,247,22,153,15,2, 2,27,248,22,179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23, -200,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8, -250,22,144,8,23,206,2,36,23,203,1,23,204,1,249,23,207,1,23,205,1, -23,201,1,28,248,22,144,7,23,208,2,249,22,159,8,23,209,1,8,63,23, -207,1,28,248,22,151,15,23,203,2,248,22,152,15,23,203,1,86,94,23,202, -1,247,22,153,15,253,2,125,201,202,203,204,205,198,90,159,38,11,89,161,38, -36,11,86,95,28,28,248,22,151,15,23,199,2,10,28,248,22,150,15,23,199, -2,10,28,248,22,144,7,23,199,2,28,248,22,173,15,23,199,2,10,248,22, -174,15,23,199,2,11,12,252,22,168,11,23,200,2,2,38,36,23,203,2,23, -204,2,28,28,248,22,144,7,23,200,2,10,248,22,133,8,23,200,2,12,252, -22,168,11,23,200,2,2,57,37,23,203,2,23,204,2,90,159,39,11,89,161, -39,36,11,248,22,171,15,23,202,2,86,94,23,195,1,86,94,28,192,12,250, -22,171,11,23,201,1,2,58,23,204,2,249,22,7,194,195,27,248,22,156,15, -23,196,1,27,19,248,22,138,8,23,196,2,28,248,22,130,4,23,194,4,86, -94,23,199,1,19,248,22,138,8,23,197,2,19,248,22,138,8,23,198,2,249, -22,160,15,251,22,145,8,250,22,144,8,23,206,2,36,23,203,4,2,47,249, -23,210,1,23,205,1,23,201,4,28,248,22,144,7,23,211,2,249,22,159,8, -23,212,1,8,63,23,210,1,28,248,22,151,15,23,206,2,248,22,152,15,23, -206,1,86,94,23,205,1,247,22,153,15,2,2,27,248,22,179,3,23,195,4, -28,249,22,159,9,8,46,249,22,139,8,23,200,2,23,197,2,27,248,22,178, -3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,206,2,36,23, -203,1,23,207,1,249,23,210,1,23,205,1,23,201,1,28,248,22,144,7,23, -211,2,249,22,159,8,23,212,1,8,63,23,210,1,28,248,22,151,15,23,206, -2,248,22,152,15,23,206,1,86,94,23,205,1,247,22,153,15,28,248,22,130, -4,23,194,2,86,95,23,200,1,23,193,1,19,248,22,138,8,23,198,2,19, -248,22,138,8,23,199,2,249,22,160,15,251,22,145,8,250,22,144,8,23,207, -2,36,23,203,4,2,47,249,23,211,1,23,206,1,23,201,4,28,248,22,144, -7,23,212,2,249,22,159,8,23,213,1,8,63,23,211,1,28,248,22,151,15, -23,207,2,248,22,152,15,23,207,1,86,94,23,206,1,247,22,153,15,2,2, -27,248,22,179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,201, -2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250, -22,144,8,23,207,2,36,23,203,1,23,208,1,249,23,211,1,23,206,1,23, -201,1,28,248,22,144,7,23,212,2,249,22,159,8,23,213,1,8,63,23,211, -1,28,248,22,151,15,23,207,2,248,22,152,15,23,207,1,86,94,23,206,1, -247,22,153,15,253,2,125,23,203,1,23,207,1,23,208,1,23,209,1,23,210, -1,23,199,1,2,28,248,22,150,15,23,196,2,249,22,168,15,23,197,1,23, -195,1,192,32,128,2,88,163,36,40,57,11,2,46,222,33,129,2,28,248,22, -130,4,23,197,2,86,94,23,196,1,19,248,22,138,8,23,195,2,35,248,22, -138,8,23,196,2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,1,36, -23,203,4,2,47,2,47,28,248,22,144,7,23,204,2,249,22,159,8,23,205, -1,8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1, -86,94,23,198,1,247,22,153,15,2,27,248,22,179,3,23,198,1,28,249,22, -159,9,8,46,249,22,139,8,23,198,2,23,197,2,35,248,22,178,3,23,195, -2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,1,36,23,203,1,2, -47,2,47,28,248,22,144,7,23,204,2,249,22,159,8,23,205,1,8,63,23, -203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,86,94,23,198, -1,247,22,153,15,28,248,22,130,4,23,194,2,86,94,23,193,1,19,248,22, -138,8,23,196,2,35,248,22,138,8,23,197,2,249,22,160,15,251,22,145,8, -250,22,144,8,23,205,1,36,23,203,4,2,47,2,47,28,248,22,144,7,23, -205,2,249,22,159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200, -2,248,22,152,15,23,200,1,86,94,23,199,1,247,22,153,15,2,27,248,22, -179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,199,2,23,197, -2,35,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8, -23,205,1,36,23,203,1,2,47,2,47,28,248,22,144,7,23,205,2,249,22, -159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,152, -15,23,200,1,86,94,23,199,1,247,22,153,15,251,2,128,2,198,199,200,196, -90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,196,2,10, -28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173, -15,23,196,2,10,248,22,174,15,23,196,2,11,12,252,22,168,11,2,32,2, -38,36,23,200,2,23,201,2,28,28,248,22,144,7,23,197,2,10,248,22,133, -8,23,197,2,12,252,22,168,11,2,32,2,57,37,23,200,2,23,201,2,90, -159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,94,23,195,1,86, -94,28,192,12,250,22,171,11,2,32,2,58,23,201,2,249,22,7,194,195,27, -248,22,156,15,23,196,1,27,251,2,128,2,23,198,2,23,201,1,23,202,1, -248,22,138,8,23,199,1,28,248,22,150,15,23,196,2,249,22,168,15,23,197, -1,23,195,1,192,2,47,252,80,158,41,8,29,2,32,2,47,32,0,88,163, -8,36,38,43,11,9,222,33,131,2,198,199,32,133,2,88,163,36,40,57,11, -2,46,222,33,134,2,28,248,22,130,4,23,197,2,86,94,23,196,1,19,248, -22,138,8,23,195,2,19,248,22,138,8,23,196,2,249,22,160,15,251,22,145, -8,250,22,144,8,23,204,2,36,23,203,4,2,47,249,22,144,8,23,203,1, -23,201,4,28,248,22,144,7,23,204,2,249,22,159,8,23,205,1,8,63,23, -203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,86,94,23,198, -1,247,22,153,15,2,2,27,248,22,179,3,23,198,1,28,249,22,159,9,8, -46,249,22,139,8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22, -160,15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,1,2,59,249,22, -144,8,23,203,1,23,201,1,28,248,22,144,7,23,204,2,249,22,159,8,23, -205,1,8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199, -1,86,94,23,198,1,247,22,153,15,28,248,22,130,4,23,194,2,86,94,23, -193,1,19,248,22,138,8,23,196,2,19,248,22,138,8,23,197,2,249,22,160, -15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,4,2,47,249,22,144, -8,23,204,1,23,201,4,28,248,22,144,7,23,205,2,249,22,159,8,23,206, -1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,152,15,23,200,1, -86,94,23,199,1,247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,249, -22,159,9,8,46,249,22,139,8,23,199,2,23,197,2,27,248,22,178,3,23, -195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,1, -2,59,249,22,144,8,23,204,1,23,201,1,28,248,22,144,7,23,205,2,249, -22,159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22, -152,15,23,200,1,86,94,23,199,1,247,22,153,15,251,2,133,2,198,199,200, -196,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,196,2, -10,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22, -173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,252,22,168,11,2,32, -2,38,36,23,200,2,23,201,2,28,28,248,22,144,7,23,197,2,10,248,22, -133,8,23,197,2,12,252,22,168,11,2,32,2,57,37,23,200,2,23,201,2, -90,159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,94,23,195,1, -86,94,28,192,12,250,22,171,11,2,32,2,58,23,201,2,249,22,7,194,195, -27,248,22,156,15,23,196,1,27,251,2,133,2,23,198,2,23,201,1,23,202, -1,248,22,138,8,23,199,1,28,248,22,150,15,23,196,2,249,22,168,15,23, -197,1,23,195,1,192,252,80,158,41,8,29,2,32,2,59,22,144,8,198,199, -249,247,22,171,5,23,195,1,11,249,247,22,171,5,194,11,28,248,22,87,23, -195,2,9,27,248,22,80,23,196,2,27,28,248,22,175,15,23,195,2,23,194, -1,28,248,22,174,15,23,195,2,249,22,176,15,23,196,1,250,80,159,43,40, -39,248,22,191,15,2,52,11,10,250,80,159,41,40,39,248,22,191,15,2,52, -23,197,1,10,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198, -1,247,22,128,16,248,80,159,41,8,35,39,248,22,81,23,200,1,86,94,23, -193,1,248,80,159,39,8,35,39,248,22,81,23,198,1,28,248,22,87,23,195, -2,9,27,248,22,80,23,196,2,27,28,248,22,175,15,23,195,2,23,194,1, -28,248,22,174,15,23,195,2,249,22,176,15,23,196,1,250,80,159,43,40,39, -248,22,191,15,2,52,11,10,250,80,159,41,40,39,248,22,191,15,2,52,23, -197,1,10,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1, -247,22,128,16,248,80,159,41,8,36,39,248,22,81,23,200,1,86,94,23,193, -1,248,80,159,39,8,36,39,248,22,81,23,198,1,28,248,22,87,23,195,2, -9,27,248,22,80,23,196,2,27,28,248,22,175,15,23,195,2,23,194,1,28, -248,22,174,15,23,195,2,249,22,176,15,23,196,1,250,80,159,43,40,39,248, -22,191,15,2,52,11,10,250,80,159,41,40,39,248,22,191,15,2,52,23,197, -1,10,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247, -22,128,16,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22, -80,23,195,2,27,28,248,22,175,15,23,195,2,23,194,1,28,248,22,174,15, -23,195,2,249,22,176,15,23,196,1,250,80,159,48,40,39,248,22,191,15,2, -52,11,10,250,80,159,46,40,39,248,22,191,15,2,52,23,197,1,10,28,23, -193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128,16,248, -80,159,46,8,37,39,248,22,81,23,199,1,86,94,23,193,1,248,80,159,44, -8,37,39,248,22,81,23,197,1,86,94,23,193,1,27,248,22,81,23,198,1, -28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,175,15, -23,195,2,23,194,1,28,248,22,174,15,23,195,2,249,22,176,15,23,196,1, -250,80,159,46,40,39,248,22,191,15,2,52,11,10,250,80,159,44,40,39,248, -22,191,15,2,52,23,197,1,10,28,23,193,2,249,22,79,248,22,178,15,249, -22,176,15,23,198,1,247,22,128,16,248,80,159,44,8,37,39,248,22,81,23, -199,1,86,94,23,193,1,248,80,159,42,8,37,39,248,22,81,23,197,1,27, -247,22,133,16,249,80,159,39,41,38,28,23,195,2,27,249,22,166,8,247,22, -165,8,2,60,28,192,249,22,156,8,194,7,63,2,55,2,55,27,28,23,196, -1,250,22,168,15,248,22,191,15,2,50,247,22,162,8,2,61,11,27,248,80, -159,42,8,35,39,250,22,93,9,248,22,89,248,22,191,15,2,62,9,28,193, -249,22,79,195,194,192,27,247,22,133,16,249,80,159,39,41,38,28,23,195,2, -27,249,22,166,8,247,22,165,8,2,60,28,192,249,22,156,8,194,7,63,2, -55,2,55,27,28,23,196,1,250,22,168,15,248,22,191,15,2,50,247,22,162, -8,2,61,11,27,248,80,159,42,8,36,39,250,22,93,23,203,1,248,22,89, -248,22,191,15,2,62,9,28,193,249,22,79,195,194,192,27,247,22,133,16,249, -80,159,39,41,38,28,23,195,2,27,249,22,166,8,247,22,165,8,2,60,28, -192,249,22,156,8,194,7,63,2,55,2,55,27,28,23,196,1,250,22,168,15, -248,22,191,15,2,50,247,22,162,8,2,61,11,27,248,80,159,42,8,37,39, -250,22,93,23,203,1,248,22,89,248,22,191,15,2,62,23,204,1,28,193,249, -22,79,195,194,192,27,20,13,159,80,159,37,56,37,26,9,80,159,46,57,37, -249,22,33,11,80,159,48,56,37,22,188,14,10,22,131,15,10,22,132,15,10, -22,133,15,10,248,22,139,6,23,196,2,28,248,22,139,7,23,194,2,12,86, -94,248,22,167,9,23,194,1,27,20,13,159,80,159,38,56,37,26,9,80,159, -47,57,37,249,22,33,11,80,159,49,56,37,22,188,14,10,22,131,15,10,22, -132,15,10,22,133,15,10,248,22,139,6,23,197,2,28,248,22,139,7,23,194, -2,12,86,94,248,22,167,9,23,194,1,27,20,13,159,80,159,39,56,37,26, -9,80,159,48,57,37,249,22,33,11,80,159,50,56,37,22,188,14,10,22,131, -15,10,22,132,15,10,22,133,15,10,248,22,139,6,23,198,2,28,248,22,139, -7,23,194,2,12,86,94,248,22,167,9,23,194,1,248,80,159,40,8,38,39, -197,86,94,249,22,130,7,247,22,167,5,23,196,2,248,22,154,6,249,22,133, -4,36,249,22,181,3,23,198,1,23,199,1,27,28,23,197,2,86,95,23,196, -1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,191,15,2,52,27,250, -80,159,42,40,39,23,197,1,11,11,27,248,22,136,4,23,199,1,27,28,23, -194,2,23,194,1,86,94,23,194,1,36,27,248,22,136,4,23,202,1,27,28, -23,194,2,23,194,1,86,94,23,194,1,36,249,22,134,6,23,199,1,20,20, -95,88,163,8,36,36,48,11,9,224,4,2,33,146,2,23,195,1,23,197,1, -27,248,22,183,5,23,195,1,248,80,159,39,8,38,39,193,159,36,20,114,159, -36,16,1,11,16,0,20,26,145,9,2,1,2,1,29,11,11,11,11,9,9, -11,11,11,10,43,80,158,36,36,20,114,159,40,16,35,2,2,2,3,2,4, -2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2, -15,2,16,2,17,2,18,2,19,2,20,30,2,23,76,102,105,110,100,45,108, -105,110,107,115,45,112,97,116,104,33,11,4,30,2,24,1,20,112,97,114,97, -109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6,30,2,24, -1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97, -116,105,111,110,11,3,2,25,2,26,2,27,30,2,23,1,21,101,120,99,101, -112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,11,2,2,28, -2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,16,0,37,39,36, -16,0,36,16,18,2,9,2,10,2,8,2,3,2,30,2,27,2,28,2,25, -2,20,2,26,2,29,2,31,2,18,2,17,2,19,2,15,2,14,2,16,54, -11,11,11,16,13,2,13,2,11,2,36,2,12,2,6,2,35,2,34,2,4, -2,33,2,7,2,32,2,2,2,5,16,13,11,11,11,11,11,11,11,11,11, -11,11,11,11,16,13,2,13,2,11,2,36,2,12,2,6,2,35,2,34,2, -4,2,33,2,7,2,32,2,2,2,5,49,49,37,12,11,11,16,0,16,0, -16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,35,20,15,16, -2,32,0,88,163,36,37,45,11,2,2,222,33,63,80,159,36,36,37,20,15, -16,2,249,22,146,7,7,92,7,92,80,159,36,37,37,20,15,16,2,88,163, -36,37,54,38,2,4,223,0,33,68,80,159,36,38,37,20,15,16,2,88,163, -36,38,58,38,2,5,223,0,33,70,80,159,36,39,37,20,15,16,2,20,25, -96,2,6,88,163,8,36,39,8,25,8,32,9,223,0,33,77,88,163,36,38, -47,52,9,223,0,33,78,88,163,36,37,46,52,9,223,0,33,79,80,159,36, -40,37,20,15,16,2,27,248,22,137,16,248,22,158,8,27,28,249,22,159,9, -247,22,171,8,2,39,6,1,1,59,6,1,1,58,250,22,128,8,6,14,14, -40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1,88, -163,8,36,38,48,11,2,7,223,0,33,83,80,159,36,41,37,20,15,16,2, -32,0,88,163,8,36,38,47,11,2,8,222,33,84,80,159,36,42,37,20,15, -16,2,32,0,88,163,8,36,39,48,11,2,9,222,33,86,80,159,36,43,37, -20,15,16,2,32,0,88,163,8,36,38,46,11,2,10,222,33,87,80,159,36, -44,37,20,15,16,2,88,163,45,39,49,8,128,16,2,11,223,0,33,89,80, -159,36,45,37,20,15,16,2,88,163,45,40,50,8,128,16,2,13,223,0,33, -91,80,159,36,47,37,20,15,16,2,250,22,168,15,248,22,191,15,2,50,247, -22,162,8,2,51,80,159,36,48,37,20,15,16,2,247,22,137,2,80,158,36, -49,20,15,16,2,11,80,158,36,50,20,15,16,2,249,22,168,15,248,22,191, -15,2,50,2,51,80,159,36,51,37,20,15,16,2,247,22,137,2,80,158,36, -52,20,15,16,2,11,80,158,36,53,20,15,16,2,248,80,159,37,55,37,88, -163,36,36,49,8,240,16,0,48,0,9,223,1,33,92,80,159,36,54,37,20, -15,16,2,247,22,137,2,80,158,36,58,20,15,16,2,11,80,158,36,59,20, -15,16,2,88,163,36,37,44,8,240,0,0,0,2,2,27,223,0,33,100,80, -159,36,8,24,37,20,15,16,2,88,163,36,38,45,8,240,0,240,247,3,2, -28,223,0,33,110,80,159,36,8,26,37,20,15,16,2,88,163,36,38,56,16, -2,36,8,128,32,2,29,223,0,33,112,80,159,36,8,27,37,20,15,16,2, -88,163,36,40,8,26,16,2,36,8,132,48,2,12,223,0,33,123,80,159,36, -46,37,20,15,16,2,32,0,88,163,36,39,50,11,2,30,222,33,124,80,159, -36,8,28,37,20,15,16,2,32,0,88,163,36,41,8,27,11,2,31,222,33, -127,80,159,36,8,29,37,20,15,16,2,20,27,158,32,0,88,163,36,38,52, -11,2,32,222,33,130,2,88,163,36,38,49,16,2,36,8,128,128,2,32,223, -0,33,132,2,80,159,36,8,30,37,20,15,16,2,20,27,158,32,0,88,163, -36,38,52,11,2,33,222,33,135,2,88,163,36,38,49,16,2,36,8,128,128, -2,33,223,0,33,136,2,80,159,36,8,31,37,20,15,16,2,20,27,158,32, -0,88,163,36,37,44,11,2,34,222,33,137,2,32,0,88,163,36,37,44,11, -2,34,222,33,138,2,80,159,36,8,32,37,20,15,16,2,88,163,8,36,37, -51,16,4,52,36,44,36,2,46,223,0,33,139,2,80,159,36,8,35,39,20, -15,16,2,88,163,8,36,37,51,16,4,52,36,52,36,2,46,223,0,33,140, -2,80,159,36,8,36,39,20,15,16,2,88,163,8,36,37,56,16,4,52,36, -8,32,36,2,46,223,0,33,141,2,80,159,36,8,37,39,20,15,16,2,20, -25,96,2,35,88,163,36,36,53,16,4,8,32,36,44,36,9,223,0,33,142, -2,88,163,36,37,54,16,4,8,32,36,52,36,9,223,0,33,143,2,88,163, -36,38,55,16,4,8,32,36,8,32,36,9,223,0,33,144,2,80,159,36,8, -33,37,20,15,16,2,88,163,8,36,37,57,16,4,36,8,48,8,64,36,2, -46,223,0,33,145,2,80,159,36,8,38,39,20,15,16,2,88,163,8,36,39, -54,16,4,52,36,8,64,36,2,36,223,0,33,147,2,80,159,36,8,34,37, -95,29,94,2,21,68,35,37,107,101,114,110,101,108,11,29,94,2,21,69,35, -37,109,105,110,45,115,116,120,11,2,23,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 13644); +199,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8, +250,22,144,8,23,205,2,36,23,203,1,2,65,249,22,144,8,23,204,1,23, +201,1,28,248,22,144,7,23,205,2,249,22,159,8,23,206,1,8,63,23,204, +1,28,248,22,151,15,23,200,2,248,22,152,15,23,200,1,86,94,23,199,1, +247,22,153,15,251,2,149,2,198,199,200,196,90,159,38,11,89,161,38,36,11, +86,95,28,28,248,22,151,15,23,196,2,10,28,248,22,150,15,23,196,2,10, +28,248,22,144,7,23,196,2,28,248,22,173,15,23,196,2,10,248,22,174,15, +23,196,2,11,12,252,22,168,11,2,36,2,42,36,23,200,2,23,201,2,28, +28,248,22,144,7,23,197,2,10,248,22,133,8,23,197,2,12,252,22,168,11, +2,36,2,63,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,248, +22,171,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,171,11,2, +36,2,64,23,201,2,249,22,7,194,195,27,248,22,156,15,23,196,1,27,251, +2,149,2,23,198,2,23,201,1,23,202,1,248,22,138,8,23,199,1,28,248, +22,150,15,23,196,2,249,22,168,15,23,197,1,23,195,1,192,252,80,158,41, +8,33,2,36,2,65,22,144,8,198,199,249,247,22,171,5,23,195,1,11,249, +247,22,171,5,194,11,28,248,22,87,23,195,2,9,27,248,22,80,23,196,2, +27,28,248,22,175,15,23,195,2,23,194,1,28,248,22,174,15,23,195,2,249, +22,176,15,23,196,1,250,80,159,43,40,39,248,22,191,15,2,58,11,10,250, +80,159,41,40,39,248,22,191,15,2,58,23,197,1,10,28,23,193,2,249,22, +79,248,22,178,15,249,22,176,15,23,198,1,247,22,128,16,248,80,159,41,8, +40,39,248,22,81,23,200,1,86,94,23,193,1,248,80,159,39,8,40,39,248, +22,81,23,198,1,28,248,22,87,23,195,2,9,27,248,22,80,23,196,2,27, +28,248,22,175,15,23,195,2,23,194,1,28,248,22,174,15,23,195,2,249,22, +176,15,23,196,1,250,80,159,43,40,39,248,22,191,15,2,58,11,10,250,80, +159,41,40,39,248,22,191,15,2,58,23,197,1,10,28,23,193,2,249,22,79, +248,22,178,15,249,22,176,15,23,198,1,247,22,128,16,248,80,159,41,8,41, +39,248,22,81,23,200,1,86,94,23,193,1,248,80,159,39,8,41,39,248,22, +81,23,198,1,28,248,22,87,23,195,2,9,27,248,22,80,23,196,2,27,28, +248,22,175,15,23,195,2,23,194,1,28,248,22,174,15,23,195,2,249,22,176, +15,23,196,1,250,80,159,43,40,39,248,22,191,15,2,58,11,10,250,80,159, +41,40,39,248,22,191,15,2,58,23,197,1,10,28,23,193,2,249,22,79,248, +22,178,15,249,22,176,15,23,198,1,247,22,128,16,248,80,159,41,8,42,39, +248,22,81,23,200,1,86,94,23,193,1,248,80,159,39,8,42,39,248,22,81, +23,198,1,32,158,2,88,163,8,36,38,48,11,2,50,222,33,159,2,28,248, +22,87,23,195,2,9,28,248,22,80,23,195,2,249,22,79,27,248,22,132,18, +23,198,2,28,248,22,144,7,23,194,2,248,22,158,15,23,194,1,28,248,22, +133,8,23,194,2,248,22,159,15,23,194,1,192,249,2,158,2,23,197,1,248, +22,133,18,23,199,1,249,22,93,23,195,2,249,2,158,2,23,197,1,248,22, +133,18,23,199,1,27,247,22,133,16,249,80,159,39,41,38,28,23,195,2,27, +249,22,166,8,247,22,165,8,2,66,28,192,249,22,156,8,194,7,63,2,61, +2,61,27,248,80,159,41,57,39,247,80,159,41,54,39,27,27,28,23,198,1, +250,22,168,15,248,22,191,15,2,54,247,22,162,8,2,67,11,27,248,80,159, +44,8,40,39,250,22,93,9,248,22,89,248,22,191,15,2,68,9,28,193,249, +22,79,195,194,192,27,250,22,157,2,23,198,1,2,69,11,28,23,193,2,249, +2,158,2,23,196,1,23,195,1,193,32,161,2,88,163,8,36,38,48,11,2, +50,222,33,162,2,28,248,22,87,23,195,2,9,28,248,22,80,23,195,2,249, +22,79,27,248,22,132,18,23,198,2,28,248,22,144,7,23,194,2,248,22,158, +15,23,194,1,28,248,22,133,8,23,194,2,248,22,159,15,23,194,1,192,249, +2,161,2,23,197,1,248,22,133,18,23,199,1,249,22,93,23,195,2,249,2, +161,2,23,197,1,248,22,133,18,23,199,1,27,247,22,133,16,249,80,159,39, +41,38,28,23,195,2,27,249,22,166,8,247,22,165,8,2,66,28,192,249,22, +156,8,194,7,63,2,61,2,61,27,248,80,159,41,57,39,247,80,159,41,54, +39,27,27,28,23,198,1,250,22,168,15,248,22,191,15,2,54,247,22,162,8, +2,67,11,27,248,80,159,44,8,41,39,250,22,93,23,205,1,248,22,89,248, +22,191,15,2,68,9,28,193,249,22,79,195,194,192,27,250,22,157,2,23,198, +1,2,69,11,28,23,193,2,249,2,161,2,23,196,1,23,195,1,193,32,164, +2,88,163,8,36,38,51,11,2,50,222,33,165,2,28,248,22,87,23,195,2, +9,28,248,22,80,23,195,2,249,22,79,27,248,22,132,18,23,198,2,28,248, +22,144,7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23,194,2, +248,22,159,15,23,194,1,192,27,248,22,133,18,23,198,1,28,248,22,87,23, +194,2,9,28,248,22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2, +28,248,22,144,7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23, +194,2,248,22,159,15,23,194,1,192,249,2,164,2,23,200,1,248,22,133,18, +23,198,1,249,22,93,23,198,2,249,2,164,2,23,200,1,248,22,133,18,23, +198,1,249,22,93,23,195,2,27,248,22,133,18,23,198,1,28,248,22,87,23, +194,2,9,28,248,22,80,23,194,2,249,22,79,27,248,22,132,18,23,197,2, +28,248,22,144,7,23,194,2,248,22,158,15,23,194,1,28,248,22,133,8,23, +194,2,248,22,159,15,23,194,1,192,249,2,164,2,23,200,1,248,22,133,18, +23,198,1,249,22,93,23,198,2,249,2,164,2,23,200,1,248,22,133,18,23, +198,1,27,247,22,133,16,249,80,159,39,41,38,28,23,195,2,27,249,22,166, +8,247,22,165,8,2,66,28,192,249,22,156,8,194,7,63,2,61,2,61,27, +248,80,159,41,57,39,247,80,159,41,54,39,27,27,28,23,198,1,250,22,168, +15,248,22,191,15,2,54,247,22,162,8,2,67,11,27,248,80,159,44,8,42, +39,250,22,93,23,205,1,248,22,89,248,22,191,15,2,68,23,206,1,28,193, +249,22,79,195,194,192,27,250,22,157,2,23,198,1,2,69,11,28,23,193,2, +249,2,164,2,23,196,1,23,195,1,193,27,20,13,159,80,159,37,55,37,26, +9,80,159,46,56,37,249,22,33,11,80,159,48,55,37,22,188,14,10,22,131, +15,10,22,132,15,10,22,133,15,10,248,22,139,6,23,196,2,28,248,22,139, +7,23,194,2,12,86,94,248,22,167,9,23,194,1,27,20,13,159,80,159,38, +55,37,26,9,80,159,47,56,37,249,22,33,11,80,159,49,55,37,22,188,14, +10,22,131,15,10,22,132,15,10,22,133,15,10,248,22,139,6,23,197,2,28, +248,22,139,7,23,194,2,12,86,94,248,22,167,9,23,194,1,27,20,13,159, +80,159,39,55,37,26,9,80,159,48,56,37,249,22,33,11,80,159,50,55,37, +22,188,14,10,22,131,15,10,22,132,15,10,22,133,15,10,248,22,139,6,23, +198,2,28,248,22,139,7,23,194,2,12,86,94,248,22,167,9,23,194,1,248, +80,159,40,8,43,39,197,86,94,249,22,130,7,247,22,167,5,23,196,2,248, +22,154,6,249,22,133,4,36,249,22,181,3,23,198,1,23,199,1,27,28,23, +197,2,86,95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22, +191,15,2,58,27,250,80,159,42,40,39,23,197,1,11,11,27,248,22,136,4, +23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,136, +4,23,202,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,134, +6,23,199,1,20,20,95,88,163,8,36,36,48,11,9,224,4,2,33,168,2, +23,195,1,23,197,1,27,248,22,183,5,23,195,1,248,80,159,39,8,43,39, +193,159,36,20,114,159,36,16,1,11,16,0,20,26,145,9,2,1,2,1,29, +11,11,11,11,9,9,11,11,11,10,43,80,158,36,36,20,114,159,41,16,39, +2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2, +12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,30,2,23,1, +20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121, +11,6,30,2,23,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116, +101,114,105,122,97,116,105,111,110,11,3,2,24,2,25,2,26,2,27,30,2, +28,76,102,105,110,100,45,108,105,110,107,115,45,112,97,116,104,33,11,4,2, +29,2,30,2,31,30,2,28,1,21,101,120,99,101,112,116,105,111,110,45,104, +97,110,100,108,101,114,45,107,101,121,11,2,2,32,2,33,2,34,2,35,2, +36,2,37,2,38,2,39,2,40,16,0,37,39,36,16,0,36,16,22,2,9, +2,10,2,8,2,26,2,3,2,34,2,25,2,31,2,20,2,24,2,32,2, +29,2,27,2,30,2,33,2,35,2,18,2,17,2,19,2,15,2,14,2,16, +58,11,11,11,16,13,2,13,2,11,2,40,2,12,2,6,2,39,2,38,2, +4,2,37,2,7,2,36,2,2,2,5,16,13,11,11,11,11,11,11,11,11, +11,11,11,11,11,16,13,2,13,2,11,2,40,2,12,2,6,2,39,2,38, +2,4,2,37,2,7,2,36,2,2,2,5,49,49,37,12,11,11,16,0,16, +0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,40,20,15, +16,2,32,0,88,163,36,37,45,11,2,2,222,33,70,80,159,36,36,37,20, +15,16,2,249,22,146,7,7,92,7,92,80,159,36,37,37,20,15,16,2,88, +163,36,37,54,38,2,4,223,0,33,75,80,159,36,38,37,20,15,16,2,88, +163,36,38,58,38,2,5,223,0,33,77,80,159,36,39,37,20,15,16,2,20, +25,96,2,6,88,163,8,36,39,8,25,8,32,9,223,0,33,84,88,163,36, +38,47,52,9,223,0,33,85,88,163,36,37,46,52,9,223,0,33,86,80,159, +36,40,37,20,15,16,2,27,248,22,137,16,248,22,158,8,27,28,249,22,159, +9,247,22,171,8,2,43,6,1,1,59,6,1,1,58,250,22,128,8,6,14, +14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1, +88,163,8,36,38,48,11,2,7,223,0,33,90,80,159,36,41,37,20,15,16, +2,32,0,88,163,8,36,38,47,11,2,8,222,33,91,80,159,36,42,37,20, +15,16,2,32,0,88,163,8,36,39,48,11,2,9,222,33,93,80,159,36,43, +37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,10,222,33,94,80,159, +36,44,37,20,15,16,2,88,163,45,39,49,8,128,16,2,11,223,0,33,96, +80,159,36,45,37,20,15,16,2,88,163,45,40,50,8,128,16,2,13,223,0, +33,98,80,159,36,47,37,20,15,16,2,250,22,168,15,248,22,191,15,2,54, +247,22,162,8,2,55,80,159,36,48,37,20,15,16,2,247,22,137,2,80,158, +36,49,20,15,16,2,11,80,158,36,50,20,15,16,2,249,22,168,15,248,22, +191,15,2,54,2,55,80,159,36,51,37,20,15,16,2,247,22,137,2,80,158, +36,52,20,15,16,2,11,80,158,36,53,20,15,16,2,88,163,36,36,51,8, +240,16,0,24,0,2,20,223,0,33,99,80,159,36,54,37,20,15,16,2,32, +0,88,163,8,36,37,46,11,2,24,222,33,100,80,159,36,57,37,20,15,16, +2,32,0,88,163,36,37,43,11,2,25,222,33,101,80,159,36,58,37,20,15, +16,2,88,163,8,36,39,54,11,2,26,223,0,33,104,80,159,36,59,37,20, +15,16,2,248,80,159,37,8,25,37,88,163,8,36,36,53,8,240,16,0,56, +0,9,223,1,33,107,80,159,36,8,24,37,20,15,16,2,249,22,175,8,248, +22,178,8,80,159,39,8,24,38,247,22,137,2,80,159,36,8,26,37,20,15, +16,2,249,22,175,8,248,22,178,8,80,159,39,8,24,38,11,80,159,36,8, +27,37,20,15,16,2,88,163,36,37,44,16,2,36,8,128,128,2,31,223,0, +33,115,80,159,36,8,28,37,20,15,16,2,88,163,36,39,46,16,2,8,240, +0,240,0,0,8,155,244,2,32,223,0,33,125,80,159,36,8,30,37,20,15, +16,2,88,163,36,38,56,16,2,36,8,240,0,128,0,0,2,33,223,0,33, +127,80,159,36,8,31,37,20,15,16,2,88,163,8,36,38,8,25,16,4,36, +8,240,0,65,0,0,8,128,2,36,2,50,223,0,33,128,2,80,159,36,8, +39,39,20,15,16,2,88,163,36,40,8,33,16,4,36,8,240,0,193,0,0, +8,128,2,36,2,12,223,0,33,139,2,80,159,36,46,37,20,15,16,2,32, +0,88,163,36,39,50,11,2,34,222,33,140,2,80,159,36,8,32,37,20,15, +16,2,32,0,88,163,36,41,8,27,11,2,35,222,33,143,2,80,159,36,8, +33,37,20,15,16,2,20,27,158,32,0,88,163,36,38,52,11,2,36,222,33, +146,2,88,163,36,38,49,16,4,36,36,38,36,2,36,223,0,33,148,2,80, +159,36,8,34,37,20,15,16,2,20,27,158,32,0,88,163,36,38,52,11,2, +37,222,33,151,2,88,163,36,38,49,16,4,36,36,38,36,2,37,223,0,33, +152,2,80,159,36,8,35,37,20,15,16,2,20,27,158,32,0,88,163,36,37, +44,11,2,38,222,33,153,2,32,0,88,163,36,37,44,11,2,38,222,33,154, +2,80,159,36,8,36,37,20,15,16,2,88,163,8,36,37,51,16,4,52,36, +8,128,4,36,2,50,223,0,33,155,2,80,159,36,8,40,39,20,15,16,2, +88,163,8,36,37,51,16,4,52,36,8,128,8,36,2,50,223,0,33,156,2, +80,159,36,8,41,39,20,15,16,2,88,163,8,36,37,51,16,4,52,36,8, +128,16,36,2,50,223,0,33,157,2,80,159,36,8,42,39,20,15,16,2,20, +25,96,2,39,88,163,36,36,55,16,4,8,32,8,36,8,128,4,36,9,223, +0,33,160,2,88,163,36,37,56,16,4,8,32,8,36,8,128,8,36,9,223, +0,33,163,2,88,163,36,38,57,16,4,8,32,8,36,8,128,16,36,9,223, +0,33,166,2,80,159,36,8,37,37,20,15,16,2,88,163,8,36,37,57,16, +4,36,8,24,8,128,32,36,2,50,223,0,33,167,2,80,159,36,8,43,39, +20,15,16,2,88,163,8,36,39,54,16,4,52,36,8,128,32,36,2,40,223, +0,33,169,2,80,159,36,8,38,37,95,29,94,2,21,68,35,37,107,101,114, +110,101,108,11,29,94,2,21,69,35,37,109,105,110,45,115,116,120,11,2,28, +9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 16468); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,1,0,0,15,0, 40,0,57,0,75,0,97,0,120,0,140,0,162,0,171,0,180,0,187,0,196, 0,203,0,0,0,229,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114, @@ -783,7 +918,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 557); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,106,0,0,0,1,0,0,7,0, 18,0,45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175, 0,187,0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,75,1,87,1, @@ -1265,7 +1400,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 10052); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0, 16,0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,99, 1,0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94, @@ -1274,7 +1409,7 @@ 2,2,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2, 2,66,35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98, 115,11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240, -132,91,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159, +186,91,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159, 2,6,36,36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2, 9,36,36,16,0,159,36,20,114,159,36,16,1,11,16,0,20,26,145,9,2, 1,2,1,29,11,11,11,11,9,9,11,11,11,18,96,11,46,46,46,36,80, diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index b14f203b78..31884f8c0f 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -350,17 +350,57 @@ " \"links.rktd\"))" "(define-values(shared-links-cache)(make-hasheq))" "(define-values(shared-links-stamp) #f)" -"(define-values(links-path)(find-links-path!" +"(define-values(find-config-dir)" "(lambda()" -"(let((d(let((c(find-system-path 'config-dir)))" -"(if(absolute-path? c)" +"(let((c(find-system-path 'config-dir)))" +"(if(complete-path? c)" " c" +"(or(and(relative-path? c)" "(parameterize((current-directory(find-system-path 'orig-dir)))" -"(find-executable-path(find-system-path 'exec-file) c))))))" -"(and d" -" (build-path d \"links.rktd\"))))))" -"(define-values(links-cache)(make-hasheq))" -"(define-values(links-stamp) #f)" +"(find-executable-path(find-system-path 'exec-file) c)))" +"(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 c base))))))))" +"(define-values(get-config-table)" +"(lambda(d)" +" (let ((p (build-path d \"config.rktd\")))" +"(or(and(file-exists? p)" +"(call-with-input-file p read))" +" #hash()))))" +"(define-values(coerce-to-path)" +"(lambda(p)" +"(cond" +"((string? p)(string->path p))" +"((bytes? p)(bytes->path p))" +"(else p))))" +"(define-values(add-config-search)" +"(lambda(ht key orig-l)" +"(let((l(hash-ref ht key #f)))" +"(if l" +"(let loop((l l))" +"(cond" +"((null? l) null)" +"((not(car l))(append orig-l(loop(cdr l))))" +"(else(cons(coerce-to-path(car l))(loop(cdr l))))))" +" orig-l))))" +"(define-values(links-paths)(find-links-path!" +"(lambda()" +"(let*((d(find-config-dir))" +"(ht(get-config-table d))" +"(lf(or(hash-ref ht 'links-file #f)" +"(build-path(or" +"(coerce-to-path(hash-ref ht 'lib-dir #f))" +" (build-path d 'up \"lib\"))" +" \"links.rktd\"))))" +"(list->vector" +"(add-config-search" +" ht" +" 'links-search-files" +"(list lf)))))))" +"(define-values(links-caches)(make-vector(vector-length links-paths)(make-hasheq)))" +"(define-values(links-stamps)(make-vector(vector-length links-paths) #f))" "(define-values(file->stamp)" "(lambda(path)" "(call-with-continuation-prompt" @@ -392,7 +432,7 @@ " bstr)))" "(lambda()(close-input-port p)))))))))" "(define-values(get-linked-collections)" -"(lambda(user? shared?)" +"(lambda(user? shared? ii)" "(call/ec(lambda(esc)" "(define-values(make-handler)" "(lambda(ts)" @@ -400,13 +440,13 @@ "(if(exn:fail? exn)" "(let((l(current-logger)))" "(when(log-level? l 'error)" -"(log-message l 'error " +"(log-message l 'error" "(format" " \"error reading collection links file ~s: ~a\"" "(cond" "(user? user-links-path)" "(shared? shared-links-path)" -"(else links-path))" +"(else(vector-ref links-paths ii)))" "(exn-message exn))" "(current-continuation-marks))))" "(void))" @@ -419,8 +459,8 @@ "(set! shared-links-cache(make-hasheq))" "(set! shared-links-stamp ts))" "(else" -"(set! links-cache(make-hasheq))" -"(set! links-stamp ts))))" +"(vector-set! links-caches ii(make-hasheq))" +"(vector-set! links-stamps ii ts))))" "(if(exn:fail? exn)" "(esc(make-hasheq))" " exn))))" @@ -430,12 +470,12 @@ "(let*((a-links-path(cond" "(user? user-links-path)" "(shared? shared-links-path)" -"(else links-path)))" +"(else(vector-ref links-paths ii))))" "(ts(file->stamp a-links-path)))" "(if(not(equal? ts(cond" "(user? user-links-stamp)" "(shared? shared-links-stamp)" -"(else links-stamp))))" +"(else(vector-ref links-stamps ii)))))" "(with-continuation-mark" " exception-handler-key" "(make-handler ts)" @@ -506,13 +546,13 @@ "(set! shared-links-cache ht)" "(set! shared-links-stamp ts))" "(else" -"(set! links-cache ht)" -"(set! links-stamp ts)))" +"(vector-set! links-caches ii ht)" +"(vector-set! links-stamps ii ts)))" " ht))))" "(cond" "(user? user-links-cache)" "(shared? shared-links-cache)" -"(else links-cache)))))))))" +"(else(vector-ref links-caches ii))))))))))" "(define-values(normalize-collection-reference)" "(lambda(collection collection-path)" "(cond" @@ -543,17 +583,21 @@ "(append" "(if(and links?(use-user-specific-search-paths))" "(append" -"(let((ht(get-linked-collections #t #f)))" +"(let((ht(get-linked-collections #t #f 0)))" "(append(hash-ref ht sym null)" "(hash-ref ht #f null)))" -"(let((ht(get-linked-collections #f #t)))" +"(let((ht(get-linked-collections #f #t 0)))" "(append(hash-ref ht sym null)" "(hash-ref ht #f null))))" " null)" -"(if(and links? links-path)" -"(let((ht(get-linked-collections #f #f)))" +"(if links?" +"(let loop((ii 0))" +"(if(ii . >= .(vector-length links-paths))" +" null" +"(let((ht(get-linked-collections #f #f ii)))" "(append(hash-ref ht sym null)" -"(hash-ref ht #f null)))" +"(hash-ref ht #f null)" +"(loop(add1 ii))))))" " null)" "(current-library-collection-paths)))))" "(define-values(done)" @@ -701,6 +745,9 @@ "(bytes->string/locale c #\\?)" " \"\"))" " \"\")" +"(add-config-search" +"(get-config-table(find-config-dir))" +" 'collects-search-dirs" "(cons-if" "(and user-too?" "(build-path(find-system-path 'addon-dir)" @@ -724,7 +771,7 @@ "(if v" "(cons(simplify-path(path->complete-path v(current-directory)))" "(loop(cdr l)))" -"(loop(cdr l))))))))))))" +"(loop(cdr l)))))))))))))" "(define(embedded-load start end str)" "(let*((s(if str" " str" diff --git a/racket/src/racket/src/startup.rktl b/racket/src/racket/src/startup.rktl index 25417a3239..ddabd34936 100644 --- a/racket/src/racket/src/startup.rktl +++ b/racket/src/racket/src/startup.rktl @@ -415,22 +415,67 @@ "links.rktd")) (define-values (shared-links-cache) (make-hasheq)) (define-values (shared-links-stamp) #f) - - (define-values (links-path) (find-links-path! - ;; This thunk is called once per place, and the result - ;; is remembered for later invocations. Otherwise, the - ;; search for the config file can trip over filesystem - ;; restrictions imposed by security guards. - (lambda () - (let ([d (let ([c (find-system-path 'config-dir)]) - (if (absolute-path? c) - c - (parameterize ([current-directory (find-system-path 'orig-dir)]) - (find-executable-path (find-system-path 'exec-file) c))))]) - (and d - (build-path d "links.rktd")))))) - (define-values (links-cache) (make-hasheq)) - (define-values (links-stamp) #f) + + (define-values (find-config-dir) + (lambda () + (let ([c (find-system-path 'config-dir)]) + (if (complete-path? c) + c + (or (and (relative-path? c) + (parameterize ([current-directory (find-system-path 'orig-dir)]) + (find-executable-path (find-system-path 'exec-file) c))) + (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 c base)))))))) + + (define-values (get-config-table) + (lambda (d) + (let ([p (build-path d "config.rktd")]) + (or (and (file-exists? p) + (call-with-input-file p read)) + #hash())))) + + (define-values (coerce-to-path) + (lambda (p) + (cond + [(string? p) (string->path p)] + [(bytes? p) (bytes->path p)] + [else p]))) + + (define-values (add-config-search) + (lambda (ht key orig-l) + (let ([l (hash-ref ht key #f)]) + (if l + (let loop ([l l]) + (cond + [(null? l) null] + [(not (car l)) (append orig-l (loop (cdr l)))] + [else (cons (coerce-to-path (car l)) (loop (cdr l)))])) + orig-l)))) + + (define-values (links-paths) (find-links-path! + ;; This thunk is called once per place, and the result + ;; is remembered for later invocations. Otherwise, the + ;; search for the config file can trip over filesystem + ;; restrictions imposed by security guards. + (lambda () + (let* ([d (find-config-dir)] + [ht (get-config-table d)] + [lf (or (hash-ref ht 'links-file #f) + (build-path (or + (coerce-to-path (hash-ref ht 'lib-dir #f)) + (build-path d 'up "lib")) + "links.rktd"))]) + (list->vector + (add-config-search + ht + 'links-search-files + (list lf))))))) + + (define-values (links-caches) (make-vector (vector-length links-paths) (make-hasheq))) + (define-values (links-stamps) (make-vector (vector-length links-paths) #f)) (define-values (file->stamp) (lambda (path) @@ -469,7 +514,7 @@ (lambda () (close-input-port p))))))))) (define-values (get-linked-collections) - (lambda (user? shared?) + (lambda (user? shared? ii) (call/ec (lambda (esc) (define-values (make-handler) (lambda (ts) @@ -477,13 +522,13 @@ (if (exn:fail? exn) (let ([l (current-logger)]) (when (log-level? l 'error) - (log-message l 'error + (log-message l 'error (format "error reading collection links file ~s: ~a" (cond [user? user-links-path] [shared? shared-links-path] - [else links-path]) + [else (vector-ref links-paths ii)]) (exn-message exn)) (current-continuation-marks)))) (void)) @@ -496,8 +541,8 @@ (set! shared-links-cache (make-hasheq)) (set! shared-links-stamp ts)] [else - (set! links-cache (make-hasheq)) - (set! links-stamp ts)])) + (vector-set! links-caches ii (make-hasheq)) + (vector-set! links-stamps ii ts)])) (if (exn:fail? exn) (esc (make-hasheq)) ;; re-raise the exception (which is probably a break) @@ -508,12 +553,12 @@ (let* ([a-links-path (cond [user? user-links-path] [shared? shared-links-path] - [else links-path])] + [else (vector-ref links-paths ii)])] [ts (file->stamp a-links-path)]) (if (not (equal? ts (cond [user? user-links-stamp] [shared? shared-links-stamp] - [else links-stamp]))) + [else (vector-ref links-stamps ii)]))) (with-continuation-mark exception-handler-key (make-handler ts) @@ -590,13 +635,13 @@ (set! shared-links-cache ht) (set! shared-links-stamp ts)] [else - (set! links-cache ht) - (set! links-stamp ts)]) + (vector-set! links-caches ii ht) + (vector-set! links-stamps ii ts)]) ht)))) (cond [user? user-links-cache] [shared? shared-links-cache] - [else links-cache])))))))) + [else (vector-ref links-caches ii)])))))))) (define-values (normalize-collection-reference) (lambda (collection collection-path) @@ -631,18 +676,22 @@ ;; list of paths and (box path)s: (if (and links? (use-user-specific-search-paths)) (append - (let ([ht (get-linked-collections #t #f)]) + (let ([ht (get-linked-collections #t #f 0)]) (append (hash-ref ht sym null) (hash-ref ht #f null))) - (let ([ht (get-linked-collections #f #t)]) + (let ([ht (get-linked-collections #f #t 0)]) (append (hash-ref ht sym null) (hash-ref ht #f null)))) null) ;; list of paths and (box path)s: - (if (and links? links-path) - (let ([ht (get-linked-collections #f #f)]) - (append (hash-ref ht sym null) - (hash-ref ht #f null))) + (if links? + (let loop ([ii 0]) + (if (ii . >= . (vector-length links-paths)) + null + (let ([ht (get-linked-collections #f #f ii)]) + (append (hash-ref ht sym null) + (hash-ref ht #f null) + (loop (add1 ii)))))) null) ;; list of paths: (current-library-collection-paths)))]) @@ -795,39 +844,42 @@ [(extra-collects-dirs) (find-library-collection-paths extra-collects-dirs null)] [(extra-collects-dirs post-collects-dirs) (let ([user-too? (use-user-specific-search-paths)] - [cons-if (lambda (f r) (if f (cons f r) r))]) - (path-list-string->path-list - (if user-too? + [cons-if (lambda (f r) (if f (cons f r) r))]) + (path-list-string->path-list + (if user-too? (let ([c (environment-variables-ref (current-environment-variables) #"PLTCOLLECTS")]) (if c (bytes->string/locale c #\?) "")) - "") - (cons-if - (and user-too? - (build-path (find-system-path 'addon-dir) - (version) - "collects")) - (let loop ([l (append - extra-collects-dirs - (list (find-system-path 'collects-dir)) - post-collects-dirs)]) - (if (null? l) - null - (let* ([collects-path (car l)] - [v - (cond - [(complete-path? collects-path) collects-path] - [(absolute-path? collects-path) - (path->complete-path collects-path - (find-executable-path (find-system-path 'exec-file) #f #t))] - [else - (find-executable-path (find-system-path 'exec-file) collects-path #t)])]) - (if v - (cons (simplify-path (path->complete-path v (current-directory))) - (loop (cdr l))) - (loop (cdr l)))))))))])) + "") + (add-config-search + (get-config-table (find-config-dir)) + 'collects-search-dirs + (cons-if + (and user-too? + (build-path (find-system-path 'addon-dir) + (version) + "collects")) + (let loop ([l (append + extra-collects-dirs + (list (find-system-path 'collects-dir)) + post-collects-dirs)]) + (if (null? l) + null + (let* ([collects-path (car l)] + [v + (cond + [(complete-path? collects-path) collects-path] + [(absolute-path? collects-path) + (path->complete-path collects-path + (find-executable-path (find-system-path 'exec-file) #f #t))] + [else + (find-executable-path (find-system-path 'exec-file) collects-path #t)])]) + (if v + (cons (simplify-path (path->complete-path v (current-directory))) + (loop (cdr l))) + (loop (cdr l))))))))))])) ;; used for the -k command-line argument: (define (embedded-load start end str)