summaryrefslogtreecommitdiff
path: root/localrepo/simple-httpd-20230821.1458.tar
blob: fb62c692ec9d9f2ab056a6b42b4b1da6c81712f4 (plain)
ofshex dumpascii
0000 73 69 6d 70 6c 65 2d 68 74 74 70 64 2d 32 30 32 33 30 38 32 31 2e 31 34 35 38 2f 00 00 00 00 00 simple-httpd-20230821.1458/.....
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0060 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000755.0000000.0000000.0000
0080 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 33 34 32 36 00 20 35 00 00 00 0000000.00000000000.013426..5...
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0100 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0120 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0200 73 69 6d 70 6c 65 2d 68 74 74 70 64 2d 32 30 32 33 30 38 32 31 2e 31 34 35 38 2f 73 69 6d 70 6c simple-httpd-20230821.1458/simpl
0220 65 2d 68 74 74 70 64 2d 70 6b 67 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e-httpd-pkg.el..................
0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0260 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
0280 30 30 30 30 37 31 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 37 31 33 37 00 20 30 00 00 00 0000710.00000000000.017137..0...
02a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0300 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0320 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0400 28 64 65 66 69 6e 65 2d 70 61 63 6b 61 67 65 20 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 22 20 22 (define-package."simple-httpd"."
0420 32 30 32 33 30 38 32 31 2e 31 34 35 38 22 20 22 70 75 72 65 20 65 6c 69 73 70 20 48 54 54 50 20 20230821.1458"."pure.elisp.HTTP.
0440 73 65 72 76 65 72 22 0a 20 20 27 28 28 63 6c 2d 6c 69 62 20 22 30 2e 33 22 29 29 0a 20 20 3a 63 server"...'((cl-lib."0.3"))...:c
0460 6f 6d 6d 69 74 20 22 33 34 37 63 33 30 34 39 34 64 33 62 63 66 63 37 39 64 65 33 35 65 35 34 35 ommit."347c30494d3bcfc79de35e545
0480 33 38 66 39 32 66 34 65 34 61 34 36 65 63 64 22 20 3a 61 75 74 68 6f 72 73 0a 20 20 27 28 28 22 38f92f4e4a46ecd".:authors...'(("
04a0 43 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e 73 22 20 2e 20 22 77 65 6c 6c 6f 6e 73 40 Christopher.Wellons"..."wellons@
04c0 6e 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 22 29 29 0a 20 20 3a 6d 61 69 6e 74 61 69 6e 65 72 nullprogram.com"))...:maintainer
04e0 73 0a 20 20 27 28 28 22 43 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e 73 22 20 2e 20 22 s...'(("Christopher.Wellons"..."
0500 77 65 6c 6c 6f 6e 73 40 6e 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 22 29 29 0a 20 20 3a 6d 61 wellons@nullprogram.com"))...:ma
0520 69 6e 74 61 69 6e 65 72 0a 20 20 27 28 22 43 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e intainer...'("Christopher.Wellon
0540 73 22 20 2e 20 22 77 65 6c 6c 6f 6e 73 40 6e 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 22 29 0a s"..."wellons@nullprogram.com").
0560 20 20 3a 75 72 6c 20 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 73 6b 65 65 74 ..:url."https://github.com/skeet
0580 6f 2f 65 6d 61 63 73 2d 68 74 74 70 2d 73 65 72 76 65 72 22 29 0a 3b 3b 20 4c 6f 63 61 6c 20 56 o/emacs-http-server").;;.Local.V
05a0 61 72 69 61 62 6c 65 73 3a 0a 3b 3b 20 6e 6f 2d 62 79 74 65 2d 63 6f 6d 70 69 6c 65 3a 20 74 0a ariables:.;;.no-byte-compile:.t.
05c0 3b 3b 20 45 6e 64 3a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;;.End:.........................
05e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0600 73 69 6d 70 6c 65 2d 68 74 74 70 64 2d 32 30 32 33 30 38 32 31 2e 31 34 35 38 2f 73 69 6d 70 6c simple-httpd-20230821.1458/simpl
0620 65 2d 68 74 74 70 64 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e-httpd.el......................
0640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0660 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
0680 30 31 30 30 37 34 33 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 36 33 36 37 00 20 30 00 00 00 0100743.00000000000.016367..0...
06a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
06c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
06e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0700 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0720 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0800 3b 3b 3b 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 2e 65 6c 20 2d 2d 2d 20 70 75 72 65 20 65 6c 69 ;;;.simple-httpd.el.---.pure.eli
0820 73 70 20 48 54 54 50 20 73 65 72 76 65 72 0a 0a 3b 3b 20 54 68 69 73 20 69 73 20 66 72 65 65 20 sp.HTTP.server..;;.This.is.free.
0840 61 6e 64 20 75 6e 65 6e 63 75 6d 62 65 72 65 64 20 73 6f 66 74 77 61 72 65 20 72 65 6c 65 61 73 and.unencumbered.software.releas
0860 65 64 20 69 6e 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2e 0a 0a 3b 3b 20 41 ed.into.the.public.domain...;;.A
0880 75 74 68 6f 72 3a 20 43 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e 73 20 3c 77 65 6c 6c uthor:.Christopher.Wellons.<well
08a0 6f 6e 73 40 6e 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 3e 0a 3b 3b 20 55 52 4c 3a 20 68 74 74 ons@nullprogram.com>.;;.URL:.htt
08c0 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 73 6b 65 65 74 6f 2f 65 6d 61 63 73 2d 68 74 74 ps://github.com/skeeto/emacs-htt
08e0 70 2d 73 65 72 76 65 72 0a 3b 3b 20 56 65 72 73 69 6f 6e 3a 20 31 2e 35 2e 31 0a 3b 3b 20 50 61 p-server.;;.Version:.1.5.1.;;.Pa
0900 63 6b 61 67 65 2d 52 65 71 75 69 72 65 73 3a 20 28 28 63 6c 2d 6c 69 62 20 22 30 2e 33 22 29 29 ckage-Requires:.((cl-lib."0.3"))
0920 0a 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 0a 3b 3b 20 55 73 65 20 60 68 74 74 70 64 ..;;;.Commentary:..;;.Use.`httpd
0940 2d 73 74 61 72 74 27 20 74 6f 20 73 74 61 72 74 20 74 68 65 20 77 65 62 20 73 65 72 76 65 72 2e -start'.to.start.the.web.server.
0960 20 46 69 6c 65 73 20 61 72 65 20 73 65 72 76 65 64 20 66 72 6f 6d 0a 3b 3b 20 60 68 74 74 70 64 .Files.are.served.from.;;.`httpd
0980 2d 72 6f 6f 74 27 20 6f 6e 20 70 6f 72 74 20 60 68 74 74 70 64 2d 70 6f 72 74 27 20 75 73 69 6e -root'.on.port.`httpd-port'.usin
09a0 67 20 60 68 74 74 70 64 2d 69 70 2d 66 61 6d 69 6c 79 27 20 61 74 20 68 6f 73 74 0a 3b 3b 20 60 g.`httpd-ip-family'.at.host.;;.`
09c0 68 74 74 70 64 2d 68 6f 73 74 27 2e 20 57 68 69 6c 65 20 74 68 65 20 72 6f 6f 74 20 63 61 6e 20 httpd-host'..While.the.root.can.
09e0 62 65 20 63 68 61 6e 67 65 64 20 61 74 20 61 6e 79 20 74 69 6d 65 2c 20 74 68 65 20 73 65 72 76 be.changed.at.any.time,.the.serv
0a00 65 72 0a 3b 3b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 61 72 74 65 64 20 69 6e 20 6f er.;;.needs.to.be.restarted.in.o
0a20 72 64 65 72 20 66 6f 72 20 61 20 70 6f 72 74 20 63 68 61 6e 67 65 20 74 6f 20 74 61 6b 65 20 65 rder.for.a.port.change.to.take.e
0a40 66 66 65 63 74 2e 0a 0a 3b 3b 20 45 76 65 72 79 74 68 69 6e 67 20 69 73 20 70 65 72 66 6f 72 6d ffect...;;.Everything.is.perform
0a60 65 64 20 62 79 20 73 65 72 76 6c 65 74 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 65 72 76 69 6e ed.by.servlets,.including.servin
0a80 67 0a 3b 3b 20 66 69 6c 65 73 2e 20 53 65 72 76 6c 65 74 73 20 61 72 65 20 65 6e 61 62 6c 65 64 g.;;.files..Servlets.are.enabled
0aa0 20 62 79 20 73 65 74 74 69 6e 67 20 60 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 27 20 74 6f 20 .by.setting.`httpd-servlets'.to.
0ac0 74 72 75 65 0a 3b 3b 20 28 64 65 66 61 75 6c 74 29 2e 20 53 65 72 76 6c 65 74 73 20 61 72 65 20 true.;;.(default)..Servlets.are.
0ae0 66 6f 75 72 2d 70 61 72 61 6d 65 74 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 62 65 four-parameter.functions.that.be
0b00 67 69 6e 20 77 69 74 68 0a 3b 3b 20 22 68 74 74 70 64 2f 22 20 77 68 65 72 65 20 74 68 65 20 74 gin.with.;;."httpd/".where.the.t
0b20 72 61 69 6c 69 6e 67 20 63 6f 6d 70 6f 6e 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 railing.component.specifies.the.
0b40 69 6e 69 74 69 61 6c 20 70 61 74 68 20 6f 6e 0a 3b 3b 20 74 68 65 20 73 65 72 76 65 72 2e 20 46 initial.path.on.;;.the.server..F
0b60 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 60 68 74 74 70 64 2f or.example,.the.function.`httpd/
0b80 68 65 6c 6c 6f 2d 77 6f 72 6c 64 27 20 77 69 6c 6c 20 62 65 0a 3b 3b 20 63 61 6c 6c 65 64 20 66 hello-world'.will.be.;;.called.f
0ba0 6f 72 20 74 68 65 20 72 65 71 75 65 73 74 20 22 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 22 20 61 6e or.the.request."/hello-world".an
0bc0 64 20 22 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 2f 66 6f 6f 22 2e 0a 0a 3b 3b 20 54 68 65 20 64 65 d."/hello-world/foo"...;;.The.de
0be0 66 61 75 6c 74 20 73 65 72 76 6c 65 74 20 60 68 74 74 70 64 2f 27 20 69 73 20 74 68 65 20 6f 6e fault.servlet.`httpd/'.is.the.on
0c00 65 20 74 68 61 74 20 73 65 72 76 65 73 20 66 69 6c 65 73 20 66 72 6f 6d 0a 3b 3b 20 60 68 74 74 e.that.serves.files.from.;;.`htt
0c20 70 64 2d 72 6f 6f 74 27 20 61 6e 64 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 74 pd-root'.and.can.be.turned.off.t
0c40 68 72 6f 75 67 68 20 72 65 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 20 73 65 74 74 69 6e 67 0a 3b hrough.redefinition.or.setting.;
0c60 3b 20 60 68 74 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 27 20 74 6f 20 6e 69 6c 2e 20 49 74 ;.`httpd-serve-files'.to.nil..It
0c80 20 69 73 20 75 73 65 64 20 65 76 65 6e 20 77 68 65 6e 20 60 68 74 74 70 64 2d 73 65 72 76 6c 65 .is.used.even.when.`httpd-servle
0ca0 74 73 27 0a 3b 3b 20 69 73 20 6e 69 6c 2e 0a 0a 3b 3b 20 54 68 65 20 66 6f 75 72 20 70 61 72 61 ts'.;;.is.nil...;;.The.four.para
0cc0 6d 65 74 65 72 73 20 66 6f 72 20 61 20 73 65 72 76 6c 65 74 20 61 72 65 20 70 72 6f 63 65 73 73 meters.for.a.servlet.are.process
0ce0 2c 20 55 52 49 20 70 61 74 68 2c 20 47 45 54 2f 50 4f 53 54 0a 3b 3b 20 61 72 67 75 6d 65 6e 74 ,.URI.path,.GET/POST.;;.argument
0d00 73 20 28 61 6c 69 73 74 29 2c 20 61 6e 64 20 74 68 65 20 66 75 6c 6c 20 72 65 71 75 65 73 74 20 s.(alist),.and.the.full.request.
0d20 6f 62 6a 65 63 74 20 28 68 65 61 64 65 72 0a 3b 3b 20 61 6c 69 73 74 29 2e 20 54 68 65 73 65 20 object.(header.;;.alist)..These.
0d40 61 72 65 20 6f 72 64 65 72 65 64 20 62 79 20 67 65 6e 65 72 61 6c 20 69 6d 70 6f 72 74 61 6e 63 are.ordered.by.general.importanc
0d60 65 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20 63 61 6e 20 62 65 0a 3b 3b 20 69 67 6e 6f 72 65 64 e.so.that.some.can.be.;;.ignored
0d80 2e 20 54 77 6f 20 6d 61 63 72 6f 73 20 61 72 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65 6c ..Two.macros.are.provided.to.hel
0da0 70 20 77 69 74 68 20 77 72 69 74 69 6e 67 20 73 65 72 76 6c 65 74 73 2e 0a 0a 3b 3b 20 20 2a 20 p.with.writing.servlets...;;..*.
0dc0 60 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 27 20 2d 2d 20 43 72 65 61 74 65 73 20 61 `with-httpd-buffer'.--.Creates.a
0de0 20 74 65 6d 70 6f 72 61 72 79 20 62 75 66 66 65 72 20 74 68 61 74 20 69 73 0a 3b 3b 20 20 20 20 .temporary.buffer.that.is.;;....
0e00 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 72 76 65 64 20 74 6f 20 74 68 65 20 63 6c 69 65 automatically.served.to.the.clie
0e20 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 6f 64 79 2e 0a 3b 3b 20 20 20 nt.at.the.end.of.the.body..;;...
0e40 20 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 27 .Additionally,.`standard-output'
0e60 20 69 73 20 73 65 74 20 74 6f 20 74 68 69 73 20 6f 75 74 70 75 74 0a 3b 3b 20 20 20 20 62 75 66 .is.set.to.this.output.;;....buf
0e80 66 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 69 73 20 73 65 72 76 6c 65 74 20 73 fer..For.example,.this.servlet.s
0ea0 61 79 73 20 68 65 6c 6c 6f 2c 0a 0a 3b 3b 20 20 20 20 20 28 64 65 66 75 6e 20 68 74 74 70 64 2f ays.hello,..;;.....(defun.httpd/
0ec0 68 65 6c 6c 6f 2d 77 6f 72 6c 64 20 28 70 72 6f 63 20 70 61 74 68 20 26 72 65 73 74 20 61 72 67 hello-world.(proc.path.&rest.arg
0ee0 73 29 0a 3b 3b 20 20 20 20 20 20 20 28 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 20 70 s).;;.......(with-httpd-buffer.p
0f00 72 6f 63 20 22 74 65 78 74 2f 70 6c 61 69 6e 22 0a 3b 3b 20 20 20 20 20 20 20 20 20 28 69 6e 73 roc."text/plain".;;.........(ins
0f20 65 72 74 20 22 68 65 6c 6c 6f 2c 20 22 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 6e 6f 6e 64 69 72 65 ert."hello,.".(file-name-nondire
0f40 63 74 6f 72 79 20 70 61 74 68 29 29 29 29 0a 0a 3b 3b 20 54 68 69 73 20 73 65 72 76 6c 65 74 20 ctory.path))))..;;.This.servlet.
0f60 62 65 20 76 69 65 77 65 64 20 61 74 20 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 38 30 be.viewed.at.http://localhost:80
0f80 38 30 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 2f 45 6d 61 63 73 0a 0a 3b 3b 20 2a 20 60 64 65 66 73 80/hello-world/Emacs..;;.*.`defs
0fa0 65 72 76 6c 65 74 27 20 2d 2d 20 53 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 61 62 6f 76 65 20 ervlet'.--.Similar.to.the.above.
0fc0 6d 61 63 72 6f 20 62 75 74 20 74 6f 74 61 6c 6c 79 20 68 69 64 65 73 20 74 68 65 0a 3b 3b 20 20 macro.but.totally.hides.the.;;..
0fe0 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 74 68 65 20 73 65 72 76 6c 65 74 .process.object.from.the.servlet
1000 20 69 74 73 65 6c 66 2e 20 54 68 65 20 61 62 6f 76 65 20 73 65 72 76 6c 65 74 20 63 61 6e 20 62 .itself..The.above.servlet.can.b
1020 65 0a 3b 3b 20 20 20 72 65 2d 77 72 69 74 74 65 6e 20 69 64 65 6e 74 69 63 61 6c 6c 79 20 6c 69 e.;;...re-written.identically.li
1040 6b 65 20 73 6f 2c 0a 0a 3b 3b 20 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 20 68 65 6c 6c 6f ke.so,..;;.....(defservlet.hello
1060 2d 77 6f 72 6c 64 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 70 61 74 68 29 0a 3b 3b 20 20 20 20 20 -world.text/plain.(path).;;.....
1080 20 20 28 69 6e 73 65 72 74 20 22 68 65 6c 6c 6f 2c 20 22 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 6e ..(insert."hello,.".(file-name-n
10a0 6f 6e 64 69 72 65 63 74 6f 72 79 20 70 61 74 68 29 29 29 0a 0a 3b 3b 20 4e 6f 74 65 20 74 68 61 ondirectory.path)))..;;.Note.tha
10c0 74 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 74 t.`defservlet'.automatically.set
10e0 73 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 2e 20 53 65 65 0a 3b 3b 20 62 s.`httpd-current-proc'..See.;;.b
1100 65 6c 6f 77 2e 0a 0a 3b 3b 20 54 68 65 20 22 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 elow...;;.The."function.paramete
1120 72 73 22 20 70 61 72 74 20 63 61 6e 20 62 65 20 6c 65 66 74 20 65 6d 70 74 79 20 6f 72 20 63 6f rs".part.can.be.left.empty.or.co
1140 6e 74 61 69 6e 20 75 70 20 74 6f 0a 3b 3b 20 74 68 72 65 65 20 70 61 72 61 6d 65 74 65 72 73 20 ntain.up.to.;;.three.parameters.
1160 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 66 69 6e 61 6c 20 74 68 72 65 65 corresponding.to.the.final.three
1180 20 73 65 72 76 6c 65 74 0a 3b 3b 20 70 61 72 61 6d 65 74 65 72 73 2e 20 46 6f 72 20 65 78 61 6d .servlet.;;.parameters..For.exam
11a0 70 6c 65 2c 20 61 20 73 65 72 76 6c 65 74 20 74 68 61 74 20 73 68 6f 77 73 20 2a 73 63 72 61 74 ple,.a.servlet.that.shows.*scrat
11c0 63 68 2a 20 61 6e 64 20 64 6f 65 73 6e 27 74 0a 3b 3b 20 6e 65 65 64 20 70 61 72 61 6d 65 74 65 ch*.and.doesn't.;;.need.paramete
11e0 72 73 2c 0a 0a 3b 3b 20 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 20 73 63 72 61 74 63 68 20 rs,..;;.....(defservlet.scratch.
1200 74 65 78 74 2f 70 6c 61 69 6e 20 28 29 0a 3b 3b 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 2d 62 text/plain.().;;.......(insert-b
1220 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 uffer-substring.(get-buffer-crea
1240 74 65 20 22 2a 73 63 72 61 74 63 68 2a 22 29 29 29 0a 0a 3b 3b 20 41 20 68 69 67 68 65 72 20 6c te."*scratch*")))..;;.A.higher.l
1260 65 76 65 6c 20 6d 61 63 72 6f 20 60 64 65 66 73 65 72 76 6c 65 74 2a 27 20 77 72 61 70 73 20 74 evel.macro.`defservlet*'.wraps.t
1280 68 69 73 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 0a 3b 3b 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 his.lower-level.;;.`defservlet'.
12a0 6d 61 63 72 6f 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 69 6e 64 69 6e 67 20 76 61 72 macro,.automatically.binding.var
12c0 69 61 62 6c 65 73 20 74 6f 20 63 6f 6d 70 6f 6e 65 6e 74 73 0a 3b 3b 20 6f 66 20 74 68 65 20 72 iables.to.components.;;.of.the.r
12e0 65 71 75 65 73 74 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 69 73 20 62 69 6e 64 73 20 equest..For.example,.this.binds.
1300 70 61 72 74 73 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 20 70 61 74 68 0a 3b 3b 20 61 6e 64 parts.of.the.request.path.;;.and
1320 20 6f 6e 65 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e 20 52 65 71 75 65 73 74 20 63 6f .one.query.parameter..Request.co
1340 6d 70 6f 6e 65 6e 74 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 0a 3b 3b 20 mponents.not.provided.by.the.;;.
1360 63 6c 69 65 6e 74 20 61 72 65 20 62 6f 75 6e 64 20 74 6f 20 6e 69 6c 2e 0a 0a 3b 3b 20 20 20 20 client.are.bound.to.nil...;;....
1380 20 28 64 65 66 73 65 72 76 6c 65 74 2a 20 70 61 63 6b 61 67 65 73 2f 3a 70 61 63 6b 61 67 65 2f .(defservlet*.packages/:package/
13a0 3a 76 65 72 73 69 6f 6e 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 76 65 72 62 6f 73 65 29 0a 3b 3b :version.text/plain.(verbose).;;
13c0 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 25 73 5c 6e 25 73 5c 6e .......(insert.(format."%s\n%s\n
13e0 22 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a 3b 3b 20 20 20 20 20 20 20 28 70 72 ".package.version)).;;.......(pr
1400 69 6e 63 20 28 67 65 74 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 70 61 63 6b 61 67 65 20 76 65 72 inc.(get-description.package.ver
1420 73 69 6f 6e 29 29 0a 3b 3b 20 20 20 20 20 20 20 28 77 68 65 6e 20 76 65 72 62 6f 73 65 0a 3b 3b sion)).;;.......(when.verbose.;;
1440 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 25 53 22 20 28 67 .........(insert.(format."%S".(g
1460 65 74 2d 64 65 70 65 6e 64 65 6e 63 69 65 73 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 et-dependencies.package.version)
1480 29 29 29 29 0a 0a 3b 3b 20 49 74 20 77 6f 75 6c 64 20 62 65 20 61 63 63 65 73 73 65 64 20 6c 69 ))))..;;.It.would.be.accessed.li
14a0 6b 65 20 73 6f 2c 0a 0a 3b 3b 20 20 20 20 20 68 74 74 70 3a 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f ke.so,..;;.....http://example.co
14c0 6d 2f 70 61 63 6b 61 67 65 73 2f 66 6f 6f 62 61 72 2f 31 2e 30 3f 76 65 72 62 6f 73 65 3d 31 0a m/packages/foobar/1.0?verbose=1.
14e0 0a 3b 3b 20 53 6f 6d 65 20 73 75 70 70 6f 72 74 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 .;;.Some.support.functions.are.a
1500 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 65 72 76 6c 65 74 73 20 66 6f 72 20 6d 6f 72 65 0a 3b vailable.for.servlets.for.more.;
1520 3b 20 63 75 73 74 6f 6d 69 7a 65 64 20 72 65 73 70 6f 6e 73 65 73 2e 0a 0a 3b 3b 20 20 20 2a 20 ;.customized.responses...;;...*.
1540 60 68 74 74 70 64 2d 73 65 6e 64 2d 66 69 6c 65 27 20 20 20 2d 2d 20 73 65 72 76 65 20 61 20 66 `httpd-send-file'...--.serve.a.f
1560 69 6c 65 20 77 69 74 68 20 70 72 6f 70 65 72 20 63 61 63 68 69 6e 67 0a 3b 3b 20 20 20 2a 20 60 ile.with.proper.caching.;;...*.`
1580 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 27 20 20 20 20 2d 2d 20 72 65 64 69 72 65 63 74 20 74 httpd-redirect'....--.redirect.t
15a0 68 65 20 62 72 6f 77 73 65 72 20 74 6f 20 61 6e 6f 74 68 65 72 20 75 72 6c 0a 3b 3b 20 20 20 2a he.browser.to.another.url.;;...*
15c0 20 60 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 27 20 2d 2d 20 73 65 6e 64 20 63 75 73 .`httpd-send-header'.--.send.cus
15e0 74 6f 6d 20 68 65 61 64 65 72 73 0a 3b 3b 20 20 20 2a 20 60 68 74 74 70 64 2d 65 72 72 6f 72 27 tom.headers.;;...*.`httpd-error'
1600 20 20 20 20 20 20 20 2d 2d 20 72 65 70 6f 72 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 .......--.report.an.error.to.the
1620 20 63 6c 69 65 6e 74 0a 3b 3b 20 20 20 2a 20 60 68 74 74 70 64 2d 6c 6f 67 27 20 20 20 20 20 20 .client.;;...*.`httpd-log'......
1640 20 20 20 2d 2d 20 6c 6f 67 20 61 6e 20 6f 62 6a 65 63 74 20 74 6f 20 2a 68 74 74 70 64 2a 0a 0a ...--.log.an.object.to.*httpd*..
1660 3b 3b 20 53 6f 6d 65 20 6f 66 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 71 75 69 ;;.Some.of.these.functions.requi
1680 72 65 20 61 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 6e 27 74 re.a.process.object,.which.isn't
16a0 0a 3b 3b 20 70 61 73 73 65 64 20 74 6f 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 73 65 72 76 6c .;;.passed.to.`defservlet'.servl
16c0 65 74 73 2e 20 55 73 65 20 74 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 70 72 6f 63 65 ets..Use.t.in.place.of.the.proce
16e0 73 73 0a 3b 3b 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 73 65 20 60 68 74 74 70 64 2d 63 75 72 ss.;;.argument.to.use.`httpd-cur
1700 72 65 6e 74 2d 70 72 6f 63 27 20 28 6c 69 6b 65 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 rent-proc'.(like.`standard-outpu
1720 74 27 29 2e 0a 0a 3b 3b 20 49 66 20 79 6f 75 20 6a 75 73 74 20 6e 65 65 64 20 74 6f 20 73 65 72 t')...;;.If.you.just.need.to.ser
1740 76 65 20 73 74 61 74 69 63 20 66 72 6f 6d 20 73 6f 6d 65 20 6c 6f 63 61 74 69 6f 6e 20 75 6e 64 ve.static.from.some.location.und
1760 65 72 20 73 6f 6d 65 0a 3b 3b 20 72 6f 75 74 65 20 6f 6e 20 74 68 65 20 73 65 72 76 65 72 2c 20 er.some.;;.route.on.the.server,.
1780 75 73 65 20 60 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 27 2e 20 49 74 use.`httpd-def-file-servlet'..It
17a0 20 65 78 70 61 6e 64 73 20 69 6e 74 6f 0a 3b 3b 20 61 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 .expands.into.;;.a.`defservlet'.
17c0 74 68 61 74 20 73 65 72 76 65 73 20 66 69 6c 65 73 2e 0a 0a 3b 3b 3b 20 48 69 73 74 6f 72 79 3a that.serves.files...;;;.History:
17e0 0a 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 35 2e 31 3a 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73 ..;;.Version.1.5.1:.improvements
1800 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 74 74 70 64 2d 72 75 6e 6e 69 6e 67 2d 70 27 0a 3b 3b .;;...*.Add.`httpd-running-p'.;;
1820 20 20 20 2a 20 50 72 6f 70 65 72 6c 79 20 68 61 6e 64 6c 65 20 22 43 6f 6e 6e 65 63 74 69 6f 6e ...*.Properly.handle."Connection
1840 3a 20 63 6c 6f 73 65 22 20 61 6e 64 20 48 54 54 50 2f 31 2e 30 0a 3b 3b 20 56 65 72 73 69 6f 6e :.close".and.HTTP/1.0.;;.Version
1860 20 31 2e 35 2e 30 3a 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73 0a 3b 3b 20 20 20 2a 20 44 72 61 73 .1.5.0:.improvements.;;...*.Dras
1880 74 69 63 61 6c 6c 79 20 69 6d 70 72 6f 76 65 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 66 6f 72 tically.improved.performance.for
18a0 20 6c 61 72 67 65 20 72 65 71 75 65 73 74 73 0a 3b 3b 20 20 20 2a 20 4d 6f 72 65 20 48 54 54 50 .large.requests.;;...*.More.HTTP
18c0 20 73 74 61 74 75 73 20 63 6f 64 65 73 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 36 3a 20 .status.codes.;;.Version.1.4.6:.
18e0 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 41 64 64 65 64 20 68 74 74 70 64 2d 73 65 72 76 65 2d 64 fixes.;;...*.Added.httpd-serve-d
1900 69 72 65 63 74 6f 72 79 0a 3b 3b 20 20 20 2a 20 46 69 78 20 73 6f 6d 65 20 65 6e 63 6f 64 69 6e irectory.;;...*.Fix.some.encodin
1920 67 20 69 73 73 75 65 73 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 35 3a 20 66 69 78 65 73 g.issues.;;.Version.1.4.5:.fixes
1940 0a 3b 3b 20 20 20 2a 20 55 70 64 61 74 65 20 74 6f 20 63 6c 2d 6c 69 62 20 66 72 6f 6d 20 63 6c .;;...*.Update.to.cl-lib.from.cl
1960 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 34 3a 20 66 65 61 74 75 72 65 73 0a 3b 3b 20 20 .;;.Version.1.4.4:.features.;;..
1980 20 2a 20 43 6f 6d 6d 6f 6e 20 4c 69 73 70 20 26 6b 65 79 2d 6c 69 6b 65 20 64 65 66 73 65 72 76 .*.Common.Lisp.&key-like.defserv
19a0 6c 65 74 2a 20 61 72 67 75 6d 65 6e 74 20 73 75 70 70 6f 72 74 0a 3b 3b 20 20 20 2a 20 46 69 78 let*.argument.support.;;...*.Fix
19c0 20 75 70 20 73 6f 6d 65 20 64 65 66 73 65 72 76 6c 65 74 2a 20 75 73 61 67 65 20 77 61 72 6e 69 .up.some.defservlet*.usage.warni
19e0 6e 67 73 2e 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 33 3a 20 66 65 61 74 75 72 65 73 0a ngs..;;.Version.1.4.3:.features.
1a00 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 ;;...*.Add.`httpd-discard-buffer
1a20 27 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 '.;;...*.Add.`httpd-def-file-ser
1a40 76 6c 65 74 27 0a 3b 3b 20 20 20 2a 20 42 65 20 6d 6f 72 65 20 63 61 72 65 66 75 6c 20 61 62 6f vlet'.;;...*.Be.more.careful.abo
1a60 75 74 20 6e 6f 74 20 73 65 6e 64 69 6e 67 20 65 78 74 72 61 20 68 65 61 64 65 72 73 0a 3b 3b 20 ut.not.sending.extra.headers.;;.
1a80 56 65 72 73 69 6f 6e 20 31 2e 34 2e 32 3a 20 66 65 61 74 75 72 65 73 2c 20 66 69 78 65 73 0a 3b Version.1.4.2:.features,.fixes.;
1aa0 3b 20 20 20 2a 20 60 64 65 66 73 65 72 76 6c 65 74 2a 27 20 6d 61 63 72 6f 0a 3b 3b 20 56 65 72 ;...*.`defservlet*'.macro.;;.Ver
1ac0 73 69 6f 6e 20 31 2e 34 2e 31 3a 20 73 6d 61 6c 6c 20 62 75 67 20 66 69 78 65 73 2c 20 6f 6e 65 sion.1.4.1:.small.bug.fixes,.one
1ae0 20 66 65 61 74 75 72 65 0a 3b 3b 20 20 20 2a 20 41 6c 6c 20 6d 69 6d 65 2d 74 79 70 65 20 70 61 .feature.;;...*.All.mime-type.pa
1b00 72 61 6d 65 74 65 72 73 20 6e 6f 77 20 61 63 63 65 70 74 20 73 74 72 69 6e 67 20 64 65 73 69 67 rameters.now.accept.string.desig
1b20 6e 61 74 6f 72 73 0a 3b 3b 20 20 20 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 75 70 64 61 nators.;;...*.Documentation.upda
1b40 74 65 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 30 3a 20 66 65 61 74 75 72 65 73 2c 20 41 te.;;.Version.1.4.0:.features,.A
1b60 50 49 20 63 68 61 6e 67 65 2c 20 61 6e 64 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 52 65 6d 6f PI.change,.and.fixes.;;...*.Remo
1b80 76 65 64 20 68 74 74 70 64 2d 73 65 6e 64 2d 62 75 66 66 65 72 3b 20 68 74 74 70 64 2d 73 65 6e ved.httpd-send-buffer;.httpd-sen
1ba0 64 2d 68 65 61 64 65 72 20 6e 6f 77 20 64 6f 65 73 20 74 68 69 73 20 69 6d 70 6c 69 63 69 74 6c d-header.now.does.this.implicitl
1bc0 79 0a 3b 3b 20 20 20 2a 20 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 6e 6f 77 20 61 y.;;...*.httpd-send-header.now.a
1be0 63 63 65 70 74 73 20 6b 65 79 77 6f 72 64 73 20 69 6e 73 74 65 61 64 0a 3b 3b 20 20 20 2a 20 46 ccepts.keywords.instead.;;...*.F
1c00 69 78 20 68 74 74 70 64 2d 63 6c 65 61 6e 2d 70 61 74 68 20 69 6e 20 57 69 6e 64 6f 77 73 0a 3b ix.httpd-clean-path.in.Windows.;
1c20 3b 20 20 20 2a 20 46 69 78 20 61 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 20 62 75 67 0a 3b ;...*.Fix.a.content-length.bug.;
1c40 3b 20 20 20 2a 20 64 65 66 73 65 72 76 6c 65 74 20 66 6f 6e 74 69 66 69 63 61 74 69 6f 6e 0a 3b ;...*.defservlet.fontification.;
1c60 3b 20 56 65 72 73 69 6f 6e 20 31 2e 33 2e 31 3a 20 66 65 61 74 75 72 65 73 20 61 6e 64 20 66 69 ;.Version.1.3.1:.features.and.fi
1c80 78 65 73 0a 3b 3b 20 20 20 2a 20 53 65 74 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 27 xes.;;...*.Set.`standard-output'
1ca0 20 69 6e 20 60 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 27 0a 3b 3b 20 56 65 72 73 69 .in.`with-httpd-buffer'.;;.Versi
1cc0 6f 6e 20 31 2e 33 2e 30 3a 20 73 65 63 75 72 69 74 79 20 66 69 78 0a 3b 3b 20 20 20 2a 20 46 69 on.1.3.0:.security.fix.;;...*.Fi
1ce0 78 20 70 61 74 68 20 65 78 70 61 6e 73 69 6f 6e 20 73 65 63 75 72 69 74 79 20 69 73 73 75 65 0a x.path.expansion.security.issue.
1d00 3b 3b 20 20 20 2a 20 46 69 78 20 63 6f 64 69 6e 67 20 73 79 73 74 65 6d 20 28 64 6f 6e 27 74 20 ;;...*.Fix.coding.system.(don't.
1d20 64 65 66 61 75 6c 74 29 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 32 2e 34 3a 20 66 69 78 65 73 default).;;.Version.1.2.4:.fixes
1d40 0a 3b 3b 20 20 20 2a 20 48 61 6e 64 6c 65 20 6c 61 72 67 65 20 50 4f 53 54 73 0a 3b 3b 20 20 20 .;;...*.Handle.large.POSTs.;;...
1d60 2a 20 46 69 78 20 64 61 74 65 20 73 74 72 69 6e 67 73 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a 0a 28 *.Fix.date.strings..;;;.Code:..(
1d80 72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 62 29 0a 28 72 65 71 75 69 72 65 20 27 70 70 29 0a 28 require.'cl-lib).(require.'pp).(
1da0 72 65 71 75 69 72 65 20 27 75 72 6c 2d 75 74 69 6c 29 0a 0a 28 64 65 66 67 72 6f 75 70 20 73 69 require.'url-util)..(defgroup.si
1dc0 6d 70 6c 65 2d 68 74 74 70 64 20 6e 69 6c 0a 20 20 22 41 20 73 69 6d 70 6c 65 20 77 65 62 20 73 mple-httpd.nil..."A.simple.web.s
1de0 65 72 76 65 72 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 63 6f 6d 6d 29 0a 0a 28 64 65 66 63 75 73 erver."...:group.'comm)..(defcus
1e00 74 6f 6d 20 68 74 74 70 64 2d 69 70 2d 66 61 6d 69 6c 79 20 27 69 70 76 34 0a 20 20 22 57 65 62 tom.httpd-ip-family.'ipv4..."Web
1e20 20 73 65 72 76 65 72 20 49 50 20 66 61 6d 69 6c 79 20 75 73 65 64 20 62 79 20 60 6d 61 6b 65 2d .server.IP.family.used.by.`make-
1e40 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d network-process'."...:group.'sim
1e60 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 73 79 6d 62 6f 6c 29 0a 0a 28 64 65 66 ple-httpd...:type.'symbol)..(def
1e80 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 68 6f 73 74 20 6e 69 6c 0a 20 20 22 57 65 62 20 73 65 72 custom.httpd-host.nil..."Web.ser
1ea0 76 65 72 20 68 6f 73 74 20 6e 61 6d 65 20 75 73 65 64 20 62 79 20 60 6d 61 6b 65 2d 6e 65 74 77 ver.host.name.used.by.`make-netw
1ec0 6f 72 6b 2d 70 72 6f 63 65 73 73 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d ork-process'."...:group.'simple-
1ee0 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 28 63 68 6f 69 63 65 20 28 63 6f 6e 73 74 20 6e 69 httpd...:type.'(choice.(const.ni
1f00 6c 29 20 28 63 6f 6e 73 74 20 6c 6f 63 61 6c 29 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 63 l).(const.local).string))..(defc
1f20 75 73 74 6f 6d 20 68 74 74 70 64 2d 70 6f 72 74 20 38 30 38 30 0a 20 20 22 57 65 62 20 73 65 72 ustom.httpd-port.8080..."Web.ser
1f40 76 65 72 20 70 6f 72 74 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 ver.port."...:group.'simple-http
1f60 64 0a 20 20 3a 74 79 70 65 20 27 69 6e 74 65 67 65 72 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 d...:type.'integer)..(defcustom.
1f80 68 74 74 70 64 2d 72 6f 6f 74 20 22 7e 2f 70 75 62 6c 69 63 5f 68 74 6d 6c 22 0a 20 20 22 57 65 httpd-root."~/public_html"..."We
1fa0 62 20 73 65 72 76 65 72 20 66 69 6c 65 20 72 6f 6f 74 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 b.server.file.root."...:group.'s
1fc0 69 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 64 69 72 65 63 74 6f 72 79 29 0a imple-httpd...:type.'directory).
1fe0 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 74 0a .(defcustom.httpd-serve-files.t.
2000 20 20 22 45 6e 61 62 6c 65 20 73 65 72 76 69 6e 67 20 66 69 6c 65 73 20 66 72 6f 6d 20 60 68 74 .."Enable.serving.files.from.`ht
2020 74 70 64 2d 72 6f 6f 74 27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 tpd-root'."...:group.'simple-htt
2040 70 64 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d pd...:type.'boolean)..(defcustom
2060 20 68 74 74 70 64 2d 6c 69 73 74 69 6e 67 73 20 74 0a 20 20 22 49 66 20 74 72 75 65 2c 20 73 65 .httpd-listings.t..."If.true,.se
2080 72 76 65 20 64 69 72 65 63 74 6f 72 79 20 6c 69 73 74 69 6e 67 73 2e 22 0a 20 20 3a 67 72 6f 75 rve.directory.listings."...:grou
20a0 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e p.'simple-httpd...:type.'boolean
20c0 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 20 74 0a 20 )..(defcustom.httpd-servlets.t..
20e0 20 22 45 6e 61 62 6c 65 20 73 65 72 76 6c 65 74 73 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 ."Enable.servlets."...:group.'si
2100 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e 29 0a 0a 28 64 mple-httpd...:type.'boolean)..(d
2120 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 68 6f 77 2d 62 61 63 6b 74 72 61 63 65 2d 77 68 efcustom.httpd-show-backtrace-wh
2140 65 6e 2d 65 72 72 6f 72 20 6e 69 6c 0a 20 20 22 49 66 20 74 72 75 65 2c 20 73 68 6f 77 20 62 61 en-error.nil..."If.true,.show.ba
2160 63 6b 74 72 61 63 65 20 6f 6e 20 65 72 72 6f 72 20 70 61 67 65 2e 22 0a 20 20 3a 67 72 6f 75 70 cktrace.on.error.page."...:group
2180 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65 61 6e 29 .'simple-httpd...:type.'boolean)
21a0 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 74 61 72 74 2d 68 6f 6f 6b 20 6e 69 ..(defcustom.httpd-start-hook.ni
21c0 6c 0a 20 20 22 48 6f 6f 6b 20 74 6f 20 72 75 6e 20 77 68 65 6e 20 74 68 65 20 73 65 72 76 65 72 l..."Hook.to.run.when.the.server
21e0 20 68 61 73 20 73 74 61 72 74 65 64 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d .has.started."...:group.'simple-
2200 68 74 74 70 64 0a 20 20 3a 74 79 70 65 20 27 68 6f 6f 6b 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d httpd...:type.'hook)..(defcustom
2220 20 68 74 74 70 64 2d 73 74 6f 70 2d 68 6f 6f 6b 20 6e 69 6c 0a 20 20 22 48 6f 6f 6b 20 74 6f 20 .httpd-stop-hook.nil..."Hook.to.
2240 72 75 6e 20 77 68 65 6e 20 74 68 65 20 73 65 72 76 65 72 20 68 61 73 20 73 74 6f 70 70 65 64 2e run.when.the.server.has.stopped.
2260 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 0a 20 20 3a 74 79 70 65 "...:group.'simple-httpd...:type
2280 20 27 68 6f 6f 6b 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 73 65 72 76 65 72 2d 6e 61 .'hook)..(defvar.httpd-server-na
22a0 6d 65 20 28 66 6f 72 6d 61 74 20 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 20 28 45 6d 61 63 73 20 me.(format."simple-httpd.(Emacs.
22c0 25 73 29 22 20 65 6d 61 63 73 2d 76 65 72 73 69 6f 6e 29 0a 20 20 22 53 74 72 69 6e 67 20 74 6f %s)".emacs-version)..."String.to
22e0 20 75 73 65 20 69 6e 20 74 68 65 20 53 65 72 76 65 72 20 68 65 61 64 65 72 2e 22 29 0a 0a 28 64 .use.in.the.Server.header.")..(d
2300 65 66 76 61 72 20 68 74 74 70 64 2d 6d 69 6d 65 2d 74 79 70 65 73 0a 20 20 27 28 28 22 70 6e 67 efvar.httpd-mime-types...'(("png
2320 22 20 20 2e 20 22 69 6d 61 67 65 2f 70 6e 67 22 29 0a 20 20 20 20 28 22 67 69 66 22 20 20 2e 20 "...."image/png").....("gif"....
2340 22 69 6d 61 67 65 2f 67 69 66 22 29 0a 20 20 20 20 28 22 6a 70 67 22 20 20 2e 20 22 69 6d 61 67 "image/gif").....("jpg"...."imag
2360 65 2f 6a 70 65 67 22 29 0a 20 20 20 20 28 22 6a 70 65 67 22 20 2e 20 22 69 6d 61 67 65 2f 6a 70 e/jpeg").....("jpeg"..."image/jp
2380 65 67 22 29 0a 20 20 20 20 28 22 74 69 66 22 20 20 2e 20 22 69 6d 61 67 65 2f 74 69 66 22 29 0a eg").....("tif"...."image/tif").
23a0 20 20 20 20 28 22 74 69 66 66 22 20 2e 20 22 69 6d 61 67 65 2f 74 69 66 66 22 29 0a 20 20 20 20 ....("tiff"..."image/tiff").....
23c0 28 22 69 63 6f 22 20 20 2e 20 22 69 6d 61 67 65 2f 78 2d 69 63 6f 6e 22 29 0a 20 20 20 20 28 22 ("ico"...."image/x-icon").....("
23e0 73 76 67 22 20 20 2e 20 22 69 6d 61 67 65 2f 73 76 67 2b 78 6d 6c 22 29 0a 20 20 20 20 28 22 63 svg"...."image/svg+xml").....("c
2400 73 73 22 20 20 2e 20 22 74 65 78 74 2f 63 73 73 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 ss"...."text/css;.charset=utf-8"
2420 29 0a 20 20 20 20 28 22 68 74 6d 22 20 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 ).....("htm"...."text/html;.char
2440 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 68 74 6d 6c 22 20 2e 20 22 74 65 78 74 2f set=utf-8").....("html"..."text/
2460 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 78 6d 6c 22 html;.charset=utf-8").....("xml"
2480 20 20 2e 20 22 74 65 78 74 2f 78 6d 6c 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 ...."text/xml;.charset=utf-8")..
24a0 20 20 20 28 22 72 73 73 22 20 20 2e 20 22 74 65 78 74 2f 78 6d 6c 3b 20 63 68 61 72 73 65 74 3d ...("rss"...."text/xml;.charset=
24c0 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 61 74 6f 6d 22 20 2e 20 22 74 65 78 74 2f 78 6d 6c 3b utf-8").....("atom"..."text/xml;
24e0 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 74 78 74 22 20 20 2e 20 22 .charset=utf-8").....("txt"...."
2500 74 65 78 74 2f 70 6c 61 69 6e 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 text/plain;.charset=utf-8").....
2520 28 22 65 6c 22 20 20 20 2e 20 22 74 65 78 74 2f 70 6c 61 69 6e 3b 20 63 68 61 72 73 65 74 3d 75 ("el"....."text/plain;.charset=u
2540 74 66 2d 38 22 29 0a 20 20 20 20 28 22 6a 73 22 20 20 20 2e 20 22 74 65 78 74 2f 6a 61 76 61 73 tf-8").....("js"....."text/javas
2560 63 72 69 70 74 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 6d 64 22 cript;.charset=utf-8").....("md"
2580 20 20 20 2e 20 22 74 65 78 74 2f 78 2d 6d 61 72 6b 64 6f 77 6e 3b 20 63 68 61 72 73 65 74 3d 75 ....."text/x-markdown;.charset=u
25a0 74 66 2d 38 22 29 0a 20 20 20 20 28 22 67 7a 22 20 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f tf-8").....("gz"....."applicatio
25c0 6e 2f 6f 63 74 65 74 2d 73 74 72 65 61 6d 22 29 0a 20 20 20 20 28 22 70 73 22 20 20 20 2e 20 22 n/octet-stream").....("ps"....."
25e0 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 6f 73 74 73 63 72 69 70 74 22 29 0a 20 20 20 20 28 22 65 application/postscript").....("e
2600 70 73 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 6f 73 74 73 63 72 69 70 74 22 29 ps"...."application/postscript")
2620 0a 20 20 20 20 28 22 70 64 66 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 64 66 22 .....("pdf"...."application/pdf"
2640 29 0a 20 20 20 20 28 22 74 61 72 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 74 ).....("tar"...."application/x-t
2660 61 72 22 29 0a 20 20 20 20 28 22 7a 69 70 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f ar").....("zip"...."application/
2680 7a 69 70 22 29 0a 20 20 20 20 28 22 77 61 73 6d 22 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e zip").....("wasm"..."application
26a0 2f 77 61 73 6d 22 29 0a 20 20 20 20 28 22 6d 70 33 22 20 20 2e 20 22 61 75 64 69 6f 2f 6d 70 65 /wasm").....("mp3"...."audio/mpe
26c0 67 22 29 0a 20 20 20 20 28 22 77 61 76 22 20 20 2e 20 22 61 75 64 69 6f 2f 78 2d 77 61 76 22 29 g").....("wav"...."audio/x-wav")
26e0 0a 20 20 20 20 28 22 66 6c 61 63 22 20 2e 20 22 61 75 64 69 6f 2f 66 6c 61 63 22 29 0a 20 20 20 .....("flac"..."audio/flac")....
2700 20 28 22 73 70 78 22 20 20 2e 20 22 61 75 64 69 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6f 67 .("spx"...."audio/ogg").....("og
2720 61 22 20 20 2e 20 22 61 75 64 69 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6f 67 67 22 20 20 2e a"...."audio/ogg").....("ogg"...
2740 20 22 61 75 64 69 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6f 67 76 22 20 20 2e 20 22 76 69 64 ."audio/ogg").....("ogv"...."vid
2760 65 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6d 70 34 22 20 20 2e 20 22 76 69 64 65 6f 2f 6d 70 eo/ogg").....("mp4"...."video/mp
2780 34 22 29 0a 20 20 20 20 28 22 6d 6b 76 22 20 20 2e 20 22 76 69 64 65 6f 2f 78 2d 6d 61 74 72 6f 4").....("mkv"...."video/x-matro
27a0 73 6b 61 22 29 0a 20 20 20 20 28 22 77 65 62 6d 22 20 2e 20 22 76 69 64 65 6f 2f 77 65 62 6d 22 ska").....("webm"..."video/webm"
27c0 29 29 0a 20 20 22 4d 49 4d 45 20 74 79 70 65 73 20 66 6f 72 20 68 65 61 64 65 72 73 2e 22 29 0a ))..."MIME.types.for.headers.").
27e0 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 69 6e 64 65 78 65 73 0a 20 20 27 28 22 69 6e 64 65 .(defvar.httpd-indexes...'("inde
2800 78 2e 68 74 6d 6c 22 0a 20 20 20 20 22 69 6e 64 65 78 2e 68 74 6d 22 0a 20 20 20 20 22 69 6e 64 x.html"....."index.htm"....."ind
2820 65 78 2e 78 6d 6c 22 29 0a 20 20 22 46 69 6c 65 20 73 65 72 76 65 64 20 62 79 20 64 65 66 61 75 ex.xml")..."File.served.by.defau
2840 6c 74 20 77 68 65 6e 20 61 63 63 65 73 73 69 6e 67 20 61 20 64 69 72 65 63 74 6f 72 79 2e 22 29 lt.when.accessing.a.directory.")
2860 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 73 74 61 74 75 73 2d 63 6f 64 65 73 0a 20 20 27 ..(defvar.httpd-status-codes...'
2880 28 28 31 30 30 20 2e 20 22 43 6f 6e 74 69 6e 75 65 22 29 0a 20 20 20 20 28 31 30 31 20 2e 20 22 ((100..."Continue").....(101..."
28a0 53 77 69 74 63 68 69 6e 67 20 50 72 6f 74 6f 63 6f 6c 73 22 29 0a 20 20 20 20 28 31 30 32 20 2e Switching.Protocols").....(102..
28c0 20 22 50 72 6f 63 65 73 73 69 6e 67 22 29 0a 20 20 20 20 28 32 30 30 20 2e 20 22 4f 4b 22 29 0a ."Processing").....(200..."OK").
28e0 20 20 20 20 28 32 30 31 20 2e 20 22 43 72 65 61 74 65 64 22 29 0a 20 20 20 20 28 32 30 32 20 2e ....(201..."Created").....(202..
2900 20 22 41 63 63 65 70 74 65 64 22 29 0a 20 20 20 20 28 32 30 33 20 2e 20 22 4e 6f 6e 2d 61 75 74 ."Accepted").....(203..."Non-aut
2920 68 6f 72 69 74 61 74 69 76 65 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 0a 20 20 20 20 28 32 30 horitative.Information").....(20
2940 34 20 2e 20 22 4e 6f 20 43 6f 6e 74 65 6e 74 22 29 0a 20 20 20 20 28 32 30 35 20 2e 20 22 52 65 4..."No.Content").....(205..."Re
2960 73 65 74 20 43 6f 6e 74 65 6e 74 22 29 0a 20 20 20 20 28 32 30 36 20 2e 20 22 50 61 72 74 69 61 set.Content").....(206..."Partia
2980 6c 20 43 6f 6e 74 65 6e 74 22 29 0a 20 20 20 20 28 32 30 37 20 2e 20 22 4d 75 6c 74 69 2d 53 74 l.Content").....(207..."Multi-St
29a0 61 74 75 73 22 29 0a 20 20 20 20 28 32 30 38 20 2e 20 22 41 6c 72 65 61 64 79 20 52 65 70 6f 72 atus").....(208..."Already.Repor
29c0 74 65 64 22 29 0a 20 20 20 20 28 32 32 36 20 2e 20 22 49 4d 20 55 73 65 64 22 29 0a 20 20 20 20 ted").....(226..."IM.Used").....
29e0 28 33 30 30 20 2e 20 22 4d 75 6c 74 69 70 6c 65 20 43 68 6f 69 63 65 73 22 29 0a 20 20 20 20 28 (300..."Multiple.Choices").....(
2a00 33 30 31 20 2e 20 22 4d 6f 76 65 64 20 50 65 72 6d 61 6e 65 6e 74 6c 79 22 29 0a 20 20 20 20 28 301..."Moved.Permanently").....(
2a20 33 30 32 20 2e 20 22 46 6f 75 6e 64 22 29 0a 20 20 20 20 28 33 30 33 20 2e 20 22 53 65 65 20 4f 302..."Found").....(303..."See.O
2a40 74 68 65 72 22 29 0a 20 20 20 20 28 33 30 34 20 2e 20 22 4e 6f 74 20 4d 6f 64 69 66 69 65 64 22 ther").....(304..."Not.Modified"
2a60 29 0a 20 20 20 20 28 33 30 35 20 2e 20 22 55 73 65 20 50 72 6f 78 79 22 29 0a 20 20 20 20 28 33 ).....(305..."Use.Proxy").....(3
2a80 30 37 20 2e 20 22 54 65 6d 70 6f 72 61 72 79 20 52 65 64 69 72 65 63 74 22 29 0a 20 20 20 20 28 07..."Temporary.Redirect").....(
2aa0 33 30 38 20 2e 20 22 50 65 72 6d 61 6e 65 6e 74 20 52 65 64 69 72 65 63 74 22 29 0a 20 20 20 20 308..."Permanent.Redirect").....
2ac0 28 34 30 30 20 2e 20 22 42 61 64 20 52 65 71 75 65 73 74 22 29 0a 20 20 20 20 28 34 30 31 20 2e (400..."Bad.Request").....(401..
2ae0 20 22 55 6e 61 75 74 68 6f 72 69 7a 65 64 22 29 0a 20 20 20 20 28 34 30 32 20 2e 20 22 50 61 79 ."Unauthorized").....(402..."Pay
2b00 6d 65 6e 74 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 34 30 33 20 2e 20 22 46 6f 72 62 ment.Required").....(403..."Forb
2b20 69 64 64 65 6e 22 29 0a 20 20 20 20 28 34 30 34 20 2e 20 22 4e 6f 74 20 46 6f 75 6e 64 22 29 0a idden").....(404..."Not.Found").
2b40 20 20 20 20 28 34 30 35 20 2e 20 22 4d 65 74 68 6f 64 20 4e 6f 74 20 41 6c 6c 6f 77 65 64 22 29 ....(405..."Method.Not.Allowed")
2b60 0a 20 20 20 20 28 34 30 36 20 2e 20 22 4e 6f 74 20 41 63 63 65 70 74 61 62 6c 65 22 29 0a 20 20 .....(406..."Not.Acceptable")...
2b80 20 20 28 34 30 37 20 2e 20 22 50 72 6f 78 79 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 52 ..(407..."Proxy.Authentication.R
2ba0 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 34 30 38 20 2e 20 22 52 65 71 75 65 73 74 20 54 69 equired").....(408..."Request.Ti
2bc0 6d 65 6f 75 74 22 29 0a 20 20 20 20 28 34 30 39 20 2e 20 22 43 6f 6e 66 6c 69 63 74 22 29 0a 20 meout").....(409..."Conflict")..
2be0 20 20 20 28 34 31 30 20 2e 20 22 47 6f 6e 65 22 29 0a 20 20 20 20 28 34 31 31 20 2e 20 22 4c 65 ...(410..."Gone").....(411..."Le
2c00 6e 67 74 68 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 34 31 32 20 2e 20 22 50 72 65 63 ngth.Required").....(412..."Prec
2c20 6f 6e 64 69 74 69 6f 6e 20 46 61 69 6c 65 64 22 29 0a 20 20 20 20 28 34 31 33 20 2e 20 22 50 61 ondition.Failed").....(413..."Pa
2c40 79 6c 6f 61 64 20 54 6f 6f 20 4c 61 72 67 65 22 29 0a 20 20 20 20 28 34 31 34 20 2e 20 22 52 65 yload.Too.Large").....(414..."Re
2c60 71 75 65 73 74 2d 55 52 49 20 54 6f 6f 20 4c 6f 6e 67 22 29 0a 20 20 20 20 28 34 31 35 20 2e 20 quest-URI.Too.Long").....(415...
2c80 22 55 6e 73 75 70 70 6f 72 74 65 64 20 4d 65 64 69 61 20 54 79 70 65 22 29 0a 20 20 20 20 28 34 "Unsupported.Media.Type").....(4
2ca0 31 36 20 2e 20 22 52 65 71 75 65 73 74 65 64 20 52 61 6e 67 65 20 4e 6f 74 20 53 61 74 69 73 66 16..."Requested.Range.Not.Satisf
2cc0 69 61 62 6c 65 22 29 0a 20 20 20 20 28 34 31 37 20 2e 20 22 45 78 70 65 63 74 61 74 69 6f 6e 20 iable").....(417..."Expectation.
2ce0 46 61 69 6c 65 64 22 29 0a 20 20 20 20 28 34 31 38 20 2e 20 22 49 27 6d 20 61 20 74 65 61 70 6f Failed").....(418..."I'm.a.teapo
2d00 74 22 29 0a 20 20 20 20 28 34 32 31 20 2e 20 22 4d 69 73 64 69 72 65 63 74 65 64 20 52 65 71 75 t").....(421..."Misdirected.Requ
2d20 65 73 74 22 29 0a 20 20 20 20 28 34 32 32 20 2e 20 22 55 6e 70 72 6f 63 65 73 73 61 62 6c 65 20 est").....(422..."Unprocessable.
2d40 45 6e 74 69 74 79 22 29 0a 20 20 20 20 28 34 32 33 20 2e 20 22 4c 6f 63 6b 65 64 22 29 0a 20 20 Entity").....(423..."Locked")...
2d60 20 20 28 34 32 34 20 2e 20 22 46 61 69 6c 65 64 20 44 65 70 65 6e 64 65 6e 63 79 22 29 0a 20 20 ..(424..."Failed.Dependency")...
2d80 20 20 28 34 32 36 20 2e 20 22 55 70 67 72 61 64 65 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 ..(426..."Upgrade.Required")....
2da0 20 28 34 32 38 20 2e 20 22 50 72 65 63 6f 6e 64 69 74 69 6f 6e 20 52 65 71 75 69 72 65 64 22 29 .(428..."Precondition.Required")
2dc0 0a 20 20 20 20 28 34 32 39 20 2e 20 22 54 6f 6f 20 4d 61 6e 79 20 52 65 71 75 65 73 74 73 22 29 .....(429..."Too.Many.Requests")
2de0 0a 20 20 20 20 28 34 33 31 20 2e 20 22 52 65 71 75 65 73 74 20 48 65 61 64 65 72 20 46 69 65 6c .....(431..."Request.Header.Fiel
2e00 64 73 20 54 6f 6f 20 4c 61 72 67 65 22 29 0a 20 20 20 20 28 34 34 34 20 2e 20 22 43 6f 6e 6e 65 ds.Too.Large").....(444..."Conne
2e20 63 74 69 6f 6e 20 43 6c 6f 73 65 64 20 57 69 74 68 6f 75 74 20 52 65 73 70 6f 6e 73 65 22 29 0a ction.Closed.Without.Response").
2e40 20 20 20 20 28 34 35 31 20 2e 20 22 55 6e 61 76 61 69 6c 61 62 6c 65 20 46 6f 72 20 4c 65 67 61 ....(451..."Unavailable.For.Lega
2e60 6c 20 52 65 61 73 6f 6e 73 22 29 0a 20 20 20 20 28 34 39 39 20 2e 20 22 43 6c 69 65 6e 74 20 43 l.Reasons").....(499..."Client.C
2e80 6c 6f 73 65 64 20 52 65 71 75 65 73 74 22 29 0a 20 20 20 20 28 35 30 30 20 2e 20 22 49 6e 74 65 losed.Request").....(500..."Inte
2ea0 72 6e 61 6c 20 53 65 72 76 65 72 20 45 72 72 6f 72 22 29 0a 20 20 20 20 28 35 30 31 20 2e 20 22 rnal.Server.Error").....(501..."
2ec0 4e 6f 74 20 49 6d 70 6c 65 6d 65 6e 74 65 64 22 29 0a 20 20 20 20 28 35 30 32 20 2e 20 22 42 61 Not.Implemented").....(502..."Ba
2ee0 64 20 47 61 74 65 77 61 79 22 29 0a 20 20 20 20 28 35 30 33 20 2e 20 22 53 65 72 76 69 63 65 20 d.Gateway").....(503..."Service.
2f00 55 6e 61 76 61 69 6c 61 62 6c 65 22 29 0a 20 20 20 20 28 35 30 34 20 2e 20 22 47 61 74 65 77 61 Unavailable").....(504..."Gatewa
2f20 79 20 54 69 6d 65 6f 75 74 22 29 0a 20 20 20 20 28 35 30 35 20 2e 20 22 48 54 54 50 20 56 65 72 y.Timeout").....(505..."HTTP.Ver
2f40 73 69 6f 6e 20 4e 6f 74 20 53 75 70 70 6f 72 74 65 64 22 29 0a 20 20 20 20 28 35 30 36 20 2e 20 sion.Not.Supported").....(506...
2f60 22 56 61 72 69 61 6e 74 20 41 6c 73 6f 20 4e 65 67 6f 74 69 61 74 65 73 22 29 0a 20 20 20 20 28 "Variant.Also.Negotiates").....(
2f80 35 30 37 20 2e 20 22 49 6e 73 75 66 66 69 63 69 65 6e 74 20 53 74 6f 72 61 67 65 22 29 0a 20 20 507..."Insufficient.Storage")...
2fa0 20 20 28 35 30 38 20 2e 20 22 4c 6f 6f 70 20 44 65 74 65 63 74 65 64 22 29 0a 20 20 20 20 28 35 ..(508..."Loop.Detected").....(5
2fc0 31 30 20 2e 20 22 4e 6f 74 20 45 78 74 65 6e 64 65 64 22 29 0a 20 20 20 20 28 35 31 31 20 2e 20 10..."Not.Extended").....(511...
2fe0 22 4e 65 74 77 6f 72 6b 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 52 65 71 75 69 72 65 64 "Network.Authentication.Required
3000 22 29 0a 20 20 20 20 28 35 39 39 20 2e 20 22 4e 65 74 77 6f 72 6b 20 43 6f 6e 6e 65 63 74 20 54 ").....(599..."Network.Connect.T
3020 69 6d 65 6f 75 74 20 45 72 72 6f 72 22 29 29 0a 20 20 22 48 54 54 50 20 73 74 61 74 75 73 20 63 imeout.Error"))..."HTTP.status.c
3040 6f 64 65 73 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 68 74 6d 6c 0a 20 20 27 28 odes.")..(defvar.httpd-html...'(
3060 28 34 30 33 20 2e 20 22 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a 3c 68 74 6d 6c 3e 3c 68 (403..."<!DOCTYPE.html>.<html><h
3080 65 61 64 3e 0a 3c 74 69 74 6c 65 3e 34 30 33 20 46 6f 72 62 69 64 64 65 6e 3c 2f 74 69 74 6c 65 ead>.<title>403.Forbidden</title
30a0 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c 68 31 3e 46 6f 72 62 69 64 64 65 6e 3c 2f 68 >.</head><body>.<h1>Forbidden</h
30c0 31 3e 0a 3c 70 3e 54 68 65 20 72 65 71 75 65 73 74 65 64 20 55 52 4c 20 69 73 20 66 6f 72 62 69 1>.<p>The.requested.URL.is.forbi
30e0 64 64 65 6e 2e 3c 2f 70 3e 0a 3c 70 72 65 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79 3e 3c dden.</p>.<pre>%s</pre>.</body><
3100 2f 68 74 6d 6c 3e 22 29 0a 20 20 20 20 28 34 30 34 20 2e 20 22 3c 21 44 4f 43 54 59 50 45 20 68 /html>").....(404..."<!DOCTYPE.h
3120 74 6d 6c 3e 0a 3c 68 74 6d 6c 3e 3c 68 65 61 64 3e 0a 3c 74 69 74 6c 65 3e 34 30 34 20 4e 6f 74 tml>.<html><head>.<title>404.Not
3140 20 46 6f 75 6e 64 3c 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c 68 31 .Found</title>.</head><body>.<h1
3160 3e 4e 6f 74 20 46 6f 75 6e 64 3c 2f 68 31 3e 0a 3c 70 3e 54 68 65 20 72 65 71 75 65 73 74 65 64 >Not.Found</h1>.<p>The.requested
3180 20 55 52 4c 20 77 61 73 20 6e 6f 74 20 66 6f 75 6e 64 20 6f 6e 20 74 68 69 73 20 73 65 72 76 65 .URL.was.not.found.on.this.serve
31a0 72 2e 3c 2f 70 3e 0a 3c 70 72 65 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79 3e 3c 2f 68 74 r.</p>.<pre>%s</pre>.</body></ht
31c0 6d 6c 3e 22 29 0a 20 20 20 20 28 35 30 30 20 2e 20 22 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c ml>").....(500..."<!DOCTYPE.html
31e0 3e 0a 3c 68 74 6d 6c 3e 3c 68 65 61 64 3e 0a 3c 74 69 74 6c 65 3e 35 30 30 20 49 6e 74 65 72 6e >.<html><head>.<title>500.Intern
3200 61 6c 20 45 72 72 6f 72 3c 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c al.Error</title>.</head><body>.<
3220 68 31 3e 35 30 30 20 49 6e 74 65 72 6e 61 6c 20 45 72 72 6f 72 3c 2f 68 31 3e 0a 3c 70 3e 49 6e h1>500.Internal.Error</h1>.<p>In
3240 74 65 72 6e 61 6c 20 65 72 72 6f 72 20 77 68 65 6e 20 68 61 6e 64 6c 69 6e 67 20 74 68 69 73 20 ternal.error.when.handling.this.
3260 72 65 71 75 65 73 74 2e 3c 2f 70 3e 0a 3c 70 72 65 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 request.</p>.<pre>%s</pre>.</bod
3280 79 3e 3c 2f 68 74 6d 6c 3e 22 29 29 0a 20 20 22 48 54 4d 4c 20 66 6f 72 20 76 61 72 69 6f 75 73 y></html>"))..."HTML.for.various
32a0 20 65 72 72 6f 72 73 2e 22 29 0a 0a 3b 3b 20 55 73 65 72 20 69 6e 74 65 72 66 61 63 65 0a 0a 3b .errors.")..;;.User.interface..;
32c0 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 61 72 74 ;;###autoload.(defun.httpd-start
32e0 20 28 29 0a 20 20 22 53 74 61 72 74 20 74 68 65 20 77 65 62 20 73 65 72 76 65 72 20 70 72 6f 63 .()..."Start.the.web.server.proc
3300 65 73 73 2e 20 49 66 20 74 68 65 20 73 65 72 76 65 72 20 69 73 20 61 6c 72 65 61 64 79 0a 72 75 ess..If.the.server.is.already.ru
3320 6e 6e 69 6e 67 2c 20 74 68 69 73 20 77 69 6c 6c 20 72 65 73 74 61 72 74 20 74 68 65 20 73 65 72 nning,.this.will.restart.the.ser
3340 76 65 72 2e 20 54 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 20 73 65 72 76 65 72 0a 69 6e ver..There.is.only.one.server.in
3360 73 74 61 6e 63 65 20 70 65 72 20 45 6d 61 63 73 20 69 6e 73 74 61 6e 63 65 2e 22 0a 20 20 28 69 stance.per.Emacs.instance."...(i
3380 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 28 68 74 74 70 64 2d 73 74 6f 70 29 0a 20 20 28 68 74 nteractive)...(httpd-stop)...(ht
33a0 74 70 64 2d 6c 6f 67 20 60 28 73 74 61 72 74 20 2c 28 63 75 72 72 65 6e 74 2d 74 69 6d 65 2d 73 tpd-log.`(start.,(current-time-s
33c0 74 72 69 6e 67 29 29 29 0a 20 20 28 6d 61 6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 tring)))...(make-network-process
33e0 0a 20 20 20 3a 6e 61 6d 65 20 20 20 20 20 22 68 74 74 70 64 22 0a 20 20 20 3a 73 65 72 76 69 63 ....:name....."httpd"....:servic
3400 65 20 20 68 74 74 70 64 2d 70 6f 72 74 0a 20 20 20 3a 73 65 72 76 65 72 20 20 20 74 0a 20 20 20 e..httpd-port....:server...t....
3420 3a 68 6f 73 74 20 20 20 20 20 68 74 74 70 64 2d 68 6f 73 74 0a 20 20 20 3a 66 61 6d 69 6c 79 20 :host.....httpd-host....:family.
3440 20 20 68 74 74 70 64 2d 69 70 2d 66 61 6d 69 6c 79 0a 20 20 20 3a 66 69 6c 74 65 72 20 20 20 27 ..httpd-ip-family....:filter...'
3460 68 74 74 70 64 2d 2d 66 69 6c 74 65 72 0a 20 20 20 3a 63 6f 64 69 6e 67 20 20 20 27 62 69 6e 61 httpd--filter....:coding...'bina
3480 72 79 0a 20 20 20 3a 6c 6f 67 20 20 20 20 20 20 27 68 74 74 70 64 2d 2d 6c 6f 67 29 0a 20 20 28 ry....:log......'httpd--log)...(
34a0 72 75 6e 2d 68 6f 6f 6b 73 20 27 68 74 74 70 64 2d 73 74 61 72 74 2d 68 6f 6f 6b 29 29 0a 0a 3b run-hooks.'httpd-start-hook))..;
34c0 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 6f 70 20 ;;###autoload.(defun.httpd-stop.
34e0 28 29 0a 20 20 22 53 74 6f 70 20 74 68 65 20 77 65 62 20 73 65 72 76 65 72 20 69 66 20 69 74 20 ()..."Stop.the.web.server.if.it.
3500 69 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 2c 20 6f 74 68 65 72 77 69 73 65 20 is.currently.running,.otherwise.
3520 64 6f 20 6e 6f 74 68 69 6e 67 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 28 do.nothing."...(interactive)...(
3540 77 68 65 6e 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 22 68 74 74 70 64 22 29 0a 20 20 when.(process-status."httpd")...
3560 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 65 73 73 20 22 68 74 74 70 64 22 29 0a 20 20 20 20 28 ..(delete-process."httpd").....(
3580 68 74 74 70 64 2d 6c 6f 67 20 60 28 73 74 6f 70 20 2c 28 63 75 72 72 65 6e 74 2d 74 69 6d 65 2d httpd-log.`(stop.,(current-time-
35a0 73 74 72 69 6e 67 29 29 29 0a 20 20 20 20 28 72 75 6e 2d 68 6f 6f 6b 73 20 27 68 74 74 70 64 2d string))).....(run-hooks.'httpd-
35c0 73 74 6f 70 2d 68 6f 6f 6b 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 stop-hook)))..;;;###autoload.(de
35e0 66 75 6e 20 68 74 74 70 64 2d 72 75 6e 6e 69 6e 67 2d 70 20 28 29 0a 20 20 22 52 65 74 75 72 6e fun.httpd-running-p.()..."Return
3600 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 74 68 65 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 20 73 65 72 .non-nil.if.the.simple-httpd.ser
3620 76 65 72 20 69 73 20 72 75 6e 6e 69 6e 67 2e 22 0a 20 20 28 6e 6f 74 20 28 6e 75 6c 6c 20 28 70 ver.is.running."...(not.(null.(p
3640 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 22 68 74 74 70 64 22 29 29 29 29 0a 0a 3b 3b 3b 23 23 rocess-status."httpd"))))..;;;##
3660 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 65 72 76 65 2d 64 69 72 #autoload.(defun.httpd-serve-dir
3680 65 63 74 6f 72 79 20 28 64 69 72 65 63 74 6f 72 79 29 0a 20 20 22 53 74 61 72 74 20 74 68 65 20 ectory.(directory)..."Start.the.
36a0 77 65 62 20 73 65 72 76 65 72 20 77 69 74 68 20 67 69 76 65 6e 20 60 64 69 72 65 63 74 6f 72 79 web.server.with.given.`directory
36c0 27 20 61 73 20 60 68 74 74 70 64 2d 72 6f 6f 74 27 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 '.as.`httpd-root'."...(interacti
36e0 76 65 20 22 44 53 65 72 76 65 20 64 69 72 65 63 74 6f 72 79 3a 20 5c 6e 22 29 0a 20 20 28 73 65 ve."DServe.directory:.\n")...(se
3700 74 66 20 68 74 74 70 64 2d 72 6f 6f 74 20 64 69 72 65 63 74 6f 72 79 29 0a 20 20 28 68 74 74 70 tf.httpd-root.directory)...(http
3720 64 2d 73 74 61 72 74 29 0a 20 20 28 6d 65 73 73 61 67 65 20 22 53 74 61 72 74 65 64 20 73 69 6d d-start)...(message."Started.sim
3740 70 6c 65 2d 68 74 74 70 64 20 6f 6e 20 25 73 3a 25 64 2c 20 73 65 72 76 69 6e 67 3a 20 25 73 22 ple-httpd.on.%s:%d,.serving:.%s"
3760 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 6c 2d 63 61 73 65 20 68 74 74 70 64 2d 68 6f 73 74 0a ............(cl-case.httpd-host.
3780 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 6e 69 6c 29 20 22 30 2e 30 2e 30 2e 30 22 29 0a 20 .............((nil)."0.0.0.0")..
37a0 20 20 20 20 20 20 20 20 20 20 20 20 28 28 6c 6f 63 61 6c 29 20 22 6c 6f 63 61 6c 68 6f 73 74 22 ............((local)."localhost"
37c0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 74 68 65 72 77 69 73 65 20 68 74 74 70 64 2d )..............(otherwise.httpd-
37e0 68 6f 73 74 29 29 20 68 74 74 70 64 2d 70 6f 72 74 20 64 69 72 65 63 74 6f 72 79 29 29 0a 0a 28 host)).httpd-port.directory))..(
3800 64 65 66 75 6e 20 68 74 74 70 64 2d 62 61 74 63 68 2d 73 74 61 72 74 20 28 29 0a 20 20 22 4e 65 defun.httpd-batch-start.()..."Ne
3820 76 65 72 20 72 65 74 75 72 6e 73 2c 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 73 65 72 76 65 72 20 ver.returns,.holding.the.server.
3840 6f 70 65 6e 20 69 6e 64 65 66 69 6e 69 74 65 6c 79 20 66 6f 72 20 62 61 74 63 68 20 6d 6f 64 65 open.indefinitely.for.batch.mode
3860 2e 0a 4c 6f 67 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 74 6f 20 73 74 64 6f 75 74 2e ..Logs.are.redirected.to.stdout.
3880 20 54 6f 20 75 73 65 2c 20 69 6e 76 6f 6b 65 20 45 6d 61 63 73 20 6c 69 6b 65 20 74 68 69 73 3a .To.use,.invoke.Emacs.like.this:
38a0 0a 65 6d 61 63 73 20 2d 51 20 2d 62 61 74 63 68 20 2d 6c 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 .emacs.-Q.-batch.-l.simple-httpd
38c0 2e 65 6c 63 20 2d 66 20 68 74 74 70 64 2d 62 61 74 63 68 2d 73 74 61 72 74 22 0a 20 20 28 69 66 .elc.-f.httpd-batch-start"...(if
38e0 20 28 6e 6f 74 20 6e 6f 6e 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 20 20 20 20 28 65 72 72 .(not.noninteractive).......(err
3900 6f 72 20 22 4f 6e 6c 79 20 75 73 65 20 60 68 74 74 70 64 2d 62 61 74 63 68 2d 73 74 61 72 74 27 or."Only.use.`httpd-batch-start'
3920 20 69 6e 20 62 61 74 63 68 20 6d 6f 64 65 21 22 29 0a 20 20 20 20 28 68 74 74 70 64 2d 73 74 61 .in.batch.mode!").....(httpd-sta
3940 72 74 29 0a 20 20 20 20 28 64 65 66 61 6c 69 61 73 20 27 68 74 74 70 64 2d 6c 6f 67 20 27 70 70 rt).....(defalias.'httpd-log.'pp
3960 29 0a 20 20 20 20 28 77 68 69 6c 65 20 74 20 28 73 6c 65 65 70 2d 66 6f 72 20 36 30 29 29 29 29 ).....(while.t.(sleep-for.60))))
3980 0a 0a 3b 3b 20 55 74 69 6c 69 74 79 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 64 61 74 65 2d ..;;.Utility..(defun.httpd-date-
39a0 73 74 72 69 6e 67 20 28 26 6f 70 74 69 6f 6e 61 6c 20 64 61 74 65 29 0a 20 20 22 52 65 74 75 72 string.(&optional.date)..."Retur
39c0 6e 20 61 6e 20 48 54 54 50 20 64 61 74 65 20 73 74 72 69 6e 67 20 28 52 46 43 20 31 31 32 33 29 n.an.HTTP.date.string.(RFC.1123)
39e0 2e 22 0a 20 20 28 66 6f 72 6d 61 74 2d 74 69 6d 65 2d 73 74 72 69 6e 67 20 22 25 61 2c 20 25 65 ."...(format-time-string."%a,.%e
3a00 20 25 62 20 25 59 20 25 54 20 47 4d 54 22 20 64 61 74 65 20 74 29 29 0a 0a 28 64 65 66 75 6e 20 .%b.%Y.%T.GMT".date.t))..(defun.
3a20 68 74 74 70 64 2d 65 74 61 67 20 28 66 69 6c 65 29 0a 20 20 22 43 6f 6d 70 75 74 65 20 74 68 65 httpd-etag.(file)..."Compute.the
3a40 20 45 54 61 67 20 66 6f 72 20 46 49 4c 45 2e 22 0a 20 20 28 63 6f 6e 63 61 74 20 22 5c 22 22 20 .ETag.for.FILE."...(concat."\"".
3a60 28 73 75 62 73 74 72 69 6e 67 20 28 73 68 61 31 20 28 70 72 69 6e 31 2d 74 6f 2d 73 74 72 69 6e (substring.(sha1.(prin1-to-strin
3a80 67 20 28 66 69 6c 65 2d 61 74 74 72 69 62 75 74 65 73 20 66 69 6c 65 29 29 29 20 2d 31 36 29 0a g.(file-attributes.file))).-16).
3aa0 20 20 20 20 20 20 20 20 20 20 22 5c 22 22 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d .........."\""))..(defun.httpd--
3ac0 73 74 72 69 6e 67 69 66 79 20 28 64 65 73 69 67 6e 61 74 6f 72 29 0a 20 20 22 54 75 72 6e 20 61 stringify.(designator)..."Turn.a
3ae0 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 61 74 6f 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 .string.designator.into.a.string
3b00 2e 22 0a 20 20 28 6c 65 74 20 28 28 73 74 72 69 6e 67 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 ."...(let.((string.(format."%s".
3b20 64 65 73 69 67 6e 61 74 6f 72 29 29 29 0a 20 20 20 20 28 69 66 20 28 6b 65 79 77 6f 72 64 70 20 designator))).....(if.(keywordp.
3b40 64 65 73 69 67 6e 61 74 6f 72 29 0a 20 20 20 20 20 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 73 designator).........(substring.s
3b60 74 72 69 6e 67 20 31 29 0a 20 20 20 20 20 20 73 74 72 69 6e 67 29 29 29 0a 0a 3b 3b 20 4e 65 74 tring.1).......string)))..;;.Net
3b80 77 6f 72 6b 69 6e 67 20 63 6f 64 65 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 63 6f 6e 6e working.code..(defun.httpd--conn
3ba0 65 63 74 69 6f 6e 2d 63 6c 6f 73 65 2d 70 20 28 72 65 71 75 65 73 74 29 0a 20 20 22 52 65 74 75 ection-close-p.(request)..."Retu
3bc0 72 6e 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 74 68 65 20 63 6c 69 65 6e 74 20 72 65 71 75 65 73 74 rn.non-nil.if.the.client.request
3be0 65 64 20 5c 22 63 6f 6e 6e 65 63 74 69 6f 6e 3a 20 63 6c 6f 73 65 5c 22 2e 22 0a 20 20 28 6f 72 ed.\"connection:.close\"."...(or
3c00 20 28 65 71 75 61 6c 20 27 28 22 63 6c 6f 73 65 22 29 20 28 63 64 72 20 28 61 73 73 6f 63 20 22 .(equal.'("close").(cdr.(assoc."
3c20 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 28 65 71 Connection".request))).......(eq
3c40 75 61 6c 20 27 28 22 48 54 54 50 2f 31 2e 30 22 29 20 28 63 64 64 72 20 28 61 73 73 6f 63 20 22 ual.'("HTTP/1.0").(cddr.(assoc."
3c60 47 45 54 22 20 72 65 71 75 65 73 74 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d GET".request)))))..(defun.httpd-
3c80 2d 66 69 6c 74 65 72 20 28 70 72 6f 63 20 63 68 75 6e 6b 29 0a 20 20 22 52 75 6e 73 20 65 61 63 -filter.(proc.chunk)..."Runs.eac
3ca0 68 20 74 69 6d 65 20 63 6c 69 65 6e 74 20 6d 61 6b 65 73 20 61 20 72 65 71 75 65 73 74 2e 22 0a h.time.client.makes.a.request.".
3cc0 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d ..(with-current-buffer.(process-
3ce0 67 65 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 2d 62 75 66 66 65 72 29 0a 20 20 20 20 28 67 get.proc.:request-buffer).....(g
3d00 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 28 69 6e 73 65 72 oto-char.(point-max)).....(inser
3d20 74 20 63 68 75 6e 6b 29 0a 20 20 20 20 28 6c 65 74 20 28 28 72 65 71 75 65 73 74 20 28 70 72 6f t.chunk).....(let.((request.(pro
3d40 63 65 73 73 2d 67 65 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 cess-get.proc.:request))).......
3d60 28 75 6e 6c 65 73 73 20 72 65 71 75 65 73 74 0a 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 73 (unless.request.........(when.(s
3d80 65 74 66 20 72 65 71 75 65 73 74 20 28 68 74 74 70 64 2d 70 61 72 73 65 29 29 0a 20 20 20 20 20 etf.request.(httpd-parse))......
3da0 20 20 20 20 20 28 64 65 6c 65 74 65 2d 72 65 67 69 6f 6e 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 .....(delete-region.(point-min).
3dc0 28 70 6f 69 6e 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 (point))...........(process-put.
3de0 70 72 6f 63 20 3a 72 65 71 75 65 73 74 20 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 28 proc.:request.request))).......(
3e00 77 68 65 6e 20 72 65 71 75 65 73 74 0a 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 63 6f 6e 74 when.request.........(let.((cont
3e20 65 6e 74 2d 6c 65 6e 67 74 68 20 28 63 61 64 72 20 28 61 73 73 6f 63 20 22 43 6f 6e 74 65 6e 74 ent-length.(cadr.(assoc."Content
3e40 2d 4c 65 6e 67 74 68 22 20 72 65 71 75 65 73 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 -Length".request))))...........(
3e60 77 68 65 6e 20 28 6f 72 20 28 6e 75 6c 6c 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 29 0a 20 when.(or.(null.content-length)..
3e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3d 20 28 62 75 66 66 65 72 2d 73 69 ...................(=.(buffer-si
3ea0 7a 65 29 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 72 20 63 6f 6e 74 65 6e 74 2d 6c 65 ze).(string-to-number.content-le
3ec0 6e 67 74 68 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e 74 ngth))).............(let*.((cont
3ee0 65 6e 74 20 28 62 75 66 66 65 72 2d 73 74 72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 ent.(buffer-string))............
3f00 20 20 20 20 20 20 20 20 28 75 72 69 20 28 63 6c 2d 63 61 64 61 72 20 72 65 71 75 65 73 74 29 29 ........(uri.(cl-cadar.request))
3f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 61 72 73 65 64 2d 75 72 69 20 ....................(parsed-uri.
3f40 28 68 74 74 70 64 2d 70 61 72 73 65 2d 75 72 69 20 28 63 6f 6e 63 61 74 20 75 72 69 29 29 29 0a (httpd-parse-uri.(concat.uri))).
3f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 72 69 2d 70 61 74 68 20 28 68 74 ...................(uri-path.(ht
3f80 74 70 64 2d 75 6e 68 65 78 20 28 6e 74 68 20 30 20 70 61 72 73 65 64 2d 75 72 69 29 29 29 0a 20 tpd-unhex.(nth.0.parsed-uri)))..
3fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 72 69 2d 71 75 65 72 79 20 28 61 70 ..................(uri-query.(ap
3fc0 70 65 6e 64 20 28 6e 74 68 20 31 20 70 61 72 73 65 64 2d 75 72 69 29 0a 20 20 20 20 20 20 20 20 pend.(nth.1.parsed-uri).........
3fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 ..............................(h
4000 74 74 70 64 2d 70 61 72 73 65 2d 61 72 67 73 20 63 6f 6e 74 65 6e 74 29 29 29 0a 20 20 20 20 20 ttpd-parse-args.content)))......
4020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 72 76 6c 65 74 20 28 68 74 74 70 64 2d 67 65 ..............(servlet.(httpd-ge
4040 74 2d 73 65 72 76 6c 65 74 20 75 72 69 2d 70 61 74 68 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 t-servlet.uri-path)))...........
4060 20 20 20 20 28 65 72 61 73 65 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ....(erase-buffer)..............
4080 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 20 6e 69 6c 29 .(process-put.proc.:request.nil)
40a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 66 20 72 65 71 75 65 73 74 20 28 6e 72 ...............(setf.request.(nr
40c0 65 76 65 72 73 65 20 28 63 6f 6e 73 20 28 6c 69 73 74 20 22 43 6f 6e 74 65 6e 74 22 20 63 6f 6e everse.(cons.(list."Content".con
40e0 74 65 6e 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 tent)...........................
4100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 72 65 76 65 72 73 65 20 72 65 71 75 ..................(nreverse.requ
4120 65 73 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 est))))...............(httpd-log
4140 20 60 28 72 65 71 75 65 73 74 20 28 64 61 74 65 20 2c 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 .`(request.(date.,(httpd-date-st
4160 72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ring))..........................
4180 20 20 20 20 20 20 20 20 20 20 28 61 64 64 72 65 73 73 20 2c 28 63 61 72 20 28 70 72 6f 63 65 73 ..........(address.,(car.(proces
41a0 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s-contact.proc)))...............
41c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 20 2c 75 72 69 2d 70 .....................(get.,uri-p
41e0 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ath)............................
4200 20 20 20 20 20 20 20 20 2c 28 63 6f 6e 73 20 27 68 65 61 64 65 72 73 20 72 65 71 75 65 73 74 29 ........,(cons.'headers.request)
4220 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 20 73 65 72 76 6c ))...............(if.(null.servl
4240 65 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 2d 65 72 et)...................(httpd--er
4260 72 6f 72 2d 73 61 66 65 20 70 72 6f 63 20 34 30 34 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ror-safe.proc.404)..............
4280 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 6f 72 2d 63 61 73 65 0a 20 20 ...(condition-case.error-case...
42a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65 72 76 6c ..................(funcall.servl
42c0 65 74 20 70 72 6f 63 20 75 72 69 2d 70 61 74 68 20 75 72 69 2d 71 75 65 72 79 20 72 65 71 75 65 et.proc.uri-path.uri-query.reque
42e0 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f 72 20 28 68 74 st)...................(error.(ht
4300 74 70 64 2d 2d 65 72 72 6f 72 2d 73 61 66 65 20 70 72 6f 63 20 35 30 30 20 65 72 72 6f 72 2d 63 tpd--error-safe.proc.500.error-c
4320 61 73 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 68 74 74 ase))))...............(when.(htt
4340 70 64 2d 2d 63 6f 6e 6e 65 63 74 69 6f 6e 2d 63 6c 6f 73 65 2d 70 20 72 65 71 75 65 73 74 29 0a pd--connection-close-p.request).
4360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f ................(process-send-eo
4380 66 20 70 72 6f 63 29 29 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 6c f.proc)))))))))..(defun.httpd--l
43a0 6f 67 20 28 73 65 72 76 65 72 20 70 72 6f 63 20 6d 65 73 73 61 67 65 29 0a 20 20 22 52 75 6e 73 og.(server.proc.message)..."Runs
43c0 20 65 61 63 68 20 74 69 6d 65 20 61 20 6e 65 77 20 63 6c 69 65 6e 74 20 63 6f 6e 6e 65 63 74 73 .each.time.a.new.client.connects
43e0 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 65 6e 65 72 ."...(with-current-buffer.(gener
4400 61 74 65 2d 6e 65 77 2d 62 75 66 66 65 72 20 22 20 2a 68 74 74 70 64 2d 63 6c 69 65 6e 74 2a 22 ate-new-buffer.".*httpd-client*"
4420 29 0a 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 ).....(process-put.proc.:request
4440 2d 62 75 66 66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 28 73 65 -buffer.(current-buffer)))...(se
4460 74 2d 70 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e 65 6c 20 70 72 6f 63 20 23 27 68 74 74 70 64 2d t-process-sentinel.proc.#'httpd-
4480 2d 73 65 6e 74 69 6e 65 6c 29 0a 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 28 6c 69 73 74 20 27 63 -sentinel)...(httpd-log.(list.'c
44a0 6f 6e 6e 65 63 74 69 6f 6e 20 28 63 61 72 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 onnection.(car.(process-contact.
44c0 70 72 6f 63 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 73 65 6e 74 69 6e 65 proc)))))..(defun.httpd--sentine
44e0 6c 20 28 70 72 6f 63 20 6d 65 73 73 61 67 65 29 0a 20 20 22 52 75 6e 73 20 77 68 65 6e 20 61 20 l.(proc.message)..."Runs.when.a.
4500 63 6c 69 65 6e 74 20 63 6c 6f 73 65 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 0a 20 client.closes.the.connection."..
4520 20 28 75 6e 6c 65 73 73 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 2d 70 20 22 5e 6f 70 65 6e 20 .(unless.(string-match-p."^open.
4540 22 20 6d 65 73 73 61 67 65 29 0a 20 20 20 20 28 6c 65 74 20 28 28 62 75 66 66 65 72 20 28 70 72 ".message).....(let.((buffer.(pr
4560 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 2d 62 75 66 66 65 72 29 29 ocess-get.proc.:request-buffer))
4580 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 6b 69 ).......(when.buffer.........(ki
45a0 6c 6c 2d 62 75 66 66 65 72 20 62 75 66 66 65 72 29 29 29 29 29 0a 0a 3b 3b 20 4c 6f 67 67 69 6e ll-buffer.buffer)))))..;;.Loggin
45c0 67 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 6c 6f 67 20 28 69 74 65 6d 29 0a 20 20 22 50 72 g..(defun.httpd-log.(item)..."Pr
45e0 65 74 74 79 20 70 72 69 6e 74 20 61 20 6c 69 73 70 20 6f 62 6a 65 63 74 20 74 6f 20 74 68 65 20 etty.print.a.lisp.object.to.the.
4600 6c 6f 67 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 65 log."...(with-current-buffer.(ge
4620 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 68 74 74 70 64 2a 22 29 0a 20 20 20 20 28 t-buffer-create."*httpd*").....(
4640 73 65 74 66 20 62 75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79 20 6e 69 6c 29 0a 20 20 20 20 28 setf.buffer-read-only.nil).....(
4660 6c 65 74 20 28 28 66 6f 6c 6c 6f 77 20 28 3d 20 28 70 6f 69 6e 74 29 20 28 70 6f 69 6e 74 2d 6d let.((follow.(=.(point).(point-m
4680 61 78 29 29 29 29 0a 20 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 ax)))).......(save-excursion....
46a0 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 .....(goto-char.(point-max))....
46c0 20 20 20 20 20 28 70 70 20 69 74 65 6d 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 .....(pp.item.(current-buffer)))
46e0 0a 20 20 20 20 20 20 28 69 66 20 66 6f 6c 6c 6f 77 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f .......(if.follow.(goto-char.(po
4700 69 6e 74 2d 6d 61 78 29 29 29 29 0a 20 20 20 20 28 73 65 74 66 20 74 72 75 6e 63 61 74 65 2d 6c int-max)))).....(setf.truncate-l
4720 69 6e 65 73 20 74 0a 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c ines.t...........buffer-read-onl
4740 79 20 74 29 0a 20 20 20 20 28 73 65 74 2d 62 75 66 66 65 72 2d 6d 6f 64 69 66 69 65 64 2d 70 20 y.t).....(set-buffer-modified-p.
4760 6e 69 6c 29 29 29 0a 0a 3b 3b 20 53 65 72 76 6c 65 74 73 0a 0a 28 64 65 66 76 61 72 20 68 74 74 nil)))..;;.Servlets..(defvar.htt
4780 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 20 6e 69 6c 0a 20 20 22 54 68 65 20 70 72 6f 63 65 pd-current-proc.nil..."The.proce
47a0 73 73 20 6f 62 6a 65 63 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 22 29 0a 0a 28 ss.object.currently.in.use.")..(
47c0 64 65 66 76 61 72 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20 6e 69 6c 0a 20 20 defvar.httpd--header-sent.nil...
47e0 22 42 75 66 66 65 72 2d 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 20 69 6e 64 69 63 61 74 69 6e "Buffer-local.variable.indicatin
4800 67 20 69 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61 73 20 62 65 65 6e 20 73 65 6e 74 2e 22 29 g.if.the.header.has.been.sent.")
4820 0a 28 6d 61 6b 65 2d 76 61 72 69 61 62 6c 65 2d 62 75 66 66 65 72 2d 6c 6f 63 61 6c 20 27 68 74 .(make-variable-buffer-local.'ht
4840 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d tpd--header-sent)..(defun.httpd-
4860 72 65 73 6f 6c 76 65 2d 70 72 6f 63 20 28 70 72 6f 63 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 resolve-proc.(proc)..."Return.th
4880 65 20 63 6f 72 72 65 63 74 20 70 72 6f 63 65 73 73 20 74 6f 20 75 73 65 2e 20 54 68 69 73 20 68 e.correct.process.to.use..This.h
48a0 61 6e 64 6c 65 73 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 2e 22 0a 20 20 andles.`httpd-current-proc'."...
48c0 28 69 66 20 28 65 71 20 74 20 70 72 6f 63 29 20 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 (if.(eq.t.proc).httpd-current-pr
48e0 6f 63 20 70 72 6f 63 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 77 69 74 68 2d 68 74 74 70 64 2d oc.proc))..(defmacro.with-httpd-
4900 62 75 66 66 65 72 20 28 70 72 6f 63 20 6d 69 6d 65 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 buffer.(proc.mime.&rest.body)...
4920 22 43 72 65 61 74 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20 62 75 66 66 65 72 2c 20 73 65 74 20 "Create.a.temporary.buffer,.set.
4940 69 74 20 61 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 2c 20 61 6e 64 2c 0a 61 it.as.the.current.buffer,.and,.a
4960 74 20 74 68 65 20 65 6e 64 20 6f 66 20 62 6f 64 79 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 t.the.end.of.body,.automatically
4980 20 73 65 72 76 65 20 69 74 20 74 6f 20 61 6e 20 48 54 54 50 20 63 6c 69 65 6e 74 20 77 69 74 68 .serve.it.to.an.HTTP.client.with
49a0 0a 61 6e 20 48 54 54 50 20 68 65 61 64 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 73 .an.HTTP.header.indicating.the.s
49c0 70 65 63 69 66 69 65 64 20 4d 49 4d 45 20 74 79 70 65 2e 20 41 64 64 69 74 69 6f 6e 61 6c 6c 79 pecified.MIME.type..Additionally
49e0 2c 0a 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 27 20 69 73 20 73 65 74 20 74 6f 20 74 68 ,.`standard-output'.is.set.to.th
4a00 69 73 20 6f 75 74 70 75 74 20 62 75 66 66 65 72 20 61 6e 64 0a 60 68 74 74 70 64 2d 63 75 72 72 is.output.buffer.and.`httpd-curr
4a20 65 6e 74 2d 70 72 6f 63 27 20 69 73 20 73 65 74 20 74 6f 20 50 52 4f 43 2e 22 0a 20 20 28 64 65 ent-proc'.is.set.to.PROC."...(de
4a40 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 64 65 66 75 6e 29 29 0a 20 20 28 6c 65 74 20 28 28 70 clare.(indent.defun))...(let.((p
4a60 72 6f 63 2d 73 79 6d 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 2d 2d 70 72 6f 63 2d 2d 22 29 roc-sym.(make-symbol."--proc--")
4a80 29 29 0a 20 20 20 20 60 28 6c 65 74 20 28 28 2c 70 72 6f 63 2d 73 79 6d 20 2c 70 72 6f 63 29 29 )).....`(let.((,proc-sym.,proc))
4aa0 0a 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 ........(with-temp-buffer.......
4ac0 20 20 20 28 73 65 74 66 20 6d 61 6a 6f 72 2d 6d 6f 64 65 20 27 68 74 74 70 64 2d 62 75 66 66 65 ...(setf.major-mode.'httpd-buffe
4ae0 72 29 0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 r)..........(let.((standard-outp
4b00 75 74 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 ut.(current-buffer))............
4b20 20 20 20 20 28 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 20 2c 70 72 6f 63 2d 73 79 ....(httpd-current-proc.,proc-sy
4b40 6d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 0a 20 20 20 20 20 20 20 20 20 m))............,@body)..........
4b60 28 75 6e 6c 65 73 73 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 0a 20 20 20 20 20 (unless.httpd--header-sent......
4b80 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 2c 70 72 6f 63 2d 73 ......(httpd-send-header.,proc-s
4ba0 79 6d 20 2c 6d 69 6d 65 20 32 30 30 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 ym.,mime.200))))))..(defun.httpd
4bc0 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 20 28 29 0a 20 20 22 44 6f 6e 27 74 20 72 65 73 70 -discard-buffer.()..."Don't.resp
4be0 6f 6e 64 20 75 73 69 6e 67 20 63 75 72 72 65 6e 74 20 73 65 72 76 65 72 20 62 75 66 66 65 72 20 ond.using.current.server.buffer.
4c00 28 60 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 27 29 2e 0a 52 65 74 75 72 6e 73 20 61 (`with-httpd-buffer')..Returns.a
4c20 20 70 72 6f 63 65 73 73 20 66 6f 72 20 66 75 74 75 72 65 20 72 65 73 70 6f 6e 73 65 2e 22 0a 20 .process.for.future.response."..
4c40 20 28 77 68 65 6e 20 28 65 71 20 6d 61 6a 6f 72 2d 6d 6f 64 65 20 27 68 74 74 70 64 2d 62 75 66 .(when.(eq.major-mode.'httpd-buf
4c60 66 65 72 29 20 28 73 65 74 66 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20 74 29 fer).(setf.httpd--header-sent.t)
4c80 29 0a 20 20 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 29 0a 0a 28 64 65 66 6d 61 63 )...httpd-current-proc)..(defmac
4ca0 72 6f 20 64 65 66 73 65 72 76 6c 65 74 20 28 6e 61 6d 65 20 6d 69 6d 65 20 70 61 74 68 2d 71 75 ro.defservlet.(name.mime.path-qu
4cc0 65 72 79 2d 72 65 71 75 65 73 74 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 44 65 66 69 6e ery-request.&rest.body)..."Defin
4ce0 65 73 20 61 20 73 69 6d 70 6c 65 20 68 74 74 70 64 20 73 65 72 76 65 6c 65 74 2e 20 54 68 65 20 es.a.simple.httpd.servelet..The.
4d00 73 65 72 76 6c 65 74 20 72 75 6e 73 20 69 6e 20 61 0a 74 65 6d 70 6f 72 61 72 79 20 62 75 66 66 servlet.runs.in.a.temporary.buff
4d20 65 72 20 77 68 69 63 68 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 72 76 65 64 er.which.is.automatically.served
4d40 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 0a 61 6c 6f 6e 67 20 77 69 74 68 20 61 20 68 65 61 64 .to.the.client.along.with.a.head
4d60 65 72 2e 0a 0a 41 20 73 65 72 76 6c 65 74 20 74 68 61 74 20 73 65 72 76 65 73 20 74 68 65 20 63 er...A.servlet.that.serves.the.c
4d80 6f 6e 74 65 6e 74 73 20 6f 66 20 2a 73 63 72 61 74 63 68 2a 2c 0a 0a 20 20 20 20 28 64 65 66 73 ontents.of.*scratch*,......(defs
4da0 65 72 76 6c 65 74 20 73 63 72 61 74 63 68 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 29 0a 20 20 20 ervlet.scratch.text/plain.()....
4dc0 20 20 20 28 69 6e 73 65 72 74 2d 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 67 65 74 ...(insert-buffer-substring.(get
4de0 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 5c 22 2a 73 63 72 61 74 63 68 2a 5c 22 29 29 29 0a -buffer-create.\"*scratch*\"))).
4e00 0a 41 20 73 65 72 76 6c 65 74 20 74 68 61 74 20 73 61 79 73 20 68 65 6c 6c 6f 2c 0a 0a 20 20 20 .A.servlet.that.says.hello,.....
4e20 20 28 64 65 66 73 65 72 76 6c 65 74 20 68 65 6c 6c 6f 2d 77 6f 72 6c 64 20 74 65 78 74 2f 70 6c .(defservlet.hello-world.text/pl
4e40 61 69 6e 20 28 70 61 74 68 29 0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 5c 22 68 65 6c 6c 6f ain.(path).......(insert.\"hello
4e60 2c 20 5c 22 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 6e 6f 6e 64 69 72 65 63 74 6f 72 79 20 70 61 74 ,.\".(file-name-nondirectory.pat
4e80 68 29 29 29 29 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 64 65 66 75 6e 29 h))))"...(declare.(indent.defun)
4ea0 29 0a 20 20 28 6c 65 74 20 28 28 70 72 6f 63 2d 73 79 6d 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c )...(let.((proc-sym.(make-symbol
4ec0 20 22 70 72 6f 63 22 29 29 0a 20 20 20 20 20 20 20 20 28 66 6e 61 6d 65 20 28 69 6e 74 65 72 6e ."proc")).........(fname.(intern
4ee0 20 28 63 6f 6e 63 61 74 20 22 68 74 74 70 64 2f 22 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 6e .(concat."httpd/".(symbol-name.n
4f00 61 6d 65 29 29 29 29 29 0a 20 20 20 20 60 28 64 65 66 75 6e 20 2c 66 6e 61 6d 65 20 28 2c 70 72 ame))))).....`(defun.,fname.(,pr
4f20 6f 63 2d 73 79 6d 20 2c 40 70 61 74 68 2d 71 75 65 72 79 2d 72 65 71 75 65 73 74 20 26 72 65 73 oc-sym.,@path-query-request.&res
4f40 74 20 2c 28 63 6c 2d 67 65 6e 73 79 6d 29 29 0a 20 20 20 20 20 20 20 28 77 69 74 68 2d 68 74 74 t.,(cl-gensym))........(with-htt
4f60 70 64 2d 62 75 66 66 65 72 20 2c 70 72 6f 63 2d 73 79 6d 20 2c 28 68 74 74 70 64 2d 2d 73 74 72 pd-buffer.,proc-sym.,(httpd--str
4f80 69 6e 67 69 66 79 20 6d 69 6d 65 29 0a 20 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 29 29 ingify.mime)..........,@body))))
4fa0 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 70 61 72 73 65 2d 65 6e 64 70 6f 69 6e 74 20 28 73 ..(defun.httpd-parse-endpoint.(s
4fc0 79 6d 62 6f 6c 29 0a 20 20 22 50 61 72 73 65 20 61 6e 20 65 6e 64 70 6f 69 6e 74 20 64 65 66 69 ymbol)..."Parse.an.endpoint.defi
4fe0 6e 69 74 69 6f 6e 20 74 65 6d 70 6c 61 74 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 60 64 65 nition.template.for.use.with.`de
5000 66 73 65 72 76 6c 65 74 2a 27 2e 22 0a 20 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 69 74 65 6d fservlet*'."...(cl-loop.for.item
5020 20 69 6e 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 73 .in.(split-string.(symbol-name.s
5040 79 6d 62 6f 6c 29 20 22 2f 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 75 70 66 ymbol)."/")............for.n.upf
5060 72 6f 6d 20 30 0a 20 20 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 28 61 6e 64 20 28 3e 20 28 6c rom.0............when.(and.(>.(l
5080 65 6e 67 74 68 20 69 74 65 6d 29 20 30 29 20 28 65 71 6c 20 28 61 72 65 66 20 69 74 65 6d 20 30 ength.item).0).(eql.(aref.item.0
50a0 29 20 3f 3a 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 63 6f 6e 73 20 ).?:))............collect.(cons.
50c0 28 69 6e 74 65 72 6e 20 28 73 75 62 73 74 72 69 6e 67 20 69 74 65 6d 20 31 29 29 20 6e 29 20 69 (intern.(substring.item.1)).n).i
50e0 6e 74 6f 20 76 61 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 63 6f 6c 6c 65 63 74 nto.vars............else.collect
5100 20 69 74 65 6d 20 69 6e 74 6f 20 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c .item.into.path............final
5120 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 6c 2d 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 ly............(cl-return........
5140 20 20 20 20 20 28 63 6c 2d 76 61 6c 75 65 73 20 28 69 6e 74 65 72 6e 20 28 6d 61 70 63 6f 6e 63 .....(cl-values.(intern.(mapconc
5160 61 74 20 23 27 69 64 65 6e 74 69 74 79 20 70 61 74 68 20 22 2f 22 29 29 20 76 61 72 73 29 29 29 at.#'identity.path."/")).vars)))
5180 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 70 61 74 68 20 6e 69 6c 0a 20 20 22 41 6e 61 )..(defvar.httpd-path.nil..."Ana
51a0 70 68 6f 72 69 63 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 60 64 65 66 73 65 72 76 6c 65 74 2a phoric.variable.for.`defservlet*
51c0 27 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 71 75 65 72 79 20 6e 69 6c 0a 20 20 '.")..(defvar.httpd-query.nil...
51e0 22 41 6e 61 70 68 6f 72 69 63 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 60 64 65 66 73 65 72 76 "Anaphoric.variable.for.`defserv
5200 6c 65 74 2a 27 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 72 65 71 75 65 73 74 20 let*'.")..(defvar.httpd-request.
5220 6e 69 6c 0a 20 20 22 41 6e 61 70 68 6f 72 69 63 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 60 64 nil..."Anaphoric.variable.for.`d
5240 65 66 73 65 72 76 6c 65 74 2a 27 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 73 70 efservlet*'.")..(defvar.httpd-sp
5260 6c 69 74 2d 70 61 74 68 20 6e 69 6c 0a 20 20 22 41 6e 61 70 68 6f 72 69 63 20 76 61 72 69 61 62 lit-path.nil..."Anaphoric.variab
5280 6c 65 20 66 6f 72 20 60 64 65 66 73 65 72 76 6c 65 74 2a 27 2e 22 29 0a 0a 28 64 65 66 6d 61 63 le.for.`defservlet*'.")..(defmac
52a0 72 6f 20 64 65 66 73 65 72 76 6c 65 74 2a 20 28 65 6e 64 70 6f 69 6e 74 20 6d 69 6d 65 20 61 72 ro.defservlet*.(endpoint.mime.ar
52c0 67 73 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 4c 69 6b 65 20 60 64 65 66 73 65 72 76 6c gs.&rest.body)..."Like.`defservl
52e0 65 74 27 2c 20 62 75 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 69 6e 64 20 76 61 72 69 et',.but.automatically.bind.vari
5300 61 62 6c 65 73 2f 61 72 67 75 6d 65 6e 74 73 0a 74 6f 20 74 68 65 20 72 65 71 75 65 73 74 2e 20 ables/arguments.to.the.request..
5320 54 72 61 69 6c 69 6e 67 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 65 20 45 4e 44 50 4f Trailing.components.of.the.ENDPO
5340 49 4e 54 20 63 61 6e 20 62 65 20 62 6f 75 6e 64 0a 62 79 20 70 72 65 66 69 78 69 6e 67 20 74 68 INT.can.be.bound.by.prefixing.th
5360 65 73 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 77 69 74 68 20 61 20 63 6f 6c 6f 6e 2c 20 61 63 74 ese.components.with.a.colon,.act
5380 69 6e 67 20 6c 69 6b 65 20 61 20 74 65 6d 70 6c 61 74 65 2e 0a 0a 20 20 20 20 28 64 65 66 73 65 ing.like.a.template.......(defse
53a0 72 76 6c 65 74 2a 20 70 61 63 6b 61 67 65 73 2f 3a 70 61 63 6b 61 67 65 2f 3a 76 65 72 73 69 6f rvlet*.packages/:package/:versio
53c0 6e 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 76 65 72 62 6f 73 65 29 0a 20 20 20 20 20 20 28 69 6e n.text/plain.(verbose).......(in
53e0 73 65 72 74 20 28 66 6f 72 6d 61 74 20 5c 22 25 73 5c 5c 6e 25 73 5c 5c 6e 5c 22 20 70 61 63 6b sert.(format.\"%s\\n%s\\n\".pack
5400 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a 20 20 20 20 20 20 28 70 72 69 6e 63 20 28 67 65 74 2d age.version)).......(princ.(get-
5420 64 65 73 63 72 69 70 74 69 6f 6e 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a 20 20 description.package.version))...
5440 20 20 20 20 28 77 68 65 6e 20 76 65 72 62 6f 73 65 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 ....(when.verbose.........(inser
5460 74 20 28 66 6f 72 6d 61 74 20 5c 22 25 53 5c 22 20 28 67 65 74 2d 64 65 70 65 6e 64 65 6e 63 69 t.(format.\"%S\".(get-dependenci
5480 65 73 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 29 29 29 0a 0a 57 68 65 6e 20 61 63 es.package.version)))))..When.ac
54a0 63 65 73 73 65 64 20 66 72 6f 6d 20 74 68 69 73 20 55 52 4c 2c 0a 0a 20 20 20 20 68 74 74 70 3a cessed.from.this.URL,......http:
54c0 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f 6d 2f 70 61 63 6b 61 67 65 73 2f 66 6f 6f 62 61 72 2f 31 2e //example.com/packages/foobar/1.
54e0 30 3f 76 65 72 62 6f 73 65 3d 31 0a 0a 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 70 61 63 6b 61 0?verbose=1..the.variables.packa
5500 67 65 2c 20 76 65 72 73 69 6f 6e 2c 20 61 6e 64 20 76 65 72 62 6f 73 65 20 77 69 6c 6c 20 62 65 ge,.version,.and.verbose.will.be
5520 20 62 6f 75 6e 64 20 74 6f 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6d 70 6f 6e 65 .bound.to.the.associated.compone
5540 6e 74 73 20 6f 66 20 74 68 65 20 55 52 4c 2e 20 43 6f 6d 70 6f 6e 65 6e 74 73 20 6e 6f 74 20 70 nts.of.the.URL..Components.not.p
5560 72 6f 76 69 64 65 64 20 61 72 65 0a 62 6f 75 6e 64 20 74 6f 20 6e 69 6c 2e 20 54 68 65 20 71 75 rovided.are.bound.to.nil..The.qu
5580 65 72 79 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 6f 6d 6d 6f 6e ery.arguments.can.use.the.Common
55a0 20 4c 69 73 70 20 26 6b 65 79 0a 66 6f 72 6d 20 28 76 61 72 69 61 62 6c 65 20 64 65 66 61 75 6c .Lisp.&key.form.(variable.defaul
55c0 74 20 70 72 6f 76 69 64 65 64 2d 70 29 2e 0a 0a 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 2a t.provided-p).......(defservlet*
55e0 20 67 72 65 65 74 69 6e 67 2f 3a 6e 61 6d 65 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 28 67 72 65 .greeting/:name.text/plain.((gre
5600 65 74 69 6e 67 20 5c 22 68 69 5c 22 20 67 72 65 65 74 69 6e 67 2d 70 29 29 0a 20 20 20 20 20 20 eting.\"hi\".greeting-p)).......
5620 28 70 72 69 6e 63 20 28 66 6f 72 6d 61 74 20 5c 22 25 73 2c 20 25 73 20 28 70 72 6f 76 69 64 65 (princ.(format.\"%s,.%s.(provide
5640 64 3a 20 25 73 29 5c 22 20 67 72 65 65 74 69 6e 67 20 6e 61 6d 65 20 67 72 65 65 74 69 6e 67 2d d:.%s)\".greeting.name.greeting-
5660 70 29 29 29 0a 0a 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 61 74 68 2c 20 71 75 65 72 79 2c 20 p)))..The.original.path,.query,.
5680 61 6e 64 20 72 65 71 75 65 73 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 and.request.can.be.accessed.by.t
56a0 68 65 0a 61 6e 61 70 68 6f 72 69 63 20 73 70 65 63 69 61 6c 20 76 61 72 69 61 62 6c 65 73 20 60 he.anaphoric.special.variables.`
56c0 68 74 74 70 64 2d 70 61 74 68 27 2c 20 60 68 74 74 70 64 2d 71 75 65 72 79 27 2c 20 61 6e 64 0a httpd-path',.`httpd-query',.and.
56e0 60 68 74 74 70 64 2d 72 65 71 75 65 73 74 27 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69 6e `httpd-request'."...(declare.(in
5700 64 65 6e 74 20 64 65 66 75 6e 29 29 0a 20 20 28 6c 65 74 20 28 28 70 61 74 68 2d 6c 65 78 69 63 dent.defun))...(let.((path-lexic
5720 61 6c 20 28 63 6c 2d 67 65 6e 73 79 6d 29 29 0a 20 20 20 20 20 20 20 20 28 71 75 65 72 79 2d 6c al.(cl-gensym)).........(query-l
5740 65 78 69 63 61 6c 20 28 63 6c 2d 67 65 6e 73 79 6d 29 29 0a 20 20 20 20 20 20 20 20 28 72 65 71 exical.(cl-gensym)).........(req
5760 75 65 73 74 2d 6c 65 78 69 63 61 6c 20 28 63 6c 2d 67 65 6e 73 79 6d 29 29 29 0a 20 20 20 20 28 uest-lexical.(cl-gensym))).....(
5780 63 6c 2d 6d 75 6c 74 69 70 6c 65 2d 76 61 6c 75 65 2d 62 69 6e 64 20 28 70 61 74 68 20 76 61 72 cl-multiple-value-bind.(path.var
57a0 73 29 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 65 6e 64 70 6f 69 6e 74 20 65 6e 64 70 6f 69 6e s).(httpd-parse-endpoint.endpoin
57c0 74 29 0a 20 20 20 20 20 20 60 28 64 65 66 73 65 72 76 6c 65 74 20 2c 70 61 74 68 20 2c 6d 69 6d t).......`(defservlet.,path.,mim
57e0 65 20 28 2c 70 61 74 68 2d 6c 65 78 69 63 61 6c 20 2c 71 75 65 72 79 2d 6c 65 78 69 63 61 6c 20 e.(,path-lexical.,query-lexical.
5800 2c 72 65 71 75 65 73 74 2d 6c 65 78 69 63 61 6c 29 0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 ,request-lexical)..........(let.
5820 28 28 68 74 74 70 64 2d 70 61 74 68 20 2c 70 61 74 68 2d 6c 65 78 69 63 61 6c 29 0a 20 20 20 20 ((httpd-path.,path-lexical).....
5840 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 71 75 65 72 79 20 2c 71 75 65 72 79 2d 6c ...........(httpd-query.,query-l
5860 65 78 69 63 61 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 72 65 exical)................(httpd-re
5880 71 75 65 73 74 20 2c 72 65 71 75 65 73 74 2d 6c 65 78 69 63 61 6c 29 0a 20 20 20 20 20 20 20 20 quest.,request-lexical).........
58a0 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 70 6c 69 74 2d 70 61 74 68 20 28 73 70 6c 69 74 2d .......(httpd-split-path.(split-
58c0 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 string..........................
58e0 20 20 20 20 20 20 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 2c 70 61 74 68 2d 6c 65 78 69 63 61 .........(substring.,path-lexica
5900 6c 20 31 29 20 22 2f 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 2c 28 63 6c l.1)."/")))............(let.,(cl
5920 2d 6c 6f 6f 70 20 66 6f 72 20 28 76 61 72 20 2e 20 70 6f 73 29 20 69 6e 20 76 61 72 73 0a 20 20 -loop.for.(var...pos).in.vars...
5940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 65 78 74 72 ........................for.extr
5960 61 63 74 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 act.=...........................
5980 60 28 68 74 74 70 64 2d 75 6e 68 65 78 20 28 6e 74 68 20 2c 70 6f 73 20 68 74 74 70 64 2d 73 70 `(httpd-unhex.(nth.,pos.httpd-sp
59a0 6c 69 74 2d 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lit-path))......................
59c0 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 6c 69 73 74 20 76 61 72 20 65 78 74 72 61 63 74 29 29 .....collect.(list.var.extract))
59e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 2c 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 ..............(let.,(cl-loop.for
5a00 20 61 72 67 20 69 6e 20 61 72 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .arg.in.args....................
5a20 20 20 20 20 20 20 20 20 20 66 6f 72 20 68 61 73 2d 64 65 66 61 75 6c 74 20 3d 20 28 6c 69 73 74 .........for.has-default.=.(list
5a40 70 20 61 72 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p.arg)..........................
5a60 20 20 20 66 6f 72 20 68 61 73 2d 64 65 66 61 75 6c 74 2d 70 20 3d 20 28 61 6e 64 20 68 61 73 2d ...for.has-default-p.=.(and.has-
5a80 64 65 66 61 75 6c 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 default.........................
5aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3d 20 .............................(=.
5ac0 33 20 28 6c 65 6e 67 74 68 20 61 72 67 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3.(length.arg)))................
5ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 61 72 67 2d 6e 61 6d 65 20 3d 20 28 73 79 6d .............for.arg-name.=.(sym
5b00 62 6f 6c 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 bol-name........................
5b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 68 61 73 2d 64 65 66 .....................(if.has-def
5b40 61 75 6c 74 20 28 63 6c 2d 66 69 72 73 74 20 61 72 67 29 20 61 72 67 29 29 0a 20 20 20 20 20 20 ault.(cl-first.arg).arg)).......
5b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 68 61 73 2d 64 ......................when.has-d
5b80 65 66 61 75 6c 74 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 efault.collect..................
5ba0 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 28 63 6c 2d 66 69 72 73 74 20 61 72 67 29 0a ...........(list.(cl-first.arg).
5bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
5be0 20 20 60 28 6c 65 74 20 28 28 76 61 6c 75 65 20 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61 6d 65 ..`(let.((value.(assoc.,arg-name
5c00 20 68 74 74 70 64 2d 71 75 65 72 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .httpd-query))).................
5c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 76 61 6c 75 65 0a 20 .....................(if.value..
5c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
5c60 20 20 20 20 20 20 20 20 28 63 6c 2d 73 65 63 6f 6e 64 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 ........(cl-second.value).......
5c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
5ca0 20 2c 28 63 6c 2d 73 65 63 6f 6e 64 20 61 72 67 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 .,(cl-second.arg))))............
5cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 63 6f 6c 6c 65 63 74 0a 20 20 .................else.collect...
5ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 ..........................(list.
5d00 61 72 67 20 60 28 63 6c 2d 73 65 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 arg.`(cl-second.................
5d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 20 2c ........................(assoc.,
5d40 61 72 67 2d 6e 61 6d 65 20 68 74 74 70 64 2d 71 75 65 72 79 29 29 29 0a 20 20 20 20 20 20 20 20 arg-name.httpd-query))).........
5d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 6e 20 68 61 73 2d 64 65 66 ....................when.has-def
5d80 61 75 6c 74 2d 70 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ault-p.collect..................
5da0 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 28 63 6c 2d 74 68 69 72 64 20 61 72 67 29 0a ...........(list.(cl-third.arg).
5dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
5de0 20 20 60 28 6e 6f 74 20 28 6e 75 6c 6c 20 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61 6d 65 20 68 ..`(not.(null.(assoc.,arg-name.h
5e00 74 74 70 64 2d 71 75 65 72 79 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c ttpd-query)))))................,
5e20 40 62 6f 64 79 29 29 29 29 29 29 29 0a 0a 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 61 64 64 2d 6b 65 79 @body)))))))..(font-lock-add-key
5e40 77 6f 72 64 73 0a 20 27 65 6d 61 63 73 2d 6c 69 73 70 2d 6d 6f 64 65 0a 20 27 28 28 22 28 5c 5c words..'emacs-lisp-mode..'(("(\\
5e60 3c 5c 5c 28 64 65 66 73 65 72 76 6c 65 74 5c 5c 2a 3f 5c 5c 29 5c 5c 3e 20 2b 5c 5c 28 5b 5e 20 <\\(defservlet\\*?\\)\\>.+\\([^.
5e80 28 29 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e 20 28 29 5d 2b 5c 5c 29 22 0a 20 20 20 20 28 31 20 27 ()]+\\).+\\([^.()]+\\)".....(1.'
5ea0 66 6f 6e 74 2d 6c 6f 63 6b 2d 6b 65 79 77 6f 72 64 2d 66 61 63 65 29 0a 20 20 20 20 28 32 20 27 font-lock-keyword-face).....(2.'
5ec0 66 6f 6e 74 2d 6c 6f 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 2d 66 61 63 65 29 0a 20 20 font-lock-function-name-face)...
5ee0 20 20 28 33 20 27 66 6f 6e 74 2d 6c 6f 63 6b 2d 74 79 70 65 2d 66 61 63 65 29 29 29 29 0a 0a 28 ..(3.'font-lock-type-face))))..(
5f00 64 65 66 6d 61 63 72 6f 20 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 20 defmacro.httpd-def-file-servlet.
5f20 28 6e 61 6d 65 20 72 6f 6f 74 29 0a 20 20 22 44 65 66 69 6e 65 73 20 61 20 73 65 72 76 6c 65 74 (name.root)..."Defines.a.servlet
5f40 20 74 68 61 74 20 73 65 72 76 65 73 20 66 69 6c 65 73 20 66 72 6f 6d 20 52 4f 4f 54 20 75 6e 64 .that.serves.files.from.ROOT.und
5f60 65 72 20 74 68 65 20 72 6f 75 74 65 20 4e 41 4d 45 2e 0a 0a 20 20 20 20 28 68 74 74 70 64 2d 64 er.the.route.NAME.......(httpd-d
5f80 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 20 6d 79 2f 77 77 77 20 5c 22 2f 76 61 72 2f 77 77 ef-file-servlet.my/www.\"/var/ww
5fa0 77 2f 5c 22 29 0a 0a 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 68 61 6e 64 6c 65 73 20 72 65 64 w/\")..Automatically.handles.red
5fc0 69 72 65 63 74 73 20 61 6e 64 20 75 73 65 73 20 60 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f irects.and.uses.`httpd-serve-roo
5fe0 74 27 20 74 6f 0a 61 63 74 75 61 6c 6c 79 20 73 65 72 76 65 20 75 70 20 66 69 6c 65 73 2e 22 0a t'.to.actually.serve.up.files.".
6000 20 20 28 6c 65 74 2a 20 28 28 73 68 6f 72 74 2d 72 6f 6f 74 20 28 64 69 72 65 63 74 6f 72 79 2d ..(let*.((short-root.(directory-
6020 66 69 6c 65 2d 6e 61 6d 65 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 6e 61 6d 65 29 29 29 0a 20 file-name.(symbol-name.name)))..
6040 20 20 20 20 20 20 20 20 28 70 61 74 68 2d 72 6f 6f 74 20 28 63 6f 6e 63 61 74 20 73 68 6f 72 74 ........(path-root.(concat.short
6060 2d 72 6f 6f 74 20 22 2f 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 68 6f 70 20 28 6c 65 6e 67 -root."/"))..........(chop.(leng
6080 74 68 20 70 61 74 68 2d 72 6f 6f 74 29 29 29 0a 20 20 20 20 60 28 64 65 66 73 65 72 76 6c 65 74 th.path-root))).....`(defservlet
60a0 20 2c 6e 61 6d 65 20 6e 69 6c 20 28 75 72 69 2d 70 61 74 68 20 71 75 65 72 79 20 72 65 71 75 65 .,name.nil.(uri-path.query.reque
60c0 73 74 29 0a 20 20 20 20 20 20 20 28 73 65 74 66 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 st)........(setf.httpd--header-s
60e0 65 6e 74 20 74 29 20 3b 20 44 6f 6e 27 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65 20 74 68 69 73 ent.t).;.Don't.actually.use.this
6100 20 74 65 6d 70 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 28 69 66 20 28 3d 20 28 6c 65 6e 67 .temp.buffer........(if.(=.(leng
6120 74 68 20 75 72 69 2d 70 61 74 68 29 20 2c 63 68 6f 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 th.uri-path).,chop)............(
6140 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 20 74 20 2c 70 61 74 68 2d 72 6f 6f 74 29 0a 20 20 20 httpd-redirect.t.,path-root)....
6160 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 74 68 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 ......(let.((path.(substring.uri
6180 2d 70 61 74 68 20 2c 63 68 6f 70 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 -path.,chop)))............(httpd
61a0 2d 73 65 72 76 65 2d 72 6f 6f 74 20 74 20 2c 72 6f 6f 74 20 70 61 74 68 20 72 65 71 75 65 73 74 -serve-root.t.,root.path.request
61c0 29 29 29 29 29 29 0a 0a 3b 3b 20 52 65 71 75 65 73 74 20 70 61 72 73 69 6e 67 0a 0a 28 64 65 66 ))))))..;;.Request.parsing..(def
61e0 75 6e 20 68 74 74 70 64 2d 2d 6e 6f 72 6d 61 6c 69 7a 65 2d 68 65 61 64 65 72 20 28 68 65 61 64 un.httpd--normalize-header.(head
6200 65 72 29 0a 20 20 22 44 65 73 74 72 75 63 74 69 76 65 6c 79 20 63 61 70 69 74 61 6c 69 7a 65 20 er)..."Destructively.capitalize.
6220 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 48 45 41 44 45 52 2e 22 0a 20 20 28 6d 61 the.components.of.HEADER."...(ma
6240 70 63 6f 6e 63 61 74 20 23 27 63 61 70 69 74 61 6c 69 7a 65 20 28 73 70 6c 69 74 2d 73 74 72 69 pconcat.#'capitalize.(split-stri
6260 6e 67 20 68 65 61 64 65 72 20 22 2d 22 29 20 22 2d 22 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 ng.header."-")."-"))..(defun.htt
6280 70 64 2d 70 61 72 73 65 20 28 29 0a 20 20 22 50 61 72 73 65 20 48 54 54 50 20 68 65 61 64 65 72 pd-parse.()..."Parse.HTTP.header
62a0 20 69 6e 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 69 6e 74 6f 20 61 73 73 6f 63 69 61 74 .in.current.buffer.into.associat
62c0 69 6f 6e 20 6c 69 73 74 2e 0a 4c 65 61 76 65 73 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 74 68 ion.list..Leaves.the.point.at.th
62e0 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 20 63 6f 6e 74 65 6e 74 2e 20 e.start.of.the.request.content..
6300 52 65 74 75 72 6e 73 20 6e 69 6c 0a 69 66 20 69 74 20 66 61 69 6c 65 64 20 74 6f 20 70 61 72 73 Returns.nil.if.it.failed.to.pars
6320 65 20 61 20 63 6f 6d 70 6c 65 74 65 20 48 54 54 50 20 68 65 61 64 65 72 2e 22 0a 20 20 28 67 6f e.a.complete.HTTP.header."...(go
6340 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 28 77 68 65 6e 20 28 6c 6f to-char.(point-min))...(when.(lo
6360 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 5b 5e 20 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e 20 5d 2b 5c oking-at."\\([^.]+\\).+\\([^.]+\
6380 5c 29 20 2b 5c 5c 28 5b 5e 5c 72 5d 2b 5c 5c 29 5c 72 5c 6e 22 29 0a 20 20 20 20 28 6c 65 74 20 \).+\\([^\r]+\\)\r\n").....(let.
63a0 28 28 6d 65 74 68 6f 64 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 29 29 0a 20 20 20 20 20 ((method.(match-string.1))......
63c0 20 20 20 20 20 28 70 61 74 68 20 28 64 65 63 6f 64 65 2d 63 6f 64 69 6e 67 2d 73 74 72 69 6e 67 .....(path.(decode-coding-string
63e0 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 32 29 20 27 69 73 6f 2d 38 38 35 39 2d 31 29 29 0a .(match-string.2).'iso-8859-1)).
6400 20 20 20 20 20 20 20 20 20 20 28 76 65 72 73 69 6f 6e 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 ..........(version.(match-string
6420 20 33 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 68 65 61 64 65 72 73 20 28 29 29 29 0a 20 20 20 .3))...........(headers.()))....
6440 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20 20 20 ...(goto-char.(match-end.0))....
6460 20 20 20 28 77 68 69 6c 65 20 28 6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 5b 2d 21 23 2d 27 ...(while.(looking-at."\\([-!#-'
6480 2a 2b 2e 30 2d 39 41 2d 5a 5e 5f 60 61 2d 7a 7c 7e 5d 2b 5c 5c 29 3a 20 2a 5c 5c 28 5b 5e 5c 72 *+.0-9A-Z^_`a-z|~]+\\):.*\\([^\r
64a0 5d 2b 5c 5c 29 5c 72 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 ]+\\)\r\n").........(goto-char.(
64c0 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 6e 61 6d match-end.0)).........(let.((nam
64e0 65 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 e.(match-string.1)).............
6500 20 20 28 76 61 6c 75 65 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 32 29 29 29 0a 20 20 20 20 ..(value.(match-string.2))).....
6520 20 20 20 20 20 20 28 70 75 73 68 20 28 6c 69 73 74 20 28 68 74 74 70 64 2d 2d 6e 6f 72 6d 61 6c ......(push.(list.(httpd--normal
6540 69 7a 65 2d 68 65 61 64 65 72 20 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ize-header.name)................
6560 20 20 20 20 20 20 20 28 64 65 63 6f 64 65 2d 63 6f 64 69 6e 67 2d 73 74 72 69 6e 67 20 76 61 6c .......(decode-coding-string.val
6580 75 65 20 27 69 73 6f 2d 38 38 35 39 2d 31 29 29 20 68 65 61 64 65 72 73 29 29 29 0a 20 20 20 20 ue.'iso-8859-1)).headers))).....
65a0 20 20 28 77 68 65 6e 20 28 6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 72 5c 6e 22 29 0a 20 20 20 20 ..(when.(looking-at."\r\n").....
65c0 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20 20 ....(goto-char.(match-end.0))...
65e0 20 20 20 20 20 20 28 63 6f 6e 73 20 28 6c 69 73 74 20 6d 65 74 68 6f 64 20 70 61 74 68 20 76 65 ......(cons.(list.method.path.ve
6600 72 73 69 6f 6e 29 20 28 6e 72 65 76 65 72 73 65 20 68 65 61 64 65 72 73 29 29 29 29 29 29 0a 0a rsion).(nreverse.headers))))))..
6620 28 64 65 66 75 6e 20 68 74 74 70 64 2d 75 6e 68 65 78 20 28 73 74 72 29 0a 20 20 22 46 75 6c 6c (defun.httpd-unhex.(str)..."Full
6640 79 20 64 65 63 6f 64 65 20 74 68 65 20 55 52 4c 20 65 6e 63 6f 64 69 6e 67 20 69 6e 20 53 54 52 y.decode.the.URL.encoding.in.STR
6660 20 28 69 6e 63 6c 75 64 69 6e 67 20 2b 27 73 29 2e 22 0a 20 20 28 77 68 65 6e 20 73 74 72 0a 20 .(including.+'s)."...(when.str..
6680 20 20 20 28 6c 65 74 20 28 28 6e 6f 6e 70 6c 75 73 73 65 64 20 28 72 65 70 6c 61 63 65 2d 72 65 ...(let.((nonplussed.(replace-re
66a0 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 22 2b 22 gexp-in-string.(regexp-quote."+"
66c0 29 20 22 20 22 20 73 74 72 29 29 29 0a 20 20 20 20 20 20 28 64 65 63 6f 64 65 2d 63 6f 64 69 6e ).".".str))).......(decode-codin
66e0 67 2d 73 74 72 69 6e 67 20 28 75 72 6c 2d 75 6e 68 65 78 2d 73 74 72 69 6e 67 20 6e 6f 6e 70 6c g-string.(url-unhex-string.nonpl
6700 75 73 73 65 64 20 74 29 20 27 75 74 66 2d 38 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 ussed.t).'utf-8))))..(defun.http
6720 64 2d 70 61 72 73 65 2d 61 72 67 73 20 28 61 72 67 73 74 72 29 0a 20 20 22 50 61 72 73 65 20 61 d-parse-args.(argstr)..."Parse.a
6740 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 55 52 4c 20 65 6e 63 6f 64 65 64 20 61 .string.containing.URL.encoded.a
6760 72 67 75 6d 65 6e 74 73 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 7a 65 72 6f 70 20 28 6c 65 6e rguments."...(unless.(zerop.(len
6780 67 74 68 20 61 72 67 73 74 72 29 29 0a 20 20 20 20 28 6d 61 70 63 61 72 20 28 6c 61 6d 62 64 61 gth.argstr)).....(mapcar.(lambda
67a0 20 28 73 74 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63 61 72 20 27 68 74 .(str)...............(mapcar.'ht
67c0 74 70 64 2d 75 6e 68 65 78 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 73 74 72 20 22 3d 22 29 tpd-unhex.(split-string.str."=")
67e0 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 61 72 67 )).............(split-string.arg
6800 73 74 72 20 22 26 22 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 70 61 72 73 65 2d str."&"))))..(defun.httpd-parse-
6820 75 72 69 20 28 75 72 69 29 0a 20 20 22 53 70 6c 69 74 20 61 20 55 52 49 20 69 6e 74 6f 20 69 74 uri.(uri)..."Split.a.URI.into.it
6840 73 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0a 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 s.components..The.first.element.
6860 6f 66 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 63 72 69 70 of.the.return.value.is.the.scrip
6880 74 20 70 61 74 68 2c 20 74 68 65 0a 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 69 73 20 61 6e t.path,.the.second.element.is.an
68a0 20 61 6c 69 73 74 20 6f 66 20 76 61 72 69 61 62 6c 65 2f 76 61 6c 75 65 20 70 61 69 72 73 2c 20 .alist.of.variable/value.pairs,.
68c0 61 6e 64 20 74 68 65 20 74 68 69 72 64 0a 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 66 72 61 and.the.third.element.is.the.fra
68e0 67 6d 65 6e 74 2e 22 0a 20 20 28 6c 65 74 20 28 28 70 31 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 gment."...(let.((p1.(string-matc
6900 68 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 22 3f 22 29 20 75 72 69 29 29 0a 20 20 20 20 20 h.(regexp-quote."?").uri))......
6920 20 20 20 28 70 32 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 2d 71 75 6f ...(p2.(string-match.(regexp-quo
6940 74 65 20 22 23 22 29 20 75 72 69 29 29 0a 20 20 20 20 20 20 20 20 72 65 74 76 61 6c 29 0a 20 20 te."#").uri)).........retval)...
6960 20 20 28 70 75 73 68 20 28 69 66 20 70 32 20 28 68 74 74 70 64 2d 75 6e 68 65 78 20 28 73 75 62 ..(push.(if.p2.(httpd-unhex.(sub
6980 73 74 72 69 6e 67 20 75 72 69 20 28 31 2b 20 70 32 29 29 29 29 20 72 65 74 76 61 6c 29 0a 20 20 string.uri.(1+.p2)))).retval)...
69a0 20 20 28 70 75 73 68 20 28 69 66 20 70 31 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 61 72 67 73 ..(push.(if.p1.(httpd-parse-args
69c0 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 20 28 31 2b 20 70 31 29 20 70 32 29 29 29 20 72 65 .(substring.uri.(1+.p1).p2))).re
69e0 74 76 61 6c 29 0a 20 20 20 20 28 70 75 73 68 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 20 30 tval).....(push.(substring.uri.0
6a00 20 28 6f 72 20 70 31 20 70 32 29 29 20 72 65 74 76 61 6c 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 .(or.p1.p2)).retval)))..(defun.h
6a20 74 74 70 64 2d 65 73 63 61 70 65 2d 68 74 6d 6c 2d 62 75 66 66 65 72 20 28 29 0a 20 20 22 45 73 ttpd-escape-html-buffer.()..."Es
6a40 63 61 70 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 cape.current.buffer.contents.to.
6a60 62 65 20 73 61 66 65 20 66 6f 72 20 69 6e 73 65 72 74 69 6e 67 20 69 6e 74 6f 20 48 54 4d 4c 2e be.safe.for.inserting.into.HTML.
6a80 22 0a 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 28 77 "...(goto-char.(point-min))...(w
6aa0 68 69 6c 65 20 28 73 65 61 72 63 68 2d 66 6f 72 77 61 72 64 2d 72 65 67 65 78 70 20 22 5b 3c 3e hile.(search-forward-regexp."[<>
6ac0 26 5d 22 20 6e 69 6c 20 74 29 0a 20 20 20 20 28 72 65 70 6c 61 63 65 2d 6d 61 74 63 68 0a 20 20 &]".nil.t).....(replace-match...
6ae0 20 20 20 28 63 6c 2d 63 61 73 65 20 28 61 72 65 66 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 ...(cl-case.(aref.(match-string.
6b00 30 29 20 30 29 0a 20 20 20 20 20 20 20 28 3f 3c 20 22 26 6c 74 3b 22 29 0a 20 20 20 20 20 20 20 0).0)........(?<."&lt;")........
6b20 28 3f 3e 20 22 26 67 74 3b 22 29 0a 20 20 20 20 20 20 20 28 3f 26 20 22 26 61 6d 70 3b 22 29 29 (?>."&gt;")........(?&."&amp;"))
6b40 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 65 73 63 61 70 65 2d 68 74 6d 6c 20 28 73 )))..(defun.httpd-escape-html.(s
6b60 74 72 69 6e 67 29 0a 20 20 22 45 73 63 61 70 65 20 53 54 52 49 4e 47 20 73 6f 20 74 68 61 74 20 tring)..."Escape.STRING.so.that.
6b80 69 74 27 73 20 73 61 66 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 61 6e 20 48 54 4d 4c it's.safe.to.insert.into.an.HTML
6ba0 20 64 6f 63 75 6d 65 6e 74 2e 22 0a 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a .document."...(with-temp-buffer.
6bc0 20 20 20 20 28 69 6e 73 65 72 74 20 73 74 72 69 6e 67 29 0a 20 20 20 20 28 68 74 74 70 64 2d 65 ....(insert.string).....(httpd-e
6be0 73 63 61 70 65 2d 68 74 6d 6c 2d 62 75 66 66 65 72 29 0a 20 20 20 20 28 62 75 66 66 65 72 2d 73 scape-html-buffer).....(buffer-s
6c00 74 72 69 6e 67 29 29 29 0a 0a 3b 3b 20 50 61 74 68 20 68 61 6e 64 6c 69 6e 67 0a 0a 28 64 65 66 tring)))..;;.Path.handling..(def
6c20 75 6e 20 68 74 74 70 64 2d 73 74 61 74 75 73 20 28 70 61 74 68 29 0a 20 20 22 44 65 74 65 72 6d un.httpd-status.(path)..."Determ
6c40 69 6e 65 20 73 74 61 74 75 73 20 63 6f 64 65 20 66 6f 72 20 50 41 54 48 2e 22 0a 20 20 28 63 6f ine.status.code.for.PATH."...(co
6c60 6e 64 0a 20 20 20 28 28 6e 6f 74 20 28 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 70 61 74 68 29 nd....((not.(file-exists-p.path)
6c80 29 20 20 20 34 30 34 29 0a 20 20 20 28 28 6e 6f 74 20 28 66 69 6c 65 2d 72 65 61 64 61 62 6c 65 )...404)....((not.(file-readable
6ca0 2d 70 20 70 61 74 68 29 29 20 34 30 33 29 0a 20 20 20 28 28 61 6e 64 20 28 66 69 6c 65 2d 64 69 -p.path)).403)....((and.(file-di
6cc0 72 65 63 74 6f 72 79 2d 70 20 70 61 74 68 29 20 28 6e 6f 74 20 68 74 74 70 64 2d 6c 69 73 74 69 rectory-p.path).(not.httpd-listi
6ce0 6e 67 73 29 29 20 34 30 33 29 0a 20 20 20 28 32 30 30 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 ngs)).403)....(200)))..(defun.ht
6d00 74 70 64 2d 63 6c 65 61 6e 2d 70 61 74 68 20 28 70 61 74 68 29 0a 20 20 22 43 6c 65 61 6e 20 64 tpd-clean-path.(path)..."Clean.d
6d20 61 6e 67 65 72 6f 75 73 20 2e 2e 20 66 72 6f 6d 20 50 41 54 48 20 61 6e 64 20 72 65 6d 6f 76 65 angerous....from.PATH.and.remove
6d40 20 74 68 65 20 6c 65 61 64 69 6e 67 20 73 6c 61 73 68 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 73 .the.leading.slash."...(let*.((s
6d60 65 70 20 28 69 66 20 28 6d 65 6d 62 65 72 20 73 79 73 74 65 6d 2d 74 79 70 65 20 27 28 77 69 6e ep.(if.(member.system-type.'(win
6d80 64 6f 77 73 2d 6e 74 20 6d 73 2d 64 6f 73 29 29 20 22 5b 2f 5c 5c 5d 22 20 22 2f 22 29 29 0a 20 dows-nt.ms-dos))."[/\\]"."/"))..
6da0 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 20 28 64 65 6c 65 74 65 20 22 2e 2e 22 20 28 73 70 6c ........(split.(delete."..".(spl
6dc0 69 74 2d 73 74 72 69 6e 67 20 70 61 74 68 20 73 65 70 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 it-string.path.sep)))..........(
6de0 75 6e 73 70 6c 69 74 20 28 6d 61 70 63 6f 6e 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28 64 65 unsplit.(mapconcat.'identity.(de
6e00 6c 65 74 65 20 22 22 20 73 70 6c 69 74 29 20 22 2f 22 29 29 29 0a 20 20 20 20 28 63 6f 6e 63 61 lete."".split)."/"))).....(conca
6e20 74 20 22 2e 2f 22 20 75 6e 73 70 6c 69 74 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d t."./".unsplit)))..(defun.httpd-
6e40 67 65 6e 2d 70 61 74 68 20 28 70 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 72 6f 6f 74 29 0a 20 gen-path.(path.&optional.root)..
6e60 20 22 54 72 61 6e 73 6c 61 74 65 20 47 45 54 20 74 6f 20 73 65 63 75 72 65 20 70 61 74 68 20 69 ."Translate.GET.to.secure.path.i
6e80 6e 20 52 4f 4f 54 20 28 60 68 74 74 70 64 2d 72 6f 6f 74 27 29 2e 22 0a 20 20 28 6c 65 74 20 28 n.ROOT.(`httpd-root')."...(let.(
6ea0 28 63 6c 65 61 6e 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 68 74 74 70 64 2d (clean.(expand-file-name.(httpd-
6ec0 63 6c 65 61 6e 2d 70 61 74 68 20 70 61 74 68 29 20 28 6f 72 20 72 6f 6f 74 20 68 74 74 70 64 2d clean-path.path).(or.root.httpd-
6ee0 72 6f 6f 74 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d 64 69 72 65 63 74 6f 72 79 root)))).....(if.(file-directory
6f00 2d 70 20 63 6c 65 61 6e 29 0a 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 64 69 72 20 28 66 -p.clean).........(let*.((dir.(f
6f20 69 6c 65 2d 6e 61 6d 65 2d 61 73 2d 64 69 72 65 63 74 6f 72 79 20 63 6c 65 61 6e 29 29 0a 20 20 ile-name-as-directory.clean))...
6f40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 64 65 78 65 73 20 28 63 6c 2d 6d 61 70 63 61 72 .............(indexes.(cl-mapcar
6f60 20 28 61 70 70 6c 79 2d 70 61 72 74 69 61 6c 6c 79 20 27 63 6f 6e 63 61 74 20 64 69 72 29 20 68 .(apply-partially.'concat.dir).h
6f80 74 74 70 64 2d 69 6e 64 65 78 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 ttpd-indexes))................(e
6fa0 78 69 73 74 69 6e 67 20 28 63 6c 2d 72 65 6d 6f 76 65 2d 69 66 2d 6e 6f 74 20 27 66 69 6c 65 2d xisting.(cl-remove-if-not.'file-
6fc0 65 78 69 73 74 73 2d 70 20 69 6e 64 65 78 65 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6f exists-p.indexes)))...........(o
6fe0 72 20 28 63 61 72 20 65 78 69 73 74 69 6e 67 29 20 64 69 72 29 29 0a 20 20 20 20 20 20 63 6c 65 r.(car.existing).dir)).......cle
7000 61 6e 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 67 65 74 2d 73 65 72 76 6c 65 74 20 an)))..(defun.httpd-get-servlet.
7020 28 75 72 69 2d 70 61 74 68 29 0a 20 20 22 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 65 72 76 (uri-path)..."Determine.the.serv
7040 6c 65 74 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 55 52 49 2d 50 41 54 48 2e let.to.be.executed.for.URI-PATH.
7060 22 0a 20 20 28 69 66 20 28 6e 6f 74 20 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 29 0a 20 20 20 "...(if.(not.httpd-servlets)....
7080 20 20 20 27 68 74 74 70 64 2f 0a 20 20 20 20 28 63 6c 2d 6c 61 62 65 6c 73 20 28 28 63 61 74 20 ...'httpd/.....(cl-labels.((cat.
70a0 28 78 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 22 68 (x)...................(concat."h
70c0 74 74 70 64 2f 22 20 28 6d 61 70 63 6f 6e 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28 72 65 76 ttpd/".(mapconcat.'identity.(rev
70e0 65 72 73 65 20 78 29 20 22 2f 22 29 29 29 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 72 erse.x)."/")))).......(let.((par
7100 74 73 20 28 63 64 72 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 28 64 69 72 65 63 74 6f 72 79 ts.(cdr.(split-string.(directory
7120 2d 66 69 6c 65 2d 6e 61 6d 65 20 75 72 69 2d 70 61 74 68 29 20 22 2f 22 29 29 29 29 0a 20 20 20 -file-name.uri-path)."/"))))....
7140 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 28 63 6c 2d 66 69 6e 64 2d 69 66 20 27 66 .....(or..........(cl-find-if.'f
7160 62 6f 75 6e 64 70 20 28 6d 61 70 63 61 72 20 27 69 6e 74 65 72 6e 2d 73 6f 66 74 0a 20 20 20 20 boundp.(mapcar.'intern-soft.....
7180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
71a0 20 20 28 63 6c 2d 6d 61 70 6c 69 73 74 20 23 27 63 61 74 20 28 72 65 76 65 72 73 65 20 70 61 72 ..(cl-maplist.#'cat.(reverse.par
71c0 74 73 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 27 68 74 74 70 64 2f 29 29 29 29 29 0a 0a 28 64 ts))))..........'httpd/)))))..(d
71e0 65 66 75 6e 20 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f 74 20 28 70 72 6f 63 20 72 6f 6f 74 efun.httpd-serve-root.(proc.root
7200 20 75 72 69 2d 70 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 72 65 71 75 65 73 74 29 0a 20 20 22 .uri-path.&optional.request)..."
7220 53 65 63 75 72 65 6c 79 20 73 65 72 76 65 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 52 4f 4f 54 20 Securely.serve.a.file.from.ROOT.
7240 66 72 6f 6d 20 75 6e 64 65 72 20 50 41 54 48 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 70 61 74 68 from.under.PATH."...(let*.((path
7260 20 28 68 74 74 70 64 2d 67 65 6e 2d 70 61 74 68 20 75 72 69 2d 70 61 74 68 20 72 6f 6f 74 29 29 .(httpd-gen-path.uri-path.root))
7280 0a 20 20 20 20 20 20 20 20 20 28 73 74 61 74 75 73 20 28 68 74 74 70 64 2d 73 74 61 74 75 73 20 ..........(status.(httpd-status.
72a0 70 61 74 68 29 29 29 0a 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 28 28 6e 6f 74 20 28 3d 20 path))).....(cond......((not.(=.
72c0 73 74 61 74 75 73 20 32 30 30 29 29 20 20 20 20 28 68 74 74 70 64 2d 65 72 72 6f 72 20 20 20 20 status.200))....(httpd-error....
72e0 20 20 20 20 20 20 70 72 6f 63 20 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 28 28 66 69 6c 65 2d ......proc.status))......((file-
7300 64 69 72 65 63 74 6f 72 79 2d 70 20 70 61 74 68 29 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 64 69 directory-p.path).(httpd-send-di
7320 72 65 63 74 6f 72 79 20 70 72 6f 63 20 70 61 74 68 20 75 72 69 2d 70 61 74 68 29 29 0a 20 20 20 rectory.proc.path.uri-path))....
7340 20 20 28 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 ..(t.......................(http
7360 64 2d 73 65 6e 64 2d 66 69 6c 65 20 20 20 20 20 20 70 72 6f 63 20 70 61 74 68 20 72 65 71 75 65 d-send-file......proc.path.reque
7380 73 74 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2f 20 28 70 72 6f 63 20 75 72 69 st)))))..(defun.httpd/.(proc.uri
73a0 2d 70 61 74 68 20 71 75 65 72 79 20 72 65 71 75 65 73 74 29 0a 20 20 22 44 65 66 61 75 6c 74 20 -path.query.request)..."Default.
73c0 72 6f 6f 74 20 73 65 72 76 6c 65 74 20 77 68 69 63 68 20 73 65 72 76 65 73 20 66 69 6c 65 73 20 root.servlet.which.serves.files.
73e0 77 68 65 6e 20 68 74 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 69 73 20 54 2e 22 0a 20 20 when.httpd-serve-files.is.T."...
7400 28 69 66 20 28 61 6e 64 20 68 74 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 68 74 74 70 64 (if.(and.httpd-serve-files.httpd
7420 2d 72 6f 6f 74 29 0a 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f 74 20 70 -root).......(httpd-serve-root.p
7440 72 6f 63 20 68 74 74 70 64 2d 72 6f 6f 74 20 75 72 69 2d 70 61 74 68 20 72 65 71 75 65 73 74 29 roc.httpd-root.uri-path.request)
7460 0a 20 20 20 20 28 68 74 74 70 64 2d 65 72 72 6f 72 20 70 72 6f 63 20 34 30 33 29 29 29 0a 0a 28 .....(httpd-error.proc.403)))..(
7480 64 65 66 75 6e 20 68 74 74 70 64 2d 67 65 74 2d 6d 69 6d 65 20 28 65 78 74 29 0a 20 20 22 46 65 defun.httpd-get-mime.(ext)..."Fe
74a0 74 63 68 20 4d 49 4d 45 20 74 79 70 65 20 67 69 76 65 6e 20 74 68 65 20 66 69 6c 65 20 65 78 74 tch.MIME.type.given.the.file.ext
74c0 65 6e 74 69 6f 6e 2e 22 0a 20 20 28 6f 72 20 28 61 6e 64 20 65 78 74 20 28 63 64 72 20 28 61 73 ention."...(or.(and.ext.(cdr.(as
74e0 73 6f 63 20 28 64 6f 77 6e 63 61 73 65 20 65 78 74 29 20 68 74 74 70 64 2d 6d 69 6d 65 2d 74 79 soc.(downcase.ext).httpd-mime-ty
7500 70 65 73 29 29 29 0a 20 20 20 20 20 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74 65 74 2d pes)))......."application/octet-
7520 73 74 72 65 61 6d 22 29 29 0a 0a 3b 3b 20 44 61 74 61 20 73 65 6e 64 69 6e 67 20 66 75 6e 63 74 stream"))..;;.Data.sending.funct
7540 69 6f 6e 73 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 28 ions..(defun.httpd-send-header.(
7560 70 72 6f 63 20 6d 69 6d 65 20 73 74 61 74 75 73 20 26 72 65 73 74 20 68 65 61 64 65 72 2d 6b 65 proc.mime.status.&rest.header-ke
7580 79 73 29 0a 20 20 22 53 65 6e 64 20 61 6e 20 48 54 54 50 20 68 65 61 64 65 72 20 77 69 74 68 20 ys)..."Send.an.HTTP.header.with.
75a0 67 69 76 65 6e 20 4d 49 4d 45 20 74 79 70 65 20 61 6e 64 20 53 54 41 54 55 53 2c 20 66 6f 6c 6c given.MIME.type.and.STATUS,.foll
75c0 6f 77 65 64 0a 62 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 66 66 65 72 2e 20 49 66 20 50 owed.by.the.current.buffer..If.P
75e0 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d ROC.is.T.use.the.`httpd-current-
7600 70 72 6f 63 27 0a 61 73 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0a 0a 45 78 74 72 61 20 68 65 61 proc'.as.the.process...Extra.hea
7620 64 65 72 73 20 63 61 6e 20 62 65 20 73 65 6e 74 20 62 79 20 73 75 70 70 6c 79 69 6e 67 20 74 68 ders.can.be.sent.by.supplying.th
7640 65 6d 20 6c 69 6b 65 20 6b 65 79 77 6f 72 64 73 2c 20 69 2e 65 2e 0a 0a 20 28 68 74 74 70 64 2d em.like.keywords,.i.e....(httpd-
7660 73 65 6e 64 2d 68 65 61 64 65 72 20 74 20 5c 22 74 65 78 74 2f 70 6c 61 69 6e 5c 22 20 32 30 30 send-header.t.\"text/plain\".200
7680 20 3a 58 2d 50 6f 77 65 72 65 64 2d 42 79 20 5c 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 5c 22 29 .:X-Powered-By.\"simple-httpd\")
76a0 22 0a 20 20 28 6c 65 74 20 28 28 73 74 61 74 75 73 2d 73 74 72 20 28 63 64 72 20 28 61 73 73 71 "...(let.((status-str.(cdr.(assq
76c0 20 73 74 61 74 75 73 20 68 74 74 70 64 2d 73 74 61 74 75 73 2d 63 6f 64 65 73 29 29 29 0a 20 20 .status.httpd-status-codes)))...
76e0 20 20 20 20 20 20 28 68 65 61 64 65 72 73 20 60 28 28 22 53 65 72 76 65 72 22 20 2e 20 2c 68 74 ......(headers.`(("Server"...,ht
7700 74 70 64 2d 73 65 72 76 65 72 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 tpd-server-name)................
7720 20 20 20 20 28 22 44 61 74 65 22 20 2e 20 2c 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 72 69 6e ....("Date"...,(httpd-date-strin
7740 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 22 43 6f 6e 6e 65 63 74 g))....................("Connect
7760 69 6f 6e 22 20 2e 20 22 6b 65 65 70 2d 61 6c 69 76 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 ion"..."keep-alive")............
7780 20 20 20 20 20 20 20 20 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22 20 2e 20 2c 28 68 74 74 70 ........("Content-Type"...,(http
77a0 64 2d 2d 73 74 72 69 6e 67 69 66 79 20 6d 69 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 d--stringify.mime)).............
77c0 20 20 20 20 20 20 20 28 22 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 22 20 2e 20 2c 28 68 74 74 .......("Content-Length"...,(htt
77e0 70 64 2d 2d 62 75 66 66 65 72 2d 73 69 7a 65 29 29 29 29 29 0a 20 20 20 20 28 75 6e 6c 65 73 73 pd--buffer-size))))).....(unless
7800 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 0a 20 20 20 20 20 20 28 73 65 74 66 20 .httpd--header-sent.......(setf.
7820 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20 74 29 0a 20 20 20 20 20 20 28 77 69 74 httpd--header-sent.t).......(wit
7840 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 h-temp-buffer.........(insert.(f
7860 6f 72 6d 61 74 20 22 48 54 54 50 2f 31 2e 31 20 25 64 20 25 73 5c 72 5c 6e 22 20 73 74 61 74 75 ormat."HTTP/1.1.%d.%s\r\n".statu
7880 73 20 73 74 61 74 75 73 2d 73 74 72 29 29 0a 20 20 20 20 20 20 20 20 28 63 6c 2d 6c 6f 6f 70 20 s.status-str)).........(cl-loop.
78a0 66 6f 72 20 28 68 65 61 64 65 72 20 76 61 6c 75 65 29 20 6f 6e 20 68 65 61 64 65 72 2d 6b 65 79 for.(header.value).on.header-key
78c0 73 20 62 79 20 23 27 63 64 64 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 s.by.#'cddr..................for
78e0 20 68 65 61 64 65 72 2d 6e 61 6d 65 20 3d 20 28 73 75 62 73 74 72 69 6e 67 20 28 73 79 6d 62 6f .header-name.=.(substring.(symbo
7900 6c 2d 6e 61 6d 65 20 68 65 61 64 65 72 29 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 l-name.header).1)...............
7920 20 20 20 66 6f 72 20 76 61 6c 75 65 2d 6e 61 6d 65 20 3d 20 28 66 6f 72 6d 61 74 20 22 25 73 22 ...for.value-name.=.(format."%s"
7940 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 .value)..................collect
7960 20 28 63 6f 6e 73 20 68 65 61 64 65 72 2d 6e 61 6d 65 20 76 61 6c 75 65 2d 6e 61 6d 65 29 20 69 .(cons.header-name.value-name).i
7980 6e 74 6f 20 65 78 74 72 61 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 nto.extras..................fina
79a0 6c 6c 79 20 28 73 65 74 66 20 68 65 61 64 65 72 73 20 28 6e 63 6f 6e 63 20 68 65 61 64 65 72 73 lly.(setf.headers.(nconc.headers
79c0 20 65 78 74 72 61 73 29 29 29 0a 20 20 20 20 20 20 20 20 28 64 6f 6c 69 73 74 20 28 68 65 61 64 .extras))).........(dolist.(head
79e0 65 72 20 68 65 61 64 65 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 er.headers)...........(insert.(f
7a00 6f 72 6d 61 74 20 22 25 73 3a 20 25 73 5c 72 5c 6e 22 20 28 63 61 72 20 68 65 61 64 65 72 29 20 ormat."%s:.%s\r\n".(car.header).
7a20 28 63 64 72 20 68 65 61 64 65 72 29 29 29 29 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 (cdr.header)))).........(insert.
7a40 22 5c 72 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 72 65 "\r\n").........(process-send-re
7a60 67 69 6f 6e 20 28 68 74 74 70 64 2d 72 65 73 6f 6c 76 65 2d 70 72 6f 63 20 70 72 6f 63 29 0a 20 gion.(httpd-resolve-proc.proc)..
7a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 6f 69 ............................(poi
7aa0 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 0a 20 20 20 20 20 20 28 70 72 6f nt-min).(point-max))).......(pro
7ac0 63 65 73 73 2d 73 65 6e 64 2d 72 65 67 69 6f 6e 20 28 68 74 74 70 64 2d 72 65 73 6f 6c 76 65 2d cess-send-region.(httpd-resolve-
7ae0 70 72 6f 63 20 70 72 6f 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 proc.proc)......................
7b00 20 20 20 20 20 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 ......(point-min).(point-max))))
7b20 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 20 28 70 72 6f 63 20 70 )..(defun.httpd-redirect.(proc.p
7b40 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 63 6f 64 65 29 0a 20 20 22 52 65 64 69 72 65 63 74 20 ath.&optional.code)..."Redirect.
7b60 74 68 65 20 63 6c 69 65 6e 74 20 74 6f 20 50 41 54 48 20 28 64 65 66 61 75 6c 74 20 33 30 31 29 the.client.to.PATH.(default.301)
7b80 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 0a 74 68 65 20 60 68 74 74 70 64 2d 63 75 ..If.PROC.is.T.use.the.`httpd-cu
7ba0 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 20 74 68 65 20 70 72 6f 63 65 73 73 2e 22 0a 20 20 28 rrent-proc'.as.the.process."...(
7bc0 68 74 74 70 64 2d 6c 6f 67 20 28 6c 69 73 74 20 27 72 65 64 69 72 65 63 74 20 70 61 74 68 29 29 httpd-log.(list.'redirect.path))
7be0 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 28 77 69 74 ...(httpd-discard-buffer)...(wit
7c00 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 h-temp-buffer.....(httpd-send-he
7c20 61 64 65 72 20 70 72 6f 63 20 22 74 65 78 74 2f 70 6c 61 69 6e 22 20 28 6f 72 20 63 6f 64 65 20 ader.proc."text/plain".(or.code.
7c40 33 30 31 29 20 3a 4c 6f 63 61 74 69 6f 6e 20 70 61 74 68 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 301).:Location.path)))..(defun.h
7c60 74 74 70 64 2d 73 65 6e 64 2d 66 69 6c 65 20 28 70 72 6f 63 20 70 61 74 68 20 26 6f 70 74 69 6f ttpd-send-file.(proc.path.&optio
7c80 6e 61 6c 20 72 65 71 29 0a 20 20 22 53 65 72 76 65 20 66 69 6c 65 20 74 6f 20 74 68 65 20 67 69 nal.req)..."Serve.file.to.the.gi
7ca0 76 65 6e 20 63 6c 69 65 6e 74 2e 20 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 ven.client...If.PROC.is.T.use.th
7cc0 65 0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 20 74 68 65 20 70 72 e.`httpd-current-proc'.as.the.pr
7ce0 6f 63 65 73 73 2e 22 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 ocess."...(httpd-discard-buffer)
7d00 0a 20 20 28 6c 65 74 20 28 28 72 65 71 2d 65 74 61 67 20 28 63 61 64 72 20 28 61 73 73 6f 63 20 ...(let.((req-etag.(cadr.(assoc.
7d20 22 49 66 2d 4e 6f 6e 65 2d 4d 61 74 63 68 22 20 72 65 71 29 29 29 0a 20 20 20 20 20 20 20 20 28 "If-None-Match".req))).........(
7d40 65 74 61 67 20 28 68 74 74 70 64 2d 65 74 61 67 20 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 etag.(httpd-etag.path)).........
7d60 28 6d 74 69 6d 65 20 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 72 69 6e 67 20 28 6e 74 68 20 34 (mtime.(httpd-date-string.(nth.4
7d80 20 28 66 69 6c 65 2d 61 74 74 72 69 62 75 74 65 73 20 70 61 74 68 29 29 29 29 29 0a 20 20 20 20 .(file-attributes.path))))).....
7da0 28 69 66 20 28 65 71 75 61 6c 20 72 65 71 2d 65 74 61 67 20 65 74 61 67 29 0a 20 20 20 20 20 20 (if.(equal.req-etag.etag).......
7dc0 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 28 68 ..(with-temp-buffer...........(h
7de0 74 74 70 64 2d 6c 6f 67 20 60 28 66 69 6c 65 20 2c 70 61 74 68 20 6e 6f 74 2d 6d 6f 64 69 66 69 ttpd-log.`(file.,path.not-modifi
7e00 65 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 ed))...........(httpd-send-heade
7e20 72 20 70 72 6f 63 20 22 74 65 78 74 2f 70 6c 61 69 6e 22 20 33 30 34 29 29 0a 20 20 20 20 20 20 r.proc."text/plain".304)).......
7e40 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 66 69 6c 65 20 2c 70 61 74 68 29 29 0a 20 20 20 20 20 20 (httpd-log.`(file.,path)).......
7e60 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 73 65 74 2d 62 (with-temp-buffer.........(set-b
7e80 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 28 69 6e uffer-multibyte.nil).........(in
7ea0 73 65 72 74 2d 66 69 6c 65 2d 63 6f 6e 74 65 6e 74 73 2d 6c 69 74 65 72 61 6c 6c 79 20 70 61 74 sert-file-contents-literally.pat
7ec0 68 29 0a 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 70 72 h).........(httpd-send-header.pr
7ee0 6f 63 20 28 68 74 74 70 64 2d 67 65 74 2d 6d 69 6d 65 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 65 78 oc.(httpd-get-mime.(file-name-ex
7f00 74 65 6e 73 69 6f 6e 20 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 tension.path))..................
7f20 20 20 20 20 20 20 20 20 20 20 32 30 30 20 3a 4c 61 73 74 2d 4d 6f 64 69 66 69 65 64 20 6d 74 69 ..........200.:Last-Modified.mti
7f40 6d 65 20 3a 45 54 61 67 20 65 74 61 67 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 me.:ETag.etag)))))..(defun.httpd
7f60 2d 73 65 6e 64 2d 64 69 72 65 63 74 6f 72 79 20 28 70 72 6f 63 20 70 61 74 68 20 75 72 69 2d 70 -send-directory.(proc.path.uri-p
7f80 61 74 68 29 0a 20 20 22 53 65 72 76 65 20 61 20 66 69 6c 65 20 6c 69 73 74 69 6e 67 20 74 6f 20 ath)..."Serve.a.file.listing.to.
7fa0 74 68 65 20 63 6c 69 65 6e 74 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 the.client..If.PROC.is.T.use.the
7fc0 0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 20 74 68 65 20 70 72 6f .`httpd-current-proc'.as.the.pro
7fe0 63 65 73 73 2e 22 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a cess."...(httpd-discard-buffer).
8000 20 20 28 6c 65 74 20 28 28 74 69 74 6c 65 20 28 63 6f 6e 63 61 74 20 22 44 69 72 65 63 74 6f 72 ..(let.((title.(concat."Director
8020 79 20 6c 69 73 74 69 6e 67 20 66 6f 72 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 y.listing.for.".................
8040 20 20 20 20 20 20 20 28 75 72 6c 2d 69 6e 73 65 72 74 2d 65 6e 74 69 74 69 65 73 2d 69 6e 2d 73 .......(url-insert-entities-in-s
8060 74 72 69 6e 67 20 75 72 69 2d 70 61 74 68 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 65 71 75 61 tring.uri-path)))).....(if.(equa
8080 6c 20 22 2f 22 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 2d 70 61 74 68 20 2d 31 29 29 0a 20 l."/".(substring.uri-path.-1))..
80a0 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 .......(with-temp-buffer........
80c0 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 64 69 72 65 63 74 6f 72 79 20 2c 70 61 74 68 29 ...(httpd-log.`(directory.,path)
80e0 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 21 44 4f 43 54 59 50 45 20 68 )...........(insert."<!DOCTYPE.h
8100 74 6d 6c 3e 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 68 74 6d tml>\n")...........(insert."<htm
8120 6c 3e 5c 6e 3c 68 65 61 64 3e 3c 74 69 74 6c 65 3e 22 20 74 69 74 6c 65 20 22 3c 2f 74 69 74 6c l>\n<head><title>".title."</titl
8140 65 3e 3c 2f 68 65 61 64 3e 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 e></head>\n")...........(insert.
8160 22 3c 62 6f 64 79 3e 5c 6e 3c 68 32 3e 22 20 74 69 74 6c 65 20 22 3c 2f 68 32 3e 5c 6e 3c 68 72 "<body>\n<h2>".title."</h2>\n<hr
8180 2f 3e 5c 6e 3c 75 6c 3e 22 29 0a 20 20 20 20 20 20 20 20 20 20 28 64 6f 6c 69 73 74 20 28 66 69 />\n<ul>")...........(dolist.(fi
81a0 6c 65 20 28 64 69 72 65 63 74 6f 72 79 2d 66 69 6c 65 73 20 70 61 74 68 29 29 0a 20 20 20 20 20 le.(directory-files.path))......
81c0 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 28 65 71 20 3f 2e 20 28 61 72 65 66 20 66 69 6c 65 .......(unless.(eq.?..(aref.file
81e0 20 30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 66 75 6c 6c 20 .0))...............(let*.((full.
8200 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 66 69 6c 65 20 70 61 74 68 29 29 0a 20 20 (expand-file-name.file.path))...
8220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 61 69 6c 20 28 69 66 20 28 66 69 ...................(tail.(if.(fi
8240 6c 65 2d 64 69 72 65 63 74 6f 72 79 2d 70 20 66 75 6c 6c 29 20 22 2f 22 20 22 22 29 29 0a 20 20 le-directory-p.full)."/".""))...
8260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 20 28 75 72 6c 2d 69 6e 73 65 72 ...................(f.(url-inser
8280 74 2d 65 6e 74 69 74 69 65 73 2d 69 6e 2d 73 74 72 69 6e 67 20 66 69 6c 65 29 29 0a 20 20 20 20 t-entities-in-string.file)).....
82a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 20 28 75 72 6c 2d 68 65 78 69 66 79 2d .................(l.(url-hexify-
82c0 73 74 72 69 6e 67 20 66 69 6c 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 string.file))).................(
82e0 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 5c 22 25 73 insert.(format."<li><a.href=\"%s
8300 25 73 5c 22 3e 25 73 25 73 3c 2f 61 3e 3c 2f 6c 69 3e 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 %s\">%s%s</a></li>\n"...........
8320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 20 74 61 69 6c 20 66 20 74 ......................l.tail.f.t
8340 61 69 6c 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 2f 75 6c ail)))))...........(insert."</ul
8360 3e 5c 6e 3c 68 72 2f 3e 5c 6e 3c 2f 62 6f 64 79 3e 5c 6e 3c 2f 68 74 6d 6c 3e 22 29 0a 20 20 20 >\n<hr/>\n</body>\n</html>")....
8380 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 70 72 6f 63 20 22 .......(httpd-send-header.proc."
83a0 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 20 32 30 30 29 29 0a text/html;.charset=utf-8".200)).
83c0 20 20 20 20 20 20 28 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 20 70 72 6f 63 20 28 63 6f 6e 63 ......(httpd-redirect.proc.(conc
83e0 61 74 20 75 72 69 2d 70 61 74 68 20 22 2f 22 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 at.uri-path."/")))))..(defun.htt
8400 70 64 2d 2d 62 75 66 66 65 72 2d 73 69 7a 65 20 28 26 6f 70 74 69 6f 6e 61 6c 20 62 75 66 66 65 pd--buffer-size.(&optional.buffe
8420 72 29 0a 20 20 22 47 65 74 20 74 68 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 69 6e 20 62 79 74 r)..."Get.the.buffer.size.in.byt
8440 65 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 6f 72 69 67 20 65 6e 61 62 6c 65 2d 6d 75 6c 74 69 62 es."...(let.((orig.enable-multib
8460 79 74 65 2d 63 68 61 72 61 63 74 65 72 73 29 0a 20 20 20 20 20 20 20 20 28 73 69 7a 65 20 30 29 yte-characters).........(size.0)
8480 29 0a 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 6f 72 20 62 ).....(with-current-buffer.(or.b
84a0 75 66 66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20 28 73 uffer.(current-buffer)).......(s
84c0 65 74 2d 62 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 28 et-buffer-multibyte.nil).......(
84e0 73 65 74 66 20 73 69 7a 65 20 28 62 75 66 66 65 72 2d 73 69 7a 65 29 29 0a 20 20 20 20 20 20 28 setf.size.(buffer-size)).......(
8500 69 66 20 6f 72 69 67 20 28 73 65 74 2d 62 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 65 20 6f 72 if.orig.(set-buffer-multibyte.or
8520 69 67 29 29 29 0a 20 20 20 20 73 69 7a 65 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 65 ig))).....size))..(defun.httpd-e
8540 72 72 6f 72 20 28 70 72 6f 63 20 73 74 61 74 75 73 20 26 6f 70 74 69 6f 6e 61 6c 20 69 6e 66 6f rror.(proc.status.&optional.info
8560 29 0a 20 20 22 53 65 6e 64 20 61 6e 20 65 72 72 6f 72 20 70 61 67 65 20 61 70 70 72 6f 70 72 69 )..."Send.an.error.page.appropri
8580 61 74 65 20 66 6f 72 20 53 54 41 54 55 53 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 2c 0a 6f 70 ate.for.STATUS.to.the.client,.op
85a0 74 69 6f 6e 61 6c 6c 79 20 69 6e 73 65 72 74 69 6e 67 20 6f 62 6a 65 63 74 20 49 4e 46 4f 20 69 tionally.inserting.object.INFO.i
85c0 6e 74 6f 20 70 61 67 65 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 0a 60 nto.page..If.PROC.is.T.use.the.`
85e0 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 20 74 68 65 20 70 72 6f 63 65 httpd-current-proc'.as.the.proce
8600 73 73 2e 22 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 ss."...(httpd-discard-buffer)...
8620 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 65 72 72 6f 72 20 2c 73 74 61 74 75 73 20 2c 69 6e 66 6f (httpd-log.`(error.,status.,info
8640 29 29 0a 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 28 6c 65 74 20 ))...(with-temp-buffer.....(let.
8660 28 28 68 74 6d 6c 20 28 6f 72 20 28 63 64 72 20 28 61 73 73 71 20 73 74 61 74 75 73 20 68 74 74 ((html.(or.(cdr.(assq.status.htt
8680 70 64 2d 68 74 6d 6c 29 29 20 22 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 74 65 6e pd-html)).""))...........(conten
86a0 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 69 6e 66 6f 29 0a 20 20 20 ts............(if.(not.info)....
86c0 20 20 20 20 20 20 20 20 20 20 20 20 22 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 ............""..............(wit
86e0 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 h-temp-buffer................(le
8700 74 20 28 28 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 20 28 63 75 72 72 65 6e 74 2d 62 75 66 t.((standard-output.(current-buf
8720 66 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 fer)))..................(insert.
8740 22 65 72 72 6f 72 3a 20 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 69 "error:.")..................(pri
8760 6e 63 20 69 6e 66 6f 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 nc.info)..................(inser
8780 74 20 22 5c 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 68 t."\n")..................(when.h
87a0 74 74 70 64 2d 73 68 6f 77 2d 62 61 63 6b 74 72 61 63 65 2d 77 68 65 6e 2d 65 72 72 6f 72 0a 20 ttpd-show-backtrace-when-error..
87c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 62 61 63 6b 74 ..................(insert."backt
87e0 72 61 63 65 3a 20 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 69 race:.")....................(pri
8800 6e 63 20 28 62 61 63 6b 74 72 61 63 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 nc.(backtrace)).................
8820 20 20 20 28 69 6e 73 65 72 74 20 22 5c 6e 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...(insert."\n"))...............
8840 20 20 20 28 68 74 74 70 64 2d 65 73 63 61 70 65 2d 68 74 6d 6c 2d 62 75 66 66 65 72 29 0a 20 20 ...(httpd-escape-html-buffer)...
8860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 75 66 66 65 72 2d 73 74 72 69 6e 67 29 29 29 ...............(buffer-string)))
8880 29 29 29 0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 68 74 6d 6c 20 63 ))).......(insert.(format.html.c
88a0 6f 6e 74 65 6e 74 73 29 29 29 0a 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 ontents))).....(httpd-send-heade
88c0 72 20 70 72 6f 63 20 22 74 65 78 74 2f 68 74 6d 6c 22 20 73 74 61 74 75 73 29 29 29 0a 0a 28 64 r.proc."text/html".status)))..(d
88e0 65 66 75 6e 20 68 74 74 70 64 2d 2d 65 72 72 6f 72 2d 73 61 66 65 20 28 26 72 65 73 74 20 61 72 efun.httpd--error-safe.(&rest.ar
8900 67 73 29 0a 20 20 22 43 61 6c 6c 20 68 74 74 70 64 2d 65 72 72 6f 72 20 61 6e 64 20 72 65 70 6f gs)..."Call.httpd-error.and.repo
8920 72 74 20 66 61 69 6c 75 72 65 73 20 74 6f 20 2a 68 74 74 70 64 2a 2e 22 0a 20 20 28 63 6f 6e 64 rt.failures.to.*httpd*."...(cond
8940 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 6f 72 2d 63 61 73 65 0a 20 20 20 20 20 20 28 61 70 70 ition-case.error-case.......(app
8960 6c 79 20 23 27 68 74 74 70 64 2d 65 72 72 6f 72 20 61 72 67 73 29 0a 20 20 20 20 28 65 72 72 6f ly.#'httpd-error.args).....(erro
8980 72 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 68 61 72 64 2d 65 72 72 6f 72 20 2c 65 72 72 6f 72 r.(httpd-log.`(hard-error.,error
89a0 2d 63 61 73 65 29 29 29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20 27 73 69 6d 70 6c 65 2d 68 74 74 -case)))))..(provide.'simple-htt
89c0 70 64 29 0a 0a 3b 3b 3b 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 2e 65 6c 20 65 6e 64 73 20 68 65 pd)..;;;.simple-httpd.el.ends.he
89e0 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 re..............................
8a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
90a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
90c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
90e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
91a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
91c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
91e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
92a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
92c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
92e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
93a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
93c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
93e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
94a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
94c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
94e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
95a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
95c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
95e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
96a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
96c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
96e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
97a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
97c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
97e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
98a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
98c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
98e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
99a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
99c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
99e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9c80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................