From c8f4ac6ae47023157a337aa5e164b74439e373d6 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 17 Jul 2012 08:49:53 -0600 Subject: [PATCH] submodules: make .zo path stick for consistent independent loading When a module is loaded from bytecode and then the value of `use-compiled-file-paths' changes, an attempt to load a submodule would fail, because source isn't used if the main module is already declared, and the bytecode code is not used according to `use-compiled-file-paths'. Make the bytecode path stick when it is used once, so that submodule loads succeed, and make it work even with `namespace-module-attach'. The module-attach part of this protocol requires a change to the API of a module name resolver: the notification mode gets two arguments, instead of one, where the second argument is an environment. --- collects/compiler/embed-unit.rkt | 61 +- collects/scribblings/reference/eval.scrbl | 16 +- .../reference/module-reflect.scrbl | 42 +- collects/tests/racket/module.rktl | 2 +- collects/tests/racket/stx.rktl | 4 +- collects/tests/racket/submodule.rktl | 27 + collects/typed-racket/base-env/base-env.rkt | 4 +- doc/release-notes/racket/HISTORY.txt | 4 + src/racket/src/cstartup.inc | 704 +++++++++--------- src/racket/src/module.c | 16 +- src/racket/src/schvers.h | 4 +- src/racket/src/startup.inc | 79 +- src/racket/src/startup.rktl | 263 ++++--- 13 files changed, 686 insertions(+), 540 deletions(-) diff --git a/collects/compiler/embed-unit.rkt b/collects/compiler/embed-unit.rkt index 8693f44193..b8f4a26499 100644 --- a/collects/compiler/embed-unit.rkt +++ b/collects/compiler/embed-unit.rkt @@ -660,35 +660,38 @@ (vector mapping-table library-table)) (letrec-values ([(embedded-resolver) (case-lambda - [(name) - ;; a notification; if the name matches one of our special names, - ;; assume that it's from a namespace that has the declaration - ;; [it would be better if the notifier told us the source] - (let-values ([(name) (if name (resolved-module-path-name name) #f)]) - (let-values ([(a) (assq name mapping-table)]) - (if a - (let-values ([(vec) (hash-ref regs (namespace-module-registry (current-namespace)) - (lambda () - (let-values ([(vec) (vector null null)]) - (hash-set! regs (namespace-module-registry (current-namespace)) vec) - vec)))]) - ;; add mapping: - (vector-set! vec 0 (cons a (vector-ref vec 0))) - ;; add library mappings: - (vector-set! vec 1 (append - (letrec-values ([(loop) - (lambda (l) - (if (null? l) - null - (if (eq? (cdar l) name) - (cons (car l) (loop (cdr l))) - (loop (cdr l)))))]) - (loop library-table)) - (vector-ref vec 1)))) - (void)))) - (orig name)] - [(name rel-to stx) - (embedded-resolver name rel-to stx #t)] + [(name from-namespace) + ;; A notification + (if from-namespace + ;; If the source namespace has a mapping for `name', + ;; then copy it to the current namespace. + (let-values ([(name) (if name (resolved-module-path-name name) #f)]) + (let-values ([(src-vec) (hash-ref regs (namespace-module-registry from-namespace) #f)]) + (let-values ([(a) (if src-vec + (assq name (vector-ref src-vec 0)) + #f)]) + (if a + (let-values ([(vec) (hash-ref regs (namespace-module-registry (current-namespace)) + (lambda () + (let-values ([(vec) (vector null null)]) + (hash-set! regs (namespace-module-registry (current-namespace)) vec) + vec)))]) + ;; add mapping: + (vector-set! vec 0 (cons a (vector-ref vec 0))) + ;; add library mappings: + (vector-set! vec 1 (append + (letrec-values ([(loop) + (lambda (l) + (if (null? l) + null + (if (eq? (cdar l) name) + (cons (car l) (loop (cdr l))) + (loop (cdr l)))))]) + (loop library-table)) + (vector-ref vec 1)))) + (void))))) + (void)) + (orig name from-namespace)] [(name rel-to stx load?) (if (not (module-path? name)) ;; Bad input diff --git a/collects/scribblings/reference/eval.scrbl b/collects/scribblings/reference/eval.scrbl index 40723977c7..0e81836334 100644 --- a/collects/scribblings/reference/eval.scrbl +++ b/collects/scribblings/reference/eval.scrbl @@ -288,7 +288,21 @@ path of the loaded file, otherwise the If the original @racket[_file] is loaded or a @filepath{.zo} variant is loaded, the @tech{load handler} is called to load the file. If any other kind of file is loaded, the @tech{extension-load handler} is -called.} +called. + +When the default @tech{compiled-load handler} loads a module from a +bytecode (i.e., @filepath{.zo}) file, the handler records the bytecode +file path in the current namespace's @tech{module registry}. More +specifically, the handler records the path for the top-level module of +the loaded module, which is an enclosing module if the loaded module +is a submodule. Thereafter, loads via the default @tech{compiled-load +handler} for modules within the same top-level module use the recorded +file, independent of the file that otherwise would be selected by the +@tech{compiled-load handler} (e.g., even if the +@racket[use-compiled-file-paths] parameter value changes). The default +@tech{module name resolver} transfers bytecode-file information when a +module declaration is attached to a new namespace. This protocol supports +independent but consistent loading of submodules from bytecode files.} @defproc[(load/use-compiled [file path-string?]) any]{ diff --git a/collects/scribblings/reference/module-reflect.scrbl b/collects/scribblings/reference/module-reflect.scrbl index 7096ebc19e..0645da7c99 100644 --- a/collects/scribblings/reference/module-reflect.scrbl +++ b/collects/scribblings/reference/module-reflect.scrbl @@ -63,7 +63,7 @@ the grammar for @racket[_module-path] for @racket[require], @defparam[current-module-name-resolver proc (case-> - (resolved-module-path? . -> . any) + (resolved-module-path? (or/c #f namespace?) . -> . any) (module-path? (or/c #f resolved-module-path?) (or/c #f syntax?) @@ -85,12 +85,22 @@ an absolute symbol or @tech{resolved module path}. A @tech{module name resolver} takes one and four arguments: @itemize[ - @item{When given one argument, it is a name for a module declaration - that is already loaded. Such a call to the module name resolver is a - notification that the corresponding module does not need to be - loaded (for the current namespace, or any other namespace that - shares the same module registry). The module name resolver's result - is ignored.} + @item{When given two arguments, the first is a name for a module that + is now declared in the current namespace, and the second is optionally + a namespace from which the declaration was copied. + The module name resolver's result in this case is ignored. + + The current module name resolver is called with two arguments by + @racket[namespace-attach-module] or + @racket[namespace-attach-module-declaration] to notify the resolver + that a module declaration was attached to the current namespace (and + should not be loaded in the future for the namespace's @tech{module registry}). + Evaluation of a module declaration also calls the current module + name resolver with two arguments, where the first is the declared + module and the second is @racket[#f]. No other Racket operation + invokes the module name resolver with two arguments, but other tools + (such as DrRacket) might call this resolver in this mode to avoid + redundant module loads.} @item{When given four arguments, the first is a module path, equivalent to a quoted @racket[_module-path] for @racket[require]. @@ -107,7 +117,7 @@ A @tech{module name resolver} takes one and four arguments: ] For the second case, the standard module name resolver keeps a -per-registry table of loaded module name. If a resolved module path is +table per @tech{module registry} containing loaded module name. If a resolved module path is not in the table, and @racket[#f] is not provided as the fourth argument to the @tech{module name resolver}, then the name is put into the table and the corresponding file is loaded with a variant of @@ -124,20 +134,18 @@ already exists; if such a continuation mark does exist in the current continuation, then the @exnraise[exn:fail] with a message about a dependency cycle. +The default module name resolver cooperates with the default +@tech{compiled-load handler}: on a module-attach notification, +bytecode-file information recorded by the @tech{compiled-load handler} +for the source namespace's @tech{module registry} is transferred to +the target namespace's @tech{module registry}. + Module loading is suppressed (i.e., @racket[#f] is supplied as a fourth argument to the module name resolver) when resolving module paths in @tech{syntax objects} (see @secref["stxobj-model"]). When a @tech{syntax object} is manipulated, the current namespace might not match the original namespace for the syntax object, and the module -should not necessarily be loaded in the current namespace. - -The current module name resolver is called with a single argument by -@racket[namespace-attach-module] to notify the resolver that a module -was attached to the current namespace (and should not be loaded in the -future for the namespace's registry). No other Racket operation -invokes the module name resolver with a single argument, but other -tools (such as DrRacket) might call this resolver in this mode to -avoid redundant module loads.} +should not necessarily be loaded in the current namespace.} @defparam[current-module-declare-name name (or/c resolved-module-path? #f)]{ diff --git a/collects/tests/racket/module.rktl b/collects/tests/racket/module.rktl index cb40296638..d93cc948d7 100644 --- a/collects/tests/racket/module.rktl +++ b/collects/tests/racket/module.rktl @@ -528,7 +528,7 @@ (read-syntax path (open-input-string "#lang tests/racket (provide x) (define x 1)" path))) - ((current-module-name-resolver) (current-module-declare-name)))) + ((current-module-name-resolver) (current-module-declare-name) #f))) (test '#(tests/racket/lang/getinfo get-info closure-data) module->language-info 'tests/racket/langm)))) diff --git a/collects/tests/racket/stx.rktl b/collects/tests/racket/stx.rktl index 387f15b5d1..37213d3dc8 100644 --- a/collects/tests/racket/stx.rktl +++ b/collects/tests/racket/stx.rktl @@ -1234,10 +1234,10 @@ (parameterize ([current-namespace (make-base-namespace)] [current-module-name-resolver (case-lambda - [(name) + [(name ns) (if (equal? name "a") (void) - (old name))] + (old name ns))] [(name _ __) (make-resolved-module-path 'huh?)] [(name base stx load?) (if (equal? name "a") diff --git a/collects/tests/racket/submodule.rktl b/collects/tests/racket/submodule.rktl index dc8decb16a..89f80f54bd 100644 --- a/collects/tests/racket/submodule.rktl +++ b/collects/tests/racket/submodule.rktl @@ -635,6 +635,33 @@ (try-submods '(xa xb)) (try-submods '(test main))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check stickiness of submodule-from-bytecode loading: + +(let () + (define e `(module e racket/base + (module sub1 racket/base (provide x) (define x 'sub1)) + (module sub2 racket/base (provide x) (define x 'sub2)) + (module sub3 racket/base (provide x) (define x 'sub3)))) + (define fn (build-path temp-dir "has-submod2.rkt")) + (define dir (build-path temp-dir "compiled")) + (define fn-zo (build-path dir "has-submod2_rkt.zo")) + (unless (directory-exists? dir) (make-directory dir)) + (with-output-to-file fn + #:exists 'truncate + (lambda () (write e))) + (with-output-to-file fn-zo + #:exists 'truncate + (lambda () (write (compile e)))) + (test 'sub1 dynamic-require `(submod ,fn sub1) 'x) + (parameterize ([use-compiled-file-paths null]) + (test 'sub2 dynamic-require `(submod ,fn sub2) 'x)) + (let ([ns (current-namespace)]) + (parameterize ([current-namespace (make-base-namespace)] + [use-compiled-file-paths null]) + (namespace-attach-module ns `(submod ,fn sub1)) + (test 'sub3 dynamic-require `(submod ,fn sub3) 'x)))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Delete the temp-dir diff --git a/collects/typed-racket/base-env/base-env.rkt b/collects/typed-racket/base-env/base-env.rkt index ee0a301650..3da407c37e 100644 --- a/collects/typed-racket/base-env/base-env.rkt +++ b/collects/typed-racket/base-env/base-env.rkt @@ -1828,13 +1828,13 @@ [resolved-module-path-name (-> -Resolved-Module-Path (Un -Path -Symbol))] [module-path? (asym-pred Univ B (-FS (-filter -Module-Path 0) -top))] -[current-module-name-resolver (-Param (cl->* (-Resolved-Module-Path . -> . Univ) +[current-module-name-resolver (-Param (cl->* (-Resolved-Module-Path Univ . -> . Univ) ((Un -Module-Path -Path) (-opt -Resolved-Module-Path) (-opt (-Syntax Univ)) -Boolean . -> . -Resolved-Module-Path)) - (cl->* (-Resolved-Module-Path . -> . Univ) + (cl->* (-Resolved-Module-Path Univ . -> . Univ) ((Un -Module-Path -Path) (-opt -Resolved-Module-Path) (-opt (-Syntax Univ)) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 72b55c1296..e4dc80c1e8 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,3 +1,7 @@ +Version 5.3.0.15 +Changed module name resolver notification mode to supply + a source namespace for attaches + Version 5.3.0.12 racket/base: added impersonate-continuation-mark-key, chaperone-continuation-mark-key, make-continuation-mark-key, diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 92dab3d0a5..cf21d3dcc2 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,5 +1,5 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,52,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,53,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,26,0,29,0,36,0,43,0,47,0,60,0,65,0,69,0,74,0, 83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149, @@ -16,12 +16,12 @@ 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,228,83,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36, +240,250,83,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36, 16,20,2,10,2,2,2,3,2,2,2,5,2,2,2,6,2,2,2,7,2, 2,2,8,2,2,2,9,2,2,2,4,2,2,2,11,2,2,2,12,2,2, -97,37,11,8,240,228,83,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,228,83,0,0,16,0,96,11, -11,8,240,228,83,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2, +97,37,11,8,240,250,83,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,250,83,0,0,16,0,96,11, +11,8,240,250,83,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,163,4,195,249, 22,156,4,80,158,39,36,251,22,89,2,18,248,22,104,199,12,249,22,79,2, 19,248,22,106,201,27,248,22,163,4,195,249,22,156,4,80,158,39,36,251,22, @@ -30,14 +30,14 @@ 22,81,194,248,22,80,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248, 22,80,199,249,22,79,2,8,248,22,81,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,53,56,49,57,16,4,11,11,2,21,3,1,8,101,110, -118,49,53,56,50,48,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20, +1,8,101,110,118,49,53,56,51,56,16,4,11,11,2,21,3,1,8,101,110, +118,49,53,56,51,57,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20, 14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,80,193,249,22,156,4, 80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,22,89,2,23,248, 22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,5,248,22,81,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,53,56,50,50,16,4,11, -11,2,21,3,1,8,101,110,118,49,53,56,50,51,248,22,163,4,193,27,248, +29,16,4,11,11,2,20,3,1,8,101,110,118,49,53,56,52,49,16,4,11, +11,2,21,3,1,8,101,110,118,49,53,56,52,50,248,22,163,4,193,27,248, 22,163,4,194,249,22,79,248,22,89,248,22,80,196,248,22,81,195,27,248,22, 81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,36,28,248,22,64,248, 22,157,4,248,22,80,23,198,2,27,249,22,2,32,0,88,163,8,36,37,43, @@ -67,8 +67,8 @@ 22,89,2,18,28,249,22,151,9,248,22,157,4,248,22,80,200,64,101,108,115, 101,10,248,22,80,197,250,22,90,2,22,9,248,22,81,200,249,22,79,2,3, 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,53,56,52,53,16, -4,11,11,2,21,3,1,8,101,110,118,49,53,56,52,54,18,158,94,10,64, +30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,53,56,54,52,16, +4,11,11,2,21,3,1,8,101,110,118,49,53,56,54,53,18,158,94,10,64, 118,111,105,100,8,48,27,248,22,81,248,22,163,4,196,249,22,156,4,80,158, 39,36,28,248,22,64,248,22,157,4,248,22,80,197,250,22,89,2,28,248,22, 89,248,22,80,199,248,22,104,198,27,248,22,157,4,248,22,80,197,250,22,89, @@ -99,7 +99,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,52,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,53,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,115,0,0,0,1,0,0,8,0,21, 0,26,0,43,0,65,0,94,0,109,0,127,0,139,0,155,0,169,0,191,0, 207,0,224,0,246,0,1,1,7,1,16,1,23,1,30,1,42,1,58,1,82, @@ -362,7 +362,7 @@ 22,164,2,195,88,163,8,36,38,48,11,9,223,3,33,89,28,197,86,94,20, 18,159,11,80,158,42,48,193,20,18,159,11,80,158,42,49,196,86,94,20,18, 159,11,80,158,42,54,193,20,18,159,11,80,158,42,55,196,193,28,193,80,158, -38,48,80,158,38,54,248,22,9,88,163,8,32,37,8,40,8,240,0,120,47, +38,48,80,158,38,54,248,22,8,88,163,8,32,37,8,40,8,240,0,120,47, 0,9,224,1,2,33,90,0,7,35,114,120,34,47,43,34,28,248,22,141,7, 23,195,2,27,249,22,166,15,2,92,196,28,192,28,249,22,191,3,248,22,103, 195,248,22,181,3,248,22,144,7,198,249,22,7,250,22,163,7,199,36,248,22, @@ -529,7 +529,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 8952); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,52,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,53,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40, 0,57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0, 179,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23, @@ -556,24 +556,25 @@ EVAL_ONE_SIZED_STR((char *)expr, 502); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,52,84,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,83,0,0,0,1,0,0,7,0,18, -0,45,0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,158,0,170,0, -185,0,201,0,219,0,239,0,251,0,11,1,34,1,46,1,77,1,84,1,89, -1,94,1,100,1,104,1,122,1,127,1,132,1,141,1,146,1,161,1,168,1, -173,1,177,1,182,1,189,1,200,1,207,1,215,1,224,1,232,1,33,2,153, -2,235,2,0,3,21,3,51,3,81,3,139,3,197,3,246,3,39,4,130,10, -181,10,244,10,7,11,21,11,179,11,192,11,70,12,112,13,236,13,242,13,14, -14,27,14,189,14,196,14,250,14,16,15,36,15,91,15,101,15,115,15,152,15, -250,15,252,15,99,16,24,24,77,24,101,24,125,24,0,0,53,28,0,0,66, -35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101, -102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108, -101,100,65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,105,108,115,11, -68,35,37,112,97,114,97,109,122,29,94,2,4,2,6,11,1,20,112,97,114, -97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,1,20,100,101, -102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114,100,1,24,45, -109,111,100,117,108,101,45,104,97,115,104,45,116,97,98,108,101,45,116,97,98, -108,101,67,67,65,67,72,69,45,78,71,45,112,97,116,104,45,99,97,99,104, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,53,84,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,85,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,63,1,94,1,101, +1,106,1,111,1,117,1,121,1,139,1,144,1,149,1,158,1,163,1,178,1, +185,1,190,1,194,1,199,1,206,1,217,1,224,1,232,1,241,1,249,1,50, +2,170,2,252,2,17,3,38,3,68,3,98,3,156,3,214,3,7,4,56,4, +157,11,175,11,226,11,33,12,52,12,66,12,224,12,237,12,115,13,157,14,180, +15,186,15,214,15,227,15,133,16,140,16,194,16,216,16,236,16,35,17,45,17, +59,17,96,17,194,17,196,17,46,18,229,25,26,26,50,26,74,26,0,0,35, +30,0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120, +1,25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111, +109,112,105,108,101,100,65,113,117,111,116,101,68,35,37,112,97,114,97,109,122, +29,94,2,4,2,5,11,1,20,112,97,114,97,109,101,116,101,114,105,122,97, +116,105,111,110,45,107,101,121,29,94,2,4,67,35,37,117,116,105,108,115,11, +1,24,45,109,111,100,117,108,101,45,104,97,115,104,45,116,97,98,108,101,45, +116,97,98,108,101,76,114,101,103,105,115,116,101,114,45,122,111,45,112,97,116, +104,1,20,100,101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97, +114,100,67,67,65,67,72,69,45,78,71,45,112,97,116,104,45,99,97,99,104, 101,74,112,97,116,104,45,99,97,99,104,101,45,103,101,116,75,112,97,116,104, 45,99,97,99,104,101,45,115,101,116,33,77,45,108,111,97,100,105,110,103,45, 102,105,108,101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111, @@ -582,338 +583,361 @@ 45,114,101,108,97,116,105,118,101,45,115,116,114,105,110,103,71,111,114,105,103, 45,112,97,114,97,109,122,1,29,115,116,97,110,100,97,114,100,45,109,111,100, 117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,29,94,2,4, -2,6,11,64,98,111,111,116,64,115,101,97,108,5,4,46,114,107,116,63,108, +2,5,11,64,98,111,111,116,64,115,101,97,108,5,4,46,114,107,116,63,108, 105,98,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,64, 115,97,109,101,5,3,46,122,111,6,6,6,110,97,116,105,118,101,64,108,111, 111,112,6,12,12,109,111,100,117,108,101,45,112,97,116,104,63,66,115,117,98, 109,111,100,6,2,2,46,46,6,1,1,46,64,102,105,108,101,66,112,108,97, 110,101,116,6,8,8,109,97,105,110,46,114,107,116,6,4,4,46,114,107,116, -67,105,103,110,111,114,101,100,249,22,14,195,80,159,38,49,38,249,80,159,38, -52,39,195,10,90,159,39,11,89,161,39,36,11,248,22,133,15,197,86,95,23, +67,105,103,110,111,114,101,100,249,22,14,195,80,159,38,50,38,249,80,159,38, +53,39,195,10,90,159,39,11,89,161,39,36,11,248,22,133,15,197,86,95,23, 195,1,23,193,1,28,249,22,164,15,0,11,35,114,120,34,91,46,93,115,115, -36,34,248,22,181,14,23,197,1,249,80,159,41,56,39,198,2,25,196,27,28, -23,195,2,28,249,22,151,9,23,197,2,80,158,39,50,86,94,23,195,1,80, -158,37,51,27,248,22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22, +36,34,248,22,181,14,23,197,1,249,80,159,41,57,39,198,2,26,196,27,28, +23,195,2,28,249,22,151,9,23,197,2,80,158,39,51,86,94,23,195,1,80, +158,37,52,27,248,22,148,5,23,197,2,27,28,248,22,77,23,195,2,248,22, 80,23,195,1,23,194,1,28,248,22,176,14,23,194,2,90,159,39,11,89,161, -39,36,11,248,22,133,15,23,197,1,86,95,20,18,159,11,80,158,42,50,199, -20,18,159,11,80,158,42,51,192,192,11,11,28,23,193,2,192,86,94,23,193, +39,36,11,248,22,133,15,23,197,1,86,95,20,18,159,11,80,158,42,51,199, +20,18,159,11,80,158,42,52,192,192,11,11,28,23,193,2,192,86,94,23,193, 1,27,247,22,172,5,28,192,192,247,22,153,15,28,24,194,2,12,20,13,159, -80,159,36,55,37,80,158,36,53,89,161,37,37,10,249,22,190,4,21,94,2, -26,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114, +80,159,36,56,37,80,158,36,54,89,161,37,37,10,249,22,190,4,21,94,2, +27,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114, 107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109, 101,45,114,101,115,111,108,118,101,114,12,250,22,130,15,23,197,1,23,199,1, -249,80,159,43,39,39,23,198,1,2,29,250,22,130,15,23,197,1,23,199,1, -249,80,159,43,39,39,23,198,1,2,29,252,22,130,15,23,199,1,23,201,1, -2,30,247,22,164,8,249,80,159,45,39,39,23,200,1,80,159,45,36,38,252, -22,130,15,23,199,1,23,201,1,2,30,247,22,164,8,249,80,159,45,39,39, -23,200,1,80,159,45,36,38,27,252,22,130,15,23,200,1,23,202,1,2,30, -247,22,164,8,249,80,159,46,39,39,23,201,1,80,159,46,36,38,27,250,22, +249,80,159,43,42,39,23,198,1,2,30,250,22,130,15,23,197,1,23,199,1, +249,80,159,43,42,39,23,198,1,2,30,252,22,130,15,23,199,1,23,201,1, +2,31,247,22,164,8,249,80,159,45,42,39,23,200,1,80,159,45,36,38,252, +22,130,15,23,199,1,23,201,1,2,31,247,22,164,8,249,80,159,45,42,39, +23,200,1,80,159,45,36,38,27,252,22,130,15,23,200,1,23,202,1,2,31, +247,22,164,8,249,80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22, 147,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79, -195,194,11,27,252,22,130,15,23,200,1,23,202,1,2,30,247,22,164,8,249, -80,159,46,39,39,23,201,1,80,159,46,36,38,27,250,22,147,15,196,11,32, +195,194,11,27,252,22,130,15,23,200,1,23,202,1,2,31,247,22,164,8,249, +80,159,46,42,39,23,201,1,80,159,46,36,38,27,250,22,147,15,196,11,32, 0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,27,250, -22,130,15,23,198,1,23,200,1,249,80,159,44,39,39,23,199,1,2,29,27, +22,130,15,23,198,1,23,200,1,249,80,159,44,42,39,23,199,1,2,30,27, 250,22,147,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249, -22,79,195,194,11,27,250,22,130,15,23,198,1,23,200,1,249,80,159,44,39, -39,23,199,1,2,29,27,250,22,147,15,196,11,32,0,88,163,8,36,36,41, -11,9,222,11,28,192,249,22,79,195,194,11,86,95,28,248,80,159,37,38,39, -23,195,2,12,250,22,188,9,2,27,6,12,12,112,97,116,104,45,115,116,114, +22,79,195,194,11,27,250,22,130,15,23,198,1,23,200,1,249,80,159,44,42, +39,23,199,1,2,30,27,250,22,147,15,196,11,32,0,88,163,8,36,36,41, +11,9,222,11,28,192,249,22,79,195,194,11,86,95,28,248,80,159,37,40,39, +23,195,2,12,250,22,188,9,2,28,6,12,12,112,97,116,104,45,115,116,114, 105,110,103,63,23,197,2,28,28,23,195,2,28,248,22,64,23,196,2,10,28, 248,22,88,23,196,2,28,249,22,129,4,248,22,92,23,198,2,37,28,28,248, 22,64,248,22,80,23,197,2,10,248,22,149,9,248,22,80,23,197,2,249,22, -4,22,64,248,22,81,23,198,2,11,11,11,10,12,250,22,188,9,2,27,6, +4,22,64,248,22,81,23,198,2,11,11,11,10,12,250,22,188,9,2,28,6, 71,71,40,111,114,47,99,32,35,102,32,115,121,109,98,111,108,63,32,40,99, 111,110,115,47,99,32,40,111,114,47,99,32,35,102,32,115,121,109,98,111,108, 63,41,32,40,110,111,110,45,101,109,112,116,121,45,108,105,115,116,111,102,32, -115,121,109,98,111,108,63,41,41,41,23,197,2,90,159,46,11,89,161,37,36, -11,28,248,22,136,15,23,205,2,23,204,2,27,247,22,172,5,28,23,193,2, -249,22,137,15,23,207,2,23,195,1,23,205,2,89,161,39,37,11,248,22,133, -15,23,205,1,86,94,23,196,1,89,161,38,40,11,28,23,205,2,27,248,22, -181,14,23,197,2,27,248,22,135,8,23,195,2,28,28,249,22,131,4,23,195, -2,40,249,22,138,8,2,25,249,22,141,8,23,198,2,249,22,183,3,23,199, -2,40,11,249,22,7,23,199,2,248,22,185,14,249,22,142,8,250,22,141,8, -23,202,1,36,249,22,183,3,23,203,1,40,5,3,46,115,115,249,22,7,23, -199,2,11,249,22,7,23,197,2,11,89,161,37,42,11,28,249,22,151,9,23, -199,2,23,197,2,23,193,2,249,22,130,15,23,196,2,23,199,2,89,161,37, -43,11,28,23,198,2,28,249,22,151,9,23,200,2,23,197,1,23,193,1,86, -94,23,193,1,249,22,130,15,23,196,2,23,200,2,86,94,23,195,1,11,89, -161,37,44,11,28,249,22,151,9,23,196,2,68,114,101,108,97,116,105,118,101, -86,94,23,194,1,2,28,23,194,1,89,161,37,45,11,247,22,155,15,27,250, -22,147,15,23,203,2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28, -23,194,2,249,22,79,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23, -203,2,28,23,194,2,11,27,250,22,147,15,23,207,2,11,32,0,88,163,8, -36,36,41,11,9,222,11,28,192,249,22,79,23,206,2,194,11,11,27,28,23, -195,2,23,195,2,23,194,2,27,88,163,36,37,50,44,62,122,111,225,15,13, -9,33,46,27,88,163,36,37,50,44,66,97,108,116,45,122,111,225,16,14,11, -33,47,27,88,163,36,37,52,45,9,225,17,15,11,33,48,27,88,163,36,37, -52,45,9,225,18,16,13,33,49,27,28,23,200,2,23,200,2,248,22,149,9, +115,121,109,98,111,108,63,41,41,41,23,197,2,27,28,23,196,2,247,22,188, +4,11,27,28,23,194,2,250,22,160,2,80,158,41,41,248,22,189,15,247,22, +151,13,11,11,27,28,23,194,2,250,22,160,2,248,22,81,23,198,2,23,198, +2,11,11,28,23,193,2,86,96,23,197,1,23,195,1,23,194,1,20,13,159, +80,159,39,38,37,250,80,159,42,39,37,249,22,33,11,80,159,44,38,37,22, +189,4,248,22,104,196,27,248,22,113,194,20,13,159,80,159,40,38,37,250,80, +159,43,39,37,249,22,33,11,80,159,45,38,37,22,172,5,28,248,22,176,14, +23,197,2,23,196,1,86,94,23,196,1,247,22,153,15,249,247,22,170,5,248, +22,80,196,200,86,94,23,193,1,90,159,46,11,89,161,37,36,11,28,248,22, +136,15,23,208,2,23,207,2,27,247,22,172,5,28,23,193,2,249,22,137,15, +23,210,2,23,195,1,23,208,2,89,161,39,37,11,248,22,133,15,23,208,1, +86,94,23,196,1,89,161,38,40,11,28,23,208,2,27,248,22,181,14,23,197, +2,27,248,22,135,8,23,195,2,28,28,249,22,131,4,23,195,2,40,249,22, +138,8,2,26,249,22,141,8,23,198,2,249,22,183,3,23,199,2,40,11,249, +22,7,23,199,2,248,22,185,14,249,22,142,8,250,22,141,8,23,202,1,36, +249,22,183,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249, +22,7,23,197,2,11,89,161,37,42,11,28,249,22,151,9,23,199,2,23,197, +2,23,193,2,249,22,130,15,23,196,2,23,199,2,89,161,37,43,11,28,23, +198,2,28,249,22,151,9,23,200,2,23,197,1,23,193,1,86,94,23,193,1, +249,22,130,15,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, +28,249,22,151,9,23,196,2,68,114,101,108,97,116,105,118,101,86,94,23,194, +1,2,29,23,194,1,89,161,37,45,11,247,22,155,15,27,250,22,147,15,23, +203,2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249, +22,79,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23,203,2,28,23, +194,2,11,27,250,22,147,15,23,207,2,11,32,0,88,163,8,36,36,41,11, +9,222,11,28,192,249,22,79,23,206,2,194,11,11,27,28,23,195,2,23,195, +2,23,194,2,27,88,163,36,37,50,8,64,62,122,111,225,18,13,9,33,47, +27,88,163,36,37,50,8,64,66,97,108,116,45,122,111,225,19,14,11,33,48, +27,88,163,36,37,52,8,65,9,225,20,15,11,33,49,27,88,163,36,37,52, +8,65,9,225,21,16,13,33,50,27,28,23,200,2,23,200,2,248,22,149,9, 23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248, 22,149,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,88, -163,8,36,37,53,45,9,225,24,22,18,33,50,23,216,2,27,28,23,202,2, -11,193,28,192,192,28,193,28,23,202,2,28,249,22,131,4,248,22,81,196,248, -22,81,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86, -105,23,213,1,23,211,1,23,210,1,23,209,1,23,208,1,23,201,1,23,200, -1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,13,159,80,159, -57,40,37,250,80,159,8,24,41,37,249,22,33,11,80,159,8,26,40,37,22, -189,4,11,20,13,159,80,159,57,40,37,250,80,159,8,24,41,37,249,22,33, -11,80,159,8,26,40,37,22,172,5,28,248,22,176,14,23,216,2,23,215,1, -86,94,23,215,1,247,22,153,15,249,247,22,159,15,248,22,80,195,23,25,86, -94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,88,163,8,36, -37,53,45,9,225,25,23,20,33,51,23,217,2,27,28,23,204,2,11,193,28, -192,192,28,193,28,203,28,249,22,131,4,248,22,81,196,248,22,81,206,193,11, -11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214,1,23,211,1, -23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1, -20,13,159,80,159,58,40,37,250,80,159,8,25,41,37,249,22,33,11,80,159, -8,27,40,37,22,189,4,23,215,1,20,13,159,80,159,58,40,37,250,80,159, -8,25,41,37,249,22,33,11,80,159,8,27,40,37,22,172,5,28,248,22,176, -14,23,217,2,23,216,1,86,94,23,216,1,247,22,153,15,249,247,22,159,15, -248,22,80,195,23,26,86,94,23,193,1,27,28,23,197,2,28,23,201,1,27, -249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,26,24,20,33,52,23, -213,1,23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2, -28,249,22,131,4,248,22,81,196,248,22,81,23,207,2,193,11,11,11,86,94, -23,210,1,11,86,94,23,201,1,11,28,23,193,2,86,101,23,215,1,23,213, -1,23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23,196,1,20,13, -159,80,159,59,40,37,250,80,159,8,26,41,37,249,22,33,11,80,159,8,28, -40,37,22,189,4,11,20,13,159,80,159,59,40,37,250,80,159,8,26,41,37, -249,22,33,11,80,159,8,28,40,37,22,172,5,28,248,22,176,14,23,218,2, -23,217,1,86,94,23,217,1,247,22,153,15,249,247,22,170,5,248,22,80,195, -23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,20, -20,94,88,163,8,36,37,51,44,9,225,27,25,22,33,53,23,215,1,23,219, -1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,131,4,248, -22,81,196,248,22,81,23,15,193,11,11,11,86,95,23,216,1,23,212,1,11, -86,94,23,201,1,11,28,23,193,2,86,95,23,213,1,23,198,1,20,13,159, -80,159,8,24,40,37,250,80,159,8,27,41,37,249,22,33,11,80,159,8,29, -40,37,22,189,4,23,217,1,20,13,159,80,159,8,24,40,37,250,80,159,8, -27,41,37,249,22,33,11,80,159,8,29,40,37,22,172,5,28,248,22,176,14, -23,219,2,23,218,1,86,94,23,218,1,247,22,153,15,249,247,22,170,5,248, -22,80,195,23,28,86,94,23,193,1,28,28,248,22,77,23,220,2,248,22,80, -23,220,2,10,27,28,23,199,2,86,94,23,215,1,23,214,1,86,94,23,214, -1,23,215,1,28,28,248,22,77,23,221,2,248,22,149,9,248,22,188,14,23, -195,2,11,12,20,13,159,80,159,8,25,40,37,250,80,159,8,28,41,37,249, -22,33,11,80,159,8,30,40,37,22,189,4,28,23,30,28,23,202,1,11,195, -86,94,23,202,1,11,20,13,159,80,159,8,25,40,37,250,80,159,8,28,41, -37,249,22,33,11,80,159,8,30,40,37,22,172,5,28,248,22,176,14,23,220, -2,23,219,1,86,94,23,219,1,247,22,153,15,249,247,22,170,5,194,23,29, -12,27,249,22,171,8,80,159,39,45,38,249,22,190,3,248,22,186,3,248,22, -173,2,200,8,128,8,27,28,193,248,22,176,2,194,11,28,192,27,249,22,102, -198,195,28,192,248,22,81,193,11,11,27,249,22,190,3,248,22,186,3,248,22, -173,2,198,8,128,8,27,249,22,171,8,80,159,40,45,38,195,27,28,193,248, -22,176,2,194,11,250,22,172,8,80,159,42,45,38,197,248,22,175,2,249,22, -79,249,22,79,204,205,28,198,198,9,0,17,35,114,120,34,94,40,46,42,63, -41,47,40,46,42,41,36,34,32,58,88,163,8,36,37,59,11,2,31,222,33, -59,27,249,22,164,15,2,57,23,196,2,28,23,193,2,86,94,23,194,1,249, -22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,164,15,2, -57,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196, -2,27,248,22,113,23,197,1,27,249,22,164,15,2,57,23,196,2,28,23,193, -2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197, -1,27,249,22,164,15,2,57,23,196,2,28,23,193,2,86,94,23,194,1,249, -22,79,248,22,104,23,196,2,248,2,58,248,22,113,23,197,1,248,22,89,194, -248,22,89,194,248,22,89,194,248,22,89,194,32,60,88,163,36,37,55,11,2, -31,222,33,61,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22,80, -195,90,159,38,11,89,161,38,36,11,27,248,22,81,196,28,248,22,87,248,22, +163,8,36,37,53,8,65,9,225,27,22,18,33,51,23,216,2,27,28,23,202, +2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,131,4,248,22,81,196, +248,22,81,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2, +86,107,23,216,1,23,215,1,23,213,1,23,211,1,23,210,1,23,209,1,23, +208,1,23,201,1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1,23, +194,1,20,13,159,80,159,8,24,38,37,250,80,159,8,27,39,37,249,22,33, +11,80,159,8,29,38,37,22,189,4,11,20,13,159,80,159,8,24,38,37,250, +80,159,8,27,39,37,249,22,33,11,80,159,8,29,38,37,22,172,5,28,248, +22,176,14,23,216,2,23,215,1,86,94,23,215,1,247,22,153,15,249,247,22, +159,15,248,22,80,195,23,28,86,94,23,193,1,27,28,23,195,2,28,23,197, +1,27,249,22,5,88,163,8,36,37,53,8,65,9,225,28,23,20,33,52,23, +217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,203,28,249,22,131,4, +248,22,81,196,248,22,81,206,193,11,11,11,11,86,94,23,197,1,11,28,23, +193,2,86,104,23,217,1,23,216,1,23,214,1,23,211,1,23,210,1,23,209, +1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,13,159,80,159, +8,25,38,37,250,80,159,8,28,39,37,249,22,33,11,80,159,8,30,38,37, +22,189,4,23,215,1,20,13,159,80,159,8,25,38,37,250,80,159,8,28,39, +37,249,22,33,11,80,159,8,30,38,37,22,172,5,28,248,22,176,14,23,217, +2,23,216,1,86,94,23,216,1,247,22,153,15,249,247,22,159,15,248,22,80, +195,23,29,86,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5, +20,20,94,88,163,8,36,37,51,8,64,9,225,29,24,20,33,53,23,213,1, +23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249, +22,131,4,248,22,81,196,248,22,81,23,207,2,193,11,11,11,86,94,23,210, +1,11,86,94,23,201,1,11,28,23,193,2,86,101,23,215,1,23,213,1,23, +212,1,23,211,1,23,202,1,23,200,1,23,197,1,23,196,1,86,94,27,248, +22,80,194,28,23,218,2,250,22,158,2,248,22,81,23,222,1,23,222,1,250, +22,89,23,199,1,11,23,221,2,12,20,13,159,80,159,8,26,38,37,250,80, +159,8,29,39,37,249,22,33,11,80,159,8,31,38,37,22,189,4,11,20,13, +159,80,159,8,26,38,37,250,80,159,8,29,39,37,249,22,33,11,80,159,8, +31,38,37,22,172,5,28,248,22,176,14,23,218,2,23,217,1,86,94,23,217, +1,247,22,153,15,249,247,22,170,5,248,22,80,195,23,30,86,94,23,193,1, +27,28,23,197,1,28,23,201,1,27,249,22,5,20,20,94,88,163,8,36,37, +51,8,64,9,225,30,25,22,33,54,23,215,1,23,219,1,27,28,23,205,2, +11,193,28,192,192,28,193,28,204,28,249,22,131,4,248,22,81,196,248,22,81, +23,15,193,11,11,11,86,95,23,216,1,23,212,1,11,86,94,23,201,1,11, +28,23,193,2,86,95,23,213,1,23,198,1,86,94,27,248,22,80,194,28,23, +219,2,250,22,158,2,248,22,81,23,223,1,23,223,1,250,22,89,23,199,1, +23,221,2,23,222,2,12,20,13,159,80,159,8,27,38,37,250,80,159,8,30, +39,37,249,22,33,11,80,159,8,32,38,37,22,189,4,23,217,1,20,13,159, +80,159,8,27,38,37,250,80,159,8,30,39,37,249,22,33,11,80,159,8,32, +38,37,22,172,5,28,248,22,176,14,23,219,2,23,218,1,86,94,23,218,1, +247,22,153,15,249,247,22,170,5,248,22,80,195,23,31,86,94,23,193,1,28, +28,248,22,77,23,223,2,248,22,80,23,223,2,10,27,28,23,199,2,86,94, +23,215,1,23,214,1,86,94,23,214,1,23,215,1,28,28,248,22,77,23,224, +32,0,0,0,2,248,22,149,9,248,22,188,14,23,195,2,11,12,20,13,159, +80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159,8,33, +38,37,22,189,4,28,23,33,28,23,202,1,11,195,86,94,23,202,1,11,20, +13,159,80,159,8,28,38,37,250,80,159,8,31,39,37,249,22,33,11,80,159, +8,33,38,37,22,172,5,28,248,22,176,14,23,220,2,23,219,1,86,94,23, +219,1,247,22,153,15,249,247,22,170,5,194,23,32,12,28,193,250,22,158,2, +248,22,81,197,195,250,22,89,200,201,202,12,27,249,22,171,8,80,159,39,46, +38,249,22,190,3,248,22,186,3,248,22,173,2,200,8,128,8,27,28,193,248, +22,176,2,194,11,28,192,27,249,22,102,198,195,28,192,248,22,81,193,11,11, +27,249,22,190,3,248,22,186,3,248,22,173,2,198,8,128,8,27,249,22,171, +8,80,159,40,46,38,195,27,28,193,248,22,176,2,194,11,250,22,172,8,80, +159,42,46,38,197,248,22,175,2,249,22,79,249,22,79,204,205,28,198,198,9, +0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,60, +88,163,8,36,37,59,11,2,32,222,33,61,27,249,22,164,15,2,59,23,196, +2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248, +22,113,23,197,1,27,249,22,164,15,2,59,23,196,2,28,23,193,2,86,94, +23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249, +22,164,15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248, +22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,164,15,2,59,23,196, +2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,248,2, +60,248,22,113,23,197,1,248,22,89,194,248,22,89,194,248,22,89,194,248,22, +89,194,32,62,88,163,36,37,55,11,2,32,222,33,63,28,248,22,87,248,22, 81,23,195,2,249,22,7,9,248,22,80,195,90,159,38,11,89,161,38,36,11, 27,248,22,81,196,28,248,22,87,248,22,81,23,195,2,249,22,7,9,248,22, -80,195,90,159,38,11,89,161,38,36,11,248,2,60,248,22,81,196,249,22,7, -249,22,79,248,22,80,199,196,195,249,22,7,249,22,79,248,22,80,199,196,195, -249,22,7,249,22,79,248,22,80,199,196,195,27,27,249,22,164,15,2,57,23, -197,2,28,23,193,2,86,94,23,195,1,249,22,79,248,22,104,23,196,2,27, -248,22,113,23,197,1,27,249,22,164,15,2,57,23,196,2,28,23,193,2,86, -94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27, -249,22,164,15,2,57,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79, -248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,164,15,2,57,23, -196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,248, -2,58,248,22,113,23,197,1,248,22,89,194,248,22,89,194,248,22,89,194,248, -22,89,195,28,23,195,1,192,28,248,22,87,248,22,81,23,195,2,249,22,7, -9,248,22,80,195,27,248,22,81,194,90,159,38,11,89,161,38,36,11,28,248, -22,87,248,22,81,23,197,2,249,22,7,9,248,22,80,197,27,248,22,81,196, +80,195,90,159,38,11,89,161,38,36,11,27,248,22,81,196,28,248,22,87,248, +22,81,23,195,2,249,22,7,9,248,22,80,195,90,159,38,11,89,161,38,36, +11,248,2,62,248,22,81,196,249,22,7,249,22,79,248,22,80,199,196,195,249, +22,7,249,22,79,248,22,80,199,196,195,249,22,7,249,22,79,248,22,80,199, +196,195,27,27,249,22,164,15,2,59,23,197,2,28,23,193,2,86,94,23,195, +1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,164, +15,2,59,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104, +23,196,2,27,248,22,113,23,197,1,27,249,22,164,15,2,59,23,196,2,28, +23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113, +23,197,1,27,249,22,164,15,2,59,23,196,2,28,23,193,2,86,94,23,194, +1,249,22,79,248,22,104,23,196,2,248,2,60,248,22,113,23,197,1,248,22, +89,194,248,22,89,194,248,22,89,194,248,22,89,195,28,23,195,1,192,28,248, +22,87,248,22,81,23,195,2,249,22,7,9,248,22,80,195,27,248,22,81,194, 90,159,38,11,89,161,38,36,11,28,248,22,87,248,22,81,23,197,2,249,22, -7,9,248,22,80,197,90,159,38,11,89,161,38,36,11,248,2,60,248,22,81, -198,249,22,7,249,22,79,248,22,80,201,196,195,249,22,7,249,22,79,248,22, -80,202,196,195,249,22,7,249,22,79,248,22,80,200,196,195,86,95,28,248,22, -146,5,195,12,250,22,188,9,2,21,6,21,21,114,101,115,111,108,118,101,100, -45,109,111,100,117,108,101,45,112,97,116,104,63,197,28,24,193,2,248,24,194, -1,195,86,94,23,193,1,12,27,250,22,160,2,80,159,41,43,38,248,22,189, -15,247,22,151,13,11,27,28,23,194,2,193,86,94,23,194,1,27,247,22,140, -2,86,94,250,22,158,2,80,159,43,43,38,248,22,189,15,247,22,151,13,195, -192,250,22,158,2,195,199,66,97,116,116,97,99,104,251,211,197,198,199,10,32, -65,88,163,36,38,47,11,76,102,108,97,116,116,101,110,45,115,117,98,45,112, -97,116,104,222,33,68,32,66,88,163,36,40,54,11,2,31,222,33,67,28,248, -22,87,23,197,2,28,248,22,87,195,192,249,22,79,194,248,22,94,197,28,249, -22,153,9,248,22,80,23,199,2,2,34,28,248,22,87,23,196,2,86,95,23, -196,1,23,195,1,250,22,184,9,2,21,6,37,37,116,111,111,32,109,97,110, -121,32,34,46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108,101,32, -112,97,116,104,58,32,126,46,115,250,22,90,2,33,28,249,22,153,9,23,201, -2,2,35,198,28,248,22,176,14,199,198,249,22,89,28,248,22,64,201,2,4, -2,36,200,199,251,2,66,196,197,248,22,81,199,248,22,81,200,251,2,66,196, -197,249,22,79,248,22,80,202,200,248,22,81,200,251,2,66,196,197,9,197,27, -249,22,164,7,6,31,31,115,116,97,110,100,97,114,100,45,109,111,100,117,108, -101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,58,32,196,28,193,250, -22,186,9,11,195,196,248,22,184,9,193,28,249,22,147,7,194,2,35,2,28, -28,249,22,147,7,194,2,34,62,117,112,192,32,71,88,163,8,36,37,50,11, -67,115,115,45,62,114,107,116,222,33,72,27,248,22,144,7,194,28,249,22,131, -4,194,39,28,249,22,147,7,6,3,3,46,115,115,249,22,163,7,197,249,22, -183,3,198,39,249,22,164,7,250,22,163,7,198,36,249,22,183,3,199,39,2, -39,193,193,0,8,35,114,120,34,91,46,93,34,32,74,88,163,8,36,37,47, -11,2,31,222,33,75,28,248,22,87,23,194,2,9,250,22,90,6,4,4,10, -32,32,32,248,22,180,14,248,22,105,23,198,2,248,2,74,248,22,81,23,198, -1,28,249,22,153,9,248,22,81,23,200,2,23,197,1,28,249,22,151,9,248, -22,80,23,200,1,23,196,1,251,22,184,9,2,21,6,41,41,99,121,99,108, -101,32,105,110,32,108,111,97,100,105,110,103,10,32,32,97,116,32,112,97,116, -104,58,32,126,97,10,32,32,112,97,116,104,115,58,126,97,23,200,1,249,22, -1,22,164,7,248,2,74,248,22,94,23,201,1,12,12,247,192,20,13,159,80, -159,43,48,38,249,22,79,249,22,79,248,22,189,15,247,22,151,13,23,201,1, -23,195,1,20,13,159,80,159,43,40,37,250,80,159,46,41,37,249,22,33,11, -80,159,48,40,37,22,188,4,23,198,2,249,247,22,171,5,23,200,1,27,248, -22,67,248,22,180,14,23,201,1,28,23,202,2,28,250,22,160,2,23,200,1, -23,201,1,11,249,22,79,11,203,249,22,79,194,203,192,86,94,28,248,22,156, -5,23,196,2,12,28,23,197,2,250,22,186,9,11,6,15,15,98,97,100,32, -109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,188,9,2,21,2, -32,23,198,2,28,28,248,22,77,23,196,2,249,22,151,9,248,22,80,23,198, -2,2,4,11,248,22,147,5,248,22,104,196,28,28,248,22,77,23,196,2,28, -249,22,151,9,248,22,80,23,198,2,2,33,28,248,22,77,248,22,104,23,197, -2,249,22,151,9,248,22,108,23,198,2,2,4,11,11,11,86,97,23,198,1, -23,197,1,23,196,1,23,193,1,248,22,147,5,249,2,65,248,22,121,23,199, -2,248,22,106,23,199,1,28,28,248,22,77,23,196,2,28,249,22,151,9,248, -22,80,23,198,2,2,33,28,28,249,22,153,9,248,22,104,23,198,2,2,35, -10,249,22,153,9,248,22,104,23,198,2,2,34,28,23,196,2,27,248,22,148, -5,23,198,2,28,248,22,64,193,10,28,248,22,77,193,248,22,64,248,22,80, -194,11,11,11,11,11,86,96,23,198,1,23,197,1,23,193,1,27,248,22,148, -5,23,198,1,248,22,147,5,249,2,65,28,248,22,77,23,197,2,248,22,80, -23,197,2,23,196,2,27,28,249,22,153,9,248,22,104,23,203,2,2,34,248, -22,81,200,248,22,106,200,28,248,22,77,23,198,2,249,22,93,248,22,81,199, -194,192,28,28,248,22,77,23,196,2,249,22,151,9,248,22,80,23,198,2,2, -37,11,86,94,248,80,159,38,8,26,39,193,253,213,200,201,202,203,11,80,158, -43,53,28,28,248,22,77,23,196,2,28,249,22,151,9,248,22,80,23,198,2, -2,33,28,248,22,77,248,22,104,23,197,2,249,22,151,9,248,22,108,23,198, -2,2,37,11,11,11,86,94,248,80,159,38,8,26,39,193,253,213,248,22,104, -201,201,202,203,248,22,106,201,80,158,43,53,86,94,23,193,1,27,88,163,8, -36,37,47,11,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45, -101,114,114,223,5,33,69,27,28,248,22,77,23,198,2,28,249,22,151,9,2, -33,248,22,80,23,200,2,27,248,22,104,23,199,2,28,28,249,22,153,9,23, -195,2,2,35,10,249,22,153,9,23,195,2,2,34,86,94,23,193,1,28,23, -199,2,27,248,22,148,5,23,201,2,28,248,22,77,193,248,22,80,193,192,250, -22,184,9,2,21,6,45,45,110,111,32,98,97,115,101,32,112,97,116,104,32, -102,111,114,32,114,101,108,97,116,105,118,101,32,115,117,98,109,111,100,117,108, -101,32,112,97,116,104,58,32,126,46,115,23,201,2,192,23,197,2,23,197,2, -27,28,248,22,77,23,199,2,28,249,22,151,9,2,33,248,22,80,23,201,2, -27,28,28,28,249,22,153,9,248,22,104,23,202,2,2,35,10,249,22,153,9, -248,22,104,23,202,2,2,34,23,200,2,11,27,248,22,148,5,23,202,2,27, -28,249,22,153,9,248,22,104,23,204,2,2,34,248,22,81,23,202,1,248,22, -106,23,202,1,28,248,22,77,23,195,2,249,2,65,248,22,80,23,197,2,249, -22,93,248,22,81,23,199,1,23,197,1,249,2,65,23,196,1,23,195,1,249, -2,65,2,35,28,249,22,153,9,248,22,104,23,204,2,2,34,248,22,81,23, -202,1,248,22,106,23,202,1,28,248,22,77,193,248,22,81,193,11,11,11,27, -28,248,22,64,23,196,2,27,248,80,159,43,46,39,249,22,79,23,199,2,247, -22,154,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36, -11,249,80,159,46,52,39,248,22,70,23,201,2,11,27,28,248,22,87,23,195, -2,2,38,249,22,164,7,23,197,2,2,39,251,80,159,49,57,39,23,204,1, -28,248,22,87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199,2, -28,248,22,87,23,199,2,86,94,23,198,1,9,248,22,81,23,199,1,23,197, -1,28,248,22,141,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8,27, -39,23,202,2,27,248,80,159,44,46,39,249,22,79,23,200,2,23,197,2,28, -23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159, -47,52,39,23,201,2,11,250,22,1,22,130,15,23,199,1,249,22,93,249,22, -2,32,0,88,163,8,36,37,44,11,9,222,33,70,23,200,1,248,22,89,248, -2,71,23,201,1,28,248,22,176,14,23,196,2,86,94,23,196,1,248,80,159, -42,8,28,39,248,22,139,15,28,248,22,136,15,23,198,2,23,197,2,249,22, -137,15,23,199,2,248,80,159,46,8,27,39,23,205,2,28,249,22,151,9,248, -22,80,23,198,2,2,26,27,248,80,159,43,46,39,249,22,79,23,199,2,247, -22,154,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38,36, -11,249,80,159,47,52,39,248,22,104,23,202,2,11,89,161,37,38,11,28,248, -22,87,248,22,106,23,201,2,28,248,22,87,23,194,2,249,22,168,15,2,73, -23,196,2,11,10,27,28,23,196,2,248,2,71,23,196,2,28,248,22,87,23, -195,2,2,38,28,249,22,168,15,2,73,23,197,2,248,2,71,23,196,2,249, -22,164,7,23,197,2,2,39,27,28,23,197,1,86,94,23,196,1,249,22,93, -28,248,22,87,248,22,106,23,205,2,21,93,6,5,5,109,122,108,105,98,249, -22,1,22,93,249,22,2,80,159,53,8,29,39,248,22,106,23,208,2,23,197, -1,28,248,22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86,94, -23,196,1,23,195,1,251,80,159,51,57,39,23,206,1,248,22,80,23,198,2, -248,22,81,23,198,1,23,198,1,28,249,22,151,9,248,22,80,23,198,2,2, -36,248,80,159,42,8,28,39,248,22,139,15,249,22,137,15,248,22,141,15,248, -22,104,23,201,2,248,80,159,46,8,27,39,23,205,2,12,86,94,28,28,248, -22,176,14,23,194,2,10,248,22,166,8,23,194,2,86,94,23,201,1,12,28, -23,201,2,250,22,186,9,67,114,101,113,117,105,114,101,249,22,189,7,6,17, -17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198, -2,248,22,80,23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22,188, -9,2,21,2,32,23,198,2,27,28,248,22,166,8,23,195,2,249,22,171,8, -23,196,2,36,249,22,139,15,248,22,140,15,23,197,2,11,27,28,248,22,166, -8,23,196,2,249,22,171,8,23,197,2,37,248,80,159,44,58,39,23,195,2, -90,159,39,11,89,161,39,36,11,28,248,22,166,8,23,199,2,250,22,7,2, -40,249,22,171,8,23,203,2,38,2,40,248,22,133,15,23,198,2,86,95,23, -195,1,23,193,1,27,28,248,22,166,8,23,200,2,249,22,171,8,23,201,2, -39,249,80,159,49,56,39,23,197,2,5,0,27,28,248,22,166,8,23,201,2, -249,22,171,8,23,202,2,40,248,22,147,5,23,200,2,27,250,22,160,2,80, -159,52,43,38,248,22,189,15,247,22,151,13,11,27,28,23,194,2,23,194,1, -86,94,23,194,1,27,247,22,140,2,86,94,250,22,158,2,80,159,54,43,38, -248,22,189,15,247,22,151,13,195,192,27,28,23,204,2,248,22,147,5,249,22, -79,248,22,148,5,23,200,2,23,207,2,23,196,2,86,95,28,23,212,1,27, -250,22,160,2,23,198,2,196,11,28,23,193,1,12,86,94,27,27,28,248,22, -17,80,159,55,49,38,80,159,54,49,38,247,22,19,251,22,33,11,80,159,58, -48,38,9,23,197,1,27,248,22,189,15,247,22,151,13,86,94,249,22,3,20, -20,94,88,163,8,36,37,54,11,9,226,14,13,2,3,33,76,23,195,1,23, -196,2,248,28,248,22,17,80,159,56,49,38,32,0,88,163,36,37,42,11,9, -222,33,77,80,159,55,8,30,39,20,20,95,88,163,36,36,55,8,176,64,9, -230,19,15,13,12,8,7,5,2,33,78,23,195,1,23,208,1,250,22,158,2, -23,198,1,196,10,12,28,28,248,22,166,8,23,204,1,11,28,248,22,141,7, -23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23,206,2,249,22, -151,9,248,22,80,23,208,2,2,26,11,249,80,159,53,47,39,28,248,22,141, -7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,27,39,23,215,1,86, -94,23,212,1,249,22,79,23,209,1,247,22,154,15,252,22,168,8,23,209,1, -23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18,159,11,80, -158,36,53,248,80,159,37,8,25,37,249,22,33,11,80,159,39,55,37,248,22, -187,4,80,159,37,54,38,248,22,171,5,80,159,37,37,39,248,22,145,14,80, -159,37,42,39,20,18,159,11,80,158,36,53,248,80,159,37,8,25,37,249,22, -33,11,80,159,39,55,37,20,18,159,11,80,158,36,53,248,80,159,37,8,25, -37,249,22,33,11,80,159,39,55,37,159,36,20,113,159,36,16,1,11,16,0, -20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10,38,80,158, -36,36,20,113,159,41,16,26,2,2,2,3,30,2,5,72,112,97,116,104,45, -115,116,114,105,110,103,63,11,30,2,5,75,112,97,116,104,45,97,100,100,45, -115,117,102,102,105,120,8,30,2,7,2,8,6,30,2,7,1,23,101,120,116, -101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3, -2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2, -19,2,20,2,21,30,2,22,2,8,6,30,2,5,79,112,97,116,104,45,114, -101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2,5,73,102,105,110, -100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110,111,114,109,97,108, -45,99,97,115,101,45,112,97,116,104,7,2,23,2,24,30,2,22,74,114,101, -112,97,114,97,109,101,116,101,114,105,122,101,7,16,0,37,39,36,16,0,36, -16,14,2,15,2,16,2,10,2,12,2,17,2,18,2,11,2,3,2,9,2, -2,2,13,2,14,2,19,2,21,50,11,11,11,16,3,2,23,2,20,2,24, -16,3,11,11,11,16,3,2,23,2,20,2,24,39,39,37,12,11,11,16,0, -16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,22,20, -15,16,2,88,163,36,37,45,8,128,128,9,223,0,33,41,80,159,36,8,30, -39,20,15,16,2,88,163,8,36,37,45,8,240,0,0,1,0,9,223,0,33, -42,80,159,36,8,29,39,20,15,16,2,88,163,36,37,49,8,240,0,0,16, -0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0,33,43,80,159,36, -8,28,39,20,15,16,2,88,163,36,37,50,8,240,0,192,0,0,67,103,101, -116,45,100,105,114,223,0,33,44,80,159,36,8,27,39,20,15,16,2,88,164, -8,34,37,45,8,240,0,0,10,0,1,21,112,114,101,112,45,112,108,97,110, -101,116,45,114,101,115,111,108,118,101,114,33,37,224,1,0,33,45,80,159,36, -8,26,39,20,15,16,2,248,22,163,8,69,115,111,45,115,117,102,102,105,120, -80,159,36,36,37,20,15,16,2,88,163,36,38,8,38,8,61,2,3,223,0, -33,54,80,159,36,37,37,20,15,16,2,20,27,158,32,0,88,163,8,36,37, -42,11,2,9,222,192,32,0,88,163,8,36,37,42,11,2,9,222,192,80,159, -36,42,37,20,15,16,2,247,22,143,2,80,159,36,43,37,20,15,16,2,8, -128,8,80,159,36,44,37,20,15,16,2,249,22,167,8,8,128,8,11,80,159, -36,45,37,20,15,16,2,88,163,8,36,37,50,8,128,8,2,13,223,0,33, -55,80,159,36,46,37,20,15,16,2,88,163,8,36,38,55,8,128,8,2,14, -223,0,33,56,80,159,36,47,37,20,15,16,2,247,22,75,80,159,36,48,37, -20,15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110, -103,80,159,36,49,37,20,15,16,2,11,80,158,36,50,20,15,16,2,11,80, -158,36,51,20,15,16,2,32,0,88,163,36,38,8,25,11,2,19,222,33,62, -80,159,36,52,37,20,15,16,2,11,80,158,36,53,20,15,16,2,27,11,20, -19,158,36,90,159,37,10,89,161,37,36,10,20,25,96,2,21,88,163,8,36, -37,51,8,128,2,9,224,2,1,33,63,88,163,36,39,49,11,9,223,0,33, -64,88,163,36,40,8,32,16,2,8,176,242,8,240,115,124,0,0,9,224,2, -1,33,79,207,80,159,36,54,37,20,15,16,2,88,163,36,36,45,8,240,66, -0,14,2,2,23,223,0,33,80,80,159,36,59,37,20,15,16,2,20,27,158, -88,163,8,36,36,45,8,240,0,0,10,2,2,24,223,0,33,81,88,163,8, -36,36,45,8,240,0,0,10,2,2,24,223,0,33,82,80,159,36,8,24,37, -96,29,94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35, -37,109,105,110,45,115,116,120,11,2,5,2,22,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 7430); +7,9,248,22,80,197,27,248,22,81,196,90,159,38,11,89,161,38,36,11,28, +248,22,87,248,22,81,23,197,2,249,22,7,9,248,22,80,197,90,159,38,11, +89,161,38,36,11,248,2,62,248,22,81,198,249,22,7,249,22,79,248,22,80, +201,196,195,249,22,7,249,22,79,248,22,80,202,196,195,249,22,7,249,22,79, +248,22,80,200,196,195,86,96,28,248,22,146,5,23,196,2,12,250,22,188,9, +2,22,6,21,21,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, +112,97,116,104,63,23,198,2,28,28,23,196,2,248,22,152,13,23,197,2,10, +12,250,22,188,9,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97, +109,101,115,112,97,99,101,63,41,23,199,2,28,24,193,2,248,24,194,1,23, +196,2,86,94,23,193,1,12,27,250,22,160,2,80,159,41,41,38,248,22,189, +15,247,22,151,13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249, +22,79,247,22,140,2,247,22,140,2,86,94,250,22,158,2,80,159,43,41,38, +248,22,189,15,247,22,151,13,195,192,86,94,250,22,158,2,248,22,80,23,197, +2,23,200,2,68,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22, +77,248,22,148,5,23,200,2,248,22,147,5,248,22,80,248,22,148,5,23,201, +1,23,198,1,27,250,22,160,2,80,159,44,41,38,248,22,189,15,23,204,1, +11,28,23,193,2,27,250,22,160,2,248,22,81,23,198,1,197,11,28,192,250, +22,158,2,248,22,81,199,197,195,12,12,12,251,211,197,198,199,10,32,67,88, +163,36,38,47,11,76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116, +104,222,33,70,32,68,88,163,36,40,54,11,2,32,222,33,69,28,248,22,87, +23,197,2,28,248,22,87,195,192,249,22,79,194,248,22,94,197,28,249,22,153, +9,248,22,80,23,199,2,2,35,28,248,22,87,23,196,2,86,95,23,196,1, +23,195,1,250,22,184,9,2,22,6,37,37,116,111,111,32,109,97,110,121,32, +34,46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108,101,32,112,97, +116,104,58,32,126,46,115,250,22,90,2,34,28,249,22,153,9,23,201,2,2, +36,198,28,248,22,176,14,199,198,249,22,89,28,248,22,64,201,2,4,2,37, +200,199,251,2,68,196,197,248,22,81,199,248,22,81,200,251,2,68,196,197,249, +22,79,248,22,80,202,200,248,22,81,200,251,2,68,196,197,9,197,27,249,22, +164,7,6,31,31,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45, +110,97,109,101,45,114,101,115,111,108,118,101,114,58,32,196,28,193,250,22,186, +9,11,195,196,248,22,184,9,193,28,249,22,147,7,194,2,36,2,29,28,249, +22,147,7,194,2,35,62,117,112,192,32,73,88,163,8,36,37,50,11,67,115, +115,45,62,114,107,116,222,33,74,27,248,22,144,7,194,28,249,22,131,4,194, +39,28,249,22,147,7,6,3,3,46,115,115,249,22,163,7,197,249,22,183,3, +198,39,249,22,164,7,250,22,163,7,198,36,249,22,183,3,199,39,2,40,193, +193,0,8,35,114,120,34,91,46,93,34,32,76,88,163,8,36,37,47,11,2, +32,222,33,77,28,248,22,87,23,194,2,9,250,22,90,6,4,4,10,32,32, +32,248,22,180,14,248,22,105,23,198,2,248,2,76,248,22,81,23,198,1,28, +249,22,153,9,248,22,81,23,200,2,23,197,1,28,249,22,151,9,248,22,80, +23,200,1,23,196,1,251,22,184,9,2,22,6,41,41,99,121,99,108,101,32, +105,110,32,108,111,97,100,105,110,103,10,32,32,97,116,32,112,97,116,104,58, +32,126,97,10,32,32,112,97,116,104,115,58,126,97,23,200,1,249,22,1,22, +164,7,248,2,76,248,22,94,23,201,1,12,12,247,192,20,13,159,80,159,43, +49,38,249,22,79,249,22,79,248,22,189,15,247,22,151,13,23,201,1,23,195, +1,20,13,159,80,159,43,38,37,250,80,159,46,39,37,249,22,33,11,80,159, +48,38,37,22,188,4,23,198,2,249,247,22,171,5,23,200,1,27,248,22,67, +248,22,180,14,23,201,1,28,23,202,2,28,250,22,160,2,248,22,80,23,201, +1,23,201,1,11,249,22,79,11,203,249,22,79,194,203,192,86,94,28,248,22, +156,5,23,196,2,12,28,23,197,2,250,22,186,9,11,6,15,15,98,97,100, +32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,188,9,2,22, +2,33,23,198,2,28,28,248,22,77,23,196,2,249,22,151,9,248,22,80,23, +198,2,2,4,11,248,22,147,5,248,22,104,196,28,28,248,22,77,23,196,2, +28,249,22,151,9,248,22,80,23,198,2,2,34,28,248,22,77,248,22,104,23, +197,2,249,22,151,9,248,22,108,23,198,2,2,4,11,11,11,86,97,23,198, +1,23,197,1,23,196,1,23,193,1,248,22,147,5,249,2,67,248,22,121,23, +199,2,248,22,106,23,199,1,28,28,248,22,77,23,196,2,28,249,22,151,9, +248,22,80,23,198,2,2,34,28,28,249,22,153,9,248,22,104,23,198,2,2, +36,10,249,22,153,9,248,22,104,23,198,2,2,35,28,23,196,2,27,248,22, +148,5,23,198,2,28,248,22,64,193,10,28,248,22,77,193,248,22,64,248,22, +80,194,11,11,11,11,11,86,96,23,198,1,23,197,1,23,193,1,27,248,22, +148,5,23,198,1,248,22,147,5,249,2,67,28,248,22,77,23,197,2,248,22, +80,23,197,2,23,196,2,27,28,249,22,153,9,248,22,104,23,203,2,2,35, +248,22,81,200,248,22,106,200,28,248,22,77,23,198,2,249,22,93,248,22,81, +199,194,192,28,28,248,22,77,23,196,2,249,22,151,9,248,22,80,23,198,2, +2,38,11,86,94,248,80,159,38,8,27,39,193,253,213,200,201,202,203,11,80, +158,43,54,28,28,248,22,77,23,196,2,28,249,22,151,9,248,22,80,23,198, +2,2,34,28,248,22,77,248,22,104,23,197,2,249,22,151,9,248,22,108,23, +198,2,2,38,11,11,11,86,94,248,80,159,38,8,27,39,193,253,213,248,22, +104,201,201,202,203,248,22,106,201,80,158,43,54,86,94,23,193,1,27,88,163, +8,36,37,47,11,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110, +45,101,114,114,223,5,33,71,27,28,248,22,77,23,198,2,28,249,22,151,9, +2,34,248,22,80,23,200,2,27,248,22,104,23,199,2,28,28,249,22,153,9, +23,195,2,2,36,10,249,22,153,9,23,195,2,2,35,86,94,23,193,1,28, +23,199,2,27,248,22,148,5,23,201,2,28,248,22,77,193,248,22,80,193,192, +250,22,184,9,2,22,6,45,45,110,111,32,98,97,115,101,32,112,97,116,104, +32,102,111,114,32,114,101,108,97,116,105,118,101,32,115,117,98,109,111,100,117, +108,101,32,112,97,116,104,58,32,126,46,115,23,201,2,192,23,197,2,23,197, +2,27,28,248,22,77,23,199,2,28,249,22,151,9,2,34,248,22,80,23,201, +2,27,28,28,28,249,22,153,9,248,22,104,23,202,2,2,36,10,249,22,153, +9,248,22,104,23,202,2,2,35,23,200,2,11,27,248,22,148,5,23,202,2, +27,28,249,22,153,9,248,22,104,23,204,2,2,35,248,22,81,23,202,1,248, +22,106,23,202,1,28,248,22,77,23,195,2,249,2,67,248,22,80,23,197,2, +249,22,93,248,22,81,23,199,1,23,197,1,249,2,67,23,196,1,23,195,1, +249,2,67,2,36,28,249,22,153,9,248,22,104,23,204,2,2,35,248,22,81, +23,202,1,248,22,106,23,202,1,28,248,22,77,193,248,22,81,193,11,11,11, +27,28,248,22,64,23,196,2,27,248,80,159,43,47,39,249,22,79,23,199,2, +247,22,154,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, +36,11,249,80,159,46,53,39,248,22,70,23,201,2,11,27,28,248,22,87,23, +195,2,2,39,249,22,164,7,23,197,2,2,40,251,80,159,49,58,39,23,204, +1,28,248,22,87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199, +2,28,248,22,87,23,199,2,86,94,23,198,1,9,248,22,81,23,199,1,23, +197,1,28,248,22,141,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8, +28,39,23,202,2,27,248,80,159,44,47,39,249,22,79,23,200,2,23,197,2, +28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80, +159,47,53,39,23,201,2,11,250,22,1,22,130,15,23,199,1,249,22,93,249, +22,2,32,0,88,163,8,36,37,44,11,9,222,33,72,23,200,1,248,22,89, +248,2,73,23,201,1,28,248,22,176,14,23,196,2,86,94,23,196,1,248,80, +159,42,8,29,39,248,22,139,15,28,248,22,136,15,23,198,2,23,197,2,249, +22,137,15,23,199,2,248,80,159,46,8,28,39,23,205,2,28,249,22,151,9, +248,22,80,23,198,2,2,27,27,248,80,159,43,47,39,249,22,79,23,199,2, +247,22,154,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38, +36,11,249,80,159,47,53,39,248,22,104,23,202,2,11,89,161,37,38,11,28, +248,22,87,248,22,106,23,201,2,28,248,22,87,23,194,2,249,22,168,15,2, +75,23,196,2,11,10,27,28,23,196,2,248,2,73,23,196,2,28,248,22,87, +23,195,2,2,39,28,249,22,168,15,2,75,23,197,2,248,2,73,23,196,2, +249,22,164,7,23,197,2,2,40,27,28,23,197,1,86,94,23,196,1,249,22, +93,28,248,22,87,248,22,106,23,205,2,21,93,6,5,5,109,122,108,105,98, +249,22,1,22,93,249,22,2,80,159,53,8,30,39,248,22,106,23,208,2,23, +197,1,28,248,22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86, +94,23,196,1,23,195,1,251,80,159,51,58,39,23,206,1,248,22,80,23,198, +2,248,22,81,23,198,1,23,198,1,28,249,22,151,9,248,22,80,23,198,2, +2,37,248,80,159,42,8,29,39,248,22,139,15,249,22,137,15,248,22,141,15, +248,22,104,23,201,2,248,80,159,46,8,28,39,23,205,2,12,86,94,28,28, +248,22,176,14,23,194,2,10,248,22,166,8,23,194,2,86,94,23,201,1,12, +28,23,201,2,250,22,186,9,67,114,101,113,117,105,114,101,249,22,189,7,6, +17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, +198,2,248,22,80,23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22, +188,9,2,22,2,33,23,198,2,27,28,248,22,166,8,23,195,2,249,22,171, +8,23,196,2,36,249,22,139,15,248,22,140,15,23,197,2,11,27,28,248,22, +166,8,23,196,2,249,22,171,8,23,197,2,37,248,80,159,44,59,39,23,195, +2,90,159,39,11,89,161,39,36,11,28,248,22,166,8,23,199,2,250,22,7, +2,41,249,22,171,8,23,203,2,38,2,41,248,22,133,15,23,198,2,86,95, +23,195,1,23,193,1,27,28,248,22,166,8,23,200,2,249,22,171,8,23,201, +2,39,249,80,159,49,57,39,23,197,2,5,0,27,28,248,22,166,8,23,201, +2,249,22,171,8,23,202,2,40,248,22,147,5,23,200,2,27,250,22,160,2, +80,159,52,41,38,248,22,189,15,247,22,151,13,11,27,28,23,194,2,23,194, +1,86,94,23,194,1,27,249,22,79,247,22,140,2,247,22,140,2,86,94,250, +22,158,2,80,159,54,41,38,248,22,189,15,247,22,151,13,195,192,27,28,23, +204,2,248,22,147,5,249,22,79,248,22,148,5,23,200,2,23,207,2,23,196, +2,86,95,28,23,212,1,27,250,22,160,2,248,22,80,23,199,2,196,11,28, +23,193,1,12,27,27,28,248,22,17,80,159,55,50,38,80,159,54,50,38,247, +22,19,251,22,33,11,80,159,58,49,38,9,23,197,1,27,248,22,189,15,247, +22,151,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226,14, +13,2,3,33,78,23,195,1,23,196,2,248,28,248,22,17,80,159,56,50,38, +32,0,88,163,36,37,42,11,9,222,33,79,80,159,55,8,31,39,20,20,96, +88,163,36,36,56,8,140,128,9,230,19,15,13,12,8,7,5,2,33,80,23, +195,1,23,198,1,23,208,1,12,28,28,248,22,166,8,23,204,1,11,28,248, +22,141,7,23,206,2,10,28,248,22,64,23,206,2,10,28,248,22,77,23,206, +2,249,22,151,9,248,22,80,23,208,2,2,27,11,249,80,159,53,48,39,28, +248,22,141,7,23,208,2,249,22,79,23,209,1,248,80,159,56,8,28,39,23, +215,1,86,94,23,212,1,249,22,79,23,209,1,247,22,154,15,252,22,168,8, +23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18, +159,11,80,158,36,54,248,80,159,37,8,26,37,249,22,33,11,80,159,39,56, +37,248,22,187,4,80,159,37,55,38,248,22,171,5,80,159,37,37,39,248,22, +145,14,80,159,37,44,39,20,18,159,11,80,158,36,54,248,80,159,37,8,26, +37,249,22,33,11,80,159,39,56,37,20,18,159,11,80,158,36,54,248,80,159, +37,8,26,37,249,22,33,11,80,159,39,56,37,159,36,20,113,159,36,16,1, +11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9,11,11,11,10, +38,80,158,36,36,20,113,159,41,16,27,2,2,2,3,30,2,6,2,7,6, +30,2,6,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114, +105,122,97,116,105,111,110,3,30,2,8,72,112,97,116,104,45,115,116,114,105, +110,103,63,11,2,9,30,2,8,75,112,97,116,104,45,97,100,100,45,115,117, +102,102,105,120,8,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17, +2,18,2,19,2,20,2,21,2,22,30,2,23,2,7,6,30,2,8,79,112, +97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2, +8,73,102,105,110,100,45,99,111,108,45,102,105,108,101,3,30,2,8,76,110, +111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,7,2,24,2,25,30, +2,23,74,114,101,112,97,114,97,109,101,116,101,114,105,122,101,7,16,0,37, +39,36,16,0,36,16,15,2,16,2,17,2,9,2,13,2,18,2,19,2,12, +2,3,2,11,2,2,2,14,2,15,2,10,2,20,2,22,51,11,11,11,16, +3,2,24,2,21,2,25,16,3,11,11,11,16,3,2,24,2,21,2,25,39, +39,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0, +16,0,36,36,16,23,20,15,16,2,88,163,36,37,45,8,240,0,64,0,0, +9,223,0,33,42,80,159,36,8,31,39,20,15,16,2,88,163,8,36,37,45, +8,240,0,0,2,0,9,223,0,33,43,80,159,36,8,30,39,20,15,16,2, +88,163,36,37,49,8,240,0,0,32,0,72,112,97,116,104,45,115,115,45,62, +114,107,116,223,0,33,44,80,159,36,8,29,39,20,15,16,2,88,163,36,37, +50,8,240,0,128,1,0,67,103,101,116,45,100,105,114,223,0,33,45,80,159, +36,8,28,39,20,15,16,2,88,164,8,34,37,45,8,240,0,0,20,0,1, +21,112,114,101,112,45,112,108,97,110,101,116,45,114,101,115,111,108,118,101,114, +33,37,224,1,0,33,46,80,159,36,8,27,39,20,15,16,2,248,22,163,8, +69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,20,15,16,2,88,163, +36,38,8,42,8,125,2,3,223,0,33,55,80,159,36,37,37,20,15,16,2, +32,0,88,163,8,36,41,52,11,2,10,222,33,56,80,159,36,43,37,20,15, +16,2,20,27,158,32,0,88,163,8,36,37,42,11,2,11,222,192,32,0,88, +163,8,36,37,42,11,2,11,222,192,80,159,36,44,37,20,15,16,2,247,22, +143,2,80,159,36,41,37,20,15,16,2,8,128,8,80,159,36,45,37,20,15, +16,2,249,22,167,8,8,128,8,11,80,159,36,46,37,20,15,16,2,88,163, +8,36,37,50,8,128,16,2,14,223,0,33,57,80,159,36,47,37,20,15,16, +2,88,163,8,36,38,55,8,128,16,2,15,223,0,33,58,80,159,36,48,37, +20,15,16,2,247,22,75,80,159,36,49,37,20,15,16,2,248,22,18,74,109, +111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,36,50,37,20,15,16, +2,11,80,158,36,51,20,15,16,2,11,80,158,36,52,20,15,16,2,32,0, +88,163,36,38,8,25,11,2,20,222,33,64,80,159,36,53,37,20,15,16,2, +11,80,158,36,54,20,15,16,2,27,11,20,19,158,36,90,159,37,10,89,161, +37,36,10,20,25,96,2,22,88,163,8,36,38,54,8,32,9,224,2,1,33, +65,88,163,36,39,49,11,9,223,0,33,66,88,163,36,40,8,32,16,2,8, +240,44,120,0,0,8,240,230,248,0,0,9,224,2,1,33,81,207,80,159,36, +55,37,20,15,16,2,88,163,36,36,45,8,240,2,1,28,4,2,24,223,0, +33,82,80,159,36,8,24,37,20,15,16,2,20,27,158,88,163,8,36,36,45, +8,240,0,0,20,4,2,25,223,0,33,83,88,163,8,36,36,45,8,240,0, +0,20,4,2,25,223,0,33,84,80,159,36,8,25,37,96,29,94,2,4,68, +35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115, +116,120,11,2,8,2,23,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 7928); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,52,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,53,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,98,1, 0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2, @@ -921,8 +945,8 @@ 111,114,107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,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,224, -85,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2, +11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,12, +86,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,113,159,36,16,1,11,16,0,20,26,144,9,2,1, 2,1,29,11,11,11,9,9,11,11,11,18,96,11,46,46,46,36,80,158,36, diff --git a/src/racket/src/module.c b/src/racket/src/module.c index e1f4af003b..a0139bdefa 100644 --- a/src/racket/src/module.c +++ b/src/racket/src/module.c @@ -463,7 +463,7 @@ void scheme_init_module_resolver(void) o = scheme_make_prim_w_arity(default_module_resolver, "default-module-name-resolver", - 1, 4); + 2, 4); scheme_set_param(config, MZCONFIG_CURRENT_MODULE_RESOLVER, o); @@ -906,7 +906,7 @@ static Scheme_Object *default_module_resolver(int argc, Scheme_Object **argv) { Scheme_Object *p = argv[0]; - if (argc == 1) + if (argc == 2) return scheme_void; /* ignore notify */ /* if (quote SYMBOL) */ @@ -926,12 +926,12 @@ static Scheme_Object *default_module_resolver(int argc, Scheme_Object **argv) static Scheme_Object *check_resolver(int argc, Scheme_Object **argv) { - if (scheme_check_proc_arity(NULL, 1, 0, argc, argv) + if (scheme_check_proc_arity(NULL, 2, 0, argc, argv) && scheme_check_proc_arity(NULL, 4, 0, argc, argv)) return argv[0]; scheme_wrong_contract("current-module-name-resolver", - "(case-> (any/c . -> . any) (any/c any/c any/c any/c . -> . any))", + "(case-> (any/c any/c . -> . any) (any/c any/c any/c any/c . -> . any))", 0, argc, argv); return NULL; @@ -1429,7 +1429,7 @@ static Scheme_Object *do_namespace_attach_module(const char *who, int argc, Sche { Scheme_Env *from_env, *to_env, *menv, *menv2; Scheme_Object *todo, *next_phase_todo, *prev_phase_todo; - Scheme_Object *name, *notifies = scheme_null, *a[1], *resolver; + Scheme_Object *name, *notifies = scheme_null, *a[2], *resolver; Scheme_Object *to_modchain, *from_modchain, *l, *main_modidx; Scheme_Hash_Table *checked, *next_checked, *prev_checked; Scheme_Object *past_checkeds, *future_checkeds, *future_todos, *past_to_modchains, *past_todos; @@ -2025,8 +2025,9 @@ static Scheme_Object *do_namespace_attach_module(const char *who, int argc, Sche resolver = scheme_get_param(config, MZCONFIG_CURRENT_MODULE_RESOLVER); while (!SCHEME_NULLP(notifies)) { a[0] = SCHEME_CAR(notifies); + a[1] = (Scheme_Object *)from_env; - scheme_apply(resolver, 1, a); + scheme_apply(resolver, 2, a); notifies = SCHEME_CDR(notifies); } @@ -6131,7 +6132,8 @@ static Scheme_Object *do_module_execute(Scheme_Object *data, Scheme_Env *genv, Scheme_Object *resolver, *a[1]; resolver = scheme_get_param(config, MZCONFIG_CURRENT_MODULE_RESOLVER); a[0] = m->modname; - scheme_apply(resolver, 1, a); + a[1] = scheme_false; + scheme_apply(resolver, 2, a); } /* Replacing an already-running or already-syntaxing module? */ diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index d354a5188b..1594ccfc73 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.3.0.14" +#define MZSCHEME_VERSION "5.3.0.15" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 3 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 14 +#define MZSCHEME_VERSION_W 15 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/startup.inc b/src/racket/src/startup.inc index 944c81a1fc..184265dd8e 100644 --- a/src/racket/src/startup.inc +++ b/src/racket/src/startup.inc @@ -668,7 +668,13 @@ "(and a" "(let((am(date-of a modes)))" "(or(and(not bm) am) " -"(and am bm(>=(cdr am)(cdr bm)) am)))))))" +"(and am bm(>=(cdr am)(cdr bm)) am))))))" +"(with-dir*(lambda(base t) " +"(parameterize((current-load-relative-directory " +"(if(path? base) " +" base " +"(current-directory))))" +"(t)))))" "(lambda(path expect-module)" "(unless(path-string? path)" " (raise-argument-error 'load/use-compiled \"path-string?\" path))" @@ -680,6 +686,16 @@ "(not(car expect-module)))" "(andmap symbol?(cdr expect-module))))" " (raise-argument-error 'load/use-compiled \"(or/c #f symbol? (cons/c (or/c #f symbol?) (non-empty-listof symbol?)))\" path))" +"(define name(and expect-module(current-module-declare-name)))" +"(define ns-hts(and name" +"(hash-ref -module-hash-table-table" +"(namespace-module-registry(current-namespace))" +" #f)))" +"(define use-path/src(and ns-hts(hash-ref(cdr ns-hts) name #f)))" +"(if use-path/src" +"(parameterize((current-module-declare-source(cadr use-path/src)))" +"(with-dir*(caddr use-path/src)" +"(lambda()((current-load)(car use-path/src) expect-module))))" "(let*-values(((orig-path)(resolve path))" "((base orig-file dir?)(split-path path))" "((file alt-file)(if expect-module" @@ -728,14 +744,9 @@ " (path-add-suffix alt-file #\".zo\"))))" "(so(get-so file #t))" "(alt-so(get-so alt-file #t))" -"(with-dir(lambda(t) " -"(parameterize((current-load-relative-directory " -"(if(path? base) " -" base " -"(current-directory))))" -"(t))))" "(try-main?(or main-path-d(not alt-path-d)))" -"(try-alt?(and alt-file(or alt-path-d(not main-path-d)))))" +"(try-alt?(and alt-file(or alt-path-d(not main-path-d))))" +"(with-dir(lambda(t)(with-dir* base t))))" "(cond" "((and try-main?" "(date>=? modes so path-d))" @@ -750,11 +761,13 @@ "((and try-main?" "(date>=? modes zo path-d))" " =>(lambda(zo-d)" +"(register-zo-path name ns-hts(car zo-d) #f base)" "(parameterize((current-module-declare-source #f))" "(with-dir(lambda()((current-load)(car zo-d) expect-module))))))" "((and try-alt?" "(date>=? modes alt-zo path-d))" " =>(lambda(zo-d)" +"(register-zo-path name ns-hts(car zo-d) alt-path base)" "(parameterize((current-module-declare-source alt-path))" "(with-dir(lambda()((current-load)(car zo-d) expect-module))))))" "((or(not(pair? expect-module))" @@ -765,7 +778,10 @@ "(parameterize((current-module-declare-source(and expect-module " "(not try-main?)" " p)))" -"(with-dir(lambda()((current-load) p expect-module)))))))))))))" +"(with-dir(lambda()((current-load) p expect-module))))))))))))))" +"(define(register-zo-path name ns-hts path src-path base)" +"(when ns-hts" +"(hash-set!(cdr ns-hts) name(list path src-path base))))" "(define-values(default-reader-guard)" "(lambda(path) path))" "(define-values(-module-hash-table-table)(make-weak-hasheq)) " @@ -815,23 +831,39 @@ " (set! planet-resolver (dynamic-require '(lib \"planet/resolver.rkt\") 'planet-module-name-resolver))))))" "(define-values(standard-module-name-resolver)" "(case-lambda " -"((s) " +"((s from-namespace) " "(unless(resolved-module-path? s)" "(raise-argument-error 'standard-module-name-resolver" " \"resolved-module-path?\"" " s))" +"(unless(or(not from-namespace)(namespace? from-namespace))" +"(raise-argument-error 'standard-module-name-resolver" +" \"(or/c #f namespace?)\"" +" from-namespace))" "(when planet-resolver" "(planet-resolver s))" -"(let((ht(or(hash-ref -module-hash-table-table" +"(let((hts(or(hash-ref -module-hash-table-table" "(namespace-module-registry(current-namespace))" " #f)" -"(let((ht(make-hasheq)))" +"(let((hts(cons(make-hasheq)(make-hasheq))))" "(hash-set! -module-hash-table-table" "(namespace-module-registry(current-namespace))" -" ht)" -" ht))))" -"(hash-set! ht s 'attach)))" -"((s relto stx)(standard-module-name-resolver s relto stx #t))" +" hts)" +" hts))))" +"(hash-set!(car hts) s 'declared)" +"(when from-namespace" +"(let((root-name(if(pair?(resolved-module-path-name s))" +"(make-resolved-module-path(car(resolved-module-path-name s)))" +" s))" +"(from-hts(hash-ref -module-hash-table-table" +"(namespace-module-registry from-namespace)" +" #f)))" +"(when from-hts" +"(let((use-path/src(hash-ref(cdr from-hts) root-name #f)))" +"(when use-path/src" +"(hash-set!(cdr hts) root-name use-path/src))))))))" +"((s relto stx) " +"(standard-module-name-resolver s relto stx #t)) " "((s relto stx load?)" "(unless(module-path? s)" "(if stx" @@ -1048,21 +1080,21 @@ "(let*((root-modname(if(vector? s-parsed)" "(vector-ref s-parsed 4)" "(make-resolved-module-path filename)))" -"(ht(or(hash-ref -module-hash-table-table" +"(hts(or(hash-ref -module-hash-table-table" "(namespace-module-registry(current-namespace))" " #f)" -"(let((ht(make-hasheq)))" +"(let((hts(cons(make-hasheq)(make-hasheq))))" "(hash-set! -module-hash-table-table" "(namespace-module-registry(current-namespace))" -" ht)" -" ht)))" +" hts)" +" hts)))" "(modname(if subm-path" "(make-resolved-module-path " "(cons(resolved-module-path-name root-modname)" " subm-path))" " root-modname)))" "(when load?" -"(let((got(hash-ref ht modname #f)))" +"(let((got(hash-ref(car hts) modname #f)))" "(unless got" "(let((loading" "(let((tag(if(continuation-prompt-available? -loading-prompt-tag)" @@ -1101,11 +1133,10 @@ " filename " "(let((sym(string->symbol(path->string no-sfx))))" "(if subm-path" -"(if(hash-ref ht root-modname #f)" +"(if(hash-ref(car hts) root-modname #f)" "(cons #f subm-path)" "(cons sym subm-path))" -" sym))))))))" -"(hash-set! ht modname #t))))" +" sym)))))))))))" "(when(and(not(vector? s-parsed))" "(or(string? s)" "(symbol? s)" diff --git a/src/racket/src/startup.rktl b/src/racket/src/startup.rktl index 75b587189b..411fd6855b 100644 --- a/src/racket/src/startup.rktl +++ b/src/racket/src/startup.rktl @@ -777,7 +777,13 @@ (and a (let ([am (date-of a modes)]) (or (and (not bm) am) - (and am bm (>= (cdr am) (cdr bm)) am)))))]) + (and am bm (>= (cdr am) (cdr bm)) am)))))] + [with-dir* (lambda (base t) + (parameterize ([current-load-relative-directory + (if (path? base) + base + (current-directory))]) + (t)))]) (lambda (path expect-module) (unless (path-string? path) (raise-argument-error 'load/use-compiled "path-string?" path)) @@ -789,100 +795,113 @@ (not (car expect-module))) (andmap symbol? (cdr expect-module)))) (raise-argument-error 'load/use-compiled "(or/c #f symbol? (cons/c (or/c #f symbol?) (non-empty-listof symbol?)))" path)) - (let*-values ([(orig-path) (resolve path)] - [(base orig-file dir?) (split-path path)] - [(file alt-file) (if expect-module - (let* ([b (path->bytes orig-file)] - [len (bytes-length b)]) - (cond - [(and (len . >= . 4) - (bytes=? #".rkt" (subbytes b (- len 4)))) - ;; .rkt => try .rkt then .ss - (values orig-file - (bytes->path (bytes-append (subbytes b 0 (- len 4)) #".ss")))] - [else - ;; No search path - (values orig-file #f)])) - (values orig-file #f))] - [(path) (if (eq? file orig-file) - orig-path - (build-path base file))] - [(alt-path) (and alt-file - (if (eq? alt-file orig-file) - orig-path - (build-path base alt-file)))] - [(base) (if (eq? base 'relative) 'same base)] - [(modes) (use-compiled-file-paths)]) - (let* ([main-path-d (date-of-1 path)] - [alt-path-d (and alt-path - (not main-path-d) - (date-of-1 alt-path))] - [path-d (or main-path-d alt-path-d)] - [get-so (lambda (file rep-sfx?) - (lambda (compiled-dir) - (build-path base - compiled-dir - "native" - (system-library-subpath) - (if rep-sfx? - (path-add-suffix - file - dll-suffix) - file))))] - [zo (lambda (compiled-dir) - (build-path base - compiled-dir - (path-add-suffix file #".zo")))] - [alt-zo (lambda (compiled-dir) + (define name (and expect-module (current-module-declare-name))) + (define ns-hts (and name + (hash-ref -module-hash-table-table + (namespace-module-registry (current-namespace)) + #f))) + (define use-path/src (and ns-hts (hash-ref (cdr ns-hts) name #f))) + (if use-path/src + ;; Use previous decision of .zo vs. source: + (parameterize ([current-module-declare-source (cadr use-path/src)]) + (with-dir* (caddr use-path/src) + (lambda () ((current-load) (car use-path/src) expect-module)))) + ;; Check .zo vs. src dates, etc.: + (let*-values ([(orig-path) (resolve path)] + [(base orig-file dir?) (split-path path)] + [(file alt-file) (if expect-module + (let* ([b (path->bytes orig-file)] + [len (bytes-length b)]) + (cond + [(and (len . >= . 4) + (bytes=? #".rkt" (subbytes b (- len 4)))) + ;; .rkt => try .rkt then .ss + (values orig-file + (bytes->path (bytes-append (subbytes b 0 (- len 4)) #".ss")))] + [else + ;; No search path + (values orig-file #f)])) + (values orig-file #f))] + [(path) (if (eq? file orig-file) + orig-path + (build-path base file))] + [(alt-path) (and alt-file + (if (eq? alt-file orig-file) + orig-path + (build-path base alt-file)))] + [(base) (if (eq? base 'relative) 'same base)] + [(modes) (use-compiled-file-paths)]) + (let* ([main-path-d (date-of-1 path)] + [alt-path-d (and alt-path + (not main-path-d) + (date-of-1 alt-path))] + [path-d (or main-path-d alt-path-d)] + [get-so (lambda (file rep-sfx?) + (lambda (compiled-dir) + (build-path base + compiled-dir + "native" + (system-library-subpath) + (if rep-sfx? + (path-add-suffix + file + dll-suffix) + file))))] + [zo (lambda (compiled-dir) (build-path base compiled-dir - (path-add-suffix alt-file #".zo")))] - [so (get-so file #t)] - [alt-so (get-so alt-file #t)] - [with-dir (lambda (t) - (parameterize ([current-load-relative-directory - (if (path? base) - base - (current-directory))]) - (t)))] - [try-main? (or main-path-d (not alt-path-d))] - [try-alt? (and alt-file (or alt-path-d (not main-path-d)))]) - (cond - [(and try-main? - (date>=? modes so path-d)) - => (lambda (so-d) - (parameterize ([current-module-declare-source #f]) - (with-dir (lambda () ((current-load-extension) (car so-d) expect-module)))))] - [(and try-alt? - (date>=? modes alt-so alt-path-d)) - => (lambda (so-d) - (parameterize ([current-module-declare-source alt-path]) - (with-dir (lambda () ((current-load-extension) (car so-d) expect-module)))))] - [(and try-main? - (date>=? modes zo path-d)) - => (lambda (zo-d) - (parameterize ([current-module-declare-source #f]) - (with-dir (lambda () ((current-load) (car zo-d) expect-module)))))] - [(and try-alt? - (date>=? modes alt-zo path-d)) - => (lambda (zo-d) - (parameterize ([current-module-declare-source alt-path]) - (with-dir (lambda () ((current-load) (car zo-d) expect-module)))))] - [(or (not (pair? expect-module)) - (car expect-module)) - (let ([p (if try-main? path alt-path)]) - ;; "quiet" failure when asking for a submodule: - (unless (and (pair? expect-module) - (not (file-exists? p))) - (parameterize ([current-module-declare-source (and expect-module - (not try-main?) - p)]) - (with-dir (lambda () ((current-load) p expect-module))))))])))))) + (path-add-suffix file #".zo")))] + [alt-zo (lambda (compiled-dir) + (build-path base + compiled-dir + (path-add-suffix alt-file #".zo")))] + [so (get-so file #t)] + [alt-so (get-so alt-file #t)] + [try-main? (or main-path-d (not alt-path-d))] + [try-alt? (and alt-file (or alt-path-d (not main-path-d)))] + [with-dir (lambda (t) (with-dir* base t))]) + (cond + [(and try-main? + (date>=? modes so path-d)) + => (lambda (so-d) + (parameterize ([current-module-declare-source #f]) + (with-dir (lambda () ((current-load-extension) (car so-d) expect-module)))))] + [(and try-alt? + (date>=? modes alt-so alt-path-d)) + => (lambda (so-d) + (parameterize ([current-module-declare-source alt-path]) + (with-dir (lambda () ((current-load-extension) (car so-d) expect-module)))))] + [(and try-main? + (date>=? modes zo path-d)) + => (lambda (zo-d) + (register-zo-path name ns-hts (car zo-d) #f base) + (parameterize ([current-module-declare-source #f]) + (with-dir (lambda () ((current-load) (car zo-d) expect-module)))))] + [(and try-alt? + (date>=? modes alt-zo path-d)) + => (lambda (zo-d) + (register-zo-path name ns-hts (car zo-d) alt-path base) + (parameterize ([current-module-declare-source alt-path]) + (with-dir (lambda () ((current-load) (car zo-d) expect-module)))))] + [(or (not (pair? expect-module)) + (car expect-module)) + (let ([p (if try-main? path alt-path)]) + ;; "quiet" failure when asking for a submodule: + (unless (and (pair? expect-module) + (not (file-exists? p))) + (parameterize ([current-module-declare-source (and expect-module + (not try-main?) + p)]) + (with-dir (lambda () ((current-load) p expect-module))))))]))))))) + + (define (register-zo-path name ns-hts path src-path base) + (when ns-hts + (hash-set! (cdr ns-hts) name (list path src-path base)))) (define-values (default-reader-guard) (lambda (path) path)) - (define-values (-module-hash-table-table) (make-weak-hasheq)) ; weak map from namespace to module ht + (define-values (-module-hash-table-table) (make-weak-hasheq)) ; weak map from namespace to pair of module-name hts ;; weak map from `lib' path + corrent-library-paths to symbols: ;; We'd like to use a weak `equal?'-based hash table here, @@ -939,25 +958,42 @@ (set! planet-resolver (dynamic-require '(lib "planet/resolver.rkt") 'planet-module-name-resolver)))))) (define-values (standard-module-name-resolver) (case-lambda - [(s) + [(s from-namespace) (unless (resolved-module-path? s) (raise-argument-error 'standard-module-name-resolver "resolved-module-path?" s)) - ;; Just register s as loaded + (unless (or (not from-namespace) (namespace? from-namespace)) + (raise-argument-error 'standard-module-name-resolver + "(or/c #f namespace?)" + from-namespace)) (when planet-resolver ;; Let planet resolver register, too: (planet-resolver s)) - (let ([ht (or (hash-ref -module-hash-table-table - (namespace-module-registry (current-namespace)) - #f) - (let ([ht (make-hasheq)]) - (hash-set! -module-hash-table-table - (namespace-module-registry (current-namespace)) - ht) - ht))]) - (hash-set! ht s 'attach))] - [(s relto stx) (standard-module-name-resolver s relto stx #t)] + ;; Register s as loaded: + (let ([hts (or (hash-ref -module-hash-table-table + (namespace-module-registry (current-namespace)) + #f) + (let ([hts (cons (make-hasheq) (make-hasheq))]) + (hash-set! -module-hash-table-table + (namespace-module-registry (current-namespace)) + hts) + hts))]) + (hash-set! (car hts) s 'declared) + ;; If attach from another namespace, copy over source-file path, if any: + (when from-namespace + (let ([root-name (if (pair? (resolved-module-path-name s)) + (make-resolved-module-path (car (resolved-module-path-name s))) + s)] + [from-hts (hash-ref -module-hash-table-table + (namespace-module-registry from-namespace) + #f)]) + (when from-hts + (let ([use-path/src (hash-ref (cdr from-hts) root-name #f)]) + (when use-path/src + (hash-set! (cdr hts) root-name use-path/src)))))))] + [(s relto stx) ; for backward-compatibility + (standard-module-name-resolver s relto stx #t)] [(s relto stx load?) ;; If stx is not #f, raise syntax error for ill-formed paths (unless (module-path? s) @@ -1181,14 +1217,14 @@ (let* ([root-modname (if (vector? s-parsed) (vector-ref s-parsed 4) (make-resolved-module-path filename))] - [ht (or (hash-ref -module-hash-table-table - (namespace-module-registry (current-namespace)) - #f) - (let ([ht (make-hasheq)]) - (hash-set! -module-hash-table-table - (namespace-module-registry (current-namespace)) - ht) - ht))] + [hts (or (hash-ref -module-hash-table-table + (namespace-module-registry (current-namespace)) + #f) + (let ([hts (cons (make-hasheq) (make-hasheq))]) + (hash-set! -module-hash-table-table + (namespace-module-registry (current-namespace)) + hts) + hts))] [modname (if subm-path (make-resolved-module-path (cons (resolved-module-path-name root-modname) @@ -1196,7 +1232,7 @@ root-modname)]) ;; Loaded already? (when load? - (let ([got (hash-ref ht modname #f)]) + (let ([got (hash-ref (car hts) modname #f)]) (unless got ;; Currently loading? (let ([loading @@ -1236,15 +1272,12 @@ filename (let ([sym (string->symbol (path->string no-sfx))]) (if subm-path - (if (hash-ref ht root-modname #f) + (if (hash-ref (car hts) root-modname #f) ;; Root is already loaded, so only use .zo (cons #f subm-path) ;; Root isn't loaded, so it's ok to load form source: (cons sym subm-path)) - sym)))))))) - ;; Possibly redundant, because notification should have arrived, - ;; but non-redundant when a requested submodule wasn't found: - (hash-set! ht modname #t)))) + sym))))))))))) ;; If a `lib' path, cache pathname manipulations (when (and (not (vector? s-parsed)) (or (string? s)