summaryrefslogtreecommitdiff
path: root/.localrepo/simple-httpd-20230821.1458.tar
blob: ec40a33919eaae52c2f0bff1ef1787f8e32d3a00 (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 36 34 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 37 31 34 31 00 20 30 00 00 00 0000640.00000000000.017141..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 3b 3b 20 2d 2a 2d 20 6e 6f 2d 62 79 74 65 2d 63 6f 6d 70 69 6c 65 3a 20 74 3b 20 6c 65 78 69 63 ;;.-*-.no-byte-compile:.t;.lexic
0420 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 6e 69 6c 20 2d 2a 2d 0a 28 64 65 66 69 6e 65 2d 70 61 63 6b al-binding:.nil.-*-.(define-pack
0440 61 67 65 20 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 22 20 22 32 30 32 33 30 38 32 31 2e 31 34 35 age."simple-httpd"."20230821.145
0460 38 22 0a 20 20 22 50 75 72 65 20 65 6c 69 73 70 20 48 54 54 50 20 73 65 72 76 65 72 2e 22 0a 20 8"..."Pure.elisp.HTTP.server."..
0480 20 27 28 28 63 6c 2d 6c 69 62 20 22 30 2e 33 22 29 29 0a 20 20 3a 75 72 6c 20 22 68 74 74 70 73 .'((cl-lib."0.3"))...:url."https
04a0 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 70 2d ://github.com/skeeto/emacs-http-
04c0 73 65 72 76 65 72 22 0a 20 20 3a 63 6f 6d 6d 69 74 20 22 33 34 37 63 33 30 34 39 34 64 33 62 63 server"...:commit."347c30494d3bc
04e0 66 63 37 39 64 65 33 35 65 35 34 35 33 38 66 39 32 66 34 65 34 61 34 36 65 63 64 22 0a 20 20 3a fc79de35e54538f92f4e4a46ecd"...:
0500 72 65 76 64 65 73 63 20 22 33 34 37 63 33 30 34 39 34 64 33 62 22 0a 20 20 3a 61 75 74 68 6f 72 revdesc."347c30494d3b"...:author
0520 73 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 77 65 s.'(("Christopher.Wellons"..."we
0540 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 69 6e llons@nullprogram.com"))...:main
0560 74 61 69 6e 65 72 73 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 tainers.'(("Christopher.Wellons"
0580 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 29 29 0a ..."wellons@nullprogram.com"))).
05a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
05c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
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 31 30 32 35 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 36 33 36 31 00 20 30 00 00 00 0101025.00000000000.016361..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 50 61 63 6b 61 67 65 2d 56 65 72 73 69 6f 6e 3a 20 32 30 32 p-server.;;.Package-Version:.202
0900 33 30 38 32 31 2e 31 34 35 38 0a 3b 3b 20 50 61 63 6b 61 67 65 2d 52 65 76 69 73 69 6f 6e 3a 20 30821.1458.;;.Package-Revision:.
0920 33 34 37 63 33 30 34 39 34 64 33 62 0a 3b 3b 20 50 61 63 6b 61 67 65 2d 52 65 71 75 69 72 65 73 347c30494d3b.;;.Package-Requires
0940 3a 20 28 28 63 6c 2d 6c 69 62 20 22 30 2e 33 22 29 29 0a 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 :.((cl-lib."0.3"))..;;;.Commenta
0960 72 79 3a 0a 0a 3b 3b 20 55 73 65 20 60 68 74 74 70 64 2d 73 74 61 72 74 27 20 74 6f 20 73 74 61 ry:..;;.Use.`httpd-start'.to.sta
0980 72 74 20 74 68 65 20 77 65 62 20 73 65 72 76 65 72 2e 20 46 69 6c 65 73 20 61 72 65 20 73 65 72 rt.the.web.server..Files.are.ser
09a0 76 65 64 20 66 72 6f 6d 0a 3b 3b 20 60 68 74 74 70 64 2d 72 6f 6f 74 27 20 6f 6e 20 70 6f 72 74 ved.from.;;.`httpd-root'.on.port
09c0 20 60 68 74 74 70 64 2d 70 6f 72 74 27 20 75 73 69 6e 67 20 60 68 74 74 70 64 2d 69 70 2d 66 61 .`httpd-port'.using.`httpd-ip-fa
09e0 6d 69 6c 79 27 20 61 74 20 68 6f 73 74 0a 3b 3b 20 60 68 74 74 70 64 2d 68 6f 73 74 27 2e 20 57 mily'.at.host.;;.`httpd-host'..W
0a00 68 69 6c 65 20 74 68 65 20 72 6f 6f 74 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 61 74 20 hile.the.root.can.be.changed.at.
0a20 61 6e 79 20 74 69 6d 65 2c 20 74 68 65 20 73 65 72 76 65 72 0a 3b 3b 20 6e 65 65 64 73 20 74 6f any.time,.the.server.;;.needs.to
0a40 20 62 65 20 72 65 73 74 61 72 74 65 64 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 61 20 70 6f 72 .be.restarted.in.order.for.a.por
0a60 74 20 63 68 61 6e 67 65 20 74 6f 20 74 61 6b 65 20 65 66 66 65 63 74 2e 0a 0a 3b 3b 20 45 76 65 t.change.to.take.effect...;;.Eve
0a80 72 79 74 68 69 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 73 65 72 76 6c 65 74 73 rything.is.performed.by.servlets
0aa0 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 65 72 76 69 6e 67 0a 3b 3b 20 66 69 6c 65 73 2e 20 53 65 ,.including.serving.;;.files..Se
0ac0 72 76 6c 65 74 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 62 79 20 73 65 74 74 69 6e 67 20 60 68 rvlets.are.enabled.by.setting.`h
0ae0 74 74 70 64 2d 73 65 72 76 6c 65 74 73 27 20 74 6f 20 74 72 75 65 0a 3b 3b 20 28 64 65 66 61 75 ttpd-servlets'.to.true.;;.(defau
0b00 6c 74 29 2e 20 53 65 72 76 6c 65 74 73 20 61 72 65 20 66 6f 75 72 2d 70 61 72 61 6d 65 74 65 72 lt)..Servlets.are.four-parameter
0b20 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 0a 3b 3b 20 22 68 .functions.that.begin.with.;;."h
0b40 74 74 70 64 2f 22 20 77 68 65 72 65 20 74 68 65 20 74 72 61 69 6c 69 6e 67 20 63 6f 6d 70 6f 6e ttpd/".where.the.trailing.compon
0b60 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 69 6e 69 74 69 61 6c 20 70 61 74 68 20 6f ent.specifies.the.initial.path.o
0b80 6e 0a 3b 3b 20 74 68 65 20 73 65 72 76 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 n.;;.the.server..For.example,.th
0ba0 65 20 66 75 6e 63 74 69 6f 6e 20 60 68 74 74 70 64 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 27 20 77 e.function.`httpd/hello-world'.w
0bc0 69 6c 6c 20 62 65 0a 3b 3b 20 63 61 6c 6c 65 64 20 66 6f 72 20 74 68 65 20 72 65 71 75 65 73 74 ill.be.;;.called.for.the.request
0be0 20 22 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 22 20 61 6e 64 20 22 2f 68 65 6c 6c 6f 2d 77 6f 72 6c ."/hello-world".and."/hello-worl
0c00 64 2f 66 6f 6f 22 2e 0a 0a 3b 3b 20 54 68 65 20 64 65 66 61 75 6c 74 20 73 65 72 76 6c 65 74 20 d/foo"...;;.The.default.servlet.
0c20 60 68 74 74 70 64 2f 27 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 73 65 72 76 65 73 20 `httpd/'.is.the.one.that.serves.
0c40 66 69 6c 65 73 20 66 72 6f 6d 0a 3b 3b 20 60 68 74 74 70 64 2d 72 6f 6f 74 27 20 61 6e 64 20 63 files.from.;;.`httpd-root'.and.c
0c60 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 74 68 72 6f 75 67 68 20 72 65 64 65 66 69 6e an.be.turned.off.through.redefin
0c80 69 74 69 6f 6e 20 6f 72 20 73 65 74 74 69 6e 67 0a 3b 3b 20 60 68 74 74 70 64 2d 73 65 72 76 65 ition.or.setting.;;.`httpd-serve
0ca0 2d 66 69 6c 65 73 27 20 74 6f 20 6e 69 6c 2e 20 49 74 20 69 73 20 75 73 65 64 20 65 76 65 6e 20 -files'.to.nil..It.is.used.even.
0cc0 77 68 65 6e 20 60 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 27 0a 3b 3b 20 69 73 20 6e 69 6c 2e when.`httpd-servlets'.;;.is.nil.
0ce0 0a 0a 3b 3b 20 54 68 65 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 20 66 6f 72 20 61 20 73 ..;;.The.four.parameters.for.a.s
0d00 65 72 76 6c 65 74 20 61 72 65 20 70 72 6f 63 65 73 73 2c 20 55 52 49 20 70 61 74 68 2c 20 47 45 ervlet.are.process,.URI.path,.GE
0d20 54 2f 50 4f 53 54 0a 3b 3b 20 61 72 67 75 6d 65 6e 74 73 20 28 61 6c 69 73 74 29 2c 20 61 6e 64 T/POST.;;.arguments.(alist),.and
0d40 20 74 68 65 20 66 75 6c 6c 20 72 65 71 75 65 73 74 20 6f 62 6a 65 63 74 20 28 68 65 61 64 65 72 .the.full.request.object.(header
0d60 0a 3b 3b 20 61 6c 69 73 74 29 2e 20 54 68 65 73 65 20 61 72 65 20 6f 72 64 65 72 65 64 20 62 79 .;;.alist)..These.are.ordered.by
0d80 20 67 65 6e 65 72 61 6c 20 69 6d 70 6f 72 74 61 6e 63 65 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 .general.importance.so.that.some
0da0 20 63 61 6e 20 62 65 0a 3b 3b 20 69 67 6e 6f 72 65 64 2e 20 54 77 6f 20 6d 61 63 72 6f 73 20 61 .can.be.;;.ignored..Two.macros.a
0dc0 72 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65 6c 70 20 77 69 74 68 20 77 72 69 74 69 6e 67 re.provided.to.help.with.writing
0de0 20 73 65 72 76 6c 65 74 73 2e 0a 0a 3b 3b 20 20 2a 20 60 77 69 74 68 2d 68 74 74 70 64 2d 62 75 .servlets...;;..*.`with-httpd-bu
0e00 66 66 65 72 27 20 2d 2d 20 43 72 65 61 74 65 73 20 61 20 74 65 6d 70 6f 72 61 72 79 20 62 75 66 ffer'.--.Creates.a.temporary.buf
0e20 66 65 72 20 74 68 61 74 20 69 73 0a 3b 3b 20 20 20 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 fer.that.is.;;....automatically.
0e40 73 65 72 76 65 64 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 served.to.the.client.at.the.end.
0e60 6f 66 20 74 68 65 20 62 6f 64 79 2e 0a 3b 3b 20 20 20 20 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c of.the.body..;;....Additionally,
0e80 20 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 69 .`standard-output'.is.set.to.thi
0ea0 73 20 6f 75 74 70 75 74 0a 3b 3b 20 20 20 20 62 75 66 66 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 s.output.;;....buffer..For.examp
0ec0 6c 65 2c 20 74 68 69 73 20 73 65 72 76 6c 65 74 20 73 61 79 73 20 68 65 6c 6c 6f 2c 0a 0a 3b 3b le,.this.servlet.says.hello,..;;
0ee0 20 20 20 20 20 28 64 65 66 75 6e 20 68 74 74 70 64 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 20 28 70 .....(defun.httpd/hello-world.(p
0f00 72 6f 63 20 70 61 74 68 20 26 72 65 73 74 20 61 72 67 73 29 0a 3b 3b 20 20 20 20 20 20 20 28 77 roc.path.&rest.args).;;.......(w
0f20 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 20 70 72 6f 63 20 22 74 65 78 74 2f 70 6c 61 69 ith-httpd-buffer.proc."text/plai
0f40 6e 22 0a 3b 3b 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 68 65 6c 6c 6f 2c 20 22 20 n".;;.........(insert."hello,.".
0f60 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 68 29 29 29 29 (file-name-nondirectory.path))))
0f80 0a 0a 3b 3b 20 54 68 69 73 20 73 65 72 76 6c 65 74 20 62 65 20 76 69 65 77 65 64 20 61 74 20 68 ..;;.This.servlet.be.viewed.at.h
0fa0 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 38 30 38 30 2f 68 65 6c 6c 6f 2d 77 6f 72 6c 64 ttp://localhost:8080/hello-world
0fc0 2f 45 6d 61 63 73 0a 0a 3b 3b 20 2a 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 2d 2d 20 53 69 6d /Emacs..;;.*.`defservlet'.--.Sim
0fe0 69 6c 61 72 20 74 6f 20 74 68 65 20 61 62 6f 76 65 20 6d 61 63 72 6f 20 62 75 74 20 74 6f 74 61 ilar.to.the.above.macro.but.tota
1000 6c 6c 79 20 68 69 64 65 73 20 74 68 65 0a 3b 3b 20 20 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63 lly.hides.the.;;...process.objec
1020 74 20 66 72 6f 6d 20 74 68 65 20 73 65 72 76 6c 65 74 20 69 74 73 65 6c 66 2e 20 54 68 65 20 61 t.from.the.servlet.itself..The.a
1040 62 6f 76 65 20 73 65 72 76 6c 65 74 20 63 61 6e 20 62 65 0a 3b 3b 20 20 20 72 65 2d 77 72 69 74 bove.servlet.can.be.;;...re-writ
1060 74 65 6e 20 69 64 65 6e 74 69 63 61 6c 6c 79 20 6c 69 6b 65 20 73 6f 2c 0a 0a 3b 3b 20 20 20 20 ten.identically.like.so,..;;....
1080 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
10a0 61 69 6e 20 28 70 61 74 68 29 0a 3b 3b 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 68 65 6c ain.(path).;;.......(insert."hel
10c0 6c 6f 2c 20 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 lo,.".(file-name-nondirectory.pa
10e0 74 68 29 29 29 0a 0a 3b 3b 20 4e 6f 74 65 20 74 68 61 74 20 60 64 65 66 73 65 72 76 6c 65 74 27 th)))..;;.Note.that.`defservlet'
1100 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 74 73 20 60 68 74 74 70 64 2d 63 75 72 72 65 .automatically.sets.`httpd-curre
1120 6e 74 2d 70 72 6f 63 27 2e 20 53 65 65 0a 3b 3b 20 62 65 6c 6f 77 2e 0a 0a 3b 3b 20 54 68 65 20 nt-proc'..See.;;.below...;;.The.
1140 22 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 73 22 20 70 61 72 74 20 63 61 6e 20 62 "function.parameters".part.can.b
1160 65 20 6c 65 66 74 20 65 6d 70 74 79 20 6f 72 20 63 6f 6e 74 61 69 6e 20 75 70 20 74 6f 0a 3b 3b e.left.empty.or.contain.up.to.;;
1180 20 74 68 72 65 65 20 70 61 72 61 6d 65 74 65 72 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 .three.parameters.corresponding.
11a0 74 6f 20 74 68 65 20 66 69 6e 61 6c 20 74 68 72 65 65 20 73 65 72 76 6c 65 74 0a 3b 3b 20 70 61 to.the.final.three.servlet.;;.pa
11c0 72 61 6d 65 74 65 72 73 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 73 65 72 76 6c 65 74 rameters..For.example,.a.servlet
11e0 20 74 68 61 74 20 73 68 6f 77 73 20 2a 73 63 72 61 74 63 68 2a 20 61 6e 64 20 64 6f 65 73 6e 27 .that.shows.*scratch*.and.doesn'
1200 74 0a 3b 3b 20 6e 65 65 64 20 70 61 72 61 6d 65 74 65 72 73 2c 0a 0a 3b 3b 20 20 20 20 20 28 64 t.;;.need.parameters,..;;.....(d
1220 65 66 73 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 efservlet.scratch.text/plain.().
1240 3b 3b 20 20 20 20 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 ;;.......(insert-buffer-substrin
1260 67 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 73 63 72 61 74 63 68 2a 22 g.(get-buffer-create."*scratch*"
1280 29 29 29 0a 0a 3b 3b 20 41 20 68 69 67 68 65 72 20 6c 65 76 65 6c 20 6d 61 63 72 6f 20 60 64 65 )))..;;.A.higher.level.macro.`de
12a0 66 73 65 72 76 6c 65 74 2a 27 20 77 72 61 70 73 20 74 68 69 73 20 6c 6f 77 65 72 2d 6c 65 76 65 fservlet*'.wraps.this.lower-leve
12c0 6c 0a 3b 3b 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 6d 61 63 72 6f 2c 20 61 75 74 6f 6d 61 74 l.;;.`defservlet'.macro,.automat
12e0 69 63 61 6c 6c 79 20 62 69 6e 64 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 63 6f 6d 70 ically.binding.variables.to.comp
1300 6f 6e 65 6e 74 73 0a 3b 3b 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 2e 20 46 6f 72 20 65 78 onents.;;.of.the.request..For.ex
1320 61 6d 70 6c 65 2c 20 74 68 69 73 20 62 69 6e 64 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 72 ample,.this.binds.parts.of.the.r
1340 65 71 75 65 73 74 20 70 61 74 68 0a 3b 3b 20 61 6e 64 20 6f 6e 65 20 71 75 65 72 79 20 70 61 72 equest.path.;;.and.one.query.par
1360 61 6d 65 74 65 72 2e 20 52 65 71 75 65 73 74 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e 6f 74 20 70 ameter..Request.components.not.p
1380 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 0a 3b 3b 20 63 6c 69 65 6e 74 20 61 72 65 20 62 6f 75 rovided.by.the.;;.client.are.bou
13a0 6e 64 20 74 6f 20 6e 69 6c 2e 0a 0a 3b 3b 20 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 2a 20 nd.to.nil...;;.....(defservlet*.
13c0 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 6e 20 74 65 78 74 2f packages/:package/:version.text/
13e0 70 6c 61 69 6e 20 28 76 65 72 62 6f 73 65 29 0a 3b 3b 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 plain.(verbose).;;.......(insert
1400 20 28 66 6f 72 6d 61 74 20 22 25 73 5c 6e 25 73 5c 6e 22 20 70 61 63 6b 61 67 65 20 76 65 72 73 .(format."%s\n%s\n".package.vers
1420 69 6f 6e 29 29 0a 3b 3b 20 20 20 20 20 20 20 28 70 72 69 6e 63 20 28 67 65 74 2d 64 65 73 63 72 ion)).;;.......(princ.(get-descr
1440 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 3b 3b 20 20 20 20 20 iption.package.version)).;;.....
1460 20 20 28 77 68 65 6e 20 76 65 72 62 6f 73 65 0a 3b 3b 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 ..(when.verbose.;;.........(inse
1480 72 74 20 28 66 6f 72 6d 61 74 20 22 25 53 22 20 28 67 65 74 2d 64 65 70 65 6e 64 65 6e 63 69 65 rt.(format."%S".(get-dependencie
14a0 73 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 29 29 29 0a 0a 3b 3b 20 49 74 20 77 6f s.package.version)))))..;;.It.wo
14c0 75 6c 64 20 62 65 20 61 63 63 65 73 73 65 64 20 6c 69 6b 65 20 73 6f 2c 0a 0a 3b 3b 20 20 20 20 uld.be.accessed.like.so,..;;....
14e0 20 68 74 74 70 3a 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 .http://example.com/packages/foo
1500 62 61 72 2f 31 2e 30 3f 76 65 72 62 6f 73 65 3d 31 0a 0a 3b 3b 20 53 6f 6d 65 20 73 75 70 70 6f bar/1.0?verbose=1..;;.Some.suppo
1520 72 74 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 rt.functions.are.available.for.s
1540 65 72 76 6c 65 74 73 20 66 6f 72 20 6d 6f 72 65 0a 3b 3b 20 63 75 73 74 6f 6d 69 7a 65 64 20 72 ervlets.for.more.;;.customized.r
1560 65 73 70 6f 6e 73 65 73 2e 0a 0a 3b 3b 20 20 20 2a 20 60 68 74 74 70 64 2d 73 65 6e 64 2d 66 69 esponses...;;...*.`httpd-send-fi
1580 6c 65 27 20 20 20 2d 2d 20 73 65 72 76 65 20 61 20 66 69 6c 65 20 77 69 74 68 20 70 72 6f 70 65 le'...--.serve.a.file.with.prope
15a0 72 20 63 61 63 68 69 6e 67 0a 3b 3b 20 20 20 2a 20 60 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 r.caching.;;...*.`httpd-redirect
15c0 27 20 20 20 20 2d 2d 20 72 65 64 69 72 65 63 74 20 74 68 65 20 62 72 6f 77 73 65 72 20 74 6f 20 '....--.redirect.the.browser.to.
15e0 61 6e 6f 74 68 65 72 20 75 72 6c 0a 3b 3b 20 20 20 2a 20 60 68 74 74 70 64 2d 73 65 6e 64 2d 68 another.url.;;...*.`httpd-send-h
1600 65 61 64 65 72 27 20 2d 2d 20 73 65 6e 64 20 63 75 73 74 6f 6d 20 68 65 61 64 65 72 73 0a 3b 3b eader'.--.send.custom.headers.;;
1620 20 20 20 2a 20 60 68 74 74 70 64 2d 65 72 72 6f 72 27 20 20 20 20 20 20 20 2d 2d 20 72 65 70 6f ...*.`httpd-error'.......--.repo
1640 72 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 0a 3b 3b 20 20 20 2a rt.an.error.to.the.client.;;...*
1660 20 60 68 74 74 70 64 2d 6c 6f 67 27 20 20 20 20 20 20 20 20 20 2d 2d 20 6c 6f 67 20 61 6e 20 6f .`httpd-log'.........--.log.an.o
1680 62 6a 65 63 74 20 74 6f 20 2a 68 74 74 70 64 2a 0a 0a 3b 3b 20 53 6f 6d 65 20 6f 66 20 74 68 65 bject.to.*httpd*..;;.Some.of.the
16a0 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 71 75 69 72 65 20 61 20 70 72 6f 63 65 73 73 20 6f se.functions.require.a.process.o
16c0 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 6e 27 74 0a 3b 3b 20 70 61 73 73 65 64 20 74 6f 20 bject,.which.isn't.;;.passed.to.
16e0 60 64 65 66 73 65 72 76 6c 65 74 27 20 73 65 72 76 6c 65 74 73 2e 20 55 73 65 20 74 20 69 6e 20 `defservlet'.servlets..Use.t.in.
1700 70 6c 61 63 65 20 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73 0a 3b 3b 20 61 72 67 75 6d 65 6e 74 place.of.the.process.;;.argument
1720 20 74 6f 20 75 73 65 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 28 6c 69 .to.use.`httpd-current-proc'.(li
1740 6b 65 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 27 29 2e 0a 0a 3b 3b 20 49 66 20 79 6f ke.`standard-output')...;;.If.yo
1760 75 20 6a 75 73 74 20 6e 65 65 64 20 74 6f 20 73 65 72 76 65 20 73 74 61 74 69 63 20 66 72 6f 6d u.just.need.to.serve.static.from
1780 20 73 6f 6d 65 20 6c 6f 63 61 74 69 6f 6e 20 75 6e 64 65 72 20 73 6f 6d 65 0a 3b 3b 20 72 6f 75 .some.location.under.some.;;.rou
17a0 74 65 20 6f 6e 20 74 68 65 20 73 65 72 76 65 72 2c 20 75 73 65 20 60 68 74 74 70 64 2d 64 65 66 te.on.the.server,.use.`httpd-def
17c0 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 27 2e 20 49 74 20 65 78 70 61 6e 64 73 20 69 6e 74 6f 0a -file-servlet'..It.expands.into.
17e0 3b 3b 20 61 20 60 64 65 66 73 65 72 76 6c 65 74 27 20 74 68 61 74 20 73 65 72 76 65 73 20 66 69 ;;.a.`defservlet'.that.serves.fi
1800 6c 65 73 2e 0a 0a 3b 3b 3b 20 48 69 73 74 6f 72 79 3a 0a 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 les...;;;.History:..;;.Version.1
1820 2e 35 2e 31 3a 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 .5.1:.improvements.;;...*.Add.`h
1840 74 74 70 64 2d 72 75 6e 6e 69 6e 67 2d 70 27 0a 3b 3b 20 20 20 2a 20 50 72 6f 70 65 72 6c 79 20 ttpd-running-p'.;;...*.Properly.
1860 68 61 6e 64 6c 65 20 22 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 63 6c 6f 73 65 22 20 61 6e 64 20 48 handle."Connection:.close".and.H
1880 54 54 50 2f 31 2e 30 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 35 2e 30 3a 20 69 6d 70 72 6f 76 TTP/1.0.;;.Version.1.5.0:.improv
18a0 65 6d 65 6e 74 73 0a 3b 3b 20 20 20 2a 20 44 72 61 73 74 69 63 61 6c 6c 79 20 69 6d 70 72 6f 76 ements.;;...*.Drastically.improv
18c0 65 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 66 6f 72 20 6c 61 72 67 65 20 72 65 71 75 65 73 74 ed.performance.for.large.request
18e0 73 0a 3b 3b 20 20 20 2a 20 4d 6f 72 65 20 48 54 54 50 20 73 74 61 74 75 73 20 63 6f 64 65 73 0a s.;;...*.More.HTTP.status.codes.
1900 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 36 3a 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 41 ;;.Version.1.4.6:.fixes.;;...*.A
1920 64 64 65 64 20 68 74 74 70 64 2d 73 65 72 76 65 2d 64 69 72 65 63 74 6f 72 79 0a 3b 3b 20 20 20 dded.httpd-serve-directory.;;...
1940 2a 20 46 69 78 20 73 6f 6d 65 20 65 6e 63 6f 64 69 6e 67 20 69 73 73 75 65 73 0a 3b 3b 20 56 65 *.Fix.some.encoding.issues.;;.Ve
1960 72 73 69 6f 6e 20 31 2e 34 2e 35 3a 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 55 70 64 61 74 65 rsion.1.4.5:.fixes.;;...*.Update
1980 20 74 6f 20 63 6c 2d 6c 69 62 20 66 72 6f 6d 20 63 6c 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e .to.cl-lib.from.cl.;;.Version.1.
19a0 34 2e 34 3a 20 66 65 61 74 75 72 65 73 0a 3b 3b 20 20 20 2a 20 43 6f 6d 6d 6f 6e 20 4c 69 73 70 4.4:.features.;;...*.Common.Lisp
19c0 20 26 6b 65 79 2d 6c 69 6b 65 20 64 65 66 73 65 72 76 6c 65 74 2a 20 61 72 67 75 6d 65 6e 74 20 .&key-like.defservlet*.argument.
19e0 73 75 70 70 6f 72 74 0a 3b 3b 20 20 20 2a 20 46 69 78 20 75 70 20 73 6f 6d 65 20 64 65 66 73 65 support.;;...*.Fix.up.some.defse
1a00 72 76 6c 65 74 2a 20 75 73 61 67 65 20 77 61 72 6e 69 6e 67 73 2e 0a 3b 3b 20 56 65 72 73 69 6f rvlet*.usage.warnings..;;.Versio
1a20 6e 20 31 2e 34 2e 33 3a 20 66 65 61 74 75 72 65 73 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 68 74 n.1.4.3:.features.;;...*.Add.`ht
1a40 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 27 0a 3b 3b 20 20 20 2a 20 41 64 64 20 60 tpd-discard-buffer'.;;...*.Add.`
1a60 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 27 0a 3b 3b 20 20 20 2a 20 42 httpd-def-file-servlet'.;;...*.B
1a80 65 20 6d 6f 72 65 20 63 61 72 65 66 75 6c 20 61 62 6f 75 74 20 6e 6f 74 20 73 65 6e 64 69 6e 67 e.more.careful.about.not.sending
1aa0 20 65 78 74 72 61 20 68 65 61 64 65 72 73 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 32 3a .extra.headers.;;.Version.1.4.2:
1ac0 20 66 65 61 74 75 72 65 73 2c 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 60 64 65 66 73 65 72 76 .features,.fixes.;;...*.`defserv
1ae0 6c 65 74 2a 27 20 6d 61 63 72 6f 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 34 2e 31 3a 20 73 6d let*'.macro.;;.Version.1.4.1:.sm
1b00 61 6c 6c 20 62 75 67 20 66 69 78 65 73 2c 20 6f 6e 65 20 66 65 61 74 75 72 65 0a 3b 3b 20 20 20 all.bug.fixes,.one.feature.;;...
1b20 2a 20 41 6c 6c 20 6d 69 6d 65 2d 74 79 70 65 20 70 61 72 61 6d 65 74 65 72 73 20 6e 6f 77 20 61 *.All.mime-type.parameters.now.a
1b40 63 63 65 70 74 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 61 74 6f 72 73 0a 3b 3b 20 20 20 2a 20 ccept.string.designators.;;...*.
1b60 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 75 70 64 61 74 65 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 Documentation.update.;;.Version.
1b80 31 2e 34 2e 30 3a 20 66 65 61 74 75 72 65 73 2c 20 41 50 49 20 63 68 61 6e 67 65 2c 20 61 6e 64 1.4.0:.features,.API.change,.and
1ba0 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 52 65 6d 6f 76 65 64 20 68 74 74 70 64 2d 73 65 6e 64 .fixes.;;...*.Removed.httpd-send
1bc0 2d 62 75 66 66 65 72 3b 20 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 6e 6f 77 20 64 -buffer;.httpd-send-header.now.d
1be0 6f 65 73 20 74 68 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 0a 3b 3b 20 20 20 2a 20 68 74 74 70 64 oes.this.implicitly.;;...*.httpd
1c00 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 6e 6f 77 20 61 63 63 65 70 74 73 20 6b 65 79 77 6f 72 64 -send-header.now.accepts.keyword
1c20 73 20 69 6e 73 74 65 61 64 0a 3b 3b 20 20 20 2a 20 46 69 78 20 68 74 74 70 64 2d 63 6c 65 61 6e s.instead.;;...*.Fix.httpd-clean
1c40 2d 70 61 74 68 20 69 6e 20 57 69 6e 64 6f 77 73 0a 3b 3b 20 20 20 2a 20 46 69 78 20 61 20 63 6f -path.in.Windows.;;...*.Fix.a.co
1c60 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 20 62 75 67 0a 3b 3b 20 20 20 2a 20 64 65 66 73 65 72 76 6c ntent-length.bug.;;...*.defservl
1c80 65 74 20 66 6f 6e 74 69 66 69 63 61 74 69 6f 6e 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 33 2e et.fontification.;;.Version.1.3.
1ca0 31 3a 20 66 65 61 74 75 72 65 73 20 61 6e 64 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 53 65 74 1:.features.and.fixes.;;...*.Set
1cc0 20 60 73 74 61 6e 64 61 72 64 2d 6f 75 74 70 75 74 27 20 69 6e 20 60 77 69 74 68 2d 68 74 74 70 .`standard-output'.in.`with-http
1ce0 64 2d 62 75 66 66 65 72 27 0a 3b 3b 20 56 65 72 73 69 6f 6e 20 31 2e 33 2e 30 3a 20 73 65 63 75 d-buffer'.;;.Version.1.3.0:.secu
1d00 72 69 74 79 20 66 69 78 0a 3b 3b 20 20 20 2a 20 46 69 78 20 70 61 74 68 20 65 78 70 61 6e 73 69 rity.fix.;;...*.Fix.path.expansi
1d20 6f 6e 20 73 65 63 75 72 69 74 79 20 69 73 73 75 65 0a 3b 3b 20 20 20 2a 20 46 69 78 20 63 6f 64 on.security.issue.;;...*.Fix.cod
1d40 69 6e 67 20 73 79 73 74 65 6d 20 28 64 6f 6e 27 74 20 64 65 66 61 75 6c 74 29 0a 3b 3b 20 56 65 ing.system.(don't.default).;;.Ve
1d60 72 73 69 6f 6e 20 31 2e 32 2e 34 3a 20 66 69 78 65 73 0a 3b 3b 20 20 20 2a 20 48 61 6e 64 6c 65 rsion.1.2.4:.fixes.;;...*.Handle
1d80 20 6c 61 72 67 65 20 50 4f 53 54 73 0a 3b 3b 20 20 20 2a 20 46 69 78 20 64 61 74 65 20 73 74 72 .large.POSTs.;;...*.Fix.date.str
1da0 69 6e 67 73 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a 0a 28 72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 ings..;;;.Code:..(require.'cl-li
1dc0 62 29 0a 28 72 65 71 75 69 72 65 20 27 70 70 29 0a 28 72 65 71 75 69 72 65 20 27 75 72 6c 2d 75 b).(require.'pp).(require.'url-u
1de0 74 69 6c 29 0a 0a 28 64 65 66 67 72 6f 75 70 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 20 6e 69 6c til)..(defgroup.simple-httpd.nil
1e00 0a 20 20 22 41 20 73 69 6d 70 6c 65 20 77 65 62 20 73 65 72 76 65 72 2e 22 0a 20 20 3a 67 72 6f ..."A.simple.web.server."...:gro
1e20 75 70 20 27 63 6f 6d 6d 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 69 70 2d 66 up.'comm)..(defcustom.httpd-ip-f
1e40 61 6d 69 6c 79 20 27 69 70 76 34 0a 20 20 22 57 65 62 20 73 65 72 76 65 72 20 49 50 20 66 61 6d amily.'ipv4..."Web.server.IP.fam
1e60 69 6c 79 20 75 73 65 64 20 62 79 20 60 6d 61 6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 ily.used.by.`make-network-proces
1e80 73 27 2e 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 s'."...:group.'simple-httpd...:t
1ea0 79 70 65 20 27 73 79 6d 62 6f 6c 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 68 ype.'symbol)..(defcustom.httpd-h
1ec0 6f 73 74 20 6e 69 6c 0a 20 20 22 57 65 62 20 73 65 72 76 65 72 20 68 6f 73 74 20 6e 61 6d 65 20 ost.nil..."Web.server.host.name.
1ee0 75 73 65 64 20 62 79 20 60 6d 61 6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 27 2e 22 used.by.`make-network-process'."
1f00 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 20 ...:group.'simple-httpd...:type.
1f20 27 28 63 68 6f 69 63 65 20 28 63 6f 6e 73 74 20 6e 69 6c 29 20 28 63 6f 6e 73 74 20 6c 6f 63 61 '(choice.(const.nil).(const.loca
1f40 6c 29 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 70 6f l).string))..(defcustom.httpd-po
1f60 72 74 20 38 30 38 30 0a 20 20 22 57 65 62 20 73 65 72 76 65 72 20 70 6f 72 74 2e 22 0a 20 20 3a rt.8080..."Web.server.port."...:
1f80 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 20 27 69 6e 74 group.'simple-httpd...:type.'int
1fa0 65 67 65 72 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 72 6f 6f 74 20 22 7e 2f eger)..(defcustom.httpd-root."~/
1fc0 70 75 62 6c 69 63 5f 68 74 6d 6c 22 0a 20 20 22 57 65 62 20 73 65 72 76 65 72 20 66 69 6c 65 20 public_html"..."Web.server.file.
1fe0 72 6f 6f 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 64 0a 20 20 root."...:group.'simple-httpd...
2000 3a 74 79 70 65 20 27 64 69 72 65 63 74 6f 72 79 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 :type.'directory)..(defcustom.ht
2020 74 70 64 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 74 0a 20 20 22 45 6e 61 62 6c 65 20 73 65 72 76 tpd-serve-files.t..."Enable.serv
2040 69 6e 67 20 66 69 6c 65 73 20 66 72 6f 6d 20 60 68 74 74 70 64 2d 72 6f 6f 74 27 2e 22 0a 20 20 ing.files.from.`httpd-root'."...
2060 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 20 27 62 6f :group.'simple-httpd...:type.'bo
2080 6f 6c 65 61 6e 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 6c 69 73 74 69 6e 67 olean)..(defcustom.httpd-listing
20a0 73 20 74 0a 20 20 22 49 66 20 74 72 75 65 2c 20 73 65 72 76 65 20 64 69 72 65 63 74 6f 72 79 20 s.t..."If.true,.serve.directory.
20c0 6c 69 73 74 69 6e 67 73 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 listings."...:group.'simple-http
20e0 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 20 d...:type.'boolean)..(defcustom.
2100 68 74 74 70 64 2d 73 65 72 76 6c 65 74 73 20 74 0a 20 20 22 45 6e 61 62 6c 65 20 73 65 72 76 6c httpd-servlets.t..."Enable.servl
2120 65 74 73 2e 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 ets."...:group.'simple-httpd...:
2140 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 20 68 74 74 70 64 type.'boolean)..(defcustom.httpd
2160 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 20 6e 69 6c 0a 20 -show-backtrace-when-error.nil..
2180 20 22 49 66 20 74 72 75 65 2c 20 73 68 6f 77 20 62 61 63 6b 74 72 61 63 65 20 6f 6e 20 65 72 72 ."If.true,.show.backtrace.on.err
21a0 6f 72 20 70 61 67 65 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 or.page."...:group.'simple-httpd
21c0 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 20 68 ...:type.'boolean)..(defcustom.h
21e0 74 74 70 64 2d 73 74 61 72 74 2d 68 6f 6f 6b 20 6e 69 6c 0a 20 20 22 48 6f 6f 6b 20 74 6f 20 72 ttpd-start-hook.nil..."Hook.to.r
2200 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 61 72 74 65 64 2e 22 un.when.the.server.has.started."
2220 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 20 ...:group.'simple-httpd...:type.
2240 27 68 6f 6f 6b 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 68 74 74 70 64 2d 73 74 6f 70 2d 68 6f 'hook)..(defcustom.httpd-stop-ho
2260 6f 6b 20 6e 69 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 ok.nil..."Hook.to.run.when.the.s
2280 65 72 76 65 72 20 68 61 73 20 73 74 6f 70 70 65 64 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 73 69 erver.has.stopped."...:group.'si
22a0 6d 70 6c 65 2d 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 76 mple-httpd...:type.'hook)..(defv
22c0 61 72 20 68 74 74 70 64 2d 73 65 72 76 65 72 2d 6e 61 6d 65 20 28 66 6f 72 6d 61 74 20 22 73 69 ar.httpd-server-name.(format."si
22e0 6d 70 6c 65 2d 68 74 74 70 64 20 28 45 6d 61 63 73 20 25 73 29 22 20 65 6d 61 63 73 2d 76 65 72 mple-httpd.(Emacs.%s)".emacs-ver
2300 73 69 6f 6e 29 0a 20 20 22 53 74 72 69 6e 67 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 53 65 sion)..."String.to.use.in.the.Se
2320 72 76 65 72 20 68 65 61 64 65 72 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 6d 69 rver.header.")..(defvar.httpd-mi
2340 6d 65 2d 74 79 70 65 73 0a 20 20 27 28 28 22 70 6e 67 22 20 20 2e 20 22 69 6d 61 67 65 2f 70 6e me-types...'(("png"...."image/pn
2360 67 22 29 0a 20 20 20 20 28 22 67 69 66 22 20 20 2e 20 22 69 6d 61 67 65 2f 67 69 66 22 29 0a 20 g").....("gif"...."image/gif")..
2380 20 20 20 28 22 6a 70 67 22 20 20 2e 20 22 69 6d 61 67 65 2f 6a 70 65 67 22 29 0a 20 20 20 20 28 ...("jpg"...."image/jpeg").....(
23a0 22 6a 70 65 67 22 20 2e 20 22 69 6d 61 67 65 2f 6a 70 65 67 22 29 0a 20 20 20 20 28 22 74 69 66 "jpeg"..."image/jpeg").....("tif
23c0 22 20 20 2e 20 22 69 6d 61 67 65 2f 74 69 66 22 29 0a 20 20 20 20 28 22 74 69 66 66 22 20 2e 20 "...."image/tif").....("tiff"...
23e0 22 69 6d 61 67 65 2f 74 69 66 66 22 29 0a 20 20 20 20 28 22 69 63 6f 22 20 20 2e 20 22 69 6d 61 "image/tiff").....("ico"...."ima
2400 67 65 2f 78 2d 69 63 6f 6e 22 29 0a 20 20 20 20 28 22 73 76 67 22 20 20 2e 20 22 69 6d 61 67 65 ge/x-icon").....("svg"...."image
2420 2f 73 76 67 2b 78 6d 6c 22 29 0a 20 20 20 20 28 22 63 73 73 22 20 20 2e 20 22 74 65 78 74 2f 63 /svg+xml").....("css"...."text/c
2440 73 73 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 68 74 6d 22 20 20 ss;.charset=utf-8").....("htm"..
2460 2e 20 22 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 29 0a 20 20 .."text/html;.charset=utf-8")...
2480 20 20 28 22 68 74 6d 6c 22 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d ..("html"..."text/html;.charset=
24a0 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 78 6d 6c 22 20 20 2e 20 22 74 65 78 74 2f 78 6d 6c 3b utf-8").....("xml"...."text/xml;
24c0 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 72 73 73 22 20 20 2e 20 22 .charset=utf-8").....("rss"...."
24e0 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 20 20 20 28 22 text/xml;.charset=utf-8").....("
2500 61 74 6f 6d 22 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 atom"..."text/xml;.charset=utf-8
2520 22 29 0a 20 20 20 20 28 22 74 78 74 22 20 20 2e 20 22 74 65 78 74 2f 70 6c 61 69 6e 3b 20 63 68 ").....("txt"...."text/plain;.ch
2540 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 65 6c 22 20 20 20 2e 20 22 74 65 78 arset=utf-8").....("el"....."tex
2560 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 28 22 6a t/plain;.charset=utf-8").....("j
2580 73 22 20 20 20 2e 20 22 74 65 78 74 2f 6a 61 76 61 73 63 72 69 70 74 3b 20 63 68 61 72 73 65 74 s"....."text/javascript;.charset
25a0 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 6d 64 22 20 20 20 2e 20 22 74 65 78 74 2f 78 2d 6d =utf-8").....("md"....."text/x-m
25c0 61 72 6b 64 6f 77 6e 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 0a 20 20 20 20 28 22 67 arkdown;.charset=utf-8").....("g
25e0 7a 22 20 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74 65 74 2d 73 74 72 65 61 6d z"....."application/octet-stream
2600 22 29 0a 20 20 20 20 28 22 70 73 22 20 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 6f ").....("ps"....."application/po
2620 73 74 73 63 72 69 70 74 22 29 0a 20 20 20 20 28 22 65 70 73 22 20 20 2e 20 22 61 70 70 6c 69 63 stscript").....("eps"...."applic
2640 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 70 64 66 22 20 20 2e ation/postscript").....("pdf"...
2660 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70 64 66 22 29 0a 20 20 20 20 28 22 74 61 72 22 20 20 ."application/pdf").....("tar"..
2680 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 74 61 72 22 29 0a 20 20 20 20 28 22 7a 69 70 .."application/x-tar").....("zip
26a0 22 20 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 7a 69 70 22 29 0a 20 20 20 20 28 22 77 61 "...."application/zip").....("wa
26c0 73 6d 22 20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 77 61 73 6d 22 29 0a 20 20 20 20 28 22 sm"..."application/wasm").....("
26e0 6d 70 33 22 20 20 2e 20 22 61 75 64 69 6f 2f 6d 70 65 67 22 29 0a 20 20 20 20 28 22 77 61 76 22 mp3"...."audio/mpeg").....("wav"
2700 20 20 2e 20 22 61 75 64 69 6f 2f 78 2d 77 61 76 22 29 0a 20 20 20 20 28 22 66 6c 61 63 22 20 2e ...."audio/x-wav").....("flac"..
2720 20 22 61 75 64 69 6f 2f 66 6c 61 63 22 29 0a 20 20 20 20 28 22 73 70 78 22 20 20 2e 20 22 61 75 ."audio/flac").....("spx"...."au
2740 64 69 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 22 6f 67 61 22 20 20 2e 20 22 61 75 64 69 6f 2f 6f dio/ogg").....("oga"...."audio/o
2760 67 67 22 29 0a 20 20 20 20 28 22 6f 67 67 22 20 20 2e 20 22 61 75 64 69 6f 2f 6f 67 67 22 29 0a gg").....("ogg"...."audio/ogg").
2780 20 20 20 20 28 22 6f 67 76 22 20 20 2e 20 22 76 69 64 65 6f 2f 6f 67 67 22 29 0a 20 20 20 20 28 ....("ogv"...."video/ogg").....(
27a0 22 6d 70 34 22 20 20 2e 20 22 76 69 64 65 6f 2f 6d 70 34 22 29 0a 20 20 20 20 28 22 6d 6b 76 22 "mp4"...."video/mp4").....("mkv"
27c0 20 20 2e 20 22 76 69 64 65 6f 2f 78 2d 6d 61 74 72 6f 73 6b 61 22 29 0a 20 20 20 20 28 22 77 65 ...."video/x-matroska").....("we
27e0 62 6d 22 20 2e 20 22 76 69 64 65 6f 2f 77 65 62 6d 22 29 29 0a 20 20 22 4d 49 4d 45 20 74 79 70 bm"..."video/webm"))..."MIME.typ
2800 65 73 20 66 6f 72 20 68 65 61 64 65 72 73 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 es.for.headers.")..(defvar.httpd
2820 2d 69 6e 64 65 78 65 73 0a 20 20 27 28 22 69 6e 64 65 78 2e 68 74 6d 6c 22 0a 20 20 20 20 22 69 -indexes...'("index.html"....."i
2840 6e 64 65 78 2e 68 74 6d 22 0a 20 20 20 20 22 69 6e 64 65 78 2e 78 6d 6c 22 29 0a 20 20 22 46 69 ndex.htm"....."index.xml")..."Fi
2860 6c 65 20 73 65 72 76 65 64 20 62 79 20 64 65 66 61 75 6c 74 20 77 68 65 6e 20 61 63 63 65 73 73 le.served.by.default.when.access
2880 69 6e 67 20 61 20 64 69 72 65 63 74 6f 72 79 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 ing.a.directory.")..(defvar.http
28a0 64 2d 73 74 61 74 75 73 2d 63 6f 64 65 73 0a 20 20 27 28 28 31 30 30 20 2e 20 22 43 6f 6e 74 69 d-status-codes...'((100..."Conti
28c0 6e 75 65 22 29 0a 20 20 20 20 28 31 30 31 20 2e 20 22 53 77 69 74 63 68 69 6e 67 20 50 72 6f 74 nue").....(101..."Switching.Prot
28e0 6f 63 6f 6c 73 22 29 0a 20 20 20 20 28 31 30 32 20 2e 20 22 50 72 6f 63 65 73 73 69 6e 67 22 29 ocols").....(102..."Processing")
2900 0a 20 20 20 20 28 32 30 30 20 2e 20 22 4f 4b 22 29 0a 20 20 20 20 28 32 30 31 20 2e 20 22 43 72 .....(200..."OK").....(201..."Cr
2920 65 61 74 65 64 22 29 0a 20 20 20 20 28 32 30 32 20 2e 20 22 41 63 63 65 70 74 65 64 22 29 0a 20 eated").....(202..."Accepted")..
2940 20 20 20 28 32 30 33 20 2e 20 22 4e 6f 6e 2d 61 75 74 68 6f 72 69 74 61 74 69 76 65 20 49 6e 66 ...(203..."Non-authoritative.Inf
2960 6f 72 6d 61 74 69 6f 6e 22 29 0a 20 20 20 20 28 32 30 34 20 2e 20 22 4e 6f 20 43 6f 6e 74 65 6e ormation").....(204..."No.Conten
2980 74 22 29 0a 20 20 20 20 28 32 30 35 20 2e 20 22 52 65 73 65 74 20 43 6f 6e 74 65 6e 74 22 29 0a t").....(205..."Reset.Content").
29a0 20 20 20 20 28 32 30 36 20 2e 20 22 50 61 72 74 69 61 6c 20 43 6f 6e 74 65 6e 74 22 29 0a 20 20 ....(206..."Partial.Content")...
29c0 20 20 28 32 30 37 20 2e 20 22 4d 75 6c 74 69 2d 53 74 61 74 75 73 22 29 0a 20 20 20 20 28 32 30 ..(207..."Multi-Status").....(20
29e0 38 20 2e 20 22 41 6c 72 65 61 64 79 20 52 65 70 6f 72 74 65 64 22 29 0a 20 20 20 20 28 32 32 36 8..."Already.Reported").....(226
2a00 20 2e 20 22 49 4d 20 55 73 65 64 22 29 0a 20 20 20 20 28 33 30 30 20 2e 20 22 4d 75 6c 74 69 70 ..."IM.Used").....(300..."Multip
2a20 6c 65 20 43 68 6f 69 63 65 73 22 29 0a 20 20 20 20 28 33 30 31 20 2e 20 22 4d 6f 76 65 64 20 50 le.Choices").....(301..."Moved.P
2a40 65 72 6d 61 6e 65 6e 74 6c 79 22 29 0a 20 20 20 20 28 33 30 32 20 2e 20 22 46 6f 75 6e 64 22 29 ermanently").....(302..."Found")
2a60 0a 20 20 20 20 28 33 30 33 20 2e 20 22 53 65 65 20 4f 74 68 65 72 22 29 0a 20 20 20 20 28 33 30 .....(303..."See.Other").....(30
2a80 34 20 2e 20 22 4e 6f 74 20 4d 6f 64 69 66 69 65 64 22 29 0a 20 20 20 20 28 33 30 35 20 2e 20 22 4..."Not.Modified").....(305..."
2aa0 55 73 65 20 50 72 6f 78 79 22 29 0a 20 20 20 20 28 33 30 37 20 2e 20 22 54 65 6d 70 6f 72 61 72 Use.Proxy").....(307..."Temporar
2ac0 79 20 52 65 64 69 72 65 63 74 22 29 0a 20 20 20 20 28 33 30 38 20 2e 20 22 50 65 72 6d 61 6e 65 y.Redirect").....(308..."Permane
2ae0 6e 74 20 52 65 64 69 72 65 63 74 22 29 0a 20 20 20 20 28 34 30 30 20 2e 20 22 42 61 64 20 52 65 nt.Redirect").....(400..."Bad.Re
2b00 71 75 65 73 74 22 29 0a 20 20 20 20 28 34 30 31 20 2e 20 22 55 6e 61 75 74 68 6f 72 69 7a 65 64 quest").....(401..."Unauthorized
2b20 22 29 0a 20 20 20 20 28 34 30 32 20 2e 20 22 50 61 79 6d 65 6e 74 20 52 65 71 75 69 72 65 64 22 ").....(402..."Payment.Required"
2b40 29 0a 20 20 20 20 28 34 30 33 20 2e 20 22 46 6f 72 62 69 64 64 65 6e 22 29 0a 20 20 20 20 28 34 ).....(403..."Forbidden").....(4
2b60 30 34 20 2e 20 22 4e 6f 74 20 46 6f 75 6e 64 22 29 0a 20 20 20 20 28 34 30 35 20 2e 20 22 4d 65 04..."Not.Found").....(405..."Me
2b80 74 68 6f 64 20 4e 6f 74 20 41 6c 6c 6f 77 65 64 22 29 0a 20 20 20 20 28 34 30 36 20 2e 20 22 4e thod.Not.Allowed").....(406..."N
2ba0 6f 74 20 41 63 63 65 70 74 61 62 6c 65 22 29 0a 20 20 20 20 28 34 30 37 20 2e 20 22 50 72 6f 78 ot.Acceptable").....(407..."Prox
2bc0 79 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 y.Authentication.Required").....
2be0 28 34 30 38 20 2e 20 22 52 65 71 75 65 73 74 20 54 69 6d 65 6f 75 74 22 29 0a 20 20 20 20 28 34 (408..."Request.Timeout").....(4
2c00 30 39 20 2e 20 22 43 6f 6e 66 6c 69 63 74 22 29 0a 20 20 20 20 28 34 31 30 20 2e 20 22 47 6f 6e 09..."Conflict").....(410..."Gon
2c20 65 22 29 0a 20 20 20 20 28 34 31 31 20 2e 20 22 4c 65 6e 67 74 68 20 52 65 71 75 69 72 65 64 22 e").....(411..."Length.Required"
2c40 29 0a 20 20 20 20 28 34 31 32 20 2e 20 22 50 72 65 63 6f 6e 64 69 74 69 6f 6e 20 46 61 69 6c 65 ).....(412..."Precondition.Faile
2c60 64 22 29 0a 20 20 20 20 28 34 31 33 20 2e 20 22 50 61 79 6c 6f 61 64 20 54 6f 6f 20 4c 61 72 67 d").....(413..."Payload.Too.Larg
2c80 65 22 29 0a 20 20 20 20 28 34 31 34 20 2e 20 22 52 65 71 75 65 73 74 2d 55 52 49 20 54 6f 6f 20 e").....(414..."Request-URI.Too.
2ca0 4c 6f 6e 67 22 29 0a 20 20 20 20 28 34 31 35 20 2e 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 4d Long").....(415..."Unsupported.M
2cc0 65 64 69 61 20 54 79 70 65 22 29 0a 20 20 20 20 28 34 31 36 20 2e 20 22 52 65 71 75 65 73 74 65 edia.Type").....(416..."Requeste
2ce0 64 20 52 61 6e 67 65 20 4e 6f 74 20 53 61 74 69 73 66 69 61 62 6c 65 22 29 0a 20 20 20 20 28 34 d.Range.Not.Satisfiable").....(4
2d00 31 37 20 2e 20 22 45 78 70 65 63 74 61 74 69 6f 6e 20 46 61 69 6c 65 64 22 29 0a 20 20 20 20 28 17..."Expectation.Failed").....(
2d20 34 31 38 20 2e 20 22 49 27 6d 20 61 20 74 65 61 70 6f 74 22 29 0a 20 20 20 20 28 34 32 31 20 2e 418..."I'm.a.teapot").....(421..
2d40 20 22 4d 69 73 64 69 72 65 63 74 65 64 20 52 65 71 75 65 73 74 22 29 0a 20 20 20 20 28 34 32 32 ."Misdirected.Request").....(422
2d60 20 2e 20 22 55 6e 70 72 6f 63 65 73 73 61 62 6c 65 20 45 6e 74 69 74 79 22 29 0a 20 20 20 20 28 ..."Unprocessable.Entity").....(
2d80 34 32 33 20 2e 20 22 4c 6f 63 6b 65 64 22 29 0a 20 20 20 20 28 34 32 34 20 2e 20 22 46 61 69 6c 423..."Locked").....(424..."Fail
2da0 65 64 20 44 65 70 65 6e 64 65 6e 63 79 22 29 0a 20 20 20 20 28 34 32 36 20 2e 20 22 55 70 67 72 ed.Dependency").....(426..."Upgr
2dc0 61 64 65 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 34 32 38 20 2e 20 22 50 72 65 63 6f ade.Required").....(428..."Preco
2de0 6e 64 69 74 69 6f 6e 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 34 32 39 20 2e 20 22 54 ndition.Required").....(429..."T
2e00 6f 6f 20 4d 61 6e 79 20 52 65 71 75 65 73 74 73 22 29 0a 20 20 20 20 28 34 33 31 20 2e 20 22 52 oo.Many.Requests").....(431..."R
2e20 65 71 75 65 73 74 20 48 65 61 64 65 72 20 46 69 65 6c 64 73 20 54 6f 6f 20 4c 61 72 67 65 22 29 equest.Header.Fields.Too.Large")
2e40 0a 20 20 20 20 28 34 34 34 20 2e 20 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 43 6c 6f 73 65 64 20 57 .....(444..."Connection.Closed.W
2e60 69 74 68 6f 75 74 20 52 65 73 70 6f 6e 73 65 22 29 0a 20 20 20 20 28 34 35 31 20 2e 20 22 55 6e ithout.Response").....(451..."Un
2e80 61 76 61 69 6c 61 62 6c 65 20 46 6f 72 20 4c 65 67 61 6c 20 52 65 61 73 6f 6e 73 22 29 0a 20 20 available.For.Legal.Reasons")...
2ea0 20 20 28 34 39 39 20 2e 20 22 43 6c 69 65 6e 74 20 43 6c 6f 73 65 64 20 52 65 71 75 65 73 74 22 ..(499..."Client.Closed.Request"
2ec0 29 0a 20 20 20 20 28 35 30 30 20 2e 20 22 49 6e 74 65 72 6e 61 6c 20 53 65 72 76 65 72 20 45 72 ).....(500..."Internal.Server.Er
2ee0 72 6f 72 22 29 0a 20 20 20 20 28 35 30 31 20 2e 20 22 4e 6f 74 20 49 6d 70 6c 65 6d 65 6e 74 65 ror").....(501..."Not.Implemente
2f00 64 22 29 0a 20 20 20 20 28 35 30 32 20 2e 20 22 42 61 64 20 47 61 74 65 77 61 79 22 29 0a 20 20 d").....(502..."Bad.Gateway")...
2f20 20 20 28 35 30 33 20 2e 20 22 53 65 72 76 69 63 65 20 55 6e 61 76 61 69 6c 61 62 6c 65 22 29 0a ..(503..."Service.Unavailable").
2f40 20 20 20 20 28 35 30 34 20 2e 20 22 47 61 74 65 77 61 79 20 54 69 6d 65 6f 75 74 22 29 0a 20 20 ....(504..."Gateway.Timeout")...
2f60 20 20 28 35 30 35 20 2e 20 22 48 54 54 50 20 56 65 72 73 69 6f 6e 20 4e 6f 74 20 53 75 70 70 6f ..(505..."HTTP.Version.Not.Suppo
2f80 72 74 65 64 22 29 0a 20 20 20 20 28 35 30 36 20 2e 20 22 56 61 72 69 61 6e 74 20 41 6c 73 6f 20 rted").....(506..."Variant.Also.
2fa0 4e 65 67 6f 74 69 61 74 65 73 22 29 0a 20 20 20 20 28 35 30 37 20 2e 20 22 49 6e 73 75 66 66 69 Negotiates").....(507..."Insuffi
2fc0 63 69 65 6e 74 20 53 74 6f 72 61 67 65 22 29 0a 20 20 20 20 28 35 30 38 20 2e 20 22 4c 6f 6f 70 cient.Storage").....(508..."Loop
2fe0 20 44 65 74 65 63 74 65 64 22 29 0a 20 20 20 20 28 35 31 30 20 2e 20 22 4e 6f 74 20 45 78 74 65 .Detected").....(510..."Not.Exte
3000 6e 64 65 64 22 29 0a 20 20 20 20 28 35 31 31 20 2e 20 22 4e 65 74 77 6f 72 6b 20 41 75 74 68 65 nded").....(511..."Network.Authe
3020 6e 74 69 63 61 74 69 6f 6e 20 52 65 71 75 69 72 65 64 22 29 0a 20 20 20 20 28 35 39 39 20 2e 20 ntication.Required").....(599...
3040 22 4e 65 74 77 6f 72 6b 20 43 6f 6e 6e 65 63 74 20 54 69 6d 65 6f 75 74 20 45 72 72 6f 72 22 29 "Network.Connect.Timeout.Error")
3060 29 0a 20 20 22 48 54 54 50 20 73 74 61 74 75 73 20 63 6f 64 65 73 2e 22 29 0a 0a 28 64 65 66 76 )..."HTTP.status.codes.")..(defv
3080 61 72 20 68 74 74 70 64 2d 68 74 6d 6c 0a 20 20 27 28 28 34 30 33 20 2e 20 22 3c 21 44 4f 43 54 ar.httpd-html...'((403..."<!DOCT
30a0 59 50 45 20 68 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 YPE.html>.<html><head>.<title>40
30c0 33 20 46 6f 72 62 69 64 64 65 6e 3c 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3.Forbidden</title>.</head><body
30e0 3e 0a 3c 68 31 3e 46 6f 72 62 69 64 64 65 6e 3c 2f 68 31 3e 0a 3c 70 3e 54 68 65 20 72 65 71 75 >.<h1>Forbidden</h1>.<p>The.requ
3100 65 73 74 65 64 20 55 52 4c 20 69 73 20 66 6f 72 62 69 64 64 65 6e 2e 3c 2f 70 3e 0a 3c 70 72 65 ested.URL.is.forbidden.</p>.<pre
3120 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79 3e 3c 2f 68 74 6d 6c 3e 22 29 0a 20 20 20 20 28 >%s</pre>.</body></html>").....(
3140 34 30 34 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 65 404..."<!DOCTYPE.html>.<html><he
3160 61 64 3e 0a 3c 74 69 74 6c 65 3e 34 30 34 20 4e 6f 74 20 46 6f 75 6e 64 3c 2f 74 69 74 6c 65 3e ad>.<title>404.Not.Found</title>
3180 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c 68 31 3e 4e 6f 74 20 46 6f 75 6e 64 3c 2f 68 31 .</head><body>.<h1>Not.Found</h1
31a0 3e 0a 3c 70 3e 54 68 65 20 72 65 71 75 65 73 74 65 64 20 55 52 4c 20 77 61 73 20 6e 6f 74 20 66 >.<p>The.requested.URL.was.not.f
31c0 6f 75 6e 64 20 6f 6e 20 74 68 69 73 20 73 65 72 76 65 72 2e 3c 2f 70 3e 0a 3c 70 72 65 3e 25 73 ound.on.this.server.</p>.<pre>%s
31e0 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79 3e 3c 2f 68 74 6d 6c 3e 22 29 0a 20 20 20 20 28 35 30 30 </pre>.</body></html>").....(500
3200 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 65 61 64 3e ..."<!DOCTYPE.html>.<html><head>
3220 0a 3c 74 69 74 6c 65 3e 35 30 30 20 49 6e 74 65 72 6e 61 6c 20 45 72 72 6f 72 3c 2f 74 69 74 6c .<title>500.Internal.Error</titl
3240 65 3e 0a 3c 2f 68 65 61 64 3e 3c 62 6f 64 79 3e 0a 3c 68 31 3e 35 30 30 20 49 6e 74 65 72 6e 61 e>.</head><body>.<h1>500.Interna
3260 6c 20 45 72 72 6f 72 3c 2f 68 31 3e 0a 3c 70 3e 49 6e 74 65 72 6e 61 6c 20 65 72 72 6f 72 20 77 l.Error</h1>.<p>Internal.error.w
3280 68 65 6e 20 68 61 6e 64 6c 69 6e 67 20 74 68 69 73 20 72 65 71 75 65 73 74 2e 3c 2f 70 3e 0a 3c hen.handling.this.request.</p>.<
32a0 70 72 65 3e 25 73 3c 2f 70 72 65 3e 0a 3c 2f 62 6f 64 79 3e 3c 2f 68 74 6d 6c 3e 22 29 29 0a 20 pre>%s</pre>.</body></html>"))..
32c0 20 22 48 54 4d 4c 20 66 6f 72 20 76 61 72 69 6f 75 73 20 65 72 72 6f 72 73 2e 22 29 0a 0a 3b 3b ."HTML.for.various.errors.")..;;
32e0 20 55 73 65 72 20 69 6e 74 65 72 66 61 63 65 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a .User.interface..;;;###autoload.
3300 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 61 72 74 20 28 29 0a 20 20 22 53 74 61 72 74 20 74 (defun.httpd-start.()..."Start.t
3320 68 65 20 77 65 62 20 73 65 72 76 65 72 20 70 72 6f 63 65 73 73 2e 20 49 66 20 74 68 65 20 73 65 he.web.server.process..If.the.se
3340 72 76 65 72 20 69 73 20 61 6c 72 65 61 64 79 0a 72 75 6e 6e 69 6e 67 2c 20 74 68 69 73 20 77 69 rver.is.already.running,.this.wi
3360 6c 6c 20 72 65 73 74 61 72 74 20 74 68 65 20 73 65 72 76 65 72 2e 20 54 68 65 72 65 20 69 73 20 ll.restart.the.server..There.is.
3380 6f 6e 6c 79 20 6f 6e 65 20 73 65 72 76 65 72 0a 69 6e 73 74 61 6e 63 65 20 70 65 72 20 45 6d 61 only.one.server.instance.per.Ema
33a0 63 73 20 69 6e 73 74 61 6e 63 65 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 cs.instance."...(interactive)...
33c0 28 68 74 74 70 64 2d 73 74 6f 70 29 0a 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 73 74 61 72 (httpd-stop)...(httpd-log.`(star
33e0 74 20 2c 28 63 75 72 72 65 6e 74 2d 74 69 6d 65 2d 73 74 72 69 6e 67 29 29 29 0a 20 20 28 6d 61 t.,(current-time-string)))...(ma
3400 6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73 73 0a 20 20 20 3a 6e 61 6d 65 20 20 20 20 20 ke-network-process....:name.....
3420 22 68 74 74 70 64 22 0a 20 20 20 3a 73 65 72 76 69 63 65 20 20 68 74 74 70 64 2d 70 6f 72 74 0a "httpd"....:service..httpd-port.
3440 20 20 20 3a 73 65 72 76 65 72 20 20 20 74 0a 20 20 20 3a 68 6f 73 74 20 20 20 20 20 68 74 74 70 ...:server...t....:host.....http
3460 64 2d 68 6f 73 74 0a 20 20 20 3a 66 61 6d 69 6c 79 20 20 20 68 74 74 70 64 2d 69 70 2d 66 61 6d d-host....:family...httpd-ip-fam
3480 69 6c 79 0a 20 20 20 3a 66 69 6c 74 65 72 20 20 20 27 68 74 74 70 64 2d 2d 66 69 6c 74 65 72 0a ily....:filter...'httpd--filter.
34a0 20 20 20 3a 63 6f 64 69 6e 67 20 20 20 27 62 69 6e 61 72 79 0a 20 20 20 3a 6c 6f 67 20 20 20 20 ...:coding...'binary....:log....
34c0 20 20 27 68 74 74 70 64 2d 2d 6c 6f 67 29 0a 20 20 28 72 75 6e 2d 68 6f 6f 6b 73 20 27 68 74 74 ..'httpd--log)...(run-hooks.'htt
34e0 70 64 2d 73 74 61 72 74 2d 68 6f 6f 6b 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a pd-start-hook))..;;;###autoload.
3500 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 6f 70 20 28 29 0a 20 20 22 53 74 6f 70 20 74 68 65 (defun.httpd-stop.()..."Stop.the
3520 20 77 65 62 20 73 65 72 76 65 72 20 69 66 20 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 72 .web.server.if.it.is.currently.r
3540 75 6e 6e 69 6e 67 2c 20 6f 74 68 65 72 77 69 73 65 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 22 0a 20 unning,.otherwise.do.nothing."..
3560 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 20 28 77 68 65 6e 20 28 70 72 6f 63 65 73 73 2d .(interactive)...(when.(process-
3580 73 74 61 74 75 73 20 22 68 74 74 70 64 22 29 0a 20 20 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 status."httpd").....(delete-proc
35a0 65 73 73 20 22 68 74 74 70 64 22 29 0a 20 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 73 74 ess."httpd").....(httpd-log.`(st
35c0 6f 70 20 2c 28 63 75 72 72 65 6e 74 2d 74 69 6d 65 2d 73 74 72 69 6e 67 29 29 29 0a 20 20 20 20 op.,(current-time-string))).....
35e0 28 72 75 6e 2d 68 6f 6f 6b 73 20 27 68 74 74 70 64 2d 73 74 6f 70 2d 68 6f 6f 6b 29 29 29 0a 0a (run-hooks.'httpd-stop-hook)))..
3600 3b 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 72 75 6e 6e ;;;###autoload.(defun.httpd-runn
3620 69 6e 67 2d 70 20 28 29 0a 20 20 22 52 65 74 75 72 6e 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 74 68 ing-p.()..."Return.non-nil.if.th
3640 65 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 20 73 65 72 76 65 72 20 69 73 20 72 75 6e 6e 69 6e 67 e.simple-httpd.server.is.running
3660 2e 22 0a 20 20 28 6e 6f 74 20 28 6e 75 6c 6c 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 ."...(not.(null.(process-status.
3680 22 68 74 74 70 64 22 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 "httpd"))))..;;;###autoload.(def
36a0 75 6e 20 68 74 74 70 64 2d 73 65 72 76 65 2d 64 69 72 65 63 74 6f 72 79 20 28 64 69 72 65 63 74 un.httpd-serve-directory.(direct
36c0 6f 72 79 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 77 69 74 ory)..."Start.the.web.server.wit
36e0 68 20 67 69 76 65 6e 20 60 64 69 72 65 63 74 6f 72 79 27 20 61 73 20 60 68 74 74 70 64 2d 72 6f h.given.`directory'.as.`httpd-ro
3700 6f 74 27 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65 20 22 44 53 65 72 76 65 20 64 69 72 ot'."...(interactive."DServe.dir
3720 65 63 74 6f 72 79 3a 20 5c 6e 22 29 0a 20 20 28 73 65 74 66 20 68 74 74 70 64 2d 72 6f 6f 74 20 ectory:.\n")...(setf.httpd-root.
3740 64 69 72 65 63 74 6f 72 79 29 0a 20 20 28 68 74 74 70 64 2d 73 74 61 72 74 29 0a 20 20 28 6d 65 directory)...(httpd-start)...(me
3760 73 73 61 67 65 20 22 53 74 61 72 74 65 64 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 20 6f 6e 20 25 ssage."Started.simple-httpd.on.%
3780 73 3a 25 64 2c 20 73 65 72 76 69 6e 67 3a 20 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 28 63 s:%d,.serving:.%s"............(c
37a0 6c 2d 63 61 73 65 20 68 74 74 70 64 2d 68 6f 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 l-case.httpd-host..............(
37c0 28 6e 69 6c 29 20 22 30 2e 30 2e 30 2e 30 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 (nil)."0.0.0.0")..............((
37e0 6c 6f 63 61 6c 29 20 22 6c 6f 63 61 6c 68 6f 73 74 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 local)."localhost").............
3800 20 28 6f 74 68 65 72 77 69 73 65 20 68 74 74 70 64 2d 68 6f 73 74 29 29 20 68 74 74 70 64 2d 70 .(otherwise.httpd-host)).httpd-p
3820 6f 72 74 20 64 69 72 65 63 74 6f 72 79 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 62 61 ort.directory))..(defun.httpd-ba
3840 74 63 68 2d 73 74 61 72 74 20 28 29 0a 20 20 22 4e 65 76 65 72 20 72 65 74 75 72 6e 73 2c 20 68 tch-start.()..."Never.returns,.h
3860 6f 6c 64 69 6e 67 20 74 68 65 20 73 65 72 76 65 72 20 6f 70 65 6e 20 69 6e 64 65 66 69 6e 69 74 olding.the.server.open.indefinit
3880 65 6c 79 20 66 6f 72 20 62 61 74 63 68 20 6d 6f 64 65 2e 0a 4c 6f 67 73 20 61 72 65 20 72 65 64 ely.for.batch.mode..Logs.are.red
38a0 69 72 65 63 74 65 64 20 74 6f 20 73 74 64 6f 75 74 2e 20 54 6f 20 75 73 65 2c 20 69 6e 76 6f 6b irected.to.stdout..To.use,.invok
38c0 65 20 45 6d 61 63 73 20 6c 69 6b 65 20 74 68 69 73 3a 0a 65 6d 61 63 73 20 2d 51 20 2d 62 61 74 e.Emacs.like.this:.emacs.-Q.-bat
38e0 63 68 20 2d 6c 20 73 69 6d 70 6c 65 2d 68 74 74 70 64 2e 65 6c 63 20 2d 66 20 68 74 74 70 64 2d ch.-l.simple-httpd.elc.-f.httpd-
3900 62 61 74 63 68 2d 73 74 61 72 74 22 0a 20 20 28 69 66 20 28 6e 6f 74 20 6e 6f 6e 69 6e 74 65 72 batch-start"...(if.(not.noninter
3920 61 63 74 69 76 65 29 0a 20 20 20 20 20 20 28 65 72 72 6f 72 20 22 4f 6e 6c 79 20 75 73 65 20 60 active).......(error."Only.use.`
3940 68 74 74 70 64 2d 62 61 74 63 68 2d 73 74 61 72 74 27 20 69 6e 20 62 61 74 63 68 20 6d 6f 64 65 httpd-batch-start'.in.batch.mode
3960 21 22 29 0a 20 20 20 20 28 68 74 74 70 64 2d 73 74 61 72 74 29 0a 20 20 20 20 28 64 65 66 61 6c !").....(httpd-start).....(defal
3980 69 61 73 20 27 68 74 74 70 64 2d 6c 6f 67 20 27 70 70 29 0a 20 20 20 20 28 77 68 69 6c 65 20 74 ias.'httpd-log.'pp).....(while.t
39a0 20 28 73 6c 65 65 70 2d 66 6f 72 20 36 30 29 29 29 29 0a 0a 3b 3b 20 55 74 69 6c 69 74 79 0a 0a .(sleep-for.60))))..;;.Utility..
39c0 28 64 65 66 75 6e 20 68 74 74 70 64 2d 64 61 74 65 2d 73 74 72 69 6e 67 20 28 26 6f 70 74 69 6f (defun.httpd-date-string.(&optio
39e0 6e 61 6c 20 64 61 74 65 29 0a 20 20 22 52 65 74 75 72 6e 20 61 6e 20 48 54 54 50 20 64 61 74 65 nal.date)..."Return.an.HTTP.date
3a00 20 73 74 72 69 6e 67 20 28 52 46 43 20 31 31 32 33 29 2e 22 0a 20 20 28 66 6f 72 6d 61 74 2d 74 .string.(RFC.1123)."...(format-t
3a20 69 6d 65 2d 73 74 72 69 6e 67 20 22 25 61 2c 20 25 65 20 25 62 20 25 59 20 25 54 20 47 4d 54 22 ime-string."%a,.%e.%b.%Y.%T.GMT"
3a40 20 64 61 74 65 20 74 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 65 74 61 67 20 28 66 69 .date.t))..(defun.httpd-etag.(fi
3a60 6c 65 29 0a 20 20 22 43 6f 6d 70 75 74 65 20 74 68 65 20 45 54 61 67 20 66 6f 72 20 46 49 4c 45 le)..."Compute.the.ETag.for.FILE
3a80 2e 22 0a 20 20 28 63 6f 6e 63 61 74 20 22 5c 22 22 20 28 73 75 62 73 74 72 69 6e 67 20 28 73 68 ."...(concat."\"".(substring.(sh
3aa0 61 31 20 28 70 72 69 6e 31 2d 74 6f 2d 73 74 72 69 6e 67 20 28 66 69 6c 65 2d 61 74 74 72 69 62 a1.(prin1-to-string.(file-attrib
3ac0 75 74 65 73 20 66 69 6c 65 29 29 29 20 2d 31 36 29 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22 22 utes.file))).-16)..........."\""
3ae0 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 73 74 72 69 6e 67 69 66 79 20 28 64 65 73 ))..(defun.httpd--stringify.(des
3b00 69 67 6e 61 74 6f 72 29 0a 20 20 22 54 75 72 6e 20 61 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e ignator)..."Turn.a.string.design
3b20 61 74 6f 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 2e 22 0a 20 20 28 6c 65 74 20 28 28 73 74 ator.into.a.string."...(let.((st
3b40 72 69 6e 67 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 64 65 73 69 67 6e 61 74 6f 72 29 29 29 0a ring.(format."%s".designator))).
3b60 20 20 20 20 28 69 66 20 28 6b 65 79 77 6f 72 64 70 20 64 65 73 69 67 6e 61 74 6f 72 29 0a 20 20 ....(if.(keywordp.designator)...
3b80 20 20 20 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 73 74 72 69 6e 67 20 31 29 0a 20 20 20 20 20 ......(substring.string.1)......
3ba0 20 73 74 72 69 6e 67 29 29 29 0a 0a 3b 3b 20 4e 65 74 77 6f 72 6b 69 6e 67 20 63 6f 64 65 0a 0a .string)))..;;.Networking.code..
3bc0 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 63 6f 6e 6e 65 63 74 69 6f 6e 2d 63 6c 6f 73 65 2d 70 (defun.httpd--connection-close-p
3be0 20 28 72 65 71 75 65 73 74 29 0a 20 20 22 52 65 74 75 72 6e 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 .(request)..."Return.non-nil.if.
3c00 74 68 65 20 63 6c 69 65 6e 74 20 72 65 71 75 65 73 74 65 64 20 5c 22 63 6f 6e 6e 65 63 74 69 6f the.client.requested.\"connectio
3c20 6e 3a 20 63 6c 6f 73 65 5c 22 2e 22 0a 20 20 28 6f 72 20 28 65 71 75 61 6c 20 27 28 22 63 6c 6f n:.close\"."...(or.(equal.'("clo
3c40 73 65 22 29 20 28 63 64 72 20 28 61 73 73 6f 63 20 22 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 72 65 se").(cdr.(assoc."Connection".re
3c60 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 28 65 71 75 61 6c 20 27 28 22 48 54 54 50 2f 31 2e quest))).......(equal.'("HTTP/1.
3c80 30 22 29 20 28 63 64 64 72 20 28 61 73 73 6f 63 20 22 47 45 54 22 20 72 65 71 75 65 73 74 29 29 0").(cddr.(assoc."GET".request))
3ca0 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 66 69 6c 74 65 72 20 28 70 72 6f 63 20 )))..(defun.httpd--filter.(proc.
3cc0 63 68 75 6e 6b 29 0a 20 20 22 52 75 6e 73 20 65 61 63 68 20 74 69 6d 65 20 63 6c 69 65 6e 74 20 chunk)..."Runs.each.time.client.
3ce0 6d 61 6b 65 73 20 61 20 72 65 71 75 65 73 74 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e makes.a.request."...(with-curren
3d00 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 20 3a 72 65 71 75 t-buffer.(process-get.proc.:requ
3d20 65 73 74 2d 62 75 66 66 65 72 29 0a 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e est-buffer).....(goto-char.(poin
3d40 74 2d 6d 61 78 29 29 0a 20 20 20 20 28 69 6e 73 65 72 74 20 63 68 75 6e 6b 29 0a 20 20 20 20 28 t-max)).....(insert.chunk).....(
3d60 6c 65 74 20 28 28 72 65 71 75 65 73 74 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 20 let.((request.(process-get.proc.
3d80 3a 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 72 65 71 75 65 73 :request))).......(unless.reques
3da0 74 0a 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 73 65 74 66 20 72 65 71 75 65 73 74 20 28 68 t.........(when.(setf.request.(h
3dc0 74 74 70 64 2d 70 61 72 73 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 2d 72 ttpd-parse))...........(delete-r
3de0 65 67 69 6f 6e 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 29 29 0a 20 20 20 20 20 egion.(point-min).(point))......
3e00 20 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 20 .....(process-put.proc.:request.
3e20 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 72 65 71 75 65 73 74 0a 20 request))).......(when.request..
3e40 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 20 28 63 61 .......(let.((content-length.(ca
3e60 64 72 20 28 61 73 73 6f 63 20 22 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 22 20 72 65 71 75 65 dr.(assoc."Content-Length".reque
3e80 73 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 6f 72 20 28 6e 75 6c 6c st))))...........(when.(or.(null
3ea0 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .content-length)................
3ec0 20 20 20 20 20 28 3d 20 28 62 75 66 66 65 72 2d 73 69 7a 65 29 20 28 73 74 72 69 6e 67 2d 74 6f .....(=.(buffer-size).(string-to
3ee0 2d 6e 75 6d 62 65 72 20 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 29 29 29 0a 20 20 20 20 20 20 -number.content-length))).......
3f00 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e 74 65 6e 74 20 28 62 75 66 66 65 72 2d 73 74 ......(let*.((content.(buffer-st
3f20 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 28 75 72 69 20 28 ring))....................(uri.(
3f40 63 6c 2d 63 61 64 61 72 20 72 65 71 75 65 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 cl-cadar.request))..............
3f60 20 20 20 20 20 20 28 70 61 72 73 65 64 2d 75 72 69 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 75 ......(parsed-uri.(httpd-parse-u
3f80 72 69 20 28 63 6f 6e 63 61 74 20 75 72 69 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ri.(concat.uri)))...............
3fa0 20 20 20 20 20 28 75 72 69 2d 70 61 74 68 20 28 68 74 74 70 64 2d 75 6e 68 65 78 20 28 6e 74 68 .....(uri-path.(httpd-unhex.(nth
3fc0 20 30 20 70 61 72 73 65 64 2d 75 72 69 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .0.parsed-uri)))................
3fe0 20 20 20 20 28 75 72 69 2d 71 75 65 72 79 20 28 61 70 70 65 6e 64 20 28 6e 74 68 20 31 20 70 61 ....(uri-query.(append.(nth.1.pa
4000 72 73 65 64 2d 75 72 69 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 rsed-uri).......................
4020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 61 72 67 ................(httpd-parse-arg
4040 73 20 63 6f 6e 74 65 6e 74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.content)))....................
4060 28 73 65 72 76 6c 65 74 20 28 68 74 74 70 64 2d 67 65 74 2d 73 65 72 76 6c 65 74 20 75 72 69 2d (servlet.(httpd-get-servlet.uri-
4080 70 61 74 68 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 72 61 73 65 2d 62 75 66 path)))...............(erase-buf
40a0 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 fer)...............(process-put.
40c0 70 72 6f 63 20 3a 72 65 71 75 65 73 74 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 proc.:request.nil)..............
40e0 20 28 73 65 74 66 20 72 65 71 75 65 73 74 20 28 6e 72 65 76 65 72 73 65 20 28 63 6f 6e 73 20 28 .(setf.request.(nreverse.(cons.(
4100 6c 69 73 74 20 22 43 6f 6e 74 65 6e 74 22 20 63 6f 6e 74 65 6e 74 29 0a 20 20 20 20 20 20 20 20 list."Content".content).........
4120 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 ................................
4140 20 20 20 20 28 6e 72 65 76 65 72 73 65 20 72 65 71 75 65 73 74 29 29 29 29 0a 20 20 20 20 20 20 ....(nreverse.request)))).......
4160 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 72 65 71 75 65 73 74 20 28 64 61 ........(httpd-log.`(request.(da
4180 74 65 20 2c 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 te.,(httpd-date-string))........
41a0 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 61 64 64 ............................(add
41c0 72 65 73 73 20 2c 28 63 61 72 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 ress.,(car.(process-contact.proc
41e0 29 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 20 20 20 ))).............................
4200 20 20 20 20 20 20 20 28 67 65 74 20 2c 75 72 69 2d 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 .......(get.,uri-path)..........
4220 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 2c 28 63 6f 6e 73 ..........................,(cons
4240 20 27 68 65 61 64 65 72 73 20 72 65 71 75 65 73 74 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 .'headers.request)))............
4260 20 20 20 28 69 66 20 28 6e 75 6c 6c 20 73 65 72 76 6c 65 74 29 0a 20 20 20 20 20 20 20 20 20 20 ...(if.(null.servlet)...........
4280 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 2d 65 72 72 6f 72 2d 73 61 66 65 20 70 72 6f 63 20 ........(httpd--error-safe.proc.
42a0 34 30 34 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 404).................(condition-
42c0 63 61 73 65 20 65 72 72 6f 72 2d 63 61 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 case.error-case.................
42e0 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65 72 76 6c 65 74 20 70 72 6f 63 20 75 72 69 2d 70 61 ....(funcall.servlet.proc.uri-pa
4300 74 68 20 75 72 69 2d 71 75 65 72 79 20 72 65 71 75 65 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 th.uri-query.request)...........
4320 20 20 20 20 20 20 20 20 28 65 72 72 6f 72 20 28 68 74 74 70 64 2d 2d 65 72 72 6f 72 2d 73 61 66 ........(error.(httpd--error-saf
4340 65 20 70 72 6f 63 20 35 30 30 20 65 72 72 6f 72 2d 63 61 73 65 29 29 29 29 0a 20 20 20 20 20 20 e.proc.500.error-case)))).......
4360 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 68 74 74 70 64 2d 2d 63 6f 6e 6e 65 63 74 69 6f 6e ........(when.(httpd--connection
4380 2d 63 6c 6f 73 65 2d 70 20 72 65 71 75 65 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -close-p.request)...............
43a0 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f 66 20 70 72 6f 63 29 29 29 29 29 29 29 29 ..(process-send-eof.proc))))))))
43c0 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 6c 6f 67 20 28 73 65 72 76 65 72 20 70 72 6f )..(defun.httpd--log.(server.pro
43e0 63 20 6d 65 73 73 61 67 65 29 0a 20 20 22 52 75 6e 73 20 65 61 63 68 20 74 69 6d 65 20 61 20 6e c.message)..."Runs.each.time.a.n
4400 65 77 20 63 6c 69 65 6e 74 20 63 6f 6e 6e 65 63 74 73 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 ew.client.connects."...(with-cur
4420 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 65 6e 65 72 61 74 65 2d 6e 65 77 2d 62 75 66 66 65 72 rent-buffer.(generate-new-buffer
4440 20 22 20 2a 68 74 74 70 64 2d 63 6c 69 65 6e 74 2a 22 29 0a 20 20 20 20 28 70 72 6f 63 65 73 73 .".*httpd-client*").....(process
4460 2d 70 75 74 20 70 72 6f 63 20 3a 72 65 71 75 65 73 74 2d 62 75 66 66 65 72 20 28 63 75 72 72 65 -put.proc.:request-buffer.(curre
4480 6e 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 28 73 65 74 2d 70 72 6f 63 65 73 73 2d 73 65 6e 74 nt-buffer)))...(set-process-sent
44a0 69 6e 65 6c 20 70 72 6f 63 20 23 27 68 74 74 70 64 2d 2d 73 65 6e 74 69 6e 65 6c 29 0a 20 20 28 inel.proc.#'httpd--sentinel)...(
44c0 68 74 74 70 64 2d 6c 6f 67 20 28 6c 69 73 74 20 27 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 63 61 72 httpd-log.(list.'connection.(car
44e0 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 29 29 29 29 29 0a 0a 28 64 65 .(process-contact.proc)))))..(de
4500 66 75 6e 20 68 74 74 70 64 2d 2d 73 65 6e 74 69 6e 65 6c 20 28 70 72 6f 63 20 6d 65 73 73 61 67 fun.httpd--sentinel.(proc.messag
4520 65 29 0a 20 20 22 52 75 6e 73 20 77 68 65 6e 20 61 20 63 6c 69 65 6e 74 20 63 6c 6f 73 65 73 20 e)..."Runs.when.a.client.closes.
4540 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 73 74 72 69 the.connection."...(unless.(stri
4560 6e 67 2d 6d 61 74 63 68 2d 70 20 22 5e 6f 70 65 6e 20 22 20 6d 65 73 73 61 67 65 29 0a 20 20 20 ng-match-p."^open.".message)....
4580 20 28 6c 65 74 20 28 28 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 .(let.((buffer.(process-get.proc
45a0 20 3a 72 65 71 75 65 73 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 .:request-buffer))).......(when.
45c0 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 62 75 66 66 buffer.........(kill-buffer.buff
45e0 65 72 29 29 29 29 29 0a 0a 3b 3b 20 4c 6f 67 67 69 6e 67 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 er)))))..;;.Logging..(defun.http
4600 64 2d 6c 6f 67 20 28 69 74 65 6d 29 0a 20 20 22 50 72 65 74 74 79 20 70 72 69 6e 74 20 61 20 6c d-log.(item)..."Pretty.print.a.l
4620 69 73 70 20 6f 62 6a 65 63 74 20 74 6f 20 74 68 65 20 6c 6f 67 2e 22 0a 20 20 28 77 69 74 68 2d isp.object.to.the.log."...(with-
4640 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 current-buffer.(get-buffer-creat
4660 65 20 22 2a 68 74 74 70 64 2a 22 29 0a 20 20 20 20 28 73 65 74 66 20 62 75 66 66 65 72 2d 72 65 e."*httpd*").....(setf.buffer-re
4680 61 64 2d 6f 6e 6c 79 20 6e 69 6c 29 0a 20 20 20 20 28 6c 65 74 20 28 28 66 6f 6c 6c 6f 77 20 28 ad-only.nil).....(let.((follow.(
46a0 3d 20 28 70 6f 69 6e 74 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 0a 20 20 20 20 20 20 28 =.(point).(point-max)))).......(
46c0 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 save-excursion.........(goto-cha
46e0 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 20 20 20 20 28 70 70 20 69 74 65 6d 20 r.(point-max)).........(pp.item.
4700 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 20 20 20 20 28 69 66 20 66 6f 6c (current-buffer))).......(if.fol
4720 6c 6f 77 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 0a 20 20 low.(goto-char.(point-max))))...
4740 20 20 28 73 65 74 66 20 74 72 75 6e 63 61 74 65 2d 6c 69 6e 65 73 20 74 0a 20 20 20 20 20 20 20 ..(setf.truncate-lines.t........
4760 20 20 20 62 75 66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79 20 74 29 0a 20 20 20 20 28 73 65 74 2d ...buffer-read-only.t).....(set-
4780 62 75 66 66 65 72 2d 6d 6f 64 69 66 69 65 64 2d 70 20 6e 69 6c 29 29 29 0a 0a 3b 3b 20 53 65 72 buffer-modified-p.nil)))..;;.Ser
47a0 76 6c 65 74 73 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f vlets..(defvar.httpd-current-pro
47c0 63 20 6e 69 6c 0a 20 20 22 54 68 65 20 70 72 6f 63 65 73 73 20 6f 62 6a 65 63 74 20 63 75 72 72 c.nil..."The.process.object.curr
47e0 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 2d ently.in.use.")..(defvar.httpd--
4800 68 65 61 64 65 72 2d 73 65 6e 74 20 6e 69 6c 0a 20 20 22 42 75 66 66 65 72 2d 6c 6f 63 61 6c 20 header-sent.nil..."Buffer-local.
4820 76 61 72 69 61 62 6c 65 20 69 6e 64 69 63 61 74 69 6e 67 20 69 66 20 74 68 65 20 68 65 61 64 65 variable.indicating.if.the.heade
4840 72 20 68 61 73 20 62 65 65 6e 20 73 65 6e 74 2e 22 29 0a 28 6d 61 6b 65 2d 76 61 72 69 61 62 6c r.has.been.sent.").(make-variabl
4860 65 2d 62 75 66 66 65 72 2d 6c 6f 63 61 6c 20 27 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 e-buffer-local.'httpd--header-se
4880 6e 74 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 72 65 73 6f 6c 76 65 2d 70 72 6f 63 20 28 nt)..(defun.httpd-resolve-proc.(
48a0 70 72 6f 63 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 63 6f 72 72 65 63 74 20 70 72 6f 63 proc)..."Return.the.correct.proc
48c0 65 73 73 20 74 6f 20 75 73 65 2e 20 54 68 69 73 20 68 61 6e 64 6c 65 73 20 60 68 74 74 70 64 2d ess.to.use..This.handles.`httpd-
48e0 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 2e 22 0a 20 20 28 69 66 20 28 65 71 20 74 20 70 72 6f 63 current-proc'."...(if.(eq.t.proc
4900 29 20 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 20 70 72 6f 63 29 29 0a 0a 28 64 65 ).httpd-current-proc.proc))..(de
4920 66 6d 61 63 72 6f 20 77 69 74 68 2d 68 74 74 70 64 2d 62 75 66 66 65 72 20 28 70 72 6f 63 20 6d fmacro.with-httpd-buffer.(proc.m
4940 69 6d 65 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 43 72 65 61 74 65 20 61 20 74 65 6d 70 ime.&rest.body)..."Create.a.temp
4960 6f 72 61 72 79 20 62 75 66 66 65 72 2c 20 73 65 74 20 69 74 20 61 73 20 74 68 65 20 63 75 72 72 orary.buffer,.set.it.as.the.curr
4980 65 6e 74 20 62 75 66 66 65 72 2c 20 61 6e 64 2c 0a 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 62 ent.buffer,.and,.at.the.end.of.b
49a0 6f 64 79 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 72 76 65 20 69 74 20 74 6f 20 61 ody,.automatically.serve.it.to.a
49c0 6e 20 48 54 54 50 20 63 6c 69 65 6e 74 20 77 69 74 68 0a 61 6e 20 48 54 54 50 20 68 65 61 64 65 n.HTTP.client.with.an.HTTP.heade
49e0 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 4d 49 4d 45 20 r.indicating.the.specified.MIME.
4a00 74 79 70 65 2e 20 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c 0a 60 73 74 61 6e 64 61 72 64 2d 6f 75 type..Additionally,.`standard-ou
4a20 74 70 75 74 27 20 69 73 20 73 65 74 20 74 6f 20 74 68 69 73 20 6f 75 74 70 75 74 20 62 75 66 66 tput'.is.set.to.this.output.buff
4a40 65 72 20 61 6e 64 0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 69 73 20 73 er.and.`httpd-current-proc'.is.s
4a60 65 74 20 74 6f 20 50 52 4f 43 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 et.to.PROC."...(declare.(indent.
4a80 64 65 66 75 6e 29 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 defun))...(let.((proc-sym.(make-
4aa0 73 79 6d 62 6f 6c 20 22 2d 2d 70 72 6f 63 2d 2d 22 29 29 29 0a 20 20 20 20 60 28 6c 65 74 20 28 symbol."--proc--"))).....`(let.(
4ac0 28 2c 70 72 6f 63 2d 73 79 6d 20 2c 70 72 6f 63 29 29 0a 20 20 20 20 20 20 20 28 77 69 74 68 2d (,proc-sym.,proc))........(with-
4ae0 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 28 73 65 74 66 20 6d 61 6a 6f 72 temp-buffer..........(setf.major
4b00 2d 6d 6f 64 65 20 27 68 74 74 70 64 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 28 6c -mode.'httpd-buffer)..........(l
4b20 65 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 et.((standard-output.(current-bu
4b40 66 66 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 63 75 72 ffer))................(httpd-cur
4b60 72 65 6e 74 2d 70 72 6f 63 20 2c 70 72 6f 63 2d 73 79 6d 29 29 0a 20 20 20 20 20 20 20 20 20 20 rent-proc.,proc-sym))...........
4b80 20 2c 40 62 6f 64 79 29 0a 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 20 68 74 74 70 64 2d .,@body)..........(unless.httpd-
4ba0 2d 68 65 61 64 65 72 2d 73 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 -header-sent............(httpd-s
4bc0 65 6e 64 2d 68 65 61 64 65 72 20 2c 70 72 6f 63 2d 73 79 6d 20 2c 6d 69 6d 65 20 32 30 30 29 29 end-header.,proc-sym.,mime.200))
4be0 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 ))))..(defun.httpd-discard-buffe
4c00 72 20 28 29 0a 20 20 22 44 6f 6e 27 74 20 72 65 73 70 6f 6e 64 20 75 73 69 6e 67 20 63 75 72 72 r.()..."Don't.respond.using.curr
4c20 65 6e 74 20 73 65 72 76 65 72 20 62 75 66 66 65 72 20 28 60 77 69 74 68 2d 68 74 74 70 64 2d 62 ent.server.buffer.(`with-httpd-b
4c40 75 66 66 65 72 27 29 2e 0a 52 65 74 75 72 6e 73 20 61 20 70 72 6f 63 65 73 73 20 66 6f 72 20 66 uffer')..Returns.a.process.for.f
4c60 75 74 75 72 65 20 72 65 73 70 6f 6e 73 65 2e 22 0a 20 20 28 77 68 65 6e 20 28 65 71 20 6d 61 6a uture.response."...(when.(eq.maj
4c80 6f 72 2d 6d 6f 64 65 20 27 68 74 74 70 64 2d 62 75 66 66 65 72 29 20 28 73 65 74 66 20 68 74 74 or-mode.'httpd-buffer).(setf.htt
4ca0 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20 74 29 29 0a 20 20 68 74 74 70 64 2d 63 75 72 72 pd--header-sent.t))...httpd-curr
4cc0 65 6e 74 2d 70 72 6f 63 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 64 65 66 73 65 72 76 6c 65 74 20 ent-proc)..(defmacro.defservlet.
4ce0 28 6e 61 6d 65 20 6d 69 6d 65 20 70 61 74 68 2d 71 75 65 72 79 2d 72 65 71 75 65 73 74 20 26 72 (name.mime.path-query-request.&r
4d00 65 73 74 20 62 6f 64 79 29 0a 20 20 22 44 65 66 69 6e 65 73 20 61 20 73 69 6d 70 6c 65 20 68 74 est.body)..."Defines.a.simple.ht
4d20 74 70 64 20 73 65 72 76 65 6c 65 74 2e 20 54 68 65 20 73 65 72 76 6c 65 74 20 72 75 6e 73 20 69 tpd.servelet..The.servlet.runs.i
4d40 6e 20 61 0a 74 65 6d 70 6f 72 61 72 79 20 62 75 66 66 65 72 20 77 68 69 63 68 20 69 73 20 61 75 n.a.temporary.buffer.which.is.au
4d60 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 6e 74 tomatically.served.to.the.client
4d80 0a 61 6c 6f 6e 67 20 77 69 74 68 20 61 20 68 65 61 64 65 72 2e 0a 0a 41 20 73 65 72 76 6c 65 74 .along.with.a.header...A.servlet
4da0 20 74 68 61 74 20 73 65 72 76 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 2a 73 63 .that.serves.the.contents.of.*sc
4dc0 72 61 74 63 68 2a 2c 0a 0a 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 20 73 63 72 61 74 63 68 ratch*,......(defservlet.scratch
4de0 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 29 0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 2d 62 75 66 .text/plain.().......(insert-buf
4e00 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 74 65 fer-substring.(get-buffer-create
4e20 20 5c 22 2a 73 63 72 61 74 63 68 2a 5c 22 29 29 29 0a 0a 41 20 73 65 72 76 6c 65 74 20 74 68 61 .\"*scratch*\")))..A.servlet.tha
4e40 74 20 73 61 79 73 20 68 65 6c 6c 6f 2c 0a 0a 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 20 68 t.says.hello,......(defservlet.h
4e60 65 6c 6c 6f 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 20 20 20 ello-world.text/plain.(path)....
4e80 20 20 20 28 69 6e 73 65 72 74 20 5c 22 68 65 6c 6c 6f 2c 20 5c 22 20 28 66 69 6c 65 2d 6e 61 6d ...(insert.\"hello,.\".(file-nam
4ea0 65 2d 6e 6f 6e 64 69 72 65 63 74 6f 72 79 20 70 61 74 68 29 29 29 29 22 0a 20 20 28 64 65 63 6c e-nondirectory.path))))"...(decl
4ec0 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 72 6f are.(indent.defun))...(let.((pro
4ee0 63 2d 73 79 6d 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 70 72 6f 63 22 29 29 0a 20 20 20 20 c-sym.(make-symbol."proc")).....
4f00 20 20 20 20 28 66 6e 61 6d 65 20 28 69 6e 74 65 72 6e 20 28 63 6f 6e 63 61 74 20 22 68 74 74 70 ....(fname.(intern.(concat."http
4f20 64 2f 22 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 6e 61 6d 65 29 29 29 29 29 0a 20 20 20 20 60 d/".(symbol-name.name))))).....`
4f40 28 64 65 66 75 6e 20 2c 66 6e 61 6d 65 20 28 2c 70 72 6f 63 2d 73 79 6d 20 2c 40 70 61 74 68 2d (defun.,fname.(,proc-sym.,@path-
4f60 71 75 65 72 79 2d 72 65 71 75 65 73 74 20 26 72 65 73 74 20 2c 28 63 6c 2d 67 65 6e 73 79 6d 29 query-request.&rest.,(cl-gensym)
4f80 29 0a 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 2c 70 72 6f )........(with-httpd-buffer.,pro
4fa0 63 2d 73 79 6d 20 2c 28 68 74 74 70 64 2d 2d 73 74 72 69 6e 67 69 66 79 20 6d 69 6d 65 29 0a 20 c-sym.,(httpd--stringify.mime)..
4fc0 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 ........,@body))))..(defun.httpd
4fe0 2d 70 61 72 73 65 2d 65 6e 64 70 6f 69 6e 74 20 28 73 79 6d 62 6f 6c 29 0a 20 20 22 50 61 72 73 -parse-endpoint.(symbol)..."Pars
5000 65 20 61 6e 20 65 6e 64 70 6f 69 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e 20 74 65 6d 70 6c 61 74 e.an.endpoint.definition.templat
5020 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 60 64 65 66 73 65 72 76 6c 65 74 2a 27 2e 22 0a 20 e.for.use.with.`defservlet*'."..
5040 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 69 74 65 6d 20 69 6e 20 28 73 70 6c 69 74 2d 73 74 72 .(cl-loop.for.item.in.(split-str
5060 69 6e 67 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 73 79 6d 62 6f 6c 29 20 22 2f 22 29 0a 20 20 ing.(symbol-name.symbol)."/")...
5080 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 75 70 66 72 6f 6d 20 30 0a 20 20 20 20 20 20 20 20 .........for.n.upfrom.0.........
50a0 20 20 20 77 68 65 6e 20 28 61 6e 64 20 28 3e 20 28 6c 65 6e 67 74 68 20 69 74 65 6d 29 20 30 29 ...when.(and.(>.(length.item).0)
50c0 20 28 65 71 6c 20 28 61 72 65 66 20 69 74 65 6d 20 30 29 20 3f 3a 29 29 0a 20 20 20 20 20 20 20 .(eql.(aref.item.0).?:))........
50e0 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 63 6f 6e 73 20 28 69 6e 74 65 72 6e 20 28 73 75 62 73 74 ....collect.(cons.(intern.(subst
5100 72 69 6e 67 20 69 74 65 6d 20 31 29 29 20 6e 29 20 69 6e 74 6f 20 76 61 72 73 0a 20 20 20 20 20 ring.item.1)).n).into.vars......
5120 20 20 20 20 20 20 65 6c 73 65 20 63 6f 6c 6c 65 63 74 20 69 74 65 6d 20 69 6e 74 6f 20 70 61 74 ......else.collect.item.into.pat
5140 68 0a 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 h............finally............
5160 28 63 6c 2d 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6c 2d 76 61 6c 75 65 (cl-return.............(cl-value
5180 73 20 28 69 6e 74 65 72 6e 20 28 6d 61 70 63 6f 6e 63 61 74 20 23 27 69 64 65 6e 74 69 74 79 20 s.(intern.(mapconcat.#'identity.
51a0 70 61 74 68 20 22 2f 22 29 29 20 76 61 72 73 29 29 29 29 0a 0a 28 64 65 66 76 61 72 20 68 74 74 path."/")).vars))))..(defvar.htt
51c0 70 64 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 6c pd-path.nil..."Anaphoric.variabl
51e0 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 76 61 72 20 e.for.`defservlet*'.")..(defvar.
5200 68 74 74 70 64 2d 71 75 65 72 79 20 6e 69 6c 0a 20 20 22 41 6e 61 70 68 6f 72 69 63 20 76 61 72 httpd-query.nil..."Anaphoric.var
5220 69 61 62 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 iable.for.`defservlet*'.")..(def
5240 76 61 72 20 68 74 74 70 64 2d 72 65 71 75 65 73 74 20 6e 69 6c 0a 20 20 22 41 6e 61 70 68 6f 72 var.httpd-request.nil..."Anaphor
5260 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 27 2e 22 29 ic.variable.for.`defservlet*'.")
5280 0a 0a 28 64 65 66 76 61 72 20 68 74 74 70 64 2d 73 70 6c 69 74 2d 70 61 74 68 20 6e 69 6c 0a 20 ..(defvar.httpd-split-path.nil..
52a0 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 65 66 73 65 72 ."Anaphoric.variable.for.`defser
52c0 76 6c 65 74 2a 27 2e 22 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 64 65 66 73 65 72 76 6c 65 74 2a vlet*'.")..(defmacro.defservlet*
52e0 20 28 65 6e 64 70 6f 69 6e 74 20 6d 69 6d 65 20 61 72 67 73 20 26 72 65 73 74 20 62 6f 64 79 29 .(endpoint.mime.args.&rest.body)
5300 0a 20 20 22 4c 69 6b 65 20 60 64 65 66 73 65 72 76 6c 65 74 27 2c 20 62 75 74 20 61 75 74 6f 6d ..."Like.`defservlet',.but.autom
5320 61 74 69 63 61 6c 6c 79 20 62 69 6e 64 20 76 61 72 69 61 62 6c 65 73 2f 61 72 67 75 6d 65 6e 74 atically.bind.variables/argument
5340 73 0a 74 6f 20 74 68 65 20 72 65 71 75 65 73 74 2e 20 54 72 61 69 6c 69 6e 67 20 63 6f 6d 70 6f s.to.the.request..Trailing.compo
5360 6e 65 6e 74 73 20 6f 66 20 74 68 65 20 45 4e 44 50 4f 49 4e 54 20 63 61 6e 20 62 65 20 62 6f 75 nents.of.the.ENDPOINT.can.be.bou
5380 6e 64 0a 62 79 20 70 72 65 66 69 78 69 6e 67 20 74 68 65 73 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 nd.by.prefixing.these.components
53a0 20 77 69 74 68 20 61 20 63 6f 6c 6f 6e 2c 20 61 63 74 69 6e 67 20 6c 69 6b 65 20 61 20 74 65 6d .with.a.colon,.acting.like.a.tem
53c0 70 6c 61 74 65 2e 0a 0a 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 2a 20 70 61 63 6b 61 67 65 plate.......(defservlet*.package
53e0 73 2f 3a 70 61 63 6b 61 67 65 2f 3a 76 65 72 73 69 6f 6e 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 s/:package/:version.text/plain.(
5400 76 65 72 62 6f 73 65 29 0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 5c verbose).......(insert.(format.\
5420 22 25 73 5c 5c 6e 25 73 5c 5c 6e 5c 22 20 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a "%s\\n%s\\n\".package.version)).
5440 20 20 20 20 20 20 28 70 72 69 6e 63 20 28 67 65 74 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 70 61 ......(princ.(get-description.pa
5460 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 29 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 76 65 72 62 ckage.version)).......(when.verb
5480 6f 73 65 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 5c 22 25 53 ose.........(insert.(format.\"%S
54a0 5c 22 20 28 67 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 \".(get-dependencies.package.ver
54c0 73 69 6f 6e 29 29 29 29 29 0a 0a 57 68 65 6e 20 61 63 63 65 73 73 65 64 20 66 72 6f 6d 20 74 68 sion)))))..When.accessed.from.th
54e0 69 73 20 55 52 4c 2c 0a 0a 20 20 20 20 68 74 74 70 3a 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f 6d 2f is.URL,......http://example.com/
5500 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 0a 74 packages/foobar/1.0?verbose=1..t
5520 68 65 20 76 61 72 69 61 62 6c 65 73 20 70 61 63 6b 61 67 65 2c 20 76 65 72 73 69 6f 6e 2c 20 61 he.variables.package,.version,.a
5540 6e 64 20 76 65 72 62 6f 73 65 20 77 69 6c 6c 20 62 65 20 62 6f 75 6e 64 20 74 6f 20 74 68 65 0a nd.verbose.will.be.bound.to.the.
5560 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 65 20 55 52 4c associated.components.of.the.URL
5580 2e 20 43 6f 6d 70 6f 6e 65 6e 74 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 61 72 65 0a 62 6f ..Components.not.provided.are.bo
55a0 75 6e 64 20 74 6f 20 6e 69 6c 2e 20 54 68 65 20 71 75 65 72 79 20 61 72 67 75 6d 65 6e 74 73 20 und.to.nil..The.query.arguments.
55c0 63 61 6e 20 75 73 65 20 74 68 65 20 43 6f 6d 6d 6f 6e 20 4c 69 73 70 20 26 6b 65 79 0a 66 6f 72 can.use.the.Common.Lisp.&key.for
55e0 6d 20 28 76 61 72 69 61 62 6c 65 20 64 65 66 61 75 6c 74 20 70 72 6f 76 69 64 65 64 2d 70 29 2e m.(variable.default.provided-p).
5600 0a 0a 20 20 20 20 28 64 65 66 73 65 72 76 6c 65 74 2a 20 67 72 65 65 74 69 6e 67 2f 3a 6e 61 6d ......(defservlet*.greeting/:nam
5620 65 20 74 65 78 74 2f 70 6c 61 69 6e 20 28 28 67 72 65 65 74 69 6e 67 20 5c 22 68 69 5c 22 20 67 e.text/plain.((greeting.\"hi\".g
5640 72 65 65 74 69 6e 67 2d 70 29 29 0a 20 20 20 20 20 20 28 70 72 69 6e 63 20 28 66 6f 72 6d 61 74 reeting-p)).......(princ.(format
5660 20 5c 22 25 73 2c 20 25 73 20 28 70 72 6f 76 69 64 65 64 3a 20 25 73 29 5c 22 20 67 72 65 65 74 .\"%s,.%s.(provided:.%s)\".greet
5680 69 6e 67 20 6e 61 6d 65 20 67 72 65 65 74 69 6e 67 2d 70 29 29 29 0a 0a 54 68 65 20 6f 72 69 67 ing.name.greeting-p)))..The.orig
56a0 69 6e 61 6c 20 70 61 74 68 2c 20 71 75 65 72 79 2c 20 61 6e 64 20 72 65 71 75 65 73 74 20 63 61 inal.path,.query,.and.request.ca
56c0 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 0a 61 6e 61 70 68 6f 72 69 63 20 73 n.be.accessed.by.the.anaphoric.s
56e0 70 65 63 69 61 6c 20 76 61 72 69 61 62 6c 65 73 20 60 68 74 74 70 64 2d 70 61 74 68 27 2c 20 60 pecial.variables.`httpd-path',.`
5700 68 74 74 70 64 2d 71 75 65 72 79 27 2c 20 61 6e 64 0a 60 68 74 74 70 64 2d 72 65 71 75 65 73 74 httpd-query',.and.`httpd-request
5720 27 2e 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 29 0a 20 '."...(declare.(indent.defun))..
5740 20 28 6c 65 74 20 28 28 70 61 74 68 2d 6c 65 78 69 63 61 6c 20 28 63 6c 2d 67 65 6e 73 79 6d 29 .(let.((path-lexical.(cl-gensym)
5760 29 0a 20 20 20 20 20 20 20 20 28 71 75 65 72 79 2d 6c 65 78 69 63 61 6c 20 28 63 6c 2d 67 65 6e ).........(query-lexical.(cl-gen
5780 73 79 6d 29 29 0a 20 20 20 20 20 20 20 20 28 72 65 71 75 65 73 74 2d 6c 65 78 69 63 61 6c 20 28 sym)).........(request-lexical.(
57a0 63 6c 2d 67 65 6e 73 79 6d 29 29 29 0a 20 20 20 20 28 63 6c 2d 6d 75 6c 74 69 70 6c 65 2d 76 61 cl-gensym))).....(cl-multiple-va
57c0 6c 75 65 2d 62 69 6e 64 20 28 70 61 74 68 20 76 61 72 73 29 20 28 68 74 74 70 64 2d 70 61 72 73 lue-bind.(path.vars).(httpd-pars
57e0 65 2d 65 6e 64 70 6f 69 6e 74 20 65 6e 64 70 6f 69 6e 74 29 0a 20 20 20 20 20 20 60 28 64 65 66 e-endpoint.endpoint).......`(def
5800 73 65 72 76 6c 65 74 20 2c 70 61 74 68 20 2c 6d 69 6d 65 20 28 2c 70 61 74 68 2d 6c 65 78 69 63 servlet.,path.,mime.(,path-lexic
5820 61 6c 20 2c 71 75 65 72 79 2d 6c 65 78 69 63 61 6c 20 2c 72 65 71 75 65 73 74 2d 6c 65 78 69 63 al.,query-lexical.,request-lexic
5840 61 6c 29 0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 68 74 74 70 64 2d 70 61 74 68 20 2c al)..........(let.((httpd-path.,
5860 70 61 74 68 2d 6c 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 path-lexical)................(ht
5880 74 70 64 2d 71 75 65 72 79 20 2c 71 75 65 72 79 2d 6c 65 78 69 63 61 6c 29 0a 20 20 20 20 20 20 tpd-query.,query-lexical).......
58a0 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 72 65 71 75 65 73 74 20 2c 72 65 71 75 65 73 74 .........(httpd-request.,request
58c0 2d 6c 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 -lexical)................(httpd-
58e0 73 70 6c 69 74 2d 70 61 74 68 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 split-path.(split-string........
5900 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 73 75 62 73 ...........................(subs
5920 74 72 69 6e 67 20 2c 70 61 74 68 2d 6c 65 78 69 63 61 6c 20 31 29 20 22 2f 22 29 29 29 0a 20 20 tring.,path-lexical.1)."/")))...
5940 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 20 28 76 61 72 .........(let.,(cl-loop.for.(var
5960 20 2e 20 70 6f 73 29 20 69 6e 20 76 61 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...pos).in.vars.................
5980 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 65 78 74 72 61 63 74 20 3d 0a 20 20 20 20 20 20 20 20 ..........for.extract.=.........
59a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28 68 74 74 70 64 2d 75 6e 68 65 78 20 ..................`(httpd-unhex.
59c0 28 6e 74 68 20 2c 70 6f 73 20 68 74 74 70 64 2d 73 70 6c 69 74 2d 70 61 74 68 29 29 0a 20 20 20 (nth.,pos.httpd-split-path))....
59e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 .......................collect.(
5a00 6c 69 73 74 20 76 61 72 20 65 78 74 72 61 63 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 list.var.extract))..............
5a20 28 6c 65 74 20 2c 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 61 72 67 20 69 6e 20 61 72 67 73 0a 20 (let.,(cl-loop.for.arg.in.args..
5a40 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 66 6f 72 20 68 ...........................for.h
5a60 61 73 2d 64 65 66 61 75 6c 74 20 3d 20 28 6c 69 73 74 70 20 61 72 67 29 0a 20 20 20 20 20 20 20 as-default.=.(listp.arg)........
5a80 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 68 61 73 2d 64 65 66 .....................for.has-def
5aa0 61 75 6c 74 2d 70 20 3d 20 28 61 6e 64 20 68 61 73 2d 64 65 66 61 75 6c 74 0a 20 20 20 20 20 20 ault-p.=.(and.has-default.......
5ac0 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 ................................
5ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3d 20 33 20 28 6c 65 6e 67 74 68 20 61 72 67 29 ...............(=.3.(length.arg)
5b00 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 20 20 20 66 )).............................f
5b20 6f 72 20 61 72 67 2d 6e 61 6d 65 20 3d 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 0a 20 20 20 20 20 or.arg-name.=.(symbol-name......
5b40 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 ................................
5b60 20 20 20 20 20 20 20 28 69 66 20 68 61 73 2d 64 65 66 61 75 6c 74 20 28 63 6c 2d 66 69 72 73 74 .......(if.has-default.(cl-first
5b80 20 61 72 67 29 20 61 72 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .arg).arg)).....................
5ba0 20 20 20 20 20 20 20 20 77 68 65 6e 20 68 61 73 2d 64 65 66 61 75 6c 74 20 63 6f 6c 6c 65 63 74 ........when.has-default.collect
5bc0 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 20 28 6c 69 .............................(li
5be0 73 74 20 28 63 6c 2d 66 69 72 73 74 20 61 72 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 st.(cl-first.arg)...............
5c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28 6c 65 74 20 28 28 76 61 6c 75 ....................`(let.((valu
5c20 65 20 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61 6d 65 20 68 74 74 70 64 2d 71 75 65 72 79 29 29 e.(assoc.,arg-name.httpd-query))
5c40 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 20 20 20 )...............................
5c60 20 20 20 20 20 20 20 28 69 66 20 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .......(if.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 28 63 6c 2d 73 65 ..........................(cl-se
5ca0 63 6f 6e 64 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 20 20 20 cond.value).....................
5cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 28 63 6c 2d 73 65 63 6f 6e 64 20 61 ...................,(cl-second.a
5ce0 72 67 29 29 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 rg))))..........................
5d00 20 20 20 65 6c 73 65 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 ...else.collect.................
5d20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 61 72 67 20 60 28 63 6c 2d 73 65 63 6f 6e ............(list.arg.`(cl-secon
5d40 64 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 20 20 20 d...............................
5d60 20 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61 6d 65 20 68 74 74 70 64 ..........(assoc.,arg-name.httpd
5d80 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 20 20 20 20 20 20 -query))).......................
5da0 20 20 20 20 20 20 77 68 65 6e 20 68 61 73 2d 64 65 66 61 75 6c 74 2d 70 20 63 6f 6c 6c 65 63 74 ......when.has-default-p.collect
5dc0 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 20 28 6c 69 .............................(li
5de0 73 74 20 28 63 6c 2d 74 68 69 72 64 20 61 72 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 st.(cl-third.arg)...............
5e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28 6e 6f 74 20 28 6e 75 6c 6c 20 ....................`(not.(null.
5e20 28 61 73 73 6f 63 20 2c 61 72 67 2d 6e 61 6d 65 20 68 74 74 70 64 2d 71 75 65 72 79 29 29 29 29 (assoc.,arg-name.httpd-query))))
5e40 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 29 29 29 29 29 0a 0a )................,@body)))))))..
5e60 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 61 64 64 2d 6b 65 79 77 6f 72 64 73 0a 20 27 65 6d 61 63 73 2d (font-lock-add-keywords..'emacs-
5e80 6c 69 73 70 2d 6d 6f 64 65 0a 20 27 28 28 22 28 5c 5c 3c 5c 5c 28 64 65 66 73 65 72 76 6c 65 74 lisp-mode..'(("(\\<\\(defservlet
5ea0 5c 5c 2a 3f 5c 5c 29 5c 5c 3e 20 2b 5c 5c 28 5b 5e 20 28 29 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e \\*?\\)\\>.+\\([^.()]+\\).+\\([^
5ec0 20 28 29 5d 2b 5c 5c 29 22 0a 20 20 20 20 28 31 20 27 66 6f 6e 74 2d 6c 6f 63 6b 2d 6b 65 79 77 .()]+\\)".....(1.'font-lock-keyw
5ee0 6f 72 64 2d 66 61 63 65 29 0a 20 20 20 20 28 32 20 27 66 6f 6e 74 2d 6c 6f 63 6b 2d 66 75 6e 63 ord-face).....(2.'font-lock-func
5f00 74 69 6f 6e 2d 6e 61 6d 65 2d 66 61 63 65 29 0a 20 20 20 20 28 33 20 27 66 6f 6e 74 2d 6c 6f 63 tion-name-face).....(3.'font-loc
5f20 6b 2d 74 79 70 65 2d 66 61 63 65 29 29 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 68 74 74 70 64 k-type-face))))..(defmacro.httpd
5f40 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 74 20 28 6e 61 6d 65 20 72 6f 6f 74 29 0a 20 20 -def-file-servlet.(name.root)...
5f60 22 44 65 66 69 6e 65 73 20 61 20 73 65 72 76 6c 65 74 20 74 68 61 74 20 73 65 72 76 65 73 20 66 "Defines.a.servlet.that.serves.f
5f80 69 6c 65 73 20 66 72 6f 6d 20 52 4f 4f 54 20 75 6e 64 65 72 20 74 68 65 20 72 6f 75 74 65 20 4e iles.from.ROOT.under.the.route.N
5fa0 41 4d 45 2e 0a 0a 20 20 20 20 28 68 74 74 70 64 2d 64 65 66 2d 66 69 6c 65 2d 73 65 72 76 6c 65 AME.......(httpd-def-file-servle
5fc0 74 20 6d 79 2f 77 77 77 20 5c 22 2f 76 61 72 2f 77 77 77 2f 5c 22 29 0a 0a 41 75 74 6f 6d 61 74 t.my/www.\"/var/www/\")..Automat
5fe0 69 63 61 6c 6c 79 20 68 61 6e 64 6c 65 73 20 72 65 64 69 72 65 63 74 73 20 61 6e 64 20 75 73 65 ically.handles.redirects.and.use
6000 73 20 60 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f 74 27 20 74 6f 0a 61 63 74 75 61 6c 6c 79 s.`httpd-serve-root'.to.actually
6020 20 73 65 72 76 65 20 75 70 20 66 69 6c 65 73 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 73 68 6f 72 .serve.up.files."...(let*.((shor
6040 74 2d 72 6f 6f 74 20 28 64 69 72 65 63 74 6f 72 79 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 73 79 6d t-root.(directory-file-name.(sym
6060 62 6f 6c 2d 6e 61 6d 65 20 6e 61 6d 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 74 68 2d bol-name.name)))..........(path-
6080 72 6f 6f 74 20 28 63 6f 6e 63 61 74 20 73 68 6f 72 74 2d 72 6f 6f 74 20 22 2f 22 29 29 0a 20 20 root.(concat.short-root."/"))...
60a0 20 20 20 20 20 20 20 28 63 68 6f 70 20 28 6c 65 6e 67 74 68 20 70 61 74 68 2d 72 6f 6f 74 29 29 .......(chop.(length.path-root))
60c0 29 0a 20 20 20 20 60 28 64 65 66 73 65 72 76 6c 65 74 20 2c 6e 61 6d 65 20 6e 69 6c 20 28 75 72 ).....`(defservlet.,name.nil.(ur
60e0 69 2d 70 61 74 68 20 71 75 65 72 79 20 72 65 71 75 65 73 74 29 0a 20 20 20 20 20 20 20 28 73 65 i-path.query.request)........(se
6100 74 66 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 2d 73 65 6e 74 20 74 29 20 3b 20 44 6f 6e 27 74 tf.httpd--header-sent.t).;.Don't
6120 20 61 63 74 75 61 6c 6c 79 20 75 73 65 20 74 68 69 73 20 74 65 6d 70 20 62 75 66 66 65 72 0a 20 .actually.use.this.temp.buffer..
6140 20 20 20 20 20 20 28 69 66 20 28 3d 20 28 6c 65 6e 67 74 68 20 75 72 69 2d 70 61 74 68 29 20 2c ......(if.(=.(length.uri-path).,
6160 63 68 6f 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 72 65 64 69 72 65 63 74 chop)............(httpd-redirect
6180 20 74 20 2c 70 61 74 68 2d 72 6f 6f 74 29 0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 .t.,path-root)..........(let.((p
61a0 61 74 68 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 2d 70 61 74 68 20 2c 63 68 6f 70 29 29 29 ath.(substring.uri-path.,chop)))
61c0 0a 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f 74 20 74 20 ............(httpd-serve-root.t.
61e0 2c 72 6f 6f 74 20 70 61 74 68 20 72 65 71 75 65 73 74 29 29 29 29 29 29 0a 0a 3b 3b 20 52 65 71 ,root.path.request))))))..;;.Req
6200 75 65 73 74 20 70 61 72 73 69 6e 67 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 6e 6f 72 6d uest.parsing..(defun.httpd--norm
6220 61 6c 69 7a 65 2d 68 65 61 64 65 72 20 28 68 65 61 64 65 72 29 0a 20 20 22 44 65 73 74 72 75 63 alize-header.(header)..."Destruc
6240 74 69 76 65 6c 79 20 63 61 70 69 74 61 6c 69 7a 65 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 tively.capitalize.the.components
6260 20 6f 66 20 48 45 41 44 45 52 2e 22 0a 20 20 28 6d 61 70 63 6f 6e 63 61 74 20 23 27 63 61 70 69 .of.HEADER."...(mapconcat.#'capi
6280 74 61 6c 69 7a 65 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 68 65 61 64 65 72 20 22 2d 22 29 talize.(split-string.header."-")
62a0 20 22 2d 22 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 70 61 72 73 65 20 28 29 0a 20 20 ."-"))..(defun.httpd-parse.()...
62c0 22 50 61 72 73 65 20 48 54 54 50 20 68 65 61 64 65 72 20 69 6e 20 63 75 72 72 65 6e 74 20 62 75 "Parse.HTTP.header.in.current.bu
62e0 66 66 65 72 20 69 6e 74 6f 20 61 73 73 6f 63 69 61 74 69 6f 6e 20 6c 69 73 74 2e 0a 4c 65 61 76 ffer.into.association.list..Leav
6300 65 73 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 es.the.point.at.the.start.of.the
6320 20 72 65 71 75 65 73 74 20 63 6f 6e 74 65 6e 74 2e 20 52 65 74 75 72 6e 73 20 6e 69 6c 0a 69 66 .request.content..Returns.nil.if
6340 20 69 74 20 66 61 69 6c 65 64 20 74 6f 20 70 61 72 73 65 20 61 20 63 6f 6d 70 6c 65 74 65 20 48 .it.failed.to.parse.a.complete.H
6360 54 54 50 20 68 65 61 64 65 72 2e 22 0a 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 TTP.header."...(goto-char.(point
6380 2d 6d 69 6e 29 29 0a 20 20 28 77 68 65 6e 20 28 6c 6f 6f 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 5b -min))...(when.(looking-at."\\([
63a0 5e 20 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e 20 5d 2b 5c 5c 29 20 2b 5c 5c 28 5b 5e 5c 72 5d 2b 5c ^.]+\\).+\\([^.]+\\).+\\([^\r]+\
63c0 5c 29 5c 72 5c 6e 22 29 0a 20 20 20 20 28 6c 65 74 20 28 28 6d 65 74 68 6f 64 20 28 6d 61 74 63 \)\r\n").....(let.((method.(matc
63e0 68 2d 73 74 72 69 6e 67 20 31 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 61 74 68 20 28 64 65 h-string.1))...........(path.(de
6400 63 6f 64 65 2d 63 6f 64 69 6e 67 2d 73 74 72 69 6e 67 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 code-coding-string.(match-string
6420 20 32 29 20 27 69 73 6f 2d 38 38 35 39 2d 31 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 76 65 72 .2).'iso-8859-1))...........(ver
6440 73 69 6f 6e 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 33 29 29 0a 20 20 20 20 20 20 20 20 20 sion.(match-string.3))..........
6460 20 28 68 65 61 64 65 72 73 20 28 29 29 29 0a 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 .(headers.())).......(goto-char.
6480 28 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20 20 20 20 20 20 28 77 68 69 6c 65 20 28 6c 6f 6f (match-end.0)).......(while.(loo
64a0 6b 69 6e 67 2d 61 74 20 22 5c 5c 28 5b 2d 21 23 2d 27 2a 2b 2e 30 2d 39 41 2d 5a 5e 5f 60 61 2d king-at."\\([-!#-'*+.0-9A-Z^_`a-
64c0 7a 7c 7e 5d 2b 5c 5c 29 3a 20 2a 5c 5c 28 5b 5e 5c 72 5d 2b 5c 5c 29 5c 72 5c 6e 22 29 0a 20 20 z|~]+\\):.*\\([^\r]+\\)\r\n")...
64e0 20 20 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 ......(goto-char.(match-end.0)).
6500 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 6e 61 6d 65 20 28 6d 61 74 63 68 2d 73 74 72 69 6e ........(let.((name.(match-strin
6520 67 20 31 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 76 61 6c 75 65 20 28 6d 61 74 63 g.1))...............(value.(matc
6540 68 2d 73 74 72 69 6e 67 20 32 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 70 75 73 68 20 28 6c h-string.2)))...........(push.(l
6560 69 73 74 20 28 68 74 74 70 64 2d 2d 6e 6f 72 6d 61 6c 69 7a 65 2d 68 65 61 64 65 72 20 6e 61 6d ist.(httpd--normalize-header.nam
6580 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 63 6f 64 65 e).......................(decode
65a0 2d 63 6f 64 69 6e 67 2d 73 74 72 69 6e 67 20 76 61 6c 75 65 20 27 69 73 6f 2d 38 38 35 39 2d 31 -coding-string.value.'iso-8859-1
65c0 29 29 20 68 65 61 64 65 72 73 29 29 29 0a 20 20 20 20 20 20 28 77 68 65 6e 20 28 6c 6f 6f 6b 69 )).headers))).......(when.(looki
65e0 6e 67 2d 61 74 20 22 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 ng-at."\r\n").........(goto-char
6600 20 28 6d 61 74 63 68 2d 65 6e 64 20 30 29 29 0a 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 28 6c .(match-end.0)).........(cons.(l
6620 69 73 74 20 6d 65 74 68 6f 64 20 70 61 74 68 20 76 65 72 73 69 6f 6e 29 20 28 6e 72 65 76 65 72 ist.method.path.version).(nrever
6640 73 65 20 68 65 61 64 65 72 73 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 75 se.headers))))))..(defun.httpd-u
6660 6e 68 65 78 20 28 73 74 72 29 0a 20 20 22 46 75 6c 6c 79 20 64 65 63 6f 64 65 20 74 68 65 20 55 nhex.(str)..."Fully.decode.the.U
6680 52 4c 20 65 6e 63 6f 64 69 6e 67 20 69 6e 20 53 54 52 20 28 69 6e 63 6c 75 64 69 6e 67 20 2b 27 RL.encoding.in.STR.(including.+'
66a0 73 29 2e 22 0a 20 20 28 77 68 65 6e 20 73 74 72 0a 20 20 20 20 28 6c 65 74 20 28 28 6e 6f 6e 70 s)."...(when.str.....(let.((nonp
66c0 6c 75 73 73 65 64 20 28 72 65 70 6c 61 63 65 2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 lussed.(replace-regexp-in-string
66e0 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 22 2b 22 29 20 22 20 22 20 73 74 72 29 29 29 0a 20 .(regexp-quote."+").".".str)))..
6700 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 28 75 72 6c 2d .....(decode-coding-string.(url-
6720 75 6e 68 65 78 2d 73 74 72 69 6e 67 20 6e 6f 6e 70 6c 75 73 73 65 64 20 74 29 20 27 75 74 66 2d unhex-string.nonplussed.t).'utf-
6740 38 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 61 72 67 73 20 28 8))))..(defun.httpd-parse-args.(
6760 61 72 67 73 74 72 29 0a 20 20 22 50 61 72 73 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 argstr)..."Parse.a.string.contai
6780 6e 69 6e 67 20 55 52 4c 20 65 6e 63 6f 64 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 22 0a 20 20 28 ning.URL.encoded.arguments."...(
67a0 75 6e 6c 65 73 73 20 28 7a 65 72 6f 70 20 28 6c 65 6e 67 74 68 20 61 72 67 73 74 72 29 29 0a 20 unless.(zerop.(length.argstr))..
67c0 20 20 20 28 6d 61 70 63 61 72 20 28 6c 61 6d 62 64 61 20 28 73 74 72 29 0a 20 20 20 20 20 20 20 ...(mapcar.(lambda.(str)........
67e0 20 20 20 20 20 20 20 28 6d 61 70 63 61 72 20 27 68 74 74 70 64 2d 75 6e 68 65 78 20 28 73 70 6c .......(mapcar.'httpd-unhex.(spl
6800 69 74 2d 73 74 72 69 6e 67 20 73 74 72 20 22 3d 22 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 it-string.str."=")))............
6820 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 61 72 67 73 74 72 20 22 26 22 29 29 29 29 0a 0a 28 .(split-string.argstr."&"))))..(
6840 64 65 66 75 6e 20 68 74 74 70 64 2d 70 61 72 73 65 2d 75 72 69 20 28 75 72 69 29 0a 20 20 22 53 defun.httpd-parse-uri.(uri)..."S
6860 70 6c 69 74 20 61 20 55 52 49 20 69 6e 74 6f 20 69 74 73 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0a plit.a.URI.into.its.components..
6880 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 20 The.first.element.of.the.return.
68a0 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 63 72 69 70 74 20 70 61 74 68 2c 20 74 68 65 0a 73 65 value.is.the.script.path,.the.se
68c0 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 6c 69 73 74 20 6f 66 20 76 61 72 69 cond.element.is.an.alist.of.vari
68e0 61 62 6c 65 2f 76 61 6c 75 65 20 70 61 69 72 73 2c 20 61 6e 64 20 74 68 65 20 74 68 69 72 64 0a able/value.pairs,.and.the.third.
6900 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 66 72 61 67 6d 65 6e 74 2e 22 0a 20 20 28 6c 65 74 element.is.the.fragment."...(let
6920 20 28 28 70 31 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 74 .((p1.(string-match.(regexp-quot
6940 65 20 22 3f 22 29 20 75 72 69 29 29 0a 20 20 20 20 20 20 20 20 28 70 32 20 28 73 74 72 69 6e 67 e."?").uri)).........(p2.(string
6960 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 2d 71 75 6f 74 65 20 22 23 22 29 20 75 72 69 29 29 0a -match.(regexp-quote."#").uri)).
6980 20 20 20 20 20 20 20 20 72 65 74 76 61 6c 29 0a 20 20 20 20 28 70 75 73 68 20 28 69 66 20 70 32 ........retval).....(push.(if.p2
69a0 20 28 68 74 74 70 64 2d 75 6e 68 65 78 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 20 28 31 2b .(httpd-unhex.(substring.uri.(1+
69c0 20 70 32 29 29 29 29 20 72 65 74 76 61 6c 29 0a 20 20 20 20 28 70 75 73 68 20 28 69 66 20 70 31 .p2)))).retval).....(push.(if.p1
69e0 20 28 68 74 74 70 64 2d 70 61 72 73 65 2d 61 72 67 73 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 .(httpd-parse-args.(substring.ur
6a00 69 20 28 31 2b 20 70 31 29 20 70 32 29 29 29 20 72 65 74 76 61 6c 29 0a 20 20 20 20 28 70 75 73 i.(1+.p1).p2))).retval).....(pus
6a20 68 20 28 73 75 62 73 74 72 69 6e 67 20 75 72 69 20 30 20 28 6f 72 20 70 31 20 70 32 29 29 20 72 h.(substring.uri.0.(or.p1.p2)).r
6a40 65 74 76 61 6c 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 etval)))..(defun.httpd-escape-ht
6a60 6d 6c 2d 62 75 66 66 65 72 20 28 29 0a 20 20 22 45 73 63 61 70 65 20 63 75 72 72 65 6e 74 20 62 ml-buffer.()..."Escape.current.b
6a80 75 66 66 65 72 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 62 65 20 73 61 66 65 20 66 6f 72 20 69 6e uffer.contents.to.be.safe.for.in
6aa0 73 65 72 74 69 6e 67 20 69 6e 74 6f 20 48 54 4d 4c 2e 22 0a 20 20 28 67 6f 74 6f 2d 63 68 61 72 serting.into.HTML."...(goto-char
6ac0 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 28 77 68 69 6c 65 20 28 73 65 61 72 63 68 2d 66 .(point-min))...(while.(search-f
6ae0 6f 72 77 61 72 64 2d 72 65 67 65 78 70 20 22 5b 3c 3e 26 5d 22 20 6e 69 6c 20 74 29 0a 20 20 20 orward-regexp."[<>&]".nil.t)....
6b00 20 28 72 65 70 6c 61 63 65 2d 6d 61 74 63 68 0a 20 20 20 20 20 28 63 6c 2d 63 61 73 65 20 28 61 .(replace-match......(cl-case.(a
6b20 72 65 66 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 30 29 20 30 29 0a 20 20 20 20 20 20 20 28 ref.(match-string.0).0)........(
6b40 3f 3c 20 22 26 6c 74 3b 22 29 0a 20 20 20 20 20 20 20 28 3f 3e 20 22 26 67 74 3b 22 29 0a 20 20 ?<."&lt;")........(?>."&gt;")...
6b60 20 20 20 20 20 28 3f 26 20 22 26 61 6d 70 3b 22 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 .....(?&."&amp;")))))..(defun.ht
6b80 74 70 64 2d 65 73 63 61 70 65 2d 68 74 6d 6c 20 28 73 74 72 69 6e 67 29 0a 20 20 22 45 73 63 61 tpd-escape-html.(string)..."Esca
6ba0 70 65 20 53 54 52 49 4e 47 20 73 6f 20 74 68 61 74 20 69 74 27 73 20 73 61 66 65 20 74 6f 20 69 pe.STRING.so.that.it's.safe.to.i
6bc0 6e 73 65 72 74 20 69 6e 74 6f 20 61 6e 20 48 54 4d 4c 20 64 6f 63 75 6d 65 6e 74 2e 22 0a 20 20 nsert.into.an.HTML.document."...
6be0 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 28 69 6e 73 65 72 74 20 73 74 (with-temp-buffer.....(insert.st
6c00 72 69 6e 67 29 0a 20 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 ring).....(httpd-escape-html-buf
6c20 66 65 72 29 0a 20 20 20 20 28 62 75 66 66 65 72 2d 73 74 72 69 6e 67 29 29 29 0a 0a 3b 3b 20 50 fer).....(buffer-string)))..;;.P
6c40 61 74 68 20 68 61 6e 64 6c 69 6e 67 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 74 61 74 75 ath.handling..(defun.httpd-statu
6c60 73 20 28 70 61 74 68 29 0a 20 20 22 44 65 74 65 72 6d 69 6e 65 20 73 74 61 74 75 73 20 63 6f 64 s.(path)..."Determine.status.cod
6c80 65 20 66 6f 72 20 50 41 54 48 2e 22 0a 20 20 28 63 6f 6e 64 0a 20 20 20 28 28 6e 6f 74 20 28 66 e.for.PATH."...(cond....((not.(f
6ca0 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 70 61 74 68 29 29 20 20 20 34 30 34 29 0a 20 20 20 28 28 ile-exists-p.path))...404)....((
6cc0 6e 6f 74 20 28 66 69 6c 65 2d 72 65 61 64 61 62 6c 65 2d 70 20 70 61 74 68 29 29 20 34 30 33 29 not.(file-readable-p.path)).403)
6ce0 0a 20 20 20 28 28 61 6e 64 20 28 66 69 6c 65 2d 64 69 72 65 63 74 6f 72 79 2d 70 20 70 61 74 68 ....((and.(file-directory-p.path
6d00 29 20 28 6e 6f 74 20 68 74 74 70 64 2d 6c 69 73 74 69 6e 67 73 29 29 20 34 30 33 29 0a 20 20 20 ).(not.httpd-listings)).403)....
6d20 28 32 30 30 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 63 6c 65 61 6e 2d 70 61 74 68 (200)))..(defun.httpd-clean-path
6d40 20 28 70 61 74 68 29 0a 20 20 22 43 6c 65 61 6e 20 64 61 6e 67 65 72 6f 75 73 20 2e 2e 20 66 72 .(path)..."Clean.dangerous....fr
6d60 6f 6d 20 50 41 54 48 20 61 6e 64 20 72 65 6d 6f 76 65 20 74 68 65 20 6c 65 61 64 69 6e 67 20 73 om.PATH.and.remove.the.leading.s
6d80 6c 61 73 68 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 73 65 70 20 28 69 66 20 28 6d 65 6d 62 65 72 lash."...(let*.((sep.(if.(member
6da0 20 73 79 73 74 65 6d 2d 74 79 70 65 20 27 28 77 69 6e 64 6f 77 73 2d 6e 74 20 6d 73 2d 64 6f 73 .system-type.'(windows-nt.ms-dos
6dc0 29 29 20 22 5b 2f 5c 5c 5d 22 20 22 2f 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 ))."[/\\]"."/"))..........(split
6de0 20 28 64 65 6c 65 74 65 20 22 2e 2e 22 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 70 61 74 68 .(delete."..".(split-string.path
6e00 20 73 65 70 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 75 6e 73 70 6c 69 74 20 28 6d 61 70 63 6f .sep)))..........(unsplit.(mapco
6e20 6e 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28 64 65 6c 65 74 65 20 22 22 20 73 70 6c 69 74 29 ncat.'identity.(delete."".split)
6e40 20 22 2f 22 29 29 29 0a 20 20 20 20 28 63 6f 6e 63 61 74 20 22 2e 2f 22 20 75 6e 73 70 6c 69 74 ."/"))).....(concat."./".unsplit
6e60 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 67 65 6e 2d 70 61 74 68 20 28 70 61 74 68 )))..(defun.httpd-gen-path.(path
6e80 20 26 6f 70 74 69 6f 6e 61 6c 20 72 6f 6f 74 29 0a 20 20 22 54 72 61 6e 73 6c 61 74 65 20 47 45 .&optional.root)..."Translate.GE
6ea0 54 20 74 6f 20 73 65 63 75 72 65 20 70 61 74 68 20 69 6e 20 52 4f 4f 54 20 28 60 68 74 74 70 64 T.to.secure.path.in.ROOT.(`httpd
6ec0 2d 72 6f 6f 74 27 29 2e 22 0a 20 20 28 6c 65 74 20 28 28 63 6c 65 61 6e 20 28 65 78 70 61 6e 64 -root')."...(let.((clean.(expand
6ee0 2d 66 69 6c 65 2d 6e 61 6d 65 20 28 68 74 74 70 64 2d 63 6c 65 61 6e 2d 70 61 74 68 20 70 61 74 -file-name.(httpd-clean-path.pat
6f00 68 29 20 28 6f 72 20 72 6f 6f 74 20 68 74 74 70 64 2d 72 6f 6f 74 29 29 29 29 0a 20 20 20 20 28 h).(or.root.httpd-root)))).....(
6f20 69 66 20 28 66 69 6c 65 2d 64 69 72 65 63 74 6f 72 79 2d 70 20 63 6c 65 61 6e 29 0a 20 20 20 20 if.(file-directory-p.clean).....
6f40 20 20 20 20 28 6c 65 74 2a 20 28 28 64 69 72 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 61 73 2d 64 69 ....(let*.((dir.(file-name-as-di
6f60 72 65 63 74 6f 72 79 20 63 6c 65 61 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 rectory.clean))................(
6f80 69 6e 64 65 78 65 73 20 28 63 6c 2d 6d 61 70 63 61 72 20 28 61 70 70 6c 79 2d 70 61 72 74 69 61 indexes.(cl-mapcar.(apply-partia
6fa0 6c 6c 79 20 27 63 6f 6e 63 61 74 20 64 69 72 29 20 68 74 74 70 64 2d 69 6e 64 65 78 65 73 29 29 lly.'concat.dir).httpd-indexes))
6fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 78 69 73 74 69 6e 67 20 28 63 6c 2d 72 65 ................(existing.(cl-re
6fe0 6d 6f 76 65 2d 69 66 2d 6e 6f 74 20 27 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 69 6e 64 65 78 move-if-not.'file-exists-p.index
7000 65 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 63 61 72 20 65 78 69 73 74 69 6e es)))...........(or.(car.existin
7020 67 29 20 64 69 72 29 29 0a 20 20 20 20 20 20 63 6c 65 61 6e 29 29 29 0a 0a 28 64 65 66 75 6e 20 g).dir)).......clean)))..(defun.
7040 68 74 74 70 64 2d 67 65 74 2d 73 65 72 76 6c 65 74 20 28 75 72 69 2d 70 61 74 68 29 0a 20 20 22 httpd-get-servlet.(uri-path)..."
7060 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 65 72 76 6c 65 74 20 74 6f 20 62 65 20 65 78 65 63 Determine.the.servlet.to.be.exec
7080 75 74 65 64 20 66 6f 72 20 55 52 49 2d 50 41 54 48 2e 22 0a 20 20 28 69 66 20 28 6e 6f 74 20 68 uted.for.URI-PATH."...(if.(not.h
70a0 74 74 70 64 2d 73 65 72 76 6c 65 74 73 29 0a 20 20 20 20 20 20 27 68 74 74 70 64 2f 0a 20 20 20 ttpd-servlets).......'httpd/....
70c0 20 28 63 6c 2d 6c 61 62 65 6c 73 20 28 28 63 61 74 20 28 78 29 0a 20 20 20 20 20 20 20 20 20 20 .(cl-labels.((cat.(x)...........
70e0 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 22 68 74 74 70 64 2f 22 20 28 6d 61 70 63 6f 6e ........(concat."httpd/".(mapcon
7100 63 61 74 20 27 69 64 65 6e 74 69 74 79 20 28 72 65 76 65 72 73 65 20 78 29 20 22 2f 22 29 29 29 cat.'identity.(reverse.x)."/")))
7120 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 72 74 73 20 28 63 64 72 20 28 73 70 6c 69 74 ).......(let.((parts.(cdr.(split
7140 2d 73 74 72 69 6e 67 20 28 64 69 72 65 63 74 6f 72 79 2d 66 69 6c 65 2d 6e 61 6d 65 20 75 72 69 -string.(directory-file-name.uri
7160 2d 70 61 74 68 29 20 22 2f 22 29 29 29 29 0a 20 20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 -path)."/")))).........(or......
7180 20 20 20 20 28 63 6c 2d 66 69 6e 64 2d 69 66 20 27 66 62 6f 75 6e 64 70 20 28 6d 61 70 63 61 72 ....(cl-find-if.'fboundp.(mapcar
71a0 20 27 69 6e 74 65 72 6e 2d 73 6f 66 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .'intern-soft...................
71c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6c 2d 6d 61 70 6c 69 73 74 20 ....................(cl-maplist.
71e0 23 27 63 61 74 20 28 72 65 76 65 72 73 65 20 70 61 72 74 73 29 29 29 29 0a 20 20 20 20 20 20 20 #'cat.(reverse.parts))))........
7200 20 20 27 68 74 74 70 64 2f 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 65 72 ..'httpd/)))))..(defun.httpd-ser
7220 76 65 2d 72 6f 6f 74 20 28 70 72 6f 63 20 72 6f 6f 74 20 75 72 69 2d 70 61 74 68 20 26 6f 70 74 ve-root.(proc.root.uri-path.&opt
7240 69 6f 6e 61 6c 20 72 65 71 75 65 73 74 29 0a 20 20 22 53 65 63 75 72 65 6c 79 20 73 65 72 76 65 ional.request)..."Securely.serve
7260 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 52 4f 4f 54 20 66 72 6f 6d 20 75 6e 64 65 72 20 50 41 54 .a.file.from.ROOT.from.under.PAT
7280 48 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 70 61 74 68 20 28 68 74 74 70 64 2d 67 65 6e 2d 70 61 H."...(let*.((path.(httpd-gen-pa
72a0 74 68 20 75 72 69 2d 70 61 74 68 20 72 6f 6f 74 29 29 0a 20 20 20 20 20 20 20 20 20 28 73 74 61 th.uri-path.root))..........(sta
72c0 74 75 73 20 28 68 74 74 70 64 2d 73 74 61 74 75 73 20 70 61 74 68 29 29 29 0a 20 20 20 20 28 63 tus.(httpd-status.path))).....(c
72e0 6f 6e 64 0a 20 20 20 20 20 28 28 6e 6f 74 20 28 3d 20 73 74 61 74 75 73 20 32 30 30 29 29 20 20 ond......((not.(=.status.200))..
7300 20 20 28 68 74 74 70 64 2d 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 20 73 74 61 ..(httpd-error..........proc.sta
7320 74 75 73 29 29 0a 20 20 20 20 20 28 28 66 69 6c 65 2d 64 69 72 65 63 74 6f 72 79 2d 70 20 70 61 tus))......((file-directory-p.pa
7340 74 68 29 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 64 69 72 65 63 74 6f 72 79 20 70 72 6f 63 20 70 th).(httpd-send-directory.proc.p
7360 61 74 68 20 75 72 69 2d 70 61 74 68 29 29 0a 20 20 20 20 20 28 74 20 20 20 20 20 20 20 20 20 20 ath.uri-path))......(t..........
7380 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 66 69 6c 65 20 20 20 .............(httpd-send-file...
73a0 20 20 20 70 72 6f 63 20 70 61 74 68 20 72 65 71 75 65 73 74 29 29 29 29 29 0a 0a 28 64 65 66 75 ...proc.path.request)))))..(defu
73c0 6e 20 68 74 74 70 64 2f 20 28 70 72 6f 63 20 75 72 69 2d 70 61 74 68 20 71 75 65 72 79 20 72 65 n.httpd/.(proc.uri-path.query.re
73e0 71 75 65 73 74 29 0a 20 20 22 44 65 66 61 75 6c 74 20 72 6f 6f 74 20 73 65 72 76 6c 65 74 20 77 quest)..."Default.root.servlet.w
7400 68 69 63 68 20 73 65 72 76 65 73 20 66 69 6c 65 73 20 77 68 65 6e 20 68 74 74 70 64 2d 73 65 72 hich.serves.files.when.httpd-ser
7420 76 65 2d 66 69 6c 65 73 20 69 73 20 54 2e 22 0a 20 20 28 69 66 20 28 61 6e 64 20 68 74 74 70 64 ve-files.is.T."...(if.(and.httpd
7440 2d 73 65 72 76 65 2d 66 69 6c 65 73 20 68 74 74 70 64 2d 72 6f 6f 74 29 0a 20 20 20 20 20 20 28 -serve-files.httpd-root).......(
7460 68 74 74 70 64 2d 73 65 72 76 65 2d 72 6f 6f 74 20 70 72 6f 63 20 68 74 74 70 64 2d 72 6f 6f 74 httpd-serve-root.proc.httpd-root
7480 20 75 72 69 2d 70 61 74 68 20 72 65 71 75 65 73 74 29 0a 20 20 20 20 28 68 74 74 70 64 2d 65 72 .uri-path.request).....(httpd-er
74a0 72 6f 72 20 70 72 6f 63 20 34 30 33 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 67 65 ror.proc.403)))..(defun.httpd-ge
74c0 74 2d 6d 69 6d 65 20 28 65 78 74 29 0a 20 20 22 46 65 74 63 68 20 4d 49 4d 45 20 74 79 70 65 20 t-mime.(ext)..."Fetch.MIME.type.
74e0 67 69 76 65 6e 20 74 68 65 20 66 69 6c 65 20 65 78 74 65 6e 74 69 6f 6e 2e 22 0a 20 20 28 6f 72 given.the.file.extention."...(or
7500 20 28 61 6e 64 20 65 78 74 20 28 63 64 72 20 28 61 73 73 6f 63 20 28 64 6f 77 6e 63 61 73 65 20 .(and.ext.(cdr.(assoc.(downcase.
7520 65 78 74 29 20 68 74 74 70 64 2d 6d 69 6d 65 2d 74 79 70 65 73 29 29 29 0a 20 20 20 20 20 20 22 ext).httpd-mime-types)))......."
7540 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74 65 74 2d 73 74 72 65 61 6d 22 29 29 0a 0a 3b 3b 20 application/octet-stream"))..;;.
7560 44 61 74 61 20 73 65 6e 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 0a 0a 28 64 65 66 75 6e 20 68 Data.sending.functions..(defun.h
7580 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 28 70 72 6f 63 20 6d 69 6d 65 20 73 74 61 74 ttpd-send-header.(proc.mime.stat
75a0 75 73 20 26 72 65 73 74 20 68 65 61 64 65 72 2d 6b 65 79 73 29 0a 20 20 22 53 65 6e 64 20 61 6e us.&rest.header-keys)..."Send.an
75c0 20 48 54 54 50 20 68 65 61 64 65 72 20 77 69 74 68 20 67 69 76 65 6e 20 4d 49 4d 45 20 74 79 70 .HTTP.header.with.given.MIME.typ
75e0 65 20 61 6e 64 20 53 54 41 54 55 53 2c 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 63 75 e.and.STATUS,.followed.by.the.cu
7600 72 72 65 6e 74 20 62 75 66 66 65 72 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 rrent.buffer..If.PROC.is.T.use.t
7620 68 65 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 0a 61 73 20 74 68 65 20 70 he.`httpd-current-proc'.as.the.p
7640 72 6f 63 65 73 73 2e 0a 0a 45 78 74 72 61 20 68 65 61 64 65 72 73 20 63 61 6e 20 62 65 20 73 65 rocess...Extra.headers.can.be.se
7660 6e 74 20 62 79 20 73 75 70 70 6c 79 69 6e 67 20 74 68 65 6d 20 6c 69 6b 65 20 6b 65 79 77 6f 72 nt.by.supplying.them.like.keywor
7680 64 73 2c 20 69 2e 65 2e 0a 0a 20 28 68 74 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 74 20 ds,.i.e....(httpd-send-header.t.
76a0 5c 22 74 65 78 74 2f 70 6c 61 69 6e 5c 22 20 32 30 30 20 3a 58 2d 50 6f 77 65 72 65 64 2d 42 79 \"text/plain\".200.:X-Powered-By
76c0 20 5c 22 73 69 6d 70 6c 65 2d 68 74 74 70 64 5c 22 29 22 0a 20 20 28 6c 65 74 20 28 28 73 74 61 .\"simple-httpd\")"...(let.((sta
76e0 74 75 73 2d 73 74 72 20 28 63 64 72 20 28 61 73 73 71 20 73 74 61 74 75 73 20 68 74 74 70 64 2d tus-str.(cdr.(assq.status.httpd-
7700 73 74 61 74 75 73 2d 63 6f 64 65 73 29 29 29 0a 20 20 20 20 20 20 20 20 28 68 65 61 64 65 72 73 status-codes))).........(headers
7720 20 60 28 28 22 53 65 72 76 65 72 22 20 2e 20 2c 68 74 74 70 64 2d 73 65 72 76 65 72 2d 6e 61 6d .`(("Server"...,httpd-server-nam
7740 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 22 44 61 74 65 22 20 2e 20 e)....................("Date"...
7760 2c 28 68 74 74 70 64 2d 64 61 74 65 2d 73 74 72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 ,(httpd-date-string))...........
7780 20 20 20 20 20 20 20 20 20 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2e 20 22 6b 65 65 70 2d 61 .........("Connection"..."keep-a
77a0 6c 69 76 65 22 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 74 live")....................("Cont
77c0 65 6e 74 2d 54 79 70 65 22 20 2e 20 2c 28 68 74 74 70 64 2d 2d 73 74 72 69 6e 67 69 66 79 20 6d ent-Type"...,(httpd--stringify.m
77e0 69 6d 65 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 74 65 ime))....................("Conte
7800 6e 74 2d 4c 65 6e 67 74 68 22 20 2e 20 2c 28 68 74 74 70 64 2d 2d 62 75 66 66 65 72 2d 73 69 7a nt-Length"...,(httpd--buffer-siz
7820 65 29 29 29 29 29 0a 20 20 20 20 28 75 6e 6c 65 73 73 20 68 74 74 70 64 2d 2d 68 65 61 64 65 72 e))))).....(unless.httpd--header
7840 2d 73 65 6e 74 0a 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 -sent.......(setf.httpd--header-
7860 73 65 6e 74 20 74 29 0a 20 20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a sent.t).......(with-temp-buffer.
7880 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 48 54 54 50 2f 31 2e ........(insert.(format."HTTP/1.
78a0 31 20 25 64 20 25 73 5c 72 5c 6e 22 20 73 74 61 74 75 73 20 73 74 61 74 75 73 2d 73 74 72 29 29 1.%d.%s\r\n".status.status-str))
78c0 0a 20 20 20 20 20 20 20 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 28 68 65 61 64 65 72 20 76 61 .........(cl-loop.for.(header.va
78e0 6c 75 65 29 20 6f 6e 20 68 65 61 64 65 72 2d 6b 65 79 73 20 62 79 20 23 27 63 64 64 72 0a 20 20 lue).on.header-keys.by.#'cddr...
7900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 68 65 61 64 65 72 2d 6e 61 6d 65 20 3d ...............for.header-name.=
7920 20 28 73 75 62 73 74 72 69 6e 67 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 68 65 61 64 65 72 29 .(substring.(symbol-name.header)
7940 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 76 61 6c 75 65 2d 6e .1)..................for.value-n
7960 61 6d 65 20 3d 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 ame.=.(format."%s".value).......
7980 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 68 65 61 64 65 72 2d ...........collect.(cons.header-
79a0 6e 61 6d 65 20 76 61 6c 75 65 2d 6e 61 6d 65 29 20 69 6e 74 6f 20 65 78 74 72 61 73 0a 20 20 20 name.value-name).into.extras....
79c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 28 73 65 74 66 20 68 65 61 64 ..............finally.(setf.head
79e0 65 72 73 20 28 6e 63 6f 6e 63 20 68 65 61 64 65 72 73 20 65 78 74 72 61 73 29 29 29 0a 20 20 20 ers.(nconc.headers.extras)))....
7a00 20 20 20 20 20 28 64 6f 6c 69 73 74 20 28 68 65 61 64 65 72 20 68 65 61 64 65 72 73 29 0a 20 20 .....(dolist.(header.headers)...
7a20 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 73 3a 20 25 73 5c ........(insert.(format."%s:.%s\
7a40 72 5c 6e 22 20 28 63 61 72 20 68 65 61 64 65 72 29 20 28 63 64 72 20 68 65 61 64 65 72 29 29 29 r\n".(car.header).(cdr.header)))
7a60 29 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 5c 72 5c 6e 22 29 0a 20 20 20 20 20 20 ).........(insert."\r\n").......
7a80 20 20 28 70 72 6f 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 ..(process-send-region.(httpd-re
7aa0 73 6f 6c 76 65 2d 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 solve-proc.proc)................
7ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 ..............(point-min).(point
7ae0 2d 6d 61 78 29 29 29 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 72 65 67 69 -max))).......(process-send-regi
7b00 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 20 20 on.(httpd-resolve-proc.proc)....
7b20 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 6e 74 2d 6d ........................(point-m
7b40 69 6e 29 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 in).(point-max)))))..(defun.http
7b60 64 2d 72 65 64 69 72 65 63 74 20 28 70 72 6f 63 20 70 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 d-redirect.(proc.path.&optional.
7b80 63 6f 64 65 29 0a 20 20 22 52 65 64 69 72 65 63 74 20 74 68 65 20 63 6c 69 65 6e 74 20 74 6f 20 code)..."Redirect.the.client.to.
7ba0 50 41 54 48 20 28 64 65 66 61 75 6c 74 20 33 30 31 29 2e 20 49 66 20 50 52 4f 43 20 69 73 20 54 PATH.(default.301)..If.PROC.is.T
7bc0 20 75 73 65 0a 74 68 65 20 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d 70 72 6f 63 27 20 61 73 .use.the.`httpd-current-proc'.as
7be0 20 74 68 65 20 70 72 6f 63 65 73 73 2e 22 0a 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 28 6c 69 73 .the.process."...(httpd-log.(lis
7c00 74 20 27 72 65 64 69 72 65 63 74 20 70 61 74 68 29 29 0a 20 20 28 68 74 74 70 64 2d 64 69 73 63 t.'redirect.path))...(httpd-disc
7c20 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a ard-buffer)...(with-temp-buffer.
7c40 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 74 65 78 ....(httpd-send-header.proc."tex
7c60 74 2f 70 6c 61 69 6e 22 20 28 6f 72 20 63 6f 64 65 20 33 30 31 29 20 3a 4c 6f 63 61 74 69 6f 6e t/plain".(or.code.301).:Location
7c80 20 70 61 74 68 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 65 6e 64 2d 66 69 6c 65 .path)))..(defun.httpd-send-file
7ca0 20 28 70 72 6f 63 20 70 61 74 68 20 26 6f 70 74 69 6f 6e 61 6c 20 72 65 71 29 0a 20 20 22 53 65 .(proc.path.&optional.req)..."Se
7cc0 72 76 65 20 66 69 6c 65 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20 63 6c 69 65 6e 74 2e 20 20 49 rve.file.to.the.given.client...I
7ce0 66 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 0a 60 68 74 74 70 64 2d 63 75 72 72 65 f.PROC.is.T.use.the.`httpd-curre
7d00 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 68 74 74 nt-proc'.as.the.process."...(htt
7d20 70 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 28 6c 65 74 20 28 28 72 65 71 2d pd-discard-buffer)...(let.((req-
7d40 65 74 61 67 20 28 63 61 64 72 20 28 61 73 73 6f 63 20 22 49 66 2d 4e 6f 6e 65 2d 4d 61 74 63 68 etag.(cadr.(assoc."If-None-Match
7d60 22 20 72 65 71 29 29 29 0a 20 20 20 20 20 20 20 20 28 65 74 61 67 20 28 68 74 74 70 64 2d 65 74 ".req))).........(etag.(httpd-et
7d80 61 67 20 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 28 6d 74 69 6d 65 20 28 68 74 74 70 64 2d ag.path)).........(mtime.(httpd-
7da0 64 61 74 65 2d 73 74 72 69 6e 67 20 28 6e 74 68 20 34 20 28 66 69 6c 65 2d 61 74 74 72 69 62 75 date-string.(nth.4.(file-attribu
7dc0 74 65 73 20 70 61 74 68 29 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 20 72 65 71 tes.path))))).....(if.(equal.req
7de0 2d 65 74 61 67 20 65 74 61 67 29 0a 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 -etag.etag).........(with-temp-b
7e00 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 66 69 6c uffer...........(httpd-log.`(fil
7e20 65 20 2c 70 61 74 68 20 6e 6f 74 2d 6d 6f 64 69 66 69 65 64 29 29 0a 20 20 20 20 20 20 20 20 20 e.,path.not-modified))..........
7e40 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 74 65 78 74 2f 70 .(httpd-send-header.proc."text/p
7e60 6c 61 69 6e 22 20 33 30 34 29 29 0a 20 20 20 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 66 lain".304)).......(httpd-log.`(f
7e80 69 6c 65 20 2c 70 61 74 68 29 29 0a 20 20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 ile.,path)).......(with-temp-buf
7ea0 66 65 72 0a 20 20 20 20 20 20 20 20 28 73 65 74 2d 62 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 fer.........(set-buffer-multibyt
7ec0 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 2d 66 69 6c 65 2d 63 6f 6e 74 e.nil).........(insert-file-cont
7ee0 65 6e 74 73 2d 6c 69 74 65 72 61 6c 6c 79 20 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 28 68 74 ents-literally.path).........(ht
7f00 74 70 64 2d 73 65 6e 64 2d 68 65 61 64 65 72 20 70 72 6f 63 20 28 68 74 74 70 64 2d 67 65 74 2d tpd-send-header.proc.(httpd-get-
7f20 6d 69 6d 65 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 65 78 74 65 6e 73 69 6f 6e 20 70 61 74 68 29 29 mime.(file-name-extension.path))
7f40 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 32 30 30 20 ............................200.
7f60 3a 4c 61 73 74 2d 4d 6f 64 69 66 69 65 64 20 6d 74 69 6d 65 20 3a 45 54 61 67 20 65 74 61 67 29 :Last-Modified.mtime.:ETag.etag)
7f80 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 73 65 6e 64 2d 64 69 72 65 63 74 6f 72 ))))..(defun.httpd-send-director
7fa0 79 20 28 70 72 6f 63 20 70 61 74 68 20 75 72 69 2d 70 61 74 68 29 0a 20 20 22 53 65 72 76 65 20 y.(proc.path.uri-path)..."Serve.
7fc0 61 20 66 69 6c 65 20 6c 69 73 74 69 6e 67 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 2e 20 49 66 a.file.listing.to.the.client..If
7fe0 20 50 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e .PROC.is.T.use.the.`httpd-curren
8000 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 68 74 74 70 t-proc'.as.the.process."...(http
8020 64 2d 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 28 6c 65 74 20 28 28 74 69 74 6c 65 d-discard-buffer)...(let.((title
8040 20 28 63 6f 6e 63 61 74 20 22 44 69 72 65 63 74 6f 72 79 20 6c 69 73 74 69 6e 67 20 66 6f 72 20 .(concat."Directory.listing.for.
8060 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 69 6e "........................(url-in
8080 73 65 72 74 2d 65 6e 74 69 74 69 65 73 2d 69 6e 2d 73 74 72 69 6e 67 20 75 72 69 2d 70 61 74 68 sert-entities-in-string.uri-path
80a0 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 65 71 75 61 6c 20 22 2f 22 20 28 73 75 62 73 74 72 69 )))).....(if.(equal."/".(substri
80c0 6e 67 20 75 72 69 2d 70 61 74 68 20 2d 31 29 29 0a 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 ng.uri-path.-1)).........(with-t
80e0 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 emp-buffer...........(httpd-log.
8100 60 28 64 69 72 65 63 74 6f 72 79 20 2c 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 `(directory.,path))...........(i
8120 6e 73 65 72 74 20 22 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 5c 6e 22 29 0a 20 20 20 20 20 nsert."<!DOCTYPE.html>\n")......
8140 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 68 74 6d 6c 3e 5c 6e 3c 68 65 61 64 3e 3c 74 69 74 .....(insert."<html>\n<head><tit
8160 6c 65 3e 22 20 74 69 74 6c 65 20 22 3c 2f 74 69 74 6c 65 3e 3c 2f 68 65 61 64 3e 5c 6e 22 29 0a le>".title."</title></head>\n").
8180 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 62 6f 64 79 3e 5c 6e 3c 68 32 3e 22 ..........(insert."<body>\n<h2>"
81a0 20 74 69 74 6c 65 20 22 3c 2f 68 32 3e 5c 6e 3c 68 72 2f 3e 5c 6e 3c 75 6c 3e 22 29 0a 20 20 20 .title."</h2>\n<hr/>\n<ul>")....
81c0 20 20 20 20 20 20 20 28 64 6f 6c 69 73 74 20 28 66 69 6c 65 20 28 64 69 72 65 63 74 6f 72 79 2d .......(dolist.(file.(directory-
81e0 66 69 6c 65 73 20 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73 73 files.path)).............(unless
8200 20 28 65 71 20 3f 2e 20 28 61 72 65 66 20 66 69 6c 65 20 30 29 29 0a 20 20 20 20 20 20 20 20 20 .(eq.?..(aref.file.0))..........
8220 20 20 20 20 20 28 6c 65 74 2a 20 28 28 66 75 6c 6c 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e .....(let*.((full.(expand-file-n
8240 61 6d 65 20 66 69 6c 65 20 70 61 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ame.file.path)).................
8260 20 20 20 20 20 28 74 61 69 6c 20 28 69 66 20 28 66 69 6c 65 2d 64 69 72 65 63 74 6f 72 79 2d 70 .....(tail.(if.(file-directory-p
8280 20 66 75 6c 6c 29 20 22 2f 22 20 22 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .full)."/"."")).................
82a0 20 20 20 20 20 28 66 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 .....(f.(url-insert-entities-in-
82c0 73 74 72 69 6e 67 20 66 69 6c 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 string.file))...................
82e0 20 20 20 28 6c 20 28 75 72 6c 2d 68 65 78 69 66 79 2d 73 74 72 69 6e 67 20 66 69 6c 65 29 29 29 ...(l.(url-hexify-string.file)))
8300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 .................(insert.(format
8320 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 5c 22 25 73 25 73 5c 22 3e 25 73 25 73 3c 2f 61 3e 3c ."<li><a.href=\"%s%s\">%s%s</a><
8340 2f 6c 69 3e 5c 6e 22 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 /li>\n".........................
8360 20 20 20 20 20 20 20 20 6c 20 74 61 69 6c 20 66 20 74 61 69 6c 29 29 29 29 29 0a 20 20 20 20 20 ........l.tail.f.tail)))))......
8380 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 3c 2f 75 6c 3e 5c 6e 3c 68 72 2f 3e 5c 6e 3c 2f 62 6f .....(insert."</ul>\n<hr/>\n</bo
83a0 64 79 3e 5c 6e 3c 2f 68 74 6d 6c 3e 22 29 0a 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d dy>\n</html>")...........(httpd-
83c0 73 65 6e 64 2d 68 65 61 64 65 72 20 70 72 6f 63 20 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 send-header.proc."text/html;.cha
83e0 72 73 65 74 3d 75 74 66 2d 38 22 20 32 30 30 29 29 0a 20 20 20 20 20 20 28 68 74 74 70 64 2d 72 rset=utf-8".200)).......(httpd-r
8400 65 64 69 72 65 63 74 20 70 72 6f 63 20 28 63 6f 6e 63 61 74 20 75 72 69 2d 70 61 74 68 20 22 2f edirect.proc.(concat.uri-path."/
8420 22 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 62 75 66 66 65 72 2d 73 69 7a ")))))..(defun.httpd--buffer-siz
8440 65 20 28 26 6f 70 74 69 6f 6e 61 6c 20 62 75 66 66 65 72 29 0a 20 20 22 47 65 74 20 74 68 65 20 e.(&optional.buffer)..."Get.the.
8460 62 75 66 66 65 72 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 buffer.size.in.bytes."...(let.((
8480 6f 72 69 67 20 65 6e 61 62 6c 65 2d 6d 75 6c 74 69 62 79 74 65 2d 63 68 61 72 61 63 74 65 72 73 orig.enable-multibyte-characters
84a0 29 0a 20 20 20 20 20 20 20 20 28 73 69 7a 65 20 30 29 29 0a 20 20 20 20 28 77 69 74 68 2d 63 75 ).........(size.0)).....(with-cu
84c0 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 6f 72 20 62 75 66 66 65 72 20 28 63 75 72 72 65 6e 74 rrent-buffer.(or.buffer.(current
84e0 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 20 28 73 65 74 2d 62 75 66 66 65 72 2d 6d 75 6c 74 -buffer)).......(set-buffer-mult
8500 69 62 79 74 65 20 6e 69 6c 29 0a 20 20 20 20 20 20 28 73 65 74 66 20 73 69 7a 65 20 28 62 75 66 ibyte.nil).......(setf.size.(buf
8520 66 65 72 2d 73 69 7a 65 29 29 0a 20 20 20 20 20 20 28 69 66 20 6f 72 69 67 20 28 73 65 74 2d 62 fer-size)).......(if.orig.(set-b
8540 75 66 66 65 72 2d 6d 75 6c 74 69 62 79 74 65 20 6f 72 69 67 29 29 29 0a 20 20 20 20 73 69 7a 65 uffer-multibyte.orig))).....size
8560 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 65 72 72 6f 72 20 28 70 72 6f 63 20 73 74 61 ))..(defun.httpd-error.(proc.sta
8580 74 75 73 20 26 6f 70 74 69 6f 6e 61 6c 20 69 6e 66 6f 29 0a 20 20 22 53 65 6e 64 20 61 6e 20 65 tus.&optional.info)..."Send.an.e
85a0 72 72 6f 72 20 70 61 67 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 53 54 41 54 55 53 rror.page.appropriate.for.STATUS
85c0 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 2c 0a 6f 70 74 69 6f 6e 61 6c 6c 79 20 69 6e 73 65 72 .to.the.client,.optionally.inser
85e0 74 69 6e 67 20 6f 62 6a 65 63 74 20 49 4e 46 4f 20 69 6e 74 6f 20 70 61 67 65 2e 20 49 66 20 50 ting.object.INFO.into.page..If.P
8600 52 4f 43 20 69 73 20 54 20 75 73 65 20 74 68 65 0a 60 68 74 74 70 64 2d 63 75 72 72 65 6e 74 2d ROC.is.T.use.the.`httpd-current-
8620 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 68 74 74 70 64 2d proc'.as.the.process."...(httpd-
8640 64 69 73 63 61 72 64 2d 62 75 66 66 65 72 29 0a 20 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 28 65 discard-buffer)...(httpd-log.`(e
8660 72 72 6f 72 20 2c 73 74 61 74 75 73 20 2c 69 6e 66 6f 29 29 0a 20 20 28 77 69 74 68 2d 74 65 6d rror.,status.,info))...(with-tem
8680 70 2d 62 75 66 66 65 72 0a 20 20 20 20 28 6c 65 74 20 28 28 68 74 6d 6c 20 28 6f 72 20 28 63 64 p-buffer.....(let.((html.(or.(cd
86a0 72 20 28 61 73 73 71 20 73 74 61 74 75 73 20 68 74 74 70 64 2d 68 74 6d 6c 29 29 20 22 22 29 29 r.(assq.status.httpd-html)).""))
86c0 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 74 65 6e 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 ...........(contents............
86e0 28 69 66 20 28 6e 6f 74 20 69 6e 66 6f 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 22 (if.(not.info)................""
8700 0a 20 20 20 20 20 20 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 ..............(with-temp-buffer.
8720 20 20 20 20 20 20 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 ...............(let.((standard-o
8740 75 74 70 75 74 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29 0a 20 20 20 20 20 20 20 utput.(current-buffer)))........
8760 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 65 72 72 6f 72 3a 20 22 29 0a 20 20 20 ..........(insert."error:.")....
8780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 69 6e 63 20 69 6e 66 6f 29 0a 20 20 20 20 20 ..............(princ.info)......
87a0 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 22 5c 6e 22 29 0a 20 20 20 20 20 20 ............(insert."\n").......
87c0 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 68 74 74 70 64 2d 73 68 6f 77 2d 62 61 63 6b ...........(when.httpd-show-back
87e0 74 72 61 63 65 2d 77 68 65 6e 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 trace-when-error................
8800 20 20 20 20 28 69 6e 73 65 72 74 20 22 62 61 63 6b 74 72 61 63 65 3a 20 22 29 0a 20 20 20 20 20 ....(insert."backtrace:.")......
8820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 69 6e 63 20 28 62 61 63 6b 74 72 61 63 65 29 ..............(princ.(backtrace)
8840 29 0a 20 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 5c 6e )....................(insert."\n
8860 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 70 64 2d 65 73 63 61 "))..................(httpd-esca
8880 70 65 2d 68 74 6d 6c 2d 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 pe-html-buffer).................
88a0 20 28 62 75 66 66 65 72 2d 73 74 72 69 6e 67 29 29 29 29 29 29 0a 20 20 20 20 20 20 28 69 6e 73 .(buffer-string)))))).......(ins
88c0 65 72 74 20 28 66 6f 72 6d 61 74 20 68 74 6d 6c 20 63 6f 6e 74 65 6e 74 73 29 29 29 0a 20 20 20 ert.(format.html.contents)))....
88e0 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 74 65 78 74 2f 68 .(httpd-send-header.proc."text/h
8900 74 6d 6c 22 20 73 74 61 74 75 73 29 29 29 0a 0a 28 64 65 66 75 6e 20 68 74 74 70 64 2d 2d 65 72 tml".status)))..(defun.httpd--er
8920 72 6f 72 2d 73 61 66 65 20 28 26 72 65 73 74 20 61 72 67 73 29 0a 20 20 22 43 61 6c 6c 20 68 74 ror-safe.(&rest.args)..."Call.ht
8940 74 70 64 2d 65 72 72 6f 72 20 61 6e 64 20 72 65 70 6f 72 74 20 66 61 69 6c 75 72 65 73 20 74 6f tpd-error.and.report.failures.to
8960 20 2a 68 74 74 70 64 2a 2e 22 0a 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 .*httpd*."...(condition-case.err
8980 6f 72 2d 63 61 73 65 0a 20 20 20 20 20 20 28 61 70 70 6c 79 20 23 27 68 74 74 70 64 2d 65 72 72 or-case.......(apply.#'httpd-err
89a0 6f 72 20 61 72 67 73 29 0a 20 20 20 20 28 65 72 72 6f 72 20 28 68 74 74 70 64 2d 6c 6f 67 20 60 or.args).....(error.(httpd-log.`
89c0 28 68 61 72 64 2d 65 72 72 6f 72 20 2c 65 72 72 6f 72 2d 63 61 73 65 29 29 29 29 29 0a 0a 28 70 (hard-error.,error-case)))))..(p
89e0 72 6f 76 69 64 65 20 27 73 69 6d 70 6c 65 2d 68 74 74 70 64 29 0a 0a 3b 3b 3b 20 73 69 6d 70 6c rovide.'simple-httpd)..;;;.simpl
8a00 65 2d 68 74 74 70 64 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 e-httpd.el.ends.here............
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 ................................