home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume14 / xpilot / part13 < prev    next >
Encoding:
Internet Message Format  |  1992-08-30  |  57.1 KB

  1. Path: uunet!zephyr.ens.tek.com!master!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v14i015:  xpilot - Multiplayer gravity war game hand-shake program, Part13/24
  5. Message-ID: <3310@master.CNA.TEK.COM>
  6. Date: 4 Aug 92 19:29:33 GMT
  7. Sender: news@master.CNA.TEK.COM
  8. Lines: 1439
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Bjoern Stabell <bjoerns@staff.cs.uit.no>
  12. Posting-number: Volume 14, Issue 15
  13. Archive-name: xpilot/Part13
  14. Environment: X11, ANSI C
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 13 (of 24)."
  25. # Contents:  maps/logo2.uue.1 src/server.c
  26. # Wrapped by billr@saab on Tue Aug  4 10:38:56 1992
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'maps/logo2.uue.1' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'maps/logo2.uue.1'\"
  30. else
  31. echo shar: Extracting \"'maps/logo2.uue.1'\" \(37778 characters\)
  32. sed "s/^X//" >'maps/logo2.uue.1' <<'END_OF_FILE'
  33. Xbegin 644 logo2.map
  34. XM,C0T>#(S-`HP"E1H92!.15<@3&]G;R!-87`L(&$@;6%P('=I=&@@82!R96%L
  35. XM(&%P<&5A<F%N8V4N("!-861E('=I=&@@>&)M,FUA<"!A;F0@8V]R;F5R<RX*
  36. XM5&]M($=R>61E;&%N9`IX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  37. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  38. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  39. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  40. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  41. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX"G@@("`@("`@("`@("`@("`@("`@
  42. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  43. XM("`@("`@("`@("`@("`@("`@("`@("`@("!C("`@("`@("`@("`@("`@("`@
  44. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  45. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  46. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
  47. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  48. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  49. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  50. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  51. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  52. XM>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  53. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  54. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  55. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  56. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  57. XM("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  58. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  59. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  60. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  61. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  62. XM("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@
  63. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  64. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  65. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  66. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  67. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@
  68. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  69. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  70. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  71. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  72. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
  73. XM"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  74. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  75. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  76. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  77. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  78. XM("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  79. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  80. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  81. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  82. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  83. XM("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@
  84. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  85. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  86. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  87. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  88. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@
  89. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  90. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  91. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  92. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  93. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*
  94. XM>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  95. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  96. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  97. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  98. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  99. XM("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  100. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  101. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  102. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  103. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  104. XM("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@
  105. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  106. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  107. XM("`@("`@<7AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  108. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  109. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
  110. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  111. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  112. XM("`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@
  113. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  114. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX
  115. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  116. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  117. XM("`@("`@<7AX>'AX>'AX>"`@("`@("`@('%X>'AX>'AX>'AX>'AX>"`@('AX
  118. XM=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  119. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  120. XM("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  121. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  122. XM("`@("`@("`@("`@<7AX>'A&>'AX>'AX>'AX=R`@("`@("`@>'AX>'AS("!A
  123. XM>'AX>'AX("`@>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  124. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  125. XM("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@
  126. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  127. XM("`@("`@("`@("`@("`@("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@
  128. XM("!X>'AX>"`@("!A>'AX>'@@("`@87AX>'AX>'AX>'<@("`@("`@("`@("`@
  129. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  130. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@
  131. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  132. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AS(&%X
  133. XM>'AX>'AX("`@("`@('AX>'AX=R`@("!A>'AX<R`@("`@87AX>'AX>'AX>"`@
  134. XM('%X=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  135. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@
  136. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  137. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'@@("`@("`@
  138. XM87AX>'AX>"`@(&%X>'AX>'@@("`@("`@>'AX>'AX=R`@("!A>$8@("`@("!Q
  139. XM>'AX>'AX>'AX("`@>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  140. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  141. XM("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  142. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q
  143. XM>'AX>'<@("`@("`@>'AX>'AX("`@('AX>'AX>"`@("`@("!X>'AX>'AX=R`@
  144. XM("!X>"`@("`@('AX>'AX>',@("`@('%X>'AX>'AW("`@("`@("`@("`@("`@
  145. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  146. XM("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@
  147. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  148. XM("`@("`@("!Q>'AX>'AX>"`@("`@("!X>'AX>'@@("`@>'AX>'AX("`@("`@
  149. XM('AX>'AX>'AX=R`@(&%X("`@("`@>'AX>'AX("`@("`@>'AX>'AX>'AX=R`@
  150. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  151. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@
  152. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  153. XM("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX("`@("`@('AX>'AX>"`@('%X
  154. XM>'AX>'@@("`@("`@87AX>'AX>'AX>'<@("`@("`@("!X>'AX>'@@("`@('%X
  155. XM>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  156. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@
  157. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  158. XM("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AW("`@("`@
  159. XM87AX>'AX=R!Q>'AX>'AX<R`@("`@("`@87AX>'AX>'AX>'<@("`@("`@<7AX
  160. XM>'AX>"`@("`@>'AX>'AX<R!A>'AX>'AW("`@("`@("`@("`@("`@("`@("`@
  161. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  162. XM("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  163. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>',@("`@
  164. XM(&%X>'@@("`@("`@>'AX>'AX>'AX>'AX>',@("`@("`@("`@(&%X>'AX>'AX
  165. XM>'<@("`@("!X>'AX>'AS("`@("!X>'AS("`@("!X>'AX>'AX=R`@("`@("`@
  166. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  167. XM("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@
  168. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X
  169. XM>'AX>'AS("`@("`@("`@8R`@("`@("!X>'AX>'AX>'AX>'AS("`@("`@("`@
  170. XM("`@(&%X>'AX>'AX>'AW("`@('AX>'AX>"`@("`@("`@("`@("`@<7AX>'AX
  171. XM>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  172. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@
  173. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  174. XM("`@("`@('%X>'AX>'AX1B`@("`@>'AW("`@("`@("`@('AX>'AX>'AX>'AX
  175. XM>'@@("`@("`@("`@("`@("!A>'AX>'AX>'@@("`@>'AX>'AX("`@("`@("`@
  176. XM("`@("!X>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@
  177. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@
  178. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  179. XM("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX("`@("!X>'@@("`@("`@("`@
  180. XM>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("!A>'AX>'AX>"`@('%X>'AX
  181. XM>'@@("`@("`@("`@("`@('AX>'AX>'-A>'AX>'AX=R`@("`@("`@("`@("`@
  182. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  183. XM("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  184. XM("`@("`@("`@("`@("`@("`@("`@("!Q>'<@(&%X>'AX>'AX>'AW("`@<7AX
  185. XM>"`@("`@("`@("!A>'AX>'AS87AX>'AX>'AW("`@('%X>'@@("`@("!A>'AX
  186. XM>'AX("`@>'AX>'AX<R`@("`@("`@("`@("!Q>'AX>'AX("!A>'AX>'AX("`@
  187. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  188. XM("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@
  189. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>"`@("`@87AX
  190. XM>'AX>'@@("!X>'AX=R`@("`@("`@("!X>'AX>'<@>'AX>'AX>'AW("`@>'AX
  191. XM>'<@("`@('%X>'AX>'@@("!X>'AX>'@@("`@("`@("`@("`@('AX>'AX>',@
  192. XM("!A>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  193. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@
  194. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X
  195. XM>'AX("`@("`@87AX>'AX>'<@<7AX>'AX("`@("`@("`@('AX>'AX>"!A>'AX
  196. XM>'AX>'AW("!X>'AX>'<@*B!Q>'AX>'AX>"`@('AX>'AX>"`@("`@("`@("`@
  197. XM("!Q>'AX>'AX("`@("!X>'AX<R`@>'AW("`@("`@("`@("`@("`@("`@("`@
  198. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@
  199. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  200. XM("`@("`@("!Q>'AX>',@("`@("`@>'AX>'AX>'AX>'AX>'AW("`@("`@("`@
  201. XM>'AX>'AX("`@87AX>'AX>'@@('AX>'AX>'AX>'AX>'AX>'AX("`@>'AX>'AX
  202. XM("`@("`@("`@("`@('AX>'AX>',@("`@('AX>',@("!X>'AW("`@("`@("`@
  203. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  204. XM("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  205. XM("`@("`@("`@("`@("`@("`@<7AX>'AX("`@("`@("!A>'AX>'AX>'AX>'AX
  206. XM>'@@("`@("`@("!X>'AX>'AW("`@87AX>'AX>"`@87AX>'AX>'AX>'AX>'AX
  207. XM>',@('%X>'AX>',@("`@("`@("`@("!Q>'AX>'AX("`@("`@849S("`@(&%X
  208. XM>'AW("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  209. XM("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@
  210. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'@@("`@("`@("!X
  211. XM>'AX>'AX<R`@(&%X>"`@<7AX=R`@('AX>'AX>'AX>"`@>'AX>'AX("`@("`@
  212. XM87AX>'AX>'AX>',@<7AX>'AX>'AX=R`@("`@("`@("`@('AX>'AX>',@("`@
  213. XM("`@("`@("`@('AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  214. XM("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@
  215. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX
  216. XM>"`@("`@("`@(&%X>'AX>'AW("`@("`@('%X>'AX("!Q>'AX>'AX>'AX("`@
  217. XM("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX=R`@("`@("`@("!Q
  218. XM>'AX>'AX("`@("`@("`@("`@("!Q>'AX>'AX=R`@("`@("`@("`@("`@("`@
  219. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@
  220. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  221. XM("`@("!A>'-A>'AX=R`@("`@("`@('AX>'AX>'AF("`@("`@>'AX>'AW('AX
  222. XM>'AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX
  223. XM=R`@("`@("`@('AX>'AX>',@("`@("`@("`@("`@<7AX>'AX>'AX=R`@("`@
  224. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  225. XM("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  226. XM("`@("`@("`@("`@("`@("!C("!X>'AX("`@("`@("`@87AX>'AX>"`@("`@
  227. XM('%X>'AX>'@@87AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  228. XM("`@("`@87AX>$9X("`@("`@("!Q>'AX>'AX("`@("`@("`@("`@("!X>'AX
  229. XM>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  230. XM("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  231. XM("`@("`@("`@("`@("`@("`@("`@('(@("`@("`@(&%X>'@@("`@("`@("`@
  232. XM>'AX>'AX=R`@("!Q>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@
  233. XM("`@("`@("`@("`@("`@("`@("!A>',@("`@<7AW<7AX>'AX>',@("`@("`@
  234. XM("`@("`@<7AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@
  235. XM("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@
  236. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>"`@("`@("`@('AX
  237. XM>"`@("`@("`@("!A>'AX>'AX=R`@<7AX>'AX>',@("`@("`@("`@("`@("`@
  238. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX
  239. XM>'AX("`@("`@("`@("`@('%X>'AX>'AX<R!A>'AX=R`@("`@("`@("`@("`@
  240. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@
  241. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX
  242. XM("`@("`@("`@>'AX=R`@("`@("`@("!X>'AX>'AX>$9X>'AX<R`@("`@("`@
  243. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  244. XM("`@(&%X>'AX>'AX>',@("`@("`@("`@("!Q>'AX>'AX>',@("`@87AX=R`@
  245. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  246. XM("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  247. XM("`@("`@<7AX>'@@("`@("`@("!A>'AX("`@("`@("`@('AX>'AX>'AX>'AX
  248. XM<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  249. XM("`@("`@("`@("`@("`@("!A>'AX>'AX>"`@("`@("`@("`@<7AX>'AX>'AX
  250. XM("`@("`@87AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  251. XM("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  252. XM("`@("`@("`@("`@("`@('%X>'AX>'<@("`@("`@("!X>'AW("`@("`@("`@
  253. XM87AX>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  254. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX=R`@("`@("`@
  255. XM('%X>'AX>'AX>',@("`@("`@>'AX>'<@("`@("`@("`@("`@("`@("`@("`@
  256. XM("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@
  257. XM("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AW("`@("`@('AX
  258. XM>'@@("`@("`@("!Q>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@
  259. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X
  260. XM>'AX>"`@("`@("`@>'AX>'AX>'AX=R`@("`@("!A>'AX>"`@("`@("`@("`@
  261. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@
  262. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX
  263. XM>'AX=R`@("`@>'AX>"`@("`@("`@<7AX>'AX<R`@("`@("`@("`@("`@("`@
  264. XM("`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@
  265. XM("`@("`@("`@("!A>'AS("`@("`@('%X>'AX>'AX>'AX=R!Q>'@@("!X>'AX
  266. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  267. XM('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  268. XM("!X>'AX>'AX>'AX>'AX>'AX=R!X>'AX("`@("`@("!X>'AX<R`@("`@("`@
  269. XM("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  270. XM>'<@("`@("`@("`@("`@("`@("`@("`@("`@('%X=R!Q>'AX>'AX>'AX>'AX
  271. XM1GAX>"`@<7AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  272. XM("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  273. XM("`@("`@("`@("`@('AX>'AX>'AX>'AX>'AX>'AX>$9X>'@@("`@("`@('AX
  274. XM<R`@("`@("`@("`@("`@("`@("`@('%X=R`@("`@>'AX>'AX>'AX>'AX>'AX
  275. XM>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX
  276. XM>'AX>'AS("!A>'AX>'AS("!X>'AS("`@("`@("`@("`@("`@("`@("`@("`@
  277. XM("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@
  278. XM("`@("`@("`@("`@("`@("`@("`@("`@>',@("!A>'AX>'AX>'AX>'AX>'AX
  279. XM>'<@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX("`@("!X>'AX
  280. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@
  281. XM("`@("!A>'AX>'AX>'AX>"`@("!X>'AX>&8@('AX>"`@("`@("`@("`@("`@
  282. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
  283. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X
  284. XM>'AX>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX
  285. XM>'@@("`@(&%X>'AS("`@("`@("`@("`@(&%X>'AX>'AX>'AX>'AX>'AX>'AW
  286. XM("`@("`@("`@("`@("`@("!A>'AX>'AX>'AS("`@('AX>'AS("`@("`@("`@
  287. XM('%X>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  288. XM>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  289. XM("`@("`@("`@("!A>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@
  290. XM<7AX>'AX>'AX>'AX>&8@("`@(&,@("`@("`@("`@("`@("`@("`@("`@(&%X
  291. XM>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("!A>'AX>'AX<R`@("`@>'AX
  292. XM<R`@("`@("`@('%X>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  293. XM("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  294. XM("`@("`@("!Q>"`@("`@("`@("`@("`@87AX>'AX>'AX>'AX("`@("`@("`@
  295. XM("`@("`@("`@('%X>'AX>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@
  296. XM("`@("`@("`@("`@87AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@87AX
  297. XM>'AW("`@("!X>',@("`@("`@("!Q>'AX>'AX=R`@("`@("`@("`@("`@("`@
  298. XM("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@
  299. XM("`@("`@("`@("`@("`@("`@<7AX("`@("`@("`@("`@("`@("`@87AX>'AX
  300. XM>'@@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX<R`@("`@("`@("`@("`@
  301. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'AX>'AW("`@("`@
  302. XM("`@("`@("`@87AX>'@@("`@("`@("`@("`@("`@('AX>'AX>'AX=R`@("`@
  303. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@
  304. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'@@("`@("`@("`@("`@
  305. XM("`@("`@("!A>'AX>"`@("`@("`@("`@("`@('%X>'AX>'AX>'AS("`@("`@
  306. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX
  307. XM>'AX>'AX=R`@("`@("`@("`@("`@87AX>'<@*B`@("`@("`@("`@("`@87AX
  308. XM>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
  309. XM"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!D>'AX>'<@
  310. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX
  311. XM>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  312. XM("`@("`@("`@87AX>'AX>'AX>'<@("`@("`@("`@("`@87AX>'AX=R`@("`@
  313. XM("`@("`@("`@("`@(&%X>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@
  314. XM("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  315. XM("`@('%X>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  316. XM('%X>'AX>'AX>'AS8R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  317. XM("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX>'AW("`@("`@("`@("`@
  318. XM87AX>'AX>'=Q>'AW("`@("`@("`@("`@("!A>'AW("`@("`@("`@("`@("`@
  319. XM("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@
  320. XM("`@("`@("`@("`@("!Q>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@
  321. XM("`@("`@("`@('%X>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@
  322. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX
  323. XM=R`@("`@("`@("`@(&%X>'AX>'AX>'AF("`@("`@("`@("`@('%X>'AW("`@
  324. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@
  325. XM("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX>'<@("`@("`@("`@
  326. XM("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AS("`@("`@("`@("`@("`@
  327. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  328. XM("`@87AX>'AX>'AX=R`@("`@("`@("`@(&%X>'AX>'AX<R`@("`@("`@("`@
  329. XM("!Q>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*
  330. XM>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX
  331. XM>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AS("`@("`@
  332. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  333. XM("`@("`@("`@("`@("`@(&%X>'AX>'AX=R`@("`@("`@("`@(&%X>'AX>',@
  334. XM("`@("`@("`@("`@<7AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@
  335. XM("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  336. XM('AX>'AX>'AX>'AX>'AW("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX
  337. XM>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  338. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX=R`@("`@("`@
  339. XM("`@(&%X>'AS("`@("`@("`@("`@('%X>'AX>'AX>'<@("`@("`@("`@("`@
  340. XM("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@
  341. XM("`@("`@("`@("`@>'AS(&%X>'AX>'AX>'AW("`@("`@("`@("`@("`@("`@
  342. XM("`@('%X>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  343. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX
  344. XM>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'<@
  345. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
  346. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX>'AX=R`@("`@
  347. XM("`@("`@("`@("`@("!Q>'AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@
  348. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  349. XM("`@("`@("!A>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX
  350. XM>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX
  351. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX
  352. XM>'AX>'AX=R`@<7@@("`@("`@("`@("`@<7AX>'AX>',@("`@("`@("`@("`@
  353. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  354. XM("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'<@("`@("`@("`@("`@("`@
  355. XM("`@("!Q>'AX>'AX>'AX>'-A>'AX=R`@("`@("`@("`@("`@("`@("`@("`@
  356. XM("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'@@
  357. XM("`@("`@("!A>'AX>'AX>'AX=WAX>&8@("`@("`@("`@('%X>'AX>'AS("`@
  358. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  359. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'<@("`@
  360. XM("`@("`@("`@("`@("`@<7AX>'AX>'AX>',@("!X>'AX=R`@("`@("`@("`@
  361. XM("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@
  362. XM("`@("`@<7AX<R`@("`@("`@("!A>'AX>'AX>'AX>'AX("`@("`@("`@("!Q
  363. XM>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  364. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  365. XM87AX>'AX>'<@("`@("`@("`@("!X>'<@<7AX>'AX>'AX>'AS("`@(&%X>'AX
  366. XM=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@
  367. XM("`@("`@("`@("`@("`@("!X>'@@("`@("`@("`@("!A>'AX>'AX>'AX>',@
  368. XM("`@("`@("`@<7AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  369. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  370. XM("`@("`@("`@("`@87AX>'AX>'@@("`@("`@("`@('AX>$9X>'AX>'AX>'AS
  371. XM("`@("`@('AX>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@
  372. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'<@("`@("`@("`@("`@
  373. XM87AX>'AX>'AS("`@("`@("`@('%X>'AX>'AS("`@("`@("`@("`@("`@("`@
  374. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  375. XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'<@("`@("`@("`@87AX
  376. XM>'AX>'AX>'AX<R`@("`@("!Q>'AX>'@@("`@("`@("`@("`@("`@("`@("`@
  377. XM("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AW
  378. XM("`@("`@("`@("`@87AX>'A&<R`@("`@("`@("!Q>'AX>'AS("`@("`@("`@
  379. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  380. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'<@
  381. XM("`@("`@("`@87AX>'AX>'AX<R`@("`@("`@('AX>'AX<R`@("`@("`@("`@
  382. XM("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@
  383. XM("`@<7AX>'AX>'AX=R`@("`@("`@("`@87AX>'@@("`@("`@("`@<7AX>'AX
  384. XM<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  385. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  386. XM("`@(&%X>'AX>'<@("`@("`@("`@>'AX>'AX>',@("`@("`@("`@>'AX>',@
  387. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@
  388. XM("`@("`@("`@("`@("!X>'AX>'AX>'AX>'AW("`@("`@("`@>'AX<R`@("`@
  389. XM("`@('%X>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  390. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  391. XM("`@("`@("`@("`@("`@(&%X>'AX>'<@("`@("`@("!A>'AX>'AS("`@("`@
  392. XM("`@("!X>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@
  393. XM("`@("`@("`@("`@("`@("`@("`@("`@('AX<R`@87AX>'AX>'AX=R`@("`@
  394. XM('%X>',@("`@("`@("!Q>'AX>'AX("`@("`@("`@("`@("`@<B`@("`@("`@
  395. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  396. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AX>"`@("`@("`@("!A
  397. XM>'AX<R`@("`@("`@("`@('AS("`@('AX("`@("`@("`@("`@("`@("`@("`@
  398. XM("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@>'@@("`@(&%X
  399. XM>'AX>'AX>'<@("`@>'AS("`@("`@("`@('AX>'AX>',@('%X>'AX>'AX>'AX
  400. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@
  401. XM("`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@87AX>'AX
  402. XM=R`@("`@("`@("!X>'@@("`@("`@("`@("`@("`@("`@>'AW("`@("`@("`@
  403. XM("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@
  404. XM("`@("`@("`@("`@87AX>'AX>'AW("`@("`@("`@("`@("!Q>'AX>'AS("!Q
  405. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  406. XM=R`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  407. XM=R`@("`@87AX>'AX=R`@("`@("`@(&%X>'<@("`@("`@("`@("`@("`@("!X
  408. XM>'@@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@
  409. XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'AX>"`@("`@("`@("`@
  410. XM<7AX>'AX<R`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  411. XM>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX
  412. XM>'AX>'AX>'AX>'AX("`@("`@87AX>'AX=R`@("`@("`@(&%X>"`@("`@("`@
  413. XM("`@("`@("`@<7AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@
  414. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX
  415. XM("`@("`@("`@('%X>'AX>',@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  416. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@('%X>'AX>'AX
  417. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AW("`@("`@87AX>'AX=R`@("`@("`@
  418. XM("`@("`@("`@("`@("`@("`@<7AX>'AX=R`@("`@("`@("`@("`@("`@("`@
  419. XM("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX
  420. XM>'AX>'AX>'AX<R`@("`@("`@("!Q>'AX>'AS("`@('AX>'AX>'AX>'AX>'AX
  421. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@
  422. XM("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@>'AX
  423. XM>'AX("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX("`@("`@("`@
  424. XM("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@
  425. XM("`@("!Q>'AX>'AX>'AX>'AX>',@("`@("`@("`@('AX>'AX>"`@("!D>'AX
  426. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  427. XM>'AX=R`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  428. XM>&8@("`@("!A>'AX>'AW("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX
  429. XM>'AW("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@
  430. XM("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>',@("`@("`@("`@("!Q>'AX
  431. XM>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AX>'AX
  432. XM>'AX>'AX>'AX>'AX>'AX=R`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'@@("`@
  433. XM("`@("`@("`@("`@("`@("`@("!A>'AX>'AW("`@("`@("`@('AX=R`@('%X
  434. XM>'AX>'AX>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@
  435. XM("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX<R`@("`@("`@
  436. XM("`@("`@('AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  437. XM("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@>'AX>'AX>'AX>'AX
  438. XM>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'@@("`@("`@
  439. XM("`@>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@
  440. XM("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX
  441. XM<R`@("`@("`@("`@("`@("!Q>'AX>'@@("`@("`@("`@("`@("`@("`@("`@
  442. XM("`@("`@("`@("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("!X
  443. XM>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("!X
  444. XM>'AX>'<@("`@("`@("!X>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@
  445. XM("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@('%X>'AX
  446. XM>'AX>'AX>'AX<R`@("`@("`@("`@("`@("`@('AX>'AX<R`@("`@("`@("`@
  447. XM("`@("`@*B`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  448. XM>'AX>'AX=R`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX=R`@*B`@("`@("`@("`@
  449. XM("`@("`@("`@(&%X>'AX>"`@("`@("`@(&%X>'AX>'AX>'AX>'AX>'AS("!A
  450. XM>'AX("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@
  451. XM("`@("`@>'AX>'AX>'AX1GAX<R`@("`@("`@("`@("`@("`@("!Q>'AX>',@
  452. XM("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  453. XM>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  454. XM>'AX>'AX>'AX>'AX>'AW("`@("`@('AX>'AX=R`@("`@("`@('AX>'AX>'AX
  455. XM>'AX>'AS("`@("!A>'AW("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@
  456. XM("`@("`@("`@("`@("`@('%X>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@
  457. XM("`@('AX>'AX("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  458. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX>'AX
  459. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@87AX>'AX("`@("`@
  460. XM("`@87AX>'AX>'AX<V%X>'<@("`@("!X>'@@("`@("`@("`@("`@("`@("`@
  461. XM("`@>`IX("`@("`@("`@("`@("`@("`@("`@>'AX>'AX>'AX<R`@("`@("`@
  462. XM("`@("`@("`@("`@("!Q>'AX>',@("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX
  463. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@
  464. XM(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@
  465. XM87AX>'AW("`@("`@("`@>'AX>'AX<R`@('AX1G<@("`@('AX>"`@("`@("`@
  466. XM("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX
  467. XM>'AX>'<@("`@("`@('AW("`@("`@("`@('AX>'AX("`@("!Q>'AX>'AX>'AX
  468. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  469. XM>'AX>'AX>'AX=R`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  470. XM>'AX("`@("`@("!D>'AX>'@@("`@("`@("!X>'AX<R`@("`@>'AX>'<@("`@
  471. XM>'AX("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@
  472. XM("`@>'AX<R`@87AX>'AX>'AX=R`@("!Q>'@@("`@("`@("!Q>'AX>',@("`@
  473. XM('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  474. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX
  475. XM>'AX>'AX>'AX>'AX>'@@("`@("`@("!A>'AX>'<@("`@("`@(&%X>'@@("`@
  476. XM("!&>'AX>'AX("!X>'AW("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@
  477. XM("`@("`@("`@("`@("!X>',@("`@(&%X>'AX>'AX>'<J<7AX>"`@("`@("`@
  478. XM<7AX>'AX("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  479. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX
  480. XM>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>"`@("`@
  481. XM("`@('AX>"`@("`@<7AX>'AX>'@@('AX>'@@("`@("`@("`@("`@("`@("`@
  482. XM("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX
  483. XM>'AS("`@("`@("!X>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  484. XM("`@("`@("!A>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  485. XM=R`@(&%X>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  486. XM(&%X>'AX=R`@("`@("`@>'AX("`@('%X>'AX>'AS("!Q>'AX>'<@("`@("`@
  487. XM("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  488. XM("`@(&%X>'AX>'AX>"`@("`@("`@('AX>'AS("`@("`@("`@("`@("`@("`@
  489. XM("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  490. XM>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@
  491. XM("`@("`@("`@("`@('AX>'AX("`@("`@("!A>'AW("`@>'AX>',@("`@('AX
  492. XM>'AX>"`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@
  493. XM("`@("`@("`@("`@("`@("!A>'AX>'AS("`@("`@("!Q>'AX>"`@("`@("`@
  494. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX>'AX
  495. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%&>'AX>',@("`@("`@("`@
  496. XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'@@("`@("`@("!X>'AW("`@
  497. XM("`@("`@("`@>'AX>'AS("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@
  498. XM("`@("`@("`@("`@>'@@("`@("`@("`@("`@("!A>'AX>"`@("`@("`@('AX
  499. XM>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A
  500. XM1GAX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@
  501. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'<@("`@
  502. XM("`@(&%X>'AW("`@("`@("`@("!X>',@("`@("`@("`@("`@("`@("`@("`@
  503. XM('@*>"`@("`@("`@("`@("`@("`@("!X>"`@("`@("`@("`@("`@("!X>'AS
  504. XM("`@("`@("`@>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  505. XM("`@("`@("`@("!A>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  506. XM>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  507. XM("!X>'AX>"`@("`@("`@('AX>'AW("`@("`@("`@("`@("`@("`@("`@("`@
  508. XM("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@<7AX("`@("`@("`@
  509. XM("`@("`@('AX<R`@("`@("`@("!X>'AX("`@("`@("`@("`@("`@("`@("`@
  510. XM("`@("!R("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  511. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  512. XM>'AX>'AW("`@("`@(&%X>'AX("`@("`@("`@>'AX>'AX=R`@("`@("`@("`@
  513. XM("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("!X
  514. XM>'AW("`@("`@("`@("`@("`@>'@@("`@("`@("`@<7AX>'@@("`@("`@("`@
  515. XM("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  516. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  517. XM>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@('AX>'AW("`@("`@("!A>'AX>'AX
  518. XM=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
  519. XM("`@("`@("`@('AX>'AX>'AW("`@("`@("`@("!X>"`@("`@("`@("!X>'AX
  520. XM<R`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  521. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  522. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@>'AX>'@@("`@
  523. XM("`@("!X>'AX>'AX("`@("`@("`@<7AX>'AX("`@("`@("`@("`@("`@("`@
  524. XM>`IX("`@("`@("`@("`@("`@("`@>'AX>'AX>'AX>'AX>'AW("`@("`@("`@
  525. XM("`@("`@('AX>'@@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AX>'AX
  526. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  527. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@
  528. XM("!A>'AX>"`@("`@("`@(&%X>'AX<R`@("`@("`@('AX>'AX>'@@("`@("`@
  529. XM("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX>'AX
  530. XM>'AX>'<@("`@("`@("`@("!Q>'AX>"`@("`@("`@("`@("`@('%X>'AX>'AX
  531. XM>'AS("`@("`@("`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  532. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  533. XM>'AX>'AX("`@("`@("!X>'AX=R`@("`@("`@("`@("`@("`@("`@("`@>'AX
  534. XM>'AX>"`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@('AX
  535. XM>'-A>'AX>'AX>'AX>'AX>'<@("`@("`@("`@('AX>'AX("`@("`@("`@("`@
  536. XM("!Q>'AX>'AX<R`@("`@("`@("`@("`@('AX>'AX>'AS("!A>'AX>'AX>'AX
  537. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  538. XM>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@('AX>'AX("`@("`@("`@("`@("`@
  539. XM("`@("`@("!A>'AX>'AX("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@
  540. XM("`@("`@("`@>'AS("`@("`@("`@87AX>'AX>'<@("`@("`@("`@>'AX>',@
  541. XM("`@("`@("`@("`@<7AX>'AX<R`@("`@("`@("`@("`@("`@>'AX>'AS("`@
  542. XM("`@87AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  543. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@849X>'@@("`@
  544. XM("`@("`@("`@("`@("`@("`@("`@87AX>'@@("`@("`@("`@("`@("`@("!X
  545. XM"G@@("`@("`@("`@("`@("`@(&1X>"`@("`@("`@("`@(&%X>'AX>"`@("`@
  546. XM("`@('%X>'AX("`@("`@("`@("`@('%X>'AX<R`@("`@("`@("`@("`@("`@
  547. XM("!X>'AX<R`@("`@("`@87AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  548. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>&8@("`@("`@("`@("`@("`@("`@
  549. XM("`@>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@87AX>"`@("`@("`@
  550. XM("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  551. XM(&%&>'AX("`@("`@("`@>'AX>'@@("`@("`@("`@("!Q>'AX>',@("`@("`@
  552. XM("`@("`@("`@("`@('AX>'@@("`@("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX
  553. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@
  554. XM("`@("`@("`@("`@("!X>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@
  555. XM>'AX("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@
  556. XM("`@("`@("`@("`@(&%X>'@@("`@("`@("!X>'AX<R`@("`@("`@("`@('AX
  557. XM>'AS("`@("`@("`@("`@("`@("`@("`@>'AX<R`@("`@("`@("!A>'AX>'AX
  558. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  559. XM>'A&("`@("`@("`@("`@("`@("`@("`@(&%X>'AX("`@("`@("`@<7@@("`@
  560. XM("`@("`@("`@("!X>'@@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@
  561. XM("`@("`@("`@("`@("`@("`@("`@("`@('AX>"`@("`@("`@('AX>'@@("`@
  562. XM("`@("`@("!Q>'AX<R`@("`@("`@("`@("`@("`@("`@("!X>'@@("`@("`@
  563. XM("`@("!X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  564. XM>'AX>'AX>'AX>'AX>'AW("`@("`@("`@("`@("`@("`@("`@('AX>'@@("`@
  565. XM("`@("!X>"`@("`@("`@("`@("`@<7AX>'<@("`@("`@("`@("`@("`@('@*
  566. XM>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX("`@("`@
  567. XM("`@>'AX>"`@("`@("`@("`@('AX>',@("`@("`@("`@("`@("`@("`@("`@
  568. XM('AX>"`@("`@("`@("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  569. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@
  570. XM("`@>'AX>"`@("`@("`@('AX=R`@("`@("`@<7AX>'AX>'AX>"`@("`@("`@
  571. XM("`@("`@("`@>`IX("`@("`@("`@("`@("`@("!X>"`@("`@("`@("`@("`@
  572. XM("!X>'@@("`@("`@("!X>'AX("`@("`@("`@("!Q>'AS("`@("`@("`@("`@
  573. XM("`@("`@("`@("`@>'AX=R`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX
  574. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  575. XM>'AX>'AX=R`@("`@("!X>'AX("`@("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX
  576. XM>'AX("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@9'AX("`@
  577. XM("`@("`@("`@("`@<7AX>"`@("`@("`@('AX>'@@("`@("`@("`@('AX>"`@
  578. XM("`@("`@("`@("`@("`@("`@("`@("!X>'AX("`@("`@("`@('AX>'AX>'AX
  579. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  580. XM>'AX>'AX>'AX>'AX>'AX>'AX("`@("`@('AX>'@@("`@("`@("!X>'AX>'AX
  581. XM>'AX>'AX>'AX>'AX>'@@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
  582. XM("`@("`@>'AW("`@("`@("`@("`@<7AX>'AX("`@("`@("!Q>'AX>"`@("`@
  583. XM("`@("`@>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@("`@('AX>'AW("`@("`@
  584. XM("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  585. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@>'AX>"`@("`@
  586. XM("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@>`IX
  587. XM("`@("`@("`@("`@("`@("!X>'AX>'AX>'<@*B!Q>'AX>'AX>',@("`@("`@
  588. XM('AX>'AX("`@("`@("`@("!X>'AX>'AX>'AX>'AX>'AX>'<@("`@("`@("`@
  589. XM>'AX>'AW("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  590. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@
  591. XM("!X>'AX=R`@("`@("`@>'AX>'AX>'AX>'AX>'AX>$9X>'AX("`@("`@("`@
  592. XM("`@("`@("!X"G@@("`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX
  593. XM>'AX("`@("`@("`@>'AX>',@("`@("`@("`@('AX>'AX>'AX1GAX>'AX>'AX
  594. XM>"`@("`@("`@("!X>'AX>'AX=R`@<7AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  595. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  596. XM>'AX>'AX("`@("`@('AX>'AX("`@("`@("!X>'AX>'AX>'AX>'AX>',@(&%X
  597. XM>'@@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("!X>'AX>'AX
  598. XM>'AX>'AX>'AX>'AX>',@("`@("`@("!X>'AX("`@("`@("`@("`@("`@("`@
  599. XM("`@("`@("!A>'AX=R`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  600. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>',@("`@("`@("`@
  601. XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'@@("`@("`@(&%X>'AX>',@
  602. XM("`@("`@("`@('AX>"`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@
  603. XM("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX("`@("`@("`@('AX>'@@("`@("`@
  604. XM("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  605. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>$9S
  606. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>"`@("`@
  607. XM("`@('AX>',@("`@("`@("`@("`@>'AX("`@("`@("`@("`@("`@("!X"G@@
  608. XM("`@("`@("`@("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX>',@("`@("`@("`@
  609. XM>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX>'AX>'AX
  610. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  611. XM>'AX>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  612. XM("!X>'AX("`@("`@("`@>'AS("`@("`@("`@("`@("!X>'AW("`@("`@("`@
  613. XM("`@("`@('@*>"`@("`@("`@("`@("`@("!X>'AX>'AX>'AX>'AX>'AX>'AS
  614. XM("`@("`@("`@("!X>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@9'AX
  615. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'A&>'AX>'AX>'AX>'AX>'AX>'AX>'AX
  616. XM>'AX>'AX>'AX>'AX>'AX>'AX>'AF("`@("`@("`@("`@("`@("`@("`@("`@
  617. XM("`@("`@("`@("`@('AX>'@@("`@("`@("!X>"`@("`@("`@("`@("`@<7AX
  618. XM>'@@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@('AX<R`@("`@
  619. XM("!C("`@("`@("`@("`@("`@("`@('AX>'@@("`@("`@("`@("`@("`@("`@
  620. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  621. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  622. XM("`@("`@("`@("`@("`@("`@("`@("`@>'AX>"`@("`@("`@("`@("`@("`@
  623. XM("`@("`@('%X>'AX>"`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@
  624. XM("`@>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>"`@("`@("`@
  625. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  626. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  627. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX("`@("`@
  628. XM("`@("`@("`@("`@("`@("!Q>'AX>'AX("`@("`@("`@("`@("`@('@*>"`@
  629. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
  630. XM>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  631. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  632. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  633. XM('AX>'@@("`@("`@("`@("`@("`@("`@("`@('AX>'AX>'@@("`@("`@("`@
  634. XM("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  635. XM("`@("`@("`@('AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  636. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  637. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  638. XM("`@("`@("`@("`@>'AX>"`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AS
  639. XM("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@
  640. XM("`@("`@("`@("`@("`@("`@("`@>'AX>"`@("`@("`@("`@("`@("`@("`@
  641. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  642. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
  643. END_OF_FILE
  644. if test 37778 -ne `wc -c <'maps/logo2.uue.1'`; then
  645.     echo shar: \"'maps/logo2.uue.1'\" unpacked with wrong size!
  646. fi
  647. # end of 'maps/logo2.uue.1'
  648. fi
  649. if test -f 'src/server.c' -a "${1}" != "-c" ; then 
  650.   echo shar: Will not clobber existing file \"'src/server.c'\"
  651. else
  652. echo shar: Extracting \"'src/server.c'\" \(16909 characters\)
  653. sed "s/^X//" >'src/server.c' <<'END_OF_FILE'
  654. X/* $Id: server.c,v 1.23 1992/07/10 23:19:59 bjoerns Exp $
  655. X *
  656. X *    This file is part of the XPilot project, written by
  657. X *
  658. X *        Bjxrn Stabell (bjoerns@stud.cs.uit.no)
  659. X *        Ken Ronny Schouten (kenrsc@stud.cs.uit.no)
  660. X *
  661. X *    Copylefts are explained in the LICENSE file.
  662. X */
  663. X
  664. X#include <X11/Xproto.h>
  665. X#include <X11/Xlib.h>
  666. X#include <X11/Xos.h>
  667. X
  668. X#include <stdio.h>
  669. X#include <signal.h>
  670. X#include <time.h>
  671. X#include <pwd.h>
  672. X#include <setjmp.h>
  673. X
  674. X#include "global.h"
  675. X#include "version.h"
  676. X#include "map.h"
  677. X#include "pack.h"
  678. X#include "draw.h"
  679. X#include "robot.h"
  680. X
  681. X#ifndef    lint
  682. Xstatic char versionid[] = "@(#)$" TITLE " $";
  683. Xstatic char sourceid[] =
  684. X    "@(#)$Id: server.c,v 1.23 1992/07/10 23:19:59 bjoerns Exp $";
  685. X#endif
  686. X
  687. X
  688. X#define CHECK_DELAY    0x3f
  689. X#define    LOOP_DELAY    50
  690. X
  691. X/*
  692. X * Global variables
  693. X */
  694. Xint        NumPlayers = 0;
  695. Xint        NumObjs;
  696. Xint        Num_alive = 0;
  697. Xplayer        *Players[MAX_PLAYERS];
  698. Xobject        *Obj[MAX_TOTAL_SHOTS];
  699. Xlong        Id = 1;            /* Unique ID for each object */
  700. Xlong        GetInd[MAX_ID];
  701. Xserver        Server;
  702. Xint        RadarHeight;
  703. Xint        Shutdown = -1, ShutdownDelay = 1000;
  704. Xjmp_buf        SavedEnv;
  705. Xint        Delay = LOOP_DELAY;
  706. X
  707. Xstatic bool    Inside_window = true;
  708. Xstatic int    Socket;
  709. Xstatic pack_t    out;
  710. Xstatic char    msg[MSG_LEN];
  711. Xstatic bool    Log = true;
  712. Xstatic bool    NoPlayersEnteredYet = true;
  713. X
  714. X
  715. X
  716. Xint main(int argc, char *argv[])
  717. X{
  718. X    struct hostent *hinfo;
  719. X    struct passwd *pwent;
  720. X
  721. X
  722. X    init_error(argv[0]);
  723. X
  724. X    srand(time((time_t *)0));        /* Take seed from timer. */
  725. X
  726. X    Parser(argc, argv);
  727. X
  728. X    RadarHeight = (256.0/World.x) * World.y;
  729. X
  730. X    Make_table();            /* Make trigonometric tables */
  731. X
  732. X    Compute_gravity();
  733. X    Alloc_players(World.NumBases);    /* Allocate memory for players */
  734. X    Alloc_shots(MAX_TOTAL_SHOTS);    /* Allocate memory for shots */
  735. X    Alloc_msgs(MAX_MSGS);
  736. X    Make_ships();
  737. X
  738. X    /*
  739. X     * Get server's official name.
  740. X     */
  741. X    gethostname(Server.host, 80);
  742. X    hinfo = gethostbyname(Server.host);
  743. X    strcpy(Server.host, hinfo->h_name);
  744. X
  745. X    /*
  746. X     * Get owners login name.
  747. X     */
  748. X    pwent = getpwuid(geteuid());
  749. X    strcpy(Server.name, pwent->pw_name);
  750. X
  751. X    /*
  752. X     * Initialize core of out packet.
  753. X     */
  754. X    out.core.magic = htonl(MAGIC);
  755. X    out.core.port = htonl(SERVER_PORT);
  756. X    strcpy(out.core.realname, Server.name);
  757. X
  758. X    /*
  759. X     * Log, if enabled.
  760. X     */
  761. X    if ((strcmp(Server.name, "kenrsc") == 0) ||
  762. X    (strcmp(Server.name, "bjoerns") == 0))
  763. X    Log = false;
  764. X    Log_game("START");            /* Log start */
  765. X
  766. X    /*
  767. X     * Create a socket which we can listen on.
  768. X     */
  769. X    if ((Socket = CreateDgramSocket(SERVER_PORT)) == -1) {
  770. X    error("Could not create Dgram socket");
  771. X    End_game();
  772. X    }
  773. X    SetTimeout(0, 0);
  774. X
  775. X    /*
  776. X     * Is the server in raw mode, that is - should it run even while
  777. X     * there are noe players logged in.
  778. X     */
  779. X/*    if (RawMode) {*/
  780. X/*    signal(SIGALRM, Handle_signal);*/    /* Get first client, then proceed. */
  781. X/*    alarm(5*60);    */        /* Signal me in 5 minutes. */
  782. X/*    while (Check_new_players() == false)*/
  783. X/*        sleep(2);*/
  784. X/*    signal(SIGALRM, SIG_IGN);*/
  785. X/*    }*/
  786. X    signal(SIGHUP, Handle_signal);
  787. X    signal(SIGTERM, Handle_signal);
  788. X    signal(SIGINT, Handle_signal);
  789. X
  790. X    Main_Loop();                /* Entering main loop. */
  791. X    /* NEVER REACHED */
  792. X    return (0);
  793. X}
  794. X
  795. X
  796. X
  797. Xvoid Loop_delay()
  798. X{
  799. X    static long adj_sec = 0;
  800. X    static long last_msec = 0;
  801. X    long msec;
  802. X    struct timeval tval;
  803. X    struct timezone tzone;
  804. X
  805. X    if (adj_sec == 0) {
  806. X      if (gettimeofday (&tval, &tzone) != 0)
  807. X          return;
  808. X
  809. X      adj_sec = tval.tv_sec;
  810. X      last_msec = (tval.tv_sec - adj_sec)*1000 + (tval.tv_usec)/1000;
  811. X      return;
  812. X    }
  813. X
  814. X    do {
  815. X      if (gettimeofday (&tval, &tzone) != 0)
  816. X          return;
  817. X
  818. X      msec = (tval.tv_sec - adj_sec)*1000 + (tval.tv_usec)/1000;
  819. X  
  820. X    } while (msec < last_msec + Delay);
  821. X
  822. X    last_msec = msec;
  823. X}
  824. X
  825. X
  826. X/*
  827. X * Main loop.
  828. X */
  829. Xvoid Main_Loop()
  830. X{
  831. X    XEvent event;
  832. X    XClientMessageEvent *cmev;
  833. X    register int i, x;
  834. X    static int loops = 0;
  835. X
  836. X
  837. X    setjmp(SavedEnv);
  838. X
  839. X    while (NoQuit || NumPlayers>NumRobots || NoPlayersEnteredYet) {
  840. X
  841. X    if ((loops = (loops+1) & CHECK_DELAY) == 0) {
  842. X        if (NumPlayers == NumRobots && !RawMode) {
  843. X        while(Check_new_players() == false)
  844. X            sleep(5);
  845. X        } else
  846. X        Check_new_players();
  847. X    }
  848. X
  849. X    Update_objects();
  850. X
  851. X    if (Shutdown > 0)    /* Check for possible shutdown, the */
  852. X        Shutdown--;        /* server will shutdown when Shutdown */
  853. X    else            /* (a counter) reaches 0.  If the */
  854. X        if (Shutdown == 0)    /* counter is < 0 then now shutdown */
  855. X        End_game();    /* is in progress. */
  856. X
  857. X    if ((loops % UPDATES_PR_FRAME) == 0) {
  858. X        Loop_delay();
  859. X        Draw_objects();
  860. X    }
  861. X
  862. X    for (i=0; i<NumPlayers; i++) {
  863. X        if (Players[i]->disp_type == DT_NONE)
  864. X        continue;
  865. X
  866. X        for(x = XEventsQueued(Players[i]->disp,
  867. X                  QueuedAfterFlush); x>0; x--) {
  868. X        XNextEvent(Players[i]->disp, &event);
  869. X        
  870. X        switch (event.type) {
  871. X
  872. X        case ClientMessage:
  873. X            cmev = (XClientMessageEvent *) &event;
  874. X            if (cmev->message_type == ProtocolAtom &&
  875. X            cmev->data.l[0] == KillAtom) {
  876. X            D(printf("Got WM_DELETE_WINDOW from %s@%s.\n",
  877. X                 Players[i]->name,
  878. X                 Player[i]->robot_mode == RM_NOT_ROBOT
  879. X                 ? DisplayString(Players[i]->disp)
  880. X                 : "noplace:0"));
  881. X            Quit(i);
  882. X            }
  883. X            break;
  884. X
  885. X        case KeyPress:
  886. X        case KeyRelease:
  887. X            Key_event(i, &event);
  888. X            break;
  889. X
  890. X        case ButtonPress:
  891. X            Expose_button_window(i, BLACK, event.xbutton.window);
  892. X
  893. X            if (event.xbutton.window == Players[i]->info_b)
  894. X            Info(i, Players[i]->info_b);
  895. X            if (event.xbutton.window == Players[i]->help_b)
  896. X            Help(i, Players[i]->help_b);
  897. X            break;
  898. X
  899. X        case ButtonRelease:
  900. X            if (event.xbutton.window == Players[i]->quit_b)
  901. X            Quit(i);
  902. X            else if (event.xbutton.window == Players[i]->info_close_b)
  903. X            Info(i, Players[i]->info_close_b);
  904. X            else if (event.xbutton.window == Players[i]->help_close_b)
  905. X            Help(i, Players[i]->help_close_b);
  906. X            else if (event.xbutton.window == Players[i]->help_next_b)
  907. X            Help(i, Players[i]->help_next_b);
  908. X            else if (event.xbutton.window == Players[i]->help_prev_b)
  909. X            Help(i, Players[i]->help_prev_b);
  910. X            break;
  911. X
  912. X        case Expose:
  913. X            if (event.xexpose.count > 0)    /* We don't want any */
  914. X            break;                /* subarea exposures. */
  915. X
  916. X            if (event.xexpose.window == Players[i]->players)
  917. X            Set_labels();
  918. X            else if (event.xexpose.window == Players[i]->info_w)
  919. X            Expose_info_window(i);
  920. X            else if (event.xexpose.window == Players[i]->help_w)
  921. X            Expose_help_window(i);
  922. X            else  if (event.xexpose.window == Players[i]->radar)
  923. X            Draw_world_radar(i);
  924. X            else
  925. X            Expose_button_window(i, RED, event.xexpose.window);
  926. X            break;
  927. X
  928. X        case EnterNotify:
  929. X            Inside_window = true;
  930. X            XAutoRepeatOff(Players[i]->disp);
  931. X            Players[i]->turnacc = 0.0;
  932. X            break;
  933. X
  934. X        case UnmapNotify:
  935. X        case LeaveNotify:
  936. X            Inside_window = false;
  937. X            XAutoRepeatOn(Players[i]->disp);
  938. X            break;
  939. X
  940. X        case NoExpose:
  941. X            break;    /* XXX? */
  942. X
  943. X        case MappingNotify:
  944. X            XRefreshKeyboardMapping(&event.xmapping);
  945. X            break;
  946. X
  947. X        default:
  948. X            error("Got unexpected event type: %d", event.type);
  949. X            break;
  950. X        }
  951. X        }
  952. X    }
  953. X    }
  954. X
  955. X    End_game();
  956. X}
  957. X
  958. X
  959. X
  960. X/*
  961. X *  Last function, exit with grace.
  962. X */
  963. Xvoid End_game(void)
  964. X{
  965. X    int i;
  966. X
  967. X
  968. X    if (Shutdown == 0) {
  969. X    error("Shutting down...");
  970. X    }
  971. X
  972. X    for (i=0; i<NumPlayers; i++)    /* Shutdown server */
  973. X    Quit(i);
  974. X
  975. X    SocketClose(Socket);
  976. X    Free_players(World.NumBases);
  977. X    Free_ships();
  978. X    Free_shots(MAX_TOTAL_SHOTS);
  979. X    Free_map();
  980. X    Free_msgs(MAX_MSGS);
  981. X    Log_game("END");                /* Log end */
  982. X
  983. X    exit (0);
  984. X}
  985. X
  986. X
  987. X
  988. Xvoid Dump_pack(core_pack_t *p)
  989. X{
  990. X    printf("\nDUMP OF PACK:\n");
  991. X    printf("=============\n");
  992. X    printf("TYPE:    %d\n", p->type);
  993. X    printf("REALNAME:    %s\n", p->realname);
  994. X    printf("PORT:    %ld\n", ntohl(p->port));
  995. X    printf("MAGIC:    %lx\n", ntohl(p->magic));
  996. X}
  997. X
  998. X
  999. X
  1000. Xbool Check_new_players(void)
  1001. X{
  1002. X    int            i,
  1003. X                out_size = 0,
  1004. X                bytes;
  1005. X    char        *in_host;
  1006. X    XKeyboardState    settings;
  1007. X    static bool        lock = false;
  1008. X    bool        new_player = false,
  1009. X                answer = false;
  1010. X    char        *str;
  1011. X    pack_t        in;
  1012. X    player        *pl;
  1013. X
  1014. X
  1015. X    /*
  1016. X     * Anyone cheating by turning auto-fire (also called auto-repeat :) on?
  1017. X     */
  1018. X    for (i=0; i<NumPlayers; i++) {
  1019. X    if (Players[i]->disp_type == DT_NONE)
  1020. X        continue;
  1021. X    if (!BIT(Players[i]->status, PAUSE) && Inside_window) {
  1022. X        XGetKeyboardControl(Players[i]->disp, &settings);
  1023. X
  1024. X        if (settings.global_auto_repeat == AutoRepeatModeOn)
  1025. X        XAutoRepeatOff(Players[i]->disp);
  1026. X    }
  1027. X    }
  1028. X
  1029. X    if (!SocketReadable(Socket))    /* No-one tried to connect. */
  1030. X    return (false);
  1031. X
  1032. X
  1033. X    /*
  1034. X     * Someone connected to us, now try and deschiffer the message :)
  1035. X     */
  1036. X    if ((bytes = DgramReceiveAny(Socket, (char *)&in, sizeof(pack_t))) <= 0) {
  1037. X    error("SocketRead (pack from %s)", DgramLastaddr());
  1038. X    return (false);
  1039. X    }
  1040. X
  1041. X    /*
  1042. X     * Get hostname.
  1043. X     */
  1044. X    in_host = DgramLastaddr();
  1045. X
  1046. X
  1047. X    /*
  1048. X     * Determine if we can talk with this hand-shake program.
  1049. X     */
  1050. X    if (ntohl(in.core.magic) != MAGIC) {
  1051. X#ifndef    SILENT
  1052. X    error("Incompatible packet received from %s", in_host);
  1053. X#endif
  1054. X    return (false);
  1055. X    }
  1056. X
  1057. X
  1058. X    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1059. X     *
  1060. X     * Now decode the packet type field and do something witty.
  1061. X     * (Note, s and r is short for send and reply.)
  1062. X     *
  1063. X     */
  1064. X    out.core.type    = CORE_pack;
  1065. X    out.core.status    = SUCCESS;
  1066. X    answer        = true;
  1067. X    out_size        = sizeof(core_pack_t);
  1068. X
  1069. X    switch (in.core.type) {
  1070. X
  1071. X    case ENTER_GAME_pack:    {
  1072. X    /*
  1073. X     * Someone wants to enter the game.
  1074. X     */
  1075. X    reply_pack_t        *s = &out.reply;
  1076. X    enter_game_pack_t    *r = &in.enter;
  1077. X
  1078. X    /*
  1079. X     * Game locked?
  1080. X     */
  1081. X    if (lock && !Owner(r->realname)) {
  1082. X        s->status = E_GAME_LOCKED;
  1083. X        goto switch_end;
  1084. X    }
  1085. X    
  1086. X    /*
  1087. X     * Is the game full?
  1088. X     */
  1089. X    if (NumPlayers >= World.NumBases) {
  1090. X        s->status = E_GAME_FULL;
  1091. X        goto switch_end;
  1092. X    }
  1093. X
  1094. X    Init_player(NumPlayers);
  1095. X    pl = Players[NumPlayers];
  1096. X
  1097. X    strcpy(pl->name, r->nick);
  1098. X    strcpy(pl->realname, r->realname);
  1099. X    
  1100. X    /*
  1101. X     * Now initialize X.
  1102. X     */
  1103. X    if ((pl->disp = XOpenDisplay(r->display)) == NULL) {    /* Open the */
  1104. X        s->status = E_DISPLAY;                /* display */
  1105. X        goto switch_end;
  1106. X    }
  1107. X
  1108. X    /*
  1109. X     * Get X defaults.
  1110. X     */
  1111. X    Get_defaults(NumPlayers);
  1112. X    if (htons(r->team) != TEAM_NOT_SET)
  1113. X        pl->team = htons(r->team);
  1114. X
  1115. X
  1116. X    /*
  1117. X     * All names must be unique (so we don't kick the wrong one for
  1118. X     * instance).
  1119. X     */
  1120. X    for (i=0; i<NumPlayers; i++) {
  1121. X        if (strcasecmp(Players[i]->name, pl->name) == 0) {
  1122. X        s->status = E_IN_USE;
  1123. X        XCloseDisplay(pl->disp);
  1124. X        goto switch_end;
  1125. X        }
  1126. X    }
  1127. X
  1128. X    /*
  1129. X     * Now initialize all the windows.
  1130. X     */
  1131. X    if ((s->status = Init_window(NumPlayers)) == SUCCESS) {
  1132. X
  1133. X#ifndef    SILENT
  1134. X        printf("%s (%d, %s) starts at startpos %d.\n",
  1135. X           Players[NumPlayers]->name, NumPlayers+1,
  1136. X           Players[NumPlayers]->realname,
  1137. X           Players[NumPlayers]->home_base);
  1138. X#endif
  1139. X        if (NumPlayers == 0)
  1140. X        sprintf(msg, "Welcome to \"%s\", made by %s.",
  1141. X            World.name, World.author);
  1142. X        else
  1143. X        sprintf(msg, "%s (%s) has entered \"%s\", made by %s.",
  1144. X            Players[NumPlayers]->name,
  1145. X            Players[NumPlayers]->realname,
  1146. X            World.name, World.author);
  1147. X
  1148. X        NumPlayers++;
  1149. X        Id++;
  1150. X        new_player = true;
  1151. X        NoPlayersEnteredYet = false;
  1152. X    
  1153. X        Set_message(msg);
  1154. X        Set_label_strings();
  1155. X        
  1156. X        /* Remebers the maximum number of players */
  1157. X        Server.max_num = MAX(Server.max_num, NumPlayers);
  1158. X        
  1159. X    } else {        /* Couldn't initialize X, explain to user. */
  1160. X
  1161. X        new_player = false;
  1162. X    }
  1163. X    }
  1164. X    break;
  1165. X
  1166. X
  1167. X    case REPORT_STATUS_pack:    {
  1168. X    /*
  1169. X     * Someone asked for information.
  1170. X     */
  1171. X    reply_pack_t        *s = &out.reply;
  1172. X    report_status_pack_t    *r = &in.command;
  1173. X
  1174. X#ifndef    SILENT
  1175. X    printf("%s asked for info about current game.\n", r->realname);
  1176. X#endif
  1177. X    sprintf(s->str,
  1178. X        "\nSERVER VERSION...: %s\n"
  1179. X        "STARTED BY.......: %s\n"
  1180. X        "STATUS...........: %s\n"
  1181. X        "WORLD (%3dx%3d)..: %s\n"
  1182. X        "      AUTHOR.....: %s\n"
  1183. X        "PLAYERS (%2d/%2d)..:\n",
  1184. X        TITLE, Server.name, lock && Shutdown==-1 ? "Locked " :
  1185. X        !lock && Shutdown!=-1 ? "Shutting down" :
  1186. X        lock && Shutdown!=-1 ? "Locked and shutting down" :
  1187. X        "Clear",
  1188. X        World.x, World.y, World.name, World.author,
  1189. X        NumPlayers, World.NumBases);
  1190. X
  1191. X    if (i > 0)
  1192. X        strcat(s->str,
  1193. X           "\nNO:  TM: NAME:             LIFE:   SC:    PLAYER:\n"
  1194. X           "-------------------------------------------------\n");
  1195. X    
  1196. X    for (i=0; i<NumPlayers; i++) {
  1197. X        sprintf(msg, "%2d... %-36s%s@%s\n",
  1198. X            i+1, Players[i]->lblstr, Players[i]->realname,
  1199. X            Players[i]->robot_mode == RM_NOT_ROBOT
  1200. X            ? DisplayString(Players[i]->disp)
  1201. X            : "noplace:0");
  1202. X        if (strlen(msg) + strlen(s->str) >= MAX_STR_LEN)
  1203. X        break;
  1204. X        strcat(s->str, msg);
  1205. X    }
  1206. X    out_size += strlen(s->str);
  1207. X    }
  1208. X    break;
  1209. X
  1210. X    
  1211. X    case MESSAGE_pack:    {
  1212. X    /*
  1213. X     * Someone wants to transmit a message to the server.
  1214. X     */
  1215. X    reply_pack_t    *s = &out.reply;
  1216. X    message_pack_t    *r = &in.command;
  1217. X
  1218. X    if (!Owner(r->realname)) {
  1219. X        s->status = E_NOT_OWNER;
  1220. X    } else {
  1221. X        sprintf(msg,
  1222. X            "          <<< MESSAGE FROM ABOVE (%s) >>>        \"%s\"",
  1223. X            r->realname, r->arg_str);
  1224. X        Set_message(msg);
  1225. X    }
  1226. X    }
  1227. X    break;
  1228. X
  1229. X
  1230. X    case LOCK_GAME_pack:    {
  1231. X    /*
  1232. X     * Someone wants to lock the game so that no more players can enter.
  1233. X     */
  1234. X    reply_pack_t        *s = &out.reply;
  1235. X    lock_game_pack_t    *r = &in.command;
  1236. X
  1237. X    if (!Owner(r->realname)) {
  1238. X        s->status = E_NOT_OWNER;
  1239. X    } else {
  1240. X        lock = !lock;
  1241. X    }
  1242. X    }
  1243. X    break;
  1244. X
  1245. X    
  1246. X    case CONTACT_pack:    {
  1247. X    /*
  1248. X     * Got contact message from client.
  1249. X     */
  1250. X    reply_pack_t    *s = &out.reply;
  1251. X    contact_pack_t    *r = &in.core;
  1252. X
  1253. X    D(printf("Got CONTACT from %s.\n", in_host));
  1254. X    }
  1255. X    break;
  1256. X
  1257. X
  1258. X    case SHUTDOWN_pack:    {
  1259. X    /*
  1260. X     * Shutdown the entire server.
  1261. X     */
  1262. X    reply_pack_t    *s = &out.reply;
  1263. X    shutdown_pack_t    *r = &in.command;
  1264. X
  1265. X    if (!Owner(r->realname)) {
  1266. X        s->status = E_NOT_OWNER;
  1267. X        goto switch_end;
  1268. X    }
  1269. X
  1270. X    Shutdown = ntohl(r->arg_int);
  1271. X
  1272. X    if (Shutdown == 0) {
  1273. X        sprintf(msg, "|*******| SHUTDOWN STOPPED (%s) |*******| \"%s\"",
  1274. X            r->realname, r->arg_str);
  1275. X        Shutdown = -1;
  1276. X    } else {
  1277. X        for (i=0; i<NumPlayers; i++) {
  1278. X        if (Players[i]->disp_type == DT_NONE)
  1279. X            continue;
  1280. X        XMapWindow(Players[i]->disp, Players[i]->top);
  1281. X        }
  1282. X        sprintf(msg, "|*******| SHUTTING DOWN (%s) |*******| \"%s\"",
  1283. X            r->realname, r->arg_str);
  1284. X
  1285. X        ShutdownDelay = Shutdown;
  1286. X    }
  1287. X    Set_message(msg);
  1288. X    }
  1289. X    break;
  1290. X
  1291. X    
  1292. X    case KICK_PLAYER_pack:    {
  1293. X    /*
  1294. X     * Kick someone from the game.
  1295. X     */
  1296. X    reply_pack_t        *s = &out.reply;
  1297. X    kick_player_pack_t    *r = &in.command;
  1298. X    byte            found = -1;
  1299. X
  1300. X    if (!Owner(r->realname)) {
  1301. X        s->status = E_NOT_OWNER;
  1302. X        goto switch_end;
  1303. X    }
  1304. X
  1305. X    for (i=0; i<NumPlayers; i++) {
  1306. X        if (strcasecmp(r->arg_str, Players[i]->name) == 0
  1307. X        || strcasecmp(r->arg_str, Players[i]->realname) == 0)
  1308. X        found = i;
  1309. X    }
  1310. X    if (found == -1) {
  1311. X        s->status = E_NOT_FOUND;
  1312. X    } else {
  1313. X        sprintf(msg, "\"%s\" upset the gods and was kicked out "
  1314. X            "of the game.", Players[found]->name);
  1315. X        Set_message(msg);
  1316. X        Quit(found);
  1317. X        goto switch_end;
  1318. X    }
  1319. X    }
  1320. X    break;
  1321. X
  1322. X    
  1323. X    default:
  1324. X    /*
  1325. X     * Incorrect packet type.
  1326. X     */
  1327. X    answer    = false;
  1328. X
  1329. X    error("Incorrect packet type from %s.\n"
  1330. X          "(Probably occured due to incompatibility between handshake\n"
  1331. X          "version and server version, someone should upgrade)", in_host);
  1332. X    }
  1333. X
  1334. X switch_end:
  1335. X    if (answer && (DgramSend(Socket, in_host, ntohl(in.core.port),
  1336. X                 (char *)&out, out_size)) == -1) {
  1337. X    error("Could not send request to client at %s.", in_host);
  1338. X    }
  1339. X
  1340. X    return (new_player);
  1341. X}
  1342. X
  1343. X
  1344. X
  1345. X/*
  1346. X * Returns true if <name> has owner status of this server.
  1347. X */
  1348. Xbool Owner(char *name)
  1349. X{
  1350. X    if ((strcmp(name, Server.name)  == 0)
  1351. X    || (strcmp(name, "kenrsc")  == 0)
  1352. X    || (strcmp(name, "bjoerns") == 0)
  1353. X    || (strcmp(name, "root")    == 0))
  1354. X    return (true);
  1355. X    else
  1356. X    return (false);
  1357. X}
  1358. X
  1359. X
  1360. X
  1361. Xvoid Handle_signal(int sig_no)
  1362. X{
  1363. X    switch (sig_no) {
  1364. X    case SIGALRM:
  1365. X    error("First player has yet to show his butt, I'm bored... Bye!");
  1366. X    SocketClose(Socket);
  1367. X    break;
  1368. X
  1369. X    case SIGHUP:
  1370. X    case SIGINT:
  1371. X    case SIGTERM:
  1372. X    error("Caught signal %d, terminating.", sig_no);
  1373. X    End_game();
  1374. X    break;
  1375. X
  1376. X    default:
  1377. X    error("Caught unkown signal: %d", sig_no);
  1378. X    break;
  1379. X    }
  1380. X
  1381. X    exit(sig_no);
  1382. X}
  1383. X
  1384. X
  1385. X
  1386. Xvoid Log_game(char *heading)
  1387. X{
  1388. X#ifndef NO_LOG
  1389. X    char str[1024];
  1390. X    FILE *fp;
  1391. X
  1392. X
  1393. X    if (!Log)
  1394. X    return;
  1395. X
  1396. X/*  sprintf(str,
  1397. X        "echo \"*** %s ***\n\n'%s' started a server on '%s' with map:\n"
  1398. X        "'%s.'\""
  1399. X        "| mailx -s \"%s\" %s 2>/dev/null >/dev/null",
  1400. X        NAME " " VERSION, Server.name, Server.host,
  1401. X        World.name, heading, REPORT_ADDRESS);
  1402. X    system("/bin/mv dead.letter3 dead.letter4 2>/dev/null >/dev/null");
  1403. X    system("/bin/mv dead.letter2 dead.letter3 2>/dev/null >/dev/null");
  1404. X    system("/bin/mv dead.letter dead.letter2 2>/dev/null >/dev/null");
  1405. X    system(str);
  1406. X    sleep (3);
  1407. X    system("/bin/rm -f dead.letter 2>/dev/null");
  1408. X    printf("Logging...\n");
  1409. X*/
  1410. X    sprintf(str,
  1411. X        "%s (%s) - %s@%s, map '%s' (%d)\n",
  1412. X        heading, VERSION, Server.name, Server.host,
  1413. X        World.name, Server.max_num);
  1414. X
  1415. X    if ((fp=fopen(LOGFILE, "a")) == NULL) { /* Couldn't open file, oh well. */
  1416. X    error("Couldn't open log file, contact " LOCALGURU "");
  1417. X    return;
  1418. X    }
  1419. X
  1420. X    fputs(str, fp);
  1421. X
  1422. X    fclose(fp);
  1423. X#endif
  1424. X}
  1425. END_OF_FILE
  1426. echo shar: 1 control character may be missing from \"'src/server.c'\"
  1427. if test 16909 -ne `wc -c <'src/server.c'`; then
  1428.     echo shar: \"'src/server.c'\" unpacked with wrong size!
  1429. fi
  1430. # end of 'src/server.c'
  1431. fi
  1432. echo shar: End of archive 13 \(of 24\).
  1433. cp /dev/null ark13isdone
  1434. MISSING=""
  1435. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ; do
  1436.     if test ! -f ark${I}isdone ; then
  1437.     MISSING="${MISSING} ${I}"
  1438.     fi
  1439. done
  1440. if test "${MISSING}" = "" ; then
  1441.     echo You have unpacked all 24 archives.
  1442.     echo "\nNow run 'bldmaps.sh' to build the map files"
  1443.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1444. else
  1445.     echo You still need to unpack the following archives:
  1446.     echo "        " ${MISSING}
  1447. fi
  1448. ##  End of shell archive.
  1449. exit 0
  1450.