asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T GOOF----LE-8-2.0]}4hg] gguile  gdefine-module*   gweb ghttp  gfilenameS f web/http.scm gimportsS gsrfi gsrfi-1    gselectS g append-map! gmap!   gsrfi-9    gsrfi-19    gice-9 grdelim   gmatch   !gq "! #" $g binary-ports %$ &% 'grnrs (g bytevectors )'( *) +guri ,+ -, . #&*-  /gexportsS 0gstring->header 1gheader->string 2gdeclare-header! 3gdeclare-opaque-header! 4g known-header? 5g header-parser 6gheader-validator 7g header-writer 8g read-header 9g parse-header :g valid-header? ;g write-header gparse-http-method ?gparse-http-version @gparse-request-uri Agread-request-line Bgwrite-request-line Cgread-response-line Dgwrite-response-line Egmake-chunked-input-port Fgmake-chunked-output-port Gghttp-proxy-port? Hgset-http-proxy-port?! I0123456789:;<=>?@ABCDEFGH Jgset-current-module KJ LJ Mgstring->symbol Ngstring-downcase Og  Pg%make-header-decl-procedure Qgmake-syntax-transformer RQ SQ Tgmake-header-decl Ugmacro Vg $sc-dispatch WV XV Yg_ Zgany [YZZZZZ \g syntax-object ]glambda ^g m-556baa-a _gtop `^_ agribcage bg t-556baa-5 cg t-556baa-6 dg t-556baa-7 eg t-556baa-8 fg t-556baa-9 gbcdef h````` if l-556baa-f jf l-556baa-10 kf l-556baa-11 lf l-556baa-12 mf l-556baa-13 nijklm oaghn pa qgx rq s` tf l-556baa-c ut varsu wgshift xg proc-name ygargs zxy {_ |{{ }fl-1e8ba8b5a-2ba ~fl-1e8ba8b5a-2bb }~ az| gkey gvalue gname gformals gbody  {{{{{ fl-1e8ba8b5a-2ad fl-1e8ba8b5a-2ae fl-1e8ba8b5a-2af fl-1e8ba8b5a-2b0 fl-1e8ba8b5a-2b1  a gmake-procedure-name  { fl-1e8ba8b5a-29d  a { fl-1e8ba8b5a-29c  ar `opvwpppp  ghygiene   \] {opv  \ gparser \ g validator \ gwriter \ g multiple? \  g make-struct g m-556baa-3 _ gt-1e8ba8b5a-38d gt-1e8ba8b5a-38c gt-1e8ba8b5a-38b  gm-1e8ba8b5a-38e _  fl-1e8ba8b5a-392 fl-1e8ba8b5a-393 fl-1e8ba8b5a-394  a g ctor-args  fl-1e8ba8b5a-37a  a gctor gfield  fl-1e8ba8b5a-376 fl-1e8ba8b5a-377  a| gform g type-name gconstructor-spec g field-names  {{{{ fl-1e8ba8b5a-36b fl-1e8ba8b5a-36c fl-1e8ba8b5a-36d fl-1e8ba8b5a-36e  a g record-layout gfunctional-setters gsetters gcopier ggetters g constructor ggetter-identifiers gfield-identifiers  {{{{{{{{ fl-1e8ba8b5a-343 fl-1e8ba8b5a-341 fl-1e8ba8b5a-33f fl-1e8ba8b5a-33d fl-1e8ba8b5a-33b fl-1e8ba8b5a-339 fl-1e8ba8b5a-337 fl-1e8ba8b5a-335  a fl-1e8ba8b5a-334  ar opvwppppp \ \O \    geach-any Y팤 gsyntax-violation   fWrong number of arguments g identifier?   {pv \P   f-source expression failed to match any pattern grecord-type-vtable   g pwpwpwpwpw gdefault-record-printer    gset-struct-vtable-name!   gvtable-offset-user    g%header-decl?-procedure  g header-decl?  YZ  g m-556baa-1f   _ g t-556baa-1e    f l-556baa-24  a f l-556baa-21  ar  pwpppp  \] gobj gt-1e8ba8b5a-47e gt-1e8ba8b5a-478 gt-1e8ba8b5a-479 gt-1e8ba8b5a-47a gt-1e8ba8b5a-47d gt-1e8ba8b5a-47c  gt-1e8ba8b5a-47b !  "gm-1e8ba8b5a-47f #"_ $####### %fl-1e8ba8b5a-483 &fl-1e8ba8b5a-484 'fl-1e8ba8b5a-485 (fl-1e8ba8b5a-486 )fl-1e8ba8b5a-487 *fl-1e8ba8b5a-488 +fl-1e8ba8b5a-489 ,%&'()*+ -a!$, .g copier-id /. 0fl-1e8ba8b5a-476 10 2a/1 3g ctor-name 43 5fl-1e8ba8b5a-46e 65 7a46 8 9fl-1e8ba8b5a-46c :9 ;a8: fl-1e8ba8b5a-46a ?> @a=? Ag immutable? BA Cfl-1e8ba8b5a-468 DC EaBD Fg field-count GF Hfl-1e8ba8b5a-466 IH JaGI Kg getter-ids LK Mfl-1e8ba8b5a-463 NM OaLN Pg field-ids QP Rfl-1e8ba8b5a-460 SR TaQS Ugpredicate-name Vg field-spec WAUV X{{{{{{ Yfl-1e8ba8b5a-453 Zfl-1e8ba8b5a-454 [fl-1e8ba8b5a-455 \fl-1e8ba8b5a-456 ]fl-1e8ba8b5a-457 ^fl-1e8ba8b5a-458 _YZ[\]^ `aWX_ apwp-pppp2p7p;p@pEpJpOpT` b\a cb dgand e\da fgstruct? g\fa hgb igeq? j\ia kg struct-vtable l\ka mlb n{p o\On pjmo qehp rcq s{p t\ s ugthrow-bad-struct vu wu xgheader-decl-name yg%header-decl-name-procedure zgfree-id {g %%on-error |g m-556baa-2b }|_ ~} f l-556baa-2d  ar~ }pwpppp  \{ z Z g%%type gt-1e8ba8b5a-3a5 gt-1e8ba8b5a-3a6 gt-1e8ba8b5a-3a7 gt-1e8ba8b5a-3a8 gt-1e8ba8b5a-3a9 gt-1e8ba8b5a-3aa gt-1e8ba8b5a-3ab  gm-1e8ba8b5a-3ac _  fl-1e8ba8b5a-3b0 fl-1e8ba8b5a-3b1 fl-1e8ba8b5a-3b2 fl-1e8ba8b5a-3b3 fl-1e8ba8b5a-3b4 fl-1e8ba8b5a-3b5 fl-1e8ba8b5a-3b6  a ggetter gindex  fl-1e8ba8b5a-3a3 fl-1e8ba8b5a-3a4  a| K. {{{ fl-1e8ba8b5a-39e fl-1e8ba8b5a-39f fl-1e8ba8b5a-3a0  a pwppppp \ z YZ gck gerr gs  }} f l-556baa-30 f l-556baa-31  a }pwpppp  \ gquote \ {p \O   g%%index \ z YZ f l-556baa-35 f l-556baa-36  a }pwpppp  \ \ p \    g%%copier \ z YZ f l-556baa-3a f l-556baa-3b  a }pwpppp  \ \ g%%-set-fields {p \   g t-556baa-2a  f l-556baa-3f  a~ }pwpppp  \] pwppppp \  gif \ \i \k  {p \O  g struct-ref \ p \   \u \ \x     {p \y gheader-decl-parser g%header-decl-parser-procedure g m-556baa-46 _  f l-556baa-48  ar pwpppp  \{ z Z  pwppppp  \   z   Y Z   f l-556baa-4b f l-556baa-4c  a  pwpppp  \ \ {p \O   \  z YZ f l-556baa-50 f l-556baa-51  a   pwpppp  !\  "\  #p $\ # %"$ &% '\  (z' )Y(Z *f l-556baa-55 +f l-556baa-56 ,*+ -a , .-pwpppp  /\. 0\. 1{-p 2\1 302 43 5g t-556baa-45 65 7f l-556baa-5a 87 9a68 :9pwpppp  ;\]: <9pwppppp =\< >= ?\< @\i< A\k< BA= C{9p D\OC E@BD F\< G9p H\ G IF=H J\u< K\< L\C MKL NJ=M O?EIN P;>O Q{p R\Q Sgheader-decl-validator Tg %header-decl-validator-procedure Ug m-556baa-61 VU_ WV Xf l-556baa-63 YX ZarWY [VpZwpppp  \\{[ ]z\ ^]Z _pZwppppp `\_ az` bY^aZ cVV df l-556baa-66 ef l-556baa-67 fde gacf hVgpZwpppp  i\h j\h k{gpZ l\Ok mjl nm o\_ pzo qY^pZ rf l-556baa-6b sf l-556baa-6c trs uact vVupZwpppp  w\v x\v yupZ z\ y {xz |{ }\_ ~z} Y^~Z f l-556baa-70 f l-556baa-71  ac VpZwpppp  \ \ {pZ \   g t-556baa-60  f l-556baa-75  aW VpZwpppp  \] pZwppppp \  \ \i \k  {pZ \O  \ pZ \   \u \ \S     {pZ \T gheader-decl-writer g%header-decl-writer-procedure g m-556baa-7c _  f l-556baa-7e  ar pwpppp  \{ z Z pwppppp \ z YZ  f l-556baa-81 f l-556baa-82  a pwpppp  \ \ {p \O   \ z YZ f l-556baa-86 f l-556baa-87  a pwpppp  \ \ p \    \ z YZ f l-556baa-8b f l-556baa-8c  a pwpppp  \ \ {p \   g t-556baa-7b  f l-556baa-90  a pwpppp  \] pwppppp \  \ \i \k  {p \O  \ p \   \u \ \     {p \ gheader-decl-multiple? g %header-decl-multiple?-procedure g m-556baa-97 _  f l-556baa-99  ar pwpppp  \{  z   Z  pwppppp  \   z  Y  Z  f l-556baa-9c f l-556baa-9d  a pwpppp  \ \ {p \O   \  z Y Z f l-556baa-a1 f l-556baa-a2   !a  "!pwpppp  #\" $\" %!p &\ % '$& (' )\  *z) +Y *Z ,f l-556baa-a6 -f l-556baa-a7 .,- /a. 0/pwpppp  1\0 2\0 3{/p 4\3 524 65 7g t-556baa-96 87 9f l-556baa-ab :9 ;a8: <;pwpppp  =\]< >;pwppppp ?\> @? A\> B\i> C\k> DC? E{;p F\OE GBDF H\> I;p J\ I KH?J L\u> M\> N\E OMN PL?O QAGKP R=@Q S{p T\S Ugeach VZZ WUV XZW YZX ZZY [g %%set-fields \gdummy ]gcheck? ^gexpr _\]^ `g m-556baa-b2 a`_ ba cf l-556baa-b7 df l-556baa-b8 ef l-556baa-b9 ff l-556baa-ba gf l-556baa-bb hcdefg ia_bh ja kf l-556baa-b4 lk marjl ngt-1e8ba8b5a-3c4 ogt-1e8ba8b5a-3c6 pgt-1e8ba8b5a-3c5 qnop rgm-1e8ba8b5a-3c7 sr_ tsss ufl-1e8ba8b5a-3cb vfl-1e8ba8b5a-3cc wfl-1e8ba8b5a-3cd xuvw yaqtx zfl-1e8ba8b5a-3c1 {fl-1e8ba8b5a-3c2 |fl-1e8ba8b5a-3c3 }z{| ~a} ipmwpyppp~  \[ {ipm \O \x \ \S \ \  gmap   glist gmake-hash-table g*declared-headers* g hashq-ref glookup-header-decl g multiple?S    gerror fbad header decl gstring? g hashq-set! gstring-titlecase gsymbol->string gdisplay g %read-line gstring-suffix? f  gstring-drop-right g bad-header gread-header-line   fno matching pattern g peek-char gread-continuation-line g string-append gcall-with-input-string f gread g*eof* g string-null? gstring=? g string-index g%read g substring gstring-trim-both gchar-set:whitespace fheader name not a symbol f:  f  g eof-object? greverse! gthrow gbad-header-component gformat fBad ~a header: ~a  gbad-header-printer fBad ~a header component: ~a  gbad-header-component-printer gset-exception-printer! gparse-opaque-string gvalidate-opaque-string gwrite-opaque-string gstring->char-set f[^][()<>@,;:\"?= ] gseparators-without-slash g string-rindex gvalidate-media-type g media-type gparse-media-type g string-length gchar-whitespace? g string-ref gskip-whitespace gtrim-whitespace gsplit-and-trim glist-of? glist-of-strings? g write-list f,  gwrite-list-of-strings gsplit-header-names gsymbol? glist-of-header-names? gwrite-header-list g make-string gsubstring-move! g string-set! gcollect-escaped-string g incremental?S    gqstring g parse-qstring g string-split f\" g write-qstring gstring= f1 f1. f1.0 f1.00 f1.000 gquality f0 f0. g char->integer g parse-quality gnon-negative-integer? gvalid-quality? g integer->char g write-quality gstring-prefix? fq= gparse-quality-list gvalidate-quality-list f;q= f, gwrite-quality-list gnon-negative-integer gparse-non-negative-integer gnumber? gexact? ginteger? gdefault-val-parser gdefault-val-validator gdefault-val-writer gmin gkey-value-list gparse-key-value-list gkey-value-list? gwrite-key-value-list gchar-set gparam-delimiters  gchar-set-adjoin  gparam-value-delimiters  gparse-param-component  g param-list  gparse-param-list gvalidate-param-list f; gwrite-param-list g string-match? YZZ g syntax->datum g char-numeric? g t-556baa-43c  g m-556baa-43d _  f l-556baa-440  a  g m-556baa-439 _   !f l-556baa-43a "! #a " $gc %$ &f l-556baa-437 '& (a%' )glp *gi +gtests ,)*+ -f l-556baa-431 .f l-556baa-432 /f l-556baa-433 0-./ 1a,0 2gp 32 4f l-556baa-424 54 6a35 7gstr 8gpat 978 :f l-556baa-420 ;f l-556baa-421 <:; =a9|< >f l-556baa-419 ?> @ar? A{pp#p(p1ppp6=p@ B\A C\A D\A Egchar-alphabetic? Fg t-556baa-442 GF Hg m-556baa-443 IH_ JI Kf l-556baa-446 LK MaGJL N{pMp#p(p1ppp6=p@ O\EN P\N Q\N Rgeqv? Sg t-556baa-448 Tg t-556baa-449 UST Vg m-556baa-44a WV_ XWW Yf l-556baa-44e Zf l-556baa-44f [YZ \aUX[ ]{p\p#p(p1ppp6=p@ ^\R] _\] `\] aZ bglet cg t-556baa-426 dg t-556baa-427 ecd fg m-556baa-428 gf_ hgg if l-556baa-42c jf l-556baa-42d kij laehk m{plppp6=p@  n\bm o\m p\dm qg= r\qm s\m tso ugmonth vg parse-month wfGMT xfUTC yg zone-offset zgparse-zone-offset {gdate |{ }{ ~gparse-rfc-822-date g current-date g date-year gparse-rfc-850-date gparse-asctime-date gdate-zone-offset gtime-utc->date gdate->time-utc gnormalize-date gcatch   g parse-date g truncate/ gfloor/ gexpt gtime-tai->date gdate->time-tai g date-week-day fSun,  fMon,  fTue,  fWed,  fThu,  fFri,  fSat,  fbad date gdate-day g date-month f Jan  f Feb  f Mar  f Apr  f May  f Jun  f Jul  f Aug  f Sep  f Oct  f Nov  f Dec  g date-hour g date-minute g date-second f GMT g write-date fW/ f" gparse-entity-tag g entity-tag? gwrite-entity-tag gparse-entity-tag-list gentity-tag-list gentity-tag-list? gwrite-entity-tag-list g authorization gbasic g credentials gparse-credentials gvalidate-credentials gwrite-credentials g challenge gparse-challenge greverse gparse-challenges gvalidate-challenges gwrite-challenge gwrite-challenges g bad-request g bad-response g*known-versions* g http-version fHTTP/ gwrite-http-version gfor-each fHTTP/1.0 fHTTP/1.1  fGET gGET fHEAD gHEAD fPOST gPOST fPUT gPUT fDELETE gDELETE fOPTIONS gOPTIONS fTRACE gTRACE fInvalid method: ~a fMissing Request-URI f* g build-uri gpathS gqueryS gfragmentS g string->uri fInvalid URI: ~a fBad Request-Line: ~s g , , guri-host g uri-scheme f:// g uri-userinfo guri-port guri-path f"Empty path and no host for URI: ~s fNon-absolute URI path: ~s g uri-query g write-uri g default-port? , , f/ f? fBad Response-Line: ~s g%date?-procedure   gdeclare-date-header! gdeclare-string-list-header! gdeclare-symbol-list-header! gdeclare-header-list-header! gdeclare-integer-header! g absolute-uri? , , gdeclare-uri-header! g string->uri* , , g%uri?-procedure , ,  gdeclare-relative-uri-header!  gdeclare-quality-list-header!  gdeclare-param-list-header!  gdeclare-key-value-list-header!  g* gdeclare-entity-tag-list-header! gdeclare-credentials-header! gdeclare-challenge-list-header! f Cache-Control gmax-age g min-fresh gs-maxage g max-stale gprivate gno-cache gno-store g no-transform g only-if-cache gmust-revalidate gproxy-revalidate g cache-control f Connection gclose  fclose !fDate "fPragma #fTrailer $fTransfer-Encoding %fUpgrade &fVia 'fWarning (gwarning )glength *fAllow +fContent-Disposition ,gcontent-disposition -fContent-Encoding .fContent-Language /fContent-Length 0fContent-Location 1f Content-MD5 2f Content-Range 3g content-range 4fbytes  5gbytes 6f Content-Type 7g content-type 8g string-trim 9gstring-trim-right :fThu, 01 Jan 1970 00:00:00 GMT ;g*date-in-the-past* f-1 ?> @f Last-Modified AfAccept BfAccept-Charset CfAccept-Encoding DfAccept-Language Ef Authorization FfExpect GfFrom HfHost Ighost JfIf-Match KfIf-Modified-Since Lf If-None-Match MfIf-Range NfIf-Unmodified-Since Of Max-Forwards PfProxy-Authorization QfRange Rfbytes= Sgrange TfReferer UfTE Vf User-Agent Wf Accept-Ranges XfAge YfETag ZfLocation [fProxy-Authenticate \f Retry-After ]fServer ^fVary _fWWW-Authenticate `g read-line agchar=? bgstring->number cgread-chunk-header dg keep-alive?S ed  fe ggget-bytevector-n! hgget-u8 igmake-custom-binary-input-port jfchunked input port kg close-port lgq-empty? mgdeq! ngq-length ognumber->string pg write-char qgmake-q rgmake-soft-port sgenq! tgstring-for-each uf0  vg force-output wfw xgmake-object-property yg%http-proxy-port? zgsetter {z |zC5hHk]4   ./I54L>"GMNh]456gname  gfilenamef web/http.scm K  M  M   gnamegstring->headerg documentationf%Parse NAME to a symbolic header name.C0ROh]Cgname  gparser  g validator   gwriter   g multiple?   gfilenamef web/http.scm O    gnameg%make-header-decl-procedureCPR4STUX[h]Cg t-556baa-5  g t-556baa-6  g t-556baa-7   g t-556baa-8   g t-556baa-9      CThO]L6Gga  gfilenamef web/http.scm  O   CYh?]L67gfilenamef web/http.scm  O    Ch]C   C hp]45$@45$ O@45$4O?$@  6  6xgx  ngtmp ngtmp  " ngtmp  > ngfilenamef web/http.scm O   n C5TRO4O>"G PiOROht]$CClgobj  gfilenamef web/http.scm O    gnameg%header-decl?-procedureC R4S UX rh3]C+g t-556baa-1e    C hO]L6Gga  gfilenamef web/http.scm  O   CYh?]L67gfilenamef web/http.scm  O    Cth]C   C hp]45$@45$ O@45$4O?$@  6  6xgx  ngtmp ngtmp  " ngtmp  > ngfilenamef web/http.scm O   n C5 ROwxhv]& C6ngs  gfilenamef web/http.scm O    gnameg%header-decl-name-procedureCyR4SxUXh:]C2gerr  gs    Ch:]C2gerr  gs    Ch:]C2gerr  gs    C h3]C+g t-556baa-2a    CxhO]L6Gga  gfilenamef web/http.scm  O   CYh?]L67gfilenamef web/http.scm  O    Ch]C   Ch]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamef web/http.scm O   C5xROwhx]& C6pgs  gfilenamef web/http.scm O    gnameg%header-decl-parser-procedureCR4SUX h:]C2gerr  gs    C!&h:]C2gerr  gs    C)/4h:]C2gerr  gs    C Ph3]C+g t-556baa-45    ChO]L6Gga  gfilenamef web/http.scm  O   CYh?]L67gfilenamef web/http.scm  O    CRh]C   Ch]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamef web/http.scm O   C5ROwSh {]& C6sgs  gfilenamef web/http.scm O    gnameg %header-decl-validator-procedureCTR4SSUXbinh:]C2gerr  gs    Cqw|h:]C2gerr  gs    Ch:]C2gerr  gs    C h3]C+g t-556baa-60    CShO]L6Gga  gfilenamef web/http.scm  O   CYh?]L67gfilenamef web/http.scm  O    Ch]C   Ch]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamef web/http.scm O   C5SROwh x]& C6pgs  gfilenamef web/http.scm O    gnameg%header-decl-writer-procedureCR4SUXh:]C2gerr  gs    Ch:]C2gerr  gs    Ch:]C2gerr  gs    C h3]C+g t-556baa-7b    ChO]L6Gga  gfilenamef web/http.scm  O   CYh?]L67gfilenamef web/http.scm  O    Ch]C   Ch]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamef web/http.scm O   C5ROwh {]& C6sgs  gfilenamef web/http.scm O    gnameg %header-decl-multiple?-procedureCR4SUXh:]C2gerr  gs    C#(h:]C2gerr  gs    C+16h:]C2gerr  gs    C Rh3]C+g t-556baa-96    ChO]L6Gga  gfilenamef web/http.scm  O   CYh?]L67gfilenamef web/http.scm  O    CTh]C   Ch]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamef web/http.scm O   C5R4SUXZh v]45Cngdummy  gcheck?  gs   ggetter   gexpr      Ch(] 45$@6gx  "gtmp "gfilenamef web/http.scm O   " g macro-typeg syntax-rulesgpatternsgcheck?gsggettergexprg...C5R4i5Rhw]6ogsym  gfilenamef web/http.scm [ \   gnameglookup-header-declCRO0 h-/03#"645$M$C$9$/445>"GC""""gname  gparser  g validator   gwriter   g multiple?   gdecl  \ |gfilenamef web/http.scm ^ $ h 0 h  0 d  1 d ; d  A d  \ e  \ e  _ f  d f ' q f    g multiple?S gnamegdeclare-header!g documentationf;Declare a parser, validator, and writer for a given header.C2ROwxh8] 45$& C6456gsym  2gdecl 2gfilenamef web/http.scm j  l  l   m   n  * o  2 o   2 gnamegheader->stringg documentationf0Return the string form for the header named SYM.C1Rh]45$CCgsym  gfilenamef web/http.scm q  t  t    gnameg known-header?g documentationkpReturn  #t iff SYM is a known header, with associated parsers and serialization procedures.C4ROwhO]CGgx  gfilenamef web/http.scm ~    Ch0] 45$& C6Cgsym  *gdecl *gfilenamef web/http.scm v  {  {   |   }   * gnameg header-parserg documentationfReturn the value parser for headers named SYM. The result is a procedure that takes one argument, a string, and returns the parsed value. If the header isn't known to Guile, a default parser is returned that passes through the string unchanged.C5ROwSh0] 45$& C6Cgsym  +gdecl +gfilenamef web/http.scm         + gnamegheader-validatorg documentationkDReturn a predicate which returns  #t if the given value is valid for headers named SYM. The default validator for unknown headers is  string? .C6ROwh0]] 45$& C6CUgsym  +gdecl +gfilenamef web/http.scm         + gnameg header-writerg documentationkReturn a procedure that writes values for headers named SYM to a port. The resulting procedure takes two arguments: a value and a port. The default writer is  display .C7R hp]!45$M45$, $45$ 6C664  56gport  lgv lgw   _gx   _gw  I Sgw  U _gfilenamef web/http.scm   1 5  9 =  D I  O  S  U  [  _  `   l gnamegread-header-lineg documentationfRead an HTTP header line and return it without its final CRLF or LF. Raise a 'bad-header' exception if the line does not end in CRLF or LF, or if EOF is reached.CRhH] 45 $" 45 $44556Cgport  Agval  Agt  &gfilenamef web/http.scm      # *  /  4 - <  >   A gnamegread-continuation-lineCR4ii5R09h]4545$" 45$D4:5$" 454 4  554 4 4 555Dgport  gline gt   +gt  > Xgdelim  X gsym  i gfilenamef web/http.scm      &  ( /  5  6  >  M  Q & U  X  [  ^ $ i  i  n s x 8   gnameg read-headerg documentationfRead one HTTP header from PORT. Return two values: the header name and the parsed Scheme value. May raise an exception if the header was known but the value was invalid. Returns the end-of-file object for both values if the end of the message body was reached (i.e., a blank line).C8R5h]456gsym  gval  gfilenamef web/http.scm     gnameg parse-headerg documentationfdParse VAL, a string, with the parser registered for the header named SYM. Returns the parsed value.C9R6h ]$ 4566gsym  gval  gfilenamef web/http.scm            gnameg valid-header?g documentationfRReturns a true value iff VAL is a valid Scheme value for the header with name SYM.C:R17hP]]445>"G4>"G445>"G6Ugsym  Pgval  Pgport   Pgfilenamef web/http.scm        '  0  1  @  L P   P gnameg write-headerg documentationkTWrite the given header name and value to PORT, using the writer from  header-writer .C;R8h8]4L> G45$6"gheaders  3gk 3gv  3gfilenamef web/http.scm   !      % *  3   3 gnameglpCh] OQ6gport  glp gfilenamef web/http.scm        gnameg read-headersg documentationfRRead the headers of an HTTP message from PORT, returning them as an ordered alist.C"G"C"gheaders  :gport  :gheaders   2gfilenamef web/http.scm         '  *  0 2   : gnameg write-headersg documentationkWrite the given header alist to PORT. Doesn't write the final  \r\n , as the user might want to add another header.C=Rh]6gsym  gval  gfilenamef web/http.scm    gnameg bad-headerCRh]6gsym  gval  gfilenamef web/http.scm    gnamegbad-header-componentCR1h()3L456-13L6gsym gval g_ # 'gfilenamef web/http.scm    /  # '    # ' Ch]O@gport  gkey  gargs   gdefault-printer   gfilenamef web/http.scm     gnamegbad-header-printerCRh()3L6-13L6gsym gval g_  "gfilenamef web/http.scm     "     " Ch]O@gport  gkey  gargs   gdefault-printer   gfilenamef web/http.scm     gnamegbad-header-component-printerCR4ii>"G4ii>"Ghq]Cigstr  gfilenamef web/http.scm     gnamegparse-opaque-stringCRh}]6ugval  gfilenamef web/http.scm       gnamegvalidate-opaque-stringCRh]6gval  gport  gfilenamef web/http.scm     gnamegwrite-opaque-stringCR4i5Rh8] 4/5$4/5$ 45CCCgstr  2gidx 2gfilenamef web/http.scm              #   $   -    2 gnamegvalidate-media-typeCRMh ]45$66gstr  gfilenamef web/http.scm                  gnamegparse-media-typeCRh`-.,3# # 45"*$4455$ "CC"gstr Zgstart Zgend  Zgi  ( Rgfilenamef web/http.scm    8 (   -  1   2   5  ) ?   C   F  L   R   Z gnamegskip-whitespaceCRh`-.,3# # 45"+$4455$ "CC"gstr [gstart [gend  [gi  ( Sgfilenamef web/http.scm    8 (   -  1   2   5  + <  ; >  + @   D   G  M   S   [ gnamegtrim-whitespaceCRhS-.,3#,# # 45$H454$"54$"5CCKgstr gdelim gstart  gend  gidx  D gtok  _ gfilenamef web/http.scm ! & " ( 3 $  7 $  8 %  D %  G &  U & @ _ &  _ %  d '  p ' . s ' 6 } '  ~ ' (  gnamegsplit-and-trimCRhw]6ogval  gfilenamef web/http.scm * +   gnameglist-of-strings?CRh]6gval  gport  gfilenamef web/http.scm - .   .    gnamegwrite-list-of-stringsCR0h]456zgstr  gfilenamef web/http.scm 0  1   1    gnamegsplit-header-namesCRh|]6tgval  gfilenamef web/http.scm 3 4   gnameglist-of-header-names?CR1ht]456lgx  gport  gfilenamef web/http.scm 8   9   9    Ch]6gval  gport  gfilenamef web/http.scm 6 :   7    gnamegwrite-header-listCRh ]445"(#4>"GC  4 >"G44 5>"G "x "igfrom  gstart  glen   gescapes   gto  gstart   gi   gescapes   ge  ; g next-start H  gfilenamef web/http.scm <  = =   >   ?   A # A 1 $ A ( - A ; C  ; C D D & E D  H C K E V E ( _ E h F o F  v F / x F  } F G  G " G >   gnamegcollect-escaped-stringCRh-/03 # # 45#"6$45"$"$x45\$ ""$245$D$C6"6 "h"?";gstr  gstart  gend   g incremental?   gi  _ gqi  _ gescapes  _ gkey  q gout   gfilenamef web/http.scm K # L ' > ^  B ^  B N  G N K N  L N  W N  [ N  _ O  d P h P  i Q  q Q S  S  S # S  Q U  U 6 U  U  V  W ! W  X  X  X  Z / Z  \  \  \  ] " ] O  O  O . O *  g incremental?S gnameg parse-qstringCRhX'] $H"<4>"G$4>"G"C"Cgl  Sgport  Sg write-item   Sgdelim   Sgl  Igfilenamef web/http.scm `  a  a  b   c   c   c  % d  & d * d  + f  A g  G g  I b   S gnameg write-listCRhh]4">"G4"5$#44"5>"G"4>"G"6gstr  bgport  bgfilenamef web/http.scm i  j   k  # k  $ m  ' m  5 m 6 : m  G n  b o   b gnameg write-qstringCRhJ]L6Bgfilenamef web/http.scm       Ch6-.,3 # # 45$451$45$"d45$"G45$"*45$" 45$ C  6450$ 4 5$" 4 5$ C $  "$"$45.$C  6 $[454 5 0" 4  5"# $ $""""""b   "Q  6OQ45.$ $  "$"|$C $S454 5 0 $ $"4 5"4 5 ""   "s66  6.gstr gstart gend  gt  J gt  d gt  ~ gt  gt  gb   +gplace  3 gi  3 gq  3 gc  w gi   gfailure   gb   #gplace  + gi  + gq  + gc  U gi  a gfailure e gfilenamef web/http.scm q  q 6 ) x - w  . z 9 z  = w  > { D {  J { J {  X | ^ |  d | d {  r } x }  ~ } ~ {  ~ ~  ~ {      {         w                     /   3  8   9   =   >   E  , G   J   N   U  , Y   ^   a  # f   j   o  7 w  ( z s   s "  s  s   v  v  v  t   t   t   t   t              "     "    w        w       '   +   0  4   <   ?   D   H   M  / U  X s  ` s " a s a s  e t  k t  o t  t t  x t                   y   y r  gnameg parse-qualityCRh]45$ CC}gq  gfilenamef web/http.scm         !   gnamegvalid-quality?CRh] 4  4 05>"G4.>"G4 d 4 05>"G4 4 05>"G 4 056gq  gport  gd   gd  K Zgd  t gd  gfilenamef web/http.scm                       $   -   A   H  K   K  N   R   U   W   a   j   q  t   t  w   {   ~                   %  gnameg write-qualityCRh0](C$45$ 6CCgval  *gpred  *gfilenamef web/http.scm                     "   &    * gnameglist-of?CR h` ]4;5$:4545$4 54 5C6 45Cgpart  [gt [gqpart   Mgfilenamef web/http.scm           H       "   &  & *   .   /   8   D   I  , M   Q   Z    [ Ch]4,56zgstr  gfilenamef web/http.scm          gnamegparse-quality-listCRh ]$45$6CCgelt  gfilenamef web/http.scm           #              Chz]6rgl  gfilenamef web/http.scm     gnamegvalidate-quality-listCRhH]4>"G $4>"G6Cgx  Hgport  Hgq   Hgstr   Hgfilenamef web/http.scm              &   *   +   /  ! 6   F    H Ch]6gl  gport  gfilenamef web/http.scm         gnamegwrite-quality-listCRh-.,3# # 45$}"n$b 4545 0" 45"# $ $"""""C "6gval gstart gend  gi  1 gout  1 gc  K gi  W gfilenamef web/http.scm    * )  -   1   6  :   =   B   C  - K   N   V  " W  W   ^  b  f  j   n   r   w   {           gnamegparse-non-negative-integerCRh0]45$ $45$6CCCgcode  ,gfilenamef web/http.scm               "   &  0  , gnamegnon-negative-integer?CRh]Cwgk  gval  gfilenamef web/http.scm     gnamegdefault-val-parserCRh]$6Cgk  gval  gfilenamef web/http.scm             gnamegdefault-val-validatorCRhX]4;5$""4,5$" 4"5$66gk  Qgval  Qgport   Qgt  =gt  ! :gfilenamef web/http.scm        !   /  A   I   Q    Q gnamegdefault-val-writerCRM h]RL$4LL54L=L54L,L54$"L$"L544L4L555"  "$$ "$4LL5"44L4L$"L55$"L "KL$-4L5"$4LL >!""""""U""M G4L54LL5   L  $" 4L 5, $  $  ""s  4LLL56 6gi  gout  gi   geq  % gcomma  4 gdelim  W gk  r gi  gv-str  , gnext-i  , gv G gi G gt P l gfilenamef web/http.scm               %   (   4   7   ?   M  ' W   W   Z   ]   d  $ p   r   r          ,       2      "  -  >  -  "  "          /  )     /  4   =   G   P   P   ^  ( i  " p   s   y  % ~  +         *   *      ?   gnameglpChP-.,3## # 45OQ6gstr Ng val-parser Ngstart  Ngend  Nglp  : Ngfilenamef web/http.scm  &  . :   L   N   N gnamegparse-key-value-listCRh8]$$L6C$L6Cgelt  4gk  $gv   $gfilenamef web/http.scm                     "   '   +   2    4 Ch(-.,3#O6glist #gvalid? #gfilenamef web/http.scm  #   # gnamegkey-value-list?CRh`]$"$"4>"G$4=>"GL6Cgx  _gport  _gk  ! _gv  ! _gfilenamef web/http.scm !   "  "  "   #   #   #  ! "  & $  ? %  @ ' ] (   _ Ch8-.,3##O6glist 1gport 1g val-writer  1gdelim  1gfilenamef web/http.scm    F 1   1  gnamegwrite-key-value-listCR4i,;=5R4 ii,;5 RM  hk]JL$4L544L4L$"L555$ 4L5"=$4LL5"54LL5$"L4L5 ";L$-4L5"$4 LL >"""" G4L5$ "4LL5  L$ 4L 5"  $4 5LD ;$4L L5"4 5 D;$24L54LL5$ ""V4L54 $ "5$"LD4 5LDcgi  gout  gdelim   gk  Q gdelimc  Q gi  j gt  } gdelim  gv-str  qgnext-i  qgv  qgx   qgi  qgkey ) qgv   gv   gfilenamef web/http.scm 3   4 4  6   6   7   8  # 8 % / 8 < 9 8 % ; 8  = 7  C 9  D 9 # Q 7 ^ : _ >  f > 3 j >  j >  q B & } B " A  E % E  ?  ? ?  ? 0 ? * ?  @  <  H  H  I  I #  H   J   H   K  K   K * ) K  4 M ; M * = M A M  J K  K O  R O 1 V O  [ P  c O  d R k R * m R q R  z : { T   T   U   U *  U   V   V !  V   U   Y   Y   Z   Z )  Z /  Z #  Z   [   Z   5   5 P   gnameglpChP-.,3## # 45OQ6gstr Kg val-parser Kgstart  Kgend  Kglp  9 Kgfilenamef web/http.scm 0 & 2 / 9 3  I 3  K 3  K gnamegparse-param-componentC R  h`!]4LLL> GL$14L5,$4LL5"L66gi  ]gout  ]gitem   ]gi   ]gfilenamef web/http.scm `   b   a   d # d  $ e  / e  3 e 4 f  ; f ) ? f  D g  L f  P h & T h  [ i  ] i   ] gnameglpChP-.,3## # 45OQ6gstr Kg val-parser Kgstart  Kgend  Kglp  9 Kgfilenamef web/http.scm ] & _ * 9 `  I `  K `  K gnamegparse-param-listC Rh[]L6Sgelt  gfilenamef web/http.scm n o   Ch(-.,3#O6glist #gvalid? #gfilenamef web/http.scm k # m  # gnamegvalidate-param-listCRhw]L6ogitem  gport  gfilenamef web/http.scm u  v 0  v    Ch(-.,3#O6glist 'gport 'g val-writer  'gfilenamef web/http.scm q % w  ' s  '  gnamegwrite-param-listCR4SUXhm]456egstr  gpat  gfilenamef web/http.scm  |  |   CBCDOPQXV^_`hN]CFg t-556baa-448  g t-556baa-449     Canoprth(N]LCFg t-556baa-426  !g t-556baa-427  !  ! Ch]24545"45$45.$"td$"Va$ "84  5$ 4 ?" 4 5"Y" "F4 5$ O@ 6gstr  gpat  gp  gi   gtests   gc  - gtmp  gtmp  gtmp  gtmp   gfilenamef web/http.scm  }  }   %         $   %  -   2   ;   [  h   y   '       '   ~   Ch@`] 45" 6$4?$@""Xgx  9gtmp 9gfilenamef web/http.scm z   9 C5Ruh] $4 5454 5J$ha$n$ C456u$)n$ Cl$ C456456F$7e$b$ C456456M$Ca$)r$ Cy$ C456456A$]p$r$ C456u$g$ C456456S$7e$p$ C456456O$7c$t$ C456456N$7o$v$ C456456D$7e$c$ C456456456456gstr  gstart  gend   ga  / gb  / gc  / gfilenamef web/http.scm                     !   #   $   -   /   /   >   G  P   V   W  ! c   l  u      !      !           !      !              ! !   %   &  ! 2   ;   D  M   T   U  ! a   j  s   z   {  !         !                 !         !                 !         !    !   *  3   :   ;  ! G   K   L  ! X   a   j  s   z   {  !         !         !         !   g   gnameg parse-monthCvRwxy h]"4545$ C45$ C"645 $44  55$44  55$44  55$r44  55$]4  5+$ "-$ " 454  54   5 < <C"B">":"6"2gstr  gstart  gs  gkey  gsign  ghours  gminutes  gfilenamef web/http.scm                     #   %   )   3   7   7   8   E   F                            gnamegparse-zone-offsetCzREv}{ h ]34 545 $*44 55$44 55$4 5:$44 55$44 55$4 5:$44 55$44 55$v4 5 $a44 55$J44 55$344 55$44 55$4 5 $44 55$44 55$44 55$4 5 $44 55$44 55$h4 5 $S4 5,$>44 55$'44 55$44 55"""""""""""""""""""""""""$c4  54  54 54  54  54  5  C4 545 $44 55$44 55$4 5:$44 55$44 55$4 5:$44 55$v44 55$_4 5 $J44 55$344 55$44 55$44 55$4 5 $44 55$44 55$44 55$4 5 $44 55$h4 5 $S4 5,$>44 55$'44 55$44 55""""""""""""""""""""""""$c4  54  54 54  54  54  5  C4 545 $(44 55$44 55$4 5:$44 55$44 55$4 5:$44 55$4 5 $v4 5 $a44 55$J44 55$344 55$44 55$4 5 $44 55$44 55$44 55$4 5 $44 55$44 55$h4 5 $S4 5,$>44 55$'44 55$44 55"""""""""""""""""""""""""$c4  54  54 54  54  54  5  C4 545 $44 55$44 55$4 5:$44 55$44 55$4 5:$44 55$t4 5 $_4 5 $J44 55$344 55$44 55$44 55$4 5 $44 55$44 55$44 55$4 5 $44 55$h4 5 $S4 5,$>44 55$'44 55$44 55""""""""""""""""""""""""$c4  54  54 54  54  54  5  C4  >"GCgstr  gspace  g zone-offset   gs  Jgdate   gmonth   gyear   ghour   gminute   gsecond   gs   gdate  ( Igmonth  ( Igyear  ( Ighour  ( Igminute  ( Igsecond  ( Igs  S gdate   gmonth   gyear   ghour   gminute   gsecond   gs   %gdate  k gmonth  k gyear  k ghour  k gminute  k gsecond  k gfilenamef web/http.scm      N   O   Z   e   p   {                                    (  H  J   S                                )   *   5   @   K   V   a   k       1  gnamegparse-rfc-822-dateC~R{Ev}wh]L45"4>"G"45 $44 55$44 55$4 5:$44 55$~44 55$d4 5:$L44 55$244 55$4 5 $44 55$44 55$4 5-$44 55$44 55$44 55$f4 5-$N44 55$444 55$4 5 $""""""z""r""j""b""Z""R""J""B"":""2""*""""""""" """"""4 54   54  54 54  54  5  4 5   &  " 4   5     d  2 $  d" 2 $  d"         Cgstr  gcomma  gspace   g zone-offset   gtail   gdate  c gmonth  c gyear  c ghour  c gminute c gsecond c gs t gnow  gthen  gyear  gfilenamef web/http.scm                     ,   -  :   ;  #   -   8   C   N   Y   c   p  ( t           *   -   *                  .            .   &   gnamegparse-rfc-850-dateCR{Ev} h]1"4>"eG"^45 $L44 55$244 55$44 55$44 55$4 5 $44 55$44 55$4 5:$44 55$f44 55$L4 5:$444 55$44 55$4 5 $44 55$4 5 $44 55$44 55$44 55$h4 5 $P44 55$644 55$44 55$""B"":""2""*""""""""" """"""""""""""""""""""""""""""""44 5 $ "  54  54  54 54  54  5  Cgstr  gdate  gmonth   gyear   ghour   gminute   gsecond   gfilenamef web/http.scm $  &  &   &   %   % , %  - % } '   )   )   )   '   +   ,   -   .   /   '   0    gnamegparse-asctime-dateCR}wh8]&  " 45 $C45 6gdate  2gfilenamef web/http.scm 3  4  4  # 4  ) 6  2 6   2 gnamegnormalize-dateCRzhR]LL6Jgfilenamef web/http.scm : ! ; 9 ; "  ChU-13CMgargs gfilenamef web/http.scm : ! C~{ hM]4 5$4O5"$J4,5$) $45" 45" 4  5"4 56Egstr  gspace g zone-offset  ) gcomma  < ygfilenamef web/http.scm 8  9  9   :   : ! ) 9  3 =  4 >  < > D ? I @  M ? N @  ] A  n ?  r ? * v ?  ~ B <   gnameg parse-dateCRhXE] "? $544 045 5>"G4 5"C4 5"=gn  Ugdigits  Ugport   Ugtens   Egfilenamef web/http.scm E   G  H  H   J  J   F   J 4 " J , # J $ % J  , J 5 L  C L E G  F G  M G  O G  U G   U gnamegdisplay-digitsC}w%h]&  " 45 $" 445 5445 $ "b $ "T $ "E $ "6 $ "' $" $" 45>"G4&  " 45 >"G4&  " 45 $" $" $" $" $"r $"c $"T $"E $"6 $"' $" $" 45>"G4&  " 4 5 >"G4 >"G4&  " 4!5 >"G4:>"G4&  " 4"5 >"G4:>"G4& " 4#5 >"G$6gdate  gport  gdisplay-digits   gdate  : gkey  F gkey   gfilenamef web/http.scm D M  " M  ' M  . O  1 O " : O  : M  = P  @ P  F P R Q  ^ P ` Q " m P o Q 0 | P ~ R  P R " P R 0 P S  S # S * S # P  U  U  U  V  V   V # W  0 V 2 W $ ? V A W 3 N V P X  ] V _ X $ l V n X 3 { V } Y   V  Y $  V  Y 3  V  Z   V  Z $  V  Z 3  [   [   [   V   ]   ]   ]   ^  + _  0 _  Q _  Z `  n a  s a   a   b   c   c   c   d  d O   gnameg write-dateCRh8]45$ 4 5C45$ 45CCgval  7gfilenamef web/http.scm j  l   l  l   k   l $  l   m  m  $ m  ( k  ) m $ 1 m  6 n   7 gnamegparse-entity-tagCRh]$6Cgval  gfilenamef web/http.scm p  q  q   r   r    gnameg entity-tag?CRh0]$"4>"G6gval  *gport  *gfilenamef web/http.scm t  u u   v   v   v  & w  * w   * gnamegwrite-entity-tagCR h-.,3# # 454 54$" > G45$645,$4455" 4  5"Cgval gstart gend  gstrong?  5 gtag  X gnext  X gnext  o gfilenamef web/http.scm y  z / % {  ) { & 4 {  5 {  5 {  8 }  B } + M } = W }  [ |  d   e   o   v   z   {           0        0       gnamegparse-entity-tag-listCRhw]6ogval  gfilenamef web/http.scm     gnamegentity-tag-list?CRh]6gval  gport  gfilenamef web/http.scm   )      gnamegwrite-entity-tag-listCRMNh3-.,3## # 454545$"$4>"G"44 4 $"555 $-45$4 5C 64 5C+gstr g val-parser gstart  gend  gstart  9 gt  H [gdelim  [ gscheme  gstart   gfilenamef web/http.scm  &  + /   9   <   H   [   b   f   g   k   r         $  9  $                    %       gnamegparse-credentialsCRh8] $&$$66CCgval  1gkey  -gfilenamef web/http.scm                   $   &   +  -    1 gnamegvalidate-credentialsCRhP] 4>"G4 >"G$ 66gval  Kgport  Kgkey  . Kgfilenamef web/http.scm             .   .   >   B  G  K    K gnamegwrite-credentialsCRMNM h]RL$4LL54L=L54L,L54$"L$"L54L54L 5$ 45D44L55"  "$$ "$4LL5"44L4L$"L55$"L "KL$-4L5"$4 LL >!""""""U""M G 4L L5  L  $" 4L 5, $ $ ""^  4LLL5645LDgi  gout  gi   geq  % gcomma  4 gdelim  W g token-end  d gk  gi  ;gv  L gnext-i L gi ^ gt e  gfilenamef web/http.scm               %  (   4  7   ?   M  ) W   W  Z   d  g   w  x        )          $  4  (    %  :  %    *  +  <  +  *  *   "      '      7   1   "   " O   T   ^   e  e   s  0 ~  *        -   3   '                  C   gnameglpC h-.,3# # 45454 5$444555" 45 OQ6}gstr gstart gend  gstart  / gsp  > gscheme  h glp  u gfilenamef web/http.scm    ) %   /   2  >   F   G   J  % M  6 Y  % [   `   d  + h   h   u       gnamegparse-challengeCRhH]4LL5L$%4LL> G"6gi  Cgret  Cgi  Cg challenge  ' =gi  ' =gfilenamef web/http.scm              ' *  5   =   C    C gnameglpChH-.,3## # 45OQ6gstr Hg val-parser Hgstart  Hgend  Hglp  8 Hgfilenamef web/http.scm  &  * 8   F   H   H gnamegparse-challengesCRh ]$$6CCgx  gfilenamef web/http.scm         *  !      (      Chz]6rgval  gfilenamef web/http.scm     gnamegvalidate-challengesCRh8]4>"G4 >"G6gval  4gport  4gfilenamef web/http.scm             0   4    4 gnamegwrite-challengeCRh]6gval  gport  gfilenamef web/http.scm   '      gnamegwrite-challengesCRh-136gmessage gargs gfilenamef web/http.scm       gnameg bad-requestCRh-136gmessage gargs gfilenamef web/http.scm       gnameg bad-responseCRR hE-.,3# # 45"0$$45$""""$C4.5"4564  5$>$44 .5$4  54 5C"""=gstr gstart gend  gknown  ( Xgt  ` gdot-idx  x gfilenamef web/http.scm    ; (   +  /   0   7   >   B  E   M   S   X   `   l   x    "  0       !              2      2    $ gnamegparse-http-versiong documentationkParse an HTTP version from STR, returning it as a major minor pair. For example,  HTTP/1.1 parses as the pair of integers,  (1 . 1) .C?RhH]4>"G4>"G4.>"G6gval  Hgport  Hgfilenamef web/http.scm               #   ,   D  H    H gnamegwrite-http-versiong documentationf1Write the given major-minor version pair to PORT.CR4i?h |]4 455 Ctgv  gfilenamef web/http.scm "  $  $ *  $   $  #    C>"GhY-.,3# # 4545$C45$C45$C4 5$ C4 5$ C4 5$C45$C456Qgstr gstart gend  gfilenamef web/http.scm /  / : % 3  + 3  1 3  5 2  7 3 " 9 4  ? 4  E 4  I 2  K 4 # M 5  S 5  Y 5  ] 2  _ 5 # a 6  g 6  m 6  q 2  s 6 " u 7  { 7  7  2  7 % 8  8  8  2  8 & 9  9  9  2  9 $ :  : + : ) gnamegparse-http-methodg documentationkRh8-.,3# # 45$645$C45/$4?54#5$$ "$""  4 $"$"5 $4 $"5" $4 5"644 55$C4 56gstr 1gstart 1gend  1gq  c gf  r gq  gt   1gfilenamef web/http.scm <  < : ) @  - ?  1 A  3 A  4 B  : B  @ B  D ?  G D R D  V ?  W E  c E  f F  r E  z G  G  G ! G  G  E  H  I  I - I  J  J J / J 6 J K  K # K 2 K #  H   M   M   M   M  $ N  % N ' 1 N - 1 gnamegparse-request-urig documentationfParse a URI from an HTTP request line. Note that URIs in requests do not have to have a scheme or host name. The result is a URI object.C@R>@? h]454545"6$I$?$24 544 554 4 55D"""gport  gline gd0   gd1   gfilenamef web/http.scm P  S  S  T  S   U  S  ) Z  - Z  - V  9 V  > V  B V  C W  M X  R X ( Y X > ] X ( a X  b Y  i Y ) j Y 1 r Y  t W   gnamegread-request-lineg documentationfoRead the first line of an HTTP request from PORT, returning three values: the method, the URI, and the version.CARwhx]&  " 45$14& " 45>"G4>"G& " 45$D4& " 45>"G4@>"G"4&  " 45>"G&  " 45$8 P&"(4:>"G4>"G""&  " 4 54 5"4>"G""G $;&  " 45$"4  >"FG"?" $/4  5/$""4 >"G""~&  " 45$54?>"G&  " 456Cguri  vgport  vgp   Ngpath  m  glen  v gfilenamef web/http.scm \  ]  ! ]  " _  ' _  E _  N `  R `  Y `  d a  a  c  c  c  d  e  e  e  f   f   g  g   i  4 j  U k  m k  p l  v k  } s   m   p  m   p   p   q   q   q   m   n  m   n  n   n   o   o   o  # t  ? t  @ v  X w  t w 4  v gnameg write-uriCRGwhH]4>"G4 >"G45$9& " 45&  " 45&  " 45$$4>"G4>"G4 :5$@4[>"G4>"G4]>"G"4>"G4 5$"(4:>"G4>"G"""&  " 4 5&  " 4 54 5$4>"G"4>"G$,4>"G4>"G"4 >"G4>"G6 gmethod  Gguri  Ggversion   Ggport   Ggscheme  jghost  jg host-port  jgpath   gquery    gfilenamef web/http.scm y  {   |  + }  5 }  8 ~  R   m   ~                        !   #   )   -   2  F  q                                          ,   C  G  .  G gnamegwrite-request-lineg documentationf0Write the first line of an HTTP request to PORT.CBR? h]4545$4455""6$5$+4 544554 5D""gport  gline gd0   gd1  3 gfilenamef web/http.scm                $  # .   3   =   A   A   M   N   X   ]  1 k   l   x    gnamegread-response-lineg documentationfRead the first line of an HTTP response from PORT, returning three values: the HTTP version, the response code, and the (possibly empty) "reason phrase".CCRhp:]4>"G4 >"G4>"G4 >"G4>"G62gversion  ngcode  ng reason-phrase   ngport   ngfilenamef web/http.scm        +   ?   S   j  n    n gnamegwrite-response-lineg documentationf1Write the first line of an HTTP response to PORT.CDR2h]6 gname  gfilenamef web/http.scm       gnamegdeclare-opaque-header!g documentationf}Declares a given header as "opaque", meaning that its value is not treated specially, and is just returned as a plain string.C3R2h|]6tgname  gfilenamef web/http.scm       gnamegdeclare-date-header!CR2h]6{gname  gfilenamef web/http.scm       gnamegdeclare-string-list-header!CR2Mhd]456\gstr  gfilenamef web/http.scm           ChY]6Qgv  gfilenamef web/http.scm      Cht]6lgv  gport  gfilenamef web/http.scm    !      Ch]6{gname  gfilenamef web/http.scm       gnamegdeclare-symbol-list-header!CR2h]6{gname  gfilenamef web/http.scm       gnamegdeclare-header-list-header!CR2h]6wgname  gfilenamef web/http.scm       gnamegdeclare-integer-header!CR2+h ] 45$C6|gstr  gt gfilenamef web/http.scm          >   (   Ch{]6sgname  gfilenamef web/http.scm       gnamegdeclare-uri-header!CR2+h ] 45$C6gstr  gt gfilenamef web/http.scm                 Ch]6|gname  gfilenamef web/http.scm       gnamegdeclare-relative-uri-header!C R2h]6|gname  gfilenamef web/http.scm       gnamegdeclare-quality-list-header!C R2 h[]L6Sgstr  gfilenamef web/http.scm      Ch[]L6Sgval  gfilenamef web/http.scm      Chm]L6egval  gport  gfilenamef web/http.scm      ChH-.,3###OOO6gname Eg val-parser Eg val-validator  Eg val-writer  Egfilenamef web/http.scm  E   E gnamegdeclare-param-list-header!C R2h[]L6Sgstr  gfilenamef web/http.scm      Ch[]L6Sgval  gfilenamef web/http.scm      Chm]L6egval  gport  gfilenamef web/http.scm      ChH-.,3###OOO6gname Eg val-parser Eg val-validator  Eg val-writer  Egfilenamef web/http.scm  E   E gnamegdeclare-key-value-list-header!C R2 h]45$C6gstr  gfilenamef web/http.scm       $        )   ,   C hv]&C6ngval  gfilenamef web/http.scm            #   C h ]&66gval  gport  gfilenamef web/http.scm                  Ch]6gname  gfilenamef web/http.scm       gnamegdeclare-entity-tag-list-header!CR2h]6{gname  gfilenamef web/http.scm       gnamegdeclare-credentials-header!CR2h]6~gname  gfilenamef web/http.scm       gnamegdeclare-challenge-list-header!CR4 i hp]$"$"$6$$6C$"$$6CCgk  lgv-str  lgfilenamef web/http.scm ;  <  - >  6 <  < @  B @  M <  a B  g B   l Ch]$"$"$6$$6C$"$$6C $"/ $"! $" $" $C$6Cgk  gv  gfilenamef web/http.scm D  E  - G  6 E  < I  B I  C I M E  a K  g K  h K r E  M  O  O  O   Chp]45$ 6$04">"G4>"G"645$66gk  igv  igport   igfilenamef web/http.scm P   R  Q   R   S   Q   T  3 U  N V  O W  Y Q  a X  e Z  i Z   i C>"G42iii 1h ]&"456gx  gport  gfilenamef web/http.scm f   g & g   h   i   g    Chv]6ngval  gport  gfilenamef web/http.scm d  k   e    C>"G4i!>"G4 i">"G4i#>"G4 i$>"G4i%>"G42i&iii>"G42i'( h ]Y4L 54L 5$$4L54L54L> GL$ 4L5" $-4L> G 45 ""  " G  L$ 4L 5"   $ C ,$ 4L4L 55C  L6CC gi  gidx1 gidx2   gcode  @ gagent  @ gtext  U gi  U gc  s gdate  gi gtext  gdate  gi gw gc gfilenamef web/http.scm             /       #  )   *   5   <  * @   @   E   L  2 T   X   a  ( e  # f  2 s   ~     .  A  .    0  #      !  &  !  0      "     +   /   D   /   +   #   .   "0   gnameglpCh0]45OQ4 56gstr  *glen *glp   *gfilenamef web/http.scm           !   *    * C)}hP]45$> $245$%45$$$CCCCCCCgcode  Mghost  Mgtext   Mgdate   Mgfilenamef web/http.scm     #     @      # "   #  # -   3  # 6  2 D  '  M Ch(]$45 $@CCgelt  !gfilenamef web/http.scm                    ! Ch[]6Sgval  gfilenamef web/http.scm      Ch]4L>"G4 L>"G4L>"G4 L>"G4L>"G$4 L>"GL6Cgcode  ghost  gtext   gdate   gfilenamef web/http.scm       +  ?  S  l  m      Chk]O@cgw  gport  gfilenamef web/http.scm      Chv]6ngval  gport  gfilenamef web/http.scm          C>"G4i*>"G42i+ ,hP] 45"4>"%G"$(""""Cgstr  Kg disposition Kgfilenamef web/http.scm                 )   ,   0   3   7   J    K Ch ]$$6CCgx  gfilenamef web/http.scm         -  $      ?   6   Ch ]$$ 6CCgval  gfilenamef web/http.scm                     Chv]6ngval  gport  gfilenamef web/http.scm        C>"G4i->"G4i.>"G4i/>"G4 i0>"G43i1>"G42i2345  h]4-54/5"645$r$h$4 545" 4 5$ " 454 5$ " 45C"y"ugstr  gdash  gslash   gfilenamef web/http.scm           -  $ - $   %   )   -   1   7  9   ? !  @ $  K %  R % 3 V %  W #  \ &  b &  h &  l !  n '  s )  w )  { )  | *  * ! * % *  *  +  ,  , 4 ,   &  C) hs] $r45 $b$X&"%$45$ 45""$&C6CCCCkgval  }gx # Zgx c ugfilenamef web/http.scm .   / /  /   /   /   0   0  /  " 1  # 1 ) 2  - 2 . 2  5 3  9 3  : 4  ? 4 + A 4  E 3  F 5  K 5 + M 5  ^ /  a 6  c 6 i 7  m 7 n 7  u 8   } C h+]4>"G4 >"G&4*>"G"B4>"G4->"G4>"G&*66#gval  gport  gfilenamef web/http.scm 9   :   :  :   ;  . < 1 <  5 <  6 =  N ? S ?  \ ? e @ y A ~ A  A B B  B  C  D  D   C>"G42i67M89 hX] 4=5"L6$34=5$44 5545C""gx  Vgeq Vgfilenamef web/http.scm L   M  M   S %  S   N  " N ' + N ! / N  0 P  3 Q  @ P  A R  J R C L R  M O   V Ch(] 4;5454O5Cgstr  &gparts &gfilenamef web/http.scm I   J  J   K  K   K  L " T  $ L % K   & Ch ]$$6CCgx  gfilenamef web/http.scm Y   Z  Z  Z - Z $  Z   Z ?  Z 6   Ch ]$$ 6CCgval  gfilenamef web/http.scm U   V V  W  W  V   X   X    Ch8]4>"G4=>"G6gpair  4gport  4gfilenamef web/http.scm b  c  c   c  d 0 e  4 e   4 ChH]4>"G$!4>"G6Cgval  Bgport  Bgfilenamef web/http.scm [   \   \  \   ]   ]   ]  _ $ _  + _ 8 a > f @ `   B C>"G4i:5;R42i<=?;h]45$C6wgstr  gfilenamef web/http.scm m   n  n  n   n   p    Ci>"G4i@>"G4 iA!hz]&6Crgk  gv  gfilenamef web/http.scm             C!h ]&6$6Cgk  gv  gfilenamef web/http.scm                      C!h ]&66gk  gv  gport   gfilenamef web/http.scm                C>"G4 iB>"G4 iC>"G4 iD>"G4iE>"G4 iF>"G43iG>"G42iHIhx]!4]54:$" 5$54 5[$"4>"G4 5"$4 5"$45"Cpgstr  grbracket gcolon  # ghost  v gport  gfilenamef web/http.scm             ( #   #   +   ,  ! 6   :   ?   C  ! J   S   f   g   v   ~       6        Ch0] $$45$$C6CCgval  /gt  +gfilenamef web/http.scm                       )  $ +    / Ch]4:5$A4[>"G4>"G4]>"G"4>"G$4:>"G6Cgval  gport  gfilenamef web/http.scm                %  *   1  :  R   W   ^   i   m   n       C>"G4iJ>"G4iK>"G4iL>"G42iMh8] 45$" 45$66gstr  4gt $gfilenamef web/http.scm                !  (   .   4    4 C}h({] $ "$C6sgval  %gt  %gfilenamef web/http.scm         %    % C}h0]"6$&6""gval  .gport  .gfilenamef web/http.scm                  &    . C>"G4iN>"G4iO>"G4iP>"G42iQR5Sh`] 4-5$E $ 4 5C45$ 4 5C4 545CL6 gx  `gdash `gfilenamef web/http.scm                    %   )  0   1   5   6   A   C   M   T  8 V   W   \  `    ` CS h8]45$ 4O44 5,55C 6gstr  7gfilenamef web/http.scm                        +   -  .   3 !  7 !   7 ChP]$C$"$&$ 45"$$6CCCCgelt  Ngx  Lgy   Lgfilenamef web/http.scm &   '  '  ( #  ( 1  (   ) ! $ )  * * ! + * - 6 * % : )  @ + ! F + - G + %  N Ch ]$$ 6CCgval  gfilenamef web/http.scm "   # #  $  $  #   %   %    ChH]$4>"G"4->"G$ 6Cgpair  Hgport  Hgfilenamef web/http.scm 1   2 2  3  3   3 # 4  9 5 = 5  B 6  F 6   H Ch8]4>"G4=>"G6gval  8gport  8gfilenamef web/http.scm ,   -   -  -   .  0 0  6 7  8 /   8 C>"G4 iT>"G4 iU>"G43iV>"G4iW>"G4iX>"G42iYiii>"G4 iZ>"G4i[>"G42i\h0]45$" 44 55$66gstr  /gfilenamef web/http.scm i   j  j   k  k   k # j  ) l  / m   / C}h({] $ "$C6sgval  %gt  %gfilenamef web/http.scm n   o   o  % o   % C}h0]"6$&6""gval  .gport  .gfilenamef web/http.scm p   s   q   q   q   q  & r   . C>"G43i]>"G42i^ h]$C6wgstr  gfilenamef web/http.scm |   }   }  }  ~       C hv]&C6ngval  gfilenamef web/http.scm               C h ]&66gval  gport  gfilenamef web/http.scm                   C>"G4i_>"G`ah y] 4;5$C 6qgc  gt gfilenamef web/http.scm  *   0  ,   0   Cbh@8]4545$ C45$4 5" 60gport  ?gv ?gextension-start  ! ?gfilenamef web/http.scm        !   +   ,   ?    ? gnamegread-chunk-headerg documentationfQRead a chunk header from PORT and return the size in bytes of the upcoming chunk.CcRfcghhL]+"M$" $CM $'4L5N $NC"4M54L545$NCMN $(4L>"G4L>"G""9 ".Dgbv  gidx  gto-read   gto-read   gnum-read   gt   gsize  2 Rgask-for  [ gread  m gleft   gfilenamef web/http.scm             &  +   ,   2  8   ;   @   C   R   S   [  ^   i  8 m   m  p   z   }                %        #  gnamegread!Cijkhd]L$CL6\gfilenamef web/http.scm           gnamegcloseChPO-/03#HHOQ KKO6Ggport  Ng keep-alive?  Ng remaining   Ng finished?   Ngread!  , Ngfilenamef web/http.scm  ?  ! N    N g keep-alive?S gnamegmake-chunked-input-portg documentationf@Returns a new port which translates HTTP chunked transfer encoded data from PORT into a non-encoded format. Returns eof when it has read the final chunk from PORT. This does not necessarily mean that there is no more data on PORT. When the returned port is closed it will also close PORT, unless the KEEP-ALIVE? is true.CERflmh@]"0"(45$C445>"G"""gf  :gq  :gfilenamef web/http.scm                &   2    : gnameg q-for-eachClnoph\]L6Tgelem  gfilenamef web/http.scm    #  Chh]4M5$C4M544 5L>"G4L>"G4LLOM>"GL6glen  hgfilenamef web/http.scm                   +   4   8   ?   H   d   h    h gnamegflushCqrshn]M6fgc  gfilenamef web/http.scm      gnamegput-charCtshY]M6Qgc  gfilenamef web/http.scm    !  Chp]LO6hgs  gfilenamef web/http.scm        gnameg put-stringCuvkhH]4L>"G4L>"G4L>"GL$CL6gfilenamef web/http.scm              '   >   F    F gnamegcloseCw hh-/03#HOQ45KOOO 6gport  bg keep-alive?  bgqueue   bg q-for-each  - bgflush  - bgfilenamef web/http.scm  7   ^   `  > b    b g keep-alive?S gnamegmake-chunked-output-portg documentationfReturns a new port which translates non-encoded data into a HTTP chunked transfer encoded data and writes this to PORT. Data written to this port is buffered until the port is flushed, at which point it is all sent as one chunk. Take care to close the port when done, as it will output the remaining data, and encode the final zero chunk. When the port is closed it will also close PORT, unless KEEP-ALIVE? is true.CFR4xi5yRyhx]6pgport  gfilenamef web/http.scm       gnameghttp-proxy-port?CGR|yh]456gport  gflag  gfilenamef web/http.scm       gnamegset-http-proxy-port?!CHRCgm  ,grtd  gfilenamef web/http.scm    K  O ! Y  ! Y " [ $ ^ &= j (l q * v . 1 4Q 5 5  5 & 5  5 9u : ; > @ D$ D E G^ I( I)  I1   I;  ID  IL   IV  I  J  K8  K9   KA   KC   KG  Le  M?  N  PR  RO ! R * S - Tf 0 U 3 Vg 6 Y8 < ] K ^ ` _ i i q jQ  m  n6  p~  q  s  v  w  x;  y  zk      p  q .  .  /  / p 0 [ ]  k 8 q   4       $  3  8 h D ˧ j a p k t O y   ѻ    I  נ  ߉  #      N          H     !  &  !  /  < = P  \ 6 y          G    ?    O    x  B        R  S : [ : " : " a " a # a # q # q # q # w # w # w # { # { # { #  #  #  #  #  #  $  $  $!  $*  $1  .  .  .  .  .  .  2K  2T  2\  2a  2j  2r  2w  2  2  2  2  2  2  2  2  2  2  2  9h  9q H 9x H ?} H ? j ? j '? j ? j ? l ? l @\ l @e v @m v @r v @{  @  B  B  B  B  B  B  B  B  C  C  C  C  C"  C+  C3  C8  CA  CH  CM  CV  C]  HG  HP  HX  !H]  Hf  Hn  Hs  H|  H  !H  H  H  KO  KX  K`  Ke  Kn  Kv  K{  K  K  K  K  K  R  R ; R ; R ; R @ R @ R @ R D R D R D R P R P R P R U R U R U R Y S Y S Y S" ` S* ` S/ ` S8 d S@ d SE d SN h SU h U h U w U w U w V { V { X6 { X?  XG  XL  Z  a"  i  i  i  j  kB   kD C6