summaryrefslogtreecommitdiff
path: root/sys/doc/sam
diff options
context:
space:
mode:
authoraiju <aiju@phicode.de>2011-07-18 11:01:22 +0200
committeraiju <aiju@phicode.de>2011-07-18 11:01:22 +0200
commit8c4c1f39f4e369d7c590c9d119f1150a2215e56d (patch)
treecd430740860183fc01de1bc1ddb216ceff1f7173 /sys/doc/sam
parent11bf57fb2ceb999e314cfbe27a4e123bf846d2c8 (diff)
added /sys/doc
Diffstat (limited to 'sys/doc/sam')
-rw-r--r--sys/doc/sam/fig1.bmbin0 -> 42200 bytes
-rw-r--r--sys/doc/sam/fig1.gifbin0 -> 13382 bytes
-rw-r--r--sys/doc/sam/fig1.pngbin0 -> 18498 bytes
-rw-r--r--sys/doc/sam/fig1.ps1740
-rw-r--r--sys/doc/sam/fig2.bmbin0 -> 6362 bytes
-rw-r--r--sys/doc/sam/fig2.gifbin0 -> 4253 bytes
-rw-r--r--sys/doc/sam/fig2.pngbin0 -> 3536 bytes
-rw-r--r--sys/doc/sam/fig2.ps294
-rw-r--r--sys/doc/sam/fig3.bmbin0 -> 16176 bytes
-rw-r--r--sys/doc/sam/fig3.gifbin0 -> 5042 bytes
-rw-r--r--sys/doc/sam/fig3.pngbin0 -> 5271 bytes
-rw-r--r--sys/doc/sam/fig3.ps622
-rw-r--r--sys/doc/sam/fig4.bmbin0 -> 1620 bytes
-rw-r--r--sys/doc/sam/fig4.gifbin0 -> 2640 bytes
-rw-r--r--sys/doc/sam/fig4.pngbin0 -> 1137 bytes
-rw-r--r--sys/doc/sam/fig4.ps130
-rw-r--r--sys/doc/sam/fig5.pic27
-rw-r--r--sys/doc/sam/fig6.pic38
-rw-r--r--sys/doc/sam/fig7.pic12
-rw-r--r--sys/doc/sam/mkfile19
-rw-r--r--sys/doc/sam/refs166
-rw-r--r--sys/doc/sam/sam.html3705
-rw-r--r--sys/doc/sam/sam.ms3241
-rw-r--r--sys/doc/sam/sam.pdfbin0 -> 156123 bytes
-rw-r--r--sys/doc/sam/sam.ps23496
-rw-r--r--sys/doc/sam/sam.tut1784
-rw-r--r--sys/doc/sam/sam.tut.out4863
-rw-r--r--sys/doc/sam/sam0.pngbin0 -> 38692 bytes
-rw-r--r--sys/doc/sam/sam1.pngbin0 -> 19764 bytes
-rw-r--r--sys/doc/sam/sam2.pngbin0 -> 4722 bytes
-rw-r--r--sys/doc/sam/sam3.pngbin0 -> 4805 bytes
-rw-r--r--sys/doc/sam/sam4.pngbin0 -> 1236 bytes
32 files changed, 40137 insertions, 0 deletions
diff --git a/sys/doc/sam/fig1.bm b/sys/doc/sam/fig1.bm
new file mode 100644
index 000000000..7f5e63a7c
--- /dev/null
+++ b/sys/doc/sam/fig1.bm
Binary files differ
diff --git a/sys/doc/sam/fig1.gif b/sys/doc/sam/fig1.gif
new file mode 100644
index 000000000..b540c6694
--- /dev/null
+++ b/sys/doc/sam/fig1.gif
Binary files differ
diff --git a/sys/doc/sam/fig1.png b/sys/doc/sam/fig1.png
new file mode 100644
index 000000000..fe1a83e21
--- /dev/null
+++ b/sys/doc/sam/fig1.png
Binary files differ
diff --git a/sys/doc/sam/fig1.ps b/sys/doc/sam/fig1.ps
new file mode 100644
index 000000000..6c18c63a7
--- /dev/null
+++ b/sys/doc/sam/fig1.ps
@@ -0,0 +1,1740 @@
+%!PS-Adobe-2.0
+%%Version: 3.3.2
+%%DocumentFonts: (atend)
+%%Pages: (atend)
+%%EndComments
+%%EndProlog
+%%BeginSetup
+mark
+%%Patch from lp
+%%EndPatch from lp
+
+/picstr 98 string def
+23 241 translate
+564.48 309.60 scale
+
+784 430 1 [784 0 0 -430 0 430]
+{currentfile picstr readhexstring pop} image
+
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+02001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffe7fffffffe227ff0feffffffffffffff3ff87ff11ffcffffffff
+fffffffe7fe7ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffde01ffffe7fffffffe227fe7f9f833900fffffef3ff3e0711ffcffdffff1
+e0fffffe7fe7ffe7f3e0ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfffffe7fffffffe233fe7f3f3b39e7fffffcf9ff3e7311ffcff9fffe9
+ce7fffffffe7ffc7e3ce7fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfe3ffe4f879cfff773f80f3e7f3de7f0e73019fc0673bbffc8e03ffe9
+ce7ff3907f07ffa7d3ce7fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfe3ffe27339cfff779fe7e7e7f25e7e6673cfcff3e73bbffc479fffd9
+ce7ff3de7e67ff67b3fe7fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfe3ffe7279cdfff779fe7e7e7f25e7ce737cfcff3e73bbffce79fffd9
+ce7ff25e7ce7ffe7f3fe7fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfffffe7279c3fffffcfe7e7e7f25e7ce70fcfe7f3e67ffffce79fffb9
+ce7ff25e7ce7ffe7f3fcffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfffffe7279f7fffffcfe7e7e7f93e7c07dfcfe7f3e0fffffce79fff80
+ce7ff25e7ce7ffe7f3f9ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfffffe7279e1fffffe7e7e7e7f93e7cff87cff3f3e7fffffce79fff80
+ce7ff93e7ce7ffe7f3f3ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe3ffe7279d9fffffe7e7e7e7f93e7cff67cff3f3e7fffffce79ffff9
+ce7ff93e7ce7ffe7f3e7ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe3ffe67339cffffff3e7e7f3b93e7e6673cff9f3e7fffffce79ffff9
+ce7ff93e7e47ffe7f3c07fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe3ffe0f879cffffff381f3f8393e7f0e73e1f9c0e7fffffce7c3ffe0
+e0fff9300f27ff81c0c07fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889ffffffffffffffffffff9fff3fffffffffffffffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221ffffffffffffffffffff9fff9fffffffffffffffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889ffffffffffffffffffffffffeffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffe7fffffffe227ff0feffffffffffffff3ff87ff11ffcffffffff
+fffffffe7fe7fffffffffffcfffcffffffffffffffffffefffffffffffffffff
+fffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e07ffffe7fffffffe227fe7f9f833903fffffff3ff3e0711ffcffdffff1
+e0fffffe7fe7ff83c1fffffcff7cfffffffffffffeffff9c03ffffffffffff3e
+0fffff00ffffffffff3fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e73ffffe7fffffffe233fe7f3f3b3939fffffff9ff3e7311ffcff9fffe9
+ce7fffffffe7ff399cfffffffe7cfffffffffffffcffff3f9ffffffffffffe3c
+e7ffffe7ffffffffff9fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e73e3ffe4f879cfff773f80f3e7f3d39e0f07279fc0673bbffc8e03ffe9
+ce7ff3907f07ff399cffe720f80c8fffff9cfff0701fff3f9fffe1ffe73cfd3c
+ffffffe7fff87ff9cf9fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e73e3ffe27339cfff779fe7e7e7f2539ce67313cff3e73bbffc479fffd9
+ce7ff3de7e67ff399cffe7bcfe7c47ffff9effe73cfffe7f9fffccffe73cfb3c
+ffffffe7fff33ff9cfcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e77e3ffe7279cdfff779fe7e7e7f253bfe67f39cff3e73bbffce79fffd9
+ce7ff25e7ce7ff399cffe4bcfe7ce7ffff92ffff3cfffe7f9fff9cfff37cff3c
+ffffffe7ffe73ff9efcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e0fffffe7279c3fffffcfe7e7e7f2507fe63f39e7f3e67ffffce79fffb9
+ce7ff25e7ce7ff819cffe4bcfe7ce7ffff92ffff3cfffe7f9fff9cfff0e01f3c
+0fffffe7ffe73ffccfcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e67ffffe7279f7fffffcfe7e7e7f9333e070739e7f3e0fffffce79fff80
+ce7ff25e7ce7fff99cffe4bcfe7ce7ffff92fff03cfffe7f9fff80fffde01f3c
+e7ffffe7ffe03ffcdfcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e67ffffe7279e1fffffe7e7e7e7f9333ce7e339f3f3e7fffffce79fff80
+ce7ff93e7ce7fff99cfff27cfe7ce7ffffc9ffe73cfffe7f9fff9ffff87cff3c
+e7ffffe7ffe7fffcdfcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e73e3ffe7279d9fffffe7e7e7e7f9339ce7f339f3f3e7fffffce79ffff9
+ce7ff93e7ce7fff99cfff27cfe7ce7ffc7c9ffe73cfffe7f9fc79ff1f67cff3c
+e78fffe7f1e7fc7e3fcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e73e3ffe67339cffffff3e7e7f3b9339cc67333f9f3e7fffffce79ffff9
+ce7ff93e7e47ff399cfff27cfe7ce7ffc7c9ffe63cfffe7f9fc7ccf1e73cff3c
+e78fffe7f1f33c7e3fcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e71e3ffe0f879cffffff381f3f839338e270707f9c0e7fffffce7c3ffe0
+e0fff9300f27ff83c1fff2601f0ce7ffc7c9fff13e1fff3f9fc7e1f1e73ffc0e
+0f8fffe7f1f87c7f3f9fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889ffffffffffffffffffff9fff3ffffffffffff3ffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffff
+ffcfffffffffffff7f9fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221ffffffffffffffffffff9fff9ffffffffffff3ffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffff
+ffcffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889ffffffffffffffffffffffffeffffffffffff3fffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffff
+ff9ffffffffffffc7effffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e0fe7ffffffff0fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe7fffffffe7fffffffff807fffffffbfffff03ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcffffffffffe7ffffffffff3ffffffff3fffff39ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcf07c8f87ff80c670e5bfff3fffc3ffc070fff39ffe73fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe7c4733ffe7e066601fff3fff99fff3e67ff39ffe7bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe7ce673ffe7e64f249fff3fff39fff3cf3ff3bffe4bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe7ce673ffe7e7cf249fff3fff39fff3cf3ff07ffe4bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe7ce603ffe7e7cf249fff3fff01fff3cf3ff33ffe4bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe7ce67fffe7e7cf249fff3fff3ffff3cf3ff33fff27fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe7ce67fffe7e7cf249fff3f8f3ffff3cf3ff39f1f27fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe7ce733ffe7e7e6649fff3f8f99fff3e67ff39f1f27fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e0100ce787ff81c1f0e49fff3f8fc3fff870fff38f1f27fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff80000000800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c00000000001fffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff3f80000001800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c00000000001fff87ffffffffffffffffffffcfffcfffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0f80078c67f00000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c00000000001fff3fffffffffc0ffffffffffcfffcffdfffc1f8fffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff1f800ccc61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c00000000001fff3fffffffffce7fffffffffffffcff9fff9cf4fffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff3f8018cc61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c7c73398f0c7ffc0633872dffce7ffe1ffe320fe0c8e03ff9cf4fffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7d80180c61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889cc63f1f998c3fff3f033300ffce7ffccfff03cfccc479ffffcecfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffff980180c61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c063319b0cdbfff3f327924ffcefff9cfff33cf9cce79ffffcecfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffef080180c61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c06301830cdbfff3f3e7924ffc1fff9cfff3fcf9cce79ffff9dcfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffce080180c61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c7e301830cdbfff3f3e7924ffccfff80fff3fcf9cce79ffff3c07ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fff8c0000ccee1800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889cc6301830c6dfff3f3e7924ffccfff9ffff3fcf9cce79fffe7c07ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fff08000078760f00000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221cc6301830c6dfff3f3e7924ffce7c79ffff3fcf9cce79fffcffcfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe00000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889cce30181986dfff3f3f3324ffce7c7ccfff3fcfc8ce79fff80fcfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffc10000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c767c3e0f06dffc0e0f8724ffce3c7e1ffe0e01e4ce7c3ff80f07ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff837ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c00000000001ffffffffffffffffffffffffffffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffc77ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c00000000001fffffffffffffffffffffffffff9cffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffef7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c00000000001fffffffffffffffffffffffffffc1ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fffffffff7ffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffe7ffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f3ffffffffcffffff9fffffc47ffffffcffffffffc47ffffe7ffe7fffff
+fffffffffffffffffcfffffe1ff83fffffffffffffffffffffffffffffffffff
+ffff7fc9f078380f0ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f3ffffffffcffffff9fffffc47dfffffcfffffff7c47ffffe7fbe7fffff
+ffffffff7ffffffffcfffffcffff3ffffff7ffffffffffffffffffffffffffff
+ffff7fc4e7339e7e67feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f3fffffffffffffffffffffc479fffffcffffffe7c47fffffff3e7fffff
+fffffffe7ffffffffcfffffcffff3fffffe7ffffffffffffffffffffffffffff
+ffff7fce7f33fe7ce7feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f27c3ce7fe0f91ce41f83ffeee0387ffc8f0f8380eefff3907c0647ffff
+ce7ff8380fff8723e0fff0f01fff3f078380fff07198ce1e73ffffffffffffff
+ffff7fce7f31fe7ce7feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f1399ce7ffcf88ce79f39ffeef9f33ffc466739e7eefff3de7f3e23ffff
+cf7ff39e7fff3311ccffe67cffff3e7339e7ffe7381c0cce7bffffffffffffff
+ffff7fce70383e7c07feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f393ce6fffcf9ccf79f3fffeef9e79ffce4f33fe7eefff25e7f3e73ffff
+c97fff9e7ffe73399cffcf3cffff3ff33fe7ffff399cc9e64bffffffffffffff
+ffff7fce673f1e7cfffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f393ce1fffcf9ce679f1ffffff9e79ffce4f31fe7fffff25e7f3e73ffff
+c97fff9e7ffe73399cffcf3cffff3ff31fe7ffff39fcf9e64bffffffffffffff
+ffff7fce673f9e7cfffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f393cfbfffcf9ce6f9f83fffff9e79ffce4f383e7fffff25e7f3e73ffff
+c97ff81e7ffe03399cffcf3cffff3f0383e7fff039fcf9e64bffffffffffffff
+ffff7fcce6339e7e67feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f393cf0fffcf9ce6f9ff1fffff9e79ffce4f3f1e7fffff93e7f3e73ffff
+e4fff39e7ffe7f399cffcf3cffff3e73f1e7ffe739fcf9e727ffffffffffffff
+ffff7fc1f1383f0f0ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f393cecfffcf9cf1f9ff9fffff9e79ffce4f3f9e7fffff93e7f3e73ffe3
+e4fff39e7ffe7f399cffcf3cffff3e73f9e7ffe739fcf9e727ffffffffffffff
+ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f3399ce7ffcf9cf1f9f39fffff9f33ffce66739e7fffff93e7f3e73ffe3
+e4fff31e7fff3339c8ffe67cffff3e6339e7ffe639fcfccf27ffffffffffffff
+ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f07c3ce7fe019cf1c0383fffffc387ffce70f83f0fffff9300f8673ffe3
+e4fff89f0fff8739e4fff0f03ff8071383f0fff130783e1f27ffffffffffffff
+ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fffffffffff87feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe0e47838cc07feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fce62339c0f3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fcfe73f9ccf3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fc7e73f9cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe0e7381cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffc67339cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffe67339cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fce67331cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007fe0e738983c0ffe00000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007ffffffffffffffe00000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007ffffffffffffffe00000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007ffffffffffffffe00000000000000000000000000000000000000000000
+0001
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffc1fffffcffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9fffffcffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffe1e7ffffffffff3ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9fffffcffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffcfe7fff03fffff3ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9f87c3ce7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffcffffff03ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9f3399cefffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffff0107f077fff9383f87fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793ccdfffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffcfe7e677fff89f3f33fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793ccbfffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffcfe7ce71fff9cf3e73fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793cc3fffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fff80fffffcfe7ce7c7ff9cf3e7ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793cc9fffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff80fffffcfe7ce7f3ff9cf3e7ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793cccfffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffcfe7ce7f3ff9cf3e7ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9f3399ce7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffff1fffcfe7ce7f3c79cf3e7ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffc0387c3ce7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffff1fffcfe7e4673c799f3f33fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffff1fff0300f2707c78380787fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffe7ffff9fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffce7ffff9fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffffe0fffff9fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffefffffffefffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffcfffffffe7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ff9cb7399cf3ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ff3c03399cf9ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ff3c1c6633879cfffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe7c9339cdfcffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fe79ce0703339efffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fc7c9339c3fc7feffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fe7fce67327992fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe7c9339f7fcffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcffce7f3e7992fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ff3c9339e1f9ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfc0e7f3e7992fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ff9c9339d9f3ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f9f9ce7f3e79c9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffcc93119ce7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f9f9ce7f3e79c9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffec93899cefffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f3f98e7f3f33c9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3fc4c1e0f87c9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe7fffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe7fffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fcf07198ce1e73effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7f9e7381c0cce7beffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7f9ff399cc9e64beffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7f3ff39fcf9e64beffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7f3f039fcf9e64beffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7e7e739fcf9e727effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7e7e739fcf9e727effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7cfe639fcfccf27effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7cff130783e1f27effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff79fffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff79fffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+00000000000000000000000000000000000000000000077fef81fffff3ffffff
+fceec00c0303e633f060300060060fc77ffe7feffff8f07fffff3ff3fff3f9f0
+7fffff3fdf3fffffffffffffffdfff80e07ff01c1f8ffffffffffffffe000000
+0001
+0ffffffffffffffffffffffffffffffffffffffffffff77fef9ffffff3ffffff
+fcee600c060626330000300030060c677ffe7fcffff4e73ffffffff3ffe3f1e7
+3fffffff9f3fffffffffffffff9fff80e07ff019cf4ffffffffffffffeffffff
+ffe1
+0ffffffffffffffffffffffffffffffffffffffffffff77fef9ff1fff27c3ce7
+fc44603f860c061303e0301e301fcc622ffe4701fff4e73ff9c83f83ffd3e9e7
+3ff9c83e0323ffffe4739ffe0e03fffeefffffd9cf4ffffffffffffffeffffff
+ffe1
+0e001ffffffffffffffffffffffffffffffffffffffff77fef9ff1fff1399ce7
+fc44300c0c0c06d30060303318060c622ffe23cfffece73ff9ef3f33ffb3d9ff
+3ff9ef3f9f11ffffe233dffce79ffffcefffff99cecffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffcffffe7fffff77fef9ff1fff393ce6f
+fc44300c0c0c06d30060306318060c622ffe73cfffece73ff92f3e73fff3f9ff
+3ff92f3f9f39ffffe7325fffe79ffff9e3ffff39cecffffffffffffffeffffff
+ffe1
+0e221fffffffffffffffbffffffffffffcffffe7fffff77fef83fffff393ce1f
+fc00180c0c0c06d3e06030630c060cc00ffe73cfffdce73ff92f3e73fff3f9fe
+7ff92f3f9f39ffffe7325fffe79ffff3f8fffe79cdcffffffffffffffeffffff
+ffe1
+0e889fffffffffffffff3fffffffffffffffffe7fffff77fef9ffffff393cfbf
+fc00180c0c0c03630060307f0c060f800ffe73cfffc0673ff92f3e73fff3f9fc
+fff92f3f9f39ffffe7325ffe079fffe7fe7ffcf9cc07fffffffffffffeffffff
+ffe1
+0e221f19e1f0673c3c1c0707ffc1ffe720f91f070f39f77fef9ffffff393cf0f
+fc000c0c0c0c03630060306006060c000ffe73cfffc0673ffc9f3e73fff3f9f9
+fffc9f3f9f39ffffe7393ffce79fffe7fe7ffcf9cc07fffffffffffffeffffff
+ffe1
+0e889f81cce6673999cf3e73ff9cffe7bcf88e66673df77fef9ff1fff393cecf
+fc000c0c0c0c03630060306006060c000ffe73cffffce73ffc9f3e73fff3f9f3
+fffc9f3f9f39fff1e7393ffce79fffcffe78f9f9cfcffffffffffffffeffffff
+ffe1
+0e221f999cce673399ff3e7ffffcffe4bcf9cce4f325f77fef9ff1fff3399ce7
+fc00060c0c0623630060303303060c000ffe73cffffce73ffc9f3f23fff3f9e0
+3ffc9f3f9f39fff1e7393ffcc79fffcfce78f9f9cfcffffffffffffffeffffff
+ffe1
+0e889f9f9cce673398ff3e3ffffcffe4bcf9cce4f325f77fef9ff1fff07c3ce7
+fc00063f0603e36303fdfe1e031f8c000ffe73e1fff0707ffc980793ffc0e060
+3ffc9807c339fff1e7393ffe27c3ffcfe0f8f9fc1f07fffffffffffffeffffff
+ffe1
+0e221f9f80ce67301c1f3f07ffc0ffe4bcf9cce4f325f77fefffffffffffffff
+fc0003000600000000000000018000000fffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffcfffffffffffffffffffffeffffff
+ffe1
+0e889f9f9fce6733ff8f3fe3ff9cfff27cf9cce4f393f77fefffffffffffffff
+fc0003000300000000000000018000000fffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffcfffffffffffffffffffffeffffff
+ffe1
+0e221f9f9fce6733ffcf3ff3ff9cfff27cf9cce4f393f77fefffffffffffffff
+fc0000000080000000000000000000000fffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffff9fffffffffffffffffffffeffffff
+ffe1
+0e889f9fcce4623999cf3e73ff98fff27cf9ce466793f77fefffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221f07e1f2713c3c1f8707ffc4fff26019cf270f93f77fefffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffe7ffffffffffffffffffffffffffffffff77fefffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffe7ffffffffffffffffffffffffffffffff77fefffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffe7ffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fffe0ce7ffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fffcece7ffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fcf7ff23e1ce7fffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fc97ff11cccf7fffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fc97ff399cc97fffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fc97ff399cc97fffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fe4fff3980c97fffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fe4fff399fe4ffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fc79fe4fff399fe4fffc7fffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fc7cee4fff39cce4fffc7fffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fc7e0e4fff39e1e4fffc7fffffffffffffffffff7222f07f3ffffffff87
+fffffffffffffffffffffffffffff3ffff87c3ffffffffffff0f87ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fffffffffffffffffffe7fffffffffffffffffff7088fe7f3ffffffff3f
+ffffffffe0f83fffffffefffffe733ffff3f9fffffffe07ffe7f3fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fffffffffffffffffffe7fffffffffffffffffff7222fe7ffffffffff3f
+ffffffffe6739fffffffcfffffe733ffff3f9fffffffe73ffe7f3fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fffffffffffffffffffcffffffffffffffffffff7088fe783e47c3ffc06
+33872dffe7339ffc8fff01c3ffe23279cc0603c38cffe733980c078719ffe0ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fe7f3e2399fff3f
+033300ffe73f9ffc47ffcf99ffe23139cf3f9f99c0ffe7339e7f3f3381ffce7f
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fe7f3e7339fff3f
+327924ffe73f9ffce7ffcf3cffe93399cf3f9f39ccffe7739e7f3e7399ffcfff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fffe0ce7ffffffffffffffffffffffffffffffff7222fe7f3e7339fff3f
+3e7924ffe73f3ffce7ffcf3cffe93399cf3f9f39cfffe0f39e7f3e739fffc7ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fffcece7ffffffffffffffffffffffffffffffff7088fe7f3e7301fff3f
+3e7924ffe73e7ffce7ffcf3cffe93399cf3f9f01cfffe7739e7f3e039fffe0ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fcf7ff01e1c670f39fffffffffffffffffff7222fe7f3e733ffff3f
+3e7924ffe73cfffce7ffcf3cffe93399cf3f9f3fcfffe7339e7f3e7f9ffffc7f
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fc97fff9cce066739fffffffffffffffffff7088fe7f3e733ffff3f
+3e7924ffe739fe3ce7ffcf3cffef3399cf3f9f3fcff1e7339e7f3e7f9fe3fe7f
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fc97fff39ce64f39bfffffffffffffffffff7222fe7f3e7399fff3f
+3f3324ffe6701e3ce7ffcf99ffef33388f3f9f99cff1e7311e7f3f339fe3ce7f
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fc97ffe79ce7cf387fffffffffffffffffff7088f0080673c3ffc0e
+0f8724ffe0f01e3ce7ffe1c3ffef307c4c0e07c383f1e078981c0f8707e3e0ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fe4fffcf80e7cf3effffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fe4fff9f9fe7cf3c3fffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fc79fe4fff3f9fe7cf3b3fffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fc7cee4fff3fcce7e6739fffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fc7e0e4fff01e1c1f0f39fffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221f878cfffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889f33c0fffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221e79ccfffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889e79cffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221e79cffffffffffffffffffffffffffffffffffff7000fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889e79cffffffffffffffffffffffffffffffffffff7ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221e79cffffffffffffffffffffffffffffffffffff7ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889f33cffffffffffffffffffffffffffffffffffff0000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000ffffff
+ffe1
+0e221f8783ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffe0ce7ffffffffe7fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffcece7ffffffffe7fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fff9fcf7ff19e1e0e478393f0ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff9fc97ff81ccce6233989e67fffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfff9fc97ff999ccfe73f99cce7fffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfff9fc97ff9f9cc7e73f99cce7fffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fff9fe4fff9f80e0e73819cc07fffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff9fe4fff9f9ffc673399ccfffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fc79fe4fff9f9ffe673399ccffffc7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fc7cee4fff9fccce6733199e67ffc7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fc7e0e4fff07e1e0e738983f0fffc7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffff9ffffffe7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffff9ffffffe7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffff9ffffffcffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcffffffff3fffffffffffffffff3ffffffffffffffffffffffffffffff
+fffffe1fffffffffffcfffffffffffffff07fffffffffffffffffffffffffffc
+fffffffffff9fff9ffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcff7fffff3fffffffffffffffdf3ffffffffffffffffffffffffffffff
+fffffcfffffffffff7cfffffffffffffffe7fffffffffffffffff7fffffffffc
+fffffffffff9fef9ffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffe7fffff3fffffffffffffff9f3ffffffffffffffffffffffffffffff
+fffffcffffffffffe7cfffffffffffffffe7ffffffffffffffffe7fffffffffc
+fffffffffffffcf9ffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221e0f80fff8723c1c8f83c3c1ffe0323e1ffcb7879ce0f87ffe1ce63383c3
+c67ff018ce1cb7ff80c8f87ff9ce0e7383e7fff07198ce1e73ff80e1fff83ffc
+9f0f39ffce41f0191fffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfe7fff33119cc4733999cfff9f11ccffc03339cce733ffccce7033999
+e07ffcfc0ccc03ffe7c4733ff9cce67339e7ffe7381c0cce7bffe7ccfff39ffc
+4e6739ffcf79fcf88fffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcfe7ffe7339fcce673399ffff9f399cffc92799ccfe73ff9cce7333f3c
+e67ffcfcc9e493ffe7ce673ff9ccfe73f9e7ffff399cc9e64bffe79e7fff9ffc
+e4f39bffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfe7ffe7f39fcce673398ffff9f399cffc92799cc7e73ff9fce73f1f3c
+e7fffcfcf9e493ffe7ce673ff9cc7e73f9e7ffff39fcf9e64bffe79e7fff9ffc
+e4f387ffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcfe7ffe7f39c0ce67301c1fff9f3980ffc92799ce0e03ff9fce73f833c
+e7fffcfcf9e493ffe7ce603ff9ce0e7381e7fff039fcf9e64bffe79e7ff81ffc
+e4f3efffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfe7ffe7f399cce6733ff8fff9f399fffc92799cfc67fff9fce73ff13c
+e7fffcfcf9e493ffe7ce67fff9cfc67339e7ffe739fcf9e727ffe79e7ff39ffc
+e4f3c3ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcfe7ffe7f399cce6733ffcfff9f399fffc92799cfe67fff9fce73ff93c
+e7fffcfcf9e493ffe7ce67fff9cfe67339e7ffe739fcf9e727ffe79e7ff39ffc
+e4f3b3ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfe7fff333998ce723999cfff9f39ccffc933388ce733ffccc473f3999
+e7fffcfcfccc93ffe7ce733ff88ce62331e7ffe639fcfccf27ffe7ccfff31ffc
+ce6739ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221e01f0fff8739c4ce793c3c1fffc339e1ffc9387c4e0f87ffe1e260f83c3
+c1fff0383e1c93fff0ce787ffc4e0f138900fff130783e1f27fff0e1fff89ffc
+1f0f39ffe4c03e19cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffff07ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffff0783fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f83ffe0cb783e7f3fff838cc670f39fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f39ffce40339e7f3fff39c0e06673dfffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ff9ffcfc93f9e7f3ffff9cce64f325fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ff9ffc7c93f9e7f3ffff9cfe7cf325fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f81ffe0c9381e7f3fff81cfe7cf325fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f39fffc49339e7f3fff39cfe7cf393fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f39fffe49339e7f3fff39cfe7cf393e3fffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f31ffce49331e7f3fff31cfe7e6793e3fffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f89ffe0c938900807ff8983c1f0f93e3fffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
+000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffff3fe7fffffffffffffffffffffff3fffffffffffffffffffff
+fffffff9ffffffffffffff3fffffffffcffffe79ffffffffffffffffffc00003
+006000000000001ffffffffffffffffff07fffff3fffffffffffffffffffffff
+ffe1
+0e221f03fffffdf3fe7ffffffff7fffdffffffffdf3fffffffffffffffffffff
+fffffff9ffffffffffffff3fff7fffffcffffe79ffffffbfffffffffffc00003
+006010000000001ffffffffff7fffffffe7fffff3fffffffffffffffffffffff
+ffe1
+0e889fcffffff9f3ffffffffffe7fff9ffffffff9f3fffffffffffffffffffff
+fffffff9ffffffffffffff3ffe7ffffffffffe7fffffff3fffffffffffc00003
+000030000000001fffffffffe7fffffffe7fffff3fffffffffffffffffffffff
+ffe1
+0e221fcf91ffe032307e0fff8380e0e03c3ffffe0323e1ffcb7879ce0f87ff2d
+e0e73ff93f0fff39c1f0f83ff80e1ffe0f91f041fc3c1c0787ffc1c8ffc7c733
+63e0fe731f1ccc7ffc6787c380e0e47c1e7f0fff279cffffffffffffffffffff
+ffe1
+0e889fcf88fff9f11e7ce7ff39e7ce79f99fffff9f11ccffc03339cce733ff00
+ce673ff89e67ff399ce6733ffe7ccfffcf88e679f999cf3f33ff9cc47fcc63f3
+b060303f318fcc7ffe073399e7ce62399e7e67ff139cffffffffffffffffffff
+ffe1
+0e221fcf9cfff9f39e7cffff3fe7fe79f39fffff9f399cffc92799ccfe73ff24
+fe67bff9cce7ff399fce673ffe79e7ffcf9cce79f39fcf3e73fffcce7fc06333
+18603033018ccc3ffe667339e7fe67339e7ce7ff399effffffffffffffffffff
+ffe1
+0e889fcf9cfff9f39e7c7fff1fe7fe79f39fffff9f399cffc92799cc7e73ff24
+fe733ff9cce7ff398fce673ffe79e7ffcf9cce79f3ffcf3e73fffcce7fc06303
+18603030018c067ffe7e733fe7fe67339e7ce7ff39ccffffffffffffffffffff
+ffe1
+0e221fcf9cfff9f39e7e0fff83e7e079f01fffff9f3980ffc92799ce0e03ff24
+e0737ff9cc07ff39c1c0673ffe79e7ffcf9cce79f3fc0f3e03ffc0ce7fc7e303
+186030301f8c065ffe7e033fe7e067339e7c07ff39cdffffffffffffffffffff
+ffe1
+0e889fcf9cfff9f39e7fc7fff1e7ce79f3ffffff9f399fffc92799cfc67fff24
+ce737ff9ccffff39f8cfe73ffe79e7ffcf9cce79f3f9cf3e7fff9cce7fcc6303
+18603030318c065ffe7e7f3fe7ce67339e7cffff39cdffffffffffffffffffff
+ffe1
+0e221fcf9cfff9f39e7fe7fff9e7ce79f3fe3fff9f399fffc92799cfe67fff24
+ce78fff9ccffff39fccfe73ffe79e7ffcf9cce79f3f9cf3e7fff9cce7fcc6303
+18603030318c039ffe7e7f3fe7ce67339e7cffff39e3ffffffffffffffffffff
+ffe1
+0e889fcf9cfff9f39e7ce7ff39e7cc79f99e3fff9f39ccffc933388ce733ff24
+cc78fff99e67ff119ce6723ffe7ccfffcf9ce479f9998f3f33ff98ce7fcce303
+30603030338c039ffe7f3399e7cc67391e7e67ff33e3ffffffffffffffffffff
+ffe1
+0e221f039cfffc33900e0fff83f0e27c3c3e3fffc339e1ffc9387c4e0f87ff24
+e27cfff83f0fff89c1f0f93fff0e1ffe019cf2403c3c4f8787ffc4ce7fc767c3
+e3fc1e7c1d9f019ffc1f87c3f0e2673c900f0fff07f3ffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffff3fffffffffffffffffffffffffff
+fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
+000000000000011fffffffffffffffff9ffffffffff7ffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffff3fffffffffffffffffffffffffff
+fff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
+000000000000031ffffffffffffffff39fffffffffe7ffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffff
+fff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
+000000000000071ffffffffffffffff83fffffffffc7ffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffe7fffffff9fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffe7ffffff83ffffffff3ffffffff3ffffffffffffff9ff
+fffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffe7fffffff9ffffdfeffffffff83fffffdffffffffffffff
+fffffffffffffffffffe7fffffff3ffffffff3ffffffff3fdffffffbfffef9ff
+fffffffffffffffe7fbfffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffff9ffff9fcffffffff39fffff9ffffffffffffff
+fffffffffffffffffffe7fffffff3fffffffffffffffffff9ffffff3fffcf9ff
+ffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f278cf0f078307c8f83ff93ce60301c3c8fff39ffe0e03ffc3c8f87ffe1
+e1e3323e1c67ff8391f07ff19e1f3f8783c183e47c1ff83e03ffc1c07ff0191f
+0fff8793c9f0f8307c0787ffe1e1e3323e1c67ffffffffffffffffffffffffff
+ffe1
+0e889f13c0e667339e7c4733ff89ce79fcf99c47fff9ffce79fff99c4733ffcc
+ccf0311cce07ff3988e67ff81ccf3f33399cf3e2399fff3f9fff9cf3fffcf88e
+67ff3389c4e6739e7f3f33ffccccf0311cce07ffffffffffffffffffffffffff
+ffe1
+0e221f39ccce67f3fe7ce673ff9cce79fcf3cce7fff9fffe79fff3cce673ff9c
+9e733399ce67fff99cce7ff999cf3e73f99ff3e7339fff3f9ffffcf3fffcf9cc
+e7fe799cce4f33fe7f3e73ff9c9e733399ce67ffffffffffffffffffffffffff
+ffe1
+0e889f39cfce63f1fe7ce673ff9cce79fcf3cce7ffc7fffe79fff3cce673ff9f
+9e73f399ce7ffff99cce7ff9f9cf3e73f98ff3e7339fff3f9ffffcf3fffcf9cc
+e7fe799cce4f31fe7f3e73ff9f9e73f399ce7fffffffffffffffffffffffffff
+ffe1
+0e221f39cfc070783e7ce673ff9cce79fcf3cce7fff9ffe079fff3cce603ff9f
+9e73f3980e7fff819cce7ff9f80f3e0381c1f3e7339fff3f9fffc0f3fffcf9cc
+07fe799cce4f383e7f3e03ff9f9e73f3980e7fffffffffffffffffffffffffff
+ffe1
+0e889f39cfcffe3f1e7ce673ff9cce79fcf3cce7fff9ffce79fff3cce67fff9f
+9e73f399fe7fff399cce7ff9f9ff3e7f39f8f3e7339fff3f9fff9cf3fffcf9cc
+fffe799cce4f3f1e7f3e7fff9f9e73f399fe7fffffffffffffffffffffffffff
+ffe1
+0e221f39cfcfff3f9e7ce673ff9cce79fcf3cce7fff9ffce79fff3cce67fff9f
+9e73f399fe7fff399cce7ff9f9ff3e7f39fcf3e7339fff3f9fff9cf3fffcf9cc
+fffe799cce4f3f9e7f3e7fff9f9e73f399fe7f8fffffffffffffffffffffffff
+ffe1
+0e889f33cfe667339e7ce723ff99c479fcf99ce7ff39ffcc79fff99ce733ffcc
+ccf3f39cce7fff319ce47ff9fccf3f33319cf3e7391fff3f9fff98f3fffcf9ce
+67ff3399cce6739e7f3f33ffccccf3f39cce7f8fffffffffffffffffffffffff
+ffe1
+0e221f0783f0f078300ce793ff83e27c3e1c3ce7ff83ffe27c3ffc3ce787ffe1
+e1e0f39e1c1fff899cf27ff07e18078789c180673c9ff807c3ffc4f87ffe19cf
+0fff8783c1f0f8300f8787ffe1e1e0f39e1c1f8fffffffffffffffffffffffff
+ffe1
+0e889f3ffffffffffffffff3ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffff
+ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f3ffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff39fffffffffffffffffffff
+ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3fffffffffffffff07ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff83fffffffffffffffffffff
+ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffffffffffff9fffffffc1fffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f39fffffffffffffffffffffff9ffffffbf9fffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f39ffffffffffffffffffffffffffffff3f9fffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f11c3c6787ffe1e1e4739e1c8c1fc391c079f39ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f1199e0733ffcccce2339ccc479f9988f3f9f39ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f493ce6673ff9c9e6733d9cce79f399cf3f9f3dffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f493ce7e73ff9f9e673999cce79f399cf3f9f99ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f493ce7e03ff9f9e6739b80ce79f019cf3f9f9bffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f493ce7e7fff9f9e6739b9fce79f3f9cf3f9f9bffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f793ce7e7fff9f9e673c79fce79f3f9cf3f9fc7e3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f7999e7f33ffcccce73c7ccce79f999cf3f9fc7e3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f79c3c1f87ffe1e1e73c7e1ce403c39cf8403e7e3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffeff3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffcff3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffff8fe7ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3fffffffffffffffffffffffffffffff3fffff07fffff3fffffffe0fe7
+ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f3ffffbfdffffffff07ffffffffffffff3fffffe7fffff3ffffffffcfe7
+ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3ffff3f9fffffffe73ffffffffffffffffffffe7fffff3ffffffffcfff
+ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f279cc06038791ffe73ff2de0e73ffc183cb727e7ce7ff27e1fff87cf07
+f0e73c3e0fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f139cf3f9f3388ffff3ff00ce673ff9cf3c0313e7ce7ff13ccfff33cfe7
+e667799ccfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f399cf3f9e799cffff3ff24fe67bff9ff3c9339e7cf7ff399cffe73cfe7
+ce66f399cfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f399cf3f9e799cfff8fff24fe733ff8ff3c9339e7e67ff399cffe7fcfe7
+cfe5f399cfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f399cf3f9e799cffff3ff24e0737ffc1f3c9339e7e6fff3980ffe7fcfe7
+cfe1f019cfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f399cf3f9e799cffff3ff24ce737fff8f3c9339e7e6fff399fffe7fcfe7
+cfe4f3f9cfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f399cf3f9e799cffff3ff24ce78ffffcf3c9339e7f1fff399fffe7fcfe7
+cfe673f9cf1fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3388f3f9f339cffe73ff24cc78fff9cf3c9333e7f1fff33ccfff33cfe7
+e667399c8f1fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f07c4f87c3879cfff07ff24e27cfffc1804930700f9fff07e1fff860100
+f0e73c3e4f1fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffffffffffffdffffffffff3ffffbffffffffffffffff
+ffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffffffffffffffff9ffffffffff3ffff3ffffffffffffffff
+ffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffffffffffff1ffffffffff3fffe3ffffffffffffffff
+ffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f3991f0e33c39cc9f0f23ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3d88e6703999cc4e6711ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f259cce733399cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f259cce73f399cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f259cc073f019cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f939ccff3f3f9cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f939ccff3f3f9cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f939ce673f9988cce6739ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f939cf0e0fc3c4c1f0f39ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff
+showpage
+%%BoundingBox: 23 241 587.48 550.60
diff --git a/sys/doc/sam/fig2.bm b/sys/doc/sam/fig2.bm
new file mode 100644
index 000000000..5bbcc22d0
--- /dev/null
+++ b/sys/doc/sam/fig2.bm
Binary files differ
diff --git a/sys/doc/sam/fig2.gif b/sys/doc/sam/fig2.gif
new file mode 100644
index 000000000..88410195e
--- /dev/null
+++ b/sys/doc/sam/fig2.gif
Binary files differ
diff --git a/sys/doc/sam/fig2.png b/sys/doc/sam/fig2.png
new file mode 100644
index 000000000..326131a5b
--- /dev/null
+++ b/sys/doc/sam/fig2.png
Binary files differ
diff --git a/sys/doc/sam/fig2.ps b/sys/doc/sam/fig2.ps
new file mode 100644
index 000000000..00d3a7a9d
--- /dev/null
+++ b/sys/doc/sam/fig2.ps
@@ -0,0 +1,294 @@
+%!PS-Adobe-2.0
+%%Version: 3.3.2
+%%DocumentFonts: (atend)
+%%Pages: (atend)
+%%EndComments
+%%EndProlog
+%%BeginSetup
+mark
+%%Patch from lp
+%%EndPatch from lp
+
+/picstr 23 string def
+239 297 translate
+132.48 197.28 scale
+
+184 274 1 [184 0 0 -274 0 274]
+{currentfile picstr readhexstring pop} image
+
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffc00000000000000000000000000000000000000fffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffe47c39cfffffffffffffefffff
+ffc0000fffffffffffffe23999efffffffffffffefffff
+ffc0000fffffffffffffe733992fffffffffffffefffff
+ffc0000fffffffffffffe733992fffffffffffffefffff
+ffc0000fffffffffffffe730192fffffffffffffefffff
+ffc0000fffffffffffffe733fc9fffffffffffffefffff
+ffc0000fffffffffffffe733fc9fffffffffffffefffff
+ffc0000fffffffffffffe7399c9fffffffffffffefffff
+ffc0000fffffffffffffe73c3c9fffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffc078719c3ce7ffffffffffefffff
+ffc0000ffffffffffffe7338199ce7ffffffffffefffff
+ffc0000ffffffffffffce73993ce6fffffffffffefffff
+ffc0000ffffffffffff9e739f3ce1fffffffffffefffff
+ffc0000ffffffffffff3e039f3cfbfffffffffffefffff
+ffc0000fffffffffffe7e7f9f3cf0fffffffffffefffff
+ffc0000fffffffffffcfe7f9f3cecfffffffffffefffff
+ffc0000fffffffffffcff339f99ce7ffffffffffefffff
+ffc0000fffffffffffc078707c3ce7ffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000ffffffffffffffff3ffffffffffffffffefffff
+ffc0000ffffffffffffffff3ffffffffffffffffefffff
+ffc0000ffffffffffffffff3ffffffffffffffffefffff
+ffc0000fffffffff8cf0f0723c1c9f87ffffffffefffff
+ffc0000fffffffffc0e6673119cc4f33ffffffffefffff
+ffc0000fffffffffccce67f39fcce673ffffffffefffff
+ffc0000fffffffffcfce63f39fcce673ffffffffefffff
+ffc0000fffffffffcfc070739c0ce603ffffffffefffff
+ffc0000fffffffffcfcffe3399cce67fffffffffefffff
+ffc0000fffffffffcfcfff3399cce67fffffffffefffff
+ffc0000fffffffffcfe66733998ccf33ffffffffefffff
+ffc0000fffffffff83f0f0739c4c1f87ffffffffefffff
+ffc0000ffffffffffffffffffffcffffffffffffefffff
+ffc0000ffffffffffffffffffffcffffffffffffefffff
+ffc0000ffffffffffffffffffffcffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffc1ffffffffffffffffffefffff
+ffc0000ffffffffffffff9ffffffffffffffffffefffff
+ffc0000ffffffffffffff9ffffffffffffffffffefffff
+ffc0000ffffffffffff0f9f87c1f0fffffffffffefffff
+ffc0000fffffffffffe679f339ce67ffffffffffefffff
+ffc0000fffffffffffce79e799fce7ffffffffffefffff
+ffc0000fffffffffffcff9e798fce7ffffffffffefffff
+ffc0000fffffffffffcff9e79c1c07ffffffffffefffff
+ffc0000fffffffffffcff9e79f8cffffffffffffefffff
+ffc0000fffffffffffcff9e79fccffffffffffffefffff
+ffc0000fffffffffffe679f339ce67ffffffffffefffff
+ffc0000ffffffffffff0c0387c1f0fffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc00008000000000000000000000000000000000fffff
+ffc00008000000000000000000000000000000000fffff
+ffc00008000000000000000300000000000000000fffff
+ffc00008000000000000000300800000000000000fffff
+ffc00008000000000000000001800000000000000fffff
+ffc000080000000000319cdf07f0f000000000000fffff
+ffc000080000000000308fc301819800000000000fffff
+ffc000080000000000368cc30183180000ff80000fffff
+ffc000080000000000368c030183180000fe00000fffff
+ffc000080000000000368c030183f80000f800000fffff
+ffc0000800000000001b0c030183000000fc00000fffff
+ffc0000800000000001b0c030183000000fe00000fffff
+ffc0000800000000001b0c030181980000df00000fffff
+ffc0000800000000001b1f1fe0f0f00000cf80000fffff
+ffc000080000000000000000000000000087c0000fffff
+ffc000080000000000000000000000000083e0000fffff
+ffc0000ffffffffffffffffffffffffffffe0fffefffff
+ffc0000fffffffffffffffffffffffffffff07ffefffff
+ffc0000fffffffffffffffffffffffffffff83ffefffff
+ffc0000fffffffffffffffffffffffffffffc1ffefffff
+ffc0000fffffffffffffffffffffffffffffe0ffefffff
+ffc0000ffffffffffffff07832dffffffffff1ffefffff
+ffc0000fffffffffeef76733900f77bbfffffbffefffff
+ffc0000fffffffffc6e367ff924e371bffffffffefffff
+ffc0000fffffffff80c063ff924c0603ffffffffefffff
+ffc0000fffffffffb1d8f078124d8ec7ffffffffefffff
+ffc0000fffffffffbbddfe33924ddeefffffffffefffff
+ffc0000fffffffffffffff33924fffffffffffffefffff
+ffc0000fffffffffffffe733124fffffffffffffefffff
+ffc0000ffffffffffffff078924fffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000ffffffffffffff3f9ffffffffffffffffefffff
+ffc0000ffffffffffffff3f9ffffffffffffffffefffff
+ffc0000ffffffffffffff3f9ffffffffffffffffefffff
+ffc0000ffff9fffffe0f83c18cf0f0783fff0fffefffff
+ffc0000ffff9fffffce73399c0e667339ffe67ffefffff
+ffc0000ffff9ffffffe67339ccce67f3fffce7ffefffff
+ffc0000fffc03fffffe67339cfce63f1fffcffffefffff
+ffc0000fffc03ffffe067339cfc070783ffcffffefffff
+ffc0000ffff9fffffce67339cfcffe3f1ffcffffefffff
+ffc0000ffff9fc7ffce67339cfcfff3f9e3cffffefffff
+ffc0000ffff9fc7ffcc72391cfe667339e3e67ffefffff
+ffc0000ffffffc7ffe2793c983f0f0783e3f0fffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000ffffffffffffc1e0fffffffffffffffffefffff
+ffc0000fffffffffffff9fcfffffffffffffffffefffff
+ffc0000fffffffffffff9fcfffffffffffffffffefffff
+ffc0000ffffffffffe0f9fcfc3f0fffc3fffffffefffff
+ffc0000ffffffffffce79fcf99e67ff99fffffffefffff
+ffc0000fffffffffffe79fcf3cce7ff39fffffffefffff
+ffc0000fffe03fffffe79fcf3ccffff3ffffffffefffff
+ffc0000fffe03ffffe079fcf3ccffff3ffffffffefffff
+ffc0000ffffffffffce79fcf3ccffff3ffffffffefffff
+ffc0000ffffffffffce79fcf3ccff8f3ffffffffefffff
+ffdffffffffffffffcc79fcf99e678f99fffffffefffff
+ffdffffffffffffffe240201c3f0f8fc3fffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffffffffffffcffffe1f0ffffffffffffffefffff
+ffdffffffffffffffcffffcfe7ffffffffffffffefffff
+ffdffffffffffffffcffffcfe7ffffffffffffffefffff
+ffdffffffffdfffffc9e730180f0e33ffe1fffffefffff
+ffdffffffff57ffffc4e73cfe7e6703ffccfffffefffff
+ffdffffffff8fffffce673cfe7ce733ff9cfffffefffff
+ffdfffffffe23ffffce673cfe7ce73fff9ffffffefffff
+ffdffffffff8fffffce673cfe7c073fff9ffffffefffff
+ffdffffffff57ffffce673cfe7cff3fff9ffffffefffff
+ffdffffffffdfffffce673cfe7cff3fc79ffffffefffff
+ffdffffffffffffffcce23cfe7e673fc7ccfffffefffff
+ffdffffffffffffffc1f130381f0e0fc7e1fffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffffffffffffffffff9ffffffffffffffffefffff
+ffdffffffffffffffffffff9ffffffffffffffffefffff
+ffdffffffffffffffffffff9ffffffffffffffffefffff
+ffdfffffffffffffff0cb7c1fff0ffffffffffffefffff
+ffdffffffffffffffe640399ffe67fffffffffffefffff
+ffdffffffffffffffce49339ffce7fffffffffffefffff
+ffdfffffffe03ffffcfc9339ffcfffffffffffffefffff
+ffdfffffffe03ffffcfc9339ffcfffffffffffffefffff
+ffdffffffffffffffcfc9339ffcfffffffffffffefffff
+ffdffffffffffffffcfc9339e3cfffffffffffffefffff
+ffdffffffffffffffe649391e3e67fffffffffffefffff
+ffdfffffffffffffff0c93c9e3f0ffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffff1ffffffffe79fffffffffffffffffffefffff
+ffdffffff1ffffffffe79fffffffffffffffffffefffff
+ffdffffff1ffffffffe7ffffffffffffffffffffefffff
+ffdffffff9f9ffffff041f83e1fff87fffffffffefffff
+ffdffffff9f9fffffe679f39ccfff33fffffffffefffff
+ffdffffff3f9fffffce79f3f9cffe73fffffffffefffff
+ffdfffffffc03ffffce79f1f9fffe7ffffffffffefffff
+ffdfffffffc03ffffce79f839fffe7ffffffffffefffff
+ffdffffffff9fffffce79ff19fffe7ffffffffffefffff
+ffdffffffff9fffffce79ff99ff1e7ffffffffffefffff
+ffdffffffff9fffffe479f39ccf1f33fffffffffefffff
+ffdfffffffffffffff240383e1f1f87fffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffff0e3319c3c67ffc3fffffffefffff
+ffdffffffffffffffe67038199e07ff99fffffffefffff
+ffdffffffffffffffce733993ce67ff39fffffffefffff
+ffdfffffffe03ffffce73f9f3ce7fff3ffffffffefffff
+ffdfffffffe03ffffc073f9f3ce7fff3ffffffffefffff
+ffdffffffffffffffcff3f9f3ce7fff3ffffffffefffff
+ffdffffffffffffffcff3f9f3ce7f8f3ffffffffefffff
+ffdffffffffffffffe673f9f99e7f8f99fffffffefffff
+ffdfffffffffffffff0e0f07c3c1f8fc3fffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffffffffffffffffffffffffffff9ffffffefffff
+ffdffffffffffffffffffffffffffffff9ffffffefffff
+ffdffffffffffffffffffffffffffffff9ffffffefffff
+ffdfffffffffffffff0e3319c3c6707ff91fffffefffff
+ffdffffffffffffffe67038199e0673ff88fffffefffff
+ffdffffffffffffffce733993ce667fff9cfffffefffff
+ffdfffffffe03ffffce73f9f3ce7e3fff9cfffffefffff
+ffdfffffffe03ffffc073f9f3ce7f07ff9cfffffefffff
+ffdffffffffffffffcff3f9f3ce7fe3ff9cfffffefffff
+ffdffffffffffffffcff3f9f3ce7ff3c79cfffffefffff
+ffdffffffffffffffe673f9f99e7e73c79cfffffefffff
+ffdfffffffffffffff0e0f07c3c1f07c79cfffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffff879e0fffffffffffffffffefffff
+ffdfffffffffffffff3f9fcfffffffffffffffffefffff
+ffdfffffffffffffff3fffcfffffffffffffffffefffff
+ffdffffffffffffffc041fcfe1fff87fffffffffefffff
+ffdfffffffffffffff3f9fcfccfff33fffffffffefffff
+ffdfffffffffffffff3f9fcf9cffe73fffffffffefffff
+ffdfffffffe03fffff3f9fcf9cffe7ffffffffffefffff
+ffdfffffffe03fffff3f9fcf80ffe7ffffffffffefffff
+ffdfffffffffffffff3f9fcf9fffe7ffffffffffefffff
+ffdfffffffffffffff3f9fcf9ff1e7ffffffffffefffff
+ffdfffffffffffffff3f9fcfccf1f33fffffffffefffff
+ffdffffffffffffffc0c0201e1f1f87fffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffff0783ffffffffffffefffff
+ffdfffffffffffffffffffffe7f3ffffffffffffefffff
+ffdfffffffffffffffffffffe7f3ffffffffffffefffff
+ffdfffffffffffffff078783e7f3f0fc3fff0fffefffff
+ffdffffffffffffffe673339e7f3e6799ffe67ffefffff
+ffdffffffffffffffce673f9e7f3cf339ffce7ffefffff
+ffdfffffffe03ffffce67ff9e7f3cf33fffcffffefffff
+ffdfffffffe03ffffce67f81e7f3cf33fffcffffefffff
+ffdffffffffffffffce67f39e7f3cf33fffcffffefffff
+ffdffffffffffffffce67f39e7f3cf33fe3cffffefffff
+ffdffffffffffffffe473331e7f3e6799e3e67ffefffff
+ffdfffffffffffffff278789008070fc3e3f0fffefffff
+ffdfffffffffffffffe7ffffffffffffffffffffefffff
+ffdffffffffffffffce7ffffffffffffffffffffefffff
+ffdffffffffffffffe0fffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffff3fffffffffffffffffffffefffff
+ffdfffffffffffffff3fffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffffffffffff83f0fffe1ffffffffffffffefffff
+ffdfffffffffffffff3e67ffccffffffffffffffefffff
+ffdfffffffffffffff3cf3ff9cffffffffffffffefffff
+ffdfffffffe03fffff3cf3ff9fffffffffffffffefffff
+ffdfffffffe03fffff3cf3ff9fffffffffffffffefffff
+ffdfffffffffffffff3cf3ff9fffffffffffffffefffff
+ffdfffffffffffffff3cf3c79fffffffffffffffefffff
+ffdfffffffffffffff3e67c7ccffffffffffffffefffff
+ffdffffffffffffff8070fc7e1ffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffc00000000000000000000000000000000000000fffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+showpage
+%%BoundingBox: 239 297 371.48 494.28
diff --git a/sys/doc/sam/fig3.bm b/sys/doc/sam/fig3.bm
new file mode 100644
index 000000000..25548370d
--- /dev/null
+++ b/sys/doc/sam/fig3.bm
Binary files differ
diff --git a/sys/doc/sam/fig3.gif b/sys/doc/sam/fig3.gif
new file mode 100644
index 000000000..b6c8be2fc
--- /dev/null
+++ b/sys/doc/sam/fig3.gif
Binary files differ
diff --git a/sys/doc/sam/fig3.png b/sys/doc/sam/fig3.png
new file mode 100644
index 000000000..be2c986ed
--- /dev/null
+++ b/sys/doc/sam/fig3.png
Binary files differ
diff --git a/sys/doc/sam/fig3.ps b/sys/doc/sam/fig3.ps
new file mode 100644
index 000000000..a2a64c0b4
--- /dev/null
+++ b/sys/doc/sam/fig3.ps
@@ -0,0 +1,622 @@
+%!PS
+/picstr 79 string def
+80 322 translate
+451.44 146.88 scale
+
+627 204 1 [627 0 0 -204 0 204]
+{currentfile picstr readhexstring pop} image
+
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff3fffffff3cffffffffffffffffffffdfe7f3bff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff3fffefff3cffffffff07ffffffffff3fe7f3cff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff3fffe7ff3fffffffff33fffffffffe7fe7f3e7f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff27fff3f820fc1f0fff39c3c9f8723e7f0783e7e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff13fff9f33cf9ce66033999c4f3311cfe6733f3e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff39fffce73cf9fce603393cce67339cfce673f3e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff3980fc673cf8fcffff393cce67339cfce673f3f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff3980fce73cfc1cffff393cce60339cfce673f3f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff39fff9e73cff8cfe03393cce67f39cfce673f3f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff39fff3e73cffccfe03393cce67f39cfce673f3e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff33ffe7f23cf9ce67ff3399ccf3339cfe4723f3e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff07ffeff9201c1f0fff07c3c1f8739e7f2793e7e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffffffffffffffffffffffffffcffffffe7fffffe7f
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffffffffffffffffffffffffffcfffffff3fffffcff
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffffffffffffffffffffffffffcfffffffdfffffbfe
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdffffffffffffffffffffffffff9fffe7ffff7ff9ffffffffffffe7fffd
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffff7fff9fffe7fbfcf0f9ffff7fffffffe7fffe
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffe7ffffffffff3f9e679ffff3fffffffe7ffff
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff8380c641f2307c079e6793fff9fc3c1f0e47c3f
+3f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff39e7e079f11e7f3f3e6f89fffcf999ce662399f
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff3fe7e679f39e7f3f3f1f9cfffe739fcce67339f
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff1fe7e7f9f39e7f3f3f499cc07e33ffccfe7339f
+9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff83e7e7f9f39e7f3f3e4b9cc07e73fc0cfe7301f
+9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffff1e7e7f9f39e7f3f3e679cfffcf3f9ccfe733ff
+9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffff9e7e7f9f39e7f3f3e679cfff9f3f9ccfe733ff
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff39e7e7f9f39e7f3f3e2399fff3f9998e667399f
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff83f0c1c033900f879f1183fff7fc3c4f0e73c3f
+3f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffffffffffffffff9ffffffffffffffffffffff
+3f9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffffffffffffffffffffcfffffffffffffffffffffe
+7f9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffd
+ff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffbfffffffffe7ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffff3fffffffffe7ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff19e1c06731991ffe4fc7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff81ccf3e738188ffe27c7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff999cf3e73999cffe73c7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9f9cf3e739f9cffe73fffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff9f80f3e739f9cffe73fffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9f9ff3e739f9cffe73fffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff9f9ff3e739f9cffe73c7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9fccf3e239f9cffe67c7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff07e1f8713079cffe0fc7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffffffffffffffffffe7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffffffffffffffffffffffe7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffff83ffffffffee7fbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f03fff3ffffffff9e7fcffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f39fff3ffffffff3e7fe7fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f39e1f3f0f83e1f3e4fe7fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f39ccf3e6739cce7e27f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f3b9cf3cf33f9ce7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f079ff3cf31f9ce7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f3b9ff3cf38380e7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f399ff3cf3f19fe7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f399ff3cf3f99fe7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f39ccf3e6739cce7e67f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f03e18070f83e1f3e0fe7fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffff3fffe7fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffff9fffcffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffefffbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffff9fffffffffffffffffc3e1fffffffff9
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffff9ffff7fffffff81fff9fcffffffffff9
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffe7fffffff9cfff9fcffffffffff9
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff19e1f041f8380f0e33ff9cce60301e1c67ffef9
+3f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff81cce679f39e7e6703ff9cce79fcfcce07ffab8
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff999cce79f3fe7ce733ff9dce79fcf9ce67ffc79
+cf1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9f9cce79f1fe7ce73fff83ce79fcf9ce7fff119
+cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff9f80ce79f83e7c073fff9dce79fcf80e7fffc79
+cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9f9fce79ff1e7cff3fff9cce79fcf9fe7fffab9
+cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff9f9fce79ff9e7cff3fff9cce79fcf9fe7fffef9
+cf1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9fcce479f39e7e673fff9cc479fcfcce7fffff9
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff07e1f240383f0f0e0fff81e260703e1c1fffff8
+3f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffffffffce7ffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffffe0fffffffffffffffffffffffffffffffff
+ff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffc000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffc00007c000000001180000001860000010000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcf8000c00000000618000200186000000c000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffccc000c00000000c180003001800000006000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcc61e0c0f07c1e0c1b000180fbe07c1e06070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffcc6330c198c633181d8000c19860c63303070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcc6630c30cc0631818c000631860c06303070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffcc6600c30ce0631818cfe0731860e06003000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcc6600c30c7c7f1818cfe06318607c6003000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffcc6600c30c0e601818c000c318600e6003000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcc6600c30c06601818c001831860066003070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffccc330c198c6331819800301b860c63303070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcf81e7f8f07c1e0c1f000200dbfc7c1e06070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffc00000000000000c000000000000000006030000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffc00000000000000600000000000000000c030000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffc000000000000001000000000000000010060000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000000000001f00000000040030000000000000c00
+0100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c000000000000000000000800000300000000187830000400000000c00
+00c0000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c00000000000000000000180000030000000030cc30000600000000c00
+0060000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c0000000000000000007c7f39878303c1f07830cc36000301e1f078dc1
+e060700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000c6181f8cc3066318cc60c83b0001833318ccee3
+3030700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c000000000000000000c0181998c30c33018c6070318000c630198cc66
+3030700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000e0181818030c33818c605b319fc0e6001980c66
+3030000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c0000000000000000007c181818030c31f1fc60da319fc0c601f980c67
+f030000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c0000000000000000000e181818030c30398060cc31800186031980c66
+0030000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c00000000000000000006181818030c30198060cc31800306031980c66
+0030700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000c618180cc3066318cc60ee330006033338ccc63
+3030700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c0000000000000000007c0f3e079fe3c1f07830773e000401e1d878c61
+e060700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000000000000000000000300000000000000000000
+0060300000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c000000000000000000000000000000000000180000000000000000000
+00c0300000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000000000000000000000040000000000000000000
+0100600000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c00000000000000000000000000000000000000000000000000000001f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c0000000000000000001e0000000040200000c0000000000203008001f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000300000000180c00000c0000000000183006001f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c000000000000000000300000000301800000c00000000000c3003001f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000fe730f078301831878dc3e39800100c3603039f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c000000000000000000303f198cc6030318ccee631f80054063b01839f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c00000000000000000030333198c60303198cc6031980038063181839f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c00000000000000000030303198c603031980c60318000ee063181801f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c00000000000000000030303f9fc603031980c63f1800038063181801f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c000000000000000000303030180603031980c6631800054063181801f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000303030180603031980c6631800010063181839f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c0000000000000000003030198cc60303b8ccc6671800000063301839f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000fc7c0f07830181d878c63b3e000000c3e03039f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c000000000000000000000000000301800000000000000000c0003019f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000000000000180c0000000000000000180006019f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c00000000000000000000000000004020000000000000000200008031f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+showpage
+%%BoundingBox: 80 322 531.44 468.88
diff --git a/sys/doc/sam/fig4.bm b/sys/doc/sam/fig4.bm
new file mode 100644
index 000000000..6e456a9e3
--- /dev/null
+++ b/sys/doc/sam/fig4.bm
Binary files differ
diff --git a/sys/doc/sam/fig4.gif b/sys/doc/sam/fig4.gif
new file mode 100644
index 000000000..00625cc44
--- /dev/null
+++ b/sys/doc/sam/fig4.gif
Binary files differ
diff --git a/sys/doc/sam/fig4.png b/sys/doc/sam/fig4.png
new file mode 100644
index 000000000..9bfd950e4
--- /dev/null
+++ b/sys/doc/sam/fig4.png
Binary files differ
diff --git a/sys/doc/sam/fig4.ps b/sys/doc/sam/fig4.ps
new file mode 100644
index 000000000..6d1ddccfa
--- /dev/null
+++ b/sys/doc/sam/fig4.ps
@@ -0,0 +1,130 @@
+%!PS
+/picstr 13 string def
+268 352 translate
+ 74.16 86.40 scale
+
+103 120 1 [103 0 0 -120 0 120]
+{currentfile picstr readhexstring pop} image
+
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+f800000000000000000001ffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffdfffffffdffff
+fbfffffffffff9fffffffdffff
+fbffffffe1ce603ffffffdffff
+fbffffffccce79fffffffdffff
+fbffffff9cce79fffffffdffff
+fbffffff9fce79fffffffdffff
+fbffffff9fce79fffffffdffff
+fbffffff9fce79fffffffdffff
+fbffffff9fce79fffffffdffff
+fbffffffccc479fffffffdffff
+fbffffffe1e27c3ffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffdfffffffdffff
+fbfffffffffff9fffffffdffff
+fbffff27c1e0e03c3ffffdffff
+fbffff139cce79f99ffffdffff
+fbffff39fccff9f39ffffdffff
+fbffff39fcc7f9f39ffffdffff
+fbffff39c0e0f9f01ffffdffff
+fbffff399cfc79f3fffffdffff
+fbffff399cfe79f3fffffdffff
+fbffff3398ce79f99ffffdffff
+fbffff07c4e0fc3c3ffffdffff
+fbffff3ffffffffffffffdffff
+fbffff3ffffffffffffffdffff
+fbffff3ffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffe1ffffdffff
+fbfffffffffffffcfffffdffff
+fbfffffffffffffcfffffdffff
+fbffff8391e0e3301ffffdffff
+fbffff3988ce703cfffffdffff
+fbffff3f9cfe733cfffffdffff
+fbffff1f9cfe73fcfffffdffff
+fbffff839ce073fcfffffdffff
+fbfffff19cce73fcfffffdffff
+fbfffff99cce73fcfffffdffff
+fbffff399ccc73fcfffffdffff
+fbffff839ce260f03ffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffff07fffff3ffffffdffff
+fbfffffe7fffff3ffffffdffff
+fbfffffe7fffff3ffffffdffff
+fbfffffe7e1f0f39fffffdffff
+fbfffffe7cce673bfffffdffff
+fbfffffe79e4f337fffffdffff
+fbfffffe79e4f32ffffffdffff
+fbfffffe79e4f30ffffffdffff
+fbfffffe79e4f327fffffdffff
+fbfffffe79e4f333fffffdffff
+fbfffffe7cce6739fffffdffff
+fbfffff00e1f0f39fffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffbfffffffbfffffdffff
+fbfffff3fffffff9fffffdffff
+fbffffe72dce673cfffffdffff
+fbffffcf00ce673e7ffffdffff
+fbffff9f24ce737f3ffffdffff
+fbffff1f24ce70ff1ffffdffff
+fbffff9f24ce7dff3ffffdffff
+fbffffcf24ce787e7ffffdffff
+fbffffe724ce767cfffffdffff
+fbfffff324c46739fffffdffff
+fbfffffb24e2673bfffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+f800000000000000000001ffff
+f800000000000000000001ffff
+f800c04000030000200001ffff
+f800c18000030000180001ffff
+f8018300000180000c0001ffff
+f801830000c180dc0c0c01ffff
+f803060000c0c0ee060c01ffff
+f803060000c0c0c6060c01ffff
+f806060007f860c6067f81ffff
+f806060007f860c6067f81ffff
+f80c060000c030c6060c01ffff
+f80c0601c0c030c6060c01ffff
+f8180601c0c018c6060c01ffff
+f8180301c00018c60c001e0fff
+f830030000000c000c001e3fff
+f830018000000c0018001effff
+f80000400000000020001e7fff
+ffffffffffffffffffffe03fff
+ffffffffffffffffffffe41fff
+ffffffffffffffffffffe60fff
+ffffffffffffffffffffef07ff
+ffffffffffffffffffffef83ff
+ffffffffffffffffffffffc1ff
+ffffffffffffffffffffffe0ff
+fffffffffffffffffffffff07f
+fffffffffffffffffffffff83f
+fffffffffffffffffffffffc1f
+fffffffffffffffffffffffe3f
+ffffffffffffffffffffffff7f
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+showpage
+%%BoundingBox: 268 352 342.16 438.40
diff --git a/sys/doc/sam/fig5.pic b/sys/doc/sam/fig5.pic
new file mode 100644
index 000000000..67ecd8abc
--- /dev/null
+++ b/sys/doc/sam/fig5.pic
@@ -0,0 +1,27 @@
+.PS
+scale=100
+define m0 |
+[
+$2: box "\f(CWBuffer\fP" $1 ht 40 wid 88 with .nw at 0,40
+box "\f(CWString\fP" "(cache)" ht 40 wid 72 with .nw at 104,40
+line left 16 from last box.w
+] |
+
+define m1 |
+[
+box "\f(CWDisc\fP" ht 40 wid 88 with .sw at 0,56
+box "temp. file" ht 40 wid 88 with .sw at 0,0
+line up 16 from last box.n
+] |
+
+D1: m1 with .nw at 184,576
+D2: m1 with .nw at 0,576
+Mtranscript: m0("(transcript)", Buffer) with .nw at 0,640
+Mcontents: m0("(contents)", Contents) with .nw at 184,640
+F: box "\f(CWFile\fP" ht 40 wid 112 with .nw at 75,704
+
+line from D2.n to Mtranscript.Buffer.s
+line from D1.n to Mcontents.Contents.s
+line up 12 from Mtranscript.Buffer.n then right 50 then up 12
+line up 12 from Mcontents.Contents.n then left 60 then up 12
+.PE
diff --git a/sys/doc/sam/fig6.pic b/sys/doc/sam/fig6.pic
new file mode 100644
index 000000000..52ac9a045
--- /dev/null
+++ b/sys/doc/sam/fig6.pic
@@ -0,0 +1,38 @@
+.PS
+scale=100
+
+T: box "\f(CWText\fP" ht 40 wid 112
+R: box "\f(CWRasp\fP" ht 40 wid 90 with .w at (T.e.x+16, T.e.y)
+
+line from T.e to R.w
+arrow from R.e right 24
+box invis "to host" with .w at end of last arrow
+
+line from T.s down 16 then left 30 then down 30 then right 16
+
+FL: box "\f(CWFlayer\fP" ht 40 wid 75 with .w at end of last line
+F1: box ht 40 wid 75 with .w at FL.e
+F2: box ht 40 wid 75 with .w at F1.e
+F3: box "\&\f(CW...\fP" ht 40 wid 75 with .w at F2.e
+
+FX: box invis "\f(CW...\fP" ht 40 wid 75 with .n at (F1.s.x, F1.s.y-24)
+
+FR: box "\f(CWFrame\fP" ht 40 wid 75 with .n at (FL.s.x, FL.s.y-24)
+
+line from FL.s to FR.n
+line from F1.s down 24
+line from F2.s down 24
+line from F3.s down 24
+
+BM: box "\f(CWBitmap\fP" "(cache)" ht 40 wid 68 with .e at (FR.w.x-28, FR.w.y)
+
+line from BM.e to FR.w
+
+line from FR.s down 16 then left 50 then down 30 then right 16
+
+B1: box "\f(CWBox\fP" ht 40 wid 45 with .w at end of last line
+B2: box ht 40 wid 45 with .w at B1.e
+B3: box ht 40 wid 45 with .w at B2.e
+B4: box "\f(CW...\fP" ht 40 wid 45 with .w at B3.e
+
+.PE
diff --git a/sys/doc/sam/fig7.pic b/sys/doc/sam/fig7.pic
new file mode 100644
index 000000000..840eac782
--- /dev/null
+++ b/sys/doc/sam/fig7.pic
@@ -0,0 +1,12 @@
+.PS
+scale=100
+
+tw=15
+
+T1: box ht tw wid 80
+T2: box "\f(CW\s8for(i=0; i<NL; i++){\s0\fP" ht tw wid 166 with .w at T1.e
+T3: box ht tw wid 60 with .w at T2.e
+T4: box "\f(CW\s8/* for each element */\s0\fP" ht tw wid 186 with .w at T3.e
+T5: box ht tw wid 50
+
+.PE
diff --git a/sys/doc/sam/mkfile b/sys/doc/sam/mkfile
new file mode 100644
index 000000000..26de1d431
--- /dev/null
+++ b/sys/doc/sam/mkfile
@@ -0,0 +1,19 @@
+</sys/doc/fonts
+
+default:V: sam.ps sam.tut.out
+
+sam.ps:D: sam.ms fig1.ps fig2.ps fig3.ps fig4.ps fig5.pic fig6.pic fig7.pic refs
+ {echo $FONTS; cat sam.ms refs} | pic | tbl | troff -ms -mpictures | lp -dstdout >sam.ps
+ ../cleanps sam.ps
+
+sam.trout:D: sam.ms fig1.ps fig2.ps fig3.ps fig4.ps fig5.pic fig6.pic fig7.pic refs
+ {echo $FONTS; cat sam.ms refs} | pic | tbl | troff -ms -mpictures >sam.trout
+
+sam.html:D: sam.ms fig1.ps fig2.ps fig3.ps fig4.ps fig5.pic fig6.pic fig7.pic refs
+ pic sam.ms refs | tbl | htmlroff -ms -mhtml >sam.html
+
+sam.tut.out:D: sam.tut
+ troff -ms sam.tut > sam.tut.out
+
+clean:V:
+ rm -f sam.ps
diff --git a/sys/doc/sam/refs b/sys/doc/sam/refs
new file mode 100644
index 000000000..d50b062db
--- /dev/null
+++ b/sys/doc/sam/refs
@@ -0,0 +1,166 @@
+.SH
+REFERENCES
+.PP
+.nr PI \w'20. 'u
+.IP \01.
+R. Pike,
+`The Blit: a multiplexed graphics terminal,'
+.I
+AT&T Bell Labs. Tech. J.,
+.R
+.B 63 ,
+(8),
+1607-1631 (1984).
+.IP \02.
+L. Johnson,
+.I MacWrite,
+Apple Computer Inc., Cupertino, Calif. 1983.
+.IP \03.
+B. Lampson,
+`Bravo Manual,'
+in
+.I
+Alto User's Handbook,
+.R
+pp. 31-62,
+Xerox Palo Alto Research Center,
+Palo Alto, Calif.
+1979.
+.IP \04.
+W. Teitelman,
+`A tour through Cedar,'
+.I
+IEEE Software,
+.R
+.B 1
+(2), 44-73 (1984).
+.IP \05.
+J. Gutknecht,
+`Concepts of the text editor Lara,'
+.I
+Comm. ACM,
+.R
+.B 28 ,
+(9),
+942-960 (1985).
+.IP \06.
+Bell Telephone Laboratories,
+.I
+UNIX Programmer's Manual,
+.R
+Holt, Rinehart and Winston, New York 1983.
+.IP \07.
+B. W. Kernighan and R. Pike,
+.I
+The Unix Programming Environment,
+.R
+Prentice-Hall, Englewood Cliffs, New Jersey 1984.
+.IP \08.
+.I
+Unix Time-Sharing System Programmer's Manual, Research Version, Ninth Edition,
+Volume 1,
+.R
+AT&T Bell Laboratories, Murray Hill, New Jersey 1986.
+.IP \09.
+.I
+Unix Time-Sharing System Programmer's Manual, 4.1 Berkeley Software Distribution,
+Volumes 1 and 2C,
+.R
+University of California, Berkeley, Calif. 1981.
+.IP 10.
+R. Pike,
+`Structural Regular Expressions,'
+.I
+Proc. EUUG Spring Conf., Helsinki 1987,
+.R
+Eur. Unix User's Group, Buntingford, Herts, UK 1987.
+.IP 11.
+A. Goldberg,
+.I
+Smalltalk-80 \(en The Interactive Programming Environment,
+.R
+Addison-Wesley, Reading, Mass. 1984.
+.IP 12.
+K. Thompson,
+`Regular expression search algorithm,'
+.I
+Comm. ACM,
+.R
+.B 11 ,
+(6),
+419-422 (1968).
+.IP 13.
+A. V. Aho, J. E. Hopcroft and J. D. Ullman,
+.I
+The Design and Analysis of Computer Algorithms,
+.R
+Addison-Wesley, Reading, Mass. 1974.
+.IP 14.
+B. W. Kernighan and D. M. Ritchie,
+.I
+The C Programming Language,
+.R
+Prentice-Hall, Englewood Cliffs, New Jersey 1978.
+.IP 15.
+W. M. Waite,
+`The cost of lexical analysis,'
+.I
+Softw. Pract. Exp.,
+.R
+.B 16 ,
+(5),
+473-488 (1986).
+.IP 16.
+C. W. Fraser,
+`A generalized text editor,'
+.I
+Comm. ACM,
+.R
+.B 23 ,
+(3),
+154-158 (1980).
+.IP 17.
+R. Pike,
+`Graphics in overlapping bitmap layers,'
+.I
+ACM Trans. on Graph.,
+.R
+.B 2 ,
+(2)
+135-160 (1983).
+.IP 18.
+L. J. Guibas and J. Stolfi,
+`A language for bitmap manipulation,'
+.I
+ACM Trans. on Graph.,
+.R
+.B 1 ,
+(3),
+191-214 (1982).
+.IP 19.
+R. Pike, B. Locanthi and J. Reiser,
+`Hardware/software trade-offs for bitmap graphics on the Blit,'
+.I
+Softw. Pract. Exp.,
+.R
+.B 15 ,
+(2),
+131-151 (1985).
+.IP 20.
+T. A. Cargill,
+`The feel of Pi,'
+.I
+Winter USENIX Conference Proceedings,
+Denver 1986,
+.R
+62-71,
+USENIX Assoc., El Cerrito, CA.
+.IP 21.
+G. J. Holzmann,
+`Tracing protocols,'
+.I
+AT&T Tech. J.,
+.R
+.B 64 ,
+(10),
+2413-2434 (1985).
diff --git a/sys/doc/sam/sam.html b/sys/doc/sam/sam.html
new file mode 100644
index 000000000..e7bda43b6
--- /dev/null
+++ b/sys/doc/sam/sam.html
@@ -0,0 +1,3705 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=utf8">
+<title>The Text Editor sam</title>
+</meta>
+</head>
+<body>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="margin-top: 0; margin-bottom: 0.21in"></p>
+
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 12pt"><b>The Text Editor </b></span><span style="font-size: 12pt"><tt>sam</tt></span><span style="font-size: 12pt"><b></b></span></p>
+<p style="margin-top: 0; margin-bottom: 0.21in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i>Rob Pike</i></span></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i>rob@plan9.bell-labs.com</i></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.33in"></p>
+<p style="line-height: 1.4em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: center;">
+<span style="font-size: 10pt"><i>ABSTRACT</i></span></p>
+<p style="margin-top: 0; margin-bottom: 0.19in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.50in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is an interactive multi-file text editor intended for
+bitmap displays.
+A textual command language
+supplements the mouse-driven, cut-and-paste interface
+to make complex or
+repetitive editing tasks easy to specify.
+The language is characterized by the composition of regular expressions
+to describe the structure of the text being modified.
+The treatment of files as a database, with changes logged
+as atomic transactions, guides the implementation and
+makes a general &lsquo;undo&rsquo; mechanism straightforward.
+</span><span style="font-size: 10pt"></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is implemented as two processes connected by a low-bandwidth stream,
+one process handling the display and the other the editing
+algorithms. Therefore it can run with the display process
+in a bitmap terminal and the editor on a local host,
+with both processes on a bitmap-equipped host, or with
+the display process in the terminal and the editor in a
+remote host.
+By suppressing the display process,
+it can even run without a bitmap terminal.
+</span><span style="font-size: 10pt"></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.50in; text-indent: 0.35in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">This paper is reprinted from Software&mdash;Practice and Experience,
+Vol 17, number 11, pp. 813-845, November 1987.
+The paper has not been updated for the Plan 9 manuals. Although
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+has not changed much since the paper was written, the system around it certainly has.
+Nonetheless, the description here still stands as the best introduction to the editor.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.50in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Introduction
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is an interactive text editor that combines cut-and-paste interactive editing with
+an unusual command language based on the composition of regular expressions.
+It is written as two programs: one, the &lsquo;host part,&rsquo; runs on a UNIX system
+and implements the command language and provides file access; the other, the
+&lsquo;terminal part,&rsquo; runs asynchronously
+on a machine with a mouse and bitmap display
+and supports the display and interactive editing.
+The host part may be even run in isolation on an ordinary terminal
+to edit text using the command
+language, much like a traditional line editor,
+without assistance from a mouse or display.
+Most often,
+the terminal part runs on a Blit<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> terminal
+(actually on a Teletype DMD 5620, the production version of the Blit), whose
+host connection is an ordinary 9600 bps RS232 link;
+on the SUN computer the host and display processes run on a single machine,
+connected by a pipe.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+edits uninterpreted
+ASCII text.
+It has no facilities for multiple fonts, graphics or tables,
+unlike MacWrite,<sup></sup></span><sup><span style="font-size: 6pt">2</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> Bravo,<sup></sup></span><sup><span style="font-size: 6pt">3</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> Tioga<sup></sup></span><sup><span style="font-size: 6pt">4</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+or Lara.<sup></sup></span><sup><span style="font-size: 6pt">5</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+Also unlike them, it has a rich command language.
+(Throughout this paper, the phrase
+</span><span style="font-size: 10pt"><i>command language
+</i></span><span style="font-size: 10pt">refers to
+textual commands; commands activated from the mouse form the
+</span><span style="font-size: 10pt"><i>mouse</i></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><i>language.</i></span><span style="font-size: 10pt">)
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+developed as an editor for use by programmers, and tries to join
+the styles of the UNIX text editor
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">6,7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+with that of interactive cut-and-paste editors by
+providing a comfortable mouse-driven interface
+to a program with a solid command language driven by regular expressions.
+The command language developed more than the mouse language, and
+acquired a notation for describing the structure of files
+more richly than as a sequence of lines,
+using a dataflow-like syntax for specifying changes.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The interactive style was influenced by
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+an early cut-and-paste editor for the Blit, and by
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+the Blit window system.
+</span><span style="font-size: 10pt"><tt>Mux</tt></span><span style="font-size: 10pt">
+merges the original Blit window system,
+</span><span style="font-size: 10pt"><tt>mpx</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+with cut-and-paste editing, forming something like a
+multiplexed version of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+that edits the output of (and input to) command sessions rather than files.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The first part of this paper describes the command language, then the mouse
+language, and explains how they interact.
+That is followed by a description of the implementation,
+first of the host part, then of the terminal part.
+A principle that influenced the design of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is that it should have no explicit limits, such as upper limits on
+file size or line length.
+A secondary consideration is that it be efficient.
+To honor these two goals together requires a method for efficiently
+manipulating
+huge strings (files) without breaking them into lines,
+perhaps while making thousands of changes
+under control of the command language.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">&rsquo;s
+method is to
+treat the file as a transaction database, implementing changes as atomic
+updates. These updates may be unwound easily to &lsquo;undo&rsquo; changes.
+Efficiency is achieved through a collection of caches that minimizes
+disc traffic and data motion, both within the two parts of the program
+and between them.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The terminal part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is fairly straightforward.
+More interesting is how the two halves of the editor stay
+synchronized when either half may initiate a change.
+This is achieved through a data structure that organizes the
+communications and is maintained in parallel by both halves.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The last part of the paper chronicles the writing of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+and discusses the lessons that were learned through its development and use.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The paper is long, but is composed largely of two papers of reasonable length:
+a description of the user interface of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+and a discussion of its implementation.
+They are combined because the implementation is strongly influenced by
+the user interface, and vice versa.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>The Interface
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is a text editor for multiple files.
+File names may be provided when it is invoked:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>sam file1 file2 ...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">and there are commands
+to add new files and discard unneeded ones.
+Files are not read until necessary
+to complete some command.
+Editing operations apply to an internal copy
+made when the file is read; the UNIX file associated with the copy
+is changed only by an explicit command.
+To simplify the discussion, the internal copy is here called a
+</span><span style="font-size: 10pt"><i>file</i></span><span style="font-size: 10pt">,
+while the disc-resident original is called a
+</span><span style="font-size: 10pt"><i>disc file.
+</i></span><span style="font-size: 10pt"></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is usually connected to a bitmap display that presents a cut-and-paste
+editor driven by the mouse.
+In this mode, the command language is still available:
+text typed in a special window, called the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><i>window,</i></span><span style="font-size: 10pt">
+is interpreted
+as commands to be executed in the current file.
+Cut-and-paste editing may be used in any window &mdash; even in the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window to construct commands.
+The other mode of operation, invoked by starting
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+with the option
+</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt">
+(for &lsquo;no download&rsquo;),
+does not use the mouse or bitmap display, but still permits
+editing using the textual command language, even on an ordinary terminal,
+interactively or from a script.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The following sections describe first the command language (under
+</span><span style="font-size: 10pt"><tt>sam\fP-d
+and in the
+</tt></span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"><tt>
+window), and then the mouse interface.
+These two languages are nearly independent, but connect through the
+</tt></span><span style="font-size: 10pt"><i>current</i></span><span style="font-size: 10pt"><tt>
+</tt></span><span style="font-size: 10pt"><i>text,</i></span><span style="font-size: 10pt"><tt>
+described below.
+</tt></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>The Command Language
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A file consists of its contents, which are an array of characters
+(that is, a string); the
+</span><span style="font-size: 10pt"><i>name</i></span><span style="font-size: 10pt">
+of the associated disc file; the
+</span><span style="font-size: 10pt"><i>modified bit
+</i></span><span style="font-size: 10pt">that states whether the contents match those of
+the disc file;
+and a substring of the contents, called the
+</span><span style="font-size: 10pt"><i>current text
+</i></span><span style="font-size: 10pt">or
+</span><span style="font-size: 10pt"><i>dot</i></span><span style="font-size: 10pt">
+(see Figures 1 and 2).
+If the current text is a null string, dot falls between characters.
+The
+</span><span style="font-size: 10pt"><i>value</i></span><span style="font-size: 10pt">
+of dot is the location of the current text; the
+</span><span style="font-size: 10pt"><i>contents</i></span><span style="font-size: 10pt">
+of dot are the characters it contains.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+imparts to the text no two-dimensional interpretation such as columns
+or fields; text is always one-dimensional.
+Even the idea of a &lsquo;line&rsquo; of text as understood by most UNIX programs
+&mdash; a sequence of characters terminated by a newline character &mdash;
+is only weakly supported.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><i>current file
+</i></span><span style="font-size: 10pt">is the file to which editing commands refer.
+The current text is therefore dot in the current file.
+If a command doesn&rsquo;t explicitly name a particular file or piece of text,
+the command is assumed to apply to the current text.
+For the moment, ignore the presence of multiple files and consider
+editing a single file.
+</span><span style="font-size: 10pt"></span></p><center><img src="fig1.gif" /></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 1. A typical
+</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i>
+screen, with the editing menu presented.
+The
+</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i>
+(command language) window is in the middle, with file windows above and below.
+(The user interface makes it easy to create these abutting windows.)
+The partially obscured window is a third file window.
+The uppermost window is that to which typing and mouse operations apply,
+as indicated by its heavy border.
+Each window has its current text highlighted in reverse video.
+The
+</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i>
+window&rsquo;s current text is the null string on the last visible line,
+indicated by a vertical bar.
+See also Figure 2.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Commands have one-letter names.
+Except for non-editing commands such as writing
+the file to disc, most commands make some change
+to the text in dot and leave dot set to the text resulting from the change.
+For example, the delete command,
+</span><span style="font-size: 10pt"><tt>d</tt></span><span style="font-size: 10pt">,
+deletes the text in dot, replacing it by the null string and setting dot
+to the result.
+The change command,
+</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt">,
+replaces dot by text delimited by an arbitrary punctuation character,
+conventionally
+a slash. Thus,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>c/Peter/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces the text in dot by the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">.
+Similarly,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>a/Peter/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(append) adds the string after dot, and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>i/Peter/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(insert) inserts before dot.
+All three leave dot set to the new text,
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Newlines are part of the syntax of commands:
+the newline character lexically terminates a command.
+Within the inserted text, however, newlines are never implicit.
+But since it is often convenient to insert multiple lines of text,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+has a special
+syntax for that case:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>a</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>some lines of text</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>to be inserted in the file,</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>terminated by a period</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>on a line by itself</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>.</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">In the one-line syntax, a newline character may be specified by a C-like
+escape, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>c/\n/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces dot by a single newline character.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+also has a substitute command,
+</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>s/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/</tt></span><span style="font-size: 9pt"><i>replacement</i></span><span style="font-size: 9pt"><tt>/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">substitutes the replacement text for the first match, in dot,
+of the regular expression.
+Thus, if dot is the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+the command
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>s/t/st/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">changes it to
+</span><span style="font-size: 10pt"><tt>Pester</tt></span><span style="font-size: 10pt">.
+In general,
+</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">
+is unnecessary, but it was inherited from
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+and it has some convenient variations.
+For instance, the replacement text may include the matched text,
+specified by
+</span><span style="font-size: 10pt"><tt>&amp;</tt></span><span style="font-size: 10pt">:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>s/Peter/Oh, &amp;, &amp;, &amp;, &amp;!/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are also three commands that apply programs
+to text:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>&lt; </tt></span><span style="font-size: 9pt"><i>UNIX program</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces dot by the output of the UNIX program.
+Similarly, the
+</span><span style="font-size: 10pt"><tt>&gt;</tt></span><span style="font-size: 10pt">
+command
+runs the program with dot as its standard input, and
+</span><span style="font-size: 10pt"><tt>|</tt></span><span style="font-size: 10pt">
+does both. For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>| sort</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces dot by the result of applying the standard sorting utility to it.
+Again, newlines have no special significance for these
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+commands.
+The text acted upon and resulting from these commands is not necessarily
+bounded by newlines, although for connection with UNIX programs,
+newlines may be necessary to obey conventions.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">One more command:
+</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt">
+prints the contents of dot.
+Table I summarizes
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+commands.
+</span><span style="font-size: 10pt"></span></p><center><img src="sam0.png"></center>
+</center>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The value of dot may be changed by
+specifying an
+</span><span style="font-size: 10pt"><i>address</i></span><span style="font-size: 10pt">
+for the command.
+The simplest address is a line number:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>3</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">refers to the third line of the file, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>3d</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">deletes the third line of the file, and implicitly renumbers
+the lines so the old line 4 is now numbered 3.
+(This is one of the few places where
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+deals with lines directly.)
+Line
+</span><span style="font-size: 10pt"><tt>0</tt></span><span style="font-size: 10pt">
+is the null string at the beginning of the file.
+If a command consists of only an address, a
+</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt">
+command is assumed, so typing an unadorned
+</span><span style="font-size: 10pt"><tt>3</tt></span><span style="font-size: 10pt">
+prints line 3 on the terminal.
+There are a couple of other basic addresses:
+a period addresses dot itself; and
+a dollar sign
+(</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt">)
+addresses the null string at the end of the file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">An address is always a single substring of the file.
+Thus, the address
+</span><span style="font-size: 10pt"><tt>3</tt></span><span style="font-size: 10pt">
+addresses the characters
+after the second newline of
+the file through the third newline of the file.
+A
+</span><span style="font-size: 10pt"><i>compound address
+</i></span><span style="font-size: 10pt">is constructed by the comma operator
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><i>address1</i></span><span style="font-size: 9pt"><tt>,</tt></span><span style="font-size: 9pt"><i>address2</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">and addresses the substring of the file from the beginning of
+</span><span style="font-size: 10pt"><i>address1</i></span><span style="font-size: 10pt">
+to the end of
+</span><span style="font-size: 10pt"><i>address2</i></span><span style="font-size: 10pt">.
+For example, the command
+</span><span style="font-size: 10pt"><tt>3,5p</tt></span><span style="font-size: 10pt">
+prints the third through fifth lines of the file and
+</span><span style="font-size: 10pt"><tt>.,$d</tt></span><span style="font-size: 10pt">
+deletes the text from the beginning of dot to the end of the file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">These addresses are all absolute positions in the file, but
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+also has relative addresses, indicated by
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">.
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>$-3</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is the third line before the end of the file and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>.+1</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is the line after dot.
+If no address appears to the left of the
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">,
+dot is assumed;
+if nothing appears to the right,
+</span><span style="font-size: 10pt"><tt>1</tt></span><span style="font-size: 10pt">
+is assumed.
+Therefore,
+</span><span style="font-size: 10pt"><tt>.+1</tt></span><span style="font-size: 10pt">
+may be abbreviated to just a plus sign.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+operator acts relative to the end of its first argument, while the
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">
+operator acts relative to the beginning. Thus
+</span><span style="font-size: 10pt"><tt>.+1</tt></span><span style="font-size: 10pt">
+addresses the first line after dot,
+</span><span style="font-size: 10pt"><tt>.-</tt></span><span style="font-size: 10pt">
+addresses the first line before dot, and
+</span><span style="font-size: 10pt"><tt>+-</tt></span><span style="font-size: 10pt">
+refers to the line containing the end of dot. (Dot may span multiple lines, and
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+selects the line after the end of dot, then
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">
+backs up one line.)
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The final type of address is a regular expression, which addresses the
+text matched by the expression. The expression is enclosed in slashes, as in
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The expressions are the same as those in the UNIX program
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">6,7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+and include closures, alternations, and so on.
+They find the
+</span><span style="font-size: 10pt"><i>leftmost longest
+</i></span><span style="font-size: 10pt">string that matches the expression, that is,
+the first match after the point where the search is started,
+and if more than one match begins at the same spot, the longest such match.
+(I assume familiarity with the syntax for regular expressions in UNIX programs.<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">)
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/x/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">matches the next
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+character in the file,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/xx*/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">matches the next run of one or more
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">&rsquo;s,
+and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/x|Peter/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">matches the next
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">.
+For compatibility with other UNIX programs, the &lsquo;any character&rsquo; operator,
+a period,
+does not match a newline, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>/.*/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">matches the text from dot to the end of the line, but excludes the newline
+and so will not match across
+the line boundary.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Regular expressions are always relative addresses.
+The direction is forwards by default,
+so
+</span><span style="font-size: 10pt"><tt>/Peter/</tt></span><span style="font-size: 10pt">
+is really an abbreviation for
+</span><span style="font-size: 10pt"><tt>+/Peter/</tt></span><span style="font-size: 10pt">.
+The search can be reversed with a minus sign, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt></tt></span><span style="font-size: 9pt"><tt>-/Peter/</tt></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">finds the first
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">
+before dot.
+Regular expressions may be used with other address forms, so
+</span><span style="font-size: 10pt"><tt>0+/Peter/</tt></span><span style="font-size: 10pt">
+finds the first
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">
+in the file and
+</span><span style="font-size: 10pt"><tt>$-/Peter/</tt></span><span style="font-size: 10pt">
+finds the last.
+Table II summarizes
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+addresses.
+</span><span style="font-size: 10pt"></span></p><center><img src="sam1.png"></center>
+</center>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The language discussed so far will not seem novel
+to people who use UNIX text editors
+such as
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">.<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+Moreover, the kinds of editing operations these commands allow, with the exception
+of regular expressions and line numbers,
+are clearly more conveniently handled by a mouse-based interface.
+Indeed,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+mouse language (discussed at length below) is the means by which
+simple changes are usually made.
+For large or repetitive changes, however, a textual language
+outperforms a manual interface.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Imagine that, instead of deleting just one occurrence of the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+we wanted to eliminate every
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">.
+What&rsquo;s needed is an iterator that runs a command for each occurrence of some
+text.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">&rsquo;s
+iterator is called
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">,
+for extract:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>x/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">finds all matches in dot of the specified expression, and for each
+such match, sets dot to the text matched and runs the command.
+So to delete all the
+</span><span style="font-size: 10pt"><tt>Peters:</tt></span><span style="font-size: 10pt">
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>0,$ x/Peter/ d</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(Blanks in these examples are to improve readability;
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+neither requires nor interprets them.)
+This searches the entire file
+(</span><span style="font-size: 10pt"><tt>0,$</tt></span><span style="font-size: 10pt">)
+for occurrences of the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+and runs the
+</span><span style="font-size: 10pt"><tt>d</tt></span><span style="font-size: 10pt">
+command with dot set to each such occurrence.
+(By contrast, the comparable
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+command would delete all
+</span><span style="font-size: 10pt"><i>lines</i></span><span style="font-size: 10pt">
+containing
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">;
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+deletes only the
+</span><span style="font-size: 10pt"><tt>Peters</tt></span><span style="font-size: 10pt">.)
+The address
+</span><span style="font-size: 10pt"><tt>0,$</tt></span><span style="font-size: 10pt">
+is commonly used, and may be abbreviated to just a comma.
+As another example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/Peter/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">prints a list of
+</span><span style="font-size: 10pt"><tt>Peters,</tt></span><span style="font-size: 10pt">
+one for each appearance in the file, with no intervening text (not even newlines
+to separate the instances).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Of course, the text extracted by
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+may be selected by a regular expression,
+which complicates deciding what set of matches is chosen &mdash;
+matches may overlap. This is resolved by generating the matches
+starting from the beginning of dot using the leftmost-longest rule,
+and searching for each match starting from the end of the previous one.
+Regular expressions may also match null strings, but a null match
+adjacent to a non-null match is never selected; at least one character
+must intervene.
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, c/AAA/</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>x/B*/ c/-/</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">produces as output
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>-A-A-A-</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">because the pattern
+</span><span style="font-size: 10pt"><tt>B*</tt></span><span style="font-size: 10pt">
+matches the null strings separating the
+</span><span style="font-size: 10pt"><tt>A</tt></span><span style="font-size: 10pt">&rsquo;s.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command has a complement,
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">,
+with similar syntax, that executes the command with dot set to the text
+</span><span style="font-size: 10pt"><i>between</i></span><span style="font-size: 10pt">
+the matches of the expression.
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, c/AAA/</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>y/A/ c/-/</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">produces the same result as the example above.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">
+commands are looping constructs, and
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+has a pair of conditional commands to go with them.
+They have similar syntax:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>g/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(guard)
+runs the command exactly once if dot contains a match of the expression.
+This is different from
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">,
+which runs the command for
+</span><span style="font-size: 10pt"><i>each</i></span><span style="font-size: 10pt">
+match:
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+loops;
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+merely tests, without changing the value of dot.
+Thus,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/Peter/ d</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">deletes all occurrences of
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+but
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, g/Peter/ d</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">deletes the whole file (reduces it to a null string) if
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">
+occurs anywhere in the text.
+The complementary conditional is
+</span><span style="font-size: 10pt"><tt>v</tt></span><span style="font-size: 10pt">,
+which runs the command if there is
+</span><span style="font-size: 10pt"><i>no</i></span><span style="font-size: 10pt">
+match of the expression.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">These control-structure-like commands may be composed to construct more
+involved operations. For example, to print those lines of text that
+contain the string
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/.*\n/ g/Peter/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+breaks the file into lines, the
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+selects those lines containing
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">,
+and the
+</span><span style="font-size: 10pt"><tt>p</tt></span><span style="font-size: 10pt">
+prints them.
+This command gives an address for the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command (the whole file), but because
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+does not have an explicit address, it applies to the value of
+dot produced by the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command, that is, to each line.
+All commands in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+except for the command to write a file to disc use dot for the
+default address.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Composition may be continued indefinitely.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/.*\n/ g/Peter/ v/SaltPeter/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">prints those lines containing
+</span><span style="font-size: 10pt"><tt>Peter</tt></span><span style="font-size: 10pt">
+but
+</span><span style="font-size: 10pt"><i>not</i></span><span style="font-size: 10pt">
+those containing
+</span><span style="font-size: 10pt"><tt>SaltPeter</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Structural Regular Expressions
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Unlike other UNIX text editors,
+including the non-interactive ones such as
+</span><span style="font-size: 10pt"><tt>sed</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>awk</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is good for manipulating files with multi-line &lsquo;records.&rsquo;
+An example is an on-line phone book composed of records,
+separated by blank lines, of the form
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Herbert Tic</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>44 Turnip Ave., Endive, NJ</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>201-5555642</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.15in"></p>
+
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Norbert Twinge</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>16 Potato St., Cabbagetown, NJ</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>201-5553145</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.15in"></p>
+
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The format may be encoded as a regular expression:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>(.+\n)+</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">that is, a sequence of one or more non-blank lines.
+The command to print Mr. Tic&rsquo;s entire record is then
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/(.+\n)+/ g/^Herbert Tic$/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">and that to extract just the phone number is
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/(.+\n)+/ g/^Herbert Tic$/ x/^[0-9]*-[0-9]*\n/ p</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The latter command breaks the file into records,
+chooses Mr. Tic&rsquo;s record,
+extracts the phone number from the record,
+and finally prints the number.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A more involved problem is that of
+renaming a particular variable, say
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">,
+to
+</span><span style="font-size: 10pt"><tt>num</tt></span><span style="font-size: 10pt">
+in a C program.
+The obvious first attempt,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/n/ c/num/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is badly flawed: it changes not only the variable
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">
+but any letter
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">
+that appears.
+We need to extract all the variables, and select those that match
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">
+and only
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The pattern
+</span><span style="font-size: 10pt"><tt>[A-Za-z_][A-Za-z_0-9]*</tt></span><span style="font-size: 10pt">
+matches C identifiers.
+Next
+</span><span style="font-size: 10pt"><tt>g/n/</tt></span><span style="font-size: 10pt">
+selects those containing an
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">.
+Then
+</span><span style="font-size: 10pt"><tt>v/../</tt></span><span style="font-size: 10pt">
+rejects those containing two (or more) characters, and finally
+</span><span style="font-size: 10pt"><tt>c/num/</tt></span><span style="font-size: 10pt">
+changes the remainder (identifiers
+</span><span style="font-size: 10pt"><tt>n</tt></span><span style="font-size: 10pt">)
+to
+</span><span style="font-size: 10pt"><tt>num</tt></span><span style="font-size: 10pt">.
+This version clearly works much better, but there may still be problems.
+For example, in C character and string constants, the sequence
+</span><span style="font-size: 10pt"><tt>\n</tt></span><span style="font-size: 10pt">
+is interpreted as a newline character, and we don&rsquo;t want to change it to
+</span><span style="font-size: 10pt"><tt>\num.</tt></span><span style="font-size: 10pt">
+This problem can be forestalled with a
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">
+command:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>, y/\\n/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(the second
+</span><span style="font-size: 10pt"><tt>\</tt></span><span style="font-size: 10pt">
+is necessary because of lexical conventions in regular expressions),
+or we could even reject character constants and strings outright:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>,y/&rsquo;[^&rsquo;]*&rsquo;/ y/"[^"]*"/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">
+commands in this version exclude from consideration all character constants
+and strings.
+The only remaining problem is to deal with the possible occurrence of
+</span><span style="font-size: 10pt"><tt>\&rsquo;</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>\"</tt></span><span style="font-size: 10pt">
+within these sequences, but it&rsquo;s easy to see how to resolve this difficulty.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The point of these composed commands is successive refinement.
+A simple version of the command is tried, and if it&rsquo;s not good enough,
+it can be honed by adding a clause or two.
+(Mistakes can be undone; see below.
+Also, the mouse language makes it unnecessary to retype the command each time.)
+The resulting chains of commands are somewhat reminiscent of
+shell pipelines.<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+Unlike pipelines, though, which pass along modified
+</span><span style="font-size: 10pt"><i>data</i></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+commands pass a
+</span><span style="font-size: 10pt"><i>view</i></span><span style="font-size: 10pt">
+of the data.
+The text at each step of the command is the same, but which pieces
+are selected is refined step by step until the correct piece is
+available to the final step of the command line, which ultimately makes the change.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">In other UNIX programs, regular expressions are used only for selection,
+as in the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+command, never for extraction as in the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>y</tt></span><span style="font-size: 10pt">
+command.
+For example, patterns in
+</span><span style="font-size: 10pt"><tt>awk</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+are used to select lines to be operated on, but cannot be used
+to describe the format of the input text, or to handle newline-free text.
+The use of regular expressions to describe the structure of a piece
+of text rather than its contents, as in the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command,
+has been given a name:
+</span><span style="font-size: 10pt"><i>structural regular expressions.
+</i></span><span style="font-size: 10pt">When they are composed, as in the above example,
+they are pleasantly expressive.
+Their use is discussed at greater length elsewhere.<sup></sup></span><sup><span style="font-size: 6pt">10</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Multiple files
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+has a few other commands, mostly relating to input and output.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>e discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces the contents and name of the current file with those of the named
+disc file;
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>w discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">writes the contents to the named disc file; and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>r discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">replaces dot with the contents of the named disc file.
+All these commands use the current file&rsquo;s name if none is specified.
+Finally,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>f discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">changes the name associated with the file and displays the result:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>&rsquo;-. discfilename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">This output is called the file&rsquo;s
+</span><span style="font-size: 10pt"><i>menu line,
+</i></span><span style="font-size: 10pt">because it is the contents of the file&rsquo;s line in the button 3 menu (described
+in the
+next section).
+The first three characters are a concise notation for the state of the file.
+The apostrophe signifies that the file is modified.
+The minus sign indicates the number of windows
+open on the file (see the next section):
+</span><span style="font-size: 10pt"><tt>-</tt></span><span style="font-size: 10pt">
+means none,
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+means one, and
+</span><span style="font-size: 10pt"><tt>*</tt></span><span style="font-size: 10pt">
+means more than one.
+Finally, the period indicates that this is the current file.
+These characters are useful for controlling the
+</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt">
+command, described shortly.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+may be started with a set of disc files (such as all the source for
+a program) by invoking it with a list of file names as arguments, and
+more may be added or deleted on demand.
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>B discfile1 discfile2 ...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">adds the named files to
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+list, and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>D discfile1 discfile2 ...</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">removes them from
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+memory (without effect on associated disc files).
+Both these commands have a syntax for using the shell<sup></sup></span><sup><span style="font-size: 6pt">7</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+(the UNIX command interpreter) to generate the lists:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>B &lt;echo *.c</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">will add all C source files, and
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>B &lt;grep -l variable *.c</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">will add all C source files referencing a particular variable
+(the UNIX command
+</span><span style="font-size: 10pt"><tt>grep\fP-l
+lists all files in its arguments that contain matches of
+the specified regular expression).
+Finally,
+</tt></span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt"><tt>
+without arguments deletes the current file.
+</tt></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are two ways to change which file is current:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>b filename</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">makes the named file current.
+The
+</span><span style="font-size: 10pt"><tt>B</tt></span><span style="font-size: 10pt">
+command
+does the same, but also adds any new files to
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+list.
+(In practice, of course, the current file
+is usually chosen by mouse actions, not by textual commands.)
+The other way is to use a form of address that refers to files:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>"</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>" </tt></span><span style="font-size: 9pt"><i>address</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">refers to the address evaluated in the file whose menu line
+matches the expression (there must be exactly one match).
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>"peter.c" 3</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">refers to the third line of the file whose name matches
+</span><span style="font-size: 10pt"><tt>peter.c</tt></span><span style="font-size: 10pt">.
+This is most useful in the move
+(</span><span style="font-size: 10pt"><tt>m</tt></span><span style="font-size: 10pt">)
+and copy
+(</span><span style="font-size: 10pt"><tt>t</tt></span><span style="font-size: 10pt">)
+commands:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>0,$ t "peter.c" 0</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">makes a copy of the current file at the beginning of
+</span><span style="font-size: 10pt"><tt>peter.c</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt">
+command
+is a looping construct, like
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">,
+that refers to files instead of strings:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>X/</tt></span><span style="font-size: 9pt"><i>expression</i></span><span style="font-size: 9pt"><tt>/ </tt></span><span style="font-size: 9pt"><i>command</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">runs the command in all
+files whose menu lines match the expression. The best example is
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>X/&rsquo;/ w</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">which writes to disc all modified files.
+</span><span style="font-size: 10pt"><tt>Y</tt></span><span style="font-size: 10pt">
+is the complement of
+</span><span style="font-size: 10pt"><tt>X</tt></span><span style="font-size: 10pt">:
+it runs the command on all files whose menu lines don&rsquo;t match the expression:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Y/\.c/ D</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">deletes all files that don&rsquo;t have
+</span><span style="font-size: 10pt"><tt>.c</tt></span><span style="font-size: 10pt">
+in their names, that is, it keeps all C source files and deletes the rest.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Braces allow commands to be grouped, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    </tt></span><span style="font-size: 9pt"><i>command1</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    </tt></span><span style="font-size: 9pt"><i>command2</i></span><span style="font-size: 9pt"><tt></tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is syntactically a single command that runs two commands.
+Thus,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>X/\.c/ ,g/variable/ {</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    f</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    , x/.*\n/ g/variable/ p</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">finds all occurrences of
+</span><span style="font-size: 10pt"><tt>variable</tt></span><span style="font-size: 10pt">
+in C source files, and prints
+out the file names and lines of each match.
+The precise semantics of compound operations is discussed in the implementation
+sections below.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Finally,
+the undo command,
+</span><span style="font-size: 10pt"><tt>u</tt></span><span style="font-size: 10pt">,
+undoes the last command,
+no matter how many files were affected.
+Multiple undo operations move further back in time, so
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>u</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>u</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(which may be abbreviated
+</span><span style="font-size: 10pt"><tt>u2</tt></span><span style="font-size: 10pt">)
+undoes the last two commands. An undo may not be undone, however, nor
+may any command that adds or deletes files.
+Everything else is undoable, though, including for example
+</span><span style="font-size: 10pt"><tt>e</tt></span><span style="font-size: 10pt">
+commands:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>e filename</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>u</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">restores the state of the file completely, including its name, dot,
+and modified bit. Because of the undo, potentially dangerous commands
+are not guarded by confirmations. Only
+</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt">,
+which destroys the information necessary to restore itself, is protected.
+It will not delete a modified file, but a second
+</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt">
+of the same file will succeed regardless.
+The
+</span><span style="font-size: 10pt"><tt>q</tt></span><span style="font-size: 10pt">
+command, which exits
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">,
+is similarly guarded.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Mouse Interface
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is most commonly run
+connected to a bitmap display and mouse for interactive editing.
+The only difference in the command language
+between regular, mouse-driven
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>sam\fP-d
+is that if an address
+is provided without a command,
+</tt></span><span style="font-size: 10pt"><tt>sam\fP-d
+will print the text referenced by the address, but
+regular
+</tt></span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt"><tt>
+will highlight it on the screen &mdash; in fact,
+dot is always highlighted (see Figure 2).
+</tt></span><span style="font-size: 10pt"></span></p><center><img src="fig3.gif" /></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 2. A
+</i></span><span style="font-size: 8pt"><tt>sam</tt></span><span style="font-size: 8pt"><i>
+window. The scroll bar down the left
+represents the file, with the bubble showing the fraction
+visible in the window.
+The scroll bar may be manipulated by the mouse for convenient browsing.
+The current text,
+which is highlighted, need not fit on a line. Here it consists of one partial
+line, one complete line, and final partial line.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Each file may have zero or more windows open on the display.
+At any time, only one window in all of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is the
+</span><span style="font-size: 10pt"><i>current window,
+</i></span><span style="font-size: 10pt">that is, the window to which typing and mouse actions refer;
+this may be the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window (that in which commands may be typed)
+or one of the file windows.
+When a file has multiple windows, the image of the file in each window
+is always kept up to date.
+The current file is the last file affected by a command,
+so if the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window is current,
+the current window is not a window on the current file.
+However, each window on a file has its own value of dot,
+and when switching between windows on a single file,
+the file&rsquo;s value of dot is changed to that of the window.
+Thus, flipping between windows behaves in the obvious, convenient way.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The mouse on the Blit has three buttons, numbered left to right.
+Button 3 has a list of commands to manipulate windows,
+followed by a list of &lsquo;menu lines&rsquo; exactly as printed by the
+</span><span style="font-size: 10pt"><tt>f</tt></span><span style="font-size: 10pt">
+command, one per file (not one per window).
+These menu lines are sorted by file name.
+If the list is long, the Blit menu software will make it more manageable
+by generating a scrolling menu instead of an unwieldy long list.
+Using the menu to select a file from the list makes that file the current
+file, and the most recently current window in that file the current window.
+But if that file is already current, selecting it in the menu cycles through
+the windows on the file; this simple trick avoids a special menu to
+choose windows on a file.
+If there is no window open on the file,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+changes the mouse cursor to prompt the user to create one.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The commands on the button 3 menu are straightforward (see Figure 3), and
+are like the commands to manipulate windows in
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+the Blit&rsquo;s window system.
+</span><span style="font-size: 10pt"><tt>New</tt></span><span style="font-size: 10pt">
+makes a new file, and gives it one empty window, whose size is determined
+by a rectangle swept by the mouse.
+</span><span style="font-size: 10pt"><tt>Zerox</tt></span><span style="font-size: 10pt">
+prompts for a window to be selected, and
+makes a clone of that window; this is how multiple windows are created on one file.
+</span><span style="font-size: 10pt"><tt>Reshape</tt></span><span style="font-size: 10pt">
+changes the size of the indicated window, and
+</span><span style="font-size: 10pt"><tt>close</tt></span><span style="font-size: 10pt">
+deletes it. If that is the last window open on the file,
+</span><span style="font-size: 10pt"><tt>close</tt></span><span style="font-size: 10pt">
+first does a
+</span><span style="font-size: 10pt"><tt>D</tt></span><span style="font-size: 10pt">
+command on the file.
+</span><span style="font-size: 10pt"><tt>Write</tt></span><span style="font-size: 10pt">
+is identical to a
+</span><span style="font-size: 10pt"><tt>w</tt></span><span style="font-size: 10pt">
+command on the file; it is in the menu purely for convenience.
+Finally,
+</span><span style="font-size: 10pt"><tt>~~sam~~</tt></span><span style="font-size: 10pt">
+is a menu item that appears between the commands and the file names.
+Selecting it makes the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window the current window,
+causing subsequent typing to be interpreted as commands.
+</span><span style="font-size: 10pt"></span></p><center><img src="fig2.gif" /></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 3. The menu on button 3.
+The black rectangle on the left is a scroll bar; the menu is limited to
+the length shown to prevent its becoming unwieldy.
+Above the
+</i></span><span style="font-size: 8pt"><tt>~~sam~~</tt></span><span style="font-size: 8pt"><i>
+line is a list of commands;
+beneath it is a list of files, presented exactly as with the
+</i></span><span style="font-size: 8pt"><tt>f</tt></span><span style="font-size: 8pt"><i>
+command.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">When
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+requests that a window be swept, in response to
+</span><span style="font-size: 10pt"><tt>new</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>zerox</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>reshape</tt></span><span style="font-size: 10pt">,
+it changes the mouse cursor from the usual arrow to a box with
+a small arrow.
+In this state, the mouse may be used to indicate an arbitrary rectangle by
+pressing button 3 at one corner and releasing it at the opposite corner.
+More conveniently,
+button 3 may simply be clicked,
+whereupon
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+creates the maximal rectangle that contains the cursor
+and abuts the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window.
+By placing the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window in the middle of the screen, the user can define two regions (one above,
+one below) in which stacked fully-overlapping
+windows can be created with minimal fuss (see Figure 1).
+This simple user interface trick makes window creation noticeably easier.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The cut-and-paste editor is essentially the same as that in Smalltalk-80.<sup></sup></span><sup><span style="font-size: 6pt">11</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+The text in dot is always highlighted on the screen.
+When a character is typed it replaces dot, and sets dot to the null
+string after the character. Thus, ordinary typing inserts text.
+Button 1 is used for selection:
+pressing the button, moving the mouse, and lifting the button
+selects (sets dot to) the text between the points where the
+button was pressed and released.
+Pressing and releasing at the same point selects a null string; this
+is called clicking. Clicking twice quickly, or
+</span><span style="font-size: 10pt"><i>double clicking,
+</i></span><span style="font-size: 10pt">selects larger objects;
+for example, double clicking in a word selects the word,
+double clicking just inside an opening bracket selects the text
+contained in the brackets (handling nested brackets correctly),
+and similarly for
+parentheses, quotes, and so on.
+The double-clicking rules reflect a bias toward
+programmers.
+If
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+were intended more for word processing, double-clicks would probably
+select linguistic structures such as sentences.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">If button 1 is pressed outside the current window, it makes the indicated
+window current.
+This is the easiest way to switch between windows and files.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Pressing button 2 brings up a menu of editing functions (see Figure 4).
+These mostly apply to the selected text:
+</span><span style="font-size: 10pt"><tt>cut</tt></span><span style="font-size: 10pt">
+deletes the selected text, and remembers it in a hidden buffer called the
+</span><span style="font-size: 10pt"><i>snarf buffer,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>paste</tt></span><span style="font-size: 10pt">
+replaces the selected text by the contents of the snarf buffer,
+</span><span style="font-size: 10pt"><tt>snarf</tt></span><span style="font-size: 10pt">
+just copies the selected text to the snarf buffer,
+</span><span style="font-size: 10pt"><tt>look</tt></span><span style="font-size: 10pt">
+searches forward for the next literal occurrence of the selected text, and
+</span><span style="font-size: 10pt"><tt>&lt;mux&gt;</tt></span><span style="font-size: 10pt">
+exchanges snarf buffers with the window system in which
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is running.
+Finally, the last regular expression used appears as a menu entry
+to search
+forward for the next occurrence of a match for the expression.
+</span><span style="font-size: 10pt"></span></p><center><img src="fig4.gif" /></center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 4. The menu on button 2.
+The bottom entry tracks the most recently used regular expression, which may
+be literal text.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The relationship between the command language and the mouse language is
+entirely due to the equality of dot and the selected text chosen
+with button 1 on the mouse.
+For example, to make a set of changes in a C subroutine, dot can be
+set by double clicking on the left brace that begins the subroutine,
+which sets dot for the command language.
+An address-free command then typed in the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window will apply only to the text between the opening and closing
+braces of the function.
+The idea is to select what you want, and then say what you want
+to do with it, whether invoked by a menu selection or by a typed command.
+And of course, the value of dot is highlighted on
+the display after the command completes.
+This relationship between mouse interface and command language
+is clumsy to explain, but comfortable, even natural, in practice.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>The Implementation
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The next few sections describe how
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is put together, first the host part,
+then the inter-component communication,
+then the terminal part.
+After explaining how the command language is implemented,
+the discussion follows (roughly) the path of a character
+from the temporary file on disc to the screen.
+The presentation centers on the data structures,
+because that is how the program was designed and because
+the algorithms are easy to provide, given the right data
+structures.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Parsing and execution
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The command language is interpreted by parsing each command with a
+table-driven recursive
+descent parser, and when a complete command is assembled, invoking a top-down
+executor.
+Most editors instead employ a simple character-at-a-time
+lexical scanner.
+Use of a parser makes it
+easy and unambiguous to detect when a command is complete,
+which has two advantages.
+First, escape conventions such as backslashes to quote
+multiple-line commands are unnecessary; if the command isn&rsquo;t finished,
+the parser keeps reading. For example, a multiple-line append driven by an
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command is straightforward:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>x/.*\n/ g/Peter/ a</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>one line about Peter</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>another line about Peter</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>.</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Other UNIX editors would require a backslash after all but the last line.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The other advantage is specific to the two-process structure of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+The host process must decide when a command is completed so the
+command interpreter can be called. This problem is easily resolved
+by having the lexical analyzer read the single stream of events from the
+terminal, directly executing all typing and mouse commands,
+but passing to the parser characters typed to the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+command window.
+This scheme is slightly complicated by the availability of cut-and-paste
+editing in the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window, but that difficulty is resolved by applying the rules
+used in
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">:
+when a newline is typed to the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window, all text between the newline and the previously typed newline
+is made available to the parser.
+This permits arbitrary editing to be done to a command before
+typing newline and thereby requesting execution.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The parser is driven by a table because the syntax of addresses
+and commands is regular enough
+to be encoded compactly. There are few special cases, such as the
+replacement text in a substitution, so the syntax of almost all commands
+can be encoded with a few flags.
+These include whether the command allows an address (for example,
+</span><span style="font-size: 10pt"><tt>e</tt></span><span style="font-size: 10pt">
+does not), whether it takes a regular expression (as in
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">),
+whether it takes replacement text (as in
+</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt">
+or
+</span><span style="font-size: 10pt"><tt>i</tt></span><span style="font-size: 10pt">),
+which may be multi-line, and so on.
+The internal syntax of regular expressions is handled by a separate
+parser; a regular expression is a leaf of the command parse tree.
+Regular expressions are discussed fully in the next section.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The parser table also has information about defaults, so the interpreter
+is always called with a complete tree. For example, the parser fills in
+the implicit
+</span><span style="font-size: 10pt"><tt>0</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt">
+in the abbreviated address
+</span><span style="font-size: 10pt"><tt>,</tt></span><span style="font-size: 10pt">
+(comma),
+inserts a
+</span><span style="font-size: 10pt"><tt>+</tt></span><span style="font-size: 10pt">
+to the left of an unadorned regular expression in an address,
+and provides the usual default address
+</span><span style="font-size: 10pt"><tt>.</tt></span><span style="font-size: 10pt">
+(dot) for commands that expect an address but are not given one.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Once a complete command is parsed, the evaluation is easy.
+The address is evaluated left-to-right starting from the value of dot,
+with a mostly ordinary expression evaluator.
+Addresses, like many of the data structures in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">,
+are held in a C structure and passed around by value:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>typedef long Posn;    /* Position in a file */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>typedef struct Range{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        Posn    p1, p2;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}Range;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>typedef struct Address{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        Range   r;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        File    *f;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}Address;</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">An address is encoded as a substring (character positions
+</span><span style="font-size: 10pt"><tt>p1</tt></span><span style="font-size: 10pt">
+to
+</span><span style="font-size: 10pt"><tt>p2</tt></span><span style="font-size: 10pt">)
+in a file
+</span><span style="font-size: 10pt"><tt>f</tt></span><span style="font-size: 10pt">.
+(The data type
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+is described in detail below.)
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The address interpreter is an
+</span><span style="font-size: 10pt"><tt>Address</tt></span><span style="font-size: 10pt">-valued
+function that traverses the parse tree describing an address (the
+parse tree for the address has type
+</span><span style="font-size: 10pt"><tt>Addrtree</tt></span><span style="font-size: 10pt">):
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>Address</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>address(ap, a, sign)</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Addrtree *ap;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Address a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    int sign;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Address a2;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    do</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        switch(ap-&gt;type){</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        case &rsquo;.&rsquo;:</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a=a.f-&gt;dot;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            break;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        case &rsquo;$&rsquo;:</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a.r.p1=a.r.p2=a.f-&gt;nbytes;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            break;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        case &rsquo;"&rsquo;:   </tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a=matchfile(a, ap-&gt;aregexp)-&gt;dot; </tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            break;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        case &rsquo;,&rsquo;:</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a2=address(ap-&gt;right, a, 0);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a=address(ap-&gt;left, a, 0);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            if(a.f!=a2.f || a2.r.p2&lt;a.r.p1)</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>                error(Eorder);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            a.r.p2=a2.r.p2;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>            return a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        /* and so on */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        }</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    while((ap=ap-&gt;right)!=0);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    return a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Throughout, errors are handled by a non-local
+</span><span style="font-size: 10pt"><tt>goto</tt></span><span style="font-size: 10pt">
+(a
+</span><span style="font-size: 10pt"><tt>setjmp/longjmp</tt></span><span style="font-size: 10pt">
+in C terminology)
+hidden in a routine called
+</span><span style="font-size: 10pt"><tt>error</tt></span><span style="font-size: 10pt">
+that immediately aborts the execution, retracts any
+partially made changes (see the section below on &lsquo;undoing&rsquo;), and
+returns to the top level of the parser.
+The argument to
+</span><span style="font-size: 10pt"><tt>error</tt></span><span style="font-size: 10pt">
+is an enumeration type that
+is translated to a terse but possibly helpful
+message such as &lsquo;?addresses out of order.&rsquo;
+Very common messages are kept short; for example the message for
+a failed regular expression search is &lsquo;?search.&rsquo;
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Character addresses such as
+</span><span style="font-size: 10pt"><tt>#3</tt></span><span style="font-size: 10pt">
+are trivial to implement, as the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+data structure is accessible by character number.
+However,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+keeps no information about the position of newlines &mdash; it is too
+expensive to track dynamically &mdash; so line addresses are computed by reading
+the file, counting newlines. Except in very large files, this has proven
+acceptable: file access is fast enough to make the technique practical,
+and lines are not central to the structure of the command language.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The command interpreter, called
+</span><span style="font-size: 10pt"><tt>cmdexec</tt></span><span style="font-size: 10pt">,
+is also straightforward. The parse table includes a
+function to call to interpret a particular command. That function
+receives as arguments
+the calculated address
+for the command
+and the command tree (of type
+</span><span style="font-size: 10pt"><tt>Cmdtree</tt></span><span style="font-size: 10pt">),
+which may contain information such as the subtree for compound commands.
+Here, for example, is the function for the
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>v</tt></span><span style="font-size: 10pt">
+commands:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>int</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>g_cmd(a, cp)</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Address a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    Cmdtree *cp;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    compile(cp-&gt;regexp);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    if(execute(a.f, a.r.p1, a.r.p2)!=(cp-&gt;cmdchar==&rsquo;v&rsquo;)){</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        a.f-&gt;dot=a;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        return cmdexec(a, cp-&gt;subcmd);</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    }</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>    return TRUE;    /* cause execution to continue */</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">(</span><span style="font-size: 10pt"><tt>Compile</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">
+are part of the regular expression code, described in the next section.)
+Because the parser and the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+data structure do most of the work, most commands
+are similarly brief.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Regular expressions
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The regular expression code in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is an interpreted, rather than compiled on-the-fly, implementation of Thompson&rsquo;s
+non-deterministic finite automaton algorithm.<sup></sup></span><sup><span style="font-size: 6pt">12</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+The syntax and semantics of the expressions are as in the UNIX program
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">,
+including alternation, closures, character classes, and so on.
+The only changes in the notation are two additions:
+</span><span style="font-size: 10pt"><tt>\n</tt></span><span style="font-size: 10pt">
+is translated to, and matches, a newline character, and
+</span><span style="font-size: 10pt"><tt>@</tt></span><span style="font-size: 10pt">
+matches any character. In
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">,
+the character
+</span><span style="font-size: 10pt"><tt>.</tt></span><span style="font-size: 10pt">
+matches any character except newline, and in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+the same rule seemed safest, to prevent idioms like
+</span><span style="font-size: 10pt"><tt>.*</tt></span><span style="font-size: 10pt">
+from spanning newlines.
+</span><span style="font-size: 10pt"><tt>Egrep</tt></span><span style="font-size: 10pt">
+expressions are arguably too complicated for an interactive editor &mdash;
+certainly it would make sense if all the special characters were two-character
+sequences, so that most of the punctuation characters wouldn&rsquo;t have
+peculiar meanings &mdash; but for an interesting command language, full
+regular expressions are necessary, and
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">
+defines the full regular expression syntax for UNIX programs.
+Also, it seemed superfluous to define a new syntax, since various UNIX programs
+(</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>egrep</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">)
+define too many already.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The expressions are compiled by a routine,
+</span><span style="font-size: 10pt"><tt>compile</tt></span><span style="font-size: 10pt">,
+that generates the description of the non-deterministic finite state machine.
+A second routine,
+</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">,
+interprets the machine to generate the leftmost-longest match of the
+expression in a substring of the file.
+The algorithm is described elsewhere.<sup></sup></span><sup><span style="font-size: 6pt">12,13</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>Execute</tt></span><span style="font-size: 10pt">
+reports
+whether a match was found, and sets a global variable,
+of type
+</span><span style="font-size: 10pt"><tt>Range</tt></span><span style="font-size: 10pt">,
+to the substring matched.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A trick is required to evaluate the expression in reverse, such as when
+searching backwards for an expression.
+For example,
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>-/P.*r/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">looks backwards through the file for a match of the expression.
+The expression, however, is defined for a forward search.
+The solution is to construct a machine identical to the machine
+for a forward search except for a reversal of all the concatenation
+operators (the other operators are symmetric under direction reversal),
+to exchange the meaning of the operators
+</span><span style="font-size: 10pt"><tt>^</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>$</tt></span><span style="font-size: 10pt">,
+and then to read the file backwards, looking for the
+usual earliest longest match.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Execute</tt></span><span style="font-size: 10pt">
+generates only one match each time it is called.
+To interpret looping constructs such as the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+must therefore synchronize between
+calls of
+</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">
+to avoid
+problems with null matches.
+For example, even given the leftmost-longest rule,
+the expression
+</span><span style="font-size: 10pt"><tt>a*</tt></span><span style="font-size: 10pt">
+matches three times in the string
+</span><span style="font-size: 10pt"><tt>ab</tt></span><span style="font-size: 10pt">
+(the character
+</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt">,
+the null string between the
+</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>b</tt></span><span style="font-size: 10pt">,
+and the final null string).
+After returning a match for the
+</span><span style="font-size: 10pt"><tt>a</tt></span><span style="font-size: 10pt">,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+must not match the null string before the
+</span><span style="font-size: 10pt"><tt>b</tt></span><span style="font-size: 10pt">.
+The algorithm starts
+</span><span style="font-size: 10pt"><tt>execute</tt></span><span style="font-size: 10pt">
+at the end of its previous match, and
+if the match it returns
+is null and abuts the previous match, rejects the match and advances
+the initial position one character.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Memory allocation
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The C language has no memory allocation primitives, although a standard
+library routine,
+</span><span style="font-size: 10pt"><tt>malloc</tt></span><span style="font-size: 10pt">,
+provides adequate service for simple programs.
+For specific uses, however,
+it can be better to write a custom allocator.
+The allocator (or rather, pair of allocators) described here
+work in both the terminal and host parts of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+They are designed for efficient manipulation of strings,
+which are allocated and freed frequently and vary in length from essentially
+zero to 32 Kbytes (very large strings are written to disc).
+More important, strings may be large and change size often,
+so to minimize memory usage it is helpful to reclaim and to coalesce the
+unused portions of strings when they are truncated.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Objects to be allocated in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+are of two flavors:
+the first is C
+</span><span style="font-size: 10pt"><tt>structs</tt></span><span style="font-size: 10pt">,
+which are small and often addressed by pointer variables;
+the second is variable-sized arrays of characters
+or integers whose
+base pointer is always used to access them.
+The memory allocator in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is therefore in two parts:
+first, a traditional first-fit allocator that provides fixed storage for
+</span><span style="font-size: 10pt"><tt>structs</tt></span><span style="font-size: 10pt">;
+and second, a garbage-compacting allocator that reduces storage
+overhead for variable-sized objects, at the cost of some bookkeeping.
+The two types of objects are allocated from adjoining arenas, with
+the garbage-compacting allocator controlling the arena with higher addresses.
+Separating into two arenas simplifies compaction and prevents fragmentation due
+to immovable objects.
+The access rules for garbage-compactable objects
+(discussed in the next paragraph) allow them to be relocated, so when
+the first-fit arena needs space, it moves the garbage-compacted arena
+to higher addresses to make room. Storage is therefore created only
+at successively higher addresses, either when more garbage-compacted
+space is needed or when the first-fit arena pushes up the other arena.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Objects that may be compacted declare to the
+allocator a cell that is guaranteed to be the sole repository of the
+address of the object whenever a compaction can occur.
+The compactor can then update the address when the object is moved.
+For example, the implementation of type
+</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">
+(really a variable-length array)
+is:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>typedef struct List{</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        int     nused;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>        long    *ptr;</tt></span></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>}List;</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>ptr</tt></span><span style="font-size: 10pt">
+cell must always be used directly, and never copied. When a
+</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">
+is to be created the
+</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">
+structure is allocated in the ordinary first-fit arena
+and its
+</span><span style="font-size: 10pt"><tt>ptr</tt></span><span style="font-size: 10pt">
+is allocated in the garbage-compacted arena.
+A similar data type for strings, called
+</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">,
+stores variable-length character arrays of up to 32767 elements.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A related matter of programming style:
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+frequently passes structures by value, which
+simplifies the code.
+Traditionally, C programs have
+passed structures by reference, but implicit allocation on
+the stack is easier to use.
+Structure passing is a relatively new feature of C
+(it is not in the
+standard reference manual for C<sup></sup></span><sup><span style="font-size: 6pt">14</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">), and is poorly supported in most
+commercial C compilers.
+It&rsquo;s convenient and expressive, though,
+and simplifies memory management by
+avoiding the allocator altogether
+and eliminating pointer aliases.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Data structures for manipulating files
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Experience with
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+showed that the requirements
+of the file data structure were few, but strict.
+First, files need to be read and written quickly;
+adding a fresh file must be painless.
+Second, the implementation must place no arbitrary upper limit on
+the number or sizes of files. (It should be practical to edit many files,
+and files up to megabytes in length should be handled gracefully.)
+This implies that files be stored on disc, not in main memory.
+(Aficionados of virtual memory may argue otherwise, but the
+implementation of virtual
+memory in our system is not something to depend on
+for good performance.)
+Third, changes to files need be made by only two primitives:
+deletion and insertion.
+These are inverses of each other,
+which simplifies the implementation of the undo operation.
+Finally,
+it must be easy and efficient to access the file, either
+forwards or backwards, a byte at a time.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+data type is constructed from three simpler data structures that hold arrays
+of characters.
+Each of these types has an insertion and deletion operator, and the
+insertion and deletion operators of the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+type itself are constructed from them.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The simplest type is the
+</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">,
+which is used to hold strings in main memory.
+The code that manages
+</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt">
+guarantees that they will never be longer
+than some moderate size, and in practice they are rarely larger than 8 Kbytes.
+</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt">
+have two purposes: they hold short strings like file names with little overhead,
+and because they are deliberately small, they are efficient to modify.
+They are therefore used as the data structure for in-memory caches.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The disc copy of the file is managed by a data structure called a
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">,
+which corresponds to a temporary file. A
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+has no storage in main memory other than bookkeeping information;
+the actual data being held is all on the disc.
+To reduce the number of open files needed,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+opens a dozen temporary UNIX files and multiplexes the
+</span><span style="font-size: 10pt"><tt>Discs</tt></span><span style="font-size: 10pt">
+upon them.
+This permits many files to
+be edited; the entire
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+source (48 files) may be edited comfortably with a single
+instance of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+Allocating one temporary file per
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+would strain the operating system&rsquo;s limit on the number of open files.
+Also, spreading the traffic among temporary files keeps the files shorter,
+and shorter files are more efficiently implemented by the UNIX
+I/O subsystem.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+is an array of fixed-length blocks, each of which contains
+between 1 and 4096 characters of active data.
+(The block size of our UNIX file system is 4096 bytes.)
+The block addresses within the temporary file and the length of each
+block are stored in a
+</span><span style="font-size: 10pt"><tt>List</tt></span><span style="font-size: 10pt">.
+When changes are made the live part of blocks may change size.
+Blocks are created and coalesced when necessary to try to keep the sizes
+between 2048 and 4096 bytes.
+An actively changing part of the
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+therefore typically has about a kilobyte of slop that can be
+inserted or deleted
+without changing more than one block or affecting the block order.
+When an insertion would overflow a block, the block is split, a new one
+is allocated to receive the overflow, and the memory-resident list of blocks
+is rearranged to reflect the insertion of the new block.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Obviously, going to the disc for every modification to the file is
+prohibitively expensive.
+The data type
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+consists of a
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+to hold the data and a
+</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">
+that acts as a cache.
+This is the first of a series of caches throughout the data structures in
+</span><span style="font-size: 10pt"><tt>sam.</tt></span><span style="font-size: 10pt">
+The caches not only improve performance, they provide a way to organize
+the flow of data, particularly in the communication between the host
+and terminal.
+This idea is developed below, in the section on communications.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">To reduce disc traffic, changes to a
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+are mediated by a variable-length string, in memory, that acts as a cache.
+When an insertion or deletion is made to a
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">,
+if the change can be accommodated by the cache, it is done there.
+If the cache becomes bigger than a block because of an insertion,
+some of it is written to the
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+and deleted from the cache.
+If the change does not intersect the cache, the cache is flushed.
+The cache is only loaded at the new position if the change is smaller than a block;
+otherwise, it is sent directly to the
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">.
+This is because
+large changes are typically sequential,
+whereupon the next change is unlikely to overlap the current one.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">A
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+comprises a
+</span><span style="font-size: 10pt"><tt>String</tt></span><span style="font-size: 10pt">
+to hold the file name and some ancillary data such as dot and the modified bit.
+The most important components, though, are a pair of
+</span><span style="font-size: 10pt"><tt>Buffers</tt></span><span style="font-size: 10pt">,
+one called the transcript and the other the contents.
+Their use is described in the next section.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The overall structure is shown in Figure 5.
+Although it may seem that the data is touched many times on its
+way from the
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">,
+it is read (by one UNIX system call) directly into the cache of the
+associated
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">;
+no extra copy is done.
+Similarly, when flushing the cache, the text is written
+directly from the cache to disc.
+Most operations act directly on the text in the cache.
+A principle applied throughout
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is that the fewer times the data is copied, the faster the program will run
+(see also the paper by Waite<sup></sup></span><sup><span style="font-size: 6pt">15</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">).
+</span><span style="font-size: 10pt"></span></p><center><img src="sam2.png"></center>
+</center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 5. File data structures.
+The temporary files are stored in the standard repository for such files
+on the host system.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The contents of a
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+are accessed by a routine that
+copies to a buffer a substring of a file starting at a specified offset.
+To read a byte at a time, a
+per-</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+array is loaded starting from a specified initial position,
+and bytes may then be read from the array.
+The implementation is done by a macro similar to the C standard I/O
+</span><span style="font-size: 10pt"><tt>getc</tt></span><span style="font-size: 10pt">
+macro.<sup></sup></span><sup><span style="font-size: 6pt">14</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+Because the reading may be done at any address, a minor change to the
+macro allows the file to be read backwards.
+This array is read-only; there is no
+</span><span style="font-size: 10pt"><tt>putc</tt></span><span style="font-size: 10pt">.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Doing and undoing
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+has an unusual method for managing changes to files.
+The command language makes it easy to specify multiple variable-length changes
+to a file millions of bytes long, and such changes
+must be made efficiently if the editor is to be practical.
+The usual techniques for inserting and deleting strings
+are inadequate under these conditions.
+The
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+data structures are designed for efficient random access to long strings,
+but care must be taken to avoid super-linear behavior when making
+many changes simultaneously.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+uses a two-pass algorithm for making changes, and treats each file as a database
+against which transactions are registered.
+Changes are not made directly to the contents.
+Instead, when a command is started, a &lsquo;mark&rsquo; containing
+a sequence number is placed in the transcript
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">,
+and each change made to the file, either an insertion or deletion
+or a change to the file name,
+is appended to the end of the transcript.
+When the command is complete, the transcript is rewound to the
+mark and applied to the contents.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">One reason for separating evaluation from
+application in this way is to simplify tracking the addresses of changes
+made in the middle of a long sequence.
+The two-pass algorithm also allows all changes to apply to the
+</span><span style="font-size: 10pt"><i>original</i></span><span style="font-size: 10pt">
+data: no change can affect another change made in the same command.
+This is particularly important when evaluating an
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command because it prevents regular expression matches
+from stumbling over changes made earlier in the execution.
+Also, the two-pass
+algorithm is cleaner than the way other UNIX editors allow changes to
+affect each other;
+for example,
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+idioms to do things like delete every other line
+depend critically on the implementation.
+Instead,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+simple model, in which all changes in a command occur effectively
+simultaneously, is easy to explain and to understand.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The records in the transcript are of the form &lsquo;&lsquo;delete substring from
+locations
+123 to 456&rsquo;&rsquo; and &lsquo;&lsquo;insert 11 characters &lsquo;hello there&rsquo; at location 789.&rsquo;&rsquo;
+(It is an error if the changes are not at monotonically greater
+positions through the file.)
+While the update is occurring, these numbers must be
+offset by earlier changes, but that is straightforward and
+local to the update routine;
+moreover, all the numbers have been computed
+before the first is examined.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Treating the file as a transaction system has another advantage:
+undo is trivial.
+All it takes is to invert the transcript after it has been
+implemented, converting insertions
+into deletions and vice versa, and saving them in a holding
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">.
+The &lsquo;do&rsquo; transcript can then be deleted from
+the transcript
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+and replaced by the &lsquo;undo&rsquo; transcript.
+If an undo is requested, the transcript is rewound and the undo transcript
+executed.
+Because the transcript
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">
+is not truncated after each command, it accumulates
+successive changes.
+A sequence of undo commands
+can therefore back up the file arbitrarily,
+which is more helpful than the more commonly implemented self-inverse form of undo.
+(</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+provides no way to undo an undo, but if it were desired,
+it would be easy to provide by re-interpreting the &lsquo;do&rsquo; transcript.)
+Each mark in the transcript contains a sequence number and the offset into
+the transcript of the previous mark, to aid in unwinding the transcript.
+Marks also contain the value of dot and the modified bit so these can be
+restored easily.
+Undoing multiple files is easy; it merely demands undoing all files whose
+latest change has the same sequence number as the current file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Another benefit of having a transcript is that errors encountered in the middle
+of a complicated command need not leave the files in an intermediate state.
+By rewinding the transcript to the mark beginning the command,
+the partial command can be trivially undone.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">When the update algorithm was first implemented, it was unacceptably slow,
+so a cache was added to coalesce nearby changes,
+replacing multiple small changes by a single larger one.
+This reduced the number
+of insertions into the transaction
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">,
+and made a dramatic improvement in performance,
+but made it impossible
+to handle changes in non-monotonic order in the file; the caching method
+only works if changes don&rsquo;t overlap.
+Before the cache was added, the transaction could in principle be sorted
+if the changes were out of order, although
+this was never done.
+The current status is therefore acceptable performance with a minor
+restriction on global changes, which is sometimes, but rarely, an annoyance.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The update algorithm obviously paws the data more than simpler
+algorithms, but it is not prohibitively expensive;
+the caches help.
+(The principle of avoiding copying the data is still honored here,
+although not as piously:
+the data is moved from contents&rsquo; cache to
+the transcript&rsquo;s all at once and through only one internal buffer.)
+Performance figures confirm the efficiency.
+To read from a dead start a hundred kilobyte file on a VAX-11/750
+takes 1.4 seconds of user time, 2.5 seconds of system time,
+and 5 seconds of real time.
+Reading the same file in
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+takes 6.0 seconds of user time, 1.7 seconds of system time,
+and 8 seconds of real time.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+uses about half the CPU time.
+A more interesting example is the one stated above:
+inserting a character between every pair of characters in the file.
+The
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+command is
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>,y/@/ a/x/</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">and takes 3 CPU seconds per kilobyte of input file, of which
+about a third is spent in the regular expression code.
+This translates to about 500 changes per second.
+</span><span style="font-size: 10pt"><tt>Ed</tt></span><span style="font-size: 10pt">
+takes 1.5 seconds per kilobyte to make a similar change (ignoring newlines),
+but cannot undo it.
+The same example in
+</span><span style="font-size: 10pt"><tt>ex</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">9</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+a variant of
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+done at the University of California at Berkeley,
+which allows one level of undoing, again takes 3 seconds.
+In summary,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+performance is comparable to that of other UNIX editors, although it solves
+a harder problem.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Communications
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The discussion so far has described the implementation of the host part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">;
+the next few sections explain how a machine with mouse and bitmap display
+can be engaged to improve interaction.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is not the first editor to be written as two processes,<sup></sup></span><sup><span style="font-size: 6pt">16</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+but its implementation
+has some unusual aspects.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are several ways
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+host and terminal parts may be connected.
+The first and simplest is to forgo the terminal part and use the host
+part&rsquo;s command language to edit text on an ordinary terminal.
+This mode is invoked by starting
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+with the
+</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt">
+option.
+With no options,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+runs separate host and terminal programs,
+communicating with a message protocol over the physical
+connection that joins them.
+Typically, the connection is an RS-232 link between a Blit
+(the prototypical display for
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">)
+and a host running
+the Ninth Edition of the UNIX operating system.<sup></sup></span><sup><span style="font-size: 6pt">8</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+(This is the version of the system used in the Computing Sciences Research
+Center at AT&amp;T Bell Laboratories [now Lucent Technologies, Bell Labs], where I work. Its relevant
+aspects are discussed in the Blit paper.<sup></sup></span><sup><span style="font-size: 6pt">1</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">)
+The implementation of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+for the SUN computer runs both processes on the same machine and
+connects them by a pipe.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The low bandwidth of an RS-232 link
+necessitated the split between
+the two programs.
+The division is a mixed blessing:
+a program in two parts is much harder to write and to debug
+than a self-contained one,
+but the split makes several unusual configurations possible.
+The terminal may be physically separated from the host, allowing the conveniences
+of a mouse and bitmap display to be taken home while leaving the files at work.
+It is also possible to run the host part on a remote machine:
+</span></p><p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.1em; margin-left: 1.28in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 9pt"><tt>sam -r host</tt></span></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">connects to the terminal in the usual way, and then makes a call
+across the network to establish the host part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+on the named machine.
+Finally, it cross-connects the I/O to join the two parts.
+This allows
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+to be run on machines that do not support bitmap displays;
+for example,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is the editor of choice on our Cray X-MP/24.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>-r</tt></span><span style="font-size: 10pt">
+involves
+</span><span style="font-size: 10pt"><i>three</i></span><span style="font-size: 10pt">
+machines: the remote host, the terminal, and the local host.
+The local host&rsquo;s job is simple but vital: it passes the data
+between the remote host and terminal.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The host and terminal exchange messages asynchronously
+(rather than, say, as remote procedure calls) but there is no
+error detection or correction
+because, whatever the configuration, the connection is reliable.
+Because the terminal handles mundane interaction tasks such as
+popping up menus and interpreting the responses, the messages are about
+data, not actions.
+For example, the host knows nothing about what is displayed on the screen,
+and when the user types a character, the message sent to the host says
+&lsquo;&lsquo;insert a one-byte string at location 123 in file 7,&rsquo;&rsquo; not &lsquo;&lsquo;a character
+was typed at the current position in the current file.&rsquo;&rsquo;
+In other words, the messages look very much like the transaction records
+in the transcripts.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Either the host or terminal part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+may initiate a change to a file.
+The command language operates on the host, while typing and some
+mouse operations are executed directly in the terminal to optimize response.
+Changes initiated by the host program must be transmitted to the terminal,
+and
+vice versa.
+(A token is exchanged to determine which end is in control,
+which means that characters typed while a time-consuming command runs
+must be buffered and do not appear until the command is complete.)
+To maintain consistent information,
+the host and terminal track changes through a per-file
+data structure that records what portions of the file
+the terminal has received.
+The data structure, called a
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+(a weak pun: it&rsquo;s a file with holes)
+is held and updated by both the host and terminal.
+A
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+is a list of
+</span><span style="font-size: 10pt"><tt>Strings</tt></span><span style="font-size: 10pt">
+holding those parts of the file known to the terminal,
+separated by counts of the number of bytes in the interstices.
+Of course, the host doesn&rsquo;t keep a separate copy of the data (it only needs
+the lengths of the various pieces),
+but the structure is the same on both ends.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+in the terminal doubles as a cache.
+Since the terminal keeps the text for portions of the file it has displayed,
+it need not request data from the host when revisiting old parts of the file
+or redrawing obscured windows, which speeds things up considerably
+over low-speed links.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">It&rsquo;s trivial for the terminal to maintain its
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">,
+because all changes made on the terminal apply to parts of the file
+already loaded there.
+Changes made by the host are compared against the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+during the update sequence after each command.
+Small changes to pieces of the file loaded in the terminal
+are sent in their entirety.
+Larger changes, and changes that fall entirely in the holes,
+are transmitted as messages without literal data:
+only the lengths of the deleted and inserted strings are transmitted.
+When a command is completed, the terminal examines its visible
+windows to see if any holes in their
+</span><span style="font-size: 10pt"><tt>Rasps</tt></span><span style="font-size: 10pt">
+intersect the visible portion of the file.
+It then requests the missing data from the host,
+along with up to 512 bytes of surrounding data, to minimize
+the number of messages when visiting a new portion of the file.
+This technique provides a kind of two-level lazy evaluation for the terminal.
+The first level sends a minimum of information about
+parts of the file not being edited interactively;
+the second level waits until a change is displayed before
+transmitting the new data.
+Of course,
+performance is also helped by having the terminal respond immediately to typing
+and simple mouse requests.
+Except for small changes to active pieces of the file, which are
+transmitted to the terminal without negotiation,
+the terminal is wholly responsible for deciding what is displayed;
+the host uses the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+only to tell the terminal what might be relevant.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">When a change is initiated by the host,
+the messages to the terminal describing the change
+are generated by the routine that applies the transcript of the changes
+to the contents of the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">.
+Since changes are undone by the same update routine,
+undoing requires
+no extra code in the communications;
+the usual messages describing changes to the file are sufficient
+to back up the screen image.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+is a particularly good example of the way caches are used in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+First, it facilitates access to the active portion of the text by placing
+the busy text in main memory.
+In so doing, it provides efficient access
+to a large data structure that does not fit in memory.
+Since the form of data is to be imposed by the user, not by the program,
+and because characters will frequently be scanned sequentially,
+files are stored as flat objects.
+Caches help keep performance good and linear when working with such
+data.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Second, the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+and several of the other caches have some
+</span><span style="font-size: 10pt"><i>read-ahead;</i></span><span style="font-size: 10pt">
+that is, the cache is loaded with more information than is needed for
+the job immediately at hand.
+When manipulating linear structures, the accesses are usually sequential,
+and read-ahead can significantly reduce the average time to access the
+next element of the object.
+Sequential access is a common mode for people as well as programs;
+consider scrolling through a document while looking for something.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Finally, like any good data structure,
+the cache guides the algorithm, or at least the implementation.
+The
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+was actually invented to control the communications between the host and
+terminal parts, but I realized very early that it was also a form of
+cache. Other caches were more explicitly intended to serve a double
+purpose: for example, the caches in
+</span><span style="font-size: 10pt"><tt>Files</tt></span><span style="font-size: 10pt">
+that coalesce updates not only reduce traffic to the
+transcript and contents
+</span><span style="font-size: 10pt"><tt>Buffers</tt></span><span style="font-size: 10pt">,
+they also clump screen updates so that complicated changes to the
+screen are achieved in
+just a few messages to the terminal.
+This saved me considerable work: I did not need to write special
+code to optimize the message traffic to the
+terminal.
+Caches pay off in surprising ways.
+Also, they tend to be independent, so their performance improvements
+are multiplicative.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Data structures in the terminal
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The terminal&rsquo;s job is to display and to maintain a consistent image of
+pieces of the files being edited.
+Because the text is always in memory, the data structures are
+considerably simpler than those in the host part.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+typically has far more windows than does
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,
+the window system within which its Blit implementation runs.
+</span><span style="font-size: 10pt"><tt>Mux</tt></span><span style="font-size: 10pt">
+has a fairly small number of asynchronously updated windows;
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+needs a large number of synchronously updated windows that are
+usually static and often fully obscured.
+The different tradeoffs guided
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+away from the memory-intensive implementation of windows, called
+</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt">,<sup></sup></span><sup><span style="font-size: 6pt">17</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+used in
+</span><span style="font-size: 10pt"><tt>mux.</tt></span><span style="font-size: 10pt">
+Rather than depending on a complete bitmap image of the display for each window,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+regenerates the image from its in-memory text
+(stored in the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">)
+when necessary, although it will use such an image if it is available.
+Like
+</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt">,
+though,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+uses the screen bitmap as active storage in which to update the image using
+</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">.<sup></sup></span><sup><span style="font-size: 6pt">18,19</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+The resulting organization, pictured in Figure 6,
+has a global array of windows, called
+</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">,
+each of which holds an image of a piece of text held in a data structure
+called a
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">,
+which in turn represents
+a rectangular window full of text displayed in some
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">.
+Each
+</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt">
+appears in a global list that orders them all front-to-back
+on the display, and simultaneously as an element of a per-file array
+that holds all the open windows for that file.
+The complement in the terminal of the
+</span><span style="font-size: 10pt"><tt>File</tt></span><span style="font-size: 10pt">
+on the host is called a
+</span><span style="font-size: 10pt"><tt>Text</tt></span><span style="font-size: 10pt">;
+each connects its
+</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">
+to the associated
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">.
+</span><span style="font-size: 10pt"></span></p><center><img src="sam3.png"></center>
+</center>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 6. Data structures in the terminal.
+</i></span><span style="font-size: 8pt"><tt>Flayers</tt></span><span style="font-size: 8pt"><i>
+are also linked together into a front-to-back list.
+</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i>
+are discussed in the next section.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+for a
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+contains the image of the text.
+For a fully visible window, the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+will be the screen (or at least the
+</span><span style="font-size: 10pt"><tt>Layer</tt></span><span style="font-size: 10pt">
+in which
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is being run),
+while for partially obscured windows the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+will be off-screen.
+If the window is fully obscured, the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+will be null.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+is a kind of cache.
+When making changes to the display, most of the original image will
+look the same in the final image, and the update algorithms exploit this.
+The
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+software updates the image in the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+incrementally; the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+is not just an image, it is a data structure.<sup></sup></span><sup><span style="font-size: 6pt">18,19</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+The job of the software that updates the display is therefore
+to use as much as possible of the existing image (converting the
+text from ASCII characters to pixels is expensive) in a sort of two-dimensional
+string insertion algorithm.
+The details of this process are described in the next section.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+software has no code to support overlapping windows;
+its job is to keep a single
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+up to date.
+It falls to the
+</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt">
+software to multiplex the various
+</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt">
+onto the screen.
+The problem of maintaining overlapping
+</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">
+is easier than for
+</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt"><sup></sup></span><sup><span style="font-size: 6pt">17</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt">
+because changes are made synchronously and because the contents of the window
+can be reconstructed from the data stored in the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">;
+the
+</span><span style="font-size: 10pt"><tt>Layers</tt></span><span style="font-size: 10pt">
+software
+makes no such assumptions.
+In
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">,
+the window being changed is almost always fully visible, because the current
+window is always fully visible, by construction.
+However, when multi-file changes are being made, or when
+more than one window is open on a file,
+it may be necessary to update partially obscured windows.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">There are three cases: the window is
+fully visible, invisible (fully obscured), or partially visible.
+If fully visible, the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+is part of the screen, so when the
+</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt">
+update routine calls the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+update routine, the screen will be updated directly.
+If the window is invisible,
+there is no associated
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">,
+and all that is necessary is to update the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+data structure, not the image.
+If the window is partially visible, the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+routine is called to update the image in the off-screen
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">,
+which may require regenerating it from the text of the window.
+The
+</span><span style="font-size: 10pt"><tt>Flayer</tt></span><span style="font-size: 10pt">
+code then clips this
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+against the
+</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt">
+of all
+</span><span style="font-size: 10pt"><tt>Frames</tt></span><span style="font-size: 10pt">
+in front of the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+being modified, and the remainder is copied to the display.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">This is much faster than recreating the image off-screen
+for every change, or clipping all the changes made to the image
+during its update.
+Unfortunately, these caches can also consume prohibitive amounts of
+memory, so they are freed fairly liberally &mdash; after every change to the
+front-to-back order of the
+</span><span style="font-size: 10pt"><tt>Flayers</tt></span><span style="font-size: 10pt">.
+The result is that
+the off-screen
+</span><span style="font-size: 10pt"><tt>Bitmaps</tt></span><span style="font-size: 10pt">
+exist only while multi-window changes are occurring,
+which is the only time the performance improvement they provide is needed.
+Also, the user interface causes fully-obscured windows to be the
+easiest to make &mdash;
+creating a canonically sized and placed window requires only a button click
+&mdash; which reduces the need for caching still further.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Screen update
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Only two low-level primitives are needed for incremental update:
+</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">,
+which copies rectangles of pixels, and
+</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt">
+(which in turn calls
+</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">),
+which draws a null-terminated character string in a
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">.
+A
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+contains a list of
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">,
+each of which defines a horizontal strip of text in the window
+(see Figure 7).
+A
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+has a character string
+</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt">,
+and a
+</span><span style="font-size: 10pt"><tt>Rectangle</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt">
+that defines the location of the strip in the window.
+(The text in
+</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt">
+is stored in the
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+separately from the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+associated with the window&rsquo;s file, so
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+are self-contained.)
+The invariant is that
+the image of the
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+can be reproduced by calling
+</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt">
+with argument
+</span><span style="font-size: 10pt"><tt>str</tt></span><span style="font-size: 10pt">
+to draw the string in
+</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt">,
+and the resulting picture fits perfectly within
+</span><span style="font-size: 10pt"><tt>rect</tt></span><span style="font-size: 10pt">.
+In other words, the
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+define the tiling of the window.
+The tiling may be complicated by long lines of text, which
+are folded onto the next line.
+Some editors use horizontal scrolling to avoid this complication,
+but to be comfortable this technique requires that lines not be
+</span><span style="font-size: 10pt"><i>too</i></span><span style="font-size: 10pt">
+long;
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+has no such restriction.
+Also, and perhaps more importantly, UNIX programs and terminals traditionally fold
+long lines to make their contents fully visible.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Two special kinds of
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+contain a single
+character: either a newline or a tab.
+Newlines and tabs are white space.
+A newline
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+always extends to the right edge of the window,
+forcing the following
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+to the next line.
+The width of a tab depends on where it is located:
+it forces the next
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+to begin at a tab location.
+Tabs also
+have a minimum width equivalent to a blank (blanks are
+drawn by
+</span><span style="font-size: 10pt"><tt>string</tt></span><span style="font-size: 10pt">
+and are not treated specially); newlines have a minimum width of zero.
+</span><span style="font-size: 10pt"></span></p><center><img src="sam4.png"></center>
+</center>
+<p style="margin-top: 0; margin-bottom: 0.08in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 8pt"><i>Figure 7. A line of text showing its
+</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i>.
+The first two blank
+</i></span><span style="font-size: 8pt"><tt>Boxes</tt></span><span style="font-size: 8pt"><i>
+contain tabs; the last contains a newline.
+Spaces are handled as ordinary characters.
+</i></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="margin-top: 0; margin-bottom: 0.02in"></p>
+
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The update algorithms always use the
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">
+image of the text (either the display or cache
+</span><span style="font-size: 10pt"><tt>Bitmap</tt></span><span style="font-size: 10pt">);
+they never examine the characters within a
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+except when the
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+needs to be split in two.
+Before a change, the window consists of a tiling of
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">;
+after the change the window is tiled differently.
+The update algorithms rearrange the tiles in place, without
+backup storage.
+The algorithms are not strictly optimal &mdash; for example, they can
+clear a pixel that is later going to be written upon &mdash;
+but they never move a tile that doesn&rsquo;t need to be moved,
+and they move each tile at most once.
+</span><span style="font-size: 10pt"><tt>Frinsert</tt></span><span style="font-size: 10pt">
+on a Blit can absorb over a thousand characters a second if the strings
+being inserted are a few tens of characters long.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Consider
+</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">.
+Its job is to delete a substring from a
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+and restore the image of the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">.
+The image of a substring has a peculiar shape (see Figure 2) comprising
+possibly a partial line,
+zero or more full lines,
+and possibly a final partial line.
+For reference, call this the
+</span><span style="font-size: 10pt"><i>Z-shape.
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Frdelete</tt></span><span style="font-size: 10pt">
+begins by splitting, if necessary, the
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+containing the ends of
+the substring so the substring begins and ends on
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+boundaries.
+Because the substring is being deleted, its image is not needed,
+so the Z-shape is then cleared.
+Then, tiles (that is, the images of
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">)
+are copied, using
+</span><span style="font-size: 10pt"><tt>bitblt</tt></span><span style="font-size: 10pt">,
+from immediately after the Z-shape to
+the beginning of the Z-shape,
+resulting in a new Z-shape.
+(</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+whose contents would span two lines in the new position must first be split.)
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Copying the remainder of the
+</span><span style="font-size: 10pt"><tt>Frame</tt></span><span style="font-size: 10pt">
+tile by tile
+this way will clearly accomplish the deletion but eventually,
+typically when the copying algorithm encounters a tab or newline,
+the old and new
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+coordinates of the tile
+to be copied are the same.
+This correspondence implies
+that the Z-shape has its beginning and ending edges aligned
+vertically, and a sequence of at most two
+</span><span style="font-size: 10pt"><tt>bitblts</tt></span><span style="font-size: 10pt">
+can be used to copy the remaining tiles.
+The last step is to clear out the resulting empty space at the bottom
+of the window;
+the number of lines to be cleared is the number of complete lines in the
+Z-shape closed by the final
+</span><span style="font-size: 10pt"><tt>bitblts.</tt></span><span style="font-size: 10pt">
+The final step is to merge horizontally adjacent
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+of plain text.
+The complete source to
+</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">
+is less than 100 lines of C.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>frinsert</tt></span><span style="font-size: 10pt">
+is more complicated because it must do four passes:
+one to construct the
+</span><span style="font-size: 10pt"><tt>Box</tt></span><span style="font-size: 10pt">
+list for the inserted string,
+one to reconnoitre,
+one to copy (in opposite order to
+</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">)
+the
+</span><span style="font-size: 10pt"><tt>Boxes</tt></span><span style="font-size: 10pt">
+to make the hole for the new text,
+and finally one to copy the new text into place.
+Overall, though,
+</span><span style="font-size: 10pt"><tt>frinsert</tt></span><span style="font-size: 10pt">
+has a similar flavor to
+</span><span style="font-size: 10pt"><tt>frdelete</tt></span><span style="font-size: 10pt">,
+and needn&rsquo;t be described further.
+</span><span style="font-size: 10pt"><tt>Frinsert</tt></span><span style="font-size: 10pt">
+and its subsidiary routines comprise 211 lines of C.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The terminal source code is 3024 lines of C,
+and the host source is 5797 lines.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Discussion
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>History
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">The immediate ancestor of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+was the original text editor for the Blit, called
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+inherited
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">&rsquo;s
+two-process structure and mouse language almost unchanged, but
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+suffered from several drawbacks that were addressed in the design of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">.
+The most important of these was the lack of a command language.
+Although
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+was easy to use for simple editing, it provided no direct help with
+large or repetitive editing tasks. Instead, it provided a command to pass
+selected text through a shell pipeline,
+but this was no more satisfactory than could be expected of a stopgap measure.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Jim</tt></span><span style="font-size: 10pt">
+was written primarily as a vehicle for experimenting with a mouse-based
+interface to text, and the experiment was successful.
+</span><span style="font-size: 10pt"><tt>Jim</tt></span><span style="font-size: 10pt">
+had some spin-offs:
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,
+the second window system for the Blit, is essentially a multiplexed
+version of the terminal part of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">;
+and the debugger
+</span><span style="font-size: 10pt"><tt>pi</tt></span><span style="font-size: 10pt">&rsquo;s
+user interface<sup></sup></span><sup><span style="font-size: 6pt">20</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> was closely modeled on
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">&rsquo;s.
+But after a couple of years,
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+had become difficult to maintain and limiting to use,
+and its replacement was overdue.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">I began the design of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+by asking
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+customers what they wanted.
+This was probably a mistake; the answers were essentially a list of features
+to be found in other editors, which did not provide any of the
+guiding principles I was seeking.
+For instance, one common request was for a &lsquo;&lsquo;global substitute,&rsquo;&rsquo;
+but no one suggested how to provide it within a cut-and-paste editor.
+I was looking for a scheme that would
+support such specialized features comfortably in the context of some
+general command language.
+Ideas were not forthcoming, though, particularly given my insistence
+on removing all limits on file sizes, line lengths and so on.
+Even worse, I recognized that, since the mouse could easily
+indicate a region of the screen that was not an integral number of lines,
+the command language would best forget about newlines altogether,
+and that meant the command language had to treat the file as a single
+string, not an array of lines.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Eventually, I decided that thinking was not getting me very far and it was
+time to try building.
+I knew that the terminal part could be built easily &mdash;
+that part of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+behaved acceptably well &mdash; and that most of the hard work was going
+to be in the host part: the file interface, command interpreter and so on.
+Moreover, I had some ideas about how the architecture of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+could be improved without destroying its basic structure, which I liked
+in principle but which hadn&rsquo;t worked out as well as I had hoped.
+So I began by designing the file data structure,
+starting with the way
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+worked &mdash; comparable to a single structure merging
+</span><span style="font-size: 10pt"><tt>Disc</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>Buffer</tt></span><span style="font-size: 10pt">,
+which I split to make the cache more general
+&mdash; and thinking about how global substitute could be implemented.
+The answer was clearly that it had to be done in two passes,
+and the transcript-oriented implementation fell out naturally.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+was written bottom-up,
+starting from the data structures and algorithms for manipulating text,
+through the command language and up to the code for maintaining
+the display.
+In retrospect, it turned out well, but this implementation method is
+not recommended in general.
+There were several times when I had a large body of interesting code
+assembled and no clue how to proceed with it.
+The command language, in particular, took almost a year to figure out,
+but can be implemented (given what was there at the beginning of that year)
+in a day or two. Similarly, inventing the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+data structure delayed the
+connection of the host and terminal pieces by another few months.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+took about two years to write, although only about four months were
+spent actually working on it.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Part of the design process was unusual:
+the subset of the protocol that maintains the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+was simulated, debugged
+and verified by an automatic protocol analyzer,<sup></sup></span><sup><span style="font-size: 6pt">21</span><span style="font-size: 10pt"></span></sup><span style="font-size: 10pt"> and was bug-free
+from the start.
+The rest of the protocol, concerned mostly
+with keeping menus up to date,
+was unfortunately too unwieldy for such analysis,
+and was debugged by more traditional methods, primarily
+by logging in a file all messages in and out of the host.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Reflections
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is essentially the only interactive editor used by the sixty or so members of
+the computing science research center in which I work.
+The same could not be said of
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">;
+the lack of a command language kept some people from adopting it.
+The union of a user interface as comfortable as
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">&rsquo;s
+with a command language as powerful as
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s&dagger;
+</span></p><p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.50in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">is essential to
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+success.
+When
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+was first made available to the
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+community,
+almost everyone switched to it within two or three days.
+In the months that followed, even people who had never adopted
+</span><span style="font-size: 10pt"><tt>jim</tt></span><span style="font-size: 10pt">
+started using
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+exclusively.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">To be honest,
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+still gets occasional use, but usually when
+something quick needs to be done and the overhead of
+downloading the terminal part of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+isn&rsquo;t worth the trouble.
+Also, as a &lsquo;line&rsquo; editor,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+</span><span style="font-size: 10pt"><tt>-d</tt></span><span style="font-size: 10pt">
+is a bit odd;
+when using a good old ASCII terminal, it&rsquo;s comforting to have
+a true line editor.
+But it is fair to say that
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language has displaced
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+for most of the complicated editing that has kept line editors
+(that is, command-driven editors) with us.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language is even fancier than
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s,
+and most
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+customers don&rsquo;t come near to using all its capabilities.
+Does it need to be so sophisticated?
+I think the answer is yes, for two reasons.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">First, the
+</span><span style="font-size: 10pt"><i>model</i></span><span style="font-size: 10pt">
+for
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language is really relatively simple, and certainly simpler than that of
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">.
+For instance, there is only one kind of textual loop in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+&mdash; the
+</span><span style="font-size: 10pt"><tt>x</tt></span><span style="font-size: 10pt">
+command &mdash;
+while
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+has three (the
+</span><span style="font-size: 10pt"><tt>g</tt></span><span style="font-size: 10pt">
+command, the global flag on substitutions, and the implicit loop over
+lines in multi-line substitutions).
+Also,
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+substitute command is necessary to make changes within lines, but in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+the
+</span><span style="font-size: 10pt"><tt>s</tt></span><span style="font-size: 10pt">
+command is more of a familiar convenience than a necessity;
+</span><span style="font-size: 10pt"><tt>c</tt></span><span style="font-size: 10pt">
+and
+</span><span style="font-size: 10pt"><tt>t</tt></span><span style="font-size: 10pt">
+can do all the work.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Second,
+given a community that expects an editor to be about as powerful as
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">,
+it&rsquo;s hard to see how
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+could really be much simpler and still satisfy that expectation.
+People want to do &lsquo;&lsquo;global substitutes,&rsquo;&rsquo; and most are content
+to have the recipe for that and a few other fancy changes.
+The sophistication of the command language is really just a veneer
+over a design that makes it possible to do global substitutes
+in a screen editor.
+Some people will always want something more, however, and it&rsquo;s gratifying to
+be able to provide it.
+The real power of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language comes from composability of the operators, which is by
+nature orthogonal to the underlying model.
+In other words,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is not itself complex, but it makes complex things possible.
+If you don&rsquo;t want to do anything complex, you can ignore the
+complexity altogether, and many people do so.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Sometimes I am asked the opposite question: why didn&rsquo;t I just make
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+a real programmable editor, with macros and variables and so on?
+The main reason is a matter of taste: I like the editor
+to be the same every time I use it.
+There is one technical reason, though:
+programmability in editors is largely a workaround for insufficient
+interactivity.
+Programmable editors are used to make particular, usually short-term,
+things easy to do, such as by providing shorthands for common actions.
+If things are generally easy to do in the first place,
+shorthands are not as helpful.
+</span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+makes common editing operations very easy, and the solutions to
+complex editing problems seem commensurate with the problems themselves.
+Also, the ability to edit the
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+window makes it easy to repeat commands &mdash; it only takes a mouse button click
+to execute a command again.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Pros and cons
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+has several other good points,
+and its share of problems.
+Among the good things is the idea of
+structural regular expressions,
+whose usefulness has only begun to be explored.
+They were arrived at serendipitously when I attempted to distill the essence of
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+way of doing global substitution and recognized that the looping command in
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+was implicitly imposing a structure (an array of lines) on the file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Another of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+good things is its undo capability.
+I had never before used an editor with a true undo,
+but I would never go back now.
+Undo
+</span><span style="font-size: 10pt"><i>must</i></span><span style="font-size: 10pt">
+be done well, but if it is, it can be relied on.
+For example,
+it&rsquo;s safe to experiment if you&rsquo;re not sure how to write some intricate command,
+because if you make a mistake, it can be fixed simply and reliably.
+I learned two things about undo from writing
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">:
+first, it&rsquo;s easy to provide if you design it in from the beginning, and
+second, it&rsquo;s necessary, particularly if the system has some subtle
+properties that may be unfamiliar or error-prone for users.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">&rsquo;s
+lack of internal limits and sizes is a virtue.
+Because it avoids all fixed-size tables and data structures,
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is able to make global changes to files that some of our other
+tools cannot even read.
+Moreover, the design keeps the performance linear when doing such
+operations, although I must admit
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+does get slow when editing a huge file.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Now, the problems.
+Externally, the most obvious is that it is poorly integrated into the
+surrounding window system.
+By design, the user interface in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+feels almost identical to that of
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">,
+but a thick wall separates text in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+from the programs running in
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">.
+For instance, the &lsquo;snarf buffer&rsquo; in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+must be maintained separately from that in
+</span><span style="font-size: 10pt"><tt>mux</tt></span><span style="font-size: 10pt">.
+This is regrettable, but probably necessary given the unusual configuration
+of the system, with a programmable terminal on the far end of an RS-232 link.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"></span><span style="font-size: 10pt"><tt>Sam</tt></span><span style="font-size: 10pt">
+is reliable; otherwise, people wouldn&rsquo;t use it.
+But it was written over such a long time, and has so many new (to me)
+ideas in it, that I would like to see it done over again to clean
+up the code and remove many of the lingering problems in the implementation.
+The worst part is in the interconnection of the host and terminal parts,
+which might even be able to go away in a redesign for a more
+conventional window system.
+The program must be split in two to use the terminal effectively,
+but the low bandwidth of the connection forces the separation to
+occur in an inconvenient part of the design if performance is to be acceptable.
+A simple remote procedure call
+protocol driven by the host, emitting only graphics
+commands, would be easy to write but wouldn&rsquo;t have nearly the
+necessary responsiveness. On the other hand, if the terminal were in control
+and requested much simpler file services from the host, regular expression
+searches would require that the terminal read the entire file over its RS-232
+link, which would be unreasonably slow.
+A compromise in which either end can take control is necessary.
+In retrospect, the communications protocol should have been
+designed and verified formally, although I do not know of any tool
+that can adequately relate the protocol to
+its implementation.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Not all of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+users are comfortable with its command language, and few are adept.
+Some (venerable) people use a sort of
+&lsquo;&lsquo;</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+subset&rsquo;&rsquo; of
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language,
+and even ask why
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+command language is not exactly
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s.
+(The reason, of course, is that
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+model for text does not include newlines, which are central to
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">.
+Making the text an array of newlines to the command language would
+be too much of a break from the seamless model provided by the mouse.
+Some editors, such as
+</span><span style="font-size: 10pt"><tt>vi</tt></span><span style="font-size: 10pt">,
+are willing to make this break, though.)
+The difficulty is that
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">&rsquo;s
+syntax is so close to
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">&rsquo;s
+that people believe it
+</span><span style="font-size: 10pt"><i>should</i></span><span style="font-size: 10pt">
+be the same.
+I thought, with some justification in hindsight,
+that making
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+similar to
+</span><span style="font-size: 10pt"><tt>ed</tt></span><span style="font-size: 10pt">
+would make it easier to learn and to accept.
+But I may have overstepped and raised the users&rsquo;
+expectations too much.
+It&rsquo;s hard to decide which way to resolve this problem.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.35in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Finally, there is a tradeoff in
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+that was decided by the environment in which it runs:
+</span><span style="font-size: 10pt"><tt>sam</tt></span><span style="font-size: 10pt">
+is a multi-file editor, although in a different system there might instead be
+multiple single-file editors.
+The decision was made primarily because starting a new program in a Blit is
+time-consuming.
+If the choice could be made freely, however, I would
+still choose the multi-file architecture, because it allows
+groups of files to be handled as a unit;
+the usefulness of the multi-file commands is incontrovertible.
+It is delightful to have the source to an entire program
+available at your fingertips.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>Acknowledgements
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">Tom Cargill suggested the idea behind the
+</span><span style="font-size: 10pt"><tt>Rasp</tt></span><span style="font-size: 10pt">
+data structure.
+Norman Wilson and Ken Thompson influenced the command language.
+This paper was improved by comments from
+Al Aho,
+Jon Bentley,
+Chris Fraser,
+Gerard Holzmann,
+Brian Kernighan,
+Ted Kowalski,
+Doug McIlroy
+and
+Dennis Ritchie.
+</span></p><p style="margin-top: 0; margin-bottom: 0.17in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"><b>REFERENCES
+</b></span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 1. R. Pike,
+&lsquo;The Blit: a multiplexed graphics terminal,&rsquo;
+</span><span style="font-size: 10pt"><i>AT&amp;T Bell Labs. Tech. J.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>63</b></span><span style="font-size: 10pt">,
+(8),
+1607-1631 (1984).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 2. L. Johnson,
+</span><span style="font-size: 10pt"><i>MacWrite,</i></span><span style="font-size: 10pt">
+Apple Computer Inc., Cupertino, Calif. 1983.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 3. B. Lampson,
+&lsquo;Bravo Manual,&rsquo;
+in
+</span><span style="font-size: 10pt"><i>Alto User&rsquo;s Handbook,
+</i></span><span style="font-size: 10pt">pp. 31-62,
+Xerox Palo Alto Research Center,
+Palo Alto, Calif.
+1979.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 4. W. Teitelman,
+&lsquo;A tour through Cedar,&rsquo;
+</span><span style="font-size: 10pt"><i>IEEE Software,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>1</b></span><span style="font-size: 10pt">
+(2), 44-73 (1984).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 5. J. Gutknecht,
+&lsquo;Concepts of the text editor Lara,&rsquo;
+</span><span style="font-size: 10pt"><i>Comm. ACM,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>28</b></span><span style="font-size: 10pt">,
+(9),
+942-960 (1985).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 6. Bell Telephone Laboratories,
+</span><span style="font-size: 10pt"><i>UNIX Programmer&rsquo;s Manual,
+</i></span><span style="font-size: 10pt">Holt, Rinehart and Winston, New York 1983.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 7. B. W. Kernighan and R. Pike,
+</span><span style="font-size: 10pt"><i>The Unix Programming Environment,
+</i></span><span style="font-size: 10pt">Prentice-Hall, Englewood Cliffs, New Jersey 1984.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 8. </span><span style="font-size: 10pt"><i>Unix Time-Sharing System Programmer&rsquo;s Manual, Research Version, Ninth Edition,
+Volume 1,
+</i></span><span style="font-size: 10pt">AT&amp;T Bell Laboratories, Murray Hill, New Jersey 1986.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt"> 9. </span><span style="font-size: 10pt"><i>Unix Time-Sharing System Programmer&rsquo;s Manual, 4.1 Berkeley Software Distribution,
+Volumes 1 and 2C,
+</i></span><span style="font-size: 10pt">University of California, Berkeley, Calif. 1981.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">10. R. Pike,
+&lsquo;Structural Regular Expressions,&rsquo;
+</span><span style="font-size: 10pt"><i>Proc. EUUG Spring Conf., Helsinki 1987,
+</i></span><span style="font-size: 10pt">Eur. Unix User&rsquo;s Group, Buntingford, Herts, UK 1987.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">11. A. Goldberg,
+</span><span style="font-size: 10pt"><i>Smalltalk-80 &ndash; The Interactive Programming Environment,
+</i></span><span style="font-size: 10pt">Addison-Wesley, Reading, Mass. 1984.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">12. K. Thompson,
+&lsquo;Regular expression search algorithm,&rsquo;
+</span><span style="font-size: 10pt"><i>Comm. ACM,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>11</b></span><span style="font-size: 10pt">,
+(6),
+419-422 (1968).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">13. A. V. Aho, J. E. Hopcroft and J. D. Ullman,
+</span><span style="font-size: 10pt"><i>The Design and Analysis of Computer Algorithms,
+</i></span><span style="font-size: 10pt">Addison-Wesley, Reading, Mass. 1974.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">14. B. W. Kernighan and D. M. Ritchie,
+</span><span style="font-size: 10pt"><i>The C Programming Language,
+</i></span><span style="font-size: 10pt">Prentice-Hall, Englewood Cliffs, New Jersey 1978.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">15. W. M. Waite,
+&lsquo;The cost of lexical analysis,&rsquo;
+</span><span style="font-size: 10pt"><i>Softw. Pract. Exp.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>16</b></span><span style="font-size: 10pt">,
+(5),
+473-488 (1986).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">16. C. W. Fraser,
+&lsquo;A generalized text editor,&rsquo;
+</span><span style="font-size: 10pt"><i>Comm. ACM,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>23</b></span><span style="font-size: 10pt">,
+(3),
+154-158 (1980).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">17. R. Pike,
+&lsquo;Graphics in overlapping bitmap layers,&rsquo;
+</span><span style="font-size: 10pt"><i>ACM Trans. on Graph.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>2</b></span><span style="font-size: 10pt">,
+(2)
+135-160 (1983).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">18. L. J. Guibas and J. Stolfi,
+&lsquo;A language for bitmap manipulation,&rsquo;
+</span><span style="font-size: 10pt"><i>ACM Trans. on Graph.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>1</b></span><span style="font-size: 10pt">,
+(3),
+191-214 (1982).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">19. R. Pike, B. Locanthi and J. Reiser,
+&lsquo;Hardware/software trade-offs for bitmap graphics on the Blit,&rsquo;
+</span><span style="font-size: 10pt"><i>Softw. Pract. Exp.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>15</b></span><span style="font-size: 10pt">,
+(2),
+131-151 (1985).
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">20. T. A. Cargill,
+&lsquo;The feel of Pi,&rsquo;
+</span><span style="font-size: 10pt"><i>Winter USENIX Conference Proceedings,
+Denver 1986,
+</i></span><span style="font-size: 10pt">62-71,
+USENIX Assoc., El Cerrito, CA.
+</span></p><p style="margin-top: 0; margin-bottom: 0.05in"></p>
+<p style="line-height: 1.2em; margin-left: 1.00in; text-indent: 0.00in; margin-right: 1.00in; margin-top: 0; margin-bottom: 0; text-align: justify;">
+<span style="font-size: 10pt">21. G. J. Holzmann,
+&lsquo;Tracing protocols,&rsquo;
+</span><span style="font-size: 10pt"><i>AT&amp;T Tech. J.,
+</i></span><span style="font-size: 10pt"></span><span style="font-size: 10pt"><b>64</b></span><span style="font-size: 10pt">,
+(10),
+2413-2434 (1985).
+</span></p><p style="margin-top: 0; margin-bottom: 0.50in"></p>
+</body>
+</html>
+
diff --git a/sys/doc/sam/sam.ms b/sys/doc/sam/sam.ms
new file mode 100644
index 000000000..dfbd9c809
--- /dev/null
+++ b/sys/doc/sam/sam.ms
@@ -0,0 +1,3241 @@
+.HTML "The Text Editor sam
+.Vx 17 11 November 87 1 32 "ROB PIKE" "THE TEXT EDITOR SAM"
+.ds DY "31 May 1987
+.ds DR "Revised 1 July 1987
+.de CW \" puts first arg in CW font, same as UL; maintains font
+\%\&\\$3\f(CW\\$1\fP\&\\$2
+..
+.de Cs
+.br
+.fi
+.ft 2
+.ps -2
+.vs -2
+..
+.de Ce
+.br
+.nf
+.ft 1
+.ps
+.vs
+.sp
+..
+.de XP
+.ie h .html - <center><img src="\\$1.gif" /></center>
+.el .BP \\$1.ps \\$2
+..
+.TL
+The Text Editor \&\f(CWsam\fP
+.AU
+Rob Pike
+rob@plan9.bell-labs.com
+.AB
+.LP
+.CW Sam
+is an interactive multi-file text editor intended for
+bitmap displays.
+A textual command language
+supplements the mouse-driven, cut-and-paste interface
+to make complex or
+repetitive editing tasks easy to specify.
+The language is characterized by the composition of regular expressions
+to describe the structure of the text being modified.
+The treatment of files as a database, with changes logged
+as atomic transactions, guides the implementation and
+makes a general `undo' mechanism straightforward.
+.PP
+.CW Sam
+is implemented as two processes connected by a low-bandwidth stream,
+one process handling the display and the other the editing
+algorithms. Therefore it can run with the display process
+in a bitmap terminal and the editor on a local host,
+with both processes on a bitmap-equipped host, or with
+the display process in the terminal and the editor in a
+remote host.
+By suppressing the display process,
+it can even run without a bitmap terminal.
+.PP
+This paper is reprinted from Software\(emPractice and Experience,
+Vol 17, number 11, pp. 813-845, November 1987.
+The paper has not been updated for the Plan 9 manuals. Although
+.CW Sam
+has not changed much since the paper was written, the system around it certainly has.
+Nonetheless, the description here still stands as the best introduction to the editor.
+.AE
+.SH
+Introduction
+.LP
+.CW Sam
+is an interactive text editor that combines cut-and-paste interactive editing with
+an unusual command language based on the composition of regular expressions.
+It is written as two programs: one, the `host part,' runs on a UNIX system
+and implements the command language and provides file access; the other, the
+`terminal part,' runs asynchronously
+on a machine with a mouse and bitmap display
+and supports the display and interactive editing.
+The host part may be even run in isolation on an ordinary terminal
+to edit text using the command
+language, much like a traditional line editor,
+without assistance from a mouse or display.
+Most often,
+the terminal part runs on a Blit\u\s-4\&1\s+4\d terminal
+(actually on a Teletype DMD 5620, the production version of the Blit), whose
+host connection is an ordinary 9600 bps RS232 link;
+on the SUN computer the host and display processes run on a single machine,
+connected by a pipe.
+.PP
+.CW Sam
+edits uninterpreted
+ASCII text.
+It has no facilities for multiple fonts, graphics or tables,
+unlike MacWrite,\u\s-4\&2\s+4\d Bravo,\u\s-4\&3\s+4\d Tioga\u\s-4\&4\s+4\d
+or Lara.\u\s-4\&5\s+4\d
+Also unlike them, it has a rich command language.
+(Throughout this paper, the phrase
+.I
+command language
+.R
+refers to
+textual commands; commands activated from the mouse form the
+.I mouse
+.I language. )
+.CW Sam
+developed as an editor for use by programmers, and tries to join
+the styles of the UNIX text editor
+.CW ed \u\s-4\&6,7\s+4\d
+with that of interactive cut-and-paste editors by
+providing a comfortable mouse-driven interface
+to a program with a solid command language driven by regular expressions.
+The command language developed more than the mouse language, and
+acquired a notation for describing the structure of files
+more richly than as a sequence of lines,
+using a dataflow-like syntax for specifying changes.
+.PP
+The interactive style was influenced by
+.CW jim ,\u\s-4\&1\s+4\d
+an early cut-and-paste editor for the Blit, and by
+.CW mux ,\u\s-4\&8\s+4\d
+the Blit window system.
+.CW Mux
+merges the original Blit window system,
+.CW mpx ,\u\s-4\&1\s+4\d
+with cut-and-paste editing, forming something like a
+multiplexed version of
+.CW jim
+that edits the output of (and input to) command sessions rather than files.
+.PP
+The first part of this paper describes the command language, then the mouse
+language, and explains how they interact.
+That is followed by a description of the implementation,
+first of the host part, then of the terminal part.
+A principle that influenced the design of
+.CW sam
+is that it should have no explicit limits, such as upper limits on
+file size or line length.
+A secondary consideration is that it be efficient.
+To honor these two goals together requires a method for efficiently
+manipulating
+huge strings (files) without breaking them into lines,
+perhaps while making thousands of changes
+under control of the command language.
+.CW Sam 's
+method is to
+treat the file as a transaction database, implementing changes as atomic
+updates. These updates may be unwound easily to `undo' changes.
+Efficiency is achieved through a collection of caches that minimizes
+disc traffic and data motion, both within the two parts of the program
+and between them.
+.PP
+The terminal part of
+.CW sam
+is fairly straightforward.
+More interesting is how the two halves of the editor stay
+synchronized when either half may initiate a change.
+This is achieved through a data structure that organizes the
+communications and is maintained in parallel by both halves.
+.PP
+The last part of the paper chronicles the writing of
+.CW sam
+and discusses the lessons that were learned through its development and use.
+.PP
+The paper is long, but is composed largely of two papers of reasonable length:
+a description of the user interface of
+.CW sam
+and a discussion of its implementation.
+They are combined because the implementation is strongly influenced by
+the user interface, and vice versa.
+.SH
+The Interface
+.LP
+.CW Sam
+is a text editor for multiple files.
+File names may be provided when it is invoked:
+.P1
+sam file1 file2 ...
+.P2
+and there are commands
+to add new files and discard unneeded ones.
+Files are not read until necessary
+to complete some command.
+Editing operations apply to an internal copy
+made when the file is read; the UNIX file associated with the copy
+is changed only by an explicit command.
+To simplify the discussion, the internal copy is here called a
+.I file ,
+while the disc-resident original is called a
+.I
+disc file.
+.R
+.PP
+.CW Sam
+is usually connected to a bitmap display that presents a cut-and-paste
+editor driven by the mouse.
+In this mode, the command language is still available:
+text typed in a special window, called the
+.CW sam
+.I window,
+is interpreted
+as commands to be executed in the current file.
+Cut-and-paste editing may be used in any window \(em even in the
+.CW sam
+window to construct commands.
+The other mode of operation, invoked by starting
+.CW sam
+with the option
+.CW -d
+(for `no download'),
+does not use the mouse or bitmap display, but still permits
+editing using the textual command language, even on an ordinary terminal,
+interactively or from a script.
+.PP
+The following sections describe first the command language (under
+.CW sam\ -d
+and in the
+.CW sam
+window), and then the mouse interface.
+These two languages are nearly independent, but connect through the
+.I current
+.I text,
+described below.
+.SH 2
+The Command Language
+.LP
+A file consists of its contents, which are an array of characters
+(that is, a string); the
+.I name
+of the associated disc file; the
+.I
+modified bit
+.R
+that states whether the contents match those of
+the disc file;
+and a substring of the contents, called the
+.I
+current text
+.R
+or
+.I dot
+(see Figures 1 and 2).
+If the current text is a null string, dot falls between characters.
+The
+.I value
+of dot is the location of the current text; the
+.I contents
+of dot are the characters it contains.
+.CW Sam
+imparts to the text no two-dimensional interpretation such as columns
+or fields; text is always one-dimensional.
+Even the idea of a `line' of text as understood by most UNIX programs
+\(em a sequence of characters terminated by a newline character \(em
+is only weakly supported.
+.PP
+The
+.I
+current file
+.R
+is the file to which editing commands refer.
+The current text is therefore dot in the current file.
+If a command doesn't explicitly name a particular file or piece of text,
+the command is assumed to apply to the current text.
+For the moment, ignore the presence of multiple files and consider
+editing a single file.
+.KF L
+.XP fig1 3.5i
+.Cs
+Figure 1. A typical
+.CW sam
+screen, with the editing menu presented.
+The
+.CW sam
+(command language) window is in the middle, with file windows above and below.
+(The user interface makes it easy to create these abutting windows.)
+The partially obscured window is a third file window.
+The uppermost window is that to which typing and mouse operations apply,
+as indicated by its heavy border.
+Each window has its current text highlighted in reverse video.
+The
+.CW sam
+window's current text is the null string on the last visible line,
+indicated by a vertical bar.
+See also Figure 2.
+.Ce
+.KE
+.PP
+Commands have one-letter names.
+Except for non-editing commands such as writing
+the file to disc, most commands make some change
+to the text in dot and leave dot set to the text resulting from the change.
+For example, the delete command,
+.CW d ,
+deletes the text in dot, replacing it by the null string and setting dot
+to the result.
+The change command,
+.CW c ,
+replaces dot by text delimited by an arbitrary punctuation character,
+conventionally
+a slash. Thus,
+.P1
+c/Peter/
+.P2
+replaces the text in dot by the string
+.CW Peter .
+Similarly,
+.P1
+a/Peter/
+.P2
+(append) adds the string after dot, and
+.P1
+i/Peter/
+.P2
+(insert) inserts before dot.
+All three leave dot set to the new text,
+.CW Peter .
+.PP
+Newlines are part of the syntax of commands:
+the newline character lexically terminates a command.
+Within the inserted text, however, newlines are never implicit.
+But since it is often convenient to insert multiple lines of text,
+.CW sam
+has a special
+syntax for that case:
+.P1
+a
+some lines of text
+to be inserted in the file,
+terminated by a period
+on a line by itself
+\&.
+.P2
+In the one-line syntax, a newline character may be specified by a C-like
+escape, so
+.P1
+c/\en/
+.P2
+replaces dot by a single newline character.
+.PP
+.CW Sam
+also has a substitute command,
+.CW s :
+.P1
+s/\f2expression\fP/\f2replacement\fP/
+.P2
+substitutes the replacement text for the first match, in dot,
+of the regular expression.
+Thus, if dot is the string
+.CW Peter ,
+the command
+.P1
+s/t/st/
+.P2
+changes it to
+.CW Pester .
+In general,
+.CW s
+is unnecessary, but it was inherited from
+.CW ed
+and it has some convenient variations.
+For instance, the replacement text may include the matched text,
+specified by
+.CW & :
+.P1
+s/Peter/Oh, &, &, &, &!/
+.P2
+.PP
+There are also three commands that apply programs
+to text:
+.P1
+< \f2UNIX program\fP
+.P2
+replaces dot by the output of the UNIX program.
+Similarly, the
+.CW >
+command
+runs the program with dot as its standard input, and
+.CW |
+does both. For example,
+.P1
+| sort
+.P2
+replaces dot by the result of applying the standard sorting utility to it.
+Again, newlines have no special significance for these
+.CW sam
+commands.
+The text acted upon and resulting from these commands is not necessarily
+bounded by newlines, although for connection with UNIX programs,
+newlines may be necessary to obey conventions.
+.PP
+One more command:
+.CW p
+prints the contents of dot.
+Table I summarizes
+.CW sam 's
+commands.
+.KF
+.TS
+center;
+c s
+lfCW l.
+Table I. \f(CWSam\fP commands
+.sp .4
+.ft CW
+_
+.ft
+.sp .4
+\f1Text commands\fP
+.sp .4
+_
+.sp .4
+a/\f2text\fP/ Append text after dot
+c/\f2text\fP/ Change text in dot
+i/\f2text\fP/ Insert text before dot
+d Delete text in dot
+s/\f2regexp\fP/\f2text\fP/ Substitute text for match of regular expression in dot
+m \f2address\fP Move text in dot after address
+t \f2address\fP Copy text in dot after address
+.sp .4
+_
+.sp .4
+\f1Display commands\fP
+.sp .4
+_
+.sp .2
+p Print contents of dot
+\&= Print value (line numbers and character numbers) of dot
+.sp .4
+_
+.sp .4
+\f1File commands\fP
+.sp .4
+_
+.sp .2
+b \f2file-list\fP Set current file to first file in list that \f(CWsam\fP has in menu
+B \f2file-list\fP Same as \f(CWb\fP, but load new files
+n Print menu lines of all files
+D \f2file-list\fP Delete named files from \f(CWsam\fP
+.sp .4
+_
+.sp .4
+\f1I/O commands\fP
+.sp .4
+_
+.sp .2
+e \f2filename\fP Replace file with named disc file
+r \f2filename\fP Replace dot by contents of named disc file
+w \f2filename\fP Write file to named disc file
+f \f2filename\fP Set file name and print new menu line
+< \f2UNIX-command\fP Replace dot by standard output of command
+> \f2UNIX-command\fP Send dot to standard input of command
+| \f2UNIX-command\fP Replace dot by result of command applied to dot
+! \f2UNIX-command\fP Run the command
+.sp .4
+_
+.sp .4
+\f1Loops and conditionals\fP
+.sp .4
+_
+.sp .2
+x/\f2regexp\fP/ \f2command\fP For each match of regexp, set dot and run command
+y/\f2regexp\fP/ \f2command\fP Between adjacent matches of regexp, set dot and run command
+X/\f2regexp\fP/ \f2command\fP Run command in each file whose menu line matches regexp
+Y/\f2regexp\fP/ \f2command\fP Run command in each file whose menu line does not match
+g/\f2regexp\fP/ \f2command\fP If dot contains a match of regexp, run command
+v/\f2regexp\fP/ \f2command\fP If dot does not contain a match of regexp, run command
+.sp .4
+_
+.sp .4
+\f1Miscellany\fP
+.sp .4
+_
+.sp .2
+k Set address mark to value of dot
+q Quit
+u \f2n\fP Undo last \f2n\fP (default 1) changes
+{ } Braces group commands
+.sp .3
+.ft CW
+_
+.ft
+.TE
+.sp
+.KE
+.PP
+The value of dot may be changed by
+specifying an
+.I address
+for the command.
+The simplest address is a line number:
+.P1
+3
+.P2
+refers to the third line of the file, so
+.P1
+3d
+.P2
+deletes the third line of the file, and implicitly renumbers
+the lines so the old line 4 is now numbered 3.
+(This is one of the few places where
+.CW sam
+deals with lines directly.)
+Line
+.CW 0
+is the null string at the beginning of the file.
+If a command consists of only an address, a
+.CW p
+command is assumed, so typing an unadorned
+.CW 3
+prints line 3 on the terminal.
+There are a couple of other basic addresses:
+a period addresses dot itself; and
+a dollar sign
+.CW $ ) (
+addresses the null string at the end of the file.
+.PP
+An address is always a single substring of the file.
+Thus, the address
+.CW 3
+addresses the characters
+after the second newline of
+the file through the third newline of the file.
+A
+.I
+compound address
+.R
+is constructed by the comma operator
+.P1
+\f2address1\fP,\f2address2\fP
+.P2
+and addresses the substring of the file from the beginning of
+.I address1
+to the end of
+.I address2 .
+For example, the command
+.CW 3,5p
+prints the third through fifth lines of the file and
+.CW .,$d
+deletes the text from the beginning of dot to the end of the file.
+.PP
+These addresses are all absolute positions in the file, but
+.CW sam
+also has relative addresses, indicated by
+.CW +
+or
+.CW - .
+For example,
+.P1
+$-3
+.P2
+is the third line before the end of the file and
+.P1
+\&.+1
+.P2
+is the line after dot.
+If no address appears to the left of the
+.CW +
+or
+.CW - ,
+dot is assumed;
+if nothing appears to the right,
+.CW 1
+is assumed.
+Therefore,
+.CW .+1
+may be abbreviated to just a plus sign.
+.PP
+The
+.CW +
+operator acts relative to the end of its first argument, while the
+.CW -
+operator acts relative to the beginning. Thus
+.CW .+1
+addresses the first line after dot,
+.CW .-
+addresses the first line before dot, and
+.CW +-
+refers to the line containing the end of dot. (Dot may span multiple lines, and
+.CW +
+selects the line after the end of dot, then
+.CW -
+backs up one line.)
+.PP
+The final type of address is a regular expression, which addresses the
+text matched by the expression. The expression is enclosed in slashes, as in
+.P1
+/\f2expression\fP/
+.P2
+The expressions are the same as those in the UNIX program
+.CW egrep ,\u\s-4\&6,7\s+4\d
+and include closures, alternations, and so on.
+They find the
+.I
+leftmost longest
+.R
+string that matches the expression, that is,
+the first match after the point where the search is started,
+and if more than one match begins at the same spot, the longest such match.
+(I assume familiarity with the syntax for regular expressions in UNIX programs.\u\s-4\&9\s+4\d)
+For example,
+.P1
+/x/
+.P2
+matches the next
+.CW x
+character in the file,
+.P1
+/xx*/
+.P2
+matches the next run of one or more
+.CW x 's,
+and
+.P1
+/x|Peter/
+.P2
+matches the next
+.CW x
+or
+.CW Peter .
+For compatibility with other UNIX programs, the `any character' operator,
+a period,
+does not match a newline, so
+.P1
+/.*/
+.P2
+matches the text from dot to the end of the line, but excludes the newline
+and so will not match across
+the line boundary.
+.PP
+Regular expressions are always relative addresses.
+The direction is forwards by default,
+so
+.CW /Peter/
+is really an abbreviation for
+.CW +/Peter/ .
+The search can be reversed with a minus sign, so
+.P1
+.CW -/Peter/
+.P2
+finds the first
+.CW Peter
+before dot.
+Regular expressions may be used with other address forms, so
+.CW 0+/Peter/
+finds the first
+.CW Peter
+in the file and
+.CW $-/Peter/
+finds the last.
+Table II summarizes
+.CW sam 's
+addresses.
+.KF
+.TS
+center;
+c s
+lfCW l.
+Table II. \f(CWSam\fP addresses
+.sp .4
+.ft CW
+_
+.ft
+.sp .4
+\f1Simple addresses\fP
+.sp .4
+_
+.sp .2
+#\f2n\fP The empty string after character \f2n\fP
+\f2n\fP Line \f2n\fP.
+/\f2regexp\fP/ The first following match of the regular expression
+-/\f2regexp\fP/ The first previous match of the regular expression
+$ The null string at the end of the file
+\&. Dot
+\&' The address mark, set by \f(CWk\fP command
+"\f2regexp\fP" Dot in the file whose menu line matches regexp
+.sp .4
+_
+.sp .4
+\f1Compound addresses\fP
+.sp .4
+_
+.sp .2
+\f2a1\fP+\f2a2\fP The address \f2a2\fP evaluated starting at right of \f2a1\fP
+\f2a1\fP-\f2a2\fP \f2a2\fP evaluated in the reverse direction starting at left of \f2a1\fP
+\f2a1\fP,\f2a2\fP From the left of \f2a1\fP to the right of \f2a2\fP (default \f(CW0,$\fP)
+\f2a1\fP;\f2a2\fP Like \f(CW,\fP but sets dot after evaluating \f2a1\fP
+.sp .4
+_
+.sp .4
+.T&
+c s.
+T{
+The operators
+.CW +
+and
+.CW -
+are high precedence, while
+.CW ,
+and
+.CW ;
+are low precedence.
+In both
+.CW +
+and
+.CW -
+forms,
+.I a2
+defaults to 1 and
+.I a1
+defaults to dot.
+If both
+.I a1
+and
+.I a2
+are present,
+.CW +
+may be elided.
+T}
+.sp .5
+.ft CW
+_
+.ft
+.TE
+.sp
+.KE
+.PP
+The language discussed so far will not seem novel
+to people who use UNIX text editors
+such as
+.CW ed
+or
+.CW vi .\u\s-4\&9\s+4\d
+Moreover, the kinds of editing operations these commands allow, with the exception
+of regular expressions and line numbers,
+are clearly more conveniently handled by a mouse-based interface.
+Indeed,
+.CW sam 's
+mouse language (discussed at length below) is the means by which
+simple changes are usually made.
+For large or repetitive changes, however, a textual language
+outperforms a manual interface.
+.PP
+Imagine that, instead of deleting just one occurrence of the string
+.CW Peter ,
+we wanted to eliminate every
+.CW Peter .
+What's needed is an iterator that runs a command for each occurrence of some
+text.
+.CW Sam 's
+iterator is called
+.CW x ,
+for extract:
+.P1
+x/\f2expression\fP/ \f2command\fP
+.P2
+finds all matches in dot of the specified expression, and for each
+such match, sets dot to the text matched and runs the command.
+So to delete all the
+.CW Peters:
+.P1
+0,$ x/Peter/ d
+.P2
+(Blanks in these examples are to improve readability;
+.CW sam
+neither requires nor interprets them.)
+This searches the entire file
+.CW 0,$ ) (
+for occurrences of the string
+.CW Peter ,
+and runs the
+.CW d
+command with dot set to each such occurrence.
+(By contrast, the comparable
+.CW ed
+command would delete all
+.I lines
+containing
+.CW Peter ;
+.CW sam
+deletes only the
+.CW Peters .)
+The address
+.CW 0,$
+is commonly used, and may be abbreviated to just a comma.
+As another example,
+.P1
+, x/Peter/ p
+.P2
+prints a list of
+.CW Peters,
+one for each appearance in the file, with no intervening text (not even newlines
+to separate the instances).
+.PP
+Of course, the text extracted by
+.CW x
+may be selected by a regular expression,
+which complicates deciding what set of matches is chosen \(em
+matches may overlap. This is resolved by generating the matches
+starting from the beginning of dot using the leftmost-longest rule,
+and searching for each match starting from the end of the previous one.
+Regular expressions may also match null strings, but a null match
+adjacent to a non-null match is never selected; at least one character
+must intervene.
+For example,
+.P1
+, c/AAA/
+x/B*/ c/-/
+, p
+.P2
+produces as output
+.P1
+-A-A-A-
+.P2
+because the pattern
+.CW B*
+matches the null strings separating the
+.CW A 's.
+.PP
+The
+.CW x
+command has a complement,
+.CW y ,
+with similar syntax, that executes the command with dot set to the text
+.I between
+the matches of the expression.
+For example,
+.P1
+, c/AAA/
+y/A/ c/-/
+, p
+.P2
+produces the same result as the example above.
+.PP
+The
+.CW x
+and
+.CW y
+commands are looping constructs, and
+.CW sam
+has a pair of conditional commands to go with them.
+They have similar syntax:
+.P1
+g/\f2expression\fP/ \f2command\fP
+.P2
+(guard)
+runs the command exactly once if dot contains a match of the expression.
+This is different from
+.CW x ,
+which runs the command for
+.I each
+match:
+.CW x
+loops;
+.CW g
+merely tests, without changing the value of dot.
+Thus,
+.P1
+, x/Peter/ d
+.P2
+deletes all occurrences of
+.CW Peter ,
+but
+.P1
+, g/Peter/ d
+.P2
+deletes the whole file (reduces it to a null string) if
+.CW Peter
+occurs anywhere in the text.
+The complementary conditional is
+.CW v ,
+which runs the command if there is
+.I no
+match of the expression.
+.PP
+These control-structure-like commands may be composed to construct more
+involved operations. For example, to print those lines of text that
+contain the string
+.CW Peter :
+.P1
+, x/.*\en/ g/Peter/ p
+.P2
+The
+.CW x
+breaks the file into lines, the
+.CW g
+selects those lines containing
+.CW Peter ,
+and the
+.CW p
+prints them.
+This command gives an address for the
+.CW x
+command (the whole file), but because
+.CW g
+does not have an explicit address, it applies to the value of
+dot produced by the
+.CW x
+command, that is, to each line.
+All commands in
+.CW sam
+except for the command to write a file to disc use dot for the
+default address.
+.PP
+Composition may be continued indefinitely.
+.P1
+, x/.*\en/ g/Peter/ v/SaltPeter/ p
+.P2
+prints those lines containing
+.CW Peter
+but
+.I not
+those containing
+.CW SaltPeter .
+.SH 2
+Structural Regular Expressions
+.LP
+Unlike other UNIX text editors,
+including the non-interactive ones such as
+.CW sed
+and
+.CW awk ,\u\s-4\&7\s+4\d
+.CW sam
+is good for manipulating files with multi-line `records.'
+An example is an on-line phone book composed of records,
+separated by blank lines, of the form
+.P1
+Herbert Tic
+44 Turnip Ave., Endive, NJ
+201-5555642
+
+Norbert Twinge
+16 Potato St., Cabbagetown, NJ
+201-5553145
+
+\&...
+.P2
+The format may be encoded as a regular expression:
+.P1
+(.+\en)+
+.P2
+that is, a sequence of one or more non-blank lines.
+The command to print Mr. Tic's entire record is then
+.P1
+, x/(.+\en)+/ g/^Herbert Tic$/ p
+.P2
+and that to extract just the phone number is
+.P1
+, x/(.+\en)+/ g/^Herbert Tic$/ x/^[0-9]*-[0-9]*\en/ p
+.P2
+The latter command breaks the file into records,
+chooses Mr. Tic's record,
+extracts the phone number from the record,
+and finally prints the number.
+.PP
+A more involved problem is that of
+renaming a particular variable, say
+.CW n ,
+to
+.CW num
+in a C program.
+The obvious first attempt,
+.P1
+, x/n/ c/num/
+.P2
+is badly flawed: it changes not only the variable
+.CW n
+but any letter
+.CW n
+that appears.
+We need to extract all the variables, and select those that match
+.CW n
+and only
+.CW n :
+.P1
+, x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/
+.P2
+The pattern
+.CW [A-Za-z_][A-Za-z_0-9]*
+matches C identifiers.
+Next
+.CW g/n/
+selects those containing an
+.CW n .
+Then
+.CW v/../
+rejects those containing two (or more) characters, and finally
+.CW c/num/
+changes the remainder (identifiers
+.CW n )
+to
+.CW num .
+This version clearly works much better, but there may still be problems.
+For example, in C character and string constants, the sequence
+.CW \en
+is interpreted as a newline character, and we don't want to change it to
+.CW \enum.
+This problem can be forestalled with a
+.CW y
+command:
+.P1
+, y/\e\en/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/
+.P2
+(the second
+.CW \e
+is necessary because of lexical conventions in regular expressions),
+or we could even reject character constants and strings outright:
+.P1 0
+,y/'[^']*'/ y/"[^"]*"/ x/[A-Za-z_][A-Za-z_0-9]*/ g/n/ v/../ c/num/
+.P2
+The
+.CW y
+commands in this version exclude from consideration all character constants
+and strings.
+The only remaining problem is to deal with the possible occurrence of
+.CW \e'
+or
+.CW \e"
+within these sequences, but it's easy to see how to resolve this difficulty.
+.PP
+The point of these composed commands is successive refinement.
+A simple version of the command is tried, and if it's not good enough,
+it can be honed by adding a clause or two.
+(Mistakes can be undone; see below.
+Also, the mouse language makes it unnecessary to retype the command each time.)
+The resulting chains of commands are somewhat reminiscent of
+shell pipelines.\u\s-4\&7\s+4\d
+Unlike pipelines, though, which pass along modified
+.I data ,
+.CW sam
+commands pass a
+.I view
+of the data.
+The text at each step of the command is the same, but which pieces
+are selected is refined step by step until the correct piece is
+available to the final step of the command line, which ultimately makes the change.
+.PP
+In other UNIX programs, regular expressions are used only for selection,
+as in the
+.CW sam
+.CW g
+command, never for extraction as in the
+.CW x
+or
+.CW y
+command.
+For example, patterns in
+.CW awk \u\s-4\&7\s+4\d
+are used to select lines to be operated on, but cannot be used
+to describe the format of the input text, or to handle newline-free text.
+The use of regular expressions to describe the structure of a piece
+of text rather than its contents, as in the
+.CW x
+command,
+has been given a name:
+.I
+structural regular expressions.
+.R
+When they are composed, as in the above example,
+they are pleasantly expressive.
+Their use is discussed at greater length elsewhere.\u\s-4\&10\s+4\d
+.PP
+.SH 2
+Multiple files
+.LP
+.CW Sam
+has a few other commands, mostly relating to input and output.
+.P1
+e discfilename
+.P2
+replaces the contents and name of the current file with those of the named
+disc file;
+.P1
+w discfilename
+.P2
+writes the contents to the named disc file; and
+.P1
+r discfilename
+.P2
+replaces dot with the contents of the named disc file.
+All these commands use the current file's name if none is specified.
+Finally,
+.P1
+f discfilename
+.P2
+changes the name associated with the file and displays the result:
+.P1
+\&'-. discfilename
+.P2
+This output is called the file's
+.I
+menu line,
+.R
+because it is the contents of the file's line in the button 3 menu (described
+in the
+next section).
+The first three characters are a concise notation for the state of the file.
+The apostrophe signifies that the file is modified.
+The minus sign indicates the number of windows
+open on the file (see the next section):
+.CW -
+means none,
+.CW +
+means one, and
+.CW *
+means more than one.
+Finally, the period indicates that this is the current file.
+These characters are useful for controlling the
+.CW X
+command, described shortly.
+.PP
+.CW Sam
+may be started with a set of disc files (such as all the source for
+a program) by invoking it with a list of file names as arguments, and
+more may be added or deleted on demand.
+.P1
+B discfile1 discfile2 ...
+.P2
+adds the named files to
+.CW sam 's
+list, and
+.P1
+D discfile1 discfile2 ...
+.P2
+removes them from
+.CW sam 's
+memory (without effect on associated disc files).
+Both these commands have a syntax for using the shell\u\s-4\&7\s+4\d
+(the UNIX command interpreter) to generate the lists:
+.P1
+B <echo *.c
+.P2
+will add all C source files, and
+.P1
+B <grep -l variable *.c
+.P2
+will add all C source files referencing a particular variable
+(the UNIX command
+.CW grep\ -l
+lists all files in its arguments that contain matches of
+the specified regular expression).
+Finally,
+.CW D
+without arguments deletes the current file.
+.PP
+There are two ways to change which file is current:
+.P1
+b filename
+.P2
+makes the named file current.
+The
+.CW B
+command
+does the same, but also adds any new files to
+.CW sam 's
+list.
+(In practice, of course, the current file
+is usually chosen by mouse actions, not by textual commands.)
+The other way is to use a form of address that refers to files:
+.P1
+"\f2expression\fP" \f2address\fP
+.P2
+refers to the address evaluated in the file whose menu line
+matches the expression (there must be exactly one match).
+For example,
+.P1
+"peter.c" 3
+.P2
+refers to the third line of the file whose name matches
+.CW peter.c .
+This is most useful in the move
+.CW m ) (
+and copy
+.CW t ) (
+commands:
+.P1
+0,$ t "peter.c" 0
+.P2
+makes a copy of the current file at the beginning of
+.CW peter.c .
+.PP
+The
+.CW X
+command
+is a looping construct, like
+.CW x ,
+that refers to files instead of strings:
+.P1
+X/\f2expression\fP/ \f2command\fP
+.P2
+runs the command in all
+files whose menu lines match the expression. The best example is
+.P1
+X/'/ w
+.P2
+which writes to disc all modified files.
+.CW Y
+is the complement of
+.CW X :
+it runs the command on all files whose menu lines don't match the expression:
+.P1
+Y/\e.c/ D
+.P2
+deletes all files that don't have
+.CW \&.c
+in their names, that is, it keeps all C source files and deletes the rest.
+.PP
+Braces allow commands to be grouped, so
+.P1
+{
+ \f2command1\fP
+ \f2command2\fP
+}
+.P2
+is syntactically a single command that runs two commands.
+Thus,
+.P1
+X/\e.c/ ,g/variable/ {
+ f
+ , x/.*\en/ g/variable/ p
+}
+.P2
+finds all occurrences of
+.CW variable
+in C source files, and prints
+out the file names and lines of each match.
+The precise semantics of compound operations is discussed in the implementation
+sections below.
+.PP
+Finally,
+the undo command,
+.CW u ,
+undoes the last command,
+no matter how many files were affected.
+Multiple undo operations move further back in time, so
+.P1
+u
+u
+.P2
+(which may be abbreviated
+.CW u2 )
+undoes the last two commands. An undo may not be undone, however, nor
+may any command that adds or deletes files.
+Everything else is undoable, though, including for example
+.CW e
+commands:
+.P1
+e filename
+u
+.P2
+restores the state of the file completely, including its name, dot,
+and modified bit. Because of the undo, potentially dangerous commands
+are not guarded by confirmations. Only
+.CW D ,
+which destroys the information necessary to restore itself, is protected.
+It will not delete a modified file, but a second
+.CW D
+of the same file will succeed regardless.
+The
+.CW q
+command, which exits
+.CW sam ,
+is similarly guarded.
+.SH 2
+Mouse Interface
+.LP
+.CW Sam
+is most commonly run
+connected to a bitmap display and mouse for interactive editing.
+The only difference in the command language
+between regular, mouse-driven
+.CW sam
+and
+.CW sam\ -d
+is that if an address
+is provided without a command,
+.CW sam\ -d
+will print the text referenced by the address, but
+regular
+.CW sam
+will highlight it on the screen \(em in fact,
+dot is always highlighted (see Figure 2).
+.WS 1
+.KF
+.XP fig3 2.04i
+.Cs
+Figure 2. A
+.CW sam
+window. The scroll bar down the left
+represents the file, with the bubble showing the fraction
+visible in the window.
+The scroll bar may be manipulated by the mouse for convenient browsing.
+The current text,
+which is highlighted, need not fit on a line. Here it consists of one partial
+line, one complete line, and final partial line.
+.Ce
+.KE
+.PP
+Each file may have zero or more windows open on the display.
+At any time, only one window in all of
+.CW sam
+is the
+.I
+current window,
+.R
+that is, the window to which typing and mouse actions refer;
+this may be the
+.CW sam
+window (that in which commands may be typed)
+or one of the file windows.
+When a file has multiple windows, the image of the file in each window
+is always kept up to date.
+The current file is the last file affected by a command,
+so if the
+.CW sam
+window is current,
+the current window is not a window on the current file.
+However, each window on a file has its own value of dot,
+and when switching between windows on a single file,
+the file's value of dot is changed to that of the window.
+Thus, flipping between windows behaves in the obvious, convenient way.
+.PP
+The mouse on the Blit has three buttons, numbered left to right.
+Button 3 has a list of commands to manipulate windows,
+followed by a list of `menu lines' exactly as printed by the
+.CW f
+command, one per file (not one per window).
+These menu lines are sorted by file name.
+If the list is long, the Blit menu software will make it more manageable
+by generating a scrolling menu instead of an unwieldy long list.
+Using the menu to select a file from the list makes that file the current
+file, and the most recently current window in that file the current window.
+But if that file is already current, selecting it in the menu cycles through
+the windows on the file; this simple trick avoids a special menu to
+choose windows on a file.
+If there is no window open on the file,
+.CW sam
+changes the mouse cursor to prompt the user to create one.
+.PP
+The commands on the button 3 menu are straightforward (see Figure 3), and
+are like the commands to manipulate windows in
+.CW mux ,\u\s-4\&8\s+4\d
+the Blit's window system.
+.CW New
+makes a new file, and gives it one empty window, whose size is determined
+by a rectangle swept by the mouse.
+.CW Zerox
+prompts for a window to be selected, and
+makes a clone of that window; this is how multiple windows are created on one file.
+.CW Reshape
+changes the size of the indicated window, and
+.CW close
+deletes it. If that is the last window open on the file,
+.CW close
+first does a
+.CW D
+command on the file.
+.CW Write
+is identical to a
+.CW w
+command on the file; it is in the menu purely for convenience.
+Finally,
+.CW ~~sam~~
+is a menu item that appears between the commands and the file names.
+Selecting it makes the
+.CW sam
+window the current window,
+causing subsequent typing to be interpreted as commands.
+.KF
+.XP fig2 2.74i
+.Cs
+Figure 3. The menu on button 3.
+The black rectangle on the left is a scroll bar; the menu is limited to
+the length shown to prevent its becoming unwieldy.
+Above the
+.CW ~~sam~~
+line is a list of commands;
+beneath it is a list of files, presented exactly as with the
+.CW f
+command.
+.Ce
+.KE
+.PP
+When
+.CW sam
+requests that a window be swept, in response to
+.CW new ,
+.CW zerox
+or
+.CW reshape ,
+it changes the mouse cursor from the usual arrow to a box with
+a small arrow.
+In this state, the mouse may be used to indicate an arbitrary rectangle by
+pressing button 3 at one corner and releasing it at the opposite corner.
+More conveniently,
+button 3 may simply be clicked,
+whereupon
+.CW sam
+creates the maximal rectangle that contains the cursor
+and abuts the
+.CW sam
+window.
+By placing the
+.CW sam
+window in the middle of the screen, the user can define two regions (one above,
+one below) in which stacked fully-overlapping
+windows can be created with minimal fuss (see Figure 1).
+This simple user interface trick makes window creation noticeably easier.
+.PP
+The cut-and-paste editor is essentially the same as that in Smalltalk-80.\u\s-4\&11\s+4\d
+The text in dot is always highlighted on the screen.
+When a character is typed it replaces dot, and sets dot to the null
+string after the character. Thus, ordinary typing inserts text.
+Button 1 is used for selection:
+pressing the button, moving the mouse, and lifting the button
+selects (sets dot to) the text between the points where the
+button was pressed and released.
+Pressing and releasing at the same point selects a null string; this
+is called clicking. Clicking twice quickly, or
+.I
+double clicking,
+.R
+selects larger objects;
+for example, double clicking in a word selects the word,
+double clicking just inside an opening bracket selects the text
+contained in the brackets (handling nested brackets correctly),
+and similarly for
+parentheses, quotes, and so on.
+The double-clicking rules reflect a bias toward
+programmers.
+If
+.CW sam
+were intended more for word processing, double-clicks would probably
+select linguistic structures such as sentences.
+.PP
+If button 1 is pressed outside the current window, it makes the indicated
+window current.
+This is the easiest way to switch between windows and files.
+.PP
+Pressing button 2 brings up a menu of editing functions (see Figure 4).
+These mostly apply to the selected text:
+.CW cut
+deletes the selected text, and remembers it in a hidden buffer called the
+.I
+snarf buffer,
+.R
+.CW paste
+replaces the selected text by the contents of the snarf buffer,
+.CW snarf
+just copies the selected text to the snarf buffer,
+.CW look
+searches forward for the next literal occurrence of the selected text, and
+.CW <mux>
+exchanges snarf buffers with the window system in which
+.CW sam
+is running.
+Finally, the last regular expression used appears as a menu entry
+to search
+forward for the next occurrence of a match for the expression.
+.WS 1
+.KF
+.XP fig4 1.20i
+.Cs
+Figure 4. The menu on button 2.
+The bottom entry tracks the most recently used regular expression, which may
+be literal text.
+.Ce
+.KE
+.PP
+The relationship between the command language and the mouse language is
+entirely due to the equality of dot and the selected text chosen
+with button 1 on the mouse.
+For example, to make a set of changes in a C subroutine, dot can be
+set by double clicking on the left brace that begins the subroutine,
+which sets dot for the command language.
+An address-free command then typed in the
+.CW sam
+window will apply only to the text between the opening and closing
+braces of the function.
+The idea is to select what you want, and then say what you want
+to do with it, whether invoked by a menu selection or by a typed command.
+And of course, the value of dot is highlighted on
+the display after the command completes.
+This relationship between mouse interface and command language
+is clumsy to explain, but comfortable, even natural, in practice.
+.SH
+The Implementation
+.LP
+The next few sections describe how
+.CW sam
+is put together, first the host part,
+then the inter-component communication,
+then the terminal part.
+After explaining how the command language is implemented,
+the discussion follows (roughly) the path of a character
+from the temporary file on disc to the screen.
+The presentation centers on the data structures,
+because that is how the program was designed and because
+the algorithms are easy to provide, given the right data
+structures.
+.SH 2
+Parsing and execution
+.LP
+The command language is interpreted by parsing each command with a
+table-driven recursive
+descent parser, and when a complete command is assembled, invoking a top-down
+executor.
+Most editors instead employ a simple character-at-a-time
+lexical scanner.
+Use of a parser makes it
+easy and unambiguous to detect when a command is complete,
+which has two advantages.
+First, escape conventions such as backslashes to quote
+multiple-line commands are unnecessary; if the command isn't finished,
+the parser keeps reading. For example, a multiple-line append driven by an
+.CW x
+command is straightforward:
+.P1
+x/.*\en/ g/Peter/ a
+one line about Peter
+another line about Peter
+\&.
+.P2
+Other UNIX editors would require a backslash after all but the last line.
+.PP
+The other advantage is specific to the two-process structure of
+.CW sam .
+The host process must decide when a command is completed so the
+command interpreter can be called. This problem is easily resolved
+by having the lexical analyzer read the single stream of events from the
+terminal, directly executing all typing and mouse commands,
+but passing to the parser characters typed to the
+.CW sam
+command window.
+This scheme is slightly complicated by the availability of cut-and-paste
+editing in the
+.CW sam
+window, but that difficulty is resolved by applying the rules
+used in
+.CW mux :
+when a newline is typed to the
+.CW sam
+window, all text between the newline and the previously typed newline
+is made available to the parser.
+This permits arbitrary editing to be done to a command before
+typing newline and thereby requesting execution.
+.PP
+The parser is driven by a table because the syntax of addresses
+and commands is regular enough
+to be encoded compactly. There are few special cases, such as the
+replacement text in a substitution, so the syntax of almost all commands
+can be encoded with a few flags.
+These include whether the command allows an address (for example,
+.CW e
+does not), whether it takes a regular expression (as in
+.CW x
+and
+.CW s ),
+whether it takes replacement text (as in
+.CW c
+or
+.CW i ),
+which may be multi-line, and so on.
+The internal syntax of regular expressions is handled by a separate
+parser; a regular expression is a leaf of the command parse tree.
+Regular expressions are discussed fully in the next section.
+.PP
+The parser table also has information about defaults, so the interpreter
+is always called with a complete tree. For example, the parser fills in
+the implicit
+.CW 0
+and
+.CW $
+in the abbreviated address
+.CW ,
+(comma),
+inserts a
+.CW +
+to the left of an unadorned regular expression in an address,
+and provides the usual default address
+.CW .
+(dot) for commands that expect an address but are not given one.
+.PP
+Once a complete command is parsed, the evaluation is easy.
+The address is evaluated left-to-right starting from the value of dot,
+with a mostly ordinary expression evaluator.
+Addresses, like many of the data structures in
+.CW sam ,
+are held in a C structure and passed around by value:
+.P1
+typedef long Posn; /* Position in a file */
+typedef struct Range{
+ Posn p1, p2;
+}Range;
+typedef struct Address{
+ Range r;
+ File *f;
+}Address;
+.P2
+An address is encoded as a substring (character positions
+.CW p1
+to
+.CW p2 )
+in a file
+.CW f .
+(The data type
+.CW File
+is described in detail below.)
+.PP
+The address interpreter is an
+.CW Address -valued
+function that traverses the parse tree describing an address (the
+parse tree for the address has type
+.CW Addrtree ):
+.P1
+Address
+address(ap, a, sign)
+ Addrtree *ap;
+ Address a;
+ int sign;
+{
+ Address a2;
+ do
+ switch(ap->type){
+ case '.':
+ a=a.f->dot;
+ break;
+ case '$':
+ a.r.p1=a.r.p2=a.f->nbytes;
+ break;
+ case '"':
+ a=matchfile(a, ap->aregexp)->dot;
+ break;
+ case ',':
+ a2=address(ap->right, a, 0);
+ a=address(ap->left, a, 0);
+ if(a.f!=a2.f || a2.r.p2<a.r.p1)
+ error(Eorder);
+ a.r.p2=a2.r.p2;
+ return a;
+ /* and so on */
+ }
+ while((ap=ap->right)!=0);
+ return a;
+}
+.P2
+.PP
+Throughout, errors are handled by a non-local
+.CW goto
+(a
+.CW setjmp/longjmp
+in C terminology)
+hidden in a routine called
+.CW error
+that immediately aborts the execution, retracts any
+partially made changes (see the section below on `undoing'), and
+returns to the top level of the parser.
+The argument to
+.CW error
+is an enumeration type that
+is translated to a terse but possibly helpful
+message such as `?addresses out of order.'
+Very common messages are kept short; for example the message for
+a failed regular expression search is `?search.'
+.PP
+Character addresses such as
+.CW #3
+are trivial to implement, as the
+.CW File
+data structure is accessible by character number.
+However,
+.CW sam
+keeps no information about the position of newlines \(em it is too
+expensive to track dynamically \(em so line addresses are computed by reading
+the file, counting newlines. Except in very large files, this has proven
+acceptable: file access is fast enough to make the technique practical,
+and lines are not central to the structure of the command language.
+.PP
+The command interpreter, called
+.CW cmdexec ,
+is also straightforward. The parse table includes a
+function to call to interpret a particular command. That function
+receives as arguments
+the calculated address
+for the command
+and the command tree (of type
+.CW Cmdtree ),
+which may contain information such as the subtree for compound commands.
+Here, for example, is the function for the
+.CW g
+and
+.CW v
+commands:
+.P1
+int
+g_cmd(a, cp)
+ Address a;
+ Cmdtree *cp;
+{
+ compile(cp->regexp);
+ if(execute(a.f, a.r.p1, a.r.p2)!=(cp->cmdchar=='v')){
+ a.f->dot=a;
+ return cmdexec(a, cp->subcmd);
+ }
+ return TRUE; /* cause execution to continue */
+}
+.P2
+.CW Compile "" (
+and
+.CW execute
+are part of the regular expression code, described in the next section.)
+Because the parser and the
+.CW File
+data structure do most of the work, most commands
+are similarly brief.
+.SH 2
+Regular expressions
+.LP
+The regular expression code in
+.CW sam
+is an interpreted, rather than compiled on-the-fly, implementation of Thompson's
+non-deterministic finite automaton algorithm.\u\s-4\&12\s+4\d
+The syntax and semantics of the expressions are as in the UNIX program
+.CW egrep ,
+including alternation, closures, character classes, and so on.
+The only changes in the notation are two additions:
+.CW \en
+is translated to, and matches, a newline character, and
+.CW @
+matches any character. In
+.CW egrep ,
+the character
+.CW \&.
+matches any character except newline, and in
+.CW sam
+the same rule seemed safest, to prevent idioms like
+.CW \&.*
+from spanning newlines.
+.CW Egrep
+expressions are arguably too complicated for an interactive editor \(em
+certainly it would make sense if all the special characters were two-character
+sequences, so that most of the punctuation characters wouldn't have
+peculiar meanings \(em but for an interesting command language, full
+regular expressions are necessary, and
+.CW egrep
+defines the full regular expression syntax for UNIX programs.
+Also, it seemed superfluous to define a new syntax, since various UNIX programs
+.CW ed , (
+.CW egrep
+and
+.CW vi )
+define too many already.
+.PP
+The expressions are compiled by a routine,
+.CW compile ,
+that generates the description of the non-deterministic finite state machine.
+A second routine,
+.CW execute ,
+interprets the machine to generate the leftmost-longest match of the
+expression in a substring of the file.
+The algorithm is described elsewhere.\u\s-4\&12,13\s+4\d
+.CW Execute
+reports
+whether a match was found, and sets a global variable,
+of type
+.CW Range ,
+to the substring matched.
+.PP
+A trick is required to evaluate the expression in reverse, such as when
+searching backwards for an expression.
+For example,
+.P1
+-/P.*r/
+.P2
+looks backwards through the file for a match of the expression.
+The expression, however, is defined for a forward search.
+The solution is to construct a machine identical to the machine
+for a forward search except for a reversal of all the concatenation
+operators (the other operators are symmetric under direction reversal),
+to exchange the meaning of the operators
+.CW ^
+and
+.CW $ ,
+and then to read the file backwards, looking for the
+usual earliest longest match.
+.PP
+.CW Execute
+generates only one match each time it is called.
+To interpret looping constructs such as the
+.CW x
+command,
+.CW sam
+must therefore synchronize between
+calls of
+.CW execute
+to avoid
+problems with null matches.
+For example, even given the leftmost-longest rule,
+the expression
+.CW a*
+matches three times in the string
+.CW ab
+(the character
+.CW a ,
+the null string between the
+.CW a
+and
+.CW b ,
+and the final null string).
+After returning a match for the
+.CW a ,
+.CW sam
+must not match the null string before the
+.CW b .
+The algorithm starts
+.CW execute
+at the end of its previous match, and
+if the match it returns
+is null and abuts the previous match, rejects the match and advances
+the initial position one character.
+.SH 2
+Memory allocation
+.LP
+The C language has no memory allocation primitives, although a standard
+library routine,
+.CW malloc ,
+provides adequate service for simple programs.
+For specific uses, however,
+it can be better to write a custom allocator.
+The allocator (or rather, pair of allocators) described here
+work in both the terminal and host parts of
+.CW sam .
+They are designed for efficient manipulation of strings,
+which are allocated and freed frequently and vary in length from essentially
+zero to 32 Kbytes (very large strings are written to disc).
+More important, strings may be large and change size often,
+so to minimize memory usage it is helpful to reclaim and to coalesce the
+unused portions of strings when they are truncated.
+.PP
+Objects to be allocated in
+.CW sam
+are of two flavors:
+the first is C
+.CW structs ,
+which are small and often addressed by pointer variables;
+the second is variable-sized arrays of characters
+or integers whose
+base pointer is always used to access them.
+The memory allocator in
+.CW sam
+is therefore in two parts:
+first, a traditional first-fit allocator that provides fixed storage for
+.CW structs ;
+and second, a garbage-compacting allocator that reduces storage
+overhead for variable-sized objects, at the cost of some bookkeeping.
+The two types of objects are allocated from adjoining arenas, with
+the garbage-compacting allocator controlling the arena with higher addresses.
+Separating into two arenas simplifies compaction and prevents fragmentation due
+to immovable objects.
+The access rules for garbage-compactable objects
+(discussed in the next paragraph) allow them to be relocated, so when
+the first-fit arena needs space, it moves the garbage-compacted arena
+to higher addresses to make room. Storage is therefore created only
+at successively higher addresses, either when more garbage-compacted
+space is needed or when the first-fit arena pushes up the other arena.
+.PP
+Objects that may be compacted declare to the
+allocator a cell that is guaranteed to be the sole repository of the
+address of the object whenever a compaction can occur.
+The compactor can then update the address when the object is moved.
+For example, the implementation of type
+.CW List
+(really a variable-length array)
+is:
+.P1
+typedef struct List{
+ int nused;
+ long *ptr;
+}List;
+.P2
+The
+.CW ptr
+cell must always be used directly, and never copied. When a
+.CW List
+is to be created the
+.CW List
+structure is allocated in the ordinary first-fit arena
+and its
+.CW ptr
+is allocated in the garbage-compacted arena.
+A similar data type for strings, called
+.CW String ,
+stores variable-length character arrays of up to 32767 elements.
+.PP
+A related matter of programming style:
+.CW sam
+frequently passes structures by value, which
+simplifies the code.
+Traditionally, C programs have
+passed structures by reference, but implicit allocation on
+the stack is easier to use.
+Structure passing is a relatively new feature of C
+(it is not in the
+standard reference manual for C\u\s-4\&14\s+4\d), and is poorly supported in most
+commercial C compilers.
+It's convenient and expressive, though,
+and simplifies memory management by
+avoiding the allocator altogether
+and eliminating pointer aliases.
+.SH 2
+Data structures for manipulating files
+.LP
+Experience with
+.CW jim
+showed that the requirements
+of the file data structure were few, but strict.
+First, files need to be read and written quickly;
+adding a fresh file must be painless.
+Second, the implementation must place no arbitrary upper limit on
+the number or sizes of files. (It should be practical to edit many files,
+and files up to megabytes in length should be handled gracefully.)
+This implies that files be stored on disc, not in main memory.
+(Aficionados of virtual memory may argue otherwise, but the
+implementation of virtual
+memory in our system is not something to depend on
+for good performance.)
+Third, changes to files need be made by only two primitives:
+deletion and insertion.
+These are inverses of each other,
+which simplifies the implementation of the undo operation.
+Finally,
+it must be easy and efficient to access the file, either
+forwards or backwards, a byte at a time.
+.PP
+The
+.CW File
+data type is constructed from three simpler data structures that hold arrays
+of characters.
+Each of these types has an insertion and deletion operator, and the
+insertion and deletion operators of the
+.CW File
+type itself are constructed from them.
+.PP
+The simplest type is the
+.CW String ,
+which is used to hold strings in main memory.
+The code that manages
+.CW Strings
+guarantees that they will never be longer
+than some moderate size, and in practice they are rarely larger than 8 Kbytes.
+.CW Strings
+have two purposes: they hold short strings like file names with little overhead,
+and because they are deliberately small, they are efficient to modify.
+They are therefore used as the data structure for in-memory caches.
+.PP
+The disc copy of the file is managed by a data structure called a
+.CW Disc ,
+which corresponds to a temporary file. A
+.CW Disc
+has no storage in main memory other than bookkeeping information;
+the actual data being held is all on the disc.
+To reduce the number of open files needed,
+.CW sam
+opens a dozen temporary UNIX files and multiplexes the
+.CW Discs
+upon them.
+This permits many files to
+be edited; the entire
+.CW sam
+source (48 files) may be edited comfortably with a single
+instance of
+.CW sam .
+Allocating one temporary file per
+.CW Disc
+would strain the operating system's limit on the number of open files.
+Also, spreading the traffic among temporary files keeps the files shorter,
+and shorter files are more efficiently implemented by the UNIX
+I/O subsystem.
+.PP
+A
+.CW Disc
+is an array of fixed-length blocks, each of which contains
+between 1 and 4096 characters of active data.
+(The block size of our UNIX file system is 4096 bytes.)
+The block addresses within the temporary file and the length of each
+block are stored in a
+.CW List .
+When changes are made the live part of blocks may change size.
+Blocks are created and coalesced when necessary to try to keep the sizes
+between 2048 and 4096 bytes.
+An actively changing part of the
+.CW Disc
+therefore typically has about a kilobyte of slop that can be
+inserted or deleted
+without changing more than one block or affecting the block order.
+When an insertion would overflow a block, the block is split, a new one
+is allocated to receive the overflow, and the memory-resident list of blocks
+is rearranged to reflect the insertion of the new block.
+.PP
+Obviously, going to the disc for every modification to the file is
+prohibitively expensive.
+The data type
+.CW Buffer
+consists of a
+.CW Disc
+to hold the data and a
+.CW String
+that acts as a cache.
+This is the first of a series of caches throughout the data structures in
+.CW sam.
+The caches not only improve performance, they provide a way to organize
+the flow of data, particularly in the communication between the host
+and terminal.
+This idea is developed below, in the section on communications.
+.PP
+To reduce disc traffic, changes to a
+.CW Buffer
+are mediated by a variable-length string, in memory, that acts as a cache.
+When an insertion or deletion is made to a
+.CW Buffer ,
+if the change can be accommodated by the cache, it is done there.
+If the cache becomes bigger than a block because of an insertion,
+some of it is written to the
+.CW Disc
+and deleted from the cache.
+If the change does not intersect the cache, the cache is flushed.
+The cache is only loaded at the new position if the change is smaller than a block;
+otherwise, it is sent directly to the
+.CW Disc .
+This is because
+large changes are typically sequential,
+whereupon the next change is unlikely to overlap the current one.
+.PP
+A
+.CW File
+comprises a
+.CW String
+to hold the file name and some ancillary data such as dot and the modified bit.
+The most important components, though, are a pair of
+.CW Buffers ,
+one called the transcript and the other the contents.
+Their use is described in the next section.
+.PP
+The overall structure is shown in Figure 5.
+Although it may seem that the data is touched many times on its
+way from the
+.CW Disc ,
+it is read (by one UNIX system call) directly into the cache of the
+associated
+.CW Buffer ;
+no extra copy is done.
+Similarly, when flushing the cache, the text is written
+directly from the cache to disc.
+Most operations act directly on the text in the cache.
+A principle applied throughout
+.CW sam
+is that the fewer times the data is copied, the faster the program will run
+(see also the paper by Waite\u\s-4\&15\s+4\d).
+.KF
+.PS
+copy "fig5.pic"
+.PE
+.Cs
+Figure 5. File data structures.
+The temporary files are stored in the standard repository for such files
+on the host system.
+.Ce
+.KE
+.PP
+The contents of a
+.CW File
+are accessed by a routine that
+copies to a buffer a substring of a file starting at a specified offset.
+To read a byte at a time, a
+.CW File "" per-
+array is loaded starting from a specified initial position,
+and bytes may then be read from the array.
+The implementation is done by a macro similar to the C standard I/O
+.CW getc
+macro.\u\s-4\&14\s+4\d
+Because the reading may be done at any address, a minor change to the
+macro allows the file to be read backwards.
+This array is read-only; there is no
+.CW putc .
+.SH 2
+Doing and undoing
+.LP
+.CW Sam
+has an unusual method for managing changes to files.
+The command language makes it easy to specify multiple variable-length changes
+to a file millions of bytes long, and such changes
+must be made efficiently if the editor is to be practical.
+The usual techniques for inserting and deleting strings
+are inadequate under these conditions.
+The
+.CW Buffer
+and
+.CW Disc
+data structures are designed for efficient random access to long strings,
+but care must be taken to avoid super-linear behavior when making
+many changes simultaneously.
+.PP
+.CW Sam
+uses a two-pass algorithm for making changes, and treats each file as a database
+against which transactions are registered.
+Changes are not made directly to the contents.
+Instead, when a command is started, a `mark' containing
+a sequence number is placed in the transcript
+.CW Buffer ,
+and each change made to the file, either an insertion or deletion
+or a change to the file name,
+is appended to the end of the transcript.
+When the command is complete, the transcript is rewound to the
+mark and applied to the contents.
+.PP
+One reason for separating evaluation from
+application in this way is to simplify tracking the addresses of changes
+made in the middle of a long sequence.
+The two-pass algorithm also allows all changes to apply to the
+.I original
+data: no change can affect another change made in the same command.
+This is particularly important when evaluating an
+.CW x
+command because it prevents regular expression matches
+from stumbling over changes made earlier in the execution.
+Also, the two-pass
+algorithm is cleaner than the way other UNIX editors allow changes to
+affect each other;
+for example,
+.CW ed 's
+idioms to do things like delete every other line
+depend critically on the implementation.
+Instead,
+.CW sam 's
+simple model, in which all changes in a command occur effectively
+simultaneously, is easy to explain and to understand.
+.PP
+The records in the transcript are of the form ``delete substring from
+locations
+123 to 456'' and ``insert 11 characters `hello there' at location 789.''
+(It is an error if the changes are not at monotonically greater
+positions through the file.)
+While the update is occurring, these numbers must be
+offset by earlier changes, but that is straightforward and
+local to the update routine;
+moreover, all the numbers have been computed
+before the first is examined.
+.PP
+Treating the file as a transaction system has another advantage:
+undo is trivial.
+All it takes is to invert the transcript after it has been
+implemented, converting insertions
+into deletions and vice versa, and saving them in a holding
+.CW Buffer .
+The `do' transcript can then be deleted from
+the transcript
+.CW Buffer
+and replaced by the `undo' transcript.
+If an undo is requested, the transcript is rewound and the undo transcript
+executed.
+Because the transcript
+.CW Buffer
+is not truncated after each command, it accumulates
+successive changes.
+A sequence of undo commands
+can therefore back up the file arbitrarily,
+which is more helpful than the more commonly implemented self-inverse form of undo.
+.CW Sam "" (
+provides no way to undo an undo, but if it were desired,
+it would be easy to provide by re-interpreting the `do' transcript.)
+Each mark in the transcript contains a sequence number and the offset into
+the transcript of the previous mark, to aid in unwinding the transcript.
+Marks also contain the value of dot and the modified bit so these can be
+restored easily.
+Undoing multiple files is easy; it merely demands undoing all files whose
+latest change has the same sequence number as the current file.
+.PP
+Another benefit of having a transcript is that errors encountered in the middle
+of a complicated command need not leave the files in an intermediate state.
+By rewinding the transcript to the mark beginning the command,
+the partial command can be trivially undone.
+.PP
+When the update algorithm was first implemented, it was unacceptably slow,
+so a cache was added to coalesce nearby changes,
+replacing multiple small changes by a single larger one.
+This reduced the number
+of insertions into the transaction
+.CW Buffer ,
+and made a dramatic improvement in performance,
+but made it impossible
+to handle changes in non-monotonic order in the file; the caching method
+only works if changes don't overlap.
+Before the cache was added, the transaction could in principle be sorted
+if the changes were out of order, although
+this was never done.
+The current status is therefore acceptable performance with a minor
+restriction on global changes, which is sometimes, but rarely, an annoyance.
+.PP
+The update algorithm obviously paws the data more than simpler
+algorithms, but it is not prohibitively expensive;
+the caches help.
+(The principle of avoiding copying the data is still honored here,
+although not as piously:
+the data is moved from contents' cache to
+the transcript's all at once and through only one internal buffer.)
+Performance figures confirm the efficiency.
+To read from a dead start a hundred kilobyte file on a VAX-11/750
+takes 1.4 seconds of user time, 2.5 seconds of system time,
+and 5 seconds of real time.
+Reading the same file in
+.CW ed
+takes 6.0 seconds of user time, 1.7 seconds of system time,
+and 8 seconds of real time.
+.CW Sam
+uses about half the CPU time.
+A more interesting example is the one stated above:
+inserting a character between every pair of characters in the file.
+The
+.CW sam
+command is
+.P1
+,y/@/ a/x/
+.P2
+and takes 3 CPU seconds per kilobyte of input file, of which
+about a third is spent in the regular expression code.
+This translates to about 500 changes per second.
+.CW Ed
+takes 1.5 seconds per kilobyte to make a similar change (ignoring newlines),
+but cannot undo it.
+The same example in
+.CW ex ,\u\s-4\&9\s+4\d
+a variant of
+.CW ed
+done at the University of California at Berkeley,
+which allows one level of undoing, again takes 3 seconds.
+In summary,
+.CW sam 's
+performance is comparable to that of other UNIX editors, although it solves
+a harder problem.
+.SH 2
+Communications
+.LP
+The discussion so far has described the implementation of the host part of
+.CW sam ;
+the next few sections explain how a machine with mouse and bitmap display
+can be engaged to improve interaction.
+.CW Sam
+is not the first editor to be written as two processes,\u\s-4\&16\s+4\d
+but its implementation
+has some unusual aspects.
+.PP
+There are several ways
+.CW sam 's
+host and terminal parts may be connected.
+The first and simplest is to forgo the terminal part and use the host
+part's command language to edit text on an ordinary terminal.
+This mode is invoked by starting
+.CW sam
+with the
+.CW -d
+option.
+With no options,
+.CW sam
+runs separate host and terminal programs,
+communicating with a message protocol over the physical
+connection that joins them.
+Typically, the connection is an RS-232 link between a Blit
+(the prototypical display for
+.CW sam )
+and a host running
+the Ninth Edition of the UNIX operating system.\u\s-4\&8\s+4\d
+(This is the version of the system used in the Computing Sciences Research
+Center at AT&T Bell Laboratories [now Lucent Technologies, Bell Labs], where I work. Its relevant
+aspects are discussed in the Blit paper.\u\s-4\&1\s+4\d)
+The implementation of
+.CW sam
+for the SUN computer runs both processes on the same machine and
+connects them by a pipe.
+.PP
+The low bandwidth of an RS-232 link
+necessitated the split between
+the two programs.
+The division is a mixed blessing:
+a program in two parts is much harder to write and to debug
+than a self-contained one,
+but the split makes several unusual configurations possible.
+The terminal may be physically separated from the host, allowing the conveniences
+of a mouse and bitmap display to be taken home while leaving the files at work.
+It is also possible to run the host part on a remote machine:
+.P1
+sam -r host
+.P2
+connects to the terminal in the usual way, and then makes a call
+across the network to establish the host part of
+.CW sam
+on the named machine.
+Finally, it cross-connects the I/O to join the two parts.
+This allows
+.CW sam
+to be run on machines that do not support bitmap displays;
+for example,
+.CW sam
+is the editor of choice on our Cray X-MP/24.
+.CW Sam
+.CW -r
+involves
+.I three
+machines: the remote host, the terminal, and the local host.
+The local host's job is simple but vital: it passes the data
+between the remote host and terminal.
+.PP
+The host and terminal exchange messages asynchronously
+(rather than, say, as remote procedure calls) but there is no
+error detection or correction
+because, whatever the configuration, the connection is reliable.
+Because the terminal handles mundane interaction tasks such as
+popping up menus and interpreting the responses, the messages are about
+data, not actions.
+For example, the host knows nothing about what is displayed on the screen,
+and when the user types a character, the message sent to the host says
+``insert a one-byte string at location 123 in file 7,'' not ``a character
+was typed at the current position in the current file.''
+In other words, the messages look very much like the transaction records
+in the transcripts.
+.PP
+Either the host or terminal part of
+.CW sam
+may initiate a change to a file.
+The command language operates on the host, while typing and some
+mouse operations are executed directly in the terminal to optimize response.
+Changes initiated by the host program must be transmitted to the terminal,
+and
+vice versa.
+(A token is exchanged to determine which end is in control,
+which means that characters typed while a time-consuming command runs
+must be buffered and do not appear until the command is complete.)
+To maintain consistent information,
+the host and terminal track changes through a per-file
+data structure that records what portions of the file
+the terminal has received.
+The data structure, called a
+.CW Rasp
+(a weak pun: it's a file with holes)
+is held and updated by both the host and terminal.
+A
+.CW Rasp
+is a list of
+.CW Strings
+holding those parts of the file known to the terminal,
+separated by counts of the number of bytes in the interstices.
+Of course, the host doesn't keep a separate copy of the data (it only needs
+the lengths of the various pieces),
+but the structure is the same on both ends.
+.PP
+The
+.CW Rasp
+in the terminal doubles as a cache.
+Since the terminal keeps the text for portions of the file it has displayed,
+it need not request data from the host when revisiting old parts of the file
+or redrawing obscured windows, which speeds things up considerably
+over low-speed links.
+.PP
+It's trivial for the terminal to maintain its
+.CW Rasp ,
+because all changes made on the terminal apply to parts of the file
+already loaded there.
+Changes made by the host are compared against the
+.CW Rasp
+during the update sequence after each command.
+Small changes to pieces of the file loaded in the terminal
+are sent in their entirety.
+Larger changes, and changes that fall entirely in the holes,
+are transmitted as messages without literal data:
+only the lengths of the deleted and inserted strings are transmitted.
+When a command is completed, the terminal examines its visible
+windows to see if any holes in their
+.CW Rasps
+intersect the visible portion of the file.
+It then requests the missing data from the host,
+along with up to 512 bytes of surrounding data, to minimize
+the number of messages when visiting a new portion of the file.
+This technique provides a kind of two-level lazy evaluation for the terminal.
+The first level sends a minimum of information about
+parts of the file not being edited interactively;
+the second level waits until a change is displayed before
+transmitting the new data.
+Of course,
+performance is also helped by having the terminal respond immediately to typing
+and simple mouse requests.
+Except for small changes to active pieces of the file, which are
+transmitted to the terminal without negotiation,
+the terminal is wholly responsible for deciding what is displayed;
+the host uses the
+.CW Rasp
+only to tell the terminal what might be relevant.
+.PP
+When a change is initiated by the host,
+the messages to the terminal describing the change
+are generated by the routine that applies the transcript of the changes
+to the contents of the
+.CW File .
+Since changes are undone by the same update routine,
+undoing requires
+no extra code in the communications;
+the usual messages describing changes to the file are sufficient
+to back up the screen image.
+.PP
+The
+.CW Rasp
+is a particularly good example of the way caches are used in
+.CW sam .
+First, it facilitates access to the active portion of the text by placing
+the busy text in main memory.
+In so doing, it provides efficient access
+to a large data structure that does not fit in memory.
+Since the form of data is to be imposed by the user, not by the program,
+and because characters will frequently be scanned sequentially,
+files are stored as flat objects.
+Caches help keep performance good and linear when working with such
+data.
+.PP
+Second, the
+.CW Rasp
+and several of the other caches have some
+.I read-ahead;
+that is, the cache is loaded with more information than is needed for
+the job immediately at hand.
+When manipulating linear structures, the accesses are usually sequential,
+and read-ahead can significantly reduce the average time to access the
+next element of the object.
+Sequential access is a common mode for people as well as programs;
+consider scrolling through a document while looking for something.
+.PP
+Finally, like any good data structure,
+the cache guides the algorithm, or at least the implementation.
+The
+.CW Rasp
+was actually invented to control the communications between the host and
+terminal parts, but I realized very early that it was also a form of
+cache. Other caches were more explicitly intended to serve a double
+purpose: for example, the caches in
+.CW Files
+that coalesce updates not only reduce traffic to the
+transcript and contents
+.CW Buffers ,
+they also clump screen updates so that complicated changes to the
+screen are achieved in
+just a few messages to the terminal.
+This saved me considerable work: I did not need to write special
+code to optimize the message traffic to the
+terminal.
+Caches pay off in surprising ways.
+Also, they tend to be independent, so their performance improvements
+are multiplicative.
+.SH 2
+Data structures in the terminal
+.LP
+The terminal's job is to display and to maintain a consistent image of
+pieces of the files being edited.
+Because the text is always in memory, the data structures are
+considerably simpler than those in the host part.
+.PP
+.CW Sam
+typically has far more windows than does
+.CW mux ,
+the window system within which its Blit implementation runs.
+.CW Mux
+has a fairly small number of asynchronously updated windows;
+.CW sam
+needs a large number of synchronously updated windows that are
+usually static and often fully obscured.
+The different tradeoffs guided
+.CW sam
+away from the memory-intensive implementation of windows, called
+.CW Layers ,\u\s-4\&17\s+4\d
+used in
+.CW mux.
+Rather than depending on a complete bitmap image of the display for each window,
+.CW sam
+regenerates the image from its in-memory text
+(stored in the
+.CW Rasp )
+when necessary, although it will use such an image if it is available.
+Like
+.CW Layers ,
+though,
+.CW sam
+uses the screen bitmap as active storage in which to update the image using
+.CW bitblt .\u\s-4\&18,19\s+4\d
+The resulting organization, pictured in Figure 6,
+has a global array of windows, called
+.CW Flayers ,
+each of which holds an image of a piece of text held in a data structure
+called a
+.CW Frame ,
+which in turn represents
+a rectangular window full of text displayed in some
+.CW Bitmap .
+Each
+.CW Flayer
+appears in a global list that orders them all front-to-back
+on the display, and simultaneously as an element of a per-file array
+that holds all the open windows for that file.
+The complement in the terminal of the
+.CW File
+on the host is called a
+.CW Text ;
+each connects its
+.CW Flayers
+to the associated
+.CW Rasp .
+.KF
+.PS
+copy "fig6.pic"
+.PE
+.Cs
+Figure 6. Data structures in the terminal.
+.CW Flayers
+are also linked together into a front-to-back list.
+.CW Boxes
+are discussed in the next section.
+.Ce
+.KE
+.PP
+The
+.CW Bitmap
+for a
+.CW Frame
+contains the image of the text.
+For a fully visible window, the
+.CW Bitmap
+will be the screen (or at least the
+.CW Layer
+in which
+.CW sam
+is being run),
+while for partially obscured windows the
+.CW Bitmap
+will be off-screen.
+If the window is fully obscured, the
+.CW Bitmap
+will be null.
+.PP
+The
+.CW Bitmap
+is a kind of cache.
+When making changes to the display, most of the original image will
+look the same in the final image, and the update algorithms exploit this.
+The
+.CW Frame
+software updates the image in the
+.CW Bitmap
+incrementally; the
+.CW Bitmap
+is not just an image, it is a data structure.\u\s-4\&18,19\s+4\d
+The job of the software that updates the display is therefore
+to use as much as possible of the existing image (converting the
+text from ASCII characters to pixels is expensive) in a sort of two-dimensional
+string insertion algorithm.
+The details of this process are described in the next section.
+.PP
+The
+.CW Frame
+software has no code to support overlapping windows;
+its job is to keep a single
+.CW Bitmap
+up to date.
+It falls to the
+.CW Flayer
+software to multiplex the various
+.CW Bitmaps
+onto the screen.
+The problem of maintaining overlapping
+.CW Flayers
+is easier than for
+.CW Layers \u\s-4\&17\s+4\d
+because changes are made synchronously and because the contents of the window
+can be reconstructed from the data stored in the
+.CW Frame ;
+the
+.CW Layers
+software
+makes no such assumptions.
+In
+.CW sam ,
+the window being changed is almost always fully visible, because the current
+window is always fully visible, by construction.
+However, when multi-file changes are being made, or when
+more than one window is open on a file,
+it may be necessary to update partially obscured windows.
+.PP
+There are three cases: the window is
+fully visible, invisible (fully obscured), or partially visible.
+If fully visible, the
+.CW Bitmap
+is part of the screen, so when the
+.CW Flayer
+update routine calls the
+.CW Frame
+update routine, the screen will be updated directly.
+If the window is invisible,
+there is no associated
+.CW Bitmap ,
+and all that is necessary is to update the
+.CW Frame
+data structure, not the image.
+If the window is partially visible, the
+.CW Frame
+routine is called to update the image in the off-screen
+.CW Bitmap ,
+which may require regenerating it from the text of the window.
+The
+.CW Flayer
+code then clips this
+.CW Bitmap
+against the
+.CW Bitmaps
+of all
+.CW Frames
+in front of the
+.CW Frame
+being modified, and the remainder is copied to the display.
+.PP
+This is much faster than recreating the image off-screen
+for every change, or clipping all the changes made to the image
+during its update.
+Unfortunately, these caches can also consume prohibitive amounts of
+memory, so they are freed fairly liberally \(em after every change to the
+front-to-back order of the
+.CW Flayers .
+The result is that
+the off-screen
+.CW Bitmaps
+exist only while multi-window changes are occurring,
+which is the only time the performance improvement they provide is needed.
+Also, the user interface causes fully-obscured windows to be the
+easiest to make \(em
+creating a canonically sized and placed window requires only a button click
+\(em which reduces the need for caching still further.
+.PP
+.SH 2
+Screen update
+.LP
+Only two low-level primitives are needed for incremental update:
+.CW bitblt ,
+which copies rectangles of pixels, and
+.CW string
+(which in turn calls
+.CW bitblt ),
+which draws a null-terminated character string in a
+.CW Bitmap .
+A
+.CW Frame
+contains a list of
+.CW Boxes ,
+each of which defines a horizontal strip of text in the window
+(see Figure 7).
+A
+.CW Box
+has a character string
+.CW str ,
+and a
+.CW Rectangle
+.CW rect
+that defines the location of the strip in the window.
+(The text in
+.CW str
+is stored in the
+.CW Box
+separately from the
+.CW Rasp
+associated with the window's file, so
+.CW Boxes
+are self-contained.)
+The invariant is that
+the image of the
+.CW Box
+can be reproduced by calling
+.CW string
+with argument
+.CW str
+to draw the string in
+.CW rect ,
+and the resulting picture fits perfectly within
+.CW rect .
+In other words, the
+.CW Boxes
+define the tiling of the window.
+The tiling may be complicated by long lines of text, which
+are folded onto the next line.
+Some editors use horizontal scrolling to avoid this complication,
+but to be comfortable this technique requires that lines not be
+.I too
+long;
+.CW sam
+has no such restriction.
+Also, and perhaps more importantly, UNIX programs and terminals traditionally fold
+long lines to make their contents fully visible.
+.PP
+Two special kinds of
+.CW Boxes
+contain a single
+character: either a newline or a tab.
+Newlines and tabs are white space.
+A newline
+.CW Box
+always extends to the right edge of the window,
+forcing the following
+.CW Box
+to the next line.
+The width of a tab depends on where it is located:
+it forces the next
+.CW Box
+to begin at a tab location.
+Tabs also
+have a minimum width equivalent to a blank (blanks are
+drawn by
+.CW string
+and are not treated specially); newlines have a minimum width of zero.
+.KF
+.PS
+copy "fig7.pic"
+.PE
+.sp .5
+.Cs
+Figure 7. A line of text showing its
+.CW Boxes .
+The first two blank
+.CW Boxes
+contain tabs; the last contains a newline.
+Spaces are handled as ordinary characters.
+.Ce
+.KE
+.PP
+The update algorithms always use the
+.CW Bitmap
+image of the text (either the display or cache
+.CW Bitmap );
+they never examine the characters within a
+.CW Box
+except when the
+.CW Box
+needs to be split in two.
+Before a change, the window consists of a tiling of
+.CW Boxes ;
+after the change the window is tiled differently.
+The update algorithms rearrange the tiles in place, without
+backup storage.
+The algorithms are not strictly optimal \(em for example, they can
+clear a pixel that is later going to be written upon \(em
+but they never move a tile that doesn't need to be moved,
+and they move each tile at most once.
+.CW Frinsert
+on a Blit can absorb over a thousand characters a second if the strings
+being inserted are a few tens of characters long.
+.PP
+Consider
+.CW frdelete .
+Its job is to delete a substring from a
+.CW Frame
+and restore the image of the
+.CW Frame .
+The image of a substring has a peculiar shape (see Figure 2) comprising
+possibly a partial line,
+zero or more full lines,
+and possibly a final partial line.
+For reference, call this the
+.I
+Z-shape.
+.R
+.CW Frdelete
+begins by splitting, if necessary, the
+.CW Boxes
+containing the ends of
+the substring so the substring begins and ends on
+.CW Box
+boundaries.
+Because the substring is being deleted, its image is not needed,
+so the Z-shape is then cleared.
+Then, tiles (that is, the images of
+.CW Boxes )
+are copied, using
+.CW bitblt ,
+from immediately after the Z-shape to
+the beginning of the Z-shape,
+resulting in a new Z-shape.
+.CW Boxes "" (
+whose contents would span two lines in the new position must first be split.)
+.PP
+Copying the remainder of the
+.CW Frame
+tile by tile
+this way will clearly accomplish the deletion but eventually,
+typically when the copying algorithm encounters a tab or newline,
+the old and new
+.CW x
+coordinates of the tile
+to be copied are the same.
+This correspondence implies
+that the Z-shape has its beginning and ending edges aligned
+vertically, and a sequence of at most two
+.CW bitblts
+can be used to copy the remaining tiles.
+The last step is to clear out the resulting empty space at the bottom
+of the window;
+the number of lines to be cleared is the number of complete lines in the
+Z-shape closed by the final
+.CW bitblts.
+The final step is to merge horizontally adjacent
+.CW Boxes
+of plain text.
+The complete source to
+.CW frdelete
+is less than 100 lines of C.
+.PP
+.CW frinsert
+is more complicated because it must do four passes:
+one to construct the
+.CW Box
+list for the inserted string,
+one to reconnoitre,
+one to copy (in opposite order to
+.CW frdelete )
+the
+.CW Boxes
+to make the hole for the new text,
+and finally one to copy the new text into place.
+Overall, though,
+.CW frinsert
+has a similar flavor to
+.CW frdelete ,
+and needn't be described further.
+.CW Frinsert
+and its subsidiary routines comprise 211 lines of C.
+.PP
+The terminal source code is 3024 lines of C,
+and the host source is 5797 lines.
+.SH
+Discussion
+.SH 2
+History
+.LP
+The immediate ancestor of
+.CW sam
+was the original text editor for the Blit, called
+.CW jim .
+.CW Sam
+inherited
+.CW jim 's
+two-process structure and mouse language almost unchanged, but
+.CW jim
+suffered from several drawbacks that were addressed in the design of
+.CW sam .
+The most important of these was the lack of a command language.
+Although
+.CW jim
+was easy to use for simple editing, it provided no direct help with
+large or repetitive editing tasks. Instead, it provided a command to pass
+selected text through a shell pipeline,
+but this was no more satisfactory than could be expected of a stopgap measure.
+.PP
+.CW Jim
+was written primarily as a vehicle for experimenting with a mouse-based
+interface to text, and the experiment was successful.
+.CW Jim
+had some spin-offs:
+.CW mux ,
+the second window system for the Blit, is essentially a multiplexed
+version of the terminal part of
+.CW jim ;
+and the debugger
+.CW pi 's
+user interface\u\s-4\&20\s+4\d was closely modeled on
+.CW jim 's.
+But after a couple of years,
+.CW jim
+had become difficult to maintain and limiting to use,
+and its replacement was overdue.
+.PP
+I began the design of
+.CW sam
+by asking
+.CW jim
+customers what they wanted.
+This was probably a mistake; the answers were essentially a list of features
+to be found in other editors, which did not provide any of the
+guiding principles I was seeking.
+For instance, one common request was for a ``global substitute,''
+but no one suggested how to provide it within a cut-and-paste editor.
+I was looking for a scheme that would
+support such specialized features comfortably in the context of some
+general command language.
+Ideas were not forthcoming, though, particularly given my insistence
+on removing all limits on file sizes, line lengths and so on.
+Even worse, I recognized that, since the mouse could easily
+indicate a region of the screen that was not an integral number of lines,
+the command language would best forget about newlines altogether,
+and that meant the command language had to treat the file as a single
+string, not an array of lines.
+.PP
+Eventually, I decided that thinking was not getting me very far and it was
+time to try building.
+I knew that the terminal part could be built easily \(em
+that part of
+.CW jim
+behaved acceptably well \(em and that most of the hard work was going
+to be in the host part: the file interface, command interpreter and so on.
+Moreover, I had some ideas about how the architecture of
+.CW jim
+could be improved without destroying its basic structure, which I liked
+in principle but which hadn't worked out as well as I had hoped.
+So I began by designing the file data structure,
+starting with the way
+.CW jim
+worked \(em comparable to a single structure merging
+.CW Disc
+and
+.CW Buffer ,
+which I split to make the cache more general
+\(em and thinking about how global substitute could be implemented.
+The answer was clearly that it had to be done in two passes,
+and the transcript-oriented implementation fell out naturally.
+.PP
+.CW Sam
+was written bottom-up,
+starting from the data structures and algorithms for manipulating text,
+through the command language and up to the code for maintaining
+the display.
+In retrospect, it turned out well, but this implementation method is
+not recommended in general.
+There were several times when I had a large body of interesting code
+assembled and no clue how to proceed with it.
+The command language, in particular, took almost a year to figure out,
+but can be implemented (given what was there at the beginning of that year)
+in a day or two. Similarly, inventing the
+.CW Rasp
+data structure delayed the
+connection of the host and terminal pieces by another few months.
+.CW Sam
+took about two years to write, although only about four months were
+spent actually working on it.
+.PP
+Part of the design process was unusual:
+the subset of the protocol that maintains the
+.CW Rasp
+was simulated, debugged
+and verified by an automatic protocol analyzer,\u\s-4\&21\s+4\d and was bug-free
+from the start.
+The rest of the protocol, concerned mostly
+with keeping menus up to date,
+was unfortunately too unwieldy for such analysis,
+and was debugged by more traditional methods, primarily
+by logging in a file all messages in and out of the host.
+.SH 2
+Reflections
+.LP
+.CW Sam
+is essentially the only interactive editor used by the sixty or so members of
+the computing science research center in which I work.
+The same could not be said of
+.CW jim ;
+the lack of a command language kept some people from adopting it.
+The union of a user interface as comfortable as
+.CW jim 's
+with a command language as powerful as
+.CW ed 's†
+.FS
+.vs 9
+†The people who criticize
+.CW ed
+as an interactive program often forget that it and its close relative
+.CW sed \u\s-4\&7\s+4\d
+still thrive as programmable editors. The strength of these programs is
+independent of their convenience for interactive editing.
+.br
+.vs
+.FE
+is essential to
+.CW sam 's
+success.
+When
+.CW sam
+was first made available to the
+.CW jim
+community,
+almost everyone switched to it within two or three days.
+In the months that followed, even people who had never adopted
+.CW jim
+started using
+.CW sam
+exclusively.
+.PP
+To be honest,
+.CW ed
+still gets occasional use, but usually when
+something quick needs to be done and the overhead of
+downloading the terminal part of
+.CW sam
+isn't worth the trouble.
+Also, as a `line' editor,
+.CW sam
+.CW -d
+is a bit odd;
+when using a good old ASCII terminal, it's comforting to have
+a true line editor.
+But it is fair to say that
+.CW sam 's
+command language has displaced
+.CW ed 's
+for most of the complicated editing that has kept line editors
+(that is, command-driven editors) with us.
+.PP
+.CW Sam 's
+command language is even fancier than
+.CW ed 's,
+and most
+.CW sam
+customers don't come near to using all its capabilities.
+Does it need to be so sophisticated?
+I think the answer is yes, for two reasons.
+.PP
+First, the
+.I model
+for
+.CW sam 's
+command language is really relatively simple, and certainly simpler than that of
+.CW ed .
+For instance, there is only one kind of textual loop in
+.CW sam
+\(em the
+.CW x
+command \(em
+while
+.CW ed
+has three (the
+.CW g
+command, the global flag on substitutions, and the implicit loop over
+lines in multi-line substitutions).
+Also,
+.CW ed 's
+substitute command is necessary to make changes within lines, but in
+.CW sam
+the
+.CW s
+command is more of a familiar convenience than a necessity;
+.CW c
+and
+.CW t
+can do all the work.
+.PP
+Second,
+given a community that expects an editor to be about as powerful as
+.CW ed ,
+it's hard to see how
+.CW sam
+could really be much simpler and still satisfy that expectation.
+People want to do ``global substitutes,'' and most are content
+to have the recipe for that and a few other fancy changes.
+The sophistication of the command language is really just a veneer
+over a design that makes it possible to do global substitutes
+in a screen editor.
+Some people will always want something more, however, and it's gratifying to
+be able to provide it.
+The real power of
+.CW sam 's
+command language comes from composability of the operators, which is by
+nature orthogonal to the underlying model.
+In other words,
+.CW sam
+is not itself complex, but it makes complex things possible.
+If you don't want to do anything complex, you can ignore the
+complexity altogether, and many people do so.
+.PP
+Sometimes I am asked the opposite question: why didn't I just make
+.CW sam
+a real programmable editor, with macros and variables and so on?
+The main reason is a matter of taste: I like the editor
+to be the same every time I use it.
+There is one technical reason, though:
+programmability in editors is largely a workaround for insufficient
+interactivity.
+Programmable editors are used to make particular, usually short-term,
+things easy to do, such as by providing shorthands for common actions.
+If things are generally easy to do in the first place,
+shorthands are not as helpful.
+.CW Sam
+makes common editing operations very easy, and the solutions to
+complex editing problems seem commensurate with the problems themselves.
+Also, the ability to edit the
+.CW sam
+window makes it easy to repeat commands \(em it only takes a mouse button click
+to execute a command again.
+.SH 2
+Pros and cons
+.LP
+.CW Sam
+has several other good points,
+and its share of problems.
+Among the good things is the idea of
+structural regular expressions,
+whose usefulness has only begun to be explored.
+They were arrived at serendipitously when I attempted to distill the essence of
+.CW ed 's
+way of doing global substitution and recognized that the looping command in
+.CW ed
+was implicitly imposing a structure (an array of lines) on the file.
+.PP
+Another of
+.CW sam 's
+good things is its undo capability.
+I had never before used an editor with a true undo,
+but I would never go back now.
+Undo
+.I must
+be done well, but if it is, it can be relied on.
+For example,
+it's safe to experiment if you're not sure how to write some intricate command,
+because if you make a mistake, it can be fixed simply and reliably.
+I learned two things about undo from writing
+.CW sam :
+first, it's easy to provide if you design it in from the beginning, and
+second, it's necessary, particularly if the system has some subtle
+properties that may be unfamiliar or error-prone for users.
+.PP
+.CW Sam 's
+lack of internal limits and sizes is a virtue.
+Because it avoids all fixed-size tables and data structures,
+.CW sam
+is able to make global changes to files that some of our other
+tools cannot even read.
+Moreover, the design keeps the performance linear when doing such
+operations, although I must admit
+.CW sam
+does get slow when editing a huge file.
+.PP
+Now, the problems.
+Externally, the most obvious is that it is poorly integrated into the
+surrounding window system.
+By design, the user interface in
+.CW sam
+feels almost identical to that of
+.CW mux ,
+but a thick wall separates text in
+.CW sam
+from the programs running in
+.CW mux .
+For instance, the `snarf buffer' in
+.CW sam
+must be maintained separately from that in
+.CW mux .
+This is regrettable, but probably necessary given the unusual configuration
+of the system, with a programmable terminal on the far end of an RS-232 link.
+.PP
+.CW Sam
+is reliable; otherwise, people wouldn't use it.
+But it was written over such a long time, and has so many new (to me)
+ideas in it, that I would like to see it done over again to clean
+up the code and remove many of the lingering problems in the implementation.
+The worst part is in the interconnection of the host and terminal parts,
+which might even be able to go away in a redesign for a more
+conventional window system.
+The program must be split in two to use the terminal effectively,
+but the low bandwidth of the connection forces the separation to
+occur in an inconvenient part of the design if performance is to be acceptable.
+A simple remote procedure call
+protocol driven by the host, emitting only graphics
+commands, would be easy to write but wouldn't have nearly the
+necessary responsiveness. On the other hand, if the terminal were in control
+and requested much simpler file services from the host, regular expression
+searches would require that the terminal read the entire file over its RS-232
+link, which would be unreasonably slow.
+A compromise in which either end can take control is necessary.
+In retrospect, the communications protocol should have been
+designed and verified formally, although I do not know of any tool
+that can adequately relate the protocol to
+its implementation.
+.PP
+Not all of
+.CW sam 's
+users are comfortable with its command language, and few are adept.
+Some (venerable) people use a sort of
+.CW ed \& ``
+subset'' of
+.CW sam 's
+command language,
+and even ask why
+.CW sam 's
+command language is not exactly
+.CW ed 's.
+(The reason, of course, is that
+.CW sam 's
+model for text does not include newlines, which are central to
+.CW ed .
+Making the text an array of newlines to the command language would
+be too much of a break from the seamless model provided by the mouse.
+Some editors, such as
+.CW vi ,
+are willing to make this break, though.)
+The difficulty is that
+.CW sam 's
+syntax is so close to
+.CW ed 's
+that people believe it
+.I should
+be the same.
+I thought, with some justification in hindsight,
+that making
+.CW sam
+similar to
+.CW ed
+would make it easier to learn and to accept.
+But I may have overstepped and raised the users'
+expectations too much.
+It's hard to decide which way to resolve this problem.
+.PP
+Finally, there is a tradeoff in
+.CW sam
+that was decided by the environment in which it runs:
+.CW sam
+is a multi-file editor, although in a different system there might instead be
+multiple single-file editors.
+The decision was made primarily because starting a new program in a Blit is
+time-consuming.
+If the choice could be made freely, however, I would
+still choose the multi-file architecture, because it allows
+groups of files to be handled as a unit;
+the usefulness of the multi-file commands is incontrovertible.
+It is delightful to have the source to an entire program
+available at your fingertips.
+.SH
+Acknowledgements
+.LP
+Tom Cargill suggested the idea behind the
+.CW Rasp
+data structure.
+Norman Wilson and Ken Thompson influenced the command language.
+This paper was improved by comments from
+Al Aho,
+Jon Bentley,
+Chris Fraser,
+Gerard Holzmann,
+Brian Kernighan,
+Ted Kowalski,
+Doug McIlroy
+and
+Dennis Ritchie.
diff --git a/sys/doc/sam/sam.pdf b/sys/doc/sam/sam.pdf
new file mode 100644
index 000000000..39244c74c
--- /dev/null
+++ b/sys/doc/sam/sam.pdf
Binary files differ
diff --git a/sys/doc/sam/sam.ps b/sys/doc/sam/sam.ps
new file mode 100644
index 000000000..4da88b437
--- /dev/null
+++ b/sys/doc/sam/sam.ps
@@ -0,0 +1,23496 @@
+%!PS-Adobe-2.0
+%%BeginResource: font lsunr00
+%!PS-AdobeFont-1.1: LucidaSansUnicode00 0.9
+%%CreationDate: 1994 Jun 04 09:53:35
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (0.9) readonly def
+/Notice ((C) 1991, 1993 Bigelow & Holmes Inc. Pat. Des. 289,420. All rights reserved.) readonly def
+/Notice ((C) 1994 Y&Y Inc. All rights reserved.) readonly def
+/FullName (Lucida Sans Unicode 00) readonly def
+/FamilyName (LucidaSansUnicode) readonly def
+/Weight (Normal) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSansUnicode00 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 100 /0064 put
+dup 101 /0065 put
+dup 102 /0066 put
+dup 103 /0067 put
+dup 104 /0068 put
+dup 105 /0069 put
+dup 106 /006a put
+dup 107 /006b put
+dup 108 /006c put
+dup 109 /006d put
+dup 110 /006e put
+dup 111 /006f put
+dup 112 /0070 put
+dup 113 /0071 put
+dup 114 /0072 put
+dup 115 /0073 put
+dup 116 /0074 put
+dup 117 /0075 put
+dup 118 /0076 put
+dup 119 /0077 put
+dup 120 /0078 put
+dup 121 /0079 put
+dup 122 /007a put
+dup 123 /007b put
+dup 124 /007c put
+dup 125 /007d put
+dup 126 /007e put
+dup 163 /00a3 put
+dup 167 /00a7 put
+dup 169 /00a9 put
+dup 173 /00ad put
+dup 174 /00ae put
+dup 176 /00b0 put
+dup 177 /00b1 put
+dup 180 /00b4 put
+dup 181 /00b5 put
+dup 182 /00b6 put
+dup 185 /00b9 put
+dup 186 /00ba put
+dup 188 /00bc put
+dup 189 /00bd put
+dup 191 /00bf put
+dup 198 /00c6 put
+dup 215 /00d7 put
+dup 223 /00df put
+dup 231 /00e7 put
+dup 233 /00e9 put
+dup 237 /00ed put
+dup 239 /00ef put
+dup 241 /00f1 put
+dup 247 /00f7 put
+dup 252 /00fc put
+dup 32 /0020 put
+dup 33 /0021 put
+dup 34 /0022 put
+dup 35 /0023 put
+dup 36 /0024 put
+dup 37 /0025 put
+dup 38 /0026 put
+dup 40 /0028 put
+dup 41 /0029 put
+dup 42 /002a put
+dup 43 /002b put
+dup 44 /002c put
+dup 45 /002d put
+dup 46 /002e put
+dup 47 /002f put
+dup 48 /0030 put
+dup 49 /0031 put
+dup 50 /0032 put
+dup 51 /0033 put
+dup 52 /0034 put
+dup 53 /0035 put
+dup 54 /0036 put
+dup 55 /0037 put
+dup 56 /0038 put
+dup 57 /0039 put
+dup 58 /003a put
+dup 59 /003b put
+dup 60 /003c put
+dup 61 /003d put
+dup 62 /003e put
+dup 63 /003f put
+dup 65 /0041 put
+dup 66 /0042 put
+dup 67 /0043 put
+dup 68 /0044 put
+dup 69 /0045 put
+dup 70 /0046 put
+dup 71 /0047 put
+dup 72 /0048 put
+dup 73 /0049 put
+dup 74 /004a put
+dup 75 /004b put
+dup 76 /004c put
+dup 77 /004d put
+dup 78 /004e put
+dup 79 /004f put
+dup 80 /0050 put
+dup 81 /0051 put
+dup 82 /0052 put
+dup 83 /0053 put
+dup 84 /0054 put
+dup 85 /0055 put
+dup 86 /0056 put
+dup 87 /0057 put
+dup 88 /0058 put
+dup 89 /0059 put
+dup 90 /005a put
+dup 91 /005b put
+dup 92 /005c put
+dup 93 /005d put
+dup 95 /005f put
+dup 96 /0060 put
+dup 97 /0061 put
+dup 98 /0062 put
+dup 99 /0063 put
+readonly def
+/FontBBox{-90 -211 977 1005}readonly def
+%/UniqueID 5054500 def
+currentdict end
+currentfile eexec
+AF9D569DD6A39B9A08931526FD86DA1F3D52F6A6E9A3C2A341616BA8AD4A6BBA6A84F4F691C60D
+64B463C6D1B3A432634AAC416FAE1067039D940A82A692DB189D5719DA649D309E36853E1F767A
+0DF1C424DA3E9D8E6B45B659E31B0A03BB7747FB2945268D0805A130347C7455FA73121BA001A8
+5BFFF1847B8FBAE1B61BA76AB61D750F7BCDB1EE8E4B4E95657E783B2230A68A5A62E9E39EA352
+7B3E832C6BF769697C2B18F29596B8A56AC9532224A452AE7A77A33DC5D437BAD5B4C1B9DD7680
+FE4456B59A798F584F7913B3A790F3E5F9559505B80A36CDE0A4D46A595E942D798E6F6311B3E3
+613059010E0C594BA804C9FA8EED254427D021628C6A59FA5C10314D3143AA329B9E1E767CADFB
+B864C70BE2EB0FA96FBDCC2EB1B44783431EE1CDCADC68DF65C29B4AB7C198BAA625A3736F6240
+46E72FAE8F379B391393A007E9F796065FC622322C782111E2EE7B73FC09C5852F35A75CA296FB
+ADBC77E83C2378DAE017DC93437EDA4E1473D256C7AA433FAFF90BFF104C39847FB6076D559B8A
+4D05AC2A35837CF7949567F37638F1FF869CA022F28979DC7AA611BCACFFE95AA23CBFB86C9719
+BBD5738FB6D86326F1B0A84EFA79C80BDC618F42DFAB8B232211332E1D793A6C4CA71DE2D7DBE1
+5806FB210EA36FCE5FA253B9C507225A5581765AA21DB9E1739AA6063F3F7F11D72E65C3F9A83E
+71C8DFC9B9E13C0CCA25836D4233D10595ED053201C745C989878BC0457410C29FED3273550E0E
+C93F30B6E5994D0DE950C82E70299AB82D97B0EC11EE5CFD3A5311B0B9623C7CF73BCCE4D33436
+655812E9BC69045B581B2BACE84DEBD480A8652676ABDB2976168954DCD745B42F92F25CC2A4B0
+58AF8D1F0BFFC280B7FECF0593655FEDBE41135D72874467035351F424E92C9E4F628501066322
+AE5896C2CC8C5AD9EE9C4E2076DF548DEF8A6ADAAEC8F05CBBB8882BE5DEBB3976FDD20539F0ED
+C5F331CADFFF8B1E1ACC3E0DE2DE0628766105E7EE97E55E66E2585DD7412749CCA828C3CB355F
+716E5F447857D298C1383EDD389C2C09F3094A09F90652D5913EEBBFB16547FF31DBB8C0F43480
+6C96524DB4F2D96F6A32856DC62FB350D208B4462521EA9578695E7F8A31FDAFC065535AB32B28
+4F808767213AD4B89C02E59E3F2BD114BC411E4A9B58F97102E7ACB9310EE2AD2EAEE87E1702E4
+3E00854C35156E731478402285AB23B0049A74381C2355F35511C7D966B2EE653CD8A3D7D6505E
+80A4BD2C96B451354DD9323C30C9894A60CE614D0B091D3A03A5EDA4BB127F255FF706AD6E6827
+9123CEF7396D89B5E5A968B4A4C0F4B0C227D1EE676801922A3CE24F2602569AF11ED43F17E2F4
+6669AEBD1F6B9E53C76043E1CD9DACDBB3B6B87F949372C03E9A5C80FABBF2E7767880B7064D05
+AE2D717B6A189D0C9F8DBC981EBEFD9A031C7592EFA0C08FD8BCD2FA1210881D95D6ECD9E72096
+5ACE2A9462EB9C3504315CFE8C6B5362B833CE52BC726DCB3450CEB73E42E667B9D86D0F985A35
+CAFF807F4DFAF156AFDCB999DBA61476BF4CCE49C6D8A8B7D2A3FC07EE8346E30F68FEF7774273
+6E55BA23311F85C7FAD9D9AA1EB17E14C45033BEE8D3093AEE9E706133FA94413F30F723568255
+498A071D76C10D12536425A7185DB60BDECAF6BFD0BE58F418D0E62FDA7B846BDD490EA7CEAD05
+E1BB9A4DF66E13758858B80F6C7216D8D606E92BC93576A1FB3604D9FBD78656FDF64328AD9466
+3CFABAB19A0636518FF61E62591661FBFD264B90156E24941177A42A0E5315F6168A93B96E27DF
+2E7451F382C2C83241AC2B5F52A2C9453D3E207EBBEB3881FF237E9135E1D9191E1FBE5E606C60
+43726A6783CD4414D26F8F95B260FAE60262DE148545079C80C962D5D7BDE2A77A814CDD4ED901
+D28D4D5C4324DF7F7AA6B832B6F5E0E129F471A12373F0D97037FD695F921E0CAD8963372E8DC7
+F3AA5E004E1F5980BA9825774BB2DD511B6A9D5A0C7E7885E39E3B5497EF466C52B7DD4CF4AD74
+6E62FE4B1E082811AA45D6483725D0EE18C9C6BB988C036913682EAC4645EF90AD5FC24BC78778
+DDDD48EC8F1E64525AB9B1EFE0CDFABCC6A17BDACC1B3B1929FB2FA1DB85991FFE1B92B7999C99
+1BD3AC17B8A44E11DD954BEBFF002A0562EEDBC507DD0FF13ABADBC8E5676F5F951D1B32B725DE
+FB33219FF4DAE8298887E415434BE4012D1A294F807CF53248AA137591B532B573F41732216B12
+685CB4B612B782E010644CB813A31AC4A25038A17FA0872E515BB2C119DEE59829927FBE20902D
+18CF2F33E18DC0AC2108789FA1D1F61553184FC185A3BC3BA6985449149A08E4484F33EA950C18
+B0148B6DA2EF0E2F1BE218CBEDFD4A4E9A53235840A8E8DD1A757D8F48DE07C687E5F35EF237DB
+EA582FFC92EAC5A8E4D9C1F048B037FDE46770B073B161333AD5E0DC09187DD0D9FF2CAFEFDCBD
+00F3FF4642B63703F6B4CA2A479BE5145E3EA90359F4BE67F1EF0EC07F997A7A63797EAC98E3D0
+C64F1EBEC99C7C436EF655ACF76DE5201A5B3F5CF58F0116008DF241D370E616E8FF10BC551606
+F041FF641B4C8FA9274BC3FDE69602B2BD58D1428B119607AB28B30393C0BE4E33E5EE1059C9BC
+1AC92B4AD1C7D1C71FB44429D8F8042F0A7ADEDE040F13D0C13F9BD92D3BE4E77E446DC8D57FCF
+C704F6EB8D438EFA72F74835DC24E853B3B1178904F0484AED543B57FC8ABFFF4253AFA2C93C66
+C2144FF1777A1E3A40D1D023BCBE24557DAE5D76DAE6FC7063E11A5DD52B0060501E84AE0E66ED
+7522828C15045CE72B548B59A3D7DFC3CF6779B4A6D4891B95CD4C6613C9390DD953FA58FE97D8
+A545177EC9EDB59770B4B67111A1FEA9E74A61B360D9C19100440F8A69386EC3878C732DA58580
+3A177AEFF85BFB5D112C37ADF7604BAB387F08243B2FEC24DAF9F95BB75A678DAA7AB277D933AC
+0362E4DD5E6E4194DE873932EC10013B68CD0D1CF5298816E6B195372FAE49A5F9F722C30EDDBB
+088E0F1F7D8A5D6386B8E3219125A8ED2A4D534761DEC9DA916FF875E13E309F2F2C925F28ED5E
+B792A290F05B7732D217A1CF9577C0107889C456924AB91BFB728E4C4A0E70412DA721CA4B1A30
+189BE4414AEE3AB1943C0349ED437C91796EB8616D3CCBE148CD21B0DF7ED5720F18496100119C
+2995490D7B60C994E93D874AB352A813604AA9A83D9388F758B7F479F9F6EFDBA983FA6DA07E7D
+4F80E64E68634D9D811F3A0088BA46040577B89C7E147CF96C4A999CA1899799FA56F401645A97
+DFF68155332EE3F23F3865B6DE715F1AB687A696878C9821E029E3D867BDC50322A0C90081E3B4
+3BA1E889C277DEDA5ECB0CBE16F8FD562B82F22DA851CA5AC51EF3051382E9706A2F6F14CE6897
+4292ECA605ACCBAB5071ED68BB05BDDE20C04E0007A8EF46D69FA79540C53E34C29F3CB68E9329
+8472F6D89EF77A28A18B334278836F65E88255F1FD3A3D031A22BBC607E7BDEB1D00AF60D5E024
+7E971B8965728CB1CAD6B5853F4F66448031312AFF8E56B01BB8D50F3A1060A18ADB1FA8F84C69
+399BE117B98430CF63288BA1950ABE0CEC051B66A7EBCC7A3FC793589A4C52EDBD1A71ABE49916
+10496FC6C346C376D3B061B00BE7B4A659D21A2C0FFD3FBEE485EDB7BEE599E5248DC5FCD89632
+61BE192134BFF9C9709E76A567A0F7B5773870EEBE07E3630175BFD8C5520B2AAF6DD2D7C3FAEF
+2E3F52318A7AD6E05847D76ED22D021BFDAAB041B16F2AE08FF86DE08FD998D61DE2D0EA477E46
+6E963EE5EB69F69E30113F0D65683C37CDA865CF92EC5FFA54DBB6798738D38DD7898BC7C26AF6
+939EFF47B1A3DEE6B5E38505EE05A0F671EF8917A434D92EBDD8F6820ED3A2F24199D47745D393
+9259A5D856E1AA9EBA0292EEFAFF75F709ADCDA0D6453C3550DB28BFA22549BD2A282E8B9F2367
+FCF20AACF9E7B725D0ED0498695F3A2DD76389BE8A99B603CFB0FEE3C5642BD02670108226BA9B
+A90B90B1D660C552307E3D388661A20C5F42C3CFF5D0E0F6DA69792E8FB4C83AB821D0F7D80F23
+93BCAACBBE56E8095466F7BF8B0504B72734DEF119DC32DD63F1BCA3A66A5F6DB5BC221F4927C2
+B08601F89D71E754481CD1B3B8E5EC8E9A22F5AD8CF45039FB8912A2E4EBC638743D7614BCB41A
+49D162291E70BD656EF7F54BCA72BFC633984F1B15B4145F13D08B255B77A357C15B8A5DB04C3A
+95827DAD0B0A302577C12F66389E4E40040EB52AD36552A592C47614A9035E7CDC4BDA55645F8F
+72F10287EB7682F17034B836B44F111B786B8A6A47023EC1C950A4B0636C28E1753781C9C0B206
+5DE58A47D2E7B1AD71D8DBD36E72DE625B5F52B9DB0F9679FC4B61005A112E9AA717504C71CC0F
+F50CE8E96DFE3AF6613CD4A3B4645ECC5F495E3DFBC1EC17575457EF39A0D4709221F2F1E14FAD
+ACF7FA5CCF662DD341477170FB291B706D76CE78C3CC90CD36A45BD04704DFB2B251CD9B1B69E6
+B9DB3E9739DE8B2CD9DE63E61ABCB8581AD13493468EE995EE668DBE6AF6809F9529595D67DA56
+DC7335876F36499EBB7226FDB9876A7D0D43159E77F0AE36B55033A11156C3F757FBBA38177D24
+88EFD1BD9D8F69ABDD365989CEFD521F60BC9005D8C40942B43FC6DB8088842BE8A7B567420A80
+9AC76E7BA77D5EFC8D9A2FCDD1A565EB580207A250621E27E51685A0C650323B4D2101810F6C89
+E5D312BAEDAD3097F87C6064BA138681D3192C219ADA66AD2B0C679C8B00078597B2DE46F5A040
+91F8C34813C07AC64B2F5FBF0EF52B16AA1EE9B9ADE71108DC9D47D587585A933CAA161CE586AC
+E30BA582A5CE8728991B10AE2012C2291B7DCEAF72E0299FF49F5ED495773656908F04F697ADF9
+32AA61E6D90A87BB0F0311AF737E9F72C501CF1AB4DDF4392FB9F3E71F859D45F32EDF329F4856
+C12ED2DB6FA3631B3731D5FB2DB79E193BB8BE75B85722E6CD85C35C05C2998BC6B854BFF76A39
+B1A51ABD3304ED453AA413E6F6329B651FD13C0751886DE4553E0B79441FFECB81839626868715
+0DF0FBBD53F7861647CAC9C633B9FF63BCB644D124F2420A7FE6EE7EFED293C9D53983617F2500
+6CDF86C74694A20569BBC5DE7616333432C0FD525029E612858F5BF27D1FE06931A5AD37675162
+2AE14BA10E2702CB896CC5A5164A287AE3771036AB2EC7F50B20576E73C151580E0D0884277FBE
+9D2FBC52DDC0EC22A07138C692108A6C637ACA40D1881027E23BECFF6C54A50DAF7A79B5CB4BDF
+AE35CD587F46B14B3A89A50487F8A6E20EE48099B44F459E48D65FB393D2874E4BF7544FC325F5
+B04FDFC0ABF2D6B8B6870A617D344AE093C4412007061670E6913B5581A0EE53B3D8C2D75E9560
+101D4C217EC44BE71F866F0F40D1DC7296ED313ECBFF60CA3A05D45E51E32D9E75ED31F1905DC0
+4F4AF2A29600172249D0B8B5B42D99A546A9C45704A35711637ABD7A64BF4D417564ED0BBBC7F2
+093F6C7F87A770F6B6A655DCBC13FB4CC24FAEC848549CE2415301BF6BF234405946330E2964AF
+A37702223D1466A780720F39FE966AC1023866246F7E25BE2A1E0C009708DB2724E13770A8817D
+6F27A095BED4C33648173F0DD8C627F405ABD3CA636EF8A9E77CC67D20E51721CA655704BFEC27
+564A69E6193E5E3AB1814FBD3BE29D72836BF85C85F4555FDF3908E6BED58E0927BA45AD4434F8
+D15C510FA5CD1311F7DBB20CAACE0D88535C58309CC82CA5E6ABA2E0DCC4503149E52572A0F8C6
+7ECE6B8145C85E5F211F341AC1450EEF4D1102CA184DABD5CF00049F7BE76FA793893F2873A237
+FEFE245F059AC85956B5A603DB8871BCF4DF3665364525E7B539A6A4F2C59473908121FEA5DA8F
+F5E4A4FBAE0C602130400E1D9D1185703F20895806C2DFE6E47408347CAEF151C730783FB6BA38
+9EDEA18F865240ED604D0B6F5850CD18FEB63AD0A3ED46A933DE64C9571C7F15393AA81577A0BA
+6A227ACA16DB43307E76C10FC630E6550079E7E5609FACF8DD84376AC186DE2E1CF84847C4E2D8
+C58385EFCA099E81B6435D8DFA6775BFD76C527DA6CE32B6326944FB6970D2787190CB0572AB6C
+531EA63DD1F6BD5F7732CC7BC7751DB30874EBD006978CBDE960BFBBD8C2D115C26E7CCBA2C802
+131AAABC284699B18989BE8D548F30389BB0DED8FC122A1433EA61D074415882143D865E28A9D7
+8E59E47EC5EF1E2C5151279BFF1D77ACAB907F7DE9514A71B21C129480FE708B9AEA442EB1DDC5
+59574095F57BB3750DA4521BD298A19CBABAC650FEA7D9DDD40DFA7999D0CC79DCACD517E391E9
+2EC65FE3A64CB5BDE1A203E53D73C994D53215EDA4EF8BD06658AA94EDE4DB65719A0903035679
+B7E08BFA7C40E9AFC3ECC0A243C79D920B2F87C75430F2490362FAF9FF23E3880E7ADA9F3DB155
+6E00470C2FBB131F539600D21238CACD785964F533C80A39605C9AAFA6438B11F72D9148455E9D
+88A43178089337070A47297BE223B93CA175DAC0EA3CACA4A9BB07954449A1F9A8F5DC084602A6
+2DB0D098D3EB9D967CEC1B247134B47DC120C03B66FD26FE2647C48433BB994310137C95B02FD9
+54B450FF00B194F0C5A0A8623B1101B5F32589CE81BB1EE3045F4C78AD26A9C5868AFF70DF6179
+F2A72599892518A45C54689AFDD92A5E21F47CFF3AA8636F82B33D9716DE11C3297C403B5E2708
+D9AAA7DADDB484F6719DB1A07F42C0BF6532352BBB529478F0F08AA86E554A2C8ACB4D261C0358
+CDC56FB9FB160F9CE9C7DDD0CDEAACD1FC38D9066AA1B50E26079452FA515EBB70F3F5EFE3DBE9
+791161BC643D1BB3147C9A0B0563EA94F930201780DC3E97164C369C62D75F4BA3FCB116215771
+0C7B87C4A42BAD8EE7AD49877F9AB41BBE69730A4FA1F83F4DF48F40AA6E8891D61F1E2F5B5AB7
+6E85BCDB7DB8A8D7F3E1C5628A51246896D923DE53B1B297CC8E37E0C46A6B42F616CFCF17B74E
+DDA896D6075C4D60166F05F30DE0CF48A3BA092A0D2A694D01457C46089B7F573CA6A7499BDE06
+098699CF1F28CF849D2716140669C98949A551A227BDDB5594F205BFB0F0379CCDC1B53472C335
+7834C37292EF98DF1A5B42F2E8EC82381AEBFF1CD435499D35A59EB295CF563A574FEB6F8CFD09
+D9C2E2138F486226EF089654BA218706E643BCA601DA71B7A2670A15B25523D7925D1E7BEC264B
+9D5D47F30A9D36CEE25E5CBE2DB3D6E1566AE8067DA2718ACC991B618578F490DFB3B2F9F2E482
+3CC80AB2B8BF562A6E5212A2A2F2604C0894D1DBE14FE9D7222E7F3AFD49D5B2344BB34CCB0007
+0246A8A3A04DB4866BD9823E0C21C8C226BCBAEB92372AB547B8FCFAAF03AEDD70D2207840D6DD
+0F833F8C19DB2CA2BA4F271712E2C617E84F34CC15078F9A8972E17B8CDDB1D059C53F7E34F975
+1DD035E00F744D2EE8178B33B6E684E6D55186C9F2FE95F9964FB13CB7D83968F06BA14A62BB43
+18A5830514BC532CE55995E1CD3C939ABAB0D211B1BFA806A353E325A73BF75601E817265F6B08
+A43BCD7AE47648436A1B5285823F234601924C473B761B1C057D4C174BA653D5B0E7186B99577C
+2F353E7AF1CC395EAE45B1595CA37FF9328AC2EFA8560952054F76A72D7CD91AA018B85EE553AA
+532C2BCBCD412F349DFF5C37A1339AAD0F4957DCD5EC6833060E93914447483B2A2D9041621980
+83838093C798878E5D558F7B51A9626F982115EEDC2039E3C583F264EAB8321AB228868F221E8F
+4F9EFE1E760903FE51F98AB321D1347CFF719F4EC83B91E010961CA4F26B7BB7D4C769FD636A4A
+1931EBB2668FD9FD1DADBDB6DC61AAD03C0077AAA035608BB2F6855593CDD133AC28523C100D99
+C98A26C29C0A610AA270C03375AC0B9E7F7F265612B34C4DA3EE925B6BC8A98257986AD2AB4BAB
+B31D5E387984D102043BCD2F908573DF0D5BA1C1A59FBF2411A820DA0A6E69D1C19096580701B6
+D8E814BFFC91F8068DE5D1A8C601010A53393AE554E003AE1592FA5FE0609961DCEF7D944F5857
+64F66C20281424DC4BDED24291DEB386AE9C3DB43133E91401F528017AFAA530EB2736D3B6CE7B
+CB1E0C5A6DD5690AEF3465BA0836D2A68D6F3C5958843F4299B8B2728116952F62815C71B483F7
+631338CE3FD626CC22C9256AC95D88B2F4659864B022A0BA75127BD9F4876E0251A2E707FA37E4
+D5D5AEAA0EEDB18F5584B9FFDC9386C46D1D19B0419EDD812FB9FD83D531248CD1F6A4DB702135
+9C13D1629EB05CEB121CDA5944020CAF186AF94EEE6EFF48023EDFE205E749942482DE061BC86F
+58FB8289435ECE461AB84B09D342138561C2B4B2496022DD57C8253CE557FCEE1905C16A01F5B8
+BA4E7F7D5006D434CF962ECE76E5C269A7243C826C0B7CCB5CB36088AA99BF3F3A7377A76779B6
+9ECEA4A83BD4713D12BF424373B399EC0A99CF5D8AF7D5A86A390A80AEA33CBBB202E0A8BBB72B
+1D685B2ED32EBA11840D0C9CE80F61BF2228924DC196B9C40F81D124044BE6DF12564AA1EBF652
+41AF0DAEA563735BA4E8151F3C9820273E79DD4E10E5989BD0F291DA773C3DAC91FDBBFF6EDE1A
+5D5FAC03DBABB5C2E97BFEECC08B2701C72ED14C9CA5040B9FC61A08800C5137DC617398405004
+BC3FE46672BBE3342CEB1F9750CD7F4E057E098ACFA0A441C460886FD630EBF90A327DCC2E2635
+9DF000FD24E56CC30E31BBAF1391B89504712D09C867D7E68A965E57F854507D7294C9671F38FA
+9B768EAAD52137CEA03A35C82BCCFAE056DFC1214ED21EC9F5DD4555C642C2FF167EEA4EA07CF6
+A97BB9042097B1AFBFB6FE69E09C2C419E6AC38372B92590ACD39A83C84EF9AA7DF861950F5354
+046E90AF64F28B6D38CE89D602CEF86B1A47DE38E31AB242864D7BAC0EE07878CC2F30A23FFE05
+B055E4EB475BE2035B6F3FE1573FFDE9A7960CE3180AD3FBDA2BA62215BD4C964DF7FA9B7D8A0F
+B32A8C36B1678E7297212BA6B5B72B1B0B9ED8C5F9390984240B3C77A137D4EE6ABFD66FD2BDFD
+57CD46185487419C70C2754008A24C064D506D8FEE86DC8FA6B5AED30C3662766B8E4C7A0E205B
+EF87BFB1DDF81B236AD601F4C1B25DB98B211C1BD85BB8026F6EF5EB14901240787EB10779A7DF
+C70E02E2066E516BE60C726BA4E0CAE1C327A762BD30800C7F584E2796AB6A0E80AC5500498962
+52B1AE178A2FD57E0A72758E794E455E1C78696634C09077DBE2233BB4FE9FD3C428506105F32A
+68A9DE914C10D7D3562F0E70C12963E7FA5EAA2AC08A384995139D4EFF7AC6A1425929DA25DA7E
+11E40FA431C268CC157D3A2E7420923D546B22C8CA59ACE87633D5D6FB804A1569BAE93C004668
+A1EEE0DE42DD0A78FEA435A7D9C84A95952F78E626AABCCFF3752171730177C9AC44378EA69012
+2F1364640C4F200D885A85737080FB67E7D1BE9614D4A5A2F538C137E92FFD914CF587F03084ED
+745B868102E34FB9BC2380012264F1DE610B218B84448BCDAEA37C9627A6F8B94406D069BDE191
+1E23A4AF49D64233A965F0253ED2071E61FD937A1B1B501A43021C580EDF1A1E92D27ACE0605D7
+3A868177423EBB55F178963EA9A4FF3F9F11DC1F4F938E36B04DBEC953F585A9180DF530906CDD
+046D5758F792BF3AEC670EFC402596BAF8F4A3052B9C586A3E17302922D66E6FFD813480D83D4F
+7245224718D31E2006A72DBBB1CE84901F69F07C5EF3554CB22A979BEDDA37E0B2E635707937F4
+526896CA654964ADFE8CEAEB0DC5AC4A039B7C4C641CE8C8D9908E9BE1BD78C77E272F9811895E
+4F8DCF94CBC0B826AFE5C1692937737713CA4F7A5FB901FD7DB797B0DD9C6EA4F82FEE8E843C0D
+799B552E44193298AFEE0BBBE7CA2F6759C891331B5C97AD2DFB0E2CC1BF99589B7E4619A715F8
+AB5C88BDAA1032D90B4CC5A2B4CEE7470E56E86D4B58F74CBF8D519739BE55381B75B3C8FF1F39
+45D5669B0C9F068551C7CF0F5C227F4401EB8FDC9105233154943A10C479AC9826D6366B03A775
+2CA00488AA04CDAF8B1E0DF8CBACB678A26415414D1F15D0F46FDC5A379D5EFC53DB57CD66AC73
+D274626739D9260F078EAA529693B112392FC5DC3F025DCCE34858856D61A86355F8A74427B073
+3B6AC1C2A32B1D3FFD6402798AA093391253CC3D65595148994485CD6A74271FE71093552BD0E0
+6E4BD8A55685FF784C530D186B923AEFE16250F3330789BF632F9A1AE789ECD4F8DD6055C3E7E5
+40F0193CA768EE69C37B8E51C4CEC1D1A7B12ECF6F65DA9EADC0B3B77D22084CA3E48CF0BB2E48
+37DA5D58F4F2795BFF4F62C2F520AE173A098E6F1E5ADCBD2BB3A1D26363F8F645B809A8AD40B7
+EA90DE4A9A26BE11FA203A55B144161881665D6D1D74263AB371C31FC70F9D8AFD287C0B87BD65
+DE2B3DA8E13669ABF4501ACE58D9CA150F30B23388AE9BFD053976B223E9B37D226200AF4D7697
+840FFA9EBC087A72EBB45D3D1FB5EA3E3E882BEB4F9B702DCF69DA879D72BEF2377FAB6094314A
+0673364D4165950458321F9190989C00595C4AB4AE76C246D26B088F29965200103D17C6104BB6
+E95802B4068C0D24F610532AAA2267D6A36183A5CDAB42140ECE4E0A8EDAFAB4BDF8EC6D706CE0
+562235124F1564DF380549FD931F3FF4616F24E9FEDFB3C757570E60D56D1F3568E575A35A9E5A
+F59CA70D9D0CF142A3F50A396807EBCD83E58AF06A4EA165730CDDA6E363B2B1F0B060645782F3
+70E717D38A3BF1552AB327AE0F9A155E15925A64D0AE25D00C5FF977BF824955926D8CD2072C8E
+41591597E6907300DEB999F06449CF393A8C0A04EC6A9430BDA18F680E6B9CE7A438320224C47C
+FF64783FFF47F55CFD836B93163BE2C4D9E16C0D38E0249FB1AF2E6D951C89302C7163031AB84A
+F4A2ABD01EF9AE342F5284390AE12EEB1FFFD93B281162F01AC4C4FE90A4E5A53D27802A647496
+94138C6D66079312FC04FCA387A5939556C12130FB04FB892EEC36C7470EEEC2739378F96B6392
+2668A33A7F868518F380DC0E91CE2C90484DA50B6954FD6AE5B7A10578932220D075042D762CEE
+4AEEE034A4637CDBF7298069DD2FE8D74265ABD5E4BCEAB81425516A38442053CD3AF67E80A50A
+E9213D7B4AC2C62E22A73DF69F8BD5E0C6AC8C688DA644EF6E20210919ADD9D69FDB4D5DA26B06
+10E8DB9748BA445FF931E3146E5937EBADE4C7FC61303004AC549C1900F5CF8E1AB0D63F13CD7C
+5EB22E21E9FFC31AEDDCEAEB76CB869253111EF1CFB6D8162DA3E59D77F44000B96386C046861D
+B1FA14BCB2C07B5B373312468AD8D73BB483429A22A27BBB62FD087A0F8FBBE23CE21F3F49EDE5
+F0A329993AD337C393F1332BD534750579A3E72D194B04EBC430594D4E181AF8FA60618E1502F9
+3172E26B55E5AAE989BBCC48374E8C6906A34BFCE114C2B2B4ACEF9BD7F8CD81A44F855F15CA88
+BE8A56AD1BF77EFAA5BC81C97B8F29F878F9091D651D5903E3F60D25EA1D97B6025FDBE181246F
+05262E430FD57ADE69286353EDCB572069E25BCA99F3FE8744ED8297D933BD7B5F5687BC5DF1FB
+584B8207EEDB38FC95BC6036342B012CDBDCE4F565B6D6DAE2EDA1B4F40B054DE50043D7AC9C3A
+C0DD32F1AC2D38D0230231C17D2EA583F5740A47CCFD0FAB920FE1A49914C663D8CCAA9B1C0672
+055483B762DFF0493E0D46643BA4458DAF364512A3C72ED1AF38DD00FFE18592E96DF318B7C96A
+2FE3543688CF50562159576FC9D051B6BFCD32A80FDD537F2A88DD9061CCBF832819F09570308A
+10065010DB72AE096D02A61092961094C1E383712FBBB58FB322ABCD0CFE77B98D9C584AD5C9DF
+53EDB81949D310679E2D28A2D8B347434BF71445EB9F9F1A2C61B6BC16EEC4C1522AE46C5E9984
+1206FFEBC27388D4952FE629644F6AB7733C457CF939C324DF0C4FFBC5E7BECF655B1F09670D17
+421CFE6C9A0FF4C4D7342E8CA177A602E7FB93DCD456151A8208C332541869298A0EA29A787931
+906B0EF099CA32F975496AB342130F34C92CC5A863029E030B66D3626C88F4887CF5A8A92AA750
+E5660AD03EA55D69EDF466D4AEE45067D5496FF91F26BCDA766476CFDE111F227FC7ACF6FBE1F3
+22038A92031650E9B813AF16A37B4095F039DF57791D3F8242C2C409B37D045001C74BB740E2BA
+0D29CE658C65510AFB0D899C651DFC01752F9425D5B152436B04D5DF36DF03F11E141FE994BB0C
+B0B7E37D5ED5981FF91DC25335A480ACDB25C48C20EE40F66F5B482A626A4D0DD2689D862F302C
+E5421DED7429235723092734BC73D00F56419927120414CF8659CD1F964128BB6FC105A7E090F1
+A2093CDB77BD1C04C723E0F1C5F60BE70AAE29BF0713F86C58DE426819D22390DC1D985F2FF86C
+08EF83F2E9AFB3A62EF4958945FE270950418D0B26206545CCD081E4DD18C9661BC8CBB4C2AD15
+1F71D6BDFD16F8FC0E239DA5D19E8C2DC980C367B7EA589A5278901D913600A2AE6728589CA00C
+44957816D98775D86D9F11C086A95601730EC4DAB3306ACAA840599A785E4AEC4C0B45D14800C8
+0EA12E04F69836CA05D79543A7D7043DDE89BD573A8A937E27DDB89267C30731E20402901F9042
+675860C2C1EEA408F35561E73301F5DD52591A59FFC7684A1FB9228A3CCD6D321FBAFD05718411
+DCDC2ABB7A588C8FB14D916993B5FBC01409652E5818F2211C86FC21FE154B464206B642B12564
+A6F4A8F4FD5ABB6F48E959FD1BDB8C413B2D6E12EE5286A805117A97E3829DC83F431AAE03A6A9
+3C97DD6640E4EAE56AFB44C1892D3E531FBBC7C1ECEE90583A72F6CFD618CC01E0DE8733D38568
+2600AF19FA2E08FF0C29EAFBE912C289E57F0C315AE24445F1A5AB2F492FA7A38A4886FC0035A2
+7E793BEA877210F272D16771C90B5BD86267F889D3A25546DA863A100005511CED9C95A1E2AACE
+E762E6501DF03F146719D3581365260811105609E56239B54D7AD1F0AAB6C7C168C7DCCF3CB30D
+06080F32E815CFE2784FAAC58AEAE4F22D72CFCA289BE03F9B2DFD27FB1E2D27572A7400303398
+47AD06137695C113E8C2DFC0BAB9A3ACD2A856D9E7927FEAAE009B6F0CB84F76A488CFD5205AF1
+DC4313B6E4179B1370695509FEE3E64A9AC425A043E434ADED0E5985B293669D09968D0AA231E1
+B2F617CDE5DF2A681B2054EC1FE239E95EE1A11823F73713F9CD4AF03E13A78C2442B6AF16360B
+01E8CE7DAD91717567BEAC799962F00A3509E24E4C4882124006B252F9A4C88071629A9C2B7104
+6483958A3D0FEC7F0A48FFD5E98F3C49B0FF8BFDF5824DA3605980B4D72A8902ABB0E0F52636A1
+06605CB90404E57B49596690E4B0591751D5630148B140AD0D2EA236764B131CE42AC418D3EA2E
+2DFD09FF17D979E54C6194DEE059501718A14F86ADE2E231842ABAB8A6634C0C31C3C125048D6A
+0E96A2BD785D51591B79E2022D49F2EC9BD874FC2FD52A7DCF644F124215C7B9D3DBE9919BF9D2
+138F0C75AC93F48C7F125973BBC8EEEE34502A62986FB8CAAA8242E499A85E43387264D3982838
+791590583BC2D74F1D1E3A4F4723457077D8E538BEB749D35F44F37B86A26C90951CD56A0E5086
+74E42A1EC33FA88A47C248B2D9783D4D788082B89368D73F2EA3131A0C78DF9CB707A0F65F3AC9
+3CC6E81866BBA0D87902E04CB3DDE252CF76344C2A2EE70C9260BA8C4DEA508D5B267A9E852C75
+79C062478C9F224D6CD544047E6643753F6B9D387EFF69E37E8EB61E6C50BF6CC93845070FAA36
+72EFFDF8F0EFC7EEE9D42594D1786BC7F3280FCADE5027ABFDB83E6E8A72C457BD6B2739D263F3
+27C5E0BD130514D98A5FC840558E85017D289816B13C0BA1FCC6ACEB5DDCA6B7F4EE30D1D7E617
+3D9B14A16F330E9D32BE3CE1B92F18D2878A2C3CCD52B2103B082454C60724EC75B08D187E01D9
+EE3286D69B9EAD4D8D35AA8BAE3639B7E36556E1BC86143C1BABD3D05B4CFBD918C4171B3CDA77
+A1C49679016AB674530416738945967896E405A3A7A451F43B14E7BB3BED0CE014188779610F21
+E869A79245AEEDF2D01CFBEA80B9295AF35A7085E4019F499820420BC15E5D3D8450AC979E4499
+A894699D154648A74C6443EA53C851E67F80721930FE61C346207F2715F3E20418A9F58E4C12CE
+9ADFE14DE865DB21085783B011BF1CCB2C3335A55B61DF50486A9465BA7BA85373E10F7AC3202C
+15806C98F7A8215A89DA4424D4B16A5E352AFFA05A58E5A6B0ACED834D87E7EACDEDD65CBF741C
+9EBEFDB86AC1975BB61AE096239597DD08156D26E218A61C1B69C71953447BB7CA6C055F2637E0
+B2E320C1EDD20B7B4E43DEB395DA221CC17F237B81098232567F591977CBAC8678870E1A1850D5
+C019E56069F11037B2C983E61BDB9778C50BBC9FFC6CC1CACAEB4FD3B4CC131BEEDB3C486D68E0
+69303A06E1653DF35D6421F93F05DFE32BB953E0EF723CAFBED7DD829B2D469CDC9F6FC1FB6F89
+4BBD9785FB48F1A89DC2E1208192BB44E7F3DE2D632830894A57B950C7112D76AE978454E0D666
+3F97E8FC2225293977FB65D46A5A64B2BD75DD681D4B5AA39202CE5E6846B872482765F1086FE4
+6200918A34A9C0375CA555FF25C70F075530965858942F0BEBC9CCDFA2515D198479BCE058BC5A
+98E014F017D5239CFA21C5801B13619642DB5DD9A2A16FAF1C7348135BC59E31450FE5824201C3
+99E397C49DFAF1E8ED16054FE187A136E5A838976A48A1AD1AFF50776E953287C5C026CF2070AB
+8DF13E926E668353197C0DAAFB3BCD64D391E8DA10AA80C798A914D219D0AC05A00D4FED72885F
+408293D9E9D952E47CB8CA81F3797350D50EC0B74E526825DABD3D7DBDFBAF7AF4781D11C82D54
+05AA18F1BD75F7FC6C2B135F34EB3B29599B7600912F23680F5190B6D9B06D619B26F1D086D122
+51305AABC2BF2282FAEE69718201523BC2877A640EF5FE8A68E1358BC8C0A185C304D9986A6E31
+FFFCCB726D2BA189FBCA9C699994DC51F65653BBFBE170C39203C4BCEA90E07FC0F45D0E788D45
+09948A4AEF90C62CB4D5126AA30D655A817288039460D3E8A0450B6F3860727224957DEACEBA94
+86994D34743A32EBDD7D0E20A3E318F5288B5AE38428D3071D5DA2D3D612F23617AC4CD5EE84BC
+8BCF391C4AA0B721FA25AFE0705091FDC0ED96094B19CE0C8716F70EEC15579C95E4754C394895
+EBD7D83FA8B9DD8B7134E6989D3B51C47600F053EBC134795BAB7C2B7121698284E9313C442E65
+C1821476436FED31A80A8220F02B781A3D19BE6E483699F7E809B1AAA0FA13DABDE873C7DA491C
+02499F9275DE49A900DC3D624FD28F4F1F88654CECDE505D7E3E449DABB1417FC03F3E0EF42F71
+0F952C7DA729B45BDAC3F766F512984FF02A178D289954D7FEEFDFD6571A8A36EC673504F0D737
+FD41CD8384B06842BC686EC6B4F3B47E4BA7532649FD57373EBA8FFAC961981C381F2B1C731709
+A9F210E7928F13185B3D0195965330D0F4DD1CD09E008DA25C067735261E4CC2C66D3FB1822E44
+7C2E3C15E815DEB88D2DE9390B179D4EDFEA55E78AB2B0CF12FEB75967D857A604075FD20ADDF2
+8BCF12C46347463A7BCFF3ED8ADF441ECB3F17F799B3ACDE848CCA5B920A2087EAED1302C2F000
+CB9396EB83598F891ACD25763F567BA9E5F3C4916C62D8DC5FB3EE188F40EABA66F51AD59F7256
+DC4977C9408808781A5B790AA26FE9E3EB1118D535A76E6445DC5EC4554A4C1A06FD082C8C1D4D
+29B3CD4F77CFA9356E7F055EA5062151B272CB8A036DD5F891E4DE82FBC877D9816F4AC9EA007E
+D58201808D17C5B7C0780161607EE88B6640780D23870D34892956B561B0C1910F3B1CC8261FC4
+17C49A520D7AEB3239B7DB86BC800FD1014AAAAE84DA78F2FABDA841E82F102913C89687FB94D4
+3112FFCFAD37D49D2532F9DC3506F54CEBF3D3D5AB4F32D96A801CDCEDC7D9002019EC48DFEFFD
+62F7879D0C9FB2CEF3BFF219A397877377AA2B970ACAB8361CDDBC1F38C5F7D9397E2272751DA2
+CD98CC97479CEC135A2496048FD8050FFA680BAE058CA5264E738D1699826FB12A96A6D328CC03
+19F501CF5AAC51A62E6F587FB2DD98881D69FED686B64D92FFC5B1AC2C957EE5F86CC9E5BFAE3E
+73E6507C5809A576A59268341EB5E3F863A69F0C805A98696A5D764E714C478B544F0095BCB352
+7D00C34A67EFE6D156EBA4AF22AD493F7EE841A8489818047663C145DC04BEE4F472544C9A2018
+2147E184BFC894362E366A757B586FCF92248DDF8B29BEE94B4444400B1764EAEF6CC8110F1371
+D34CC38A939748CBE0226C110DB1C67EC241F07953B61C683642706930266E07309655962648F2
+5E981598930F3EE4EC0F75614F777742D6CC0AEE86D7D5111D11D5077297B5358425E660A296D8
+3832D37985D710E0F9EDA67875EDA4B75457A9573E3DFFE441029ABE0494EBCDC90C789186F0B2
+97F90ACA2D3BE84610AF07E347FB7694FA4E216A2386CBD1EBE70967A82014E8503E2E97AAC71D
+60DAE00B786A95B8428F7726BA74BB3752F56894D4813D0434D0026F1703DCB3631D69082B5D74
+46AF8B5660688DD97DDB83540E2A69D4F994FD94413CA5AB52325439224E0906128187180E42E9
+7324CC2AEB60E5B327CA998AFA49854A59841C5C50E4159242BEC79D2E5BDF9373CCC510B3FC38
+204BB02BF88DF702FE5F2CD11123C390C6EEA79F7F1C4A294A9137926957D70C47D7EED1047079
+ECCD09C2BDB154A95A4F5BFC6CB708409E3E1A0DDB421F3E26BDBC0126212425D68F3218DA415C
+0B03792A561B6B6E02D84C83534866A8B4397D485FA947E66839BA118BE6475A8EF384E597B99A
+C24B83ABC9890BDBC7946F07C43535A9C0C53C6BBEBD25E85D7DBF87394FDAE324BD1CB4288B89
+31D3BF747EB89B356B3A11F07585EFA4E4349A40B409AE651D68E611122D21D9DE3425EA845568
+43A0E9D638B1C24E55992D6EB5D7A36A8035B9AAF0D8D71FAB9A3C20BFE5FC381E6E353C8529AD
+44920C2B8A1D4DCC09FA6DDAC7C540D24FB55D8EB38C883431FF49DC1DA22445A6CB438E6DED85
+699290D3EEF81BCBA53D977C0B32B2E478CEEB7126FA359D4EA3C8EF1D0F6C3AF075B2E94FCD5A
+ACD0531FF179735D94672A55C1D1FFC3842BB13CCC3E4C81B706A6830A1E502E954BA2F6D57CB7
+777CAE7EBE73ED1FEFB88F4E27DE15A052185CF9DEEEE665F38703AA7AF90B0971628BDF8BB1FB
+21A30C3CAF7495425150F6E53A58F11BB6CDF949066CAC1352B7460D33FDB76287A7C55C9123AE
+5A2773E720509A9F3D391553BED505C28E8A68EAB0C4231BA858934FDD38C725D340F21FE656D0
+002F6571A99FCD9AF5150DA9B55D796F9F30F4D10A7E82DF3B55462BE4EEE3F22D484275D60F04
+D3B1C83AAC019C0C46B68A1A3357A65A22A36CF319F53637DA1AEC7C0AA003E75491C0CA77BB7A
+DD734E0BB7AA3A30ED0E228080FF71B952DD328D938638738697F06831826400DB73D6E2B260FF
+00EB6130B3868D3C204EFB65A2F00CF5BB2CE4B464E5EED55E7CE33A1702D272069C2B291212AE
+0F7A0D3BB7B82DC5FF2565E40B0963FFB9ABDE6DFE0A5EE3BBA96A3CD74D4E9035849C7ED677F6
+84319FBEBA5A5B1B2B9230994B2EB643B9F395096B46A7BDE84230662B72077FC96409F1B237BE
+CF8CD53F27F690B101799B9FEC896A52609FB368DDEDF466AB17CED2E756D2A9026D4D26E303A2
+CA619F746C281A9A6AEA0E08CD0D1A7AD1F9CF7C6EC91A35AFCD6A1F59815A702558305398B0A1
+4A5AD71B085B9B10325C732D229A9C98D8AB35E99B31CCC4DB44852E5BA6DCBE8F759F54B3C10C
+BC761C1E576A38A788BF5CF46D68F8427E2ADB16E23A8744039F78F637BEC3D8F6D239185E9381
+82475AC85FB8112CA4806D13455EE4A903CE5C7C7D5A8BF0949D70740ED6EFD38866D4645028C0
+5F16836C9EE77E775626BD67AD61EF9F6D7B72680564715641E460E09A741F30777FF1CAFC8B43
+664F96D15E4F218B04D462C8D8AA91B55765927B41CCF8B79F89D4C95FE5A6B55E943516C8C674
+0F43D3681FF8962A0ABC7BAC47B06DA27FE8B1FBA3039595F52CA33845C1A7966308C006D6F828
+108603B42229012F5366B77C654AA8CF6980FAA68A1796A1C9DD3C8C01D144CE40C669634B2FF2
+946907DF407A2C5F577D3785623CAEA75F5D18E2B3B91D595CE8BAC2EC742ED54F17D4F912E115
+4A6866A5E3DD49EE48B407FAF34441502C6AAEE95DC123EA266C27F6924A44263AD1238FBC0C88
+22114FFD6FC5A178F22D993639DFDE16B1652881F7A015AC88722193BFDF10DC1C372916234F11
+591016A8B5C2055934EF10C079DC83BBCF396DD19C7E9E112F94A871ACCE631683A8C886E4E10F
+218A7AD93B0F4F83B8418C0984EC0EFC3ACE47E7583F801D1B514FE3FCB6D4ABE5B6C3783F3026
+502212E265243963F6F57656ED205CEC6A8881F37B1FCFD2BBFC09D1608CA43EEE74229369A215
+1A916D40B2650E823BFAFFB9338BB43369CD38F0A351E320DB42BD62A6B1A53E0AF4E0BA92DA1B
+D5DCE62194D041500173E02835DC3C5A43467258A4340C1B6DB48B612D54110D70FBC038E947F1
+80ECCB983D2204567BC2E256C6AE46CE9C13E6B576E2C9FA5A00840A61D078C80C1C7405A6CB66
+BC23CBAF1C5CDDE62CD32A84D587BB2B3828B088C56831E6C073AA50AB4CF27FC74547554C491C
+DAC152BF20AE1E14E31A7EB4C45A11DFBA32CC6B4D47488B950A43B12AB7DF7BFF07005FB64503
+D00EBB085706EF3AA04110C671306F763273E16BC75323AEE529DF5EED8CD07BED8A635376AA88
+602674B619B086C8B46339FCC077399CDE9F054D50AB2EDC80BC73DE4332CA8F8FF3D4A2B2D461
+3BD0B29C7DF001FD3B7CBB4666DA2175252E7E55910DFE6706CF744CB7C24CCE4CFD4F35D0E0DB
+FA1C336240743562FD040687693DC43397B012390833FF786416BE97C2B8E16897C3EF5765C988
+7CA6DD1A3A5B2CD07507AD852A7D694F2FB9E1B8EF8D0581EE6C80094FFD048A1623048C4D4DAC
+AEC1303516A43F08736C003246885184E73D8C0312242C33F33C5FDD86B4B952F86B8008FAB05B
+38C697BAD2F87115E88C90B3F70E53BF6CF95E50A39FB028681746DA3431DA246E7423E8F400E5
+659141F09EA274219F1D99EEDC203B1D8B9696F66EE89643B6412ED2C3F41CB9385C30EA9332A4
+5CB359E2739612D7FCECA55C2BFDC4230E5CF89E7021F4220C22B6913F69ACC5F65D7374214EB5
+1EB691C53D0B1F590F458A4D4A385D7826659C77EA21504A7EFB22758ECA0497D059437D70CD94
+05DE2EA6BC506686D07434C6024273B49C009169E31F4B719429CBABC11473EB70F07DC2372D11
+BB2C146DFA378825C0F2857BBE54EFFFB74FEACEAF15ED6DA597FFDE9377697C0E472B7500B9C1
+6097BC50F38651D40CE96C50C9A6236860A8BF8F469F83162324B5296C50D430BD211D8BD0E4EF
+0101D6F67DA8C348861E85B35A2A4992D6A4930AD1D26C6BC5CBB999F83C727D5CE551B98C9043
+D10A648D8FCD959C9D1F83812CDA60FFA8F8C3F88FE8536CC3FABAF59C5C174580B98D38971623
+6284CB20F900D8B793D37EF566A87963445862BA4EFA880102C87F608F0CE734212B0324FB2D2A
+083AFC582CA20B744DC01BE3862057D746811E95687D06388705421C1B8DB69218A2A706D3CBA7
+8A449B344AF0F64DEBB4FEEAAD2C873A42B2A934F93C0BEF487B33DB2570723194651C204F1201
+56E09CEA13151E7E49703A3124DF500E780CBC62DF36502D2E6F5C57CFD1210850A2D35AA40A55
+603D3E56591E33E7722A282D6A8E1674495E12E348954B7CD0F4A4E4DAC080824795188D8A478B
+243EC611CE5901A9BBEB76EB041AD162619EDF1D3D83ED07F1152401D2D5A03E6C784D6514EB89
+6ABA990FFAE09BF057B912A27DD2092CBF5157C904DA4B566114A37A7D9AD0C0D717EFB6C4AECF
+EDA8D6971897E7D0FB1E685AE00CFA46F11B4820B31EE99098EAA2505E531BD1B07F41D550FEE1
+16F49073A12E482E9194C3C5D914AA944EB0A857AE2B5647A2C9519AABEE5ED6F356852C5F14DD
+0852271FDDAA5F229AA7151D9ECFBC4861D5E89AB66747272FB6B8D49ED0709EEE054CD07BB917
+606BB005B6B2FA4B114536EB0708C08B5D7CCF46EC19038D93EC063DC3DBF39B25EB301B4CAED5
+05AC18AE74A0AE4494AE38736B19FC4E6B10227CB30940BF72A4704066D1D02626EF650C112A7F
+8B8EF4074748BC08CB9DF80A0393793BED309D6DF2DE1F3D8765D992044122AB317749A3F96D1C
+E8CC520555B4C2352A4FC4D92947B60F13B9D5B7A5B47AEF0363A31CD9D35DC0F34A051E369400
+D2AB68DA7BE1F1A374084B5522A6BF862579AC6F9F45D1F29E7CED5041DF262CEC4D529CCDF8A8
+3A18572D65E59582F8D75236897347892D9FD0DEA75BABD0C31AF5D690394B228E835EBC6A5F05
+AF40BBC6B35F8EB3C9F76AE440CB1A2E88A4F27510F67CBFC15DC29D82BF07796F6D8F793C34B5
+D308D8764E9EED3EDF5D328FB1955CDD0719BEC23077A5080A88E9C95C705AFCF13C85DC533B77
+6A15AE7DBC452BD2A75451CD7FE36C2B24B9044DFD9784D6B55D79BD164EDBDF735E6C486C9C9F
+C5A3462212B66C2E8B3C1DC01357B02DFCB8AC883E7EC27F519001E5E8397D81BE41EBA7BEB413
+5A36C4E9DDD08D27C9A5B9AEF67090AC69F122DA5DF10A086ED8EA0C0A8D8060ABC76E7878AFD4
+7444B134EDA8D78E2271374C7510658B16A9C5C4833581BB7EF970F9A6A4F09B238EFE5A8B433E
+A5162C9851F74F75EEBB1A4D57B0EA29FABFAF4D2D7D8AA8BC4132BCFC9F0EC7E841288BD234E0
+6F910BCB4456C7ADE4182C459D3D366E2CF72BC6A633E830DFD85900C3696A11D2C6B79A822880
+F3560DF7B51A37FC186C48BB55F1B91DFC8622D193C48438CADD95022B3269A389C2E60C9C2800
+82C096FDDA6DA3FE1BF8369F4FBB5AF739485B83BA055AEC9DB88C23DB6C5F751966D482434721
+91E85857517308281CB32C386755A1159B1ADD7181405CA3D686ACF18566BBE1860CC3D4DD979A
+D6125C6A796D9C5B9B19D03E01DC7C0502F8F7E330A87F8AB8DCA128F914DBE36434DCA8B164DE
+558C9F3A7B39C07135CDBAF5C6A6AA5B21972EE56521C7C21456BF9D462BD8EC6F838A006ED0A2
+84EB344C819791B014BCE095A6558B5294506EEFE6D51C935165FA4D0344498941A5E42116BD4E
+C9B9F72F4AA2FF794981FA5C9F5FDE59F62427BF17BB7F0B2AE94786CA197383A6965214895558
+6540A4DC1071767E23310C3BD9877835098912B16EC2AC50EADF2035EB7A4BA2F48F028414ECBE
+0352BD409792DC1B9780A10BEF8357130C201917FF4956437DCD2E35CD0B5629AA37EF7DBD6E9D
+057CBE21442DB22F3B9CE9064289CC8A3882A6934C1C7C3542739E1D56848CDD2D03701578FEA9
+AE283D393AAFB58D5A93A16B5FEF33772AA47EBCD4A33B06A2CEC3B45C553B5A63B1A33EC16FEA
+A152B1D248C207924A12FD27D871175591D93E23EF5108534FC75C455311EE8E3F2AB408A2FAAD
+738DAB33BF98A3396CC6D5C3816B65E58D8EDC18C72CDB15540F6D62926F496FF4107A52154233
+FD73427D3C00C4455A67705300681ACD21931C665E9462BCC800D25A31A6BE61519FA3487E6721
+6BB21B579396CEB620B65FEE8FDC9CAB02CC5D5C8CFF9A284274A26F7C5BCEEC6834176F63A1A2
+7A674025A61FDA661584C04D5C80F4DAF73A5362F67FB8064D5079406EC0D115A79F292C893EC6
+0BC24FF533153275E178AEEE1D0C2C84D28D23DF028FD364FB2F9C13141098CAFF49C322A9D8AE
+D0E5F195FDB307B0D27D89EA917346AA73BCC436120E711FD36092AD7CBBFEFEA3C6F371D0D29E
+AA047229A12836CC4F3E1FE539338D4FA9E15E2CA242B768FB35A7E76756DC1EF247E49FD40438
+19F917F93DA4D40156E3AB93E5580B56BEBBC1899C2E3BB68CDC5B70642788FA475E1F0C71A532
+739F4EB3C85FFDAE230FE92143B8FF8DFC928F9F72B97701C2A5844BEA5D263FF3DFB11AF92B65
+E5846A68EC81F9EF7DDEE362121AAC5DF1B0C29C6C32247ECB52A9725F65BDCCFFD0EE535C8C77
+A02E44E274988827C05FF6C78112BA5AE29DD7AF086ACDEF0372B198E0303A257386315392DEC5
+7C0BBF78A04AA1FF28F927FF6B0AC8A76A22B56CA963B779E2081CF3925391C9027AB0C5533EAE
+1B22843F0AC72C2964456B56D8BEED6A3C76D6A675488C43471401ED4502351451C1CA0A46E380
+D41E370D2BC703ED34B8682FAD0E9EA71E4A5CEF5890795E2B5B09FECC763FBB40B6B2E8D07383
+CDD0B084612AD2266A4083DCC3A159426D3420B81B1041C5EE4120C925C1A952EE6DFD759908E8
+E1CC882C12DEC431C4F66EC3B5F3CCAC728208F1F841E477A276ACA2F42AB5399F762B9C70E728
+39D284531908AC8EE939BD049BBBA6BAF1C536E40DDA2412FD9A6EECAC2600C49E10092E73B91B
+670AE675217BA39A808ABB34E535F5CF9A202417CA625121DFD6F4434155BA437EA16D0B6B05CC
+BB3B161785B3856136A5288C4D14F406361CEB32410BBC3252ED6497690D49A3A89C40A16F66AC
+8F9D80411BCE174F5D57BC07968164BCA4AFF626B6F675BE9F438B461D2A35EE1C1F559096BB04
+2E174AACC03CE5C68667F8A59D2B2B7DEA85040EDF8F3175A14BA3596064EDC67058EAE7F60BEE
+1759694129264973E259053A70FDFC27E708A8A1D40B451061101C6DEA814F7C9318067E561132
+B57DCB9C67F7DAB6C5FAFB9DF7B6B53D45B8D43F66469DE6831A40A5DA32A33D5FDF9A3F266A34
+6E4A2E9D52F68599DB0138C3B08436C0DBA0A553F6133672860345B77353BF9EFA3FCC80E49D8D
+F84F85F1A99F23BF470A9314DA381370BEC348A37EE4517D3372D33E528F137A787CA9956E9BBC
+C8446E71CFBDC6D92B241AEA8A62B77F40A630F5E72F623C18C9B499DCF511FF19C40E53768925
+8C9C933CACD974680F6E443BBF3CF00356A498C63A56F68843FE5BEF635A4A671874A33133D525
+E632A10F62A36120E5BB9C2216FE80DDAE94CB7540669FD0BC404D361BFD34EA879E50A44D4071
+949AFC3CB4A4E4181CC30DF9DF63A6A30B38EAFDF30158A1CB45F2E433FA4DC62763B6CEB411E2
+442124F95DF503C4FBAEEBAE7681532B9E5936716F6D585F51B9871321D5B7FA5BF4704B0A536E
+78D00372CADBFA191E5E3CE0AEEACE1D6586E9D11A0FE37C9824977FF1E6F95019930510137ADC
+C4A4F4C4ABDF76CBD32FB977534DB8F49EF673AC29C1A559A1EEC69F0EE5A42A24D20327CFCD0A
+BC278473031C3F2CBB34BA6E424D990AEC6C756293821C5D439D4C8F54319C4BEF22EE740DE2E9
+3BDF51B15FAC6E469A01C1B5C5690D16F9754A8A3094E751FCE11000F991C566C7C1B8CBE772EC
+80B2A751F829A4058A28110013AF4A3DF7DD7124DFF0F728A25EF78F78EF33A97373DE68D38DCF
+D1E29CBF549011A71ED451B1E7EDA255A14975FF44F1CB448B71B09E82E8DD5EF75716A6E32620
+658D229108B8209287C2CAD6346F0E8BBF1EB99BFE8952C4080AFCB21F58DCDE2E73B02428D2DF
+7B29C43DC1DF324A73F480685198F8006C996958AFFF6A55B459DB50FF2A33EF43E31923518FEC
+28598D092D8205300026E04907332830823CDE60D062E0BA04CE7C801775012B4835AEA56FBA80
+21097BA760632CF097A0D4B94B5BDCBC2E61EFAECC791FD7202B00E678D6B76F891B918F63D494
+72BC7C5EEF4BAA30ECC71B5DF6315A71095F9E769DD0887C4314AEA236A8EADD9DB780411C0733
+7E337744BDA802DE4906C3F98E644C638E4C86D5F2A7B2C17DACB10DEFBEDF030A580AC847C0AA
+56D4D4B30B513BBDC1105978412EC2C36DA5E4F1EACDAE3426DD48898DF1DF0B0BB91C3343B487
+14EDAC8BAA025AFD729DEB9FC96432DDC0D782D226726368B516E8F266855D7D02472D605AB245
+084B55FA61A0CAD04FCFA9623DDCBE109B2AFBB69955809E2989B5453793032D1EF7D7D8BD4E10
+1456DE181A8D7DA06EFE2644F184928270400D29EA969154136D1E810386835E2A3161A3074BDA
+1DDA9B028910927B84B44C52DA2E3F0CC9033A1ED31743FF1D04D281DF1D62735083E0AABED00D
+C0090B1453FA60E5D16AFB16A02DC028A418F357951710B45948D06CE7BDD0BECBF3BC2B9CE44B
+6E47DE415A655F6D78DFC36995DF01D28BB52F750FE557FD2A82E36C7B6D9CEE9DE4326D69E261
+74FCF2D3F78C7F68EED0374D80929FBB08419C9D2D7F55D1AF8C3639DCADA1C7DFEFB7CC17D807
+3614A1084659277FF822BA6DABC3371D600A14120DADCE7A1F29257ADEA32DE6186D1E2FB54ED4
+B9BEC1F268B90656B224757015C35355841698967587305949A7158490FCE4F1BCCC2A83DA26D0
+F1D7A9912F8462722A58F5D0A7A4DB48F527B1AC5763E6B45A41830E1ADCB09E0F336CB97CF239
+9513DFE02BA8334B6A7EC74C0F3B0BCC61382B69D062304DF98B09F1E13291C97274CA134CFF86
+CC2A823BB8A1BEA31B8A25F843B15273D0F1BEB8C18B3A2E2027334A27B5EFC4CB0068C79E5CFB
+AEE391D8BE2C4CA0F8A630710AB09C18C0DFEDE175ECAF12063631E9B25C6C9FBC3D49873002DE
+6262BCEE73E4716DC30D610EE5402597F514903E5EEDD8A75E5A6FA117A21144AB5B338C1D4B35
+9210169EA0726B14D99E48834DB5D15691FD9095FBE699C46C7E6EF3790F6005C05561E053800A
+B8E261C17CDF355646A1BF29414D666FAA5C1EC43903DD04678CD1B5097513C0C69EDCFA5D71F1
+D3E540EDD11D4B72ECA6C590A57A41EF5CDBB09DEB1FDD6C823E10EAB9E6B9EF02F4045696D615
+AF4E01796C2856F376F42940CFE098D303C741D0257EC3CBD7FF2D33ABAFE8DCEBFAE575ADDE66
+CAE813A0451E5825AD0234D045630711BBC3853D130544E0B0E787218107450078D6F380303DA4
+DE2A39A9A689AC4337D255477A7D0ECFB746E129F779D1F45F86F7F0E141923AD062E6FFC4134B
+6B15B2811DDE5902AD397044466318B4356DACB9C6DF0CA786D3D81EAB52975D5C6E34D32B28CB
+608D91A4833D5D35A777AB115290A4BFC8EBD24846736B0997FF9D5DC471AC673984AC8E8BA510
+95442EF37C5791C650C3A50A2907E0447A6513359D001FBF3EEB4720167AE69D2A6E2F8D068DCA
+BDCF141A61A956AF4BE6DF3EA929843344F2E38951B9EE4D38D2E51A195842E61436C77E7D953C
+AB3FB8144AFDC371B0DDE968AB88493C15585570F7DE881A1724C0CB6E8A3433E6E85320ADC362
+734A1C81C1EF9CEF1B863A803F96B5F1F61A05D61B9992E99BE5A52A58
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lsunr03
+%!PS-AdobeFont-1.1: LucidaSansUnicode03 0.9
+%%CreationDate: 1994 Jun 04 09:58:17
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (0.9) readonly def
+/Notice ((c) 1993 Bigelow & Holmes Inc. Pat. Des. 289,420. All rights reserved.) readonly def
+/Notice ((c) 1994 Y&Y Inc. All rights reserved.) readonly def
+/FullName (Lucida Sans Unicode 03) readonly def
+/FamilyName (LucidaSansUnicode) readonly def
+/Weight (Normal) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSansUnicode03 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 148 /0394 put
+dup 154 /039a put
+dup 166 /03a6 put
+dup 173 /03ad put
+dup 177 /03b1 put
+dup 178 /03b2 put
+dup 180 /03b4 put
+dup 181 /03b5 put
+dup 183 /03b7 put
+dup 186 /03ba put
+dup 187 /03bb put
+dup 188 /03bc put
+dup 192 /03c0 put
+dup 193 /03c1 put
+dup 195 /03c3 put
+dup 196 /03c4 put
+dup 199 /03c7 put
+dup 204 /03cc put
+readonly def
+/FontBBox{-615 -440 726 1024}readonly def
+%/UniqueID 5054503 def
+currentdict end
+currentfile eexec
+E98AC76D0B9811AF896A7D2786CFE5F8CE68EC0023DC2681A7AF04C897A42BE5FCFE91943239A1
+3AEB5296C6852464267094E08A45F9BE1C443CDAE11667C6CF7AB42711A6CCF9077E8A2D8CBC30
+9D38A0BE6B8A865AA6D108DC56579ABCEA85FD25326DB34A8A3B77A5424AE4100C2EB6804EA369
+AE0896E47334E66BEF4DCFA3CE9DCF8BA26773A39C77A33652D76918EA4BC304D746DEA74382B2
+CD2A6283142BD4605E129465DA84867CDB60E18F858C99578A3DD3BACCE03A8A6990C27D045C3F
+D9C8550A2552A64F9F431169CC4AC1B9B275DD9E6D5F3DF5C70E8F657DA036CF63E714A17DA9FA
+AF96888F242FF964672AB6D9CC68989DB538723337304795EE327BAB72CEBBFAB6A376093EC250
+7E6CC4E11275DB4AD7283811195AE1AF7C8235D220FAB9F10C43D291F873D989F30F3E2BD37AFF
+E5D4DB432C168C065D446F0B3D58981E981E9FE5CB773EE40AB01241EA403188FEF5B1AAE43FAE
+7DFBDE6A367FC7D6F418E569D7CC7B3D20FCBF2687397122164A647041D12714798560ABEB8867
+B266991761555A15A26569EB0FBD0137EAA54C1EE6010F0793B0896AE1CDCAFDA76DFFD032108D
+FBE81D02FF87E094C0012FDF048557854A7951C19C117397A81FD4C8F2D32D5AD9EB1E49580125
+3BB1516DFADDB20EB7142443A1A133A5474EC8EA29103BE5554C41ECAFF76786FCD0FEE4971FCB
+646F02BC421A7E4D1E5E0010A9079D17364753074ACD18630A5C6ECA43EC7C53C4B1A5DD0BEE88
+9201FC8DFD39CD0C81863BD765FE7C8CA2A69D992034D8B8B9C3486D26DA6AADB594B6EE99959A
+445C809D1D3EBA95FF9429FB957EAF9B9C7E3D814B25CAC10658218FE2993828ABD4C0A7650362
+981E23E95B851A8CFA68B80D4DF911F9BF21343BD3E61DCFA86F20E96219FA1B9713677BE05602
+A6EF36F450877DABB0E42F2DC22538C31B680915A634C6D34464C3EFFCD75E60B73428ABA3832A
+F9426BDC82D30589727058692220D02B5D64DA3F8F06BB80D08B77A455702FA9F2A3822698E02C
+DBAB8BF4E63E39D377C60853E3B8F7B12AF04BEB45AB27036BBDCF6C58A80E3B3A61563E026C72
+4CD6E7C407B7404F301E7B1AB0EB210E41CD5148396089023AE9401C80831E627EDABFD4E30E18
+EAE2DE1884D7A3813D343CD12F9B13D935199CD744F53273DE6FCF7B0F6105BEA2176D26B9E3BE
+794AB2120BF13BDA3E056EF6D06F8E219B54E3FED9A7CD767C428375E40351E73663A739B3E77D
+FA3F36125473E7FA6FBF4A99A69AE1DBB03CFC5C71D2D941A15C1DA9C399EC307DA5D75C8B02FB
+448BA23DB70233E83964B29CDD5101B404F505D6C8462A37DC5DA7AFF8145444ACD627E8933F24
+7EE0163AB6CF596E882A8B123A102953DB3D0394840A2977DE544DA405D8299B2AD3253C188EEA
+F07D57FCA1FB375B9BBD397E1A500DB415964E518B2E2FF27A3480B58E320EE8AD0B76BAA2635F
+3632B6AFC2358A3A332B773848742A11E957ABB886B3CFFA93999A478821EDA9FDD823EC8818B7
+2BC26EF0ECDD2EE498D92638D2BC8E19A283C571CA8C886A8F8E647DEC4D6424FE9CCA8308390F
+78F361486C56B9C039B14F76EC5BCD8472F4E6FF566368D5FB7A55FA0E887E9CADC5044391FFA2
+21C598CC9E2CED7907F736F0EB8F12348D64EBCA0672BB8F1E651BBE785A09A34223663975B48F
+90481DBA40982C8857DA5EFF13E9F5BCFADE13F02C4C5D4308CB09D6588A7BA7A2E1A4774701CD
+65C7274D0E2F92AA0CA4A2FFE596733E61BD589D9B5E84835254D8F22DABCCCCE8D4760E13BC4D
+6E85BCE03DFE296055EAC95B3523018DF17E8166ED03A23E1A7EEA0AF8C65F219A8F5D7C6F3253
+7160E12174798BFB8AF179C70A8E43C167E1DDF34E47F46543CCB7991B65A2FFC11F4917964CDD
+C539C2E51E503998401540F23FD6A52F81F6792F2B97EABE2A74B9F58FF2C891E320DEE3ABD153
+FA43F9B456414F8207600AE3DB5283BA7A0F18FC16C58766C58EC1AD813E77BEBAF90FD8D6F55B
+25615FE74761320733B58B545D584826E81F2849E1875490F15B774A3A863A20BE5A2EFEEC6F9D
+337E5133329C0D4E8FB4758FF97DF0C97127FBB5F4C768439C8B9F7DF2BF3EA516C268FDA3A305
+BC2485ADB785E24A4BEE9AA3E7C82D3994C19249A3AD713FDC5B5C981A18E3D35AF4CE2A349C22
+E8923619B85E3D3E4B314A1BA051A506824368F4CAAE420FCF9CBAD8B9AB38463229750C31FD8E
+B4042D8174F9C94830855B547B95210E59A601A076BEDBF121DFCF34440F65E46365871F3BDDFF
+74232CA8267CE9864E4C4CF8D3A0AE94E57FBB2335AA4EF757CE11F554D8BE69EAD58004BE02A3
+B6B8CE3F5C5CD23013BD57D15D447512FF69A9CD5914A73144D71F06550E93695F0F6CDE77C1F2
+59AB5BCAE03478C9B172B792B16EBAC0F44F97C39FBA333F9BAC6123506028FA93F2ED96F88F81
+8A3EAD11809C5A5F4FBBB62C25C9C5B68B82C1C9734DF1989B00553BBCDED535F6224E2F74E18A
+29CE4568C3A6B0CF980AA1F7CA1F396D2DF27D4A6C8B9E104B5CEE96CC4CB4399EB2D17269B64B
+F50A3A0576EA17F41207717A2367094EC5D35DFEBA9D1E0AEEE710FA0E2297C91AD8D002E6C0A6
+FD46D5D123BA55B2595D9AE0C0C730966B1BBE3F464379167D8A7B817782DA4EAD919BE0BD1D8C
+61FDA8124098009B17BD4F4A0C189ED085CED24F05A10ECB9D96F2CDED8B5D8F10A4BA62D33F94
+FF1FEBC20C9E64A7DB41218FEDFBCF94DA4F16CFAAAC9ADB9D24DC1958BA67D52F9625126D3F34
+4C7AE7634B21608049D7D30D302E95726FA7CC91B445FCFE464D6E1D79389404F0A28F8DF0D27B
+AEA1C69B435B2CBC979580A2175B43F0CB739E86D778EFFB25D9C316903B82274ED9AB9E1ECBD4
+03EA7EE377A11A8EC6A8F9599879878C704B25D4A5523F759D09FE3655FEFAFD834F9AA8C75C07
+4697A890A38839FFBD754AD936EF8088D20629BCC0A9DDAFD5400D0C596391640FCF4A8F5A1155
+A383F32ADB70FD8E5AFA66484B1B6895B6F2A7859537C2088DEFF14169DAFFDF1E0ABDDC646682
+324828259958699EB1B21B7638E3CBFECDB9544F3BE2F00636906BC83568FE854E62D5BD752A38
+084421CEC5E659D7A9BDE211E643950843A0159D6834A2258933F8C001C67B073E9C9BF7D8EB68
+BF061B1966866465C8F7E1D2DC98F39F3A9A0096D62314636CED9B4E2E09225760A78B1C58A1C8
+2BF342F7940F6FC838F4618898C313CCE6311DAFBA75B344143736C7EAE29D4DBAA4B56BB3781D
+D2DCC86BE5A4C4DE100BA03E4B133A239B7F6C3ACD1C4B4FC59CACE546E74591C12BF7497F908E
+BBFE7160563BB47FEEB502E3B5B21EF579E375BF8B29ED72640EEBD2BB10FA2B1C30ED5EB0A089
+46EDCDDD233DBB94E95FB0012CF8BF944B683DBB52C90A08E5D53B2197FD4FBE9AEEF3245D6B9A
+295445C148C20C597CB2F705512F3EBE2CA9A63E1B479A49DF54AA5F052283ED369865676C7470
+1D7F3D4745944506AB5B2FB450300BC1AE7B0F9B0A3F1BC5499A53962C4143455DB5B3C554FADB
+AA6FE569A1321DC010E5484EFEC85CD8CE23C89C87D1AA2982880C56109F596DCA8258FFE48384
+1B2672711BA606DA73552081C55D0DCA31460F3C81D4A8EBC7C55A487F2C08A986403E209E52B1
+A38AB94F399D667720959DC10F9675BBBCA8BE368C3DBE8A3C82224DA3B977B0ECC13EA85F775C
+1BAA1EDCD9E1C52E2169A10098B56C74E2597E5BBCDC693E27BD947033700DFFBA4D2BE22C8C0A
+CB0D4CB909EBFBEFD2F66FD53157E4BD02E8D027A060BFB1452FCDF79ED71245F021D29A21D16A
+8D8F2D0B53DE50B6E98715D2042E2C46B7C3D77640170993596EB481FE6A6DCFB6FF046147C68E
+241E62DD123B598D408FDA25A5FF8553B44FF1620FABA4610F905C7EEB946CD6A09D5EA961FDB7
+9AD3EBF9836DEB52B4E93C4F1A1C89140272C4955908203C803C5803161AFB2C9B3510CE607F9E
+2BB8AF8BD19B38D38F7942446DA9A92770333F8FDEA61394C4C1110CD91E95D3C4FAA33841D79D
+F1CA42B0115ECDED6CFDD92D36A2EEC3A2904C354206B987EBA4AD69DD6B5C7A45B96106593C15
+F89796CB639575DAD7D277E09D347A4159EC19A8D881E6EE3E9093B51E9D9B1CAA1F0809EDC2EE
+206F733C1B11C4292F75D0F37B25706AAE5E7900726478DAE756A7F59B4D0580D2FBC839D6F31E
+086CF751F1017CD84AEFDA2D318835DFB74C02B01FB151D72C4A84D0BB976A2C35ECEC00CFB83D
+EBD59C29F54F229E087C1C6E6D7F72F32685E2AF4D4353499C399F2438D18FF0E011A0532CE68F
+F5B644C3D68754CA5BA2D48E0E23C80EC34F43468281AA347664D916F56E97B9F0E17A894DE514
+9800C5C7B78EDE6A882D5180EF9F51ADA5E3B511B07A89CE1680963DC3848182BDFAF361D9A893
+830547B3FCD4E412838E214A872EEA88FDE6298B15BB69FF9627EB37C27F89071F9DA74F4D6C06
+37669C6C09BB543518AF798DC1B1A10E2D53D24C3A5B1A485D6B8179DDDEDC7B82D610766BC80F
+A1B2C3D3A4FEA53933A6FF83E85DBABA6F5EB94FC23EE28BA710427842803E0F375331FA1EC106
+8C396CCE31A8D68B1A7A0EC87CC082A501F711E93B9FE3DFFDD8906566B7B25A260D1C64D6746F
+80A2D323058BDA6BD4122F0C04B39A4FA271E7B75A1D8FF82782540193902C88CBD99E55B33245
+069BDA735E4991447209892CA9BCF5802D44A09BE99EA64ED4EA1FA39B7AE10D8B47ECEDA33D80
+F8BB0684F289746D5D2DCCCE59D4E6F48D8F7EAA81129BC47BAD6E74F4ED9B3032156B302AD7E5
+C2F79E5A0A9DC77FB986BB46F4039152EF22331FB70C5AC047EC864F5EA5EBFDE11B5EC4081CD5
+FCDAF37B47C5CC8AEC7CBF21939F89C998AD080B530E969D39607B30B5E4474206902CDED411E1
+261FA85AA8CADAAFE9C8D0CA713066ACBCF385F4CD377194D26BBD5918096A3ED2C287A058725D
+BCEF5D6D2A0EA6300BEEF77AE3C6CC068649D077A38CA6884BA08B9523E51DBE0DE61CF651B7F1
+27C93CF9A756A521276CDF6ED0FA7F4F559BEC19DD8252CB5409CD25F20D73D53375CA25DE2CAE
+C1D980C6C0B99D20E3713741A86003237A291A0815FA13865649B802C08B28312C61A95910F8EE
+BB51351AD5D919FB238D9BCB5C0653A14258C6899E22FF0FAE8B81804F3112C598D1C2F8860063
+C751F39CF1B7ACF3DE9E9B6F6FCFA55A59D5516C173C90B491ABBC65EB3D93B416597F22825D32
+22D9E6F5F7B993127288D3ABB7E966C9F2FA0E0A7A5B794D72FCEB0CCBE9A201041FE2338BF9BE
+6241012E1E255327CCDF5FD1B0AF10626DC35C269A6E5EBCC697761374898384AF1B00BDF33A88
+E7B9628C9A44435BCA110B57227D9BC9D8BF6C2F205A62E189E683E50EFD1F09C38E62B4B12426
+2982074470A4CE35EA939B558BFD24593996AB198A669393B749AED33991D833F85DA040A04379
+57CE47FE19E30AD150D7EBF3D9FB521ECB0D3C1DD75D45C180619E0131BF9636AD108C6F7F0F73
+0937E3C8A4F788EE09F3E4A23078A79F386A7F638286AC0045F9D52E8D5AAFB1D4EE7BAE0B27EB
+6FEBE7D6336241930DC406A45F261FBACAF975B7C4EA25E3751FD1806332CEA37442F99EB2BF69
+C87C649F93C5EF9DB13584690078CF7BCA17543DA5F867C550FB219C8581F3DA4DB0BE951C4932
+D3B65056CFC178183EA34389B3D28661979F1328A326783AC6CD34144EBB33CDDD58EE8A9A7DAC
+E4AC91FE1532310F9B36B17F3CC79E6878488AB43045BC5B95397CE872D1429ACCCA5D99953C63
+028959839EFEC3F0A8E3052E4EB41E673F0FA73B9F82261CB6965C621ADD6DD858D7B2A8415C11
+BD9C51FF31D1F90332E076977C6461288A644D66ABD8E295AECEA2F37DAFC4F096FC0AF34938A9
+2C1E5D94A438319FEC694EE5E4ED1AE5C1FA82DDDA55C394C73CE39F18137370ADE011C4FF7213
+95A444A57EFCBA18
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lsunr04
+%!PS-AdobeFont-1.1: LucidaSansUnicode04 0.9
+%%CreationDate: 1994 Jun 04 09:58:28
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (0.9) readonly def
+/Notice ((c) 1993 Bigelow & Holmes Inc. Pat. Des. 289,420. All rights reserved.) readonly def
+/Notice ((c) 1994 Y&Y Inc. All rights reserved.) readonly def
+/FullName (Lucida Sans Unicode 04) readonly def
+/FamilyName (LucidaSansUnicode) readonly def
+/Weight (Normal) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSansUnicode04 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 57 /0439 put
+dup 74 /044a put
+dup 76 /044c put
+dup 79 /044f put
+dup 81 /0451 put
+readonly def
+/FontBBox{-90 -211 1024 940}readonly def
+%/UniqueID 5054504 def
+currentdict end
+currentfile eexec
+B947A691BCC86A8714868C4E8EAA6693E50213672FA40A24C1BFEB6B454C65D97FE3C8875CB7FF
+DB41FCDA8653D373718784E1CA8C2E52026C505028CDB223EDE069E4FBEE2F9866016FCF3C439B
+BB0802FAB586D7AFD17C75C2C867DC859619612A4199CCFFD6C8BFADBAAD892A6C666D828BC33F
+4F4247E844052898BE31C94D164ED8D032C6F943D6ED98C08911A23F5A44886EF9C56C418B6902
+CF632ABE9998ED7354C01793652E9AFF38B16675570C3F14DD18F4E0EA8F81EBA3B5A2EA1A6A75
+2852B45D9DA70764044BA4537DB8B3E88BFED459F70BDD5F881C906573D7E01AA459D103FD3D95
+D2C0D6CFC9AA56C9706482A513FCF9B41E612B7F6A70EB084A6F9D7BA73BC196B39EAC357B521B
+E3232A0CEC9DDF61F6A57661275C3E20359577BC2124313A4BD33BB79B2760F11A0CA7BF9AA8E6
+83EC1146B0B2074D70789306AFDE9BC65D8998C6C6B28D89E7CF52E057C9E40738983F55D859CD
+0D719713B944F82DB6F8364CE44A194C0B4E6E987C2A392DAAC78285ED9C29C1DF8F23842C6AD7
+F2C362923E2E3C896F4759020EEE519DD5BE0603F7ADE8A7908B806799345CC450EF767993D072
+238A614D5DBE33015C181CD4377871A633824D0DEABDA62756476A2E12BAF3A891001FFB69FEFB
+D921533AE16743B926BDDFF77BEE342CD2AE8AEDCBCA8F90A10779CC9BF24974B4956DA4895299
+542E68FD9F5134EB2855709D7F684998BF878869A32DB0C6BBBE28B5AF1C1007AD68807513BDC5
+583819F8A5C8FA338B6CEE5D696B0BE6AD4C132E8CD0F3A0FA8DBB22BEB7F21AC6EA9D2CE4BA7E
+F4A1D55FA87B7A57DF56D478B444FA969F3CA003267F1B45E69BE9210906D363A62731EEF97540
+E5372A27983ADC774AD984B795695D3B164AC04CDF48FDD5697A3F855E53189B795887549A79DC
+69AE4EE9B7DFC5732BEE8F9FDAD6008C6EC06BA5695492152EFB8C2A2BAD3D44EEC08617AE17EC
+B22CEFB1122BF202A212F998882C2F653D56F2D0737FFCF84E0D52DE3CFA539954AE718331109A
+30267B8CF12669EB05BA116D01F8F01472F466D26400B7CC841BBE94EFF2C95B36C695AA91FE51
+E2B1DD43A459E31E01017DB6D44ABA40FDECBA6FAAFF5D2E83219DEA8777A845F6E4F586E73B42
+FB7116974F95E2BC2FDF85FD5C561AC5582BE899C9E85FDA05D02898659522A38B4F497F16F534
+CB8E4EED100844CF77E70A0C9C6C18C99124155AF1BC7F67952DADF6FB324B9F70859BBFA5D191
+D51D024897422139DD5CB41591085BCB8A9655A43A7BDD93D78C55859F075E58B5DCAC83BB00CB
+815BE032EE24398C06F8F578B49CD897740A4DA7E6DA7DD7508EDEBBE1CC0AAFBE06F570987512
+0A1B016A82C5E1C27E48B4CDD5F2884A5AC18AB5536A145A7A83EB4AAA9971865EB69EFAE5EA41
+5A9CEBF4DD21A7C173D5BC38DB8E5C2A6EE01B504A3FA492A889B67F9E27298149153FE446F040
+B7E2C781059C65967C51E23B261136557B76D675A79A006AD83F9E0A531C6EC6BAFFF9B02788A8
+35AD5EA6C7F8CC684C252AA2E7CD05C0ED81B8BCA7D4C9A0485DE412915310EF3F8303F5F4E222
+769DABE6CC59CBA5036F3B6B1881971217CBDAEB1ADDA602EECECA4EEC033A1485FC32A9F34C57
+994BE283205ECFE0B241FC56D225AC40984DEA53961B7D43BC47F7D4011AEDB3E3D824881173B0
+6107D6C34915364BA13D09B64F088504766072E48BECB0258F002BCB476AF40B5565393CEA08D8
+0B86330541D0015DCFF19A3FF11DD0DEA1E164295C22677DCCA2E69987C4DB4273ACD833F1E8A2
+90C7C7E83154E97FBDB5B28103DD17BC8187A0F82B0BEE9031F45A869161510B16EC14EEE4A90E
+4B0CFF0722D40B3A54EB15AA16C4A9EB4747B76F3EB24093BCD34AB43651603328086709CAB4CA
+DC987A0F15AEE2EB086532438092DA0DB860C994D5E3892618A1D6D536BD6E1267C1B79D2B038E
+C3EAC72BF37A07F8338FF4ED00A2C096F2C6DB26E71F13E023D25D3F3E547AB07E837DE246E0FA
+73356D30EB9E8C83D2A08745B3A238D1FB9F18CA32E2CDC93884D4B1F87854BBE7593C45B8F7AE
+BC916EC39500AAC2522595A0593F2B95ACE4EFD4A016D6D6D1172AC47EA3C92AE915608F20F0BE
+A10E875F9DDF6E0EFA32C3EE7965F34AB6CB670453DFE936D4D1CD77E44A1E01B81749EE49A4FC
+7759CB1E0D30CC814E6AB9B51FF675A22577A3DD8025E04CCEA149E717FBCC8C424196B35D1924
+3C562D1FAE2E2DF182ADD0AA15FBABCAE89D91A363D3691CD9E2C6EC022C34C1D5A6F0EDD6189B
+59561647A60F07E60202401959224E551F14C940667AE193924A0A83F4F85D071AF94C79056CAA
+B4BF0453F2EFE718C7925B7D150F810156BC31CDBD19548B4365E214CC8DE2357368A8429A9D80
+6C2CF8AB10BB393455B8EC83DAD41021DD2C3C8BBD19F7F086C7D4AB0E773F9624CDFA6FE0BCA5
+1A581C845241710AE04EA754034710C1ACE81F3693F17A4144C886ACAA69D797DC781402C297AB
+5D83D4CF37794E7186404A8597FA96FF43DDA263AE1E5BB13132DBC7A899B7E29136D8ADA59BE2
+F9FF6DB733B428A2D4BC94024D03210C67A9DD92FFFCF7DD20DE16564FFD28F5BBAD8FC6FFB08B
+8EA5C8183331931769777C502E4DD4348DBF937560C37168C6FB31D04483E204D23C51F74BA204
+8409709D3B387CF7ADC611C68BB8DCC51ABAF46F4557D9A7D39472775F17F7D57FE5BE656B7178
+54306B9D35A6ADBEA90A4CB0B4196045B01BCC454395C6DCCD91DF342E853E390D0A060A587673
+6A7713D1BBB7EBF6BD15680DBD6996E69BE0A25DE4358BAA6FFFF20AB9FAAD1F62A773A51FBB25
+9DCD63271013026CC59090452EFD867D24C4B87B30C8B338408836B68D9F5BA5444C5AB5075D38
+1A8FE2FC68F3E307710A68163554EBE7002D15D5E5A8DD662195CFF998B7826FB58345A0C932B5
+E3505C5A7174A649668910C3493DC2BDD0635275431DDD1304699B371FE983FAB90976279ACA40
+6777877762511873E042A65E5F0D3CD63B692D22364A208B555EA28963348D2C2DE3BD025E54DF
+656FC7749C9406325C809B36EF3CF9BFE641783D6B82DCFCF63482D2E82BB4DB6599D1771B6DF4
+FCFB7803B5853A371CAFF56A1A6F7060AAED31347807AC7D0114BD90CFBDF64C0A0BE6D2A18883
+CB9577A8480062E6849942CFAF4290F2BEFCD4B7A212F88B6ED02A82F4134C66609096E11258E4
+6E9EC209B58597889F3B86F66D5678CD1F0A0260BA8305EE6B038842FC4244767E615E15626773
+1006379D908D8048E94ADB70CEB5E6762763E8744D8CBE771B01BF51EAEEF378EFC38233FCE953
+1ACC4F8FEB18E3164C7C834F7A253C0EA5CDD0A541A0E8A263EC6CE7810D311D45C018CF88579A
+60864FAB0D4D6E8DE5D2D77639AA944DF27C99067D4FBAA626BD61B36F4DC0CFEFC52DD1EE665E
+FD87E73F791D95BF9368072D720A8E7069C9C9FA65D22B0C401115D19458883F4B37E631D6B532
+8C7E5A10B6E3F9407FB6AB8DB7D25BD0D682B197EE8C55663AA50B6B20DA99B489F8BF5F091949
+16DDF7781E5E437C208BD4C68F2DA4B4913C69DE358E9E8750F8AE45D8F0958F30FB7AC997B253
+C255CDB46054EE7CE90EE8C3B0379EDE79009F6952DD0C29A682813B283A18E11ABA75DDB8985F
+F81377EF1420C3F93832DA217576D9871815CF0FAAD815FAA4B8D93862E0F7FE9424A40186E933
+81DE8FAC067BFED22ED9A8D6794FD76B97270E30ECECB34C4CCEC5C8681BDD66DE14679A85468D
+2C7952A33C265FB2650B1D8DC32E867A98354E21F5E644688285315034BEA5C8981C9B36502C87
+4A3F87B5BF5BD1E3241B4056D848F46BE457752DAB938CBA20A7A8643C99E8A0719D9FF7422FC9
+1F25BDC284D1F0664C6EA1900938848BCCFEBF2BC4A0E37DE2DB48C5311F7BB5FCE22C3948F8C1
+AB83B98945A1FD7F8812CBCF8852F20D26B70D94D04E4C3B3593BE0716B016630E43C349B56F9F
+C17A9D19172C4E1220F97A7B350DD592CE9E8DD5481A3A0733B95C58241B333586198F375F1F7A
+FCB84E33878056472D0153459A5AAEB4F264AE38CEF24CEBA2A32970E642820E9708B137180739
+0755DB1F6E830A73DF803365B93F815A330E307828F3FFE89B1051EF80466E3F2BC7C5D703D5AB
+10F0411C20E72745A13167759657C8F68457BE6C9EAEFAF4C689839179432E36200EC7C492EF2F
+76AF90BBF8333DE26D91EC67F32425B3655D2AB080D6F62AE8CF99002BDA6D369529CA0110265A
+E93FAA293D3E5CE6121C899FA575DAFAA8293DD6BEB7F8F5356B7076B38EF4E4DB70F004EB1FCF
+F2501A24FC75A3BAACA7E6D0706FDEB788C4FDFCA642536036F90E65F6BD876DB2519DF5085C17
+E5474B454FECA74BF0F3684698585397E3E04847A1700307B25D00A2543C5F5AC662798C2BCEA5
+1A56A0D92E1D376E01898FAF604AE6C3861592CE3CCAD063C628E15C2F459A6399556F582DB160
+0C8C1C55FA94E64AE5754715B007AFE6E024AD0E96218E777E90794820DCE4FF8C0F936EDF0C55
+2808CB0DFDA4EAD0F1FB144651891982DF671D9EDF47798A24AA5F0B33E9CF63AD8AD4F3440CE3
+76B4C47499FC93F8277F3D22457B98F956C39C53D177F0CCBBB529A36055AA4EEC626A7EEED64D
+646ED1FD0C3685CF4E2DE42693E7E212343B83FD75AC33DEFB9D16A1771D6D3622998E556C0AB7
+F2D811339E89330348FBA8AE94EAD8B18BAE18CA3683225EBED1A4DF9EDD2FCCC34E74822966D1
+D5F71D2346AB76CC3D0AAFFA3E3D57CEC007C9D892C5A82809976719F964186D3279D79B4B5AC1
+F0333EBB8742D25644A962D02EC011FDFD7455120BF41418D4FD6313066DBFE5A0BEEDC59ECA8F
+8D1FEE9199848433A584EB5347173D726A521859A91EDA4E2D73EE7E8C51339B86305C63E35E86
+B4FF303B8B1075999B68513497249C62ECA2736FF6958EC66FB78AFA10532913ED98C1E13420FE
+18C9884E3DA3ADAEBEB2AFFC5800668A2AE2752BD30945BD58C75EB522F869CD640B1BBD982833
+F92EE830EBB96507F4762E3138243417FD2C4738FFB542D1B2A29CDBCCF9F3CEDF879CEA7CAAC2
+570C352F4E4CF19D069FBE80F9AB796AF8F419EFAB203B930625C4FA2435D0760067D328A5641D
+834A56E35ACDB03751B97727E4553057FBD08C1236E45C424368A7B1550A4ED7A5E6270190C60D
+F2E025A2E24392AC419DD2FCC5D85696A0B2468E1995C3AFDAE38058FA85E54DCFFCF687707847
+39FC137FDF9D6BDB97E38642A6E6DBAE8B2E599069634AFA5FCB9DFD01A00F7174EBEACA58E0A3
+29B88239CD746022D2B10A8BC3CC15CE973353C01D98D8B2D5AC9253CA5ACA59AF6324B5C69A7D
+A13E28170A4077709CE7B4B77B407898085D371E0F9207BB42ED043D8579D57F81156EE847D962
+FBD8412ABEEA9B941AFC7B39A51391D02695C8FA95C775F8CA84DD46B2A28D1735C2C5228FF7B9
+29AE385AA61818C2E9568A4F23F8E890583E7DDAAC4F48875429CAC2D54714D179355590FA42D8
+160CEBDCF44BC348271FBDD219EB95D1153075C82383339334D05F741D7CF5F12F85DCE3A25BAD
+6D518F3B13A0DEE4DB2CDEE3D284A8DF2F7B1C9D07E8D7F9D47D6BD6088591A9E089EA2BEF5B83
+CAAB3EC766B469DF9640DFBB4C32E505EE2A01EBF2E7155729D1B9E205711A74010C6BAC48F73A
+4CCDB21FD55BBA48ACF5E5126CE38ADAAD6DBF3EA6297C56EC9CCB98766DA4C76DD8542BDD1596
+BBD288C262E48A15C27690644918944E039E9012C08E62A63495BC5C6E82285885A2E830DE725F
+A7C746BCD0F333AA0DACB4D044CF8DA68EB5A1DD7B657715562D0D3F3F94F0B642C06BAF360191
+193F6ED4ED5F781AA5AE2DC7E9A6B73B182092BD5ABA6AF79E638152F7747E5938ED28D9C7D894
+A5762C519DD6620CECC58B2D583D38B63584172CCE9E4D5B3737422ABB778B2B85E9F6C80D3CF5
+FCBEE03C2C66613A8C5FFD6E5C2A4377472AAB0F1B93E7564657CEF1BA61C10849686BA4176116
+FEA3C5F3F89C492C1CEAA310E9A8578B7C5439355A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lsunr20
+%!PS-AdobeFont-1.1: LucidaSansUnicode20 0.9
+%%CreationDate: 1994 Jun 04 10:00:12
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (0.9) readonly def
+/Notice ((c) 1993 Bigelow & Holmes Inc. Pat. Des. 289,420. All rights reserved.) readonly def
+/Notice ((c) 1994 Y&Y Inc. All rights reserved.) readonly def
+/FullName (Lucida Sans Unicode 20) readonly def
+/FamilyName (LucidaSansUnicode) readonly def
+/Weight (Normal) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSansUnicode20 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 19 /2013 put
+dup 20 /2014 put
+dup 24 /2018 put
+dup 25 /2019 put
+dup 32 /2020 put
+dup 33 /2021 put
+dup 34 /2022 put
+readonly def
+/FontBBox{-615 -440 726 1024}readonly def
+%/UniqueID 5054520 def
+currentdict end
+currentfile eexec
+B43A59C23D31312E42BFF7A8FFD888C8118609E66724952B45D5A38971EEAF7AEAD27731404947
+E5D485EF2185B7B28FEE76585E49D85250EB800DB5DBEF09999B470F9167BB8A81B88DCF399612
+0C5E5C13C786349E7F44E018DDA185A7327A13F55575F00A7B68BA5390314FFC1BE676564A478B
+1A253C30B407F07FEC8E3E3C46BC787775A409E084B26786F0856006E38AEB9E71FD27672DD999
+15E5FF51153CD2575D5A841791BBB0DAC82FC347B4323CDA6FA02627CF6F313D71FC7B56A6F4AB
+9D45D4EBBA4FF9F13323865378F1240393DF17083189EA6A560B78F670F31187E21DD2282A40C4
+EC215B6E053C952A419363825F8074AA1F2791D599B236931ECA38548DF42AF21A0B93299C7A6B
+CD562A5D47894A3F2BB10DE3513E0101686157DCCFE12025B2F62AB48BC56966D41430446797CB
+34EAD92D70125D12FD83DD10713076729FC32F58FCE51BAAA5865AD74B16825913B821284679E5
+9C71C2DAF711C0E0D4E82BD5FCAD13D14E69C0C9E8DCE7F05D2A5B1F4B724498D405664EDC7CCB
+CCDA84490522BB752CB6BB095A3AFA53A75A04E8B6446C38CE1F543231B8E7A462CC128403A30A
+1553F8AD4952935A99E6781121623F4DCA70C680758A89F19FA860DDB7A02B71B4265E4EFE5CFF
+F0871888F3C17034282B2250FA41A8529AD3CB49FC2F94FEDDFBED06ADB863F82168180A185578
+755D4D43CBDF4D1FA47B05871CDF84694574CB0634E35C47C9B4BF695B573F8DE08A555F0A2DF2
+2774590AA572463F9E2FB1510BBCA5E8F6ADC8217855D4F1D5C837C3CDBC31E1CB6F52CC6D0D65
+05E59AD73924E4EB1B37E9C433BF0ADAC35CE1832DACF7FE538E921DA937CE895F565305535EB8
+17575E443932C9896F7D11431F8ED21EEED56E490E157FF33BAD34EEBF76042168A86077AAF03B
+A2173A795A37E0BCE53179C645E8C12C0FCBE7C33CC1AF08C58567B83B602E468A8E635F0811B7
+6F8E4318EAF2CC3C5DF01FD2A95662F00029F54AC7C8FC2B999CB46D6AE8D3FB1DC657C6E961C9
+F870BC5692211F2C244EF9CCF84C65D013425D119F60FD2131271C5FC6CBFFCAE54064DE267BBF
+3E03F44C47BD24364273AE3D94C9C818825440FEA0E06CCCAB1CE6C411628FD565E8C78B039371
+F4F6618EDF8BBB15197285A8379DD1DE9B0AE8C580C44EC9A7A74DC4A4496A4868355BD28FD537
+38C81C8060FC059EBABC9B8F14F65C347E47EBB861DFED01318BF955010A0ED66DAC569E6794F4
+3425476951FA9D84A48D7F9075B0A197936EBABE6B9D3513B542E1646A0D32995AAE08FD77921C
+79F575F40B8E813B330F1AA029FE6439D7505B9DC9210D43BA9CE32E3A14EF467C870B182ED37C
+654DAEF47A595E363AD0BB939085DCEC7155829BBE1E1A47F1F2A4F3432E34EC91C1C85514D35E
+ACE265943CD46A79D4226BAB3BF354A04F0E182B759835B9FE8F76F505057869CAE56BA3350712
+EB5103078544D804DFEA9DDAB528DD4939273645933425C0F64F7AC4E5D3B01D5D76CD95C65756
+B48FF39634475BA737AFADF17FBF3CD5AD0E88F6356CF06EED43EFEF9B5433EB1600D38D203D51
+A1099E2E20641DBAEC087D771323611E50B960C1B20EC7B1BC71697768A088D806400AB4CECC04
+67AEE799328421391BA370FF34C617F15105260632A8C0F4B22E792247E390B1F564C6FE227B85
+5A962A6E06E6F565D8D54F9887042237617FB78CCE75B0AEE938B1FF3F0362D6BC139C871D1BFF
+B8AA0877F9D3F0DB55ECEE0AFE6871E01F204332718A0EFC66EF197523FCAF46898F32C1B324C6
+DFF22FD9BDB4DA9D95D5D2208CA9D67C6C13B3A3BCAE8AABF40EB224AB9CBA55204458FC526DD3
+8380F3F432EE69266C02ED0086DC8D6053AB3D3330D436B04DBAD95818B0A5025CEF13C378A9D7
+2B6C775ACB4833AD3570D1E76BD359A5A8EC9C4F0938F7240A1B663AA366A4FCF3C102DFB0FC07
+994E668F503A0E28CBD1CFC49041562DA2249B608712EFC10C9A35E0FD9B346864E6AF644F07BE
+325FC4E08F81E9E8A6DE438D3ED64F05A57D3693F770C2E139ACEAB73366F56A94422EB50F6670
+9032FAB1F7ED83D150A8D26B45D8B59BF720D04C4E283A647065EC0CC0D55D9FD7C6502EE3DBE3
+E785F49966E1099CE4596EA2F1CAFD038E882F05CD9628F74A9A09A5DE677704A12CD82A95BF7F
+01A5147536FFC7EEABA0D288DF1A9C9B639350A266C42500696B7E925174AE15CDD011119E8288
+7EDF23F0AC7EEA78E38104C00BACCED03A7785D88FEA2B4A3EC5DA4ED2D0357EEB43C4278CAEAB
+5BE44EC6C777B67FF30140A391A66CF1B47778BC0D9BF6804E78DAEAFCF1C3F67760C94ACDC930
+94E68CC33121CAB7A1FA79E8E14276CC001A8D31333FC78721C8368034B418756A9EB23D1F7104
+43326DF928CFB2E1F9246CCF09F5D21537213B798D2B72893A8285EDCD48509C022EDB3E0943A8
+AAE2FF11AD8B6EC442F30DE19215EC6BCED82C345467DF50276F8123BC061EB2ADAFA6CDECD1C5
+5C529BD9B1ECE353EE7A58BDFFEA47EC30FF94FDEB0E465B7A45EC795797DE00F78E180B73B3A6
+F5B3F35BD80882003053F618940DB675D846095F63E90CC77B5022E963CC39915CF3B95F8F5A45
+4419ABFDAE6087C4EAB799A8A5F1CD7A234A2407A2C08DF813227CCE6DA56F6D1B081278C6E046
+96CD90F917C7AEEEA3032A1A13993079F3C41DCA1FF2B300BEE78A8D9512736DE4DF75CEBDDC58
+33F8D1555590AC92FBA63E2D59B80EE8DEC88CF78435CB4CA57D702DD144893C3279DADF5C6164
+70EA7FFF87FE66F510ADE5B32019709CE6D9BBEA02F2BA243975E7800839D904DC09C2306A292B
+B812F8CC973D40810ECA109BDE38961FC2678BC1CD377E2FEEB43E2072B38621801D5ADA0A92A6
+5F37C7FA277ABBBF372D08B834C737DDFD16B51190DD3043040B9C060A1828742BCF814CA98EA3
+77DB2DAA1B027BDE291293D8CFC3DC73A75BBB4BDE3CD80FDA05E46A2CE0B003663A2003FAE55B
+0535A681672F7D8FC966834DEC4DFE56D3286FF86C10630F9EB91BB731A9C2AFDDD4F1554C4728
+4D68FE4A486EEDE086A565929B97FF763B31B5CE48678860215F768CEE265E157F1A44C3092FD0
+48239B140F2F8801D05B76FC9EB969BB6EBA6D472F1C016B94012127975E20FE911529090CCCEF
+4C980611502E8641568824AA0F18FC3CBC5C2C46DF4A310A1961427A7785EDC75D0DC93FD03C26
+43FFE864A91F4F285FFFB5C74803081A71AD441522F4C5DDDEB96BF5A7080BDB57A22AE8DD9310
+02D940551006B0863C4274D0090A9C2EA9516F291F4A833772CE2F0CCF7A92AE08BC02CDA5B434
+3D8E61C1F1ED39A3614BFE3BBD2BE7C9C3A64F1F7FFDAFF51D3FA0357F672316BA9810A620911C
+06393D472F8BFAEF9AC09A031C3A1A33816A77A6C5EA88AF4D4303EC449982D05ACA3481807F2F
+0775C87DA047792078D7FD735623D86C37274CB49235A22D01AF43791078E4AE92AADB3EF71EBB
+7C96F303E70F1E3F7569471C6A0FC9B9C59E4DC141FBE2752F6717F4A7C8CB5D47EDE806D835D2
+8F48927CA3A3C38B1E5310A47943668646946991FD87BDF723BA535A587EC98F9CC86A15F3AF79
+625C5E9A1570412BD515DBC288A9DC3E4194A2031707D47E54A1FFB73099356BBF4C67A22A71BE
+AB39619759800E4F9F4B558457CFD32E456D546BD2542B3F493A2FEB432FC1511587E4F5C0BCE6
+3BD4CA268846F13233A6D3E22CD92BD8E19627B71EAC34CB56125C86CB4168194ED4E45FC6B759
+5887FCEA79676EADACAC6F0A35B30B63E61C51DC92E4FD960EAA2105ADE6C4E551FB59E0381ED8
+90AD55857073689ADAAFFD1D27AF7E9BCCD8078D62E2299E35EE4255817A3E7CBF4C142AC2F10F
+A5486FCB20EA7E6281F6FB7F91DF0A48B0547EE2133AC09C1E0700039CDA77281121975D84864B
+FB24A6F6E05F5E801FF02B04A8FAE6F682E7C9A705B0A6CAFD3A84698528921856038137A3D111
+30602F28D61D26533FAC142D5A6F0D7C918D16BF3C1CA65109ABBED3BD897C8BFA4490545552D4
+B15F6264FFF4B02CD60970D6D8F35A18295A2AEBAC056F768F29526958DC1E717FD5D6504E303D
+1C36802BFAEC578F5E3F0D1BE9FF5B65B3AF6DD63FBE07432BD1EE72BD24C27C5CCAC3B95FECA0
+AEDCB55933140D1041DE9F2AFA2ED9F3D4BE5D7D0C7F325AE26CB1FECC40CCD6A4085515A11F62
+26
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lsunr21
+%!PS-AdobeFont-1.1: LucidaSansUnicode21 0.9
+%%CreationDate: 1994 Jun 04 10:04:24
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (0.9) readonly def
+/Notice ((c) 1993 Bigelow & Holmes Inc. Pat. Des. 289,420. All rights reserved.) readonly def
+/Notice ((c) 1994 Y&Y Inc. All rights reserved.) readonly def
+/FullName (Lucida Sans Unicode 21) readonly def
+/FamilyName (LucidaSansUnicode) readonly def
+/Weight (Normal) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSansUnicode21 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 144 /2190 put
+dup 145 /2191 put
+dup 146 /2192 put
+dup 147 /2193 put
+dup 34 /2122 put
+dup 49 /2131 put
+readonly def
+/FontBBox{-30 -325 1384 883}readonly def
+%/UniqueID 5054521 def
+currentdict end
+currentfile eexec
+8CECFA711B4939E41CA045BB7E8765272CCE317ABEAF2B07E70D992D651C41DC23B029563922C0
+95FE85170451329EEA8C7BF7A2726EDA9D9C6D097F0F7FB11AE93E80BF8DFEB2012E3B9F49A227
+13E573A8BAB0BD7AA774AFAA41B97C6C70A3BF84A0B468C41B70D35F1310A4BCF2B97287E2FBF9
+4A30663A4DBB485672BB54D8FEAEFDE594B3B73220D0C873C546C40B5138841E9803A47402513E
+8FF4F9343A0E92A13A04C27921E3EAAB23C355AB06A42C0BC5CEF70BAF6D687B5C79B5360DD42D
+B2C878AC8DF4228BB74DD81C6FEFF53A36279510E983BDCD1A8145830308160030F770C3DE994A
+4DE01ACD31F1D76E3094B43F3316267B62B6D653546469CBD35DC8B1541372AACED3750E498938
+970666D8B36D41627069EF1511128034B8A364FACEF8068FB8A2F7F3209E5A769AF14C3E7F044F
+6892F9009EEACF40CA1AEC6F322861CD38A8CE6A110A5C348EC2CB376E5110065918A03C02835B
+E3E89B986010D70284A334D6725965CD86C1F4937315B5BFA1D7E584988077138480F1B72F2870
+2477850CB729C71006FBA750B4989EC757A808D51431556B673A084E350A74279AB2E9C638F7D5
+B6BE1D50118747D01A6F3250CB9F204E3B03CC46DEC9821867B2334D2593522BE05CD30CA6B75D
+DE85222B64269B1DA310838E5962A391BC8197808B9D11B877A50D431C25870F7043983E965CF5
+0F5BA07DA4DD39F97069868D506F035C0DE343F7F5C12587B2B05CE2ADE6822C6C0739A54D5DAC
+415135137E8341C4D37F7D4534BD8FCE1DEBBAA3C378C9C9CC083F3A892EB7E44144F118680E0B
+2A94BE914FAED74B80747D013961C682A0C3A3F55AE7496F7A15786BB0AEA5B1079668EAED2527
+9F744F8FD112A6C33DF4E1500520910769D69C8F4D659322035993A3CD70CAA65F9DAF1485DA40
+CBD374802317B409FB464C03C8A46831DE7B04E924B9D8F5C5239CF99DFB7176B2A01C1A31AF6A
+D7EE0115C6CF9EB2AEC83901795A91D4563F32399E1AEB65ADE7B8248571668410AC1D86F71918
+70B0FF9C844CB7E6352B01A2C169E37513CF7C37D131B042AE6584F1ECC680AF5AEFC74D2C3309
+12C36CBA7D88E4D44C77EBD7377674DBCD9FADA92577843CB5B1C0CCCA0A9CC3BE2A8F4CFEE1DD
+ECA543A7967806B9F65C5337403864168AD5EED97FF91EA2A00BC4480D96D09080029CF4BE6975
+B34B40182DA9DE77D82BBAE0007448F08DD19A443C3EDB130AA1E36D2DE61D809BB3508EB12237
+E460F68508290E1DF4E45B652B0A2EA82DED7F3A5A05E9F6FE3CD1E8FE988B7258E81A243DA0A9
+B677C368D33AA67DCD8BED50A86331179CD2A6AF65E164A925258D5DD67704B2F3D7B3A9797DB4
+E5092122646EF94DE3FDB3548D60702ECE17FCEFAA298D9825EFB4CB96C20E5AE933A4F9E7FD4A
+D8BB4FFA426366AA9EC6DD84689F24BD858212C0D745D674D513DC4C07C37D9733ECE1D7F7059B
+EEEFBEA12DB1F8F21F6DB88EA763511B1CB80089383350F0EEF474F70276C7B44D075B21862115
+1C4C8CE0303FDC81D848F74CFA94CB2D2F61FB99B92DFBC6CECC15955A790C62B3DA7654CB95FC
+9EB2544F05AB69475FC405C3F0F1E80EEA5F82EE0B3E47937556C7E14CFEF5A58ECD7B975E519F
+CA80763297F483FE24B96F09BB0C6ACE0753EF674B62B6F7C2A301BC1F8C7D2A84CB9DBC68AFF0
+7ED80EDB570861D23430D1A30653E5580B9B9902AAD063F04A700E801964927CF9943A074D8FAE
+A48CB417EF69C589EF625E46A55472A0A2B3CF9C7CAC86764E06ADFDBA7AC08812B171C4ED089F
+3FD3086F97D6B96299E47EC1BC98C8320ADF7DAA7D384A128693DEC73675CD0C185BB260668E38
+9A35204FA0838F70D1AE5DC74957D9EA2E2C3088D660580C20D51B212B6CC83D9003260FA4873E
+0B88A4DA8EEC5AF1DBAE1C0D1454746F9014753E3CAA9C8AF20D97E949D8685D5D9130BF1A9F79
+57569B17DBAB5AF2F08737E9A046C0BBAA1238D2A72504B9131401B96606AC9230CACF736151D7
+E1F79E7E4F42F625AB66F02FDA6C31C497B1C2A2A0C4DAA420B59D647495B306723195DBF74F72
+FEA3B0BD8C2A16E95B442FDF0B39CF601FAE4BB5AC9C85C1042A6C54C44B60B3A44D741E788165
+2126A8235FB58650ADCBB265C349F5A93543A4F765C97225C9566D7C4DCCC6779E05D9827F8C00
+D78D582BBC77E25C3A170C469A268B483BC3153D851FFED8A1911B6864655255515363D8DBFFB8
+0C02180CB399D92C242F0F450766B5D7D29F59B5D7B47633C87A1B46EB3322715BE04BDB99E126
+650DF431A9E8DF486C8C63F5F0D26DC24B9DED300D3107A814E4A01BE93CCB3694A99887C4F1A3
+46DFEE064D27CA5D5899AD2F8B3915E304C8A4121A26C1B7B8B81B9841982F6ACCD03F249A138E
+0F836D0F533153FCC8B3B4CEF39802D66A0EF0CE76F8E2C03D880FC4F44C1FDEDF0C50971507C0
+7202C26CB4C0C1EBAE4AF043F2893D4B15B183B5B60DA901252BC6DE8D8DBCD54B418C088D7D07
+3084C0809EA621F31EC5DE23374C5A4AFC2AAABE30A0CD14CF07914839804BC88A7340BED9C24E
+48B93770745A08B2FD64AF52D5194D57FDCFF6ADCCB3A553343FFB2F82212E5152EC91D9F19F93
+7839782E3A8FEED1128568C5D39AEF3638592F8321A7513B6C361D56EAD81E2ADC3DACE11B7B50
+73EA40B36A9E042BDFE78E30EC5059549BF9D1BD29722E6FE3E3CDF81029F81E66C887B55A6E3A
+96826166A1FD6D27B7B3B5D72046373492434088F7634CB45301F885909D249C2680E5B1AF7F1A
+5C1A7997730E94D8A0C643937B284C0FE0EA447965A8942E882C20833C9EEA28D063C6B5C52F06
+D9580E5387B9C87945B1990EF0537A00BDE28C42C08321C0730A04AB9A0DB8435F250E10FBD8F1
+B70FF91E4B795BB353AB3DA14F7FD8B61AD2AF4CEF5775B16BEFF8E3198558F77036CEE8F21556
+BB24BB44437966855114167168A2F45CB4CE1CC31FA04E39FE5F4F07A21D878DD4D833F2905E4A
+541F26B1599463BAE2BACEDDA6A25569E27003BD478232E627892502ACAAEF3E61B56139542D1C
+6D6A6B3873EEC2EF0BA2CB21AA0148F449697C43D3CE159B01827618C1E9A835186C2EEEFF0EBD
+C22D9250307D280706754476A9B24E141B88294CC88634E1690C5482E5232EC7F174256999DF02
+FE1FAFA59C4369C41B8E9BA66699575035718309DC3409EF68CF0768E8A2AE0E5BBA760F3EB926
+DD09D37641808114AA91761DBDF3D2BC64A42DABD5010465BD47597A69B1F88DB579B7A47563B4
+9BA22E69D7294A81042FC2A57781D8FBB5E87E77539498BEFAFD98E3C1C761EE5E7B635AE93BCD
+E9479904AB3B3BB64EDB0C80CC2B04BD9295E208340BF65D55353BF8472EBC77
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lsunr22
+%!PS-AdobeFont-1.1: LucidaSansUnicode22 0.9
+%%CreationDate: 1994 Jun 04 10:23:13
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (0.9) readonly def
+/Notice ((c) 1993 Bigelow & Holmes Inc. Pat. Des. 289,420. All rights reserved.) readonly def
+/Notice ((c) 1994 Y&Y Inc. All rights reserved.) readonly def
+/FullName (Lucida Sans Unicode 22) readonly def
+/FamilyName (LucidaSansUnicode) readonly def
+/Weight (Normal) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSansUnicode22 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 100 /2264 put
+dup 102 /2266 put
+dup 103 /2267 put
+dup 130 /2282 put
+dup 131 /2283 put
+dup 134 /2286 put
+dup 135 /2287 put
+dup 41 /2229 put
+dup 42 /222a put
+dup 43 /222b put
+dup 67 /2243 put
+dup 96 /2260 put
+dup 97 /2261 put
+dup 23 /2217 put
+dup 25 /2219 put
+dup 26 /221a put
+dup 29 /221d put
+dup 30 /221e put
+dup 2 /2202 put
+dup 5 /2205 put
+dup 7 /2207 put
+readonly def
+/FontBBox{84 -166 1060 898}readonly def
+%/UniqueID 5054522 def
+currentdict end
+currentfile eexec
+EC18885AF58F29AEFACAEEA59037C942D5A3FAB833BA43EA181148D28AB4B88B44CA4ACA1F92DC
+003EAE53A624731252861B743FB223E6A26B5EA4CA4237504F6A6CCA326B9405AB85D95ADAAE82
+22B5F340DF4D35E0A2CB80190E539D9C09EC6DE84EDF6E6DC6E40089958D58B17EC7357C0EB84A
+61C5A04AB034973BD320598296F9A79CA937F8946E59DDE543CC946C528E3106DEBF61B81D7A8A
+69AC62FC23908A8A656B8518CB8FDAF8A2B57C3C7D4B644754586A739AFE94AAA7B685E0B09EF2
+C30BFEE0F183A420766F0BE21197DEF2C56A4BA47A2AC88C0687DCBA5494D19D543C8D7F43E8F8
+67EF76E2E818ED425C61EB7D3EB50B1174995ACA71352D8218D3734BDE02F4A95E232BD4AD9845
+09AAC48D0F388BD9ED89E3DB5276D12DB11621AD67DEB0F7CF2046A95D6147BD77893BD999663C
+6BB6206F86C9E5BF1B7296EA35C677788DD9627D6385B6903C83B27CB461AB230B86435838C33F
+A32A0B5DF678E7A5414A11E4BCFF1098BA6A3A6C70AEC03193BF8E08C1F703E2B0470B171CC9C9
+CFBBC16B532F551E32A6EBB545F8F16B4DFD5945ABF67BAD9AED02092F99DABD828C674A246A3B
+50B6CFEC2542399D397121C09D60CD1F679CB805E385F3D63FCEC624B93BDA066709C669C50BD3
+261D4A143B81F83AC3AD4052FA424782F1C8985A783C1BDAB4303948E6BA2C6F1645D1AAEF161F
+AA605149EBCE77F37B904041DCA83C92CC102FEA932313FCF28C23DA1D3F876F612EA30006CC36
+B9376696E6D3C74AC6D5E39653C03434CEB58C958FFE72BE74DCFD7921BD8D29CB9B5D9462CB1E
+6CA793A7E2A7F1ABA296877AD19BAB0AA44F0916866DAAEEB3DD86474882FD901F4FE785121720
+80BB24A21D83C909FFD3ACBED7C3F97E8D434B4B3DBCC83A954037319D24198CC1B14695178CFB
+18CC1F530CAEF7C5C845403B52E2A5CE0B7F158B8C4904B2EAEC08C9BA7AD693405E918356E7D5
+1E87E2857B18EABB71256596245BFB5D3F3E547AB1355106CD33AEADDCC870BEEC170FAED7884C
+82DB23EB4B99C4E856B81773093BF2B625D38475AFDCFCD02468EB11B035E4950C2E909EF0AC96
+2C6C41D25D43C5653AE66D718013E922561CB88101CCA5E70905BC6D48B80C177F552BDC9BB31E
+D51DED3C0D40BC161A86C06F8FADC8449AA647EA6A83D9A5AB66E8CC4B5C705375CFE9AA94C1C5
+6AC04BE22C68860DC51566D69AA649F97B43E557EE45E73B23EE06F851860CE6C29CFFFC95F561
+165AFF73E18A9DE0A1660754A311DAF53146BBB751053D424E32E8600B50303AD1A7D9E663580A
+BB54114C9BF9E2850BCF12B5428A4CB8E458B16BEB43751E68BE952B34A8064CEF61452FF56537
+EF56D18A3A3A3081029B7027600A1DC1199772F97102E7FB28DBF3A941729599B0F24A565C1BCB
+62FEC5ED752428920BC1C60C08ECD8EB86AEF841364B00168456006B406FE14F1D4F338B142CFC
+42BA7DDCCC92233212EC5B35E205372291B4FCA126E5FE8F6D4C8A37017DE0463D7261E98813E5
+8B1FBF38993879ED183A30C569DB75D9644B0C6D237F76D760C3D77C7569FF8A1CCD752AD9FC87
+3078022F6A3B1D749DB363097597C2CEF08CF19BBBBA4DC2AEEAC4312E9851639DF6FA9E2893B4
+3366E631AC15951644702A58B7FF164C8D4137052A3CE699438B9B5FE2228DFD6B0931C6149B18
+6B9F57F9D780BAA7835331B10EC5D837B9257044B3CCF8AE4590B23796C7A712C6F188E20DFA22
+1ADDDC895EBEF28DDC6FE7C1086AB26B878DA3A1ABEF1E7EAD344CD7CBFA752F7C274E8E9C970D
+744186961EE5717BD0F50B67144FD576F6B668CA608436053ECBE116CDE462509A48DA90D66105
+ADE07641CCE083FDD6F161CDD59145E8514CC0BF34FB77B657A287EFF963E63DE600FB15BA6A17
+87E63D3208F5BB859E650092902715185D69A11C6F73DE088D60DBBB98E70ED4B7C5D4CA9B2AAB
+BA91E81E20CBF4716D603416B399B856C46729D4AA83330CB528859DC68CD028CAEBF9FBBCCB5D
+50CCF2D3323000855669842544A61CA55FC4209AF3D6187100C47F2681D3BB823F09D3DEDDFD89
+C87B17BE0B0A0D14E75370C6D2CAB809BBE932E6718945D6933EBB8A24FD507906BC651216119E
+CEC5B916BCA6459AED96417AEEEFEBC4E71D76DC5B17A37B8945A83946E64B21AF0D42282B0E25
+A3DDC555E709C80C5C8CDC5E1AD62B89A7CC1E1AEC962FEED653010E2FEF56EB5A14F810AEFE27
+16F0A27E7EDC63A7D2E1C6AD410E22E35C8C923EFC2554355092DDA8113F6D9D5B5BEF54C824A5
+1D7F5CA2CCD4321F9C3A6EC8320F9A577610C902B70B6B0EE5BD381D9A7C6B722BB55EA06DFB77
+DCFE84A0397C8FB3BA4917521A88B43F9F12F81571C39ABE049D54405B96D0BBFFFDEDD0E90C3D
+D6B26D82D797C6B31B7FEC4BB0B51B2E8357C5CA8A6181536CC13498F7EF383B98281756F3D25D
+6961D477191F00452FE9EBAB94EFCE0C958A415B7A8B0AEF3F072A3DAC3B6F1BC974CE0DC92A08
+00EF65EDABF91DDCE2931A6B6CDB9B46E106EEBB1017E487E4AC078243A8441422FD61BE99A8F1
+022CA7C9B86AC24E4101F46614E20749FA065C9F9EF8AB8D45DCB5632F7E5579A4EB5C44588E0E
+AB91E0FA25868A585ED5364804118B2EEADD52301644AB6AF821BD6E5A78E3BD4701D7211B4929
+1EB22DA0301F61F69379F1319ECF14C6ADCF574657B6BA459E6FE012A1C6CF198250A7A9BBA055
+06215E6558DEC8CFAF5F342975B444F98782CC674EF5E03DFDF803C5645F303E229448E57E3891
+37A4703A784AE802B6D730C82E7A5981DC29B586174FB22E854CBBE4C359D27BEAAA684866AECC
+6F33F9C1E0CDB2F97E32F7DE1C74CBE941D21EBB079CCAD9F45BB6C976331CCB1AE84BD12DDD0C
+0245E24C556BD9DF805DDEAB76BB5B82A148CDFB8C17F97B70114107A41812EE10D16366444BFF
+E6EC7BB9FE286ACF78FC1C50369FA2E0E9BB26BEBD3112F8715651DDC05482809C0348B8834AD5
+F8594197582B9FA1318E4908A108A08BF0163B419D0B20BEC4402E2B1E96F18552DD6FE45B9759
+FCB8EE6A64B9D901173B3BB5D36EA3074C8065D37A7B0E01884A59841C5C208D924D8436AE36B5
+F7EE7EBBD690EAB5AE9897B43B6F46549B6B41CFC6A5EFEB53A6E1EF8D9DF28E78D3186158D4D6
+1C10AAB0C85FB5A9CC43535D2E458090AA80AA75F39B0AD1C02E3C103269E8A40E60832AA2B160
+B78BF08BF2DB06C8D55C768055DB5F52D1F24A2599EF1F412DB23121BC8BABC1933CD43B0A5908
+77246FD36AB18D0F0452325E5F1FD495499C754D3EFD68D948DE856774E476660F91577FA68756
+CF17936C23246504495C072341C8AF8E7E4BAA8A5D7CAD373D9599F52A4D88C2F5DEB65A2B9C5B
+6914C569F8CFF9164725C261EEC2AAE3C88A26BFE1B6327DF1EEF827562BBF37E8106729B5CCCF
+C0F1011864574E4D0E5B3CEA70B562F03BDDA49B107521F192D36ABC6ADA755456175EC9ABBBE1
+E550C412239EC97662338E92253BBFC7D142570A6F22E212C8DECAC66B4AAAD9DF4BB681BCA16B
+29B7FA623C47FF37905F923C0143AE479FADC0E27E8FA15B461509D847F02876975C6B3B33F490
+A4820F9C43D3F0115C6157211CFF4B13696BE005FD45481C9E496B078389E01815B78C9402841C
+45B721355653E4B64C5F226D114DC02ACCDE11E588DF5A7889B8670F1C9F40A5DB89A7C8E901A2
+8EBFD43B24A5DB9B2F864C6A45F9DD7DA926DA86DBE5E2EC9FA04004862A5903F6A5F372303738
+B42D7FC4A35941157DB85F26C8D11099545E57B0AAA49DE793C778B8E75F45CF566B54BD1DDD7D
+17E3621418F09A96A4EA2D20AE83D88E45C0B083E0CB9F3D5FB7D704581BE82E3D242B3EA6A7A9
+29B3B8AF7F5D20CD8303E7EE1CDD637E3DBDFA0B876A2E7B7106AB66779F1ECE9AB75E4C2083C7
+C97B246EF9B67937CFE4DA2FD95A5E12D019AEB10A8B1F609F2426F53CE3A6573B8A13392D762B
+B2A97FF2B9ACD94ACBEA9A46D6F0F2C464145BC6AC740A19DCE03904FB928F29053493D4CA10E1
+351458BCE3B003C4BD38C891559E363DB4F6189F4925E314F77E7900DB5285C87EF4E2C55B9A12
+CBDA6762604F98B6D2209BC928DDDA85C5B5AB12876AE7D6864E8A242EB1251D6FD05F8F088A80
+FCF304F598F9FB6AD997C8A5481BF577FA4F61B2B742FAF0BC932E886A961B060E6320C3D49D62
+7C04EB0295A7DF9F8AF5F2BA6FB64AB76F685781460B35B7C510E3867DC0DC41179A1E8BC5BDB9
+5DC54721AA06B8C2119A8617674BD10F0687B07D56DFD63AAD41DF660F600DFCD91DC80645C4F1
+3FAA4A6C4B240863F6508A81EDF8B867C948EB7D3A7753A4731AF75F0C05DE4680CE216E04C8FC
+49BC1CF193589EA6A33C25BC5B7155D4E34A43B49A8C37733AFDD714774E9E70FC22B40D6C9192
+D073E2E9731FA2B80ADE7D40ADC5FE1ACC52952159137FA5B30A7EA95C39A5B6CA9F6F1B3598B2
+90EC820457E11DB827E3D458C2E682BC1FB6B5E74817246B4FB47DF7DE1CDB835A849078BF71A9
+7711EB1F74791E797B3E73FCDAB725C5898D5188BAE77432AC20087EF62211EAFBA46B91B295E0
+8FD9D4C98C1331E4A1D7206A60F03EFD2E8925ACD1082FDDA8B2B6980B960C9D03BC754AB0FFF3
+EB6E92F8A6D41954CCC7A6598CCA897057141F0ADDFED6F802994D00EFC0771E4B5CC79CED9844
+E2CF890AC9F70AA4567102ABCC67C084AB818076D3134089E623CDB5CEF16E6AC89A1EC34BBC2D
+ACF87E3D7EDBC5A2FE1774FE6B5BB78FC53425D364919E8F086D07ED1ECA919F003A1C5C05B914
+02086AC63F3546A34F2F99C88140F4C51096B72169B413043C366BA7BA2E5D1DE570FC1EC6CBDF
+03658EE0AB3C1144FE15F8E89FF354E00261483F366BBA154DAF5E6D910F1D40F7DB4BBCF8D82F
+4BEAB925EA8B0F5761B1517A2BFDD400E6B6B9605034688A7148596AA8F25B97772979B49AF56D
+28B10146125B19AFC56881CA4BD579D649D104CF443E94B186FBFA0F29538D8AAC4EA3C1774A7A
+64226D033869F1D821E98B9C9C1393FF35EC9A962BB8BFD3D8D062C086234D6F14D9AE028C2957
+5114905FA35B368C44BFA14DE4E73A4D6C1A119B79A6E3EBB915C9D48D3FAEC3EF31B7AE39217A
+21B66FBA853E750000D395A9BE87E78CD91F390C5919766CF31E45EFE678577ADB5931CF5553AF
+54F9A0E9BE0428EACD715F7D20C3D75D20810C4C0D96BB10C14B557C201B954841501341827C1A
+30DA27C34A5A4CAEAFF4A3ABA566249EB82BFB367EF41635B2E27133C0BC4BF6EE280401B00B48
+87EE78B50E524A9526E442E2EB566F3ACABF1C60C65F60075C434367C67DA4AE42B1462BBB0AE3
+9C83123BEB32327FA66C18409CAEA447B8F504FBFB2CA2EB0448691CBC3C1826AD55697611E310
+BA84B3133D1240BA430B08010BBB0DD02A84FECA352324CBCC9AE188CD9213C2D513745D868C4A
+6A0C995D7B455034DDC41A8ED06752805DE487375C69DD746D7F8940101EA49871A4B28AD792A5
+69E76930C32568A9ECA82892B44E111ED0806BDFFF59EDD79B5BB11F82CB7EA201524E6D6D8343
+C3EF568F33A450F8A25128218CEB810B4D4566547F2F0A0640D7F4C8623945E5755BB7B6B48272
+96AF202D9F4B17A2B4CD03D961B5728C04E275E037E49FE8A29A89972D0061055357A40DFB5019
+D0959C44E231D6AB8C6FCC8E24F5291E4B9C082AB5F7D58CCF25
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lsunr25
+%!PS-AdobeFont-1.1: LucidaSansUnicode25 0.9
+%%CreationDate: 1994 Jun 04 10:42:59
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (0.9) readonly def
+/Notice ((c) 1993 Bigelow & Holmes Inc. Pat. Des. 289,420. All rights reserved.) readonly def
+/Notice ((c) 1994 Y&Y Inc. All rights reserved.) readonly def
+/FullName (Lucida Sans Unicode 25) readonly def
+/FamilyName (LucidaSansUnicode) readonly def
+/Weight (Normal) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSansUnicode25 def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 161 /25a1 put
+dup 202 /25ca put
+dup 203 /25cb put
+dup 230 /25e6 put
+readonly def
+/FontBBox{-26 -236 1026 815}readonly def
+%/UniqueID 5054525 def
+currentdict end
+currentfile eexec
+8A630409A330FC5FE1ED7CD3C975467DE475D113569CAA8B923FA3C5A4A5DBA1B426534896777D
+FEC0CD780FDE4F4A4B37CBF69BAFE9D7B1674F09E7B60ECB1F741B6EDD9AF78B9450C77EB98488
+7838A9B1EFEC7714CB963DC0D2D7FC90DF439E7B2FD67B771E742DC7E7DB927415569E8F7DC363
+784A57FC7AC7182B65E2B2B985E0344DA414383767D69F0072B82FF65429A625F418B9554E3934
+A06F03727E3C9839A4E576E2351D0253B74FAC9084AF6E67133A5537926A8C80589A37F8ADA04B
+5C2AC1126AA5CCBF23226508D011D14D13C6FFAC13BC42FFC82A696C06889B21F1453BDA33C3AC
+FF81DDCE02738FAE387DF215DFF6FF74471B4EB78EA8C9F24AD655490C27E6059414A56A52A9FA
+E82AC778F1210142A0F9051E5AE4B9E361B1FB91CA17F95CE918651919C7A235BECD1E676D582D
+643C13D5912E896FAC77994450E36EB321BDB157BC6DB7FBD0EE4B0C1A420C2645ED9595D2D21E
+F387557875DF6A9D774DAF42CA703FAA6377C62B435A83666621A7C4E578421D8C68899952954B
+E992C6F613EC3AF8C2F4EC93A4AC5D7860448117BA2B6A968239B7DCC4036B4B1FBAECC17CAB89
+BAAAC5D4362C3CE32E00409A6AB9B231767C1A27514E9AAD74C32EB9F6C0DBB6F839A28BCBF862
+D183D1247828DA457DAC59A0CC0CA4153457F0DF3B5D6FCC06BCBB0B5919DA74CEB11DDF706F15
+B342B26D610DA0137ADF11F3BDDB3189C9DA0F0E870986F86C61CCE3AE60F771B65DD2E920BD6A
+5094FD2A12AB3A59052BAF45248C006D431F5B04C9071F925A7F52C1271E7FD3A7F9B60FAFAD56
+8D8CEA6BE39066D98313C932A77140F1658FAD3B32F7418CA0FDF48BDF17F3AE6F095D34C707C4
+9F50C3DFC3148BEB942A63A5619B94218BA5C1F63F66ADE29E1396CCF7CF7CA97788D73D4671D7
+BB0CAE1B8E13CE410F2172B2445CFEC734F53A6EF3D3412C37908D22E3E80C817EAC0955CE2752
+E9B2327A08895A254ED18976E194E85CFF852770A56665EBAC4EAF1F6808F6288AA2776F813D6D
+F089F25B21698D10A5C00522210F606F890760441B0871F31A4C0718527B68541A0314D67354BB
+834F4FCD365DB2379468671DF697122B66E999BBA6B2A5A6D95E26FEB0E6AA3B4590D5B0C8F4F7
+AF1CB7FDB904F10E8817F7045238C813053CB2096EE5DAC923CC9AB2DB9FAE17B2BA08CA49DB7D
+71ED0072A402793C51EE08DC09FC9C27F2E15254CCF9FEDB998F0E3B12C60BAE7CBC550A59BEF7
+CDE1159E1D6FA72E0026BE03299D851776F57069E9178CA0C53CBF939792BCA7CE52A3A90CA729
+91180F917F1E21FFDC2E306595ECD95BE6323E539FC73511C7FE237C873A60B4B4E06C49C39C1C
+D1CEB9EDAB2891F30BBE64EE95C27487325C07F8F83B2C0CF8B394C3D0ADA55E4B4541A917B23C
+6181480F95544F2DBCE9F22F40DC467F300234CCBFD55A919A7B4D7EF74D0C60E83F2627BD5471
+97A31EF7AB8E8C27A2EC8CC90B846212BB79CFBA9DD702DD627CFB9FABF73790BBF5AA82450017
+4E144A95706851EA88D454A80554853D7EDA089C97BD99805AD58EA333836351E1A6FFBF3F270E
+E36B9A8A5C98FB53B9B77AF49F3330416708C3F8C9623899CAA72E8812C963AFB98FBDB4596F18
+32EE5FF6F6AC53B618EFDA664A090C1778C5D340CC2425184EF1AF9C6A7BC52167584CF057F737
+006496131A33D19C40B00B4A728904CCF6669F1AC17E354B71B9D6BFB322CFC1DD2E3D66C97FA5
+7886ED6A5455AB1AE8D51393C52D017C5586EB16FAD517AA4F76B7F0E3913C235A5986A767FDBD
+BF04B397E7150F9CB9EE84BC53E65CEF2E4CF91C0C819D7A4860E35092E3EBF647B323331C5497
+A980FA0E95D21A0AB2D89ABF677FBBBE1811983D6BE163609EFA447878A6B9ED22479CEF8C9D19
+E8683D22DDA81461371B0D4A2F993B9ED149E14BBACAD0AED92C0B180E46DBB02F8F658A470ABB
+3688C09C52006DE3A6264E0F33E92B1C6F69FE0148CB284DF2283638D396E5F8C8C7FB2A531350
+F49ED6E90498D2C30B6D48BE680B04C6CBAF4B2F92347AE886270B5753D12FE54A8CB0EA003022
+0143DA37757BCB85E0664D61384FAB84DDDA0468702C397BA2A52098181BCC26ECF597DE542CB8
+B1A0F199032BA329EF8185D97C9B536BEBDB7A9588D9EE830804F0245FF142D4BCBFA74E1D2AC6
+BFB24ADE82B947BFCF2AE083638301E0D52D0838548B9B935B52BC5F3B2FD8AEDA7AC6A0F44803
+0CB7E258BDA85320A3D6D3EACB188956D3FC231708134DE6EBE2A296EB0F07AF58E5FC366472B5
+03FA40D0156FCA4320BC906DB75250AF4C55B9DF5410EF3ED0DE8A7DAA82A8762F456BBF97BC78
+3849A1C9E1E9A7EF154084EDFB53FAB120D5F4A68AD4D83442E7F6ED51F251793E1F5D7504C874
+388E61CA7F9120C55228EBE6EE837BA371361407776E82796F5CAE390FB05E2FF92984F15170EB
+89296050D3B5CA30D0ADCD59B9D666643FB69C43B2818F03F0BF529A5E68FD043DB7DEE7EA3C34
+0FDAF3598037C8C0F8657F16EAD01930DFB8A633572D6DAC96CC22EABF4361A4EA443E55102E45
+C2A7443BC2DB4883B1BFAA58343FAAA48E347109B9F5D306E450E0423320763CAC8F4B48177C85
+11F6703A383803215E520AF7CA6C449C4906FCE3695117888844DEA4A505372010A0E130FDF705
+A37E1DBC59691D785D37D40E737AC708881A603BC0D97730526138BF428D951AA75579D159E612
+F847418C23DD120FBAB2CBBFEDF9BC3B972CD59132C313D84F5CE45B0740BA7ED8086165203068
+689FE81C9CB701D205C815A8E4BF2C341D264017ED02602ACD5F6576CA7606E51B3EB22CF7AFCC
+3C466B69801149AF48A8E012CC75559041B984640EC5F8043A14D70ED3AF1AF7395213E13AA79E
+A3BFE238CDA1C40BCD49A006252ABC5B19EFDD78BCDB02987FAE
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lsi
+%!PS-AdobeFont-1.1: LucidaSans-Italic 1.001
+%%CreationDate: 1993 Aug 11 21:10:09
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (1.001) readonly def
+/Notice ((c) 1992 Bigelow & Holmes Inc. Pat. Des. 289,421. All rights reserved.) readonly def
+/Notice ((c) 1992 by Y&Y Inc. All Rights Reserved.) readonly def
+/FullName (Lucida Sans Italic) readonly def
+/FamilyName (LucidaSans) readonly def
+/Weight (Normal) readonly def
+/ItalicAngle -11.3 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSans-Italic def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 54 /Aditi put
+dup 39 /Alessio put
+dup 41 /Ali put
+dup 43 /Alois put
+dup 173 /Ammar put
+dup 47 /Andre put
+dup 49 /Andrzej put
+dup 51 /Angelika put
+dup 53 /Anton put
+dup 55 /Ari put
+dup 33 /Arne put
+dup 59 /Art put
+dup 61 /Ayman put
+dup 63 /Barry put
+dup 65 /Bent put
+dup 67 /Blair put
+dup 69 /Bonnie put
+dup 71 /Brian put
+dup 73 /Burkhard put
+dup 75 /Castor put
+dup 77 /Charles put
+dup 79 /Chi put
+dup 81 /Christian put
+dup 83 /Christoph put
+dup 85 /Chuck put
+dup 87 /Clovis put
+dup 96 /Curt put
+dup 89 /Cyrus put
+dup 234 /Glen put
+dup 189 /Heinz put
+dup 56 /Jacqueline put
+dup 57 /Jagannatha put
+dup 58 /Jan put
+dup 60 /Jason put
+dup 32 /Jeff put
+dup 62 /Jerzy put
+dup 34 /Jim put
+dup 64 /Jiri put
+dup 36 /Joe put
+dup 66 /Joel put
+dup 38 /Johan put
+dup 68 /John put
+dup 40 /Johnnie put
+dup 70 /Jon put
+dup 42 /Jonas put
+dup 72 /Jonathan put
+dup 44 /Jorgen put
+dup 74 /Jose put
+dup 46 /Josh put
+dup 76 /Juan put
+dup 48 /Justin put
+dup 78 /Kamal put
+dup 50 /Karl put
+dup 80 /Karlheinz put
+dup 52 /Kaspar put
+dup 82 /Kees put
+dup 84 /Keith put
+dup 86 /Kenchi put
+dup 88 /Kettleson put
+dup 90 /Kieran put
+dup 92 /Koen put
+dup 98 /Lalu put
+dup 100 /Leon put
+dup 102 /Louis put
+dup 104 /Luc put
+dup 106 /Lunjin put
+dup 110 /Malka put
+dup 112 /Manuel put
+dup 108 /Marcy put
+dup 114 /Mariusz put
+dup 116 /Martin put
+dup 118 /Masahiro put
+dup 120 /Matt put
+dup 122 /Maurizio put
+dup 126 /Michael put
+dup 177 /Murad put
+dup 91 /Robert put
+dup 93 /Robin put
+dup 95 /Rod put
+dup 97 /Roger put
+dup 99 /Ron put
+dup 101 /Rudi put
+dup 103 /Russell put
+dup 105 /Sam put
+dup 107 /Sami put
+dup 109 /Sanjay put
+dup 111 /Saroj put
+dup 113 /Saul put
+dup 115 /Saulius put
+dup 117 /Scott put
+dup 119 /Sean put
+dup 121 /Sebastian put
+dup 215 /Wilfred put
+dup 45 /Will put
+readonly def
+/FontBBox{-250 -211 1099 967}readonly def
+%/UniqueID 5029007 def
+currentdict end
+currentfile eexec
+AE40F8585C2492B57FC8C19373E315912C0135F3613C38B98FEFD06419749A2EF936D049568E91
+2C3B4814601E6F1C68E63168C5EFE4A12F1C972A88E59D27C31A2A9C0BA365B6FE3266DE7CD0F1
+1D5F0698C11E8C1D4F1056410F924EFF7F265CD09F63373FFF21407562BFA055B1BFA359C5890A
+384338F55437BCB13EF47EA2FEB34874DAE99A2A8CDF087F076588CEF4F5F52D27F99CA2FCACC3
+B00B2DAB26EBD6CCED97C1076E2E38C1C7179AF884D34E5981F3B13BFBED7B35D318515DCB2A38
+02E5402628ABCA3D4BC1F4808D32312ACCEBEC95EEAC23DBDFC3788D91B5D781933BA1E7A9E7BF
+693D5DA7A9281F1C6A7C34E8D6A8145895DE4B6AFA59BC2F66198E226DC29A066BA02F4739FEF4
+FC344E81EDB55226B5E16AF7282FAE761F3D9F253D76D6442D5CC7CA3043F7B37D5A34A905ADAF
+242097EEDA53782431445078C0B35090520B01B437F01D891573DF402A427CECEC5386F1603BEF
+05EEB7DD5FB545BE8042FDC2656F47C7ABD12DF9DBA59693E4F9A554FE067AD8157D2BF1EFB7B9
+1C54F92B27DB8FE4AF1572A8E3131A5FC251FC8F3D5918C30B18337CF3CEB9AAC264E467F9C4E1
+3BDF64763DF9650B0F6A3FF6092F2241B1DD69076E3878B875564E5EA253BBA208DEAF32B48D82
+CA70B0D8FE5181B29362D1603FCD82116B2FCC77931D0E121CDC23CA762E8C9EF47EF6780EC5AB
+D9CB39BF6BA8F4D191F9AAB5965691C4346624EF1559E151378A8EC69A126FE29F5BFEF6162653
+B55AA546E4779E7E60288C059D2DD6FAE507F6E01DB910D52D10EEA2762D59A01C2F1FA458466C
+07AA5A0980968990E18D71F0AA71BBD17CEEAFF025A16913D1BA4D5974D6258BA0D1F934656B65
+19A3AD2375DA469B27BC108F919BE01C833BB6CC59AFFA34F976382579EC5253B4610F9143318C
+050160C7002E29656B29874C5BC27700C912C7B00C1F62458775BEAF10C5A2858456FD04C5B6E5
+B790085D9F584195CC9BE74E7DEBDC57D5084C3CF8168D7B194D57EED9F72AFE24EB78A7CED489
+AB96EE6F2CE148C3C8CBC466AA2B35B36842CB48476D303A7717C4369F803A4FF311D53F1A0044
+B5A3B423AB2D6F361D233CED47B79D579DC4BBF97AE7E6849CE72B35CA881B4680F073C4942FB1
+04B110CD36C12B7FAFB9F8F03EF419A1A5CFAD1D28F13EF057C795F53737018583F52474008775
+5141099E0C46D3A7F65540A05DEFF5A0A1C68096CC39FA13354863897E93F98B98E2C53A693C2D
+57AF95936FA23B61A55E26214D5B2337C4488BD6DC93DDA298FD77A80625C917D9D432EC1AE92F
+DF42E184BCC2400C51465244F338DAD00BF384DC5910AE26F964CBB75F091609E73A3A96D8D07D
+BBC4DB58148E2064C50B5EBDA56DFDA7679C10EDC505D6816B86241997582D77385E0AFD164AE4
+5333A18BC4FB8CF818CEF97158CED9628B78B6C28BE08E747739F924A7CC9C9EC72FD12FD5BCF3
+2D200E0FAF7D7C8F007C84EB868C2118F0A159DF0435C4F9E432F5F7DB3766CEB23939415E3709
+B1E5E14996C0B7123EC993739ACBCF6B28BE7628D11843B2AAD85AED50C9D82B5151EABE73505F
+3A1C103B7F02C0429A32F3376C13863C347BC07472F6CB82B39EA37525A46B95F9387E654F8076
+EEFDB79193E97C16A69EF102ED96F180F44586ECB46F45611BB4FA173B4C8DE27E2C4AC2BD3E91
+8441E44FF42D13F9C119778806FFE56B8ACBDD4537C981571639C5D9D5522C822DE5F29B426B83
+74E02DE01D2A2B30281676D4593C5356214C5C6D3FC679395E0A838A447B2BC803218F97AA6C92
+EE62D3600680CC93187A2D8DC3D7616F4928CBC3E8C42BC5536D00A0F1D3FB114EEB9DA1B5FD89
+50EF78BB34E7AAAAC3AD105D960B3AA743CB487AE7D000E14C5BD14A2250AF406174ADF67A0BE6
+7D62771A8D6283F574F314FCE1FB41B80275B825066BF711A982E58E8F34657DB15E29B20B5EEF
+6EE8ED0BAB63458DAAB556CFFE712851DA37303784F656309ECAAA93185643264ED4B7B6E05829
+67E94B9311A2636F0D6F18BF83E5FE28C81DADA7046E5D485B6A9754F679F2851C5C3F4071153F
+C25F09DB849C09E9CC34A96E0DDE7BF692895D4B6678A1FBA8DF90522086D5C64715DE5FC26F16
+B954EDB7C3A0A72F1278341A1018286562228E2EEA26EE8EE340CB332B43CA68C65A2D57FEB45D
+0BF8EC6092219E7EF9CC649834D297EAF3B5FB00F2F83399311AC5FABC8761A13575B0C4D917BA
+0AA75C78AC3AB78AFC746CFD5FEB2B91073F2FD8D4C2A3A490C94BED5131622DA474A860B312AC
+4675661BDF91D076228D148270253325F12147C5A7FB25FAD15732E43004A70F095EE3AD448D9E
+336CF44C4D55CFC772C92E15CEEC2F56A002A6E1670ABBB074DBE0CA55BE5D1FE65F5A9FF90E1A
+F4A4B5455B9F3A82502C4D860468B7E7E91A77FC043C44E19211A96D8EDDEDE29FAAF156AF6C71
+CA2D0D26A7AA68A2A0864BC236E3B410485D7CF2A51C3FD22A147E3E44E723CCE629A3E67F5321
+6BF328C2BE130CF9C05260E4E5FBE73D9C2032BEA5AEE7B0ABCFD2F6D9874B77D3B61AFDB4B300
+55A0033C9EC86962E50CEF67EDEEA31C093B3A429D9AC37D58056FB739B64FD22BEAF7955D1A12
+4E1F5F81C2FCDD89432C15ED61285B1D300C10714167D1D4DF9C7B0646BD825805B7E6F21ED4A2
+06974B556EE6306C84FCB475F4F242C440A41B67B543BFCC178DEF4E58B739ADF0E14D4D0137B4
+F48BC39918599A70DF1F0DE49F6527D25ED35B5901B2EACB584E8F29DE5CCE15AC1E31D4A14F43
+CB2BE1150D22AD419EED486AABCEAC25F01BFDFDBAE2E3E4C899B3291897A638B4420960CF7AC2
+F08236D1D7747AF87A207081CACBF00A0994C2F98EB90AA3F4211EEED6A0425C6BC0CA31DBC6C9
+DE03E02A5AA192F0187C822AE022AB776CB891E95BB90BB89C07D34A38911A34BA591D78B7DE83
+6BDC01BA45F0A66D735E317B06AF7EE6E817E98FB776EBEAEE6B8AD56FF5DE1134B7EF55D87F21
+057F1248CD06932F6DC349D2E9B1DE0B81E300625E370770C548B89FDA0AA4F8B7373426A4C8BC
+200F54CF2A587DD11ECF76E2E324591FCA3817DAA9B3FE117C826F5B53F24C722F766F73903C58
+A81A2067F7A3E8544B64E26BFBAA0AF6FB10EE8D4E99C49CAB1B397E0AFFA566B007330EE54DAB
+AF0C044E8FF8CBCFBD70A372C5050F02AAEE6E2A648771A199A8290BAF6ED4AD485DACFA5A4937
+CCCA8B4D03FE96D7CBC7C60E6E95B53BDA2597C66168D3564D1BC6617033688510AAE0F6DBB16E
+192CBE34F5E0364233AD2A2D0043703A48EE02E2B4576645BEAF3D44622983407461F2E700F3DD
+51DD10BF742D645F22700223960637361E88D79EA8EC0084F5F20D0BA3EB94A7B5EEDDE499A39C
+1D621945DFB5937A31BEEDB0E2DE8395EAEEEC4A912825EE2D30E06A351862C9F02711D38F63C7
+4BAD03D267BCA956F029F2BD396A577000AAB31B00B004D7DD5F6102D7FE0BB8443AD768BD6051
+CBB0F6C74FE866A2628789EB0E2044F2EA6F0D1686BCF0BB7F245AA757A20EFD93268FC1E140DA
+35E759443BFEB681CA8B10244B4E395F3E9A151A5A3D74293E5EC0A2C2D2DF37132705FED78742
+8C5E876F567D1CB77F7338F70B3FE5AD1F7D9D6AE6AEDED983B638C5B1F6284BBB8911387C2CBE
+51B92657EC57F3F28F9F71BFE582DE883F2F24A3E1BE90D5DB001E7B69968AA2B8564940A2B3C8
+3EECE73D1DF1A51672429FC169488D329D8AE41E0D7E557F6678C6E36EB1877DA3B7AAB89EDDF1
+54AF743BB2FB8F4EA0AF7E8761F3EEF6794FE66A5494E74F7428EC2D47149F05B8E3CC934C46B3
+8739D1BEA64A39C4AF8CC42187FAE682546468FE3C68521D074555FE83FB96B018489EB12C7437
+9EB97E53BE86318E53494DA7F214B9EEF02B1843DEE3D3B7FD4F94986F310FAAD236BF55E7137F
+8B35712AD6C103FFC59F05AC12629D2CB39940395C9683B49D80D0548A17D45A422F9BC0F02112
+DE3AB03E5CC55DF670637BE7E4F0ECEC9B324CC26C16DA89550D80C609134B14E9C5575662A309
+783794C673B64C3C62932C64D9D9F560CCBDB7BB6DDB1A0D67A6C1D09AB7BD60348F91107F65A1
+3EC3149656CDA201356CC2AEB313A97E203C8037C9D5C5A70A50DBEB91E8E4B54EF9BF8DCCC033
+23F8AAE82CB2B60737C52832DA384B02AD2A1D80EEB88AB6ACED1B44AE582B9CAB881E44AF4392
+D29F81A30B430463A0D48D26ADD6D7896EADE1C0E82DA83E28F414BB24086566EBA2BAFF475CFA
+123D905A8A307E135DAAC8735B833005EE356EE627C6B3544DFED3D62F25E88429C244288ECB83
+6733096E71F85E602FB5A77E7807381D0F3805E29716B21D21AFA3BDE43C3EAE43D33082F2F14F
+72CABDFA02022D3146A2AB88719998C6EF1984A5891EA63E47C995F5C484D8F3854A79AF856F57
+54E9DBBE35668176F67FB1ACB5238423D2E1396E7A4241574033C78F342D11F97D8CA238312129
+0D467F2A371BA35E52024740F82CD91A23525EF0597B06A1CE57C7D568B25A96EA0E62756F5E07
+1A63F9D2C22E1C3806B2F150A57E5ECAF61A999E3573E613F94591FC4B0B8F4BDBC7D2619E800D
+A2CD525EA0B722CC25C26C740265774CAB6C3CF110C6A1C7BB9F0A2EA2D03CC8C483DFBBEEE0AE
+831A31706F790C0F695B926C89081ED62B5D5E1F02F405DC455751D87BF06CC05147D56CDB03E2
+16E4EF39CA3E976F786DEDB9CB0FFC98E3B115E4BFF4BD63C2BF6D577971ED3FD5525448558DCF
+C4D40E681C9FBBD650712C69FA78EEDFF970ABA0BDB69E33A8DDF3A08BC0E4DB8909A2DDB35096
+4FA94F03284532ACE8C62E8E0C5FC06EF66266944FBE4C6C239CB66A4445BF6E50E1221F8C9BA3
+2F11E198D306F31DFF8C9CAA5AEEAAB08B30F0ECBCE3CC3329AA58B1F165F151362BE3646EF3BE
+6120E2B618135127192D4CBC77CBD03A83F6717133B61DA06E2118AEF126FCEDA71A426B6801C6
+C70AE8192EA70C6276EE360B9D89388C37D075644A5009E4450B3E6F88697DE0C0A2E6A1FE58A0
+72422BD671FA241FE11788AE83F63AF4114D06702D251FEC634E562CE367948521FBA53344D5D6
+18B0A9A2C5E013F8C790BD5DE8AD289DE859768CB488D06F45DB114FE12B2BA3FCD88099F955CE
+2A3ED377192307CECB2E7227DB751776DAA54BA17F5E7137E1AA1F1B6DFFE782F715FF29E0C370
+76BFF950438DC7B7222A67238157D769C27F48CD9E39AFC1B0AAE6E670E20E982506FA564ACD52
+9D108F72E9A615C61907F00F6DC9B3FED3D99380B99242A53027A154891DB04C3ED328DC4B188D
+9080BDB06D9513098D1C8A69D844320CD494DA7DCA8FE6B008D0DF6B3121599E951AE22A9EE37F
+DEA7A4092509F1743505DAD2B07E1DAB21D84038115C10B5EACCC9C96C62A111AEA09B3259BDA6
+20202DED8FC1BBE20A8CB09E7C77055A9D0BD7D5F39B8F065B290900603EA23896CE2E7438E6CF
+63BB8435EFA37FA35A2588519FC79533D3A1C1B376EC7BBE92388C3F3248C5239C4D21730DBAD6
+65A7785867BB355EDAC969FED613A52354E97501D56909BAFA0F87258B068CAF0907464B498861
+1D3E7E80E645F7AEA5DCBA04CE122C7A47007A73E725DE31C475A57988CE41BE7D1FE972A589F8
+D9CDE0977492E07457698B8E9E184A70EE761583058AC50884A880936F001D53D182CF9605E588
+92910AB45E3C752B6D266CAF22397BAFF1591976B6DEA208495EF675876E92ACFBEC1887245048
+30F05659B2E73E8E049647F4F28F529684085CB30EE66FA5929774E49C15875493F661B77F0C4D
+6391EFE5A0D384BFCB2FC1820130E2E519C3715CFF2AC4B8A74E81C368C55FB5782ADB9BF9644E
+2FD416320DD3C6CBEC64A992B3FB79991E62F129D5187763E7C7D8473F963F43F0D70A8EB508B4
+970A1572835201AE91F48B7FC35D0D12E7015CBD6DE0677D715E0BF94F1F9D3242F8600EB2B4A9
+590BA94CE6D342D9342057E69E0B71175B475F9F9FC8CDF962690867B6B962989D94B7CE670CFE
+23D28E1197AD6C118DAE3CA2BF62FFBF5A6D03C7E1D85199908F9DAB1709E1A3FA4C1D18535AE9
+5306E0641C9C328886C72C91B49B498202C8B72EDD5C7F5DDF178584A24E6A89DC9EF5437EBED1
+CFD46ACFAB9678F27F4BB80279CDB62D9A23761E70ACF40ABEB38BB3242FBC012B8AD563073BC3
+240C6AE167A56B084DABE9096EF07C38BA3E6D380E2A1D1CDED670305CF0EA1D070E5FB8574D30
+8598EEBFB0C6FC907E25108902BBAD331F177EC95717078B97EDFF258F55793FAB9EDDC508FFC4
+719F491D791F5D8487FD5A31992A1E6E4DF7C82AA1BEF383C2F74ED7163AB6DE334D48A11520BE
+2B47FA5C0B07FCEE735F63CCAA25507A78971012EC943DC2D1607B3F44DE13882DF23070BC066F
+F74646DF196E1688D7350D7672F93691FD5950AD7ECE2FBD6D4B1CD777C88DFFCB90B57F9C829B
+A0C9F061F7DCC650CEA49D70B440B84276E432FE47D7D4D67C241F8097469638E4F5076A65FF5A
+15FBE8690B4F6788E843753F6D961043BD8C7908EC2A2EB795AD2955DDB8CD9B6A8BCB3C2BC673
+0A24CBCC79F15D44A6AD0CA0856E661EB07890BD79E93FCAF93AF80BD1BDF915B799C9118DE981
+496A963B4A9498E11893F19446FD9AAE7E4B4FACA51601F5C54D46E7DA49750FE88F420E9D7325
+DEB5A6B091469240AD0DB4537A46E71595FF598BDE54972860305F59F593CBCB7B0B26130CCE19
+E0B553E8D52B1953AA0E463D49A01B3B2B588044D423418A58665DC05B5AAFC47E264985934F03
+C358035E5E4DADDE030060BC07E7F0526FBEEE7FBD26CA50111E8BE27FC021214AA7BC8518E51D
+93934E23270DBEED1246F623EF50C9B12A3A79FD2425DDAA17B4375FBC51A1FD8A7A456441C5F5
+C8DCE1A112C00058434E3250B841ACCFFFE4EE5CE4E8DCAD1DA76C39CA24EEF79A2297B70D6AEC
+75B3179FBFA7A4D90B4522A0F4243D14FFBD028961211739790B55947C4DC63F0DB959A3AFC7C5
+65D672D80422330AAB64D51993BCD2A34FDD8B1848F5C400BF5236188C683BCFE47412108B59EF
+41B7465B020FFA6A9BE53269B4F8AB5FE2A9373C3AC12A740EFD72228AC156A999C6079687FE52
+19BA162C917DE80869339BC76A9D7DEF6224AAB13F1E17BB4FBE9722B94DC84256529932A33391
+D085A85A4DECAB06978B9166F075B51DACD371F172D428081AE1826645F9A461C257A46BAEC29D
+D6848025FB7C6F027D67A89EB217AA9879DCE693729D36171F815C3C6967F8DDD4A0EBDCDABA1B
+AE3C7901A071501004DAA11EBF4E6B20242EB6C4932403A6FBC9C190C8BB789CB3C3F2DB0CEC69
+1FA2A1632F625FC6A1E91CDD863CE75338CE56B6F8863D77FC57B211D413F75B2F7C16F5392015
+C33B55B49BA91C9EBDD5AECBF97D80FFF1B84488FB259623C858B14BB3D78215185A866576F34A
+0E259D58C750992B67B0900001AE2CB8184419C9BEEA52ED099057805F53B7FBAFE7BF2FFCB3F9
+7571A88C794B5AF35DF67BCB66CC21536AD69F860DA40C66AA8F6DC6E52A9C0CF052BAB6708EA0
+0ACEBE8A2D3FDD21CEE891EE4B905F72845B3BAE8591A20D99EC177C44528F56A09111A498160D
+9EFF65D62BDFD201B608B578E9E052EC257CBE33662040ADF68209F5E7876E1BFB861E21405F5D
+5D3A2F684C07F20223E26B289CC7256B10D699637E5A15F409ADE71779032310DB5FB5C98CE037
+89EAFF598241368500C76315D8E3FBE028F587237B1A4E71BF0B52C181AAE9B88754ABBE054185
+A035D118630FF66EB5A48C47949779276B5AC20699F3A33ACB5F9510263670B25A7E3E92666F3C
+0EE6AFF2CCC733780A0D98569B4E08254D9D88DEDAC4F50EB1FE9CBF8588E301FED58E36336167
+7F47386A37B86186D0A0A4627C2BD0C956DF9C0C9209F3275BCD65869D14B94943DCB3A2FA8B5B
+D7434CC1265F7CDA7D86300A5E033AD24468ACC1809460A8DC4231B5409909F865C6CAF7A2D998
+3BC3ED0BD15585A43C6598D8D3103547170067B51D0638150669DB52C1E371B6391D2311E5265C
+6FDF27951111A7524A304E865898634CB768EE72B812A99DFDEBA1C284A0FC95442921B8DC7280
+2EF144335923FE114747EB3CF24FC652DA97A25C2C92ACCFDD15E82144500A6BC1B2F79FF4F722
+E06450D2E6335839962111DCBDB1094FA2D3E817EABAD4DB131F01E453ED5CCB794316E5D259E2
+7A0625D1B5827706503B0F67BF168DEA99FFC9AD1C6CBBBAC271BF0B92745C422F9BA22A2D2F36
+A0964C052062EC7AF373244D8A49F60EB8C2881906FCC197BC9510125DC61628C8C1B29BBE00DD
+343075F33AD0AEF24F32B0F2EDF873401A60CE8A8B6176ACB9C1A395C8861BA36322DC7DC85796
+6C8C77F815477C820716F965B1E1F0AE5129A01DF4507E0E04B5168FA3566AF291F084CB65D0FC
+E86EDE9EC19EFA7CF75C9749CF4B5BE79083E8FB7508A51C5800D546FB14D4D8B5191C598BA5B4
+82E8A0C17F77CE96EDA3179A4A5613C9235758699EF8E2B4682F920A70CEF54FDF59101C5135EC
+3FEC9998660F8D9620B755F45A6A9FF807519A5548EE4BB55CBA5FE6D407499AD47707606DDDE6
+32D7AD1A58FC63F97357F4F5C63E4622BF4017B0CD757D554390F27123D17494630A756CA2F1A1
+A872F8C09BA62F76E5910578DCD4AB4B0DF33F6BF4DB1237EF65E5FA97C593C90728B12FB17407
+FD681A44EF78E14918E7B0530705A1B8F27495B3029252DA7A3934F7209D8BA8442FAC0EA0C03D
+08623347C4B17B249B91E3FB30FF88DFB190AA14276D7A878D6711BB273FD611E15D13541CEB1B
+B6B059985449B7A63C8C425A57AF00293AE85AB3FCA9B709FA60C55EB6AAA639EBCEF4847DA4EB
+F28A235000471D355202F948B24C9283FD0C9C9E3AAF88735E3769B7D60A9410B61C9D62AA5425
+9E43AAC9208A794D56886F983EB006ECB5084CDC8295D1EC0F52B12AD4BDDC14E672450D2BB481
+420AF2E5836683F31FB7ABEEB5FFE9D5E1AE551D3A6E123ABBB141BF313E5D4ECAF00A12C441AF
+E36DE60877FDAE8D255DD1F8BB0C0DEBAF10EDAB4CD2C79B4ED1CDE61E57D12B389C541A8A1823
+53637D9C1A48CE343C88CB15AC45CC54EE6895C685F89691D09AC4216FDDAD8549D164E8BCF101
+1C2D97B3F1DEA3D7C0EE3049860A949D8A558553D5E8FB358C8D2F31A1DF90BAC093E7AB45DCAB
+9E9D4A36B5ADE3C696921C3545E6BD29587068B57A79DACD07C50610EEF8D16BF0CDDB6CB0F459
+8EE921AE8764247A771F63A3E8F39B072DF066C1229948CCD60B26C2FA9FC8467F09762BCD38BC
+3C5A17EBF085DF652CDBC0386E5F8F908C6EEB9E8B35FCF8BF69177FE9002592F93733D3502725
+1035E29E2E4A2C17FF86B5E884ECF851CE8D1CF2E667D9F9FA62EA5C29858EE46647F77FEBD6B6
+071C827470A97888B53EDF69920EE368044F9DCDEAD7D40D21D44A90C44CEBA90B64D800B6F083
+5EB84A3D66BE4F6B1B173B8AF1D0CFE9D11FA65CA2AE847EFEF063BC4400D508C49C220BE19F9B
+14A6E76E2D65E54DE811D104FBC001508ED53A71E6965FEB07423F4846BA0F0C70518D2D9377C6
+FAB46993572179E9A0D75EA6F67C5B7FEDF1B756C882DF1010549DA4B6519E9CA28C56053BAD1A
+9EF5D0428F2CF9355320B70ECFEE125C9B752E2D30C6E259F9A44FD44BB45CE8F66C3AB6C27DC6
+E2A8919A2214220E0E5ADCF6C885966647797B9AEDFDDDDA5726F45F407034327F70C388B6EBA3
+5227ED48CC572516A3FF067B4F7707DB59CAE2B37663CFBA1E7128B43A2F1BBC209BBA10D71D53
+14A31B03E68F68A9A97F32C14205D4E998359039CD08D21B0B4A01FA2CB7FA8B28DB40F23B1301
+2D1664F42D084CD6D49588BF294EECB7C2CF18B65106BC49DA160DB79A63A9A7194C9F2F79F2A4
+F97EFA10698F291334E8B4F74C9D948F557C25C4FBC798ADA8A53B9B0E6DD4BA50968F5A5707A3
+A6428BC7CC56704534463F5031272BB5C08DD6F4033FD1B5E1A395316AD330599EDC4E021EB125
+7BF081AC55857A913DFCAF39F66A1ED2289A57AB6CDE8A2F56D11157569484BF6EF26B04C7CA9F
+C821FC46B9F13CA07AC0D90FAD8AC2866BA8DA0D67B908A01387E54F9F9DDEF25F50A1DD65717A
+3533023CE04038271DAC6CB401D3F692266712D3E380970368A34962C60646B12D129745C961F1
+F6E17FA854630F7FFA9E030A0C2D6001692E71495AD7492FD65912BBE636050F85DE19D51F2722
+E8FEA3C931541C9C370626163C528C1A3C0E587C7275806D08892C2618D0CB66B6AB37EB96EE34
+26274E9E4A036C57AE33B1C7D50BC5E2BA42BE0F14D32F02F77375087BEA2D3D44366E13F9CDB2
+096459878D802A151789E54C21E09FDC98C6A3567B7F6EF03E7E67228998E1F893ADCD0EE49F95
+22FFBA193A8BC1D5A2A43FA75300C4C72A1E388A792586B3716979DB9679BD3779EC4D9F427F18
+E4017D87C0B8C44460FE64C1A591875E589CB9A4818341FE9FF1E515F6D510685338514684D90B
+A40FD68AA77BE2F5D5536772A6232B386CEE391C88D1796CD076A2133474F9B1506B446F61D138
+E5CE584D113BDE06EAE89D82F1AF25B78891766CB386332EFC60A57352BC96B42905C0072DDC23
+61F20E89BA1DF2EFC1C18FB071CF04396A45293E44FE656A19F3AE3A5635560763D03B6039EAC4
+605AC30D4E3B1A68AC6CD68B00D694399B9527F13D81099DA664919A3D15C3E6DEF460134A1736
+B1FD53DDBD20C248D0832074C2A22802B7405EB6D33D864D97B78252BEAE3BF9BA5DDFC4CA077D
+806289B7ACCCA239E6603C7D2BA41B7DC820F86D1F8530604D7E3F8A1239081D7FBF9FF9C2D9ED
+4D672417853364CAF9F010CF08E4E060038A67E70EC743AB7FD3BFD62E7C209B0281F592700E1E
+CD0B18F65DF4947D24B2D9FA6C645348495864F66008BFE85089E6442856D0DFF9B27648A793B2
+22E98EF332692C08FFB08A7AFCF9EE4DC33343F8FC0B2BF5F59EA5FF484EEC4D0903A7DE30447B
+F6159C922C3691A97C2308CC2B32683A72B3CB14023E76410345781F0949E918D47481630EB60F
+891D13EA3AA81DA60DA50E67D0DD63E6823DC1375FC60738B633996A10B16BAC8CBF574732679C
+B238B9BB0C1507515558A5E1419A17DAF43BEA11E31A9F10AA8DF17DD9BD9EFEC13EF6F6D1B47E
+CE37F8D45D2817B5CAECBE38D45BDE09604146FDA57CC7E0814AC69558F170A7AC2F8DA6A5C7DF
+485C1E16BB96C3E1DA2EBC5D76630A99A007AEB8F680F2A10182EE55A0ECBD17267F6A0E4AB5D5
+4E062DDDA4DEE9506528043578853DE1CE8ACDE68938EFFE8283419D9A779BBC39221379BA2767
+DE78BFECCEA814269A456AEC28CADA35B7A1F5DF89D57F9FE64B2818EFEDB506B1CBDE22F9E706
+54A84DF0C0124124646EBAF633E054D704305B2723EE6848011985DCC11CB1DA81ABEB7CD5450E
+31C218B45C3556B7D1DCD47D4BEA4E3FFC5930037B2664ECCFAD1204D8CDD7289BFA1B2F4BC59E
+B586883A9E8757EBB0525A53EB83996963ED8DF4760CC16B542BB7C60FE6C0F3A18E18B26EFFC6
+CB96792CF2C2113E04C8E64335082EDB3FBD78DE0F1D61B55EBABDFD44786416F0AF593379728C
+FF15973618B201D872628100BA908908A978EF091A126505221F6C52E7096CFCF13710DA707347
+308943095A0222411C858DC7BAA314EC1107CF9C7C699EE623981946E79B70177FE70BEEC2624A
+928FBAF73B1CC7D65A6E76387EF3812177BA0914BAEBCC99564A2A26710129E23899D8822DF447
+06AFECAAD63168BC96BB879D418D3A26C214E4F26E186ED9B645F9023013086767A5276DCE1B81
+031D6F08055D5898C6C1DF53CF9695F0B1DDAAB78BB824B2EDCB8D726B2F477289C16AB9E85013
+1E1E23221929D95E17F4011D2126D783C1363403D650D426D642AF6928AC7A017E2D36A60CE6E9
+7EC189432627B4BB14B94E2F46D4ADA823DFD6093F9ECC8F01FE148E59C11AAA4417EBC801B0C8
+D8B380A4922D9AA366BA64BEAC25DE3BB50E5EEFC4E0AA8E8D6E7D664FE249F01058D5CAAA8C3C
+AAC732A1507B9F84AE531A3F5A6CA32C812EC23E31F3F491F21835F655ADFD42E6387D03C500B1
+D924D99572BC8F362BDB56FB6962800DDEBA947659674DB719E4CA9CA2CA8BB36E28CBECFB9EF8
+16EC9B0AB6B464B959DFFD30F564E6C7480B72A5BE58B2B1527BF6967F08F929D98378B2D18AB6
+2A73010C9FF49CAEF7C76CAA65695F1FEDFCE05A487CBE6CA689F4B095BDBA432E349816190CE4
+BD03D7246F73B5A6BCA12E262BCCBA77E25C3A19241202EF50A600D21D16E8CFFA05EBB85E65B0
+E3AE69730D4D3EF79A0525BFAD3659DDEC3F536BFF0EEA6693A683BF9259E098B1CB8EC38B1DC6
+AD3B20DDBB88E1863ED1DF64A2452977A1C70CFAE0AC206977526D2EF4885561EDE9C0642D6524
+12A2BCFF8B37DBA2D31079C4AC6B9CF26518BABF3639D9169FACEC29E42DA1F0AE2EE290FC0F35
+149E0EC8807C70C4EBAFB12CA44B7DE7D95608DDBAFAEB476E98836E317187715C1F07C3719EB2
+0560EB5B241932106C464D074EBF0B4B6EC4E86CAB3C00357D406EA833652D729D32069140817E
+F7F906E8650CAE88FABE5545CFE266F4966FCFD8F83DEED5C086876952F0D024108B42E06D4DB0
+89EF77802BB2DEC90966D331F6E34D92675DAB18FA3334DF9918806BE5058BA582F35B2D742EDC
+F4FF8BA830F0C86148C235788EFC15400E08ADC57D6ECE093E1F7711590DA9D30017B730774052
+6937D9A8A4756ACCB0A6BD2888CE2295658A9B534B88EE43DF464BA3AF64CE2504814D2B065B85
+0DC705049E0B346D007B43AFC18028D4E9539EBC7CD14737CC1B7F10F2CB000A7F219DF60B449A
+12D21E16E8789B7B8F67C354574B6CB5E0B6B612D9C5D5B0AE7D87342AB404E967494718582FA7
+D32CE4D6A81A1C9EAF3EAB6060DFBA250685BABE46B4FF3BCC701AFA8A868F7029B38F3568834A
+8C34EB0E6DF3D67334FD0E4838075286331AB693179C65BA5087988383D3D5EC5E0AE7BDC99BFB
+C358BA2AA274A4521E286CC6052A5C477696C5578D5608267CCB164694974BE93AE7E35F389F2B
+AC6B7980E61C29B1DD2D15B42195E795B00D2B89E6C4BEC4379413B11B939A1528C56006ECC994
+7E4F14E3D60F7400FEE32D77798FF6383B3319C6F92E494BF73A90083F986CE5F2105C0E801027
+57AFBBFFAF368A20EBBCC6516B79682D8B70A23D8DF3A2BBE4EE081D4ADF70847F95DDAEC10B35
+13B069B9A6E50FDE25E3458050F568625F680D3DAB2FCD3B7007109358EF6428756F742C90118F
+E443EFD7E6D879CD082F73B0B95E230C06C67DA5CC8DB4792EB274FD596DCE8C966F84B54FCB14
+8B57141947461BCC69A012B50DE3667F6DD9F0FC7706525BF5EABB07164BB07B9C973B5D31D0A2
+2CC99E37697A6D14B6F4EE4745329EAC6A5DE7BCEF1B10DEEB46DA4AE14BB82CBABC31040987E1
+74EA49EE6F543DBDA0063B6C1042EB379F610DB5C0D4263CFC08A9C5604B7FE2345E775EFF6BC3
+5C581500BCFFD98E23665B2115CFE33A184BBE1DB4EF955F409074512F61A37827DB751757E284
+A23C89932BA251ECCEE545B6DDC98246970B17C12FC7F9237E6D00E8187F7F45E048307688EE64
+2FA6CABEA56C1D8C1FB31E0B0B95D7DAFC1BE2E90F933A44AF03E94BA2DCE76D358C2D7A2216C5
+E95788A6BDC9350135621D59F52FC74BC96D94F93E6E63123B4F56326413974495E822DE96FC05
+315EFDDFEB919FB2A36BFD8580D6A21D11515EC7835082359F3D0B2F79901FD6CC2AC41E2D7B9C
+412A49C9D7B8FD6EFA11517821643349EE9FDD5A6F4D55F440CB7284726C6DD45E84049F8931CD
+570388CDD6DD5F7AA0323533EEA3DA70FF0AA8BC42F3B129D0AFEDFD840FBAF2CBC35FF45B8656
+BDDAC912ADA0A3C2EE447684AD4A0DADF205A419E583D57D352B30356D611E5E8B67538E2AB612
+787177B8C8CAE9A3F63E58913E026E2BDBCD9CDF272AB9B181BE3CD650AFAF3FB9D6E07D32F915
+4852862C3F7DB6748FC834C868619A4E7823733CA044DBE48F642944A087FAC70432D01392A52A
+3FA0D1C54EBA4662AC8DE38827B17CF644C2987ED7E57D436E4A88B29A1C91F454A4637CA5424D
+11B82D1137D58867A9BA363CA0E07C005DFEB038136D4FDFD5AF85F48E58E50D2AAEDC886A4B22
+CE2DBFBFD24F4A05A3A9FCA87A95A871BF8D6237C8C63E618FA4DBC9E15ABB677EB7F1706B1C9B
+125D4F5E39A168A989FC53D34F45C24A52292627E11F64A7BE21E5A61D4D8F8C9F7DC3B0E139FA
+1E7EACB8BE224E679A29DD3B44FB9B29220EDEE3FF41E88D15C914E9E2EA6FBD1D409753D69FB3
+ABF266FA7991E82B74C7C73BA7DEA82B0A0CFBD6291B4DFFA1D68306D24B50906A3EE87A0C3A17
+3ED5A1F983138E7BD4381E1B21AEC00F72873F4EA6C622118F37619F6A451DBC52D2BA704DA804
+17298BB1CD70A5FE38163F83ED96C2D5EC1CF2DC8CFDC9C1A8C2EC735ABBC1851C1A3270714B88
+ED8E2FB5A0469A18EB27C0B191169E37D71D62D6FE06E23B18B4DFC93F8E220DFEC3B57F34657B
+0BCEB41F10C0DECED95960DD664C499BC607614D97C60CD7794807F2D509B6589EE4241E4349C9
+33A94C3F1E58FC40D320CFC31153BCB12F7CAE903D829E8B2300F41DE6D21B5BCED26673042B60
+3403B1918E2A57662FA77A21D16EAB58C3C81243EBC05D6922C843EAADC9DA99B83AE09FA329F6
+A6F0B5BA44AB4C1FE88B63BFA4D629EE411CB1EF26ABAA16264204637182774F1AB200C7E20057
+17E5168F766E790C248C4A38B93F5F9B5C07E612D72077C36688A597DAE740D04171E33FF960E4
+4C1E795C1C813E39BE2C0365341D1EC946BD30DC8BCBED7F9B4AFED3283B263155414CAF138365
+2C1935E75541A553121B7FEE8293ACCAC906EBABB343B875E4774387FD8DE4557830B2A8CFA3C8
+4B734F4AD5094754B96AB12E977DDC29F8E43697F737E52A6D9DD9A2D8840906B4ABE9C246F684
+10C38B404FA6251A2E8A31E2126D11929B73ABBC01ACE04A84FF25A8F7F1AE3A9C8FC04C2FF867
+5A41EB0453373722415563EC07A9DF738F7E8E9423DB8A09DC6714472982ED98165984C99F885C
+9E9941F2A64D10BF1936C749019845FE5C5DEDF1C057837AE0C6BEE3072C0ECC044B5A33D4AEF5
+3506438F750804B696AAD17897036057E77A0BD7E02F2918CE13A48FED56C55FA447B0F32F47C5
+2AA0F53F03F6334E6C484AF42F265EAD25088232BC109B4AA86A475BC11FB22FEE50F92FB4C4B5
+01DBBE211228D5C14ABA48B56E59A34C813016D43817AF1B707D09BBCA2B20F3B3C90058EF7E56
+DDD4004F8754EBF0A16DBA018F8195FFBFD5668D4D21E7B6AF279A08A17D081811D2C34DA41E91
+3399F6F3B4BE23879972BBA56C65F6612606DD000A6C857F8F283E6008281E5D18828EBC6BCA53
+29977E4C792E468DEDA9BC087DD8B4FCC6D9279BCC069B5B7544585FB305EA3516268FFE6A3F91
+CB25909A61EF71B0016EF040365D193CCA29409EAD1AF569DC290514A10980B94D6E8C609728B4
+A35E97299E3DD1EC28764A71AEDD26C6D76F5276139EF13F052403F529713702E5B1089BAA4390
+78F4D5B1B2FA80FE3CB11B14BC466434BA54F839B8A9C887B769FB59463D0D50DAF8C71FA0A9F4
+0E73AF18FB6C7312FD51D0EB70027ED4A546232410E7D29A156A2291E29F6137FB42525BEFC6DB
+3049AFAF2357A8ED9CED95CF7E33FE3845883E35632507F3BEE56533E42DF08FA0183CDCCE22CA
+7E06D568D08D161560D106E22E9C9576ABE08ECA90A62510C2811D7CC28730D2BE9A1642052647
+394F4CD2A4A93ACC984C954F0E8C57670C08CF0D21D46E08925ACE4665D9D724EDC75EE0392322
+E9381632D8C287BCEF09E84D42E3BC345DEB24C2AD0C68FF094E07D32685866270DC457391BF08
+15A73D64540C28A7BC178F9A8EEBFF4C4478924B72FE21D51ACE32EF43C0D3628AE353B74FC36A
+7267FC679DCB875BDFC77821233B30F41A6E1EFDBCAEE3B4319BBE29D253624E48201DD2EA2498
+34F67D2F111BF268942F6842939365C8E2BC3330F0243CD1AC7C5B62B7F0A2FBFCD0965AA10627
+73634020A2C7C364CDC14EA24B500CBF4A8C79B01D6DF55DB738CBE3B978111D65DB99A78CD0AE
+43619F2E28BD444DEB85A7B585B19C594940C45870E21D4B1B110028A4F3A60C951A0884D57E28
+D5E26E0E928619000D5CFF442D019097C45DB01BE693F6528A00120A14845923BCB81F27BBEEBC
+15A9FF9124371E485BF4AA8B51B2DA49DE8C2E5F4F1D909B2731B2B14B287D921949115891AFDC
+2E9424E11D6A6E01800002B41B60F7AF908FFA016E775C82582A4C15F47F941ABA8889891F9441
+F2C850A29185D4B2B68CCF46C38ADFBF046CB7BCF9B610379E95CD8D2F68ACB47107225ACDC6B1
+2DD0A72F291E27199399F916370B1F7D6F4EC7D0109EEABE3191393C7D6446F86F10EEAD7F9D79
+B5AB0C053768EDBE0E0F211F306507510E589686D29D226E55D9F07696A144BB4A6400647A8743
+ED136D3C5DA6B183D0AF2B565D9D9C345EAE5B63BABA6867BED519CFD46CE594AF18AB49DA423F
+0C781EAC2BFCA83F4B11B431C1DFF69E12287098A487BA099786DE0906EB2806278912B958D9D0
+CC168D6246251F550445413478B8A460A24FA8D80A0924253985753DA56A30920BB237E4521C2A
+78B4E79A256EB66A4B2061F4B71B421D85223FCC8DB4FED0C3A4C4918FDEDC558C57850A62917A
+0E57EA5C771D64A137E17D12F1C5EC08FDB94D1232B090127259DF02581C2584754EEA872D88EE
+7E583D13C54D278DCB5D6AAC44F68E76186133A3EAC6AC3D22FFDE29D0EE251495A96DD973AA89
+867C6BF4A1B71B0956F32CA07D796A19A2B64CAEAC3B04AEE03E943B6FE66EE9840DDC086E8C80
+A0849F14992530B74EE8C58CA3F4E765A7A097D98D45DC90C48A3F6262E9999BC34EBF07D5DBE8
+7185B7CC1BE34DB8D09856E84A5B9B30C01CAD5E72034433045BBC57DE1DB1186BA78C08B6B224
+07FA803CFFF1CAB082856810D5639AF9E8653470B3FC95E1CF8FD80DBBB597FEA6A4E3CF584AFB
+4A88D02C1EA61B65FB0CC7A96EF09AD692D035EEF27EB3BF2967364A42DF2D7565C61400B0E338
+168B81E69C07FCD2CE5B20526A707F36786C0C6D53B7E4567D41DF6435B4DCF13256B7E802441E
+4C86A0A329EA7293B1A5FA8D532FD0F529A2CA7CBF0F667C784826A1891E8FB93564158B14EB52
+7AFD02156785CB4089DCAA8056EC101F85FCA80333A89AD17EB94C100BDD0552006139C9496EDD
+FFE06E4D10C1258BC6912C5889D3D9108622BE978F52E855729C691DAFCB358169154A78659CEE
+C855C995B334280BF279955835BD13DF6AD0066702C7B2A7804A223947A5F8528F0E2A962F76FF
+2B41655FCEFD02F3F6F8D848D60B65399746806A9A4E671F62FD3A46A8766E6F94422B84E9E3CC
+3F1ECFF2C86FD88EAB7C5665743F5F7E26F34864C701B57625A79CDCD1BAA2A43F482FAE42F9B9
+4BDBAA91ADCE7780AD209D2C19994574B9BBB132169B488E6BA22ED05C971D2CC5A9A0262844B2
+1698BA297412019CD7F6C796944202C89B7D7B188DCEB11C91F90F0A338F62F636B759924BD999
+B488C61DDAECC4B68E0104D51C9B8E38354AAA61EBB5B53A10F5798C3E755662C2F92523CE4710
+14B322D56181A39DB9073EF5CF6C99028C66A48DCD259DA4A9CA17375AC33C1AA56235BF1A57E7
+B3872799CCF1AE0534C5EC3AAA96128DAC5592C6A3AEF6AC4EC77F1CBFE1F7CBEAED6935913164
+C7CBAAE272A953ECFD2F9B95E63968190066A66DE5F87CDBB126AB5B806DB3E8F0665952D051A3
+DF91F4BBC261BAB836F921DFB0E6132283C40B9BE25DBA4DB5E9561658D735F4E7C635BA312C55
+A499A10352BAEA349607623649CBBD0AEEF6DFD9F436CA20A9A887A13C8B1E40064BC2B5E8F788
+887C4D1B853C40D74E4E759D417421FFFF7B2ABFF74E70FF8446E268C784BE7BF93CF20D3B085B
+B4136068A30E1471895FD2345E05BB57D5C32F1EE6C3A288D1BFECA8276D35139876240E36DAA2
+99C18AB7A45DEEBC470F8DAFCE5884FA632F11845C1B28A3B39D820CD09B24ABE6BDF342A90D1B
+E453764A959A0766C1F1B6F72579977F6BAF22C2620C22D16E52C78220AED5E5B0F977E69BB95C
+A44F67FCFBA74F292773BBF4590773FAFC9632855223B640F8B5F3B991685215F92F1751EBA738
+5C09B7CAA12A617A4BA5497747AF13918DDD1AD89085AA3510443E8CD9B799F325AE43863E7F02
+CBEEC80A79A785DA41FAD2572E57A19F9A8DDBD1A12004F41158077B0B9D67E9CC4F9F10C29502
+50C74CEDA126664FC366E6C8E5D6C8DA0E935D68DAC7BEFFB648FC6215145ABA587DCC95F2A0BC
+5E187C70FB879E6F75FEFB9FF1A09D4BE80EB65AF18BD7CF9ECA28F44E49BE391D4A95633B1329
+06A003D3879D1DA13717502851178B791137E3B8D7954BFB34E55B27FB430027D6A836C5773184
+C9384BC708991D81665F7D94803EE28BA76CD43DA908B279C772A4249E88DFC85A10849607DF1B
+CA4D481614518C59017B1079ABDD1FF4A5FDAF8053A6225CED3FBE6F61A3404C797A61DD6845B4
+261B7BADCD7FBA647562514F72C0B2EF4077DA86BA5A71E192B2F4E7D9CDFDC1BC990F4A295CED
+BE13590B98608C1B1A5F8E2A1690A4153B9304F5A32C764E0B05BA8CFE4907E39E33D69C4C424E
+6BE32F2C298286EC2C7EE5D6C1B825DE78BA87F2E4FD59985FEFA23933832A4E61A21617B519B2
+9360D57CCC21A685DD415048A06C2C8F34A3C98498CF74CDEFD3E5A595140F52F02B47A34202E9
+2C07EF8E790186E56920F5967BFDE5DD6E2462DDCE6ADB38FCC059E189F8DA70A8687940CF9D80
+98FFAD9D7929487A9191C250ECFF0A90012E0FE9F902F78A2C146ED6E5420C00DD89F7415F2573
+3B5146D271A89598EEA4005DB32FD27DFA0E293423E4D433DD78A31910988D75F2726B3B8A7719
+EBD40A889AB7E38216F1301D6FB53363240E1A07C2ADE47B26D4B6B438FA69786A582C72855A76
+77E6C51555F39F3EFB53C79905BCDB3CD88D3A5801F971BC8809BF73D384B53C1E03D65CC34039
+2A7A564270526CBD6F9FBA7871BDDE6D9BE23C38D5E53B51CFE4EF588E519148ECA0649AAC1E1A
+2606EFFB8EC97C9E64D46E9BB5DAE9BB73CFA6A9CCA578DB26ACEEB662D020F9D2F163B877AE89
+746A4B63040082385DF1C5BEC77350F9F5EA41F5941C90EAB5700820C0C29AB8371180F30BF009
+5D7CEF5446D549D0931961B246DA8F1C3535F8967D64FD070B625904D7D7DD6E31B9E410CF3D5B
+DBB7B6D6473771B85F8E2924CA2F4D8DDFB2DB3D3E4CD46FC27C65F7058E8F908DAFA540BF2726
+A5A1A66DE298D6EB770FDD4C2EB07F3C81F190712C2C5253379D518A931097A96866C1D73AF6D3
+587202857D0A83D2A526D281B42AD8A29E5084228C527AAC631E85E9FBE26AB60F14D94FEF2E3B
+9A24EFF6DB66998C5E2D36966A11AF147CD293723A5F2F34625F6AC2C4FB51D0F851AA5B4B54CA
+E1C8002ECE653890BBC684E4D4EF528BF815BA9B3DAC3A6EF34EE74BCEBD75F35F370363879C6A
+F67E849750D4953A880081DA1B64582E8D790C288B65DC1B69BBCB0630C77ABFDE5A40E0630D90
+F542F09AAAAFD8BFC57BCB9BBED422602DE45CB377C2E634B47AA83CFAAA35E3C869C0819E6E0E
+1CA918941B15F66E9552672110FACBB538E8FB8A7CE8AEB2FF61EA94E098B89062FE76EF53C6E8
+2CCDA0E8A19BCA2B33F4671BD38C0DE622522CE84ACC4114473F10554F8B13AF6E50A8F7443EFD
+AFEF23430F4C2AFC9188ED069E25647C5D89D657E5C570A27A4EE5981E1D9D317CC90F5B25695E
+9E1B914773FD447A91E76E5E87E6613127CA54E8AFA17052094F6467438B369C8549E5A0A59B04
+D32B5A0B02FAB315F25CD4C7E16FCFF78544D88D983EF7C49AE1DDD72275759ADAFF6F206B563A
+5912AA256CFCB35CE30CAFCFA481301F6A25F673A8B90E9795B2981601BA88400DD247AF468011
+8C698A366B875A8631AF3A5B4CEA30F1B98870C096B0285AD22D2AE0C3E7C2600BBE9DB96A9A40
+96BCB3275481F63EC41789444E088A98C3564F22C7CC1D5D343EE6E3494E46C99B1546AD0FC7A6
+561C239B5D233450A80A13F4DB163FED87BFD98FAEBA9178CFABD4B5828EE864403949429940E9
+BF97455B4B10F6FD8720930BE10E639F7173B460F56701B5D4AC799A794C9CA075D34829B98461
+0FA438749B33EB9FEC2BBC2A2D354DCAED8F46CDB103EF0F64670EB7FE92FFFD4734BCC9F5B68E
+CBCB0BFF982FC7558774F9814B00802B4147A50F96E52FD1E107E1BBC7CD878D9BB194A3280DE8
+0D3BEF8FD0CE0FBEE8919B8E6A9C8A45FA2DD71197AB8F15E122B6D96347181D1363A190CAC8FD
+84EDEBE0752BD3EB0312C7EC7864E68CD0962B3AC5B919CA24A3F3B75729AC6578254974D749E0
+9E460263EFF0F666129514DA59329972C02FBC41C2965D3F2C7AD1B834D210EAAB5FE5B50DF9C6
+E16A3DD52EB2A3E703364958B977060CCEF91334232C9E71E27C03A1DE128CFB721881902A1C27
+5FF14F0FD65AEA05A3A58241E874E6222596AB117144C5255EA57322E49F07A7DE465C39DF690A
+6A9836B10E035928E05AD103954B6BAFCEC520D364A7E4FFA27EDB5299F47ADD3009FF45463D38
+8A3C8571B21DC64DD8CF7028BDFEB4F66D105BACD33DB5E8A00363B47B9D348AA1611C059205EA
+3B5897658160F069213875205D4979EA1A1F93F196A322B6ACFA8545EBA221B363A4F6C32C5FC5
+FCB4E4DB0E2D103AAE01AC84FF8B1BF81D05CEDCA5A356981AED6A5F4A5978ED737CEE2B686275
+2612B63BB055641ADE4F9DFCE2BE94F9B593BA495A1351626702E648B62E781885ED4770A45940
+FB25E5C4DCF2CA34BCE72693C063D1F130D728D7D04729E8005CB872D264AB8EE6D125962DD6BD
+27C0BD80247AE1DF710BFA28C8A5E32CD34E45D60AF37EACBF49682A1A76B15ED787E1E6371B5D
+D56DB046DC21B5DD9463996A4D805135A4971B8C187AAD32C422087D8FB8B46B5B472BDAA9AAE6
+85C6C08431BE762313E443A37812D19F535AA285DBA7041997EA73498D5630D24F727335289DAC
+BDAB419E8B044E45D08B45B24134B5BAC9CF14D48DE6AB4705607E8B7ACFA9772C1F4E86A35383
+FC11C4AA84A7C734915A2A5EE0C630268C6DC794DD6164C9D28C33E6208266D51ECD5FAC58C455
+ABE4DD2E28AE428BBA827C18F347127E07E9E14BDF6FF4555E4E6C79697073F5D01927422FB534
+7E854223D6932003F6F7F2B6BE4FBBAA65F2AF984012ADBDFE1DD4AEA80E3CD859BBF018084B8C
+0E6D3E4B81B9F2023F818BFCAB27AB55D3930F03EDDF80D2274FB6BDCBD888ABEE7B9C3AACA6A7
+70FEB66CF346D7545537531AC4FA6DE2AE0B5F0751CB10EDCC047527117F0974A8E0E48413155F
+B8E15D487942B6AEB71989CD74C88AC77809E1415C14A5BD4776A2593692BAFB9D3F8B398D9C0E
+1DF346BB9A75915575B2ED1F1EAE8BA4DE510ED7F5E795314D5E5FEA572DDE48FC742F6318CD26
+4DEF0C83C92032465C5209ACC826D2CC9507097A18679C44329E25C87D98AC7A007B4795FA3F14
+E93993E927358E2E5142E7FB9CB2E62C0AA0C494768014DC0FCF8BFA1B299CB788B74A660CC404
+F661DCF070C900E4E418C0ECEF6BB7A7572C2A632A9FB4F18C963FAD73B5A0C863ACF3203489D1
+EDE5AFF38D67FEDE75F17AFE06F9130700BD092A55129DA2CED26CF10C5C088FCF82B192AF54FB
+BE884D701A15D71F21099303F9204D0CEE6CE1CD4491FB5B0285EC589C17079AA6599ED30377F6
+7538636C92BD6D49B53C1671DDA036FB4A9251BDDDF41383F818F332AED33E010C642605051FB6
+5F1E68DDB634644026B08ECE7608AF5AD2F648E32B6DC1ED202F02E12B31E008790FF62B097F9C
+C871A36A23737F8DB0EACCC75740CEDD89EBF1D1619BC558D35FC49FACF0C4696F577674879B35
+DA2342F894FBC85F7EE7F4796B680D12ECD8E344D5FBA7F5E56FE4D5C138309CABC4871D81134E
+C07D9825556F78F74C9239BAC7365767761577FDF31609C5C884CD95571410856CB2A87CE42BD8
+9F92B8AFADFEB5BA618BA10396AC6B31A4E87C2B89B521FA100D8622F39C80190749C5E9C26F9D
+1040F6B90D2D380BED092EEA62D6BBD648B1021719799FCF210C5EF3BAE4D44C4D798D6529238B
+5BA06D3C9F9AE5367CBB81993C19F9286E690DE1345FFDDAFF9FE36E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lsd
+%!PS-AdobeFont-1.1: LucidaSans-Demi 1.001
+%%CreationDate: 1993 Aug 11 21:10:03
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (1.001) readonly def
+/Notice ((c) 1992 Bigelow & Holmes Inc. All rights reserved. ) readonly def
+/Notice ((c) 1992 by Y&Y Inc. All Rights Reserved.) readonly def
+/FullName (Lucida Sans Demibold) readonly def
+/FamilyName (LucidaSans) readonly def
+/Weight (Demibold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaSans-Demi def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 54 /Aditi put
+dup 39 /Alessio put
+dup 41 /Ali put
+dup 47 /Andre put
+dup 49 /Andrzej put
+dup 51 /Angelika put
+dup 53 /Anton put
+dup 55 /Ari put
+dup 65 /Bent put
+dup 67 /Blair put
+dup 69 /Bonnie put
+dup 71 /Brian put
+dup 73 /Burkhard put
+dup 75 /Castor put
+dup 77 /Charles put
+dup 79 /Chi put
+dup 81 /Christian put
+dup 83 /Christoph put
+dup 85 /Chuck put
+dup 87 /Clovis put
+dup 89 /Cyrus put
+dup 189 /Heinz put
+dup 56 /Jacqueline put
+dup 57 /Jagannatha put
+dup 58 /Jan put
+dup 32 /Jeff put
+dup 66 /Joel put
+dup 38 /Johan put
+dup 68 /John put
+dup 40 /Johnnie put
+dup 70 /Jon put
+dup 72 /Jonathan put
+dup 44 /Jorgen put
+dup 74 /Jose put
+dup 46 /Josh put
+dup 76 /Juan put
+dup 48 /Justin put
+dup 78 /Kamal put
+dup 50 /Karl put
+dup 80 /Karlheinz put
+dup 52 /Kaspar put
+dup 82 /Kees put
+dup 84 /Keith put
+dup 86 /Kenchi put
+dup 88 /Kettleson put
+dup 90 /Kieran put
+dup 98 /Lalu put
+dup 100 /Leon put
+dup 102 /Louis put
+dup 104 /Luc put
+dup 106 /Lunjin put
+dup 110 /Malka put
+dup 112 /Manuel put
+dup 108 /Marcy put
+dup 114 /Mariusz put
+dup 116 /Martin put
+dup 118 /Masahiro put
+dup 120 /Matt put
+dup 122 /Maurizio put
+dup 121 /Sebastian put
+dup 97 /Roger put
+dup 99 /Ron put
+dup 101 /Rudi put
+dup 103 /Russell put
+dup 45 /Will put
+dup 105 /Sam put
+dup 107 /Sami put
+dup 109 /Sanjay put
+dup 111 /Saroj put
+dup 113 /Saul put
+dup 115 /Saulius put
+dup 117 /Scott put
+dup 119 /Sean put
+readonly def
+/FontBBox{-309 -205 1151 967}readonly def
+%/UniqueID 5029006 def
+currentdict end
+currentfile eexec
+AE40F8585C2492B57FC8C19373E315912C02C4E404DE7D857CFC574863562CE335405BDCD8F11F
+96FF6E8F1C7B7081B95AEE4E19EF19E210EB377985E3A9C4049662C57E12D3250AA62F97535698
+C97032B09BB86FAED093CD2338831E8859F00CB0C108EB8E6EF582C1A64E00289B62C4DD3C7ABE
+9D68E37629997DAA1BD0F494A609A153E01C0FC558EC2510717C5F3C0D1704E13894839A500B55
+234B67E33C3EE5A6E7E905C23EECF0D7320E431F93A893DD533D15A7D941B043EA7698B0BAAC30
+D437917A0AB35CB6E43354D38151D2BCAB7D2B5C7EB260C888CD713A2960FB2E510299FADCF020
+C4A535A0791F9B9DA4A3D25C989EB20DD198AAF09029DE3109374D40071EB6255A9B872322B00C
+EE340A09F572634C77960BD50BFCC684BA77A4D15CEB51519C9728E8A3D90555B3EAF8C342A020
+6282A97EDAA25BB74F1AE6F862477A7AEAF1A2743843460B3EA6653A0E7348D33FEEDBDED3D45D
+85CF2AA51168B0647C1DE8B3C9A78C2EA43726659F3E8EDBC6A899F644DC2932A855CF3F64B115
+B46D556E5D9985D389F7F250B017F690E2D057D6C651FD591D0186F44E4E72137572BB6C02B816
+DD19473CAF196D22DD8C2CDC3EAB84CAA908B1895059B7CF29D716DE195A6561EDE1D69FBB65D7
+CC82A9A4661DF15F693EE6E383D7B8204B693A7B0660686A66F634FB881D0DCB0309DCC421EFC2
+F0AEACC7EBDC0D36B4B23BE86EC1BF92CA08E7F7FE75A9573149F4DF5B0FF2E3F1B7152EE18AA4
+4C79B6B5B8ADF21B9D463241D00B8D0B1E4C53E374EAECD2370C762B7B6BEFF36ADA6C616B9395
+16561AB36577ED5709D2AB556D6828CFE3312375F8352709005A1AB5889D6EE142AFA34C135FF6
+A16327F64BA637F66BBEA267A0CF74E93C5FA0BC0025041987825AFB1AE5BBA228C40BC35EAE0B
+620B9E90510DBD9762195207113830727F293787D784CC8B3096AAE08DAA086D3F2D02742EACB3
+7D210FD447B489559EF0641DAD182D275B4CFA7311FA695AFBC9B689CBE20DEC441EBD2D6CA829
+F3C9D7A5F0BD06082A0348E70A97A463340BFE7B8A183D6E01735C49361731501A6BE18C334DED
+5FDD2E20E0DC11010983CA608F9A6AF1E2C5887707CD4E1EB02F38BDE030DD8E0DB7D9B39470D9
+993CB97420EED3C2238E2D9C5558794D1EA89D7DD24C8E426BA238743695FA0908AFB11012C071
+2ECFD83A269452B1DBE37E142A6A45E05E4D3FBFEDA1B8D3B3A8D165F24B8ECC37EAF5F56DAAF2
+2FB1E178D15C742CB146B41265017FD85A6EB653C0F69DE9EE0D5C488D1E9FCD5516F6B8721DCB
+DF10E9A94F678124D6668A291B25A3E898923040749ED3458B9DDD204B196470F18DB90B3B0B0B
+62F4979942FAA9F1FC00D98E345560CEA1D8C89CF7BC141ED12696AB78BC44B2483E3B5FDD8F8A
+257B81175F5ECADB194647FD147826560D21CC2C1E619079C5E03D47E85014CE98E7AA57F32B97
+0F7211D7FA44C26FC12A0BD6F12604B8F3EEBD1DCB0E8959857A5EB5FBAEF277ECD1AC6B564658
+A547C9306B51C96E76D46D4878C5B0CA4ED3EA9800F9797A4B5D18D91244C74DAC07C659F3656D
+2C2D9B3CC8B2F6FAFA22E74782D61492462936DCABA1363C51EBF7EEE92BA72A7A8E27C733D488
+C9363C086AAA51C07577851640AA5232FD80E70934CEF2CE74F5158DA22C7411989672133BEE50
+558A852537938BED9A34115416DB0E62A0CF53C5857C7280605EDB2DFAFE3B15A82F64A2C541BF
+83903E3381468B8EB372547B548AE62E16131D0E4ACBF1575E3F609835D9DF46FED02D58C0C3E1
+804DA0DFB55F6335B910691A3F5E3709B83F3B9FA35771DA4266BD8ABA9FE7F42F5A877D6A4457
+BFC547DB8988CA6E77E04FF7845E90E7B72CCADE8A5A14E594E27BBB993E4F73FF91CFE0306C23
+A8E6B352A0DFFCBFF83E4D9E6F7C0F05EC7EEE1DA737E4E1B5B70243083FF2EAE5F5F88AE7F040
+E7D8CF58D7AD5A2B25B626B4B5525377CA40EA542236128AA40E592421D0D871A37C34FB45DBD6
+A45451B15298530EA0E1DC851C212BA010685A92B1F805547CC57D62DD2D7CD4156C420D073AEB
+CF0CDBFECAA3AFFCA3F1B1B4F817DE41535B77504E891DF0CB42AEE39CA3E37E1B5F787D467CB7
+306304950015AA42A53A340AD1D7CD32F2C0D2A7EA8A7297BD0FAB1B2FD027D0FCEF35DC8A32BC
+DEDCA3F3702008ABC82389A0F12F70859E5F4126A88CA4FAC548C2515A46A3FCFC3E958575CCF2
+30858E0465CF6D43D41973057077BF986E4DCB3078CC14096CE6279C919082DC237A9610589B29
+E9DC232CA680CC17DB5C545BE9418CBF16AE837E02681BFC873CF630D9044524A9F4373DF78A7E
+EC5881CECB664A92123639D62758235DF94C854A740A4D38859C9386E1431C5152331D71AE0812
+CB23884FAEFD580C53552DB1D51BE03559E7129A8642AA14132AED38CC4357259257698DD96624
+76589CD1AF7D72A53A8BA78A6E2737AADE9D3D880140C3907D1C20F6819A0F6465686B6D30A4F5
+04E0488F5C8CE701D2096B45BF447743BB1D981E52C65BF78CB8F4D4BB5E1E4B0E3F48CFB19D29
+9A4210F36A2FD8557AE2AA0477683FDAC64590A3E6ADEB3E3C24DEE4ED90D8A3EFBC3ADB61346B
+6E167CD20F60FD028CF251CBEAF221F423505126973808297125312ADE2F0337C0079BA876BE4F
+94D9F38EE5165BA3BF025C012EF13CC89451C63D943AA2D0C40083036AAE18197E87AEAA4E6A4C
+678BD07DC68D87C2B18A5BF0B371789D216183C02DCAE89A8BF26C15B6A3ACB23F406D77AD9869
+B02E9DA376F0F2299767CAB7DCD0D8330D96A43A1D70EEBD80362872616E3176C3B6CA44B5A8BC
+9C0171B08FDCC575ED942B90C55470C69C3DDB7FC6CDBDCE4911418054C7C723F1CAC9646CACCD
+23F594B344129B30F7569104989A986099901CB110CC535E57D6AA8CA80FE75C4A208A7B5E39F4
+019D8D8A515C0AAF8AEC711A55C6C0DAA0F17C34C3066683AD4AA6A7D3EC57F20D32E15EDCA57D
+61FCC7C8F8AD61260B574593CDDC128AD465C59A785983857898D437017360192FF44E19998358
+6453672475B760A3F8F6003D3EFA6D22505EE7A12ACBDBEA47B63E5E3540968AEE5B6E7FA8774F
+B5410F44F9090E880D2B6E7E7E6A7D1D4D717B144D8A7E4DB66CDD5998BE26621B9F4D7C719223
+B7A5AF8EB116AA03C6AF30FE61E32A62B4969B4429D0D101889F1BDE8EEF0662FC4D64C06665DB
+D474E811F87D31BF576271A7A3E52F7990BD79E96C3B4A936E2B1FBFFD2D31509CF7F5BC739F4B
+7C0216B5AE0FD8AD25FCE86B33A4D22B2D616C96AE155DBDCD095A77AF84EDC4B7979B078C563F
+8588CD016B3C08695D31C8EAF1D497C01A9737F6C1AA4626BA952175B6B898FA389E9493A8DF87
+8D4A1C38C0CAEA89B225567AABA00DAA5B6F3E038C0F3198E8B5CCA6302646EB464F062D4BBC8F
+A8446418626319018C9C8CA08B1C42D0714AE74E49CB33A09CCFCF7A208D1B7212C255AE7701E4
+E01D7E5EDACC772C8DE238B4DCE0C3D6A1C7D55FA9819A3570718A6732AD4746A71DACEF94E459
+0269025736DB98D2F053305C27D30D50DBACD697EA875932778F2A544C9460A942DE2DDA61AAB2
+109FF6363A5EE7E6E336394B882557F7E13F3D740ABFB291290AA5585922FDC27873A8B29525DB
+ECFE5A994BCC926A5A4B34C49210279F8763281A5D91816D974BC5F22847D68DCB911D265F7B02
+FBAADB2E96FB0E46DBA70031B7D7A4BB32711C127FEB546F52C1FA36C7993D40EE93C0D4915B12
+FEB19EA6972A3651FDD1DB039B1507600477877D43AF8F23B4D41284F50621DE3902A3BFE3BDAE
+B057C127605869A6FF573334D00AC079DECA898EC5E7C28CB76B23A617DCA022313B449518FA4E
+3556B2335E4A45A8C61121293C3BAA23BE8ACFC53658B3617458168B3F5FDC321715AF886021E4
+AF9187E2FF6CCC09AF7FDD019556DF58061AC74581BADCA856650460E5B45C9DCCE4B4CCD18DE6
+5AE71D2B3D4F472FD56B46DE9126E08DA99B91A758BD9A94E28A8D951262F220111C3301972A7F
+49CA8615AA7E7BA61171300F8E66A9BA949FAC666EAA23720CA825DE4D0F6A9ABFFF233187791C
+E57E3EFC5FDE95D277D13CA6112D5934D6E27C07B614971D3AD7FD74CF08B4CAC94F1DE512019B
+CF2400998F207B27277C42562C7EAADE4D090D8261C818DDDC65F65CC793E5A479F1E03E3942DE
+EEDBEA85B103FE2BC309C6B16D87804C85900E39F51E96276D9BC9F62825D42D1EAEE49694D61F
+AD59AD71A3EA6E53CB0C06E7916F0FA7A3BC0DA39E224ADF4F23EF2A15A4E0A56D9E38D4D7454E
+CDF3E8D010A6950975E1967E54F4C63018731DDCCF5F6DA12B4D2AD4A228473E49F6EC799D1967
+B7F333ABB650B2B573F24B755BB71607D20FE142C5653358714EDEEB94D1862B435C877C80C1DF
+7B02B148E8800CA3A1957207854011A7EA1AE2B831F2ACE4D56F9A2CECCAA4BDA65C6CF8CA936A
+05FB76383900D5CF4CF85DA2F2D4E0E10C43B2FE280CC15C75349B170E87909E7113C3AE32E62B
+584D7D350D1097EB7161C2DDA01D1CE66B622D041228C3A93F6FD48048ED070EAA88B5AE5751B1
+9034DB79FBD58D16639930CDC92B93F439EF6E900FCEDE677D1CA321B93FEC8C22B6563A069710
+54DBF7D60967EEF580203D0D4294A16C912B06252B97ADBBEA61CC04F9305A249E88B95ECD4AF7
+1F6331BB6DDBB4608CA1548E270CB79FD972293B9EF8DB393898198E0ECAE14C92293506C39170
+5CB3B0526B95E3BE6B8D3323D30D1A8933CC0C558C70D22736BEDDEFD0E5DE972D2BF42EE9E340
+0F64CA97D4AF620384797F9E17BB831776A38A03E6C719917AAD65B3FE3850EAE611B9ABF47678
+D750C0E55CDFCF90E7902A8AD5F0CFBA8125F9C35A49BF4332CC5BB1AF7E6601046E9DB0AFB3B0
+F047A17F1E3346F5B3C4E4817A6E75753A3A66FF2F6226B57788DC7C5FE3352A6DE50E7E44723E
+B4268EB179EB916BCB57F3C7330323B554C5DF750B5B84563DB7248137E312AF17D2BFCFED3E7F
+09323553E04E4049B05E4F8C546D198FCF51CAF6D3ED424FC973C3391D9B190E1ECAFF617B6E26
+B1F2638FB32391EC52B27D0C353B9E7085B810276FA4728E699E50BB54274130A2B290F8B2E49F
+5DCDF560B56DE2A43B41ECB94FD8F4238771D8B55712DD101FAB9A58E4319E58200776583C35D6
+0EF2D7181170411BD45A5C2967D7F19487E8C2B17A5483E90316EE7F6ADE0C11AB7355BC66E021
+2BCD832EE4AD4DDDC4AD33DB5358CA406876B077CD8D4CB77D1DDFEED860DA562615F51A54F596
+C474DF3C2D253EEB1E9B85352211F2F627927893E9F59E70CD59B2163E35D0C72AEB17EE83CF1E
+F47FD6ACCAC3667E5E297DEE0E7F88644054E99E90DAFF89448641620EB4D165D629A9B59A0561
+A144A1CDA31FA7C64E9003B9F66C880793D1A968FDA68159508B61D90C52DA56A5EFBB937D03EC
+C3F56B7C4E58CC65ABA31D9EFA6F49D3739ED898D2B2FD941180BAB89F6BEBFA09F2AAA3F543B8
+447C15E372EC5683C81B987D492F6FEE10317F2C5FD884F813C4E281B5A7D120C24D1C7844CDAA
+5CFA497E5760A150E0D22A548AAB3DDFD13429A2CE12526162A66C45B38824E56D4CD47B6FBBD3
+3D66795ACC5DCCD1AB9BA0C3D6E2AC6A8E0D14DBB9F693CAC9F3FF65BCB714253A607DC2B25B15
+1A7B07690DEB14C2829AE2D043812BDB6881EDBF658C21FBB5DAC05326BD8683B2506ACF3B637E
+055E94B6141C24EA1BD6CD7437CB2713700EE829254EF783A926E2768B06545FE263663F79CA3F
+D4E9C750BA92F6CB2CC44B03D679750FD68524246F4C63CAA44F8C0976EC39F782131014D136FB
+96E441F9DF8DA9BE84D7A59497AF90656B9F308BE1B909E51AFE8396CD977B2BD9D6B1D248C594
+4B3F0DF9042614F333B91C3511DCBFBD6DEB5D5F323B7F021DB863F63DE2DC9A1774CB6598DF80
+011AEBDEAC09EFA9E1644FA39165747C88C8EA6B4AF1897B34E805BE0F0F89FE2B9F71F4236058
+E5FEA48B32CECA6C5C4DABD7A2EDE43E477CB3760628DCD2B64E03ECBD3D28D9A13445ACC39C3E
+540D0185230D1E89750D1C3DFB6DE4DC9A258156FB559870A29F057121419228AC452A0907E683
+74F58C6DAB6DFD46FD4B7B7417A3539F5F2DD26F8FDD1723B6C4030D86C352190716EB980791CF
+2426A868B756255AC3CE719D37C81D8BEECC143B623880C1AC8530698369322B6309C672FAF6F6
+0C8BB5E787447A61E79877B8405C652A5A71F85B222F724EB406A8E5451B8AB3448121430B4ED3
+34299EBF820709C1519E35803396B3DC845302F716DECFF7B34E53E60EEB0C30AFD9862749DA7C
+335475A5D432D4161BEEA5D72A3772B499539CB672E9ECB32CE919DB201E20EFF2555B71B569BF
+CF8B902564763EE7D559D5AA9870837679E4718BE751759A9BACCC51A9061196BE327510BA4865
+ECD5B2A3593234E0E6D198DB19D2EA74A437BA555CD8FE70BA380B852858881E83A44FDC32FCEC
+52BE9A0EE93ED500F8BD0C660D0894034FAA09B92BA8517CD3D294D16EA7F0D038BFF2B744FFE1
+2817B83C7F0DE337F0527433A982B6B43569C18D8D882BC722603FD1A9BABDB464230FA2B0C9E9
+13A47D30EDF69AEB8D6737658718321A34A8D5CD33FDABDBE65A9E9DEDCA6F80ECF455DFC6A80E
+28687F23D4ECD8D8FF396567EFA09929F748CE124D08360CE3637BCDD08D1A9D54EFA80EE56CA6
+43360FEFA5E987845150CCDBC23E5EFE2E3E2F571C1CD5F838EB1884BC39387CF19A0B4CAB69F6
+829987C0FB8634BF8F8424E649F9CFCD769E96A040B1CC46EBBA3B17886302C2C98D02ACF9ECC2
+0D6495C1A80E2018B1267BDE4D82C9AEC7E284BB825E6E500F85E5554E9E55E7657947879BD719
+81582946A1D6F0D70B878B5E280E49C23D3C5F176E43E1878F82210FD465F347B37041FA8FC749
+20A45B3D73E71EF44F50CECFA9590BA94CE6D34CCD4FC878DCBCAF0CF713F4AF5F54FBFF508C42
+DC97117CC92442E180E4B2307A2FF364E89BC538501A2E3526C77EC08E8B211DDF42042633C978
+8EDD3A24389AA1690ED0715F531173163A95E36E87554924FCE4879941C50214A485A26C04960D
+FBD7A03B9AFCE70866723375086C6DDCB249AE3EEA17CB1BCEA611FF44364DAE6371AC79652C50
+0EDC774B75B790B204C9479F3CE3030F6288D1E2C2F9F083F990F217DD42AEB8A95933E7A318D7
+CF6656D9C57DEBDEAFF6D532CF206F4BFBA0EC53913CE7D9E2BC72F5BECDC0CCB313131688D769
+12FE09419536C188F34C840608A17BA22DC57A7DE9B758E05C3800A8BCA77F95C0842094377A16
+B80DACDAD77A3B65651CDF7F7C4550F1214DC47D6E88C006AC5D5066C3AEB2012F2E0C39A055FB
+BF174FAAC6A9A28D2434E03874446E15DCE7ACE5D7BE7050390186125F0435D4024DF4B5C25B16
+719B3240ECE2B00C53EF9091E1043313BC83FB1128F19DD592BDC748E1172069E61AE8A05B6FA2
+73CD67F68AA8F783E90D042C630811A8A71C0E22A6142B17D6C2F443F27ACF59C6F4474014DCC7
+FE9257ECA7B4C46470DAC7540C34A03B7FC1AA96D6B48179D28A0BFDDC35BBAF155BBB5DD8D40C
+2F3CFA7719E0BC7832EED6A37702223D1466A8B4FAB31D2D91AFEA30194B9DC756EA0931A28D92
+8B68C0E09F7940A1BFB8817CEBBB0A5A4E65CD9170014C9577F321AD444420BC7522D91672DD1E
+E7517AB30B7DFF7436C75999DBAB0F7B3A7D452173F9FC066EA136998AB8D3A46AF5CB99ADE3EF
+F0213AD487A7C50A07E25B5363F2C3E47B79961BC58B4FBC206F8C17D4897A26101714848ECF2C
+D7219D372F38188AE6657CA5A9D5140B832533226677A992CBD205BD8A7EEB8618B6D2DCE91AF1
+8401EBF19DB900BCAB2C7146A0832A3AED3755B8906C9A0AC65CE2FE44E3DF2F68A75FD285A1DE
+60FC073205DE3B4BA9ACB0E06C29D5818F55A9DD737F2069BAABC52FD9B3F386127B9DC32B24FE
+9F39921778FFFC702300C1FC92E3809379FAD3189B34D98EC371F9FAD6763C81B424B0E8339934
+9282C1204BA70499E24CE718B2010FC17458D8208492EE56F9DE924FD848705969B622BB0F2481
+6BD0FF48BF235DD71BD6F61C38B6294AEE8676AFCD9B8564E36EA6A95C4876872B94C615DC0994
+D522CEEC5B7CA9ECFE9DA4A70613537A1FFDDCB26A909A0C8512796F70FCE357472476F30C9D7C
+AA718917065C69D2EC1EA9620982EB4B869035E7183A71A910212F18BBCEB054B9BC7419E45ECF
+2E0C600F865B44538AEA23950B5E4010BD45921CA12C0C1968C65EB900ECE26C5AF8D29D31346E
+A2CA571A9E40938D85D4483DD894907ACD68738986D864190CE11362E7C50346473639BF4BEF9B
+81160FDEEA602FCE03FA4ED3FC5CEEBD50F3576CDCD4F21408A2D80E265D5D607CF00CF15388F2
+C6EC9A1B47C77DCAE2E4F2F978508923FB4AF9CE6C8BD1941F66866465D9826879918CD49BBB89
+9A0B12CDA6A069B9944666479515F2B7E39F94202D4B369FAA1887EF5BF5304E8C2B2BF291D6B1
+4E656EEBD98A422438DC43124E73DED0C86F71F98AC1DEC79E65C71AE390A9D7BA0A2A5AE8EDD5
+5D22DF7FEC889A8953ABC0B0BB9898FAC1CD7B25263F7AB9DE276B20203ED2F2F43E7D52E442EA
+02EA9BD77721C48D819AF6A522481180B75C940780AEF72D451D556A9B6781C45369984390B393
+A873A2E0ABAA5D91DF10A1A29E7AF13F74FC678716FAAD7523B721B2B9C0C46C358887D0A7F655
+40E317B0F9B6359CB0C7FD951F28FD77D33160CF072D79559B31687A19AE294FE3CE1E9D30B083
+F955672E43D601A8FED9C7FB8C735C681B612B327D3806794D061C3C95AF819B08515A2D60E536
+D3DAB7BF64E37758CC9209777C62677547E065E20B74175EA87DD3836D107D867805AA0D7A913C
+E8201BF1BB8AA51657E08999788761B3C5747F40511D58798397D64512FFC2BE814C776B9EBB54
+9E4F5A3CBE75D920B2BE77CC141D1D26ACDD762BAD54CA7C37EA9BB718059948E6DD2C404BA4F5
+08AB7634D7F7CD84A3C6A1881026AF15EE46DCB249436A9EC02E96D88AB19180FC2D01742ED7F0
+2D7684B698AD17273CFA4164688C5B411D9E43DCA5806223040AF23ED0534A1E9D922380EEA882
+A5B861CADBE7637EFD6064E56107BD6237EBEEB8DA25B11BDF0A02569374B70F09818E9A8A0F6E
+F9267967EB87CFB403D57215869D265E58194178AD151C0F774C726A2619B08515D3FF9D9ECDF1
+4A7A40F43A154D499086B62D82BA643A2742C2F9420D73D7137C20C5C9F9CBAB60278E6909F8C9
+AD368E6CA36624FDDE2E1F9DC3A76681FDC202A09CCD9FA7904BD49F29C645AE4B4BDE9433D44A
+D304FA982F5BD914F42A77EE7C4338435F8312EBDE34BF5F8D805ED362C6A99440A641DDB01CB0
+CAB5E911A0E5A2935F340AE81B91592BED1B4272CC03247B1F27AB2E9B23CF77D3DD021B907460
+F8A877545C42AC468B68586F0066342AC40F497397DE037EC5F5C517146A72CFEFEC3675C88146
+52AA1A648DD3194BE106291289E0A0170FE7C1F0616A12E78E8FE112B7B2F60A623F49836F3FC8
+CFE47E820E9911C19AB297882D2311F41D76452CC9DD6F6F95B0520BA3EB394C15189F9DE9573B
+85C09AF740EA834A5EEE27A0400F1E3A6B5F86D0C69F8FA26C7BDE10DABAAB8F7B3EB7071A72D0
+A21D82F17485DA6AD12BE8668D39CE0B6A4BC7B59A9D8D6A47A15F62D2B41283E9F23C35D2865E
+10BFB2603A607E5246775F67A41E2EEC5683A709D02C92F4D021E07649C4C60A5F0E98D44CD83E
+A34297942AEC4D397C4672E5ED5E1FB1CC51F3B6CC7E8FD0128D7935B05872A6B8D76F5154BB3F
+17A4EB5BA0437DF785A63009C1D8084FAA7EB5145E5BDD31E9984DCC2ED1711A2FCA3725445AE8
+C78BB1C692F2FCAD9556C68E7C9196541B9A4F2465D16B4205E345D096E8E5B172CDB1E784B228
+0D22A28813998F653A4D47B5346C636D7C22CEBF2DBF433A8790FAE8989A18C674BDB566FFAA7A
+CCDF631AE4B1B2C876E45B911CF9F4B9D7BFCDD2684553B1CC0F3BEC3624E44F023BA223E83EF1
+40D0E6D506E11ADB79C0DCDEED41894073B75A931D0DF6AA89078910D35E6F65B956AD74F939A4
+B30DA755CC42918F3E6B748F066E891F0A158DDB4FFDEAACC6E71A9AE04DDBAF899F796A80F6DC
+02703C64BC7E021BC292A9684305D59CEB84F579B0BDB215E4FE8399DD885C8337A6ED127AB50F
+E2B562EAFD20C841E7E5DD1DF6993F4E60B59C6FB2B8660ED942D360C5DC9D48A9ED8D9A08BB4B
+8F7D51AA81D0F6B5C63E3633EB4A8DD8EE07E99ED5A455B6D5021D91C154AA57807357D477BF2D
+626D54E365DED3AA67230CD8FE70C51E3EBBEF88FC014AD287EE77170EA9E47828271235BAA930
+087CD8749F3528C7C60AF3EFA55DA68C6D3B166ECC7B0A88E4077EB2C93BC5894EF84D9BACB493
+203015DA8CD9EF106CFD123E8057AEEA2454C9651D312E4F6CB7CD12BDC1DBB475A1DC725A21DB
+FB24F55AC85BA2F07531B23ECC411FB2B0DA6B7379F3BDED7DF2F412A016E9905865ABA4274EE3
+1D932014FFD8836B8CD636568CF0BD2A7B7D4F51D716BCDC50D56936A297C0E7807674BCDA480A
+1DD90412EDFEB4F18016E5A5EBEF885D3D33E2D925831343B0CDD184AD9D9779F0F50805894776
+3DBFE9EED1AFE3FF0DE7D8691104B4155821FCEFF8D0BA9F35DE1C39B063394E2F76B0245555AD
+78965B301411E1D93B5D7C2284848B3CA29776059D9AA4CD2AEE88CC0007376C6EDEADA2DD1CA3
+F5293EE8E2C9B0F1A8F5EE9D009C63589CD0A7003B7911C254B780C8545203165601845624AA95
+2519CB7F1A1CC004B84458A19C7EE68FB249930A268BA05F34C08FA72BA4E4E6919EE667DC762D
+F206E8BD03D6A1996887DE81640A2BCEA4052FCAECEA52900A9296A4A399F7ED0C3D7D3852A897
+9F339D42D32911E6E119BCA337B7F09F2BC74BDE2B71113C439397481A8A5AB3EEE1EF9A2DD798
+E9CA52E836034C536C07CD377259B9B72FE7FE68A1FCB8D4707B223AA693CCEED0AB7D97FDF90D
+84DEE522697C071AE0EF306ACBC192AB9A9FA397E6CCB97F42FBA37818A844FA045AD2BCE7AD5F
+0731590C7A26AB951EF94059198AEEDBDD869096FEDF9EA55D22C23EB6E4ABDD469B3155CB9451
+04C51EA9717EC395B7BB64E2E4AF5D31AB85876028BC78E0CD3BDBDE214CE56F5687B3009DAB8B
+0AC6D75B13752782F56C590AC4FAAEB6DA1462988BD69173190F7A486077BB49CBF5FFF612B0C9
+57474F5401B8B1E8F240EC3F20808DCA2F9F2D810A07498297DA66D9AF329991DAC432BAB46C01
+F1B17BF8DC6FFF54F40397026ED09977520A41BEB1411F9334E8CAA93E5CBEE598A88A01B25601
+8E529F173153A67AACDE4A8296BFCC5B88E6E20B29D083889C18B4D38418B12F8F3514FC95130C
+58A0891AAF8A9C4457603EC6FFD26F0E1B957E783D4F309F4B654980C22D29CB8646C104621282
+BB301829676E5F3D07F090E172F9A74E9E36103D3E7FD4D7AF0F6AFABCB9A21250BD6E07A1AB03
+66719B2AE6B8B98B6782AC722DCCD0DDE69FE9E39293130A206E9CFD64184A589C4893C03375B7
+D7094CAA426EB2DA5FF79C2DE45F5893EE2AEA388A2AADBAE87FF70B629F304AB0D81D41F44352
+1FC0BCB558119C9FECF5C9EA1A876A0A06610CCD279BCCF198AA606A2F4554880BB1BE38A91B55
+48D503EE76A3ADA011EF1B31F25B3A6FFC1A6C6544431CD1E1DCC06789C88584FD1878D3F5F565
+3B6FBB4B5B4795779F976252E9F3F09A482F9C8DF00B5EDAD6F0BDCB811E622A4FAC70FC0D6F6E
+37625FC077D143C6AF7E76280B45F241C2FB62951447F84012AD8401C0BB7B794709B48BA3FEA5
+D85AB7D9875320A13BE8934E8FBC8B353DCE93A16979FE3A97D0E9A8B5D1F7DF52C6C18F60AC87
+C8B17DC80235023652ECA4275A901D9468AA7766128FA157DD051060A62CA5EE8235E79CD8D5D2
+B651066E2D8481A717EC08FF985BCC2B4B5D4BAD6408B0557285903F26BB6698710CEF6102230D
+042EEFD6069623A5003CCBB8B71F6FCA85A88347DD13459AEB84EB4802ED2ED98D02494CC9CEE7
+FF5FF87319C591C72CBC3F43DC7DEE2BCD0E96DF6EE42949CAC9A7B7CFEAB55D3473DFC3724105
+81D8C7CE893A1C374D933FC9CFDF462481D98FCA27085AFDCE8CF359E127DCC1EED7B558FC6980
+813EFE260620D7A7BAD331651C09B2C7F5EA13A7D095368B1453C7E14E6F6F4C99CEA3F3F51256
+77A448D040F2D496616C86D2F6774F2307163FF9C0AB8AC88B20A6023E60A2C8B63E1BCB6F59A4
+2D24C107DEF5875E7EA1062646DAC43CCE029F56E91A49B0BC6873D1796DDF7A0117ECC41DD4DC
+792B5B97077E2AB5492876A547074A73D404CBA4B5C0FA1938349B7C156FEA5952AF7DAB0002CF
+84A92D63E38C0ECAF31FAA2B2A033A3D382C3A4416F554E4E00100D122B2D75AF0BE42C42C7B1B
+4E515B81F4EE8D3F9C39796A63506223415C2A55FFA26EB9E28ED5EBCDC5D2E83A3B27DFC8B6BA
+8DE74DAEC630AE7BB6DDB12A42C1F666A05EB18665EFC68FCE7DE3820485FE9159E35EB35E2932
+62FCF5712BFFEDBC974E5990BAD0D64D820564F54324323B31ACF948B3A27F4AC397A958864268
+5F86D44EA685BE3CBF1DC01C293397B8E3E457F619D8B6A85E75D838219CCBABADF23C0E4434A7
+787DC52DB315BAE832819F2973F11C045A4662F51256BE3967C3231CF42AC7DD045786B27E377A
+A42DAA473A697EFE962CEBF368F10E0F3AC73EBDDBA259ED770D8E43F8B39175BCFACFD1E31DB3
+88950902A66926774EFA8EDF9649BD8AAC64702EA9ACF5717B5C91B4C150EA2A98CD128235B6D2
+645FED4EB709C91D4F71F2E3B6B971A378A7B3499773293D47B59AE87AA1F3220CCC3022066508
+5965385DE8031B42CBB2A2A0FCB9A038AE2BB898991A476373CE559ADF3263F47D6C103112A5CC
+E3EDA9EEE4C24079F0EC6F88E9AD54D1629606C97F6EF26ED0225718AFAEAF1A21C712315C03C6
+9B019D238C17AB4FDD0A52E840E28C6D83D6DBC7F04051CD5F8A61654B3037FDD8388C222A55EA
+4A423F99635EBE452DB660388127204288A88BA9E08B6C31F92960CB9B7557CD754A3400D48F1F
+33EB9C6E820BA19A66FAD15A086EEDCEC0386DDE30E8FD98B3A63EAD8AA52656EAEBF9D3995C08
+083CB2901C8C04E8CDDFA28F89FA371822652E71531782D1388AE97BC059278DCB3DF5D175DB21
+FC34D07B6D3DD38F44E6BA13133D6E2D54033C4A77F0A4B282069477761F5DE689F4EA7F734BB4
+5C0C3AD0198A5C9F9AB087A38A0F47BB85CFCA1DA6E818ACB5B1D9B322EA1A67681427A2E92A5A
+72E27208D406D2F24CD583EB914DB7615EA17B0F471DE94AB404502DA4CC394ECE88024B6AE998
+CC7FF2D1383E183DD4562ED30BCC8BB6ECE442449BBD57E546AE5E6993E2993A9E0E49784366D2
+6A0D3A301F81AD2413F564C4F36F7F8CB3F01E1BC0609F9B6CA4051E30485865768C9CDFFCBC7E
+8E5A91904F43024638C4D70994F32D75845F9F865E9037491E7AA0877ACEDA00AED81E74122F94
+BB270ADAB594F5055D2B856F9615F1EDF02AE54BEFF75D33F53589F82AA67139C454ECD8077C8F
+53509A3151A7EF94E80BF03F881A0553D321B41CEF83350CE9B40F8CD187D37F9B0C0D7537D498
+BBF7ECE55A8F58FBECCCD0A67EB9D86889EAC4E61CD90C40992344C0D79FD1C8ED6D7272B48406
+81B99C5A06266FD81B0904D89F1CE6CD26D9844358263E5385CAD345FFD28000BD449B1391BEAF
+FEB2E5EE56A63637690F48105EE0102E398868DE9D2CB1246234605FB2A5165085370E4EF4481A
+DD0BC5214BAB5055AEF44E54A56E884F96CD9DEB53F44D2BB3D29839F3780655909B8F5968B491
+83E5D0978A1D3EF4A15D97EA1D3F1B16FFCEAE52E18F34BA676F2D478A5CE9EF0EBFFA5E0E8DBA
+AF563359E5B0E1FA0A861DAF2F664F78B338999DE20CBA9DD87A91C7FD06E12F3FDDA8EA27F945
+DEA14960910D04FDE66293A8BFDECBCA8F5D1267CCD28B5161C89CEAFCE617CE08496BB3DE963D
+34AF77B9BF7533C46F910A673D6DBC905C11D166B26809AF418B3A8CC243E92F7680B1B02A56F3
+355FB37EBD6F1CF721BB8B55199F04707C9947CF0747A124D6136C18091F700C1DAD3F30CADD8C
+AB54C79ACFDFD261A443C3221174F869DC157F61E198A69E6267C9B48E78E907CE5FE7FD4B53EB
+9189094E0EC33829F7C27C6AE1CC732C3D191D522CDFAAD023A181FD7B5694F0A65FCC20F51570
+95EA8DB3323E2DD26FC06CDCE01EB98A5ABCF0DF84F3A14DD67EDC748193627EB51C8F6692D45D
+C830F3EF7C823BE662184B79F6B523D75ABB3E83F0BD78369669A26728BE6B6709A835C3299A54
+25D05DDCA7CB954F4B325CB2E5E6C28C50C59EB0163915521956EED1A2B2DB82B22F7A1B9E9CC9
+F40044CED31C72E9E85B0244EAEE92EE90CBB3A8620A53F805E9A20A6A0FBD52DE2E75ADDBEB97
+3C3A794EF204C634F464E0725FD33E8146D31A976D305EEFEEF70DACCA2BE227A1689BF53D61AB
+CA013B235A2E921FAE0BE489107B223E99209B7CAC5355A33F2F8C04996D075E18007DAA3C1319
+EA66E669C4198838FAAC9903B074510749D671308C9BCE1D173D6C296AF100581E501106717F9C
+59E3A29537A16D376D9BA8DA51C3FCAB70B0D0F61445AC05758F1B579DCF0B5CAC6738FC4C47E3
+6F5A3A27AC9F19045BE6B3D5482E2D30962C3141E12AC96D59E6D43448F85D1999A39827C3DF8A
+933571A6585DB257603471CE0C77950F8A7D3C25FD60888A26F6CD77281BFC5F4A72394ACCB7C6
+A9894B6015226109D1B043004363DCB6CBE56449917861747F1828E6DB19F835E328524A69464B
+60DE76F08CA1FEBA7DD75D78778CF64F0050E225DB6A44C785592459BF38CC075ED97583AF0E17
+EC67B74D752E580533F98000A39CAA0A3DEEA46B89D864E22115A084F97B5B0D3A050AB3ADD338
+080096BE5A156EA956947EA2B1BE6C357BB1901DE7FCDF02D78B647E1FEC144FF3C8A7711A894A
+1E7D849A60E0860EBB256E15C5C995951308CF30F1A87E8D3E678421B7537199E27270B4755DB5
+536CACC90C4772CE0CAAE1780BC54ABE0C3BF2627B64451DEEB875362F3B47E95577A80CEA03B3
+C6284BD3623306A66907C6EE6F4E16617783DDFE3AB55448F80A97E8D5CE6B73493B8426DD163B
+96978D8052FFCFF0B0CD91F1D366FFF67514F92F6B1FEE64C3C023EF905C2830BA7BB7CDDD8532
+F18CD1BC5EEDD4E57FCF043625483C58AFFFE5EE5159F1707BA49760CF3D6900B2A6C9B64EED82
+ADA8F0B96D7BD624A1AD4B3DF0118E86B98B46D72A0744FC895ED2248618E6A349C51A44A89C6C
+BEC27E525FEA388BF4A52D963AD520CF9A768B8E1BC6345EB434013BD9FCF6FC5A309CF7953DF4
+E6A92DF3FBEF92FB1A4A7FC4AACA0B95F070E908AAAF4738227375A3FEA047E3B4823BA8FA26A1
+F497936F94ACBF1920E2C18099F154F2D74E50A5FA623B2048920B7E0AF9446EED9C8D4B737AAD
+85515672B6AF1543E5AF733C178FF90B89B6EB1E92162EAA240B158A78652680F3509F9C1BB21D
+EE46DD3B39A2D17029BC29E260AB570B29B02624F152F6D56DD4F2FE3DBB352A3CFC4AC0534F45
+E31ABEB8C099BC8B7B829F6C7D2DA0C2B9D58E22A8A8BF73D9EB1CA278086FC1FAF212EFA755D2
+96C938CB7EE5AA4E007EADC88E7205FA0874D44B769CA1E0D757968A39FCF4F553C14DCD9B34FC
+5246D3595625943439F4F876FB6A52EBFA06056850F5C92D434FE017FB3D4B0E9022B2CD28C3EB
+95F084EE99911CE955B5B93196BCBB65C2699A0C942A998F785A59B43C8F8DD87BBA6107854FDD
+70B3763161AC79C7CFF4FA36EACDDABEA6F5CE84567AF95E389F9C2CE9E972B540391F167369AB
+CECA3C3D9967D41DDE6F455445D686B3B8223C6E8727BE334A73EFD62477DA3D89DE65F3EBF81C
+4DACFC5CB89587AC9267B8670AAEC340FBD51971A3323B17978E110745B84C5E6FCD74E132BFE2
+19BA1D812A645002FE8827DDEE54546099B47E82F3935006F0B44E174B675CAF24A8FA4CE10017
+0F34E1914F3222DD851F0A874650A14866DD1EFEC6A2D97969F4E3DAB9D449AC50B5E4524BB5AB
+96932237FA7896A5284F85E592B01D20C761D35BA83B4945F5608F30A77A84D918B6847516F96C
+F351874BF52EFFF38ACCE88174634AB0338A377E99BC3136A0600362EDFF0E1D42F8C5F984ADF4
+AEA2463EC1B3DAE2A6CF86CCC2AA846C7EF31653605619C7D0573D27F914DBE344E5C11B697154
+347E09F54C4108A1D71FA878E4B07D35FE056DFBA2D7B99C8F01134CEEAD849AAD3AF0CB60505D
+519AFC82A4BF5B342575B774D88173F1BCF2D914026D3413FF187F9C8FCE3709CF0F7E9A793483
+876A4FD3F0A29DD8DB7F470E88DFEC249A91BACCAA65AE26EFBC9CBD550A935741A5501021B9AE
+064596C775BE5967FDFD3FC595EC5CEC2F185EDCF11492E76C8EB22CF5C91BB63E9AE2649D8A5B
+CC7A47943E40E3B473EB5E792919F03F09688B71ABC0B0E2CF64E1DD286236360F7EC828CECDE7
+64CBEDB243828139AC4C72378B3EAE67D43CDCFB95DFE17DDEB6C2354FB8C52ADC0A666C40E2A0
+4FBCD8C01936F04F1A983B68462205765CC6E782A2F459C040958CD16D8AACA06E1A7BF14BA6FF
+D570675A54E431B2D2CE78D008F082693123D18E1C3D27171DE5940F63C3FA5480E80B5727F684
+EBC48DEF479E345D2C9003481AE5A7FE20A1EB0CB422FD2BA07A3208901CA8D782DA95F0A6DE2C
+CA3DE689C498A10CB8E5AF0A2203C5C147BC17BA14B4C59A34B9351321EFB281494423D0B784E1
+622E2F3EE7591A23113B3B90D34D824549B3A0B513B8BFBAADA9E1C4879251BCA93E6C40A8731D
+19B411F1FA3C3F3BCEB63F5B9B8E868D4F0B966AA867EB2D4C301FE6A1D35159B4B7BAF8227D6F
+F7A86BBD70178E4EF798799F4B43E296A889120BE0828EC211A38BF5A5AAC3C00494B0AEE6ADC1
+B8FF56733A3FAF015E6BA38FA59DB63FB3C9BA355E5F2A555903E4A22F2D1F26AA89C21A623DC0
+F0D8AD654C3FBC752FF21C16321F5027B4353F6C12FD340D272C2D4F30ECC9B58DC4A42F71B954
+B2764E077E0CEF1FDEBA5A6A8FE14F3AF0122C0918DAF87B157BE507BBB50DA1F208534607D906
+D45CA3444CE68FCCE04739262BA5B3B0DC0FAEADD86FC94FF14548C98592F91F89948A173B76B0
+8D2F3F845DD251F09AFE656F69D115157309D537E4F663CAFFDA726A5C62DF8EDE1EEC7916F86E
+CEF600BA02901BC5A56086478A867024C58A4D8A631736FEA04F09C9DCB4B3EEF89A0C5767B3EB
+8B0C2E5D08974638E79EB2CFDB509E0948BC42E1A9A29DDB09BD44BF28186C3C5AD4629D7B1396
+610782E464BC4EC12B2C484F01250BCBBECCEE474F25DA98AC82583467B62D51689EE98AD2FCB1
+AA13D44BC1CEE4CFEF34D37FB8789AF5BFA59D05D15449332B46347A7CD1F0791D48BD563BA6A0
+876C8B00496E3947C0ECF78782945109BD9306030CBF511C2B4FC1E28868EED9E2039002C98F20
+43828EBEC486919082BE71A7CA278361D0EB9DD7E21AE9CA80EFA147DCE160ACCD39924F45A821
+D89721CEAC542ECD09E76ADD11FB1710804C63B1268FBC89CEFD28314D9D3AFC26FAA897B3B7E8
+C882C4125D3DF9A67E2DE27A0245D4FD9075DE5D7FCBC8E48125D8BEC3972FFE5F8ADEFF1258C7
+5506691E5DA81359C24A978EAE086E7E885D8151A515F15A475FDB038946F7D369644279C2186D
+ACD69FFD922EEB5397F5C3196548CE35D6E35C4DE6D95BE566665E4E0EE11EA43CFB9D0133B5E9
+D2A6656AE1861C158AAA97C48DD426205842BBDFAA90DA4D5EB11EF29C24898D9FE9B29B2AB913
+2A774418F0190C3D0FA29755168BFB149E0066DFD3BAD7FC405B28A27B2DFB2A356CF6F86ABFC2
+18C7E164F6F0D6D4CBE011E77EE8A045A1D1134E115D730D944CF34248C1020E15955661DFB6A1
+687CB54FAD1AD759B7EB209E6A78B4F3B4F049258E799B6FF7243B26B573D2B26AFCBC36324E2E
+9AAF7206D3680EFE913A6E9F4CC8CC7FE5FDBE60D262D378A123D8BA928CDD6651999854F3ACF5
+126C00179347DBDB34954378AE5A08A690A98413115809C95A6142A662DDB89BA25B6026064A6B
+A7D85963FB4D10C0BA1BCF3E73CD597D99C4CA47CEF4692A0EA5DC89C2A92DE5630EF15819840F
+10FD394BA987AE798BE15A61AC464345E203B06A3ADD25E1607F9C750887F5E7ED7F2A12109914
+542CD396392738C7B7A7DAF58A7823414D648CDA083CAF2133CBC0318CB11464411F85B8FC813B
+4D07757D3989E1E5E063F2D8E07E50BCF85811766CD79210C6AAFAF085C74BFA3DA37B45386A6D
+C83DDCFE3DDBA6B3F999F91406D35374E60CF88F2920208C1D2A162CCA6B27984D905F3C271524
+1FBA18949B6684E3433019D3C8B45E454C18485E54A74D196AAF9636E85D179E1B5F0544D09BE1
+8855F32091CFE26A425F114C556B995935F821D811E0E5CCF779764DE6EC47256481B25EDCB409
+E7A1FD2D72D6B5DD56EC9D4474CD5A9660972D366649D840986AACAA04765435F4EFA7C513A10B
+1B67FBB112BBD10490B0BDCF5E5BD4F80787E43895D4EAFC807CF18103A4EE315EC4B71BBB6022
+FEB88DE20D8C7E0244B95015DDD03CB93417A691CED38B37C27BD1C510EC50E2D82C5ABD32D24C
+29C30888A2E889D0EFC93945681CA613478CBBB222810C4E4478915E598628BAD3A8E31402C1F3
+4653671CAFFAA244053AB7174E8576085F90019E0DE486014A115F88DD9DB9B10E91F129DD5A6D
+00AA208459CFC5A7A2BD1095DF24BE5DCBCDE96D79E90871084AE04C1DA8DC2459FA0E191FBFFD
+EA46B20240E40B6467A2455C72427B119BBB07C5725B823C112E734A09D07970748F0D0D969B75
+1BAF2451D346FC2C56122EDDB88287B1042B9F24C933F541492D0683DE0B0325AAE667521F66A3
+27C863F4AF7F4A937F7BEA60B5299FA5D170F9413A2E6EF5EF70484C0D861EE719126A942E0262
+52279876430581F0AF1841719DA6E4D8C3B932837FBDAA3FE08C18E1C89AF300E3AD7DF34FB439
+9BE9A757C830E18699450B98B49EED738C09084CA5E06DEF86BC58359DD0D203FFB11EFEB043E3
+7B184DA9B71C1AB17A9709FFD273432A34B3D924CB2F29BF5DF84596AD447A049E3A451131D660
+57FA9D4C24BF824D43DADBA7D1B2926C9CA62D8AA8C29FB2D00B0EAB7322873FA5F9E2963EF721
+6BEDB2D97548F6C40E233B25CB3785258D0E7FC096ACBC0FABACC39DE29BC0E770474A541D87AF
+69D3B8E9BFF00AF11DAF9DE908EF674079C7975D7443F30FE21E02B73FF15FD44C619EAA8B9BAA
+889266458C136A3A92E7979EB53A04EB00
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%%BeginResource: font lbtr
+%!PS-AdobeFont-1.1: LucidaTypewriter 1.001
+%%CreationDate: 1994 Nov 12 10:47:10
+% Lucida is a registered trademark of Bigelow & Holmes Inc.
+% NOTE: This is a partial font in Adobe Type 1 format.
+% The complete font in fully hinted ATM compatible form is available from Y&Y
+% (508) 371-3286 USA, email: tech-help@YandY.com, http://www.YandY.com
+11 dict begin
+/FontInfo 9 dict dup begin
+/version (1.001) readonly def
+/Notice ((c) 1993, 1994 Bigelow & Homes Inc. Pat. Des. 289,422. All Rights Reserved.) readonly def
+/Notice ((c) 1994 Y&Y Inc. All Rights Reserved.) readonly def
+/FullName (Lucida Typewriter) readonly def
+/FamilyName (LucidaTypewriter) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch true def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/FontName /LucidaTypewriter def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 54 /Aditi put
+dup 35 /Ahmed put
+dup 37 /Alasdair put
+dup 39 /Alessio put
+dup 41 /Ali put
+dup 43 /Alois put
+dup 173 /Ammar put
+dup 47 /Andre put
+dup 49 /Andrzej put
+dup 51 /Angelika put
+dup 53 /Anton put
+dup 55 /Ari put
+dup 33 /Arne put
+dup 59 /Art put
+dup 61 /Ayman put
+dup 63 /Barry put
+dup 65 /Bent put
+dup 67 /Blair put
+dup 69 /Bonnie put
+dup 71 /Brian put
+dup 73 /Burkhard put
+dup 75 /Castor put
+dup 77 /Charles put
+dup 79 /Chi put
+dup 81 /Christian put
+dup 83 /Christoph put
+dup 85 /Chuck put
+dup 87 /Clovis put
+dup 96 /Curt put
+dup 89 /Cyrus put
+dup 187 /Don put
+dup 255 /George put
+dup 189 /Heinz put
+dup 179 /Hong put
+dup 178 /Ivan put
+dup 56 /Jacqueline put
+dup 57 /Jagannatha put
+dup 58 /Jan put
+dup 60 /Jason put
+dup 32 /Jeff put
+dup 62 /Jerzy put
+dup 34 /Jim put
+dup 64 /Jiri put
+dup 36 /Joe put
+dup 66 /Joel put
+dup 38 /Johan put
+dup 68 /John put
+dup 40 /Johnnie put
+dup 70 /Jon put
+dup 42 /Jonas put
+dup 72 /Jonathan put
+dup 44 /Jorgen put
+dup 74 /Jose put
+dup 46 /Josh put
+dup 76 /Juan put
+dup 48 /Justin put
+dup 78 /Kamal put
+dup 50 /Karl put
+dup 80 /Karlheinz put
+dup 52 /Kaspar put
+dup 82 /Kees put
+dup 84 /Keith put
+dup 86 /Kenchi put
+dup 252 /Kendall put
+dup 88 /Kettleson put
+dup 90 /Kieran put
+dup 92 /Koen put
+dup 94 /Kristian put
+dup 98 /Lalu put
+dup 100 /Leon put
+dup 102 /Louis put
+dup 104 /Luc put
+dup 106 /Lunjin put
+dup 110 /Malka put
+dup 112 /Manuel put
+dup 108 /Marcy put
+dup 114 /Mariusz put
+dup 116 /Martin put
+dup 118 /Masahiro put
+dup 120 /Matt put
+dup 122 /Maurizio put
+dup 124 /Max put
+dup 126 /Michael put
+dup 177 /Murad put
+dup 91 /Robert put
+dup 93 /Robin put
+dup 95 /Rod put
+dup 97 /Roger put
+dup 99 /Ron put
+dup 101 /Rudi put
+dup 103 /Russell put
+dup 105 /Sam put
+dup 107 /Sami put
+dup 109 /Sanjay put
+dup 111 /Saroj put
+dup 113 /Saul put
+dup 115 /Saulius put
+dup 117 /Scott put
+dup 119 /Sean put
+dup 121 /Sebastian put
+dup 123 /Shuichi put
+dup 125 /Stan put
+dup 163 /Stefan put
+dup 171 /Surendar put
+dup 188 /Vladimir put
+dup 45 /Will put
+dup 247 /Waldo put
+dup 215 /Wilfred put
+readonly def
+/FontBBox{0 -211 743 940}readonly def
+%/UniqueID 5054489 def
+currentdict end
+currentfile eexec
+AD776B2EBF901A49F071BF30E3DCFAC47FA0F916EC503FFC9EFF58A2E5E6ABC78B442C3E49096A
+372F9AAE7622C3ECBD02783028DD91D32C0749B44F46D712056235A4901EE1E3989B3DC1451624
+40AF8B496D8B010216C5D0E3D6D7F34AED88500CEE93E2A4889C2FC011056B0222BA09F5697B86
+A1350BEA78ACFDFDB589C8D82923F5F8AD8C1480A7D7EE8ABF2004A86A75BE914F200B220B02DC
+E0C7FDAF4B89502B119D1FBD3035453DDB3DC564DD8289E85D637884AFEAAF7C6FF38A32C70EF5
+C1B638CB40003001895712A251C27020F3B8D9166E77E2A69E1FF83886E0BE4327AC9142301CA3
+F4DB60613570C39367B465BD2E11A593DC63EDCC1810C1F5EDBF099DE46A7BC166F52311BE4A2C
+DFFAB7110560972AD364AE5170A11FEF4E1FC57E896F7B0FE2389F3BE19EB48DB67AC766314064
+174EF2E1412F25E41CF45CB6990732C755064FABE454F1B1D5EA703331A09A7A9AF323557024F3
+7B24CB30C52216514E014870A174249B7B1C05638083915C9B633E3FA00DBA2DCCAD433B078A91
+E405EFD2CF75CEB10E524FD95A2BBFF9EEDDFE3016F6C2D3E901B81B723E4F422A0B1442A0E63C
+CC52A0E72EDB5035D945A2FA1441886E56D2B10A7B5950BAB79A9653CD37F0AF255B3850E1ADE0
+9CFF282133A2E30770C76618F58007FC51C72485EA377798C5C8A00DAB46815939973C8FDEBBC3
+7B5C966BEFCE797755B7E73A5E55CC69BDAB56C7E658C86B8FF147630B6D222993D3AC6AD4542C
+078835BECCF377ECA61A10F66C41ED8379C2FCC2A5380AC1CCA64D05CB08109D76CB1901D00BD5
+4761978C3481B305877CEBCD436944FB66AF914A1C8D2D125DB01ACAFDA9A8F71BA3CC83FB11B1
+6ACFFDE43513DF984167288E886247E02501210DD81ED939D5D18EE3EB3644D5EF61D2BE58B7C8
+106045C8A3684AABBF8EA6EEE01208F99F865E297A03B426EB16D44B34467735A1FECECEA719CB
+F2E24F2A15395A18EC4F6A3990D9EAC78BF523D5911AF11C3EAC620D859B0B642984658A94897D
+4BA3F1F622F2DFB6861BC85CEED6172393058E882721A9B3D2E00437CF7FB8DA4D1EC8CB1217E1
+697149B23FB1BAE92A7E0FEDA0374AF59FF5CD141426C498D2749C85FA6E6E2DD07EE3FFDCEE86
+DC3F0225A5EF81DAB98FA26C89B1B020F884D485893B5EFD6019A149D82925F3DD9694A1058065
+EE57C94BD63E5DCEF57F5C3C850419EAC7C4BC2FB81A7D0BC322CB0F88943A6F507A2FE460EEEF
+A17DBA7B0E7493890299AE86ACE258EE4C7EBC2C9713406E365A5B30FB045AE0163723667C9322
+B05319D528C8C67AAEF79A6C34459311764B75BC63AB5165F831F1857F6B1D6801E39931FAD9F8
+8B61B304696763D30C0B58313D31CC287EED59C97397E8C0A748426DB6C0B7C4CA57A43E7E27A9
+A123734DC7EA137F307B9C9074B908E53E60F99E98CA0DE14A5D61967727709E1CB009EC9CD98E
+9D796CF35B7B1FF2536FF8CD9E1C24B7CDC0E89DC29BEB398CB420DEC645001D90D59C7A5B5E33
+20425FCCFAA23ED880C41BB82A8CADDCB8B5BDB1D57F414F380BBC00B6A8B9591B25AEEEC69B64
+D671A078F39369EDA9E5C9FED9D179AC25F37A4E4D1E438B180B24D851812E407B242F932D9D07
+EE2E42BAF2FE9EFD338345C15F1C8329E91644DB1EA96E6F45871D8EAFF292286D7A70281381F5
+82CF13F5F987F423463C2DB96A23D3D9CEF5B4636A092BA8FC7C97AB42BADB4DE493C0B0A54C81
+82650C094D0B4591A2891949270492240334842911DFD640AEB2B5CB036BEEF59CEAAE37AEEB4F
+4CB45AAEDEBE062358058A0D697972BB11E9F30ECBEAE599E404C7BC4C93FC3C2A604CF7F9183A
+96962D3D0F03FEBF8D7A171E9537EDB0F8769AD1A442BBEE6F003B87F9EC0C4DCAB4C1BE74EF54
+73FAD92638E347980505361CA70D6A28EB18E83ACCBC73C481D4B81F62EC2FB250696E436A8788
+2728E8E960E09A330121492079CD349F5C8FDF0CE6824495FB17A3A97D7C031F9E8B50D10234D3
+C02792AF0C0BBAB393968B49EDF5BD4F84D83DDB9500A9EAE7EEDDA7CEDFC2A6B3B71F885487B3
+31028361BDA2334E83820C7E73A67B200F8E08B742DC3BFFF6E363AA1EA72DB7CEA77826A5D024
+68C8B19EFF5F8ADEFF5235AE6AA50F43C5F2EB56AFA58470FB2CE038D35DF1FDB5135B8CAA9F3E
+F27BACD9D828623636044D161009F558132A6B6DF4AE9CA3EA9DCF94D961D7CB962C4EA67E887F
+B9D7A3C5F91166D41C8427A1E0C8BA49C21E968D52B92BD7E7B1F5B1800A27F3F7321E3D200B77
+98D3F4B0AC1A396BE11D0C919F55CD8AF1406321E8EEF169B785AB38BA5AA61A5EB09A9F312697
+92D98DE98AE49A1308A5706738125DE51C98AA3AFBBB10124FFCE47F72BA6A1E5D96FB5BD8F989
+D1AB41DA7C2C71FD1C02CE697C81A0512182ECA66EC14CC8E473378FA9EB3927BC9EA91B1BBA8E
+0C70BA78B1F7DB3124246AA9E4E349421623DC408D756578B11218BE2D6B613186D1D094179200
+8960A7F1B266D7C4DABF9081725EF2E5806AE27E5D8E81CC7B98C9CDF8D319208DD7A75C2B0B1A
+7C13DE5CA9912EF40371D9F415840ED99AC446E1EC958001243B0C39641846EE67E79217DC6AF3
+02891C024119B55AE58D14B28B68225733BFDA7BC4D54EC2EC58AEF027BD34EDDDE2336EA8B34C
+63EAACC4D255340CEB8166FBDA86587E207C06C6F804C366822435388ADD4BDCA7E345DA3C3912
+16C19BD9F424C5C5596E3D1BF1C6601D5967942070320981295BECA7EACAA9017B29EE70538768
+5DAA8B31D815A53E446EEEB107B369B824C97D5730A4D28ADDB131FA243225A69DB5CC61C9CB21
+018510F1930F3AF2AE3987D5110BED80CD8B6BF24998AC07DFB9C648B0BDE300DA8853FCBC3C4E
+C47181B1665670E4809D03B0FEC298D1E22937C45159BF0E1C3278D727E40CD00A3DAB814D16C0
+453C20F343C8767778E20C3E12A9C0F30CF38F782C91B678FA8B73FAF9AB8337EBC636E05518DA
+74C57B6696BAF384BC34CF1F50DC361C2E745A9906DD87BB93310DAEA23BCD0AA967E8C062EE03
+F573B67C6DBA52C3C78E4A6BC9A879A97924F26EA053CB90F1AE4968BEB209B7496B99E7102390
+4591EA1246F12A2B401C36C3D585A3C3E42E95316D7B3BB95509256DBECBFCFA8182EE874AA624
+B74C146E164A7509867514349FC6ED41A0EA7375C81E58CAE6AFC5524E4506458FDFF6B6F94A50
+18BB41CB3BFFA90AC6A605B372714552AC2CABD4BBB9400485A50E1122F69011BEFD2EA53EF4B5
+4DF3481CDB4F97F8BBB549612C3EEF4E860143EB2FAD42E5B9D5913E53DAE0B3468B191C8ED4E2
+4B5E8CED287E7012FA0D16B8019EB890D9A8BAA01629B0CEA69402973EFDC1618CA995505606DE
+DD18D0474B4E08F7FFE947C323A138F944A950734A4586FE82A08B7C2967E67BC975B875A2AAE5
+05935906A0484CC6C2478EF1EC03E885D86CEBBE5101101C11B7B8165E132D2B427B8583BCFC89
+85A7BBD5B56D12F8C11796232B430613A8B4540BF45C97B6067A74BBFBF64851305257D1BEC901
+238A7303E12BA887117301DF80559342A4B551F8189E9DDBC5251D2D384831269A092ED1971292
+2396105767405896450A1F07F6B660F4BFD98369836EC514D418E4ACD93095A6AA2C44D0912217
+F48B92A5D7CA170A6293B0A4139BBBB39131E2B6F5CCFACB550AD74DCD4D466AD9AF69A409D09F
+5ACE8C98851C20E19E4D44B1DB30905B9BE08AC52E0A1548793C591CE0E29DD2B102756822B36C
+6E4BC505003DEE549BBAA843BA5EFF252F0A5E4CF14D1EA86F46ADDB6EF52427E0B6E2861583D0
+885196B68E53D9B72793100CBAF160F7ABAD3A8E2887D078E7F78FDB1437F0A58A20C7E300ABA8
+031E30B35D34628DF6E8A9689F2C5A779D51D6B673F38730E2C28CD4822168D037138B5DFA7A66
+4318B681D41864AF487BDAC6E635996D21C5EF1D16BE5CAF809C6E34AA787121164292ACFFA289
+15A115A11700B26B0BECD9B05A4CE538438BF67209443B4ADAB5BBC40F9F354A90CE53F0C24AC1
+F2C37FBB9022B23FC9111E292ABA30410005355D49B56D38F4C33C37F8A891A88B2F51957420EA
+E5D22618FEFFB7C1A6436E75E4E6F4F8B3B847D4CA12D3D925A3F1F66EB6D87B19A53042FC860D
+2A57D2B2967F001F6B56DABED79E82D33107FAD1F46172D4EF1A52FFBAB95A33180B0AEBECB34B
+BFA4DD57AD85FCC81833CECA2A9D4667923A57CF8CEA991565051E3BD29DC4CAAF8B8DFBF3A76C
+8EDAD02C5F5EEEC19D462EB48758B2440329F43A38CC21D68D26FC54179ECF102F15AD9AB1DA75
+046419CD4B0FE0BB79C77A72CB9583EB321C978C8F68A3568C52CF0A85C938A8065D18DFAC5C2B
+FDC4659C10A237F09B924DDE6B6E09EFB77C158F9DC22E6310ACAB98218FFB6D547ED3D5590541
+AD5862078A9CB34C2BB08B4C3E620E0802E99DD0572B36E7B7B9DB269FBAD73F7A49F711E2F790
+2C0F15494D642FD63010E3F1B5240ED79B617A655D5FBBB5EACD66B85F02C54023640DF5150BF9
+88B62D82E068EA4E35824FA098321F86B68DFDEEB8F575B85AA76ACFD6FE55B40D2B141DCC1B65
+DDDAAA3E790F6B0B491E80DE0277D25D48DEAB2D8E48A004C36665468CBE3BA496C57596AB679D
+C80E9F744FBE8041D3AD6F077CF65B0612F180E8403CB8D58BDF46FA5615F5BAE1AFE3959FD4A3
+EB1743ACC7DE83ABB701E949613BA573A67B4E9C816348078B2F857609582E5F144BE599EE4B15
+85A08F81174FFDBCD8AC2258B7FF161EB3A1849054B66934DD76DE536680E3AA92EAF1985D5B56
+C68B693A3EC10AB0FFB2B88609E8870670D2AACBA8B20E9FC5ECA607D3D90167453BB172484A55
+141AD585EF5173AEF115B5BD89B653246AF9C2FE922A8F56B78E797C497318FCACD97E8F33627F
+579C8D1254166906EB06F96DD5003DB43878316E2EC4109E8FCBFA4B978AA15701BB16D633C2B6
+502F6566AA3869B9C94AB303617C3787C7CC6CBA808FE9C4E67725672D654E075657CD646E26A5
+82C68B47CE90C154A51CA289747585668A5A2D4D73D97E730FDA8F9B648B685B409A742AEAFAA2
+A818D0897970766B186FAB6836899A1091CD3B9503533334293ED15CF42143C13CE2D05A6EAA2E
+D1D12A3DAF28F9178B9448E4EC2A8FF6CADBFBEEE028AEC622D3CBA1118E92C98C4B303F8588A2
+3012067D2E1481E68B4ADCD6594737FB2206763B5023A0148BA31A165DE5384C63480CAF82E59C
+28A133A775A6E7E3A5A17CB8D9D6A3C9F3E638F67CE5D58926932DA3A9DEA6ED2CB7B5BBF07C6E
+CA417769D07B64A534906E5CB96DEC73E8093209CD2A85120F6E3216B5171B4BA67F2538785907
+BF3B8A912CD7E6362E528AC47FC14F2832924FB512259CCE6B650AC1730C5E531AA826D86CB8A9
+D9AD673294D4F1D3CFDF738BE5BC6C9401A164C6E7850794ED6587D592F44D409855639AB72C01
+6C55878BCBE20DEC3D4C15B0C0D47EEE44D6A4E91AA1C297D25A44378636BE4EB6517BD486DE12
+950F53AF60D94F28419AE67BC2316E26BA82ADA180577C6CE2A56FDF0C1EA9B9CA2EF55A95125F
+D667870226ED5D780A34EB34F468460EBFB8152024F200E40C6D42D5C5513E163C02B82C42FBF2
+E4433B60344D3EBEA637C78F734FF3321E743437F5AD1B92429B46ABBDE8E115AEE2904B3F3FE2
+369679466A59EC0433FDB261E8B2F227CEA66E4C57DF67F92284F0332A4F4E46431F282EF59975
+C430121C5E833A8174095118BCF0CEC899EBA8313C3690E85225F5212ECE4BB82902B0C662D78C
+37747BE77B81F47C24F088F5F94A18BA923E54DDF65B9DDF5E9D64E4D8B086BB808CA791A0E8DC
+2DBBA31CD58D21489EB64B11560AF93796A8E1E206DC7C15F4310FE985E47A929F76A6BC154FF4
+2C07B6F96E03F1D6BEB10A0E053C8C7DF0692929D1B62A3074DCAC64B1A6821FD25F6B434BB016
+E3CB58286848D04B8E743C400D477FA5F2130352AB8932CBFDFB9FB5C6C6A6EE9DDBA6DC41589A
+89D5F223DEBECC40BBFE5CB5E5DA18A511450C6A679D10FBF99F6A391B11189B921246FDF6F552
+5083A1361F6B232E1F5A25F5E1D0DFDB1B812BA87143407C8ECABC78E5C7AA0531293AC7909A8F
+7E27C5A87099723739C93CC4F955995D664D4D043D5F4B27028D336A03313A6BFD8A4E1F4023DE
+1AA5A0F7EFAAC52FF9378BB890ED9B29F50DBBB920676A54FDAD07963E2846D3733B7417BA5334
+5F57F1372E89F4020DC6A0AB9035328B0DF0DF71110C2A452D2702488A229B54FEE6845814C21F
+764007C8E119CF84454F608C91E1797DB85D9B8210BA1F7A7CD12B2A8AD55DAA18CF2042F4857E
+D37C2ACDB63984DABCCC6BDF6A119C464C7D6EC30CB2E4620948B1B7BEA3A2DD88B15EFA953B3B
+69C2A624A0CAEAEF17915ED4389D1217080B7F7D91887E055A86A6B287490DAD12D6165A0243A7
+A64587BD329E130F8E522D6570E59A33595672C7110FA2B8DDA2EC48F45671492804DAE5DB40A5
+42E21C27D2A5F2C37F00E871C3087613F11C6249EB926A0463D0486C5D5919A0A6A556D27A6AC6
+0E6065AE76BCCFCC3525732DF91F7C0F24A09A8C2053C231348BAEEB93395AD4DF4AF7A99DB0CA
+9CB512D3D71496A74CD776A68E38B90673300A297F6A244CCD0341112F42CB9955DA3980C15BD9
+68A2B0DDACE0A835ECCEF41E8CF4EDCB493B59882F812BC4D85694E508FC0CAA2AFDE8C0B21F2E
+A861F1620F6D01DFAF25B3ED11A7753395F97FBCBBD1E3AECC00B5940A6651BBFAB3556F720081
+8AB5744975F71644FD46B060CF74147238B6ADC1E9FAFCBB3C2D2A3F92FD4C141C520978A992EF
+90B23EE6178602D2ADCD143E49C6BD72D24C3581F7F1A76E9122B4D8C9DFA3FA94D3CABE5F84DC
+BDD90ED86A2E6D8C63EF7177AE85AEDE1A594DBC3C249A7B108AFCC6C75A502EE3CA0E733808AE
+ED05CD0B95431DF8AFCBE86D9EA04971A1ADC6558B5B82E5BC3F98AF6DC4401B04A4D39335C7D8
+13DA80152ACDBF6498B99B3E314D18981340A1117D206368E4F2BE11F46911B33BD6FE35B0109E
+5B294F59D3F025FEA5C2834ACFF2BE105AB95BAF201BC50A4D98B85C970AF3E39E0B05D15DF28D
+0A18E82FCC16D85BAC813A9501A10F4CDFD022905FA5B10C8763361BFC4CB0FCE8654062C0002D
+AADE193096D10973533795666EEE0AE8B7BC76D60B1713769DAB8AEAFE36A6E6786DCF15A1A890
+7C4DF6D252A5CCE68B28B6F564060A53FCC5E39E97FF61DCDA09DB31BAC530C8F5B999B1FC4E36
+A2906088897488081D74802A693DED16DCF651F62C15EDD2BC721619F848EBDCF226DFC535A526
+C3247E225CB344AAAFE6A954E89B8330A9F5B05961B5A7D362CCD2268D993EDCEBFD46C2944C91
+7F004CD27CAC0F142366D8F2419CA77C36770355CAB1C3BBAEDBD7F4D0150C4BEA551AAE4CF898
+E5962B6579F5B13A3CAD2EC25AD7AA6015D07028BE165BD40F27A9B33FD805B8F42326CF94589B
+29249E4859A8D0F306E3BCB3A7EC3298904B0CC87E913B90149C765A43CC39144D523D6B26A509
+E00236093EE99B3513AC69DC5A2941F1E48A71B213559621E5BE6A641D943FE3A13FFD796F2BB1
+A6C452A24E4B9864FBD9A9B5331DFBC5DCAAFF5EC6232F15E9412BC2230E8394F5C0F92244FE91
+8043D83E3790475F6B35673F695244CB303D708E8E92731C657D81C7A28EB491FD849179BD0886
+E72E47F1B4C34B465B4B0A212D57DD804C7CDF5814B1E6B87C9ACB9C74E1EAD3C4B8889EA4F25A
+0CE27AF6F91593F0DA3F55C15C9EC3CDA8D6BEB60FA0D8CFDD2C34C1B0143C36A80B3F77E9E4CA
+CD42068746943063788129B9B10DD969706035C3FB7971E9A56EF6FB3A0B4ADD1D977E014E1417
+ED81B819435C8D8002AF809C6A252FCF5F17BFBC747BB7E604C9328F353016B85A69F468164401
+67563700E8EF94313BBFCEC58B3FA6C89C0F79AAA61537DCE0B489ADF40540989FB040E2FFC535
+0B85D9C011A94B7A806482E02C1038F47D392BE62F7A192CA4659D8F0A17F1D53DBE33A6749125
+CB64549F2DF8FC0283E48713E166A6401D1DB6193DA6F4DFA2AA7430EBFDE3DB993A6C8B58132F
+3D57AB5E466566ABB13D5C29BA2262F3F6F574D275CDCD653E1F8F824F516B1C688CE97C14FF3E
+BAB81F8FBF0A6F64648BBE7F5AD5C331614E5CFF13CEA871D865F4F788E4ADE8984BD939AB33E5
+17121276461DD3125F3B56CA87900CB449B6497FA6D4F5FB859038374D5BE0AD2A34B1ACC9479D
+5530AE8EF469891C174F8860837F7A22F72590CB8309079CDE324BC60787EC690F901A69FAE187
+2B6D4D4576F06F5CC37495D0C72A45AD47D2F6CD216FAE7981E4859B5845FBCFCB61829A6BC8A8
+E7A9A0F53C020767B5AABE20CFBF2504BE5BC7D32DE9B56BB1F0C48330635D3E72E4913CB1BE01
+28C6BD47FEBED891A3FAD8BBD5F916B466E974F9CB2B3129B29DF1F5FBC7B2BF2AB8B2769C12E0
+435ED3208EB20E9657200806391492BB1E5899EE594DDAD170A0A61BB6A1D0581D685C80CC2F9C
+5E5AF62ADFAB656A33D22F7A572FD25DEBBFEC4B36242F8D77D18A0CBDE2FA03CB8E9394B9CD88
+D63CAB57E79081650E58E4BCD0E5A878CE4621251A287C64035BBEAA80881D504C75032F89280B
+FBFC4991241167BEBA653AF5EAE9B1A3280A58B9C4C59B2FC47659FD1F42D37DB5470E46D2ACB5
+62A1D0DA3F4EC9DBEC40635018A141152BDC88F33E79C6DA6DD616BF689E052C0464B62A1E61A3
+E58CC805DEE666FE4B4F0096D6D682384A2E95FFD0B542AEF848E1B54056BAEECE36F0C62099F0
+4E0AEBC007352614E0349A18A2614FD3998C9907BBDB681C74DC3A24E5C002EB64AEFF55CB6EDB
+44CA80E99DF02F8A7B1016824AD38FE7264BDAC41E848CC7B7B38B0C50FE417455BE9AE00F0F8F
+79B0A5F492C89CDD1D18F6FAC750437A96608C131AAF7A9C5BC0D3110CCBC25B19C7F1E3906C27
+8935A398909D2EE97723CE0207E9CB29807CB9F8ADFA813900D190DD0CC8E3CA457E8CD392441B
+B800B2B30D034ED66518D487F4F3C33DE3FAC0F88D9A6A597379C2500A6954EF80302912AC116A
+74A520C2E40AAC299B78F63879F31E2A8429B13DAF83428B12DB5AEEE33E1150A0FF4174DCCBF3
+9610D0BB68DDEE4AC044123B208F3D37A5CA6A646DBB821975DA03DEDBC42714949104033A4C31
+0FE6BF0B70F922EFF8C51CA42B1CE7FC496B43E2DDB4B20AE6373972105DFA5843E9A64F63342E
+36B154E1575BA26998878A96CBC9A34B2E07188D6E1E8E69FA557DB604BCFFAE3675E237D97F5D
+EF4C8D2257AD409B239F1D9519F9B718C27B998D69EC2B5321F97AFEDD8F7466E64F45A0843594
+7B35221BDF77146E4E33F08935C37F0FFD44D506D8382536365FB3972C455A6EAF0761A03A85EC
+EC2E8D0FD1FBF0BD829F18874C7C25D8F0ED087F9859136919DD52AC3AE08A7D848E5EB11CEB54
+2BF71B537DFA59D6E081574AF536813DF6D9B8B31B83BFD52DDEC2D7D833621EE2608619F0A61F
+CAFF7EC32F2B0727B24937644F40DE81F6D86FC17A3417392B04448A5EC54C0B0BB1B60F38767A
+508ECB5B30113246F3A3066310BE7A115CD9D35EF4133A4110B10D62EF3077CBBC8A3C64E5566C
+19BBA49AD10E1D5D11BD5A31DC8ED59EE62CC19143533502D580237950FE90B7ED3803F662A522
+A3DF2BD026CEAE7D614EB0EB2D29681934DCF9AB2E6124A18FEFA62F2F478B87E2764C59C2EFF8
+946D326860363543F0392CB582F6AB173AF2FF031E77C939597381F724D242E49D323CF0BD1023
+74B67D028C331B64DB4642946C72E82092A4890A5491130E312ED47DCB238161CFCF412BF7738E
+81B3AABB3CA492B716F92BC684615519BB513526C06FD5BAB6F196807D675DA47A7AD0216B7BB1
+35C9EFBA46313A9A7D3E40A5B7E6436114846D1032A163305534DDD10DFBBABB912B1E18882A47
+5154FD2A0FB33F1E4AA97827FAAD01CD51F62E492AFCF3B870B5B90AF7CE345F99D07F134A790D
+312A7FF00B01DF37741A5E2B98DC2CCEE6BAB34978374CF1CE2F83F03ABA437790E0BA33A0124C
+2C8F4A13F3F0D00383141A952242B2129A0B96A45B1CC13255B3118991293700BDDB4E29BC913D
+0A3B44D9E5F7FCE6D153EF4FF3824FA229F841EF6DE46E113C9B602A298868AFDD1825CEB017DD
+D59F67ABD724D8ECC9261BF90C413BB4818D060CE5FE0B0EA9CBB65850E5FA181E9713FDA06800
+FFE7C53D9EB62B222ABD8E12EB6E149CCA7713C5639ED530A30DD12D69E271782458E53CC14DB7
+5B053E7D61DE9E231A78C2391DC18EE092A5F76CD61AE5B7894B78CD378E0FBF8056701D4990DE
+1EF0F36E918D98CD907F624E654836F18A579C7BFB23DE3AA9D59229C3FB1A4B857D9EFBD289AD
+0FFC27B6EB42148E7AF8A802C99B14ACE59B52A111DBEC97EC5BFB0F970C9B27AD6231D66F1744
+74207E935CD40B5D3787D85B46D4C33AFF9DD5029A0172118C624DA5307F9FA33C256FDA460479
+205650A52F5591A14027695126E5AE946A7BAF34835CAC37560EA030B3DD2B06A6DFFA0D02F634
+E344CDB5260D84FC6338DAD799DAF44C46E4C4DA1854160E76FBCC0916A3EBDE474E358E9E8B32
+8F1223DF95A0F1F8CCF619FBA607F0276C5373C293BC4C4D653893B83F3583D9BA549F8D229DB9
+44D7B4B835F97197608BEB526AFD58416980C3C8ACA1080C09797DA0A24B185C793636A15FB82C
+E003906B613CA3D16DF1D7C51033480123FCED0205AE45BE3DBD332DB88D0BDCBB4DB845AC13A4
+215B94ECFFA4D4E88B4BC5093770D5DB8FD7B87E8E4FA0E58F651270701EE92A3B287644F56B40
+97237BAD7453C25D29B293ACDD4A295284480A3E19DD134E77498E16512ECB44D77EB24D6C35EC
+4586D9B73B2F60FA1F758FA86378485C37D595ECE1B0FD80D64CEE30B7F5A51A724E72E18A9B22
+AECA8129067304660294A309E9797F8BBE2402581F43D8636648EE6675C4D30A8B50DFE587FC41
+E5C04B4430C58AD44F57C8F6AAFD4750AEAE51BD4715838D8BFE522C6F17ACAE809C3C39F50D72
+CBADA2547CD9D0DE80980C53D9ED68E73214037B8A8E365BB3DDF7350A2D1B9AF3ED802436D1EC
+75C60C3617995E3AB7B8469915D80285E99BEAB6BB88A9B5A388D7D7CB950E7DBC168885FC5173
+4FAD3CABD91109104F52525316943C6E16ACD17CAE128D81C0D98357B0B806ACB460A5E7F5F7B2
+385060402CAE0CDAF70188977249C809CD4C6B133ED8447B926E1A30D4FCD0968FD3FD45B50F6E
+BA94E72E87D4BC7ADA4DCC3D6DA0F31517EA9DD89F6751F707980CA84CF406F7A786AD8E4377D7
+5506A96F7293999800C1A59CD813F18398A4094D7426E250BD21F87DC58C094BC00A567541BDE3
+D17E1BB01C4AAD986D1E79CC4B29234A28A6A323C0FB98B530012E523AFDA4915851952149B238
+CCA18B8F974BAF6CCB738D05B6BB1FCB0825FC1920C4E3AE8A1DB3B7C02991A543AFC9D38DDC1A
+563793DEC85BF313F6CC40A1C8BBC09580E54EA3CF1E399F8EDB969290A3203D86D67327E567F8
+ED390542AABB07A0DA177C3C6B44F5BFBEFB181DBCD1753C6712A6D7835A64B36922173FEEAE67
+735FB82A09CBF309246D104DF7B14AD6A6A87DF431004EE72FE7887929F4DB593B0A113F176409
+E69892A4EC6CF250F984F2CC2904C788FC7FB9B164B7C3AAF3B9BF5EB17108C52EED49E5E43D16
+F94ABBF85F784008958557FF8DA38DC55BB43D6F8671BD2764A9F276C2A039FE5179D23455BD55
+539DEA38921C66C7E19EE407CFA868E9CEC0694D756EBD5B9EBDFE6D18D5E9E33433C886B24CA0
+B0F131746FA8FFD23D427828A4998D0776549AB2B4F5B610F07AED694655A7152740A275DE60AC
+BD7811F31203F32D071761E74D0B34BBD8158DC1282ED895F803B7FD689D429C9A2C32B30E098A
+A790D6247386B89F03310DE4665C3AE77665D885E456B655846956CA33E3A702F79A9695CE7510
+329536FB24143DB109D0E858CB20B3056078F0C151419BF06BBB871F925ECC7B4131E54A935645
+D4E00EF0EA720ED493E6731508EFF11B81D9A4DDDBBAC935DFDD1B798BA0E34B0D5695233933E7
+8C0C9C1DAB44C7BEE45543C3C310C452FCE97964D2B635C5433318FA367D20DDB9DC8CDCEFE0B1
+1DDBBA2D7A7010375EE581C7FFE97F89BB91E3FF1624F0EF5FE27CF9A027BC8D1939F91D88A873
+5861127EB0CFD88300D3B821DDE0B54B62762466790A949B2DB6372C75732E87F54CE4F05325D2
+0643A2F8388DE10E1C4CBFDA85A70F7551CC8A8F088FD46483446E0BE03BDE1B5F2B23D9B99EEF
+D4641BD0EE2AE3310B0CC0AE418D0C6797840CC5BFC4F54F0D6AF8DC1AAF3DF297D3955ABAC771
+214ED10BC9E88A4CEFBE6E07EDF9F7A2F52C144086C13071F24CE826D468098707090EBC28BBCE
+12E0AED14488B547A70EB783D97C98CEBF55858B924F0DB6754B3CF833EBB5EC487046A6C3BAE3
+AF59F61B699782A6109E0D7544846F4383C849A917ED1750A8F5813F552C231A3E5954F57C8EF4
+D02BC790A6DC865F77B78D920D274C2276F9DE3887540C460B1A6029419B9EE6B88FE29204CD4F
+62321824A8B72FEF463400CA6A83C2CF8E161C76058CEBB021216ED92B4D889A9CEAE5619E0CE7
+DE0B6927577AF0DC385FDD45EB6F116778E91BC1EBB2B6027FC5D39F8A233D27BF581DB38D31F4
+20AF47E77AFC2D67A7FE90A10F0D6AF0816BEB7CE905FF00E5C2DA7CEC75EFC3A170495999AFCB
+7A9781375C03C495FC9CDD90F9783CFF0926D795F155CE64AF0817726FCBE7BFF6566FA1A1DED6
+D4D6C2395E7DC3DDE9484A2FFFE1C67EDD9D8741E17D526079ADA966C5F17105235C7A5E09B82D
+1752B97568029925A6E25DD461063227613F02B66AC5DDE9B4018E253263CFB3EEB717BCE0F8FD
+36B0EDF5D82D2DB2DF28F72B13D148F741379D7C31443DD9C452B3F5A8889C93F15957064DA4C8
+BD8D3032D94A3133695934D299CA4303797B6A49932A1B672A72DDE67106E2BE984CE7E6BAAD36
+396AE3EBAFBC268105DCC191E2773ACCBD92A3D32EAF57721C0EF3E34744AE1ADFD9C56669A08C
+C7E95C1908D43B569D82CFD4CBD7A41D841D10C107E00CE93F033C7449B78660FBF82D157601F6
+A9C721C3FC1264A86363B5A151F63C8B646E2D7E5D44C3DD46CBAE571FF53A9F4064540768148C
+B69B9752D1E99EACDE8BD201373708BF20C689BDE479A0D11DEDA4243E6D0ECD265294C079C7BF
+427F12C737CE72238894FAF3571DC588143F2C86EABF4512C63672D5211514D72120ED97AE70E2
+FE4291903259BA3521EF94C9D13C5A614AAC9BF14514761F5D3678F4F96DD8B0A20AC00EBB9A43
+235A571280B34341E5761EEA38808C7485C6B9D15B72BA4A0281A517FD2E5E660EF9EB5BEEBD43
+2D537F8E3E2FD2BC8D221CB3C6E578B1627EF869CAE922CC154B38D2239A7FBC8D85727C1D533D
+C71E873CF062F0DB2AD29763A482B6A601EFCC9BF9214E9B270BD9633BAD41C2308A02B94E860E
+9B74808796488497C3658F3F33CC29EB099CE42B134AB7A5E168013C64F056375DC95FFFCE9AAA
+7813C498FF43DDA22D5186F6E7B3AAEA39A72A5C0EEB95A0CB79539FF14FD409F7D357FB06629C
+D99C5F277996778C7FD19E776CDC015FB37A29AABFF21ACF0BB36A0F8F7D6758F4AFA31FE61F95
+10905BE91866BCF1B92CC5638BF90CEDE72FB7F46FB1892F4F4E965DE76D6162C515195A39FBF5
+1A7299F01D20021720B8046FF10A5D5185B217BE8B62874281AF2007EAEA8C41911DB195B8C3E1
+BF0E466CE3F398A111A03958BAF0707BBF153C1E4F966E4645795126C6912828923BB3952C5099
+C0FF6855AFAB944B776511C96B77A9E0459FC52749F0AD982077A227792126507426736F2965AC
+BEDCD7938A0E27351E5CBBEC3E331BC2568679E1823DBDCFDE6E46E999604924084D583696F05E
+D161CF7CAE7A56A31A7EB0BDF8F5883A5825597227619EE45655F15CADDD3100604877F7221866
+A27520BA9F4C72A5B7A1B45549C599BECDA8D24BF7504ED6032981AD5EB25E7DCEF6B0E7295F01
+0C881F0B0B28C39CBF0708B8F96AFF3A0193AED2DFD8AC7E6F4D85F2EE21971A670C010857737D
+4D3C1CC4D1EA8FEEA7756D34FA95B2BE2A27E5864A4183F75861F2EA00D050F04D6C48113EDD40
+75A78C5C64E41B437AB8FD6E12C5A25ECA76816702CEEC2B3FE8DE398A130CC49330BDEFB0D76D
+047E035448A59484D48D18EFC534328A8556858D4B45CC05377B8140598AFA383939E4A7F73561
+68C7B016D012C37B405D4523A1DB884F005A2572A039847C7C065B8B92DDC9BC1E803692A39CC0
+0A49CDF0AD24168154D03BFD56E1EADFE29E556B52FD11CF838378E4E4FEAD5243456648DBED06
+2A47FA57542E137A9E035569D068F08E43DC4031D85925DEC164FF91F8C207692E8DADBAED305D
+D38FB4952C61F50F9E4E4CBDE408A16801732F3EFD6F2D600CFAD6F691BD36279AD251D991F24D
+18DA3168749E8469A9A39F2106B98701956F265C3DA4081278A3366118DAC644DD5B4B5DBCF7B6
+EF6AB84D9C41350B18320C0FFEE0B5C26AEAE1A6028093337FDB82EC40105175175CC19A7884A0
+B07DC34C349177DD4BCDC16323E36197073F1D6447BAA0A45F0DE7453E6891AF0FE2D21C26D9BE
+37454F2F83F6E974DFBB014511275360A9FDBF6CB77510C92A45C0C1FF6A004F854FDD323CA4EA
+45EF334B4BD189F1131FFA7B4C7FBE315DD788FF2D89DC3804ACC9D689816A22E39BA45AA98AAD
+6971FFD22B5CF38794385EA00AE18FEA562E0AD2688CF6176E1FF4CF8910ABE1C4E98F59750C26
+9858AD2B32E717C29D97878953F729AE13B3403F997593542639DEEACE7BB88D45B6C4FCDBBAFA
+3B18BC0F085B25A87B16BBD084EE088FDBF6D62F4E65052E374F2DC012DF690E23C6A00A5E8760
+B2B2A213FA8D0B31E08070741FD2D8752274CD71B1CF566890113EA34518457B1778DC1CA38345
+78502A62CF4CF563252B3ECF554D477283CBE6AA7A434A279AB71B2CF20765F5B197592C681FE4
+6ABC6115B49D776B1CD457A3335FB3B61B4258EB77327688686072B7906B2D8016C5FB12A626D7
+E8B2590CDF574F3A410D75FDECE4BE7DDBAD69EDA08F44B73D6F7C92B97C67201FA2AD698D058C
+EB7AE6C88B699207669D68FAEBAC5E75905B9688707B199F516E944056C2CBE773CC95BCE59D82
+AA93DF52227D477CC2345EA8F1A2CB96A00D186F3A02C30FC0330EDACC404ABCCE86F0462784B9
+7C1F55A03C4ED89C79C0BD3A0AF3B19259963CE966F654D7D4EF9B9093B27526E5C09A084F3C9F
+DDF3C8F261A5720DFEE14B6B198D8F0CEA0CCCC7B70CE185F0B65B0B4E5CE79898A8E3DBEBF65E
+A2A7F82EFD92AA7EB65AABAC5A3CEE49070E78D5C591409756EB4A706DE5192D13083C4A10BBCE
+3A818990406945A4036CAB65E3F53A54E6992866E130F01DBADC1F15751256DFCB408DCC671CA0
+731A01A6457CB40B4A04BBB0BF77C8B655ABD484705AD31CBB88CDDC3C599B35B86D3C4BB8B8E6
+7751A095E43C9B9228C58A920E48D679DEAA88DEEC58F7B5573DE4D7C7288BA9F0A5899D1E6588
+557ECAA123CF7D504406BB03F580FE02A2E88FA32F9A824B5A895CE8EB1BC271FF2702FA463454
+717D37672DF5C7F78561F889EB0E57984A96E1430B26E27BAEFFA17AAB5FB94A890AF8FB57AEF2
+4FE880121E0B31708F1AE9B09DBE64B26A5EBFBE42A4BBC0C3ADEC0A14CF7496AA53263D4889B0
+929645EC2B8C5144A4D76FDEDE6345B1407F990C5D7644B21C0D827AEA7D4E8D4D17311099A703
+689B2F68A9EFE15696C589BC02FAC8F5CD6FF68964EB222EE012E28A490614BA93405E4F2798EA
+0E8A8B5EED8D7C554737ECD26CCFF16F50C8AF2373E8688DCC297269C2836E4FED50EABA465EF6
+908DF9F55DA80A501E0165DBEE8E3F9FCE4F6B9C31AD5505E71AD3D7FFE6EAA9D764B965FC163A
+B0ABF7DFEE391546EB78C79466886C7393D4036FA247E9C4DEC84FE72D4B5AFC6D7FE58714C70A
+AC3799C4B419D3701267915677FBD571073B70D68F141651A59ABF8B6483E216F90117879A34CA
+43BFA857B831DFE321C2FAFB887131B607D2B9AE7F0290705C254716161DB40AA383006A8B74A5
+767DEDEF5D60711B5A9E45D63A6EBDB15740AA04BAAE078FAD7FDCB9D26AE3DBB66ECBD9D7E641
+D064B881BF5190FB31EECBF3659036FC145D8BF0DFB325A78F0B3723ED8DD2A967BF916A90A92C
+32292F3330D3F1FA1F31CD6AF9373D12A1EDFA00EE7A4859BB6F6D4D6F6F7F944ACDE744E3D6DD
+CD646F83539F983B1C70BD94E1FF6CD3E072F06DF4193676388C95A3E4E3D07ECD40FB6928AC52
+CBCCF63B71B47DF4567E19E0840D6452494EC3883F6144E5791853B0EBF93D6DDDF15B3C8AA14D
+8A20E191DE9ABEB1ADF7B19B3B688961F0B86E215451E4DD52BA655B00D1495BF08660AA5CE7F7
+134698F4C73B97103D1074220946455466FDC08FFC63A1C97D60E0B931E94A6A559BAF54574696
+D5F5460FB18B3213144F42F1AA8D5FEC8361A6E401A82454C897403E82DEED2B65E6E50CC603DC
+34BEF5E2EF0F2FC24421E5DF012640D1C6E5C87F2CC8A3997362E27463CE29C903A5B32863321C
+55B8540DC3DDAB6892FF114F3EF72647A3525119AED1A65DBC779358C5AF9F3AEDB5AE85085CF8
+9F55C71EE44D229C122DE658C83290BD82FC39F044163EB56F841A9E568D50493B535837415A12
+7D618BE80156E1AF95AC39BE234ACA11CFE3744A8AF714724C04359EC8729BBEA07EB8908FC41D
+4E5D045D2261A9E20C66A161F98584A2FD1AA56473A0287082ABF956B6F34C0AC3D6139C00020C
+A13C7CDC60F1F1778CAB99930BF104139967B728C75120BB7FC3625513C7F992CAE757EEAC275B
+7172522F0E178F4EB6F862080D0494FCC5F159DA45FEDD5C7A19064BF1EC59531E973A9846C5A2
+F8BD12B34B0152021D6C41F7226BE7DD8876AEFE003A4DD181EC983284F8855F9535318246A668
+196BACDC3A71CCBB1BDA4547168F0624CB896CF96E7629EC8D1BD11530E5E8D5568D77D9DCAC00
+ADB7021BD4BF6FC3E1F178C51E67781337D7D3AC1A09ECA650B8278FF569501CBB021B2C8C9ED1
+C9A23380D3CA67ED0E27A41929FD835DB776103C8CBE4498470C2ADA09AAD19EA5D781C3D5132E
+8C343AFC91E36ABD78327AF6A4F589F146E702BBF6A6C3EA6F720B5052FA18E4BCCDD1A7B8C7A0
+E654A9883396E6442EDCF3ECB05C55B0895C130ECD3B9544A3FAEB5ADA3F5CE8C5FF342D2DA291
+2E9FA59276DB5418BC5B065FCE1ABD42FF3238894BF00C86C52030258449D995943259F600B1BB
+8F63809E2D84425DB00AF60E9E8AE791E5ACB6D3E5C7FC9023144DF022F86FFFB37D30899ED2D9
+FA1A5CA5E442170A2BF817985767EEA87C4F57B8E19681F607EBAA22860C8C549738FE95D85F4D
+2027CF0F99F31985FC568EAF856FFFC056B118EAAF09E8982C0DFE550FDD8652F3D94CA70DE411
+00C17F820E4A7A2217619B20FC0303AF62BFF042764382147169272BE9769043C3D41F9A246A01
+C4C63FC7DC2FD62306EE813196D620F584B007BCA0286A39E296B210F64F684CFB2F9CCCA5B74E
+950D35A1F18B19A26940674DF66392255091A6A6ECE640DD8142F5CBEF4A7810FD8175C9833539
+A34A911E0BDF64DBFFC534EE22CA6229D62B7A95DCACC46D3989BCC85749B248523AD44ABFE05B
+E796126E6745E1DD1653FB938612FCF0C877566CA9F686823F4D069234EC7E3826D0080C32615A
+88423A09651A9F3EE6A9DCC95646FB0E7E24C7C3372C6D6CDF1375CB4EB1440FE95C5C7FE435B7
+290E78ABCC143A9C015B410A8555271833A466D49AC0611340731580BD29F73A2DCDBCBAA6E07B
+643DCF9B18613A6652B655A2167CBB1CCB0FA71534BB0759873FF5B4CDEE677AFA1059E1F4519E
+EFC1BEF079A9C04D13842F516B096D3D281533502C4023E13C25C59C662340A45B6874B5C9F08A
+08BE03B7C35FE00ED31BBFC5119463F2FB1165D22F117A04F27FCB5F0949BFAD0E882703755454
+B629821B7EB4B048FBBC21E1390620EDFDE83B894FFB434632EB7B4B21647D4C9660E7213902E3
+E2B6AF6181D797F2551513F3529E6C7679712CBF72F2437CD4685E117AD8C2D61A28132170427D
+398392C7A27EBA6C244C6BD7700969004D52395FFCE11000B07A7093714F781E353BBC152F2EA5
+B275818DA2E9FD5C04F63B23EF722257EAB81FB2AB97C5B8BF455B2AFE648C895A6D38BE154683
+831704144F5D8FD68BBC0A96165E27F262804140E34A7C7361CDCDD5F14BA4A45EB7BDFFFF91BD
+7429BFC9775BAD532BD4DAB6F7FFE85CBD60FA6D0B138CE116058504803D0F449ACA8C380A7829
+A0ED3623A5EE64BB34A345A8720C7B57B1A7C18560A5E56A5DC8C553B58A73762FB04036217CD6
+081F8227F61556BE59FF02C0DEA3639D44A6C3C97F921CA96752FB9B9D28597873AE2AE2C38D46
+A2AF40DBC3DB23A297503A5579998B0DB6B93D1AA1ED3BF5BCC480D0CD9688135FDD40A3E487B9
+A4005AAED374C2E9E036BAAB288AC862726F3FAB60D38B5BB135799A3BE5F4470903445D3A66C8
+24256158426369C70439148F4701DDC2F6F6F77559DE968F0305C42B43E665F7E8DCC6D72F055F
+038616F9C030A9AF1A06E6036E72640D11962CD4A622A9DCD07C8EBAF060BEB846F25C1ED28835
+C28059C5C1FD4987CDBAC09780B5AC782964DBBEC7F776B5DB51B44E3817BFF658D2DC37C4291F
+E1778D7B964E22AFC5EDDBB03538567378B7F62E806422EAD35C9F6F82046E7E79BFD6FAF3E7E0
+A52C63DD5E8C0A838B3969022987DCB7377E15BAC7B1525EA24C666E0C69508881C204BB515233
+C9B6FFB3F0B4EE37D12EDE6E192B1A17A7F6699FD6C1E87F03C2D8AC0B9DEC767234A2E7C32016
+D3AD9A8015F489BEDA95EC6400EA9DB2CB8626FA253A718FF13FF0E013A172E06C3E5591C15715
+C60C30795CAAAB098B52CE441EB71F2063ABBE3DD3558B7F07DB17F49C24A7861589ECD8E825EC
+797ABE3521B5924F53045230CF94C34F5BD6F197E008F3BC38401B3AA6BAA7EFF54F1F926677CC
+FC0E77D5EA05B218213737DB84C21AA724E05F37896667FA8EF4E3899727DDD936BE2F8E64ADBA
+CA74032C2FF23805D1E6029E7B305F0CD7259865D7271444A5886B5C76CE0DF62429164E844F2E
+95880B6BECDBB0BD005229964442A20AE582DF5F3735885E217E4C399535B965047A892BE0985F
+6C1EA35B95457414038746316BC93CF4C776AA50650E617A6F0DCC586D3F4CBC19F6043DD04915
+F0CE9EA31EFF2F8D36268A044EF15BCA63FC5AE91D7DB0879FE5AA9A3D51BDA3160658ECEFC447
+CD2C9A848D1DB4BB48D277EC154B52297EBD188B2B7ABA0E4B840831E1B9B647AF654E1BB08D0A
+64446A3BB49FB7F19E8FD8E9084C8B8C93924EFDFD9A9458A4F3B4F1D948B123681DEE542CA97D
+6A5857A3E47622A6C6B2EC09768705223894BD7867242D819277C5DB24DCCE8DA6062199482923
+4F17F56BB1A0C2A2E099BEAA6D94942AF9706FA6A1D0C67560BD1E3861F8FFD465CE6C48AEC2C1
+F762BFD3D4A68B8B25D0FFAE02376B34DC1BAD9B39DAD6FAB6491002A1E6796BE978DC1DC62EA3
+9D708671DC9CFE4F757CCCE4DD7F1B0ED59EBF5EF3DCE61C4AA16DD6411B68E8A9CE4FF6AD85E6
+F98CE16CE25A8405801669678204CDB7305BD7A29469C539BE2348B8AC412DC95EACA3012D3D96
+A3BA334FF4E16EDB9115B83AFD66192142423BDA32D8A76277A763C373217BE75370C5813FD53D
+E7DCE0807C087DDE87E029F0211CA9F1B1A67E72D7922388A6C84B3C6E3D44B192B0B7588A7DED
+100C04F87780F070DDFEF41C90EFC0E0BB8F3692F7D360BA180E1D4579FC1AC671454E413A8613
+F40F9CDA8AEFEC06CE40F1DF6FAEBFAEB57AAF73898F869C6BD165B9A3A60C5942A48292B5805E
+01897F3DC17253668A774D13E23C5D5D90BB6B8F60E89875B353A8FE0D03ECEC140EBB2B3BE613
+907F32DE8F445CFDC60272E5EBC753BC2ED4CBEC34588879870277190FCFBEAAA6D81759C2CE36
+6CE0EED2B8915F93BD1ABBA0613DD9E2EE93633EF81F4B36C29F4A24847104ACEC56CA46416884
+462AE9C21D1A21D20125B71DC52D38989FBAF0A0A6EC1068E7C963B2B6894326A5E70AE420214F
+EDAB638988110066D741B301760451CEA275988C2270532D4A78712F28922011D564F12928B4BB
+9484657DC0F2378F07A139C75843624CE599A261AFC6192D58F89F36556AFE32531138FA46B505
+54898E65B82883BE97CC02B92B7C7D1979F799720345EE930BE3CBC3BA01CDC2311147AA768202
+A59BD84F601A5FBF6F882DA51E7644D7B734D89555FFDECED4BD2B14DB3D3C57E0403680796446
+3DC5C9D6427B591A00A82E2EE4DB81D533D52857A250E579F9C9D45109F06862E64564B5E18615
+4B6AFF5AA065792AAD0D38340C26A0B7C7E4DC7F054A850C0BA6EC8F66535E5CE1758160CF83B3
+CD1D0F7EFDA4B0D11E679C74386C2234505F7FB083578BE4D43C4922330EEFE114DAF7C58C0AB8
+7E4F6C6511A1B311FB9FC645FD7199015B5491584D2E135C573206A96EC49B6F0BD7428755A69C
+9D1DAE3978F70CF6F2B518C74B81908258509FC96282AAB0DEE885CD5D66B5A91BBBF74B08142A
+827DA25A4F0FBC4E1BDB4952556B04F32DB3A8CE6873DA2EE081E81DC1D3C429BD76E62986CCBE
+D21F956E4F45F869E0E00FBFD1B17011439E6E0196C8A7726A96186634E51951B5DC1CC4F96850
+9AF5DB930D892EA290C70EDCC65DD905D6AF9221AF3C6EE64E01FC3A37EB358A759DDE53CDDC74
+B6937F1DA36B00174481A40AD8B6E9BA2F9BA1A15D80C560BF4A3CAB972DD12B2890C3BDEB06EB
+FE05BAB7E2BCDAFC641643B67D553AD78D5CC498B43A458C06E9A428307498EB76BD7096F2DEBD
+2905AB09BC0E748239D90663C26A3FAA9347C32D44BEEA2DDECCA24825DD2A154E8A82282F4122
+96D11C6E0CA8F28CCD52A3E0A9B442838BD6FE90A931C8A462A97759CC9EE21B47C44B2032E5B4
+083750CA3483E688F67FBE91EAC9199D49963060712314618A725457FB71945C535BCD330A9D8D
+850EA0EB723BE0A00F2C3A8E6C80660F59A84DE34A52F00725C945521ACFFFCE8FA1CBC2CA9F9C
+C98AB2987C636CFB83DB46B4B3A7F1CF4EECF6E08A3B94229B54CB34272829C4BC264E303DFA2B
+170D5E7A66A7EE3C463502D5425AB0739F1DFF5FE9B751975E4379569580B641C7296DFEA54E7A
+99A9478583A0D8DE565575DB2CD00B35D2BF82A5597F4134CD3F7A201C80DA9AF49EB8D9D049C2
+5869843331F140753DAAF303592715A35751B4597F458F5BD9A894D8E2173E03C85853515E3D71
+CDB51E7000279E462386A1DBAC817073DDD29CB89F211CD5FCEB9657C107041E605DDBBB7275F8
+B084FBB48A233D826F9D3079F56BEA088092B8156B4C38ECCBAE22EDF9135E5E2DE147EAF1D562
+2735F9FC9C5124149AEE31FD4B35CBBD848E81605EF9B89C0E116E4394195122D3F5D28A60CCD3
+19A85D7EF24CFEA5AA946B8EE737786DFD5A6B2C1100F3F2DCABDEBC012CBC19AD314198536720
+37233DA6D3B6AB83458179190D11FC866BD3343C9CB85381BBFE2226D612BCE91D13226F4AA348
+C48D5F05D927518E5587BF7EEAE0B2E40F6D2F5847B25832970681DCDDE5A3DAB4E305DC7CCF1D
+817F07975F4575D97355347E3AA2DA7A8B230B81673ABF1052EEE2F524D5330975E811FC32AF0F
+E8538EF37B67EDE2F2D521F45AEE885D379835E820C8EFFDDD7E3E381BF267E32E9E6DC40A1D36
+D0068A698B970C492B79D5AE4C645286631FF56704053F81474FD546FC9498CDE9176F7483F9F1
+7FF8654B0EAFC6352FF7070D969C8F7005389B7F465EF1B6C0A1329A2B18F577586CF4B9427D48
+886B0AC61575474C87A37340B7EFC0090F3E489505EF51BA12B1394144F3895AABC6916DFA5C6A
+4E8D07D3E351853A2E0370688E5E6000F5B751AFB8821C4C25DE80A9640ECC48B99E05C94E4932
+D120A4893E85CC91CDFB5A7218C972A482914E5401ACFE7BFF59B4D8D5E5F563AEAE5E34B052A7
+2ED5ED7854C32C20C933D68992DEAAD311F6DE5C03DD24B878F536560A2F43E5FC70452A39C7B0
+AE56A0A559607EDC991BE7F571857A7F55FEDC84C679B9BE89401F504805BDDCC9CAA625B2111B
+C4815AC79A78AAEA643466199721879697A341639ED003B5FA52331D3A2AE25D8F20EACCBAF791
+D62421A00937BFDDF444EB59D2F460AAFDF8BE9F82D5FD1D48F6712B908E5FA81345A567C18705
+6944C722C55A0D418ABB1BC622EEC5D416F6F52BC188DD51405215AD6B75B04DBF4BC6D85F0618
+FA111126E41351C3F7B0667F8FC08ED06342B2DB6201A1A63AB018B2FE5FD760366A9A420F56A6
+C61B835F9AB9F385A81430F867146C8B01784534CC959126389D1CAFE10E3AF40DBE594B6B9219
+8F50D9759E60519DE8AB4CC0224ED624A3AA9FC95AAFD676706448A9F05BF008095121314FD044
+A3A350ABFD1CCCD5EB18DBD2EA71C3DB2F37066021E39F4E77CB1B155D05CE1FA00C8A59FF39A3
+A16891235A599F95F9A62E6EE47839135A0750A2CB528F11EC47F0D4D3BA828501C9B76FDFE178
+21F11814DEFDE3AB561ADA314060D7112BC8BF02E92793A3D864B83AEA78F8D49DF9AB07AC0762
+229534C0288FBC00662E53035A037B1C9745195CFAB54D22032A16E7AE0B971CAC5A67FF0EDE11
+E265B88805314BC7563CF177BABB367618A27734611D7B662DA407911EF2FEC47D74C482F7DF82
+3960081466CECBF4BA94FC5AC8C9F91AC151FB1ECB78BA5D5607A1D59D34C18C83000F8507AB1F
+1C44347FCA2BC27087A28F0F3B24BDD8E7A0DDCF782CBCED5DDA4565308E10062145895A9C437C
+CAED86458890311EDCDE2109233BF9ABCEF0535080D7C5A76D6E3BCE8210C7E89FB95E63CD8A76
+FEA978AF5000DFE7C0E659B902503758736C6DB295B9368EE50F5F8CF3E200456B5B2087219150
+294871F7B980800E59A5DE5973AB9ED52F7DBC7C433FD0E099D3E3EEF6DF7D77E40D1C8B34C117
+588ADBBD7A29AB4805A87C13CE93A65854DFDA87321ECF7D34E72C193365B632B455F8A2916BD1
+E63441A633D144C254E3FD89FE2884840146B4C992A07BE6A0FCEEB6AE9B0234D234645D73C064
+EAFEDA1EB7A9DE6661D31226A6F54BC9510DF6F64F7200CEC5EAF90357716E7C246D47C04E0906
+98C5F6AC446DC6107E6342FE8B746C0FFA058FBBCA0730CFB20A367ED10661670C1618A4D467DC
+2A7E87894DE0D5392B3F0DE6582901693C28568D2253D514A3FACD1B063B02A5F8A19C1D6DFBAE
+CC79435F694E914014DEFC5553A5984993154997E63768DD7BC462BDF6D1A8B28DF568B22FF460
+087163AEEC37F0BDDBBA4C30322AD71922AC802DD491207E6A6C255F50EEB0C492EC86AFED9040
+B068671FE4A1E66AF15D3D976C7267F3EEE19462487772087ABF36700B4821D2DB5193BBEFCE82
+BF67F7034972A708E93C55E0F7A52EAEE47E68FDC6F1BC49B9370F28DAE122D13CB2CBCB55933F
+A27291003E862FB0C7E20A0F979DFD8BA918322F6CD597809F9E05DD210F7996F314B65F54FD7B
+F453F15CCBEB2CD5E53535261E696EB73F2698D1159076D0EAE35FFB1FB53F98808ED2325B2CC7
+9D90772C15273EE50294AC931626EC573BED7CCE2D713328962528EE0F00FADB1C1ED8B302F24A
+40F9A22D1D6411EC669670ADF93C4C67D8520109FDE9F64CB0382842C88845267528F57AB7E408
+9EDE614E79799D08D3D01378AE9D42D7601D821C9C5BFB77EEFF37B634D2698BDC11CB60192B6B
+4FFDEE834EDEA99CCCB760D3E7548E6810FE300596C246AE56DCC6BA8132AE3779ECD5ECFA6963
+F9B5C4B9AD8B6C480BB184FE31EF0F8DD3ADAA96AFBFA250FCBFEB529239AD2A524B3C8AA1C2C2
+7ED016E8EE24B355BA84D1D0AC6AF00B0A230578609A3F09639D2CA7175710FE9D455A58A6982B
+7B7FCA52BB5490FBAA064D1C506C9598D88B5CB330C97F434BD1EF060ADC21B9F6ED9FB7A7E604
+20FA1B481881C73B1DEEDA0A7E197B8D38EEE68CD8D442D083772FE2BA1F1C07A57D5B67BD8230
+80BF438089A4D6C311D421F5F16C35B3207649CC0433AEE4987E3AB5698D55309B5F5C8B95332C
+77157E3309EDB4954613428AE9DA6686799ABCE483FCFA8C060F0614995E01FD14A6189AB61A0F
+7AC9465BE297F053E85AAD0EFD921502269D01FA6D5ADAD672F3D48C5D4EDEEA65E53E03A24AA9
+E78660AFF7942E7F23E3754582CB2976FB65997FF35582FF83FE9BF43CE5CA20AE5EB62CA819D9
+B63ABE39EA3A13AC163F64A55B4E840B12FEED5BF447E3CA1FD61E6FB51D6F7B3176F697491217
+306EC21CC462AEFA069C9432AFAFDE4D586D5EF8DD4E49882CD701C4F4FBDBF42E370AE7F332AB
+E22DDB2FA70D17B0E053BD6332A1B51840A6C18760A46EDB9C8933039C8B724FBA4C4D62B98876
+71F94505D1242067281063F91A7DE032FCE95DA4B54C32B46B762CC927667306101A7186DA78BB
+BFF306C62708B92D76D2225B1FACC18157268623387B5D80FF9E394E3DB68D5404AE3CAF3A8654
+7704EEE75E7BCBC9A96610D96E96C0CEC85785FC7D54BF035D0E03E6B1ACE9691D7DD71B607B9D
+C37DC020E9B5D4216AA991C5022AC52A4637FCA79DC21DC1FCBD5BA4B28B591F69CEFD0D99E35F
+C568550A5E11B32BD59BE83149B82FC840C99267AA84AF41FC56D1C4F7F6365B65DBED15163D55
+9A95630AF5005C7FEF23EE87208AAE88AB3CA22FEAF682088FB1F2F78027FDED141D161183FD67
+5E16ECE34A9664C1373C2793C35080519D0BBE2D9B98BEF67D2716B4036A25274B4370AD209164
+BEAC0BFFBCC3F6B2956AEF76143644485280FD50462B63F324A992F3A5B187321107BEC7A301C0
+4338312EA32DCABA2C13A6ADA387B668A45743B4D7C02F2BFFC69F49AFB429434EA529B04EB8B7
+4596D90FE74AE32F57CEC0433922B00236C189FFCD8A1FDD896CCC957DFA2EEABB23BD8E5A428F
+FDC06F4F75C3222DC161472687547B173F632D15BACE92A07A0A71DCCE2B8EB739EFFEA173E57C
+4DF651FA936221DABBDB3B8AE5C30D595C33DCFC485EF2721743A6957E26A79A97EFD24BE5AC7F
+D6792166AD1F09A8590F5871E74B2215E9012BF05DC89BEF6A2FFBA06BC619A08B14D6679877A1
+10165E943223B0DDC672C591F26D6C865B78B59703C3C977FFD605CB241C35FA1FD928A4A4F11C
+052EA00B2FC0CEAD4BD9041899EE135DE98A260518AC927508ADD78D7A6D8049C88B42241D25CA
+5DF0550706C3671B2DB3D848C3B94CC77D7FC2D157E37B8D4780B6B7F3B04502F3167D8D5B99A4
+6B63151FA7FC1FE52BD66ACF20DB58A7A092623E63FF6F7C7D0001AB09059A5CB6D79504900589
+A349E8D19E76F6FBEA194D18CB6526691C7B66E219092FCB73A4F7807E6BFD82510687A50BFA3C
+EEB4F8818B11A8B9F7B71676C5B44078996994DA808DC39D3CB6A66B476FA2ED6390B7181A591D
+171DE548152A5CC5B71F5F9DCED5B648AEF57E2B3644909577EA607E49C8D0105DB7FC57FA1A2D
+E0105EADBF35AA385C972F9CF07D379454FBFB1EAC4B573498C10B2E98C3FB6F1483A123237B96
+0BAA3A3CDC0E9327F0FCABF72E8AC7DB04E22CDAA0F6EE108564565AEAC4A4DA8328F30AA878DD
+B35D6AB16FC49D928066ED24C583434447AFBE2E4D22848A516862207480EAF650624943925E0C
+351A6407ABE0BF04E36C87BE715B11FE53B8A13AB4669B7B2238D0B295D60028D1111A5AFE23AC
+E77C59415C466042B93790A8055FD8C39B262848BBCEE84DA425462871EA73BFC927DC4DAF9336
+E13B1BC99887E8C1D8721311B5396209A634F3A1F91D51EB7B28F0A827A50688ED60370F6BF3EC
+A867BB995B125BAB4203DE9E26DFC0D3D8E91D3E749AA0407C6A74C86E98FDF8A314B201E1EE0C
+98015360074379F70367DE7CEE75864C9789533ECEBE1323C12261A8622C5666C932177CFDCACD
+2D494F1741EC983E51CE4E3A63AE6FD282DA64A32CC3B2F55549080C7A190BFDD2C2393C675DE4
+90C79A325DCC04D14E0445C218AAFA0E54A305A889DBE613D4F28FB08253892A0D673908479B87
+E9D8E13F467B7F9EBCD8E5E16D7CD3358C71CECCD08C6B8ACA8525657D37560BF2221F91258EF4
+E6B70118BD1CB1F4EB421C4C32C76437340EA398E22351CEA31D250E46F946D44D97C2B3DE06F8
+D8003381600E2E2C28AFBADC25DC94224AFAD0D7D951609BB2478C476085C01AA601F3AFFED544
+F251D5A49BD263D64F4FEFB0803F162BD5FE1082FA2949BA8987AFFA1D9A7A4EF28BFCAFFD3311
+0E1A1A2A22C76734DF6CC30E3C4662DFAFB32DF55DB12D138148435A6F7ADB4ACC4F4124EF772A
+A63D5F65490E9763FFD66C6153F5B0FEF1A307D6A9753102CE51DA88E2EF7275FFFD2A7B4F81E9
+DF549938193AB7A58D5C237D669ACF27DFA35744F7622F8D54B5B54AA31D9403841D4C5D193D87
+E60622E18C2D7E333AD4CB2DB27DEE813D9902D17DD0F2D3BDC8B340DFE9C8D34B993CC2CC91BD
+47B4861809902E11197967922FC625989AC6F4BA0D48166F3F4B6C6C47D3B9A932F3D47A8613F3
+6329406BF5ADEE519002394FB288D3A8AC3DCD5C37270AC7F5C5CDE46BE5C2A103FD468FEBC0F5
+180143DB4312076FB062CE88DC373B5F120C591B9C09B9E3E1B26F52A48339AE70F729BA02977A
+B60666637D9FF9287DB4CC52BD5C7B2D4F038E5C927B97B54F611396E2211514A8684A02D5DB1F
+DE728DB58AE1BB7253740349771118D2D33211D2ED7BBEB97BB4776666F6A2AC7B54A1E2DB79D2
+A9DE31745745CB39BDEE3E7CF425C27F86CFA89F825A09F9C7027E8DF7A773497690F328D22FF5
+A5CB2821623A570C29D03081E9DCE770F3E7F5B7377A1BC3F52B383EA0CB1C1BDC00E67AE90F72
+9DC77450407C0A9D0ECB2CE16C91CC3C7D487457800654F86BA7A8E26A25B78204CC7F58BBF69C
+5C406BA012563A4379506C28A39538F9A5D57BD197443A02A9D3C67149D654FF12FC6E05612981
+7F7236BF90FA626FB91D49C48D824248EABD764EB3C20634D56BDC2E170A814567D278F7AFB96B
+F6AEF216C0B42AAF85AE299752C50E6D2963FA5DB384FD110868D43DA804FDB9D0CA26BBC8CD72
+EFAC451FBAF4BB0B44C675DD4E0B4AD8D6149DAE44DC4EC36942CE1876C8602E3F97CD6E18BD0B
+5BCCF7B1773619FC8AC3B3D4958F71E5D2C631C6B17EEE7ADCBA30CA0E30B538249113223FA987
+4D4B294563B9F42D9D259374F28A8D8A654F26D7BFD8667CCBC43F75B61C2F5CF8D7E06642E93D
+76554642B7666B7905D6859F79DC080CB5574D03A072DB0D47AB82461DF6638C77234A3F97428F
+D2FC973687786BCF1D2F65AABAF55C257914247AEA0B3AF17A867C0CF1E5A6883D68680343CC5F
+3604DC8E1E7A9DAB9CFA316A14D4CF7A3A60CA56E947AE632762B2303C0EDAF9B3AA206191730D
+18B522FCD29D036AA4E6540F6A0DA836638A2EACE334B232199F61B357B10F4322A1F58F249101
+CB1399E5E60483F12A6008F8FFB52709F34136D93902FE367A01419F79A4D4DEDBBAE63741526D
+3D9EB7BFB4332C1775E2F0A05A4D7B203C2816F30081A67440D09D1FF94DDB3B7BB91B63703581
+A696ECEB393963FA9199AB61A3F449061E048FA2C1F91897C5A60A4D30D0C276DE88EA143BA4FC
+545FFC8F0B0950A38AAD126D73DA6BBDBDB480C3AFF4D2C7657A33652D5728E1866DB82B8F1A8A
+72235DAB477C38ECFCCD0CDBB77D30A0436FDDC1D70426C0C5B408A4ADD039CC2B5750B7BB5E07
+CC56039DB7FF3298151718E167CD482E88AE498B2D89C79C572FCE5ECEA3BBFE5603FD7AF6F4DF
+2C06BD8EF8501B52E8CBFB5481CA45CBAE44D87D455DFB6F030FBC0938EDFF80592B68390452F2
+42584D9C529BBAA2615F9A493BDB3C4BCD99422B69FB658ADA813AE39E447151F9312A005AB210
+D9FFB508C7A036BFA34C7264CFC1B92929C7CD892CD8BE48D388545B8CE7A79F70D0F1B852625D
+F331D75342E9EC57219DE4E61BFFEB066D82DC6256892E89B25BCE034F7F6FF09D7DC8ABBC8739
+3B70FDAB372D2FDFC51902A6E7FBE5DF3F41A91DAFA35D9A99A18DCD9E9D9050CA9D6FD417C9B8
+DE3C0648F8458BA2E0ABCEE10E759C97F019D1A1C8E1CC9EC8A6680C2566F42E478EB1F5706435
+16EBAF85E4F9E972BA3FA6D20B8BD1734229563A1ADA6D4D1857257EB760050F4FD997090653CA
+7771430101EEE3BCA1EA8E5F230F1B54E25A50458A1F7EBC35AEC36A88E4E345EF4CD9F97978EC
+E8F3C53ABD56FD3DB6C71206DEB0058509F24D0EB4C68BCFAD5A773EFD04F5472984000960F67E
+261B9152A176B230EB447633653ED0CBD3F50B214773DB454E89625BE27B7B75C93330E1F782BE
+EA101988B04AEF3601BA7FE868F614035647349D97F9F1AA598FD808885D91F5E24FE348015E46
+D80FCC9E62
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+%%EndResource
+%!PS-Adobe-2.0
+%%Version: 0.1
+%%Creator: troff, Plan 9 edition
+%%Pages: (atend)
+%%EndComments
+%
+% Version 3.3.2 prologue for troff files.
+%
+
+/#copies 1 store
+/aspectratio 1 def
+/formsperpage 1 def
+/landscape false def
+/linewidth .3 def
+/magnification 1 def
+/margin 0 def
+/orientation 0 def
+/resolution 720 def
+/rotation 1 def
+/xoffset 0 def
+/yoffset 0 def
+
+/roundpage true def
+/useclippath true def
+/pagebbox [0 0 612 792] def
+
+/R /Times-Roman def
+/I /Times-Italic def
+/B /Times-Bold def
+/BI /Times-BoldItalic def
+/H /Helvetica def
+/HI /Helvetica-Oblique def
+/HB /Helvetica-Bold def
+/HX /Helvetica-BoldOblique def
+/CW /Courier def
+/CO /Courier def
+/CI /Courier-Oblique def
+/CB /Courier-Bold def
+/CX /Courier-BoldOblique def
+/PA /Palatino-Roman def
+/PI /Palatino-Italic def
+/PB /Palatino-Bold def
+/PX /Palatino-BoldItalic def
+/Hr /Helvetica-Narrow def
+/Hi /Helvetica-Narrow-Oblique def
+/Hb /Helvetica-Narrow-Bold def
+/Hx /Helvetica-Narrow-BoldOblique def
+/KR /Bookman-Light def
+/KI /Bookman-LightItalic def
+/KB /Bookman-Demi def
+/KX /Bookman-DemiItalic def
+/AR /AvantGarde-Book def
+/AI /AvantGarde-BookOblique def
+/AB /AvantGarde-Demi def
+/AX /AvantGarde-DemiOblique def
+/NR /NewCenturySchlbk-Roman def
+/NI /NewCenturySchlbk-Italic def
+/NB /NewCenturySchlbk-Bold def
+/NX /NewCenturySchlbk-BoldItalic def
+/ZD /ZapfDingbats def
+/ZI /ZapfChancery-MediumItalic def
+/S /S def
+/S1 /S1 def
+/GR /Symbol def
+
+/inch {72 mul} bind def
+/min {2 copy gt {exch} if pop} bind def
+
+/setup {
+ counttomark 2 idiv {def} repeat pop
+
+ landscape {/orientation 90 orientation add def} if
+ /scaling 72 resolution div def
+ linewidth setlinewidth
+ 1 setlinecap
+
+ pagedimensions
+ xcenter ycenter translate
+ orientation rotation mul rotate
+ width 2 div neg height 2 div translate
+ xoffset inch yoffset inch neg translate
+ margin 2 div dup neg translate
+ magnification dup aspectratio mul scale
+ scaling scaling scale
+
+ addmetrics
+ 0 0 moveto
+} def
+
+/pagedimensions {
+ useclippath userdict /gotpagebbox known not and {
+ /pagebbox [clippath pathbbox newpath] def
+ roundpage currentdict /roundpagebbox known and {roundpagebbox} if
+ } if
+ pagebbox aload pop
+ 4 -1 roll exch 4 1 roll 4 copy
+ landscape {4 2 roll} if
+ sub /width exch def
+ sub /height exch def
+ add 2 div /xcenter exch def
+ add 2 div /ycenter exch def
+ userdict /gotpagebbox true put
+} def
+
+/addmetrics {
+ /Symbol /S null Sdefs cf
+ /Times-Roman /S1 StandardEncoding dup length array copy S1defs cf
+} def
+
+/pagesetup {
+ /page exch def
+ currentdict /pagedict known currentdict page known and {
+ page load pagedict exch get cvx exec
+ } if
+} def
+
+/decodingdefs [
+ {counttomark 2 idiv {y moveto show} repeat}
+ {neg /y exch def counttomark 2 idiv {y moveto show} repeat}
+ {neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat}
+ {neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat}
+ {counttomark 2 idiv {y moveto show} repeat}
+ {neg setfunnytext}
+] def
+
+/setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def
+
+/w {neg moveto show} bind def
+/m {neg dup /y exch def moveto} bind def
+/done {/lastpage where {pop lastpage} if} def
+
+/f {
+ dup /font exch def findfont exch
+ dup /ptsize exch def scaling div dup /size exch def scalefont setfont
+ linewidth ptsize mul scaling 10 mul div setlinewidth
+ /spacewidth ( ) stringwidth pop def
+} bind def
+
+/changefont {
+ /fontheight exch def
+ /fontslant exch def
+ currentfont [
+ 1 0
+ fontheight ptsize div fontslant sin mul fontslant cos div
+ fontheight ptsize div
+ 0 0
+ ] makefont setfont
+} bind def
+
+/sf {f} bind def
+
+/cf {
+ dup length 2 idiv
+ /entries exch def
+ /chtab exch def
+ /newencoding exch def
+ /newfont exch def
+
+ findfont dup length 1 add dict
+ /newdict exch def
+ {1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall
+
+ newencoding type /arraytype eq {newdict /Encoding newencoding put} if
+
+ newdict /Metrics entries dict put
+ newdict /Metrics get
+ begin
+ chtab aload pop
+ 1 1 entries {pop def} for
+ newfont newdict definefont pop
+ end
+} bind def
+
+%
+% A few arrays used to adjust reference points and character widths in some
+% of the printer resident fonts. If square roots are too high try changing
+% the lines describing /radical and /radicalex to,
+%
+% /radical [0 -75 550 0]
+% /radicalex [-50 -75 500 0]
+%
+% Move braceleftbt a bit - default PostScript character is off a bit.
+%
+
+/Sdefs [
+ /bracketlefttp [201 500]
+ /bracketleftbt [201 500]
+ /bracketrighttp [-81 380]
+ /bracketrightbt [-83 380]
+ /braceleftbt [203 490]
+ /bracketrightex [220 -125 500 0]
+ /radical [0 0 550 0]
+ /radicalex [-50 0 500 0]
+ /parenleftex [-20 -170 0 0]
+ /integral [100 -50 500 0]
+ /infinity [10 -75 730 0]
+] def
+
+/S1defs [
+ /underscore [0 80 500 0]
+ /endash [7 90 650 0]
+] def
+%
+% Version 3.3.2 drawing procedures for dpost. Automatically pulled in when
+% needed.
+%
+
+/inpath false def
+/savematrix matrix def
+
+/Dl {
+ inpath
+ {neg lineto pop pop}
+ {newpath neg moveto neg lineto stroke}
+ ifelse
+} bind def
+
+/De {
+ /y1 exch 2 div def
+ /x1 exch 2 div def
+ /savematrix savematrix currentmatrix def
+ neg exch x1 add exch translate
+ x1 y1 scale
+ 0 0 1 0 360
+ inpath
+ {1 0 moveto arc savematrix setmatrix}
+ {newpath arc savematrix setmatrix stroke}
+ ifelse
+} bind def
+
+/Da {
+ /dy2 exch def
+ /dx2 exch def
+ /dy1 exch def
+ /dx1 exch def
+ dy1 add neg exch dx1 add exch
+ dx1 dx1 mul dy1 dy1 mul add sqrt
+ dy1 dx1 neg atan
+ dy2 neg dx2 atan
+ inpath
+ {arc}
+ {newpath arc stroke}
+ ifelse
+} bind def
+
+/DA {
+ /dy2 exch def
+ /dx2 exch def
+ /dy1 exch def
+ /dx1 exch def
+ dy1 add neg exch dx1 add exch
+ dx1 dx1 mul dy1 dy1 mul add sqrt
+ dy1 dx1 neg atan
+ dy2 neg dx2 atan
+ inpath
+ {arcn}
+ {newpath arcn stroke}
+ ifelse
+} bind def
+
+/Ds {
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ /y0 exch def
+ /x0 exch def
+ x0 5 x1 mul add 6 div
+ y0 5 y1 mul add -6 div
+ x2 5 x1 mul add 6 div
+ y2 5 y1 mul add -6 div
+ x1 x2 add 2 div
+ y1 y2 add -2 div
+ inpath
+ {curveto}
+ {newpath x0 x1 add 2 div y0 y1 add -2 div moveto curveto stroke}
+ ifelse
+} bind def
+%
+% Tries to round clipping path dimensions, as stored in array pagebbox, so they
+% match one of the known sizes in the papersizes array. Lower left coordinates
+% are always set to 0.
+%
+
+/roundpagebbox {
+ 7 dict begin
+ /papersizes [8.5 inch 11 inch 14 inch 17 inch] def
+
+ /mappapersize {
+ /val exch def
+ /slop .5 inch def
+ /diff slop def
+ /j 0 def
+ 0 1 papersizes length 1 sub {
+ /i exch def
+ papersizes i get val sub abs
+ dup diff le {/diff exch def /j i def} {pop} ifelse
+ } for
+ diff slop lt {papersizes j get} {val} ifelse
+ } def
+
+ pagebbox 0 0 put
+ pagebbox 1 0 put
+ pagebbox dup 2 get mappapersize 2 exch put
+ pagebbox dup 3 get mappapersize 3 exch put
+ end
+} bind def
+
+%%EndProlog
+%%BeginSetup
+mark
+%
+% Encoding vector and redefinition of findfont for the ISO Latin1 standard.
+% The 18 characters missing from ROM based fonts on older printers are noted
+% below.
+%
+
+/ISOLatin1Encoding [
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /space
+ /exclam
+ /quotedbl
+ /numbersign
+ /dollar
+ /percent
+ /ampersand
+ /quoteright
+ /parenleft
+ /parenright
+ /asterisk
+ /plus
+ /comma
+ /minus
+ /period
+ /slash
+ /zero
+ /one
+ /two
+ /three
+ /four
+ /five
+ /six
+ /seven
+ /eight
+ /nine
+ /colon
+ /semicolon
+ /less
+ /equal
+ /greater
+ /question
+ /at
+ /A
+ /B
+ /C
+ /D
+ /E
+ /F
+ /G
+ /H
+ /I
+ /J
+ /K
+ /L
+ /M
+ /N
+ /O
+ /P
+ /Q
+ /R
+ /S
+ /T
+ /U
+ /V
+ /W
+ /X
+ /Y
+ /Z
+ /bracketleft
+ /backslash
+ /bracketright
+ /asciicircum
+ /underscore
+ /quoteleft
+ /a
+ /b
+ /c
+ /d
+ /e
+ /f
+ /g
+ /h
+ /i
+ /j
+ /k
+ /l
+ /m
+ /n
+ /o
+ /p
+ /q
+ /r
+ /s
+ /t
+ /u
+ /v
+ /w
+ /x
+ /y
+ /z
+ /braceleft
+ /bar
+ /braceright
+ /asciitilde
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /.notdef
+ /dotlessi
+ /grave
+ /acute
+ /circumflex
+ /tilde
+ /macron
+ /breve
+ /dotaccent
+ /dieresis
+ /.notdef
+ /ring
+ /cedilla
+ /.notdef
+ /hungarumlaut
+ /ogonek
+ /caron
+ /space
+ /exclamdown
+ /cent
+ /sterling
+ /currency
+ /yen
+ /brokenbar % missing
+ /section
+ /dieresis
+ /copyright
+ /ordfeminine
+ /guillemotleft
+ /logicalnot
+ /hyphen
+ /registered
+ /macron
+ /degree % missing
+ /plusminus % missing
+ /twosuperior % missing
+ /threesuperior % missing
+ /acute
+ /mu % missing
+ /paragraph
+ /periodcentered
+ /cedilla
+ /onesuperior % missing
+ /ordmasculine
+ /guillemotright
+ /onequarter % missing
+ /onehalf % missing
+ /threequarters % missing
+ /questiondown
+ /Agrave
+ /Aacute
+ /Acircumflex
+ /Atilde
+ /Adieresis
+ /Aring
+ /AE
+ /Ccedilla
+ /Egrave
+ /Eacute
+ /Ecircumflex
+ /Edieresis
+ /Igrave
+ /Iacute
+ /Icircumflex
+ /Idieresis
+ /Eth % missing
+ /Ntilde
+ /Ograve
+ /Oacute
+ /Ocircumflex
+ /Otilde
+ /Odieresis
+ /multiply % missing
+ /Oslash
+ /Ugrave
+ /Uacute
+ /Ucircumflex
+ /Udieresis
+ /Yacute % missing
+ /Thorn % missing
+ /germandbls
+ /agrave
+ /aacute
+ /acircumflex
+ /atilde
+ /adieresis
+ /aring
+ /ae
+ /ccedilla
+ /egrave
+ /eacute
+ /ecircumflex
+ /edieresis
+ /igrave
+ /iacute
+ /icircumflex
+ /idieresis
+ /eth % missing
+ /ntilde
+ /ograve
+ /oacute
+ /ocircumflex
+ /otilde
+ /odieresis
+ /divide % missing
+ /oslash
+ /ugrave
+ /uacute
+ /ucircumflex
+ /udieresis
+ /yacute % missing
+ /thorn % missing
+ /ydieresis
+] def
+
+/NewFontDirectory FontDirectory maxlength dict def
+
+%
+% Apparently no guarantee findfont is defined in systemdict so the obvious
+%
+% systemdict /findfont get exec
+%
+% can generate an error. So far the only exception is a VT600 (version 48.0).
+%
+
+userdict /@RealFindfont known not {
+ userdict begin
+ /@RealFindfont systemdict begin /findfont load end def
+ end
+} if
+
+/findfont {
+ dup NewFontDirectory exch known not {
+ dup
+ %dup systemdict /findfont get exec % not always in systemdict
+ dup userdict /@RealFindfont get exec
+ dup /Encoding get StandardEncoding eq {
+ dup length dict begin
+ {1 index /FID ne {def}{pop pop} ifelse} forall
+ /Encoding ISOLatin1Encoding def
+ currentdict
+ end
+ /DummyFontName exch definefont
+ } if
+ NewFontDirectory 3 1 roll put
+ } if
+ NewFontDirectory exch get
+} bind def
+
+%%Patch from lp
+%%EndPatch from lp
+
+setup
+%%EndSetup
+%%Page: 1 1
+/saveobj save def
+mark
+1 pagesetup
+12 /LucidaSans-Demi f
+(The) 2255 1230 w
+(Text Editor) 2526 1230 w
+12 /LucidaTypewriter f
+(sam) 3247 1230 w
+10 /LucidaSans-Italic f
+(Rob Pike) 2674 1470 w
+(rob@plan9.bell-labs.com) 2266 1590 w
+(ABSTRACT) 2626 2030 w
+10 /LucidaTypewriter f
+(Sam) 1080 2326 w
+10 /LucidaSansUnicode00 f
+(is) 1337 2326 w
+(an) 1458 2326 w
+(interactive) 1616 2326 w
+(multi-file) 2162 2326 w
+(text) 2662 2326 w
+(editor) 2894 2326 w
+(intended) 3222 2326 w
+(for) 3692 2326 w
+(bitmap) 3873 2326 w
+(displays.) 4255 2326 w
+(A) 1080 2446 w
+(textual) 1197 2446 w
+(command) 1582 2446 w
+(language) 2108 2446 w
+(supplements) 2599 2446 w
+(the) 3269 2446 w
+(mouse-driven,) 3471 2446 w
+(cut-and-) 4234 2446 w
+(paste) 1080 2566 w
+(interface) 1380 2566 w
+(to) 1842 2566 w
+(make) 1978 2566 w
+(complex) 2279 2566 w
+(or) 2732 2566 w
+(repetitive) 2873 2566 w
+(editing) 3368 2566 w
+(tasks) 3745 2566 w
+(easy) 4036 2566 w
+(to) 4289 2566 w
+(spec\255) 4426 2566 w
+(ify.) 1080 2686 w
+(The) 1301 2686 w
+(language) 1521 2686 w
+(is) 2003 2686 w
+(characterized) 2122 2686 w
+(by) 2815 2686 w
+(the) 2969 2686 w
+(composition) 3163 2686 w
+(of) 3799 2686 w
+(regular) 3935 2686 w
+(expres\255) 4319 2686 w
+(sions) 1080 2806 w
+(to) 1368 2806 w
+(describe) 1500 2806 w
+(the) 1944 2806 w
+(structure) 2133 2806 w
+(of) 2605 2806 w
+(the) 2737 2806 w
+(text) 2927 2806 w
+(being) 3153 2806 w
+(modified.) 3460 2806 w
+(The) 3990 2806 w
+(treatment) 4206 2806 w
+(of) 1080 2926 w
+(files) 1211 2926 w
+(as) 1446 2926 w
+(a) 1585 2926 w
+(database, with changes logged as atomic transactions, guides) 1673 2926 w
+(the) 1080 3046 w
+(implementation) 1280 3046 w
+(and) 2087 3046 w
+(makes) 2312 3046 w
+(a) 2670 3046 w
+(general) 2771 3046 w
+10 /LucidaSansUnicode20 f
+(\030) 3178 3046 w
+10 /LucidaSansUnicode00 f
+(undo) 3210 3046 w
+10 /LucidaSansUnicode20 f
+(\031) 3458 3046 w
+10 /LucidaSansUnicode00 f
+(mechanism) 3536 3046 w
+(straightfor\255) 4134 3046 w
+(ward.) 1080 3166 w
+10 /LucidaTypewriter f
+(Sam) 1330 3322 w
+10 /LucidaSansUnicode00 f
+(is) 1630 3322 w
+(implemented) 1794 3322 w
+(as) 2515 3322 w
+(two) 2705 3322 w
+(processes) 2965 3322 w
+(connected) 3531 3322 w
+(by) 4115 3322 w
+(a) 4315 3322 w
+(low-) 4455 3322 w
+(bandwidth) 1080 3442 w
+(stream,) 1642 3442 w
+(one) 2058 3442 w
+(process) 2288 3442 w
+(handling) 2712 3442 w
+(the) 3186 3442 w
+(display) 3391 3442 w
+(and) 3783 3442 w
+(the) 4013 3442 w
+(other) 4218 3442 w
+(the) 4525 3442 w
+(editing) 1080 3562 w
+(algorithms.) 1453 3562 w
+(Therefore) 2072 3562 w
+(it) 2580 3562 w
+(can) 2681 3562 w
+(run) 2884 3562 w
+(with) 3084 3562 w
+(the) 3324 3562 w
+(display) 3514 3562 w
+(process) 3891 3562 w
+(in) 4300 3562 w
+(a) 4427 3562 w
+(bit\255) 4518 3562 w
+(map) 1080 3682 w
+(terminal) 1340 3682 w
+(and) 1791 3682 w
+(the) 2020 3682 w
+(editor) 2224 3682 w
+(on) 2560 3682 w
+(a) 2732 3682 w
+(local) 2836 3682 w
+(host,) 3110 3682 w
+(with) 3401 3682 w
+(both) 3654 3682 w
+(processes) 3925 3682 w
+(on) 4454 3682 w
+(a) 4625 3682 w
+(bitmap-equipped) 1080 3802 w
+(host,) 1982 3802 w
+(or) 2274 3802 w
+(with) 2426 3802 w
+(the) 2681 3802 w
+(display) 2886 3802 w
+(process) 3278 3802 w
+(in) 3702 3802 w
+(the) 3843 3802 w
+(terminal) 4048 3802 w
+(and) 4500 3802 w
+(the) 1080 3922 w
+(editor) 1282 3922 w
+(in) 1616 3922 w
+(a) 1754 3922 w
+(remote) 1855 3922 w
+(host.) 2245 3922 w
+(By) 2566 3922 w
+(suppressing) 2722 3922 w
+(the) 3359 3922 w
+(display) 3560 3922 w
+(process,) 3948 3922 w
+(it) 4400 3922 w
+(can) 4512 3922 w
+(even run without a bitmap terminal.) 1080 4042 w
+(This) 1330 4198 w
+(paper) 1574 4198 w
+(is) 1891 4198 w
+(reprinted) 2011 4198 w
+(from) 2499 4198 w
+(Software) 2771 4198 w
+10 /LucidaSansUnicode20 f
+(\024) 3189 4198 w
+10 /LucidaSansUnicode00 f
+(Practice) 3289 4198 w
+(and) 3704 4198 w
+(Experience,) 3924 4198 w
+(Vol) 4525 4198 w
+(17,) 1080 4318 w
+(number) 1279 4318 w
+(11,) 1697 4318 w
+(pp.) 1896 4318 w
+(813-845,) 2095 4318 w
+(November) 2604 4318 w
+(1987.) 3140 4318 w
+(The) 3496 4318 w
+(paper) 3717 4318 w
+(has) 4035 4318 w
+(not) 4243 4318 w
+(been) 4443 4318 w
+(updated) 1080 4438 w
+(for) 1524 4438 w
+(the) 1709 4438 w
+(Plan) 1910 4438 w
+(9) 2157 4438 w
+(manuals.) 2266 4438 w
+(Although) 2783 4438 w
+10 /LucidaTypewriter f
+(Sam) 3273 4438 w
+10 /LucidaSansUnicode00 f
+(has) 3535 4438 w
+(not) 3749 4438 w
+(changed) 3955 4438 w
+(much) 4412 4438 w
+(since) 1080 4558 w
+(the) 1363 4558 w
+(paper) 1552 4558 w
+(was) 1864 4558 w
+(written,) 2081 4558 w
+(the) 2486 4558 w
+(system) 2675 4558 w
+(around) 3049 4558 w
+(it) 3427 4558 w
+(certainly) 3527 4558 w
+(has.) 3973 4558 w
+(Nonethe\255) 4239 4558 w
+(less,) 1080 4678 w
+(the) 1338 4678 w
+(description) 1532 4678 w
+(here) 2114 4678 w
+(still) 2369 4678 w
+(stands) 2584 4678 w
+(as) 2943 4678 w
+(the) 3089 4678 w
+(best) 3284 4678 w
+(introduction) 3531 4678 w
+(to) 4166 4678 w
+(the) 4304 4678 w
+(edi\255) 4499 4678 w
+(tor.) 1080 4798 w
+10 /LucidaSans-Demi f
+(Introduction) 720 5158 w
+10 /LucidaTypewriter f
+(Sam) 720 5314 w
+10 /LucidaSansUnicode00 f
+(is an) 968 5314 w
+(interactive) 1230 5314 w
+(text) 1768 5314 w
+(editor) 1992 5314 w
+(that) 2312 5314 w
+(combines) 2536 5314 w
+(cut-and-paste) 3035 5314 w
+(interactive) 3776 5314 w
+(editing) 4314 5314 w
+(with) 4685 5314 w
+(an) 4923 5314 w
+(unusual) 720 5434 w
+(command) 1137 5434 w
+(language) 1649 5434 w
+(based) 2126 5434 w
+(on) 2447 5434 w
+(the) 2603 5434 w
+(composition) 2791 5434 w
+(of) 3422 5434 w
+(regular) 3553 5434 w
+(expressions.) 3932 5434 w
+(It) 4611 5434 w
+(is) 4710 5434 w
+(writ\255) 4823 5434 w
+(ten) 720 5554 w
+(as) 917 5554 w
+(two) 1065 5554 w
+(programs:) 1283 5554 w
+(one,) 1825 5554 w
+(the) 2079 5554 w
+10 /LucidaSansUnicode20 f
+(\030) 2277 5554 w
+10 /LucidaSansUnicode00 f
+(host) 2309 5554 w
+(part,) 2563 5554 w
+10 /LucidaSansUnicode20 f
+(\031) 2791 5554 w
+10 /LucidaSansUnicode00 f
+(runs) 2866 5554 w
+(on) 3125 5554 w
+(a) 3291 5554 w
+(UNIX) 3389 5554 w
+(system) 3667 5554 w
+(and) 4050 5554 w
+(implements) 4273 5554 w
+(the) 4885 5554 w
+(command) 720 5674 w
+(language) 1244 5674 w
+(and) 1733 5674 w
+(provides) 1959 5674 w
+(file) 2420 5674 w
+(access;) 2616 5674 w
+(the) 3008 5674 w
+(other,) 3208 5674 w
+(the) 3542 5674 w
+10 /LucidaSansUnicode20 f
+(\030) 3742 5674 w
+10 /LucidaSansUnicode00 f
+(terminal) 3774 5674 w
+(part,) 4221 5674 w
+10 /LucidaSansUnicode20 f
+(\031) 4449 5674 w
+10 /LucidaSansUnicode00 f
+(runs) 4526 5674 w
+(asyn\255) 4787 5674 w
+(chronously) 720 5794 w
+(on) 1285 5794 w
+(a) 1441 5794 w
+(machine) 1529 5794 w
+(with) 1970 5794 w
+(a) 2208 5794 w
+(mouse) 2297 5794 w
+(and) 2654 5794 w
+(bitmap) 2868 5794 w
+(display) 3242 5794 w
+(and) 3618 5794 w
+(supports) 3832 5794 w
+(the) 4295 5794 w
+(display) 4484 5794 w
+(and) 4860 5794 w
+(interactive) 720 5914 w
+(editing.) 1266 5914 w
+(The) 1709 5914 w
+(host) 1931 5914 w
+(part) 2183 5914 w
+(may) 2419 5914 w
+(be) 2659 5914 w
+(even) 2818 5914 w
+(run) 3084 5914 w
+(in) 3289 5914 w
+(isolation) 3420 5914 w
+(on) 3874 5914 w
+(an) 4037 5914 w
+(ordinary) 4194 5914 w
+(terminal) 4638 5914 w
+(to) 720 6034 w
+(edit) 865 6034 w
+(text) 1097 6034 w
+(using) 1335 6034 w
+(the) 1648 6034 w
+(command) 1850 6034 w
+(language,) 2376 6034 w
+(much) 2899 6034 w
+(like) 3215 6034 w
+(a) 3435 6034 w
+(traditional) 3538 6034 w
+(line) 4084 6034 w
+(editor,) 4308 6034 w
+(without) 4675 6034 w
+(assistance) 720 6154 w
+(from) 1256 6154 w
+(a) 1526 6154 w
+(mouse) 1618 6154 w
+(or) 1978 6154 w
+(display.) 2117 6154 w
+(Most) 2560 6154 w
+(often,) 2832 6154 w
+(the) 3154 6154 w
+(terminal) 3346 6154 w
+(part) 3785 6154 w
+(runs) 4018 6154 w
+(on) 4271 6154 w
+(a) 4431 6154 w
+(Blit) 4523 6154 w
+6 /LucidaSansUnicode00 f
+(1) 4676 6104 w
+10 /LucidaSansUnicode00 f
+(termi\255) 4751 6154 w
+(nal) 720 6274 w
+(\(actually) 911 6274 w
+(on) 1359 6274 w
+(a) 1527 6274 w
+(Teletype) 1627 6274 w
+(DMD) 2084 6274 w
+(5620,) 2365 6274 w
+(the) 2694 6274 w
+(production) 2894 6274 w
+(version) 3469 6274 w
+(of) 3867 6274 w
+(the) 4011 6274 w
+(Blit\),) 4212 6274 w
+(whose) 4476 6274 w
+(host) 4829 6274 w
+(connection) 720 6394 w
+(is) 1291 6394 w
+(an) 1410 6394 w
+(ordinary) 1566 6394 w
+(9600) 2009 6394 w
+(bps) 2300 6394 w
+(RS232) 2516 6394 w
+(link;) 2861 6394 w
+(on) 3110 6394 w
+(the) 3272 6394 w
+(SUN) 3466 6394 w
+(computer) 3702 6394 w
+(the) 4204 6394 w
+(host) 4397 6394 w
+(and) 4646 6394 w
+(dis\255) 4864 6394 w
+(play processes run on a single machine, connected by a pipe.) 720 6514 w
+10 /LucidaTypewriter f
+(Sam) 970 6670 w
+10 /LucidaSansUnicode00 f
+(edits) 1224 6670 w
+(uninterpreted) 1498 6670 w
+(ASCII) 2201 6670 w
+(text.) 2489 6670 w
+(It) 2782 6670 w
+(has) 2886 6670 w
+(no) 3092 6670 w
+(facilities) 3253 6670 w
+(for) 3694 6670 w
+(multiple) 3871 6670 w
+(fonts,) 4307 6670 w
+(graphics) 4626 6670 w
+(or) 720 6790 w
+(tables,) 861 6790 w
+(unlike) 1222 6790 w
+(MacWrite,) 1556 6790 w
+6 /LucidaSansUnicode00 f
+(2) 2029 6740 w
+10 /LucidaSansUnicode00 f
+(Bravo,) 2105 6790 w
+6 /LucidaSansUnicode00 f
+(3) 2404 6740 w
+10 /LucidaSansUnicode00 f
+(Tioga) 2480 6790 w
+6 /LucidaSansUnicode00 f
+(4) 2750 6740 w
+10 /LucidaSansUnicode00 f
+(or) 2826 6790 w
+(Lara.) 2966 6790 w
+6 /LucidaSansUnicode00 f
+(5) 3202 6740 w
+10 /LucidaSansUnicode00 f
+(Also) 3278 6790 w
+(unlike) 3526 6790 w
+(them,) 3860 6790 w
+(it) 4178 6790 w
+(has) 4282 6790 w
+(a) 4488 6790 w
+(rich) 4581 6790 w
+(com\255) 4802 6790 w
+(mand) 720 6910 w
+(language.) 1058 6910 w
+(\(Throughout) 1630 6910 w
+(this) 2301 6910 w
+(paper,) 2545 6910 w
+(the) 2920 6910 w
+(phrase) 3141 6910 w
+10 /LucidaSans-Italic f
+(command) 3535 6910 w
+(language) 4078 6910 w
+10 /LucidaSansUnicode00 f
+(refers) 4594 6910 w
+(to) 4942 6910 w
+(textual) 720 7030 w
+(commands;) 1111 7030 w
+(commands) 1726 7030 w
+(activated) 2308 7030 w
+(from) 2796 7030 w
+(the) 3081 7030 w
+(mouse) 3289 7030 w
+(form) 3665 7030 w
+(the) 3950 7030 w
+10 /LucidaSans-Italic f
+(mouse) 4158 7030 w
+(language.) 4525 7030 w
+10 /LucidaSansUnicode00 f
+(\)) 5007 7030 w
+10 /LucidaTypewriter f
+(Sam) 720 7150 w
+10 /LucidaSansUnicode00 f
+(developed) 975 7150 w
+(as) 1513 7150 w
+(an) 1658 7150 w
+(editor) 1814 7150 w
+(for) 2140 7150 w
+(use) 2318 7150 w
+(by) 2526 7150 w
+(programmers,) 2680 7150 w
+(and) 3408 7150 w
+(tries) 3627 7150 w
+(to) 3880 7150 w
+(join) 4017 7150 w
+(the) 4238 7150 w
+(styles) 4432 7150 w
+(of) 4747 7150 w
+(the) 4885 7150 w
+(UNIX) 720 7270 w
+(text) 1013 7270 w
+(editor) 1262 7270 w
+10 /LucidaTypewriter f
+(ed) 1607 7270 w
+6 /LucidaSansUnicode00 f
+(6,7) 1751 7220 w
+10 /LucidaSansUnicode00 f
+(with) 1904 7270 w
+(that) 2167 7270 w
+(of) 2416 7270 w
+(interactive) 2572 7270 w
+(cut-and-paste) 3134 7270 w
+(editors) 3899 7270 w
+(by) 4294 7270 w
+(providing) 4466 7270 w
+(a) 4985 7270 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 1 1
+%%Page: 2 2
+/saveobj save def
+mark
+2 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 2 \255) 2783 480 w
+(comfortable) 720 840 w
+(mouse-driven) 1368 840 w
+(interface) 2116 840 w
+(to) 2604 840 w
+(a) 2766 840 w
+(program) 2885 840 w
+(with) 3366 840 w
+(a) 3636 840 w
+(solid) 3756 840 w
+(command) 4054 840 w
+(language) 4597 840 w
+(driven) 720 960 w
+(by) 1057 960 w
+(regular) 1205 960 w
+(expressions.) 1584 960 w
+(The) 2263 960 w
+(command) 2477 960 w
+(language) 2988 960 w
+(developed) 3464 960 w
+(more) 3996 960 w
+(than) 4280 960 w
+(the) 4529 960 w
+(mouse) 4717 960 w
+(language,) 720 1080 w
+(and) 1234 1080 w
+(acquired) 1453 1080 w
+(a) 1912 1080 w
+(notation) 2006 1080 w
+(for) 2450 1080 w
+(describing) 2629 1080 w
+(the) 3176 1080 w
+(structure) 3371 1080 w
+(of) 3849 1080 w
+(files) 3987 1080 w
+(more) 4229 1080 w
+(richly) 4520 1080 w
+(than) 4824 1080 w
+(as a sequence of lines, using a dataflow-like syntax for specifying changes.) 720 1200 w
+(The) 970 1356 w
+(interactive) 1186 1356 w
+(style) 1726 1356 w
+(was) 1986 1356 w
+(influenced) 2205 1356 w
+(by) 2748 1356 w
+10 /LucidaTypewriter f
+(jim) 2899 1356 w
+10 /LucidaSansUnicode00 f
+(,) 3115 1356 w
+6 /LucidaSansUnicode00 f
+(1) 3147 1306 w
+10 /LucidaSansUnicode00 f
+(an) 3221 1356 w
+(early) 3374 1356 w
+(cut-and-paste) 3643 1356 w
+(editor) 4387 1356 w
+(for) 4710 1356 w
+(the) 4885 1356 w
+(Blit,) 720 1476 w
+(and) 940 1476 w
+(by) 1155 1476 w
+10 /LucidaTypewriter f
+(mux) 1305 1476 w
+10 /LucidaSansUnicode00 f
+(,) 1521 1476 w
+6 /LucidaSansUnicode00 f
+(8) 1553 1426 w
+10 /LucidaSansUnicode00 f
+(the) 1626 1476 w
+(Blit) 1816 1476 w
+(window) 2003 1476 w
+(system.) 2406 1476 w
+10 /LucidaTypewriter f
+(Mux) 2844 1476 w
+10 /LucidaSansUnicode00 f
+(merges) 3094 1476 w
+(the) 3487 1476 w
+(original) 3676 1476 w
+(Blit) 4078 1476 w
+(window) 4265 1476 w
+(system,) 4668 1476 w
+10 /LucidaTypewriter f
+(mpx) 720 1596 w
+10 /LucidaSansUnicode00 f
+(,) 936 1596 w
+6 /LucidaSansUnicode00 f
+(1) 968 1546 w
+10 /LucidaSansUnicode00 f
+(with) 1040 1596 w
+(cut-and-paste) 1279 1596 w
+(editing,) 2021 1596 w
+(forming) 2426 1596 w
+(something) 2846 1596 w
+(like) 3394 1596 w
+(a) 3601 1596 w
+(multiplexed) 3691 1596 w
+(version) 4304 1596 w
+(of) 4691 1596 w
+10 /LucidaTypewriter f
+(jim) 4824 1596 w
+10 /LucidaSansUnicode00 f
+(that edits the output of \(and input to\) command sessions rather than files.) 720 1716 w
+(The) 970 1872 w
+(first) 1189 1872 w
+(part) 1422 1872 w
+(of) 1656 1872 w
+(this) 1792 1872 w
+(paper) 2009 1872 w
+(describes) 2325 1872 w
+(the) 2824 1872 w
+(command) 3018 1872 w
+(language,) 3535 1872 w
+(then) 4049 1872 w
+(the) 4305 1872 w
+(mouse) 4499 1872 w
+(lan\255) 4861 1872 w
+(guage,) 720 1992 w
+(and) 1091 1992 w
+(explains) 1313 1992 w
+(how) 1761 1992 w
+(they) 2003 1992 w
+(interact.) 2252 1992 w
+(That) 2726 1992 w
+(is) 2985 1992 w
+(followed) 3107 1992 w
+(by) 3562 1992 w
+(a) 3719 1992 w
+(description) 3816 1992 w
+(of) 4401 1992 w
+(the) 4541 1992 w
+(imple\255) 4737 1992 w
+(mentation,) 720 2112 w
+(first) 1285 2112 w
+(of) 1522 2112 w
+(the) 1662 2112 w
+(host) 1859 2112 w
+(part,) 2112 2112 w
+(then) 2382 2112 w
+(of) 2641 2112 w
+(the) 2781 2112 w
+(terminal) 2978 2112 w
+(part.) 3422 2112 w
+(A) 3724 2112 w
+(principle) 3835 2112 w
+(that) 4300 2112 w
+(influenced) 4533 2112 w
+(the) 720 2232 w
+(design) 917 2232 w
+(of) 1282 2232 w
+10 /LucidaTypewriter f
+(sam) 1422 2232 w
+10 /LucidaSansUnicode00 f
+(is) 1680 2232 w
+(that) 1801 2232 w
+(it) 2033 2232 w
+(should) 2140 2232 w
+(have) 2509 2232 w
+(no) 2775 2232 w
+(explicit) 2939 2232 w
+(limits,) 3335 2232 w
+(such) 3676 2232 w
+(as) 3943 2232 w
+(upper) 4090 2232 w
+(limits) 4416 2232 w
+(on) 4725 2232 w
+(file) 4889 2232 w
+(size) 720 2352 w
+(or) 946 2352 w
+(line) 1081 2352 w
+(length.) 1290 2352 w
+(A) 1695 2352 w
+(secondary) 1797 2352 w
+(consideration) 2322 2352 w
+(is) 3013 2352 w
+(that) 3126 2352 w
+(it) 3350 2352 w
+(be) 3449 2352 w
+(efficient.) 3601 2352 w
+(To) 4092 2352 w
+(honor) 4249 2352 w
+(these) 4569 2352 w
+(two) 4865 2352 w
+(goals) 720 2472 w
+(together) 1012 2472 w
+(requires) 1457 2472 w
+(a) 1889 2472 w
+(method) 1977 2472 w
+(for) 2382 2472 w
+(efficiently) 2554 2472 w
+(manipulating) 3062 2472 w
+(huge) 3733 2472 w
+(strings) 4008 2472 w
+(\(files\)) 4374 2472 w
+(without) 4675 2472 w
+(breaking) 720 2592 w
+(them) 1185 2592 w
+(into) 1472 2592 w
+(lines,) 1700 2592 w
+(perhaps) 1998 2592 w
+(while) 2428 2592 w
+(making) 2720 2592 w
+(thousands) 3118 2592 w
+(of) 3661 2592 w
+(changes) 3798 2592 w
+(under) 4236 2592 w
+(control) 4560 2592 w
+(of) 4942 2592 w
+(the) 720 2712 w
+(command) 924 2712 w
+(language.) 1451 2712 w
+10 /LucidaTypewriter f
+(Sam) 2007 2712 w
+10 /LucidaSansUnicode20 f
+(\031) 2223 2712 w
+10 /LucidaSansUnicode00 f
+(s) 2255 2712 w
+(method) 2355 2712 w
+(is) 2776 2712 w
+(to) 2905 2712 w
+(treat) 3051 2712 w
+(the) 3325 2712 w
+(file) 3528 2712 w
+(as) 3727 2712 w
+(a) 3881 2712 w
+(transaction) 3984 2712 w
+(database,) 4573 2712 w
+(implementing) 720 2832 w
+(changes) 1441 2832 w
+(as) 1890 2832 w
+(atomic) 2046 2832 w
+(updates.) 2422 2832 w
+(These) 2923 2832 w
+(updates) 3261 2832 w
+(may) 3698 2832 w
+(be) 3949 2832 w
+(unwound) 4119 2832 w
+(easily) 4619 2832 w
+(to) 4942 2832 w
+10 /LucidaSansUnicode20 f
+(\030) 720 2952 w
+10 /LucidaSansUnicode00 f
+(undo) 752 2952 w
+10 /LucidaSansUnicode20 f
+(\031) 1000 2952 w
+10 /LucidaSansUnicode00 f
+(changes.) 1083 2952 w
+(Efficiency) 1597 2952 w
+(is) 2106 2952 w
+(achieved) 2237 2952 w
+(through) 2712 2952 w
+(a) 3150 2952 w
+(collection) 3256 2952 w
+(of) 3773 2952 w
+(caches) 3922 2952 w
+(that) 4299 2952 w
+(minimizes) 4541 2952 w
+(disc) 720 3072 w
+(traffic) 965 3072 w
+(and) 1303 3072 w
+(data) 1534 3072 w
+(motion,) 1795 3072 w
+(both) 2221 3072 w
+(within) 2495 3072 w
+(the) 2843 3072 w
+(two) 3050 3072 w
+(parts) 3277 3072 w
+(of) 3576 3072 w
+(the) 3726 3072 w
+(program) 3933 3072 w
+(and) 4401 3072 w
+(between) 4633 3072 w
+(them.) 720 3192 w
+(The) 970 3348 w
+(terminal) 1186 3348 w
+(part) 1623 3348 w
+(of) 1854 3348 w
+10 /LucidaTypewriter f
+(sam) 1988 3348 w
+10 /LucidaSansUnicode00 f
+(is) 2240 3348 w
+(fairly) 2356 3348 w
+(straightforward.) 2635 3348 w
+(More) 3484 3348 w
+(interesting) 3764 3348 w
+(is) 4322 3348 w
+(how) 4438 3348 w
+(the) 4674 3348 w
+(two) 4865 3348 w
+(halves) 720 3468 w
+(of) 1070 3468 w
+(the) 1213 3468 w
+(editor) 1413 3468 w
+(stay) 1745 3468 w
+(synchronized) 1985 3468 w
+(when) 2677 3468 w
+(either) 2979 3468 w
+(half) 3305 3468 w
+(may) 3533 3468 w
+(initiate) 3778 3468 w
+(a) 4156 3468 w
+(change.) 4255 3468 w
+(This) 4711 3468 w
+(is) 4960 3468 w
+(achieved) 720 3588 w
+(through) 1179 3588 w
+(a) 1601 3588 w
+(data) 1691 3588 w
+(structure) 1936 3588 w
+(that) 2409 3588 w
+(organizes) 2635 3588 w
+(the) 3144 3588 w
+(communications) 3334 3588 w
+(and) 4167 3588 w
+(is) 4383 3588 w
+(maintained) 4499 3588 w
+(in parallel by both halves.) 720 3708 w
+(The) 970 3864 w
+(last) 1188 3864 w
+(part) 1397 3864 w
+(of) 1631 3864 w
+(the) 1767 3864 w
+(paper) 1960 3864 w
+(chronicles) 2276 3864 w
+(the) 2807 3864 w
+(writing) 3000 3864 w
+(of) 3375 3864 w
+10 /LucidaTypewriter f
+(sam) 3511 3864 w
+10 /LucidaSansUnicode00 f
+(and) 3765 3864 w
+(discusses) 3983 3864 w
+(the) 4486 3864 w
+(lessons) 4679 3864 w
+(that were learned through its development and use.) 720 3984 w
+(The) 970 4140 w
+(paper) 1193 4140 w
+(is) 1513 4140 w
+(long,) 1635 4140 w
+(but) 1923 4140 w
+(is) 2127 4140 w
+(composed) 2249 4140 w
+(largely) 2791 4140 w
+(of) 3158 4140 w
+(two) 3299 4140 w
+(papers) 3517 4140 w
+(of) 3889 4140 w
+(reasonable) 4030 4140 w
+(length:) 4602 4140 w
+(a) 4985 4140 w
+(description) 720 4260 w
+(of) 1306 4260 w
+(the) 1447 4260 w
+(user) 1645 4260 w
+(interface) 1898 4260 w
+(of) 2365 4260 w
+10 /LucidaTypewriter f
+(sam) 2506 4260 w
+10 /LucidaSansUnicode00 f
+(and) 2765 4260 w
+(a) 2988 4260 w
+(discussion) 3086 4260 w
+(of) 3639 4260 w
+(its) 3780 4260 w
+(implementation.) 3939 4260 w
+(They) 4807 4260 w
+(are) 720 4380 w
+(combined) 913 4380 w
+(because) 1433 4380 w
+(the) 1869 4380 w
+(implementation) 2066 4380 w
+(is) 2870 4380 w
+(strongly) 2992 4380 w
+(influenced) 3429 4380 w
+(by) 3978 4380 w
+(the) 4135 4380 w
+(user) 4332 4380 w
+(interface,) 4584 4380 w
+(and vice versa.) 720 4500 w
+10 /LucidaSans-Demi f
+(The Interface) 720 4740 w
+10 /LucidaTypewriter f
+(Sam) 720 4896 w
+10 /LucidaSansUnicode00 f
+(is a text editor for multiple files.) 968 4896 w
+(File names may be provided when it is invoked:) 2608 4896 w
+9 /LucidaTypewriter f
+(sam) 920 5066 w
+(file1) 1180 5066 w
+(file2) 1570 5066 w
+(...) 1960 5066 w
+10 /LucidaSansUnicode00 f
+(and) 720 5246 w
+(there) 949 5246 w
+(are) 1250 5246 w
+(commands) 1451 5246 w
+(to) 2029 5246 w
+(add) 2176 5246 w
+(new) 2406 5246 w
+(files) 2650 5246 w
+(and) 2902 5246 w
+(discard) 3132 5246 w
+(unneeded) 3535 5246 w
+(ones.) 4065 5246 w
+(Files) 4409 5246 w
+(are) 4678 5246 w
+(not) 4880 5246 w
+(read) 720 5366 w
+(until) 975 5366 w
+(necessary) 1234 5366 w
+(to) 1749 5366 w
+(complete) 1887 5366 w
+(some) 2373 5366 w
+(command.) 2674 5366 w
+(Editing) 3256 5366 w
+(operations) 3632 5366 w
+(apply) 4188 5366 w
+(to) 4489 5366 w
+(an) 4626 5366 w
+(inter\255) 4782 5366 w
+(nal) 720 5486 w
+(copy) 907 5486 w
+(made) 1175 5486 w
+(when) 1483 5486 w
+(the) 1781 5486 w
+(file) 1977 5486 w
+(is) 2169 5486 w
+(read;) 2290 5486 w
+(the) 2578 5486 w
+(UNIX) 2774 5486 w
+(file) 3050 5486 w
+(associated) 3243 5486 w
+(with) 3794 5486 w
+(the) 4041 5486 w
+(copy) 4238 5486 w
+(is) 4507 5486 w
+(changed) 4629 5486 w
+(only) 720 5606 w
+(by) 957 5606 w
+(an) 1105 5606 w
+(explicit) 1255 5606 w
+(command.) 1643 5606 w
+(To simplify the discussion, the internal copy is here called) 2217 5606 w
+(a) 720 5726 w
+10 /LucidaSans-Italic f
+(file) 807 5726 w
+10 /LucidaSansUnicode00 f
+(, while the disc-resident original is called a) 956 5726 w
+10 /LucidaSans-Italic f
+(disc file.) 3085 5726 w
+10 /LucidaTypewriter f
+(Sam) 970 5882 w
+10 /LucidaSansUnicode00 f
+(is) 1222 5882 w
+(usually) 1338 5882 w
+(connected) 1715 5882 w
+(to) 2251 5882 w
+(a) 2386 5882 w
+(bitmap) 2478 5882 w
+(display) 2855 5882 w
+(that) 3234 5882 w
+(presents) 3462 5882 w
+(a) 3916 5882 w
+(cut-and-paste) 4008 5882 w
+(editor) 4753 5882 w
+(driven) 720 6002 w
+(by) 1062 6002 w
+(the) 1216 6002 w
+(mouse.) 1410 6002 w
+(In) 1836 6002 w
+(this) 1966 6002 w
+(mode,) 2183 6002 w
+(the) 2526 6002 w
+(command) 2719 6002 w
+(language) 3235 6002 w
+(is) 3716 6002 w
+(still) 3834 6002 w
+(available:) 4047 6002 w
+(text) 4540 6002 w
+(typed) 4769 6002 w
+(in) 720 6122 w
+(a) 844 6122 w
+(special) 932 6122 w
+(window,) 1299 6122 w
+(called) 1734 6122 w
+(the) 2051 6122 w
+10 /LucidaTypewriter f
+(sam) 2240 6122 w
+10 /LucidaSans-Italic f
+(window,) 2490 6122 w
+10 /LucidaSansUnicode00 f
+(is) 2921 6122 w
+(interpreted) 3035 6122 w
+(as) 3610 6122 w
+(commands) 3750 6122 w
+(to) 4313 6122 w
+(be) 4445 6122 w
+(executed) 4598 6122 w
+(in) 720 6242 w
+(the) 858 6242 w
+(current) 1060 6242 w
+(file.) 1457 6242 w
+(Cut-and-paste) 1718 6242 w
+(editing) 2490 6242 w
+(may) 2874 6242 w
+(be) 3120 6242 w
+(used) 3285 6242 w
+(in) 3563 6242 w
+(any) 3700 6242 w
+(window) 3915 6242 w
+10 /LucidaSansUnicode20 f
+(\024) 4330 6242 w
+10 /LucidaSansUnicode00 f
+(even) 4476 6242 w
+(in) 4748 6242 w
+(the) 4885 6242 w
+10 /LucidaTypewriter f
+(sam) 720 6362 w
+10 /LucidaSansUnicode00 f
+(window) 970 6362 w
+(to) 1373 6362 w
+(construct) 1505 6362 w
+(commands.) 1992 6362 w
+(The) 2619 6362 w
+(other) 2835 6362 w
+(mode) 3127 6362 w
+(of) 3435 6362 w
+(operation,) 3568 6362 w
+(invoked) 4100 6362 w
+(by) 4516 6362 w
+(starting) 4666 6362 w
+10 /LucidaTypewriter f
+(sam) 720 6482 w
+10 /LucidaSansUnicode00 f
+(with) 972 6482 w
+(the) 1213 6482 w
+(option) 1404 6482 w
+10 /LucidaTypewriter f
+(-d) 1753 6482 w
+10 /LucidaSansUnicode00 f
+(\(for) 1933 6482 w
+10 /LucidaSansUnicode20 f
+(\030) 2141 6482 w
+10 /LucidaSansUnicode00 f
+(no) 2173 6482 w
+(download) 2332 6482 w
+10 /LucidaSansUnicode20 f
+(\031) 2803 6482 w
+10 /LucidaSansUnicode00 f
+(\),) 2835 6482 w
+(does) 2936 6482 w
+(not) 3203 6482 w
+(use) 3399 6482 w
+(the) 3604 6482 w
+(mouse) 3795 6482 w
+(or) 4154 6482 w
+(bitmap) 4291 6482 w
+(display,) 4666 6482 w
+(but) 720 6602 w
+(still) 922 6602 w
+(permits) 1137 6602 w
+(editing) 1547 6602 w
+(using) 1925 6602 w
+(the) 2231 6602 w
+(textual) 2426 6602 w
+(command) 2804 6602 w
+(language,) 3323 6602 w
+(even) 3839 6602 w
+(on) 4106 6602 w
+(an) 4270 6602 w
+(ordinary) 4428 6602 w
+(ter\255) 4873 6602 w
+(minal, interactively or from a script.) 720 6722 w
+(The) 970 6878 w
+(following) 1194 6878 w
+(sections) 1684 6878 w
+(describe) 2125 6878 w
+(first) 2578 6878 w
+(the) 2816 6878 w
+(command) 3014 6878 w
+(language) 3536 6878 w
+(\(under) 4023 6878 w
+10 /LucidaTypewriter f
+(sam -d) 4384 6878 w
+10 /LucidaSansUnicode00 f
+(and) 4860 6878 w
+(in) 720 6998 w
+(the) 862 6998 w
+10 /LucidaTypewriter f
+(sam) 1068 6998 w
+10 /LucidaSansUnicode00 f
+(window\),) 1335 6998 w
+(and) 1820 6998 w
+(then) 2051 6998 w
+(the) 2319 6998 w
+(mouse) 2525 6998 w
+(interface.) 2898 6998 w
+(These) 3436 6998 w
+(two) 3774 6998 w
+(languages) 3999 6998 w
+(are) 4543 6998 w
+(nearly) 4745 6998 w
+(independent, but connect through the) 720 7118 w
+10 /LucidaSans-Italic f
+(current text,) 2605 7118 w
+10 /LucidaSansUnicode00 f
+(described below.) 3245 7118 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 2 2
+%%Page: 3 3
+/saveobj save def
+mark
+3 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 3 \255) 2783 480 w
+10 /LucidaSans-Demi f
+(The Command Language) 720 840 w
+10 /LucidaSansUnicode00 f
+(A) 720 996 w
+(file) 836 996 w
+(consists) 1034 996 w
+(of) 1474 996 w
+(its) 1619 996 w
+(contents,) 1783 996 w
+(which) 2279 996 w
+(are) 2607 996 w
+(an) 2806 996 w
+(array) 2970 996 w
+(of) 3261 996 w
+(characters) 3407 996 w
+(\(that) 3955 996 w
+(is,) 4227 996 w
+(a) 4387 996 w
+(string\);) 4490 996 w
+(the) 4885 996 w
+10 /LucidaSans-Italic f
+(name) 720 1116 w
+10 /LucidaSansUnicode00 f
+(of) 1023 1116 w
+(the) 1155 1116 w
+(associated) 1344 1116 w
+(disc) 1887 1116 w
+(file;) 2115 1116 w
+(the) 2332 1116 w
+10 /LucidaSans-Italic f
+(modified) 2521 1116 w
+(bit) 2975 1116 w
+10 /LucidaSansUnicode00 f
+(that) 3136 1116 w
+(states) 3360 1116 w
+(whether) 3680 1116 w
+(the) 4104 1116 w
+(contents) 4292 1116 w
+(match) 4742 1116 w
+(those) 720 1236 w
+(of) 1021 1236 w
+(the) 1153 1236 w
+(disc) 1342 1236 w
+(file;) 1571 1236 w
+(and) 1789 1236 w
+(a) 2004 1236 w
+(substring) 2094 1236 w
+(of) 2587 1236 w
+(the) 2720 1236 w
+(contents,) 2910 1236 w
+(called) 3394 1236 w
+(the) 3712 1236 w
+10 /LucidaSans-Italic f
+(current) 3902 1236 w
+(text) 4298 1236 w
+10 /LucidaSansUnicode00 f
+(or) 4516 1236 w
+10 /LucidaSans-Italic f
+(dot) 4653 1236 w
+10 /LucidaSansUnicode00 f
+(\(see) 4844 1236 w
+(Figures) 720 1356 w
+(1) 1116 1356 w
+(and) 1220 1356 w
+(2\).) 1441 1356 w
+(If) 1642 1356 w
+(the) 1749 1356 w
+(current) 1945 1356 w
+(text) 2336 1356 w
+(is) 2568 1356 w
+(a) 2689 1356 w
+(null) 2785 1356 w
+(string,) 3008 1356 w
+(dot) 3363 1356 w
+(falls) 3565 1356 w
+(between) 3807 1356 w
+(characters.) 4255 1356 w
+(The) 4859 1356 w
+10 /LucidaSans-Italic f
+(value) 720 1476 w
+10 /LucidaSansUnicode00 f
+(of) 1017 1476 w
+(dot) 1153 1476 w
+(is) 1352 1476 w
+(the) 1471 1476 w
+(location) 1665 1476 w
+(of) 2089 1476 w
+(the) 2226 1476 w
+(current) 2420 1476 w
+(text;) 2809 1476 w
+(the) 3071 1476 w
+10 /LucidaSans-Italic f
+(contents) 3265 1476 w
+10 /LucidaSansUnicode00 f
+(of) 3713 1476 w
+(dot) 3850 1476 w
+(are) 4050 1476 w
+(the) 4241 1476 w
+(characters) 4435 1476 w
+(it) 4974 1476 w
+(contains.) 720 1596 w
+10 /LucidaTypewriter f
+(Sam) 1235 1596 w
+10 /LucidaSansUnicode00 f
+(imparts) 1494 1596 w
+(to) 1906 1596 w
+(the) 2047 1596 w
+(text) 2244 1596 w
+(no) 2477 1596 w
+(two-dimensional) 2642 1596 w
+(interpretation) 3507 1596 w
+(such) 4215 1596 w
+(as) 4483 1596 w
+(columns) 4631 1596 w
+(or) 720 1716 w
+(fields;) 856 1716 w
+(text) 1187 1716 w
+(is) 1412 1716 w
+(always) 1526 1716 w
+(one-dimensional.) 1879 1716 w
+(Even) 2804 1716 w
+(the) 3062 1716 w
+(idea) 3251 1716 w
+(of) 3488 1716 w
+(a) 3620 1716 w
+10 /LucidaSansUnicode20 f
+(\030) 3709 1716 w
+10 /LucidaSansUnicode00 f
+(line) 3741 1716 w
+10 /LucidaSansUnicode20 f
+(\031) 3917 1716 w
+10 /LucidaSansUnicode00 f
+(of) 3983 1716 w
+(text) 4116 1716 w
+(as) 4342 1716 w
+(understood) 4483 1716 w
+(by) 720 1836 w
+(most) 876 1836 w
+(UNIX) 1159 1836 w
+(programs) 1435 1836 w
+10 /LucidaSansUnicode20 f
+(\024) 1943 1836 w
+10 /LucidaSansUnicode00 f
+(a) 2084 1836 w
+(sequence) 2180 1836 w
+(of) 2678 1836 w
+(characters) 2817 1836 w
+(terminated) 3358 1836 w
+(by) 3928 1836 w
+(a) 4084 1836 w
+(newline) 4180 1836 w
+(character) 4591 1836 w
+10 /LucidaSansUnicode20 f
+(\024) 720 1956 w
+10 /LucidaSansUnicode00 f
+(is only weakly supported.) 852 1956 w
+(The) 970 2112 w
+10 /LucidaSans-Italic f
+(current) 1197 2112 w
+(file) 1604 2112 w
+10 /LucidaSansUnicode00 f
+(is) 1799 2112 w
+(the) 1925 2112 w
+(file) 2126 2112 w
+(to) 2323 2112 w
+(which) 2467 2112 w
+(editing) 2794 2112 w
+(commands) 3179 2112 w
+(refer.) 3755 2112 w
+(The) 4097 2112 w
+(current) 4325 2112 w
+(text) 4722 2112 w
+(is) 4960 2112 w
+(therefore) 720 2232 w
+(dot) 1208 2232 w
+(in) 1410 2232 w
+(the) 1542 2232 w
+(current) 1738 2232 w
+(file.) 2129 2232 w
+(If) 2385 2232 w
+(a) 2492 2232 w
+(command) 2588 2232 w
+(doesn) 3107 2232 w
+10 /LucidaSansUnicode20 f
+(\031) 3400 2232 w
+10 /LucidaSansUnicode00 f
+(t) 3432 2232 w
+(explicitly) 3509 2232 w
+(name) 3985 2232 w
+(a) 4291 2232 w
+(particular) 4386 2232 w
+(file) 4889 2232 w
+(or) 720 2352 w
+(piece) 855 2352 w
+(of) 1143 2352 w
+(text,) 1274 2352 w
+(the) 1530 2352 w
+(command) 1718 2352 w
+(is) 2229 2352 w
+(assumed) 2342 2352 w
+(to) 2806 2352 w
+(apply) 2937 2352 w
+(to) 3233 2352 w
+(the) 3365 2352 w
+(current) 3554 2352 w
+(text.) 3938 2352 w
+(For) 4227 2352 w
+(the) 4417 2352 w
+(moment,) 4606 2352 w
+(ignore the presence of multiple files and consider editing a single file.) 720 2472 w
+cleartomark
+saveobj restore
+%ps_include: begin
+save
+/ed {exch def} def
+{} /showpage ed
+{} /copypage ed
+{} /erasepage ed
+{} /letter ed
+currentdict /findfont known systemdict /findfont known and {
+ /findfont systemdict /findfont get def
+} if
+36 dict dup /PS-include-dict-dw ed begin
+/context ed
+count array astore /o-stack ed
+%ps_include: variables begin
+/llx 23 def
+/lly 241 def
+/urx 587.48 def
+/ury 550.6 def
+/w 0 def
+/o 0 def
+/s 0 def
+/cx 2880 def
+/cy -3972 def
+/sx 4320 def
+/sy 2520 def
+/ax .5 def
+/ay .5 def
+/rot 0 def
+%ps_include: variables end
+{llx lly urx ury} /bbox ed
+{newpath 2 index exch 2 index exch dup 6 index exch
+ moveto 3 {lineto} repeat closepath} /boxpath ed
+{dup mul exch dup mul add sqrt} /len ed
+{2 copy gt {exch} if pop} /min ed
+{2 copy lt {exch} if pop} /max ed
+{transform round exch round exch A itransform} /nice ed
+{6 array} /n ed
+n defaultmatrix n currentmatrix n invertmatrix n concatmatrix /A ed
+urx llx sub 0 A dtransform len /Sx ed
+0 ury lly sub A dtransform len /Sy ed
+llx urx add 2 div lly ury add 2 div A transform /Cy ed /Cx ed
+rot dup sin abs /S ed cos abs /C ed
+Sx S mul Sy C mul add /H ed
+Sx C mul Sy S mul add /W ed
+sy H div /Scaley ed
+sx W div /Scalex ed
+s 0 eq {Scalex Scaley min dup /Scalex ed /Scaley ed} if
+sx Scalex W mul sub 0 max ax 0.5 sub mul cx add /cx ed
+sy Scaley H mul sub 0 max ay 0.5 sub mul cy add /cy ed
+urx llx sub 0 A dtransform exch atan rot exch sub /rot ed
+n currentmatrix initgraphics setmatrix
+cx cy translate
+Scalex Scaley scale
+rot rotate
+Cx neg Cy neg translate
+A concat
+bbox boxpath clip newpath
+w 0 ne {gsave bbox boxpath 1 setgray fill grestore} if
+end
+gsave
+%ps_include: inclusion begin
+ %!PS-Adobe-2.0
+ %%Version: 3.3.2
+ %%DocumentFonts: (atend)
+ %%Pages: (atend)
+ %%EndComments
+ %%EndProlog
+ %%BeginSetup
+mark
+ %%Patch from lp
+ %%EndPatch from lp
+
+/picstr 98 string def
+23 241 translate
+564.48 309.60 scale
+
+784 430 1 [784 0 0 -430 0 430]
+{currentfile picstr readhexstring pop} image
+
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+02001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfffffffe7fffffffe227ff0feffffffffffffff3ff87ff11ffcffffffff
+fffffffe7fe7ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffde01ffffe7fffffffe227fe7f9f833900fffffef3ff3e0711ffcffdffff1
+e0fffffe7fe7ffe7f3e0ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfffffe7fffffffe233fe7f3f3b39e7fffffcf9ff3e7311ffcff9fffe9
+ce7fffffffe7ffc7e3ce7fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfe3ffe4f879cfff773f80f3e7f3de7f0e73019fc0673bbffc8e03ffe9
+ce7ff3907f07ffa7d3ce7fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfe3ffe27339cfff779fe7e7e7f25e7e6673cfcff3e73bbffc479fffd9
+ce7ff3de7e67ff67b3fe7fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfe3ffe7279cdfff779fe7e7e7f25e7ce737cfcff3e73bbffce79fffd9
+ce7ff25e7ce7ffe7f3fe7fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02ffdfcfffffe7279c3fffffcfe7e7e7f25e7ce70fcfe7f3e67ffffce79fffb9
+ce7ff25e7ce7ffe7f3fcffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfffffe7279f7fffffcfe7e7e7f93e7c07dfcfe7f3e0fffffce79fff80
+ce7ff25e7ce7ffe7f3f9ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfffffe7279e1fffffe7e7e7e7f93e7cff87cff3f3e7fffffce79fff80
+ce7ff93e7ce7ffe7f3f3ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe3ffe7279d9fffffe7e7e7e7f93e7cff67cff3f3e7fffffce79ffff9
+ce7ff93e7ce7ffe7f3e7ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe3ffe67339cffffff3e7e7f3b93e7e6673cff9f3e7fffffce79ffff9
+ce7ff93e7e47ffe7f3c07fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe3ffe0f879cffffff381f3f8393e7f0e73e1f9c0e7fffffce7c3ffe0
+e0fff9300f27ff81c0c07fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889ffffffffffffffffffff9fff3fffffffffffffffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221ffffffffffffffffffff9fff9fffffffffffffffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889ffffffffffffffffffffffffeffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffe7fffffffe227ff0feffffffffffffff3ff87ff11ffcffffffff
+fffffffe7fe7fffffffffffcfffcffffffffffffffffffefffffffffffffffff
+fffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e07ffffe7fffffffe227fe7f9f833903fffffff3ff3e0711ffcffdffff1
+e0fffffe7fe7ff83c1fffffcff7cfffffffffffffeffff9c03ffffffffffff3e
+0fffff00ffffffffff3fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e73ffffe7fffffffe233fe7f3f3b3939fffffff9ff3e7311ffcff9fffe9
+ce7fffffffe7ff399cfffffffe7cfffffffffffffcffff3f9ffffffffffffe3c
+e7ffffe7ffffffffff9fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e73e3ffe4f879cfff773f80f3e7f3d39e0f07279fc0673bbffc8e03ffe9
+ce7ff3907f07ff399cffe720f80c8fffff9cfff0701fff3f9fffe1ffe73cfd3c
+ffffffe7fff87ff9cf9fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e73e3ffe27339cfff779fe7e7e7f2539ce67313cff3e73bbffc479fffd9
+ce7ff3de7e67ff399cffe7bcfe7c47ffff9effe73cfffe7f9fffccffe73cfb3c
+ffffffe7fff33ff9cfcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e77e3ffe7279cdfff779fe7e7e7f253bfe67f39cff3e73bbffce79fffd9
+ce7ff25e7ce7ff399cffe4bcfe7ce7ffff92ffff3cfffe7f9fff9cfff37cff3c
+ffffffe7ffe73ff9efcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e0fffffe7279c3fffffcfe7e7e7f2507fe63f39e7f3e67ffffce79fffb9
+ce7ff25e7ce7ff819cffe4bcfe7ce7ffff92ffff3cfffe7f9fff9cfff0e01f3c
+0fffffe7ffe73ffccfcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e67ffffe7279f7fffffcfe7e7e7f9333e070739e7f3e0fffffce79fff80
+ce7ff25e7ce7fff99cffe4bcfe7ce7ffff92fff03cfffe7f9fff80fffde01f3c
+e7ffffe7ffe03ffcdfcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e67ffffe7279e1fffffe7e7e7e7f9333ce7e339f3f3e7fffffce79fff80
+ce7ff93e7ce7fff99cfff27cfe7ce7ffffc9ffe73cfffe7f9fff9ffff87cff3c
+e7ffffe7ffe7fffcdfcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e73e3ffe7279d9fffffe7e7e7e7f9339ce7f339f3f3e7fffffce79ffff9
+ce7ff93e7ce7fff99cfff27cfe7ce7ffc7c9ffe73cfffe7f9fc79ff1f67cff3c
+e78fffe7f1e7fc7e3fcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e73e3ffe67339cffffff3e7e7f3b9339cc67333f9f3e7fffffce79ffff9
+ce7ff93e7e47ff399cfff27cfe7ce7ffc7c9ffe63cfffe7f9fc7ccf1e73cff3c
+e78fffe7f1f33c7e3fcfffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e71e3ffe0f879cffffff381f3f839338e270707f9c0e7fffffce7c3ffe0
+e0fff9300f27ff83c1fff2601f0ce7ffc7c9fff13e1fff3f9fc7e1f1e73ffc0e
+0f8fffe7f1f87c7f3f9fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889ffffffffffffffffffff9fff3ffffffffffff3ffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffff
+ffcfffffffffffff7f9fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221ffffffffffffffffffff9fff9ffffffffffff3ffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffff
+ffcffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889ffffffffffffffffffffffffeffffffffffff3fffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffff
+ff9ffffffffffffc7effffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889e0fe7ffffffff0fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe7fffffffe7fffffffff807fffffffbfffff03ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcffffffffffe7ffffffffff3ffffffff3fffff39ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcf07c8f87ff80c670e5bfff3fffc3ffc070fff39ffe73fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe7c4733ffe7e066601fff3fff99fff3e67ff39ffe7bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe7ce673ffe7e64f249fff3fff39fff3cf3ff3bffe4bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe7ce673ffe7e7cf249fff3fff39fff3cf3ff07ffe4bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe7ce603ffe7e7cf249fff3fff01fff3cf3ff33ffe4bfffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe7ce67fffe7e7cf249fff3fff3ffff3cf3ff33fff27fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fcfe7ce67fffe7e7cf249fff3f8f3ffff3cf3ff39f1f27fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fcfe7ce733ffe7e7e6649fff3f8f99fff3e67ff39f1f27fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221e0100ce787ff81c1f0e49fff3f8fc3fff870fff38f1f27fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff80000000800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c00000000001fffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff3f80000001800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c00000000001fff87ffffffffffffffffffffcfffcfffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0f80078c67f00000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c00000000001fff3fffffffffc0ffffffffffcfffcffdfffc1f8fffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff1f800ccc61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c00000000001fff3fffffffffce7fffffffffffffcff9fff9cf4fffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff3f8018cc61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c7c73398f0c7ffc0633872dffce7ffe1ffe320fe0c8e03ff9cf4fffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7d80180c61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889cc63f1f998c3fff3f033300ffce7ffccfff03cfccc479ffffcecfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffff980180c61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c063319b0cdbfff3f327924ffcefff9cfff33cf9cce79ffffcecfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffef080180c61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c06301830cdbfff3f3e7924ffc1fff9cfff3fcf9cce79ffff9dcfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffce080180c61800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c7e301830cdbfff3f3e7924ffccfff80fff3fcf9cce79ffff3c07ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fff8c0000ccee1800000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889cc6301830c6dfff3f3e7924ffccfff9ffff3fcf9cce79fffe7c07ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fff08000078760f00000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221cc6301830c6dfff3f3e7924ffce7c79ffff3fcf9cce79fffcffcfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe00000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889cce30181986dfff3f3f3324ffce7c7ccfff3fcfc8ce79fff80fcfffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffc10000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c767c3e0f06dffc0e0f8724ffce3c7e1ffe0e01e4ce7c3ff80f07ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff837ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c00000000001ffffffffffffffffffffffffffffcffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffc77ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221c00000000001fffffffffffffffffffffffffff9cffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffef7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889c00000000001fffffffffffffffffffffffffffc1ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fffffffff7ffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffe7ffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f3ffffffffcffffff9fffffc47ffffffcffffffffc47ffffe7ffe7fffff
+fffffffffffffffffcfffffe1ff83fffffffffffffffffffffffffffffffffff
+ffff7fc9f078380f0ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f3ffffffffcffffff9fffffc47dfffffcfffffff7c47ffffe7fbe7fffff
+ffffffff7ffffffffcfffffcffff3ffffff7ffffffffffffffffffffffffffff
+ffff7fc4e7339e7e67feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f3fffffffffffffffffffffc479fffffcffffffe7c47fffffff3e7fffff
+fffffffe7ffffffffcfffffcffff3fffffe7ffffffffffffffffffffffffffff
+ffff7fce7f33fe7ce7feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f27c3ce7fe0f91ce41f83ffeee0387ffc8f0f8380eefff3907c0647ffff
+ce7ff8380fff8723e0fff0f01fff3f078380fff07198ce1e73ffffffffffffff
+ffff7fce7f31fe7ce7feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f1399ce7ffcf88ce79f39ffeef9f33ffc466739e7eefff3de7f3e23ffff
+cf7ff39e7fff3311ccffe67cffff3e7339e7ffe7381c0cce7bffffffffffffff
+ffff7fce70383e7c07feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f393ce6fffcf9ccf79f3fffeef9e79ffce4f33fe7eefff25e7f3e73ffff
+c97fff9e7ffe73399cffcf3cffff3ff33fe7ffff399cc9e64bffffffffffffff
+ffff7fce673f1e7cfffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f393ce1fffcf9ce679f1ffffff9e79ffce4f31fe7fffff25e7f3e73ffff
+c97fff9e7ffe73399cffcf3cffff3ff31fe7ffff39fcf9e64bffffffffffffff
+ffff7fce673f9e7cfffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f393cfbfffcf9ce6f9f83fffff9e79ffce4f383e7fffff25e7f3e73ffff
+c97ff81e7ffe03399cffcf3cffff3f0383e7fff039fcf9e64bffffffffffffff
+ffff7fcce6339e7e67feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f393cf0fffcf9ce6f9ff1fffff9e79ffce4f3f1e7fffff93e7f3e73ffff
+e4fff39e7ffe7f399cffcf3cffff3e73f1e7ffe739fcf9e727ffffffffffffff
+ffff7fc1f1383f0f0ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f393cecfffcf9cf1f9ff9fffff9e79ffce4f3f9e7fffff93e7f3e73ffe3
+e4fff39e7ffe7f399cffcf3cffff3e73f9e7ffe739fcf9e727ffffffffffffff
+ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889f3399ce7ffcf9cf1f9f39fffff9f33ffce66739e7fffff93e7f3e73ffe3
+e4fff31e7fff3339c8ffe67cffff3e6339e7ffe639fcfccf27ffffffffffffff
+ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221f07c3ce7fe019cf1c0383fffffc387ffce70f83f0fffff9300f8673ffe3
+e4fff89f0fff8739e4fff0f03ff8071383f0fff130783e1f27ffffffffffffff
+ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fffffffffff87feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fffffffffff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe0e47838cc07feffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fce62339c0f3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fcfe73f9ccf3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fc7e73f9cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe0e7381cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffc67339cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffe67339cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+02001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fce67331cff3ffeffffffffffffffffffffffffffffffffffffffffffff
+ff81
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007fe0e738983c0ffe00000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007ffffffffffffffe00000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007ffffffffffffffe00000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+00007ffffffffffffffe00000000000000000000000000000000000000000000
+0001
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffc1fffffcffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9fffffcffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffe1e7ffffffffff3ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9fffffcffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffcfe7fff03fffff3ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9f87c3ce7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffcffffff03ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9f3399cefffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffff0107f077fff9383f87fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793ccdfffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffcfe7e677fff89f3f33fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793ccbfffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffcfe7ce71fff9cf3e73fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793cc3fffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fff80fffffcfe7ce7c7ff9cf3e7ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793cc9fffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff80fffffcfe7ce7f3ff9cf3e7ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9e793cccfffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffcfe7ce7f3ff9cf3e7ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fff9f3399ce7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffff1fffcfe7ce7f3c79cf3e7ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffc0387c3ce7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffff1fffcfe7e4673c799f3f33fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffff1fff0300f2707c78380787fffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffe7ffff9fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffce7ffff9fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffffe0fffff9fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffefffffffefffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffcfffffffe7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ff9cb7399cf3ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ff3ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ff3c03399cf9ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ff3c1c6633879cfffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe7c9339cdfcffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fe79ce0703339efffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fc7c9339c3fc7feffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fe7fce67327992fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe7c9339f7fcffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcffce7f3e7992fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ff3c9339e1f9ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfc0e7f3e7992fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ff9c9339d9f3ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f9f9ce7f3e79c9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffcc93119ce7ffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f9f9ce7f3e79c9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffec93899cefffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f3f98e7f3f33c9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3fc4c1e0f87c9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7ffffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe7fffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fe7fffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fcffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7fcf07198ce1e73effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7f9e7381c0cce7beffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7f9ff399cc9e64beffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7f3ff39fcf9e64beffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7f3f039fcf9e64beffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7e7e739fcf9e727effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7e7e739fcf9e727effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7cfe639fcfccf27effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff7cff130783e1f27effffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff79fffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff79fffffffffffffeffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221dffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+00000000000000000000000000000000000000000000077fef81fffff3ffffff
+fceec00c0303e633f060300060060fc77ffe7feffff8f07fffff3ff3fff3f9f0
+7fffff3fdf3fffffffffffffffdfff80e07ff01c1f8ffffffffffffffe000000
+0001
+0ffffffffffffffffffffffffffffffffffffffffffff77fef9ffffff3ffffff
+fcee600c060626330000300030060c677ffe7fcffff4e73ffffffff3ffe3f1e7
+3fffffff9f3fffffffffffffff9fff80e07ff019cf4ffffffffffffffeffffff
+ffe1
+0ffffffffffffffffffffffffffffffffffffffffffff77fef9ff1fff27c3ce7
+fc44603f860c061303e0301e301fcc622ffe4701fff4e73ff9c83f83ffd3e9e7
+3ff9c83e0323ffffe4739ffe0e03fffeefffffd9cf4ffffffffffffffeffffff
+ffe1
+0e001ffffffffffffffffffffffffffffffffffffffff77fef9ff1fff1399ce7
+fc44300c0c0c06d30060303318060c622ffe23cfffece73ff9ef3f33ffb3d9ff
+3ff9ef3f9f11ffffe233dffce79ffffcefffff99cecffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffcffffe7fffff77fef9ff1fff393ce6f
+fc44300c0c0c06d30060306318060c622ffe73cfffece73ff92f3e73fff3f9ff
+3ff92f3f9f39ffffe7325fffe79ffff9e3ffff39cecffffffffffffffeffffff
+ffe1
+0e221fffffffffffffffbffffffffffffcffffe7fffff77fef83fffff393ce1f
+fc00180c0c0c06d3e06030630c060cc00ffe73cfffdce73ff92f3e73fff3f9fe
+7ff92f3f9f39ffffe7325fffe79ffff3f8fffe79cdcffffffffffffffeffffff
+ffe1
+0e889fffffffffffffff3fffffffffffffffffe7fffff77fef9ffffff393cfbf
+fc00180c0c0c03630060307f0c060f800ffe73cfffc0673ff92f3e73fff3f9fc
+fff92f3f9f39ffffe7325ffe079fffe7fe7ffcf9cc07fffffffffffffeffffff
+ffe1
+0e221f19e1f0673c3c1c0707ffc1ffe720f91f070f39f77fef9ffffff393cf0f
+fc000c0c0c0c03630060306006060c000ffe73cfffc0673ffc9f3e73fff3f9f9
+fffc9f3f9f39ffffe7393ffce79fffe7fe7ffcf9cc07fffffffffffffeffffff
+ffe1
+0e889f81cce6673999cf3e73ff9cffe7bcf88e66673df77fef9ff1fff393cecf
+fc000c0c0c0c03630060306006060c000ffe73cffffce73ffc9f3e73fff3f9f3
+fffc9f3f9f39fff1e7393ffce79fffcffe78f9f9cfcffffffffffffffeffffff
+ffe1
+0e221f999cce673399ff3e7ffffcffe4bcf9cce4f325f77fef9ff1fff3399ce7
+fc00060c0c0623630060303303060c000ffe73cffffce73ffc9f3f23fff3f9e0
+3ffc9f3f9f39fff1e7393ffcc79fffcfce78f9f9cfcffffffffffffffeffffff
+ffe1
+0e889f9f9cce673398ff3e3ffffcffe4bcf9cce4f325f77fef9ff1fff07c3ce7
+fc00063f0603e36303fdfe1e031f8c000ffe73e1fff0707ffc980793ffc0e060
+3ffc9807c339fff1e7393ffe27c3ffcfe0f8f9fc1f07fffffffffffffeffffff
+ffe1
+0e221f9f80ce67301c1f3f07ffc0ffe4bcf9cce4f325f77fefffffffffffffff
+fc0003000600000000000000018000000fffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffcfffffffffffffffffffffeffffff
+ffe1
+0e889f9f9fce6733ff8f3fe3ff9cfff27cf9cce4f393f77fefffffffffffffff
+fc0003000300000000000000018000000fffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffcfffffffffffffffffffffeffffff
+ffe1
+0e221f9f9fce6733ffcf3ff3ff9cfff27cf9cce4f393f77fefffffffffffffff
+fc0000000080000000000000000000000fffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffff9fffffffffffffffffffffeffffff
+ffe1
+0e889f9fcce4623999cf3e73ff98fff27cf9ce466793f77fefffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221f07e1f2713c3c1f8707ffc4fff26019cf270f93f77fefffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffe7ffffffffffffffffffffffffffffffff77fefffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffe7ffffffffffffffffffffffffffffffff77fefffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffe7ffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fffe0ce7ffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fffcece7ffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fcf7ff23e1ce7fffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fc97ff11cccf7fffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fc97ff399cc97fffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fc97ff399cc97fffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fe4fff3980c97fffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fe4fff399fe4ffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fc79fe4fff399fe4fffc7fffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fc7cee4fff39cce4fffc7fffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fc7e0e4fff39e1e4fffc7fffffffffffffffffff7222f07f3ffffffff87
+fffffffffffffffffffffffffffff3ffff87c3ffffffffffff0f87ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fffffffffffffffffffe7fffffffffffffffffff7088fe7f3ffffffff3f
+ffffffffe0f83fffffffefffffe733ffff3f9fffffffe07ffe7f3fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fffffffffffffffffffe7fffffffffffffffffff7222fe7ffffffffff3f
+ffffffffe6739fffffffcfffffe733ffff3f9fffffffe73ffe7f3fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fffffffffffffffffffcffffffffffffffffffff7088fe783e47c3ffc06
+33872dffe7339ffc8fff01c3ffe23279cc0603c38cffe733980c078719ffe0ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fe7f3e2399fff3f
+033300ffe73f9ffc47ffcf99ffe23139cf3f9f99c0ffe7339e7f3f3381ffce7f
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fe7f3e7339fff3f
+327924ffe73f9ffce7ffcf3cffe93399cf3f9f39ccffe7739e7f3e7399ffcfff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fffe0ce7ffffffffffffffffffffffffffffffff7222fe7f3e7339fff3f
+3e7924ffe73f3ffce7ffcf3cffe93399cf3f9f39cfffe0f39e7f3e739fffc7ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fffcece7ffffffffffffffffffffffffffffffff7088fe7f3e7301fff3f
+3e7924ffe73e7ffce7ffcf3cffe93399cf3f9f01cfffe7739e7f3e039fffe0ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fcf7ff01e1c670f39fffffffffffffffffff7222fe7f3e733ffff3f
+3e7924ffe73cfffce7ffcf3cffe93399cf3f9f3fcfffe7339e7f3e7f9ffffc7f
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fc97fff9cce066739fffffffffffffffffff7088fe7f3e733ffff3f
+3e7924ffe739fe3ce7ffcf3cffef3399cf3f9f3fcff1e7339e7f3e7f9fe3fe7f
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fc97fff39ce64f39bfffffffffffffffffff7222fe7f3e7399fff3f
+3f3324ffe6701e3ce7ffcf99ffef33388f3f9f99cff1e7311e7f3f339fe3ce7f
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fc97ffe79ce7cf387fffffffffffffffffff7088f0080673c3ffc0e
+0f8724ffe0f01e3ce7ffe1c3ffef307c4c0e07c383f1e078981c0f8707e3e0ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fff9fe4fffcf80e7cf3effffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fff9fe4fff9f9fe7cf3c3fffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fc79fe4fff3f9fe7cf3b3fffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889fc7cee4fff3fcce7e6739fffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221fc7e0e4fff01e1c1f0f39fffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221ffffffffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221f878cfffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889f33c0fffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221e79ccfffffffffffffffffffffffffffffffffff7222fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889e79cffffffffffffffffffffffffffffffffffff7088fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221e79cffffffffffffffffffffffffffffffffffff7000fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889e79cffffffffffffffffffffffffffffffffffff7ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e221e79cffffffffffffffffffffffffffffffffffff7ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff
+ffe1
+0e889f33cffffffffffffffffffffffffffffffffffff0000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000ffffff
+ffe1
+0e221f8783ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffe0ce7ffffffffe7fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffcece7ffffffffe7fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fff9fcf7ff19e1e0e478393f0ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff9fc97ff81ccce6233989e67fffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfff9fc97ff999ccfe73f99cce7fffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0effdfff9fc97ff9f9cc7e73f99cce7fffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fff9fe4fff9f80e0e73819cc07fffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff9fe4fff9f9ffc673399ccfffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fc79fe4fff9f9ffe673399ccffffc7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fc7cee4fff9fccce6733199e67ffc7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fc7e0e4fff07e1e0e738983f0fffc7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffff9ffffffe7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffff9ffffffe7fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffff9ffffffcffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcffffffff3fffffffffffffffff3ffffffffffffffffffffffffffffff
+fffffe1fffffffffffcfffffffffffffff07fffffffffffffffffffffffffffc
+fffffffffff9fff9ffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcff7fffff3fffffffffffffffdf3ffffffffffffffffffffffffffffff
+fffffcfffffffffff7cfffffffffffffffe7fffffffffffffffff7fffffffffc
+fffffffffff9fef9ffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffe7fffff3fffffffffffffff9f3ffffffffffffffffffffffffffffff
+fffffcffffffffffe7cfffffffffffffffe7ffffffffffffffffe7fffffffffc
+fffffffffffffcf9ffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221e0f80fff8723c1c8f83c3c1ffe0323e1ffcb7879ce0f87ffe1ce63383c3
+c67ff018ce1cb7ff80c8f87ff9ce0e7383e7fff07198ce1e73ff80e1fff83ffc
+9f0f39ffce41f0191fffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfe7fff33119cc4733999cfff9f11ccffc03339cce733ffccce7033999
+e07ffcfc0ccc03ffe7c4733ff9cce67339e7ffe7381c0cce7bffe7ccfff39ffc
+4e6739ffcf79fcf88fffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcfe7ffe7339fcce673399ffff9f399cffc92799ccfe73ff9cce7333f3c
+e67ffcfcc9e493ffe7ce673ff9ccfe73f9e7ffff399cc9e64bffe79e7fff9ffc
+e4f39bffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfe7ffe7f39fcce673398ffff9f399cffc92799cc7e73ff9fce73f1f3c
+e7fffcfcf9e493ffe7ce673ff9cc7e73f9e7ffff39fcf9e64bffe79e7fff9ffc
+e4f387ffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcfe7ffe7f39c0ce67301c1fff9f3980ffc92799ce0e03ff9fce73f833c
+e7fffcfcf9e493ffe7ce603ff9ce0e7381e7fff039fcf9e64bffe79e7ff81ffc
+e4f3efffc979fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfe7ffe7f399cce6733ff8fff9f399fffc92799cfc67fff9fce73ff13c
+e7fffcfcf9e493ffe7ce67fff9cfc67339e7ffe739fcf9e727ffe79e7ff39ffc
+e4f3c3ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fcfe7ffe7f399cce6733ffcfff9f399fffc92799cfe67fff9fce73ff93c
+e7fffcfcf9e493ffe7ce67fff9cfe67339e7ffe739fcf9e727ffe79e7ff39ffc
+e4f3b3ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fcfe7fff333998ce723999cfff9f39ccffc933388ce733ffccc473f3999
+e7fffcfcfccc93ffe7ce733ff88ce62331e7ffe639fcfccf27ffe7ccfff31ffc
+ce6739ffe4f9fcf9cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221e01f0fff8739c4ce793c3c1fffc339e1ffc9387c4e0f87ffe1e260f83c3
+c1fff0383e1c93fff0ce787ffc4e0f138900fff130783e1f27fff0e1fff89ffc
+1f0f39ffe4c03e19cfffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffff3ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffff07ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffff0783fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffe7f3fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f83ffe0cb783e7f3fff838cc670f39fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f39ffce40339e7f3fff39c0e06673dfffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ff9ffcfc93f9e7f3ffff9cce64f325fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ff9ffc7c93f9e7f3ffff9cfe7cf325fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f81ffe0c9381e7f3fff81cfe7cf325fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f39fffc49339e7f3fff39cfe7cf393fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f39fffe49339e7f3fff39cfe7cf393e3fffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f31ffce49331e7f3fff31cfe7e6793e3fffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f89ffe0c938900807ff8983c1f0f93e3fffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
+000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffff3fe7fffffffffffffffffffffff3fffffffffffffffffffff
+fffffff9ffffffffffffff3fffffffffcffffe79ffffffffffffffffffc00003
+006000000000001ffffffffffffffffff07fffff3fffffffffffffffffffffff
+ffe1
+0e221f03fffffdf3fe7ffffffff7fffdffffffffdf3fffffffffffffffffffff
+fffffff9ffffffffffffff3fff7fffffcffffe79ffffffbfffffffffffc00003
+006010000000001ffffffffff7fffffffe7fffff3fffffffffffffffffffffff
+ffe1
+0e889fcffffff9f3ffffffffffe7fff9ffffffff9f3fffffffffffffffffffff
+fffffff9ffffffffffffff3ffe7ffffffffffe7fffffff3fffffffffffc00003
+000030000000001fffffffffe7fffffffe7fffff3fffffffffffffffffffffff
+ffe1
+0e221fcf91ffe032307e0fff8380e0e03c3ffffe0323e1ffcb7879ce0f87ff2d
+e0e73ff93f0fff39c1f0f83ff80e1ffe0f91f041fc3c1c0787ffc1c8ffc7c733
+63e0fe731f1ccc7ffc6787c380e0e47c1e7f0fff279cffffffffffffffffffff
+ffe1
+0e889fcf88fff9f11e7ce7ff39e7ce79f99fffff9f11ccffc03339cce733ff00
+ce673ff89e67ff399ce6733ffe7ccfffcf88e679f999cf3f33ff9cc47fcc63f3
+b060303f318fcc7ffe073399e7ce62399e7e67ff139cffffffffffffffffffff
+ffe1
+0e221fcf9cfff9f39e7cffff3fe7fe79f39fffff9f399cffc92799ccfe73ff24
+fe67bff9cce7ff399fce673ffe79e7ffcf9cce79f39fcf3e73fffcce7fc06333
+18603033018ccc3ffe667339e7fe67339e7ce7ff399effffffffffffffffffff
+ffe1
+0e889fcf9cfff9f39e7c7fff1fe7fe79f39fffff9f399cffc92799cc7e73ff24
+fe733ff9cce7ff398fce673ffe79e7ffcf9cce79f3ffcf3e73fffcce7fc06303
+18603030018c067ffe7e733fe7fe67339e7ce7ff39ccffffffffffffffffffff
+ffe1
+0e221fcf9cfff9f39e7e0fff83e7e079f01fffff9f3980ffc92799ce0e03ff24
+e0737ff9cc07ff39c1c0673ffe79e7ffcf9cce79f3fc0f3e03ffc0ce7fc7e303
+186030301f8c065ffe7e033fe7e067339e7c07ff39cdffffffffffffffffffff
+ffe1
+0e889fcf9cfff9f39e7fc7fff1e7ce79f3ffffff9f399fffc92799cfc67fff24
+ce737ff9ccffff39f8cfe73ffe79e7ffcf9cce79f3f9cf3e7fff9cce7fcc6303
+18603030318c065ffe7e7f3fe7ce67339e7cffff39cdffffffffffffffffffff
+ffe1
+0e221fcf9cfff9f39e7fe7fff9e7ce79f3fe3fff9f399fffc92799cfe67fff24
+ce78fff9ccffff39fccfe73ffe79e7ffcf9cce79f3f9cf3e7fff9cce7fcc6303
+18603030318c039ffe7e7f3fe7ce67339e7cffff39e3ffffffffffffffffffff
+ffe1
+0e889fcf9cfff9f39e7ce7ff39e7cc79f99e3fff9f39ccffc933388ce733ff24
+cc78fff99e67ff119ce6723ffe7ccfffcf9ce479f9998f3f33ff98ce7fcce303
+30603030338c039ffe7f3399e7cc67391e7e67ff33e3ffffffffffffffffffff
+ffe1
+0e221f039cfffc33900e0fff83f0e27c3c3e3fffc339e1ffc9387c4e0f87ff24
+e27cfff83f0fff89c1f0f93fff0e1ffe019cf2403c3c4f8787ffc4ce7fc767c3
+e3fc1e7c1d9f019ffc1f87c3f0e2673c900f0fff07f3ffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffff3fffffffffffffffffffffffffff
+fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
+000000000000011fffffffffffffffff9ffffffffff7ffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffff3fffffffffffffffffffffffffff
+fff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
+000000000000031ffffffffffffffff39fffffffffe7ffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffff
+fff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000
+000000000000071ffffffffffffffff83fffffffffc7ffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffe7fffffff9fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffe7ffffff83ffffffff3ffffffff3ffffffffffffff9ff
+fffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffe7fffffff9ffffdfeffffffff83fffffdffffffffffffff
+fffffffffffffffffffe7fffffff3ffffffff3ffffffff3fdffffffbfffef9ff
+fffffffffffffffe7fbfffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffff9ffff9fcffffffff39fffff9ffffffffffffff
+fffffffffffffffffffe7fffffff3fffffffffffffffffff9ffffff3fffcf9ff
+ffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f278cf0f078307c8f83ff93ce60301c3c8fff39ffe0e03ffc3c8f87ffe1
+e1e3323e1c67ff8391f07ff19e1f3f8783c183e47c1ff83e03ffc1c07ff0191f
+0fff8793c9f0f8307c0787ffe1e1e3323e1c67ffffffffffffffffffffffffff
+ffe1
+0e889f13c0e667339e7c4733ff89ce79fcf99c47fff9ffce79fff99c4733ffcc
+ccf0311cce07ff3988e67ff81ccf3f33399cf3e2399fff3f9fff9cf3fffcf88e
+67ff3389c4e6739e7f3f33ffccccf0311cce07ffffffffffffffffffffffffff
+ffe1
+0e221f39ccce67f3fe7ce673ff9cce79fcf3cce7fff9fffe79fff3cce673ff9c
+9e733399ce67fff99cce7ff999cf3e73f99ff3e7339fff3f9ffffcf3fffcf9cc
+e7fe799cce4f33fe7f3e73ff9c9e733399ce67ffffffffffffffffffffffffff
+ffe1
+0e889f39cfce63f1fe7ce673ff9cce79fcf3cce7ffc7fffe79fff3cce673ff9f
+9e73f399ce7ffff99cce7ff9f9cf3e73f98ff3e7339fff3f9ffffcf3fffcf9cc
+e7fe799cce4f31fe7f3e73ff9f9e73f399ce7fffffffffffffffffffffffffff
+ffe1
+0e221f39cfc070783e7ce673ff9cce79fcf3cce7fff9ffe079fff3cce603ff9f
+9e73f3980e7fff819cce7ff9f80f3e0381c1f3e7339fff3f9fffc0f3fffcf9cc
+07fe799cce4f383e7f3e03ff9f9e73f3980e7fffffffffffffffffffffffffff
+ffe1
+0e889f39cfcffe3f1e7ce673ff9cce79fcf3cce7fff9ffce79fff3cce67fff9f
+9e73f399fe7fff399cce7ff9f9ff3e7f39f8f3e7339fff3f9fff9cf3fffcf9cc
+fffe799cce4f3f1e7f3e7fff9f9e73f399fe7fffffffffffffffffffffffffff
+ffe1
+0e221f39cfcfff3f9e7ce673ff9cce79fcf3cce7fff9ffce79fff3cce67fff9f
+9e73f399fe7fff399cce7ff9f9ff3e7f39fcf3e7339fff3f9fff9cf3fffcf9cc
+fffe799cce4f3f9e7f3e7fff9f9e73f399fe7f8fffffffffffffffffffffffff
+ffe1
+0e889f33cfe667339e7ce723ff99c479fcf99ce7ff39ffcc79fff99ce733ffcc
+ccf3f39cce7fff319ce47ff9fccf3f33319cf3e7391fff3f9fff98f3fffcf9ce
+67ff3399cce6739e7f3f33ffccccf3f39cce7f8fffffffffffffffffffffffff
+ffe1
+0e221f0783f0f078300ce793ff83e27c3e1c3ce7ff83ffe27c3ffc3ce787ffe1
+e1e0f39e1c1fff899cf27ff07e18078789c180673c9ff807c3ffc4f87ffe19cf
+0fff8783c1f0f8300f8787ffe1e1e0f39e1c1f8fffffffffffffffffffffffff
+ffe1
+0e889f3ffffffffffffffff3ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff9fffffffffffffffffffff
+ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f3ffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff39fffffffffffffffffffff
+ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3fffffffffffffff07ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff83fffffffffffffffffffff
+ffffff9fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffffffffffff9fffffffc1fffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f39fffffffffffffffffffffff9ffffffbf9fffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f39ffffffffffffffffffffffffffffff3f9fffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f11c3c6787ffe1e1e4739e1c8c1fc391c079f39ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f1199e0733ffcccce2339ccc479f9988f3f9f39ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f493ce6673ff9c9e6733d9cce79f399cf3f9f3dffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f493ce7e73ff9f9e673999cce79f399cf3f9f99ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f493ce7e03ff9f9e6739b80ce79f019cf3f9f9bffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f493ce7e7fff9f9e6739b9fce79f3f9cf3f9f9bffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f793ce7e7fff9f9e673c79fce79f3f9cf3f9fc7e3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f7999e7f33ffcccce73c7ccce79f999cf3f9fc7e3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f79c3c1f87ffe1e1e73c7e1ce403c39cf8403e7e3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffeff3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffcff3ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffff8fe7ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3fffffffffffffffffffffffffffffff3fffff07fffff3fffffffe0fe7
+ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f3ffffbfdffffffff07ffffffffffffff3fffffe7fffff3ffffffffcfe7
+ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3ffff3f9fffffffe73ffffffffffffffffffffe7fffff3ffffffffcfff
+ffe7ffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f279cc06038791ffe73ff2de0e73ffc183cb727e7ce7ff27e1fff87cf07
+f0e73c3e0fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f139cf3f9f3388ffff3ff00ce673ff9cf3c0313e7ce7ff13ccfff33cfe7
+e667799ccfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f399cf3f9e799cffff3ff24fe67bff9ff3c9339e7cf7ff399cffe73cfe7
+ce66f399cfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f399cf3f9e799cfff8fff24fe733ff8ff3c9339e7e67ff399cffe7fcfe7
+cfe5f399cfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f399cf3f9e799cffff3ff24e0737ffc1f3c9339e7e6fff3980ffe7fcfe7
+cfe1f019cfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f399cf3f9e799cffff3ff24ce737fff8f3c9339e7e6fff399fffe7fcfe7
+cfe4f3f9cfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f399cf3f9e799cffff3ff24ce78ffffcf3c9339e7f1fff399fffe7fcfe7
+cfe673f9cf1fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3388f3f9f339cffe73ff24cc78fff9cf3c9333e7f1fff33ccfff33cfe7
+e667399c8f1fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f07c4f87c3879cfff07ff24e27cfffc1804930700f9fff07e1fff860100
+f0e73c3e4f1fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffffffffffffdffffffffff3ffffbffffffffffffffff
+ffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffffffffffffffff9ffffffffff3ffff3ffffffffffffffff
+ffffffffff9fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffffffffffffff1ffffffffff3fffe3ffffffffffffffff
+ffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fff9fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f3991f0e33c39cc9f0f23ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f3d88e6703999cc4e6711ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f259cce733399cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f259cce73f399cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f259cc073f019cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f939ccff3f3f9cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f939ccff3f3f9cce4f339ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889f939ce673f9988cce6739ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221f939cf0e0fc3c4c1f0f39ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889ffffffffffffffcffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e221fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e889fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0e001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffe1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0001
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff
+showpage
+ %%BoundingBox: 23 241 587.48 550.60
+%ps_include: inclusion end
+grestore
+PS-include-dict-dw begin
+o 0 ne {gsave A defaultmatrix /A ed llx lly nice urx ury nice
+ initgraphics 0.1 setlinewidth boxpath stroke grestore} if
+clear o-stack aload pop
+context end restore
+%ps_include: end
+/saveobj save def
+mark
+8 /LucidaSans-Italic f
+(Figure) 720 5332 w
+(1.) 994 5332 w
+(A) 1099 5332 w
+(typical) 1183 5332 w
+8 /LucidaTypewriter f
+(sam) 1470 5332 w
+8 /LucidaSans-Italic f
+(screen,) 1673 5332 w
+(with) 1979 5332 w
+(the) 2173 5332 w
+(editing) 2324 5332 w
+(menu) 2619 5332 w
+(presented.) 2864 5332 w
+(The) 3326 5332 w
+8 /LucidaTypewriter f
+(sam) 3497 5332 w
+8 /LucidaSans-Italic f
+(\(command) 3700 5332 w
+(language\)) 4137 5332 w
+(window) 4553 5332 w
+(is) 4875 5332 w
+(in) 4967 5332 w
+(the) 720 5432 w
+(middle,) 869 5432 w
+(with) 1182 5432 w
+(file) 1374 5432 w
+(windows) 1519 5432 w
+(above) 1877 5432 w
+(and) 2133 5432 w
+(below.) 2308 5432 w
+(\(The) 2609 5432 w
+(user) 2804 5432 w
+(interface) 3000 5432 w
+(makes) 3371 5432 w
+(it) 3647 5432 w
+(easy) 3726 5432 w
+(to) 3926 5432 w
+(create) 4028 5432 w
+(these) 4295 5432 w
+(abutting) 4524 5432 w
+(win\255) 4880 5432 w
+(dows.\)) 720 5532 w
+(The) 1026 5532 w
+(partially) 1200 5532 w
+(obscured) 1560 5532 w
+(window) 1945 5532 w
+(is) 2269 5532 w
+(a) 2363 5532 w
+(third) 2444 5532 w
+(file) 2666 5532 w
+(window.) 2816 5532 w
+(The) 3192 5532 w
+(uppermost) 3366 5532 w
+(window) 3816 5532 w
+(is) 4141 5532 w
+(that) 4236 5532 w
+(to) 4428 5532 w
+(which) 4537 5532 w
+(typing) 4795 5532 w
+(and) 720 5632 w
+(mouse) 895 5632 w
+(operations) 1173 5632 w
+(apply,) 1612 5632 w
+(as) 1879 5632 w
+(indicated) 1994 5632 w
+(by) 2376 5632 w
+(its) 2496 5632 w
+(heavy) 2615 5632 w
+(border.) 2869 5632 w
+(Each) 3209 5632 w
+(window) 3418 5632 w
+(has) 3736 5632 w
+(its) 3900 5632 w
+(current) 4018 5632 w
+(text) 4332 5632 w
+(highlighted) 4503 5632 w
+(in) 4967 5632 w
+(reverse) 720 5732 w
+(video.) 1033 5732 w
+(The) 1317 5732 w
+8 /LucidaTypewriter f
+(sam) 1488 5732 w
+8 /LucidaSans-Italic f
+(window's) 1691 5732 w
+(current) 2078 5732 w
+(text) 2396 5732 w
+(is) 2571 5732 w
+(the) 2663 5732 w
+(null) 2815 5732 w
+(string) 2991 5732 w
+(on) 3250 5732 w
+(the) 3376 5732 w
+(last) 3528 5732 w
+(visible) 3699 5732 w
+(line,) 3971 5732 w
+(indicated) 4165 5732 w
+(by) 4550 5732 w
+(a) 4673 5732 w
+(vertical) 4752 5732 w
+(bar.) 720 5832 w
+(See) 934 5832 w
+(also) 1088 5832 w
+(Figure) 1271 5832 w
+(2.) 1542 5832 w
+10 /LucidaSansUnicode00 f
+(Commands) 970 6108 w
+(have) 1574 6108 w
+(one-letter) 1857 6108 w
+(names.) 2408 6108 w
+(Except) 2847 6108 w
+(for) 3227 6108 w
+(non-editing) 3424 6108 w
+(commands) 4063 6108 w
+(such) 4650 6108 w
+(as) 4934 6108 w
+(writing) 720 6228 w
+(the) 1094 6228 w
+(file) 1286 6228 w
+(to) 1474 6228 w
+(disc,) 1609 6228 w
+(most) 1872 6228 w
+(commands) 2151 6228 w
+(make) 2717 6228 w
+(some) 3016 6228 w
+(change) 3314 6228 w
+(to) 3699 6228 w
+(the) 3834 6228 w
+(text) 4025 6228 w
+(in) 4252 6228 w
+(dot) 4379 6228 w
+(and) 4576 6228 w
+(leave) 4792 6228 w
+(dot) 720 6348 w
+(set) 929 6348 w
+(to) 1121 6348 w
+(the) 1267 6348 w
+(text) 1470 6348 w
+(resulting) 1709 6348 w
+(from) 2186 6348 w
+(the) 2466 6348 w
+(change.) 2669 6348 w
+(For) 3129 6348 w
+(example,) 3333 6348 w
+(the) 3827 6348 w
+(delete) 4031 6348 w
+(command,) 4377 6348 w
+10 /LucidaTypewriter f
+(d) 4936 6348 w
+10 /LucidaSansUnicode00 f
+(,) 5008 6348 w
+(deletes) 720 6468 w
+(the) 1106 6468 w
+(text) 1299 6468 w
+(in) 1528 6468 w
+(dot,) 1657 6468 w
+(replacing) 1888 6468 w
+(it) 2374 6468 w
+(by) 2478 6468 w
+(the) 2631 6468 w
+(null) 2824 6468 w
+(string) 3044 6468 w
+(and) 3364 6468 w
+(setting) 3582 6468 w
+(dot) 3954 6468 w
+(to) 4153 6468 w
+(the) 4289 6468 w
+(result.) 4482 6468 w
+(The) 4859 6468 w
+(change) 720 6588 w
+(command,) 1106 6588 w
+10 /LucidaTypewriter f
+(c) 1654 6588 w
+10 /LucidaSansUnicode00 f
+(,) 1726 6588 w
+(replaces) 1796 6588 w
+(dot) 2236 6588 w
+(by) 2435 6588 w
+(text) 2588 6588 w
+(delimited) 2817 6588 w
+(by) 3310 6588 w
+(an) 3463 6588 w
+(arbitrary) 3619 6588 w
+(punctuation) 4072 6588 w
+(charac\255) 4692 6588 w
+(ter, conventionally a slash.) 720 6708 w
+(Thus,) 2079 6708 w
+9 /LucidaTypewriter f
+(c/Peter/) 920 6878 w
+10 /LucidaSansUnicode00 f
+(replaces the text in dot by the string) 720 7058 w
+10 /LucidaTypewriter f
+(Peter) 2528 7058 w
+10 /LucidaSansUnicode00 f
+(.) 2888 7058 w
+(Similarly,) 2984 7058 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 3 3
+%%Page: 4 4
+/saveobj save def
+mark
+4 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 4 \255) 2783 480 w
+9 /LucidaTypewriter f
+(a/Peter/) 920 830 w
+10 /LucidaSansUnicode00 f
+(\(append\) adds the string after dot, and) 720 1010 w
+9 /LucidaTypewriter f
+(i/Peter/) 920 1180 w
+10 /LucidaSansUnicode00 f
+(\(insert\) inserts before dot.) 720 1360 w
+(All three leave dot set to the new text,) 2056 1360 w
+10 /LucidaTypewriter f
+(Peter) 3947 1360 w
+10 /LucidaSansUnicode00 f
+(.) 4307 1360 w
+(Newlines) 970 1516 w
+(are) 1437 1516 w
+(part) 1622 1516 w
+(of) 1851 1516 w
+(the) 1982 1516 w
+(syntax) 2170 1516 w
+(of) 2522 1516 w
+(commands:) 2654 1516 w
+(the) 3249 1516 w
+(newline) 3438 1516 w
+(character) 3843 1516 w
+(lexically) 4326 1516 w
+(termi\255) 4751 1516 w
+(nates) 720 1636 w
+(a) 1025 1636 w
+(command.) 1124 1636 w
+(Within) 1710 1636 w
+(the) 2059 1636 w
+(inserted) 2258 1636 w
+(text,) 2697 1636 w
+(however,) 2964 1636 w
+(newlines) 3445 1636 w
+(are) 3911 1636 w
+(never) 4106 1636 w
+(implicit.) 4416 1636 w
+(But) 4883 1636 w
+(since) 720 1756 w
+(it) 1006 1756 w
+(is) 1109 1756 w
+(often) 1226 1756 w
+(convenient) 1516 1756 w
+(to) 2081 1756 w
+(insert) 2216 1756 w
+(multiple) 2529 1756 w
+(lines) 2964 1756 w
+(of) 3228 1756 w
+(text,) 3363 1756 w
+10 /LucidaTypewriter f
+(sam) 3623 1756 w
+10 /LucidaSansUnicode00 f
+(has) 3876 1756 w
+(a) 4081 1756 w
+(special) 4173 1756 w
+(syntax) 4545 1756 w
+(for) 4901 1756 w
+(that case:) 720 1876 w
+9 /LucidaTypewriter f
+(a) 920 2046 w
+(some) 920 2156 w
+(lines) 1245 2156 w
+(of) 1635 2156 w
+(text) 1830 2156 w
+(to) 920 2266 w
+(be) 1115 2266 w
+(inserted) 1310 2266 w
+(in) 1895 2266 w
+(the) 2090 2266 w
+(file,) 2350 2266 w
+(terminated) 920 2376 w
+(by) 1635 2376 w
+(a) 1830 2376 w
+(period) 1960 2376 w
+(on) 920 2486 w
+(a) 1115 2486 w
+(line) 1245 2486 w
+(by) 1570 2486 w
+(itself) 1765 2486 w
+(.) 920 2596 w
+10 /LucidaSansUnicode00 f
+(In the one-line syntax, a newline character may be specified by a C-like escape, so) 720 2776 w
+9 /LucidaTypewriter f
+(c/\\n/) 920 2946 w
+10 /LucidaSansUnicode00 f
+(replaces dot by a single newline character.) 720 3126 w
+10 /LucidaTypewriter f
+(Sam) 970 3282 w
+10 /LucidaSansUnicode00 f
+(also has a substitute command,) 1218 3282 w
+10 /LucidaTypewriter f
+(s) 2792 3282 w
+10 /LucidaSansUnicode00 f
+(:) 2864 3282 w
+9 /LucidaTypewriter f
+(s/) 920 3452 w
+9 /LucidaSans-Italic f
+(expression) 1050 3452 w
+9 /LucidaTypewriter f
+(/) 1514 3452 w
+9 /LucidaSans-Italic f
+(replacement) 1579 3452 w
+9 /LucidaTypewriter f
+(/) 2121 3452 w
+10 /LucidaSansUnicode00 f
+(substitutes) 720 3632 w
+(the) 1300 3632 w
+(replacement) 1499 3632 w
+(text) 2142 3632 w
+(for) 2377 3632 w
+(the) 2560 3632 w
+(first) 2759 3632 w
+(match,) 2998 3632 w
+(in) 3372 3632 w
+(dot,) 3507 3632 w
+(of) 3744 3632 w
+(the) 3886 3632 w
+(regular) 4086 3632 w
+(expression.) 4477 3632 w
+(Thus, if dot is the string) 720 3752 w
+10 /LucidaTypewriter f
+(Peter) 1926 3752 w
+10 /LucidaSansUnicode00 f
+(, the command) 2286 3752 w
+9 /LucidaTypewriter f
+(s/t/st/) 920 3922 w
+10 /LucidaSansUnicode00 f
+(changes it to) 720 4102 w
+10 /LucidaTypewriter f
+(Pester) 1380 4102 w
+10 /LucidaSansUnicode00 f
+(.) 1812 4102 w
+(In) 1909 4102 w
+(general,) 2033 4102 w
+10 /LucidaTypewriter f
+(s) 2459 4102 w
+10 /LucidaSansUnicode00 f
+(is) 2564 4102 w
+(unnecessary,) 2677 4102 w
+(but) 3341 4102 w
+(it) 3536 4102 w
+(was) 3635 4102 w
+(inherited) 3851 4102 w
+(from) 4319 4102 w
+10 /LucidaTypewriter f
+(ed) 4584 4102 w
+10 /LucidaSansUnicode00 f
+(and) 4761 4102 w
+(it) 4974 4102 w
+(has) 720 4222 w
+(some) 942 4222 w
+(convenient) 1256 4222 w
+(variations.) 1837 4222 w
+(For) 2426 4222 w
+(instance,) 2635 4222 w
+(the) 3123 4222 w
+(replacement) 3331 4222 w
+(text) 3983 4222 w
+(may) 4227 4222 w
+(include) 4480 4222 w
+(the) 4885 4222 w
+(matched text, specified by) 720 4342 w
+10 /LucidaTypewriter f
+(&) 2038 4342 w
+10 /LucidaSansUnicode00 f
+(:) 2110 4342 w
+9 /LucidaTypewriter f
+(s/Peter/Oh,) 920 4512 w
+(&,) 1700 4512 w
+(&,) 1895 4512 w
+(&,) 2090 4512 w
+(&!/) 2285 4512 w
+10 /LucidaSansUnicode00 f
+(There are also three commands that apply programs to text:) 970 4728 w
+9 /LucidaTypewriter f
+(<) 920 4898 w
+9 /LucidaSans-Italic f
+(UNIX) 1050 4898 w
+(program) 1290 4898 w
+10 /LucidaSansUnicode00 f
+(replaces dot by the output of the UNIX program.) 720 5078 w
+(Similarly, the) 3131 5078 w
+10 /LucidaTypewriter f
+(>) 3793 5078 w
+10 /LucidaSansUnicode00 f
+(command runs the pro\255) 3897 5078 w
+(gram with dot as its standard input, and) 720 5198 w
+10 /LucidaTypewriter f
+(|) 2708 5198 w
+10 /LucidaSansUnicode00 f
+(does both.) 2812 5198 w
+(For example,) 3394 5198 w
+9 /LucidaTypewriter f
+(|) 920 5368 w
+(sort) 1050 5368 w
+10 /LucidaSansUnicode00 f
+(replaces) 720 5548 w
+(dot) 1160 5548 w
+(by) 1359 5548 w
+(the) 1512 5548 w
+(result) 1705 5548 w
+(of) 2019 5548 w
+(applying) 2155 5548 w
+(the) 2608 5548 w
+(standard) 2802 5548 w
+(sorting) 3268 5548 w
+(utility) 3650 5548 w
+(to) 3964 5548 w
+(it.) 4101 5548 w
+(Again,) 4270 5548 w
+(newlines) 4618 5548 w
+(have) 720 5668 w
+(no) 983 5668 w
+(special) 1144 5668 w
+(significance) 1515 5668 w
+(for) 2126 5668 w
+(these) 2302 5668 w
+10 /LucidaTypewriter f
+(sam) 2601 5668 w
+10 /LucidaSansUnicode00 f
+(commands.) 2854 5668 w
+(The) 3484 5668 w
+(text) 3702 5668 w
+(acted) 3930 5668 w
+(upon) 4229 5668 w
+(and) 4514 5668 w
+(result\255) 4731 5668 w
+(ing) 720 5788 w
+(from) 908 5788 w
+(these) 1175 5788 w
+(commands) 1472 5788 w
+(is) 2036 5788 w
+(not) 2151 5788 w
+(necessarily) 2347 5788 w
+(bounded) 2916 5788 w
+(by) 3382 5788 w
+(newlines,) 3533 5788 w
+(although) 4023 5788 w
+(for) 4489 5788 w
+(connec\255) 4664 5788 w
+(tion with UNIX programs, newlines may be necessary to obey conventions.) 720 5908 w
+(One) 970 6064 w
+(more) 1200 6064 w
+(command:) 1485 6064 w
+10 /LucidaTypewriter f
+(p) 2029 6064 w
+10 /LucidaSansUnicode00 f
+(prints) 2135 6064 w
+(the) 2452 6064 w
+(contents) 2641 6064 w
+(of) 3092 6064 w
+(dot.) 3224 6064 w
+(Table) 3483 6064 w
+(I) 3783 6064 w
+(summarizes) 3846 6064 w
+10 /LucidaTypewriter f
+(sam) 4468 6064 w
+10 /LucidaSansUnicode20 f
+(\031) 4684 6064 w
+10 /LucidaSansUnicode00 f
+(s) 4716 6064 w
+(com\255) 4802 6064 w
+(mands.) 720 6184 w
+(The) 970 6340 w
+(value) 1188 6340 w
+(of) 1479 6340 w
+(dot) 1614 6340 w
+(may) 1812 6340 w
+(be) 2049 6340 w
+(changed) 2205 6340 w
+(by) 2653 6340 w
+(specifying) 2805 6340 w
+(an) 3334 6340 w
+10 /LucidaSans-Italic f
+(address) 3489 6340 w
+10 /LucidaSansUnicode00 f
+(for) 3909 6340 w
+(the) 4086 6340 w
+(command.) 4279 6340 w
+(The) 4859 6340 w
+(simplest address is a line number:) 720 6460 w
+9 /LucidaTypewriter f
+(3) 920 6630 w
+10 /LucidaSansUnicode00 f
+(refers to the third line of the file, so) 720 6810 w
+9 /LucidaTypewriter f
+(3d) 920 6980 w
+10 /LucidaSansUnicode00 f
+(deletes) 720 7160 w
+(the) 1109 7160 w
+(third) 1305 7160 w
+(line) 1578 7160 w
+(of) 1795 7160 w
+(the) 1934 7160 w
+(file,) 2130 7160 w
+(and) 2354 7160 w
+(implicitly) 2575 7160 w
+(renumbers) 3058 7160 w
+(the) 3625 7160 w
+(lines) 3822 7160 w
+(so) 4091 7160 w
+(the) 4245 7160 w
+(old) 4442 7160 w
+(line) 4637 7160 w
+(4) 4855 7160 w
+(is) 4960 7160 w
+(now) 720 7280 w
+(numbered) 964 7280 w
+(3.) 1504 7280 w
+(\(This) 1675 7280 w
+(is) 1957 7280 w
+(one) 2081 7280 w
+(of) 2304 7280 w
+(the) 2446 7280 w
+(few) 2645 7280 w
+(places) 2859 7280 w
+(where) 3208 7280 w
+10 /LucidaTypewriter f
+(sam) 3543 7280 w
+10 /LucidaSansUnicode00 f
+(deals) 3802 7280 w
+(with) 4099 7280 w
+(lines) 4347 7280 w
+(directly.\)) 4617 7280 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 4 4
+%%Page: 5 5
+/saveobj save def
+mark
+5 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 5 \255) 2783 480 w
+(Table I.) 2323 900 w
+10 /LucidaTypewriter f
+(Sam) 2714 900 w
+10 /LucidaSansUnicode00 f
+(commands) 2962 900 w
+10 /S f
+(_) 720 968 w
+(_______________________________________________________________________________________) 744 968 w
+10 /LucidaSansUnicode00 f
+(Text commands) 720 1136 w
+10 /S f
+(_) 720 1204 w
+(_______________________________________________________________________________________) 744 1204 w
+10 /LucidaTypewriter f
+(a/) 720 1372 w
+10 /LucidaSans-Italic f
+(text) 864 1372 w
+10 /LucidaTypewriter f
+(/) 1047 1372 w
+10 /LucidaSansUnicode00 f
+(Append text after dot) 1993 1372 w
+10 /LucidaTypewriter f
+(c/) 720 1492 w
+10 /LucidaSans-Italic f
+(text) 864 1492 w
+10 /LucidaTypewriter f
+(/) 1047 1492 w
+10 /LucidaSansUnicode00 f
+(Change text in dot) 1993 1492 w
+10 /LucidaTypewriter f
+(i/) 720 1612 w
+10 /LucidaSans-Italic f
+(text) 864 1612 w
+10 /LucidaTypewriter f
+(/) 1047 1612 w
+10 /LucidaSansUnicode00 f
+(Insert text before dot) 1993 1612 w
+10 /LucidaTypewriter f
+(d) 720 1732 w
+10 /LucidaSansUnicode00 f
+(Delete text in dot) 1993 1732 w
+10 /LucidaTypewriter f
+(s/) 720 1852 w
+10 /LucidaSans-Italic f
+(regexp) 864 1852 w
+10 /LucidaTypewriter f
+(/) 1194 1852 w
+10 /LucidaSans-Italic f
+(text) 1266 1852 w
+10 /LucidaTypewriter f
+(/) 1449 1852 w
+10 /LucidaSansUnicode00 f
+(Substitute text for match of regular expression in dot) 1993 1852 w
+10 /LucidaTypewriter f
+(m) 720 1972 w
+10 /LucidaSans-Italic f
+(address) 864 1972 w
+10 /LucidaSansUnicode00 f
+(Move text in dot after address) 1993 1972 w
+10 /LucidaTypewriter f
+(t) 720 2092 w
+10 /LucidaSans-Italic f
+(address) 864 2092 w
+10 /LucidaSansUnicode00 f
+(Copy text in dot after address) 1993 2092 w
+10 /S f
+(_) 720 2160 w
+(_______________________________________________________________________________________) 744 2160 w
+10 /LucidaSansUnicode00 f
+(Display commands) 720 2328 w
+10 /S f
+(_) 720 2396 w
+(_______________________________________________________________________________________) 744 2396 w
+10 /LucidaTypewriter f
+(p) 720 2540 w
+10 /LucidaSansUnicode00 f
+(Print contents of dot) 1993 2540 w
+10 /LucidaTypewriter f
+(=) 720 2660 w
+10 /LucidaSansUnicode00 f
+(Print value \(line numbers and character numbers\) of dot) 1993 2660 w
+10 /S f
+(_) 720 2728 w
+(_______________________________________________________________________________________) 744 2728 w
+10 /LucidaSansUnicode00 f
+(File commands) 720 2896 w
+10 /S f
+(_) 720 2964 w
+(_______________________________________________________________________________________) 744 2964 w
+10 /LucidaTypewriter f
+(b) 720 3108 w
+10 /LucidaSans-Italic f
+(file-list) 864 3108 w
+10 /LucidaSansUnicode00 f
+(Set current file to first file in list that) 1993 3108 w
+10 /LucidaTypewriter f
+(sam) 3801 3108 w
+10 /LucidaSansUnicode00 f
+(has in menu) 4049 3108 w
+10 /LucidaTypewriter f
+(B) 720 3228 w
+10 /LucidaSans-Italic f
+(file-list) 864 3228 w
+10 /LucidaSansUnicode00 f
+(Same as) 1993 3228 w
+10 /LucidaTypewriter f
+(b) 2421 3228 w
+10 /LucidaSansUnicode00 f
+(, but load new files) 2493 3228 w
+10 /LucidaTypewriter f
+(n) 720 3348 w
+10 /LucidaSansUnicode00 f
+(Print menu lines of all files) 1993 3348 w
+10 /LucidaTypewriter f
+(D) 720 3468 w
+10 /LucidaSans-Italic f
+(file-list) 864 3468 w
+10 /LucidaSansUnicode00 f
+(Delete named files from) 1993 3468 w
+10 /LucidaTypewriter f
+(sam) 3193 3468 w
+10 /S f
+(_) 720 3536 w
+(_______________________________________________________________________________________) 744 3536 w
+10 /LucidaSansUnicode00 f
+(I/O commands) 720 3704 w
+10 /S f
+(_) 720 3772 w
+(_______________________________________________________________________________________) 744 3772 w
+10 /LucidaTypewriter f
+(e) 720 3916 w
+10 /LucidaSans-Italic f
+(filename) 864 3916 w
+10 /LucidaSansUnicode00 f
+(Replace file with named disc file) 1993 3916 w
+10 /LucidaTypewriter f
+(r) 720 4036 w
+10 /LucidaSans-Italic f
+(filename) 864 4036 w
+10 /LucidaSansUnicode00 f
+(Replace dot by contents of named disc file) 1993 4036 w
+10 /LucidaTypewriter f
+(w) 720 4156 w
+10 /LucidaSans-Italic f
+(filename) 864 4156 w
+10 /LucidaSansUnicode00 f
+(Write file to named disc file) 1993 4156 w
+10 /LucidaTypewriter f
+(f) 720 4276 w
+10 /LucidaSans-Italic f
+(filename) 864 4276 w
+10 /LucidaSansUnicode00 f
+(Set file name and print new menu line) 1993 4276 w
+10 /LucidaTypewriter f
+(<) 720 4396 w
+10 /LucidaSans-Italic f
+(UNIX-command) 864 4396 w
+10 /LucidaSansUnicode00 f
+(Replace dot by standard output of command) 1993 4396 w
+10 /LucidaTypewriter f
+(>) 720 4516 w
+10 /LucidaSans-Italic f
+(UNIX-command) 864 4516 w
+10 /LucidaSansUnicode00 f
+(Send dot to standard input of command) 1993 4516 w
+10 /LucidaTypewriter f
+(|) 720 4636 w
+10 /LucidaSans-Italic f
+(UNIX-command) 864 4636 w
+10 /LucidaSansUnicode00 f
+(Replace dot by result of command applied to dot) 1993 4636 w
+10 /LucidaTypewriter f
+(!) 720 4756 w
+10 /LucidaSans-Italic f
+(UNIX-command) 864 4756 w
+10 /LucidaSansUnicode00 f
+(Run the command) 1993 4756 w
+10 /S f
+(_) 720 4824 w
+(_______________________________________________________________________________________) 744 4824 w
+10 /LucidaSansUnicode00 f
+(Loops and conditionals) 720 4992 w
+10 /S f
+(_) 720 5060 w
+(_______________________________________________________________________________________) 744 5060 w
+10 /LucidaTypewriter f
+(x/) 720 5204 w
+10 /LucidaSans-Italic f
+(regexp) 864 5204 w
+10 /LucidaTypewriter f
+(/) 1194 5204 w
+10 /LucidaSans-Italic f
+(command) 1338 5204 w
+10 /LucidaSansUnicode00 f
+(For each match of regexp, set dot and run command) 1993 5204 w
+10 /LucidaTypewriter f
+(y/) 720 5324 w
+10 /LucidaSans-Italic f
+(regexp) 864 5324 w
+10 /LucidaTypewriter f
+(/) 1194 5324 w
+10 /LucidaSans-Italic f
+(command) 1338 5324 w
+10 /LucidaSansUnicode00 f
+(Between adjacent matches of regexp, set dot and run command) 1993 5324 w
+10 /LucidaTypewriter f
+(X/) 720 5444 w
+10 /LucidaSans-Italic f
+(regexp) 864 5444 w
+10 /LucidaTypewriter f
+(/) 1194 5444 w
+10 /LucidaSans-Italic f
+(command) 1338 5444 w
+10 /LucidaSansUnicode00 f
+(Run command in each file whose menu line matches regexp) 1993 5444 w
+10 /LucidaTypewriter f
+(Y/) 720 5564 w
+10 /LucidaSans-Italic f
+(regexp) 864 5564 w
+10 /LucidaTypewriter f
+(/) 1194 5564 w
+10 /LucidaSans-Italic f
+(command) 1338 5564 w
+10 /LucidaSansUnicode00 f
+(Run command in each file whose menu line does not match) 1993 5564 w
+10 /LucidaTypewriter f
+(g/) 720 5684 w
+10 /LucidaSans-Italic f
+(regexp) 864 5684 w
+10 /LucidaTypewriter f
+(/) 1194 5684 w
+10 /LucidaSans-Italic f
+(command) 1338 5684 w
+10 /LucidaSansUnicode00 f
+(If dot contains a match of regexp, run command) 1993 5684 w
+10 /LucidaTypewriter f
+(v/) 720 5804 w
+10 /LucidaSans-Italic f
+(regexp) 864 5804 w
+10 /LucidaTypewriter f
+(/) 1194 5804 w
+10 /LucidaSans-Italic f
+(command) 1338 5804 w
+10 /LucidaSansUnicode00 f
+(If dot does not contain a match of regexp, run command) 1993 5804 w
+10 /S f
+(_) 720 5872 w
+(_______________________________________________________________________________________) 744 5872 w
+10 /LucidaSansUnicode00 f
+(Miscellany) 720 6040 w
+10 /S f
+(_) 720 6108 w
+(_______________________________________________________________________________________) 744 6108 w
+10 /LucidaTypewriter f
+(k) 720 6252 w
+10 /LucidaSansUnicode00 f
+(Set address mark to value of dot) 1993 6252 w
+10 /LucidaTypewriter f
+(q) 720 6372 w
+10 /LucidaSansUnicode00 f
+(Quit) 1993 6372 w
+10 /LucidaTypewriter f
+(u) 720 6492 w
+10 /LucidaSans-Italic f
+(n) 864 6492 w
+10 /LucidaSansUnicode00 f
+(Undo last) 1993 6492 w
+10 /LucidaSans-Italic f
+(n) 2484 6492 w
+10 /LucidaSansUnicode00 f
+(\(default 1\) changes) 2578 6492 w
+10 /LucidaTypewriter f
+({ }) 720 6612 w
+10 /LucidaSansUnicode00 f
+(Braces group commands) 1993 6612 w
+10 /S f
+(_) 720 6668 w
+(_______________________________________________________________________________________) 744 6668 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 5 5
+%%Page: 6 6
+/saveobj save def
+mark
+6 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 6 \255) 2783 480 w
+(Line) 720 840 w
+10 /LucidaTypewriter f
+(0) 960 840 w
+10 /LucidaSansUnicode00 f
+(is) 1072 840 w
+(the) 1193 840 w
+(null) 1389 840 w
+(string) 1612 840 w
+(at) 1935 840 w
+(the) 2068 840 w
+(beginning) 2264 840 w
+(of) 2792 840 w
+(the) 2931 840 w
+(file.) 3127 840 w
+(If) 3383 840 w
+(a) 3490 840 w
+(command) 3586 840 w
+(consists) 4105 840 w
+(of) 4539 840 w
+(only) 4678 840 w
+(an) 4923 840 w
+(address,) 720 960 w
+(a) 1166 960 w
+10 /LucidaTypewriter f
+(p) 1255 960 w
+10 /LucidaSansUnicode00 f
+(command) 1361 960 w
+(is) 1873 960 w
+(assumed,) 1987 960 w
+(so) 2484 960 w
+(typing) 2630 960 w
+(an) 2969 960 w
+(unadorned) 3120 960 w
+10 /LucidaTypewriter f
+(3) 3679 960 w
+10 /LucidaSansUnicode00 f
+(prints) 3785 960 w
+(line) 4102 960 w
+(3) 4311 960 w
+(on) 4407 960 w
+(the) 4563 960 w
+(termi\255) 4751 960 w
+(nal.) 720 1080 w
+(There) 973 1080 w
+(are) 1294 1080 w
+(a) 1490 1080 w
+(couple) 1589 1080 w
+(of) 1955 1080 w
+(other) 2097 1080 w
+(basic) 2398 1080 w
+(addresses:) 2691 1080 w
+(a) 3254 1080 w
+(period) 3353 1080 w
+(addresses) 3710 1080 w
+(dot) 4241 1080 w
+(itself;) 4446 1080 w
+(and) 4761 1080 w
+(a) 4985 1080 w
+(dollar sign \() 720 1200 w
+10 /LucidaTypewriter f
+($) 1299 1200 w
+10 /LucidaSansUnicode00 f
+(\) addresses the null string at the end of the file.) 1371 1200 w
+(An) 970 1356 w
+(address) 1138 1356 w
+(is) 1555 1356 w
+(always) 1672 1356 w
+(a) 2028 1356 w
+(single) 2120 1356 w
+(substring) 2446 1356 w
+(of) 2942 1356 w
+(the) 3078 1356 w
+(file.) 3271 1356 w
+(Thus,) 3524 1356 w
+(the) 3832 1356 w
+(address) 4025 1356 w
+10 /LucidaTypewriter f
+(3) 4443 1356 w
+10 /LucidaSansUnicode00 f
+(addresses) 4553 1356 w
+(the) 720 1476 w
+(characters) 914 1476 w
+(after) 1453 1476 w
+(the) 1718 1476 w
+(second) 1912 1476 w
+(newline) 2295 1476 w
+(of) 2705 1476 w
+(the) 2842 1476 w
+(file) 3036 1476 w
+(through) 3226 1476 w
+(the) 3652 1476 w
+(third) 3846 1476 w
+(newline) 4117 1476 w
+(of) 4527 1476 w
+(the) 4664 1476 w
+(file.) 4857 1476 w
+(A) 720 1596 w
+10 /LucidaSans-Italic f
+(compound address) 821 1596 w
+10 /LucidaSansUnicode00 f
+(is constructed by the comma operator) 1770 1596 w
+9 /LucidaSans-Italic f
+(address1) 920 1766 w
+9 /LucidaTypewriter f
+(,) 1321 1766 w
+9 /LucidaSans-Italic f
+(address2) 1386 1766 w
+10 /LucidaSansUnicode00 f
+(and) 720 1946 w
+(addresses) 945 1946 w
+(the) 1477 1946 w
+(substring) 1677 1946 w
+(of) 2181 1946 w
+(the) 2325 1946 w
+(file) 2526 1946 w
+(from) 2723 1946 w
+(the) 3001 1946 w
+(beginning) 3202 1946 w
+(of) 3735 1946 w
+10 /LucidaSans-Italic f
+(address1) 3879 1946 w
+10 /LucidaSansUnicode00 f
+(to) 4370 1946 w
+(the) 4514 1946 w
+(end) 4715 1946 w
+(of) 4942 1946 w
+10 /LucidaSans-Italic f
+(address2) 720 2066 w
+10 /LucidaSansUnicode00 f
+(.) 1165 2066 w
+(For) 1272 2066 w
+(example,) 1471 2066 w
+(the) 1959 2066 w
+(command) 2157 2066 w
+10 /LucidaTypewriter f
+(3,5p) 2677 2066 w
+10 /LucidaSansUnicode00 f
+(prints) 3007 2066 w
+(the) 3332 2066 w
+(third) 3529 2066 w
+(through) 3803 2066 w
+(fifth) 4232 2066 w
+(lines) 4476 2066 w
+(of) 4745 2066 w
+(the) 4885 2066 w
+(file and) 720 2186 w
+10 /LucidaTypewriter f
+(.,$d) 1115 2186 w
+10 /LucidaSansUnicode00 f
+(deletes the text from the beginning of dot to the end of the file.) 1435 2186 w
+(These) 970 2342 w
+(addresses) 1307 2342 w
+(are) 1843 2342 w
+(all) 2044 2342 w
+(absolute) 2206 2342 w
+(positions) 2670 2342 w
+(in) 3164 2342 w
+(the) 3305 2342 w
+(file,) 3510 2342 w
+(but) 3743 2342 w
+10 /LucidaTypewriter f
+(sam) 3955 2342 w
+10 /LucidaSansUnicode00 f
+(also) 4221 2342 w
+(has) 4467 2342 w
+(relative) 4685 2342 w
+(addresses, indicated by) 720 2462 w
+10 /LucidaTypewriter f
+(+) 1895 2462 w
+10 /LucidaSansUnicode00 f
+(or) 1999 2462 w
+10 /LucidaTypewriter f
+(-) 2133 2462 w
+10 /LucidaSansUnicode00 f
+(.) 2205 2462 w
+(For example,) 2301 2462 w
+9 /LucidaTypewriter f
+($-3) 920 2632 w
+10 /LucidaSansUnicode00 f
+(is the third line before the end of the file and) 720 2812 w
+9 /LucidaTypewriter f
+(.+1) 920 2982 w
+10 /LucidaSansUnicode00 f
+(is) 720 3162 w
+(the) 839 3162 w
+(line) 1033 3162 w
+(after) 1248 3162 w
+(dot.) 1513 3162 w
+(If) 1777 3162 w
+(no) 1882 3162 w
+(address) 2044 3162 w
+(appears) 2463 3162 w
+(to) 2887 3162 w
+(the) 3025 3162 w
+(left) 3220 3162 w
+(of) 3419 3162 w
+(the) 3557 3162 w
+10 /LucidaTypewriter f
+(+) 3752 3162 w
+10 /LucidaSansUnicode00 f
+(or) 3864 3162 w
+10 /LucidaTypewriter f
+(-) 4006 3162 w
+10 /LucidaSansUnicode00 f
+(,) 4078 3162 w
+(dot) 4150 3162 w
+(is) 4351 3162 w
+(assumed;) 4471 3162 w
+(if) 4974 3162 w
+(nothing) 720 3282 w
+(appears) 1132 3282 w
+(to) 1553 3282 w
+(the) 1688 3282 w
+(right,) 1880 3282 w
+10 /LucidaTypewriter f
+(1) 2180 3282 w
+10 /LucidaSansUnicode00 f
+(is) 2289 3282 w
+(assumed.) 2405 3282 w
+(Therefore,) 2936 3282 w
+10 /LucidaTypewriter f
+(.+1) 3477 3282 w
+10 /LucidaSansUnicode00 f
+(may) 3729 3282 w
+(be) 3965 3282 w
+(abbreviated) 4120 3282 w
+(to) 4726 3282 w
+(just) 4860 3282 w
+(a plus sign.) 720 3402 w
+(The) 970 3558 w
+10 /LucidaTypewriter f
+(+) 1191 3558 w
+10 /LucidaSansUnicode00 f
+(operator) 1304 3558 w
+(acts) 1760 3558 w
+(relative) 1995 3558 w
+(to) 2391 3558 w
+(the) 2530 3558 w
+(end) 2726 3558 w
+(of) 2948 3558 w
+(its) 3087 3558 w
+(first) 3245 3558 w
+(argument,) 3481 3558 w
+(while) 4022 3558 w
+(the) 4316 3558 w
+10 /LucidaTypewriter f
+(-) 4512 3558 w
+10 /LucidaSansUnicode00 f
+(operator) 4625 3558 w
+(acts) 720 3678 w
+(relative) 947 3678 w
+(to the beginning.) 1335 3678 w
+(Thus) 2235 3678 w
+10 /LucidaTypewriter f
+(.+1) 2505 3678 w
+10 /LucidaSansUnicode00 f
+(addresses the first line after dot,) 2753 3678 w
+10 /LucidaTypewriter f
+(.-) 4377 3678 w
+10 /LucidaSansUnicode00 f
+(addresses) 4553 3678 w
+(the) 720 3798 w
+(first) 914 3798 w
+(line) 1148 3798 w
+(before) 1363 3798 w
+(dot,) 1717 3798 w
+(and) 1950 3798 w
+10 /LucidaTypewriter f
+(+-) 2170 3798 w
+10 /LucidaSansUnicode00 f
+(refers) 2354 3798 w
+(to) 2676 3798 w
+(the) 2814 3798 w
+(line) 3009 3798 w
+(containing) 3225 3798 w
+(the) 3775 3798 w
+(end) 3970 3798 w
+(of) 4191 3798 w
+(dot.) 4329 3798 w
+(\(Dot) 4594 3798 w
+(may) 4840 3798 w
+(span) 720 3918 w
+(multiple) 998 3918 w
+(lines,) 1443 3918 w
+(and) 1749 3918 w
+10 /LucidaTypewriter f
+(+) 1976 3918 w
+10 /LucidaSansUnicode00 f
+(selects) 2095 3918 w
+(the) 2473 3918 w
+(line) 2675 3918 w
+(after) 2898 3918 w
+(the) 3171 3918 w
+(end) 3373 3918 w
+(of) 3601 3918 w
+(dot,) 3746 3918 w
+(then) 3985 3918 w
+10 /LucidaTypewriter f
+(-) 4248 3918 w
+10 /LucidaSansUnicode00 f
+(backs) 4366 3918 w
+(up) 4690 3918 w
+(one) 4861 3918 w
+(line.\)) 720 4038 w
+(The final type of address is a regular expression, which addresses the text matched) 970 4194 w
+(by the expression.) 720 4314 w
+(The expression is enclosed in slashes, as in) 1681 4314 w
+9 /LucidaTypewriter f
+(/) 920 4484 w
+9 /LucidaSans-Italic f
+(expression) 985 4484 w
+9 /LucidaTypewriter f
+(/) 1449 4484 w
+10 /LucidaSansUnicode00 f
+(The) 720 4664 w
+(expressions) 939 4664 w
+(are) 1559 4664 w
+(the) 1749 4664 w
+(same) 1942 4664 w
+(as) 2235 4664 w
+(those) 2379 4664 w
+(in) 2684 4664 w
+(the) 2813 4664 w
+(UNIX) 3006 4664 w
+(program) 3279 4664 w
+10 /LucidaTypewriter f
+(egrep) 3733 4664 w
+10 /LucidaSansUnicode00 f
+(,) 4093 4664 w
+6 /LucidaSansUnicode00 f
+(6,7) 4125 4614 w
+10 /LucidaSansUnicode00 f
+(and) 4258 4664 w
+(include) 4476 4664 w
+(clo\255) 4866 4664 w
+(sures,) 720 4784 w
+(alternations,) 1058 4784 w
+(and) 1710 4784 w
+(so) 1935 4784 w
+(on.) 2092 4784 w
+(They) 2324 4784 w
+(find) 2602 4784 w
+(the) 2838 4784 w
+10 /LucidaSans-Italic f
+(leftmost) 3038 4784 w
+(longest) 3478 4784 w
+10 /LucidaSansUnicode00 f
+(string) 3872 4784 w
+(that) 4199 4784 w
+(matches) 4435 4784 w
+(the) 4885 4784 w
+(expression,) 720 4904 w
+(that) 1330 4904 w
+(is,) 1568 4904 w
+(the) 1727 4904 w
+(first) 1929 4904 w
+(match) 2171 4904 w
+(after) 2516 4904 w
+(the) 2789 4904 w
+(point) 2991 4904 w
+(where) 3291 4904 w
+(the) 3631 4904 w
+(search) 3834 4904 w
+(is) 4198 4904 w
+(started,) 4326 4904 w
+(and) 4746 4904 w
+(if) 4974 4904 w
+(more) 720 5024 w
+(than) 1027 5024 w
+(one) 1299 5024 w
+(match) 1534 5024 w
+(begins) 1888 5024 w
+(at) 2267 5024 w
+(the) 2415 5024 w
+(same) 2625 5024 w
+(spot,) 2935 5024 w
+(the) 3234 5024 w
+(longest) 3444 5024 w
+(such) 3857 5024 w
+(match.) 4138 5024 w
+(\(I) 4555 5024 w
+(assume) 4672 5024 w
+(familiarity with the syntax for regular expressions in UNIX programs.) 720 5144 w
+6 /LucidaSansUnicode00 f
+(9) 4064 5094 w
+10 /LucidaSansUnicode00 f
+(\) For example,) 4102 5144 w
+9 /LucidaTypewriter f
+(/x/) 920 5314 w
+10 /LucidaSansUnicode00 f
+(matches the next) 720 5494 w
+10 /LucidaTypewriter f
+(x) 1592 5494 w
+10 /LucidaSansUnicode00 f
+(character in the file,) 1696 5494 w
+9 /LucidaTypewriter f
+(/xx*/) 920 5664 w
+10 /LucidaSansUnicode00 f
+(matches the next run of one or more) 720 5844 w
+10 /LucidaTypewriter f
+(x) 2547 5844 w
+10 /LucidaSansUnicode20 f
+(\031) 2619 5844 w
+10 /LucidaSansUnicode00 f
+(s, and) 2651 5844 w
+9 /LucidaTypewriter f
+(/x|Peter/) 920 6014 w
+10 /LucidaSansUnicode00 f
+(matches) 720 6194 w
+(the) 1171 6194 w
+(next) 1373 6194 w
+10 /LucidaTypewriter f
+(x) 1636 6194 w
+10 /LucidaSansUnicode00 f
+(or) 1755 6194 w
+10 /LucidaTypewriter f
+(Peter) 1904 6194 w
+10 /LucidaSansUnicode00 f
+(.) 2264 6194 w
+(For) 2375 6194 w
+(compatibility) 2578 6194 w
+(with) 3253 6194 w
+(other) 3505 6194 w
+(UNIX) 3809 6194 w
+(programs,) 4091 6194 w
+(the) 4637 6194 w
+10 /LucidaSansUnicode20 f
+(\030) 4839 6194 w
+10 /LucidaSansUnicode00 f
+(any) 4871 6194 w
+(character) 720 6314 w
+10 /LucidaSansUnicode20 f
+(\031) 1169 6314 w
+10 /LucidaSansUnicode00 f
+(operator, a period, does not match a newline, so) 1233 6314 w
+9 /LucidaTypewriter f
+(/.*/) 920 6484 w
+10 /LucidaSansUnicode00 f
+(matches) 720 6664 w
+(the) 1166 6664 w
+(text) 1362 6664 w
+(from) 1594 6664 w
+(dot) 1867 6664 w
+(to) 2069 6664 w
+(the) 2208 6664 w
+(end) 2405 6664 w
+(of) 2628 6664 w
+(the) 2768 6664 w
+(line,) 2965 6664 w
+(but) 3215 6664 w
+(excludes) 3419 6664 w
+(the) 3890 6664 w
+(newline) 4087 6664 w
+(and) 4500 6664 w
+(so) 4722 6664 w
+(will) 4876 6664 w
+(not match across the line boundary.) 720 6784 w
+(Regular) 970 6940 w
+(expressions) 1389 6940 w
+(are) 2022 6940 w
+(always) 2225 6940 w
+(relative) 2595 6940 w
+(addresses.) 3001 6940 w
+(The) 3603 6940 w
+(direction) 3835 6940 w
+(is) 4315 6940 w
+(forwards) 4447 6940 w
+(by) 4925 6940 w
+(default,) 720 7060 w
+(so) 1150 7060 w
+10 /LucidaTypewriter f
+(/Peter/) 1321 7060 w
+10 /LucidaSansUnicode00 f
+(is) 1884 7060 w
+(really) 2023 7060 w
+(an) 2344 7060 w
+(abbreviation) 2520 7060 w
+(for) 3182 7060 w
+10 /LucidaTypewriter f
+(+/Peter/) 3380 7060 w
+10 /LucidaSansUnicode00 f
+(.) 3956 7060 w
+(The) 4079 7060 w
+(search) 4319 7060 w
+(can) 4694 7060 w
+(be) 4921 7060 w
+(reversed with a minus sign, so) 720 7180 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 6 6
+%%Page: 7 7
+/saveobj save def
+mark
+7 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 7 \255) 2783 480 w
+9 /LucidaTypewriter f
+(-/Peter/) 920 830 w
+10 /LucidaSansUnicode00 f
+(finds) 720 1010 w
+(the) 999 1010 w
+(first) 1191 1010 w
+10 /LucidaTypewriter f
+(Peter) 1423 1010 w
+10 /LucidaSansUnicode00 f
+(before) 1820 1010 w
+(dot.) 2171 1010 w
+(Regular) 2433 1010 w
+(expressions) 2838 1010 w
+(may) 3457 1010 w
+(be) 3695 1010 w
+(used) 3852 1010 w
+(with) 4122 1010 w
+(other) 4365 1010 w
+(address) 4660 1010 w
+(forms,) 720 1130 w
+(so) 1069 1130 w
+10 /LucidaTypewriter f
+(0+/Peter/) 1215 1130 w
+10 /LucidaSansUnicode00 f
+(finds) 1897 1130 w
+(the) 2173 1130 w
+(first) 2362 1130 w
+10 /LucidaTypewriter f
+(Peter) 2590 1130 w
+10 /LucidaSansUnicode00 f
+(in) 2983 1130 w
+(the) 3107 1130 w
+(file) 3295 1130 w
+(and) 3479 1130 w
+10 /LucidaTypewriter f
+($-/Peter/) 3692 1130 w
+10 /LucidaSansUnicode00 f
+(finds) 4373 1130 w
+(the) 4648 1130 w
+(last.) 4836 1130 w
+(Table II summarizes) 720 1250 w
+10 /LucidaTypewriter f
+(sam) 1728 1250 w
+10 /LucidaSansUnicode20 f
+(\031) 1944 1250 w
+10 /LucidaSansUnicode00 f
+(s addresses.) 1976 1250 w
+(Table II.) 2302 1430 w
+10 /LucidaTypewriter f
+(Sam) 2722 1430 w
+10 /LucidaSansUnicode00 f
+(addresses) 2970 1430 w
+10 /S f
+(_) 886 1498 w
+(_______________________________________________________________________________) 923 1498 w
+10 /LucidaSansUnicode00 f
+(Simple addresses) 886 1666 w
+10 /S f
+(_) 886 1734 w
+(_______________________________________________________________________________) 923 1734 w
+10 /LucidaTypewriter f
+(#) 886 1878 w
+10 /LucidaSans-Italic f
+(n) 958 1878 w
+10 /LucidaSansUnicode00 f
+(The empty string after character) 2089 1878 w
+10 /LucidaSans-Italic f
+(n) 3688 1878 w
+(n) 886 1998 w
+10 /LucidaSansUnicode00 f
+(Line) 2089 1998 w
+10 /LucidaSans-Italic f
+(n) 2321 1998 w
+10 /LucidaSansUnicode00 f
+(.) 2383 1998 w
+10 /LucidaTypewriter f
+(/) 886 2118 w
+10 /LucidaSans-Italic f
+(regexp) 958 2118 w
+10 /LucidaTypewriter f
+(/) 1288 2118 w
+10 /LucidaSansUnicode00 f
+(The first following match of the regular expression) 2089 2118 w
+10 /LucidaTypewriter f
+(-/) 886 2238 w
+10 /LucidaSans-Italic f
+(regexp) 1030 2238 w
+10 /LucidaTypewriter f
+(/) 1360 2238 w
+10 /LucidaSansUnicode00 f
+(The first previous match of the regular expression) 2089 2238 w
+10 /LucidaTypewriter f
+($) 886 2358 w
+10 /LucidaSansUnicode00 f
+(The null string at the end of the file) 2089 2358 w
+10 /LucidaTypewriter f
+(.) 886 2478 w
+10 /LucidaSansUnicode00 f
+(Dot) 2089 2478 w
+10 /LucidaTypewriter f
+(') 886 2598 w
+10 /LucidaSansUnicode00 f
+(The address mark, set by) 2089 2598 w
+10 /LucidaTypewriter f
+(k) 3348 2598 w
+10 /LucidaSansUnicode00 f
+(command) 3452 2598 w
+10 /LucidaTypewriter f
+(") 886 2718 w
+10 /LucidaSans-Italic f
+(regexp) 958 2718 w
+10 /LucidaTypewriter f
+(") 1288 2718 w
+10 /LucidaSansUnicode00 f
+(Dot in the file whose menu line matches regexp) 2089 2718 w
+10 /S f
+(_) 886 2786 w
+(_______________________________________________________________________________) 923 2786 w
+10 /LucidaSansUnicode00 f
+(Compound addresses) 886 2954 w
+10 /S f
+(_) 886 3022 w
+(_______________________________________________________________________________) 923 3022 w
+10 /LucidaSans-Italic f
+(a1) 886 3166 w
+10 /LucidaTypewriter f
+(+) 1010 3166 w
+10 /LucidaSans-Italic f
+(a2) 1082 3166 w
+10 /LucidaSansUnicode00 f
+(The address) 2089 3166 w
+10 /LucidaSans-Italic f
+(a2) 2714 3166 w
+10 /LucidaSansUnicode00 f
+(evaluated starting at right of) 2870 3166 w
+10 /LucidaSans-Italic f
+(a1) 4290 3166 w
+(a1) 886 3286 w
+10 /LucidaTypewriter f
+(-) 1010 3286 w
+10 /LucidaSans-Italic f
+(a2) 1082 3286 w
+(a2) 2089 3286 w
+10 /LucidaSansUnicode00 f
+(evaluated in the reverse direction starting at left of) 2245 3286 w
+10 /LucidaSans-Italic f
+(a1) 4749 3286 w
+(a1) 886 3406 w
+10 /LucidaTypewriter f
+(,) 1010 3406 w
+10 /LucidaSans-Italic f
+(a2) 1082 3406 w
+10 /LucidaSansUnicode00 f
+(From the left of) 2089 3406 w
+10 /LucidaSans-Italic f
+(a1) 2878 3406 w
+10 /LucidaSansUnicode00 f
+(to the right of) 3034 3406 w
+10 /LucidaSans-Italic f
+(a2) 3744 3406 w
+10 /LucidaSansUnicode00 f
+(\(default) 3900 3406 w
+10 /LucidaTypewriter f
+(0,$) 4304 3406 w
+10 /LucidaSansUnicode00 f
+(\)) 4520 3406 w
+10 /LucidaSans-Italic f
+(a1) 886 3526 w
+10 /LucidaTypewriter f
+(;) 1010 3526 w
+10 /LucidaSans-Italic f
+(a2) 1082 3526 w
+10 /LucidaSansUnicode00 f
+(Like) 2089 3526 w
+10 /LucidaTypewriter f
+(,) 2317 3526 w
+10 /LucidaSansUnicode00 f
+(but sets dot after evaluating) 2421 3526 w
+10 /LucidaSans-Italic f
+(a1) 3824 3526 w
+10 /S f
+(_) 886 3594 w
+(_______________________________________________________________________________) 923 3594 w
+10 /LucidaSansUnicode00 f
+(The) 1439 3762 w
+(operators) 1654 3762 w
+10 /LucidaTypewriter f
+(+) 2154 3762 w
+10 /LucidaSansUnicode00 f
+(and) 2260 3762 w
+10 /LucidaTypewriter f
+(-) 2474 3762 w
+10 /LucidaSansUnicode00 f
+(are) 2580 3762 w
+(high) 2766 3762 w
+(precedence,) 3015 3762 w
+(while) 3637 3762 w
+10 /LucidaTypewriter f
+(,) 3925 3762 w
+10 /LucidaSansUnicode00 f
+(and) 4032 3762 w
+10 /LucidaTypewriter f
+(;) 4247 3762 w
+10 /LucidaSansUnicode00 f
+(are) 1439 3882 w
+(low) 1626 3882 w
+(precedence.) 1828 3882 w
+(In) 2482 3882 w
+(both) 2607 3882 w
+10 /LucidaTypewriter f
+(+) 2864 3882 w
+10 /LucidaSansUnicode00 f
+(and) 2970 3882 w
+10 /LucidaTypewriter f
+(-) 3184 3882 w
+10 /LucidaSansUnicode00 f
+(forms,) 3290 3882 w
+10 /LucidaSans-Italic f
+(a2) 3639 3882 w
+10 /LucidaSansUnicode00 f
+(defaults) 3797 3882 w
+(to) 4221 3882 w
+(1) 1439 4002 w
+(and) 1537 4002 w
+10 /LucidaSans-Italic f
+(a1) 1752 4002 w
+10 /LucidaSansUnicode00 f
+(defaults) 1911 4002 w
+(to) 2336 4002 w
+(dot.) 2469 4002 w
+(If) 2729 4002 w
+(both) 2830 4002 w
+10 /LucidaSans-Italic f
+(a1) 3089 4002 w
+10 /LucidaSansUnicode00 f
+(and) 3249 4002 w
+10 /LucidaSans-Italic f
+(a2) 3465 4002 w
+10 /LucidaSansUnicode00 f
+(are) 3625 4002 w
+(present,) 3813 4002 w
+10 /LucidaTypewriter f
+(+) 4247 4002 w
+10 /LucidaSansUnicode00 f
+(may be elided.) 1439 4122 w
+10 /S f
+(_) 886 4202 w
+(_______________________________________________________________________________) 923 4202 w
+10 /LucidaSansUnicode00 f
+(The language discussed so far will not seem novel to people who use UNIX) 970 4538 w
+(text) 4635 4538 w
+(edi\255) 4859 4538 w
+(tors) 720 4658 w
+(such) 964 4658 w
+(as) 1244 4658 w
+10 /LucidaTypewriter f
+(ed) 1403 4658 w
+10 /LucidaSansUnicode00 f
+(or) 1600 4658 w
+10 /LucidaTypewriter f
+(vi) 1755 4658 w
+10 /LucidaSansUnicode00 f
+(.) 1899 4658 w
+6 /LucidaSansUnicode00 f
+(9) 1931 4608 w
+10 /LucidaSansUnicode00 f
+(Moreover,) 2022 4658 w
+(the) 2561 4658 w
+(kinds) 2769 4658 w
+(of) 3085 4658 w
+(editing) 3236 4658 w
+(operations) 3627 4658 w
+(these) 4196 4658 w
+(commands) 4511 4658 w
+(allow,) 720 4778 w
+(with) 1036 4778 w
+(the) 1274 4778 w
+(exception) 1462 4778 w
+(of) 1971 4778 w
+(regular) 2102 4778 w
+(expressions) 2481 4778 w
+(and) 3097 4778 w
+(line) 3311 4778 w
+(numbers,) 3521 4778 w
+(are) 4015 4778 w
+(clearly) 4201 4778 w
+(more) 4548 4778 w
+(con\255) 4833 4778 w
+(veniently) 720 4898 w
+(handled) 1209 4898 w
+(by) 1653 4898 w
+(a) 1822 4898 w
+(mouse-based) 1930 4898 w
+(interface.) 2652 4898 w
+(Indeed,) 3193 4898 w
+10 /LucidaTypewriter f
+(sam) 3607 4898 w
+10 /LucidaSansUnicode20 f
+(\031) 3823 4898 w
+10 /LucidaSansUnicode00 f
+(s) 3855 4898 w
+(mouse) 3959 4898 w
+(language) 4335 4898 w
+(\(dis\255) 4831 4898 w
+(cussed) 720 5018 w
+(at) 1098 5018 w
+(length) 1234 5018 w
+(below\)) 1586 5018 w
+(is) 1949 5018 w
+(the) 2073 5018 w
+(means) 2272 5018 w
+(by) 2633 5018 w
+(which) 2792 5018 w
+(simple) 3117 5018 w
+(changes) 3482 5018 w
+(are) 3926 5018 w
+(usually) 4123 5018 w
+(made.) 4508 5018 w
+(For) 4884 5018 w
+(large) 720 5138 w
+(or) 1013 5138 w
+(repetitive) 1165 5138 w
+(changes,) 1671 5138 w
+(however,) 2152 5138 w
+(a) 2639 5138 w
+(textual) 2743 5138 w
+(language) 3129 5138 w
+(outperforms) 3621 5138 w
+(a) 4273 5138 w
+(manual) 4377 5138 w
+(inter\255) 4782 5138 w
+(face.) 720 5258 w
+(Imagine) 970 5414 w
+(that,) 1411 5414 w
+(instead) 1689 5414 w
+(of) 2097 5414 w
+(deleting) 2250 5414 w
+(just) 2699 5414 w
+(one) 2934 5414 w
+(occurrence) 3168 5414 w
+(of) 3756 5414 w
+(the) 3910 5414 w
+(string) 4121 5414 w
+10 /LucidaTypewriter f
+(Peter) 4459 5414 w
+10 /LucidaSansUnicode00 f
+(,) 4819 5414 w
+(we) 4907 5414 w
+(wanted) 720 5534 w
+(to) 1114 5534 w
+(eliminate) 1256 5534 w
+(every) 1746 5534 w
+10 /LucidaTypewriter f
+(Peter) 2047 5534 w
+10 /LucidaSansUnicode00 f
+(.) 2407 5534 w
+(What) 2515 5534 w
+10 /LucidaSansUnicode20 f
+(\031) 2755 5534 w
+10 /LucidaSansUnicode00 f
+(s) 2787 5534 w
+(needed) 2882 5534 w
+(is) 3282 5534 w
+(an) 3406 5534 w
+(iterator) 3567 5534 w
+(that) 3968 5534 w
+(runs) 4203 5534 w
+(a) 4463 5534 w
+(command) 4562 5534 w
+(for each occurrence of some text.) 720 5654 w
+10 /LucidaTypewriter f
+(Sam) 2421 5654 w
+10 /LucidaSansUnicode20 f
+(\031) 2637 5654 w
+10 /LucidaSansUnicode00 f
+(s iterator is called) 2669 5654 w
+10 /LucidaTypewriter f
+(x) 3568 5654 w
+10 /LucidaSansUnicode00 f
+(, for extract:) 3640 5654 w
+9 /LucidaTypewriter f
+(x/) 920 5824 w
+9 /LucidaSans-Italic f
+(expression) 1050 5824 w
+9 /LucidaTypewriter f
+(/) 1514 5824 w
+9 /LucidaSans-Italic f
+(command) 1644 5824 w
+10 /LucidaSansUnicode00 f
+(finds) 720 6004 w
+(all) 1002 6004 w
+(matches) 1155 6004 w
+(in) 1600 6004 w
+(dot) 1731 6004 w
+(of) 1932 6004 w
+(the) 2070 6004 w
+(specified) 2265 6004 w
+(expression,) 2740 6004 w
+(and) 3343 6004 w
+(for) 3563 6004 w
+(each) 3742 6004 w
+(such) 4006 6004 w
+(match,) 4272 6004 w
+(sets) 4643 6004 w
+(dot) 4879 6004 w
+(to the text matched and runs the command.) 720 6124 w
+(So to delete all the) 2930 6124 w
+10 /LucidaTypewriter f
+(Peters:) 3868 6124 w
+9 /LucidaTypewriter f
+(0,$) 920 6294 w
+(x/Peter/) 1180 6294 w
+(d) 1765 6294 w
+10 /LucidaSansUnicode00 f
+(\(Blanks) 720 6474 w
+(in) 1115 6474 w
+(these) 1255 6474 w
+(examples) 1566 6474 w
+(are) 2079 6474 w
+(to) 2280 6474 w
+(improve) 2427 6474 w
+(readability;) 2871 6474 w
+10 /LucidaTypewriter f
+(sam) 3461 6474 w
+10 /LucidaSansUnicode00 f
+(neither) 3726 6474 w
+(requires) 4119 6474 w
+(nor) 4568 6474 w
+(inter\255) 4782 6474 w
+(prets) 720 6594 w
+(them.\)) 1013 6594 w
+(This) 1403 6594 w
+(searches) 1653 6594 w
+(the) 2121 6594 w
+(entire) 2321 6594 w
+(file) 2647 6594 w
+(\() 2843 6594 w
+10 /LucidaTypewriter f
+(0,$) 2876 6594 w
+10 /LucidaSansUnicode00 f
+(\)) 3092 6594 w
+(for) 3170 6594 w
+(occurrences) 3354 6594 w
+(of) 3981 6594 w
+(the) 4123 6594 w
+(string) 4322 6594 w
+10 /LucidaTypewriter f
+(Peter) 4648 6594 w
+10 /LucidaSansUnicode00 f
+(,) 5008 6594 w
+(and runs the) 720 6714 w
+10 /LucidaTypewriter f
+(d) 1367 6714 w
+10 /LucidaSansUnicode00 f
+(command with dot set to each such occurrence.) 1471 6714 w
+(\(By) 3860 6714 w
+(contrast,) 4036 6714 w
+(the) 4496 6714 w
+(compa\255) 4684 6714 w
+(rable) 720 6834 w
+10 /LucidaTypewriter f
+(ed) 1023 6834 w
+10 /LucidaSansUnicode00 f
+(command) 1226 6834 w
+(would) 1763 6834 w
+(delete) 2114 6834 w
+(all) 2470 6834 w
+10 /LucidaSans-Italic f
+(lines) 2642 6834 w
+10 /LucidaSansUnicode00 f
+(containing) 2923 6834 w
+10 /LucidaTypewriter f
+(Peter) 3492 6834 w
+10 /LucidaSansUnicode00 f
+(;) 3852 6834 w
+10 /LucidaTypewriter f
+(sam) 3943 6834 w
+10 /LucidaSansUnicode00 f
+(deletes) 4217 6834 w
+(only) 4623 6834 w
+(the) 4885 6834 w
+10 /LucidaTypewriter f
+(Peters) 720 6954 w
+10 /LucidaSansUnicode00 f
+(.\)) 1152 6954 w
+(The) 1307 6954 w
+(address) 1547 6954 w
+10 /LucidaTypewriter f
+(0,$) 1986 6954 w
+10 /LucidaSansUnicode00 f
+(is) 2261 6954 w
+(commonly) 2400 6954 w
+(used,) 2961 6954 w
+(and) 3284 6954 w
+(may) 3523 6954 w
+(be) 3782 6954 w
+(abbreviated) 3960 6954 w
+(to) 4589 6954 w
+(just) 4746 6954 w
+(a) 4985 6954 w
+(comma.) 720 7074 w
+(As another example,) 1169 7074 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 7 7
+%%Page: 8 8
+/saveobj save def
+mark
+8 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 8 \255) 2783 480 w
+9 /LucidaTypewriter f
+(,) 920 830 w
+(x/Peter/) 1050 830 w
+(p) 1635 830 w
+10 /LucidaSansUnicode00 f
+(prints) 720 1010 w
+(a) 1045 1010 w
+(list) 1142 1010 w
+(of) 1330 1010 w
+10 /LucidaTypewriter f
+(Peters,) 1470 1010 w
+10 /LucidaSansUnicode00 f
+(one) 2016 1010 w
+(for) 2237 1010 w
+(each) 2419 1010 w
+(appearance) 2686 1010 w
+(in) 3286 1010 w
+(the) 3420 1010 w
+(file,) 3618 1010 w
+(with) 3844 1010 w
+(no) 4092 1010 w
+(intervening) 4258 1010 w
+(text) 4849 1010 w
+(\(not even newlines to separate the instances\).) 720 1130 w
+(Of) 970 1286 w
+(course,) 1123 1286 w
+(the) 1515 1286 w
+(text) 1708 1286 w
+(extracted) 1937 1286 w
+(by) 2432 1286 w
+10 /LucidaTypewriter f
+(x) 2585 1286 w
+10 /LucidaSansUnicode00 f
+(may) 2695 1286 w
+(be) 2933 1286 w
+(selected) 3090 1286 w
+(by) 3527 1286 w
+(a) 3680 1286 w
+(regular) 3773 1286 w
+(expression,) 4157 1286 w
+(which) 4759 1286 w
+(complicates) 720 1406 w
+(deciding) 1344 1406 w
+(what) 1807 1406 w
+(set) 2086 1406 w
+(of) 2278 1406 w
+(matches) 2424 1406 w
+(is) 2877 1406 w
+(chosen) 3004 1406 w
+10 /LucidaSansUnicode20 f
+(\024) 3394 1406 w
+10 /LucidaSansUnicode00 f
+(matches) 3541 1406 w
+(may) 3993 1406 w
+(overlap.) 4240 1406 w
+(This) 4708 1406 w
+(is) 4960 1406 w
+(resolved) 720 1526 w
+(by) 1194 1526 w
+(generating) 1374 1526 w
+(the) 1961 1526 w
+(matches) 2181 1526 w
+(starting) 2651 1526 w
+(from) 3090 1526 w
+(the) 3388 1526 w
+(beginning) 3609 1526 w
+(of) 4162 1526 w
+(dot) 4326 1526 w
+(using) 4553 1526 w
+(the) 4885 1526 w
+(leftmost-longest) 720 1646 w
+(rule,) 1576 1646 w
+(and) 1835 1646 w
+(searching) 2054 1646 w
+(for) 2562 1646 w
+(each) 2740 1646 w
+(match) 3003 1646 w
+(starting) 3340 1646 w
+(from) 3753 1646 w
+(the) 4024 1646 w
+(end) 4218 1646 w
+(of) 4437 1646 w
+(the) 4573 1646 w
+(previ\255) 4766 1646 w
+(ous) 720 1766 w
+(one.) 930 1766 w
+(Regular) 1209 1766 w
+(expressions) 1613 1766 w
+(may) 2231 1766 w
+(also) 2467 1766 w
+(match) 2699 1766 w
+(null) 3033 1766 w
+(strings,) 3251 1766 w
+(but) 3652 1766 w
+(a) 3850 1766 w
+(null) 3942 1766 w
+(match) 4161 1766 w
+(adjacent) 4496 1766 w
+(to) 4942 1766 w
+(a non-null match is never selected; at least one character must intervene.) 720 1886 w
+(For example,) 4366 1886 w
+9 /LucidaTypewriter f
+(,) 920 2056 w
+(c/AAA/) 1050 2056 w
+(x/B*/) 920 2166 w
+(c/-/) 1310 2166 w
+(,) 920 2276 w
+(p) 1050 2276 w
+10 /LucidaSansUnicode00 f
+(produces as output) 720 2456 w
+9 /LucidaTypewriter f
+(-A-A-A-) 920 2626 w
+10 /LucidaSansUnicode00 f
+(because the pattern) 720 2806 w
+10 /LucidaTypewriter f
+(B*) 1716 2806 w
+10 /LucidaSansUnicode00 f
+(matches the null strings separating the) 1892 2806 w
+10 /LucidaTypewriter f
+(A) 3825 2806 w
+10 /LucidaSansUnicode20 f
+(\031) 3897 2806 w
+10 /LucidaSansUnicode00 f
+(s.) 3929 2806 w
+(The) 970 2962 w
+10 /LucidaTypewriter f
+(x) 1188 2962 w
+10 /LucidaSansUnicode00 f
+(command) 1297 2962 w
+(has) 1812 2962 w
+(a) 2017 2962 w
+(complement,) 2109 2962 w
+10 /LucidaTypewriter f
+(y) 2779 2962 w
+10 /LucidaSansUnicode00 f
+(,) 2851 2962 w
+(with) 2920 2962 w
+(similar) 3162 2962 w
+(syntax,) 3526 2962 w
+(that) 3913 2962 w
+(executes) 4141 2962 w
+(the) 4609 2962 w
+(com\255) 4802 2962 w
+(mand with dot set to the text) 720 3082 w
+10 /LucidaSans-Italic f
+(between) 2171 3082 w
+10 /LucidaSansUnicode00 f
+(the matches of the expression.) 2601 3082 w
+(For example,) 4169 3082 w
+9 /LucidaTypewriter f
+(,) 920 3252 w
+(c/AAA/) 1050 3252 w
+(y/A/) 920 3362 w
+(c/-/) 1245 3362 w
+(,) 920 3472 w
+(p) 1050 3472 w
+10 /LucidaSansUnicode00 f
+(produces the same result as the example above.) 720 3652 w
+(The) 970 3808 w
+10 /LucidaTypewriter f
+(x) 1189 3808 w
+10 /LucidaSansUnicode00 f
+(and) 1299 3808 w
+10 /LucidaTypewriter f
+(y) 1517 3808 w
+10 /LucidaSansUnicode00 f
+(commands) 1627 3808 w
+(are) 2194 3808 w
+(looping) 2384 3808 w
+(constructs,) 2789 3808 w
+(and) 3363 3808 w
+10 /LucidaTypewriter f
+(sam) 3581 3808 w
+10 /LucidaSansUnicode00 f
+(has) 3836 3808 w
+(a) 4043 3808 w
+(pair) 4137 3808 w
+(of) 4364 3808 w
+(conditional) 4501 3808 w
+(commands to go with them.) 720 3928 w
+(They have similar syntax:) 2147 3928 w
+9 /LucidaTypewriter f
+(g/) 920 4098 w
+9 /LucidaSans-Italic f
+(expression) 1050 4098 w
+9 /LucidaTypewriter f
+(/) 1514 4098 w
+9 /LucidaSans-Italic f
+(command) 1644 4098 w
+10 /LucidaSansUnicode00 f
+(\(guard\)) 720 4278 w
+(runs) 1105 4278 w
+(the) 1357 4278 w
+(command) 1548 4278 w
+(exactly) 2062 4278 w
+(once) 2439 4278 w
+(if) 2705 4278 w
+(dot) 2807 4278 w
+(contains) 3004 4278 w
+(a) 3449 4278 w
+(match) 3541 4278 w
+(of) 3876 4278 w
+(the) 4011 4278 w
+(expression.) 4203 4278 w
+(This) 4835 4278 w
+(is) 720 4398 w
+(different) 842 4398 w
+(from) 1302 4398 w
+10 /LucidaTypewriter f
+(x) 1576 4398 w
+10 /LucidaSansUnicode00 f
+(,) 1648 4398 w
+(which) 1722 4398 w
+(runs) 2045 4398 w
+(the) 2303 4398 w
+(command) 2500 4398 w
+(for) 3020 4398 w
+10 /LucidaSans-Italic f
+(each) 3201 4398 w
+10 /LucidaSansUnicode00 f
+(match:) 3469 4398 w
+10 /LucidaTypewriter f
+(x) 3841 4398 w
+10 /LucidaSansUnicode00 f
+(loops;) 3955 4398 w
+10 /LucidaTypewriter f
+(g) 4294 4398 w
+10 /LucidaSansUnicode00 f
+(merely) 4408 4398 w
+(tests,) 4776 4398 w
+(without changing the value of dot.) 720 4518 w
+(Thus,) 2454 4518 w
+9 /LucidaTypewriter f
+(,) 920 4688 w
+(x/Peter/) 1050 4688 w
+(d) 1635 4688 w
+10 /LucidaSansUnicode00 f
+(deletes all occurrences of) 720 4868 w
+10 /LucidaTypewriter f
+(Peter) 1990 4868 w
+10 /LucidaSansUnicode00 f
+(, but) 2350 4868 w
+9 /LucidaTypewriter f
+(,) 920 5038 w
+(g/Peter/) 1050 5038 w
+(d) 1635 5038 w
+10 /LucidaSansUnicode00 f
+(deletes) 720 5218 w
+(the) 1104 5218 w
+(whole) 1295 5218 w
+(file) 1616 5218 w
+(\(reduces) 1803 5218 w
+(it) 2252 5218 w
+(to) 2354 5218 w
+(a) 2488 5218 w
+(null) 2579 5218 w
+(string\)) 2797 5218 w
+(if) 3148 5218 w
+10 /LucidaTypewriter f
+(Peter) 3250 5218 w
+10 /LucidaSansUnicode00 f
+(occurs) 3646 5218 w
+(anywhere) 3999 5218 w
+(in) 4497 5218 w
+(the) 4625 5218 w
+(text.) 4817 5218 w
+(The) 720 5338 w
+(complementary) 946 5338 w
+(conditional) 1740 5338 w
+(is) 2324 5338 w
+10 /LucidaTypewriter f
+(v) 2449 5338 w
+10 /LucidaSansUnicode00 f
+(,) 2521 5338 w
+(which) 2598 5338 w
+(runs) 2924 5338 w
+(the) 3185 5338 w
+(command) 3385 5338 w
+(if) 3907 5338 w
+(there) 4017 5338 w
+(is) 4313 5338 w
+10 /LucidaSans-Italic f
+(no) 4437 5338 w
+10 /LucidaSansUnicode00 f
+(match) 4600 5338 w
+(of) 4942 5338 w
+(the expression.) 720 5458 w
+(These) 970 5614 w
+(control-structure-like) 1328 5614 w
+(commands) 2466 5614 w
+(may) 3065 5614 w
+(be) 3336 5614 w
+(composed) 3526 5614 w
+(to) 4096 5614 w
+(construct) 4265 5614 w
+(more) 4789 5614 w
+(involved) 720 5734 w
+(operations.) 1173 5734 w
+(For) 1802 5734 w
+(example,) 2007 5734 w
+(to) 2501 5734 w
+(print) 2648 5734 w
+(those) 2929 5734 w
+(lines) 3245 5734 w
+(of) 3521 5734 w
+(text) 3668 5734 w
+(that) 3908 5734 w
+(contain) 4148 5734 w
+(the) 4554 5734 w
+(string) 4758 5734 w
+10 /LucidaTypewriter f
+(Peter) 720 5854 w
+10 /LucidaSansUnicode00 f
+(:) 1080 5854 w
+9 /LucidaTypewriter f
+(,) 920 6024 w
+(x/.*\\n/) 1050 6024 w
+(g/Peter/) 1570 6024 w
+(p) 2155 6024 w
+10 /LucidaSansUnicode00 f
+(The) 720 6204 w
+10 /LucidaTypewriter f
+(x) 940 6204 w
+10 /LucidaSansUnicode00 f
+(breaks) 1051 6204 w
+(the) 1414 6204 w
+(file) 1608 6204 w
+(into) 1798 6204 w
+(lines,) 2026 6204 w
+(the) 2324 6204 w
+10 /LucidaTypewriter f
+(g) 2518 6204 w
+10 /LucidaSansUnicode00 f
+(selects) 2629 6204 w
+(those) 2999 6204 w
+(lines) 3305 6204 w
+(containing) 3571 6204 w
+10 /LucidaTypewriter f
+(Peter) 4121 6204 w
+10 /LucidaSansUnicode00 f
+(,) 4481 6204 w
+(and) 4553 6204 w
+(the) 4773 6204 w
+10 /LucidaTypewriter f
+(p) 4968 6204 w
+10 /LucidaSansUnicode00 f
+(prints) 720 6324 w
+(them.) 1046 6324 w
+(This) 1401 6324 w
+(command) 1649 6324 w
+(gives) 2170 6324 w
+(an) 2463 6324 w
+(address) 2623 6324 w
+(for) 3046 6324 w
+(the) 3228 6324 w
+10 /LucidaTypewriter f
+(x) 3426 6324 w
+10 /LucidaSansUnicode00 f
+(command) 3541 6324 w
+(\(the) 4062 6324 w
+(whole) 4293 6324 w
+(file\),) 4620 6324 w
+(but) 4878 6324 w
+(because) 720 6444 w
+10 /LucidaTypewriter f
+(g) 1151 6444 w
+10 /LucidaSansUnicode00 f
+(does) 1260 6444 w
+(not) 1528 6444 w
+(have) 1725 6444 w
+(an) 1987 6444 w
+(explicit) 2141 6444 w
+(address,) 2533 6444 w
+(it) 2983 6444 w
+(applies) 3087 6444 w
+(to) 3471 6444 w
+(the) 3607 6444 w
+(value) 3800 6444 w
+(of) 4092 6444 w
+(dot) 4228 6444 w
+(produced) 4427 6444 w
+(by) 4925 6444 w
+(the) 720 6564 w
+10 /LucidaTypewriter f
+(x) 911 6564 w
+10 /LucidaSansUnicode00 f
+(command,) 1018 6564 w
+(that) 1563 6564 w
+(is,) 1789 6564 w
+(to) 1936 6564 w
+(each) 2069 6564 w
+(line.) 2328 6564 w
+(All) 2603 6564 w
+(commands) 2765 6564 w
+(in) 3329 6564 w
+10 /LucidaTypewriter f
+(sam) 3455 6564 w
+10 /LucidaSansUnicode00 f
+(except) 3706 6564 w
+(for) 4065 6564 w
+(the) 4239 6564 w
+(command) 4429 6564 w
+(to) 4942 6564 w
+(write a file to disc use dot for the default address.) 720 6684 w
+(Composition may be continued indefinitely.) 970 6840 w
+9 /LucidaTypewriter f
+(,) 920 7010 w
+(x/.*\\n/) 1050 7010 w
+(g/Peter/) 1570 7010 w
+(v/SaltPeter/) 2155 7010 w
+(p) 3000 7010 w
+10 /LucidaSansUnicode00 f
+(prints those lines containing) 720 7190 w
+10 /LucidaTypewriter f
+(Peter) 2135 7190 w
+10 /LucidaSansUnicode00 f
+(but) 2527 7190 w
+10 /LucidaSans-Italic f
+(not) 2721 7190 w
+10 /LucidaSansUnicode00 f
+(those containing) 2910 7190 w
+10 /LucidaTypewriter f
+(SaltPeter) 3751 7190 w
+10 /LucidaSansUnicode00 f
+(.) 4399 7190 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 8 8
+%%Page: 9 9
+/saveobj save def
+mark
+9 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 9 \255) 2783 480 w
+10 /LucidaSans-Demi f
+(Structural Regular Expressions) 720 840 w
+10 /LucidaSansUnicode00 f
+(Unlike) 720 996 w
+(other) 1077 996 w
+(UNIX) 1388 996 w
+(text) 1677 996 w
+(editors,) 1922 996 w
+(including) 2346 996 w
+(the) 2849 996 w
+(non-interactive) 3059 996 w
+(ones) 3862 996 w
+(such) 4147 996 w
+(as) 4428 996 w
+10 /LucidaTypewriter f
+(sed) 4589 996 w
+10 /LucidaSansUnicode00 f
+(and) 4860 996 w
+10 /LucidaTypewriter f
+(awk) 720 1116 w
+10 /LucidaSansUnicode00 f
+(,) 936 1116 w
+6 /LucidaSansUnicode00 f
+(7) 968 1066 w
+10 /LucidaTypewriter f
+(sam) 1052 1116 w
+10 /LucidaSansUnicode00 f
+(is) 1314 1116 w
+(good) 1440 1116 w
+(for) 1733 1116 w
+(manipulating) 1918 1116 w
+(files) 2601 1116 w
+(with) 2848 1116 w
+(multi-line) 3098 1116 w
+10 /LucidaSansUnicode20 f
+(\030) 3627 1116 w
+10 /LucidaSansUnicode00 f
+(records.) 3659 1116 w
+10 /LucidaSansUnicode20 f
+(\031) 4055 1116 w
+10 /LucidaSansUnicode00 f
+(An) 4164 1116 w
+(example) 4340 1116 w
+(is) 4798 1116 w
+(an) 4923 1116 w
+(on-line phone book composed of records, separated by blank lines, of the form) 720 1236 w
+9 /LucidaTypewriter f
+(Herbert) 920 1406 w
+(Tic) 1440 1406 w
+(44) 920 1516 w
+(Turnip) 1115 1516 w
+(Ave.,) 1570 1516 w
+(Endive,) 1960 1516 w
+(NJ) 2480 1516 w
+(201-5555642) 920 1626 w
+(Norbert) 920 1846 w
+(Twinge) 1440 1846 w
+(16) 920 1956 w
+(Potato) 1115 1956 w
+(St.,) 1570 1956 w
+(Cabbagetown,) 1895 1956 w
+(NJ) 2740 1956 w
+(201-5553145) 920 2066 w
+(...) 920 2286 w
+10 /LucidaSansUnicode00 f
+(The format may be encoded as a regular expression:) 720 2466 w
+9 /LucidaTypewriter f
+(\(.+\\n\)+) 920 2636 w
+10 /LucidaSansUnicode00 f
+(that) 720 2816 w
+(is,) 957 2816 w
+(a) 1115 2816 w
+(sequence) 1216 2816 w
+(of) 1719 2816 w
+(one) 1863 2816 w
+(or) 2089 2816 w
+(more) 2238 2816 w
+(non-blank) 2536 2816 w
+(lines.) 3093 2816 w
+(The) 3431 2816 w
+(command) 3659 2816 w
+(to) 4184 2816 w
+(print) 4329 2816 w
+(Mr.) 4608 2816 w
+(Tic) 4814 2816 w
+10 /LucidaSansUnicode20 f
+(\031) 4957 2816 w
+10 /LucidaSansUnicode00 f
+(s) 4989 2816 w
+(entire record is then) 720 2936 w
+9 /LucidaTypewriter f
+(,) 920 3106 w
+(x/\(.+\\n\)+/) 1050 3106 w
+(g/^Herbert) 1765 3106 w
+(Tic$/) 2480 3106 w
+(p) 2870 3106 w
+10 /LucidaSansUnicode00 f
+(and that to extract just the phone number is) 720 3286 w
+9 /LucidaTypewriter f
+(,) 920 3456 w
+(x/\(.+\\n\)+/) 1050 3456 w
+(g/^Herbert) 1765 3456 w
+(Tic$/) 2480 3456 w
+(x/^[0-9]*-[0-9]*\\n/) 2870 3456 w
+(p) 4170 3456 w
+10 /LucidaSansUnicode00 f
+(The) 720 3636 w
+(latter) 941 3636 w
+(command) 1236 3636 w
+(breaks) 1754 3636 w
+(the) 2118 3636 w
+(file) 2313 3636 w
+(into) 2504 3636 w
+(records,) 2733 3636 w
+(chooses) 3169 3636 w
+(Mr.) 3602 3636 w
+(Tic) 3802 3636 w
+10 /LucidaSansUnicode20 f
+(\031) 3945 3636 w
+10 /LucidaSansUnicode00 f
+(s) 3977 3636 w
+(record,) 4069 3636 w
+(extracts) 4455 3636 w
+(the) 4885 3636 w
+(phone number from the record, and finally prints the number.) 720 3756 w
+(A) 970 3912 w
+(more) 1073 3912 w
+(involved) 1358 3912 w
+(problem) 1796 3912 w
+(is) 2236 3912 w
+(that) 2350 3912 w
+(of) 2575 3912 w
+(renaming) 2707 3912 w
+(a) 3201 3912 w
+(particular) 3290 3912 w
+(variable,) 3787 3912 w
+(say) 4233 3912 w
+10 /LucidaTypewriter f
+(n) 4426 3912 w
+10 /LucidaSansUnicode00 f
+(,) 4498 3912 w
+(to) 4565 3912 w
+10 /LucidaTypewriter f
+(num) 4698 3912 w
+10 /LucidaSansUnicode00 f
+(in) 4949 3912 w
+(a C program.) 720 4032 w
+(The obvious first attempt,) 1420 4032 w
+9 /LucidaTypewriter f
+(,) 920 4202 w
+(x/n/) 1050 4202 w
+(c/num/) 1375 4202 w
+10 /LucidaSansUnicode00 f
+(is) 720 4382 w
+(badly) 847 4382 w
+(flawed:) 1156 4382 w
+(it) 1552 4382 w
+(changes) 1665 4382 w
+(not) 2111 4382 w
+(only) 2318 4382 w
+(the) 2569 4382 w
+(variable) 2771 4382 w
+10 /LucidaTypewriter f
+(n) 3198 4382 w
+10 /LucidaSansUnicode00 f
+(but) 3317 4382 w
+(any) 3526 4382 w
+(letter) 3742 4382 w
+10 /LucidaTypewriter f
+(n) 4045 4382 w
+10 /LucidaSansUnicode00 f
+(that) 4164 4382 w
+(appears.) 4402 4382 w
+(We) 4898 4382 w
+(need to extract all the variables, and select those that match) 720 4502 w
+10 /LucidaTypewriter f
+(n) 3692 4502 w
+10 /LucidaSansUnicode00 f
+(and only) 3796 4502 w
+10 /LucidaTypewriter f
+(n) 4244 4502 w
+10 /LucidaSansUnicode00 f
+(:) 4316 4502 w
+9 /LucidaTypewriter f
+(,) 920 4672 w
+(x/[A-Za-z_][A-Za-z_0-9]*/) 1050 4672 w
+(g/n/) 2740 4672 w
+(v/../) 3065 4672 w
+(c/num/) 3455 4672 w
+10 /LucidaSansUnicode00 f
+(The) 720 4852 w
+(pattern) 942 4852 w
+10 /LucidaTypewriter f
+([A-Za-z_][A-Za-z_0-9]*) 1334 4852 w
+10 /LucidaSansUnicode00 f
+(matches) 2959 4852 w
+(C) 3405 4852 w
+(identifiers.) 3515 4852 w
+(Next) 4110 4852 w
+10 /LucidaTypewriter f
+(g/n/) 4379 4852 w
+10 /LucidaSansUnicode00 f
+(selects) 4709 4852 w
+(those) 720 4972 w
+(containing) 1026 4972 w
+(an) 1575 4972 w
+10 /LucidaTypewriter f
+(n) 1731 4972 w
+10 /LucidaSansUnicode00 f
+(.) 1803 4972 w
+(Then) 1906 4972 w
+10 /LucidaTypewriter f
+(v/../) 2188 4972 w
+10 /LucidaSansUnicode00 f
+(rejects) 2587 4972 w
+(those) 2947 4972 w
+(containing) 3252 4972 w
+(two) 3800 4972 w
+(\(or) 4013 4972 w
+(more\)) 4186 4972 w
+(characters,) 4508 4972 w
+(and) 720 5092 w
+(finally) 940 5092 w
+10 /LucidaTypewriter f
+(c/num/) 1273 5092 w
+10 /LucidaSansUnicode00 f
+(changes) 1745 5092 w
+(the) 2185 5092 w
+(remainder) 2381 5092 w
+(\(identifiers) 2918 5092 w
+10 /LucidaTypewriter f
+(n) 3482 5092 w
+10 /LucidaSansUnicode00 f
+(\)) 3554 5092 w
+(to) 3628 5092 w
+10 /LucidaTypewriter f
+(num) 3767 5092 w
+10 /LucidaSansUnicode00 f
+(.) 3983 5092 w
+(This) 4088 5092 w
+(version) 4334 5092 w
+(clearly) 4727 5092 w
+(works) 720 5212 w
+(much) 1053 5212 w
+(better,) 1366 5212 w
+(but) 1733 5212 w
+(there) 1940 5212 w
+(may) 2237 5212 w
+(still) 2482 5212 w
+(be) 2702 5212 w
+(problems.) 2865 5212 w
+(For) 3430 5212 w
+(example,) 3630 5212 w
+(in) 4119 5212 w
+(C) 4254 5212 w
+(character) 4367 5212 w
+(and) 4860 5212 w
+(string) 720 5332 w
+(constants,) 1046 5332 w
+(the) 1589 5332 w
+(sequence) 1788 5332 w
+10 /LucidaTypewriter f
+(\\n) 2289 5332 w
+10 /LucidaSansUnicode00 f
+(is) 2478 5332 w
+(interpreted) 2603 5332 w
+(as) 3189 5332 w
+(a) 3340 5332 w
+(newline) 3440 5332 w
+(character,) 3856 5332 w
+(and) 4382 5332 w
+(we) 4607 5332 w
+(don) 4785 5332 w
+10 /LucidaSansUnicode20 f
+(\031) 4971 5332 w
+10 /LucidaSansUnicode00 f
+(t) 5003 5332 w
+(want to change it to) 720 5452 w
+10 /LucidaTypewriter f
+(\\num.) 1721 5452 w
+10 /LucidaSansUnicode00 f
+(This problem can be forestalled with a) 2113 5452 w
+10 /LucidaTypewriter f
+(y) 4010 5452 w
+10 /LucidaSansUnicode00 f
+(command:) 4114 5452 w
+9 /LucidaTypewriter f
+(,) 920 5622 w
+(y/\\\\n/) 1050 5622 w
+(x/[A-Za-z_][A-Za-z_0-9]*/) 1505 5622 w
+(g/n/) 3195 5622 w
+(v/../) 3520 5622 w
+(c/num/) 3910 5622 w
+10 /LucidaSansUnicode00 f
+(\(the) 720 5802 w
+(second) 943 5802 w
+10 /LucidaTypewriter f
+(\\) 1322 5802 w
+10 /LucidaSansUnicode00 f
+(is) 1429 5802 w
+(necessary) 1544 5802 w
+(because) 2054 5802 w
+(of) 2483 5802 w
+(lexical) 2616 5802 w
+(conventions) 2961 5802 w
+(in) 3580 5802 w
+(regular) 3706 5802 w
+(expressions\),) 4087 5802 w
+(or) 4769 5802 w
+(we) 4907 5802 w
+(could even reject character constants and strings outright:) 720 5922 w
+9 /LucidaTypewriter f
+(,y/'[^']*'/) 720 6092 w
+(y/"[^"]*"/) 1500 6092 w
+(x/[A-Za-z_][A-Za-z_0-9]*/) 2215 6092 w
+(g/n/) 3905 6092 w
+(v/../) 4230 6092 w
+(c/num/) 4620 6092 w
+10 /LucidaSansUnicode00 f
+(The) 720 6272 w
+10 /LucidaTypewriter f
+(y) 937 6272 w
+10 /LucidaSansUnicode00 f
+(commands) 1045 6272 w
+(in) 1610 6272 w
+(this) 1737 6272 w
+(version) 1952 6272 w
+(exclude) 2341 6272 w
+(from) 2756 6272 w
+(consideration) 3025 6272 w
+(all) 3720 6272 w
+(character) 3870 6272 w
+(constants) 4356 6272 w
+(and) 4860 6272 w
+(strings.) 720 6392 w
+(The) 1162 6392 w
+(only) 1388 6392 w
+(remaining) 1637 6392 w
+(problem) 2171 6392 w
+(is) 2622 6392 w
+(to) 2747 6392 w
+(deal) 2890 6392 w
+(with) 3137 6392 w
+(the) 3386 6392 w
+(possible) 3585 6392 w
+(occurrence) 4032 6392 w
+(of) 4608 6392 w
+10 /LucidaTypewriter f
+(\\') 4750 6392 w
+10 /LucidaSansUnicode00 f
+(or) 4938 6392 w
+10 /LucidaTypewriter f
+(\\") 720 6512 w
+10 /LucidaSansUnicode00 f
+(within these sequences, but it) 896 6512 w
+10 /LucidaSansUnicode20 f
+(\031) 2350 6512 w
+10 /LucidaSansUnicode00 f
+(s easy to see how to resolve this difficulty.) 2382 6512 w
+(The) 970 6668 w
+(point) 1195 6668 w
+(of) 1492 6668 w
+(these) 1635 6668 w
+(composed) 1942 6668 w
+(commands) 2486 6668 w
+(is) 3060 6668 w
+(successive) 3185 6668 w
+(refinement.) 3740 6668 w
+(A) 4378 6668 w
+(simple) 4492 6668 w
+(ver\255) 4858 6668 w
+(sion) 720 6788 w
+(of) 962 6788 w
+(the) 1099 6788 w
+(command) 1293 6788 w
+(is) 1810 6788 w
+(tried,) 1928 6788 w
+(and) 2224 6788 w
+(if) 2442 6788 w
+(it) 2546 6788 w
+10 /LucidaSansUnicode20 f
+(\031) 2612 6788 w
+10 /LucidaSansUnicode00 f
+(s) 2644 6788 w
+(not) 2733 6788 w
+(good) 2931 6788 w
+(enough,) 3216 6788 w
+(it) 3651 6788 w
+(can) 3755 6788 w
+(be) 3961 6788 w
+(honed) 4118 6788 w
+(by) 4460 6788 w
+(adding) 4613 6788 w
+(a) 4985 6788 w
+(clause) 720 6908 w
+(or) 1058 6908 w
+(two.) 1194 6908 w
+(\(Mistakes) 1467 6908 w
+(can) 1957 6908 w
+(be) 2159 6908 w
+(undone;) 2312 6908 w
+(see) 2744 6908 w
+(below.) 2941 6908 w
+(Also,) 3325 6908 w
+(the) 3601 6908 w
+(mouse) 3790 6908 w
+(language) 4148 6908 w
+(makes) 4626 6908 w
+(it) 4974 6908 w
+(unnecessary) 720 7028 w
+(to) 1357 7028 w
+(retype) 1493 7028 w
+(the) 1836 7028 w
+(command) 2029 7028 w
+(each) 2545 7028 w
+(time.\)) 2807 7028 w
+(The) 3156 7028 w
+(resulting) 3374 7028 w
+(chains) 3840 7028 w
+(of) 4187 7028 w
+(commands) 4322 7028 w
+(are) 4888 7028 w
+(somewhat) 720 7148 w
+(reminiscent) 1262 7148 w
+(of) 1879 7148 w
+(shell) 2027 7148 w
+(pipelines.) 2305 7148 w
+6 /LucidaSansUnicode00 f
+(7) 2775 7098 w
+10 /LucidaSansUnicode00 f
+(Unlike) 2864 7148 w
+(pipelines,) 3218 7148 w
+(though,) 3739 7148 w
+(which) 4168 7148 w
+(pass) 4500 7148 w
+(along) 4771 7148 w
+(modified) 720 7268 w
+10 /LucidaSans-Italic f
+(data) 1197 7268 w
+10 /LucidaSansUnicode00 f
+(,) 1418 7268 w
+10 /LucidaTypewriter f
+(sam) 1496 7268 w
+10 /LucidaSansUnicode00 f
+(commands) 1758 7268 w
+(pass) 2333 7268 w
+(a) 2599 7268 w
+10 /LucidaSans-Italic f
+(view) 2700 7268 w
+10 /LucidaSansUnicode00 f
+(of) 2960 7268 w
+(the) 3103 7268 w
+(data.) 3303 7268 w
+(The) 3622 7268 w
+(text) 3848 7268 w
+(at) 4084 7268 w
+(each) 4221 7268 w
+(step) 4490 7268 w
+(of) 4742 7268 w
+(the) 4885 7268 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 9 9
+%%Page: 10 10
+/saveobj save def
+mark
+10 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 10 \255) 2752 480 w
+(command) 720 840 w
+(is) 1244 840 w
+(the) 1370 840 w
+(same,) 1571 840 w
+(but) 1904 840 w
+(which) 2112 840 w
+(pieces) 2439 840 w
+(are) 2791 840 w
+(selected) 2989 840 w
+(is) 3434 840 w
+(refined) 3560 840 w
+(step) 3950 840 w
+(by) 4203 840 w
+(step) 4365 840 w
+(until) 4619 840 w
+(the) 4885 840 w
+(correct) 720 960 w
+(piece) 1097 960 w
+(is) 1391 960 w
+(available) 1510 960 w
+(to) 1972 960 w
+(the) 2109 960 w
+(final) 2303 960 w
+(step) 2554 960 w
+(of) 2800 960 w
+(the) 2936 960 w
+(command) 3129 960 w
+(line,) 3645 960 w
+(which) 3891 960 w
+(ultimately) 4210 960 w
+(makes) 4727 960 w
+(the change.) 720 1080 w
+(In) 970 1236 w
+(other) 1100 1236 w
+(UNIX) 1396 1236 w
+(programs,) 1670 1236 w
+(regular) 2209 1236 w
+(expressions) 2595 1236 w
+(are) 3217 1236 w
+(used) 3409 1236 w
+(only) 3681 1236 w
+(for) 3925 1236 w
+(selection,) 4104 1236 w
+(as) 4608 1236 w
+(in) 4754 1236 w
+(the) 4885 1236 w
+10 /LucidaTypewriter f
+(sam) 720 1356 w
+(g) 969 1356 w
+10 /LucidaSansUnicode00 f
+(command,) 1074 1356 w
+(never for extraction as in the) 1617 1356 w
+10 /LucidaTypewriter f
+(x) 3057 1356 w
+10 /LucidaSansUnicode00 f
+(or) 3161 1356 w
+10 /LucidaTypewriter f
+(y) 3295 1356 w
+10 /LucidaSansUnicode00 f
+(command.) 3399 1356 w
+(For example, patterns) 3973 1356 w
+(in) 720 1476 w
+10 /LucidaTypewriter f
+(awk) 850 1476 w
+6 /LucidaSansUnicode00 f
+(7) 1066 1426 w
+10 /LucidaSansUnicode00 f
+(are) 1143 1476 w
+(used) 1335 1476 w
+(to) 1607 1476 w
+(select) 1745 1476 w
+(lines) 2065 1476 w
+(to) 2332 1476 w
+(be) 2470 1476 w
+(operated) 2629 1476 w
+(on,) 3101 1476 w
+(but) 3296 1476 w
+(cannot) 3498 1476 w
+(be) 3866 1476 w
+(used) 4025 1476 w
+(to) 4297 1476 w
+(describe) 4435 1476 w
+(the) 4885 1476 w
+(format) 720 1596 w
+(of) 1079 1596 w
+(the) 1212 1596 w
+(input) 1402 1596 w
+(text,) 1690 1596 w
+(or) 1948 1596 w
+(to) 2085 1596 w
+(handle) 2218 1596 w
+(newline-free) 2580 1596 w
+(text.) 3234 1596 w
+(The) 3524 1596 w
+(use) 3740 1596 w
+(of) 3944 1596 w
+(regular) 4077 1596 w
+(expressions) 4458 1596 w
+(to) 720 1716 w
+(describe) 864 1716 w
+(the) 1320 1716 w
+(structure) 1521 1716 w
+(of) 2005 1716 w
+(a) 2149 1716 w
+(piece) 2250 1716 w
+(of) 2551 1716 w
+(text) 2695 1716 w
+(rather) 2932 1716 w
+(than) 3270 1716 w
+(its) 3532 1716 w
+(contents,) 3695 1716 w
+(as) 4190 1716 w
+(in) 4343 1716 w
+(the) 4481 1716 w
+10 /LucidaTypewriter f
+(x) 4683 1716 w
+10 /LucidaSansUnicode00 f
+(com\255) 4802 1716 w
+(mand,) 720 1836 w
+(has) 1107 1836 w
+(been) 1357 1836 w
+(given) 1676 1836 w
+(a) 2019 1836 w
+(name:) 2156 1836 w
+10 /LucidaSans-Italic f
+(structural) 2535 1836 w
+(regular) 3101 1836 w
+(expressions.) 3544 1836 w
+10 /LucidaSansUnicode00 f
+(When) 4253 1836 w
+(they) 4600 1836 w
+(are) 4888 1836 w
+(composed,) 720 1956 w
+(as) 1315 1956 w
+(in) 1485 1956 w
+(the) 1640 1956 w
+(above) 1860 1956 w
+(example,) 2212 1956 w
+(they) 2722 1956 w
+(are) 2994 1956 w
+(pleasantly) 3211 1956 w
+(expressive.) 3765 1956 w
+(Their) 4410 1956 w
+(use) 4726 1956 w
+(is) 4960 1956 w
+(discussed at greater length elsewhere.) 720 2076 w
+6 /LucidaSansUnicode00 f
+(10) 2589 2026 w
+10 /LucidaSans-Demi f
+(Multiple files) 720 2352 w
+10 /LucidaTypewriter f
+(Sam) 720 2508 w
+10 /LucidaSansUnicode00 f
+(has a few other commands, mostly relating to input and output.) 968 2508 w
+9 /LucidaTypewriter f
+(e) 920 2678 w
+(discfilename) 1050 2678 w
+10 /LucidaSansUnicode00 f
+(replaces the contents and name of the current file with those of the named disc file;) 720 2858 w
+9 /LucidaTypewriter f
+(w) 920 3028 w
+(discfilename) 1050 3028 w
+10 /LucidaSansUnicode00 f
+(writes the contents to the named disc file; and) 720 3208 w
+9 /LucidaTypewriter f
+(r) 920 3378 w
+(discfilename) 1050 3378 w
+10 /LucidaSansUnicode00 f
+(replaces) 720 3558 w
+(dot) 1159 3558 w
+(with) 1357 3558 w
+(the) 1599 3558 w
+(contents) 1791 3558 w
+(of) 2245 3558 w
+(the) 2380 3558 w
+(named) 2572 3558 w
+(disc) 2938 3558 w
+(file.) 3169 3558 w
+(All) 3421 3558 w
+(these) 3586 3558 w
+(commands) 3886 3558 w
+(use) 4453 3558 w
+(the) 4660 3558 w
+(cur\255) 4853 3558 w
+(rent file) 720 3678 w
+10 /LucidaSansUnicode20 f
+(\031) 1099 3678 w
+10 /LucidaSansUnicode00 f
+(s name if none is specified.) 1131 3678 w
+(Finally,) 2526 3678 w
+9 /LucidaTypewriter f
+(f) 920 3848 w
+(discfilename) 1050 3848 w
+10 /LucidaSansUnicode00 f
+(changes the name associated with the file and displays the result:) 720 4028 w
+9 /LucidaTypewriter f
+('-.) 920 4198 w
+(discfilename) 1180 4198 w
+10 /LucidaSansUnicode00 f
+(This) 720 4378 w
+(output) 966 4378 w
+(is) 1329 4378 w
+(called) 1450 4378 w
+(the) 1774 4378 w
+(file) 1970 4378 w
+10 /LucidaSansUnicode20 f
+(\031) 2121 4378 w
+10 /LucidaSansUnicode00 f
+(s) 2153 4378 w
+10 /LucidaSans-Italic f
+(menu) 2245 4378 w
+(line,) 2556 4378 w
+10 /LucidaSansUnicode00 f
+(because) 2802 4378 w
+(it) 3237 4378 w
+(is) 3344 4378 w
+(the) 3465 4378 w
+(contents) 3661 4378 w
+(of) 4119 4378 w
+(the) 4258 4378 w
+(file) 4455 4378 w
+10 /LucidaSansUnicode20 f
+(\031) 4606 4378 w
+10 /LucidaSansUnicode00 f
+(s) 4638 4378 w
+(line) 4731 4378 w
+(in) 4949 4378 w
+(the) 720 4498 w
+(button) 930 4498 w
+(3) 1307 4498 w
+(menu) 1425 4498 w
+(\(described) 1753 4498 w
+(in) 2313 4498 w
+(the) 2458 4498 w
+(next) 2667 4498 w
+(section\).) 2937 4498 w
+(The) 3435 4498 w
+(first) 3670 4498 w
+(three) 3919 4498 w
+(characters) 4225 4498 w
+(are) 4779 4498 w
+(a) 4985 4498 w
+(concise) 720 4618 w
+(notation) 1141 4618 w
+(for) 1605 4618 w
+(the) 1804 4618 w
+(state) 2019 4618 w
+(of) 2315 4618 w
+(the) 2473 4618 w
+(file.) 2688 4618 w
+(The) 2963 4618 w
+(apostrophe) 3204 4618 w
+(signifies) 3814 4618 w
+(that) 4280 4618 w
+(the) 4532 4618 w
+(file) 4748 4618 w
+(is) 4960 4618 w
+(modified.) 720 4738 w
+(The) 1261 4738 w
+(minus) 1488 4738 w
+(sign) 1831 4738 w
+(indicates) 2081 4738 w
+(the) 2560 4738 w
+(number) 2761 4738 w
+(of) 3184 4738 w
+(windows) 3328 4738 w
+(open) 3793 4738 w
+(on) 4080 4738 w
+(the) 4248 4738 w
+(file) 4448 4738 w
+(\(see) 4644 4738 w
+(the) 4885 4738 w
+(next) 720 4858 w
+(section\):) 979 4858 w
+10 /LucidaTypewriter f
+(-) 1434 4858 w
+10 /LucidaSansUnicode00 f
+(means) 1549 4858 w
+(none,) 1909 4858 w
+10 /LucidaTypewriter f
+(+) 2225 4858 w
+10 /LucidaSansUnicode00 f
+(means) 2340 4858 w
+(one,) 2701 4858 w
+(and) 2956 4858 w
+10 /LucidaTypewriter f
+(*) 3180 4858 w
+10 /LucidaSansUnicode00 f
+(means) 3296 4858 w
+(more) 3657 4858 w
+(than) 3952 4858 w
+(one.) 4212 4858 w
+(Finally,) 4499 4858 w
+(the) 4885 4858 w
+(period) 720 4978 w
+(indicates) 1072 4978 w
+(that) 1544 4978 w
+(this) 1774 4978 w
+(is) 1992 4978 w
+(the) 2111 4978 w
+(current) 2305 4978 w
+(file.) 2694 4978 w
+(These) 2948 4978 w
+(characters) 3275 4978 w
+(are) 3814 4978 w
+(useful) 4004 4978 w
+(for) 4339 4978 w
+(controlling) 4516 4978 w
+(the) 720 5098 w
+10 /LucidaTypewriter f
+(X) 907 5098 w
+10 /LucidaSansUnicode00 f
+(command, described shortly.) 1011 5098 w
+10 /LucidaTypewriter f
+(Sam) 970 5254 w
+10 /LucidaSansUnicode00 f
+(may be started with a set of disc files \(such) 1218 5254 w
+(as) 3355 5254 w
+(all) 3494 5254 w
+(the) 3640 5254 w
+(source) 3828 5254 w
+(for) 4183 5254 w
+(a) 4355 5254 w
+(program\)) 4443 5254 w
+(by) 4925 5254 w
+(invoking) 720 5374 w
+(it) 1169 5374 w
+(with) 1269 5374 w
+(a) 1508 5374 w
+(list) 1597 5374 w
+(of) 1777 5374 w
+(file) 1909 5374 w
+(names) 2094 5374 w
+(as) 2445 5374 w
+(arguments,) 2585 5374 w
+(and) 3170 5374 w
+(more) 3384 5374 w
+(may) 3669 5374 w
+(be) 3903 5374 w
+(added) 4056 5374 w
+(or) 4389 5374 w
+(deleted) 4524 5374 w
+(on) 4917 5374 w
+(demand.) 720 5494 w
+9 /LucidaTypewriter f
+(B) 920 5664 w
+(discfile1) 1050 5664 w
+(discfile2) 1700 5664 w
+(...) 2350 5664 w
+10 /LucidaSansUnicode00 f
+(adds the named files to) 720 5844 w
+10 /LucidaTypewriter f
+(sam) 1896 5844 w
+10 /LucidaSansUnicode20 f
+(\031) 2112 5844 w
+10 /LucidaSansUnicode00 f
+(s list, and) 2144 5844 w
+9 /LucidaTypewriter f
+(D) 920 6014 w
+(discfile1) 1050 6014 w
+(discfile2) 1700 6014 w
+(...) 2350 6014 w
+10 /LucidaSansUnicode00 f
+(removes) 720 6194 w
+(them) 1168 6194 w
+(from) 1454 6194 w
+10 /LucidaTypewriter f
+(sam) 1724 6194 w
+10 /LucidaSansUnicode20 f
+(\031) 1940 6194 w
+10 /LucidaSansUnicode00 f
+(s) 1972 6194 w
+(memory) 2061 6194 w
+(\(without) 2495 6194 w
+(effect) 2931 6194 w
+(on) 3243 6194 w
+(associated) 3404 6194 w
+(disc) 3951 6194 w
+(files\).) 4183 6194 w
+(Both) 4521 6194 w
+(these) 4778 6194 w
+(commands) 720 6314 w
+(have) 1288 6314 w
+(a) 1552 6314 w
+(syntax) 1646 6314 w
+(for) 2003 6314 w
+(using) 2181 6314 w
+(the) 2486 6314 w
+(shell) 2680 6314 w
+6 /LucidaSansUnicode00 f
+(7) 2907 6264 w
+10 /LucidaSansUnicode00 f
+(\(the) 2984 6314 w
+(UNIX) 3211 6314 w
+(command) 3485 6314 w
+(interpreter\)) 4002 6314 w
+(to) 4593 6314 w
+(gener\255) 4730 6314 w
+(ate the lists:) 720 6434 w
+9 /LucidaTypewriter f
+(B) 920 6604 w
+(<echo) 1050 6604 w
+(*.c) 1440 6604 w
+10 /LucidaSansUnicode00 f
+(will add all C source files, and) 720 6784 w
+9 /LucidaTypewriter f
+(B) 920 6954 w
+(<grep) 1050 6954 w
+(-l) 1440 6954 w
+(variable) 1635 6954 w
+(*.c) 2220 6954 w
+10 /LucidaSansUnicode00 f
+(will) 720 7134 w
+(add) 960 7134 w
+(all) 1217 7134 w
+(C) 1406 7134 w
+(source) 1551 7134 w
+(files) 1949 7134 w
+(referencing) 2227 7134 w
+(a) 2856 7134 w
+(particular) 2988 7134 w
+(variable) 3528 7134 w
+(\(the) 3985 7134 w
+(UNIX) 4250 7134 w
+(command) 4562 7134 w
+10 /LucidaTypewriter f
+(grep -l) 720 7254 w
+10 /LucidaSansUnicode00 f
+(lists) 1270 7254 w
+(all) 1513 7254 w
+(files) 1672 7254 w
+(in) 1920 7254 w
+(its) 2057 7254 w
+(arguments) 2219 7254 w
+(that) 2783 7254 w
+(contain) 3019 7254 w
+(matches) 3421 7254 w
+(of) 3871 7254 w
+(the) 4014 7254 w
+(specified) 4214 7254 w
+(regular) 4694 7254 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 10 10
+%%Page: 11 11
+/saveobj save def
+mark
+11 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 11 \255) 2752 480 w
+(expression\).) 720 840 w
+(Finally,) 1380 840 w
+10 /LucidaTypewriter f
+(D) 1754 840 w
+10 /LucidaSansUnicode00 f
+(without arguments deletes the current file.) 1858 840 w
+(There are two ways to change which file is current:) 970 996 w
+9 /LucidaTypewriter f
+(b) 920 1166 w
+(filename) 1050 1166 w
+10 /LucidaSansUnicode00 f
+(makes) 720 1346 w
+(the) 1073 1346 w
+(named) 1268 1346 w
+(file) 1637 1346 w
+(current.) 1828 1346 w
+(The) 2282 1346 w
+10 /LucidaTypewriter f
+(B) 2503 1346 w
+10 /LucidaSansUnicode00 f
+(command) 2615 1346 w
+(does) 3133 1346 w
+(the) 3404 1346 w
+(same,) 3599 1346 w
+(but) 3926 1346 w
+(also) 4128 1346 w
+(adds) 4364 1346 w
+(any) 4636 1346 w
+(new) 4845 1346 w
+(files) 720 1466 w
+(to) 967 1466 w
+10 /LucidaTypewriter f
+(sam) 1110 1466 w
+10 /LucidaSansUnicode20 f
+(\031) 1326 1466 w
+10 /LucidaSansUnicode00 f
+(s) 1358 1466 w
+(list.) 1454 1466 w
+(\(In) 1708 1466 w
+(practice,) 1876 1466 w
+(of) 2335 1466 w
+(course,) 2477 1466 w
+(the) 2875 1466 w
+(current) 3074 1466 w
+(file) 3468 1466 w
+(is) 3663 1466 w
+(usually) 3787 1466 w
+(chosen) 4171 1466 w
+(by) 4558 1466 w
+(mouse) 4717 1466 w
+(actions,) 720 1586 w
+(not) 1149 1586 w
+(by) 1361 1586 w
+(textual) 1528 1586 w
+(commands.\)) 1917 1586 w
+(The) 2595 1586 w
+(other) 2828 1586 w
+(way) 3137 1586 w
+(is) 3373 1586 w
+(to) 3505 1586 w
+(use) 3655 1586 w
+(a) 3876 1586 w
+(form) 3983 1586 w
+(of) 4267 1586 w
+(address) 4417 1586 w
+(that) 4849 1586 w
+(refers to files:) 720 1706 w
+9 /LucidaTypewriter f
+(") 920 1876 w
+9 /LucidaSans-Italic f
+(expression) 985 1876 w
+9 /LucidaTypewriter f
+(") 1449 1876 w
+9 /LucidaSans-Italic f
+(address) 1579 1876 w
+10 /LucidaSansUnicode00 f
+(refers) 720 2056 w
+(to) 1055 2056 w
+(the) 1206 2056 w
+(address) 1414 2056 w
+(evaluated) 1847 2056 w
+(in) 2365 2056 w
+(the) 2509 2056 w
+(file) 2718 2056 w
+(whose) 2923 2056 w
+(menu) 3284 2056 w
+(line) 3611 2056 w
+(matches) 3841 2056 w
+(the) 4300 2056 w
+(expression) 4509 2056 w
+(\(there must be exactly one match\).) 720 2176 w
+(For example,) 2474 2176 w
+9 /LucidaTypewriter f
+("peter.c") 920 2346 w
+(3) 1570 2346 w
+10 /LucidaSansUnicode00 f
+(refers to the third line of the file whose name matches) 720 2526 w
+10 /LucidaTypewriter f
+(peter.c) 3397 2526 w
+10 /LucidaSansUnicode00 f
+(.) 3901 2526 w
+(This is most useful in) 3997 2526 w
+(the move \() 720 2646 w
+10 /LucidaTypewriter f
+(m) 1234 2646 w
+10 /LucidaSansUnicode00 f
+(\) and copy \() 1306 2646 w
+10 /LucidaTypewriter f
+(t) 1875 2646 w
+10 /LucidaSansUnicode00 f
+(\) commands:) 1947 2646 w
+9 /LucidaTypewriter f
+(0,$) 920 2816 w
+(t) 1180 2816 w
+("peter.c") 1310 2816 w
+(0) 1960 2816 w
+10 /LucidaSansUnicode00 f
+(makes a copy of the current file at the beginning of) 720 2996 w
+10 /LucidaTypewriter f
+(peter.c) 3253 2996 w
+10 /LucidaSansUnicode00 f
+(.) 3757 2996 w
+(The) 970 3152 w
+10 /LucidaTypewriter f
+(X) 1183 3152 w
+10 /LucidaSansUnicode00 f
+(command is a looping construct, like) 1287 3152 w
+10 /LucidaTypewriter f
+(x) 3116 3152 w
+10 /LucidaSansUnicode00 f
+(, that refers to files instead of strings:) 3188 3152 w
+9 /LucidaTypewriter f
+(X/) 920 3322 w
+9 /LucidaSans-Italic f
+(expression) 1050 3322 w
+9 /LucidaTypewriter f
+(/) 1514 3322 w
+9 /LucidaSans-Italic f
+(command) 1644 3322 w
+10 /LucidaSansUnicode00 f
+(runs) 720 3502 w
+(the) 973 3502 w
+(command) 1165 3502 w
+(in) 1680 3502 w
+(all) 1808 3502 w
+(files) 1958 3502 w
+(whose) 2197 3502 w
+(menu) 2541 3502 w
+(lines) 2851 3502 w
+(match) 3116 3502 w
+(the) 3452 3502 w
+(expression.) 3645 3502 w
+(The) 4278 3502 w
+(best) 4497 3502 w
+(exam\255) 4742 3502 w
+(ple is) 720 3622 w
+9 /LucidaTypewriter f
+(X/'/) 920 3792 w
+(w) 1245 3792 w
+10 /LucidaSansUnicode00 f
+(which) 720 3972 w
+(writes) 1039 3972 w
+(to) 1368 3972 w
+(disc) 1504 3972 w
+(all) 1737 3972 w
+(modified) 1889 3972 w
+(files.) 2359 3972 w
+10 /LucidaTypewriter f
+(Y) 2664 3972 w
+10 /LucidaSansUnicode00 f
+(is) 2775 3972 w
+(the) 2894 3972 w
+(complement) 3088 3972 w
+(of) 3728 3972 w
+10 /LucidaTypewriter f
+(X) 3865 3972 w
+10 /LucidaSansUnicode00 f
+(:) 3937 3972 w
+(it) 4008 3972 w
+(runs) 4113 3972 w
+(the) 4368 3972 w
+(command) 4562 3972 w
+(on all files whose menu lines don) 720 4092 w
+10 /LucidaSansUnicode20 f
+(\031) 2343 4092 w
+10 /LucidaSansUnicode00 f
+(t match the expression:) 2375 4092 w
+9 /LucidaTypewriter f
+(Y/\\.c/) 920 4262 w
+(D) 1375 4262 w
+10 /LucidaSansUnicode00 f
+(deletes) 720 4442 w
+(all) 1103 4442 w
+(files) 1251 4442 w
+(that) 1488 4442 w
+(don) 1714 4442 w
+10 /LucidaSansUnicode20 f
+(\031) 1900 4442 w
+10 /LucidaSansUnicode00 f
+(t) 1932 4442 w
+(have) 2004 4442 w
+10 /LucidaTypewriter f
+(.c) 2264 4442 w
+10 /LucidaSansUnicode00 f
+(in) 2443 4442 w
+(their) 2569 4442 w
+(names,) 2829 4442 w
+(that) 3213 4442 w
+(is,) 3440 4442 w
+(it) 3588 4442 w
+(keeps) 3690 4442 w
+(all) 4010 4442 w
+(C) 4159 4442 w
+(source) 4264 4442 w
+(files) 4622 4442 w
+(and) 4860 4442 w
+(deletes the rest.) 720 4562 w
+(Braces allow commands to be grouped, so) 970 4718 w
+9 /LucidaTypewriter f
+({) 920 4888 w
+9 /LucidaSans-Italic f
+(command1) 1440 4998 w
+(command2) 1440 5108 w
+9 /LucidaTypewriter f
+(}) 920 5218 w
+10 /LucidaSansUnicode00 f
+(is syntactically a single command that runs two commands.) 720 5398 w
+(Thus,) 3675 5398 w
+9 /LucidaTypewriter f
+(X/\\.c/) 920 5568 w
+(,g/variable/) 1375 5568 w
+({) 2220 5568 w
+(f) 1440 5678 w
+(,) 1440 5788 w
+(x/.*\\n/) 1570 5788 w
+(g/variable/) 2090 5788 w
+(p) 2870 5788 w
+(}) 920 5898 w
+10 /LucidaSansUnicode00 f
+(finds) 720 6078 w
+(all) 999 6078 w
+(occurrences) 1149 6078 w
+(of) 1769 6078 w
+10 /LucidaTypewriter f
+(variable) 1904 6078 w
+10 /LucidaSansUnicode00 f
+(in) 2518 6078 w
+(C) 2647 6078 w
+(source) 2754 6078 w
+(files,) 3114 6078 w
+(and) 3386 6078 w
+(prints) 3604 6078 w
+(out) 3925 6078 w
+(the) 4123 6078 w
+(file) 4316 6078 w
+(names) 4505 6078 w
+(and) 4860 6078 w
+(lines) 720 6198 w
+(of) 983 6198 w
+(each) 1117 6198 w
+(match.) 1377 6198 w
+(The) 1775 6198 w
+(precise) 1992 6198 w
+(semantics) 2375 6198 w
+(of) 2896 6198 w
+(compound) 3030 6198 w
+(operations) 3581 6198 w
+(is) 4132 6198 w
+(discussed) 4247 6198 w
+(in) 4759 6198 w
+(the) 4885 6198 w
+(implementation sections below.) 720 6318 w
+(Finally,) 970 6474 w
+(the) 1363 6474 w
+(undo) 1569 6474 w
+(command,) 1868 6474 w
+10 /LucidaTypewriter f
+(u) 2429 6474 w
+10 /LucidaSansUnicode00 f
+(,) 2501 6474 w
+(undoes) 2584 6474 w
+(the) 2990 6474 w
+(last) 3196 6474 w
+(command,) 3419 6474 w
+(no) 3980 6474 w
+(matter) 4155 6474 w
+(how) 4526 6474 w
+(many) 4778 6474 w
+(files were affected.) 720 6594 w
+(Multiple undo operations move further back in time, so) 1704 6594 w
+9 /LucidaTypewriter f
+(u) 920 6764 w
+(u) 920 6874 w
+10 /LucidaSansUnicode00 f
+(\(which) 720 7054 w
+(may) 1079 7054 w
+(be) 1324 7054 w
+(abbreviated) 1488 7054 w
+10 /LucidaTypewriter f
+(u2) 2103 7054 w
+10 /LucidaSansUnicode00 f
+(\)) 2247 7054 w
+(undoes) 2325 7054 w
+(the) 2725 7054 w
+(last) 2925 7054 w
+(two) 3142 7054 w
+(commands.) 3362 7054 w
+(An) 4000 7054 w
+(undo) 4176 7054 w
+(may) 4469 7054 w
+(not) 4715 7054 w
+(be) 4921 7054 w
+(undone,) 720 7174 w
+(however,) 1161 7174 w
+(nor) 1641 7174 w
+(may) 1848 7174 w
+(any) 2091 7174 w
+(command) 2303 7174 w
+(that) 2824 7174 w
+(adds) 3058 7174 w
+(or) 3333 7174 w
+(deletes) 3478 7174 w
+(files.) 3869 7174 w
+(Everything) 4177 7174 w
+(else) 4726 7174 w
+(is) 4960 7174 w
+(undoable, though, including for example) 720 7294 w
+10 /LucidaTypewriter f
+(e) 2742 7294 w
+10 /LucidaSansUnicode00 f
+(commands:) 2846 7294 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 11 11
+%%Page: 12 12
+/saveobj save def
+mark
+12 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 12 \255) 2752 480 w
+9 /LucidaTypewriter f
+(e) 920 830 w
+(filename) 1050 830 w
+(u) 920 940 w
+10 /LucidaSansUnicode00 f
+(restores) 720 1120 w
+(the) 1171 1120 w
+(state) 1383 1120 w
+(of) 1676 1120 w
+(the) 1831 1120 w
+(file) 2043 1120 w
+(completely,) 2251 1120 w
+(including) 2867 1120 w
+(its) 3373 1120 w
+(name,) 3547 1120 w
+(dot,) 3902 1120 w
+(and) 4152 1120 w
+(modified) 4390 1120 w
+(bit.) 4879 1120 w
+(Because) 720 1240 w
+(of) 1160 1240 w
+(the) 1309 1240 w
+(undo,) 1515 1240 w
+(potentially) 1846 1240 w
+(dangerous) 2407 1240 w
+(commands) 2970 1240 w
+(are) 3549 1240 w
+(not) 3751 1240 w
+(guarded) 3961 1240 w
+(by) 4413 1240 w
+(confirma\255) 4578 1240 w
+(tions.) 720 1360 w
+(Only) 1066 1360 w
+10 /LucidaTypewriter f
+(D) 1329 1360 w
+10 /LucidaSansUnicode00 f
+(,) 1401 1360 w
+(which) 1475 1360 w
+(destroys) 1798 1360 w
+(the) 2253 1360 w
+(information) 2451 1360 w
+(necessary) 3061 1360 w
+(to) 3579 1360 w
+(restore) 3720 1360 w
+(itself,) 4106 1360 w
+(is) 4420 1360 w
+(protected.) 4543 1360 w
+(It) 720 1480 w
+(will) 821 1480 w
+(not) 1020 1480 w
+(delete) 1215 1480 w
+(a) 1546 1480 w
+(modified) 1635 1480 w
+(file,) 2100 1480 w
+(but) 2317 1480 w
+(a) 2513 1480 w
+(second) 2602 1480 w
+10 /LucidaTypewriter f
+(D) 2980 1480 w
+10 /LucidaSansUnicode00 f
+(of) 3086 1480 w
+(the) 3218 1480 w
+(same) 3407 1480 w
+(file) 3696 1480 w
+(will) 3881 1480 w
+(succeed) 4079 1480 w
+(regardless.) 4503 1480 w
+(The) 720 1600 w
+10 /LucidaTypewriter f
+(q) 933 1600 w
+10 /LucidaSansUnicode00 f
+(command, which exits) 1037 1600 w
+10 /LucidaTypewriter f
+(sam) 2158 1600 w
+10 /LucidaSansUnicode00 f
+(, is similarly guarded.) 2374 1600 w
+10 /LucidaSans-Demi f
+(Mouse Interface) 720 1840 w
+10 /LucidaTypewriter f
+(Sam) 720 1996 w
+10 /LucidaSansUnicode00 f
+(is) 984 1996 w
+(most) 1112 1996 w
+(commonly) 1402 1996 w
+(run) 1953 1996 w
+(connected) 2167 1996 w
+(to) 2715 1996 w
+(a) 2862 1996 w
+(bitmap) 2966 1996 w
+(display) 3355 1996 w
+(and) 3746 1996 w
+(mouse) 3975 1996 w
+(for) 4347 1996 w
+(interactive) 4535 1996 w
+(editing.) 720 2116 w
+(The) 1163 2116 w
+(only) 1385 2116 w
+(difference) 1630 2116 w
+(in) 2159 2116 w
+(the) 2291 2116 w
+(command) 2487 2116 w
+(language) 3006 2116 w
+(between) 3490 2116 w
+(regular,) 3938 2116 w
+(mouse-driven) 4356 2116 w
+10 /LucidaTypewriter f
+(sam) 720 2236 w
+10 /LucidaSansUnicode00 f
+(and) 980 2236 w
+10 /LucidaTypewriter f
+(sam -d) 1204 2236 w
+10 /LucidaSansUnicode00 f
+(is) 1680 2236 w
+(that) 1804 2236 w
+(if) 2039 2236 w
+(an) 2149 2236 w
+(address) 2311 2236 w
+(is) 2736 2236 w
+(provided) 2861 2236 w
+(without) 3334 2236 w
+(a) 3744 2236 w
+(command,) 3844 2236 w
+10 /LucidaTypewriter f
+(sam -d) 4399 2236 w
+10 /LucidaSansUnicode00 f
+(will) 4876 2236 w
+(print) 720 2356 w
+(the) 990 2356 w
+(text) 1183 2356 w
+(referenced) 1412 2356 w
+(by) 1968 2356 w
+(the) 2120 2356 w
+(address,) 2312 2356 w
+(but) 2761 2356 w
+(regular) 2960 2356 w
+10 /LucidaTypewriter f
+(sam) 3343 2356 w
+10 /LucidaSansUnicode00 f
+(will) 3596 2356 w
+(highlight) 3797 2356 w
+(it) 4268 2356 w
+(on) 4371 2356 w
+(the) 4531 2356 w
+(screen) 4723 2356 w
+10 /LucidaSansUnicode20 f
+(\024) 720 2476 w
+10 /LucidaSansUnicode00 f
+(in fact, dot is always highlighted \(see Figure 2\).) 852 2476 w
+cleartomark
+saveobj restore
+%ps_include: begin
+save
+/ed {exch def} def
+{} /showpage ed
+{} /copypage ed
+{} /erasepage ed
+{} /letter ed
+currentdict /findfont known systemdict /findfont known and {
+ /findfont systemdict /findfont get def
+} if
+36 dict dup /PS-include-dict-dw ed begin
+/context ed
+count array astore /o-stack ed
+%ps_include: variables begin
+/llx 80 def
+/lly 322 def
+/urx 531.44 def
+/ury 468.88 def
+/w 0 def
+/o 0 def
+/s 0 def
+/cx 2880 def
+/cy -3450 def
+/sx 4320 def
+/sy 1468 def
+/ax .5 def
+/ay .5 def
+/rot 0 def
+%ps_include: variables end
+{llx lly urx ury} /bbox ed
+{newpath 2 index exch 2 index exch dup 6 index exch
+ moveto 3 {lineto} repeat closepath} /boxpath ed
+{dup mul exch dup mul add sqrt} /len ed
+{2 copy gt {exch} if pop} /min ed
+{2 copy lt {exch} if pop} /max ed
+{transform round exch round exch A itransform} /nice ed
+{6 array} /n ed
+n defaultmatrix n currentmatrix n invertmatrix n concatmatrix /A ed
+urx llx sub 0 A dtransform len /Sx ed
+0 ury lly sub A dtransform len /Sy ed
+llx urx add 2 div lly ury add 2 div A transform /Cy ed /Cx ed
+rot dup sin abs /S ed cos abs /C ed
+Sx S mul Sy C mul add /H ed
+Sx C mul Sy S mul add /W ed
+sy H div /Scaley ed
+sx W div /Scalex ed
+s 0 eq {Scalex Scaley min dup /Scalex ed /Scaley ed} if
+sx Scalex W mul sub 0 max ax 0.5 sub mul cx add /cx ed
+sy Scaley H mul sub 0 max ay 0.5 sub mul cy add /cy ed
+urx llx sub 0 A dtransform exch atan rot exch sub /rot ed
+n currentmatrix initgraphics setmatrix
+cx cy translate
+Scalex Scaley scale
+rot rotate
+Cx neg Cy neg translate
+A concat
+bbox boxpath clip newpath
+w 0 ne {gsave bbox boxpath 1 setgray fill grestore} if
+end
+gsave
+%ps_include: inclusion begin
+ %!PS
+/picstr 79 string def
+80 322 translate
+451.44 146.88 scale
+
+627 204 1 [627 0 0 -204 0 204]
+{currentfile picstr readhexstring pop} image
+
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff3fffffff3cffffffffffffffffffffdfe7f3bff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff3fffefff3cffffffff07ffffffffff3fe7f3cff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff3fffe7ff3fffffffff33fffffffffe7fe7f3e7f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff27fff3f820fc1f0fff39c3c9f8723e7f0783e7e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff13fff9f33cf9ce66033999c4f3311cfe6733f3e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff39fffce73cf9fce603393cce67339cfce673f3e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff3980fc673cf8fcffff393cce67339cfce673f3f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff3980fce73cfc1cffff393cce60339cfce673f3f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff39fff9e73cff8cfe03393cce67f39cfce673f3f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff39fff3e73cffccfe03393cce67f39cfce673f3e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff33ffe7f23cf9ce67ff3399ccf3339cfe4723f3e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffff07ffeff9201c1f0fff07c3c1f8739e7f2793e7e
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffffffffffffffffffffffffffcffffffe7fffffe7f
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffffffffffffffffffffffffffcfffffff3fffffcff
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdfffffffffffffffffffffffffffffffffffffffffcfffffffdfffffbfe
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2ffdffffffffffffffffffffffffff9fffe7ffff7ff9ffffffffffffe7fffd
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffff7fff9fffe7fbfcf0f9ffff7fffffffe7fffe
+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffe7ffffffffff3f9e679ffff3fffffffe7ffff
+3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff8380c641f2307c079e6793fff9fc3c1f0e47c3f
+3f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff39e7e079f11e7f3f3e6f89fffcf999ce662399f
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff3fe7e679f39e7f3f3f1f9cfffe739fcce67339f
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff1fe7e7f9f39e7f3f3f499cc07e33ffccfe7339f
+9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff83e7e7f9f39e7f3f3e4b9cc07e73fc0cfe7301f
+9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffff1e7e7f9f39e7f3f3e679cfffcf3f9ccfe733ff
+9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffff9e7e7f9f39e7f3f3e679cfff9f3f9ccfe733ff
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff39e7e7f9f39e7f3f3e2399fff3f9998e667399f
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff83f0c1c033900f879f1183fff7fc3c4f0e73c3f
+3f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffffffffffffffff9ffffffffffffffffffffff
+3f9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffffffffffffffffffffcfffffffffffffffffffffe
+7f9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffd
+ff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffbfffffffffe7ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffff3fffffffffe7ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff19e1c06731991ffe4fc7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff81ccf3e738188ffe27c7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff999cf3e73999cffe73c7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9f9cf3e739f9cffe73fffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff9f80f3e739f9cffe73fffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9f9ff3e739f9cffe73fffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff9f9ff3e739f9cffe73c7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9fccf3e239f9cffe67c7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff07e1f8713079cffe0fc7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffffffffffffffffffe7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffffffffffffffffffffffe7fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffff83ffffffffee7fbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f03fff3ffffffff9e7fcffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f39fff3ffffffff3e7fe7fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f39e1f3f0f83e1f3e4fe7fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f39ccf3e6739cce7e27f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f3b9cf3cf33f9ce7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f079ff3cf31f9ce7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f3b9ff3cf38380e7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f399ff3cf3f19fe7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f399ff3cf3f99fe7e73f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f39ccf3e6739cce7e67f3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f03e18070f83e1f3e0fe7fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffff3fffe7fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffff9fffcffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffefffbffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffff9fffffffffffffffffc3e1fffffffff9
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffff9ffff7fffffff81fff9fcffffffffff9
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffe7fffffff9cfff9fcffffffffff9
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff19e1f041f8380f0e33ff9cce60301e1c67ffef9
+3f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff81cce679f39e7e6703ff9cce79fcfcce07ffab8
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff999cce79f3fe7ce733ff9dce79fcf9ce67ffc79
+cf1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9f9cce79f1fe7ce73fff83ce79fcf9ce7fff119
+cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff9f80ce79f83e7c073fff9dce79fcf80e7fffc79
+cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9f9fce79ff1e7cff3fff9cce79fcf9fe7fffab9
+cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff9f9fce79ff9e7cff3fff9cce79fcf9fe7fffef9
+cf1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffff9fcce479f39e7e673fff9cc479fcfcce7fffff9
+9f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffff07e1f240383f0f0e0fff81e260703e1c1fffff8
+3f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fffffffffffffffffffffffce7ffffffffffffffffffffffffffffffff
+ff9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fffffffffffffffffffffffe0fffffffffffffffffffffffffffffffff
+ff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffc000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffc00007c000000001180000001860000010000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcf8000c00000000618000200186000000c000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffccc000c00000000c180003001800000006000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcc61e0c0f07c1e0c1b000180fbe07c1e06070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffcc6330c198c633181d8000c19860c63303070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcc6630c30cc0631818c000631860c06303070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffcc6600c30ce0631818cfe0731860e06003000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcc6600c30c7c7f1818cfe06318607c6003000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffcc6600c30c0e601818c000c318600e6003000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcc6600c30c06601818c001831860066003070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffccc330c198c6331819800301b860c63303070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffcf81e7f8f07c1e0c1f000200dbfc7c1e06070000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffc00000000000000c000000000000000006030000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221ffffffffffffffffffc00000000000000600000000000000000c030000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889ffffffffffffffffffc000000000000001000000000000000010060000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000000000001f00000000040030000000000000c00
+0100000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c000000000000000000000800000300000000187830000400000000c00
+00c0000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c00000000000000000000180000030000000030cc30000600000000c00
+0060000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c0000000000000000007c7f39878303c1f07830cc36000301e1f078dc1
+e060700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000c6181f8cc3066318cc60c83b0001833318ccee3
+3030700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c000000000000000000c0181998c30c33018c6070318000c630198cc66
+3030700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000e0181818030c33818c605b319fc0e6001980c66
+3030000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c0000000000000000007c181818030c31f1fc60da319fc0c601f980c67
+f030000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c0000000000000000000e181818030c30398060cc31800186031980c66
+0030000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c00000000000000000006181818030c30198060cc31800306031980c66
+0030700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000c618180cc3066318cc60ee330006033338ccc63
+3030700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c0000000000000000007c0f3e079fe3c1f07830773e000401e1d878c61
+e060700000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000000000000000000000300000000000000000000
+0060300000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c000000000000000000000000000000000000180000000000000000000
+00c0300000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2889c000000000000000000000000000000000000040000000000000000000
+0100600000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe2221c00000000000000000000000000000000000000000000000000000001f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c0000000000000000001e0000000040200000c0000000000203008001f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000300000000180c00000c0000000000183006001f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c000000000000000000300000000301800000c00000000000c3003001f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000fe730f078301831878dc3e39800100c3603039f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c000000000000000000303f198cc6030318ccee631f80054063b01839f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c00000000000000000030333198c60303198cc6031980038063181839f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c00000000000000000030303198c603031980c60318000ee063181801f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c00000000000000000030303f9fc603031980c63f1800038063181801f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c000000000000000000303030180603031980c6631800054063181801f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000303030180603031980c6631800010063181839f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c0000000000000000003030198cc60303b8ccc6671800000063301839f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000fc7c0f07830181d878c63b3e000000c3e03039f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c000000000000000000000000000301800000000000000000c0003019f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221c000000000000000000000000000180c0000000000000000180006019f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889c00000000000000000000000000004020000000000000000200008031f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe3fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2889ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2221ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe2001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffe3fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+fe00000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000003fff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff
+showpage
+ %%BoundingBox: 80 322 531.44 468.88
+%ps_include: inclusion end
+grestore
+PS-include-dict-dw begin
+o 0 ne {gsave A defaultmatrix /A ed llx lly nice urx ury nice
+ initgraphics 0.1 setlinewidth boxpath stroke grestore} if
+clear o-stack aload pop
+context end restore
+%ps_include: end
+/saveobj save def
+mark
+8 /LucidaSans-Italic f
+(Figure) 720 4284 w
+(2.) 992 4284 w
+(A) 1095 4284 w
+8 /LucidaTypewriter f
+(sam) 1177 4284 w
+8 /LucidaSans-Italic f
+(window.) 1378 4284 w
+(The) 1749 4284 w
+(scroll) 1918 4284 w
+(bar) 2154 4284 w
+(down) 2317 4284 w
+(the) 2551 4284 w
+(left) 2700 4284 w
+(represents) 2852 4284 w
+(the) 3288 4284 w
+(file,) 3437 4284 w
+(with) 3608 4284 w
+(the) 3800 4284 w
+(bubble) 3949 4284 w
+(showing) 4238 4284 w
+(the) 4584 4284 w
+(fraction) 4734 4284 w
+(visible) 720 4384 w
+(in) 990 4384 w
+(the) 1091 4384 w
+(window.) 1241 4384 w
+(The) 1613 4384 w
+(scroll) 1783 4384 w
+(bar) 2020 4384 w
+(may) 2184 4384 w
+(be) 2379 4384 w
+(manipulated) 2498 4384 w
+(by) 3014 4384 w
+(the) 3135 4384 w
+(mouse) 3285 4384 w
+(for) 3564 4384 w
+(convenient) 3705 4384 w
+(browsing.) 4148 4384 w
+(The) 4583 4384 w
+(current) 4752 4384 w
+(text,) 720 4484 w
+(which) 925 4484 w
+(is) 1184 4484 w
+(highlighted,) 1280 4484 w
+(need) 1778 4484 w
+(not) 1996 4484 w
+(fit) 2157 4484 w
+(on) 2275 4484 w
+(a) 2406 4484 w
+(line.) 2490 4484 w
+(Here) 2715 4484 w
+(it) 2931 4484 w
+(consists) 3019 4484 w
+(of) 3360 4484 w
+(one) 3471 4484 w
+(partial) 3644 4484 w
+(line,) 3940 4484 w
+(one) 4139 4484 w
+(complete) 4312 4484 w
+(line,) 4693 4484 w
+(and) 4892 4484 w
+(final) 720 4584 w
+(partial) 921 4584 w
+(line.) 1208 4584 w
+10 /LucidaSansUnicode00 f
+(Each) 970 4860 w
+(file) 1234 4860 w
+(may) 1427 4860 w
+(have) 1669 4860 w
+(zero) 1936 4860 w
+(or) 2193 4860 w
+(more) 2337 4860 w
+(windows) 2630 4860 w
+(open) 3092 4860 w
+(on) 3376 4860 w
+(the) 3541 4860 w
+(display.) 3738 4860 w
+(At) 4186 4860 w
+(any) 4334 4860 w
+(time,) 4546 4860 w
+(only) 4836 4860 w
+(one) 720 4980 w
+(window) 933 4980 w
+(in) 1336 4980 w
+(all) 1461 4980 w
+(of) 1608 4980 w
+10 /LucidaTypewriter f
+(sam) 1740 4980 w
+10 /LucidaSansUnicode00 f
+(is) 1990 4980 w
+(the) 2104 4980 w
+10 /LucidaSans-Italic f
+(current) 2293 4980 w
+(window,) 2688 4980 w
+10 /LucidaSansUnicode00 f
+(that) 3118 4980 w
+(is,) 3342 4980 w
+(the) 3487 4980 w
+(window) 3675 4980 w
+(to) 4077 4980 w
+(which) 4208 4980 w
+(typing) 4522 4980 w
+(and) 4860 4980 w
+(mouse) 720 5100 w
+(actions) 1093 5100 w
+(refer;) 1489 5100 w
+(this) 1802 5100 w
+(may) 2031 5100 w
+(be) 2281 5100 w
+(the) 2450 5100 w
+10 /LucidaTypewriter f
+(sam) 2655 5100 w
+10 /LucidaSansUnicode00 f
+(window) 2921 5100 w
+(\(that) 3341 5100 w
+(in) 3616 5100 w
+(which) 3758 5100 w
+(commands) 4090 5100 w
+(may) 4670 5100 w
+(be) 4921 5100 w
+(typed\)) 720 5220 w
+(or) 1065 5220 w
+(one) 1208 5220 w
+(of) 1428 5220 w
+(the) 1567 5220 w
+(file) 1763 5220 w
+(windows.) 1955 5220 w
+(When) 2480 5220 w
+(a) 2787 5220 w
+(file) 2883 5220 w
+(has) 3075 5220 w
+(multiple) 3284 5220 w
+(windows,) 3723 5220 w
+(the) 4216 5220 w
+(image) 4412 5220 w
+(of) 4747 5220 w
+(the) 4885 5220 w
+(file) 720 5340 w
+(in) 905 5340 w
+(each) 1030 5340 w
+(window) 1288 5340 w
+(is) 1692 5340 w
+(always) 1807 5340 w
+(kept) 2161 5340 w
+(up) 2410 5340 w
+(to) 2570 5340 w
+(date.) 2703 5340 w
+(The) 3013 5340 w
+(current) 3229 5340 w
+(file) 3614 5340 w
+(is) 3800 5340 w
+(the) 3915 5340 w
+(last) 4105 5340 w
+(file) 4312 5340 w
+(affected) 4498 5340 w
+(by) 4925 5340 w
+(a) 720 5460 w
+(command,) 808 5460 w
+(so) 1351 5460 w
+(if) 1496 5460 w
+(the) 1595 5460 w
+10 /LucidaTypewriter f
+(sam) 1783 5460 w
+10 /LucidaSansUnicode00 f
+(window) 2032 5460 w
+(is) 2434 5460 w
+(current,) 2547 5460 w
+(the) 2962 5460 w
+(current) 3150 5460 w
+(window) 3533 5460 w
+(is) 3935 5460 w
+(not) 4048 5460 w
+(a) 4241 5460 w
+(window on the) 4329 5460 w
+(current) 720 5580 w
+(file.) 1131 5580 w
+(However,) 1407 5580 w
+(each) 1917 5580 w
+(window) 2202 5580 w
+(on) 2632 5580 w
+(a) 2816 5580 w
+(file) 2932 5580 w
+(has) 3144 5580 w
+(its) 3373 5580 w
+(own) 3551 5580 w
+(value) 3812 5580 w
+(of) 4127 5580 w
+(dot,) 4286 5580 w
+(and) 4541 5580 w
+(when) 4783 5580 w
+(switching) 720 5700 w
+(between) 1218 5700 w
+(windows) 1663 5700 w
+(on) 2121 5700 w
+(a) 2282 5700 w
+(single) 2375 5700 w
+(file,) 2702 5700 w
+(the) 2923 5700 w
+(file) 3116 5700 w
+10 /LucidaSansUnicode20 f
+(\031) 3267 5700 w
+10 /LucidaSansUnicode00 f
+(s) 3299 5700 w
+(value) 3388 5700 w
+(of) 3680 5700 w
+(dot) 3816 5700 w
+(is) 4014 5700 w
+(changed) 4131 5700 w
+(to) 4579 5700 w
+(that) 4714 5700 w
+(of) 4942 5700 w
+(the window.) 720 5820 w
+(Thus, flipping between windows behaves in the obvious, convenient way.) 1372 5820 w
+(The mouse on the Blit has three buttons, numbered left to right.) 970 5976 w
+(Button 3 has a) 4162 5976 w
+(list) 4894 5976 w
+(of) 720 6096 w
+(commands) 877 6096 w
+(to) 1465 6096 w
+(manipulate) 1622 6096 w
+(windows,) 2222 6096 w
+(followed) 2733 6096 w
+(by) 3205 6096 w
+(a) 3379 6096 w
+(list) 3493 6096 w
+(of) 3698 6096 w
+10 /LucidaSansUnicode20 f
+(\030) 3855 6096 w
+10 /LucidaSansUnicode00 f
+(menu) 3887 6096 w
+(lines) 4218 6096 w
+10 /LucidaSansUnicode20 f
+(\031) 4445 6096 w
+10 /LucidaSansUnicode00 f
+(exactly) 4535 6096 w
+(as) 4934 6096 w
+(printed) 720 6216 w
+(by) 1116 6216 w
+(the) 1277 6216 w
+10 /LucidaTypewriter f
+(f) 1478 6216 w
+10 /LucidaSansUnicode00 f
+(command,) 1596 6216 w
+(one) 2152 6216 w
+(per) 2377 6216 w
+(file) 2583 6216 w
+(\(not) 2780 6216 w
+(one) 3019 6216 w
+(per) 3244 6216 w
+(window\).) 3450 6216 w
+(These) 3962 6216 w
+(menu) 4296 6216 w
+(lines) 4615 6216 w
+(are) 4888 6216 w
+(sorted) 720 6336 w
+(by) 1063 6336 w
+(file) 1212 6336 w
+(name.) 1397 6336 w
+(If) 1761 6336 w
+(the) 1861 6336 w
+(list) 2050 6336 w
+(is) 2229 6336 w
+(long,) 2342 6336 w
+(the) 2621 6336 w
+(Blit) 2809 6336 w
+(menu) 2995 6336 w
+(software) 3301 6336 w
+(will) 3749 6336 w
+(make) 3946 6336 w
+(it) 4241 6336 w
+(more) 4340 6336 w
+(manage\255) 4624 6336 w
+(able) 720 6456 w
+(by) 957 6456 w
+(generating) 1106 6456 w
+(a) 1662 6456 w
+(scrolling) 1751 6456 w
+(menu) 2200 6456 w
+(instead) 2507 6456 w
+(of) 2894 6456 w
+(an) 3026 6456 w
+(unwieldy) 3177 6456 w
+(long) 3642 6456 w
+(list.) 3891 6456 w
+(Using) 4136 6456 w
+(the) 4444 6456 w
+(menu) 4634 6456 w
+(to) 4942 6456 w
+(select) 720 6576 w
+(a) 1041 6576 w
+(file) 1137 6576 w
+(from) 1329 6576 w
+(the) 1602 6576 w
+(list) 1798 6576 w
+(makes) 1985 6576 w
+(that) 2339 6576 w
+(file) 2570 6576 w
+(the) 2761 6576 w
+(current) 2956 6576 w
+(file,) 3346 6576 w
+(and) 3569 6576 w
+(the) 3789 6576 w
+(most) 3984 6576 w
+(recently) 4266 6576 w
+(current) 4690 6576 w
+(window) 720 6696 w
+(in) 1127 6696 w
+(that) 1256 6696 w
+(file) 1485 6696 w
+(the) 1674 6696 w
+(current) 1867 6696 w
+(window.) 2255 6696 w
+(But) 2726 6696 w
+(if) 2921 6696 w
+(that) 3025 6696 w
+(file) 3254 6696 w
+(is) 3443 6696 w
+(already) 3561 6696 w
+(current,) 3951 6696 w
+(selecting) 4372 6696 w
+(it) 4844 6696 w
+(in) 4949 6696 w
+(the) 720 6816 w
+(menu) 908 6816 w
+(cycles) 1214 6816 w
+(through) 1537 6816 w
+(the) 1957 6816 w
+(windows) 2145 6816 w
+(on) 2598 6816 w
+(the) 2754 6816 w
+(file;) 2942 6816 w
+(this) 3158 6816 w
+(simple trick avoids a special menu) 3370 6816 w
+(to) 720 6936 w
+(choose) 859 6936 w
+(windows) 1242 6936 w
+(on) 1703 6936 w
+(a) 1867 6936 w
+(file.) 1963 6936 w
+(If) 2219 6936 w
+(there) 2326 6936 w
+(is) 2619 6936 w
+(no) 2740 6936 w
+(window) 2904 6936 w
+(open) 3315 6936 w
+(on) 3599 6936 w
+(the) 3764 6936 w
+(file,) 3961 6936 w
+10 /LucidaTypewriter f
+(sam) 4186 6936 w
+10 /LucidaSansUnicode00 f
+(changes) 4444 6936 w
+(the) 4885 6936 w
+(mouse cursor to prompt the user to create one.) 720 7056 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 12 12
+%%Page: 13 13
+/saveobj save def
+mark
+13 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 13 \255) 2752 480 w
+(The) 970 840 w
+(commands) 1194 840 w
+(on) 1766 840 w
+(the) 1932 840 w
+(button) 2130 840 w
+(3) 2495 840 w
+(menu) 2601 840 w
+(are) 2917 840 w
+(straightforward) 3112 840 w
+(\(see) 3904 840 w
+(Figure) 4144 840 w
+(3\),) 4492 840 w
+(and) 4664 840 w
+(are) 4888 840 w
+(like) 720 960 w
+(the) 946 960 w
+(commands) 1155 960 w
+(to) 1738 960 w
+(manipulate) 1890 960 w
+(windows) 2485 960 w
+(in) 2959 960 w
+10 /LucidaTypewriter f
+(mux) 3104 960 w
+10 /LucidaSansUnicode00 f
+(,) 3320 960 w
+6 /LucidaSansUnicode00 f
+(8) 3352 910 w
+10 /LucidaSansUnicode00 f
+(the) 3444 960 w
+(Blit) 3653 960 w
+10 /LucidaSansUnicode20 f
+(\031) 3806 960 w
+10 /LucidaSansUnicode00 f
+(s) 3838 960 w
+(window) 3943 960 w
+(system.) 4366 960 w
+10 /LucidaTypewriter f
+(New) 4824 960 w
+10 /LucidaSansUnicode00 f
+(makes) 720 1080 w
+(a) 1067 1080 w
+(new) 1156 1080 w
+(file,) 1385 1080 w
+(and) 1602 1080 w
+(gives) 1817 1080 w
+(it) 2102 1080 w
+(one) 2203 1080 w
+(empty) 2417 1080 w
+(window,) 2753 1080 w
+(whose) 3189 1080 w
+(size) 3531 1080 w
+(is) 3759 1080 w
+(determined) 3874 1080 w
+(by) 4465 1080 w
+(a) 4615 1080 w
+(rectan\255) 4705 1080 w
+(gle) 720 1200 w
+(swept) 914 1200 w
+(by) 1245 1200 w
+(the) 1407 1200 w
+(mouse.) 1609 1200 w
+10 /LucidaTypewriter f
+(Zerox) 2043 1200 w
+10 /LucidaSansUnicode00 f
+(prompts) 2450 1200 w
+(for) 2906 1200 w
+(a) 3092 1200 w
+(window) 3194 1200 w
+(to) 3610 1200 w
+(be) 3755 1200 w
+(selected,) 3921 1200 w
+(and) 4399 1200 w
+(makes) 4626 1200 w
+(a) 4985 1200 w
+(clone) 720 1320 w
+(of) 1019 1320 w
+(that) 1157 1320 w
+(window;) 1388 1320 w
+(this) 1829 1320 w
+(is) 2048 1320 w
+(how) 2168 1320 w
+(multiple) 2408 1320 w
+(windows) 2846 1320 w
+(are) 3306 1320 w
+(created) 3498 1320 w
+(on) 3897 1320 w
+(one) 4060 1320 w
+(file.) 4280 1320 w
+10 /LucidaTypewriter f
+(Reshape) 4536 1320 w
+10 /LucidaSansUnicode00 f
+(changes) 720 1440 w
+(the) 1156 1440 w
+(size) 1348 1440 w
+(of) 1578 1440 w
+(the) 1713 1440 w
+(indicated) 1905 1440 w
+(window,) 2387 1440 w
+(and) 2825 1440 w
+10 /LucidaTypewriter f
+(close) 3042 1440 w
+10 /LucidaSansUnicode00 f
+(deletes) 3439 1440 w
+(it.) 3824 1440 w
+(If) 3991 1440 w
+(that) 4094 1440 w
+(is) 4322 1440 w
+(the) 4439 1440 w
+(last) 4631 1440 w
+(win\255) 4839 1440 w
+(dow) 720 1560 w
+(open) 955 1560 w
+(on) 1231 1560 w
+(the) 1388 1560 w
+(file,) 1577 1560 w
+10 /LucidaTypewriter f
+(close) 1794 1560 w
+10 /LucidaSansUnicode00 f
+(first) 2188 1560 w
+(does) 2417 1560 w
+(a) 2682 1560 w
+10 /LucidaTypewriter f
+(D) 2771 1560 w
+10 /LucidaSansUnicode00 f
+(command) 2877 1560 w
+(on) 3389 1560 w
+(the) 3546 1560 w
+(file.) 3736 1560 w
+10 /LucidaTypewriter f
+(Write) 3986 1560 w
+10 /LucidaSansUnicode00 f
+(is) 4381 1560 w
+(identical) 4496 1560 w
+(to) 4942 1560 w
+(a) 720 1680 w
+10 /LucidaTypewriter f
+(w) 810 1680 w
+10 /LucidaSansUnicode00 f
+(command) 917 1680 w
+(on) 1430 1680 w
+(the) 1588 1680 w
+(file;) 1778 1680 w
+(it) 1996 1680 w
+(is) 2097 1680 w
+(in) 2212 1680 w
+(the) 2338 1680 w
+(menu) 2528 1680 w
+(purely) 2836 1680 w
+(for) 3174 1680 w
+(convenience.) 3348 1680 w
+(Finally,) 4045 1680 w
+10 /LucidaTypewriter f
+(~~sam~~) 4422 1680 w
+10 /LucidaSansUnicode00 f
+(is) 4960 1680 w
+(a) 720 1800 w
+(menu) 832 1800 w
+(item) 1162 1800 w
+(that) 1434 1800 w
+(appears) 1682 1800 w
+(between) 2123 1800 w
+(the) 2587 1800 w
+(commands) 2799 1800 w
+(and) 3385 1800 w
+(the) 3622 1800 w
+(file) 3834 1800 w
+(names.) 4042 1800 w
+(Selecting) 4480 1800 w
+(it) 4974 1800 w
+(makes) 720 1920 w
+(the) 1087 1920 w
+10 /LucidaTypewriter f
+(sam) 1296 1920 w
+10 /LucidaSansUnicode00 f
+(window) 1566 1920 w
+(the) 1989 1920 w
+(current) 2198 1920 w
+(window,) 2602 1920 w
+(causing) 3057 1920 w
+(subsequent) 3483 1920 w
+(typing) 4100 1920 w
+(to) 4459 1920 w
+(be) 4610 1920 w
+(inter\255) 4782 1920 w
+(preted as commands.) 720 2040 w
+cleartomark
+saveobj restore
+%ps_include: begin
+save
+/ed {exch def} def
+{} /showpage ed
+{} /copypage ed
+{} /erasepage ed
+{} /letter ed
+currentdict /findfont known systemdict /findfont known and {
+ /findfont systemdict /findfont get def
+} if
+36 dict dup /PS-include-dict-dw ed begin
+/context ed
+count array astore /o-stack ed
+%ps_include: variables begin
+/llx 239 def
+/lly 297 def
+/urx 371.48 def
+/ury 494.28 def
+/w 0 def
+/o 0 def
+/s 0 def
+/cx 2880 def
+/cy -3266 def
+/sx 4320 def
+/sy 1972 def
+/ax .5 def
+/ay .5 def
+/rot 0 def
+%ps_include: variables end
+{llx lly urx ury} /bbox ed
+{newpath 2 index exch 2 index exch dup 6 index exch
+ moveto 3 {lineto} repeat closepath} /boxpath ed
+{dup mul exch dup mul add sqrt} /len ed
+{2 copy gt {exch} if pop} /min ed
+{2 copy lt {exch} if pop} /max ed
+{transform round exch round exch A itransform} /nice ed
+{6 array} /n ed
+n defaultmatrix n currentmatrix n invertmatrix n concatmatrix /A ed
+urx llx sub 0 A dtransform len /Sx ed
+0 ury lly sub A dtransform len /Sy ed
+llx urx add 2 div lly ury add 2 div A transform /Cy ed /Cx ed
+rot dup sin abs /S ed cos abs /C ed
+Sx S mul Sy C mul add /H ed
+Sx C mul Sy S mul add /W ed
+sy H div /Scaley ed
+sx W div /Scalex ed
+s 0 eq {Scalex Scaley min dup /Scalex ed /Scaley ed} if
+sx Scalex W mul sub 0 max ax 0.5 sub mul cx add /cx ed
+sy Scaley H mul sub 0 max ay 0.5 sub mul cy add /cy ed
+urx llx sub 0 A dtransform exch atan rot exch sub /rot ed
+n currentmatrix initgraphics setmatrix
+cx cy translate
+Scalex Scaley scale
+rot rotate
+Cx neg Cy neg translate
+A concat
+bbox boxpath clip newpath
+w 0 ne {gsave bbox boxpath 1 setgray fill grestore} if
+end
+gsave
+%ps_include: inclusion begin
+ %!PS-Adobe-2.0
+ %%Version: 3.3.2
+ %%DocumentFonts: (atend)
+ %%Pages: (atend)
+ %%EndComments
+ %%EndProlog
+ %%BeginSetup
+mark
+ %%Patch from lp
+ %%EndPatch from lp
+
+/picstr 23 string def
+239 297 translate
+132.48 197.28 scale
+
+184 274 1 [184 0 0 -274 0 274]
+{currentfile picstr readhexstring pop} image
+
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffc00000000000000000000000000000000000000fffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffe47c39cfffffffffffffefffff
+ffc0000fffffffffffffe23999efffffffffffffefffff
+ffc0000fffffffffffffe733992fffffffffffffefffff
+ffc0000fffffffffffffe733992fffffffffffffefffff
+ffc0000fffffffffffffe730192fffffffffffffefffff
+ffc0000fffffffffffffe733fc9fffffffffffffefffff
+ffc0000fffffffffffffe733fc9fffffffffffffefffff
+ffc0000fffffffffffffe7399c9fffffffffffffefffff
+ffc0000fffffffffffffe73c3c9fffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffc078719c3ce7ffffffffffefffff
+ffc0000ffffffffffffe7338199ce7ffffffffffefffff
+ffc0000ffffffffffffce73993ce6fffffffffffefffff
+ffc0000ffffffffffff9e739f3ce1fffffffffffefffff
+ffc0000ffffffffffff3e039f3cfbfffffffffffefffff
+ffc0000fffffffffffe7e7f9f3cf0fffffffffffefffff
+ffc0000fffffffffffcfe7f9f3cecfffffffffffefffff
+ffc0000fffffffffffcff339f99ce7ffffffffffefffff
+ffc0000fffffffffffc078707c3ce7ffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000ffffffffffffffff3ffffffffffffffffefffff
+ffc0000ffffffffffffffff3ffffffffffffffffefffff
+ffc0000ffffffffffffffff3ffffffffffffffffefffff
+ffc0000fffffffff8cf0f0723c1c9f87ffffffffefffff
+ffc0000fffffffffc0e6673119cc4f33ffffffffefffff
+ffc0000fffffffffccce67f39fcce673ffffffffefffff
+ffc0000fffffffffcfce63f39fcce673ffffffffefffff
+ffc0000fffffffffcfc070739c0ce603ffffffffefffff
+ffc0000fffffffffcfcffe3399cce67fffffffffefffff
+ffc0000fffffffffcfcfff3399cce67fffffffffefffff
+ffc0000fffffffffcfe66733998ccf33ffffffffefffff
+ffc0000fffffffff83f0f0739c4c1f87ffffffffefffff
+ffc0000ffffffffffffffffffffcffffffffffffefffff
+ffc0000ffffffffffffffffffffcffffffffffffefffff
+ffc0000ffffffffffffffffffffcffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffc1ffffffffffffffffffefffff
+ffc0000ffffffffffffff9ffffffffffffffffffefffff
+ffc0000ffffffffffffff9ffffffffffffffffffefffff
+ffc0000ffffffffffff0f9f87c1f0fffffffffffefffff
+ffc0000fffffffffffe679f339ce67ffffffffffefffff
+ffc0000fffffffffffce79e799fce7ffffffffffefffff
+ffc0000fffffffffffcff9e798fce7ffffffffffefffff
+ffc0000fffffffffffcff9e79c1c07ffffffffffefffff
+ffc0000fffffffffffcff9e79f8cffffffffffffefffff
+ffc0000fffffffffffcff9e79fccffffffffffffefffff
+ffc0000fffffffffffe679f339ce67ffffffffffefffff
+ffc0000ffffffffffff0c0387c1f0fffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc00008000000000000000000000000000000000fffff
+ffc00008000000000000000000000000000000000fffff
+ffc00008000000000000000300000000000000000fffff
+ffc00008000000000000000300800000000000000fffff
+ffc00008000000000000000001800000000000000fffff
+ffc000080000000000319cdf07f0f000000000000fffff
+ffc000080000000000308fc301819800000000000fffff
+ffc000080000000000368cc30183180000ff80000fffff
+ffc000080000000000368c030183180000fe00000fffff
+ffc000080000000000368c030183f80000f800000fffff
+ffc0000800000000001b0c030183000000fc00000fffff
+ffc0000800000000001b0c030183000000fe00000fffff
+ffc0000800000000001b0c030181980000df00000fffff
+ffc0000800000000001b1f1fe0f0f00000cf80000fffff
+ffc000080000000000000000000000000087c0000fffff
+ffc000080000000000000000000000000083e0000fffff
+ffc0000ffffffffffffffffffffffffffffe0fffefffff
+ffc0000fffffffffffffffffffffffffffff07ffefffff
+ffc0000fffffffffffffffffffffffffffff83ffefffff
+ffc0000fffffffffffffffffffffffffffffc1ffefffff
+ffc0000fffffffffffffffffffffffffffffe0ffefffff
+ffc0000ffffffffffffff07832dffffffffff1ffefffff
+ffc0000fffffffffeef76733900f77bbfffffbffefffff
+ffc0000fffffffffc6e367ff924e371bffffffffefffff
+ffc0000fffffffff80c063ff924c0603ffffffffefffff
+ffc0000fffffffffb1d8f078124d8ec7ffffffffefffff
+ffc0000fffffffffbbddfe33924ddeefffffffffefffff
+ffc0000fffffffffffffff33924fffffffffffffefffff
+ffc0000fffffffffffffe733124fffffffffffffefffff
+ffc0000ffffffffffffff078924fffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000ffffffffffffff3f9ffffffffffffffffefffff
+ffc0000ffffffffffffff3f9ffffffffffffffffefffff
+ffc0000ffffffffffffff3f9ffffffffffffffffefffff
+ffc0000ffff9fffffe0f83c18cf0f0783fff0fffefffff
+ffc0000ffff9fffffce73399c0e667339ffe67ffefffff
+ffc0000ffff9ffffffe67339ccce67f3fffce7ffefffff
+ffc0000fffc03fffffe67339cfce63f1fffcffffefffff
+ffc0000fffc03ffffe067339cfc070783ffcffffefffff
+ffc0000ffff9fffffce67339cfcffe3f1ffcffffefffff
+ffc0000ffff9fc7ffce67339cfcfff3f9e3cffffefffff
+ffc0000ffff9fc7ffcc72391cfe667339e3e67ffefffff
+ffc0000ffffffc7ffe2793c983f0f0783e3f0fffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000fffffffffffffffffffffffffffffffffefffff
+ffc0000ffffffffffffc1e0fffffffffffffffffefffff
+ffc0000fffffffffffff9fcfffffffffffffffffefffff
+ffc0000fffffffffffff9fcfffffffffffffffffefffff
+ffc0000ffffffffffe0f9fcfc3f0fffc3fffffffefffff
+ffc0000ffffffffffce79fcf99e67ff99fffffffefffff
+ffc0000fffffffffffe79fcf3cce7ff39fffffffefffff
+ffc0000fffe03fffffe79fcf3ccffff3ffffffffefffff
+ffc0000fffe03ffffe079fcf3ccffff3ffffffffefffff
+ffc0000ffffffffffce79fcf3ccffff3ffffffffefffff
+ffc0000ffffffffffce79fcf3ccff8f3ffffffffefffff
+ffdffffffffffffffcc79fcf99e678f99fffffffefffff
+ffdffffffffffffffe240201c3f0f8fc3fffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffffffffffffcffffe1f0ffffffffffffffefffff
+ffdffffffffffffffcffffcfe7ffffffffffffffefffff
+ffdffffffffffffffcffffcfe7ffffffffffffffefffff
+ffdffffffffdfffffc9e730180f0e33ffe1fffffefffff
+ffdffffffff57ffffc4e73cfe7e6703ffccfffffefffff
+ffdffffffff8fffffce673cfe7ce733ff9cfffffefffff
+ffdfffffffe23ffffce673cfe7ce73fff9ffffffefffff
+ffdffffffff8fffffce673cfe7c073fff9ffffffefffff
+ffdffffffff57ffffce673cfe7cff3fff9ffffffefffff
+ffdffffffffdfffffce673cfe7cff3fc79ffffffefffff
+ffdffffffffffffffcce23cfe7e673fc7ccfffffefffff
+ffdffffffffffffffc1f130381f0e0fc7e1fffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffffffffffffffffff9ffffffffffffffffefffff
+ffdffffffffffffffffffff9ffffffffffffffffefffff
+ffdffffffffffffffffffff9ffffffffffffffffefffff
+ffdfffffffffffffff0cb7c1fff0ffffffffffffefffff
+ffdffffffffffffffe640399ffe67fffffffffffefffff
+ffdffffffffffffffce49339ffce7fffffffffffefffff
+ffdfffffffe03ffffcfc9339ffcfffffffffffffefffff
+ffdfffffffe03ffffcfc9339ffcfffffffffffffefffff
+ffdffffffffffffffcfc9339ffcfffffffffffffefffff
+ffdffffffffffffffcfc9339e3cfffffffffffffefffff
+ffdffffffffffffffe649391e3e67fffffffffffefffff
+ffdfffffffffffffff0c93c9e3f0ffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffff1ffffffffe79fffffffffffffffffffefffff
+ffdffffff1ffffffffe79fffffffffffffffffffefffff
+ffdffffff1ffffffffe7ffffffffffffffffffffefffff
+ffdffffff9f9ffffff041f83e1fff87fffffffffefffff
+ffdffffff9f9fffffe679f39ccfff33fffffffffefffff
+ffdffffff3f9fffffce79f3f9cffe73fffffffffefffff
+ffdfffffffc03ffffce79f1f9fffe7ffffffffffefffff
+ffdfffffffc03ffffce79f839fffe7ffffffffffefffff
+ffdffffffff9fffffce79ff19fffe7ffffffffffefffff
+ffdffffffff9fffffce79ff99ff1e7ffffffffffefffff
+ffdffffffff9fffffe479f39ccf1f33fffffffffefffff
+ffdfffffffffffffff240383e1f1f87fffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffff0e3319c3c67ffc3fffffffefffff
+ffdffffffffffffffe67038199e07ff99fffffffefffff
+ffdffffffffffffffce733993ce67ff39fffffffefffff
+ffdfffffffe03ffffce73f9f3ce7fff3ffffffffefffff
+ffdfffffffe03ffffc073f9f3ce7fff3ffffffffefffff
+ffdffffffffffffffcff3f9f3ce7fff3ffffffffefffff
+ffdffffffffffffffcff3f9f3ce7f8f3ffffffffefffff
+ffdffffffffffffffe673f9f99e7f8f99fffffffefffff
+ffdfffffffffffffff0e0f07c3c1f8fc3fffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffffffffffffffffffffffffffff9ffffffefffff
+ffdffffffffffffffffffffffffffffff9ffffffefffff
+ffdffffffffffffffffffffffffffffff9ffffffefffff
+ffdfffffffffffffff0e3319c3c6707ff91fffffefffff
+ffdffffffffffffffe67038199e0673ff88fffffefffff
+ffdffffffffffffffce733993ce667fff9cfffffefffff
+ffdfffffffe03ffffce73f9f3ce7e3fff9cfffffefffff
+ffdfffffffe03ffffc073f9f3ce7f07ff9cfffffefffff
+ffdffffffffffffffcff3f9f3ce7fe3ff9cfffffefffff
+ffdffffffffffffffcff3f9f3ce7ff3c79cfffffefffff
+ffdffffffffffffffe673f9f99e7e73c79cfffffefffff
+ffdfffffffffffffff0e0f07c3c1f07c79cfffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffff879e0fffffffffffffffffefffff
+ffdfffffffffffffff3f9fcfffffffffffffffffefffff
+ffdfffffffffffffff3fffcfffffffffffffffffefffff
+ffdffffffffffffffc041fcfe1fff87fffffffffefffff
+ffdfffffffffffffff3f9fcfccfff33fffffffffefffff
+ffdfffffffffffffff3f9fcf9cffe73fffffffffefffff
+ffdfffffffe03fffff3f9fcf9cffe7ffffffffffefffff
+ffdfffffffe03fffff3f9fcf80ffe7ffffffffffefffff
+ffdfffffffffffffff3f9fcf9fffe7ffffffffffefffff
+ffdfffffffffffffff3f9fcf9ff1e7ffffffffffefffff
+ffdfffffffffffffff3f9fcfccf1f33fffffffffefffff
+ffdffffffffffffffc0c0201e1f1f87fffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffff0783ffffffffffffefffff
+ffdfffffffffffffffffffffe7f3ffffffffffffefffff
+ffdfffffffffffffffffffffe7f3ffffffffffffefffff
+ffdfffffffffffffff078783e7f3f0fc3fff0fffefffff
+ffdffffffffffffffe673339e7f3e6799ffe67ffefffff
+ffdffffffffffffffce673f9e7f3cf339ffce7ffefffff
+ffdfffffffe03ffffce67ff9e7f3cf33fffcffffefffff
+ffdfffffffe03ffffce67f81e7f3cf33fffcffffefffff
+ffdffffffffffffffce67f39e7f3cf33fffcffffefffff
+ffdffffffffffffffce67f39e7f3cf33fe3cffffefffff
+ffdffffffffffffffe473331e7f3e6799e3e67ffefffff
+ffdfffffffffffffff278789008070fc3e3f0fffefffff
+ffdfffffffffffffffe7ffffffffffffffffffffefffff
+ffdffffffffffffffce7ffffffffffffffffffffefffff
+ffdffffffffffffffe0fffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffff3fffffffffffffffffffffefffff
+ffdfffffffffffffff3fffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdffffffffffffff83f0fffe1ffffffffffffffefffff
+ffdfffffffffffffff3e67ffccffffffffffffffefffff
+ffdfffffffffffffff3cf3ff9cffffffffffffffefffff
+ffdfffffffe03fffff3cf3ff9fffffffffffffffefffff
+ffdfffffffe03fffff3cf3ff9fffffffffffffffefffff
+ffdfffffffffffffff3cf3ff9fffffffffffffffefffff
+ffdfffffffffffffff3cf3c79fffffffffffffffefffff
+ffdfffffffffffffff3e67c7ccffffffffffffffefffff
+ffdffffffffffffff8070fc7e1ffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffdfffffffffffffffffffffffffffffffffffffefffff
+ffc00000000000000000000000000000000000000fffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff
+showpage
+ %%BoundingBox: 239 297 371.48 494.28
+%ps_include: inclusion end
+grestore
+PS-include-dict-dw begin
+o 0 ne {gsave A defaultmatrix /A ed llx lly nice urx ury nice
+ initgraphics 0.1 setlinewidth boxpath stroke grestore} if
+clear o-stack aload pop
+context end restore
+%ps_include: end
+/saveobj save def
+mark
+8 /LucidaSans-Italic f
+(Figure) 720 4352 w
+(3.) 1000 4352 w
+(The) 1111 4352 w
+(menu) 1288 4352 w
+(on) 1540 4352 w
+(button) 1672 4352 w
+(3.) 1963 4352 w
+(The) 2101 4352 w
+(black) 2279 4352 w
+(rectangle) 2522 4352 w
+(on) 2921 4352 w
+(the) 3053 4352 w
+(left) 3211 4352 w
+(is) 3372 4352 w
+(a) 3470 4352 w
+(scroll) 3555 4352 w
+(bar;) 3800 4352 w
+(the) 3998 4352 w
+(menu) 4156 4352 w
+(is) 4408 4352 w
+(limited) 4506 4352 w
+(to) 4806 4352 w
+(the) 4918 4352 w
+(length) 720 4452 w
+(shown) 993 4452 w
+(to) 1269 4452 w
+(prevent) 1374 4452 w
+(its) 1697 4452 w
+(becoming) 1818 4452 w
+(unwieldy.) 2220 4452 w
+(Above) 2644 4452 w
+(the) 2908 4452 w
+8 /LucidaTypewriter f
+(~~sam~~) 3059 4452 w
+8 /LucidaSans-Italic f
+(line) 3494 4452 w
+(is) 3661 4452 w
+(a) 3752 4452 w
+(list) 3830 4452 w
+(of) 3974 4452 w
+(commands;) 4079 4452 w
+(beneath) 4555 4452 w
+(it) 4896 4452 w
+(is) 4978 4452 w
+(a) 720 4552 w
+(list) 795 4552 w
+(of) 936 4552 w
+(files,) 1038 4552 w
+(presented) 1247 4552 w
+(exactly) 1654 4552 w
+(as) 1951 4552 w
+(with) 2065 4552 w
+(the) 2256 4552 w
+8 /LucidaTypewriter f
+(f) 2404 4552 w
+8 /LucidaSans-Italic f
+(command.) 2488 4552 w
+10 /LucidaSansUnicode00 f
+(When) 970 4828 w
+10 /LucidaTypewriter f
+(sam) 1296 4828 w
+10 /LucidaSansUnicode00 f
+(requests) 1572 4828 w
+(that) 2049 4828 w
+(a) 2300 4828 w
+(window) 2415 4828 w
+(be) 2844 4828 w
+(swept,) 3023 4828 w
+(in) 3399 4828 w
+(response) 3550 4828 w
+(to) 4051 4828 w
+10 /LucidaTypewriter f
+(new) 4209 4828 w
+10 /LucidaSansUnicode00 f
+(,) 4425 4828 w
+10 /LucidaTypewriter f
+(zerox) 4517 4828 w
+10 /LucidaSansUnicode00 f
+(or) 4938 4828 w
+10 /LucidaTypewriter f
+(reshape) 720 4948 w
+10 /LucidaSansUnicode00 f
+(,) 1224 4948 w
+(it) 1307 4948 w
+(changes) 1424 4948 w
+(the) 1874 4948 w
+(mouse) 2080 4948 w
+(cursor) 2454 4948 w
+(from) 2812 4948 w
+(the) 3095 4948 w
+(usual) 3301 4948 w
+(arrow) 3610 4948 w
+(to) 3935 4948 w
+(a) 4083 4948 w
+(box) 4188 4948 w
+(with) 4423 4948 w
+(a) 4678 4948 w
+(small) 4783 4948 w
+(arrow.) 720 5068 w
+(In) 1095 5068 w
+(this) 1222 5068 w
+(state,) 1437 5068 w
+(the) 1741 5068 w
+(mouse) 1932 5068 w
+(may) 2291 5068 w
+(be) 2527 5068 w
+(used) 2682 5068 w
+(to) 2950 5068 w
+(indicate) 3084 5068 w
+(an) 3502 5068 w
+(arbitrary) 3656 5068 w
+(rectangle) 4107 5068 w
+(by) 4593 5068 w
+(press\255) 4745 5068 w
+(ing) 720 5188 w
+(button) 915 5188 w
+(3) 1279 5188 w
+(at) 1384 5188 w
+(one) 1518 5188 w
+(corner) 1739 5188 w
+(and) 2093 5188 w
+(releasing) 2315 5188 w
+(it) 2798 5188 w
+(at) 2906 5188 w
+(the) 3039 5188 w
+(opposite) 3235 5188 w
+(corner.) 3697 5188 w
+(More) 4114 5188 w
+(conveniently,) 4399 5188 w
+(button) 720 5308 w
+(3) 1093 5308 w
+(may) 1207 5308 w
+(simply) 1458 5308 w
+(be) 1826 5308 w
+(clicked,) 1996 5308 w
+(whereupon) 2416 5308 w
+10 /LucidaTypewriter f
+(sam) 3007 5308 w
+10 /LucidaSansUnicode00 f
+(creates) 3275 5308 w
+(the) 3674 5308 w
+(maximal) 3881 5308 w
+(rectangle) 4348 5308 w
+(that) 4849 5308 w
+(contains) 720 5428 w
+(the) 1164 5428 w
+(cursor) 1355 5428 w
+(and) 1698 5428 w
+(abuts) 1914 5428 w
+(the) 2218 5428 w
+10 /LucidaTypewriter f
+(sam) 2409 5428 w
+10 /LucidaSansUnicode00 f
+(window.) 2661 5428 w
+(By) 3130 5428 w
+(placing) 3275 5428 w
+(the) 3661 5428 w
+10 /LucidaTypewriter f
+(sam) 3851 5428 w
+10 /LucidaSansUnicode00 f
+(window) 4102 5428 w
+(in) 4506 5428 w
+(the) 4632 5428 w
+(mid\255) 4822 5428 w
+(dle) 720 5548 w
+(of) 921 5548 w
+(the) 1072 5548 w
+(screen,) 1280 5548 w
+(the) 1682 5548 w
+(user) 1890 5548 w
+(can) 2153 5548 w
+(define) 2374 5548 w
+(two) 2730 5548 w
+(regions) 2958 5548 w
+(\(one) 3373 5548 w
+(above,) 3638 5548 w
+(one) 4010 5548 w
+(below\)) 4242 5548 w
+(in) 4614 5548 w
+(which) 4759 5548 w
+(stacked) 720 5668 w
+(fully-overlapping) 1148 5668 w
+(windows) 2045 5668 w
+(can) 2522 5668 w
+(be) 2746 5668 w
+(created) 2921 5668 w
+(with) 3336 5668 w
+(minimal) 3597 5668 w
+(fuss) 4043 5668 w
+(\(see) 4300 5668 w
+(Figure) 4552 5668 w
+(1\).) 4912 5668 w
+(This simple user interface trick makes window creation noticeably easier.) 720 5788 w
+(The) 970 5944 w
+(cut-and-paste) 1184 5944 w
+(editor) 1925 5944 w
+(is) 2246 5944 w
+(essentially) 2360 5944 w
+(the) 2901 5944 w
+(same) 3090 5944 w
+(as) 3379 5944 w
+(that) 3519 5944 w
+(in) 3744 5944 w
+(Smalltalk-80.) 3869 5944 w
+6 /LucidaSansUnicode00 f
+(11) 4524 5894 w
+10 /LucidaSansUnicode00 f
+(The) 4634 5944 w
+(text) 4849 5944 w
+(in) 720 6064 w
+(dot) 856 6064 w
+(is) 1062 6064 w
+(always) 1187 6064 w
+(highlighted) 1551 6064 w
+(on) 2149 6064 w
+(the) 2317 6064 w
+(screen.) 2517 6064 w
+(When) 2943 6064 w
+(a) 3254 6064 w
+(character) 3354 6064 w
+(is) 3848 6064 w
+(typed) 3973 6064 w
+(it) 4289 6064 w
+(replaces) 4400 6064 w
+(dot,) 4847 6064 w
+(and) 720 6184 w
+(sets) 946 6184 w
+(dot) 1187 6184 w
+(to) 1394 6184 w
+(the) 1538 6184 w
+(null) 1739 6184 w
+(string) 1967 6184 w
+(after) 2295 6184 w
+(the) 2567 6184 w
+(character.) 2768 6184 w
+(Thus,) 3327 6184 w
+(ordinary) 3643 6184 w
+(typing) 4093 6184 w
+(inserts) 4444 6184 w
+(text.) 4817 6184 w
+(Button) 720 6304 w
+(1) 1081 6304 w
+(is) 1188 6304 w
+(used) 1312 6304 w
+(for) 1588 6304 w
+(selection:) 1771 6304 w
+(pressing) 2279 6304 w
+(the) 2738 6304 w
+(button,) 2937 6304 w
+(moving) 3335 6304 w
+(the) 3738 6304 w
+(mouse,) 3936 6304 w
+(and) 4334 6304 w
+(lifting) 4557 6304 w
+(the) 4885 6304 w
+(button) 720 6424 w
+(selects) 1085 6424 w
+(\(sets) 1459 6424 w
+(dot) 1730 6424 w
+(to\)) 1934 6424 w
+(the) 2108 6424 w
+(text) 2306 6424 w
+(between) 2540 6424 w
+(the) 2990 6424 w
+(points) 3188 6424 w
+(where) 3534 6424 w
+(the) 3869 6424 w
+(button) 4067 6424 w
+(was) 4432 6424 w
+(pressed) 4659 6424 w
+(and) 720 6544 w
+(released.) 954 6544 w
+(Pressing) 1479 6544 w
+(and) 1940 6544 w
+(releasing) 2174 6544 w
+(at) 2668 6544 w
+(the) 2813 6544 w
+(same) 3021 6544 w
+(point) 3329 6544 w
+(selects) 3634 6544 w
+(a) 4018 6544 w
+(null) 4126 6544 w
+(string;) 4361 6544 w
+(this) 4728 6544 w
+(is) 4960 6544 w
+(called) 720 6664 w
+(clicking.) 1060 6664 w
+(Clicking) 1552 6664 w
+(twice) 1998 6664 w
+(quickly,) 2305 6664 w
+(or) 2738 6664 w
+10 /LucidaSans-Italic f
+(double) 2897 6664 w
+(clicking,) 3277 6664 w
+10 /LucidaSansUnicode00 f
+(selects) 3734 6664 w
+(larger) 4122 6664 w
+(objects;) 4463 6664 w
+(for) 4901 6664 w
+(example,) 720 6784 w
+(double) 1222 6784 w
+(clicking) 1613 6784 w
+(in) 2040 6784 w
+(a) 2187 6784 w
+(word) 2298 6784 w
+(selects) 2596 6784 w
+(the) 2983 6784 w
+(word,) 3194 6784 w
+(double) 3524 6784 w
+(clicking) 3914 6784 w
+(just) 4341 6784 w
+(inside) 4577 6784 w
+(an) 4923 6784 w
+(opening) 720 6904 w
+(bracket) 1165 6904 w
+(selects) 1576 6904 w
+(the) 1958 6904 w
+(text) 2164 6904 w
+(contained) 2406 6904 w
+(in) 2933 6904 w
+(the) 3075 6904 w
+(brackets) 3281 6904 w
+(\(handling) 3744 6904 w
+(nested) 4252 6904 w
+(brackets) 4628 6904 w
+(correctly\),) 720 7024 w
+(and) 1247 7024 w
+(similarly) 1469 7024 w
+(for) 1919 7024 w
+(parentheses,) 2100 7024 w
+(quotes,) 2764 7024 w
+(and) 3168 7024 w
+(so) 3390 7024 w
+(on.) 3544 7024 w
+(The) 3773 7024 w
+(double-clicking) 3996 7024 w
+(rules) 4801 7024 w
+(reflect) 720 7144 w
+(a) 1074 7144 w
+(bias) 1176 7144 w
+(toward) 1422 7144 w
+(programmers.) 1804 7144 w
+(If) 2573 7144 w
+10 /LucidaTypewriter f
+(sam) 2687 7144 w
+10 /LucidaSansUnicode00 f
+(were) 2951 7144 w
+(intended) 3229 7144 w
+(more) 3705 7144 w
+(for) 4004 7144 w
+(word) 4191 7144 w
+(processing,) 4481 7144 w
+(double-clicks would probably select linguistic structures such as sentences.) 720 7264 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 13 13
+%%Page: 14 14
+/saveobj save def
+mark
+14 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 14 \255) 2752 480 w
+(If) 970 840 w
+(button) 1077 840 w
+(1) 1441 840 w
+(is) 1546 840 w
+(pressed) 1668 840 w
+(outside) 2091 840 w
+(the) 2492 840 w
+(current) 2689 840 w
+(window,) 3081 840 w
+(it) 3524 840 w
+(makes) 3632 840 w
+(the) 3987 840 w
+(indicated) 4184 840 w
+(window) 4671 840 w
+(current.) 720 960 w
+(This is the easiest way to switch between windows and files.) 1166 960 w
+(Pressing) 970 1116 w
+(button) 1429 1116 w
+(2) 1803 1116 w
+(brings) 1918 1116 w
+(up) 2278 1116 w
+(a) 2455 1116 w
+(menu) 2562 1116 w
+(of) 2887 1116 w
+(editing) 3037 1116 w
+(functions) 3428 1116 w
+(\(see) 3933 1116 w
+(Figure) 4182 1116 w
+(4\).) 4539 1116 w
+(These) 4752 1116 w
+(mostly) 720 1236 w
+(apply) 1082 1236 w
+(to) 1383 1236 w
+(the) 1520 1236 w
+(selected) 1714 1236 w
+(text:) 2152 1236 w
+10 /LucidaTypewriter f
+(cut) 2414 1236 w
+10 /LucidaSansUnicode00 f
+(deletes) 2669 1236 w
+(the) 3055 1236 w
+(selected) 3248 1236 w
+(text,) 3685 1236 w
+(and) 3946 1236 w
+(remembers) 4164 1236 w
+(it) 4752 1236 w
+(in) 4856 1236 w
+(a) 4985 1236 w
+(hidden) 720 1356 w
+(buffer) 1090 1356 w
+(called) 1422 1356 w
+(the) 1741 1356 w
+10 /LucidaSans-Italic f
+(snarf) 1932 1356 w
+(buffer,) 2226 1356 w
+10 /LucidaTypewriter f
+(paste) 2594 1356 w
+10 /LucidaSansUnicode00 f
+(replaces) 2990 1356 w
+(the) 3428 1356 w
+(selected) 3619 1356 w
+(text) 4054 1356 w
+(by) 4281 1356 w
+(the) 4432 1356 w
+(contents) 4623 1356 w
+(of) 720 1476 w
+(the) 874 1476 w
+(snarf) 1085 1476 w
+(buffer,) 1387 1476 w
+10 /LucidaTypewriter f
+(snarf) 1771 1476 w
+10 /LucidaSansUnicode00 f
+(just) 2187 1476 w
+(copies) 2423 1476 w
+(the) 2790 1476 w
+(selected) 3001 1476 w
+(text) 3456 1476 w
+(to) 3703 1476 w
+(the) 3857 1476 w
+(snarf) 4068 1476 w
+(buffer,) 4369 1476 w
+10 /LucidaTypewriter f
+(look) 4752 1476 w
+10 /LucidaSansUnicode00 f
+(searches) 720 1596 w
+(forward) 1208 1596 w
+(for) 1648 1596 w
+(the) 1852 1596 w
+(next) 2073 1596 w
+(literal) 2355 1596 w
+(occurrence) 2697 1596 w
+(of) 3295 1596 w
+(the) 3459 1596 w
+(selected) 3680 1596 w
+(text,) 4145 1596 w
+(and) 4434 1596 w
+10 /LucidaTypewriter f
+(<mux>) 4680 1596 w
+10 /LucidaSansUnicode00 f
+(exchanges) 720 1716 w
+(snarf) 1277 1716 w
+(buffers) 1564 1716 w
+(with) 1952 1716 w
+(the) 2198 1716 w
+(window) 2394 1716 w
+(system) 2804 1716 w
+(in) 3185 1716 w
+(which) 3317 1716 w
+10 /LucidaTypewriter f
+(sam) 3639 1716 w
+10 /LucidaSansUnicode00 f
+(is) 3896 1716 w
+(running.) 4017 1716 w
+(Finally,) 4502 1716 w
+(the) 4885 1716 w
+(last) 720 1836 w
+(regular) 940 1836 w
+(expression) 1334 1836 w
+(used) 1913 1836 w
+(appears) 2193 1836 w
+(as) 2625 1836 w
+(a) 2779 1836 w
+(menu) 2882 1836 w
+(entry) 3203 1836 w
+(to) 3499 1836 w
+(search) 3645 1836 w
+(forward) 4009 1836 w
+(for) 4432 1836 w
+(the) 4620 1836 w
+(next) 4824 1836 w
+(occurrence of a match for the expression.) 720 1956 w
+cleartomark
+saveobj restore
+%ps_include: begin
+save
+/ed {exch def} def
+{} /showpage ed
+{} /copypage ed
+{} /erasepage ed
+{} /letter ed
+currentdict /findfont known systemdict /findfont known and {
+ /findfont systemdict /findfont get def
+} if
+36 dict dup /PS-include-dict-dw ed begin
+/context ed
+count array astore /o-stack ed
+%ps_include: variables begin
+/llx 268 def
+/lly 352 def
+/urx 342.16 def
+/ury 438.4 def
+/w 0 def
+/o 0 def
+/s 0 def
+/cx 2880 def
+/cy -2628 def
+/sx 4320 def
+/sy 864 def
+/ax .5 def
+/ay .5 def
+/rot 0 def
+%ps_include: variables end
+{llx lly urx ury} /bbox ed
+{newpath 2 index exch 2 index exch dup 6 index exch
+ moveto 3 {lineto} repeat closepath} /boxpath ed
+{dup mul exch dup mul add sqrt} /len ed
+{2 copy gt {exch} if pop} /min ed
+{2 copy lt {exch} if pop} /max ed
+{transform round exch round exch A itransform} /nice ed
+{6 array} /n ed
+n defaultmatrix n currentmatrix n invertmatrix n concatmatrix /A ed
+urx llx sub 0 A dtransform len /Sx ed
+0 ury lly sub A dtransform len /Sy ed
+llx urx add 2 div lly ury add 2 div A transform /Cy ed /Cx ed
+rot dup sin abs /S ed cos abs /C ed
+Sx S mul Sy C mul add /H ed
+Sx C mul Sy S mul add /W ed
+sy H div /Scaley ed
+sx W div /Scalex ed
+s 0 eq {Scalex Scaley min dup /Scalex ed /Scaley ed} if
+sx Scalex W mul sub 0 max ax 0.5 sub mul cx add /cx ed
+sy Scaley H mul sub 0 max ay 0.5 sub mul cy add /cy ed
+urx llx sub 0 A dtransform exch atan rot exch sub /rot ed
+n currentmatrix initgraphics setmatrix
+cx cy translate
+Scalex Scaley scale
+rot rotate
+Cx neg Cy neg translate
+A concat
+bbox boxpath clip newpath
+w 0 ne {gsave bbox boxpath 1 setgray fill grestore} if
+end
+gsave
+%ps_include: inclusion begin
+ %!PS
+/picstr 13 string def
+268 352 translate
+ 74.16 86.40 scale
+
+103 120 1 [103 0 0 -120 0 120]
+{currentfile picstr readhexstring pop} image
+
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+f800000000000000000001ffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffdfffffffdffff
+fbfffffffffff9fffffffdffff
+fbffffffe1ce603ffffffdffff
+fbffffffccce79fffffffdffff
+fbffffff9cce79fffffffdffff
+fbffffff9fce79fffffffdffff
+fbffffff9fce79fffffffdffff
+fbffffff9fce79fffffffdffff
+fbffffff9fce79fffffffdffff
+fbffffffccc479fffffffdffff
+fbffffffe1e27c3ffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffdfffffffdffff
+fbfffffffffff9fffffffdffff
+fbffff27c1e0e03c3ffffdffff
+fbffff139cce79f99ffffdffff
+fbffff39fccff9f39ffffdffff
+fbffff39fcc7f9f39ffffdffff
+fbffff39c0e0f9f01ffffdffff
+fbffff399cfc79f3fffffdffff
+fbffff399cfe79f3fffffdffff
+fbffff3398ce79f99ffffdffff
+fbffff07c4e0fc3c3ffffdffff
+fbffff3ffffffffffffffdffff
+fbffff3ffffffffffffffdffff
+fbffff3ffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffe1ffffdffff
+fbfffffffffffffcfffffdffff
+fbfffffffffffffcfffffdffff
+fbffff8391e0e3301ffffdffff
+fbffff3988ce703cfffffdffff
+fbffff3f9cfe733cfffffdffff
+fbffff1f9cfe73fcfffffdffff
+fbffff839ce073fcfffffdffff
+fbfffff19cce73fcfffffdffff
+fbfffff99cce73fcfffffdffff
+fbffff399ccc73fcfffffdffff
+fbffff839ce260f03ffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffff07fffff3ffffffdffff
+fbfffffe7fffff3ffffffdffff
+fbfffffe7fffff3ffffffdffff
+fbfffffe7e1f0f39fffffdffff
+fbfffffe7cce673bfffffdffff
+fbfffffe79e4f337fffffdffff
+fbfffffe79e4f32ffffffdffff
+fbfffffe79e4f30ffffffdffff
+fbfffffe79e4f327fffffdffff
+fbfffffe79e4f333fffffdffff
+fbfffffe7cce6739fffffdffff
+fbfffff00e1f0f39fffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+fbfffffbfffffffbfffffdffff
+fbfffff3fffffff9fffffdffff
+fbffffe72dce673cfffffdffff
+fbffffcf00ce673e7ffffdffff
+fbffff9f24ce737f3ffffdffff
+fbffff1f24ce70ff1ffffdffff
+fbffff9f24ce7dff3ffffdffff
+fbffffcf24ce787e7ffffdffff
+fbffffe724ce767cfffffdffff
+fbfffff324c46739fffffdffff
+fbfffffb24e2673bfffffdffff
+fbfffffffffffffffffffdffff
+fbfffffffffffffffffffdffff
+f800000000000000000001ffff
+f800000000000000000001ffff
+f800c04000030000200001ffff
+f800c18000030000180001ffff
+f8018300000180000c0001ffff
+f801830000c180dc0c0c01ffff
+f803060000c0c0ee060c01ffff
+f803060000c0c0c6060c01ffff
+f806060007f860c6067f81ffff
+f806060007f860c6067f81ffff
+f80c060000c030c6060c01ffff
+f80c0601c0c030c6060c01ffff
+f8180601c0c018c6060c01ffff
+f8180301c00018c60c001e0fff
+f830030000000c000c001e3fff
+f830018000000c0018001effff
+f80000400000000020001e7fff
+ffffffffffffffffffffe03fff
+ffffffffffffffffffffe41fff
+ffffffffffffffffffffe60fff
+ffffffffffffffffffffef07ff
+ffffffffffffffffffffef83ff
+ffffffffffffffffffffffc1ff
+ffffffffffffffffffffffe0ff
+fffffffffffffffffffffff07f
+fffffffffffffffffffffff83f
+fffffffffffffffffffffffc1f
+fffffffffffffffffffffffe3f
+ffffffffffffffffffffffff7f
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+ffffffffffffffffffffffffff
+showpage
+ %%BoundingBox: 268 352 342.16 438.40
+%ps_include: inclusion end
+grestore
+PS-include-dict-dw begin
+o 0 ne {gsave A defaultmatrix /A ed llx lly nice urx ury nice
+ initgraphics 0.1 setlinewidth boxpath stroke grestore} if
+clear o-stack aload pop
+context end restore
+%ps_include: end
+/saveobj save def
+mark
+8 /LucidaSans-Italic f
+(Figure) 720 3160 w
+(4.) 998 3160 w
+(The) 1107 3160 w
+(menu) 1282 3160 w
+(on) 1531 3160 w
+(button) 1661 3160 w
+(2.) 1950 3160 w
+(The) 2086 3160 w
+(bottom) 2262 3160 w
+(entry) 2571 3160 w
+(tracks) 2809 3160 w
+(the) 3085 3160 w
+(most) 3241 3160 w
+(recently) 3464 3160 w
+(used) 3807 3160 w
+(regular) 4021 3160 w
+(expression,) 4344 3160 w
+(which) 4815 3160 w
+(may) 720 3260 w
+(be) 913 3260 w
+(literal) 1030 3260 w
+(text.) 1284 3260 w
+10 /LucidaSansUnicode00 f
+(The) 970 3536 w
+(relationship) 1216 3536 w
+(between) 1856 3536 w
+(the) 2328 3536 w
+(command) 2548 3536 w
+(language) 3091 3536 w
+(and) 3599 3536 w
+(the) 3844 3536 w
+(mouse) 4064 3536 w
+(language) 4452 3536 w
+(is) 4960 3536 w
+(entirely) 720 3656 w
+(due) 1129 3656 w
+(to) 1357 3656 w
+(the) 1502 3656 w
+(equality) 1704 3656 w
+(of) 2134 3656 w
+(dot) 2279 3656 w
+(and) 2487 3656 w
+(the) 2714 3656 w
+(selected) 2916 3656 w
+(text) 3362 3656 w
+(chosen) 3599 3656 w
+(with) 3988 3656 w
+(button) 4239 3656 w
+(1) 4607 3656 w
+(on) 4716 3656 w
+(the) 4885 3656 w
+(mouse.) 720 3776 w
+(For example, to make a set of changes in a C subroutine, dot can be) 1139 3776 w
+(set) 4496 3776 w
+(by) 4673 3776 w
+(dou\255) 4821 3776 w
+(ble) 720 3896 w
+(clicking) 915 3896 w
+(on) 1333 3896 w
+(the) 1503 3896 w
+(left) 1705 3896 w
+(brace) 1911 3896 w
+(that) 2224 3896 w
+(begins) 2462 3896 w
+(the) 2832 3896 w
+(subroutine,) 3034 3896 w
+(which) 3637 3896 w
+(sets) 3965 3896 w
+(dot) 4207 3896 w
+(for) 4415 3896 w
+(the) 4601 3896 w
+(com\255) 4802 3896 w
+(mand) 720 4016 w
+(language.) 1039 4016 w
+(An) 1592 4016 w
+(address-free) 1769 4016 w
+(command) 2443 4016 w
+(then) 2967 4016 w
+(typed) 3230 4016 w
+(in) 3548 4016 w
+(the) 3686 4016 w
+10 /LucidaTypewriter f
+(sam) 3888 4016 w
+10 /LucidaSansUnicode00 f
+(window) 4151 4016 w
+(will) 4567 4016 w
+(apply) 4778 4016 w
+(only) 720 4136 w
+(to) 962 4136 w
+(the) 1097 4136 w
+(text) 1289 4136 w
+(between) 1517 4136 w
+(the) 1961 4136 w
+(opening) 2153 4136 w
+(and) 2585 4136 w
+(closing) 2802 4136 w
+(braces) 3184 4136 w
+(of) 3538 4136 w
+(the) 3673 4136 w
+(function.) 3865 4136 w
+(The) 4367 4136 w
+(idea) 4585 4136 w
+(is) 4825 4136 w
+(to) 4942 4136 w
+(select) 720 4256 w
+(what) 1041 4256 w
+(you) 1313 4256 w
+(want,) 1530 4256 w
+(and) 1835 4256 w
+(then) 2057 4256 w
+(say) 2316 4256 w
+(what) 2516 4256 w
+(you) 2789 4256 w
+(want) 3006 4256 w
+(to) 3279 4256 w
+(do) 3419 4256 w
+(with) 3585 4256 w
+(it,) 3832 4256 w
+(whether) 3972 4256 w
+(invoked) 4405 4256 w
+(by) 4828 4256 w
+(a) 4985 4256 w
+(menu) 720 4376 w
+(selection) 1032 4376 w
+(or) 1503 4376 w
+(by) 1644 4376 w
+(a) 1798 4376 w
+(typed) 1892 4376 w
+(command.) 2202 4376 w
+(And) 2783 4376 w
+(of) 3016 4376 w
+(course,) 3153 4376 w
+(the) 3546 4376 w
+(value) 3740 4376 w
+(of) 4033 4376 w
+(dot) 4170 4376 w
+(is) 4369 4376 w
+(highlighted) 4487 4376 w
+(on) 720 4496 w
+(the) 889 4496 w
+(display) 1090 4496 w
+(after) 1478 4496 w
+(the) 1750 4496 w
+(command) 1951 4496 w
+(completes.) 2476 4496 w
+(This) 3084 4496 w
+(relationship) 3336 4496 w
+(between) 3958 4496 w
+(mouse) 4412 4496 w
+(inter\255) 4782 4496 w
+(face) 720 4616 w
+(and) 974 4616 w
+(command) 1208 4616 w
+(language) 1740 4616 w
+(is) 2237 4616 w
+(clumsy) 2371 4616 w
+(to) 2763 4616 w
+(explain,) 2915 4616 w
+(but) 3356 4616 w
+(comfortable,) 3572 4616 w
+(even) 4242 4616 w
+(natural,) 4522 4616 w
+(in) 4949 4616 w
+(practice.) 720 4736 w
+10 /LucidaSans-Demi f
+(The Implementation) 720 4976 w
+10 /LucidaSansUnicode00 f
+(The) 720 5132 w
+(next) 946 5132 w
+(few) 1207 5132 w
+(sections) 1422 5132 w
+(describe) 1865 5132 w
+(how) 2320 5132 w
+10 /LucidaTypewriter f
+(sam) 2565 5132 w
+10 /LucidaSansUnicode00 f
+(is) 2826 5132 w
+(put) 2951 5132 w
+(together,) 3159 5132 w
+(first) 3649 5132 w
+(the) 3890 5132 w
+(host) 4091 5132 w
+(part,) 4348 5132 w
+(then) 4622 5132 w
+(the) 4885 5132 w
+(inter-component) 720 5252 w
+(communication,) 1583 5252 w
+(then) 2395 5252 w
+(the) 2646 5252 w
+(terminal) 2835 5252 w
+(part.) 3271 5252 w
+(After) 3565 5252 w
+(explaining) 3839 5252 w
+(how) 4381 5252 w
+(the) 4614 5252 w
+(com\255) 4802 5252 w
+(mand) 720 5372 w
+(language) 1029 5372 w
+(is) 1508 5372 w
+(implemented,) 1624 5372 w
+(the) 2329 5372 w
+(discussion) 2520 5372 w
+(follows) 3066 5372 w
+(\(roughly\)) 3447 5372 w
+(the) 3918 5372 w
+(path) 4110 5372 w
+(of) 4364 5372 w
+(a) 4499 5372 w
+(character) 4591 5372 w
+(from) 720 5492 w
+(the) 1002 5492 w
+(temporary) 1207 5492 w
+(file) 1756 5492 w
+(on) 1957 5492 w
+(disc) 2130 5492 w
+(to) 2374 5492 w
+(the) 2522 5492 w
+(screen.) 2727 5492 w
+(The) 3158 5492 w
+(presentation) 3389 5492 w
+(centers) 4049 5492 w
+(on) 4453 5492 w
+(the) 4626 5492 w
+(data) 4830 5492 w
+(structures,) 720 5612 w
+(because) 1281 5612 w
+(that) 1715 5612 w
+(is) 1946 5612 w
+(how) 2067 5612 w
+(the) 2308 5612 w
+(program) 2504 5612 w
+(was) 2961 5612 w
+(designed) 3185 5612 w
+(and) 3668 5612 w
+(because) 3889 5612 w
+(the) 4324 5612 w
+(algorithms) 4520 5612 w
+(are easy to provide, given the right data structures.) 720 5732 w
+10 /LucidaSans-Demi f
+(Parsing and execution) 720 5972 w
+10 /LucidaSansUnicode00 f
+(The) 720 6128 w
+(command) 951 6128 w
+(language) 1479 6128 w
+(is) 1972 6128 w
+(interpreted) 2102 6128 w
+(by) 2693 6128 w
+(parsing) 2859 6128 w
+(each) 3273 6128 w
+(command) 3548 6128 w
+(with) 4077 6128 w
+(a) 4333 6128 w
+(table-driven) 4439 6128 w
+(recursive) 720 6248 w
+(descent) 1195 6248 w
+(parser,) 1607 6248 w
+(and) 1982 6248 w
+(when) 2198 6248 w
+(a) 2491 6248 w
+(complete) 2582 6248 w
+(command) 3064 6248 w
+(is) 3578 6248 w
+(assembled,) 3694 6248 w
+(invoking) 4279 6248 w
+(a) 4730 6248 w
+(top-) 4821 6248 w
+(down) 720 6368 w
+(executor.) 1019 6368 w
+(Most) 1544 6368 w
+(editors) 1815 6368 w
+(instead) 2189 6368 w
+(employ) 2578 6368 w
+(a) 2969 6368 w
+(simple) 3061 6368 w
+(character-at-a-time) 3419 6368 w
+(lexical) 4441 6368 w
+(scan\255) 4788 6368 w
+(ner.) 720 6488 w
+(Use) 976 6488 w
+(of) 1185 6488 w
+(a) 1316 6488 w
+(parser) 1404 6488 w
+(makes) 1744 6488 w
+(it) 2090 6488 w
+(easy) 2189 6488 w
+(and unambiguous to detect when a command is com\255) 2436 6488 w
+(plete,) 720 6608 w
+(which) 1051 6608 w
+(has) 1390 6608 w
+(two) 1616 6608 w
+(advantages.) 1849 6608 w
+(First,) 2519 6608 w
+(escape) 2821 6608 w
+(conventions) 3211 6608 w
+(such) 3853 6608 w
+(as) 4137 6608 w
+(backslashes) 4301 6608 w
+(to) 4942 6608 w
+(quote) 720 6728 w
+(multiple-line) 1057 6728 w
+(commands) 1747 6728 w
+(are) 2334 6728 w
+(unnecessary;) 2544 6728 w
+(if) 3265 6728 w
+(the) 3389 6728 w
+(command) 3602 6728 w
+(isn) 4138 6728 w
+10 /LucidaSansUnicode20 f
+(\031) 4280 6728 w
+10 /LucidaSansUnicode00 f
+(t) 4312 6728 w
+(finished,) 4407 6728 w
+(the) 4885 6728 w
+(parser) 720 6848 w
+(keeps) 1064 6848 w
+(reading.) 1385 6848 w
+(For) 1854 6848 w
+(example,) 2047 6848 w
+(a) 2529 6848 w
+(multiple-line) 2621 6848 w
+(append) 3290 6848 w
+(driven) 3689 6848 w
+(by) 4029 6848 w
+(an) 4181 6848 w
+10 /LucidaTypewriter f
+(x) 4335 6848 w
+10 /LucidaSansUnicode00 f
+(command) 4444 6848 w
+(is) 4960 6848 w
+(straightforward:) 720 6968 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 14 14
+%%Page: 15 15
+/saveobj save def
+mark
+15 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 15 \255) 2752 480 w
+9 /LucidaTypewriter f
+(x/.*\\n/) 920 830 w
+(g/Peter/) 1440 830 w
+(a) 2025 830 w
+(one) 920 940 w
+(line) 1180 940 w
+(about) 1505 940 w
+(Peter) 1895 940 w
+(another) 920 1050 w
+(line) 1440 1050 w
+(about) 1765 1050 w
+(Peter) 2155 1050 w
+(.) 920 1160 w
+10 /LucidaSansUnicode00 f
+(Other UNIX editors would require a backslash after all but the last line.) 720 1340 w
+(The other advantage is specific to the two-process) 970 1496 w
+(structure) 3469 1496 w
+(of) 3940 1496 w
+10 /LucidaTypewriter f
+(sam) 4071 1496 w
+10 /LucidaSansUnicode00 f
+(.) 4287 1496 w
+(The) 4384 1496 w
+(host) 4598 1496 w
+(pro\255) 4842 1496 w
+(cess) 720 1616 w
+(must) 977 1616 w
+(decide) 1268 1616 w
+(when) 1634 1616 w
+(a) 1939 1616 w
+(command) 2042 1616 w
+(is) 2568 1616 w
+(completed) 2696 1616 w
+(so) 3253 1616 w
+(the) 3413 1616 w
+(command) 3615 1616 w
+(interpreter) 4140 1616 w
+(can) 4706 1616 w
+(be) 4921 1616 w
+(called.) 720 1736 w
+(This) 1115 1736 w
+(problem) 1368 1736 w
+(is) 1822 1736 w
+(easily) 1950 1736 w
+(resolved) 2271 1736 w
+(by) 2729 1736 w
+(having) 2893 1736 w
+(the) 3264 1736 w
+(lexical) 3468 1736 w
+(analyzer) 3827 1736 w
+(read) 4283 1736 w
+(the) 4547 1736 w
+(single) 4751 1736 w
+(stream) 720 1856 w
+(of) 1090 1856 w
+(events) 1225 1856 w
+(from) 1576 1856 w
+(the) 1845 1856 w
+(terminal,) 2037 1856 w
+(directly) 2508 1856 w
+(executing) 2902 1856 w
+(all) 3414 1856 w
+(typing) 3563 1856 w
+(and) 3904 1856 w
+(mouse) 4120 1856 w
+(commands,) 4479 1856 w
+(but) 720 1976 w
+(passing) 920 1976 w
+(to) 1331 1976 w
+(the) 1467 1976 w
+(parser) 1660 1976 w
+(characters) 2005 1976 w
+(typed) 2543 1976 w
+(to) 2852 1976 w
+(the) 2989 1976 w
+10 /LucidaTypewriter f
+(sam) 3183 1976 w
+10 /LucidaSansUnicode00 f
+(command) 3438 1976 w
+(window.) 3955 1976 w
+(This) 4427 1976 w
+(scheme) 4671 1976 w
+(is) 720 2096 w
+(slightly) 843 2096 w
+(complicated) 1237 2096 w
+(by) 1868 2096 w
+(the) 2026 2096 w
+(availability) 2224 2096 w
+(of) 2781 2096 w
+(cut-and-paste) 2921 2096 w
+(editing) 3671 2096 w
+(in) 4051 2096 w
+(the) 4184 2096 w
+10 /LucidaTypewriter f
+(sam) 4381 2096 w
+10 /LucidaSansUnicode00 f
+(window,) 4639 2096 w
+(but that difficulty is resolved by) 720 2216 w
+(applying) 2296 2216 w
+(the) 2744 2216 w
+(rules) 2932 2216 w
+(used) 3204 2216 w
+(in) 3469 2216 w
+10 /LucidaTypewriter f
+(mux) 3593 2216 w
+10 /LucidaSansUnicode00 f
+(:) 3809 2216 w
+(when) 3874 2216 w
+(a) 4164 2216 w
+(newline) 4252 2216 w
+(is) 4656 2216 w
+(typed) 4769 2216 w
+(to) 720 2336 w
+(the) 866 2336 w
+10 /LucidaTypewriter f
+(sam) 1069 2336 w
+10 /LucidaSansUnicode00 f
+(window,) 1332 2336 w
+(all) 1780 2336 w
+(text) 1940 2336 w
+(between) 2178 2336 w
+(the) 2632 2336 w
+(newline) 2834 2336 w
+(and) 3252 2336 w
+(the) 3479 2336 w
+(previously) 3681 2336 w
+(typed) 4224 2336 w
+(newline) 4542 2336 w
+(is) 4960 2336 w
+(made) 720 2456 w
+(available) 1029 2456 w
+(to) 1494 2456 w
+(the) 1634 2456 w
+(parser.) 1831 2456 w
+(This) 2244 2456 w
+(permits) 2491 2456 w
+(arbitrary) 2903 2456 w
+(editing) 3359 2456 w
+(to) 3739 2456 w
+(be) 3879 2456 w
+(done) 4040 2456 w
+(to) 4324 2456 w
+(a) 4464 2456 w
+(command) 4562 2456 w
+(before typing newline and thereby requesting execution.) 720 2576 w
+(The) 970 2732 w
+(parser) 1190 2732 w
+(is) 1536 2732 w
+(driven) 1655 2732 w
+(by) 1997 2732 w
+(a) 2151 2732 w
+(table) 2245 2732 w
+(because) 2524 2732 w
+(the) 2957 2732 w
+(syntax) 3151 2732 w
+(of) 3508 2732 w
+(addresses) 3645 2732 w
+(and) 4171 2732 w
+(commands) 4391 2732 w
+(is) 4960 2732 w
+(regular) 720 2852 w
+(enough) 1121 2852 w
+(to) 1541 2852 w
+(be) 1694 2852 w
+(encoded) 1868 2852 w
+(compactly.) 2335 2852 w
+(There) 2945 2852 w
+(are) 3277 2852 w
+(few) 3483 2852 w
+(special) 3707 2852 w
+(cases,) 4095 2852 w
+(such) 4445 2852 w
+(as) 4725 2852 w
+(the) 4885 2852 w
+(replacement) 720 2972 w
+(text) 1383 2972 w
+(in) 1638 2972 w
+(a) 1793 2972 w
+(substitution,) 1912 2972 w
+(so) 2589 2972 w
+(the) 2765 2972 w
+(syntax) 2984 2972 w
+(of) 3366 2972 w
+(almost) 3528 2972 w
+(all) 3918 2972 w
+(commands) 4095 2972 w
+(can) 4688 2972 w
+(be) 4921 2972 w
+(encoded) 720 3092 w
+(with) 1174 3092 w
+(a) 1421 3092 w
+(few) 1518 3092 w
+(flags.) 1730 3092 w
+(These) 2070 3092 w
+(include) 2400 3092 w
+(whether) 2794 3092 w
+(the) 3227 3092 w
+(command) 3424 3092 w
+(allows) 3944 3092 w
+(an) 4288 3092 w
+(address) 4447 3092 w
+(\(for) 4868 3092 w
+(example,) 720 3212 w
+10 /LucidaTypewriter f
+(e) 1204 3212 w
+10 /LucidaSansUnicode00 f
+(does) 1315 3212 w
+(not\),) 1585 3212 w
+(whether) 1849 3212 w
+(it) 2279 3212 w
+(takes) 2384 3212 w
+(a) 2680 3212 w
+(regular) 2774 3212 w
+(expression) 3159 3212 w
+(\(as) 3729 3212 w
+(in) 3907 3212 w
+10 /LucidaTypewriter f
+(x) 4037 3212 w
+10 /LucidaSansUnicode00 f
+(and) 4148 3212 w
+10 /LucidaTypewriter f
+(s) 4367 3212 w
+10 /LucidaSansUnicode00 f
+(\),) 4439 3212 w
+(whether) 4543 3212 w
+(it) 4974 3212 w
+(takes) 720 3332 w
+(replacement) 1014 3332 w
+(text) 1650 3332 w
+(\(as) 1878 3332 w
+(in) 2054 3332 w
+10 /LucidaTypewriter f
+(c) 2182 3332 w
+10 /LucidaSansUnicode00 f
+(or) 2291 3332 w
+10 /LucidaTypewriter f
+(i) 2430 3332 w
+10 /LucidaSansUnicode00 f
+(\),) 2502 3332 w
+(which) 2604 3332 w
+(may) 2922 3332 w
+(be) 3158 3332 w
+(multi-line,) 3313 3332 w
+(and) 3865 3332 w
+(so) 4081 3332 w
+(on.) 4229 3332 w
+(The) 4452 3332 w
+(internal) 4669 3332 w
+(syntax) 720 3452 w
+(of) 1074 3452 w
+(regular) 1208 3452 w
+(expressions) 1591 3452 w
+(is) 2210 3452 w
+(handled) 2327 3452 w
+(by) 2754 3452 w
+(a) 2906 3452 w
+(separate) 2998 3452 w
+(parser;) 3449 3452 w
+(a) 3825 3452 w
+(regular) 3917 3452 w
+(expression) 4300 3452 w
+(is) 4868 3452 w
+(a) 4985 3452 w
+(leaf) 720 3572 w
+(of) 930 3572 w
+(the) 1061 3572 w
+(command parse tree.) 1249 3572 w
+(Regular expressions are discussed fully in the next sec\255) 2343 3572 w
+(tion.) 720 3692 w
+(The) 970 3848 w
+(parser) 1194 3848 w
+(table) 1544 3848 w
+(also) 1828 3848 w
+(has) 2068 3848 w
+(information) 2280 3848 w
+(about) 2891 3848 w
+(defaults,) 3213 3848 w
+(so) 3679 3848 w
+(the) 3835 3848 w
+(interpreter) 4034 3848 w
+(is) 4597 3848 w
+(always) 4721 3848 w
+(called) 720 3968 w
+(with) 1042 3968 w
+(a) 1286 3968 w
+(complete) 1380 3968 w
+(tree.) 1865 3968 w
+(For) 2158 3968 w
+(example,) 2353 3968 w
+(the) 2837 3968 w
+(parser) 3031 3968 w
+(fills) 3377 3968 w
+(in) 3591 3968 w
+(the) 3721 3968 w
+(implicit) 3915 3968 w
+10 /LucidaTypewriter f
+(0) 4314 3968 w
+10 /LucidaSansUnicode00 f
+(and) 4425 3968 w
+10 /LucidaTypewriter f
+($) 4644 3968 w
+10 /LucidaSansUnicode00 f
+(in) 4755 3968 w
+(the) 4885 3968 w
+(abbreviated) 720 4088 w
+(address) 1328 4088 w
+10 /LucidaTypewriter f
+(,) 1746 4088 w
+10 /LucidaSansUnicode00 f
+(\(comma\),) 1856 4088 w
+(inserts) 2345 4088 w
+(a) 2710 4088 w
+10 /LucidaTypewriter f
+(+) 2803 4088 w
+10 /LucidaSansUnicode00 f
+(to) 2913 4088 w
+(the) 3049 4088 w
+(left) 3242 4088 w
+(of) 3439 4088 w
+(an) 3575 4088 w
+(unadorned) 3730 4088 w
+(regular) 4294 4088 w
+(expres\255) 4679 4088 w
+(sion) 720 4208 w
+(in) 967 4208 w
+(an) 1102 4208 w
+(address,) 1263 4208 w
+(and) 1719 4208 w
+(provides) 1943 4208 w
+(the) 2403 4208 w
+(usual) 2602 4208 w
+(default) 2905 4208 w
+(address) 3287 4208 w
+10 /LucidaTypewriter f
+(.) 3710 4208 w
+10 /LucidaSansUnicode00 f
+(\(dot\)) 3825 4208 w
+(for) 4095 4208 w
+(commands) 4277 4208 w
+(that) 4849 4208 w
+(expect an address but are not given one.) 720 4328 w
+(Once) 970 4484 w
+(a) 1252 4484 w
+(complete) 1342 4484 w
+(command) 1823 4484 w
+(is) 2336 4484 w
+(parsed,) 2452 4484 w
+(the) 2849 4484 w
+(evaluation) 3040 4484 w
+(is) 3574 4484 w
+(easy.) 3690 4484 w
+(The) 4004 4484 w
+(address) 4221 4484 w
+(is) 4637 4484 w
+(evalu\255) 4753 4484 w
+(ated) 720 4604 w
+(left-to-right) 967 4604 w
+(starting) 1606 4604 w
+(from) 2015 4604 w
+(the) 2282 4604 w
+(value) 2472 4604 w
+(of) 2761 4604 w
+(dot,) 2894 4604 w
+(with) 3122 4604 w
+(a) 3362 4604 w
+(mostly) 3452 4604 w
+(ordinary) 3810 4604 w
+(expression) 4249 4604 w
+(eval\255) 4815 4604 w
+(uator.) 720 4724 w
+(Addresses,) 1074 4724 w
+(like) 1641 4724 w
+(many) 1847 4724 w
+(of) 2143 4724 w
+(the) 2275 4724 w
+(data) 2464 4724 w
+(structures) 2708 4724 w
+(in) 3231 4724 w
+10 /LucidaTypewriter f
+(sam) 3356 4724 w
+10 /LucidaSansUnicode00 f
+(,) 3572 4724 w
+(are) 3638 4724 w
+(held) 3824 4724 w
+(in) 4068 4724 w
+(a) 4193 4724 w
+(C) 4283 4724 w
+(structure) 4387 4724 w
+(and) 4860 4724 w
+(passed around by value:) 720 4844 w
+9 /LucidaTypewriter f
+(typedef) 920 5014 w
+(long) 1440 5014 w
+(Posn;) 1765 5014 w
+(/*) 2350 5014 w
+(Position) 2545 5014 w
+(in) 3130 5014 w
+(a) 3325 5014 w
+(file) 3455 5014 w
+(*/) 3780 5014 w
+(typedef) 920 5124 w
+(struct) 1440 5124 w
+(Range{) 1895 5124 w
+(Posn) 1440 5234 w
+(p1,) 1960 5234 w
+(p2;) 2220 5234 w
+(}Range;) 920 5344 w
+(typedef) 920 5454 w
+(struct) 1440 5454 w
+(Address{) 1895 5454 w
+(Range) 1440 5564 w
+(r;) 1960 5564 w
+(File) 1440 5674 w
+(*f;) 1960 5674 w
+(}Address;) 920 5784 w
+10 /LucidaSansUnicode00 f
+(An) 720 5964 w
+(address) 895 5964 w
+(is) 1319 5964 w
+(encoded) 1443 5964 w
+(as) 1899 5964 w
+(a) 2049 5964 w
+(substring) 2148 5964 w
+(\(character) 2650 5964 w
+(positions) 3176 5964 w
+10 /LucidaTypewriter f
+(p1) 3664 5964 w
+10 /LucidaSansUnicode00 f
+(to) 3852 5964 w
+10 /LucidaTypewriter f
+(p2) 3994 5964 w
+10 /LucidaSansUnicode00 f
+(\)) 4138 5964 w
+(in) 4215 5964 w
+(a) 4350 5964 w
+(file) 4449 5964 w
+10 /LucidaTypewriter f
+(f) 4645 5964 w
+10 /LucidaSansUnicode00 f
+(.) 4717 5964 w
+(\(The) 4826 5964 w
+(data type) 720 6084 w
+10 /LucidaTypewriter f
+(File) 1202 6084 w
+10 /LucidaSansUnicode00 f
+(is described in detail below.\)) 1522 6084 w
+(The) 970 6240 w
+(address) 1197 6240 w
+(interpreter) 1623 6240 w
+(is) 2188 6240 w
+(an) 2314 6240 w
+10 /LucidaTypewriter f
+(Address) 2477 6240 w
+10 /LucidaSansUnicode00 f
+(-valued) 2981 6240 w
+(function) 3402 6240 w
+(that) 3849 6240 w
+(traverses) 4086 6240 w
+(the) 4572 6240 w
+(parse) 4774 6240 w
+(tree describing an address \(the parse tree for the address has type) 720 6360 w
+10 /LucidaTypewriter f
+(Addrtree) 3992 6360 w
+10 /LucidaSansUnicode00 f
+(\):) 4568 6360 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 15 15
+%%Page: 16 16
+/saveobj save def
+mark
+16 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 16 \255) 2752 480 w
+9 /LucidaTypewriter f
+(Address) 920 830 w
+(address\(ap,) 920 940 w
+(a,) 1700 940 w
+(sign\)) 1895 940 w
+(Addrtree) 1440 1050 w
+(*ap;) 2025 1050 w
+(Address) 1440 1160 w
+(a;) 1960 1160 w
+(int) 1440 1270 w
+(sign;) 1700 1270 w
+({) 920 1380 w
+(Address) 1440 1490 w
+(a2;) 1960 1490 w
+(do) 1440 1600 w
+(switch\(ap->type\){) 1960 1710 w
+(case) 1960 1820 w
+('.':) 2285 1820 w
+(a=a.f->dot;) 2480 1930 w
+(break;) 2480 2040 w
+(case) 1960 2150 w
+('$':) 2285 2150 w
+(a.r.p1=a.r.p2=a.f->nbytes;) 2480 2260 w
+(break;) 2480 2370 w
+(case) 1960 2480 w
+('"':) 2285 2480 w
+(a=matchfile\(a,) 2480 2590 w
+(ap->aregexp\)->dot;) 3455 2590 w
+(break;) 2480 2700 w
+(case) 1960 2810 w
+(',':) 2285 2810 w
+(a2=address\(ap->right,) 2480 2920 w
+(a,) 3910 2920 w
+(0\);) 4105 2920 w
+(a=address\(ap->left,) 2480 3030 w
+(a,) 3780 3030 w
+(0\);) 3975 3030 w
+(if\(a.f!=a2.f) 2480 3140 w
+(||) 3325 3140 w
+(a2.r.p2<a.r.p1\)) 3520 3140 w
+(error\(Eorder\);) 3000 3250 w
+(a.r.p2=a2.r.p2;) 2480 3360 w
+(return) 2480 3470 w
+(a;) 2935 3470 w
+(/*) 1960 3580 w
+(and) 2155 3580 w
+(so) 2415 3580 w
+(on) 2610 3580 w
+(*/) 2805 3580 w
+(}) 1960 3690 w
+(while\(\(ap=ap->right\)!=0\);) 1440 3800 w
+(return) 1440 3910 w
+(a;) 1895 3910 w
+(}) 920 4020 w
+10 /LucidaSansUnicode00 f
+(Throughout,) 970 4236 w
+(errors) 1615 4236 w
+(are) 1947 4236 w
+(handled) 2140 4236 w
+(by) 2571 4236 w
+(a) 2727 4236 w
+(non-local) 2823 4236 w
+10 /LucidaTypewriter f
+(goto) 3332 4236 w
+10 /LucidaSansUnicode00 f
+(\(a) 3661 4236 w
+10 /LucidaTypewriter f
+(setjmp/longjmp) 3790 4236 w
+10 /LucidaSansUnicode00 f
+(in) 4839 4236 w
+(C) 4971 4236 w
+(terminology\)) 720 4356 w
+(hidden) 1380 4356 w
+(in) 1759 4356 w
+(a) 1894 4356 w
+(routine) 1993 4356 w
+(called) 2385 4356 w
+10 /LucidaTypewriter f
+(error) 2712 4356 w
+10 /LucidaSansUnicode00 f
+(that) 3115 4356 w
+(immediately) 3349 4356 w
+(aborts) 3984 4356 w
+(the) 4335 4356 w
+(execution,) 4533 4356 w
+(retracts) 720 4476 w
+(any) 1124 4476 w
+(partially) 1328 4476 w
+(made) 1753 4476 w
+(changes) 2055 4476 w
+(\(see) 2489 4476 w
+(the) 2720 4476 w
+(section) 2910 4476 w
+(below) 3293 4476 w
+(on) 3615 4476 w
+10 /LucidaSansUnicode20 f
+(\030) 3774 4476 w
+10 /LucidaSansUnicode00 f
+(undoing) 3806 4476 w
+10 /LucidaSansUnicode20 f
+(\031) 4207 4476 w
+10 /LucidaSansUnicode00 f
+(\),) 4239 4476 w
+(and) 4340 4476 w
+(returns) 4556 4476 w
+(to) 4942 4476 w
+(the) 720 4596 w
+(top) 926 4596 w
+(level) 1138 4596 w
+(of) 1411 4596 w
+(the) 1560 4596 w
+(parser.) 1766 4596 w
+(The) 2188 4596 w
+(argument) 2420 4596 w
+(to) 2939 4596 w
+10 /LucidaTypewriter f
+(error) 3088 4596 w
+10 /LucidaSansUnicode00 f
+(is) 3499 4596 w
+(an) 3630 4596 w
+(enumeration) 3797 4596 w
+(type) 4461 4596 w
+(that) 4719 4596 w
+(is) 4960 4596 w
+(translated) 720 4716 w
+(to) 1255 4716 w
+(a) 1402 4716 w
+(terse) 1506 4716 w
+(but) 1796 4716 w
+(possibly) 2007 4716 w
+(helpful) 2455 4716 w
+(message) 2842 4716 w
+(such) 3315 4716 w
+(as) 3590 4716 w
+10 /LucidaSansUnicode20 f
+(\030) 3745 4716 w
+10 /LucidaSansUnicode00 f
+(?addresses) 3777 4716 w
+(out) 4356 4716 w
+(of) 4566 4716 w
+(order.) 4714 4716 w
+10 /LucidaSansUnicode20 f
+(\031) 5008 4716 w
+10 /LucidaSansUnicode00 f
+(Very) 720 4836 w
+(common) 982 4836 w
+(messages) 1451 4836 w
+(are) 1974 4836 w
+(kept) 2174 4836 w
+(short;) 2436 4836 w
+(for) 2768 4836 w
+(example) 2955 4836 w
+(the) 3416 4836 w
+(message) 3619 4836 w
+(for) 4090 4836 w
+(a) 4276 4836 w
+(failed) 4378 4836 w
+(regular) 4694 4836 w
+(expression search is ) 720 4956 w
+10 /LucidaSansUnicode20 f
+(\030) 1743 4956 w
+10 /LucidaSansUnicode00 f
+(?search.) 1775 4956 w
+10 /LucidaSansUnicode20 f
+(\031) 2165 4956 w
+10 /LucidaSansUnicode00 f
+(Character) 970 5112 w
+(addresses) 1478 5112 w
+(such) 2006 5112 w
+(as) 2273 5112 w
+10 /LucidaTypewriter f
+(#3) 2420 5112 w
+10 /LucidaSansUnicode00 f
+(are) 2605 5112 w
+(trivial) 2798 5112 w
+(to) 3111 5112 w
+(implement,) 3250 5112 w
+(as) 3841 5112 w
+(the) 3988 5112 w
+10 /LucidaTypewriter f
+(File) 4184 5112 w
+10 /LucidaSansUnicode00 f
+(data) 4513 5112 w
+(struc\255) 4765 5112 w
+(ture) 720 5232 w
+(is) 956 5232 w
+(accessible) 1076 5232 w
+(by) 1608 5232 w
+(character) 1763 5232 w
+(number.) 2252 5232 w
+(However,) 2733 5232 w
+10 /LucidaTypewriter f
+(sam) 3222 5232 w
+10 /LucidaSansUnicode00 f
+(keeps) 3477 5232 w
+(no) 3800 5232 w
+(information) 3962 5232 w
+(about) 4568 5232 w
+(the) 4885 5232 w
+(position) 720 5352 w
+(of) 1151 5352 w
+(newlines) 1287 5352 w
+10 /LucidaSansUnicode20 f
+(\024) 1747 5352 w
+10 /LucidaSansUnicode00 f
+(it) 1885 5352 w
+(is) 1989 5352 w
+(too) 2107 5352 w
+(expensive) 2305 5352 w
+(to) 2830 5352 w
+(track) 2967 5352 w
+(dynamically) 3248 5352 w
+10 /LucidaSansUnicode20 f
+(\024) 3857 5352 w
+10 /LucidaSansUnicode00 f
+(so) 3996 5352 w
+(line) 4147 5352 w
+(addresses) 4362 5352 w
+(are) 4888 5352 w
+(computed) 720 5472 w
+(by) 1240 5472 w
+(reading) 1389 5472 w
+(the) 1791 5472 w
+(file,) 1979 5472 w
+(counting) 2195 5472 w
+(newlines.) 2654 5472 w
+(Except) 3173 5472 w
+(in) 3528 5472 w
+(very) 3652 5472 w
+(large) 3886 5472 w
+(files,) 4162 5472 w
+(this) 4429 5472 w
+(has) 4641 5472 w
+(pro\255) 4842 5472 w
+(ven) 720 5592 w
+(acceptable:) 926 5592 w
+(file) 1510 5592 w
+(access) 1698 5592 w
+(is) 2050 5592 w
+(fast) 2167 5592 w
+(enough) 2384 5592 w
+(to) 2786 5592 w
+(make) 2921 5592 w
+(the) 3220 5592 w
+(technique) 3412 5592 w
+(practical,) 3927 5592 w
+(and) 4407 5592 w
+(lines) 4624 5592 w
+(are) 4888 5592 w
+(not central to the structure of the command language.) 720 5712 w
+(The) 970 5868 w
+(command) 1207 5868 w
+(interpreter,) 1741 5868 w
+(called) 2348 5868 w
+10 /LucidaTypewriter f
+(cmdexec) 2687 5868 w
+10 /LucidaSansUnicode00 f
+(,) 3191 5868 w
+(is) 3279 5868 w
+(also) 3415 5868 w
+(straightforward.) 3667 5868 w
+(The) 4536 5868 w
+(parse) 4774 5868 w
+(table) 720 5988 w
+(includes) 1024 5988 w
+(a) 1491 5988 w
+(function) 1610 5988 w
+(to) 2075 5988 w
+(call) 2237 5988 w
+(to) 2464 5988 w
+(interpret) 2625 5988 w
+(a) 3110 5988 w
+(particular) 3228 5988 w
+(command.) 3754 5988 w
+(That) 4359 5988 w
+(function) 4639 5988 w
+(receives) 720 6108 w
+(as) 1154 6108 w
+(arguments) 1302 6108 w
+(the) 1863 6108 w
+(calculated) 2060 6108 w
+(address) 2590 6108 w
+(for) 3012 6108 w
+(the) 3193 6108 w
+(command) 3390 6108 w
+(and) 3910 6108 w
+(the) 4132 6108 w
+(command) 4329 6108 w
+(tree) 4850 6108 w
+(\(of) 720 6228 w
+(type) 893 6228 w
+10 /LucidaTypewriter f
+(Cmdtree) 1143 6228 w
+10 /LucidaSansUnicode00 f
+(\),) 1647 6228 w
+(which) 1754 6228 w
+(may) 2077 6228 w
+(contain) 2319 6228 w
+(information) 2718 6228 w
+(such) 3327 6228 w
+(as) 3594 6228 w
+(the) 3741 6228 w
+(subtree) 3937 6228 w
+(for) 4344 6228 w
+(compound) 4524 6228 w
+(commands.) 720 6348 w
+(Here, for example, is the function for the) 1345 6348 w
+10 /LucidaTypewriter f
+(g) 3374 6348 w
+10 /LucidaSansUnicode00 f
+(and) 3478 6348 w
+10 /LucidaTypewriter f
+(v) 3690 6348 w
+10 /LucidaSansUnicode00 f
+(commands:) 3794 6348 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 16 16
+%%Page: 17 17
+/saveobj save def
+mark
+17 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 17 \255) 2752 480 w
+9 /LucidaTypewriter f
+(int) 920 830 w
+(g_cmd\(a,) 920 940 w
+(cp\)) 1505 940 w
+(Address) 1440 1050 w
+(a;) 1960 1050 w
+(Cmdtree) 1440 1160 w
+(*cp;) 1960 1160 w
+({) 920 1270 w
+(compile\(cp->regexp\);) 1440 1380 w
+(if\(execute\(a.f,) 1440 1490 w
+(a.r.p1,) 2480 1490 w
+(a.r.p2\)!=\(cp->cmdchar=='v'\)\){) 3000 1490 w
+(a.f->dot=a;) 1960 1600 w
+(return) 1960 1710 w
+(cmdexec\(a,) 2415 1710 w
+(cp->subcmd\);) 3130 1710 w
+(}) 1440 1820 w
+(return) 1440 1930 w
+(TRUE;) 1895 1930 w
+(/*) 2480 1930 w
+(cause) 2675 1930 w
+(execution) 3065 1930 w
+(to) 3715 1930 w
+(continue) 3910 1930 w
+(*/) 4495 1930 w
+(}) 920 2040 w
+10 /LucidaSansUnicode00 f
+(\() 720 2220 w
+10 /LucidaTypewriter f
+(Compile) 753 2220 w
+10 /LucidaSansUnicode00 f
+(and) 1289 2220 w
+10 /LucidaTypewriter f
+(execute) 1501 2220 w
+10 /LucidaSansUnicode00 f
+(are part of the) 2037 2220 w
+(regular) 2767 2220 w
+(expression) 3146 2220 w
+(code,) 3710 2220 w
+(described) 4006 2220 w
+(in) 4512 2220 w
+(the) 4636 2220 w
+(next) 4824 2220 w
+(section.\)) 720 2340 w
+(Because) 1209 2340 w
+(the) 1643 2340 w
+(parser) 1843 2340 w
+(and) 2195 2340 w
+(the) 2420 2340 w
+10 /LucidaTypewriter f
+(File) 2620 2340 w
+10 /LucidaSansUnicode00 f
+(data) 2953 2340 w
+(structure) 3208 2340 w
+(do) 3690 2340 w
+(most) 3858 2340 w
+(of) 4144 2340 w
+(the) 4286 2340 w
+(work,) 4485 2340 w
+(most) 4798 2340 w
+(commands are similarly brief.) 720 2460 w
+10 /LucidaSans-Demi f
+(Regular expressions) 720 2700 w
+10 /LucidaSansUnicode00 f
+(The) 720 2856 w
+(regular) 939 2856 w
+(expression) 1323 2856 w
+(code) 1892 2856 w
+(in) 2161 2856 w
+10 /LucidaTypewriter f
+(sam) 2290 2856 w
+10 /LucidaSansUnicode00 f
+(is) 2544 2856 w
+(an) 2662 2856 w
+(interpreted,) 2817 2856 w
+(rather) 3428 2856 w
+(than) 3758 2856 w
+(compiled) 4012 2856 w
+(on-the-fly,) 4496 2856 w
+(implementation) 720 2976 w
+(of) 1547 2976 w
+(Thompson) 1710 2976 w
+10 /LucidaSansUnicode20 f
+(\031) 2226 2976 w
+10 /LucidaSansUnicode00 f
+(s) 2258 2976 w
+(non-deterministic) 2374 2976 w
+(finite) 3316 2976 w
+(automaton) 3631 2976 w
+(algorithm.) 4218 2976 w
+6 /LucidaSansUnicode00 f
+(12) 4719 2926 w
+10 /LucidaSansUnicode00 f
+(The) 4859 2976 w
+(syntax) 720 3096 w
+(and) 1076 3096 w
+(semantics) 1295 3096 w
+(of) 1819 3096 w
+(the) 1956 3096 w
+(expressions) 2150 3096 w
+(are) 2771 3096 w
+(as) 2962 3096 w
+(in) 3107 3096 w
+(the) 3237 3096 w
+(UNIX) 3431 3096 w
+(program) 3705 3096 w
+10 /LucidaTypewriter f
+(egrep) 4160 3096 w
+10 /LucidaSansUnicode00 f
+(,) 4520 3096 w
+(including) 4591 3096 w
+(alternation,) 720 3216 w
+(closures,) 1310 3216 w
+(character) 1778 3216 w
+(classes,) 2261 3216 w
+(and) 2671 3216 w
+(so) 2885 3216 w
+(on.) 3031 3216 w
+(The) 3252 3216 w
+(only) 3467 3216 w
+(changes) 3705 3216 w
+(in) 4138 3216 w
+(the) 4263 3216 w
+(notation) 4451 3216 w
+(are) 4888 3216 w
+(two) 720 3336 w
+(additions:) 928 3336 w
+10 /LucidaTypewriter f
+(\\n) 1443 3336 w
+10 /LucidaSansUnicode00 f
+(is) 1620 3336 w
+(translated) 1734 3336 w
+(to,) 2254 3336 w
+(and) 2418 3336 w
+(matches,) 2632 3336 w
+(a) 3103 3336 w
+(newline) 3192 3336 w
+(character,) 3597 3336 w
+(and) 4112 3336 w
+10 /LucidaTypewriter f
+(@) 4326 3336 w
+10 /LucidaSansUnicode00 f
+(matches) 4432 3336 w
+(any) 4871 3336 w
+(character.) 720 3456 w
+(In) 1286 3456 w
+10 /LucidaTypewriter f
+(egrep) 1430 3456 w
+10 /LucidaSansUnicode00 f
+(,) 1790 3456 w
+(the) 1875 3456 w
+(character) 2082 3456 w
+10 /LucidaTypewriter f
+(.) 2583 3456 w
+10 /LucidaSansUnicode00 f
+(matches) 2707 3456 w
+(any) 3164 3456 w
+(character) 3385 3456 w
+(except) 3886 3456 w
+(newline,) 4262 3456 w
+(and) 4717 3456 w
+(in) 4949 3456 w
+10 /LucidaTypewriter f
+(sam) 720 3576 w
+10 /LucidaSansUnicode00 f
+(the) 980 3576 w
+(same) 1179 3576 w
+(rule) 1478 3576 w
+(seemed) 1710 3576 w
+(safest,) 2129 3576 w
+(to) 2492 3576 w
+(prevent) 2634 3576 w
+(idioms) 3045 3576 w
+(like) 3415 3576 w
+10 /LucidaTypewriter f
+(.*) 3631 3576 w
+10 /LucidaSansUnicode00 f
+(from) 3819 3576 w
+(spanning) 4095 3576 w
+(newlines.) 4586 3576 w
+10 /LucidaTypewriter f
+(Egrep) 720 3696 w
+10 /LucidaSansUnicode00 f
+(expressions) 1117 3696 w
+(are) 1736 3696 w
+(arguably) 1924 3696 w
+(too) 2379 3696 w
+(complicated) 2574 3696 w
+(for) 3198 3696 w
+(an) 3373 3696 w
+(interactive) 3526 3696 w
+(editor) 4067 3696 w
+10 /LucidaSansUnicode20 f
+(\024) 4390 3696 w
+10 /LucidaSansUnicode00 f
+(certainly) 4526 3696 w
+(it) 4974 3696 w
+(would) 720 3816 w
+(make) 1059 3816 w
+(sense) 1368 3816 w
+(if) 1691 3816 w
+(all) 1804 3816 w
+(the) 1964 3816 w
+(special) 2166 3816 w
+(characters) 2547 3816 w
+(were) 3094 3816 w
+(two-character) 3371 3816 w
+(sequences,) 4101 3816 w
+(so) 4689 3816 w
+(that) 4849 3816 w
+(most) 720 3936 w
+(of) 998 3936 w
+(the) 1132 3936 w
+(punctuation) 1323 3936 w
+(characters) 1940 3936 w
+(wouldn) 2476 3936 w
+10 /LucidaSansUnicode20 f
+(\031) 2830 3936 w
+10 /LucidaSansUnicode00 f
+(t) 2862 3936 w
+(have) 2935 3936 w
+(peculiar) 3196 3936 w
+(meanings) 3618 3936 w
+10 /LucidaSansUnicode20 f
+(\024) 4124 3936 w
+10 /LucidaSansUnicode00 f
+(but) 4259 3936 w
+(for) 4456 3936 w
+(an) 4630 3936 w
+(inter\255) 4782 3936 w
+(esting) 720 4056 w
+(command) 1060 4056 w
+(language,) 1581 4056 w
+(full) 2099 4056 w
+(regular) 2299 4056 w
+(expressions) 2688 4056 w
+(are) 3313 4056 w
+(necessary,) 3508 4056 w
+(and) 4058 4056 w
+10 /LucidaTypewriter f
+(egrep) 4282 4056 w
+10 /LucidaSansUnicode00 f
+(defines) 4686 4056 w
+(the) 720 4176 w
+(full) 921 4176 w
+(regular) 1124 4176 w
+(expression) 1516 4176 w
+(syntax) 2093 4176 w
+(for) 2457 4176 w
+(UNIX) 2642 4176 w
+(programs.) 2923 4176 w
+(Also,) 3500 4176 w
+(it) 3788 4176 w
+(seemed) 3900 4176 w
+(superfluous) 4321 4176 w
+(to) 4942 4176 w
+(define) 720 4296 w
+(a) 1056 4296 w
+(new) 1144 4296 w
+(syntax,) 1372 4296 w
+(since) 1755 4296 w
+(various) 2037 4296 w
+(UNIX) 2421 4296 w
+(programs) 2689 4296 w
+(\() 3189 4296 w
+10 /LucidaTypewriter f
+(ed) 3222 4296 w
+10 /LucidaSansUnicode00 f
+(,) 3366 4296 w
+10 /LucidaTypewriter f
+(egrep) 3431 4296 w
+10 /LucidaSansUnicode00 f
+(and) 3824 4296 w
+10 /LucidaTypewriter f
+(vi) 4037 4296 w
+10 /LucidaSansUnicode00 f
+(\)) 4181 4296 w
+(define) 4248 4296 w
+(too) 4585 4296 w
+(many) 4778 4296 w
+(already.) 720 4416 w
+(The) 970 4572 w
+(expressions) 1188 4572 w
+(are) 1807 4572 w
+(compiled) 1996 4572 w
+(by) 2479 4572 w
+(a) 2632 4572 w
+(routine,) 2725 4572 w
+10 /LucidaTypewriter f
+(compile) 3143 4572 w
+10 /LucidaSansUnicode00 f
+(,) 3647 4572 w
+(that) 3717 4572 w
+(generates) 3946 4572 w
+(the) 4460 4572 w
+(descrip\255) 4653 4572 w
+(tion) 720 4692 w
+(of) 951 4692 w
+(the) 1091 4692 w
+(non-deterministic) 1288 4692 w
+(finite) 2207 4692 w
+(state) 2499 4692 w
+(machine.) 2776 4692 w
+(A) 3289 4692 w
+(second) 3399 4692 w
+(routine,) 3784 4692 w
+10 /LucidaTypewriter f
+(execute) 4205 4692 w
+10 /LucidaSansUnicode00 f
+(,) 4709 4692 w
+(inter\255) 4782 4692 w
+(prets) 720 4812 w
+(the) 1012 4812 w
+(machine) 1211 4812 w
+(to) 1663 4812 w
+(generate) 1805 4812 w
+(the) 2274 4812 w
+(leftmost-longest) 2473 4812 w
+(match) 3334 4812 w
+(of) 3676 4812 w
+(the) 3819 4812 w
+(expression) 4019 4812 w
+(in) 4595 4812 w
+(a) 4731 4812 w
+(sub\255) 4831 4812 w
+(string) 720 4932 w
+(of) 1042 4932 w
+(the) 1180 4932 w
+(file.) 1375 4932 w
+(The) 1630 4932 w
+(algorithm) 1851 4932 w
+(is) 2360 4932 w
+(described) 2479 4932 w
+(elsewhere.) 2991 4932 w
+6 /LucidaSansUnicode00 f
+(12,13) 3507 4882 w
+10 /LucidaTypewriter f
+(Execute) 3717 4932 w
+10 /LucidaSansUnicode00 f
+(reports) 4260 4932 w
+(whether) 4649 4932 w
+(a) 720 5052 w
+(match) 840 5052 w
+(was) 1203 5052 w
+(found,) 1451 5052 w
+(and) 1833 5052 w
+(sets) 2078 5052 w
+(a) 2338 5052 w
+(global) 2458 5052 w
+(variable,) 2823 5052 w
+(of) 3301 5052 w
+(type) 3465 5052 w
+10 /LucidaTypewriter f
+(Range) 3739 5052 w
+10 /LucidaSansUnicode00 f
+(,) 4099 5052 w
+(to) 4197 5052 w
+(the) 4361 5052 w
+(substring) 4582 5052 w
+(matched.) 720 5172 w
+(A) 970 5328 w
+(trick) 1083 5328 w
+(is) 1343 5328 w
+(required) 1467 5328 w
+(to) 1922 5328 w
+(evaluate) 2064 5328 w
+(the) 2510 5328 w
+(expression) 2709 5328 w
+(in) 3284 5328 w
+(reverse,) 3419 5328 w
+(such) 3848 5328 w
+(as) 4118 5328 w
+(when) 4269 5328 w
+(searching) 4571 5328 w
+(backwards for an expression.) 720 5448 w
+(For example,) 2213 5448 w
+9 /LucidaTypewriter f
+(-/P.*r/) 920 5618 w
+10 /LucidaSansUnicode00 f
+(looks) 720 5798 w
+(backwards) 1021 5798 w
+(through) 1576 5798 w
+(the) 2004 5798 w
+(file) 2200 5798 w
+(for) 2392 5798 w
+(a) 2572 5798 w
+(match) 2668 5798 w
+(of) 3007 5798 w
+(the) 3146 5798 w
+(expression.) 3342 5798 w
+(The) 3979 5798 w
+(expression,) 4202 5798 w
+(how\255) 4807 5798 w
+(ever,) 720 5918 w
+(is) 992 5918 w
+(defined) 1107 5918 w
+(for) 1507 5918 w
+(a) 1680 5918 w
+(forward) 1769 5918 w
+(search.) 2178 5918 w
+(The) 2592 5918 w
+(solution) 2807 5918 w
+(is) 3233 5918 w
+(to) 3347 5918 w
+(construct) 3479 5918 w
+(a) 3966 5918 w
+(machine) 4055 5918 w
+(identical) 4497 5918 w
+(to) 4942 5918 w
+(the) 720 6038 w
+(machine) 908 6038 w
+(for) 1349 6038 w
+(a) 1521 6038 w
+(forward) 1609 6038 w
+(search) 2017 6038 w
+(except) 2366 6038 w
+(for) 2723 6038 w
+(a) 2895 6038 w
+(reversal) 2983 6038 w
+(of) 3397 6038 w
+(all) 3528 6038 w
+(the) 3674 6038 w
+(concatenation) 3862 6038 w
+(operators) 4574 6038 w
+(\(the) 720 6158 w
+(other) 950 6158 w
+(operators) 1249 6158 w
+(are) 1757 6158 w
+(symmetric) 1951 6158 w
+(under) 2496 6158 w
+(direction) 2822 6158 w
+(reversal\),) 3293 6158 w
+(to) 3780 6158 w
+(exchange) 3919 6158 w
+(the) 4425 6158 w
+(meaning) 4621 6158 w
+(of) 720 6278 w
+(the) 852 6278 w
+(operators) 1041 6278 w
+10 /LucidaTypewriter f
+(^) 1541 6278 w
+10 /LucidaSansUnicode00 f
+(and) 1647 6278 w
+10 /LucidaTypewriter f
+($) 1861 6278 w
+10 /LucidaSansUnicode00 f
+(,) 1933 6278 w
+(and) 1999 6278 w
+(then) 2213 6278 w
+(to) 2464 6278 w
+(read) 2596 6278 w
+(the) 2845 6278 w
+(file) 3034 6278 w
+(backwards,) 3219 6278 w
+(looking) 3800 6278 w
+(for) 4197 6278 w
+(the) 4371 6278 w
+(usual) 4561 6278 w
+(ear\255) 4855 6278 w
+(liest longest match.) 720 6398 w
+10 /LucidaTypewriter f
+(Execute) 970 6554 w
+10 /LucidaSansUnicode00 f
+(generates) 1521 6554 w
+(only) 2044 6554 w
+(one) 2295 6554 w
+(match) 2521 6554 w
+(each) 2866 6554 w
+(time) 3137 6554 w
+(it) 3399 6554 w
+(is) 3512 6554 w
+(called.) 3639 6554 w
+(To) 4033 6554 w
+(interpret) 4204 6554 w
+(looping) 4673 6554 w
+(constructs) 720 6674 w
+(such) 1269 6674 w
+(as) 1540 6674 w
+(the) 1691 6674 w
+10 /LucidaTypewriter f
+(x) 1891 6674 w
+10 /LucidaSansUnicode00 f
+(command,) 2008 6674 w
+10 /LucidaTypewriter f
+(sam) 2563 6674 w
+10 /LucidaSansUnicode00 f
+(must) 2824 6674 w
+(therefore) 3112 6674 w
+(synchronize) 3604 6674 w
+(between) 4232 6674 w
+(calls) 4683 6674 w
+(of) 4942 6674 w
+10 /LucidaTypewriter f
+(execute) 720 6794 w
+10 /LucidaSansUnicode00 f
+(to) 1260 6794 w
+(avoid) 1395 6794 w
+(problems) 1692 6794 w
+(with) 2186 6794 w
+(null) 2428 6794 w
+(matches.) 2647 6794 w
+(For) 3153 6794 w
+(example,) 3346 6794 w
+(even) 3828 6794 w
+(given) 4091 6794 w
+(the) 4389 6794 w
+(leftmost-) 4581 6794 w
+(longest) 720 6914 w
+(rule,) 1120 6914 w
+(the) 1382 6914 w
+(expression) 1578 6914 w
+10 /LucidaTypewriter f
+(a*) 2150 6914 w
+10 /LucidaSansUnicode00 f
+(matches) 2335 6914 w
+(three) 2781 6914 w
+(times) 3074 6914 w
+(in) 3381 6914 w
+(the) 3513 6914 w
+(string) 3709 6914 w
+10 /LucidaTypewriter f
+(ab) 4032 6914 w
+10 /LucidaSansUnicode00 f
+(\(the) 4217 6914 w
+(character) 4446 6914 w
+10 /LucidaTypewriter f
+(a) 4936 6914 w
+10 /LucidaSansUnicode00 f
+(,) 5008 6914 w
+(the) 720 7034 w
+(null) 914 7034 w
+(string) 1135 7034 w
+(between) 1456 7034 w
+(the) 1902 7034 w
+10 /LucidaTypewriter f
+(a) 2096 7034 w
+10 /LucidaSansUnicode00 f
+(and) 2207 7034 w
+10 /LucidaTypewriter f
+(b) 2426 7034 w
+10 /LucidaSansUnicode00 f
+(,) 2498 7034 w
+(and) 2569 7034 w
+(the) 2788 7034 w
+(final) 2982 7034 w
+(null) 3234 7034 w
+(string\).) 3456 7034 w
+(After) 3875 7034 w
+(returning) 4155 7034 w
+(a) 4647 7034 w
+(match) 4742 7034 w
+(for) 720 7154 w
+(the) 917 7154 w
+10 /LucidaTypewriter f
+(a) 1130 7154 w
+10 /LucidaSansUnicode00 f
+(,) 1202 7154 w
+10 /LucidaTypewriter f
+(sam) 1292 7154 w
+10 /LucidaSansUnicode00 f
+(must) 1566 7154 w
+(not) 1866 7154 w
+(match) 2083 7154 w
+(the) 2438 7154 w
+(null) 2650 7154 w
+(string) 2889 7154 w
+(before) 3228 7154 w
+(the) 3599 7154 w
+10 /LucidaTypewriter f
+(b) 3811 7154 w
+10 /LucidaSansUnicode00 f
+(.) 3883 7154 w
+(The) 4004 7154 w
+(algorithm) 4242 7154 w
+(starts) 4768 7154 w
+10 /LucidaTypewriter f
+(execute) 720 7274 w
+10 /LucidaSansUnicode00 f
+(at) 1259 7274 w
+(the) 1386 7274 w
+(end) 1576 7274 w
+(of) 1792 7274 w
+(its) 1925 7274 w
+(previous) 2077 7274 w
+(match,) 2527 7274 w
+(and) 2892 7274 w
+(if) 3107 7274 w
+(the) 3209 7274 w
+(match) 3400 7274 w
+(it) 3734 7274 w
+(returns) 3836 7274 w
+(is) 4222 7274 w
+(null) 4338 7274 w
+(and) 4556 7274 w
+(abuts) 4772 7274 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 17 17
+%%Page: 18 18
+/saveobj save def
+mark
+18 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 18 \255) 2752 480 w
+(the previous match, rejects the match and advances the initial position one character.) 720 840 w
+10 /LucidaSans-Demi f
+(Memory allocation) 720 1080 w
+10 /LucidaSansUnicode00 f
+(The) 720 1236 w
+(C) 946 1236 w
+(language) 1060 1236 w
+(has) 1548 1236 w
+(no) 1761 1236 w
+(memory) 1929 1236 w
+(allocation) 2370 1236 w
+(primitives,) 2884 1236 w
+(although) 3441 1236 w
+(a) 3916 1236 w
+(standard) 4016 1236 w
+(library) 4488 1236 w
+(rou\255) 4843 1236 w
+(tine,) 720 1356 w
+10 /LucidaTypewriter f
+(malloc) 977 1356 w
+10 /LucidaSansUnicode00 f
+(,) 1409 1356 w
+(provides) 1482 1356 w
+(adequate) 1938 1356 w
+(service) 2425 1356 w
+(for) 2801 1356 w
+(simple) 2980 1356 w
+(programs.) 3341 1356 w
+(For) 3912 1356 w
+(specific) 4108 1356 w
+(uses,) 4515 1356 w
+(how\255) 4807 1356 w
+(ever,) 720 1476 w
+(it) 991 1476 w
+(can) 1091 1476 w
+(be) 1293 1476 w
+(better) 1446 1476 w
+(to) 1770 1476 w
+(write) 1902 1476 w
+(a) 2176 1476 w
+(custom) 2265 1476 w
+(allocator.) 2654 1476 w
+(The) 3172 1476 w
+(allocator) 3388 1476 w
+(\(or) 3842 1476 w
+(rather,) 4012 1476 w
+(pair) 4371 1476 w
+(of) 4594 1476 w
+(alloca\255) 4727 1476 w
+(tors\)) 720 1596 w
+(described) 1008 1596 w
+(here) 1546 1596 w
+(work) 1826 1596 w
+(in) 2128 1596 w
+(both) 2283 1596 w
+(the) 2570 1596 w
+(terminal) 2789 1596 w
+(and) 3255 1596 w
+(host) 3499 1596 w
+(parts) 3774 1596 w
+(of) 4085 1596 w
+10 /LucidaTypewriter f
+(sam) 4247 1596 w
+10 /LucidaSansUnicode00 f
+(.) 4463 1596 w
+(They) 4591 1596 w
+(are) 4888 1596 w
+(designed) 720 1716 w
+(for) 1202 1716 w
+(efficient) 1381 1716 w
+(manipulation) 1815 1716 w
+(of) 2493 1716 w
+(strings,) 2632 1716 w
+(which) 3038 1716 w
+(are) 3360 1716 w
+(allocated) 3553 1716 w
+(and) 4030 1716 w
+(freed) 4251 1716 w
+(frequently) 4545 1716 w
+(and) 720 1836 w
+(vary) 943 1836 w
+(in) 1186 1836 w
+(length) 1320 1836 w
+(from) 1671 1836 w
+(essentially) 1946 1836 w
+(zero) 2496 1836 w
+(to) 2754 1836 w
+(32) 2895 1836 w
+(Kbytes) 3064 1836 w
+(\(very) 3431 1836 w
+(large) 3707 1836 w
+(strings) 3992 1836 w
+(are) 4367 1836 w
+(written) 4561 1836 w
+(to) 4942 1836 w
+(disc\).) 720 1956 w
+(More) 1066 1956 w
+(important,) 1365 1956 w
+(strings) 1930 1956 w
+(may) 2318 1956 w
+(be) 2573 1956 w
+(large) 2747 1956 w
+(and) 3045 1956 w
+(change) 3280 1956 w
+(size) 3683 1956 w
+(often,) 3931 1956 w
+(so) 4271 1956 w
+(to) 4438 1956 w
+(minimize) 4592 1956 w
+(memory) 720 2076 w
+(usage) 1164 2076 w
+(it) 1498 2076 w
+(is) 1612 2076 w
+(helpful) 1740 2076 w
+(to) 2126 2076 w
+(reclaim) 2272 2076 w
+(and) 2674 2076 w
+(to) 2902 2076 w
+(coalesce) 3048 2076 w
+(the) 3505 2076 w
+(unused) 3707 2076 w
+(portions) 4110 2076 w
+(of) 4562 2076 w
+(strings) 4707 2076 w
+(when they are truncated.) 720 2196 w
+(Objects) 970 2352 w
+(to) 1379 2352 w
+(be) 1520 2352 w
+(allocated) 1682 2352 w
+(in) 2161 2352 w
+10 /LucidaTypewriter f
+(sam) 2295 2352 w
+10 /LucidaSansUnicode00 f
+(are) 2554 2352 w
+(of) 2749 2352 w
+(two) 2890 2352 w
+(flavors:) 3108 2352 w
+(the) 3509 2352 w
+(first) 3707 2352 w
+(is) 3945 2352 w
+(C) 4068 2352 w
+10 /LucidaTypewriter f
+(structs) 4180 2352 w
+10 /LucidaSansUnicode00 f
+(,) 4684 2352 w
+(which) 4759 2352 w
+(are) 720 2472 w
+(small) 913 2472 w
+(and) 1211 2472 w
+(often) 1432 2472 w
+(addressed) 1726 2472 w
+(by) 2265 2472 w
+(pointer) 2420 2472 w
+(variables;) 2809 2472 w
+(the) 3312 2472 w
+(second) 3507 2472 w
+(is) 3891 2472 w
+(variable-sized) 4011 2472 w
+(arrays) 4745 2472 w
+(of) 720 2592 w
+(characters) 856 2592 w
+(or) 1394 2592 w
+(integers) 1534 2592 w
+(whose) 1966 2592 w
+(base) 2311 2592 w
+(pointer) 2574 2592 w
+(is) 2961 2592 w
+(always) 3079 2592 w
+(used) 3436 2592 w
+(to) 3706 2592 w
+(access) 3842 2592 w
+(them.) 4195 2592 w
+(The) 4545 2592 w
+(mem\255) 4765 2592 w
+(ory) 720 2712 w
+(allocator) 919 2712 w
+(in) 1383 2712 w
+10 /LucidaTypewriter f
+(sam) 1519 2712 w
+10 /LucidaSansUnicode00 f
+(is) 1780 2712 w
+(therefore) 1905 2712 w
+(in) 2397 2712 w
+(two) 2532 2712 w
+(parts:) 2751 2712 w
+(first,) 3074 2712 w
+(a) 3345 2712 w
+(traditional) 3444 2712 w
+(first-fit) 3986 2712 w
+(allocator) 4386 2712 w
+(that) 4849 2712 w
+(provides) 720 2832 w
+(fixed) 1174 2832 w
+(storage) 1458 2832 w
+(for) 1859 2832 w
+10 /LucidaTypewriter f
+(structs) 2036 2832 w
+10 /LucidaSansUnicode00 f
+(;) 2540 2832 w
+(and) 2610 2832 w
+(second,) 2828 2832 w
+(a) 3242 2832 w
+(garbage-compacting) 3336 2832 w
+(allocator) 4391 2832 w
+(that) 4849 2832 w
+(reduces) 720 2952 w
+(storage) 1141 2952 w
+(overhead) 1545 2952 w
+(for) 2032 2952 w
+(variable-sized) 2212 2952 w
+(objects,) 2947 2952 w
+(at) 3369 2952 w
+(the) 3502 2952 w
+(cost) 3698 2952 w
+(of) 3939 2952 w
+(some) 4078 2952 w
+(bookkeeping.) 4379 2952 w
+(The) 720 3072 w
+(two) 969 3072 w
+(types) 1212 3072 w
+(of) 1539 3072 w
+(objects) 1705 3072 w
+(are) 2122 3072 w
+(allocated) 2342 3072 w
+(from) 2846 3072 w
+(adjoining) 3147 3072 w
+(arenas,) 3669 3072 w
+(with) 4090 3072 w
+(the) 4364 3072 w
+(garbage-) 4588 3072 w
+(compacting) 720 3192 w
+(allocator) 1329 3192 w
+(controlling) 1793 3192 w
+(the) 2362 3192 w
+(arena) 2561 3192 w
+(with) 2874 3192 w
+(higher) 3123 3192 w
+(addresses.) 3479 3192 w
+(Separating) 4074 3192 w
+(into) 4632 3192 w
+(two) 4865 3192 w
+(arenas) 720 3312 w
+(simplifies) 1094 3312 w
+(compaction) 1616 3312 w
+(and) 2234 3312 w
+(prevents) 2469 3312 w
+(fragmentation) 2942 3312 w
+(due) 3684 3312 w
+(to) 3920 3312 w
+(immovable) 4073 3312 w
+(objects.) 4659 3312 w
+(The) 720 3432 w
+(access) 954 3432 w
+(rules) 1322 3432 w
+(for) 1614 3432 w
+(garbage-compactable) 1806 3432 w
+(objects) 2925 3432 w
+(\(discussed) 3327 3432 w
+(in) 3890 3432 w
+(the) 4034 3432 w
+(next) 4242 3432 w
+(paragraph\)) 4510 3432 w
+(allow) 720 3552 w
+(them) 1031 3552 w
+(to) 1339 3552 w
+(be) 1497 3552 w
+(relocated,) 1676 3552 w
+(so) 2217 3552 w
+(when) 2389 3552 w
+(the) 2706 3552 w
+(first-fit) 2921 3552 w
+(arena) 3337 3552 w
+(needs) 3666 3552 w
+(space,) 4015 3552 w
+(it) 4384 3552 w
+(moves) 4511 3552 w
+(the) 4885 3552 w
+(garbage-compacted) 720 3672 w
+(arena) 1740 3672 w
+(to) 2047 3672 w
+(higher) 2183 3672 w
+(addresses) 2533 3672 w
+(to) 3058 3672 w
+(make) 3194 3672 w
+(room.) 3494 3672 w
+(Storage) 3852 3672 w
+(is) 4256 3672 w
+(therefore) 4374 3672 w
+(cre\255) 4859 3672 w
+(ated) 720 3792 w
+(only) 965 3792 w
+(at) 1203 3792 w
+(successively) 1329 3792 w
+(higher) 1954 3792 w
+(addresses,) 2300 3792 w
+(either) 2853 3792 w
+(when) 3169 3792 w
+(more) 3461 3792 w
+(garbage-compacted) 3747 3792 w
+(space) 4764 3792 w
+(is needed or when the first-fit arena pushes up the other arena.) 720 3912 w
+(Objects) 970 4068 w
+(that) 1371 4068 w
+(may) 1598 4068 w
+(be) 1834 4068 w
+(compacted) 1989 4068 w
+(declare) 2555 4068 w
+(to) 2942 4068 w
+(the) 3076 4068 w
+(allocator) 3267 4068 w
+(a) 3722 4068 w
+(cell) 3813 4068 w
+(that) 4014 4068 w
+(is) 4241 4068 w
+(guaranteed) 4357 4068 w
+(to) 4942 4068 w
+(be) 720 4188 w
+(the) 884 4188 w
+(sole) 1084 4188 w
+(repository) 1326 4188 w
+(of) 1863 4188 w
+(the) 2006 4188 w
+(address) 2206 4188 w
+(of) 2631 4188 w
+(the) 2774 4188 w
+(object) 2974 4188 w
+(whenever) 3317 4188 w
+(a) 3824 4188 w
+(compaction) 3923 4188 w
+(can) 4530 4188 w
+(occur.) 4742 4188 w
+(The) 720 4308 w
+(compactor) 946 4308 w
+(can) 1504 4308 w
+(then) 1717 4308 w
+(update) 1979 4308 w
+(the) 2360 4308 w
+(address) 2560 4308 w
+(when) 2985 4308 w
+(the) 3287 4308 w
+(object) 3488 4308 w
+(is) 3832 4308 w
+(moved.) 3958 4308 w
+(For) 4393 4308 w
+(example,) 4595 4308 w
+(the implementation of type) 720 4428 w
+10 /LucidaTypewriter f
+(List) 2071 4428 w
+10 /LucidaSansUnicode00 f
+(\(really a variable-length array\) is:) 2391 4428 w
+9 /LucidaTypewriter f
+(typedef) 920 4598 w
+(struct) 1440 4598 w
+(List{) 1895 4598 w
+(int) 1440 4708 w
+(nused;) 1960 4708 w
+(long) 1440 4818 w
+(*ptr;) 1960 4818 w
+(}List;) 920 4928 w
+10 /LucidaSansUnicode00 f
+(The) 720 5108 w
+10 /LucidaTypewriter f
+(ptr) 945 5108 w
+10 /LucidaSansUnicode00 f
+(cell) 1205 5108 w
+(must) 1414 5108 w
+(always) 1701 5108 w
+(be) 2064 5108 w
+(used) 2228 5108 w
+(directly,) 2505 5108 w
+(and) 2940 5108 w
+(never) 3165 5108 w
+(copied.) 3477 5108 w
+(When) 3909 5108 w
+(a) 4220 5108 w
+10 /LucidaTypewriter f
+(List) 4320 5108 w
+10 /LucidaSansUnicode00 f
+(is) 4653 5108 w
+(to) 4778 5108 w
+(be) 4921 5108 w
+(created) 720 5228 w
+(the) 1112 5228 w
+10 /LucidaTypewriter f
+(List) 1300 5228 w
+10 /LucidaSansUnicode00 f
+(structure) 1621 5228 w
+(is) 2092 5228 w
+(allocated) 2205 5228 w
+(in) 2674 5228 w
+(the) 2798 5228 w
+(ordinary) 2986 5228 w
+(first-fit arena and its) 3423 5228 w
+10 /LucidaTypewriter f
+(ptr) 4473 5228 w
+10 /LucidaSansUnicode00 f
+(is allo\255) 4721 5228 w
+(cated) 720 5348 w
+(in) 1018 5348 w
+(the) 1145 5348 w
+(garbage-compacted) 1336 5348 w
+(arena.) 2354 5348 w
+(A) 2723 5348 w
+(similar) 2828 5348 w
+(data) 3191 5348 w
+(type) 3437 5348 w
+(for) 3681 5348 w
+(strings,) 3856 5348 w
+(called) 4257 5348 w
+10 /LucidaTypewriter f
+(String) 4576 5348 w
+10 /LucidaSansUnicode00 f
+(,) 5008 5348 w
+(stores variable-length character arrays of up to 32767 elements.) 720 5468 w
+(A) 970 5624 w
+(related) 1075 5624 w
+(matter) 1448 5624 w
+(of) 1803 5624 w
+(programming) 1937 5624 w
+(style:) 2635 5624 w
+10 /LucidaTypewriter f
+(sam) 2928 5624 w
+10 /LucidaSansUnicode00 f
+(frequently) 3180 5624 w
+(passes) 3712 5624 w
+(structures) 4076 5624 w
+(by) 4602 5624 w
+(value,) 4754 5624 w
+(which) 720 5744 w
+(simplifies) 1048 5744 w
+(the) 1562 5744 w
+(code.) 1764 5744 w
+(Traditionally,) 2106 5744 w
+(C) 2790 5744 w
+(programs) 2906 5744 w
+(have) 3420 5744 w
+(passed) 3692 5744 w
+(structures) 4078 5744 w
+(by) 4614 5744 w
+(refer\255) 4776 5744 w
+(ence,) 720 5864 w
+(but) 1022 5864 w
+(implicit) 1229 5864 w
+(allocation) 1634 5864 w
+(on) 2148 5864 w
+(the) 2316 5864 w
+(stack) 2516 5864 w
+(is) 2813 5864 w
+(easier) 2938 5864 w
+(to) 3271 5864 w
+(use.) 3414 5864 w
+(Structure) 3693 5864 w
+(passing) 4180 5864 w
+(is) 4599 5864 w
+(a) 4725 5864 w
+(rela\255) 4826 5864 w
+(tively) 720 5984 w
+(new) 1012 5984 w
+(feature) 1244 5984 w
+(of) 1625 5984 w
+(C) 1760 5984 w
+(\(it) 1866 5984 w
+(is) 2002 5984 w
+(not) 2119 5984 w
+(in) 2315 5984 w
+(the) 2442 5984 w
+(standard) 2633 5984 w
+(reference) 3096 5984 w
+(manual) 3588 5984 w
+(for) 3980 5984 w
+(C) 4155 5984 w
+6 /LucidaSansUnicode00 f
+(14) 4224 5934 w
+10 /LucidaSansUnicode00 f
+(\),) 4300 5984 w
+(and) 4401 5984 w
+(is) 4617 5984 w
+(poorly) 4733 5984 w
+(supported in most) 720 6104 w
+(commercial) 1647 6104 w
+(C) 2239 6104 w
+(compilers.) 2341 6104 w
+(It) 2912 6104 w
+10 /LucidaSansUnicode20 f
+(\031) 2978 6104 w
+10 /LucidaSansUnicode00 f
+(s) 3010 6104 w
+(convenient) 3094 6104 w
+(and) 3655 6104 w
+(expressive,) 3868 6104 w
+(though,) 4449 6104 w
+(and) 4860 6104 w
+(simplifies) 720 6224 w
+(memory) 1244 6224 w
+(management) 1696 6224 w
+(by) 2383 6224 w
+(avoiding) 2554 6224 w
+(the) 3023 6224 w
+(allocator) 3234 6224 w
+(altogether) 3709 6224 w
+(and) 4261 6224 w
+(eliminating) 4497 6224 w
+(pointer aliases.) 720 6344 w
+10 /LucidaSans-Demi f
+(Data structures for manipulating files) 720 6584 w
+10 /LucidaSansUnicode00 f
+(Experience) 720 6740 w
+(with) 1289 6740 w
+10 /LucidaTypewriter f
+(jim) 1534 6740 w
+10 /LucidaSansUnicode00 f
+(showed) 1790 6740 w
+(that) 2200 6740 w
+(the) 2431 6740 w
+(requirements) 2626 6740 w
+(of) 3313 6740 w
+(the) 3451 6740 w
+(file) 3646 6740 w
+(data) 3837 6740 w
+(structure) 4088 6740 w
+(were) 4567 6740 w
+(few,) 4838 6740 w
+(but) 720 6860 w
+(strict.) 926 6860 w
+(First,) 1279 6860 w
+(files) 1566 6860 w
+(need) 1811 6860 w
+(to) 2091 6860 w
+(be) 2232 6860 w
+(read) 2394 6860 w
+(and) 2652 6860 w
+(written) 2875 6860 w
+(quickly;) 3257 6860 w
+(adding) 3676 6860 w
+(a) 4053 6860 w
+(fresh) 4151 6860 w
+(file) 4441 6860 w
+(must) 4635 6860 w
+(be) 4921 6860 w
+(painless.) 720 6980 w
+(Second,) 1221 6980 w
+(the) 1641 6980 w
+(implementation) 1837 6980 w
+(must) 2640 6980 w
+(place) 2925 6980 w
+(no) 3221 6980 w
+(arbitrary) 3386 6980 w
+(upper) 3842 6980 w
+(limit) 4169 6980 w
+(on) 4428 6980 w
+(the) 4593 6980 w
+(num\255) 4790 6980 w
+(ber) 720 7100 w
+(or) 915 7100 w
+(sizes) 1052 7100 w
+(of) 1331 7100 w
+(files.) 1464 7100 w
+(\(It) 1765 7100 w
+(should) 1899 7100 w
+(be) 2261 7100 w
+(practical) 2414 7100 w
+(to) 2859 7100 w
+(edit) 2991 7100 w
+(many) 3210 7100 w
+(files,) 3506 7100 w
+(and) 3774 7100 w
+(files) 3988 7100 w
+(up) 4224 7100 w
+(to) 4383 7100 w
+(megabytes) 4515 7100 w
+(in) 720 7220 w
+(length) 846 7220 w
+(should) 1189 7220 w
+(be) 1552 7220 w
+(handled) 1707 7220 w
+(gracefully.\)) 2133 7220 w
+(This) 2740 7220 w
+(implies) 2981 7220 w
+(that) 3367 7220 w
+(files) 3594 7220 w
+(be) 3832 7220 w
+(stored) 3987 7220 w
+(on) 4332 7220 w
+(disc,) 4491 7220 w
+(not) 4753 7220 w
+(in) 4949 7220 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 18 18
+%%Page: 19 19
+/saveobj save def
+mark
+19 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 19 \255) 2752 480 w
+(main) 720 840 w
+(memory.) 997 840 w
+(\(Aficionados) 1495 840 w
+(of) 2134 840 w
+(virtual) 2270 840 w
+(memory) 2613 840 w
+(may) 3046 840 w
+(argue) 3283 840 w
+(otherwise,) 3596 840 w
+(but) 4135 840 w
+(the) 4334 840 w
+(implemen\255) 4526 840 w
+(tation) 720 960 w
+(of) 1040 960 w
+(virtual) 1177 960 w
+(memory) 1521 960 w
+(in) 1956 960 w
+(our) 2086 960 w
+(system) 2289 960 w
+(is) 2668 960 w
+(not) 2787 960 w
+(something) 2986 960 w
+(to) 3538 960 w
+(depend) 3676 960 w
+(on) 4079 960 w
+(for) 4242 960 w
+(good) 4421 960 w
+(perfor\255) 4708 960 w
+(mance.\)) 720 1080 w
+(Third,) 1189 1080 w
+(changes) 1534 1080 w
+(to) 1988 1080 w
+(files) 2141 1080 w
+(need) 2398 1080 w
+(be) 2690 1080 w
+(made) 2864 1080 w
+(by) 3186 1080 w
+(only) 3356 1080 w
+(two) 3615 1080 w
+(primitives:) 3845 1080 w
+(deletion) 4412 1080 w
+(and) 4860 1080 w
+(insertion.) 720 1200 w
+(These) 1250 1200 w
+(are) 1576 1200 w
+(inverses) 1766 1200 w
+(of) 2202 1200 w
+(each) 2338 1200 w
+(other,) 2600 1200 w
+(which) 2927 1200 w
+(simplifies) 3247 1200 w
+(the) 3753 1200 w
+(implementation) 3947 1200 w
+(of) 4748 1200 w
+(the) 4885 1200 w
+(undo) 720 1320 w
+(operation.) 1006 1320 w
+(Finally,) 1573 1320 w
+(it) 1953 1320 w
+(must) 2057 1320 w
+(be) 2338 1320 w
+(easy) 2495 1320 w
+(and) 2747 1320 w
+(efficient) 2965 1320 w
+(to) 3397 1320 w
+(access) 3532 1320 w
+(the) 3884 1320 w
+(file,) 4076 1320 w
+(either) 4296 1320 w
+(forwards) 4614 1320 w
+(or backwards, a byte at a time.) 720 1440 w
+(The) 970 1596 w
+10 /LucidaTypewriter f
+(File) 1199 1596 w
+10 /LucidaSansUnicode00 f
+(data) 1535 1596 w
+(type) 1793 1596 w
+(is) 2049 1596 w
+(constructed) 2177 1596 w
+(from) 2797 1596 w
+(three) 3077 1596 w
+(simpler) 3377 1596 w
+(data) 3788 1596 w
+(structures) 4047 1596 w
+(that) 4585 1596 w
+(hold) 4825 1596 w
+(arrays) 720 1716 w
+(of) 1048 1716 w
+(characters.) 1179 1716 w
+(Each) 1776 1716 w
+(of) 2031 1716 w
+(these) 2162 1716 w
+(types has an insertion and deletion operator, and the) 2457 1716 w
+(insertion and deletion operators of the) 720 1836 w
+10 /LucidaTypewriter f
+(File) 2632 1836 w
+10 /LucidaSansUnicode00 f
+(type itself are constructed from them.) 2952 1836 w
+(The) 970 1992 w
+(simplest) 1192 1992 w
+(type) 1642 1992 w
+(is) 1891 1992 w
+(the) 2012 1992 w
+10 /LucidaTypewriter f
+(String) 2208 1992 w
+10 /LucidaSansUnicode00 f
+(,) 2640 1992 w
+(which) 2713 1992 w
+(is) 3035 1992 w
+(used) 3156 1992 w
+(to) 3429 1992 w
+(hold) 3568 1992 w
+(strings) 3824 1992 w
+(in) 4198 1992 w
+(main) 4331 1992 w
+(memory.) 4612 1992 w
+(The) 720 2112 w
+(code) 940 2112 w
+(that) 1210 2112 w
+(manages) 1440 2112 w
+10 /LucidaTypewriter f
+(Strings) 1913 2112 w
+10 /LucidaSansUnicode00 f
+(guarantees) 2456 2112 w
+(that) 3032 2112 w
+(they) 3262 2112 w
+(will) 3508 2112 w
+(never) 3711 2112 w
+(be) 4017 2112 w
+(longer) 4175 2112 w
+(than) 4525 2112 w
+(some) 4779 2112 w
+(moderate) 720 2232 w
+(size,) 1217 2232 w
+(and) 1477 2232 w
+(in) 1692 2232 w
+(practice) 1818 2232 w
+(they) 2236 2232 w
+(are) 2478 2232 w
+(rarely) 2665 2232 w
+(larger) 2974 2232 w
+(than) 3293 2232 w
+(8) 3544 2232 w
+(Kbytes.) 3642 2232 w
+10 /LucidaTypewriter f
+(Strings) 4065 2232 w
+10 /LucidaSansUnicode00 f
+(have) 4604 2232 w
+(two) 4865 2232 w
+(purposes:) 720 2352 w
+(they) 1240 2352 w
+(hold) 1487 2352 w
+(short) 1742 2352 w
+(strings) 2034 2352 w
+(like) 2407 2352 w
+(file) 2618 2352 w
+(names) 2808 2352 w
+(with) 3164 2352 w
+(little) 3408 2352 w
+(overhead,) 3664 2352 w
+(and) 4181 2352 w
+(because) 4400 2352 w
+(they) 4833 2352 w
+(are) 720 2472 w
+(deliberately) 909 2472 w
+(small,) 1512 2472 w
+(they) 1838 2472 w
+(are) 2082 2472 w
+(efficient) 2272 2472 w
+(to) 2704 2472 w
+(modify.) 2840 2472 w
+(They) 3277 2472 w
+(are) 3548 2472 w
+(therefore) 3738 2472 w
+(used) 4223 2472 w
+(as) 4493 2472 w
+(the) 4637 2472 w
+(data) 4830 2472 w
+(structure for in-memory caches.) 720 2592 w
+(The) 970 2748 w
+(disc) 1188 2748 w
+(copy) 1419 2748 w
+(of) 1683 2748 w
+(the) 1818 2748 w
+(file) 2010 2748 w
+(is) 2198 2748 w
+(managed) 2315 2748 w
+(by) 2798 2748 w
+(a) 2950 2748 w
+(data) 3042 2748 w
+(structure) 3289 2748 w
+(called) 3764 2748 w
+(a) 4084 2748 w
+10 /LucidaTypewriter f
+(Disc) 4177 2748 w
+10 /LucidaSansUnicode00 f
+(,) 4465 2748 w
+(which) 4535 2748 w
+(cor\255) 4854 2748 w
+(responds) 720 2868 w
+(to) 1203 2868 w
+(a) 1336 2868 w
+(temporary) 1426 2868 w
+(file.) 1960 2868 w
+(A) 2210 2868 w
+10 /LucidaTypewriter f
+(Disc) 2314 2868 w
+10 /LucidaSansUnicode00 f
+(has) 2637 2868 w
+(no) 2840 2868 w
+(storage) 2998 2868 w
+(in) 3395 2868 w
+(main) 3520 2868 w
+(memory) 3793 2868 w
+(other) 4223 2868 w
+(than) 4514 2868 w
+(book\255) 4764 2868 w
+(keeping information; the actual data being held is all on the) 720 2988 w
+(disc.) 3665 2988 w
+(To) 3956 2988 w
+(reduce) 4113 2988 w
+(the) 4475 2988 w
+(number) 4663 2988 w
+(of) 720 3108 w
+(open) 872 3108 w
+(files) 1167 3108 w
+(needed,) 1422 3108 w
+10 /LucidaTypewriter f
+(sam) 1863 3108 w
+10 /LucidaSansUnicode00 f
+(opens) 2132 3108 w
+(a) 2478 3108 w
+(dozen) 2586 3108 w
+(temporary) 2938 3108 w
+(UNIX) 3490 3108 w
+(files) 3778 3108 w
+(and) 4033 3108 w
+(multiplexes) 4266 3108 w
+(the) 4885 3108 w
+10 /LucidaTypewriter f
+(Discs) 720 3228 w
+10 /LucidaSansUnicode00 f
+(upon) 1128 3228 w
+(them.) 1424 3228 w
+(This) 1784 3228 w
+(permits) 2037 3228 w
+(many) 2455 3228 w
+(files) 2765 3228 w
+(to) 3015 3228 w
+(be) 3161 3228 w
+(edited;) 3328 3228 w
+(the) 3712 3228 w
+(entire) 3915 3228 w
+10 /LucidaTypewriter f
+(sam) 4245 3228 w
+10 /LucidaSansUnicode00 f
+(source) 4510 3228 w
+(\(48) 4881 3228 w
+(files\)) 720 3348 w
+(may) 997 3348 w
+(be) 1239 3348 w
+(edited) 1400 3348 w
+(comfortably) 1746 3348 w
+(with) 2368 3348 w
+(a) 2615 3348 w
+(single) 2712 3348 w
+(instance) 3043 3348 w
+(of) 3488 3348 w
+10 /LucidaTypewriter f
+(sam) 3628 3348 w
+10 /LucidaSansUnicode00 f
+(.) 3844 3348 w
+(Allocating) 3950 3348 w
+(one) 4476 3348 w
+(tempo\255) 4697 3348 w
+(rary) 720 3468 w
+(file) 959 3468 w
+(per) 1160 3468 w
+10 /LucidaTypewriter f
+(Disc) 1370 3468 w
+10 /LucidaSansUnicode00 f
+(would) 1708 3468 w
+(strain) 2050 3468 w
+(the) 2376 3468 w
+(operating) 2582 3468 w
+(system) 3099 3468 w
+10 /LucidaSansUnicode20 f
+(\031) 3439 3468 w
+10 /LucidaSansUnicode00 f
+(s) 3471 3468 w
+(limit) 3573 3468 w
+(on) 3841 3468 w
+(the) 4015 3468 w
+(number) 4221 3468 w
+(of) 4649 3468 w
+(open) 4798 3468 w
+(files.) 720 3588 w
+(Also,) 1041 3588 w
+(spreading) 1338 3588 w
+(the) 1875 3588 w
+(traffic) 2085 3588 w
+(among) 2426 3588 w
+(temporary) 2813 3588 w
+(files) 3366 3588 w
+(keeps) 3622 3588 w
+(the) 3960 3588 w
+(files) 4169 3588 w
+(shorter,) 4425 3588 w
+(and) 4860 3588 w
+(shorter files are more efficiently implemented by the UNIX I/O subsystem.) 720 3708 w
+(A) 970 3864 w
+10 /LucidaTypewriter f
+(Disc) 1078 3864 w
+10 /LucidaSansUnicode00 f
+(is) 1405 3864 w
+(an) 1524 3864 w
+(array) 1680 3864 w
+(of) 1964 3864 w
+(fixed-length) 2102 3864 w
+(blocks,) 2754 3864 w
+(each) 3139 3864 w
+(of) 3403 3864 w
+(which) 3541 3864 w
+(contains) 3862 3864 w
+(between) 4310 3864 w
+(1) 4757 3864 w
+(and) 4860 3864 w
+(4096) 720 3984 w
+(characters) 1013 3984 w
+(of) 1554 3984 w
+(active) 1693 3984 w
+(data.) 2013 3984 w
+(\(The) 2327 3984 w
+(block) 2581 3984 w
+(size) 2883 3984 w
+(of) 3116 3984 w
+(our) 3254 3984 w
+(UNIX) 3458 3984 w
+(file) 3733 3984 w
+(system) 3924 3984 w
+(is) 4304 3984 w
+(4096) 4424 3984 w
+(bytes.\)) 4716 3984 w
+(The) 720 4104 w
+(block) 935 4104 w
+(addresses) 1231 4104 w
+(within) 1752 4104 w
+(the) 2082 4104 w
+(temporary) 2271 4104 w
+(file) 2804 4104 w
+(and) 2989 4104 w
+(the) 3203 4104 w
+(length) 3392 4104 w
+(of) 3734 4104 w
+(each) 3866 4104 w
+(block) 4124 4104 w
+(are) 4420 4104 w
+(stored) 4606 4104 w
+(in) 4949 4104 w
+(a) 720 4224 w
+10 /LucidaTypewriter f
+(List) 818 4224 w
+10 /LucidaSansUnicode00 f
+(.) 1106 4224 w
+(When) 1213 4224 w
+(changes) 1522 4224 w
+(are) 1964 4224 w
+(made) 2159 4224 w
+(the) 2469 4224 w
+(live) 2666 4224 w
+(part) 2874 4224 w
+(of) 3112 4224 w
+(blocks) 3252 4224 w
+(may) 3607 4224 w
+(change) 3849 4224 w
+(size.) 4239 4224 w
+(Blocks) 4538 4224 w
+(are) 4888 4224 w
+(created) 720 4344 w
+(and) 1116 4344 w
+(coalesced) 1333 4344 w
+(when) 1843 4344 w
+(necessary) 2137 4344 w
+(to) 2649 4344 w
+(try) 2785 4344 w
+(to) 2953 4344 w
+(keep) 3089 4344 w
+(the) 3360 4344 w
+(sizes) 3553 4344 w
+(between) 3835 4344 w
+(2048) 4280 4344 w
+(and) 4570 4344 w
+(4096) 4788 4344 w
+(bytes.) 720 4464 w
+(An) 1079 4464 w
+(actively) 1246 4464 w
+(changing) 1643 4464 w
+(part) 2124 4464 w
+(of) 2356 4464 w
+(the) 2489 4464 w
+10 /LucidaTypewriter f
+(Disc) 2679 4464 w
+10 /LucidaSansUnicode00 f
+(therefore) 3002 4464 w
+(typically) 3484 4464 w
+(has) 3916 4464 w
+(about) 4119 4464 w
+(a) 4432 4464 w
+(kilobyte) 4522 4464 w
+(of) 4942 4464 w
+(slop) 720 4584 w
+(that) 962 4584 w
+(can) 1191 4584 w
+(be) 1397 4584 w
+(inserted) 1554 4584 w
+(or) 1987 4584 w
+(deleted) 2127 4584 w
+(without) 2525 4584 w
+(changing) 2928 4584 w
+(more) 3411 4584 w
+(than) 3700 4584 w
+(one) 3954 4584 w
+(block) 4172 4584 w
+(or) 4473 4584 w
+(affecting) 4614 4584 w
+(the) 720 4704 w
+(block) 909 4704 w
+(order.) 1205 4704 w
+(When) 1565 4704 w
+(an) 1865 4704 w
+(insertion) 2016 4704 w
+(would) 2478 4704 w
+(overflow) 2804 4704 w
+(a) 3252 4704 w
+(block,) 3341 4704 w
+(the) 3669 4704 w
+(block) 3858 4704 w
+(is) 4154 4704 w
+(split,) 4268 4704 w
+(a) 4543 4704 w
+(new) 4632 4704 w
+(one) 4861 4704 w
+(is) 720 4824 w
+(allocated) 855 4824 w
+(to) 1346 4824 w
+(receive) 1499 4824 w
+(the) 1895 4824 w
+(overflow,) 2105 4824 w
+(and) 2606 4824 w
+(the) 2841 4824 w
+(memory-resident) 3051 4824 w
+(list) 3955 4824 w
+(of) 4156 4824 w
+(blocks) 4309 4824 w
+(is) 4678 4824 w
+(rear\255) 4814 4824 w
+(ranged to reflect the insertion of the new block.) 720 4944 w
+(Obviously, going to the disc for every modification to the file is prohibitively) 970 5100 w
+(expen\255) 4709 5100 w
+(sive.) 720 5220 w
+(The) 1014 5220 w
+(data) 1237 5220 w
+(type) 1489 5220 w
+10 /LucidaTypewriter f
+(Buffer) 1739 5220 w
+10 /LucidaSansUnicode00 f
+(consists) 2213 5220 w
+(of) 2648 5220 w
+(a) 2788 5220 w
+10 /LucidaTypewriter f
+(Disc) 2885 5220 w
+10 /LucidaSansUnicode00 f
+(to) 3215 5220 w
+(hold) 3355 5220 w
+(the) 3612 5220 w
+(data) 3808 5220 w
+(and) 4059 5220 w
+(a) 4280 5220 w
+10 /LucidaTypewriter f
+(String) 4376 5220 w
+10 /LucidaSansUnicode00 f
+(that) 4849 5220 w
+(acts) 720 5340 w
+(as) 951 5340 w
+(a) 1094 5340 w
+(cache.) 1186 5340 w
+(This) 1562 5340 w
+(is) 1804 5340 w
+(the) 1921 5340 w
+(first) 2113 5340 w
+(of) 2345 5340 w
+(a) 2481 5340 w
+(series) 2574 5340 w
+(of) 2896 5340 w
+(caches) 3032 5340 w
+(throughout) 3396 5340 w
+(the) 3981 5340 w
+(data) 4174 5340 w
+(structures) 4422 5340 w
+(in) 4949 5340 w
+10 /LucidaTypewriter f
+(sam.) 720 5460 w
+10 /LucidaSansUnicode00 f
+(The) 1057 5460 w
+(caches) 1287 5460 w
+(not) 1662 5460 w
+(only) 1871 5460 w
+(improve) 2124 5460 w
+(performance,) 2568 5460 w
+(they) 3265 5460 w
+(provide) 3520 5460 w
+(a) 3933 5460 w
+(way) 4036 5460 w
+(to) 4268 5460 w
+(organize) 4414 5460 w
+(the) 4885 5460 w
+(flow) 720 5580 w
+(of) 975 5580 w
+(data,) 1124 5580 w
+(particularly) 1417 5580 w
+(in) 2012 5580 w
+(the) 2154 5580 w
+(communication) 2360 5580 w
+(between) 3157 5580 w
+(the) 3615 5580 w
+(host) 3822 5580 w
+(and) 4085 5580 w
+(terminal.) 4317 5580 w
+(This) 4835 5580 w
+(idea is developed below, in the section on communications.) 720 5700 w
+(To) 970 5856 w
+(reduce) 1144 5856 w
+(disc) 1523 5856 w
+(traffic,) 1767 5856 w
+(changes) 2136 5856 w
+(to) 2585 5856 w
+(a) 2733 5856 w
+10 /LucidaTypewriter f
+(Buffer) 2838 5856 w
+10 /LucidaSansUnicode00 f
+(are) 3320 5856 w
+(mediated) 3522 5856 w
+(by) 4024 5856 w
+(a) 4189 5856 w
+(variable-length) 4294 5856 w
+(string,) 720 5976 w
+(in) 1084 5976 w
+(memory,) 1225 5976 w
+(that) 1703 5976 w
+(acts) 1944 5976 w
+(as) 2188 5976 w
+(a) 2344 5976 w
+(cache.) 2449 5976 w
+(When) 2838 5976 w
+(an) 3154 5976 w
+(insertion) 3321 5976 w
+(or) 3799 5976 w
+(deletion) 3951 5976 w
+(is) 4393 5976 w
+(made) 4522 5976 w
+(to) 4838 5976 w
+(a) 4985 5976 w
+10 /LucidaTypewriter f
+(Buffer) 720 6096 w
+10 /LucidaSansUnicode00 f
+(,) 1152 6096 w
+(if) 1234 6096 w
+(the) 1350 6096 w
+(change) 1555 6096 w
+(can) 1953 6096 w
+(be) 2171 6096 w
+(accommodated) 2340 6096 w
+(by) 3130 6096 w
+(the) 3296 6096 w
+(cache,) 3502 6096 w
+(it) 3860 6096 w
+(is) 3977 6096 w
+(done) 4108 6096 w
+(there.) 4401 6096 w
+(If) 4768 6096 w
+(the) 4885 6096 w
+(cache) 720 6216 w
+(becomes) 1033 6216 w
+(bigger) 1502 6216 w
+(than) 1853 6216 w
+(a) 2107 6216 w
+(block) 2200 6216 w
+(because) 2500 6216 w
+(of) 2932 6216 w
+(an) 3068 6216 w
+(insertion,) 3223 6216 w
+(some) 3721 6216 w
+(of) 4019 6216 w
+(it) 4154 6216 w
+(is) 4257 6216 w
+(written) 4374 6216 w
+(to) 4750 6216 w
+(the) 4885 6216 w
+10 /LucidaTypewriter f
+(Disc) 720 6336 w
+10 /LucidaSansUnicode00 f
+(and) 1040 6336 w
+(deleted) 1253 6336 w
+(from) 1646 6336 w
+(the) 1911 6336 w
+(cache.) 2099 6336 w
+(If) 2471 6336 w
+(the) 2570 6336 w
+(change) 2758 6336 w
+(does) 3139 6336 w
+(not) 3403 6336 w
+(intersect) 3596 6336 w
+(the) 4049 6336 w
+(cache,) 4237 6336 w
+(the) 4577 6336 w
+(cache) 4765 6336 w
+(is) 720 6456 w
+(flushed.) 838 6456 w
+(The) 1300 6456 w
+(cache) 1519 6456 w
+(is) 1832 6456 w
+(only) 1950 6456 w
+(loaded) 2192 6456 w
+(at) 2557 6456 w
+(the) 2687 6456 w
+(new) 2880 6456 w
+(position) 3113 6456 w
+(if) 3544 6456 w
+(the) 3647 6456 w
+(change) 3839 6456 w
+(is) 4224 6456 w
+(smaller) 4341 6456 w
+(than) 4732 6456 w
+(a) 4985 6456 w
+(block;) 720 6576 w
+(otherwise,) 1048 6576 w
+(it) 1584 6576 w
+(is) 1684 6576 w
+(sent) 1799 6576 w
+(directly) 2040 6576 w
+(to) 2433 6576 w
+(the) 2566 6576 w
+10 /LucidaTypewriter f
+(Disc) 2756 6576 w
+10 /LucidaSansUnicode00 f
+(.) 3044 6576 w
+(This) 3143 6576 w
+(is) 3383 6576 w
+(because) 3498 6576 w
+(large) 3927 6576 w
+(changes) 4205 6576 w
+(are) 4639 6576 w
+(typi\255) 4826 6576 w
+(cally sequential, whereupon the next change is unlikely to overlap the current one.) 720 6696 w
+(A) 970 6852 w
+10 /LucidaTypewriter f
+(File) 1079 6852 w
+10 /LucidaSansUnicode00 f
+(comprises) 1407 6852 w
+(a) 1943 6852 w
+10 /LucidaTypewriter f
+(String) 2038 6852 w
+10 /LucidaSansUnicode00 f
+(to) 2510 6852 w
+(hold) 2648 6852 w
+(the) 2903 6852 w
+(file) 3098 6852 w
+(name) 3289 6852 w
+(and) 3596 6852 w
+(some) 3817 6852 w
+(ancillary) 4119 6852 w
+(data) 4563 6852 w
+(such) 4814 6852 w
+(as) 720 6972 w
+(dot) 876 6972 w
+(and) 1087 6972 w
+(the) 1317 6972 w
+(modified) 1522 6972 w
+(bit.) 2003 6972 w
+(The) 2246 6972 w
+(most) 2477 6972 w
+(important) 2768 6972 w
+(components,) 3295 6972 w
+(though,) 3973 6972 w
+(are) 4400 6972 w
+(a) 4601 6972 w
+(pair) 4705 6972 w
+(of) 4942 6972 w
+10 /LucidaTypewriter f
+(Buffers) 720 7092 w
+10 /LucidaSansUnicode00 f
+(,) 1224 7092 w
+(one) 1294 7092 w
+(called) 1511 7092 w
+(the) 1832 7092 w
+(transcript) 2025 7092 w
+(and) 2530 7092 w
+(the) 2748 7092 w
+(other) 2941 7092 w
+(the) 3236 7092 w
+(contents.) 3430 7092 w
+(Their) 3950 7092 w
+(use) 4240 7092 w
+(is) 4448 7092 w
+(described) 4567 7092 w
+(in the next section.) 720 7212 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 19 19
+%%Page: 20 20
+/saveobj save def
+mark
+20 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 20 \255) 2752 480 w
+(The) 970 840 w
+(overall) 1191 840 w
+(structure) 1554 840 w
+(is) 2032 840 w
+(shown) 2152 840 w
+(in) 2506 840 w
+(Figure) 2638 840 w
+(5.) 2983 840 w
+(Although) 3151 840 w
+(it) 3636 840 w
+(may) 3743 840 w
+(seem) 3984 840 w
+(that) 4281 840 w
+(the) 4513 840 w
+(data) 4709 840 w
+(is) 4960 840 w
+(touched) 720 960 w
+(many) 1163 960 w
+(times) 1476 960 w
+(on) 1793 960 w
+(its) 1967 960 w
+(way) 2135 960 w
+(from) 2370 960 w
+(the) 2653 960 w
+10 /LucidaTypewriter f
+(Disc) 2859 960 w
+10 /LucidaSansUnicode00 f
+(,) 3147 960 w
+(it) 3230 960 w
+(is) 3346 960 w
+(read) 3476 960 w
+(\(by) 3741 960 w
+(one) 3939 960 w
+(UNIX) 4168 960 w
+(system) 4453 960 w
+(call\)) 4843 960 w
+(directly) 720 1080 w
+(into) 1130 1080 w
+(the) 1372 1080 w
+(cache) 1580 1080 w
+(of) 1908 1080 w
+(the) 2059 1080 w
+(associated) 2267 1080 w
+10 /LucidaTypewriter f
+(Buffer) 2829 1080 w
+10 /LucidaSansUnicode00 f
+(;) 3261 1080 w
+(no) 3346 1080 w
+(extra) 3522 1080 w
+(copy) 3825 1080 w
+(is) 4105 1080 w
+(done.) 4238 1080 w
+(Similarly,) 4597 1080 w
+(when) 720 1200 w
+(flushing) 1012 1200 w
+(the) 1441 1200 w
+(cache,) 1631 1200 w
+(the) 1973 1200 w
+(text) 2163 1200 w
+(is) 2389 1200 w
+(written) 2504 1200 w
+(directly) 2878 1200 w
+(from) 3271 1200 w
+(the) 3538 1200 w
+(cache) 3728 1200 w
+(to) 4038 1200 w
+(disc.) 4170 1200 w
+(Most) 4462 1200 w
+(opera\255) 4731 1200 w
+(tions) 720 1320 w
+(act) 1002 1320 w
+(directly) 1187 1320 w
+(on) 1587 1320 w
+(the) 1752 1320 w
+(text) 1950 1320 w
+(in) 2184 1320 w
+(the) 2318 1320 w
+(cache.) 2516 1320 w
+(A) 2898 1320 w
+(principle) 3010 1320 w
+(applied) 3476 1320 w
+(throughout) 3877 1320 w
+10 /LucidaTypewriter f
+(sam) 4467 1320 w
+10 /LucidaSansUnicode00 f
+(is) 4726 1320 w
+(that) 4849 1320 w
+(the) 720 1440 w
+(fewer) 908 1440 w
+(times) 1208 1440 w
+(the) 1507 1440 w
+(data) 1695 1440 w
+(is) 1938 1440 w
+(copied,) 2051 1440 w
+(the) 2439 1440 w
+(faster) 2627 1440 w
+(the) 2937 1440 w
+(program) 3125 1440 w
+(will) 3574 1440 w
+(run) 3771 1440 w
+(\(see) 3969 1440 w
+(also) 4198 1440 w
+(the) 4427 1440 w
+(paper by) 4615 1440 w
+(Waite) 720 1560 w
+6 /LucidaSansUnicode00 f
+(15) 983 1510 w
+10 /LucidaSansUnicode00 f
+(\).) 1059 1560 w
+2908 2931 2908 2643 Dl
+2908 2643 3541 2643 Dl
+3542 2643 3542 2931 Dl
+3542 2931 2909 2931 Dl
+10 /LucidaTypewriter f
+(Disc) 3081 2807 w
+2908 3334 2908 3046 Dl
+2908 3046 3541 3046 Dl
+3542 3046 3542 3334 Dl
+3542 3334 2909 3334 Dl
+10 /LucidaSansUnicode00 f
+(temp. file) 2993 3210 w
+3225 3046 3225 2931 Dl
+1584 2931 1584 2643 Dl
+1584 2643 2217 2643 Dl
+2217 2643 2217 2931 Dl
+2217 2931 1584 2931 Dl
+10 /LucidaTypewriter f
+(Disc) 1756 2807 w
+1584 3334 1584 3046 Dl
+1584 3046 2217 3046 Dl
+2217 3046 2217 3334 Dl
+2217 3334 1584 3334 Dl
+10 /LucidaSansUnicode00 f
+(temp. file) 1668 3210 w
+1900 3046 1900 2931 Dl
+1584 2470 1584 2182 Dl
+1584 2182 2217 2182 Dl
+2217 2182 2217 2470 Dl
+2217 2470 1584 2470 Dl
+10 /LucidaTypewriter f
+(Buffer) 1684 2286 w
+10 /LucidaSansUnicode00 f
+(\(transcript\)) 1634 2406 w
+2332 2470 2332 2182 Dl
+2332 2182 2850 2182 Dl
+2851 2182 2851 2470 Dl
+2851 2470 2333 2470 Dl
+10 /LucidaTypewriter f
+(String) 2376 2286 w
+10 /LucidaSansUnicode00 f
+(\(cache\)) 2422 2406 w
+2332 2326 2217 2326 Dl
+2908 2470 2908 2182 Dl
+2908 2182 3541 2182 Dl
+3542 2182 3542 2470 Dl
+3542 2470 2909 2470 Dl
+10 /LucidaTypewriter f
+(Buffer) 3009 2286 w
+10 /LucidaSansUnicode00 f
+(\(contents\)) 2984 2406 w
+3657 2470 3657 2182 Dl
+3657 2182 4175 2182 Dl
+4176 2182 4176 2470 Dl
+4176 2470 3658 2470 Dl
+10 /LucidaTypewriter f
+(String) 3700 2286 w
+10 /LucidaSansUnicode00 f
+(\(cache\)) 3746 2406 w
+3657 2326 3542 2326 Dl
+2124 2010 2124 1722 Dl
+2124 1722 2930 1722 Dl
+2930 1722 2930 2010 Dl
+2930 2010 2124 2010 Dl
+10 /LucidaTypewriter f
+(File) 2383 1886 w
+1900 2643 1900 2471 Dl
+3225 2643 3225 2471 Dl
+1900 2182 1900 2096 Dl
+1900 2096 2260 2096 Dl
+2260 2096 2260 2010 Dl
+3225 2182 3225 2096 Dl
+3225 2096 2793 2096 Dl
+2793 2096 2793 2010 Dl
+8 /LucidaSans-Italic f
+(Figure) 720 3512 w
+(5.) 995 3512 w
+(File) 1101 3512 w
+(data) 1262 3512 w
+(structures.) 1469 3512 w
+(The) 1947 3512 w
+(temporary) 2119 3512 w
+(files) 2559 3512 w
+(are) 2746 3512 w
+(stored) 2906 3512 w
+(in) 3181 3512 w
+(the) 3285 3512 w
+(standard) 3438 3512 w
+(repository) 3822 3512 w
+(for) 4248 3512 w
+(such) 4393 3512 w
+(files) 4603 3512 w
+(on) 4791 3512 w
+(the) 4918 3512 w
+(host) 720 3612 w
+(system.) 911 3612 w
+10 /LucidaSansUnicode00 f
+(The) 970 3888 w
+(contents) 1195 3888 w
+(of) 1656 3888 w
+(a) 1798 3888 w
+10 /LucidaTypewriter f
+(File) 1897 3888 w
+10 /LucidaSansUnicode00 f
+(are) 2229 3888 w
+(accessed) 2425 3888 w
+(by) 2903 3888 w
+(a) 3062 3888 w
+(routine) 3162 3888 w
+(that) 3555 3888 w
+(copies) 3791 3888 w
+(to) 4147 3888 w
+(a) 4290 3888 w
+(buffer) 4390 3888 w
+(a) 4731 3888 w
+(sub\255) 4831 3888 w
+(string) 720 4008 w
+(of) 1038 4008 w
+(a) 1172 4008 w
+(file) 1263 4008 w
+(starting) 1450 4008 w
+(at) 1859 4008 w
+(a) 1986 4008 w
+(specified) 2076 4008 w
+(offset.) 2546 4008 w
+(To) 2924 4008 w
+(read) 3083 4008 w
+(a) 3333 4008 w
+(byte) 3423 4008 w
+(at) 3666 4008 w
+(a) 3793 4008 w
+(time,) 3883 4008 w
+(a) 4165 4008 w
+(per-) 4255 4008 w
+10 /LucidaTypewriter f
+(File) 4473 4008 w
+10 /LucidaSansUnicode00 f
+(array) 4796 4008 w
+(is) 720 4128 w
+(loaded) 836 4128 w
+(starting) 1199 4128 w
+(from) 1609 4128 w
+(a) 1877 4128 w
+(specified) 1968 4128 w
+(initial) 2439 4128 w
+(position,) 2745 4128 w
+(and) 3206 4128 w
+(bytes) 3422 4128 w
+(may) 3717 4128 w
+(then) 3954 4128 w
+(be) 4208 4128 w
+(read) 4364 4128 w
+(from) 4616 4128 w
+(the) 4885 4128 w
+(array.) 720 4248 w
+(The) 1082 4248 w
+(implementation) 1317 4248 w
+(is) 2133 4248 w
+(done) 2267 4248 w
+(by) 2563 4248 w
+(a) 2732 4248 w
+(macro) 2841 4248 w
+(similar) 3196 4248 w
+(to) 3577 4248 w
+(the) 3729 4248 w
+(C) 3937 4248 w
+(standard) 4059 4248 w
+(I/O) 4539 4248 w
+10 /LucidaTypewriter f
+(getc) 4752 4248 w
+10 /LucidaSansUnicode00 f
+(macro.) 720 4368 w
+6 /LucidaSansUnicode00 f
+(14) 1053 4318 w
+10 /LucidaSansUnicode00 f
+(Because) 1163 4368 w
+(the) 1586 4368 w
+(reading) 1775 4368 w
+(may) 2178 4368 w
+(be) 2413 4368 w
+(done) 2567 4368 w
+(at) 2844 4368 w
+(any) 2971 4368 w
+(address,) 3175 4368 w
+(a) 3622 4368 w
+(minor) 3712 4368 w
+(change) 4033 4368 w
+(to) 4416 4368 w
+(the) 4549 4368 w
+(macro) 4739 4368 w
+(allows the file to be read backwards.) 720 4488 w
+(This array is read-only; there is no) 2562 4488 w
+10 /LucidaTypewriter f
+(putc) 4279 4488 w
+10 /LucidaSansUnicode00 f
+(.) 4567 4488 w
+10 /LucidaSans-Demi f
+(Doing and undoing) 720 4728 w
+10 /LucidaTypewriter f
+(Sam) 720 4884 w
+10 /LucidaSansUnicode00 f
+(has) 984 4884 w
+(an) 1200 4884 w
+(unusual) 1365 4884 w
+(method) 1796 4884 w
+(for) 2216 4884 w
+(managing) 2403 4884 w
+(changes) 2931 4884 w
+(to) 3378 4884 w
+(files.) 3525 4884 w
+(The) 3840 4884 w
+(command) 4070 4884 w
+(language) 4597 4884 w
+(makes) 720 5004 w
+(it) 1066 5004 w
+(easy) 1165 5004 w
+(to) 1412 5004 w
+(specify) 1543 5004 w
+(multiple) 1915 5004 w
+(variable-length) 2346 5004 w
+(changes) 3125 5004 w
+(to) 3557 5004 w
+(a file millions of bytes long,) 3688 5004 w
+(and) 720 5124 w
+(such) 946 5124 w
+(changes) 1218 5124 w
+(must) 1663 5124 w
+(be) 1952 5124 w
+(made) 2117 5124 w
+(efficiently) 2430 5124 w
+(if) 2951 5124 w
+(the) 3063 5124 w
+(editor) 3264 5124 w
+(is) 3597 5124 w
+(to) 3723 5124 w
+(be) 3867 5124 w
+(practical.) 4032 5124 w
+(The) 4553 5124 w
+(usual) 4781 5124 w
+(techniques) 720 5244 w
+(for) 1304 5244 w
+(inserting) 1498 5244 w
+(and) 1981 5244 w
+(deleting) 2215 5244 w
+(strings) 2663 5244 w
+(are) 3050 5244 w
+(inadequate) 3256 5244 w
+(under) 3848 5244 w
+(these) 4186 5244 w
+(conditions.) 4502 5244 w
+(The) 720 5364 w
+10 /LucidaTypewriter f
+(Buffer) 953 5364 w
+10 /LucidaSansUnicode00 f
+(and) 1437 5364 w
+10 /LucidaTypewriter f
+(Disc) 1669 5364 w
+10 /LucidaSansUnicode00 f
+(data) 2009 5364 w
+(structures) 2271 5364 w
+(are) 2812 5364 w
+(designed) 3016 5364 w
+(for) 3510 5364 w
+(efficient) 3701 5364 w
+(random) 4147 5364 w
+(access) 4574 5364 w
+(to) 4942 5364 w
+(long) 720 5484 w
+(strings,) 972 5484 w
+(but) 1375 5484 w
+(care) 1575 5484 w
+(must) 1816 5484 w
+(be) 2097 5484 w
+(taken) 2254 5484 w
+(to) 2560 5484 w
+(avoid) 2695 5484 w
+(super-linear) 2992 5484 w
+(behavior) 3632 5484 w
+(when) 4088 5484 w
+(making) 4382 5484 w
+(many) 4778 5484 w
+(changes simultaneously.) 720 5604 w
+10 /LucidaTypewriter f
+(Sam) 970 5760 w
+10 /LucidaSansUnicode00 f
+(uses) 1221 5760 w
+(a) 1476 5760 w
+(two-pass) 1566 5760 w
+(algorithm) 2054 5760 w
+(for) 2558 5760 w
+(making) 2732 5760 w
+(changes,) 3126 5760 w
+(and) 3592 5760 w
+(treats) 3807 5760 w
+(each) 4119 5760 w
+(file) 4378 5760 w
+(as) 4564 5760 w
+(a) 4706 5760 w
+(data\255) 4797 5760 w
+(base) 720 5880 w
+(against) 992 5880 w
+(which) 1390 5880 w
+(transactions) 1718 5880 w
+(are) 2357 5880 w
+(registered.) 2555 5880 w
+(Changes) 3157 5880 w
+(are) 3620 5880 w
+(not) 3818 5880 w
+(made) 4024 5880 w
+(directly) 4337 5880 w
+(to) 4741 5880 w
+(the) 4885 5880 w
+(contents.) 720 6000 w
+(Instead,) 1238 6000 w
+(when) 1660 6000 w
+(a) 1954 6000 w
+(command) 2046 6000 w
+(is) 2561 6000 w
+(started,) 2678 6000 w
+(a) 3087 6000 w
+10 /LucidaSansUnicode20 f
+(\030) 3179 6000 w
+10 /LucidaSansUnicode00 f
+(mark) 3211 6000 w
+10 /LucidaSansUnicode20 f
+(\031) 3458 6000 w
+10 /LucidaSansUnicode00 f
+(containing) 3527 6000 w
+(a) 4075 6000 w
+(sequence) 4168 6000 w
+(number) 4663 6000 w
+(is) 720 6120 w
+(placed) 842 6120 w
+(in) 1201 6120 w
+(the) 1334 6120 w
+(transcript) 1531 6120 w
+10 /LucidaTypewriter f
+(Buffer) 2040 6120 w
+10 /LucidaSansUnicode00 f
+(,) 2472 6120 w
+(and) 2546 6120 w
+(each) 2767 6120 w
+(change) 3032 6120 w
+(made) 3421 6120 w
+(to) 3729 6120 w
+(the) 3868 6120 w
+(file,) 4064 6120 w
+(either) 4288 6120 w
+(an) 4610 6120 w
+(inser\255) 4768 6120 w
+(tion) 720 6240 w
+(or) 949 6240 w
+(deletion) 1091 6240 w
+(or) 1524 6240 w
+(a) 1666 6240 w
+(change) 1761 6240 w
+(to) 2149 6240 w
+(the) 2287 6240 w
+(file) 2482 6240 w
+(name,) 2673 6240 w
+(is) 3011 6240 w
+(appended) 3131 6240 w
+(to) 3652 6240 w
+(the) 3790 6240 w
+(end) 3985 6240 w
+(of) 4206 6240 w
+(the) 4345 6240 w
+(transcript.) 4541 6240 w
+(When) 720 6360 w
+(the) 1030 6360 w
+(command) 1228 6360 w
+(is) 1749 6360 w
+(complete,) 1872 6360 w
+(the) 2393 6360 w
+(transcript) 2591 6360 w
+(is) 3101 6360 w
+(rewound) 3224 6360 w
+(to) 3689 6360 w
+(the) 3830 6360 w
+(mark) 4028 6360 w
+(and) 4318 6360 w
+(applied) 4541 6360 w
+(to) 4942 6360 w
+(the contents.) 720 6480 w
+(One) 970 6636 w
+(reason) 1217 6636 w
+(for) 1594 6636 w
+(separating) 1784 6636 w
+(evaluation) 2346 6636 w
+(from) 2895 6636 w
+(application) 3179 6636 w
+(in) 3765 6636 w
+(this) 3908 6636 w
+(way) 4139 6636 w
+(is) 4375 6636 w
+(to) 4507 6636 w
+(simplify) 4657 6636 w
+(tracking) 720 6756 w
+(the) 1161 6756 w
+(addresses) 1362 6756 w
+(of) 1895 6756 w
+(changes) 2039 6756 w
+(made) 2484 6756 w
+(in) 2797 6756 w
+(the) 2934 6756 w
+(middle) 3135 6756 w
+(of) 3513 6756 w
+(a) 3656 6756 w
+(long) 3756 6756 w
+(sequence.) 4015 6756 w
+(The) 4581 6756 w
+(two-) 4807 6756 w
+(pass) 720 6876 w
+(algorithm) 993 6876 w
+(also) 1515 6876 w
+(allows) 1764 6876 w
+(all) 2119 6876 w
+(changes) 2285 6876 w
+(to) 2738 6876 w
+(apply) 2890 6876 w
+(to) 3206 6876 w
+(the) 3358 6876 w
+10 /LucidaSans-Italic f
+(original) 3567 6876 w
+10 /LucidaSansUnicode00 f
+(data:) 3997 6876 w
+(no) 4293 6876 w
+(change) 4470 6876 w
+(can) 4872 6876 w
+(affect) 720 6996 w
+(another) 1031 6996 w
+(change) 1443 6996 w
+(made) 1829 6996 w
+(in) 2134 6996 w
+(the) 2263 6996 w
+(same) 2456 6996 w
+(command.) 2749 6996 w
+(This) 3328 6996 w
+(is) 3570 6996 w
+(particularly) 3687 6996 w
+(important) 4268 6996 w
+(when) 4783 6996 w
+(evaluating) 720 7116 w
+(an) 1263 7116 w
+10 /LucidaTypewriter f
+(x) 1424 7116 w
+10 /LucidaSansUnicode00 f
+(command) 1540 7116 w
+(because) 2062 7116 w
+(it) 2500 7116 w
+(prevents) 2610 7116 w
+(regular) 3072 7116 w
+(expression) 3462 7116 w
+(matches) 4037 7116 w
+(from) 4487 7116 w
+(stum\255) 4764 7116 w
+(bling) 720 7236 w
+(over) 1024 7236 w
+(changes) 1293 7236 w
+(made) 1751 7236 w
+(earlier) 2077 7236 w
+(in) 2443 7236 w
+(the) 2593 7236 w
+(execution.) 2807 7236 w
+(Also,) 3405 7236 w
+(the) 3706 7236 w
+(two-pass) 3920 7236 w
+(algorithm) 4432 7236 w
+(is) 4960 7236 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 20 20
+%%Page: 21 21
+/saveobj save def
+mark
+21 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 21 \255) 2752 480 w
+(cleaner) 720 840 w
+(than) 1103 840 w
+(the) 1352 840 w
+(way) 1540 840 w
+(other) 1757 840 w
+(UNIX) 2047 840 w
+(editors) 2315 840 w
+(allow) 2686 840 w
+(changes) 2970 840 w
+(to) 3402 840 w
+(affect) 3534 840 w
+(each) 3841 840 w
+(other;) 4099 840 w
+(for) 4422 840 w
+(example,) 4595 840 w
+10 /LucidaTypewriter f
+(ed) 720 960 w
+10 /LucidaSansUnicode20 f
+(\031) 864 960 w
+10 /LucidaSansUnicode00 f
+(s) 896 960 w
+(idioms) 985 960 w
+(to) 1349 960 w
+(do) 1485 960 w
+(things) 1647 960 w
+(like) 1988 960 w
+(delete) 2198 960 w
+(every) 2533 960 w
+(other) 2827 960 w
+(line) 3121 960 w
+(depend) 3334 960 w
+(critically) 3734 960 w
+(on) 4174 960 w
+(the) 4334 960 w
+(implemen\255) 4526 960 w
+(tation.) 720 1080 w
+(Instead,) 1110 1080 w
+10 /LucidaTypewriter f
+(sam) 1540 1080 w
+10 /LucidaSansUnicode20 f
+(\031) 1756 1080 w
+10 /LucidaSansUnicode00 f
+(s) 1788 1080 w
+(simple) 1884 1080 w
+(model,) 2250 1080 w
+(in) 2629 1080 w
+(which) 2765 1080 w
+(all) 3092 1080 w
+(changes) 3251 1080 w
+(in) 3696 1080 w
+(a) 3833 1080 w
+(command) 3934 1080 w
+(occur) 4458 1080 w
+(effec\255) 4770 1080 w
+(tively simultaneously, is easy to explain and to understand.) 720 1200 w
+(The) 970 1356 w
+(records) 1189 1356 w
+(in) 1591 1356 w
+(the) 1720 1356 w
+(transcript) 1913 1356 w
+(are) 2418 1356 w
+(of) 2608 1356 w
+(the) 2744 1356 w
+(form) 2937 1356 w
+10 /LucidaSansUnicode20 f
+(\030\030) 3208 1356 w
+10 /LucidaSansUnicode00 f
+(delete) 3272 1356 w
+(substring) 3608 1356 w
+(from) 4105 1356 w
+(locations) 4376 1356 w
+(123) 4851 1356 w
+(to) 720 1476 w
+(456) 863 1476 w
+10 /LucidaSansUnicode20 f
+(\031\031) 1052 1476 w
+10 /LucidaSansUnicode00 f
+(and) 1161 1476 w
+10 /LucidaSansUnicode20 f
+(\030\030) 1386 1476 w
+10 /LucidaSansUnicode00 f
+(insert) 1450 1476 w
+(11) 1771 1476 w
+(characters) 1942 1476 w
+10 /LucidaSansUnicode20 f
+(\030) 2487 1476 w
+10 /LucidaSansUnicode00 f
+(hello) 2519 1476 w
+(there) 2801 1476 w
+10 /LucidaSansUnicode20 f
+(\031) 3053 1476 w
+10 /LucidaSansUnicode00 f
+(at) 3130 1476 w
+(location) 3267 1476 w
+(789.) 3697 1476 w
+10 /LucidaSansUnicode20 f
+(\031\031) 3918 1476 w
+10 /LucidaSansUnicode00 f
+(\(It) 4059 1476 w
+(is) 4203 1476 w
+(an) 4328 1476 w
+(error) 4490 1476 w
+(if) 4775 1476 w
+(the) 4885 1476 w
+(changes are not at monotonically greater positions through the file.\)) 720 1596 w
+(While) 4108 1596 w
+(the) 4403 1596 w
+(update) 4591 1596 w
+(is) 4960 1596 w
+(occurring,) 720 1716 w
+(these) 1251 1716 w
+(numbers) 1552 1716 w
+(must) 2019 1716 w
+(be) 2301 1716 w
+(offset) 2459 1716 w
+(by) 2777 1716 w
+(earlier) 2930 1716 w
+(changes,) 3275 1716 w
+(but) 3744 1716 w
+(that) 3944 1716 w
+(is) 4173 1716 w
+(straightforward) 4291 1716 w
+(and) 720 1836 w
+(local) 938 1836 w
+(to) 1201 1836 w
+(the) 1337 1836 w
+(update) 1530 1836 w
+(routine;) 1904 1836 w
+(moreover,) 2322 1836 w
+(all) 2853 1836 w
+(the) 3004 1836 w
+(numbers) 3197 1836 w
+(have) 3663 1836 w
+(been) 3926 1836 w
+(computed) 4201 1836 w
+(before) 4726 1836 w
+(the first is examined.) 720 1956 w
+(Treating) 970 2112 w
+(the) 1410 2112 w
+(file) 1600 2112 w
+(as) 1786 2112 w
+(a) 1927 2112 w
+(transaction) 2017 2112 w
+(system) 2593 2112 w
+(has) 2968 2112 w
+(another) 3171 2112 w
+(advantage:) 3580 2112 w
+(undo) 4144 2112 w
+(is) 4427 2112 w
+(trivial.) 4542 2112 w
+(All) 4913 2112 w
+(it) 720 2232 w
+(takes) 830 2232 w
+(is) 1131 2232 w
+(to) 1255 2232 w
+(invert) 1396 2232 w
+(the) 1716 2232 w
+(transcript) 1914 2232 w
+(after) 2424 2232 w
+(it) 2693 2232 w
+(has) 2802 2232 w
+(been) 3013 2232 w
+(implemented,) 3293 2232 w
+(converting) 4005 2232 w
+(insertions) 4561 2232 w
+(into) 720 2352 w
+(deletions) 958 2352 w
+(and) 1451 2352 w
+(vice) 1680 2352 w
+(versa,) 1917 2352 w
+(and) 2253 2352 w
+(saving) 2482 2352 w
+(them) 2842 2352 w
+(in) 3139 2352 w
+(a) 3279 2352 w
+(holding) 3383 2352 w
+10 /LucidaTypewriter f
+(Buffer) 3800 2352 w
+10 /LucidaSansUnicode00 f
+(.) 4232 2352 w
+(The) 4345 2352 w
+10 /LucidaSansUnicode20 f
+(\030) 4575 2352 w
+10 /LucidaSansUnicode00 f
+(do) 4607 2352 w
+10 /LucidaSansUnicode20 f
+(\031) 4731 2352 w
+10 /LucidaSansUnicode00 f
+(tran\255) 4812 2352 w
+(script) 720 2472 w
+(can) 1028 2472 w
+(then) 1232 2472 w
+(be) 1485 2472 w
+(deleted) 1640 2472 w
+(from) 2035 2472 w
+(the) 2302 2472 w
+(transcript) 2492 2472 w
+10 /LucidaTypewriter f
+(Buffer) 2994 2472 w
+10 /LucidaSansUnicode00 f
+(and) 3461 2472 w
+(replaced) 3676 2472 w
+(by) 4125 2472 w
+(the) 4275 2472 w
+10 /LucidaSansUnicode20 f
+(\030) 4465 2472 w
+10 /LucidaSansUnicode00 f
+(undo) 4497 2472 w
+10 /LucidaSansUnicode20 f
+(\031) 4745 2472 w
+10 /LucidaSansUnicode00 f
+(tran\255) 4812 2472 w
+(script.) 720 2592 w
+(If) 1097 2592 w
+(an) 1204 2592 w
+(undo) 1362 2592 w
+(is) 1651 2592 w
+(requested,) 1772 2592 w
+(the) 2330 2592 w
+(transcript) 2526 2592 w
+(is) 3034 2592 w
+(rewound) 3155 2592 w
+(and) 3618 2592 w
+(the) 3839 2592 w
+(undo) 4035 2592 w
+(transcript) 4325 2592 w
+(exe\255) 4834 2592 w
+(cuted.) 720 2712 w
+(Because) 1087 2712 w
+(the) 1510 2712 w
+(transcript) 1699 2712 w
+10 /LucidaTypewriter f
+(Buffer) 2200 2712 w
+10 /LucidaSansUnicode00 f
+(is) 2666 2712 w
+(not) 2780 2712 w
+(truncated) 2974 2712 w
+(after) 3472 2712 w
+(each) 3732 2712 w
+(command,) 3990 2712 w
+(it) 4534 2712 w
+(accumu\255) 4633 2712 w
+(lates) 720 2832 w
+(successive) 982 2832 w
+(changes.) 1526 2832 w
+(A) 2023 2832 w
+(sequence) 2126 2832 w
+(of) 2617 2832 w
+(undo) 2749 2832 w
+(commands) 3031 2832 w
+(can) 3594 2832 w
+(therefore) 3796 2832 w
+(back) 4277 2832 w
+(up) 4539 2832 w
+(the) 4699 2832 w
+(file) 4889 2832 w
+(arbitrarily,) 720 2952 w
+(which) 1277 2952 w
+(is) 1611 2952 w
+(more) 1744 2952 w
+(helpful) 2048 2952 w
+(than) 2439 2952 w
+(the) 2708 2952 w
+(more) 2916 2952 w
+(commonly) 3219 2952 w
+(implemented) 3773 2952 w
+(self-inverse) 4462 2952 w
+(form) 720 3072 w
+(of) 992 3072 w
+(undo.) 1130 3072 w
+(\() 1482 3072 w
+10 /LucidaTypewriter f
+(Sam) 1515 3072 w
+10 /LucidaSansUnicode00 f
+(provides) 1771 3072 w
+(no) 2227 3072 w
+(way) 2390 3072 w
+(to) 2614 3072 w
+(undo) 2753 3072 w
+(an) 3042 3072 w
+(undo,) 3200 3072 w
+(but) 3521 3072 w
+(if) 3724 3072 w
+(it) 3831 3072 w
+(were) 3938 3072 w
+(desired,) 4209 3072 w
+(it) 4641 3072 w
+(would) 4748 3072 w
+(be) 720 3192 w
+(easy) 885 3192 w
+(to) 1145 3192 w
+(provide) 1289 3192 w
+(by) 1700 3192 w
+(re-interpreting) 1861 3192 w
+(the) 2636 3192 w
+10 /LucidaSansUnicode20 f
+(\030) 2836 3192 w
+10 /LucidaSansUnicode00 f
+(do) 2868 3192 w
+10 /LucidaSansUnicode20 f
+(\031) 2992 3192 w
+10 /LucidaSansUnicode00 f
+(transcript.\)) 3069 3192 w
+(Each) 3678 3192 w
+(mark) 3945 3192 w
+(in) 4237 3192 w
+(the) 4373 3192 w
+(transcript) 4573 3192 w
+(contains) 720 3312 w
+(a) 1167 3312 w
+(sequence) 1261 3312 w
+(number) 1757 3312 w
+(and) 2173 3312 w
+(the) 2392 3312 w
+(offset) 2586 3312 w
+(into) 2904 3312 w
+(the) 3133 3312 w
+(transcript) 3328 3312 w
+(of) 3835 3312 w
+(the) 3973 3312 w
+(previous) 4168 3312 w
+(mark,) 4623 3312 w
+(to) 4942 3312 w
+(aid) 720 3432 w
+(in unwinding the transcript.) 900 3432 w
+(Marks also contain the value of dot and the modified bit) 2313 3432 w
+(so) 720 3552 w
+(these) 865 3552 w
+(can) 1160 3552 w
+(be) 1361 3552 w
+(restored) 1513 3552 w
+(easily.) 1952 3552 w
+(Undoing) 2321 3552 w
+(multiple) 2762 3552 w
+(files) 3193 3552 w
+(is) 3428 3552 w
+(easy;) 3541 3552 w
+(it) 3821 3552 w
+(merely) 3921 3552 w
+(demands) 4282 3552 w
+(undo\255) 4759 3552 w
+(ing all files whose latest change has the same sequence number as the current file.) 720 3672 w
+(Another) 970 3828 w
+(benefit) 1393 3828 w
+(of) 1768 3828 w
+(having) 1901 3828 w
+(a) 2258 3828 w
+(transcript) 2348 3828 w
+(is) 2851 3828 w
+(that) 2967 3828 w
+(errors) 3194 3828 w
+(encountered) 3521 3828 w
+(in) 4164 3828 w
+(the) 4291 3828 w
+(middle) 4482 3828 w
+(of) 4851 3828 w
+(a) 4985 3828 w
+(complicated) 720 3948 w
+(command) 1353 3948 w
+(need) 1876 3948 w
+(not) 2158 3948 w
+(leave) 2363 3948 w
+(the) 2656 3948 w
+(files) 2856 3948 w
+(in) 3103 3948 w
+(an) 3239 3948 w
+(intermediate) 3401 3948 w
+(state.) 4060 3948 w
+(By) 4405 3948 w
+(rewinding) 4559 3948 w
+(the) 720 4068 w
+(transcript) 910 4068 w
+(to) 1412 4068 w
+(the) 1545 4068 w
+(mark) 1735 4068 w
+(beginning) 2018 4068 w
+(the) 2541 4068 w
+(command,) 2732 4068 w
+(the) 3278 4068 w
+(partial) 3469 4068 w
+(command) 3814 4068 w
+(can) 4328 4068 w
+(be) 4532 4068 w
+(trivially) 4687 4068 w
+(undone.) 720 4188 w
+(When) 970 4344 w
+(the) 1277 4344 w
+(update) 1473 4344 w
+(algorithm) 1850 4344 w
+(was) 2360 4344 w
+(first) 2584 4344 w
+(implemented,) 2820 4344 w
+(it) 3530 4344 w
+(was) 3637 4344 w
+(unacceptably) 3861 4344 w
+(slow,) 4539 4344 w
+(so) 4831 4344 w
+(a) 4985 4344 w
+(cache) 720 4464 w
+(was) 1030 4464 w
+(added) 1248 4464 w
+(to) 1583 4464 w
+(coalesce) 1716 4464 w
+(nearby) 2161 4464 w
+(changes,) 2524 4464 w
+(replacing) 2989 4464 w
+(multiple) 3471 4464 w
+(small) 3903 4464 w
+(changes) 4194 4464 w
+(by) 4627 4464 w
+(a) 4776 4464 w
+(sin\255) 4865 4464 w
+(gle) 720 4584 w
+(larger) 916 4584 w
+(one.) 1249 4584 w
+(This) 1541 4584 w
+(reduced) 1795 4584 w
+(the) 2236 4584 w
+(number) 2440 4584 w
+(of) 2866 4584 w
+(insertions) 3013 4584 w
+(into) 3541 4584 w
+(the) 3780 4584 w
+(transaction) 3985 4584 w
+10 /LucidaTypewriter f
+(Buffer) 4576 4584 w
+10 /LucidaSansUnicode00 f
+(,) 5008 4584 w
+(and) 720 4704 w
+(made) 948 4704 w
+(a) 1263 4704 w
+(dramatic) 1366 4704 w
+(improvement) 1837 4704 w
+(in) 2527 4704 w
+(performance,) 2665 4704 w
+(but) 3360 4704 w
+(made) 3569 4704 w
+(it) 3883 4704 w
+(impossible) 3996 4704 w
+(to) 4568 4704 w
+(handle) 4713 4704 w
+(changes) 720 4824 w
+(in) 1159 4824 w
+(non-monotonic) 1290 4824 w
+(order) 2090 4824 w
+(in) 2392 4824 w
+(the) 2523 4824 w
+(file;) 2718 4824 w
+(the) 2941 4824 w
+(caching) 3136 4824 w
+(method) 3548 4824 w
+(only) 3960 4824 w
+(works) 4205 4824 w
+(if) 4534 4824 w
+(changes) 4641 4824 w
+(don) 720 4944 w
+10 /LucidaSansUnicode20 f
+(\031) 906 4944 w
+10 /LucidaSansUnicode00 f
+(t) 938 4944 w
+(overlap.) 1013 4944 w
+(Before) 1472 4944 w
+(the) 1819 4944 w
+(cache) 2012 4944 w
+(was) 2325 4944 w
+(added,) 2545 4944 w
+(the) 2914 4944 w
+(transaction) 3106 4944 w
+(could) 3684 4944 w
+(in) 3987 4944 w
+(principle) 4115 4944 w
+(be) 4575 4944 w
+(sorted) 4731 4944 w
+(if) 720 5064 w
+(the) 829 5064 w
+(changes) 1027 5064 w
+(were) 1469 5064 w
+(out) 1742 5064 w
+(of) 1945 5064 w
+(order,) 2086 5064 w
+(although) 2423 5064 w
+(this) 2896 5064 w
+(was) 3118 5064 w
+(never) 3344 5064 w
+(done.) 3654 5064 w
+(The) 4004 5064 w
+(current) 4229 5064 w
+(status) 4623 5064 w
+(is) 4960 5064 w
+(therefore) 720 5184 w
+(acceptable) 1212 5184 w
+(performance) 1773 5184 w
+(with) 2433 5184 w
+(a) 2682 5184 w
+(minor) 2781 5184 w
+(restriction) 3111 5184 w
+(on) 3650 5184 w
+(global) 3817 5184 w
+(changes,) 4160 5184 w
+(which) 4635 5184 w
+(is) 4960 5184 w
+(sometimes, but rarely, an annoyance.) 720 5304 w
+(The) 970 5460 w
+(update) 1184 5460 w
+(algorithm) 1553 5460 w
+(obviously) 2055 5460 w
+(paws) 2548 5460 w
+(the) 2828 5460 w
+(data) 3017 5460 w
+(more) 3261 5460 w
+(than) 3546 5460 w
+(simpler) 3796 5460 w
+(algorithms,) 4192 5460 w
+(but) 4778 5460 w
+(it) 4974 5460 w
+(is) 720 5580 w
+(not) 844 5580 w
+(prohibitively) 1048 5580 w
+(expensive;) 1695 5580 w
+(the) 2257 5580 w
+(caches) 2456 5580 w
+(help.) 2825 5580 w
+(\(The) 3142 5580 w
+(principle) 3399 5580 w
+(of) 3865 5580 w
+(avoiding) 4006 5580 w
+(copying) 4462 5580 w
+(the) 4885 5580 w
+(data) 720 5700 w
+(is) 978 5700 w
+(still) 1106 5700 w
+(honored) 1329 5700 w
+(here,) 1783 5700 w
+(although) 2078 5700 w
+(not) 2556 5700 w
+(as) 2764 5700 w
+(piously:) 2918 5700 w
+(the) 3345 5700 w
+(data) 3548 5700 w
+(is) 3807 5700 w
+(moved) 3936 5700 w
+(from) 4310 5700 w
+(contents) 4591 5700 w
+10 /LucidaSansUnicode20 f
+(\031) 5008 5700 w
+10 /LucidaSansUnicode00 f
+(cache) 720 5820 w
+(to) 1033 5820 w
+(the) 1169 5820 w
+(transcript) 1362 5820 w
+10 /LucidaSansUnicode20 f
+(\031) 1829 5820 w
+10 /LucidaSansUnicode00 f
+(s) 1861 5820 w
+(all) 1950 5820 w
+(at) 2100 5820 w
+(once) 2229 5820 w
+(and) 2496 5820 w
+(through) 2713 5820 w
+(only) 3137 5820 w
+(one) 3378 5820 w
+(internal) 3594 5820 w
+(buffer.\)) 4002 5820 w
+(Performance) 4432 5820 w
+(figures) 720 5940 w
+(confirm) 1102 5940 w
+(the) 1520 5940 w
+(efficiency.) 1719 5940 w
+(To) 2287 5940 w
+(read) 2455 5940 w
+(from) 2714 5940 w
+(a) 2990 5940 w
+(dead) 3089 5940 w
+(start) 3371 5940 w
+(a) 3637 5940 w
+(hundred) 3737 5940 w
+(kilobyte) 4191 5940 w
+(file) 4621 5940 w
+(on) 4817 5940 w
+(a) 4985 5940 w
+(VAX-11/750) 720 6060 w
+(takes) 1376 6060 w
+(1.4) 1666 6060 w
+(seconds) 1857 6060 w
+(of) 2285 6060 w
+(user) 2416 6060 w
+(time,) 2659 6060 w
+(2.5) 2939 6060 w
+(seconds of system time, and 5 seconds) 3130 6060 w
+(of real) 720 6180 w
+(time.) 1064 6180 w
+(Reading) 1376 6180 w
+(the) 1799 6180 w
+(same) 1987 6180 w
+(file) 2275 6180 w
+(in) 2459 6180 w
+10 /LucidaTypewriter f
+(ed) 2583 6180 w
+10 /LucidaSansUnicode00 f
+(takes) 2760 6180 w
+(6.0) 3050 6180 w
+(seconds) 3241 6180 w
+(of) 3669 6180 w
+(user) 3800 6180 w
+(time,) 4043 6180 w
+(1.7) 4323 6180 w
+(seconds) 4514 6180 w
+(of) 4942 6180 w
+(system) 720 6300 w
+(time,) 1104 6300 w
+(and) 1395 6300 w
+(8) 1619 6300 w
+(seconds) 1726 6300 w
+(of) 2165 6300 w
+(real) 2306 6300 w
+(time.) 2530 6300 w
+10 /LucidaTypewriter f
+(Sam) 2852 6300 w
+10 /LucidaSansUnicode00 f
+(uses) 3111 6300 w
+(about) 3374 6300 w
+(half) 3695 6300 w
+(the) 3921 6300 w
+(CPU) 4119 6300 w
+(time.) 4355 6300 w
+(A) 4677 6300 w
+(more) 4789 6300 w
+(interesting) 720 6420 w
+(example) 1278 6420 w
+(is) 1727 6420 w
+(the) 1843 6420 w
+(one) 2034 6420 w
+(stated) 2249 6420 w
+(above:) 2584 6420 w
+(inserting) 2939 6420 w
+(a) 3404 6420 w
+(character) 3495 6420 w
+(between) 3980 6420 w
+(every) 4423 6420 w
+(pair) 4717 6420 w
+(of) 4942 6420 w
+(characters in the file.) 720 6540 w
+(The) 1809 6540 w
+10 /LucidaTypewriter f
+(sam) 2022 6540 w
+10 /LucidaSansUnicode00 f
+(command is) 2270 6540 w
+9 /LucidaTypewriter f
+(,y/@/) 920 6710 w
+(a/x/) 1310 6710 w
+10 /LucidaSansUnicode00 f
+(and) 720 6890 w
+(takes) 934 6890 w
+(3) 1225 6890 w
+(CPU) 1322 6890 w
+(seconds) 1549 6890 w
+(per) 1978 6890 w
+(kilobyte) 2172 6890 w
+(of) 2591 6890 w
+(input) 2723 6890 w
+(file,) 3010 6890 w
+(of) 3227 6890 w
+(which) 3359 6890 w
+(about) 3674 6890 w
+(a) 3986 6890 w
+(third) 4075 6890 w
+(is) 4341 6890 w
+(spent) 4455 6890 w
+(in) 4759 6890 w
+(the) 4885 6890 w
+(regular) 720 7010 w
+(expression) 1111 7010 w
+(code.) 1687 7010 w
+(This) 2027 7010 w
+(translates) 2277 7010 w
+(to) 2796 7010 w
+(about) 2939 7010 w
+(500) 3262 7010 w
+(changes) 3496 7010 w
+(per) 3939 7010 w
+(second.) 4143 7010 w
+10 /LucidaTypewriter f
+(Ed) 4595 7010 w
+10 /LucidaSansUnicode00 f
+(takes) 4783 7010 w
+(1.5) 720 7130 w
+(seconds) 913 7130 w
+(per) 1343 7130 w
+(kilobyte) 1539 7130 w
+(to) 1960 7130 w
+(make) 2094 7130 w
+(a) 2392 7130 w
+(similar) 2483 7130 w
+(change) 2846 7130 w
+(\(ignoring) 3230 7130 w
+(newlines\),) 3707 7130 w
+(but) 4230 7130 w
+(cannot) 4428 7130 w
+(undo) 4792 7130 w
+(it.) 720 7250 w
+(The) 899 7250 w
+(same) 1129 7250 w
+(example) 1433 7250 w
+(in) 1895 7250 w
+10 /LucidaTypewriter f
+(ex) 2035 7250 w
+10 /LucidaSansUnicode00 f
+(,) 2179 7250 w
+6 /LucidaSansUnicode00 f
+(9) 2211 7200 w
+10 /LucidaSansUnicode00 f
+(a) 2298 7250 w
+(variant) 2402 7250 w
+(of) 2782 7250 w
+10 /LucidaTypewriter f
+(ed) 2929 7250 w
+10 /LucidaSansUnicode00 f
+(done) 3122 7250 w
+(at) 3413 7250 w
+(the) 3554 7250 w
+(University) 3758 7250 w
+(of) 4285 7250 w
+(California) 4432 7250 w
+(at) 4948 7250 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 21 21
+%%Page: 22 22
+/saveobj save def
+mark
+22 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 22 \255) 2752 480 w
+(Berkeley,) 720 840 w
+(which) 1193 840 w
+(allows) 1509 840 w
+(one) 1846 840 w
+(level) 2060 840 w
+(of) 2317 840 w
+(undoing,) 2450 840 w
+(again) 2918 840 w
+(takes) 3216 840 w
+(3) 3508 840 w
+(seconds.) 3606 840 w
+(In) 4100 840 w
+(summary,) 4226 840 w
+10 /LucidaTypewriter f
+(sam) 4741 840 w
+10 /LucidaSansUnicode20 f
+(\031) 4957 840 w
+10 /LucidaSansUnicode00 f
+(s) 4989 840 w
+(performance) 720 960 w
+(is) 1386 960 w
+(comparable) 1516 960 w
+(to) 2132 960 w
+(that) 2279 960 w
+(of) 2519 960 w
+(other) 2666 960 w
+(UNIX) 2972 960 w
+(editors,) 3256 960 w
+(although) 3675 960 w
+(it) 4154 960 w
+(solves) 4269 960 w
+(a) 4618 960 w
+(harder) 4722 960 w
+(problem.) 720 1080 w
+10 /LucidaSans-Demi f
+(Communications) 720 1320 w
+10 /LucidaSansUnicode00 f
+(The) 720 1476 w
+(discussion) 948 1476 w
+(so) 1505 1476 w
+(far) 1664 1476 w
+(has) 1844 1476 w
+(described) 2059 1476 w
+(the) 2579 1476 w
+(implementation) 2781 1476 w
+(of) 3591 1476 w
+(the) 3737 1476 w
+(host) 3940 1476 w
+(part) 4199 1476 w
+(of) 4443 1476 w
+10 /LucidaTypewriter f
+(sam) 4589 1476 w
+10 /LucidaSansUnicode00 f
+(;) 4805 1476 w
+(the) 4885 1476 w
+(next) 720 1596 w
+(few) 1001 1596 w
+(sections) 1236 1596 w
+(explain) 1699 1596 w
+(how) 2119 1596 w
+(a) 2384 1596 w
+(machine) 2504 1596 w
+(with) 2977 1596 w
+(mouse) 3247 1596 w
+(and) 3635 1596 w
+(bitmap) 3879 1596 w
+(display) 4283 1596 w
+(can) 4689 1596 w
+(be) 4921 1596 w
+(engaged) 720 1716 w
+(to) 1182 1716 w
+(improve) 1326 1716 w
+(interaction.) 1767 1716 w
+10 /LucidaTypewriter f
+(Sam) 2397 1716 w
+10 /LucidaSansUnicode00 f
+(is) 2659 1716 w
+(not) 2785 1716 w
+(the) 2992 1716 w
+(first) 3194 1716 w
+(editor) 3436 1716 w
+(to) 3770 1716 w
+(be) 3915 1716 w
+(written) 4081 1716 w
+(as) 4467 1716 w
+(two) 4620 1716 w
+(pro\255) 4842 1716 w
+(cesses,) 720 1836 w
+6 /LucidaSansUnicode00 f
+(16) 1068 1786 w
+10 /LucidaSansUnicode00 f
+(but its implementation has some unusual aspects.) 1176 1836 w
+(There) 970 1992 w
+(are) 1284 1992 w
+(several) 1472 1992 w
+(ways) 1848 1992 w
+10 /LucidaTypewriter f
+(sam) 2119 1992 w
+10 /LucidaSansUnicode20 f
+(\031) 2335 1992 w
+10 /LucidaSansUnicode00 f
+(s) 2367 1992 w
+(host) 2454 1992 w
+(and) 2701 1992 w
+(terminal) 2917 1992 w
+(parts) 3355 1992 w
+(may) 3638 1992 w
+(be) 3874 1992 w
+(connected.) 4029 1992 w
+(The) 4628 1992 w
+(first) 4845 1992 w
+(and) 720 2112 w
+(simplest) 935 2112 w
+(is) 1379 2112 w
+(to) 1494 2112 w
+(forgo) 1627 2112 w
+(the) 1924 2112 w
+(terminal) 2114 2112 w
+(part) 2551 2112 w
+(and) 2782 2112 w
+(use) 2997 2112 w
+(the) 3201 2112 w
+(host) 3391 2112 w
+(part) 3637 2112 w
+10 /LucidaSansUnicode20 f
+(\031) 3833 2112 w
+10 /LucidaSansUnicode00 f
+(s) 3865 2112 w
+(command) 3951 2112 w
+(language) 4464 2112 w
+(to) 4942 2112 w
+(edit) 720 2232 w
+(text) 950 2232 w
+(on) 1186 2232 w
+(an) 1354 2232 w
+(ordinary) 1516 2232 w
+(terminal.) 1966 2232 w
+(This) 2478 2232 w
+(mode) 2729 2232 w
+(is) 3048 2232 w
+(invoked) 3174 2232 w
+(by) 3601 2232 w
+(starting) 3762 2232 w
+10 /LucidaTypewriter f
+(sam) 4182 2232 w
+10 /LucidaSansUnicode00 f
+(with) 4444 2232 w
+(the) 4695 2232 w
+10 /LucidaTypewriter f
+(-d) 4896 2232 w
+10 /LucidaSansUnicode00 f
+(option.) 720 2352 w
+(With) 1138 2352 w
+(no) 1393 2352 w
+(options,) 1557 2352 w
+10 /LucidaTypewriter f
+(sam) 1994 2352 w
+10 /LucidaSansUnicode00 f
+(runs) 2251 2352 w
+(separate) 2507 2352 w
+(host) 2961 2352 w
+(and) 3212 2352 w
+(terminal) 3432 2352 w
+(programs,) 3874 2352 w
+(communicat\255) 4413 2352 w
+(ing) 720 2472 w
+(with) 907 2472 w
+(a) 1146 2472 w
+(message) 1235 2472 w
+(protocol) 1693 2472 w
+(over) 2131 2472 w
+(the) 2375 2472 w
+(physical) 2564 2472 w
+(connection) 2990 2472 w
+(that) 3556 2472 w
+(joins) 3781 2472 w
+(them.) 4048 2472 w
+(Typically,) 4395 2472 w
+(the) 4885 2472 w
+(connection) 720 2592 w
+(is) 1285 2592 w
+(an) 1398 2592 w
+(RS-232) 1548 2592 w
+(link) 1945 2592 w
+(between) 2156 2592 w
+(a) 2596 2592 w
+(Blit) 2684 2592 w
+(\(the) 2870 2592 w
+(prototypical) 3091 2592 w
+(display) 3703 2592 w
+(for) 4078 2592 w
+10 /LucidaTypewriter f
+(sam) 4249 2592 w
+10 /LucidaSansUnicode00 f
+(\) and a host) 4465 2592 w
+(running) 720 2712 w
+(the) 1137 2712 w
+(Ninth) 1329 2712 w
+(Edition) 1630 2712 w
+(of) 2002 2712 w
+(the) 2137 2712 w
+(UNIX) 2329 2712 w
+(operating) 2601 2712 w
+(system.) 3104 2712 w
+6 /LucidaSansUnicode00 f
+(8) 3476 2662 w
+10 /LucidaSansUnicode00 f
+(\(This) 3551 2712 w
+(is) 3826 2712 w
+(the) 3943 2712 w
+(version) 4135 2712 w
+(of) 4524 2712 w
+(the) 4660 2712 w
+(sys\255) 4853 2712 w
+(tem) 720 2832 w
+(used) 955 2832 w
+(in) 1236 2832 w
+(the) 1376 2832 w
+(Computing) 1580 2832 w
+(Sciences) 2167 2832 w
+(Research) 2626 2832 w
+(Center) 3110 2832 w
+(at) 3480 2832 w
+(AT&T) 3621 2832 w
+(Bell) 3935 2832 w
+(Laboratories) 4156 2832 w
+([now) 4807 2832 w
+(Lucent) 720 2952 w
+(Technologies,) 1079 2952 w
+(Bell) 1792 2952 w
+(Labs],) 2002 2952 w
+(where) 2327 2952 w
+(I) 2657 2952 w
+(work.) 2724 2952 w
+(Its) 3063 2952 w
+(relevant) 3218 2952 w
+(aspects) 3645 2952 w
+(are) 4048 2952 w
+(discussed) 4239 2952 w
+(in) 4755 2952 w
+(the) 4885 2952 w
+(Blit) 720 3072 w
+(paper.) 914 3072 w
+6 /LucidaSansUnicode00 f
+(1) 1224 3022 w
+10 /LucidaSansUnicode00 f
+(\)) 1262 3072 w
+(The) 1336 3072 w
+(implementation) 1558 3072 w
+(of) 2361 3072 w
+10 /LucidaTypewriter f
+(sam) 2500 3072 w
+10 /LucidaSansUnicode00 f
+(for) 2757 3072 w
+(the) 2937 3072 w
+(SUN) 3133 3072 w
+(computer) 3371 3072 w
+(runs) 3876 3072 w
+(both) 4133 3072 w
+(processes) 4396 3072 w
+(on) 4917 3072 w
+(the same machine and connects them by a pipe.) 720 3192 w
+(The) 970 3348 w
+(low) 1193 3348 w
+(bandwidth) 1402 3348 w
+(of) 1955 3348 w
+(an) 2095 3348 w
+(RS-232) 2254 3348 w
+(link) 2660 3348 w
+(necessitated) 2880 3348 w
+(the) 3526 3348 w
+(split) 3724 3348 w
+(between) 3976 3348 w
+(the) 4426 3348 w
+(two) 4624 3348 w
+(pro\255) 4842 3348 w
+(grams.) 720 3468 w
+(The) 1120 3468 w
+(division) 1335 3468 w
+(is) 1745 3468 w
+(a) 1859 3468 w
+(mixed) 1948 3468 w
+(blessing:) 2284 3468 w
+(a) 2753 3468 w
+(program) 2842 3468 w
+(in) 3292 3468 w
+(two) 3416 3468 w
+(parts) 3624 3468 w
+(is) 3904 3468 w
+(much) 4017 3468 w
+(harder) 4318 3468 w
+(to) 4669 3468 w
+(write) 4800 3468 w
+(and) 720 3588 w
+(to) 937 3588 w
+(debug) 1072 3588 w
+(than) 1416 3588 w
+(a) 1670 3588 w
+(self-contained) 1763 3588 w
+(one,) 2508 3588 w
+(but) 2757 3588 w
+(the) 2957 3588 w
+(split) 3150 3588 w
+(makes) 3397 3588 w
+(several) 3748 3588 w
+(unusual) 4126 3588 w
+(configura\255) 4547 3588 w
+(tions) 720 3708 w
+(possible.) 1008 3708 w
+(The) 1523 3708 w
+(terminal) 1752 3708 w
+(may) 2202 3708 w
+(be) 2450 3708 w
+(physically) 2617 3708 w
+(separated) 3138 3708 w
+(from) 3663 3708 w
+(the) 3942 3708 w
+(host,) 4144 3708 w
+(allowing) 4434 3708 w
+(the) 4885 3708 w
+(conveniences) 720 3828 w
+(of) 1404 3828 w
+(a) 1537 3828 w
+(mouse) 1627 3828 w
+(and) 1985 3828 w
+(bitmap) 2200 3828 w
+(display) 2575 3828 w
+(to) 2952 3828 w
+(be) 3085 3828 w
+(taken) 3239 3828 w
+(home) 3542 3828 w
+(while) 3849 3828 w
+(leaving) 4138 3828 w
+(the) 4519 3828 w
+(files) 4710 3828 w
+(at) 4948 3828 w
+(work.) 720 3948 w
+(It is also possible to run the host part on a remote machine:) 1053 3948 w
+9 /LucidaTypewriter f
+(sam) 920 4118 w
+(-r) 1180 4118 w
+(host) 1375 4118 w
+10 /LucidaSansUnicode00 f
+(connects) 720 4298 w
+(to) 1190 4298 w
+(the) 1327 4298 w
+(terminal) 1521 4298 w
+(in) 1962 4298 w
+(the) 2092 4298 w
+(usual) 2286 4298 w
+(way,) 2584 4298 w
+(and) 2839 4298 w
+(then) 3058 4298 w
+(makes) 3314 4298 w
+(a) 3666 4298 w
+(call) 3761 4298 w
+(across) 3965 4298 w
+(the) 4315 4298 w
+(network) 4510 4298 w
+(to) 4942 4298 w
+(establish) 720 4418 w
+(the) 1187 4418 w
+(host) 1376 4418 w
+(part) 1621 4418 w
+(of) 1850 4418 w
+10 /LucidaTypewriter f
+(sam) 1981 4418 w
+10 /LucidaSansUnicode00 f
+(on) 2230 4418 w
+(the) 2386 4418 w
+(named) 2574 4418 w
+(machine.) 2936 4418 w
+(Finally,) 3441 4418 w
+(it) 3816 4418 w
+(cross-connects) 3915 4418 w
+(the) 4692 4418 w
+(I/O) 4880 4418 w
+(to) 720 4538 w
+(join) 859 4538 w
+(the) 1082 4538 w
+(two) 1278 4538 w
+(parts.) 1494 4538 w
+(This) 1846 4538 w
+(allows) 2092 4538 w
+10 /LucidaTypewriter f
+(sam) 2435 4538 w
+10 /LucidaSansUnicode00 f
+(to) 2692 4538 w
+(be) 2831 4538 w
+(run) 2991 4538 w
+(on) 3197 4538 w
+(machines) 3361 4538 w
+(that) 3861 4538 w
+(do) 4093 4538 w
+(not) 4258 4538 w
+(support) 4459 4538 w
+(bit\255) 4878 4538 w
+(map) 720 4658 w
+(displays;) 970 4658 w
+(for) 1434 4658 w
+(example,) 1612 4658 w
+10 /LucidaTypewriter f
+(sam) 2096 4658 w
+10 /LucidaSansUnicode00 f
+(is) 2351 4658 w
+(the) 2470 4658 w
+(editor) 2664 4658 w
+(of) 2990 4658 w
+(choice) 3127 4658 w
+(on) 3476 4658 w
+(our) 3638 4658 w
+(Cray) 3841 4658 w
+(X-MP/24.) 4097 4658 w
+10 /LucidaTypewriter f
+(Sam) 4641 4658 w
+(-r) 4896 4658 w
+10 /LucidaSansUnicode00 f
+(involves) 720 4778 w
+10 /LucidaSans-Italic f
+(three) 1159 4778 w
+10 /LucidaSansUnicode00 f
+(machines:) 1460 4778 w
+(the) 1998 4778 w
+(remote) 2200 4778 w
+(host,) 2591 4778 w
+(the) 2881 4778 w
+(terminal,) 3083 4778 w
+(and) 3564 4778 w
+(the) 3791 4778 w
+(local) 3993 4778 w
+(host.) 4265 4778 w
+(The) 4587 4778 w
+(local) 4815 4778 w
+(host) 720 4898 w
+10 /LucidaSansUnicode20 f
+(\031) 931 4898 w
+10 /LucidaSansUnicode00 f
+(s job is simple but vital: it passes the data between the remote host and terminal.) 963 4898 w
+(The) 970 5054 w
+(host) 1204 5054 w
+(and) 1468 5054 w
+(terminal) 1701 5054 w
+(exchange) 2156 5054 w
+(messages) 2674 5054 w
+(asynchronously) 3203 5054 w
+(\(rather) 4009 5054 w
+(than,) 4388 5054 w
+(say,) 4690 5054 w
+(as) 4934 5054 w
+(remote) 720 5174 w
+(procedure) 1104 5174 w
+(calls\)) 1638 5174 w
+(but) 1926 5174 w
+(there) 2127 5174 w
+(is) 2418 5174 w
+(no) 2537 5174 w
+(error) 2699 5174 w
+(detection) 2978 5174 w
+(or) 3469 5174 w
+(correction) 3610 5174 w
+(because,) 4139 5174 w
+(whatever) 4604 5174 w
+(the) 720 5294 w
+(configuration,) 926 5294 w
+(the) 1658 5294 w
+(connection) 1865 5294 w
+(is) 2449 5294 w
+(reliable.) 2581 5294 w
+(Because) 3055 5294 w
+(the) 3496 5294 w
+(terminal) 3703 5294 w
+(handles) 4157 5294 w
+(mundane) 4587 5294 w
+(interaction) 720 5414 w
+(tasks) 1286 5414 w
+(such) 1584 5414 w
+(as) 1855 5414 w
+(popping) 2006 5414 w
+(up) 2454 5414 w
+(menus) 2624 5414 w
+(and) 2993 5414 w
+(interpreting) 3218 5414 w
+(the) 3838 5414 w
+(responses,) 4038 5414 w
+(the) 4607 5414 w
+(mes\255) 4807 5414 w
+(sages) 720 5534 w
+(are) 1035 5534 w
+(about) 1227 5534 w
+(data,) 1545 5534 w
+(not) 1827 5534 w
+(actions.) 2027 5534 w
+(For) 2477 5534 w
+(example,) 2673 5534 w
+(the) 3158 5534 w
+(host) 3353 5534 w
+(knows) 3604 5534 w
+(nothing) 3953 5534 w
+(about) 4369 5534 w
+(what) 4688 5534 w
+(is) 4960 5534 w
+(displayed) 720 5654 w
+(on) 1221 5654 w
+(the) 1384 5654 w
+(screen,) 1579 5654 w
+(and) 1968 5654 w
+(when) 2188 5654 w
+(the) 2485 5654 w
+(user) 2680 5654 w
+(types) 2930 5654 w
+(a) 3229 5654 w
+(character,) 3324 5654 w
+(the) 3845 5654 w
+(message) 4040 5654 w
+(sent) 4503 5654 w
+(to) 4748 5654 w
+(the) 4885 5654 w
+(host) 720 5774 w
+(says) 964 5774 w
+10 /LucidaSansUnicode20 f
+(\030\030) 1206 5774 w
+10 /LucidaSansUnicode00 f
+(insert) 1270 5774 w
+(a) 1579 5774 w
+(one-byte) 1667 5774 w
+(string) 2145 5774 w
+(at) 2460 5774 w
+(location) 2585 5774 w
+(123) 3003 5774 w
+(in) 3225 5774 w
+(file) 3349 5774 w
+(7,) 3533 5774 w
+10 /LucidaSansUnicode20 f
+(\031\031) 3628 5774 w
+10 /LucidaSansUnicode00 f
+(not) 3725 5774 w
+10 /LucidaSansUnicode20 f
+(\030\030) 3918 5774 w
+10 /LucidaSansUnicode00 f
+(a) 3982 5774 w
+(character) 4070 5774 w
+(was) 4552 5774 w
+(typed) 4769 5774 w
+(at) 720 5894 w
+(the) 865 5894 w
+(current) 1073 5894 w
+(position) 1476 5894 w
+(in) 1922 5894 w
+(the) 2066 5894 w
+(current) 2274 5894 w
+(file.) 2677 5894 w
+10 /LucidaSansUnicode20 f
+(\031\031) 2860 5894 w
+10 /LucidaSansUnicode00 f
+(In) 3009 5894 w
+(other) 3153 5894 w
+(words,) 3463 5894 w
+(the) 3841 5894 w
+(messages) 4049 5894 w
+(look) 4577 5894 w
+(very) 4839 5894 w
+(much like the transaction records in the transcripts.) 720 6014 w
+(Either) 970 6170 w
+(the) 1291 6170 w
+(host) 1489 6170 w
+(or) 1743 6170 w
+(terminal) 1888 6170 w
+(part) 2333 6170 w
+(of) 2572 6170 w
+10 /LucidaTypewriter f
+(sam) 2713 6170 w
+10 /LucidaSansUnicode00 f
+(may) 2972 6170 w
+(initiate) 3215 6170 w
+(a) 3592 6170 w
+(change) 3690 6170 w
+(to) 4081 6170 w
+(a) 4222 6170 w
+(file.) 4320 6170 w
+(The) 4578 6170 w
+(com\255) 4802 6170 w
+(mand) 720 6290 w
+(language) 1029 6290 w
+(operates) 1508 6290 w
+(on) 1964 6290 w
+(the) 2123 6290 w
+(host,) 2314 6290 w
+(while) 2593 6290 w
+(typing) 2882 6290 w
+(and) 3223 6290 w
+(some) 3439 6290 w
+(mouse) 3736 6290 w
+(operations) 4095 6290 w
+(are) 4647 6290 w
+(exe\255) 4834 6290 w
+(cuted) 720 6410 w
+(directly) 1029 6410 w
+(in) 1427 6410 w
+(the) 1558 6410 w
+(terminal) 1753 6410 w
+(to) 2195 6410 w
+(optimize) 2333 6410 w
+(response.) 2798 6410 w
+(Changes) 3343 6410 w
+(initiated) 3800 6410 w
+(by) 4238 6410 w
+(the) 4394 6410 w
+(host) 4590 6410 w
+(pro\255) 4842 6410 w
+(gram) 720 6530 w
+(must) 1021 6530 w
+(be) 1314 6530 w
+(transmitted) 1483 6530 w
+(to) 2094 6530 w
+(the) 2241 6530 w
+(terminal,) 2445 6530 w
+(and) 2928 6530 w
+(vice) 3157 6530 w
+(versa.) 3394 6530 w
+(\(A) 3762 6530 w
+(token) 3913 6530 w
+(is) 4236 6530 w
+(exchanged) 4365 6530 w
+(to) 4942 6530 w
+(determine) 720 6650 w
+(which) 1265 6650 w
+(end) 1598 6650 w
+(is) 1831 6650 w
+(in) 1963 6650 w
+(control,) 2106 6650 w
+(which) 2532 6650 w
+(means) 2865 6650 w
+(that) 3234 6650 w
+(characters) 3477 6650 w
+(typed) 4029 6650 w
+(while) 4353 6650 w
+(a) 4659 6650 w
+(time-) 4767 6650 w
+(consuming) 720 6770 w
+(command) 1299 6770 w
+(runs) 1823 6770 w
+(must) 2084 6770 w
+(be) 2372 6770 w
+(buffered) 2536 6770 w
+(and) 2996 6770 w
+(do) 3221 6770 w
+(not) 3390 6770 w
+(appear) 3595 6770 w
+(until) 3973 6770 w
+(the) 4237 6770 w
+(command) 4437 6770 w
+(is) 4960 6770 w
+(complete.\)) 720 6890 w
+(To) 1317 6890 w
+(maintain) 1495 6890 w
+(consistent) 1971 6890 w
+(information,) 2522 6890 w
+(the) 3176 6890 w
+(host) 3386 6890 w
+(and) 3652 6890 w
+(terminal) 3887 6890 w
+(track) 4344 6890 w
+(changes) 4641 6890 w
+(through) 720 7010 w
+(a) 1146 7010 w
+(per-file) 1240 7010 w
+(data) 1648 7010 w
+(structure) 1897 7010 w
+(that) 2374 7010 w
+(records) 2604 7010 w
+(what) 3007 7010 w
+(portions) 3277 7010 w
+(of) 3721 7010 w
+(the) 3857 7010 w
+(file) 4050 7010 w
+(the) 4239 7010 w
+(terminal) 4432 7010 w
+(has) 4872 7010 w
+(received.) 720 7130 w
+(The) 1229 7130 w
+(data) 1451 7130 w
+(structure,) 1703 7130 w
+(called) 2215 7130 w
+(a) 2540 7130 w
+10 /LucidaTypewriter f
+(Rasp) 2637 7130 w
+10 /LucidaSansUnicode00 f
+(\(a) 2967 7130 w
+(weak) 3097 7130 w
+(pun:) 3385 7130 w
+(it) 3646 7130 w
+10 /LucidaSansUnicode20 f
+(\031) 3712 7130 w
+10 /LucidaSansUnicode00 f
+(s) 3744 7130 w
+(a) 3837 7130 w
+(file) 3934 7130 w
+(with) 4127 7130 w
+(holes\)) 4374 7130 w
+(is) 4708 7130 w
+(held) 4830 7130 w
+(and) 720 7250 w
+(updated) 933 7250 w
+(by) 1365 7250 w
+(both) 1513 7250 w
+(the host and terminal.) 1769 7250 w
+(A) 2909 7250 w
+10 /LucidaTypewriter f
+(Rasp) 3010 7250 w
+10 /LucidaSansUnicode00 f
+(is a list of) 3330 7250 w
+10 /LucidaTypewriter f
+(Strings) 3837 7250 w
+10 /LucidaSansUnicode00 f
+(holding those) 4373 7250 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 22 22
+%%Page: 23 23
+/saveobj save def
+mark
+23 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 23 \255) 2752 480 w
+(parts) 720 840 w
+(of) 1008 840 w
+(the) 1147 840 w
+(file) 1343 840 w
+(known) 1535 840 w
+(to) 1897 840 w
+(the) 2037 840 w
+(terminal,) 2234 840 w
+(separated) 2710 840 w
+(by) 3229 840 w
+(counts) 3386 840 w
+(of) 3752 840 w
+(the) 3892 840 w
+(number) 4089 840 w
+(of) 4508 840 w
+(bytes) 4648 840 w
+(in) 4949 840 w
+(the) 720 960 w
+(interstices.) 923 960 w
+(Of) 1535 960 w
+(course,) 1698 960 w
+(the) 2100 960 w
+(host) 2302 960 w
+(doesn) 2560 960 w
+10 /LucidaSansUnicode20 f
+(\031) 2853 960 w
+10 /LucidaSansUnicode00 f
+(t) 2885 960 w
+(keep) 2969 960 w
+(a) 3249 960 w
+(separate) 3351 960 w
+(copy) 3812 960 w
+(of) 4086 960 w
+(the) 4231 960 w
+(data) 4433 960 w
+(\(it) 4690 960 w
+(only) 4836 960 w
+(needs the lengths of the various pieces\), but the structure is the same on both ends.) 720 1080 w
+(The) 970 1236 w
+10 /LucidaTypewriter f
+(Rasp) 1183 1236 w
+10 /LucidaSansUnicode00 f
+(in the terminal doubles) 1503 1236 w
+(as) 2665 1236 w
+(a) 2804 1236 w
+(cache.) 2892 1236 w
+(Since) 3264 1236 w
+(the) 3549 1236 w
+(terminal) 3737 1236 w
+(keeps) 4172 1236 w
+(the) 4489 1236 w
+(text) 4677 1236 w
+(for) 4901 1236 w
+(portions) 720 1356 w
+(of) 1161 1356 w
+(the) 1295 1356 w
+(file) 1485 1356 w
+(it) 1671 1356 w
+(has) 1772 1356 w
+(displayed,) 1975 1356 w
+(it) 2503 1356 w
+(need) 2604 1356 w
+(not) 2876 1356 w
+(request) 3071 1356 w
+(data) 3472 1356 w
+(from) 3717 1356 w
+(the) 3984 1356 w
+(host) 4174 1356 w
+(when) 4420 1356 w
+(revisit\255) 4712 1356 w
+(ing) 720 1476 w
+(old) 907 1476 w
+(parts) 1094 1476 w
+(of) 1375 1476 w
+(the) 1507 1476 w
+(file) 1696 1476 w
+(or) 1881 1476 w
+(redrawing) 2017 1476 w
+(obscured) 2537 1476 w
+(windows,) 3019 1476 w
+(which) 3505 1476 w
+(speeds) 3820 1476 w
+(things) 4194 1476 w
+(up) 4531 1476 w
+(consid\255) 4690 1476 w
+(erably over low-speed links.) 720 1596 w
+(It) 970 1752 w
+10 /LucidaSansUnicode20 f
+(\031) 1036 1752 w
+10 /LucidaSansUnicode00 f
+(s) 1068 1752 w
+(trivial) 1157 1752 w
+(for) 1468 1752 w
+(the) 1646 1752 w
+(terminal) 1840 1752 w
+(to) 2281 1752 w
+(maintain) 2418 1752 w
+(its) 2879 1752 w
+10 /LucidaTypewriter f
+(Rasp) 3035 1752 w
+10 /LucidaSansUnicode00 f
+(,) 3323 1752 w
+(because) 3394 1752 w
+(all) 3827 1752 w
+(changes) 3979 1752 w
+(made) 4417 1752 w
+(on) 4723 1752 w
+(the) 4885 1752 w
+(terminal) 720 1872 w
+(apply) 1162 1872 w
+(to) 1464 1872 w
+(parts) 1602 1872 w
+(of) 1889 1872 w
+(the) 2027 1872 w
+(file) 2222 1872 w
+(already) 2413 1872 w
+(loaded) 2804 1872 w
+(there.) 3171 1872 w
+(Changes) 3527 1872 w
+(made) 3984 1872 w
+(by) 4290 1872 w
+(the) 4444 1872 w
+(host) 4638 1872 w
+(are) 4888 1872 w
+(compared) 720 1992 w
+(against) 1250 1992 w
+(the) 1648 1992 w
+10 /LucidaTypewriter f
+(Rasp) 1850 1992 w
+10 /LucidaSansUnicode00 f
+(during) 2185 1992 w
+(the) 2552 1992 w
+(update) 2755 1992 w
+(sequence) 3139 1992 w
+(after) 3644 1992 w
+(each) 3918 1992 w
+(command.) 4190 1992 w
+(Small) 4780 1992 w
+(changes) 720 2112 w
+(to) 1168 2112 w
+(pieces) 1315 2112 w
+(of) 1669 2112 w
+(the) 1815 2112 w
+(file) 2018 2112 w
+(loaded) 2217 2112 w
+(in) 2592 2112 w
+(the) 2731 2112 w
+(terminal) 2934 2112 w
+(are) 3384 2112 w
+(sent) 3584 2112 w
+(in) 3838 2112 w
+(their) 3977 2112 w
+(entirety.) 4250 2112 w
+(Larger) 4732 2112 w
+(changes,) 720 2232 w
+(and) 1192 2232 w
+(changes) 1413 2232 w
+(that) 1853 2232 w
+(fall) 2085 2232 w
+(entirely) 2276 2232 w
+(in) 2679 2232 w
+(the) 2811 2232 w
+(holes,) 3007 2232 w
+(are) 3340 2232 w
+(transmitted) 3534 2232 w
+(as) 4137 2232 w
+(messages) 4285 2232 w
+(with\255) 4802 2232 w
+(out) 720 2352 w
+(literal) 931 2352 w
+(data:) 1258 2352 w
+(only) 1551 2352 w
+(the) 1806 2352 w
+(lengths) 2012 2352 w
+(of) 2422 2352 w
+(the) 2571 2352 w
+(deleted) 2777 2352 w
+(and) 3187 2352 w
+(inserted) 3417 2352 w
+(strings) 3862 2352 w
+(are) 4245 2352 w
+(transmitted.) 4447 2352 w
+(When) 720 2472 w
+(a) 1024 2472 w
+(command) 1117 2472 w
+(is) 1633 2472 w
+(completed,) 1751 2472 w
+(the) 2330 2472 w
+(terminal) 2523 2472 w
+(examines) 2963 2472 w
+(its) 3464 2472 w
+(visible) 3620 2472 w
+(windows) 3968 2472 w
+(to) 4427 2472 w
+(see) 4564 2472 w
+(if) 4766 2472 w
+(any) 4871 2472 w
+(holes) 720 2592 w
+(in) 1017 2592 w
+(their) 1146 2592 w
+10 /LucidaTypewriter f
+(Rasps) 1409 2592 w
+10 /LucidaSansUnicode00 f
+(intersect) 1807 2592 w
+(the) 2265 2592 w
+(visible) 2458 2592 w
+(portion) 2805 2592 w
+(of) 3197 2592 w
+(the) 3333 2592 w
+(file.) 3526 2592 w
+(It) 3779 2592 w
+(then) 3883 2592 w
+(requests) 4137 2592 w
+(the) 4591 2592 w
+(miss\255) 4783 2592 w
+(ing) 720 2712 w
+(data) 907 2712 w
+(from) 1151 2712 w
+(the) 1417 2712 w
+(host,) 1606 2712 w
+(along) 1883 2712 w
+(with) 2186 2712 w
+(up) 2425 2712 w
+(to) 2584 2712 w
+(512) 2716 2712 w
+(bytes) 2939 2712 w
+(of) 3232 2712 w
+(surrounding) 3364 2712 w
+(data,) 3994 2712 w
+(to) 4270 2712 w
+(minimize) 4402 2712 w
+(the) 4885 2712 w
+(number) 720 2832 w
+(of) 1136 2832 w
+(messages) 1273 2832 w
+(when) 1787 2832 w
+(visiting) 2083 2832 w
+(a) 2472 2832 w
+(new) 2565 2832 w
+(portion) 2798 2832 w
+(of) 3190 2832 w
+(the) 3326 2832 w
+(file.) 3519 2832 w
+(This) 3772 2832 w
+(technique) 4015 2832 w
+(provides) 4531 2832 w
+(a) 4985 2832 w
+(kind) 720 2952 w
+(of) 975 2952 w
+(two-level) 1116 2952 w
+(lazy) 1614 2952 w
+(evaluation) 1850 2952 w
+(for) 2391 2952 w
+(the) 2573 2952 w
+(terminal.) 2771 2952 w
+(The) 3281 2952 w
+(first) 3506 2952 w
+(level) 3745 2952 w
+(sends) 4011 2952 w
+(a) 4338 2952 w
+(minimum) 4437 2952 w
+(of) 4942 2952 w
+(information) 720 3072 w
+(about) 1326 3072 w
+(parts) 1643 3072 w
+(of) 1929 3072 w
+(the) 2066 3072 w
+(file) 2260 3072 w
+(not) 2450 3072 w
+(being) 2648 3072 w
+(edited) 2958 3072 w
+(interactively;) 3300 3072 w
+(the) 3956 3072 w
+(second) 4149 3072 w
+(level) 4531 3072 w
+(waits) 4791 3072 w
+(until) 720 3192 w
+(a) 974 3192 w
+(change) 1064 3192 w
+(is) 1447 3192 w
+(displayed) 1562 3192 w
+(before) 2058 3192 w
+(transmitting) 2407 3192 w
+(the) 3037 3192 w
+(new) 3227 3192 w
+(data.) 3457 3192 w
+(Of) 3767 3192 w
+(course,) 3918 3192 w
+(performance) 4308 3192 w
+(is) 4960 3192 w
+(also) 720 3312 w
+(helped) 965 3312 w
+(by) 1343 3312 w
+(having) 1507 3312 w
+(the) 1878 3312 w
+(terminal) 2082 3312 w
+(respond) 2533 3312 w
+(immediately) 2979 3312 w
+(to) 3620 3312 w
+(typing) 3767 3312 w
+(and) 4120 3312 w
+(simple) 4348 3312 w
+(mouse) 4717 3312 w
+(requests.) 720 3432 w
+(Except) 1237 3432 w
+(for) 1595 3432 w
+(small) 1770 3432 w
+(changes) 2063 3432 w
+(to) 2498 3432 w
+(active) 2632 3432 w
+(pieces) 2948 3432 w
+(of) 3290 3432 w
+(the) 3425 3432 w
+(file,) 3617 3432 w
+(which) 3837 3432 w
+(are) 4155 3432 w
+(transmitted) 4344 3432 w
+(to) 4942 3432 w
+(the) 720 3552 w
+(terminal) 912 3552 w
+(without) 1351 3552 w
+(negotiation,) 1753 3552 w
+(the) 2373 3552 w
+(terminal) 2565 3552 w
+(is) 3004 3552 w
+(wholly) 3121 3552 w
+(responsible) 3468 3552 w
+(for) 4067 3552 w
+(deciding) 4242 3552 w
+(what) 4693 3552 w
+(is) 4960 3552 w
+(displayed; the host uses the) 720 3672 w
+10 /LucidaTypewriter f
+(Rasp) 2114 3672 w
+10 /LucidaSansUnicode00 f
+(only to tell the terminal what might be relevant.) 2434 3672 w
+(When) 970 3828 w
+(a) 1269 3828 w
+(change) 1357 3828 w
+(is) 1738 3828 w
+(initiated) 1851 3828 w
+(by) 2281 3828 w
+(the) 2429 3828 w
+(host,) 2617 3828 w
+(the) 2893 3828 w
+(messages) 3081 3828 w
+(to) 3589 3828 w
+(the) 3720 3828 w
+(terminal) 3908 3828 w
+(describing) 4344 3828 w
+(the) 4885 3828 w
+(change) 720 3948 w
+(are) 1115 3948 w
+(generated) 1314 3948 w
+(by) 1849 3948 w
+(the) 2011 3948 w
+(routine) 2213 3948 w
+(that) 2608 3948 w
+(applies) 2845 3948 w
+(the) 3237 3948 w
+(transcript) 3438 3948 w
+(of) 3951 3948 w
+(the) 4095 3948 w
+(changes) 4296 3948 w
+(to) 4741 3948 w
+(the) 4885 3948 w
+(contents) 720 4068 w
+(of) 1174 4068 w
+(the) 1309 4068 w
+10 /LucidaTypewriter f
+(File) 1501 4068 w
+10 /LucidaSansUnicode00 f
+(.) 1789 4068 w
+(Since) 1890 4068 w
+(changes) 2179 4068 w
+(are) 2615 4068 w
+(undone) 2804 4068 w
+(by) 3208 4068 w
+(the) 3361 4068 w
+(same) 3554 4068 w
+(update) 3847 4068 w
+(routine,) 4221 4068 w
+(undoing) 4639 4068 w
+(requires) 720 4188 w
+(no) 1160 4188 w
+(extra) 1324 4188 w
+(code) 1615 4188 w
+(in) 1887 4188 w
+(the) 2019 4188 w
+(communications;) 2215 4188 w
+(the) 3085 4188 w
+(usual) 3280 4188 w
+(messages) 3579 4188 w
+(describing) 4094 4188 w
+(changes) 4641 4188 w
+(to the file are sufficient to back up the screen image.) 720 4308 w
+(The) 970 4464 w
+10 /LucidaTypewriter f
+(Rasp) 1184 4464 w
+10 /LucidaSansUnicode00 f
+(is) 1505 4464 w
+(a) 1618 4464 w
+(particularly) 1706 4464 w
+(good) 2283 4464 w
+(example) 2563 4464 w
+(of) 3009 4464 w
+(the) 3140 4464 w
+(way) 3328 4464 w
+(caches) 3545 4464 w
+(are) 3905 4464 w
+(used) 4091 4464 w
+(in) 4357 4464 w
+10 /LucidaTypewriter f
+(sam) 4482 4464 w
+10 /LucidaSansUnicode00 f
+(.) 4698 4464 w
+(First,) 4796 4464 w
+(it) 720 4584 w
+(facilitates) 835 4584 w
+(access) 1350 4584 w
+(to) 1714 4584 w
+(the) 1861 4584 w
+(active) 2064 4584 w
+(portion) 2392 4584 w
+(of) 2794 4584 w
+(the) 2940 4584 w
+(text) 3143 4584 w
+(by) 3382 4584 w
+(placing) 3545 4584 w
+(the) 3944 4584 w
+(busy) 4147 4584 w
+(text) 4423 4584 w
+(in) 4662 4584 w
+(main) 4801 4584 w
+(memory.) 720 4704 w
+(In) 1215 4704 w
+(so) 1341 4704 w
+(doing,) 1488 4704 w
+(it) 1832 4704 w
+(provides) 1933 4704 w
+(efficient) 2384 4704 w
+(access) 2813 4704 w
+(to) 3163 4704 w
+(a) 3296 4704 w
+(large) 3387 4704 w
+(data) 3666 4704 w
+(structure) 3912 4704 w
+(that) 4386 4704 w
+(does) 4613 4704 w
+(not) 4880 4704 w
+(fit) 720 4824 w
+(in) 858 4824 w
+(memory.) 984 4824 w
+(Since) 1479 4824 w
+(the) 1766 4824 w
+(form) 1955 4824 w
+(of) 2221 4824 w
+(data) 2353 4824 w
+(is) 2597 4824 w
+(to) 2711 4824 w
+(be) 2843 4824 w
+(imposed) 2996 4824 w
+(by) 3446 4824 w
+(the) 3595 4824 w
+(user,) 3784 4824 w
+(not) 4060 4824 w
+(by) 4254 4824 w
+(the) 4403 4824 w
+(program,) 4592 4824 w
+(and) 720 4944 w
+(because) 944 4944 w
+(characters) 1382 4944 w
+(will) 1926 4944 w
+(frequently) 2134 4944 w
+(be) 2673 4944 w
+(scanned) 2836 4944 w
+(sequentially,) 3280 4944 w
+(files) 3937 4944 w
+(are) 4183 4944 w
+(stored) 4379 4944 w
+(as) 4732 4944 w
+(flat) 4882 4944 w
+(objects.) 720 5064 w
+(Caches help keep performance good and linear when working with such data.) 1165 5064 w
+(Second,) 970 5220 w
+(the) 1386 5220 w
+10 /LucidaTypewriter f
+(Rasp) 1578 5220 w
+10 /LucidaSansUnicode00 f
+(and) 1903 5220 w
+(several) 2120 5220 w
+(of) 2497 5220 w
+(the) 2632 5220 w
+(other) 2824 5220 w
+(caches) 3119 5220 w
+(have) 3483 5220 w
+(some) 3746 5220 w
+10 /LucidaSans-Italic f
+(read-ahead;) 4045 5220 w
+10 /LucidaSansUnicode00 f
+(that) 4699 5220 w
+(is,) 4928 5220 w
+(the) 720 5340 w
+(cache) 924 5340 w
+(is) 1248 5340 w
+(loaded) 1377 5340 w
+(with) 1753 5340 w
+(more) 2006 5340 w
+(information) 2305 5340 w
+(than) 2920 5340 w
+(is) 3184 5340 w
+(needed) 3312 5340 w
+(for) 3716 5340 w
+(the) 3903 5340 w
+(job) 4106 5340 w
+(immediately) 4308 5340 w
+(at) 4948 5340 w
+(hand.) 720 5460 w
+(When) 1079 5460 w
+(manipulating) 1398 5460 w
+(linear) 2089 5460 w
+(structures,) 2414 5460 w
+(the) 2989 5460 w
+(accesses) 3198 5460 w
+(are) 3674 5460 w
+(usually) 3880 5460 w
+(sequential,) 4274 5460 w
+(and) 4860 5460 w
+(read-ahead) 720 5580 w
+(can) 1323 5580 w
+(significantly) 1530 5580 w
+(reduce) 2154 5580 w
+(the) 2522 5580 w
+(average) 2716 5580 w
+(time) 3132 5580 w
+(to) 3386 5580 w
+(access) 3522 5580 w
+(the) 3875 5580 w
+(next) 4068 5580 w
+(element) 4322 5580 w
+(of) 4749 5580 w
+(the) 4885 5580 w
+(object.) 720 5700 w
+(Sequential) 1122 5700 w
+(access) 1665 5700 w
+(is) 2020 5700 w
+(a) 2140 5700 w
+(common) 2235 5700 w
+(mode) 2697 5700 w
+(for) 3011 5700 w
+(people) 3191 5700 w
+(as) 3560 5700 w
+(well) 3707 5700 w
+(as) 3939 5700 w
+(programs;) 4086 5700 w
+(consider) 4626 5700 w
+(scrolling through a document while looking for something.) 720 5820 w
+(Finally,) 970 5976 w
+(like) 1345 5976 w
+(any) 1550 5976 w
+(good) 1753 5976 w
+(data) 2034 5976 w
+(structure,) 2278 5976 w
+(the) 2782 5976 w
+(cache) 2971 5976 w
+(guides) 3280 5976 w
+(the) 3637 5976 w
+(algorithm,) 3826 5976 w
+(or) 4361 5976 w
+(at) 4497 5976 w
+(least) 4623 5976 w
+(the) 4885 5976 w
+(implementation.) 720 6096 w
+(The) 1620 6096 w
+10 /LucidaTypewriter f
+(Rasp) 1875 6096 w
+10 /LucidaSansUnicode00 f
+(was) 2237 6096 w
+(actually) 2494 6096 w
+(invented) 2938 6096 w
+(to) 3429 6096 w
+(control) 3600 6096 w
+(the) 4015 6096 w
+(communications) 4243 6096 w
+(between) 720 6216 w
+(the) 1165 6216 w
+(host) 1358 6216 w
+(and) 1607 6216 w
+(terminal) 1825 6216 w
+(parts,) 2265 6216 w
+(but) 2582 6216 w
+(I) 2782 6216 w
+(realized) 2849 6216 w
+(very) 3273 6216 w
+(early) 3513 6216 w
+(that) 3785 6216 w
+(it) 4015 6216 w
+(was) 4120 6216 w
+(also) 4342 6216 w
+(a) 4577 6216 w
+(form) 4671 6216 w
+(of) 4942 6216 w
+(cache.) 720 6336 w
+(Other) 1092 6336 w
+(caches) 1399 6336 w
+(were) 1758 6336 w
+(more) 2021 6336 w
+(explicitly) 2305 6336 w
+(intended) 2774 6336 w
+(to) 3235 6336 w
+(serve) 3366 6336 w
+(a) 3655 6336 w
+(double) 3743 6336 w
+(purpose: for exam\255) 4110 6336 w
+(ple,) 720 6456 w
+(the) 937 6456 w
+(caches) 1129 6456 w
+(in) 1492 6456 w
+10 /LucidaTypewriter f
+(Files) 1620 6456 w
+10 /LucidaSansUnicode00 f
+(that) 2017 6456 w
+(coalesce) 2245 6456 w
+(updates) 2692 6456 w
+(not) 3116 6456 w
+(only) 3313 6456 w
+(reduce) 3554 6456 w
+(traffic) 3920 6456 w
+(to) 4244 6456 w
+(the) 4380 6456 w
+(transcript) 4573 6456 w
+(and) 720 6576 w
+(contents) 933 6576 w
+10 /LucidaTypewriter f
+(Buffers) 1383 6576 w
+10 /LucidaSansUnicode00 f
+(,) 1887 6576 w
+(they) 1952 6576 w
+(also) 2192 6576 w
+(clump) 2421 6576 w
+(screen) 2752 6576 w
+(updates) 3102 6576 w
+(so) 3522 6576 w
+(that) 3667 6576 w
+(complicated changes to) 3891 6576 w
+(the) 720 6696 w
+(screen) 908 6696 w
+(are) 1258 6696 w
+(achieved) 1443 6696 w
+(in) 1900 6696 w
+(just) 2024 6696 w
+(a) 2237 6696 w
+(few) 2326 6696 w
+(messages) 2530 6696 w
+(to) 3039 6696 w
+(the) 3171 6696 w
+(terminal.) 3360 6696 w
+(This) 3860 6696 w
+(saved) 4099 6696 w
+(me) 4410 6696 w
+(consider\255) 4593 6696 w
+(able) 720 6816 w
+(work:) 956 6816 w
+(I) 1258 6816 w
+(did) 1320 6816 w
+(not) 1508 6816 w
+(need) 1701 6816 w
+(to) 1971 6816 w
+(write) 2102 6816 w
+(special) 2375 6816 w
+(code) 2742 6816 w
+(to) 3006 6816 w
+(optimize the message traffic to the ter\255) 3137 6816 w
+(minal.) 720 6936 w
+(Caches) 1094 6936 w
+(pay) 1480 6936 w
+(off) 1692 6936 w
+(in) 1869 6936 w
+(surprising) 2002 6936 w
+(ways.) 2535 6936 w
+(Also,) 2877 6936 w
+(they) 3162 6936 w
+(tend) 3412 6936 w
+(to) 3673 6936 w
+(be) 3814 6936 w
+(independent,) 3976 6936 w
+(so) 4660 6936 w
+(their) 4815 6936 w
+(performance improvements are multiplicative.) 720 7056 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 23 23
+%%Page: 24 24
+/saveobj save def
+mark
+24 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 24 \255) 2752 480 w
+10 /LucidaSans-Demi f
+(Data structures in the terminal) 720 840 w
+10 /LucidaSansUnicode00 f
+(The) 720 996 w
+(terminal) 936 996 w
+10 /LucidaSansUnicode20 f
+(\031) 1338 996 w
+10 /LucidaSansUnicode00 f
+(s) 1370 996 w
+(job) 1456 996 w
+(is) 1646 996 w
+(to) 1762 996 w
+(display) 1896 996 w
+(and) 2274 996 w
+(to) 2490 996 w
+(maintain) 2624 996 w
+(a) 3082 996 w
+(consistent) 3173 996 w
+(image) 3706 996 w
+(of) 4037 996 w
+(pieces) 4171 996 w
+(of) 4513 996 w
+(the) 4647 996 w
+(files) 4838 996 w
+(being) 720 1116 w
+(edited.) 1037 1116 w
+(Because) 1450 1116 w
+(the) 1883 1116 w
+(text) 2082 1116 w
+(is) 2317 1116 w
+(always) 2441 1116 w
+(in) 2804 1116 w
+(memory,) 2939 1116 w
+(the) 3411 1116 w
+(data) 3610 1116 w
+(structures) 3864 1116 w
+(are) 4397 1116 w
+(consider\255) 4593 1116 w
+(ably simpler than those in the host part.) 720 1236 w
+10 /LucidaTypewriter f
+(Sam) 970 1392 w
+10 /LucidaSansUnicode00 f
+(typically) 1238 1392 w
+(has) 1687 1392 w
+(far) 1907 1392 w
+(more) 2092 1392 w
+(windows) 2395 1392 w
+(than) 2867 1392 w
+(does) 3136 1392 w
+10 /LucidaTypewriter f
+(mux) 3420 1392 w
+10 /LucidaSansUnicode00 f
+(,) 3636 1392 w
+(the) 3721 1392 w
+(window) 3929 1392 w
+(system) 4351 1392 w
+(within) 4744 1392 w
+(which) 720 1512 w
+(its) 1048 1512 w
+(Blit) 1212 1512 w
+(implementation) 1412 1512 w
+(runs.) 2221 1512 w
+10 /LucidaTypewriter f
+(Mux) 2548 1512 w
+10 /LucidaSansUnicode00 f
+(has) 2811 1512 w
+(a) 3026 1512 w
+(fairly) 3128 1512 w
+(small) 3418 1512 w
+(number) 3721 1512 w
+(of) 4144 1512 w
+(asynchronously) 4288 1512 w
+(updated) 720 1632 w
+(windows;) 1163 1632 w
+10 /LucidaTypewriter f
+(sam) 1659 1632 w
+10 /LucidaSansUnicode00 f
+(needs) 1919 1632 w
+(a) 2251 1632 w
+(large) 2350 1632 w
+(number) 2637 1632 w
+(of) 3058 1632 w
+(synchronously) 3200 1632 w
+(updated) 3941 1632 w
+(windows) 4384 1632 w
+(that) 4849 1632 w
+(are) 720 1752 w
+(usually) 921 1752 w
+(static) 1310 1752 w
+(and) 1619 1752 w
+(often) 1848 1752 w
+(fully) 2150 1752 w
+(obscured.) 2408 1752 w
+(The) 2969 1752 w
+(different) 3199 1752 w
+(tradeoffs) 3666 1752 w
+(guided) 4153 1752 w
+10 /LucidaTypewriter f
+(sam) 4537 1752 w
+10 /LucidaSansUnicode00 f
+(away) 4801 1752 w
+(from) 720 1872 w
+(the) 1017 1872 w
+(memory-intensive) 1237 1872 w
+(implementation) 2190 1872 w
+(of) 3017 1872 w
+(windows,) 3180 1872 w
+(called) 3697 1872 w
+10 /LucidaTypewriter f
+(Layers) 4045 1872 w
+10 /LucidaSansUnicode00 f
+(,) 4477 1872 w
+6 /LucidaSansUnicode00 f
+(17) 4509 1822 w
+10 /LucidaSansUnicode00 f
+(used) 4651 1872 w
+(in) 4949 1872 w
+10 /LucidaTypewriter f
+(mux.) 720 1992 w
+10 /LucidaSansUnicode00 f
+(Rather) 1049 1992 w
+(than) 1404 1992 w
+(depending) 1661 1992 w
+(on) 2218 1992 w
+(a) 2382 1992 w
+(complete) 2478 1992 w
+(bitmap) 2965 1992 w
+(image) 3346 1992 w
+(of) 3681 1992 w
+(the) 3819 1992 w
+(display) 4014 1992 w
+(for) 4396 1992 w
+(each) 4575 1992 w
+(win\255) 4839 1992 w
+(dow,) 720 2112 w
+10 /LucidaTypewriter f
+(sam) 998 2112 w
+10 /LucidaSansUnicode00 f
+(regenerates) 1260 2112 w
+(the) 1879 2112 w
+(image) 2080 2112 w
+(from) 2421 2112 w
+(its) 2699 2112 w
+(in-memory) 2862 2112 w
+(text) 3453 2112 w
+(\(stored) 3690 2112 w
+(in) 4078 2112 w
+(the) 4215 2112 w
+10 /LucidaTypewriter f
+(Rasp) 4416 2112 w
+10 /LucidaSansUnicode00 f
+(\)) 4704 2112 w
+(when) 4783 2112 w
+(necessary,) 720 2232 w
+(although) 1271 2232 w
+(it) 1745 2232 w
+(will) 1855 2232 w
+(use) 2063 2232 w
+(such) 2276 2232 w
+(an) 2546 2232 w
+(image) 2707 2232 w
+(if) 3045 2232 w
+(it) 3154 2232 w
+(is) 3263 2232 w
+(available.) 3386 2232 w
+(Like) 3916 2232 w
+10 /LucidaTypewriter f
+(Layers) 4155 2232 w
+10 /LucidaSansUnicode00 f
+(,) 4587 2232 w
+(though,) 4662 2232 w
+10 /LucidaTypewriter f
+(sam) 720 2352 w
+10 /LucidaSansUnicode00 f
+(uses) 993 2352 w
+(the) 1270 2352 w
+(screen) 1482 2352 w
+(bitmap) 1856 2352 w
+(as) 2253 2352 w
+(active) 2416 2352 w
+(storage) 2753 2352 w
+(in) 3173 2352 w
+(which) 3321 2352 w
+(to) 3659 2352 w
+(update) 3814 2352 w
+(the) 4208 2352 w
+(image) 4421 2352 w
+(using) 4774 2352 w
+10 /LucidaTypewriter f
+(bitblt) 720 2472 w
+10 /LucidaSansUnicode00 f
+(.) 1152 2472 w
+6 /LucidaSansUnicode00 f
+(18,19) 1184 2422 w
+10 /LucidaSansUnicode00 f
+(The) 1392 2472 w
+(resulting) 1610 2472 w
+(organization,) 2076 2472 w
+(pictured) 2756 2472 w
+(in) 3195 2472 w
+(Figure) 3323 2472 w
+(6,) 3664 2472 w
+(has) 3795 2472 w
+(a) 3999 2472 w
+(global) 4090 2472 w
+(array) 4425 2472 w
+(of) 4705 2472 w
+(win\255) 4839 2472 w
+(dows,) 720 2592 w
+(called) 1043 2592 w
+10 /LucidaTypewriter f
+(Flayers) 1365 2592 w
+10 /LucidaSansUnicode00 f
+(,) 1869 2592 w
+(each) 1940 2592 w
+(of) 2203 2592 w
+(which) 2340 2592 w
+(holds) 2660 2592 w
+(an) 2965 2592 w
+(image) 3122 2592 w
+(of) 3457 2592 w
+(a) 3595 2592 w
+(piece) 3690 2592 w
+(of) 3985 2592 w
+(text) 4123 2592 w
+(held) 4354 2592 w
+(in) 4604 2592 w
+(a) 4735 2592 w
+(data) 4830 2592 w
+(structure) 720 2712 w
+(called) 1192 2712 w
+(a) 1509 2712 w
+10 /LucidaTypewriter f
+(Frame) 1598 2712 w
+10 /LucidaSansUnicode00 f
+(,) 1958 2712 w
+(which) 2024 2712 w
+(in) 2339 2712 w
+(turn) 2463 2712 w
+(represents) 2698 2712 w
+(a) 3245 2712 w
+(rectangular) 3333 2712 w
+(window) 3917 2712 w
+(full) 4319 2712 w
+(of) 4509 2712 w
+(text) 4640 2712 w
+(dis\255) 4864 2712 w
+(played) 720 2832 w
+(in) 1085 2832 w
+(some) 1223 2832 w
+10 /LucidaTypewriter f
+(Bitmap) 1531 2832 w
+10 /LucidaSansUnicode00 f
+(.) 1963 2832 w
+(Each) 2074 2832 w
+10 /LucidaTypewriter f
+(Flayer) 2343 2832 w
+10 /LucidaSansUnicode00 f
+(appears) 2822 2832 w
+(in) 3253 2832 w
+(a) 3391 2832 w
+(global) 3493 2832 w
+(list) 3839 2832 w
+(that) 4032 2832 w
+(orders) 4270 2832 w
+(them) 4631 2832 w
+(all) 4927 2832 w
+(front-to-back) 720 2952 w
+(on) 1439 2952 w
+(the) 1602 2952 w
+(display,) 1797 2952 w
+(and) 2211 2952 w
+(simultaneously) 2430 2952 w
+(as) 3198 2952 w
+(an) 3343 2952 w
+(element) 3499 2952 w
+(of) 3927 2952 w
+(a) 4064 2952 w
+(per-file) 4158 2952 w
+(array) 4566 2952 w
+(that) 4849 2952 w
+(holds) 720 3072 w
+(all) 1026 3072 w
+(the) 1179 3072 w
+(open) 1374 3072 w
+(windows) 1656 3072 w
+(for) 2116 3072 w
+(that) 2295 3072 w
+(file.) 2526 3072 w
+(The) 2782 3072 w
+(complement) 3004 3072 w
+(in) 3646 3072 w
+(the) 3778 3072 w
+(terminal) 3974 3072 w
+(of) 4417 3072 w
+(the) 4556 3072 w
+10 /LucidaTypewriter f
+(File) 4752 3072 w
+10 /LucidaSansUnicode00 f
+(on the host is called a) 720 3192 w
+10 /LucidaTypewriter f
+(Text) 1819 3192 w
+10 /LucidaSansUnicode00 f
+(; each connects its) 2107 3192 w
+10 /LucidaTypewriter f
+(Flayers) 3039 3192 w
+10 /LucidaSansUnicode00 f
+(to the associated) 3575 3192 w
+10 /LucidaTypewriter f
+(Rasp) 4433 3192 w
+10 /LucidaSansUnicode00 f
+(.) 4721 3192 w
+1842 3678 1842 3390 Dl
+1842 3390 2648 3390 Dl
+2649 3390 2649 3678 Dl
+2649 3678 1843 3678 Dl
+10 /LucidaTypewriter f
+(Text) 2102 3554 w
+2764 3678 2764 3390 Dl
+2764 3390 3412 3390 Dl
+3412 3390 3412 3678 Dl
+3412 3678 2764 3678 Dl
+(Rasp) 2944 3554 w
+2649 3534 2764 3534 Dl
+3412 3534 3584 3534 Dl
+3513 3552 3585 3534 Dl
+3513 3516 3585 3534 Dl
+10 /LucidaSansUnicode00 f
+(to host) 3685 3554 w
+2246 3678 2246 3793 Dl
+2246 3793 2030 3793 Dl
+2030 3793 2030 4009 Dl
+2030 4009 2145 4009 Dl
+2145 4153 2145 3865 Dl
+2145 3865 2685 3865 Dl
+2685 3865 2685 4153 Dl
+2685 4153 2145 4153 Dl
+10 /LucidaTypewriter f
+(Flayer) 2199 4029 w
+2685 4153 2685 3865 Dl
+2685 3865 3225 3865 Dl
+3225 3865 3225 4153 Dl
+3225 4153 2685 4153 Dl
+3225 4153 3225 3865 Dl
+3225 3865 3765 3865 Dl
+3765 3865 3765 4153 Dl
+3765 4153 3225 4153 Dl
+3765 4153 3765 3865 Dl
+3765 3865 4305 3865 Dl
+4305 3865 4305 4153 Dl
+4305 4153 3765 4153 Dl
+(...) 3927 4029 w
+(...) 2847 4490 w
+2145 4614 2145 4326 Dl
+2145 4326 2685 4326 Dl
+2685 4326 2685 4614 Dl
+2685 4614 2145 4614 Dl
+(Frame) 2235 4490 w
+2415 4153 2415 4325 Dl
+2955 4153 2955 4325 Dl
+3495 4153 3495 4325 Dl
+4035 4153 4035 4325 Dl
+1454 4614 1454 4326 Dl
+1454 4326 1943 4326 Dl
+1943 4326 1943 4614 Dl
+1943 4614 1454 4614 Dl
+(Bitmap) 1482 4430 w
+10 /LucidaSansUnicode00 f
+(\(cache\)) 1528 4550 w
+1943 4470 2144 4470 Dl
+2415 4614 2415 4729 Dl
+2415 4729 2055 4729 Dl
+2055 4729 2055 4945 Dl
+2055 4945 2170 4945 Dl
+2170 5089 2170 4801 Dl
+2170 4801 2494 4801 Dl
+2494 4801 2494 5089 Dl
+2494 5089 2170 5089 Dl
+10 /LucidaTypewriter f
+(Box) 2224 4965 w
+2494 5089 2494 4801 Dl
+2494 4801 2818 4801 Dl
+2818 4801 2818 5089 Dl
+2818 5089 2494 5089 Dl
+2818 5089 2818 4801 Dl
+2818 4801 3142 4801 Dl
+3142 4801 3142 5089 Dl
+3142 5089 2818 5089 Dl
+3142 5089 3142 4801 Dl
+3142 4801 3466 4801 Dl
+3466 4801 3466 5089 Dl
+3466 5089 3142 5089 Dl
+(...) 3196 4965 w
+8 /LucidaSans-Italic f
+(Figure) 720 5267 w
+(6.) 1011 5267 w
+(Data) 1133 5267 w
+(structures) 1366 5267 w
+(in) 1808 5267 w
+(the) 1927 5267 w
+(terminal.) 2095 5267 w
+8 /LucidaTypewriter f
+(Flayers) 2522 5267 w
+8 /LucidaSans-Italic f
+(are) 2974 5267 w
+(also) 3149 5267 w
+(linked) 3352 5267 w
+(together) 3632 5267 w
+(into) 4006 5267 w
+(a) 4202 5267 w
+(front-to-back) 4298 5267 w
+(list.) 4899 5267 w
+8 /LucidaTypewriter f
+(Boxes) 720 5367 w
+8 /LucidaSans-Italic f
+(are) 1036 5367 w
+(discussed) 1191 5367 w
+(in) 1587 5367 w
+(the) 1686 5367 w
+(next) 1834 5367 w
+(section.) 2025 5367 w
+10 /LucidaSansUnicode00 f
+(The) 970 5643 w
+10 /LucidaTypewriter f
+(Bitmap) 1191 5643 w
+10 /LucidaSansUnicode00 f
+(for) 1663 5643 w
+(a) 1842 5643 w
+10 /LucidaTypewriter f
+(Frame) 1937 5643 w
+10 /LucidaSansUnicode00 f
+(contains) 2337 5643 w
+(the) 2785 5643 w
+(image) 2980 5643 w
+(of) 3315 5643 w
+(the) 3454 5643 w
+(text.) 3650 5643 w
+(For) 3946 5643 w
+(a) 4143 5643 w
+(fully) 4239 5643 w
+(visible) 4489 5643 w
+(win\255) 4839 5643 w
+(dow,) 720 5763 w
+(the) 989 5763 w
+10 /LucidaTypewriter f
+(Bitmap) 1180 5763 w
+10 /LucidaSansUnicode00 f
+(will) 1648 5763 w
+(be) 1848 5763 w
+(the) 2003 5763 w
+(screen) 2194 5763 w
+(\(or) 2547 5763 w
+(at) 2718 5763 w
+(least) 2846 5763 w
+(the) 3110 5763 w
+10 /LucidaTypewriter f
+(Layer) 3300 5763 w
+10 /LucidaSansUnicode00 f
+(in) 3695 5763 w
+(which) 3821 5763 w
+10 /LucidaTypewriter f
+(sam) 4137 5763 w
+10 /LucidaSansUnicode00 f
+(is) 4388 5763 w
+(being) 4503 5763 w
+(run\),) 4810 5763 w
+(while) 720 5883 w
+(for) 1015 5883 w
+(partially) 1196 5883 w
+(obscured) 1628 5883 w
+(windows) 2119 5883 w
+(the) 2582 5883 w
+10 /LucidaTypewriter f
+(Bitmap) 2780 5883 w
+10 /LucidaSansUnicode00 f
+(will) 3255 5883 w
+(be) 3462 5883 w
+(off-screen.) 3624 5883 w
+(If) 4241 5883 w
+(the) 4350 5883 w
+(window) 4548 5883 w
+(is) 4960 5883 w
+(fully obscured, the) 720 6003 w
+10 /LucidaTypewriter f
+(Bitmap) 1660 6003 w
+10 /LucidaSansUnicode00 f
+(will be null.) 2124 6003 w
+(The) 970 6159 w
+10 /LucidaTypewriter f
+(Bitmap) 1186 6159 w
+10 /LucidaSansUnicode00 f
+(is) 1653 6159 w
+(a) 1768 6159 w
+(kind) 1858 6159 w
+(of) 2105 6159 w
+(cache.) 2238 6159 w
+(When) 2612 6159 w
+(making) 2913 6159 w
+(changes) 3307 6159 w
+(to) 3741 6159 w
+(the) 3874 6159 w
+(display,) 4064 6159 w
+(most) 4473 6159 w
+(of) 4751 6159 w
+(the) 4885 6159 w
+(original) 720 6279 w
+(image) 1129 6279 w
+(will) 1465 6279 w
+(look) 1669 6279 w
+(the) 1918 6279 w
+(same) 2113 6279 w
+(in) 2408 6279 w
+(the) 2539 6279 w
+(final) 2734 6279 w
+(image,) 2986 6279 w
+(and) 3353 6279 w
+(the) 3573 6279 w
+(update) 3768 6279 w
+(algorithms) 4144 6279 w
+(exploit) 4704 6279 w
+(this.) 720 6399 w
+(The) 1032 6399 w
+10 /LucidaTypewriter f
+(Frame) 1282 6399 w
+10 /LucidaSansUnicode00 f
+(software) 1711 6399 w
+(updates) 2196 6399 w
+(the) 2653 6399 w
+(image) 2878 6399 w
+(in) 3243 6399 w
+(the) 3404 6399 w
+10 /LucidaTypewriter f
+(Bitmap) 3629 6399 w
+10 /LucidaSansUnicode00 f
+(incrementally;) 4131 6399 w
+(the) 4885 6399 w
+10 /LucidaTypewriter f
+(Bitmap) 720 6519 w
+10 /LucidaSansUnicode00 f
+(is) 1201 6519 w
+(not) 1330 6519 w
+(just) 1539 6519 w
+(an) 1768 6519 w
+(image,) 1934 6519 w
+(it) 2310 6519 w
+(is) 2425 6519 w
+(a) 2554 6519 w
+(data) 2658 6519 w
+(structure.) 2917 6519 w
+6 /LucidaSansUnicode00 f
+(18,19) 3387 6469 w
+10 /LucidaSansUnicode00 f
+(The) 3606 6519 w
+(job) 3835 6519 w
+(of) 4037 6519 w
+(the) 4183 6519 w
+(software) 4386 6519 w
+(that) 4849 6519 w
+(updates) 720 6639 w
+(the) 1145 6639 w
+(display) 1339 6639 w
+(is) 1720 6639 w
+(therefore) 1839 6639 w
+(to) 2325 6639 w
+(use) 2462 6639 w
+(as) 2670 6639 w
+(much) 2815 6639 w
+(as) 3122 6639 w
+(possible) 3267 6639 w
+(of) 3709 6639 w
+(the) 3846 6639 w
+(existing) 4040 6639 w
+(image) 4466 6639 w
+(\(con\255) 4800 6639 w
+(verting) 720 6759 w
+(the) 1131 6759 w
+(text) 1358 6759 w
+(from) 1621 6759 w
+(ASCII) 1925 6759 w
+(characters) 2247 6759 w
+(to) 2819 6759 w
+(pixels) 2988 6759 w
+(is) 3348 6759 w
+(expensive\)) 3499 6759 w
+(in) 4089 6759 w
+(a) 4251 6759 w
+(sort) 4377 6759 w
+(of) 4638 6759 w
+(two-) 4807 6759 w
+(dimensional) 720 6879 w
+(string) 1348 6879 w
+(insertion) 1668 6879 w
+(algorithm.) 2134 6879 w
+(The) 2705 6879 w
+(details) 2925 6879 w
+(of) 3284 6879 w
+(this) 3421 6879 w
+(process) 3639 6879 w
+(are) 4052 6879 w
+(described) 4243 6879 w
+(in) 4755 6879 w
+(the) 4885 6879 w
+(next section.) 720 6999 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 24 24
+%%Page: 25 25
+/saveobj save def
+mark
+25 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 25 \255) 2752 480 w
+(The) 970 840 w
+10 /LucidaTypewriter f
+(Frame) 1200 840 w
+10 /LucidaSansUnicode00 f
+(software) 1609 840 w
+(has) 2073 840 w
+(no) 2290 840 w
+(code) 2462 840 w
+(to) 2742 840 w
+(support) 2889 840 w
+(overlapping) 3316 840 w
+(windows;) 3939 840 w
+(its) 4441 840 w
+(job) 4608 840 w
+(is) 4812 840 w
+(to) 4942 840 w
+(keep) 720 960 w
+(a) 986 960 w
+(single) 1074 960 w
+10 /LucidaTypewriter f
+(Bitmap) 1396 960 w
+10 /LucidaSansUnicode00 f
+(up) 1861 960 w
+(to) 2019 960 w
+(date.) 2150 960 w
+(It) 2458 960 w
+(falls) 2557 960 w
+(to) 2791 960 w
+(the) 2922 960 w
+10 /LucidaTypewriter f
+(Flayer) 3110 960 w
+10 /LucidaSansUnicode00 f
+(software to multiplex the vari\255) 3575 960 w
+(ous) 720 1080 w
+10 /LucidaTypewriter f
+(Bitmaps) 936 1080 w
+10 /LucidaSansUnicode00 f
+(onto) 1482 1080 w
+(the) 1745 1080 w
+(screen.) 1942 1080 w
+(The) 2365 1080 w
+(problem) 2589 1080 w
+(of) 3038 1080 w
+(maintaining) 3179 1080 w
+(overlapping) 3797 1080 w
+10 /LucidaTypewriter f
+(Flayers) 4413 1080 w
+10 /LucidaSansUnicode00 f
+(is) 4960 1080 w
+(easier) 720 1200 w
+(than) 1057 1200 w
+(for) 1322 1200 w
+10 /LucidaTypewriter f
+(Layers) 1510 1200 w
+6 /LucidaSansUnicode00 f
+(17) 1942 1150 w
+10 /LucidaSansUnicode00 f
+(because) 2066 1200 w
+(changes) 2508 1200 w
+(are) 2955 1200 w
+(made) 3155 1200 w
+(synchronously) 3470 1200 w
+(and) 4215 1200 w
+(because) 4443 1200 w
+(the) 4885 1200 w
+(contents) 720 1320 w
+(of) 1181 1320 w
+(the) 1323 1320 w
+(window) 1522 1320 w
+(can) 1935 1320 w
+(be) 2148 1320 w
+(reconstructed) 2312 1320 w
+(from) 3026 1320 w
+(the) 3303 1320 w
+(data) 3503 1320 w
+(stored) 3758 1320 w
+(in) 4112 1320 w
+(the) 4248 1320 w
+10 /LucidaTypewriter f
+(Frame) 4448 1320 w
+10 /LucidaSansUnicode00 f
+(;) 4808 1320 w
+(the) 4885 1320 w
+10 /LucidaTypewriter f
+(Layers) 720 1440 w
+10 /LucidaSansUnicode00 f
+(software) 1195 1440 w
+(makes) 1653 1440 w
+(no) 2008 1440 w
+(such) 2173 1440 w
+(assumptions.) 2441 1440 w
+(In) 3162 1440 w
+10 /LucidaTypewriter f
+(sam) 3295 1440 w
+10 /LucidaSansUnicode00 f
+(,) 3511 1440 w
+(the) 3585 1440 w
+(window) 3782 1440 w
+(being) 4193 1440 w
+(changed) 4507 1440 w
+(is) 4960 1440 w
+(almost) 720 1560 w
+(always) 1091 1560 w
+(fully) 1455 1560 w
+(visible,) 1709 1560 w
+(because) 2095 1560 w
+(the) 2534 1560 w
+(current) 2734 1560 w
+(window) 3129 1560 w
+(is) 3543 1560 w
+(always) 3668 1560 w
+(fully) 4032 1560 w
+(visible,) 4286 1560 w
+(by) 4672 1560 w
+(con\255) 4833 1560 w
+(struction.) 720 1680 w
+(However,) 1260 1680 w
+(when) 1754 1680 w
+(multi-file) 2056 1680 w
+(changes) 2560 1680 w
+(are) 3004 1680 w
+(being) 3200 1680 w
+(made,) 3516 1680 w
+(or) 3859 1680 w
+(when) 4005 1680 w
+(more) 4306 1680 w
+(than) 4601 1680 w
+(one) 4861 1680 w
+(window is open on a file, it may be necessary to update partially obscured windows.) 720 1800 w
+(There) 970 1956 w
+(are) 1285 1956 w
+(three) 1474 1956 w
+(cases:) 1763 1956 w
+(the) 2096 1956 w
+(window) 2288 1956 w
+(is) 2695 1956 w
+(fully) 2813 1956 w
+(visible,) 3060 1956 w
+(invisible) 3439 1956 w
+(\(fully) 3877 1956 w
+(obscured\),) 4157 1956 w
+(or) 4708 1956 w
+(par\255) 4848 1956 w
+(tially) 720 2076 w
+(visible.) 997 2076 w
+(If) 1416 2076 w
+(fully) 1528 2076 w
+(visible,) 1783 2076 w
+(the) 2169 2076 w
+10 /LucidaTypewriter f
+(Bitmap) 2369 2076 w
+10 /LucidaSansUnicode00 f
+(is) 2846 2076 w
+(part) 2971 2076 w
+(of) 3212 2076 w
+(the) 3355 2076 w
+(screen,) 3555 2076 w
+(so) 3949 2076 w
+(when) 4106 2076 w
+(the) 4408 2076 w
+10 /LucidaTypewriter f
+(Flayer) 4608 2076 w
+10 /LucidaSansUnicode00 f
+(update) 720 2196 w
+(routine) 1098 2196 w
+(calls) 1488 2196 w
+(the) 1745 2196 w
+10 /LucidaTypewriter f
+(Frame) 1942 2196 w
+10 /LucidaSansUnicode00 f
+(update) 2344 2196 w
+(routine,) 2722 2196 w
+(the) 3144 2196 w
+(screen) 3341 2196 w
+(will) 3700 2196 w
+(be) 3906 2196 w
+(updated) 4067 2196 w
+(directly.) 4509 2196 w
+(If) 4974 2196 w
+(the) 720 2316 w
+(window) 918 2316 w
+(is) 1330 2316 w
+(invisible,) 1453 2316 w
+(there) 1928 2316 w
+(is) 2223 2316 w
+(no) 2346 2316 w
+(associated) 2512 2316 w
+10 /LucidaTypewriter f
+(Bitmap) 3064 2316 w
+10 /LucidaSansUnicode00 f
+(,) 3496 2316 w
+(and) 3571 2316 w
+(all) 3793 2316 w
+(that) 3948 2316 w
+(is) 4181 2316 w
+(necessary) 4303 2316 w
+(is) 4820 2316 w
+(to) 4942 2316 w
+(update) 720 2436 w
+(the) 1095 2436 w
+10 /LucidaTypewriter f
+(Frame) 1290 2436 w
+10 /LucidaSansUnicode00 f
+(data) 1690 2436 w
+(structure,) 1940 2436 w
+(not) 2450 2436 w
+(the) 2650 2436 w
+(image.) 2845 2436 w
+(If) 3244 2436 w
+(the) 3350 2436 w
+(window) 3545 2436 w
+(is) 3954 2436 w
+(partially) 4074 2436 w
+(visible,) 4504 2436 w
+(the) 4885 2436 w
+10 /LucidaTypewriter f
+(Frame) 720 2556 w
+10 /LucidaSansUnicode00 f
+(routine) 1132 2556 w
+(is) 1531 2556 w
+(called) 1662 2556 w
+(to) 1996 2556 w
+(update) 2145 2556 w
+(the) 2532 2556 w
+(image) 2738 2556 w
+(in) 3084 2556 w
+(the) 3226 2556 w
+(off-screen) 3432 2556 w
+10 /LucidaTypewriter f
+(Bitmap) 3993 2556 w
+10 /LucidaSansUnicode00 f
+(,) 4425 2556 w
+(which) 4508 2556 w
+(may) 4840 2556 w
+(require) 720 2676 w
+(regenerating) 1108 2676 w
+(it) 1767 2676 w
+(from) 1873 2676 w
+(the) 2145 2676 w
+(text) 2340 2676 w
+(of) 2571 2676 w
+(the) 2709 2676 w
+(window.) 2904 2676 w
+(The) 3377 2676 w
+10 /LucidaTypewriter f
+(Flayer) 3598 2676 w
+10 /LucidaSansUnicode00 f
+(code) 4070 2676 w
+(then) 4341 2676 w
+(clips) 4598 2676 w
+(this) 4861 2676 w
+10 /LucidaTypewriter f
+(Bitmap) 720 2796 w
+10 /LucidaSansUnicode00 f
+(against) 1195 2796 w
+(the) 1589 2796 w
+10 /LucidaTypewriter f
+(Bitmaps) 1787 2796 w
+10 /LucidaSansUnicode00 f
+(of) 2334 2796 w
+(all) 2475 2796 w
+10 /LucidaTypewriter f
+(Frames) 2631 2796 w
+10 /LucidaSansUnicode00 f
+(in) 3106 2796 w
+(front) 3240 2796 w
+(of) 3521 2796 w
+(the) 3662 2796 w
+10 /LucidaTypewriter f
+(Frame) 3860 2796 w
+10 /LucidaSansUnicode00 f
+(being) 4263 2796 w
+(modified,) 4577 2796 w
+(and the remainder is copied to the display.) 720 2916 w
+(This) 970 3072 w
+(is) 1212 3072 w
+(much) 1329 3072 w
+(faster) 1634 3072 w
+(than) 1949 3072 w
+(recreating) 2203 3072 w
+(the) 2731 3072 w
+(image) 2924 3072 w
+(off-screen) 3257 3072 w
+(for) 3805 3072 w
+(every) 3982 3072 w
+(change,) 4277 3072 w
+(or) 4695 3072 w
+(clip\255) 4835 3072 w
+(ping) 720 3192 w
+(all) 975 3192 w
+(the) 1127 3192 w
+(changes) 1321 3192 w
+(made) 1759 3192 w
+(to) 2065 3192 w
+(the) 2202 3192 w
+(image) 2396 3192 w
+(during) 2730 3192 w
+(its) 3088 3192 w
+(update.) 3244 3192 w
+(Unfortunately,) 3683 3192 w
+(these) 4414 3192 w
+(caches) 4714 3192 w
+(can) 720 3312 w
+(also) 934 3312 w
+(consume) 1176 3312 w
+(prohibitive) 1658 3312 w
+(amounts) 2226 3312 w
+(of) 2693 3312 w
+(memory,) 2837 3312 w
+(so) 3311 3312 w
+(they) 3469 3312 w
+(are) 3722 3312 w
+(freed) 3920 3312 w
+(fairly) 4220 3312 w
+(liberally) 4510 3312 w
+10 /LucidaSansUnicode20 f
+(\024) 4940 3312 w
+10 /LucidaSansUnicode00 f
+(after) 720 3432 w
+(every) 989 3432 w
+(change) 1289 3432 w
+(to) 1680 3432 w
+(the) 1820 3432 w
+(front-to-back) 2017 3432 w
+(order) 2738 3432 w
+(of) 3042 3432 w
+(the) 3182 3432 w
+10 /LucidaTypewriter f
+(Flayers) 3379 3432 w
+10 /LucidaSansUnicode00 f
+(.) 3883 3432 w
+(The) 3989 3432 w
+(result) 4212 3432 w
+(is) 4530 3432 w
+(that) 4652 3432 w
+(the) 4885 3432 w
+(off-screen) 720 3552 w
+10 /LucidaTypewriter f
+(Bitmaps) 1264 3552 w
+10 /LucidaSansUnicode00 f
+(exist) 1802 3552 w
+(only) 2070 3552 w
+(while) 2308 3552 w
+(multi-window) 2595 3552 w
+(changes) 3306 3552 w
+(are) 3740 3552 w
+(occurring,) 3927 3552 w
+(which) 4454 3552 w
+(is) 4770 3552 w
+(the) 4885 3552 w
+(only time the performance improvement they provide is needed.) 720 3672 w
+(Also, the user interface) 3913 3672 w
+(causes) 720 3792 w
+(fully-obscured) 1080 3792 w
+(windows) 1829 3792 w
+(to) 2283 3792 w
+(be) 2416 3792 w
+(the) 2570 3792 w
+(easiest) 2760 3792 w
+(to) 3130 3792 w
+(make) 3263 3792 w
+10 /LucidaSansUnicode20 f
+(\024) 3560 3792 w
+10 /LucidaSansUnicode00 f
+(creating) 3695 3792 w
+(a) 4123 3792 w
+(canonically) 4213 3792 w
+(sized) 4784 3792 w
+(and) 720 3912 w
+(placed) 943 3912 w
+(window) 1303 3912 w
+(requires) 1715 3912 w
+(only) 2157 3912 w
+(a) 2403 3912 w
+(button) 2500 3912 w
+(click) 2864 3912 w
+10 /LucidaSansUnicode20 f
+(\024) 3124 3912 w
+10 /LucidaSansUnicode00 f
+(which) 3266 3912 w
+(reduces) 3589 3912 w
+(the) 4011 3912 w
+(need) 4208 3912 w
+(for) 4487 3912 w
+(caching) 4668 3912 w
+(still further.) 720 4032 w
+10 /LucidaSans-Demi f
+(Screen update) 720 4308 w
+10 /LucidaSansUnicode00 f
+(Only two low-level primitives are needed for incremental update:) 720 4464 w
+10 /LucidaTypewriter f
+(bitblt) 3918 4464 w
+10 /LucidaSansUnicode00 f
+(,) 4350 4464 w
+(which) 4415 4464 w
+(copies) 4729 4464 w
+(rectangles) 720 4584 w
+(of) 1267 4584 w
+(pixels,) 1412 4584 w
+(and) 1780 4584 w
+10 /LucidaTypewriter f
+(string) 2007 4584 w
+10 /LucidaSansUnicode00 f
+(\(which) 2486 4584 w
+(in) 2847 4584 w
+(turn) 2985 4584 w
+(calls) 3234 4584 w
+10 /LucidaTypewriter f
+(bitblt) 3496 4584 w
+10 /LucidaSansUnicode00 f
+(\),) 3928 4584 w
+(which) 4039 4584 w
+(draws) 4366 4584 w
+(a) 4699 4584 w
+(null-) 4800 4584 w
+(terminated) 720 4704 w
+(character) 1289 4704 w
+(string) 1778 4704 w
+(in) 2100 4704 w
+(a) 2231 4704 w
+10 /LucidaTypewriter f
+(Bitmap) 2326 4704 w
+10 /LucidaSansUnicode00 f
+(.) 2758 4704 w
+(A) 2862 4704 w
+10 /LucidaTypewriter f
+(Frame) 2972 4704 w
+10 /LucidaSansUnicode00 f
+(contains) 3373 4704 w
+(a) 3822 4704 w
+(list) 3918 4704 w
+(of) 4105 4704 w
+10 /LucidaTypewriter f
+(Boxes) 4244 4704 w
+10 /LucidaSansUnicode00 f
+(,) 4604 4704 w
+(each) 4677 4704 w
+(of) 4942 4704 w
+(which) 720 4824 w
+(defines) 1037 4824 w
+(a) 1427 4824 w
+(horizontal) 1518 4824 w
+(strip) 2048 4824 w
+(of) 2305 4824 w
+(text) 2439 4824 w
+(in) 2665 4824 w
+(the) 2791 4824 w
+(window) 2981 4824 w
+(\(see) 3385 4824 w
+(Figure) 3616 4824 w
+(7\).) 3955 4824 w
+(A) 4150 4824 w
+10 /LucidaTypewriter f
+(Box) 4254 4824 w
+10 /LucidaSansUnicode00 f
+(has) 4505 4824 w
+(a) 4708 4824 w
+(char\255) 4798 4824 w
+(acter) 720 4944 w
+(string) 998 4944 w
+10 /LucidaTypewriter f
+(str) 1318 4944 w
+10 /LucidaSansUnicode00 f
+(,) 1534 4944 w
+(and) 1604 4944 w
+(a) 1822 4944 w
+10 /LucidaTypewriter f
+(Rectangle) 1915 4944 w
+(rect) 2601 4944 w
+10 /LucidaSansUnicode00 f
+(that) 2927 4944 w
+(defines) 3156 4944 w
+(the) 3548 4944 w
+(location) 3741 4944 w
+(of) 4164 4944 w
+(the) 4301 4944 w
+(strip) 4495 4944 w
+(in) 4755 4944 w
+(the) 4885 4944 w
+(window.) 720 5064 w
+(\(The) 1200 5064 w
+(text) 1460 5064 w
+(in) 1697 5064 w
+10 /LucidaTypewriter f
+(str) 1834 5064 w
+10 /LucidaSansUnicode00 f
+(is) 2096 5064 w
+(stored) 2222 5064 w
+(in) 2577 5064 w
+(the) 2714 5064 w
+10 /LucidaTypewriter f
+(Box) 2915 5064 w
+10 /LucidaSansUnicode00 f
+(separately) 3177 5064 w
+(from) 3718 5064 w
+(the) 3996 5064 w
+10 /LucidaTypewriter f
+(Rasp) 4197 5064 w
+10 /LucidaSansUnicode00 f
+(associated) 4531 5064 w
+(with) 720 5184 w
+(the) 958 5184 w
+(window) 1147 5184 w
+10 /LucidaSansUnicode20 f
+(\031) 1516 5184 w
+10 /LucidaSansUnicode00 f
+(s) 1548 5184 w
+(file,) 1633 5184 w
+(so) 1850 5184 w
+10 /LucidaTypewriter f
+(Boxes) 1996 5184 w
+10 /LucidaSansUnicode00 f
+(are) 2390 5184 w
+(self-contained.\)) 2576 5184 w
+(The) 3414 5184 w
+(invariant) 3629 5184 w
+(is) 4085 5184 w
+(that) 4199 5184 w
+(the) 4424 5184 w
+(image) 4613 5184 w
+(of) 4942 5184 w
+(the) 720 5304 w
+10 /LucidaTypewriter f
+(Box) 908 5304 w
+10 /LucidaSansUnicode00 f
+(can) 1157 5304 w
+(be) 1358 5304 w
+(reproduced) 1510 5304 w
+(by) 2100 5304 w
+(calling) 2248 5304 w
+10 /LucidaTypewriter f
+(string) 2598 5304 w
+10 /LucidaSansUnicode00 f
+(with) 3063 5304 w
+(argument) 3301 5304 w
+10 /LucidaTypewriter f
+(str) 3802 5304 w
+10 /LucidaSansUnicode00 f
+(to draw the string in) 4050 5304 w
+10 /LucidaTypewriter f
+(rect) 720 5424 w
+10 /LucidaSansUnicode00 f
+(,) 1008 5424 w
+(and) 1077 5424 w
+(the) 1294 5424 w
+(resulting) 1486 5424 w
+(picture) 1952 5424 w
+(fits) 2328 5424 w
+(perfectly) 2519 5424 w
+(within) 2978 5424 w
+10 /LucidaTypewriter f
+(rect) 3311 5424 w
+10 /LucidaSansUnicode00 f
+(.) 3599 5424 w
+(In) 3700 5424 w
+(other) 3829 5424 w
+(words,) 4124 5424 w
+(the) 4487 5424 w
+10 /LucidaTypewriter f
+(Boxes) 4680 5424 w
+10 /LucidaSansUnicode00 f
+(define) 720 5544 w
+(the) 1071 5544 w
+(tiling) 1274 5544 w
+(of) 1570 5544 w
+(the) 1716 5544 w
+(window.) 1919 5544 w
+(The) 2400 5544 w
+(tiling) 2629 5544 w
+(may) 2925 5544 w
+(be) 3173 5544 w
+(complicated) 3340 5544 w
+(by) 3975 5544 w
+(long) 4137 5544 w
+(lines) 4398 5544 w
+(of) 4672 5544 w
+(text,) 4817 5544 w
+(which) 720 5664 w
+(are) 1038 5664 w
+(folded) 1227 5664 w
+(onto) 1573 5664 w
+(the) 1832 5664 w
+(next) 2025 5664 w
+(line.) 2279 5664 w
+(Some) 2557 5664 w
+(editors) 2859 5664 w
+(use) 3235 5664 w
+(horizontal) 3442 5664 w
+(scrolling) 3974 5664 w
+(to) 4427 5664 w
+(avoid) 4563 5664 w
+(this) 4861 5664 w
+(complication,) 720 5784 w
+(but) 1416 5784 w
+(to) 1621 5784 w
+(be) 1762 5784 w
+(comfortable) 1924 5784 w
+(this) 2551 5784 w
+(technique) 2773 5784 w
+(requires) 3294 5784 w
+(that) 3735 5784 w
+(lines) 3968 5784 w
+(not) 4237 5784 w
+(be) 4439 5784 w
+10 /LucidaSans-Italic f
+(too) 4600 5784 w
+10 /LucidaSansUnicode00 f
+(long;) 4794 5784 w
+10 /LucidaTypewriter f
+(sam) 720 5904 w
+10 /LucidaSansUnicode00 f
+(has) 976 5904 w
+(no) 1185 5904 w
+(such) 1349 5904 w
+(restriction.) 1616 5904 w
+(Also,) 2216 5904 w
+(and) 2499 5904 w
+(perhaps) 2720 5904 w
+(more) 3152 5904 w
+(importantly,) 3444 5904 w
+(UNIX) 4076 5904 w
+(programs) 4352 5904 w
+(and) 4860 5904 w
+(terminals traditionally fold long lines to make their contents fully visible.) 720 6024 w
+(Two) 970 6180 w
+(special) 1212 6180 w
+(kinds) 1587 6180 w
+(of) 1891 6180 w
+10 /LucidaTypewriter f
+(Boxes) 2030 6180 w
+10 /LucidaSansUnicode00 f
+(contain) 2431 6180 w
+(a) 2829 6180 w
+(single) 2925 6180 w
+(character:) 3256 6180 w
+(either) 3779 6180 w
+(a) 4102 6180 w
+(newline) 4199 6180 w
+(or) 4612 6180 w
+(a) 4756 6180 w
+(tab.) 4853 6180 w
+(Newlines) 720 6300 w
+(and) 1192 6300 w
+(tabs) 1410 6300 w
+(are) 1654 6300 w
+(white) 1844 6300 w
+(space.) 2143 6300 w
+(A) 2521 6300 w
+(newline) 2628 6300 w
+10 /LucidaTypewriter f
+(Box) 3037 6300 w
+10 /LucidaSansUnicode00 f
+(always) 3291 6300 w
+(extends) 3648 6300 w
+(to) 4072 6300 w
+(the) 4208 6300 w
+(right) 4400 6300 w
+(edge) 4668 6300 w
+(of) 4942 6300 w
+(the) 720 6420 w
+(window,) 912 6420 w
+(forcing) 1350 6420 w
+(the) 1730 6420 w
+(following) 1922 6420 w
+10 /LucidaTypewriter f
+(Box) 2406 6420 w
+10 /LucidaSansUnicode00 f
+(to) 2659 6420 w
+(the) 2794 6420 w
+(next) 2986 6420 w
+(line.) 3240 6420 w
+(The) 3518 6420 w
+(width) 3737 6420 w
+(of) 4043 6420 w
+(a) 4179 6420 w
+(tab) 4272 6420 w
+(depends) 4465 6420 w
+(on) 4917 6420 w
+(where) 720 6540 w
+(it) 1052 6540 w
+(is) 1158 6540 w
+(located:) 1278 6540 w
+(it) 1702 6540 w
+(forces) 1808 6540 w
+(the) 2145 6540 w
+(next) 2340 6540 w
+10 /LucidaTypewriter f
+(Box) 2596 6540 w
+10 /LucidaSansUnicode00 f
+(to) 2852 6540 w
+(begin) 2990 6540 w
+(at) 3302 6540 w
+(a) 3434 6540 w
+(tab) 3529 6540 w
+(location.) 3724 6540 w
+(Tabs) 4213 6540 w
+(also) 4485 6540 w
+(have) 4721 6540 w
+(a) 4985 6540 w
+(minimum) 720 6660 w
+(width) 1215 6660 w
+(equivalent) 1517 6660 w
+(to) 2052 6660 w
+(a) 2184 6660 w
+(blank) 2273 6660 w
+(\(blanks) 2575 6660 w
+(are) 2961 6660 w
+(drawn) 3148 6660 w
+(by) 3481 6660 w
+10 /LucidaTypewriter f
+(string) 3631 6660 w
+10 /LucidaSansUnicode00 f
+(and) 4098 6660 w
+(are) 4313 6660 w
+(not) 4500 6660 w
+(treated) 4695 6660 w
+(specially\); newlines have a minimum width of zero.) 720 6780 w
+(The) 970 6936 w
+(update) 1195 6936 w
+(algorithms) 1575 6936 w
+(always) 2139 6936 w
+(use) 2502 6936 w
+(the) 2715 6936 w
+10 /LucidaTypewriter f
+(Bitmap) 2914 6936 w
+10 /LucidaSansUnicode00 f
+(image) 3390 6936 w
+(of) 3729 6936 w
+(the) 3871 6936 w
+(text) 4070 6936 w
+(\(either) 4305 6936 w
+(the) 4664 6936 w
+(dis\255) 4864 6936 w
+(play) 720 7056 w
+(or) 962 7056 w
+(cache) 1107 7056 w
+10 /LucidaTypewriter f
+(Bitmap) 1425 7056 w
+10 /LucidaSansUnicode00 f
+(\);) 1857 7056 w
+(they) 1965 7056 w
+(never) 2215 7056 w
+(examine) 2525 7056 w
+(the) 2980 7056 w
+(characters) 3178 7056 w
+(within) 3721 7056 w
+(a) 4060 7056 w
+10 /LucidaTypewriter f
+(Box) 4158 7056 w
+10 /LucidaSansUnicode00 f
+(except) 4417 7056 w
+(when) 4783 7056 w
+(the) 720 7176 w
+10 /LucidaTypewriter f
+(Box) 918 7176 w
+10 /LucidaSansUnicode00 f
+(needs) 1177 7176 w
+(to) 1508 7176 w
+(be) 1650 7176 w
+(split) 1813 7176 w
+(in) 2066 7176 w
+(two.) 2201 7176 w
+(Before) 2484 7176 w
+(a) 2837 7176 w
+(change,) 2936 7176 w
+(the) 3360 7176 w
+(window) 3559 7176 w
+(consists) 3972 7176 w
+(of) 4409 7176 w
+(a) 4551 7176 w
+(tiling) 4650 7176 w
+(of) 4942 7176 w
+10 /LucidaTypewriter f
+(Boxes) 720 7296 w
+10 /LucidaSansUnicode00 f
+(;) 1080 7296 w
+(after) 1183 7296 w
+(the) 1480 7296 w
+(change) 1706 7296 w
+(the) 2125 7296 w
+(window) 2351 7296 w
+(is) 2791 7296 w
+(tiled) 2942 7296 w
+(differently.) 3227 7296 w
+(The) 3861 7296 w
+(update) 4113 7296 w
+(algorithms) 4520 7296 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 25 25
+%%Page: 26 26
+/saveobj save def
+mark
+26 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 26 \255) 2752 480 w
+929 990 929 882 Dl
+929 882 1505 882 Dl
+1505 882 1505 990 Dl
+1505 990 929 990 Dl
+1505 990 1505 882 Dl
+1505 882 2700 882 Dl
+2700 882 2700 990 Dl
+2700 990 1505 990 Dl
+8 /LucidaTypewriter f
+(for\(i=0;) 1522 956 w
+(i<NL;) 2044 956 w
+(i++\){) 2392 956 w
+2700 990 2700 882 Dl
+2700 882 3132 882 Dl
+3132 882 3132 990 Dl
+3132 990 2700 990 Dl
+3132 990 3132 882 Dl
+3132 882 4471 882 Dl
+4471 882 4471 990 Dl
+4471 990 3132 990 Dl
+(/*) 3163 956 w
+(for) 3337 956 w
+(each) 3569 956 w
+(element) 3859 956 w
+(*/) 4323 956 w
+4471 990 4471 882 Dl
+4471 882 4831 882 Dl
+4831 882 4831 990 Dl
+4831 990 4471 990 Dl
+8 /LucidaSans-Italic f
+(Figure) 720 1228 w
+(7.) 994 1228 w
+(A) 1099 1228 w
+(line) 1183 1228 w
+(of) 1350 1228 w
+(text) 1455 1228 w
+(showing) 1629 1228 w
+(its) 1977 1228 w
+8 /LucidaTypewriter f
+(Boxes) 2098 1228 w
+8 /LucidaSans-Italic f
+(.) 2388 1228 w
+(The) 2469 1228 w
+(first) 2640 1228 w
+(two) 2829 1228 w
+(blank) 2996 1228 w
+8 /LucidaTypewriter f
+(Boxes) 3242 1228 w
+8 /LucidaSans-Italic f
+(contain) 3561 1228 w
+(tabs;) 3879 1228 w
+(the) 4102 1228 w
+(last) 4254 1228 w
+(contains) 4425 1228 w
+(a) 4782 1228 w
+(new\255) 4861 1228 w
+(line.) 720 1328 w
+(Spaces) 936 1328 w
+(are) 1225 1328 w
+(handled) 1380 1328 w
+(as) 1718 1328 w
+(ordinary) 1832 1328 w
+(characters.) 2195 1328 w
+10 /LucidaSansUnicode00 f
+(rearrange) 720 1568 w
+(the) 1241 1568 w
+(tiles) 1448 1568 w
+(in) 1702 1568 w
+(place,) 1846 1568 w
+(without) 2185 1568 w
+(backup) 2603 1568 w
+(storage.) 3008 1568 w
+(The) 3488 1568 w
+(algorithms) 3722 1568 w
+(are) 4295 1568 w
+(not) 4500 1568 w
+(strictly) 4713 1568 w
+(optimal) 720 1688 w
+10 /LucidaSansUnicode20 f
+(\024) 1129 1688 w
+10 /LucidaSansUnicode00 f
+(for) 1271 1688 w
+(example,) 1452 1688 w
+(they) 1938 1688 w
+(can) 2186 1688 w
+(clear) 2395 1688 w
+(a) 2668 1688 w
+(pixel) 2764 1688 w
+(that) 3043 1688 w
+(is) 3275 1688 w
+(later) 3396 1688 w
+(going) 3655 1688 w
+(to) 3972 1688 w
+(be) 4111 1688 w
+(written) 4271 1688 w
+(upon) 4651 1688 w
+10 /LucidaSansUnicode20 f
+(\024) 4940 1688 w
+10 /LucidaSansUnicode00 f
+(but) 720 1808 w
+(they) 925 1808 w
+(never) 1175 1808 w
+(move) 1485 1808 w
+(a) 1790 1808 w
+(tile) 1888 1808 w
+(that) 2082 1808 w
+(doesn) 2316 1808 w
+10 /LucidaSansUnicode20 f
+(\031) 2609 1808 w
+10 /LucidaSansUnicode00 f
+(t) 2641 1808 w
+(need) 2721 1808 w
+(to) 3001 1808 w
+(be) 3142 1808 w
+(moved,) 3304 1808 w
+(and) 3704 1808 w
+(they) 3928 1808 w
+(move) 4179 1808 w
+(each) 4485 1808 w
+(tile) 4753 1808 w
+(at) 4948 1808 w
+(most) 720 1928 w
+(once.) 998 1928 w
+10 /LucidaTypewriter f
+(Frinsert) 1328 1928 w
+10 /LucidaSansUnicode00 f
+(on) 1940 1928 w
+(a) 2099 1928 w
+(Blit) 2190 1928 w
+(can) 2379 1928 w
+(absorb) 2583 1928 w
+(over) 2953 1928 w
+(a) 3199 1928 w
+(thousand) 3290 1928 w
+(characters) 3779 1928 w
+(a) 4315 1928 w
+(second) 4405 1928 w
+(if) 4784 1928 w
+(the) 4885 1928 w
+(strings being inserted are a few tens of characters long.) 720 2048 w
+(Consider) 970 2204 w
+10 /LucidaTypewriter f
+(frdelete) 1445 2204 w
+10 /LucidaSansUnicode00 f
+(.) 2021 2204 w
+(Its) 2128 2204 w
+(job) 2288 2204 w
+(is) 2486 2204 w
+(to) 2610 2204 w
+(delete) 2752 2204 w
+(a) 3093 2204 w
+(substring) 3192 2204 w
+(from) 3694 2204 w
+(a) 3970 2204 w
+10 /LucidaTypewriter f
+(Frame) 4069 2204 w
+10 /LucidaSansUnicode00 f
+(and) 4473 2204 w
+(restore) 4697 2204 w
+(the) 720 2324 w
+(image) 914 2324 w
+(of) 1248 2324 w
+(the) 1385 2324 w
+10 /LucidaTypewriter f
+(Frame) 1579 2324 w
+10 /LucidaSansUnicode00 f
+(.) 1939 2324 w
+(The) 2042 2324 w
+(image) 2262 2324 w
+(of) 2595 2324 w
+(a) 2731 2324 w
+(substring) 2824 2324 w
+(has) 3320 2324 w
+(a) 3526 2324 w
+(peculiar) 3619 2324 w
+(shape) 4043 2324 w
+(\(see) 4368 2324 w
+(Figure) 4602 2324 w
+(2\)) 4944 2324 w
+(comprising) 720 2444 w
+(possibly) 1309 2444 w
+(a) 1755 2444 w
+(partial) 1857 2444 w
+(line,) 2213 2444 w
+(zero) 2469 2444 w
+(or) 2732 2444 w
+(more) 2882 2444 w
+(full) 3181 2444 w
+(lines,) 3386 2444 w
+(and) 3693 2444 w
+(possibly) 3921 2444 w
+(a) 4368 2444 w
+(final) 4471 2444 w
+(partial) 4731 2444 w
+(line.) 720 2564 w
+(For) 998 2564 w
+(reference,) 1192 2564 w
+(call) 1718 2564 w
+(this) 1920 2564 w
+(the) 2137 2564 w
+10 /LucidaSans-Italic f
+(Z-shape.) 2329 2564 w
+10 /LucidaTypewriter f
+(Frdelete) 2837 2564 w
+10 /LucidaSansUnicode00 f
+(begins) 3450 2564 w
+(by) 3810 2564 w
+(splitting,) 3962 2564 w
+(if) 4430 2564 w
+(necessary,) 4533 2564 w
+(the) 720 2684 w
+10 /LucidaTypewriter f
+(Boxes) 918 2684 w
+10 /LucidaSansUnicode00 f
+(containing) 1321 2684 w
+(the) 1875 2684 w
+(ends) 2074 2684 w
+(of) 2350 2684 w
+(the) 2492 2684 w
+(substring) 2691 2684 w
+(so) 3193 2684 w
+(the) 3349 2684 w
+(substring) 3548 2684 w
+(begins) 4050 2684 w
+(and) 4417 2684 w
+(ends) 4641 2684 w
+(on) 4917 2684 w
+10 /LucidaTypewriter f
+(Box) 720 2804 w
+10 /LucidaSansUnicode00 f
+(boundaries.) 983 2804 w
+(Because) 1636 2804 w
+(the) 2071 2804 w
+(substring) 2272 2804 w
+(is) 2776 2804 w
+(being) 2902 2804 w
+(deleted,) 3220 2804 w
+(its) 3658 2804 w
+(image) 3821 2804 w
+(is) 4162 2804 w
+(not) 4288 2804 w
+(needed,) 4494 2804 w
+(so) 4928 2804 w
+(the) 720 2924 w
+(Z-shape) 927 2924 w
+(is) 1385 2924 w
+(then) 1517 2924 w
+(cleared.) 1786 2924 w
+(Then,) 2253 2924 w
+(tiles) 2580 2924 w
+(\(that) 2834 2924 w
+(is,) 3111 2924 w
+(the) 3276 2924 w
+(images) 3484 2924 w
+(of) 3883 2924 w
+10 /LucidaTypewriter f
+(Boxes) 4034 2924 w
+10 /LucidaSansUnicode00 f
+(\)) 4394 2924 w
+(are) 4480 2924 w
+(copied,) 4685 2924 w
+(using) 720 3044 w
+10 /LucidaTypewriter f
+(bitblt) 1032 3044 w
+10 /LucidaSansUnicode00 f
+(,) 1464 3044 w
+(from) 1542 3044 w
+(immediately) 1820 3044 w
+(after) 2458 3044 w
+(the) 2730 3044 w
+(Z-shape) 2931 3044 w
+(to) 3383 3044 w
+(the) 3527 3044 w
+(beginning) 3727 3044 w
+(of) 4259 3044 w
+(the) 4402 3044 w
+(Z-shape,) 4602 3044 w
+(resulting) 720 3164 w
+(in) 1191 3164 w
+(a) 1324 3164 w
+(new) 1421 3164 w
+(Z-shape.) 1658 3164 w
+(\() 2170 3164 w
+10 /LucidaTypewriter f
+(Boxes) 2203 3164 w
+10 /LucidaSansUnicode00 f
+(whose) 2606 3164 w
+(contents) 2956 3164 w
+(would) 3416 3164 w
+(span) 3751 3164 w
+(two) 4025 3164 w
+(lines) 4243 3164 w
+(in) 4513 3164 w
+(the) 4647 3164 w
+(new) 4845 3164 w
+(position must first be split.\)) 720 3284 w
+(Copying the remainder of the) 970 3440 w
+10 /LucidaTypewriter f
+(Frame) 2432 3440 w
+10 /LucidaSansUnicode00 f
+(tile by tile this way will) 2824 3440 w
+(clearly) 3961 3440 w
+(accomplish) 4307 3440 w
+(the) 4885 3440 w
+(deletion) 720 3560 w
+(but) 1156 3560 w
+(eventually,) 1361 3560 w
+(typically) 1925 3560 w
+(when) 2364 3560 w
+(the) 2663 3560 w
+(copying) 2860 3560 w
+(algorithm) 3282 3560 w
+(encounters) 3793 3560 w
+(a) 4374 3560 w
+(tab) 4471 3560 w
+(or) 4668 3560 w
+(new\255) 4812 3560 w
+(line,) 720 3680 w
+(the) 971 3680 w
+(old) 1169 3680 w
+(and) 1365 3680 w
+(new) 1588 3680 w
+10 /LucidaTypewriter f
+(x) 1826 3680 w
+10 /LucidaSansUnicode00 f
+(coordinates) 1941 3680 w
+(of) 2551 3680 w
+(the) 2692 3680 w
+(tile) 2890 3680 w
+(to) 3084 3680 w
+(be) 3225 3680 w
+(copied) 3387 3680 w
+(are) 3753 3680 w
+(the) 3948 3680 w
+(same.) 4146 3680 w
+(This) 4508 3680 w
+(corre\255) 4757 3680 w
+(spondence) 720 3800 w
+(implies) 1288 3800 w
+(that) 1681 3800 w
+(the) 1915 3800 w
+(Z-shape) 2113 3800 w
+(has) 2562 3800 w
+(its) 2773 3800 w
+(beginning) 2933 3800 w
+(and) 3463 3800 w
+(ending) 3686 3800 w
+(edges) 4063 3800 w
+(aligned) 4394 3800 w
+(verti\255) 4792 3800 w
+(cally,) 720 3920 w
+(and) 1002 3920 w
+(a) 1216 3920 w
+(sequence) 1305 3920 w
+(of) 1796 3920 w
+(at) 1928 3920 w
+(most) 2054 3920 w
+(two) 2330 3920 w
+10 /LucidaTypewriter f
+(bitblts) 2539 3920 w
+10 /LucidaSansUnicode00 f
+(can) 3077 3920 w
+(be) 3279 3920 w
+(used) 3432 3920 w
+(to) 3698 3920 w
+(copy) 3830 3920 w
+(the) 4092 3920 w
+(remaining) 4282 3920 w
+(tiles.) 4806 3920 w
+(The) 720 4040 w
+(last) 938 4040 w
+(step) 1147 4040 w
+(is) 1391 4040 w
+(to) 1508 4040 w
+(clear) 1643 4040 w
+(out) 1912 4040 w
+(the) 2109 4040 w
+(resulting) 2301 4040 w
+(empty) 2767 4040 w
+(space) 3104 4040 w
+(at) 3416 4040 w
+(the) 3544 4040 w
+(bottom) 3735 4040 w
+(of) 4123 4040 w
+(the) 4257 4040 w
+(window;) 4448 4040 w
+(the) 4885 4040 w
+(number) 720 4160 w
+(of) 1133 4160 w
+(lines) 1267 4160 w
+(to) 1530 4160 w
+(be) 1665 4160 w
+(cleared) 1821 4160 w
+(is) 2209 4160 w
+(the) 2326 4160 w
+(number) 2518 4160 w
+(of) 2932 4160 w
+(complete) 3067 4160 w
+(lines) 3550 4160 w
+(in) 3814 4160 w
+(the) 3942 4160 w
+(Z-shape) 4134 4160 w
+(closed) 4577 4160 w
+(by) 4925 4160 w
+(the) 720 4280 w
+(final) 922 4280 w
+10 /LucidaTypewriter f
+(bitblts.) 1181 4280 w
+10 /LucidaSansUnicode00 f
+(The) 1804 4280 w
+(final) 2032 4280 w
+(step) 2291 4280 w
+(is) 2545 4280 w
+(to) 2672 4280 w
+(merge) 2817 4280 w
+(horizontally) 3172 4280 w
+(adjacent) 3794 4280 w
+10 /LucidaTypewriter f
+(Boxes) 4250 4280 w
+10 /LucidaSansUnicode00 f
+(of) 4657 4280 w
+(plain) 4802 4280 w
+(text.) 720 4400 w
+(The complete source to) 1007 4400 w
+10 /LucidaTypewriter f
+(frdelete) 2182 4400 w
+10 /LucidaSansUnicode00 f
+(is less than 100 lines of C.) 2790 4400 w
+10 /LucidaTypewriter f
+(frinsert) 970 4556 w
+10 /LucidaSansUnicode00 f
+(is) 1584 4556 w
+(more) 1702 4556 w
+(complicated) 1991 4556 w
+(because) 2617 4556 w
+(it) 3049 4556 w
+(must) 3153 4556 w
+(do) 3434 4556 w
+(four) 3596 4556 w
+(passes:) 3835 4556 w
+(one) 4232 4556 w
+(to) 4450 4556 w
+(construct) 4587 4556 w
+(the) 720 4676 w
+10 /LucidaTypewriter f
+(Box) 908 4676 w
+10 /LucidaSansUnicode00 f
+(list) 1157 4676 w
+(for) 1336 4676 w
+(the) 1508 4676 w
+(inserted) 1696 4676 w
+(string,) 2124 4676 w
+(one) 2471 4676 w
+(to) 2683 4676 w
+(reconnoitre,) 2814 4676 w
+(one) 3436 4676 w
+(to) 3648 4676 w
+(copy) 3779 4676 w
+(\(in opposite order to) 4039 4676 w
+10 /LucidaTypewriter f
+(frdelete) 720 4796 w
+10 /LucidaSansUnicode00 f
+(\)) 1296 4796 w
+(the) 1368 4796 w
+10 /LucidaTypewriter f
+(Boxes) 1562 4796 w
+10 /LucidaSansUnicode00 f
+(to) 1961 4796 w
+(make) 2098 4796 w
+(the) 2399 4796 w
+(hole) 2593 4796 w
+(for) 2840 4796 w
+(the) 3018 4796 w
+(new) 3212 4796 w
+(text,) 3446 4796 w
+(and) 3708 4796 w
+(finally) 3928 4796 w
+(one) 4261 4796 w
+(to) 4480 4796 w
+(copy) 4618 4796 w
+(the) 4885 4796 w
+(new) 720 4916 w
+(text) 963 4916 w
+(into) 1202 4916 w
+(place.) 1439 4916 w
+(Overall,) 1805 4916 w
+(though,) 2225 4916 w
+10 /LucidaTypewriter f
+(frinsert) 2651 4916 w
+10 /LucidaSansUnicode00 f
+(has) 3274 4916 w
+(a) 3489 4916 w
+(similar) 3591 4916 w
+(flavor) 3965 4916 w
+(to) 4287 4916 w
+10 /LucidaTypewriter f
+(frdelete) 4432 4916 w
+10 /LucidaSansUnicode00 f
+(,) 5008 4916 w
+(and) 720 5036 w
+(needn) 934 5036 w
+10 /LucidaSansUnicode20 f
+(\031) 1233 5036 w
+10 /LucidaSansUnicode00 f
+(t) 1265 5036 w
+(be) 1336 5036 w
+(described) 1489 5036 w
+(further.) 1996 5036 w
+10 /LucidaTypewriter f
+(Frinsert) 2430 5036 w
+10 /LucidaSansUnicode00 f
+(and) 3040 5036 w
+(its) 3254 5036 w
+(subsidiary) 3406 5036 w
+(routines) 3937 5036 w
+(comprise) 4371 5036 w
+(211) 4851 5036 w
+(lines of C.) 720 5156 w
+(The terminal source code is 3024 lines of C, and the host source is 5797 lines.) 970 5312 w
+10 /LucidaSans-Demi f
+(Discussion) 720 5552 w
+(History) 720 5792 w
+10 /LucidaSansUnicode00 f
+(The) 720 5948 w
+(immediate) 951 5948 w
+(ancestor) 1512 5948 w
+(of) 1976 5948 w
+10 /LucidaTypewriter f
+(sam) 2124 5948 w
+10 /LucidaSansUnicode00 f
+(was) 2390 5948 w
+(the) 2623 5948 w
+(original) 2828 5948 w
+(text) 3246 5948 w
+(editor) 3488 5948 w
+(for) 3826 5948 w
+(the) 4016 5948 w
+(Blit,) 4222 5948 w
+(called) 4458 5948 w
+10 /LucidaTypewriter f
+(jim) 4792 5948 w
+10 /LucidaSansUnicode00 f
+(.) 5008 5948 w
+10 /LucidaTypewriter f
+(Sam) 720 6068 w
+10 /LucidaSansUnicode00 f
+(inherited) 969 6068 w
+10 /LucidaTypewriter f
+(jim) 1437 6068 w
+10 /LucidaSansUnicode20 f
+(\031) 1653 6068 w
+10 /LucidaSansUnicode00 f
+(s) 1685 6068 w
+(two-process) 1769 6068 w
+(structure and mouse language almost unchanged, but) 2409 6068 w
+10 /LucidaTypewriter f
+(jim) 720 6188 w
+10 /LucidaSansUnicode00 f
+(suffered) 979 6188 w
+(from) 1425 6188 w
+(several) 1700 6188 w
+(drawbacks) 2083 6188 w
+(that) 2640 6188 w
+(were) 2875 6188 w
+(addressed) 3149 6188 w
+(in) 3692 6188 w
+(the) 3827 6188 w
+(design) 4026 6188 w
+(of) 4393 6188 w
+10 /LucidaTypewriter f
+(sam) 4535 6188 w
+10 /LucidaSansUnicode00 f
+(.) 4751 6188 w
+(The) 4859 6188 w
+(most) 720 6308 w
+(important) 999 6308 w
+(of) 1514 6308 w
+(these) 1649 6308 w
+(was) 1948 6308 w
+(the) 2168 6308 w
+(lack) 2360 6308 w
+(of) 2590 6308 w
+(a) 2725 6308 w
+(command) 2817 6308 w
+(language.) 3332 6308 w
+(Although) 3875 6308 w
+10 /LucidaTypewriter f
+(jim) 4355 6308 w
+10 /LucidaSansUnicode00 f
+(was) 4607 6308 w
+(easy) 4826 6308 w
+(to use for simple editing,) 720 6428 w
+(it) 1978 6428 w
+(provided) 2077 6428 w
+(no) 2538 6428 w
+(direct) 2694 6428 w
+(help) 3004 6428 w
+(with) 3247 6428 w
+(large) 3485 6428 w
+(or) 3761 6428 w
+(repetitive) 3896 6428 w
+(editing) 4385 6428 w
+(tasks.) 4756 6428 w
+(Instead,) 720 6548 w
+(it) 1146 6548 w
+(provided) 1253 6548 w
+(a) 1722 6548 w
+(command) 1818 6548 w
+(to) 2337 6548 w
+(pass) 2476 6548 w
+(selected) 2737 6548 w
+(text) 3177 6548 w
+(through) 3409 6548 w
+(a) 3837 6548 w
+(shell) 3933 6548 w
+(pipeline,) 4200 6548 w
+(but) 4659 6548 w
+(this) 4861 6548 w
+(was no more satisfactory than could be expected of a stopgap measure.) 720 6668 w
+10 /LucidaTypewriter f
+(Jim) 970 6824 w
+10 /LucidaSansUnicode00 f
+(was) 1243 6824 w
+(written) 1483 6824 w
+(primarily) 1879 6824 w
+(as) 2368 6824 w
+(a) 2531 6824 w
+(vehicle) 2643 6824 w
+(for) 3035 6824 w
+(experimenting) 3231 6824 w
+(with) 3995 6824 w
+(a) 4258 6824 w
+(mouse-based) 4371 6824 w
+(interface) 720 6944 w
+(to) 1190 6944 w
+(text,) 1334 6944 w
+(and) 1603 6944 w
+(the) 1829 6944 w
+(experiment) 2030 6944 w
+(was) 2630 6944 w
+(successful.) 2859 6944 w
+10 /LucidaTypewriter f
+(Jim) 3470 6944 w
+10 /LucidaSansUnicode00 f
+(had) 3732 6944 w
+(some) 3958 6944 w
+(spin-offs:) 4265 6944 w
+10 /LucidaTypewriter f
+(mux) 4792 6944 w
+10 /LucidaSansUnicode00 f
+(,) 5008 6944 w
+(the) 720 7064 w
+(second) 912 7064 w
+(window) 1293 7064 w
+(system) 1699 7064 w
+(for) 2076 7064 w
+(the) 2252 7064 w
+(Blit,) 2444 7064 w
+(is) 2666 7064 w
+(essentially) 2783 7064 w
+(a) 3327 7064 w
+(multiplexed) 3419 7064 w
+(version) 4034 7064 w
+(of) 4423 7064 w
+(the) 4558 7064 w
+(termi\255) 4751 7064 w
+(nal) 720 7184 w
+(part) 903 7184 w
+(of) 1136 7184 w
+10 /LucidaTypewriter f
+(jim) 1271 7184 w
+10 /LucidaSansUnicode00 f
+(;) 1487 7184 w
+(and) 1556 7184 w
+(the) 1772 7184 w
+(debugger) 1963 7184 w
+10 /LucidaTypewriter f
+(pi) 2464 7184 w
+10 /LucidaSansUnicode20 f
+(\031) 2608 7184 w
+10 /LucidaSansUnicode00 f
+(s) 2640 7184 w
+(user) 2727 7184 w
+(interface) 2973 7184 w
+6 /LucidaSansUnicode00 f
+(20) 3397 7134 w
+10 /LucidaSansUnicode00 f
+(was) 3509 7184 w
+(closely) 3728 7184 w
+(modeled) 4093 7184 w
+(on) 4550 7184 w
+10 /LucidaTypewriter f
+(jim) 4709 7184 w
+10 /LucidaSansUnicode20 f
+(\031) 4925 7184 w
+10 /LucidaSansUnicode00 f
+(s.) 4957 7184 w
+(But) 720 7304 w
+(after) 920 7304 w
+(a) 1189 7304 w
+(couple) 1287 7304 w
+(of) 1652 7304 w
+(years,) 1794 7304 w
+10 /LucidaTypewriter f
+(jim) 2125 7304 w
+10 /LucidaSansUnicode00 f
+(had) 2385 7304 w
+(become) 2609 7304 w
+(difficult) 3033 7304 w
+(to) 3451 7304 w
+(maintain) 3593 7304 w
+(and) 4059 7304 w
+(limiting) 4283 7304 w
+(to) 4697 7304 w
+(use,) 4839 7304 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 26 26
+%%Page: 27 27
+/saveobj save def
+mark
+27 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 27 \255) 2752 480 w
+(and its replacement was overdue.) 720 840 w
+(I) 970 996 w
+(began) 1039 996 w
+(the) 1377 996 w
+(design) 1572 996 w
+(of) 1935 996 w
+10 /LucidaTypewriter f
+(sam) 2073 996 w
+10 /LucidaSansUnicode00 f
+(by) 2329 996 w
+(asking) 2484 996 w
+10 /LucidaTypewriter f
+(jim) 2841 996 w
+10 /LucidaSansUnicode00 f
+(customers) 3097 996 w
+(what) 3640 996 w
+(they) 3911 996 w
+(wanted.) 4158 996 w
+(This) 4612 996 w
+(was) 4857 996 w
+(probably) 720 1116 w
+(a) 1187 1116 w
+(mistake;) 1282 1116 w
+(the) 1733 1116 w
+(answers) 1928 1116 w
+(were) 2361 1116 w
+(essentially) 2631 1116 w
+(a) 3178 1116 w
+(list) 3273 1116 w
+(of) 3459 1116 w
+(features) 3597 1116 w
+(to) 4032 1116 w
+(be) 4170 1116 w
+(found) 4329 1116 w
+(in) 4653 1116 w
+(other) 4783 1116 w
+(editors,) 720 1236 w
+(which) 1124 1236 w
+(did) 1439 1236 w
+(not) 1628 1236 w
+(provide) 1822 1236 w
+(any) 2221 1236 w
+(of) 2424 1236 w
+(the) 2556 1236 w
+(guiding) 2746 1236 w
+(principles) 3150 1236 w
+(I) 3659 1236 w
+(was) 3723 1236 w
+(seeking.) 3941 1236 w
+(For) 4414 1236 w
+(instance,) 4605 1236 w
+(one) 720 1356 w
+(common) 940 1356 w
+(request) 1402 1356 w
+(was) 1809 1356 w
+(for) 2033 1356 w
+(a) 2213 1356 w
+10 /LucidaSansUnicode20 f
+(\030\030) 2309 1356 w
+10 /LucidaSansUnicode00 f
+(global) 2373 1356 w
+(substitute,) 2713 1356 w
+10 /LucidaSansUnicode20 f
+(\031\031) 3230 1356 w
+10 /LucidaSansUnicode00 f
+(but) 3335 1356 w
+(no) 3538 1356 w
+(one) 3702 1356 w
+(suggested) 3922 1356 w
+(how) 4463 1356 w
+(to) 4704 1356 w
+(pro\255) 4842 1356 w
+(vide) 720 1476 w
+(it) 966 1476 w
+(within) 1078 1476 w
+(a) 1420 1476 w
+(cut-and-paste) 1521 1476 w
+(editor.) 2275 1476 w
+(I) 2672 1476 w
+(was) 2747 1476 w
+(looking) 2976 1476 w
+(for) 3384 1476 w
+(a) 3569 1476 w
+(scheme) 3670 1476 w
+(that) 4085 1476 w
+(would) 4323 1476 w
+(support) 4662 1476 w
+(such) 720 1596 w
+(specialized) 1000 1596 w
+(features) 1593 1596 w
+(comfortably) 2042 1596 w
+(in) 2676 1596 w
+(the) 2821 1596 w
+(context) 3030 1596 w
+(of) 3449 1596 w
+(some) 3601 1596 w
+(general) 3916 1596 w
+(command) 4330 1596 w
+(lan\255) 4861 1596 w
+(guage.) 720 1716 w
+(Ideas) 1118 1716 w
+(were) 1409 1716 w
+(not) 1677 1716 w
+(forthcoming,) 1875 1716 w
+(though,) 2541 1716 w
+(particularly) 2957 1716 w
+(given) 3539 1716 w
+(my) 3838 1716 w
+(insistence) 4021 1716 w
+(on) 4543 1716 w
+(remov\255) 4704 1716 w
+(ing) 720 1836 w
+(all) 914 1836 w
+(limits) 1067 1836 w
+(on) 1375 1836 w
+(file) 1538 1836 w
+(sizes,) 1729 1836 w
+(line) 2045 1836 w
+(lengths) 2261 1836 w
+(and) 2660 1836 w
+(so) 2880 1836 w
+(on.) 3032 1836 w
+(Even) 3259 1836 w
+(worse,) 3523 1836 w
+(I) 3881 1836 w
+(recognized) 3950 1836 w
+(that,) 4528 1836 w
+(since) 4791 1836 w
+(the) 720 1956 w
+(mouse) 914 1956 w
+(could) 1276 1956 w
+(easily) 1581 1956 w
+(indicate) 1892 1956 w
+(a) 2313 1956 w
+(region) 2407 1956 w
+(of) 2757 1956 w
+(the) 2894 1956 w
+(screen) 3088 1956 w
+(that) 3444 1956 w
+(was) 3674 1956 w
+(not) 3896 1956 w
+(an) 4095 1956 w
+(integral) 4252 1956 w
+(number) 4663 1956 w
+(of) 720 2076 w
+(lines,) 860 2076 w
+(the) 1161 2076 w
+(command) 1358 2076 w
+(language) 1877 2076 w
+(would) 2361 2076 w
+(best) 2694 2076 w
+(forget) 2942 2076 w
+(about) 3277 2076 w
+(newlines) 3596 2076 w
+(altogether,) 4059 2076 w
+(and) 4628 2076 w
+(that) 4849 2076 w
+(meant) 720 2196 w
+(the) 1069 2196 w
+(command) 1270 2196 w
+(language) 1794 2196 w
+(had) 2283 2196 w
+(to) 2510 2196 w
+(treat) 2655 2196 w
+(the) 2928 2196 w
+(file) 3130 2196 w
+(as) 3328 2196 w
+(a) 3481 2196 w
+(single) 3583 2196 w
+(string,) 3919 2196 w
+(not) 4280 2196 w
+(an) 4487 2196 w
+(array) 4651 2196 w
+(of) 4942 2196 w
+(lines.) 720 2316 w
+(Eventually,) 970 2472 w
+(I) 1532 2472 w
+(decided) 1603 2472 w
+(that) 2026 2472 w
+(thinking) 2259 2472 w
+(was) 2702 2472 w
+(not) 2927 2472 w
+(getting) 3129 2472 w
+(me) 3516 2472 w
+(very) 3707 2472 w
+(far) 3950 2472 w
+(and) 4126 2472 w
+(it) 4349 2472 w
+(was) 4458 2472 w
+(time) 4684 2472 w
+(to) 4942 2472 w
+(try) 720 2592 w
+(building.) 902 2592 w
+(I) 1417 2592 w
+(knew) 1498 2592 w
+(that) 1803 2592 w
+(the) 2046 2592 w
+(terminal) 2253 2592 w
+(part) 2707 2592 w
+(could) 2954 2592 w
+(be) 3271 2592 w
+(built) 3441 2592 w
+(easily) 3712 2592 w
+10 /LucidaSansUnicode20 f
+(\024) 4035 2592 w
+10 /LucidaSansUnicode00 f
+(that) 4186 2592 w
+(part) 4428 2592 w
+(of) 4675 2592 w
+10 /LucidaTypewriter f
+(jim) 4824 2592 w
+10 /LucidaSansUnicode00 f
+(behaved) 720 2712 w
+(acceptably) 1165 2712 w
+(well) 1715 2712 w
+10 /LucidaSansUnicode20 f
+(\024) 1944 2712 w
+10 /LucidaSansUnicode00 f
+(and) 2082 2712 w
+(that) 2300 2712 w
+(most) 2529 2712 w
+(of) 2809 2712 w
+(the) 2945 2712 w
+(hard) 3138 2712 w
+(work) 3397 2712 w
+(was) 3673 2712 w
+(going) 3895 2712 w
+(to) 4210 2712 w
+(be) 4347 2712 w
+(in) 4505 2712 w
+(the) 4635 2712 w
+(host) 4829 2712 w
+(part:) 720 2832 w
+(the) 998 2832 w
+(file) 1203 2832 w
+(interface,) 1404 2832 w
+(command) 1910 2832 w
+(interpreter) 2438 2832 w
+(and) 3007 2832 w
+(so) 3237 2832 w
+(on.) 3398 2832 w
+(Moreover,) 3634 2832 w
+(I) 4169 2832 w
+(had) 4247 2832 w
+(some) 4476 2832 w
+(ideas) 4786 2832 w
+(about) 720 2952 w
+(how) 1031 2952 w
+(the) 1264 2952 w
+(architecture) 1452 2952 w
+(of) 2063 2952 w
+10 /LucidaTypewriter f
+(jim) 2194 2952 w
+10 /LucidaSansUnicode00 f
+(could) 2443 2952 w
+(be) 2742 2952 w
+(improved) 2894 2952 w
+(without) 3385 2952 w
+(destroying) 3783 2952 w
+(its) 4331 2952 w
+(basic) 4482 2952 w
+(struc\255) 4765 2952 w
+(ture,) 720 3072 w
+(which) 984 3072 w
+(I) 1301 3072 w
+(liked) 1366 3072 w
+(in) 1637 3072 w
+(principle) 1764 3072 w
+(but) 2223 3072 w
+(which) 2421 3072 w
+(hadn) 2738 3072 w
+10 /LucidaSansUnicode20 f
+(\031) 2980 3072 w
+10 /LucidaSansUnicode00 f
+(t) 3012 3072 w
+(worked) 3084 3072 w
+(out) 3475 3072 w
+(as) 3670 3072 w
+(well) 3811 3072 w
+(as) 4037 3072 w
+(I) 4178 3072 w
+(had) 4242 3072 w
+(hoped.) 4457 3072 w
+(So) 4861 3072 w
+(I) 5011 3072 w
+(began) 720 3192 w
+(by) 1053 3192 w
+(designing) 1203 3192 w
+(the) 1714 3192 w
+(file) 1904 3192 w
+(data) 2090 3192 w
+(structure,) 2336 3192 w
+(starting) 2842 3192 w
+(with) 3252 3192 w
+(the) 3493 3192 w
+(way) 3684 3192 w
+10 /LucidaTypewriter f
+(jim) 3904 3192 w
+10 /LucidaSansUnicode00 f
+(worked) 4156 3192 w
+10 /LucidaSansUnicode20 f
+(\024) 4548 3192 w
+10 /LucidaSansUnicode00 f
+(compa\255) 4684 3192 w
+(rable) 720 3312 w
+(to) 1001 3312 w
+(a) 1136 3312 w
+(single) 1228 3312 w
+(structure) 1554 3312 w
+(merging) 2029 3312 w
+10 /LucidaTypewriter f
+(Disc) 2471 3312 w
+10 /LucidaSansUnicode00 f
+(and) 2796 3312 w
+10 /LucidaTypewriter f
+(Buffer) 3013 3312 w
+10 /LucidaSansUnicode00 f
+(,) 3445 3312 w
+(which) 3514 3312 w
+(I) 3832 3312 w
+(split) 3897 3312 w
+(to) 4142 3312 w
+(make) 4276 3312 w
+(the) 4574 3312 w
+(cache) 4765 3312 w
+(more) 720 3432 w
+(general) 1012 3432 w
+10 /LucidaSansUnicode20 f
+(\024) 1414 3432 w
+10 /LucidaSansUnicode00 f
+(and) 1555 3432 w
+(thinking) 1776 3432 w
+(about) 2218 3432 w
+(how) 2537 3432 w
+(global) 2779 3432 w
+(substitute) 3120 3432 w
+(could) 3647 3432 w
+(be) 3955 3432 w
+(implemented.) 4116 3432 w
+(The) 4859 3432 w
+(answer) 720 3552 w
+(was) 1112 3552 w
+(clearly) 1345 3552 w
+(that) 1708 3552 w
+(it) 1949 3552 w
+(had) 2065 3552 w
+(to) 2295 3552 w
+(be) 2443 3552 w
+(done) 2612 3552 w
+(in) 2904 3552 w
+(two) 3045 3552 w
+(passes,) 3269 3552 w
+(and) 3677 3552 w
+(the) 3906 3552 w
+(transcript-oriented) 4110 3552 w
+(implementation fell out naturally.) 720 3672 w
+10 /LucidaTypewriter f
+(Sam) 970 3828 w
+10 /LucidaSansUnicode00 f
+(was) 1228 3828 w
+(written) 1453 3828 w
+(bottom-up,) 1834 3828 w
+(starting) 2443 3828 w
+(from) 2859 3828 w
+(the) 3133 3828 w
+(data) 3330 3828 w
+(structures) 3583 3828 w
+(and) 4115 3828 w
+(algorithms) 4338 3828 w
+(for) 4901 3828 w
+(manipulating) 720 3948 w
+(text,) 1400 3948 w
+(through) 1664 3948 w
+(the) 2092 3948 w
+(command) 2288 3948 w
+(language) 2807 3948 w
+(and) 3291 3948 w
+(up) 3512 3948 w
+(to) 3678 3948 w
+(the) 3817 3948 w
+(code) 4013 3948 w
+(for) 4285 3948 w
+(maintaining) 4465 3948 w
+(the) 720 4068 w
+(display.) 909 4068 w
+(In) 1349 4068 w
+(retrospect,) 1474 4068 w
+(it) 2034 4068 w
+(turned) 2134 4068 w
+(out) 2489 4068 w
+(well,) 2683 4068 w
+(but) 2940 4068 w
+(this) 3136 4068 w
+(implementation) 3349 4068 w
+(method) 4145 4068 w
+(is) 4551 4068 w
+(not) 4665 4068 w
+(rec\255) 4859 4068 w
+(ommended) 720 4188 w
+(in) 1305 4188 w
+(general.) 1434 4188 w
+(There) 1896 4188 w
+(were) 2211 4188 w
+(several) 2478 4188 w
+(times) 2855 4188 w
+(when) 3158 4188 w
+(I) 3452 4188 w
+(had) 3518 4188 w
+(a) 3735 4188 w
+(large) 3827 4188 w
+(body) 4107 4188 w
+(of) 4383 4188 w
+(interesting) 4518 4188 w
+(code assembled and no clue how to proceed with it.) 720 4308 w
+(The command) 3313 4308 w
+(language,) 4037 4308 w
+(in) 4545 4308 w
+(particu\255) 4669 4308 w
+(lar,) 720 4428 w
+(took) 918 4428 w
+(almost) 1176 4428 w
+(a) 1543 4428 w
+(year) 1639 4428 w
+(to) 1884 4428 w
+(figure) 2023 4428 w
+(out,) 2350 4428 w
+(but) 2582 4428 w
+(can) 2784 4428 w
+(be) 2992 4428 w
+(implemented) 3151 4428 w
+(\(given) 3828 4428 w
+(what) 4162 4428 w
+(was) 4433 4428 w
+(there) 4656 4428 w
+(at) 4948 4428 w
+(the) 720 4548 w
+(beginning) 909 4548 w
+(of) 1430 4548 w
+(that) 1562 4548 w
+(year\)) 1787 4548 w
+(in) 2058 4548 w
+(a) 2183 4548 w
+(day) 2272 4548 w
+(or) 2476 4548 w
+(two.) 2612 4548 w
+(Similarly,) 2885 4548 w
+(inventing) 3362 4548 w
+(the) 3847 4548 w
+10 /LucidaTypewriter f
+(Rasp) 4036 4548 w
+10 /LucidaSansUnicode00 f
+(data) 4358 4548 w
+(structure) 4602 4548 w
+(delayed) 720 4668 w
+(the) 1141 4668 w
+(connection) 1343 4668 w
+(of) 1922 4668 w
+(the) 2067 4668 w
+(host) 2268 4668 w
+(and) 2525 4668 w
+(terminal) 2751 4668 w
+(pieces) 3199 4668 w
+(by) 3551 4668 w
+(another) 3712 4668 w
+(few) 4132 4668 w
+(months.) 4348 4668 w
+10 /LucidaTypewriter f
+(Sam) 4824 4668 w
+10 /LucidaSansUnicode00 f
+(took) 720 4788 w
+(about) 989 4788 w
+(two) 1319 4788 w
+(years) 1546 4788 w
+(to) 1853 4788 w
+(write,) 2003 4788 w
+(although) 2327 4788 w
+(only) 2809 4788 w
+(about) 3065 4788 w
+(four) 3395 4788 w
+(months) 3648 4788 w
+(were) 4066 4788 w
+(spent) 4348 4788 w
+(actually) 4670 4788 w
+(working on it.) 720 4908 w
+(Part) 970 5064 w
+(of) 1199 5064 w
+(the) 1338 5064 w
+(design) 1534 5064 w
+(process) 1898 5064 w
+(was) 2313 5064 w
+(unusual:) 2537 5064 w
+(the) 2993 5064 w
+(subset) 3189 5064 w
+(of) 3551 5064 w
+(the) 3691 5064 w
+(protocol) 3888 5064 w
+(that) 4334 5064 w
+(maintains) 4567 5064 w
+(the) 720 5184 w
+10 /LucidaTypewriter f
+(Rasp) 923 5184 w
+10 /LucidaSansUnicode00 f
+(was) 1259 5184 w
+(simulated,) 1490 5184 w
+(debugged) 2045 5184 w
+(and) 2580 5184 w
+(verified) 2808 5184 w
+(by) 3219 5184 w
+(an) 3382 5184 w
+(automatic) 3547 5184 w
+(protocol) 4074 5184 w
+(analyzer,) 4525 5184 w
+6 /LucidaSansUnicode00 f
+(21) 4964 5134 w
+10 /LucidaSansUnicode00 f
+(and) 720 5304 w
+(was) 935 5304 w
+(bug-free) 1153 5304 w
+(from) 1623 5304 w
+(the) 1890 5304 w
+(start.) 2080 5304 w
+(The) 2400 5304 w
+(rest) 2617 5304 w
+(of) 2838 5304 w
+(the) 2972 5304 w
+(protocol,) 3163 5304 w
+(concerned) 3635 5304 w
+(mostly) 4174 5304 w
+(with) 4533 5304 w
+(keep\255) 4774 5304 w
+(ing) 720 5424 w
+(menus) 936 5424 w
+(up) 1323 5424 w
+(to) 1510 5424 w
+(date,) 1670 5424 w
+(was) 1975 5424 w
+(unfortunately) 2220 5424 w
+(too) 2935 5424 w
+(unwieldy) 3156 5424 w
+(for) 3648 5424 w
+(such) 3849 5424 w
+(analysis,) 4137 5424 w
+(and) 4615 5424 w
+(was) 4857 5424 w
+(debugged) 720 5544 w
+(by) 1255 5544 w
+(more) 1418 5544 w
+(traditional) 1717 5544 w
+(methods,) 2263 5544 w
+(primarily) 2766 5544 w
+(by) 3246 5544 w
+(logging) 3409 5544 w
+(in) 3824 5544 w
+(a) 3963 5544 w
+(file) 4066 5544 w
+(all) 4265 5544 w
+(messages) 4426 5544 w
+(in) 4949 5544 w
+(and out of the host.) 720 5664 w
+10 /LucidaSans-Demi f
+(Reflections) 720 5904 w
+10 /LucidaTypewriter f
+(Sam) 720 6060 w
+10 /LucidaSansUnicode00 f
+(is) 983 6060 w
+(essentially) 1110 6060 w
+(the) 1664 6060 w
+(only) 1866 6060 w
+(interactive) 2117 6060 w
+(editor) 2669 6060 w
+(used) 3004 6060 w
+(by) 3284 6060 w
+(the) 3447 6060 w
+(sixty) 3650 6060 w
+(or) 3928 6060 w
+(so) 4078 6060 w
+(members) 4238 6060 w
+(of) 4739 6060 w
+(the) 4885 6060 w
+(computing) 720 6180 w
+(science) 1274 6180 w
+(research) 1664 6180 w
+(center) 2111 6180 w
+(in) 2448 6180 w
+(which) 2573 6180 w
+(I) 2888 6180 w
+(work.) 2950 6180 w
+(The) 3284 6180 w
+(same) 3498 6180 w
+(could) 3786 6180 w
+(not) 4085 6180 w
+(be) 4278 6180 w
+(said) 4430 6180 w
+(of) 4661 6180 w
+10 /LucidaTypewriter f
+(jim) 4792 6180 w
+10 /LucidaSansUnicode00 f
+(;) 5008 6180 w
+(the) 720 6300 w
+(lack) 921 6300 w
+(of) 1160 6300 w
+(a) 1304 6300 w
+(command) 1405 6300 w
+(language) 1929 6300 w
+(kept) 2418 6300 w
+(some) 2678 6300 w
+(people) 2985 6300 w
+(from) 3359 6300 w
+(adopting) 3637 6300 w
+(it.) 4115 6300 w
+(The) 4291 6300 w
+(union) 4518 6300 w
+(of) 4840 6300 w
+(a) 4985 6300 w
+(user) 720 6420 w
+(interface) 967 6420 w
+(as) 1428 6420 w
+(comfortable) 1571 6420 w
+(as) 2192 6420 w
+10 /LucidaTypewriter f
+(jim) 2335 6420 w
+10 /LucidaSansUnicode20 f
+(\031) 2551 6420 w
+10 /LucidaSansUnicode00 f
+(s) 2583 6420 w
+(with) 2671 6420 w
+(a) 2913 6420 w
+(command) 3005 6420 w
+(language) 3520 6420 w
+(as) 4000 6420 w
+(powerful) 4143 6420 w
+(as) 4606 6420 w
+10 /LucidaTypewriter f
+(ed) 4750 6420 w
+10 /LucidaSansUnicode20 f
+(\031) 4894 6420 w
+10 /LucidaSansUnicode00 f
+(s) 4926 6420 w
+10 /LucidaSansUnicode20 f
+( ) 4977 6420 w
+10 /LucidaSansUnicode00 f
+(is) 720 6540 w
+(essential) 841 6540 w
+(to) 1308 6540 w
+10 /LucidaTypewriter f
+(sam) 1447 6540 w
+10 /LucidaSansUnicode20 f
+(\031) 1663 6540 w
+10 /LucidaSansUnicode00 f
+(s) 1695 6540 w
+(success.) 1787 6540 w
+(When) 2265 6540 w
+10 /LucidaTypewriter f
+(sam) 2572 6540 w
+10 /LucidaSansUnicode00 f
+(was) 2829 6540 w
+(first) 3053 6540 w
+(made) 3288 6540 w
+(available) 3595 6540 w
+(to) 4058 6540 w
+(the) 4196 6540 w
+10 /LucidaTypewriter f
+(jim) 4391 6540 w
+10 /LucidaSansUnicode00 f
+(commu\255) 4647 6540 w
+(nity,) 720 6660 w
+(almost) 977 6660 w
+(everyone) 1348 6660 w
+(switched) 1829 6660 w
+(to) 2300 6660 w
+(it) 2443 6660 w
+(within) 2554 6660 w
+(two) 2895 6660 w
+(or) 3116 6660 w
+(three) 3264 6660 w
+(days.) 3562 6660 w
+(In) 3893 6660 w
+(the) 4030 6660 w
+(months) 4231 6660 w
+(that) 4643 6660 w
+(fol\255) 4880 6660 w
+(lowed, even people who had never adopted) 720 6780 w
+10 /LucidaTypewriter f
+(jim) 2861 6780 w
+10 /LucidaSansUnicode00 f
+(started using) 3109 6780 w
+10 /LucidaTypewriter f
+(sam) 3779 6780 w
+10 /LucidaSansUnicode00 f
+(exclusively.) 4027 6780 w
+8 /S1 f
+(__________________) 720 6880 w
+8 /LucidaSansUnicode20 f
+( ) 720 6970 w
+8 /LucidaSansUnicode00 f
+(The) 770 6970 w
+(people) 954 6970 w
+(who) 1255 6970 w
+(criticize) 1455 6970 w
+8 /LucidaTypewriter f
+(ed) 1799 6970 w
+8 /LucidaSansUnicode00 f
+(as) 1954 6970 w
+(an) 2078 6970 w
+(interactive) 2211 6970 w
+(program) 2657 6970 w
+(often) 3030 6970 w
+(forget) 3274 6970 w
+(that) 3551 6970 w
+(it) 3745 6970 w
+(and) 3838 6970 w
+(its) 4022 6970 w
+(close) 4156 6970 w
+(relative) 4395 6970 w
+8 /LucidaTypewriter f
+(sed) 720 7060 w
+4 /LucidaSansUnicode00 f
+(7) 894 7020 w
+8 /LucidaSansUnicode00 f
+(still) 953 7060 w
+(thrive) 1127 7060 w
+(as) 1384 7060 w
+(programmable) 1503 7060 w
+(editors.) 2106 7060 w
+(The) 2463 7060 w
+(strength) 2642 7060 w
+(of) 3005 7060 w
+(these) 3118 7060 w
+(programs) 3362 7060 w
+(is) 3769 7060 w
+(independent) 3866 7060 w
+(of) 4387 7060 w
+(their) 4499 7060 w
+(convenience) 720 7150 w
+(for) 1227 7150 w
+(interactive) 1365 7150 w
+(editing.) 1797 7150 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 27 27
+%%Page: 28 28
+/saveobj save def
+mark
+28 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 28 \255) 2752 480 w
+(To) 970 840 w
+(be) 1152 840 w
+(honest,) 1329 840 w
+10 /LucidaTypewriter f
+(ed) 1748 840 w
+10 /LucidaSansUnicode00 f
+(still) 1950 840 w
+(gets) 2183 840 w
+(occasional) 2447 840 w
+(use,) 3010 840 w
+(but) 3269 840 w
+(usually) 3490 840 w
+(when) 3889 840 w
+(something) 4205 840 w
+(quick) 4777 840 w
+(needs) 720 960 w
+(to) 1043 960 w
+(be) 1176 960 w
+(done) 1330 960 w
+(and) 1607 960 w
+(the) 1821 960 w
+(overhead) 2010 960 w
+(of) 2490 960 w
+(downloading) 2622 960 w
+(the) 3280 960 w
+(terminal) 3469 960 w
+(part) 3905 960 w
+(of) 4135 960 w
+10 /LucidaTypewriter f
+(sam) 4267 960 w
+10 /LucidaSansUnicode00 f
+(isn) 4517 960 w
+10 /LucidaSansUnicode20 f
+(\031) 4659 960 w
+10 /LucidaSansUnicode00 f
+(t) 4691 960 w
+(worth) 4762 960 w
+(the) 720 1080 w
+(trouble.) 914 1080 w
+(Also,) 1367 1080 w
+(as) 1649 1080 w
+(a) 1795 1080 w
+10 /LucidaSansUnicode20 f
+(\030) 1890 1080 w
+10 /LucidaSansUnicode00 f
+(line) 1922 1080 w
+10 /LucidaSansUnicode20 f
+(\031) 2098 1080 w
+10 /LucidaSansUnicode00 f
+(editor,) 2170 1080 w
+10 /LucidaTypewriter f
+(sam) 2529 1080 w
+(-d) 2785 1080 w
+10 /LucidaSansUnicode00 f
+(is) 2969 1080 w
+(a) 3089 1080 w
+(bit) 3184 1080 w
+(odd;) 3353 1080 w
+(when) 3612 1080 w
+(using) 3909 1080 w
+(a) 4215 1080 w
+(good) 4310 1080 w
+(old) 4597 1080 w
+(ASCII) 4790 1080 w
+(terminal,) 720 1200 w
+(it) 1193 1200 w
+10 /LucidaSansUnicode20 f
+(\031) 1259 1200 w
+10 /LucidaSansUnicode00 f
+(s) 1291 1200 w
+(comforting) 1381 1200 w
+(to) 1954 1200 w
+(have) 2091 1200 w
+(a) 2355 1200 w
+(true) 2449 1200 w
+(line) 2684 1200 w
+(editor.) 2898 1200 w
+(But) 3287 1200 w
+(it) 3482 1200 w
+(is) 3586 1200 w
+(fair) 3704 1200 w
+(to) 3904 1200 w
+(say) 4040 1200 w
+(that) 4236 1200 w
+10 /LucidaTypewriter f
+(sam) 4465 1200 w
+10 /LucidaSansUnicode20 f
+(\031) 4681 1200 w
+10 /LucidaSansUnicode00 f
+(s) 4713 1200 w
+(com\255) 4802 1200 w
+(mand) 720 1320 w
+(language) 1040 1320 w
+(has) 1530 1320 w
+(displaced) 1745 1320 w
+10 /LucidaTypewriter f
+(ed) 2252 1320 w
+10 /LucidaSansUnicode20 f
+(\031) 2396 1320 w
+10 /LucidaSansUnicode00 f
+(s) 2428 1320 w
+(for) 2526 1320 w
+(most) 2712 1320 w
+(of) 3001 1320 w
+(the) 3146 1320 w
+(complicated) 3349 1320 w
+(editing) 3985 1320 w
+(that) 4371 1320 w
+(has) 4610 1320 w
+(kept) 4826 1320 w
+(line editors \(that is, command-driven editors\) with us.) 720 1440 w
+10 /LucidaTypewriter f
+(Sam) 970 1596 w
+10 /LucidaSansUnicode20 f
+(\031) 1186 1596 w
+10 /LucidaSansUnicode00 f
+(s) 1218 1596 w
+(command) 1323 1596 w
+(language) 1855 1596 w
+(is) 2352 1596 w
+(even) 2486 1596 w
+(fancier) 2766 1596 w
+(than) 3151 1596 w
+10 /LucidaTypewriter f
+(ed) 3421 1596 w
+10 /LucidaSansUnicode20 f
+(\031) 3565 1596 w
+10 /LucidaSansUnicode00 f
+(s,) 3597 1596 w
+(and) 3734 1596 w
+(most) 3969 1596 w
+10 /LucidaTypewriter f
+(sam) 4266 1596 w
+10 /LucidaSansUnicode00 f
+(customers) 4537 1596 w
+(don) 720 1716 w
+10 /LucidaSansUnicode20 f
+(\031) 906 1716 w
+10 /LucidaSansUnicode00 f
+(t) 938 1716 w
+(come) 1008 1716 w
+(near to using all its capabilities.) 1302 1716 w
+(Does it need to be so sophisticated?) 2913 1716 w
+(I think) 4731 1716 w
+(the answer is yes, for two reasons.) 720 1836 w
+(First,) 970 1992 w
+(the) 1257 1992 w
+10 /LucidaSans-Italic f
+(model) 1456 1992 w
+10 /LucidaSansUnicode00 f
+(for) 1793 1992 w
+10 /LucidaTypewriter f
+(sam) 1976 1992 w
+10 /LucidaSansUnicode20 f
+(\031) 2192 1992 w
+10 /LucidaSansUnicode00 f
+(s) 2224 1992 w
+(command) 2319 1992 w
+(language) 2841 1992 w
+(is) 3328 1992 w
+(really) 3452 1992 w
+(relatively) 3758 1992 w
+(simple,) 4238 1992 w
+(and) 4635 1992 w
+(cer\255) 4859 1992 w
+(tainly) 720 2112 w
+(simpler) 1030 2112 w
+(than) 1438 2112 w
+(that) 1700 2112 w
+(of) 1936 2112 w
+10 /LucidaTypewriter f
+(ed) 2079 2112 w
+10 /LucidaSansUnicode00 f
+(.) 2223 2112 w
+(For) 2332 2112 w
+(instance,) 2533 2112 w
+(there) 3013 2112 w
+(is) 3310 2112 w
+(only) 3435 2112 w
+(one) 3684 2112 w
+(kind) 3908 2112 w
+(of) 4165 2112 w
+(textual) 4308 2112 w
+(loop) 4690 2112 w
+(in) 4949 2112 w
+10 /LucidaTypewriter f
+(sam) 720 2232 w
+10 /LucidaSansUnicode20 f
+(\024) 973 2232 w
+10 /LucidaSansUnicode00 f
+(the) 1110 2232 w
+10 /LucidaTypewriter f
+(x) 1302 2232 w
+10 /LucidaSansUnicode00 f
+(command) 1412 2232 w
+10 /LucidaSansUnicode20 f
+(\024) 1928 2232 w
+10 /LucidaSansUnicode00 f
+(while) 2066 2232 w
+10 /LucidaTypewriter f
+(ed) 2357 2232 w
+10 /LucidaSansUnicode00 f
+(has) 2539 2232 w
+(three) 2745 2232 w
+(\(the) 3035 2232 w
+10 /LucidaTypewriter f
+(g) 3261 2232 w
+10 /LucidaSansUnicode00 f
+(command,) 3371 2232 w
+(the) 3919 2232 w
+(global) 4112 2232 w
+(flag) 4449 2232 w
+(on) 4670 2232 w
+(sub\255) 4831 2232 w
+(stitutions,) 720 2352 w
+(and) 1241 2352 w
+(the) 1454 2352 w
+(implicit loop over lines in multi-line substitutions\).) 1642 2352 w
+(Also,) 4181 2352 w
+10 /LucidaTypewriter f
+(ed) 4455 2352 w
+10 /LucidaSansUnicode20 f
+(\031) 4599 2352 w
+10 /LucidaSansUnicode00 f
+(s substi\255) 4631 2352 w
+(tute) 720 2472 w
+(command) 947 2472 w
+(is) 1460 2472 w
+(necessary) 1575 2472 w
+(to) 2085 2472 w
+(make) 2218 2472 w
+(changes) 2515 2472 w
+(within) 2949 2472 w
+(lines,) 3280 2472 w
+(but) 3574 2472 w
+(in) 3771 2472 w
+10 /LucidaTypewriter f
+(sam) 3897 2472 w
+10 /LucidaSansUnicode00 f
+(the) 4148 2472 w
+10 /LucidaTypewriter f
+(s) 4338 2472 w
+10 /LucidaSansUnicode00 f
+(command) 4446 2472 w
+(is) 4960 2472 w
+(more of a familiar convenience than a necessity;) 720 2592 w
+10 /LucidaTypewriter f
+(c) 3094 2592 w
+10 /LucidaSansUnicode00 f
+(and) 3198 2592 w
+10 /LucidaTypewriter f
+(t) 3410 2592 w
+10 /LucidaSansUnicode00 f
+(can do all the work.) 3514 2592 w
+(Second,) 970 2748 w
+(given) 1388 2748 w
+(a) 1688 2748 w
+(community) 1782 2748 w
+(that) 2361 2748 w
+(expects) 2592 2748 w
+(an) 3007 2748 w
+(editor) 3164 2748 w
+(to) 3491 2748 w
+(be) 3629 2748 w
+(about) 3788 2748 w
+(as) 4106 2748 w
+(powerful) 4252 2748 w
+(as) 4718 2748 w
+10 /LucidaTypewriter f
+(ed) 4864 2748 w
+10 /LucidaSansUnicode00 f
+(,) 5008 2748 w
+(it) 720 2868 w
+10 /LucidaSansUnicode20 f
+(\031) 786 2868 w
+10 /LucidaSansUnicode00 f
+(s) 818 2868 w
+(hard) 905 2868 w
+(to) 1162 2868 w
+(see) 1296 2868 w
+(how) 1495 2868 w
+10 /LucidaTypewriter f
+(sam) 1731 2868 w
+10 /LucidaSansUnicode00 f
+(could) 1983 2868 w
+(really) 2285 2868 w
+(be) 2583 2868 w
+(much) 2738 2868 w
+(simpler) 3042 2868 w
+(and) 3440 2868 w
+(still) 3656 2868 w
+(satisfy) 3867 2868 w
+(that) 4214 2868 w
+(expectation.) 4440 2868 w
+(People) 720 2988 w
+(want) 1073 2988 w
+(to) 1337 2988 w
+(do) 1469 2988 w
+10 /LucidaSansUnicode20 f
+(\030\030) 1627 2988 w
+10 /LucidaSansUnicode00 f
+(global) 1691 2988 w
+(substitutes,) 2024 2988 w
+10 /LucidaSansUnicode20 f
+(\031\031) 2592 2988 w
+10 /LucidaSansUnicode00 f
+(and) 2690 2988 w
+(most) 2904 2988 w
+(are) 3180 2988 w
+(content) 3366 2988 w
+(to) 3766 2988 w
+(have) 3898 2988 w
+(the) 4157 2988 w
+(recipe) 4346 2988 w
+(for) 4676 2988 w
+(that) 4849 2988 w
+(and) 720 3108 w
+(a) 944 3108 w
+(few) 1043 3108 w
+(other) 1257 3108 w
+(fancy) 1558 3108 w
+(changes.) 1858 3108 w
+(The) 2364 3108 w
+(sophistication) 2588 3108 w
+(of) 3309 3108 w
+(the) 3450 3108 w
+(command) 3648 3108 w
+(language) 4169 3108 w
+(is) 4655 3108 w
+(really) 4778 3108 w
+(just) 720 3228 w
+(a) 942 3228 w
+(veneer) 1039 3228 w
+(over) 1404 3228 w
+(a) 1656 3228 w
+(design) 1753 3228 w
+(that) 2118 3228 w
+(makes) 2351 3228 w
+(it) 2707 3228 w
+(possible) 2816 3228 w
+(to) 3262 3228 w
+(do) 3403 3228 w
+(global) 3570 3228 w
+(substitutes) 3912 3228 w
+(in) 4491 3228 w
+(a) 4625 3228 w
+(screen) 4723 3228 w
+(editor.) 720 3348 w
+(Some) 1104 3348 w
+(people will always want something more, however, and it) 1401 3348 w
+10 /LucidaSansUnicode20 f
+(\031) 4178 3348 w
+10 /LucidaSansUnicode00 f
+(s gratifying to be) 4210 3348 w
+(able) 720 3468 w
+(to) 968 3468 w
+(provide) 1111 3468 w
+(it.) 1521 3468 w
+(The) 1696 3468 w
+(real) 1922 3468 w
+(power) 2148 3468 w
+(of) 2491 3468 w
+10 /LucidaTypewriter f
+(sam) 2634 3468 w
+10 /LucidaSansUnicode20 f
+(\031) 2850 3468 w
+10 /LucidaSansUnicode00 f
+(s) 2882 3468 w
+(command) 2978 3468 w
+(language) 3502 3468 w
+(comes) 3991 3468 w
+(from) 4349 3468 w
+(compos\255) 4627 3468 w
+(ability) 720 3588 w
+(of) 1048 3588 w
+(the) 1180 3588 w
+(operators,) 1369 3588 w
+(which) 1901 3588 w
+(is) 2216 3588 w
+(by) 2330 3588 w
+(nature) 2479 3588 w
+(orthogonal) 2826 3588 w
+(to) 3390 3588 w
+(the) 3521 3588 w
+(underlying) 3709 3588 w
+(model.) 4260 3588 w
+(In) 4659 3588 w
+(other) 4783 3588 w
+(words,) 720 3708 w
+10 /LucidaTypewriter f
+(sam) 1090 3708 w
+10 /LucidaSansUnicode00 f
+(is) 1351 3708 w
+(not) 1476 3708 w
+(itself) 1681 3708 w
+(complex,) 1965 3708 w
+(but) 2456 3708 w
+(it) 2663 3708 w
+(makes) 2774 3708 w
+(complex) 3132 3708 w
+(things) 3591 3708 w
+(possible.) 3939 3708 w
+(If) 4452 3708 w
+(you) 4564 3708 w
+(don) 4785 3708 w
+10 /LucidaSansUnicode20 f
+(\031) 4971 3708 w
+10 /LucidaSansUnicode00 f
+(t) 5003 3708 w
+(want) 720 3828 w
+(to) 988 3828 w
+(do) 1123 3828 w
+(anything) 1284 3828 w
+(complex,) 1742 3828 w
+(you) 2225 3828 w
+(can) 2437 3828 w
+(ignore) 2642 3828 w
+(the) 2990 3828 w
+(complexity) 3181 3828 w
+(altogether,) 3749 3828 w
+(and) 4313 3828 w
+(many) 4529 3828 w
+(peo\255) 4827 3828 w
+(ple do so.) 720 3948 w
+(Sometimes) 970 4104 w
+(I) 1546 4104 w
+(am) 1621 4104 w
+(asked) 1815 4104 w
+(the) 2144 4104 w
+(opposite) 2345 4104 w
+(question:) 2812 4104 w
+(why) 3311 4104 w
+(didn) 3549 4104 w
+10 /LucidaSansUnicode20 f
+(\031) 3766 4104 w
+10 /LucidaSansUnicode00 f
+(t) 3798 4104 w
+(I) 3882 4104 w
+(just) 3958 4104 w
+(make) 4185 4104 w
+10 /LucidaTypewriter f
+(sam) 4494 4104 w
+10 /LucidaSansUnicode00 f
+(a) 4757 4104 w
+(real) 4859 4104 w
+(programmable) 720 4224 w
+(editor,) 1471 4224 w
+(with) 1828 4224 w
+(macros) 2071 4224 w
+(and) 2461 4224 w
+(variables) 2679 4224 w
+(and) 3148 4224 w
+(so) 3366 4224 w
+(on?) 3516 4224 w
+(The) 3751 4224 w
+(main) 3970 4224 w
+(reason) 4247 4224 w
+(is) 4611 4224 w
+(a) 4729 4224 w
+(mat\255) 4822 4224 w
+(ter) 720 4344 w
+(of) 895 4344 w
+(taste:) 1034 4344 w
+(I) 1343 4344 w
+(like) 1413 4344 w
+(the) 1626 4344 w
+(editor) 1822 4344 w
+(to) 2150 4344 w
+(be) 2289 4344 w
+(the) 2449 4344 w
+(same) 2645 4344 w
+(every) 2941 4344 w
+(time) 3239 4344 w
+(I) 3495 4344 w
+(use) 3565 4344 w
+(it.) 3775 4344 w
+(There) 3946 4344 w
+(is) 4265 4344 w
+(one) 4387 4344 w
+(technical) 4608 4344 w
+(reason,) 720 4464 w
+(though:) 1112 4464 w
+(programmability) 1524 4464 w
+(in) 2361 4464 w
+(editors) 2486 4464 w
+(is) 2858 4464 w
+(largely) 2972 4464 w
+(a) 3330 4464 w
+(workaround) 3419 4464 w
+(for) 4034 4464 w
+(insufficient) 4207 4464 w
+(inter\255) 4782 4464 w
+(activity.) 720 4584 w
+(Programmable) 1168 4584 w
+(editors) 1914 4584 w
+(are) 2294 4584 w
+(used) 2488 4584 w
+(to) 2762 4584 w
+(make) 2902 4584 w
+(particular,) 3206 4584 w
+(usually) 3743 4584 w
+(short-term,) 4125 4584 w
+(things) 4737 4584 w
+(easy) 720 4704 w
+(to) 968 4704 w
+(do,) 1100 4704 w
+(such) 1290 4704 w
+(as) 1549 4704 w
+(by) 1688 4704 w
+(providing) 1836 4704 w
+(shorthands) 2331 4704 w
+(for) 2909 4704 w
+(common) 3081 4704 w
+(actions.) 3535 4704 w
+(If) 3978 4704 w
+(things) 4077 4704 w
+(are) 4413 4704 w
+(generally) 4598 4704 w
+(easy) 720 4824 w
+(to) 967 4824 w
+(do) 1098 4824 w
+(in) 1255 4824 w
+(the) 1379 4824 w
+(first) 1567 4824 w
+(place,) 1795 4824 w
+(shorthands) 2115 4824 w
+(are) 2694 4824 w
+(not) 2880 4824 w
+(as) 3074 4824 w
+(helpful.) 3214 4824 w
+10 /LucidaTypewriter f
+(Sam) 3650 4824 w
+10 /LucidaSansUnicode00 f
+(makes) 3900 4824 w
+(common) 4247 4824 w
+(editing) 4702 4824 w
+(operations) 720 4944 w
+(very) 1278 4944 w
+(easy,) 1521 4944 w
+(and) 1809 4944 w
+(the) 2030 4944 w
+(solutions) 2226 4944 w
+(to) 2710 4944 w
+(complex) 2849 4944 w
+(editing) 3304 4944 w
+(problems) 3683 4944 w
+(seem) 4181 4944 w
+(commensu\255) 4478 4944 w
+(rate) 720 5064 w
+(with) 952 5064 w
+(the) 1200 5064 w
+(problems) 1399 5064 w
+(themselves.) 1900 5064 w
+(Also,) 2551 5064 w
+(the) 2837 5064 w
+(ability) 3036 5064 w
+(to) 3374 5064 w
+(edit) 3516 5064 w
+(the) 3745 5064 w
+10 /LucidaTypewriter f
+(sam) 3944 5064 w
+10 /LucidaSansUnicode00 f
+(window) 4204 5064 w
+(makes) 4617 5064 w
+(it) 4974 5064 w
+(easy) 720 5184 w
+(to) 976 5184 w
+(repeat) 1115 5184 w
+(commands) 1464 5184 w
+10 /LucidaSansUnicode20 f
+(\024) 2034 5184 w
+10 /LucidaSansUnicode00 f
+(it) 2175 5184 w
+(only) 2282 5184 w
+(takes) 2527 5184 w
+(a) 2825 5184 w
+(mouse) 2921 5184 w
+(button) 3285 5184 w
+(click) 3648 5184 w
+(to) 3907 5184 w
+(execute) 4046 5184 w
+(a) 4466 5184 w
+(command) 4562 5184 w
+(again.) 720 5304 w
+10 /LucidaSans-Demi f
+(Pros and cons) 720 5544 w
+10 /LucidaTypewriter f
+(Sam) 720 5700 w
+10 /LucidaSansUnicode00 f
+(has) 973 5700 w
+(several) 1178 5700 w
+(other) 1555 5700 w
+(good) 1849 5700 w
+(points,) 2133 5700 w
+(and) 2505 5700 w
+(its) 2722 5700 w
+(share) 2876 5700 w
+(of) 3179 5700 w
+(problems.) 3315 5700 w
+(Among) 3874 5700 w
+(the) 4259 5700 w
+(good) 4452 5700 w
+(things) 4737 5700 w
+(is) 720 5820 w
+(the) 850 5820 w
+(idea) 1055 5820 w
+(of) 1308 5820 w
+(structural) 1455 5820 w
+(regular) 1970 5820 w
+(expressions,) 2365 5820 w
+(whose) 3028 5820 w
+(usefulness) 3384 5820 w
+(has) 3950 5820 w
+(only) 4167 5820 w
+(begun) 4420 5820 w
+(to) 4774 5820 w
+(be) 4921 5820 w
+(explored.) 720 5940 w
+(They) 1256 5940 w
+(were) 1531 5940 w
+(arrived) 1803 5940 w
+(at) 2182 5940 w
+(serendipitously) 2316 5940 w
+(when) 3100 5940 w
+(I) 3399 5940 w
+(attempted) 3470 5940 w
+(to) 4009 5940 w
+(distill) 4149 5940 w
+(the) 4459 5940 w
+(essence) 4657 5940 w
+(of) 720 6060 w
+10 /LucidaTypewriter f
+(ed) 861 6060 w
+10 /LucidaSansUnicode20 f
+(\031) 1005 6060 w
+10 /LucidaSansUnicode00 f
+(s) 1037 6060 w
+(way) 1131 6060 w
+(of) 1358 6060 w
+(doing) 1499 6060 w
+(global) 1819 6060 w
+(substitution) 2161 6060 w
+(and) 2785 6060 w
+(recognized) 3008 6060 w
+(that) 3589 6060 w
+(the) 3823 6060 w
+(looping) 4020 6060 w
+(command) 4429 6060 w
+(in) 4949 6060 w
+10 /LucidaTypewriter f
+(ed) 720 6180 w
+10 /LucidaSansUnicode00 f
+(was implicitly imposing a structure \(an array of lines\) on the file.) 896 6180 w
+(Another) 970 6336 w
+(of) 1402 6336 w
+10 /LucidaTypewriter f
+(sam) 1544 6336 w
+10 /LucidaSansUnicode20 f
+(\031) 1760 6336 w
+10 /LucidaSansUnicode00 f
+(s) 1792 6336 w
+(good) 1887 6336 w
+(things) 2178 6336 w
+(is) 2525 6336 w
+(its) 2649 6336 w
+(undo) 2811 6336 w
+(capability.) 3104 6336 w
+(I) 3676 6336 w
+(had) 3750 6336 w
+(never) 3975 6336 w
+(before) 4287 6336 w
+(used) 4646 6336 w
+(an) 4923 6336 w
+(editor) 720 6456 w
+(with) 1042 6456 w
+(a) 1282 6456 w
+(true) 1372 6456 w
+(undo,) 1603 6456 w
+(but) 1918 6456 w
+(I) 2115 6456 w
+(would) 2179 6456 w
+(never) 2506 6456 w
+(go) 2808 6456 w
+(back) 2966 6456 w
+(now.) 3228 6456 w
+(Undo) 3527 6456 w
+10 /LucidaSans-Italic f
+(must) 3816 6456 w
+10 /LucidaSansUnicode00 f
+(be) 4092 6456 w
+(done) 4245 6456 w
+(well,) 4521 6456 w
+(but) 4778 6456 w
+(if) 4974 6456 w
+(it) 720 6576 w
+(is,) 824 6576 w
+(it) 974 6576 w
+(can) 1078 6576 w
+(be) 1284 6576 w
+(relied) 1441 6576 w
+(on.) 1753 6576 w
+(For) 1978 6576 w
+(example,) 2172 6576 w
+(it) 2655 6576 w
+10 /LucidaSansUnicode20 f
+(\031) 2721 6576 w
+10 /LucidaSansUnicode00 f
+(s) 2753 6576 w
+(safe) 2842 6576 w
+(to) 3079 6576 w
+(experiment) 3215 6576 w
+(if) 3807 6576 w
+(you) 3912 6576 w
+10 /LucidaSansUnicode20 f
+(\031) 4087 6576 w
+10 /LucidaSansUnicode00 f
+(re) 4119 6576 w
+(not) 4255 6576 w
+(sure) 4454 6576 w
+(how) 4703 6576 w
+(to) 4942 6576 w
+(write) 720 6696 w
+(some) 1006 6696 w
+(intricate) 1313 6696 w
+(command,) 1756 6696 w
+(because) 2311 6696 w
+(if) 2750 6696 w
+(you) 2861 6696 w
+(make) 3081 6696 w
+(a) 3388 6696 w
+(mistake,) 3488 6696 w
+(it) 3944 6696 w
+(can) 4055 6696 w
+(be) 4268 6696 w
+(fixed) 4432 6696 w
+(simply) 4723 6696 w
+(and) 720 6816 w
+(reliably.) 941 6816 w
+(I) 1400 6816 w
+(learned) 1470 6816 w
+(two) 1873 6816 w
+(things) 2089 6816 w
+(about) 2433 6816 w
+(undo) 2753 6816 w
+(from) 3043 6816 w
+(writing) 3317 6816 w
+10 /LucidaTypewriter f
+(sam) 3696 6816 w
+10 /LucidaSansUnicode00 f
+(:) 3912 6816 w
+(first,) 3986 6816 w
+(it) 4255 6816 w
+10 /LucidaSansUnicode20 f
+(\031) 4321 6816 w
+10 /LucidaSansUnicode00 f
+(s) 4353 6816 w
+(easy) 4446 6816 w
+(to) 4702 6816 w
+(pro\255) 4842 6816 w
+(vide) 720 6936 w
+(if) 955 6936 w
+(you) 1056 6936 w
+(design) 1266 6936 w
+(it) 1624 6936 w
+(in) 1725 6936 w
+(from) 1851 6936 w
+(the) 2117 6936 w
+(beginning,) 2306 6936 w
+(and) 2859 6936 w
+(second,) 3073 6936 w
+(it) 3483 6936 w
+10 /LucidaSansUnicode20 f
+(\031) 3549 6936 w
+10 /LucidaSansUnicode00 f
+(s) 3581 6936 w
+(necessary,) 3666 6936 w
+(particularly) 4207 6936 w
+(if) 4785 6936 w
+(the) 4885 6936 w
+(system has some subtle properties that may be unfamiliar or error-prone for users.) 720 7056 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 28 28
+%%Page: 29 29
+/saveobj save def
+mark
+29 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 29 \255) 2752 480 w
+10 /LucidaTypewriter f
+(Sam) 970 840 w
+10 /LucidaSansUnicode20 f
+(\031) 1186 840 w
+10 /LucidaSansUnicode00 f
+(s) 1218 840 w
+(lack) 1309 840 w
+(of) 1542 840 w
+(internal) 1680 840 w
+(limits) 2091 840 w
+(and) 2399 840 w
+(sizes) 2619 840 w
+(is) 2903 840 w
+(a) 3023 840 w
+(virtue.) 3118 840 w
+(Because) 3500 840 w
+(it) 3930 840 w
+(avoids) 4037 840 w
+(all) 4389 840 w
+(fixed-size) 4543 840 w
+(tables) 720 960 w
+(and) 1046 960 w
+(data) 1261 960 w
+(structures,) 1506 960 w
+10 /LucidaTypewriter f
+(sam) 2061 960 w
+10 /LucidaSansUnicode00 f
+(is) 2311 960 w
+(able) 2425 960 w
+(to) 2662 960 w
+(make) 2794 960 w
+(global) 3090 960 w
+(changes) 3423 960 w
+(to) 3856 960 w
+(files) 3988 960 w
+(that) 4224 960 w
+(some) 4449 960 w
+(of) 4744 960 w
+(our) 4876 960 w
+(other) 720 1080 w
+(tools) 1013 1080 w
+(cannot) 1289 1080 w
+(even) 1654 1080 w
+(read.) 1917 1080 w
+(Moreover,) 2233 1080 w
+(the) 2756 1080 w
+(design) 2948 1080 w
+(keeps) 3308 1080 w
+(the) 3629 1080 w
+(performance) 3821 1080 w
+(linear) 4474 1080 w
+(when) 4783 1080 w
+(doing) 720 1200 w
+(such) 1039 1200 w
+(operations,) 1307 1200 w
+(although) 1897 1200 w
+(I) 2369 1200 w
+(must) 2439 1200 w
+(admit) 2723 1200 w
+10 /LucidaTypewriter f
+(sam) 3041 1200 w
+10 /LucidaSansUnicode00 f
+(does) 3298 1200 w
+(get) 3570 1200 w
+(slow) 3766 1200 w
+(when) 4025 1200 w
+(editing) 4323 1200 w
+(a) 4702 1200 w
+(huge) 4798 1200 w
+(file.) 720 1320 w
+(Now,) 970 1476 w
+(the) 1249 1476 w
+(problems.) 1439 1476 w
+(Externally,) 1995 1476 w
+(the) 2538 1476 w
+(most) 2728 1476 w
+(obvious) 3005 1476 w
+(is) 3419 1476 w
+(that) 3534 1476 w
+(it) 3760 1476 w
+(is) 3861 1476 w
+(poorly) 3976 1476 w
+(integrated) 4318 1476 w
+(into) 4851 1476 w
+(the) 720 1596 w
+(surrounding) 909 1596 w
+(window) 1539 1596 w
+(system.) 1942 1596 w
+(By) 2380 1596 w
+(design,) 2524 1596 w
+(the) 2913 1596 w
+(user) 3102 1596 w
+(interface) 3346 1596 w
+(in) 3803 1596 w
+10 /LucidaTypewriter f
+(sam) 3927 1596 w
+10 /LucidaSansUnicode00 f
+(feels) 4176 1596 w
+(almost) 4438 1596 w
+(iden\255) 4797 1596 w
+(tical to that of) 720 1716 w
+10 /LucidaTypewriter f
+(mux) 1436 1716 w
+10 /LucidaSansUnicode00 f
+(, but a thick wall separates) 1652 1716 w
+(text) 2986 1716 w
+(in) 3210 1716 w
+10 /LucidaTypewriter f
+(sam) 3334 1716 w
+10 /LucidaSansUnicode00 f
+(from) 3583 1716 w
+(the) 3848 1716 w
+(programs) 4036 1716 w
+(running) 4536 1716 w
+(in) 4949 1716 w
+10 /LucidaTypewriter f
+(mux) 720 1836 w
+10 /LucidaSansUnicode00 f
+(.) 936 1836 w
+(For) 1034 1836 w
+(instance,) 1224 1836 w
+(the) 1693 1836 w
+10 /LucidaSansUnicode20 f
+(\030) 1882 1836 w
+10 /LucidaSansUnicode00 f
+(snarf) 1914 1836 w
+(buffer) 2194 1836 w
+10 /LucidaSansUnicode20 f
+(\031) 2490 1836 w
+10 /LucidaSansUnicode00 f
+(in) 2556 1836 w
+10 /LucidaTypewriter f
+(sam) 2681 1836 w
+10 /LucidaSansUnicode00 f
+(must) 2930 1836 w
+(be) 3206 1836 w
+(maintained) 3358 1836 w
+(separately) 3932 1836 w
+(from) 4460 1836 w
+(that) 4725 1836 w
+(in) 4949 1836 w
+10 /LucidaTypewriter f
+(mux) 720 1956 w
+10 /LucidaSansUnicode00 f
+(.) 936 1956 w
+(This) 1035 1956 w
+(is) 1275 1956 w
+(regrettable,) 1390 1956 w
+(but) 1990 1956 w
+(probably) 2187 1956 w
+(necessary) 2649 1956 w
+(given) 3159 1956 w
+(the) 3456 1956 w
+(unusual) 3647 1956 w
+(configuration) 4066 1956 w
+(of) 4751 1956 w
+(the) 4885 1956 w
+(system, with a programmable terminal on the far end of an RS-232 link.) 720 2076 w
+10 /LucidaTypewriter f
+(Sam) 970 2232 w
+10 /LucidaSansUnicode00 f
+(is) 1228 2232 w
+(reliable;) 1350 2232 w
+(otherwise,) 1782 2232 w
+(people) 2326 2232 w
+(wouldn) 2696 2232 w
+10 /LucidaSansUnicode20 f
+(\031) 3050 2232 w
+10 /LucidaSansUnicode00 f
+(t) 3082 2232 w
+(use) 3161 2232 w
+(it.) 3373 2232 w
+(But) 3546 2232 w
+(it) 3746 2232 w
+(was) 3855 2232 w
+(written) 4081 2232 w
+(over) 4463 2232 w
+(such) 4716 2232 w
+(a) 4985 2232 w
+(long) 720 2352 w
+(time,) 971 2352 w
+(and) 1255 2352 w
+(has) 1472 2352 w
+(so) 1676 2352 w
+(many) 1824 2352 w
+(new) 2122 2352 w
+(\(to) 2353 2352 w
+(me\)) 2520 2352 w
+(ideas) 2738 2352 w
+(in) 3028 2352 w
+(it,) 3155 2352 w
+(that) 3289 2352 w
+(I) 3516 2352 w
+(would) 3581 2352 w
+(like) 3909 2352 w
+(to) 4117 2352 w
+(see) 4251 2352 w
+(it) 4450 2352 w
+(done) 4552 2352 w
+(over) 4830 2352 w
+(again to clean up) 720 2472 w
+(the) 1588 2472 w
+(code) 1776 2472 w
+(and) 2040 2472 w
+(remove) 2253 2472 w
+(many) 2645 2472 w
+(of) 2940 2472 w
+(the) 3071 2472 w
+(lingering) 3259 2472 w
+(problems) 3724 2472 w
+(in) 4214 2472 w
+(the) 4338 2472 w
+(implemen\255) 4526 2472 w
+(tation.) 720 2592 w
+(The) 1111 2592 w
+(worst) 1338 2592 w
+(part) 1651 2592 w
+(is) 1893 2592 w
+(in) 2019 2592 w
+(the) 2156 2592 w
+(interconnection) 2357 2592 w
+(of) 3160 2592 w
+(the) 3304 2592 w
+(host) 3505 2592 w
+(and) 3762 2592 w
+(terminal) 3988 2592 w
+(parts,) 4435 2592 w
+(which) 4759 2592 w
+(might) 720 2712 w
+(even) 1047 2712 w
+(be) 1317 2712 w
+(able) 1480 2712 w
+(to) 1727 2712 w
+(go) 1869 2712 w
+(away) 2036 2712 w
+(in) 2319 2712 w
+(a) 2454 2712 w
+(redesign) 2553 2712 w
+(for) 3017 2712 w
+(a) 3200 2712 w
+(more) 3299 2712 w
+(conventional) 3594 2712 w
+(window) 4255 2712 w
+(system.) 4668 2712 w
+(The) 720 2832 w
+(program) 938 2832 w
+(must) 1391 2832 w
+(be) 1671 2832 w
+(split) 1826 2832 w
+(in) 2071 2832 w
+(two) 2198 2832 w
+(to) 2409 2832 w
+(use) 2543 2832 w
+(the) 2748 2832 w
+(terminal) 2939 2832 w
+(effectively,) 3377 2832 w
+(but) 3937 2832 w
+(the) 4135 2832 w
+(low) 4326 2832 w
+(bandwidth) 4529 2832 w
+(of) 720 2952 w
+(the) 854 2952 w
+(connection) 1045 2952 w
+(forces) 1613 2952 w
+(the) 1946 2952 w
+(separation) 2137 2952 w
+(to) 2683 2952 w
+(occur) 2817 2952 w
+(in) 3119 2952 w
+(an) 3246 2952 w
+(inconvenient) 3399 2952 w
+(part) 4054 2952 w
+(of) 4287 2952 w
+(the) 4422 2952 w
+(design) 4614 2952 w
+(if) 4974 2952 w
+(performance) 720 3072 w
+(is) 1372 3072 w
+(to) 1488 3072 w
+(be) 1622 3072 w
+(acceptable.) 1776 3072 w
+(A) 2391 3072 w
+(simple) 2495 3072 w
+(remote) 2851 3072 w
+(procedure) 3230 3072 w
+(call) 3759 3072 w
+(protocol) 3958 3072 w
+(driven) 4397 3072 w
+(by) 4735 3072 w
+(the) 4885 3072 w
+(host, emitting only graphics commands,) 720 3192 w
+(would) 2708 3192 w
+(be) 3033 3192 w
+(easy) 3185 3192 w
+(to) 3432 3192 w
+(write) 3563 3192 w
+(but) 3836 3192 w
+(wouldn) 4031 3192 w
+10 /LucidaSansUnicode20 f
+(\031) 4385 3192 w
+10 /LucidaSansUnicode00 f
+(t) 4417 3192 w
+(have) 4487 3192 w
+(nearly) 4745 3192 w
+(the) 720 3312 w
+(necessary) 921 3312 w
+(responsiveness.) 1442 3312 w
+(On) 2294 3312 w
+(the) 2480 3312 w
+(other) 2681 3312 w
+(hand,) 2984 3312 w
+(if) 3304 3312 w
+(the) 3415 3312 w
+(terminal) 3615 3312 w
+(were) 4062 3312 w
+(in) 4337 3312 w
+(control) 4473 3312 w
+(and) 4860 3312 w
+(requested) 720 3432 w
+(much) 1245 3432 w
+(simpler) 1553 3432 w
+(file) 1955 3432 w
+(services) 2146 3432 w
+(from) 2573 3432 w
+(the) 2845 3432 w
+(host,) 3041 3432 w
+(regular) 3325 3432 w
+(expression) 3712 3432 w
+(searches) 4284 3432 w
+(would) 4748 3432 w
+(require) 720 3552 w
+(that) 1103 3552 w
+(the) 1329 3552 w
+(terminal) 1519 3552 w
+(read) 1956 3552 w
+(the) 2206 3552 w
+(entire) 2396 3552 w
+(file) 2712 3552 w
+(over) 2898 3552 w
+(its) 3143 3552 w
+(RS-232) 3295 3552 w
+(link,) 3693 3552 w
+(which) 3937 3552 w
+(would) 4252 3552 w
+(be) 4578 3552 w
+(unrea\255) 4731 3552 w
+(sonably) 720 3672 w
+(slow.) 1126 3672 w
+(A) 1441 3672 w
+(compromise) 1543 3672 w
+(in) 2175 3672 w
+(which) 2299 3672 w
+(either) 2613 3672 w
+(end) 2927 3672 w
+(can) 3141 3672 w
+(take) 3343 3672 w
+(control) 3583 3672 w
+(is) 3959 3672 w
+(necessary.) 4073 3672 w
+(In) 4646 3672 w
+(retro\255) 4771 3672 w
+(spect,) 720 3792 w
+(the) 1057 3792 w
+(communications) 1259 3792 w
+(protocol) 2103 3792 w
+(should) 2554 3792 w
+(have) 2929 3792 w
+(been) 3201 3792 w
+(designed) 3485 3792 w
+(and) 3974 3792 w
+(verified) 4201 3792 w
+(formally,) 4611 3792 w
+(although) 720 3912 w
+(I) 1189 3912 w
+(do) 1257 3912 w
+(not) 1420 3912 w
+(know) 1619 3912 w
+(of) 1916 3912 w
+(any) 2053 3912 w
+(tool) 2261 3912 w
+(that) 2488 3912 w
+(can) 2718 3912 w
+(adequately) 2925 3912 w
+(relate) 3492 3912 w
+(the) 3805 3912 w
+(protocol) 3999 3912 w
+(to) 4442 3912 w
+(its) 4580 3912 w
+(imple\255) 4737 3912 w
+(mentation.) 720 4032 w
+(Not) 970 4188 w
+(all) 1189 4188 w
+(of) 1349 4188 w
+10 /LucidaTypewriter f
+(sam) 1494 4188 w
+10 /LucidaSansUnicode20 f
+(\031) 1710 4188 w
+10 /LucidaSansUnicode00 f
+(s) 1742 4188 w
+(users) 1840 4188 w
+(are) 2148 4188 w
+(comfortable) 2347 4188 w
+(with) 2978 4188 w
+(its) 3230 4188 w
+(command) 3394 4188 w
+(language,) 3919 4188 w
+(and) 4442 4188 w
+(few) 4670 4188 w
+(are) 4888 4188 w
+(adept.) 720 4308 w
+(Some) 1112 4308 w
+(\(venerable\)) 1430 4308 w
+(people) 2020 4308 w
+(use) 2402 4308 w
+(a) 2625 4308 w
+(sort) 2734 4308 w
+(of) 2978 4308 w
+10 /LucidaSansUnicode20 f
+(\030\030) 3129 4308 w
+10 /LucidaTypewriter f
+(ed) 3193 4308 w
+10 /LucidaSansUnicode00 f
+(subset) 3390 4308 w
+10 /LucidaSansUnicode20 f
+(\031\031) 3710 4308 w
+10 /LucidaSansUnicode00 f
+(of) 3827 4308 w
+10 /LucidaTypewriter f
+(sam) 3978 4308 w
+10 /LucidaSansUnicode20 f
+(\031) 4194 4308 w
+10 /LucidaSansUnicode00 f
+(s) 4226 4308 w
+(command) 4330 4308 w
+(lan\255) 4861 4308 w
+(guage,) 720 4428 w
+(and) 1082 4428 w
+(even) 1295 4428 w
+(ask) 1554 4428 w
+(why) 1751 4428 w
+10 /LucidaTypewriter f
+(sam) 1975 4428 w
+10 /LucidaSansUnicode20 f
+(\031) 2191 4428 w
+10 /LucidaSansUnicode00 f
+(s) 2223 4428 w
+(command) 2307 4428 w
+(language) 2818 4428 w
+(is) 3294 4428 w
+(not) 3408 4428 w
+(exactly) 3602 4428 w
+10 /LucidaTypewriter f
+(ed) 3977 4428 w
+10 /LucidaSansUnicode20 f
+(\031) 4121 4428 w
+10 /LucidaSansUnicode00 f
+(s.) 4153 4428 w
+(\(The) 4302 4428 w
+(reason,) 4550 4428 w
+(of) 4942 4428 w
+(course,) 720 4548 w
+(is) 1110 4548 w
+(that) 1226 4548 w
+10 /LucidaTypewriter f
+(sam) 1453 4548 w
+10 /LucidaSansUnicode20 f
+(\031) 1669 4548 w
+10 /LucidaSansUnicode00 f
+(s) 1701 4548 w
+(model) 1788 4548 w
+(for) 2125 4548 w
+(text) 2299 4548 w
+(does) 2525 4548 w
+(not) 2791 4548 w
+(include) 2986 4548 w
+(newlines,) 3373 4548 w
+(which) 3862 4548 w
+(are) 4178 4548 w
+(central) 4365 4548 w
+(to) 4731 4548 w
+10 /LucidaTypewriter f
+(ed) 4864 4548 w
+10 /LucidaSansUnicode00 f
+(.) 5008 4548 w
+(Making) 720 4668 w
+(the) 1108 4668 w
+(text) 1299 4668 w
+(an) 1526 4668 w
+(array) 1679 4668 w
+(of) 1959 4668 w
+(newlines) 2093 4668 w
+(to) 2551 4668 w
+(the) 2685 4668 w
+(command) 2876 4668 w
+(language) 3390 4668 w
+(would) 3869 4668 w
+(be) 4197 4668 w
+(too) 4352 4668 w
+(much) 4547 4668 w
+(of) 4851 4668 w
+(a) 4985 4668 w
+(break) 720 4788 w
+(from) 1032 4788 w
+(the) 1303 4788 w
+(seamless) 1497 4788 w
+(model) 1978 4788 w
+(provided) 2319 4788 w
+(by) 2785 4788 w
+(the) 2938 4788 w
+(mouse.) 3131 4788 w
+(Some) 3556 4788 w
+(editors,) 3858 4788 w
+(such) 4266 4788 w
+(as) 4530 4788 w
+10 /LucidaTypewriter f
+(vi) 4674 4788 w
+10 /LucidaSansUnicode00 f
+(,) 4818 4788 w
+(are) 4888 4788 w
+(willing) 720 4908 w
+(to) 1082 4908 w
+(make) 1225 4908 w
+(this) 1532 4908 w
+(break,) 1756 4908 w
+(though.\)) 2106 4908 w
+(The) 2594 4908 w
+(difficulty) 2820 4908 w
+(is) 3292 4908 w
+(that) 3418 4908 w
+10 /LucidaTypewriter f
+(sam) 3655 4908 w
+10 /LucidaSansUnicode20 f
+(\031) 3871 4908 w
+10 /LucidaSansUnicode00 f
+(s) 3903 4908 w
+(syntax) 4000 4908 w
+(is) 4364 4908 w
+(so) 4490 4908 w
+(close) 4648 4908 w
+(to) 4942 4908 w
+10 /LucidaTypewriter f
+(ed) 720 5028 w
+10 /LucidaSansUnicode20 f
+(\031) 864 5028 w
+10 /LucidaSansUnicode00 f
+(s) 896 5028 w
+(that) 996 5028 w
+(people) 1236 5028 w
+(believe) 1613 5028 w
+(it) 2003 5028 w
+10 /LucidaSans-Italic f
+(should) 2118 5028 w
+10 /LucidaSansUnicode00 f
+(be) 2487 5028 w
+(the) 2655 5028 w
+(same.) 2859 5028 w
+(I) 3227 5028 w
+(thought,) 3305 5028 w
+(with) 3769 5028 w
+(some) 4022 5028 w
+(justification) 4331 5028 w
+(in) 4949 5028 w
+(hindsight,) 720 5148 w
+(that) 1250 5148 w
+(making) 1482 5148 w
+10 /LucidaTypewriter f
+(sam) 1882 5148 w
+10 /LucidaSansUnicode00 f
+(similar) 2139 5148 w
+(to) 2507 5148 w
+10 /LucidaTypewriter f
+(ed) 2646 5148 w
+10 /LucidaSansUnicode00 f
+(would) 2832 5148 w
+(make) 3166 5148 w
+(it) 3470 5148 w
+(easier) 3578 5148 w
+(to) 3908 5148 w
+(learn) 4048 5148 w
+(and) 4333 5148 w
+(to) 4555 5148 w
+(accept.) 4695 5148 w
+(But) 720 5268 w
+(I) 921 5268 w
+(may) 994 5268 w
+(have) 1238 5268 w
+(overstepped) 1507 5268 w
+(and) 2150 5268 w
+(raised) 2374 5268 w
+(the) 2713 5268 w
+(users) 2911 5268 w
+10 /LucidaSansUnicode20 f
+(\031) 3172 5268 w
+10 /LucidaSansUnicode00 f
+(expectations) 3247 5268 w
+(too) 3909 5268 w
+(much.) 4111 5268 w
+(It) 4486 5268 w
+10 /LucidaSansUnicode20 f
+(\031) 4552 5268 w
+10 /LucidaSansUnicode00 f
+(s) 4584 5268 w
+(hard) 4678 5268 w
+(to) 4942 5268 w
+(decide which way to resolve this problem.) 720 5388 w
+(Finally,) 970 5544 w
+(there) 1350 5544 w
+(is) 1640 5544 w
+(a) 1758 5544 w
+(tradeoff) 1851 5544 w
+(in) 2276 5544 w
+10 /LucidaTypewriter f
+(sam) 2405 5544 w
+10 /LucidaSansUnicode00 f
+(that) 2659 5544 w
+(was) 2888 5544 w
+(decided) 3109 5544 w
+(by) 3528 5544 w
+(the) 3681 5544 w
+(environment) 3874 5544 w
+(in) 4524 5544 w
+(which) 4654 5544 w
+(it) 4974 5544 w
+(runs:) 720 5664 w
+10 /LucidaTypewriter f
+(sam) 1011 5664 w
+10 /LucidaSansUnicode00 f
+(is) 1270 5664 w
+(a) 1393 5664 w
+(multi-file) 1491 5664 w
+(editor,) 1993 5664 w
+(although) 2355 5664 w
+(in) 2828 5664 w
+(a) 2962 5664 w
+(different) 3060 5664 w
+(system) 3521 5664 w
+(there) 3904 5664 w
+(might) 4199 5664 w
+(instead) 4525 5664 w
+(be) 4921 5664 w
+(multiple) 720 5784 w
+(single-file) 1167 5784 w
+(editors.) 1714 5784 w
+(The) 2165 5784 w
+(decision) 2395 5784 w
+(was) 2846 5784 w
+(made) 3078 5784 w
+(primarily) 3394 5784 w
+(because) 3875 5784 w
+(starting) 4318 5784 w
+(a) 4741 5784 w
+(new) 4845 5784 w
+(program) 720 5904 w
+(in) 1187 5904 w
+(a) 1329 5904 w
+(Blit) 1435 5904 w
+(is) 1638 5904 w
+(time-consuming.) 1768 5904 w
+(If) 2688 5904 w
+(the) 2804 5904 w
+(choice) 3009 5904 w
+(could) 3369 5904 w
+(be) 3685 5904 w
+(made) 3854 5904 w
+(freely,) 4171 5904 w
+(however,) 4524 5904 w
+(I) 5011 5904 w
+(would still choose the multi-file architecture, because) 720 6024 w
+(it) 3372 6024 w
+(allows) 3471 6024 w
+(groups) 3806 6024 w
+(of) 4179 6024 w
+(files) 4310 6024 w
+(to) 4545 6024 w
+(be) 4676 6024 w
+(han\255) 4828 6024 w
+(dled) 720 6144 w
+(as) 990 6144 w
+(a) 1155 6144 w
+(unit;) 1268 6144 w
+(the) 1548 6144 w
+(usefulness) 1761 6144 w
+(of) 2336 6144 w
+(the) 2492 6144 w
+(multi-file) 2705 6144 w
+(commands) 3222 6144 w
+(is) 3809 6144 w
+(incontrovertible.) 3947 6144 w
+(It) 4836 6144 w
+(is) 4960 6144 w
+(delightful to have the source to an entire program available at your fingertips.) 720 6264 w
+10 /LucidaSans-Demi f
+(Acknowledgements) 720 6504 w
+10 /LucidaSansUnicode00 f
+(Tom) 720 6660 w
+(Cargill) 983 6660 w
+(suggested) 1343 6660 w
+(the) 1889 6660 w
+(idea) 2090 6660 w
+(behind) 2339 6660 w
+(the) 2720 6660 w
+10 /LucidaTypewriter f
+(Rasp) 2921 6660 w
+10 /LucidaSansUnicode00 f
+(data) 3256 6660 w
+(structure.) 3513 6660 w
+(Norman) 4062 6660 w
+(Wilson) 4495 6660 w
+(and) 4860 6660 w
+(Ken) 720 6780 w
+(Thompson) 949 6780 w
+(influenced) 1511 6780 w
+(the) 2063 6780 w
+(command) 2263 6780 w
+(language.) 2786 6780 w
+(This) 3338 6780 w
+(paper) 3588 6780 w
+(was) 3911 6780 w
+(improved) 4139 6780 w
+(by) 4642 6780 w
+(com\255) 4802 6780 w
+(ments) 720 6900 w
+(from) 1064 6900 w
+(Al) 1341 6900 w
+(Aho,) 1484 6900 w
+(Jon) 1753 6900 w
+(Bentley,) 1952 6900 w
+(Chris) 2379 6900 w
+(Fraser,) 2676 6900 w
+(Gerard) 3051 6900 w
+(Holzmann,) 3424 6900 w
+(Brian) 3995 6900 w
+(Kernighan,) 4286 6900 w
+(Ted) 4858 6900 w
+(Kowalski, Doug McIlroy and Dennis Ritchie.) 720 7020 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 29 29
+%%Page: 30 30
+/saveobj save def
+mark
+30 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 30 \255) 2752 480 w
+10 /LucidaSans-Demi f
+(REFERENCES) 720 840 w
+10 /LucidaSansUnicode00 f
+(1. R.) 783 1032 w
+(Pike,) 1042 1032 w
+10 /LucidaSansUnicode20 f
+(\030) 1309 1032 w
+10 /LucidaSansUnicode00 f
+(The) 1341 1032 w
+(Blit:) 1559 1032 w
+(a) 1781 1032 w
+(multiplexed) 1873 1032 w
+(graphics) 2488 1032 w
+(terminal,) 2939 1032 w
+10 /LucidaSansUnicode20 f
+(\031) 3373 1032 w
+10 /LucidaSans-Italic f
+(AT&T) 3442 1032 w
+(Bell) 3742 1032 w
+(Labs.) 3949 1032 w
+(Tech.) 4244 1032 w
+(J.,) 4540 1032 w
+10 /LucidaSans-Demi f
+(63) 4682 1032 w
+10 /LucidaSansUnicode00 f
+(,) 4810 1032 w
+(\(8\),) 4879 1032 w
+(1607-1631 \(1984\).) 910 1152 w
+(2. L. Johnson,) 783 1308 w
+10 /LucidaSans-Italic f
+(MacWrite,) 1481 1308 w
+10 /LucidaSansUnicode00 f
+(Apple Computer Inc., Cupertino, Calif. 1983.) 1996 1308 w
+(3. B.) 783 1464 w
+(Lampson,) 1047 1464 w
+10 /LucidaSansUnicode20 f
+(\030) 1564 1464 w
+10 /LucidaSansUnicode00 f
+(Bravo) 1596 1464 w
+(Manual,) 1910 1464 w
+10 /LucidaSansUnicode20 f
+(\031) 2291 1464 w
+10 /LucidaSansUnicode00 f
+(in) 2371 1464 w
+10 /LucidaSans-Italic f
+(Alto) 2510 1464 w
+(User's) 2751 1464 w
+(Handbook,) 3099 1464 w
+10 /LucidaSansUnicode00 f
+(pp.) 3670 1464 w
+(31-62,) 3876 1464 w
+(Xerox) 4266 1464 w
+(Palo) 4596 1464 w
+(Alto) 4844 1464 w
+(Research Center, Palo Alto, Calif.) 910 1584 w
+(1979.) 2569 1584 w
+(4. W. Teitelman, ) 783 1740 w
+10 /LucidaSansUnicode20 f
+(\030) 1604 1740 w
+10 /LucidaSansUnicode00 f
+(A tour through Cedar,) 1636 1740 w
+10 /LucidaSansUnicode20 f
+(\031) 2705 1740 w
+10 /LucidaSans-Italic f
+(IEEE Software,) 2769 1740 w
+10 /LucidaSans-Demi f
+(1) 3487 1740 w
+10 /LucidaSansUnicode00 f
+(\(2\), 44-73 \(1984\).) 3583 1740 w
+(5. J.) 783 1896 w
+(Gutknecht,) 1031 1896 w
+10 /LucidaSansUnicode20 f
+(\030) 1618 1896 w
+10 /LucidaSansUnicode00 f
+(Concepts) 1650 1896 w
+(of) 2158 1896 w
+(the) 2315 1896 w
+(text) 2529 1896 w
+(editor) 2779 1896 w
+(Lara,) 3125 1896 w
+10 /LucidaSansUnicode20 f
+(\031) 3361 1896 w
+10 /LucidaSans-Italic f
+(Comm.) 3452 1896 w
+(ACM,) 3854 1896 w
+10 /LucidaSans-Demi f
+(28) 4165 1896 w
+10 /LucidaSansUnicode00 f
+(,) 4293 1896 w
+(\(9\),) 4384 1896 w
+(942-960) 4604 1896 w
+(\(1985\).) 910 2016 w
+(6. Bell) 783 2172 w
+(Telephone) 1166 2172 w
+(Laboratories,) 1758 2172 w
+10 /LucidaSans-Italic f
+(UNIX) 2477 2172 w
+(Programmer's) 2795 2172 w
+(Manual,) 3580 2172 w
+10 /LucidaSansUnicode00 f
+(Holt,) 4054 2172 w
+(Rinehart) 4371 2172 w
+(and) 4860 2172 w
+(Winston, New York 1983.) 910 2292 w
+(7. B.) 783 2448 w
+(W.) 1055 2448 w
+(Kernighan) 1228 2448 w
+(and) 1777 2448 w
+(R.) 2012 2448 w
+(Pike,) 2162 2448 w
+10 /LucidaSans-Italic f
+(The) 2447 2448 w
+(Unix) 2679 2448 w
+(Programming) 2948 2448 w
+(Environment,) 3675 2448 w
+10 /LucidaSansUnicode00 f
+(Prentice-Hall,) 4376 2448 w
+(Englewood Cliffs, New Jersey 1984.) 910 2568 w
+(8.) 783 2724 w
+10 /LucidaSans-Italic f
+(Unix) 910 2724 w
+(Time-Sharing) 1166 2724 w
+(System) 1886 2724 w
+(Programmer's) 2271 2724 w
+(Manual,) 3014 2724 w
+(Research) 3446 2724 w
+(Version,) 3927 2724 w
+(Ninth) 4369 2724 w
+(Edition,) 4677 2724 w
+(Volume 1,) 910 2844 w
+10 /LucidaSansUnicode00 f
+(AT&T Bell Laboratories, Murray Hill, New Jersey 1986.) 1432 2844 w
+(9.) 783 3000 w
+10 /LucidaSans-Italic f
+(Unix) 910 3000 w
+(Time-Sharing) 1239 3000 w
+(System) 2032 3000 w
+(Programmer's) 2491 3000 w
+(Manual,) 3308 3000 w
+(4.1) 3814 3000 w
+(Berkeley) 4088 3000 w
+(Software) 4612 3000 w
+(Distribution, Volumes 1 and 2C,) 910 3120 w
+10 /LucidaSansUnicode00 f
+(University of California, Berkeley, Calif. 1981.) 2500 3120 w
+(10. R.) 720 3276 w
+(Pike,) 1056 3276 w
+10 /LucidaSansUnicode20 f
+(\030) 1337 3276 w
+10 /LucidaSansUnicode00 f
+(Structural) 1369 3276 w
+(Regular) 1889 3276 w
+(Expressions,) 2308 3276 w
+10 /LucidaSansUnicode20 f
+(\031) 2920 3276 w
+10 /LucidaSans-Italic f
+(Proc.) 3003 3276 w
+(EUUG) 3299 3276 w
+(Spring) 3613 3276 w
+(Conf.,) 3980 3276 w
+(Helsinki) 4321 3276 w
+(1987,) 4756 3276 w
+10 /LucidaSansUnicode00 f
+(Eur. Unix User) 910 3396 w
+10 /LucidaSansUnicode20 f
+(\031) 1601 3396 w
+10 /LucidaSansUnicode00 f
+(s Group, Buntingford, Herts, UK 1987.) 1633 3396 w
+(11. A.) 720 3552 w
+(Goldberg,) 1060 3552 w
+10 /LucidaSans-Italic f
+(Smalltalk-80) 1588 3552 w
+10 /LucidaSansUnicode20 f
+(\023) 2279 3552 w
+10 /LucidaSans-Italic f
+(The) 2378 3552 w
+(Interactive) 2604 3552 w
+(Programming) 3168 3552 w
+(Environment,) 3889 3552 w
+10 /LucidaSansUnicode00 f
+(Addison-) 4584 3552 w
+(Wesley, Reading, Mass. 1984.) 910 3672 w
+(12. K.) 720 3828 w
+(Thompson,) 1042 3828 w
+10 /LucidaSansUnicode20 f
+(\030) 1625 3828 w
+10 /LucidaSansUnicode00 f
+(Regular) 1657 3828 w
+(expression) 2060 3828 w
+(search) 2626 3828 w
+(algorithm,) 2977 3828 w
+10 /LucidaSansUnicode20 f
+(\031) 3478 3828 w
+10 /LucidaSans-Italic f
+(Comm.) 3545 3828 w
+(ACM,) 3923 3828 w
+10 /LucidaSans-Demi f
+(11) 4211 3828 w
+10 /LucidaSansUnicode00 f
+(,) 4339 3828 w
+(\(6\),) 4407 3828 w
+(419-422) 4604 3828 w
+(\(1968\).) 910 3948 w
+(13. A.) 720 4104 w
+(V.) 1060 4104 w
+(Aho,) 1206 4104 w
+(J.) 1480 4104 w
+(E.) 1593 4104 w
+(Hopcroft) 1729 4104 w
+(and) 2204 4104 w
+(J.) 2434 4104 w
+(D.) 2547 4104 w
+(Ullman,) 2704 4104 w
+10 /LucidaSans-Italic f
+(The) 3123 4104 w
+(Design) 3350 4104 w
+(and) 3728 4104 w
+(Analysis) 3962 4104 w
+(of) 4415 4104 w
+(Computer) 4560 4104 w
+(Algorithms,) 910 4224 w
+10 /LucidaSansUnicode00 f
+(Addison-Wesley, Reading, Mass. 1974.) 1509 4224 w
+(14. B.) 720 4380 w
+(W.) 1052 4380 w
+(Kernighan) 1222 4380 w
+(and) 1768 4380 w
+(D.) 2000 4380 w
+(M.) 2159 4380 w
+(Ritchie,) 2329 4380 w
+10 /LucidaSans-Italic f
+(The) 2740 4380 w
+(C) 2970 4380 w
+(Programming) 3091 4380 w
+(Language,) 3815 4380 w
+10 /LucidaSansUnicode00 f
+(Prentice-Hall,) 4376 4380 w
+(Englewood Cliffs, New Jersey 1978.) 910 4500 w
+(15. W.) 720 4656 w
+(M.) 1086 4656 w
+(Waite,) 1262 4656 w
+10 /LucidaSansUnicode20 f
+(\030) 1615 4656 w
+10 /LucidaSansUnicode00 f
+(The) 1647 4656 w
+(cost) 1886 4656 w
+(of) 2144 4656 w
+(lexical) 2300 4656 w
+(analysis,) 2668 4656 w
+10 /LucidaSansUnicode20 f
+(\031) 3084 4656 w
+10 /LucidaSans-Italic f
+(Softw.) 3174 4656 w
+(Pract.) 3530 4656 w
+(Exp.,) 3875 4656 w
+10 /LucidaSans-Demi f
+(16) 4167 4656 w
+10 /LucidaSansUnicode00 f
+(,) 4295 4656 w
+(\(5\),) 4385 4656 w
+(473-488) 4604 4656 w
+(\(1986\).) 910 4776 w
+(16. C. W. Fraser, ) 720 4932 w
+10 /LucidaSansUnicode20 f
+(\030) 1555 4932 w
+10 /LucidaSansUnicode00 f
+(A generalized text editor,) 1587 4932 w
+10 /LucidaSansUnicode20 f
+(\031) 2828 4932 w
+10 /LucidaSans-Italic f
+(Comm. ACM,) 2892 4932 w
+10 /LucidaSans-Demi f
+(23) 3551 4932 w
+10 /LucidaSansUnicode00 f
+(, \(3\), 154-158 \(1980\).) 3679 4932 w
+(17. R.) 720 5088 w
+(Pike,) 1067 5088 w
+10 /LucidaSansUnicode20 f
+(\030) 1359 5088 w
+10 /LucidaSansUnicode00 f
+(Graphics) 1391 5088 w
+(in) 1877 5088 w
+(overlapping) 2031 5088 w
+(bitmap) 2667 5088 w
+(layers,) 3070 5088 w
+10 /LucidaSansUnicode20 f
+(\031) 3386 5088 w
+10 /LucidaSans-Italic f
+(ACM) 3481 5088 w
+(Trans.) 3764 5088 w
+(on) 4141 5088 w
+(Graph.,) 4323 5088 w
+10 /LucidaSans-Demi f
+(2) 4752 5088 w
+10 /LucidaSansUnicode00 f
+(,) 4816 5088 w
+(\(2\)) 4911 5088 w
+(135-160 \(1983\).) 910 5208 w
+(18. L.) 720 5364 w
+(J.) 1052 5364 w
+(Guibas) 1172 5364 w
+(and) 1561 5364 w
+(J.) 1799 5364 w
+(Stolfi,) 1920 5364 w
+10 /LucidaSansUnicode20 f
+(\030) 2257 5364 w
+10 /LucidaSansUnicode00 f
+(A) 2289 5364 w
+(language) 2416 5364 w
+(for) 2917 5364 w
+(bitmap) 3114 5364 w
+(manipulation,) 3512 5364 w
+10 /LucidaSansUnicode20 f
+(\031) 4181 5364 w
+10 /LucidaSans-Italic f
+(ACM) 4271 5364 w
+(Trans.) 4549 5364 w
+(on) 4921 5364 w
+(Graph.,) 910 5484 w
+10 /LucidaSans-Demi f
+(1) 1308 5484 w
+10 /LucidaSansUnicode00 f
+(, \(3\), 191-214 \(1982\).) 1372 5484 w
+(19. R.) 720 5640 w
+(Pike,) 1039 5640 w
+(B.) 1303 5640 w
+(Locanthi) 1428 5640 w
+(and) 1873 5640 w
+(J.) 2088 5640 w
+(Reiser,) 2186 5640 w
+10 /LucidaSansUnicode20 f
+(\030) 2549 5640 w
+10 /LucidaSansUnicode00 f
+(Hardware/software) 2581 5640 w
+(trade-offs) 3546 5640 w
+(for) 4077 5640 w
+(bitmap) 4251 5640 w
+(graphics) 4626 5640 w
+(on the Blit,) 910 5760 w
+10 /LucidaSansUnicode20 f
+(\031) 1437 5760 w
+10 /LucidaSans-Italic f
+(Softw. Pract. Exp.,) 1501 5760 w
+10 /LucidaSans-Demi f
+(15) 2416 5760 w
+10 /LucidaSansUnicode00 f
+(, \(2\), 131-151 \(1985\).) 2544 5760 w
+(20. T.) 720 5916 w
+(A.) 1046 5916 w
+(Cargill,) 1189 5916 w
+10 /LucidaSansUnicode20 f
+(\030) 1577 5916 w
+10 /LucidaSansUnicode00 f
+(The) 1609 5916 w
+(feel) 1832 5916 w
+(of) 2052 5916 w
+(Pi,) 2192 5916 w
+10 /LucidaSansUnicode20 f
+(\031) 2308 5916 w
+10 /LucidaSans-Italic f
+(Winter) 2382 5916 w
+(USENIX) 2743 5916 w
+(Conference) 3129 5916 w
+(Proceedings,) 3715 5916 w
+(Denver) 4370 5916 w
+(1986,) 4756 5916 w
+10 /LucidaSansUnicode00 f
+(62-71, USENIX Assoc., El Cerrito, CA.) 910 6036 w
+(21. G. J. Holzmann, ) 720 6192 w
+10 /LucidaSansUnicode20 f
+(\030) 1698 6192 w
+10 /LucidaSansUnicode00 f
+(Tracing protocols,) 1730 6192 w
+10 /LucidaSansUnicode20 f
+(\031) 2612 6192 w
+10 /LucidaSans-Italic f
+(AT&T Tech. J.,) 2676 6192 w
+10 /LucidaSans-Demi f
+(64) 3399 6192 w
+10 /LucidaSansUnicode00 f
+(, \(10\), 2413-2434 \(1985\).) 3527 6192 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 30 30
+%%Trailer
+done
+%%Pages: 30
diff --git a/sys/doc/sam/sam.tut b/sys/doc/sam/sam.tut
new file mode 100644
index 000000000..c00e35f2f
--- /dev/null
+++ b/sys/doc/sam/sam.tut
@@ -0,0 +1,1784 @@
+.de P1
+.KS
+.DS
+.ft CW
+.ta 5n 10n 15n 20n 25n 30n 35n 40n 45n 50n 55n 60n 65n 70n 75n 80n
+..
+.de P2
+.ft 1
+.DE
+.KE
+..
+.de CW
+.lg 0
+\%\&\\$3\f(CW\\$1\fP\&\\$2
+.lg
+..
+.de WC
+.lg 0
+\%\&\\$3\f(CI\\$1\fP\&\\$2
+.lg
+..
+.TL
+A tutorial for the
+.CW sam
+.B
+command language
+.AU
+Rob Pike
+.AI
+.MH
+.AB
+.CW sam
+is an interactive text editor with a command language that makes heavy use
+of regular expressions.
+Although the language is syntactically similar to
+.CW ed (1),
+the details are interestingly different.
+This tutorial introduces the command language, but does not discuss
+the screen and mouse interface.
+With apologies to those unfamiliar with the Ninth Edition Blit software,
+it is assumed that the similarity of
+.CW sam
+to
+.CW mux (9)
+at this level makes
+.CW sam 's
+mouse language easy to learn.
+.PP
+The
+.CW sam
+command language applies identically to two environments:
+when running
+.CW sam
+on an ordinary terminal
+(\f2via\f1\f1
+.CW sam\ -d ),
+and in the command window of a
+.I downloaded
+.CW sam ,
+that is, one using the bitmap display and mouse.
+.AE
+.SH
+Introduction
+.PP
+This tutorial describes the command language of
+.CW sam ,
+an interactive text editor that runs on Blits and
+some computers with bitmap displays.
+For most editing tasks, the mouse-based editing features
+are sufficient, and they are easy to use and to learn.
+.PP
+The command language is often useful, however, particularly
+when making global changes.
+Unlike the commands in
+.CW ed ,
+which are necessary to make changes,
+.CW sam
+commands tend to be used
+only for complicated or repetitive editing tasks.
+It is in these more involved uses that
+the differences between
+.CW sam
+and other text editors are most evident.
+.PP
+.CW sam 's
+language makes it easy to do some things that other editors,
+including programs like
+.CW sed
+and
+.CW awk ,
+do not handle gracefully, so this tutorial serves partly as a
+lesson in
+.CW sam 's
+manner of manipulating text.
+The examples below therefore concentrate entirely on the language,
+assuming that facility with the use of the mouse in
+.CW sam
+is at worst easy to pick up.
+In fact,
+.CW sam
+can be run without the mouse at all (not
+.I downloaded ),
+by specifying the
+.CW -d
+flag, and it is this domain that the tutorial
+occupies; the command language in these modes
+are identical.
+.PP
+A word to the Unix adept:
+although
+.CW sam
+is syntactically very similar to
+.CW ed ,
+it is fundamentally and deliberately different in design and detailed semantics.
+You might use knowledge of
+.CW ed
+to predict how the substitute command works,
+but you'd only be right if you had used some understanding of
+.CW sam 's
+workings to influence your prediction.
+Be particularly careful about idioms.
+Idioms form in curious nooks of languages and depend on
+undependable peculiarities.
+.CW ed
+idioms simply don't work in
+.CW sam :
+.CW 1,$s/a/b/
+makes one substitution in the whole file, not one per line.
+.CW sam
+has its own idioms.
+Much of the purpose of this tutorial is to publish them
+and make fluency in
+.CW sam
+a matter of learning, not cunning.
+.PP
+The tutorial depends on familiarity with regular expressions, although
+some experience with a more traditional Unix editor may be helpful.
+To aid readers familiar with
+.CW ed ,
+I have pointed out in square brackets [] some of
+the relevant differences between
+.CW ed
+and
+.CW sam .
+Read these comments only if you wish
+to understand the differences; the lesson is about
+.CW sam ,
+not
+.CW sam
+.I vs.
+.CW ed .
+Another typographic convention is that output appears in
+.CW "this font,
+while typed input appears as
+.WC "slanty text.
+.PP
+Nomenclature:
+.CW sam
+keeps a copy of the text it is editing.
+This copy is called a
+.I file .
+To avoid confusion, I have called the permanent storage on disc a
+.I
+Unix file.
+.R
+.SH
+Text
+.PP
+To get started, we need some text to play with.
+Any text will do; try something from
+James Gosling's Emacs manual:
+.P1
+$ \f(CIsam -d
+a
+This manual is organized in a rather haphazard manner. The first
+several sections were written hastily in an attempt to provide a
+general introduction to the commands in Emacs and to try to show
+the method in the madness that is the Emacs command structure.
+\&.
+.ft
+.P2
+.WC "sam -d
+starts
+.CW sam
+running.
+The
+.CW a
+command adds text until a line containing just a period, and sets the
+.I
+current text
+.R
+(also called
+.I dot )
+to what was typed \(em everything between the
+.CW a
+and the period.
+.CW ed "" [
+would leave dot set to only the last line.]
+The
+.CW p
+command prints the current text:
+.P1
+.WC p
+This manual is organized in a rather haphazard manner. The first
+several sections were written hastily in an attempt to provide a
+general introduction to the commands in Emacs and to try to show
+the method in the madness that is the Emacs command structure.
+.P2
+[Again,
+.CW ed
+would print only the last line.]
+The
+.CW a
+command adds its text
+.I after
+dot; the
+.CW i
+command is like
+.CW a,
+but adds the text
+.I before
+dot.
+.P1
+.ft CI
+i
+Introduction
+\&.
+p
+.ft
+Introduction
+.P2
+There is also a
+.CW c
+command that changes (replaces) the current text,
+and
+.CW d
+that deletes it; these are illustrated below.
+.PP
+To see all the text, we can specify what text to print;
+for the moment, suffice it to say that
+.WC 0,$
+specifies the entire file.
+.CW ed "" [
+users would probably type
+.WC 1,$ ,
+which in practice is the same thing, but see below.]
+.P1
+.WC 0,$p
+Introduction
+This manual is organized in a rather haphazard manner. The first
+several sections were written hastily in an attempt to provide a
+general introduction to the commands in Emacs and to try to show
+the method in the madness that is the Emacs command structure.
+.P2
+Except for the
+.CW w
+command described below,
+.I all
+commands,
+including
+.CW p ,
+set dot to the text they touch.
+Thus,
+.CW a
+and
+.CW i
+set dot to the new text,
+.CW p
+to the text printed, and so on.
+Similarly, all commands
+(except
+.CW w )
+by default operate on the current
+text [unlike
+.CW ed ,
+for which some commands (such as
+.CW g )
+default to the entire file].
+.PP
+Things are not going to get very interesting until we can
+set dot arbitrarily.
+This is done by
+.I addresses ,
+which specify a piece of the file.
+The address
+.CW 1 ,
+for example, sets dot to the first line of the file.
+.P1
+.WC 1p
+Introduction
+.WC c
+.WC Preamble
+.WC .
+.P2
+The
+.CW c
+command didn't need to specify dot; the
+.CW p
+left it on line one.
+It's therefore easy to delete the first line utterly;
+the last command left dot set to line one:
+.P1
+.WC d
+.WC 1p
+This manual is organized in a rather haphazard manner. The first
+.P2
+(Line numbers change
+to reflect changes to the file.)
+.PP
+The address \f(CW/\f2text\f(CW/\f1
+sets dot to the first appearance of
+.I text ,
+after dot.
+.CW ed "" [
+matches the first line containing
+.I text .]
+If
+.I text
+is not found, the search restarts at the beginning of the file
+and continues until dot.
+.P1
+.WC /Emacs/p
+Emacs
+.P2
+It's difficult to indicate typographically, but in this example no newline appears
+after
+.CW Emacs :
+the text to be printed is the string
+.CW Emacs ', `
+exactly.
+(The final
+.CW p
+may be left off \(em it is the default command.
+When downloaded, however, the default is instead to select the text,
+to highlight it,
+and to make it visible by moving the window on the file if necessary.
+Thus,
+.CW /Emacs/
+indicates on the display the next occurrence of the text.)
+.PP
+Imagine we wanted to change the word
+.CW haphazard
+to
+.CW thoughtless .
+Obviously, what's needed is another
+.CW c
+command, but the method used so far to insert text includes a newline.
+The syntax for including text without newlines is to surround the
+text with slashes (which is the same as the syntax for
+text searches, but what is going on should be clear from context).
+The text must appear immediately after the
+.CW c
+(or
+.CW a
+or
+.CW i ).
+Given this, it is easy to make the required change:
+.P1
+.WC /haphazard/c/thoughtless/
+.WC 1p
+This manual is organized in a rather thoughtless manner. The first
+.P2
+[Changes can always be done with a
+.CW c
+command, even if the text is smaller than a line].
+You'll find that this way of providing text to commands is much
+more common than is the multiple-lines syntax.
+If you want to include a slash
+.CW /
+in the text, just precede it with a backslash
+.CW \e ,
+and use a backslash to protect a backslash itself.
+.P1
+.WC /Emacs/c/Emacs\e\e360/
+.WC 4p
+general introduction to the commands in Emacs\e360 and to try to show
+.P2
+We could also make this particular change by
+.P1
+.WC /Emacs/a/\e\e360/
+.P2
+.PP
+This is as good a place as any to introduce the
+.CW u
+command, which undoes the last command.
+A second
+.CW u
+will undo the penultimate command, and so on.
+.P1
+.WC u
+.WC 4p
+general introduction to the commands in Emacs and to try to show
+.WC u
+.WC 3p
+This manual is organized in a rather haphazard manner. The first
+.P2
+Undoing can only back up; there is no way to undo a previous
+.CW u .
+.SH
+Addresses
+.PP
+We've seen the simplest forms of addresses, but there is more
+to learn before we can get too much further.
+An address selects a region in the file \(em a substring \(em
+and therefore must define the beginning and the end of a region.
+Thus, the address
+.CW 13
+selects from the beginning of line thirteen to the end of line thirteen, and
+.CW /Emacs/
+selects from the beginning of the word
+.CW Emacs ' `
+to the end.
+.PP
+Addresses may be combined with a comma:
+.P1
+13,15
+.P2
+selects lines thirteen through fifteen. The definition of the comma
+operator is to select from the beginning of the left hand address (the
+beginning of line 13) to the end of the right hand address (the
+end of line 15).
+.PP
+A few special simple addresses come in handy:
+.CW .
+(a period) represents dot, the current text,
+.CW 0
+(line zero) selects the null string at the beginning of the file, and
+.CW $
+selects the null string at the end of the file
+[not the last line of the file].
+Therefore,
+.P1
+0,13
+.P2
+selects from the beginning of the file to the end of line thirteen,
+.P1
+\&.,$
+.P2
+selects from the beginning of the current text to the end of the file, and
+.P1
+0,$
+.P2
+selects the whole file [that is, a single string containing the whole file,
+not a list of all the lines in the file].
+.PP
+These are all
+.I absolute
+addresses: they refer to specific places in the file.
+.CW sam
+also has relative addresses, which depend
+on the value of dot,
+and in fact we have already seen one form:
+.CW /Emacs/
+finds the first occurrence of
+.CW Emacs
+searching forwards from dot.
+Which occurrence of
+.CW Emacs
+it finds depends on the value of dot.
+What if you wanted the first occurrence
+.CW before
+dot? Just precede the pattern with a minus sign, which reverses the direction
+of the search:
+.P1
+-/Emacs/
+.P2
+In fact, the complete syntax for forward searching is
+.P1
++/Emacs/
+.P2
+but the plus sign is the default, and in practice is rarely used.
+Here is an example that includes it for clarity:
+.P1
+0+/Emacs/
+.P2
+selects the first occurrence of
+.CW Emacs
+in the file; read it as ``go to line 0, then search forwards for
+.CW Emacs .''
+Since the
+.CW +
+is optional, this can be written
+.CW 0/Emacs/ .
+Similarly,
+.P1
+$-/Emacs/
+.P2
+finds the last occurrence in the file, so
+.P1
+0/Emacs/,$-/Emacs/
+.P2
+selects the text from the first to last
+.CW Emacs ,
+inclusive.
+Slightly more interesting:
+.P1
+/Emacs/+/Emacs/
+.P2
+(there is an implicit
+.CW .+
+at the beginning) selects the second
+.CW Emacs
+following dot.
+.PP
+Line numbers may also be relative.
+.P1
+-2
+.P2
+selects the second previous line, and
+.P1
++5
+.P2
+selects the fifth following line (here the plus sign is obligatory).
+.PP
+Since addresses may select (and dot may be) more than one line,
+we need a definition of `previous' and `following:'
+`previous' means
+.I
+before the beginning
+.R
+of dot, and `following'
+means
+.I
+after the end
+.R
+of dot.
+For example, if the file contains \f(CWA\f(CIAA\f(CWA\f1,
+with dot set to the middle two
+.CW A 's
+(the slanting characters),
+.CW -/A/
+sets dot to the first
+.CW A ,
+and
+.CW +/A/
+sets dot to the last
+.CW A .
+Except under odd circumstances (such as when the only occurrence of the
+text in the file is already the current text), the text selected by a
+search will be disjoint from dot.
+.PP
+To select the
+.CW "troff -ms
+paragraph containing dot, however long it is, use
+.P1
+-/.PP/,/.PP/-1
+.P2
+which will include the
+.CW .PP
+that begins the paragraph, and exclude the one that ends it.
+.PP
+When typing relative line number addresses, the default number is
+.CW 1 ,
+so the above could be written slightly more simply:
+.P1
+-/.PP/,/.PP/-
+.P2
+.PP
+What does the address
+.CW +1-1
+or the equivalent
+.CW +-
+mean? It looks like it does nothing, but recall that dot need not be a
+complete line of text.
+.CW +1
+selects the line after the end of the current text, and
+.CW -1
+selects the line before the beginning. Therefore
+.CW +1-1
+selects the line before the line after the end of dot, that is,
+the complete line containing the end of dot.
+We can use this construction to expand a selection to include a complete line,
+say the first line in the file containing
+.CW Emacs :
+.P1
+.WC 0/Emacs/+-p
+general introduction to the commands in Emacs and to try to show
+.P2
+The address
+.CW +-
+is an idiom.
+.SH
+Loops
+.PP
+Above, we changed one occurrence of
+.CW Emacs
+to
+.CW Emacs\e360 ,
+but if the name of the editor is really changing, it would be useful
+to change
+.I all
+instances of the name in a single command.
+.CW sam
+provides a command,
+.CW x
+(extract), for just that job.
+The syntax is
+\f(CWx/\f2pattern\f(CW/\f2command\f1.
+For each occurrence of the pattern in the selected text,
+.CW x
+sets dot to the occurrence and runs command.
+For example, to change
+.CW Emacs
+to
+.CW vi,
+.P1
+.WC 0,$x/Emacs/c/vi/
+.WC 0,$p
+This manual is organized in a rather haphazard manner. The first
+several sections were written hastily in an attempt to provide a
+general introduction to the commands in vi and to try to show
+the method in the madness that is the vi command structure.
+.P2
+This
+works by subdividing the current text
+.CW 0,$ "" (
+\(em the whole file) into appearances of its textual argument
+.CW Emacs ), (
+and then running the command that follows
+.CW c/vi/ ) (
+with dot set to the text.
+We can read this example as, ``find all occurrences of
+.CW Emacs
+in the file, and for each one,
+set the current text to the occurrence and run the command
+.CW c/vi/ ,
+which will replace the current text by
+.CW vi. ''
+[This command is somewhat similar to
+.CW ed 's
+.CW g
+command. The differences will develop below, but note that the
+default address, as always, is dot rather than the whole file.]
+.PP
+A single
+.CW u
+command is sufficient to undo an
+.CW x
+command, regardless of how many individual changes the
+.CW x
+makes.
+.P1
+.WC u
+.WC 0,$p
+This manual is organized in a rather haphazard manner. The first
+several sections were written hastily in an attempt to provide a
+general introduction to the commands in Emacs and to try to show
+the method in the madness that is the Emacs command structure.
+.P2
+.PP
+Of course,
+.CW c
+is not the only command
+.CW x
+can run. An
+.CW a
+command can be used to put proprietary markings on
+.CW Emacs :
+.P1
+.WC 0,$x/Emacs/a/{TM}/
+.WC /Emacs/+-p
+general introduction to the commands in Emacs{TM} and to try to show
+.P2
+[There is no way to see the changes as they happen, as in
+.CW ed 's
+.CW g/Emacs/s//&{TM}/p ;
+see the section on Multiple Changes, below.]
+.PP
+The
+.CW p
+command is also useful when driven by an
+.CW x ,
+but be careful that you say what you mean;
+.P1
+.WC 0,$x/Emacs/p
+EmacsEmacs
+.P2
+since
+.CW x
+sets dot to the text in the slashes, printing only that text
+is not going to be very
+informative. But the command that
+.CW x
+runs can contain addresses. For example, if we want to print all
+lines containing
+.CW Emacs ,
+just use
+.CW +- :
+.P1
+.WC 0,$x/Emacs/+-p
+general introduction to the commands in Emacs{TM} and to try to show
+the method in the madness that is the Emacs{TM} command structure.
+.P2
+Finally, let's restore the state of the file with another
+.CW x
+command, and make use of a handy shorthand:
+a comma in an address has its left side default to
+.CW 0 ,
+and its right side default to
+.CW $ ,
+so the easy-to-type address
+.CW ,
+refers to the whole file:
+.P1
+.WC ",x/Emacs/ /{TM}/d
+.WC ,p
+This manual is organized in a rather haphazard manner. The first
+several sections were written hastily in an attempt to provide a
+general introduction to the commands in Emacs and to try to show
+the method in the madness that is the Emacs command structure.
+.P2
+Notice what this
+.CW x
+does: for each occurrence of Emacs,
+find the
+.CW {TM}
+that follows, and delete it.
+.PP
+The `text'
+.CW sam
+accepts
+for searches in addresses and in
+.CW x
+commands is not simple text, but rather
+.I regular\ expressions.
+Unix has several distinct interpretations of regular expressions.
+The form used by
+.CW sam
+is that of
+.CW egrep (1),
+including parentheses
+.CW ()
+for grouping and an `or' operator
+.CW |
+for matching strings in parallel.
+.CW sam
+makes two extensions:
+although
+.CW .
+(the most overloaded character in Unix) matches any character
+.I except
+newline, the regular expression
+.CW @
+(think of it as a big dot) matches any character, even newlines;
+and the character sequence
+.CW \en
+matches a newline character.
+Replacement text, such as used in the
+.CW a
+and
+.CW c
+commands, is still plain text, but the sequence
+.CW \en
+represents newline in that context, too.
+.PP
+Here is an example. Say we wanted to double space the document, that is,
+turn every newline into two newlines.
+The following all do the job:
+.P1
+.WC ",x/\en/ a/\en/
+.WC ",x/\en/ c/\en\en/
+.WC ",x/$/ a/\en/
+.WC ",x/^/ i/\en/
+.P2
+The last example is slightly different, because it puts a newline
+.I before
+each line; the other examples place it after.
+The first two examples manipulate newlines directly
+[something outside
+.CW ed 's
+ken]; the last two
+use regular expressions:
+.CW $
+is the empty string at the end of a line, while
+.CW ^
+is the empty string at the beginning.
+.PP
+These solutions all have a possible drawback: if there is already a blank line
+(that is, two consecutive newlines), they make it much larger (four
+consecutive newlines).
+A better method is to extend every group of newlines by one:
+.P1
+.WC ",x/\en+/ a/\en/
+.P2
+The regular expression operator
+.CW +
+means `one or more;'
+.CW \en+
+is identical to
+.CW \en\en* .
+Thus, this example
+takes every sequence of newlines and adds another
+to the end.
+.PP
+A more common example is indenting a block of text by a tab stop.
+The following all work,
+although the first is arguably the cleanest (the blank text in slashes is a tab):
+.P1
+.WC ",x/^/a/ /
+.WC ",x/^/c/ /
+.WC ",x/.*\en/i/ /
+.P2
+The last example uses the pattern (idiom, really)
+.CW .*\en
+to match lines:
+.CW .*
+matches the longest possible string of non-newline characters.
+Taking initial tabs away is just as easy:
+.P1
+.WC ",x/^ /d
+.P2
+In these examples I have specified an address (the whole file), but
+in practice commands like these are more likely to be run without
+an address, using the value of dot set by selecting text with the mouse.
+.SH
+Conditionals
+.PP
+The
+.CW x
+command is a looping construct:
+for each match of a regular expression,
+it extracts (sets dot to) the match and runs a command.
+.CW sam
+also has a conditional,
+.CW g :
+\f(CWg/\f2pattern\f(CW/\f2command\f1
+runs the command if dot contains a match of the pattern
+.I
+without changing the value of dot.
+.R
+The inverse,
+.CW v ,
+runs the command if dot does
+.I not
+contain a match of the pattern.
+(The letters
+.CW g
+and
+.CW v
+are historical and have no mnemonic significance. You might
+think of
+.CW g
+as `guard.')
+.CW ed "" [
+users should read the above definitions very carefully; the
+.CW g
+command in
+.CW sam
+is fundamentally different from that in
+.CW ed .]
+Here is an example of the difference between
+.CW x
+and
+.CW g:
+.P1
+,x/Emacs/c/vi/
+.P2
+changes each occurrence of the word
+.CW Emacs
+in the file to the word
+.CW vi ,
+but
+.P1
+,g/Emacs/c/vi/
+.P2
+changes the
+.I "whole file
+to
+.CW vi
+if there is the word
+.CW Emacs
+anywhere in the file.
+.PP
+Neither of these commands is particularly interesting in isolation,
+but they are valuable when combined with
+.CW x
+and with themselves.
+.SH
+Composition
+.PP
+One way to think about the
+.CW x
+command is that, given a selection (a value of dot)
+it iterates through interesting subselections (values of dot within).
+In other words, it takes a piece of text and cuts it into smaller pieces.
+But the text that it cuts up may already be a piece cut by a previous
+.CW x
+command or selected by a
+.CW g .
+.CW sam 's
+most interesting property is the ability to define a sequence of commands
+to perform a particular task.\(dg
+.FS
+\(dg
+The obvious analogy with shell pipelines is only partially valid,
+because the individual
+.CW sam
+commands are all working on the same text; it is only how the text is
+sliced up that is changing.
+.FE
+A simple example is to change all occurrences of
+.CW Emacs
+to
+.CW emacs ;
+certainly the command
+.P1
+.WC ",x/Emacs/ c/emacs/
+.P2
+will work, but we can use an
+.CW x
+command to save retyping most of the word
+.CW Emacs :
+.P1
+.WC ",x/Emacs/ x/E/ c/e/
+.P2
+(Blanks can be used
+to separate commands on a line to make them easier to read.)
+What this command does is find all occurrences of
+.CW Emacs
+.CW ,x/Emacs/ ), (
+and then
+.I
+with dot set to that text,
+.R
+find all occurrences of the letter
+.CW E
+.CW x/E/ ), (
+and then
+.I
+with dot set to that text,
+.R
+run the command
+.CW c/e/
+to change the character to lower case.
+Note that the address for the command \(em the whole file, specified by a comma
+\(em is only given to the leftmost
+piece of the command; the rest of the pieces have dot set for them by
+the execution of the pieces to their left.
+.PP
+As another simple example, consider a problem
+solved above: printing all lines in the file containing the word
+.CW Emacs:
+.P1
+.WC ",x/.*\en/ g/Emacs/p
+general introduction to the commands in Emacs and to try to show
+the method in the madness that is the Emacs command structure.
+.P2
+This command says to break the file into lines
+.CW ,x/.*\en/ ), (
+and for each line that contains the string
+.CW Emacs
+.CW g/Emacs/ ), (
+run the command
+.CW p
+with dot set to the line (not the match of
+.CW Emacs ),
+which prints the line.
+To save typing, because
+.CW .*\en
+is a common pattern in
+.CW x
+commands,
+if the
+.CW x
+is followed immediately by a space, the pattern
+.CW .*\en
+is assumed.
+Therefore, the above could be written more succinctly:
+.P1
+.WC ",x g/Emacs/p
+.P2
+The solution we used before was
+.P1
+.WC ,x/Emacs/+-p
+.P2
+which runs the command
+.CW +-p
+with dot set to each match of
+.CW Emacs
+in the file (recall that the idiom
+.CW +-p
+prints the line containing the end of dot).
+.PP
+The two commands usually produce the same result
+(the
+.CW +-p
+form will print a line twice if it contains
+.CW Emacs
+twice). Which is better?
+.CW ,x/Emacs/+-p
+is easier to type and will be much faster if the file is large and
+there are few occurrences of the string, but it is really an odd special case.
+.CW ",x/.*\en/ g/Emacs/p
+is slower \(em it breaks each line out separately, then examines
+it for a match \(em but is conceptually cleaner, and generalizes more easily.
+For example, consider the following piece of the Emacs manual:
+.P1
+command name="append-to-file", key="[unbound]"
+Takes the contents of the current buffer and appends it to the
+named file. If the files doesn't exist, it will be created.
+
+command name="apropos", key="ESC-?"
+Prompts for a keyword and then prints a list of those commands
+whose short description contains that keyword. For example,
+if you forget which commands deal with windows, just type
+"@b[ESC-?]@t[window]@b[ESC]".
+
+\&\f2and so on\f(CW
+.P2
+This text consists of groups of non-empty lines, with a simple format
+for the text within each group.
+Imagine that we wanted to find the description of the `apropos'
+command.
+The problem is to break the file into individual descriptions,
+and then to find the description of `apropos' and to print it.
+The solution is straightforward:
+.P1
+.WC ,x/(.+\en)+/\ g/command\ name="apropos"/p
+command name="apropos", key="ESC-?"
+Prompts for a keyword and then prints a list of those commands
+whose short description contains that keyword. For example,
+if you forget which commands deal with windows, just type
+"@b[ESC-?]@t[window]@b[ESC]".
+.P2
+The regular expression
+.CW (.+\en)+
+matches one or more lines with one or more characters each, that is,
+the text between blank lines, so
+.CW ,x/(.+\en)+/
+extracts each description; then
+.CW g/command\ name="apropos"/
+selects the description for `apropos' and
+.CW p
+prints it.
+.PP
+Imagine that we had a C program containing the variable
+.CW n ,
+but we wanted to change it to
+.CW num .
+This command is a first cut:
+.P1
+.WC ",x/n/ c/num/
+.P2
+but is obviously flawed: it will change all
+.CW n 's
+in the file, not just the
+.I identifier
+.CW n .
+A better solution is to use an
+.CW x
+command to extract the identifiers, and then use
+.CW g
+to find the
+.CW n 's:
+.P1
+.WC ",x/[a-zA-Z_][a-zA-Z_0-9]*/ g/n/ v/../ c/num/
+.P2
+It looks awful, but it's fairly easy to understand when read
+left to right.
+A C identifier is an alphabetic or underscore followed by zero or more
+alphanumerics or underscores, that is, matches of the regular expression
+.CW [a-zA-Z_][a-zA-Z_0-9]* .
+The
+.CW g
+command selects those identifiers containing
+.CW n ,
+and the
+.CW v
+is a trick: it rejects those identifiers containing more than one
+character. Hence the
+.CW c/num/
+applies only to free-standing
+.CW n 's.
+.PP
+There is still a problem here:
+we don't want to change
+.CW n 's
+that are part of the character constant
+.CW \en .
+There is a command
+.CW y ,
+complementary to
+.CW x ,
+that is just what we need:
+\f(CWy/\f2pattern\f(CW/\f2command\f1
+runs the command on the pieces of text
+.I between
+matches of the pattern;
+if
+.CW x
+selects,
+.CW y
+rejects.
+Here is the final command:
+.P1
+.WC ",y/\e\en/ x/[a-zA-Z_][a-zA-Z_0-9]*/ g/n/ v/../ c/num/
+.P2
+The
+.CW y/\e\en/
+(with backslash doubled to make it a literal character)
+removes the two-character sequence
+.CW \en
+from consideration, so the rest of the command will not touch it.
+There is more we could do here; for example, another
+.CW y
+could be prefixed to protect comments in the code.
+I won't elaborate the example any further, but you should have
+an idea of the way in which the looping and conditional commands
+in
+.CW sam
+may be composed to do interesting things.
+.SH
+Grouping
+.PP
+There is another way to arrange commands.
+By enclosing them in brace brackets
+.CW {} ,
+commands may be applied in parallel.
+This example uses the
+.CW =
+command, which reports the line and character numbers of dot,
+together with
+.CW p ,
+to report on appearances of
+.CW Emacs
+in our original file:
+.P1
+.WC ,p
+This manual is organized in a rather haphazard manner. The first
+several sections were written hastily in an attempt to provide a
+general introduction to the commands in Emacs and to try to show
+the method in the madness that is the Emacs command structure.
+.ft CI
+,x/Emacs/{
+ =
+ +-p
+}
+.ft
+3; #171,#176
+general introduction to the commands in Emacs and to try to show
+4; #234,#239
+the method in the madness that is the Emacs command structure.
+.P2
+(The number before the semicolon is the line number;
+the numbers beginning with
+.CW #
+are character numbers.)
+As a more interesting example, consider changing all occurrences of
+.CW Emacs
+to
+.CW vi
+and vice versa. We can type
+.P1
+.ft CI
+,x/Emacs|vi/{
+ g/Emacs/ c/vi/
+ g/vi/ c/Emacs/
+}
+.ft
+.P2
+or even
+.P1
+.ft CI
+,x/[a-zA-Z]+/{
+ g/Emacs/ v/....../ c/vi/
+ g/vi/ v/.../ c/Emacs/
+}
+.ft
+.P2
+to make sure we don't change strings embedded in words.
+.SH
+Multiple Changes
+.PP
+You might wonder why, once
+.CW Emacs
+has been changed to
+.CW vi
+in the above example,
+the second command in the braces doesn't put it back again.
+The reason is that the commands are run in parallel:
+within any top-level
+.CW sam
+command, all changes to the file refer to the state of the file
+before any of the changes in that command are made.
+After all the changes have been determined, they are all applied
+simultaneously.
+.PP
+This means, as mentioned, that commands within a compound
+command see the state of the file before any of the changes apply.
+This method of evaluation makes some things easier (such as the exchange of
+.CW Emacs
+and
+.CW vi ),
+and some things harder.
+For instance, it is impossible to use a
+.CW p
+command to print the changes as they happen,
+because they haven't happened when the
+.CW p
+is executed.
+An indirect ramification is that changes must occur in forward
+order through the file,
+and must not overlap.
+.SH
+Unix
+.PP
+.CW sam
+has a few commands to connect to Unix processes.
+The simplest is
+.CW ! ,
+which runs the command with input and output connected to the terminal.
+.P1
+.WC !date
+Wed May 28 23:25:21 EDT 1986
+!
+.P2
+(When downloaded, the input is connected to
+.CW /dev/null
+and only the first few lines of output are printed;
+any overflow is stored in
+.CW $HOME/sam.err .)
+The final
+.CW !
+is a prompt to indicate when the command completes.
+.PP
+Slightly more interesting is
+.CW > ,
+which provides the current text as standard input to the Unix command:
+.P1
+.WC "1,2 >wc
+ 2 22 131
+!
+.P2
+The complement of
+.CW >
+is, naturally,
+.CW < :
+it replaces the current text with the standard output of the Unix command:
+.P1
+.WC "1 <date
+!
+.WC 1p
+Wed May 28 23:26:44 EDT 1986
+.P2
+The last command is
+.CW | ,
+which is a combination of
+.CW <
+and
+.CW > :
+the current text is provided as standard input to the Unix command,
+and the Unix command's standard output is collected and used to
+replace the original text.
+For example,
+.P1
+.WC ",| sort
+.P2
+runs
+.CW sort (1)
+on the file, sorting the lines of the text lexicographically.
+Note that
+.CW < ,
+.CW >
+and
+.CW |
+are
+.CW sam
+commands, not Unix shell operators.
+.PP
+The next example converts all appearances of
+.CW Emacs
+to upper case using
+.CW tr (1):
+.P1
+.WC ",x/Emacs/ | tr a-z A-Z
+.P2
+.CW tr
+is run once for each occurrence of
+.CW Emacs .
+Of course, you could do this example more efficiently with a simple
+.CW c
+command, but here's a trickier one:
+given a Unix mail box as input,
+convert all the
+.CW Subject
+headers to distinct fortunes:
+.P1
+.WC ",x/^Subject:.*\en/ x/[^:]*\en/ < /usr/games/fortune
+.P2
+(The regular expression
+.CW [^:]
+refers to any character
+.I except
+.CW :
+and newline; the negation operator
+.CW ^
+excludes newline from the list of characters.)
+Again,
+.CW /usr/games/fortune
+is run once for each
+.CW Subject
+line, so each
+.CW Subject
+line is changed to a different fortune.
+.SH
+A few other text commands
+.PP
+For completeness, I should mention three other commands that
+manipulate text. The
+.CW m
+command moves the current text to after the text specified by the
+(obligatory) address after the command.
+Thus
+.P1
+.WC "/Emacs/+- m 0
+.P2
+moves the next line containing
+.CW Emacs
+to the beginning of the file.
+Similarly,
+.CW t
+(another historic character) copies the text:
+.P1
+.WC "/Emacs/+- t 0
+.P2
+would make, at the beginning of the file, a copy of the next line
+containing
+.CW Emacs .
+.PP
+The third command is more interesting: it makes substitutions.
+Its syntax is
+\f(CWs/\f2pattern\f(CW/\f2replacement\f(CW/\f1.
+Within the current text, it finds the first occurrence of
+the pattern and replaces it by the replacement text,
+leaving dot set to the entire address of the substitution.
+.P1
+.WC 1p
+This manual is organized in a rather haphazard manner. The first
+.WC s/haphazard/thoughtless/
+.WC p
+This manual is organized in a rather thoughtless manner. The first
+.P2
+Occurrences of the character
+.CW &
+in the replacement text stand for the text matching the pattern.
+.P1
+.WC s/T/"&&&&"/
+.WC p
+"TTTT"his manual is organized in a rather thoughtless manner. The first
+.P2
+There are two variants. The first is that a number may be specified
+after the
+.CW s ,
+to indicate which occurrence of the pattern to substitute; the default
+is the first.
+.P1
+.WC s2/is/was/
+.WC p
+"TTTT"his manual was organized in a rather thoughtless manner. The first
+.P2
+The second is that suffixing a
+.CW g
+(global) causes replacement of all occurrences, not just the first.
+.P1
+.WC s/[a-zA-Z]/x/g
+.WC p
+"xxxx"xxx xxxxxx xxx xxxxxxxxx xx x xxxxxx xxxxxxxxxxx xxxxxxx xxx xxxxx
+.P2
+Notice that in all these examples
+dot is left
+set to the entire line.
+.PP
+[The substitute command is vital to
+.CW ed,
+because it is the only way to make changes within a line.
+It is less valuable in
+.CW sam ,
+in which the concept of a line is much less important.
+For example, many
+.CW ed
+substitution idioms are handled well by
+.CW sam 's
+basic commands. Consider the commands
+.P1
+s/good/bad/
+s/good//
+s/good/& bye/
+.P2
+which are equivalent in
+.CW sam
+to
+.P1
+/good/c/bad/
+/good/d
+/good/a/ bye/
+.P2
+and for which the context search is likely unnecessary because the desired
+text is already dot.
+Also, beware this
+.CW ed
+idiom:
+.P1
+1,$s/good/bad/
+.P2
+which changes the first
+.CW good
+on each line; the same command in
+.CW sam
+will only change the first one in the whole file.
+The correct
+.CW sam
+version is
+.P1
+,x s/good/bad/
+.P2
+but what is more likely meant is
+.P1
+,x/good/ c/bad/
+.P2
+.CW sam
+operates under different rules.]
+.SH
+Files
+.PP
+So far, we have only been working with a single file,
+but
+.CW sam
+is a multi-file editor.
+Only one file may be edited at a time, but
+it is easy to change which file is the `current' file for editing.
+To see how to do this, we need a
+.CW sam
+with a few files;
+the easiest way to do this is to start it
+with a list of Unix file names to edit.
+.P1
+$ \f(CIecho *.ms\f(CW
+conquest.ms death.ms emacs.ms famine.ms slaughter.ms
+$ \f(CIsam -d *.ms\f(CW
+ -. conquest.ms
+.P2
+(I'm sorry the Horsemen don't appear in liturgical order.)
+The line printed by
+.CW sam
+is an indication that the Unix file
+.CW conquest.ms
+has been read, and is now the current file.
+.CW sam
+does not read the Unix file until
+the associated
+.CW sam
+file becomes current.
+.PP
+The
+.CW n
+command prints the names of all the files:
+.P1
+.WC n
+ -. conquest.ms
+ - death.ms
+ - emacs.ms
+ - famine.ms
+ - slaughter.ms
+.P2
+This list is also available in the menu on mouse button 3.
+The command
+.CW f
+tells the name of just the current file:
+.P1
+.WC f
+ -. conquest.ms
+.P2
+The characters to the left of the file name encode helpful information about
+the file.
+The minus sign becomes a plus sign if the file has a window open, and an
+asterisk if more than one is open.
+The period (another meaning of dot) identifies the current file.
+The leading blank changes to an apostrophe if the file is different
+from the contents of the associated Unix file, as far as
+.CW sam
+knows.
+This becomes evident if we make a change.
+.P1
+.WC 1d
+.WC f
+\&'-. conquest.ms
+.P2
+If the file is restored by an undo command, the apostrophe disappears.
+.P1
+.WC u
+.WC f
+ -. conquest.ms
+.P2
+The file name may be changed by providing a new name with the
+.CW f
+command:
+.P1
+.CW "f pestilence.ms
+\&'-. pestilence.ms
+.P2
+.WC f
+prints the new status of the file,
+that is, it changes the name if one is provided, and prints the
+name regardless.
+A file name change may also be undone.
+.P1
+.WC u
+.WC f
+ -. conquest.ms
+.P2
+.PP
+When
+.CW sam
+is downloaded, the current file may be changed simply by selecting
+the desired file from the menu (selecting the same file subsequently
+cycles through the windows opened on the file).
+Otherwise, the
+.CW b
+command can be used to choose the desired file:\(dg
+.FS
+\(dg A bug prevents the
+.CW b
+command from working when downloaded.
+Because the menu is more convenient anyway, and
+because the method
+of choosing files from the command language is slated to change,
+the bug hasn't been fixed.
+.FE
+.P1
+.WC "b emacs.ms
+ -. emacs.ms
+.P2
+Again,
+.CW sam
+prints the name (actually, executes an implicit
+.CW f
+command) because the Unix file
+.CW emacs.ms
+is being read for the first time.
+It is an error to ask for a file
+.CW sam
+doesn't know about, but the
+.CW B
+command will prime
+.CW sam 's
+menu with a new file, and make it current.
+.P1
+.WC "b flood.pic
+?no such file `flood.pic'
+.WC "B flood.pic
+ -. flood.pic
+.WC n
+ - conquest.ms
+ - death.ms
+ - emacs.ms
+ - famine.ms
+ -. flood.pic
+ - slaughter.ms
+.P2
+Both
+.CW b
+and
+.CW B
+will accept a list of file names.
+.CW b
+simply takes the first file in the list, but
+.CW B
+loads them all.
+The list may be typed on one line \(em
+.P1
+.WC "B devil.tex satan.tex 666.tex emacs.tex
+.P2
+\(em or generated by a Unix command \(em
+.P1
+.WC "B <echo *.tex
+.P2
+The latter form requires a Unix command;
+.CW sam
+does not understand the shell file name metacharacters, so
+.CW "B *.tex
+attempts to load a single file named
+.CW *.tex .
+(The
+.CW <
+form is of course derived from
+.CW sam 's
+.CW <
+command.)
+.CW echo
+is not the only useful command to run subservient to
+.CW B ;
+for example,
+.P1
+.WC "B <grep -l Emacs *
+.P2
+will load only those files containing the string
+.CW Emacs .
+Finally, a special case: a
+.CW B
+with no arguments creates an empty, nameless file within
+.CW sam .
+.PP
+The complement of
+.CW B
+is
+.CW D :
+.P1
+.WC "D devil.tex satan.tex 666.tex emacs.tex
+.P2
+eradicates the files from
+.CW sam 's
+memory (not from the Unix machine's disc).
+.CW D
+without any file names removes the current file from
+.CW sam .
+.PP
+There are three other commands that relate the current file
+to Unix files.
+The
+.CW w
+command writes the file to disc;
+without arguments, it writes the entire file to the Unix file associated
+with the current file in
+.CW sam
+(it is the only command whose default address is not dot).
+Of course, you can specify an address to be written,
+and a different file name, with the obvious syntax:
+.P1
+.WC "1,2w /tmp/revelations
+/tmp/revelations: #44
+.P2
+.CW sam
+responds with the file name and the number of characters written to the file.
+The
+.CW write
+command on the button 3 menu is identical in function to an unadorned
+.CW w
+command.
+.PP
+The other two commands,
+.CW e
+and
+.CW r ,
+read data from Unix files.
+The
+.CW e
+command clears out the current file,
+reads the data from the named file (or uses the current file's old name if
+none is explicitly provided), and sets the file name.
+It's much like a
+.CW B
+command, but puts the information in the current file instead of a new one.
+.CW e
+without any file name is therefore an easy way to refresh
+.CW sam 's
+copy of a Unix file.
+[Unlike in
+.CW ed ,
+.CW e
+doesn't complain if the file is modified. The principle is not
+to protect against things that can be undone if wrong.]
+Since its job is to replace the whole text,
+.CW e
+never takes an address.
+.PP
+The
+.CW r
+command is like
+.CW e ,
+but it doesn't clear the file:
+the text in the Unix file replaces dot, or the specified text if an
+address is given.
+.P1
+.WC "r emacs.ms
+.P2
+has essentially the effect of
+.P1
+.WC "<cat emacs.ms
+.P2
+The commands
+.CW r
+and
+.CW w
+will set the name of the file if the current file has no name already defined;
+.CW e
+sets the name even if the file already has one.
+.PP
+There is a command, analogous to
+.CW x ,
+that iterates over files instead of pieces of text:
+.CW X
+(capital
+.CW x ).
+The syntax is easy; it's just like that of
+.CW x
+\(em \f(CWX/\f2pattern\f(CW/\f2command\f1.
+(The complementary command is
+.CW Y ,
+analogous to
+.CW y .)
+The effect is to run the command in each file whose menu entry
+(that is, whose line printed by an
+.CW f
+command) matches the pattern.
+For example, since an apostrophe identifies modified files,
+.P1
+.WC "X/'/ w
+.P2
+writes the changed files out to disc.
+Here is a longer example: find all uses of a particular variable
+in the C source files:
+.P1
+.WC "X/\e.c$/ ,x/variable/+-p
+.P2
+We can use an
+.CW f
+command to identify which file the variable appears in:
+.P1
+.ft CI
+X/\e.c$/ ,g/variable/ {
+ f
+ ,x/variable/+-{
+ =
+ p
+ }
+}
+.ft
+.P2
+Here, the
+.CW g
+command guarantees that only the names of files containing the variable
+will be printed (but beware that
+.CW sam
+may confuse matters by printing the names of files it reads in during
+the command).
+The
+.CW =
+command shows where in the file the variable appears, and the
+.CW p
+command prints the line.
+.PP
+The
+.CW D
+command is handy as the target of an
+.CW X .
+This example deletes from the menu all C files that do not contain
+a particular variable:
+.P1
+.WC "X/\e.c$/ ,v/variable/ D
+.P2
+If no pattern is provided for the
+.CW X ,
+the command (which defaults to
+.CW f )
+is run in all files, so
+.P1
+.WC "X D
+.P2
+cleans
+.CW sam
+up for a fresh start.
+.PP
+But rather than working any further, let's stop now:
+.P1
+.WC q
+$
+.P2
+.fi
+.PP
+Some of the file manipulating commands can be undone:
+undoing a
+.CW f ,
+.CW e ,
+or
+.CW r
+restores the previous state of the file,
+but
+.CW w ,
+.CW B
+and
+.CW D
+are irrevocable.
+And, of course, so is
+.CW q .
diff --git a/sys/doc/sam/sam.tut.out b/sys/doc/sam/sam.tut.out
new file mode 100644
index 000000000..3bdc36596
--- /dev/null
+++ b/sys/doc/sam/sam.tut.out
@@ -0,0 +1,4863 @@
+x T utf
+x res 720 1 1
+x init
+V0
+p1
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+f3
+s12
+V1230
+h1084cA
+wh116ct
+40u67t40o60r53i34a60lw64f40o60rw83t40h67ewf5
+83s72a72mwf3
+h102cc
+53o60mh100cm
+h100ca
+60n67dw97l34a60n67g60u67a60g60en150 0
+H720
+f2
+s10
+V1470
+h1978cR
+61o50bw75P61i28k44en120 0
+H720
+f1
+V1650
+h1812cB
+67e44l28lw53L61a44b50o50r33a44t28o50r33i28e44sn120 0
+H720
+V1770
+h1526cM
+89u50r33r33a44yw75H72i28l28l28,w50N72e44ww97J39e44r33s39e44yw750507509507504n120 0
+H720
+f2
+V2150
+h1923cA
+61B61S50T56R61A61C67Tn140 0
+H720
+f5
+V2410
+h610cs
+60a60mwf1
+86i28sw65a44nw76i28n50t28e44r33a44c44t28i28v50ew70t28e44x50tw54e44d50i28t28o50rw59w72i28t28hw76aw70c44o50m78m78a44n50dw77l28a44n50g50u50a44g50ew71t28h50a44tw55m78a44k50e44sw66h50e44a44v50yw77u50s39ew71o50fn120 0
+H720
+V2530
+h360cr
+33e44g50u50l28a44rw67e44x50p50r33e44s39s39i28o50n50s39.w84A72l28t28h50o50u50g50hw84t28h50ew78l28a44n50g50u50a44g50ew78i28sw73s39y50n50t28a44c44t28i28c44a44l28l28yw84s39i28m78i28l28a44rw66t28owf5
+83e60df1
+60(33150)33,w58t28h50ew77d50e44t28a44i28l28sn120 0
+H720
+V2650
+h360ca
+44r33ew77i28n50t28e44r33e44s39t28i28n50g50l28yw83d50i28f33f33e44r33e44n50t28.w83T61h50i28sw72t28u50t28o50r33i28a44lw61i28n50t28r33o50d50u50c44e44sw72t28h50ew77c44o50m78m78a44n50dw83l28a44n50g50u50a44g50e44,w58b50u50tw61d50o50e44sw72n50o50tn120 0
+H720
+V2770
+h360cd
+50i28s39c44u50s39sw85t28h50ew90s39c44r33e44e44nw96a44n50dw96m78o50u50s39ew89i28n50t28e44r33f33a44c44e44.w95W94i28t28hw95a44p50o50l28o50g50i28e44sw84t28ow95t28h50o50s39ew89u50n50f33a44m78i28l28i28a44rw78w72i28t28hw95t28h50en120 0
+H720
+V2890
+h360cN
+72i28n50t28hw88E61d50i28t28i28o50nw88B67l28i28tw66s39o50f33t28w72a44r33e44,w63i28tw67i28sw78a44s39s39u50m78e44dw89t28h50a44tw67t28h50ew83s39i28m78i28l28a44r33i28t28yw89o50fwf5
+72s60a60mwf1
+99t28owf5
+89m60u60xf1
+60(33950)w72a44tw67t28h50i28sn120 0
+H720
+V3010
+h360cl
+28e44v50e44lw53m78a44k50e44swf5
+64s60a60mf1
+60'33sw64m78o50u50s39ew69l28a44n50g50u50a44g50ew69e44a44s39yw75t28ow75l28e44a44r33n50.n120 0
+H720
+V3166
+h610cT
+61h50ewf5
+81s60a60mwf1
+97c44o50m78m78a44n50dw87l28a44n50g50u50a44g50ew81a44p50p50l28i28e44sw76i28d50e44n50t28i28c44a44l28l28yw87t28ow88t28w72ow88e44n50v50i28r33o50n50m78e44n50t28s39:w66w72h50e44nw88r33u50nh50Chy
+n120 0
+H720
+V3286
+h360cn
+50i28n50gwf5
+95s60a60mwf1
+h104co
+50nw94a44nw94o50r33d50i28n50a44r33yw94t28e44r33m78i28n50a44lw72(f2
+33v44i28awf5
+94s60a60mwh120c-
+60df1
+60)33,w69a44n50dw94i28nw94t28h50ew88c44o50m78m78a44n50dw94w72i28n50d50o50wwh116co
+50fw77an120 0
+H720
+f2
+V3406
+h360cd
+50o50w67n50l28o50a50d50e44dwf5
+75s60a60mf1
+60,w50t28h50a44tw53i28s39,w50o50n50ew69u50s39i28n50gw75t28h50ew69b50i28t28m78a44pw75d50i28s39p50l28a44yw75a44n50dw75m78o50u50s39e44.n120 0
+H720
+f3
+V3766
+cI
+39n56t33r44o50d56u56c44t33i28o50nn120 0
+H720
+f1
+V3922
+h250cT
+61h50i28sw64t28u50t28o50r33i28a44lw53d50e44s39c44r33i28b50e44sw65t28h50ew70c44o50m78m78a44n50dw76l28a44n50g50u50a44g50ew70o50fwf5
+59s60a60mf1
+60,w51a44nw76i28n50t28e44r33a44c44t28i28v50ew70t28e44x50tw54e44d50i28t28o50rw59t28h50a44tw54r33u50n50sw65o50nw76B67l28i28t28sw65a44n50dn120 0
+H720
+V4042
+cs
+39o50m78ew77c44o50m78p50u50t28e44r33sw71w72i28t28hw82b50i28t28m78a44pw82d50i28s39p50l28a44y50s39.w82F56o50rw65m78o50s39tw60e44d50i28t28i28n50gw82t28a44s39k50s39,w57t28h50ew76m78o50u50s39e44-33b50a44s39e44dw82e44d50i28t28i28n50gw82f33e44a44t28u50r33e44sw71a44r33ew76s39u50f33f33ih28Chy
+n120 0
+H720
+V4162
+cc
+44i28e44n50t28,w50a44n50dw75t28h50e44yw75a44r33ew69e44a44s39yw75t28ow75u50s39ew69a44n50dw75t28ow75l28e44a44r33n50.n120 0
+H720
+V4318
+h250cT
+61h50ew75c44o50m78m78a44n50dw82l28a44n50g50u50a44g50ew76i28sw71o50f33t28e44nw82u50s39e44f33u50l28,w57h50o50w72e44v50e44r33,w57p50a44r33t28i28c44u50l28a44r33l28yw82w72h50e44nw82m78a44k50i28n50gw82g50l28o50b50a44lw60c44h50a44n50g50e44s39.w82U72n50l28i28k50en120 0
+H720
+V4438
+ct
+28h50ew73c44o50m78m78a44n50d50sw68i28nwf5
+79e60df1
+60,w54w72h50i28c44hw79a44r33ew73n50e44c44e44s39s39a44r33yw79t28ow78m78a44k50ew72c44h50a44n50g50e44s39,wf5
+53s60a60mwf1
+88c44o50m78m78a44n50d50sw67t28e44n50dw78t28ow78b50ew72u50s39e44dw78o50n50l28yw78f33o50rw61c44o50mh78Chy
+n120 0
+H720
+V4558
+cp
+50l28i28c44a44t28e44dw79o50rw62r33e44p50e44t28i28t28i28v50ew74e44d50i28t28i28n50gw80t28a44s39k50s39.w80I33tw58i28sw69i28nw80t28h50e44s39ew74m78o50r33ew74i28n50v50o50l28v50e44dw80u50s39e44sw69t28h50a44tw58t28h50ew74d50i28f33f33e44r33e44n50c44e44sw69b50e44t28w72e44e44nwf5
+80s60a60mwf1
+90a44n50dn120 0
+H720
+V4678
+co
+50t28h50e44rw58t28e44x50tw53e44d50i28t28o50r33sw64a44r33ew69m78o50s39tw53e44v50i28d50e44n50t28.n120 0
+H720
+f5
+V4834
+h250cs
+60a60mf1
+60'33sw67l28a44n50g50u50a44g50ew72m78a44k50e44sw67i28tw56e44a44s39yw78t28ow78d50ow78s39o50m78ew72t28h50i28n50g50sw67t28h50a44tw57o50t28h50e44rw62e44d50i28t28o50r33s39,w54i28n50c44l28u50d50i28n50gw79p50r33o50g50r33a44m78sw68l28i28k50ewf5
+73s60e60dwf1
+89a44n50dn120 0
+H720
+f5
+V4954
+ca
+60w60kf1
+60,w59d50ow84n50o50tw62h50a44n50d50l28ew78g50r33a44c44e44f33u50l28l28y50,w59s39ow84t28h50i28sw73t28u50t28o50r33i28a44lw62s39e44r33v50e44sw73p50a44r33t28l28yw83a44sw72aw77l28e44s39s39o50nw83i28nwf5
+83s60a60mf1
+60'33sw72m78a44n50n50e44rw66o50fw66m78a44n50i28p50u50l28a44t28i28n50gn120 0
+H720
+V5074
+ct
+28e44x50t28.w85T61h50ew80e44x50a44m78p50l28e44sw75b50e44l28o50wwh108ct
+28h50e44r33e44f33o50r33ew80c44o50n50c44e44n50t28r33a44t28ew80e44n50t28i28r33e44l28yw86o50nw86t28h50ew80l28a44n50g50u50a44g50e44,w61a44s39s39u50m78i28n50gw86t28h50a44tw64f33a44c44i28l28i28t28yw86w72i28t28hw86t28h50en120 0
+H720
+V5194
+cu
+50s39ew74o50fw63t28h50ew74m78o50u50s39ew74i28nwf5
+80s60a60mwf1
+89i28sw68a44tw57w72o50r33s39tw57e44a44s39yw79t28ow79p50i28c44kw79u50p50.w79I33nw79f33a44c44t28,wf5
+54s60a60mwf1
+89c44a44nw79b50ew73r33u50nw79w72i28t28h50o50u50tw57t28h50ew73m78o50u50s39ew73a44tw57a44l28lw57(33n50o50tn120 0
+H720
+f2
+V5314
+cd
+50o50w67n50l28o50a50d50e44df1
+50)33,w55b50yw80s39p50e44c44i28f33y50i28n50gw80t28h50ewf5
+74-60dwf1
+90f33l28a44g50,w55a44n50dw80i28tw58i28sw69t28h50i28sw69d50o50m78a44i28nw80t28h50a44tw58t28h50ew74t28u50t28o50r33i28a44lw59o50c44c44u50p50i28e44s39;w59t28h50ew75c44o50m78m78a44n50dw81l28a44nh50Chy
+n120 0
+H720
+V5434
+cg
+50u50a44g50ew69i28nw75t28h50e44s39ew69m78o50d50e44sw64a44r33ew69i28d50e44n50t28i28c44a44l28.n120 0
+H720
+V5590
+h250cA
+wh102cw
+72o50r33dw80t28ow81t28h50ew75U72n50i28xw81a44d50e44p50t28:w59a44l28t28h50o50u50g50hwf5
+81s60a60mwf1
+91i28sw70s39y50n50t28a44c44t28i28c44a44l28l28yw81v50e44r33yw81s39i28m78i28l28a44rw64t28owf5
+81e60df1
+60,w56i28tw59i28sw70f33u50n50d50a44m78e44n50t28a44l28l28yw81a44n50dn120 0
+H720
+V5710
+cd
+50e44l28i28b50e44r33a44t28e44l28yw78d50i28f33f33e44r33e44n50tw56i28nw77d50e44s39i28g50nw77a44n50dw77d50e44t28a44i28l28e44dw77s39e44m78a44n50t28i28c44s39.w77Y72o50uw77m78i28g50h50tw55u50s39ew71k50n50o50w72l28e44d50g50ew71o50fwf5
+60e60dwf1
+87t28ow77p50r33e44d50i28c44tw55h50o50ww99t28h50en120 0
+H720
+V5830
+cs
+39u50b50s39t28i28t28u50t28ew70c44o50m78m78a44n50dw76w72o50r33k50s39,w51b50u50tw55y50o50u50'33dw77o50n50l28yw77b50ew71r33i28g50h50tw55i28fw60y50o50uw77h50a44dw77u50s39e44dw77s39o50m78ew71u50n50d50e44r33s39t28a44n50d50i28n50gw77o50fwf5
+60s60a60mf1
+60'33sw66w72o50r33k50i28n50g50sn120 0
+H720
+V5950
+ct
+28ow85i28n50f33l28u50e44n50c44ew79y50o50u50rw68p50r33e44d50i28c44t28i28o50n50.w85B67ew79p50a44r33t28i28c44u50l28a44r33l28yw85c44a44r33e44f33u50lw63a44b50o50u50tw63i28d50i28o50m78s39.w85I33d50i28o50m78sw74f33o50r33mwh112ci
+28nw84c44u50r33i28o50u50sw73n50o50o50k50sw73o50fw67l28a44nh50Chy
+n120 0
+H720
+V6070
+cg
+50u50a44g50e44sw78a44n50dw89d50e44p50e44n50dw89o50nw89u50n50d50e44p50e44n50d50a44b50l28ew83p50e44c44u50l28i28a44r33i28t28i28e44s39.wf5
+89e60dwf1
+99i28d50i28o50m78sw78s39i28m78p50l28yw89d50o50n50'33tw68w72o50r33kw90i28nwf5
+90s60a60mf1
+60:wf5
+68160,60$60s60/60a60/60b60/n120 0
+H720
+f1
+V6190
+cm
+78a44k50e44sw65o50n50ew70s39u50b50s39t28i28t28u50t28i28o50nw76i28nw76t28h50ew70w72h50o50l28ew70f33i28l28e44,w51n50o50tw54o50n50ew70p50e44rw59l28i28n50e44.wf5
+76s60a60mwf1
+86h50a44sw64i28t28sw64o50w72nw75i28d50i28o50m78s39.w75M89u50c44hw75o50fw58t28h50ew69p50u50r33p50o50s39ew69o50fn120 0
+H720
+V6310
+ct
+28h50i28sw64t28u50t28o50r33i28a44lw53i28sw64t28ow75p50u50b50l28i28s39hw75t28h50e44mwh103ca
+44n50dw75m78a44k50ew69f33l28u50e44n50c44yw75i28nwf5
+75s60a60mwf1
+85aw69m78a44t28t28e44rw58o50fw58l28e44a44r33n50i28n50g50,w50n50o50tw53c44u50n50n50i28n50g50.n120 0
+H720
+V6466
+h250cT
+61h50ew75t28u50t28o50r33i28a44lw59d50e44p50e44n50d50sw70o50nw81f33a44m78i28l28i28a44r33i28t28yw81w72i28t28hw81r33e44g50u50l28a44rw64e44x50p50r33e44s39s39i28o50n50s39,w56a44l28t28h50o50u50g50hw81s39o50m78ew76e44x50p50e44r33i28e44n50c44ew76w72i28t28hw82aw76m78o50r33en120 0
+H720
+V6586
+ct
+28r33a44d50i28t28i28o50n50a44lw55U72n50i28xw77e44d50i28t28o50rw60m78a44yw77b50ew71h50e44l28p50f33u50l28.w77T61ow77a44i28dw77r33e44a44d50e44r33sw66f33a44m78i28l28i28a44rw59w72i28t28hwf5
+76e60df1
+60,w51Iw59h50a44v50ew70p50o50i28n50t28e44dw76o50u50tw54i28nw76s39q50u50a44r33ew70b50r33a44c44kh50Chy
+n120 0
+H720
+V6706
+ce
+44t28sw75[33]w69s39o50m78ew80o50fw69t28h50ew80r33e44l28e44v50a44n50tw65d50i28f33f33e44r33e44n50c44e44sw76b50e44t28w72e44e44nwf5
+87e60dwf1
+97a44n50dwf5
+87s60a60mf1
+60.w87R67e44a44dw87t28h50e44s39ew81c44o50m78m78e44n50t28sw76o50n50l28yw87i28fw70y50o50uw87w72i28s39hw87t28on120 0
+H720
+V6826
+cu
+50n50d50e44r33s39t28a44n50dw84t28h50ew78d50i28f33f33e44r33e44n50c44e44s39;w62t28h50ew77l28e44s39s39o50nw83i28sw72a44b50o50u50twf5
+61s60a60mf1
+60,w58n50o50twf5
+61s60a60mwf2
+93v44s39.wf5
+83e60df1
+60.w83A72n50o50t28h50e44rw66t28y50p50o50g50r33a44p50h50i28cw77c44o50n50v50e44n50t28i28o50nw83i28sn120 0
+x font 0 CI
+f1
+H720
+V6946
+ct
+28h50a44tw53o50u50t28p50u50tw53a44p50p50e44a44r33sw64i28nwf5
+75t60h60i60swh120cf
+60o60n60t60,wf1
+85w72h50i28l28ew69t28y50p50e44dw75i28n50p50u50tw53a44p50p50e44a44r33sw64a44swx font 0 CI
+f0
+64s60l60a60n60t60ywh120ct
+60e60x60t60.n120 0
+H720
+f1
+V7102
+h250cN
+72o50m78e44n50c44l28a44t28u50r33e44:wf5
+56s60a60mwf1
+88k50e44e44p50sw67aw72c44o50p50yw78o50fw61t28h50ew72t28e44x50tw56i28tw56i28sw67e44d50i28t28i28n50g50.w78T61h50i28sw67c44o50p50yw78i28sw67c44a44l28l28e44dw78awf2
+72f28i28l28ef1
+44.w78T61ow79a44v50o50i28dw79c44o50n50f33uh50Chy
+n120 0
+H720
+V7222
+cs
+39i28o50n50,w50Iw58h50a44v50ew69c44a44l28l28e44dw75t28h50ew69p50e44r33m78a44n50e44n50tw53s39t28o50r33a44g50ew69o50nw75d50i28s39cw69awf2
+69U72n50i28xw69f28i28l28e44.n120 0
+V7920
+p2
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 252w50 h25Chy
+wn120 0
+H720
+f3
+V840
+cT
+67e44x50tn120 0
+H720
+f1
+V996
+h250cT
+61ow98g50e44tw76s39t28a44r33t28e44d50,w74w72ew93n50e44e44dw99s39o50m78ew93t28e44x50tw77t28ow99p50l28a44yw99w72i28t28h50.w99A72n50yw99t28e44x50tw77w72i28l28lw77d50o50;w77t28r33yw99s39o50m78e44t28h50i28n50gw99f33r33o50mwh127cJ
+39a44m78e44sn120 0
+H720
+V1116
+cG
+72o50s39l28i28n50g50'33sw64E61m78a44c44sw64m78a44n50u50a44l28:n120 0
+H720
+f5
+V1296
+h360c$
+wx font 0 CI
+f0
+h120cs
+60a60mwh120c-
+60dn120 0
+H720
+V1416
+h360ca
+n120 0
+H720
+V1536
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V1656
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V1776
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V1896
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+V2016
+h360c.
+n120 0
+H720
+V2196
+cs
+60a60mwh126c-
+60dwf1
+91s39t28a44r33t28swf5
+71s60a60mwf1
+92r33u50n50n50i28n50g50.w82T61h50ewf5
+76awf1
+92c44o50m78m78a44n50dw82a44d50d50sw71t28e44x50tw60u50n50t28i28lw60aw76l28i28n50ew76c44o50n50t28a44i28n50i28n50gw82j28u50s39tw60aw76p50e44r33i28o50d50,w57a44n50dw82s39e44t28sw71t28h50en120 0
+H720
+f2
+V2316
+cc
+44u50r39r39e44n50tw63t28e44x44twf1
+63(33a44l28s39ow85c44a44l28l28e44dwf2
+85d50o50tf1
+28)w68t28ow85w72h50a44tw63w72a44sw74t28y50p50e44dwh85Cem
+wh135ce
+44v50e44r33y50t28h50i28n50gw85b50e44t28w72e44e44nw85t28h50ewf5
+79awf1
+94a44n50dw84t28h50ew78p50e44r33i28o50d50.w84[f5
+33e60dwf1
+94w72o50u50l28dn120 0
+H720
+V2436
+cl
+28e44a44v50ew69d50o50tw53s39e44tw53t28ow75o50n50l28yw75t28h50ew69l28a44s39tw53l28i28n50e44.25]w83T61h50ewf5
+69pwf1
+85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69c44u50r33r33e44n50tw53t28e44x50t28:n120 0
+H720
+x font 0 CI
+f0
+V2616
+h360cp
+n120 0
+H720
+f5
+V2736
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V2856
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V2976
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V3096
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V3276
+c[
+33A72g50a44i28n50,wf5
+55e60dwf1
+90w72o50u50l28dw80p50r33i28n50tw58o50n50l28yw80t28h50ew74l28a44s39tw58l28i28n50e44.25]w88T61h50ewf5
+75awf1
+91c44o50m78m78a44n50dw81a44d50d50sw70i28t28sw70t28e44x50twf2
+59a50f28t28e44rwf1
+70d50o50t28;w59t28h50ewf5
+75iwf1
+91c44o50m78m78a44n50dw81i28sw70l28i28k50en120 0
+H720
+f5
+V3396
+ca
+60,wf1
+85b50u50tw53a44d50d50sw64t28h50ew69t28e44x50twf2
+53b50e44f28o50r39ewf1
+69d50o50t28.n120 0
+H720
+x font 0 CI
+f0
+V3576
+h360ci
+n120 0
+H720
+V3696
+h360cI
+60n60t60r60o60d60u60c60t60i60o60nn120 0
+H720
+V3816
+h360c.
+n120 0
+H720
+V3936
+h360cp
+n120 0
+H720
+f5
+V4056
+h360cI
+60n60t60r60o60d60u60c60t60i60o60nn120 0
+H720
+f1
+V4236
+cT
+61h50e44r33ew69i28sw64a44l28s39ow75awf5
+69cwf1
+85c44o50m78m78a44n50dw75t28h50a44tw53c44h50a44n50g50e44sw64(33r33e44p50l28a44c44e44s39)w58t28h50ew69c44u50r33r33e44n50tw53t28e44x50t28,w50a44n50dwf5
+75dwf1
+85t28h50a44tw53d50e44l28e44t28e44sw65i28t28;w54t28h50e44s39ew70a44r33ew70i28l28l28u50s39t28r33a44t28e44dn120 0
+H720
+V4356
+cb
+50e44l28o50w72.n120 0
+H720
+V4512
+h250cT
+61ow76s39e44ew70a44l28lw54t28h50ew70t28e44x50t28,w51w72ew70c44a44nw76s39p50e44c44i28f33yw76w72h50a44tw54t28e44x50tw54t28ow77p50r33i28n50t28;w55f33o50rw60t28h50ew71m78o50m78e44n50t28,w52s39u50f33f33i28c44ew71i28tw55t28ow77s39a44yw77t28h50a44twx font 0 CI
+f0
+55060,60$wf1
+87s39p50e44c44ih28Chy
+n120 0
+H720
+V4632
+cf
+33i28e44sw64t28h50ew69e44n50t28i28r33ew69f33i28l28e44.w75[f5
+33e60dwf1
+85u50s39e44r33sw64w72o50u50l28dw75p50r33o50b50a44b50l28yw75t28y50p50ewx font 0 CI
+f0
+69160,60$f1
+60,w50w72h50i28c44hw75i28nw75p50r33a44c44t28i28c44ew69i28sw64t28h50ew69s39a44m78ew69t28h50i28n50g50,w50b50u50tw53s39e44ew69b50e44l28o50w72.25]n120 0
+H720
+x font 0 CI
+f0
+V4812
+h360c0
+60,60$60pn120 0
+H720
+f5
+V4932
+h360cI
+60n60t60r60o60d60u60c60t60i60o60nn120 0
+H720
+V5052
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V5172
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V5292
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V5412
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V5592
+cE
+61x50c44e44p50tw67f33o50rw72t28h50ewf5
+83wwf1
+99c44o50m78m78a44n50dw89d50e44s39c44r33i28b50e44dw89b50e44l28o50w72,wf2
+64a50l28lwf1
+67c44o50m78m78a44n50d50s39,w64i28n50c44l28u50d50i28n50gwf5
+89pf1
+60,w64s39e44tw67d50o50tw67t28ow89t28h50ew83t28e44x50tw68t28h50e44yw90t28o50u50c44h50.n120 0
+H720
+V5712
+cT
+61h50u50s39,wf5
+54awf1
+89a44n50dwf5
+79iwf1
+89s39e44tw57d50o50tw57t28ow79t28h50ew73n50e44wwh101ct
+28e44x50t28,wf5
+54pwf1
+89t28ow79t28h50ew73t28e44x50tw57p50r33i28n50t28e44d50,w54a44n50dw79s39ow79o50n50.w78S56i28m78i28l28a44r33l28y50,w53a44l28lw56c44o50m78m78a44n50d50sw67(33e44x50c44e44p50twf5
+56wf1
+60)n120 0
+H720
+V5832
+cb
+50yw88d50e44f33a44u50l28tw66o50p50e44r33a44t28ew82o50nw88t28h50ew82c44u50r33r33e44n50tw66t28e44x50tw66[33u50n50l28i28k50ewf5
+83e60df1
+60,w64f33o50rw72w72h50i28c44hw89s39o50m78ew83c44o50m78m78a44n50d50sw78(33s39u50c44hw89a44swf5
+78gf1
+60)w72d50e44f33a44u50l28tw67t28ow89t28h50en120 0
+H720
+V5952
+ce
+44n50t28i28r33ew69f33i28l28e44]33.n120 0
+H720
+V6108
+h250cT
+61h50i28n50g50sw89a44r33ew94n50o50tw78g50o50i28n50gwh100ct
+28owh100cg
+50e44tw78v50e44r33ywh100ci
+28n50t28e44r33e44s39t28i28n50gwh100cu
+50n50t28i28lw78w72ew94c44a44nwh100cs
+39e44tw78d50o50tw78a44r33b50i28t28r33a44r33i28l28y50.wh100cT
+61h50i28sw89i28sw89d50o50n50ew95b50yn120 0
+H720
+f2
+V6228
+ca
+50d50d50r39e44s39s39e44sf1
+39,w50w72h50i28c44hw75s39p50e44c44i28f33yw75aw69p50i28e44c44ew69o50fw58t28h50ew69f33i28l28e44.w75T61h50ew69a44d50d50r33e44s39swf5
+641f1
+60,w50f33o50rw58e44x50a44m78p50l28e44,w50s39e44t28sw64d50o50tw53t28ow75t28h50ew69f33i28r33s39tw53l28i28n50ew69o50fw58t28h50ew69f33i28l28e44.n120 0
+H720
+x font 0 CI
+f0
+V6408
+h360c1
+60pn120 0
+H720
+f5
+V6528
+h360cI
+60n60t60r60o60d60u60c60t60i60o60nn120 0
+H720
+x font 0 CI
+f0
+V6648
+h360cc
+n120 0
+H720
+V6768
+h360cP
+60r60e60a60m60b60l60en120 0
+H720
+V6888
+h360c.
+n120 0
+H720
+f1
+V7068
+cT
+61h50ewf5
+76cwf1
+92c44o50m78m78a44n50dw82d50i28d50n50'33tw60n50e44e44dw82t28ow82s39p50e44c44i28f33yw82d50o50t28;w60t28h50ewf5
+76pwf1
+92l28e44f33tw60i28tw60o50nw82l28i28n50ew76o50n50e44.w83I33t28'33sw72t28h50e44r33e44f33o50r33ew77e44a44s39yw83t28ow83d50e44l28e44t28ew77t28h50ew77f33i28r33s39tn120 0
+H720
+V7188
+cl
+28i28n50ew69u50t28t28e44r33l28y50;w53t28h50ew69l28a44s39tw53c44o50m78m78a44n50dw75l28e44f33tw53d50o50tw53s39e44tw53t28ow75l28i28n50ew69o50n50e44:n120 0
+V7920
+p3
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 253w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360cd
+n120 0
+H720
+V1020
+h360c1
+60pn120 0
+H720
+f5
+V1140
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V1320
+c(
+33L61i28n50ew69n50u50m78b50e44r33sw64c44h50a44n50g50ew69t28ow75r33e44f33l28e44c44tw53c44h50a44n50g50e44sw64t28ow75t28h50ew69f33i28l28e44.25)n120 0
+H720
+V1476
+h250cT
+61h50ew75a44d50d50r33e44s39swf5
+70/f2
+60t28e44x44tf5
+28/wf1
+91s39e44t28sw70d50o50tw59t28ow81t28h50ew75f33i28r33s39tw59a44p50p50e44a44r33a44n50c44ew75o50fwf2
+64t28e44x44tf1
+28,w56a44f33t28e44rw64d50o50t28.w82[f5
+33e60dwf1
+92m78a44t28c44h50e44sw71t28h50ew76f33i28r33s39tw60l28i28n50ew76c44o50nh50Chy
+n120 0
+H720
+V1596
+ct
+28a44i28n50i28n50gwf2
+75t28e44x44tf1
+28.25]w83I33fwf2
+58t28e44x44twf1
+53i28sw64n50o50tw53f33o50u50n50d50,w50t28h50ew69s39e44a44r33c44hw75r33e44s39t28a44r33t28sw64a44tw53t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28ew69a44n50dw75c44o50n50t28i28n50u50e44sw64u50n50t28i28lw53d50o50t28.n120 0
+H720
+x font 0 CI
+f0
+V1776
+h360c/
+60E60m60a60c60s60/60pn120 0
+H720
+f5
+V1896
+h360cE
+60m60a60c60sn120 0
+H720
+f1
+V2076
+cI
+33t28'33sw65d50i28f33f33i28c44u50l28tw54t28ow76i28n50d50i28c44a44t28ew71t28y50p50o50g50r33a44p50h50i28c44a44l28l28y50,w52b50u50tw55i28nw77t28h50i28sw66e44x50a44m78p50l28ew71n50ow77n50e44w72l28i28n50ew71a44p50p50e44a44r33sw66a44f33t28e44rwf5
+60E60m60a60c60sf1
+60:w55t28h50ew71t28e44x50tw55t28ow77b50en120 0
+H720
+V2196
+cp
+50r33i28n50t28e44dw84i28sw73t28h50ew78s39t28r33i28n50gw84`f5
+33E60m60a60c60sf1
+60'33,w59e44x50a44c44t28l28y50.w84(33T61h50ew78f33i28n50a44lwf5
+62pwf1
+94m78a44yw84b50ew78l28e44f33tw62o50f33fwh67Cem
+wh134ci
+28tw61i28sw72t28h50ew77d50e44f33a44u50l28tw61c44o50m78m78a44n50d50.w83W94h50e44nn120 0
+H720
+V2316
+cd
+50o50w72n50l28o50a44d50e44d50,w51h50o50w72e44v50e44r33,w51t28h50ew70d50e44f33a44u50l28tw54i28sw65i28n50s39t28e44a44dw76t28ow76s39e44l28e44c44tw54t28h50ew70t28e44x50t28,w51t28ow76h50i28g50h50l28i28g50h50tw54i28t28,w51a44n50dw76t28ow76m78a44k50ew70i28tw54v50i28s39i28b50l28ew70b50yw77m78o50vh50Chy
+n120 0
+H720
+V2436
+ci
+28n50gw84t28h50ew78w72i28n50d50o50wwh106co
+50nw84t28h50ew78f33i28l28ew78i28fw67n50e44c44e44s39s39a44r33y50.w84T61h50u50s39,wf5
+59/60E60m60a60c60s60/wf1
+94i28n50d50i28c44a44t28e44sw72o50nw83t28h50ew77d50i28s39p50l28a44yw83t28h50ew77n50e44x50tw61o50c44c44u50r33r33e44n50c44ew77o50fn120 0
+H720
+V2556
+ct
+28h50ew69t28e44x50t28.25)n120 0
+H720
+V2712
+h250cI
+33m78a44g50i28n50ew71w72ew71w72a44n50t28e44dw78t28ow78c44h50a44n50g50ew72t28h50ew72w72o50r33dwf5
+78h60a60p60h60a60z60a60r60dwf1
+88t28owf5
+78t60h60o60u60g60h60t60l60e60s60sf1
+60.w78O72b50v50i28o50u50s39l28y50,w53w72h50a44t28'33sw67n50e44e44d50e44dn120 0
+H720
+V2832
+ci
+28sw68a44n50o50t28h50e44rwf5
+62cwf1
+89c44o50m78m78a44n50d50,w53b50u50tw56t28h50ew72m78e44t28h50o50dw78u50s39e44dw78s39ow78f33a44rw61t28ow78i28n50s39e44r33tw56t28e44x50tw56i28n50c44l28u50d50e44sw67aw72n50e44w72l28i28n50e44.w78T61h50ew72s39y50n50t28a44xw78f33o50rw61i28n50c44l28u50dh50Chy
+n120 0
+H720
+V2952
+ci
+28n50gw89t28e44x50tw67w72i28t28h50o50u50tw67n50e44w72l28i28n50e44sw78i28sw78t28ow89s39u50r33r33o50u50n50dw89t28h50ew83t28e44x50tw67w72i28t28hw89s39l28a44s39h50e44sw78(33w72h50i28c44hw89i28sw78t28h50ew83s39a44m78ew83a44sw79t28h50ew84s39y50n50t28a44xw90f33o50rw73t28e44x50tn120 0
+H720
+V3072
+cs
+39e44a44r33c44h50e44s39,w53b50u50tw55w72h50a44tw55i28sw66g50o50i28n50gw77o50nw77s39h50o50u50l28dw77b50ew71c44l28e44a44rw60f33r33o50mwh105cc
+44o50n50t28e44x50t28)33.w77T61h50ew71t28e44x50tw55m78u50s39tw55a44p50p50e44a44rw60i28m78m78e44d50i28a44t28e44l28yw77a44f33t28e44rw60t28h50ewf5
+71cn120 0
+H720
+f1
+V3192
+c(
+33o50rwf5
+58awf1
+85o50rwf5
+58if1
+60)33.w75G72i28v50e44nw75t28h50i28s39,w50i28tw53i28sw64e44a44s39yw75t28ow75m78a44k50ew69t28h50ew69r33e44q50u50i28r33e44dw75c44h50a44n50g50e44:n120 0
+H720
+x font 0 CI
+f0
+V3372
+h360c/
+60h60a60p60h60a60z60a60r60d60/60c60/60t60h60o60u60g60h60t60l60e60s60s60/n120 0
+H720
+V3492
+h360c1
+60pn120 0
+H720
+f5
+V3612
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ct
+60h60o60u60g60h60t60l60e60s60swh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V3792
+c[
+33C67h50a44n50g50e44sw70c44a44nw81a44l28w72a44y50sw70b50ew75d50o50n50ew76w72i28t28hw82awf5
+76cwf1
+92c44o50m78m78a44n50d50,w57e44v50e44nw82i28fw65t28h50ew76t28e44x50tw60i28sw71s39m78a44l28l28e44rw65t28h50a44nw82aw76l28i28n50e44]33.w82Y72o50u50'33l28lw60f33i28n50dw82t28h50a44tn120 0
+H720
+V3912
+ct
+28h50i28sw74w72a44yw85o50fw68p50r33o50v50i28d50i28n50gw85t28e44x50tw63t28ow85c44o50m78m78a44n50d50sw74i28sw74m78u50c44hw85m78o50r33ew79c44o50m78m78o50nw84t28h50a44nw84i28sw73t28h50ew78m78u50l28t28i28p50l28e44-33l28i28n50e44sw73s39y50n50t28a44x50.w84I33fw67y50o50un120 0
+H720
+V4032
+cw
+72a44n50tw62t28ow84i28n50c44l28u50d50ew78aw78s39l28a44s39hwf5
+84/wf1
+94i28nw84t28h50ew78t28e44x50t28,w60j28u50s39tw63p50r33e44c44e44d50ew79i28tw63w72i28t28hw85aw79b50a44c44k50s39l28a44s39hwf5
+85\f1
+60,w60a44n50dw85u50s39ew79aw79b50a44c44k50s39l28a44s39hw85t28ow85p50r33o50t28e44c44tw63an120 0
+H720
+V4152
+cb
+50a44c44k50s39l28a44s39hw75i28t28s39e44l28f33.n120 0
+H720
+x font 0 CI
+f0
+V4332
+h360c/
+60E60m60a60c60s60/60c60/60E60m60a60c60s60\60\60360660060/n120 0
+H720
+V4452
+h360c4
+60pn120 0
+H720
+f5
+V4572
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60s60\603606600wh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+f1
+V4752
+cW
+94ew69c44o50u50l28dw75a44l28s39ow75m78a44k50ew69t28h50i28sw64p50a44r33t28i28c44u50l28a44rw58c44h50a44n50g50ew69b50yn120 0
+H720
+x font 0 CI
+f0
+V4932
+h360c/
+60E60m60a60c60s60/60a60/60\60\60360660060/n120 0
+H720
+f1
+V5148
+h250cT
+61h50i28sw67i28sw67a44sw67g50o50o50dw78aw72p50l28a44c44ew72a44sw67a44n50yw78t28ow78i28n50t28r33o50d50u50c44ew72t28h50ewf5
+73uwf1
+89c44o50m78m78a44n50d50,w54w72h50i28c44hw79u50n50d50o50e44sw68t28h50ew73l28a44s39tw57c44o50m78m78a44n50d50.w79Awh101cs
+39e44ch44Chy
+n120 0
+H720
+V5268
+co
+50n50dwf5
+75uwf1
+85w72i28l28lw53u50n50d50ow75t28h50ew69p50e44n50u50l28t28i28m78a44t28ew69c44o50m78m78a44n50d50,w50a44n50dw75s39ow75o50n50.n120 0
+H720
+x font 0 CI
+f0
+V5448
+h360cu
+n120 0
+H720
+V5568
+h360c4
+60pn120 0
+H720
+f5
+V5688
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+x font 0 CI
+f0
+V5808
+h360cu
+n120 0
+H720
+V5928
+h360c3
+60pn120 0
+H720
+f5
+V6048
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V6228
+cU
+72n50d50o50i28n50gw75c44a44nw75o50n50l28yw75b50a44c44kw75u50p50;w53t28h50e44r33ew69i28sw64n50ow75w72a44yw75t28ow75u50n50d50ow75aw69p50r33e44v50i28o50u50swf5
+64uf1
+60.n120 0
+H720
+f3
+V6468
+cA
+72d56d56r44e44s39s39e44sn120 0
+H720
+f1
+V6624
+h250cW
+94e44'33v50ew76s39e44e44nw83t28h50ew77s39i28m78p50l28e44s39tw61f33o50r33m78sw72o50fw66a44d50d50r33e44s39s39e44s39,w58b50u50tw61t28h50e44r33ew77i28sw72m78o50r33ew77t28ow83l28e44a44r33nw83b50e44f33o50r33ew77w72ew77c44a44nw83g50e44tw61t28o50ow83m78u50c44hn120 0
+H720
+V6744
+cf
+33u50r33t28h50e44r33.w84A72nw84a44d50d50r33e44s39sw73s39e44l28e44c44t28sw73aw78r33e44g50i28o50nw84i28nw83t28h50ew77f33i28l28ewh77Cem
+wh133ca
+w77s39u50b50s39t28r33i28n50gwh83Cem
+wh133ca
+44n50dw83t28h50e44r33e44f33o50r33ew77m78u50s39tw61d50e44f33i28n50ew77t28h50ew77b50e44g50i28n50n50i28n50gn120 0
+H720
+V6864
+ca
+44n50dw79t28h50ew73e44n50dw79o50fw62aw73r33e44g50i28o50n50.w79T61h50u50s39,w54t28h50ew73a44d50d50r33e44s39swf5
+681603wf1
+89s39e44l28e44c44t28sw68f33r33o50mwh107ct
+28h50ew73b50e44g50i28n50n50i28n50gw79o50fw62l28i28n50ew74t28h50i28r33t28e44e44nw80t28ow80t28h50ew74e44n50dw80o50fw63l28i28n50en120 0
+H720
+V6984
+ct
+28h50i28r33t28e44e44n50,w50a44n50dwf5
+75/60E60m60a60c60s60/wf1
+85s39e44l28e44c44t28sw64f33r33o50mwh103ct
+28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69w72o50r33dw75`f5
+33E60m60a60c60sf1
+60'w58t28ow75t28h50ew69e44n50d50.n120 0
+H720
+V7140
+h250cA
+72d50d50r33e44s39s39e44sw64m78a44yw75b50ew69c44o50m78b50i28n50e44dw75w72i28t28hw75aw69c44o50m78m78a44:n120 0
+V7920
+p4
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 254w50 h25Chy
+wn120 0
+H720
+f5
+V900
+h360c1
+60360,601605n120 0
+H720
+f1
+V1080
+cs
+39e44l28e44c44t28sw68l28i28n50e44sw68t28h50i28r33t28e44e44nw79t28h50r33o50u50g50hw79f33i28f33t28e44e44n50.w80T61h50ew74d50e44f33i28n50i28t28i28o50nw80o50fw63t28h50ew74c44o50m78m78aw74o50p50e44r33a44t28o50rw63i28sw69t28ow80s39e44l28e44c44tw58f33r33o50mwh108ct
+28h50ew74b50e44g50i28n50n50i28n50gn120 0
+H720
+V1200
+co
+50fw58t28h50ew69l28e44f33tw53h50a44n50dw75a44d50d50r33e44s39sw64(33t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58l28i28n50ew69150350)w58t28ow75t28h50ew69e44n50dw75o50fw58t28h50ew69r33i28g50h50tw53h50a44n50dw75a44d50d50r33e44s39sw64(33t28h50ew69e44n50dw75o50fw58l28i28n50ew69150550)33.n120 0
+H720
+V1356
+h250cA
+wh104cf
+33e44wwh104cs
+39p50e44c44i28a44lw60s39i28m78p50l28ew76a44d50d50r33e44s39s39e44sw71c44o50m78ew76i28nw82h50a44n50d50y50:wf5
+60.wf1
+93(33aw77p50e44r33i28o50d50)w66r33e44p50r33e44s39e44n50t28sw72d50o50t28,w58t28h50ew77c44u50r33r33e44n50tw61t28e44x50t28,wf5
+580wf1
+93(33l28i28n50en120 0
+H720
+V1476
+cz
+44e44r33o50)w67s39e44l28e44c44t28sw73t28h50ew78n50u50l28lw62s39t28r33i28n50gw84a44tw62t28h50ew78b50e44g50i28n50n50i28n50gw84o50fw67t28h50ew77f33i28l28e44,w58a44n50dwf5
+83$wf1
+93s39e44l28e44c44t28sw72t28h50ew77n50u50l28lw61s39t28r33i28n50gw83a44tw61t28h50ew77e44n50dw83o50fw66t28h50ew77f33i28l28en120 0
+H720
+V1596
+c[
+33n50o50tw53t28h50ew69l28a44s39tw53l28i28n50ew69o50fw58t28h50ew69f33i28l28e44]33.w75T61h50e44r33e44f33o50r33e44,n120 0
+H720
+f5
+V1776
+h360c0
+60,601603n120 0
+H720
+f1
+V1956
+cs
+39e44l28e44c44t28sw64f33r33o50mwh103ct
+28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28ew69t28ow75t28h50ew69e44n50dw75o50fw58l28i28n50ew69t28h50i28r33t28e44e44n50,n120 0
+H720
+f5
+V2136
+h360c.
+60,60$n120 0
+H720
+f1
+V2316
+cs
+39e44l28e44c44t28sw64f33r33o50mwh103ct
+28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69c44u50r33r33e44n50tw53t28e44x50tw53t28ow75t28h50ew69e44n50dw75o50fw58t28h50ew69f33i28l28e44,w50a44n50dn120 0
+H720
+f5
+V2496
+h360c0
+60,60$n120 0
+H720
+f1
+V2676
+cs
+39e44l28e44c44t28sw64t28h50ew69w72h50o50l28ew69f33i28l28ew69[33t28h50a44tw53i28s39,w50aw69s39i28n50g50l28ew69s39t28r33i28n50gw75c44o50n50t28a44i28n50i28n50gw75t28h50ew69w72h50o50l28ew69f33i28l28e44,w50n50o50tw53aw69l28i28s39tw53o50fw58a44l28lw53t28h50ew69l28i28n50e44sw64i28nw75t28h50ew69f33i28l28e44]33.n120 0
+H720
+V2832
+h250cT
+61h50e44s39ew88a44r33ew88a44l28lwf2
+72a50b50s39o50l28u50t28ewf1
+88a44d50d50r33e44s39s39e44s39:w72t28h50e44yw94r33e44f33e44rw77t28ow94s39p50e44c44i28f33i28cw88p50l28a44c44e44sw83i28nw95t28h50ew89f33i28l28e44.wf5
+95s60a60mwf1
+h105ca
+44l28s39ow95h50a44sw84r33e44l28a44t28i28v50en120 0
+H720
+V2952
+ca
+44d50d50r33e44s39s39e44s39,w57w72h50i28c44hw82d50e44p50e44n50dw82o50nw82t28h50ew76v50a44l28u50ew76o50fw65d50o50t28,w57a44n50dw82i28nw82f33a44c44tw60w72ew76h50a44v50ew76a44l28r33e44a44d50yw82s39e44e44nw82o50n50ew76f33o50r33m78:wf5
+60/60E60m60a60c60s60/wf1
+92f33i28n50d50sn120 0
+H720
+V3072
+ct
+28h50ew73f33i28r33s39tw57o50c44c44u50r33r33e44n50c44ew73o50fwf5
+62E60m60a60c60swf1
+89s39e44a44r33c44h50i28n50gw79f33o50r33w72a44r33d50sw68f33r33o50mwh107cd
+50o50t28.w80W94h50i28c44hw80o50c44c44u50r33r33e44n50c44ew74o50fwf5
+63E60m60a60c60swf1
+90i28tw58f33i28n50d50sw69d50e44p50e44n50d50sn120 0
+H720
+V3192
+co
+50nw79t28h50ew73v50a44l28u50ew73o50fw62d50o50t28.w79W94h50a44tw57i28fw62y50o50uw79w72a44n50t28e44dw79t28h50ew73f33i28r33s39tw57o50c44c44u50r33r33e44n50c44ewf5
+73b60e60f60o60r60ewf1
+88d50o50t28?w97J39u50s39tw56p50r33e44c44e44d50ew72t28h50ew72p50a44t28t28e44r33nw78w72i28t28hw78an120 0
+H720
+V3312
+cm
+78i28n50u50sw64s39i28g50n50,w50w72h50i28c44hw75r33e44v50e44r33s39e44sw64t28h50ew69d50i28r33e44c44t28i28o50nw75o50fw58t28h50ew69s39e44a44r33c44h50:n120 0
+H720
+f5
+V3492
+h360c-
+60/60E60m60a60c60s60/n120 0
+H720
+f1
+V3672
+cI
+33nw75f33a44c44t28,w50t28h50ew69c44o50m78p50l28e44t28ew69s39y50n50t28a44xw75f33o50rw58f33o50r33w72a44r33dw75s39e44a44r33c44h50i28n50gw75i28sn120 0
+H720
+f5
+V3852
+h360c+
+60/60E60m60a60c60s60/n120 0
+H720
+f1
+V4032
+cb
+50u50tw53t28h50ew69p50l28u50sw64s39i28g50nw75i28sw64t28h50ew69d50e44f33a44u50l28t28,w50a44n50dw75i28nw75p50r33a44c44t28i28c44ew69i28sw64r33a44r33e44l28yw75u50s39e44d50.w75H72e44r33ew69i28sw64a44nw75e44x50a44m78p50l28ew69t28h50a44tw53i28n50c44l28u50d50e44sw64i28tw53f33o50rw58c44l28a44r33i28t28y50:n120 0
+H720
+f5
+V4212
+h360c0
+60+60/60E60m60a60c60s60/n120 0
+H720
+f1
+V4392
+cs
+39e44l28e44c44t28sw65t28h50ew70f33i28r33s39tw54o50c44c44u50r33r33e44n50c44ew70o50fwf5
+59E60m60a60c60swf1
+86i28nw76t28h50ew70f33i28l28e44;w54r33e44a44dw76i28tw54a44sw65`33`33g50ow76t28ow76l28i28n50ew70050,w52t28h50e44nw77s39e44a44r33c44hw77f33o50r33w72a44r33d50sw66f33o50rwf5
+60E60m60a60c60sf1
+60.25'33'n120 0
+H720
+V4512
+cS
+56i28n50c44ew69t28h50ewf5
+69+wf1
+85i28sw64o50p50t28i28o50n50a44l28,w50t28h50i28sw64c44a44nw75b50ew69w72r33i28t28t28e44nwf5
+75060/60E60m60a60c60s60/f1
+60.w75S56i28m78i28l28a44r33l28y50,n120 0
+H720
+f5
+V4692
+h360c$
+60-60/60E60m60a60c60s60/n120 0
+H720
+f1
+V4872
+cf
+33i28n50d50sw64t28h50ew69l28a44s39tw53o50c44c44u50r33r33e44n50c44ew69i28nw75t28h50ew69f33i28l28e44,w50s39on120 0
+H720
+f5
+V5052
+h360c0
+60/60E60m60a60c60s60/60,60$60-60/60E60m60a60c60s60/n120 0
+H720
+f1
+V5232
+cs
+39e44l28e44c44t28sw64t28h50ew69t28e44x50tw53f33r33o50mwh103ct
+28h50ew69f33i28r33s39tw53t28ow75l28a44s39twf5
+53E60m60a60c60sf1
+60,w50i28n50c44l28u50s39i28v50e44.w75S56l28i28g50h50t28l28yw75m78o50r33ew69i28n50t28e44r33e44s39t28i28n50g50:n120 0
+H720
+f5
+V5412
+h360c/
+60E60m60a60c60s60/60+60/60E60m60a60c60s60/n120 0
+H720
+f1
+V5592
+c(
+33t28h50e44r33ew69i28sw64a44nw75i28m78p50l28i28c44i28twf5
+53.60+wf1
+85a44tw53t28h50ew69b50e44g50i28n50n50i28n50g50)w58s39e44l28e44c44t28sw64t28h50ew69s39e44c44o50n50dwf5
+75E60m60a60c60swf1
+85f33o50l28l28o50w72i28n50gw75d50o50t28.n120 0
+H720
+V5748
+h250cL
+61i28n50ew69n50u50m78b50e44r33sw64m78a44yw75a44l28s39ow75b50ew69r33e44l28a44t28i28v50e44.n120 0
+H720
+f5
+V5928
+h360c-
+602n120 0
+H720
+f1
+V6108
+cs
+39e44l28e44c44t28sw64t28h50ew69s39e44c44o50n50dw75p50r33e44v50i28o50u50sw64l28i28n50e44,w50a44n50dn120 0
+H720
+f5
+V6288
+h360c+
+605n120 0
+H720
+f1
+V6468
+cs
+39e44l28e44c44t28sw64t28h50ew69f33i28f33t28hw75f33o50l28l28o50w72i28n50gw75l28i28n50ew69(33h50e44r33ew69t28h50ew69p50l28u50sw64s39i28g50nw75i28sw64o50b50l28i28g50a44t28o50r33y50)33.n120 0
+H720
+V6624
+h250cS
+56i28n50c44ew75a44d50d50r33e44s39s39e44sw70m78a44yw81s39e44l28e44c44tw59(33a44n50dw81d50o50tw59m78a44yw81b50e44)w65m78o50r33ew76t28h50a44nw82o50n50ew76l28i28n50e44,w57w72ew76n50e44e44dw82aw76d50e44f33i28n50i28t28i28o50nw82o50fw65`33p50r33e44v50i28o50u50s39'n120 0
+H720
+V6744
+ca
+44n50dw80`33f33o50l28l28o50w72i28n50g50:28'w63`33p50r33e44v50i28o50u50s39'w63m78e44a44n50swf2
+69b50e44f28o50r39ew74t28h50ew74b50e44g50i28n50n50i28n50gwf1
+79o50fw62d50o50t28,w54a44n50dw79`33f33o50l28l28o50w72i28n50g50'w62m78e44a44n50swf2
+68a50f28t28e44rw68t28h50ew73e44n50dwf1
+79o50fw62d50o50t28.n120 0
+H720
+V6864
+cF
+56o50rw63e44x50a44m78p50l28e44,w55i28fw63t28h50ew74f33i28l28ew75c44o50n50t28a44i28n50swf5
+70Ax font 0 CI
+f0
+60A60Af5
+60Af1
+60,w56w72i28t28hw81d50o50tw59s39e44tw59t28ow81t28h50ew75m78i28d50d50l28ew75t28w72owf5
+81Af1
+60'33sw70(33t28h50ew75s39l28a44n50t28i28n50gw81c44h50a44r33a44c44t28e44r33s39)33,wf5
+56-60/60A60/n120 0
+H720
+f1
+V6984
+cs
+39e44t28sw69d50o50tw58t28ow80t28h50ew74f33i28r33s39twf5
+58Af1
+60,w55a44n50dwf5
+80+60/60A60/wf1
+90s39e44t28sw69d50o50tw58t28ow80t28h50ew74l28a44s39twf5
+58Af1
+60.w80E61x50c44e44p50tw58u50n50d50e44rw63o50d50dw80c44i28r33c44u50m78s39t28a44n50c44e44sw69(33s39u50c44hw80a44sw69w72h50e44nw79t28h50en120 0
+H720
+V7104
+co
+50n50l28yw90o50c44c44u50r33r33e44n50c44ew84o50fw73t28h50ew84t28e44x50tw68i28nw90t28h50ew84f33i28l28ew84i28sw79a44l28r33e44a44d50yw90t28h50ew84c44u50r33r33e44n50tw68t28e44x50t28)33,w65t28h50ew84t28e44x50tw68s39e44l28e44c44t28e44dw91b50yw91aw85s39e44a44r33c44hw91w72i28l28lw69b50en120 0
+H720
+V7224
+cd
+50i28s39j28o50i28n50tw53f33r33o50mwh103cd
+50o50t28.n120 0
+V7920
+p5
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 255w50 h25Chy
+wn120 0
+H720
+V840
+h250cT
+61ow75s39e44l28e44c44tw53t28h50ewf5
+69t60r60o60f60fwh120c-
+60m60swf1
+85p50a44r33a44g50r33a44p50hw75c44o50n50t28a44i28n50i28n50gw75d50o50t28,w50h50o50w72e44v50e44rw58l28o50n50gw75i28tw53i28s39,w50u50s39en120 0
+H720
+f5
+V1020
+h360c-
+60/60.60P60P60/60,60/60.60P60P60/60-601n120 0
+H720
+f1
+V1200
+cw
+72h50i28c44hw75w72i28l28lw53i28n50c44l28u50d50ew69t28h50ewf5
+69.60P60Pwf1
+85t28h50a44tw53b50e44g50i28n50sw64t28h50ew69p50a44r33a44g50r33a44p50h50,w50a44n50dw75e44x50c44l28u50d50ew69t28h50ew69o50n50ew69t28h50a44tw53e44n50d50sw64i28t28.n120 0
+H720
+V1356
+h250cW
+94h50e44nw81t28y50p50i28n50gw82r33e44l28a44t28i28v50ew76l28i28n50ew76n50u50m78b50e44rw65a44d50d50r33e44s39s39e44s39,w57t28h50ew76d50e44f33a44u50l28tw60n50u50m78b50e44rw65i28swf5
+711f1
+60,w57s39ow82t28h50ew76a44b50o50v50ew76c44o50u50l28dw82b50ew76w72r33i28t28t28e44nn120 0
+H720
+V1476
+cs
+39l28i28g50h50t28l28yw75m78o50r33ew69s39i28m78p50l28y50:n120 0
+H720
+f5
+V1656
+h360c-
+60/60.60P60P60/60,60/60.60P60P60/60-n120 0
+H720
+f1
+V1872
+h250cW
+94h50a44tw55d50o50e44sw66t28h50ew71a44d50d50r33e44s39swf5
+66+60160-601wf1
+87o50rw60t28h50ew71e44q50u50i28v50a44l28e44n50twf5
+55+60-wf1
+87m78e44a44n50?w96I33tw55l28o50o50k50sw66l28i28k50ew71i28tw55d50o50e44sw66n50o50t28h50i28n50g50,w52b50u50tw55r33e44c44a44l28lw56t28h50a44tn120 0
+H720
+V1992
+cd
+50o50tw58n50e44e44dw80n50o50tw58b50ew73aw73c44o50m78p50l28e44t28ew73l28i28n50ew73o50fw62t28e44x50t28.wf5
+79+601wf1
+89s39e44l28e44c44t28sw68t28h50ew73l28i28n50ew73a44f33t28e44rw62t28h50ew73e44n50dw79o50fw62t28h50ew73c44u50r33r33e44n50tw57t28e44x50t28,w54a44n50dwf5
+79-601wf1
+89s39e44l28e44c44t28sn120 0
+H720
+V2112
+ct
+28h50ew75l28i28n50ew75b50e44f33o50r33ew75t28h50ew75b50e44g50i28n50n50i28n50g50.w81T61h50e44r33e44f33o50r33ewf5
+75+60160-601wf1
+91s39e44l28e44c44t28sw70t28h50ew76l28i28n50ew76b50e44f33o50r33ew76t28h50ew76l28i28n50ew76a44f33t28e44rw65t28h50ew76e44n50dw82o50fw65d50o50t28,w57t28h50a44tw60i28s39,n120 0
+H720
+V2232
+ct
+28h50ew71c44o50m78p50l28e44t28ew71l28i28n50ew71c44o50n50t28a44i28n50i28n50gw77t28h50ew71e44n50dw77o50fw60d50o50t28.w77W94ew71c44a44nw77u50s39ew70t28h50i28sw65c44o50n50s39t28r33u50c44t28i28o50nw76t28ow76e44x50p50a44n50dw76aw70s39e44l28e44c44t28i28o50nw76t28ow76i28n50c44l28u50d50ew70an120 0
+H720
+V2352
+cc
+44o50m78p50l28e44t28ew69l28i28n50e44,w50s39a44yw75t28h50ew69f33i28r33s39tw53l28i28n50ew69i28nw75t28h50ew69f33i28l28ew69c44o50n50t28a44i28n50i28n50gwf5
+75E60m60a60c60sf1
+60:n120 0
+H720
+x font 0 CI
+f0
+V2532
+h360c0
+60/60E60m60a60c60s60/60+60-60pn120 0
+H720
+f5
+V2652
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+f1
+V2832
+cT
+61h50ew69a44d50d50r33e44s39swf5
+64+60-wf1
+85i28sw64a44nw75i28d50i28o50m78.n120 0
+H720
+f3
+V3072
+cL
+67o50o50p56sn120 0
+H720
+f1
+V3228
+h250cA
+72b50o50v50e44,w52w72ew71c44h50a44n50g50e44dw77o50n50ew71o50c44c44u50r33r33e44n50c44ew71o50fwf5
+60E60m60a60c60swf1
+87t28owf5
+77E60m60a60c60s60\603606600f1
+60,w52b50u50tw55i28fw61t28h50ew72n50a44m78ew72o50fw61t28h50ew72e44d50i28t28o50rw61i28sw67r33e44a44l28l28yn120 0
+H720
+V3348
+cc
+44h50a44n50g50i28n50g50,w62i28tw65w72o50u50l28dw87b50ew81u50s39e44f33u50lw65t28ow87c44h50a44n50g50ewf2
+81a50l28lwf1
+65i28n50s39t28a44n50c44e44sw76o50fw70t28h50ew81n50a44m78ew80i28nw86aw80s39i28n50g50l28ew80c44o50m78m78a44n50d50.wf5
+86s60a60mwf1
+96p50r33o50v50i28d50e44sw75an120 0
+H720
+V3468
+cc
+44o50m78m78a44n50d50,wf5
+58xwf1
+93(33e44x50t28r33a44c44t28)33,w58f33o50rw66j28u50s39tw61t28h50a44tw61j28o50b50.w83T61h50ew78s39y50n50t28a44xw84i28swf5
+h108cx
+60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60c44o50m72m72a50n50df1
+50.w84F56o50rw67e44a44c44hw84o50c44c44u50r33r33e44n50c44ew78o50fw67t28h50en120 0
+H720
+V3588
+cp
+50a44t28t28e44r33nw76i28nw75t28h50ew69s39e44l28e44c44t28e44dw75t28e44x50t28,wf5
+50xwf1
+85s39e44t28sw64d50o50tw53t28ow75t28h50ew69o50c44c44u50r33r33e44n50c44ew69a44n50dw75r33u50n50sw64c44o50m78m78a44n50d50.w75F56o50rw58e44x50a44m78p50l28e44,w50t28ow75c44h50a44n50g50ewf5
+69E60m60a60c60sn120 0
+H720
+f1
+V3708
+ct
+28owf5
+75v60i60,n120 0
+H720
+x font 0 CI
+f0
+V3888
+h360c0
+60,60$60x60/60E60m60a60c60s60/60c60/60v60i60/n120 0
+H720
+V4008
+h360c0
+60,60$60pn120 0
+H720
+f5
+V4128
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V4248
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V4368
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cv
+60iwh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V4488
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cv
+60iwh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V4668
+cT
+61h50i28sw65w72o50r33k50sw65b50yw77s39u50b50d50i28v50i28d50i28n50gw77t28h50ew71c44u50r33r33e44n50tw55t28e44x50tw55(f5
+33060,60$wf1
+h87Cem
+wh127ct
+28h50ew71w72h50o50l28ew71f33i28l28e44)w60i28n50t28ow77a44p50p50e44a44r33a44n50c44e44sw66o50fw60i28t28sw66t28e44x50t28u50a44lw55a44r33g50u50m78e44n50tn120 0
+H720
+V4788
+c(
+f5
+33E60m60a60c60sf1
+60)33,w57a44n50dw82t28h50e44nw82r33u50n50n50i28n50gw81t28h50ew75c44o50m78m78a44n50dw81t28h50a44tw59f33o50l28l28o50w72sw70(f5
+33c60/60v60i60/f1
+60)w64w72i28t28hw81d50o50tw59s39e44tw59t28ow81t28h50ew75t28e44x50t28.w81W94ew75c44a44nw81r33e44a44dw81t28h50i28sn120 0
+H720
+V4908
+ce
+44x50a44m78p50l28ew74a44s39,w55`33`33f33i28n50dw80a44l28lw58o50c44c44u50r33r33e44n50c44e44sw69o50fwf5
+63E60m60a60c60swf1
+90i28nw80t28h50ew74f33i28l28e44,w55a44n50dw80f33o50rw63e44a44c44hw80o50n50e44,w55s39e44tw58t28h50ew74c44u50r33r33e44n50tw58t28e44x50tw58t28ow80t28h50ew75o50c44c44u50rh33Chy
+n120 0
+H720
+V5028
+cr
+33e44n50c44ew73a44n50dw79r33u50nw79t28h50ew73c44o50m78m78a44n50dwf5
+79c60/60v60i60/f1
+60,w54w72h50i28c44hw79w72i28l28lw57r33e44p50l28a44c44ew72t28h50ew72c44u50r33r33e44n50tw56t28e44x50tw56b50ywf5
+78v60i60.f1
+60'33'w61[33T61h50i28sw67c44o50m78m78a44n50dw78i28sw67s39o50m78eh44Chy
+n120 0
+H720
+V5148
+cw
+72h50a44tw56s39i28m78i28l28a44rw61t28owf5
+78e60df1
+60'33swf5
+67gwf1
+88c44o50m78m78a44n50d50.w78T61h50ew72d50i28f33f33e44r33e44n50c44e44sw67w72i28l28lw56d50e44v50e44l28o50pw78b50e44l28o50w72,w53b50u50tw56n50o50t28ew72t28h50a44tw57t28h50ew73d50e44f33a44u50l28tw57a44d50d50r33e44s39s39,w54a44sn120 0
+H720
+V5268
+ca
+44l28w72a44y50s39,w50i28sw64d50o50tw53r33a44t28h50e44rw58t28h50a44nw75t28h50ew69w72h50o50l28ew69f33i28l28e44.25]n120 0
+H720
+V5424
+h250cA
+w97s39i28n50g50l28ewf5
+69uwf1
+85c44o50m78m78a44n50dw75i28sw64s39u50f33f33i28c44i28e44n50tw53t28ow75u50n50d50ow75a44nwf5
+75xwf1
+85c44o50m78m78a44n50d50,w50r33e44g50a44r33d50l28e44s39sw64o50fw58h50o50ww97m78a44n50yw76i28n50d50i28v50i28d50u50a44lw54c44h50a44n50g50e44sn120 0
+H720
+V5544
+ct
+28h50ewf5
+69xwf1
+85m78a44k50e44s39.n120 0
+H720
+x font 0 CI
+f0
+V5724
+h360cu
+n120 0
+H720
+V5844
+h360c0
+60,60$60pn120 0
+H720
+f5
+V5964
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V6084
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V6204
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V6324
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V6540
+h250cO
+72fw70c44o50u50r33s39e44,wf5
+62cwf1
+97i28sw76n50o50tw65t28h50ew81o50n50l28yw87c44o50m78m78a44n50dwf5
+87xwf1
+97c44a44nw87r33u50n50.w87A72nwf5
+87awf1
+98c44o50m78m78a44n50dw88c44a44nw88b50ew82u50s39e44dw88t28ow88p50u50tw66p50r33o50p50r33i28e44t28a44r33yn120 0
+H720
+V6660
+cm
+78a44r33k50i28n50g50sw64o50nwf5
+75E60m60a60c60sf1
+60:n120 0
+H720
+x font 0 CI
+f0
+V6840
+h360c0
+60,60$60x60/60E60m60a60c60s60/60a60/60{60T60M60}60/n120 0
+H720
+V6960
+h360c/
+60E60m60a60c60s60/60+60-60pn120 0
+H720
+f5
+V7080
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60s60{60T60M60}wh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+f1
+V7260
+c[
+33T61h50e44r33ew74i28sw69n50ow80w72a44yw80t28ow80s39e44ew74t28h50ew74c44h50a44n50g50e44sw69a44sw69t28h50e44yw80h50a44p50p50e44n50,w55a44sw69i28nwf5
+80e60df1
+60'33swf5
+69g60/60E60m60a60c60s60/60s60/60/60&60{60T60M60}60/60pf1
+60;w59s39e44ew75t28h50ew75s39e44c44t28i28o50nn120 0
+V7920
+p6
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 256w50 h25Chy
+wn120 0
+H720
+V840
+co
+50nw75M89u50l28t28i28p50l28ew69C67h50a44n50g50e44s39,w50b50e44l28o50w72.25]n120 0
+H720
+V996
+h250cT
+61h50ewf5
+69pwf1
+85c44o50m78m78a44n50dw75i28sw64a44l28s39ow75u50s39e44f33u50lw53w72h50e44nw75d50r33i28v50e44nw75b50yw75a44nwf5
+75xf1
+60,w50b50u50tw53b50ew69c44a44r33e44f33u50lw53t28h50a44tw53y50o50uw75s39a44yw75w72h50a44tw53y50o50uw75m78e44a44n50;n120 0
+H720
+x font 0 CI
+f0
+V1176
+h360c0
+60,60$60x60/60E60m60a60c60s60/60pn120 0
+H720
+f5
+V1296
+h360cE
+60m60a60c60s60E60m60a60c60sn120 0
+H720
+f1
+V1476
+cs
+39i28n50c44ewf5
+69xwf1
+85s39e44t28sw64d50o50tw54t28ow76t28h50ew70t28e44x50tw54i28nw76t28h50ew70s39l28a44s39h50e44s39,w51p50r33i28n50t28i28n50gw76o50n50l28yw76t28h50a44tw54t28e44x50tw54i28sw65n50o50tw54g50o50i28n50gw76t28ow76b50ew70v50e44r33yw76i28n50f33o50r33m78a44t28i28v50e44.w76B67u50tw54t28h50en120 0
+H720
+V1596
+cc
+44o50m78m78a44n50dw80t28h50a44twf5
+58xwf1
+90r33u50n50sw69c44a44nw80c44o50n50t28a44i28nw80a44d50d50r33e44s39s39e44s39.w80F56o50rw63e44x50a44m78p50l28e44,w55i28fw63w72ew74w72a44n50tw57t28ow79p50r33i28n50tw57a44l28lw57l28i28n50e44sw68c44o50n50t28a44i28n50i28n50gwf5
+79E60m60a60c60sf1
+60,n120 0
+H720
+V1716
+cj
+28u50s39tw53u50s39ewf5
+69+60-f1
+60:n120 0
+H720
+x font 0 CI
+f0
+V1896
+h360c0
+60,60$60x60/60E60m60a60c60s60/60+60-60pn120 0
+H720
+f5
+V2016
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60s60{60T60M60}wh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V2136
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60s60{60T60M60}wh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V2316
+cF
+56i28n50a44l28l28y50,w58l28e44t28'33sw72r33e44s39t28o50r33ew77t28h50ew77s39t28a44t28ew77o50fw66t28h50ew77f33i28l28ew78w72i28t28hw84a44n50o50t28h50e44rwf5
+67xwf1
+94c44o50m78m78a44n50d50,w59a44n50dw84m78a44k50ew78u50s39ew78o50fw67aw78h50a44n50d50yw84s39h50o50r33t28h50a44n50d50:w62an120 0
+H720
+V2436
+cc
+44o50m78m78aw71i28nw77a44nw77a44d50d50r33e44s39sw66h50a44sw66i28t28sw66l28e44f33tw55s39i28d50ew71d50e44f33a44u50l28tw55t28owf5
+770f1
+60,w52a44n50dw77i28t28sw66r33i28g50h50tw55s39i28d50ew71d50e44f33a44u50l28tw54t28owf5
+76$f1
+60,w51s39ow76t28h50ew70e44a44s39y50-33t28o50-33t28y50p50ew70a44d50d50r33e44s39sn120 0
+H720
+f5
+V2556
+c,
+wf1
+85r33e44f33e44r33sw64t28ow75t28h50ew69w72h50o50l28ew69f33i28l28e44:n120 0
+H720
+x font 0 CI
+f0
+V2736
+h360c,
+60x60/60E60m60a60c60s60/wh120c/
+60{60T60M60}60/60dn120 0
+H720
+V2856
+h360c,
+60pn120 0
+H720
+f5
+V2976
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V3096
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V3216
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V3336
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V3516
+cN
+72o50t28i28c44ew69w72h50a44tw53t28h50i28swf5
+64xwf1
+85d50o50e44s39:w53f33o50rw58e44a44c44hw75o50c44c44u50r33r33e44n50c44ew69o50fw58E61m78a44c44s39,w50f33i28n50dw75t28h50ewf5
+69{60T60M60}wf1
+85t28h50a44tw53f33o50l28l28o50w72s39,w50a44n50dw75d50e44l28e44t28ew69i28t28.n120 0
+H720
+V3672
+h250cT
+61h50ew79`33t28e44x50t28'wf5
+68s60a60mwf1
+95a44c44c44e44p50t28sw74f33o50rw68s39e44a44r33c44h50e44sw74i28nw85a44d50d50r33e44s39s39e44sw74a44n50dw85i28nwf5
+85xwf1
+95c44o50m78m78a44n50d50sw75i28sw75n50o50tw64s39i28m78p50l28ew80t28e44x50t28,w61b50u50tw64r33a44t28h50e44rn120 0
+H720
+f2
+V3792
+cr
+39e44g50u50l28a50r39 25e44x44p50r39e44s39s39i28o50n50s39.wf1
+90U72n50i28xw90h50a44sw79s39e44v50e44r33a44lw68d50i28s39t28i28n50c44tw68i28n50t28e44r33p50r33e44t28a44t28i28o50n50sw79o50fw73r33e44g50u50l28a44rw73e44x50p50r33e44s39s39i28o50n50s39.w90T61h50ew84f33o50r33mwh118cu
+50s39e44dw89b50yn120 0
+H720
+f5
+V3912
+cs
+60a60mwf1
+85i28sw64t28h50a44tw53o50fwf5
+58e60g60r60e60pf1
+60(33150)33,w50i28n50c44l28u50d50i28n50gw75p50a44r33e44n50t28h50e44s39e44swf5
+64(60)wf1
+85f33o50rw58g50r33o50u50p50i28n50gw75a44n50dw75a44nw75`33o50r33'w58o50p50e44r33a44t28o50rwf5
+58|wf1
+85f33o50rw58m78a44t28c44h50i28n50gw75s39t28r33i28n50g50sn120 0
+H720
+V4032
+ci
+28nw84p50a44r33a44l28l28e44l28.wf5
+84s60a60mwf1
+94m78a44k50e44sw73t28w72ow84e44x50t28e44n50s39i28o50n50s39:w62a44l28t28h50o50u50g50hwf5
+84.wf1
+94(33t28h50ew78m78o50s39tw62o50v50e44r33l28o50a44d50e44dw84c44h50a44r33a44c44t28e44rw67i28nw84U72n50i28x50)w67m78a44t28c44h50e44sw72a44n50yn120 0
+H720
+V4152
+cc
+44h50a44r33a44c44t28e44rwf2
+69e44x44c44e44p50twf1
+65n50e44w72l28i28n50e44,w62t28h50ew81r33e44g50u50l28a44rw70e44x50p50r33e44s39s39i28o50nwf5
+87@wf1
+97(33t28h50i28n50kw87o50fw70i28tw65a44sw76aw81b50i28gw87d50o50t28)w70m78a44t28c44h50e44sw76a44n50yw87c44h50a44r33a44c44t28e44r33,w62e44v50e44nn120 0
+H720
+V4272
+cn
+50e44w72l28i28n50e44s39;w62a44n50dw84t28h50ew78c44h50a44r33a44c44t28e44rw66s39e44q50u50e44n50c44ewf5
+77\60nwf1
+93m78a44t28c44h50e44sw72aw77n50e44w72l28i28n50ew77c44h50a44r33a44c44t28e44r33.w83R67e44p50l28a44c44e44m78e44n50tw61t28e44x50t28,w58s39u50c44hw83a44sw72u50s39e44dw83i28nn120 0
+H720
+V4392
+ct
+28h50ewf5
+69awf1
+85a44n50dwf5
+75cwf1
+85c44o50m78m78a44n50d50s39,w50i28sw64s39t28i28l28lw53p50l28a44i28nw75t28e44x50t28,w50b50u50tw53t28h50ew69s39e44q50u50e44n50c44ewf5
+69\60nwf1
+85r33e44p50r33e44s39e44n50t28sw64n50e44w72l28i28n50ew69i28nw75t28h50a44tw53c44o50n50t28e44x50t28,w50t28o50o50.n120 0
+H720
+V4548
+h250cH
+72e44r33ew77i28sw72a44nw83e44x50a44m78p50l28e44.w83S56a44yw83w72ew77w72a44n50t28e44dw83t28ow83d50o50u50b50l28ew77s39p50a44c44ew77t28h50ew77d50o50c44u50m78e44n50t28,w58t28h50a44tw62i28s39,w59t28u50r33nw84e44v50e44r33yw84n50e44w72l28i28n50ew78i28n50t28on120 0
+H720
+V4668
+ct
+28w72ow75n50e44w72l28i28n50e44s39.w75T61h50ew69f33o50l28l28o50w72i28n50gw75a44l28lw53d50ow75t28h50ew69j28o50b50:n120 0
+H720
+x font 0 CI
+f0
+V4848
+h360c,
+60x60/60\60n60/wh120ca
+60/60\60n60/n120 0
+H720
+V4968
+h360c,
+60x60/60\60n60/wh120cc
+60/60\60n60\60n60/n120 0
+H720
+V5088
+h360c,
+60x60/60$60/wh120ca
+60/60\60n60/n120 0
+H720
+V5208
+h360c,
+60x60/60^60/wh120ci
+60/60\60n60/n120 0
+H720
+f1
+V5388
+cT
+61h50ew70l28a44s39tw54e44x50a44m78p50l28ew70i28sw65s39l28i28g50h50t28l28yw76d50i28f33f33e44r33e44n50t28,w51b50e44c44a44u50s39ew70i28tw54p50u50t28sw65aw70n50e44w72l28i28n50ewf2
+70b50e44f28o50r39ewf1
+70e44a44c44hw76l28i28n50e44;w54t28h50ew70o50t28h50e44rw59e44x50a44m78p50l28e44sw65p50l28a44c44ew71i28tn120 0
+H720
+V5508
+ca
+44f33t28e44r33.w81T61h50ew75f33i28r33s39tw59t28w72ow81e44x50a44m78p50l28e44sw70m78a44n50i28p50u50l28a44t28ew75n50e44w72l28i28n50e44sw70d50i28r33e44c44t28l28yw81[33s39o50m78e44t28h50i28n50gw81o50u50t28s39i28d50ewf5
+75e60df1
+60'33sw70k50e44n50]33;w58t28h50ew74l28a44s39tw58t28w72ow80u50s39en120 0
+H720
+V5628
+cr
+33e44g50u50l28a44rw58e44x50p50r33e44s39s39i28o50n50s39:wf5
+53$wf1
+85i28sw64t28h50ew69e44m78p50t28yw75s39t28r33i28n50gw75a44tw53t28h50ew69e44n50dw75o50fw58aw69l28i28n50e44,w50w72h50i28l28ewf5
+69^wf1
+85i28sw64t28h50ew69e44m78p50t28yw75s39t28r33i28n50gw75a44tw53t28h50ew69b50e44g50i28n50n50i28n50g50.n120 0
+H720
+V5784
+h250cT
+61h50e44s39ew71s39o50l28u50t28i28o50n50sw66a44l28lw55h50a44v50ew71aw71p50o50s39s39i28b50l28ew71d50r33a44w72b50a44c44k50:w55i28fw60t28h50e44r33ew71i28sw66a44l28r33e44a44d50yw77aw71b50l28a44n50kw77l28i28n50ew72(33t28h50a44tw56i28s39,w53t28w72ow78c44o50n50s39e44c44u50t28i28v50en120 0
+H720
+V5904
+cn
+50e44w72l28i28n50e44s39)33,w53t28h50e44yw78m78a44k50ew72i28tw56m78u50c44hw78l28a44r33g50e44rw60(33f33o50u50rw60c44o50n50s39e44c44u50t28i28v50ew71n50e44w72l28i28n50e44s39)33.w77Aw99b50e44t28t28e44rw60m78e44t28h50o50dw77i28sw66t28ow77e44x50t28e44n50dw77e44v50e44r33yw77g50r33o50u50pn120 0
+H720
+V6024
+co
+50fw58n50e44w72l28i28n50e44sw64b50yw75o50n50e44:n120 0
+H720
+x font 0 CI
+f0
+V6204
+h360c,
+60x60/60\60n60+60/wh120ca
+60/60\60n60/n120 0
+H720
+f1
+V6384
+cT
+61h50ew78r33e44g50u50l28a44rw67e44x50p50r33e44s39s39i28o50nw84o50p50e44r33a44t28o50rwf5
+67+wf1
+95m78e44a44n50sw74`33o50n50ew79o50rw68m78o50r33e44;28'wf5
+68\60n60+wf1
+95i28sw74i28d50e44n50t28i28c44a44lw63t28owf5
+85\60n60\60n60*f1
+60.w85T61h50u50s39,w60t28h50i28sw74e44x50a44m78p50l28en120 0
+H720
+V6504
+ct
+28a44k50e44sw64e44v50e44r33yw75s39e44q50u50e44n50c44ew69o50fw58n50e44w72l28i28n50e44sw64a44n50dw75a44d50d50sw64a44n50o50t28h50e44rw58t28ow75t28h50ew69e44n50d50.n120 0
+H720
+V6660
+h250cA
+w97m78o50r33ew69c44o50m78m78o50nw75e44x50a44m78p50l28ew69i28sw64i28n50d50e44n50t28i28n50gw75aw69b50l28o50c44kw75o50fw58t28e44x50tw53b50yw75aw69t28a44bw75s39t28o50p50.w75T61h50ew70f33o50l28l28o50w72i28n50gw76a44l28lw54w72o50r33k50,w51a44l28t28h50o50u50g50hn120 0
+H720
+V6780
+ct
+28h50ew69f33i28r33s39tw53i28sw64a44r33g50u50a44b50l28yw75t28h50ew69c44l28e44a44n50e44s39tw53(33t28h50ew69b50l28a44n50kw75t28e44x50tw53i28nw75s39l28a44s39h50e44sw64i28sw64aw69t28a44b50)33:n120 0
+V7920
+p7
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 257w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360c,
+60x60/60^60/60a60/wwh200c/
+n120 0
+H720
+V1020
+h360c,
+60x60/60^60/60c60/wwh200c/
+n120 0
+H720
+V1140
+h360c,
+60x60/60.60*60\60n60/60i60/wwh270c/
+n120 0
+H720
+f1
+V1320
+cT
+61h50ew81l28a44s39tw65e44x50a44m78p50l28ew81u50s39e44sw76t28h50ew81p50a44t28t28e44r33nw87(33i28d50i28o50m78,w62r33e44a44l28l28y50)wf5
+70.60*60\60nwf1
+98t28ow88m78a44t28c44hw88l28i28n50e44s39:wf5
+66.60*wf1
+98m78a44t28c44h50e44sw77t28h50ew82l28o50n50g50e44s39tw66p50o50s39s39i28b50l28en120 0
+H720
+V1440
+cs
+39t28r33i28n50gw75o50fw58n50o50n50-33n50e44w72l28i28n50ew69c44h50a44r33a44c44t28e44r33s39.w75T61a44k50i28n50gw75i28n50i28t28i28a44lw53t28a44b50sw64a44w72a44yw75i28sw64j28u50s39tw53a44sw64e44a44s39y50:n120 0
+H720
+x font 0 CI
+f0
+V1620
+h360c,
+60x60/60^wh300c/
+60dn120 0
+H720
+f1
+V1800
+cI
+33nw75t28h50e44s39ew69e44x50a44m78p50l28e44sw64Iw58h50a44v50ew69s39p50e44c44i28f33i28e44dw75a44nw75a44d50d50r33e44s39sw64(33t28h50ew69w72h50o50l28ew69f33i28l28e44)33,w50b50u50tw53i28nw76p50r33a44c44t28i28c44ew70c44o50m78m78a44n50d50sw65l28i28k50ew70t28h50e44s39ew70a44r33ew70m78o50r33en120 0
+H720
+V1920
+cl
+28i28k50e44l28yw75t28ow75b50ew69r33u50nw75w72i28t28h50o50u50tw53a44nw75a44d50d50r33e44s39s39,w50u50s39i28n50gw75t28h50ew69v50a44l28u50ew69o50fw58d50o50tw53s39e44tw53b50yw75s39e44l28e44c44t28i28n50gw75t28e44x50tw53w72i28t28hw75t28h50ew69m78o50u50s39e44.n120 0
+H720
+f3
+V2160
+cC
+72o50n56d56i28t33i28o50n56a50l28sn120 0
+H720
+f1
+V2316
+h250cT
+61h50ewf5
+69xwf1
+85c44o50m78m78a44n50dw75i28sw64aw69l28o50o50p50i28n50gw75c44o50n50s39t28r33u50c44t28:w53f33o50rw58e44a44c44hw75m78a44t28c44hw76o50fw59aw70r33e44g50u50l28a44rw59e44x50p50r33e44s39s39i28o50n50,w51i28tw54e44x50t28r33a44c44t28sw65(33s39e44t28sw65d50o50tw54t28o50)n120 0
+H720
+V2436
+ct
+28h50ew71m78a44t28c44hw77a44n50dw77r33u50n50sw66aw71c44o50m78m78a44n50d50.wf5
+77s60a60mwf1
+87a44l28s39ow77h50a44sw66aw71c44o50n50d50i28t28i28o50n50a44l28,wf5
+52gf1
+60:wf5
+90g60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60c44o50m72m72a50n50dwf1
+76r33u50n50sw65t28h50ew70c44o50m78m78a44n50dw76i28fn120 0
+H720
+V2556
+cd
+50o50tw55c44o50n50t28a44i28n50sw66aw71m78a44t28c44hw77o50fw60t28h50ew71p50a44t28t28e44r33nwf2
+77w67i28t28h50o50u50tw55c44h50a50n50g50i28n50gw77t28h50ew71v44a50l28u50ew71o50fw55d50o50t28.wf1
+78T61h50ew72i28n50v50e44r33s39e44,wf5
+53vf1
+60,w53r33u50n50sw67t28h50ew72c44o50m78m78a44n50dw78i28fn120 0
+H720
+V2676
+cd
+50o50tw57d50o50e44swf2
+68n50o50twf1
+57c44o50n50t28a44i28nw79aw73m78a44t28c44hw79o50fw62t28h50ew73p50a44t28t28e44r33n50.w79(33T61h50ew73l28e44t28t28e44r33swf5
+68gwf1
+89a44n50dwf5
+79vwf1
+89a44r33ew72h50i28s39t28o50r33i28c44a44lw56a44n50dw78h50a44v50ew72n50ow78m78n50e44m78o50n50i28cw72s39i28gh50Chy
+n120 0
+H720
+V2796
+cn
+50i28f33i28c44a44n50c44e44.w75Y72o50uw75m78i28g50h50tw53t28h50i28n50kw75o50fwf5
+58gwf1
+85a44sw64`33g50u50a44r33d50.25'33)w83[f5
+33e60dwf1
+85u50s39e44r33sw64s39h50o50u50l28dw75r33e44a44dw75t28h50ew69a44b50o50v50ew69d50e44f33i28n50i28t28i28o50n50sw64v50e44r33yw75c44a44r33e44f33u50l28l28y50;w54t28h50en120 0
+H720
+f5
+V2916
+cg
+wf1
+h101cc
+44o50m78m78a44n50dw91i28nwf5
+91s60a60mwf1
+h101ci
+28sw80f33u50n50d50a44m78e44n50t28a44l28l28yw91d50i28f33f33e44r33e44n50tw69f33r33o50mwh119ct
+28h50a44tw69i28nwf5
+91e60df1
+60.25]w99H72e44r33ew85i28sw80a44nw91e44x50a44m78p50l28ew85o50fw74t28h50ew84d50i28f33f33e44r33e44n50c44en120 0
+H720
+V3036
+cb
+50e44t28w72e44e44nwf5
+75xwf1
+85a44n50dwf5
+75g60:n120 0
+H720
+V3216
+h360c,
+60x60/60E60m60a60c60s60/60c60/60v60i60/n120 0
+H720
+f1
+V3396
+cc
+44h50a44n50g50e44sw64e44a44c44hw75o50c44c44u50r33r33e44n50c44ew69o50fw58t28h50ew69w72o50r33dwf5
+75E60m60a60c60swf1
+85i28nw75t28h50ew69f33i28l28ew69t28ow75t28h50ew69w72o50r33dwf5
+75v60if1
+60,w50b50u50tn120 0
+H720
+f5
+V3576
+h360c,
+60g60/60E60m60a60c60s60/60c60/60v60i60/n120 0
+H720
+f1
+V3756
+cc
+44h50a44n50g50e44sw64t28h50ewf2
+69w67h50o50l28ew69f28i28l28ewf1
+69t28owf5
+75v60iwf1
+85i28fw58t28h50e44r33ew69i28sw64t28h50ew69w72o50r33dwf5
+75E60m60a60c60swf1
+85a44n50y50w72h50e44r33ew69i28nw75t28h50ew69f33i28l28e44.n120 0
+H720
+V3912
+h250cN
+72e44i28t28h50e44rw66o50fw66t28h50e44s39ew77c44o50m78m78a44n50d50sw73i28sw73p50a44r33t28i28c44u50l28a44r33l28yw84i28n50t28e44r33e44s39t28i28n50gw84i28nw84i28s39o50l28a44t28i28o50n50,w59b50u50tw62t28h50e44yw84a44r33ew78v50a44l28u50a44b50l28ew78w72h50e44nw84c44o50mh78Chy
+n120 0
+H720
+V4032
+cb
+50i28n50e44dw75w72i28t28hwf5
+75xwf1
+85a44n50dw75w72i28t28hw75t28h50e44m78s39e44l28v50e44s39.n120 0
+H720
+f3
+V4272
+cC
+72o50m83p56o50s39i28t33i28o50nn120 0
+H720
+f1
+V4428
+h250cO
+72n50ew75w72a44yw81t28ow81t28h50i28n50kw81a44b50o50u50tw59t28h50ewf5
+75xwf1
+91c44o50m78m78a44n50dw82i28sw71t28h50a44t28,w57g50i28v50e44nw82aw76s39e44l28e44c44t28i28o50nw82(33aw76v50a44l28u50ew76o50fw65d50o50t28)w65i28tw60i28t28e44r33a44t28e44sw71t28h50r33o50u50g50hn120 0
+H720
+V4548
+ci
+28n50t28e44r33e44s39t28i28n50gw90s39u50b50s39e44l28e44c44t28i28o50n50sw79(33v50a44l28u50e44sw79o50fw72d50o50tw67w72i28t28h50i28n50)33.w89I33nw89o50t28h50e44rw72w72o50r33d50s39,w64i28tw67t28a44k50e44sw78aw83p50i28e44c44ew83o50fw72t28e44x50tw67a44n50dw89c44u50t28sw78i28tw67i28n50t28on120 0
+H720
+V4668
+cs
+39m78a44l28l28e44rw59p50i28e44c44e44s39.w76B67u50tw54t28h50ew70t28e44x50tw54t28h50a44tw55i28tw55c44u50t28sw66u50pw77m78a44yw77a44l28r33e44a44d50yw77b50ew71aw71p50i28e44c44ew71c44u50tw55b50yw77aw71p50r33e44v50i28o50u50swf5
+66xwf1
+87c44o50m78m78a44n50dw77o50rw60s39e44l28e44c44t28e44dn120 0
+H720
+V4788
+cb
+50yw80awf5
+74gf1
+60.wf5
+80s60a60mf1
+60'33sw69m78o50s39tw58i28n50t28e44r33e44s39t28i28n50gw80p50r33o50p50e44r33t28yw80i28sw69t28h50ew73a44b50i28l28i28t28yw79t28ow79d50e44f33i28n50ew73aw73s39e44q50u50e44n50c44ew73o50fw62c44o50m78m78a44n50d50sw68t28ow79p50e44r33f33o50r33mwh107ca
+w73p50a44rh33Chy
+n120 0
+H720
+V4908
+ct
+28i28c44u50l28a44rw58t28a44s39k50.h25Cdg
+wh113cA
+w97s39i28m78p50l28ew69e44x50a44m78p50l28ew69i28sw64t28ow75c44h50a44n50g50ew69a44l28lw53o50c44c44u50r33r33e44n50c44e44sw64o50fwf5
+58E60m60a60c60swf1
+85t28owf5
+75e60m60a60c60sf1
+60;w53c44e44r33t28a44i28n50l28yw75t28h50ew69c44o50m78m78a44n50dn120 0
+H720
+x font 0 CI
+f0
+V5088
+h360c,
+60x60/60E60m60a60c60s60/wh120cc
+60/60e60m60a60c60s60/n120 0
+H720
+f1
+V5268
+cw
+72i28l28lw53w72o50r33k50,w50b50u50tw53w72ew69c44a44nw75u50s39ew69a44nwf5
+75xwf1
+85c44o50m78m78a44n50dw75t28ow75s39a44v50ew69r33e44t28y50p50i28n50gw75m78o50s39tw53o50fw58t28h50ew69w72o50r33dwf5
+75E60m60a60c60sf1
+60:n120 0
+H720
+x font 0 CI
+f0
+V5448
+h360c,
+60x60/60E60m60a60c60s60/wh120cx
+60/60E60/wh120cc
+60/60e60/n120 0
+H720
+f1
+V5628
+c(
+33B67l28a44n50k50sw75c44a44nw86b50ew80u50s39e44dw86t28ow86s39e44p50a44r33a44t28ew80c44o50m78m78a44n50d50sw75o50nw86aw80l28i28n50ew80t28ow86m78a44k50ew80t28h50e44mwh114ce
+44a44s39i28e44rw69t28ow86r33e44a44d50.25)w94W94h50a44tw65t28h50i28sw76c44o50m78m78a44n50dn120 0
+H720
+V5748
+cd
+50o50e44sw65i28sw65f33i28n50dw76a44l28lw53o50c44c44u50r33r33e44n50c44e44sw64o50fwf5
+58E60m60a60c60swf1
+85(f5
+33,60x60/60E60m60a60c60s60/f1
+60)33,w50a44n50dw75t28h50e44nwf2
+75w67i28t28hw75d50o50tw53s39e44tw53t28ow75t28h50a50tw53t28e44x44t28,wf1
+50f33i28n50dw75a44l28lw53o50c44c44u50r33r33e44n50c44e44sn120 0
+H720
+V5868
+co
+50fw60t28h50ew71l28e44t28t28e44rwf5
+60Ewf1
+87(f5
+33x60/60E60/f1
+60)33,w52a44n50dw77t28h50e44nwf2
+77w67i28t28hw77d50o50tw55s39e44tw55t28ow77t28h50a50tw55t28e44x44t28,wf1
+52r33u50nw78t28h50ew72c44o50m78m78a44n50dwf5
+78c60/60e60/wf1
+88t28ow78c44h50a44n50g50ew72t28h50ew72c44h50a44r33a44c44t28e44rw61t28on120 0
+H720
+V5988
+cl
+28o50w72e44rw71c44a44s39e44.w88N72o50t28ew82t28h50a44tw66t28h50ew82a44d50d50r33e44s39sw76f33o50rw70t28h50ew81c44o50m78m78a44n50dwh87Cem
+wh137ct
+28h50ew81w72h50o50l28ew81f33i28l28e44,w62s39p50e44c44i28f33i28e44dw87b50yw87aw81c44o50m78m78awh81Cem
+wh137ci
+28sw76o50n50l28yn120 0
+H720
+V6108
+cg
+50i28v50e44nw77t28ow77t28h50ew71l28e44f33t28m78o50s39tw55p50i28e44c44ew71o50fw60t28h50ew71c44o50m78m78a44n50d50;w55t28h50ew71r33e44s39tw55o50fw60t28h50ew72p50i28e44c44e44sw67h50a44v50ew72d50o50tw56s39e44tw56f33o50rw61t28h50e44mwh106cb
+50yw78t28h50ew72e44x50e44c44u50t28i28o50nw78o50fn120 0
+H720
+V6228
+ct
+28h50ew69p50i28e44c44e44sw64t28ow75t28h50e44i28rw58l28e44f33t28.n120 0
+H720
+V6384
+h250cA
+72sw67a44n50o50t28h50e44rw61s39i28m78p50l28ew72e44x50a44m78p50l28e44,w53c44o50n50s39i28d50e44rw61aw72p50r33o50b50l28e44mwh106cs
+39o50l28v50e44dw78a44b50o50v50e44:w57p50r33i28n50t28i28n50gw79a44l28lw57l28i28n50e44sw68i28nw79t28h50ew73f33i28l28ew73c44o50n50t28a44i28n50i28n50gn120 0
+H720
+V6504
+ct
+28h50ew69w72o50r33dwf5
+75E60m60a60c60s60:n120 0
+H720
+f1
+s8
+V6880
+Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+n100 0
+H720
+V6980
+Cdg
+w70T49h40ew55o40b40v40i22o40u40sw51a35n40a35l22o40g40yw60w58i22t22hw60s31h40e35l22lw42p40i22p40e35l22i22n40e35sw51i22sw51o40n40l22yw60p40a35r26t22i22a35l22l22yw60v40a35l22i22d40,w40b40e35c35a35u40s31ew55t22h40ew55i22n40d40i22v40i22d40u40a35lwf5
+42s48a48mwf1
+68c35o40m62m62a35n40d40sw51a35r26ew56a35l22lw43w58o40r26k40i22n40gw61o40nn100 0
+H720
+V7080
+ct
+22h40ew55s31a35m62ew55t22e35x40t22;w42i22tw42i22sw51o40n40l22yw60h40o40ww78t22h40ew55t22e35x40tw42i22sw51s31l22i22c35e35dw60u40pw60t22h40a35tw42i22sw51c35h40a35n40g40i22n40g40.n100 0
+V7920
+p8
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 258w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360c,
+60x60/60.60*60\60n60/wh120cg
+60/60E60m60a60c60s60/60pn120 0
+H720
+f5
+V1020
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V1140
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V1320
+cT
+61h50i28sw79c44o50m78m78a44n50dw90s39a44y50sw79t28ow90b50r33e44a44kw90t28h50ew84f33i28l28ew84i28n50t28ow90l28i28n50e44sw79(f5
+33,60x60/60.60*60\60n60/f1
+60)33,w65a44n50dw90f33o50rw73e44a44c44hw90l28i28n50ew84t28h50a44tw68c44o50n50t28a44i28n50sw79t28h50ew85s39t28r33i28n50gn120 0
+H720
+f5
+V1440
+cE
+60m60a60c60swf1
+90(f5
+33g60/60E60m60a60c60s60/f1
+60)33,w55r33u50nw80t28h50ew74c44o50m78m78a44n50dwf5
+80pwf1
+90w72i28t28hw80d50o50tw58s39e44tw58t28ow80t28h50ew74l28i28n50ew73(33n50o50tw57t28h50ew73m78a44t28c44hw79o50fwf5
+62E60m60a60c60sf1
+60)33,w54w72h50i28c44hw79p50r33i28n50t28sn120 0
+H720
+V1560
+ct
+28h50ew72l28i28n50e44.w78T61ow78s39a44v50ew72t28y50p50i28n50g50,w53b50e44c44a44u50s39ewf5
+72.60*60\60nwf1
+88i28sw67aw72c44o50m78m78o50nw78p50a44t28t28e44r33nw78i28nwf5
+78xwf1
+88c44o50m78m78a44n50d50s39,w53i28fw61t28h50ewf5
+73xwf1
+89i28sw68f33o50l28l28o50w72e44dw79i28m78m78e44d50ih28Chy
+n120 0
+H720
+V1680
+ca
+44t28e44l28yw75b50yw75aw69s39p50a44c44e44,w50t28h50ew69p50a44t28t28e44r33nwf5
+75.60*60\60nwf1
+85i28sw64a44s39s39u50m78e44d50.w75T61h50e44r33e44f33o50r33e44,w50t28h50ew69a44b50o50v50ew69c44o50u50l28dw75b50ew69w72r33i28t28t28e44nw75m78o50r33ew69s39u50c44c44i28n50c44t28l28y50:n120 0
+H720
+x font 0 CI
+f0
+V1860
+h360c,
+60xwh120cg
+60/60E60m60a60c60s60/60pn120 0
+H720
+f1
+V2040
+cT
+61h50ew69s39o50l28u50t28i28o50nw75w72ew69u50s39e44dw75b50e44f33o50r33ew69w72a44sn120 0
+H720
+x font 0 CI
+f0
+V2220
+h360c,
+60x60/60E60m60a60c60s60/60+60-60pn120 0
+H720
+f1
+V2400
+cw
+72h50i28c44hw81r33u50n50sw70t28h50ew75c44o50m78m78a44n50dwf5
+81+60-60pwf1
+91w72i28t28hw81d50o50tw59s39e44tw59t28ow81e44a44c44hw82m78a44t28c44hw82o50fwf5
+65E60m60a60c60swf1
+92i28nw82t28h50ew76f33i28l28ew76(33r33e44c44a44l28lw60t28h50a44tw60t28h50ew76i28d50i28o50mwf5
+h110c+
+60-60pn120 0
+H720
+f1
+V2520
+cp
+50r33i28n50t28sw64t28h50ew69l28i28n50ew69c44o50n50t28a44i28n50i28n50gw75t28h50ew69e44n50dw75o50fw58d50o50t28)33.n120 0
+H720
+V2676
+h250cT
+61h50ew77t28w72ow83c44o50m78m78a44n50d50sw72u50s39u50a44l28l28yw83p50r33o50d50u50c44ew77t28h50ew77s39a44m78ew77r33e44s39u50l28tw61(33t28h50ewf5
+77+60-60pwf1
+93f33o50r33mwh111cw
+72i28l28lw61p50r33i28n50tw61aw77l28i28n50ew77t28w72i28c44ew77i28fw66i28tw62c44o50nh50Chy
+n120 0
+H720
+V2796
+ct
+28a44i28n50swf5
+66E60m60a60c60swf1
+87t28w72i28c44e44)33.w77W94h50i28c44hw77i28sw66b50e44t28t28e44r33?wf5
+96,60x60/60E60m60a60c60s60/60+60-60pwf1
+87i28sw66e44a44s39i28e44rw60t28ow77t28y50p50ew71a44n50dw77w72i28l28lw55b50ew70m78u50c44hw76f33a44s39t28e44rw59i28fw59t28h50ew70f33i28l28en120 0
+H720
+V2916
+ci
+28sw83l28a44r33g50ew88a44n50dw95t28h50e44r33ew89a44r33ew89f33e44wwh117co
+50c44c44u50r33r33e44n50c44e44sw84o50fw78t28h50ew89s39t28r33i28n50g50,w70b50u50tw73i28tw73i28sw84r33e44a44l28l28yw95a44nw95o50d50dw95s39p50e44c44i28a44lw73c44a44s39e44.wf5
+95,60x60/60.60*60\60n60/n120 0
+H720
+V3036
+cg
+60/60E60m60a60c60s60/60pwf1
+88i28sw67s39l28o50w72e44rwh61Cem
+wh128ci
+28tw56b50r33e44a44k50sw67e44a44c44hw78l28i28n50ew72o50u50tw56s39e44p50a44r33a44t28e44l28y50,w53t28h50e44nw77e44x50a44m78i28n50e44sw66i28tw55f33o50rw60aw71m78a44t28c44hwh77Cem
+wh127cb
+50u50tw55i28sw66c44o50n50c44e44ph50Chy
+n120 0
+H720
+V3156
+ct
+28u50a44l28l28yw80c44l28e44a44n50e44r33,w55a44n50dw81g50e44n50e44r33a44l28i28z44e44sw70m78o50r33ew75e44a44s39i28l28y50.w81F56o50rw64e44x50a44m78p50l28e44,w56c44o50n50s39i28d50e44rw64t28h50ew75f33o50l28l28o50w72i28n50gw81p50i28e44c44ew75o50fw64t28h50ew75E61m78a44c44sw70m78a44nh50Chy
+n120 0
+H720
+V3276
+cu
+50a44l28:n120 0
+H720
+f5
+V3456
+h360cc
+60o60m60m60a60n60dwh120cn
+60a60m60e60=60"60a60p60p60e60n60d60-60t60o60-60f60i60l60e60"60,wh120ck
+60e60y60=60"60[60u60n60b60o60u60n60d60]60"n120 0
+H720
+V3576
+h360cT
+60a60k60e60swh120ct
+60h60ewh120cc
+60o60n60t60e60n60t60swh120co
+60fwh120ct
+60h60ewh120cc
+60u60r60r60e60n60twh120cb
+60u60f60f60e60rwh120ca
+60n60dwh120ca
+60p60p60e60n60d60swh120ci
+60twh120ct
+60owh120ct
+60h60en120 0
+H720
+V3696
+h360cn
+60a60m60e60dwh120cf
+60i60l60e60.wh120cI
+60fwh120ct
+60h60ewh120cf
+60i60l60e60swh120cd
+60o60e60s60n60'60twh120ce
+60x60i60s60t60,wh120ci
+60twh120cw
+60i60l60lwh120cb
+60ewh120cc
+60r60e60a60t60e60d60.n120 0
+H720
+V3936
+h360cc
+60o60m60m60a60n60dwh120cn
+60a60m60e60=60"60a60p60r60o60p60o60s60"60,wh120ck
+60e60y60=60"60E60S60C60-60?60"n120 0
+H720
+V4056
+h360cP
+60r60o60m60p60t60swh120cf
+60o60rwh120ca
+wh120ck
+60e60y60w60o60r60dwh120ca
+60n60dwh120ct
+60h60e60nwh120cp
+60r60i60n60t60swh120ca
+wh120cl
+60i60s60twh120co
+60fwh120ct
+60h60o60s60ewh120cc
+60o60m60m60a60n60d60sn120 0
+H720
+V4176
+h360cw
+60h60o60s60ewh120cs
+60h60o60r60twh120cd
+60e60s60c60r60i60p60t60i60o60nwh120cc
+60o60n60t60a60i60n60swh120ct
+60h60a60twh120ck
+60e60y60w60o60r60d60.wh180cF
+60o60rwh120ce
+60x60a60m60p60l60e60,n120 0
+H720
+V4296
+h360ci
+60fwh120cy
+60o60uwh120cf
+60o60r60g60e60twh120cw
+60h60i60c60hwh120cc
+60o60m60m60a60n60d60swh120cd
+60e60a60lwh120cw
+60i60t60hwh120cw
+60i60n60d60o60w60s60,wh120cj
+60u60s60twh120ct
+60y60p60en120 0
+H720
+V4416
+h360c"
+60@60b60[60E60S60C60-60?60]60@60t60[60w60i60n60d60o60w60]60@60b60[60E60S60C60]60"60.n120 0
+H720
+f2
+V4656
+h360ca
+50n50dw75s39ow75o50nn120 0
+H720
+f1
+V4836
+cT
+61h50i28sw66t28e44x50tw55c44o50n50s39i28s39t28sw66o50fw60g50r33o50u50p50sw66o50fw60n50o50n50-33e44m78p50t28yw77l28i28n50e44s39,w52w72i28t28hw77aw71s39i28m78p50l28ew71f33o50r33m78a44tw55f33o50rw60t28h50ew71t28e44x50tw55w72i28t28h50i28nw77e44a44c44hw78g50r33o50u50p50.w78I33m78a44gh50Chy
+n120 0
+H720
+V4956
+ci
+28n50ew73t28h50a44tw57w72ew73w72a44n50t28e44dw79t28ow79f33i28n50dw79t28h50ew73d50e44s39c44r33i28p50t28i28o50nw79o50fw62t28h50ew73`33a44p50r33o50p50o50s39'w62c44o50m78m78a44n50d50.w78T61h50ew72p50r33o50b50l28e44mwh106ci
+28sw67t28ow78b50r33e44a44kw78t28h50ew72f33i28l28ew72i28n50t28on120 0
+H720
+V5076
+ci
+28n50d50i28v50i28d50u50a44lw53d50e44s39c44r33i28p50t28i28o50n50s39,w50a44n50dw75t28h50e44nw75t28ow75f33i28n50dw75t28h50ew69d50e44s39c44r33i28p50t28i28o50nw75o50fw58`33a44p50r33o50p50o50s39'w58a44n50dw75t28ow75p50r33i28n50tw53i28t28.w75T61h50ew69s39o50l28u50t28i28o50nw75i28sw64s39t28r33a44i28g50h50th28Chy
+n120 0
+H720
+V5196
+cf
+33o50r33w72a44r33d50:n120 0
+H720
+x font 0 CI
+f0
+V5376
+h360c,
+60x60/60(60.60+60\60n60)60+60/wh120cg
+60/60c60o60m60m60a60n60dwh120cn
+60a60m60e60=60"60a60p60r60o60p60o60s60"60/60pn120 0
+H720
+f5
+V5496
+h360cc
+60o60m60m60a60n60dwh120cn
+60a60m60e60=60"60a60p60r60o60p60o60s60"60,wh120ck
+60e60y60=60"60E60S60C60-60?60"n120 0
+H720
+V5616
+h360cP
+60r60o60m60p60t60swh120cf
+60o60rwh120ca
+wh120ck
+60e60y60w60o60r60dwh120ca
+60n60dwh120ct
+60h60e60nwh120cp
+60r60i60n60t60swh120ca
+wh120cl
+60i60s60twh120co
+60fwh120ct
+60h60o60s60ewh120cc
+60o60m60m60a60n60d60sn120 0
+H720
+V5736
+h360cw
+60h60o60s60ewh120cs
+60h60o60r60twh120cd
+60e60s60c60r60i60p60t60i60o60nwh120cc
+60o60n60t60a60i60n60swh120ct
+60h60a60twh120ck
+60e60y60w60o60r60d60.wh180cF
+60o60rwh120ce
+60x60a60m60p60l60e60,n120 0
+H720
+V5856
+h360ci
+60fwh120cy
+60o60uwh120cf
+60o60r60g60e60twh120cw
+60h60i60c60hwh120cc
+60o60m60m60a60n60d60swh120cd
+60e60a60lwh120cw
+60i60t60hwh120cw
+60i60n60d60o60w60s60,wh120cj
+60u60s60twh120ct
+60y60p60en120 0
+H720
+V5976
+h360c"
+60@60b60[60E60S60C60-60?60]60@60t60[60w60i60n60d60o60w60]60@60b60[60E60S60C60]60"60.n120 0
+H720
+f1
+V6156
+cT
+61h50ew73r33e44g50u50l28a44rw62e44x50p50r33e44s39s39i28o50nwf5
+79(60.60+60\60n60)60+wf1
+89m78a44t28c44h50e44sw68o50n50ew73o50rw63m78o50r33ew74l28i28n50e44sw69w72i28t28hw80o50n50ew74o50rw63m78o50r33ew74c44h50a44r33a44c44t28e44r33sw69e44a44c44h50,w55t28h50a44tw58i28s39,w55t28h50en120 0
+H720
+V6276
+ct
+28e44x50twh197cb
+50e44t28w72e44e44nwh219cb
+50l28a44n50kwh219cl
+28i28n50e44s39,wh194cs
+39owf5
+h219c,
+60x60/60(60.60+60\60n60)60+60/wf1
+h228ce
+44x50t28r33a44c44t28swh207ce
+44a44c44hwh218cd
+50e44s39c44r33i28p50t28i28o50n50;wh196ct
+28h50e44nn120 0
+H720
+f5
+V6396
+cg
+60/60c60o60m60m60a60n60d60 60n60a60m60e60=60"60a60p60r60o60p60o60s60"60/wf1
+85s39e44l28e44c44t28sw64t28h50ew69d50e44s39c44r33i28p50t28i28o50nw75f33o50rw58`33a44p50r33o50p50o50s39'w58a44n50dwf5
+75pwf1
+85p50r33i28n50t28sw64i28t28.n120 0
+H720
+V6552
+h250cI
+33m78a44g50i28n50ew70t28h50a44tw54w72ew70h50a44dw76aw70Cw93p50r33o50g50r33a44mwh104cc
+44o50n50t28a44i28n50i28n50gw76t28h50ew70v50a44r33i28a44b50l28ewf5
+70nf1
+60,w51b50u50tw54w72ew70w72a44n50t28e44dw77t28ow77c44h50a44n50g50ew71i28tw55t28owf5
+77n60u60mf1
+60.w77T61h50i28sn120 0
+H720
+V6672
+cc
+44o50m78m78a44n50dw75i28sw64aw69f33i28r33s39tw53c44u50t28:n120 0
+H720
+x font 0 CI
+f0
+V6852
+h360c,
+60x60/60n60/wh120cc
+60/60n60u60m60/n120 0
+H720
+f1
+V7032
+cb
+50u50tw54i28sw65o50b50v50i28o50u50s39l28yw76f33l28a44w72e44d50:w54i28tw54w72i28l28lw54c44h50a44n50g50ew70a44l28lwf5
+54nf1
+60'33sw65i28nw76t28h50ew70f33i28l28e44,w51n50o50tw54j28u50s39tw54t28h50ewf2
+70i28d50e44n50t28i28f28i28e44rwf5
+65nf1
+60.w76Aw98b50e44t28t28e44rw59s39o50l28u50t28i28o50nw77i28sw66t28ow77u50s39en120 0
+H720
+V7152
+ca
+44nwf5
+75xwf1
+85c44o50m78m78a44n50dw75t28ow75e44x50t28r33a44c44tw53t28h50ew69i28d50e44n50t28i28f33i28e44r33s39,w50a44n50dw75t28h50e44nw75u50s39ewf5
+69gwf1
+85t28ow75f33i28n50dw75t28h50ewf5
+69nf1
+60'33s39:n120 0
+V7920
+p9
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2077Chy
+w33 259w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360c,
+60x60/60[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*60/wh120cg
+60/60n60/wh120cv
+60/60.60.60/wh120cc
+60/60n60u60m60/n120 0
+H720
+f1
+V1080
+cI
+33tw59l28o50o50k50sw70a44w72f33u50l28,w56b50u50tw59i28t28'33sw70f33a44i28r33l28yw81e44a44s39yw81t28ow81u50n50d50e44r33s39t28a44n50dw81w72h50e44nw81r33e44a44dw81l28e44f33tw60t28ow82r33i28g50h50t28.w82Awh104cC
+w99i28d50e44n50t28i28f33i28e44rw65i28sw71a44nw82a44l28p50h50a44b50e44t28i28cw76o50rn120 0
+H720
+V1200
+cu
+50n50d50e44r33s39c44o50r33ew75f33o50l28l28o50w72e44dw81b50yw81z44e44r33ow81o50rw63m78o50r33ew74a44l28p50h50a44n50u50m78e44r33i28c44sw69o50rw63u50n50d50e44r33s39c44o50r33e44s39,w55t28h50a44tw58i28s39,w55m78a44t28c44h50e44sw69o50fw63t28h50ew74r33e44g50u50l28a44rw63e44x50p50r33e44sh39Chy
+n120 0
+H720
+V1320
+cs
+39i28o50nwf5
+80[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*f1
+60.w80T61h50ewf5
+74gwf1
+90c44o50m78m78a44n50dw80s39e44l28e44c44t28sw69t28h50o50s39ew74i28d50e44n50t28i28f33i28e44r33sw69c44o50n50t28a44i28n50i28n50gwf5
+80nf1
+60,w55a44n50dw80t28h50ewf5
+75vwf1
+91i28sn120 0
+H720
+V1440
+ca
+w76t28r33i28c44k50:w60i28tw60r33e44j28e44c44t28sw71t28h50o50s39ew76i28d50e44n50t28i28f33i28e44r33sw70c44o50n50t28a44i28n50i28n50gw81m78o50r33ew75t28h50a44nw81o50n50ew75c44h50a44r33a44c44t28e44r33.w81H72e44n50c44ew75t28h50ewf5
+75c60/60n60u60m60/wf1
+91a44p50p50l28i28e44sw70o50n50l28yw81t28on120 0
+H720
+V1560
+cf
+33r33e44e44-33s39t28a44n50d50i28n50gwf5
+75nf1
+60'33s39.n120 0
+H720
+V1716
+h250cT
+61h50e44r33ew73i28sw68s39t28i28l28lw57aw73p50r33o50b50l28e44mwh107ch
+50e44r33e44:w57w72ew73d50o50n50'33tw57w72a44n50tw57t28ow79c44h50a44n50g50ewf5
+73nf1
+60'33sw68t28h50a44tw58a44r33ew74p50a44r33tw58o50fw63t28h50ew74c44h50a44r33a44c44t28e44rw63c44o50n50s39t28a44n50twf5
+58\60nf1
+60.n120 0
+H720
+V1836
+cT
+61h50e44r33ew70i28sw65aw70c44o50m78m78a44n50dwf5
+76yf1
+60,w51c44o50m78p50l28e44m78e44n50t28a44r33yw76t28owf5
+76xf1
+60,w51t28h50a44tw54i28sw65j28u50s39tw53w72h50a44tw53w72ew69n50e44e44d50:wf5
+88y60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60c44o50m72m72a50n50dwf1
+75r33u50n50sw64t28h50ew69c44o50mh78Chy
+n120 0
+H720
+V1956
+cm
+78a44n50dw83o50nw83t28h50ew78p50i28e44c44e44sw73o50fw67t28e44x50twf2
+62b50e44t28w67e44e44nwf1
+84m78a44t28c44h50e44sw73o50fw67t28h50ew78p50a44t28t28e44r33n50;w62i28fwf5
+67xwf1
+94s39e44l28e44c44t28s39,wf5
+59ywf1
+94r33e44j28e44c44t28s39.w84H72e44r33ew78i28sw73t28h50ew78f33i28n50a44lw62c44o50mh78Chy
+n120 0
+H720
+V2076
+cm
+78a44n50d50:n120 0
+H720
+x font 0 CI
+f0
+V2256
+h360c,
+60y60/60\60\60n60/wh120cx
+60/60[60a60-60z60A60-60Z60_60]60[60a60-60z60A60-60Z60_60060-60960]60*60/wh120cg
+60/60n60/wh120cv
+60/60.60.60/wh120cc
+60/60n60u60m60/n120 0
+H720
+f1
+V2436
+cT
+61h50ewf5
+78y60/60\60\60n60/wf1
+94(33w72i28t28hw85b50a44c44k50s39l28a44s39hw85d50o50u50b50l28e44dw85t28ow85m78a44k50ew79i28tw63aw79l28i28t28e44r33a44lw63c44h50a44r33a44c44t28e44r33)w68r33e44m78o50v50e44sw74t28h50ew79t28w72o50-33c44h50a44r33a44c44t28e44rw68s39e44q50u50e44n50c44en120 0
+H720
+f5
+V2556
+c\
+60nwf1
+91f33r33o50mwh109cc
+44o50n50s39i28d50e44r33a44t28i28o50n50,w56s39ow81t28h50ew75r33e44s39tw59o50fw64t28h50ew75c44o50m78m78a44n50dw81w72i28l28lw59n50o50tw59t28o50u50c44hw81i28t28.w81T61h50e44r33ew75i28sw70m78o50r33ew75w72ew75c44o50u50l28dw81d50ow81h50e44r33e44;w59f33o50rn120 0
+H720
+V2676
+ce
+44x50a44m78p50l28e44,w55a44n50o50t28h50e44rwf5
+63ywf1
+90c44o50u50l28dw80b50ew74p50r33e44f33i28x50e44dw80t28ow80p50r33o50t28e44c44tw58c44o50m78m78e44n50t28sw69i28nw80t28h50ew74c44o50d50e44.w80Iw63w72o50n50'33tw58e44l28a44b50o50r33a44t28ew74t28h50ew74e44x50a44m78p50l28ew75a44n50yn120 0
+H720
+V2796
+cf
+33u50r33t28h50e44r33,w60b50u50tw63y50o50uw85s39h50o50u50l28dw85h50a44v50ew79a44nw85i28d50e44aw79o50fw68t28h50ew79w72a44yw85i28nw85w72h50i28c44hw85t28h50ew79l28o50o50p50i28n50gw84a44n50dw84c44o50n50d50i28t28i28o50n50a44lw62c44o50m78m78a44n50d50sw73i28nwf5
+84s60a60mn120 0
+H720
+f1
+V2916
+cm
+78a44yw75b50ew69c44o50m78p50o50s39e44dw75t28ow75d50ow75i28n50t28e44r33e44s39t28i28n50gw75t28h50i28n50g50s39.n120 0
+H720
+f3
+V3156
+cG
+78r44o50u56p56i28n56gn120 0
+H720
+f1
+V3312
+h250cT
+61h50e44r33ew82i28sw77a44n50o50t28h50e44rw72w72a44yw89t28ow89a44r33r33a44n50g50ew83c44o50m78m78a44n50d50s39.w89B67yw89e44n50c44l28o50s39i28n50gw89t28h50e44mwh117ci
+28nw89b50r33a44c44ew83b50r33a44c44k50e44t28swf5
+78{60}f1
+60,w64c44o50m78m78a44n50d50sn120 0
+H720
+V3432
+cm
+78a44yw82b50ew76a44p50p50l28i28e44dw82i28nw82p50a44r33a44l28l28e44l28.w82T61h50i28sw70e44x50a44m78p50l28ew75u50s39e44sw70t28h50ewf5
+75=wf1
+91c44o50m78m78a44n50d50,w56w72h50i28c44hw81r33e44p50o50r33t28sw70t28h50ew75l28i28n50ew75a44n50dw81c44h50a44r33a44c44t28e44rw64n50u50mh78Chy
+n120 0
+H720
+V3552
+cb
+50e44r33sw64o50fw58d50o50t28,w50t28o50g50e44t28h50e44rw58w72i28t28hwf5
+75pf1
+60,w50t28ow75r33e44p50o50r33tw53o50nw75a44p50p50e44a44r33a44n50c44e44sw64o50fwf5
+58E60m60a60c60swf1
+85i28nw75o50u50rw58o50r33i28g50i28n50a44lw53f33i28l28e44:n120 0
+H720
+x font 0 CI
+f0
+V3732
+h360c,
+60pn120 0
+H720
+f5
+V3852
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+V3972
+h360cs
+60e60v60e60r60a60lwh120cs
+60e60c60t60i60o60n60swh120cw
+60e60r60ewh120cw
+60r60i60t60t60e60nwh120ch
+60a60s60t60i60l60ywh120ci
+60nwh120ca
+60nwh120ca
+60t60t60e60m60p60twh120ct
+60owh120cp
+60r60o60v60i60d60ewh120ca
+n120 0
+H720
+V4092
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V4212
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+x font 0 CI
+f0
+V4332
+h360c,
+60x60/60E60m60a60c60s60/60{n120 0
+H720
+V4452
+h610c=
+n120 0
+H720
+V4572
+h610c+
+60-60pn120 0
+H720
+V4692
+h360c}
+n120 0
+H720
+f5
+V4812
+h360c3
+60;wh120c#
+60160760160,60#601607606n120 0
+H720
+V4932
+h360cg
+60e60n60e60r60a60lwh120ci
+60n60t60r60o60d60u60c60t60i60o60nwh120ct
+60owh120ct
+60h60ewh120cc
+60o60m60m60a60n60d60swh120ci
+60nwh120cE
+60m60a60c60swh120ca
+60n60dwh120ct
+60owh120ct
+60r60ywh120ct
+60owh120cs
+60h60o60wn120 0
+H720
+V5052
+h360c4
+60;wh120c#
+60260360460,60#602603609n120 0
+H720
+V5172
+h360ct
+60h60ewh120cm
+60e60t60h60o60dwh120ci
+60nwh120ct
+60h60ewh120cm
+60a60d60n60e60s60swh120ct
+60h60a60twh120ci
+60swh120ct
+60h60ewh120cE
+60m60a60c60swh120cc
+60o60m60m60a60n60dwh120cs
+60t60r60u60c60t60u60r60e60.n120 0
+H720
+f1
+V5352
+c(
+33T61h50ew79n50u50m78b50e44rw68b50e44f33o50r33ew79t28h50ew79s39e44m78i28c44o50l28o50nw85i28sw74t28h50ew79l28i28n50ew79n50u50m78b50e44r33;w64t28h50ew80n50u50m78b50e44r33sw75b50e44g50i28n50n50i28n50gw86w72i28t28hwf5
+86#wf1
+96a44r33ew80c44h50a44r33a44c44t28e44rw69n50u50mh78Chy
+n120 0
+H720
+V5472
+cb
+50e44r33s39.25)w91A72sw72aw77m78o50r33ew77i28n50t28e44r33e44s39t28i28n50gw83e44x50a44m78p50l28e44,w58c44o50n50s39i28d50e44rw66c44h50a44n50g50i28n50gw83a44l28lw61o50c44c44u50r33r33e44n50c44e44sw71o50fwf5
+65E60m60a60c60swf1
+92t28owf5
+82v60iwf1
+92a44n50dw82v50i28c44ew76v50e44r33s39a44.n120 0
+H720
+V5592
+cW
+94ew69c44a44nw75t28y50p50en120 0
+H720
+x font 0 CI
+f0
+V5772
+h360c,
+60x60/60E60m60a60c60s60|60v60i60/60{n120 0
+H720
+V5892
+h610cg
+60/60E60m60a60c60s60/wh120cc
+60/60v60i60/n120 0
+H720
+V6012
+h610cg
+60/60v60i60/wh120cc
+60/60E60m60a60c60s60/n120 0
+H720
+V6132
+h360c}
+n120 0
+H720
+f1
+V6312
+co
+50rw58e44v50e44nn120 0
+H720
+x font 0 CI
+f0
+V6492
+h360c,
+60x60/60[60a60-60z60A60-60Z60]60+60/60{n120 0
+H720
+V6612
+h610cg
+60/60E60m60a60c60s60/wh120cv
+60/60.60.60.60.60.60.60/wh120cc
+60/60v60i60/n120 0
+H720
+V6732
+h610cg
+60/60v60i60/wh120cv
+60/60.60.60.60/wh120cc
+60/60E60m60a60c60s60/n120 0
+H720
+V6852
+h360c}
+n120 0
+H720
+f1
+V7032
+ct
+28ow75m78a44k50ew69s39u50r33ew69w72ew69d50o50n50'33tw53c44h50a44n50g50ew69s39t28r33i28n50g50sw64e44m78b50e44d50d50e44dw75i28nw75w72o50r33d50s39.n120 0
+V7920
+p10
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 251500w50 h25Chy
+wn120 0
+H720
+f3
+V840
+cM
+94u56l28t33i28p56l28ew69C72h56a50n56g50e44sn120 0
+H720
+f1
+V996
+h250cY
+72o50uw89m78i28g50h50tw67w72o50n50d50e44rw72w72h50y50,w64o50n50c44ewf5
+83E60m60a60c60swf1
+99h50a44sw78b50e44e44nw89c44h50a44n50g50e44dw89t28owf5
+89v60iwf1
+99i28nw90t28h50ew84a44b50o50v50ew84e44x50a44m78p50l28e44,w65t28h50ew84s39e44c44o50n50dn120 0
+H720
+V1116
+cc
+44o50m78m78a44n50dw89i28nw89t28h50ew83b50r33a44c44e44sw78d50o50e44s39n50'33tw67p50u50tw67i28tw67b50a44c44kw89a44g50a44i28n50.w89T61h50ew83r33e44a44s39o50nw88i28sw77t28h50a44tw66t28h50ew82c44o50m78m78a44n50d50sw77a44r33ew82r33u50nw88i28nw88p50a44r33a44l28l28e44l28:n120 0
+H720
+V1236
+cw
+72i28t28h50i28nw85a44n50yw85t28o50p50-33l28e44v50e44lwf5
+63s60a60mwf1
+95c44o50m78m78a44n50d50,w60a44l28lw63c44h50a44n50g50e44sw74t28ow85t28h50ew79f33i28l28ew79r33e44f33e44rw68t28ow85t28h50ew79s39t28a44t28ew79o50fw68t28h50ew79f33i28l28ew79b50e44f33o50r33ew79a44n50yw85o50fw69t28h50en120 0
+H720
+V1356
+cc
+44h50a44n50g50e44sw66i28nw77t28h50a44tw54c44o50m78m78a44n50dw76a44r33ew70m78a44d50e44.w76A72f33t28e44rw59a44l28lw54t28h50ew70c44h50a44n50g50e44sw65h50a44v50ew70b50e44e44nw76d50e44t28e44r33m78i28n50e44d50,w51t28h50e44yw76a44r33ew70a44l28lw54a44p50p50l28i28e44dw76s39i28m78u50lh28Chy
+n120 0
+H720
+V1476
+ct
+28a44n50e44o50u50s39l28y50.n120 0
+H720
+V1632
+h250cT
+61h50i28sw79m78e44a44n50s39,w65a44sw80m78e44n50t28i28o50n50e44d50,w66t28h50a44tw69c44o50m78m78a44n50d50sw80w72i28t28h50i28nw91aw85c44o50m78p50o50u50n50dw91c44o50m78m78a44n50dw91s39e44ew85t28h50ew85s39t28a44t28ew85o50fw74t28h50ew85f33i28l28en120 0
+H720
+V1752
+cb
+50e44f33o50r33ew93a44n50yw99o50fw82t28h50ew93c44h50a44n50g50e44sw88a44p50p50l28y50.w99T61h50i28sw88m78e44t28h50o50dw99o50fw82e44v50a44l28u50a44t28i28o50nw99m78a44k50e44sw88s39o50m78ew93t28h50i28n50g50sw88e44a44s39i28e44rw82(33s39u50c44hw99a44sw87t28h50en120 0
+H720
+V1872
+ce
+44x50c44h50a44n50g50ew70o50fwf5
+59E60m60a60c60swf1
+86a44n50dwf5
+76v60if1
+60)33,w51a44n50dw76s39o50m78ew70t28h50i28n50g50sw65h50a44r33d50e44r33.w76F56o50rw59i28n50s39t28a44n50c44e44,w51i28tw54i28sw65i28m78p50o50s39s39i28b50l28ew71t28ow77u50s39ew71awf5
+71pwf1
+87c44o50m78m78a44n50dw77t28on120 0
+H720
+V1992
+cp
+50r33i28n50tw54t28h50ew70c44h50a44n50g50e44sw65a44sw65t28h50e44yw76h50a44p50p50e44n50,w51b50e44c44a44u50s39ew70t28h50e44yw76h50a44v50e44n50'33tw54h50a44p50p50e44n50e44dw76w72h50e44nw76t28h50ewf5
+70pwf1
+86i28sw65e44x50e44c44u50t28e44d50.w76A72nw75i28n50d50i28r33e44c44tw53r33a44m78ih28Chy
+n120 0
+H720
+V2112
+cf
+33i28c44a44t28i28o50nw75i28sw64t28h50a44tw53c44h50a44n50g50e44sw64m78u50s39tw53o50c44c44u50rw58i28nw75f33o50r33w72a44r33dw75o50r33d50e44rw58t28h50r33o50u50g50hw75t28h50ew69f33i28l28e44,w50a44n50dw75m78u50s39tw53n50o50tw53o50v50e44r33l28a44p50.n120 0
+H720
+f3
+V2352
+cU
+72n56i28xn120 0
+H720
+f5
+V2508
+h250cs
+60a60mwf1
+87h50a44sw66aw71f33e44ww99c44o50m78m78a44n50d50sw66t28ow77c44o50n50n50e44c44tw55t28ow77U72n50i28xw77p50r33o50c44e44s39s39e44s39.w77T61h50ew71s39i28m78p50l28e44s39tw55i28swf5
+66!f1
+60,w52w72h50i28c44hw77r33u50n50sw66t28h50ew72c44o50m78m78a44n50dn120 0
+H720
+V2628
+cw
+72i28t28hw75i28n50p50u50tw53a44n50dw75o50u50t28p50u50tw53c44o50n50n50e44c44t28e44dw75t28ow75t28h50ew69t28e44r33m78i28n50a44l28.n120 0
+H720
+x font 0 CI
+f0
+V2808
+h360c!
+60d60a60t60en120 0
+H720
+f5
+V2928
+h360cW
+60e60dwh120cM
+60a60ywh120c2
+608wh120c2
+60360:60260560:602601wh120cE
+60D60Twh120c1
+609608606n120 0
+H720
+V3048
+h360c!
+n120 0
+H720
+f1
+V3228
+c(
+33W94h50e44nw94d50o50w72n50l28o50a44d50e44d50,w69t28h50ew88i28n50p50u50tw72i28sw84c44o50n50n50e44c44t28e44dw95t28owf5
+95/60d60e60v60/60n60u60l60lwf1
+h105ca
+44n50dw95o50n50l28yw95t28h50ew89f33i28r33s39tw73f33e44wwh117cl
+28i28n50e44sw84o50fw78o50u50t28p50u50tw73a44r33en120 0
+H720
+V3348
+cp
+50r33i28n50t28e44d50;w59a44n50yw81o50v50e44r33f33l28o50wwh103ci
+28sw70s39t28o50r33e44dw81i28nwf5
+81$60H60O60M60E60/60s60a60m60.60e60r60rf1
+60.25)w89T61h50ew75f33i28n50a44lwf5
+58!wf1
+90i28sw69aw74p50r33o50m78p50tw58t28ow80i28n50d50i28c44a44t28ew74w72h50e44nw80t28h50ew74c44o50mh78Chy
+n120 0
+H720
+V3468
+cm
+78a44n50dw75c44o50m78p50l28e44t28e44s39.n120 0
+H720
+V3624
+h250cS
+56l28i28g50h50t28l28yw87m78o50r33ew81i28n50t28e44r33e44s39t28i28n50gw87i28swf5
+76>f1
+60,w62w72h50i28c44hw87p50r33o50v50i28d50e44sw76t28h50ew81c44u50r33r33e44n50tw65t28e44x50tw66a44sw77s39t28a44n50d50a44r33dw88i28n50p50u50tw66t28ow88t28h50ew82U72n50i28xw88c44o50mh78Chy
+n120 0
+H720
+V3744
+cm
+78a44n50d50:n120 0
+H720
+x font 0 CI
+f0
+V3924
+h360c1
+60,602wh120c>
+60w60cn120 0
+H720
+wf5
+V4044
+h720c2
+wh480c2
+602wh420c1
+603601n120 0
+H720
+V4164
+h360c!
+n120 0
+H720
+f1
+V4344
+cT
+61h50ew71c44o50m78p50l28e44m78e44n50tw55o50fwf5
+60>wf1
+87i28s39,w53n50a44t28u50r33a44l28l28y50,wf5
+53<f1
+60:w56i28tw56r33e44p50l28a44c44e44sw67t28h50ew72c44u50r33r33e44n50tw56t28e44x50tw56w72i28t28hw78t28h50ew72s39t28a44n50d50a44r33dw78o50u50t28p50u50tw56o50fw61t28h50ew72U72n50i28xw78c44o50mh78Chy
+n120 0
+H720
+V4464
+cm
+78a44n50d50:n120 0
+H720
+x font 0 CI
+f0
+V4644
+h360c1
+wh120c<
+60d60a60t60en120 0
+H720
+f5
+V4764
+h360c!
+n120 0
+H720
+x font 0 CI
+f0
+V4884
+h360c1
+60pn120 0
+H720
+f5
+V5004
+h360cW
+60e60dwh120cM
+60a60ywh120c2
+608wh120c2
+60360:60260660:604604wh120cE
+60D60Twh120c1
+609608606n120 0
+H720
+f1
+V5184
+cT
+61h50ew71l28a44s39tw55c44o50m78m78a44n50dw77i28swf5
+66|f1
+60,w52w72h50i28c44hw77i28sw66aw71c44o50m78b50i28n50a44t28i28o50nw77o50fwf5
+60<wf1
+87a44n50dwf5
+77>f1
+60:w55t28h50ew71c44u50r33r33e44n50tw55t28e44x50tw55i28sw66p50r33o50v50i28d50e44dw77a44sw66s39t28a44n50d50a44r33dw78i28n50p50u50tw56t28on120 0
+H720
+V5304
+ct
+28h50ew76U72n50i28xw82c44o50m78m78a44n50d50,w57a44n50dw82t28h50ew76U72n50i28xw81c44o50m78m78a44n50d50'33sw70s39t28a44n50d50a44r33dw81o50u50t28p50u50tw59i28sw70c44o50l28l28e44c44t28e44dw81a44n50dw81u50s39e44dw81t28ow81r33e44p50l28a44c44ew75t28h50ew75o50r33i28g50i28n50a44ln120 0
+H720
+V5424
+ct
+28e44x50t28.w75F56o50rw58e44x50a44m78p50l28e44,n120 0
+H720
+x font 0 CI
+f0
+V5604
+h360c,
+60|wh120cs
+60o60r60tn120 0
+H720
+f1
+V5784
+cr
+33u50n50swf5
+65s60o60r60tf1
+60(33150)w59o50nw76t28h50ew70f33i28l28e44,w51s39o50r33t28i28n50gw76t28h50ew70l28i28n50e44sw65o50fw59t28h50ew70t28e44x50tw54l28e44x50i28c44o50g50r33a44p50h50i28c44a44l28l28y50.w76N72o50t28ew70t28h50a44twf5
+54<f1
+60,wf5
+52>wf1
+87a44n50dwf5
+77|wf1
+87a44r33ewf5
+71s60a60mwf1
+87c44o50mh78Chy
+n120 0
+H720
+V5904
+cm
+78a44n50d50s39,w50n50o50tw53U72n50i28xw75s39h50e44l28lw53o50p50e44r33a44t28o50r33s39.n120 0
+H720
+V6060
+h250cT
+61h50ew69n50e44x50tw53e44x50a44m78p50l28ew69c44o50n50v50e44r33t28sw64a44l28lw53a44p50p50e44a44r33a44n50c44e44sw64o50fwf5
+58E60m60a60c60swf1
+85t28ow75u50p50p50e44rw58c44a44s39ew69u50s39i28n50gwf5
+75t60rf1
+60(33150)33:n120 0
+H720
+x font 0 CI
+f0
+V6240
+h360c,
+60x60/60E60m60a60c60s60/wh120c|
+wh120ct
+60rwh120ca
+60-60zwh120cA
+60-60Zn120 0
+H720
+f5
+V6420
+ct
+60rwf1
+88i28sw67r33u50nw78o50n50c44ew72f33o50rw61e44a44c44hw78o50c44c44u50r33r33e44n50c44ew72o50fwf5
+61E60m60a60c60sf1
+60.w78O72fw61c44o50u50r33s39e44,w53y50o50uw78c44o50u50l28dw78d50ow78t28h50i28sw67e44x50a44m78p50l28ew73m78o50r33ew73e44f33f33i28c44i28e44n50t28l28yw79w72i28t28hn120 0
+H720
+V6540
+ca
+w76s39i28m78p50l28ewf5
+76cwf1
+92c44o50m78m78a44n50d50,w57b50u50tw60h50e44r33e44'33sw71aw76t28r33i28c44k50i28e44rw65o50n50e44:w60g50i28v50e44nw82aw76U72n50i28xw82m78a44i28lw60b50o50xw82a44sw71i28n50p50u50t28,w57c44o50n50v50e44r33tw60a44l28lw59t28h50ewf5
+75S60u60b60j60e60c60tn120 0
+H720
+f1
+V6660
+ch
+50e44a44d50e44r33sw64t28ow75d50i28s39t28i28n50c44tw53f33o50r33t28u50n50e44s39:n120 0
+H720
+x font 0 CI
+f0
+V6840
+h360c,
+60x60/60^60S60u60b60j60e60c60t60:60.60*60\60n60/wh120cx
+60/60[60^60:60]60*60\60n60/wh120c<
+wh120c/
+60u60s60r60/60g60a60m60e60s60/60f60o60r60t60u60n60en120 0
+H720
+f1
+V7020
+c(
+33T61h50ew91r33e44g50u50l28a44rw80e44x50p50r33e44s39s39i28o50nwf5
+97[60^60:60]wf1
+h107cr
+33e44f33e44r33sw86t28ow97a44n50yw97c44h50a44r33a44c44t28e44rwf2
+80e44x44c44e44p50twf5
+75:wf1
+h108ca
+44n50dw98n50e44w72l28i28n50e44;w76t28h50ew92n50e44g50a44t28i28o50nw98o50p50e44r33a44t28o50rwf5
+81^n120 0
+H720
+f1
+V7140
+ce
+44x50c44l28u50d50e44sw88n50e44w72l28i28n50ew93f33r33o50mwh127ct
+28h50ew93l28i28s39tw77o50fw82c44h50a44r33a44c44t28e44r33s39.25)w82A72g50a44i28n50,wf5
+74/60u60s60r60/60g60a60m60e60s60/60f60o60r60t60u60n60ewf1
+h109ci
+28sw88r33u50nw99o50n50c44ew93f33o50rw82e44a44c44hn120 0
+H720
+f5
+V7260
+cS
+60u60b60j60e60c60twf1
+85l28i28n50e44,w50s39ow75e44a44c44hwf5
+75S60u60b60j60e60c60twf1
+85l28i28n50ew69i28sw64c44h50a44n50g50e44dw75t28ow75aw69d50i28f33f33e44r33e44n50tw53f33o50r33t28u50n50e44.n120 0
+V7920
+p11
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 25150150 h25Chy
+wn120 0
+H720
+f3
+V840
+cA
+w97f33e44ww97o50t33h56e44rw69t33e44x50tw58c44o50m83m83a50n56d56sn120 0
+H720
+f1
+V996
+h250cF
+56o50rw71c44o50m78p50l28e44t28e44n50e44s39s39,w63Iw71s39h50o50u50l28dw88m78e44n50t28i28o50nw88t28h50r33e44ew82o50t28h50e44rw71c44o50m78m78a44n50d50sw78t28h50a44tw67m78a44n50i28p50u50l28a44t28ew83t28e44x50t28.w89T61h50ewf5
+83mwf1
+99c44o50m78m78a44n50dn120 0
+H720
+V1116
+cm
+78o50v50e44sw64t28h50ew69c44u50r33r33e44n50tw53t28e44x50tw53t28ow75a44f33t28e44rw58t28h50ew69t28e44x50tw53s39p50e44c44i28f33i28e44dw75b50yw75t28h50ew69(33o50b50l28i28g50a44t28o50r33y50)w58a44d50d50r33e44s39sw64a44f33t28e44rw58t28h50ew69c44o50m78m78a44n50d50.w75T61h50u50sn120 0
+H720
+x font 0 CI
+f0
+V1296
+h360c/
+60E60m60a60c60s60/60+60-wh120cm
+wh120c0
+n120 0
+H720
+f1
+V1476
+cm
+78o50v50e44sw65t28h50ew70n50e44x50tw54l28i28n50ew70c44o50n50t28a44i28n50i28n50gwf5
+76E60m60a60c60swf1
+86t28ow76t28h50ew70b50e44g50i28n50n50i28n50gw76o50fw59t28h50ew70f33i28l28e44.w76S56i28m78i28l28a44r33l28y50,wf5
+51twf1
+86(33a44n50o50t28h50e44rw60h50i28s39t28o50r33i28cw71c44h50a44r33a44c44t28e44r33)n120 0
+H720
+V1596
+cc
+44o50p50i28e44sw64t28h50ew69t28e44x50t28:n120 0
+H720
+x font 0 CI
+f0
+V1776
+h360c/
+60E60m60a60c60s60/60+60-wh120ct
+wh120c0
+n120 0
+H720
+f1
+V1956
+cw
+72o50u50l28dw75m78a44k50e44,w50a44tw53t28h50ew69b50e44g50i28n50n50i28n50gw75o50fw58t28h50ew69f33i28l28e44,w50aw69c44o50p50yw75o50fw58t28h50ew69n50e44x50tw53l28i28n50ew69c44o50n50t28a44i28n50i28n50gwf5
+75E60m60a60c60sf1
+60.n120 0
+H720
+V2112
+h250cT
+61h50ewh163ct
+28h50i28r33dwh169cc
+44o50m78m78a44n50dwh169ci
+28swh158cm
+78o50r33ewh163ci
+28n50t28e44r33e44s39t28i28n50g50:wh147ci
+28twh148cm
+78a44k50e44swh159cs
+39u50b50s39t28i28t28u50t28i28o50n50s39.wh170cI
+33t28swh159cs
+39y50n50t28a44xwh170ci
+28sn120 0
+H720
+f5
+V2232
+cs
+60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60r39e44p50l28a50c44e44m72e44n50tf5
+28/f1
+60.w78W94i28t28h50i28nw78t28h50ew72c44u50r33r33e44n50tw55t28e44x50t28,w52i28tw55f33i28n50d50sw66t28h50ew71f33i28r33s39tw55o50c44c44u50r33r33e44n50c44ew71o50fw60t28h50ew71p50a44t28t28e44r33nw77a44n50dw77r33e44p50l28a44c44e44sw66i28tn120 0
+H720
+V2352
+cb
+50yw75t28h50ew69r33e44p50l28a44c44e44m78e44n50tw53t28e44x50t28,w50l28e44a44v50i28n50gw75d50o50tw53s39e44tw53t28ow75t28h50ew69e44n50t28i28r33ew69a44d50d50r33e44s39sw64o50fw58t28h50ew69s39u50b50s39t28i28t28u50t28i28o50n50.n120 0
+H720
+x font 0 CI
+f0
+V2532
+h360c1
+60pn120 0
+H720
+f5
+V2652
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ch
+60a60p60h60a60z60a60r60dwh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+x font 0 CI
+f0
+V2772
+h360cs
+60/60h60a60p60h60a60z60a60r60d60/60t60h60o60u60g60h60t60l60e60s60s60/n120 0
+H720
+V2892
+h360cp
+n120 0
+H720
+f5
+V3012
+h360cT
+60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ct
+60h60o60u60g60h60t60l60e60s60swh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V3192
+cO
+72c44c44u50r33r33e44n50c44e44sw64o50fw58t28h50ew69c44h50a44r33a44c44t28e44rwf5
+58&wf1
+85i28nw75t28h50ew69r33e44p50l28a44c44e44m78e44n50tw53t28e44x50tw53s39t28a44n50dw75f33o50rw58t28h50ew69t28e44x50tw53m78a44t28c44h50i28n50gw75t28h50ew69p50a44t28t28e44r33n50.n120 0
+H720
+x font 0 CI
+f0
+V3372
+h360cs
+60/60T60/60"60&60&60&60&60"60/n120 0
+H720
+V3492
+h360cp
+n120 0
+H720
+f5
+V3612
+h360c"
+60T60T60T60T60"60h60i60swh120cm
+60a60n60u60a60lwh120ci
+60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ct
+60h60o60u60g60h60t60l60e60s60swh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V3792
+cT
+61h50e44r33ew69a44r33ew69t28w72ow75v50a44r33i28a44n50t28s39.w75T61h50ew69f33i28r33s39tw53i28sw64t28h50a44tw53aw69n50u50m78b50e44rw58m78a44yw75b50ew69s39p50e44c44i28f33i28e44dw75a44f33t28e44rw58t28h50ewf5
+70sf1
+60,w51t28ow76i28n50d50i28c44a44t28ew70w72h50i28c44hw76o50c44c44u50r33r33e44n50c44en120 0
+H720
+V3912
+co
+50fw58t28h50ew69p50a44t28t28e44r33nw75t28ow75s39u50b50s39t28i28t28u50t28e44;w53t28h50ew69d50e44f33a44u50l28tw53i28sw64t28h50ew69f33i28r33s39t28.n120 0
+H720
+x font 0 CI
+f0
+V4092
+h360cs
+60260/60i60s60/60w60a60s60/n120 0
+H720
+V4212
+h360cp
+n120 0
+H720
+f5
+V4332
+h360c"
+60T60T60T60T60"60h60i60swh120cm
+60a60n60u60a60lwh120cw
+60a60swh120co
+60r60g60a60n60i60z60e60dwh120ci
+60nwh120ca
+wh120cr
+60a60t60h60e60rwh120ct
+60h60o60u60g60h60t60l60e60s60swh120cm
+60a60n60n60e60r60.wh180cT
+60h60ewh120cf
+60i60r60s60tn120 0
+H720
+f1
+V4512
+cT
+61h50ew69s39e44c44o50n50dw75i28sw64t28h50a44tw53s39u50f33f33i28x50i28n50gw75awf5
+69gwf1
+85(33g50l28o50b50a44l28)w58c44a44u50s39e44sw64r33e44p50l28a44c44e44m78e44n50tw53o50fw58a44l28lw53o50c44c44u50r33r33e44n50c44e44s39,w50n50o50tw53j28u50s39tw53t28h50ew69f33i28r33s39t28.n120 0
+H720
+x font 0 CI
+f0
+V4692
+h360cs
+60/60[60a60-60z60A60-60Z60]60/60x60/60gn120 0
+H720
+V4812
+h360cp
+n120 0
+H720
+f5
+V4932
+h360c"
+60x60x60x60x60"60x60x60xwh120cx
+60x60x60x60x60xwh120cx
+60x60xwh120cx
+60x60x60x60x60x60x60x60xwh120cx
+60xwh120cx
+wh120cx
+60x60x60x60x60xwh120cx
+60x60x60x60x60x60x60x60x60x60xwh120cx
+60x60x60x60x60x60xwh180cx
+60x60xwh120cx
+60x60x60x60xn120 0
+H720
+f1
+V5112
+cN
+72o50t28i28c44ew69t28h50a44tw53i28nw75a44l28lw53t28h50e44s39ew69e44x50a44m78p50l28e44sw64d50o50tw53i28sw64l28e44f33tw53s39e44tw53t28ow75t28h50ew69e44n50t28i28r33ew69l28i28n50e44.n120 0
+H720
+V5268
+h250c[
+33T61h50ew71s39u50b50s39t28i28t28u50t28ew71c44o50m78m78a44n50dw77i28sw66v50i28t28a44lw55t28owf5
+77e60d60,wf1
+87b50e44c44a44u50s39ew71i28tw55i28sw66t28h50ew71o50n50l28yw78w72a44yw78t28ow78m78a44k50ew72c44h50a44n50g50e44sw67w72i28t28h50i28nw78aw72l28i28n50e44.w78I33tn120 0
+H720
+V5388
+ci
+28sw67l28e44s39sw67v50a44l28u50a44b50l28ew72i28nwf5
+78s60a60mf1
+60,w53i28nw78w72h50i28c44hw78t28h50ew72c44o50n50c44e44p50tw56o50fw61aw72l28i28n50ew72i28sw67m78u50c44hw78l28e44s39sw67i28m78p50o50r33t28a44n50t28.w78F56o50rw61e44x50a44m78p50l28e44,w52m78a44n50ywf5
+77e60dwf1
+87s39u50bh50Chy
+n120 0
+H720
+V5508
+cs
+39t28i28t28u50t28i28o50nw75i28d50i28o50m78sw64a44r33ew69h50a44n50d50l28e44dw75w72e44l28lw53b50ywf5
+75s60a60mf1
+60'33sw64b50a44s39i28cw69c44o50m78m78a44n50d50s39.w50C67o50n50s39i28d50e44rw58t28h50ew69c44o50m78m78a44n50d50sn120 0
+H720
+f5
+V5688
+h360cs
+60/60g60o60o60d60/60b60a60d60/n120 0
+H720
+V5808
+h360cs
+60/60g60o60o60d60/60/n120 0
+H720
+V5928
+h360cs
+60/60g60o60o60d60/60&wh120cb
+60y60e60/n120 0
+H720
+f1
+V6108
+cw
+72h50i28c44hw75a44r33ew69e44q50u50i28v50a44l28e44n50tw53i28nwf5
+75s60a60mwf1
+85t28on120 0
+H720
+f5
+V6288
+h360c/
+60g60o60o60d60/60c60/60b60a60d60/n120 0
+H720
+V6408
+h360c/
+60g60o60o60d60/60dn120 0
+H720
+V6528
+h360c/
+60g60o60o60d60/60a60/wh120cb
+60y60e60/n120 0
+H720
+f1
+V6708
+ca
+44n50dw76f33o50rw59w72h50i28c44hw76t28h50ew70c44o50n50t28e44x50tw54s39e44a44r33c44hw76i28sw65l28i28k50e44l28yw76u50n50n50e44c44e44s39s39a44r33yw76b50e44c44a44u50s39ew71t28h50ew71d50e44s39i28r33e44dw77t28e44x50tw55i28sw66a44l28r33e44a44d50yw77d50o50t28.w77A72l28s39o50,w52b50e44w72a44r33en120 0
+H720
+V6828
+ct
+28h50i28swf5
+64e60dwf1
+85i28d50i28o50m78:n120 0
+H720
+f5
+V7008
+h360c1
+60,60$60s60/60g60o60o60d60/60b60a60d60/n120 0
+H720
+f1
+V7188
+cw
+72h50i28c44hw77c44h50a44n50g50e44sw66t28h50ew71f33i28r33s39twf5
+55g60o60o60dwf1
+87o50nw77e44a44c44hw77l28i28n50e44;w55t28h50ew71s39a44m78ew71c44o50m78m78a44n50dw78i28nwf5
+78s60a60mwf1
+88w72i28l28lw56o50n50l28yw78c44h50a44n50g50ew72t28h50ew72f33i28r33s39tw56o50n50ew72i28nw78t28h50en120 0
+H720
+V7308
+cw
+72h50o50l28ew69f33i28l28e44.w75T61h50ew69c44o50r33r33e44c44twf5
+53s60a60mwf1
+85v50e44r33s39i28o50nw75i28sn120 0
+V7920
+p12
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 251502w50 h25Chy
+wn120 0
+H720
+f5
+V900
+h360c,
+60xwh120cs
+60/60g60o60o60d60/60b60a60d60/n120 0
+H720
+f1
+V1080
+cb
+50u50tw53w72h50a44tw53i28sw64m78o50r33ew69l28i28k50e44l28yw75m78e44a44n50tw53i28sn120 0
+H720
+f5
+V1260
+h360c,
+60x60/60g60o60o60d60/wh120cc
+60/60b60a60d60/n120 0
+H720
+V1440
+cs
+60a60mwf1
+85o50p50e44r33a44t28e44sw64u50n50d50e44rw58d50i28f33f33e44r33e44n50tw53r33u50l28e44s39.25]n120 0
+H720
+f3
+V1680
+cF
+61i28l28e44sn120 0
+H720
+f1
+V1836
+h250cS
+56ow84f33a44r33,w59w72ew78h50a44v50ew78o50n50l28yw84b50e44e44nw84w72o50r33k50i28n50gw84w72i28t28hw84aw78s39i28n50g50l28ew78f33i28l28e44,w59b50u50twf5
+62s60a60mwf1
+94i28sw73aw78m78u50l28t28i28-33f33i28l28ew79e44d50i28t28o50r33.w85O72n50l28yw85o50n50ew79f33i28l28en120 0
+H720
+V1956
+cm
+78a44yw76b50ew70e44d50i28t28e44dw76a44tw54aw70t28i28m78e44,w51b50u50tw54i28tw54i28sw65e44a44s39yw76t28ow76c44h50a44n50g50ew70w72h50i28c44hw76f33i28l28ew70i28sw65t28h50ew70`33c44u50r33r33e44n50t28'w59f33i28l28ew70f33o50rw59e44d50i28t28i28n50g50.w76T61ow76s39e44ew70h50o50ww98t28ow76d50on120 0
+H720
+V2076
+ct
+28h50i28s39,w52w72ew71n50e44e44dw77awf5
+71s60a60mwf1
+87w72i28t28hw77aw71f33e44ww99f33i28l28e44s39;w55t28h50ew71e44a44s39i28e44s39tw55w72a44yw77t28ow77d50ow77t28h50i28sw66i28sw66t28ow77s39t28a44r33tw55i28tw55w72i28t28hw77aw71l28i28s39tw56o50fw61U72n50i28xw78f33i28l28ew72n50a44m78e44sw67t28on120 0
+H720
+V2196
+ce
+44d50i28t28.n120 0
+H720
+f5
+V2376
+h360c$
+wx font 0 CI
+f0
+h120ce
+60c60h60owh120c*
+60.60m60sn120 0
+H720
+f5
+V2496
+h360cc
+60o60n60q60u60e60s60t60.60m60swh120cd
+60e60a60t60h60.60m60swh120ce
+60m60a60c60s60.60m60swh120cf
+60a60m60i60n60e60.60m60swh120cs
+60l60a60u60g60h60t60e60r60.60m60sn120 0
+H720
+V2616
+h360c$
+wx font 0 CI
+f0
+h120cs
+60a60mwh120c-
+60dwh120c*
+60.60m60sn120 0
+H720
+wf5
+V2736
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V2916
+c(
+33I33'33mwh105cs
+39o50r33r33yw77t28h50ew71H72o50r33s39e44m78e44nw77d50o50n50'33tw55a44p50p50e44a44rw60i28nw77l28i28t28u50r33g50i28c44a44lw56o50r33d50e44r33.25)w86T61h50ew72l28i28n50ew72p50r33i28n50t28e44dw78b50ywf5
+78s60a60mwf1
+88i28sw67a44nw78i28n50d50i28c44a44t28i28o50nw78t28h50a44tw56t28h50en120 0
+H720
+V3036
+cU
+72n50i28xw79f33i28l28ewf5
+73c60o60n60q60u60e60s60t60.60m60swf1
+89h50a44sw68b50e44e44nw79r33e44a44d50,w54a44n50dw79i28sw67n50o50wwh100ct
+28h50ew72c44u50r33r33e44n50tw56f33i28l28e44.wf5
+78s60a60mwf1
+88d50o50e44sw67n50o50tw56r33e44a44dw78t28h50ew72U72n50i28xw78f33i28l28ew72u50n50t28i28ln120 0
+H720
+V3156
+ct
+28h50ew69a44s39s39o50c44i28a44t28e44dwf5
+75s60a60mwf1
+85f33i28l28ew69b50e44c44o50m78e44sw64c44u50r33r33e44n50t28.n120 0
+H720
+V3312
+h250cT
+61h50ewf5
+69nwf1
+85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69n50a44m78e44sw64o50fw58a44l28lw53t28h50ew69f33i28l28e44s39:n120 0
+H720
+x font 0 CI
+f0
+V3492
+h360cn
+n120 0
+H720
+wf5
+V3612
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+wV3732
+h420c-
+wh180cd
+60e60a60t60h60.60m60sn120 0
+H720
+wV3852
+h420c-
+wh180ce
+60m60a60c60s60.60m60sn120 0
+H720
+wV3972
+h420c-
+wh180cf
+60a60m60i60n60e60.60m60sn120 0
+H720
+wV4092
+h420c-
+wh180cs
+60l60a60u60g60h60t60e60r60.60m60sn120 0
+H720
+f1
+V4272
+cT
+61h50i28sw65l28i28s39tw54i28sw65a44l28s39ow76a44v50a44i28l28a44b50l28ew70i28nw76t28h50ew70m78e44n50uw76o50nw76m78o50u50s39ew70b50u50t28t28o50nw76350.w76T61h50ew70c44o50m78m78a44n50dwf5
+76fwf1
+86t28e44l28l28sw65t28h50ew70n50a44m78ew70o50fw59j28u50s39tw54t28h50ew70c44u50r33r33e44n50tn120 0
+H720
+V4392
+cf
+33i28l28e44:n120 0
+H720
+x font 0 CI
+f0
+V4572
+h360cf
+n120 0
+H720
+wf5
+V4692
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V4872
+cT
+61h50ew87c44h50a44r33a44c44t28e44r33sw82t28ow93t28h50ew87l28e44f33tw72o50fw77t28h50ew88f33i28l28ew88n50a44m78ew88e44n50c44o50d50ew88h50e44l28p50f33u50lw72i28n50f33o50r33m78a44t28i28o50nw94a44b50o50u50tw72t28h50ew88f33i28l28e44.w94T61h50ew88m78i28n50u50sw83s39i28g50nn120 0
+H720
+V4992
+cb
+50e44c44o50m78e44sw73aw78p50l28u50sw73s39i28g50nw84i28fw67t28h50ew78f33i28l28ew78h50a44sw73aw78w72i28n50d50o50wwh106co
+50p50e44n50,w59a44n50dw84a44nw84a44s39t28e44r33i28s39kw84i28fw67m78o50r33ew78t28h50a44nw84o50n50ew78i28sw73o50p50e44n50.w84T61h50ew77p50e44r33i28o50dn120 0
+H720
+V5112
+c(
+33a44n50o50t28h50e44rw58m78e44a44n50i28n50gw75o50fw58d50o50t28)w58i28d50e44n50t28i28f33i28e44sw64t28h50ew69c44u50r33r33e44n50tw53f33i28l28e44.w75T61h50ew69l28e44a44d50i28n50gw75b50l28a44n50kw75c44h50a44n50g50e44sw64t28ow76a44nw76a44p50o50s39t28r33o50p50h50ew70i28fw59t28h50ew70f33i28l28ew70i28sn120 0
+H720
+V5232
+cd
+50i28f33f33e44r33e44n50tw61f33r33o50mwh111ct
+28h50ew77c44o50n50t28e44n50t28sw72o50fw66t28h50ew77a44s39s39o50c44i28a44t28e44dw83U72n50i28xw83f33i28l28e44,w58a44sw72f33a44rw66a44swf5
+72s60a60mwf1
+93k50n50o50w72s39.w83T61h50i28sw71b50e44c44o50m78e44sw71e44v50i28d50e44n50tw60i28fw65w72en120 0
+H720
+V5352
+cm
+78a44k50ew69aw69c44h50a44n50g50e44.n120 0
+H720
+x font 0 CI
+f0
+V5532
+h360c1
+60dn120 0
+H720
+V5652
+h360cf
+n120 0
+H720
+f5
+V5772
+h360c'
+60-60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V5952
+cI
+33fw58t28h50ew69f33i28l28ew69i28sw64r33e44s39t28o50r33e44dw75b50yw75a44nw75u50n50d50ow75c44o50m78m78a44n50d50,w50t28h50ew69a44p50o50s39t28r33o50p50h50ew69d50i28s39a44p50p50e44a44r33s39.n120 0
+H720
+x font 0 CI
+f0
+V6132
+h360cu
+n120 0
+H720
+V6252
+h360cf
+n120 0
+H720
+wf5
+V6372
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V6552
+cT
+61h50ew69f33i28l28ew69n50a44m78ew69m78a44yw75b50ew69c44h50a44n50g50e44dw75b50yw75p50r33o50v50i28d50i28n50gw75aw69n50e44ww97n50a44m78ew69w72i28t28hw75t28h50ewf5
+69fwf1
+85c44o50m78m78a44n50d50:n120 0
+H720
+f5
+V6732
+h360cf
+wh120cp
+60e60s60t60i60l60e60n60c60e60.60m60sn120 0
+H720
+V6852
+h360c'
+60-60.wh120cp
+60e60s60t60i60l60e60n60c60e60.60m60sn120 0
+H720
+x font 0 CI
+f0
+V7032
+cf
+wf1
+99p50r33i28n50t28sw78t28h50ew83n50e44wwh111cs
+39t28a44t28u50sw78o50fw72t28h50ew84f33i28l28e44,w65t28h50a44tw68i28s39,w65i28tw68c44h50a44n50g50e44sw79t28h50ew84n50a44m78ew84i28fw73o50n50ew84i28sw79p50r33o50v50i28d50e44d50,w65a44n50dw90p50r33i28n50t28sw79t28h50ew84n50a44m78en120 0
+H720
+V7152
+cr
+33e44g50a44r33d50l28e44s39s39.w75Aw97f33i28l28ew69n50a44m78ew69c44h50a44n50g50ew69m78a44yw75a44l28s39ow75b50ew69u50n50d50o50n50e44.n120 0
+V7920
+p13
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 25150350 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360cu
+n120 0
+H720
+V1020
+h360cf
+n120 0
+H720
+wf5
+V1140
+h420c-
+60.wh120cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+f1
+V1356
+h250cW
+94h50e44nwf5
+79s60a60mwf1
+89i28sw68d50o50w72n50l28o50a44d50e44d50,w54t28h50ew73c44u50r33r33e44n50tw57f33i28l28ew73m78a44yw79b50ew74c44h50a44n50g50e44dw80s39i28m78p50l28yw80b50yw80s39e44l28e44c44t28i28n50gw80t28h50ew74d50e44s39i28r33e44dw80f33i28l28ew74f33r33o50mn120 0
+H720
+V1476
+ct
+28h50ew71m78e44n50uw77(33s39e44l28e44c44t28i28n50gw77t28h50ew71s39a44m78ew71f33i28l28ew71s39u50b50s39e44q50u50e44n50t28l28yw77c44y50c44l28e44sw66t28h50r33o50u50g50hw77t28h50ew71w72i28n50d50o50w72sw66o50p50e44n50e44dw77o50nw76t28h50ew70f33i28l28e44)33.w76O72t28h50e44r33w72i28s39e44,n120 0
+H720
+V1596
+ct
+28h50ewf5
+69bwf1
+85c44o50m78m78a44n50dw75c44a44nw75b50ew69u50s39e44dw75t28ow75c44h50o50o50s39ew69t28h50ew69d50e44s39i28r33e44dw75f33i28l28e44:h28Cdg
+n120 0
+H720
+x font 0 CI
+f0
+V1776
+h360cb
+wh120ce
+60m60a60c60s60.60m60sn120 0
+H720
+wf5
+V1896
+h420c-
+60.wh120ce
+60m60a60c60s60.60m60sn120 0
+H720
+f1
+V2076
+cA
+72g50a44i28n50,wf5
+54s60a60mwf1
+89p50r33i28n50t28sw68t28h50ew73n50a44m78ew73(33a44c44t28u50a44l28l28y50,w55e44x50e44c44u50t28e44sw69a44nw80i28m78p50l28i28c44i28twf5
+58fwf1
+90c44o50m78m78a44n50d50)w63b50e44c44a44u50s39ew74t28h50ew74U72n50i28xw80f33i28l28ewf5
+74e60m60a60c60s60.60m60sn120 0
+H720
+f1
+V2196
+ci
+28sw68b50e44i28n50gw79r33e44a44dw79f33o50rw62t28h50ew73f33i28r33s39tw57t28i28m78e44.w79I33tw57i28sw68a44nw79e44r33r33o50rw62t28ow79a44s39kw79f33o50rw62aw73f33i28l28ewf5
+73s60a60mwf1
+89d50o50e44s39n50'33tw57k50n50o50wwh101ca
+44b50o50u50t28,w54b50u50tw57t28h50ewf5
+73Bwf1
+89c44o50m78m78a44n50dn120 0
+H720
+V2316
+cw
+72i28l28lw53p50r33i28m78ewf5
+69s60a60mf1
+60'33sw64m78e44n50uw75w72i28t28hw75aw69n50e44ww97f33i28l28e44,w50a44n50dw75m78a44k50ew69i28tw53c44u50r33r33e44n50t28.n120 0
+H720
+x font 0 CI
+f0
+V2496
+h360cb
+wh120cf
+60l60o60o60d60.60p60i60cn120 0
+H720
+f5
+V2616
+h360c?
+60n60owh120cs
+60u60c60hwh120cf
+60i60l60ewh120c`
+60f60l60o60o60d60.60p60i60c60'n120 0
+H720
+x font 0 CI
+f0
+V2736
+h360cB
+wh120cf
+60l60o60o60d60.60p60i60cn120 0
+H720
+wf5
+V2856
+h420c-
+60.wh120cf
+60l60o60o60d60.60p60i60cn120 0
+H720
+x font 0 CI
+f0
+V2976
+h360cn
+n120 0
+H720
+wf5
+V3096
+h420c-
+wh180cc
+60o60n60q60u60e60s60t60.60m60sn120 0
+H720
+wV3216
+h420c-
+wh180cd
+60e60a60t60h60.60m60sn120 0
+H720
+wV3336
+h420c-
+wh180ce
+60m60a60c60s60.60m60sn120 0
+H720
+wV3456
+h420c-
+wh180cf
+60a60m60i60n60e60.60m60sn120 0
+H720
+wV3576
+h420c-
+60.wh120cf
+60l60o60o60d60.60p60i60cn120 0
+H720
+wV3696
+h420c-
+wh180cs
+60l60a60u60g60h60t60e60r60.60m60sn120 0
+H720
+f1
+V3876
+cB
+67o50t28hwf5
+80bwf1
+90a44n50dwf5
+80Bwf1
+90w72i28l28lw58a44c44c44e44p50tw58aw74l28i28s39tw59o50fw64f33i28l28ew75n50a44m78e44s39.wf5
+81bwf1
+91s39i28m78p50l28yw81t28a44k50e44sw70t28h50ew75f33i28r33s39tw59f33i28l28ew75i28nw81t28h50ew75l28i28s39t28,w56b50u50twf5
+59Bwf1
+91l28o50a44d50sw70t28h50e44mwh109ca
+44l28l28.n120 0
+H720
+V3996
+cT
+61h50ew69l28i28s39tw53m78a44yw75b50ew69t28y50p50e44dw75o50nw75o50n50ew69l28i28n50ewh69Cem
+n120 0
+H720
+x font 0 CI
+f0
+V4176
+h360cB
+wh120cd
+60e60v60i60l60.60t60e60xwh120cs
+60a60t60a60n60.60t60e60xwh120c6
+60660660.60t60e60xwh120ce
+60m60a60c60s60.60t60e60xn120 0
+H720
+f1
+V4356
+Cem
+wh125co
+50rw58g50e44n50e44r33a44t28e44dw75b50yw75aw69U72n50i28xw75c44o50m78m78a44n50dwh75Cem
+n120 0
+H720
+x font 0 CI
+f0
+V4536
+h360cB
+wh120c<
+60e60c60h60owh120c*
+60.60t60e60xn120 0
+H720
+f1
+V4716
+cT
+61h50ew73l28a44t28t28e44rw63f33o50r33mwh108cr
+33e44q50u50i28r33e44sw69aw74U72n50i28xw80c44o50m78m78a44n50d50;wf5
+58s60a60mwf1
+90d50o50e44sw69n50o50tw58u50n50d50e44r33s39t28a44n50dw80t28h50ew74s39h50e44l28lw58f33i28l28ew74n50a44m78ew74m78e44t28a44c44h50a44r33a44c44t28e44r33s39,w55s39on120 0
+H720
+f5
+V4836
+cB
+wh130c*
+60.60t60e60xwf1
+94a44t28t28e44m78p50t28sw73t28ow84l28o50a44dw84aw78s39i28n50g50l28ew78f33i28l28ew78n50a44m78e44dwf5
+84*60.60t60e60xf1
+60.w84(33T61h50ewf5
+78<wf1
+94f33o50r33mwh112ci
+28sw73o50fw67c44o50u50r33s39ew78d50e44r33i28v50e44dw84f33r33o50mwf5
+h112cs
+60a60mf1
+60'33swf5
+73<n120 0
+H720
+f1
+V4956
+cc
+44o50m78m78a44n50d50.25)wf5
+83e60c60h60owf1
+85i28sw64n50o50tw53t28h50ew69o50n50l28yw75u50s39e44f33u50lw53c44o50m78m78a44n50dw75t28ow75r33u50nw75s39u50b50s39e44r33v50i28e44n50tw53t28owf5
+75Bf1
+60;w53f33o50rw58e44x50a44m78p50l28e44,n120 0
+H720
+x font 0 CI
+f0
+V5136
+h360cB
+wh120c<
+60g60r60e60pwh120c-
+60lwh120cE
+60m60a60c60swh120c*
+n120 0
+H720
+f1
+V5316
+cw
+72i28l28lw57l28o50a44dw79o50n50l28yw79t28h50o50s39ew73f33i28l28e44sw68c44o50n50t28a44i28n50i28n50gw79t28h50ew73s39t28r33i28n50gwf5
+79E60m60a60c60sf1
+60.w79F56i28n50a44l28l28y50,w54aw73s39p50e44c44i28a44lw57c44a44s39e44:w58awf5
+74Bwf1
+90w72i28t28hw80n50ow80a44r33g50u50m78e44n50t28sw69c44r33eh44Chy
+n120 0
+H720
+V5436
+ca
+44t28e44sw64a44nw75e44m78p50t28y50,w50n50a44m78e44l28e44s39sw64f33i28l28ew69w72i28t28h50i28nwf5
+75s60a60mf1
+60.n120 0
+H720
+V5592
+h250cT
+61h50ew69c44o50m78p50l28e44m78e44n50tw53o50fwf5
+58Bwf1
+85i28swf5
+64Df1
+60:n120 0
+H720
+x font 0 CI
+f0
+V5772
+h360cD
+wh120cd
+60e60v60i60l60.60t60e60xwh120cs
+60a60t60a60n60.60t60e60xwh120c6
+60660660.60t60e60xwh120ce
+60m60a60c60s60.60t60e60xn120 0
+H720
+f1
+V5952
+ce
+44r33a44d50i28c44a44t28e44sw77t28h50ew82f33i28l28e44sw77f33r33o50mwf5
+h116cs
+60a60mf1
+60'33sw78m78e44m78o50r33yw89(33n50o50tw67f33r33o50mwh117ct
+28h50ew83U72n50i28xw89m78a44c44h50i28n50e44'33sw78d50i28s39c44)33.wf5
+89Dwf1
+99w72i28t28h50o50u50tw67a44n50yw89f33i28l28ew83n50a44m78e44sn120 0
+H720
+V6072
+cr
+33e44m78o50v50e44sw64t28h50ew69c44u50r33r33e44n50tw53f33i28l28ew69f33r33o50mwf5
+h103cs
+60a60mf1
+60.n120 0
+H720
+V6228
+h250cT
+61h50e44r33ew73a44r33ew73t28h50r33e44ew73o50t28h50e44rw62c44o50m78m78a44n50d50sw68t28h50a44tw57r33e44l28a44t28ew73t28h50ew73c44u50r33r33e44n50tw57f33i28l28ew73t28ow79U72n50i28xw79f33i28l28e44s39.w79T61h50ewf5
+74wwf1
+90c44o50m78m78a44n50dw80w72r33i28t28e44sw69t28h50en120 0
+H720
+V6348
+cf
+33i28l28ew79t28ow85d50i28s39c44;w63w72i28t28h50o50u50tw63a44r33g50u50m78e44n50t28s39,w60i28tw63w72r33i28t28e44sw74t28h50ew79e44n50t28i28r33ew79f33i28l28ew78t28ow84t28h50ew78U72n50i28xw84f33i28l28ew78a44s39s39o50c44i28a44t28e44dw84w72i28t28hw84t28h50ew78c44u50r33r33e44n50tw62f33i28l28ew78i28nn120 0
+H720
+f5
+V6468
+cs
+60a60mwf1
+86(33i28tw54i28sw65t28h50ew70o50n50l28yw76c44o50m78m78a44n50dw76w72h50o50s39ew70d50e44f33a44u50l28tw54a44d50d50r33e44s39sw65i28sw65n50o50tw54d50o50t28)33.w76O72fw59c44o50u50r33s39e44,w51y50o50uw76c44a44nw76s39p50e44c44i28f33yw76a44nw76a44d50d50r33e44s39sw66t28ow77b50en120 0
+H720
+V6588
+cw
+72r33i28t28t28e44n50,w50a44n50dw75aw69d50i28f33f33e44r33e44n50tw53f33i28l28ew69n50a44m78e44,w50w72i28t28hw75t28h50ew69o50b50v50i28o50u50sw64s39y50n50t28a44x50:n120 0
+H720
+s8
+V6880
+Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+h40Cru
+n100 0
+H720
+V6980
+Cdg
+w70Aw78b40u40gw60p40r26e35v40e35n40t22sw51t22h40ewf5
+55bwf1
+68c35o40m62m62a35n40dw61f26r26o40mw83w58o40r26k40i22n40gw61w58h40e35nw61d40o40w58n40l22o40a35d40e35d40.w61B54e35c35a35u40s31ew56t22h40ew56m62e35n40uw61i22sw52m62o40r26ew56c35o40n40v40e35n40i22e35n40tw43a35n40y40w58a35y40,w41a35n40dw61b40eh35Chy
+n100 0
+H720
+V7080
+cc
+35a35u40s31ew55t22h40ew55m62e35t22h40o40dw60o40fw46c35h40o40o40s31i22n40gw60f26i22l22e35sw51f26r26o40mw82t22h40ew55c35o40m62m62a35n40dw60l22a35n40g40u40a35g40ew55i22sw51s31l22a35t22e35dw60t22ow60c35h40a35n40g40e35,w40t22h40ew55b40u40gw60h40a35s31n40'26tw42b40e35e35nw60f26i22x40e35d40.n100 0
+V7920
+p14
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 251504w50 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360c1
+60,60260wwh120c/
+60t60m60p60/60r60e60v60e60l60a60t60i60o60n60sn120 0
+H720
+f5
+V1020
+h360c/
+60t60m60p60/60r60e60v60e60l60a60t60i60o60n60s60:wh120c#
+604604n120 0
+H720
+V1200
+cs
+60a60mwf1
+85r33e44s39p50o50n50d50sw64w72i28t28hw75t28h50ew69f33i28l28ew70n50a44m78ew70a44n50dw76t28h50ew70n50u50m78b50e44rw59o50fw59c44h50a44r33a44c44t28e44r33sw65w72r33i28t28t28e44nw76t28ow76t28h50ew70f33i28l28e44.w76T61h50ewf5
+70w60r60i60t60ewf1
+86c44o50m78m78a44n50dw76o50nn120 0
+H720
+V1320
+ct
+28h50ew69b50u50t28t28o50nw753w75m78e44n50uw75i28sw64i28d50e44n50t28i28c44a44lw53i28nw75f33u50n50c44t28i28o50nw75t28ow75a44nw75u50n50a44d50o50r33n50e44dwf5
+75wwf1
+85c44o50m78m78a44n50d50.n120 0
+H720
+V1476
+h250cT
+61h50ew71o50t28h50e44rw60t28w72ow77c44o50m78m78a44n50d50s39,wf5
+52ewf1
+87a44n50dwf5
+77rf1
+60,w52r33e44a44dw77d50a44t28aw71f33r33o50mwh105cU
+72n50i28xw77f33i28l28e44s39.w77T61h50ewf5
+71ewf1
+87c44o50m78m78a44n50dw77c44l28e44a44r33sw66o50u50tw55t28h50ew72c44u50r33r33e44n50tn120 0
+H720
+V1596
+cf
+33i28l28e44,w57r33e44a44d50sw71t28h50ew76d50a44t28aw76f33r33o50mwh110ct
+28h50ew76n50a44m78e44dw81f33i28l28ew75(33o50rw64u50s39e44sw70t28h50ew75c44u50r33r33e44n50tw59f33i28l28e44'33sw70o50l28dw81n50a44m78ew75i28fw64n50o50n50ew75i28sw70e44x50p50l28i28c44i28t28l28yw81p50r33o50v50i28d50e44d50)33,n120 0
+H720
+V1716
+ca
+44n50dw76s39e44t28sw65t28h50ew70f33i28l28ew70n50a44m78e44.w77I33t28'33sw66m78u50c44hw77l28i28k50ew71awf5
+71Bwf1
+87c44o50m78m78a44n50d50,w52b50u50tw55p50u50t28sw66t28h50ew71i28n50f33o50r33m78a44t28i28o50nw77i28nw77t28h50ew71c44u50r33r33e44n50tw55f33i28l28ew71i28n50s39t28e44a44dw77o50fw60an120 0
+H720
+V1836
+cn
+50e44ww98o50n50e44.wf5
+76ewf1
+86w72i28t28h50o50u50tw54a44n50yw76f33i28l28ew70n50a44m78ew70i28sw65t28h50e44r33e44f33o50r33ew70a44nw76e44a44s39yw76w72a44yw76t28ow76r33e44f33r33e44s39hwf5
+76s60a60mf1
+60'33sw65c44o50p50yw76o50fw59aw70U72n50i28xw76f33i28l28e44.w76[33U72n50l28i28k50ew69i28nn120 0
+H720
+f5
+V1956
+ce
+60df1
+60,wf5
+61ewf1
+96d50o50e44s39n50'33tw64c44o50m78p50l28a44i28nw86i28fw69t28h50ew80f33i28l28ew80i28sw75m78o50d50i28f33i28e44d50.w86T61h50ew80p50r33i28n50c44i28p50l28ew80i28sw75n50o50tw64t28ow86p50r33o50t28e44c44tw64a44g50a44i28n50s39tw64t28h50i28n50g50sw75t28h50a44tw64c44a44nw87b50en120 0
+H720
+V2076
+cu
+50n50d50o50n50ew69i28fw58w72r33o50n50g50.25]w83S56i28n50c44ew69i28t28sw64j28o50bw75i28sw64t28ow75r33e44p50l28a44c44ew69t28h50ew69w72h50o50l28ew69t28e44x50t28,wf5
+50ewf1
+85n50e44v50e44rw58t28a44k50e44sw64a44nw75a44d50d50r33e44s39s39.n120 0
+H720
+V2232
+h250cT
+61h50ewf5
+78rwf1
+94c44o50m78m78a44n50dw84i28sw73l28i28k50ewf5
+78ef1
+60,w59b50u50tw62i28tw62d50o50e44s39n50'33tw62c44l28e44a44rw67t28h50ew78f33i28l28e44:w62t28h50ew78t28e44x50tw62i28nw84t28h50ew78U72n50i28xw84f33i28l28ew78r33e44p50l28a44c44e44sw73d50o50t28,w60o50rw68t28h50en120 0
+H720
+V2352
+cs
+39p50e44c44i28f33i28e44dw75t28e44x50tw53i28fw58a44nw75a44d50d50r33e44s39sw64i28sw64g50i28v50e44n50.n120 0
+H720
+x font 0 CI
+f0
+V2532
+h360cr
+wh120ce
+60m60a60c60s60.60m60sn120 0
+H720
+f1
+V2712
+ch
+50a44sw64e44s39s39e44n50t28i28a44l28l28yw75t28h50ew69e44f33f33e44c44tw53o50fn120 0
+H720
+x font 0 CI
+f0
+V2892
+h360c<
+60c60a60twh120ce
+60m60a60c60s60.60m60sn120 0
+H720
+f1
+V3072
+cT
+61h50ew73c44o50m78m78a44n50d50swf5
+68rwf1
+89a44n50dwf5
+79wwf1
+89w72i28l28lw57s39e44tw57t28h50ew73n50a44m78ew73o50fw62t28h50ew73f33i28l28ew73i28fw63t28h50ew74c44u50r33r33e44n50tw58f33i28l28ew74h50a44sw69n50ow80n50a44m78ew74a44l28r33e44a44d50yw80d50e44f33i28n50e44d50;wf5
+58ewf1
+90s39e44t28sn120 0
+H720
+V3192
+ct
+28h50ew69n50a44m78ew69e44v50e44nw75i28fw58t28h50ew69f33i28l28ew69a44l28r33e44a44d50yw75h50a44sw64o50n50e44.n120 0
+H720
+V3348
+h250cT
+61h50e44r33ew77i28sw72aw77c44o50m78m78a44n50d50,w58a44n50a44l28o50g50o50u50sw72t28owf5
+83xf1
+60,w58t28h50a44tw61i28t28e44r33a44t28e44sw72o50v50e44rw66f33i28l28e44sw72i28n50s39t28e44a44dw83o50fw67p50i28e44c44e44sw73o50fw67t28e44x50t28:wf5
+62Xwf1
+94(33c44a44p50i28t28a44lwf5
+62xf1
+60)33.n120 0
+H720
+V3468
+cT
+61h50ew79s39y50n50t28a44xw85i28sw74e44a44s39y50;w63i28t28'33sw74j28u50s39tw63l28i28k50ew79t28h50a44tw63o50fwf5
+68xwf1
+h95Cem
+wf5
+h134cX
+60/f2
+60p50a50t28t28e44r39nf5
+50/f2
+60c44o50m72m72a50n50df1
+50.w84(33T61h50ew78c44o50m78p50l28e44m78e44n50t28a44r33yw84c44o50m78m78a44n50dw84i28swf5
+73Yf1
+60,n120 0
+H720
+V3588
+ca
+44n50a44l28o50g50o50u50sw79t28owf5
+90yf1
+60.25)w98T61h50ew84e44f33f33e44c44tw68i28sw79t28ow90r33u50nw90t28h50ew84c44o50m78m78a44n50dw90i28nw90e44a44c44hw90f33i28l28ew84w72h50o50s39ew84m78e44n50uw90e44n50t28r33yw91(33t28h50a44tw69i28s39,w66w72h50o50s39ew85l28i28n50en120 0
+H720
+V3708
+cp
+50r33i28n50t28e44dw75b50yw75a44nwf5
+75fwf1
+85c44o50m78m78a44n50d50)w58m78a44t28c44h50e44sw64t28h50ew69p50a44t28t28e44r33n50.w75F56o50rw58e44x50a44m78p50l28e44,w50s39i28n50c44ew69a44nw75a44p50o50s39t28r33o50p50h50ew69i28d50e44n50t28i28f33i28e44sw64m78o50d50i28f33i28e44dw75f33i28l28e44s39,n120 0
+H720
+x font 0 CI
+f0
+V3888
+h360cX
+60/60'60/wh120cw
+n120 0
+H720
+f1
+V4068
+cw
+72r33i28t28e44sw66t28h50ew71c44h50a44n50g50e44dw77f33i28l28e44sw66o50u50tw55t28ow77d50i28s39c44.w77H72e44r33ew71i28sw66aw71l28o50n50g50e44rw61e44x50a44m78p50l28e44:w56f33i28n50dw78a44l28lw56u50s39e44sw67o50fw61aw72p50a44r33t28i28c44u50l28a44rw61v50a44r33i28a44b50l28ew72i28nw78t28h50ew72Cn120 0
+H720
+V4188
+cs
+39o50u50r33c44ew69f33i28l28e44s39:n120 0
+H720
+x font 0 CI
+f0
+V4368
+h360cX
+60/60\60.60c60$60/wh120c,
+60x60/60v60a60r60i60a60b60l60e60/60+60-60pn120 0
+H720
+f1
+V4548
+cW
+94ew69c44a44nw75u50s39ew69a44nwf5
+75fwf1
+85c44o50m78m78a44n50dw75t28ow75i28d50e44n50t28i28f33yw75w72h50i28c44hw75f33i28l28ew69t28h50ew69v50a44r33i28a44b50l28ew69a44p50p50e44a44r33sw64i28n50:n120 0
+H720
+x font 0 CI
+f0
+V4728
+h360cX
+60/60\60.60c60$60/wh120c,
+60g60/60v60a60r60i60a60b60l60e60/wh120c{
+n120 0
+H720
+V4848
+h610cf
+n120 0
+H720
+V4968
+h610c,
+60x60/60v60a60r60i60a60b60l60e60/60+60-60{n120 0
+H720
+wV5088
+h860c=
+n120 0
+H720
+wV5208
+h860cp
+n120 0
+H720
+V5328
+h610c}
+n120 0
+H720
+V5448
+h360c}
+n120 0
+H720
+f1
+V5628
+cH
+72e44r33e44,w59t28h50ewf5
+78gwf1
+94c44o50m78m78a44n50dw84g50u50a44r33a44n50t28e44e44sw73t28h50a44tw62o50n50l28yw84t28h50ew78n50a44m78e44sw73o50fw67f33i28l28e44sw73c44o50n50t28a44i28n50i28n50gw84t28h50ew78v50a44r33i28a44b50l28ew78w72i28l28lw63b50ew79p50r33i28n50t28e44dw85(33b50u50tn120 0
+H720
+V5748
+cb
+50e44w72a44r33ew73t28h50a44twf5
+57s60a60mwf1
+89m78a44yw79c44o50n50f33u50s39ew73m78a44t28t28e44r33sw68b50yw79p50r33i28n50t28i28n50gw79t28h50ew73n50a44m78e44sw68o50fw62f33i28l28e44sw68i28tw57r33e44a44d50sw68i28nw79d50u50r33i28n50gw78t28h50ew72c44o50m78m78a44n50d50)33.w78T61h50en120 0
+H720
+f5
+V5868
+c=
+wf1
+85c44o50m78m78a44n50dw75s39h50o50w72sw64w72h50e44r33ew69i28nw75t28h50ew69f33i28l28ew69t28h50ew69v50a44r33i28a44b50l28ew69a44p50p50e44a44r33s39,w50a44n50dw75t28h50ewf5
+69pwf1
+85c44o50m78m78a44n50dw75p50r33i28n50t28sw64t28h50ew69l28i28n50e44.n120 0
+H720
+V6024
+h250cT
+61h50ewf5
+74Dwf1
+90c44o50m78m78a44n50dw80i28sw69h50a44n50d50yw80a44sw69t28h50ew74t28a44r33g50e44tw58o50fw63a44nwf5
+81Xf1
+60.w81T61h50i28sw70e44x50a44m78p50l28ew75d50e44l28e44t28e44sw70f33r33o50mwh109ct
+28h50ew75m78e44n50uw81a44l28lw59Cw98f33i28l28e44sw70t28h50a44tn120 0
+H720
+V6144
+cd
+50ow75n50o50tw53c44o50n50t28a44i28nw75aw69p50a44r33t28i28c44u50l28a44rw58v50a44r33i28a44b50l28e44:n120 0
+H720
+x font 0 CI
+f0
+V6324
+h360cX
+60/60\60.60c60$60/wh120c,
+60v60/60v60a60r60i60a60b60l60e60/wh120cD
+n120 0
+H720
+f1
+V6504
+cI
+33fw58n50ow75p50a44t28t28e44r33nw75i28sw64p50r33o50v50i28d50e44dw75f33o50rw58t28h50ewf5
+69Xf1
+60,w50t28h50ew69c44o50m78m78a44n50dw75(33w72h50i28c44hw75d50e44f33a44u50l28t28sw64t28owf5
+75ff1
+60)w58i28sw64r33u50nw75i28nw75a44l28lw53f33i28l28e44s39,w50s39on120 0
+H720
+x font 0 CI
+f0
+V6684
+h360cX
+wh120cD
+n120 0
+H720
+f1
+V6864
+cc
+44l28e44a44n50swf5
+64s60a60mwf1
+85u50pw75f33o50rw58aw69f33r33e44s39hw75s39t28a44r33t28.n120 0
+H720
+V7020
+h250cB
+67u50tw53r33a44t28h50e44rw58t28h50a44nw75w72o50r33k50i28n50gw75a44n50yw75f33u50r33t28h50e44r33,w50l28e44t28'33sw64s39t28o50pw75n50o50w72:n120 0
+V7920
+p15
+x font 1 R
+x font 2 I
+x font 3 B
+x font 4 BI
+x font 5 CW
+x font 6 H
+x font 7 HI
+x font 8 HB
+x font 9 S1
+x font 10 S
+s10
+f1
+H720
+V480
+h2052Chy
+w33 25150550 h25Chy
+wn120 0
+H720
+x font 0 CI
+f0
+V900
+h360cq
+n120 0
+H720
+f5
+V1020
+h360c$
+n120 0
+H720
+f1
+V1236
+h250cS
+56o50m78ew75o50fw64t28h50ew75f33i28l28ew75m78a44n50i28p50u50l28a44t28i28n50gw81c44o50m78m78a44n50d50sw70c44a44nw81b50ew75u50n50d50o50n50e44:w59u50n50d50o50i28n50gw81awf5
+75ff1
+60,wf5
+56ef1
+60,w56o50rwf5
+64rwf1
+91r33e44s39t28o50r33e44sw70t28h50ew76p50r33e44v50i28o50u50sn120 0
+H720
+V1356
+cs
+39t28a44t28ew69o50fw58t28h50ew69f33i28l28e44,w50b50u50twf5
+53wf1
+60,wf5
+50Bwf1
+85a44n50dwf5
+75Dwf1
+85a44r33ew69i28r33r33e44v50o50c44a44b50l28e44.w75A72n50d50,w50o50fw58c44o50u50r33s39e44,w50s39ow75i28swf5
+64qf1
+60.n120 0
+x trailer
+V7920
+x stop
diff --git a/sys/doc/sam/sam0.png b/sys/doc/sam/sam0.png
new file mode 100644
index 000000000..eb488950f
--- /dev/null
+++ b/sys/doc/sam/sam0.png
Binary files differ
diff --git a/sys/doc/sam/sam1.png b/sys/doc/sam/sam1.png
new file mode 100644
index 000000000..dcc645778
--- /dev/null
+++ b/sys/doc/sam/sam1.png
Binary files differ
diff --git a/sys/doc/sam/sam2.png b/sys/doc/sam/sam2.png
new file mode 100644
index 000000000..dfb72baba
--- /dev/null
+++ b/sys/doc/sam/sam2.png
Binary files differ
diff --git a/sys/doc/sam/sam3.png b/sys/doc/sam/sam3.png
new file mode 100644
index 000000000..f33a701c2
--- /dev/null
+++ b/sys/doc/sam/sam3.png
Binary files differ
diff --git a/sys/doc/sam/sam4.png b/sys/doc/sam/sam4.png
new file mode 100644
index 000000000..6d85990df
--- /dev/null
+++ b/sys/doc/sam/sam4.png
Binary files differ