Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added DocBook and PS versions

  • Loading branch information...
commit 75b9acdedadf612fe103e9822c527067220883b1 1 parent 2384274
@hintjens hintjens authored
View
3  .gitignore
@@ -9,9 +9,6 @@ node_modules
*.o
.DS_Store
*~
-book.xml
-book.ps
-book.pdf
ebook.xml
book
View
742 .signatures
@@ -1,124 +1,124 @@
9ac433a6bf5e85fc6c684ec22d64141aae1b79e0 examples/Scala/rrworker.scala
c9bcc4aabb7a713ad989d43af1eb6293b77da4e4 examples/Racket/rrworker.rkt
-3dd24a89abc142240e9d1866c0dd1793f6525eca examples/CL/rrclient.lisp
-ee25f638ba3392c24c2226e9a6380b4aa9b2abfd examples/C/mtrelay.c
03e21f2d6542a348e8b87a7b036d4189cc0e6125 examples/Lua/rtdealer.lua
+ee25f638ba3392c24c2226e9a6380b4aa9b2abfd examples/C/mtrelay.c
+3dd24a89abc142240e9d1866c0dd1793f6525eca examples/CL/rrclient.lisp
0cf5bfdea92aec874931f5040065cc665b52ccb4 examples/C#/clonesrv1.cs
018e2676e32e9fbd9b8c7b6751b06d72b844fca4 examples/Scala/mspoller.scala
-b0b1027f750aeac97cfc8300b16d06c0393d1742 examples/Haskell/interrupt.hs
-2b7d9e0bebc3b4d7435ce6832aa31757db86cf3a examples/Lua/rrbroker.lua
293fdb7ec6feeadcf0d31dedbc3d857f872df4a3 examples/C++/mdbroker.cpp
-15807412876d207a7b744b378ec0d830c05e8c92 examples/Tcl/msgqueue.tcl
-174d1391cc48e181a848dc26e0e81780c8c1be1f examples/Tcl/mdworker.tcl
+2b7d9e0bebc3b4d7435ce6832aa31757db86cf3a examples/Lua/rrbroker.lua
+b0b1027f750aeac97cfc8300b16d06c0393d1742 examples/Haskell/interrupt.hs
f4a282b80963dd2df27b0b120b040c43bc58560e images/fig64.html
+174d1391cc48e181a848dc26e0e81780c8c1be1f examples/Tcl/mdworker.tcl
+15807412876d207a7b744b378ec0d830c05e8c92 examples/Tcl/msgqueue.tcl
ef4380c9660bd2c7995e2810da91f9c7fd8b1dca images/fig17.html
f38a17f3d6d7d26a9c62ef5866549841e1d8f90d examples/Scala/wuproxy.scala
-0e8d427bdb8810d7c66ca44fa5c1a45918dd1a89 images/fig24.txt
13a35d1474a60c0cd141661d89a11b8136300307 examples/C/interrupt.c
-652d9a02fdccdec5a04b9d310aee7c0a294bd851 images/fig23.txt
+0e8d427bdb8810d7c66ca44fa5c1a45918dd1a89 images/fig24.txt
d0b6485cfa2d67f2cc07204c234eae3a733f0ecd examples/Java/wuserver.java
-92387031ffc133b6a7f2caaa55af6a7ca2d2cc82 examples/Racket/syncsub.rkt
+652d9a02fdccdec5a04b9d310aee7c0a294bd851 images/fig23.txt
f8d140b04350536aba6cf27507894edb14749d7f examples/C#/psenvpub.cs
+92387031ffc133b6a7f2caaa55af6a7ca2d2cc82 examples/Racket/syncsub.rkt
1dd7a2c209674a83ee9059b31aaec201b173451d examples/Lua/suisnail.lua
9fa06738222d9c8e0dc28ec7df516180c4a2a68e listings/C/listing_26.c
-d3da354c643e72bae2c36c58983f482f9ea5d5b3 examples/C/mtserver.c
88831f7447da7e28f764beacc0f5b4275e43639d examples/Lua/lpclient.lua
+d3da354c643e72bae2c36c58983f482f9ea5d5b3 examples/C/mtserver.c
181c31aadb8f3626f7fd901d7ba39eed20ba8749 images/fig71.html
13b93afc9fdce597b792f1f7471fa7fc7c56c418 examples/Tcl/mdwrkapi.tcl
07b69527c5ecd0b8f312f789184db93ab65aa84b examples/Perl/syncsub.pl
-14124f160019f19e4c3a3fea35c8b1f04ee8252d examples/C/syncpub.c
59530e89de1f8081d3a99467fd550f5004f60158 examples/C++/spworker.cpp
-66db8c6bee7ea765637e3c9dcba7ba61f992430d examples/C/rtpapa.c
+14124f160019f19e4c3a3fea35c8b1f04ee8252d examples/C/syncpub.c
938f008307e416725da0c0e259e45a2abf4ce7a3 examples/Ruby/lpserver.rb
+66db8c6bee7ea765637e3c9dcba7ba61f992430d examples/C/rtpapa.c
ab91077fdb654742d9ca8664dd03dd882cde3379 examples/Haskell/syncpub.hs
-0dd7f41b807793717964d57b6335187de79c685b listings/C/listing_35.c
d8edf695055631f63d493a8a0575452fd77ce7b2 examples/PHP/flserver1.php
+0dd7f41b807793717964d57b6335187de79c685b listings/C/listing_35.c
170a3cf6fb74377221665dbf3624432351e4073d examples/Node.js/interrupt.js
637e2f993edf5818f4b9c5a1bffa34af4bc271a0 examples/PHP/mtserver.php
511707f5b0130a4d53950e73fa8ad5bf4f68d3cf examples/Tcl/bstar.tcl
2d753fbefce2e109940f2bb2838e61aafac95460 examples/Tcl/rrclient.tcl
-384e1e14837f20d365441aa79239c95aa76968ff images/fig5.txt
62ec29c2756d9729ac7a59bbd9f02eb9899f15be images/fig57.html
-1d3cb45449ed4a97ece7c64e46edd29220ac8fa0 examples/C/taskwork.c
+384e1e14837f20d365441aa79239c95aa76968ff images/fig5.txt
10ce004a992bf2b38051563980f307a1485f1667 examples/PHP/mdclient2.php
-8bbd8e22934f7e5fe1f39fae82fcf1bd6fa63fdc examples/Java/psenvsub.java
+1d3cb45449ed4a97ece7c64e46edd29220ac8fa0 examples/C/taskwork.c
fd0914a0252e81860c1daa233035356273f891bb images/fig32.html
+8bbd8e22934f7e5fe1f39fae82fcf1bd6fa63fdc examples/Java/psenvsub.java
051a5771f9fece84837c2948aa50fdf9e97452c6 examples/Q/mtrelay.q
07c12be9e4d3e6295d55fe9fb60a2bf4ce933b45 examples/Java/taskwork.java
443d1fe7c807fac9dcc5b9a6757f123cab975b0e examples/C/clonesrv5.c
-a19c24bfe53d0c96a8aaa2f0f2a6c4379406d688 images/fig47.txt
49841f3eacf590aaf74d13cd0d61e882081e9b85 examples/C/fileio3.c
+a19c24bfe53d0c96a8aaa2f0f2a6c4379406d688 images/fig47.txt
9bdb1dfc211fb241067a23e34d7553ea5c800cf0 examples/Tcl/identity.tcl
-912dcd6d50b2de75fc73a2b9558c24264cb3e0f4 examples/Felix/msreader.flx
-562774f03686167301a66852981bbf22b1e934b0 examples/Go/taskwork2.go
27dd2f62135daf36e5699d9a693c36b5d5811d07 examples/PHP/lruqueue.php
-b9fbe73f822c9ce267a621ee1431965c4d896850 images/fig72.txt
-f6097aefad82e399cfb61cbd6c5e4b751cf7fd0d examples/Lua/peering2.lua
-547f0d811b52a4cfa78e463483f2f14df13a0fdc examples/PHP/mdbroker.php
+562774f03686167301a66852981bbf22b1e934b0 examples/Go/taskwork2.go
+912dcd6d50b2de75fc73a2b9558c24264cb3e0f4 examples/Felix/msreader.flx
ceebcdba5aed54e7db291505ac5f1399a9c23d94 examples/Tcl/flclient2.tcl
+547f0d811b52a4cfa78e463483f2f14df13a0fdc examples/PHP/mdbroker.php
+f6097aefad82e399cfb61cbd6c5e4b751cf7fd0d examples/Lua/peering2.lua
+b9fbe73f822c9ce267a621ee1431965c4d896850 images/fig72.txt
b0e55c0d613a902727434237a2b90769f64e8713 examples/Lua/psenvsub.lua
be4f0a925d2a464c226292d33929eac039ef37ac examples/Perl/mtserver.pl
-786897c8ebde59b10088dde8d437d285073d9cbb examples/Erlang/interrupt.es
9892d6802589fdeba401f2365b1f9f4df403d0e6 examples/C/ppqueue.c
-df5b4f95d62b2607daa139300edb1bcaeb8e1b74 images/fig26.html
+786897c8ebde59b10088dde8d437d285073d9cbb examples/Erlang/interrupt.es
d363b4fd752513f77cef05b4f7314940f6a90308 examples/Haxe/peering2.hx
-2fd07614cf3d592062bb2da2b2fa525ec96005d3 examples/Lua/version.lua
+df5b4f95d62b2607daa139300edb1bcaeb8e1b74 images/fig26.html
f2a3a4433085201149c4544e2f9d366cc175eaa3 images/fig24.html
+2fd07614cf3d592062bb2da2b2fa525ec96005d3 examples/Lua/version.lua
9821486c239a427fbbb618d95ee540efd7f41499 examples/Java/lpserver.java
-846d5c3619c6abdbaec1b61c15412619bd758553 examples/Java/mdcliapi2.java
-bfa6b90426ddd729f836e1e967726f491a509f24 listings/C/listing_20.c
501eb2114abc8d3c680b65e47868cd12804e1951 examples/Haxe/syncsub.hx
+bfa6b90426ddd729f836e1e967726f491a509f24 listings/C/listing_20.c
+846d5c3619c6abdbaec1b61c15412619bd758553 examples/Java/mdcliapi2.java
d8481c31426c5d10d2bae3b859f937b8c20b23af examples/Lua/rtmama.lua
f6cc0a1e96bf00b26ed0ac7cd5e65c3c88c9a65d images/fig43.txt
17620f6abe25b38d87a145eda3e4fe74e9b1570d examples/PHP/psenvsub.php
-923dbe643224307b4fc68a9a6e8611fd34227dc4 images/fig55.txt
07f82eb14faaba6189a45fa251713fef8f763dd7 images/fig18.html
+923dbe643224307b4fc68a9a6e8611fd34227dc4 images/fig55.txt
d737104b56d7f8ebf71728e4f3d1f9715ec7def0 examples/Java/mmiecho.java
-c32b5074719f1c1b4deb37156dd26aecf685e04e examples/Ruby/wuclient.rb
87171fa82828d9cc6d211235ede21b0ee6f22aea listings/C/listing_7.c
-fb24b844e23eaf2ef31ad7d29e3ec6ef30a1d397 images/fig39.html
-9bb644dd26986fdf2b99ae4cea941421d317b1e0 examples/C/mdbroker.c
+c32b5074719f1c1b4deb37156dd26aecf685e04e examples/Ruby/wuclient.rb
7c24c3529c2c3f08145022f26044a816bb7666cf images/fig66.html
+9bb644dd26986fdf2b99ae4cea941421d317b1e0 examples/C/mdbroker.c
+fb24b844e23eaf2ef31ad7d29e3ec6ef30a1d397 images/fig39.html
b098af3930b40d9f2ffd8680e174432a925f1e11 images/fig52.html
-cddbf90759ae1b9fc7bf93a1a710ef7b74358e8f examples/C#/mspoller.cs
787b6fb1df6356927fb968f8e911ed5f1a8886a0 examples/Haskell/tasksink2.hs
+cddbf90759ae1b9fc7bf93a1a710ef7b74358e8f examples/C#/mspoller.cs
f9b0162f2b35fac0e376713f2e3a8022632b62fd examples/Tcl/bstarsrv2.tcl
-841b6ae78a2ba944c88997acbbeb2551442405c9 images/fig30.txt
d478da3982205d0cef8c270104a57bd7638357eb examples/PHP/mdcliapi2.php
-66c18b7c9301454706948a48eecb1110de6b8c4f examples/Objective-C/tasksink.m
-d8413dd2158176ae00dfe8a58e7389dfb72c2361 examples/Java/spworker.java
+841b6ae78a2ba944c88997acbbeb2551442405c9 images/fig30.txt
28ff5591f385cb68e9d872a1d5eee4c20e1c85ec examples/C/flclient1.c
-7f37deb454641f41ec66955238771d287fbf7081 images/fig8.html
+d8413dd2158176ae00dfe8a58e7389dfb72c2361 examples/Java/spworker.java
+66c18b7c9301454706948a48eecb1110de6b8c4f examples/Objective-C/tasksink.m
89a88496ac9821d3c4385b6595fac78f2dd88350 examples/Java/mdwrkapi.java
+7f37deb454641f41ec66955238771d287fbf7081 images/fig8.html
9ed22075388d5b17b79613e1593de00e5c1b5f81 examples/Clojure/rtdealer.clj
-f365e00a8e88c5f8044858b0b0edcf6dccae3719 examples/Node.js/rrbroker.js
-9aa75f775de177fe937c603fd4038acda1f61301 examples/C++/psenvpub.cpp
ae49804afca1123975717706669b1ea7c37a2494 examples/Haxe/mdclient2.hx
-4f6b02addf92602f48cec666d6ad781107005587 examples/Objective-C/wuserver.m
+9aa75f775de177fe937c603fd4038acda1f61301 examples/C++/psenvpub.cpp
+f365e00a8e88c5f8044858b0b0edcf6dccae3719 examples/Node.js/rrbroker.js
bde4c8de6a498cb01b13077939246438f2bea09e examples/Tcl/clonesrv5.tcl
+4f6b02addf92602f48cec666d6ad781107005587 examples/Objective-C/wuserver.m
8626d9c418ed6051c09cc3ee337e1fd3496df000 examples/PHP/syncsub.php
664e3b3bf37343cf25fc9493c08ea0ecbea96238 examples/CL/rrworker.lisp
a0752a9cd1cecea192f96b3731e3871a2bce40b0 examples/Lua/mtserver.lua
-1ca069bacbf49b3d30303f9bf8f1abf62195b9f7 examples/F#/wuclient.fsx
55656d8465d10cd692818447ef34a666a0ba7c06 examples/PHP/peering3.php
+1ca069bacbf49b3d30303f9bf8f1abf62195b9f7 examples/F#/wuclient.fsx
cac315ccfa30cd0e1e77283847313252a1f0f6e0 images/fig12.txt
-6d576d99815c2249ea64216f89b5cbd08ce6eb00 examples/Clojure/hwclient.clj
a962bf82044ad24a68e58e615bde56e925084eca examples/Python/bstarcli.py
+6d576d99815c2249ea64216f89b5cbd08ce6eb00 examples/Clojure/hwclient.clj
792a34f83a7cde05bd6ef1871ab627805f832e15 examples/PHP/wuclient.php
38659557bcd2a0a16f437209b34276e763806d0d examples/Tcl/msreader.tcl
-cf771c56bcc2cfb37210b06c0c216b1014f04a48 examples/CL/tasksink.lisp
-cdc429a6a307669bfc42e2a0ea1cd900c0f1f4b3 examples/Objective-C/mspoller.m
-33e230fb3cd17ee9169f573ada741bbeba323108 examples/PHP/tasksink2.php
7ee1ac5b3382b0a11b74518f49046170e134bfff listings/C/listing_15.c
-269d95e8cf985bf0e278fe0472b6dde66e16d4a3 examples/C++/tasksink2.cpp
+33e230fb3cd17ee9169f573ada741bbeba323108 examples/PHP/tasksink2.php
+cdc429a6a307669bfc42e2a0ea1cd900c0f1f4b3 examples/Objective-C/mspoller.m
+cf771c56bcc2cfb37210b06c0c216b1014f04a48 examples/CL/tasksink.lisp
6b7633b5f6cf59eb824181fcacdc22b3d1140946 examples/Node.js/syncpub.js
+269d95e8cf985bf0e278fe0472b6dde66e16d4a3 examples/C++/tasksink2.cpp
427a199dbaa57dca462fa23fa43203d335de6a67 images/fig33.txt
e1d6f2b798710110e432bc74e45cd4e1979b4e28 examples/Python/rrclient.py
-984c536d1462d38471bc7d0f3291552ddf496b90 examples/C++/rrworker.cpp
b29f2932e43fea602ee611876a9c57dda962d8b2 examples/PHP/lpclient.php
+984c536d1462d38471bc7d0f3291552ddf496b90 examples/C++/rrworker.cpp
83d5e642c342fb7f599fdc0afd2686d664036888 examples/Racket/wuclient.rkt
-ad548452afddc01daee4bdb98975c4a59c9f707d examples/Clojure/mtserver.clj
bccbdf4e1045c7334a4d2c971a8858869290d464 examples/Haxe/tripping.hx
+ad548452afddc01daee4bdb98975c4a59c9f707d examples/Clojure/mtserver.clj
13276c6fe6faf8a91134745baa57c3a7c768f4e6 examples/Lua/peering1.lua
b1c54e1be6afafcf094b62dc618f1e6933a42071 images/fig52.txt
5ead8e955ffd3aef093962fedf4728d31ba9b8c3 examples/Lua/mdworker.lua
@@ -126,12 +126,12 @@ b1c54e1be6afafcf094b62dc618f1e6933a42071 images/fig52.txt
b02005487696f2e75f5fe6ebc2a9d6f34d425425 examples/Erlang/hwclient.es
543e138710ce43a7ea404bfdb32df71a3cafa18a examples/Haxe/identity.hx
875903d3c47dfeb6555a29782523bc3b611fd62d examples/Python/clonecli1.py
-e408394be2f23ed766dbfcb20b9130cf11eb3745 images/fig34.txt
c9271a554edc449717e440902a55d35852cbf8bf examples/C#/lruqueue2.cs
+e408394be2f23ed766dbfcb20b9130cf11eb3745 images/fig34.txt
c283682b3f4822484ca9aaa9e54d59a1e86eff63 examples/PHP/peering1.php
cf7d7a15daabf2b4959474ce3fb953d169595876 examples/Python/mdcliapi2.py
-533912e22da75f4c27e8f865dca8858b804f0346 examples/C++/mtserver.cpp
5e920cc8ab69c567a8e86f514ed330b684ec8803 examples/Java/lpclient.java
+533912e22da75f4c27e8f865dca8858b804f0346 examples/C++/mtserver.cpp
ad1ee934a61a9ba4f7a27303bb339dcb69181ded examples/Go/mtrelay.go
f5255561e6c274c9214ca1e53e4b40d6fff86d47 examples/Java/tripping.java
a74a8897d18ed22edf1ebcfb0833166b97cfc462 examples/PHP/rtpapa.php
@@ -140,366 +140,366 @@ a4bd570b04fee9601ceeb9a256f05a67104852eb examples/Ruby/mdworker.rb
b9176d1cf9d04301ee470dbe13e3abb4baee3360 examples/Java/version.java
dfe97e2297014f74a9941bbe0d28d6021de0eb51 examples/F#/syncpub.fsx
4af7206f4c2db4a01b7c6cadce793691c4b75fbb images/fig36.txt
-a82cf8ad385ceee6d9a63e6d884e0e78af1e7bea images/fig14.txt
-81ca7b3c974d97c050af18a864a0f160aad94b28 examples/Haxe/rrclient.hx
8eb809512ec36dd88d238bf9a349be6a890f0d31 images/fig47.html
+81ca7b3c974d97c050af18a864a0f160aad94b28 examples/Haxe/rrclient.hx
+a82cf8ad385ceee6d9a63e6d884e0e78af1e7bea images/fig14.txt
7adfa91c248ebe4b95070a0fed95f65cc7990f14 images/fig58.txt
-6002771776c50e8c60cbb4a1255eaba19345639f examples/C#/msgqueue.cs
ce11487c92b25457062d16cfa03aaee428dadc96 examples/Tcl/flclient1.tcl
-31fdb5d9bdf11092f0ca9d760a98027ff292ab73 images/fig64.txt
-09fc69810081e4297ae575b4d5eaf6c348005ed8 examples/Python/clonesrv1.py
+6002771776c50e8c60cbb4a1255eaba19345639f examples/C#/msgqueue.cs
fb8ddd9a1c56d41622bc9205633cd616abbee46d examples/Python/clonecli4.py
+09fc69810081e4297ae575b4d5eaf6c348005ed8 examples/Python/clonesrv1.py
+31fdb5d9bdf11092f0ca9d760a98027ff292ab73 images/fig64.txt
c138cc9c379c47edeb9c9f1c1c837554a2a96d3a examples/Clojure/identity.clj
15cb6e2889cd48e9137f43e9184b542a909ed3bc examples/C#/wuserver.cs
4fc68495559f6f14e89b297599616af9ab5aa7c5 examples/C++/syncpub.cpp
6433ce6ec3b2cc7e49c0910bdaa6d0823f8bcaa1 images/fig49.txt
-4c355c3ee021f76a7a3c17fe8d73084f67dad1ff examples/C#/version.cs
e028c4b192655fc17caa2d93271f4b4408e10ace examples/C#/clonecli1.cs
-0198a1a03c593167b4b45a4c26bc7aad92824dc7 examples/PHP/tasksink.php
-b1878c6c5ee140cf1c0c1232009d1773d964750d examples/Python/wuproxy.py
+4c355c3ee021f76a7a3c17fe8d73084f67dad1ff examples/C#/version.cs
5823cb8a50a2842cf4595d3d29fe65db5372cd31 examples/Tcl/flserver3.tcl
+b1878c6c5ee140cf1c0c1232009d1773d964750d examples/Python/wuproxy.py
+0198a1a03c593167b4b45a4c26bc7aad92824dc7 examples/PHP/tasksink.php
d04820418d88a01fd1cfc08950cdc0af487f8ef4 images/fig43.html
-206154a961e75476262ea0e692a02a117d1bcbcd listings/Python/listing_2.py
-5df24f1dde4fab995982f07ffac0bb73d3fcfc4d examples/CL/tasksink2.lisp
a5b4d19fd183bab2c6e2cf697fbe745881b96b9d listings/C/listing_31.c
-261335063778f7117da81a0fcefd0ea5e7ba4f01 examples/F#/taskvent.fsx
-8bee4389dc482ea41a969edc0f0a74d3d7382665 examples/Node.js/taskwork.js
+5df24f1dde4fab995982f07ffac0bb73d3fcfc4d examples/CL/tasksink2.lisp
+206154a961e75476262ea0e692a02a117d1bcbcd listings/Python/listing_2.py
040066b78c88f691baccd5f532e14e5f1cf13146 examples/Haskell/identity.hs
+8bee4389dc482ea41a969edc0f0a74d3d7382665 examples/Node.js/taskwork.js
+261335063778f7117da81a0fcefd0ea5e7ba4f01 examples/F#/taskvent.fsx
d07c0a1d4aed768a854f2ca8aeff0cb31a0e63b4 examples/C#/interrupt.cs
-6f356d1d98158e5ded441b702cca208aca02f052 examples/Haxe/wuclient.hx
-e51a5ba89f2f990a74143e947d5eb138b4437bd0 examples/C/tasksink2.c
3a415228805efc00cc76ee0ddd1c156ec0931f04 examples/Ruby/mdbroker.rb
+e51a5ba89f2f990a74143e947d5eb138b4437bd0 examples/C/tasksink2.c
+6f356d1d98158e5ded441b702cca208aca02f052 examples/Haxe/wuclient.hx
dbc33fdbb0686877dd5998af2d562963ed707664 images/fig30.html
e6b9b1a9aa818ea53f147962ffb33ccd7df37c21 examples/Tcl/spworker.tcl
3ccfe79cf5c8040097f9bf2c91be166a24bcb13f examples/Ruby/psenvpub.rb
77ecd4af1056bf7ab3f5b5a2b370716b270f63d3 examples/Scala/rtpapa.scala
abf89204ea9a06221532aa245cd54a777110c027 examples/Tcl/clonecli3.tcl
-87bb28c49bb1dc83b09dd58aac624a0ea8c06761 examples/C#/mtserver.cs
6d7629f3a49bffaef56ad21691dd42178608c8b5 examples/Ruby/ticlient.rb
-dc8c502cb2abc70fe161658cd4020d1b4cd064ee images/fig7.html
+87bb28c49bb1dc83b09dd58aac624a0ea8c06761 examples/C#/mtserver.cs
01b94a290674970a11b07b24f76872a78cfb238f examples/Racket/syncpub.rkt
-b6c66da3f3aae478cbc8b242b383d1b0093af28c examples/Python/msgqueue.py
+dc8c502cb2abc70fe161658cd4020d1b4cd064ee images/fig7.html
8902b1048b10b42891428c96b2a607b482baf56e images/fig69.html
+b6c66da3f3aae478cbc8b242b383d1b0093af28c examples/Python/msgqueue.py
80b307c8f059dd6b50e2c9e3b1ecfdccbd4985f2 examples/C/bstar.c
e28cf8399c18d455f6a8ce2bbc05f294ac742778 images/fig29.txt
-49cf75ff9f84a50a44edae7d4b502a928df479a6 examples/C/mdwrkapi.c
28b2b15746d80f3871d749d7de62a66947758b77 listings/C/listing_33.c
+49cf75ff9f84a50a44edae7d4b502a928df479a6 examples/C/mdwrkapi.c
02a04e030422622a26fac6a7140b56990c28ce13 examples/Python/msreader.py
-5b08d57d5d00baca0b23a3d9d4c913969325eaa5 examples/C/bstarsrv2.c
21045a8035a54064030364d694e249b9fcc5c209 examples/Tcl/clonecli2.tcl
-f0dc629d585678c65bcba97eb71058486994bc96 examples/Node.js/taskvent.js
+5b08d57d5d00baca0b23a3d9d4c913969325eaa5 examples/C/bstarsrv2.c
d89583bf0ecc6284bea5eb764b875be3bc38836e examples/Haxe/peering1.hx
-6b1d7f5a62330a7fcccf3a16392f80ebbac88f6c examples/C#/tasksink.cs
+f0dc629d585678c65bcba97eb71058486994bc96 examples/Node.js/taskvent.js
1ba13ef5d50279d39bac2d12559b4bf6457f41a2 examples/C++/mdworker.cpp
+6b1d7f5a62330a7fcccf3a16392f80ebbac88f6c examples/C#/tasksink.cs
2691513bb53d9076b9e7420faec7ffd2a33708ae examples/Python/taskwork.py
013a936720eec67c64d2c6cd813a9285445e6ed7 examples/Java/mdbroker.java
d7e46210eb9df18f7192ba045b12f39218cc6922 examples/Q/msgqueue.q
-96e6063c141fe6a77fff308da4d13200e51d933f listings/C/listing_3.c
36e5cfa4e087534ee2b5210a84da17590e34546e examples/Haxe/taskwork2.hx
-19d199668252c2efd204b5a1b8a5f78e4d281b17 examples/Scala/tasksink2.scala
+96e6063c141fe6a77fff308da4d13200e51d933f listings/C/listing_3.c
513a5190bea8aef397ddc21748abd992a9b82e84 examples/F#/lruqueue.fsx
+19d199668252c2efd204b5a1b8a5f78e4d281b17 examples/Scala/tasksink2.scala
766a1353868b8554cf196b97c26fe2bd49804ddb images/fig44.txt
5157a27cd375a61952f4792ddceb152a38a1a022 examples/Java/mdclient.java
4eb901ffff4da80ea2c755fef9b8e9e78971a468 examples/C/fileio1.c
-699d7abe14efacc40072d93e22a7aa08f25001d6 examples/Tcl/taskwork.tcl
7d05dce6e5000ed612e2f00b2e9c28fc0a27849e examples/C#/rrclient.cs
-d66effc075289ae4b0c391fb317c8904124ad852 examples/C#/taskwork.cs
+699d7abe14efacc40072d93e22a7aa08f25001d6 examples/Tcl/taskwork.tcl
46f1839920d47fa26cb76b7414129025c15dcea2 examples/Python/clonecli2.py
+d66effc075289ae4b0c391fb317c8904124ad852 examples/C#/taskwork.cs
a905a22f3c4ca1cc0003a75e243673b5907ef643 examples/PHP/syncpub.php
-7a1c3db3b0401371e0bf4188878813d29c949b2f examples/Haxe/interrupt.hx
e93d8d54afafb7a4a3c7229cd1541bc2ea4630be examples/Java/syncpub.java
-f95cb00a89aeb90e0966c4b784410dfecc0b5550 examples/C/wuserver.c
-325a47f4e2d7512a975a33418fc4b0877b1757db examples/Erlang/lruqueue.es
+7a1c3db3b0401371e0bf4188878813d29c949b2f examples/Haxe/interrupt.hx
af11e39c163f8e53a4c76f4c7cbc85272e4ece67 examples/Scala/peering1.scala
+325a47f4e2d7512a975a33418fc4b0877b1757db examples/Erlang/lruqueue.es
+f95cb00a89aeb90e0966c4b784410dfecc0b5550 examples/C/wuserver.c
8dcbe33a178b5d9a8ddc4dd49b5840a68db9ffb8 images/fig8.txt
da0678d5e95eb79bce037b5a942a21a7e5ad5e67 examples/Felix/hwclient.flx
-8dc30d63dc3bf9792aab68d299a322ee0966403d examples/F#/psenvsub.fsx
8636d39599e9e1c9c03e29b72e874314115d1a48 examples/Lua/ppworker.lua
+8dc30d63dc3bf9792aab68d299a322ee0966403d examples/F#/psenvsub.fsx
8de96d7c83874341df47af49192b5720fdfcd194 examples/F#/tasksink2.fsx
-2deaf35ddbb850c377702bcafec8759ad61963ad examples/Clojure/rrbroker.clj
-699b532c440dbd6963ecdd8d913e015f2a5033f4 examples/Lua/mdbroker.lua
fd8d8ce86fbd3202f9f0d75888559192e5b79cda examples/C/clonecli2.c
+699b532c440dbd6963ecdd8d913e015f2a5033f4 examples/Lua/mdbroker.lua
+2deaf35ddbb850c377702bcafec8759ad61963ad examples/Clojure/rrbroker.clj
a7d19cbf1ab02b4badaa2e7e8e59d55508af2a39 examples/Erlang/tasksink.es
da4f91e4b7fde4f2de478da6e0357358175412b4 examples/Erlang/psenvpub.es
-921aeb5a7186f3732988cc06349cea5687e141c5 examples/Felix/version.flx
-6094db7eeabe82bd65264d74086cad4aefd57859 examples/Objective-C/msreader.m
-86582a424634ff2367048b741703e3d1439f7a7f images/fig51.html
daa0a3e4e9f8cc6e4355ecdb1f3962e8d9c80b7c examples/C/ppworker.c
+86582a424634ff2367048b741703e3d1439f7a7f images/fig51.html
+6094db7eeabe82bd65264d74086cad4aefd57859 examples/Objective-C/msreader.m
+921aeb5a7186f3732988cc06349cea5687e141c5 examples/Felix/version.flx
3f7ba02392ba2573847f21af19ef2179e6fef7c7 images/fig40.txt
-42d6bed5c5411d1491da880c1e65ab5eb014db69 examples/Node.js/wuclient.js
cab289d0991039fc5e7eb7a0324a59c7872a183e examples/Go/rrbroker.go
+42d6bed5c5411d1491da880c1e65ab5eb014db69 examples/Node.js/wuclient.js
937d691438f722a7b74763c3b5a60bc3f1aff18c examples/Haxe/spworker.hx
-096286ed113b0d2e77b61a23ed50bb84c6aeab10 images/fig13.txt
f8777f2aa7c9688ee10f267382891c4801e14077 images/fig65.html
+096286ed113b0d2e77b61a23ed50bb84c6aeab10 images/fig13.txt
af40b8ce3acef94cd267cc1003f19cde32924f27 examples/Python/clonesrv6.py
147b628a40f8fb861b946e5898a129ab5b69e538 examples/C/kvsimple.c
6c9e789b2121030e7e4e45d5ed806571cafe891b listings/C/listing_21.c
0a09709cb0f70a54906cae69a710a1a82f9df360 examples/Lua/peering3.lua
e0588e9167edf9fb11154ea7364ed1f45b7b8cba examples/C/mdclient2.c
37fec12dbdcedf2da599e88d3aee12ca54a28d40 examples/C++/rrclient.cpp
-3c4d831feac26bb29dbed2e892b9c8e30a0c10b4 images/fig2.html
b55d6909f384e41673a0ac08c2fc383af38378d3 examples/Haxe/tasksink2.hx
+3c4d831feac26bb29dbed2e892b9c8e30a0c10b4 images/fig2.html
9dab739f561e816c12002bfd6a3bfde46e1df976 examples/Scala/syncpub.scala
-05cee87881deb0470871ee37c3c28f79848d8667 examples/C++/msreader.cpp
98913d674c40172faadc26833ee49e6b298c507c listings/C/listing_14.c
-5161d880183fa3ff4e4acc809ebd245984f43bbf examples/C/rrworker.c
-1e8bc0842273bcb062cc194685f5c296d11ad568 examples/C/flserver2.c
+05cee87881deb0470871ee37c3c28f79848d8667 examples/C++/msreader.cpp
0fe1535a3d83ac91e2032162a5c0bab396659392 listings/C/listing_32.c
-c2e5818c670b5999a3a1de96b1080932df2ec612 examples/Felix/wuclient.flx
-7bfb8809cd3f12d07d8ae8bac7b20669ebae696a examples/Haxe/mdclient.hx
+1e8bc0842273bcb062cc194685f5c296d11ad568 examples/C/flserver2.c
+5161d880183fa3ff4e4acc809ebd245984f43bbf examples/C/rrworker.c
dbea6f88e76f7b5406b5b616e427a7c844ecc160 listings/C/listing_27.c
+7bfb8809cd3f12d07d8ae8bac7b20669ebae696a examples/Haxe/mdclient.hx
+c2e5818c670b5999a3a1de96b1080932df2ec612 examples/Felix/wuclient.flx
d9972720e0106a449fe24afae84a8a5a1d7d914f images/fig55.html
-944b1f6aec4e513e135d2ea4ef4e4aded05f08f3 examples/Go/wuserver.go
-d8582e3fb3e2f71c88c178f7de1637eeb9fb6f39 examples/F#/mspoller.fsx
605467ed0920b734207dad970d90b81ff0b2cd15 examples/Tcl/bstarsrv.tcl
+d8582e3fb3e2f71c88c178f7de1637eeb9fb6f39 examples/F#/mspoller.fsx
+944b1f6aec4e513e135d2ea4ef4e4aded05f08f3 examples/Go/wuserver.go
8bbf0c0d7521069375355cfea12db1af4f9a4684 examples/Java/wuclient.java
8aa0ee8cdceada1858674ac5f7766ccd1391e0c1 examples/Ruby/psenvsub.rb
-5ff36654f93e830b0e1ccdd6b740cb6ee8a0ae73 images/fig45.txt
79d84b59248853210db2890e94956d7ce4a0602d images/fig14.html
+5ff36654f93e830b0e1ccdd6b740cb6ee8a0ae73 images/fig45.txt
8972b414d37d25e3616f2211f9a32f9961ed8504 listings/C/listing_28.c
-2adc3d160708690759ef393cde9094d6249212c1 examples/C++/wuserver.cpp
-ddfc2281b409a383f380b8bbd2ef8b63916740e3 examples/Clojure/tasksink2.clj
4b7c444789cb4d87d9f5e7fe095c447ae6be27e4 examples/Scala/peering2.scala
+ddfc2281b409a383f380b8bbd2ef8b63916740e3 examples/Clojure/tasksink2.clj
+2adc3d160708690759ef393cde9094d6249212c1 examples/C++/wuserver.cpp
c4c3f4779e818d038c9f406ceab2acb1c9126d4f examples/C/mmiecho.c
478229ee0fed61bd53c347dde14c24163042d7ce examples/Ruby/mspoller.rb
-94300aaa34b2791851002b2a8442eed9db183c18 examples/Clojure/mspoller.clj
-86c3ca4617570325969e3c0c0b274aa2080139bb examples/Python/syncpub.py
757c637e8ce0b9cdedceab28224d7081baef0172 examples/Tcl/rtdealer.tcl
+86c3ca4617570325969e3c0c0b274aa2080139bb examples/Python/syncpub.py
+94300aaa34b2791851002b2a8442eed9db183c18 examples/Clojure/mspoller.clj
1b6f799db9f6ce01f7f8e318f51d464898675ed1 examples/Python/asyncsrv.py
-a3c78d15e03ff754a35ad2d4d9c5129bd6e0781b examples/Erlang/syncsub.es
d4a51d25b984a549dd99076aa80900d071f9c2d1 examples/Ruby/hwclient.rb
-71bc80bde20f46269857081ab2d1358eac8fec9c examples/Erlang/wuproxy.es
+a3c78d15e03ff754a35ad2d4d9c5129bd6e0781b examples/Erlang/syncsub.es
96e0642210a536e841a2b8caf350354f5c2557e1 examples/Tcl/rrbroker.tcl
-8330ce0a8173843e8413aaf8c0f7ab5e2d38227c examples/C/clonesrv6.c
+71bc80bde20f46269857081ab2d1358eac8fec9c examples/Erlang/wuproxy.es
5424213fd099dff80a0ef2af899414d44cdde7ab examples/Lua/flserver3.lua
+8330ce0a8173843e8413aaf8c0f7ab5e2d38227c examples/C/clonesrv6.c
7d252709ddcffc9f4c15122e9f7558f6dd9f9d99 examples/Perl/msreader.pl
a00ef46913f0fe1ba0239a08897eac54734d33e9 examples/Lua/ppqueue.lua
-abe810aa3d8eae694f75611f89105b7b1d82ba0a images/fig60.html
46fa0c2b0dbd5435f4b613d25051ff663f4028bc examples/Erlang/rrworker.es
-e64246285bc0ca83c6b7dac42ea712399eebc173 images/fig54.txt
-e8809df4c73d6d22ab8b3a1e4114ed142b75de9e examples/Haxe/bstar.hx
+abe810aa3d8eae694f75611f89105b7b1d82ba0a images/fig60.html
7a3affdf030ad06bbf3e6f62c3060a95bc31cfe0 examples/Felix/wuserver.flx
-f80625022736f7df4f74630cb90c117d89e864bd examples/PHP/mtrelay.php
+e8809df4c73d6d22ab8b3a1e4114ed142b75de9e examples/Haxe/bstar.hx
+e64246285bc0ca83c6b7dac42ea712399eebc173 images/fig54.txt
637fe63633f131a096b97c958dcc6b21afef1fcb examples/Erlang/psenvsub.es
+f80625022736f7df4f74630cb90c117d89e864bd examples/PHP/mtrelay.php
5736c07c7133424dc855b7b07c6c8866d4fd7821 examples/Clojure/wuserver.clj
-97d9731192887638ab202339984374ba71517ed9 examples/Haskell/taskwork.hs
a7e00a7c16d60da7e8b85e22a5096bc407689dd3 examples/Haxe/lpserver.hx
-d5249a7b3730505d6dfb11ea9eb2836410eccebe examples/Objective-C/taskvent.m
+97d9731192887638ab202339984374ba71517ed9 examples/Haskell/taskwork.hs
181c3ed344dcc4b42262a6eaab52adc119254384 examples/Haxe/ppworker.hx
+d5249a7b3730505d6dfb11ea9eb2836410eccebe examples/Objective-C/taskvent.m
960a06c1a690ee301a1ffedee734d22916b3c799 examples/Python/tasksink2.py
331984fa6930299e1fd0e828b0a1191bb8146295 examples/Go/hwclient.go
-4219a689f5822159574d07ac23af97688ec7424b examples/Objective-C/taskwork.m
e3e0a93aad24bd4515a6d5eb55104d946c6b5aa8 examples/Python/rtdealer.py
-322edac073293990f704363845ab419727ec3938 images/fig69.txt
+4219a689f5822159574d07ac23af97688ec7424b examples/Objective-C/taskwork.m
2c3014f8a082a8814488d49c7f6e24741d5f8d13 examples/C#/psenvsub.cs
-f6cc0a1e96bf00b26ed0ac7cd5e65c3c88c9a65d images/fig41.txt
-cc2696aa9845e31fef32a2b920909ee8d4828f97 examples/F#/rrworker.fsx
-a30e34b77ff1ef4e136c061c186999d6e43865c2 examples/F#/psenvpub.fsx
+e4093d9173d32477bb9aaa50a0f2a2a787afc9b4 images/fig69.txt
11ce5703085fce2f0ca1698fac7cbedbc4e40586 examples/Haxe/ppqueue.hx
+a30e34b77ff1ef4e136c061c186999d6e43865c2 examples/F#/psenvpub.fsx
+cc2696aa9845e31fef32a2b920909ee8d4828f97 examples/F#/rrworker.fsx
+f6cc0a1e96bf00b26ed0ac7cd5e65c3c88c9a65d images/fig41.txt
6f5abbdcc13d0adf35bf921ba24e890598fd5f40 examples/Haskell/rrclient.hs
-3c8b2e92c6d3e8c908b3dc09909ccadccf26b017 examples/Go/tasksink.go
8381bbfb2b782daddecb20c385c0476793c10c8b examples/Python/interrupt.py
+3c8b2e92c6d3e8c908b3dc09909ccadccf26b017 examples/Go/tasksink.go
a98102b1ffc758891bb9ecba7738283b49e6fe3d examples/F#/rrbroker.fsx
-b4721bcee53fd72bbca0bbe21643dbbb6a96050a examples/Q/mtserver.q
e5772e3b3674bec640757a351d528a96fdc7b4a8 examples/Java/psenvpub.java
-ad468f1cac95f5c99f7b4642f9fad7cd268c77eb images/fig25.txt
-86ce192c66a1afd0d9a2363c0d8cbf05f42b90ee images/fig19.html
+b4721bcee53fd72bbca0bbe21643dbbb6a96050a examples/Q/mtserver.q
4f24ea69ba64dd07d8926d35612b18124d60c387 examples/Python/mdcliapi.py
+86ce192c66a1afd0d9a2363c0d8cbf05f42b90ee images/fig19.html
+ad468f1cac95f5c99f7b4642f9fad7cd268c77eb images/fig25.txt
99bc229e9aa0395691bfab96714b75758ace780a examples/Scala/identity.scala
-dc19e5cd8d0c1eada9c80ec2fc532845c0087926 images/fig16.html
4e51c3b8beaccdfaa51cbcd7c76db0921a4d396d examples/C/clonecli4.c
+dc19e5cd8d0c1eada9c80ec2fc532845c0087926 images/fig16.html
a0fc77368e17deaa8085d14b434cb8584e2b0463 images/fig1.html
-670708b0fbae6ffef28f048eaa69722da95cbe72 examples/Tcl/taskwork2.tcl
f9a236e7d02d3144d822578392242d353be93eab examples/Java/taskvent.java
+670708b0fbae6ffef28f048eaa69722da95cbe72 examples/Tcl/taskwork2.tcl
64a39716a92e5c82d9b3225a0f9cc50a30bb95df images/fig40.html
-e8929afa871c6a5cfc875d8fe92f26343725f547 examples/Python/lruqueue3.py
a0f206b68544e1567e09962c50664e82e065be43 examples/Tcl/titanic.tcl
+e8929afa871c6a5cfc875d8fe92f26343725f547 examples/Python/lruqueue3.py
d29942990c930cf73d2ddcc69094955842029d8d images/fig19.txt
-a0325006d0a5013b9771ff85f2895d0d051fcab6 examples/Scala/hwclient.scala
1131219e4a1347ec27a59f526b8eb0c283cb954a examples/Perl/syncpub.pl
+a0325006d0a5013b9771ff85f2895d0d051fcab6 examples/Scala/hwclient.scala
2e02b93739686e4d09b20ffb383799513c66209d examples/Node.js/version.js
-e87190cc269079528b7bfb14d8cbef18383a83dc examples/Scala/wuclient.scala
-d68d866d6c0aee55ad5a87407e2c81422494e474 examples/Ruby/rrclient.rb
f22a46da7b23b95589dc3a0256e68c59c8161a11 examples/Ruby/mdcliapi2.rb
+d68d866d6c0aee55ad5a87407e2c81422494e474 examples/Ruby/rrclient.rb
+e87190cc269079528b7bfb14d8cbef18383a83dc examples/Scala/wuclient.scala
4bf152e2481b644d3f2ebb2a31bbe5ea66886b12 images/fig28.txt
f4ef8f0757c0a604067d158314872c17b13cbc8b examples/C/clonecli1.c
d699f2b010b8e1ac283000860e25b392a12f6922 examples/PHP/mdwrkapi.php
41599b9d90390f7d27164e6f38ea8412417acc56 examples/Lua/lpserver.lua
29f2dd8b2a9f9914983d03cc821d5bb886bb5d5f examples/Node.js/tasksink.js
2ea6fc1ee236f23741397a595fa8cf8ceeecfa60 examples/C++/taskvent.cpp
-b315f1a379447e6711a1375a995db97a022dfbed examples/F#/asyncsrv.fsx
c7875a34f8a77fdb2d083a41440fb0dd64d4e4ec examples/C++/ppqueue.cpp
-97172663ee4af7c63ce0e7e662874125c4e99b62 examples/CL/wuproxy.lisp
+b315f1a379447e6711a1375a995db97a022dfbed examples/F#/asyncsrv.fsx
02cdf6c6aa81bec7bb626b2ff4dcaf071ae4849e examples/Q/identity.q
-35f0f5b397ddec7b54708bac0d4beae3253e5be2 examples/F#/mtserver.fsx
+97172663ee4af7c63ce0e7e662874125c4e99b62 examples/CL/wuproxy.lisp
8019e39b48c23425c07895e17bb6fce9cb36e495 examples/Python/clonecli3.py
+35f0f5b397ddec7b54708bac0d4beae3253e5be2 examples/F#/mtserver.fsx
7d2f295d24a3d135762f1b8afd0324feb72365fa examples/Ruby/tasksink.rb
56da40c56e1f9bf09139322cbb4ececef47d7f9c examples/PHP/rrbroker.php
e9294e086e02bbeccfb7044f7b485818606f09ac examples/Haxe/bstarsrv.hx
b52e338102084e51ef6d1f7ed0ae359d6a4311ce examples/Python/ppworker.py
6f8bf096bfaf0e7cb3393278c4b5927da73a8138 examples/Python/wuclient.py
9e09e2db540b0edb05597e14775ace3446922bdc images/fig28.html
-b04812e4484f019cdb81789928a16d454c2e87aa examples/Racket/rrclient.rkt
-18bd61de83270d56380966dbdc02095551bab537 listings/C/listing_23.c
573688fd3df30a4d056ff8c1764c7aaa2896c85a images/fig70.html
+18bd61de83270d56380966dbdc02095551bab537 listings/C/listing_23.c
+b04812e4484f019cdb81789928a16d454c2e87aa examples/Racket/rrclient.rkt
32d614bd6b42d57d0616b8e290a4d3ddcec7fafd examples/C/peering1.c
-2820a3a5dd5fad7aaff8a649e719c7ee2bb32dac examples/Python/lruqueue2.py
d6d70ca5c3eb2c4f9d8522b601f7bf55c6caa209 examples/F#/peering1.fsx
+2820a3a5dd5fad7aaff8a649e719c7ee2bb32dac examples/Python/lruqueue2.py
e63eff17ab9bb5345c3261b3c3b5cbdc4ab4af69 examples/Tcl/lruqueue.tcl
8fd2117ca001ec23eb5d9e0daad0c69a41b54e02 images/fig53.html
ea9999287d03f2fc243182a193f1c0b79f4ececa examples/PHP/version.php
33b9df8314d8e964a5ccdfd3adcfbe94afb7e68d examples/Tcl/clonesrv1.tcl
d9c501d02c46ce8eeb2d5bfc90c9526a0ba004eb images/fig38.html
-78f575cf0dced40352692aad0bf6b044c5b38401 examples/C++/wuclient.cpp
e8dcec2e962eff848e2993fff8992ab20d4df703 examples/Scala/wuserver.scala
+78f575cf0dced40352692aad0bf6b044c5b38401 examples/C++/wuclient.cpp
687455a3f25b0a824290a0ac51bfb29aa33f91d8 examples/Haskell/lruqueue.hs
b22744d56e2c02c14e39f1ae7111bd94a7d89d61 examples/Haskell/rtdealer.hs
-e94034dc4d735babf2b373ad1c82c7df05f0eeea examples/Racket/hwclient.rkt
925840d7351f3bf35c56ad0b4f5cbab856c4be1b examples/Perl/msgqueue.pl
+e94034dc4d735babf2b373ad1c82c7df05f0eeea examples/Racket/hwclient.rkt
f859d1e4ce6477cc82463e685f24b37c7c6d4591 examples/Java/mdworker.java
-67cd8f58b18d6a279cc2831204777c613160831d examples/PHP/wuproxy.php
42188d40df90f59565e318cea86a4a751c960863 examples/C/syncsub.c
-a17ca9f522711535ada7ac063d963c46ac08d876 examples/Go/psenvsub.go
+67cd8f58b18d6a279cc2831204777c613160831d examples/PHP/wuproxy.php
8f60d6ff82af34fe11f945f77fa35b48b0ca3255 examples/C#/lpclient.cs
-4368c8c6e0dd99b60576aa1afd074c7e08374a3c examples/Clojure/msgqueue.clj
+a17ca9f522711535ada7ac063d963c46ac08d876 examples/Go/psenvsub.go
e30bb9c17138a5525355a9cf108e8497e4fd6c26 examples/Tcl/mdcliapi.tcl
-8a8df70d76795e4ab2323fc0547f35e25ecc99c4 images/fig39.txt
-2ec6143a61202c4319c2f150ba5adbb5e61acafa examples/Tcl/peering1.tcl
+4368c8c6e0dd99b60576aa1afd074c7e08374a3c examples/Clojure/msgqueue.clj
624a827aee90c0f9cb2721181c6a3feb063793fd examples/C/clone.c
+2ec6143a61202c4319c2f150ba5adbb5e61acafa examples/Tcl/peering1.tcl
+8a8df70d76795e4ab2323fc0547f35e25ecc99c4 images/fig39.txt
24866bcfbe82a7dab299bb590f2ddef1c19222f6 examples/C/clonesrv1.c
b18c46f6571ced278e688f9f3d4eb688328e6e45 examples/Node.js/hwclient.js
dce9a71bc9f7d07d19b9b93ce8918bab563567cc examples/Haxe/mdworker.hx
-2097b0e90675c7368978b07f7bbcf913abc034eb examples/Lua/mdcliapi2.lua
a126dbcb2fe0b75726170ae4fc1f2e7891740e11 examples/Tcl/flserver1.tcl
-22284bee68b3f07153d883f1a71e3c477d5eea9d examples/Erlang/rrclient.es
+2097b0e90675c7368978b07f7bbcf913abc034eb examples/Lua/mdcliapi2.lua
9e9cb1f6744746bb3e879b8b23475f5c0393d9ee examples/CL/identity.lisp
+22284bee68b3f07153d883f1a71e3c477d5eea9d examples/Erlang/rrclient.es
5125b7640e5ae0a81633251290e3df845c5b56f0 examples/C++/msgqueue.cpp
-c6ca0baaef26571e2d8d474ef2286806c37489d7 examples/Python/version.py
cb9140734ae8a32eb67b51854cfd6558dfa0fb28 examples/Java/ppqueue.java
-589fdcb8cfb8bf3dc92385693d14e9d2a705bc06 examples/Clojure/syncsub.clj
+c6ca0baaef26571e2d8d474ef2286806c37489d7 examples/Python/version.py
51afcd75d71c57cf749b0fbfc2cd37c4c753d2af examples/Python/flcliapi.py
+589fdcb8cfb8bf3dc92385693d14e9d2a705bc06 examples/Clojure/syncsub.clj
03b78965320cf28f85170cc26669bf8f611ce5e9 examples/Clojure/syncpub.clj
3770f4ec02f115e662e9d62a5b5dacdc4cd3b622 examples/C/lpclient.c
fecccfef601afb3bc23d66a54f40963f24d019bb images/fig10.txt
-d9dac0c15b955107b7bb17045212eedc47a9a83b examples/F#/rrclient.fsx
e50c1db7c2d1abe817d4dc4fb9bf851f57eb4e04 examples/Haskell/rtmama.hs
-a0993f3e09d7989682156b449f0f56134476f842 images/fig65.txt
+d9dac0c15b955107b7bb17045212eedc47a9a83b examples/F#/rrclient.fsx
aeacc2169932a79b2878a7632bdc74f56feb2dd4 examples/Tcl/rtmama.tcl
+a0993f3e09d7989682156b449f0f56134476f842 images/fig65.txt
fd88e273aa6aa83d6e57ba7b5f6e79c2a587fa35 examples/Lua/taskvent.lua
c1639957dc773562a1be773d2e99cae9f3c2958f examples/Go/wuclient.go
90b3b9bdf3be2c060d54ac19b0ca71f5d53c49f1 examples/Java/taskwork2.java
3f37a4ee524ff08b2bc609cd748d4336dc29e3e2 examples/Tcl/clonesrv3.tcl
-29885d8b42aa761ade711aa3df2f72537f2d7f7e examples/C#/rtdealer.cs
-5099ee606c943236f38ec2c2ca23d41aecc6086a examples/Haxe/mdcliapi.hx
32c1da80334b7082e5bd6637fff90c3ce3a49f2f examples/Lua/flserver2.lua
+5099ee606c943236f38ec2c2ca23d41aecc6086a examples/Haxe/mdcliapi.hx
+29885d8b42aa761ade711aa3df2f72537f2d7f7e examples/C#/rtdealer.cs
7cb0afaba65ca6730c3241ea51b723a5bc0080bc examples/C#/spqueue.cs
-946313d5ee2fd52bdb68c9d680037b1e6c0f82e3 examples/Go/taskwork.go
-e903bdb70c52318aa47df262ee8853d41888dcfa examples/Clojure/rrclient.clj
464edc2f30ed6be8ffb7e6dd6b3a580678419c52 examples/Ruby/rrbroker.rb
+e903bdb70c52318aa47df262ee8853d41888dcfa examples/Clojure/rrclient.clj
+946313d5ee2fd52bdb68c9d680037b1e6c0f82e3 examples/Go/taskwork.go
c61b2f5e7e1f0f22b9f7b79c30911308a62ce1c6 examples/Scala/rtdealer.scala
b740cbdd8fcf7a92c2f67b3ff878ca901780788a images/fig57.txt
2534052213a76180af08f15940ead5098bd1a153 examples/PHP/titanic.php
-184649a1557b9586718d7ef315368c87ce124d1f examples/Haxe/hwclient.hx
-ab4d6ce380a24d586b00c5320323c8c5b8e5a867 examples/Python/identity.py
a235db076fce8108a9d58e6a29221e891259713a images/fig36.html
-2764e2846d3a3b4f000ee4129227193cba16f3b9 examples/C#/lpserver.cs
+ab4d6ce380a24d586b00c5320323c8c5b8e5a867 examples/Python/identity.py
+184649a1557b9586718d7ef315368c87ce124d1f examples/Haxe/hwclient.hx
512980dbbff07bf94eef416f18197b314e38463a examples/PHP/lpserver.php
+2764e2846d3a3b4f000ee4129227193cba16f3b9 examples/C#/lpserver.cs
5ed74c477c4f01b089813dc5130de7a812b7cb92 listings/C/listing_34.c
-9d92b84a575b76ee5fdac5a8aead948ff30642ef examples/Clojure/taskwork2.clj
ab03e4daf137c1777844839149ba1b8bb1940aaa examples/F#/msreader.fsx
-e2cedbec07d0f304e56da005eced98a29c66f1f2 images/fig61.txt
+9d92b84a575b76ee5fdac5a8aead948ff30642ef examples/Clojure/taskwork2.clj
ede61c56ca791dc200d8d2e3dc3ea3e93c88b8fb examples/Java/rtdealer.java
+e2cedbec07d0f304e56da005eced98a29c66f1f2 images/fig61.txt
0cba9462cf309cc3f7f39272bc5b42805528cec4 images/fig38.txt
-24dc35e9d56cb8307bf6a13349296883a4b20e24 examples/CL/syncpub.lisp
480791747730347aab8e38375d8cdad255eac624 examples/C#/rtmama.cs
-8b7bdd78f4020234073531a92538e27ee6aa49b9 examples/Erlang/version.es
+24dc35e9d56cb8307bf6a13349296883a4b20e24 examples/CL/syncpub.lisp
2e55f6cd73044d1877cc1f301a902291e62a4df5 examples/Go/wuproxy.go
+8b7bdd78f4020234073531a92538e27ee6aa49b9 examples/Erlang/version.es
3104553d24dfdb1c56ac22af4fb6d84ac685927e examples/Go/tasksink2.go
2db2e7bab5a0822e2281ee71f0e23ceb854129b4 examples/Clojure/peering1.clj
f7665b3c745137d93f01bec00c1f3cd5ada9777e examples/Lua/wuproxy.lua
9c1b0fccc7cc8b8c707ca81f2c37732642bb0e26 examples/Node.js/tasksink2.js
-29d5f504b41dcbbd1a6f83a7da7ee373afa9294e examples/C#/rrworker.cs
-da3fa1cdc26694bffcd6d87cb8f9f29e3cde0440 examples/C/rrbroker.c
eff675b2624420578c70501cb4e122f860599978 examples/Python/clonesrv2.py
-71f104b3b6f9da917858444c75f87c186ad6fd58 examples/F#/taskwork2.fsx
-7c682b5ac16af1de897da51335add16f628dcf7c examples/Java/mdclient2.java
-d57ccbe787977ff744f80d4f1a79197ecebf06f5 examples/Tcl/flclient3.tcl
+da3fa1cdc26694bffcd6d87cb8f9f29e3cde0440 examples/C/rrbroker.c
+29d5f504b41dcbbd1a6f83a7da7ee373afa9294e examples/C#/rrworker.cs
4ec52c3d1c0427ee3f65b48f7504d286fe326ff3 examples/C/suisnail.c
-54c04ff488d136eee802a84417a4228e7fe6698d images/fig11.txt
+d57ccbe787977ff744f80d4f1a79197ecebf06f5 examples/Tcl/flclient3.tcl
+7c682b5ac16af1de897da51335add16f628dcf7c examples/Java/mdclient2.java
+71f104b3b6f9da917858444c75f87c186ad6fd58 examples/F#/taskwork2.fsx
c8dc4043aa2d6b602efe5f8a7c2d1b2d09411d7a examples/C#/rtpapa.cs
-6c202eb6e9f3ce924bbeb2a265b62fd69cbaffd4 examples/C/flcliapi.c
+54c04ff488d136eee802a84417a4228e7fe6698d images/fig11.txt
89593be0a78ce37fa9a1b716ebf6093658770d99 examples/C/fileio2.c
+6c202eb6e9f3ce924bbeb2a265b62fd69cbaffd4 examples/C/flcliapi.c
ea6ef00910056a10b6dcacd8eb7b066b588fe5fc examples/Clojure/rtmama.clj
0e48c8600556573a5cd00c7446b2556a3c9eeb9d examples/Scala/rtmama.scala
-2616973ca5e429429431da8b0cd68fee2624d780 examples/Ruby/taskwork2.rb
c4f77206176aa5521161c1c3339f9721544386a1 examples/Lua/spworker.lua
+2616973ca5e429429431da8b0cd68fee2624d780 examples/Ruby/taskwork2.rb
f0483625a32ff6ece37d3550f317a9929f2d0f59 examples/Tcl/syncsub.tcl
68890b958cd0c43bea2d16710e9ef5f76ed27ca7 examples/C/clonesrv3.c
-5e89e227f484ea3bdda936a070079829f90169e8 examples/Haskell/tasksink.hs
-9fb208c34889bab485c698bc2955156045f2a044 examples/C/msgqueue.c
deb3e5a45a221dd2eb37a8e06193117bf14b675d images/fig45.html
+9fb208c34889bab485c698bc2955156045f2a044 examples/C/msgqueue.c
+5e89e227f484ea3bdda936a070079829f90169e8 examples/Haskell/tasksink.hs
f0790d96b9384255d440ad5a303f8e7c50ad180b examples/Ruby/lpclient.rb
fe7eb2506f5e793e2acdc9d6d2e605623c87dfc6 examples/Tcl/clonesrv2.tcl
aa0b63ac85f2f0d2a47453de004da54b6e35c0b1 examples/Lua/rrclient.lua
756b67dbc5a7089d39a78ddc61201fbcb17de822 examples/Erlang/rtdealer.es
-b017af091a2c48efcd5f73c3ad29feaa620f3f73 examples/F#/msgqueue.fsx
ee42a4d1b7874fbcbb19d8f591796d98cbaf794b images/fig34.html
-42b27520e92a257cd3a376518bbc4f65b2b3cbec images/fig46.txt
-30a77040cd27d9e73f5d0455d013257735e9c6d4 examples/Clojure/taskvent.clj
+b017af091a2c48efcd5f73c3ad29feaa620f3f73 examples/F#/msgqueue.fsx
2d1b259a8ab507031a0dfc5d63ddcf9494801c89 images/fig29.html
-36c0fb889044ee75da53e2a6e6578ef52cbcd672 examples/Python/fileio2.py
+30a77040cd27d9e73f5d0455d013257735e9c6d4 examples/Clojure/taskvent.clj
+42b27520e92a257cd3a376518bbc4f65b2b3cbec images/fig46.txt
643e0a25fa76bad04e49b3a1dbe1307580dd327c examples/Objective-C/wuclient.m
-62c5a1117f427f791091b25cefbca2645a15c930 examples/C++/identity.cpp
+36c0fb889044ee75da53e2a6e6578ef52cbcd672 examples/Python/fileio2.py
f8d9818f5a0c1074c16409d72c3136a79cf394e0 examples/C/mdclient.c
+62c5a1117f427f791091b25cefbca2645a15c930 examples/C++/identity.cpp
e47d598ae77b855af171937500cbcb9c78468178 examples/PHP/rrclient.php
3e063e5f85f7609ce7c4b455a171849b6dcccb3d examples/PHP/mmiecho.php
-d12093fccdea7822cb2297918ae7b0b53b4be160 examples/Lua/syncpub.lua
a9aaa1bbc4fcc045ca68181f0d6aeb83d6d08520 examples/Haxe/lruqueue2.hx
+d12093fccdea7822cb2297918ae7b0b53b4be160 examples/Lua/syncpub.lua
d94ee5f18cfb33e812f33dc7043e649a03c32b0c examples/Clojure/psenvpub.clj
-9c7cbcee1d9ec6b3aedf20d1b8b87e67483f469b examples/Clojure/tasksink.clj
3ecb99e5aa310f5e23f7c69100f23e8f8803d1ca examples/Clojure/asyncsrv.clj
-213a4ed48d9a2c4b940ffce8b906741901cd62e3 images/fig48.txt
-9d2a87bf53a4d8cef8b553f6d3860a0ac492634c examples/Objective-C/version.m
-08ff035f92bf543f376d754760a2c70c33d67395 examples/Clojure/psenvsub.clj
+9c7cbcee1d9ec6b3aedf20d1b8b87e67483f469b examples/Clojure/tasksink.clj
9082564e4798f7883fc9f0922ded65e355a156af examples/PHP/asyncsrv.php
-8b0fe2b9db67502cf04efbcc0ffbc184381cee90 listings/C/listing_9.c
-f0a36dcfb514055163abeb5c186348d489ab80e0 examples/C++/version.cpp
+08ff035f92bf543f376d754760a2c70c33d67395 examples/Clojure/psenvsub.clj
+9d2a87bf53a4d8cef8b553f6d3860a0ac492634c examples/Objective-C/version.m
+213a4ed48d9a2c4b940ffce8b906741901cd62e3 images/fig48.txt
5d4d9d06c392dc5877db27425d0d3d600d6a0117 examples/C++/rtmama.cpp
-b34b2c8e02016b6b06fc86b29ffac4d3c634a789 examples/Tcl/rrworker.tcl
+f0a36dcfb514055163abeb5c186348d489ab80e0 examples/C++/version.cpp
+8b0fe2b9db67502cf04efbcc0ffbc184381cee90 listings/C/listing_9.c
8027bedf534c840d1559ebbc112caf7db21bcecf examples/Java/syncsub.java
-11300a3f44bbd371adb002f71a0e60798d6a77b8 examples/C#/taskvent.cs
-3c64ab9d280c89a871487684b7d13e2913e3d07e examples/Haskell/mtrelay.hs
-c50e3606b51d86ab8cc990923e9efbb7a693c38d examples/Python/syncsub.py
+b34b2c8e02016b6b06fc86b29ffac4d3c634a789 examples/Tcl/rrworker.tcl
5b9f30a5ffafbc92da2ab059584fda05a5afb35e images/fig50.html
+c50e3606b51d86ab8cc990923e9efbb7a693c38d examples/Python/syncsub.py
+3c64ab9d280c89a871487684b7d13e2913e3d07e examples/Haskell/mtrelay.hs
+11300a3f44bbd371adb002f71a0e60798d6a77b8 examples/C#/taskvent.cs
4571039565abe537c14f389936efff3c34766f88 examples/C/bstarsrv.c
718f2397274e429002d354c0741c8b0f416ffe1d examples/PHP/hwserver.php
b19ce608521f09058ee4b56e14eb74e10e520567 images/fig50.txt
1b5778ddbed6e238f15b375d6e4188d7dfe6cb82 examples/Haxe/rrworker.hx
-b4ef90bfab4cb7cc552ff4f3ef92c5ae518adeda images/fig27.txt
2b6156bce9cb596bb25ae2b853f25f85d584e733 examples/Lua/taskwork2.lua
+b4ef90bfab4cb7cc552ff4f3ef92c5ae518adeda images/fig27.txt
ea967c3c1529f777a87c5d594ef7c67ca6007d07 examples/Tcl/version.tcl
4b31ce38ae50c343af437aef319e959f3dcf73b7 examples/Lua/mdclient2.lua
364d4f8e22e2434a1ec18ee73bc6c00e5ea0a370 examples/Perl/wuproxy.pl
-b11ab5cc2c891a767aaa44af0e2e84b20e495863 examples/Ruby/rtmama.rb
-6f7572b1cd057c59bd24d358345d41fed5685675 examples/C++/ppworker.cpp
d159ba66186230f04fed8f83844c792aff81019b examples/C/tripping.c
-2ad28109ca060ad17f62a38432f0639823960ac9 examples/CL/msreader.lisp
+6f7572b1cd057c59bd24d358345d41fed5685675 examples/C++/ppworker.cpp
+b11ab5cc2c891a767aaa44af0e2e84b20e495863 examples/Ruby/rtmama.rb
475db08e2b2dd6088f0f0f9db273dad36b6c0f4d examples/Felix/taskwork.flx
-9e122b003b9c012678f041c530d1f97c190e1358 examples/Perl/mspoller.pl
+2ad28109ca060ad17f62a38432f0639823960ac9 examples/CL/msreader.lisp
c589caafe8d257fc4958d8a85fd646c90fd0814d examples/Haxe/asyncsrv.hx
-db9643aac93bae57d7a76d2b8a3e381d7f07544c examples/Ruby/syncsub.rb
+9e122b003b9c012678f041c530d1f97c190e1358 examples/Perl/mspoller.pl
aa9a6f2d3015a03764063fc7a327cd62649a2f75 examples/Ruby/rtpapa.rb
-65a1354a1a7c65647c004421e409f50dd1d03f21 listings/C/listing_12.c
+db9643aac93bae57d7a76d2b8a3e381d7f07544c examples/Ruby/syncsub.rb
55f68d5fe3f08646069acf6eb0d253d5507371d0 examples/C++/lpserver.cpp
-5d6e1d4bddb6cfb6f2048c346339e13cb86d39ab examples/Node.js/wuserver.js
+65a1354a1a7c65647c004421e409f50dd1d03f21 listings/C/listing_12.c
8f8986abfc39b91a8e2c5d020560cd2890d4c759 examples/CL/wuserver.lisp
-af40fa855dd2897c3640c00d180db17918389a2a examples/Python/lpclient.py
+5d6e1d4bddb6cfb6f2048c346339e13cb86d39ab examples/Node.js/wuserver.js
11864c5a62aa05d8219e546a9601b79496e2235c examples/C/mdworker.c
+af40fa855dd2897c3640c00d180db17918389a2a examples/Python/lpclient.py
95db35947107898c2771826d05b6d56a32f71160 examples/Python/fileio1.py
189a00fa6ec82be236501914ec7cdf59f5ad10b2 examples/F#/rtmama.fsx
52d9e457f949c67fdb3acd2f64d6ce53686c0b80 examples/Erlang/taskwork2.es
-ca29733174c5622768d692f678102fffe85e95f0 images/fig68.txt
3e18a49e6051ff5782ce3ff86e5153ded2feaac6 examples/PHP/spqueue.php
+ca29733174c5622768d692f678102fffe85e95f0 images/fig68.txt
19af62371b605aec8c0e58b59c88e8aacbbcf474 examples/C/espresso.c
52665bd9b5274d3cde82c0cbc6d6b9c6583b8a32 examples/C#/rrbroker.cs
be9bfd9e2b3055273cb82f2dcc56aaf7b9304f7f examples/C/spworker.c
@@ -510,43 +510,43 @@ b59359f80bc34e66d1555f19076883a392f8df27 examples/PHP/taskwork.php
df1eeb177fc9bad19c99bea594b0cfb7c688afa7 examples/Python/mspoller.py
2c5354780babaaf2809d4f18e24b13f652098fc4 examples/Haskell/psenvsub.hs
f250b8a9e1f65d172b73128f70a5e760087bc2db examples/PHP/flclient1.php
-70315103d72c47fabda26f824fdfa9f0e03507c4 examples/F#/version.fsx
095d342176a0fda1cee40a30ca2e17a575197051 examples/C#/mtrelay.cs
+70315103d72c47fabda26f824fdfa9f0e03507c4 examples/F#/version.fsx
1c739fcac93e3662008d7a61e54b82cb7850511d images/fig31.html
-7a218107407adbd7edcb139984410904e9f81cdf images/fig51.txt
-175d2963b0d4cdf8d91bd186fb0c1413a5a0c88d examples/Python/mdbroker.py
0507a537f464bd77ce04e4eed6d102ce2a752492 examples/Clojure/mtrelay.clj
+175d2963b0d4cdf8d91bd186fb0c1413a5a0c88d examples/Python/mdbroker.py
+7a218107407adbd7edcb139984410904e9f81cdf images/fig51.txt
3948185bed64e3718160a3c76453ea508b319e64 examples/Perl/taskvent.pl
-e504b686cf046abf6171cc0eca1a8e7399926890 images/fig71.txt
0d5ad9ea0bfacd3e8516316041ec904ac2c9dd16 images/fig23.html
+e504b686cf046abf6171cc0eca1a8e7399926890 images/fig71.txt
33129459345c3164e77b597cc6ba1c76724584df examples/Clojure/wuclient.clj
e16f385f8fa1b28f5ec0e891cb1e05d75f6ead63 examples/C/kvmsg.c
b6f988ee590f81456223cf76eed663f0e2363d62 examples/C#/syncpub.cs
-f56e5aa14083821e04add53e78c30b05b83727f6 examples/Tcl/mdcliapi2.tcl
1fa92a019f22971f797f43d84fa95ebab1d9775e examples/Haxe/rtpapa.hx
+f56e5aa14083821e04add53e78c30b05b83727f6 examples/Tcl/mdcliapi2.tcl
388926d583d1061b30e41101fd3c73c386f8a7fa examples/Haskell/syncsub.hs
56a134827d034adb4776bae0ed523ab74fe631f2 examples/PHP/peering2.php
0b31b12eb61bcf9be22cd96f293ccd1ee1fd855a examples/C/clonesrv4.c
-33d7598d371bb22cfa13b3b6f1ec2afdca2376c7 examples/Haxe/lpclient.hx
97defbf428e8fbc283b32e1f5fc8b65f68febc6c images/fig48.html
-90c6ca7eb4f2f7906913210ae47ceb8193541630 images/fig31.txt
+33d7598d371bb22cfa13b3b6f1ec2afdca2376c7 examples/Haxe/lpclient.hx
702c7d5c527d133cd7ab8a4ef238dec6431bab8a examples/C/hwserver.c
+90c6ca7eb4f2f7906913210ae47ceb8193541630 images/fig31.txt
789c9236b608d9305ddaefe8491066d12bc5e3d1 images/fig56.html
d462ee86e0cda76fa9baa2eee736b57328e48e06 examples/Haxe/rrbroker.hx
-b0b44e140da9109eba6721be274cfa9dbe6398ef examples/Tcl/flserver2.tcl
-deb47cc2e574265cba543d62ad959d9a647fe67a examples/Ruby/rtdealer.rb
aa3dcab337c1bb15c9438b9e1a5c8b9fd121c78b images/fig12.html
+deb47cc2e574265cba543d62ad959d9a647fe67a examples/Ruby/rtdealer.rb
+b0b44e140da9109eba6721be274cfa9dbe6398ef examples/Tcl/flserver2.tcl
ecb71c5db9aa051d94a08c6ce4cec21f6be68da9 examples/Lua/taskwork.lua
b297eb869c526383372c9bf010cd59524e5a71d2 examples/Java/hwclient.java
811ffbe3bcc3e4dfad6727e5087c824bdb1a9029 images/fig46.html
-a4cb116c1b58963dc4d1d6298044b86303fb546a examples/Python/titanic.py
657156a4307312bcac37e6709d71b41f43cdad36 images/fig25.html
+a4cb116c1b58963dc4d1d6298044b86303fb546a examples/Python/titanic.py
2862cbff59b718df962a8d31cd5547825734f79f examples/Ruby/titanic.rb
8c503896c494994aa92badc2bec13c8b0cc465a4 examples/C++/taskwork.cpp
6b9781f4bb0b8acee20d7c48bfeef525cd0655e5 examples/C/psenvsub.c
-cb990ae7c17f286112b5bf854fdff34bd1928f1b examples/Scala/lruqueue.scala
-9a194dc680787428e8043a16b929fde86e879d05 examples/Python/rrworker.py
d475b3cef1761b7fe82087363c65402d3fd35ecd examples/Scala/syncsub.scala
+9a194dc680787428e8043a16b929fde86e879d05 examples/Python/rrworker.py
+cb990ae7c17f286112b5bf854fdff34bd1928f1b examples/Scala/lruqueue.scala
aa08eecc0c17fc62ede2b94fa68634b180fa191f examples/Python/flserver1.py
4421ab2174f0977f25727892fe7d52853e5dc478 examples/C#/hwclient.cs
53735e3764293bf48c438f830e461d55c22be831 examples/Tcl/asyncsrv.tcl
@@ -554,448 +554,448 @@ aa08eecc0c17fc62ede2b94fa68634b180fa191f examples/Python/flserver1.py
e4a3b1696fa822e9e5c3d258d70d27531f20b8a7 examples/C/flclient3.c
8b478d2ee0ed9760bfca9fe7a444accb1729419c examples/F#/syncsub.fsx
0d4e1c57fd64d769ca8569cdb7ea89726e05c2cd examples/Tcl/ticlient.tcl
-c83260d23a963f64cb93c4819d9328dbbee0d6ae examples/PHP/hwclient.php
e9a8a2b8a59e6e44da261cede967de22c47c922b images/fig5.html
+c83260d23a963f64cb93c4819d9328dbbee0d6ae examples/PHP/hwclient.php
6c00b6105deaf40e891c5ebeb6d3aabd184ae79f examples/CL/mtserver.lisp
edcfc08a8c64e7e5894bac1c3a4a8892a117ca81 images/fig59.txt
ba5ad4f5cafcaf6e248ccf4432256e7d0a5cf766 examples/C++/mspoller.cpp
50476cc0d0334c45adfc266944b1999c995addf2 examples/PHP/taskvent.php
e633a2410644b30a0375aff18d68701b443ee0da examples/C/flclient2.c
-c416903da6d1ee6cb2ac35379d11eba5c3c8e7a4 examples/Lua/mdcliapi.lua
e0b8c0f49f9db5534d97bb6790c2a5570c632dc1 examples/C/pathopub.c
-223024a5402ade184eddf55db02bbe15bc8bfb4f examples/CL/mspoller.lisp
+c416903da6d1ee6cb2ac35379d11eba5c3c8e7a4 examples/Lua/mdcliapi.lua
df123773e6deaa5af25148432e85c15f2c29502a examples/Python/mmiecho.py
-4af79174f673d6e5f956b8b72954be30c1428448 examples/C#/asyncsrv.cs
+223024a5402ade184eddf55db02bbe15bc8bfb4f examples/CL/mspoller.lisp
98ca7026134b3bf1178441c09b51654ae8e02f4f examples/Python/mdwrkapi.py
-a3c860136b65765a0aadc03daf39c0bf35dc328f examples/Haskell/mspoller.hs
+4af79174f673d6e5f956b8b72954be30c1428448 examples/C#/asyncsrv.cs
121fee5553d4db5be317cb2ebea1e45d2bc1f20a examples/F#/rtpapa.fsx
+a3c860136b65765a0aadc03daf39c0bf35dc328f examples/Haskell/mspoller.hs
773d9b88e30742398f0dfac864feca27a9cba332 images/fig2.txt
-148bcbf1c919404bcddc8ca6ad49303defdce41a images/fig67.txt
-8aa4b0bcbf4a6ad58ccff0bbb23dcc556cd748e2 examples/Scala/tasksink.scala
-05e55222ff9ccdeebd1e390fd4132f9079d16f8f examples/PHP/mdcliapi.php
1ded6fcd6e43b28475370ef4580226434a1e8b0f examples/C++/tripping.cpp
-e246ec8a39a5b6c373570f4e889e2cd619a8a0c3 examples/C/wuclient.c
-b423891f5ca513fd282cac08eba1f2fe05420f30 examples/Tcl/rtpapa.tcl
-7f1f4a7dcdf1252b8a586a5f7ede040b33a43011 examples/Racket/peering1.rkt
+05e55222ff9ccdeebd1e390fd4132f9079d16f8f examples/PHP/mdcliapi.php
+8aa4b0bcbf4a6ad58ccff0bbb23dcc556cd748e2 examples/Scala/tasksink.scala
+3b34bd0b674caa82f3c5c6239302f4786bb18581 images/fig67.txt
fcef295564d7fb1595eda27ea44b6ca62ef05772 images/fig58.html
+7f1f4a7dcdf1252b8a586a5f7ede040b33a43011 examples/Racket/peering1.rkt
+b423891f5ca513fd282cac08eba1f2fe05420f30 examples/Tcl/rtpapa.tcl
+e246ec8a39a5b6c373570f4e889e2cd619a8a0c3 examples/C/wuclient.c
3576a6deab0a0102a7801b26103ba13772fb2f7e examples/C#/kvsimple.cs
-bccd2903912a0ee9327147df46c2f2ee4af4eb7d examples/PHP/msgqueue.php
7cd942169f9e19b33d41873f80dca8d24befd4df examples/C++/rrbroker.cpp
+bccd2903912a0ee9327147df46c2f2ee4af4eb7d examples/PHP/msgqueue.php
e8c4a9c6692ce5bff3fbdcb32acdb524156ea984 examples/Perl/hwclient.pl
-0d64f46ec342dd4a0aa4ca4f586e9d8ee7b624c8 examples/C/peering3.c
00aa67e78b7cee281f9d1617da69a81d452431ac examples/PHP/ppqueue.php
+0d64f46ec342dd4a0aa4ca4f586e9d8ee7b624c8 examples/C/peering3.c
56b1b3cc2776711127ee2ad6f0e05293dc823772 examples/C/peering2.c
050c9a52a5e95e34019579a68f6d69ac4593e074 examples/Haxe/psenvpub.hx
-075e873f16b053789c556456a0e575dace6da6ca examples/Java/mtrelay.java
5e4094dbb735012a6734ba3a36d939364fa79387 examples/C#/peering2.cs
-9a9e952133dfe592f2f892ebaf66500cf5697752 examples/PHP/rrworker.php
+075e873f16b053789c556456a0e575dace6da6ca examples/Java/mtrelay.java
cd75195c1bc495e2539327cdc046d7196f1084f5 examples/Python/clonesrv3.py
+9a9e952133dfe592f2f892ebaf66500cf5697752 examples/PHP/rrworker.php
029199c8a81f8216472398be978d95800a21a7f7 examples/Python/rrbroker.py
a2f36e435a8b1c92cce069c196d6662328fb200e examples/Erlang/identity.es
-c61e03c318b63402cced8b78a376416727584a9e examples/C/hwclient.c
d2b84013543f0c5cecd8c40e1c96df54866145da examples/Tcl/clonecli4.tcl
-5bb675a6bd01e261d362f0af4ccdec8115594c40 examples/Perl/mtrelay.pl
-4aa903582072d691c70f133736f2c5e09f5f6b63 examples/Erlang/msreader.es
+c61e03c318b63402cced8b78a376416727584a9e examples/C/hwclient.c
3a493c2ed8ae4e6dde41f3be0d907c300cc7f7fc examples/Perl/version.pl
+4aa903582072d691c70f133736f2c5e09f5f6b63 examples/Erlang/msreader.es
+5bb675a6bd01e261d362f0af4ccdec8115594c40 examples/Perl/mtrelay.pl
b5adb151d9261bf29736db8a224f2546db19c945 examples/Go/interrupt.go
-8ad4fe4702ae57e5f5a02abd6160e9ed303f3543 examples/Haskell/taskvent.hs
426fea1ea4600ddc83f3d6b3ac44159d1f281b13 examples/Haxe/mdbroker.hx
+8ad4fe4702ae57e5f5a02abd6160e9ed303f3543 examples/Haskell/taskvent.hs
d2beeee71f650fd17d66ffd097f65c1a7b95918b examples/Python/espresso.py
04155f35c311c2d7699668f2b76dd90a9dd8ce4f examples/C/lruqueue3.c
efbb0aa9514b89641035e6c0152f893ce5621a7e examples/Python/bstarsrv2.py
b18bfe2c3a7590d8e8b36dbf7e0f2ecec13713e7 examples/Go/psenvpub.go
9e5638343b875fb810b0b3119f20584978a443d7 images/fig49.html
-5ba8f6f513111848be1e658bb3b82ca6497f113e examples/Perl/rrbroker.pl
-fcab854745442e739e92c5916349528cec6ac1ba examples/CL/rtpapa.lisp
bb8a364dafa13cc58fb7beea5660706604fd9bd6 listings/C/listing_25.c
-bdbb101eb5f90914501411e4c64e2c6729a3f138 examples/Haskell/rrbroker.hs
+fcab854745442e739e92c5916349528cec6ac1ba examples/CL/rtpapa.lisp
+5ba8f6f513111848be1e658bb3b82ca6497f113e examples/Perl/rrbroker.pl
5688e5d33f67d93ccafd39cc02790039af8efbf5 examples/Python/clonesrv5.py
+bdbb101eb5f90914501411e4c64e2c6729a3f138 examples/Haskell/rrbroker.hs
28b2c755a5286ba2f2aceb137b2dad3dca76155a examples/PHP/flserver2.php
-eee27cebfc3430bb721105e5d820b5820960f8b8 examples/Tcl/syncpub.tcl
22231306ee0a96931796aeab7edbc7a2b66ccadd examples/C#/wuproxy.cs
+eee27cebfc3430bb721105e5d820b5820960f8b8 examples/Tcl/syncpub.tcl
9aa1790c081e38ae2806d402da7c0ac8c38c1826 examples/C/mspoller.c
54e9bb3554be2a9679b3151229c7b81941a9de55 examples/Python/bstarsrv.py
51ff473e39ebfe618aa97b2200c9180efa785300 examples/C/clonesrv2.c
5f12887afd90c5e5b07f3dd2dd547f1885f49e9c examples/PHP/suisnail.php
-8c1ecd0d543358734087158cf299ffa98f960cda examples/Go/taskvent.go
6d3eb2c3d6aecc2255b97edefc6f91058fd9f26c examples/Erlang/rtmama.es
+8c1ecd0d543358734087158cf299ffa98f960cda examples/Go/taskvent.go
b5311e624a3bc7baee92844ccc0801bed535978c examples/Python/mdclient2.py
-3fbc436d569605fcbbe13f5aec8970780e08e39f examples/Clojure/taskwork.clj
-4a35954a9551456e913337d24e784e7bb1c20ea2 images/fig37.html
f2dc1a39a507666a785eb1d37cd13c96451aa124 examples/PHP/mdclient.php
-0ced7e2e20f9393ec4f0bf1d54b2e787b22ebb43 examples/Lua/identity.lua
+4a35954a9551456e913337d24e784e7bb1c20ea2 images/fig37.html
+3fbc436d569605fcbbe13f5aec8970780e08e39f examples/Clojure/taskwork.clj
2e9b2f62915c7c7faa10df2be688eedbe600df1c examples/C++/rtpapa.cpp
-6f8b4e72b66c9a27409bd8c86db4b22eb805c064 examples/PHP/msreader.php
-7b36da4cfba46a19dfbf7e74b216d4757be8ce60 examples/Tcl/mdclient.tcl
+0ced7e2e20f9393ec4f0bf1d54b2e787b22ebb43 examples/Lua/identity.lua
5e6cdb16402ca8b761d291544b0641006f754d03 examples/Lua/tripping.lua
+7b36da4cfba46a19dfbf7e74b216d4757be8ce60 examples/Tcl/mdclient.tcl
+6f8b4e72b66c9a27409bd8c86db4b22eb805c064 examples/PHP/msreader.php
ca93af4d2bb7d42aca2eaf228fe14735d291a409 examples/C/bstarcli.c
9806d055c7c4df58841399c365ed929c79a179a8 examples/Felix/taskvent.flx
7015b197d0a9ba9b09239245af73188343aa9f65 examples/Go/msreader.go
5e4d11be82cdea93f9dcf219dc80ac65589c4951 examples/Java/tasksink.java
966fd89e463f52e05b95643c706b2721aa17a7e5 examples/Scala/lruqueue2.scala
-1c49196eff8ba52f0368fe765693375d2c864074 examples/Node.js/wuproxy.js
-eea46f7ad0d01a5b7372defe55b3815c940ec16e examples/Perl/taskwork.pl
06b8716eeff84d3f283fa775f2e150236dcdd3c1 images/fig61.html
+eea46f7ad0d01a5b7372defe55b3815c940ec16e examples/Perl/taskwork.pl
+1c49196eff8ba52f0368fe765693375d2c864074 examples/Node.js/wuproxy.js
28b49ef3458db97ff3e067ffbe82e679dcdbc85d examples/CL/msgqueue.lisp
8eed9ea7f4bd3aae9478c491b9b89a9104521ec9 listings/C/listing_5.c
-2e2597cdb67625c3605417fc9b251f98309d9cc8 examples/F#/mtrelay.fsx
9f559bd8bc94596cf8c37af3c290b6f4ae095357 examples/C/lvcache.c
-926b8eb58ced92421f238451ac200d924edb18c6 examples/Java/rrbroker.java
-fb7d36c3d0ccca511b90bbc02d08895bbd5abfaf listings/C/listing_18.c
+2e2597cdb67625c3605417fc9b251f98309d9cc8 examples/F#/mtrelay.fsx
ad40093a4276cdcb238dad6fd6b3d3444586163a examples/Haxe/peering3.hx
-246db286feedecb8e527928bcc3a677ce9c27e3f listings/C/listing_13.c
+fb7d36c3d0ccca511b90bbc02d08895bbd5abfaf listings/C/listing_18.c
+926b8eb58ced92421f238451ac200d924edb18c6 examples/Java/rrbroker.java
3251f5a918c518d4d999745f4bf519aff15c7fe9 examples/C++/spqueue.cpp
-599ba58b3c662b5544df37cbcf1629bd53d4d73e examples/Haskell/mtserver.hs
+246db286feedecb8e527928bcc3a677ce9c27e3f listings/C/listing_13.c
297ef3f42da8aad0b0f0d6e923137aaf9aa5b36c examples/Python/ticlient.py
-34169d317fb92457e6213af3517d011b9099f813 examples/Lua/rrworker.lua
+599ba58b3c662b5544df37cbcf1629bd53d4d73e examples/Haskell/mtserver.hs
6329e7bd426fcd55c8f09d1cdb284c6c208e5f4b examples/C/mdcliapi2.c
+34169d317fb92457e6213af3517d011b9099f813 examples/Lua/rrworker.lua
9808e21fc8c16b78260520099c06e012328fe7ef examples/Java/rrclient.java
-f9dc879afb428151379e0d73e9b2f24e81015dda examples/Lua/mspoller.lua
c6099200b7db2b0e7edf766f066831036afb1fb3 examples/Tcl/kvsimple.tcl
-01e564ed11b92b06ca1c9d2b5d3750014d094389 examples/Go/rtdealer.go
+f9dc879afb428151379e0d73e9b2f24e81015dda examples/Lua/mspoller.lua
f28206512f385b7f739d7601c0f1fe65f7c4b8da examples/Python/rtpapa.py
+01e564ed11b92b06ca1c9d2b5d3750014d094389 examples/Go/rtdealer.go
d86949a2f0c731f7adebc68817bd40a1d3956249 examples/Haxe/mdcliapi2.hx
f9a1065debae27c68bb4b5ba2f42f1c2f750882e examples/Haskell/taskwork2.hs
72f0ab41ac23d1f977d5d2b3f9aa6f0bcd5678b0 examples/Tcl/wuserver.tcl
-fe0f033d4ba282d16a37e0285d45f432d82d7063 examples/PHP/ppworker.php
73b1bb15e93cc348e0517c7432b5c31cdc14164f examples/Python/mdclient.py
-ade34ce0a5a2dbb157daec9b0a70da5131e731f3 examples/PHP/identity.php
+fe0f033d4ba282d16a37e0285d45f432d82d7063 examples/PHP/ppworker.php
d56849079c6febe5435dc8e9d80efc6cd3bc0b57 examples/Tcl/psenvpub.tcl
+ade34ce0a5a2dbb157daec9b0a70da5131e731f3 examples/PHP/identity.php
a19133e3125629d9e088dc5e093ca64fa079adb4 examples/Clojure/lruqueue.clj
1a1f021db1ee5026b046979255bc06557ce5ccc5 examples/Python/taskwork2.py
-4bdd58c609fe956f3e171fefccbaa281f27ee0df images/fig60.txt
-b0433d2cd17f5378ca0fb15e29a38dfd7676a38e examples/Clojure/rrworker.clj
-07e14a2b83478e4490275d8616c878ca51b935f0 examples/Tcl/hwclient.tcl
41ad86e756c7155559c881642dda49b1c371c7aa examples/Haskell/rtpapa.hs
+07e14a2b83478e4490275d8616c878ca51b935f0 examples/Tcl/hwclient.tcl
+b0433d2cd17f5378ca0fb15e29a38dfd7676a38e examples/Clojure/rrworker.clj
+4bdd58c609fe956f3e171fefccbaa281f27ee0df images/fig60.txt
4f2a77f7a7b4721709238275bf15d317f57f5324 examples/Python/lruqueue.py
57dc37180cf0cb55cf74cab641aeb5963f0dd2f6 examples/C#/taskwork2.cs
-be1675522415917024e893c987eb2bfa3cea6497 examples/CL/psenvpub.lisp
-89084b3f9396ed35e9f2ed97fd74177fdba99ada examples/C++/mtrelay.cpp
87f4904a607a3714adc96805bc84b8d8bfd688b1 examples/Tcl/kvmsg.tcl
+89084b3f9396ed35e9f2ed97fd74177fdba99ada examples/C++/mtrelay.cpp
+be1675522415917024e893c987eb2bfa3cea6497 examples/CL/psenvpub.lisp
44cef01d89e8ea97c720bb48d1df0f80ba18220a examples/Go/rtmama.go
0059f7f429f9c372acfe715a50ba9856ff24b7ee examples/C++/psenvsub.cpp
-0a814f8517cb1f1dc1f6afb266e73578ce5d3f38 examples/Perl/psenvpub.pl
a0215d4a23f8e9eb3a52799450bfa6b7b48497ef examples/C/psenvpub.c
+0a814f8517cb1f1dc1f6afb266e73578ce5d3f38 examples/Perl/psenvpub.pl
7bd3e7bec716f58b445c5aa362487cb561ac8197 examples/Scala/interrupt.scala
dbfe698065615c709df22f3dbafe20d92c10df21 examples/C++/wuproxy.cpp
831cbd27da4d2640d2138376c68fdf727f39fc90 examples/CL/rtdealer.lisp
13a196b358782d3b14cf3f1d91d1e8a9b54b8b19 examples/Erlang/rrbroker.es
-5b1deb0c265639e66c0460b33cfdde651529bdda examples/Scala/asyncsrv.scala
-9547f3e8584d3cd720b50b26f44a900de49decd6 examples/Python/flclient3.py
cd3585acc62799fb788654070428edd3848458f8 examples/Tcl/flcliapi.tcl
-70f78a553b0ce661932abed8aea9c29b3a7cd246 examples/Haxe/msgqueue.hx
-3d4902440450deb9e6fe770a5d180cdebd1d75aa examples/C++/taskwork2.cpp
+9547f3e8584d3cd720b50b26f44a900de49decd6 examples/Python/flclient3.py
+5b1deb0c265639e66c0460b33cfdde651529bdda examples/Scala/asyncsrv.scala
9b64452578fa4991a7b12b83726618e97d9b6961 examples/Python/peering2.py
+3d4902440450deb9e6fe770a5d180cdebd1d75aa examples/C++/taskwork2.cpp
+70f78a553b0ce661932abed8aea9c29b3a7cd246 examples/Haxe/msgqueue.hx
fe6558459ad638dc7b3eb63bc0a0a7603ae148ba images/fig11.html
ce1b0ff8570cfaccf4da8d1616efa7a9832691c0 examples/Erlang/tasksink2.es
-b8810620cd3720f59d0da02a129aa15e7b6a7c9c examples/C#/spworker.cs
-8216f6f8047f8dfb1b32fdf6e3b9e8782f4e1268 examples/Lua/mmiecho.lua
6a84a114f73ca2461b071729af3fae4a944a45fe examples/Python/flclient1.py
+8216f6f8047f8dfb1b32fdf6e3b9e8782f4e1268 examples/Lua/mmiecho.lua
+b8810620cd3720f59d0da02a129aa15e7b6a7c9c examples/C#/spworker.cs
81765184f1056970b6f3746fa3a5f88a919bce9d examples/C/msreader.c
fc5f173eb09369a47d77a13302d5f41a0d6f1efd examples/C/titanic.c
-507963dde601072a14f59da5ff76ef8c82d44426 examples/Node.js/rrworker.js
d2897ea493dd51909f8493f4696a61e179839348 examples/Haskell/rrworker.hs
-37d77f78d5abb22b37740541e9a6bf87f503b5b9 images/fig15.html
+507963dde601072a14f59da5ff76ef8c82d44426 examples/Node.js/rrworker.js
1e57bb46cc6483e97c5007a9a6f8eb34ff800fd3 examples/Haxe/spqueue.hx
+37d77f78d5abb22b37740541e9a6bf87f503b5b9 images/fig15.html
8b89095e2d125cdbd75153799b27662006e5fa23 examples/Ruby/syncpub.rb
-6e380b8ab0c1328367eebb09ca8898061300ea0c examples/Scala/taskvent.scala
f29224468cd3a41a6c49e15473255a03ccc714a1 examples/Tcl/spqueue.tcl
-1c8bb916ec8b7f21cdd00f557298fb70f3a62e1f examples/Ruby/mtrelay.rb
-d4c19277f6e8d43d79c7408396bd6aa56823189c examples/Lua/mtrelay.lua
+6e380b8ab0c1328367eebb09ca8898061300ea0c examples/Scala/taskvent.scala
359dc5780d7725178ba80e168cfbc8034bf6d195 listings/C/listing_16.c
-b8d37248d8b6f3d5b75236d1bb9912d9d18322de examples/F#/wuproxy.fsx
+d4c19277f6e8d43d79c7408396bd6aa56823189c examples/Lua/mtrelay.lua
+1c8bb916ec8b7f21cdd00f557298fb70f3a62e1f examples/Ruby/mtrelay.rb
e401bbc295490d46d4bc2faf43e18d83ecc347c8 examples/Tcl/tripping.tcl
-f6ad34460eb79ea8e8bc3a76f08861d041410459 examples/C/wuproxy.c
-15c1c67a75d5fd2494d7accd02825c71314a9328 images/fig6.html
-f991463bec647186d7d04b96f1d4edba048d6a18 examples/Python/spworker.py
+b8d37248d8b6f3d5b75236d1bb9912d9d18322de examples/F#/wuproxy.fsx
bd737c0e81f3c78792359c055f56d20d89126da1 examples/Python/flserver2.py
-77aa442443b920909d689239f4bf18f9c3bf550f examples/Ruby/rrworker.rb
-affd0fb52c7907c522d3e367428ae366fa97e3dd listings/C/listing_11.c
-a125413e2b9b557bb3e8f4529b4431a3537d34d3 examples/CL/lruqueue.lisp
+f991463bec647186d7d04b96f1d4edba048d6a18 examples/Python/spworker.py
+15c1c67a75d5fd2494d7accd02825c71314a9328 images/fig6.html
+f6ad34460eb79ea8e8bc3a76f08861d041410459 examples/C/wuproxy.c
1ed9e08b4f617e4c61dcbc7fc2d3e69e7ed78ea6 examples/Haxe/mdwrkapi.hx
+a125413e2b9b557bb3e8f4529b4431a3537d34d3 examples/CL/lruqueue.lisp
+affd0fb52c7907c522d3e367428ae366fa97e3dd listings/C/listing_11.c
+77aa442443b920909d689239f4bf18f9c3bf550f examples/Ruby/rrworker.rb
081680119fb0cc113bcd132d9d8bd83cb1014f9a examples/Python/peering1.py
-de75777b140ade5e3a8d40dd1e0add6b130012cf examples/Haskell/msgqueue.hs
29510a4334f677770d1a5bcd1cda0ac5b26e1847 examples/Node.js/taskwork2.js
-b6669cd636449b8b769bcbd7686ad1455f4584d2 examples/PHP/lruqueue2.php
+de75777b140ade5e3a8d40dd1e0add6b130012cf examples/Haskell/msgqueue.hs
16a9d753c6e587878242d62dd2eb01f2f310276a examples/Python/mdworker.py
-5a60e7eb2d3d0835495ecfabe154f981eb78d97d images/fig70.txt
+b6669cd636449b8b769bcbd7686ad1455f4584d2 examples/PHP/lruqueue2.php
55bc344130904f9cff857fede54c455da1ff9239 images/fig42.html
+5a60e7eb2d3d0835495ecfabe154f981eb78d97d images/fig70.txt
2520d7b1dd0eb5a5c962382a0e0731c64eb4711f examples/Tcl/mspoller.tcl
2eb200ebe40e5ad8519904958bd8579a0ffb1852 examples/C++/lruqueue.cpp
8f74fafe26d24e942273d113e48df557be712885 examples/Haxe/taskwork.hx
-13d756a24bc2949123ea50a7dc454555aeb5af1e examples/Python/peering3.py
-6fd360f24ce4cdb25eb5d97b5a60acbbe30fd1c5 examples/Python/flclient2.py
36e9f19ba4ca8cb4523d4cf556ac47a7b13e4e38 examples/C/clonecli6.c
-98a30320f3002931534b647d2fcde0cadf939bcf examples/C/version.c
+6fd360f24ce4cdb25eb5d97b5a60acbbe30fd1c5 examples/Python/flclient2.py
+13d756a24bc2949123ea50a7dc454555aeb5af1e examples/Python/peering3.py
4b0ef7fccf47c3c6603522f231c2c3d04dfbb6f8 examples/Haxe/rtmama.hx
-3cdd8e404c20f5d9d7fb256fee0da602b9a18704 images/fig33.html
+98a30320f3002931534b647d2fcde0cadf939bcf examples/C/version.c
06c48b0da266de82c4649bf008e65076641da888 examples/C++/mdclient.cpp
+3cdd8e404c20f5d9d7fb256fee0da602b9a18704 images/fig33.html
7984fc0f7d2de95df53ead4b5e5a47c820a4fa21 examples/Lua/interrupt.lua
-f914109feb515bf851c5801b26fee45da3db63ad examples/Ruby/wuproxy.rb
1c73d2833ca6209e4b88c3416b40b4ef3aea73e4 listings/C/listing_24.c
+f914109feb515bf851c5801b26fee45da3db63ad examples/Ruby/wuproxy.rb
5eb82c1ee69b7f3926ddb92b9fa676bffbc36abf images/fig7.txt
3aaf0630012de20424294b35f3f9b8c9754eb34c examples/Ruby/mtserver.rb
-217ab631c7defeb84bcb21a0f746b7d2255d5845 images/fig21.txt
-475fc02c5d2db1db93a128341110240d89565e76 images/fig3.txt
-c5daa5026683f992a38e451a02137c852ac10cf6 examples/Ruby/taskwork.rb
-37cae4e61787d0e919eecb92bf8bb120b7af9720 examples/C#/wuclient.cs
d9d7a8e9eb05f3a09d392fa58a6c7fdb1235ee3c examples/PHP/flclient2.php
+37cae4e61787d0e919eecb92bf8bb120b7af9720 examples/C#/wuclient.cs
+c5daa5026683f992a38e451a02137c852ac10cf6 examples/Ruby/taskwork.rb
+475fc02c5d2db1db93a128341110240d89565e76 images/fig3.txt
+217ab631c7defeb84bcb21a0f746b7d2255d5845 images/fig21.txt
2c161564a343c05cfaf674d40633ee75f60adcd0 images/fig20.html
-4422b526888fc8a6813af4604da755c6a102fa2c examples/Python/fileio3.py
8fa200a41a9f1c62f29f6234d27f654351e2932f examples/Python/rtmama.py
+4422b526888fc8a6813af4604da755c6a102fa2c examples/Python/fileio3.py
95c94536721e46967930374828620a8f950e2af6 examples/Tcl/peering3.tcl
-ebbd0aa8348321e3c7f213b53108f1270eae93fd examples/Haskell/wuproxy.hs
727a1085c2913a13e7ba638e955f349ffd427d86 examples/Java/interrupt.java
+ebbd0aa8348321e3c7f213b53108f1270eae93fd examples/Haskell/wuproxy.hs
a168b3b8736bbf47f89200359997270be5d5ed77 examples/Ruby/identity.rb
51fa14a7e02e29eaa7c5781754987464de7e87d8 images/fig16.txt
-0c57d32059f95798b4e79c5843c71ab0633ac697 examples/Erlang/msgqueue.es
-37f7554a516a5318d6deb00d0186cf0674235ecc examples/CL/version.lisp
7adeac0c791e19168f44c751cba6c468533b1f30 examples/Lua/mdwrkapi.lua
-ab0a2a2e4104987e4f51ad3fe9edd0754fbcbf1d examples/Haxe/bstarcli.hx
+37f7554a516a5318d6deb00d0186cf0674235ecc examples/CL/version.lisp
+0c57d32059f95798b4e79c5843c71ab0633ac697 examples/Erlang/msgqueue.es
8a7f586b588d8708f23e3380a404182c983be0a2 examples/Python/clonecli6.py
+ab0a2a2e4104987e4f51ad3fe9edd0754fbcbf1d examples/Haxe/bstarcli.hx
1ef10b9ac9ce6f170e6f7ea5cb30b1a3e60a46db examples/Node.js/mspoller.js
e1389503d088f80b2780b4ac71cb2f618110d279 examples/Erlang/taskvent.es
-349b329a577fdbd36094c2c65e5cce116be777e1 examples/Racket/wuserver.rkt
740a88a8cabf27e1052a43cd954c08f516d54d80 images/fig67.html
-86de846f01c7257073d69d26630ae8a8deaa30cc examples/Haxe/taskvent.hx
+349b329a577fdbd36094c2c65e5cce116be777e1 examples/Racket/wuserver.rkt
5fecf9a27a5152a346eab9fba55050d0cf5700f8 examples/Scala/taskwork.scala
+86de846f01c7257073d69d26630ae8a8deaa30cc examples/Haxe/taskvent.hx
5afc4446a7798cee11dce71b26c5cef0b8c5b162 examples/PHP/spworker.php
bfb9fe4c39e6d664704202a1af6236b96069f3ac examples/PHP/mdworker.php
b6a99b3f201db11d19790372f661d267888c5b8d listings/C/listing_4.c
f95ce7ff5d5d9c8c7ba2d46e4188e16756ad4fec examples/Ruby/msreader.rb
62f0018be9dff9f0fe31a5c7709a7c195294c451 examples/CL/wuclient.lisp
-2d0a3564500d27fe25b9d9d39f879dd6e9096bbb images/fig62.txt
-38372c9432dc9f39d167c3c6dcc36ea9235c25a8 examples/Java/wuproxy.java
890885120c65cd906f1ea96c6f8bb5269ab93847 examples/Python/flserver3.py
+38372c9432dc9f39d167c3c6dcc36ea9235c25a8 examples/Java/wuproxy.java
+2d0a3564500d27fe25b9d9d39f879dd6e9096bbb images/fig62.txt
efd06bd3efcd72816bb803cc4a7e0ec99c5b0fab examples/Lua/psenvpub.lua
9674c84dfd655ecd66ead6148ca75e2ffbee866b examples/C/flserver1.c
acf30149127fac9ca2c198a2f5569406f46d05c8 examples/Tcl/clonecli1.tcl
76d8d6cfef97ea41a8177e27cff62d110565426b examples/PHP/wuserver.php
e7f2aa4a07c5c83055dc8c08dc6754f0495df686 images/fig3.html
-eed0719e9abdd3903c9d60f7e4f283d1babec888 examples/CL/mtrelay.lisp
3027e6a691112166746d2fea64ccee1f8a77647b examples/Ruby/tasksink2.rb
-567bd4b67dae06f35eb25a923fc6aa1bc79b1cb8 examples/Perl/wuclient.pl
+eed0719e9abdd3903c9d60f7e4f283d1babec888 examples/CL/mtrelay.lisp
b23097b0ddfca33f789e9fde7614019de44931c1 examples/Java/msreader.java
+567bd4b67dae06f35eb25a923fc6aa1bc79b1cb8 examples/Perl/wuclient.pl
3097b00c92d8dfbc11574c6bf5e49e514c7c8185 examples/Haskell/hwclient.hs
-b431b5dfdb526d0233b143a76b5593a0e9ab3781 examples/C++/hwclient.cpp
896001032bd57929c10f206c447b5c0211e146a4 examples/Ruby/version.rb
-6435e3887e808dcc4d5492ebded68aad5c546711 images/fig1.txt
+b431b5dfdb526d0233b143a76b5593a0e9ab3781 examples/C++/hwclient.cpp
6fa2706b7452079b5064f3b10ecf13b046e04315 examples/Erlang/wuserver.es
+6435e3887e808dcc4d5492ebded68aad5c546711 images/fig1.txt
030637f70515212ce10ce3ad52ba57874ee6dfef examples/CL/taskwork.lisp
f5eaf0093cdb470615c1d1aeea124d13dee3122c examples/Perl/tasksink2.pl
de9c5512b5274e562bb3f8018619e42c70dedd78 images/fig59.html
46552d7e7d69638db65dc7abda06610575521cae examples/Erlang/rtpapa.es
48b11da42c06201c97e804aa55f88584b468b7fb images/fig17.txt
-30d223be12b36ff1928a9a386f9d3c9137be7fc7 examples/Haskell/version.hs
2f206b28a569c44201f1b0488bda32852b4f4cd1 examples/C#/lruqueue.cs
+30d223be12b36ff1928a9a386f9d3c9137be7fc7 examples/Haskell/version.hs
c24f22b4f59229bb300911482f9de4b8181bde5f images/fig68.html
5749da0d2c7a5e101cdbf5c20a9fc785c4715663 examples/Lua/asyncsrv.lua
a549bfefda37eb24bec206266654fa07b59c47f3 listings/C/listing_1.c
43475b500ea4450e690af0bc3c5c6e918991efc0 examples/Python/spqueue.py
81c74743b3f7dc51392275f9d90b6c300a9e1985 examples/PHP/psenvpub.php
855c1c483a7b292b18287fc9a6c01ecd078428eb examples/Haskell/psenvpub.hs
-76757f1ea4c6d00304b1c3862bbce137923ce313 examples/C++/hwserver.cpp
-7a040260a478b52bd82263338e9984294adfe4d2 examples/Clojure/msreader.clj
-d4a9334aedf99b5a80c6aa8d4bad7c4a78a95bf6 examples/Erlang/asyncsrv.es
5ff3c2c179e232a14a77c44b28a4ba00136df193 examples/C/mdcliapi.c
+d4a9334aedf99b5a80c6aa8d4bad7c4a78a95bf6 examples/Erlang/asyncsrv.es
+7a040260a478b52bd82263338e9984294adfe4d2 examples/Clojure/msreader.clj
+76757f1ea4c6d00304b1c3862bbce137923ce313 examples/C++/hwserver.cpp
e85721b320ccdce1dc1aebb6ba48a0b3add16064 images/fig9.html
45e372bbd69237f77bda4cd8ebfcb6b322624993 examples/Tcl/lpclient.tcl
63ad6de94fb07b6c81a710b62e7c3448326958b6 examples/Haskell/asyncsrv.hs
-69ee8ec8ac6b80900eec9db9a733fbc91ec04755 examples/Tcl/psenvsub.tcl
6be59a869b523f84d39911ba3555bb5a776e2195 examples/Go/version.go
+69ee8ec8ac6b80900eec9db9a733fbc91ec04755 examples/Tcl/psenvsub.tcl
3091466db64aaca3410b5ff12c86a0718ca012ea examples/Scala/rrclient.scala
2839f303e38a0b5887ed7389857d1e529bcab83b examples/Lua/mdclient.lua
e9dd478370cd491253aa8d8f1c6c1edd4058a87f examples/Ruby/interrupt.rb
b4feff8a129abe704d2b6e50dda8619a44db1dd7 examples/F#/peering2.fsx
7eecdb8dd0439f2e3ccfd373207e4a347b633fcb examples/Scala/mtserver.scala
-90c96bfd1e30968d85624f75d7bb774b863dcffa examples/Haxe/tasksink.hx
-3fbc601c94b9a21ab2ba76f7ce7b1cf923638860 examples/Lua/tasksink2.lua
bcbf3df1c3a7b6177e2fb9c4b23fbef2c04fe453 examples/Tcl/tasksink2.tcl
-be36eeeab63ecc6a3ac894f7ce853c8dd61cd815 examples/Scala/psenvpub.scala
-f434d7d404be5dd39ac87e07b22bd0e5e9b2aac2 examples/F#/taskwork.fsx
+3fbc601c94b9a21ab2ba76f7ce7b1cf923638860 examples/Lua/tasksink2.lua
+90c96bfd1e30968d85624f75d7bb774b863dcffa examples/Haxe/tasksink.hx
fd840f1087011ab07f44ab32432d7753130b376e examples/PHP/tripping.php
+f434d7d404be5dd39ac87e07b22bd0e5e9b2aac2 examples/F#/taskwork.fsx
+be36eeeab63ecc6a3ac894f7ce853c8dd61cd815 examples/Scala/psenvpub.scala
f40c8598540a80e5c0faa3cd3bc173065254bbde examples/Erlang/mtserver.es
78a06c0b8f7d02d0e076bff3dc7e89b742f18848 examples/Haxe/wuserver.hx
-ef9136628f5af5723a2e29a702db5730c2602462 examples/Scala/version.scala
b423eb37986f160fe30abaf4ae5aa02a9d543b19 examples/Ruby/mdwrkapi.rb
-587ddc20486b8a8bbecbf9f827990413a0202276 examples/Scala/psenvsub.scala
-70b335b807ca7bf9ffd8cff13effa7af5e2ec636 examples/CL/taskwork2.lisp
+ef9136628f5af5723a2e29a702db5730c2602462 examples/Scala/version.scala
d5fbea85f42e96cd6ce39282e7b0cecf68db1f5a examples/Lua/lruqueue2.lua
-da7b030c35b1fa509d48955824533378176cd6c1 examples/Java/mspoller.java
+70b335b807ca7bf9ffd8cff13effa7af5e2ec636 examples/CL/taskwork2.lisp
+587ddc20486b8a8bbecbf9f827990413a0202276 examples/Scala/psenvsub.scala
9a14d89ee3133939587623501482a371bc01b44f examples/Objective-C/tasksink2.m
-10c8002969fa0f6b8dd11743ed2e6d7838f492b5 images/fig32.txt
-364c89e77f1f71046813b3a8eea91071d67eb65b examples/Ruby/msgqueue.rb
-b81c5daae5af78bf186862209dfdd23cbd259c9b examples/F#/tasksink.fsx
+da7b030c35b1fa509d48955824533378176cd6c1 examples/Java/mspoller.java
4a4f4e2f4f754147cbf7a0ab70473641baa0eb33 examples/Tcl/peering2.tcl
+b81c5daae5af78bf186862209dfdd23cbd259c9b examples/F#/tasksink.fsx
+364c89e77f1f71046813b3a8eea91071d67eb65b examples/Ruby/msgqueue.rb
+10c8002969fa0f6b8dd11743ed2e6d7838f492b5 images/fig32.txt
b0c4d4ae03d3bce0aa3ba3a1f8d2c0c92fc61163 examples/Go/mtserver.go
94bd0761d22aa8b79d0e092393e467a890c4c398 examples/Go/identity.go
e8599842cec9cdcd9745b9631e20aa1f10663895 examples/C#/msreader.cs
-60ad3fb8a0edf0b045ae43b2d1f8d3d62e535786 examples/Go/syncpub.go
fe82660cb9ec7f88119cfe65c5f224ad3ca8b9ee examples/Tcl/ppqueue.tcl
+60ad3fb8a0edf0b045ae43b2d1f8d3d62e535786 examples/Go/syncpub.go
d1e07af7a0491c272999d8365c73910d298a5344 examples/Java/mdcliapi.java
7cfd2a877dcc9ca3f1ff58a187fb1176de05809a examples/PHP/rtdealer.php
-bcd0ea8d3974a2eb981f59b41453d15bc34cd7fe listings/C/listing_6.c
-3cff13c0ea57bd26641e432f56df490e19ab89ce examples/PHP/taskwork2.php
43bbe0fa64a80b155c832f3ca67608827c6e2c11 examples/PHP/ticlient.php
+3cff13c0ea57bd26641e432f56df490e19ab89ce examples/PHP/taskwork2.php
+bcd0ea8d3974a2eb981f59b41453d15bc34cd7fe listings/C/listing_6.c
e09770716d02317767d31be123858109e2423d97 examples/Scala/mtrelay.scala
-2b917388af03a4d304174c1e2350126d1db69bee images/fig18.txt
ddb6d72a334f3dbfc30f7f6ea52d754492bd5781 examples/Python/suisnail.py
-90f08c7e6bad7ae4d6eca598ee68832bf647a03a examples/Perl/tasksink.pl
+2b917388af03a4d304174c1e2350126d1db69bee images/fig18.txt
a99fc828954bca4c08e077a9147ca1a99b3a29d0 examples/F#/peering3.fsx
+90f08c7e6bad7ae4d6eca598ee68832bf647a03a examples/Perl/tasksink.pl
880a97667e3465a2dced8dbde99c9f71c8ac9c53 examples/Tcl/ppworker.tcl
2a5844bcccf24c33c71f01bdbfa71a1c6df7d3ea images/fig10.html
160ea8fcc92e6b05d9906ce63c107a34a138d2af examples/Node.js/rrclient.js
-0c36eaafbc0b292138265d1868f1a4f53c65c967 images/fig41.html
262f39cfa349ed577fbf83d6b2991affa3b6a4d7 listings/C/listing_19.c
+0c36eaafbc0b292138265d1868f1a4f53c65c967 images/fig41.html
7a2457de72416fa3d44371b5fdd9c6bf38f2e0ba examples/Haxe/psenvsub.hx
db2ac0d4710d8efe65110a2ff66b0ed7e7ba0590 examples/Haxe/mmiecho.hx
c410d3af3592d2be77fc80aa4fbca11d3d45cb7e examples/Haxe/titanic.hx
-3846e78a0a42959184591e52d984aa8d160bd489 images/fig6.txt
-7fab697f4da9c4b44dc5ffb9d0faedc487d7c385 examples/Haxe/mtserver.hx
b647647a23ad6f52291058437ba544d8ea9cba15 examples/Haxe/wuproxy.hx
+7fab697f4da9c4b44dc5ffb9d0faedc487d7c385 examples/Haxe/mtserver.hx
+3846e78a0a42959184591e52d984aa8d160bd489 images/fig6.txt
80751b819937675958af95127b94b68fbe54d3aa examples/C#/tasksink2.cs
e5c4e4677ea617ccd6e10924690026d74d66f6bd examples/C/identity.c
1de227372609fe7a702519a0c6ab2950a6e1ffcf examples/Lua/spqueue.lua
715e1846bcf2bd9cbe050d6df22d8a30e88f4aab examples/C/taskwork2.c
86dbeb13e42f87f7448089f54c3ddf99dde71030 examples/C/lruqueue.c
-e88a19370d726c2a8f7c0c41e5bebda41df2debb examples/Lua/lruqueue.lua
12562ea04012ac759fd18d1809ecb8176e19842f examples/Python/ppqueue.py
+e88a19370d726c2a8f7c0c41e5bebda41df2debb examples/Lua/lruqueue.lua
06166b811305de2ee97b632732dfbfeef3ccf9e4 examples/Tcl/lpserver.tcl
-2520d1cabf0172062f0c4b6a87145e6b5b399e44 examples/Lua/flserver1.lua
abb8ce37b7d3a289074f71f803b65ae28f9829f8 examples/Tcl/clonesrv4.tcl
-dab6b84c5feee87a09ace593567e148b3141eccd examples/Lua/wuserver.lua
+2520d1cabf0172062f0c4b6a87145e6b5b399e44 examples/Lua/flserver1.lua
89e13f078c635c5e0065956a079fa9771a24cf07 examples/Tcl/mdbroker.tcl
-cf0ae0c61431641b75f967fa773614ff66cc4b8b examples/CL/rrbroker.lisp
-a15582497ae1c12cdffa1c872caa487601e82c8c examples/Python/wuserver.py
+dab6b84c5feee87a09ace593567e148b3141eccd examples/Lua/wuserver.lua
ee9a1c94b5f978f6592c468aa0d6caedc7f827d3 examples/Tcl/wuclient.tcl
+a15582497ae1c12cdffa1c872caa487601e82c8c examples/Python/wuserver.py
+cf0ae0c61431641b75f967fa773614ff66cc4b8b examples/CL/rrbroker.lisp
30694694e93b0f1b2b2cfba410d12b0e0c41aa0c examples/C/ticlient.c
-beba4fe71981ae5f231e49acfc20c7df81020307 examples/Python/taskvent.py
29ebe8f3b290a947f8eaba3b35128c2e7126cc1e examples/Ruby/taskvent.rb
-17e459c9891d231d8cf52d9ca1bfa777dfe67e5d examples/Lua/syncsub.lua
-3d7d70e52f8814aec8fe3088f07b3ed6f94f3f64 listings/C/listing_10.c
-a76d70336e1fb5096de4f74b0105139211814953 examples/Java/tasksink2.java
-3d2b26444d7bd68c29391ed42f6d2c02f5747f04 examples/Ruby/mdclient2.rb
+beba4fe71981ae5f231e49acfc20c7df81020307 examples/Python/taskvent.py
cad65a623365f9d47285f8a6d073f7392e43f94b examples/Python/kvmsg.py
+3d2b26444d7bd68c29391ed42f6d2c02f5747f04 examples/Ruby/mdclient2.rb
+a76d70336e1fb5096de4f74b0105139211814953 examples/Java/tasksink2.java
+3d7d70e52f8814aec8fe3088f07b3ed6f94f3f64 listings/C/listing_10.c
+17e459c9891d231d8cf52d9ca1bfa777dfe67e5d examples/Lua/syncsub.lua
7a345075d85985dff0f8ad9a1157f7408efebefe images/fig35.txt
1cc5cd39f0b2232712aadfa9434f000eabd3eb7a examples/Ruby/mmiecho.rb
-f81257bbf9b68c0dea9564dab8a2e971f91c6449 images/fig56.txt
8085ca1c76460428ee1dd6b12ec7b78de15d1239 examples/Haxe/ticlient.hx
+f81257bbf9b68c0dea9564dab8a2e971f91c6449 images/fig56.txt
131b9d824abb52c510eb401dfdaa340f3b4d3622 examples/Python/clone.py
073a42ebad1b366801557f2eb0285f87943d153c examples/Haxe/mtrelay.hx
-923564b967c88a69f5a35b0214d14be5c27ad9a3 examples/Java/lruqueue.java
014919f68d6ec5a501157ef55a2dc4b2fe1c4110 examples/Tcl/bstarcli.tcl
+923564b967c88a69f5a35b0214d14be5c27ad9a3 examples/Java/lruqueue.java
02b4e3920e1b8eba93b0f9faaaf6f91f1a0953a1 images/fig42.txt
08e331390a51964ee1232291b99fe34ff3d41aeb examples/C++/mdclient2.cpp
f800d0fba27d579046470d7f59351d2a545c1ca7 examples/F#/wuserver.fsx
-b55597cf5bcbd0f20654ed8aee4284ae91ff8fc1 images/fig66.txt
-2d0d39e83a4aedbb0a2636d1f1af339a13ff0b5d examples/Tcl/wuproxy.tcl
-80fa778b782013d5858483c6bbc60cac5ac02e2f examples/Tcl/mdclient2.tcl
f521a28296362b336759c6d6c70b00ed3b1c79ac examples/Python/kvsimple.py
-790af6d31afbb5989ebd9498ca945b29ce0ae9ff examples/Node.js/syncsub.js
+80fa778b782013d5858483c6bbc60cac5ac02e2f examples/Tcl/mdclient2.tcl
+2d0d39e83a4aedbb0a2636d1f1af339a13ff0b5d examples/Tcl/wuproxy.tcl
+f89357fcecef6c4b6f351d6610b50c59a4b33338 images/fig66.txt
cb7110eb2dda8a85645e294bd30cd94eee627537 examples/Go/rrworker.go
+790af6d31afbb5989ebd9498ca945b29ce0ae9ff examples/Node.js/syncsub.js
64735270db8985ceb20a5991d97bfb43b437d22d examples/Python/mtrelay.py
-bbbd0a5797391c41f95d65a1581c3f118d741ed7 examples/C/taskvent.c
8ebdebda345981e274bc43a97614033c25fc0f0c examples/Ruby/wuserver.rb
-a32ab8cfc2b4d0dc740706f77a1d5f4da34ddb12 examples/Lua/msgqueue.lua
-209004a947f5930aa1982e001567899ddbc1ceeb examples/Go/msgqueue.go
+bbbd0a5797391c41f95d65a1581c3f118d741ed7 examples/C/taskvent.c
6f500d37d0b8af5b8f70193b8963bb0e20d12ac1 examples/Felix/mspoller.flx
+209004a947f5930aa1982e001567899ddbc1ceeb examples/Go/msgqueue.go
+a32ab8cfc2b4d0dc740706f77a1d5f4da34ddb12 examples/Lua/msgqueue.lua
60fb78f987930604d1945fc45070ba56b9f0bb02 examples/Python/clonesrv4.py
23ac5eb48021288232dd0b07424b172b76546465 images/fig72.html
aacb97611cf7804bda44d1f4df631bb8d292134d examples/Python/tripping.py
-dcb44567004fed7d62f6fd37cedc9d69944b04d2 examples/Java/rrworker.java
-b5a6ed1783a7253f771c7b644f40438897478d23 examples/Clojure/rtpapa.clj
-d08db2f494327c9a65b666e87870036eb427825d examples/Haxe/lruqueue.hx
45ae42445b6095eeb3a5fa4d2309a6598a4ce262 listings/C/listing_22.c
+d08db2f494327c9a65b666e87870036eb427825d examples/Haxe/lruqueue.hx
+b5a6ed1783a7253f771c7b644f40438897478d23 examples/Clojure/rtpapa.clj
+dcb44567004fed7d62f6fd37cedc9d69944b04d2 examples/Java/rrworker.java
6df760c1cd3835bc0776605c7856d30b15279183 examples/Tcl/suisnail.tcl
-61921f916d68a29e03e7a241d78814cce13e3f42 examples/CL/psenvsub.lisp
-97281518b39a4f34097724b5c770798b54d1688d examples/Lua/tasksink.lua
85e4f277721244cae614c3dfe49262b6a58ca351 examples/C/lpserver.c
-717c8a25e9c645b0bab80ba01589371690be3948 examples/CL/syncsub.lisp
-c1460f884568380ade196d868c6148411ef37352 examples/CL/hwclient.lisp
+97281518b39a4f34097724b5c770798b54d1688d examples/Lua/tasksink.lua
+61921f916d68a29e03e7a241d78814cce13e3f42 examples/CL/psenvsub.lisp
3a4ab391911a42a1b77aa5e2f4612c1689dde91c examples/Lua/hwclient.lua
+c1460f884568380ade196d868c6148411ef37352 examples/CL/hwclient.lisp
+717c8a25e9c645b0bab80ba01589371690be3948 examples/CL/syncsub.lisp
4d05483bce237792ab5a688bccb46def4034b624 examples/Haskell/wuserver.hs
c2676475f8fda872393cce58dc7df21c62cced03 examples/C++/suisnail.cpp
20f3d3062fcba1db94b95907190e998176d031c7 images/fig35.html
517fbf4531bbc0f0a8e4cfbae7a66143087c6d82 examples/F#/rtdealer.fsx
4c909b7b69fe8b6c9e25b5306b8540d4517b024b examples/Tcl/taskvent.tcl
d9f7bc0ada0e7ea4ce37d1ea54a5099e88d4edf2 examples/PHP/mspoller.php
-f0629b37405080f237ca27cf1dc50314bba3f4c9 images/fig22.txt
c206d8cebf10de432277d691d660a6f94e946563 examples/Python/mtserver.py
-c1dff700e39a7ba1ee468e0a265ff4a692da44db examples/C/rrclient.c
+f0629b37405080f237ca27cf1dc50314bba3f4c9 images/fig22.txt
a64321fd57eb6457d6b022f4cd500224ddd39cfe examples/Q/hwclient.q
+c1dff700e39a7ba1ee468e0a265ff4a692da44db examples/C/rrclient.c
dedc1460fc5f006f1e18306a1e6b120f24daa280 examples/Python/tasksink.py
36af0e9d235c633f1b459f796be7aa5d4fa9d4ba examples/C++/rtdealer.cpp
a691c14ec0abde79efb50088d41a03012e4b9d93 examples/C/tasksink.c
cfd32f92cb77422f82814f6d90700e66dfee377a examples/C/spqueue.c
-2aa879f0d5975dffd214c8ad4da28c51fe25daea examples/Java/msgqueue.java
ee774e13cae3a8b453436491047368021229c058 examples/Felix/tasksink.flx
+2aa879f0d5975dffd214c8ad4da28c51fe25daea examples/Java/msgqueue.java
a017f0d80efee4eb5caec88441a171e367610d7c examples/Java/mtserver.java
e7a0943644a77b70c4297cfc83f6b4f2a00a032a examples/Perl/rrclient.pl
-194a4976288688772541b112b8748d68b0d4c42d examples/Erlang/mtrelay.es
-ab375fe076bb7ea2db8685628e503d81566b860a listings/C/listing_8.c
-d798b546625a903d6517de3936e9b4b392847b15 examples/Java/spqueue.java
a58593e768f43e0f072010de14c9479ecedc7390 examples/C/clonecli3.c
+d798b546625a903d6517de3936e9b4b392847b15 examples/Java/spqueue.java
+ab375fe076bb7ea2db8685628e503d81566b860a listings/C/listing_8.c
+194a4976288688772541b112b8748d68b0d4c42d examples/Erlang/mtrelay.es
d28f45d8f89fc8027500a261003b0d92b66fc49f examples/C++/tasksink.cpp
04ec3cbdc742b244508905d2230d7024beefadc8 examples/C++/syncsub.cpp
-8696aa34d6f7a2b5e2fd1a382c7cd89d617011cc examples/Haxe/syncpub.hx
-dd154b1823b1d0c1973878e75eb555a1b39b22a1 examples/Erlang/wuclient.es
28474bb198d026945549367392cb382d93ea5f43 examples/Tcl/tasksink.tcl
+dd154b1823b1d0c1973878e75eb555a1b39b22a1 examples/Erlang/wuclient.es
+8696aa34d6f7a2b5e2fd1a382c7cd89d617011cc examples/Haxe/syncpub.hx
f237c1d939c662d8f5112fcb3c7caf0f4efeb0eb images/fig37.txt
87d0a08a70e13cac09f877943e31c0f57c687621 examples/Scala/msreader.scala
3109591ec6c9d23fda63adbae4e5112fb0d6fe7b images/fig21.html
-851a1d5faff6bbefe9c8a7575726221201fcd45d images/fig20.txt
132d7e305c5e8c8b97ce8ef09887d04e877a0358 examples/Python/lpserver.py
-bc05a82bdc42f564d13f0cdc3e93ed92f3e317aa images/fig63.txt
-654962eec97c61bf81bd22b7e71f55b81d73bf46 examples/Q/version.q
+851a1d5faff6bbefe9c8a7575726221201fcd45d images/fig20.txt
9080303cce22b8c5695c6b9fd4d50c5c97399ef6 listings/C/listing_17.c
-ce4ba44a105f6913fffe18c8b30e394c511efa9d examples/Haskell/wuclient.hs
+654962eec97c61bf81bd22b7e71f55b81d73bf46 examples/Q/version.q
+bc05a82bdc42f564d13f0cdc3e93ed92f3e317aa images/fig63.txt
9e5d69bb5cc379de519c3e22fd8e32587362f02a images/fig13.html
+ce4ba44a105f6913fffe18c8b30e394c511efa9d examples/Haskell/wuclient.hs
6c8a436578f64d3360333f22b3f8d405119031c5 images/fig44.html
2fbd897d83328b5ba25f6d22fccfef1c9ccb4954 images/fig62.html
-795cdcf83e202e96d85a7772891f0d02fde9619c examples/Python/hwclient.py
-92d49fb543da4ecd9e75ccfc298ad2eb71762cf7 examples/Perl/taskwork2.pl
a7d9c2e35b55254f27ac0af864e734ce65d2cb39 examples/C/flserver3.c
+92d49fb543da4ecd9e75ccfc298ad2eb71762cf7 examples/Perl/taskwork2.pl
+795cdcf83e202e96d85a7772891f0d02fde9619c examples/Python/hwclient.py
74eb1533786c80da0bed4a1e944539a3f49a59c8 examples/Erlang/taskwork.es
e0cf205c265fec98432de7db9970bb3bd05f78c1 examples/Python/psenvsub.py
-e36e5eec795cbde6a7f0ade803583b3a44272d2a images/fig27.html
-026df16d4e0a52c63cb4e1c4392df6f359775b4c examples/Scala/taskwork2.scala
f5d703809e7a577231e35f969b3354042a035537 examples/Haxe/rtdealer.hx
-d5d9a238539e552ca4e16769b18580f5b09abc65 examples/Haxe/lruqueue3.hx
+026df16d4e0a52c63cb4e1c4392df6f359775b4c examples/Scala/taskwork2.scala
+e36e5eec795cbde6a7f0ade803583b3a44272d2a images/fig27.html
80e1a8b5ef6189495af9e3121bb224c8b40f507e listings/C/listing_30.c
+d5d9a238539e552ca4e16769b18580f5b09abc65 examples/Haxe/lruqueue3.hx
577e6ba4178986b5055451941763e866230d011d examples/Go/rrclient.go
df781d305e80e02344261c496492858d9187bf15 examples/Perl/psenvsub.pl
-1f813528041e21b6ebe067318dd680d047a2efa3 images/fig53.txt
-37caa0405ce1cf6611d13b005c5781620a6697e4 examples/Perl/rrworker.pl
cefc3a991e35e20c5fb38fec4d9973067091207d examples/C#/peering1.cs
+37caa0405ce1cf6611d13b005c5781620a6697e4 examples/Perl/rrworker.pl
+1f813528041e21b6ebe067318dd680d047a2efa3 images/fig53.txt
dd52ad88f301b0728681f965b6bb76a0780e1655 examples/Scala/rrbroker.scala
6c50ba42afb29dd366c8874aa01d1c057caf31ac examples/C#/identity.cs
34083411e5fe36ea54dc817ed3f6d211a4976102 examples/Clojure/wuproxy.clj
-b20eef22a2eb404f50a16ab964312d02e98e582c examples/Lua/msreader.lua
08786b43b74f2e4215888c7603ca941c50f72761 examples/C++/lpclient.cpp
+b20eef22a2eb404f50a16ab964312d02e98e582c examples/Lua/msreader.lua
d11eeafddd91aa9d8001b18baf0c9d7445cf1305 examples/CL/rtmama.lisp
-304315bf28011c811f657ad49aaaaec595e82837 examples/Lua/wuclient.lua
-08f45efac24ccd9fa64fcc9303c31751cde3f4ef examples/PHP/rtmama.php
515ca88c515fd75964bbe970cd03829f0c344cd5 examples/Python/bstar.py
+08f45efac24ccd9fa64fcc9303c31751cde3f4ef examples/PHP/rtmama.php
+304315bf28011c811f657ad49aaaaec595e82837 examples/Lua/wuclient.lua
e230764924bd8db8231b80059797efe170d28c81 examples/Erlang/syncpub.es
2e8c7b0f2828a51ceeb08e17dea3dd3ad9fdb8e1 examples/C/lruqueue2.c
8c614d15f8b2e6a4e53de1ffe4d7968c6c6ef028 images/fig9.txt
-8baf7592263d466e3b5be2e91d958eb5d0cbc342 examples/Objective-C/hwclient.m
-5f8efad2a8476391e8c779b30842fcf4ad049aa7 examples/F#/hwclient.fsx
1a8c84cde8bc82946c6ccd643ba4e34e7329949c examples/Tcl/mmiecho.tcl
-8ed5e8f28ea8a6753e808ec10eb66cd1cf91cf9e examples/CL/taskvent.lisp
+5f8efad2a8476391e8c779b30842fcf4ad049aa7 examples/F#/hwclient.fsx
+8baf7592263d466e3b5be2e91d958eb5d0cbc342 examples/Objective-C/hwclient.m
3077f48fec1a1f05b5924381fcc8101628656fad images/fig54.html
-c03e2cadd28bf9c39f638076b8d6200064bd8aef examples/C/rtmama.c
+8ed5e8f28ea8a6753e808ec10eb66cd1cf91cf9e examples/CL/taskvent.lisp
2d0bb72e6fbc06400cf68db8eacfde6e763e44e4 listings/C/listing_29.c
+c03e2cadd28bf9c39f638076b8d6200064bd8aef examples/C/rtmama.c
4d25b1c46c16a3cbbe9c22e825719b35e4b22337 examples/C#/syncsub.cs
ef16cb4b0ed97dde95677ca9537151f68dca1057 examples/C/rtdealer.c
-cbbcc35dbc862d7626072c3c2a7b154423ebd3bb images/fig4.txt
-7fc880361da7fa9ed05bf4f5e3feb64a92ed32da examples/C/asyncsrv.c
594489762e5f929ecd4428e5de205c8b2131cc40 examples/Haxe/bstarsrv2.hx
+7fc880361da7fa9ed05bf4f5e3feb64a92ed32da examples/C/asyncsrv.c
+cbbcc35dbc862d7626072c3c2a7b154423ebd3bb images/fig4.txt
34efc603143dd2e875d3f9082828eccecce34429 examples/F#/identity.fsx
-2f7baf7baed1713272d61725d94f3aa7859e47a1 examples/Go/mspoller.go
b59f86b32ba40e90f104ba6aa9cbb683876b9853 examples/Java/ppworker.java
+2f7baf7baed1713272d61725d94f3aa7859e47a1 examples/Go/mspoller.go
70e8f9e000f14e1eb23fd44f148aad17f2ca98b0 examples/Python/psenvpub.py
a22ffb4dc1bb31f0afbffd6af43b5fca2037bf8e images/fig22.html
-0739613b33e94e55a3c67982717d5357671da891 images/fig26.txt
-c6debb45b1ba7b5fd49c63d082089c866f3c84ba examples/Lua/rtpapa.lua
50d92ebf8063df099b21030a026e1ebf869ba335 images/fig63.html
+c6debb45b1ba7b5fd49c63d082089c866f3c84ba examples/Lua/rtpapa.lua
+0739613b33e94e55a3c67982717d5357671da891 images/fig26.txt
View
3  CONTRIBUTORS
@@ -93,6 +93,7 @@ Iskren Ivov Chernev <iskren.chernev@gmail.com> (C++)
Jay Han <hanjaeheum@shortmail.com> (Q)
Sonia Hamilton <sonia@snowfrog.net> (Perl)
Yan Cui (C#)
+Naveen Palli (C++)
Errata and Suggestions
----------------------
@@ -106,4 +107,4 @@ Daniel Lin <dlin.tw@gmail.com>
Edward Smith <esmith@stardotstar.org>
Pandya Hiten <hiten.pandya@gmail.com>
Matthew Horsfall <WolfSage@gmail.com>
-
+Nathan Stocks
View
3  bin/mktemplate
@@ -19,7 +19,8 @@ echo "~~~~">> _template.wd
echo "%%content%%">> _template.wd
wdput zguide page _template "C Guide Template"
+wdput zguide py _template "Python Guide Template"
wdput zguide lua _template "Lua Guide Template"
wdput zguide hx _template "Haxe Guide Template"
wdput zguide php _template "PHP Guide Template"
-rm _template.wd
+rm _template.wd
View
BIN  book.ps
Binary file not shown
View
16,035 book.xml
16,035 additions, 0 deletions not shown
View
7 chapter1.txt
@@ -7,13 +7,6 @@
.output chapter1.wd
**By Pieter Hintjens**
-With thanks to the hundred or so people who contributed examples in two dozen programming languages, who helped with suggestions and fixes, and who kept pushing for more examples of how to connect your code.
-
-.filter book
-Thanks to Bill Desmarais, Brian Dorsey, Daniel Lin, Eric Desgranges, Gonzalo Diethelm, Guido Goldstein, Hunter Ford, Kamil Shakirov, Martin Sustrik, Mike Castleman, Naveen Chawla, Nicola Peduzzi, Oliver Smith, Olivier Chamoux, Peter Alexander, Pierre Rouleau, Randy Dryburgh, John Unwin, Alex Thomas, Mihail Minkov, Jeremy Avnet, Michael Compton, Kamil Kisiel, Mark Kharitonov, Guillaume Aubert, Ian Barber, Mike Sheridan, Faruk Akgul, Oleg Sidorov, Lev Givon, Allister MacLeod, Alexander D'Archangel, Andreas Hoelzlwimmer, Han Holl, Robert G. Jakabosky, Felipe Cruz, Marcus McCurdy, Mikhail Kulemin, Dr. Gergő Érdi, Pavel Zhukov, Alexander Else, Giovanni Ruggiero, Rick "Technoweenie", Daniel Lundin, Dave Hoover, Simon Jefford, Benjamin Peterson, Justin Case, Devon Weller, Richard Smith, Alexander Morland, Wadim Grasza, Michael Jakl, Uwe Dauernheim, Sebastian Nowicki, Simone Deponti, Aaron Raddon, Dan Colish, Markus Schirp, Benoit Larroque, Jonathan Palardy, Isaiah Peng, Arkadiusz Orzechowski, Umut Aydin, Matthew Horsfall, Jeremy W. Sherman, Eric Pugh, Tyler Sellon, John E. Vincent, Pavel Mitin, Min RK, Igor Wiedler, Olof Åkesson, Patrick Lucas, Heow Goodman, Senthil Palanisami, John Gallagher, Tomas Roos, Stephen McQuay, Erik Allik, Arnaud Cogoluègnes, Rob Gagnon, Dan Williams, Edward Smith, James Tucker, Kristian Kristensen, Vadim Shalts, Martin Trojer, Tom van Leeuwen, Pandya Hiten, Harm Aarts, Marc Harter, Iskren Ivov Chernev, Jay Han, Sonia Hamilton, and Zed Shaw.
-
-Thanks to Stathis Sideris for [http://www.ditaa.org Ditaa], which I used for the diagrams.
-
Please use the [$(GIT)/issues issue tracker] for all comments and errata. This version covers the latest stable release of 0MQ (3.2) and was published on !date(#ddd d mmmm, yyyy#). If you are using older versions of 0MQ then some of the examples and explanations won't be accurate.
The Guide is originally [/page:all in C], but also in [/php:all PHP], [/py:all Python], [/lua:all Lua], and [/hx:all Haxe]. We've also translated most of the examples into C++, C#, CL, Erlang, F#, Felix, Haskell, Java, Objective-C, Ruby, Ada, Basic, Clojure, Go, Haxe, Node.js, ooc, Perl, and Scala.
View
96 chapter5.txt
@@ -251,31 +251,31 @@ Both the server and client maintain hash tables, but this first model only works
++++ Getting a Snapshot
-In order to allow a late (or recovering) client to catch up with a server it has to get a snapshot of the server's state. Just as we've reduced "message" to mean "a sequenced key-value pair", we can reduce "state" to mean "a hash table". To get the server state, a client opens a REQ socket and asks for it explicitly!figref().
+In order to allow a late (or recovering) client to catch up with a server it has to get a snapshot of the server's state. Just as we've reduced "message" to mean "a sequenced key-value pair", we can reduce "state" to mean "a hash table". To get the server state, a client opens a DEALER socket and asks for it explicitly!figref().
[[code type="textdiagram" title="State Replication"]]
- +-----------------+
- | |
- | Server |
- | |
- +--------+--------+
- | PUB | ROUTER |
- \----+---+--------/
- | ^
- | | state request
- updates +---------------\
- | |
- /----------------+----------------\ |
- | | | |
- | | | |
- v v v |
-/------+-----\ /------+-----\ /------+--+--\
-| SUB | REQ | | SUB | REQ | | SUB | REQ |
-+------+-----+ +------+-----+ +------+-----+
-| | | | | |
-| Client | | Client | | Client |
-| | | | | |
-+------------+ +------------+ +------------+
+ +-----------------+
+ | |
+ | Server |
+ | |
+ +--------+--------+
+ | PUB | ROUTER |
+ \----+---+--------/
+ | ^
+ | | state request
+ updates +-------------------\
+ | |
+ /------------------+-------------------\ |
+ | | | |
+ | | | |
+ v v v |
+/------+--------\ /------+--------\ /------+---+----\
+| SUB | DEALER | | SUB | DEALER | | SUB | DEALER |
++------+--------+ +------+--------+ +------+--------+
+| | | | | |
+| Client | | Client | | Client |
+| | | | | |
++---------------+ +---------------+ +---------------+
[[/code]]
To make this work, we have to solve the timing problem. Getting a state snapshot will take a certain time, possibly fairly long if the snapshot is large. We need to correctly apply updates to the snapshot. But the server won't know when to start sending us updates. One way would be to start subscribing, get a first update, and then ask for "state for update N". This would require the server storing one snapshot for each update, which isn't practical.
@@ -325,30 +325,30 @@ In our second model, changes to the key-value cache came from the server itself.
Updates from clients go via a PUSH-PULL socket flow from client to server!figref().
[[code type="textdiagram" title="Republishing Updates"]]
- +--------------------------+
- | |
- | Server |
- | |
- +--------+--------+--------+
- | PUB | ROUTER | PULL |
- \----+---+--------+--------/
- | ^ ^
- | | | state update
- | | \---------\
- | | state request |
- updates \------------\ |
- | | |
- /-----------+-------------\ | |
- | | | |
- | ^ ^ | | |
- v | | v | |
-/------+--+--+--+---\ /------+--+--+--+---\
-| SUB | REQ | PUSH | | SUB | REQ | PUSH |
-+------+-----+------+ +------+-----+------+
-| | | |
-| Client | | Client |
-| | | |
-+-------------------+ +-------------------+
+ +--------------------------+
+ | |
+ | Server |
+ | |
+ +--------+--------+--------+
+ | PUB | ROUTER | PULL |
+ \----+---+--------+--------/
+ | ^ ^
+ | | | state update
+ | | \------------\
+ | | state request |
+ updates \-------------\ |
+ | | |
+ .--------------+-------------\ | |
+ | | | |
+ | ^ ^ | | |
+ v | | v | |
+/------+---+----+--+---\ /------+---+----+--+---\
+| SUB | DEALER | PUSH | | SUB | DEALER | PUSH |
++------+--------+------+ +------+--------+------+
+| | | |
+| Client | | Client |
+| | | |
++----------------------+ +----------------------+
[[/code]]
Why don't we allow clients to publish updates directly to other clients? While this would reduce latency, it makes it impossible to assign ascending unique sequence numbers to messages. The server can do this. There's a more subtle second reason. In many applications it's important that updates have a single order, across many clients. Forcing all updates through the server ensures that they have the same order when they finally get to clients.
@@ -529,7 +529,7 @@ So the architecture for our high-availability server pair using the Binary Star
| | |
v | |
/-----+----+---+--+--\
-| SUB | REQ | PUB |
+| SUB | DEALER | PUB |
+-----+--------+-----+
| |
| Client |
View
65 chapter6.txt
@@ -101,7 +101,7 @@ The main output of TODs are expensive "ideations": concepts, design documents, a
* The Creative People come up with long lists of "we could do X and Y". I've seen endlessly detailed lists of everything amazing a product could do. Once the creative work of idea generation has happened, it's just a matter of execution, of course.
-* So the managers and their consultants pass their brilliant, world-shattering ideas to designers who acres of detailed, preciously refined design documents. The designers take the tens of ideas the managers came up with, and turn them into hundreds of amazing, world-changing designs.
+* So the managers and their consultants pass their brilliant, world-shattering ideas to designers who create acres of detailed, preciously refined design documents. The designers take the tens of ideas the managers came up with, and turn them into hundreds of amazing, world-changing designs.
* These designs get given to engineers who scratch their heads and wonder who the heck came up with such stupid nonsense. They start to argue back but the designs come from up high, and really, it's not up to engineers to argue with creative people and expensive consultants.
@@ -1431,16 +1431,16 @@ cd filemq
make check
[[/code]]
-You want to be using the latest CZMQ master for this. Now try running the {{filemq}} service:
+You want to be using the latest CZMQ master for this. Now try running the {{track}} command, which is a simple tool that uses FileMQ to track changes in one directory in another:
[[code]]
cd src
-./filemq
+./track ./fmqroot/send ./fmqroot/recv
[[/code]]
And open two file navigator windows, one into {{src/fmqroot/send}} and one into {{src/fmqroot/recv}}. Drop files into the send folder and you'll see them arrive in the recv folder. The server checks once per second for new files. Delete files in the send folder, and they're deleted in the recv folder similarly.
-This isn't a full replication protocol though the delete function suggests that it might become one.
+I use track for things like updating my MP3 player mounted as a USB drive. As I add or remove files in my laptop's Music folder, the same changes happen on the MP3 player. FILEMQ isn't a full replication protocol it might become one.
++++ Internal Architecture
@@ -1502,6 +1502,12 @@ zmq_bind (self->router, endpoint);
mount_t *mount = mount_new (location, alias);
zlist_append (self->mounts, mount);
</method>
+
+<method name = "set anonymous">
+<argument name = "access" type = "number" />
+// Enable anonymous access without a config file
+fmq_config_path_set (self->config, "security/anonymous", access? "1" :"0");
+</method>
[[/code]]
++++ Design Notes
@@ -1510,18 +1516,18 @@ The hardest part of making FileMQ wasn't the protocol part, but maintaining accu
So I'll go through some of the design aspects:
-* The server and client use virtual paths, much like an HTTP or FTP server. You define the "root" to be, e.g. ./fmqroot/recv, and then file names are relative to that root. Sending physical file names across the network is not a good idea.
-
* The client detects if the server has died by the lack of heartbeats (HUGZ) coming from the server. It then restarts its dialog by sending an OHAI. There's no timeout on the OHAI since the 0MQ DEALER socket will queue an outgoing message indefinitely.
* The server detects if a client has died by its lack of response (HUGZ-OK) to a heartbeat. In that case it deletes all state for the client including its subscriptions.
* The client API holds subscriptions in memory and replays them when it has connected successfully. This means the called can subscribe at any time (and doesn't care when connections and authentication actually happen).
-* The server allows multiple "mount points", i.e. real directories in different places that are presented to clients as a single tree they can subscribe against.
+* The server and client use virtual paths, much like an HTTP or FTP server. You publish one or more "mount points" each corresponding to a directory on the server. Each of these maps to some virtual path, for instance "/" if you have only one mount point. Clients then subscribe to virtual paths, and files arrive in an inbox directory. We don't send physical file names across the network.
* There are some timing issues: if the server is creating its mount points, while clients are connected and subscribing, the subscriptions won't attach to the right mount points. So, we bind the server port as last thing.
+* Clients can reconnect at any point; if the client sends OHAI, that signals the end of any previous conversation and the start of a new one. I might one day make subscriptions durable so that they survive a disconnection. The client stack, after reconnecting, replays any subscriptions the caller application already made.
+
++++ Reliabilty
As it stands, FileMQ implements the classic 0MQ publish-subscribe pattern. That is, clients receive a stream of updates but with no guarantees about overall consistency. To make FileMQ reliable we'd have to add some functionality:
@@ -1588,3 +1594,48 @@ It is quite common to poll a directory for changes and then do something 'intere
There is a neater way, which is to detect when a file is "stable", i.e. no-one is writing to it any longer. FileMQ does this by checking the modification time of the file. If it's more than a second old, then the file is considered stable, at least stable enough to be shipped off to clients. If a process comes along after five minutes and appends to the file, it'll be shipped off again.
For this to work, and this is a requirement for any application hoping to use FileMQ successfully, do not buffer more than a second's worth of data in memory before writing. If you use very large block sizes, the file may look stable when it's not.
+
++++ Test Use Case
+
+To properly test something like FileMQ we need a test case that plays with live data. One of my ongoing chores is to manage the MP3 tracks on my music player, which is a Sansa Clip reflashed with Rock Box (highly recommended). As I download tracks into my Music folder I want to copy these to my player, and as I find tracks that annoy me, I delete them in the Music folder and want those gone from my player too.
+
+This is kind of over-kill for a powerful file distribution protocol. I could write this using a bash or Perl script but to be honest the hardest work in FileMQ was the directory comparison code, and I want to benefit from that. So I put together a simple tool called "track" which calls the FileMQ API. From the command line this runs with two arguments; the sending and the receiving directories:
+
+[[code]]
+./track /home/ph/Music /media/3230-6364/MUSIC
+[[/code]]
+
+The code is a neat example of how to use the FileMQ API to do local file distribution. Here is the full program, minus the license text (it's MIT/X11 licensed):
+
+[[code language="C"]]
+#include "czmq.h"
+#include "../include/fmq.h"
+
+int main (int argc, char *argv [])
+{
+ if (argc < 3) {
+ puts ("usage: track original-directory tracking-directory");
+ return 0;
+ }
+ fmq_server_t *server = fmq_server_new ();
+ fmq_server_configure (server, "anonymous.cfg");
+ fmq_server_publish (server, argv [1], "/");
+ fmq_server_set_anonymous (server, true);
+ fmq_server_bind (server, "tcp://*:6000");
+
+ fmq_client_t *client = fmq_client_new ();
+ fmq_client_connect (client, "tcp://localhost:6000");
+ fmq_client_set_inbox (client, argv [2]);
+ fmq_client_subscribe (client, "/");
+
+ while (!zctx_interrupted)
+ sleep (1);
+ puts ("interrupted");
+
+ fmq_server_destroy (&server);
+ fmq_client_destroy (&client);
+ return 0;
+}
+[[/code]]
+
+Note how we work with physical paths in this tool. The server publishes the physical path "/home/ph/Music" and maps this to the virtual path "/". The client subscribes to "/" and receives all files in "/media/3230-6364/MUSIC". I could use any structure within the server directory, and it would be copied faithfully to the client's inbox.
View
556 images/fig66.eps
@@ -1,489 +1,489 @@
%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 0 -286 416 0
-%%HiResBoundingBox: 0.0 -286.0 416.0 0.0
+%%BoundingBox: 0 -234 427 0
+%%HiResBoundingBox: 0.0 -234.0 427.0 0.0
%%Creator: DitaaEps
%%EndComments
%%BeginProlog
%%EndProlog
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-142.40023803710938 -29.400239944458008 moveto
-142.40023803710938 -73.40023803710938 lineto
-286.4002380371094 -73.40023803710938 lineto
-286.4002380371094 -29.400239944458008 lineto
+145.10020446777344 -24.100210189819336 moveto
+145.10020446777344 -60.1002082824707 lineto
+271.1002197265625 -60.1002082824707 lineto
+271.1002197265625 -24.100210189819336 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-142.40023803710938 -73.40023803710938 moveto
-142.40023803710938 -90.40023803710938 lineto
-142.40023803710938 -93.7335713704427 143.73357137044272 -95.40023803710938 146.40023803710938 -95.40023803710938 curveto
-212.80023193359375 -95.40023803710938 lineto
-212.40023803710938 -95.40023803710938 lineto
-212.40023803710938 -73.40023803710938 lineto
+145.10020446777344 -60.1002082824707 moveto
+145.10020446777344 -74.10021209716797 lineto
+145.10020446777344 -76.76687876383464 146.43353780110678 -78.10021209716797 149.10020446777344 -78.10021209716797 curveto
+206.70021057128906 -78.10021209716797 lineto
+206.10020446777344 -78.10021209716797 lineto
+206.10020446777344 -60.1002082824707 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-215.40023803710938 -73.40023803710938 moveto
-215.40023803710938 -95.40023803710938 lineto
-282.4002380371094 -95.40023803710938 lineto
-285.06690470377606 -95.40023803710938 286.4002380371094 -93.7335713704427 286.4002380371094 -90.40023803710938 curveto
-286.4002380371094 -73.40023803710938 lineto
-286.4002380371094 -73.40023803710938 lineto
+209.10020446777344 -60.1002082824707 moveto
+209.10020446777344 -78.10021209716797 lineto
+268.1002197265625 -78.10021209716797 lineto
+270.1002197265625 -78.10021209716797 271.1002197265625 -76.76687876383464 271.1002197265625 -74.10021209716797 curveto
+271.1002197265625 -60.1002082824707 lineto
+271.1002197265625 -60.1002082824707 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-298.4002380371094 -194.40023803710938 moveto
-295.7335713704427 -194.40023803710938 294.4002380371094 -196.40023803710938 294.4002380371094 -200.40023803710938 curveto
-294.4002380371094 -216.40023803710938 lineto
-348.4002380371094 -216.40023803710938 lineto
-348.4002380371094 -194.40023803710938 lineto
+303.1002197265625 -159.10020446777344 moveto
+300.4335530598958 -159.10020446777344 299.1002197265625 -160.7668711344401 299.1002197265625 -164.10020446777344 curveto
+299.1002197265625 -177.10020446777344 lineto
+346.1002197265625 -177.10020446777344 lineto
+346.1002197265625 -159.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-351.4002380371094 -194.40023803710938 moveto
-351.4002380371094 -216.40023803710938 lineto
-398.4002380371094 -216.40023803710938 lineto
-398.4002380371094 -200.40023803710938 lineto
-398.4002380371094 -196.40023803710938 397.06690470377606 -194.40023803710938 394.4002380371094 -194.40023803710938 curveto
-352.000244140625 -194.40023803710938 lineto
+349.1002197265625 -159.10020446777344 moveto
+349.1002197265625 -177.10020446777344 lineto
+411.1002197265625 -177.10020446777344 lineto
+411.1002197265625 -164.10020446777344 lineto
+411.1002197265625 -160.7668711344401 410.1002197265625 -159.10020446777344 408.1002197265625 -159.10020446777344 curveto
+349.5002136230469 -159.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-294.4002380371094 -216.40023803710938 moveto
-294.4002380371094 -260.4002380371094 lineto
-398.4002380371094 -260.4002380371094 lineto
-398.4002380371094 -216.40023803710938 lineto
+299.1002197265625 -177.10020446777344 moveto
+299.1002197265625 -213.10020446777344 lineto
+411.1002197265625 -213.10020446777344 lineto
+411.1002197265625 -177.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-26.400239944458008 -194.40023803710938 moveto
-23.73357327779134 -194.40023803710938 22.400239944458008 -196.40023803710938 22.400239944458008 -200.40023803710938 curveto
-22.400239944458008 -258.4002380371094 lineto
-126.40023803710938 -258.4002380371094 lineto
-126.40023803710938 -200.40023803710938 lineto
-126.40023803710938 -196.40023803710938 125.06690470377605 -194.40023803710938 122.40023803710938 -194.40023803710938 curveto
-26.400239944458008 -194.40023803710938 lineto
+23.100210189819336 -159.10020446777344 moveto
+20.433543523152668 -159.10020446777344 19.100210189819336 -160.7668711344401 19.100210189819336 -164.10020446777344 curveto
+19.100210189819336 -211.10020446777344 lineto
+131.10020446777344 -211.10020446777344 lineto
+131.10020446777344 -164.10020446777344 lineto
+131.10020446777344 -160.7668711344401 130.10020446777344 -159.10020446777344 128.10020446777344 -159.10020446777344 curveto
+23.100210189819336 -159.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-26.400239944458008 -194.40023803710938 moveto
-23.73357327779134 -194.40023803710938 22.400239944458008 -196.40023803710938 22.400239944458008 -200.40023803710938 curveto
-22.400239944458008 -216.40023803710938 lineto
-76.40023803710938 -216.40023803710938 lineto
-76.40023803710938 -194.40023803710938 lineto
+23.100210189819336 -159.10020446777344 moveto
+20.433543523152668 -159.10020446777344 19.100210189819336 -160.7668711344401 19.100210189819336 -164.10020446777344 curveto
+19.100210189819336 -177.10020446777344 lineto
+66.10021209716797 -177.10020446777344 lineto
+66.10021209716797 -159.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-79.40023803710938 -194.40023803710938 moveto
-79.40023803710938 -216.40023803710938 lineto
-126.40023803710938 -216.40023803710938 lineto
-126.40023803710938 -200.40023803710938 lineto
-126.40023803710938 -196.40023803710938 125.06690470377605 -194.40023803710938 122.40023803710938 -194.40023803710938 curveto
-80.00023651123047 -194.40023803710938 lineto
+69.10021209716797 -159.10020446777344 moveto
+69.10021209716797 -177.10020446777344 lineto
+131.10020446777344 -177.10020446777344 lineto
+131.10020446777344 -164.10020446777344 lineto
+131.10020446777344 -160.7668711344401 130.10020446777344 -159.10020446777344 128.10020446777344 -159.10020446777344 curveto
+69.50021362304688 -159.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-22.400239944458008 -216.40023803710938 moveto
-22.400239944458008 -258.4002380371094 lineto
-126.40023803710938 -258.4002380371094 lineto
-126.40023803710938 -216.40023803710938 lineto
+19.100210189819336 -177.10020446777344 moveto
+19.100210189819336 -211.10020446777344 lineto
+131.10020446777344 -211.10020446777344 lineto
+131.10020446777344 -177.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-162.40023803710938 -194.40023803710938 moveto
-159.73357137044272 -194.40023803710938 158.40023803710938 -196.40023803710938 158.40023803710938 -200.40023803710938 curveto
-158.40023803710938 -258.4002380371094 lineto
-262.4002380371094 -258.4002380371094 lineto
-262.4002380371094 -200.40023803710938 lineto
-262.4002380371094 -196.40023803710938 261.06690470377606 -194.40023803710938 258.4002380371094 -194.40023803710938 curveto
-162.40023803710938 -194.40023803710938 lineto
+163.10020446777344 -159.10020446777344 moveto
+160.43353780110678 -159.10020446777344 159.10020446777344 -160.7668711344401 159.10020446777344 -164.10020446777344 curveto
+159.10020446777344 -211.10020446777344 lineto
+271.1002197265625 -211.10020446777344 lineto
+271.1002197265625 -164.10020446777344 lineto
+271.1002197265625 -160.7668711344401 270.1002197265625 -159.10020446777344 268.1002197265625 -159.10020446777344 curveto
+163.10020446777344 -159.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-162.40023803710938 -194.40023803710938 moveto
-159.73357137044272 -194.40023803710938 158.40023803710938 -196.40023803710938 158.40023803710938 -200.40023803710938 curveto
-158.40023803710938 -216.40023803710938 lineto
-212.40023803710938 -216.40023803710938 lineto
-212.40023803710938 -194.40023803710938 lineto
+163.10020446777344 -159.10020446777344 moveto
+160.43353780110678 -159.10020446777344 159.10020446777344 -160.7668711344401 159.10020446777344 -164.10020446777344 curveto
+159.10020446777344 -177.10020446777344 lineto
+206.10020446777344 -177.10020446777344 lineto
+206.10020446777344 -159.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-215.40023803710938 -194.40023803710938 moveto
-215.40023803710938 -216.40023803710938 lineto
-262.4002380371094 -216.40023803710938 lineto
-262.4002380371094 -200.40023803710938 lineto
-262.4002380371094 -196.40023803710938 261.06690470377606 -194.40023803710938 258.4002380371094 -194.40023803710938 curveto
-216.000244140625 -194.40023803710938 lineto
+209.10020446777344 -159.10020446777344 moveto
+209.10020446777344 -177.10020446777344 lineto
+271.1002197265625 -177.10020446777344 lineto
+271.1002197265625 -164.10020446777344 lineto
+271.1002197265625 -160.7668711344401 270.1002197265625 -159.10020446777344 268.1002197265625 -159.10020446777344 curveto
+209.5001983642578 -159.10020446777344 lineto
closepath
fill
0.5882352941176471 0.5882352941176471 0.5882352941176471 setrgbcolor
newpath
-158.40023803710938 -216.40023803710938 moveto
-158.40023803710938 -258.4002380371094 lineto
-262.4002380371094 -258.4002380371094 lineto
-262.4002380371094 -216.40023803710938 lineto
+159.10020446777344 -177.10020446777344 moveto
+159.10020446777344 -211.10020446777344 lineto
+271.1002197265625 -211.10020446777344 lineto
+271.1002197265625 -177.10020446777344 lineto
closepath
fill
1.0 1.0 1.0 setrgbcolor
newpath
-140.0 -27.0 moveto
-140.0 -71.0 lineto
-284.0 -71.0 lineto
-284.0 -27.0 lineto
+143.0 -22.0 moveto
+143.0 -58.0 lineto
+269.0 -58.0 lineto
+269.0 -22.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
-0.8 setlinewidth
+0.7 setlinewidth
1 setlinecap
[] 0 setdash
newpath
-140.0 -27.0 moveto
-140.0 -71.0 lineto
-284.0 -71.0 lineto
-284.0 -27.0 lineto
+143.0 -22.0 moveto
+143.0 -58.0 lineto
+269.0 -58.0 lineto
+269.0 -22.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-140.0 -71.0 moveto
-140.0 -88.0 lineto
-140.0 -91.33333333333333 141.33333333333334 -93.0 144.0 -93.0 curveto
-210.39999389648438 -93.0 lineto
-210.0 -93.0 lineto
-210.0 -71.0 lineto
+143.0 -58.0 moveto
+143.0 -72.0 lineto
+143.0 -74.66666666666667 144.33333333333334 -76.0 147.0 -76.0 curveto
+204.60000610351562 -76.0 lineto
+204.0 -76.0 lineto
+204.0 -58.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-140.0 -71.0 moveto
-140.0 -88.0 lineto
-140.0 -91.33333333333333 141.33333333333334 -93.0 144.0 -93.0 curveto
-210.39999389648438 -93.0 lineto
-210.0 -93.0 lineto
-210.0 -71.0 lineto
+143.0 -58.0 moveto
+143.0 -72.0 lineto
+143.0 -74.66666666666667 144.33333333333334 -76.0 147.0 -76.0 curveto
+204.60000610351562 -76.0 lineto
+204.0 -76.0 lineto
+204.0 -58.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-213.0 -71.0 moveto
-213.0 -93.0 lineto
-280.0 -93.0 lineto
-282.6666666666667 -93.0 284.0 -91.33333333333333 284.0 -88.0 curveto
-284.0 -71.0 lineto
-284.0 -71.0 lineto
+207.0 -58.0 moveto
+207.0 -76.0 lineto
+266.0 -76.0 lineto
+268.0 -76.0 269.0 -74.66666666666667 269.0 -72.0 curveto
+269.0 -58.0 lineto
+269.0 -58.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-213.0 -71.0 moveto
-213.0 -93.0 lineto
-280.0 -93.0 lineto
-282.6666666666667 -93.0 284.0 -91.33333333333333 284.0 -88.0 curveto
-284.0 -71.0 lineto
-284.0 -71.0 lineto
+207.0 -58.0 moveto
+207.0 -76.0 lineto
+266.0 -76.0 lineto
+268.0 -76.0 269.0 -74.66666666666667 269.0 -72.0 curveto
+269.0 -58.0 lineto
+269.0 -58.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-296.0 -192.0 moveto
-293.3333333333333 -192.0 292.0 -194.0 292.0 -198.0 curveto
-292.0 -214.0 lineto
-346.0 -214.0 lineto
-346.0 -192.0 lineto
+301.0 -157.0 moveto
+298.3333333333333 -157.0 297.0 -158.66666666666666 297.0 -162.0 curveto
+297.0 -175.0 lineto
+344.0 -175.0 lineto
+344.0 -157.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-296.0 -192.0 moveto
-293.3333333333333 -192.0 292.0 -194.0 292.0 -198.0 curveto
-292.0 -214.0 lineto
-346.0 -214.0 lineto
-346.0 -192.0 lineto
+301.0 -157.0 moveto
+298.3333333333333 -157.0 297.0 -158.66666666666666 297.0 -162.0 curveto
+297.0 -175.0 lineto
+344.0 -175.0 lineto
+344.0 -157.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-349.0 -192.0 moveto
-349.0 -214.0 lineto
-396.0 -214.0 lineto
-396.0 -198.0 lineto
-396.0 -194.0 394.6666666666667 -192.0 392.0 -192.0 curveto
-349.6000061035156 -192.0 lineto
+347.0 -157.0 moveto
+347.0 -175.0 lineto
+409.0 -175.0 lineto
+409.0 -162.0 lineto
+409.0 -158.66666666666666 408.0 -157.0 406.0 -157.0 curveto
+347.3999938964844 -157.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-349.0 -192.0 moveto
-349.0 -214.0 lineto
-396.0 -214.0 lineto
-396.0 -198.0 lineto
-396.0 -194.0 394.6666666666667 -192.0 392.0 -192.0 curveto
-349.6000061035156 -192.0 lineto
+347.0 -157.0 moveto
+347.0 -175.0 lineto
+409.0 -175.0 lineto
+409.0 -162.0 lineto
+409.0 -158.66666666666666 408.0 -157.0 406.0 -157.0 curveto
+347.3999938964844 -157.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-292.0 -214.0 moveto
-292.0 -258.0 lineto
-396.0 -258.0 lineto
-396.0 -214.0 lineto
+297.0 -175.0 moveto
+297.0 -211.0 lineto
+409.0 -211.0 lineto
+409.0 -175.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-292.0 -214.0 moveto
-292.0 -258.0 lineto
-396.0 -258.0 lineto
-396.0 -214.0 lineto
+297.0 -175.0 moveto
+297.0 -211.0 lineto
+409.0 -211.0 lineto
+409.0 -175.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-24.0 -192.0 moveto
-21.333333333333332 -192.0 20.0 -194.0 20.0 -198.0 curveto
-20.0 -256.0 lineto
-124.0 -256.0 lineto
-124.0 -198.0 lineto
-124.0 -194.0 122.66666666666667 -192.0 120.0 -192.0 curveto
-24.0 -192.0 lineto
+21.0 -157.0 moveto
+18.333333333333332 -157.0 17.0 -158.66666666666666 17.0 -162.0 curveto
+17.0 -209.0 lineto
+129.0 -209.0 lineto
+129.0 -162.0 lineto
+129.0 -158.66666666666666 128.0 -157.0 126.0 -157.0 curveto
+21.0 -157.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-24.0 -192.0 moveto
-21.333333333333332 -192.0 20.0 -194.0 20.0 -198.0 curveto
-20.0 -256.0 lineto
-124.0 -256.0 lineto
-124.0 -198.0 lineto
-124.0 -194.0 122.66666666666667 -192.0 120.0 -192.0 curveto
-24.0 -192.0 lineto
+21.0 -157.0 moveto
+18.333333333333332 -157.0 17.0 -158.66666666666666 17.0 -162.0 curveto
+17.0 -209.0 lineto
+129.0 -209.0 lineto
+129.0 -162.0 lineto
+129.0 -158.66666666666666 128.0 -157.0 126.0 -157.0 curveto
+21.0 -157.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-24.0 -192.0 moveto
-21.333333333333332 -192.0 20.0 -194.0 20.0 -198.0 curveto
-20.0 -214.0 lineto
-74.0 -214.0 lineto
-74.0 -192.0 lineto
+21.0 -157.0 moveto
+18.333333333333332 -157.0 17.0 -158.66666666666666 17.0 -162.0 curveto
+17.0 -175.0 lineto
+64.0 -175.0 lineto
+64.0 -157.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-24.0 -192.0 moveto
-21.333333333333332 -192.0 20.0 -194.0 20.0 -198.0 curveto
-20.0 -214.0 lineto
-74.0 -214.0 lineto
-74.0 -192.0 lineto
+21.0 -157.0 moveto
+18.333333333333332 -157.0 17.0 -158.66666666666666 17.0 -162.0 curveto
+17.0 -175.0 lineto
+64.0 -175.0 lineto
+64.0 -157.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-77.0 -192.0 moveto
-77.0 -214.0 lineto
-124.0 -214.0 lineto
-124.0 -198.0 lineto
-124.0 -194.0 122.66666666666667 -192.0 120.0 -192.0 curveto
-77.5999984741211 -192.0 lineto
+67.0 -157.0 moveto
+67.0 -175.0 lineto
+129.0 -175.0 lineto
+129.0 -162.0 lineto
+129.0 -158.66666666666666 128.0 -157.0 126.0 -157.0 curveto
+67.4000015258789 -157.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-77.0 -192.0 moveto
-77.0 -214.0 lineto
-124.0 -214.0 lineto
-124.0 -198.0 lineto
-124.0 -194.0 122.66666666666667 -192.0 120.0 -192.0 curveto
-77.5999984741211 -192.0 lineto
+67.0 -157.0 moveto
+67.0 -175.0 lineto
+129.0 -175.0 lineto
+129.0 -162.0 lineto
+129.0 -158.66666666666666 128.0 -157.0 126.0 -157.0 curveto
+67.4000015258789 -157.0 lineto
closepath
stroke
1.0 1.0 1.0 setrgbcolor
newpath
-20.0 -214.0 moveto
-20.0 -256.0 lineto
-124.0 -256.0 lineto
-124.0 -214.0 lineto
+17.0 -175.0 moveto
+17.0 -209.0 lineto
+129.0 -209.0 lineto
+129.0 -175.0 lineto
closepath
fill
0.0 0.0 0.0 setrgbcolor
newpath
-20.0 -214.0 moveto
-20.0 -256.0 lineto
-124.0 -256.0 lineto
-124.0 -214.0 lineto