From f438f02b0fb2e4a8730bd49dfd9312b5204b097b Mon Sep 17 00:00:00 2001 From: "itspy.wei" Date: Fri, 26 Nov 2010 16:27:45 +0000 Subject: add uip git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1125 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/net/uip/README | 13 + components/net/uip/apps/README | 2 + components/net/uip/apps/dhcpc/Makefile.dhcpc | 1 + components/net/uip/apps/dhcpc/dhcpc.c | 356 + components/net/uip/apps/dhcpc/dhcpc.h | 68 + .../net/uip/apps/hello-world/Makefile.hello-world | 1 + components/net/uip/apps/hello-world/hello-world.c | 115 + components/net/uip/apps/hello-world/hello-world.h | 53 + components/net/uip/apps/resolv/Makefile.resolv | 1 + components/net/uip/apps/resolv/resolv.c | 464 + components/net/uip/apps/resolv/resolv.h | 75 + components/net/uip/apps/smtp/Makefile.smtp | 1 + components/net/uip/apps/smtp/makestrings | 40 + components/net/uip/apps/smtp/smtp-strings | 11 + components/net/uip/apps/smtp/smtp-strings.c | 70 + components/net/uip/apps/smtp/smtp-strings.h | 46 + components/net/uip/apps/smtp/smtp.c | 262 + components/net/uip/apps/smtp/smtp.h | 103 + components/net/uip/apps/telnetd/Makefile.telnetd | 1 + components/net/uip/apps/telnetd/telnetd.c | 350 + components/net/uip/apps/telnetd/telnetd.h | 63 + components/net/uip/apps/telnetd/uip_shell.c | 123 + components/net/uip/apps/telnetd/uip_shell.h | 104 + .../net/uip/apps/webclient/Makefile.webclient | 1 + components/net/uip/apps/webclient/makestrings | 40 + .../net/uip/apps/webclient/webclient-strings | 31 + .../net/uip/apps/webclient/webclient-strings.c | 93 + .../net/uip/apps/webclient/webclient-strings.h | 31 + components/net/uip/apps/webclient/webclient.c | 439 + components/net/uip/apps/webclient/webclient.h | 228 + .../net/uip/apps/webserver/Makefile.webserver | 1 + components/net/uip/apps/webserver/http-strings | 35 + components/net/uip/apps/webserver/http-strings.c | 102 + components/net/uip/apps/webserver/http-strings.h | 34 + components/net/uip/apps/webserver/httpd-cgi.c | 203 + components/net/uip/apps/webserver/httpd-cgi.h | 84 + components/net/uip/apps/webserver/httpd-fs.c | 132 + components/net/uip/apps/webserver/httpd-fs.h | 57 + .../net/uip/apps/webserver/httpd-fs/404.html | 8 + .../net/uip/apps/webserver/httpd-fs/fade.png | Bin 0 -> 196 bytes .../net/uip/apps/webserver/httpd-fs/files.shtml | 35 + .../net/uip/apps/webserver/httpd-fs/footer.html | 2 + .../net/uip/apps/webserver/httpd-fs/header.html | 18 + .../net/uip/apps/webserver/httpd-fs/index.html | 29 + .../uip/apps/webserver/httpd-fs/processes.shtml | 5 + .../net/uip/apps/webserver/httpd-fs/stats.shtml | 31 + .../net/uip/apps/webserver/httpd-fs/style.css | 92 + .../net/uip/apps/webserver/httpd-fs/tcp.shtml | 5 + components/net/uip/apps/webserver/httpd-fsdata.c | 607 + components/net/uip/apps/webserver/httpd-fsdata.h | 64 + components/net/uip/apps/webserver/httpd.c | 338 + components/net/uip/apps/webserver/httpd.h | 62 + components/net/uip/apps/webserver/makefsdata | 78 + components/net/uip/apps/webserver/makestrings | 40 + components/net/uip/apps/webserver/webserver.h | 49 + components/net/uip/doc/Doxyfile | 279 + components/net/uip/doc/Makefile | 7 + components/net/uip/doc/README | 12 + components/net/uip/doc/doxygen.sty | 62 + components/net/uip/doc/example-mainloop-with-arp.c | 86 + .../net/uip/doc/example-mainloop-without-arp.c | 62 + components/net/uip/doc/examples.txt | 34 + components/net/uip/doc/header.tex | 53 + components/net/uip/doc/html/a00036.html | 120 + components/net/uip/doc/html/a00037.html | 72 + components/net/uip/doc/html/a00038.html | 282 + components/net/uip/doc/html/a00039.html | 123 + components/net/uip/doc/html/a00040.html | 459 + components/net/uip/doc/html/a00041.html | 248 + components/net/uip/doc/html/a00042.html | 106 + components/net/uip/doc/html/a00043.html | 82 + components/net/uip/doc/html/a00044.html | 370 + components/net/uip/doc/html/a00045.html | 83 + components/net/uip/doc/html/a00046.html | 484 + components/net/uip/doc/html/a00047.html | 95 + components/net/uip/doc/html/a00048.html | 376 + components/net/uip/doc/html/a00049.html | 88 + components/net/uip/doc/html/a00050.html | 177 + components/net/uip/doc/html/a00051.html | 138 + components/net/uip/doc/html/a00077.html | 78 + components/net/uip/doc/html/a00078.html | 51 + components/net/uip/doc/html/a00079.html | 45 + components/net/uip/doc/html/a00080.html | 69 + components/net/uip/doc/html/a00081.html | 51 + components/net/uip/doc/html/a00082.html | 73 + components/net/uip/doc/html/a00083.html | 45 + components/net/uip/doc/html/a00084.html | 45 + components/net/uip/doc/html/a00085.html | 69 + components/net/uip/doc/html/a00086.html | 54 + components/net/uip/doc/html/a00087.html | 52 + components/net/uip/doc/html/a00088.html | 103 + components/net/uip/doc/html/a00089.html | 44 + components/net/uip/doc/html/a00090.html | 50 + components/net/uip/doc/html/a00091.html | 84 + components/net/uip/doc/html/a00092.html | 39 + components/net/uip/doc/html/a00093.html | 143 + components/net/uip/doc/html/a00094.html | 99 + components/net/uip/doc/html/a00095.html | 64 + components/net/uip/doc/html/a00096.html | 81 + components/net/uip/doc/html/a00097.html | 75 + components/net/uip/doc/html/a00100.html | 48 + components/net/uip/doc/html/a00101.html | 54 + components/net/uip/doc/html/a00102.html | 119 + components/net/uip/doc/html/a00103.html | 84 + components/net/uip/doc/html/a00104.html | 78 + components/net/uip/doc/html/a00105.html | 82 + components/net/uip/doc/html/a00107.html | 268 + components/net/uip/doc/html/a00110.html | 107 + components/net/uip/doc/html/a00111.html | 96 + components/net/uip/doc/html/a00112.html | 49 + components/net/uip/doc/html/a00113.html | 51 + components/net/uip/doc/html/a00114.html | 79 + components/net/uip/doc/html/a00120.html | 50 + components/net/uip/doc/html/a00121.html | 61 + components/net/uip/doc/html/a00123.html | 57 + components/net/uip/doc/html/a00124.html | 59 + components/net/uip/doc/html/a00125.html | 39 + components/net/uip/doc/html/a00127.html | 99 + components/net/uip/doc/html/a00128.html | 101 + components/net/uip/doc/html/a00129.html | 53 + components/net/uip/doc/html/a00130.html | 56 + components/net/uip/doc/html/a00131.html | 63 + components/net/uip/doc/html/a00132.html | 58 + components/net/uip/doc/html/a00134.html | 42 + components/net/uip/doc/html/a00135.html | 215 + components/net/uip/doc/html/a00136.html | 400 + components/net/uip/doc/html/a00137.html | 52 + components/net/uip/doc/html/a00138.html | 70 + components/net/uip/doc/html/a00139.html | 77 + components/net/uip/doc/html/a00140.html | 143 + components/net/uip/doc/html/a00141.html | 83 + components/net/uip/doc/html/a00142.html | 690 + components/net/uip/doc/html/a00143.html | 54 + components/net/uip/doc/html/a00144.html | 328 + components/net/uip/doc/html/a00145.html | 106 + components/net/uip/doc/html/a00146.html | 383 + components/net/uip/doc/html/a00147.html | 1046 + components/net/uip/doc/html/a00148.html | 634 + components/net/uip/doc/html/a00149.html | 68 + components/net/uip/doc/html/a00150.html | 1248 + components/net/uip/doc/html/a00151.html | 221 + components/net/uip/doc/html/a00152.html | 205 + components/net/uip/doc/html/a00153.html | 1059 + components/net/uip/doc/html/a00154.html | 79 + components/net/uip/doc/html/a00155.html | 82 + components/net/uip/doc/html/a00156.html | 237 + components/net/uip/doc/html/a00157.html | 108 + components/net/uip/doc/html/a00158.html | 693 + components/net/uip/doc/html/a00159.html | 251 + components/net/uip/doc/html/a00160.html | 284 + components/net/uip/doc/html/a00161.html | 257 + components/net/uip/doc/html/a00162.html | 56 + components/net/uip/doc/html/a00163.html | 533 + components/net/uip/doc/html/a00164.html | 172 + components/net/uip/doc/html/a00168.html | 381 + components/net/uip/doc/html/a00169.html | 93 + components/net/uip/doc/html/a00170.html | 125 + components/net/uip/doc/html/a00171.html | 77 + components/net/uip/doc/html/a00172.html | 489 + components/net/uip/doc/html/a00173.html | 100 + components/net/uip/doc/html/a00174.html | 287 + components/net/uip/doc/html/a00175.html | 128 + components/net/uip/doc/html/a00176.html | 148 + components/net/uip/doc/html/a00177.html | 129 + components/net/uip/doc/html/a00178.html | 375 + components/net/uip/doc/html/a00179.html | 88 + components/net/uip/doc/html/a00180.html | 464 + components/net/uip/doc/html/a00181.html | 253 + components/net/uip/doc/html/a00182.html | 228 + components/net/uip/doc/html/a00183.html | 109 + components/net/uip/doc/html/a00184.html | 363 + components/net/uip/doc/html/a00185.html | 87 + components/net/uip/doc/html/a00186.html | 129 + components/net/uip/doc/html/a00187.html | 167 + components/net/uip/doc/html/a00188.html | 113 + components/net/uip/doc/html/a00189.html | 108 + components/net/uip/doc/html/a00190.html | 101 + components/net/uip/doc/html/a00191.html | 156 + components/net/uip/doc/html/a00192.html | 363 + components/net/uip/doc/html/a00193.html | 405 + components/net/uip/doc/html/a00194.html | 348 + components/net/uip/doc/html/a00195.html | 152 + components/net/uip/doc/html/a00196.html | 111 + components/net/uip/doc/html/a00197.html | 183 + components/net/uip/doc/html/a00198.html | 86 + components/net/uip/doc/html/a00199.html | 161 + components/net/uip/doc/html/a00200.html | 121 + components/net/uip/doc/html/a00201.html | 1922 + components/net/uip/doc/html/a00202.html | 1626 + components/net/uip/doc/html/a00203.html | 163 + components/net/uip/doc/html/a00204.html | 448 + components/net/uip/doc/html/a00205.html | 169 + components/net/uip/doc/html/a00206.html | 564 + components/net/uip/doc/html/a00207.html | 182 + components/net/uip/doc/html/annotated.html | 50 + components/net/uip/doc/html/classes.html | 38 + components/net/uip/doc/html/doxygen.css | 310 + components/net/uip/doc/html/doxygen.png | Bin 0 -> 1281 bytes components/net/uip/doc/html/examples.html | 38 + components/net/uip/doc/html/files.html | 67 + components/net/uip/doc/html/ftv2blank.png | Bin 0 -> 174 bytes components/net/uip/doc/html/ftv2doc.png | Bin 0 -> 255 bytes components/net/uip/doc/html/ftv2folderclosed.png | Bin 0 -> 259 bytes components/net/uip/doc/html/ftv2folderopen.png | Bin 0 -> 261 bytes components/net/uip/doc/html/ftv2lastnode.png | Bin 0 -> 233 bytes components/net/uip/doc/html/ftv2link.png | Bin 0 -> 358 bytes components/net/uip/doc/html/ftv2mlastnode.png | Bin 0 -> 160 bytes components/net/uip/doc/html/ftv2mnode.png | Bin 0 -> 194 bytes components/net/uip/doc/html/ftv2node.png | Bin 0 -> 235 bytes components/net/uip/doc/html/ftv2plastnode.png | Bin 0 -> 165 bytes components/net/uip/doc/html/ftv2pnode.png | Bin 0 -> 200 bytes components/net/uip/doc/html/ftv2vertline.png | Bin 0 -> 229 bytes components/net/uip/doc/html/functions.html | 217 + components/net/uip/doc/html/functions_vars.html | 217 + components/net/uip/doc/html/globals.html | 62 + components/net/uip/doc/html/globals_0x61.html | 64 + components/net/uip/doc/html/globals_0x62.html | 62 + components/net/uip/doc/html/globals_0x64.html | 73 + components/net/uip/doc/html/globals_0x65.html | 62 + components/net/uip/doc/html/globals_0x66.html | 62 + components/net/uip/doc/html/globals_0x68.html | 73 + components/net/uip/doc/html/globals_0x69.html | 84 + components/net/uip/doc/html/globals_0x6c.html | 66 + components/net/uip/doc/html/globals_0x6d.html | 69 + components/net/uip/doc/html/globals_0x6e.html | 63 + components/net/uip/doc/html/globals_0x70.html | 95 + components/net/uip/doc/html/globals_0x72.html | 69 + components/net/uip/doc/html/globals_0x73.html | 81 + components/net/uip/doc/html/globals_0x74.html | 76 + components/net/uip/doc/html/globals_0x75.html | 237 + components/net/uip/doc/html/globals_0x77.html | 80 + components/net/uip/doc/html/globals_defs.html | 62 + components/net/uip/doc/html/globals_defs_0x61.html | 64 + components/net/uip/doc/html/globals_defs_0x62.html | 62 + components/net/uip/doc/html/globals_defs_0x64.html | 73 + components/net/uip/doc/html/globals_defs_0x65.html | 62 + components/net/uip/doc/html/globals_defs_0x66.html | 62 + components/net/uip/doc/html/globals_defs_0x68.html | 67 + components/net/uip/doc/html/globals_defs_0x69.html | 84 + components/net/uip/doc/html/globals_defs_0x6c.html | 65 + components/net/uip/doc/html/globals_defs_0x6d.html | 66 + components/net/uip/doc/html/globals_defs_0x6e.html | 63 + components/net/uip/doc/html/globals_defs_0x70.html | 93 + components/net/uip/doc/html/globals_defs_0x72.html | 62 + components/net/uip/doc/html/globals_defs_0x73.html | 70 + components/net/uip/doc/html/globals_defs_0x74.html | 72 + components/net/uip/doc/html/globals_defs_0x75.html | 188 + components/net/uip/doc/html/globals_defs_0x77.html | 67 + components/net/uip/doc/html/globals_func.html | 136 + components/net/uip/doc/html/globals_type.html | 47 + components/net/uip/doc/html/globals_vars.html | 55 + components/net/uip/doc/html/hierarchy.html | 50 + components/net/uip/doc/html/index.hhc | 192 + components/net/uip/doc/html/index.hhk | 450 + components/net/uip/doc/html/index.hhp | 197 + components/net/uip/doc/html/index.html | 8 + components/net/uip/doc/html/main.html | 421 + components/net/uip/doc/html/modules.html | 51 + components/net/uip/doc/html/tab_b.gif | Bin 0 -> 35 bytes components/net/uip/doc/html/tab_l.gif | Bin 0 -> 706 bytes components/net/uip/doc/html/tab_r.gif | Bin 0 -> 2585 bytes components/net/uip/doc/html/tabs.css | 102 + components/net/uip/doc/html/tree.html | 223 + components/net/uip/doc/mobisys2003.pdf | Bin 0 -> 87513 bytes components/net/uip/doc/pt-doc.txt | 173 + components/net/uip/doc/sicslogo.pdf | Bin 0 -> 4547 bytes components/net/uip/doc/uip-code-style.c | 118 + components/net/uip/doc/uip-code-style.txt | 3 + components/net/uip/doc/uip-doc.txt | 1180 + components/net/uip/doc/uip-refman.pdf | 39280 +++++++++++++++++++ components/net/uip/lib/memb.c | 104 + components/net/uip/lib/memb.h | 142 + components/net/uip/rt-thread/clock-arch.c | 50 + components/net/uip/rt-thread/clock-arch.h | 40 + components/net/uip/rt-thread/readme.txt | 12 + components/net/uip/rt-thread/uIPmain.c | 127 + components/net/uip/rt-thread/uip-conf.h | 167 + components/net/uip/rt-thread/uip_addr.h | 8 + components/net/uip/rt-thread/uip_arch.c | 143 + components/net/uip/rt-thread/uip_eth.h | 35 + components/net/uip/rt-thread/uip_etharp.c | 58 + components/net/uip/rt-thread/uip_etharp.h | 15 + components/net/uip/rt-thread/uip_ethernetif.c | 313 + components/net/uip/rt-thread/uip_ethernetif.h | 31 + components/net/uip/rt-thread/uip_ipaddr.h | 20 + components/net/uip/rt-thread/uip_netif.c | 53 + components/net/uip/rt-thread/uip_netif.h | 269 + components/net/uip/rt-thread/uip_pbuf.c | 50 + components/net/uip/rt-thread/uip_pbuf.h | 87 + components/net/uip/rt-thread/uip_tcpip.c | 41 + components/net/uip/uip-1.0-changelog.txt | 98 + components/net/uip/uip/Makefile.include | 47 + components/net/uip/uip/lc-addrlabels.h | 83 + components/net/uip/uip/lc-switch.h | 76 + components/net/uip/uip/lc.h | 131 + components/net/uip/uip/psock.c | 338 + components/net/uip/uip/psock.h | 380 + components/net/uip/uip/pt.h | 323 + components/net/uip/uip/uip-fw.c | 532 + components/net/uip/uip/uip-fw.h | 176 + components/net/uip/uip/uip-neighbor.c | 158 + components/net/uip/uip/uip-neighbor.h | 61 + components/net/uip/uip/uip-split.c | 136 + components/net/uip/uip/uip-split.h | 96 + components/net/uip/uip/uip.c | 1903 + components/net/uip/uip/uip.h | 1602 + components/net/uip/uip/uip_arch.h | 138 + components/net/uip/uip/uip_arp.c | 423 + components/net/uip/uip/uip_arp.h | 144 + components/net/uip/uip/uip_clock.h | 88 + components/net/uip/uip/uip_timer.c | 197 + components/net/uip/uip/uip_timer.h | 86 + components/net/uip/uip/uiplib.c | 74 + components/net/uip/uip/uiplib.h | 71 + components/net/uip/uip/uipopt.h | 539 + components/net/uip/unix/Makefile | 44 + components/net/uip/unix/clock-arch.c | 55 + components/net/uip/unix/clock-arch.h | 40 + components/net/uip/unix/main.c | 218 + components/net/uip/unix/tapdev.c | 152 + components/net/uip/unix/tapdev.h | 45 + components/net/uip/unix/uip-conf.h | 157 + 322 files changed, 90657 insertions(+) create mode 100644 components/net/uip/README create mode 100644 components/net/uip/apps/README create mode 100644 components/net/uip/apps/dhcpc/Makefile.dhcpc create mode 100644 components/net/uip/apps/dhcpc/dhcpc.c create mode 100644 components/net/uip/apps/dhcpc/dhcpc.h create mode 100644 components/net/uip/apps/hello-world/Makefile.hello-world create mode 100644 components/net/uip/apps/hello-world/hello-world.c create mode 100644 components/net/uip/apps/hello-world/hello-world.h create mode 100644 components/net/uip/apps/resolv/Makefile.resolv create mode 100644 components/net/uip/apps/resolv/resolv.c create mode 100644 components/net/uip/apps/resolv/resolv.h create mode 100644 components/net/uip/apps/smtp/Makefile.smtp create mode 100644 components/net/uip/apps/smtp/makestrings create mode 100644 components/net/uip/apps/smtp/smtp-strings create mode 100644 components/net/uip/apps/smtp/smtp-strings.c create mode 100644 components/net/uip/apps/smtp/smtp-strings.h create mode 100644 components/net/uip/apps/smtp/smtp.c create mode 100644 components/net/uip/apps/smtp/smtp.h create mode 100644 components/net/uip/apps/telnetd/Makefile.telnetd create mode 100644 components/net/uip/apps/telnetd/telnetd.c create mode 100644 components/net/uip/apps/telnetd/telnetd.h create mode 100644 components/net/uip/apps/telnetd/uip_shell.c create mode 100644 components/net/uip/apps/telnetd/uip_shell.h create mode 100644 components/net/uip/apps/webclient/Makefile.webclient create mode 100644 components/net/uip/apps/webclient/makestrings create mode 100644 components/net/uip/apps/webclient/webclient-strings create mode 100644 components/net/uip/apps/webclient/webclient-strings.c create mode 100644 components/net/uip/apps/webclient/webclient-strings.h create mode 100644 components/net/uip/apps/webclient/webclient.c create mode 100644 components/net/uip/apps/webclient/webclient.h create mode 100644 components/net/uip/apps/webserver/Makefile.webserver create mode 100644 components/net/uip/apps/webserver/http-strings create mode 100644 components/net/uip/apps/webserver/http-strings.c create mode 100644 components/net/uip/apps/webserver/http-strings.h create mode 100644 components/net/uip/apps/webserver/httpd-cgi.c create mode 100644 components/net/uip/apps/webserver/httpd-cgi.h create mode 100644 components/net/uip/apps/webserver/httpd-fs.c create mode 100644 components/net/uip/apps/webserver/httpd-fs.h create mode 100644 components/net/uip/apps/webserver/httpd-fs/404.html create mode 100644 components/net/uip/apps/webserver/httpd-fs/fade.png create mode 100644 components/net/uip/apps/webserver/httpd-fs/files.shtml create mode 100644 components/net/uip/apps/webserver/httpd-fs/footer.html create mode 100644 components/net/uip/apps/webserver/httpd-fs/header.html create mode 100644 components/net/uip/apps/webserver/httpd-fs/index.html create mode 100644 components/net/uip/apps/webserver/httpd-fs/processes.shtml create mode 100644 components/net/uip/apps/webserver/httpd-fs/stats.shtml create mode 100644 components/net/uip/apps/webserver/httpd-fs/style.css create mode 100644 components/net/uip/apps/webserver/httpd-fs/tcp.shtml create mode 100644 components/net/uip/apps/webserver/httpd-fsdata.c create mode 100644 components/net/uip/apps/webserver/httpd-fsdata.h create mode 100644 components/net/uip/apps/webserver/httpd.c create mode 100644 components/net/uip/apps/webserver/httpd.h create mode 100644 components/net/uip/apps/webserver/makefsdata create mode 100644 components/net/uip/apps/webserver/makestrings create mode 100644 components/net/uip/apps/webserver/webserver.h create mode 100644 components/net/uip/doc/Doxyfile create mode 100644 components/net/uip/doc/Makefile create mode 100644 components/net/uip/doc/README create mode 100644 components/net/uip/doc/doxygen.sty create mode 100644 components/net/uip/doc/example-mainloop-with-arp.c create mode 100644 components/net/uip/doc/example-mainloop-without-arp.c create mode 100644 components/net/uip/doc/examples.txt create mode 100644 components/net/uip/doc/header.tex create mode 100644 components/net/uip/doc/html/a00036.html create mode 100644 components/net/uip/doc/html/a00037.html create mode 100644 components/net/uip/doc/html/a00038.html create mode 100644 components/net/uip/doc/html/a00039.html create mode 100644 components/net/uip/doc/html/a00040.html create mode 100644 components/net/uip/doc/html/a00041.html create mode 100644 components/net/uip/doc/html/a00042.html create mode 100644 components/net/uip/doc/html/a00043.html create mode 100644 components/net/uip/doc/html/a00044.html create mode 100644 components/net/uip/doc/html/a00045.html create mode 100644 components/net/uip/doc/html/a00046.html create mode 100644 components/net/uip/doc/html/a00047.html create mode 100644 components/net/uip/doc/html/a00048.html create mode 100644 components/net/uip/doc/html/a00049.html create mode 100644 components/net/uip/doc/html/a00050.html create mode 100644 components/net/uip/doc/html/a00051.html create mode 100644 components/net/uip/doc/html/a00077.html create mode 100644 components/net/uip/doc/html/a00078.html create mode 100644 components/net/uip/doc/html/a00079.html create mode 100644 components/net/uip/doc/html/a00080.html create mode 100644 components/net/uip/doc/html/a00081.html create mode 100644 components/net/uip/doc/html/a00082.html create mode 100644 components/net/uip/doc/html/a00083.html create mode 100644 components/net/uip/doc/html/a00084.html create mode 100644 components/net/uip/doc/html/a00085.html create mode 100644 components/net/uip/doc/html/a00086.html create mode 100644 components/net/uip/doc/html/a00087.html create mode 100644 components/net/uip/doc/html/a00088.html create mode 100644 components/net/uip/doc/html/a00089.html create mode 100644 components/net/uip/doc/html/a00090.html create mode 100644 components/net/uip/doc/html/a00091.html create mode 100644 components/net/uip/doc/html/a00092.html create mode 100644 components/net/uip/doc/html/a00093.html create mode 100644 components/net/uip/doc/html/a00094.html create mode 100644 components/net/uip/doc/html/a00095.html create mode 100644 components/net/uip/doc/html/a00096.html create mode 100644 components/net/uip/doc/html/a00097.html create mode 100644 components/net/uip/doc/html/a00100.html create mode 100644 components/net/uip/doc/html/a00101.html create mode 100644 components/net/uip/doc/html/a00102.html create mode 100644 components/net/uip/doc/html/a00103.html create mode 100644 components/net/uip/doc/html/a00104.html create mode 100644 components/net/uip/doc/html/a00105.html create mode 100644 components/net/uip/doc/html/a00107.html create mode 100644 components/net/uip/doc/html/a00110.html create mode 100644 components/net/uip/doc/html/a00111.html create mode 100644 components/net/uip/doc/html/a00112.html create mode 100644 components/net/uip/doc/html/a00113.html create mode 100644 components/net/uip/doc/html/a00114.html create mode 100644 components/net/uip/doc/html/a00120.html create mode 100644 components/net/uip/doc/html/a00121.html create mode 100644 components/net/uip/doc/html/a00123.html create mode 100644 components/net/uip/doc/html/a00124.html create mode 100644 components/net/uip/doc/html/a00125.html create mode 100644 components/net/uip/doc/html/a00127.html create mode 100644 components/net/uip/doc/html/a00128.html create mode 100644 components/net/uip/doc/html/a00129.html create mode 100644 components/net/uip/doc/html/a00130.html create mode 100644 components/net/uip/doc/html/a00131.html create mode 100644 components/net/uip/doc/html/a00132.html create mode 100644 components/net/uip/doc/html/a00134.html create mode 100644 components/net/uip/doc/html/a00135.html create mode 100644 components/net/uip/doc/html/a00136.html create mode 100644 components/net/uip/doc/html/a00137.html create mode 100644 components/net/uip/doc/html/a00138.html create mode 100644 components/net/uip/doc/html/a00139.html create mode 100644 components/net/uip/doc/html/a00140.html create mode 100644 components/net/uip/doc/html/a00141.html create mode 100644 components/net/uip/doc/html/a00142.html create mode 100644 components/net/uip/doc/html/a00143.html create mode 100644 components/net/uip/doc/html/a00144.html create mode 100644 components/net/uip/doc/html/a00145.html create mode 100644 components/net/uip/doc/html/a00146.html create mode 100644 components/net/uip/doc/html/a00147.html create mode 100644 components/net/uip/doc/html/a00148.html create mode 100644 components/net/uip/doc/html/a00149.html create mode 100644 components/net/uip/doc/html/a00150.html create mode 100644 components/net/uip/doc/html/a00151.html create mode 100644 components/net/uip/doc/html/a00152.html create mode 100644 components/net/uip/doc/html/a00153.html create mode 100644 components/net/uip/doc/html/a00154.html create mode 100644 components/net/uip/doc/html/a00155.html create mode 100644 components/net/uip/doc/html/a00156.html create mode 100644 components/net/uip/doc/html/a00157.html create mode 100644 components/net/uip/doc/html/a00158.html create mode 100644 components/net/uip/doc/html/a00159.html create mode 100644 components/net/uip/doc/html/a00160.html create mode 100644 components/net/uip/doc/html/a00161.html create mode 100644 components/net/uip/doc/html/a00162.html create mode 100644 components/net/uip/doc/html/a00163.html create mode 100644 components/net/uip/doc/html/a00164.html create mode 100644 components/net/uip/doc/html/a00168.html create mode 100644 components/net/uip/doc/html/a00169.html create mode 100644 components/net/uip/doc/html/a00170.html create mode 100644 components/net/uip/doc/html/a00171.html create mode 100644 components/net/uip/doc/html/a00172.html create mode 100644 components/net/uip/doc/html/a00173.html create mode 100644 components/net/uip/doc/html/a00174.html create mode 100644 components/net/uip/doc/html/a00175.html create mode 100644 components/net/uip/doc/html/a00176.html create mode 100644 components/net/uip/doc/html/a00177.html create mode 100644 components/net/uip/doc/html/a00178.html create mode 100644 components/net/uip/doc/html/a00179.html create mode 100644 components/net/uip/doc/html/a00180.html create mode 100644 components/net/uip/doc/html/a00181.html create mode 100644 components/net/uip/doc/html/a00182.html create mode 100644 components/net/uip/doc/html/a00183.html create mode 100644 components/net/uip/doc/html/a00184.html create mode 100644 components/net/uip/doc/html/a00185.html create mode 100644 components/net/uip/doc/html/a00186.html create mode 100644 components/net/uip/doc/html/a00187.html create mode 100644 components/net/uip/doc/html/a00188.html create mode 100644 components/net/uip/doc/html/a00189.html create mode 100644 components/net/uip/doc/html/a00190.html create mode 100644 components/net/uip/doc/html/a00191.html create mode 100644 components/net/uip/doc/html/a00192.html create mode 100644 components/net/uip/doc/html/a00193.html create mode 100644 components/net/uip/doc/html/a00194.html create mode 100644 components/net/uip/doc/html/a00195.html create mode 100644 components/net/uip/doc/html/a00196.html create mode 100644 components/net/uip/doc/html/a00197.html create mode 100644 components/net/uip/doc/html/a00198.html create mode 100644 components/net/uip/doc/html/a00199.html create mode 100644 components/net/uip/doc/html/a00200.html create mode 100644 components/net/uip/doc/html/a00201.html create mode 100644 components/net/uip/doc/html/a00202.html create mode 100644 components/net/uip/doc/html/a00203.html create mode 100644 components/net/uip/doc/html/a00204.html create mode 100644 components/net/uip/doc/html/a00205.html create mode 100644 components/net/uip/doc/html/a00206.html create mode 100644 components/net/uip/doc/html/a00207.html create mode 100644 components/net/uip/doc/html/annotated.html create mode 100644 components/net/uip/doc/html/classes.html create mode 100644 components/net/uip/doc/html/doxygen.css create mode 100644 components/net/uip/doc/html/doxygen.png create mode 100644 components/net/uip/doc/html/examples.html create mode 100644 components/net/uip/doc/html/files.html create mode 100644 components/net/uip/doc/html/ftv2blank.png create mode 100644 components/net/uip/doc/html/ftv2doc.png create mode 100644 components/net/uip/doc/html/ftv2folderclosed.png create mode 100644 components/net/uip/doc/html/ftv2folderopen.png create mode 100644 components/net/uip/doc/html/ftv2lastnode.png create mode 100644 components/net/uip/doc/html/ftv2link.png create mode 100644 components/net/uip/doc/html/ftv2mlastnode.png create mode 100644 components/net/uip/doc/html/ftv2mnode.png create mode 100644 components/net/uip/doc/html/ftv2node.png create mode 100644 components/net/uip/doc/html/ftv2plastnode.png create mode 100644 components/net/uip/doc/html/ftv2pnode.png create mode 100644 components/net/uip/doc/html/ftv2vertline.png create mode 100644 components/net/uip/doc/html/functions.html create mode 100644 components/net/uip/doc/html/functions_vars.html create mode 100644 components/net/uip/doc/html/globals.html create mode 100644 components/net/uip/doc/html/globals_0x61.html create mode 100644 components/net/uip/doc/html/globals_0x62.html create mode 100644 components/net/uip/doc/html/globals_0x64.html create mode 100644 components/net/uip/doc/html/globals_0x65.html create mode 100644 components/net/uip/doc/html/globals_0x66.html create mode 100644 components/net/uip/doc/html/globals_0x68.html create mode 100644 components/net/uip/doc/html/globals_0x69.html create mode 100644 components/net/uip/doc/html/globals_0x6c.html create mode 100644 components/net/uip/doc/html/globals_0x6d.html create mode 100644 components/net/uip/doc/html/globals_0x6e.html create mode 100644 components/net/uip/doc/html/globals_0x70.html create mode 100644 components/net/uip/doc/html/globals_0x72.html create mode 100644 components/net/uip/doc/html/globals_0x73.html create mode 100644 components/net/uip/doc/html/globals_0x74.html create mode 100644 components/net/uip/doc/html/globals_0x75.html create mode 100644 components/net/uip/doc/html/globals_0x77.html create mode 100644 components/net/uip/doc/html/globals_defs.html create mode 100644 components/net/uip/doc/html/globals_defs_0x61.html create mode 100644 components/net/uip/doc/html/globals_defs_0x62.html create mode 100644 components/net/uip/doc/html/globals_defs_0x64.html create mode 100644 components/net/uip/doc/html/globals_defs_0x65.html create mode 100644 components/net/uip/doc/html/globals_defs_0x66.html create mode 100644 components/net/uip/doc/html/globals_defs_0x68.html create mode 100644 components/net/uip/doc/html/globals_defs_0x69.html create mode 100644 components/net/uip/doc/html/globals_defs_0x6c.html create mode 100644 components/net/uip/doc/html/globals_defs_0x6d.html create mode 100644 components/net/uip/doc/html/globals_defs_0x6e.html create mode 100644 components/net/uip/doc/html/globals_defs_0x70.html create mode 100644 components/net/uip/doc/html/globals_defs_0x72.html create mode 100644 components/net/uip/doc/html/globals_defs_0x73.html create mode 100644 components/net/uip/doc/html/globals_defs_0x74.html create mode 100644 components/net/uip/doc/html/globals_defs_0x75.html create mode 100644 components/net/uip/doc/html/globals_defs_0x77.html create mode 100644 components/net/uip/doc/html/globals_func.html create mode 100644 components/net/uip/doc/html/globals_type.html create mode 100644 components/net/uip/doc/html/globals_vars.html create mode 100644 components/net/uip/doc/html/hierarchy.html create mode 100644 components/net/uip/doc/html/index.hhc create mode 100644 components/net/uip/doc/html/index.hhk create mode 100644 components/net/uip/doc/html/index.hhp create mode 100644 components/net/uip/doc/html/index.html create mode 100644 components/net/uip/doc/html/main.html create mode 100644 components/net/uip/doc/html/modules.html create mode 100644 components/net/uip/doc/html/tab_b.gif create mode 100644 components/net/uip/doc/html/tab_l.gif create mode 100644 components/net/uip/doc/html/tab_r.gif create mode 100644 components/net/uip/doc/html/tabs.css create mode 100644 components/net/uip/doc/html/tree.html create mode 100644 components/net/uip/doc/mobisys2003.pdf create mode 100644 components/net/uip/doc/pt-doc.txt create mode 100644 components/net/uip/doc/sicslogo.pdf create mode 100644 components/net/uip/doc/uip-code-style.c create mode 100644 components/net/uip/doc/uip-code-style.txt create mode 100644 components/net/uip/doc/uip-doc.txt create mode 100644 components/net/uip/doc/uip-refman.pdf create mode 100644 components/net/uip/lib/memb.c create mode 100644 components/net/uip/lib/memb.h create mode 100644 components/net/uip/rt-thread/clock-arch.c create mode 100644 components/net/uip/rt-thread/clock-arch.h create mode 100644 components/net/uip/rt-thread/readme.txt create mode 100644 components/net/uip/rt-thread/uIPmain.c create mode 100644 components/net/uip/rt-thread/uip-conf.h create mode 100644 components/net/uip/rt-thread/uip_addr.h create mode 100644 components/net/uip/rt-thread/uip_arch.c create mode 100644 components/net/uip/rt-thread/uip_eth.h create mode 100644 components/net/uip/rt-thread/uip_etharp.c create mode 100644 components/net/uip/rt-thread/uip_etharp.h create mode 100644 components/net/uip/rt-thread/uip_ethernetif.c create mode 100644 components/net/uip/rt-thread/uip_ethernetif.h create mode 100644 components/net/uip/rt-thread/uip_ipaddr.h create mode 100644 components/net/uip/rt-thread/uip_netif.c create mode 100644 components/net/uip/rt-thread/uip_netif.h create mode 100644 components/net/uip/rt-thread/uip_pbuf.c create mode 100644 components/net/uip/rt-thread/uip_pbuf.h create mode 100644 components/net/uip/rt-thread/uip_tcpip.c create mode 100644 components/net/uip/uip-1.0-changelog.txt create mode 100644 components/net/uip/uip/Makefile.include create mode 100644 components/net/uip/uip/lc-addrlabels.h create mode 100644 components/net/uip/uip/lc-switch.h create mode 100644 components/net/uip/uip/lc.h create mode 100644 components/net/uip/uip/psock.c create mode 100644 components/net/uip/uip/psock.h create mode 100644 components/net/uip/uip/pt.h create mode 100644 components/net/uip/uip/uip-fw.c create mode 100644 components/net/uip/uip/uip-fw.h create mode 100644 components/net/uip/uip/uip-neighbor.c create mode 100644 components/net/uip/uip/uip-neighbor.h create mode 100644 components/net/uip/uip/uip-split.c create mode 100644 components/net/uip/uip/uip-split.h create mode 100644 components/net/uip/uip/uip.c create mode 100644 components/net/uip/uip/uip.h create mode 100644 components/net/uip/uip/uip_arch.h create mode 100644 components/net/uip/uip/uip_arp.c create mode 100644 components/net/uip/uip/uip_arp.h create mode 100644 components/net/uip/uip/uip_clock.h create mode 100644 components/net/uip/uip/uip_timer.c create mode 100644 components/net/uip/uip/uip_timer.h create mode 100644 components/net/uip/uip/uiplib.c create mode 100644 components/net/uip/uip/uiplib.h create mode 100644 components/net/uip/uip/uipopt.h create mode 100644 components/net/uip/unix/Makefile create mode 100644 components/net/uip/unix/clock-arch.c create mode 100644 components/net/uip/unix/clock-arch.h create mode 100644 components/net/uip/unix/main.c create mode 100644 components/net/uip/unix/tapdev.c create mode 100644 components/net/uip/unix/tapdev.h create mode 100644 components/net/uip/unix/uip-conf.h diff --git a/components/net/uip/README b/components/net/uip/README new file mode 100644 index 0000000000..b501538678 --- /dev/null +++ b/components/net/uip/README @@ -0,0 +1,13 @@ +uIP is a very small implementation of the TCP/IP stack that is written +by Adam Dunkels . More information can be obtained +at the uIP homepage at http://www.sics.se/~adam/uip/. + +This is version $Name: uip-1-0 $. + +The directory structure look as follows: + +apps/ - Example applications +doc/ - Documentation +lib/ - Library code used by some applications +uip/ - uIP TCP/IP stack code +unix/ - uIP as a user space process under FreeBSD or Linux diff --git a/components/net/uip/apps/README b/components/net/uip/apps/README new file mode 100644 index 0000000000..0096c4e4fd --- /dev/null +++ b/components/net/uip/apps/README @@ -0,0 +1,2 @@ +This directory contains a few example applications. They are not all +heavily tested, however. diff --git a/components/net/uip/apps/dhcpc/Makefile.dhcpc b/components/net/uip/apps/dhcpc/Makefile.dhcpc new file mode 100644 index 0000000000..f84c84ff46 --- /dev/null +++ b/components/net/uip/apps/dhcpc/Makefile.dhcpc @@ -0,0 +1 @@ +APP_SOURCES += dhcpc.c timer.c diff --git a/components/net/uip/apps/dhcpc/dhcpc.c b/components/net/uip/apps/dhcpc/dhcpc.c new file mode 100644 index 0000000000..ac738e7e24 --- /dev/null +++ b/components/net/uip/apps/dhcpc/dhcpc.c @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2005, Swedish Institute of Computer Science + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + */ + +#include +#include + +#include "uip.h" +#include "dhcpc.h" +#include "timer.h" +#include "pt.h" + +#define STATE_INITIAL 0 +#define STATE_SENDING 1 +#define STATE_OFFER_RECEIVED 2 +#define STATE_CONFIG_RECEIVED 3 + +static struct dhcpc_state s; + +struct dhcp_msg { + u8_t op, htype, hlen, hops; + u8_t xid[4]; + u16_t secs, flags; + u8_t ciaddr[4]; + u8_t yiaddr[4]; + u8_t siaddr[4]; + u8_t giaddr[4]; + u8_t chaddr[16]; +#ifndef UIP_CONF_DHCP_LIGHT + u8_t sname[64]; + u8_t file[128]; +#endif + u8_t options[312]; +}; + +#define BOOTP_BROADCAST 0x8000 + +#define DHCP_REQUEST 1 +#define DHCP_REPLY 2 +#define DHCP_HTYPE_ETHERNET 1 +#define DHCP_HLEN_ETHERNET 6 +#define DHCP_MSG_LEN 236 + +#define DHCPC_SERVER_PORT 67 +#define DHCPC_CLIENT_PORT 68 + +#define DHCPDISCOVER 1 +#define DHCPOFFER 2 +#define DHCPREQUEST 3 +#define DHCPDECLINE 4 +#define DHCPACK 5 +#define DHCPNAK 6 +#define DHCPRELEASE 7 + +#define DHCP_OPTION_SUBNET_MASK 1 +#define DHCP_OPTION_ROUTER 3 +#define DHCP_OPTION_DNS_SERVER 6 +#define DHCP_OPTION_REQ_IPADDR 50 +#define DHCP_OPTION_LEASE_TIME 51 +#define DHCP_OPTION_MSG_TYPE 53 +#define DHCP_OPTION_SERVER_ID 54 +#define DHCP_OPTION_REQ_LIST 55 +#define DHCP_OPTION_END 255 + +static const u8_t xid[4] = {0xad, 0xde, 0x12, 0x23}; +static const u8_t magic_cookie[4] = {99, 130, 83, 99}; +/*---------------------------------------------------------------------------*/ +static u8_t * +add_msg_type(u8_t *optptr, u8_t type) +{ + *optptr++ = DHCP_OPTION_MSG_TYPE; + *optptr++ = 1; + *optptr++ = type; + return optptr; +} +/*---------------------------------------------------------------------------*/ +static u8_t * +add_server_id(u8_t *optptr) +{ + *optptr++ = DHCP_OPTION_SERVER_ID; + *optptr++ = 4; + memcpy(optptr, s.serverid, 4); + return optptr + 4; +} +/*---------------------------------------------------------------------------*/ +static u8_t * +add_req_ipaddr(u8_t *optptr) +{ + *optptr++ = DHCP_OPTION_REQ_IPADDR; + *optptr++ = 4; + memcpy(optptr, s.ipaddr, 4); + return optptr + 4; +} +/*---------------------------------------------------------------------------*/ +static u8_t * +add_req_options(u8_t *optptr) +{ + *optptr++ = DHCP_OPTION_REQ_LIST; + *optptr++ = 3; + *optptr++ = DHCP_OPTION_SUBNET_MASK; + *optptr++ = DHCP_OPTION_ROUTER; + *optptr++ = DHCP_OPTION_DNS_SERVER; + return optptr; +} +/*---------------------------------------------------------------------------*/ +static u8_t * +add_end(u8_t *optptr) +{ + *optptr++ = DHCP_OPTION_END; + return optptr; +} +/*---------------------------------------------------------------------------*/ +static void +create_msg(register struct dhcp_msg *m) +{ + m->op = DHCP_REQUEST; + m->htype = DHCP_HTYPE_ETHERNET; + m->hlen = s.mac_len; + m->hops = 0; + memcpy(m->xid, xid, sizeof(m->xid)); + m->secs = 0; + m->flags = HTONS(BOOTP_BROADCAST); /* Broadcast bit. */ + /* uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/ + memcpy(m->ciaddr, uip_hostaddr, sizeof(m->ciaddr)); + memset(m->yiaddr, 0, sizeof(m->yiaddr)); + memset(m->siaddr, 0, sizeof(m->siaddr)); + memset(m->giaddr, 0, sizeof(m->giaddr)); + memcpy(m->chaddr, s.mac_addr, s.mac_len); + memset(&m->chaddr[s.mac_len], 0, sizeof(m->chaddr) - s.mac_len); +#ifndef UIP_CONF_DHCP_LIGHT + memset(m->sname, 0, sizeof(m->sname)); + memset(m->file, 0, sizeof(m->file)); +#endif + + memcpy(m->options, magic_cookie, sizeof(magic_cookie)); +} +/*---------------------------------------------------------------------------*/ +static void +send_discover(void) +{ + u8_t *end; + struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata; + + create_msg(m); + + end = add_msg_type(&m->options[4], DHCPDISCOVER); + end = add_req_options(end); + end = add_end(end); + + uip_send(uip_appdata, end - (u8_t *)uip_appdata); +} +/*---------------------------------------------------------------------------*/ +static void +send_request(void) +{ + u8_t *end; + struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata; + + create_msg(m); + + end = add_msg_type(&m->options[4], DHCPREQUEST); + end = add_server_id(end); + end = add_req_ipaddr(end); + end = add_end(end); + + uip_send(uip_appdata, end - (u8_t *)uip_appdata); +} +/*---------------------------------------------------------------------------*/ +static u8_t +parse_options(u8_t *optptr, int len) +{ + u8_t *end = optptr + len; + u8_t type = 0; + + while(optptr < end) { + switch(*optptr) { + case DHCP_OPTION_SUBNET_MASK: + memcpy(s.netmask, optptr + 2, 4); + break; + case DHCP_OPTION_ROUTER: + memcpy(s.default_router, optptr + 2, 4); + break; + case DHCP_OPTION_DNS_SERVER: + memcpy(s.dnsaddr, optptr + 2, 4); + break; + case DHCP_OPTION_MSG_TYPE: + type = *(optptr + 2); + break; + case DHCP_OPTION_SERVER_ID: + memcpy(s.serverid, optptr + 2, 4); + break; + case DHCP_OPTION_LEASE_TIME: + memcpy(s.lease_time, optptr + 2, 4); + break; + case DHCP_OPTION_END: + return type; + } + + optptr += optptr[1] + 2; + } + return type; +} +/*---------------------------------------------------------------------------*/ +static u8_t +parse_msg(void) +{ + struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata; + + if(m->op == DHCP_REPLY && + memcmp(m->xid, xid, sizeof(xid)) == 0 && + memcmp(m->chaddr, s.mac_addr, s.mac_len) == 0) { + memcpy(s.ipaddr, m->yiaddr, 4); + return parse_options(&m->options[4], uip_datalen()); + } + return 0; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_dhcp(void)) +{ + PT_BEGIN(&s.pt); + + /* try_again:*/ + s.state = STATE_SENDING; + s.ticks = CLOCK_SECOND; + + do { + send_discover(); + timer_set(&s.timer, s.ticks); + PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer)); + + if(uip_newdata() && parse_msg() == DHCPOFFER) { + s.state = STATE_OFFER_RECEIVED; + break; + } + + if(s.ticks < CLOCK_SECOND * 60) { + s.ticks *= 2; + } + } while(s.state != STATE_OFFER_RECEIVED); + + s.ticks = CLOCK_SECOND; + + do { + send_request(); + timer_set(&s.timer, s.ticks); + PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer)); + + if(uip_newdata() && parse_msg() == DHCPACK) { + s.state = STATE_CONFIG_RECEIVED; + break; + } + + if(s.ticks <= CLOCK_SECOND * 10) { + s.ticks += CLOCK_SECOND; + } else { + PT_RESTART(&s.pt); + } + } while(s.state != STATE_CONFIG_RECEIVED); + +#if 0 + printf("Got IP address %d.%d.%d.%d\n", + uip_ipaddr1(s.ipaddr), uip_ipaddr2(s.ipaddr), + uip_ipaddr3(s.ipaddr), uip_ipaddr4(s.ipaddr)); + printf("Got netmask %d.%d.%d.%d\n", + uip_ipaddr1(s.netmask), uip_ipaddr2(s.netmask), + uip_ipaddr3(s.netmask), uip_ipaddr4(s.netmask)); + printf("Got DNS server %d.%d.%d.%d\n", + uip_ipaddr1(s.dnsaddr), uip_ipaddr2(s.dnsaddr), + uip_ipaddr3(s.dnsaddr), uip_ipaddr4(s.dnsaddr)); + printf("Got default router %d.%d.%d.%d\n", + uip_ipaddr1(s.default_router), uip_ipaddr2(s.default_router), + uip_ipaddr3(s.default_router), uip_ipaddr4(s.default_router)); + printf("Lease expires in %ld seconds\n", + ntohs(s.lease_time[0])*65536ul + ntohs(s.lease_time[1])); +#endif + + dhcpc_configured(&s); + + /* timer_stop(&s.timer);*/ + + /* + * PT_END restarts the thread so we do this instead. Eventually we + * should reacquire expired leases here. + */ + while(1) { + PT_YIELD(&s.pt); + } + + PT_END(&s.pt); +} +/*---------------------------------------------------------------------------*/ +void +dhcpc_init(const void *mac_addr, int mac_len) +{ + uip_ipaddr_t addr; + + s.mac_addr = mac_addr; + s.mac_len = mac_len; + + s.state = STATE_INITIAL; + uip_ipaddr(addr, 255,255,255,255); + s.conn = uip_udp_new(&addr, HTONS(DHCPC_SERVER_PORT)); + if(s.conn != NULL) { + uip_udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT)); + } + PT_INIT(&s.pt); +} +/*---------------------------------------------------------------------------*/ +void +dhcpc_appcall(void) +{ + handle_dhcp(); +} +/*---------------------------------------------------------------------------*/ +void +dhcpc_request(void) +{ + u16_t ipaddr[2]; + + if(s.state == STATE_INITIAL) { + uip_ipaddr(ipaddr, 0,0,0,0); + uip_sethostaddr(ipaddr); + /* handle_dhcp(PROCESS_EVENT_NONE, NULL);*/ + } +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/dhcpc/dhcpc.h b/components/net/uip/apps/dhcpc/dhcpc.h new file mode 100644 index 0000000000..c6550ec586 --- /dev/null +++ b/components/net/uip/apps/dhcpc/dhcpc.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2005, Swedish Institute of Computer Science + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $ + */ +#ifndef __DHCPC_H__ +#define __DHCPC_H__ + +#include "timer.h" +#include "pt.h" + +struct dhcpc_state { + struct pt pt; + char state; + struct uip_udp_conn *conn; + struct timer timer; + u16_t ticks; + const void *mac_addr; + int mac_len; + + u8_t serverid[4]; + + u16_t lease_time[2]; + u16_t ipaddr[2]; + u16_t netmask[2]; + u16_t dnsaddr[2]; + u16_t default_router[2]; +}; + +void dhcpc_init(const void *mac_addr, int mac_len); +void dhcpc_request(void); + +void dhcpc_appcall(void); + +void dhcpc_configured(const struct dhcpc_state *s); + +typedef struct dhcpc_state uip_udp_appstate_t; +#define UIP_UDP_APPCALL dhcpc_appcall + + +#endif /* __DHCPC_H__ */ diff --git a/components/net/uip/apps/hello-world/Makefile.hello-world b/components/net/uip/apps/hello-world/Makefile.hello-world new file mode 100644 index 0000000000..e34aaf51ab --- /dev/null +++ b/components/net/uip/apps/hello-world/Makefile.hello-world @@ -0,0 +1 @@ +APP_SOURCES += hello-world.c diff --git a/components/net/uip/apps/hello-world/hello-world.c b/components/net/uip/apps/hello-world/hello-world.c new file mode 100644 index 0000000000..508326bd49 --- /dev/null +++ b/components/net/uip/apps/hello-world/hello-world.c @@ -0,0 +1,115 @@ +/** + * \addtogroup helloworld + * @{ + */ + +/** + * \file + * An example of how to write uIP applications + * with protosockets. + * \author + * Adam Dunkels + */ + +/* + * This is a short example of how to write uIP applications using + * protosockets. + */ + +/* + * We define the application state (struct hello_world_state) in the + * hello-world.h file, so we need to include it here. We also include + * uip.h (since this cannot be included in hello-world.h) and + * , since we use the memcpy() function in the code. + */ +#include "hello-world.h" +#include "uip.h" +#include + +/* + * Declaration of the protosocket function that handles the connection + * (defined at the end of the code). + */ +static int handle_connection(struct hello_world_state *s); +static int rt_show_info(struct hello_world_state *s); +/*---------------------------------------------------------------------------*/ +/* + * The initialization function. We must explicitly call this function + * from the system initialization code, some time after uip_init() is + * called. + */ +void +hello_world_init(void) +{ + /* We start to listen for connections on TCP port 1000. */ + uip_listen(HTONS(1000)); +} +/*---------------------------------------------------------------------------*/ +/* + * In hello-world.h we have defined the UIP_APPCALL macro to + * hello_world_appcall so that this funcion is uIP's application + * function. This function is called whenever an uIP event occurs + * (e.g. when a new connection is established, new data arrives, sent + * data is acknowledged, data needs to be retransmitted, etc.). + */ +void +hello_world_appcall(void) +{ + /* + * The uip_conn structure has a field called "appstate" that holds + * the application state of the connection. We make a pointer to + * this to access it easier. + */ + struct hello_world_state *s = &(uip_conn->appstate); + + /* + * If a new connection was just established, we should initialize + * the protosocket in our applications' state structure. + */ + if(uip_connected()) { + PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer)); + rt_show_info(s); + } + + /* + * Finally, we run the protosocket function that actually handles + * the communication. We pass it a pointer to the application state + * of the current connection. + */ + handle_connection(s); +} +/*---------------------------------------------------------------------------*/ +/* + * This is the protosocket function that handles the communication. A + * protosocket function must always return an int, but must never + * explicitly return - all return statements are hidden in the PSOCK + * macros. + */ +static int rt_show_info(struct hello_world_state *s) +{ + PSOCK_BEGIN(&s->p); + PSOCK_SEND_STR(&s->p,"RT-Thread RTOS"); + PSOCK_READTO(&s->p, '\n'); + PSOCK_END(&s->p); + +} +static int +handle_connection(struct hello_world_state *s) +{ + int i; + for (i=0;iname[i] = 0; + s->inputbuffer[i] = 0; + } + PSOCK_BEGIN(&s->p); + //PSOCK_SEND_STR(&s->p, "Hello. What is your name?\n"); + PSOCK_READTO(&s->p, '\n'); + strncpy(s->name, s->inputbuffer, sizeof(s->name)); + //PSOCK_SEND_STR(&s->p, "Hello "); + PSOCK_SEND_STR(&s->p, s->name); + //PSOCK_CLOSE(&s->p); + + PSOCK_END(&s->p); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/hello-world/hello-world.h b/components/net/uip/apps/hello-world/hello-world.h new file mode 100644 index 0000000000..102410a9b7 --- /dev/null +++ b/components/net/uip/apps/hello-world/hello-world.h @@ -0,0 +1,53 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup helloworld Hello, world + * @{ + * + * A small example showing how to write applications with + * \ref psock "protosockets". + */ + +/** + * \file + * Header file for an example of how to write uIP applications + * with protosockets. + * \author + * Adam Dunkels + */ + +#ifndef __HELLO_WORLD_H__ +#define __HELLO_WORLD_H__ + +/* Since this file will be included by uip.h, we cannot include uip.h + here. But we might need to include uipopt.h if we need the u8_t and + u16_t datatypes. */ +#include "uipopt.h" + +#include "psock.h" + +/* Next, we define the uip_tcp_appstate_t datatype. This is the state + of our application, and the memory required for this state is + allocated together with each TCP connection. One application state + for each TCP connection. */ +#define BUF_SIZE 200 +typedef struct hello_world_state { + struct psock p; + char inputbuffer[BUF_SIZE]; + char name[BUF_SIZE]; +} uip_tcp_appstate_t; + +/* Finally we define the application function to be called by uIP. */ +void hello_world_appcall(void); +#ifndef UIP_APPCALL +#define UIP_APPCALL hello_world_appcall +#endif /* UIP_APPCALL */ + +void hello_world_init(void); + +#endif /* __HELLO_WORLD_H__ */ +/** @} */ +/** @} */ diff --git a/components/net/uip/apps/resolv/Makefile.resolv b/components/net/uip/apps/resolv/Makefile.resolv new file mode 100644 index 0000000000..94c37d8c86 --- /dev/null +++ b/components/net/uip/apps/resolv/Makefile.resolv @@ -0,0 +1 @@ +APP_SOURCES += resolv.c diff --git a/components/net/uip/apps/resolv/resolv.c b/components/net/uip/apps/resolv/resolv.c new file mode 100644 index 0000000000..8afbca6c55 --- /dev/null +++ b/components/net/uip/apps/resolv/resolv.c @@ -0,0 +1,464 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup resolv DNS resolver + * @{ + * + * The uIP DNS resolver functions are used to lookup a hostname and + * map it to a numerical IP address. It maintains a list of resolved + * hostnames that can be queried with the resolv_lookup() + * function. New hostnames can be resolved using the resolv_query() + * function. + * + * When a hostname has been resolved (or found to be non-existant), + * the resolver code calls a callback function called resolv_found() + * that must be implemented by the module that uses the resolver. + */ + +/** + * \file + * DNS host name to IP address resolver. + * \author Adam Dunkels + * + * This file implements a DNS host name to IP address resolver. + */ + +/* + * Copyright (c) 2002-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: resolv.c,v 1.5 2006/06/11 21:46:37 adam Exp $ + * + */ + +#include "resolv.h" +#include "uip.h" + +#include + +#ifndef NULL +#define NULL (void *)0 +#endif /* NULL */ + +/** \internal The maximum number of retries when asking for a name. */ +#define MAX_RETRIES 8 + +/** \internal The DNS message header. */ +struct dns_hdr { + u16_t id; + u8_t flags1, flags2; +#define DNS_FLAG1_RESPONSE 0x80 +#define DNS_FLAG1_OPCODE_STATUS 0x10 +#define DNS_FLAG1_OPCODE_INVERSE 0x08 +#define DNS_FLAG1_OPCODE_STANDARD 0x00 +#define DNS_FLAG1_AUTHORATIVE 0x04 +#define DNS_FLAG1_TRUNC 0x02 +#define DNS_FLAG1_RD 0x01 +#define DNS_FLAG2_RA 0x80 +#define DNS_FLAG2_ERR_MASK 0x0f +#define DNS_FLAG2_ERR_NONE 0x00 +#define DNS_FLAG2_ERR_NAME 0x03 + u16_t numquestions; + u16_t numanswers; + u16_t numauthrr; + u16_t numextrarr; +}; + +/** \internal The DNS answer message structure. */ +struct dns_answer { + /* DNS answer record starts with either a domain name or a pointer + to a name already present somewhere in the packet. */ + u16_t type; + u16_t class; + u16_t ttl[2]; + u16_t len; + uip_ipaddr_t ipaddr; +}; + +struct namemap { +#define STATE_UNUSED 0 +#define STATE_NEW 1 +#define STATE_ASKING 2 +#define STATE_DONE 3 +#define STATE_ERROR 4 + u8_t state; + u8_t tmr; + u8_t retries; + u8_t seqno; + u8_t err; + char name[32]; + uip_ipaddr_t ipaddr; +}; + +#ifndef UIP_CONF_RESOLV_ENTRIES +#define RESOLV_ENTRIES 4 +#else /* UIP_CONF_RESOLV_ENTRIES */ +#define RESOLV_ENTRIES UIP_CONF_RESOLV_ENTRIES +#endif /* UIP_CONF_RESOLV_ENTRIES */ + + +static struct namemap names[RESOLV_ENTRIES]; + +static u8_t seqno; + +static struct uip_udp_conn *resolv_conn = NULL; + + +/*---------------------------------------------------------------------------*/ +/** \internal + * Walk through a compact encoded DNS name and return the end of it. + * + * \return The end of the name. + */ +/*---------------------------------------------------------------------------*/ +static unsigned char * +parse_name(unsigned char *query) +{ + unsigned char n; + + do { + n = *query++; + + while(n > 0) { + /* printf("%c", *query);*/ + ++query; + --n; + }; + /* printf(".");*/ + } while(*query != 0); + /* printf("\n");*/ + return query + 1; +} +/*---------------------------------------------------------------------------*/ +/** \internal + * Runs through the list of names to see if there are any that have + * not yet been queried and, if so, sends out a query. + */ +/*---------------------------------------------------------------------------*/ +static void +check_entries(void) +{ + register struct dns_hdr *hdr; + char *query, *nptr, *nameptr; + static u8_t i; + static u8_t n; + register struct namemap *namemapptr; + + for(i = 0; i < RESOLV_ENTRIES; ++i) { + namemapptr = &names[i]; + if(namemapptr->state == STATE_NEW || + namemapptr->state == STATE_ASKING) { + if(namemapptr->state == STATE_ASKING) { + if(--namemapptr->tmr == 0) { + if(++namemapptr->retries == MAX_RETRIES) { + namemapptr->state = STATE_ERROR; + resolv_found(namemapptr->name, NULL); + continue; + } + namemapptr->tmr = namemapptr->retries; + } else { + /* printf("Timer %d\n", namemapptr->tmr);*/ + /* Its timer has not run out, so we move on to next + entry. */ + continue; + } + } else { + namemapptr->state = STATE_ASKING; + namemapptr->tmr = 1; + namemapptr->retries = 0; + } + hdr = (struct dns_hdr *)uip_appdata; + memset(hdr, 0, sizeof(struct dns_hdr)); + hdr->id = htons(i); + hdr->flags1 = DNS_FLAG1_RD; + hdr->numquestions = HTONS(1); + query = (char *)uip_appdata + 12; + nameptr = namemapptr->name; + --nameptr; + /* Convert hostname into suitable query format. */ + do { + ++nameptr; + nptr = query; + ++query; + for(n = 0; *nameptr != '.' && *nameptr != 0; ++nameptr) { + *query = *nameptr; + ++query; + ++n; + } + *nptr = n; + } while(*nameptr != 0); + { + static unsigned char endquery[] = + {0,0,1,0,1}; + memcpy(query, endquery, 5); + } + uip_udp_send((unsigned char)(query + 5 - (char *)uip_appdata)); + break; + } + } +} +/*---------------------------------------------------------------------------*/ +/** \internal + * Called when new UDP data arrives. + */ +/*---------------------------------------------------------------------------*/ +static void +newdata(void) +{ + char *nameptr; + struct dns_answer *ans; + struct dns_hdr *hdr; + static u8_t nquestions, nanswers; + static u8_t i; + register struct namemap *namemapptr; + + hdr = (struct dns_hdr *)uip_appdata; + /* printf("ID %d\n", htons(hdr->id)); + printf("Query %d\n", hdr->flags1 & DNS_FLAG1_RESPONSE); + printf("Error %d\n", hdr->flags2 & DNS_FLAG2_ERR_MASK); + printf("Num questions %d, answers %d, authrr %d, extrarr %d\n", + htons(hdr->numquestions), + htons(hdr->numanswers), + htons(hdr->numauthrr), + htons(hdr->numextrarr)); + */ + + /* The ID in the DNS header should be our entry into the name + table. */ + i = htons(hdr->id); + namemapptr = &names[i]; + if(i < RESOLV_ENTRIES && + namemapptr->state == STATE_ASKING) { + + /* This entry is now finished. */ + namemapptr->state = STATE_DONE; + namemapptr->err = hdr->flags2 & DNS_FLAG2_ERR_MASK; + + /* Check for error. If so, call callback to inform. */ + if(namemapptr->err != 0) { + namemapptr->state = STATE_ERROR; + resolv_found(namemapptr->name, NULL); + return; + } + + /* We only care about the question(s) and the answers. The authrr + and the extrarr are simply discarded. */ + nquestions = htons(hdr->numquestions); + nanswers = htons(hdr->numanswers); + + /* Skip the name in the question. XXX: This should really be + checked agains the name in the question, to be sure that they + match. */ + nameptr = parse_name((char *)uip_appdata + 12) + 4; + + while(nanswers > 0) { + /* The first byte in the answer resource record determines if it + is a compressed record or a normal one. */ + if(*nameptr & 0xc0) { + /* Compressed name. */ + nameptr +=2; + /* printf("Compressed anwser\n");*/ + } else { + /* Not compressed name. */ + nameptr = parse_name((char *)nameptr); + } + + ans = (struct dns_answer *)nameptr; + /* printf("Answer: type %x, class %x, ttl %x, length %x\n", + htons(ans->type), htons(ans->class), (htons(ans->ttl[0]) + << 16) | htons(ans->ttl[1]), htons(ans->len));*/ + + /* Check for IP address type and Internet class. Others are + discarded. */ + if(ans->type == HTONS(1) && + ans->class == HTONS(1) && + ans->len == HTONS(4)) { + /* printf("IP address %d.%d.%d.%d\n", + htons(ans->ipaddr[0]) >> 8, + htons(ans->ipaddr[0]) & 0xff, + htons(ans->ipaddr[1]) >> 8, + htons(ans->ipaddr[1]) & 0xff);*/ + /* XXX: we should really check that this IP address is the one + we want. */ + namemapptr->ipaddr[0] = ans->ipaddr[0]; + namemapptr->ipaddr[1] = ans->ipaddr[1]; + + resolv_found(namemapptr->name, namemapptr->ipaddr); + return; + } else { + nameptr = nameptr + 10 + htons(ans->len); + } + --nanswers; + } + } + +} +/*---------------------------------------------------------------------------*/ +/** \internal + * The main UDP function. + */ +/*---------------------------------------------------------------------------*/ +void +resolv_appcall(void) +{ + if(uip_udp_conn->rport == HTONS(53)) { + if(uip_poll()) { + check_entries(); + } + if(uip_newdata()) { + newdata(); + } + } +} +/*---------------------------------------------------------------------------*/ +/** + * Queues a name so that a question for the name will be sent out. + * + * \param name The hostname that is to be queried. + */ +/*---------------------------------------------------------------------------*/ +void +resolv_query(char *name) +{ + static u8_t i; + static u8_t lseq, lseqi; + register struct namemap *nameptr; + + lseq = lseqi = 0; + + for(i = 0; i < RESOLV_ENTRIES; ++i) { + nameptr = &names[i]; + if(nameptr->state == STATE_UNUSED) { + break; + } + if(seqno - nameptr->seqno > lseq) { + lseq = seqno - nameptr->seqno; + lseqi = i; + } + } + + if(i == RESOLV_ENTRIES) { + i = lseqi; + nameptr = &names[i]; + } + + /* printf("Using entry %d\n", i);*/ + + strcpy(nameptr->name, name); + nameptr->state = STATE_NEW; + nameptr->seqno = seqno; + ++seqno; +} +/*---------------------------------------------------------------------------*/ +/** + * Look up a hostname in the array of known hostnames. + * + * \note This function only looks in the internal array of known + * hostnames, it does not send out a query for the hostname if none + * was found. The function resolv_query() can be used to send a query + * for a hostname. + * + * \return A pointer to a 4-byte representation of the hostname's IP + * address, or NULL if the hostname was not found in the array of + * hostnames. + */ +/*---------------------------------------------------------------------------*/ +u16_t * +resolv_lookup(char *name) +{ + static u8_t i; + struct namemap *nameptr; + + /* Walk through the list to see if the name is in there. If it is + not, we return NULL. */ + for(i = 0; i < RESOLV_ENTRIES; ++i) { + nameptr = &names[i]; + if(nameptr->state == STATE_DONE && + strcmp(name, nameptr->name) == 0) { + return nameptr->ipaddr; + } + } + return NULL; +} +/*---------------------------------------------------------------------------*/ +/** + * Obtain the currently configured DNS server. + * + * \return A pointer to a 4-byte representation of the IP address of + * the currently configured DNS server or NULL if no DNS server has + * been configured. + */ +/*---------------------------------------------------------------------------*/ +u16_t * +resolv_getserver(void) +{ + if(resolv_conn == NULL) { + return NULL; + } + return resolv_conn->ripaddr; +} +/*---------------------------------------------------------------------------*/ +/** + * Configure which DNS server to use for queries. + * + * \param dnsserver A pointer to a 4-byte representation of the IP + * address of the DNS server to be configured. + */ +/*---------------------------------------------------------------------------*/ +void +resolv_conf(u16_t *dnsserver) +{ + if(resolv_conn != NULL) { + uip_udp_remove(resolv_conn); + } + + resolv_conn = uip_udp_new(dnsserver, HTONS(53)); +} +/*---------------------------------------------------------------------------*/ +/** + * Initalize the resolver. + */ +/*---------------------------------------------------------------------------*/ +void +resolv_init(void) +{ + static u8_t i; + + for(i = 0; i < RESOLV_ENTRIES; ++i) { + names[i].state = STATE_DONE; + } + +} +/*---------------------------------------------------------------------------*/ + +/** @} */ +/** @} */ diff --git a/components/net/uip/apps/resolv/resolv.h b/components/net/uip/apps/resolv/resolv.h new file mode 100644 index 0000000000..abab34e127 --- /dev/null +++ b/components/net/uip/apps/resolv/resolv.h @@ -0,0 +1,75 @@ +/** + * \addtogroup resolv + * @{ + */ +/** + * \file + * DNS resolver code header file. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2002-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: resolv.h,v 1.4 2006/06/11 21:46:37 adam Exp $ + * + */ +#ifndef __RESOLV_H__ +#define __RESOLV_H__ + +typedef int uip_udp_appstate_t; +void resolv_appcall(void); +#define UIP_UDP_APPCALL resolv_appcall + +#include "uipopt.h" + +/** + * Callback function which is called when a hostname is found. + * + * This function must be implemented by the module that uses the DNS + * resolver. It is called when a hostname is found, or when a hostname + * was not found. + * + * \param name A pointer to the name that was looked up. \param + * ipaddr A pointer to a 4-byte array containing the IP address of the + * hostname, or NULL if the hostname could not be found. + */ +void resolv_found(char *name, u16_t *ipaddr); + +/* Functions. */ +void resolv_conf(u16_t *dnsserver); +u16_t *resolv_getserver(void); +void resolv_init(void); +u16_t *resolv_lookup(char *name); +void resolv_query(char *name); + +#endif /* __RESOLV_H__ */ + +/** @} */ diff --git a/components/net/uip/apps/smtp/Makefile.smtp b/components/net/uip/apps/smtp/Makefile.smtp new file mode 100644 index 0000000000..8b3a5aa45c --- /dev/null +++ b/components/net/uip/apps/smtp/Makefile.smtp @@ -0,0 +1 @@ +APP_SOURCES += smtp.c smtp-strings.c memb.c diff --git a/components/net/uip/apps/smtp/makestrings b/components/net/uip/apps/smtp/makestrings new file mode 100644 index 0000000000..bea18a6c34 --- /dev/null +++ b/components/net/uip/apps/smtp/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "};\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("smtp-strings"); + +exit 0; + diff --git a/components/net/uip/apps/smtp/smtp-strings b/components/net/uip/apps/smtp/smtp-strings new file mode 100644 index 0000000000..27f639c2eb --- /dev/null +++ b/components/net/uip/apps/smtp/smtp-strings @@ -0,0 +1,11 @@ +smtp_220 "220" +smtp_helo "HELO " +smtp_mail_from "MAIL FROM: " +smtp_rcpt_to "RCPT TO: " +smtp_data "DATA\r\n" +smtp_to "To: " +smtp_from "From: " +smtp_subject "Subject: " +smtp_quit "QUIT\r\n" +smtp_crnl "\r\n" +smtp_crnlperiodcrnl "\r\n.\r\n" \ No newline at end of file diff --git a/components/net/uip/apps/smtp/smtp-strings.c b/components/net/uip/apps/smtp/smtp-strings.c new file mode 100644 index 0000000000..f3981a17bf --- /dev/null +++ b/components/net/uip/apps/smtp/smtp-strings.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2004, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: smtp-strings.c,v 1.3 2006/06/11 21:46:37 adam Exp $ + */ +const char smtp_220[4] = +/* "220" */ +{0x32, 0x32, 0x30, }; +const char smtp_helo[6] = +/* "HELO " */ +{0x48, 0x45, 0x4c, 0x4f, 0x20, }; +const char smtp_mail_from[12] = +/* "MAIL FROM: " */ +{0x4d, 0x41, 0x49, 0x4c, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x3a, 0x20, }; +const char smtp_rcpt_to[10] = +/* "RCPT TO: " */ +{0x52, 0x43, 0x50, 0x54, 0x20, 0x54, 0x4f, 0x3a, 0x20, }; +const char smtp_data[7] = +/* "DATA\r\n" */ +{0x44, 0x41, 0x54, 0x41, 0xd, 0xa, }; +const char smtp_to[5] = +/* "To: " */ +{0x54, 0x6f, 0x3a, 0x20, }; +const char smtp_cc[5] = +/* "Cc: " */ +{0x43, 0x63, 0x3a, 0x20, }; +const char smtp_from[7] = +/* "From: " */ +{0x46, 0x72, 0x6f, 0x6d, 0x3a, 0x20, }; +const char smtp_subject[10] = +/* "Subject: " */ +{0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x20, }; +const char smtp_quit[7] = +/* "QUIT\r\n" */ +{0x51, 0x55, 0x49, 0x54, 0xd, 0xa, }; +const char smtp_crnl[3] = +/* "\r\n" */ +{0xd, 0xa, }; +const char smtp_crnlperiodcrnl[6] = +/* "\r\n.\r\n" */ +{0xd, 0xa, 0x2e, 0xd, 0xa, }; diff --git a/components/net/uip/apps/smtp/smtp-strings.h b/components/net/uip/apps/smtp/smtp-strings.h new file mode 100644 index 0000000000..f5ae68c894 --- /dev/null +++ b/components/net/uip/apps/smtp/smtp-strings.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2004, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: smtp-strings.h,v 1.3 2006/06/11 21:46:37 adam Exp $ + */ +extern const char smtp_220[4]; +extern const char smtp_helo[6]; +extern const char smtp_mail_from[12]; +extern const char smtp_rcpt_to[10]; +extern const char smtp_data[7]; +extern const char smtp_to[5]; +extern const char smtp_cc[5]; +extern const char smtp_from[7]; +extern const char smtp_subject[10]; +extern const char smtp_quit[7]; +extern const char smtp_crnl[3]; +extern const char smtp_crnlperiodcrnl[6]; diff --git a/components/net/uip/apps/smtp/smtp.c b/components/net/uip/apps/smtp/smtp.c new file mode 100644 index 0000000000..a860006ad0 --- /dev/null +++ b/components/net/uip/apps/smtp/smtp.c @@ -0,0 +1,262 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup smtp SMTP E-mail sender + * @{ + * + * The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is + * the standard way of sending and transfering e-mail on the + * Internet. This simple example implementation is intended as an + * example of how to implement protocols in uIP, and is able to send + * out e-mail but has not been extensively tested. + */ + +/** + * \file + * SMTP example implementation + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2004, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: smtp.c,v 1.4 2006/06/11 21:46:37 adam Exp $ + */ +#include "smtp.h" + +#include "smtp-strings.h" +#include "psock.h" +#include "uip.h" + +#include + +static struct smtp_state s; + +static char *localhostname; +static uip_ipaddr_t smtpserver; + +#define ISO_nl 0x0a +#define ISO_cr 0x0d + +#define ISO_period 0x2e + +#define ISO_2 0x32 +#define ISO_3 0x33 +#define ISO_4 0x34 +#define ISO_5 0x35 + + +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(smtp_thread(void)) +{ + PSOCK_BEGIN(&s.psock); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(strncmp(s.inputbuffer, smtp_220, 3) != 0) { + PSOCK_CLOSE(&s.psock); + smtp_done(2); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_helo); + PSOCK_SEND_STR(&s.psock, localhostname); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(3); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_mail_from); + PSOCK_SEND_STR(&s.psock, s.from); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(4); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to); + PSOCK_SEND_STR(&s.psock, s.to); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(5); + PSOCK_EXIT(&s.psock); + } + + if(s.cc != 0) { + PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to); + PSOCK_SEND_STR(&s.psock, s.cc); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(6); + PSOCK_EXIT(&s.psock); + } + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_data); + + PSOCK_READTO(&s.psock, ISO_nl); + + if(s.inputbuffer[0] != ISO_3) { + PSOCK_CLOSE(&s.psock); + smtp_done(7); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_to); + PSOCK_SEND_STR(&s.psock, s.to); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + if(s.cc != 0) { + PSOCK_SEND_STR(&s.psock, (char *)smtp_cc); + PSOCK_SEND_STR(&s.psock, s.cc); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_from); + PSOCK_SEND_STR(&s.psock, s.from); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_SEND_STR(&s.psock, (char *)smtp_subject); + PSOCK_SEND_STR(&s.psock, s.subject); + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl); + + PSOCK_SEND(&s.psock, s.msg, s.msglen); + + PSOCK_SEND_STR(&s.psock, (char *)smtp_crnlperiodcrnl); + + PSOCK_READTO(&s.psock, ISO_nl); + if(s.inputbuffer[0] != ISO_2) { + PSOCK_CLOSE(&s.psock); + smtp_done(8); + PSOCK_EXIT(&s.psock); + } + + PSOCK_SEND_STR(&s.psock, (char *)smtp_quit); + smtp_done(SMTP_ERR_OK); + PSOCK_END(&s.psock); +} +/*---------------------------------------------------------------------------*/ +void +smtp_appcall(void) +{ + if(uip_closed()) { + s.connected = 0; + return; + } + if(uip_aborted() || uip_timedout()) { + s.connected = 0; + smtp_done(1); + return; + } + smtp_thread(); +} +/*---------------------------------------------------------------------------*/ +/** + * Specificy an SMTP server and hostname. + * + * This function is used to configure the SMTP module with an SMTP + * server and the hostname of the host. + * + * \param lhostname The hostname of the uIP host. + * + * \param server A pointer to a 4-byte array representing the IP + * address of the SMTP server to be configured. + */ +void +smtp_configure(char *lhostname, void *server) +{ + localhostname = lhostname; + uip_ipaddr_copy(smtpserver, server); +} +/*---------------------------------------------------------------------------*/ +/** + * Send an e-mail. + * + * \param to The e-mail address of the receiver of the e-mail. + * \param cc The e-mail address of the CC: receivers of the e-mail. + * \param from The e-mail address of the sender of the e-mail. + * \param subject The subject of the e-mail. + * \param msg The actual e-mail message. + * \param msglen The length of the e-mail message. + */ +unsigned char +smtp_send(char *to, char *cc, char *from, + char *subject, char *msg, u16_t msglen) +{ + struct uip_conn *conn; + + conn = uip_connect(smtpserver, HTONS(25)); + if(conn == NULL) { + return 0; + } + s.connected = 1; + s.to = to; + s.cc = cc; + s.from = from; + s.subject = subject; + s.msg = msg; + s.msglen = msglen; + + PSOCK_INIT(&s.psock, s.inputbuffer, sizeof(s.inputbuffer)); + + return 1; +} +/*---------------------------------------------------------------------------*/ +void +smtp_init(void) +{ + s.connected = 0; +} +/*---------------------------------------------------------------------------*/ +/** @} */ +/** @} */ diff --git a/components/net/uip/apps/smtp/smtp.h b/components/net/uip/apps/smtp/smtp.h new file mode 100644 index 0000000000..44d0766e10 --- /dev/null +++ b/components/net/uip/apps/smtp/smtp.h @@ -0,0 +1,103 @@ + +/** + * \addtogroup smtp + * @{ + */ + + +/** + * \file + * SMTP header file + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2002, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: smtp.h,v 1.4 2006/06/11 21:46:37 adam Exp $ + * + */ +#ifndef __SMTP_H__ +#define __SMTP_H__ + +#include "uipopt.h" + +/** + * Error number that signifies a non-error condition. + */ +#define SMTP_ERR_OK 0 + +/** + * Callback function that is called when an e-mail transmission is + * done. + * + * This function must be implemented by the module that uses the SMTP + * module. + * + * \param error The number of the error if an error occured, or + * SMTP_ERR_OK. + */ +void smtp_done(unsigned char error); + +void smtp_init(void); + +/* Functions. */ +void smtp_configure(char *localhostname, u16_t *smtpserver); +unsigned char smtp_send(char *to, char *from, + char *subject, char *msg, + u16_t msglen); +#define SMTP_SEND(to, cc, from, subject, msg) \ + smtp_send(to, cc, from, subject, msg, strlen(msg)) + +void smtp_appcall(void); + +struct smtp_state { + u8_t state; + char *to; + char *from; + char *subject; + char *msg; + u16_t msglen; + + u16_t sentlen, textlen; + u16_t sendptr; + +}; + + +#ifndef UIP_APPCALL +#define UIP_APPCALL smtp_appcall +#endif +typedef struct smtp_state uip_tcp_appstate_t; + + +#endif /* __SMTP_H__ */ + +/** @} */ diff --git a/components/net/uip/apps/telnetd/Makefile.telnetd b/components/net/uip/apps/telnetd/Makefile.telnetd new file mode 100644 index 0000000000..afb1b593c8 --- /dev/null +++ b/components/net/uip/apps/telnetd/Makefile.telnetd @@ -0,0 +1 @@ +APP_SOURCES += telnetd.c shell.c memb.c diff --git a/components/net/uip/apps/telnetd/telnetd.c b/components/net/uip/apps/telnetd/telnetd.c new file mode 100644 index 0000000000..7a5ae858d7 --- /dev/null +++ b/components/net/uip/apps/telnetd/telnetd.c @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $ + * + */ + +#include "uip.h" +#include "telnetd.h" +#include "memb.h" +#include "shell.h" + +#include + +#define ISO_nl 0x0a +#define ISO_cr 0x0d + +struct telnetd_line { + char line[TELNETD_CONF_LINELEN]; +}; +MEMB(linemem, struct telnetd_line, TELNETD_CONF_NUMLINES); + +#define STATE_NORMAL 0 +#define STATE_IAC 1 +#define STATE_WILL 2 +#define STATE_WONT 3 +#define STATE_DO 4 +#define STATE_DONT 5 +#define STATE_CLOSE 6 + +static struct telnetd_state s; + +#define TELNET_IAC 255 +#define TELNET_WILL 251 +#define TELNET_WONT 252 +#define TELNET_DO 253 +#define TELNET_DONT 254 +/*---------------------------------------------------------------------------*/ +static char * +alloc_line(void) +{ + return memb_alloc(&linemem); +} +/*---------------------------------------------------------------------------*/ +static void +dealloc_line(char *line) +{ + memb_free(&linemem, line); +} +/*---------------------------------------------------------------------------*/ +void +shell_quit(char *str) +{ + s.state = STATE_CLOSE; +} +/*---------------------------------------------------------------------------*/ +static void +sendline(char *line) +{ + static unsigned int i; + + for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) { + if(s.lines[i] == NULL) { + s.lines[i] = line; + break; + } + } + if(i == TELNETD_CONF_NUMLINES) { + dealloc_line(line); + } +} +/*---------------------------------------------------------------------------*/ +void +shell_prompt(char *str) +{ + char *line; + line = alloc_line(); + if(line != NULL) { + strncpy(line, str, TELNETD_CONF_LINELEN); + /* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/ + sendline(line); + } +} +/*---------------------------------------------------------------------------*/ +void +shell_output(char *str1, char *str2) +{ + static unsigned len; + char *line; + + line = alloc_line(); + if(line != NULL) { + len = strlen(str1); + strncpy(line, str1, TELNETD_CONF_LINELEN); + if(len < TELNETD_CONF_LINELEN) { + strncpy(line + len, str2, TELNETD_CONF_LINELEN - len); + } + len = strlen(line); + if(len < TELNETD_CONF_LINELEN - 2) { + line[len] = ISO_cr; + line[len+1] = ISO_nl; + line[len+2] = 0; + } + /* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/ + sendline(line); + } +} +/*---------------------------------------------------------------------------*/ +void +telnetd_init(void) +{ + uip_listen(HTONS(23)); + memb_init(&linemem); + shell_init(); +} +/*---------------------------------------------------------------------------*/ +static void +acked(void) +{ + static unsigned int i; + + while(s.numsent > 0) { + dealloc_line(s.lines[0]); + for(i = 1; i < TELNETD_CONF_NUMLINES; ++i) { + s.lines[i - 1] = s.lines[i]; + } + s.lines[TELNETD_CONF_NUMLINES - 1] = NULL; + --s.numsent; + } +} +/*---------------------------------------------------------------------------*/ +static void +senddata(void) +{ + static char *bufptr, *lineptr; + static int buflen, linelen; + + bufptr = uip_appdata; + buflen = 0; + for(s.numsent = 0; s.numsent < TELNETD_CONF_NUMLINES && + s.lines[s.numsent] != NULL ; ++s.numsent) { + lineptr = s.lines[s.numsent]; + linelen = strlen(lineptr); + if(linelen > TELNETD_CONF_LINELEN) { + linelen = TELNETD_CONF_LINELEN; + } + if(buflen + linelen < uip_mss()) { + memcpy(bufptr, lineptr, linelen); + bufptr += linelen; + buflen += linelen; + } else { + break; + } + } + uip_send(uip_appdata, buflen); +} +/*---------------------------------------------------------------------------*/ +static void +closed(void) +{ + static unsigned int i; + + for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) { + if(s.lines[i] != NULL) { + dealloc_line(s.lines[i]); + } + } +} +/*---------------------------------------------------------------------------*/ +static void +get_char(u8_t c) +{ + if(c == ISO_cr) { + return; + } + + s.buf[(int)s.bufptr] = c; + if(s.buf[(int)s.bufptr] == ISO_nl || + s.bufptr == sizeof(s.buf) - 1) { + if(s.bufptr > 0) { + s.buf[(int)s.bufptr] = 0; + /* petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/ + } + shell_input(s.buf); + s.bufptr = 0; + } else { + ++s.bufptr; + } +} +/*---------------------------------------------------------------------------*/ +static void +sendopt(u8_t option, u8_t value) +{ + char *line; + line = alloc_line(); + if(line != NULL) { + line[0] = TELNET_IAC; + line[1] = option; + line[2] = value; + line[3] = 0; + sendline(line); + } +} +/*---------------------------------------------------------------------------*/ +static void +newdata(void) +{ + u16_t len; + u8_t c; + char *dataptr; + + + len = uip_datalen(); + dataptr = (char *)uip_appdata; + + while(len > 0 && s.bufptr < sizeof(s.buf)) { + c = *dataptr; + ++dataptr; + --len; + switch(s.state) { + case STATE_IAC: + if(c == TELNET_IAC) { + get_char(c); + s.state = STATE_NORMAL; + } else { + switch(c) { + case TELNET_WILL: + s.state = STATE_WILL; + break; + case TELNET_WONT: + s.state = STATE_WONT; + break; + case TELNET_DO: + s.state = STATE_DO; + break; + case TELNET_DONT: + s.state = STATE_DONT; + break; + default: + s.state = STATE_NORMAL; + break; + } + } + break; + case STATE_WILL: + /* Reply with a DONT */ + sendopt(TELNET_DONT, c); + s.state = STATE_NORMAL; + break; + + case STATE_WONT: + /* Reply with a DONT */ + sendopt(TELNET_DONT, c); + s.state = STATE_NORMAL; + break; + case STATE_DO: + /* Reply with a WONT */ + sendopt(TELNET_WONT, c); + s.state = STATE_NORMAL; + break; + case STATE_DONT: + /* Reply with a WONT */ + sendopt(TELNET_WONT, c); + s.state = STATE_NORMAL; + break; + case STATE_NORMAL: + if(c == TELNET_IAC) { + s.state = STATE_IAC; + } else { + get_char(c); + } + break; + } + + + } + +} +/*---------------------------------------------------------------------------*/ +void +telnetd_appcall(void) +{ + static unsigned int i; + if(uip_connected()) { + /* tcp_markconn(uip_conn, &s);*/ + for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) { + s.lines[i] = NULL; + } + s.bufptr = 0; + s.state = STATE_NORMAL; + + shell_start(); + } + + if(s.state == STATE_CLOSE) { + s.state = STATE_NORMAL; + uip_close(); + return; + } + + if(uip_closed() || + uip_aborted() || + uip_timedout()) { + closed(); + } + + if(uip_acked()) { + acked(); + } + + if(uip_newdata()) { + newdata(); + } + + if(uip_rexmit() || + uip_newdata() || + uip_acked() || + uip_connected() || + uip_poll()) { + senddata(); + } +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/telnetd/telnetd.h b/components/net/uip/apps/telnetd/telnetd.h new file mode 100644 index 0000000000..2ee8acdb2d --- /dev/null +++ b/components/net/uip/apps/telnetd/telnetd.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: telnetd.h,v 1.2 2006/06/07 09:43:54 adam Exp $ + * + */ +#ifndef __TELNETD_H__ +#define __TELNETD_H__ + +#include "uipopt.h" + +void telnetd_appcall(void); + +#ifndef TELNETD_CONF_LINELEN +#define TELNETD_CONF_LINELEN 40 +#endif +#ifndef TELNETD_CONF_NUMLINES +#define TELNETD_CONF_NUMLINES 16 +#endif + +struct telnetd_state { + char *lines[TELNETD_CONF_NUMLINES]; + char buf[TELNETD_CONF_LINELEN]; + char bufptr; + u8_t numsent; + u8_t state; +}; + +typedef struct telnetd_state uip_tcp_appstate_t; + +#ifndef UIP_APPCALL +#define UIP_APPCALL telnetd_appcall +#endif + +#endif /* __TELNETD_H__ */ diff --git a/components/net/uip/apps/telnetd/uip_shell.c b/components/net/uip/apps/telnetd/uip_shell.c new file mode 100644 index 0000000000..09bf3fa211 --- /dev/null +++ b/components/net/uip/apps/telnetd/uip_shell.c @@ -0,0 +1,123 @@ + /* + * Copyright (c) 2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: shell.c,v 1.1 2006/06/07 09:43:54 adam Exp $ + * + */ + +#include "uip_shell.h" + +#include + +struct ptentry { + char *commandstr; + void (* pfunc)(char *str); +}; + +#define SHELL_PROMPT "uIP 1.0> " + +/*---------------------------------------------------------------------------*/ +static void +parse(register char *str, struct ptentry *t) +{ + struct ptentry *p; + for(p = t; p->commandstr != NULL; ++p) { + if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0) { + break; + } + } + + p->pfunc(str); +} +/*---------------------------------------------------------------------------*/ +static void +inttostr(register char *str, unsigned int i) +{ + str[0] = '0' + i / 100; + if(str[0] == '0') { + str[0] = ' '; + } + str[1] = '0' + (i / 10) % 10; + if(str[0] == ' ' && str[1] == '0') { + str[1] = ' '; + } + str[2] = '0' + i % 10; + str[3] = ' '; + str[4] = 0; +} +/*---------------------------------------------------------------------------*/ +static void +help(char *str) +{ + shell_output("Available commands:", ""); + shell_output("stats - show network statistics", ""); + shell_output("conn - show TCP connections", ""); + shell_output("help, ? - show help", ""); + shell_output("exit - exit shell", ""); +} +/*---------------------------------------------------------------------------*/ +static void +unknown(char *str) +{ + if(strlen(str) > 0) { + shell_output("Unknown command: ", str); + } +} +/*---------------------------------------------------------------------------*/ +static struct ptentry parsetab[] = + {{"stats", help}, + {"conn", help}, + {"help", help}, + {"exit", shell_quit}, + {"?", help}, + + /* Default action */ + {NULL, unknown}}; +/*---------------------------------------------------------------------------*/ +void +shell_init(void) +{ +} +/*---------------------------------------------------------------------------*/ +void +shell_start(void) +{ + shell_output("uIP command shell", ""); + shell_output("Type '?' and return for help", ""); + shell_prompt(SHELL_PROMPT); +} +/*---------------------------------------------------------------------------*/ +void +shell_input(char *cmd) +{ + parse(cmd, parsetab); + shell_prompt(SHELL_PROMPT); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/telnetd/uip_shell.h b/components/net/uip/apps/telnetd/uip_shell.h new file mode 100644 index 0000000000..b57d7be293 --- /dev/null +++ b/components/net/uip/apps/telnetd/uip_shell.h @@ -0,0 +1,104 @@ +/** + * \file + * Interface for the Contiki shell. + * \author Adam Dunkels + * + * Some of the functions declared in this file must be implemented as + * a shell back-end in the architecture specific files of a Contiki + * port. + */ + + +/* + * Copyright (c) 2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki desktop OS. + * + * $Id: shell.h,v 1.1 2006/06/07 09:43:54 adam Exp $ + * + */ +#ifndef __SHELL_H__ +#define __SHELL_H__ + +/** + * Initialize the shell. + * + * Called when the shell front-end process starts. This function may + * be used to start listening for signals. + */ +void shell_init(void); + +/** + * Start the shell back-end. + * + * Called by the front-end when a new shell is started. + */ +void shell_start(void); + +/** + * Process a shell command. + * + * This function will be called by the shell GUI / telnet server whan + * a command has been entered that should be processed by the shell + * back-end. + * + * \param command The command to be processed. + */ +void shell_input(char *command); + +/** + * Quit the shell. + * + */ +void shell_quit(char *); + + +/** + * Print a string to the shell window. + * + * This function is implemented by the shell GUI / telnet server and + * can be called by the shell back-end to output a string in the + * shell window. The string is automatically appended with a linebreak. + * + * \param str1 The first half of the string to be output. + * \param str2 The second half of the string to be output. + */ +void shell_output(char *str1, char *str2); + +/** + * Print a prompt to the shell window. + * + * This function can be used by the shell back-end to print out a + * prompt to the shell window. + * + * \param prompt The prompt to be printed. + * + */ +void shell_prompt(char *prompt); + +#endif /* __SHELL_H__ */ diff --git a/components/net/uip/apps/webclient/Makefile.webclient b/components/net/uip/apps/webclient/Makefile.webclient new file mode 100644 index 0000000000..e6e7f0828a --- /dev/null +++ b/components/net/uip/apps/webclient/Makefile.webclient @@ -0,0 +1 @@ +APP_SOURCES += webclient-strings.c webclient.c diff --git a/components/net/uip/apps/webclient/makestrings b/components/net/uip/apps/webclient/makestrings new file mode 100644 index 0000000000..6dec075dd3 --- /dev/null +++ b/components/net/uip/apps/webclient/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "0 };\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("webclient-strings"); + +exit 0; + diff --git a/components/net/uip/apps/webclient/webclient-strings b/components/net/uip/apps/webclient/webclient-strings new file mode 100644 index 0000000000..a331397238 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient-strings @@ -0,0 +1,31 @@ +http_http "http://" +http_200 "200 " +http_301 "301 " +http_302 "302 " +http_get "GET " +http_10 "HTTP/1.0" +http_11 "HTTP/1.1" +http_content_type "content-type: " +http_texthtml "text/html" +http_location "location: " +http_host "host: " +http_crnl "\r\n" +http_index_html "/index.html" +http_404_html "/404.html" +http_content_type_html "Content-type: text/html\r\n\r\n" +http_content_type_css "Content-type: text/css\r\n\r\n" +http_content_type_text "Content-type: text/text\r\n\r\n" +http_content_type_png "Content-type: image/png\r\n\r\n" +http_content_type_gif "Content-type: image/gif\r\n\r\n" +http_content_type_jpg "Content-type: image/jpeg\r\n\r\n" +http_content_type_binary "Content-type: application/octet-stream\r\n\r\n" +http_html ".html" +http_shtml ".shtml" +http_htm ".htm" +http_css ".css" +http_png ".png" +http_gif ".gif" +http_jpg ".jpg" +http_text ".text" +http_txt ".txt" +http_user_agent_fields "Connection: close\r\nUser-Agent: uIP/1.0 (; http://www.sics.se/~adam/uip/)\r\n\r\n" diff --git a/components/net/uip/apps/webclient/webclient-strings.c b/components/net/uip/apps/webclient/webclient-strings.c new file mode 100644 index 0000000000..94723308e5 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient-strings.c @@ -0,0 +1,93 @@ +const char http_http[8] = +/* "http://" */ +{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0 }; +const char http_200[5] = +/* "200 " */ +{0x32, 0x30, 0x30, 0x20, 0 }; +const char http_301[5] = +/* "301 " */ +{0x33, 0x30, 0x31, 0x20, 0 }; +const char http_302[5] = +/* "302 " */ +{0x33, 0x30, 0x32, 0x20, 0 }; +const char http_get[5] = +/* "GET " */ +{0x47, 0x45, 0x54, 0x20, 0 }; +const char http_10[9] = +/* "HTTP/1.0" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0 }; +const char http_11[9] = +/* "HTTP/1.1" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0 }; +const char http_content_type[15] = +/* "content-type: " */ +{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0 }; +const char http_texthtml[10] = +/* "text/html" */ +{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_location[11] = +/* "location: " */ +{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0 }; +const char http_host[7] = +/* "host: " */ +{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, 0 }; +const char http_crnl[3] = +/* "\r\n" */ +{0xd, 0xa, 0 }; +const char http_index_html[12] = +/* "/index.html" */ +{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_404_html[10] = +/* "/404.html" */ +{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_content_type_html[28] = +/* "Content-type: text/html\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_css [27] = +/* "Content-type: text/css\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_text[28] = +/* "Content-type: text/text\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_png [28] = +/* "Content-type: image/png\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_gif [28] = +/* "Content-type: image/gif\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_jpg [29] = +/* "Content-type: image/jpeg\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_content_type_binary[43] = +/* "Content-type: application/octet-stream\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, 0 }; +const char http_html[6] = +/* ".html" */ +{0x2e, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_shtml[7] = +/* ".shtml" */ +{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0 }; +const char http_htm[5] = +/* ".htm" */ +{0x2e, 0x68, 0x74, 0x6d, 0 }; +const char http_css[5] = +/* ".css" */ +{0x2e, 0x63, 0x73, 0x73, 0 }; +const char http_png[5] = +/* ".png" */ +{0x2e, 0x70, 0x6e, 0x67, 0 }; +const char http_gif[5] = +/* ".gif" */ +{0x2e, 0x67, 0x69, 0x66, 0 }; +const char http_jpg[5] = +/* ".jpg" */ +{0x2e, 0x6a, 0x70, 0x67, 0 }; +const char http_text[6] = +/* ".text" */ +{0x2e, 0x74, 0x65, 0x78, 0x74, 0 }; +const char http_txt[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, 0 }; +const char http_user_agent_fields[77] = +/* "Connection: close\r\nUser-Agent: uIP/1.0 (; http://www.sics.se/~adam/uip/)\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x28, 0x3b, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0x29, 0xd, 0xa, 0xd, 0xa, 0 }; diff --git a/components/net/uip/apps/webclient/webclient-strings.h b/components/net/uip/apps/webclient/webclient-strings.h new file mode 100644 index 0000000000..9e3ec93472 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient-strings.h @@ -0,0 +1,31 @@ +extern const char http_http[8]; +extern const char http_200[5]; +extern const char http_301[5]; +extern const char http_302[5]; +extern const char http_get[5]; +extern const char http_10[9]; +extern const char http_11[9]; +extern const char http_content_type[15]; +extern const char http_texthtml[10]; +extern const char http_location[11]; +extern const char http_host[7]; +extern const char http_crnl[3]; +extern const char http_index_html[12]; +extern const char http_404_html[10]; +extern const char http_content_type_html[28]; +extern const char http_content_type_css [27]; +extern const char http_content_type_text[28]; +extern const char http_content_type_png [28]; +extern const char http_content_type_gif [28]; +extern const char http_content_type_jpg [29]; +extern const char http_content_type_binary[43]; +extern const char http_html[6]; +extern const char http_shtml[7]; +extern const char http_htm[5]; +extern const char http_css[5]; +extern const char http_png[5]; +extern const char http_gif[5]; +extern const char http_jpg[5]; +extern const char http_text[6]; +extern const char http_txt[5]; +extern const char http_user_agent_fields[77]; diff --git a/components/net/uip/apps/webclient/webclient.c b/components/net/uip/apps/webclient/webclient.c new file mode 100644 index 0000000000..746c008c33 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient.c @@ -0,0 +1,439 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup webclient Web client + * @{ + * + * This example shows a HTTP client that is able to download web pages + * and files from web servers. It requires a number of callback + * functions to be implemented by the module that utilizes the code: + * webclient_datahandler(), webclient_connected(), + * webclient_timedout(), webclient_aborted(), webclient_closed(). + */ + +/** + * \file + * Implementation of the HTTP client. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2002, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ + +#include "uip.h" +#include "uiplib.h" +#include "webclient.h" +#include "resolv.h" + +#include + +#define WEBCLIENT_TIMEOUT 100 + +#define WEBCLIENT_STATE_STATUSLINE 0 +#define WEBCLIENT_STATE_HEADERS 1 +#define WEBCLIENT_STATE_DATA 2 +#define WEBCLIENT_STATE_CLOSE 3 + +#define HTTPFLAG_NONE 0 +#define HTTPFLAG_OK 1 +#define HTTPFLAG_MOVED 2 +#define HTTPFLAG_ERROR 3 + + +#define ISO_nl 0x0a +#define ISO_cr 0x0d +#define ISO_space 0x20 + + +static struct webclient_state s; + +/*-----------------------------------------------------------------------------------*/ +char * +webclient_mimetype(void) +{ + return s.mimetype; +} +/*-----------------------------------------------------------------------------------*/ +char * +webclient_filename(void) +{ + return s.file; +} +/*-----------------------------------------------------------------------------------*/ +char * +webclient_hostname(void) +{ + return s.host; +} +/*-----------------------------------------------------------------------------------*/ +unsigned short +webclient_port(void) +{ + return s.port; +} +/*-----------------------------------------------------------------------------------*/ +void +webclient_init(void) +{ + +} +/*-----------------------------------------------------------------------------------*/ +static void +init_connection(void) +{ + s.state = WEBCLIENT_STATE_STATUSLINE; + + s.getrequestleft = sizeof(http_get) - 1 + 1 + + sizeof(http_10) - 1 + + sizeof(http_crnl) - 1 + + sizeof(http_host) - 1 + + sizeof(http_crnl) - 1 + + strlen(http_user_agent_fields) + + strlen(s.file) + strlen(s.host); + s.getrequestptr = 0; + + s.httpheaderlineptr = 0; +} +/*-----------------------------------------------------------------------------------*/ +void +webclient_close(void) +{ + s.state = WEBCLIENT_STATE_CLOSE; +} +/*-----------------------------------------------------------------------------------*/ +unsigned char +webclient_get(char *host, u16_t port, char *file) +{ + struct uip_conn *conn; + uip_ipaddr_t *ipaddr; + static uip_ipaddr_t addr; + + /* First check if the host is an IP address. */ + ipaddr = &addr; + if(uiplib_ipaddrconv(host, (unsigned char *)addr) == 0) { + ipaddr = (uip_ipaddr_t *)resolv_lookup(host); + + if(ipaddr == NULL) { + return 0; + } + } + + conn = uip_connect(ipaddr, htons(port)); + + if(conn == NULL) { + return 0; + } + + s.port = port; + strncpy(s.file, file, sizeof(s.file)); + strncpy(s.host, host, sizeof(s.host)); + + init_connection(); + return 1; +} +/*-----------------------------------------------------------------------------------*/ +static unsigned char * +copy_string(unsigned char *dest, + const unsigned char *src, unsigned char len) +{ + strncpy(dest, src, len); + return dest + len; +} +/*-----------------------------------------------------------------------------------*/ +static void +senddata(void) +{ + u16_t len; + char *getrequest; + char *cptr; + + if(s.getrequestleft > 0) { + cptr = getrequest = (char *)uip_appdata; + + cptr = copy_string(cptr, http_get, sizeof(http_get) - 1); + cptr = copy_string(cptr, s.file, strlen(s.file)); + *cptr++ = ISO_space; + cptr = copy_string(cptr, http_10, sizeof(http_10) - 1); + + cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1); + + cptr = copy_string(cptr, http_host, sizeof(http_host) - 1); + cptr = copy_string(cptr, s.host, strlen(s.host)); + cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1); + + cptr = copy_string(cptr, http_user_agent_fields, + strlen(http_user_agent_fields)); + + len = s.getrequestleft > uip_mss()? + uip_mss(): + s.getrequestleft; + uip_send(&(getrequest[s.getrequestptr]), len); + } +} +/*-----------------------------------------------------------------------------------*/ +static void +acked(void) +{ + u16_t len; + + if(s.getrequestleft > 0) { + len = s.getrequestleft > uip_mss()? + uip_mss(): + s.getrequestleft; + s.getrequestleft -= len; + s.getrequestptr += len; + } +} +/*-----------------------------------------------------------------------------------*/ +static u16_t +parse_statusline(u16_t len) +{ + char *cptr; + + while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) { + s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata; + ++((char *)uip_appdata); + --len; + if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) { + + if((strncmp(s.httpheaderline, http_10, + sizeof(http_10) - 1) == 0) || + (strncmp(s.httpheaderline, http_11, + sizeof(http_11) - 1) == 0)) { + cptr = &(s.httpheaderline[9]); + s.httpflag = HTTPFLAG_NONE; + if(strncmp(cptr, http_200, sizeof(http_200) - 1) == 0) { + /* 200 OK */ + s.httpflag = HTTPFLAG_OK; + } else if(strncmp(cptr, http_301, sizeof(http_301) - 1) == 0 || + strncmp(cptr, http_302, sizeof(http_302) - 1) == 0) { + /* 301 Moved permanently or 302 Found. Location: header line + will contain thw new location. */ + s.httpflag = HTTPFLAG_MOVED; + } else { + s.httpheaderline[s.httpheaderlineptr - 1] = 0; + } + } else { + uip_abort(); + webclient_aborted(); + return 0; + } + + /* We're done parsing the status line, so we reset the pointer + and start parsing the HTTP headers.*/ + s.httpheaderlineptr = 0; + s.state = WEBCLIENT_STATE_HEADERS; + break; + } else { + ++s.httpheaderlineptr; + } + } + return len; +} +/*-----------------------------------------------------------------------------------*/ +static char +casecmp(char *str1, const char *str2, char len) +{ + static char c; + + while(len > 0) { + c = *str1; + /* Force lower-case characters. */ + if(c & 0x40) { + c |= 0x20; + } + if(*str2 != c) { + return 1; + } + ++str1; + ++str2; + --len; + } + return 0; +} +/*-----------------------------------------------------------------------------------*/ +static u16_t +parse_headers(u16_t len) +{ + char *cptr; + static unsigned char i; + + while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) { + s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata; + ++((char *)uip_appdata); + --len; + if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) { + /* We have an entire HTTP header line in s.httpheaderline, so + we parse it. */ + if(s.httpheaderline[0] == ISO_cr) { + /* This was the last header line (i.e., and empty "\r\n"), so + we are done with the headers and proceed with the actual + data. */ + s.state = WEBCLIENT_STATE_DATA; + return len; + } + + s.httpheaderline[s.httpheaderlineptr - 1] = 0; + /* Check for specific HTTP header fields. */ + if(casecmp(s.httpheaderline, http_content_type, + sizeof(http_content_type) - 1) == 0) { + /* Found Content-type field. */ + cptr = strchr(s.httpheaderline, ';'); + if(cptr != NULL) { + *cptr = 0; + } + strncpy(s.mimetype, s.httpheaderline + + sizeof(http_content_type) - 1, sizeof(s.mimetype)); + } else if(casecmp(s.httpheaderline, http_location, + sizeof(http_location) - 1) == 0) { + cptr = s.httpheaderline + + sizeof(http_location) - 1; + + if(strncmp(cptr, http_http, 7) == 0) { + cptr += 7; + for(i = 0; i < s.httpheaderlineptr - 7; ++i) { + if(*cptr == 0 || + *cptr == '/' || + *cptr == ' ' || + *cptr == ':') { + s.host[i] = 0; + break; + } + s.host[i] = *cptr; + ++cptr; + } + } + strncpy(s.file, cptr, sizeof(s.file)); + /* s.file[s.httpheaderlineptr - i] = 0;*/ + } + + + /* We're done parsing, so we reset the pointer and start the + next line. */ + s.httpheaderlineptr = 0; + } else { + ++s.httpheaderlineptr; + } + } + return len; +} +/*-----------------------------------------------------------------------------------*/ +static void +newdata(void) +{ + u16_t len; + + len = uip_datalen(); + + if(s.state == WEBCLIENT_STATE_STATUSLINE) { + len = parse_statusline(len); + } + + if(s.state == WEBCLIENT_STATE_HEADERS && len > 0) { + len = parse_headers(len); + } + + if(len > 0 && s.state == WEBCLIENT_STATE_DATA && + s.httpflag != HTTPFLAG_MOVED) { + webclient_datahandler((char *)uip_appdata, len); + } +} +/*-----------------------------------------------------------------------------------*/ +void +webclient_appcall(void) +{ + if(uip_connected()) { + s.timer = 0; + s.state = WEBCLIENT_STATE_STATUSLINE; + senddata(); + webclient_connected(); + return; + } + + if(s.state == WEBCLIENT_STATE_CLOSE) { + webclient_closed(); + uip_abort(); + return; + } + + if(uip_aborted()) { + webclient_aborted(); + } + if(uip_timedout()) { + webclient_timedout(); + } + + + if(uip_acked()) { + s.timer = 0; + acked(); + } + if(uip_newdata()) { + s.timer = 0; + newdata(); + } + if(uip_rexmit() || + uip_newdata() || + uip_acked()) { + senddata(); + } else if(uip_poll()) { + ++s.timer; + if(s.timer == WEBCLIENT_TIMEOUT) { + webclient_timedout(); + uip_abort(); + return; + } + /* senddata();*/ + } + + if(uip_closed()) { + if(s.httpflag != HTTPFLAG_MOVED) { + /* Send NULL data to signal EOF. */ + webclient_datahandler(NULL, 0); + } else { + if(resolv_lookup(s.host) == NULL) { + resolv_query(s.host); + } + webclient_get(s.host, s.port, s.file); + } + } +} +/*-----------------------------------------------------------------------------------*/ + +/** @} */ +/** @} */ diff --git a/components/net/uip/apps/webclient/webclient.h b/components/net/uip/apps/webclient/webclient.h new file mode 100644 index 0000000000..44cb95caf8 --- /dev/null +++ b/components/net/uip/apps/webclient/webclient.h @@ -0,0 +1,228 @@ +/** + * \addtogroup webclient + * @{ + */ + +/** + * \file + * Header file for the HTTP client. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2002, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ +#ifndef __WEBCLIENT_H__ +#define __WEBCLIENT_H__ + + +#include "webclient-strings.h" +#include "uipopt.h" + +#define WEBCLIENT_CONF_MAX_URLLEN 100 + +struct webclient_state { + u8_t timer; + u8_t state; + u8_t httpflag; + + u16_t port; + char host[40]; + char file[WEBCLIENT_CONF_MAX_URLLEN]; + u16_t getrequestptr; + u16_t getrequestleft; + + char httpheaderline[200]; + u16_t httpheaderlineptr; + + char mimetype[32]; +}; + +typedef struct webclient_state uip_tcp_appstate_t; +#define UIP_APPCALL webclient_appcall + +/** + * Callback function that is called from the webclient code when HTTP + * data has been received. + * + * This function must be implemented by the module that uses the + * webclient code. The function is called from the webclient module + * when HTTP data has been received. The function is not called when + * HTTP headers are received, only for the actual data. + * + * \note This function is called many times, repetedly, when data is + * being received, and not once when all data has been received. + * + * \param data A pointer to the data that has been received. + * \param len The length of the data that has been received. + */ +void webclient_datahandler(char *data, u16_t len); + +/** + * Callback function that is called from the webclient code when the + * HTTP connection has been connected to the web server. + * + * This function must be implemented by the module that uses the + * webclient code. + */ +void webclient_connected(void); + +/** + * Callback function that is called from the webclient code if the + * HTTP connection to the web server has timed out. + * + * This function must be implemented by the module that uses the + * webclient code. + */ +void webclient_timedout(void); + +/** + * Callback function that is called from the webclient code if the + * HTTP connection to the web server has been aborted by the web + * server. + * + * This function must be implemented by the module that uses the + * webclient code. + */ +void webclient_aborted(void); + +/** + * Callback function that is called from the webclient code when the + * HTTP connection to the web server has been closed. + * + * This function must be implemented by the module that uses the + * webclient code. + */ +void webclient_closed(void); + + + +/** + * Initialize the webclient module. + */ +void webclient_init(void); + +/** + * Open an HTTP connection to a web server and ask for a file using + * the GET method. + * + * This function opens an HTTP connection to the specified web server + * and requests the specified file using the GET method. When the HTTP + * connection has been connected, the webclient_connected() callback + * function is called and when the HTTP data arrives the + * webclient_datahandler() callback function is called. + * + * The callback function webclient_timedout() is called if the web + * server could not be contacted, and the webclient_aborted() callback + * function is called if the HTTP connection is aborted by the web + * server. + * + * When the HTTP request has been completed and the HTTP connection is + * closed, the webclient_closed() callback function will be called. + * + * \note If the function is passed a host name, it must already be in + * the resolver cache in order for the function to connect to the web + * server. It is therefore up to the calling module to implement the + * resolver calls and the signal handler used for reporting a resolv + * query answer. + * + * \param host A pointer to a string containing either a host name or + * a numerical IP address in dotted decimal notation (e.g., 192.168.23.1). + * + * \param port The port number to which to connect, in host byte order. + * + * \param file A pointer to the name of the file to get. + * + * \retval 0 if the host name could not be found in the cache, or + * if a TCP connection could not be created. + * + * \retval 1 if the connection was initiated. + */ +unsigned char webclient_get(char *host, u16_t port, char *file); + +/** + * Close the currently open HTTP connection. + */ +void webclient_close(void); +void webclient_appcall(void); + +/** + * Obtain the MIME type of the current HTTP data stream. + * + * \return A pointer to a string contaning the MIME type. The string + * may be empty if no MIME type was reported by the web server. + */ +char *webclient_mimetype(void); + +/** + * Obtain the filename of the current HTTP data stream. + * + * The filename of an HTTP request may be changed by the web server, + * and may therefore not be the same as when the original GET request + * was made with webclient_get(). This function is used for obtaining + * the current filename. + * + * \return A pointer to the current filename. + */ +char *webclient_filename(void); + +/** + * Obtain the hostname of the current HTTP data stream. + * + * The hostname of the web server of an HTTP request may be changed + * by the web server, and may therefore not be the same as when the + * original GET request was made with webclient_get(). This function + * is used for obtaining the current hostname. + * + * \return A pointer to the current hostname. + */ +char *webclient_hostname(void); + +/** + * Obtain the port number of the current HTTP data stream. + * + * The port number of an HTTP request may be changed by the web + * server, and may therefore not be the same as when the original GET + * request was made with webclient_get(). This function is used for + * obtaining the current port number. + * + * \return The port number of the current HTTP data stream, in host byte order. + */ +unsigned short webclient_port(void); + + + +#endif /* __WEBCLIENT_H__ */ + +/** @} */ diff --git a/components/net/uip/apps/webserver/Makefile.webserver b/components/net/uip/apps/webserver/Makefile.webserver new file mode 100644 index 0000000000..7d3e086955 --- /dev/null +++ b/components/net/uip/apps/webserver/Makefile.webserver @@ -0,0 +1 @@ +APP_SOURCES += httpd.c http-strings.c httpd-fs.c httpd-cgi.c diff --git a/components/net/uip/apps/webserver/http-strings b/components/net/uip/apps/webserver/http-strings new file mode 100644 index 0000000000..d0b9121be8 --- /dev/null +++ b/components/net/uip/apps/webserver/http-strings @@ -0,0 +1,35 @@ +http_http "http://" +http_200 "200 " +http_301 "301 " +http_302 "302 " +http_get "GET " +http_10 "HTTP/1.0" +http_11 "HTTP/1.1" +http_content_type "content-type: " +http_texthtml "text/html" +http_location "location: " +http_host "host: " +http_crnl "\r\n" +http_index_html "/index.html" +http_404_html "/404.html" +http_referer "Referer:" +http_header_200 "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" +http_header_404 "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" +http_content_type_plain "Content-type: text/plain\r\n\r\n" +http_content_type_html "Content-type: text/html\r\n\r\n" +http_content_type_css "Content-type: text/css\r\n\r\n" +http_content_type_text "Content-type: text/text\r\n\r\n" +http_content_type_png "Content-type: image/png\r\n\r\n" +http_content_type_gif "Content-type: image/gif\r\n\r\n" +http_content_type_jpg "Content-type: image/jpeg\r\n\r\n" +http_content_type_binary "Content-type: application/octet-stream\r\n\r\n" +http_html ".html" +http_shtml ".shtml" +http_htm ".htm" +http_css ".css" +http_png ".png" +http_gif ".gif" +http_jpg ".jpg" +http_text ".txt" +http_txt ".txt" + diff --git a/components/net/uip/apps/webserver/http-strings.c b/components/net/uip/apps/webserver/http-strings.c new file mode 100644 index 0000000000..0d822baf7e --- /dev/null +++ b/components/net/uip/apps/webserver/http-strings.c @@ -0,0 +1,102 @@ +const char http_http[8] = +/* "http://" */ +{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, }; +const char http_200[5] = +/* "200 " */ +{0x32, 0x30, 0x30, 0x20, }; +const char http_301[5] = +/* "301 " */ +{0x33, 0x30, 0x31, 0x20, }; +const char http_302[5] = +/* "302 " */ +{0x33, 0x30, 0x32, 0x20, }; +const char http_get[5] = +/* "GET " */ +{0x47, 0x45, 0x54, 0x20, }; +const char http_10[9] = +/* "HTTP/1.0" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, }; +const char http_11[9] = +/* "HTTP/1.1" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, }; +const char http_content_type[15] = +/* "content-type: " */ +{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, }; +const char http_texthtml[10] = +/* "text/html" */ +{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_location[11] = +/* "location: " */ +{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, }; +const char http_host[7] = +/* "host: " */ +{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, }; +const char http_crnl[3] = +/* "\r\n" */ +{0xd, 0xa, }; +const char http_index_html[12] = +/* "/index.html" */ +{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_404_html[10] = +/* "/404.html" */ +{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_referer[9] = +/* "Referer:" */ +{0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x3a, }; +const char http_header_200[84] = +/* "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, }; +const char http_header_404[91] = +/* "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */ +{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x34, 0x30, 0x34, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, }; +const char http_content_type_plain[29] = +/* "Content-type: text/plain\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_html[28] = +/* "Content-type: text/html\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_css [27] = +/* "Content-type: text/css\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_text[28] = +/* "Content-type: text/text\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_png [28] = +/* "Content-type: image/png\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_gif [28] = +/* "Content-type: image/gif\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_jpg [29] = +/* "Content-type: image/jpeg\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, }; +const char http_content_type_binary[43] = +/* "Content-type: application/octet-stream\r\n\r\n" */ +{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, }; +const char http_html[6] = +/* ".html" */ +{0x2e, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_shtml[7] = +/* ".shtml" */ +{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, }; +const char http_htm[5] = +/* ".htm" */ +{0x2e, 0x68, 0x74, 0x6d, }; +const char http_css[5] = +/* ".css" */ +{0x2e, 0x63, 0x73, 0x73, }; +const char http_png[5] = +/* ".png" */ +{0x2e, 0x70, 0x6e, 0x67, }; +const char http_gif[5] = +/* ".gif" */ +{0x2e, 0x67, 0x69, 0x66, }; +const char http_jpg[5] = +/* ".jpg" */ +{0x2e, 0x6a, 0x70, 0x67, }; +const char http_text[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, }; +const char http_txt[5] = +/* ".txt" */ +{0x2e, 0x74, 0x78, 0x74, }; diff --git a/components/net/uip/apps/webserver/http-strings.h b/components/net/uip/apps/webserver/http-strings.h new file mode 100644 index 0000000000..f121dd73a8 --- /dev/null +++ b/components/net/uip/apps/webserver/http-strings.h @@ -0,0 +1,34 @@ +extern const char http_http[8]; +extern const char http_200[5]; +extern const char http_301[5]; +extern const char http_302[5]; +extern const char http_get[5]; +extern const char http_10[9]; +extern const char http_11[9]; +extern const char http_content_type[15]; +extern const char http_texthtml[10]; +extern const char http_location[11]; +extern const char http_host[7]; +extern const char http_crnl[3]; +extern const char http_index_html[12]; +extern const char http_404_html[10]; +extern const char http_referer[9]; +extern const char http_header_200[84]; +extern const char http_header_404[91]; +extern const char http_content_type_plain[29]; +extern const char http_content_type_html[28]; +extern const char http_content_type_css [27]; +extern const char http_content_type_text[28]; +extern const char http_content_type_png [28]; +extern const char http_content_type_gif [28]; +extern const char http_content_type_jpg [29]; +extern const char http_content_type_binary[43]; +extern const char http_html[6]; +extern const char http_shtml[7]; +extern const char http_htm[5]; +extern const char http_css[5]; +extern const char http_png[5]; +extern const char http_gif[5]; +extern const char http_jpg[5]; +extern const char http_text[5]; +extern const char http_txt[5]; diff --git a/components/net/uip/apps/webserver/httpd-cgi.c b/components/net/uip/apps/webserver/httpd-cgi.c new file mode 100644 index 0000000000..62570359fb --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-cgi.c @@ -0,0 +1,203 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface + * \author + * Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2006, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $ + * + */ + +#include "uip.h" +#include "psock.h" +#include "httpd.h" +#include "httpd-cgi.h" +#include "httpd-fs.h" + +#include +#include + +HTTPD_CGI_CALL(file, "file-stats", file_stats); +HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats); +HTTPD_CGI_CALL(net, "net-stats", net_stats); + +static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, NULL }; + +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(nullfunction(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +httpd_cgifunction +httpd_cgi(char *name) +{ + const struct httpd_cgi_call **f; + + /* Find the matching name in the table, return the function. */ + for(f = calls; *f != NULL; ++f) { + if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) { + return (*f)->function; + } + } + return nullfunction; +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_file_stats(void *arg) +{ + char *f = (char *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f)); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(file_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static const char closed[] = /* "CLOSED",*/ +{0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0}; +static const char syn_rcvd[] = /* "SYN-RCVD",*/ +{0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56, + 0x44, 0}; +static const char syn_sent[] = /* "SYN-SENT",*/ +{0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e, + 0x54, 0}; +static const char established[] = /* "ESTABLISHED",*/ +{0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, + 0x45, 0x44, 0}; +static const char fin_wait_1[] = /* "FIN-WAIT-1",*/ +{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, + 0x54, 0x2d, 0x31, 0}; +static const char fin_wait_2[] = /* "FIN-WAIT-2",*/ +{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49, + 0x54, 0x2d, 0x32, 0}; +static const char closing[] = /* "CLOSING",*/ +{0x43, 0x4c, 0x4f, 0x53, 0x49, + 0x4e, 0x47, 0}; +static const char time_wait[] = /* "TIME-WAIT,"*/ +{0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41, + 0x49, 0x54, 0}; +static const char last_ack[] = /* "LAST-ACK"*/ +{0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43, + 0x4b, 0}; + +static const char *states[] = { + closed, + syn_rcvd, + syn_sent, + established, + fin_wait_1, + fin_wait_2, + closing, + time_wait, + last_ack}; + + +static unsigned short +generate_tcp_stats(void *arg) +{ + struct uip_conn *conn; + struct httpd_state *s = (struct httpd_state *)arg; + + conn = &uip_conns[s->count]; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "%d%u.%u.%u.%u:%u%s%u%u%c %c\r\n", + htons(conn->lport), + htons(conn->ripaddr[0]) >> 8, + htons(conn->ripaddr[0]) & 0xff, + htons(conn->ripaddr[1]) >> 8, + htons(conn->ripaddr[1]) & 0xff, + htons(conn->rport), + states[conn->tcpstateflags & UIP_TS_MASK], + conn->nrtx, + conn->timer, + (uip_outstanding(conn))? '*':' ', + (uip_stopped(conn))? '!':' '); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr)) +{ + + PSOCK_BEGIN(&s->sout); + + for(s->count = 0; s->count < UIP_CONNS; ++s->count) { + if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) { + PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s); + } + } + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_net_stats(void *arg) +{ + struct httpd_state *s = (struct httpd_state *)arg; + return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, + "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]); +} + +static +PT_THREAD(net_stats(struct httpd_state *s, char *ptr)) +{ + PSOCK_BEGIN(&s->sout); + +#if UIP_STATISTICS + + for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t); + ++s->count) { + PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s); + } + +#endif /* UIP_STATISTICS */ + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +/** @} */ diff --git a/components/net/uip/apps/webserver/httpd-cgi.h b/components/net/uip/apps/webserver/httpd-cgi.h new file mode 100644 index 0000000000..e6ba51e73e --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-cgi.h @@ -0,0 +1,84 @@ +/** + * \addtogroup httpd + * @{ + */ + +/** + * \file + * Web server script interface header file + * \author + * Adam Dunkels + * + */ + + + +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_CGI_H__ +#define __HTTPD_CGI_H__ + +#include "psock.h" +#include "httpd.h" + +typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *)); + +httpd_cgifunction httpd_cgi(char *name); + +struct httpd_cgi_call { + const char *name; + const httpd_cgifunction function; +}; + +/** + * \brief HTTPD CGI function declaration + * \param name The C variable name of the function + * \param str The string name of the function, used in the script file + * \param function A pointer to the function that implements it + * + * This macro is used for declaring a HTTPD CGI + * function. This function is then added to the list of + * HTTPD CGI functions with the httpd_cgi_add() function. + * + * \hideinitializer + */ +#define HTTPD_CGI_CALL(name, str, function) \ +static PT_THREAD(function(struct httpd_state *, char *)); \ +static const struct httpd_cgi_call name = {str, function} + +void httpd_cgi_init(void); +#endif /* __HTTPD_CGI_H__ */ + +/** @} */ diff --git a/components/net/uip/apps/webserver/httpd-fs.c b/components/net/uip/apps/webserver/httpd-fs.c new file mode 100644 index 0000000000..21185e87c7 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ + +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-fsdata.h" + +#ifndef NULL +#define NULL 0 +#endif /* NULL */ + +#include "httpd-fsdata.c" + +#if HTTPD_FS_STATISTICS +static u16_t count[HTTPD_FS_NUMFILES]; +#endif /* HTTPD_FS_STATISTICS */ + +/*-----------------------------------------------------------------------------------*/ +static u8_t +httpd_fs_strcmp(const char *str1, const char *str2) +{ + u8_t i; + i = 0; + loop: + + if(str2[i] == 0 || + str1[i] == '\r' || + str1[i] == '\n') { + return 0; + } + + if(str1[i] != str2[i]) { + return 1; + } + + + ++i; + goto loop; +} +/*-----------------------------------------------------------------------------------*/ +int +httpd_fs_open(const char *name, struct httpd_fs_file *file) +{ +#if HTTPD_FS_STATISTICS + u16_t i = 0; +#endif /* HTTPD_FS_STATISTICS */ + struct httpd_fsdata_file_noconst *f; + + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + file->data = f->data; + file->len = f->len; +#if HTTPD_FS_STATISTICS + ++count[i]; +#endif /* HTTPD_FS_STATISTICS */ + return 1; + } +#if HTTPD_FS_STATISTICS + ++i; +#endif /* HTTPD_FS_STATISTICS */ + + } + return 0; +} +/*-----------------------------------------------------------------------------------*/ +void +httpd_fs_init(void) +{ +#if HTTPD_FS_STATISTICS + u16_t i; + for(i = 0; i < HTTPD_FS_NUMFILES; i++) { + count[i] = 0; + } +#endif /* HTTPD_FS_STATISTICS */ +} +/*-----------------------------------------------------------------------------------*/ +#if HTTPD_FS_STATISTICS +u16_t httpd_fs_count +(char *name) +{ + struct httpd_fsdata_file_noconst *f; + u16_t i; + + i = 0; + for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT; + f != NULL; + f = (struct httpd_fsdata_file_noconst *)f->next) { + + if(httpd_fs_strcmp(name, f->name) == 0) { + return count[i]; + } + ++i; + } + return 0; +} +#endif /* HTTPD_FS_STATISTICS */ +/*-----------------------------------------------------------------------------------*/ diff --git a/components/net/uip/apps/webserver/httpd-fs.h b/components/net/uip/apps/webserver/httpd-fs.h new file mode 100644 index 0000000000..d80ed3dff0 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fs.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FS_H__ +#define __HTTPD_FS_H__ + +#define HTTPD_FS_STATISTICS 1 + +struct httpd_fs_file { + char *data; + int len; +}; + +/* file must be allocated by caller and will be filled in + by the function. */ +int httpd_fs_open(const char *name, struct httpd_fs_file *file); + +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 +u16_t httpd_fs_count(char *name); +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ + +void httpd_fs_init(void); + +#endif /* __HTTPD_FS_H__ */ diff --git a/components/net/uip/apps/webserver/httpd-fs/404.html b/components/net/uip/apps/webserver/httpd-fs/404.html new file mode 100644 index 0000000000..a17711d02e --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/404.html @@ -0,0 +1,8 @@ + + +
+

404 - file not found

+

Go here instead.

+
+ + \ No newline at end of file diff --git a/components/net/uip/apps/webserver/httpd-fs/fade.png b/components/net/uip/apps/webserver/httpd-fs/fade.png new file mode 100644 index 0000000000..a9e69f75de Binary files /dev/null and b/components/net/uip/apps/webserver/httpd-fs/fade.png differ diff --git a/components/net/uip/apps/webserver/httpd-fs/files.shtml b/components/net/uip/apps/webserver/httpd-fs/files.shtml new file mode 100644 index 0000000000..811e230322 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/files.shtml @@ -0,0 +1,35 @@ +%!: /header.html +

File statistics

+
+ + + + + + + + + + + + + + + +
/index.html%! file-stats /index.html +
/files.shtml%! file-stats /files.shtml +
/tcp.shtml%! file-stats /tcp.shtml +
/stats.shtml%! file-stats /stats.shtml +
/style.css%! file-stats /style.css +
/404.html%! file-stats /404.html +
/fade.png%! file-stats /fade.png +
+
+%!: /footer.html diff --git a/components/net/uip/apps/webserver/httpd-fs/footer.html b/components/net/uip/apps/webserver/httpd-fs/footer.html new file mode 100644 index 0000000000..1fd5f4f290 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/footer.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/components/net/uip/apps/webserver/httpd-fs/header.html b/components/net/uip/apps/webserver/httpd-fs/header.html new file mode 100644 index 0000000000..7b1a1fe7ee --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/header.html @@ -0,0 +1,18 @@ + + + + Welcome to the uIP web server! + + + + + + +
diff --git a/components/net/uip/apps/webserver/httpd-fs/index.html b/components/net/uip/apps/webserver/httpd-fs/index.html new file mode 100644 index 0000000000..27cbc93f5a --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/index.html @@ -0,0 +1,29 @@ + + + + Welcome to the uIP web server! + + + + + + +
+

+ These web pages are served by a small web server running on top of + the uIP embedded TCP/IP + stack. +

+

+ Click on the links above for web server statistics. +

+ + + diff --git a/components/net/uip/apps/webserver/httpd-fs/processes.shtml b/components/net/uip/apps/webserver/httpd-fs/processes.shtml new file mode 100644 index 0000000000..2f93e35902 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/processes.shtml @@ -0,0 +1,5 @@ +%!: /header.html +

System processes


+ +%! processes +%!: /footer.html \ No newline at end of file diff --git a/components/net/uip/apps/webserver/httpd-fs/stats.shtml b/components/net/uip/apps/webserver/httpd-fs/stats.shtml new file mode 100644 index 0000000000..c63ed4afd7 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/stats.shtml @@ -0,0 +1,31 @@ +%!: /header.html +

Network statistics

+
+
IDNamePriorityPoll handlerEvent handlerProcstate
+
+IP           Packets received
+             Packets sent
+	     Packets dropped
+IP errors    IP version/header length
+             IP length, high byte
+             IP length, low byte
+             IP fragments
+             Header checksum
+             Wrong protocol
+ICMP	     Packets received
+             Packets sent
+             Packets dropped
+             Type errors
+TCP          Packets received
+             Packets sent
+             Packets dropped
+             Checksum errors
+             Data packets without ACKs
+             Resets
+             Retransmissions
+	     No connection avaliable
+	     Connection attempts to closed ports
+
%! net-stats
+
+ +%!: /footer.html diff --git a/components/net/uip/apps/webserver/httpd-fs/style.css b/components/net/uip/apps/webserver/httpd-fs/style.css new file mode 100644 index 0000000000..ba6df7f157 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/style.css @@ -0,0 +1,92 @@ +h1 +{ + text-align: center; + font-size:14pt; + font-family:arial,helvetica; + font-weight:bold; + padding:10px; +} + +body +{ + + background-color: #fffeec; + color:black; + + font-size:8pt; + font-family:arial,helvetica; +} + +.menu +{ + margin: 4px; + width:60%; + + padding:2px; + + border: solid 1px; + background-color: #fffcd2; + text-align:left; + + font-size:9pt; + font-family:arial,helvetica; +} + +div.menubox +{ + width: 25%; + border: 0; + float: left; +text-align: center; +} + +.contentblock +{ + margin: 4px; + width:60%; + + padding:2px; + + border: 1px dotted; + background-color: white; + + font-size:8pt; + font-family:arial,helvetica; + +} + +p.intro +{ + margin-left:20px; + margin-right:20px; + + font-size:10pt; +/* font-weight:bold; */ + font-family:arial,helvetica; +} + +p.clink +{ + font-size:12pt; + font-family:courier,monospace; + text-align:center; +} + +p.clink9 +{ + font-size:9pt; + font-family:courier,monospace; + text-align:center; +} + + +p +{ + padding-left:10px; +} + +p.right +{ + text-align:right; +} + diff --git a/components/net/uip/apps/webserver/httpd-fs/tcp.shtml b/components/net/uip/apps/webserver/httpd-fs/tcp.shtml new file mode 100644 index 0000000000..4c4bffe97f --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fs/tcp.shtml @@ -0,0 +1,5 @@ +%!: /header.html +

Current connections


+ +%! tcp-connections +%!: /footer.html \ No newline at end of file diff --git a/components/net/uip/apps/webserver/httpd-fsdata.c b/components/net/uip/apps/webserver/httpd-fsdata.c new file mode 100644 index 0000000000..491095ec30 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fsdata.c @@ -0,0 +1,607 @@ +static const unsigned char data_processes_shtml[] = { + /* /processes.shtml */ + 0x2f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31, + 0x3e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x3c, 0x2f, 0x68, + 0x31, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, + 0x31, 0x30, 0x30, 0x25, 0x22, 0x3e, 0xa, 0x3c, 0x74, 0x72, + 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x49, 0x44, 0x3c, 0x2f, 0x74, + 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x4e, 0x61, 0x6d, 0x65, + 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x50, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, + 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x50, 0x6f, 0x6c, 0x6c, + 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x3c, 0x2f, + 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, + 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x50, + 0x72, 0x6f, 0x63, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, + 0x74, 0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x25, + 0x21, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, + 0x73, 0xa, 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x66, 0x6f, 0x6f, + 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0}; + +static const unsigned char data_404_html[] = { + /* /404.html */ + 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, 0x22, + 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, 0x34, 0x20, 0x2d, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, 0x68, 0x31, 0x3e, + 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x33, + 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65, + 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, + 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, + 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, +0}; + +static const unsigned char data_files_shtml[] = { + /* /files.shtml */ + 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31, + 0x3e, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x31, + 0x3e, 0xa, 0x3c, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, + 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x22, 0x3e, + 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, + 0x3e, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0xa, 0x3c, 0x74, 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, + 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, + 0x6c, 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, + 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, + 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x6e, 0x67, + 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x31, + 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x25, 0x21, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, + 0x73, 0x20, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, + 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, 0x74, 0x72, + 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x2f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, + 0x3c, 0x74, 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, + 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, + 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, + 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, + 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, + 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x31, 0x30, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x25, 0x21, 0x20, + 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, + 0x20, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, 0x74, 0x72, + 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, + 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x2f, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, 0x3c, 0x74, 0x64, 0x3e, + 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x20, 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, + 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, + 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, + 0x70, 0x6e, 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x3d, 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3d, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, + 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x74, 0x63, 0x70, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, + 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0xa, 0x3c, 0x74, 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, + 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, + 0x6d, 0x6c, 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, + 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, + 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x6e, + 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, + 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x25, + 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x20, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, + 0x73, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, + 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x2f, 0x73, + 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, 0x3c, 0x74, + 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0xa, 0x3c, 0x2f, 0x74, + 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, + 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, + 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x3d, 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x3d, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, + 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0xa, 0x3e, 0x20, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, + 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, + 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x34, + 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x2f, + 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x3c, 0x2f, + 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, 0x3c, 0x74, + 0x64, 0x3e, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x34, 0x30, 0x34, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, + 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, + 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x3d, 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3d, 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x20, 0x2f, 0x34, 0x30, 0x34, + 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3e, 0x20, 0x3c, 0x2f, + 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, + 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, + 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x3e, 0x2f, 0x66, 0x61, + 0x64, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x3e, + 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0xa, 0x3c, 0x74, 0x64, 0x3e, + 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x20, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, + 0x70, 0x6e, 0x67, 0xa, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, + 0x74, 0x64, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, + 0x63, 0x3d, 0x22, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, + 0x6e, 0x67, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x3d, 0x31, 0x30, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, + 0x25, 0x21, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x20, 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, + 0x70, 0x6e, 0x67, 0xa, 0x3e, 0x20, 0x3c, 0x2f, 0x74, 0x64, + 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x3c, 0x2f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x3e, 0xa, 0x3c, 0x2f, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3e, 0xa, 0x25, 0x21, 0x3a, 0x20, + 0x2f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, + 0x6d, 0x6c, 0xa, 0}; + +static const unsigned char data_footer_html[] = { + /* /footer.html */ + 0x2f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x20, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, + 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0}; + +static const unsigned char data_header_html[] = { + /* /header.html */ + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x57, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x49, 0x50, 0x20, 0x77, + 0x65, 0x62, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x21, + 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, + 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x20, + 0x20, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, + 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, + 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, + 0x66, 0x66, 0x66, 0x65, 0x65, 0x63, 0x22, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x3d, 0x22, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x22, + 0x3e, 0xa, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, + 0x75, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, + 0x6e, 0x75, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x46, + 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x62, 0x6f, + 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x46, 0x69, 0x6c, 0x65, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x62, + 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, + 0x65, 0x6e, 0x75, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0xa, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, 0x20, 0x20, 0xa, 0x20, + 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x3e, 0xa, 0}; + +static const unsigned char data_index_html[] = { + /* /index.html */ + 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, + 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, + 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, + 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, + 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, + 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64, + 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, + 0x57, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x49, 0x50, 0x20, 0x77, + 0x65, 0x62, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x21, + 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, + 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, + 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, + 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x20, + 0x20, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, + 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, + 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, + 0x66, 0x66, 0x66, 0x65, 0x65, 0x63, 0x22, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x3d, 0x22, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x22, + 0x3e, 0xa, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, + 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, + 0x75, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, + 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, + 0x6e, 0x75, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x46, + 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x62, 0x6f, + 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, + 0x3d, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x73, 0x68, + 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x46, 0x69, 0x6c, 0x65, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, + 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6e, 0x75, 0x62, + 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, + 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, + 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, + 0x64, 0x69, 0x76, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x64, 0x69, + 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, + 0x65, 0x6e, 0x75, 0x62, 0x6f, 0x78, 0x22, 0x3e, 0x3c, 0x61, + 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, + 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0xa, 0x20, 0x20, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, + 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, + 0x20, 0x20, 0x3c, 0x62, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xa, 0xa, 0x20, 0x20, 0x3c, + 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, + 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x70, + 0x3e, 0xa, 0x20, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, + 0x77, 0x65, 0x62, 0x20, 0x70, 0x61, 0x67, 0x65, 0x73, 0x20, + 0x61, 0x72, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x73, 0x6d, 0x61, 0x6c, + 0x6c, 0x20, 0x77, 0x65, 0x62, 0x20, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, + 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x70, 0x20, 0x6f, 0x66, + 0xa, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x61, 0x20, + 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, + 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, + 0x2f, 0x75, 0x69, 0x70, 0x2f, 0x22, 0x3e, 0x75, 0x49, 0x50, + 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, + 0x54, 0x43, 0x50, 0x2f, 0x49, 0x50, 0xa, 0x20, 0x20, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x3c, 0x2f, 0x61, 0x3e, 0x2e, 0xa, + 0x20, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0xa, 0x20, 0x20, 0x3c, + 0x70, 0x3e, 0xa, 0x20, 0x20, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, + 0x6e, 0x6b, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x77, 0x65, 0x62, 0x20, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x73, 0x74, 0x69, 0x63, 0x73, 0x2e, 0xa, 0x20, 0x20, 0x3c, + 0x2f, 0x70, 0x3e, 0xa, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x62, + 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, + 0x6c, 0x3e, 0xa, 0}; + +static const unsigned char data_style_css[] = { + /* /style.css */ + 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0, + 0x68, 0x31, 0x20, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, + 0x31, 0x34, 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, + 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, + 0x61, 0x72, 0x69, 0x61, 0x6c, 0x2c, 0x68, 0x65, 0x6c, 0x76, + 0x65, 0x74, 0x69, 0x63, 0x61, 0x3b, 0xa, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x3a, 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x70, + 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x31, 0x30, 0x70, + 0x78, 0x3b, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x62, 0x6f, 0x64, + 0x79, 0xa, 0x7b, 0xa, 0xa, 0x20, 0x20, 0x62, 0x61, 0x63, + 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x65, + 0x65, 0x63, 0x3b, 0xa, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x3b, 0xa, 0xa, + 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, + 0x65, 0x3a, 0x38, 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, + 0x3a, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x2c, 0x68, 0x65, 0x6c, + 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x3b, 0xa, 0x7d, 0xa, + 0xa, 0x2e, 0x6d, 0x65, 0x6e, 0x75, 0xa, 0x7b, 0xa, 0x20, + 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x34, + 0x70, 0x78, 0x3b, 0xa, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3a, 0x36, 0x30, 0x25, 0x3b, 0xa, 0xa, 0x20, 0x20, + 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x32, 0x70, + 0x78, 0x3b, 0xa, 0x9, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x3a, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64, + 0x20, 0x31, 0x70, 0x78, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, + 0x63, 0x64, 0x32, 0x3b, 0xa, 0x20, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x6c, 0x65, + 0x66, 0x74, 0x3b, 0xa, 0x20, 0x20, 0xa, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x39, + 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, + 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x61, 0x72, + 0x69, 0x61, 0x6c, 0x2c, 0x68, 0x65, 0x6c, 0x76, 0x65, 0x74, + 0x69, 0x63, 0x61, 0x3b, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, + 0x64, 0x69, 0x76, 0x2e, 0x6d, 0x65, 0x6e, 0x75, 0x62, 0x6f, + 0x78, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3a, 0x20, 0x32, 0x35, 0x25, 0x3b, 0xa, 0x20, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x30, 0x3b, + 0xa, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x20, + 0x6c, 0x65, 0x66, 0x74, 0x3b, 0xa, 0x74, 0x65, 0x78, 0x74, + 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x7d, 0xa, 0xa, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0xa, 0x7b, 0x20, 0x20, 0xa, 0x20, 0x20, 0x6d, + 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x20, 0x34, 0x70, 0x78, + 0x3b, 0xa, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, + 0x36, 0x30, 0x25, 0x3b, 0xa, 0xa, 0x20, 0x20, 0x70, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x32, 0x70, 0x78, 0x3b, + 0xa, 0xa, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x3a, 0x20, 0x31, 0x70, 0x78, 0x20, 0x64, 0x6f, 0x74, 0x74, + 0x65, 0x64, 0x3b, 0xa, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3a, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3b, + 0xa, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, + 0x69, 0x7a, 0x65, 0x3a, 0x38, 0x70, 0x74, 0x3b, 0xa, 0x20, + 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, + 0x6c, 0x79, 0x3a, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x2c, 0x68, + 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x3b, 0x20, + 0x20, 0xa, 0xa, 0x7d, 0xa, 0xa, 0x70, 0x2e, 0x69, 0x6e, + 0x74, 0x72, 0x6f, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3a, + 0x32, 0x30, 0x70, 0x78, 0x3b, 0xa, 0x20, 0x20, 0x6d, 0x61, + 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x3a, 0x32, 0x30, 0x70, 0x78, 0x3b, 0xa, 0xa, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, + 0x31, 0x30, 0x70, 0x74, 0x3b, 0xa, 0x2f, 0x2a, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x3a, 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x20, 0x2a, 0x2f, + 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, + 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x61, 0x72, 0x69, 0x61, 0x6c, + 0x2c, 0x68, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, + 0x3b, 0x20, 0x20, 0xa, 0x7d, 0xa, 0xa, 0x70, 0x2e, 0x63, + 0x6c, 0x69, 0x6e, 0x6b, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x66, + 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, + 0x32, 0x70, 0x74, 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, + 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x63, + 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72, 0x2c, 0x6d, 0x6f, 0x6e, + 0x6f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3b, 0x20, 0x20, 0xa, + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3a, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, + 0xa, 0x7d, 0xa, 0xa, 0x70, 0x2e, 0x63, 0x6c, 0x69, 0x6e, + 0x6b, 0x39, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, + 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x39, 0x70, 0x74, + 0x3b, 0xa, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, + 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, 0x63, 0x6f, 0x75, 0x72, + 0x69, 0x65, 0x72, 0x2c, 0x6d, 0x6f, 0x6e, 0x6f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x3b, 0x20, 0x20, 0xa, 0x20, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, + 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0xa, 0x7d, 0xa, + 0xa, 0xa, 0x70, 0xa, 0x7b, 0xa, 0x20, 0x20, 0x70, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x6c, 0x65, 0x66, 0x74, + 0x3a, 0x31, 0x30, 0x70, 0x78, 0x3b, 0xa, 0x7d, 0xa, 0xa, + 0x70, 0x2e, 0x72, 0x69, 0x67, 0x68, 0x74, 0xa, 0x7b, 0xa, + 0x20, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, + 0x67, 0x6e, 0x3a, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x20, + 0xa, 0x7d, 0xa, 0xa, 0}; + +static const unsigned char data_tcp_shtml[] = { + /* /tcp.shtml */ + 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31, + 0x3e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x3c, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x3e, 0xa, + 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, + 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x3c, 0x2f, + 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, + 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x68, + 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54, 0x69, 0x6d, 0x65, 0x72, + 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x46, + 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, + 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x25, 0x21, 0x20, 0x74, 0x63, + 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0xa, 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x66, + 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, +0}; + +static const unsigned char data_fade_png[] = { + /* /fade.png */ + 0x2f, 0x66, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0, + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 00, 00, + 00, 0xd, 0x49, 0x48, 0x44, 0x52, 00, 00, 00, 0x4, + 00, 00, 00, 0xa, 0x8, 0x2, 00, 00, 00, 0x1c, + 0x99, 0x68, 0x59, 00, 00, 00, 0x9, 0x70, 0x48, 0x59, + 0x73, 00, 00, 0xb, 0x13, 00, 00, 0xb, 0x13, 0x1, + 00, 0x9a, 0x9c, 0x18, 00, 00, 00, 0x7, 0x74, 0x49, + 0x4d, 0x45, 0x7, 0xd6, 0x6, 0x8, 0x14, 0x1b, 0x39, 0xaf, + 0x5b, 0xc0, 0xe3, 00, 00, 00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 00, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, + 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, + 0xef, 0x64, 0x25, 0x6e, 00, 00, 00, 0x3a, 0x49, 0x44, + 0x41, 0x54, 0x8, 0xd7, 0x75, 0x8c, 0x31, 0x12, 00, 0x10, + 0x10, 0xc4, 0x2e, 0x37, 0x9e, 0x40, 0x65, 0xfd, 0xff, 0x83, + 0xf4, 0xa, 0x1c, 0x8d, 0x54, 0x9b, 0xc9, 0xcc, 0x9a, 0x3d, + 0x90, 0x73, 0x71, 0x67, 0x91, 0xd4, 0x74, 0x36, 0xa9, 0x55, + 0x1, 0xf8, 0x29, 0x58, 0xc8, 0xbf, 0x48, 0xc4, 0x81, 0x74, + 0xb, 0xa3, 0xf, 0x7c, 0xdb, 0x4, 0xe8, 0x40, 0x5, 0xdf, + 0xa1, 0xf3, 0xfc, 0x73, 00, 00, 00, 00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 0}; + +static const unsigned char data_stats_shtml[] = { + /* /stats.shtml */ + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0, + 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0xa, 0x3c, 0x68, 0x31, + 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x3c, + 0x2f, 0x68, 0x31, 0x3e, 0xa, 0x3c, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3e, 0xa, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x33, 0x30, + 0x30, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, + 0x22, 0x30, 0x22, 0x3e, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, + 0x74, 0x64, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0xa, 0x49, + 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, + 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, + 0x73, 0x65, 0x6e, 0x74, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x49, 0x50, 0x20, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, 0x20, 0x20, 0x20, + 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, + 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x68, + 0x69, 0x67, 0x68, 0x20, 0x62, 0x79, 0x74, 0x65, 0xa, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x2c, 0x20, 0x6c, 0x6f, 0x77, 0x20, 0x62, 0x79, 0x74, + 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x66, 0x72, + 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x57, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0xa, 0x49, 0x43, 0x4d, 0x50, 0x9, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x54, 0x79, 0x70, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0xa, 0x54, 0x43, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0xa, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, + 0x61, 0x74, 0x61, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, + 0x41, 0x43, 0x4b, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, + 0x73, 0x65, 0x74, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0xa, 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x20, + 0x74, 0x6f, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x20, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0xa, 0x3c, 0x2f, 0x70, 0x72, + 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, + 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x25, 0x21, 0x20, 0x6e, + 0x65, 0x74, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x73, 0xa, 0x3c, + 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x3e, 0xa, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3e, 0xa, 0x25, 0x21, 0x3a, 0x20, 0x2f, 0x66, + 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2e, 0x68, 0x74, 0x6d, 0x6c, + 0xa, 0}; + +const struct httpd_fsdata_file file_processes_shtml[] = {{NULL, data_processes_shtml, data_processes_shtml + 17, sizeof(data_processes_shtml) - 17}}; + +const struct httpd_fsdata_file file_404_html[] = {{file_processes_shtml, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}}; + +const struct httpd_fsdata_file file_files_shtml[] = {{file_404_html, data_files_shtml, data_files_shtml + 13, sizeof(data_files_shtml) - 13}}; + +const struct httpd_fsdata_file file_footer_html[] = {{file_files_shtml, data_footer_html, data_footer_html + 13, sizeof(data_footer_html) - 13}}; + +const struct httpd_fsdata_file file_header_html[] = {{file_footer_html, data_header_html, data_header_html + 13, sizeof(data_header_html) - 13}}; + +const struct httpd_fsdata_file file_index_html[] = {{file_header_html, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}}; + +const struct httpd_fsdata_file file_style_css[] = {{file_index_html, data_style_css, data_style_css + 11, sizeof(data_style_css) - 11}}; + +const struct httpd_fsdata_file file_tcp_shtml[] = {{file_style_css, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}}; + +const struct httpd_fsdata_file file_fade_png[] = {{file_tcp_shtml, data_fade_png, data_fade_png + 10, sizeof(data_fade_png) - 10}}; + +const struct httpd_fsdata_file file_stats_shtml[] = {{file_fade_png, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}}; + +#define HTTPD_FS_ROOT file_stats_shtml + +#define HTTPD_FS_NUMFILES 10 diff --git a/components/net/uip/apps/webserver/httpd-fsdata.h b/components/net/uip/apps/webserver/httpd-fsdata.h new file mode 100644 index 0000000000..0ad2d6e785 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd-fsdata.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd-fsdata.h,v 1.1 2006/06/07 09:13:08 adam Exp $ + */ +#ifndef __HTTPD_FSDATA_H__ +#define __HTTPD_FSDATA_H__ + +#include "uip.h" + +struct httpd_fsdata_file { + const struct httpd_fsdata_file *next; + const char *name; + const char *data; + const int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +struct httpd_fsdata_file_noconst { + struct httpd_fsdata_file *next; + char *name; + char *data; + int len; +#ifdef HTTPD_FS_STATISTICS +#if HTTPD_FS_STATISTICS == 1 + u16_t count; +#endif /* HTTPD_FS_STATISTICS */ +#endif /* HTTPD_FS_STATISTICS */ +}; + +#endif /* __HTTPD_FSDATA_H__ */ diff --git a/components/net/uip/apps/webserver/httpd.c b/components/net/uip/apps/webserver/httpd.c new file mode 100644 index 0000000000..937e138252 --- /dev/null +++ b/components/net/uip/apps/webserver/httpd.c @@ -0,0 +1,338 @@ +/** + * \addtogroup apps + * @{ + */ + +/** + * \defgroup httpd Web server + * @{ + * The uIP web server is a very simplistic implementation of an HTTP + * server. It can serve web pages and files from a read-only ROM + * filesystem, and provides a very small scripting language. + + */ + +/** + * \file + * Web server + * \author + * Adam Dunkels + */ + + +/* + * Copyright (c) 2004, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $ + */ + +#include "uip.h" +#include "httpd.h" +#include "httpd-fs.h" +#include "httpd-cgi.h" +#include "http-strings.h" + +#include + +#define STATE_WAITING 0 +#define STATE_OUTPUT 1 + +#define ISO_nl 0x0a +#define ISO_space 0x20 +#define ISO_bang 0x21 +#define ISO_percent 0x25 +#define ISO_period 0x2e +#define ISO_slash 0x2f +#define ISO_colon 0x3a + + +/*---------------------------------------------------------------------------*/ +static unsigned short +generate_part_of_file(void *state) +{ + struct httpd_state *s = (struct httpd_state *)state; + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + memcpy(uip_appdata, s->file.data, s->len); + + return s->len; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + do { + PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s); + s->file.len -= s->len; + s->file.data += s->len; + } while(s->file.len > 0); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_part_of_file(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND(&s->sout, s->file.data, s->len); + + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static void +next_scriptstate(struct httpd_state *s) +{ + char *p; + p = strchr(s->scriptptr, ISO_nl) + 1; + s->scriptlen -= (unsigned short)(p - s->scriptptr); + s->scriptptr = p; +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_script(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->scriptpt); + + + while(s->file.len > 0) { + + /* Check if we should start executing a script. */ + if(*s->file.data == ISO_percent && + *(s->file.data + 1) == ISO_bang) { + s->scriptptr = s->file.data + 3; + s->scriptlen = s->file.len - 3; + if(*(s->scriptptr - 1) == ISO_colon) { + httpd_fs_open(s->scriptptr + 1, &s->file); + PT_WAIT_THREAD(&s->scriptpt, send_file(s)); + } else { + PT_WAIT_THREAD(&s->scriptpt, + httpd_cgi(s->scriptptr)(s, s->scriptptr)); + } + next_scriptstate(s); + + /* The script is over, so we reset the pointers and continue + sending the rest of the file. */ + s->file.data = s->scriptptr; + s->file.len = s->scriptlen; + } else { + /* See if we find the start of script marker in the block of HTML + to be sent. */ + + if(s->file.len > uip_mss()) { + s->len = uip_mss(); + } else { + s->len = s->file.len; + } + + if(*s->file.data == ISO_percent) { + ptr = strchr(s->file.data + 1, ISO_percent); + } else { + ptr = strchr(s->file.data, ISO_percent); + } + if(ptr != NULL && + ptr != s->file.data) { + s->len = (int)(ptr - s->file.data); + if(s->len >= uip_mss()) { + s->len = uip_mss(); + } + } + PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s)); + s->file.data += s->len; + s->file.len -= s->len; + + } + } + + PT_END(&s->scriptpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr)) +{ + char *ptr; + + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND_STR(&s->sout, statushdr); + + ptr = strrchr(s->filename, ISO_period); + if(ptr == NULL) { + PSOCK_SEND_STR(&s->sout, http_content_type_binary); + } else if(strncmp(http_html, ptr, 5) == 0 || + strncmp(http_shtml, ptr, 6) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_html); + } else if(strncmp(http_css, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_css); + } else if(strncmp(http_png, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_png); + } else if(strncmp(http_gif, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_gif); + } else if(strncmp(http_jpg, ptr, 4) == 0) { + PSOCK_SEND_STR(&s->sout, http_content_type_jpg); + } else { + PSOCK_SEND_STR(&s->sout, http_content_type_plain); + } + PSOCK_END(&s->sout); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_output(struct httpd_state *s)) +{ + char *ptr; + + PT_BEGIN(&s->outputpt); + + if(!httpd_fs_open(s->filename, &s->file)) { + httpd_fs_open(http_404_html, &s->file); + strcpy(s->filename, http_404_html); + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_404)); + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_headers(s, + http_header_200)); + ptr = strchr(s->filename, ISO_period); + if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) { + PT_INIT(&s->scriptpt); + PT_WAIT_THREAD(&s->outputpt, handle_script(s)); + } else { + PT_WAIT_THREAD(&s->outputpt, + send_file(s)); + } + } + PSOCK_CLOSE(&s->sout); + PT_END(&s->outputpt); +} +/*---------------------------------------------------------------------------*/ +static +PT_THREAD(handle_input(struct httpd_state *s)) +{ + PSOCK_BEGIN(&s->sin); + + PSOCK_READTO(&s->sin, ISO_space); + + + if(strncmp(s->inputbuf, http_get, 4) != 0) { + PSOCK_CLOSE_EXIT(&s->sin); + } + PSOCK_READTO(&s->sin, ISO_space); + + if(s->inputbuf[0] != ISO_slash) { + PSOCK_CLOSE_EXIT(&s->sin); + } + + if(s->inputbuf[1] == ISO_space) { + strncpy(s->filename, http_index_html, sizeof(s->filename)); + } else { + s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0; + strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename)); + } + + /* httpd_log_file(uip_conn->ripaddr, s->filename);*/ + + s->state = STATE_OUTPUT; + + while(1) { + PSOCK_READTO(&s->sin, ISO_nl); + + if(strncmp(s->inputbuf, http_referer, 8) == 0) { + s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0; + /* httpd_log(&s->inputbuf[9]);*/ + } + } + + PSOCK_END(&s->sin); +} +/*---------------------------------------------------------------------------*/ +static void +handle_connection(struct httpd_state *s) +{ + handle_input(s); + if(s->state == STATE_OUTPUT) { + handle_output(s); + } +} +/*---------------------------------------------------------------------------*/ +void +httpd_appcall(void) +{ + struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate); + + if(uip_closed() || uip_aborted() || uip_timedout()) { + } else if(uip_connected()) { + PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1); + PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1); + PT_INIT(&s->outputpt); + s->state = STATE_WAITING; + /* timer_set(&s->timer, CLOCK_SECOND * 100);*/ + s->timer = 0; + handle_connection(s); + } else if(s != NULL) { + if(uip_poll()) { + ++s->timer; + if(s->timer >= 20) { + uip_abort(); + } + } else { + s->timer = 0; + } + handle_connection(s); + } else { + uip_abort(); + } +} +/*---------------------------------------------------------------------------*/ +/** + * \brief Initialize the web server + * + * This function initializes the web server and should be + * called at system boot-up. + */ +void +httpd_init(void) +{ + uip_listen(HTONS(80)); +} +/*---------------------------------------------------------------------------*/ +/** @} */ diff --git a/components/net/uip/apps/webserver/httpd.h b/components/net/uip/apps/webserver/httpd.h new file mode 100644 index 0000000000..270d49debd --- /dev/null +++ b/components/net/uip/apps/webserver/httpd.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2001-2005, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ + +#ifndef __HTTPD_H__ +#define __HTTPD_H__ + +#include "psock.h" +#include "httpd-fs.h" + +struct httpd_state { + unsigned char timer; + struct psock sin, sout; + struct pt outputpt, scriptpt; + char inputbuf[50]; + char filename[20]; + char state; + struct httpd_fs_file file; + int len; + char *scriptptr; + int scriptlen; + + unsigned short count; +}; + +void httpd_init(void); +void httpd_appcall(void); + +void httpd_log(char *msg); +void httpd_log_file(u16_t *requester, char *file); + +#endif /* __HTTPD_H__ */ diff --git a/components/net/uip/apps/webserver/makefsdata b/components/net/uip/apps/webserver/makefsdata new file mode 100644 index 0000000000..b2109abdb7 --- /dev/null +++ b/components/net/uip/apps/webserver/makefsdata @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +open(OUTPUT, "> httpd-fsdata.c"); + +chdir("httpd-fs"); + +opendir(DIR, "."); +@files = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); +closedir(DIR); + +foreach $file (@files) { + + if(-d $file && $file !~ /^\./) { + print "Processing directory $file\n"; + opendir(DIR, $file); + @newfiles = grep { !/^\./ && !/(CVS|~)/ } readdir(DIR); + closedir(DIR); + printf "Adding files @newfiles\n"; + @files = (@files, map { $_ = "$file/$_" } @newfiles); + next; + } +} + +foreach $file (@files) { + if(-f $file) { + + print "Adding file $file\n"; + + open(FILE, $file) || die "Could not open file $file\n"; + + $file =~ s-^-/-; + $fvar = $file; + $fvar =~ s-/-_-g; + $fvar =~ s-\.-_-g; + # for AVR, add PROGMEM here + print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); + print(OUTPUT "\t/* $file */\n\t"); + for($j = 0; $j < length($file); $j++) { + printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1))); + } + printf(OUTPUT "0,\n"); + + + $i = 0; + while(read(FILE, $data, 1)) { + if($i == 0) { + print(OUTPUT "\t"); + } + printf(OUTPUT "%#02x, ", unpack("C", $data)); + $i++; + if($i == 10) { + print(OUTPUT "\n"); + $i = 0; + } + } + print(OUTPUT "0};\n\n"); + close(FILE); + push(@fvars, $fvar); + push(@pfiles, $file); + } +} + +for($i = 0; $i < @fvars; $i++) { + $file = $pfiles[$i]; + $fvar = $fvars[$i]; + + if($i == 0) { + $prevfile = "NULL"; + } else { + $prevfile = "file" . $fvars[$i - 1]; + } + print(OUTPUT "const struct httpd_fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, "); + print(OUTPUT "data$fvar + ". (length($file) + 1) .", "); + print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n"); +} + +print(OUTPUT "#define HTTPD_FS_ROOT file$fvars[$i - 1]\n\n"); +print(OUTPUT "#define HTTPD_FS_NUMFILES $i\n"); diff --git a/components/net/uip/apps/webserver/makestrings b/components/net/uip/apps/webserver/makestrings new file mode 100644 index 0000000000..20f0e24294 --- /dev/null +++ b/components/net/uip/apps/webserver/makestrings @@ -0,0 +1,40 @@ +#!/usr/bin/perl + + +sub stringify { + my $name = shift(@_); + open(OUTPUTC, "> $name.c"); + open(OUTPUTH, "> $name.h"); + + open(FILE, "$name"); + + while() { + if(/(.+) "(.+)"/) { + $var = $1; + $data = $2; + + $datan = $data; + $datan =~ s/\\r/\r/g; + $datan =~ s/\\n/\n/g; + $datan =~ s/\\01/\01/g; + $datan =~ s/\\0/\0/g; + + printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1); + printf(OUTPUTC "/* \"$data\" */\n"); + printf(OUTPUTC "{"); + for($j = 0; $j < length($datan); $j++) { + printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1))); + } + printf(OUTPUTC "};\n"); + + printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1); + + } + } + close(OUTPUTC); + close(OUTPUTH); +} +stringify("http-strings"); + +exit 0; + diff --git a/components/net/uip/apps/webserver/webserver.h b/components/net/uip/apps/webserver/webserver.h new file mode 100644 index 0000000000..48753e690d --- /dev/null +++ b/components/net/uip/apps/webserver/webserver.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2002, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: webserver.h,v 1.2 2006/06/11 21:46:38 adam Exp $ + * + */ +#ifndef __WEBSERVER_H__ +#define __WEBSERVER_H__ + +#include "httpd.h" + +typedef struct httpd_state uip_tcp_appstate_t; +/* UIP_APPCALL: the name of the application function. This function + must return void and take no arguments (i.e., C type "void + appfunc(void)"). */ +#ifndef UIP_APPCALL +#define UIP_APPCALL httpd_appcall +#endif + + +#endif /* __WEBSERVER_H__ */ diff --git a/components/net/uip/doc/Doxyfile b/components/net/uip/doc/Doxyfile new file mode 100644 index 0000000000..8c6223d524 --- /dev/null +++ b/components/net/uip/doc/Doxyfile @@ -0,0 +1,279 @@ +# Doxyfile 1.4.6 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "uIP 1.0" +PROJECT_NUMBER = +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = ../ \ + ../../ +STRIP_FROM_INC_PATH = +SHORT_NAMES = YES +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = uip-doc.txt \ + pt-doc.txt \ + examples.txt \ + uip-code-style.txt \ + ../uip/uip.h \ + ../uip/uip.c \ + ../uip/uip_arch.h \ + ../uip/uip_arp.h \ + ../uip/uip_arp.c \ + ../unix/uip-conf.h \ + ../uip/uipopt.h \ + ../uip/uip-split.h \ + ../uip/uip-split.c \ + ../uip/uip-neighbor.h \ + ../uip/uip-neighbor.c \ + ../uip/pt.h \ + ../uip/lc.h \ + ../uip/lc-switch.h \ + ../uip/lc-addrlabels.h \ + ../uip/timer.h \ + ../uip/timer.c \ + ../uip/clock.h \ + ../uip/psock.h \ + ../uip/psock.c \ + ../lib/memb.c \ + ../lib/memb.h \ + ../apps/resolv/resolv.h \ + ../apps/resolv/resolv.c \ + ../apps/dhcpc/dhcpc.h \ + ../apps/dhcpc/dhcpc.c \ + ../apps/smtp/smtp.h \ + ../apps/smtp/smtp.c \ + ../apps/telnetd/telnetd.h \ + ../apps/telnetd/telnetd.c \ + ../apps/telnetd/shell.h \ + ../apps/telnetd/shell.c \ + ../apps/hello-world/hello-world.h \ + ../apps/hello-world/hello-world.c \ + ../apps/webclient/webclient.h \ + ../apps/webclient/webclient.c \ + ../apps/webserver/httpd.h \ + ../apps/webserver/httpd-cgi.h \ + ../apps/webserver/httpd-cgi.c \ + ../apps/webserver/httpd.c +FILE_PATTERNS = +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = . ../apps/hello-world ../apps/smtp \ + ../apps/telnetd ../apps/resolv ../apps/webclient \ + ../apps/webserver ../unix ../apps/dhcpc +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = YES +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = YES +BINARY_TOC = YES +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = header.tex +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = UIP_UDP +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = NO +HAVE_DOT = NO +CLASS_GRAPH = NO +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = NO +DIRECTORY_GRAPH = NO +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/components/net/uip/doc/Makefile b/components/net/uip/doc/Makefile new file mode 100644 index 0000000000..249018aa43 --- /dev/null +++ b/components/net/uip/doc/Makefile @@ -0,0 +1,7 @@ +all: htmldoc pdfdoc + +htmldoc: + doxygen Doxyfile + +pdfdoc: htmldoc + cd latex; make refman.pdf && mv refman.pdf ../uip-refman.pdf diff --git a/components/net/uip/doc/README b/components/net/uip/doc/README new file mode 100644 index 0000000000..3a65aef96b --- /dev/null +++ b/components/net/uip/doc/README @@ -0,0 +1,12 @@ +The files in this directory comprise the uIP documentation. The files +are: + +html/ The uIP reference manual in HTML format. + +uip-refman.pdf The uIP reference manual in a printable PDF version. + +mobisys2003.pdf Conference paper about uIP from the First + International Conference on Mobile Systems, + Applications and Services (MobiSys), San + Francisco, May 2003. + diff --git a/components/net/uip/doc/doxygen.sty b/components/net/uip/doc/doxygen.sty new file mode 100644 index 0000000000..15e4f66613 --- /dev/null +++ b/components/net/uip/doc/doxygen.sty @@ -0,0 +1,62 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} +\RequirePackage{calc} +\RequirePackage{array} +\pagestyle{fancyplain} +\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} +\lhead[\fancyplain{}{\bfseries\thepage}] + {\fancyplain{}{\bfseries\rightmark}} +\rhead[\fancyplain{}{\bfseries\leftmark}] + {\fancyplain{}{\bfseries\thepage}} +\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Wed Jun 7 11:37:14 2006 for uIP 1.0-rc0 by doxygen\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Wed Jun 7 11:37:14 2006 for uIP 1.0-rc0 by doxygen}} +\cfoot{} +\newenvironment{CompactList} +{\begin{list}{}{ + \setlength{\leftmargin}{0.5cm} + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \renewcommand{\makelabel}{}}} +{\end{list}} +\newenvironment{CompactItemize} +{ + \begin{itemize} + \setlength{\itemsep}{-3pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \setlength{\partopsep}{0pt} +} +{\end{itemize}} +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} +\newlength{\tmplength} +\newenvironment{TabularC}[1] +{ +\setlength{\tmplength} + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)} + \par\begin{tabular*}{\linewidth} + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|} +} +{\end{tabular*}\par} +\newcommand{\entrylabel}[1]{ + {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\\}}} +\newenvironment{Desc} +{\begin{list}{} + { + \settowidth{\labelwidth}{40pt} + \setlength{\leftmargin}{\labelwidth} + \setlength{\parsep}{0pt} + \setlength{\itemsep}{-4pt} + \renewcommand{\makelabel}{\entrylabel} + } +} +{\end{list}} +\newenvironment{Indent} + {\begin{list}{}{\setlength{\leftmargin}{0.5cm}} + \item[]\ignorespaces} + {\unskip\end{list}} +\setlength{\parindent}{0cm} +\setlength{\parskip}{0.2cm} +\addtocounter{secnumdepth}{1} +\sloppy +\usepackage[T1]{fontenc} diff --git a/components/net/uip/doc/example-mainloop-with-arp.c b/components/net/uip/doc/example-mainloop-with-arp.c new file mode 100644 index 0000000000..7ed72c538b --- /dev/null +++ b/components/net/uip/doc/example-mainloop-with-arp.c @@ -0,0 +1,86 @@ +#include "uip.h" +#include "uip_arp.h" +#include "network-device.h" +#include "httpd.h" +#include "timer.h" + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + +/*---------------------------------------------------------------------------*/ +int +main(void) +{ + int i; + uip_ipaddr_t ipaddr; + struct timer periodic_timer, arp_timer; + + timer_set(&periodic_timer, CLOCK_SECOND / 2); + timer_set(&arp_timer, CLOCK_SECOND * 10); + + network_device_init(); + uip_init(); + + uip_ipaddr(ipaddr, 192,168,0,2); + uip_sethostaddr(ipaddr); + + httpd_init(); + + while(1) { + uip_len = network_device_read(); + if(uip_len > 0) { + if(BUF->type == htons(UIP_ETHTYPE_IP)) { + uip_arp_ipin(); + uip_input(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } + + } else if(timer_expired(&periodic_timer)) { + timer_reset(&periodic_timer); + for(i = 0; i < UIP_CONNS; i++) { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } + +#if UIP_UDP + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } +#endif /* UIP_UDP */ + + /* Call the ARP timer function every 10 seconds. */ + if(timer_expired(&arp_timer)) { + timer_reset(&arp_timer); + uip_arp_timer(); + } + } + } + return 0; +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/doc/example-mainloop-without-arp.c b/components/net/uip/doc/example-mainloop-without-arp.c new file mode 100644 index 0000000000..85800e3ae4 --- /dev/null +++ b/components/net/uip/doc/example-mainloop-without-arp.c @@ -0,0 +1,62 @@ +#include "uip.h" +#include "uip_arp.h" +#include "network-device.h" +#include "httpd.h" +#include "timer.h" + +/*---------------------------------------------------------------------------*/ +int +main(void) +{ + int i; + uip_ipaddr_t ipaddr; + struct timer periodic_timer; + + timer_set(&periodic_timer, CLOCK_SECOND / 2); + + network_device_init(); + uip_init(); + + uip_ipaddr(ipaddr, 192,168,0,2); + uip_sethostaddr(ipaddr); + + httpd_init(); + + while(1) { + uip_len = network_device_read(); + if(uip_len > 0) { + uip_input(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } else if(timer_expired(&periodic_timer)) { + timer_reset(&periodic_timer); + for(i = 0; i < UIP_CONNS; i++) { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } + +#if UIP_UDP + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } +#endif /* UIP_UDP */ + } + } + return 0; +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/doc/examples.txt b/components/net/uip/doc/examples.txt new file mode 100644 index 0000000000..31edddc381 --- /dev/null +++ b/components/net/uip/doc/examples.txt @@ -0,0 +1,34 @@ +/** +\defgroup apps Applications +@{ + +The uIP distribution contains a number of example applications that +can be either used directory or studied when learning to develop +applications for uIP. + +*/ + +/** \example hello-world.c */ +/** \example hello-world.h */ + +/** \example smtp.c */ +/** \example smtp.h */ + +/** \example webclient.c */ +/** \example webclient.h */ + +/** \example example-mainloop-with-arp.c */ +/** \example example-mainloop-without-arp.c */ + +/** \example telnetd.c */ +/** \example telnetd.h */ + +/** \example resolv.c */ +/** \example resolv.h */ + +/** \example dhcpc.c */ +/** \example dhcpc.h */ + +/** \example uip-conf.h */ + +/** @} */ diff --git a/components/net/uip/doc/header.tex b/components/net/uip/doc/header.tex new file mode 100644 index 0000000000..ce91c30f28 --- /dev/null +++ b/components/net/uip/doc/header.tex @@ -0,0 +1,53 @@ +\documentclass[a4paper]{book} +\usepackage{a4wide} +\usepackage{makeidx} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage{times} +\ifx\pdfoutput\undefined +\usepackage[ps2pdf, + pagebackref=true, + colorlinks=true, + linkcolor=blue + ]{hyperref} +\usepackage{pspicture} +\else +\usepackage[pdftex, + pagebackref=true, + colorlinks=true, + linkcolor=blue + ]{hyperref} +\fi +\usepackage{doxygen} +\makeindex +\setcounter{tocdepth}{1} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\begin{titlepage} +\vspace*{5cm} +\begin{center} +{\Huge The uIP Embedded TCP/IP Stack}\\ +\vspace*{1cm} +{\LARGE The uIP 1.0 Reference Manual}\\ +\vspace*{3cm} +{\Large June 2006}\\ +\vspace*{2cm} +\includegraphics[width=6cm]{../sicslogo.pdf}\\ +\vspace*{1cm} +{\Large Adam Dunkels}\\ +{\Large \texttt{adam@sics.se}}\\ +\vspace*{1cm} +{\LARGE Swedish Institute of Computer Science}\\ +\vspace*{0.5cm} + +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} diff --git a/components/net/uip/doc/html/a00036.html b/components/net/uip/doc/html/a00036.html new file mode 100644 index 0000000000..9ee3cf2840 --- /dev/null +++ b/components/net/uip/doc/html/a00036.html @@ -0,0 +1,120 @@ + + +uIP 1.0: hello-world.c + + + + + +

hello-world.c

00001 /**
+00002  * \addtogroup helloworld
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  *         An example of how to write uIP applications
+00009  *         with protosockets.
+00010  * \author
+00011  *         Adam Dunkels <adam@sics.se>
+00012  */
+00013 
+00014 /*
+00015  * This is a short example of how to write uIP applications using
+00016  * protosockets.
+00017  */
+00018 
+00019 /*
+00020  * We define the application state (struct hello_world_state) in the
+00021  * hello-world.h file, so we need to include it here. We also include
+00022  * uip.h (since this cannot be included in hello-world.h) and
+00023  * <string.h>, since we use the memcpy() function in the code.
+00024  */
+00025 #include "hello-world.h"
+00026 #include "uip.h"
+00027 #include <string.h>
+00028 
+00029 /*
+00030  * Declaration of the protosocket function that handles the connection
+00031  * (defined at the end of the code).
+00032  */
+00033 static int handle_connection(struct hello_world_state *s);
+00034 /*---------------------------------------------------------------------------*/
+00035 /*
+00036  * The initialization function. We must explicitly call this function
+00037  * from the system initialization code, some time after uip_init() is
+00038  * called.
+00039  */
+00040 void
+00041 hello_world_init(void)
+00042 {
+00043   /* We start to listen for connections on TCP port 1000. */
+00044   uip_listen(HTONS(1000));
+00045 }
+00046 /*---------------------------------------------------------------------------*/
+00047 /*
+00048  * In hello-world.h we have defined the UIP_APPCALL macro to
+00049  * hello_world_appcall so that this funcion is uIP's application
+00050  * function. This function is called whenever an uIP event occurs
+00051  * (e.g. when a new connection is established, new data arrives, sent
+00052  * data is acknowledged, data needs to be retransmitted, etc.).
+00053  */
+00054 void
+00055 hello_world_appcall(void)
+00056 {
+00057   /*
+00058    * The uip_conn structure has a field called "appstate" that holds
+00059    * the application state of the connection. We make a pointer to
+00060    * this to access it easier.
+00061    */
+00062   struct hello_world_state *s = &(uip_conn->appstate);
+00063 
+00064   /*
+00065    * If a new connection was just established, we should initialize
+00066    * the protosocket in our applications' state structure.
+00067    */
+00068   if(uip_connected()) {
+00069     PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));
+00070   }
+00071 
+00072   /*
+00073    * Finally, we run the protosocket function that actually handles
+00074    * the communication. We pass it a pointer to the application state
+00075    * of the current connection.
+00076    */
+00077   handle_connection(s);
+00078 }
+00079 /*---------------------------------------------------------------------------*/
+00080 /*
+00081  * This is the protosocket function that handles the communication. A
+00082  * protosocket function must always return an int, but must never
+00083  * explicitly return - all return statements are hidden in the PSOCK
+00084  * macros.
+00085  */
+00086 static int
+00087 handle_connection(struct hello_world_state *s)
+00088 {
+00089   PSOCK_BEGIN(&s->p);
+00090 
+00091   PSOCK_SEND_STR(&s->p, "Hello. What is your name?\n");
+00092   PSOCK_READTO(&s->p, '\n');
+00093   strncpy(s->name, s->inputbuffer, sizeof(s->name));
+00094   PSOCK_SEND_STR(&s->p, "Hello ");
+00095   PSOCK_SEND_STR(&s->p, s->name);
+00096   PSOCK_CLOSE(&s->p);
+00097   
+00098   PSOCK_END(&s->p);
+00099 }
+00100 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00037.html b/components/net/uip/doc/html/a00037.html new file mode 100644 index 0000000000..13d709be48 --- /dev/null +++ b/components/net/uip/doc/html/a00037.html @@ -0,0 +1,72 @@ + + +uIP 1.0: hello-world.h + + + + + +

hello-world.h

00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup helloworld Hello, world
+00008  * @{
+00009  *
+00010  * A small example showing how to write applications with
+00011  * \ref psock "protosockets".
+00012  */
+00013 
+00014 /**
+00015  * \file
+00016  *         Header file for an example of how to write uIP applications
+00017  *         with protosockets.
+00018  * \author
+00019  *         Adam Dunkels <adam@sics.se>
+00020  */
+00021 
+00022 #ifndef __HELLO_WORLD_H__
+00023 #define __HELLO_WORLD_H__
+00024 
+00025 /* Since this file will be included by uip.h, we cannot include uip.h
+00026    here. But we might need to include uipopt.h if we need the u8_t and
+00027    u16_t datatypes. */
+00028 #include "uipopt.h"
+00029 
+00030 #include "psock.h"
+00031 
+00032 /* Next, we define the uip_tcp_appstate_t datatype. This is the state
+00033    of our application, and the memory required for this state is
+00034    allocated together with each TCP connection. One application state
+00035    for each TCP connection. */
+00036 typedef struct hello_world_state {
+00037   struct psock p;
+00038   char inputbuffer[10];
+00039   char name[40];
+00040 } uip_tcp_appstate_t;
+00041 
+00042 /* Finally we define the application function to be called by uIP. */
+00043 void hello_world_appcall(void);
+00044 #ifndef UIP_APPCALL
+00045 #define UIP_APPCALL hello_world_appcall
+00046 #endif /* UIP_APPCALL */
+00047 
+00048 void hello_world_init(void);
+00049 
+00050 #endif /* __HELLO_WORLD_H__ */
+00051 /** @} */
+00052 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00038.html b/components/net/uip/doc/html/a00038.html new file mode 100644 index 0000000000..f62a2738bc --- /dev/null +++ b/components/net/uip/doc/html/a00038.html @@ -0,0 +1,282 @@ + + +uIP 1.0: smtp.c + + + + + +

smtp.c

00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup smtp SMTP E-mail sender
+00008  * @{
+00009  *
+00010  * The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is
+00011  * the standard way of sending and transfering e-mail on the
+00012  * Internet. This simple example implementation is intended as an
+00013  * example of how to implement protocols in uIP, and is able to send
+00014  * out e-mail but has not been extensively tested.
+00015  */
+00016 
+00017 /**
+00018  * \file
+00019  * SMTP example implementation
+00020  * \author Adam Dunkels <adam@dunkels.com>
+00021  */
+00022 
+00023 /*
+00024  * Copyright (c) 2004, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above copyright
+00033  *    notice, this list of conditions and the following disclaimer in the
+00034  *    documentation and/or other materials provided with the distribution.
+00035  * 3. Neither the name of the Institute nor the names of its contributors
+00036  *    may be used to endorse or promote products derived from this software
+00037  *    without specific prior written permission.
+00038  *
+00039  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00040  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00041  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00042  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00043  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00044  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00045  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00046  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00047  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00048  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00049  * SUCH DAMAGE.
+00050  *
+00051  * This file is part of the uIP TCP/IP stack.
+00052  *
+00053  * Author: Adam Dunkels <adam@sics.se>
+00054  *
+00055  * $Id: smtp.c,v 1.4 2006/06/11 21:46:37 adam Exp $
+00056  */
+00057 #include "smtp.h"
+00058 
+00059 #include "smtp-strings.h"
+00060 #include "psock.h"
+00061 #include "uip.h"
+00062 
+00063 #include <string.h>
+00064 
+00065 static struct smtp_state s;
+00066 
+00067 static char *localhostname;
+00068 static uip_ipaddr_t smtpserver;
+00069 
+00070 #define ISO_nl 0x0a
+00071 #define ISO_cr 0x0d
+00072 
+00073 #define ISO_period 0x2e
+00074 
+00075 #define ISO_2  0x32
+00076 #define ISO_3  0x33
+00077 #define ISO_4  0x34
+00078 #define ISO_5  0x35
+00079 
+00080 
+00081 /*---------------------------------------------------------------------------*/
+00082 static
+00083 PT_THREAD(smtp_thread(void))
+00084 {
+00085   PSOCK_BEGIN(&s.psock);
+00086 
+00087   PSOCK_READTO(&s.psock, ISO_nl);
+00088    
+00089   if(strncmp(s.inputbuffer, smtp_220, 3) != 0) {
+00090     PSOCK_CLOSE(&s.psock);
+00091     smtp_done(2);
+00092     PSOCK_EXIT(&s.psock);
+00093   }
+00094   
+00095   PSOCK_SEND_STR(&s.psock, (char *)smtp_helo);
+00096   PSOCK_SEND_STR(&s.psock, localhostname);
+00097   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00098 
+00099   PSOCK_READTO(&s.psock, ISO_nl);
+00100   
+00101   if(s.inputbuffer[0] != ISO_2) {
+00102     PSOCK_CLOSE(&s.psock);
+00103     smtp_done(3);
+00104     PSOCK_EXIT(&s.psock);
+00105   }
+00106 
+00107   PSOCK_SEND_STR(&s.psock, (char *)smtp_mail_from);
+00108   PSOCK_SEND_STR(&s.psock, s.from);
+00109   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00110 
+00111   PSOCK_READTO(&s.psock, ISO_nl);
+00112   
+00113   if(s.inputbuffer[0] != ISO_2) {
+00114     PSOCK_CLOSE(&s.psock);
+00115     smtp_done(4);
+00116     PSOCK_EXIT(&s.psock);
+00117   }
+00118 
+00119   PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to);
+00120   PSOCK_SEND_STR(&s.psock, s.to);
+00121   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00122 
+00123   PSOCK_READTO(&s.psock, ISO_nl);
+00124   
+00125   if(s.inputbuffer[0] != ISO_2) {
+00126     PSOCK_CLOSE(&s.psock);
+00127     smtp_done(5);
+00128     PSOCK_EXIT(&s.psock);
+00129   }
+00130   
+00131   if(s.cc != 0) {
+00132     PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to);
+00133     PSOCK_SEND_STR(&s.psock, s.cc);
+00134     PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00135 
+00136     PSOCK_READTO(&s.psock, ISO_nl);
+00137   
+00138     if(s.inputbuffer[0] != ISO_2) {
+00139       PSOCK_CLOSE(&s.psock);
+00140       smtp_done(6);
+00141       PSOCK_EXIT(&s.psock);
+00142     }
+00143   }
+00144   
+00145   PSOCK_SEND_STR(&s.psock, (char *)smtp_data);
+00146   
+00147   PSOCK_READTO(&s.psock, ISO_nl);
+00148   
+00149   if(s.inputbuffer[0] != ISO_3) {
+00150     PSOCK_CLOSE(&s.psock);
+00151     smtp_done(7);
+00152     PSOCK_EXIT(&s.psock);
+00153   }
+00154 
+00155   PSOCK_SEND_STR(&s.psock, (char *)smtp_to);
+00156   PSOCK_SEND_STR(&s.psock, s.to);
+00157   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00158   
+00159   if(s.cc != 0) {
+00160     PSOCK_SEND_STR(&s.psock, (char *)smtp_cc);
+00161     PSOCK_SEND_STR(&s.psock, s.cc);
+00162     PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00163   }
+00164   
+00165   PSOCK_SEND_STR(&s.psock, (char *)smtp_from);
+00166   PSOCK_SEND_STR(&s.psock, s.from);
+00167   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00168   
+00169   PSOCK_SEND_STR(&s.psock, (char *)smtp_subject);
+00170   PSOCK_SEND_STR(&s.psock, s.subject);
+00171   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00172 
+00173   PSOCK_SEND(&s.psock, s.msg, s.msglen);
+00174   
+00175   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnlperiodcrnl);
+00176 
+00177   PSOCK_READTO(&s.psock, ISO_nl);
+00178   if(s.inputbuffer[0] != ISO_2) {
+00179     PSOCK_CLOSE(&s.psock);
+00180     smtp_done(8);
+00181     PSOCK_EXIT(&s.psock);
+00182   }
+00183 
+00184   PSOCK_SEND_STR(&s.psock, (char *)smtp_quit);
+00185   smtp_done(SMTP_ERR_OK);
+00186   PSOCK_END(&s.psock);
+00187 }
+00188 /*---------------------------------------------------------------------------*/
+00189 void
+00190 smtp_appcall(void)
+00191 {
+00192   if(uip_closed()) {
+00193     s.connected = 0;
+00194     return;
+00195   }
+00196   if(uip_aborted() || uip_timedout()) {
+00197     s.connected = 0;
+00198     smtp_done(1);
+00199     return;
+00200   }
+00201   smtp_thread();
+00202 }
+00203 /*---------------------------------------------------------------------------*/
+00204 /**
+00205  * Specificy an SMTP server and hostname.
+00206  *
+00207  * This function is used to configure the SMTP module with an SMTP
+00208  * server and the hostname of the host.
+00209  *
+00210  * \param lhostname The hostname of the uIP host.
+00211  *
+00212  * \param server A pointer to a 4-byte array representing the IP
+00213  * address of the SMTP server to be configured.
+00214  */
+00215 void
+00216 smtp_configure(char *lhostname, void *server)
+00217 {
+00218   localhostname = lhostname;
+00219   uip_ipaddr_copy(smtpserver, server);
+00220 }
+00221 /*---------------------------------------------------------------------------*/
+00222 /**
+00223  * Send an e-mail.
+00224  *
+00225  * \param to The e-mail address of the receiver of the e-mail.
+00226  * \param cc The e-mail address of the CC: receivers of the e-mail.
+00227  * \param from The e-mail address of the sender of the e-mail.
+00228  * \param subject The subject of the e-mail.
+00229  * \param msg The actual e-mail message.
+00230  * \param msglen The length of the e-mail message.
+00231  */
+00232 unsigned char
+00233 smtp_send(char *to, char *cc, char *from,
+00234           char *subject, char *msg, u16_t msglen)
+00235 {
+00236   struct uip_conn *conn;
+00237 
+00238   conn = uip_connect(smtpserver, HTONS(25));
+00239   if(conn == NULL) {
+00240     return 0;
+00241   }
+00242   s.connected = 1;
+00243   s.to = to;
+00244   s.cc = cc;
+00245   s.from = from;
+00246   s.subject = subject;
+00247   s.msg = msg;
+00248   s.msglen = msglen;
+00249 
+00250   PSOCK_INIT(&s.psock, s.inputbuffer, sizeof(s.inputbuffer));
+00251   
+00252   return 1;
+00253 }
+00254 /*---------------------------------------------------------------------------*/
+00255 void
+00256 smtp_init(void)
+00257 {
+00258   s.connected = 0;
+00259 }
+00260 /*---------------------------------------------------------------------------*/
+00261 /** @} */
+00262 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00039.html b/components/net/uip/doc/html/a00039.html new file mode 100644 index 0000000000..fb02d5ad46 --- /dev/null +++ b/components/net/uip/doc/html/a00039.html @@ -0,0 +1,123 @@ + + +uIP 1.0: smtp.h + + + + + +

smtp.h

00001 
+00002 /**
+00003  * \addtogroup smtp
+00004  * @{
+00005  */
+00006 
+00007 
+00008 /**
+00009  * \file
+00010  * SMTP header file
+00011  * \author Adam Dunkels <adam@dunkels.com>
+00012  */
+00013 
+00014 /*
+00015  * Copyright (c) 2002, Adam Dunkels.
+00016  * All rights reserved.
+00017  *
+00018  * Redistribution and use in source and binary forms, with or without
+00019  * modification, are permitted provided that the following conditions
+00020  * are met:
+00021  * 1. Redistributions of source code must retain the above copyright
+00022  *    notice, this list of conditions and the following disclaimer.
+00023  * 2. Redistributions in binary form must reproduce the above copyright
+00024  *    notice, this list of conditions and the following disclaimer in the
+00025  *    documentation and/or other materials provided with the distribution.
+00026  * 3. The name of the author may not be used to endorse or promote
+00027  *    products derived from this software without specific prior
+00028  *    written permission.
+00029  *
+00030  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00031  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00032  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00033  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00034  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00035  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00036  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00037  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00038  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00039  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00040  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00041  *
+00042  * This file is part of the uIP TCP/IP stack.
+00043  *
+00044  * $Id: smtp.h,v 1.4 2006/06/11 21:46:37 adam Exp $
+00045  *
+00046  */
+00047 #ifndef __SMTP_H__
+00048 #define __SMTP_H__
+00049 
+00050 #include "uipopt.h"
+00051 
+00052 /**
+00053  * Error number that signifies a non-error condition.
+00054  */
+00055 #define SMTP_ERR_OK 0
+00056 
+00057 /**
+00058  * Callback function that is called when an e-mail transmission is
+00059  * done.
+00060  *
+00061  * This function must be implemented by the module that uses the SMTP
+00062  * module.
+00063  *
+00064  * \param error The number of the error if an error occured, or
+00065  * SMTP_ERR_OK.
+00066  */
+00067 void smtp_done(unsigned char error);
+00068 
+00069 void smtp_init(void);
+00070 
+00071 /* Functions. */
+00072 void smtp_configure(char *localhostname, u16_t *smtpserver);
+00073 unsigned char smtp_send(char *to, char *from,
+00074                         char *subject, char *msg,
+00075                         u16_t msglen);
+00076 #define SMTP_SEND(to, cc, from, subject, msg) \
+00077         smtp_send(to, cc, from, subject, msg, strlen(msg))
+00078 
+00079 void smtp_appcall(void);
+00080 
+00081 struct smtp_state {
+00082   u8_t state;
+00083   char *to;
+00084   char *from;
+00085   char *subject;
+00086   char *msg;
+00087   u16_t msglen;
+00088   
+00089   u16_t sentlen, textlen;
+00090   u16_t sendptr;
+00091 
+00092 };
+00093 
+00094 
+00095 #ifndef UIP_APPCALL
+00096 #define UIP_APPCALL     smtp_appcall
+00097 #endif
+00098 typedef struct smtp_state uip_tcp_appstate_t;
+00099 
+00100 
+00101 #endif /* __SMTP_H__ */
+00102 
+00103 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00040.html b/components/net/uip/doc/html/a00040.html new file mode 100644 index 0000000000..1b1f55425a --- /dev/null +++ b/components/net/uip/doc/html/a00040.html @@ -0,0 +1,459 @@ + + +uIP 1.0: webclient.c + + + + + +

webclient.c

00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup webclient Web client
+00008  * @{
+00009  *
+00010  * This example shows a HTTP client that is able to download web pages
+00011  * and files from web servers. It requires a number of callback
+00012  * functions to be implemented by the module that utilizes the code:
+00013  * webclient_datahandler(), webclient_connected(),
+00014  * webclient_timedout(), webclient_aborted(), webclient_closed().
+00015  */
+00016 
+00017 /**
+00018  * \file
+00019  * Implementation of the HTTP client.
+00020  * \author Adam Dunkels <adam@dunkels.com>
+00021  */
+00022 
+00023 /*
+00024  * Copyright (c) 2002, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above
+00033  *    copyright notice, this list of conditions and the following
+00034  *    disclaimer in the documentation and/or other materials provided
+00035  *    with the distribution.
+00036  * 3. The name of the author may not be used to endorse or promote
+00037  *    products derived from this software without specific prior
+00038  *    written permission.
+00039  *
+00040  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00041  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00042  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00043  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00044  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00045  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00046  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00047  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00048  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00049  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00050  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00051  *
+00052  * This file is part of the uIP TCP/IP stack.
+00053  *
+00054  * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00055  *
+00056  */
+00057 
+00058 #include "uip.h"
+00059 #include "uiplib.h"
+00060 #include "webclient.h"
+00061 #include "resolv.h"
+00062 
+00063 #include <string.h>
+00064 
+00065 #define WEBCLIENT_TIMEOUT 100
+00066 
+00067 #define WEBCLIENT_STATE_STATUSLINE 0
+00068 #define WEBCLIENT_STATE_HEADERS    1
+00069 #define WEBCLIENT_STATE_DATA       2
+00070 #define WEBCLIENT_STATE_CLOSE      3
+00071 
+00072 #define HTTPFLAG_NONE   0
+00073 #define HTTPFLAG_OK     1
+00074 #define HTTPFLAG_MOVED  2
+00075 #define HTTPFLAG_ERROR  3
+00076 
+00077 
+00078 #define ISO_nl       0x0a
+00079 #define ISO_cr       0x0d
+00080 #define ISO_space    0x20
+00081 
+00082 
+00083 static struct webclient_state s;
+00084 
+00085 /*-----------------------------------------------------------------------------------*/
+00086 char *
+00087 webclient_mimetype(void)
+00088 {
+00089   return s.mimetype;
+00090 }
+00091 /*-----------------------------------------------------------------------------------*/
+00092 char *
+00093 webclient_filename(void)
+00094 {
+00095   return s.file;
+00096 }
+00097 /*-----------------------------------------------------------------------------------*/
+00098 char *
+00099 webclient_hostname(void)
+00100 {
+00101   return s.host;
+00102 }
+00103 /*-----------------------------------------------------------------------------------*/
+00104 unsigned short
+00105 webclient_port(void)
+00106 {
+00107   return s.port;
+00108 }
+00109 /*-----------------------------------------------------------------------------------*/
+00110 void
+00111 webclient_init(void)
+00112 {
+00113 
+00114 }
+00115 /*-----------------------------------------------------------------------------------*/
+00116 static void
+00117 init_connection(void)
+00118 {
+00119   s.state = WEBCLIENT_STATE_STATUSLINE;
+00120 
+00121   s.getrequestleft = sizeof(http_get) - 1 + 1 +
+00122     sizeof(http_10) - 1 +
+00123     sizeof(http_crnl) - 1 +
+00124     sizeof(http_host) - 1 +
+00125     sizeof(http_crnl) - 1 +
+00126     strlen(http_user_agent_fields) +
+00127     strlen(s.file) + strlen(s.host);
+00128   s.getrequestptr = 0;
+00129 
+00130   s.httpheaderlineptr = 0;
+00131 }
+00132 /*-----------------------------------------------------------------------------------*/
+00133 void
+00134 webclient_close(void)
+00135 {
+00136   s.state = WEBCLIENT_STATE_CLOSE;
+00137 }
+00138 /*-----------------------------------------------------------------------------------*/
+00139 unsigned char
+00140 webclient_get(char *host, u16_t port, char *file)
+00141 {
+00142   struct uip_conn *conn;
+00143   uip_ipaddr_t *ipaddr;
+00144   static uip_ipaddr_t addr;
+00145   
+00146   /* First check if the host is an IP address. */
+00147   ipaddr = &addr;
+00148   if(uiplib_ipaddrconv(host, (unsigned char *)addr) == 0) {
+00149     ipaddr = (uip_ipaddr_t *)resolv_lookup(host);
+00150     
+00151     if(ipaddr == NULL) {
+00152       return 0;
+00153     }
+00154   }
+00155   
+00156   conn = uip_connect(ipaddr, htons(port));
+00157   
+00158   if(conn == NULL) {
+00159     return 0;
+00160   }
+00161   
+00162   s.port = port;
+00163   strncpy(s.file, file, sizeof(s.file));
+00164   strncpy(s.host, host, sizeof(s.host));
+00165   
+00166   init_connection();
+00167   return 1;
+00168 }
+00169 /*-----------------------------------------------------------------------------------*/
+00170 static unsigned char *
+00171 copy_string(unsigned char *dest,
+00172             const unsigned char *src, unsigned char len)
+00173 {
+00174   strncpy(dest, src, len);
+00175   return dest + len;
+00176 }
+00177 /*-----------------------------------------------------------------------------------*/
+00178 static void
+00179 senddata(void)
+00180 {
+00181   u16_t len;
+00182   char *getrequest;
+00183   char *cptr;
+00184   
+00185   if(s.getrequestleft > 0) {
+00186     cptr = getrequest = (char *)uip_appdata;
+00187 
+00188     cptr = copy_string(cptr, http_get, sizeof(http_get) - 1);
+00189     cptr = copy_string(cptr, s.file, strlen(s.file));
+00190     *cptr++ = ISO_space;
+00191     cptr = copy_string(cptr, http_10, sizeof(http_10) - 1);
+00192 
+00193     cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);
+00194     
+00195     cptr = copy_string(cptr, http_host, sizeof(http_host) - 1);
+00196     cptr = copy_string(cptr, s.host, strlen(s.host));
+00197     cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);
+00198 
+00199     cptr = copy_string(cptr, http_user_agent_fields,
+00200                        strlen(http_user_agent_fields));
+00201     
+00202     len = s.getrequestleft > uip_mss()?
+00203       uip_mss():
+00204       s.getrequestleft;
+00205     uip_send(&(getrequest[s.getrequestptr]), len);
+00206   }
+00207 }
+00208 /*-----------------------------------------------------------------------------------*/
+00209 static void
+00210 acked(void)
+00211 {
+00212   u16_t len;
+00213   
+00214   if(s.getrequestleft > 0) {
+00215     len = s.getrequestleft > uip_mss()?
+00216       uip_mss():
+00217       s.getrequestleft;
+00218     s.getrequestleft -= len;
+00219     s.getrequestptr += len;
+00220   }
+00221 }
+00222 /*-----------------------------------------------------------------------------------*/
+00223 static u16_t
+00224 parse_statusline(u16_t len)
+00225 {
+00226   char *cptr;
+00227   
+00228   while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {
+00229     s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
+00230     ++((char *)uip_appdata);
+00231     --len;
+00232     if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {
+00233 
+00234       if((strncmp(s.httpheaderline, http_10,
+00235                   sizeof(http_10) - 1) == 0) ||
+00236          (strncmp(s.httpheaderline, http_11,
+00237                   sizeof(http_11) - 1) == 0)) {
+00238         cptr = &(s.httpheaderline[9]);
+00239         s.httpflag = HTTPFLAG_NONE;
+00240         if(strncmp(cptr, http_200, sizeof(http_200) - 1) == 0) {
+00241           /* 200 OK */
+00242           s.httpflag = HTTPFLAG_OK;
+00243         } else if(strncmp(cptr, http_301, sizeof(http_301) - 1) == 0 ||
+00244                   strncmp(cptr, http_302, sizeof(http_302) - 1) == 0) {
+00245           /* 301 Moved permanently or 302 Found. Location: header line
+00246              will contain thw new location. */
+00247           s.httpflag = HTTPFLAG_MOVED;
+00248         } else {
+00249           s.httpheaderline[s.httpheaderlineptr - 1] = 0;
+00250         }
+00251       } else {
+00252         uip_abort();
+00253         webclient_aborted();
+00254         return 0;
+00255       }
+00256       
+00257       /* We're done parsing the status line, so we reset the pointer
+00258          and start parsing the HTTP headers.*/
+00259       s.httpheaderlineptr = 0;
+00260       s.state = WEBCLIENT_STATE_HEADERS;
+00261       break;
+00262     } else {
+00263       ++s.httpheaderlineptr;
+00264     }
+00265   }
+00266   return len;
+00267 }
+00268 /*-----------------------------------------------------------------------------------*/
+00269 static char
+00270 casecmp(char *str1, const char *str2, char len)
+00271 {
+00272   static char c;
+00273   
+00274   while(len > 0) {
+00275     c = *str1;
+00276     /* Force lower-case characters. */
+00277     if(c & 0x40) {
+00278       c |= 0x20;
+00279     }
+00280     if(*str2 != c) {
+00281       return 1;
+00282     }
+00283     ++str1;
+00284     ++str2;
+00285     --len;
+00286   }
+00287   return 0;
+00288 }
+00289 /*-----------------------------------------------------------------------------------*/
+00290 static u16_t
+00291 parse_headers(u16_t len)
+00292 {
+00293   char *cptr;
+00294   static unsigned char i;
+00295   
+00296   while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {
+00297     s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
+00298     ++((char *)uip_appdata);
+00299     --len;
+00300     if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {
+00301       /* We have an entire HTTP header line in s.httpheaderline, so
+00302          we parse it. */
+00303       if(s.httpheaderline[0] == ISO_cr) {
+00304         /* This was the last header line (i.e., and empty "\r\n"), so
+00305            we are done with the headers and proceed with the actual
+00306            data. */
+00307         s.state = WEBCLIENT_STATE_DATA;
+00308         return len;
+00309       }
+00310 
+00311       s.httpheaderline[s.httpheaderlineptr - 1] = 0;
+00312       /* Check for specific HTTP header fields. */
+00313       if(casecmp(s.httpheaderline, http_content_type,
+00314                      sizeof(http_content_type) - 1) == 0) {
+00315         /* Found Content-type field. */
+00316         cptr = strchr(s.httpheaderline, ';');
+00317         if(cptr != NULL) {
+00318           *cptr = 0;
+00319         }
+00320         strncpy(s.mimetype, s.httpheaderline +
+00321                 sizeof(http_content_type) - 1, sizeof(s.mimetype));
+00322       } else if(casecmp(s.httpheaderline, http_location,
+00323                             sizeof(http_location) - 1) == 0) {
+00324         cptr = s.httpheaderline +
+00325           sizeof(http_location) - 1;
+00326         
+00327         if(strncmp(cptr, http_http, 7) == 0) {
+00328           cptr += 7;
+00329           for(i = 0; i < s.httpheaderlineptr - 7; ++i) {
+00330             if(*cptr == 0 ||
+00331                *cptr == '/' ||
+00332                *cptr == ' ' ||
+00333                *cptr == ':') {
+00334               s.host[i] = 0;
+00335               break;
+00336             }
+00337             s.host[i] = *cptr;
+00338             ++cptr;
+00339           }
+00340         }
+00341         strncpy(s.file, cptr, sizeof(s.file));
+00342         /*      s.file[s.httpheaderlineptr - i] = 0;*/
+00343       }
+00344 
+00345 
+00346       /* We're done parsing, so we reset the pointer and start the
+00347          next line. */
+00348       s.httpheaderlineptr = 0;
+00349     } else {
+00350       ++s.httpheaderlineptr;
+00351     }
+00352   }
+00353   return len;
+00354 }
+00355 /*-----------------------------------------------------------------------------------*/
+00356 static void
+00357 newdata(void)
+00358 {
+00359   u16_t len;
+00360 
+00361   len = uip_datalen();
+00362 
+00363   if(s.state == WEBCLIENT_STATE_STATUSLINE) {
+00364     len = parse_statusline(len);
+00365   }
+00366   
+00367   if(s.state == WEBCLIENT_STATE_HEADERS && len > 0) {
+00368     len = parse_headers(len);
+00369   }
+00370 
+00371   if(len > 0 && s.state == WEBCLIENT_STATE_DATA &&
+00372      s.httpflag != HTTPFLAG_MOVED) {
+00373     webclient_datahandler((char *)uip_appdata, len);
+00374   }
+00375 }
+00376 /*-----------------------------------------------------------------------------------*/
+00377 void
+00378 webclient_appcall(void)
+00379 {
+00380   if(uip_connected()) {
+00381     s.timer = 0;
+00382     s.state = WEBCLIENT_STATE_STATUSLINE;
+00383     senddata();
+00384     webclient_connected();
+00385     return;
+00386   }
+00387 
+00388   if(s.state == WEBCLIENT_STATE_CLOSE) {
+00389     webclient_closed();
+00390     uip_abort();
+00391     return;
+00392   }
+00393 
+00394   if(uip_aborted()) {
+00395     webclient_aborted();
+00396   }
+00397   if(uip_timedout()) {
+00398     webclient_timedout();
+00399   }
+00400 
+00401   
+00402   if(uip_acked()) {
+00403     s.timer = 0;
+00404     acked();
+00405   }
+00406   if(uip_newdata()) {
+00407     s.timer = 0;
+00408     newdata();
+00409   }
+00410   if(uip_rexmit() ||
+00411      uip_newdata() ||
+00412      uip_acked()) {
+00413     senddata();
+00414   } else if(uip_poll()) {
+00415     ++s.timer;
+00416     if(s.timer == WEBCLIENT_TIMEOUT) {
+00417       webclient_timedout();
+00418       uip_abort();
+00419       return;
+00420     }
+00421         /*    senddata();*/
+00422   }
+00423 
+00424   if(uip_closed()) {
+00425     if(s.httpflag != HTTPFLAG_MOVED) {
+00426       /* Send NULL data to signal EOF. */
+00427       webclient_datahandler(NULL, 0);
+00428     } else {
+00429       if(resolv_lookup(s.host) == NULL) {
+00430         resolv_query(s.host);
+00431       }
+00432       webclient_get(s.host, s.port, s.file);
+00433     }
+00434   }
+00435 }
+00436 /*-----------------------------------------------------------------------------------*/
+00437 
+00438 /** @} */
+00439 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00041.html b/components/net/uip/doc/html/a00041.html new file mode 100644 index 0000000000..f1f93ea8e3 --- /dev/null +++ b/components/net/uip/doc/html/a00041.html @@ -0,0 +1,248 @@ + + +uIP 1.0: webclient.h + + + + + +

webclient.h

00001 /**
+00002  * \addtogroup webclient
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  * Header file for the HTTP client.
+00009  * \author Adam Dunkels <adam@dunkels.com>
+00010  */
+00011 
+00012 /*
+00013  * Copyright (c) 2002, Adam Dunkels.
+00014  * All rights reserved.
+00015  *
+00016  * Redistribution and use in source and binary forms, with or without
+00017  * modification, are permitted provided that the following conditions
+00018  * are met:
+00019  * 1. Redistributions of source code must retain the above copyright
+00020  *    notice, this list of conditions and the following disclaimer.
+00021  * 2. Redistributions in binary form must reproduce the above
+00022  *    copyright notice, this list of conditions and the following
+00023  *    disclaimer in the documentation and/or other materials provided
+00024  *    with the distribution.
+00025  * 3. The name of the author may not be used to endorse or promote
+00026  *    products derived from this software without specific prior
+00027  *    written permission.
+00028  *
+00029  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00030  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00031  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00032  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00033  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00034  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00035  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00036  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00037  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00038  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00039  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00040  *
+00041  * This file is part of the uIP TCP/IP stack.
+00042  *
+00043  * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $
+00044  *
+00045  */
+00046 #ifndef __WEBCLIENT_H__
+00047 #define __WEBCLIENT_H__
+00048 
+00049 
+00050 #include "webclient-strings.h"
+00051 #include "uipopt.h"
+00052 
+00053 #define WEBCLIENT_CONF_MAX_URLLEN 100
+00054 
+00055 struct webclient_state {
+00056   u8_t timer;
+00057   u8_t state;
+00058   u8_t httpflag;
+00059 
+00060   u16_t port;
+00061   char host[40];
+00062   char file[WEBCLIENT_CONF_MAX_URLLEN];
+00063   u16_t getrequestptr;
+00064   u16_t getrequestleft;
+00065   
+00066   char httpheaderline[200];
+00067   u16_t httpheaderlineptr;
+00068 
+00069   char mimetype[32];
+00070 };
+00071 
+00072 typedef struct webclient_state uip_tcp_appstate_t;
+00073 #define UIP_APPCALL webclient_appcall
+00074 
+00075 /**
+00076  * Callback function that is called from the webclient code when HTTP
+00077  * data has been received.
+00078  *
+00079  * This function must be implemented by the module that uses the
+00080  * webclient code. The function is called from the webclient module
+00081  * when HTTP data has been received. The function is not called when
+00082  * HTTP headers are received, only for the actual data.
+00083  *
+00084  * \note This function is called many times, repetedly, when data is
+00085  * being received, and not once when all data has been received.
+00086  *
+00087  * \param data A pointer to the data that has been received.
+00088  * \param len The length of the data that has been received.
+00089  */
+00090 void webclient_datahandler(char *data, u16_t len);
+00091 
+00092 /**
+00093  * Callback function that is called from the webclient code when the
+00094  * HTTP connection has been connected to the web server.
+00095  *
+00096  * This function must be implemented by the module that uses the
+00097  * webclient code.
+00098  */
+00099 void webclient_connected(void);
+00100 
+00101 /**
+00102  * Callback function that is called from the webclient code if the
+00103  * HTTP connection to the web server has timed out.
+00104  *
+00105  * This function must be implemented by the module that uses the
+00106  * webclient code.
+00107  */
+00108 void webclient_timedout(void);
+00109 
+00110 /**
+00111  * Callback function that is called from the webclient code if the
+00112  * HTTP connection to the web server has been aborted by the web
+00113  * server.
+00114  *
+00115  * This function must be implemented by the module that uses the
+00116  * webclient code.
+00117  */
+00118 void webclient_aborted(void);
+00119 
+00120 /**
+00121  * Callback function that is called from the webclient code when the
+00122  * HTTP connection to the web server has been closed.
+00123  *
+00124  * This function must be implemented by the module that uses the
+00125  * webclient code.
+00126  */
+00127 void webclient_closed(void);
+00128 
+00129 
+00130 
+00131 /**
+00132  * Initialize the webclient module.
+00133  */
+00134 void webclient_init(void);
+00135 
+00136 /**
+00137  * Open an HTTP connection to a web server and ask for a file using
+00138  * the GET method.
+00139  *
+00140  * This function opens an HTTP connection to the specified web server
+00141  * and requests the specified file using the GET method. When the HTTP
+00142  * connection has been connected, the webclient_connected() callback
+00143  * function is called and when the HTTP data arrives the
+00144  * webclient_datahandler() callback function is called.
+00145  *
+00146  * The callback function webclient_timedout() is called if the web
+00147  * server could not be contacted, and the webclient_aborted() callback
+00148  * function is called if the HTTP connection is aborted by the web
+00149  * server.
+00150  *
+00151  * When the HTTP request has been completed and the HTTP connection is
+00152  * closed, the webclient_closed() callback function will be called.
+00153  *
+00154  * \note If the function is passed a host name, it must already be in
+00155  * the resolver cache in order for the function to connect to the web
+00156  * server. It is therefore up to the calling module to implement the
+00157  * resolver calls and the signal handler used for reporting a resolv
+00158  * query answer.
+00159  *
+00160  * \param host A pointer to a string containing either a host name or
+00161  * a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).
+00162  *
+00163  * \param port The port number to which to connect, in host byte order.
+00164  *
+00165  * \param file A pointer to the name of the file to get.
+00166  *
+00167  * \retval 0 if the host name could not be found in the cache, or
+00168  * if a TCP connection could not be created.
+00169  *
+00170  * \retval 1 if the connection was initiated.
+00171  */
+00172 unsigned char webclient_get(char *host, u16_t port, char *file);
+00173 
+00174 /**
+00175  * Close the currently open HTTP connection.
+00176  */
+00177 void webclient_close(void);
+00178 void webclient_appcall(void);
+00179 
+00180 /**
+00181  * Obtain the MIME type of the current HTTP data stream.
+00182  *
+00183  * \return A pointer to a string contaning the MIME type. The string
+00184  * may be empty if no MIME type was reported by the web server.
+00185  */
+00186 char *webclient_mimetype(void);
+00187 
+00188 /**
+00189  * Obtain the filename of the current HTTP data stream.
+00190  *
+00191  * The filename of an HTTP request may be changed by the web server,
+00192  * and may therefore not be the same as when the original GET request
+00193  * was made with webclient_get(). This function is used for obtaining
+00194  * the current filename.
+00195  *
+00196  * \return A pointer to the current filename.
+00197  */
+00198 char *webclient_filename(void);
+00199 
+00200 /**
+00201  * Obtain the hostname of the current HTTP data stream.
+00202  *
+00203  * The hostname of the web server of an HTTP request may be changed
+00204  * by the web server, and may therefore not be the same as when the
+00205  * original GET request was made with webclient_get(). This function
+00206  * is used for obtaining the current hostname.
+00207  *
+00208  * \return A pointer to the current hostname.
+00209  */
+00210 char *webclient_hostname(void);
+00211 
+00212 /**
+00213  * Obtain the port number of the current HTTP data stream.
+00214  *
+00215  * The port number of an HTTP request may be changed by the web
+00216  * server, and may therefore not be the same as when the original GET
+00217  * request was made with webclient_get(). This function is used for
+00218  * obtaining the current port number.
+00219  *
+00220  * \return The port number of the current HTTP data stream, in host byte order.
+00221  */
+00222 unsigned short webclient_port(void);
+00223 
+00224 
+00225 
+00226 #endif /* __WEBCLIENT_H__ */
+00227 
+00228 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00042.html b/components/net/uip/doc/html/a00042.html new file mode 100644 index 0000000000..ecff751f80 --- /dev/null +++ b/components/net/uip/doc/html/a00042.html @@ -0,0 +1,106 @@ + + +uIP 1.0: example-mainloop-with-arp.c + + + + + +

example-mainloop-with-arp.c

00001 #include "uip.h"
+00002 #include "uip_arp.h"
+00003 #include "network-device.h"
+00004 #include "httpd.h"
+00005 #include "timer.h"
+00006 
+00007 #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
+00008 
+00009 /*---------------------------------------------------------------------------*/
+00010 int
+00011 main(void)
+00012 {
+00013   int i;
+00014   uip_ipaddr_t ipaddr;
+00015   struct timer periodic_timer, arp_timer;
+00016   
+00017   timer_set(&periodic_timer, CLOCK_SECOND / 2);
+00018   timer_set(&arp_timer, CLOCK_SECOND * 10);
+00019   
+00020   network_device_init();
+00021   uip_init();
+00022 
+00023   uip_ipaddr(ipaddr, 192,168,0,2);
+00024   uip_sethostaddr(ipaddr);
+00025 
+00026   httpd_init();
+00027   
+00028   while(1) {
+00029     uip_len = network_device_read();
+00030     if(uip_len > 0) {
+00031       if(BUF->type == htons(UIP_ETHTYPE_IP)) {
+00032         uip_arp_ipin();
+00033         uip_input();
+00034         /* If the above function invocation resulted in data that
+00035            should be sent out on the network, the global variable
+00036            uip_len is set to a value > 0. */
+00037         if(uip_len > 0) {
+00038           uip_arp_out();
+00039           network_device_send();
+00040         }
+00041       } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) {
+00042         uip_arp_arpin();
+00043         /* If the above function invocation resulted in data that
+00044            should be sent out on the network, the global variable
+00045            uip_len is set to a value > 0. */
+00046         if(uip_len > 0) {
+00047           network_device_send();
+00048         }
+00049       }
+00050 
+00051     } else if(timer_expired(&periodic_timer)) {
+00052       timer_reset(&periodic_timer);
+00053       for(i = 0; i < UIP_CONNS; i++) {
+00054         uip_periodic(i);
+00055         /* If the above function invocation resulted in data that
+00056            should be sent out on the network, the global variable
+00057            uip_len is set to a value > 0. */
+00058         if(uip_len > 0) {
+00059           uip_arp_out();
+00060           network_device_send();
+00061         }
+00062       }
+00063 
+00064 #if UIP_UDP
+00065       for(i = 0; i < UIP_UDP_CONNS; i++) {
+00066         uip_udp_periodic(i);
+00067         /* If the above function invocation resulted in data that
+00068            should be sent out on the network, the global variable
+00069            uip_len is set to a value > 0. */
+00070         if(uip_len > 0) {
+00071           uip_arp_out();
+00072           network_device_send();
+00073         }
+00074       }
+00075 #endif /* UIP_UDP */
+00076       
+00077       /* Call the ARP timer function every 10 seconds. */
+00078       if(timer_expired(&arp_timer)) {
+00079         timer_reset(&arp_timer);
+00080         uip_arp_timer();
+00081       }
+00082     }
+00083   }
+00084   return 0;
+00085 }
+00086 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00043.html b/components/net/uip/doc/html/a00043.html new file mode 100644 index 0000000000..be8d85ccf1 --- /dev/null +++ b/components/net/uip/doc/html/a00043.html @@ -0,0 +1,82 @@ + + +uIP 1.0: example-mainloop-without-arp.c + + + + + +

example-mainloop-without-arp.c

00001 #include "uip.h"
+00002 #include "uip_arp.h"
+00003 #include "network-device.h"
+00004 #include "httpd.h"
+00005 #include "timer.h"
+00006 
+00007 /*---------------------------------------------------------------------------*/
+00008 int
+00009 main(void)
+00010 {
+00011   int i;
+00012   uip_ipaddr_t ipaddr;
+00013   struct timer periodic_timer;
+00014   
+00015   timer_set(&periodic_timer, CLOCK_SECOND / 2);
+00016   
+00017   network_device_init();
+00018   uip_init();
+00019 
+00020   uip_ipaddr(ipaddr, 192,168,0,2);
+00021   uip_sethostaddr(ipaddr);
+00022 
+00023   httpd_init();
+00024   
+00025   while(1) {
+00026     uip_len = network_device_read();
+00027     if(uip_len > 0) {
+00028       uip_input();
+00029       /* If the above function invocation resulted in data that
+00030          should be sent out on the network, the global variable
+00031          uip_len is set to a value > 0. */
+00032       if(uip_len > 0) {
+00033         network_device_send();
+00034       }
+00035     } else if(timer_expired(&periodic_timer)) {
+00036       timer_reset(&periodic_timer);
+00037       for(i = 0; i < UIP_CONNS; i++) {
+00038         uip_periodic(i);
+00039         /* If the above function invocation resulted in data that
+00040            should be sent out on the network, the global variable
+00041            uip_len is set to a value > 0. */
+00042         if(uip_len > 0) {
+00043           network_device_send();
+00044         }
+00045       }
+00046 
+00047 #if UIP_UDP
+00048       for(i = 0; i < UIP_UDP_CONNS; i++) {
+00049         uip_udp_periodic(i);
+00050         /* If the above function invocation resulted in data that
+00051            should be sent out on the network, the global variable
+00052            uip_len is set to a value > 0. */
+00053         if(uip_len > 0) {
+00054           network_device_send();
+00055         }
+00056       }
+00057 #endif /* UIP_UDP */
+00058     }
+00059   }
+00060   return 0;
+00061 }
+00062 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00044.html b/components/net/uip/doc/html/a00044.html new file mode 100644 index 0000000000..63af613811 --- /dev/null +++ b/components/net/uip/doc/html/a00044.html @@ -0,0 +1,370 @@ + + +uIP 1.0: telnetd.c + + + + + +

telnetd.c

00001 /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. The name of the author may not be used to endorse or promote
+00014  *    products derived from this software without specific prior
+00015  *    written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00018  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00023  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00026  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00027  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $
+00032  *
+00033  */
+00034 
+00035 #include "uip.h"
+00036 #include "telnetd.h"
+00037 #include "memb.h"
+00038 #include "shell.h"
+00039 
+00040 #include <string.h>
+00041 
+00042 #define ISO_nl       0x0a
+00043 #define ISO_cr       0x0d
+00044 
+00045 struct telnetd_line {
+00046   char line[TELNETD_CONF_LINELEN];
+00047 };
+00048 MEMB(linemem, struct telnetd_line, TELNETD_CONF_NUMLINES);
+00049 
+00050 #define STATE_NORMAL 0
+00051 #define STATE_IAC    1
+00052 #define STATE_WILL   2
+00053 #define STATE_WONT   3
+00054 #define STATE_DO     4
+00055 #define STATE_DONT   5
+00056 #define STATE_CLOSE  6
+00057 
+00058 static struct telnetd_state s;
+00059 
+00060 #define TELNET_IAC   255
+00061 #define TELNET_WILL  251
+00062 #define TELNET_WONT  252
+00063 #define TELNET_DO    253
+00064 #define TELNET_DONT  254
+00065 /*---------------------------------------------------------------------------*/
+00066 static char *
+00067 alloc_line(void)
+00068 {
+00069   return memb_alloc(&linemem);
+00070 }
+00071 /*---------------------------------------------------------------------------*/
+00072 static void
+00073 dealloc_line(char *line)
+00074 {
+00075   memb_free(&linemem, line);
+00076 }
+00077 /*---------------------------------------------------------------------------*/
+00078 void
+00079 shell_quit(char *str)
+00080 {
+00081   s.state = STATE_CLOSE;
+00082 }
+00083 /*---------------------------------------------------------------------------*/
+00084 static void
+00085 sendline(char *line)
+00086 {
+00087   static unsigned int i;
+00088   
+00089   for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00090     if(s.lines[i] == NULL) {
+00091       s.lines[i] = line;
+00092       break;
+00093     }
+00094   }
+00095   if(i == TELNETD_CONF_NUMLINES) {
+00096     dealloc_line(line);
+00097   }
+00098 }
+00099 /*---------------------------------------------------------------------------*/
+00100 void
+00101 shell_prompt(char *str)
+00102 {
+00103   char *line;
+00104   line = alloc_line();
+00105   if(line != NULL) {
+00106     strncpy(line, str, TELNETD_CONF_LINELEN);
+00107     /*    petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
+00108     sendline(line);
+00109   }
+00110 }
+00111 /*---------------------------------------------------------------------------*/
+00112 void
+00113 shell_output(char *str1, char *str2)
+00114 {
+00115   static unsigned len;
+00116   char *line;
+00117 
+00118   line = alloc_line();
+00119   if(line != NULL) {
+00120     len = strlen(str1);
+00121     strncpy(line, str1, TELNETD_CONF_LINELEN);
+00122     if(len < TELNETD_CONF_LINELEN) {
+00123       strncpy(line + len, str2, TELNETD_CONF_LINELEN - len);
+00124     }
+00125     len = strlen(line);
+00126     if(len < TELNETD_CONF_LINELEN - 2) {
+00127       line[len] = ISO_cr;
+00128       line[len+1] = ISO_nl;
+00129       line[len+2] = 0;
+00130     }
+00131     /*    petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
+00132     sendline(line);
+00133   }
+00134 }
+00135 /*---------------------------------------------------------------------------*/
+00136 void
+00137 telnetd_init(void)
+00138 {
+00139   uip_listen(HTONS(23));
+00140   memb_init(&linemem);
+00141   shell_init();
+00142 }
+00143 /*---------------------------------------------------------------------------*/
+00144 static void
+00145 acked(void)
+00146 {
+00147   static unsigned int i;
+00148   
+00149   while(s.numsent > 0) {
+00150     dealloc_line(s.lines[0]);
+00151     for(i = 1; i < TELNETD_CONF_NUMLINES; ++i) {
+00152       s.lines[i - 1] = s.lines[i];
+00153     }
+00154     s.lines[TELNETD_CONF_NUMLINES - 1] = NULL;
+00155     --s.numsent;
+00156   }
+00157 }
+00158 /*---------------------------------------------------------------------------*/
+00159 static void
+00160 senddata(void)
+00161 {
+00162   static char *bufptr, *lineptr;
+00163   static int buflen, linelen;
+00164   
+00165   bufptr = uip_appdata;
+00166   buflen = 0;
+00167   for(s.numsent = 0; s.numsent < TELNETD_CONF_NUMLINES &&
+00168         s.lines[s.numsent] != NULL ; ++s.numsent) {
+00169     lineptr = s.lines[s.numsent];
+00170     linelen = strlen(lineptr);
+00171     if(linelen > TELNETD_CONF_LINELEN) {
+00172       linelen = TELNETD_CONF_LINELEN;
+00173     }
+00174     if(buflen + linelen < uip_mss()) {
+00175       memcpy(bufptr, lineptr, linelen);
+00176       bufptr += linelen;
+00177       buflen += linelen;
+00178     } else {
+00179       break;
+00180     }
+00181   }
+00182   uip_send(uip_appdata, buflen);
+00183 }
+00184 /*---------------------------------------------------------------------------*/
+00185 static void
+00186 closed(void)
+00187 {
+00188   static unsigned int i;
+00189   
+00190   for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00191     if(s.lines[i] != NULL) {
+00192       dealloc_line(s.lines[i]);
+00193     }
+00194   }
+00195 }
+00196 /*---------------------------------------------------------------------------*/
+00197 static void
+00198 get_char(u8_t c)
+00199 {
+00200   if(c == ISO_cr) {
+00201     return;
+00202   }
+00203   
+00204   s.buf[(int)s.bufptr] = c;
+00205   if(s.buf[(int)s.bufptr] == ISO_nl ||
+00206      s.bufptr == sizeof(s.buf) - 1) {
+00207     if(s.bufptr > 0) {
+00208       s.buf[(int)s.bufptr] = 0;
+00209       /*      petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/
+00210     }
+00211     shell_input(s.buf);
+00212     s.bufptr = 0;
+00213   } else {
+00214     ++s.bufptr;
+00215   }
+00216 }
+00217 /*---------------------------------------------------------------------------*/
+00218 static void
+00219 sendopt(u8_t option, u8_t value)
+00220 {
+00221   char *line;
+00222   line = alloc_line();
+00223   if(line != NULL) {
+00224     line[0] = TELNET_IAC;
+00225     line[1] = option;
+00226     line[2] = value;
+00227     line[3] = 0;
+00228     sendline(line);
+00229   }
+00230 }
+00231 /*---------------------------------------------------------------------------*/
+00232 static void
+00233 newdata(void)
+00234 {
+00235   u16_t len;
+00236   u8_t c;
+00237   char *dataptr;
+00238     
+00239   
+00240   len = uip_datalen();
+00241   dataptr = (char *)uip_appdata;
+00242   
+00243   while(len > 0 && s.bufptr < sizeof(s.buf)) {
+00244     c = *dataptr;
+00245     ++dataptr;
+00246     --len;
+00247     switch(s.state) {
+00248     case STATE_IAC:
+00249       if(c == TELNET_IAC) {
+00250         get_char(c);
+00251         s.state = STATE_NORMAL;
+00252       } else {
+00253         switch(c) {
+00254         case TELNET_WILL:
+00255           s.state = STATE_WILL;
+00256           break;
+00257         case TELNET_WONT:
+00258           s.state = STATE_WONT;
+00259           break;
+00260         case TELNET_DO:
+00261           s.state = STATE_DO;
+00262           break;
+00263         case TELNET_DONT:
+00264           s.state = STATE_DONT;
+00265           break;
+00266         default:
+00267           s.state = STATE_NORMAL;
+00268           break;
+00269         }
+00270       }
+00271       break;
+00272     case STATE_WILL:
+00273       /* Reply with a DONT */
+00274       sendopt(TELNET_DONT, c);
+00275       s.state = STATE_NORMAL;
+00276       break;
+00277       
+00278     case STATE_WONT:
+00279       /* Reply with a DONT */
+00280       sendopt(TELNET_DONT, c);
+00281       s.state = STATE_NORMAL;
+00282       break;
+00283     case STATE_DO:
+00284       /* Reply with a WONT */
+00285       sendopt(TELNET_WONT, c);
+00286       s.state = STATE_NORMAL;
+00287       break;
+00288     case STATE_DONT:
+00289       /* Reply with a WONT */
+00290       sendopt(TELNET_WONT, c);
+00291       s.state = STATE_NORMAL;
+00292       break;
+00293     case STATE_NORMAL:
+00294       if(c == TELNET_IAC) {
+00295         s.state = STATE_IAC;
+00296       } else {
+00297         get_char(c);
+00298       }
+00299       break;
+00300     }
+00301 
+00302     
+00303   }
+00304   
+00305 }
+00306 /*---------------------------------------------------------------------------*/
+00307 void
+00308 telnetd_appcall(void)
+00309 {
+00310   static unsigned int i;
+00311   if(uip_connected()) {
+00312     /*    tcp_markconn(uip_conn, &s);*/
+00313     for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00314       s.lines[i] = NULL;
+00315     }
+00316     s.bufptr = 0;
+00317     s.state = STATE_NORMAL;
+00318 
+00319     shell_start();
+00320   }
+00321 
+00322   if(s.state == STATE_CLOSE) {
+00323     s.state = STATE_NORMAL;
+00324     uip_close();
+00325     return;
+00326   }
+00327   
+00328   if(uip_closed() ||
+00329      uip_aborted() ||
+00330      uip_timedout()) {
+00331     closed();
+00332   }
+00333   
+00334   if(uip_acked()) {
+00335     acked();
+00336   }
+00337   
+00338   if(uip_newdata()) {
+00339     newdata();
+00340   }
+00341   
+00342   if(uip_rexmit() ||
+00343      uip_newdata() ||
+00344      uip_acked() ||
+00345      uip_connected() ||
+00346      uip_poll()) {
+00347     senddata();
+00348   }
+00349 }
+00350 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00045.html b/components/net/uip/doc/html/a00045.html new file mode 100644 index 0000000000..7ed6df9020 --- /dev/null +++ b/components/net/uip/doc/html/a00045.html @@ -0,0 +1,83 @@ + + +uIP 1.0: telnetd.h + + + + + +

telnetd.h

00001 /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above
+00011  *    copyright notice, this list of conditions and the following
+00012  *    disclaimer in the documentation and/or other materials provided
+00013  *    with the distribution.
+00014  * 3. The name of the author may not be used to endorse or promote
+00015  *    products derived from this software without specific prior
+00016  *    written permission.
+00017  *
+00018  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00019  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00020  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00021  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00022  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00023  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00024  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00025  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00026  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00027  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00028  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00029  *
+00030  * This file is part of the uIP TCP/IP stack
+00031  *
+00032  * $Id: telnetd.h,v 1.2 2006/06/07 09:43:54 adam Exp $
+00033  *
+00034  */
+00035 #ifndef __TELNETD_H__
+00036 #define __TELNETD_H__
+00037 
+00038 #include "uipopt.h"
+00039 
+00040 void telnetd_appcall(void);
+00041 
+00042 #ifndef TELNETD_CONF_LINELEN
+00043 #define TELNETD_CONF_LINELEN 40
+00044 #endif
+00045 #ifndef TELNETD_CONF_NUMLINES
+00046 #define TELNETD_CONF_NUMLINES 16
+00047 #endif
+00048 
+00049 struct telnetd_state {
+00050   char *lines[TELNETD_CONF_NUMLINES];
+00051   char buf[TELNETD_CONF_LINELEN];
+00052   char bufptr;
+00053   u8_t numsent;
+00054   u8_t state;
+00055 };
+00056 
+00057 typedef struct telnetd_state uip_tcp_appstate_t;
+00058 
+00059 #ifndef UIP_APPCALL
+00060 #define UIP_APPCALL     telnetd_appcall
+00061 #endif
+00062 
+00063 #endif /* __TELNETD_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00046.html b/components/net/uip/doc/html/a00046.html new file mode 100644 index 0000000000..9e877ea147 --- /dev/null +++ b/components/net/uip/doc/html/a00046.html @@ -0,0 +1,484 @@ + + +uIP 1.0: resolv.c + + + + + +

resolv.c

00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup resolv DNS resolver
+00008  * @{
+00009  *
+00010  * The uIP DNS resolver functions are used to lookup a hostname and
+00011  * map it to a numerical IP address. It maintains a list of resolved
+00012  * hostnames that can be queried with the resolv_lookup()
+00013  * function. New hostnames can be resolved using the resolv_query()
+00014  * function.
+00015  *
+00016  * When a hostname has been resolved (or found to be non-existant),
+00017  * the resolver code calls a callback function called resolv_found()
+00018  * that must be implemented by the module that uses the resolver.
+00019  */
+00020 
+00021 /**
+00022  * \file
+00023  * DNS host name to IP address resolver.
+00024  * \author Adam Dunkels <adam@dunkels.com>
+00025  *
+00026  * This file implements a DNS host name to IP address resolver.
+00027  */
+00028 
+00029 /*
+00030  * Copyright (c) 2002-2003, Adam Dunkels.
+00031  * All rights reserved.
+00032  *
+00033  * Redistribution and use in source and binary forms, with or without
+00034  * modification, are permitted provided that the following conditions
+00035  * are met:
+00036  * 1. Redistributions of source code must retain the above copyright
+00037  *    notice, this list of conditions and the following disclaimer.
+00038  * 2. Redistributions in binary form must reproduce the above copyright
+00039  *    notice, this list of conditions and the following disclaimer in the
+00040  *    documentation and/or other materials provided with the distribution.
+00041  * 3. The name of the author may not be used to endorse or promote
+00042  *    products derived from this software without specific prior
+00043  *    written permission.
+00044  *
+00045  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00046  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00047  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00048  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00049  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00050  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00051  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00052  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00053  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00054  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00055  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00056  *
+00057  * This file is part of the uIP TCP/IP stack.
+00058  *
+00059  * $Id: resolv.c,v 1.5 2006/06/11 21:46:37 adam Exp $
+00060  *
+00061  */
+00062 
+00063 #include "resolv.h"
+00064 #include "uip.h"
+00065 
+00066 #include <string.h>
+00067 
+00068 #ifndef NULL
+00069 #define NULL (void *)0
+00070 #endif /* NULL */
+00071 
+00072 /** \internal The maximum number of retries when asking for a name. */
+00073 #define MAX_RETRIES 8
+00074 
+00075 /** \internal The DNS message header. */
+00076 struct dns_hdr {
+00077   u16_t id;
+00078   u8_t flags1, flags2;
+00079 #define DNS_FLAG1_RESPONSE        0x80
+00080 #define DNS_FLAG1_OPCODE_STATUS   0x10
+00081 #define DNS_FLAG1_OPCODE_INVERSE  0x08
+00082 #define DNS_FLAG1_OPCODE_STANDARD 0x00
+00083 #define DNS_FLAG1_AUTHORATIVE     0x04
+00084 #define DNS_FLAG1_TRUNC           0x02
+00085 #define DNS_FLAG1_RD              0x01
+00086 #define DNS_FLAG2_RA              0x80
+00087 #define DNS_FLAG2_ERR_MASK        0x0f
+00088 #define DNS_FLAG2_ERR_NONE        0x00
+00089 #define DNS_FLAG2_ERR_NAME        0x03
+00090   u16_t numquestions;
+00091   u16_t numanswers;
+00092   u16_t numauthrr;
+00093   u16_t numextrarr;
+00094 };
+00095 
+00096 /** \internal The DNS answer message structure. */
+00097 struct dns_answer {
+00098   /* DNS answer record starts with either a domain name or a pointer
+00099      to a name already present somewhere in the packet. */
+00100   u16_t type;
+00101   u16_t class;
+00102   u16_t ttl[2];
+00103   u16_t len;
+00104   uip_ipaddr_t ipaddr;
+00105 };
+00106 
+00107 struct namemap {
+00108 #define STATE_UNUSED 0
+00109 #define STATE_NEW    1
+00110 #define STATE_ASKING 2
+00111 #define STATE_DONE   3
+00112 #define STATE_ERROR  4
+00113   u8_t state;
+00114   u8_t tmr;
+00115   u8_t retries;
+00116   u8_t seqno;
+00117   u8_t err;
+00118   char name[32];
+00119   uip_ipaddr_t ipaddr;
+00120 };
+00121 
+00122 #ifndef UIP_CONF_RESOLV_ENTRIES
+00123 #define RESOLV_ENTRIES 4
+00124 #else /* UIP_CONF_RESOLV_ENTRIES */
+00125 #define RESOLV_ENTRIES UIP_CONF_RESOLV_ENTRIES
+00126 #endif /* UIP_CONF_RESOLV_ENTRIES */
+00127 
+00128 
+00129 static struct namemap names[RESOLV_ENTRIES];
+00130 
+00131 static u8_t seqno;
+00132 
+00133 static struct uip_udp_conn *resolv_conn = NULL;
+00134 
+00135 
+00136 /*---------------------------------------------------------------------------*/
+00137 /** \internal
+00138  * Walk through a compact encoded DNS name and return the end of it.
+00139  *
+00140  * \return The end of the name.
+00141  */
+00142 /*---------------------------------------------------------------------------*/
+00143 static unsigned char *
+00144 parse_name(unsigned char *query)
+00145 {
+00146   unsigned char n;
+00147 
+00148   do {
+00149     n = *query++;
+00150     
+00151     while(n > 0) {
+00152       /*      printf("%c", *query);*/
+00153       ++query;
+00154       --n;
+00155     };
+00156     /*    printf(".");*/
+00157   } while(*query != 0);
+00158   /*  printf("\n");*/
+00159   return query + 1;
+00160 }
+00161 /*---------------------------------------------------------------------------*/
+00162 /** \internal
+00163  * Runs through the list of names to see if there are any that have
+00164  * not yet been queried and, if so, sends out a query.
+00165  */
+00166 /*---------------------------------------------------------------------------*/
+00167 static void
+00168 check_entries(void)
+00169 {
+00170   register struct dns_hdr *hdr;
+00171   char *query, *nptr, *nameptr;
+00172   static u8_t i;
+00173   static u8_t n;
+00174   register struct namemap *namemapptr;
+00175   
+00176   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00177     namemapptr = &names[i];
+00178     if(namemapptr->state == STATE_NEW ||
+00179        namemapptr->state == STATE_ASKING) {
+00180       if(namemapptr->state == STATE_ASKING) {
+00181         if(--namemapptr->tmr == 0) {
+00182           if(++namemapptr->retries == MAX_RETRIES) {
+00183             namemapptr->state = STATE_ERROR;
+00184             resolv_found(namemapptr->name, NULL);
+00185             continue;
+00186           }
+00187           namemapptr->tmr = namemapptr->retries;
+00188         } else {
+00189           /*      printf("Timer %d\n", namemapptr->tmr);*/
+00190           /* Its timer has not run out, so we move on to next
+00191              entry. */
+00192           continue;
+00193         }
+00194       } else {
+00195         namemapptr->state = STATE_ASKING;
+00196         namemapptr->tmr = 1;
+00197         namemapptr->retries = 0;
+00198       }
+00199       hdr = (struct dns_hdr *)uip_appdata;
+00200       memset(hdr, 0, sizeof(struct dns_hdr));
+00201       hdr->id = htons(i);
+00202       hdr->flags1 = DNS_FLAG1_RD;
+00203       hdr->numquestions = HTONS(1);
+00204       query = (char *)uip_appdata + 12;
+00205       nameptr = namemapptr->name;
+00206       --nameptr;
+00207       /* Convert hostname into suitable query format. */
+00208       do {
+00209         ++nameptr;
+00210         nptr = query;
+00211         ++query;
+00212         for(n = 0; *nameptr != '.' && *nameptr != 0; ++nameptr) {
+00213           *query = *nameptr;
+00214           ++query;
+00215           ++n;
+00216         }
+00217         *nptr = n;
+00218       } while(*nameptr != 0);
+00219       {
+00220         static unsigned char endquery[] =
+00221           {0,0,1,0,1};
+00222         memcpy(query, endquery, 5);
+00223       }
+00224       uip_udp_send((unsigned char)(query + 5 - (char *)uip_appdata));
+00225       break;
+00226     }
+00227   }
+00228 }
+00229 /*---------------------------------------------------------------------------*/
+00230 /** \internal
+00231  * Called when new UDP data arrives.
+00232  */
+00233 /*---------------------------------------------------------------------------*/
+00234 static void
+00235 newdata(void)
+00236 {
+00237   char *nameptr;
+00238   struct dns_answer *ans;
+00239   struct dns_hdr *hdr;
+00240   static u8_t nquestions, nanswers;
+00241   static u8_t i;
+00242   register struct namemap *namemapptr;
+00243   
+00244   hdr = (struct dns_hdr *)uip_appdata;
+00245   /*  printf("ID %d\n", htons(hdr->id));
+00246       printf("Query %d\n", hdr->flags1 & DNS_FLAG1_RESPONSE);
+00247       printf("Error %d\n", hdr->flags2 & DNS_FLAG2_ERR_MASK);
+00248       printf("Num questions %d, answers %d, authrr %d, extrarr %d\n",
+00249       htons(hdr->numquestions),
+00250       htons(hdr->numanswers),
+00251       htons(hdr->numauthrr),
+00252       htons(hdr->numextrarr));
+00253   */
+00254 
+00255   /* The ID in the DNS header should be our entry into the name
+00256      table. */
+00257   i = htons(hdr->id);
+00258   namemapptr = &names[i];
+00259   if(i < RESOLV_ENTRIES &&
+00260      namemapptr->state == STATE_ASKING) {
+00261 
+00262     /* This entry is now finished. */
+00263     namemapptr->state = STATE_DONE;
+00264     namemapptr->err = hdr->flags2 & DNS_FLAG2_ERR_MASK;
+00265 
+00266     /* Check for error. If so, call callback to inform. */
+00267     if(namemapptr->err != 0) {
+00268       namemapptr->state = STATE_ERROR;
+00269       resolv_found(namemapptr->name, NULL);
+00270       return;
+00271     }
+00272 
+00273     /* We only care about the question(s) and the answers. The authrr
+00274        and the extrarr are simply discarded. */
+00275     nquestions = htons(hdr->numquestions);
+00276     nanswers = htons(hdr->numanswers);
+00277 
+00278     /* Skip the name in the question. XXX: This should really be
+00279        checked agains the name in the question, to be sure that they
+00280        match. */
+00281     nameptr = parse_name((char *)uip_appdata + 12) + 4;
+00282 
+00283     while(nanswers > 0) {
+00284       /* The first byte in the answer resource record determines if it
+00285          is a compressed record or a normal one. */
+00286       if(*nameptr & 0xc0) {
+00287         /* Compressed name. */
+00288         nameptr +=2;
+00289         /*      printf("Compressed anwser\n");*/
+00290       } else {
+00291         /* Not compressed name. */
+00292         nameptr = parse_name((char *)nameptr);
+00293       }
+00294 
+00295       ans = (struct dns_answer *)nameptr;
+00296       /*      printf("Answer: type %x, class %x, ttl %x, length %x\n",
+00297              htons(ans->type), htons(ans->class), (htons(ans->ttl[0])
+00298              << 16) | htons(ans->ttl[1]), htons(ans->len));*/
+00299 
+00300       /* Check for IP address type and Internet class. Others are
+00301          discarded. */
+00302       if(ans->type == HTONS(1) &&
+00303          ans->class == HTONS(1) &&
+00304          ans->len == HTONS(4)) {
+00305         /*      printf("IP address %d.%d.%d.%d\n",
+00306                htons(ans->ipaddr[0]) >> 8,
+00307                htons(ans->ipaddr[0]) & 0xff,
+00308                htons(ans->ipaddr[1]) >> 8,
+00309                htons(ans->ipaddr[1]) & 0xff);*/
+00310         /* XXX: we should really check that this IP address is the one
+00311            we want. */
+00312         namemapptr->ipaddr[0] = ans->ipaddr[0];
+00313         namemapptr->ipaddr[1] = ans->ipaddr[1];
+00314         
+00315         resolv_found(namemapptr->name, namemapptr->ipaddr);
+00316         return;
+00317       } else {
+00318         nameptr = nameptr + 10 + htons(ans->len);
+00319       }
+00320       --nanswers;
+00321     }
+00322   }
+00323 
+00324 }
+00325 /*---------------------------------------------------------------------------*/
+00326 /** \internal
+00327  * The main UDP function.
+00328  */
+00329 /*---------------------------------------------------------------------------*/
+00330 void
+00331 resolv_appcall(void)
+00332 {
+00333   if(uip_udp_conn->rport == HTONS(53)) {
+00334     if(uip_poll()) {
+00335       check_entries();
+00336     }
+00337     if(uip_newdata()) {
+00338       newdata();
+00339     }
+00340   }
+00341 }
+00342 /*---------------------------------------------------------------------------*/
+00343 /**
+00344  * Queues a name so that a question for the name will be sent out.
+00345  *
+00346  * \param name The hostname that is to be queried.
+00347  */
+00348 /*---------------------------------------------------------------------------*/
+00349 void
+00350 resolv_query(char *name)
+00351 {
+00352   static u8_t i;
+00353   static u8_t lseq, lseqi;
+00354   register struct namemap *nameptr;
+00355       
+00356   lseq = lseqi = 0;
+00357   
+00358   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00359     nameptr = &names[i];
+00360     if(nameptr->state == STATE_UNUSED) {
+00361       break;
+00362     }
+00363     if(seqno - nameptr->seqno > lseq) {
+00364       lseq = seqno - nameptr->seqno;
+00365       lseqi = i;
+00366     }
+00367   }
+00368 
+00369   if(i == RESOLV_ENTRIES) {
+00370     i = lseqi;
+00371     nameptr = &names[i];
+00372   }
+00373 
+00374   /*  printf("Using entry %d\n", i);*/
+00375 
+00376   strcpy(nameptr->name, name);
+00377   nameptr->state = STATE_NEW;
+00378   nameptr->seqno = seqno;
+00379   ++seqno;
+00380 }
+00381 /*---------------------------------------------------------------------------*/
+00382 /**
+00383  * Look up a hostname in the array of known hostnames.
+00384  *
+00385  * \note This function only looks in the internal array of known
+00386  * hostnames, it does not send out a query for the hostname if none
+00387  * was found. The function resolv_query() can be used to send a query
+00388  * for a hostname.
+00389  *
+00390  * \return A pointer to a 4-byte representation of the hostname's IP
+00391  * address, or NULL if the hostname was not found in the array of
+00392  * hostnames.
+00393  */
+00394 /*---------------------------------------------------------------------------*/
+00395 u16_t *
+00396 resolv_lookup(char *name)
+00397 {
+00398   static u8_t i;
+00399   struct namemap *nameptr;
+00400   
+00401   /* Walk through the list to see if the name is in there. If it is
+00402      not, we return NULL. */
+00403   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00404     nameptr = &names[i];
+00405     if(nameptr->state == STATE_DONE &&
+00406        strcmp(name, nameptr->name) == 0) {
+00407       return nameptr->ipaddr;
+00408     }
+00409   }
+00410   return NULL;
+00411 }
+00412 /*---------------------------------------------------------------------------*/
+00413 /**
+00414  * Obtain the currently configured DNS server.
+00415  *
+00416  * \return A pointer to a 4-byte representation of the IP address of
+00417  * the currently configured DNS server or NULL if no DNS server has
+00418  * been configured.
+00419  */
+00420 /*---------------------------------------------------------------------------*/
+00421 u16_t *
+00422 resolv_getserver(void)
+00423 {
+00424   if(resolv_conn == NULL) {
+00425     return NULL;
+00426   }
+00427   return resolv_conn->ripaddr;
+00428 }
+00429 /*---------------------------------------------------------------------------*/
+00430 /**
+00431  * Configure which DNS server to use for queries.
+00432  *
+00433  * \param dnsserver A pointer to a 4-byte representation of the IP
+00434  * address of the DNS server to be configured.
+00435  */
+00436 /*---------------------------------------------------------------------------*/
+00437 void
+00438 resolv_conf(u16_t *dnsserver)
+00439 {
+00440   if(resolv_conn != NULL) {
+00441     uip_udp_remove(resolv_conn);
+00442   }
+00443   
+00444   resolv_conn = uip_udp_new(dnsserver, HTONS(53));
+00445 }
+00446 /*---------------------------------------------------------------------------*/
+00447 /**
+00448  * Initalize the resolver.
+00449  */
+00450 /*---------------------------------------------------------------------------*/
+00451 void
+00452 resolv_init(void)
+00453 {
+00454   static u8_t i;
+00455   
+00456   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00457     names[i].state = STATE_DONE;
+00458   }
+00459 
+00460 }
+00461 /*---------------------------------------------------------------------------*/
+00462 
+00463 /** @} */
+00464 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00047.html b/components/net/uip/doc/html/a00047.html new file mode 100644 index 0000000000..76d0ccc9c5 --- /dev/null +++ b/components/net/uip/doc/html/a00047.html @@ -0,0 +1,95 @@ + + +uIP 1.0: resolv.h + + + + + +

resolv.h

00001 /**
+00002  * \addtogroup resolv
+00003  * @{
+00004  */
+00005 /**
+00006  * \file
+00007  * DNS resolver code header file.
+00008  * \author Adam Dunkels <adam@dunkels.com>
+00009  */
+00010 
+00011 /*
+00012  * Copyright (c) 2002-2003, Adam Dunkels.
+00013  * All rights reserved.
+00014  *
+00015  * Redistribution and use in source and binary forms, with or without
+00016  * modification, are permitted provided that the following conditions
+00017  * are met:
+00018  * 1. Redistributions of source code must retain the above copyright
+00019  *    notice, this list of conditions and the following disclaimer.
+00020  * 2. Redistributions in binary form must reproduce the above copyright
+00021  *    notice, this list of conditions and the following disclaimer in the
+00022  *    documentation and/or other materials provided with the distribution.
+00023  * 3. The name of the author may not be used to endorse or promote
+00024  *    products derived from this software without specific prior
+00025  *    written permission.
+00026  *
+00027  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00028  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00029  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00030  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00031  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00032  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00033  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00034  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00035  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00036  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00037  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00038  *
+00039  * This file is part of the uIP TCP/IP stack.
+00040  *
+00041  * $Id: resolv.h,v 1.4 2006/06/11 21:46:37 adam Exp $
+00042  *
+00043  */
+00044 #ifndef __RESOLV_H__
+00045 #define __RESOLV_H__
+00046 
+00047 typedef int uip_udp_appstate_t;
+00048 void resolv_appcall(void);
+00049 #define UIP_UDP_APPCALL resolv_appcall
+00050 
+00051 #include "uipopt.h"
+00052 
+00053 /**
+00054  * Callback function which is called when a hostname is found.
+00055  *
+00056  * This function must be implemented by the module that uses the DNS
+00057  * resolver. It is called when a hostname is found, or when a hostname
+00058  * was not found.
+00059  *
+00060  * \param name A pointer to the name that was looked up.  \param
+00061  * ipaddr A pointer to a 4-byte array containing the IP address of the
+00062  * hostname, or NULL if the hostname could not be found.
+00063  */
+00064 void resolv_found(char *name, u16_t *ipaddr);
+00065 
+00066 /* Functions. */
+00067 void resolv_conf(u16_t *dnsserver);
+00068 u16_t *resolv_getserver(void);
+00069 void resolv_init(void);
+00070 u16_t *resolv_lookup(char *name);
+00071 void resolv_query(char *name);
+00072 
+00073 #endif /* __RESOLV_H__ */
+00074 
+00075 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00048.html b/components/net/uip/doc/html/a00048.html new file mode 100644 index 0000000000..d19bf13535 --- /dev/null +++ b/components/net/uip/doc/html/a00048.html @@ -0,0 +1,376 @@ + + +uIP 1.0: dhcpc.c + + + + + +

dhcpc.c

00001 /*
+00002  * Copyright (c) 2005, Swedish Institute of Computer Science
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00032  */
+00033 
+00034 #include <stdio.h>
+00035 #include <string.h>
+00036 
+00037 #include "uip.h"
+00038 #include "dhcpc.h"
+00039 #include "timer.h"
+00040 #include "pt.h"
+00041 
+00042 #define STATE_INITIAL         0
+00043 #define STATE_SENDING         1
+00044 #define STATE_OFFER_RECEIVED  2
+00045 #define STATE_CONFIG_RECEIVED 3
+00046 
+00047 static struct dhcpc_state s;
+00048 
+00049 struct dhcp_msg {
+00050   u8_t op, htype, hlen, hops;
+00051   u8_t xid[4];
+00052   u16_t secs, flags;
+00053   u8_t ciaddr[4];
+00054   u8_t yiaddr[4];
+00055   u8_t siaddr[4];
+00056   u8_t giaddr[4];
+00057   u8_t chaddr[16];
+00058 #ifndef UIP_CONF_DHCP_LIGHT
+00059   u8_t sname[64];
+00060   u8_t file[128];
+00061 #endif
+00062   u8_t options[312];
+00063 };
+00064 
+00065 #define BOOTP_BROADCAST 0x8000
+00066 
+00067 #define DHCP_REQUEST        1
+00068 #define DHCP_REPLY          2
+00069 #define DHCP_HTYPE_ETHERNET 1
+00070 #define DHCP_HLEN_ETHERNET  6
+00071 #define DHCP_MSG_LEN      236
+00072 
+00073 #define DHCPC_SERVER_PORT  67
+00074 #define DHCPC_CLIENT_PORT  68
+00075 
+00076 #define DHCPDISCOVER  1
+00077 #define DHCPOFFER     2
+00078 #define DHCPREQUEST   3
+00079 #define DHCPDECLINE   4
+00080 #define DHCPACK       5
+00081 #define DHCPNAK       6
+00082 #define DHCPRELEASE   7
+00083 
+00084 #define DHCP_OPTION_SUBNET_MASK   1
+00085 #define DHCP_OPTION_ROUTER        3
+00086 #define DHCP_OPTION_DNS_SERVER    6
+00087 #define DHCP_OPTION_REQ_IPADDR   50
+00088 #define DHCP_OPTION_LEASE_TIME   51
+00089 #define DHCP_OPTION_MSG_TYPE     53
+00090 #define DHCP_OPTION_SERVER_ID    54
+00091 #define DHCP_OPTION_REQ_LIST     55
+00092 #define DHCP_OPTION_END         255
+00093 
+00094 static const u8_t xid[4] = {0xad, 0xde, 0x12, 0x23};
+00095 static const u8_t magic_cookie[4] = {99, 130, 83, 99};
+00096 /*---------------------------------------------------------------------------*/
+00097 static u8_t *
+00098 add_msg_type(u8_t *optptr, u8_t type)
+00099 {
+00100   *optptr++ = DHCP_OPTION_MSG_TYPE;
+00101   *optptr++ = 1;
+00102   *optptr++ = type;
+00103   return optptr;
+00104 }
+00105 /*---------------------------------------------------------------------------*/
+00106 static u8_t *
+00107 add_server_id(u8_t *optptr)
+00108 {
+00109   *optptr++ = DHCP_OPTION_SERVER_ID;
+00110   *optptr++ = 4;
+00111   memcpy(optptr, s.serverid, 4);
+00112   return optptr + 4;
+00113 }
+00114 /*---------------------------------------------------------------------------*/
+00115 static u8_t *
+00116 add_req_ipaddr(u8_t *optptr)
+00117 {
+00118   *optptr++ = DHCP_OPTION_REQ_IPADDR;
+00119   *optptr++ = 4;
+00120   memcpy(optptr, s.ipaddr, 4);
+00121   return optptr + 4;
+00122 }
+00123 /*---------------------------------------------------------------------------*/
+00124 static u8_t *
+00125 add_req_options(u8_t *optptr)
+00126 {
+00127   *optptr++ = DHCP_OPTION_REQ_LIST;
+00128   *optptr++ = 3;
+00129   *optptr++ = DHCP_OPTION_SUBNET_MASK;
+00130   *optptr++ = DHCP_OPTION_ROUTER;
+00131   *optptr++ = DHCP_OPTION_DNS_SERVER;
+00132   return optptr;
+00133 }
+00134 /*---------------------------------------------------------------------------*/
+00135 static u8_t *
+00136 add_end(u8_t *optptr)
+00137 {
+00138   *optptr++ = DHCP_OPTION_END;
+00139   return optptr;
+00140 }
+00141 /*---------------------------------------------------------------------------*/
+00142 static void
+00143 create_msg(register struct dhcp_msg *m)
+00144 {
+00145   m->op = DHCP_REQUEST;
+00146   m->htype = DHCP_HTYPE_ETHERNET;
+00147   m->hlen = s.mac_len;
+00148   m->hops = 0;
+00149   memcpy(m->xid, xid, sizeof(m->xid));
+00150   m->secs = 0;
+00151   m->flags = HTONS(BOOTP_BROADCAST); /*  Broadcast bit. */
+00152   /*  uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/
+00153   memcpy(m->ciaddr, uip_hostaddr, sizeof(m->ciaddr));
+00154   memset(m->yiaddr, 0, sizeof(m->yiaddr));
+00155   memset(m->siaddr, 0, sizeof(m->siaddr));
+00156   memset(m->giaddr, 0, sizeof(m->giaddr));
+00157   memcpy(m->chaddr, s.mac_addr, s.mac_len);
+00158   memset(&m->chaddr[s.mac_len], 0, sizeof(m->chaddr) - s.mac_len);
+00159 #ifndef UIP_CONF_DHCP_LIGHT
+00160   memset(m->sname, 0, sizeof(m->sname));
+00161   memset(m->file, 0, sizeof(m->file));
+00162 #endif
+00163 
+00164   memcpy(m->options, magic_cookie, sizeof(magic_cookie));
+00165 }
+00166 /*---------------------------------------------------------------------------*/
+00167 static void
+00168 send_discover(void)
+00169 {
+00170   u8_t *end;
+00171   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00172 
+00173   create_msg(m);
+00174 
+00175   end = add_msg_type(&m->options[4], DHCPDISCOVER);
+00176   end = add_req_options(end);
+00177   end = add_end(end);
+00178 
+00179   uip_send(uip_appdata, end - (u8_t *)uip_appdata);
+00180 }
+00181 /*---------------------------------------------------------------------------*/
+00182 static void
+00183 send_request(void)
+00184 {
+00185   u8_t *end;
+00186   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00187 
+00188   create_msg(m);
+00189   
+00190   end = add_msg_type(&m->options[4], DHCPREQUEST);
+00191   end = add_server_id(end);
+00192   end = add_req_ipaddr(end);
+00193   end = add_end(end);
+00194   
+00195   uip_send(uip_appdata, end - (u8_t *)uip_appdata);
+00196 }
+00197 /*---------------------------------------------------------------------------*/
+00198 static u8_t
+00199 parse_options(u8_t *optptr, int len)
+00200 {
+00201   u8_t *end = optptr + len;
+00202   u8_t type = 0;
+00203 
+00204   while(optptr < end) {
+00205     switch(*optptr) {
+00206     case DHCP_OPTION_SUBNET_MASK:
+00207       memcpy(s.netmask, optptr + 2, 4);
+00208       break;
+00209     case DHCP_OPTION_ROUTER:
+00210       memcpy(s.default_router, optptr + 2, 4);
+00211       break;
+00212     case DHCP_OPTION_DNS_SERVER:
+00213       memcpy(s.dnsaddr, optptr + 2, 4);
+00214       break;
+00215     case DHCP_OPTION_MSG_TYPE:
+00216       type = *(optptr + 2);
+00217       break;
+00218     case DHCP_OPTION_SERVER_ID:
+00219       memcpy(s.serverid, optptr + 2, 4);
+00220       break;
+00221     case DHCP_OPTION_LEASE_TIME:
+00222       memcpy(s.lease_time, optptr + 2, 4);
+00223       break;
+00224     case DHCP_OPTION_END:
+00225       return type;
+00226     }
+00227 
+00228     optptr += optptr[1] + 2;
+00229   }
+00230   return type;
+00231 }
+00232 /*---------------------------------------------------------------------------*/
+00233 static u8_t
+00234 parse_msg(void)
+00235 {
+00236   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00237   
+00238   if(m->op == DHCP_REPLY &&
+00239      memcmp(m->xid, xid, sizeof(xid)) == 0 &&
+00240      memcmp(m->chaddr, s.mac_addr, s.mac_len) == 0) {
+00241     memcpy(s.ipaddr, m->yiaddr, 4);
+00242     return parse_options(&m->options[4], uip_datalen());
+00243   }
+00244   return 0;
+00245 }
+00246 /*---------------------------------------------------------------------------*/
+00247 static
+00248 PT_THREAD(handle_dhcp(void))
+00249 {
+00250   PT_BEGIN(&s.pt);
+00251   
+00252   /* try_again:*/
+00253   s.state = STATE_SENDING;
+00254   s.ticks = CLOCK_SECOND;
+00255 
+00256   do {
+00257     send_discover();
+00258     timer_set(&s.timer, s.ticks);
+00259     PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer));
+00260 
+00261     if(uip_newdata() && parse_msg() == DHCPOFFER) {
+00262       s.state = STATE_OFFER_RECEIVED;
+00263       break;
+00264     }
+00265 
+00266     if(s.ticks < CLOCK_SECOND * 60) {
+00267       s.ticks *= 2;
+00268     }
+00269   } while(s.state != STATE_OFFER_RECEIVED);
+00270   
+00271   s.ticks = CLOCK_SECOND;
+00272 
+00273   do {
+00274     send_request();
+00275     timer_set(&s.timer, s.ticks);
+00276     PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer));
+00277 
+00278     if(uip_newdata() && parse_msg() == DHCPACK) {
+00279       s.state = STATE_CONFIG_RECEIVED;
+00280       break;
+00281     }
+00282 
+00283     if(s.ticks <= CLOCK_SECOND * 10) {
+00284       s.ticks += CLOCK_SECOND;
+00285     } else {
+00286       PT_RESTART(&s.pt);
+00287     }
+00288   } while(s.state != STATE_CONFIG_RECEIVED);
+00289   
+00290 #if 0
+00291   printf("Got IP address %d.%d.%d.%d\n",
+00292          uip_ipaddr1(s.ipaddr), uip_ipaddr2(s.ipaddr),
+00293          uip_ipaddr3(s.ipaddr), uip_ipaddr4(s.ipaddr));
+00294   printf("Got netmask %d.%d.%d.%d\n",
+00295          uip_ipaddr1(s.netmask), uip_ipaddr2(s.netmask),
+00296          uip_ipaddr3(s.netmask), uip_ipaddr4(s.netmask));
+00297   printf("Got DNS server %d.%d.%d.%d\n",
+00298          uip_ipaddr1(s.dnsaddr), uip_ipaddr2(s.dnsaddr),
+00299          uip_ipaddr3(s.dnsaddr), uip_ipaddr4(s.dnsaddr));
+00300   printf("Got default router %d.%d.%d.%d\n",
+00301          uip_ipaddr1(s.default_router), uip_ipaddr2(s.default_router),
+00302          uip_ipaddr3(s.default_router), uip_ipaddr4(s.default_router));
+00303   printf("Lease expires in %ld seconds\n",
+00304          ntohs(s.lease_time[0])*65536ul + ntohs(s.lease_time[1]));
+00305 #endif
+00306 
+00307   dhcpc_configured(&s);
+00308   
+00309   /*  timer_stop(&s.timer);*/
+00310 
+00311   /*
+00312    * PT_END restarts the thread so we do this instead. Eventually we
+00313    * should reacquire expired leases here.
+00314    */
+00315   while(1) {
+00316     PT_YIELD(&s.pt);
+00317   }
+00318 
+00319   PT_END(&s.pt);
+00320 }
+00321 /*---------------------------------------------------------------------------*/
+00322 void
+00323 dhcpc_init(const void *mac_addr, int mac_len)
+00324 {
+00325   uip_ipaddr_t addr;
+00326   
+00327   s.mac_addr = mac_addr;
+00328   s.mac_len  = mac_len;
+00329 
+00330   s.state = STATE_INITIAL;
+00331   uip_ipaddr(addr, 255,255,255,255);
+00332   s.conn = uip_udp_new(&addr, HTONS(DHCPC_SERVER_PORT));
+00333   if(s.conn != NULL) {
+00334     uip_udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT));
+00335   }
+00336   PT_INIT(&s.pt);
+00337 }
+00338 /*---------------------------------------------------------------------------*/
+00339 void
+00340 dhcpc_appcall(void)
+00341 {
+00342   handle_dhcp();
+00343 }
+00344 /*---------------------------------------------------------------------------*/
+00345 void
+00346 dhcpc_request(void)
+00347 {
+00348   u16_t ipaddr[2];
+00349   
+00350   if(s.state == STATE_INITIAL) {
+00351     uip_ipaddr(ipaddr, 0,0,0,0);
+00352     uip_sethostaddr(ipaddr);
+00353     /*    handle_dhcp(PROCESS_EVENT_NONE, NULL);*/
+00354   }
+00355 }
+00356 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00049.html b/components/net/uip/doc/html/a00049.html new file mode 100644 index 0000000000..5b5a7c0368 --- /dev/null +++ b/components/net/uip/doc/html/a00049.html @@ -0,0 +1,88 @@ + + +uIP 1.0: dhcpc.h + + + + + +

dhcpc.h

00001 /*
+00002  * Copyright (c) 2005, Swedish Institute of Computer Science
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $
+00032  */
+00033 #ifndef __DHCPC_H__
+00034 #define __DHCPC_H__
+00035 
+00036 #include "timer.h"
+00037 #include "pt.h"
+00038 
+00039 struct dhcpc_state {
+00040   struct pt pt;
+00041   char state;
+00042   struct uip_udp_conn *conn;
+00043   struct timer timer;
+00044   u16_t ticks;
+00045   const void *mac_addr;
+00046   int mac_len;
+00047   
+00048   u8_t serverid[4];
+00049 
+00050   u16_t lease_time[2];
+00051   u16_t ipaddr[2];
+00052   u16_t netmask[2];
+00053   u16_t dnsaddr[2];
+00054   u16_t default_router[2];
+00055 };
+00056 
+00057 void dhcpc_init(const void *mac_addr, int mac_len);
+00058 void dhcpc_request(void);
+00059 
+00060 void dhcpc_appcall(void);
+00061 
+00062 void dhcpc_configured(const struct dhcpc_state *s);
+00063 
+00064 typedef struct dhcpc_state uip_udp_appstate_t;
+00065 #define UIP_UDP_APPCALL dhcpc_appcall
+00066 
+00067 
+00068 #endif /* __DHCPC_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00050.html b/components/net/uip/doc/html/a00050.html new file mode 100644 index 0000000000..ddfa65690d --- /dev/null +++ b/components/net/uip/doc/html/a00050.html @@ -0,0 +1,177 @@ + + +uIP 1.0: uip-conf.h + + + + + +

uip-conf.h

00001 /**
+00002  * \addtogroup uipopt
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \name Project-specific configuration options
+00008  * @{
+00009  *
+00010  * uIP has a number of configuration options that can be overridden
+00011  * for each project. These are kept in a project-specific uip-conf.h
+00012  * file and all configuration names have the prefix UIP_CONF.
+00013  */
+00014 
+00015 /*
+00016  * Copyright (c) 2006, Swedish Institute of Computer Science.
+00017  * All rights reserved.
+00018  *
+00019  * Redistribution and use in source and binary forms, with or without
+00020  * modification, are permitted provided that the following conditions
+00021  * are met:
+00022  * 1. Redistributions of source code must retain the above copyright
+00023  *    notice, this list of conditions and the following disclaimer.
+00024  * 2. Redistributions in binary form must reproduce the above copyright
+00025  *    notice, this list of conditions and the following disclaimer in the
+00026  *    documentation and/or other materials provided with the distribution.
+00027  * 3. Neither the name of the Institute nor the names of its contributors
+00028  *    may be used to endorse or promote products derived from this software
+00029  *    without specific prior written permission.
+00030  *
+00031  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00032  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00033  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00034  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00035  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00036  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00037  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00038  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00039  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00040  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00041  * SUCH DAMAGE.
+00042  *
+00043  * This file is part of the uIP TCP/IP stack
+00044  *
+00045  * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $
+00046  */
+00047 
+00048 /**
+00049  * \file
+00050  *         An example uIP configuration file
+00051  * \author
+00052  *         Adam Dunkels <adam@sics.se>
+00053  */
+00054 
+00055 #ifndef __UIP_CONF_H__
+00056 #define __UIP_CONF_H__
+00057 
+00058 #include <inttypes.h>
+00059 
+00060 /**
+00061  * 8 bit datatype
+00062  *
+00063  * This typedef defines the 8-bit type used throughout uIP.
+00064  *
+00065  * \hideinitializer
+00066  */
+00067 typedef uint8_t u8_t;
+00068 
+00069 /**
+00070  * 16 bit datatype
+00071  *
+00072  * This typedef defines the 16-bit type used throughout uIP.
+00073  *
+00074  * \hideinitializer
+00075  */
+00076 typedef uint16_t u16_t;
+00077 
+00078 /**
+00079  * Statistics datatype
+00080  *
+00081  * This typedef defines the dataype used for keeping statistics in
+00082  * uIP.
+00083  *
+00084  * \hideinitializer
+00085  */
+00086 typedef unsigned short uip_stats_t;
+00087 
+00088 /**
+00089  * Maximum number of TCP connections.
+00090  *
+00091  * \hideinitializer
+00092  */
+00093 #define UIP_CONF_MAX_CONNECTIONS 40
+00094 
+00095 /**
+00096  * Maximum number of listening TCP ports.
+00097  *
+00098  * \hideinitializer
+00099  */
+00100 #define UIP_CONF_MAX_LISTENPORTS 40
+00101 
+00102 /**
+00103  * uIP buffer size.
+00104  *
+00105  * \hideinitializer
+00106  */
+00107 #define UIP_CONF_BUFFER_SIZE     420
+00108 
+00109 /**
+00110  * CPU byte order.
+00111  *
+00112  * \hideinitializer
+00113  */
+00114 #define UIP_CONF_BYTE_ORDER      LITTLE_ENDIAN
+00115 
+00116 /**
+00117  * Logging on or off
+00118  *
+00119  * \hideinitializer
+00120  */
+00121 #define UIP_CONF_LOGGING         1
+00122 
+00123 /**
+00124  * UDP support on or off
+00125  *
+00126  * \hideinitializer
+00127  */
+00128 #define UIP_CONF_UDP             0
+00129 
+00130 /**
+00131  * UDP checksums on or off
+00132  *
+00133  * \hideinitializer
+00134  */
+00135 #define UIP_CONF_UDP_CHECKSUMS   1
+00136 
+00137 /**
+00138  * uIP statistics on or off
+00139  *
+00140  * \hideinitializer
+00141  */
+00142 #define UIP_CONF_STATISTICS      1
+00143 
+00144 /* Here we include the header file for the application(s) we use in
+00145    our project. */
+00146 /*#include "smtp.h"*/
+00147 /*#include "hello-world.h"*/
+00148 /*#include "telnetd.h"*/
+00149 #include "webserver.h"
+00150 /*#include "dhcpc.h"*/
+00151 /*#include "resolv.h"*/
+00152 /*#include "webclient.h"*/
+00153 
+00154 #endif /* __UIP_CONF_H__ */
+00155 
+00156 /** @} */
+00157 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00051.html b/components/net/uip/doc/html/a00051.html new file mode 100644 index 0000000000..e9197ffefa --- /dev/null +++ b/components/net/uip/doc/html/a00051.html @@ -0,0 +1,138 @@ + + +uIP 1.0: uip-code-style.c + + + + + +

uip-code-style.c

00001 /* This is the official code style of uIP. */
+00002 
+00003 /**
+00004  * \defgroup codestyle Coding style
+00005  *
+00006  * This is how a Doxygen module is documented - start with a \defgroup
+00007  * Doxygen keyword at the beginning of the file to define a module,
+00008  * and use the \addtogroup Doxygen keyword in all other files that
+00009  * belong to the same module. Typically, the \defgroup is placed in
+00010  * the .h file and \addtogroup in the .c file.
+00011  *
+00012  * @{
+00013  */
+00014 
+00015 /**
+00016  * \file
+00017  *         A brief description of what this file is.
+00018  * \author
+00019  *         Adam Dunkels <adam@sics.se>
+00020  *
+00021  *         Every file that is part of a documented module has to have
+00022  *         a \file block, else it will not show up in the Doxygen
+00023  *         "Modules" * section.
+00024  */
+00025 
+00026 /* Single line comments look like this. */
+00027 
+00028 /*
+00029  * Multi-line comments look like this. Comments should prefferably be
+00030  * full sentences, filled to look like real paragraphs.
+00031  */
+00032 
+00033 #include "uip.h"
+00034 
+00035 /*
+00036  * Make sure that non-global variables are all maked with the static
+00037  * keyword. This keeps the size of the symbol table down.
+00038  */
+00039 static int flag;
+00040 
+00041 /*
+00042  * All variables and functions that are visible outside of the file
+00043  * should have the module name prepended to them. This makes it easy
+00044  * to know where to look for function and variable definitions.
+00045  *
+00046  * Put dividers (a single-line comment consisting only of dashes)
+00047  * between functions.
+00048  */
+00049 /*---------------------------------------------------------------------------*/
+00050 /**
+00051  * \brief      Use Doxygen documentation for functions.
+00052  * \param c    Briefly describe all parameters.
+00053  * \return     Briefly describe the return value.
+00054  * \retval 0   Functions that return a few specified values
+00055  * \retval 1   can use the \retval keyword instead of \return.
+00056  *
+00057  *             Put a longer description of what the function does
+00058  *             after the preamble of Doxygen keywords.
+00059  *
+00060  *             This template should always be used to document
+00061  *             functions. The text following the introduction is used
+00062  *             as the function's documentation.
+00063  *
+00064  *             Function prototypes have the return type on one line,
+00065  *             the name and arguments on one line (with no space
+00066  *             between the name and the first parenthesis), followed
+00067  *             by a single curly bracket on its own line.
+00068  */
+00069 void
+00070 code_style_example_function(void)
+00071 {
+00072   /*
+00073    * Local variables should always be declared at the start of the
+00074    * function.
+00075    */
+00076   int i;                   /* Use short variable names for loop
+00077                               counters. */
+00078 
+00079   /*
+00080    * There should be no space between keywords and the first
+00081    * parenthesis. There should be spaces around binary operators, no
+00082    * spaces between a unary operator and its operand.
+00083    *
+00084    * Curly brackets following for(), if(), do, and case() statements
+00085    * should follow the statement on the same line.
+00086    */
+00087   for(i = 0; i < 10; ++i) {
+00088     /*
+00089      * Always use full blocks (curly brackets) after if(), for(), and
+00090      * while() statements, even though the statement is a single line
+00091      * of code. This makes the code easier to read and modifications
+00092      * are less error prone.
+00093      */
+00094     if(i == c) {
+00095       return c;           /* No parentesis around return values. */
+00096     } else {              /* The else keyword is placed inbetween
+00097                              curly brackers, always on its own line. */
+00098       c++;
+00099     }
+00100   }
+00101 }
+00102 /*---------------------------------------------------------------------------*/
+00103 /*
+00104  * Static (non-global) functions do not need Doxygen comments. The
+00105  * name should not be prepended with the module name - doing so would
+00106  * create confusion.
+00107  */
+00108 static void
+00109 an_example_function(void)
+00110 {
+00111   
+00112 }
+00113 /*---------------------------------------------------------------------------*/
+00114 
+00115 /* The following stuff ends the \defgroup block at the beginning of
+00116    the file: */
+00117 
+00118 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00077.html b/components/net/uip/doc/html/a00077.html new file mode 100644 index 0000000000..824f439133 --- /dev/null +++ b/components/net/uip/doc/html/a00077.html @@ -0,0 +1,78 @@ + + +uIP 1.0: dhcpc_state Struct Reference + + + + + + +

dhcpc_state Struct Reference


Detailed Description

+
Examples:
+ +

+dhcpc.c, and dhcpc.h.

+

+ +

+Definition at line 39 of file dhcpc.h.

LocalRemoteStateRetransmissionsTimerFlags
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+pt pt
+char state
+uip_udp_conn * conn
+timer timer
+u16_t ticks
+const void * mac_addr
+int mac_len
+u8_t serverid [4]
+u16_t lease_time [2]
+u16_t ipaddr [2]
+u16_t netmask [2]
+u16_t dnsaddr [2]
+u16_t default_router [2]
+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00078.html b/components/net/uip/doc/html/a00078.html new file mode 100644 index 0000000000..ef60451c24 --- /dev/null +++ b/components/net/uip/doc/html/a00078.html @@ -0,0 +1,51 @@ + + +uIP 1.0: hello_world_state Struct Reference + + + + + + +

hello_world_state Struct Reference
+ +[Hello, world] +


Detailed Description

+
Examples:
+ +

+hello-world.c, and hello-world.h.

+

+ +

+Definition at line 36 of file hello-world.h. + + + + + + + + +

Data Fields

+psock p
+char inputbuffer [10]
+char name [40]
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00079.html b/components/net/uip/doc/html/a00079.html new file mode 100644 index 0000000000..2701b54928 --- /dev/null +++ b/components/net/uip/doc/html/a00079.html @@ -0,0 +1,45 @@ + + +uIP 1.0: httpd_cgi_call Struct Reference + + + + + + +

httpd_cgi_call Struct Reference
+ +[Web server] +


Detailed Description

+ +

+ +

+Definition at line 60 of file httpd-cgi.h. + + + + + + +

Data Fields

+const char * name
+const httpd_cgifunction function
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00080.html b/components/net/uip/doc/html/a00080.html new file mode 100644 index 0000000000..737ea1318d --- /dev/null +++ b/components/net/uip/doc/html/a00080.html @@ -0,0 +1,69 @@ + + +uIP 1.0: httpd_state Struct Reference + + + + + + +

httpd_state Struct Reference


Detailed Description

+ +

+ +

+Definition at line 41 of file httpd.h. + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+unsigned char timer
+psock sin sout
+pt outputpt scriptpt
+char inputbuf [50]
+char filename [20]
+char state
+httpd_fs_file file
+int len
+char * scriptptr
+int scriptlen
+unsigned short count
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00081.html b/components/net/uip/doc/html/a00081.html new file mode 100644 index 0000000000..821207bf72 --- /dev/null +++ b/components/net/uip/doc/html/a00081.html @@ -0,0 +1,51 @@ + + +uIP 1.0: memb_blocks Struct Reference + + + + + + +

memb_blocks Struct Reference
+ +[Memory block management functions] +


Detailed Description

+ +

+ +

+Definition at line 105 of file memb.h. + + + + + + + + + + +

Data Fields

+unsigned short size
+unsigned short num
+char * count
+void * mem
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00082.html b/components/net/uip/doc/html/a00082.html new file mode 100644 index 0000000000..0da540dd5d --- /dev/null +++ b/components/net/uip/doc/html/a00082.html @@ -0,0 +1,73 @@ + + +uIP 1.0: psock Struct Reference + + + + + + +

psock Struct Reference
+ +[Protosockets library] +

#include <psock.h> +

+


Detailed Description

+The representation of a protosocket. +

+The protosocket structrure is an opaque structure with no user-visible elements.

Examples:
+ +

+hello-world.h.

+

+ +

+Definition at line 106 of file psock.h. + + + + + + + + + + + + + + + + + + + + +

Data Fields

+pt pt psockpt
+const u8_t * sendptr
+u8_t * readptr
+char * bufptr
+u16_t sendlen
+u16_t readlen
+psock_buf buf
+unsigned int bufsize
+unsigned char state
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00083.html b/components/net/uip/doc/html/a00083.html new file mode 100644 index 0000000000..2cfc033483 --- /dev/null +++ b/components/net/uip/doc/html/a00083.html @@ -0,0 +1,45 @@ + + +uIP 1.0: psock_buf Struct Reference + + + + + + +

psock_buf Struct Reference
+ +[Protosockets library] +


Detailed Description

+ +

+ +

+Definition at line 95 of file psock.h. + + + + + + +

Data Fields

+u8_t * ptr
+unsigned short left
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00084.html b/components/net/uip/doc/html/a00084.html new file mode 100644 index 0000000000..7a7741fdff --- /dev/null +++ b/components/net/uip/doc/html/a00084.html @@ -0,0 +1,45 @@ + + +uIP 1.0: pt Struct Reference + + + + + + +

pt Struct Reference
+ +[Protothreads] +


Detailed Description

+
Examples:
+ +

+dhcpc.h.

+

+ +

+Definition at line 54 of file pt.h. + + + + +

Data Fields

+lc_t lc
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00085.html b/components/net/uip/doc/html/a00085.html new file mode 100644 index 0000000000..4226e0ecbc --- /dev/null +++ b/components/net/uip/doc/html/a00085.html @@ -0,0 +1,69 @@ + + +uIP 1.0: smtp_state Struct Reference + + + + + + +

smtp_state Struct Reference
+ +[SMTP E-mail sender] +


Detailed Description

+
Examples:
+ +

+hello-world.h, smtp.c, and smtp.h.

+

+ +

+Definition at line 81 of file smtp.h. + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t state
+char * to
+char * from
+char * subject
+char * msg
+u16_t msglen
+u16_t sentlen
+u16_t textlen
+u16_t sendptr
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00086.html b/components/net/uip/doc/html/a00086.html new file mode 100644 index 0000000000..1611163d6f --- /dev/null +++ b/components/net/uip/doc/html/a00086.html @@ -0,0 +1,54 @@ + + +uIP 1.0: telnetd_state Struct Reference + + + + + + +

telnetd_state Struct Reference


Detailed Description

+
Examples:
+ +

+telnetd.c, and telnetd.h.

+

+ +

+Definition at line 49 of file telnetd.h. + + + + + + + + + + + + +

Data Fields

+char * lines [TELNETD_CONF_NUMLINES]
+char buf [TELNETD_CONF_LINELEN]
+char bufptr
+u8_t numsent
+u8_t state
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00087.html b/components/net/uip/doc/html/a00087.html new file mode 100644 index 0000000000..3b2fec3c87 --- /dev/null +++ b/components/net/uip/doc/html/a00087.html @@ -0,0 +1,52 @@ + + +uIP 1.0: timer Struct Reference + + + + + + +

timer Struct Reference
+ +[Timer library] +

#include <timer.h> +

+


Detailed Description

+A timer. +

+This structure is used for declaring a timer. The timer must be set with timer_set() before it can be used.

Examples:
+ +

+dhcpc.h, example-mainloop-with-arp.c, example-mainloop-without-arp.c, and webclient.h.

+

+ +

+Definition at line 74 of file timer.h. + + + + + + +

Data Fields

+clock_time_t start
+clock_time_t interval
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00088.html b/components/net/uip/doc/html/a00088.html new file mode 100644 index 0000000000..7ca46ae6a4 --- /dev/null +++ b/components/net/uip/doc/html/a00088.html @@ -0,0 +1,103 @@ + + +uIP 1.0: uip_conn Struct Reference + + + + + + +

uip_conn Struct Reference
+ +[The uIP TCP/IP stack] +

#include <uip.h> +

+


Detailed Description

+Representation of a uIP TCP connection. +

+The uip_conn structure is used for identifying a connection. All but one field in the structure are to be considered read-only by an application. The only exception is the appstate field whos purpose is to let the application store application-specific state (e.g., file pointers) for the connection. The type of this field is configured in the "uipopt.h" header file. +

+ +

+Definition at line 1153 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+uip_ipaddr_t ripaddr
 The IP address of the remote host.
+u16_t lport
 The local TCP port, in network byte order.
+u16_t rport
 The local remote TCP port, in network byte order.
+u8_t rcv_nxt [4]
 The sequence number that we expect to receive next.
+u8_t snd_nxt [4]
 The sequence number that was last sent by us.
+u16_t len
 Length of the data that was previously sent.
+u16_t mss
 Current maximum segment size for the connection.
+u16_t initialmss
 Initial maximum segment size for the connection.
+u8_t sa
 Retransmission time-out calculation state variable.
+u8_t sv
 Retransmission time-out calculation state variable.
+u8_t rto
 Retransmission time-out.
+u8_t tcpstateflags
 TCP state and flags.
+u8_t timer
 The retransmission timer.
+u8_t nrtx
 The number of retransmissions for the last segment sent.
+uip_tcp_appstate_t appstate
 The application state.
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00089.html b/components/net/uip/doc/html/a00089.html new file mode 100644 index 0000000000..d935ccddff --- /dev/null +++ b/components/net/uip/doc/html/a00089.html @@ -0,0 +1,44 @@ + + +uIP 1.0: uip_eth_addr Struct Reference + + + + + + +

uip_eth_addr Struct Reference
+ +[The uIP TCP/IP stack] +

#include <uip.h> +

+


Detailed Description

+Representation of a 48-bit Ethernet address. +

+ +

+Definition at line 1542 of file uip.h. + + + + +

Data Fields

+u8_t addr [6]
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00090.html b/components/net/uip/doc/html/a00090.html new file mode 100644 index 0000000000..ee37ca5099 --- /dev/null +++ b/components/net/uip/doc/html/a00090.html @@ -0,0 +1,50 @@ + + +uIP 1.0: uip_eth_hdr Struct Reference + + + + + + +

uip_eth_hdr Struct Reference
+ +[uIP Address Resolution Protocol] +

#include <uip_arp.h> +

+


Detailed Description

+The Ethernet header. +

+ +

+Definition at line 63 of file uip_arp.h. + + + + + + + + +

Data Fields

+uip_eth_addr dest
+uip_eth_addr src
+u16_t type
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00091.html b/components/net/uip/doc/html/a00091.html new file mode 100644 index 0000000000..63a2a523c5 --- /dev/null +++ b/components/net/uip/doc/html/a00091.html @@ -0,0 +1,84 @@ + + +uIP 1.0: uip_icmpip_hdr Struct Reference + + + + + + +

uip_icmpip_hdr Struct Reference
+ +[The uIP TCP/IP stack] +


Detailed Description

+ +

+ +

+Definition at line 1423 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t vhl
+u8_t tos
+u8_t len [2]
+u8_t ipid [2]
+u8_t ipoffset [2]
+u8_t ttl
+u8_t proto
+u16_t ipchksum
+u16_t srcipaddr [2]
+u16_t destipaddr [2]
+u8_t type
+u8_t icode
+u16_t icmpchksum
+u16_t id
+u16_t seqno
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00092.html b/components/net/uip/doc/html/a00092.html new file mode 100644 index 0000000000..93c00c2a85 --- /dev/null +++ b/components/net/uip/doc/html/a00092.html @@ -0,0 +1,39 @@ + + +uIP 1.0: uip_neighbor_addr Struct Reference + + + + + + +

uip_neighbor_addr Struct Reference


Detailed Description

+ +

+ +

+Definition at line 47 of file uip-neighbor.h. + + + + +

Data Fields

+uip_eth_addr addr
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00093.html b/components/net/uip/doc/html/a00093.html new file mode 100644 index 0000000000..2d3a91a40b --- /dev/null +++ b/components/net/uip/doc/html/a00093.html @@ -0,0 +1,143 @@ + + +uIP 1.0: uip_stats Struct Reference + + + + + + +

uip_stats Struct Reference
+ +[The uIP TCP/IP stack] +

#include <uip.h> +

+


Detailed Description

+The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. +

+ +

+Definition at line 1232 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+struct {
   uip_stats_t   drop
 Number of dropped packets at the IP layer.
   uip_stats_t   recv
 Number of received packets at the IP layer.
   uip_stats_t   sent
 Number of sent packets at the IP layer.
   uip_stats_t   vhlerr
 Number of packets dropped due to wrong IP version or header length.
   uip_stats_t   hblenerr
 Number of packets dropped due to wrong IP length, high byte.
   uip_stats_t   lblenerr
 Number of packets dropped due to wrong IP length, low byte.
   uip_stats_t   fragerr
 Number of packets dropped since they were IP fragments.
   uip_stats_t   chkerr
 Number of packets dropped due to IP checksum errors.
   uip_stats_t   protoerr
 Number of packets dropped since they were neither ICMP, UDP nor TCP.
} ip
 IP statistics.
+struct {
   uip_stats_t   drop
 Number of dropped ICMP packets.
   uip_stats_t   recv
 Number of received ICMP packets.
   uip_stats_t   sent
 Number of sent ICMP packets.
   uip_stats_t   typeerr
 Number of ICMP packets with a wrong type.
} icmp
 ICMP statistics.
+struct {
   uip_stats_t   drop
 Number of dropped TCP segments.
   uip_stats_t   recv
 Number of recived TCP segments.
   uip_stats_t   sent
 Number of sent TCP segments.
   uip_stats_t   chkerr
 Number of TCP segments with a bad checksum.
   uip_stats_t   ackerr
 Number of TCP segments with a bad ACK number.
   uip_stats_t   rst
 Number of recevied TCP RST (reset) segments.
   uip_stats_t   rexmit
 Number of retransmitted TCP segments.
   uip_stats_t   syndrop
 Number of dropped SYNs due to too few connections was avaliable.
   uip_stats_t   synrst
 Number of SYNs for closed ports, triggering a RST.
} tcp
 TCP statistics.
+struct {
   uip_stats_t   drop
 Number of dropped UDP segments.
   uip_stats_t   recv
 Number of recived UDP segments.
   uip_stats_t   sent
 Number of sent UDP segments.
   uip_stats_t   chkerr
 Number of UDP segments with a bad checksum.
} udp
 UDP statistics.
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00094.html b/components/net/uip/doc/html/a00094.html new file mode 100644 index 0000000000..7d21f8c66f --- /dev/null +++ b/components/net/uip/doc/html/a00094.html @@ -0,0 +1,99 @@ + + +uIP 1.0: uip_tcpip_hdr Struct Reference + + + + + + +

uip_tcpip_hdr Struct Reference
+ +[The uIP TCP/IP stack] +


Detailed Description

+ +

+ +

+Definition at line 1386 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t vhl
+u8_t tos
+u8_t len [2]
+u8_t ipid [2]
+u8_t ipoffset [2]
+u8_t ttl
+u8_t proto
+u16_t ipchksum
+u16_t srcipaddr [2]
+u16_t destipaddr [2]
+u16_t srcport
+u16_t destport
+u8_t seqno [4]
+u8_t ackno [4]
+u8_t tcpoffset
+u8_t flags
+u8_t wnd [2]
+u16_t tcpchksum
+u8_t urgp [2]
+u8_t optdata [4]
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00095.html b/components/net/uip/doc/html/a00095.html new file mode 100644 index 0000000000..f61d8975aa --- /dev/null +++ b/components/net/uip/doc/html/a00095.html @@ -0,0 +1,64 @@ + + +uIP 1.0: uip_udp_conn Struct Reference + + + + + + +

uip_udp_conn Struct Reference
+ +[The uIP TCP/IP stack] +

#include <uip.h> +

+


Detailed Description

+Representation of a uIP UDP connection.
Examples:
+ +

+dhcpc.h, and resolv.c.

+

+ +

+Definition at line 1210 of file uip.h. + + + + + + + + + + + + + + + + + +

Data Fields

+uip_ipaddr_t ripaddr
 The IP address of the remote peer.
+u16_t lport
 The local port number in network byte order.
+u16_t rport
 The remote port number in network byte order.
+u8_t ttl
 Default time-to-live.
+uip_udp_appstate_t appstate
 The application state.
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00096.html b/components/net/uip/doc/html/a00096.html new file mode 100644 index 0000000000..48d6bf35cd --- /dev/null +++ b/components/net/uip/doc/html/a00096.html @@ -0,0 +1,81 @@ + + +uIP 1.0: uip_udpip_hdr Struct Reference + + + + + + +

uip_udpip_hdr Struct Reference
+ +[The uIP TCP/IP stack] +


Detailed Description

+ +

+ +

+Definition at line 1460 of file uip.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t vhl
+u8_t tos
+u8_t len [2]
+u8_t ipid [2]
+u8_t ipoffset [2]
+u8_t ttl
+u8_t proto
+u16_t ipchksum
+u16_t srcipaddr [2]
+u16_t destipaddr [2]
+u16_t srcport
+u16_t destport
+u16_t udplen
+u16_t udpchksum
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00097.html b/components/net/uip/doc/html/a00097.html new file mode 100644 index 0000000000..da7b8527f6 --- /dev/null +++ b/components/net/uip/doc/html/a00097.html @@ -0,0 +1,75 @@ + + +uIP 1.0: webclient_state Struct Reference + + + + + + +

webclient_state Struct Reference
+ +[Web client] +


Detailed Description

+
Examples:
+ +

+webclient.c, and webclient.h.

+

+ +

+Definition at line 55 of file webclient.h. + + + + + + + + + + + + + + + + + + + + + + + + +

Data Fields

+u8_t timer
+u8_t state
+u8_t httpflag
+u16_t port
+char host [40]
+char file [WEBCLIENT_CONF_MAX_URLLEN]
+u16_t getrequestptr
+u16_t getrequestleft
+char httpheaderline [200]
+u16_t httpheaderlineptr
+char mimetype [32]
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00100.html b/components/net/uip/doc/html/a00100.html new file mode 100644 index 0000000000..8291183fb6 --- /dev/null +++ b/components/net/uip/doc/html/a00100.html @@ -0,0 +1,48 @@ + + +uIP 1.0: apps/hello-world/hello-world.c File Reference + + + + + + +

apps/hello-world/hello-world.c File Reference


Detailed Description

+An example of how to write uIP applications with protosockets. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file hello-world.c. +

+#include "hello-world.h"
+#include "uip.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + +

Functions

+void hello_world_init (void)
+void hello_world_appcall (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00101.html b/components/net/uip/doc/html/a00101.html new file mode 100644 index 0000000000..f4761b8430 --- /dev/null +++ b/components/net/uip/doc/html/a00101.html @@ -0,0 +1,54 @@ + + +uIP 1.0: apps/hello-world/hello-world.h File Reference + + + + + + +

apps/hello-world/hello-world.h File Reference


Detailed Description

+Header file for an example of how to write uIP applications with protosockets. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file hello-world.h. +

+#include "uipopt.h"
+#include "psock.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + +

Data Structures

struct  hello_world_state

Defines

+#define UIP_APPCALL   hello_world_appcall

Functions

+void hello_world_appcall (void)
+void hello_world_init (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00102.html b/components/net/uip/doc/html/a00102.html new file mode 100644 index 0000000000..1f4e3fa792 --- /dev/null +++ b/components/net/uip/doc/html/a00102.html @@ -0,0 +1,119 @@ + + +uIP 1.0: apps/resolv/resolv.c File Reference + + + + + + +

apps/resolv/resolv.c File Reference


Detailed Description

+DNS host name to IP address resolver. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+This file implements a DNS host name to IP address resolver. +

+Definition in file resolv.c. +

+#include "resolv.h"
+#include "uip.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define NULL   (void *)0
+#define MAX_RETRIES   8
+#define DNS_FLAG1_RESPONSE   0x80
+#define DNS_FLAG1_OPCODE_STATUS   0x10
+#define DNS_FLAG1_OPCODE_INVERSE   0x08
+#define DNS_FLAG1_OPCODE_STANDARD   0x00
+#define DNS_FLAG1_AUTHORATIVE   0x04
+#define DNS_FLAG1_TRUNC   0x02
+#define DNS_FLAG1_RD   0x01
+#define DNS_FLAG2_RA   0x80
+#define DNS_FLAG2_ERR_MASK   0x0f
+#define DNS_FLAG2_ERR_NONE   0x00
+#define DNS_FLAG2_ERR_NAME   0x03
+#define STATE_UNUSED   0
+#define STATE_NEW   1
+#define STATE_ASKING   2
+#define STATE_DONE   3
+#define STATE_ERROR   4
+#define RESOLV_ENTRIES   4

Functions

+void resolv_appcall (void)
void resolv_query (char *name)
 Queues a name so that a question for the name will be sent out.
u16_t * resolv_lookup (char *name)
 Look up a hostname in the array of known hostnames.
u16_t * resolv_getserver (void)
 Obtain the currently configured DNS server.
void resolv_conf (u16_t *dnsserver)
 Configure which DNS server to use for queries.
+void resolv_init (void)
 Initalize the resolver.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00103.html b/components/net/uip/doc/html/a00103.html new file mode 100644 index 0000000000..cf6a03ad9c --- /dev/null +++ b/components/net/uip/doc/html/a00103.html @@ -0,0 +1,84 @@ + + +uIP 1.0: apps/resolv/resolv.h File Reference + + + + + + +

apps/resolv/resolv.h File Reference


Detailed Description

+DNS resolver code header file. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file resolv.h. +

+#include "uipopt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Appication specific configurations

An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.

+uIP applications can store the application state within the uip_conn structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.

+The file containing the definitions must be included in the uipopt.h file.

+The following example illustrates how this can look.

void httpd_appcall(void);
+#define UIP_APPCALL     httpd_appcall
+
+struct httpd_state {
+  u8_t state;
+  u16_t count;
+  char *dataptr;
+  char *script;
+};
+typedef struct httpd_state uip_tcp_appstate_t
+


typedef int uip_udp_appstate_t
 The type of the application state that is to be stored in the uip_conn structure.

Defines

+#define UIP_UDP_APPCALL   resolv_appcall

Functions

+void resolv_appcall (void)
void resolv_found (char *name, u16_t *ipaddr)
 Callback function which is called when a hostname is found.
void resolv_conf (u16_t *dnsserver)
 Configure which DNS server to use for queries.
u16_t * resolv_getserver (void)
 Obtain the currently configured DNS server.
+void resolv_init (void)
 Initalize the resolver.
u16_t * resolv_lookup (char *name)
 Look up a hostname in the array of known hostnames.
void resolv_query (char *name)
 Queues a name so that a question for the name will be sent out.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00104.html b/components/net/uip/doc/html/a00104.html new file mode 100644 index 0000000000..b769a45c73 --- /dev/null +++ b/components/net/uip/doc/html/a00104.html @@ -0,0 +1,78 @@ + + +uIP 1.0: apps/smtp/smtp.c File Reference + + + + + + +

apps/smtp/smtp.c File Reference


Detailed Description

+SMTP example implementation. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file smtp.c. +

+#include "smtp.h"
+#include "smtp-strings.h"
+#include "psock.h"
+#include "uip.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define ISO_nl   0x0a
+#define ISO_cr   0x0d
+#define ISO_period   0x2e
+#define ISO_2   0x32
+#define ISO_3   0x33
+#define ISO_4   0x34
+#define ISO_5   0x35

Functions

+void smtp_appcall (void)
void smtp_configure (char *lhostname, void *server)
 Specificy an SMTP server and hostname.
unsigned char smtp_send (char *to, char *cc, char *from, char *subject, char *msg, u16_t msglen)
 Send an e-mail.
+void smtp_init (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00105.html b/components/net/uip/doc/html/a00105.html new file mode 100644 index 0000000000..4a8d15b8dc --- /dev/null +++ b/components/net/uip/doc/html/a00105.html @@ -0,0 +1,82 @@ + + +uIP 1.0: apps/smtp/smtp.h File Reference + + + + + + +

apps/smtp/smtp.h File Reference


Detailed Description

+SMTP header file. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file smtp.h. +

+#include "uipopt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  smtp_state

Appication specific configurations

An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.

+uIP applications can store the application state within the uip_conn structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.

+The file containing the definitions must be included in the uipopt.h file.

+The following example illustrates how this can look.

void httpd_appcall(void);
+#define UIP_APPCALL     httpd_appcall
+
+struct httpd_state {
+  u8_t state;
+  u16_t count;
+  char *dataptr;
+  char *script;
+};
+typedef struct httpd_state uip_tcp_appstate_t
+


+#define UIP_APPCALL   smtp_appcall
 The name of the application function that uIP should call in response to TCP/IP events.
typedef smtp_state uip_tcp_appstate_t
 The type of the application state that is to be stored in the uip_conn structure.

Defines

+#define SMTP_ERR_OK   0
 Error number that signifies a non-error condition.
+#define SMTP_SEND(to, cc, from, subject, msg)   smtp_send(to, cc, from, subject, msg, strlen(msg))

Functions

void smtp_done (unsigned char error)
 Callback function that is called when an e-mail transmission is done.
+void smtp_init (void)
+void smtp_appcall (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00107.html b/components/net/uip/doc/html/a00107.html new file mode 100644 index 0000000000..74d281601e --- /dev/null +++ b/components/net/uip/doc/html/a00107.html @@ -0,0 +1,268 @@ + + +uIP 1.0: apps/telnetd/shell.h File Reference + + + + + + +

apps/telnetd/shell.h File Reference


Detailed Description

+Interface for the Contiki shell. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+Some of the functions declared in this file must be implemented as a shell back-end in the architecture specific files of a Contiki port. +

+Definition in file shell.h. +

+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + +

Functions

void shell_init (void)
 Initialize the shell.
void shell_start (void)
 Start the shell back-end.
void shell_input (char *command)
 Process a shell command.
+void shell_quit (char *)
 Quit the shell.
void shell_output (char *str1, char *str2)
 Print a string to the shell window.
void shell_prompt (char *prompt)
 Print a prompt to the shell window.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void shell_init ( void   ) 
+
+ + + + + +
+   + + +

+Initialize the shell. +

+Called when the shell front-end process starts. This function may be used to start listening for signals.

Examples:
+telnetd.c.
+

+Definition at line 105 of file shell.c. +

+References shell_init(). +

+Referenced by shell_init().

+

+ + + + +
+ + + + + + + + + +
void shell_input ( char *  command  ) 
+
+ + + + + +
+   + + +

+Process a shell command. +

+This function will be called by the shell GUI / telnet server whan a command has been entered that should be processed by the shell back-end.

+

Parameters:
+ + +
command The command to be processed.
+
+
Examples:
+telnetd.c.
+

+Definition at line 118 of file shell.c. +

+References shell_input(). +

+Referenced by shell_input().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void shell_output ( char *  str1,
char *  str2
) 
+
+ + + + + +
+   + + +

+Print a string to the shell window. +

+This function is implemented by the shell GUI / telnet server and can be called by the shell back-end to output a string in the shell window. The string is automatically appended with a linebreak.

+

Parameters:
+ + + +
str1 The first half of the string to be output.
str2 The second half of the string to be output.
+
+
Examples:
+telnetd.c.
+

+Definition at line 113 of file telnetd.c. +

+References ISO_cr, ISO_nl, and NULL.

+

+ + + + +
+ + + + + + + + + +
void shell_prompt ( char *  prompt  ) 
+
+ + + + + +
+   + + +

+Print a prompt to the shell window. +

+This function can be used by the shell back-end to print out a prompt to the shell window.

+

Parameters:
+ + +
prompt The prompt to be printed.
+
+
Examples:
+telnetd.c.
+

+Definition at line 101 of file telnetd.c. +

+References NULL.

+

+ + + + +
+ + + + + + + + + +
void shell_start ( void   ) 
+
+ + + + + +
+   + + +

+Start the shell back-end. +

+Called by the front-end when a new shell is started.

Examples:
+telnetd.c.
+

+Definition at line 110 of file shell.c. +

+References shell_start(). +

+Referenced by shell_start().

+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00110.html b/components/net/uip/doc/html/a00110.html new file mode 100644 index 0000000000..509e8130f2 --- /dev/null +++ b/components/net/uip/doc/html/a00110.html @@ -0,0 +1,107 @@ + + +uIP 1.0: apps/webclient/webclient.c File Reference + + + + + + +

apps/webclient/webclient.c File Reference


Detailed Description

+Implementation of the HTTP client. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file webclient.c. +

+#include "uip.h"
+#include "uiplib.h"
+#include "webclient.h"
+#include "resolv.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define WEBCLIENT_TIMEOUT   100
+#define WEBCLIENT_STATE_STATUSLINE   0
+#define WEBCLIENT_STATE_HEADERS   1
+#define WEBCLIENT_STATE_DATA   2
+#define WEBCLIENT_STATE_CLOSE   3
+#define HTTPFLAG_NONE   0
+#define HTTPFLAG_OK   1
+#define HTTPFLAG_MOVED   2
+#define HTTPFLAG_ERROR   3
+#define ISO_nl   0x0a
+#define ISO_cr   0x0d
+#define ISO_space   0x20

Functions

char * webclient_mimetype (void)
 Obtain the MIME type of the current HTTP data stream.
char * webclient_filename (void)
 Obtain the filename of the current HTTP data stream.
char * webclient_hostname (void)
 Obtain the hostname of the current HTTP data stream.
unsigned short webclient_port (void)
 Obtain the port number of the current HTTP data stream.
+void webclient_init (void)
 Initialize the webclient module.
+void webclient_close (void)
 Close the currently open HTTP connection.
unsigned char webclient_get (char *host, u16_t port, char *file)
 Open an HTTP connection to a web server and ask for a file using the GET method.
+void webclient_appcall (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00111.html b/components/net/uip/doc/html/a00111.html new file mode 100644 index 0000000000..454dbfab0d --- /dev/null +++ b/components/net/uip/doc/html/a00111.html @@ -0,0 +1,96 @@ + + +uIP 1.0: apps/webclient/webclient.h File Reference + + + + + + +

apps/webclient/webclient.h File Reference


Detailed Description

+Header file for the HTTP client. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file webclient.h. +

+#include "webclient-strings.h"
+#include "uipopt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  webclient_state

Defines

+#define WEBCLIENT_CONF_MAX_URLLEN   100
+#define UIP_APPCALL   webclient_appcall

Typedefs

+typedef webclient_state uip_tcp_appstate_t

Functions

void webclient_datahandler (char *data, u16_t len)
 Callback function that is called from the webclient code when HTTP data has been received.
void webclient_connected (void)
 Callback function that is called from the webclient code when the HTTP connection has been connected to the web server.
void webclient_timedout (void)
 Callback function that is called from the webclient code if the HTTP connection to the web server has timed out.
void webclient_aborted (void)
 Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server.
void webclient_closed (void)
 Callback function that is called from the webclient code when the HTTP connection to the web server has been closed.
+void webclient_init (void)
 Initialize the webclient module.
unsigned char webclient_get (char *host, u16_t port, char *file)
 Open an HTTP connection to a web server and ask for a file using the GET method.
+void webclient_close (void)
 Close the currently open HTTP connection.
+void webclient_appcall (void)
char * webclient_mimetype (void)
 Obtain the MIME type of the current HTTP data stream.
char * webclient_filename (void)
 Obtain the filename of the current HTTP data stream.
char * webclient_hostname (void)
 Obtain the hostname of the current HTTP data stream.
unsigned short webclient_port (void)
 Obtain the port number of the current HTTP data stream.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00112.html b/components/net/uip/doc/html/a00112.html new file mode 100644 index 0000000000..213268557c --- /dev/null +++ b/components/net/uip/doc/html/a00112.html @@ -0,0 +1,49 @@ + + +uIP 1.0: apps/webserver/httpd-cgi.c File Reference + + + + + + +

apps/webserver/httpd-cgi.c File Reference


Detailed Description

+Web server script interface. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file httpd-cgi.c. +

+#include "uip.h"
+#include "psock.h"
+#include "httpd.h"
+#include "httpd-cgi.h"
+#include "httpd-fs.h"
+#include <stdio.h>
+#include <string.h>
+ +

+Go to the source code of this file. + + + + +

Functions

+httpd_cgifunction httpd_cgi (char *name)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00113.html b/components/net/uip/doc/html/a00113.html new file mode 100644 index 0000000000..62dbfa62fa --- /dev/null +++ b/components/net/uip/doc/html/a00113.html @@ -0,0 +1,51 @@ + + +uIP 1.0: apps/webserver/httpd-cgi.h File Reference + + + + + + +

apps/webserver/httpd-cgi.h File Reference


Detailed Description

+Web server script interface header file. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file httpd-cgi.h. +

+#include "psock.h"
+#include "httpd.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + +

Data Structures

struct  httpd_cgi_call

Defines

#define HTTPD_CGI_CALL(name, str, function)
 HTTPD CGI function declaration.

Functions

+httpd_cgifunction httpd_cgi (char *name)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00114.html b/components/net/uip/doc/html/a00114.html new file mode 100644 index 0000000000..62d611fec1 --- /dev/null +++ b/components/net/uip/doc/html/a00114.html @@ -0,0 +1,79 @@ + + +uIP 1.0: apps/webserver/httpd.c File Reference + + + + + + +

apps/webserver/httpd.c File Reference


Detailed Description

+Web server. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file httpd.c. +

+#include "uip.h"
+#include "httpd.h"
+#include "httpd-fs.h"
+#include "httpd-cgi.h"
+#include "http-strings.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define STATE_WAITING   0
+#define STATE_OUTPUT   1
+#define ISO_nl   0x0a
+#define ISO_space   0x20
+#define ISO_bang   0x21
+#define ISO_percent   0x25
+#define ISO_period   0x2e
+#define ISO_slash   0x2f
+#define ISO_colon   0x3a

Functions

+void httpd_appcall (void)
void httpd_init (void)
 Initialize the web server.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00120.html b/components/net/uip/doc/html/a00120.html new file mode 100644 index 0000000000..3043a5d44c --- /dev/null +++ b/components/net/uip/doc/html/a00120.html @@ -0,0 +1,50 @@ + + +uIP 1.0: lib/memb.c File Reference + + + + + + +

lib/memb.c File Reference


Detailed Description

+Memory block allocation routines. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file memb.c. +

+#include <string.h>
+#include "memb.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + +

Functions

void memb_init (struct memb_blocks *m)
 Initialize a memory block that was declared with MEMB().
void * memb_alloc (struct memb_blocks *m)
 Allocate a memory block from a block of memory declared with MEMB().
char memb_free (struct memb_blocks *m, void *ptr)
 Deallocate a memory block from a memory block previously declared with MEMB().
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00121.html b/components/net/uip/doc/html/a00121.html new file mode 100644 index 0000000000..fd04d55929 --- /dev/null +++ b/components/net/uip/doc/html/a00121.html @@ -0,0 +1,61 @@ + + +uIP 1.0: lib/memb.h File Reference + + + + + + +

lib/memb.h File Reference


Detailed Description

+Memory block allocation routines. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file memb.h. +

+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  memb_blocks

Defines

+#define MEMB_CONCAT2(s1, s2)   s1##s2
+#define MEMB_CONCAT(s1, s2)   MEMB_CONCAT2(s1, s2)
#define MEMB(name, structure, num)
 Declare a memory block.

Functions

void memb_init (struct memb_blocks *m)
 Initialize a memory block that was declared with MEMB().
void * memb_alloc (struct memb_blocks *m)
 Allocate a memory block from a block of memory declared with MEMB().
char memb_free (struct memb_blocks *m, void *ptr)
 Deallocate a memory block from a memory block previously declared with MEMB().
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00123.html b/components/net/uip/doc/html/a00123.html new file mode 100644 index 0000000000..6cbb1a8baa --- /dev/null +++ b/components/net/uip/doc/html/a00123.html @@ -0,0 +1,57 @@ + + +uIP 1.0: uip/lc-addrlabels.h File Reference + + + + + + +

uip/lc-addrlabels.h File Reference


Detailed Description

+Implementation of local continuations based on the "Labels as values" feature of gcc. +

+

Author:
Adam Dunkels <adam@sics.se>
+This implementation of local continuations is based on a special feature of the GCC C compiler called "labels as values". This feature allows assigning pointers with the address of the code corresponding to a particular C label.

+For more information, see the GCC documentation: http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html

+Thanks to dividuum for finding the nice local scope label implementation. +

+Definition in file lc-addrlabels.h. +

+ +

+Go to the source code of this file. + + + + + + + + + + + + + +

Defines

+#define LC_INIT(s)   s = NULL
+#define LC_RESUME(s)
+#define LC_SET(s)   do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)
+#define LC_END(s)

Typedefs

+typedef void * lc_t
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00124.html b/components/net/uip/doc/html/a00124.html new file mode 100644 index 0000000000..a338d450bd --- /dev/null +++ b/components/net/uip/doc/html/a00124.html @@ -0,0 +1,59 @@ + + +uIP 1.0: uip/lc-switch.h File Reference + + + + + + +

uip/lc-switch.h File Reference


Detailed Description

+Implementation of local continuations based on switch() statment. +

+

Author:
Adam Dunkels <adam@sics.se>
+This implementation of local continuations uses the C switch() statement to resume execution of a function somewhere inside the function's body. The implementation is based on the fact that switch() statements are able to jump directly into the bodies of control structures such as if() or while() statmenets.

+This implementation borrows heavily from Simon Tatham's coroutines implementation in C: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html +

+Definition in file lc-switch.h. +

+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + +

Defines

+#define __LC_SWTICH_H__
+#define LC_INIT(s)   s = 0;
+#define LC_RESUME(s)   switch(s) { case 0:
+#define LC_SET(s)   s = __LINE__; case __LINE__:
+#define LC_END(s)   }

Typedefs

+typedef unsigned short lc_t
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00125.html b/components/net/uip/doc/html/a00125.html new file mode 100644 index 0000000000..ddcb20b9b0 --- /dev/null +++ b/components/net/uip/doc/html/a00125.html @@ -0,0 +1,39 @@ + + +uIP 1.0: uip/lc.h File Reference + + + + + + +

uip/lc.h File Reference


Detailed Description

+Local continuations. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file lc.h. +

+#include "lc-switch.h"
+ +

+Go to the source code of this file. + +
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00127.html b/components/net/uip/doc/html/a00127.html new file mode 100644 index 0000000000..c4cf552797 --- /dev/null +++ b/components/net/uip/doc/html/a00127.html @@ -0,0 +1,99 @@ + + +uIP 1.0: uip/psock.h File Reference + + + + + + +

uip/psock.h File Reference


Detailed Description

+Protosocket library header file. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file psock.h. +

+#include "uipopt.h"
+#include "pt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  psock_buf
struct  psock
 The representation of a protosocket. More...

Defines

#define PSOCK_INIT(psock, buffer, buffersize)
 Initialize a protosocket.
#define PSOCK_BEGIN(psock)
 Start the protosocket protothread in a function.
#define PSOCK_SEND(psock, data, datalen)
 Send data.
#define PSOCK_SEND_STR(psock, str)
 Send a null-terminated string.
#define PSOCK_GENERATOR_SEND(psock, generator, arg)
 Generate data with a function and send it.
#define PSOCK_CLOSE(psock)
 Close a protosocket.
#define PSOCK_READBUF(psock)
 Read data until the buffer is full.
#define PSOCK_READTO(psock, c)
 Read data up to a specified character.
#define PSOCK_DATALEN(psock)
 The length of the data that was previously read.
#define PSOCK_EXIT(psock)
 Exit the protosocket's protothread.
#define PSOCK_CLOSE_EXIT(psock)
 Close a protosocket and exit the protosocket's protothread.
#define PSOCK_END(psock)
 Declare the end of a protosocket's protothread.
#define PSOCK_NEWDATA(psock)
 Check if new data has arrived on a protosocket.
#define PSOCK_WAIT_UNTIL(psock, condition)
 Wait until a condition is true.
+#define PSOCK_WAIT_THREAD(psock, condition)   PT_WAIT_THREAD(&((psock)->pt), (condition))

Functions

+u16_t psock_datalen (struct psock *psock)
+char psock_newdata (struct psock *s)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00128.html b/components/net/uip/doc/html/a00128.html new file mode 100644 index 0000000000..087b668489 --- /dev/null +++ b/components/net/uip/doc/html/a00128.html @@ -0,0 +1,101 @@ + + +uIP 1.0: uip/pt.h File Reference + + + + + + +

uip/pt.h File Reference


Detailed Description

+Protothreads implementation. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file pt.h. +

+#include "lc.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  pt

Initialization

#define PT_INIT(pt)
 Initialize a protothread.

Declaration and definition

#define PT_THREAD(name_args)
 Declaration of a protothread.
#define PT_BEGIN(pt)
 Declare the start of a protothread inside the C function implementing the protothread.
#define PT_END(pt)
 Declare the end of a protothread.

Blocked wait

#define PT_WAIT_UNTIL(pt, condition)
 Block and wait until condition is true.
#define PT_WAIT_WHILE(pt, cond)
 Block and wait while condition is true.

Hierarchical protothreads

#define PT_WAIT_THREAD(pt, thread)
 Block and wait until a child protothread completes.
#define PT_SPAWN(pt, child, thread)
 Spawn a child protothread and wait until it exits.

Exiting and restarting

#define PT_RESTART(pt)
 Restart the protothread.
#define PT_EXIT(pt)
 Exit the protothread.

Calling a protothread

#define PT_SCHEDULE(f)
 Schedule a protothread.

Yielding from a protothread

#define PT_YIELD(pt)
 Yield from the current protothread.
#define PT_YIELD_UNTIL(pt, cond)
 Yield from the protothread until a condition occurs.

Defines

+#define PT_WAITING   0
+#define PT_EXITED   1
+#define PT_ENDED   2
+#define PT_YIELDED   3
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00129.html b/components/net/uip/doc/html/a00129.html new file mode 100644 index 0000000000..2d89eba3bd --- /dev/null +++ b/components/net/uip/doc/html/a00129.html @@ -0,0 +1,53 @@ + + +uIP 1.0: uip/timer.c File Reference + + + + + + +

uip/timer.c File Reference


Detailed Description

+Timer library implementation. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file timer.c. +

+#include "clock.h"
+#include "timer.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + +

Functions

void timer_set (struct timer *t, clock_time_t interval)
 Set a timer.
void timer_reset (struct timer *t)
 Reset the timer with the same interval.
void timer_restart (struct timer *t)
 Restart the timer from the current point in time.
int timer_expired (struct timer *t)
 Check if a timer has expired.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00130.html b/components/net/uip/doc/html/a00130.html new file mode 100644 index 0000000000..95da033871 --- /dev/null +++ b/components/net/uip/doc/html/a00130.html @@ -0,0 +1,56 @@ + + +uIP 1.0: uip/timer.h File Reference + + + + + + +

uip/timer.h File Reference


Detailed Description

+Timer library header file. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file timer.h. +

+#include "clock.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + +

Data Structures

struct  timer
 A timer. More...

Functions

void timer_set (struct timer *t, clock_time_t interval)
 Set a timer.
void timer_reset (struct timer *t)
 Reset the timer with the same interval.
void timer_restart (struct timer *t)
 Restart the timer from the current point in time.
int timer_expired (struct timer *t)
 Check if a timer has expired.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00131.html b/components/net/uip/doc/html/a00131.html new file mode 100644 index 0000000000..8370948415 --- /dev/null +++ b/components/net/uip/doc/html/a00131.html @@ -0,0 +1,63 @@ + + +uIP 1.0: uip/uip-neighbor.c File Reference + + + + + + +

uip/uip-neighbor.c File Reference


Detailed Description

+Database of link-local neighbors, used by IPv6 code and to be used by a future ARP code rewrite. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file uip-neighbor.c. +

+#include "uip-neighbor.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + +

Defines

+#define MAX_TIME   128
+#define ENTRIES   8

Functions

+void uip_neighbor_init (void)
+void uip_neighbor_periodic (void)
+void uip_neighbor_add (uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
+void uip_neighbor_update (uip_ipaddr_t ipaddr)
+uip_neighbor_addr * uip_neighbor_lookup (uip_ipaddr_t ipaddr)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00132.html b/components/net/uip/doc/html/a00132.html new file mode 100644 index 0000000000..dc5b6496f9 --- /dev/null +++ b/components/net/uip/doc/html/a00132.html @@ -0,0 +1,58 @@ + + +uIP 1.0: uip/uip-neighbor.h File Reference + + + + + + +

uip/uip-neighbor.h File Reference


Detailed Description

+Header file for database of link-local neighbors, used by IPv6 code and to be used by future ARP code. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file uip-neighbor.h. +

+#include "uip.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + +

Data Structures

struct  uip_neighbor_addr

Functions

+void uip_neighbor_init (void)
+void uip_neighbor_add (uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
+void uip_neighbor_update (uip_ipaddr_t ipaddr)
+uip_neighbor_addr * uip_neighbor_lookup (uip_ipaddr_t ipaddr)
+void uip_neighbor_periodic (void)
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00134.html b/components/net/uip/doc/html/a00134.html new file mode 100644 index 0000000000..179ad8ff99 --- /dev/null +++ b/components/net/uip/doc/html/a00134.html @@ -0,0 +1,42 @@ + + +uIP 1.0: uip/uip-split.h File Reference + + + + + + +

uip/uip-split.h File Reference


Detailed Description

+Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file uip-split.h. +

+ +

+Go to the source code of this file. + + + + + +

Functions

void uip_split_output (void)
 Handle outgoing packets.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00135.html b/components/net/uip/doc/html/a00135.html new file mode 100644 index 0000000000..8cbccdcc94 --- /dev/null +++ b/components/net/uip/doc/html/a00135.html @@ -0,0 +1,215 @@ + + +uIP 1.0: uip/uip.c File Reference + + + + + + +

uip/uip.c File Reference


Detailed Description

+The uIP TCP/IP stack code. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file uip.c. +

+#include "uip.h"
+#include "uipopt.h"
+#include "uip_arch.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define DEBUG_PRINTF()
+#define TCP_FIN   0x01
+#define TCP_SYN   0x02
+#define TCP_RST   0x04
+#define TCP_PSH   0x08
+#define TCP_ACK   0x10
+#define TCP_URG   0x20
+#define TCP_CTL   0x3f
+#define TCP_OPT_END   0
+#define TCP_OPT_NOOP   1
+#define TCP_OPT_MSS   2
+#define TCP_OPT_MSS_LEN   4
+#define ICMP_ECHO_REPLY   0
+#define ICMP_ECHO   8
+#define ICMP6_ECHO_REPLY   129
+#define ICMP6_ECHO   128
+#define ICMP6_NEIGHBOR_SOLICITATION   135
+#define ICMP6_NEIGHBOR_ADVERTISEMENT   136
+#define ICMP6_FLAG_S   (1 << 6)
+#define ICMP6_OPTION_SOURCE_LINK_ADDRESS   1
+#define ICMP6_OPTION_TARGET_LINK_ADDRESS   2
+#define BUF   ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define FBUF   ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
+#define ICMPBUF   ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define UDPBUF   ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define UIP_STAT(s)
+#define UIP_LOG(m)

Functions

void uip_setipid (u16_t id)
 uIP initialization function.
void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition.
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
void uip_init (void)
 uIP initialization function.
uip_conn * uip_connect (uip_ipaddr_t *ripaddr, u16_t rport)
 Connect to a remote host using TCP.
uip_udp_conn * uip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport)
 Set up a new UDP connection.
void uip_unlisten (u16_t port)
 Stop listening to the specified port.
void uip_listen (u16_t port)
 Start listening to the specified port.
+void uip_process (u8_t flag)
u16_t htons (u16_t val)
 Convert 16-bit quantity from host byte order to network byte order.
void uip_send (const void *data, int len)
 Send data on the current connection.

Variables

+uip_ipaddr_t uip_hostaddr
+uip_ipaddr_t uip_draddr
+uip_ipaddr_t uip_netmask
+uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}}
u8_t uip_buf [UIP_BUFSIZE+2]
 The uIP packet buffer.
void * uip_appdata
 Pointer to the application data in the packet buffer.
+void * uip_sappdata
u16_t uip_len
 The length of the packet in the uip_buf buffer.
+u16_t uip_slen
+u8_t uip_flags
uip_conn * uip_conn
 Pointer to the current TCP connection.
+uip_conn uip_conns [UIP_CONNS]
+u16_t uip_listenports [UIP_LISTENPORTS]
+uip_udp_conn * uip_udp_conn
 The current UDP connection.
+uip_udp_conn uip_udp_conns [UIP_UDP_CONNS]
+u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00136.html b/components/net/uip/doc/html/a00136.html new file mode 100644 index 0000000000..341701bce6 --- /dev/null +++ b/components/net/uip/doc/html/a00136.html @@ -0,0 +1,400 @@ + + +uIP 1.0: uip/uip.h File Reference + + + + + + +

uip/uip.h File Reference


Detailed Description

+Header file for the uIP TCP/IP stack. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+The uIP TCP/IP stack header file contains definitions for a number of C macros that are used by uIP programs as well as internal uIP structures, TCP/IP header structures and function declarations. +

+Definition in file uip.h. +

+#include "uipopt.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  uip_conn
 Representation of a uIP TCP connection. More...
struct  uip_udp_conn
 Representation of a uIP UDP connection. More...
struct  uip_stats
 The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. More...
struct  uip_tcpip_hdr
struct  uip_icmpip_hdr
struct  uip_udpip_hdr
struct  uip_eth_addr
 Representation of a 48-bit Ethernet address. More...

Defines

#define uip_sethostaddr(addr)
 Set the IP address of this host.
#define uip_gethostaddr(addr)
 Get the IP address of this host.
#define uip_setdraddr(addr)
 Set the default router's IP address.
#define uip_setnetmask(addr)
 Set the netmask.
#define uip_getdraddr(addr)
 Get the default router's IP address.
#define uip_getnetmask(addr)
 Get the netmask.
#define uip_input()
 Process an incoming packet.
#define uip_periodic(conn)
 Periodic processing for a connection identified by its number.
+#define uip_conn_active(conn)   (uip_conns[conn].tcpstateflags != UIP_CLOSED)
#define uip_periodic_conn(conn)
 Perform periodic processing for a connection identified by a pointer to its structure.
#define uip_poll_conn(conn)
 Reuqest that a particular connection should be polled.
#define uip_udp_periodic(conn)
 Periodic processing for a UDP connection identified by its number.
#define uip_udp_periodic_conn(conn)
 Periodic processing for a UDP connection identified by a pointer to its structure.
+#define uip_outstanding(conn)   ((conn)->len)
#define uip_datalen()
 The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer.
#define uip_urgdatalen()
 The length of any out-of-band data (urgent data) that has arrived on the connection.
#define uip_close()
 Close the current connection.
#define uip_abort()
 Abort the current connection.
#define uip_stop()
 Tell the sending host to stop sending data.
+#define uip_stopped(conn)
 Find out if the current connection has been previously stopped with uip_stop().
#define uip_restart()
 Restart the current connection, if is has previously been stopped with uip_stop().
#define uip_udpconnection()
 Is the current connection a UDP connection?
#define uip_newdata()
 Is new incoming data available?
#define uip_acked()
 Has previously sent data been acknowledged?
#define uip_connected()
 Has the connection just been connected?
#define uip_closed()
 Has the connection been closed by the other end?
#define uip_aborted()
 Has the connection been aborted by the other end?
#define uip_timedout()
 Has the connection timed out?
#define uip_rexmit()
 Do we need to retransmit previously data?
#define uip_poll()
 Is the connection being polled by uIP?
+#define uip_initialmss()
 Get the initial maxium segment size (MSS) of the current connection.
#define uip_mss()
 Get the current maxium segment size that can be sent on the current connection.
#define uip_udp_remove(conn)
 Removed a UDP connection.
#define uip_udp_bind(conn, port)
 Bind a UDP connection to a local port.
#define uip_udp_send(len)
 Send a UDP datagram of length len on the current connection.
#define uip_ipaddr(addr, addr0, addr1, addr2, addr3)
 Construct an IP address from four bytes.
#define uip_ip6addr(addr, addr0, addr1, addr2, addr3, addr4, addr5, addr6, addr7)
 Construct an IPv6 address from eight 16-bit words.
#define uip_ipaddr_copy(dest, src)
 Copy an IP address to another IP address.
#define uip_ipaddr_cmp(addr1, addr2)
 Compare two IP addresses.
#define uip_ipaddr_maskcmp(addr1, addr2, mask)
 Compare two IP addresses with netmasks.
#define uip_ipaddr_mask(dest, src, mask)
 Mask out the network part of an IP address.
#define uip_ipaddr1(addr)
 Pick the first octet of an IP address.
#define uip_ipaddr2(addr)
 Pick the second octet of an IP address.
#define uip_ipaddr3(addr)
 Pick the third octet of an IP address.
#define uip_ipaddr4(addr)
 Pick the fourth octet of an IP address.
#define HTONS(n)
 Convert 16-bit quantity from host byte order to network byte order.
+#define ntohs   htons
+#define UIP_ACKDATA   1
+#define UIP_NEWDATA   2
+#define UIP_REXMIT   4
+#define UIP_POLL   8
+#define UIP_CLOSE   16
+#define UIP_ABORT   32
+#define UIP_CONNECTED   64
+#define UIP_TIMEDOUT   128
+#define UIP_DATA   1
+#define UIP_TIMER   2
+#define UIP_POLL_REQUEST   3
+#define UIP_UDP_SEND_CONN   4
+#define UIP_UDP_TIMER   5
+#define UIP_CLOSED   0
+#define UIP_SYN_RCVD   1
+#define UIP_SYN_SENT   2
+#define UIP_ESTABLISHED   3
+#define UIP_FIN_WAIT_1   4
+#define UIP_FIN_WAIT_2   5
+#define UIP_CLOSING   6
+#define UIP_TIME_WAIT   7
+#define UIP_LAST_ACK   8
+#define UIP_TS_MASK   15
+#define UIP_STOPPED   16
#define UIP_APPDATA_SIZE
 The buffer size available for user data in the uip_buf buffer.
+#define UIP_PROTO_ICMP   1
+#define UIP_PROTO_TCP   6
+#define UIP_PROTO_UDP   17
+#define UIP_PROTO_ICMP6   58
+#define UIP_IPH_LEN   20
+#define UIP_UDPH_LEN   8
+#define UIP_TCPH_LEN   20
+#define UIP_IPUDPH_LEN   (UIP_UDPH_LEN + UIP_IPH_LEN)
+#define UIP_IPTCPH_LEN   (UIP_TCPH_LEN + UIP_IPH_LEN)
+#define UIP_TCPIP_HLEN   UIP_IPTCPH_LEN

Typedefs

+typedef u16_t uip_ip4addr_t [2]
 Repressentation of an IP address.
+typedef u16_t uip_ip6addr_t [8]
+typedef uip_ip4addr_t uip_ipaddr_t

Functions

void uip_init (void)
 uIP initialization function.
void uip_setipid (u16_t id)
 uIP initialization function.
void uip_listen (u16_t port)
 Start listening to the specified port.
void uip_unlisten (u16_t port)
 Stop listening to the specified port.
uip_conn * uip_connect (uip_ipaddr_t *ripaddr, u16_t port)
 Connect to a remote host using TCP.
void uip_send (const void *data, int len)
 Send data on the current connection.
uip_udp_conn * uip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport)
 Set up a new UDP connection.
u16_t htons (u16_t val)
 Convert 16-bit quantity from host byte order to network byte order.
+void uip_process (u8_t flag)
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
u16_t uip_udpchksum (void)
 Calculate the UDP checksum of the packet in uip_buf and uip_appdata.

Variables

u8_t uip_buf [UIP_BUFSIZE+2]
 The uIP packet buffer.
void * uip_appdata
 Pointer to the application data in the packet buffer.
u16_t uip_len
 The length of the packet in the uip_buf buffer.
uip_conn * uip_conn
 Pointer to the current TCP connection.
+uip_conn uip_conns [UIP_CONNS]
+u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
+uip_udp_conn * uip_udp_conn
 The current UDP connection.
+uip_udp_conn uip_udp_conns [UIP_UDP_CONNS]
uip_stats uip_stat
 The uIP TCP/IP statistics.
+u8_t uip_flags
+uip_ipaddr_t uip_hostaddr
+uip_ipaddr_t uip_netmask
+uip_ipaddr_t uip_draddr
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00137.html b/components/net/uip/doc/html/a00137.html new file mode 100644 index 0000000000..1293889369 --- /dev/null +++ b/components/net/uip/doc/html/a00137.html @@ -0,0 +1,52 @@ + + +uIP 1.0: uip/uip_arch.h File Reference + + + + + + +

uip/uip_arch.h File Reference


Detailed Description

+Declarations of architecture specific functions. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file uip_arch.h. +

+#include "uip.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + +

Functions

void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition.
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00138.html b/components/net/uip/doc/html/a00138.html new file mode 100644 index 0000000000..b7845d551f --- /dev/null +++ b/components/net/uip/doc/html/a00138.html @@ -0,0 +1,70 @@ + + +uIP 1.0: uip/uip_arp.c File Reference + + + + + + +

uip/uip_arp.c File Reference


Detailed Description

+Implementation of the ARP Address Resolution Protocol. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file uip_arp.c. +

+#include "uip_arp.h"
+#include <string.h>
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define ARP_REQUEST   1
+#define ARP_REPLY   2
+#define ARP_HWTYPE_ETH   1
+#define BUF   ((struct arp_hdr *)&uip_buf[0])
+#define IPBUF   ((struct ethip_hdr *)&uip_buf[0])

Functions

+void uip_arp_init (void)
 Initialize the ARP module.
void uip_arp_timer (void)
 Periodic ARP processing function.
void uip_arp_arpin (void)
 ARP processing for incoming ARP packets.
void uip_arp_out (void)
 Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00139.html b/components/net/uip/doc/html/a00139.html new file mode 100644 index 0000000000..00cb3b75c0 --- /dev/null +++ b/components/net/uip/doc/html/a00139.html @@ -0,0 +1,77 @@ + + +uIP 1.0: uip/uip_arp.h File Reference + + + + + + +

uip/uip_arp.h File Reference


Detailed Description

+Macros and definitions for the ARP module. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+ +

+Definition in file uip_arp.h. +

+#include "uip.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  uip_eth_hdr
 The Ethernet header. More...

Defines

+#define UIP_ETHTYPE_ARP   0x0806
+#define UIP_ETHTYPE_IP   0x0800
+#define UIP_ETHTYPE_IP6   0x86dd
+#define uip_arp_ipin()
#define uip_setethaddr(eaddr)
 Specifiy the Ethernet MAC address.

Functions

+void uip_arp_init (void)
 Initialize the ARP module.
void uip_arp_arpin (void)
 ARP processing for incoming ARP packets.
void uip_arp_out (void)
 Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request.
void uip_arp_timer (void)
 Periodic ARP processing function.

Variables

+uip_eth_addr uip_ethaddr
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00140.html b/components/net/uip/doc/html/a00140.html new file mode 100644 index 0000000000..a413b00447 --- /dev/null +++ b/components/net/uip/doc/html/a00140.html @@ -0,0 +1,143 @@ + + +uIP 1.0: uip/uipopt.h File Reference + + + + + + +

uip/uipopt.h File Reference


Detailed Description

+Configuration options for uIP. +

+

Author:
Adam Dunkels <adam@dunkels.com>
+This file is used for tweaking various configuration options for uIP. You should make a copy of this file into one of your project's directories instead of editing this example "uipopt.h" file that comes with the uIP distribution. +

+Definition in file uipopt.h. +

+#include "uip-conf.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Static configuration options

These configuration options can be used for setting the IP address settings statically, but only if UIP_FIXEDADDR is set to 1. The configuration options for a specific node includes IP address, netmask and default router as well as the Ethernet address. The netmask, default router and Ethernet address are appliciable only if uIP should be run over Ethernet.

+All of these should be changed to suit your project.

#define UIP_FIXEDADDR
 Determines if uIP should use a fixed IP address or not.
#define UIP_PINGADDRCONF
 Ping IP address asignment.
#define UIP_FIXEDETHADDR
 Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not.

IP configuration options

#define UIP_TTL   64
 The IP TTL (time to live) of IP packets sent by uIP.
#define UIP_REASSEMBLY
 Turn on support for IP packet reassembly.
+#define UIP_REASS_MAXAGE   40
 The maximum time an IP fragment should wait in the reassembly buffer before it is dropped.

UDP configuration options

+#define UIP_UDP
 Toggles wether UDP support should be compiled in or not.
#define UIP_UDP_CHECKSUMS
 Toggles if UDP checksums should be used or not.
+#define UIP_UDP_CONNS
 The maximum amount of concurrent UDP connections.

TCP configuration options

#define UIP_ACTIVE_OPEN
 Determines if support for opening connections from uIP should be compiled in.
#define UIP_CONNS
 The maximum number of simultaneously open TCP connections.
#define UIP_LISTENPORTS
 The maximum number of simultaneously listening TCP ports.
#define UIP_URGDATA
 Determines if support for TCP urgent data notification should be compiled in.
#define UIP_RTO   3
 The initial retransmission timeout counted in timer pulses.
#define UIP_MAXRTX   8
 The maximum number of times a segment should be retransmitted before the connection should be aborted.
#define UIP_MAXSYNRTX   5
 The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful.
#define UIP_TCP_MSS   (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
 The TCP maximum segment size.
#define UIP_RECEIVE_WINDOW
 The size of the advertised receiver's window.
#define UIP_TIME_WAIT_TIMEOUT   120
 How long a connection should stay in the TIME_WAIT state.

ARP configuration options

#define UIP_ARPTAB_SIZE
 The size of the ARP table.
#define UIP_ARP_MAXAGE   120
 The maxium age of ARP table entries measured in 10ths of seconds.

General configuration options

#define UIP_BUFSIZE
 The size of the uIP packet buffer.
#define UIP_STATISTICS
 Determines if statistics support should be compiled in.
#define UIP_LOGGING
 Determines if logging of certain events should be compiled in.
#define UIP_BROADCAST
 Broadcast support.
#define UIP_LLH_LEN
 The link level header length.
void uip_log (char *msg)
 Print out a uIP log message.

CPU architecture configuration

The CPU architecture configuration is where the endianess of the CPU on which uIP is to be run is specified. Most CPUs today are little endian, and the most notable exception are the Motorolas which are big endian. The BYTE_ORDER macro should be changed to reflect the CPU architecture on which uIP is to be run.

#define UIP_BYTE_ORDER
 The byte order of the CPU architecture on which uIP is to be run.

Defines

+#define UIP_LITTLE_ENDIAN   3412
+#define UIP_BIG_ENDIAN   1234
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00141.html b/components/net/uip/doc/html/a00141.html new file mode 100644 index 0000000000..4b0e595872 --- /dev/null +++ b/components/net/uip/doc/html/a00141.html @@ -0,0 +1,83 @@ + + +uIP 1.0: unix/uip-conf.h File Reference + + + + + + +

unix/uip-conf.h File Reference


Detailed Description

+An example uIP configuration file. +

+

Author:
Adam Dunkels <adam@sics.se>
+ +

+Definition in file uip-conf.h. +

+#include <inttypes.h>
+#include "webserver.h"
+ +

+Go to the source code of this file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Project-specific configuration options

uIP has a number of configuration options that can be overridden for each project. These are kept in a project-specific uip-conf.h file and all configuration names have the prefix UIP_CONF.

+#define UIP_CONF_MAX_CONNECTIONS
 Maximum number of TCP connections.
+#define UIP_CONF_MAX_LISTENPORTS
 Maximum number of listening TCP ports.
+#define UIP_CONF_BUFFER_SIZE
 uIP buffer size.
+#define UIP_CONF_BYTE_ORDER
 CPU byte order.
+#define UIP_CONF_LOGGING
 Logging on or off.
+#define UIP_CONF_UDP
 UDP support on or off.
+#define UIP_CONF_UDP_CHECKSUMS
 UDP checksums on or off.
+#define UIP_CONF_STATISTICS
 uIP statistics on or off
typedef uint8_t u8_t
 8 bit datatype
typedef uint16_t u16_t
 16 bit datatype
typedef unsigned short uip_stats_t
 Statistics datatype.
+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00142.html b/components/net/uip/doc/html/a00142.html new file mode 100644 index 0000000000..c2db21d3c4 --- /dev/null +++ b/components/net/uip/doc/html/a00142.html @@ -0,0 +1,690 @@ + + +uIP 1.0: Protothreads + + + + + +

Protothreads


Detailed Description

+Protothreads are a type of lightweight stackless threads designed for severly memory constrained systems such as deeply embedded systems or sensor network nodes. +

+Protothreads provides linear code execution for event-driven systems implemented in C. Protothreads can be used with or without an RTOS.

+Protothreads are a extremely lightweight, stackless type of threads that provides a blocking context on top of an event-driven system, without the overhead of per-thread stacks. The purpose of protothreads is to implement sequential flow of control without complex state machines or full multi-threading. Protothreads provides conditional blocking inside C functions.

+The advantage of protothreads over a purely event-driven approach is that protothreads provides a sequential code structure that allows for blocking functions. In purely event-driven systems, blocking must be implemented by manually breaking the function into two pieces - one for the piece of code before the blocking call and one for the code after the blocking call. This makes it hard to use control structures such as if() conditionals and while() loops.

+The advantage of protothreads over ordinary threads is that a protothread do not require a separate stack. In memory constrained systems, the overhead of allocating multiple stacks can consume large amounts of the available memory. In contrast, each protothread only requires between two and twelve bytes of state, depending on the architecture.

+

Note:
Because protothreads do not save the stack context across a blocking call, local variables are not preserved when the protothread blocks. This means that local variables should be used with utmost care - if in doubt, do not use local variables inside a protothread!
+Main features:

+

    +
  • No machine specific code - the protothreads library is pure C
+

+

    +
  • Does not use error-prone functions such as longjmp()
+

+

    +
  • Very small RAM overhead - only two bytes per protothread
+

+

    +
  • Can be used with or without an OS
+

+

    +
  • Provides blocking wait without full multi-threading or stack-switching
+

+Examples applications:

+

    +
  • Memory constrained systems
+

+

    +
  • Event-driven protocol stacks
+

+

    +
  • Deeply embedded systems
+

+

    +
  • Sensor network nodes
+

+The protothreads API consists of four basic operations: initialization: PT_INIT(), execution: PT_BEGIN(), conditional blocking: PT_WAIT_UNTIL() and exit: PT_END(). On top of these, two convenience functions are built: reversed condition blocking: PT_WAIT_WHILE() and protothread blocking: PT_WAIT_THREAD().

+

See also:
Protothreads API documentation
+The protothreads library is released under a BSD-style license that allows for both non-commercial and commercial usage. The only requirement is that credit is given.

+Authors

+The protothreads library was written by Adam Dunkels <adam@sics.se> with support from Oliver Schmidt <ol.sc@web.de>.

+Protothreads

+Protothreads are a extremely lightweight, stackless threads that provides a blocking context on top of an event-driven system, without the overhead of per-thread stacks. The purpose of protothreads is to implement sequential flow of control without using complex state machines or full multi-threading. Protothreads provides conditional blocking inside a C function.

+In memory constrained systems, such as deeply embedded systems, traditional multi-threading may have a too large memory overhead. In traditional multi-threading, each thread requires its own stack, that typically is over-provisioned. The stacks may use large parts of the available memory.

+The main advantage of protothreads over ordinary threads is that protothreads are very lightweight: a protothread does not require its own stack. Rather, all protothreads run on the same stack and context switching is done by stack rewinding. This is advantageous in memory constrained systems, where a stack for a thread might use a large part of the available memory. A protothread only requires only two bytes of memory per protothread. Moreover, protothreads are implemented in pure C and do not require any machine-specific assembler code.

+A protothread runs within a single C function and cannot span over other functions. A protothread may call normal C functions, but cannot block inside a called function. Blocking inside nested function calls is instead made by spawning a separate protothread for each potentially blocking function. The advantage of this approach is that blocking is explicit: the programmer knows exactly which functions that block that which functions the never blocks.

+Protothreads are similar to asymmetric co-routines. The main difference is that co-routines uses a separate stack for each co-routine, whereas protothreads are stackless. The most similar mechanism to protothreads are Python generators. These are also stackless constructs, but have a different purpose. Protothreads provides blocking contexts inside a C function, whereas Python generators provide multiple exit points from a generator function.

+Local variables

+
Note:
Because protothreads do not save the stack context across a blocking call, local variables are not preserved when the protothread blocks. This means that local variables should be used with utmost care - if in doubt, do not use local variables inside a protothread!
+

+Scheduling

+A protothread is driven by repeated calls to the function in which the protothread is running. Each time the function is called, the protothread will run until it blocks or exits. Thus the scheduling of protothreads is done by the application that uses protothreads.

+Implementation

+Protothreads are implemented using local continuations. A local continuation represents the current state of execution at a particular place in the program, but does not provide any call history or local variables. A local continuation can be set in a specific function to capture the state of the function. After a local continuation has been set can be resumed in order to restore the state of the function at the point where the local continuation was set.

+Local continuations can be implemented in a variety of ways:

+

    +
  1. by using machine specific assembler code,
  2. by using standard C constructs, or
  3. by using compiler extensions.
+

+The first way works by saving and restoring the processor state, except for stack pointers, and requires between 16 and 32 bytes of memory per protothread. The exact amount of memory required depends on the architecture.

+The standard C implementation requires only two bytes of state per protothread and utilizes the C switch() statement in a non-obvious way that is similar to Duff's device. This implementation does, however, impose a slight restriction to the code that uses protothreads in that the code cannot use switch() statements itself.

+Certain compilers has C extensions that can be used to implement protothreads. GCC supports label pointers that can be used for this purpose. With this implementation, protothreads require 4 bytes of RAM per protothread. +

+ + + + + + + +

+

+ + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  pt.h
 Protothreads implementation.

Modules

 Local continuations
 Local continuations form the basis for implementing protothreads.

Data Structures

struct  pt

Initialization

#define PT_INIT(pt)
 Initialize a protothread.

Declaration and definition

#define PT_THREAD(name_args)
 Declaration of a protothread.
#define PT_BEGIN(pt)
 Declare the start of a protothread inside the C function implementing the protothread.
#define PT_END(pt)
 Declare the end of a protothread.

Blocked wait

#define PT_WAIT_UNTIL(pt, condition)
 Block and wait until condition is true.
#define PT_WAIT_WHILE(pt, cond)
 Block and wait while condition is true.

Hierarchical protothreads

#define PT_WAIT_THREAD(pt, thread)
 Block and wait until a child protothread completes.
#define PT_SPAWN(pt, child, thread)
 Spawn a child protothread and wait until it exits.

Exiting and restarting

#define PT_RESTART(pt)
 Restart the protothread.
#define PT_EXIT(pt)
 Exit the protothread.

Calling a protothread

#define PT_SCHEDULE(f)
 Schedule a protothread.

Yielding from a protothread

#define PT_YIELD(pt)
 Yield from the current protothread.
#define PT_YIELD_UNTIL(pt, cond)
 Yield from the protothread until a condition occurs.

Defines

+#define PT_WAITING   0
+#define PT_EXITED   1
+#define PT_ENDED   2
+#define PT_YIELDED   3
+


Define Documentation

+

+ + + + +
+ + + + + + + + + +
#define PT_BEGIN ( pt   ) 
+
+ + + + + +
+   + + +

+Declare the start of a protothread inside the C function implementing the protothread. +

+This macro is used to declare the starting point of a protothread. It should be placed at the start of the function in which the protothread runs. All C statements above the PT_BEGIN() invokation will be executed each time the protothread is scheduled.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 115 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_END ( pt   ) 
+
+ + + + + +
+   + + +

+Declare the end of a protothread. +

+This macro is used for declaring that a protothread ends. It must always be used together with a matching PT_BEGIN() macro.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 127 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_EXIT ( pt   ) 
+
+ + + + + +
+   + + +

+Exit the protothread. +

+This macro causes the protothread to exit. If the protothread was spawned by another protothread, the parent protothread will become unblocked and can continue to run.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+ +

+Definition at line 246 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_INIT ( pt   ) 
+
+ + + + + +
+   + + +

+Initialize a protothread. +

+Initializes a protothread. Initialization must be done prior to starting to execute the protothread.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
See also:
PT_SPAWN()
+
Examples:
+dhcpc.c.
+

+Definition at line 80 of file pt.h. +

+Referenced by httpd_appcall().

+

+ + + + +
+ + + + + + + + + +
#define PT_RESTART ( pt   ) 
+
+ + + + + +
+   + + +

+Restart the protothread. +

+This macro will block and cause the running protothread to restart its execution at the place of the PT_BEGIN() call.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 229 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_SCHEDULE ( f   ) 
+
+ + + + + +
+   + + +

+Schedule a protothread. +

+This function shedules a protothread. The return value of the function is non-zero if the protothread is running or zero if the protothread has exited.

+

Parameters:
+ + +
f The call to the C function implementing the protothread to be scheduled
+
+ +

+Definition at line 271 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define PT_SPAWN ( pt,
child,
thread   ) 
+
+ + + + + +
+   + + +

+Spawn a child protothread and wait until it exits. +

+This macro spawns a child protothread and waits until it exits. The macro can only be used within a protothread.

+

Parameters:
+ + + + +
pt A pointer to the protothread control structure.
child A pointer to the child protothread's control structure.
thread The child protothread with arguments
+
+ +

+Definition at line 206 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_THREAD ( name_args   ) 
+
+ + + + + +
+   + + +

+Declaration of a protothread. +

+This macro is used to declare a protothread. All protothreads must be declared with this macro.

+

Parameters:
+ + +
name_args The name and arguments of the C function implementing the protothread.
+
+
Examples:
+dhcpc.c, and smtp.c.
+

+Definition at line 100 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PT_WAIT_THREAD ( pt,
thread   ) 
+
+ + + + + +
+   + + +

+Block and wait until a child protothread completes. +

+This macro schedules a child protothread. The current protothread will block until the child protothread completes.

+

Note:
The child protothread must be manually initialized with the PT_INIT() function before this function is used.
+
Parameters:
+ + + +
pt A pointer to the protothread control structure.
thread The child protothread with arguments
+
+
See also:
PT_SPAWN()
+ +

+Definition at line 192 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PT_WAIT_UNTIL ( pt,
condition   ) 
+
+ + + + + +
+   + + +

+Block and wait until condition is true. +

+This macro blocks the protothread until the specified condition is true.

+

Parameters:
+ + + +
pt A pointer to the protothread control structure.
condition The condition.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 148 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PT_WAIT_WHILE ( pt,
cond   ) 
+
+ + + + + +
+   + + +

+Block and wait while condition is true. +

+This function blocks and waits while condition is true. See PT_WAIT_UNTIL().

+

Parameters:
+ + + +
pt A pointer to the protothread control structure.
cond The condition.
+
+ +

+Definition at line 167 of file pt.h.

+

+ + + + +
+ + + + + + + + + +
#define PT_YIELD ( pt   ) 
+
+ + + + + +
+   + + +

+Yield from the current protothread. +

+This function will yield the protothread, thereby allowing other processing to take place in the system.

+

Parameters:
+ + +
pt A pointer to the protothread control structure.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 290 of file pt.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PT_YIELD_UNTIL ( pt,
cond   ) 
+
+ + + + + +
+   + + +

+Yield from the protothread until a condition occurs. +

+

Parameters:
+ + + +
pt A pointer to the protothread control structure.
cond The condition.
+
+This function will yield the protothread, until the specified condition evaluates to true. +

+Definition at line 310 of file pt.h.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00143.html b/components/net/uip/doc/html/a00143.html new file mode 100644 index 0000000000..28224e0732 --- /dev/null +++ b/components/net/uip/doc/html/a00143.html @@ -0,0 +1,54 @@ + + +uIP 1.0: Applications + + + + + +

Applications


Detailed Description

+The uIP distribution contains a number of example applications that can be either used directory or studied when learning to develop applications for uIP. +

+ +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+


Modules

 DNS resolver
 The uIP DNS resolver functions are used to lookup a hostname and map it to a numerical IP address.
 SMTP E-mail sender
 The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is the standard way of sending and transfering e-mail on the Internet.
 Hello, world
 A small example showing how to write applications with protosockets.
 Web client
 This example shows a HTTP client that is able to download web pages and files from web servers.
 Web server
 The uIP web server is a very simplistic implementation of an HTTP server.
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00144.html b/components/net/uip/doc/html/a00144.html new file mode 100644 index 0000000000..5cca5bb290 --- /dev/null +++ b/components/net/uip/doc/html/a00144.html @@ -0,0 +1,328 @@ + + +uIP 1.0: uIP configuration functions + + + + + +

uIP configuration functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+The uIP configuration functions are used for setting run-time parameters in uIP such as IP addresses. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define uip_sethostaddr(addr)
 Set the IP address of this host.
#define uip_gethostaddr(addr)
 Get the IP address of this host.
#define uip_setdraddr(addr)
 Set the default router's IP address.
#define uip_setnetmask(addr)
 Set the netmask.
#define uip_getdraddr(addr)
 Get the default router's IP address.
#define uip_getnetmask(addr)
 Get the netmask.
#define uip_setethaddr(eaddr)
 Specifiy the Ethernet MAC address.
+


Define Documentation

+

+ + + + +
+ + + + + + + + + +
#define uip_getdraddr ( addr   ) 
+
+ + + + + +
+   + + +

+Get the default router's IP address. +

+

Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable that will be filled in with the IP address of the default router.
+
+ +

+Definition at line 161 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_gethostaddr ( addr   ) 
+
+ + + + + +
+   + + +

+Get the IP address of this host. +

+The IP address is represented as a 4-byte array where the first octet of the IP address is put in the first member of the 4-byte array.

+Example:

 uip_ipaddr_t hostaddr;
+
+ uip_gethostaddr(&hostaddr);
+
Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable that will be filled in with the currently configured IP address.
+
+ +

+Definition at line 126 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_getnetmask ( addr   ) 
+
+ + + + + +
+   + + +

+Get the netmask. +

+

Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable that will be filled in with the value of the netmask.
+
+ +

+Definition at line 171 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_setdraddr ( addr   ) 
+
+ + + + + +
+   + + +

+Set the default router's IP address. +

+

Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable containing the IP address of the default router.
+
+
See also:
uip_ipaddr()
+ +

+Definition at line 138 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_setethaddr ( eaddr   ) 
+
+ + + + + +
+   + + +

+Specifiy the Ethernet MAC address. +

+The ARP code needs to know the MAC address of the Ethernet card in order to be able to respond to ARP queries and to generate working Ethernet headers.

+

Note:
This macro only specifies the Ethernet MAC address to the ARP code. It cannot be used to change the MAC address of the Ethernet card.
+
Parameters:
+ + +
eaddr A pointer to a struct uip_eth_addr containing the Ethernet MAC address of the Ethernet card.
+
+ +

+Definition at line 134 of file uip_arp.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_sethostaddr ( addr   ) 
+
+ + + + + +
+   + + +

+Set the IP address of this host. +

+The IP address is represented as a 4-byte array where the first octet of the IP address is put in the first member of the 4-byte array.

+Example:

 uip_ipaddr_t addr;
+
+ uip_ipaddr(&addr, 192,168,1,2);
+ uip_sethostaddr(&addr);
+
Parameters:
+ + +
addr A pointer to an IP address of type uip_ipaddr_t;
+
+
See also:
uip_ipaddr()
+
Examples:
+dhcpc.c, example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 106 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_setnetmask ( addr   ) 
+
+ + + + + +
+   + + +

+Set the netmask. +

+

Parameters:
+ + +
addr A pointer to a uip_ipaddr_t variable containing the IP address of the netmask.
+
+
See also:
uip_ipaddr()
+ +

+Definition at line 150 of file uip.h.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00145.html b/components/net/uip/doc/html/a00145.html new file mode 100644 index 0000000000..d087f911b8 --- /dev/null +++ b/components/net/uip/doc/html/a00145.html @@ -0,0 +1,106 @@ + + +uIP 1.0: uIP initialization functions + + + + + +

uIP initialization functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+The uIP initialization functions are used for booting uIP. +

+ +

+ + + + + + + + + +

Functions

void uip_init (void)
 uIP initialization function.
void uip_setipid (u16_t id)
 uIP initialization function.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void uip_init ( void   ) 
+
+ + + + + +
+   + + +

+uIP initialization function. +

+This function should be called at boot up to initilize the uIP TCP/IP stack.

Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 379 of file uip.c. +

+References UIP_LISTENPORTS.

+

+ + + + +
+ + + + + + + + + +
void uip_setipid ( u16_t  id  ) 
+
+ + + + + +
+   + + +

+uIP initialization function. +

+This function may be used at boot time to set the initial ip_id. +

+Definition at line 181 of file uip.c.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00146.html b/components/net/uip/doc/html/a00146.html new file mode 100644 index 0000000000..33a3b5dd84 --- /dev/null +++ b/components/net/uip/doc/html/a00146.html @@ -0,0 +1,383 @@ + + +uIP 1.0: uIP device driver functions + + + + + +

uIP device driver functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+These functions are used by a network device driver for interacting with uIP. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define uip_input()
 Process an incoming packet.
#define uip_periodic(conn)
 Periodic processing for a connection identified by its number.
+#define uip_conn_active(conn)   (uip_conns[conn].tcpstateflags != UIP_CLOSED)
#define uip_periodic_conn(conn)
 Perform periodic processing for a connection identified by a pointer to its structure.
#define uip_poll_conn(conn)
 Reuqest that a particular connection should be polled.
#define uip_udp_periodic(conn)
 Periodic processing for a UDP connection identified by its number.
#define uip_udp_periodic_conn(conn)
 Periodic processing for a UDP connection identified by a pointer to its structure.

Variables

u8_t uip_buf [UIP_BUFSIZE+2]
 The uIP packet buffer.
+


Define Documentation

+

+ + + + +
+ + + + +  + + + + +
#define uip_input (   ) 
+
+ + + + + +
+   + + +

+Process an incoming packet. +

+This function should be called when the device driver has received a packet from the network. The packet from the device driver must be present in the uip_buf buffer, and the length of the packet should be placed in the uip_len variable.

+When the function returns, there may be an outbound packet placed in the uip_buf packet buffer. If so, the uip_len variable is set to the length of the packet. If no packet is to be sent out, the uip_len variable is set to 0.

+The usual way of calling the function is presented by the source code below.

  uip_len = devicedriver_poll();
+  if(uip_len > 0) {
+    uip_input();
+    if(uip_len > 0) {
+      devicedriver_send();
+    }
+  }
+

+

Note:
If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the uIP ARP code before calling this function:
  #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
+  uip_len = ethernet_devicedrver_poll();
+  if(uip_len > 0) {
+    if(BUF->type == HTONS(UIP_ETHTYPE_IP)) {
+      uip_arp_ipin();
+      uip_input();
+      if(uip_len > 0) {
+        uip_arp_out();
+        ethernet_devicedriver_send();
+      }
+    } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) {
+      uip_arp_arpin();
+      if(uip_len > 0) {
+        ethernet_devicedriver_send();
+      }
+    }
+
+
Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 257 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_periodic ( conn   ) 
+
+ + + + + +
+   + + +

+Periodic processing for a connection identified by its number. +

+This function does the necessary periodic processing (timers, polling) for a uIP TCP conneciton, and should be called when the periodic uIP timer goes off. It should be called for every connection, regardless of whether they are open of closed.

+When the function returns, it may have an outbound packet waiting for service in the uIP packet buffer, and if so the uip_len variable is set to a value larger than zero. The device driver should be called to send out the packet.

+The ususal way of calling the function is through a for() loop like this:

  for(i = 0; i < UIP_CONNS; ++i) {
+    uip_periodic(i);
+    if(uip_len > 0) {
+      devicedriver_send();
+    }
+  }
+

+

Note:
If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the uip_arp_out() function before calling the device driver:
  for(i = 0; i < UIP_CONNS; ++i) {
+    uip_periodic(i);
+    if(uip_len > 0) {
+      uip_arp_out();
+      ethernet_devicedriver_send();
+    }
+  }
+
+
Parameters:
+ + +
conn The number of the connection which is to be periodically polled.
+
+
Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 301 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_periodic_conn ( conn   ) 
+
+ + + + + +
+   + + +

+Perform periodic processing for a connection identified by a pointer to its structure. +

+Same as uip_periodic() but takes a pointer to the actual uip_conn struct instead of an integer as its argument. This function can be used to force periodic processing of a specific connection.

+

Parameters:
+ + +
conn A pointer to the uip_conn struct for the connection to be processed.
+
+ +

+Definition at line 323 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_poll_conn ( conn   ) 
+
+ + + + + +
+   + + +

+Reuqest that a particular connection should be polled. +

+Similar to uip_periodic_conn() but does not perform any timer processing. The application is polled for new data.

+

Parameters:
+ + +
conn A pointer to the uip_conn struct for the connection to be processed.
+
+ +

+Definition at line 337 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_udp_periodic ( conn   ) 
+
+ + + + + +
+   + + +

+Periodic processing for a UDP connection identified by its number. +

+This function is essentially the same as uip_periodic(), but for UDP connections. It is called in a similar fashion as the uip_periodic() function:

  for(i = 0; i < UIP_UDP_CONNS; i++) {
+    uip_udp_periodic(i);
+    if(uip_len > 0) {
+      devicedriver_send();
+    }
+  }
+

+

Note:
As for the uip_periodic() function, special care has to be taken when using uIP together with ARP and Ethernet:
  for(i = 0; i < UIP_UDP_CONNS; i++) {
+    uip_udp_periodic(i);
+    if(uip_len > 0) {
+      uip_arp_out();
+      ethernet_devicedriver_send();
+    }
+  }
+
+
Parameters:
+ + +
conn The number of the UDP connection to be processed.
+
+
Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 373 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_udp_periodic_conn ( conn   ) 
+
+ + + + + +
+   + + +

+Periodic processing for a UDP connection identified by a pointer to its structure. +

+Same as uip_udp_periodic() but takes a pointer to the actual uip_conn struct instead of an integer as its argument. This function can be used to force periodic processing of a specific connection.

+

Parameters:
+ + +
conn A pointer to the uip_udp_conn struct for the connection to be processed.
+
+ +

+Definition at line 390 of file uip.h.

+


Variable Documentation

+

+ + + + +
+ + + + +
u8_t uip_buf[UIP_BUFSIZE+2]
+
+ + + + + +
+   + + +

+The uIP packet buffer. +

+The uip_buf array is used to hold incoming and outgoing packets. The device driver should place incoming data into this buffer. When sending data, the device driver should read the link level headers and the TCP/IP headers from this buffer. The size of the link level headers is configured by the UIP_LLH_LEN define.

+

Note:
The application data need not be placed in this buffer, so the device driver must read it from the place pointed to by the uip_appdata pointer as illustrated by the following example:
 void
+ devicedriver_send(void)
+ {
+    hwsend(&uip_buf[0], UIP_LLH_LEN);
+    if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) {
+      hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN);
+    } else {
+      hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN);
+      hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN);
+    }
+ }
+
+ +

+Definition at line 139 of file uip.c. +

+Referenced by uip_process().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00147.html b/components/net/uip/doc/html/a00147.html new file mode 100644 index 0000000000..8e7f247bb2 --- /dev/null +++ b/components/net/uip/doc/html/a00147.html @@ -0,0 +1,1046 @@ + + +uIP 1.0: uIP application functions + + + + + +

uIP application functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+Functions used by an application running of top of uIP. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

+#define uip_outstanding(conn)   ((conn)->len)
#define uip_datalen()
 The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer.
#define uip_urgdatalen()
 The length of any out-of-band data (urgent data) that has arrived on the connection.
#define uip_close()
 Close the current connection.
#define uip_abort()
 Abort the current connection.
#define uip_stop()
 Tell the sending host to stop sending data.
+#define uip_stopped(conn)
 Find out if the current connection has been previously stopped with uip_stop().
#define uip_restart()
 Restart the current connection, if is has previously been stopped with uip_stop().
#define uip_udpconnection()
 Is the current connection a UDP connection?
#define uip_newdata()
 Is new incoming data available?
#define uip_acked()
 Has previously sent data been acknowledged?
#define uip_connected()
 Has the connection just been connected?
#define uip_closed()
 Has the connection been closed by the other end?
#define uip_aborted()
 Has the connection been aborted by the other end?
#define uip_timedout()
 Has the connection timed out?
#define uip_rexmit()
 Do we need to retransmit previously data?
#define uip_poll()
 Is the connection being polled by uIP?
+#define uip_initialmss()
 Get the initial maxium segment size (MSS) of the current connection.
#define uip_mss()
 Get the current maxium segment size that can be sent on the current connection.
#define uip_udp_remove(conn)
 Removed a UDP connection.
#define uip_udp_bind(conn, port)
 Bind a UDP connection to a local port.
#define uip_udp_send(len)
 Send a UDP datagram of length len on the current connection.

Functions

void uip_listen (u16_t port)
 Start listening to the specified port.
void uip_unlisten (u16_t port)
 Stop listening to the specified port.
uip_conn * uip_connect (uip_ipaddr_t *ripaddr, u16_t port)
 Connect to a remote host using TCP.
void uip_send (const void *data, int len)
 Send data on the current connection.
uip_udp_conn * uip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport)
 Set up a new UDP connection.
+


Define Documentation

+

+ + + + +
+ + + + +  + + + + +
#define uip_abort (   ) 
+
+ + + + + +
+   + + +

+Abort the current connection. +

+This function will abort (reset) the current connection, and is usually used when an error has occured that prevents using the uip_close() function.

Examples:
+webclient.c.
+

+Definition at line 581 of file uip.h. +

+Referenced by httpd_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_aborted (   ) 
+
+ + + + + +
+   + + +

+Has the connection been aborted by the other end? +

+Non-zero if the current connection has been aborted (reset) by the remote host.

Examples:
+smtp.c, telnetd.c, and webclient.c.
+

+Definition at line 680 of file uip.h. +

+Referenced by httpd_appcall(), smtp_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_acked (   ) 
+
+ + + + + +
+   + + +

+Has previously sent data been acknowledged? +

+Will reduce to non-zero if the previously sent data has been acknowledged by the remote host. This means that the application can send new data.

Examples:
+telnetd.c, and webclient.c.
+

+Definition at line 648 of file uip.h. +

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_close (   ) 
+
+ + + + + +
+   + + +

+Close the current connection. +

+This function will close the current connection in a nice way.

Examples:
+telnetd.c.
+

+Definition at line 570 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_closed (   ) 
+
+ + + + + +
+   + + +

+Has the connection been closed by the other end? +

+Is non-zero if the connection has been closed by the remote host. The application may then do the necessary clean-ups.

Examples:
+smtp.c, telnetd.c, and webclient.c.
+

+Definition at line 670 of file uip.h. +

+Referenced by httpd_appcall(), smtp_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_connected (   ) 
+
+ + + + + +
+   + + +

+Has the connection just been connected? +

+Reduces to non-zero if the current connection has been connected to a remote host. This will happen both if the connection has been actively opened (with uip_connect()) or passively opened (with uip_listen()).

Examples:
+hello-world.c, telnetd.c, and webclient.c.
+

+Definition at line 660 of file uip.h. +

+Referenced by hello_world_appcall(), httpd_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_datalen (   ) 
+
+ + + + + +
+   + + +

+The length of any incoming data that is currently avaliable (if avaliable) in the uip_appdata buffer. +

+The test function uip_data() must first be used to check if there is any data available at all.

Examples:
+dhcpc.c, telnetd.c, and webclient.c.
+

+Definition at line 550 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_mss (   ) 
+
+ + + + + +
+   + + +

+Get the current maxium segment size that can be sent on the current connection. +

+The current maxiumum segment size that can be sent on the connection is computed from the receiver's window and the MSS of the connection (which also is available by calling uip_initialmss()).

Examples:
+telnetd.c, and webclient.c.
+

+Definition at line 737 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_newdata (   ) 
+
+ + + + + +
+   + + +

+Is new incoming data available? +

+Will reduce to non-zero if there is new data for the application present at the uip_appdata pointer. The size of the data is avaliable through the uip_len variable.

Examples:
+dhcpc.c, resolv.c, telnetd.c, and webclient.c.
+

+Definition at line 637 of file uip.h. +

+Referenced by psock_newdata(), resolv_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_poll (   ) 
+
+ + + + + +
+   + + +

+Is the connection being polled by uIP? +

+Is non-zero if the reason the application is invoked is that the current connection has been idle for a while and should be polled.

+The polling event can be used for sending data without having to wait for the remote host to send data.

Examples:
+resolv.c, telnetd.c, and webclient.c.
+

+Definition at line 716 of file uip.h. +

+Referenced by httpd_appcall(), resolv_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_restart (   ) 
+
+ + + + + +
+   + + +

+Restart the current connection, if is has previously been stopped with uip_stop(). +

+This function will open the receiver's window again so that we start receiving data for the current connection. +

+Definition at line 610 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_rexmit (   ) 
+
+ + + + + +
+   + + +

+Do we need to retransmit previously data? +

+Reduces to non-zero if the previously sent data has been lost in the network, and the application should retransmit it. The application should send the exact same data as it did the last time, using the uip_send() function.

Examples:
+telnetd.c, and webclient.c.
+

+Definition at line 702 of file uip.h. +

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + +  + + + + +
#define uip_stop (   ) 
+
+ + + + + +
+   + + +

+Tell the sending host to stop sending data. +

+This function will close our receiver's window so that we stop receiving data for the current connection. +

+Definition at line 591 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_timedout (   ) 
+
+ + + + + +
+   + + +

+Has the connection timed out? +

+Non-zero if the current connection has been aborted due to too many retransmissions.

Examples:
+smtp.c, telnetd.c, and webclient.c.
+

+Definition at line 690 of file uip.h. +

+Referenced by httpd_appcall(), smtp_appcall(), and webclient_appcall().

+

+ + + + +
+ + + + + + + + + + + + +
#define uip_udp_bind ( conn,
port   ) 
+
+ + + + + +
+   + + +

+Bind a UDP connection to a local port. +

+

Parameters:
+ + + +
conn A pointer to the uip_udp_conn structure for the connection.
port The local port number, in network byte order.
+
+
Examples:
+dhcpc.c.
+

+Definition at line 787 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_udp_remove ( conn   ) 
+
+ + + + + +
+   + + +

+Removed a UDP connection. +

+

Parameters:
+ + +
conn A pointer to the uip_udp_conn structure for the connection.
+
+
Examples:
+resolv.c.
+

+Definition at line 775 of file uip.h. +

+Referenced by resolv_conf().

+

+ + + + +
+ + + + + + + + + +
#define uip_udp_send ( len   ) 
+
+ + + + + +
+   + + +

+Send a UDP datagram of length len on the current connection. +

+This function can only be called in response to a UDP event (poll or newdata). The data must be present in the uip_buf buffer, at the place pointed to by the uip_appdata pointer.

+

Parameters:
+ + +
len The length of the data in the uip_buf buffer.
+
+
Examples:
+resolv.c.
+

+Definition at line 800 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_udpconnection (   ) 
+
+ + + + + +
+   + + +

+Is the current connection a UDP connection? +

+This function checks whether the current connection is a UDP connection. +

+Definition at line 626 of file uip.h.

+

+ + + + +
+ + + + +  + + + + +
#define uip_urgdatalen (   ) 
+
+ + + + + +
+   + + +

+The length of any out-of-band data (urgent data) that has arrived on the connection. +

+

Note:
The configuration parameter UIP_URGDATA must be set for this function to be enabled.
+ +

+Definition at line 561 of file uip.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
struct uip_conn* uip_connect ( uip_ipaddr_t *  ripaddr,
u16_t  port
) 
+
+ + + + + +
+   + + +

+Connect to a remote host using TCP. +

+This function is used to start a new connection to the specified port on the specied host. It allocates a new connection identifier, sets the connection to the SYN_SENT state and sets the retransmission timer to 0. This will cause a TCP SYN segment to be sent out the next time this connection is periodically processed, which usually is done within 0.5 seconds after the call to uip_connect().

+

Note:
This function is avaliable only if support for active open has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.

+Since this function requires the port number to be in network byte order, a conversion using HTONS() or htons() is necessary.

+
 uip_ipaddr_t ipaddr;
+
+ uip_ipaddr(&ipaddr, 192,168,1,2);
+ uip_connect(&ipaddr, HTONS(80));
+

+

Parameters:
+ + + +
ripaddr The IP address of the remote hot.
port A 16-bit port number in network byte order.
+
+
Returns:
A pointer to the uIP connection identifier for the new connection, or NULL if no connection could be allocated.
+
Examples:
+smtp.c, and webclient.c.
+

+Definition at line 407 of file uip.c. +

+References htons(), uip_conn::lport, uip_conn::tcpstateflags, UIP_CLOSED, uip_conn, UIP_CONNS, and uip_conns. +

+Referenced by smtp_send(), and webclient_get().

+

+ + + + +
+ + + + + + + + + +
void uip_listen ( u16_t  port  ) 
+
+ + + + + +
+   + + +

+Start listening to the specified port. +

+

Note:
Since this function expects the port number in network byte order, a conversion using HTONS() or htons() is necessary.
+
 uip_listen(HTONS(80));
+

+

Parameters:
+ + +
port A 16-bit port number in network byte order.
+
+
Examples:
+hello-world.c, and telnetd.c.
+

+Definition at line 529 of file uip.c. +

+References UIP_LISTENPORTS. +

+Referenced by hello_world_init(), and httpd_init().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void uip_send ( const void *  data,
int  len
) 
+
+ + + + + +
+   + + +

+Send data on the current connection. +

+This function is used to send out a single segment of TCP data. Only applications that have been invoked by uIP for event processing can send data.

+The amount of data that actually is sent out after a call to this funcion is determined by the maximum amount of data TCP allows. uIP will automatically crop the data so that only the appropriate amount of data is sent. The function uip_mss() can be used to query uIP for the amount of data that actually will be sent.

+

Note:
This function does not guarantee that the sent data will arrive at the destination. If the data is lost in the network, the application will be invoked with the uip_rexmit() event being set. The application will then have to resend the data using this function.
+
Parameters:
+ + + +
data A pointer to the data which is to be sent.
len The maximum amount of data bytes to be sent.
+
+
Examples:
+dhcpc.c, telnetd.c, and webclient.c.
+

+Definition at line 1888 of file uip.c. +

+References uip_sappdata, and uip_slen.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
struct uip_udp_conn* uip_udp_new ( uip_ipaddr_t *  ripaddr,
u16_t  rport
) 
+
+ + + + + +
+   + + +

+Set up a new UDP connection. +

+This function sets up a new UDP connection. The function will automatically allocate an unused local port for the new connection. However, another port can be chosen by using the uip_udp_bind() call, after the uip_udp_new() function has been called.

+Example:

 uip_ipaddr_t addr;
+ struct uip_udp_conn *c;
+ 
+ uip_ipaddr(&addr, 192,168,2,1);
+ c = uip_udp_new(&addr, HTONS(12345));
+ if(c != NULL) {
+   uip_udp_bind(c, HTONS(12344));
+ }
+
Parameters:
+ + + +
ripaddr The IP address of the remote host.
rport The remote port number in network byte order.
+
+
Returns:
The uip_udp_conn structure for the new connection or NULL if no connection could be allocated.
+
Examples:
+dhcpc.c, and resolv.c.
+

+Definition at line 473 of file uip.c. +

+References htons(), uip_udp_conn::lport, uip_udp_conn, UIP_UDP_CONNS, and uip_udp_conns. +

+Referenced by resolv_conf().

+

+ + + + +
+ + + + + + + + + +
void uip_unlisten ( u16_t  port  ) 
+
+ + + + + +
+   + + +

+Stop listening to the specified port. +

+

Note:
Since this function expects the port number in network byte order, a conversion using HTONS() or htons() is necessary.
+

+

Parameters:
+ + +
port A 16-bit port number in network byte order.
+
+ +

+Definition at line 518 of file uip.c. +

+References UIP_LISTENPORTS.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00148.html b/components/net/uip/doc/html/a00148.html new file mode 100644 index 0000000000..16158a41af --- /dev/null +++ b/components/net/uip/doc/html/a00148.html @@ -0,0 +1,634 @@ + + +uIP 1.0: uIP conversion functions + + + + + +

uIP conversion functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+These functions can be used for converting between different data formats used by uIP. +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Defines

#define uip_ipaddr(addr, addr0, addr1, addr2, addr3)
 Construct an IP address from four bytes.
#define uip_ip6addr(addr, addr0, addr1, addr2, addr3, addr4, addr5, addr6, addr7)
 Construct an IPv6 address from eight 16-bit words.
#define uip_ipaddr_copy(dest, src)
 Copy an IP address to another IP address.
#define uip_ipaddr_cmp(addr1, addr2)
 Compare two IP addresses.
#define uip_ipaddr_maskcmp(addr1, addr2, mask)
 Compare two IP addresses with netmasks.
#define uip_ipaddr_mask(dest, src, mask)
 Mask out the network part of an IP address.
#define uip_ipaddr1(addr)
 Pick the first octet of an IP address.
#define uip_ipaddr2(addr)
 Pick the second octet of an IP address.
#define uip_ipaddr3(addr)
 Pick the third octet of an IP address.
#define uip_ipaddr4(addr)
 Pick the fourth octet of an IP address.
#define HTONS(n)
 Convert 16-bit quantity from host byte order to network byte order.
+#define ntohs   htons

Functions

u16_t htons (u16_t val)
 Convert 16-bit quantity from host byte order to network byte order.
+


Define Documentation

+

+ + + + +
+ + + + + + + + + +
#define HTONS ( n   ) 
+
+ + + + + +
+   + + +

+Convert 16-bit quantity from host byte order to network byte order. +

+This macro is primarily used for converting constants from host byte order to network byte order. For converting variables to network byte order, use the htons() function instead.

Examples:
+dhcpc.c, hello-world.c, resolv.c, smtp.c, and telnetd.c.
+

+Definition at line 1070 of file uip.h. +

+Referenced by hello_world_init(), htons(), httpd_init(), resolv_appcall(), resolv_conf(), smtp_send(), uip_arp_arpin(), and uip_process().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define uip_ip6addr ( addr,
addr0,
addr1,
addr2,
addr3,
addr4,
addr5,
addr6,
addr7   ) 
+
+ + + + + +
+   + + +

+Construct an IPv6 address from eight 16-bit words. +

+This function constructs an IPv6 address. +

+Definition at line 852 of file uip.h.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
#define uip_ipaddr ( addr,
addr0,
addr1,
addr2,
addr3   ) 
+
+ + + + + +
+   + + +

+Construct an IP address from four bytes. +

+This function constructs an IP address of the type that uIP handles internally from four bytes. The function is handy for specifying IP addresses to use with e.g. the uip_connect() function.

+Example:

 uip_ipaddr_t ipaddr;
+ struct uip_conn *c;
+ 
+ uip_ipaddr(&ipaddr, 192,168,1,2);
+ c = uip_connect(&ipaddr, HTONS(80));
+

+

Parameters:
+ + + + + + +
addr A pointer to a uip_ipaddr_t variable that will be filled in with the IP address.
addr0 The first octet of the IP address.
addr1 The second octet of the IP address.
addr2 The third octet of the IP address.
addr3 The forth octet of the IP address.
+
+
Examples:
+dhcpc.c, example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 840 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_ipaddr1 ( addr   ) 
+
+ + + + + +
+   + + +

+Pick the first octet of an IP address. +

+Picks out the first octet of an IP address.

+Example:

 uip_ipaddr_t ipaddr;
+ u8_t octet;
+
+ uip_ipaddr(&ipaddr, 1,2,3,4);
+ octet = uip_ipaddr1(&ipaddr);
+

+In the example above, the variable "octet" will contain the value 1.

Examples:
+dhcpc.c.
+

+Definition at line 995 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_ipaddr2 ( addr   ) 
+
+ + + + + +
+   + + +

+Pick the second octet of an IP address. +

+Picks out the second octet of an IP address.

+Example:

 uip_ipaddr_t ipaddr;
+ u8_t octet;
+
+ uip_ipaddr(&ipaddr, 1,2,3,4);
+ octet = uip_ipaddr2(&ipaddr);
+

+In the example above, the variable "octet" will contain the value 2.

Examples:
+dhcpc.c.
+

+Definition at line 1015 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_ipaddr3 ( addr   ) 
+
+ + + + + +
+   + + +

+Pick the third octet of an IP address. +

+Picks out the third octet of an IP address.

+Example:

 uip_ipaddr_t ipaddr;
+ u8_t octet;
+
+ uip_ipaddr(&ipaddr, 1,2,3,4);
+ octet = uip_ipaddr3(&ipaddr);
+

+In the example above, the variable "octet" will contain the value 3.

Examples:
+dhcpc.c.
+

+Definition at line 1035 of file uip.h.

+

+ + + + +
+ + + + + + + + + +
#define uip_ipaddr4 ( addr   ) 
+
+ + + + + +
+   + + +

+Pick the fourth octet of an IP address. +

+Picks out the fourth octet of an IP address.

+Example:

 uip_ipaddr_t ipaddr;
+ u8_t octet;
+
+ uip_ipaddr(&ipaddr, 1,2,3,4);
+ octet = uip_ipaddr4(&ipaddr);
+

+In the example above, the variable "octet" will contain the value 4.

Examples:
+dhcpc.c.
+

+Definition at line 1055 of file uip.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define uip_ipaddr_cmp ( addr1,
addr2   ) 
+
+ + + + + +
+   + + +

+Compare two IP addresses. +

+Compares two IP addresses.

+Example:

 uip_ipaddr_t ipaddr1, ipaddr2;
+
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
+ if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) {
+    printf("They are the same");
+ }
+

+

Parameters:
+ + + +
addr1 The first IP address.
addr2 The second IP address.
+
+ +

+Definition at line 911 of file uip.h. +

+Referenced by uip_arp_arpin(), uip_arp_out(), and uip_process().

+

+ + + + +
+ + + + + + + + + + + + +
#define uip_ipaddr_copy ( dest,
src   ) 
+
+ + + + + +
+   + + +

+Copy an IP address to another IP address. +

+Copies an IP address from one place to another.

+Example:

 uip_ipaddr_t ipaddr1, ipaddr2;
+
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
+ uip_ipaddr_copy(&ipaddr2, &ipaddr1);
+

+

Parameters:
+ + + +
dest The destination for the copy.
src The source from where to copy.
+
+
Examples:
+smtp.c.
+

+Definition at line 882 of file uip.h. +

+Referenced by smtp_configure(), uip_arp_out(), and uip_process().

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define uip_ipaddr_mask ( dest,
src,
mask   ) 
+
+ + + + + +
+   + + +

+Mask out the network part of an IP address. +

+Masks out the network part of an IP address, given the address and the netmask.

+Example:

 uip_ipaddr_t ipaddr1, ipaddr2, netmask;
+
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
+ uip_ipaddr(&netmask, 255,255,255,0);
+ uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask);
+

+In the example above, the variable "ipaddr2" will contain the IP address 192.168.1.0.

+

Parameters:
+ + + + +
dest Where the result is to be placed.
src The IP address.
mask The netmask.
+
+ +

+Definition at line 972 of file uip.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define uip_ipaddr_maskcmp ( addr1,
addr2,
mask   ) 
+
+ + + + + +
+   + + +

+Compare two IP addresses with netmasks. +

+Compares two IP addresses with netmasks. The masks are used to mask out the bits that are to be compared.

+Example:

 uip_ipaddr_t ipaddr1, ipaddr2, mask;
+
+ uip_ipaddr(&mask, 255,255,255,0);
+ uip_ipaddr(&ipaddr1, 192,16,1,2);
+ uip_ipaddr(&ipaddr2, 192,16,1,3);
+ if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) {
+    printf("They are the same");
+ }
+

+

Parameters:
+ + + + +
addr1 The first IP address.
addr2 The second IP address.
mask The netmask.
+
+ +

+Definition at line 941 of file uip.h. +

+Referenced by uip_arp_out().

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
u16_t htons ( u16_t  val  ) 
+
+ + + + + +
+   + + +

+Convert 16-bit quantity from host byte order to network byte order. +

+This function is primarily used for converting variables from host byte order to network byte order. For converting constants to network byte order, use the HTONS() macro instead.

Examples:
+example-mainloop-with-arp.c, resolv.c, and webclient.c.
+

+Definition at line 1882 of file uip.c. +

+References HTONS. +

+Referenced by uip_chksum(), uip_connect(), uip_ipchksum(), uip_udp_new(), and webclient_get().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00149.html b/components/net/uip/doc/html/a00149.html new file mode 100644 index 0000000000..ad39b08344 --- /dev/null +++ b/components/net/uip/doc/html/a00149.html @@ -0,0 +1,68 @@ + + +uIP 1.0: Variables used in uIP device drivers + + + + + +

Variables used in uIP device drivers
+ +[The uIP TCP/IP stack] +


Detailed Description

+uIP has a few global variables that are used in device drivers for uIP. +

+ +

+ + + + + + +

Variables

u16_t uip_len
 The length of the packet in the uip_buf buffer.
+


Variable Documentation

+

+ + + + +
+ + + + +
u16_t uip_len
+
+ + + + + +
+   + + +

+The length of the packet in the uip_buf buffer. +

+The global variable uip_len holds the length of the packet in the uip_buf buffer.

+When the network device driver calls the uIP input function, uip_len should be set to the length of the packet in the uip_buf buffer.

+When sending packets, the device driver should use the contents of the uip_len variable to determine the length of the outgoing packet.

Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 155 of file uip.c. +

+Referenced by uip_arp_arpin(), uip_process(), and uip_split_output().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00150.html b/components/net/uip/doc/html/a00150.html new file mode 100644 index 0000000000..56806e01f6 --- /dev/null +++ b/components/net/uip/doc/html/a00150.html @@ -0,0 +1,1248 @@ + + +uIP 1.0: The uIP TCP/IP stack + + + + + +

The uIP TCP/IP stack


Detailed Description

+uIP is an implementation of the TCP/IP protocol stack intended for small 8-bit and 16-bit microcontrollers. +

+uIP provides the necessary protocols for Internet communication, with a very small code footprint and RAM requirements - the uIP code size is on the order of a few kilobytes and RAM usage is on the order of a few hundred bytes. +

+ + + + + + + +

+

+ + + +

+

+ + + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  uip.h
 Header file for the uIP TCP/IP stack.
file  uip.c
 The uIP TCP/IP stack code.

Modules

 uIP configuration functions
 The uIP configuration functions are used for setting run-time parameters in uIP such as IP addresses.
 uIP initialization functions
 The uIP initialization functions are used for booting uIP.
 uIP device driver functions
 These functions are used by a network device driver for interacting with uIP.
 uIP application functions
 Functions used by an application running of top of uIP.
 uIP conversion functions
 These functions can be used for converting between different data formats used by uIP.
 Variables used in uIP device drivers
 uIP has a few global variables that are used in device drivers for uIP.
 uIP Address Resolution Protocol
 The Address Resolution Protocol ARP is used for mapping between IP addresses and link level addresses such as the Ethernet MAC addresses.
 uIP TCP throughput booster hack
 The basic uIP TCP implementation only allows each TCP connection to have a single TCP segment in flight at any given time.
 Architecture specific uIP functions
 The functions in the architecture specific module implement the IP check sum and 32-bit additions.

Data Structures

struct  uip_conn
 Representation of a uIP TCP connection. More...
struct  uip_udp_conn
 Representation of a uIP UDP connection. More...
struct  uip_stats
 The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. More...
struct  uip_tcpip_hdr
struct  uip_icmpip_hdr
struct  uip_udpip_hdr
struct  uip_eth_addr
 Representation of a 48-bit Ethernet address. More...

Defines

+#define UIP_ACKDATA   1
+#define UIP_NEWDATA   2
+#define UIP_REXMIT   4
+#define UIP_POLL   8
+#define UIP_CLOSE   16
+#define UIP_ABORT   32
+#define UIP_CONNECTED   64
+#define UIP_TIMEDOUT   128
+#define UIP_DATA   1
+#define UIP_TIMER   2
+#define UIP_POLL_REQUEST   3
+#define UIP_UDP_SEND_CONN   4
+#define UIP_UDP_TIMER   5
+#define UIP_CLOSED   0
+#define UIP_SYN_RCVD   1
+#define UIP_SYN_SENT   2
+#define UIP_ESTABLISHED   3
+#define UIP_FIN_WAIT_1   4
+#define UIP_FIN_WAIT_2   5
+#define UIP_CLOSING   6
+#define UIP_TIME_WAIT   7
+#define UIP_LAST_ACK   8
+#define UIP_TS_MASK   15
+#define UIP_STOPPED   16
#define UIP_APPDATA_SIZE
 The buffer size available for user data in the uip_buf buffer.
+#define UIP_PROTO_ICMP   1
+#define UIP_PROTO_TCP   6
+#define UIP_PROTO_UDP   17
+#define UIP_PROTO_ICMP6   58
+#define UIP_IPH_LEN   20
+#define UIP_UDPH_LEN   8
+#define UIP_TCPH_LEN   20
+#define UIP_IPUDPH_LEN   (UIP_UDPH_LEN + UIP_IPH_LEN)
+#define UIP_IPTCPH_LEN   (UIP_TCPH_LEN + UIP_IPH_LEN)
+#define UIP_TCPIP_HLEN   UIP_IPTCPH_LEN
+#define TCP_FIN   0x01
+#define TCP_SYN   0x02
+#define TCP_RST   0x04
+#define TCP_PSH   0x08
+#define TCP_ACK   0x10
+#define TCP_URG   0x20
+#define TCP_CTL   0x3f
+#define TCP_OPT_END   0
+#define TCP_OPT_NOOP   1
+#define TCP_OPT_MSS   2
+#define TCP_OPT_MSS_LEN   4
+#define ICMP_ECHO_REPLY   0
+#define ICMP_ECHO   8
+#define ICMP6_ECHO_REPLY   129
+#define ICMP6_ECHO   128
+#define ICMP6_NEIGHBOR_SOLICITATION   135
+#define ICMP6_NEIGHBOR_ADVERTISEMENT   136
+#define ICMP6_FLAG_S   (1 << 6)
+#define ICMP6_OPTION_SOURCE_LINK_ADDRESS   1
+#define ICMP6_OPTION_TARGET_LINK_ADDRESS   2
+#define BUF   ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define FBUF   ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
+#define ICMPBUF   ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define UDPBUF   ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])
+#define UIP_STAT(s)
+#define UIP_LOG(m)

Typedefs

+typedef u16_t uip_ip4addr_t [2]
 Repressentation of an IP address.
+typedef u16_t uip_ip6addr_t [8]
+typedef uip_ip4addr_t uip_ipaddr_t

Functions

+void uip_process (u8_t flag)
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
u16_t uip_udpchksum (void)
 Calculate the UDP checksum of the packet in uip_buf and uip_appdata.
void uip_setipid (u16_t id)
 uIP initialization function.
void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition.
void uip_init (void)
 uIP initialization function.
uip_conn * uip_connect (uip_ipaddr_t *ripaddr, u16_t rport)
 Connect to a remote host using TCP.
uip_udp_conn * uip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport)
 Set up a new UDP connection.
void uip_unlisten (u16_t port)
 Stop listening to the specified port.
void uip_listen (u16_t port)
 Start listening to the specified port.
u16_t htons (u16_t val)
 Convert 16-bit quantity from host byte order to network byte order.
void uip_send (const void *data, int len)
 Send data on the current connection.

Variables

void * uip_appdata
 Pointer to the application data in the packet buffer.
uip_conn * uip_conn
 Pointer to the current TCP connection.
+uip_conn uip_conns [UIP_CONNS]
+uip_udp_conn * uip_udp_conn
 The current UDP connection.
+uip_udp_conn uip_udp_conns [UIP_UDP_CONNS]
uip_stats uip_stat
 The uIP TCP/IP statistics.
+u8_t uip_flags
+uip_ipaddr_t uip_hostaddr
+uip_ipaddr_t uip_netmask
+uip_ipaddr_t uip_draddr
+uip_ipaddr_t uip_hostaddr
+uip_ipaddr_t uip_draddr
+uip_ipaddr_t uip_netmask
+uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}}
u8_t uip_buf [UIP_BUFSIZE+2]
 The uIP packet buffer.
void * uip_appdata
 Pointer to the application data in the packet buffer.
+void * uip_sappdata
u16_t uip_len
 The length of the packet in the uip_buf buffer.
+u16_t uip_slen
+u8_t uip_flags
uip_conn * uip_conn
 Pointer to the current TCP connection.
+uip_conn uip_conns [UIP_CONNS]
+u16_t uip_listenports [UIP_LISTENPORTS]
+uip_udp_conn * uip_udp_conn
 The current UDP connection.
+uip_udp_conn uip_udp_conns [UIP_UDP_CONNS]
+u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
+


Define Documentation

+

+ + + + +
+ + + + +
#define UIP_APPDATA_SIZE
+
+ + + + + +
+   + + +

+The buffer size available for user data in the uip_buf buffer. +

+This macro holds the available size for user data in the uip_buf buffer. The macro is intended to be used for checking bounds of available user data.

+Example:

 snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i);
+
+

+Definition at line 1506 of file uip.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
u16_t htons ( u16_t  val  ) 
+
+ + + + + +
+   + + +

+Convert 16-bit quantity from host byte order to network byte order. +

+This function is primarily used for converting variables from host byte order to network byte order. For converting constants to network byte order, use the HTONS() macro instead. +

+Definition at line 1882 of file uip.c. +

+References HTONS. +

+Referenced by uip_chksum(), uip_connect(), uip_ipchksum(), uip_udp_new(), and webclient_get().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void uip_add32 ( u8_t *  op32,
u16_t  op16
) 
+
+ + + + + +
+   + + +

+Carry out a 32-bit addition. +

+Because not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.

+

Note:
The 32-bit integer pointed to by the op32 parameter and the result in the uip_acc32 variable are in network byte order (big endian).
+
Parameters:
+ + + +
op32 A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian).
op16 A 16-bit integer in host byte order.
+
+ +

+Definition at line 249 of file uip.c. +

+Referenced by uip_split_output().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
u16_t uip_chksum ( u16_t *  buf,
u16_t  len
) 
+
+ + + + + +
+   + + +

+Calculate the Internet checksum over a buffer. +

+The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.

+See RFC1071.

+

Parameters:
+ + + +
buf A pointer to the buffer over which the checksum is to be computed.
len The length of the buffer over which the checksum is to be computed.
+
+
Returns:
The Internet checksum of the buffer.
+ +

+Definition at line 311 of file uip.c. +

+References htons().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
struct uip_conn* uip_connect ( uip_ipaddr_t *  ripaddr,
u16_t  port
) 
+
+ + + + + +
+   + + +

+Connect to a remote host using TCP. +

+This function is used to start a new connection to the specified port on the specied host. It allocates a new connection identifier, sets the connection to the SYN_SENT state and sets the retransmission timer to 0. This will cause a TCP SYN segment to be sent out the next time this connection is periodically processed, which usually is done within 0.5 seconds after the call to uip_connect().

+

Note:
This function is avaliable only if support for active open has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.

+Since this function requires the port number to be in network byte order, a conversion using HTONS() or htons() is necessary.

+
 uip_ipaddr_t ipaddr;
+
+ uip_ipaddr(&ipaddr, 192,168,1,2);
+ uip_connect(&ipaddr, HTONS(80));
+

+

Parameters:
+ + + +
ripaddr The IP address of the remote hot.
port A 16-bit port number in network byte order.
+
+
Returns:
A pointer to the uIP connection identifier for the new connection, or NULL if no connection could be allocated.
+ +

+Definition at line 407 of file uip.c. +

+References htons(), uip_conn::lport, uip_conn::tcpstateflags, UIP_CLOSED, uip_conn, uip_conns, and UIP_CONNS. +

+Referenced by smtp_send(), and webclient_get().

+

+ + + + +
+ + + + + + + + + +
void uip_init ( void   ) 
+
+ + + + + +
+   + + +

+uIP initialization function. +

+This function should be called at boot up to initilize the uIP TCP/IP stack. +

+Definition at line 379 of file uip.c. +

+References UIP_LISTENPORTS.

+

+ + + + +
+ + + + + + + + + +
u16_t uip_ipchksum ( void   ) 
+
+ + + + + +
+   + + +

+Calculate the IP header checksum of the packet header in uip_buf. +

+The IP header checksum is the Internet checksum of the 20 bytes of the IP header.

+

Returns:
The IP header checksum of the IP header in the uip_buf buffer.
+ +

+Definition at line 318 of file uip.c. +

+References DEBUG_PRINTF, htons(), UIP_IPH_LEN, and UIP_LLH_LEN. +

+Referenced by uip_process(), and uip_split_output().

+

+ + + + +
+ + + + + + + + + +
void uip_listen ( u16_t  port  ) 
+
+ + + + + +
+   + + +

+Start listening to the specified port. +

+

Note:
Since this function expects the port number in network byte order, a conversion using HTONS() or htons() is necessary.
+
 uip_listen(HTONS(80));
+

+

Parameters:
+ + +
port A 16-bit port number in network byte order.
+
+ +

+Definition at line 529 of file uip.c. +

+References UIP_LISTENPORTS. +

+Referenced by hello_world_init(), and httpd_init().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void uip_send ( const void *  data,
int  len
) 
+
+ + + + + +
+   + + +

+Send data on the current connection. +

+This function is used to send out a single segment of TCP data. Only applications that have been invoked by uIP for event processing can send data.

+The amount of data that actually is sent out after a call to this funcion is determined by the maximum amount of data TCP allows. uIP will automatically crop the data so that only the appropriate amount of data is sent. The function uip_mss() can be used to query uIP for the amount of data that actually will be sent.

+

Note:
This function does not guarantee that the sent data will arrive at the destination. If the data is lost in the network, the application will be invoked with the uip_rexmit() event being set. The application will then have to resend the data using this function.
+
Parameters:
+ + + +
data A pointer to the data which is to be sent.
len The maximum amount of data bytes to be sent.
+
+ +

+Definition at line 1888 of file uip.c. +

+References uip_sappdata, and uip_slen.

+

+ + + + +
+ + + + + + + + + +
void uip_setipid ( u16_t  id  ) 
+
+ + + + + +
+   + + +

+uIP initialization function. +

+This function may be used at boot time to set the initial ip_id. +

+Definition at line 181 of file uip.c.

+

+ + + + +
+ + + + + + + + + +
u16_t uip_tcpchksum ( void   ) 
+
+ + + + + +
+   + + +

+Calculate the TCP checksum of the packet in uip_buf and uip_appdata. +

+The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.

+

Returns:
The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata.
+ +

+Definition at line 364 of file uip.c. +

+References UIP_PROTO_TCP. +

+Referenced by uip_split_output().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
struct uip_udp_conn* uip_udp_new ( uip_ipaddr_t *  ripaddr,
u16_t  rport
) 
+
+ + + + + +
+   + + +

+Set up a new UDP connection. +

+This function sets up a new UDP connection. The function will automatically allocate an unused local port for the new connection. However, another port can be chosen by using the uip_udp_bind() call, after the uip_udp_new() function has been called.

+Example:

 uip_ipaddr_t addr;
+ struct uip_udp_conn *c;
+ 
+ uip_ipaddr(&addr, 192,168,2,1);
+ c = uip_udp_new(&addr, HTONS(12345));
+ if(c != NULL) {
+   uip_udp_bind(c, HTONS(12344));
+ }
+
Parameters:
+ + + +
ripaddr The IP address of the remote host.
rport The remote port number in network byte order.
+
+
Returns:
The uip_udp_conn structure for the new connection or NULL if no connection could be allocated.
+ +

+Definition at line 473 of file uip.c. +

+References htons(), uip_udp_conn::lport, uip_udp_conn, uip_udp_conns, and UIP_UDP_CONNS. +

+Referenced by resolv_conf().

+

+ + + + +
+ + + + + + + + + +
u16_t uip_udpchksum ( void   ) 
+
+ + + + + +
+   + + +

+Calculate the UDP checksum of the packet in uip_buf and uip_appdata. +

+The UDP checksum is the Internet checksum of data contents of the UDP segment, and a pseudo-header as defined in RFC768.

+

Returns:
The UDP checksum of the UDP segment in uip_buf and pointed to by uip_appdata.
+ +

+Referenced by uip_process().

+

+ + + + +
+ + + + + + + + + +
void uip_unlisten ( u16_t  port  ) 
+
+ + + + + +
+   + + +

+Stop listening to the specified port. +

+

Note:
Since this function expects the port number in network byte order, a conversion using HTONS() or htons() is necessary.
+

+

Parameters:
+ + +
port A 16-bit port number in network byte order.
+
+ +

+Definition at line 518 of file uip.c. +

+References UIP_LISTENPORTS.

+


Variable Documentation

+

+ + + + +
+ + + + +
void* uip_appdata
+
+ + + + + +
+   + + +

+Pointer to the application data in the packet buffer. +

+This pointer points to the application data when the application is called. If the application wishes to send data, the application may use this space to write the data into before calling uip_send(). +

+Definition at line 143 of file uip.c. +

+Referenced by uip_process(), and uip_split_output().

+

+ + + + +
+ + + + +
void* uip_appdata
+
+ + + + + +
+   + + +

+Pointer to the application data in the packet buffer. +

+This pointer points to the application data when the application is called. If the application wishes to send data, the application may use this space to write the data into before calling uip_send().

Examples:
+dhcpc.c, resolv.c, telnetd.c, and webclient.c.
+

+Definition at line 143 of file uip.c. +

+Referenced by uip_process(), and uip_split_output().

+

+ + + + +
+ + + + +
u8_t uip_buf[UIP_BUFSIZE+2]
+
+ + + + + +
+   + + +

+The uIP packet buffer. +

+The uip_buf array is used to hold incoming and outgoing packets. The device driver should place incoming data into this buffer. When sending data, the device driver should read the link level headers and the TCP/IP headers from this buffer. The size of the link level headers is configured by the UIP_LLH_LEN define.

+

Note:
The application data need not be placed in this buffer, so the device driver must read it from the place pointed to by the uip_appdata pointer as illustrated by the following example:
 void
+ devicedriver_send(void)
+ {
+    hwsend(&uip_buf[0], UIP_LLH_LEN);
+    if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) {
+      hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN);
+    } else {
+      hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN);
+      hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN);
+    }
+ }
+
+ +

+Definition at line 139 of file uip.c. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
struct uip_conn* uip_conn
+
+ + + + + +
+   + + +

+Pointer to the current TCP connection. +

+The uip_conn pointer can be used to access the current TCP connection. +

+Definition at line 163 of file uip.c. +

+Referenced by uip_connect().

+

+ + + + +
+ + + + +
struct uip_conn* uip_conn
+
+ + + + + +
+   + + +

+Pointer to the current TCP connection. +

+The uip_conn pointer can be used to access the current TCP connection.

Examples:
+hello-world.c, smtp.c, and webclient.c.
+

+Definition at line 163 of file uip.c. +

+Referenced by uip_connect().

+

+ + + + +
+ + + + +
u16_t uip_len
+
+ + + + + +
+   + + +

+The length of the packet in the uip_buf buffer. +

+The global variable uip_len holds the length of the packet in the uip_buf buffer.

+When the network device driver calls the uIP input function, uip_len should be set to the length of the packet in the uip_buf buffer.

+When sending packets, the device driver should use the contents of the uip_len variable to determine the length of the outgoing packet. +

+Definition at line 155 of file uip.c. +

+Referenced by uip_arp_arpin(), uip_process(), and uip_split_output().

+

+ + + + +
+ + + + +
struct uip_stats uip_stat
+
+ + + + + +
+   + + +

+The uIP TCP/IP statistics. +

+This is the variable in which the uIP TCP/IP statistics are gathered. +

+Referenced by uip_process().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00151.html b/components/net/uip/doc/html/a00151.html new file mode 100644 index 0000000000..aa144cf2d0 --- /dev/null +++ b/components/net/uip/doc/html/a00151.html @@ -0,0 +1,221 @@ + + +uIP 1.0: Architecture specific uIP functions + + + + + +

Architecture specific uIP functions
+ +[The uIP TCP/IP stack] +


Detailed Description

+The functions in the architecture specific module implement the IP check sum and 32-bit additions. +

+The IP checksum calculation is the most computationally expensive operation in the TCP/IP stack and it therefore pays off to implement this in efficient assembler. The purpose of the uip-arch module is to let the checksum functions to be implemented in architecture specific assembler. +

+ + + + + + + +

+

+ + + + + + + + + + + + + + + + +

Files

file  uip_arch.h
 Declarations of architecture specific functions.

Functions

void uip_add32 (u8_t *op32, u16_t op16)
 Carry out a 32-bit addition.
u16_t uip_chksum (u16_t *buf, u16_t len)
 Calculate the Internet checksum over a buffer.
u16_t uip_ipchksum (void)
 Calculate the IP header checksum of the packet header in uip_buf.
u16_t uip_tcpchksum (void)
 Calculate the TCP checksum of the packet in uip_buf and uip_appdata.

Variables

+u8_t uip_acc32 [4]
 4-byte array used for the 32-bit sequence number calculations.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void uip_add32 ( u8_t *  op32,
u16_t  op16
) 
+
+ + + + + +
+   + + +

+Carry out a 32-bit addition. +

+Because not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.

+

Note:
The 32-bit integer pointed to by the op32 parameter and the result in the uip_acc32 variable are in network byte order (big endian).
+
Parameters:
+ + + +
op32 A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian).
op16 A 16-bit integer in host byte order.
+
+ +

+Definition at line 249 of file uip.c. +

+Referenced by uip_split_output().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
u16_t uip_chksum ( u16_t *  buf,
u16_t  len
) 
+
+ + + + + +
+   + + +

+Calculate the Internet checksum over a buffer. +

+The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.

+See RFC1071.

+

Note:
This function is not called in the current version of uIP, but future versions might make use of it.
+
Parameters:
+ + + +
buf A pointer to the buffer over which the checksum is to be computed.
len The length of the buffer over which the checksum is to be computed.
+
+
Returns:
The Internet checksum of the buffer.
+
+

+ + + + +
+ + + + + + + + + +
u16_t uip_ipchksum ( void   ) 
+
+ + + + + +
+   + + +

+Calculate the IP header checksum of the packet header in uip_buf. +

+The IP header checksum is the Internet checksum of the 20 bytes of the IP header.

+

Returns:
The IP header checksum of the IP header in the uip_buf buffer.
+
+

+ + + + +
+ + + + + + + + + +
u16_t uip_tcpchksum ( void   ) 
+
+ + + + + +
+   + + +

+Calculate the TCP checksum of the packet in uip_buf and uip_appdata. +

+The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.

+

Note:
The uip_appdata pointer that points to the packet data may point anywhere in memory, so it is not possible to simply calculate the Internet checksum of the contents of the uip_buf buffer.
+
Returns:
The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata.
+
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00152.html b/components/net/uip/doc/html/a00152.html new file mode 100644 index 0000000000..b44513c477 --- /dev/null +++ b/components/net/uip/doc/html/a00152.html @@ -0,0 +1,205 @@ + + +uIP 1.0: uIP Address Resolution Protocol + + + + + +

uIP Address Resolution Protocol
+ +[The uIP TCP/IP stack] +


Detailed Description

+The Address Resolution Protocol ARP is used for mapping between IP addresses and link level addresses such as the Ethernet MAC addresses. +

+ARP uses broadcast queries to ask for the link level address of a known IP address and the host which is configured with the IP address for which the query was meant, will respond with its link level address.

+

Note:
This ARP implementation only supports Ethernet.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  uip_arp.h
 Macros and definitions for the ARP module.
file  uip_arp.c
 Implementation of the ARP Address Resolution Protocol.

Data Structures

struct  uip_eth_hdr
 The Ethernet header. More...

Defines

+#define UIP_ETHTYPE_ARP   0x0806
+#define UIP_ETHTYPE_IP   0x0800
+#define UIP_ETHTYPE_IP6   0x86dd
+#define uip_arp_ipin()
+#define ARP_REQUEST   1
+#define ARP_REPLY   2
+#define ARP_HWTYPE_ETH   1
+#define BUF   ((struct arp_hdr *)&uip_buf[0])
+#define IPBUF   ((struct ethip_hdr *)&uip_buf[0])

Functions

+void uip_arp_init (void)
 Initialize the ARP module.
void uip_arp_arpin (void)
 ARP processing for incoming ARP packets.
void uip_arp_out (void)
 Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request.
void uip_arp_timer (void)
 Periodic ARP processing function.

Variables

+uip_eth_addr uip_ethaddr
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void uip_arp_arpin ( void   ) 
+
+ + + + + +
+   + + +

+ARP processing for incoming ARP packets. +

+This function should be called by the device driver when an ARP packet has been received. The function will act differently depending on the ARP packet type: if it is a reply for a request that we previously sent out, the ARP cache will be filled in with the values from the ARP reply. If the incoming ARP packet is an ARP request for our IP address, an ARP reply packet is created and put into the uip_buf[] buffer.

+When the function returns, the value of the global variable uip_len indicates whether the device driver should send out a packet or not. If uip_len is zero, no packet should be sent. If uip_len is non-zero, it contains the length of the outbound packet that is present in the uip_buf[] buffer.

+This function expects an ARP packet with a prepended Ethernet header in the uip_buf[] buffer, and the length of the packet in the global variable uip_len.

Examples:
+example-mainloop-with-arp.c.
+

+Definition at line 278 of file uip_arp.c. +

+References uip_eth_addr::addr, ARP_REPLY, ARP_REQUEST, BUF, HTONS, uip_ethaddr, UIP_ETHTYPE_ARP, uip_hostaddr, uip_ipaddr_cmp, and uip_len.

+

+ + + + +
+ + + + + + + + + +
void uip_arp_out ( void   ) 
+
+ + + + + +
+   + + +

+Prepend Ethernet header to an outbound IP packet and see if we need to send out an ARP request. +

+This function should be called before sending out an IP packet. The function checks the destination IP address of the IP packet to see what Ethernet MAC address that should be used as a destination MAC address on the Ethernet.

+If the destination IP address is in the local network (determined by logical ANDing of netmask and our IP address), the function checks the ARP cache to see if an entry for the destination IP address is found. If so, an Ethernet header is prepended and the function returns. If no ARP cache entry is found for the destination IP address, the packet in the uip_buf[] is replaced by an ARP request packet for the IP address. The IP packet is dropped and it is assumed that they higher level protocols (e.g., TCP) eventually will retransmit the dropped packet.

+If the destination IP address is not on the local network, the IP address of the default router is used instead.

+When the function returns, a packet is present in the uip_buf[] buffer, and the length of the packet is in the global variable uip_len.

Examples:
+example-mainloop-with-arp.c.
+

+Definition at line 354 of file uip_arp.c. +

+References uip_eth_addr::addr, IPBUF, UIP_ARPTAB_SIZE, uip_draddr, uip_hostaddr, uip_ipaddr_cmp, uip_ipaddr_copy, and uip_ipaddr_maskcmp.

+

+ + + + +
+ + + + + + + + + +
void uip_arp_timer ( void   ) 
+
+ + + + + +
+   + + +

+Periodic ARP processing function. +

+This function performs periodic timer processing in the ARP module and should be called at regular intervals. The recommended interval is 10 seconds between the calls.

Examples:
+example-mainloop-with-arp.c.
+

+Definition at line 142 of file uip_arp.c. +

+References UIP_ARP_MAXAGE, and UIP_ARPTAB_SIZE.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00153.html b/components/net/uip/doc/html/a00153.html new file mode 100644 index 0000000000..e303995319 --- /dev/null +++ b/components/net/uip/doc/html/a00153.html @@ -0,0 +1,1059 @@ + + +uIP 1.0: Configuration options for uIP + + + + + +

Configuration options for uIP


Detailed Description

+uIP is configured using the per-project configuration file uipopt.h. +

+This file contains all compile-time options for uIP and should be tweaked to match each specific project. The uIP distribution contains a documented example "uipopt.h" that can be copied and modified for each project.

+

Note:
Most of the configuration options in the uipopt.h should not be changed, but rather the per-project uip-conf.h file.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  uip-conf.h
 An example uIP configuration file.
file  uipopt.h
 Configuration options for uIP.

Project-specific configuration options

uIP has a number of configuration options that can be overridden for each project. These are kept in a project-specific uip-conf.h file and all configuration names have the prefix UIP_CONF.

+#define UIP_CONF_MAX_CONNECTIONS
 Maximum number of TCP connections.
+#define UIP_CONF_MAX_LISTENPORTS
 Maximum number of listening TCP ports.
+#define UIP_CONF_BUFFER_SIZE
 uIP buffer size.
+#define UIP_CONF_BYTE_ORDER
 CPU byte order.
+#define UIP_CONF_LOGGING
 Logging on or off.
+#define UIP_CONF_UDP
 UDP support on or off.
+#define UIP_CONF_UDP_CHECKSUMS
 UDP checksums on or off.
+#define UIP_CONF_STATISTICS
 uIP statistics on or off
typedef uint8_t u8_t
 8 bit datatype
typedef uint16_t u16_t
 16 bit datatype
typedef unsigned short uip_stats_t
 Statistics datatype.

Static configuration options

These configuration options can be used for setting the IP address settings statically, but only if UIP_FIXEDADDR is set to 1. The configuration options for a specific node includes IP address, netmask and default router as well as the Ethernet address. The netmask, default router and Ethernet address are appliciable only if uIP should be run over Ethernet.

+All of these should be changed to suit your project.

#define UIP_FIXEDADDR
 Determines if uIP should use a fixed IP address or not.
#define UIP_PINGADDRCONF
 Ping IP address asignment.
#define UIP_FIXEDETHADDR
 Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not.

IP configuration options

#define UIP_TTL   64
 The IP TTL (time to live) of IP packets sent by uIP.
#define UIP_REASSEMBLY
 Turn on support for IP packet reassembly.
+#define UIP_REASS_MAXAGE   40
 The maximum time an IP fragment should wait in the reassembly buffer before it is dropped.

UDP configuration options

+#define UIP_UDP
 Toggles wether UDP support should be compiled in or not.
#define UIP_UDP_CHECKSUMS
 Toggles if UDP checksums should be used or not.
+#define UIP_UDP_CONNS
 The maximum amount of concurrent UDP connections.

TCP configuration options

#define UIP_ACTIVE_OPEN
 Determines if support for opening connections from uIP should be compiled in.
#define UIP_CONNS
 The maximum number of simultaneously open TCP connections.
#define UIP_LISTENPORTS
 The maximum number of simultaneously listening TCP ports.
#define UIP_URGDATA
 Determines if support for TCP urgent data notification should be compiled in.
#define UIP_RTO   3
 The initial retransmission timeout counted in timer pulses.
#define UIP_MAXRTX   8
 The maximum number of times a segment should be retransmitted before the connection should be aborted.
#define UIP_MAXSYNRTX   5
 The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful.
#define UIP_TCP_MSS   (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
 The TCP maximum segment size.
#define UIP_RECEIVE_WINDOW
 The size of the advertised receiver's window.
#define UIP_TIME_WAIT_TIMEOUT   120
 How long a connection should stay in the TIME_WAIT state.

ARP configuration options

#define UIP_ARPTAB_SIZE
 The size of the ARP table.
#define UIP_ARP_MAXAGE   120
 The maxium age of ARP table entries measured in 10ths of seconds.

General configuration options

#define UIP_BUFSIZE
 The size of the uIP packet buffer.
#define UIP_STATISTICS
 Determines if statistics support should be compiled in.
#define UIP_LOGGING
 Determines if logging of certain events should be compiled in.
#define UIP_BROADCAST
 Broadcast support.
#define UIP_LLH_LEN
 The link level header length.
void uip_log (char *msg)
 Print out a uIP log message.

CPU architecture configuration

The CPU architecture configuration is where the endianess of the CPU on which uIP is to be run is specified. Most CPUs today are little endian, and the most notable exception are the Motorolas which are big endian. The BYTE_ORDER macro should be changed to reflect the CPU architecture on which uIP is to be run.

#define UIP_BYTE_ORDER
 The byte order of the CPU architecture on which uIP is to be run.

Appication specific configurations

An uIP application is implemented using a single application function that is called by uIP whenever a TCP/IP event occurs. The name of this function must be registered with uIP at compile time using the UIP_APPCALL definition.

+uIP applications can store the application state within the uip_conn structure by specifying the type of the application structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.

+The file containing the definitions must be included in the uipopt.h file.

+The following example illustrates how this can look.

void httpd_appcall(void);
+#define UIP_APPCALL     httpd_appcall
+
+struct httpd_state {
+  u8_t state;
+  u16_t count;
+  char *dataptr;
+  char *script;
+};
+typedef struct httpd_state uip_tcp_appstate_t
+


+#define UIP_APPCALL   smtp_appcall
 The name of the application function that uIP should call in response to TCP/IP events.
typedef smtp_state uip_tcp_appstate_t
 The type of the application state that is to be stored in the uip_conn structure.
typedef int uip_udp_appstate_t
 The type of the application state that is to be stored in the uip_conn structure.

Defines

+#define UIP_LITTLE_ENDIAN   3412
+#define UIP_BIG_ENDIAN   1234
+


Define Documentation

+

+ + + + +
+ + + + +
#define UIP_ACTIVE_OPEN
+
+ + + + + +
+   + + +

+Determines if support for opening connections from uIP should be compiled in. +

+If the applications that are running on top of uIP for this project do not need to open outgoing TCP connections, this configration option can be turned off to reduce the code size of uIP. +

+Definition at line 233 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_ARP_MAXAGE   120
+
+ + + + + +
+   + + +

+The maxium age of ARP table entries measured in 10ths of seconds. +

+An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD default). +

+Definition at line 358 of file uipopt.h. +

+Referenced by uip_arp_timer().

+

+ + + + +
+ + + + +
#define UIP_ARPTAB_SIZE
+
+ + + + + +
+   + + +

+The size of the ARP table. +

+This option should be set to a larger value if this uIP node will have many connections from the local network. +

+Definition at line 349 of file uipopt.h. +

+Referenced by uip_arp_init(), uip_arp_out(), and uip_arp_timer().

+

+ + + + +
+ + + + +
#define UIP_BROADCAST
+
+ + + + + +
+   + + +

+Broadcast support. +

+This flag configures IP broadcast support. This is useful only together with UDP. +

+Definition at line 423 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_BUFSIZE
+
+ + + + + +
+   + + +

+The size of the uIP packet buffer. +

+The uIP packet buffer should not be smaller than 60 bytes, and does not need to be larger than 1500 bytes. Lower size results in lower TCP throughput, larger size results in higher TCP throughput. +

+Definition at line 379 of file uipopt.h. +

+Referenced by uip_split_output().

+

+ + + + +
+ + + + +
#define UIP_BYTE_ORDER
+
+ + + + + +
+   + + +

+The byte order of the CPU architecture on which uIP is to be run. +

+This option can be either BIG_ENDIAN (Motorola byte order) or LITTLE_ENDIAN (Intel byte order). +

+Definition at line 475 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_CONNS
+
+ + + + + +
+   + + +

+The maximum number of simultaneously open TCP connections. +

+Since the TCP connections are statically allocated, turning this configuration knob down results in less RAM used. Each TCP connection requires approximatly 30 bytes of memory.

Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 245 of file uipopt.h. +

+Referenced by uip_connect().

+

+ + + + +
+ + + + +
#define UIP_FIXEDADDR
+
+ + + + + +
+   + + +

+Determines if uIP should use a fixed IP address or not. +

+If uIP should use a fixed IP address, the settings are set in the uipopt.h file. If not, the macros uip_sethostaddr(), uip_setdraddr() and uip_setnetmask() should be used instead. +

+Definition at line 97 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_FIXEDETHADDR
+
+ + + + + +
+   + + +

+Specifies if the uIP ARP module should be compiled with a fixed Ethernet MAC address or not. +

+If this configuration option is 0, the macro uip_setethaddr() can be used to specify the Ethernet address at run-time. +

+Definition at line 127 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_LISTENPORTS
+
+ + + + + +
+   + + +

+The maximum number of simultaneously listening TCP ports. +

+Each listening TCP port requires 2 bytes of memory. +

+Definition at line 259 of file uipopt.h. +

+Referenced by uip_init(), uip_listen(), and uip_unlisten().

+

+ + + + +
+ + + + +
#define UIP_LLH_LEN
+
+ + + + + +
+   + + +

+The link level header length. +

+This is the offset into the uip_buf where the IP header can be found. For Ethernet, this should be set to 14. For SLIP, this should be set to 0. +

+Definition at line 448 of file uipopt.h. +

+Referenced by uip_ipchksum(), uip_process(), and uip_split_output().

+

+ + + + +
+ + + + +
#define UIP_LOGGING
+
+ + + + + +
+   + + +

+Determines if logging of certain events should be compiled in. +

+This is useful mostly for debugging. The function uip_log() must be implemented to suit the architecture of the project, if logging is turned on. +

+Definition at line 408 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_MAXRTX   8
+
+ + + + + +
+   + + +

+The maximum number of times a segment should be retransmitted before the connection should be aborted. +

+This should not be changed. +

+Definition at line 288 of file uipopt.h. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
#define UIP_MAXSYNRTX   5
+
+ + + + + +
+   + + +

+The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful. +

+This should not need to be changed. +

+Definition at line 297 of file uipopt.h. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
#define UIP_PINGADDRCONF
+
+ + + + + +
+   + + +

+Ping IP address asignment. +

+uIP uses a "ping" packets for setting its own IP address if this option is set. If so, uIP will start with an empty IP address and the destination IP address of the first incoming "ping" (ICMP echo) packet will be used for setting the hosts IP address.

+

Note:
This works only if UIP_FIXEDADDR is 0.
+ +

+Definition at line 114 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_REASSEMBLY
+
+ + + + + +
+   + + +

+Turn on support for IP packet reassembly. +

+uIP supports reassembly of fragmented IP packets. This features requires an additonal amount of RAM to hold the reassembly buffer and the reassembly code size is approximately 700 bytes. The reassembly buffer is of the same size as the uip_buf buffer (configured by UIP_BUFSIZE).

+

Note:
IP packet reassembly is not heavily tested.
+ +

+Definition at line 156 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_RECEIVE_WINDOW
+
+ + + + + +
+   + + +

+The size of the advertised receiver's window. +

+Should be set low (i.e., to the size of the uip_buf buffer) is the application is slow to process incoming data, or high (32768 bytes) if the application processes data quickly. +

+Definition at line 317 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_RTO   3
+
+ + + + + +
+   + + +

+The initial retransmission timeout counted in timer pulses. +

+This should not be changed. +

+Definition at line 280 of file uipopt.h. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
#define UIP_STATISTICS
+
+ + + + + +
+   + + +

+Determines if statistics support should be compiled in. +

+The statistics is useful for debugging and to show the user. +

+Definition at line 393 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_TCP_MSS   (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
+
+ + + + + +
+   + + +

+The TCP maximum segment size. +

+This is should not be to set to more than UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. +

+Definition at line 305 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_TIME_WAIT_TIMEOUT   120
+
+ + + + + +
+   + + +

+How long a connection should stay in the TIME_WAIT state. +

+This configiration option has no real implication, and it should be left untouched. +

+Definition at line 328 of file uipopt.h. +

+Referenced by uip_process().

+

+ + + + +
+ + + + +
#define UIP_TTL   64
+
+ + + + + +
+   + + +

+The IP TTL (time to live) of IP packets sent by uIP. +

+This should normally not be changed. +

+Definition at line 141 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_UDP_CHECKSUMS
+
+ + + + + +
+   + + +

+Toggles if UDP checksums should be used or not. +

+

Note:
Support for UDP checksums is currently not included in uIP, so this option has no function.
+ +

+Definition at line 195 of file uipopt.h.

+

+ + + + +
+ + + + +
#define UIP_URGDATA
+
+ + + + + +
+   + + +

+Determines if support for TCP urgent data notification should be compiled in. +

+Urgent data (out-of-band data) is a rarely used TCP feature that very seldom would be required. +

+Definition at line 273 of file uipopt.h.

+


Typedef Documentation

+

+ + + + +
+ + + + +
typedef uint16_t u16_t
+
+ + + + + +
+   + + +

+16 bit datatype +

+This typedef defines the 16-bit type used throughout uIP.

Examples:
+dhcpc.c, dhcpc.h, resolv.c, resolv.h, smtp.c, smtp.h, telnetd.c, and uip-conf.h.
+

+Definition at line 76 of file uip-conf.h.

+

+ + + + +
+ + + + +
typedef uint8_t u8_t
+
+ + + + + +
+   + + +

+8 bit datatype +

+This typedef defines the 8-bit type used throughout uIP.

Examples:
+dhcpc.c, dhcpc.h, resolv.c, smtp.h, telnetd.c, telnetd.h, and uip-conf.h.
+

+Definition at line 67 of file uip-conf.h.

+

+ + + + +
+ + + + +
typedef unsigned short uip_stats_t
+
+ + + + + +
+   + + +

+Statistics datatype. +

+This typedef defines the dataype used for keeping statistics in uIP. +

+Definition at line 86 of file uip-conf.h.

+

+ + + + +
+ + + + +
typedef uip_tcp_appstate_t
+
+ + + + + +
+   + + +

+The type of the application state that is to be stored in the uip_conn structure. +

+This usually is typedef:ed to a struct holding application state information.

Examples:
+smtp.h, telnetd.h, and webclient.h.
+

+Definition at line 98 of file smtp.h.

+

+ + + + +
+ + + + +
typedef uip_udp_appstate_t
+
+ + + + + +
+   + + +

+The type of the application state that is to be stored in the uip_conn structure. +

+This usually is typedef:ed to a struct holding application state information.

Examples:
+dhcpc.h.
+

+Definition at line 47 of file resolv.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void uip_log ( char *  msg  ) 
+
+ + + + + +
+   + + +

+Print out a uIP log message. +

+This function must be implemented by the module that uses uIP, and is called by uIP whenever a log message is generated.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00154.html b/components/net/uip/doc/html/a00154.html new file mode 100644 index 0000000000..8c2a7bf27b --- /dev/null +++ b/components/net/uip/doc/html/a00154.html @@ -0,0 +1,79 @@ + + +uIP 1.0: uIP TCP throughput booster hack + + + + + +

uIP TCP throughput booster hack
+ +[The uIP TCP/IP stack] +


Detailed Description

+The basic uIP TCP implementation only allows each TCP connection to have a single TCP segment in flight at any given time. +

+Because of the delayed ACK algorithm employed by most TCP receivers, uIP's limit on the amount of in-flight TCP segments seriously reduces the maximum achievable throughput for sending data from uIP.

+The uip-split module is a hack which tries to remedy this situation. By splitting maximum sized outgoing TCP segments into two, the delayed ACK algorithm is not invoked at TCP receivers. This improves the throughput when sending data from uIP by orders of magnitude.

+The uip-split module uses the uip-fw module (uIP IP packet forwarding) for sending packets. Therefore, the uip-fw module must be set up with the appropriate network interfaces for this module to work. +

+ + + + + + + +

+

+ + + +

Files

file  uip-split.h
 Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation.

Functions

void uip_split_output (void)
 Handle outgoing packets.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void uip_split_output ( void   ) 
+
+ + + + + +
+   + + +

+Handle outgoing packets. +

+This function inspects an outgoing packet in the uip_buf buffer and sends it out using the uip_fw_output() function. If the packet is a full-sized TCP segment it will be split into two segments and transmitted separately. This function should be called instead of the actual device driver output function, or the uip_fw_output() function.

+The headers of the outgoing packet is assumed to be in the uip_buf buffer and the payload is assumed to be wherever uip_appdata points. The length of the outgoing packet is assumed to be in the uip_len variable. +

+Definition at line 49 of file uip-split.c. +

+References BUF, uip_acc32, uip_add32(), uip_appdata, UIP_BUFSIZE, uip_ipchksum(), UIP_IPH_LEN, uip_len, UIP_LLH_LEN, UIP_PROTO_TCP, uip_tcpchksum(), and UIP_TCPIP_HLEN.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00155.html b/components/net/uip/doc/html/a00155.html new file mode 100644 index 0000000000..157811a53c --- /dev/null +++ b/components/net/uip/doc/html/a00155.html @@ -0,0 +1,82 @@ + + +uIP 1.0: Local continuations + + + + + +

Local continuations
+ +[Protothreads] +


Detailed Description

+Local continuations form the basis for implementing protothreads. +

+A local continuation can be set in a specific function to capture the state of the function. After a local continuation has been set can be resumed in order to restore the state of the function at the point where the local continuation was set. +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + +

Files

file  lc.h
 Local continuations.
file  lc-switch.h
 Implementation of local continuations based on switch() statment.
file  lc-addrlabels.h
 Implementation of local continuations based on the "Labels as values" feature of gcc.

Defines

+#define __LC_SWTICH_H__
+#define LC_INIT(s)   s = 0;
+#define LC_RESUME(s)   switch(s) { case 0:
+#define LC_SET(s)   s = __LINE__; case __LINE__:
+#define LC_END(s)   }
+#define LC_INIT(s)   s = NULL
+#define LC_RESUME(s)
+#define LC_SET(s)   do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)
+#define LC_END(s)

Typedefs

+typedef unsigned short lc_t
+typedef void * lc_t
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00156.html b/components/net/uip/doc/html/a00156.html new file mode 100644 index 0000000000..9df0786dfd --- /dev/null +++ b/components/net/uip/doc/html/a00156.html @@ -0,0 +1,237 @@ + + +uIP 1.0: Timer library + + + + + +

Timer library


Detailed Description

+The timer library provides functions for setting, resetting and restarting timers, and for checking if a timer has expired. +

+An application must "manually" check if its timers have expired; this is not done automatically.

+A timer is declared as a struct timer and all access to the timer is made by a pointer to the declared timer.

+

Note:
The timer library uses the Clock library to measure time. Intervals should be specified in the format used by the clock library.
+ +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + +

Files

file  timer.h
 Timer library header file.
file  timer.c
 Timer library implementation.

Data Structures

struct  timer
 A timer. More...

Functions

void timer_set (struct timer *t, clock_time_t interval)
 Set a timer.
void timer_reset (struct timer *t)
 Reset the timer with the same interval.
void timer_restart (struct timer *t)
 Restart the timer from the current point in time.
int timer_expired (struct timer *t)
 Check if a timer has expired.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
int timer_expired ( struct timer *  t  ) 
+
+ + + + + +
+   + + +

+Check if a timer has expired. +

+This function tests if a timer has expired and returns true or false depending on its status.

+

Parameters:
+ + +
t A pointer to the timer
+
+
Returns:
Non-zero if the timer has expired, zero otherwise.
+
Examples:
+dhcpc.c, example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 121 of file timer.c. +

+References clock_time(), interval, and start.

+

+ + + + +
+ + + + + + + + + +
void timer_reset ( struct timer *  t  ) 
+
+ + + + + +
+   + + +

+Reset the timer with the same interval. +

+This function resets the timer with the same interval that was given to the timer_set() function. The start point of the interval is the exact time that the timer last expired. Therefore, this function will cause the timer to be stable over time, unlike the timer_rester() function.

+

Parameters:
+ + +
t A pointer to the timer.
+
+
See also:
timer_restart()
+
Examples:
+example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 84 of file timer.c. +

+References interval, and start.

+

+ + + + +
+ + + + + + + + + +
void timer_restart ( struct timer *  t  ) 
+
+ + + + + +
+   + + +

+Restart the timer from the current point in time. +

+This function restarts a timer with the same interval that was given to the timer_set() function. The timer will start at the current time.

+

Note:
A periodic timer will drift if this function is used to reset it. For preioric timers, use the timer_reset() function instead.
+
Parameters:
+ + +
t A pointer to the timer.
+
+
See also:
timer_reset()
+ +

+Definition at line 104 of file timer.c. +

+References clock_time(), and start.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void timer_set ( struct timer *  t,
clock_time_t  interval
) 
+
+ + + + + +
+   + + +

+Set a timer. +

+This function is used to set a timer for a time sometime in the future. The function timer_expired() will evaluate to true after the timer has expired.

+

Parameters:
+ + + +
t A pointer to the timer
interval The interval before the timer expires.
+
+
Examples:
+dhcpc.c, example-mainloop-with-arp.c, and example-mainloop-without-arp.c.
+

+Definition at line 64 of file timer.c. +

+References clock_time(), interval, and start.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00157.html b/components/net/uip/doc/html/a00157.html new file mode 100644 index 0000000000..a89ac8d5a1 --- /dev/null +++ b/components/net/uip/doc/html/a00157.html @@ -0,0 +1,108 @@ + + +uIP 1.0: Clock interface + + + + + +

Clock interface


Detailed Description

+The clock interface is the interface between the timer library and the platform specific clock functionality. +

+The clock interface must be implemented for each platform that uses the timer library.

+The clock interface does only one this: it measures time. The clock interface provides a macro, CLOCK_SECOND, which corresponds to one second of system time.

+

See also:
Timer library
+ +

+ + + + + + + + + + + + + +

Defines

+#define CLOCK_SECOND
 A second, measured in system clock time.

Functions

void clock_init (void)
 Initialize the clock library.
clock_time_t clock_time (void)
 Get the current clock time.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void clock_init ( void   ) 
+
+ + + + + +
+   + + +

+Initialize the clock library. +

+This function initializes the clock library and should be called from the main() function of the system.

+

+ + + + +
+ + + + + + + + + +
clock_time_t clock_time ( void   ) 
+
+ + + + + +
+   + + +

+Get the current clock time. +

+This function returns the current system clock time.

+

Returns:
The current clock time, measured in system ticks.
+ +

+Referenced by timer_expired(), timer_restart(), and timer_set().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00158.html b/components/net/uip/doc/html/a00158.html new file mode 100644 index 0000000000..4d56cceeab --- /dev/null +++ b/components/net/uip/doc/html/a00158.html @@ -0,0 +1,693 @@ + + +uIP 1.0: Protosockets library + + + + + +

Protosockets library


Detailed Description

+The protosocket library provides an interface to the uIP stack that is similar to the traditional BSD socket interface. +

+Unlike programs written for the ordinary uIP event-driven interface, programs written with the protosocket library are executed in a sequential fashion and does not have to be implemented as explicit state machines.

+Protosockets only work with TCP connections.

+The protosocket library uses Protothreads protothreads to provide sequential control flow. This makes the protosockets lightweight in terms of memory, but also means that protosockets inherits the functional limitations of protothreads. Each protosocket lives only within a single function. Automatic variables (stack variables) are not retained across a protosocket library function call.

+

Note:
Because the protosocket library uses protothreads, local variables will not always be saved across a call to a protosocket library function. It is therefore advised that local variables are used with extreme care.
+The protosocket library provides functions for sending data without having to deal with retransmissions and acknowledgements, as well as functions for reading data without having to deal with data being split across more than one TCP segment.

+Because each protosocket runs as a protothread, the protosocket has to be started with a call to PSOCK_BEGIN() at the start of the function in which the protosocket is used. Similarly, the protosocket protothread can be terminated by a call to PSOCK_EXIT(). +

+ + + + + + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  psock.h
 Protosocket library header file.

Data Structures

struct  psock_buf
struct  psock
 The representation of a protosocket. More...

Defines

#define PSOCK_INIT(psock, buffer, buffersize)
 Initialize a protosocket.
#define PSOCK_BEGIN(psock)
 Start the protosocket protothread in a function.
#define PSOCK_SEND(psock, data, datalen)
 Send data.
#define PSOCK_SEND_STR(psock, str)
 Send a null-terminated string.
#define PSOCK_GENERATOR_SEND(psock, generator, arg)
 Generate data with a function and send it.
#define PSOCK_CLOSE(psock)
 Close a protosocket.
#define PSOCK_READBUF(psock)
 Read data until the buffer is full.
#define PSOCK_READTO(psock, c)
 Read data up to a specified character.
#define PSOCK_DATALEN(psock)
 The length of the data that was previously read.
#define PSOCK_EXIT(psock)
 Exit the protosocket's protothread.
#define PSOCK_CLOSE_EXIT(psock)
 Close a protosocket and exit the protosocket's protothread.
#define PSOCK_END(psock)
 Declare the end of a protosocket's protothread.
#define PSOCK_NEWDATA(psock)
 Check if new data has arrived on a protosocket.
#define PSOCK_WAIT_UNTIL(psock, condition)
 Wait until a condition is true.
+#define PSOCK_WAIT_THREAD(psock, condition)   PT_WAIT_THREAD(&((psock)->pt), (condition))

Functions

+u16_t psock_datalen (struct psock *psock)
+char psock_newdata (struct psock *s)
+


Define Documentation

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_BEGIN ( psock   ) 
+
+ + + + + +
+   + + +

+Start the protosocket protothread in a function. +

+This macro starts the protothread associated with the protosocket and must come before other protosocket calls in the function it is used.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket to be started.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 158 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_CLOSE ( psock   ) 
+
+ + + + + +
+   + + +

+Close a protosocket. +

+This macro closes a protosocket and can only be called from within the protothread in which the protosocket lives.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket that is to be closed.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 235 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_CLOSE_EXIT ( psock   ) 
+
+ + + + + +
+   + + +

+Close a protosocket and exit the protosocket's protothread. +

+This macro closes a protosocket and exits the protosocket's protothread.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket.
+
+ +

+Definition at line 308 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_DATALEN ( psock   ) 
+
+ + + + + +
+   + + +

+The length of the data that was previously read. +

+This macro returns the length of the data that was previously read using PSOCK_READTO() or PSOCK_READ().

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket holding the data.
+
+ +

+Definition at line 281 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_END ( psock   ) 
+
+ + + + + +
+   + + +

+Declare the end of a protosocket's protothread. +

+This macro is used for declaring that the protosocket's protothread ends. It must always be used together with a matching PSOCK_BEGIN() macro.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 325 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_EXIT ( psock   ) 
+
+ + + + + +
+   + + +

+Exit the protosocket's protothread. +

+This macro terminates the protothread of the protosocket and should almost always be used in conjunction with PSOCK_CLOSE().

+

See also:
PSOCK_CLOSE_EXIT()
+
Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket.
+
+
Examples:
+smtp.c.
+

+Definition at line 297 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define PSOCK_GENERATOR_SEND ( psock,
generator,
arg   ) 
+
+ + + + + +
+   + + +

+Generate data with a function and send it. +

+

Parameters:
+ + + + +
psock Pointer to the protosocket.
generator Pointer to the generator function
arg Argument to the generator function
+
+This function generates data and sends it over the protosocket. This can be used to dynamically generate data for a transmission, instead of generating the data in a buffer beforehand. This function reduces the need for buffer memory. The generator function is implemented by the application, and a pointer to the function is given as an argument with the call to PSOCK_GENERATOR_SEND().

+The generator function should place the generated data directly in the uip_appdata buffer, and return the length of the generated data. The generator function is called by the protosocket layer when the data first is sent, and once for every retransmission that is needed. +

+Definition at line 219 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define PSOCK_INIT ( psock,
buffer,
buffersize   ) 
+
+ + + + + +
+   + + +

+Initialize a protosocket. +

+This macro initializes a protosocket and must be called before the protosocket is used. The initialization also specifies the input buffer for the protosocket.

+

Parameters:
+ + + + +
psock (struct psock *) A pointer to the protosocket to be initialized
buffer (char *) A pointer to the input buffer for the protosocket.
buffersize (unsigned int) The size of the input buffer.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 144 of file psock.h. +

+Referenced by hello_world_appcall(), httpd_appcall(), and smtp_send().

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_NEWDATA ( psock   ) 
+
+ + + + + +
+   + + +

+Check if new data has arrived on a protosocket. +

+This macro is used in conjunction with the PSOCK_WAIT_UNTIL() macro to check if data has arrived on a protosocket.

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket.
+
+ +

+Definition at line 339 of file psock.h.

+

+ + + + +
+ + + + + + + + + +
#define PSOCK_READBUF ( psock   ) 
+
+ + + + + +
+   + + +

+Read data until the buffer is full. +

+This macro will block waiting for data and read the data into the input buffer specified with the call to PSOCK_INIT(). Data is read until the buffer is full..

+

Parameters:
+ + +
psock (struct psock *) A pointer to the protosocket from which data should be read.
+
+ +

+Definition at line 250 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PSOCK_READTO ( psock,
c   ) 
+
+ + + + + +
+   + + +

+Read data up to a specified character. +

+This macro will block waiting for data and read the data into the input buffer specified with the call to PSOCK_INIT(). Data is only read until the specifieed character appears in the data stream.

+

Parameters:
+ + + +
psock (struct psock *) A pointer to the protosocket from which data should be read.
c (char) The character at which to stop reading.
+
+
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 268 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define PSOCK_SEND ( psock,
data,
datalen   ) 
+
+ + + + + +
+   + + +

+Send data. +

+This macro sends data over a protosocket. The protosocket protothread blocks until all data has been sent and is known to have been received by the remote end of the TCP connection.

+

Parameters:
+ + + + +
psock (struct psock *) A pointer to the protosocket over which data is to be sent.
data (char *) A pointer to the data that is to be sent.
datalen (unsigned int) The length of the data that is to be sent.
+
+
Examples:
+smtp.c.
+

+Definition at line 178 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PSOCK_SEND_STR ( psock,
str   ) 
+
+ + + + + +
+   + + +

+Send a null-terminated string. +

+

Parameters:
+ + + +
psock Pointer to the protosocket.
str The string to be sent.
+
+This function sends a null-terminated string over the protosocket.
Examples:
+hello-world.c, and smtp.c.
+

+Definition at line 191 of file psock.h.

+

+ + + + +
+ + + + + + + + + + + + +
#define PSOCK_WAIT_UNTIL ( psock,
condition   ) 
+
+ + + + + +
+   + + +

+Wait until a condition is true. +

+This macro blocks the protothread until the specified condition is true. The macro PSOCK_NEWDATA() can be used to check if new data arrives when the protosocket is waiting.

+Typically, this macro is used as follows:

+

 PT_THREAD(thread(struct psock *s, struct timer *t))
+ {
+   PSOCK_BEGIN(s);
+
+   PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t));
+   
+   if(PSOCK_NEWDATA(s)) {
+     PSOCK_READTO(s, '\n');
+   } else {
+     handle_timed_out(s);
+   }
+   
+   PSOCK_END(s);
+ }
+

+

Parameters:
+ + + +
psock (struct psock *) A pointer to the protosocket.
condition The condition to wait for.
+
+ +

+Definition at line 372 of file psock.h.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00159.html b/components/net/uip/doc/html/a00159.html new file mode 100644 index 0000000000..3564fa91a1 --- /dev/null +++ b/components/net/uip/doc/html/a00159.html @@ -0,0 +1,251 @@ + + +uIP 1.0: Memory block management functions + + + + + +

Memory block management functions


Detailed Description

+The memory block allocation routines provide a simple yet powerful set of functions for managing a set of memory blocks of fixed size. +

+A set of memory blocks is statically declared with the MEMB() macro. Memory blocks are allocated from the declared memory by the memb_alloc() function, and are deallocated with the memb_free() function.

+

Note:
Because of namespace clashes only one MEMB() can be declared per C module, and the name scope of a MEMB() memory block is local to each C module.
+The following example shows how to declare and use a memory block called "cmem" which has 8 chunks of memory with each memory chunk being 20 bytes large. +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + +

Files

file  memb.c
 Memory block allocation routines.
file  memb.h
 Memory block allocation routines.

Data Structures

struct  memb_blocks

Defines

+#define MEMB_CONCAT2(s1, s2)   s1##s2
+#define MEMB_CONCAT(s1, s2)   MEMB_CONCAT2(s1, s2)
#define MEMB(name, structure, num)
 Declare a memory block.

Functions

void memb_init (struct memb_blocks *m)
 Initialize a memory block that was declared with MEMB().
void * memb_alloc (struct memb_blocks *m)
 Allocate a memory block from a block of memory declared with MEMB().
char memb_free (struct memb_blocks *m, void *ptr)
 Deallocate a memory block from a memory block previously declared with MEMB().
+


Define Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define MEMB ( name,
structure,
num   ) 
+
+ + + + + +
+   + + +

+Value:

static char MEMB_CONCAT(name,_memb_count)[num]; \
+        static structure MEMB_CONCAT(name,_memb_mem)[num]; \
+        static struct memb_blocks name = {sizeof(structure), num, \
+                                          MEMB_CONCAT(name,_memb_count), \
+                                          (void *)MEMB_CONCAT(name,_memb_mem)}
+
Declare a memory block. +

+This macro is used to staticall declare a block of memory that can be used by the block allocation functions. The macro statically declares a C array with a size that matches the specified number of blocks and their individual sizes.

+Example:

MEMB(connections, sizeof(struct connection), 16);
+

+

Parameters:
+ + + + +
name The name of the memory block (later used with memb_init(), memb_alloc() and memb_free()).
size The size of each memory chunk, in bytes.
num The total number of memory chunks in the block.
+
+
Examples:
+telnetd.c.
+

+Definition at line 98 of file memb.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void * memb_alloc ( struct memb_blocks *  m  ) 
+
+ + + + + +
+   + + +

+Allocate a memory block from a block of memory declared with MEMB(). +

+

Parameters:
+ + +
m A memory block previosly declared with MEMB().
+
+
Examples:
+telnetd.c.
+

+Definition at line 59 of file memb.c. +

+References memb_blocks::count, memb_blocks::mem, memb_blocks::num, and memb_blocks::size.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
char memb_free ( struct memb_blocks *  m,
void *  ptr
) 
+
+ + + + + +
+   + + +

+Deallocate a memory block from a memory block previously declared with MEMB(). +

+

Parameters:
+ + + +
m m A memory block previosly declared with MEMB().
ptr A pointer to the memory block that is to be deallocated.
+
+
Returns:
The new reference count for the memory block (should be 0 if successfully deallocated) or -1 if the pointer "ptr" did not point to a legal memory block.
+
Examples:
+telnetd.c.
+

+Definition at line 79 of file memb.c. +

+References memb_blocks::count, memb_blocks::mem, and memb_blocks::size.

+

+ + + + +
+ + + + + + + + + +
void memb_init ( struct memb_blocks *  m  ) 
+
+ + + + + +
+   + + +

+Initialize a memory block that was declared with MEMB(). +

+

Parameters:
+ + +
m A memory block previosly declared with MEMB().
+
+
Examples:
+telnetd.c.
+

+Definition at line 52 of file memb.c. +

+References memb_blocks::count, memb_blocks::mem, memb_blocks::num, and memb_blocks::size.

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00160.html b/components/net/uip/doc/html/a00160.html new file mode 100644 index 0000000000..ffd42f9d8a --- /dev/null +++ b/components/net/uip/doc/html/a00160.html @@ -0,0 +1,284 @@ + + +uIP 1.0: DNS resolver + + + + + +

DNS resolver
+ +[Applications] +


Detailed Description

+The uIP DNS resolver functions are used to lookup a hostname and map it to a numerical IP address. +

+It maintains a list of resolved hostnames that can be queried with the resolv_lookup() function. New hostnames can be resolved using the resolv_query() function.

+When a hostname has been resolved (or found to be non-existant), the resolver code calls a callback function called resolv_found() that must be implemented by the module that uses the resolver. +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  resolv.h
 DNS resolver code header file.
file  resolv.c
 DNS host name to IP address resolver.

Defines

+#define UIP_UDP_APPCALL   resolv_appcall
+#define NULL   (void *)0
+#define MAX_RETRIES   8
+#define RESOLV_ENTRIES   4

Functions

+void resolv_appcall (void)
void resolv_found (char *name, u16_t *ipaddr)
 Callback function which is called when a hostname is found.
void resolv_conf (u16_t *dnsserver)
 Configure which DNS server to use for queries.
u16_t * resolv_getserver (void)
 Obtain the currently configured DNS server.
+void resolv_init (void)
 Initalize the resolver.
u16_t * resolv_lookup (char *name)
 Look up a hostname in the array of known hostnames.
void resolv_query (char *name)
 Queues a name so that a question for the name will be sent out.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void resolv_conf ( u16_t *  dnsserver  ) 
+
+ + + + + +
+   + + +

+Configure which DNS server to use for queries. +

+

Parameters:
+ + +
dnsserver A pointer to a 4-byte representation of the IP address of the DNS server to be configured.
+
+
Examples:
+resolv.c, and resolv.h.
+

+Definition at line 438 of file resolv.c. +

+References HTONS, NULL, uip_udp_new(), and uip_udp_remove.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void resolv_found ( char *  name,
u16_t *  ipaddr
) 
+
+ + + + + +
+   + + +

+Callback function which is called when a hostname is found. +

+This function must be implemented by the module that uses the DNS resolver. It is called when a hostname is found, or when a hostname was not found.

+

Parameters:
+ + + +
name A pointer to the name that was looked up.
ipaddr A pointer to a 4-byte array containing the IP address of the hostname, or NULL if the hostname could not be found.
+
+
Examples:
+resolv.c, and resolv.h.
+

+ + + + +
+ + + + + + + + + +
u16_t * resolv_getserver ( void   ) 
+
+ + + + + +
+   + + +

+Obtain the currently configured DNS server. +

+

Returns:
A pointer to a 4-byte representation of the IP address of the currently configured DNS server or NULL if no DNS server has been configured.
+
Examples:
+resolv.c, and resolv.h.
+

+Definition at line 422 of file resolv.c. +

+References NULL, and uip_udp_conn::ripaddr.

+

+ + + + +
+ + + + + + + + + +
u16_t * resolv_lookup ( char *  name  ) 
+
+ + + + + +
+   + + +

+Look up a hostname in the array of known hostnames. +

+

Note:
This function only looks in the internal array of known hostnames, it does not send out a query for the hostname if none was found. The function resolv_query() can be used to send a query for a hostname.
+
Returns:
A pointer to a 4-byte representation of the hostname's IP address, or NULL if the hostname was not found in the array of hostnames.
+
Examples:
+resolv.c, resolv.h, and webclient.c.
+

+Definition at line 396 of file resolv.c. +

+References RESOLV_ENTRIES, and STATE_DONE. +

+Referenced by webclient_appcall(), and webclient_get().

+

+ + + + +
+ + + + + + + + + +
void resolv_query ( char *  name  ) 
+
+ + + + + +
+   + + +

+Queues a name so that a question for the name will be sent out. +

+

Parameters:
+ + +
name The hostname that is to be queried.
+
+
Examples:
+resolv.c, resolv.h, and webclient.c.
+

+Definition at line 350 of file resolv.c. +

+References RESOLV_ENTRIES, and STATE_UNUSED. +

+Referenced by webclient_appcall().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00161.html b/components/net/uip/doc/html/a00161.html new file mode 100644 index 0000000000..16d6fbb919 --- /dev/null +++ b/components/net/uip/doc/html/a00161.html @@ -0,0 +1,257 @@ + + +uIP 1.0: SMTP E-mail sender + + + + + +

SMTP E-mail sender
+ +[Applications] +


Detailed Description

+The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is the standard way of sending and transfering e-mail on the Internet. +

+This simple example implementation is intended as an example of how to implement protocols in uIP, and is able to send out e-mail but has not been extensively tested. +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  smtp.h
 SMTP header file.
file  smtp.c
 SMTP example implementation.

Data Structures

struct  smtp_state

Defines

+#define SMTP_ERR_OK   0
 Error number that signifies a non-error condition.
+#define SMTP_SEND(to, cc, from, subject, msg)   smtp_send(to, cc, from, subject, msg, strlen(msg))
+#define ISO_nl   0x0a
+#define ISO_cr   0x0d
+#define ISO_period   0x2e
+#define ISO_2   0x32
+#define ISO_3   0x33
+#define ISO_4   0x34
+#define ISO_5   0x35

Functions

void smtp_done (unsigned char error)
 Callback function that is called when an e-mail transmission is done.
+void smtp_init (void)
+void smtp_appcall (void)
void smtp_configure (char *lhostname, void *server)
 Specificy an SMTP server and hostname.
unsigned char smtp_send (char *to, char *cc, char *from, char *subject, char *msg, u16_t msglen)
 Send an e-mail.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void smtp_configure ( char *  lhostname,
void *  server
) 
+
+ + + + + +
+   + + +

+Specificy an SMTP server and hostname. +

+This function is used to configure the SMTP module with an SMTP server and the hostname of the host.

+

Parameters:
+ + + +
lhostname The hostname of the uIP host.
server A pointer to a 4-byte array representing the IP address of the SMTP server to be configured.
+
+ +

+Definition at line 216 of file smtp.c. +

+References uip_ipaddr_copy.

+

+ + + + +
+ + + + + + + + + +
void smtp_done ( unsigned char  error  ) 
+
+ + + + + +
+   + + +

+Callback function that is called when an e-mail transmission is done. +

+This function must be implemented by the module that uses the SMTP module.

+

Parameters:
+ + +
error The number of the error if an error occured, or SMTP_ERR_OK.
+
+
Examples:
+smtp.c, and smtp.h.
+

+Referenced by smtp_appcall().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
unsigned char smtp_send ( char *  to,
char *  cc,
char *  from,
char *  subject,
char *  msg,
u16_t  msglen
) 
+
+ + + + + +
+   + + +

+Send an e-mail. +

+

Parameters:
+ + + + + + + +
to The e-mail address of the receiver of the e-mail.
cc The e-mail address of the CC: receivers of the e-mail.
from The e-mail address of the sender of the e-mail.
subject The subject of the e-mail.
msg The actual e-mail message.
msglen The length of the e-mail message.
+
+ +

+Definition at line 233 of file smtp.c. +

+References smtp_state::from, HTONS, smtp_state::msg, smtp_state::msglen, NULL, PSOCK_INIT, smtp_state::subject, smtp_state::to, and uip_connect().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00162.html b/components/net/uip/doc/html/a00162.html new file mode 100644 index 0000000000..8fada3bd13 --- /dev/null +++ b/components/net/uip/doc/html/a00162.html @@ -0,0 +1,56 @@ + + +uIP 1.0: Hello, world + + + + + +

Hello, world
+ +[Applications] +


Detailed Description

+A small example showing how to write applications with protosockets. +

+ +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + +

Files

file  hello-world.h
 Header file for an example of how to write uIP applications with protosockets.
file  hello-world.c
 An example of how to write uIP applications with protosockets.

Data Structures

struct  hello_world_state

Defines

+#define UIP_APPCALL   hello_world_appcall

Functions

+void hello_world_appcall (void)
+void hello_world_init (void)
+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00163.html b/components/net/uip/doc/html/a00163.html new file mode 100644 index 0000000000..96515e2f4a --- /dev/null +++ b/components/net/uip/doc/html/a00163.html @@ -0,0 +1,533 @@ + + +uIP 1.0: Web client + + + + + +

Web client
+ +[Applications] +


Detailed Description

+This example shows a HTTP client that is able to download web pages and files from web servers. +

+It requires a number of callback functions to be implemented by the module that utilizes the code: webclient_datahandler(), webclient_connected(), webclient_timedout(), webclient_aborted(), webclient_closed(). +

+ + + + + + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  webclient.h
 Header file for the HTTP client.
file  webclient.c
 Implementation of the HTTP client.

Data Structures

struct  webclient_state

Defines

+#define WEBCLIENT_CONF_MAX_URLLEN   100
+#define UIP_APPCALL   webclient_appcall
+#define WEBCLIENT_TIMEOUT   100
+#define WEBCLIENT_STATE_STATUSLINE   0
+#define WEBCLIENT_STATE_HEADERS   1
+#define WEBCLIENT_STATE_DATA   2
+#define WEBCLIENT_STATE_CLOSE   3
+#define HTTPFLAG_NONE   0
+#define HTTPFLAG_OK   1
+#define HTTPFLAG_MOVED   2
+#define HTTPFLAG_ERROR   3
+#define ISO_nl   0x0a
+#define ISO_cr   0x0d
+#define ISO_space   0x20

Typedefs

+typedef webclient_state uip_tcp_appstate_t

Functions

void webclient_datahandler (char *data, u16_t len)
 Callback function that is called from the webclient code when HTTP data has been received.
void webclient_connected (void)
 Callback function that is called from the webclient code when the HTTP connection has been connected to the web server.
void webclient_timedout (void)
 Callback function that is called from the webclient code if the HTTP connection to the web server has timed out.
void webclient_aborted (void)
 Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server.
void webclient_closed (void)
 Callback function that is called from the webclient code when the HTTP connection to the web server has been closed.
+void webclient_init (void)
 Initialize the webclient module.
unsigned char webclient_get (char *host, u16_t port, char *file)
 Open an HTTP connection to a web server and ask for a file using the GET method.
+void webclient_close (void)
 Close the currently open HTTP connection.
+void webclient_appcall (void)
char * webclient_mimetype (void)
 Obtain the MIME type of the current HTTP data stream.
char * webclient_filename (void)
 Obtain the filename of the current HTTP data stream.
char * webclient_hostname (void)
 Obtain the hostname of the current HTTP data stream.
unsigned short webclient_port (void)
 Obtain the port number of the current HTTP data stream.
+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void webclient_aborted ( void   ) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code if the HTTP connection to the web server has been aborted by the web server. +

+This function must be implemented by the module that uses the webclient code.

Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + +
void webclient_closed ( void   ) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code when the HTTP connection to the web server has been closed. +

+This function must be implemented by the module that uses the webclient code.

Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + +
void webclient_connected ( void   ) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code when the HTTP connection has been connected to the web server. +

+This function must be implemented by the module that uses the webclient code.

Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
void webclient_datahandler ( char *  data,
u16_t  len
) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code when HTTP data has been received. +

+This function must be implemented by the module that uses the webclient code. The function is called from the webclient module when HTTP data has been received. The function is not called when HTTP headers are received, only for the actual data.

+

Note:
This function is called many times, repetedly, when data is being received, and not once when all data has been received.
+
Parameters:
+ + + +
data A pointer to the data that has been received.
len The length of the data that has been received.
+
+
Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + +
char * webclient_filename ( void   ) 
+
+ + + + + +
+   + + +

+Obtain the filename of the current HTTP data stream. +

+The filename of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with webclient_get(). This function is used for obtaining the current filename.

+

Returns:
A pointer to the current filename.
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 93 of file webclient.c. +

+References webclient_state::file.

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
unsigned char webclient_get ( char *  host,
u16_t  port,
char *  file
) 
+
+ + + + + +
+   + + +

+Open an HTTP connection to a web server and ask for a file using the GET method. +

+This function opens an HTTP connection to the specified web server and requests the specified file using the GET method. When the HTTP connection has been connected, the webclient_connected() callback function is called and when the HTTP data arrives the webclient_datahandler() callback function is called.

+The callback function webclient_timedout() is called if the web server could not be contacted, and the webclient_aborted() callback function is called if the HTTP connection is aborted by the web server.

+When the HTTP request has been completed and the HTTP connection is closed, the webclient_closed() callback function will be called.

+

Note:
If the function is passed a host name, it must already be in the resolver cache in order for the function to connect to the web server. It is therefore up to the calling module to implement the resolver calls and the signal handler used for reporting a resolv query answer.
+
Parameters:
+ + + + +
host A pointer to a string containing either a host name or a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).
port The port number to which to connect, in host byte order.
file A pointer to the name of the file to get.
+
+
Return values:
+ + + +
0 if the host name could not be found in the cache, or if a TCP connection could not be created.
1 if the connection was initiated.
+
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 140 of file webclient.c. +

+References webclient_state::file, webclient_state::host, htons(), NULL, webclient_state::port, resolv_lookup(), and uip_connect(). +

+Referenced by webclient_appcall().

+

+ + + + +
+ + + + + + + + + +
char * webclient_hostname ( void   ) 
+
+ + + + + +
+   + + +

+Obtain the hostname of the current HTTP data stream. +

+The hostname of the web server of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with webclient_get(). This function is used for obtaining the current hostname.

+

Returns:
A pointer to the current hostname.
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 99 of file webclient.c. +

+References webclient_state::host.

+

+ + + + +
+ + + + + + + + + +
char * webclient_mimetype ( void   ) 
+
+ + + + + +
+   + + +

+Obtain the MIME type of the current HTTP data stream. +

+

Returns:
A pointer to a string contaning the MIME type. The string may be empty if no MIME type was reported by the web server.
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 87 of file webclient.c. +

+References webclient_state::mimetype.

+

+ + + + +
+ + + + + + + + + +
unsigned short webclient_port ( void   ) 
+
+ + + + + +
+   + + +

+Obtain the port number of the current HTTP data stream. +

+The port number of an HTTP request may be changed by the web server, and may therefore not be the same as when the original GET request was made with webclient_get(). This function is used for obtaining the current port number.

+

Returns:
The port number of the current HTTP data stream, in host byte order.
+
Examples:
+webclient.c, and webclient.h.
+

+Definition at line 105 of file webclient.c. +

+References webclient_state::port.

+

+ + + + +
+ + + + + + + + + +
void webclient_timedout ( void   ) 
+
+ + + + + +
+   + + +

+Callback function that is called from the webclient code if the HTTP connection to the web server has timed out. +

+This function must be implemented by the module that uses the webclient code.

Examples:
+webclient.c, and webclient.h.
+

+Referenced by webclient_appcall().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00164.html b/components/net/uip/doc/html/a00164.html new file mode 100644 index 0000000000..67c80c7012 --- /dev/null +++ b/components/net/uip/doc/html/a00164.html @@ -0,0 +1,172 @@ + + +uIP 1.0: Web server + + + + + +

Web server
+ +[Applications] +


Detailed Description

+The uIP web server is a very simplistic implementation of an HTTP server. +

+It can serve web pages and files from a read-only ROM filesystem, and provides a very small scripting language. +

+ + + + + + + +

+

+ + + +

+

+ + + +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Files

file  httpd-cgi.h
 Web server script interface header file.
file  httpd-cgi.c
 Web server script interface.
file  httpd.c
 Web server.

Data Structures

struct  httpd_cgi_call

Defines

#define HTTPD_CGI_CALL(name, str, function)
 HTTPD CGI function declaration.
+#define STATE_WAITING   0
+#define STATE_OUTPUT   1
+#define ISO_nl   0x0a
+#define ISO_space   0x20
+#define ISO_bang   0x21
+#define ISO_percent   0x25
+#define ISO_period   0x2e
+#define ISO_slash   0x2f
+#define ISO_colon   0x3a

Functions

+httpd_cgifunction httpd_cgi (char *name)
+void httpd_appcall (void)
void httpd_init (void)
 Initialize the web server.
+


Define Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + +
#define HTTPD_CGI_CALL ( name,
str,
function   ) 
+
+ + + + + +
+   + + +

+HTTPD CGI function declaration. +

+

Parameters:
+ + + + +
name The C variable name of the function
str The string name of the function, used in the script file
function A pointer to the function that implements it
+
+This macro is used for declaring a HTTPD CGI function. This function is then added to the list of HTTPD CGI functions with the httpd_cgi_add() function. +

+Definition at line 77 of file httpd-cgi.h.

+


Function Documentation

+

+ + + + +
+ + + + + + + + + +
void httpd_init ( void   ) 
+
+ + + + + +
+   + + +

+Initialize the web server. +

+This function initializes the web server and should be called at system boot-up. +

+Definition at line 333 of file httpd.c. +

+References HTONS, and uip_listen().

+


Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00168.html b/components/net/uip/doc/html/a00168.html new file mode 100644 index 0000000000..955e16759a --- /dev/null +++ b/components/net/uip/doc/html/a00168.html @@ -0,0 +1,381 @@ + + +uIP 1.0: apps/dhcpc/dhcpc.c Source File + + + + + + +

apps/dhcpc/dhcpc.c

00001 /*
+00002  * Copyright (c) 2005, Swedish Institute of Computer Science
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00032  */
+00033 
+00034 #include <stdio.h>
+00035 #include <string.h>
+00036 
+00037 #include "uip.h"
+00038 #include "dhcpc.h"
+00039 #include "timer.h"
+00040 #include "pt.h"
+00041 
+00042 #define STATE_INITIAL         0
+00043 #define STATE_SENDING         1
+00044 #define STATE_OFFER_RECEIVED  2
+00045 #define STATE_CONFIG_RECEIVED 3
+00046 
+00047 static struct dhcpc_state s;
+00048 
+00049 struct dhcp_msg {
+00050   u8_t op, htype, hlen, hops;
+00051   u8_t xid[4];
+00052   u16_t secs, flags;
+00053   u8_t ciaddr[4];
+00054   u8_t yiaddr[4];
+00055   u8_t siaddr[4];
+00056   u8_t giaddr[4];
+00057   u8_t chaddr[16];
+00058 #ifndef UIP_CONF_DHCP_LIGHT
+00059   u8_t sname[64];
+00060   u8_t file[128];
+00061 #endif
+00062   u8_t options[312];
+00063 };
+00064 
+00065 #define BOOTP_BROADCAST 0x8000
+00066 
+00067 #define DHCP_REQUEST        1
+00068 #define DHCP_REPLY          2
+00069 #define DHCP_HTYPE_ETHERNET 1
+00070 #define DHCP_HLEN_ETHERNET  6
+00071 #define DHCP_MSG_LEN      236
+00072 
+00073 #define DHCPC_SERVER_PORT  67
+00074 #define DHCPC_CLIENT_PORT  68
+00075 
+00076 #define DHCPDISCOVER  1
+00077 #define DHCPOFFER     2
+00078 #define DHCPREQUEST   3
+00079 #define DHCPDECLINE   4
+00080 #define DHCPACK       5
+00081 #define DHCPNAK       6
+00082 #define DHCPRELEASE   7
+00083 
+00084 #define DHCP_OPTION_SUBNET_MASK   1
+00085 #define DHCP_OPTION_ROUTER        3
+00086 #define DHCP_OPTION_DNS_SERVER    6
+00087 #define DHCP_OPTION_REQ_IPADDR   50
+00088 #define DHCP_OPTION_LEASE_TIME   51
+00089 #define DHCP_OPTION_MSG_TYPE     53
+00090 #define DHCP_OPTION_SERVER_ID    54
+00091 #define DHCP_OPTION_REQ_LIST     55
+00092 #define DHCP_OPTION_END         255
+00093 
+00094 static const u8_t xid[4] = {0xad, 0xde, 0x12, 0x23};
+00095 static const u8_t magic_cookie[4] = {99, 130, 83, 99};
+00096 /*---------------------------------------------------------------------------*/
+00097 static u8_t *
+00098 add_msg_type(u8_t *optptr, u8_t type)
+00099 {
+00100   *optptr++ = DHCP_OPTION_MSG_TYPE;
+00101   *optptr++ = 1;
+00102   *optptr++ = type;
+00103   return optptr;
+00104 }
+00105 /*---------------------------------------------------------------------------*/
+00106 static u8_t *
+00107 add_server_id(u8_t *optptr)
+00108 {
+00109   *optptr++ = DHCP_OPTION_SERVER_ID;
+00110   *optptr++ = 4;
+00111   memcpy(optptr, s.serverid, 4);
+00112   return optptr + 4;
+00113 }
+00114 /*---------------------------------------------------------------------------*/
+00115 static u8_t *
+00116 add_req_ipaddr(u8_t *optptr)
+00117 {
+00118   *optptr++ = DHCP_OPTION_REQ_IPADDR;
+00119   *optptr++ = 4;
+00120   memcpy(optptr, s.ipaddr, 4);
+00121   return optptr + 4;
+00122 }
+00123 /*---------------------------------------------------------------------------*/
+00124 static u8_t *
+00125 add_req_options(u8_t *optptr)
+00126 {
+00127   *optptr++ = DHCP_OPTION_REQ_LIST;
+00128   *optptr++ = 3;
+00129   *optptr++ = DHCP_OPTION_SUBNET_MASK;
+00130   *optptr++ = DHCP_OPTION_ROUTER;
+00131   *optptr++ = DHCP_OPTION_DNS_SERVER;
+00132   return optptr;
+00133 }
+00134 /*---------------------------------------------------------------------------*/
+00135 static u8_t *
+00136 add_end(u8_t *optptr)
+00137 {
+00138   *optptr++ = DHCP_OPTION_END;
+00139   return optptr;
+00140 }
+00141 /*---------------------------------------------------------------------------*/
+00142 static void
+00143 create_msg(register struct dhcp_msg *m)
+00144 {
+00145   m->op = DHCP_REQUEST;
+00146   m->htype = DHCP_HTYPE_ETHERNET;
+00147   m->hlen = s.mac_len;
+00148   m->hops = 0;
+00149   memcpy(m->xid, xid, sizeof(m->xid));
+00150   m->secs = 0;
+00151   m->flags = HTONS(BOOTP_BROADCAST); /*  Broadcast bit. */
+00152   /*  uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/
+00153   memcpy(m->ciaddr, uip_hostaddr, sizeof(m->ciaddr));
+00154   memset(m->yiaddr, 0, sizeof(m->yiaddr));
+00155   memset(m->siaddr, 0, sizeof(m->siaddr));
+00156   memset(m->giaddr, 0, sizeof(m->giaddr));
+00157   memcpy(m->chaddr, s.mac_addr, s.mac_len);
+00158   memset(&m->chaddr[s.mac_len], 0, sizeof(m->chaddr) - s.mac_len);
+00159 #ifndef UIP_CONF_DHCP_LIGHT
+00160   memset(m->sname, 0, sizeof(m->sname));
+00161   memset(m->file, 0, sizeof(m->file));
+00162 #endif
+00163 
+00164   memcpy(m->options, magic_cookie, sizeof(magic_cookie));
+00165 }
+00166 /*---------------------------------------------------------------------------*/
+00167 static void
+00168 send_discover(void)
+00169 {
+00170   u8_t *end;
+00171   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00172 
+00173   create_msg(m);
+00174 
+00175   end = add_msg_type(&m->options[4], DHCPDISCOVER);
+00176   end = add_req_options(end);
+00177   end = add_end(end);
+00178 
+00179   uip_send(uip_appdata, end - (u8_t *)uip_appdata);
+00180 }
+00181 /*---------------------------------------------------------------------------*/
+00182 static void
+00183 send_request(void)
+00184 {
+00185   u8_t *end;
+00186   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00187 
+00188   create_msg(m);
+00189   
+00190   end = add_msg_type(&m->options[4], DHCPREQUEST);
+00191   end = add_server_id(end);
+00192   end = add_req_ipaddr(end);
+00193   end = add_end(end);
+00194   
+00195   uip_send(uip_appdata, end - (u8_t *)uip_appdata);
+00196 }
+00197 /*---------------------------------------------------------------------------*/
+00198 static u8_t
+00199 parse_options(u8_t *optptr, int len)
+00200 {
+00201   u8_t *end = optptr + len;
+00202   u8_t type = 0;
+00203 
+00204   while(optptr < end) {
+00205     switch(*optptr) {
+00206     case DHCP_OPTION_SUBNET_MASK:
+00207       memcpy(s.netmask, optptr + 2, 4);
+00208       break;
+00209     case DHCP_OPTION_ROUTER:
+00210       memcpy(s.default_router, optptr + 2, 4);
+00211       break;
+00212     case DHCP_OPTION_DNS_SERVER:
+00213       memcpy(s.dnsaddr, optptr + 2, 4);
+00214       break;
+00215     case DHCP_OPTION_MSG_TYPE:
+00216       type = *(optptr + 2);
+00217       break;
+00218     case DHCP_OPTION_SERVER_ID:
+00219       memcpy(s.serverid, optptr + 2, 4);
+00220       break;
+00221     case DHCP_OPTION_LEASE_TIME:
+00222       memcpy(s.lease_time, optptr + 2, 4);
+00223       break;
+00224     case DHCP_OPTION_END:
+00225       return type;
+00226     }
+00227 
+00228     optptr += optptr[1] + 2;
+00229   }
+00230   return type;
+00231 }
+00232 /*---------------------------------------------------------------------------*/
+00233 static u8_t
+00234 parse_msg(void)
+00235 {
+00236   struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
+00237   
+00238   if(m->op == DHCP_REPLY &&
+00239      memcmp(m->xid, xid, sizeof(xid)) == 0 &&
+00240      memcmp(m->chaddr, s.mac_addr, s.mac_len) == 0) {
+00241     memcpy(s.ipaddr, m->yiaddr, 4);
+00242     return parse_options(&m->options[4], uip_datalen());
+00243   }
+00244   return 0;
+00245 }
+00246 /*---------------------------------------------------------------------------*/
+00247 static
+00248 PT_THREAD(handle_dhcp(void))
+00249 {
+00250   PT_BEGIN(&s.pt);
+00251   
+00252   /* try_again:*/
+00253   s.state = STATE_SENDING;
+00254   s.ticks = CLOCK_SECOND;
+00255 
+00256   do {
+00257     send_discover();
+00258     timer_set(&s.timer, s.ticks);
+00259     PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer));
+00260 
+00261     if(uip_newdata() && parse_msg() == DHCPOFFER) {
+00262       s.state = STATE_OFFER_RECEIVED;
+00263       break;
+00264     }
+00265 
+00266     if(s.ticks < CLOCK_SECOND * 60) {
+00267       s.ticks *= 2;
+00268     }
+00269   } while(s.state != STATE_OFFER_RECEIVED);
+00270   
+00271   s.ticks = CLOCK_SECOND;
+00272 
+00273   do {
+00274     send_request();
+00275     timer_set(&s.timer, s.ticks);
+00276     PT_WAIT_UNTIL(&s.pt, uip_newdata() || timer_expired(&s.timer));
+00277 
+00278     if(uip_newdata() && parse_msg() == DHCPACK) {
+00279       s.state = STATE_CONFIG_RECEIVED;
+00280       break;
+00281     }
+00282 
+00283     if(s.ticks <= CLOCK_SECOND * 10) {
+00284       s.ticks += CLOCK_SECOND;
+00285     } else {
+00286       PT_RESTART(&s.pt);
+00287     }
+00288   } while(s.state != STATE_CONFIG_RECEIVED);
+00289   
+00290 #if 0
+00291   printf("Got IP address %d.%d.%d.%d\n",
+00292          uip_ipaddr1(s.ipaddr), uip_ipaddr2(s.ipaddr),
+00293          uip_ipaddr3(s.ipaddr), uip_ipaddr4(s.ipaddr));
+00294   printf("Got netmask %d.%d.%d.%d\n",
+00295          uip_ipaddr1(s.netmask), uip_ipaddr2(s.netmask),
+00296          uip_ipaddr3(s.netmask), uip_ipaddr4(s.netmask));
+00297   printf("Got DNS server %d.%d.%d.%d\n",
+00298          uip_ipaddr1(s.dnsaddr), uip_ipaddr2(s.dnsaddr),
+00299          uip_ipaddr3(s.dnsaddr), uip_ipaddr4(s.dnsaddr));
+00300   printf("Got default router %d.%d.%d.%d\n",
+00301          uip_ipaddr1(s.default_router), uip_ipaddr2(s.default_router),
+00302          uip_ipaddr3(s.default_router), uip_ipaddr4(s.default_router));
+00303   printf("Lease expires in %ld seconds\n",
+00304          ntohs(s.lease_time[0])*65536ul + ntohs(s.lease_time[1]));
+00305 #endif
+00306 
+00307   dhcpc_configured(&s);
+00308   
+00309   /*  timer_stop(&s.timer);*/
+00310 
+00311   /*
+00312    * PT_END restarts the thread so we do this instead. Eventually we
+00313    * should reacquire expired leases here.
+00314    */
+00315   while(1) {
+00316     PT_YIELD(&s.pt);
+00317   }
+00318 
+00319   PT_END(&s.pt);
+00320 }
+00321 /*---------------------------------------------------------------------------*/
+00322 void
+00323 dhcpc_init(const void *mac_addr, int mac_len)
+00324 {
+00325   uip_ipaddr_t addr;
+00326   
+00327   s.mac_addr = mac_addr;
+00328   s.mac_len  = mac_len;
+00329 
+00330   s.state = STATE_INITIAL;
+00331   uip_ipaddr(addr, 255,255,255,255);
+00332   s.conn = uip_udp_new(&addr, HTONS(DHCPC_SERVER_PORT));
+00333   if(s.conn != NULL) {
+00334     uip_udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT));
+00335   }
+00336   PT_INIT(&s.pt);
+00337 }
+00338 /*---------------------------------------------------------------------------*/
+00339 void
+00340 dhcpc_appcall(void)
+00341 {
+00342   handle_dhcp();
+00343 }
+00344 /*---------------------------------------------------------------------------*/
+00345 void
+00346 dhcpc_request(void)
+00347 {
+00348   u16_t ipaddr[2];
+00349   
+00350   if(s.state == STATE_INITIAL) {
+00351     uip_ipaddr(ipaddr, 0,0,0,0);
+00352     uip_sethostaddr(ipaddr);
+00353     /*    handle_dhcp(PROCESS_EVENT_NONE, NULL);*/
+00354   }
+00355 }
+00356 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00169.html b/components/net/uip/doc/html/a00169.html new file mode 100644 index 0000000000..c3ed91306c --- /dev/null +++ b/components/net/uip/doc/html/a00169.html @@ -0,0 +1,93 @@ + + +uIP 1.0: apps/dhcpc/dhcpc.h Source File + + + + + + +

apps/dhcpc/dhcpc.h

00001 /*
+00002  * Copyright (c) 2005, Swedish Institute of Computer Science
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * @(#)$Id: dhcpc.h,v 1.3 2006/06/11 21:46:37 adam Exp $
+00032  */
+00033 #ifndef __DHCPC_H__
+00034 #define __DHCPC_H__
+00035 
+00036 #include "timer.h"
+00037 #include "pt.h"
+00038 
+00039 struct dhcpc_state {
+00040   struct pt pt;
+00041   char state;
+00042   struct uip_udp_conn *conn;
+00043   struct timer timer;
+00044   u16_t ticks;
+00045   const void *mac_addr;
+00046   int mac_len;
+00047   
+00048   u8_t serverid[4];
+00049 
+00050   u16_t lease_time[2];
+00051   u16_t ipaddr[2];
+00052   u16_t netmask[2];
+00053   u16_t dnsaddr[2];
+00054   u16_t default_router[2];
+00055 };
+00056 
+00057 void dhcpc_init(const void *mac_addr, int mac_len);
+00058 void dhcpc_request(void);
+00059 
+00060 void dhcpc_appcall(void);
+00061 
+00062 void dhcpc_configured(const struct dhcpc_state *s);
+00063 
+00064 typedef struct dhcpc_state uip_udp_appstate_t;
+00065 #define UIP_UDP_APPCALL dhcpc_appcall
+00066 
+00067 
+00068 #endif /* __DHCPC_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00170.html b/components/net/uip/doc/html/a00170.html new file mode 100644 index 0000000000..20a39c092d --- /dev/null +++ b/components/net/uip/doc/html/a00170.html @@ -0,0 +1,125 @@ + + +uIP 1.0: apps/hello-world/hello-world.c Source File + + + + + + +

apps/hello-world/hello-world.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup helloworld
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  *         An example of how to write uIP applications
+00009  *         with protosockets.
+00010  * \author
+00011  *         Adam Dunkels <adam@sics.se>
+00012  */
+00013 
+00014 /*
+00015  * This is a short example of how to write uIP applications using
+00016  * protosockets.
+00017  */
+00018 
+00019 /*
+00020  * We define the application state (struct hello_world_state) in the
+00021  * hello-world.h file, so we need to include it here. We also include
+00022  * uip.h (since this cannot be included in hello-world.h) and
+00023  * <string.h>, since we use the memcpy() function in the code.
+00024  */
+00025 #include "hello-world.h"
+00026 #include "uip.h"
+00027 #include <string.h>
+00028 
+00029 /*
+00030  * Declaration of the protosocket function that handles the connection
+00031  * (defined at the end of the code).
+00032  */
+00033 static int handle_connection(struct hello_world_state *s);
+00034 /*---------------------------------------------------------------------------*/
+00035 /*
+00036  * The initialization function. We must explicitly call this function
+00037  * from the system initialization code, some time after uip_init() is
+00038  * called.
+00039  */
+00040 void
+00041 hello_world_init(void)
+00042 {
+00043   /* We start to listen for connections on TCP port 1000. */
+00044   uip_listen(HTONS(1000));
+00045 }
+00046 /*---------------------------------------------------------------------------*/
+00047 /*
+00048  * In hello-world.h we have defined the UIP_APPCALL macro to
+00049  * hello_world_appcall so that this funcion is uIP's application
+00050  * function. This function is called whenever an uIP event occurs
+00051  * (e.g. when a new connection is established, new data arrives, sent
+00052  * data is acknowledged, data needs to be retransmitted, etc.).
+00053  */
+00054 void
+00055 hello_world_appcall(void)
+00056 {
+00057   /*
+00058    * The uip_conn structure has a field called "appstate" that holds
+00059    * the application state of the connection. We make a pointer to
+00060    * this to access it easier.
+00061    */
+00062   struct hello_world_state *s = &(uip_conn->appstate);
+00063 
+00064   /*
+00065    * If a new connection was just established, we should initialize
+00066    * the protosocket in our applications' state structure.
+00067    */
+00068   if(uip_connected()) {
+00069     PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));
+00070   }
+00071 
+00072   /*
+00073    * Finally, we run the protosocket function that actually handles
+00074    * the communication. We pass it a pointer to the application state
+00075    * of the current connection.
+00076    */
+00077   handle_connection(s);
+00078 }
+00079 /*---------------------------------------------------------------------------*/
+00080 /*
+00081  * This is the protosocket function that handles the communication. A
+00082  * protosocket function must always return an int, but must never
+00083  * explicitly return - all return statements are hidden in the PSOCK
+00084  * macros.
+00085  */
+00086 static int
+00087 handle_connection(struct hello_world_state *s)
+00088 {
+00089   PSOCK_BEGIN(&s->p);
+00090 
+00091   PSOCK_SEND_STR(&s->p, "Hello. What is your name?\n");
+00092   PSOCK_READTO(&s->p, '\n');
+00093   strncpy(s->name, s->inputbuffer, sizeof(s->name));
+00094   PSOCK_SEND_STR(&s->p, "Hello ");
+00095   PSOCK_SEND_STR(&s->p, s->name);
+00096   PSOCK_CLOSE(&s->p);
+00097   
+00098   PSOCK_END(&s->p);
+00099 }
+00100 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00171.html b/components/net/uip/doc/html/a00171.html new file mode 100644 index 0000000000..768f61b64b --- /dev/null +++ b/components/net/uip/doc/html/a00171.html @@ -0,0 +1,77 @@ + + +uIP 1.0: apps/hello-world/hello-world.h Source File + + + + + + +

apps/hello-world/hello-world.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup helloworld Hello, world
+00008  * @{
+00009  *
+00010  * A small example showing how to write applications with
+00011  * \ref psock "protosockets".
+00012  */
+00013 
+00014 /**
+00015  * \file
+00016  *         Header file for an example of how to write uIP applications
+00017  *         with protosockets.
+00018  * \author
+00019  *         Adam Dunkels <adam@sics.se>
+00020  */
+00021 
+00022 #ifndef __HELLO_WORLD_H__
+00023 #define __HELLO_WORLD_H__
+00024 
+00025 /* Since this file will be included by uip.h, we cannot include uip.h
+00026    here. But we might need to include uipopt.h if we need the u8_t and
+00027    u16_t datatypes. */
+00028 #include "uipopt.h"
+00029 
+00030 #include "psock.h"
+00031 
+00032 /* Next, we define the uip_tcp_appstate_t datatype. This is the state
+00033    of our application, and the memory required for this state is
+00034    allocated together with each TCP connection. One application state
+00035    for each TCP connection. */
+00036 typedef struct hello_world_state {
+00037   struct psock p;
+00038   char inputbuffer[10];
+00039   char name[40];
+00040 } uip_tcp_appstate_t;
+00041 
+00042 /* Finally we define the application function to be called by uIP. */
+00043 void hello_world_appcall(void);
+00044 #ifndef UIP_APPCALL
+00045 #define UIP_APPCALL hello_world_appcall
+00046 #endif /* UIP_APPCALL */
+00047 
+00048 void hello_world_init(void);
+00049 
+00050 #endif /* __HELLO_WORLD_H__ */
+00051 /** @} */
+00052 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00172.html b/components/net/uip/doc/html/a00172.html new file mode 100644 index 0000000000..1bf08f6dc3 --- /dev/null +++ b/components/net/uip/doc/html/a00172.html @@ -0,0 +1,489 @@ + + +uIP 1.0: apps/resolv/resolv.c Source File + + + + + + +

apps/resolv/resolv.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup resolv DNS resolver
+00008  * @{
+00009  *
+00010  * The uIP DNS resolver functions are used to lookup a hostname and
+00011  * map it to a numerical IP address. It maintains a list of resolved
+00012  * hostnames that can be queried with the resolv_lookup()
+00013  * function. New hostnames can be resolved using the resolv_query()
+00014  * function.
+00015  *
+00016  * When a hostname has been resolved (or found to be non-existant),
+00017  * the resolver code calls a callback function called resolv_found()
+00018  * that must be implemented by the module that uses the resolver.
+00019  */
+00020 
+00021 /**
+00022  * \file
+00023  * DNS host name to IP address resolver.
+00024  * \author Adam Dunkels <adam@dunkels.com>
+00025  *
+00026  * This file implements a DNS host name to IP address resolver.
+00027  */
+00028 
+00029 /*
+00030  * Copyright (c) 2002-2003, Adam Dunkels.
+00031  * All rights reserved.
+00032  *
+00033  * Redistribution and use in source and binary forms, with or without
+00034  * modification, are permitted provided that the following conditions
+00035  * are met:
+00036  * 1. Redistributions of source code must retain the above copyright
+00037  *    notice, this list of conditions and the following disclaimer.
+00038  * 2. Redistributions in binary form must reproduce the above copyright
+00039  *    notice, this list of conditions and the following disclaimer in the
+00040  *    documentation and/or other materials provided with the distribution.
+00041  * 3. The name of the author may not be used to endorse or promote
+00042  *    products derived from this software without specific prior
+00043  *    written permission.
+00044  *
+00045  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00046  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00047  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00048  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00049  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00050  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00051  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00052  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00053  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00054  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00055  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00056  *
+00057  * This file is part of the uIP TCP/IP stack.
+00058  *
+00059  * $Id: resolv.c,v 1.5 2006/06/11 21:46:37 adam Exp $
+00060  *
+00061  */
+00062 
+00063 #include "resolv.h"
+00064 #include "uip.h"
+00065 
+00066 #include <string.h>
+00067 
+00068 #ifndef NULL
+00069 #define NULL (void *)0
+00070 #endif /* NULL */
+00071 
+00072 /** \internal The maximum number of retries when asking for a name. */
+00073 #define MAX_RETRIES 8
+00074 
+00075 /** \internal The DNS message header. */
+00076 struct dns_hdr {
+00077   u16_t id;
+00078   u8_t flags1, flags2;
+00079 #define DNS_FLAG1_RESPONSE        0x80
+00080 #define DNS_FLAG1_OPCODE_STATUS   0x10
+00081 #define DNS_FLAG1_OPCODE_INVERSE  0x08
+00082 #define DNS_FLAG1_OPCODE_STANDARD 0x00
+00083 #define DNS_FLAG1_AUTHORATIVE     0x04
+00084 #define DNS_FLAG1_TRUNC           0x02
+00085 #define DNS_FLAG1_RD              0x01
+00086 #define DNS_FLAG2_RA              0x80
+00087 #define DNS_FLAG2_ERR_MASK        0x0f
+00088 #define DNS_FLAG2_ERR_NONE        0x00
+00089 #define DNS_FLAG2_ERR_NAME        0x03
+00090   u16_t numquestions;
+00091   u16_t numanswers;
+00092   u16_t numauthrr;
+00093   u16_t numextrarr;
+00094 };
+00095 
+00096 /** \internal The DNS answer message structure. */
+00097 struct dns_answer {
+00098   /* DNS answer record starts with either a domain name or a pointer
+00099      to a name already present somewhere in the packet. */
+00100   u16_t type;
+00101   u16_t class;
+00102   u16_t ttl[2];
+00103   u16_t len;
+00104   uip_ipaddr_t ipaddr;
+00105 };
+00106 
+00107 struct namemap {
+00108 #define STATE_UNUSED 0
+00109 #define STATE_NEW    1
+00110 #define STATE_ASKING 2
+00111 #define STATE_DONE   3
+00112 #define STATE_ERROR  4
+00113   u8_t state;
+00114   u8_t tmr;
+00115   u8_t retries;
+00116   u8_t seqno;
+00117   u8_t err;
+00118   char name[32];
+00119   uip_ipaddr_t ipaddr;
+00120 };
+00121 
+00122 #ifndef UIP_CONF_RESOLV_ENTRIES
+00123 #define RESOLV_ENTRIES 4
+00124 #else /* UIP_CONF_RESOLV_ENTRIES */
+00125 #define RESOLV_ENTRIES UIP_CONF_RESOLV_ENTRIES
+00126 #endif /* UIP_CONF_RESOLV_ENTRIES */
+00127 
+00128 
+00129 static struct namemap names[RESOLV_ENTRIES];
+00130 
+00131 static u8_t seqno;
+00132 
+00133 static struct uip_udp_conn *resolv_conn = NULL;
+00134 
+00135 
+00136 /*---------------------------------------------------------------------------*/
+00137 /** \internal
+00138  * Walk through a compact encoded DNS name and return the end of it.
+00139  *
+00140  * \return The end of the name.
+00141  */
+00142 /*---------------------------------------------------------------------------*/
+00143 static unsigned char *
+00144 parse_name(unsigned char *query)
+00145 {
+00146   unsigned char n;
+00147 
+00148   do {
+00149     n = *query++;
+00150     
+00151     while(n > 0) {
+00152       /*      printf("%c", *query);*/
+00153       ++query;
+00154       --n;
+00155     };
+00156     /*    printf(".");*/
+00157   } while(*query != 0);
+00158   /*  printf("\n");*/
+00159   return query + 1;
+00160 }
+00161 /*---------------------------------------------------------------------------*/
+00162 /** \internal
+00163  * Runs through the list of names to see if there are any that have
+00164  * not yet been queried and, if so, sends out a query.
+00165  */
+00166 /*---------------------------------------------------------------------------*/
+00167 static void
+00168 check_entries(void)
+00169 {
+00170   register struct dns_hdr *hdr;
+00171   char *query, *nptr, *nameptr;
+00172   static u8_t i;
+00173   static u8_t n;
+00174   register struct namemap *namemapptr;
+00175   
+00176   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00177     namemapptr = &names[i];
+00178     if(namemapptr->state == STATE_NEW ||
+00179        namemapptr->state == STATE_ASKING) {
+00180       if(namemapptr->state == STATE_ASKING) {
+00181         if(--namemapptr->tmr == 0) {
+00182           if(++namemapptr->retries == MAX_RETRIES) {
+00183             namemapptr->state = STATE_ERROR;
+00184             resolv_found(namemapptr->name, NULL);
+00185             continue;
+00186           }
+00187           namemapptr->tmr = namemapptr->retries;
+00188         } else {
+00189           /*      printf("Timer %d\n", namemapptr->tmr);*/
+00190           /* Its timer has not run out, so we move on to next
+00191              entry. */
+00192           continue;
+00193         }
+00194       } else {
+00195         namemapptr->state = STATE_ASKING;
+00196         namemapptr->tmr = 1;
+00197         namemapptr->retries = 0;
+00198       }
+00199       hdr = (struct dns_hdr *)uip_appdata;
+00200       memset(hdr, 0, sizeof(struct dns_hdr));
+00201       hdr->id = htons(i);
+00202       hdr->flags1 = DNS_FLAG1_RD;
+00203       hdr->numquestions = HTONS(1);
+00204       query = (char *)uip_appdata + 12;
+00205       nameptr = namemapptr->name;
+00206       --nameptr;
+00207       /* Convert hostname into suitable query format. */
+00208       do {
+00209         ++nameptr;
+00210         nptr = query;
+00211         ++query;
+00212         for(n = 0; *nameptr != '.' && *nameptr != 0; ++nameptr) {
+00213           *query = *nameptr;
+00214           ++query;
+00215           ++n;
+00216         }
+00217         *nptr = n;
+00218       } while(*nameptr != 0);
+00219       {
+00220         static unsigned char endquery[] =
+00221           {0,0,1,0,1};
+00222         memcpy(query, endquery, 5);
+00223       }
+00224       uip_udp_send((unsigned char)(query + 5 - (char *)uip_appdata));
+00225       break;
+00226     }
+00227   }
+00228 }
+00229 /*---------------------------------------------------------------------------*/
+00230 /** \internal
+00231  * Called when new UDP data arrives.
+00232  */
+00233 /*---------------------------------------------------------------------------*/
+00234 static void
+00235 newdata(void)
+00236 {
+00237   char *nameptr;
+00238   struct dns_answer *ans;
+00239   struct dns_hdr *hdr;
+00240   static u8_t nquestions, nanswers;
+00241   static u8_t i;
+00242   register struct namemap *namemapptr;
+00243   
+00244   hdr = (struct dns_hdr *)uip_appdata;
+00245   /*  printf("ID %d\n", htons(hdr->id));
+00246       printf("Query %d\n", hdr->flags1 & DNS_FLAG1_RESPONSE);
+00247       printf("Error %d\n", hdr->flags2 & DNS_FLAG2_ERR_MASK);
+00248       printf("Num questions %d, answers %d, authrr %d, extrarr %d\n",
+00249       htons(hdr->numquestions),
+00250       htons(hdr->numanswers),
+00251       htons(hdr->numauthrr),
+00252       htons(hdr->numextrarr));
+00253   */
+00254 
+00255   /* The ID in the DNS header should be our entry into the name
+00256      table. */
+00257   i = htons(hdr->id);
+00258   namemapptr = &names[i];
+00259   if(i < RESOLV_ENTRIES &&
+00260      namemapptr->state == STATE_ASKING) {
+00261 
+00262     /* This entry is now finished. */
+00263     namemapptr->state = STATE_DONE;
+00264     namemapptr->err = hdr->flags2 & DNS_FLAG2_ERR_MASK;
+00265 
+00266     /* Check for error. If so, call callback to inform. */
+00267     if(namemapptr->err != 0) {
+00268       namemapptr->state = STATE_ERROR;
+00269       resolv_found(namemapptr->name, NULL);
+00270       return;
+00271     }
+00272 
+00273     /* We only care about the question(s) and the answers. The authrr
+00274        and the extrarr are simply discarded. */
+00275     nquestions = htons(hdr->numquestions);
+00276     nanswers = htons(hdr->numanswers);
+00277 
+00278     /* Skip the name in the question. XXX: This should really be
+00279        checked agains the name in the question, to be sure that they
+00280        match. */
+00281     nameptr = parse_name((char *)uip_appdata + 12) + 4;
+00282 
+00283     while(nanswers > 0) {
+00284       /* The first byte in the answer resource record determines if it
+00285          is a compressed record or a normal one. */
+00286       if(*nameptr & 0xc0) {
+00287         /* Compressed name. */
+00288         nameptr +=2;
+00289         /*      printf("Compressed anwser\n");*/
+00290       } else {
+00291         /* Not compressed name. */
+00292         nameptr = parse_name((char *)nameptr);
+00293       }
+00294 
+00295       ans = (struct dns_answer *)nameptr;
+00296       /*      printf("Answer: type %x, class %x, ttl %x, length %x\n",
+00297              htons(ans->type), htons(ans->class), (htons(ans->ttl[0])
+00298              << 16) | htons(ans->ttl[1]), htons(ans->len));*/
+00299 
+00300       /* Check for IP address type and Internet class. Others are
+00301          discarded. */
+00302       if(ans->type == HTONS(1) &&
+00303          ans->class == HTONS(1) &&
+00304          ans->len == HTONS(4)) {
+00305         /*      printf("IP address %d.%d.%d.%d\n",
+00306                htons(ans->ipaddr[0]) >> 8,
+00307                htons(ans->ipaddr[0]) & 0xff,
+00308                htons(ans->ipaddr[1]) >> 8,
+00309                htons(ans->ipaddr[1]) & 0xff);*/
+00310         /* XXX: we should really check that this IP address is the one
+00311            we want. */
+00312         namemapptr->ipaddr[0] = ans->ipaddr[0];
+00313         namemapptr->ipaddr[1] = ans->ipaddr[1];
+00314         
+00315         resolv_found(namemapptr->name, namemapptr->ipaddr);
+00316         return;
+00317       } else {
+00318         nameptr = nameptr + 10 + htons(ans->len);
+00319       }
+00320       --nanswers;
+00321     }
+00322   }
+00323 
+00324 }
+00325 /*---------------------------------------------------------------------------*/
+00326 /** \internal
+00327  * The main UDP function.
+00328  */
+00329 /*---------------------------------------------------------------------------*/
+00330 void
+00331 resolv_appcall(void)
+00332 {
+00333   if(uip_udp_conn->rport == HTONS(53)) {
+00334     if(uip_poll()) {
+00335       check_entries();
+00336     }
+00337     if(uip_newdata()) {
+00338       newdata();
+00339     }
+00340   }
+00341 }
+00342 /*---------------------------------------------------------------------------*/
+00343 /**
+00344  * Queues a name so that a question for the name will be sent out.
+00345  *
+00346  * \param name The hostname that is to be queried.
+00347  */
+00348 /*---------------------------------------------------------------------------*/
+00349 void
+00350 resolv_query(char *name)
+00351 {
+00352   static u8_t i;
+00353   static u8_t lseq, lseqi;
+00354   register struct namemap *nameptr;
+00355       
+00356   lseq = lseqi = 0;
+00357   
+00358   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00359     nameptr = &names[i];
+00360     if(nameptr->state == STATE_UNUSED) {
+00361       break;
+00362     }
+00363     if(seqno - nameptr->seqno > lseq) {
+00364       lseq = seqno - nameptr->seqno;
+00365       lseqi = i;
+00366     }
+00367   }
+00368 
+00369   if(i == RESOLV_ENTRIES) {
+00370     i = lseqi;
+00371     nameptr = &names[i];
+00372   }
+00373 
+00374   /*  printf("Using entry %d\n", i);*/
+00375 
+00376   strcpy(nameptr->name, name);
+00377   nameptr->state = STATE_NEW;
+00378   nameptr->seqno = seqno;
+00379   ++seqno;
+00380 }
+00381 /*---------------------------------------------------------------------------*/
+00382 /**
+00383  * Look up a hostname in the array of known hostnames.
+00384  *
+00385  * \note This function only looks in the internal array of known
+00386  * hostnames, it does not send out a query for the hostname if none
+00387  * was found. The function resolv_query() can be used to send a query
+00388  * for a hostname.
+00389  *
+00390  * \return A pointer to a 4-byte representation of the hostname's IP
+00391  * address, or NULL if the hostname was not found in the array of
+00392  * hostnames.
+00393  */
+00394 /*---------------------------------------------------------------------------*/
+00395 u16_t *
+00396 resolv_lookup(char *name)
+00397 {
+00398   static u8_t i;
+00399   struct namemap *nameptr;
+00400   
+00401   /* Walk through the list to see if the name is in there. If it is
+00402      not, we return NULL. */
+00403   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00404     nameptr = &names[i];
+00405     if(nameptr->state == STATE_DONE &&
+00406        strcmp(name, nameptr->name) == 0) {
+00407       return nameptr->ipaddr;
+00408     }
+00409   }
+00410   return NULL;
+00411 }
+00412 /*---------------------------------------------------------------------------*/
+00413 /**
+00414  * Obtain the currently configured DNS server.
+00415  *
+00416  * \return A pointer to a 4-byte representation of the IP address of
+00417  * the currently configured DNS server or NULL if no DNS server has
+00418  * been configured.
+00419  */
+00420 /*---------------------------------------------------------------------------*/
+00421 u16_t *
+00422 resolv_getserver(void)
+00423 {
+00424   if(resolv_conn == NULL) {
+00425     return NULL;
+00426   }
+00427   return resolv_conn->ripaddr;
+00428 }
+00429 /*---------------------------------------------------------------------------*/
+00430 /**
+00431  * Configure which DNS server to use for queries.
+00432  *
+00433  * \param dnsserver A pointer to a 4-byte representation of the IP
+00434  * address of the DNS server to be configured.
+00435  */
+00436 /*---------------------------------------------------------------------------*/
+00437 void
+00438 resolv_conf(u16_t *dnsserver)
+00439 {
+00440   if(resolv_conn != NULL) {
+00441     uip_udp_remove(resolv_conn);
+00442   }
+00443   
+00444   resolv_conn = uip_udp_new(dnsserver, HTONS(53));
+00445 }
+00446 /*---------------------------------------------------------------------------*/
+00447 /**
+00448  * Initalize the resolver.
+00449  */
+00450 /*---------------------------------------------------------------------------*/
+00451 void
+00452 resolv_init(void)
+00453 {
+00454   static u8_t i;
+00455   
+00456   for(i = 0; i < RESOLV_ENTRIES; ++i) {
+00457     names[i].state = STATE_DONE;
+00458   }
+00459 
+00460 }
+00461 /*---------------------------------------------------------------------------*/
+00462 
+00463 /** @} */
+00464 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00173.html b/components/net/uip/doc/html/a00173.html new file mode 100644 index 0000000000..1b9f8dfb22 --- /dev/null +++ b/components/net/uip/doc/html/a00173.html @@ -0,0 +1,100 @@ + + +uIP 1.0: apps/resolv/resolv.h Source File + + + + + + +

apps/resolv/resolv.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup resolv
+00003  * @{
+00004  */
+00005 /**
+00006  * \file
+00007  * DNS resolver code header file.
+00008  * \author Adam Dunkels <adam@dunkels.com>
+00009  */
+00010 
+00011 /*
+00012  * Copyright (c) 2002-2003, Adam Dunkels.
+00013  * All rights reserved.
+00014  *
+00015  * Redistribution and use in source and binary forms, with or without
+00016  * modification, are permitted provided that the following conditions
+00017  * are met:
+00018  * 1. Redistributions of source code must retain the above copyright
+00019  *    notice, this list of conditions and the following disclaimer.
+00020  * 2. Redistributions in binary form must reproduce the above copyright
+00021  *    notice, this list of conditions and the following disclaimer in the
+00022  *    documentation and/or other materials provided with the distribution.
+00023  * 3. The name of the author may not be used to endorse or promote
+00024  *    products derived from this software without specific prior
+00025  *    written permission.
+00026  *
+00027  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00028  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00029  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00030  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00031  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00032  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00033  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00034  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00035  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00036  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00037  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00038  *
+00039  * This file is part of the uIP TCP/IP stack.
+00040  *
+00041  * $Id: resolv.h,v 1.4 2006/06/11 21:46:37 adam Exp $
+00042  *
+00043  */
+00044 #ifndef __RESOLV_H__
+00045 #define __RESOLV_H__
+00046 
+00047 typedef int uip_udp_appstate_t;
+00048 void resolv_appcall(void);
+00049 #define UIP_UDP_APPCALL resolv_appcall
+00050 
+00051 #include "uipopt.h"
+00052 
+00053 /**
+00054  * Callback function which is called when a hostname is found.
+00055  *
+00056  * This function must be implemented by the module that uses the DNS
+00057  * resolver. It is called when a hostname is found, or when a hostname
+00058  * was not found.
+00059  *
+00060  * \param name A pointer to the name that was looked up.  \param
+00061  * ipaddr A pointer to a 4-byte array containing the IP address of the
+00062  * hostname, or NULL if the hostname could not be found.
+00063  */
+00064 void resolv_found(char *name, u16_t *ipaddr);
+00065 
+00066 /* Functions. */
+00067 void resolv_conf(u16_t *dnsserver);
+00068 u16_t *resolv_getserver(void);
+00069 void resolv_init(void);
+00070 u16_t *resolv_lookup(char *name);
+00071 void resolv_query(char *name);
+00072 
+00073 #endif /* __RESOLV_H__ */
+00074 
+00075 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00174.html b/components/net/uip/doc/html/a00174.html new file mode 100644 index 0000000000..c535c4aec3 --- /dev/null +++ b/components/net/uip/doc/html/a00174.html @@ -0,0 +1,287 @@ + + +uIP 1.0: apps/smtp/smtp.c Source File + + + + + + +

apps/smtp/smtp.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup smtp SMTP E-mail sender
+00008  * @{
+00009  *
+00010  * The Simple Mail Transfer Protocol (SMTP) as defined by RFC821 is
+00011  * the standard way of sending and transfering e-mail on the
+00012  * Internet. This simple example implementation is intended as an
+00013  * example of how to implement protocols in uIP, and is able to send
+00014  * out e-mail but has not been extensively tested.
+00015  */
+00016 
+00017 /**
+00018  * \file
+00019  * SMTP example implementation
+00020  * \author Adam Dunkels <adam@dunkels.com>
+00021  */
+00022 
+00023 /*
+00024  * Copyright (c) 2004, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above copyright
+00033  *    notice, this list of conditions and the following disclaimer in the
+00034  *    documentation and/or other materials provided with the distribution.
+00035  * 3. Neither the name of the Institute nor the names of its contributors
+00036  *    may be used to endorse or promote products derived from this software
+00037  *    without specific prior written permission.
+00038  *
+00039  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00040  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00041  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00042  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00043  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00044  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00045  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00046  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00047  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00048  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00049  * SUCH DAMAGE.
+00050  *
+00051  * This file is part of the uIP TCP/IP stack.
+00052  *
+00053  * Author: Adam Dunkels <adam@sics.se>
+00054  *
+00055  * $Id: smtp.c,v 1.4 2006/06/11 21:46:37 adam Exp $
+00056  */
+00057 #include "smtp.h"
+00058 
+00059 #include "smtp-strings.h"
+00060 #include "psock.h"
+00061 #include "uip.h"
+00062 
+00063 #include <string.h>
+00064 
+00065 static struct smtp_state s;
+00066 
+00067 static char *localhostname;
+00068 static uip_ipaddr_t smtpserver;
+00069 
+00070 #define ISO_nl 0x0a
+00071 #define ISO_cr 0x0d
+00072 
+00073 #define ISO_period 0x2e
+00074 
+00075 #define ISO_2  0x32
+00076 #define ISO_3  0x33
+00077 #define ISO_4  0x34
+00078 #define ISO_5  0x35
+00079 
+00080 
+00081 /*---------------------------------------------------------------------------*/
+00082 static
+00083 PT_THREAD(smtp_thread(void))
+00084 {
+00085   PSOCK_BEGIN(&s.psock);
+00086 
+00087   PSOCK_READTO(&s.psock, ISO_nl);
+00088    
+00089   if(strncmp(s.inputbuffer, smtp_220, 3) != 0) {
+00090     PSOCK_CLOSE(&s.psock);
+00091     smtp_done(2);
+00092     PSOCK_EXIT(&s.psock);
+00093   }
+00094   
+00095   PSOCK_SEND_STR(&s.psock, (char *)smtp_helo);
+00096   PSOCK_SEND_STR(&s.psock, localhostname);
+00097   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00098 
+00099   PSOCK_READTO(&s.psock, ISO_nl);
+00100   
+00101   if(s.inputbuffer[0] != ISO_2) {
+00102     PSOCK_CLOSE(&s.psock);
+00103     smtp_done(3);
+00104     PSOCK_EXIT(&s.psock);
+00105   }
+00106 
+00107   PSOCK_SEND_STR(&s.psock, (char *)smtp_mail_from);
+00108   PSOCK_SEND_STR(&s.psock, s.from);
+00109   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00110 
+00111   PSOCK_READTO(&s.psock, ISO_nl);
+00112   
+00113   if(s.inputbuffer[0] != ISO_2) {
+00114     PSOCK_CLOSE(&s.psock);
+00115     smtp_done(4);
+00116     PSOCK_EXIT(&s.psock);
+00117   }
+00118 
+00119   PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to);
+00120   PSOCK_SEND_STR(&s.psock, s.to);
+00121   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00122 
+00123   PSOCK_READTO(&s.psock, ISO_nl);
+00124   
+00125   if(s.inputbuffer[0] != ISO_2) {
+00126     PSOCK_CLOSE(&s.psock);
+00127     smtp_done(5);
+00128     PSOCK_EXIT(&s.psock);
+00129   }
+00130   
+00131   if(s.cc != 0) {
+00132     PSOCK_SEND_STR(&s.psock, (char *)smtp_rcpt_to);
+00133     PSOCK_SEND_STR(&s.psock, s.cc);
+00134     PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00135 
+00136     PSOCK_READTO(&s.psock, ISO_nl);
+00137   
+00138     if(s.inputbuffer[0] != ISO_2) {
+00139       PSOCK_CLOSE(&s.psock);
+00140       smtp_done(6);
+00141       PSOCK_EXIT(&s.psock);
+00142     }
+00143   }
+00144   
+00145   PSOCK_SEND_STR(&s.psock, (char *)smtp_data);
+00146   
+00147   PSOCK_READTO(&s.psock, ISO_nl);
+00148   
+00149   if(s.inputbuffer[0] != ISO_3) {
+00150     PSOCK_CLOSE(&s.psock);
+00151     smtp_done(7);
+00152     PSOCK_EXIT(&s.psock);
+00153   }
+00154 
+00155   PSOCK_SEND_STR(&s.psock, (char *)smtp_to);
+00156   PSOCK_SEND_STR(&s.psock, s.to);
+00157   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00158   
+00159   if(s.cc != 0) {
+00160     PSOCK_SEND_STR(&s.psock, (char *)smtp_cc);
+00161     PSOCK_SEND_STR(&s.psock, s.cc);
+00162     PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00163   }
+00164   
+00165   PSOCK_SEND_STR(&s.psock, (char *)smtp_from);
+00166   PSOCK_SEND_STR(&s.psock, s.from);
+00167   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00168   
+00169   PSOCK_SEND_STR(&s.psock, (char *)smtp_subject);
+00170   PSOCK_SEND_STR(&s.psock, s.subject);
+00171   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnl);
+00172 
+00173   PSOCK_SEND(&s.psock, s.msg, s.msglen);
+00174   
+00175   PSOCK_SEND_STR(&s.psock, (char *)smtp_crnlperiodcrnl);
+00176 
+00177   PSOCK_READTO(&s.psock, ISO_nl);
+00178   if(s.inputbuffer[0] != ISO_2) {
+00179     PSOCK_CLOSE(&s.psock);
+00180     smtp_done(8);
+00181     PSOCK_EXIT(&s.psock);
+00182   }
+00183 
+00184   PSOCK_SEND_STR(&s.psock, (char *)smtp_quit);
+00185   smtp_done(SMTP_ERR_OK);
+00186   PSOCK_END(&s.psock);
+00187 }
+00188 /*---------------------------------------------------------------------------*/
+00189 void
+00190 smtp_appcall(void)
+00191 {
+00192   if(uip_closed()) {
+00193     s.connected = 0;
+00194     return;
+00195   }
+00196   if(uip_aborted() || uip_timedout()) {
+00197     s.connected = 0;
+00198     smtp_done(1);
+00199     return;
+00200   }
+00201   smtp_thread();
+00202 }
+00203 /*---------------------------------------------------------------------------*/
+00204 /**
+00205  * Specificy an SMTP server and hostname.
+00206  *
+00207  * This function is used to configure the SMTP module with an SMTP
+00208  * server and the hostname of the host.
+00209  *
+00210  * \param lhostname The hostname of the uIP host.
+00211  *
+00212  * \param server A pointer to a 4-byte array representing the IP
+00213  * address of the SMTP server to be configured.
+00214  */
+00215 void
+00216 smtp_configure(char *lhostname, void *server)
+00217 {
+00218   localhostname = lhostname;
+00219   uip_ipaddr_copy(smtpserver, server);
+00220 }
+00221 /*---------------------------------------------------------------------------*/
+00222 /**
+00223  * Send an e-mail.
+00224  *
+00225  * \param to The e-mail address of the receiver of the e-mail.
+00226  * \param cc The e-mail address of the CC: receivers of the e-mail.
+00227  * \param from The e-mail address of the sender of the e-mail.
+00228  * \param subject The subject of the e-mail.
+00229  * \param msg The actual e-mail message.
+00230  * \param msglen The length of the e-mail message.
+00231  */
+00232 unsigned char
+00233 smtp_send(char *to, char *cc, char *from,
+00234           char *subject, char *msg, u16_t msglen)
+00235 {
+00236   struct uip_conn *conn;
+00237 
+00238   conn = uip_connect(smtpserver, HTONS(25));
+00239   if(conn == NULL) {
+00240     return 0;
+00241   }
+00242   s.connected = 1;
+00243   s.to = to;
+00244   s.cc = cc;
+00245   s.from = from;
+00246   s.subject = subject;
+00247   s.msg = msg;
+00248   s.msglen = msglen;
+00249 
+00250   PSOCK_INIT(&s.psock, s.inputbuffer, sizeof(s.inputbuffer));
+00251   
+00252   return 1;
+00253 }
+00254 /*---------------------------------------------------------------------------*/
+00255 void
+00256 smtp_init(void)
+00257 {
+00258   s.connected = 0;
+00259 }
+00260 /*---------------------------------------------------------------------------*/
+00261 /** @} */
+00262 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00175.html b/components/net/uip/doc/html/a00175.html new file mode 100644 index 0000000000..98342be7af --- /dev/null +++ b/components/net/uip/doc/html/a00175.html @@ -0,0 +1,128 @@ + + +uIP 1.0: apps/smtp/smtp.h Source File + + + + + + +

apps/smtp/smtp.h

Go to the documentation of this file.
00001 
+00002 /**
+00003  * \addtogroup smtp
+00004  * @{
+00005  */
+00006 
+00007 
+00008 /**
+00009  * \file
+00010  * SMTP header file
+00011  * \author Adam Dunkels <adam@dunkels.com>
+00012  */
+00013 
+00014 /*
+00015  * Copyright (c) 2002, Adam Dunkels.
+00016  * All rights reserved.
+00017  *
+00018  * Redistribution and use in source and binary forms, with or without
+00019  * modification, are permitted provided that the following conditions
+00020  * are met:
+00021  * 1. Redistributions of source code must retain the above copyright
+00022  *    notice, this list of conditions and the following disclaimer.
+00023  * 2. Redistributions in binary form must reproduce the above copyright
+00024  *    notice, this list of conditions and the following disclaimer in the
+00025  *    documentation and/or other materials provided with the distribution.
+00026  * 3. The name of the author may not be used to endorse or promote
+00027  *    products derived from this software without specific prior
+00028  *    written permission.
+00029  *
+00030  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00031  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00032  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00033  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00034  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00035  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00036  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00037  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00038  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00039  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00040  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00041  *
+00042  * This file is part of the uIP TCP/IP stack.
+00043  *
+00044  * $Id: smtp.h,v 1.4 2006/06/11 21:46:37 adam Exp $
+00045  *
+00046  */
+00047 #ifndef __SMTP_H__
+00048 #define __SMTP_H__
+00049 
+00050 #include "uipopt.h"
+00051 
+00052 /**
+00053  * Error number that signifies a non-error condition.
+00054  */
+00055 #define SMTP_ERR_OK 0
+00056 
+00057 /**
+00058  * Callback function that is called when an e-mail transmission is
+00059  * done.
+00060  *
+00061  * This function must be implemented by the module that uses the SMTP
+00062  * module.
+00063  *
+00064  * \param error The number of the error if an error occured, or
+00065  * SMTP_ERR_OK.
+00066  */
+00067 void smtp_done(unsigned char error);
+00068 
+00069 void smtp_init(void);
+00070 
+00071 /* Functions. */
+00072 void smtp_configure(char *localhostname, u16_t *smtpserver);
+00073 unsigned char smtp_send(char *to, char *from,
+00074                         char *subject, char *msg,
+00075                         u16_t msglen);
+00076 #define SMTP_SEND(to, cc, from, subject, msg) \
+00077         smtp_send(to, cc, from, subject, msg, strlen(msg))
+00078 
+00079 void smtp_appcall(void);
+00080 
+00081 struct smtp_state {
+00082   u8_t state;
+00083   char *to;
+00084   char *from;
+00085   char *subject;
+00086   char *msg;
+00087   u16_t msglen;
+00088   
+00089   u16_t sentlen, textlen;
+00090   u16_t sendptr;
+00091 
+00092 };
+00093 
+00094 
+00095 #ifndef UIP_APPCALL
+00096 #define UIP_APPCALL     smtp_appcall
+00097 #endif
+00098 typedef struct smtp_state uip_tcp_appstate_t;
+00099 
+00100 
+00101 #endif /* __SMTP_H__ */
+00102 
+00103 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00176.html b/components/net/uip/doc/html/a00176.html new file mode 100644 index 0000000000..100bf7aa62 --- /dev/null +++ b/components/net/uip/doc/html/a00176.html @@ -0,0 +1,148 @@ + + +uIP 1.0: apps/telnetd/shell.c Source File + + + + + + +

apps/telnetd/shell.c

00001  /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. The name of the author may not be used to endorse or promote
+00014  *    products derived from this software without specific prior
+00015  *    written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00018  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00023  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00026  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00027  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack.
+00030  *
+00031  * $Id: shell.c,v 1.1 2006/06/07 09:43:54 adam Exp $
+00032  *
+00033  */
+00034 
+00035 #include "shell.h"
+00036 
+00037 #include <string.h>
+00038 
+00039 struct ptentry {
+00040   char *commandstr;
+00041   void (* pfunc)(char *str);
+00042 };
+00043 
+00044 #define SHELL_PROMPT "uIP 1.0> "
+00045 
+00046 /*---------------------------------------------------------------------------*/
+00047 static void
+00048 parse(register char *str, struct ptentry *t)
+00049 {
+00050   struct ptentry *p;
+00051   for(p = t; p->commandstr != NULL; ++p) {
+00052     if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0) {
+00053       break;
+00054     }
+00055   }
+00056 
+00057   p->pfunc(str);
+00058 }
+00059 /*---------------------------------------------------------------------------*/
+00060 static void
+00061 inttostr(register char *str, unsigned int i)
+00062 {
+00063   str[0] = '0' + i / 100;
+00064   if(str[0] == '0') {
+00065     str[0] = ' ';
+00066   }
+00067   str[1] = '0' + (i / 10) % 10;
+00068   if(str[0] == ' ' && str[1] == '0') {
+00069     str[1] = ' ';
+00070   }
+00071   str[2] = '0' + i % 10;
+00072   str[3] = ' ';
+00073   str[4] = 0;
+00074 }
+00075 /*---------------------------------------------------------------------------*/
+00076 static void
+00077 help(char *str)
+00078 {
+00079   shell_output("Available commands:", "");
+00080   shell_output("stats   - show network statistics", "");
+00081   shell_output("conn    - show TCP connections", "");
+00082   shell_output("help, ? - show help", "");
+00083   shell_output("exit    - exit shell", "");
+00084 }
+00085 /*---------------------------------------------------------------------------*/
+00086 static void
+00087 unknown(char *str)
+00088 {
+00089   if(strlen(str) > 0) {
+00090     shell_output("Unknown command: ", str);
+00091   }
+00092 }
+00093 /*---------------------------------------------------------------------------*/
+00094 static struct ptentry parsetab[] =
+00095   {{"stats", help},
+00096    {"conn", help},
+00097    {"help", help},
+00098    {"exit", shell_quit},
+00099    {"?", help},
+00100 
+00101    /* Default action */
+00102    {NULL, unknown}};
+00103 /*---------------------------------------------------------------------------*/
+00104 void
+00105 shell_init(void)
+00106 {
+00107 }
+00108 /*---------------------------------------------------------------------------*/
+00109 void
+00110 shell_start(void)
+00111 {
+00112   shell_output("uIP command shell", "");
+00113   shell_output("Type '?' and return for help", "");
+00114   shell_prompt(SHELL_PROMPT);
+00115 }
+00116 /*---------------------------------------------------------------------------*/
+00117 void
+00118 shell_input(char *cmd)
+00119 {
+00120   parse(cmd, parsetab);
+00121   shell_prompt(SHELL_PROMPT);
+00122 }
+00123 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00177.html b/components/net/uip/doc/html/a00177.html new file mode 100644 index 0000000000..2126707f18 --- /dev/null +++ b/components/net/uip/doc/html/a00177.html @@ -0,0 +1,129 @@ + + +uIP 1.0: apps/telnetd/shell.h Source File + + + + + + +

apps/telnetd/shell.h

Go to the documentation of this file.
00001 /**
+00002  * \file
+00003  * Interface for the Contiki shell.
+00004  * \author Adam Dunkels <adam@dunkels.com>
+00005  *
+00006  * Some of the functions declared in this file must be implemented as
+00007  * a shell back-end in the architecture specific files of a Contiki
+00008  * port.
+00009  */
+00010 
+00011 
+00012 /*
+00013  * Copyright (c) 2003, Adam Dunkels.
+00014  * All rights reserved.
+00015  *
+00016  * Redistribution and use in source and binary forms, with or without
+00017  * modification, are permitted provided that the following conditions
+00018  * are met:
+00019  * 1. Redistributions of source code must retain the above copyright
+00020  *    notice, this list of conditions and the following disclaimer.
+00021  * 2. Redistributions in binary form must reproduce the above copyright
+00022  *    notice, this list of conditions and the following disclaimer in the
+00023  *    documentation and/or other materials provided with the distribution.
+00024  * 3. The name of the author may not be used to endorse or promote
+00025  *    products derived from this software without specific prior
+00026  *    written permission.
+00027  *
+00028  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00029  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00030  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00031  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00032  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00033  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00034  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00035  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00036  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00037  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00038  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00039  *
+00040  * This file is part of the Contiki desktop OS.
+00041  *
+00042  * $Id: shell.h,v 1.1 2006/06/07 09:43:54 adam Exp $
+00043  *
+00044  */
+00045 #ifndef __SHELL_H__
+00046 #define __SHELL_H__
+00047 
+00048 /**
+00049  * Initialize the shell.
+00050  *
+00051  * Called when the shell front-end process starts. This function may
+00052  * be used to start listening for signals.
+00053  */
+00054 void shell_init(void);
+00055 
+00056 /**
+00057  * Start the shell back-end.
+00058  *
+00059  * Called by the front-end when a new shell is started.
+00060  */
+00061 void shell_start(void);
+00062 
+00063 /**
+00064  * Process a shell command.
+00065  *
+00066  * This function will be called by the shell GUI / telnet server whan
+00067  * a command has been entered that should be processed by the shell
+00068  * back-end.
+00069  *
+00070  * \param command The command to be processed.
+00071  */
+00072 void shell_input(char *command);
+00073 
+00074 /**
+00075  * Quit the shell.
+00076  *
+00077  */
+00078 void shell_quit(char *);
+00079 
+00080 
+00081 /**
+00082  * Print a string to the shell window.
+00083  *
+00084  * This function is implemented by the shell GUI / telnet server and
+00085  * can be called by the shell back-end to output a string in the
+00086  * shell window. The string is automatically appended with a linebreak.
+00087  *
+00088  * \param str1 The first half of the string to be output.
+00089  * \param str2 The second half of the string to be output.
+00090  */
+00091 void shell_output(char *str1, char *str2);
+00092 
+00093 /**
+00094  * Print a prompt to the shell window.
+00095  *
+00096  * This function can be used by the shell back-end to print out a
+00097  * prompt to the shell window.
+00098  *
+00099  * \param prompt The prompt to be printed.
+00100  *
+00101  */
+00102 void shell_prompt(char *prompt);
+00103 
+00104 #endif /* __SHELL_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00178.html b/components/net/uip/doc/html/a00178.html new file mode 100644 index 0000000000..9b19f4e723 --- /dev/null +++ b/components/net/uip/doc/html/a00178.html @@ -0,0 +1,375 @@ + + +uIP 1.0: apps/telnetd/telnetd.c Source File + + + + + + +

apps/telnetd/telnetd.c

00001 /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. The name of the author may not be used to endorse or promote
+00014  *    products derived from this software without specific prior
+00015  *    written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00018  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00023  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00026  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00027  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $
+00032  *
+00033  */
+00034 
+00035 #include "uip.h"
+00036 #include "telnetd.h"
+00037 #include "memb.h"
+00038 #include "shell.h"
+00039 
+00040 #include <string.h>
+00041 
+00042 #define ISO_nl       0x0a
+00043 #define ISO_cr       0x0d
+00044 
+00045 struct telnetd_line {
+00046   char line[TELNETD_CONF_LINELEN];
+00047 };
+00048 MEMB(linemem, struct telnetd_line, TELNETD_CONF_NUMLINES);
+00049 
+00050 #define STATE_NORMAL 0
+00051 #define STATE_IAC    1
+00052 #define STATE_WILL   2
+00053 #define STATE_WONT   3
+00054 #define STATE_DO     4
+00055 #define STATE_DONT   5
+00056 #define STATE_CLOSE  6
+00057 
+00058 static struct telnetd_state s;
+00059 
+00060 #define TELNET_IAC   255
+00061 #define TELNET_WILL  251
+00062 #define TELNET_WONT  252
+00063 #define TELNET_DO    253
+00064 #define TELNET_DONT  254
+00065 /*---------------------------------------------------------------------------*/
+00066 static char *
+00067 alloc_line(void)
+00068 {
+00069   return memb_alloc(&linemem);
+00070 }
+00071 /*---------------------------------------------------------------------------*/
+00072 static void
+00073 dealloc_line(char *line)
+00074 {
+00075   memb_free(&linemem, line);
+00076 }
+00077 /*---------------------------------------------------------------------------*/
+00078 void
+00079 shell_quit(char *str)
+00080 {
+00081   s.state = STATE_CLOSE;
+00082 }
+00083 /*---------------------------------------------------------------------------*/
+00084 static void
+00085 sendline(char *line)
+00086 {
+00087   static unsigned int i;
+00088   
+00089   for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00090     if(s.lines[i] == NULL) {
+00091       s.lines[i] = line;
+00092       break;
+00093     }
+00094   }
+00095   if(i == TELNETD_CONF_NUMLINES) {
+00096     dealloc_line(line);
+00097   }
+00098 }
+00099 /*---------------------------------------------------------------------------*/
+00100 void
+00101 shell_prompt(char *str)
+00102 {
+00103   char *line;
+00104   line = alloc_line();
+00105   if(line != NULL) {
+00106     strncpy(line, str, TELNETD_CONF_LINELEN);
+00107     /*    petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
+00108     sendline(line);
+00109   }
+00110 }
+00111 /*---------------------------------------------------------------------------*/
+00112 void
+00113 shell_output(char *str1, char *str2)
+00114 {
+00115   static unsigned len;
+00116   char *line;
+00117 
+00118   line = alloc_line();
+00119   if(line != NULL) {
+00120     len = strlen(str1);
+00121     strncpy(line, str1, TELNETD_CONF_LINELEN);
+00122     if(len < TELNETD_CONF_LINELEN) {
+00123       strncpy(line + len, str2, TELNETD_CONF_LINELEN - len);
+00124     }
+00125     len = strlen(line);
+00126     if(len < TELNETD_CONF_LINELEN - 2) {
+00127       line[len] = ISO_cr;
+00128       line[len+1] = ISO_nl;
+00129       line[len+2] = 0;
+00130     }
+00131     /*    petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
+00132     sendline(line);
+00133   }
+00134 }
+00135 /*---------------------------------------------------------------------------*/
+00136 void
+00137 telnetd_init(void)
+00138 {
+00139   uip_listen(HTONS(23));
+00140   memb_init(&linemem);
+00141   shell_init();
+00142 }
+00143 /*---------------------------------------------------------------------------*/
+00144 static void
+00145 acked(void)
+00146 {
+00147   static unsigned int i;
+00148   
+00149   while(s.numsent > 0) {
+00150     dealloc_line(s.lines[0]);
+00151     for(i = 1; i < TELNETD_CONF_NUMLINES; ++i) {
+00152       s.lines[i - 1] = s.lines[i];
+00153     }
+00154     s.lines[TELNETD_CONF_NUMLINES - 1] = NULL;
+00155     --s.numsent;
+00156   }
+00157 }
+00158 /*---------------------------------------------------------------------------*/
+00159 static void
+00160 senddata(void)
+00161 {
+00162   static char *bufptr, *lineptr;
+00163   static int buflen, linelen;
+00164   
+00165   bufptr = uip_appdata;
+00166   buflen = 0;
+00167   for(s.numsent = 0; s.numsent < TELNETD_CONF_NUMLINES &&
+00168         s.lines[s.numsent] != NULL ; ++s.numsent) {
+00169     lineptr = s.lines[s.numsent];
+00170     linelen = strlen(lineptr);
+00171     if(linelen > TELNETD_CONF_LINELEN) {
+00172       linelen = TELNETD_CONF_LINELEN;
+00173     }
+00174     if(buflen + linelen < uip_mss()) {
+00175       memcpy(bufptr, lineptr, linelen);
+00176       bufptr += linelen;
+00177       buflen += linelen;
+00178     } else {
+00179       break;
+00180     }
+00181   }
+00182   uip_send(uip_appdata, buflen);
+00183 }
+00184 /*---------------------------------------------------------------------------*/
+00185 static void
+00186 closed(void)
+00187 {
+00188   static unsigned int i;
+00189   
+00190   for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00191     if(s.lines[i] != NULL) {
+00192       dealloc_line(s.lines[i]);
+00193     }
+00194   }
+00195 }
+00196 /*---------------------------------------------------------------------------*/
+00197 static void
+00198 get_char(u8_t c)
+00199 {
+00200   if(c == ISO_cr) {
+00201     return;
+00202   }
+00203   
+00204   s.buf[(int)s.bufptr] = c;
+00205   if(s.buf[(int)s.bufptr] == ISO_nl ||
+00206      s.bufptr == sizeof(s.buf) - 1) {
+00207     if(s.bufptr > 0) {
+00208       s.buf[(int)s.bufptr] = 0;
+00209       /*      petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/
+00210     }
+00211     shell_input(s.buf);
+00212     s.bufptr = 0;
+00213   } else {
+00214     ++s.bufptr;
+00215   }
+00216 }
+00217 /*---------------------------------------------------------------------------*/
+00218 static void
+00219 sendopt(u8_t option, u8_t value)
+00220 {
+00221   char *line;
+00222   line = alloc_line();
+00223   if(line != NULL) {
+00224     line[0] = TELNET_IAC;
+00225     line[1] = option;
+00226     line[2] = value;
+00227     line[3] = 0;
+00228     sendline(line);
+00229   }
+00230 }
+00231 /*---------------------------------------------------------------------------*/
+00232 static void
+00233 newdata(void)
+00234 {
+00235   u16_t len;
+00236   u8_t c;
+00237   char *dataptr;
+00238     
+00239   
+00240   len = uip_datalen();
+00241   dataptr = (char *)uip_appdata;
+00242   
+00243   while(len > 0 && s.bufptr < sizeof(s.buf)) {
+00244     c = *dataptr;
+00245     ++dataptr;
+00246     --len;
+00247     switch(s.state) {
+00248     case STATE_IAC:
+00249       if(c == TELNET_IAC) {
+00250         get_char(c);
+00251         s.state = STATE_NORMAL;
+00252       } else {
+00253         switch(c) {
+00254         case TELNET_WILL:
+00255           s.state = STATE_WILL;
+00256           break;
+00257         case TELNET_WONT:
+00258           s.state = STATE_WONT;
+00259           break;
+00260         case TELNET_DO:
+00261           s.state = STATE_DO;
+00262           break;
+00263         case TELNET_DONT:
+00264           s.state = STATE_DONT;
+00265           break;
+00266         default:
+00267           s.state = STATE_NORMAL;
+00268           break;
+00269         }
+00270       }
+00271       break;
+00272     case STATE_WILL:
+00273       /* Reply with a DONT */
+00274       sendopt(TELNET_DONT, c);
+00275       s.state = STATE_NORMAL;
+00276       break;
+00277       
+00278     case STATE_WONT:
+00279       /* Reply with a DONT */
+00280       sendopt(TELNET_DONT, c);
+00281       s.state = STATE_NORMAL;
+00282       break;
+00283     case STATE_DO:
+00284       /* Reply with a WONT */
+00285       sendopt(TELNET_WONT, c);
+00286       s.state = STATE_NORMAL;
+00287       break;
+00288     case STATE_DONT:
+00289       /* Reply with a WONT */
+00290       sendopt(TELNET_WONT, c);
+00291       s.state = STATE_NORMAL;
+00292       break;
+00293     case STATE_NORMAL:
+00294       if(c == TELNET_IAC) {
+00295         s.state = STATE_IAC;
+00296       } else {
+00297         get_char(c);
+00298       }
+00299       break;
+00300     }
+00301 
+00302     
+00303   }
+00304   
+00305 }
+00306 /*---------------------------------------------------------------------------*/
+00307 void
+00308 telnetd_appcall(void)
+00309 {
+00310   static unsigned int i;
+00311   if(uip_connected()) {
+00312     /*    tcp_markconn(uip_conn, &s);*/
+00313     for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
+00314       s.lines[i] = NULL;
+00315     }
+00316     s.bufptr = 0;
+00317     s.state = STATE_NORMAL;
+00318 
+00319     shell_start();
+00320   }
+00321 
+00322   if(s.state == STATE_CLOSE) {
+00323     s.state = STATE_NORMAL;
+00324     uip_close();
+00325     return;
+00326   }
+00327   
+00328   if(uip_closed() ||
+00329      uip_aborted() ||
+00330      uip_timedout()) {
+00331     closed();
+00332   }
+00333   
+00334   if(uip_acked()) {
+00335     acked();
+00336   }
+00337   
+00338   if(uip_newdata()) {
+00339     newdata();
+00340   }
+00341   
+00342   if(uip_rexmit() ||
+00343      uip_newdata() ||
+00344      uip_acked() ||
+00345      uip_connected() ||
+00346      uip_poll()) {
+00347     senddata();
+00348   }
+00349 }
+00350 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00179.html b/components/net/uip/doc/html/a00179.html new file mode 100644 index 0000000000..139d6f07f8 --- /dev/null +++ b/components/net/uip/doc/html/a00179.html @@ -0,0 +1,88 @@ + + +uIP 1.0: apps/telnetd/telnetd.h Source File + + + + + + +

apps/telnetd/telnetd.h

00001 /*
+00002  * Copyright (c) 2003, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above
+00011  *    copyright notice, this list of conditions and the following
+00012  *    disclaimer in the documentation and/or other materials provided
+00013  *    with the distribution.
+00014  * 3. The name of the author may not be used to endorse or promote
+00015  *    products derived from this software without specific prior
+00016  *    written permission.
+00017  *
+00018  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00019  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00020  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00021  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00022  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00023  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00024  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00025  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00026  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00027  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00028  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00029  *
+00030  * This file is part of the uIP TCP/IP stack
+00031  *
+00032  * $Id: telnetd.h,v 1.2 2006/06/07 09:43:54 adam Exp $
+00033  *
+00034  */
+00035 #ifndef __TELNETD_H__
+00036 #define __TELNETD_H__
+00037 
+00038 #include "uipopt.h"
+00039 
+00040 void telnetd_appcall(void);
+00041 
+00042 #ifndef TELNETD_CONF_LINELEN
+00043 #define TELNETD_CONF_LINELEN 40
+00044 #endif
+00045 #ifndef TELNETD_CONF_NUMLINES
+00046 #define TELNETD_CONF_NUMLINES 16
+00047 #endif
+00048 
+00049 struct telnetd_state {
+00050   char *lines[TELNETD_CONF_NUMLINES];
+00051   char buf[TELNETD_CONF_LINELEN];
+00052   char bufptr;
+00053   u8_t numsent;
+00054   u8_t state;
+00055 };
+00056 
+00057 typedef struct telnetd_state uip_tcp_appstate_t;
+00058 
+00059 #ifndef UIP_APPCALL
+00060 #define UIP_APPCALL     telnetd_appcall
+00061 #endif
+00062 
+00063 #endif /* __TELNETD_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00180.html b/components/net/uip/doc/html/a00180.html new file mode 100644 index 0000000000..6f1abbc686 --- /dev/null +++ b/components/net/uip/doc/html/a00180.html @@ -0,0 +1,464 @@ + + +uIP 1.0: apps/webclient/webclient.c Source File + + + + + + +

apps/webclient/webclient.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup webclient Web client
+00008  * @{
+00009  *
+00010  * This example shows a HTTP client that is able to download web pages
+00011  * and files from web servers. It requires a number of callback
+00012  * functions to be implemented by the module that utilizes the code:
+00013  * webclient_datahandler(), webclient_connected(),
+00014  * webclient_timedout(), webclient_aborted(), webclient_closed().
+00015  */
+00016 
+00017 /**
+00018  * \file
+00019  * Implementation of the HTTP client.
+00020  * \author Adam Dunkels <adam@dunkels.com>
+00021  */
+00022 
+00023 /*
+00024  * Copyright (c) 2002, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above
+00033  *    copyright notice, this list of conditions and the following
+00034  *    disclaimer in the documentation and/or other materials provided
+00035  *    with the distribution.
+00036  * 3. The name of the author may not be used to endorse or promote
+00037  *    products derived from this software without specific prior
+00038  *    written permission.
+00039  *
+00040  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00041  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00042  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00043  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00044  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00045  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00046  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00047  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00048  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00049  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00050  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00051  *
+00052  * This file is part of the uIP TCP/IP stack.
+00053  *
+00054  * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00055  *
+00056  */
+00057 
+00058 #include "uip.h"
+00059 #include "uiplib.h"
+00060 #include "webclient.h"
+00061 #include "resolv.h"
+00062 
+00063 #include <string.h>
+00064 
+00065 #define WEBCLIENT_TIMEOUT 100
+00066 
+00067 #define WEBCLIENT_STATE_STATUSLINE 0
+00068 #define WEBCLIENT_STATE_HEADERS    1
+00069 #define WEBCLIENT_STATE_DATA       2
+00070 #define WEBCLIENT_STATE_CLOSE      3
+00071 
+00072 #define HTTPFLAG_NONE   0
+00073 #define HTTPFLAG_OK     1
+00074 #define HTTPFLAG_MOVED  2
+00075 #define HTTPFLAG_ERROR  3
+00076 
+00077 
+00078 #define ISO_nl       0x0a
+00079 #define ISO_cr       0x0d
+00080 #define ISO_space    0x20
+00081 
+00082 
+00083 static struct webclient_state s;
+00084 
+00085 /*-----------------------------------------------------------------------------------*/
+00086 char *
+00087 webclient_mimetype(void)
+00088 {
+00089   return s.mimetype;
+00090 }
+00091 /*-----------------------------------------------------------------------------------*/
+00092 char *
+00093 webclient_filename(void)
+00094 {
+00095   return s.file;
+00096 }
+00097 /*-----------------------------------------------------------------------------------*/
+00098 char *
+00099 webclient_hostname(void)
+00100 {
+00101   return s.host;
+00102 }
+00103 /*-----------------------------------------------------------------------------------*/
+00104 unsigned short
+00105 webclient_port(void)
+00106 {
+00107   return s.port;
+00108 }
+00109 /*-----------------------------------------------------------------------------------*/
+00110 void
+00111 webclient_init(void)
+00112 {
+00113 
+00114 }
+00115 /*-----------------------------------------------------------------------------------*/
+00116 static void
+00117 init_connection(void)
+00118 {
+00119   s.state = WEBCLIENT_STATE_STATUSLINE;
+00120 
+00121   s.getrequestleft = sizeof(http_get) - 1 + 1 +
+00122     sizeof(http_10) - 1 +
+00123     sizeof(http_crnl) - 1 +
+00124     sizeof(http_host) - 1 +
+00125     sizeof(http_crnl) - 1 +
+00126     strlen(http_user_agent_fields) +
+00127     strlen(s.file) + strlen(s.host);
+00128   s.getrequestptr = 0;
+00129 
+00130   s.httpheaderlineptr = 0;
+00131 }
+00132 /*-----------------------------------------------------------------------------------*/
+00133 void
+00134 webclient_close(void)
+00135 {
+00136   s.state = WEBCLIENT_STATE_CLOSE;
+00137 }
+00138 /*-----------------------------------------------------------------------------------*/
+00139 unsigned char
+00140 webclient_get(char *host, u16_t port, char *file)
+00141 {
+00142   struct uip_conn *conn;
+00143   uip_ipaddr_t *ipaddr;
+00144   static uip_ipaddr_t addr;
+00145   
+00146   /* First check if the host is an IP address. */
+00147   ipaddr = &addr;
+00148   if(uiplib_ipaddrconv(host, (unsigned char *)addr) == 0) {
+00149     ipaddr = (uip_ipaddr_t *)resolv_lookup(host);
+00150     
+00151     if(ipaddr == NULL) {
+00152       return 0;
+00153     }
+00154   }
+00155   
+00156   conn = uip_connect(ipaddr, htons(port));
+00157   
+00158   if(conn == NULL) {
+00159     return 0;
+00160   }
+00161   
+00162   s.port = port;
+00163   strncpy(s.file, file, sizeof(s.file));
+00164   strncpy(s.host, host, sizeof(s.host));
+00165   
+00166   init_connection();
+00167   return 1;
+00168 }
+00169 /*-----------------------------------------------------------------------------------*/
+00170 static unsigned char *
+00171 copy_string(unsigned char *dest,
+00172             const unsigned char *src, unsigned char len)
+00173 {
+00174   strncpy(dest, src, len);
+00175   return dest + len;
+00176 }
+00177 /*-----------------------------------------------------------------------------------*/
+00178 static void
+00179 senddata(void)
+00180 {
+00181   u16_t len;
+00182   char *getrequest;
+00183   char *cptr;
+00184   
+00185   if(s.getrequestleft > 0) {
+00186     cptr = getrequest = (char *)uip_appdata;
+00187 
+00188     cptr = copy_string(cptr, http_get, sizeof(http_get) - 1);
+00189     cptr = copy_string(cptr, s.file, strlen(s.file));
+00190     *cptr++ = ISO_space;
+00191     cptr = copy_string(cptr, http_10, sizeof(http_10) - 1);
+00192 
+00193     cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);
+00194     
+00195     cptr = copy_string(cptr, http_host, sizeof(http_host) - 1);
+00196     cptr = copy_string(cptr, s.host, strlen(s.host));
+00197     cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);
+00198 
+00199     cptr = copy_string(cptr, http_user_agent_fields,
+00200                        strlen(http_user_agent_fields));
+00201     
+00202     len = s.getrequestleft > uip_mss()?
+00203       uip_mss():
+00204       s.getrequestleft;
+00205     uip_send(&(getrequest[s.getrequestptr]), len);
+00206   }
+00207 }
+00208 /*-----------------------------------------------------------------------------------*/
+00209 static void
+00210 acked(void)
+00211 {
+00212   u16_t len;
+00213   
+00214   if(s.getrequestleft > 0) {
+00215     len = s.getrequestleft > uip_mss()?
+00216       uip_mss():
+00217       s.getrequestleft;
+00218     s.getrequestleft -= len;
+00219     s.getrequestptr += len;
+00220   }
+00221 }
+00222 /*-----------------------------------------------------------------------------------*/
+00223 static u16_t
+00224 parse_statusline(u16_t len)
+00225 {
+00226   char *cptr;
+00227   
+00228   while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {
+00229     s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
+00230     ++((char *)uip_appdata);
+00231     --len;
+00232     if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {
+00233 
+00234       if((strncmp(s.httpheaderline, http_10,
+00235                   sizeof(http_10) - 1) == 0) ||
+00236          (strncmp(s.httpheaderline, http_11,
+00237                   sizeof(http_11) - 1) == 0)) {
+00238         cptr = &(s.httpheaderline[9]);
+00239         s.httpflag = HTTPFLAG_NONE;
+00240         if(strncmp(cptr, http_200, sizeof(http_200) - 1) == 0) {
+00241           /* 200 OK */
+00242           s.httpflag = HTTPFLAG_OK;
+00243         } else if(strncmp(cptr, http_301, sizeof(http_301) - 1) == 0 ||
+00244                   strncmp(cptr, http_302, sizeof(http_302) - 1) == 0) {
+00245           /* 301 Moved permanently or 302 Found. Location: header line
+00246              will contain thw new location. */
+00247           s.httpflag = HTTPFLAG_MOVED;
+00248         } else {
+00249           s.httpheaderline[s.httpheaderlineptr - 1] = 0;
+00250         }
+00251       } else {
+00252         uip_abort();
+00253         webclient_aborted();
+00254         return 0;
+00255       }
+00256       
+00257       /* We're done parsing the status line, so we reset the pointer
+00258          and start parsing the HTTP headers.*/
+00259       s.httpheaderlineptr = 0;
+00260       s.state = WEBCLIENT_STATE_HEADERS;
+00261       break;
+00262     } else {
+00263       ++s.httpheaderlineptr;
+00264     }
+00265   }
+00266   return len;
+00267 }
+00268 /*-----------------------------------------------------------------------------------*/
+00269 static char
+00270 casecmp(char *str1, const char *str2, char len)
+00271 {
+00272   static char c;
+00273   
+00274   while(len > 0) {
+00275     c = *str1;
+00276     /* Force lower-case characters. */
+00277     if(c & 0x40) {
+00278       c |= 0x20;
+00279     }
+00280     if(*str2 != c) {
+00281       return 1;
+00282     }
+00283     ++str1;
+00284     ++str2;
+00285     --len;
+00286   }
+00287   return 0;
+00288 }
+00289 /*-----------------------------------------------------------------------------------*/
+00290 static u16_t
+00291 parse_headers(u16_t len)
+00292 {
+00293   char *cptr;
+00294   static unsigned char i;
+00295   
+00296   while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {
+00297     s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
+00298     ++((char *)uip_appdata);
+00299     --len;
+00300     if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {
+00301       /* We have an entire HTTP header line in s.httpheaderline, so
+00302          we parse it. */
+00303       if(s.httpheaderline[0] == ISO_cr) {
+00304         /* This was the last header line (i.e., and empty "\r\n"), so
+00305            we are done with the headers and proceed with the actual
+00306            data. */
+00307         s.state = WEBCLIENT_STATE_DATA;
+00308         return len;
+00309       }
+00310 
+00311       s.httpheaderline[s.httpheaderlineptr - 1] = 0;
+00312       /* Check for specific HTTP header fields. */
+00313       if(casecmp(s.httpheaderline, http_content_type,
+00314                      sizeof(http_content_type) - 1) == 0) {
+00315         /* Found Content-type field. */
+00316         cptr = strchr(s.httpheaderline, ';');
+00317         if(cptr != NULL) {
+00318           *cptr = 0;
+00319         }
+00320         strncpy(s.mimetype, s.httpheaderline +
+00321                 sizeof(http_content_type) - 1, sizeof(s.mimetype));
+00322       } else if(casecmp(s.httpheaderline, http_location,
+00323                             sizeof(http_location) - 1) == 0) {
+00324         cptr = s.httpheaderline +
+00325           sizeof(http_location) - 1;
+00326         
+00327         if(strncmp(cptr, http_http, 7) == 0) {
+00328           cptr += 7;
+00329           for(i = 0; i < s.httpheaderlineptr - 7; ++i) {
+00330             if(*cptr == 0 ||
+00331                *cptr == '/' ||
+00332                *cptr == ' ' ||
+00333                *cptr == ':') {
+00334               s.host[i] = 0;
+00335               break;
+00336             }
+00337             s.host[i] = *cptr;
+00338             ++cptr;
+00339           }
+00340         }
+00341         strncpy(s.file, cptr, sizeof(s.file));
+00342         /*      s.file[s.httpheaderlineptr - i] = 0;*/
+00343       }
+00344 
+00345 
+00346       /* We're done parsing, so we reset the pointer and start the
+00347          next line. */
+00348       s.httpheaderlineptr = 0;
+00349     } else {
+00350       ++s.httpheaderlineptr;
+00351     }
+00352   }
+00353   return len;
+00354 }
+00355 /*-----------------------------------------------------------------------------------*/
+00356 static void
+00357 newdata(void)
+00358 {
+00359   u16_t len;
+00360 
+00361   len = uip_datalen();
+00362 
+00363   if(s.state == WEBCLIENT_STATE_STATUSLINE) {
+00364     len = parse_statusline(len);
+00365   }
+00366   
+00367   if(s.state == WEBCLIENT_STATE_HEADERS && len > 0) {
+00368     len = parse_headers(len);
+00369   }
+00370 
+00371   if(len > 0 && s.state == WEBCLIENT_STATE_DATA &&
+00372      s.httpflag != HTTPFLAG_MOVED) {
+00373     webclient_datahandler((char *)uip_appdata, len);
+00374   }
+00375 }
+00376 /*-----------------------------------------------------------------------------------*/
+00377 void
+00378 webclient_appcall(void)
+00379 {
+00380   if(uip_connected()) {
+00381     s.timer = 0;
+00382     s.state = WEBCLIENT_STATE_STATUSLINE;
+00383     senddata();
+00384     webclient_connected();
+00385     return;
+00386   }
+00387 
+00388   if(s.state == WEBCLIENT_STATE_CLOSE) {
+00389     webclient_closed();
+00390     uip_abort();
+00391     return;
+00392   }
+00393 
+00394   if(uip_aborted()) {
+00395     webclient_aborted();
+00396   }
+00397   if(uip_timedout()) {
+00398     webclient_timedout();
+00399   }
+00400 
+00401   
+00402   if(uip_acked()) {
+00403     s.timer = 0;
+00404     acked();
+00405   }
+00406   if(uip_newdata()) {
+00407     s.timer = 0;
+00408     newdata();
+00409   }
+00410   if(uip_rexmit() ||
+00411      uip_newdata() ||
+00412      uip_acked()) {
+00413     senddata();
+00414   } else if(uip_poll()) {
+00415     ++s.timer;
+00416     if(s.timer == WEBCLIENT_TIMEOUT) {
+00417       webclient_timedout();
+00418       uip_abort();
+00419       return;
+00420     }
+00421         /*    senddata();*/
+00422   }
+00423 
+00424   if(uip_closed()) {
+00425     if(s.httpflag != HTTPFLAG_MOVED) {
+00426       /* Send NULL data to signal EOF. */
+00427       webclient_datahandler(NULL, 0);
+00428     } else {
+00429       if(resolv_lookup(s.host) == NULL) {
+00430         resolv_query(s.host);
+00431       }
+00432       webclient_get(s.host, s.port, s.file);
+00433     }
+00434   }
+00435 }
+00436 /*-----------------------------------------------------------------------------------*/
+00437 
+00438 /** @} */
+00439 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00181.html b/components/net/uip/doc/html/a00181.html new file mode 100644 index 0000000000..4407232c44 --- /dev/null +++ b/components/net/uip/doc/html/a00181.html @@ -0,0 +1,253 @@ + + +uIP 1.0: apps/webclient/webclient.h Source File + + + + + + +

apps/webclient/webclient.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup webclient
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  * Header file for the HTTP client.
+00009  * \author Adam Dunkels <adam@dunkels.com>
+00010  */
+00011 
+00012 /*
+00013  * Copyright (c) 2002, Adam Dunkels.
+00014  * All rights reserved.
+00015  *
+00016  * Redistribution and use in source and binary forms, with or without
+00017  * modification, are permitted provided that the following conditions
+00018  * are met:
+00019  * 1. Redistributions of source code must retain the above copyright
+00020  *    notice, this list of conditions and the following disclaimer.
+00021  * 2. Redistributions in binary form must reproduce the above
+00022  *    copyright notice, this list of conditions and the following
+00023  *    disclaimer in the documentation and/or other materials provided
+00024  *    with the distribution.
+00025  * 3. The name of the author may not be used to endorse or promote
+00026  *    products derived from this software without specific prior
+00027  *    written permission.
+00028  *
+00029  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00030  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00031  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00032  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00033  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00034  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00035  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00036  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00037  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00038  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00039  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00040  *
+00041  * This file is part of the uIP TCP/IP stack.
+00042  *
+00043  * $Id: webclient.h,v 1.2 2006/06/11 21:46:37 adam Exp $
+00044  *
+00045  */
+00046 #ifndef __WEBCLIENT_H__
+00047 #define __WEBCLIENT_H__
+00048 
+00049 
+00050 #include "webclient-strings.h"
+00051 #include "uipopt.h"
+00052 
+00053 #define WEBCLIENT_CONF_MAX_URLLEN 100
+00054 
+00055 struct webclient_state {
+00056   u8_t timer;
+00057   u8_t state;
+00058   u8_t httpflag;
+00059 
+00060   u16_t port;
+00061   char host[40];
+00062   char file[WEBCLIENT_CONF_MAX_URLLEN];
+00063   u16_t getrequestptr;
+00064   u16_t getrequestleft;
+00065   
+00066   char httpheaderline[200];
+00067   u16_t httpheaderlineptr;
+00068 
+00069   char mimetype[32];
+00070 };
+00071 
+00072 typedef struct webclient_state uip_tcp_appstate_t;
+00073 #define UIP_APPCALL webclient_appcall
+00074 
+00075 /**
+00076  * Callback function that is called from the webclient code when HTTP
+00077  * data has been received.
+00078  *
+00079  * This function must be implemented by the module that uses the
+00080  * webclient code. The function is called from the webclient module
+00081  * when HTTP data has been received. The function is not called when
+00082  * HTTP headers are received, only for the actual data.
+00083  *
+00084  * \note This function is called many times, repetedly, when data is
+00085  * being received, and not once when all data has been received.
+00086  *
+00087  * \param data A pointer to the data that has been received.
+00088  * \param len The length of the data that has been received.
+00089  */
+00090 void webclient_datahandler(char *data, u16_t len);
+00091 
+00092 /**
+00093  * Callback function that is called from the webclient code when the
+00094  * HTTP connection has been connected to the web server.
+00095  *
+00096  * This function must be implemented by the module that uses the
+00097  * webclient code.
+00098  */
+00099 void webclient_connected(void);
+00100 
+00101 /**
+00102  * Callback function that is called from the webclient code if the
+00103  * HTTP connection to the web server has timed out.
+00104  *
+00105  * This function must be implemented by the module that uses the
+00106  * webclient code.
+00107  */
+00108 void webclient_timedout(void);
+00109 
+00110 /**
+00111  * Callback function that is called from the webclient code if the
+00112  * HTTP connection to the web server has been aborted by the web
+00113  * server.
+00114  *
+00115  * This function must be implemented by the module that uses the
+00116  * webclient code.
+00117  */
+00118 void webclient_aborted(void);
+00119 
+00120 /**
+00121  * Callback function that is called from the webclient code when the
+00122  * HTTP connection to the web server has been closed.
+00123  *
+00124  * This function must be implemented by the module that uses the
+00125  * webclient code.
+00126  */
+00127 void webclient_closed(void);
+00128 
+00129 
+00130 
+00131 /**
+00132  * Initialize the webclient module.
+00133  */
+00134 void webclient_init(void);
+00135 
+00136 /**
+00137  * Open an HTTP connection to a web server and ask for a file using
+00138  * the GET method.
+00139  *
+00140  * This function opens an HTTP connection to the specified web server
+00141  * and requests the specified file using the GET method. When the HTTP
+00142  * connection has been connected, the webclient_connected() callback
+00143  * function is called and when the HTTP data arrives the
+00144  * webclient_datahandler() callback function is called.
+00145  *
+00146  * The callback function webclient_timedout() is called if the web
+00147  * server could not be contacted, and the webclient_aborted() callback
+00148  * function is called if the HTTP connection is aborted by the web
+00149  * server.
+00150  *
+00151  * When the HTTP request has been completed and the HTTP connection is
+00152  * closed, the webclient_closed() callback function will be called.
+00153  *
+00154  * \note If the function is passed a host name, it must already be in
+00155  * the resolver cache in order for the function to connect to the web
+00156  * server. It is therefore up to the calling module to implement the
+00157  * resolver calls and the signal handler used for reporting a resolv
+00158  * query answer.
+00159  *
+00160  * \param host A pointer to a string containing either a host name or
+00161  * a numerical IP address in dotted decimal notation (e.g., 192.168.23.1).
+00162  *
+00163  * \param port The port number to which to connect, in host byte order.
+00164  *
+00165  * \param file A pointer to the name of the file to get.
+00166  *
+00167  * \retval 0 if the host name could not be found in the cache, or
+00168  * if a TCP connection could not be created.
+00169  *
+00170  * \retval 1 if the connection was initiated.
+00171  */
+00172 unsigned char webclient_get(char *host, u16_t port, char *file);
+00173 
+00174 /**
+00175  * Close the currently open HTTP connection.
+00176  */
+00177 void webclient_close(void);
+00178 void webclient_appcall(void);
+00179 
+00180 /**
+00181  * Obtain the MIME type of the current HTTP data stream.
+00182  *
+00183  * \return A pointer to a string contaning the MIME type. The string
+00184  * may be empty if no MIME type was reported by the web server.
+00185  */
+00186 char *webclient_mimetype(void);
+00187 
+00188 /**
+00189  * Obtain the filename of the current HTTP data stream.
+00190  *
+00191  * The filename of an HTTP request may be changed by the web server,
+00192  * and may therefore not be the same as when the original GET request
+00193  * was made with webclient_get(). This function is used for obtaining
+00194  * the current filename.
+00195  *
+00196  * \return A pointer to the current filename.
+00197  */
+00198 char *webclient_filename(void);
+00199 
+00200 /**
+00201  * Obtain the hostname of the current HTTP data stream.
+00202  *
+00203  * The hostname of the web server of an HTTP request may be changed
+00204  * by the web server, and may therefore not be the same as when the
+00205  * original GET request was made with webclient_get(). This function
+00206  * is used for obtaining the current hostname.
+00207  *
+00208  * \return A pointer to the current hostname.
+00209  */
+00210 char *webclient_hostname(void);
+00211 
+00212 /**
+00213  * Obtain the port number of the current HTTP data stream.
+00214  *
+00215  * The port number of an HTTP request may be changed by the web
+00216  * server, and may therefore not be the same as when the original GET
+00217  * request was made with webclient_get(). This function is used for
+00218  * obtaining the current port number.
+00219  *
+00220  * \return The port number of the current HTTP data stream, in host byte order.
+00221  */
+00222 unsigned short webclient_port(void);
+00223 
+00224 
+00225 
+00226 #endif /* __WEBCLIENT_H__ */
+00227 
+00228 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00182.html b/components/net/uip/doc/html/a00182.html new file mode 100644 index 0000000000..cb9d145797 --- /dev/null +++ b/components/net/uip/doc/html/a00182.html @@ -0,0 +1,228 @@ + + +uIP 1.0: apps/webserver/httpd-cgi.c Source File + + + + + + +

apps/webserver/httpd-cgi.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup httpd
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  *         Web server script interface
+00009  * \author
+00010  *         Adam Dunkels <adam@sics.se>
+00011  *
+00012  */
+00013 
+00014 /*
+00015  * Copyright (c) 2001-2006, Adam Dunkels.
+00016  * All rights reserved.
+00017  *
+00018  * Redistribution and use in source and binary forms, with or without
+00019  * modification, are permitted provided that the following conditions
+00020  * are met:
+00021  * 1. Redistributions of source code must retain the above copyright
+00022  *    notice, this list of conditions and the following disclaimer.
+00023  * 2. Redistributions in binary form must reproduce the above copyright
+00024  *    notice, this list of conditions and the following disclaimer in the
+00025  *    documentation and/or other materials provided with the distribution.
+00026  * 3. The name of the author may not be used to endorse or promote
+00027  *    products derived from this software without specific prior
+00028  *    written permission.
+00029  *
+00030  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00031  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00032  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00033  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00034  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00035  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00036  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00037  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00038  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00039  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00040  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00041  *
+00042  * This file is part of the uIP TCP/IP stack.
+00043  *
+00044  * $Id: httpd-cgi.c,v 1.2 2006/06/11 21:46:37 adam Exp $
+00045  *
+00046  */
+00047 
+00048 #include "uip.h"
+00049 #include "psock.h"
+00050 #include "httpd.h"
+00051 #include "httpd-cgi.h"
+00052 #include "httpd-fs.h"
+00053 
+00054 #include <stdio.h>
+00055 #include <string.h>
+00056 
+00057 HTTPD_CGI_CALL(file, "file-stats", file_stats);
+00058 HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats);
+00059 HTTPD_CGI_CALL(net, "net-stats", net_stats);
+00060 
+00061 static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, NULL };
+00062 
+00063 /*---------------------------------------------------------------------------*/
+00064 static
+00065 PT_THREAD(nullfunction(struct httpd_state *s, char *ptr))
+00066 {
+00067   PSOCK_BEGIN(&s->sout);
+00068   PSOCK_END(&s->sout);
+00069 }
+00070 /*---------------------------------------------------------------------------*/
+00071 httpd_cgifunction
+00072 httpd_cgi(char *name)
+00073 {
+00074   const struct httpd_cgi_call **f;
+00075 
+00076   /* Find the matching name in the table, return the function. */
+00077   for(f = calls; *f != NULL; ++f) {
+00078     if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) {
+00079       return (*f)->function;
+00080     }
+00081   }
+00082   return nullfunction;
+00083 }
+00084 /*---------------------------------------------------------------------------*/
+00085 static unsigned short
+00086 generate_file_stats(void *arg)
+00087 {
+00088   char *f = (char *)arg;
+00089   return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f));
+00090 }
+00091 /*---------------------------------------------------------------------------*/
+00092 static
+00093 PT_THREAD(file_stats(struct httpd_state *s, char *ptr))
+00094 {
+00095   PSOCK_BEGIN(&s->sout);
+00096 
+00097   PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1);
+00098   
+00099   PSOCK_END(&s->sout);
+00100 }
+00101 /*---------------------------------------------------------------------------*/
+00102 static const char closed[] =   /*  "CLOSED",*/
+00103 {0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0};
+00104 static const char syn_rcvd[] = /*  "SYN-RCVD",*/
+00105 {0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56,
+00106  0x44,  0};
+00107 static const char syn_sent[] = /*  "SYN-SENT",*/
+00108 {0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e,
+00109  0x54,  0};
+00110 static const char established[] = /*  "ESTABLISHED",*/
+00111 {0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48,
+00112  0x45, 0x44, 0};
+00113 static const char fin_wait_1[] = /*  "FIN-WAIT-1",*/
+00114 {0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+00115  0x54, 0x2d, 0x31, 0};
+00116 static const char fin_wait_2[] = /*  "FIN-WAIT-2",*/
+00117 {0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+00118  0x54, 0x2d, 0x32, 0};
+00119 static const char closing[] = /*  "CLOSING",*/
+00120 {0x43, 0x4c, 0x4f, 0x53, 0x49,
+00121  0x4e, 0x47, 0};
+00122 static const char time_wait[] = /*  "TIME-WAIT,"*/
+00123 {0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41,
+00124  0x49, 0x54, 0};
+00125 static const char last_ack[] = /*  "LAST-ACK"*/
+00126 {0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43,
+00127  0x4b, 0};
+00128 
+00129 static const char *states[] = {
+00130   closed,
+00131   syn_rcvd,
+00132   syn_sent,
+00133   established,
+00134   fin_wait_1,
+00135   fin_wait_2,
+00136   closing,
+00137   time_wait,
+00138   last_ack};
+00139   
+00140 
+00141 static unsigned short
+00142 generate_tcp_stats(void *arg)
+00143 {
+00144   struct uip_conn *conn;
+00145   struct httpd_state *s = (struct httpd_state *)arg;
+00146     
+00147   conn = &uip_conns[s->count];
+00148   return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
+00149                  "<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n",
+00150                  htons(conn->lport),
+00151                  htons(conn->ripaddr[0]) >> 8,
+00152                  htons(conn->ripaddr[0]) & 0xff,
+00153                  htons(conn->ripaddr[1]) >> 8,
+00154                  htons(conn->ripaddr[1]) & 0xff,
+00155                  htons(conn->rport),
+00156                  states[conn->tcpstateflags & UIP_TS_MASK],
+00157                  conn->nrtx,
+00158                  conn->timer,
+00159                  (uip_outstanding(conn))? '*':' ',
+00160                  (uip_stopped(conn))? '!':' ');
+00161 }
+00162 /*---------------------------------------------------------------------------*/
+00163 static
+00164 PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr))
+00165 {
+00166   
+00167   PSOCK_BEGIN(&s->sout);
+00168 
+00169   for(s->count = 0; s->count < UIP_CONNS; ++s->count) {
+00170     if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) {
+00171       PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s);
+00172     }
+00173   }
+00174 
+00175   PSOCK_END(&s->sout);
+00176 }
+00177 /*---------------------------------------------------------------------------*/
+00178 static unsigned short
+00179 generate_net_stats(void *arg)
+00180 {
+00181   struct httpd_state *s = (struct httpd_state *)arg;
+00182   return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
+00183                   "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]);
+00184 }
+00185 
+00186 static
+00187 PT_THREAD(net_stats(struct httpd_state *s, char *ptr))
+00188 {
+00189   PSOCK_BEGIN(&s->sout);
+00190 
+00191 #if UIP_STATISTICS
+00192 
+00193   for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t);
+00194       ++s->count) {
+00195     PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s);
+00196   }
+00197   
+00198 #endif /* UIP_STATISTICS */
+00199   
+00200   PSOCK_END(&s->sout);
+00201 }
+00202 /*---------------------------------------------------------------------------*/
+00203 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00183.html b/components/net/uip/doc/html/a00183.html new file mode 100644 index 0000000000..0c753470ba --- /dev/null +++ b/components/net/uip/doc/html/a00183.html @@ -0,0 +1,109 @@ + + +uIP 1.0: apps/webserver/httpd-cgi.h Source File + + + + + + +

apps/webserver/httpd-cgi.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup httpd
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  *         Web server script interface header file
+00009  * \author
+00010  *         Adam Dunkels <adam@sics.se>
+00011  *
+00012  */
+00013 
+00014 
+00015 
+00016 /*
+00017  * Copyright (c) 2001, Adam Dunkels.
+00018  * All rights reserved.
+00019  *
+00020  * Redistribution and use in source and binary forms, with or without
+00021  * modification, are permitted provided that the following conditions
+00022  * are met:
+00023  * 1. Redistributions of source code must retain the above copyright
+00024  *    notice, this list of conditions and the following disclaimer.
+00025  * 2. Redistributions in binary form must reproduce the above copyright
+00026  *    notice, this list of conditions and the following disclaimer in the
+00027  *    documentation and/or other materials provided with the distribution.
+00028  * 3. The name of the author may not be used to endorse or promote
+00029  *    products derived from this software without specific prior
+00030  *    written permission.
+00031  *
+00032  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00033  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00034  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00035  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00036  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00037  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00038  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00039  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00040  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00041  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00042  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00043  *
+00044  * This file is part of the uIP TCP/IP stack.
+00045  *
+00046  * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+00047  *
+00048  */
+00049 
+00050 #ifndef __HTTPD_CGI_H__
+00051 #define __HTTPD_CGI_H__
+00052 
+00053 #include "psock.h"
+00054 #include "httpd.h"
+00055 
+00056 typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *));
+00057 
+00058 httpd_cgifunction httpd_cgi(char *name);
+00059 
+00060 struct httpd_cgi_call {
+00061   const char *name;
+00062   const httpd_cgifunction function;
+00063 };
+00064 
+00065 /**
+00066  * \brief      HTTPD CGI function declaration
+00067  * \param name The C variable name of the function
+00068  * \param str  The string name of the function, used in the script file
+00069  * \param function A pointer to the function that implements it
+00070  *
+00071  *             This macro is used for declaring a HTTPD CGI
+00072  *             function. This function is then added to the list of
+00073  *             HTTPD CGI functions with the httpd_cgi_add() function.
+00074  *
+00075  * \hideinitializer
+00076  */
+00077 #define HTTPD_CGI_CALL(name, str, function) \
+00078 static PT_THREAD(function(struct httpd_state *, char *)); \
+00079 static const struct httpd_cgi_call name = {str, function}
+00080 
+00081 void httpd_cgi_init(void);
+00082 #endif /* __HTTPD_CGI_H__ */
+00083 
+00084 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00184.html b/components/net/uip/doc/html/a00184.html new file mode 100644 index 0000000000..f49fd5669d --- /dev/null +++ b/components/net/uip/doc/html/a00184.html @@ -0,0 +1,363 @@ + + +uIP 1.0: apps/webserver/httpd.c Source File + + + + + + +

apps/webserver/httpd.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup apps
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup httpd Web server
+00008  * @{
+00009  * The uIP web server is a very simplistic implementation of an HTTP
+00010  * server. It can serve web pages and files from a read-only ROM
+00011  * filesystem, and provides a very small scripting language.
+00012 
+00013  */
+00014 
+00015 /**
+00016  * \file
+00017  *         Web server
+00018  * \author
+00019  *         Adam Dunkels <adam@sics.se>
+00020  */
+00021 
+00022 
+00023 /*
+00024  * Copyright (c) 2004, Adam Dunkels.
+00025  * All rights reserved.
+00026  *
+00027  * Redistribution and use in source and binary forms, with or without
+00028  * modification, are permitted provided that the following conditions
+00029  * are met:
+00030  * 1. Redistributions of source code must retain the above copyright
+00031  *    notice, this list of conditions and the following disclaimer.
+00032  * 2. Redistributions in binary form must reproduce the above copyright
+00033  *    notice, this list of conditions and the following disclaimer in the
+00034  *    documentation and/or other materials provided with the distribution.
+00035  * 3. Neither the name of the Institute nor the names of its contributors
+00036  *    may be used to endorse or promote products derived from this software
+00037  *    without specific prior written permission.
+00038  *
+00039  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00040  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00041  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00042  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00043  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00044  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00045  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00046  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00047  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00048  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00049  * SUCH DAMAGE.
+00050  *
+00051  * This file is part of the uIP TCP/IP stack.
+00052  *
+00053  * Author: Adam Dunkels <adam@sics.se>
+00054  *
+00055  * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $
+00056  */
+00057 
+00058 #include "uip.h"
+00059 #include "httpd.h"
+00060 #include "httpd-fs.h"
+00061 #include "httpd-cgi.h"
+00062 #include "http-strings.h"
+00063 
+00064 #include <string.h>
+00065 
+00066 #define STATE_WAITING 0
+00067 #define STATE_OUTPUT  1
+00068 
+00069 #define ISO_nl      0x0a
+00070 #define ISO_space   0x20
+00071 #define ISO_bang    0x21
+00072 #define ISO_percent 0x25
+00073 #define ISO_period  0x2e
+00074 #define ISO_slash   0x2f
+00075 #define ISO_colon   0x3a
+00076 
+00077 
+00078 /*---------------------------------------------------------------------------*/
+00079 static unsigned short
+00080 generate_part_of_file(void *state)
+00081 {
+00082   struct httpd_state *s = (struct httpd_state *)state;
+00083 
+00084   if(s->file.len > uip_mss()) {
+00085     s->len = uip_mss();
+00086   } else {
+00087     s->len = s->file.len;
+00088   }
+00089   memcpy(uip_appdata, s->file.data, s->len);
+00090   
+00091   return s->len;
+00092 }
+00093 /*---------------------------------------------------------------------------*/
+00094 static
+00095 PT_THREAD(send_file(struct httpd_state *s))
+00096 {
+00097   PSOCK_BEGIN(&s->sout);
+00098   
+00099   do {
+00100     PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s);
+00101     s->file.len -= s->len;
+00102     s->file.data += s->len;
+00103   } while(s->file.len > 0);
+00104       
+00105   PSOCK_END(&s->sout);
+00106 }
+00107 /*---------------------------------------------------------------------------*/
+00108 static
+00109 PT_THREAD(send_part_of_file(struct httpd_state *s))
+00110 {
+00111   PSOCK_BEGIN(&s->sout);
+00112 
+00113   PSOCK_SEND(&s->sout, s->file.data, s->len);
+00114   
+00115   PSOCK_END(&s->sout);
+00116 }
+00117 /*---------------------------------------------------------------------------*/
+00118 static void
+00119 next_scriptstate(struct httpd_state *s)
+00120 {
+00121   char *p;
+00122   p = strchr(s->scriptptr, ISO_nl) + 1;
+00123   s->scriptlen -= (unsigned short)(p - s->scriptptr);
+00124   s->scriptptr = p;
+00125 }
+00126 /*---------------------------------------------------------------------------*/
+00127 static
+00128 PT_THREAD(handle_script(struct httpd_state *s))
+00129 {
+00130   char *ptr;
+00131   
+00132   PT_BEGIN(&s->scriptpt);
+00133 
+00134 
+00135   while(s->file.len > 0) {
+00136 
+00137     /* Check if we should start executing a script. */
+00138     if(*s->file.data == ISO_percent &&
+00139        *(s->file.data + 1) == ISO_bang) {
+00140       s->scriptptr = s->file.data + 3;
+00141       s->scriptlen = s->file.len - 3;
+00142       if(*(s->scriptptr - 1) == ISO_colon) {
+00143         httpd_fs_open(s->scriptptr + 1, &s->file);
+00144         PT_WAIT_THREAD(&s->scriptpt, send_file(s));
+00145       } else {
+00146         PT_WAIT_THREAD(&s->scriptpt,
+00147                        httpd_cgi(s->scriptptr)(s, s->scriptptr));
+00148       }
+00149       next_scriptstate(s);
+00150       
+00151       /* The script is over, so we reset the pointers and continue
+00152          sending the rest of the file. */
+00153       s->file.data = s->scriptptr;
+00154       s->file.len = s->scriptlen;
+00155     } else {
+00156       /* See if we find the start of script marker in the block of HTML
+00157          to be sent. */
+00158 
+00159       if(s->file.len > uip_mss()) {
+00160         s->len = uip_mss();
+00161       } else {
+00162         s->len = s->file.len;
+00163       }
+00164 
+00165       if(*s->file.data == ISO_percent) {
+00166         ptr = strchr(s->file.data + 1, ISO_percent);
+00167       } else {
+00168         ptr = strchr(s->file.data, ISO_percent);
+00169       }
+00170       if(ptr != NULL &&
+00171          ptr != s->file.data) {
+00172         s->len = (int)(ptr - s->file.data);
+00173         if(s->len >= uip_mss()) {
+00174           s->len = uip_mss();
+00175         }
+00176       }
+00177       PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s));
+00178       s->file.data += s->len;
+00179       s->file.len -= s->len;
+00180       
+00181     }
+00182   }
+00183   
+00184   PT_END(&s->scriptpt);
+00185 }
+00186 /*---------------------------------------------------------------------------*/
+00187 static
+00188 PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr))
+00189 {
+00190   char *ptr;
+00191 
+00192   PSOCK_BEGIN(&s->sout);
+00193 
+00194   PSOCK_SEND_STR(&s->sout, statushdr);
+00195 
+00196   ptr = strrchr(s->filename, ISO_period);
+00197   if(ptr == NULL) {
+00198     PSOCK_SEND_STR(&s->sout, http_content_type_binary);
+00199   } else if(strncmp(http_html, ptr, 5) == 0 ||
+00200             strncmp(http_shtml, ptr, 6) == 0) {
+00201     PSOCK_SEND_STR(&s->sout, http_content_type_html);
+00202   } else if(strncmp(http_css, ptr, 4) == 0) {
+00203     PSOCK_SEND_STR(&s->sout, http_content_type_css);
+00204   } else if(strncmp(http_png, ptr, 4) == 0) {
+00205     PSOCK_SEND_STR(&s->sout, http_content_type_png);
+00206   } else if(strncmp(http_gif, ptr, 4) == 0) {
+00207     PSOCK_SEND_STR(&s->sout, http_content_type_gif);
+00208   } else if(strncmp(http_jpg, ptr, 4) == 0) {
+00209     PSOCK_SEND_STR(&s->sout, http_content_type_jpg);
+00210   } else {
+00211     PSOCK_SEND_STR(&s->sout, http_content_type_plain);
+00212   }
+00213   PSOCK_END(&s->sout);
+00214 }
+00215 /*---------------------------------------------------------------------------*/
+00216 static
+00217 PT_THREAD(handle_output(struct httpd_state *s))
+00218 {
+00219   char *ptr;
+00220   
+00221   PT_BEGIN(&s->outputpt);
+00222  
+00223   if(!httpd_fs_open(s->filename, &s->file)) {
+00224     httpd_fs_open(http_404_html, &s->file);
+00225     strcpy(s->filename, http_404_html);
+00226     PT_WAIT_THREAD(&s->outputpt,
+00227                    send_headers(s,
+00228                    http_header_404));
+00229     PT_WAIT_THREAD(&s->outputpt,
+00230                    send_file(s));
+00231   } else {
+00232     PT_WAIT_THREAD(&s->outputpt,
+00233                    send_headers(s,
+00234                    http_header_200));
+00235     ptr = strchr(s->filename, ISO_period);
+00236     if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) {
+00237       PT_INIT(&s->scriptpt);
+00238       PT_WAIT_THREAD(&s->outputpt, handle_script(s));
+00239     } else {
+00240       PT_WAIT_THREAD(&s->outputpt,
+00241                      send_file(s));
+00242     }
+00243   }
+00244   PSOCK_CLOSE(&s->sout);
+00245   PT_END(&s->outputpt);
+00246 }
+00247 /*---------------------------------------------------------------------------*/
+00248 static
+00249 PT_THREAD(handle_input(struct httpd_state *s))
+00250 {
+00251   PSOCK_BEGIN(&s->sin);
+00252 
+00253   PSOCK_READTO(&s->sin, ISO_space);
+00254 
+00255   
+00256   if(strncmp(s->inputbuf, http_get, 4) != 0) {
+00257     PSOCK_CLOSE_EXIT(&s->sin);
+00258   }
+00259   PSOCK_READTO(&s->sin, ISO_space);
+00260 
+00261   if(s->inputbuf[0] != ISO_slash) {
+00262     PSOCK_CLOSE_EXIT(&s->sin);
+00263   }
+00264 
+00265   if(s->inputbuf[1] == ISO_space) {
+00266     strncpy(s->filename, http_index_html, sizeof(s->filename));
+00267   } else {
+00268     s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0;
+00269     strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename));
+00270   }
+00271 
+00272   /*  httpd_log_file(uip_conn->ripaddr, s->filename);*/
+00273   
+00274   s->state = STATE_OUTPUT;
+00275 
+00276   while(1) {
+00277     PSOCK_READTO(&s->sin, ISO_nl);
+00278 
+00279     if(strncmp(s->inputbuf, http_referer, 8) == 0) {
+00280       s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0;
+00281       /*      httpd_log(&s->inputbuf[9]);*/
+00282     }
+00283   }
+00284   
+00285   PSOCK_END(&s->sin);
+00286 }
+00287 /*---------------------------------------------------------------------------*/
+00288 static void
+00289 handle_connection(struct httpd_state *s)
+00290 {
+00291   handle_input(s);
+00292   if(s->state == STATE_OUTPUT) {
+00293     handle_output(s);
+00294   }
+00295 }
+00296 /*---------------------------------------------------------------------------*/
+00297 void
+00298 httpd_appcall(void)
+00299 {
+00300   struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate);
+00301 
+00302   if(uip_closed() || uip_aborted() || uip_timedout()) {
+00303   } else if(uip_connected()) {
+00304     PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1);
+00305     PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1);
+00306     PT_INIT(&s->outputpt);
+00307     s->state = STATE_WAITING;
+00308     /*    timer_set(&s->timer, CLOCK_SECOND * 100);*/
+00309     s->timer = 0;
+00310     handle_connection(s);
+00311   } else if(s != NULL) {
+00312     if(uip_poll()) {
+00313       ++s->timer;
+00314       if(s->timer >= 20) {
+00315         uip_abort();
+00316       }
+00317     } else {
+00318       s->timer = 0;
+00319     }
+00320     handle_connection(s);
+00321   } else {
+00322     uip_abort();
+00323   }
+00324 }
+00325 /*---------------------------------------------------------------------------*/
+00326 /**
+00327  * \brief      Initialize the web server
+00328  *
+00329  *             This function initializes the web server and should be
+00330  *             called at system boot-up.
+00331  */
+00332 void
+00333 httpd_init(void)
+00334 {
+00335   uip_listen(HTONS(80));
+00336 }
+00337 /*---------------------------------------------------------------------------*/
+00338 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00185.html b/components/net/uip/doc/html/a00185.html new file mode 100644 index 0000000000..7dea1e4df8 --- /dev/null +++ b/components/net/uip/doc/html/a00185.html @@ -0,0 +1,87 @@ + + +uIP 1.0: apps/webserver/httpd.h Source File + + + + + + +

apps/webserver/httpd.h

00001 /*
+00002  * Copyright (c) 2001-2005, Adam Dunkels.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. The name of the author may not be used to endorse or promote
+00014  *    products derived from this software without specific prior
+00015  *    written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00018  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00019  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00021  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00023  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00026  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00027  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack.
+00030  *
+00031  * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+00032  *
+00033  */
+00034 
+00035 #ifndef __HTTPD_H__
+00036 #define __HTTPD_H__
+00037 
+00038 #include "psock.h"
+00039 #include "httpd-fs.h"
+00040 
+00041 struct httpd_state {
+00042   unsigned char timer;
+00043   struct psock sin, sout;
+00044   struct pt outputpt, scriptpt;
+00045   char inputbuf[50];
+00046   char filename[20];
+00047   char state;
+00048   struct httpd_fs_file file;
+00049   int len;
+00050   char *scriptptr;
+00051   int scriptlen;
+00052   
+00053   unsigned short count;
+00054 };
+00055 
+00056 void httpd_init(void);
+00057 void httpd_appcall(void);
+00058 
+00059 void httpd_log(char *msg);
+00060 void httpd_log_file(u16_t *requester, char *file);
+00061 
+00062 #endif /* __HTTPD_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00186.html b/components/net/uip/doc/html/a00186.html new file mode 100644 index 0000000000..b56304029c --- /dev/null +++ b/components/net/uip/doc/html/a00186.html @@ -0,0 +1,129 @@ + + +uIP 1.0: lib/memb.c Source File + + + + + + +

lib/memb.c

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: memb.c,v 1.1 2006/06/12 08:21:43 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup memb
+00038  * @{
+00039  */
+00040 
+00041  /**
+00042  * \file
+00043  * Memory block allocation routines.
+00044  * \author Adam Dunkels <adam@sics.se>
+00045  */
+00046 #include <string.h>
+00047 
+00048 #include "memb.h"
+00049 
+00050 /*---------------------------------------------------------------------------*/
+00051 void
+00052 memb_init(struct memb_blocks *m)
+00053 {
+00054   memset(m->count, 0, m->num);
+00055   memset(m->mem, 0, m->size * m->num);
+00056 }
+00057 /*---------------------------------------------------------------------------*/
+00058 void *
+00059 memb_alloc(struct memb_blocks *m)
+00060 {
+00061   int i;
+00062 
+00063   for(i = 0; i < m->num; ++i) {
+00064     if(m->count[i] == 0) {
+00065       /* If this block was unused, we increase the reference count to
+00066          indicate that it now is used and return a pointer to the
+00067          memory block. */
+00068       ++(m->count[i]);
+00069       return (void *)((char *)m->mem + (i * m->size));
+00070     }
+00071   }
+00072 
+00073   /* No free block was found, so we return NULL to indicate failure to
+00074      allocate block. */
+00075   return NULL;
+00076 }
+00077 /*---------------------------------------------------------------------------*/
+00078 char
+00079 memb_free(struct memb_blocks *m, void *ptr)
+00080 {
+00081   int i;
+00082   char *ptr2;
+00083 
+00084   /* Walk through the list of blocks and try to find the block to
+00085      which the pointer "ptr" points to. */
+00086   ptr2 = (char *)m->mem;
+00087   for(i = 0; i < m->num; ++i) {
+00088     
+00089     if(ptr2 == (char *)ptr) {
+00090       /* We've found to block to which "ptr" points so we decrease the
+00091          reference count and return the new value of it. */
+00092       if(m->count[i] > 0) {
+00093         /* Make sure that we don't deallocate free memory. */
+00094         --(m->count[i]);
+00095       }
+00096       return m->count[i];
+00097     }
+00098     ptr2 += m->size;
+00099   }
+00100   return -1;
+00101 }
+00102 /*---------------------------------------------------------------------------*/
+00103 
+00104 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00187.html b/components/net/uip/doc/html/a00187.html new file mode 100644 index 0000000000..cd6de30693 --- /dev/null +++ b/components/net/uip/doc/html/a00187.html @@ -0,0 +1,167 @@ + + +uIP 1.0: lib/memb.h Source File + + + + + + +

lib/memb.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: memb.h,v 1.1 2006/06/12 08:21:43 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \defgroup memb Memory block management functions
+00038  *
+00039  * The memory block allocation routines provide a simple yet powerful
+00040  * set of functions for managing a set of memory blocks of fixed
+00041  * size. A set of memory blocks is statically declared with the
+00042  * MEMB() macro. Memory blocks are allocated from the declared
+00043  * memory by the memb_alloc() function, and are deallocated with the
+00044  * memb_free() function.
+00045  *
+00046  * \note Because of namespace clashes only one MEMB() can be
+00047  * declared per C module, and the name scope of a MEMB() memory
+00048  * block is local to each C module.
+00049  *
+00050  * The following example shows how to declare and use a memory block
+00051  * called "cmem" which has 8 chunks of memory with each memory chunk
+00052  * being 20 bytes large.
+00053  *
+00054  * @{
+00055  */
+00056 
+00057 
+00058 /**
+00059  * \file
+00060  *         Memory block allocation routines.
+00061  * \author
+00062  *         Adam Dunkels <adam@sics.se>
+00063  *
+00064  */
+00065 
+00066 #ifndef __MEMB_H__
+00067 #define __MEMB_H__
+00068 
+00069 /*
+00070  * Here we define a C preprocessing macro for concatenating to
+00071  * strings. We need use two macros in order to allow concatenation of
+00072  * two #defined macros.
+00073  */
+00074 #define MEMB_CONCAT2(s1, s2) s1##s2
+00075 #define MEMB_CONCAT(s1, s2) MEMB_CONCAT2(s1, s2)
+00076 
+00077 /**
+00078  * Declare a memory block.
+00079  *
+00080  * This macro is used to staticall declare a block of memory that can
+00081  * be used by the block allocation functions. The macro statically
+00082  * declares a C array with a size that matches the specified number of
+00083  * blocks and their individual sizes.
+00084  *
+00085  * Example:
+00086  \code
+00087 MEMB(connections, sizeof(struct connection), 16);
+00088  \endcode
+00089  *
+00090  * \param name The name of the memory block (later used with
+00091  * memb_init(), memb_alloc() and memb_free()).
+00092  *
+00093  * \param size The size of each memory chunk, in bytes.
+00094  *
+00095  * \param num The total number of memory chunks in the block.
+00096  *
+00097  */
+00098 #define MEMB(name, structure, num) \
+00099         static char MEMB_CONCAT(name,_memb_count)[num]; \
+00100         static structure MEMB_CONCAT(name,_memb_mem)[num]; \
+00101         static struct memb_blocks name = {sizeof(structure), num, \
+00102                                           MEMB_CONCAT(name,_memb_count), \
+00103                                           (void *)MEMB_CONCAT(name,_memb_mem)}
+00104 
+00105 struct memb_blocks {
+00106   unsigned short size;
+00107   unsigned short num;
+00108   char *count;
+00109   void *mem;
+00110 };
+00111 
+00112 /**
+00113  * Initialize a memory block that was declared with MEMB().
+00114  *
+00115  * \param m A memory block previosly declared with MEMB().
+00116  */
+00117 void  memb_init(struct memb_blocks *m);
+00118 
+00119 /**
+00120  * Allocate a memory block from a block of memory declared with MEMB().
+00121  *
+00122  * \param m A memory block previosly declared with MEMB().
+00123  */
+00124 void *memb_alloc(struct memb_blocks *m);
+00125 
+00126 /**
+00127  * Deallocate a memory block from a memory block previously declared
+00128  * with MEMB().
+00129  *
+00130  * \param m m A memory block previosly declared with MEMB().
+00131  *
+00132  * \param ptr A pointer to the memory block that is to be deallocated.
+00133  *
+00134  * \return The new reference count for the memory block (should be 0
+00135  * if successfully deallocated) or -1 if the pointer "ptr" did not
+00136  * point to a legal memory block.
+00137  */
+00138 char  memb_free(struct memb_blocks *m, void *ptr);
+00139 
+00140 /** @} */
+00141 
+00142 #endif /* __MEMB_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00188.html b/components/net/uip/doc/html/a00188.html new file mode 100644 index 0000000000..383bcb3b39 --- /dev/null +++ b/components/net/uip/doc/html/a00188.html @@ -0,0 +1,113 @@ + + +uIP 1.0: uip/clock.h Source File + + + + + + +

uip/clock.h

00001 /**
+00002  * \defgroup clock Clock interface
+00003  *
+00004  * The clock interface is the interface between the \ref timer "timer library"
+00005  * and the platform specific clock functionality. The clock
+00006  * interface must be implemented for each platform that uses the \ref
+00007  * timer "timer library".
+00008  *
+00009  * The clock interface does only one this: it measures time. The clock
+00010  * interface provides a macro, CLOCK_SECOND, which corresponds to one
+00011  * second of system time.
+00012  *
+00013  * \sa \ref timer "Timer library"
+00014  *
+00015  * @{
+00016  */
+00017 
+00018 /*
+00019  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00020  * All rights reserved.
+00021  *
+00022  * Redistribution and use in source and binary forms, with or without
+00023  * modification, are permitted provided that the following conditions
+00024  * are met:
+00025  * 1. Redistributions of source code must retain the above copyright
+00026  *    notice, this list of conditions and the following disclaimer.
+00027  * 2. Redistributions in binary form must reproduce the above copyright
+00028  *    notice, this list of conditions and the following disclaimer in the
+00029  *    documentation and/or other materials provided with the distribution.
+00030  * 3. Neither the name of the Institute nor the names of its contributors
+00031  *    may be used to endorse or promote products derived from this software
+00032  *    without specific prior written permission.
+00033  *
+00034  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00035  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00036  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00037  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00038  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00039  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00040  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00041  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00042  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00043  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00044  * SUCH DAMAGE.
+00045  *
+00046  * This file is part of the uIP TCP/IP stack
+00047  *
+00048  * Author: Adam Dunkels <adam@sics.se>
+00049  *
+00050  * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $
+00051  */
+00052 #ifndef __CLOCK_H__
+00053 #define __CLOCK_H__
+00054 
+00055 #include "clock-arch.h"
+00056 
+00057 /**
+00058  * Initialize the clock library.
+00059  *
+00060  * This function initializes the clock library and should be called
+00061  * from the main() function of the system.
+00062  *
+00063  */
+00064 void clock_init(void);
+00065 
+00066 /**
+00067  * Get the current clock time.
+00068  *
+00069  * This function returns the current system clock time.
+00070  *
+00071  * \return The current clock time, measured in system ticks.
+00072  */
+00073 clock_time_t clock_time(void);
+00074 
+00075 /**
+00076  * A second, measured in system clock time.
+00077  *
+00078  * \hideinitializer
+00079  */
+00080 #ifdef CLOCK_CONF_SECOND
+00081 #define CLOCK_SECOND CLOCK_CONF_SECOND
+00082 #else
+00083 #define CLOCK_SECOND (clock_time_t)32
+00084 #endif
+00085 
+00086 #endif /* __CLOCK_H__ */
+00087 
+00088 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00189.html b/components/net/uip/doc/html/a00189.html new file mode 100644 index 0000000000..16727d2975 --- /dev/null +++ b/components/net/uip/doc/html/a00189.html @@ -0,0 +1,108 @@ + + +uIP 1.0: uip/lc-addrlabels.h Source File + + + + + + +

uip/lc-addrlabels.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: lc-addrlabels.h,v 1.3 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup lc
+00038  * @{
+00039  */
+00040 
+00041 /**
+00042  * \file
+00043  * Implementation of local continuations based on the "Labels as
+00044  * values" feature of gcc
+00045  * \author
+00046  * Adam Dunkels <adam@sics.se>
+00047  *
+00048  * This implementation of local continuations is based on a special
+00049  * feature of the GCC C compiler called "labels as values". This
+00050  * feature allows assigning pointers with the address of the code
+00051  * corresponding to a particular C label.
+00052  *
+00053  * For more information, see the GCC documentation:
+00054  * http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
+00055  *
+00056  * Thanks to dividuum for finding the nice local scope label
+00057  * implementation.
+00058  */
+00059 
+00060 #ifndef __LC_ADDRLABELS_H__
+00061 #define __LC_ADDRLABELS_H__
+00062 
+00063 /** \hideinitializer */
+00064 typedef void * lc_t;
+00065 
+00066 #define LC_INIT(s) s = NULL
+00067 
+00068 
+00069 #define LC_RESUME(s)                            \
+00070   do {                                          \
+00071     if(s != NULL) {                             \
+00072       goto *s;                                  \
+00073     }                                           \
+00074   } while(0)
+00075 
+00076 #define LC_SET(s)                               \
+00077   do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)
+00078 
+00079 #define LC_END(s)
+00080 
+00081 #endif /* __LC_ADDRLABELS_H__ */
+00082 
+00083 /**  @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00190.html b/components/net/uip/doc/html/a00190.html new file mode 100644 index 0000000000..5ce94dfad7 --- /dev/null +++ b/components/net/uip/doc/html/a00190.html @@ -0,0 +1,101 @@ + + +uIP 1.0: uip/lc-switch.h Source File + + + + + + +

uip/lc-switch.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: lc-switch.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup lc
+00038  * @{
+00039  */
+00040 
+00041 /**
+00042  * \file
+00043  * Implementation of local continuations based on switch() statment
+00044  * \author Adam Dunkels <adam@sics.se>
+00045  *
+00046  * This implementation of local continuations uses the C switch()
+00047  * statement to resume execution of a function somewhere inside the
+00048  * function's body. The implementation is based on the fact that
+00049  * switch() statements are able to jump directly into the bodies of
+00050  * control structures such as if() or while() statmenets.
+00051  *
+00052  * This implementation borrows heavily from Simon Tatham's coroutines
+00053  * implementation in C:
+00054  * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
+00055  */
+00056 
+00057 #ifndef __LC_SWITCH_H__
+00058 #define __LC_SWTICH_H__
+00059 
+00060 /* WARNING! lc implementation using switch() does not work if an
+00061    LC_SET() is done within another switch() statement! */
+00062 
+00063 /** \hideinitializer */
+00064 typedef unsigned short lc_t;
+00065 
+00066 #define LC_INIT(s) s = 0;
+00067 
+00068 #define LC_RESUME(s) switch(s) { case 0:
+00069 
+00070 #define LC_SET(s) s = __LINE__; case __LINE__:
+00071 
+00072 #define LC_END(s) }
+00073 
+00074 #endif /* __LC_SWITCH_H__ */
+00075 
+00076 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00191.html b/components/net/uip/doc/html/a00191.html new file mode 100644 index 0000000000..9b0f676710 --- /dev/null +++ b/components/net/uip/doc/html/a00191.html @@ -0,0 +1,156 @@ + + +uIP 1.0: uip/lc.h Source File + + + + + + +

uip/lc.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: lc.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup pt
+00038  * @{
+00039  */
+00040 
+00041 /**
+00042  * \defgroup lc Local continuations
+00043  * @{
+00044  *
+00045  * Local continuations form the basis for implementing protothreads. A
+00046  * local continuation can be <i>set</i> in a specific function to
+00047  * capture the state of the function. After a local continuation has
+00048  * been set can be <i>resumed</i> in order to restore the state of the
+00049  * function at the point where the local continuation was set.
+00050  *
+00051  *
+00052  */
+00053 
+00054 /**
+00055  * \file lc.h
+00056  * Local continuations
+00057  * \author
+00058  * Adam Dunkels <adam@sics.se>
+00059  *
+00060  */
+00061 
+00062 #ifdef DOXYGEN
+00063 /**
+00064  * Initialize a local continuation.
+00065  *
+00066  * This operation initializes the local continuation, thereby
+00067  * unsetting any previously set continuation state.
+00068  *
+00069  * \hideinitializer
+00070  */
+00071 #define LC_INIT(lc)
+00072 
+00073 /**
+00074  * Set a local continuation.
+00075  *
+00076  * The set operation saves the state of the function at the point
+00077  * where the operation is executed. As far as the set operation is
+00078  * concerned, the state of the function does <b>not</b> include the
+00079  * call-stack or local (automatic) variables, but only the program
+00080  * counter and such CPU registers that needs to be saved.
+00081  *
+00082  * \hideinitializer
+00083  */
+00084 #define LC_SET(lc)
+00085 
+00086 /**
+00087  * Resume a local continuation.
+00088  *
+00089  * The resume operation resumes a previously set local continuation, thus
+00090  * restoring the state in which the function was when the local
+00091  * continuation was set. If the local continuation has not been
+00092  * previously set, the resume operation does nothing.
+00093  *
+00094  * \hideinitializer
+00095  */
+00096 #define LC_RESUME(lc)
+00097 
+00098 /**
+00099  * Mark the end of local continuation usage.
+00100  *
+00101  * The end operation signifies that local continuations should not be
+00102  * used any more in the function. This operation is not needed for
+00103  * most implementations of local continuation, but is required by a
+00104  * few implementations.
+00105  *
+00106  * \hideinitializer
+00107  */
+00108 #define LC_END(lc)
+00109 
+00110 /**
+00111  * \var typedef lc_t;
+00112  *
+00113  * The local continuation type.
+00114  *
+00115  * \hideinitializer
+00116  */
+00117 #endif /* DOXYGEN */
+00118 
+00119 #ifndef __LC_H__
+00120 #define __LC_H__
+00121 
+00122 #ifdef LC_CONF_INCLUDE
+00123 #include LC_CONF_INCLUDE
+00124 #else
+00125 #include "lc-switch.h"
+00126 #endif /* LC_CONF_INCLUDE */
+00127 
+00128 #endif /* __LC_H__ */
+00129 
+00130 /** @} */
+00131 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00192.html b/components/net/uip/doc/html/a00192.html new file mode 100644 index 0000000000..13543d50bd --- /dev/null +++ b/components/net/uip/doc/html/a00192.html @@ -0,0 +1,363 @@ + + +uIP 1.0: uip/psock.c Source File + + + + + + +

uip/psock.c

00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: psock.c,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 #include <stdio.h>
+00037 #include <string.h>
+00038 
+00039 #include "uipopt.h"
+00040 #include "psock.h"
+00041 #include "uip.h"
+00042 
+00043 #define STATE_NONE 0
+00044 #define STATE_ACKED 1
+00045 #define STATE_READ 2
+00046 #define STATE_BLOCKED_NEWDATA 3
+00047 #define STATE_BLOCKED_CLOSE 4
+00048 #define STATE_BLOCKED_SEND 5
+00049 #define STATE_DATA_SENT 6
+00050 
+00051 /*
+00052  * Return value of the buffering functions that indicates that a
+00053  * buffer was not filled by incoming data.
+00054  *
+00055  */
+00056 #define BUF_NOT_FULL 0
+00057 #define BUF_NOT_FOUND 0
+00058 
+00059 /*
+00060  * Return value of the buffering functions that indicates that a
+00061  * buffer was completely filled by incoming data.
+00062  *
+00063  */
+00064 #define BUF_FULL 1
+00065 
+00066 /*
+00067  * Return value of the buffering functions that indicates that an
+00068  * end-marker byte was found.
+00069  *
+00070  */
+00071 #define BUF_FOUND 2
+00072 
+00073 /*---------------------------------------------------------------------------*/
+00074 static void
+00075 buf_setup(struct psock_buf *buf,
+00076           u8_t *bufptr, u16_t bufsize)
+00077 {
+00078   buf->ptr = bufptr;
+00079   buf->left = bufsize;
+00080 }
+00081 /*---------------------------------------------------------------------------*/
+00082 static u8_t
+00083 buf_bufdata(struct psock_buf *buf, u16_t len,
+00084             u8_t **dataptr, u16_t *datalen)
+00085 {
+00086   if(*datalen < buf->left) {
+00087     memcpy(buf->ptr, *dataptr, *datalen);
+00088     buf->ptr += *datalen;
+00089     buf->left -= *datalen;
+00090     *dataptr += *datalen;
+00091     *datalen = 0;
+00092     return BUF_NOT_FULL;
+00093   } else if(*datalen == buf->left) {
+00094     memcpy(buf->ptr, *dataptr, *datalen);
+00095     buf->ptr += *datalen;
+00096     buf->left = 0;
+00097     *dataptr += *datalen;
+00098     *datalen = 0;
+00099     return BUF_FULL;
+00100   } else {
+00101     memcpy(buf->ptr, *dataptr, buf->left);
+00102     buf->ptr += buf->left;
+00103     *datalen -= buf->left;
+00104     *dataptr += buf->left;
+00105     buf->left = 0;
+00106     return BUF_FULL;
+00107   }
+00108 }
+00109 /*---------------------------------------------------------------------------*/
+00110 static u8_t
+00111 buf_bufto(register struct psock_buf *buf, u8_t endmarker,
+00112           register u8_t **dataptr, register u16_t *datalen)
+00113 {
+00114   u8_t c;
+00115   while(buf->left > 0 && *datalen > 0) {
+00116     c = *buf->ptr = **dataptr;
+00117     ++*dataptr;
+00118     ++buf->ptr;
+00119     --*datalen;
+00120     --buf->left;
+00121     
+00122     if(c == endmarker) {
+00123       return BUF_FOUND;
+00124     }
+00125   }
+00126 
+00127   if(*datalen == 0) {
+00128     return BUF_NOT_FOUND;
+00129   }
+00130 
+00131   while(*datalen > 0) {
+00132     c = **dataptr;
+00133     --*datalen;
+00134     ++*dataptr;
+00135     
+00136     if(c == endmarker) {
+00137       return BUF_FOUND | BUF_FULL;
+00138     }
+00139   }
+00140   
+00141   return BUF_FULL;
+00142 }
+00143 /*---------------------------------------------------------------------------*/
+00144 static char
+00145 send_data(register struct psock *s)
+00146 {
+00147   if(s->state != STATE_DATA_SENT || uip_rexmit()) {
+00148     if(s->sendlen > uip_mss()) {
+00149       uip_send(s->sendptr, uip_mss());
+00150     } else {
+00151       uip_send(s->sendptr, s->sendlen);
+00152     }
+00153     s->state = STATE_DATA_SENT;
+00154     return 1;
+00155   }
+00156   return 0;
+00157 }
+00158 /*---------------------------------------------------------------------------*/
+00159 static char
+00160 data_acked(register struct psock *s)
+00161 {
+00162   if(s->state == STATE_DATA_SENT && uip_acked()) {
+00163     if(s->sendlen > uip_mss()) {
+00164       s->sendlen -= uip_mss();
+00165       s->sendptr += uip_mss();
+00166     } else {
+00167       s->sendptr += s->sendlen;
+00168       s->sendlen = 0;
+00169     }
+00170     s->state = STATE_ACKED;
+00171     return 1;
+00172   }
+00173   return 0;
+00174 }
+00175 /*---------------------------------------------------------------------------*/
+00176 PT_THREAD(psock_send(register struct psock *s, const char *buf,
+00177                      unsigned int len))
+00178 {
+00179   PT_BEGIN(&s->psockpt);
+00180 
+00181   /* If there is no data to send, we exit immediately. */
+00182   if(len == 0) {
+00183     PT_EXIT(&s->psockpt);
+00184   }
+00185 
+00186   /* Save the length of and a pointer to the data that is to be
+00187      sent. */
+00188   s->sendptr = buf;
+00189   s->sendlen = len;
+00190 
+00191   s->state = STATE_NONE;
+00192 
+00193   /* We loop here until all data is sent. The s->sendlen variable is
+00194      updated by the data_sent() function. */
+00195   while(s->sendlen > 0) {
+00196 
+00197     /*
+00198      * The condition for this PT_WAIT_UNTIL is a little tricky: the
+00199      * protothread will wait here until all data has been acknowledged
+00200      * (data_acked() returns true) and until all data has been sent
+00201      * (send_data() returns true). The two functions data_acked() and
+00202      * send_data() must be called in succession to ensure that all
+00203      * data is sent. Therefore the & operator is used instead of the
+00204      * && operator, which would cause only the data_acked() function
+00205      * to be called when it returns false.
+00206      */
+00207     PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s));
+00208   }
+00209 
+00210   s->state = STATE_NONE;
+00211   
+00212   PT_END(&s->psockpt);
+00213 }
+00214 /*---------------------------------------------------------------------------*/
+00215 PT_THREAD(psock_generator_send(register struct psock *s,
+00216                                unsigned short (*generate)(void *), void *arg))
+00217 {
+00218   PT_BEGIN(&s->psockpt);
+00219 
+00220   /* Ensure that there is a generator function to call. */
+00221   if(generate == NULL) {
+00222     PT_EXIT(&s->psockpt);
+00223   }
+00224 
+00225   /* Call the generator function to generate the data in the
+00226      uip_appdata buffer. */
+00227   s->sendlen = generate(arg);
+00228   s->sendptr = uip_appdata;
+00229 
+00230   s->state = STATE_NONE;  
+00231   do {
+00232     /* Call the generator function again if we are called to perform a
+00233        retransmission. */
+00234     if(uip_rexmit()) {
+00235       generate(arg);
+00236     }
+00237     /* Wait until all data is sent and acknowledged. */
+00238     PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s));
+00239   } while(s->sendlen > 0);
+00240   
+00241   s->state = STATE_NONE;
+00242   
+00243   PT_END(&s->psockpt);
+00244 }
+00245 /*---------------------------------------------------------------------------*/
+00246 u16_t
+00247 psock_datalen(struct psock *psock)
+00248 {
+00249   return psock->bufsize - psock->buf.left;
+00250 }
+00251 /*---------------------------------------------------------------------------*/
+00252 char
+00253 psock_newdata(struct psock *s)
+00254 {
+00255   if(s->readlen > 0) {
+00256     /* There is data in the uip_appdata buffer that has not yet been
+00257        read with the PSOCK_READ functions. */
+00258     return 1;
+00259   } else if(s->state == STATE_READ) {
+00260     /* All data in uip_appdata buffer already consumed. */
+00261     s->state = STATE_BLOCKED_NEWDATA;
+00262     return 0;
+00263   } else if(uip_newdata()) {
+00264     /* There is new data that has not been consumed. */
+00265     return 1;
+00266   } else {
+00267     /* There is no new data. */
+00268     return 0;
+00269   }
+00270 }
+00271 /*---------------------------------------------------------------------------*/
+00272 PT_THREAD(psock_readto(register struct psock *psock, unsigned char c))
+00273 {
+00274   PT_BEGIN(&psock->psockpt);
+00275 
+00276   buf_setup(&psock->buf, psock->bufptr, psock->bufsize);
+00277   
+00278   /* XXX: Should add buf_checkmarker() before do{} loop, if
+00279      incoming data has been handled while waiting for a write. */
+00280 
+00281   do {
+00282     if(psock->readlen == 0) {
+00283       PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock));
+00284       psock->state = STATE_READ;
+00285       psock->readptr = (u8_t *)uip_appdata;
+00286       psock->readlen = uip_datalen();
+00287     }
+00288   } while((buf_bufto(&psock->buf, c,
+00289                      &psock->readptr,
+00290                      &psock->readlen) & BUF_FOUND) == 0);
+00291   
+00292   if(psock_datalen(psock) == 0) {
+00293     psock->state = STATE_NONE;
+00294     PT_RESTART(&psock->psockpt);
+00295   }
+00296   PT_END(&psock->psockpt);
+00297 }
+00298 /*---------------------------------------------------------------------------*/
+00299 PT_THREAD(psock_readbuf(register struct psock *psock))
+00300 {
+00301   PT_BEGIN(&psock->psockpt);
+00302 
+00303   buf_setup(&psock->buf, psock->bufptr, psock->bufsize);
+00304   
+00305   /* XXX: Should add buf_checkmarker() before do{} loop, if
+00306      incoming data has been handled while waiting for a write. */
+00307 
+00308   do {
+00309     if(psock->readlen == 0) {
+00310       PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock));
+00311       printf("Waited for newdata\n");
+00312       psock->state = STATE_READ;
+00313       psock->readptr = (u8_t *)uip_appdata;
+00314       psock->readlen = uip_datalen();
+00315     }
+00316   } while(buf_bufdata(&psock->buf, psock->bufsize,
+00317                          &psock->readptr,
+00318                          &psock->readlen) != BUF_FULL);
+00319 
+00320   if(psock_datalen(psock) == 0) {
+00321     psock->state = STATE_NONE;
+00322     PT_RESTART(&psock->psockpt);
+00323   }
+00324   PT_END(&psock->psockpt);
+00325 }
+00326 /*---------------------------------------------------------------------------*/
+00327 void
+00328 psock_init(register struct psock *psock, char *buffer, unsigned int buffersize)
+00329 {
+00330   psock->state = STATE_NONE;
+00331   psock->readlen = 0;
+00332   psock->bufptr = buffer;
+00333   psock->bufsize = buffersize;
+00334   buf_setup(&psock->buf, buffer, buffersize);
+00335   PT_INIT(&psock->pt);
+00336   PT_INIT(&psock->psockpt);
+00337 }
+00338 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00193.html b/components/net/uip/doc/html/a00193.html new file mode 100644 index 0000000000..b0ea40f91d --- /dev/null +++ b/components/net/uip/doc/html/a00193.html @@ -0,0 +1,405 @@ + + +uIP 1.0: uip/psock.h Source File + + + + + + +

uip/psock.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: psock.h,v 1.3 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \defgroup psock Protosockets library
+00038  * @{
+00039  *
+00040  * The protosocket library provides an interface to the uIP stack that is
+00041  * similar to the traditional BSD socket interface. Unlike programs
+00042  * written for the ordinary uIP event-driven interface, programs
+00043  * written with the protosocket library are executed in a sequential
+00044  * fashion and does not have to be implemented as explicit state
+00045  * machines.
+00046  *
+00047  * Protosockets only work with TCP connections.
+00048  *
+00049  * The protosocket library uses \ref pt protothreads to provide
+00050  * sequential control flow. This makes the protosockets lightweight in
+00051  * terms of memory, but also means that protosockets inherits the
+00052  * functional limitations of protothreads. Each protosocket lives only
+00053  * within a single function. Automatic variables (stack variables) are
+00054  * not retained across a protosocket library function call.
+00055  *
+00056  * \note Because the protosocket library uses protothreads, local
+00057  * variables will not always be saved across a call to a protosocket
+00058  * library function. It is therefore advised that local variables are
+00059  * used with extreme care.
+00060  *
+00061  * The protosocket library provides functions for sending data without
+00062  * having to deal with retransmissions and acknowledgements, as well
+00063  * as functions for reading data without having to deal with data
+00064  * being split across more than one TCP segment.
+00065  *
+00066  * Because each protosocket runs as a protothread, the protosocket has to be
+00067  * started with a call to PSOCK_BEGIN() at the start of the function
+00068  * in which the protosocket is used. Similarly, the protosocket protothread can
+00069  * be terminated by a call to PSOCK_EXIT().
+00070  *
+00071  */
+00072 
+00073 /**
+00074  * \file
+00075  * Protosocket library header file
+00076  * \author
+00077  * Adam Dunkels <adam@sics.se>
+00078  *
+00079  */
+00080 
+00081 #ifndef __PSOCK_H__
+00082 #define __PSOCK_H__
+00083 
+00084 #include "uipopt.h"
+00085 #include "pt.h"
+00086 
+00087  /*
+00088  * The structure that holds the state of a buffer.
+00089  *
+00090  * This structure holds the state of a uIP buffer. The structure has
+00091  * no user-visible elements, but is used through the functions
+00092  * provided by the library.
+00093  *
+00094  */
+00095 struct psock_buf {
+00096   u8_t *ptr;
+00097   unsigned short left;
+00098 };
+00099 
+00100 /**
+00101  * The representation of a protosocket.
+00102  *
+00103  * The protosocket structrure is an opaque structure with no user-visible
+00104  * elements.
+00105  */
+00106 struct psock {
+00107   struct pt pt, psockpt; /* Protothreads - one that's using the psock
+00108                             functions, and one that runs inside the
+00109                             psock functions. */
+00110   const u8_t *sendptr;   /* Pointer to the next data to be sent. */
+00111   u8_t *readptr;         /* Pointer to the next data to be read. */
+00112   
+00113   char *bufptr;          /* Pointer to the buffer used for buffering
+00114                             incoming data. */
+00115   
+00116   u16_t sendlen;         /* The number of bytes left to be sent. */
+00117   u16_t readlen;         /* The number of bytes left to be read. */
+00118 
+00119   struct psock_buf buf;  /* The structure holding the state of the
+00120                             input buffer. */
+00121   unsigned int bufsize;  /* The size of the input buffer. */
+00122   
+00123   unsigned char state;   /* The state of the protosocket. */
+00124 };
+00125 
+00126 void psock_init(struct psock *psock, char *buffer, unsigned int buffersize);
+00127 /**
+00128  * Initialize a protosocket.
+00129  *
+00130  * This macro initializes a protosocket and must be called before the
+00131  * protosocket is used. The initialization also specifies the input buffer
+00132  * for the protosocket.
+00133  *
+00134  * \param psock (struct psock *) A pointer to the protosocket to be
+00135  * initialized
+00136  *
+00137  * \param buffer (char *) A pointer to the input buffer for the
+00138  * protosocket.
+00139  *
+00140  * \param buffersize (unsigned int) The size of the input buffer.
+00141  *
+00142  * \hideinitializer
+00143  */
+00144 #define PSOCK_INIT(psock, buffer, buffersize) \
+00145   psock_init(psock, buffer, buffersize)
+00146 
+00147 /**
+00148  * Start the protosocket protothread in a function.
+00149  *
+00150  * This macro starts the protothread associated with the protosocket and
+00151  * must come before other protosocket calls in the function it is used.
+00152  *
+00153  * \param psock (struct psock *) A pointer to the protosocket to be
+00154  * started.
+00155  *
+00156  * \hideinitializer
+00157  */
+00158 #define PSOCK_BEGIN(psock) PT_BEGIN(&((psock)->pt))
+00159 
+00160 PT_THREAD(psock_send(struct psock *psock, const char *buf, unsigned int len));
+00161 /**
+00162  * Send data.
+00163  *
+00164  * This macro sends data over a protosocket. The protosocket protothread blocks
+00165  * until all data has been sent and is known to have been received by
+00166  * the remote end of the TCP connection.
+00167  *
+00168  * \param psock (struct psock *) A pointer to the protosocket over which
+00169  * data is to be sent.
+00170  *
+00171  * \param data (char *) A pointer to the data that is to be sent.
+00172  *
+00173  * \param datalen (unsigned int) The length of the data that is to be
+00174  * sent.
+00175  *
+00176  * \hideinitializer
+00177  */
+00178 #define PSOCK_SEND(psock, data, datalen)                \
+00179     PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, data, datalen))
+00180 
+00181 /**
+00182  * \brief      Send a null-terminated string.
+00183  * \param psock Pointer to the protosocket.
+00184  * \param str  The string to be sent.
+00185  *
+00186  *             This function sends a null-terminated string over the
+00187  *             protosocket.
+00188  *
+00189  * \hideinitializer
+00190  */
+00191 #define PSOCK_SEND_STR(psock, str)                      \
+00192     PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, str, strlen(str)))
+00193 
+00194 PT_THREAD(psock_generator_send(struct psock *psock,
+00195                                 unsigned short (*f)(void *), void *arg));
+00196 
+00197 /**
+00198  * \brief      Generate data with a function and send it
+00199  * \param psock Pointer to the protosocket.
+00200  * \param generator Pointer to the generator function
+00201  * \param arg   Argument to the generator function
+00202  *
+00203  *             This function generates data and sends it over the
+00204  *             protosocket. This can be used to dynamically generate
+00205  *             data for a transmission, instead of generating the data
+00206  *             in a buffer beforehand. This function reduces the need for
+00207  *             buffer memory. The generator function is implemented by
+00208  *             the application, and a pointer to the function is given
+00209  *             as an argument with the call to PSOCK_GENERATOR_SEND().
+00210  *
+00211  *             The generator function should place the generated data
+00212  *             directly in the uip_appdata buffer, and return the
+00213  *             length of the generated data. The generator function is
+00214  *             called by the protosocket layer when the data first is
+00215  *             sent, and once for every retransmission that is needed.
+00216  *
+00217  * \hideinitializer
+00218  */
+00219 #define PSOCK_GENERATOR_SEND(psock, generator, arg)     \
+00220     PT_WAIT_THREAD(&((psock)->pt),                                      \
+00221                    psock_generator_send(psock, generator, arg))
+00222 
+00223 
+00224 /**
+00225  * Close a protosocket.
+00226  *
+00227  * This macro closes a protosocket and can only be called from within the
+00228  * protothread in which the protosocket lives.
+00229  *
+00230  * \param psock (struct psock *) A pointer to the protosocket that is to
+00231  * be closed.
+00232  *
+00233  * \hideinitializer
+00234  */
+00235 #define PSOCK_CLOSE(psock) uip_close()
+00236 
+00237 PT_THREAD(psock_readbuf(struct psock *psock));
+00238 /**
+00239  * Read data until the buffer is full.
+00240  *
+00241  * This macro will block waiting for data and read the data into the
+00242  * input buffer specified with the call to PSOCK_INIT(). Data is read
+00243  * until the buffer is full..
+00244  *
+00245  * \param psock (struct psock *) A pointer to the protosocket from which
+00246  * data should be read.
+00247  *
+00248  * \hideinitializer
+00249  */
+00250 #define PSOCK_READBUF(psock)                            \
+00251   PT_WAIT_THREAD(&((psock)->pt), psock_readbuf(psock))
+00252 
+00253 PT_THREAD(psock_readto(struct psock *psock, unsigned char c));
+00254 /**
+00255  * Read data up to a specified character.
+00256  *
+00257  * This macro will block waiting for data and read the data into the
+00258  * input buffer specified with the call to PSOCK_INIT(). Data is only
+00259  * read until the specifieed character appears in the data stream.
+00260  *
+00261  * \param psock (struct psock *) A pointer to the protosocket from which
+00262  * data should be read.
+00263  *
+00264  * \param c (char) The character at which to stop reading.
+00265  *
+00266  * \hideinitializer
+00267  */
+00268 #define PSOCK_READTO(psock, c)                          \
+00269   PT_WAIT_THREAD(&((psock)->pt), psock_readto(psock, c))
+00270 
+00271 /**
+00272  * The length of the data that was previously read.
+00273  *
+00274  * This macro returns the length of the data that was previously read
+00275  * using PSOCK_READTO() or PSOCK_READ().
+00276  *
+00277  * \param psock (struct psock *) A pointer to the protosocket holding the data.
+00278  *
+00279  * \hideinitializer
+00280  */
+00281 #define PSOCK_DATALEN(psock) psock_datalen(psock)
+00282 
+00283 u16_t psock_datalen(struct psock *psock);
+00284 
+00285 /**
+00286  * Exit the protosocket's protothread.
+00287  *
+00288  * This macro terminates the protothread of the protosocket and should
+00289  * almost always be used in conjunction with PSOCK_CLOSE().
+00290  *
+00291  * \sa PSOCK_CLOSE_EXIT()
+00292  *
+00293  * \param psock (struct psock *) A pointer to the protosocket.
+00294  *
+00295  * \hideinitializer
+00296  */
+00297 #define PSOCK_EXIT(psock) PT_EXIT(&((psock)->pt))
+00298 
+00299 /**
+00300  * Close a protosocket and exit the protosocket's protothread.
+00301  *
+00302  * This macro closes a protosocket and exits the protosocket's protothread.
+00303  *
+00304  * \param psock (struct psock *) A pointer to the protosocket.
+00305  *
+00306  * \hideinitializer
+00307  */
+00308 #define PSOCK_CLOSE_EXIT(psock)         \
+00309   do {                                          \
+00310     PSOCK_CLOSE(psock);                 \
+00311     PSOCK_EXIT(psock);                  \
+00312   } while(0)
+00313 
+00314 /**
+00315  * Declare the end of a protosocket's protothread.
+00316  *
+00317  * This macro is used for declaring that the protosocket's protothread
+00318  * ends. It must always be used together with a matching PSOCK_BEGIN()
+00319  * macro.
+00320  *
+00321  * \param psock (struct psock *) A pointer to the protosocket.
+00322  *
+00323  * \hideinitializer
+00324  */
+00325 #define PSOCK_END(psock) PT_END(&((psock)->pt))
+00326 
+00327 char psock_newdata(struct psock *s);
+00328 
+00329 /**
+00330  * Check if new data has arrived on a protosocket.
+00331  *
+00332  * This macro is used in conjunction with the PSOCK_WAIT_UNTIL()
+00333  * macro to check if data has arrived on a protosocket.
+00334  *
+00335  * \param psock (struct psock *) A pointer to the protosocket.
+00336  *
+00337  * \hideinitializer
+00338  */
+00339 #define PSOCK_NEWDATA(psock) psock_newdata(psock)
+00340 
+00341 /**
+00342  * Wait until a condition is true.
+00343  *
+00344  * This macro blocks the protothread until the specified condition is
+00345  * true. The macro PSOCK_NEWDATA() can be used to check if new data
+00346  * arrives when the protosocket is waiting.
+00347  *
+00348  * Typically, this macro is used as follows:
+00349  *
+00350  \code
+00351  PT_THREAD(thread(struct psock *s, struct timer *t))
+00352  {
+00353    PSOCK_BEGIN(s);
+00354 
+00355    PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t));
+00356    
+00357    if(PSOCK_NEWDATA(s)) {
+00358      PSOCK_READTO(s, '\n');
+00359    } else {
+00360      handle_timed_out(s);
+00361    }
+00362    
+00363    PSOCK_END(s);
+00364  }
+00365  \endcode
+00366  *
+00367  * \param psock (struct psock *) A pointer to the protosocket.
+00368  * \param condition The condition to wait for.
+00369  *
+00370  * \hideinitializer
+00371  */
+00372 #define PSOCK_WAIT_UNTIL(psock, condition)    \
+00373   PT_WAIT_UNTIL(&((psock)->pt), (condition));
+00374 
+00375 #define PSOCK_WAIT_THREAD(psock, condition)   \
+00376   PT_WAIT_THREAD(&((psock)->pt), (condition))
+00377 
+00378 #endif /* __PSOCK_H__ */
+00379 
+00380 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00194.html b/components/net/uip/doc/html/a00194.html new file mode 100644 index 0000000000..5e303b897e --- /dev/null +++ b/components/net/uip/doc/html/a00194.html @@ -0,0 +1,348 @@ + + +uIP 1.0: uip/pt.h Source File + + + + + + +

uip/pt.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: pt.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 /**
+00037  * \addtogroup pt
+00038  * @{
+00039  */
+00040 
+00041 /**
+00042  * \file
+00043  * Protothreads implementation.
+00044  * \author
+00045  * Adam Dunkels <adam@sics.se>
+00046  *
+00047  */
+00048 
+00049 #ifndef __PT_H__
+00050 #define __PT_H__
+00051 
+00052 #include "lc.h"
+00053 
+00054 struct pt {
+00055   lc_t lc;
+00056 };
+00057 
+00058 #define PT_WAITING 0
+00059 #define PT_EXITED  1
+00060 #define PT_ENDED   2
+00061 #define PT_YIELDED 3
+00062 
+00063 /**
+00064  * \name Initialization
+00065  * @{
+00066  */
+00067 
+00068 /**
+00069  * Initialize a protothread.
+00070  *
+00071  * Initializes a protothread. Initialization must be done prior to
+00072  * starting to execute the protothread.
+00073  *
+00074  * \param pt A pointer to the protothread control structure.
+00075  *
+00076  * \sa PT_SPAWN()
+00077  *
+00078  * \hideinitializer
+00079  */
+00080 #define PT_INIT(pt)   LC_INIT((pt)->lc)
+00081 
+00082 /** @} */
+00083 
+00084 /**
+00085  * \name Declaration and definition
+00086  * @{
+00087  */
+00088 
+00089 /**
+00090  * Declaration of a protothread.
+00091  *
+00092  * This macro is used to declare a protothread. All protothreads must
+00093  * be declared with this macro.
+00094  *
+00095  * \param name_args The name and arguments of the C function
+00096  * implementing the protothread.
+00097  *
+00098  * \hideinitializer
+00099  */
+00100 #define PT_THREAD(name_args) char name_args
+00101 
+00102 /**
+00103  * Declare the start of a protothread inside the C function
+00104  * implementing the protothread.
+00105  *
+00106  * This macro is used to declare the starting point of a
+00107  * protothread. It should be placed at the start of the function in
+00108  * which the protothread runs. All C statements above the PT_BEGIN()
+00109  * invokation will be executed each time the protothread is scheduled.
+00110  *
+00111  * \param pt A pointer to the protothread control structure.
+00112  *
+00113  * \hideinitializer
+00114  */
+00115 #define PT_BEGIN(pt) { char PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc)
+00116 
+00117 /**
+00118  * Declare the end of a protothread.
+00119  *
+00120  * This macro is used for declaring that a protothread ends. It must
+00121  * always be used together with a matching PT_BEGIN() macro.
+00122  *
+00123  * \param pt A pointer to the protothread control structure.
+00124  *
+00125  * \hideinitializer
+00126  */
+00127 #define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \
+00128                    PT_INIT(pt); return PT_ENDED; }
+00129 
+00130 /** @} */
+00131 
+00132 /**
+00133  * \name Blocked wait
+00134  * @{
+00135  */
+00136 
+00137 /**
+00138  * Block and wait until condition is true.
+00139  *
+00140  * This macro blocks the protothread until the specified condition is
+00141  * true.
+00142  *
+00143  * \param pt A pointer to the protothread control structure.
+00144  * \param condition The condition.
+00145  *
+00146  * \hideinitializer
+00147  */
+00148 #define PT_WAIT_UNTIL(pt, condition)            \
+00149   do {                                          \
+00150     LC_SET((pt)->lc);                           \
+00151     if(!(condition)) {                          \
+00152       return PT_WAITING;                        \
+00153     }                                           \
+00154   } while(0)
+00155 
+00156 /**
+00157  * Block and wait while condition is true.
+00158  *
+00159  * This function blocks and waits while condition is true. See
+00160  * PT_WAIT_UNTIL().
+00161  *
+00162  * \param pt A pointer to the protothread control structure.
+00163  * \param cond The condition.
+00164  *
+00165  * \hideinitializer
+00166  */
+00167 #define PT_WAIT_WHILE(pt, cond)  PT_WAIT_UNTIL((pt), !(cond))
+00168 
+00169 /** @} */
+00170 
+00171 /**
+00172  * \name Hierarchical protothreads
+00173  * @{
+00174  */
+00175 
+00176 /**
+00177  * Block and wait until a child protothread completes.
+00178  *
+00179  * This macro schedules a child protothread. The current protothread
+00180  * will block until the child protothread completes.
+00181  *
+00182  * \note The child protothread must be manually initialized with the
+00183  * PT_INIT() function before this function is used.
+00184  *
+00185  * \param pt A pointer to the protothread control structure.
+00186  * \param thread The child protothread with arguments
+00187  *
+00188  * \sa PT_SPAWN()
+00189  *
+00190  * \hideinitializer
+00191  */
+00192 #define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread))
+00193 
+00194 /**
+00195  * Spawn a child protothread and wait until it exits.
+00196  *
+00197  * This macro spawns a child protothread and waits until it exits. The
+00198  * macro can only be used within a protothread.
+00199  *
+00200  * \param pt A pointer to the protothread control structure.
+00201  * \param child A pointer to the child protothread's control structure.
+00202  * \param thread The child protothread with arguments
+00203  *
+00204  * \hideinitializer
+00205  */
+00206 #define PT_SPAWN(pt, child, thread)             \
+00207   do {                                          \
+00208     PT_INIT((child));                           \
+00209     PT_WAIT_THREAD((pt), (thread));             \
+00210   } while(0)
+00211 
+00212 /** @} */
+00213 
+00214 /**
+00215  * \name Exiting and restarting
+00216  * @{
+00217  */
+00218 
+00219 /**
+00220  * Restart the protothread.
+00221  *
+00222  * This macro will block and cause the running protothread to restart
+00223  * its execution at the place of the PT_BEGIN() call.
+00224  *
+00225  * \param pt A pointer to the protothread control structure.
+00226  *
+00227  * \hideinitializer
+00228  */
+00229 #define PT_RESTART(pt)                          \
+00230   do {                                          \
+00231     PT_INIT(pt);                                \
+00232     return PT_WAITING;                  \
+00233   } while(0)
+00234 
+00235 /**
+00236  * Exit the protothread.
+00237  *
+00238  * This macro causes the protothread to exit. If the protothread was
+00239  * spawned by another protothread, the parent protothread will become
+00240  * unblocked and can continue to run.
+00241  *
+00242  * \param pt A pointer to the protothread control structure.
+00243  *
+00244  * \hideinitializer
+00245  */
+00246 #define PT_EXIT(pt)                             \
+00247   do {                                          \
+00248     PT_INIT(pt);                                \
+00249     return PT_EXITED;                   \
+00250   } while(0)
+00251 
+00252 /** @} */
+00253 
+00254 /**
+00255  * \name Calling a protothread
+00256  * @{
+00257  */
+00258 
+00259 /**
+00260  * Schedule a protothread.
+00261  *
+00262  * This function shedules a protothread. The return value of the
+00263  * function is non-zero if the protothread is running or zero if the
+00264  * protothread has exited.
+00265  *
+00266  * \param f The call to the C function implementing the protothread to
+00267  * be scheduled
+00268  *
+00269  * \hideinitializer
+00270  */
+00271 #define PT_SCHEDULE(f) ((f) == PT_WAITING)
+00272 
+00273 /** @} */
+00274 
+00275 /**
+00276  * \name Yielding from a protothread
+00277  * @{
+00278  */
+00279 
+00280 /**
+00281  * Yield from the current protothread.
+00282  *
+00283  * This function will yield the protothread, thereby allowing other
+00284  * processing to take place in the system.
+00285  *
+00286  * \param pt A pointer to the protothread control structure.
+00287  *
+00288  * \hideinitializer
+00289  */
+00290 #define PT_YIELD(pt)                            \
+00291   do {                                          \
+00292     PT_YIELD_FLAG = 0;                          \
+00293     LC_SET((pt)->lc);                           \
+00294     if(PT_YIELD_FLAG == 0) {                    \
+00295       return PT_YIELDED;                        \
+00296     }                                           \
+00297   } while(0)
+00298 
+00299 /**
+00300  * \brief      Yield from the protothread until a condition occurs.
+00301  * \param pt   A pointer to the protothread control structure.
+00302  * \param cond The condition.
+00303  *
+00304  *             This function will yield the protothread, until the
+00305  *             specified condition evaluates to true.
+00306  *
+00307  *
+00308  * \hideinitializer
+00309  */
+00310 #define PT_YIELD_UNTIL(pt, cond)                \
+00311   do {                                          \
+00312     PT_YIELD_FLAG = 0;                          \
+00313     LC_SET((pt)->lc);                           \
+00314     if((PT_YIELD_FLAG == 0) || !(cond)) {       \
+00315       return PT_YIELDED;                        \
+00316     }                                           \
+00317   } while(0)
+00318 
+00319 /** @} */
+00320 
+00321 #endif /* __PT_H__ */
+00322 
+00323 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00195.html b/components/net/uip/doc/html/a00195.html new file mode 100644 index 0000000000..fa2e608e8a --- /dev/null +++ b/components/net/uip/doc/html/a00195.html @@ -0,0 +1,152 @@ + + +uIP 1.0: uip/timer.c Source File + + + + + + +

uip/timer.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup timer
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \file
+00008  * Timer library implementation.
+00009  * \author
+00010  * Adam Dunkels <adam@sics.se>
+00011  */
+00012 
+00013 /*
+00014  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00015  * All rights reserved.
+00016  *
+00017  * Redistribution and use in source and binary forms, with or without
+00018  * modification, are permitted provided that the following conditions
+00019  * are met:
+00020  * 1. Redistributions of source code must retain the above copyright
+00021  *    notice, this list of conditions and the following disclaimer.
+00022  * 2. Redistributions in binary form must reproduce the above copyright
+00023  *    notice, this list of conditions and the following disclaimer in the
+00024  *    documentation and/or other materials provided with the distribution.
+00025  * 3. Neither the name of the Institute nor the names of its contributors
+00026  *    may be used to endorse or promote products derived from this software
+00027  *    without specific prior written permission.
+00028  *
+00029  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00030  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00031  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00032  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00033  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00034  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00035  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00036  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00037  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00038  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00039  * SUCH DAMAGE.
+00040  *
+00041  * This file is part of the uIP TCP/IP stack
+00042  *
+00043  * Author: Adam Dunkels <adam@sics.se>
+00044  *
+00045  * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $
+00046  */
+00047 
+00048 #include "clock.h"
+00049 #include "timer.h"
+00050 
+00051 /*---------------------------------------------------------------------------*/
+00052 /**
+00053  * Set a timer.
+00054  *
+00055  * This function is used to set a timer for a time sometime in the
+00056  * future. The function timer_expired() will evaluate to true after
+00057  * the timer has expired.
+00058  *
+00059  * \param t A pointer to the timer
+00060  * \param interval The interval before the timer expires.
+00061  *
+00062  */
+00063 void
+00064 timer_set(struct timer *t, clock_time_t interval)
+00065 {
+00066   t->interval = interval;
+00067   t->start = clock_time();
+00068 }
+00069 /*---------------------------------------------------------------------------*/
+00070 /**
+00071  * Reset the timer with the same interval.
+00072  *
+00073  * This function resets the timer with the same interval that was
+00074  * given to the timer_set() function. The start point of the interval
+00075  * is the exact time that the timer last expired. Therefore, this
+00076  * function will cause the timer to be stable over time, unlike the
+00077  * timer_rester() function.
+00078  *
+00079  * \param t A pointer to the timer.
+00080  *
+00081  * \sa timer_restart()
+00082  */
+00083 void
+00084 timer_reset(struct timer *t)
+00085 {
+00086   t->start += t->interval;
+00087 }
+00088 /*---------------------------------------------------------------------------*/
+00089 /**
+00090  * Restart the timer from the current point in time
+00091  *
+00092  * This function restarts a timer with the same interval that was
+00093  * given to the timer_set() function. The timer will start at the
+00094  * current time.
+00095  *
+00096  * \note A periodic timer will drift if this function is used to reset
+00097  * it. For preioric timers, use the timer_reset() function instead.
+00098  *
+00099  * \param t A pointer to the timer.
+00100  *
+00101  * \sa timer_reset()
+00102  */
+00103 void
+00104 timer_restart(struct timer *t)
+00105 {
+00106   t->start = clock_time();
+00107 }
+00108 /*---------------------------------------------------------------------------*/
+00109 /**
+00110  * Check if a timer has expired.
+00111  *
+00112  * This function tests if a timer has expired and returns true or
+00113  * false depending on its status.
+00114  *
+00115  * \param t A pointer to the timer
+00116  *
+00117  * \return Non-zero if the timer has expired, zero otherwise.
+00118  *
+00119  */
+00120 int
+00121 timer_expired(struct timer *t)
+00122 {
+00123   return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval;
+00124 }
+00125 /*---------------------------------------------------------------------------*/
+00126 
+00127 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00196.html b/components/net/uip/doc/html/a00196.html new file mode 100644 index 0000000000..c72141b725 --- /dev/null +++ b/components/net/uip/doc/html/a00196.html @@ -0,0 +1,111 @@ + + +uIP 1.0: uip/timer.h Source File + + + + + + +

uip/timer.h

Go to the documentation of this file.
00001 /**
+00002  * \defgroup timer Timer library
+00003  *
+00004  * The timer library provides functions for setting, resetting and
+00005  * restarting timers, and for checking if a timer has expired. An
+00006  * application must "manually" check if its timers have expired; this
+00007  * is not done automatically.
+00008  *
+00009  * A timer is declared as a \c struct \c timer and all access to the
+00010  * timer is made by a pointer to the declared timer.
+00011  *
+00012  * \note The timer library uses the \ref clock "Clock library" to
+00013  * measure time. Intervals should be specified in the format used by
+00014  * the clock library.
+00015  *
+00016  * @{
+00017  */
+00018 
+00019 
+00020 /**
+00021  * \file
+00022  * Timer library header file.
+00023  * \author
+00024  * Adam Dunkels <adam@sics.se>
+00025  */
+00026 
+00027 /*
+00028  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00029  * All rights reserved.
+00030  *
+00031  * Redistribution and use in source and binary forms, with or without
+00032  * modification, are permitted provided that the following conditions
+00033  * are met:
+00034  * 1. Redistributions of source code must retain the above copyright
+00035  *    notice, this list of conditions and the following disclaimer.
+00036  * 2. Redistributions in binary form must reproduce the above copyright
+00037  *    notice, this list of conditions and the following disclaimer in the
+00038  *    documentation and/or other materials provided with the distribution.
+00039  * 3. Neither the name of the Institute nor the names of its contributors
+00040  *    may be used to endorse or promote products derived from this software
+00041  *    without specific prior written permission.
+00042  *
+00043  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00044  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00045  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00046  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00047  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00048  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00049  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00050  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00051  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00052  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00053  * SUCH DAMAGE.
+00054  *
+00055  * This file is part of the uIP TCP/IP stack
+00056  *
+00057  * Author: Adam Dunkels <adam@sics.se>
+00058  *
+00059  * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $
+00060  */
+00061 #ifndef __TIMER_H__
+00062 #define __TIMER_H__
+00063 
+00064 #include "clock.h"
+00065 
+00066 /**
+00067  * A timer.
+00068  *
+00069  * This structure is used for declaring a timer. The timer must be set
+00070  * with timer_set() before it can be used.
+00071  *
+00072  * \hideinitializer
+00073  */
+00074 struct timer {
+00075   clock_time_t start;
+00076   clock_time_t interval;
+00077 };
+00078 
+00079 void timer_set(struct timer *t, clock_time_t interval);
+00080 void timer_reset(struct timer *t);
+00081 void timer_restart(struct timer *t);
+00082 int timer_expired(struct timer *t);
+00083 
+00084 #endif /* __TIMER_H__ */
+00085 
+00086 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00197.html b/components/net/uip/doc/html/a00197.html new file mode 100644 index 0000000000..d8f85aa30f --- /dev/null +++ b/components/net/uip/doc/html/a00197.html @@ -0,0 +1,183 @@ + + +uIP 1.0: uip/uip-neighbor.c Source File + + + + + + +

uip/uip-neighbor.c

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2006, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * $Id: uip-neighbor.c,v 1.2 2006/06/12 08:00:30 adam Exp $
+00032  */
+00033 
+00034 /**
+00035  * \file
+00036  *         Database of link-local neighbors, used by IPv6 code and
+00037  *         to be used by a future ARP code rewrite.
+00038  * \author
+00039  *         Adam Dunkels <adam@sics.se>
+00040  */
+00041 
+00042 #include "uip-neighbor.h"
+00043 
+00044 #include <string.h>
+00045 
+00046 #define MAX_TIME 128
+00047 
+00048 #ifdef UIP_NEIGHBOR_CONF_ENTRIES
+00049 #define ENTRIES UIP_NEIGHBOR_CONF_ENTRIES
+00050 #else /* UIP_NEIGHBOR_CONF_ENTRIES */
+00051 #define ENTRIES 8
+00052 #endif /* UIP_NEIGHBOR_CONF_ENTRIES */
+00053 
+00054 struct neighbor_entry {
+00055   uip_ipaddr_t ipaddr;
+00056   struct uip_neighbor_addr addr;
+00057   u8_t time;
+00058 };
+00059 static struct neighbor_entry entries[ENTRIES];
+00060 
+00061 /*---------------------------------------------------------------------------*/
+00062 void
+00063 uip_neighbor_init(void)
+00064 {
+00065   int i;
+00066 
+00067   for(i = 0; i < ENTRIES; ++i) {
+00068     entries[i].time = MAX_TIME;
+00069   }
+00070 }
+00071 /*---------------------------------------------------------------------------*/
+00072 void
+00073 uip_neighbor_periodic(void)
+00074 {
+00075   int i;
+00076 
+00077   for(i = 0; i < ENTRIES; ++i) {
+00078     if(entries[i].time < MAX_TIME) {
+00079       entries[i].time++;
+00080     }
+00081   }
+00082 }
+00083 /*---------------------------------------------------------------------------*/
+00084 void
+00085 uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
+00086 {
+00087   int i, oldest;
+00088   u8_t oldest_time;
+00089 
+00090   printf("Adding neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n",
+00091          addr->addr.addr[0], addr->addr.addr[1], addr->addr.addr[2], addr->addr.addr[3],
+00092          addr->addr.addr[4], addr->addr.addr[5]);
+00093   
+00094   /* Find the first unused entry or the oldest used entry. */
+00095   oldest_time = 0;
+00096   oldest = 0;
+00097   for(i = 0; i < ENTRIES; ++i) {
+00098     if(entries[i].time == MAX_TIME) {
+00099       oldest = i;
+00100       break;
+00101     }
+00102     if(uip_ipaddr_cmp(entries[i].ipaddr, addr)) {
+00103       oldest = i;
+00104       break;
+00105     }
+00106     if(entries[i].time > oldest_time) {
+00107       oldest = i;
+00108       oldest_time = entries[i].time;
+00109     }
+00110   }
+00111 
+00112   /* Use the oldest or first free entry (either pointed to by the
+00113      "oldest" variable). */
+00114   entries[oldest].time = 0;
+00115   uip_ipaddr_copy(entries[oldest].ipaddr, ipaddr);
+00116   memcpy(&entries[oldest].addr, addr, sizeof(struct uip_neighbor_addr));
+00117 }
+00118 /*---------------------------------------------------------------------------*/
+00119 static struct neighbor_entry *
+00120 find_entry(uip_ipaddr_t ipaddr)
+00121 {
+00122   int i;
+00123   
+00124   for(i = 0; i < ENTRIES; ++i) {
+00125     if(uip_ipaddr_cmp(entries[i].ipaddr, ipaddr)) {
+00126       return &entries[i];
+00127     }
+00128   }
+00129   return NULL;
+00130 }
+00131 /*---------------------------------------------------------------------------*/
+00132 void
+00133 uip_neighbor_update(uip_ipaddr_t ipaddr)
+00134 {
+00135   struct neighbor_entry *e;
+00136 
+00137   e = find_entry(ipaddr);
+00138   if(e != NULL) {
+00139     e->time = 0;
+00140   }
+00141 }
+00142 /*---------------------------------------------------------------------------*/
+00143 struct uip_neighbor_addr *
+00144 uip_neighbor_lookup(uip_ipaddr_t ipaddr)
+00145 {
+00146   struct neighbor_entry *e;
+00147 
+00148   e = find_entry(ipaddr);
+00149   if(e != NULL) {
+00150     /*    printf("Lookup neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n",
+00151            e->addr.addr.addr[0], e->addr.addr.addr[1], e->addr.addr.addr[2], e->addr.addr.addr[3],
+00152            e->addr.addr.addr[4], e->addr.addr.addr[5]);*/
+00153 
+00154     return &e->addr;
+00155   }
+00156   return NULL;
+00157 }
+00158 /*---------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00198.html b/components/net/uip/doc/html/a00198.html new file mode 100644 index 0000000000..ce7cb56de7 --- /dev/null +++ b/components/net/uip/doc/html/a00198.html @@ -0,0 +1,86 @@ + + +uIP 1.0: uip/uip-neighbor.h Source File + + + + + + +

uip/uip-neighbor.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2006, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * $Id: uip-neighbor.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00032  */
+00033 
+00034 /**
+00035  * \file
+00036  *         Header file for database of link-local neighbors, used by
+00037  *         IPv6 code and to be used by future ARP code.
+00038  * \author
+00039  *         Adam Dunkels <adam@sics.se>
+00040  */
+00041 
+00042 #ifndef __UIP_NEIGHBOR_H__
+00043 #define __UIP_NEIGHBOR_H__
+00044 
+00045 #include "uip.h"
+00046 
+00047 struct uip_neighbor_addr {
+00048 #if UIP_NEIGHBOR_CONF_ADDRTYPE
+00049   UIP_NEIGHBOR_CONF_ADDRTYPE addr;
+00050 #else
+00051   struct uip_eth_addr addr;
+00052 #endif
+00053 };
+00054 
+00055 void uip_neighbor_init(void);
+00056 void uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr);
+00057 void uip_neighbor_update(uip_ipaddr_t ipaddr);
+00058 struct uip_neighbor_addr *uip_neighbor_lookup(uip_ipaddr_t ipaddr);
+00059 void uip_neighbor_periodic(void);
+00060 
+00061 #endif /* __UIP-NEIGHBOR_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00199.html b/components/net/uip/doc/html/a00199.html new file mode 100644 index 0000000000..f33889b582 --- /dev/null +++ b/components/net/uip/doc/html/a00199.html @@ -0,0 +1,161 @@ + + +uIP 1.0: uip/uip-split.c Source File + + + + + + +

uip/uip-split.c

00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: uip-split.c,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 
+00036 #include <string.h>
+00037 
+00038 #include "uip-split.h"
+00039 #include "uip.h"
+00040 #include "uip-fw.h"
+00041 #include "uip_arch.h"
+00042 
+00043 
+00044 
+00045 #define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
+00046 
+00047 /*-----------------------------------------------------------------------------*/
+00048 void
+00049 uip_split_output(void)
+00050 {
+00051   u16_t tcplen, len1, len2;
+00052 
+00053   /* We only try to split maximum sized TCP segments. */
+00054   if(BUF->proto == UIP_PROTO_TCP &&
+00055      uip_len == UIP_BUFSIZE - UIP_LLH_LEN) {
+00056 
+00057     tcplen = uip_len - UIP_TCPIP_HLEN;
+00058     /* Split the segment in two. If the original packet length was
+00059        odd, we make the second packet one byte larger. */
+00060     len1 = len2 = tcplen / 2;
+00061     if(len1 + len2 < tcplen) {
+00062       ++len2;
+00063     }
+00064 
+00065     /* Create the first packet. This is done by altering the length
+00066        field of the IP header and updating the checksums. */
+00067     uip_len = len1 + UIP_TCPIP_HLEN;
+00068 #if UIP_CONF_IPV6
+00069     /* For IPv6, the IP length field does not include the IPv6 IP header
+00070        length. */
+00071     BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8);
+00072     BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
+00073 #else /* UIP_CONF_IPV6 */
+00074     BUF->len[0] = uip_len >> 8;
+00075     BUF->len[1] = uip_len & 0xff;
+00076 #endif /* UIP_CONF_IPV6 */
+00077     
+00078     /* Recalculate the TCP checksum. */
+00079     BUF->tcpchksum = 0;
+00080     BUF->tcpchksum = ~(uip_tcpchksum());
+00081 
+00082 #if !UIP_CONF_IPV6
+00083     /* Recalculate the IP checksum. */
+00084     BUF->ipchksum = 0;
+00085     BUF->ipchksum = ~(uip_ipchksum());
+00086 #endif /* UIP_CONF_IPV6 */
+00087     
+00088     /* Transmit the first packet. */
+00089     /*    uip_fw_output();*/
+00090     tcpip_output();
+00091 
+00092     /* Now, create the second packet. To do this, it is not enough to
+00093        just alter the length field, but we must also update the TCP
+00094        sequence number and point the uip_appdata to a new place in
+00095        memory. This place is detemined by the length of the first
+00096        packet (len1). */
+00097     uip_len = len2 + UIP_TCPIP_HLEN;
+00098 #if UIP_CONF_IPV6
+00099     /* For IPv6, the IP length field does not include the IPv6 IP header
+00100        length. */
+00101     BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8);
+00102     BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
+00103 #else /* UIP_CONF_IPV6 */
+00104     BUF->len[0] = uip_len >> 8;
+00105     BUF->len[1] = uip_len & 0xff;
+00106 #endif /* UIP_CONF_IPV6 */
+00107     
+00108     /*    uip_appdata += len1;*/
+00109     memcpy(uip_appdata, (u8_t *)uip_appdata + len1, len2);
+00110 
+00111     uip_add32(BUF->seqno, len1);
+00112     BUF->seqno[0] = uip_acc32[0];
+00113     BUF->seqno[1] = uip_acc32[1];
+00114     BUF->seqno[2] = uip_acc32[2];
+00115     BUF->seqno[3] = uip_acc32[3];
+00116     
+00117     /* Recalculate the TCP checksum. */
+00118     BUF->tcpchksum = 0;
+00119     BUF->tcpchksum = ~(uip_tcpchksum());
+00120 
+00121 #if !UIP_CONF_IPV6
+00122     /* Recalculate the IP checksum. */
+00123     BUF->ipchksum = 0;
+00124     BUF->ipchksum = ~(uip_ipchksum());
+00125 #endif /* UIP_CONF_IPV6 */
+00126 
+00127     /* Transmit the second packet. */
+00128     /*    uip_fw_output();*/
+00129     tcpip_output();
+00130   } else {
+00131     /*    uip_fw_output();*/
+00132     tcpip_output();
+00133   }
+00134      
+00135 }
+00136 /*-----------------------------------------------------------------------------*/
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00200.html b/components/net/uip/doc/html/a00200.html new file mode 100644 index 0000000000..9371423f38 --- /dev/null +++ b/components/net/uip/doc/html/a00200.html @@ -0,0 +1,121 @@ + + +uIP 1.0: uip/uip-split.h Source File + + + + + + +

uip/uip-split.h

Go to the documentation of this file.
00001 /*
+00002  * Copyright (c) 2004, Swedish Institute of Computer Science.
+00003  * All rights reserved.
+00004  *
+00005  * Redistribution and use in source and binary forms, with or without
+00006  * modification, are permitted provided that the following conditions
+00007  * are met:
+00008  * 1. Redistributions of source code must retain the above copyright
+00009  *    notice, this list of conditions and the following disclaimer.
+00010  * 2. Redistributions in binary form must reproduce the above copyright
+00011  *    notice, this list of conditions and the following disclaimer in the
+00012  *    documentation and/or other materials provided with the distribution.
+00013  * 3. Neither the name of the Institute nor the names of its contributors
+00014  *    may be used to endorse or promote products derived from this software
+00015  *    without specific prior written permission.
+00016  *
+00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00027  * SUCH DAMAGE.
+00028  *
+00029  * This file is part of the uIP TCP/IP stack
+00030  *
+00031  * Author: Adam Dunkels <adam@sics.se>
+00032  *
+00033  * $Id: uip-split.h,v 1.2 2006/06/12 08:00:30 adam Exp $
+00034  */
+00035 /**
+00036  * \addtogroup uip
+00037  * @{
+00038  */
+00039 
+00040 /**
+00041  * \defgroup uipsplit uIP TCP throughput booster hack
+00042  * @{
+00043  *
+00044  * The basic uIP TCP implementation only allows each TCP connection to
+00045  * have a single TCP segment in flight at any given time. Because of
+00046  * the delayed ACK algorithm employed by most TCP receivers, uIP's
+00047  * limit on the amount of in-flight TCP segments seriously reduces the
+00048  * maximum achievable throughput for sending data from uIP.
+00049  *
+00050  * The uip-split module is a hack which tries to remedy this
+00051  * situation. By splitting maximum sized outgoing TCP segments into
+00052  * two, the delayed ACK algorithm is not invoked at TCP
+00053  * receivers. This improves the throughput when sending data from uIP
+00054  * by orders of magnitude.
+00055  *
+00056  * The uip-split module uses the uip-fw module (uIP IP packet
+00057  * forwarding) for sending packets. Therefore, the uip-fw module must
+00058  * be set up with the appropriate network interfaces for this module
+00059  * to work.
+00060  */
+00061 
+00062 
+00063 /**
+00064  * \file
+00065  * Module for splitting outbound TCP segments in two to avoid the
+00066  * delayed ACK throughput degradation.
+00067  * \author
+00068  * Adam Dunkels <adam@sics.se>
+00069  *
+00070  */
+00071 
+00072 #ifndef __UIP_SPLIT_H__
+00073 #define __UIP_SPLIT_H__
+00074 
+00075 /**
+00076  * Handle outgoing packets.
+00077  *
+00078  * This function inspects an outgoing packet in the uip_buf buffer and
+00079  * sends it out using the uip_fw_output() function. If the packet is a
+00080  * full-sized TCP segment it will be split into two segments and
+00081  * transmitted separately. This function should be called instead of
+00082  * the actual device driver output function, or the uip_fw_output()
+00083  * function.
+00084  *
+00085  * The headers of the outgoing packet is assumed to be in the uip_buf
+00086  * buffer and the payload is assumed to be wherever uip_appdata
+00087  * points. The length of the outgoing packet is assumed to be in the
+00088  * uip_len variable.
+00089  *
+00090  */
+00091 void uip_split_output(void);
+00092 
+00093 #endif /* __UIP_SPLIT_H__ */
+00094 
+00095 /** @} */
+00096 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00201.html b/components/net/uip/doc/html/a00201.html new file mode 100644 index 0000000000..bf6878fb74 --- /dev/null +++ b/components/net/uip/doc/html/a00201.html @@ -0,0 +1,1922 @@ + + +uIP 1.0: uip/uip.c Source File + + + + + + +

uip/uip.c

Go to the documentation of this file.
00001 #define DEBUG_PRINTF(...) /*printf(__VA_ARGS__)*/
+00002 
+00003 /**
+00004  * \defgroup uip The uIP TCP/IP stack
+00005  * @{
+00006  *
+00007  * uIP is an implementation of the TCP/IP protocol stack intended for
+00008  * small 8-bit and 16-bit microcontrollers.
+00009  *
+00010  * uIP provides the necessary protocols for Internet communication,
+00011  * with a very small code footprint and RAM requirements - the uIP
+00012  * code size is on the order of a few kilobytes and RAM usage is on
+00013  * the order of a few hundred bytes.
+00014  */
+00015 
+00016 /**
+00017  * \file
+00018  * The uIP TCP/IP stack code.
+00019  * \author Adam Dunkels <adam@dunkels.com>
+00020  */
+00021 
+00022 /*
+00023  * Copyright (c) 2001-2003, Adam Dunkels.
+00024  * All rights reserved.
+00025  *
+00026  * Redistribution and use in source and binary forms, with or without
+00027  * modification, are permitted provided that the following conditions
+00028  * are met:
+00029  * 1. Redistributions of source code must retain the above copyright
+00030  *    notice, this list of conditions and the following disclaimer.
+00031  * 2. Redistributions in binary form must reproduce the above copyright
+00032  *    notice, this list of conditions and the following disclaimer in the
+00033  *    documentation and/or other materials provided with the distribution.
+00034  * 3. The name of the author may not be used to endorse or promote
+00035  *    products derived from this software without specific prior
+00036  *    written permission.
+00037  *
+00038  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00039  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00040  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00041  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00042  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00043  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00044  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00045  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00046  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00047  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00048  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00049  *
+00050  * This file is part of the uIP TCP/IP stack.
+00051  *
+00052  * $Id: uip.c,v 1.65 2006/06/11 21:46:39 adam Exp $
+00053  *
+00054  */
+00055 
+00056 /*
+00057  * uIP is a small implementation of the IP, UDP and TCP protocols (as
+00058  * well as some basic ICMP stuff). The implementation couples the IP,
+00059  * UDP, TCP and the application layers very tightly. To keep the size
+00060  * of the compiled code down, this code frequently uses the goto
+00061  * statement. While it would be possible to break the uip_process()
+00062  * function into many smaller functions, this would increase the code
+00063  * size because of the overhead of parameter passing and the fact that
+00064  * the optimier would not be as efficient.
+00065  *
+00066  * The principle is that we have a small buffer, called the uip_buf,
+00067  * in which the device driver puts an incoming packet. The TCP/IP
+00068  * stack parses the headers in the packet, and calls the
+00069  * application. If the remote host has sent data to the application,
+00070  * this data is present in the uip_buf and the application read the
+00071  * data from there. It is up to the application to put this data into
+00072  * a byte stream if needed. The application will not be fed with data
+00073  * that is out of sequence.
+00074  *
+00075  * If the application whishes to send data to the peer, it should put
+00076  * its data into the uip_buf. The uip_appdata pointer points to the
+00077  * first available byte. The TCP/IP stack will calculate the
+00078  * checksums, and fill in the necessary header fields and finally send
+00079  * the packet back to the peer.
+00080 */
+00081 
+00082 #include "uip.h"
+00083 #include "uipopt.h"
+00084 #include "uip_arch.h"
+00085 
+00086 #if UIP_CONF_IPV6
+00087 #include "uip-neighbor.h"
+00088 #endif /* UIP_CONF_IPV6 */
+00089 
+00090 #include <string.h>
+00091 
+00092 /*---------------------------------------------------------------------------*/
+00093 /* Variable definitions. */
+00094 
+00095 
+00096 /* The IP address of this host. If it is defined to be fixed (by
+00097    setting UIP_FIXEDADDR to 1 in uipopt.h), the address is set
+00098    here. Otherwise, the address */
+00099 #if UIP_FIXEDADDR > 0
+00100 const uip_ipaddr_t uip_hostaddr =
+00101   {HTONS((UIP_IPADDR0 << 8) | UIP_IPADDR1),
+00102    HTONS((UIP_IPADDR2 << 8) | UIP_IPADDR3)};
+00103 const uip_ipaddr_t uip_draddr =
+00104   {HTONS((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1),
+00105    HTONS((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3)};
+00106 const uip_ipaddr_t uip_netmask =
+00107   {HTONS((UIP_NETMASK0 << 8) | UIP_NETMASK1),
+00108    HTONS((UIP_NETMASK2 << 8) | UIP_NETMASK3)};
+00109 #else
+00110 uip_ipaddr_t uip_hostaddr, uip_draddr, uip_netmask;
+00111 #endif /* UIP_FIXEDADDR */
+00112 
+00113 static const uip_ipaddr_t all_ones_addr =
+00114 #if UIP_CONF_IPV6
+00115   {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
+00116 #else /* UIP_CONF_IPV6 */
+00117   {0xffff,0xffff};
+00118 #endif /* UIP_CONF_IPV6 */
+00119 static const uip_ipaddr_t all_zeroes_addr =
+00120 #if UIP_CONF_IPV6
+00121   {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
+00122 #else /* UIP_CONF_IPV6 */
+00123   {0x0000,0x0000};
+00124 #endif /* UIP_CONF_IPV6 */
+00125 
+00126 
+00127 #if UIP_FIXEDETHADDR
+00128 const struct uip_eth_addr uip_ethaddr = {{UIP_ETHADDR0,
+00129                                           UIP_ETHADDR1,
+00130                                           UIP_ETHADDR2,
+00131                                           UIP_ETHADDR3,
+00132                                           UIP_ETHADDR4,
+00133                                           UIP_ETHADDR5}};
+00134 #else
+00135 struct uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}};
+00136 #endif
+00137 
+00138 #ifndef UIP_CONF_EXTERNAL_BUFFER
+00139 u8_t uip_buf[UIP_BUFSIZE + 2];   /* The packet buffer that contains
+00140                                     incoming packets. */
+00141 #endif /* UIP_CONF_EXTERNAL_BUFFER */
+00142 
+00143 void *uip_appdata;               /* The uip_appdata pointer points to
+00144                                     application data. */
+00145 void *uip_sappdata;              /* The uip_appdata pointer points to
+00146                                     the application data which is to
+00147                                     be sent. */
+00148 #if UIP_URGDATA > 0
+00149 void *uip_urgdata;               /* The uip_urgdata pointer points to
+00150                                     urgent data (out-of-band data), if
+00151                                     present. */
+00152 u16_t uip_urglen, uip_surglen;
+00153 #endif /* UIP_URGDATA > 0 */
+00154 
+00155 u16_t uip_len, uip_slen;
+00156                              /* The uip_len is either 8 or 16 bits,
+00157                                 depending on the maximum packet
+00158                                 size. */
+00159 
+00160 u8_t uip_flags;     /* The uip_flags variable is used for
+00161                                 communication between the TCP/IP stack
+00162                                 and the application program. */
+00163 struct uip_conn *uip_conn;   /* uip_conn always points to the current
+00164                                 connection. */
+00165 
+00166 struct uip_conn uip_conns[UIP_CONNS];
+00167                              /* The uip_conns array holds all TCP
+00168                                 connections. */
+00169 u16_t uip_listenports[UIP_LISTENPORTS];
+00170                              /* The uip_listenports list all currently
+00171                                 listning ports. */
+00172 #if UIP_UDP
+00173 struct uip_udp_conn *uip_udp_conn;
+00174 struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS];
+00175 #endif /* UIP_UDP */
+00176 
+00177 static u16_t ipid;           /* Ths ipid variable is an increasing
+00178                                 number that is used for the IP ID
+00179                                 field. */
+00180 
+00181 void uip_setipid(u16_t id) { ipid = id; }
+00182 
+00183 static u8_t iss[4];          /* The iss variable is used for the TCP
+00184                                 initial sequence number. */
+00185 
+00186 #if UIP_ACTIVE_OPEN
+00187 static u16_t lastport;       /* Keeps track of the last port used for
+00188                                 a new connection. */
+00189 #endif /* UIP_ACTIVE_OPEN */
+00190 
+00191 /* Temporary variables. */
+00192 u8_t uip_acc32[4];
+00193 static u8_t c, opt;
+00194 static u16_t tmp16;
+00195 
+00196 /* Structures and definitions. */
+00197 #define TCP_FIN 0x01
+00198 #define TCP_SYN 0x02
+00199 #define TCP_RST 0x04
+00200 #define TCP_PSH 0x08
+00201 #define TCP_ACK 0x10
+00202 #define TCP_URG 0x20
+00203 #define TCP_CTL 0x3f
+00204 
+00205 #define TCP_OPT_END     0   /* End of TCP options list */
+00206 #define TCP_OPT_NOOP    1   /* "No-operation" TCP option */
+00207 #define TCP_OPT_MSS     2   /* Maximum segment size TCP option */
+00208 
+00209 #define TCP_OPT_MSS_LEN 4   /* Length of TCP MSS option. */
+00210 
+00211 #define ICMP_ECHO_REPLY 0
+00212 #define ICMP_ECHO       8
+00213 
+00214 #define ICMP6_ECHO_REPLY             129
+00215 #define ICMP6_ECHO                   128
+00216 #define ICMP6_NEIGHBOR_SOLICITATION  135
+00217 #define ICMP6_NEIGHBOR_ADVERTISEMENT 136
+00218 
+00219 #define ICMP6_FLAG_S (1 << 6)
+00220 
+00221 #define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1
+00222 #define ICMP6_OPTION_TARGET_LINK_ADDRESS 2
+00223 
+00224 
+00225 /* Macros. */
+00226 #define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
+00227 #define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
+00228 #define ICMPBUF ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])
+00229 #define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])
+00230 
+00231 
+00232 #if UIP_STATISTICS == 1
+00233 struct uip_stats uip_stat;
+00234 #define UIP_STAT(s) s
+00235 #else
+00236 #define UIP_STAT(s)
+00237 #endif /* UIP_STATISTICS == 1 */
+00238 
+00239 #if UIP_LOGGING == 1
+00240 #include <stdio.h>
+00241 void uip_log(char *msg);
+00242 #define UIP_LOG(m) uip_log(m)
+00243 #else
+00244 #define UIP_LOG(m)
+00245 #endif /* UIP_LOGGING == 1 */
+00246 
+00247 #if ! UIP_ARCH_ADD32
+00248 void
+00249 uip_add32(u8_t *op32, u16_t op16)
+00250 {
+00251   uip_acc32[3] = op32[3] + (op16 & 0xff);
+00252   uip_acc32[2] = op32[2] + (op16 >> 8);
+00253   uip_acc32[1] = op32[1];
+00254   uip_acc32[0] = op32[0];
+00255   
+00256   if(uip_acc32[2] < (op16 >> 8)) {
+00257     ++uip_acc32[1];
+00258     if(uip_acc32[1] == 0) {
+00259       ++uip_acc32[0];
+00260     }
+00261   }
+00262   
+00263   
+00264   if(uip_acc32[3] < (op16 & 0xff)) {
+00265     ++uip_acc32[2];
+00266     if(uip_acc32[2] == 0) {
+00267       ++uip_acc32[1];
+00268       if(uip_acc32[1] == 0) {
+00269         ++uip_acc32[0];
+00270       }
+00271     }
+00272   }
+00273 }
+00274 
+00275 #endif /* UIP_ARCH_ADD32 */
+00276 
+00277 #if ! UIP_ARCH_CHKSUM
+00278 /*---------------------------------------------------------------------------*/
+00279 static u16_t
+00280 chksum(u16_t sum, const u8_t *data, u16_t len)
+00281 {
+00282   u16_t t;
+00283   const u8_t *dataptr;
+00284   const u8_t *last_byte;
+00285 
+00286   dataptr = data;
+00287   last_byte = data + len - 1;
+00288   
+00289   while(dataptr < last_byte) {  /* At least two more bytes */
+00290     t = (dataptr[0] << 8) + dataptr[1];
+00291     sum += t;
+00292     if(sum < t) {
+00293       sum++;            /* carry */
+00294     }
+00295     dataptr += 2;
+00296   }
+00297   
+00298   if(dataptr == last_byte) {
+00299     t = (dataptr[0] << 8) + 0;
+00300     sum += t;
+00301     if(sum < t) {
+00302       sum++;            /* carry */
+00303     }
+00304   }
+00305 
+00306   /* Return sum in host byte order. */
+00307   return sum;
+00308 }
+00309 /*---------------------------------------------------------------------------*/
+00310 u16_t
+00311 uip_chksum(u16_t *data, u16_t len)
+00312 {
+00313   return htons(chksum(0, (u8_t *)data, len));
+00314 }
+00315 /*---------------------------------------------------------------------------*/
+00316 #ifndef UIP_ARCH_IPCHKSUM
+00317 u16_t
+00318 uip_ipchksum(void)
+00319 {
+00320   u16_t sum;
+00321 
+00322   sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN);
+00323   DEBUG_PRINTF("uip_ipchksum: sum 0x%04x\n", sum);
+00324   return (sum == 0) ? 0xffff : htons(sum);
+00325 }
+00326 #endif
+00327 /*---------------------------------------------------------------------------*/
+00328 static u16_t
+00329 upper_layer_chksum(u8_t proto)
+00330 {
+00331   u16_t upper_layer_len;
+00332   u16_t sum;
+00333   
+00334 #if UIP_CONF_IPV6
+00335   upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]);
+00336 #else /* UIP_CONF_IPV6 */
+00337   upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN;
+00338 #endif /* UIP_CONF_IPV6 */
+00339   
+00340   /* First sum pseudoheader. */
+00341   
+00342   /* IP protocol and length fields. This addition cannot carry. */
+00343   sum = upper_layer_len + proto;
+00344   /* Sum IP source and destination addresses. */
+00345   sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t));
+00346 
+00347   /* Sum TCP header and data. */
+00348   sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN],
+00349                upper_layer_len);
+00350     
+00351   return (sum == 0) ? 0xffff : htons(sum);
+00352 }
+00353 /*---------------------------------------------------------------------------*/
+00354 #if UIP_CONF_IPV6
+00355 u16_t
+00356 uip_icmp6chksum(void)
+00357 {
+00358   return upper_layer_chksum(UIP_PROTO_ICMP6);
+00359   
+00360 }
+00361 #endif /* UIP_CONF_IPV6 */
+00362 /*---------------------------------------------------------------------------*/
+00363 u16_t
+00364 uip_tcpchksum(void)
+00365 {
+00366   return upper_layer_chksum(UIP_PROTO_TCP);
+00367 }
+00368 /*---------------------------------------------------------------------------*/
+00369 #if UIP_UDP_CHECKSUMS
+00370 u16_t
+00371 uip_udpchksum(void)
+00372 {
+00373   return upper_layer_chksum(UIP_PROTO_UDP);
+00374 }
+00375 #endif /* UIP_UDP_CHECKSUMS */
+00376 #endif /* UIP_ARCH_CHKSUM */
+00377 /*---------------------------------------------------------------------------*/
+00378 void
+00379 uip_init(void)
+00380 {
+00381   for(c = 0; c < UIP_LISTENPORTS; ++c) {
+00382     uip_listenports[c] = 0;
+00383   }
+00384   for(c = 0; c < UIP_CONNS; ++c) {
+00385     uip_conns[c].tcpstateflags = UIP_CLOSED;
+00386   }
+00387 #if UIP_ACTIVE_OPEN
+00388   lastport = 1024;
+00389 #endif /* UIP_ACTIVE_OPEN */
+00390 
+00391 #if UIP_UDP
+00392   for(c = 0; c < UIP_UDP_CONNS; ++c) {
+00393     uip_udp_conns[c].lport = 0;
+00394   }
+00395 #endif /* UIP_UDP */
+00396   
+00397 
+00398   /* IPv4 initialization. */
+00399 #if UIP_FIXEDADDR == 0
+00400   /*  uip_hostaddr[0] = uip_hostaddr[1] = 0;*/
+00401 #endif /* UIP_FIXEDADDR */
+00402 
+00403 }
+00404 /*---------------------------------------------------------------------------*/
+00405 #if UIP_ACTIVE_OPEN
+00406 struct uip_conn *
+00407 uip_connect(uip_ipaddr_t *ripaddr, u16_t rport)
+00408 {
+00409   register struct uip_conn *conn, *cconn;
+00410   
+00411   /* Find an unused local port. */
+00412  again:
+00413   ++lastport;
+00414 
+00415   if(lastport >= 32000) {
+00416     lastport = 4096;
+00417   }
+00418 
+00419   /* Check if this port is already in use, and if so try to find
+00420      another one. */
+00421   for(c = 0; c < UIP_CONNS; ++c) {
+00422     conn = &uip_conns[c];
+00423     if(conn->tcpstateflags != UIP_CLOSED &&
+00424        conn->lport == htons(lastport)) {
+00425       goto again;
+00426     }
+00427   }
+00428 
+00429   conn = 0;
+00430   for(c = 0; c < UIP_CONNS; ++c) {
+00431     cconn = &uip_conns[c];
+00432     if(cconn->tcpstateflags == UIP_CLOSED) {
+00433       conn = cconn;
+00434       break;
+00435     }
+00436     if(cconn->tcpstateflags == UIP_TIME_WAIT) {
+00437       if(conn == 0 ||
+00438          cconn->timer > conn->timer) {
+00439         conn = cconn;
+00440       }
+00441     }
+00442   }
+00443 
+00444   if(conn == 0) {
+00445     return 0;
+00446   }
+00447   
+00448   conn->tcpstateflags = UIP_SYN_SENT;
+00449 
+00450   conn->snd_nxt[0] = iss[0];
+00451   conn->snd_nxt[1] = iss[1];
+00452   conn->snd_nxt[2] = iss[2];
+00453   conn->snd_nxt[3] = iss[3];
+00454 
+00455   conn->initialmss = conn->mss = UIP_TCP_MSS;
+00456   
+00457   conn->len = 1;   /* TCP length of the SYN is one. */
+00458   conn->nrtx = 0;
+00459   conn->timer = 1; /* Send the SYN next time around. */
+00460   conn->rto = UIP_RTO;
+00461   conn->sa = 0;
+00462   conn->sv = 16;   /* Initial value of the RTT variance. */
+00463   conn->lport = htons(lastport);
+00464   conn->rport = rport;
+00465   uip_ipaddr_copy(&conn->ripaddr, ripaddr);
+00466   
+00467   return conn;
+00468 }
+00469 #endif /* UIP_ACTIVE_OPEN */
+00470 /*---------------------------------------------------------------------------*/
+00471 #if UIP_UDP
+00472 struct uip_udp_conn *
+00473 uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport)
+00474 {
+00475   register struct uip_udp_conn *conn;
+00476   
+00477   /* Find an unused local port. */
+00478  again:
+00479   ++lastport;
+00480 
+00481   if(lastport >= 32000) {
+00482     lastport = 4096;
+00483   }
+00484   
+00485   for(c = 0; c < UIP_UDP_CONNS; ++c) {
+00486     if(uip_udp_conns[c].lport == htons(lastport)) {
+00487       goto again;
+00488     }
+00489   }
+00490 
+00491 
+00492   conn = 0;
+00493   for(c = 0; c < UIP_UDP_CONNS; ++c) {
+00494     if(uip_udp_conns[c].lport == 0) {
+00495       conn = &uip_udp_conns[c];
+00496       break;
+00497     }
+00498   }
+00499 
+00500   if(conn == 0) {
+00501     return 0;
+00502   }
+00503   
+00504   conn->lport = HTONS(lastport);
+00505   conn->rport = rport;
+00506   if(ripaddr == NULL) {
+00507     memset(conn->ripaddr, 0, sizeof(uip_ipaddr_t));
+00508   } else {
+00509     uip_ipaddr_copy(&conn->ripaddr, ripaddr);
+00510   }
+00511   conn->ttl = UIP_TTL;
+00512   
+00513   return conn;
+00514 }
+00515 #endif /* UIP_UDP */
+00516 /*---------------------------------------------------------------------------*/
+00517 void
+00518 uip_unlisten(u16_t port)
+00519 {
+00520   for(c = 0; c < UIP_LISTENPORTS; ++c) {
+00521     if(uip_listenports[c] == port) {
+00522       uip_listenports[c] = 0;
+00523       return;
+00524     }
+00525   }
+00526 }
+00527 /*---------------------------------------------------------------------------*/
+00528 void
+00529 uip_listen(u16_t port)
+00530 {
+00531   for(c = 0; c < UIP_LISTENPORTS; ++c) {
+00532     if(uip_listenports[c] == 0) {
+00533       uip_listenports[c] = port;
+00534       return;
+00535     }
+00536   }
+00537 }
+00538 /*---------------------------------------------------------------------------*/
+00539 /* XXX: IP fragment reassembly: not well-tested. */
+00540 
+00541 #if UIP_REASSEMBLY && !UIP_CONF_IPV6
+00542 #define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN)
+00543 static u8_t uip_reassbuf[UIP_REASS_BUFSIZE];
+00544 static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)];
+00545 static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f,
+00546                                     0x0f, 0x07, 0x03, 0x01};
+00547 static u16_t uip_reasslen;
+00548 static u8_t uip_reassflags;
+00549 #define UIP_REASS_FLAG_LASTFRAG 0x01
+00550 static u8_t uip_reasstmr;
+00551 
+00552 #define IP_MF   0x20
+00553 
+00554 static u8_t
+00555 uip_reass(void)
+00556 {
+00557   u16_t offset, len;
+00558   u16_t i;
+00559 
+00560   /* If ip_reasstmr is zero, no packet is present in the buffer, so we
+00561      write the IP header of the fragment into the reassembly
+00562      buffer. The timer is updated with the maximum age. */
+00563   if(uip_reasstmr == 0) {
+00564     memcpy(uip_reassbuf, &BUF->vhl, UIP_IPH_LEN);
+00565     uip_reasstmr = UIP_REASS_MAXAGE;
+00566     uip_reassflags = 0;
+00567     /* Clear the bitmap. */
+00568     memset(uip_reassbitmap, 0, sizeof(uip_reassbitmap));
+00569   }
+00570 
+00571   /* Check if the incoming fragment matches the one currently present
+00572      in the reasembly buffer. If so, we proceed with copying the
+00573      fragment into the buffer. */
+00574   if(BUF->srcipaddr[0] == FBUF->srcipaddr[0] &&
+00575      BUF->srcipaddr[1] == FBUF->srcipaddr[1] &&
+00576      BUF->destipaddr[0] == FBUF->destipaddr[0] &&
+00577      BUF->destipaddr[1] == FBUF->destipaddr[1] &&
+00578      BUF->ipid[0] == FBUF->ipid[0] &&
+00579      BUF->ipid[1] == FBUF->ipid[1]) {
+00580 
+00581     len = (BUF->len[0] << 8) + BUF->len[1] - (BUF->vhl & 0x0f) * 4;
+00582     offset = (((BUF->ipoffset[0] & 0x3f) << 8) + BUF->ipoffset[1]) * 8;
+00583 
+00584     /* If the offset or the offset + fragment length overflows the
+00585        reassembly buffer, we discard the entire packet. */
+00586     if(offset > UIP_REASS_BUFSIZE ||
+00587        offset + len > UIP_REASS_BUFSIZE) {
+00588       uip_reasstmr = 0;
+00589       goto nullreturn;
+00590     }
+00591 
+00592     /* Copy the fragment into the reassembly buffer, at the right
+00593        offset. */
+00594     memcpy(&uip_reassbuf[UIP_IPH_LEN + offset],
+00595            (char *)BUF + (int)((BUF->vhl & 0x0f) * 4),
+00596            len);
+00597       
+00598     /* Update the bitmap. */
+00599     if(offset / (8 * 8) == (offset + len) / (8 * 8)) {
+00600       /* If the two endpoints are in the same byte, we only update
+00601          that byte. */
+00602              
+00603       uip_reassbitmap[offset / (8 * 8)] |=
+00604              bitmap_bits[(offset / 8 ) & 7] &
+00605              ~bitmap_bits[((offset + len) / 8 ) & 7];
+00606     } else {
+00607       /* If the two endpoints are in different bytes, we update the
+00608          bytes in the endpoints and fill the stuff inbetween with
+00609          0xff. */
+00610       uip_reassbitmap[offset / (8 * 8)] |=
+00611         bitmap_bits[(offset / 8 ) & 7];
+00612       for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) {
+00613         uip_reassbitmap[i] = 0xff;
+00614       }
+00615       uip_reassbitmap[(offset + len) / (8 * 8)] |=
+00616         ~bitmap_bits[((offset + len) / 8 ) & 7];
+00617     }
+00618     
+00619     /* If this fragment has the More Fragments flag set to zero, we
+00620        know that this is the last fragment, so we can calculate the
+00621        size of the entire packet. We also set the
+00622        IP_REASS_FLAG_LASTFRAG flag to indicate that we have received
+00623        the final fragment. */
+00624 
+00625     if((BUF->ipoffset[0] & IP_MF) == 0) {
+00626       uip_reassflags |= UIP_REASS_FLAG_LASTFRAG;
+00627       uip_reasslen = offset + len;
+00628     }
+00629     
+00630     /* Finally, we check if we have a full packet in the buffer. We do
+00631        this by checking if we have the last fragment and if all bits
+00632        in the bitmap are set. */
+00633     if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) {
+00634       /* Check all bytes up to and including all but the last byte in
+00635          the bitmap. */
+00636       for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) {
+00637         if(uip_reassbitmap[i] != 0xff) {
+00638           goto nullreturn;
+00639         }
+00640       }
+00641       /* Check the last byte in the bitmap. It should contain just the
+00642          right amount of bits. */
+00643       if(uip_reassbitmap[uip_reasslen / (8 * 8)] !=
+00644          (u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) {
+00645         goto nullreturn;
+00646       }
+00647 
+00648       /* If we have come this far, we have a full packet in the
+00649          buffer, so we allocate a pbuf and copy the packet into it. We
+00650          also reset the timer. */
+00651       uip_reasstmr = 0;
+00652       memcpy(BUF, FBUF, uip_reasslen);
+00653 
+00654       /* Pretend to be a "normal" (i.e., not fragmented) IP packet
+00655          from now on. */
+00656       BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
+00657       BUF->len[0] = uip_reasslen >> 8;
+00658       BUF->len[1] = uip_reasslen & 0xff;
+00659       BUF->ipchksum = 0;
+00660       BUF->ipchksum = ~(uip_ipchksum());
+00661 
+00662       return uip_reasslen;
+00663     }
+00664   }
+00665 
+00666  nullreturn:
+00667   return 0;
+00668 }
+00669 #endif /* UIP_REASSEMBLY */
+00670 /*---------------------------------------------------------------------------*/
+00671 static void
+00672 uip_add_rcv_nxt(u16_t n)
+00673 {
+00674   uip_add32(uip_conn->rcv_nxt, n);
+00675   uip_conn->rcv_nxt[0] = uip_acc32[0];
+00676   uip_conn->rcv_nxt[1] = uip_acc32[1];
+00677   uip_conn->rcv_nxt[2] = uip_acc32[2];
+00678   uip_conn->rcv_nxt[3] = uip_acc32[3];
+00679 }
+00680 /*---------------------------------------------------------------------------*/
+00681 void
+00682 uip_process(u8_t flag)
+00683 {
+00684   register struct uip_conn *uip_connr = uip_conn;
+00685 
+00686 #if UIP_UDP
+00687   if(flag == UIP_UDP_SEND_CONN) {
+00688     goto udp_send;
+00689   }
+00690 #endif /* UIP_UDP */
+00691   
+00692   uip_sappdata = uip_appdata = &uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN];
+00693 
+00694   /* Check if we were invoked because of a poll request for a
+00695      particular connection. */
+00696   if(flag == UIP_POLL_REQUEST) {
+00697     if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED &&
+00698        !uip_outstanding(uip_connr)) {
+00699         uip_flags = UIP_POLL;
+00700         UIP_APPCALL();
+00701         goto appsend;
+00702     }
+00703     goto drop;
+00704     
+00705     /* Check if we were invoked because of the perodic timer fireing. */
+00706   } else if(flag == UIP_TIMER) {
+00707 #if UIP_REASSEMBLY
+00708     if(uip_reasstmr != 0) {
+00709       --uip_reasstmr;
+00710     }
+00711 #endif /* UIP_REASSEMBLY */
+00712     /* Increase the initial sequence number. */
+00713     if(++iss[3] == 0) {
+00714       if(++iss[2] == 0) {
+00715         if(++iss[1] == 0) {
+00716           ++iss[0];
+00717         }
+00718       }
+00719     }
+00720 
+00721     /* Reset the length variables. */
+00722     uip_len = 0;
+00723     uip_slen = 0;
+00724 
+00725     /* Check if the connection is in a state in which we simply wait
+00726        for the connection to time out. If so, we increase the
+00727        connection's timer and remove the connection if it times
+00728        out. */
+00729     if(uip_connr->tcpstateflags == UIP_TIME_WAIT ||
+00730        uip_connr->tcpstateflags == UIP_FIN_WAIT_2) {
+00731       ++(uip_connr->timer);
+00732       if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) {
+00733         uip_connr->tcpstateflags = UIP_CLOSED;
+00734       }
+00735     } else if(uip_connr->tcpstateflags != UIP_CLOSED) {
+00736       /* If the connection has outstanding data, we increase the
+00737          connection's timer and see if it has reached the RTO value
+00738          in which case we retransmit. */
+00739       if(uip_outstanding(uip_connr)) {
+00740         if(uip_connr->timer-- == 0) {
+00741           if(uip_connr->nrtx == UIP_MAXRTX ||
+00742              ((uip_connr->tcpstateflags == UIP_SYN_SENT ||
+00743                uip_connr->tcpstateflags == UIP_SYN_RCVD) &&
+00744               uip_connr->nrtx == UIP_MAXSYNRTX)) {
+00745             uip_connr->tcpstateflags = UIP_CLOSED;
+00746 
+00747             /* We call UIP_APPCALL() with uip_flags set to
+00748                UIP_TIMEDOUT to inform the application that the
+00749                connection has timed out. */
+00750             uip_flags = UIP_TIMEDOUT;
+00751             UIP_APPCALL();
+00752 
+00753             /* We also send a reset packet to the remote host. */
+00754             BUF->flags = TCP_RST | TCP_ACK;
+00755             goto tcp_send_nodata;
+00756           }
+00757 
+00758           /* Exponential backoff. */
+00759           uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4?
+00760                                          4:
+00761                                          uip_connr->nrtx);
+00762           ++(uip_connr->nrtx);
+00763           
+00764           /* Ok, so we need to retransmit. We do this differently
+00765              depending on which state we are in. In ESTABLISHED, we
+00766              call upon the application so that it may prepare the
+00767              data for the retransmit. In SYN_RCVD, we resend the
+00768              SYNACK that we sent earlier and in LAST_ACK we have to
+00769              retransmit our FINACK. */
+00770           UIP_STAT(++uip_stat.tcp.rexmit);
+00771           switch(uip_connr->tcpstateflags & UIP_TS_MASK) {
+00772           case UIP_SYN_RCVD:
+00773             /* In the SYN_RCVD state, we should retransmit our
+00774                SYNACK. */
+00775             goto tcp_send_synack;
+00776             
+00777 #if UIP_ACTIVE_OPEN
+00778           case UIP_SYN_SENT:
+00779             /* In the SYN_SENT state, we retransmit out SYN. */
+00780             BUF->flags = 0;
+00781             goto tcp_send_syn;
+00782 #endif /* UIP_ACTIVE_OPEN */
+00783             
+00784           case UIP_ESTABLISHED:
+00785             /* In the ESTABLISHED state, we call upon the application
+00786                to do the actual retransmit after which we jump into
+00787                the code for sending out the packet (the apprexmit
+00788                label). */
+00789             uip_flags = UIP_REXMIT;
+00790             UIP_APPCALL();
+00791             goto apprexmit;
+00792             
+00793           case UIP_FIN_WAIT_1:
+00794           case UIP_CLOSING:
+00795           case UIP_LAST_ACK:
+00796             /* In all these states we should retransmit a FINACK. */
+00797             goto tcp_send_finack;
+00798             
+00799           }
+00800         }
+00801       } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) {
+00802         /* If there was no need for a retransmission, we poll the
+00803            application for new data. */
+00804         uip_flags = UIP_POLL;
+00805         UIP_APPCALL();
+00806         goto appsend;
+00807       }
+00808     }
+00809     goto drop;
+00810   }
+00811 #if UIP_UDP
+00812   if(flag == UIP_UDP_TIMER) {
+00813     if(uip_udp_conn->lport != 0) {
+00814       uip_conn = NULL;
+00815       uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+00816       uip_len = uip_slen = 0;
+00817       uip_flags = UIP_POLL;
+00818       UIP_UDP_APPCALL();
+00819       goto udp_send;
+00820     } else {
+00821       goto drop;
+00822     }
+00823   }
+00824 #endif
+00825 
+00826   /* This is where the input processing starts. */
+00827   UIP_STAT(++uip_stat.ip.recv);
+00828 
+00829   /* Start of IP input header processing code. */
+00830   
+00831 #if UIP_CONF_IPV6
+00832   /* Check validity of the IP header. */
+00833   if((BUF->vtc & 0xf0) != 0x60)  { /* IP version and header length. */
+00834     UIP_STAT(++uip_stat.ip.drop);
+00835     UIP_STAT(++uip_stat.ip.vhlerr);
+00836     UIP_LOG("ipv6: invalid version.");
+00837     goto drop;
+00838   }
+00839 #else /* UIP_CONF_IPV6 */
+00840   /* Check validity of the IP header. */
+00841   if(BUF->vhl != 0x45)  { /* IP version and header length. */
+00842     UIP_STAT(++uip_stat.ip.drop);
+00843     UIP_STAT(++uip_stat.ip.vhlerr);
+00844     UIP_LOG("ip: invalid version or header length.");
+00845     goto drop;
+00846   }
+00847 #endif /* UIP_CONF_IPV6 */
+00848   
+00849   /* Check the size of the packet. If the size reported to us in
+00850      uip_len is smaller the size reported in the IP header, we assume
+00851      that the packet has been corrupted in transit. If the size of
+00852      uip_len is larger than the size reported in the IP packet header,
+00853      the packet has been padded and we set uip_len to the correct
+00854      value.. */
+00855 
+00856   if((BUF->len[0] << 8) + BUF->len[1] <= uip_len) {
+00857     uip_len = (BUF->len[0] << 8) + BUF->len[1];
+00858 #if UIP_CONF_IPV6
+00859     uip_len += 40; /* The length reported in the IPv6 header is the
+00860                       length of the payload that follows the
+00861                       header. However, uIP uses the uip_len variable
+00862                       for holding the size of the entire packet,
+00863                       including the IP header. For IPv4 this is not a
+00864                       problem as the length field in the IPv4 header
+00865                       contains the length of the entire packet. But
+00866                       for IPv6 we need to add the size of the IPv6
+00867                       header (40 bytes). */
+00868 #endif /* UIP_CONF_IPV6 */
+00869   } else {
+00870     UIP_LOG("ip: packet shorter than reported in IP header.");
+00871     goto drop;
+00872   }
+00873 
+00874 #if !UIP_CONF_IPV6
+00875   /* Check the fragment flag. */
+00876   if((BUF->ipoffset[0] & 0x3f) != 0 ||
+00877      BUF->ipoffset[1] != 0) {
+00878 #if UIP_REASSEMBLY
+00879     uip_len = uip_reass();
+00880     if(uip_len == 0) {
+00881       goto drop;
+00882     }
+00883 #else /* UIP_REASSEMBLY */
+00884     UIP_STAT(++uip_stat.ip.drop);
+00885     UIP_STAT(++uip_stat.ip.fragerr);
+00886     UIP_LOG("ip: fragment dropped.");
+00887     goto drop;
+00888 #endif /* UIP_REASSEMBLY */
+00889   }
+00890 #endif /* UIP_CONF_IPV6 */
+00891 
+00892   if(uip_ipaddr_cmp(uip_hostaddr, all_zeroes_addr)) {
+00893     /* If we are configured to use ping IP address configuration and
+00894        hasn't been assigned an IP address yet, we accept all ICMP
+00895        packets. */
+00896 #if UIP_PINGADDRCONF && !UIP_CONF_IPV6
+00897     if(BUF->proto == UIP_PROTO_ICMP) {
+00898       UIP_LOG("ip: possible ping config packet received.");
+00899       goto icmp_input;
+00900     } else {
+00901       UIP_LOG("ip: packet dropped since no address assigned.");
+00902       goto drop;
+00903     }
+00904 #endif /* UIP_PINGADDRCONF */
+00905 
+00906   } else {
+00907     /* If IP broadcast support is configured, we check for a broadcast
+00908        UDP packet, which may be destined to us. */
+00909 #if UIP_BROADCAST
+00910     DEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum());
+00911     if(BUF->proto == UIP_PROTO_UDP &&
+00912        uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr)
+00913        /*&&
+00914          uip_ipchksum() == 0xffff*/) {
+00915       goto udp_input;
+00916     }
+00917 #endif /* UIP_BROADCAST */
+00918     
+00919     /* Check if the packet is destined for our IP address. */
+00920 #if !UIP_CONF_IPV6
+00921     if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr)) {
+00922       UIP_STAT(++uip_stat.ip.drop);
+00923       goto drop;
+00924     }
+00925 #else /* UIP_CONF_IPV6 */
+00926     /* For IPv6, packet reception is a little trickier as we need to
+00927        make sure that we listen to certain multicast addresses (all
+00928        hosts multicast address, and the solicited-node multicast
+00929        address) as well. However, we will cheat here and accept all
+00930        multicast packets that are sent to the ff02::/16 addresses. */
+00931     if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr) &&
+00932        BUF->destipaddr[0] != HTONS(0xff02)) {
+00933       UIP_STAT(++uip_stat.ip.drop);
+00934       goto drop;
+00935     }
+00936 #endif /* UIP_CONF_IPV6 */
+00937   }
+00938 
+00939 #if !UIP_CONF_IPV6
+00940   if(uip_ipchksum() != 0xffff) { /* Compute and check the IP header
+00941                                     checksum. */
+00942     UIP_STAT(++uip_stat.ip.drop);
+00943     UIP_STAT(++uip_stat.ip.chkerr);
+00944     UIP_LOG("ip: bad checksum.");
+00945     goto drop;
+00946   }
+00947 #endif /* UIP_CONF_IPV6 */
+00948 
+00949   if(BUF->proto == UIP_PROTO_TCP) { /* Check for TCP packet. If so,
+00950                                        proceed with TCP input
+00951                                        processing. */
+00952     goto tcp_input;
+00953   }
+00954 
+00955 #if UIP_UDP
+00956   if(BUF->proto == UIP_PROTO_UDP) {
+00957     goto udp_input;
+00958   }
+00959 #endif /* UIP_UDP */
+00960 
+00961 #if !UIP_CONF_IPV6
+00962   /* ICMPv4 processing code follows. */
+00963   if(BUF->proto != UIP_PROTO_ICMP) { /* We only allow ICMP packets from
+00964                                         here. */
+00965     UIP_STAT(++uip_stat.ip.drop);
+00966     UIP_STAT(++uip_stat.ip.protoerr);
+00967     UIP_LOG("ip: neither tcp nor icmp.");
+00968     goto drop;
+00969   }
+00970 
+00971 #if UIP_PINGADDRCONF
+00972  icmp_input:
+00973 #endif /* UIP_PINGADDRCONF */
+00974   UIP_STAT(++uip_stat.icmp.recv);
+00975 
+00976   /* ICMP echo (i.e., ping) processing. This is simple, we only change
+00977      the ICMP type from ECHO to ECHO_REPLY and adjust the ICMP
+00978      checksum before we return the packet. */
+00979   if(ICMPBUF->type != ICMP_ECHO) {
+00980     UIP_STAT(++uip_stat.icmp.drop);
+00981     UIP_STAT(++uip_stat.icmp.typeerr);
+00982     UIP_LOG("icmp: not icmp echo.");
+00983     goto drop;
+00984   }
+00985 
+00986   /* If we are configured to use ping IP address assignment, we use
+00987      the destination IP address of this ping packet and assign it to
+00988      ourself. */
+00989 #if UIP_PINGADDRCONF
+00990   if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) {
+00991     uip_hostaddr[0] = BUF->destipaddr[0];
+00992     uip_hostaddr[1] = BUF->destipaddr[1];
+00993   }
+00994 #endif /* UIP_PINGADDRCONF */
+00995 
+00996   ICMPBUF->type = ICMP_ECHO_REPLY;
+00997 
+00998   if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) {
+00999     ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1;
+01000   } else {
+01001     ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8);
+01002   }
+01003 
+01004   /* Swap IP addresses. */
+01005   uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr);
+01006   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01007 
+01008   UIP_STAT(++uip_stat.icmp.sent);
+01009   goto send;
+01010 
+01011   /* End of IPv4 input header processing code. */
+01012 #else /* !UIP_CONF_IPV6 */
+01013 
+01014   /* This is IPv6 ICMPv6 processing code. */
+01015   DEBUG_PRINTF("icmp6_input: length %d\n", uip_len);
+01016 
+01017   if(BUF->proto != UIP_PROTO_ICMP6) { /* We only allow ICMPv6 packets from
+01018                                          here. */
+01019     UIP_STAT(++uip_stat.ip.drop);
+01020     UIP_STAT(++uip_stat.ip.protoerr);
+01021     UIP_LOG("ip: neither tcp nor icmp6.");
+01022     goto drop;
+01023   }
+01024 
+01025   UIP_STAT(++uip_stat.icmp.recv);
+01026 
+01027   /* If we get a neighbor solicitation for our address we should send
+01028      a neighbor advertisement message back. */
+01029   if(ICMPBUF->type == ICMP6_NEIGHBOR_SOLICITATION) {
+01030     if(uip_ipaddr_cmp(ICMPBUF->icmp6data, uip_hostaddr)) {
+01031 
+01032       if(ICMPBUF->options[0] == ICMP6_OPTION_SOURCE_LINK_ADDRESS) {
+01033         /* Save the sender's address in our neighbor list. */
+01034         uip_neighbor_add(ICMPBUF->srcipaddr, &(ICMPBUF->options[2]));
+01035       }
+01036       
+01037       /* We should now send a neighbor advertisement back to where the
+01038          neighbor solicication came from. */
+01039       ICMPBUF->type = ICMP6_NEIGHBOR_ADVERTISEMENT;
+01040       ICMPBUF->flags = ICMP6_FLAG_S; /* Solicited flag. */
+01041       
+01042       ICMPBUF->reserved1 = ICMPBUF->reserved2 = ICMPBUF->reserved3 = 0;
+01043       
+01044       uip_ipaddr_copy(ICMPBUF->destipaddr, ICMPBUF->srcipaddr);
+01045       uip_ipaddr_copy(ICMPBUF->srcipaddr, uip_hostaddr);
+01046       ICMPBUF->options[0] = ICMP6_OPTION_TARGET_LINK_ADDRESS;
+01047       ICMPBUF->options[1] = 1;  /* Options length, 1 = 8 bytes. */
+01048       memcpy(&(ICMPBUF->options[2]), &uip_ethaddr, sizeof(uip_ethaddr));
+01049       ICMPBUF->icmpchksum = 0;
+01050       ICMPBUF->icmpchksum = ~uip_icmp6chksum();
+01051       goto send;
+01052       
+01053     }
+01054     goto drop;
+01055   } else if(ICMPBUF->type == ICMP6_ECHO) {
+01056     /* ICMP echo (i.e., ping) processing. This is simple, we only
+01057        change the ICMP type from ECHO to ECHO_REPLY and update the
+01058        ICMP checksum before we return the packet. */
+01059 
+01060     ICMPBUF->type = ICMP6_ECHO_REPLY;
+01061     
+01062     uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr);
+01063     uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01064     ICMPBUF->icmpchksum = 0;
+01065     ICMPBUF->icmpchksum = ~uip_icmp6chksum();
+01066     
+01067     UIP_STAT(++uip_stat.icmp.sent);
+01068     goto send;
+01069   } else {
+01070     DEBUG_PRINTF("Unknown icmp6 message type %d\n", ICMPBUF->type);
+01071     UIP_STAT(++uip_stat.icmp.drop);
+01072     UIP_STAT(++uip_stat.icmp.typeerr);
+01073     UIP_LOG("icmp: unknown ICMP message.");
+01074     goto drop;
+01075   }
+01076 
+01077   /* End of IPv6 ICMP processing. */
+01078   
+01079 #endif /* !UIP_CONF_IPV6 */
+01080 
+01081 #if UIP_UDP
+01082   /* UDP input processing. */
+01083  udp_input:
+01084   /* UDP processing is really just a hack. We don't do anything to the
+01085      UDP/IP headers, but let the UDP application do all the hard
+01086      work. If the application sets uip_slen, it has a packet to
+01087      send. */
+01088 #if UIP_UDP_CHECKSUMS
+01089   uip_len = uip_len - UIP_IPUDPH_LEN;
+01090   uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+01091   if(UDPBUF->udpchksum != 0 && uip_udpchksum() != 0xffff) {
+01092     UIP_STAT(++uip_stat.udp.drop);
+01093     UIP_STAT(++uip_stat.udp.chkerr);
+01094     UIP_LOG("udp: bad checksum.");
+01095     goto drop;
+01096   }
+01097 #else /* UIP_UDP_CHECKSUMS */
+01098   uip_len = uip_len - UIP_IPUDPH_LEN;
+01099 #endif /* UIP_UDP_CHECKSUMS */
+01100 
+01101   /* Demultiplex this UDP packet between the UDP "connections". */
+01102   for(uip_udp_conn = &uip_udp_conns[0];
+01103       uip_udp_conn < &uip_udp_conns[UIP_UDP_CONNS];
+01104       ++uip_udp_conn) {
+01105     /* If the local UDP port is non-zero, the connection is considered
+01106        to be used. If so, the local port number is checked against the
+01107        destination port number in the received packet. If the two port
+01108        numbers match, the remote port number is checked if the
+01109        connection is bound to a remote port. Finally, if the
+01110        connection is bound to a remote IP address, the source IP
+01111        address of the packet is checked. */
+01112     if(uip_udp_conn->lport != 0 &&
+01113        UDPBUF->destport == uip_udp_conn->lport &&
+01114        (uip_udp_conn->rport == 0 ||
+01115         UDPBUF->srcport == uip_udp_conn->rport) &&
+01116        (uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) ||
+01117         uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) ||
+01118         uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) {
+01119       goto udp_found;
+01120     }
+01121   }
+01122   UIP_LOG("udp: no matching connection found");
+01123   goto drop;
+01124   
+01125  udp_found:
+01126   uip_conn = NULL;
+01127   uip_flags = UIP_NEWDATA;
+01128   uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+01129   uip_slen = 0;
+01130   UIP_UDP_APPCALL();
+01131  udp_send:
+01132   if(uip_slen == 0) {
+01133     goto drop;
+01134   }
+01135   uip_len = uip_slen + UIP_IPUDPH_LEN;
+01136 
+01137 #if UIP_CONF_IPV6
+01138   /* For IPv6, the IP length field does not include the IPv6 IP header
+01139      length. */
+01140   BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8);
+01141   BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
+01142 #else /* UIP_CONF_IPV6 */
+01143   BUF->len[0] = (uip_len >> 8);
+01144   BUF->len[1] = (uip_len & 0xff);
+01145 #endif /* UIP_CONF_IPV6 */
+01146 
+01147   BUF->ttl = uip_udp_conn->ttl;
+01148   BUF->proto = UIP_PROTO_UDP;
+01149 
+01150   UDPBUF->udplen = HTONS(uip_slen + UIP_UDPH_LEN);
+01151   UDPBUF->udpchksum = 0;
+01152 
+01153   BUF->srcport  = uip_udp_conn->lport;
+01154   BUF->destport = uip_udp_conn->rport;
+01155 
+01156   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01157   uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr);
+01158    
+01159   uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN];
+01160 
+01161 #if UIP_UDP_CHECKSUMS
+01162   /* Calculate UDP checksum. */
+01163   UDPBUF->udpchksum = ~(uip_udpchksum());
+01164   if(UDPBUF->udpchksum == 0) {
+01165     UDPBUF->udpchksum = 0xffff;
+01166   }
+01167 #endif /* UIP_UDP_CHECKSUMS */
+01168   
+01169   goto ip_send_nolen;
+01170 #endif /* UIP_UDP */
+01171   
+01172   /* TCP input processing. */
+01173  tcp_input:
+01174   UIP_STAT(++uip_stat.tcp.recv);
+01175 
+01176   /* Start of TCP input header processing code. */
+01177   
+01178   if(uip_tcpchksum() != 0xffff) {   /* Compute and check the TCP
+01179                                        checksum. */
+01180     UIP_STAT(++uip_stat.tcp.drop);
+01181     UIP_STAT(++uip_stat.tcp.chkerr);
+01182     UIP_LOG("tcp: bad checksum.");
+01183     goto drop;
+01184   }
+01185   
+01186   
+01187   /* Demultiplex this segment. */
+01188   /* First check any active connections. */
+01189   for(uip_connr = &uip_conns[0]; uip_connr <= &uip_conns[UIP_CONNS - 1];
+01190       ++uip_connr) {
+01191     if(uip_connr->tcpstateflags != UIP_CLOSED &&
+01192        BUF->destport == uip_connr->lport &&
+01193        BUF->srcport == uip_connr->rport &&
+01194        uip_ipaddr_cmp(BUF->srcipaddr, uip_connr->ripaddr)) {
+01195       goto found;
+01196     }
+01197   }
+01198 
+01199   /* If we didn't find and active connection that expected the packet,
+01200      either this packet is an old duplicate, or this is a SYN packet
+01201      destined for a connection in LISTEN. If the SYN flag isn't set,
+01202      it is an old packet and we send a RST. */
+01203   if((BUF->flags & TCP_CTL) != TCP_SYN) {
+01204     goto reset;
+01205   }
+01206   
+01207   tmp16 = BUF->destport;
+01208   /* Next, check listening connections. */
+01209   for(c = 0; c < UIP_LISTENPORTS; ++c) {
+01210     if(tmp16 == uip_listenports[c])
+01211       goto found_listen;
+01212   }
+01213   
+01214   /* No matching connection found, so we send a RST packet. */
+01215   UIP_STAT(++uip_stat.tcp.synrst);
+01216  reset:
+01217 
+01218   /* We do not send resets in response to resets. */
+01219   if(BUF->flags & TCP_RST) {
+01220     goto drop;
+01221   }
+01222 
+01223   UIP_STAT(++uip_stat.tcp.rst);
+01224   
+01225   BUF->flags = TCP_RST | TCP_ACK;
+01226   uip_len = UIP_IPTCPH_LEN;
+01227   BUF->tcpoffset = 5 << 4;
+01228 
+01229   /* Flip the seqno and ackno fields in the TCP header. */
+01230   c = BUF->seqno[3];
+01231   BUF->seqno[3] = BUF->ackno[3];
+01232   BUF->ackno[3] = c;
+01233   
+01234   c = BUF->seqno[2];
+01235   BUF->seqno[2] = BUF->ackno[2];
+01236   BUF->ackno[2] = c;
+01237   
+01238   c = BUF->seqno[1];
+01239   BUF->seqno[1] = BUF->ackno[1];
+01240   BUF->ackno[1] = c;
+01241   
+01242   c = BUF->seqno[0];
+01243   BUF->seqno[0] = BUF->ackno[0];
+01244   BUF->ackno[0] = c;
+01245 
+01246   /* We also have to increase the sequence number we are
+01247      acknowledging. If the least significant byte overflowed, we need
+01248      to propagate the carry to the other bytes as well. */
+01249   if(++BUF->ackno[3] == 0) {
+01250     if(++BUF->ackno[2] == 0) {
+01251       if(++BUF->ackno[1] == 0) {
+01252         ++BUF->ackno[0];
+01253       }
+01254     }
+01255   }
+01256  
+01257   /* Swap port numbers. */
+01258   tmp16 = BUF->srcport;
+01259   BUF->srcport = BUF->destport;
+01260   BUF->destport = tmp16;
+01261   
+01262   /* Swap IP addresses. */
+01263   uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr);
+01264   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01265   
+01266   /* And send out the RST packet! */
+01267   goto tcp_send_noconn;
+01268 
+01269   /* This label will be jumped to if we matched the incoming packet
+01270      with a connection in LISTEN. In that case, we should create a new
+01271      connection and send a SYNACK in return. */
+01272  found_listen:
+01273   /* First we check if there are any connections avaliable. Unused
+01274      connections are kept in the same table as used connections, but
+01275      unused ones have the tcpstate set to CLOSED. Also, connections in
+01276      TIME_WAIT are kept track of and we'll use the oldest one if no
+01277      CLOSED connections are found. Thanks to Eddie C. Dost for a very
+01278      nice algorithm for the TIME_WAIT search. */
+01279   uip_connr = 0;
+01280   for(c = 0; c < UIP_CONNS; ++c) {
+01281     if(uip_conns[c].tcpstateflags == UIP_CLOSED) {
+01282       uip_connr = &uip_conns[c];
+01283       break;
+01284     }
+01285     if(uip_conns[c].tcpstateflags == UIP_TIME_WAIT) {
+01286       if(uip_connr == 0 ||
+01287          uip_conns[c].timer > uip_connr->timer) {
+01288         uip_connr = &uip_conns[c];
+01289       }
+01290     }
+01291   }
+01292 
+01293   if(uip_connr == 0) {
+01294     /* All connections are used already, we drop packet and hope that
+01295        the remote end will retransmit the packet at a time when we
+01296        have more spare connections. */
+01297     UIP_STAT(++uip_stat.tcp.syndrop);
+01298     UIP_LOG("tcp: found no unused connections.");
+01299     goto drop;
+01300   }
+01301   uip_conn = uip_connr;
+01302   
+01303   /* Fill in the necessary fields for the new connection. */
+01304   uip_connr->rto = uip_connr->timer = UIP_RTO;
+01305   uip_connr->sa = 0;
+01306   uip_connr->sv = 4;
+01307   uip_connr->nrtx = 0;
+01308   uip_connr->lport = BUF->destport;
+01309   uip_connr->rport = BUF->srcport;
+01310   uip_ipaddr_copy(uip_connr->ripaddr, BUF->srcipaddr);
+01311   uip_connr->tcpstateflags = UIP_SYN_RCVD;
+01312 
+01313   uip_connr->snd_nxt[0] = iss[0];
+01314   uip_connr->snd_nxt[1] = iss[1];
+01315   uip_connr->snd_nxt[2] = iss[2];
+01316   uip_connr->snd_nxt[3] = iss[3];
+01317   uip_connr->len = 1;
+01318 
+01319   /* rcv_nxt should be the seqno from the incoming packet + 1. */
+01320   uip_connr->rcv_nxt[3] = BUF->seqno[3];
+01321   uip_connr->rcv_nxt[2] = BUF->seqno[2];
+01322   uip_connr->rcv_nxt[1] = BUF->seqno[1];
+01323   uip_connr->rcv_nxt[0] = BUF->seqno[0];
+01324   uip_add_rcv_nxt(1);
+01325 
+01326   /* Parse the TCP MSS option, if present. */
+01327   if((BUF->tcpoffset & 0xf0) > 0x50) {
+01328     for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) {
+01329       opt = uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + c];
+01330       if(opt == TCP_OPT_END) {
+01331         /* End of options. */
+01332         break;
+01333       } else if(opt == TCP_OPT_NOOP) {
+01334         ++c;
+01335         /* NOP option. */
+01336       } else if(opt == TCP_OPT_MSS &&
+01337                 uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) {
+01338         /* An MSS option with the right option length. */
+01339         tmp16 = ((u16_t)uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) |
+01340           (u16_t)uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + 3 + c];
+01341         uip_connr->initialmss = uip_connr->mss =
+01342           tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
+01343         
+01344         /* And we are done processing options. */
+01345         break;
+01346       } else {
+01347         /* All other options have a length field, so that we easily
+01348            can skip past them. */
+01349         if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) {
+01350           /* If the length field is zero, the options are malformed
+01351              and we don't process them further. */
+01352           break;
+01353         }
+01354         c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c];
+01355       }
+01356     }
+01357   }
+01358   
+01359   /* Our response will be a SYNACK. */
+01360 #if UIP_ACTIVE_OPEN
+01361  tcp_send_synack:
+01362   BUF->flags = TCP_ACK;
+01363   
+01364  tcp_send_syn:
+01365   BUF->flags |= TCP_SYN;
+01366 #else /* UIP_ACTIVE_OPEN */
+01367  tcp_send_synack:
+01368   BUF->flags = TCP_SYN | TCP_ACK;
+01369 #endif /* UIP_ACTIVE_OPEN */
+01370   
+01371   /* We send out the TCP Maximum Segment Size option with our
+01372      SYNACK. */
+01373   BUF->optdata[0] = TCP_OPT_MSS;
+01374   BUF->optdata[1] = TCP_OPT_MSS_LEN;
+01375   BUF->optdata[2] = (UIP_TCP_MSS) / 256;
+01376   BUF->optdata[3] = (UIP_TCP_MSS) & 255;
+01377   uip_len = UIP_IPTCPH_LEN + TCP_OPT_MSS_LEN;
+01378   BUF->tcpoffset = ((UIP_TCPH_LEN + TCP_OPT_MSS_LEN) / 4) << 4;
+01379   goto tcp_send;
+01380 
+01381   /* This label will be jumped to if we found an active connection. */
+01382  found:
+01383   uip_conn = uip_connr;
+01384   uip_flags = 0;
+01385   /* We do a very naive form of TCP reset processing; we just accept
+01386      any RST and kill our connection. We should in fact check if the
+01387      sequence number of this reset is wihtin our advertised window
+01388      before we accept the reset. */
+01389   if(BUF->flags & TCP_RST) {
+01390     uip_connr->tcpstateflags = UIP_CLOSED;
+01391     UIP_LOG("tcp: got reset, aborting connection.");
+01392     uip_flags = UIP_ABORT;
+01393     UIP_APPCALL();
+01394     goto drop;
+01395   }
+01396   /* Calculated the length of the data, if the application has sent
+01397      any data to us. */
+01398   c = (BUF->tcpoffset >> 4) << 2;
+01399   /* uip_len will contain the length of the actual TCP data. This is
+01400      calculated by subtracing the length of the TCP header (in
+01401      c) and the length of the IP header (20 bytes). */
+01402   uip_len = uip_len - c - UIP_IPH_LEN;
+01403 
+01404   /* First, check if the sequence number of the incoming packet is
+01405      what we're expecting next. If not, we send out an ACK with the
+01406      correct numbers in. */
+01407   if(!(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) &&
+01408        ((BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)))) {
+01409     if((uip_len > 0 || ((BUF->flags & (TCP_SYN | TCP_FIN)) != 0)) &&
+01410        (BUF->seqno[0] != uip_connr->rcv_nxt[0] ||
+01411         BUF->seqno[1] != uip_connr->rcv_nxt[1] ||
+01412         BUF->seqno[2] != uip_connr->rcv_nxt[2] ||
+01413         BUF->seqno[3] != uip_connr->rcv_nxt[3])) {
+01414       goto tcp_send_ack;
+01415     }
+01416   }
+01417 
+01418   /* Next, check if the incoming segment acknowledges any outstanding
+01419      data. If so, we update the sequence number, reset the length of
+01420      the outstanding data, calculate RTT estimations, and reset the
+01421      retransmission timer. */
+01422   if((BUF->flags & TCP_ACK) && uip_outstanding(uip_connr)) {
+01423     uip_add32(uip_connr->snd_nxt, uip_connr->len);
+01424 
+01425     if(BUF->ackno[0] == uip_acc32[0] &&
+01426        BUF->ackno[1] == uip_acc32[1] &&
+01427        BUF->ackno[2] == uip_acc32[2] &&
+01428        BUF->ackno[3] == uip_acc32[3]) {
+01429       /* Update sequence number. */
+01430       uip_connr->snd_nxt[0] = uip_acc32[0];
+01431       uip_connr->snd_nxt[1] = uip_acc32[1];
+01432       uip_connr->snd_nxt[2] = uip_acc32[2];
+01433       uip_connr->snd_nxt[3] = uip_acc32[3];
+01434         
+01435 
+01436       /* Do RTT estimation, unless we have done retransmissions. */
+01437       if(uip_connr->nrtx == 0) {
+01438         signed char m;
+01439         m = uip_connr->rto - uip_connr->timer;
+01440         /* This is taken directly from VJs original code in his paper */
+01441         m = m - (uip_connr->sa >> 3);
+01442         uip_connr->sa += m;
+01443         if(m < 0) {
+01444           m = -m;
+01445         }
+01446         m = m - (uip_connr->sv >> 2);
+01447         uip_connr->sv += m;
+01448         uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv;
+01449 
+01450       }
+01451       /* Set the acknowledged flag. */
+01452       uip_flags = UIP_ACKDATA;
+01453       /* Reset the retransmission timer. */
+01454       uip_connr->timer = uip_connr->rto;
+01455 
+01456       /* Reset length of outstanding data. */
+01457       uip_connr->len = 0;
+01458     }
+01459     
+01460   }
+01461 
+01462   /* Do different things depending on in what state the connection is. */
+01463   switch(uip_connr->tcpstateflags & UIP_TS_MASK) {
+01464     /* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not
+01465         implemented, since we force the application to close when the
+01466         peer sends a FIN (hence the application goes directly from
+01467         ESTABLISHED to LAST_ACK). */
+01468   case UIP_SYN_RCVD:
+01469     /* In SYN_RCVD we have sent out a SYNACK in response to a SYN, and
+01470        we are waiting for an ACK that acknowledges the data we sent
+01471        out the last time. Therefore, we want to have the UIP_ACKDATA
+01472        flag set. If so, we enter the ESTABLISHED state. */
+01473     if(uip_flags & UIP_ACKDATA) {
+01474       uip_connr->tcpstateflags = UIP_ESTABLISHED;
+01475       uip_flags = UIP_CONNECTED;
+01476       uip_connr->len = 0;
+01477       if(uip_len > 0) {
+01478         uip_flags |= UIP_NEWDATA;
+01479         uip_add_rcv_nxt(uip_len);
+01480       }
+01481       uip_slen = 0;
+01482       UIP_APPCALL();
+01483       goto appsend;
+01484     }
+01485     goto drop;
+01486 #if UIP_ACTIVE_OPEN
+01487   case UIP_SYN_SENT:
+01488     /* In SYN_SENT, we wait for a SYNACK that is sent in response to
+01489        our SYN. The rcv_nxt is set to sequence number in the SYNACK
+01490        plus one, and we send an ACK. We move into the ESTABLISHED
+01491        state. */
+01492     if((uip_flags & UIP_ACKDATA) &&
+01493        (BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)) {
+01494 
+01495       /* Parse the TCP MSS option, if present. */
+01496       if((BUF->tcpoffset & 0xf0) > 0x50) {
+01497         for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) {
+01498           opt = uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + c];
+01499           if(opt == TCP_OPT_END) {
+01500             /* End of options. */
+01501             break;
+01502           } else if(opt == TCP_OPT_NOOP) {
+01503             ++c;
+01504             /* NOP option. */
+01505           } else if(opt == TCP_OPT_MSS &&
+01506                     uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) {
+01507             /* An MSS option with the right option length. */
+01508             tmp16 = (uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) |
+01509               uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 3 + c];
+01510             uip_connr->initialmss =
+01511               uip_connr->mss = tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
+01512 
+01513             /* And we are done processing options. */
+01514             break;
+01515           } else {
+01516             /* All other options have a length field, so that we easily
+01517                can skip past them. */
+01518             if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) {
+01519               /* If the length field is zero, the options are malformed
+01520                  and we don't process them further. */
+01521               break;
+01522             }
+01523             c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c];
+01524           }
+01525         }
+01526       }
+01527       uip_connr->tcpstateflags = UIP_ESTABLISHED;
+01528       uip_connr->rcv_nxt[0] = BUF->seqno[0];
+01529       uip_connr->rcv_nxt[1] = BUF->seqno[1];
+01530       uip_connr->rcv_nxt[2] = BUF->seqno[2];
+01531       uip_connr->rcv_nxt[3] = BUF->seqno[3];
+01532       uip_add_rcv_nxt(1);
+01533       uip_flags = UIP_CONNECTED | UIP_NEWDATA;
+01534       uip_connr->len = 0;
+01535       uip_len = 0;
+01536       uip_slen = 0;
+01537       UIP_APPCALL();
+01538       goto appsend;
+01539     }
+01540     /* Inform the application that the connection failed */
+01541     uip_flags = UIP_ABORT;
+01542     UIP_APPCALL();
+01543     /* The connection is closed after we send the RST */
+01544     uip_conn->tcpstateflags = UIP_CLOSED;
+01545     goto reset;
+01546 #endif /* UIP_ACTIVE_OPEN */
+01547     
+01548   case UIP_ESTABLISHED:
+01549     /* In the ESTABLISHED state, we call upon the application to feed
+01550     data into the uip_buf. If the UIP_ACKDATA flag is set, the
+01551     application should put new data into the buffer, otherwise we are
+01552     retransmitting an old segment, and the application should put that
+01553     data into the buffer.
+01554 
+01555     If the incoming packet is a FIN, we should close the connection on
+01556     this side as well, and we send out a FIN and enter the LAST_ACK
+01557     state. We require that there is no outstanding data; otherwise the
+01558     sequence numbers will be screwed up. */
+01559 
+01560     if(BUF->flags & TCP_FIN && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
+01561       if(uip_outstanding(uip_connr)) {
+01562         goto drop;
+01563       }
+01564       uip_add_rcv_nxt(1 + uip_len);
+01565       uip_flags |= UIP_CLOSE;
+01566       if(uip_len > 0) {
+01567         uip_flags |= UIP_NEWDATA;
+01568       }
+01569       UIP_APPCALL();
+01570       uip_connr->len = 1;
+01571       uip_connr->tcpstateflags = UIP_LAST_ACK;
+01572       uip_connr->nrtx = 0;
+01573     tcp_send_finack:
+01574       BUF->flags = TCP_FIN | TCP_ACK;
+01575       goto tcp_send_nodata;
+01576     }
+01577 
+01578     /* Check the URG flag. If this is set, the segment carries urgent
+01579        data that we must pass to the application. */
+01580     if((BUF->flags & TCP_URG) != 0) {
+01581 #if UIP_URGDATA > 0
+01582       uip_urglen = (BUF->urgp[0] << 8) | BUF->urgp[1];
+01583       if(uip_urglen > uip_len) {
+01584         /* There is more urgent data in the next segment to come. */
+01585         uip_urglen = uip_len;
+01586       }
+01587       uip_add_rcv_nxt(uip_urglen);
+01588       uip_len -= uip_urglen;
+01589       uip_urgdata = uip_appdata;
+01590       uip_appdata += uip_urglen;
+01591     } else {
+01592       uip_urglen = 0;
+01593 #else /* UIP_URGDATA > 0 */
+01594       uip_appdata = ((char *)uip_appdata) + ((BUF->urgp[0] << 8) | BUF->urgp[1]);
+01595       uip_len -= (BUF->urgp[0] << 8) | BUF->urgp[1];
+01596 #endif /* UIP_URGDATA > 0 */
+01597     }
+01598 
+01599     /* If uip_len > 0 we have TCP data in the packet, and we flag this
+01600        by setting the UIP_NEWDATA flag and update the sequence number
+01601        we acknowledge. If the application has stopped the dataflow
+01602        using uip_stop(), we must not accept any data packets from the
+01603        remote host. */
+01604     if(uip_len > 0 && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
+01605       uip_flags |= UIP_NEWDATA;
+01606       uip_add_rcv_nxt(uip_len);
+01607     }
+01608 
+01609     /* Check if the available buffer space advertised by the other end
+01610        is smaller than the initial MSS for this connection. If so, we
+01611        set the current MSS to the window size to ensure that the
+01612        application does not send more data than the other end can
+01613        handle.
+01614 
+01615        If the remote host advertises a zero window, we set the MSS to
+01616        the initial MSS so that the application will send an entire MSS
+01617        of data. This data will not be acknowledged by the receiver,
+01618        and the application will retransmit it. This is called the
+01619        "persistent timer" and uses the retransmission mechanim.
+01620     */
+01621     tmp16 = ((u16_t)BUF->wnd[0] << 8) + (u16_t)BUF->wnd[1];
+01622     if(tmp16 > uip_connr->initialmss ||
+01623        tmp16 == 0) {
+01624       tmp16 = uip_connr->initialmss;
+01625     }
+01626     uip_connr->mss = tmp16;
+01627 
+01628     /* If this packet constitutes an ACK for outstanding data (flagged
+01629        by the UIP_ACKDATA flag, we should call the application since it
+01630        might want to send more data. If the incoming packet had data
+01631        from the peer (as flagged by the UIP_NEWDATA flag), the
+01632        application must also be notified.
+01633 
+01634        When the application is called, the global variable uip_len
+01635        contains the length of the incoming data. The application can
+01636        access the incoming data through the global pointer
+01637        uip_appdata, which usually points UIP_IPTCPH_LEN + UIP_LLH_LEN
+01638        bytes into the uip_buf array.
+01639 
+01640        If the application wishes to send any data, this data should be
+01641        put into the uip_appdata and the length of the data should be
+01642        put into uip_len. If the application don't have any data to
+01643        send, uip_len must be set to 0. */
+01644     if(uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) {
+01645       uip_slen = 0;
+01646       UIP_APPCALL();
+01647 
+01648     appsend:
+01649       
+01650       if(uip_flags & UIP_ABORT) {
+01651         uip_slen = 0;
+01652         uip_connr->tcpstateflags = UIP_CLOSED;
+01653         BUF->flags = TCP_RST | TCP_ACK;
+01654         goto tcp_send_nodata;
+01655       }
+01656 
+01657       if(uip_flags & UIP_CLOSE) {
+01658         uip_slen = 0;
+01659         uip_connr->len = 1;
+01660         uip_connr->tcpstateflags = UIP_FIN_WAIT_1;
+01661         uip_connr->nrtx = 0;
+01662         BUF->flags = TCP_FIN | TCP_ACK;
+01663         goto tcp_send_nodata;
+01664       }
+01665 
+01666       /* If uip_slen > 0, the application has data to be sent. */
+01667       if(uip_slen > 0) {
+01668 
+01669         /* If the connection has acknowledged data, the contents of
+01670            the ->len variable should be discarded. */
+01671         if((uip_flags & UIP_ACKDATA) != 0) {
+01672           uip_connr->len = 0;
+01673         }
+01674 
+01675         /* If the ->len variable is non-zero the connection has
+01676            already data in transit and cannot send anymore right
+01677            now. */
+01678         if(uip_connr->len == 0) {
+01679 
+01680           /* The application cannot send more than what is allowed by
+01681              the mss (the minumum of the MSS and the available
+01682              window). */
+01683           if(uip_slen > uip_connr->mss) {
+01684             uip_slen = uip_connr->mss;
+01685           }
+01686 
+01687           /* Remember how much data we send out now so that we know
+01688              when everything has been acknowledged. */
+01689           uip_connr->len = uip_slen;
+01690         } else {
+01691 
+01692           /* If the application already had unacknowledged data, we
+01693              make sure that the application does not send (i.e.,
+01694              retransmit) out more than it previously sent out. */
+01695           uip_slen = uip_connr->len;
+01696         }
+01697       }
+01698       uip_connr->nrtx = 0;
+01699     apprexmit:
+01700       uip_appdata = uip_sappdata;
+01701       
+01702       /* If the application has data to be sent, or if the incoming
+01703          packet had new data in it, we must send out a packet. */
+01704       if(uip_slen > 0 && uip_connr->len > 0) {
+01705         /* Add the length of the IP and TCP headers. */
+01706         uip_len = uip_connr->len + UIP_TCPIP_HLEN;
+01707         /* We always set the ACK flag in response packets. */
+01708         BUF->flags = TCP_ACK | TCP_PSH;
+01709         /* Send the packet. */
+01710         goto tcp_send_noopts;
+01711       }
+01712       /* If there is no data to send, just send out a pure ACK if
+01713          there is newdata. */
+01714       if(uip_flags & UIP_NEWDATA) {
+01715         uip_len = UIP_TCPIP_HLEN;
+01716         BUF->flags = TCP_ACK;
+01717         goto tcp_send_noopts;
+01718       }
+01719     }
+01720     goto drop;
+01721   case UIP_LAST_ACK:
+01722     /* We can close this connection if the peer has acknowledged our
+01723        FIN. This is indicated by the UIP_ACKDATA flag. */
+01724     if(uip_flags & UIP_ACKDATA) {
+01725       uip_connr->tcpstateflags = UIP_CLOSED;
+01726       uip_flags = UIP_CLOSE;
+01727       UIP_APPCALL();
+01728     }
+01729     break;
+01730     
+01731   case UIP_FIN_WAIT_1:
+01732     /* The application has closed the connection, but the remote host
+01733        hasn't closed its end yet. Thus we do nothing but wait for a
+01734        FIN from the other side. */
+01735     if(uip_len > 0) {
+01736       uip_add_rcv_nxt(uip_len);
+01737     }
+01738     if(BUF->flags & TCP_FIN) {
+01739       if(uip_flags & UIP_ACKDATA) {
+01740         uip_connr->tcpstateflags = UIP_TIME_WAIT;
+01741         uip_connr->timer = 0;
+01742         uip_connr->len = 0;
+01743       } else {
+01744         uip_connr->tcpstateflags = UIP_CLOSING;
+01745       }
+01746       uip_add_rcv_nxt(1);
+01747       uip_flags = UIP_CLOSE;
+01748       UIP_APPCALL();
+01749       goto tcp_send_ack;
+01750     } else if(uip_flags & UIP_ACKDATA) {
+01751       uip_connr->tcpstateflags = UIP_FIN_WAIT_2;
+01752       uip_connr->len = 0;
+01753       goto drop;
+01754     }
+01755     if(uip_len > 0) {
+01756       goto tcp_send_ack;
+01757     }
+01758     goto drop;
+01759       
+01760   case UIP_FIN_WAIT_2:
+01761     if(uip_len > 0) {
+01762       uip_add_rcv_nxt(uip_len);
+01763     }
+01764     if(BUF->flags & TCP_FIN) {
+01765       uip_connr->tcpstateflags = UIP_TIME_WAIT;
+01766       uip_connr->timer = 0;
+01767       uip_add_rcv_nxt(1);
+01768       uip_flags = UIP_CLOSE;
+01769       UIP_APPCALL();
+01770       goto tcp_send_ack;
+01771     }
+01772     if(uip_len > 0) {
+01773       goto tcp_send_ack;
+01774     }
+01775     goto drop;
+01776 
+01777   case UIP_TIME_WAIT:
+01778     goto tcp_send_ack;
+01779     
+01780   case UIP_CLOSING:
+01781     if(uip_flags & UIP_ACKDATA) {
+01782       uip_connr->tcpstateflags = UIP_TIME_WAIT;
+01783       uip_connr->timer = 0;
+01784     }
+01785   }
+01786   goto drop;
+01787   
+01788 
+01789   /* We jump here when we are ready to send the packet, and just want
+01790      to set the appropriate TCP sequence numbers in the TCP header. */
+01791  tcp_send_ack:
+01792   BUF->flags = TCP_ACK;
+01793  tcp_send_nodata:
+01794   uip_len = UIP_IPTCPH_LEN;
+01795  tcp_send_noopts:
+01796   BUF->tcpoffset = (UIP_TCPH_LEN / 4) << 4;
+01797  tcp_send:
+01798   /* We're done with the input processing. We are now ready to send a
+01799      reply. Our job is to fill in all the fields of the TCP and IP
+01800      headers before calculating the checksum and finally send the
+01801      packet. */
+01802   BUF->ackno[0] = uip_connr->rcv_nxt[0];
+01803   BUF->ackno[1] = uip_connr->rcv_nxt[1];
+01804   BUF->ackno[2] = uip_connr->rcv_nxt[2];
+01805   BUF->ackno[3] = uip_connr->rcv_nxt[3];
+01806   
+01807   BUF->seqno[0] = uip_connr->snd_nxt[0];
+01808   BUF->seqno[1] = uip_connr->snd_nxt[1];
+01809   BUF->seqno[2] = uip_connr->snd_nxt[2];
+01810   BUF->seqno[3] = uip_connr->snd_nxt[3];
+01811 
+01812   BUF->proto = UIP_PROTO_TCP;
+01813   
+01814   BUF->srcport  = uip_connr->lport;
+01815   BUF->destport = uip_connr->rport;
+01816 
+01817   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+01818   uip_ipaddr_copy(BUF->destipaddr, uip_connr->ripaddr);
+01819 
+01820   if(uip_connr->tcpstateflags & UIP_STOPPED) {
+01821     /* If the connection has issued uip_stop(), we advertise a zero
+01822        window so that the remote host will stop sending data. */
+01823     BUF->wnd[0] = BUF->wnd[1] = 0;
+01824   } else {
+01825     BUF->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8);
+01826     BUF->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff);
+01827   }
+01828 
+01829  tcp_send_noconn:
+01830   BUF->ttl = UIP_TTL;
+01831 #if UIP_CONF_IPV6
+01832   /* For IPv6, the IP length field does not include the IPv6 IP header
+01833      length. */
+01834   BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8);
+01835   BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
+01836 #else /* UIP_CONF_IPV6 */
+01837   BUF->len[0] = (uip_len >> 8);
+01838   BUF->len[1] = (uip_len & 0xff);
+01839 #endif /* UIP_CONF_IPV6 */
+01840 
+01841   BUF->urgp[0] = BUF->urgp[1] = 0;
+01842   
+01843   /* Calculate TCP checksum. */
+01844   BUF->tcpchksum = 0;
+01845   BUF->tcpchksum = ~(uip_tcpchksum());
+01846   
+01847  ip_send_nolen:
+01848 
+01849 #if UIP_CONF_IPV6
+01850   BUF->vtc = 0x60;
+01851   BUF->tcflow = 0x00;
+01852   BUF->flow = 0x00;
+01853 #else /* UIP_CONF_IPV6 */
+01854   BUF->vhl = 0x45;
+01855   BUF->tos = 0;
+01856   BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
+01857   ++ipid;
+01858   BUF->ipid[0] = ipid >> 8;
+01859   BUF->ipid[1] = ipid & 0xff;
+01860   /* Calculate IP checksum. */
+01861   BUF->ipchksum = 0;
+01862   BUF->ipchksum = ~(uip_ipchksum());
+01863   DEBUG_PRINTF("uip ip_send_nolen: chkecum 0x%04x\n", uip_ipchksum());
+01864 #endif /* UIP_CONF_IPV6 */
+01865    
+01866   UIP_STAT(++uip_stat.tcp.sent);
+01867  send:
+01868   DEBUG_PRINTF("Sending packet with length %d (%d)\n", uip_len,
+01869                (BUF->len[0] << 8) | BUF->len[1]);
+01870   
+01871   UIP_STAT(++uip_stat.ip.sent);
+01872   /* Return and let the caller do the actual transmission. */
+01873   uip_flags = 0;
+01874   return;
+01875  drop:
+01876   uip_len = 0;
+01877   uip_flags = 0;
+01878   return;
+01879 }
+01880 /*---------------------------------------------------------------------------*/
+01881 u16_t
+01882 htons(u16_t val)
+01883 {
+01884   return HTONS(val);
+01885 }
+01886 /*---------------------------------------------------------------------------*/
+01887 void
+01888 uip_send(const void *data, int len)
+01889 {
+01890   if(len > 0) {
+01891     uip_slen = len;
+01892     if(data != uip_sappdata) {
+01893       memcpy(uip_sappdata, (data), uip_slen);
+01894     }
+01895   }
+01896 }
+01897 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00202.html b/components/net/uip/doc/html/a00202.html new file mode 100644 index 0000000000..ff2306c0bc --- /dev/null +++ b/components/net/uip/doc/html/a00202.html @@ -0,0 +1,1626 @@ + + +uIP 1.0: uip/uip.h Source File + + + + + + +

uip/uip.h

Go to the documentation of this file.
00001 
+00002 /**
+00003  * \addtogroup uip
+00004  * @{
+00005  */
+00006 
+00007 /**
+00008  * \file
+00009  * Header file for the uIP TCP/IP stack.
+00010  * \author Adam Dunkels <adam@dunkels.com>
+00011  *
+00012  * The uIP TCP/IP stack header file contains definitions for a number
+00013  * of C macros that are used by uIP programs as well as internal uIP
+00014  * structures, TCP/IP header structures and function declarations.
+00015  *
+00016  */
+00017 
+00018 
+00019 /*
+00020  * Copyright (c) 2001-2003, Adam Dunkels.
+00021  * All rights reserved.
+00022  *
+00023  * Redistribution and use in source and binary forms, with or without
+00024  * modification, are permitted provided that the following conditions
+00025  * are met:
+00026  * 1. Redistributions of source code must retain the above copyright
+00027  *    notice, this list of conditions and the following disclaimer.
+00028  * 2. Redistributions in binary form must reproduce the above copyright
+00029  *    notice, this list of conditions and the following disclaimer in the
+00030  *    documentation and/or other materials provided with the distribution.
+00031  * 3. The name of the author may not be used to endorse or promote
+00032  *    products derived from this software without specific prior
+00033  *    written permission.
+00034  *
+00035  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00036  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00037  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00038  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00039  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00040  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00041  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00042  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00043  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00044  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00045  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00046  *
+00047  * This file is part of the uIP TCP/IP stack.
+00048  *
+00049  * $Id: uip.h,v 1.40 2006/06/08 07:12:07 adam Exp $
+00050  *
+00051  */
+00052 
+00053 #ifndef __UIP_H__
+00054 #define __UIP_H__
+00055 
+00056 #include "uipopt.h"
+00057 
+00058 /**
+00059  * Repressentation of an IP address.
+00060  *
+00061  */
+00062 typedef u16_t uip_ip4addr_t[2];
+00063 typedef u16_t uip_ip6addr_t[8];
+00064 #if UIP_CONF_IPV6
+00065 typedef uip_ip6addr_t uip_ipaddr_t;
+00066 #else /* UIP_CONF_IPV6 */
+00067 typedef uip_ip4addr_t uip_ipaddr_t;
+00068 #endif /* UIP_CONF_IPV6 */
+00069 
+00070 /*---------------------------------------------------------------------------*/
+00071 /* First, the functions that should be called from the
+00072  * system. Initialization, the periodic timer and incoming packets are
+00073  * handled by the following three functions.
+00074  */
+00075 
+00076 /**
+00077  * \defgroup uipconffunc uIP configuration functions
+00078  * @{
+00079  *
+00080  * The uIP configuration functions are used for setting run-time
+00081  * parameters in uIP such as IP addresses.
+00082  */
+00083 
+00084 /**
+00085  * Set the IP address of this host.
+00086  *
+00087  * The IP address is represented as a 4-byte array where the first
+00088  * octet of the IP address is put in the first member of the 4-byte
+00089  * array.
+00090  *
+00091  * Example:
+00092  \code
+00093 
+00094  uip_ipaddr_t addr;
+00095 
+00096  uip_ipaddr(&addr, 192,168,1,2);
+00097  uip_sethostaddr(&addr);
+00098  
+00099  \endcode
+00100  * \param addr A pointer to an IP address of type uip_ipaddr_t;
+00101  *
+00102  * \sa uip_ipaddr()
+00103  *
+00104  * \hideinitializer
+00105  */
+00106 #define uip_sethostaddr(addr) uip_ipaddr_copy(uip_hostaddr, (addr))
+00107 
+00108 /**
+00109  * Get the IP address of this host.
+00110  *
+00111  * The IP address is represented as a 4-byte array where the first
+00112  * octet of the IP address is put in the first member of the 4-byte
+00113  * array.
+00114  *
+00115  * Example:
+00116  \code
+00117  uip_ipaddr_t hostaddr;
+00118 
+00119  uip_gethostaddr(&hostaddr);
+00120  \endcode
+00121  * \param addr A pointer to a uip_ipaddr_t variable that will be
+00122  * filled in with the currently configured IP address.
+00123  *
+00124  * \hideinitializer
+00125  */
+00126 #define uip_gethostaddr(addr) uip_ipaddr_copy((addr), uip_hostaddr)
+00127 
+00128 /**
+00129  * Set the default router's IP address.
+00130  *
+00131  * \param addr A pointer to a uip_ipaddr_t variable containing the IP
+00132  * address of the default router.
+00133  *
+00134  * \sa uip_ipaddr()
+00135  *
+00136  * \hideinitializer
+00137  */
+00138 #define uip_setdraddr(addr) uip_ipaddr_copy(uip_draddr, (addr))
+00139 
+00140 /**
+00141  * Set the netmask.
+00142  *
+00143  * \param addr A pointer to a uip_ipaddr_t variable containing the IP
+00144  * address of the netmask.
+00145  *
+00146  * \sa uip_ipaddr()
+00147  *
+00148  * \hideinitializer
+00149  */
+00150 #define uip_setnetmask(addr) uip_ipaddr_copy(uip_netmask, (addr))
+00151 
+00152 
+00153 /**
+00154  * Get the default router's IP address.
+00155  *
+00156  * \param addr A pointer to a uip_ipaddr_t variable that will be
+00157  * filled in with the IP address of the default router.
+00158  *
+00159  * \hideinitializer
+00160  */
+00161 #define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr)
+00162 
+00163 /**
+00164  * Get the netmask.
+00165  *
+00166  * \param addr A pointer to a uip_ipaddr_t variable that will be
+00167  * filled in with the value of the netmask.
+00168  *
+00169  * \hideinitializer
+00170  */
+00171 #define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask)
+00172 
+00173 /** @} */
+00174 
+00175 /**
+00176  * \defgroup uipinit uIP initialization functions
+00177  * @{
+00178  *
+00179  * The uIP initialization functions are used for booting uIP.
+00180  */
+00181 
+00182 /**
+00183  * uIP initialization function.
+00184  *
+00185  * This function should be called at boot up to initilize the uIP
+00186  * TCP/IP stack.
+00187  */
+00188 void uip_init(void);
+00189 
+00190 /**
+00191  * uIP initialization function.
+00192  *
+00193  * This function may be used at boot time to set the initial ip_id.
+00194  */
+00195 void uip_setipid(u16_t id);
+00196 
+00197 /** @} */
+00198 
+00199 /**
+00200  * \defgroup uipdevfunc uIP device driver functions
+00201  * @{
+00202  *
+00203  * These functions are used by a network device driver for interacting
+00204  * with uIP.
+00205  */
+00206 
+00207 /**
+00208  * Process an incoming packet.
+00209  *
+00210  * This function should be called when the device driver has received
+00211  * a packet from the network. The packet from the device driver must
+00212  * be present in the uip_buf buffer, and the length of the packet
+00213  * should be placed in the uip_len variable.
+00214  *
+00215  * When the function returns, there may be an outbound packet placed
+00216  * in the uip_buf packet buffer. If so, the uip_len variable is set to
+00217  * the length of the packet. If no packet is to be sent out, the
+00218  * uip_len variable is set to 0.
+00219  *
+00220  * The usual way of calling the function is presented by the source
+00221  * code below.
+00222  \code
+00223   uip_len = devicedriver_poll();
+00224   if(uip_len > 0) {
+00225     uip_input();
+00226     if(uip_len > 0) {
+00227       devicedriver_send();
+00228     }
+00229   }
+00230  \endcode
+00231  *
+00232  * \note If you are writing a uIP device driver that needs ARP
+00233  * (Address Resolution Protocol), e.g., when running uIP over
+00234  * Ethernet, you will need to call the uIP ARP code before calling
+00235  * this function:
+00236  \code
+00237   #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
+00238   uip_len = ethernet_devicedrver_poll();
+00239   if(uip_len > 0) {
+00240     if(BUF->type == HTONS(UIP_ETHTYPE_IP)) {
+00241       uip_arp_ipin();
+00242       uip_input();
+00243       if(uip_len > 0) {
+00244         uip_arp_out();
+00245         ethernet_devicedriver_send();
+00246       }
+00247     } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) {
+00248       uip_arp_arpin();
+00249       if(uip_len > 0) {
+00250         ethernet_devicedriver_send();
+00251       }
+00252     }
+00253  \endcode
+00254  *
+00255  * \hideinitializer
+00256  */
+00257 #define uip_input()        uip_process(UIP_DATA)
+00258 
+00259 /**
+00260  * Periodic processing for a connection identified by its number.
+00261  *
+00262  * This function does the necessary periodic processing (timers,
+00263  * polling) for a uIP TCP conneciton, and should be called when the
+00264  * periodic uIP timer goes off. It should be called for every
+00265  * connection, regardless of whether they are open of closed.
+00266  *
+00267  * When the function returns, it may have an outbound packet waiting
+00268  * for service in the uIP packet buffer, and if so the uip_len
+00269  * variable is set to a value larger than zero. The device driver
+00270  * should be called to send out the packet.
+00271  *
+00272  * The ususal way of calling the function is through a for() loop like
+00273  * this:
+00274  \code
+00275   for(i = 0; i < UIP_CONNS; ++i) {
+00276     uip_periodic(i);
+00277     if(uip_len > 0) {
+00278       devicedriver_send();
+00279     }
+00280   }
+00281  \endcode
+00282  *
+00283  * \note If you are writing a uIP device driver that needs ARP
+00284  * (Address Resolution Protocol), e.g., when running uIP over
+00285  * Ethernet, you will need to call the uip_arp_out() function before
+00286  * calling the device driver:
+00287  \code
+00288   for(i = 0; i < UIP_CONNS; ++i) {
+00289     uip_periodic(i);
+00290     if(uip_len > 0) {
+00291       uip_arp_out();
+00292       ethernet_devicedriver_send();
+00293     }
+00294   }
+00295  \endcode
+00296  *
+00297  * \param conn The number of the connection which is to be periodically polled.
+00298  *
+00299  * \hideinitializer
+00300  */
+00301 #define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \
+00302                                 uip_process(UIP_TIMER); } while (0)
+00303 
+00304 /**
+00305  *
+00306  *
+00307  */
+00308 #define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED)
+00309 
+00310 /**
+00311  * Perform periodic processing for a connection identified by a pointer
+00312  * to its structure.
+00313  *
+00314  * Same as uip_periodic() but takes a pointer to the actual uip_conn
+00315  * struct instead of an integer as its argument. This function can be
+00316  * used to force periodic processing of a specific connection.
+00317  *
+00318  * \param conn A pointer to the uip_conn struct for the connection to
+00319  * be processed.
+00320  *
+00321  * \hideinitializer
+00322  */
+00323 #define uip_periodic_conn(conn) do { uip_conn = conn; \
+00324                                      uip_process(UIP_TIMER); } while (0)
+00325 
+00326 /**
+00327  * Reuqest that a particular connection should be polled.
+00328  *
+00329  * Similar to uip_periodic_conn() but does not perform any timer
+00330  * processing. The application is polled for new data.
+00331  *
+00332  * \param conn A pointer to the uip_conn struct for the connection to
+00333  * be processed.
+00334  *
+00335  * \hideinitializer
+00336  */
+00337 #define uip_poll_conn(conn) do { uip_conn = conn; \
+00338                                  uip_process(UIP_POLL_REQUEST); } while (0)
+00339 
+00340 
+00341 #if UIP_UDP
+00342 /**
+00343  * Periodic processing for a UDP connection identified by its number.
+00344  *
+00345  * This function is essentially the same as uip_periodic(), but for
+00346  * UDP connections. It is called in a similar fashion as the
+00347  * uip_periodic() function:
+00348  \code
+00349   for(i = 0; i < UIP_UDP_CONNS; i++) {
+00350     uip_udp_periodic(i);
+00351     if(uip_len > 0) {
+00352       devicedriver_send();
+00353     }
+00354   }
+00355  \endcode
+00356  *
+00357  * \note As for the uip_periodic() function, special care has to be
+00358  * taken when using uIP together with ARP and Ethernet:
+00359  \code
+00360   for(i = 0; i < UIP_UDP_CONNS; i++) {
+00361     uip_udp_periodic(i);
+00362     if(uip_len > 0) {
+00363       uip_arp_out();
+00364       ethernet_devicedriver_send();
+00365     }
+00366   }
+00367  \endcode
+00368  *
+00369  * \param conn The number of the UDP connection to be processed.
+00370  *
+00371  * \hideinitializer
+00372  */
+00373 #define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \
+00374                                 uip_process(UIP_UDP_TIMER); } while (0)
+00375 
+00376 /**
+00377  * Periodic processing for a UDP connection identified by a pointer to
+00378  * its structure.
+00379  *
+00380  * Same as uip_udp_periodic() but takes a pointer to the actual
+00381  * uip_conn struct instead of an integer as its argument. This
+00382  * function can be used to force periodic processing of a specific
+00383  * connection.
+00384  *
+00385  * \param conn A pointer to the uip_udp_conn struct for the connection
+00386  * to be processed.
+00387  *
+00388  * \hideinitializer
+00389  */
+00390 #define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \
+00391                                          uip_process(UIP_UDP_TIMER); } while (0)
+00392 
+00393 
+00394 #endif /* UIP_UDP */
+00395 
+00396 /**
+00397  * The uIP packet buffer.
+00398  *
+00399  * The uip_buf array is used to hold incoming and outgoing
+00400  * packets. The device driver should place incoming data into this
+00401  * buffer. When sending data, the device driver should read the link
+00402  * level headers and the TCP/IP headers from this buffer. The size of
+00403  * the link level headers is configured by the UIP_LLH_LEN define.
+00404  *
+00405  * \note The application data need not be placed in this buffer, so
+00406  * the device driver must read it from the place pointed to by the
+00407  * uip_appdata pointer as illustrated by the following example:
+00408  \code
+00409  void
+00410  devicedriver_send(void)
+00411  {
+00412     hwsend(&uip_buf[0], UIP_LLH_LEN);
+00413     if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) {
+00414       hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN);
+00415     } else {
+00416       hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN);
+00417       hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN);
+00418     }
+00419  }
+00420  \endcode
+00421  */
+00422 extern u8_t uip_buf[UIP_BUFSIZE+2];
+00423 
+00424 /** @} */
+00425 
+00426 /*---------------------------------------------------------------------------*/
+00427 /* Functions that are used by the uIP application program. Opening and
+00428  * closing connections, sending and receiving data, etc. is all
+00429  * handled by the functions below.
+00430 */
+00431 /**
+00432  * \defgroup uipappfunc uIP application functions
+00433  * @{
+00434  *
+00435  * Functions used by an application running of top of uIP.
+00436  */
+00437 
+00438 /**
+00439  * Start listening to the specified port.
+00440  *
+00441  * \note Since this function expects the port number in network byte
+00442  * order, a conversion using HTONS() or htons() is necessary.
+00443  *
+00444  \code
+00445  uip_listen(HTONS(80));
+00446  \endcode
+00447  *
+00448  * \param port A 16-bit port number in network byte order.
+00449  */
+00450 void uip_listen(u16_t port);
+00451 
+00452 /**
+00453  * Stop listening to the specified port.
+00454  *
+00455  * \note Since this function expects the port number in network byte
+00456  * order, a conversion using HTONS() or htons() is necessary.
+00457  *
+00458  \code
+00459  uip_unlisten(HTONS(80));
+00460  \endcode
+00461  *
+00462  * \param port A 16-bit port number in network byte order.
+00463  */
+00464 void uip_unlisten(u16_t port);
+00465 
+00466 /**
+00467  * Connect to a remote host using TCP.
+00468  *
+00469  * This function is used to start a new connection to the specified
+00470  * port on the specied host. It allocates a new connection identifier,
+00471  * sets the connection to the SYN_SENT state and sets the
+00472  * retransmission timer to 0. This will cause a TCP SYN segment to be
+00473  * sent out the next time this connection is periodically processed,
+00474  * which usually is done within 0.5 seconds after the call to
+00475  * uip_connect().
+00476  *
+00477  * \note This function is avaliable only if support for active open
+00478  * has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h.
+00479  *
+00480  * \note Since this function requires the port number to be in network
+00481  * byte order, a conversion using HTONS() or htons() is necessary.
+00482  *
+00483  \code
+00484  uip_ipaddr_t ipaddr;
+00485 
+00486  uip_ipaddr(&ipaddr, 192,168,1,2);
+00487  uip_connect(&ipaddr, HTONS(80));
+00488  \endcode
+00489  *
+00490  * \param ripaddr The IP address of the remote hot.
+00491  *
+00492  * \param port A 16-bit port number in network byte order.
+00493  *
+00494  * \return A pointer to the uIP connection identifier for the new connection,
+00495  * or NULL if no connection could be allocated.
+00496  *
+00497  */
+00498 struct uip_conn *uip_connect(uip_ipaddr_t *ripaddr, u16_t port);
+00499 
+00500 
+00501 
+00502 /**
+00503  * \internal
+00504  *
+00505  * Check if a connection has outstanding (i.e., unacknowledged) data.
+00506  *
+00507  * \param conn A pointer to the uip_conn structure for the connection.
+00508  *
+00509  * \hideinitializer
+00510  */
+00511 #define uip_outstanding(conn) ((conn)->len)
+00512 
+00513 /**
+00514  * Send data on the current connection.
+00515  *
+00516  * This function is used to send out a single segment of TCP
+00517  * data. Only applications that have been invoked by uIP for event
+00518  * processing can send data.
+00519  *
+00520  * The amount of data that actually is sent out after a call to this
+00521  * funcion is determined by the maximum amount of data TCP allows. uIP
+00522  * will automatically crop the data so that only the appropriate
+00523  * amount of data is sent. The function uip_mss() can be used to query
+00524  * uIP for the amount of data that actually will be sent.
+00525  *
+00526  * \note This function does not guarantee that the sent data will
+00527  * arrive at the destination. If the data is lost in the network, the
+00528  * application will be invoked with the uip_rexmit() event being
+00529  * set. The application will then have to resend the data using this
+00530  * function.
+00531  *
+00532  * \param data A pointer to the data which is to be sent.
+00533  *
+00534  * \param len The maximum amount of data bytes to be sent.
+00535  *
+00536  * \hideinitializer
+00537  */
+00538 void uip_send(const void *data, int len);
+00539 
+00540 /**
+00541  * The length of any incoming data that is currently avaliable (if avaliable)
+00542  * in the uip_appdata buffer.
+00543  *
+00544  * The test function uip_data() must first be used to check if there
+00545  * is any data available at all.
+00546  *
+00547  * \hideinitializer
+00548  */
+00549 /*void uip_datalen(void);*/
+00550 #define uip_datalen()       uip_len
+00551 
+00552 /**
+00553  * The length of any out-of-band data (urgent data) that has arrived
+00554  * on the connection.
+00555  *
+00556  * \note The configuration parameter UIP_URGDATA must be set for this
+00557  * function to be enabled.
+00558  *
+00559  * \hideinitializer
+00560  */
+00561 #define uip_urgdatalen()    uip_urglen
+00562 
+00563 /**
+00564  * Close the current connection.
+00565  *
+00566  * This function will close the current connection in a nice way.
+00567  *
+00568  * \hideinitializer
+00569  */
+00570 #define uip_close()         (uip_flags = UIP_CLOSE)
+00571 
+00572 /**
+00573  * Abort the current connection.
+00574  *
+00575  * This function will abort (reset) the current connection, and is
+00576  * usually used when an error has occured that prevents using the
+00577  * uip_close() function.
+00578  *
+00579  * \hideinitializer
+00580  */
+00581 #define uip_abort()         (uip_flags = UIP_ABORT)
+00582 
+00583 /**
+00584  * Tell the sending host to stop sending data.
+00585  *
+00586  * This function will close our receiver's window so that we stop
+00587  * receiving data for the current connection.
+00588  *
+00589  * \hideinitializer
+00590  */
+00591 #define uip_stop()          (uip_conn->tcpstateflags |= UIP_STOPPED)
+00592 
+00593 /**
+00594  * Find out if the current connection has been previously stopped with
+00595  * uip_stop().
+00596  *
+00597  * \hideinitializer
+00598  */
+00599 #define uip_stopped(conn)   ((conn)->tcpstateflags & UIP_STOPPED)
+00600 
+00601 /**
+00602  * Restart the current connection, if is has previously been stopped
+00603  * with uip_stop().
+00604  *
+00605  * This function will open the receiver's window again so that we
+00606  * start receiving data for the current connection.
+00607  *
+00608  * \hideinitializer
+00609  */
+00610 #define uip_restart()         do { uip_flags |= UIP_NEWDATA; \
+00611                                    uip_conn->tcpstateflags &= ~UIP_STOPPED; \
+00612                               } while(0)
+00613 
+00614 
+00615 /* uIP tests that can be made to determine in what state the current
+00616    connection is, and what the application function should do. */
+00617 
+00618 /**
+00619  * Is the current connection a UDP connection?
+00620  *
+00621  * This function checks whether the current connection is a UDP connection.
+00622  *
+00623  * \hideinitializer
+00624  *
+00625  */
+00626 #define uip_udpconnection() (uip_conn == NULL)
+00627 
+00628 /**
+00629  * Is new incoming data available?
+00630  *
+00631  * Will reduce to non-zero if there is new data for the application
+00632  * present at the uip_appdata pointer. The size of the data is
+00633  * avaliable through the uip_len variable.
+00634  *
+00635  * \hideinitializer
+00636  */
+00637 #define uip_newdata()   (uip_flags & UIP_NEWDATA)
+00638 
+00639 /**
+00640  * Has previously sent data been acknowledged?
+00641  *
+00642  * Will reduce to non-zero if the previously sent data has been
+00643  * acknowledged by the remote host. This means that the application
+00644  * can send new data.
+00645  *
+00646  * \hideinitializer
+00647  */
+00648 #define uip_acked()   (uip_flags & UIP_ACKDATA)
+00649 
+00650 /**
+00651  * Has the connection just been connected?
+00652  *
+00653  * Reduces to non-zero if the current connection has been connected to
+00654  * a remote host. This will happen both if the connection has been
+00655  * actively opened (with uip_connect()) or passively opened (with
+00656  * uip_listen()).
+00657  *
+00658  * \hideinitializer
+00659  */
+00660 #define uip_connected() (uip_flags & UIP_CONNECTED)
+00661 
+00662 /**
+00663  * Has the connection been closed by the other end?
+00664  *
+00665  * Is non-zero if the connection has been closed by the remote
+00666  * host. The application may then do the necessary clean-ups.
+00667  *
+00668  * \hideinitializer
+00669  */
+00670 #define uip_closed()    (uip_flags & UIP_CLOSE)
+00671 
+00672 /**
+00673  * Has the connection been aborted by the other end?
+00674  *
+00675  * Non-zero if the current connection has been aborted (reset) by the
+00676  * remote host.
+00677  *
+00678  * \hideinitializer
+00679  */
+00680 #define uip_aborted()    (uip_flags & UIP_ABORT)
+00681 
+00682 /**
+00683  * Has the connection timed out?
+00684  *
+00685  * Non-zero if the current connection has been aborted due to too many
+00686  * retransmissions.
+00687  *
+00688  * \hideinitializer
+00689  */
+00690 #define uip_timedout()    (uip_flags & UIP_TIMEDOUT)
+00691 
+00692 /**
+00693  * Do we need to retransmit previously data?
+00694  *
+00695  * Reduces to non-zero if the previously sent data has been lost in
+00696  * the network, and the application should retransmit it. The
+00697  * application should send the exact same data as it did the last
+00698  * time, using the uip_send() function.
+00699  *
+00700  * \hideinitializer
+00701  */
+00702 #define uip_rexmit()     (uip_flags & UIP_REXMIT)
+00703 
+00704 /**
+00705  * Is the connection being polled by uIP?
+00706  *
+00707  * Is non-zero if the reason the application is invoked is that the
+00708  * current connection has been idle for a while and should be
+00709  * polled.
+00710  *
+00711  * The polling event can be used for sending data without having to
+00712  * wait for the remote host to send data.
+00713  *
+00714  * \hideinitializer
+00715  */
+00716 #define uip_poll()       (uip_flags & UIP_POLL)
+00717 
+00718 /**
+00719  * Get the initial maxium segment size (MSS) of the current
+00720  * connection.
+00721  *
+00722  * \hideinitializer
+00723  */
+00724 #define uip_initialmss()             (uip_conn->initialmss)
+00725 
+00726 /**
+00727  * Get the current maxium segment size that can be sent on the current
+00728  * connection.
+00729  *
+00730  * The current maxiumum segment size that can be sent on the
+00731  * connection is computed from the receiver's window and the MSS of
+00732  * the connection (which also is available by calling
+00733  * uip_initialmss()).
+00734  *
+00735  * \hideinitializer
+00736  */
+00737 #define uip_mss()             (uip_conn->mss)
+00738 
+00739 /**
+00740  * Set up a new UDP connection.
+00741  *
+00742  * This function sets up a new UDP connection. The function will
+00743  * automatically allocate an unused local port for the new
+00744  * connection. However, another port can be chosen by using the
+00745  * uip_udp_bind() call, after the uip_udp_new() function has been
+00746  * called.
+00747  *
+00748  * Example:
+00749  \code
+00750  uip_ipaddr_t addr;
+00751  struct uip_udp_conn *c;
+00752  
+00753  uip_ipaddr(&addr, 192,168,2,1);
+00754  c = uip_udp_new(&addr, HTONS(12345));
+00755  if(c != NULL) {
+00756    uip_udp_bind(c, HTONS(12344));
+00757  }
+00758  \endcode
+00759  * \param ripaddr The IP address of the remote host.
+00760  *
+00761  * \param rport The remote port number in network byte order.
+00762  *
+00763  * \return The uip_udp_conn structure for the new connection or NULL
+00764  * if no connection could be allocated.
+00765  */
+00766 struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
+00767 
+00768 /**
+00769  * Removed a UDP connection.
+00770  *
+00771  * \param conn A pointer to the uip_udp_conn structure for the connection.
+00772  *
+00773  * \hideinitializer
+00774  */
+00775 #define uip_udp_remove(conn) (conn)->lport = 0
+00776 
+00777 /**
+00778  * Bind a UDP connection to a local port.
+00779  *
+00780  * \param conn A pointer to the uip_udp_conn structure for the
+00781  * connection.
+00782  *
+00783  * \param port The local port number, in network byte order.
+00784  *
+00785  * \hideinitializer
+00786  */
+00787 #define uip_udp_bind(conn, port) (conn)->lport = port
+00788 
+00789 /**
+00790  * Send a UDP datagram of length len on the current connection.
+00791  *
+00792  * This function can only be called in response to a UDP event (poll
+00793  * or newdata). The data must be present in the uip_buf buffer, at the
+00794  * place pointed to by the uip_appdata pointer.
+00795  *
+00796  * \param len The length of the data in the uip_buf buffer.
+00797  *
+00798  * \hideinitializer
+00799  */
+00800 #define uip_udp_send(len) uip_send((char *)uip_appdata, len)
+00801 
+00802 /** @} */
+00803 
+00804 /* uIP convenience and converting functions. */
+00805 
+00806 /**
+00807  * \defgroup uipconvfunc uIP conversion functions
+00808  * @{
+00809  *
+00810  * These functions can be used for converting between different data
+00811  * formats used by uIP.
+00812  */
+00813  
+00814 /**
+00815  * Construct an IP address from four bytes.
+00816  *
+00817  * This function constructs an IP address of the type that uIP handles
+00818  * internally from four bytes. The function is handy for specifying IP
+00819  * addresses to use with e.g. the uip_connect() function.
+00820  *
+00821  * Example:
+00822  \code
+00823  uip_ipaddr_t ipaddr;
+00824  struct uip_conn *c;
+00825  
+00826  uip_ipaddr(&ipaddr, 192,168,1,2);
+00827  c = uip_connect(&ipaddr, HTONS(80));
+00828  \endcode
+00829  *
+00830  * \param addr A pointer to a uip_ipaddr_t variable that will be
+00831  * filled in with the IP address.
+00832  *
+00833  * \param addr0 The first octet of the IP address.
+00834  * \param addr1 The second octet of the IP address.
+00835  * \param addr2 The third octet of the IP address.
+00836  * \param addr3 The forth octet of the IP address.
+00837  *
+00838  * \hideinitializer
+00839  */
+00840 #define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \
+00841                      ((u16_t *)(addr))[0] = HTONS(((addr0) << 8) | (addr1)); \
+00842                      ((u16_t *)(addr))[1] = HTONS(((addr2) << 8) | (addr3)); \
+00843                   } while(0)
+00844 
+00845 /**
+00846  * Construct an IPv6 address from eight 16-bit words.
+00847  *
+00848  * This function constructs an IPv6 address.
+00849  *
+00850  * \hideinitializer
+00851  */
+00852 #define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do { \
+00853                      ((u16_t *)(addr))[0] = HTONS((addr0)); \
+00854                      ((u16_t *)(addr))[1] = HTONS((addr1)); \
+00855                      ((u16_t *)(addr))[2] = HTONS((addr2)); \
+00856                      ((u16_t *)(addr))[3] = HTONS((addr3)); \
+00857                      ((u16_t *)(addr))[4] = HTONS((addr4)); \
+00858                      ((u16_t *)(addr))[5] = HTONS((addr5)); \
+00859                      ((u16_t *)(addr))[6] = HTONS((addr6)); \
+00860                      ((u16_t *)(addr))[7] = HTONS((addr7)); \
+00861                   } while(0)
+00862 
+00863 /**
+00864  * Copy an IP address to another IP address.
+00865  *
+00866  * Copies an IP address from one place to another.
+00867  *
+00868  * Example:
+00869  \code
+00870  uip_ipaddr_t ipaddr1, ipaddr2;
+00871 
+00872  uip_ipaddr(&ipaddr1, 192,16,1,2);
+00873  uip_ipaddr_copy(&ipaddr2, &ipaddr1);
+00874  \endcode
+00875  *
+00876  * \param dest The destination for the copy.
+00877  * \param src The source from where to copy.
+00878  *
+00879  * \hideinitializer
+00880  */
+00881 #if !UIP_CONF_IPV6
+00882 #define uip_ipaddr_copy(dest, src) do { \
+00883                      ((u16_t *)dest)[0] = ((u16_t *)src)[0]; \
+00884                      ((u16_t *)dest)[1] = ((u16_t *)src)[1]; \
+00885                   } while(0)
+00886 #else /* !UIP_CONF_IPV6 */
+00887 #define uip_ipaddr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t))
+00888 #endif /* !UIP_CONF_IPV6 */
+00889 
+00890 /**
+00891  * Compare two IP addresses
+00892  *
+00893  * Compares two IP addresses.
+00894  *
+00895  * Example:
+00896  \code
+00897  uip_ipaddr_t ipaddr1, ipaddr2;
+00898 
+00899  uip_ipaddr(&ipaddr1, 192,16,1,2);
+00900  if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) {
+00901     printf("They are the same");
+00902  }
+00903  \endcode
+00904  *
+00905  * \param addr1 The first IP address.
+00906  * \param addr2 The second IP address.
+00907  *
+00908  * \hideinitializer
+00909  */
+00910 #if !UIP_CONF_IPV6
+00911 #define uip_ipaddr_cmp(addr1, addr2) (((u16_t *)addr1)[0] == ((u16_t *)addr2)[0] && \
+00912                                       ((u16_t *)addr1)[1] == ((u16_t *)addr2)[1])
+00913 #else /* !UIP_CONF_IPV6 */
+00914 #define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0)
+00915 #endif /* !UIP_CONF_IPV6 */
+00916 
+00917 /**
+00918  * Compare two IP addresses with netmasks
+00919  *
+00920  * Compares two IP addresses with netmasks. The masks are used to mask
+00921  * out the bits that are to be compared.
+00922  *
+00923  * Example:
+00924  \code
+00925  uip_ipaddr_t ipaddr1, ipaddr2, mask;
+00926 
+00927  uip_ipaddr(&mask, 255,255,255,0);
+00928  uip_ipaddr(&ipaddr1, 192,16,1,2);
+00929  uip_ipaddr(&ipaddr2, 192,16,1,3);
+00930  if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) {
+00931     printf("They are the same");
+00932  }
+00933  \endcode
+00934  *
+00935  * \param addr1 The first IP address.
+00936  * \param addr2 The second IP address.
+00937  * \param mask The netmask.
+00938  *
+00939  * \hideinitializer
+00940  */
+00941 #define uip_ipaddr_maskcmp(addr1, addr2, mask) \
+00942                           (((((u16_t *)addr1)[0] & ((u16_t *)mask)[0]) == \
+00943                             (((u16_t *)addr2)[0] & ((u16_t *)mask)[0])) && \
+00944                            ((((u16_t *)addr1)[1] & ((u16_t *)mask)[1]) == \
+00945                             (((u16_t *)addr2)[1] & ((u16_t *)mask)[1])))
+00946 
+00947 
+00948 /**
+00949  * Mask out the network part of an IP address.
+00950  *
+00951  * Masks out the network part of an IP address, given the address and
+00952  * the netmask.
+00953  *
+00954  * Example:
+00955  \code
+00956  uip_ipaddr_t ipaddr1, ipaddr2, netmask;
+00957 
+00958  uip_ipaddr(&ipaddr1, 192,16,1,2);
+00959  uip_ipaddr(&netmask, 255,255,255,0);
+00960  uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask);
+00961  \endcode
+00962  *
+00963  * In the example above, the variable "ipaddr2" will contain the IP
+00964  * address 192.168.1.0.
+00965  *
+00966  * \param dest Where the result is to be placed.
+00967  * \param src The IP address.
+00968  * \param mask The netmask.
+00969  *
+00970  * \hideinitializer
+00971  */
+00972 #define uip_ipaddr_mask(dest, src, mask) do { \
+00973                      ((u16_t *)dest)[0] = ((u16_t *)src)[0] & ((u16_t *)mask)[0]; \
+00974                      ((u16_t *)dest)[1] = ((u16_t *)src)[1] & ((u16_t *)mask)[1]; \
+00975                   } while(0)
+00976 
+00977 /**
+00978  * Pick the first octet of an IP address.
+00979  *
+00980  * Picks out the first octet of an IP address.
+00981  *
+00982  * Example:
+00983  \code
+00984  uip_ipaddr_t ipaddr;
+00985  u8_t octet;
+00986 
+00987  uip_ipaddr(&ipaddr, 1,2,3,4);
+00988  octet = uip_ipaddr1(&ipaddr);
+00989  \endcode
+00990  *
+00991  * In the example above, the variable "octet" will contain the value 1.
+00992  *
+00993  * \hideinitializer
+00994  */
+00995 #define uip_ipaddr1(addr) (htons(((u16_t *)(addr))[0]) >> 8)
+00996 
+00997 /**
+00998  * Pick the second octet of an IP address.
+00999  *
+01000  * Picks out the second octet of an IP address.
+01001  *
+01002  * Example:
+01003  \code
+01004  uip_ipaddr_t ipaddr;
+01005  u8_t octet;
+01006 
+01007  uip_ipaddr(&ipaddr, 1,2,3,4);
+01008  octet = uip_ipaddr2(&ipaddr);
+01009  \endcode
+01010  *
+01011  * In the example above, the variable "octet" will contain the value 2.
+01012  *
+01013  * \hideinitializer
+01014  */
+01015 #define uip_ipaddr2(addr) (htons(((u16_t *)(addr))[0]) & 0xff)
+01016 
+01017 /**
+01018  * Pick the third octet of an IP address.
+01019  *
+01020  * Picks out the third octet of an IP address.
+01021  *
+01022  * Example:
+01023  \code
+01024  uip_ipaddr_t ipaddr;
+01025  u8_t octet;
+01026 
+01027  uip_ipaddr(&ipaddr, 1,2,3,4);
+01028  octet = uip_ipaddr3(&ipaddr);
+01029  \endcode
+01030  *
+01031  * In the example above, the variable "octet" will contain the value 3.
+01032  *
+01033  * \hideinitializer
+01034  */
+01035 #define uip_ipaddr3(addr) (htons(((u16_t *)(addr))[1]) >> 8)
+01036 
+01037 /**
+01038  * Pick the fourth octet of an IP address.
+01039  *
+01040  * Picks out the fourth octet of an IP address.
+01041  *
+01042  * Example:
+01043  \code
+01044  uip_ipaddr_t ipaddr;
+01045  u8_t octet;
+01046 
+01047  uip_ipaddr(&ipaddr, 1,2,3,4);
+01048  octet = uip_ipaddr4(&ipaddr);
+01049  \endcode
+01050  *
+01051  * In the example above, the variable "octet" will contain the value 4.
+01052  *
+01053  * \hideinitializer
+01054  */
+01055 #define uip_ipaddr4(addr) (htons(((u16_t *)(addr))[1]) & 0xff)
+01056 
+01057 /**
+01058  * Convert 16-bit quantity from host byte order to network byte order.
+01059  *
+01060  * This macro is primarily used for converting constants from host
+01061  * byte order to network byte order. For converting variables to
+01062  * network byte order, use the htons() function instead.
+01063  *
+01064  * \hideinitializer
+01065  */
+01066 #ifndef HTONS
+01067 #   if UIP_BYTE_ORDER == UIP_BIG_ENDIAN
+01068 #      define HTONS(n) (n)
+01069 #   else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
+01070 #      define HTONS(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8))
+01071 #   endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
+01072 #else
+01073 #error "HTONS already defined!"
+01074 #endif /* HTONS */
+01075 
+01076 /**
+01077  * Convert 16-bit quantity from host byte order to network byte order.
+01078  *
+01079  * This function is primarily used for converting variables from host
+01080  * byte order to network byte order. For converting constants to
+01081  * network byte order, use the HTONS() macro instead.
+01082  */
+01083 #ifndef htons
+01084 u16_t htons(u16_t val);
+01085 #endif /* htons */
+01086 #ifndef ntohs
+01087 #define ntohs htons
+01088 #endif
+01089 
+01090 /** @} */
+01091 
+01092 /**
+01093  * Pointer to the application data in the packet buffer.
+01094  *
+01095  * This pointer points to the application data when the application is
+01096  * called. If the application wishes to send data, the application may
+01097  * use this space to write the data into before calling uip_send().
+01098  */
+01099 extern void *uip_appdata;
+01100 
+01101 #if UIP_URGDATA > 0
+01102 /* u8_t *uip_urgdata:
+01103  *
+01104  * This pointer points to any urgent data that has been received. Only
+01105  * present if compiled with support for urgent data (UIP_URGDATA).
+01106  */
+01107 extern void *uip_urgdata;
+01108 #endif /* UIP_URGDATA > 0 */
+01109 
+01110 
+01111 /**
+01112  * \defgroup uipdrivervars Variables used in uIP device drivers
+01113  * @{
+01114  *
+01115  * uIP has a few global variables that are used in device drivers for
+01116  * uIP.
+01117  */
+01118 
+01119 /**
+01120  * The length of the packet in the uip_buf buffer.
+01121  *
+01122  * The global variable uip_len holds the length of the packet in the
+01123  * uip_buf buffer.
+01124  *
+01125  * When the network device driver calls the uIP input function,
+01126  * uip_len should be set to the length of the packet in the uip_buf
+01127  * buffer.
+01128  *
+01129  * When sending packets, the device driver should use the contents of
+01130  * the uip_len variable to determine the length of the outgoing
+01131  * packet.
+01132  *
+01133  */
+01134 extern u16_t uip_len;
+01135 
+01136 /** @} */
+01137 
+01138 #if UIP_URGDATA > 0
+01139 extern u16_t uip_urglen, uip_surglen;
+01140 #endif /* UIP_URGDATA > 0 */
+01141 
+01142 
+01143 /**
+01144  * Representation of a uIP TCP connection.
+01145  *
+01146  * The uip_conn structure is used for identifying a connection. All
+01147  * but one field in the structure are to be considered read-only by an
+01148  * application. The only exception is the appstate field whos purpose
+01149  * is to let the application store application-specific state (e.g.,
+01150  * file pointers) for the connection. The type of this field is
+01151  * configured in the "uipopt.h" header file.
+01152  */
+01153 struct uip_conn {
+01154   uip_ipaddr_t ripaddr;   /**< The IP address of the remote host. */
+01155   
+01156   u16_t lport;        /**< The local TCP port, in network byte order. */
+01157   u16_t rport;        /**< The local remote TCP port, in network byte
+01158                          order. */
+01159   
+01160   u8_t rcv_nxt[4];    /**< The sequence number that we expect to
+01161                          receive next. */
+01162   u8_t snd_nxt[4];    /**< The sequence number that was last sent by
+01163                          us. */
+01164   u16_t len;          /**< Length of the data that was previously sent. */
+01165   u16_t mss;          /**< Current maximum segment size for the
+01166                          connection. */
+01167   u16_t initialmss;   /**< Initial maximum segment size for the
+01168                          connection. */
+01169   u8_t sa;            /**< Retransmission time-out calculation state
+01170                          variable. */
+01171   u8_t sv;            /**< Retransmission time-out calculation state
+01172                          variable. */
+01173   u8_t rto;           /**< Retransmission time-out. */
+01174   u8_t tcpstateflags; /**< TCP state and flags. */
+01175   u8_t timer;         /**< The retransmission timer. */
+01176   u8_t nrtx;          /**< The number of retransmissions for the last
+01177                          segment sent. */
+01178 
+01179   /** The application state. */
+01180   uip_tcp_appstate_t appstate;
+01181 };
+01182 
+01183 
+01184 /**
+01185  * Pointer to the current TCP connection.
+01186  *
+01187  * The uip_conn pointer can be used to access the current TCP
+01188  * connection.
+01189  */
+01190 extern struct uip_conn *uip_conn;
+01191 /* The array containing all uIP connections. */
+01192 extern struct uip_conn uip_conns[UIP_CONNS];
+01193 /**
+01194  * \addtogroup uiparch
+01195  * @{
+01196  */
+01197 
+01198 /**
+01199  * 4-byte array used for the 32-bit sequence number calculations.
+01200  */
+01201 extern u8_t uip_acc32[4];
+01202 
+01203 /** @} */
+01204 
+01205 
+01206 #if UIP_UDP
+01207 /**
+01208  * Representation of a uIP UDP connection.
+01209  */
+01210 struct uip_udp_conn {
+01211   uip_ipaddr_t ripaddr;   /**< The IP address of the remote peer. */
+01212   u16_t lport;        /**< The local port number in network byte order. */
+01213   u16_t rport;        /**< The remote port number in network byte order. */
+01214   u8_t  ttl;          /**< Default time-to-live. */
+01215 
+01216   /** The application state. */
+01217   uip_udp_appstate_t appstate;
+01218 };
+01219 
+01220 /**
+01221  * The current UDP connection.
+01222  */
+01223 extern struct uip_udp_conn *uip_udp_conn;
+01224 extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS];
+01225 #endif /* UIP_UDP */
+01226 
+01227 /**
+01228  * The structure holding the TCP/IP statistics that are gathered if
+01229  * UIP_STATISTICS is set to 1.
+01230  *
+01231  */
+01232 struct uip_stats {
+01233   struct {
+01234     uip_stats_t drop;     /**< Number of dropped packets at the IP
+01235                              layer. */
+01236     uip_stats_t recv;     /**< Number of received packets at the IP
+01237                              layer. */
+01238     uip_stats_t sent;     /**< Number of sent packets at the IP
+01239                              layer. */
+01240     uip_stats_t vhlerr;   /**< Number of packets dropped due to wrong
+01241                              IP version or header length. */
+01242     uip_stats_t hblenerr; /**< Number of packets dropped due to wrong
+01243                              IP length, high byte. */
+01244     uip_stats_t lblenerr; /**< Number of packets dropped due to wrong
+01245                              IP length, low byte. */
+01246     uip_stats_t fragerr;  /**< Number of packets dropped since they
+01247                              were IP fragments. */
+01248     uip_stats_t chkerr;   /**< Number of packets dropped due to IP
+01249                              checksum errors. */
+01250     uip_stats_t protoerr; /**< Number of packets dropped since they
+01251                              were neither ICMP, UDP nor TCP. */
+01252   } ip;                   /**< IP statistics. */
+01253   struct {
+01254     uip_stats_t drop;     /**< Number of dropped ICMP packets. */
+01255     uip_stats_t recv;     /**< Number of received ICMP packets. */
+01256     uip_stats_t sent;     /**< Number of sent ICMP packets. */
+01257     uip_stats_t typeerr;  /**< Number of ICMP packets with a wrong
+01258                              type. */
+01259   } icmp;                 /**< ICMP statistics. */
+01260   struct {
+01261     uip_stats_t drop;     /**< Number of dropped TCP segments. */
+01262     uip_stats_t recv;     /**< Number of recived TCP segments. */
+01263     uip_stats_t sent;     /**< Number of sent TCP segments. */
+01264     uip_stats_t chkerr;   /**< Number of TCP segments with a bad
+01265                              checksum. */
+01266     uip_stats_t ackerr;   /**< Number of TCP segments with a bad ACK
+01267                              number. */
+01268     uip_stats_t rst;      /**< Number of recevied TCP RST (reset) segments. */
+01269     uip_stats_t rexmit;   /**< Number of retransmitted TCP segments. */
+01270     uip_stats_t syndrop;  /**< Number of dropped SYNs due to too few
+01271                              connections was avaliable. */
+01272     uip_stats_t synrst;   /**< Number of SYNs for closed ports,
+01273                              triggering a RST. */
+01274   } tcp;                  /**< TCP statistics. */
+01275 #if UIP_UDP
+01276   struct {
+01277     uip_stats_t drop;     /**< Number of dropped UDP segments. */
+01278     uip_stats_t recv;     /**< Number of recived UDP segments. */
+01279     uip_stats_t sent;     /**< Number of sent UDP segments. */
+01280     uip_stats_t chkerr;   /**< Number of UDP segments with a bad
+01281                              checksum. */
+01282   } udp;                  /**< UDP statistics. */
+01283 #endif /* UIP_UDP */
+01284 };
+01285 
+01286 /**
+01287  * The uIP TCP/IP statistics.
+01288  *
+01289  * This is the variable in which the uIP TCP/IP statistics are gathered.
+01290  */
+01291 extern struct uip_stats uip_stat;
+01292 
+01293 
+01294 /*---------------------------------------------------------------------------*/
+01295 /* All the stuff below this point is internal to uIP and should not be
+01296  * used directly by an application or by a device driver.
+01297  */
+01298 /*---------------------------------------------------------------------------*/
+01299 /* u8_t uip_flags:
+01300  *
+01301  * When the application is called, uip_flags will contain the flags
+01302  * that are defined in this file. Please read below for more
+01303  * infomation.
+01304  */
+01305 extern u8_t uip_flags;
+01306 
+01307 /* The following flags may be set in the global variable uip_flags
+01308    before calling the application callback. The UIP_ACKDATA,
+01309    UIP_NEWDATA, and UIP_CLOSE flags may both be set at the same time,
+01310    whereas the others are mutualy exclusive. Note that these flags
+01311    should *NOT* be accessed directly, but only through the uIP
+01312    functions/macros. */
+01313 
+01314 #define UIP_ACKDATA   1     /* Signifies that the outstanding data was
+01315                                acked and the application should send
+01316                                out new data instead of retransmitting
+01317                                the last data. */
+01318 #define UIP_NEWDATA   2     /* Flags the fact that the peer has sent
+01319                                us new data. */
+01320 #define UIP_REXMIT    4     /* Tells the application to retransmit the
+01321                                data that was last sent. */
+01322 #define UIP_POLL      8     /* Used for polling the application, to
+01323                                check if the application has data that
+01324                                it wants to send. */
+01325 #define UIP_CLOSE     16    /* The remote host has closed the
+01326                                connection, thus the connection has
+01327                                gone away. Or the application signals
+01328                                that it wants to close the
+01329                                connection. */
+01330 #define UIP_ABORT     32    /* The remote host has aborted the
+01331                                connection, thus the connection has
+01332                                gone away. Or the application signals
+01333                                that it wants to abort the
+01334                                connection. */
+01335 #define UIP_CONNECTED 64    /* We have got a connection from a remote
+01336                                host and have set up a new connection
+01337                                for it, or an active connection has
+01338                                been successfully established. */
+01339 
+01340 #define UIP_TIMEDOUT  128   /* The connection has been aborted due to
+01341                                too many retransmissions. */
+01342 
+01343 /* uip_process(flag):
+01344  *
+01345  * The actual uIP function which does all the work.
+01346  */
+01347 void uip_process(u8_t flag);
+01348 
+01349 /* The following flags are passed as an argument to the uip_process()
+01350    function. They are used to distinguish between the two cases where
+01351    uip_process() is called. It can be called either because we have
+01352    incoming data that should be processed, or because the periodic
+01353    timer has fired. These values are never used directly, but only in
+01354    the macrose defined in this file. */
+01355  
+01356 #define UIP_DATA          1     /* Tells uIP that there is incoming
+01357                                    data in the uip_buf buffer. The
+01358                                    length of the data is stored in the
+01359                                    global variable uip_len. */
+01360 #define UIP_TIMER         2     /* Tells uIP that the periodic timer
+01361                                    has fired. */
+01362 #define UIP_POLL_REQUEST  3     /* Tells uIP that a connection should
+01363                                    be polled. */
+01364 #define UIP_UDP_SEND_CONN 4     /* Tells uIP that a UDP datagram
+01365                                    should be constructed in the
+01366                                    uip_buf buffer. */
+01367 #if UIP_UDP
+01368 #define UIP_UDP_TIMER     5
+01369 #endif /* UIP_UDP */
+01370 
+01371 /* The TCP states used in the uip_conn->tcpstateflags. */
+01372 #define UIP_CLOSED      0
+01373 #define UIP_SYN_RCVD    1
+01374 #define UIP_SYN_SENT    2
+01375 #define UIP_ESTABLISHED 3
+01376 #define UIP_FIN_WAIT_1  4
+01377 #define UIP_FIN_WAIT_2  5
+01378 #define UIP_CLOSING     6
+01379 #define UIP_TIME_WAIT   7
+01380 #define UIP_LAST_ACK    8
+01381 #define UIP_TS_MASK     15
+01382   
+01383 #define UIP_STOPPED      16
+01384 
+01385 /* The TCP and IP headers. */
+01386 struct uip_tcpip_hdr {
+01387 #if UIP_CONF_IPV6
+01388   /* IPv6 header. */
+01389   u8_t vtc,
+01390     tcflow;
+01391   u16_t flow;
+01392   u8_t len[2];
+01393   u8_t proto, ttl;
+01394   uip_ip6addr_t srcipaddr, destipaddr;
+01395 #else /* UIP_CONF_IPV6 */
+01396   /* IPv4 header. */
+01397   u8_t vhl,
+01398     tos,
+01399     len[2],
+01400     ipid[2],
+01401     ipoffset[2],
+01402     ttl,
+01403     proto;
+01404   u16_t ipchksum;
+01405   u16_t srcipaddr[2],
+01406     destipaddr[2];
+01407 #endif /* UIP_CONF_IPV6 */
+01408   
+01409   /* TCP header. */
+01410   u16_t srcport,
+01411     destport;
+01412   u8_t seqno[4],
+01413     ackno[4],
+01414     tcpoffset,
+01415     flags,
+01416     wnd[2];
+01417   u16_t tcpchksum;
+01418   u8_t urgp[2];
+01419   u8_t optdata[4];
+01420 };
+01421 
+01422 /* The ICMP and IP headers. */
+01423 struct uip_icmpip_hdr {
+01424 #if UIP_CONF_IPV6
+01425   /* IPv6 header. */
+01426   u8_t vtc,
+01427     tcf;
+01428   u16_t flow;
+01429   u8_t len[2];
+01430   u8_t proto, ttl;
+01431   uip_ip6addr_t srcipaddr, destipaddr;
+01432 #else /* UIP_CONF_IPV6 */
+01433   /* IPv4 header. */
+01434   u8_t vhl,
+01435     tos,
+01436     len[2],
+01437     ipid[2],
+01438     ipoffset[2],
+01439     ttl,
+01440     proto;
+01441   u16_t ipchksum;
+01442   u16_t srcipaddr[2],
+01443     destipaddr[2];
+01444 #endif /* UIP_CONF_IPV6 */
+01445   
+01446   /* ICMP (echo) header. */
+01447   u8_t type, icode;
+01448   u16_t icmpchksum;
+01449 #if !UIP_CONF_IPV6
+01450   u16_t id, seqno;
+01451 #else /* !UIP_CONF_IPV6 */
+01452   u8_t flags, reserved1, reserved2, reserved3;
+01453   u8_t icmp6data[16];
+01454   u8_t options[1];
+01455 #endif /* !UIP_CONF_IPV6 */
+01456 };
+01457 
+01458 
+01459 /* The UDP and IP headers. */
+01460 struct uip_udpip_hdr {
+01461 #if UIP_CONF_IPV6
+01462   /* IPv6 header. */
+01463   u8_t vtc,
+01464     tcf;
+01465   u16_t flow;
+01466   u8_t len[2];
+01467   u8_t proto, ttl;
+01468   uip_ip6addr_t srcipaddr, destipaddr;
+01469 #else /* UIP_CONF_IPV6 */
+01470   /* IP header. */
+01471   u8_t vhl,
+01472     tos,
+01473     len[2],
+01474     ipid[2],
+01475     ipoffset[2],
+01476     ttl,
+01477     proto;
+01478   u16_t ipchksum;
+01479   u16_t srcipaddr[2],
+01480     destipaddr[2];
+01481 #endif /* UIP_CONF_IPV6 */
+01482   
+01483   /* UDP header. */
+01484   u16_t srcport,
+01485     destport;
+01486   u16_t udplen;
+01487   u16_t udpchksum;
+01488 };
+01489 
+01490 
+01491 
+01492 /**
+01493  * The buffer size available for user data in the \ref uip_buf buffer.
+01494  *
+01495  * This macro holds the available size for user data in the \ref
+01496  * uip_buf buffer. The macro is intended to be used for checking
+01497  * bounds of available user data.
+01498  *
+01499  * Example:
+01500  \code
+01501  snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i);
+01502  \endcode
+01503  *
+01504  * \hideinitializer
+01505  */
+01506 #define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
+01507 
+01508 
+01509 #define UIP_PROTO_ICMP  1
+01510 #define UIP_PROTO_TCP   6
+01511 #define UIP_PROTO_UDP   17
+01512 #define UIP_PROTO_ICMP6 58
+01513 
+01514 /* Header sizes. */
+01515 #if UIP_CONF_IPV6
+01516 #define UIP_IPH_LEN    40
+01517 #else /* UIP_CONF_IPV6 */
+01518 #define UIP_IPH_LEN    20    /* Size of IP header */
+01519 #endif /* UIP_CONF_IPV6 */
+01520 #define UIP_UDPH_LEN    8    /* Size of UDP header */
+01521 #define UIP_TCPH_LEN   20    /* Size of TCP header */
+01522 #define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN)    /* Size of IP +
+01523                                                           UDP
+01524                                                           header */
+01525 #define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN)    /* Size of IP +
+01526                                                           TCP
+01527                                                           header */
+01528 #define UIP_TCPIP_HLEN UIP_IPTCPH_LEN
+01529 
+01530 
+01531 #if UIP_FIXEDADDR
+01532 extern const uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
+01533 #else /* UIP_FIXEDADDR */
+01534 extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
+01535 #endif /* UIP_FIXEDADDR */
+01536 
+01537 
+01538 
+01539 /**
+01540  * Representation of a 48-bit Ethernet address.
+01541  */
+01542 struct uip_eth_addr {
+01543   u8_t addr[6];
+01544 };
+01545 
+01546 /**
+01547  * Calculate the Internet checksum over a buffer.
+01548  *
+01549  * The Internet checksum is the one's complement of the one's
+01550  * complement sum of all 16-bit words in the buffer.
+01551  *
+01552  * See RFC1071.
+01553  *
+01554  * \param buf A pointer to the buffer over which the checksum is to be
+01555  * computed.
+01556  *
+01557  * \param len The length of the buffer over which the checksum is to
+01558  * be computed.
+01559  *
+01560  * \return The Internet checksum of the buffer.
+01561  */
+01562 u16_t uip_chksum(u16_t *buf, u16_t len);
+01563 
+01564 /**
+01565  * Calculate the IP header checksum of the packet header in uip_buf.
+01566  *
+01567  * The IP header checksum is the Internet checksum of the 20 bytes of
+01568  * the IP header.
+01569  *
+01570  * \return The IP header checksum of the IP header in the uip_buf
+01571  * buffer.
+01572  */
+01573 u16_t uip_ipchksum(void);
+01574 
+01575 /**
+01576  * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
+01577  *
+01578  * The TCP checksum is the Internet checksum of data contents of the
+01579  * TCP segment, and a pseudo-header as defined in RFC793.
+01580  *
+01581  * \return The TCP checksum of the TCP segment in uip_buf and pointed
+01582  * to by uip_appdata.
+01583  */
+01584 u16_t uip_tcpchksum(void);
+01585 
+01586 /**
+01587  * Calculate the UDP checksum of the packet in uip_buf and uip_appdata.
+01588  *
+01589  * The UDP checksum is the Internet checksum of data contents of the
+01590  * UDP segment, and a pseudo-header as defined in RFC768.
+01591  *
+01592  * \return The UDP checksum of the UDP segment in uip_buf and pointed
+01593  * to by uip_appdata.
+01594  */
+01595 u16_t uip_udpchksum(void);
+01596 
+01597 
+01598 #endif /* __UIP_H__ */
+01599 
+01600 
+01601 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00203.html b/components/net/uip/doc/html/a00203.html new file mode 100644 index 0000000000..acdd37f1de --- /dev/null +++ b/components/net/uip/doc/html/a00203.html @@ -0,0 +1,163 @@ + + +uIP 1.0: uip/uip_arch.h Source File + + + + + + +

uip/uip_arch.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup uip
+00003  * {@
+00004  */
+00005 
+00006 /**
+00007  * \defgroup uiparch Architecture specific uIP functions
+00008  * @{
+00009  *
+00010  * The functions in the architecture specific module implement the IP
+00011  * check sum and 32-bit additions.
+00012  *
+00013  * The IP checksum calculation is the most computationally expensive
+00014  * operation in the TCP/IP stack and it therefore pays off to
+00015  * implement this in efficient assembler. The purpose of the uip-arch
+00016  * module is to let the checksum functions to be implemented in
+00017  * architecture specific assembler.
+00018  *
+00019  */
+00020 
+00021 /**
+00022  * \file
+00023  * Declarations of architecture specific functions.
+00024  * \author Adam Dunkels <adam@dunkels.com>
+00025  */
+00026 
+00027 /*
+00028  * Copyright (c) 2001, Adam Dunkels.
+00029  * All rights reserved.
+00030  *
+00031  * Redistribution and use in source and binary forms, with or without
+00032  * modification, are permitted provided that the following conditions
+00033  * are met:
+00034  * 1. Redistributions of source code must retain the above copyright
+00035  *    notice, this list of conditions and the following disclaimer.
+00036  * 2. Redistributions in binary form must reproduce the above copyright
+00037  *    notice, this list of conditions and the following disclaimer in the
+00038  *    documentation and/or other materials provided with the distribution.
+00039  * 3. The name of the author may not be used to endorse or promote
+00040  *    products derived from this software without specific prior
+00041  *    written permission.
+00042  *
+00043  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00044  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00045  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00046  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00047  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00048  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00049  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00050  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00051  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00052  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00053  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00054  *
+00055  * This file is part of the uIP TCP/IP stack.
+00056  *
+00057  * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $
+00058  *
+00059  */
+00060 
+00061 #ifndef __UIP_ARCH_H__
+00062 #define __UIP_ARCH_H__
+00063 
+00064 #include "uip.h"
+00065 
+00066 /**
+00067  * Carry out a 32-bit addition.
+00068  *
+00069  * Because not all architectures for which uIP is intended has native
+00070  * 32-bit arithmetic, uIP uses an external C function for doing the
+00071  * required 32-bit additions in the TCP protocol processing. This
+00072  * function should add the two arguments and place the result in the
+00073  * global variable uip_acc32.
+00074  *
+00075  * \note The 32-bit integer pointed to by the op32 parameter and the
+00076  * result in the uip_acc32 variable are in network byte order (big
+00077  * endian).
+00078  *
+00079  * \param op32 A pointer to a 4-byte array representing a 32-bit
+00080  * integer in network byte order (big endian).
+00081  *
+00082  * \param op16 A 16-bit integer in host byte order.
+00083  */
+00084 void uip_add32(u8_t *op32, u16_t op16);
+00085 
+00086 /**
+00087  * Calculate the Internet checksum over a buffer.
+00088  *
+00089  * The Internet checksum is the one's complement of the one's
+00090  * complement sum of all 16-bit words in the buffer.
+00091  *
+00092  * See RFC1071.
+00093  *
+00094  * \note This function is not called in the current version of uIP,
+00095  * but future versions might make use of it.
+00096  *
+00097  * \param buf A pointer to the buffer over which the checksum is to be
+00098  * computed.
+00099  *
+00100  * \param len The length of the buffer over which the checksum is to
+00101  * be computed.
+00102  *
+00103  * \return The Internet checksum of the buffer.
+00104  */
+00105 u16_t uip_chksum(u16_t *buf, u16_t len);
+00106 
+00107 /**
+00108  * Calculate the IP header checksum of the packet header in uip_buf.
+00109  *
+00110  * The IP header checksum is the Internet checksum of the 20 bytes of
+00111  * the IP header.
+00112  *
+00113  * \return The IP header checksum of the IP header in the uip_buf
+00114  * buffer.
+00115  */
+00116 u16_t uip_ipchksum(void);
+00117 
+00118 /**
+00119  * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
+00120  *
+00121  * The TCP checksum is the Internet checksum of data contents of the
+00122  * TCP segment, and a pseudo-header as defined in RFC793.
+00123  *
+00124  * \note The uip_appdata pointer that points to the packet data may
+00125  * point anywhere in memory, so it is not possible to simply calculate
+00126  * the Internet checksum of the contents of the uip_buf buffer.
+00127  *
+00128  * \return The TCP checksum of the TCP segment in uip_buf and pointed
+00129  * to by uip_appdata.
+00130  */
+00131 u16_t uip_tcpchksum(void);
+00132 
+00133 u16_t uip_udpchksum(void);
+00134 
+00135 /** @} */
+00136 /** @} */
+00137 
+00138 #endif /* __UIP_ARCH_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00204.html b/components/net/uip/doc/html/a00204.html new file mode 100644 index 0000000000..def45e93bb --- /dev/null +++ b/components/net/uip/doc/html/a00204.html @@ -0,0 +1,448 @@ + + +uIP 1.0: uip/uip_arp.c Source File + + + + + + +

uip/uip_arp.c

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup uip
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \defgroup uiparp uIP Address Resolution Protocol
+00008  * @{
+00009  *
+00010  * The Address Resolution Protocol ARP is used for mapping between IP
+00011  * addresses and link level addresses such as the Ethernet MAC
+00012  * addresses. ARP uses broadcast queries to ask for the link level
+00013  * address of a known IP address and the host which is configured with
+00014  * the IP address for which the query was meant, will respond with its
+00015  * link level address.
+00016  *
+00017  * \note This ARP implementation only supports Ethernet.
+00018  */
+00019  
+00020 /**
+00021  * \file
+00022  * Implementation of the ARP Address Resolution Protocol.
+00023  * \author Adam Dunkels <adam@dunkels.com>
+00024  *
+00025  */
+00026 
+00027 /*
+00028  * Copyright (c) 2001-2003, Adam Dunkels.
+00029  * All rights reserved.
+00030  *
+00031  * Redistribution and use in source and binary forms, with or without
+00032  * modification, are permitted provided that the following conditions
+00033  * are met:
+00034  * 1. Redistributions of source code must retain the above copyright
+00035  *    notice, this list of conditions and the following disclaimer.
+00036  * 2. Redistributions in binary form must reproduce the above copyright
+00037  *    notice, this list of conditions and the following disclaimer in the
+00038  *    documentation and/or other materials provided with the distribution.
+00039  * 3. The name of the author may not be used to endorse or promote
+00040  *    products derived from this software without specific prior
+00041  *    written permission.
+00042  *
+00043  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00044  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00045  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00046  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00047  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00048  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00049  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00050  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00051  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00052  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00053  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00054  *
+00055  * This file is part of the uIP TCP/IP stack.
+00056  *
+00057  * $Id: uip_arp.c,v 1.8 2006/06/02 23:36:21 adam Exp $
+00058  *
+00059  */
+00060 
+00061 
+00062 #include "uip_arp.h"
+00063 
+00064 #include <string.h>
+00065 
+00066 struct arp_hdr {
+00067   struct uip_eth_hdr ethhdr;
+00068   u16_t hwtype;
+00069   u16_t protocol;
+00070   u8_t hwlen;
+00071   u8_t protolen;
+00072   u16_t opcode;
+00073   struct uip_eth_addr shwaddr;
+00074   u16_t sipaddr[2];
+00075   struct uip_eth_addr dhwaddr;
+00076   u16_t dipaddr[2];
+00077 };
+00078 
+00079 struct ethip_hdr {
+00080   struct uip_eth_hdr ethhdr;
+00081   /* IP header. */
+00082   u8_t vhl,
+00083     tos,
+00084     len[2],
+00085     ipid[2],
+00086     ipoffset[2],
+00087     ttl,
+00088     proto;
+00089   u16_t ipchksum;
+00090   u16_t srcipaddr[2],
+00091     destipaddr[2];
+00092 };
+00093 
+00094 #define ARP_REQUEST 1
+00095 #define ARP_REPLY   2
+00096 
+00097 #define ARP_HWTYPE_ETH 1
+00098 
+00099 struct arp_entry {
+00100   u16_t ipaddr[2];
+00101   struct uip_eth_addr ethaddr;
+00102   u8_t time;
+00103 };
+00104 
+00105 static const struct uip_eth_addr broadcast_ethaddr =
+00106   {{0xff,0xff,0xff,0xff,0xff,0xff}};
+00107 static const u16_t broadcast_ipaddr[2] = {0xffff,0xffff};
+00108 
+00109 static struct arp_entry arp_table[UIP_ARPTAB_SIZE];
+00110 static u16_t ipaddr[2];
+00111 static u8_t i, c;
+00112 
+00113 static u8_t arptime;
+00114 static u8_t tmpage;
+00115 
+00116 #define BUF   ((struct arp_hdr *)&uip_buf[0])
+00117 #define IPBUF ((struct ethip_hdr *)&uip_buf[0])
+00118 /*-----------------------------------------------------------------------------------*/
+00119 /**
+00120  * Initialize the ARP module.
+00121  *
+00122  */
+00123 /*-----------------------------------------------------------------------------------*/
+00124 void
+00125 uip_arp_init(void)
+00126 {
+00127   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00128     memset(arp_table[i].ipaddr, 0, 4);
+00129   }
+00130 }
+00131 /*-----------------------------------------------------------------------------------*/
+00132 /**
+00133  * Periodic ARP processing function.
+00134  *
+00135  * This function performs periodic timer processing in the ARP module
+00136  * and should be called at regular intervals. The recommended interval
+00137  * is 10 seconds between the calls.
+00138  *
+00139  */
+00140 /*-----------------------------------------------------------------------------------*/
+00141 void
+00142 uip_arp_timer(void)
+00143 {
+00144   struct arp_entry *tabptr;
+00145   
+00146   ++arptime;
+00147   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00148     tabptr = &arp_table[i];
+00149     if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 &&
+00150        arptime - tabptr->time >= UIP_ARP_MAXAGE) {
+00151       memset(tabptr->ipaddr, 0, 4);
+00152     }
+00153   }
+00154 
+00155 }
+00156 /*-----------------------------------------------------------------------------------*/
+00157 static void
+00158 uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
+00159 {
+00160   register struct arp_entry *tabptr;
+00161   /* Walk through the ARP mapping table and try to find an entry to
+00162      update. If none is found, the IP -> MAC address mapping is
+00163      inserted in the ARP table. */
+00164   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00165 
+00166     tabptr = &arp_table[i];
+00167     /* Only check those entries that are actually in use. */
+00168     if(tabptr->ipaddr[0] != 0 &&
+00169        tabptr->ipaddr[1] != 0) {
+00170 
+00171       /* Check if the source IP address of the incoming packet matches
+00172          the IP address in this ARP table entry. */
+00173       if(ipaddr[0] == tabptr->ipaddr[0] &&
+00174          ipaddr[1] == tabptr->ipaddr[1]) {
+00175          
+00176         /* An old entry found, update this and return. */
+00177         memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
+00178         tabptr->time = arptime;
+00179 
+00180         return;
+00181       }
+00182     }
+00183   }
+00184 
+00185   /* If we get here, no existing ARP table entry was found, so we
+00186      create one. */
+00187 
+00188   /* First, we try to find an unused entry in the ARP table. */
+00189   for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00190     tabptr = &arp_table[i];
+00191     if(tabptr->ipaddr[0] == 0 &&
+00192        tabptr->ipaddr[1] == 0) {
+00193       break;
+00194     }
+00195   }
+00196 
+00197   /* If no unused entry is found, we try to find the oldest entry and
+00198      throw it away. */
+00199   if(i == UIP_ARPTAB_SIZE) {
+00200     tmpage = 0;
+00201     c = 0;
+00202     for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00203       tabptr = &arp_table[i];
+00204       if(arptime - tabptr->time > tmpage) {
+00205         tmpage = arptime - tabptr->time;
+00206         c = i;
+00207       }
+00208     }
+00209     i = c;
+00210     tabptr = &arp_table[i];
+00211   }
+00212 
+00213   /* Now, i is the ARP table entry which we will fill with the new
+00214      information. */
+00215   memcpy(tabptr->ipaddr, ipaddr, 4);
+00216   memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
+00217   tabptr->time = arptime;
+00218 }
+00219 /*-----------------------------------------------------------------------------------*/
+00220 /**
+00221  * ARP processing for incoming IP packets
+00222  *
+00223  * This function should be called by the device driver when an IP
+00224  * packet has been received. The function will check if the address is
+00225  * in the ARP cache, and if so the ARP cache entry will be
+00226  * refreshed. If no ARP cache entry was found, a new one is created.
+00227  *
+00228  * This function expects an IP packet with a prepended Ethernet header
+00229  * in the uip_buf[] buffer, and the length of the packet in the global
+00230  * variable uip_len.
+00231  */
+00232 /*-----------------------------------------------------------------------------------*/
+00233 #if 0
+00234 void
+00235 uip_arp_ipin(void)
+00236 {
+00237   uip_len -= sizeof(struct uip_eth_hdr);
+00238         
+00239   /* Only insert/update an entry if the source IP address of the
+00240      incoming IP packet comes from a host on the local network. */
+00241   if((IPBUF->srcipaddr[0] & uip_netmask[0]) !=
+00242      (uip_hostaddr[0] & uip_netmask[0])) {
+00243     return;
+00244   }
+00245   if((IPBUF->srcipaddr[1] & uip_netmask[1]) !=
+00246      (uip_hostaddr[1] & uip_netmask[1])) {
+00247     return;
+00248   }
+00249   uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src));
+00250   
+00251   return;
+00252 }
+00253 #endif /* 0 */
+00254 /*-----------------------------------------------------------------------------------*/
+00255 /**
+00256  * ARP processing for incoming ARP packets.
+00257  *
+00258  * This function should be called by the device driver when an ARP
+00259  * packet has been received. The function will act differently
+00260  * depending on the ARP packet type: if it is a reply for a request
+00261  * that we previously sent out, the ARP cache will be filled in with
+00262  * the values from the ARP reply. If the incoming ARP packet is an ARP
+00263  * request for our IP address, an ARP reply packet is created and put
+00264  * into the uip_buf[] buffer.
+00265  *
+00266  * When the function returns, the value of the global variable uip_len
+00267  * indicates whether the device driver should send out a packet or
+00268  * not. If uip_len is zero, no packet should be sent. If uip_len is
+00269  * non-zero, it contains the length of the outbound packet that is
+00270  * present in the uip_buf[] buffer.
+00271  *
+00272  * This function expects an ARP packet with a prepended Ethernet
+00273  * header in the uip_buf[] buffer, and the length of the packet in the
+00274  * global variable uip_len.
+00275  */
+00276 /*-----------------------------------------------------------------------------------*/
+00277 void
+00278 uip_arp_arpin(void)
+00279 {
+00280   
+00281   if(uip_len < sizeof(struct arp_hdr)) {
+00282     uip_len = 0;
+00283     return;
+00284   }
+00285   uip_len = 0;
+00286   
+00287   switch(BUF->opcode) {
+00288   case HTONS(ARP_REQUEST):
+00289     /* ARP request. If it asked for our address, we send out a
+00290        reply. */
+00291     if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) {
+00292       /* First, we register the one who made the request in our ARP
+00293          table, since it is likely that we will do more communication
+00294          with this host in the future. */
+00295       uip_arp_update(BUF->sipaddr, &BUF->shwaddr);
+00296       
+00297       /* The reply opcode is 2. */
+00298       BUF->opcode = HTONS(2);
+00299 
+00300       memcpy(BUF->dhwaddr.addr, BUF->shwaddr.addr, 6);
+00301       memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);
+00302       memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
+00303       memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6);
+00304       
+00305       BUF->dipaddr[0] = BUF->sipaddr[0];
+00306       BUF->dipaddr[1] = BUF->sipaddr[1];
+00307       BUF->sipaddr[0] = uip_hostaddr[0];
+00308       BUF->sipaddr[1] = uip_hostaddr[1];
+00309 
+00310       BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);
+00311       uip_len = sizeof(struct arp_hdr);
+00312     }
+00313     break;
+00314   case HTONS(ARP_REPLY):
+00315     /* ARP reply. We insert or update the ARP table if it was meant
+00316        for us. */
+00317     if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) {
+00318       uip_arp_update(BUF->sipaddr, &BUF->shwaddr);
+00319     }
+00320     break;
+00321   }
+00322 
+00323   return;
+00324 }
+00325 /*-----------------------------------------------------------------------------------*/
+00326 /**
+00327  * Prepend Ethernet header to an outbound IP packet and see if we need
+00328  * to send out an ARP request.
+00329  *
+00330  * This function should be called before sending out an IP packet. The
+00331  * function checks the destination IP address of the IP packet to see
+00332  * what Ethernet MAC address that should be used as a destination MAC
+00333  * address on the Ethernet.
+00334  *
+00335  * If the destination IP address is in the local network (determined
+00336  * by logical ANDing of netmask and our IP address), the function
+00337  * checks the ARP cache to see if an entry for the destination IP
+00338  * address is found. If so, an Ethernet header is prepended and the
+00339  * function returns. If no ARP cache entry is found for the
+00340  * destination IP address, the packet in the uip_buf[] is replaced by
+00341  * an ARP request packet for the IP address. The IP packet is dropped
+00342  * and it is assumed that they higher level protocols (e.g., TCP)
+00343  * eventually will retransmit the dropped packet.
+00344  *
+00345  * If the destination IP address is not on the local network, the IP
+00346  * address of the default router is used instead.
+00347  *
+00348  * When the function returns, a packet is present in the uip_buf[]
+00349  * buffer, and the length of the packet is in the global variable
+00350  * uip_len.
+00351  */
+00352 /*-----------------------------------------------------------------------------------*/
+00353 void
+00354 uip_arp_out(void)
+00355 {
+00356   struct arp_entry *tabptr;
+00357   
+00358   /* Find the destination IP address in the ARP table and construct
+00359      the Ethernet header. If the destination IP addres isn't on the
+00360      local network, we use the default router's IP address instead.
+00361 
+00362      If not ARP table entry is found, we overwrite the original IP
+00363      packet with an ARP request for the IP address. */
+00364 
+00365   /* First check if destination is a local broadcast. */
+00366   if(uip_ipaddr_cmp(IPBUF->destipaddr, broadcast_ipaddr)) {
+00367     memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6);
+00368   } else {
+00369     /* Check if the destination address is on the local network. */
+00370     if(!uip_ipaddr_maskcmp(IPBUF->destipaddr, uip_hostaddr, uip_netmask)) {
+00371       /* Destination address was not on the local network, so we need to
+00372          use the default router's IP address instead of the destination
+00373          address when determining the MAC address. */
+00374       uip_ipaddr_copy(ipaddr, uip_draddr);
+00375     } else {
+00376       /* Else, we use the destination IP address. */
+00377       uip_ipaddr_copy(ipaddr, IPBUF->destipaddr);
+00378     }
+00379       
+00380     for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
+00381       tabptr = &arp_table[i];
+00382       if(uip_ipaddr_cmp(ipaddr, tabptr->ipaddr)) {
+00383         break;
+00384       }
+00385     }
+00386 
+00387     if(i == UIP_ARPTAB_SIZE) {
+00388       /* The destination address was not in our ARP table, so we
+00389          overwrite the IP packet with an ARP request. */
+00390 
+00391       memset(BUF->ethhdr.dest.addr, 0xff, 6);
+00392       memset(BUF->dhwaddr.addr, 0x00, 6);
+00393       memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
+00394       memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);
+00395     
+00396       uip_ipaddr_copy(BUF->dipaddr, ipaddr);
+00397       uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr);
+00398       BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */
+00399       BUF->hwtype = HTONS(ARP_HWTYPE_ETH);
+00400       BUF->protocol = HTONS(UIP_ETHTYPE_IP);
+00401       BUF->hwlen = 6;
+00402       BUF->protolen = 4;
+00403       BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);
+00404 
+00405       uip_appdata = &uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN];
+00406     
+00407       uip_len = sizeof(struct arp_hdr);
+00408       return;
+00409     }
+00410 
+00411     /* Build an ethernet header. */
+00412     memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6);
+00413   }
+00414   memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
+00415   
+00416   IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP);
+00417 
+00418   uip_len += sizeof(struct uip_eth_hdr);
+00419 }
+00420 /*-----------------------------------------------------------------------------------*/
+00421 
+00422 /** @} */
+00423 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00205.html b/components/net/uip/doc/html/a00205.html new file mode 100644 index 0000000000..9d4feea8fc --- /dev/null +++ b/components/net/uip/doc/html/a00205.html @@ -0,0 +1,169 @@ + + +uIP 1.0: uip/uip_arp.h Source File + + + + + + +

uip/uip_arp.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup uip
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \addtogroup uiparp
+00008  * @{
+00009  */
+00010  
+00011 /**
+00012  * \file
+00013  * Macros and definitions for the ARP module.
+00014  * \author Adam Dunkels <adam@dunkels.com>
+00015  */
+00016   
+00017 
+00018 /*
+00019  * Copyright (c) 2001-2003, Adam Dunkels.
+00020  * All rights reserved.
+00021  *
+00022  * Redistribution and use in source and binary forms, with or without
+00023  * modification, are permitted provided that the following conditions
+00024  * are met:
+00025  * 1. Redistributions of source code must retain the above copyright
+00026  *    notice, this list of conditions and the following disclaimer.
+00027  * 2. Redistributions in binary form must reproduce the above copyright
+00028  *    notice, this list of conditions and the following disclaimer in the
+00029  *    documentation and/or other materials provided with the distribution.
+00030  * 3. The name of the author may not be used to endorse or promote
+00031  *    products derived from this software without specific prior
+00032  *    written permission.
+00033  *
+00034  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00035  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00036  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00037  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00038  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00039  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00040  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00041  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00042  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00043  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00044  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00045  *
+00046  * This file is part of the uIP TCP/IP stack.
+00047  *
+00048  * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $
+00049  *
+00050  */
+00051 
+00052 #ifndef __UIP_ARP_H__
+00053 #define __UIP_ARP_H__
+00054 
+00055 #include "uip.h"
+00056 
+00057 
+00058 extern struct uip_eth_addr uip_ethaddr;
+00059 
+00060 /**
+00061  * The Ethernet header.
+00062  */
+00063 struct uip_eth_hdr {
+00064   struct uip_eth_addr dest;
+00065   struct uip_eth_addr src;
+00066   u16_t type;
+00067 };
+00068 
+00069 #define UIP_ETHTYPE_ARP 0x0806
+00070 #define UIP_ETHTYPE_IP  0x0800
+00071 #define UIP_ETHTYPE_IP6 0x86dd
+00072 
+00073 
+00074 /* The uip_arp_init() function must be called before any of the other
+00075    ARP functions. */
+00076 void uip_arp_init(void);
+00077 
+00078 /* The uip_arp_ipin() function should be called whenever an IP packet
+00079    arrives from the Ethernet. This function refreshes the ARP table or
+00080    inserts a new mapping if none exists. The function assumes that an
+00081    IP packet with an Ethernet header is present in the uip_buf buffer
+00082    and that the length of the packet is in the uip_len variable. */
+00083 /*void uip_arp_ipin(void);*/
+00084 #define uip_arp_ipin()
+00085 
+00086 /* The uip_arp_arpin() should be called when an ARP packet is received
+00087    by the Ethernet driver. This function also assumes that the
+00088    Ethernet frame is present in the uip_buf buffer. When the
+00089    uip_arp_arpin() function returns, the contents of the uip_buf
+00090    buffer should be sent out on the Ethernet if the uip_len variable
+00091    is > 0. */
+00092 void uip_arp_arpin(void);
+00093 
+00094 /* The uip_arp_out() function should be called when an IP packet
+00095    should be sent out on the Ethernet. This function creates an
+00096    Ethernet header before the IP header in the uip_buf buffer. The
+00097    Ethernet header will have the correct Ethernet MAC destination
+00098    address filled in if an ARP table entry for the destination IP
+00099    address (or the IP address of the default router) is present. If no
+00100    such table entry is found, the IP packet is overwritten with an ARP
+00101    request and we rely on TCP to retransmit the packet that was
+00102    overwritten. In any case, the uip_len variable holds the length of
+00103    the Ethernet frame that should be transmitted. */
+00104 void uip_arp_out(void);
+00105 
+00106 /* The uip_arp_timer() function should be called every ten seconds. It
+00107    is responsible for flushing old entries in the ARP table. */
+00108 void uip_arp_timer(void);
+00109 
+00110 /** @} */
+00111 
+00112 /**
+00113  * \addtogroup uipconffunc
+00114  * @{
+00115  */
+00116 
+00117 
+00118 /**
+00119  * Specifiy the Ethernet MAC address.
+00120  *
+00121  * The ARP code needs to know the MAC address of the Ethernet card in
+00122  * order to be able to respond to ARP queries and to generate working
+00123  * Ethernet headers.
+00124  *
+00125  * \note This macro only specifies the Ethernet MAC address to the ARP
+00126  * code. It cannot be used to change the MAC address of the Ethernet
+00127  * card.
+00128  *
+00129  * \param eaddr A pointer to a struct uip_eth_addr containing the
+00130  * Ethernet MAC address of the Ethernet card.
+00131  *
+00132  * \hideinitializer
+00133  */
+00134 #define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \
+00135                               uip_ethaddr.addr[1] = eaddr.addr[1];\
+00136                               uip_ethaddr.addr[2] = eaddr.addr[2];\
+00137                               uip_ethaddr.addr[3] = eaddr.addr[3];\
+00138                               uip_ethaddr.addr[4] = eaddr.addr[4];\
+00139                               uip_ethaddr.addr[5] = eaddr.addr[5];} while(0)
+00140 
+00141 /** @} */
+00142 /** @} */
+00143 
+00144 #endif /* __UIP_ARP_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00206.html b/components/net/uip/doc/html/a00206.html new file mode 100644 index 0000000000..3272565d24 --- /dev/null +++ b/components/net/uip/doc/html/a00206.html @@ -0,0 +1,564 @@ + + +uIP 1.0: uip/uipopt.h Source File + + + + + + +

uip/uipopt.h

Go to the documentation of this file.
00001 /**
+00002  * \defgroup uipopt Configuration options for uIP
+00003  * @{
+00004  *
+00005  * uIP is configured using the per-project configuration file
+00006  * uipopt.h. This file contains all compile-time options for uIP and
+00007  * should be tweaked to match each specific project. The uIP
+00008  * distribution contains a documented example "uipopt.h" that can be
+00009  * copied and modified for each project.
+00010  *
+00011  * \note Most of the configuration options in the uipopt.h should not
+00012  * be changed, but rather the per-project uip-conf.h file.
+00013  */
+00014 
+00015 /**
+00016  * \file
+00017  * Configuration options for uIP.
+00018  * \author Adam Dunkels <adam@dunkels.com>
+00019  *
+00020  * This file is used for tweaking various configuration options for
+00021  * uIP. You should make a copy of this file into one of your project's
+00022  * directories instead of editing this example "uipopt.h" file that
+00023  * comes with the uIP distribution.
+00024  */
+00025 
+00026 /*
+00027  * Copyright (c) 2001-2003, Adam Dunkels.
+00028  * All rights reserved.
+00029  *
+00030  * Redistribution and use in source and binary forms, with or without
+00031  * modification, are permitted provided that the following conditions
+00032  * are met:
+00033  * 1. Redistributions of source code must retain the above copyright
+00034  *    notice, this list of conditions and the following disclaimer.
+00035  * 2. Redistributions in binary form must reproduce the above copyright
+00036  *    notice, this list of conditions and the following disclaimer in the
+00037  *    documentation and/or other materials provided with the distribution.
+00038  * 3. The name of the author may not be used to endorse or promote
+00039  *    products derived from this software without specific prior
+00040  *    written permission.
+00041  *
+00042  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+00043  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+00044  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00045  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+00046  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00047  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+00048  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+00049  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+00050  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+00051  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+00052  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+00053  *
+00054  * This file is part of the uIP TCP/IP stack.
+00055  *
+00056  * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $
+00057  *
+00058  */
+00059 
+00060 #ifndef __UIPOPT_H__
+00061 #define __UIPOPT_H__
+00062 
+00063 #ifndef UIP_LITTLE_ENDIAN
+00064 #define UIP_LITTLE_ENDIAN  3412
+00065 #endif /* UIP_LITTLE_ENDIAN */
+00066 #ifndef UIP_BIG_ENDIAN
+00067 #define UIP_BIG_ENDIAN     1234
+00068 #endif /* UIP_BIG_ENDIAN */
+00069 
+00070 #include "uip-conf.h"
+00071 
+00072 /*------------------------------------------------------------------------------*/
+00073 
+00074 /**
+00075  * \name Static configuration options
+00076  * @{
+00077  *
+00078  * These configuration options can be used for setting the IP address
+00079  * settings statically, but only if UIP_FIXEDADDR is set to 1. The
+00080  * configuration options for a specific node includes IP address,
+00081  * netmask and default router as well as the Ethernet address. The
+00082  * netmask, default router and Ethernet address are appliciable only
+00083  * if uIP should be run over Ethernet.
+00084  *
+00085  * All of these should be changed to suit your project.
+00086 */
+00087 
+00088 /**
+00089  * Determines if uIP should use a fixed IP address or not.
+00090  *
+00091  * If uIP should use a fixed IP address, the settings are set in the
+00092  * uipopt.h file. If not, the macros uip_sethostaddr(),
+00093  * uip_setdraddr() and uip_setnetmask() should be used instead.
+00094  *
+00095  * \hideinitializer
+00096  */
+00097 #define UIP_FIXEDADDR    0
+00098 
+00099 /**
+00100  * Ping IP address asignment.
+00101  *
+00102  * uIP uses a "ping" packets for setting its own IP address if this
+00103  * option is set. If so, uIP will start with an empty IP address and
+00104  * the destination IP address of the first incoming "ping" (ICMP echo)
+00105  * packet will be used for setting the hosts IP address.
+00106  *
+00107  * \note This works only if UIP_FIXEDADDR is 0.
+00108  *
+00109  * \hideinitializer
+00110  */
+00111 #ifdef UIP_CONF_PINGADDRCONF
+00112 #define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF
+00113 #else /* UIP_CONF_PINGADDRCONF */
+00114 #define UIP_PINGADDRCONF 0
+00115 #endif /* UIP_CONF_PINGADDRCONF */
+00116 
+00117 
+00118 /**
+00119  * Specifies if the uIP ARP module should be compiled with a fixed
+00120  * Ethernet MAC address or not.
+00121  *
+00122  * If this configuration option is 0, the macro uip_setethaddr() can
+00123  * be used to specify the Ethernet address at run-time.
+00124  *
+00125  * \hideinitializer
+00126  */
+00127 #define UIP_FIXEDETHADDR 0
+00128 
+00129 /** @} */
+00130 /*------------------------------------------------------------------------------*/
+00131 /**
+00132  * \name IP configuration options
+00133  * @{
+00134  *
+00135  */
+00136 /**
+00137  * The IP TTL (time to live) of IP packets sent by uIP.
+00138  *
+00139  * This should normally not be changed.
+00140  */
+00141 #define UIP_TTL         64
+00142 
+00143 /**
+00144  * Turn on support for IP packet reassembly.
+00145  *
+00146  * uIP supports reassembly of fragmented IP packets. This features
+00147  * requires an additonal amount of RAM to hold the reassembly buffer
+00148  * and the reassembly code size is approximately 700 bytes.  The
+00149  * reassembly buffer is of the same size as the uip_buf buffer
+00150  * (configured by UIP_BUFSIZE).
+00151  *
+00152  * \note IP packet reassembly is not heavily tested.
+00153  *
+00154  * \hideinitializer
+00155  */
+00156 #define UIP_REASSEMBLY 0
+00157 
+00158 /**
+00159  * The maximum time an IP fragment should wait in the reassembly
+00160  * buffer before it is dropped.
+00161  *
+00162  */
+00163 #define UIP_REASS_MAXAGE 40
+00164 
+00165 /** @} */
+00166 
+00167 /*------------------------------------------------------------------------------*/
+00168 /**
+00169  * \name UDP configuration options
+00170  * @{
+00171  */
+00172 
+00173 /**
+00174  * Toggles wether UDP support should be compiled in or not.
+00175  *
+00176  * \hideinitializer
+00177  */
+00178 #ifdef UIP_CONF_UDP
+00179 #define UIP_UDP UIP_CONF_UDP
+00180 #else /* UIP_CONF_UDP */
+00181 #define UIP_UDP           0
+00182 #endif /* UIP_CONF_UDP */
+00183 
+00184 /**
+00185  * Toggles if UDP checksums should be used or not.
+00186  *
+00187  * \note Support for UDP checksums is currently not included in uIP,
+00188  * so this option has no function.
+00189  *
+00190  * \hideinitializer
+00191  */
+00192 #ifdef UIP_CONF_UDP_CHECKSUMS
+00193 #define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS
+00194 #else
+00195 #define UIP_UDP_CHECKSUMS 0
+00196 #endif
+00197 
+00198 /**
+00199  * The maximum amount of concurrent UDP connections.
+00200  *
+00201  * \hideinitializer
+00202  */
+00203 #ifdef UIP_CONF_UDP_CONNS
+00204 #define UIP_UDP_CONNS UIP_CONF_UDP_CONNS
+00205 #else /* UIP_CONF_UDP_CONNS */
+00206 #define UIP_UDP_CONNS    10
+00207 #endif /* UIP_CONF_UDP_CONNS */
+00208 
+00209 /**
+00210  * The name of the function that should be called when UDP datagrams arrive.
+00211  *
+00212  * \hideinitializer
+00213  */
+00214 
+00215 
+00216 /** @} */
+00217 /*------------------------------------------------------------------------------*/
+00218 /**
+00219  * \name TCP configuration options
+00220  * @{
+00221  */
+00222 
+00223 /**
+00224  * Determines if support for opening connections from uIP should be
+00225  * compiled in.
+00226  *
+00227  * If the applications that are running on top of uIP for this project
+00228  * do not need to open outgoing TCP connections, this configration
+00229  * option can be turned off to reduce the code size of uIP.
+00230  *
+00231  * \hideinitializer
+00232  */
+00233 #define UIP_ACTIVE_OPEN 1
+00234 
+00235 /**
+00236  * The maximum number of simultaneously open TCP connections.
+00237  *
+00238  * Since the TCP connections are statically allocated, turning this
+00239  * configuration knob down results in less RAM used. Each TCP
+00240  * connection requires approximatly 30 bytes of memory.
+00241  *
+00242  * \hideinitializer
+00243  */
+00244 #ifndef UIP_CONF_MAX_CONNECTIONS
+00245 #define UIP_CONNS       10
+00246 #else /* UIP_CONF_MAX_CONNECTIONS */
+00247 #define UIP_CONNS UIP_CONF_MAX_CONNECTIONS
+00248 #endif /* UIP_CONF_MAX_CONNECTIONS */
+00249 
+00250 
+00251 /**
+00252  * The maximum number of simultaneously listening TCP ports.
+00253  *
+00254  * Each listening TCP port requires 2 bytes of memory.
+00255  *
+00256  * \hideinitializer
+00257  */
+00258 #ifndef UIP_CONF_MAX_LISTENPORTS
+00259 #define UIP_LISTENPORTS 20
+00260 #else /* UIP_CONF_MAX_LISTENPORTS */
+00261 #define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS
+00262 #endif /* UIP_CONF_MAX_LISTENPORTS */
+00263 
+00264 /**
+00265  * Determines if support for TCP urgent data notification should be
+00266  * compiled in.
+00267  *
+00268  * Urgent data (out-of-band data) is a rarely used TCP feature that
+00269  * very seldom would be required.
+00270  *
+00271  * \hideinitializer
+00272  */
+00273 #define UIP_URGDATA      0
+00274 
+00275 /**
+00276  * The initial retransmission timeout counted in timer pulses.
+00277  *
+00278  * This should not be changed.
+00279  */
+00280 #define UIP_RTO         3
+00281 
+00282 /**
+00283  * The maximum number of times a segment should be retransmitted
+00284  * before the connection should be aborted.
+00285  *
+00286  * This should not be changed.
+00287  */
+00288 #define UIP_MAXRTX      8
+00289 
+00290 /**
+00291  * The maximum number of times a SYN segment should be retransmitted
+00292  * before a connection request should be deemed to have been
+00293  * unsuccessful.
+00294  *
+00295  * This should not need to be changed.
+00296  */
+00297 #define UIP_MAXSYNRTX      5
+00298 
+00299 /**
+00300  * The TCP maximum segment size.
+00301  *
+00302  * This is should not be to set to more than
+00303  * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN.
+00304  */
+00305 #define UIP_TCP_MSS     (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
+00306 
+00307 /**
+00308  * The size of the advertised receiver's window.
+00309  *
+00310  * Should be set low (i.e., to the size of the uip_buf buffer) is the
+00311  * application is slow to process incoming data, or high (32768 bytes)
+00312  * if the application processes data quickly.
+00313  *
+00314  * \hideinitializer
+00315  */
+00316 #ifndef UIP_CONF_RECEIVE_WINDOW
+00317 #define UIP_RECEIVE_WINDOW UIP_TCP_MSS
+00318 #else
+00319 #define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW
+00320 #endif
+00321 
+00322 /**
+00323  * How long a connection should stay in the TIME_WAIT state.
+00324  *
+00325  * This configiration option has no real implication, and it should be
+00326  * left untouched.
+00327  */
+00328 #define UIP_TIME_WAIT_TIMEOUT 120
+00329 
+00330 
+00331 /** @} */
+00332 /*------------------------------------------------------------------------------*/
+00333 /**
+00334  * \name ARP configuration options
+00335  * @{
+00336  */
+00337 
+00338 /**
+00339  * The size of the ARP table.
+00340  *
+00341  * This option should be set to a larger value if this uIP node will
+00342  * have many connections from the local network.
+00343  *
+00344  * \hideinitializer
+00345  */
+00346 #ifdef UIP_CONF_ARPTAB_SIZE
+00347 #define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE
+00348 #else
+00349 #define UIP_ARPTAB_SIZE 8
+00350 #endif
+00351 
+00352 /**
+00353  * The maxium age of ARP table entries measured in 10ths of seconds.
+00354  *
+00355  * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
+00356  * default).
+00357  */
+00358 #define UIP_ARP_MAXAGE 120
+00359 
+00360 /** @} */
+00361 
+00362 /*------------------------------------------------------------------------------*/
+00363 
+00364 /**
+00365  * \name General configuration options
+00366  * @{
+00367  */
+00368 
+00369 /**
+00370  * The size of the uIP packet buffer.
+00371  *
+00372  * The uIP packet buffer should not be smaller than 60 bytes, and does
+00373  * not need to be larger than 1500 bytes. Lower size results in lower
+00374  * TCP throughput, larger size results in higher TCP throughput.
+00375  *
+00376  * \hideinitializer
+00377  */
+00378 #ifndef UIP_CONF_BUFFER_SIZE
+00379 #define UIP_BUFSIZE     400
+00380 #else /* UIP_CONF_BUFFER_SIZE */
+00381 #define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE
+00382 #endif /* UIP_CONF_BUFFER_SIZE */
+00383 
+00384 
+00385 /**
+00386  * Determines if statistics support should be compiled in.
+00387  *
+00388  * The statistics is useful for debugging and to show the user.
+00389  *
+00390  * \hideinitializer
+00391  */
+00392 #ifndef UIP_CONF_STATISTICS
+00393 #define UIP_STATISTICS  0
+00394 #else /* UIP_CONF_STATISTICS */
+00395 #define UIP_STATISTICS UIP_CONF_STATISTICS
+00396 #endif /* UIP_CONF_STATISTICS */
+00397 
+00398 /**
+00399  * Determines if logging of certain events should be compiled in.
+00400  *
+00401  * This is useful mostly for debugging. The function uip_log()
+00402  * must be implemented to suit the architecture of the project, if
+00403  * logging is turned on.
+00404  *
+00405  * \hideinitializer
+00406  */
+00407 #ifndef UIP_CONF_LOGGING
+00408 #define UIP_LOGGING     0
+00409 #else /* UIP_CONF_LOGGING */
+00410 #define UIP_LOGGING     UIP_CONF_LOGGING
+00411 #endif /* UIP_CONF_LOGGING */
+00412 
+00413 /**
+00414  * Broadcast support.
+00415  *
+00416  * This flag configures IP broadcast support. This is useful only
+00417  * together with UDP.
+00418  *
+00419  * \hideinitializer
+00420  *
+00421  */
+00422 #ifndef UIP_CONF_BROADCAST
+00423 #define UIP_BROADCAST 0
+00424 #else /* UIP_CONF_BROADCAST */
+00425 #define UIP_BROADCAST UIP_CONF_BROADCAST
+00426 #endif /* UIP_CONF_BROADCAST */
+00427 
+00428 /**
+00429  * Print out a uIP log message.
+00430  *
+00431  * This function must be implemented by the module that uses uIP, and
+00432  * is called by uIP whenever a log message is generated.
+00433  */
+00434 void uip_log(char *msg);
+00435 
+00436 /**
+00437  * The link level header length.
+00438  *
+00439  * This is the offset into the uip_buf where the IP header can be
+00440  * found. For Ethernet, this should be set to 14. For SLIP, this
+00441  * should be set to 0.
+00442  *
+00443  * \hideinitializer
+00444  */
+00445 #ifdef UIP_CONF_LLH_LEN
+00446 #define UIP_LLH_LEN UIP_CONF_LLH_LEN
+00447 #else /* UIP_CONF_LLH_LEN */
+00448 #define UIP_LLH_LEN     14
+00449 #endif /* UIP_CONF_LLH_LEN */
+00450 
+00451 /** @} */
+00452 /*------------------------------------------------------------------------------*/
+00453 /**
+00454  * \name CPU architecture configuration
+00455  * @{
+00456  *
+00457  * The CPU architecture configuration is where the endianess of the
+00458  * CPU on which uIP is to be run is specified. Most CPUs today are
+00459  * little endian, and the most notable exception are the Motorolas
+00460  * which are big endian. The BYTE_ORDER macro should be changed to
+00461  * reflect the CPU architecture on which uIP is to be run.
+00462  */
+00463 
+00464 /**
+00465  * The byte order of the CPU architecture on which uIP is to be run.
+00466  *
+00467  * This option can be either BIG_ENDIAN (Motorola byte order) or
+00468  * LITTLE_ENDIAN (Intel byte order).
+00469  *
+00470  * \hideinitializer
+00471  */
+00472 #ifdef UIP_CONF_BYTE_ORDER
+00473 #define UIP_BYTE_ORDER     UIP_CONF_BYTE_ORDER
+00474 #else /* UIP_CONF_BYTE_ORDER */
+00475 #define UIP_BYTE_ORDER     UIP_LITTLE_ENDIAN
+00476 #endif /* UIP_CONF_BYTE_ORDER */
+00477 
+00478 /** @} */
+00479 /*------------------------------------------------------------------------------*/
+00480 
+00481 /**
+00482  * \name Appication specific configurations
+00483  * @{
+00484  *
+00485  * An uIP application is implemented using a single application
+00486  * function that is called by uIP whenever a TCP/IP event occurs. The
+00487  * name of this function must be registered with uIP at compile time
+00488  * using the UIP_APPCALL definition.
+00489  *
+00490  * uIP applications can store the application state within the
+00491  * uip_conn structure by specifying the type of the application
+00492  * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t.
+00493  *
+00494  * The file containing the definitions must be included in the
+00495  * uipopt.h file.
+00496  *
+00497  * The following example illustrates how this can look.
+00498  \code
+00499 
+00500 void httpd_appcall(void);
+00501 #define UIP_APPCALL     httpd_appcall
+00502 
+00503 struct httpd_state {
+00504   u8_t state;
+00505   u16_t count;
+00506   char *dataptr;
+00507   char *script;
+00508 };
+00509 typedef struct httpd_state uip_tcp_appstate_t
+00510  \endcode
+00511  */
+00512 
+00513 /**
+00514  * \var #define UIP_APPCALL
+00515  *
+00516  * The name of the application function that uIP should call in
+00517  * response to TCP/IP events.
+00518  *
+00519  */
+00520 
+00521 /**
+00522  * \var typedef uip_tcp_appstate_t
+00523  *
+00524  * The type of the application state that is to be stored in the
+00525  * uip_conn structure. This usually is typedef:ed to a struct holding
+00526  * application state information.
+00527  */
+00528 
+00529 /**
+00530  * \var typedef uip_udp_appstate_t
+00531  *
+00532  * The type of the application state that is to be stored in the
+00533  * uip_conn structure. This usually is typedef:ed to a struct holding
+00534  * application state information.
+00535  */
+00536 /** @} */
+00537 /** @} */
+00538 
+00539 #endif /* __UIPOPT_H__ */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/a00207.html b/components/net/uip/doc/html/a00207.html new file mode 100644 index 0000000000..937d9a6de3 --- /dev/null +++ b/components/net/uip/doc/html/a00207.html @@ -0,0 +1,182 @@ + + +uIP 1.0: unix/uip-conf.h Source File + + + + + + +

unix/uip-conf.h

Go to the documentation of this file.
00001 /**
+00002  * \addtogroup uipopt
+00003  * @{
+00004  */
+00005 
+00006 /**
+00007  * \name Project-specific configuration options
+00008  * @{
+00009  *
+00010  * uIP has a number of configuration options that can be overridden
+00011  * for each project. These are kept in a project-specific uip-conf.h
+00012  * file and all configuration names have the prefix UIP_CONF.
+00013  */
+00014 
+00015 /*
+00016  * Copyright (c) 2006, Swedish Institute of Computer Science.
+00017  * All rights reserved.
+00018  *
+00019  * Redistribution and use in source and binary forms, with or without
+00020  * modification, are permitted provided that the following conditions
+00021  * are met:
+00022  * 1. Redistributions of source code must retain the above copyright
+00023  *    notice, this list of conditions and the following disclaimer.
+00024  * 2. Redistributions in binary form must reproduce the above copyright
+00025  *    notice, this list of conditions and the following disclaimer in the
+00026  *    documentation and/or other materials provided with the distribution.
+00027  * 3. Neither the name of the Institute nor the names of its contributors
+00028  *    may be used to endorse or promote products derived from this software
+00029  *    without specific prior written permission.
+00030  *
+00031  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+00032  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+00033  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+00034  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+00035  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+00036  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+00037  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+00038  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+00039  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+00040  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+00041  * SUCH DAMAGE.
+00042  *
+00043  * This file is part of the uIP TCP/IP stack
+00044  *
+00045  * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $
+00046  */
+00047 
+00048 /**
+00049  * \file
+00050  *         An example uIP configuration file
+00051  * \author
+00052  *         Adam Dunkels <adam@sics.se>
+00053  */
+00054 
+00055 #ifndef __UIP_CONF_H__
+00056 #define __UIP_CONF_H__
+00057 
+00058 #include <inttypes.h>
+00059 
+00060 /**
+00061  * 8 bit datatype
+00062  *
+00063  * This typedef defines the 8-bit type used throughout uIP.
+00064  *
+00065  * \hideinitializer
+00066  */
+00067 typedef uint8_t u8_t;
+00068 
+00069 /**
+00070  * 16 bit datatype
+00071  *
+00072  * This typedef defines the 16-bit type used throughout uIP.
+00073  *
+00074  * \hideinitializer
+00075  */
+00076 typedef uint16_t u16_t;
+00077 
+00078 /**
+00079  * Statistics datatype
+00080  *
+00081  * This typedef defines the dataype used for keeping statistics in
+00082  * uIP.
+00083  *
+00084  * \hideinitializer
+00085  */
+00086 typedef unsigned short uip_stats_t;
+00087 
+00088 /**
+00089  * Maximum number of TCP connections.
+00090  *
+00091  * \hideinitializer
+00092  */
+00093 #define UIP_CONF_MAX_CONNECTIONS 40
+00094 
+00095 /**
+00096  * Maximum number of listening TCP ports.
+00097  *
+00098  * \hideinitializer
+00099  */
+00100 #define UIP_CONF_MAX_LISTENPORTS 40
+00101 
+00102 /**
+00103  * uIP buffer size.
+00104  *
+00105  * \hideinitializer
+00106  */
+00107 #define UIP_CONF_BUFFER_SIZE     420
+00108 
+00109 /**
+00110  * CPU byte order.
+00111  *
+00112  * \hideinitializer
+00113  */
+00114 #define UIP_CONF_BYTE_ORDER      LITTLE_ENDIAN
+00115 
+00116 /**
+00117  * Logging on or off
+00118  *
+00119  * \hideinitializer
+00120  */
+00121 #define UIP_CONF_LOGGING         1
+00122 
+00123 /**
+00124  * UDP support on or off
+00125  *
+00126  * \hideinitializer
+00127  */
+00128 #define UIP_CONF_UDP             0
+00129 
+00130 /**
+00131  * UDP checksums on or off
+00132  *
+00133  * \hideinitializer
+00134  */
+00135 #define UIP_CONF_UDP_CHECKSUMS   1
+00136 
+00137 /**
+00138  * uIP statistics on or off
+00139  *
+00140  * \hideinitializer
+00141  */
+00142 #define UIP_CONF_STATISTICS      1
+00143 
+00144 /* Here we include the header file for the application(s) we use in
+00145    our project. */
+00146 /*#include "smtp.h"*/
+00147 /*#include "hello-world.h"*/
+00148 /*#include "telnetd.h"*/
+00149 #include "webserver.h"
+00150 /*#include "dhcpc.h"*/
+00151 /*#include "resolv.h"*/
+00152 /*#include "webclient.h"*/
+00153 
+00154 #endif /* __UIP_CONF_H__ */
+00155 
+00156 /** @} */
+00157 /** @} */
+

Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/annotated.html b/components/net/uip/doc/html/annotated.html new file mode 100644 index 0000000000..e64936120c --- /dev/null +++ b/components/net/uip/doc/html/annotated.html @@ -0,0 +1,50 @@ + + +uIP 1.0: Data Structures + + + + + + +

uIP 1.0 Data Structures

Here are the data structures with brief descriptions: + + + + + + + + + + + + + + + + + + + + + +
dhcpc_state
hello_world_state
httpd_cgi_call
httpd_state
memb_blocks
psockThe representation of a protosocket
psock_buf
pt
smtp_state
telnetd_state
timerA timer
uip_connRepresentation of a uIP TCP connection
uip_eth_addrRepresentation of a 48-bit Ethernet address
uip_eth_hdrThe Ethernet header
uip_icmpip_hdr
uip_neighbor_addr
uip_statsThe structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1
uip_tcpip_hdr
uip_udp_connRepresentation of a uIP UDP connection
uip_udpip_hdr
webclient_state
+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/classes.html b/components/net/uip/doc/html/classes.html new file mode 100644 index 0000000000..7a937cb61a --- /dev/null +++ b/components/net/uip/doc/html/classes.html @@ -0,0 +1,38 @@ + + +uIP 1.0: Alphabetical List + + + + + + +

uIP 1.0 Data Structure Index

D | H | M | P | S | T | U | W

+ +
  D  
+
  M  
+
  S  
+
uip_conn   uip_tcpip_hdr   
dhcpc_state   memb_blocks   smtp_state   uip_eth_addr   uip_udp_conn   
  H  
+
  P  
+
  T  
+
uip_eth_hdr   uip_udpip_hdr   
hello_world_state   psock   telnetd_state   uip_icmpip_hdr   
  W  
+
httpd_cgi_call   psock_buf   timer   uip_neighbor_addr   webclient_state   
httpd_state   pt   
  U  
+
uip_stats   

D | H | M | P | S | T | U | W

+


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/doxygen.css b/components/net/uip/doc/html/doxygen.css new file mode 100644 index 0000000000..05615b2e61 --- /dev/null +++ b/components/net/uip/doc/html/doxygen.css @@ -0,0 +1,310 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +.fragment { + font-family: Fixed, monospace; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #F4F4FB; font-weight: bold; } +TD.mdPrefix { + background-color: #F4F4FB; + color: #606060; + font-size: 80%; +} +TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } +TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdTable { + border: 1px solid #868686; + background-color: #F4F4FB; +} +.mdRow { + padding: 8px 10px; +} +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { background: #e8eef2; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} + diff --git a/components/net/uip/doc/html/doxygen.png b/components/net/uip/doc/html/doxygen.png new file mode 100644 index 0000000000..f0a274bbaf Binary files /dev/null and b/components/net/uip/doc/html/doxygen.png differ diff --git a/components/net/uip/doc/html/examples.html b/components/net/uip/doc/html/examples.html new file mode 100644 index 0000000000..d51b041538 --- /dev/null +++ b/components/net/uip/doc/html/examples.html @@ -0,0 +1,38 @@ + + +uIP 1.0: Examples + + + + + +

uIP 1.0 Examples

Here is a list of all examples: +
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/files.html b/components/net/uip/doc/html/files.html new file mode 100644 index 0000000000..45982f989b --- /dev/null +++ b/components/net/uip/doc/html/files.html @@ -0,0 +1,67 @@ + + +uIP 1.0: File Index + + + + + + +

uIP 1.0 File List

Here is a list of all documented files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
apps/dhcpc/dhcpc.c [code]
apps/dhcpc/dhcpc.h [code]
apps/hello-world/hello-world.c [code]An example of how to write uIP applications with protosockets
apps/hello-world/hello-world.h [code]Header file for an example of how to write uIP applications with protosockets
apps/resolv/resolv.c [code]DNS host name to IP address resolver
apps/resolv/resolv.h [code]DNS resolver code header file
apps/smtp/smtp.c [code]SMTP example implementation
apps/smtp/smtp.h [code]SMTP header file
apps/telnetd/shell.c [code]
apps/telnetd/shell.h [code]Interface for the Contiki shell
apps/telnetd/telnetd.c [code]
apps/telnetd/telnetd.h [code]
apps/webclient/webclient.c [code]Implementation of the HTTP client
apps/webclient/webclient.h [code]Header file for the HTTP client
apps/webserver/httpd-cgi.c [code]Web server script interface
apps/webserver/httpd-cgi.h [code]Web server script interface header file
apps/webserver/httpd.c [code]Web server
apps/webserver/httpd.h [code]
lib/memb.c [code]Memory block allocation routines
lib/memb.h [code]Memory block allocation routines
uip/clock.h [code]
uip/lc-addrlabels.h [code]Implementation of local continuations based on the "Labels as values" feature of gcc
uip/lc-switch.h [code]Implementation of local continuations based on switch() statment
uip/lc.h [code]Local continuations
uip/psock.c [code]
uip/psock.h [code]Protosocket library header file
uip/pt.h [code]Protothreads implementation
uip/timer.c [code]Timer library implementation
uip/timer.h [code]Timer library header file
uip/uip-neighbor.c [code]Database of link-local neighbors, used by IPv6 code and to be used by a future ARP code rewrite
uip/uip-neighbor.h [code]Header file for database of link-local neighbors, used by IPv6 code and to be used by future ARP code
uip/uip-split.c [code]
uip/uip-split.h [code]Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation
uip/uip.c [code]The uIP TCP/IP stack code
uip/uip.h [code]Header file for the uIP TCP/IP stack
uip/uip_arch.h [code]Declarations of architecture specific functions
uip/uip_arp.c [code]Implementation of the ARP Address Resolution Protocol
uip/uip_arp.h [code]Macros and definitions for the ARP module
uip/uipopt.h [code]Configuration options for uIP
unix/uip-conf.h [code]An example uIP configuration file
+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/ftv2blank.png b/components/net/uip/doc/html/ftv2blank.png new file mode 100644 index 0000000000..493c3c0b61 Binary files /dev/null and b/components/net/uip/doc/html/ftv2blank.png differ diff --git a/components/net/uip/doc/html/ftv2doc.png b/components/net/uip/doc/html/ftv2doc.png new file mode 100644 index 0000000000..f72999f921 Binary files /dev/null and b/components/net/uip/doc/html/ftv2doc.png differ diff --git a/components/net/uip/doc/html/ftv2folderclosed.png b/components/net/uip/doc/html/ftv2folderclosed.png new file mode 100644 index 0000000000..d6d063440c Binary files /dev/null and b/components/net/uip/doc/html/ftv2folderclosed.png differ diff --git a/components/net/uip/doc/html/ftv2folderopen.png b/components/net/uip/doc/html/ftv2folderopen.png new file mode 100644 index 0000000000..bbe2c913cf Binary files /dev/null and b/components/net/uip/doc/html/ftv2folderopen.png differ diff --git a/components/net/uip/doc/html/ftv2lastnode.png b/components/net/uip/doc/html/ftv2lastnode.png new file mode 100644 index 0000000000..e7b9ba90cb Binary files /dev/null and b/components/net/uip/doc/html/ftv2lastnode.png differ diff --git a/components/net/uip/doc/html/ftv2link.png b/components/net/uip/doc/html/ftv2link.png new file mode 100644 index 0000000000..14f3fed003 Binary files /dev/null and b/components/net/uip/doc/html/ftv2link.png differ diff --git a/components/net/uip/doc/html/ftv2mlastnode.png b/components/net/uip/doc/html/ftv2mlastnode.png new file mode 100644 index 0000000000..09ceb6adb0 Binary files /dev/null and b/components/net/uip/doc/html/ftv2mlastnode.png differ diff --git a/components/net/uip/doc/html/ftv2mnode.png b/components/net/uip/doc/html/ftv2mnode.png new file mode 100644 index 0000000000..3254c05112 Binary files /dev/null and b/components/net/uip/doc/html/ftv2mnode.png differ diff --git a/components/net/uip/doc/html/ftv2node.png b/components/net/uip/doc/html/ftv2node.png new file mode 100644 index 0000000000..c9f06a57f4 Binary files /dev/null and b/components/net/uip/doc/html/ftv2node.png differ diff --git a/components/net/uip/doc/html/ftv2plastnode.png b/components/net/uip/doc/html/ftv2plastnode.png new file mode 100644 index 0000000000..0b07e00913 Binary files /dev/null and b/components/net/uip/doc/html/ftv2plastnode.png differ diff --git a/components/net/uip/doc/html/ftv2pnode.png b/components/net/uip/doc/html/ftv2pnode.png new file mode 100644 index 0000000000..2001b797ba Binary files /dev/null and b/components/net/uip/doc/html/ftv2pnode.png differ diff --git a/components/net/uip/doc/html/ftv2vertline.png b/components/net/uip/doc/html/ftv2vertline.png new file mode 100644 index 0000000000..b330f3a33c Binary files /dev/null and b/components/net/uip/doc/html/ftv2vertline.png differ diff --git a/components/net/uip/doc/html/functions.html b/components/net/uip/doc/html/functions.html new file mode 100644 index 0000000000..ab3e8e7a4d --- /dev/null +++ b/components/net/uip/doc/html/functions.html @@ -0,0 +1,217 @@ + + +uIP 1.0: Data Fields + + + + + + +
+ +
+
+ +
+ +

+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field: +

+

- a -

+

- b -

+

- c -

+

- d -

+

- f -

+

- g -

+

- h -

+

- i -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- v -

+

- w -

+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/functions_vars.html b/components/net/uip/doc/html/functions_vars.html new file mode 100644 index 0000000000..466d78ad72 --- /dev/null +++ b/components/net/uip/doc/html/functions_vars.html @@ -0,0 +1,217 @@ + + +uIP 1.0: Data Fields - Variables + + + + + + +
+ +
+
+ +
+ +

+  +

+

- a -

+

- b -

+

- c -

+

- d -

+

- f -

+

- g -

+

- h -

+

- i -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- v -

+

- w -

+
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals.html b/components/net/uip/doc/html/globals.html new file mode 100644 index 0000000000..31796bf327 --- /dev/null +++ b/components/net/uip/doc/html/globals.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- _ -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x61.html b/components/net/uip/doc/html/globals_0x61.html new file mode 100644 index 0000000000..15a80fa9d4 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x61.html @@ -0,0 +1,64 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- a -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x62.html b/components/net/uip/doc/html/globals_0x62.html new file mode 100644 index 0000000000..a5c8798304 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x62.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- b -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x64.html b/components/net/uip/doc/html/globals_0x64.html new file mode 100644 index 0000000000..b676eee78b --- /dev/null +++ b/components/net/uip/doc/html/globals_0x64.html @@ -0,0 +1,73 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- d -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x65.html b/components/net/uip/doc/html/globals_0x65.html new file mode 100644 index 0000000000..c47f60d475 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x65.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- e -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x66.html b/components/net/uip/doc/html/globals_0x66.html new file mode 100644 index 0000000000..cc2bf8abe6 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x66.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- f -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x68.html b/components/net/uip/doc/html/globals_0x68.html new file mode 100644 index 0000000000..d01ae961aa --- /dev/null +++ b/components/net/uip/doc/html/globals_0x68.html @@ -0,0 +1,73 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- h -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x69.html b/components/net/uip/doc/html/globals_0x69.html new file mode 100644 index 0000000000..fe4560810e --- /dev/null +++ b/components/net/uip/doc/html/globals_0x69.html @@ -0,0 +1,84 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- i -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x6c.html b/components/net/uip/doc/html/globals_0x6c.html new file mode 100644 index 0000000000..eaeb84dda4 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x6c.html @@ -0,0 +1,66 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- l -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x6d.html b/components/net/uip/doc/html/globals_0x6d.html new file mode 100644 index 0000000000..c3f3c121e0 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x6d.html @@ -0,0 +1,69 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- m -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x6e.html b/components/net/uip/doc/html/globals_0x6e.html new file mode 100644 index 0000000000..324dbb39d1 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x6e.html @@ -0,0 +1,63 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- n -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x70.html b/components/net/uip/doc/html/globals_0x70.html new file mode 100644 index 0000000000..cf5972cffd --- /dev/null +++ b/components/net/uip/doc/html/globals_0x70.html @@ -0,0 +1,95 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- p -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x72.html b/components/net/uip/doc/html/globals_0x72.html new file mode 100644 index 0000000000..ba708eb70c --- /dev/null +++ b/components/net/uip/doc/html/globals_0x72.html @@ -0,0 +1,69 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- r -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x73.html b/components/net/uip/doc/html/globals_0x73.html new file mode 100644 index 0000000000..19f8c41be5 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x73.html @@ -0,0 +1,81 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- s -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x74.html b/components/net/uip/doc/html/globals_0x74.html new file mode 100644 index 0000000000..af197ed9c8 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x74.html @@ -0,0 +1,76 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- t -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x75.html b/components/net/uip/doc/html/globals_0x75.html new file mode 100644 index 0000000000..1f487bc9dd --- /dev/null +++ b/components/net/uip/doc/html/globals_0x75.html @@ -0,0 +1,237 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- u -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_0x77.html b/components/net/uip/doc/html/globals_0x77.html new file mode 100644 index 0000000000..8b56378734 --- /dev/null +++ b/components/net/uip/doc/html/globals_0x77.html @@ -0,0 +1,80 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation: +

+

- w -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs.html b/components/net/uip/doc/html/globals_defs.html new file mode 100644 index 0000000000..8bcd1937b1 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- _ -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x61.html b/components/net/uip/doc/html/globals_defs_0x61.html new file mode 100644 index 0000000000..82c84b8eac --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x61.html @@ -0,0 +1,64 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- a -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x62.html b/components/net/uip/doc/html/globals_defs_0x62.html new file mode 100644 index 0000000000..c41b24b12f --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x62.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- b -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x64.html b/components/net/uip/doc/html/globals_defs_0x64.html new file mode 100644 index 0000000000..ff1fcbdb04 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x64.html @@ -0,0 +1,73 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- d -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x65.html b/components/net/uip/doc/html/globals_defs_0x65.html new file mode 100644 index 0000000000..b08aab4547 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x65.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- e -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x66.html b/components/net/uip/doc/html/globals_defs_0x66.html new file mode 100644 index 0000000000..1bd4a6e1c6 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x66.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- f -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x68.html b/components/net/uip/doc/html/globals_defs_0x68.html new file mode 100644 index 0000000000..8c1a772d93 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x68.html @@ -0,0 +1,67 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- h -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x69.html b/components/net/uip/doc/html/globals_defs_0x69.html new file mode 100644 index 0000000000..7478ca0f78 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x69.html @@ -0,0 +1,84 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- i -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x6c.html b/components/net/uip/doc/html/globals_defs_0x6c.html new file mode 100644 index 0000000000..14730df9b4 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x6c.html @@ -0,0 +1,65 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- l -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x6d.html b/components/net/uip/doc/html/globals_defs_0x6d.html new file mode 100644 index 0000000000..ccb1969544 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x6d.html @@ -0,0 +1,66 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- m -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x6e.html b/components/net/uip/doc/html/globals_defs_0x6e.html new file mode 100644 index 0000000000..5244c1d62f --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x6e.html @@ -0,0 +1,63 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- n -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x70.html b/components/net/uip/doc/html/globals_defs_0x70.html new file mode 100644 index 0000000000..abd98a950e --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x70.html @@ -0,0 +1,93 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- p -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x72.html b/components/net/uip/doc/html/globals_defs_0x72.html new file mode 100644 index 0000000000..a80c5cb376 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x72.html @@ -0,0 +1,62 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- r -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x73.html b/components/net/uip/doc/html/globals_defs_0x73.html new file mode 100644 index 0000000000..f334e9ebfe --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x73.html @@ -0,0 +1,70 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- s -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x74.html b/components/net/uip/doc/html/globals_defs_0x74.html new file mode 100644 index 0000000000..8224ebfffb --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x74.html @@ -0,0 +1,72 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- t -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x75.html b/components/net/uip/doc/html/globals_defs_0x75.html new file mode 100644 index 0000000000..8f0ec88a4e --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x75.html @@ -0,0 +1,188 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- u -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_defs_0x77.html b/components/net/uip/doc/html/globals_defs_0x77.html new file mode 100644 index 0000000000..9f19416bb3 --- /dev/null +++ b/components/net/uip/doc/html/globals_defs_0x77.html @@ -0,0 +1,67 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- w -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_func.html b/components/net/uip/doc/html/globals_func.html new file mode 100644 index 0000000000..49f1393d89 --- /dev/null +++ b/components/net/uip/doc/html/globals_func.html @@ -0,0 +1,136 @@ + + +uIP 1.0: Data Fields + + + + + + + +
+ +
+ +

+  +

+

- h -

+

- m -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- w -

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_type.html b/components/net/uip/doc/html/globals_type.html new file mode 100644 index 0000000000..084f32df4f --- /dev/null +++ b/components/net/uip/doc/html/globals_type.html @@ -0,0 +1,47 @@ + + +uIP 1.0: Data Fields + + + + + + + +  +

+

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/globals_vars.html b/components/net/uip/doc/html/globals_vars.html new file mode 100644 index 0000000000..beddb50898 --- /dev/null +++ b/components/net/uip/doc/html/globals_vars.html @@ -0,0 +1,55 @@ + + +uIP 1.0: Data Fields + + + + + + + +  +

+

+
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/hierarchy.html b/components/net/uip/doc/html/hierarchy.html new file mode 100644 index 0000000000..4b3ba986bd --- /dev/null +++ b/components/net/uip/doc/html/hierarchy.html @@ -0,0 +1,50 @@ + + +uIP 1.0: Hierarchical Index + + + + + + +

uIP 1.0 Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically: +
Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/index.hhc b/components/net/uip/doc/html/index.hhc new file mode 100644 index 0000000000..be5830e649 --- /dev/null +++ b/components/net/uip/doc/html/index.hhc @@ -0,0 +1,192 @@ + + + + + +
    +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
        +
      • +
          +
        +
      +
    • +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      +
    • +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      • +
          +
        +
      +
    • +
        +
      +
    • +
        +
      +
    • +
        +
      +
    • +
        +
      +
    • +
        +
      +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
diff --git a/components/net/uip/doc/html/index.hhk b/components/net/uip/doc/html/index.hhk new file mode 100644 index 0000000000..ac1b196f93 --- /dev/null +++ b/components/net/uip/doc/html/index.hhk @@ -0,0 +1,450 @@ + + + + + +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
diff --git a/components/net/uip/doc/html/index.hhp b/components/net/uip/doc/html/index.hhp new file mode 100644 index 0000000000..d7d07254a7 --- /dev/null +++ b/components/net/uip/doc/html/index.hhp @@ -0,0 +1,197 @@ +[OPTIONS] +Compatibility=1.1 +Full-text search=Yes +Contents file=index.hhc +Default Window=main +Default topic=main.html +Index file=index.hhk +Language=0x409 English (United States) +Binary TOC=YES +Create CHI file=YES +Title=uIP 1.0 + +[WINDOWS] +main="uIP 1.0","index.hhc","index.hhk","main.html","main.html",,,,,0x23520,,0x387e,,,,,,,,0 + +[FILES] +main.html +files.html +a00048.html +a00049.html +a00042.html +a00043.html +a00036.html +a00037.html +a00046.html +a00047.html +a00038.html +a00039.html +a00044.html +a00045.html +a00051.html +a00050.html +a00040.html +a00041.html +a00168.html +a00169.html +a00170.html +a00171.html +a00172.html +a00173.html +a00174.html +a00175.html +a00176.html +a00177.html +a00178.html +a00179.html +a00180.html +a00181.html +a00182.html +a00183.html +a00184.html +a00185.html +a00186.html +a00187.html +a00188.html +a00189.html +a00190.html +a00191.html +a00192.html +a00193.html +a00194.html +a00195.html +a00196.html +a00197.html +a00198.html +a00199.html +a00200.html +a00201.html +a00202.html +a00203.html +a00204.html +a00205.html +a00206.html +a00207.html +a00100.html +a00101.html +a00102.html +a00103.html +a00104.html +a00105.html +a00107.html +a00110.html +a00111.html +a00112.html +a00113.html +a00114.html +a00120.html +a00121.html +a00123.html +a00124.html +a00125.html +a00127.html +a00128.html +a00129.html +a00130.html +a00131.html +a00132.html +a00134.html +a00135.html +a00136.html +a00137.html +a00138.html +a00139.html +a00140.html +a00141.html +annotated.html +classes.html +hierarchy.html +functions.html +functions_vars.html +a00077.html +a00078.html +a00079.html +a00080.html +a00081.html +a00082.html +a00083.html +a00084.html +a00085.html +a00086.html +a00087.html +a00088.html +a00089.html +a00090.html +a00091.html +a00092.html +a00093.html +a00094.html +a00095.html +a00096.html +a00097.html +a00142.html +a00143.html +a00144.html +a00145.html +a00146.html +a00147.html +a00148.html +a00149.html +a00150.html +a00151.html +a00152.html +a00153.html +a00154.html +a00155.html +a00156.html +a00157.html +a00158.html +a00159.html +a00160.html +a00161.html +a00162.html +a00163.html +a00164.html +modules.html +examples.html +globals.html +globals_0x61.html +globals_0x62.html +globals_0x64.html +globals_0x65.html +globals_0x66.html +globals_0x68.html +globals_0x69.html +globals_0x6c.html +globals_0x6d.html +globals_0x6e.html +globals_0x70.html +globals_0x72.html +globals_0x73.html +globals_0x74.html +globals_0x75.html +globals_0x77.html +globals_func.html +globals_vars.html +globals_type.html +globals_defs.html +globals_defs_0x61.html +globals_defs_0x62.html +globals_defs_0x64.html +globals_defs_0x65.html +globals_defs_0x66.html +globals_defs_0x68.html +globals_defs_0x69.html +globals_defs_0x6c.html +globals_defs_0x6d.html +globals_defs_0x6e.html +globals_defs_0x70.html +globals_defs_0x72.html +globals_defs_0x73.html +globals_defs_0x74.html +globals_defs_0x75.html +globals_defs_0x77.html +tabs.css +tab_b.gif +tab_l.gif +tab_r.gif diff --git a/components/net/uip/doc/html/index.html b/components/net/uip/doc/html/index.html new file mode 100644 index 0000000000..b4bd6701de --- /dev/null +++ b/components/net/uip/doc/html/index.html @@ -0,0 +1,8 @@ + + +uIP 1.0 + + + + + diff --git a/components/net/uip/doc/html/main.html b/components/net/uip/doc/html/main.html new file mode 100644 index 0000000000..ab1b46ae63 --- /dev/null +++ b/components/net/uip/doc/html/main.html @@ -0,0 +1,421 @@ + + +uIP 1.0: The uIP TCP/IP stack + + + + + +

The uIP TCP/IP stack

+

+

Author:
Adam Dunkels, http://www.sics.se/~adam/
+The uIP TCP/IP stack is intended to make it possible to communicate using the TCP/IP protocol suite even on small 8-bit micro-controllers. Despite being small and simple, uIP do not require their peers to have complex, full-size stacks, but can communicate with peers running a similarly light-weight stack. The code size is on the order of a few kilobytes and RAM usage can be configured to be as low as a few hundred bytes.

+uIP can be found at the uIP web page: http://www.sics.se/~adam/uip/

+

See also:
Application programs

+Compile-time configuration options

+Run-time configuration functions

+Initialization functions

+Device driver interface and variables used by device drivers

+uIP functions called from application programs (see below) and the protosockets API and their underlying protothreads

+

+Introduction

+With the success of the Internet, the TCP/IP protocol suite has become a global standard for communication. TCP/IP is the underlying protocol used for web page transfers, e-mail transmissions, file transfers, and peer-to-peer networking over the Internet. For embedded systems, being able to run native TCP/IP makes it possible to connect the system directly to an intranet or even the global Internet. Embedded devices with full TCP/IP support will be first-class network citizens, thus being able to fully communicate with other hosts in the network.

+Traditional TCP/IP implementations have required far too much resources both in terms of code size and memory usage to be useful in small 8 or 16-bit systems. Code size of a few hundred kilobytes and RAM requirements of several hundreds of kilobytes have made it impossible to fit the full TCP/IP stack into systems with a few tens of kilobytes of RAM and room for less than 100 kilobytes of code.

+The uIP implementation is designed to have only the absolute minimal set of features needed for a full TCP/IP stack. It can only handle a single network interface and contains the IP, ICMP, UDP and TCP protocols. uIP is written in the C programming language.

+Many other TCP/IP implementations for small systems assume that the embedded device always will communicate with a full-scale TCP/IP implementation running on a workstation-class machine. Under this assumption, it is possible to remove certain TCP/IP mechanisms that are very rarely used in such situations. Many of those mechanisms are essential, however, if the embedded device is to communicate with another equally limited device, e.g., when running distributed peer-to-peer services and protocols. uIP is designed to be RFC compliant in order to let the embedded devices to act as first-class network citizens. The uIP TCP/IP implementation that is not tailored for any specific application.

+TCP/IP Communication

+The full TCP/IP suite consists of numerous protocols, ranging from low level protocols such as ARP which translates IP addresses to MAC addresses, to application level protocols such as SMTP that is used to transfer e-mail. The uIP is mostly concerned with the TCP and IP protocols and upper layer protocols will be referred to as "the application". Lower layer protocols are often implemented in hardware or firmware and will be referred to as "the network device" that are controlled by the network device driver.

+TCP provides a reliable byte stream to the upper layer protocols. It breaks the byte stream into appropriately sized segments and each segment is sent in its own IP packet. The IP packets are sent out on the network by the network device driver. If the destination is not on the physically connected network, the IP packet is forwarded onto another network by a router that is situated between the two networks. If the maximum packet size of the other network is smaller than the size of the IP packet, the packet is fragmented into smaller packets by the router. If possible, the size of the TCP segments are chosen so that fragmentation is minimized. The final recipient of the packet will have to reassemble any fragmented IP packets before they can be passed to higher layers.

+The formal requirements for the protocols in the TCP/IP stack is specified in a number of RFC documents published by the Internet Engineering Task Force, IETF. Each of the protocols in the stack is defined in one more RFC documents and RFC1122 collects all requirements and updates the previous RFCs.

+The RFC1122 requirements can be divided into two categories; those that deal with the host to host communication and those that deal with communication between the application and the networking stack. An example of the first kind is "A TCP MUST be able to receive a TCP option in any segment" and an example of the second kind is "There MUST be a mechanism for reporting soft TCP error conditions to the application." A TCP/IP implementation that violates requirements of the first kind may not be able to communicate with other TCP/IP implementations and may even lead to network failures. Violation of the second kind of requirements will only affect the communication within the system and will not affect host-to-host communication.

+In uIP, all RFC requirements that affect host-to-host communication are implemented. However, in order to reduce code size, we have removed certain mechanisms in the interface between the application and the stack, such as the soft error reporting mechanism and dynamically configurable type-of-service bits for TCP connections. Since there are only very few applications that make use of those features they can be removed without loss of generality.

+Main Control Loop

+The uIP stack can be run either as a task in a multitasking system, or as the main program in a singletasking system. In both cases, the main control loop does two things repeatedly:

+

    +
  • Check if a packet has arrived from the network.
  • Check if a periodic timeout has occurred.
+

+If a packet has arrived, the input handler function, uip_input(), should be invoked by the main control loop. The input handler function will never block, but will return at once. When it returns, the stack or the application for which the incoming packet was intended may have produced one or more reply packets which should be sent out. If so, the network device driver should be called to send out these packets.

+Periodic timeouts are used to drive TCP mechanisms that depend on timers, such as delayed acknowledgments, retransmissions and round-trip time estimations. When the main control loop infers that the periodic timer should fire, it should invoke the timer handler function uip_periodic(). Because the TCP/IP stack may perform retransmissions when dealing with a timer event, the network device driver should called to send out the packets that may have been produced.

+Architecture Specific Functions

+uIP requires a few functions to be implemented specifically for the architecture on which uIP is intended to run. These functions should be hand-tuned for the particular architecture, but generic C implementations are given as part of the uIP distribution.

+Checksum Calculation

+The TCP and IP protocols implement a checksum that covers the data and header portions of the TCP and IP packets. Since the calculation of this checksum is made over all bytes in every packet being sent and received it is important that the function that calculates the checksum is efficient. Most often, this means that the checksum calculation must be fine-tuned for the particular architecture on which the uIP stack runs.

+While uIP includes a generic checksum function, it also leaves it open for an architecture specific implementation of the two functions uip_ipchksum() and uip_tcpchksum(). The checksum calculations in those functions can be written in highly optimized assembler rather than generic C code.

+32-bit Arithmetic

+The TCP protocol uses 32-bit sequence numbers, and a TCP implementation will have to do a number of 32-bit additions as part of the normal protocol processing. Since 32-bit arithmetic is not natively available on many of the platforms for which uIP is intended, uIP leaves the 32-bit additions to be implemented by the architecture specific module and does not make use of any 32-bit arithmetic in the main code base.

+While uIP implements a generic 32-bit addition, there is support for having an architecture specific implementation of the uip_add32() function.

+Memory Management

+In the architectures for which uIP is intended, RAM is the most scarce resource. With only a few kilobytes of RAM available for the TCP/IP stack to use, mechanisms used in traditional TCP/IP cannot be directly applied.

+The uIP stack does not use explicit dynamic memory allocation. Instead, it uses a single global buffer for holding packets and has a fixed table for holding connection state. The global packet buffer is large enough to contain one packet of maximum size. When a packet arrives from the network, the device driver places it in the global buffer and calls the TCP/IP stack. If the packet contains data, the TCP/IP stack will notify the corresponding application. Because the data in the buffer will be overwritten by the next incoming packet, the application will either have to act immediately on the data or copy the data into a secondary buffer for later processing. The packet buffer will not be overwritten by new packets before the application has processed the data. Packets that arrive when the application is processing the data must be queued, either by the network device or by the device driver. Most single-chip Ethernet controllers have on-chip buffers that are large enough to contain at least 4 maximum sized Ethernet frames. Devices that are handled by the processor, such as RS-232 ports, can copy incoming bytes to a separate buffer during application processing. If the buffers are full, the incoming packet is dropped. This will cause performance degradation, but only when multiple connections are running in parallel. This is because uIP advertises a very small receiver window, which means that only a single TCP segment will be in the network per connection.

+In uIP, the same global packet buffer that is used for incoming packets is also used for the TCP/IP headers of outgoing data. If the application sends dynamic data, it may use the parts of the global packet buffer that are not used for headers as a temporary storage buffer. To send the data, the application passes a pointer to the data as well as the length of the data to the stack. The TCP/IP headers are written into the global buffer and once the headers have been produced, the device driver sends the headers and the application data out on the network. The data is not queued for retransmissions. Instead, the application will have to reproduce the data if a retransmission is necessary.

+The total amount of memory usage for uIP depends heavily on the applications of the particular device in which the implementations are to be run. The memory configuration determines both the amount of traffic the system should be able to handle and the maximum amount of simultaneous connections. A device that will be sending large e-mails while at the same time running a web server with highly dynamic web pages and multiple simultaneous clients, will require more RAM than a simple Telnet server. It is possible to run the uIP implementation with as little as 200 bytes of RAM, but such a configuration will provide extremely low throughput and will only allow a small number of simultaneous connections.

+Application Program Interface (API)

+The Application Program Interface (API) defines the way the application program interacts with the TCP/IP stack. The most commonly used API for TCP/IP is the BSD socket API which is used in most Unix systems and has heavily influenced the Microsoft Windows WinSock API. Because the socket API uses stop-and-wait semantics, it requires support from an underlying multitasking operating system. Since the overhead of task management, context switching and allocation of stack space for the tasks might be too high in the intended uIP target architectures, the BSD socket interface is not suitable for our purposes.

+uIP provides two APIs to programmers: protosockets, a BSD socket-like API without the overhead of full multi-threading, and a "raw" event-based API that is nore low-level than protosockets but uses less memory.

+

See also:
Protosockets library

+Protothreads

+

+The uIP raw API

+The "raw" uIP API uses an event driven interface where the application is invoked in response to certain events. An application running on top of uIP is implemented as a C function that is called by uIP in response to certain events. uIP calls the application when data is received, when data has been successfully delivered to the other end of the connection, when a new connection has been set up, or when data has to be retransmitted. The application is also periodically polled for new data. The application program provides only one callback function; it is up to the application to deal with mapping different network services to different ports and connections. Because the application is able to act on incoming data and connection requests as soon as the TCP/IP stack receives the packet, low response times can be achieved even in low-end systems.

+uIP is different from other TCP/IP stacks in that it requires help from the application when doing retransmissions. Other TCP/IP stacks buffer the transmitted data in memory until the data is known to be successfully delivered to the remote end of the connection. If the data needs to be retransmitted, the stack takes care of the retransmission without notifying the application. With this approach, the data has to be buffered in memory while waiting for an acknowledgment even if the application might be able to quickly regenerate the data if a retransmission has to be made.

+In order to reduce memory usage, uIP utilizes the fact that the application may be able to regenerate sent data and lets the application take part in retransmissions. uIP does not keep track of packet contents after they have been sent by the device driver, and uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, it calls the application with a flag set indicating that a retransmission is required. The application checks the retransmission flag and produces the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefore the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.

+Application Events

+The application must be implemented as a C function, UIP_APPCALL(), that uIP calls whenever an event occurs. Each event has a corresponding test function that is used to distinguish between different events. The functions are implemented as C macros that will evaluate to either zero or non-zero. Note that certain events can happen in conjunction with each other (i.e., new data can arrive at the same time as data is acknowledged).

+The Connection Pointer

+When the application is called by uIP, the global variable uip_conn is set to point to the uip_conn structure for the connection that currently is handled, and is called the "current connection". The fields in the uip_conn structure for the current connection can be used, e.g., to distinguish between different services, or to check to which IP address the connection is connected. One typical use would be to inspect the uip_conn->lport (the local TCP port number) to decide which service the connection should provide. For instance, an application might decide to act as an HTTP server if the value of uip_conn->lport is equal to 80 and act as a TELNET server if the value is 23.

+Receiving Data

+If the uIP test function uip_newdata() is non-zero, the remote host of the connection has sent new data. The uip_appdata pointer point to the actual data. The size of the data is obtained through the uIP function uip_datalen(). The data is not buffered by uIP, but will be overwritten after the application function returns, and the application will therefor have to either act directly on the incoming data, or by itself copy the incoming data into a buffer for later processing.

+Sending Data

+When sending data, uIP adjusts the length of the data sent by the application according to the available buffer space and the current TCP window advertised by the receiver. The amount of buffer space is dictated by the memory configuration. It is therefore possible that all data sent from the application does not arrive at the receiver, and the application may use the uip_mss() function to see how much data that actually will be sent by the stack.

+The application sends data by using the uIP function uip_send(). The uip_send() function takes two arguments; a pointer to the data to be sent and the length of the data. If the application needs RAM space for producing the actual data that should be sent, the packet buffer (pointed to by the uip_appdata pointer) can be used for this purpose.

+The application can send only one chunk of data at a time on a connection and it is not possible to call uip_send() more than once per application invocation; only the data from the last call will be sent.

+Retransmitting Data

+Retransmissions are driven by the periodic TCP timer. Every time the periodic timer is invoked, the retransmission timer for each connection is decremented. If the timer reaches zero, a retransmission should be made. As uIP does not keep track of packet contents after they have been sent by the device driver, uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, the application function is called with the uip_rexmit() flag set, indicating that a retransmission is required.

+The application must check the uip_rexmit() flag and produce the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefor, the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.

+Closing Connections

+The application closes the current connection by calling the uip_close() during an application call. This will cause the connection to be cleanly closed. In order to indicate a fatal error, the application might want to abort the connection and does so by calling the uip_abort() function.

+If the connection has been closed by the remote end, the test function uip_closed() is true. The application may then do any necessary cleanups.

+Reporting Errors

+There are two fatal errors that can happen to a connection, either that the connection was aborted by the remote host, or that the connection retransmitted the last data too many times and has been aborted. uIP reports this by calling the application function. The application can use the two test functions uip_aborted() and uip_timedout() to test for those error conditions.

+Polling

+When a connection is idle, uIP polls the application every time the periodic timer fires. The application uses the test function uip_poll() to check if it is being polled by uIP.

+The polling event has two purposes. The first is to let the application periodically know that a connection is idle, which allows the application to close connections that have been idle for too long. The other purpose is to let the application send new data that has been produced. The application can only send data when invoked by uIP, and therefore the poll event is the only way to send data on an otherwise idle connection.

+Listening Ports

+uIP maintains a list of listening TCP ports. A new port is opened for listening with the uip_listen() function. When a connection request arrives on a listening port, uIP creates a new connection and calls the application function. The test function uip_connected() is true if the application was invoked because a new connection was created.

+The application can check the lport field in the uip_conn structure to check to which port the new connection was connected.

+Opening Connections

+New connections can be opened from within uIP by the function uip_connect(). This function allocates a new connection and sets a flag in the connection state which will open a TCP connection to the specified IP address and port the next time the connection is polled by uIP. The uip_connect() function returns a pointer to the uip_conn structure for the new connection. If there are no free connection slots, the function returns NULL.

+The function uip_ipaddr() may be used to pack an IP address into the two element 16-bit array used by uIP to represent IP addresses.

+Two examples of usage are shown below. The first example shows how to open a connection to TCP port 8080 of the remote end of the current connection. If there are not enough TCP connection slots to allow a new connection to be opened, the uip_connect() function returns NULL and the current connection is aborted by uip_abort().

+

void connect_example1_app(void) {
+   if(uip_connect(uip_conn->ripaddr, HTONS(8080)) == NULL) {
+      uip_abort();
+   }
+}   
+

+The second example shows how to open a new connection to a specific IP address. No error checks are made in this example.

+

void connect_example2(void) {
+   u16_t ipaddr[2];
+
+   uip_ipaddr(ipaddr, 192,168,0,1);
+   uip_connect(ipaddr, HTONS(8080));
+}
+

+Examples

+This section presents a number of very simple uIP applications. The uIP code distribution contains several more complex applications.

+A Very Simple Application

+This first example shows a very simple application. The application listens for incoming connections on port 1234. When a connection has been established, the application replies to all data sent to it by saying "ok"

+The implementation of this application is shown below. The application is initialized with the function called example1_init() and the uIP callback function is called example1_app(). For this application, the configuration variable UIP_APPCALL should be defined to be example1_app().

+

void example1_init(void) {
+   uip_listen(HTONS(1234));
+}
+
+void example1_app(void) {
+   if(uip_newdata() || uip_rexmit()) {
+      uip_send("ok\n", 3);
+   }
+}
+

+The initialization function calls the uIP function uip_listen() to register a listening port. The actual application function example1_app() uses the test functions uip_newdata() and uip_rexmit() to determine why it was called. If the application was called because the remote end has sent it data, it responds with an "ok". If the application function was called because data was lost in the network and has to be retransmitted, it also sends an "ok". Note that this example actually shows a complete uIP application. It is not required for an application to deal with all types of events such as uip_connected() or uip_timedout().

+A More Advanced Application

+This second example is slightly more advanced than the previous one, and shows how the application state field in the uip_conn structure is used.

+This application is similar to the first application in that it listens to a port for incoming connections and responds to data sent to it with a single "ok". The big difference is that this application prints out a welcoming "Welcome!" message when the connection has been established.

+This seemingly small change of operation makes a big difference in how the application is implemented. The reason for the increase in complexity is that if data should be lost in the network, the application must know what data to retransmit. If the "Welcome!" message was lost, the application must retransmit the welcome and if one of the "ok" messages is lost, the application must send a new "ok".

+The application knows that as long as the "Welcome!" message has not been acknowledged by the remote host, it might have been dropped in the network. But once the remote host has sent an acknowledgment back, the application can be sure that the welcome has been received and knows that any lost data must be an "ok" message. Thus the application can be in either of two states: either in the WELCOME-SENT state where the "Welcome!" has been sent but not acknowledged, or in the WELCOME-ACKED state where the "Welcome!" has been acknowledged.

+When a remote host connects to the application, the application sends the "Welcome!" message and sets it's state to WELCOME-SENT. When the welcome message is acknowledged, the application moves to the WELCOME-ACKED state. If the application receives any new data from the remote host, it responds by sending an "ok" back.

+If the application is requested to retransmit the last message, it looks at in which state the application is. If the application is in the WELCOME-SENT state, it sends a "Welcome!" message since it knows that the previous welcome message hasn't been acknowledged. If the application is in the WELCOME-ACKED state, it knows that the last message was an "ok" message and sends such a message.

+The implementation of this application is seen below. This configuration settings for the application is follows after its implementation.

+

struct example2_state {
+   enum {WELCOME_SENT, WELCOME_ACKED} state;
+};
+
+void example2_init(void) {
+   uip_listen(HTONS(2345));
+}
+
+void example2_app(void) {
+   struct example2_state *s;
+
+   s = (struct example2_state *)uip_conn->appstate;
+   
+   if(uip_connected()) {
+      s->state = WELCOME_SENT;
+      uip_send("Welcome!\n", 9);
+      return;
+   } 
+
+   if(uip_acked() && s->state == WELCOME_SENT) {
+      s->state = WELCOME_ACKED;
+   }
+
+   if(uip_newdata()) {
+      uip_send("ok\n", 3);
+   }
+
+   if(uip_rexmit()) {
+      switch(s->state) {
+      case WELCOME_SENT:
+         uip_send("Welcome!\n", 9);
+         break;
+      case WELCOME_ACKED:
+         uip_send("ok\n", 3);
+         break;
+      }
+   }
+}
+

+The configuration for the application:

+

#define UIP_APPCALL       example2_app
+#define UIP_APPSTATE_SIZE sizeof(struct example2_state)
+

+Differentiating Between Applications

+If the system should run multiple applications, one technique to differentiate between them is to use the TCP port number of either the remote end or the local end of the connection. The example below shows how the two examples above can be combined into one application.

+

void example3_init(void) {
+   example1_init();
+   example2_init();   
+}
+
+void example3_app(void) {
+   switch(uip_conn->lport) {
+   case HTONS(1234):
+      example1_app();
+      break;
+   case HTONS(2345):
+      example2_app();
+      break;
+   }
+}
+

+Utilizing TCP Flow Control

+This example shows a simple application that connects to a host, sends an HTTP request for a file and downloads it to a slow device such a disk drive. This shows how to use the flow control functions of uIP.

+

void example4_init(void) {
+   u16_t ipaddr[2];
+   uip_ipaddr(ipaddr, 192,168,0,1);
+   uip_connect(ipaddr, HTONS(80));
+}
+
+void example4_app(void) {
+   if(uip_connected() || uip_rexmit()) {
+      uip_send("GET /file HTTP/1.0\r\nServer:192.186.0.1\r\n\r\n",
+               48);
+      return;
+   }
+
+   if(uip_newdata()) {
+      device_enqueue(uip_appdata, uip_datalen());
+      if(device_queue_full()) {
+         uip_stop();
+      }
+   }
+
+   if(uip_poll() && uip_stopped()) {
+      if(!device_queue_full()) {
+         uip_restart();
+      }
+   }
+}
+

+When the connection has been established, an HTTP request is sent to the server. Since this is the only data that is sent, the application knows that if it needs to retransmit any data, it is that request that should be retransmitted. It is therefore possible to combine these two events as is done in the example.

+When the application receives new data from the remote host, it sends this data to the device by using the function device_enqueue(). It is important to note that this example assumes that this function copies the data into its own buffers. The data in the uip_appdata buffer will be overwritten by the next incoming packet.

+If the device's queue is full, the application stops the data from the remote host by calling the uIP function uip_stop(). The application can then be sure that it will not receive any new data until uip_restart() is called. The application polling event is used to check if the device's queue is no longer full and if so, the data flow is restarted with uip_restart().

+A Simple Web Server

+This example shows a very simple file server application that listens to two ports and uses the port number to determine which file to send. If the files are properly formatted, this simple application can be used as a web server with static pages. The implementation follows.

+

struct example5_state {
+   char *dataptr;
+   unsigned int dataleft;
+};
+
+void example5_init(void) {
+   uip_listen(HTONS(80));
+   uip_listen(HTONS(81));
+}
+
+void example5_app(void) {
+   struct example5_state *s;
+   s = (struct example5_state)uip_conn->appstate;
+   
+   if(uip_connected()) {
+      switch(uip_conn->lport) {
+      case HTONS(80):
+         s->dataptr = data_port_80;
+         s->dataleft = datalen_port_80;
+         break;
+      case HTONS(81):
+         s->dataptr = data_port_81;
+         s->dataleft = datalen_port_81;
+         break;
+      }
+      uip_send(s->dataptr, s->dataleft);
+      return;      
+   }
+
+   if(uip_acked()) {
+      if(s->dataleft < uip_mss()) {
+         uip_close();
+         return;
+      }
+      s->dataptr += uip_conn->len;
+      s->dataleft -= uip_conn->len;
+      uip_send(s->dataptr, s->dataleft);      
+   }
+}
+

+The application state consists of a pointer to the data that should be sent and the size of the data that is left to send. When a remote host connects to the application, the local port number is used to determine which file to send. The first chunk of data is sent using uip_send(). uIP makes sure that no more than MSS bytes of data is actually sent, even though s->dataleft may be larger than the MSS.

+The application is driven by incoming acknowledgments. When data has been acknowledged, new data can be sent. If there is no more data to send, the connection is closed using uip_close().

+Structured Application Program Design

+When writing larger programs using uIP it is useful to be able to utilize the uIP API in a structured way. The following example provides a structured design that has showed itself to be useful for writing larger protocol implementations than the previous examples showed here. The program is divided into an uIP event handler function that calls seven application handler functions that process new data, act on acknowledged data, send new data, deal with connection establishment or closure events and handle errors. The functions are called newdata(), acked(), senddata(), connected(), closed(), aborted(), and timedout(), and needs to be written specifically for the protocol that is being implemented.

+The uIP event handler function is shown below.

+

void example6_app(void) {
+  if(uip_aborted()) {
+    aborted();
+  }
+  if(uip_timedout()) {
+    timedout();
+  }
+  if(uip_closed()) {
+    closed();
+  }
+  if(uip_connected()) {
+    connected();
+  }
+  if(uip_acked()) {
+    acked();
+  }
+  if(uip_newdata()) {
+    newdata();
+  }
+  if(uip_rexmit() ||
+     uip_newdata() ||
+     uip_acked() ||
+     uip_connected() ||
+     uip_poll()) {
+    senddata();
+  }
+}
+

+The function starts with dealing with any error conditions that might have happened by checking if uip_aborted() or uip_timedout() are true. If so, the appropriate error function is called. Also, if the connection has been closed, the closed() function is called to the it deal with the event.

+Next, the function checks if the connection has just been established by checking if uip_connected() is true. The connected() function is called and is supposed to do whatever needs to be done when the connection is established, such as intializing the application state for the connection. Since it may be the case that data should be sent out, the senddata() function is called to deal with the outgoing data.

+The following very simple application serves as an example of how the application handler functions might look. This application simply waits for any data to arrive on the connection, and responds to the data by sending out the message "Hello world!". To illustrate how to develop an application state machine, this message is sent in two parts, first the "Hello" part and then the "world!" part.

+

#define STATE_WAITING 0
+#define STATE_HELLO   1
+#define STATE_WORLD   2
+
+struct example6_state {
+  u8_t state;
+  char *textptr;
+  int  textlen;
+};
+
+static void aborted(void) {}
+static void timedout(void) {}
+static void closed(void) {}
+
+static void connected(void) {
+  struct example6_state *s = (struct example6_state *)uip_conn->appstate;
+
+  s->state   = STATE_WAITING;
+  s->textlen = 0;
+}
+
+static void newdata(void) {
+  struct example6_state *s = (struct example6_state *)uip_conn->appstate;
+
+  if(s->state == STATE_WAITING) {
+    s->state   = STATE_HELLO;
+    s->textptr = "Hello ";
+    s->textlen = 6;
+  }
+}
+
+static void acked(void) {
+  struct example6_state *s = (struct example6_state *)uip_conn->appstate;
+  
+  s->textlen -= uip_conn->len;
+  s->textptr += uip_conn->len;
+  if(s->textlen == 0) {
+    switch(s->state) {
+    case STATE_HELLO:
+      s->state   = STATE_WORLD;
+      s->textptr = "world!\n";
+      s->textlen = 7;
+      break;
+    case STATE_WORLD:
+      uip_close();
+      break;
+    }
+  }
+}
+
+static void senddata(void) {
+  struct example6_state *s = (struct example6_state *)uip_conn->appstate;
+
+  if(s->textlen > 0) {
+    uip_send(s->textptr, s->textlen);
+  }
+}
+

+The application state consists of a "state" variable, a "textptr" pointer to a text message and the "textlen" length of the text message. The "state" variable can be either "STATE_WAITING", meaning that the application is waiting for data to arrive from the network, "STATE_HELLO", in which the application is sending the "Hello" part of the message, or "STATE_WORLD", in which the application is sending the "world!" message.

+The application does not handle errors or connection closing events, and therefore the aborted(), timedout() and closed() functions are implemented as empty functions.

+The connected() function will be called when a connection has been established, and in this case sets the "state" variable to be "STATE_WAITING" and the "textlen" variable to be zero, indicating that there is no message to be sent out.

+When new data arrives from the network, the newdata() function will be called by the event handler function. The newdata() function will check if the connection is in the "STATE_WAITING" state, and if so switches to the "STATE_HELLO" state and registers a 6 byte long "Hello " message with the connection. This message will later be sent out by the senddata() function.

+The acked() function is called whenever data that previously was sent has been acknowleged by the receiving host. This acked() function first reduces the amount of data that is left to send, by subtracting the length of the previously sent data (obtained from "uip_conn->len") from the "textlen" variable, and also adjusts the "textptr" pointer accordingly. It then checks if the "textlen" variable now is zero, which indicates that all data now has been successfully received, and if so changes application state. If the application was in the "STATE_HELLO" state, it switches state to "STATE_WORLD" and sets up a 7 byte "world!\n" message to be sent. If the application was in the "STATE_WORLD" state, it closes the connection.

+Finally, the senddata() function takes care of actually sending the data that is to be sent. It is called by the event handler function when new data has been received, when data has been acknowledged, when a new connection has been established, when the connection is polled because of inactivity, or when a retransmission should be made. The purpose of the senddata() function is to optionally format the data that is to be sent, and to call the uip_send() function to actually send out the data. In this particular example, the function simply calls uip_send() with the appropriate arguments if data is to be sent, after checking if data should be sent out or not as indicated by the "textlen" variable.

+It is important to note that the senddata() function never should affect the application state; this should only be done in the acked() and newdata() functions.

+Protocol Implementations

+The protocols in the TCP/IP protocol suite are designed in a layered fashion where each protocol performs a specific function and the interactions between the protocol layers are strictly defined. While the layered approach is a good way to design protocols, it is not always the best way to implement them. In uIP, the protocol implementations are tightly coupled in order to save code space.

+This section gives detailed information on the specific protocol implementations in uIP.

+IP --- Internet Protocol

+When incoming packets are processed by uIP, the IP layer is the first protocol that examines the packet. The IP layer does a few simple checks such as if the destination IP address of the incoming packet matches any of the local IP address and verifies the IP header checksum. Since there are no IP options that are strictly required and because they are very uncommon, any IP options in received packets are dropped.

+IP Fragment Reassembly

+IP fragment reassembly is implemented using a separate buffer that holds the packet to be reassembled. An incoming fragment is copied into the right place in the buffer and a bit map is used to keep track of which fragments have been received. Because the first byte of an IP fragment is aligned on an 8-byte boundary, the bit map requires a small amount of memory. When all fragments have been reassembled, the resulting IP packet is passed to the transport layer. If all fragments have not been received within a specified time frame, the packet is dropped.

+The current implementation only has a single buffer for holding packets to be reassembled, and therefore does not support simultaneous reassembly of more than one packet. Since fragmented packets are uncommon, this ought to be a reasonable decision. Extending the implementation to support multiple buffers would be straightforward, however.

+Broadcasts and Multicasts

+IP has the ability to broadcast and multicast packets on the local network. Such packets are addressed to special broadcast and multicast addresses. Broadcast is used heavily in many UDP based protocols such as the Microsoft Windows file-sharing SMB protocol. Multicast is primarily used in protocols used for multimedia distribution such as RTP. TCP is a point-to-point protocol and does not use broadcast or multicast packets. uIP current supports broadcast packets as well as sending multicast packets. Joining multicast groups (IGMP) and receiving non-local multicast packets is not currently supported.

+ICMP --- Internet Control Message Protocol

+The ICMP protocol is used for reporting soft error conditions and for querying host parameters. Its main use is, however, the echo mechanism which is used by the "ping" program.

+The ICMP implementation in uIP is very simple as itis restricted to only implement ICMP echo messages. Replies to echo messages are constructed by simply swapping the source and destination IP addresses of incoming echo requests and rewriting the ICMP header with the Echo-Reply message type. The ICMP checksum is adjusted using standard techniques (see RFC1624).

+Since only the ICMP echo message is implemented, there is no support for Path MTU discovery or ICMP redirect messages. Neither of these is strictly required for interoperability; they are performance enhancement mechanisms.

+TCP --- Transmission Control Protocol

+The TCP implementation in uIP is driven by incoming packets and timer events. Incoming packets are parsed by TCP and if the packet contains data that is to be delivered to the application, the application is invoked by the means of the application function call. If the incoming packet acknowledges previously sent data, the connection state is updated and the application is informed, allowing it to send out new data.

+Listening Connections

+TCP allows a connection to listen for incoming connection requests. In uIP, a listening connection is identified by the 16-bit port number and incoming connection requests are checked against the list of listening connections. This list of listening connections is dynamic and can be altered by the applications in the system.

+Sliding Window

+Most TCP implementations use a sliding window mechanism for sending data. Multiple data segments are sent in succession without waiting for an acknowledgment for each segment.

+The sliding window algorithm uses a lot of 32-bit operations and because 32-bit arithmetic is fairly expensive on most 8-bit CPUs, uIP does not implement it. Also, uIP does not buffer sent packets and a sliding window implementation that does not buffer sent packets will have to be supported by a complex application layer. Instead, uIP allows only a single TCP segment per connection to be unacknowledged at any given time.

+It is important to note that even though most TCP implementations use the sliding window algorithm, it is not required by the TCP specifications. Removing the sliding window mechanism does not affect interoperability in any way.

+Round-Trip Time Estimation

+TCP continuously estimates the current Round-Trip Time (RTT) of every active connection in order to find a suitable value for the retransmission time-out.

+The RTT estimation in uIP is implemented using TCP's periodic timer. Each time the periodic timer fires, it increments a counter for each connection that has unacknowledged data in the network. When an acknowledgment is received, the current value of the counter is used as a sample of the RTT. The sample is used together with Van Jacobson's standard TCP RTT estimation function to calculate an estimate of the RTT. Karn's algorithm is used to ensure that retransmissions do not skew the estimates.

+Retransmissions

+Retransmissions are driven by the periodic TCP timer. Every time the periodic timer is invoked, the retransmission timer for each connection is decremented. If the timer reaches zero, a retransmission should be made.

+As uIP does not keep track of packet contents after they have been sent by the device driver, uIP requires that the application takes an active part in performing the retransmission. When uIP decides that a segment should be retransmitted, it calls the application with a flag set indicating that a retransmission is required. The application checks the retransmission flag and produces the same data that was previously sent. From the application's standpoint, performing a retransmission is not different from how the data originally was sent. Therefore the application can be written in such a way that the same code is used both for sending data and retransmitting data. Also, it is important to note that even though the actual retransmission operation is carried out by the application, it is the responsibility of the stack to know when the retransmission should be made. Thus the complexity of the application does not necessarily increase because it takes an active part in doing retransmissions.

+Flow Control

+The purpose of TCP's flow control mechanisms is to allow communication between hosts with wildly varying memory dimensions. In each TCP segment, the sender of the segment indicates its available buffer space. A TCP sender must not send more data than the buffer space indicated by the receiver.

+In uIP, the application cannot send more data than the receiving host can buffer. And application cannot send more data than the amount of bytes it is allowed to send by the receiving host. If the remote host cannot accept any data at all, the stack initiates the zero window probing mechanism.

+Congestion Control

+The congestion control mechanisms limit the number of simultaneous TCP segments in the network. The algorithms used for congestion control are designed to be simple to implement and require only a few lines of code.

+Since uIP only handles one in-flight TCP segment per connection, the amount of simultaneous segments cannot be further limited, thus the congestion control mechanisms are not needed.

+Urgent Data

+TCP's urgent data mechanism provides an application-to-application notification mechanism, which can be used by an application to mark parts of the data stream as being more urgent than the normal stream. It is up to the receiving application to interpret the meaning of the urgent data.

+In many TCP implementations, including the BSD implementation, the urgent data feature increases the complexity of the implementation because it requires an asynchronous notification mechanism in an otherwise synchronous API. As uIP already use an asynchronous event based API, the implementation of the urgent data feature does not lead to increased complexity.

+Performance

+In TCP/IP implementations for high-end systems, processing time is dominated by the checksum calculation loop, the operation of copying packet data and context switching. Operating systems for high-end systems often have multiple protection domains for protecting kernel data from user processes and user processes from each other. Because the TCP/IP stack is run in the kernel, data has to be copied between the kernel space and the address space of the user processes and a context switch has to be performed once the data has been copied. Performance can be enhanced by combining the copy operation with the checksum calculation. Because high-end systems usually have numerous active connections, packet demultiplexing is also an expensive operation.

+A small embedded device does not have the necessary processing power to have multiple protection domains and the power to run a multitasking operating system. Therefore there is no need to copy data between the TCP/IP stack and the application program. With an event based API there is no context switch between the TCP/IP stack and the applications.

+In such limited systems, the TCP/IP processing overhead is dominated by the copying of packet data from the network device to host memory, and checksum calculation. Apart from the checksum calculation and copying, the TCP processing done for an incoming packet involves only updating a few counters and flags before handing the data over to the application. Thus an estimate of the CPU overhead of our TCP/IP implementations can be obtained by calculating the amount of CPU cycles needed for the checksum calculation and copying of a maximum sized packet.

+The Impact of Delayed Acknowledgments

+Most TCP receivers implement the delayed acknowledgment algorithm for reducing the number of pure acknowledgment packets sent. A TCP receiver using this algorithm will only send acknowledgments for every other received segment. If no segment is received within a specific time-frame, an acknowledgment is sent. The time-frame can be as high as 500 ms but typically is 200 ms.

+A TCP sender such as uIP that only handles a single outstanding TCP segment will interact poorly with the delayed acknowledgment algorithm. Because the receiver only receives a single segment at a time, it will wait as much as 500 ms before an acknowledgment is sent. This means that the maximum possible throughput is severely limited by the 500 ms idle time.

+Thus the maximum throughput equation when sending data from uIP will be $p = s / (t + t_d)$ where $s$ is the segment size and $t_d$ is the delayed acknowledgment timeout, which typically is between 200 and 500 ms. With a segment size of 1000 bytes, a round-trip time of 40 ms and a delayed acknowledgment timeout of 200 ms, the maximum throughput will be 4166 bytes per second. With the delayed acknowledgment algorithm disabled at the receiver, the maximum throughput would be 25000 bytes per second.

+It should be noted, however, that since small systems running uIP are not very likely to have large amounts of data to send, the delayed acknowledgmen t throughput degradation of uIP need not be very severe. Small amounts of data sent by such a system will not span more than a single TCP segment, and would therefore not be affected by the throughput degradation anyway.

+The maximum throughput when uIP acts as a receiver is not affected by the delayed acknowledgment throughput degradation.


Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/modules.html b/components/net/uip/doc/html/modules.html new file mode 100644 index 0000000000..254612a4d5 --- /dev/null +++ b/components/net/uip/doc/html/modules.html @@ -0,0 +1,51 @@ + + +uIP 1.0: Module Index + + + + + +

uIP 1.0 Modules

Here is a list of all modules: +
Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by  + +doxygen 1.4.6
+ + diff --git a/components/net/uip/doc/html/tab_b.gif b/components/net/uip/doc/html/tab_b.gif new file mode 100644 index 0000000000..0d623483ff Binary files /dev/null and b/components/net/uip/doc/html/tab_b.gif differ diff --git a/components/net/uip/doc/html/tab_l.gif b/components/net/uip/doc/html/tab_l.gif new file mode 100644 index 0000000000..9b1e6337c9 Binary files /dev/null and b/components/net/uip/doc/html/tab_l.gif differ diff --git a/components/net/uip/doc/html/tab_r.gif b/components/net/uip/doc/html/tab_r.gif new file mode 100644 index 0000000000..ce9dd9f533 Binary files /dev/null and b/components/net/uip/doc/html/tab_r.gif differ diff --git a/components/net/uip/doc/html/tabs.css b/components/net/uip/doc/html/tabs.css new file mode 100644 index 0000000000..a61552a67a --- /dev/null +++ b/components/net/uip/doc/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI#current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI#current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.nav +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +} diff --git a/components/net/uip/doc/html/tree.html b/components/net/uip/doc/html/tree.html new file mode 100644 index 0000000000..ba4787fc69 --- /dev/null +++ b/components/net/uip/doc/html/tree.html @@ -0,0 +1,223 @@ + + + + + + + TreeView + + + + + +
+

uIP 1.0

+
+

o*The uIP TCP/IP stack

+

o+File List

+ +

o+Data Structures

+ +

o+Class Hierarchy

+ +

o*Data Fields

+

o+Modules

+ +

o+Examples

+ +

\*Globals

+
+
+ + diff --git a/components/net/uip/doc/mobisys2003.pdf b/components/net/uip/doc/mobisys2003.pdf new file mode 100644 index 0000000000..f5e7425d19 Binary files /dev/null and b/components/net/uip/doc/mobisys2003.pdf differ diff --git a/components/net/uip/doc/pt-doc.txt b/components/net/uip/doc/pt-doc.txt new file mode 100644 index 0000000000..b26c651cfa --- /dev/null +++ b/components/net/uip/doc/pt-doc.txt @@ -0,0 +1,173 @@ +/** +\defgroup pt Protothreads + +Protothreads are a type of lightweight stackless threads designed for +severly memory constrained systems such as deeply embedded systems or +sensor network nodes. Protothreads provides linear code execution for +event-driven systems implemented in C. Protothreads can be used with +or without an RTOS. + +Protothreads are a extremely lightweight, stackless type of threads +that provides a blocking context on top of an event-driven system, +without the overhead of per-thread stacks. The purpose of protothreads +is to implement sequential flow of control without complex state +machines or full multi-threading. Protothreads provides conditional +blocking inside C functions. + +The advantage of protothreads over a purely event-driven approach is +that protothreads provides a sequential code structure that allows for +blocking functions. In purely event-driven systems, blocking must be +implemented by manually breaking the function into two pieces - one +for the piece of code before the blocking call and one for the code +after the blocking call. This makes it hard to use control structures +such as if() conditionals and while() loops. + +The advantage of protothreads over ordinary threads is that a +protothread do not require a separate stack. In memory constrained +systems, the overhead of allocating multiple stacks can consume large +amounts of the available memory. In contrast, each protothread only +requires between two and twelve bytes of state, depending on the +architecture. + +\note Because protothreads do not save the stack context across a +blocking call, local variables are not preserved when the +protothread blocks. This means that local variables should be used +with utmost care - if in doubt, do not use local variables inside a +protothread! + + +Main features: + + - No machine specific code - the protothreads library is pure C + + - Does not use error-prone functions such as longjmp() + + - Very small RAM overhead - only two bytes per protothread + + - Can be used with or without an OS + + - Provides blocking wait without full multi-threading or + stack-switching + +Examples applications: + + - Memory constrained systems + + - Event-driven protocol stacks + + - Deeply embedded systems + + - Sensor network nodes + +The protothreads API consists of four basic operations: +initialization: PT_INIT(), execution: PT_BEGIN(), conditional +blocking: PT_WAIT_UNTIL() and exit: PT_END(). On top of these, two +convenience functions are built: reversed condition blocking: +PT_WAIT_WHILE() and protothread blocking: PT_WAIT_THREAD(). + +\sa \ref pt "Protothreads API documentation" + +The protothreads library is released under a BSD-style license that +allows for both non-commercial and commercial usage. The only +requirement is that credit is given. + +\section authors Authors + +The protothreads library was written by Adam Dunkels +with support from Oliver Schmidt . + +\section pt-desc Protothreads + +Protothreads are a extremely lightweight, stackless threads that +provides a blocking context on top of an event-driven system, without +the overhead of per-thread stacks. The purpose of protothreads is to +implement sequential flow of control without using complex state +machines or full multi-threading. Protothreads provides conditional +blocking inside a C function. + +In memory constrained systems, such as deeply embedded systems, +traditional multi-threading may have a too large memory overhead. In +traditional multi-threading, each thread requires its own stack, that +typically is over-provisioned. The stacks may use large parts of the +available memory. + +The main advantage of protothreads over ordinary threads is that +protothreads are very lightweight: a protothread does not require its +own stack. Rather, all protothreads run on the same stack and context +switching is done by stack rewinding. This is advantageous in memory +constrained systems, where a stack for a thread might use a large part +of the available memory. A protothread only requires only two bytes of +memory per protothread. Moreover, protothreads are implemented in pure +C and do not require any machine-specific assembler code. + +A protothread runs within a single C function and cannot span over +other functions. A protothread may call normal C functions, but cannot +block inside a called function. Blocking inside nested function calls +is instead made by spawning a separate protothread for each +potentially blocking function. The advantage of this approach is that +blocking is explicit: the programmer knows exactly which functions +that block that which functions the never blocks. + +Protothreads are similar to asymmetric co-routines. The main +difference is that co-routines uses a separate stack for each +co-routine, whereas protothreads are stackless. The most similar +mechanism to protothreads are Python generators. These are also +stackless constructs, but have a different purpose. Protothreads +provides blocking contexts inside a C function, whereas Python +generators provide multiple exit points from a generator function. + +\section pt-autovars Local variables + +\note +Because protothreads do not save the stack context across a blocking +call, local variables are not preserved when the protothread +blocks. This means that local variables should be used with utmost +care - if in doubt, do not use local variables inside a protothread! + +\section pt-scheduling Scheduling + +A protothread is driven by repeated calls to the function in which the +protothread is running. Each time the function is called, the +protothread will run until it blocks or exits. Thus the scheduling of +protothreads is done by the application that uses protothreads. + +\section pt-impl Implementation + +Protothreads are implemented using \ref lc "local continuations". A +local continuation represents the current state of execution at a +particular place in the program, but does not provide any call history +or local variables. A local continuation can be set in a specific +function to capture the state of the function. After a local +continuation has been set can be resumed in order to restore the state +of the function at the point where the local continuation was set. + + +Local continuations can be implemented in a variety of ways: + + -# by using machine specific assembler code, + -# by using standard C constructs, or + -# by using compiler extensions. + +The first way works by saving and restoring the processor state, +except for stack pointers, and requires between 16 and 32 bytes of +memory per protothread. The exact amount of memory required depends on +the architecture. + +The standard C implementation requires only two bytes of state per +protothread and utilizes the C switch() statement in a non-obvious way +that is similar to Duff's device. This implementation does, however, +impose a slight restriction to the code that uses protothreads in that +the code cannot use switch() statements itself. + +Certain compilers has C extensions that can be used to implement +protothreads. GCC supports label pointers that can be used for this +purpose. With this implementation, protothreads require 4 bytes of RAM +per protothread. + +@{ + + +*/ + +/** @} */ + diff --git a/components/net/uip/doc/sicslogo.pdf b/components/net/uip/doc/sicslogo.pdf new file mode 100644 index 0000000000..239a1bff68 Binary files /dev/null and b/components/net/uip/doc/sicslogo.pdf differ diff --git a/components/net/uip/doc/uip-code-style.c b/components/net/uip/doc/uip-code-style.c new file mode 100644 index 0000000000..b62c5b1008 --- /dev/null +++ b/components/net/uip/doc/uip-code-style.c @@ -0,0 +1,118 @@ +/* This is the official code style of uIP. */ + +/** + * \defgroup codestyle Coding style + * + * This is how a Doxygen module is documented - start with a \defgroup + * Doxygen keyword at the beginning of the file to define a module, + * and use the \addtogroup Doxygen keyword in all other files that + * belong to the same module. Typically, the \defgroup is placed in + * the .h file and \addtogroup in the .c file. + * + * @{ + */ + +/** + * \file + * A brief description of what this file is. + * \author + * Adam Dunkels + * + * Every file that is part of a documented module has to have + * a \file block, else it will not show up in the Doxygen + * "Modules" * section. + */ + +/* Single line comments look like this. */ + +/* + * Multi-line comments look like this. Comments should prefferably be + * full sentences, filled to look like real paragraphs. + */ + +#include "uip.h" + +/* + * Make sure that non-global variables are all maked with the static + * keyword. This keeps the size of the symbol table down. + */ +static int flag; + +/* + * All variables and functions that are visible outside of the file + * should have the module name prepended to them. This makes it easy + * to know where to look for function and variable definitions. + * + * Put dividers (a single-line comment consisting only of dashes) + * between functions. + */ +/*---------------------------------------------------------------------------*/ +/** + * \brief Use Doxygen documentation for functions. + * \param c Briefly describe all parameters. + * \return Briefly describe the return value. + * \retval 0 Functions that return a few specified values + * \retval 1 can use the \retval keyword instead of \return. + * + * Put a longer description of what the function does + * after the preamble of Doxygen keywords. + * + * This template should always be used to document + * functions. The text following the introduction is used + * as the function's documentation. + * + * Function prototypes have the return type on one line, + * the name and arguments on one line (with no space + * between the name and the first parenthesis), followed + * by a single curly bracket on its own line. + */ +void +code_style_example_function(void) +{ + /* + * Local variables should always be declared at the start of the + * function. + */ + int i; /* Use short variable names for loop + counters. */ + + /* + * There should be no space between keywords and the first + * parenthesis. There should be spaces around binary operators, no + * spaces between a unary operator and its operand. + * + * Curly brackets following for(), if(), do, and case() statements + * should follow the statement on the same line. + */ + for(i = 0; i < 10; ++i) { + /* + * Always use full blocks (curly brackets) after if(), for(), and + * while() statements, even though the statement is a single line + * of code. This makes the code easier to read and modifications + * are less error prone. + */ + if(i == c) { + return c; /* No parentesis around return values. */ + } else { /* The else keyword is placed inbetween + curly brackers, always on its own line. */ + c++; + } + } +} +/*---------------------------------------------------------------------------*/ +/* + * Static (non-global) functions do not need Doxygen comments. The + * name should not be prepended with the module name - doing so would + * create confusion. + */ +static void +an_example_function(void) +{ + +} +/*---------------------------------------------------------------------------*/ + +/* The following stuff ends the \defgroup block at the beginning of + the file: */ + +/** @} */ diff --git a/components/net/uip/doc/uip-code-style.txt b/components/net/uip/doc/uip-code-style.txt new file mode 100644 index 0000000000..db6a632273 --- /dev/null +++ b/components/net/uip/doc/uip-code-style.txt @@ -0,0 +1,3 @@ +/** + \example uip-code-style.c + */ diff --git a/components/net/uip/doc/uip-doc.txt b/components/net/uip/doc/uip-doc.txt new file mode 100644 index 0000000000..894b1bc13a --- /dev/null +++ b/components/net/uip/doc/uip-doc.txt @@ -0,0 +1,1180 @@ + + +/** +\mainpage The uIP TCP/IP stack +\author Adam Dunkels, http://www.sics.se/~adam/ + +The uIP TCP/IP stack is intended to make it possible to communicate +using the TCP/IP protocol suite even on small 8-bit +micro-controllers. Despite being small and simple, uIP do not require +their peers to have complex, full-size stacks, but can communicate +with peers running a similarly light-weight stack. The code size is on +the order of a few kilobytes and RAM usage can be configured to be as +low as a few hundred bytes. + +uIP can be found at the uIP web page: http://www.sics.se/~adam/uip/ + +\sa \ref apps "Application programs" +\sa \ref uipopt "Compile-time configuration options" +\sa \ref uipconffunc "Run-time configuration functions" +\sa \ref uipinit "Initialization functions" +\sa \ref uipdevfunc "Device driver interface" and + \ref uipdrivervars "variables used by device drivers" +\sa \ref uipappfunc "uIP functions called from application programs" +(see below) and the \ref psock "protosockets API" and their underlying +\ref pt "protothreads" + +\section uIPIntroduction Introduction + +With the success of the Internet, the TCP/IP protocol suite has become +a global standard for communication. TCP/IP is the underlying protocol +used for web page transfers, e-mail transmissions, file transfers, and +peer-to-peer networking over the Internet. For embedded systems, being +able to run native TCP/IP makes it possible to connect the system +directly to an intranet or even the global Internet. Embedded devices +with full TCP/IP support will be first-class network citizens, thus +being able to fully communicate with other hosts in the network. + +Traditional TCP/IP implementations have required far too much +resources both in terms of code size and memory usage to be useful in +small 8 or 16-bit systems. Code size of a few hundred kilobytes and +RAM requirements of several hundreds of kilobytes have made it +impossible to fit the full TCP/IP stack into systems with a few tens +of kilobytes of RAM and room for less than 100 kilobytes of +code. + +The uIP implementation is designed to have only the absolute minimal +set of features needed for a full TCP/IP stack. It can only handle a +single network interface and contains the IP, ICMP, UDP and TCP +protocols. uIP is written in the C programming language. + +Many other TCP/IP implementations for small systems assume that the +embedded device always will communicate with a full-scale TCP/IP +implementation running on a workstation-class machine. Under this +assumption, it is possible to remove certain TCP/IP mechanisms that +are very rarely used in such situations. Many of those mechanisms are +essential, however, if the embedded device is to communicate with +another equally limited device, e.g., when running distributed +peer-to-peer services and protocols. uIP is designed to be RFC +compliant in order to let the embedded devices to act as first-class +network citizens. The uIP TCP/IP implementation that is not tailored +for any specific application. + + +\section tcpip TCP/IP Communication + +The full TCP/IP suite consists of numerous protocols, ranging from low +level protocols such as ARP which translates IP addresses to MAC +addresses, to application level protocols such as SMTP that is used to +transfer e-mail. The uIP is mostly concerned with the TCP and IP +protocols and upper layer protocols will be referred to as "the +application". Lower layer protocols are often implemented in hardware +or firmware and will be referred to as "the network device" that are +controlled by the network device driver. + +TCP provides a reliable byte stream to the upper layer protocols. It +breaks the byte stream into appropriately sized segments and each +segment is sent in its own IP packet. The IP packets are sent out on +the network by the network device driver. If the destination is not on +the physically connected network, the IP packet is forwarded onto +another network by a router that is situated between the two +networks. If the maximum packet size of the other network is smaller +than the size of the IP packet, the packet is fragmented into smaller +packets by the router. If possible, the size of the TCP segments are +chosen so that fragmentation is minimized. The final recipient of the +packet will have to reassemble any fragmented IP packets before they +can be passed to higher layers. + +The formal requirements for the protocols in the TCP/IP stack is +specified in a number of RFC documents published by the Internet +Engineering Task Force, IETF. Each of the protocols in the stack is +defined in one more RFC documents and RFC1122 collects +all requirements and updates the previous RFCs. + +The RFC1122 requirements can be divided into two categories; those +that deal with the host to host communication and those that deal with +communication between the application and the networking stack. An +example of the first kind is "A TCP MUST be able to receive a TCP +option in any segment" and an example of the second kind is "There +MUST be a mechanism for reporting soft TCP error conditions to the +application." A TCP/IP implementation that violates requirements of +the first kind may not be able to communicate with other TCP/IP +implementations and may even lead to network failures. Violation of +the second kind of requirements will only affect the communication +within the system and will not affect host-to-host communication. + +In uIP, all RFC requirements that affect host-to-host communication +are implemented. However, in order to reduce code size, we have +removed certain mechanisms in the interface between the application +and the stack, such as the soft error reporting mechanism and +dynamically configurable type-of-service bits for TCP +connections. Since there are only very few applications that make use +of those features they can be removed without loss of generality. + +\section mainloop Main Control Loop + +The uIP stack can be run either as a task in a multitasking system, or +as the main program in a singletasking system. In both cases, the main +control loop does two things repeatedly: + + - Check if a packet has arrived from the network. + - Check if a periodic timeout has occurred. + +If a packet has arrived, the input handler function, uip_input(), +should be invoked by the main control loop. The input handler function +will never block, but will return at once. When it returns, the stack +or the application for which the incoming packet was intended may have +produced one or more reply packets which should be sent out. If so, +the network device driver should be called to send out these packets. + +Periodic timeouts are used to drive TCP mechanisms that depend on +timers, such as delayed acknowledgments, retransmissions and +round-trip time estimations. When the main control loop infers that +the periodic timer should fire, it should invoke the timer handler +function uip_periodic(). Because the TCP/IP stack may perform +retransmissions when dealing with a timer event, the network device +driver should called to send out the packets that may have been produced. + +\section arch Architecture Specific Functions + +uIP requires a few functions to be implemented specifically for the +architecture on which uIP is intended to run. These functions should +be hand-tuned for the particular architecture, but generic C +implementations are given as part of the uIP distribution. + +\subsection checksums Checksum Calculation + +The TCP and IP protocols implement a checksum that covers the data and +header portions of the TCP and IP packets. Since the calculation of +this checksum is made over all bytes in every packet being sent and +received it is important that the function that calculates the +checksum is efficient. Most often, this means that the checksum +calculation must be fine-tuned for the particular architecture on +which the uIP stack runs. + +While uIP includes a generic checksum function, it also leaves it open +for an architecture specific implementation of the two functions +uip_ipchksum() and uip_tcpchksum(). The checksum calculations in those +functions can be written in highly optimized assembler rather than +generic C code. + +\subsection longarith 32-bit Arithmetic + +The TCP protocol uses 32-bit sequence numbers, and a TCP +implementation will have to do a number of 32-bit additions as part of +the normal protocol processing. Since 32-bit arithmetic is not +natively available on many of the platforms for which uIP is intended, +uIP leaves the 32-bit additions to be implemented by the architecture +specific module and does not make use of any 32-bit arithmetic in the +main code base. + +While uIP implements a generic 32-bit addition, there is support for +having an architecture specific implementation of the uip_add32() +function. + + +\section memory Memory Management + +In the architectures for which uIP is intended, RAM is the most +scarce resource. With only a few kilobytes of RAM available for the +TCP/IP stack to use, mechanisms used in traditional TCP/IP cannot be +directly applied. + + +The uIP stack does not use explicit dynamic memory +allocation. Instead, it uses a single global buffer for holding +packets and has a fixed table for holding connection state. The global +packet buffer is large enough to contain one packet of maximum +size. When a packet arrives from the network, the device driver places +it in the global buffer and calls the TCP/IP stack. If the packet +contains data, the TCP/IP stack will notify the corresponding +application. Because the data in the buffer will be overwritten by the +next incoming packet, the application will either have to act +immediately on the data or copy the data into a secondary buffer for +later processing. The packet buffer will not be overwritten by new +packets before the application has processed the data. Packets that +arrive when the application is processing the data must be queued, +either by the network device or by the device driver. Most single-chip +Ethernet controllers have on-chip buffers that are large enough to +contain at least 4 maximum sized Ethernet frames. Devices that are +handled by the processor, such as RS-232 ports, can copy incoming +bytes to a separate buffer during application processing. If the +buffers are full, the incoming packet is dropped. This will cause +performance degradation, but only when multiple connections are +running in parallel. This is because uIP advertises a very small +receiver window, which means that only a single TCP segment will be in +the network per connection. + +In uIP, the same global packet buffer that is used for incoming +packets is also used for the TCP/IP headers of outgoing data. If the +application sends dynamic data, it may use the parts of the global +packet buffer that are not used for headers as a temporary storage +buffer. To send the data, the application passes a pointer to the data +as well as the length of the data to the stack. The TCP/IP headers are +written into the global buffer and once the headers have been +produced, the device driver sends the headers and the application data +out on the network. The data is not queued for +retransmissions. Instead, the application will have to reproduce the +data if a retransmission is necessary. + +The total amount of memory usage for uIP depends heavily on the +applications of the particular device in which the implementations are +to be run. The memory configuration determines both the amount of +traffic the system should be able to handle and the maximum amount of +simultaneous connections. A device that will be sending large e-mails +while at the same time running a web server with highly dynamic web +pages and multiple simultaneous clients, will require more RAM than a +simple Telnet server. It is possible to run the uIP implementation +with as little as 200 bytes of RAM, but such a configuration will +provide extremely low throughput and will only allow a small number of +simultaneous connections. + +\section api Application Program Interface (API) + + +The Application Program Interface (API) defines the way the +application program interacts with the TCP/IP stack. The most commonly +used API for TCP/IP is the BSD socket API which is used in most Unix +systems and has heavily influenced the Microsoft Windows WinSock +API. Because the socket API uses stop-and-wait semantics, it requires +support from an underlying multitasking operating system. Since the +overhead of task management, context switching and allocation of stack +space for the tasks might be too high in the intended uIP target +architectures, the BSD socket interface is not suitable for our +purposes. + +uIP provides two APIs to programmers: protosockets, a BSD socket-like +API without the overhead of full multi-threading, and a "raw" +event-based API that is nore low-level than protosockets but uses less +memory. + +\sa \ref psock +\sa \ref pt + + +\subsection rawapi The uIP raw API + +The "raw" uIP API uses an event driven interface where the application is +invoked in response to certain events. An application running on top +of uIP is implemented as a C function that is called by uIP in +response to certain events. uIP calls the application when data is +received, when data has been successfully delivered to the other end +of the connection, when a new connection has been set up, or when data +has to be retransmitted. The application is also periodically polled +for new data. The application program provides only one callback +function; it is up to the application to deal with mapping different +network services to different ports and connections. Because the +application is able to act on incoming data and connection requests as +soon as the TCP/IP stack receives the packet, low response times can +be achieved even in low-end systems. + +uIP is different from other TCP/IP stacks in that it requires help +from the application when doing retransmissions. Other TCP/IP stacks +buffer the transmitted data in memory until the data is known to be +successfully delivered to the remote end of the connection. If the +data needs to be retransmitted, the stack takes care of the +retransmission without notifying the application. With this approach, +the data has to be buffered in memory while waiting for an +acknowledgment even if the application might be able to quickly +regenerate the data if a retransmission has to be made. + +In order to reduce memory usage, uIP utilizes the fact that the +application may be able to regenerate sent data and lets the +application take part in retransmissions. uIP does not keep track of +packet contents after they have been sent by the device driver, and +uIP requires that the application takes an active part in performing +the retransmission. When uIP decides that a segment should be +retransmitted, it calls the application with a flag set indicating +that a retransmission is required. The application checks the +retransmission flag and produces the same data that was previously +sent. From the application's standpoint, performing a retransmission +is not different from how the data originally was sent. Therefore the +application can be written in such a way that the same code is used +both for sending data and retransmitting data. Also, it is important +to note that even though the actual retransmission operation is +carried out by the application, it is the responsibility of the stack +to know when the retransmission should be made. Thus the complexity of +the application does not necessarily increase because it takes an +active part in doing retransmissions. + +\subsubsection appevents Application Events + +The application must be implemented as a C function, UIP_APPCALL(), +that uIP calls whenever an event occurs. Each event has a corresponding +test function that is used to distinguish between different +events. The functions are implemented as C macros that will evaluate +to either zero or non-zero. Note that certain events can happen in +conjunction with each other (i.e., new data can arrive at the same +time as data is acknowledged). + +\subsubsection connstate The Connection Pointer + +When the application is called by uIP, the global variable uip_conn is +set to point to the uip_conn structure for the connection that +currently is handled, and is called the "current connection". The +fields in the uip_conn structure for the current connection can be +used, e.g., to distinguish between different services, or to check to +which IP address the connection is connected. One typical use would be +to inspect the uip_conn->lport (the local TCP port number) to decide +which service the connection should provide. For instance, an +application might decide to act as an HTTP server if the value of +uip_conn->lport is equal to 80 and act as a TELNET server if the value +is 23. + +\subsubsection recvdata Receiving Data + +If the uIP test function uip_newdata() is non-zero, the remote host of +the connection has sent new data. The uip_appdata pointer point to the +actual data. The size of the data is obtained through the uIP function +uip_datalen(). The data is not buffered by uIP, but will be +overwritten after the application function returns, and the +application will therefor have to either act directly on the incoming +data, or by itself copy the incoming data into a buffer for later +processing. + +\subsubsection senddata Sending Data + +When sending data, uIP adjusts the length of the data sent by the +application according to the available buffer space and the current +TCP window advertised by the receiver. The amount of buffer space is +dictated by the memory configuration. It is therefore possible that +all data sent from the application does not arrive at the receiver, +and the application may use the uip_mss() function to see how much +data that actually will be sent by the stack. + +The application sends data by using the uIP function uip_send(). The +uip_send() function takes two arguments; a pointer to the data to be +sent and the length of the data. If the application needs RAM space +for producing the actual data that should be sent, the packet buffer +(pointed to by the uip_appdata pointer) can be used for this purpose. + +The application can send only one chunk of data at a time on a +connection and it is not possible to call uip_send() more than once +per application invocation; only the data from the last call will be +sent. + +\subsubsection rexmitdata Retransmitting Data + +Retransmissions are driven by the periodic TCP timer. Every time the +periodic timer is invoked, the retransmission timer for each +connection is decremented. If the timer reaches zero, a retransmission +should be made. As uIP does not keep track of packet contents after they have +been sent by the device driver, uIP requires that the +application takes an active part in performing the +retransmission. When uIP decides that a segment should be +retransmitted, the application function is called with the +uip_rexmit() flag set, indicating that a retransmission is +required. + +The application must check the uip_rexmit() flag and produce the same +data that was previously sent. From the application's standpoint, +performing a retransmission is not different from how the data +originally was sent. Therefor, the application can be written in such +a way that the same code is used both for sending data and +retransmitting data. Also, it is important to note that even though +the actual retransmission operation is carried out by the application, +it is the responsibility of the stack to know when the retransmission +should be made. Thus the complexity of the application does not +necessarily increase because it takes an active part in doing +retransmissions. + +\subsubsection closing Closing Connections + +The application closes the current connection by calling the +uip_close() during an application call. This will cause the connection +to be cleanly closed. In order to indicate a fatal error, the +application might want to abort the connection and does so by calling +the uip_abort() function. + +If the connection has been closed by the remote end, the test function +uip_closed() is true. The application may then do any necessary +cleanups. + +\subsubsection errors Reporting Errors + +There are two fatal errors that can happen to a connection, either +that the connection was aborted by the remote host, or that the +connection retransmitted the last data too many times and has been +aborted. uIP reports this by calling the application function. The +application can use the two test functions uip_aborted() and +uip_timedout() to test for those error conditions. + +\subsubsection polling Polling + +When a connection is idle, uIP polls the application every time the +periodic timer fires. The application uses the test function +uip_poll() to check if it is being polled by uIP. + +The polling event has two purposes. The first is to let the +application periodically know that a connection is idle, which allows +the application to close connections that have been idle for too +long. The other purpose is to let the application send new data that +has been produced. The application can only send data when invoked by +uIP, and therefore the poll event is the only way to send data on an +otherwise idle connection. + +\subsubsection listen Listening Ports + +uIP maintains a list of listening TCP ports. A new port is opened for +listening with the uip_listen() function. When a connection request +arrives on a listening port, uIP creates a new connection and calls +the application function. The test function uip_connected() is true if +the application was invoked because a new connection was created. + +The application can check the lport field in the uip_conn structure to +check to which port the new connection was connected. + +\subsubsection connect Opening Connections + +New connections can be opened from within +uIP by the function uip_connect(). This function +allocates a new connection and sets a flag in the connection state +which will open a TCP connection to the specified IP address and port +the next time the connection is polled by uIP. The uip_connect() +function returns +a pointer to the uip_conn structure for the new +connection. If there are no free connection slots, the function +returns NULL. + +The function uip_ipaddr() may be used to pack an IP address into the +two element 16-bit array used by uIP to represent IP addresses. + +Two examples of usage are shown below. The first example shows how to +open a connection to TCP port 8080 of the remote end of the current +connection. If there are not enough TCP connection slots to allow a +new connection to be opened, the uip_connect() function returns NULL +and the current connection is aborted by uip_abort(). + +\code +void connect_example1_app(void) { + if(uip_connect(uip_conn->ripaddr, HTONS(8080)) == NULL) { + uip_abort(); + } +} +\endcode + +The second example shows how to open a new connection to a specific IP +address. No error checks are made in this example. + +\code +void connect_example2(void) { + u16_t ipaddr[2]; + + uip_ipaddr(ipaddr, 192,168,0,1); + uip_connect(ipaddr, HTONS(8080)); +} +\endcode + +\section examples Examples + +This section presents a number of very simple uIP applications. The +uIP code distribution contains several more complex applications. + +\subsection example1 A Very Simple Application + +This first example shows a very simple application. The application +listens for incoming connections on port 1234. When a connection has +been established, the application replies to all data sent to it by +saying "ok" + +The implementation of this application is shown below. The application +is initialized with the function called example1_init() and the uIP +callback function is called example1_app(). For this application, the +configuration variable UIP_APPCALL should be defined to be +example1_app(). + +\code +void example1_init(void) { + uip_listen(HTONS(1234)); +} + +void example1_app(void) { + if(uip_newdata() || uip_rexmit()) { + uip_send("ok\n", 3); + } +} +\endcode + +The initialization function calls the uIP function uip_listen() to +register a listening port. The actual application function +example1_app() uses the test functions uip_newdata() and uip_rexmit() +to determine why it was called. If the application was called because +the remote end has sent it data, it responds with an "ok". If the +application function was called because data was lost in the network +and has to be retransmitted, it also sends an "ok". Note that this +example actually shows a complete uIP application. It is not required +for an application to deal with all types of events such as +uip_connected() or uip_timedout(). + +\subsection example2 A More Advanced Application + +This second example is slightly more advanced than the previous one, +and shows how the application state field in the uip_conn structure is +used. + +This application is similar to the first application in that it +listens to a port for incoming connections and responds to data sent +to it with a single "ok". The big difference is that this application +prints out a welcoming "Welcome!" message when the connection has been +established. + +This seemingly small change of operation makes a big difference in how +the application is implemented. The reason for the increase in +complexity is that if data should be lost in the network, the +application must know what data to retransmit. If the "Welcome!" +message was lost, the application must retransmit the welcome and if +one of the "ok" messages is lost, the application must send a new +"ok". + +The application knows that as long as the "Welcome!" message has not +been acknowledged by the remote host, it might have been dropped in +the network. But once the remote host has sent an acknowledgment +back, the application can be sure that the welcome has been received +and knows that any lost data must be an "ok" message. Thus the +application can be in either of two states: either in the WELCOME-SENT +state where the "Welcome!" has been sent but not acknowledged, or in +the WELCOME-ACKED state where the "Welcome!" has been acknowledged. + +When a remote host connects to the application, the application sends +the "Welcome!" message and sets it's state to WELCOME-SENT. When the +welcome message is acknowledged, the application moves to the +WELCOME-ACKED state. If the application receives any new data from the +remote host, it responds by sending an "ok" back. + +If the application is requested to retransmit the last message, it +looks at in which state the application is. If the application is in +the WELCOME-SENT state, it sends a "Welcome!" message since it +knows that the previous welcome message hasn't been acknowledged. If +the application is in the WELCOME-ACKED state, it knows that the last +message was an "ok" message and sends such a message. + +The implementation of this application is seen below. This +configuration settings for the application is follows after its +implementation. + +\code +struct example2_state { + enum {WELCOME_SENT, WELCOME_ACKED} state; +}; + +void example2_init(void) { + uip_listen(HTONS(2345)); +} + +void example2_app(void) { + struct example2_state *s; + + s = (struct example2_state *)uip_conn->appstate; + + if(uip_connected()) { + s->state = WELCOME_SENT; + uip_send("Welcome!\n", 9); + return; + } + + if(uip_acked() && s->state == WELCOME_SENT) { + s->state = WELCOME_ACKED; + } + + if(uip_newdata()) { + uip_send("ok\n", 3); + } + + if(uip_rexmit()) { + switch(s->state) { + case WELCOME_SENT: + uip_send("Welcome!\n", 9); + break; + case WELCOME_ACKED: + uip_send("ok\n", 3); + break; + } + } +} +\endcode + +The configuration for the application: + +\code +#define UIP_APPCALL example2_app +#define UIP_APPSTATE_SIZE sizeof(struct example2_state) +\endcode + +\subsection example3 Differentiating Between Applications + +If the system should run multiple applications, one technique to +differentiate between them is to use the TCP port number of either the +remote end or the local end of the connection. The example below shows +how the two examples above can be combined into one application. + +\code +void example3_init(void) { + example1_init(); + example2_init(); +} + +void example3_app(void) { + switch(uip_conn->lport) { + case HTONS(1234): + example1_app(); + break; + case HTONS(2345): + example2_app(); + break; + } +} +\endcode + +\subsection example4 Utilizing TCP Flow Control + +This example shows a simple application that connects to a host, sends +an HTTP request for a file and downloads it to a slow device such a +disk drive. This shows how to use the flow control functions of uIP. + +\code +void example4_init(void) { + u16_t ipaddr[2]; + uip_ipaddr(ipaddr, 192,168,0,1); + uip_connect(ipaddr, HTONS(80)); +} + +void example4_app(void) { + if(uip_connected() || uip_rexmit()) { + uip_send("GET /file HTTP/1.0\r\nServer:192.186.0.1\r\n\r\n", + 48); + return; + } + + if(uip_newdata()) { + device_enqueue(uip_appdata, uip_datalen()); + if(device_queue_full()) { + uip_stop(); + } + } + + if(uip_poll() && uip_stopped()) { + if(!device_queue_full()) { + uip_restart(); + } + } +} +\endcode + +When the connection has been established, an HTTP request is sent to +the server. Since this is the only data that is sent, the application +knows that if it needs to retransmit any data, it is that request that +should be retransmitted. It is therefore possible to combine these two +events as is done in the example. + +When the application receives new data from the remote host, it sends +this data to the device by using the function device_enqueue(). It is +important to note that this example assumes that this function copies +the data into its own buffers. The data in the uip_appdata buffer will +be overwritten by the next incoming packet. + +If the device's queue is full, the application stops the data from the +remote host by calling the uIP function uip_stop(). The application +can then be sure that it will not receive any new data until +uip_restart() is called. The application polling event is used to +check if the device's queue is no longer full and if so, the data flow +is restarted with uip_restart(). + +\subsection example5 A Simple Web Server + +This example shows a very simple file server application that listens +to two ports and uses the port number to determine which file to +send. If the files are properly formatted, this simple application can +be used as a web server with static pages. The implementation follows. + +\code +struct example5_state { + char *dataptr; + unsigned int dataleft; +}; + +void example5_init(void) { + uip_listen(HTONS(80)); + uip_listen(HTONS(81)); +} + +void example5_app(void) { + struct example5_state *s; + s = (struct example5_state)uip_conn->appstate; + + if(uip_connected()) { + switch(uip_conn->lport) { + case HTONS(80): + s->dataptr = data_port_80; + s->dataleft = datalen_port_80; + break; + case HTONS(81): + s->dataptr = data_port_81; + s->dataleft = datalen_port_81; + break; + } + uip_send(s->dataptr, s->dataleft); + return; + } + + if(uip_acked()) { + if(s->dataleft < uip_mss()) { + uip_close(); + return; + } + s->dataptr += uip_conn->len; + s->dataleft -= uip_conn->len; + uip_send(s->dataptr, s->dataleft); + } +} +\endcode + +The application state consists of a pointer to the data that should be +sent and the size of the data that is left to send. When a remote host +connects to the application, the local port number is used to +determine which file to send. The first chunk of data is sent using +uip_send(). uIP makes sure that no more than MSS bytes of data is +actually sent, even though s->dataleft may be larger than the MSS. + +The application is driven by incoming acknowledgments. When data has +been acknowledged, new data can be sent. If there is no more data to +send, the connection is closed using uip_close(). + +\subsection example6 Structured Application Program Design + +When writing larger programs using uIP it is useful to be able to +utilize the uIP API in a structured way. The following example +provides a structured design that has showed itself to be useful for +writing larger protocol implementations than the previous examples +showed here. The program is divided into an uIP event handler function +that calls seven application handler functions that process new data, +act on acknowledged data, send new data, deal with connection +establishment or closure events and handle errors. The functions are +called newdata(), acked(), senddata(), connected(), closed(), +aborted(), and timedout(), and needs to be written specifically for +the protocol that is being implemented. + +The uIP event handler function is shown below. + +\code +void example6_app(void) { + if(uip_aborted()) { + aborted(); + } + if(uip_timedout()) { + timedout(); + } + if(uip_closed()) { + closed(); + } + if(uip_connected()) { + connected(); + } + if(uip_acked()) { + acked(); + } + if(uip_newdata()) { + newdata(); + } + if(uip_rexmit() || + uip_newdata() || + uip_acked() || + uip_connected() || + uip_poll()) { + senddata(); + } +} +\endcode + +The function starts with dealing with any error conditions that might +have happened by checking if uip_aborted() or uip_timedout() are +true. If so, the appropriate error function is called. Also, if the +connection has been closed, the closed() function is called to the it +deal with the event. + +Next, the function checks if the connection has just been established +by checking if uip_connected() is true. The connected() function is +called and is supposed to do whatever needs to be done when the +connection is established, such as intializing the application state +for the connection. Since it may be the case that data should be sent +out, the senddata() function is called to deal with the outgoing data. + +The following very simple application serves as an example of how the +application handler functions might look. This application simply +waits for any data to arrive on the connection, and responds to the +data by sending out the message "Hello world!". To illustrate how to +develop an application state machine, this message is sent in two +parts, first the "Hello" part and then the "world!" part. + +\code +#define STATE_WAITING 0 +#define STATE_HELLO 1 +#define STATE_WORLD 2 + +struct example6_state { + u8_t state; + char *textptr; + int textlen; +}; + +static void aborted(void) {} +static void timedout(void) {} +static void closed(void) {} + +static void connected(void) { + struct example6_state *s = (struct example6_state *)uip_conn->appstate; + + s->state = STATE_WAITING; + s->textlen = 0; +} + +static void newdata(void) { + struct example6_state *s = (struct example6_state *)uip_conn->appstate; + + if(s->state == STATE_WAITING) { + s->state = STATE_HELLO; + s->textptr = "Hello "; + s->textlen = 6; + } +} + +static void acked(void) { + struct example6_state *s = (struct example6_state *)uip_conn->appstate; + + s->textlen -= uip_conn->len; + s->textptr += uip_conn->len; + if(s->textlen == 0) { + switch(s->state) { + case STATE_HELLO: + s->state = STATE_WORLD; + s->textptr = "world!\n"; + s->textlen = 7; + break; + case STATE_WORLD: + uip_close(); + break; + } + } +} + +static void senddata(void) { + struct example6_state *s = (struct example6_state *)uip_conn->appstate; + + if(s->textlen > 0) { + uip_send(s->textptr, s->textlen); + } +} +\endcode + +The application state consists of a "state" variable, a "textptr" +pointer to a text message and the "textlen" length of the text +message. The "state" variable can be either "STATE_WAITING", meaning +that the application is waiting for data to arrive from the network, +"STATE_HELLO", in which the application is sending the "Hello" part of +the message, or "STATE_WORLD", in which the application is sending the +"world!" message. + +The application does not handle errors or connection closing events, +and therefore the aborted(), timedout() and closed() functions are +implemented as empty functions. + +The connected() function will be called when a connection has been +established, and in this case sets the "state" variable to be +"STATE_WAITING" and the "textlen" variable to be zero, indicating that +there is no message to be sent out. + +When new data arrives from the network, the newdata() function will be +called by the event handler function. The newdata() function will +check if the connection is in the "STATE_WAITING" state, and if so +switches to the "STATE_HELLO" state and registers a 6 byte long "Hello +" message with the connection. This message will later be sent out by +the senddata() function. + +The acked() function is called whenever data that previously was sent +has been acknowleged by the receiving host. This acked() function +first reduces the amount of data that is left to send, by subtracting +the length of the previously sent data (obtained from "uip_conn->len") +from the "textlen" variable, and also adjusts the "textptr" pointer +accordingly. It then checks if the "textlen" variable now is zero, +which indicates that all data now has been successfully received, and +if so changes application state. If the application was in the +"STATE_HELLO" state, it switches state to "STATE_WORLD" and sets up a +7 byte "world!\n" message to be sent. If the application was in the +"STATE_WORLD" state, it closes the connection. + +Finally, the senddata() function takes care of actually sending the +data that is to be sent. It is called by the event handler function +when new data has been received, when data has been acknowledged, when +a new connection has been established, when the connection is polled +because of inactivity, or when a retransmission should be made. The +purpose of the senddata() function is to optionally format the data +that is to be sent, and to call the uip_send() function to actually +send out the data. In this particular example, the function simply +calls uip_send() with the appropriate arguments if data is to be sent, +after checking if data should be sent out or not as indicated by the +"textlen" variable. + +It is important to note that the senddata() function never should +affect the application state; this should only be done in the acked() +and newdata() functions. + +\section protoimpl Protocol Implementations + +The protocols in the TCP/IP protocol suite are designed in a layered +fashion where each protocol performs a specific function and the +interactions between the protocol layers are strictly defined. While +the layered approach is a good way to design protocols, it is not +always the best way to implement them. In uIP, the protocol +implementations are tightly coupled in order to save code space. + +This section gives detailed information on the specific protocol +implementations in uIP. + +\subsection ip IP --- Internet Protocol + +When incoming packets are processed by uIP, the IP layer is the first +protocol that examines the packet. The IP layer does a few simple +checks such as if the destination IP address of the incoming packet +matches any of the local IP address and verifies the IP header +checksum. Since there are no IP options that are strictly required and +because they are very uncommon, any IP options in received packets are +dropped. + +\subsubsection ipreass IP Fragment Reassembly + +IP fragment reassembly is implemented using a separate buffer that +holds the packet to be reassembled. An incoming fragment is copied +into the right place in the buffer and a bit map is used to keep track +of which fragments have been received. Because the first byte of an IP +fragment is aligned on an 8-byte boundary, the bit map requires a +small amount of memory. When all fragments have been reassembled, the +resulting IP packet is passed to the transport layer. If all fragments +have not been received within a specified time frame, the packet is +dropped. + +The current implementation only has a single buffer for holding +packets to be reassembled, and therefore does not support simultaneous +reassembly of more than one packet. Since fragmented packets are +uncommon, this ought to be a reasonable decision. Extending the +implementation to support multiple buffers would be straightforward, +however. + +\subsubsection ipbroadcast Broadcasts and Multicasts + +IP has the ability to broadcast and multicast packets on the local +network. Such packets are addressed to special broadcast and multicast +addresses. Broadcast is used heavily in many UDP based protocols such +as the Microsoft Windows file-sharing SMB protocol. Multicast is +primarily used in protocols used for multimedia distribution such as +RTP. TCP is a point-to-point protocol and does not use broadcast or +multicast packets. uIP current supports broadcast packets as well as +sending multicast packets. Joining multicast groups (IGMP) and +receiving non-local multicast packets is not currently supported. + +\subsection icmp ICMP --- Internet Control Message Protocol + +The ICMP protocol is used for reporting soft error conditions and for +querying host parameters. Its main use is, however, the echo mechanism +which is used by the "ping" program. + +The ICMP implementation in uIP is very simple as itis restricted to +only implement ICMP echo messages. Replies to echo messages are +constructed by simply swapping the source and destination IP addresses +of incoming echo requests and rewriting the ICMP header with the +Echo-Reply message type. The ICMP checksum is adjusted using standard +techniques (see RFC1624). + +Since only the ICMP echo message is implemented, there is no support +for Path MTU discovery or ICMP redirect messages. Neither of these is +strictly required for interoperability; they are performance +enhancement mechanisms. + +\subsection tcp TCP --- Transmission Control Protocol + +The TCP implementation in uIP is driven by incoming packets and timer +events. Incoming packets are parsed by TCP and if the packet contains +data that is to be delivered to the application, the application is +invoked by the means of the application function call. If the incoming +packet acknowledges previously sent data, the connection state is +updated and the application is informed, allowing it to send out new +data. + +\subsubsection listeb Listening Connections + +TCP allows a connection to listen for incoming connection requests. In +uIP, a listening connection is identified by the 16-bit port number +and incoming connection requests are checked against the list of +listening connections. This list of listening connections is dynamic +and can be altered by the applications in the system. + +\subsubsection slidingwindow Sliding Window + +Most TCP implementations use a sliding window mechanism for sending +data. Multiple data segments are sent in succession without waiting +for an acknowledgment for each segment. + +The sliding window algorithm uses a lot of 32-bit operations and +because 32-bit arithmetic is fairly expensive on most 8-bit CPUs, uIP +does not implement it. Also, uIP does not buffer sent packets and a +sliding window implementation that does not buffer sent packets will have +to be supported by a complex application layer. Instead, uIP allows +only a single TCP segment per connection to be unacknowledged at any +given time. + +It is important to note that even though most TCP implementations use +the sliding window algorithm, it is not required by the TCP +specifications. Removing the sliding window mechanism does not affect +interoperability in any way. + +\subsubsection rttest Round-Trip Time Estimation + +TCP continuously estimates the current Round-Trip Time (RTT) of every +active connection in order to find a suitable value for the +retransmission time-out. + +The RTT estimation in uIP is implemented using TCP's periodic +timer. Each time the periodic timer fires, it increments a counter for +each connection that has unacknowledged data in the network. When an +acknowledgment is received, the current value of the counter is used +as a sample of the RTT. The sample is used together with Van +Jacobson's standard TCP RTT estimation function to calculate an +estimate of the RTT. Karn's algorithm is used to ensure that +retransmissions do not skew the estimates. + +\subsubsection rexmit Retransmissions + +Retransmissions are driven by the periodic TCP timer. Every time the +periodic timer is invoked, the retransmission timer for each +connection is decremented. If the timer reaches zero, a retransmission +should be made. + +As uIP does not keep track of packet contents after they have +been sent by the device driver, uIP requires that the +application takes an active part in performing the +retransmission. When uIP decides that a segment should be +retransmitted, it calls the application with a flag set indicating +that a retransmission is required. The application checks the +retransmission flag and produces the same data that was previously +sent. From the application's standpoint, performing a retransmission +is not different from how the data originally was sent. Therefore the +application can be written in such a way that the same code is used +both for sending data and retransmitting data. Also, it is important +to note that even though the actual retransmission operation is +carried out by the application, it is the responsibility of the stack +to know when the retransmission should be made. Thus the complexity of +the application does not necessarily increase because it takes an +active part in doing retransmissions. + +\subsubsection flowcontrol Flow Control + +The purpose of TCP's flow control mechanisms is to allow communication +between hosts with wildly varying memory dimensions. In each TCP +segment, the sender of the segment indicates its available buffer +space. A TCP sender must not send more data than the buffer space +indicated by the receiver. + +In uIP, the application cannot send more data than the receiving host +can buffer. And application cannot send more data than the amount of +bytes it is allowed to send by the receiving host. If the remote host +cannot accept any data at all, the stack initiates the zero window +probing mechanism. + +\subsubsection congestioncontrol Congestion Control + +The congestion control mechanisms limit the number of simultaneous TCP +segments in the network. The algorithms used for congestion control +are designed to be simple to implement and require only a few lines of +code. + +Since uIP only handles one in-flight TCP segment per connection, +the amount of simultaneous segments cannot be further limited, thus +the congestion control mechanisms are not needed. + +\subsubsection urgdata Urgent Data + +TCP's urgent data mechanism provides an application-to-application +notification mechanism, which can be used by an application to mark +parts of the data stream as being more urgent than the normal +stream. It is up to the receiving application to interpret the meaning +of the urgent data. + +In many TCP implementations, including the BSD implementation, the +urgent data feature increases the complexity of the implementation +because it requires an asynchronous notification mechanism in an +otherwise synchronous API. As uIP already use an asynchronous event +based API, the implementation of the urgent data feature does not lead +to increased complexity. + +\section performance Performance + +In TCP/IP implementations for high-end systems, processing time is +dominated by the checksum calculation loop, the operation of copying +packet data and context switching. Operating systems for high-end +systems often have multiple protection domains for protecting kernel +data from user processes and user processes from each other. Because +the TCP/IP stack is run in the kernel, data has to be copied between +the kernel space and the address space of the user processes and a +context switch has to be performed once the data has been +copied. Performance can be enhanced by combining the copy operation +with the checksum calculation. Because high-end systems usually have +numerous active connections, packet demultiplexing is also an +expensive operation. + +A small embedded device does not have the necessary processing power +to have multiple protection domains and the power to run a +multitasking operating system. Therefore there is no need to copy +data between the TCP/IP stack and the application program. With an +event based API there is no context switch between the TCP/IP stack +and the applications. + +In such limited systems, the TCP/IP processing overhead is dominated +by the copying of packet data from the network device to host memory, +and checksum calculation. Apart from the checksum calculation and +copying, the TCP processing done for an incoming packet involves only +updating a few counters and flags before handing the data over to the +application. Thus an estimate of the CPU overhead of our TCP/IP +implementations can be obtained by calculating the amount of CPU +cycles needed for the checksum calculation and copying of a maximum +sized packet. + +\subsection delack The Impact of Delayed Acknowledgments + +Most TCP receivers implement the delayed acknowledgment algorithm for +reducing the number of pure acknowledgment packets sent. A TCP +receiver using this algorithm will only send acknowledgments for every +other received segment. If no segment is received within a specific +time-frame, an acknowledgment is sent. The time-frame can be as high +as 500 ms but typically is 200 ms. + +A TCP sender such as uIP that only handles a single outstanding TCP +segment will interact poorly with the delayed acknowledgment +algorithm. Because the receiver only receives a single segment at a +time, it will wait as much as 500 ms before an acknowledgment is +sent. This means that the maximum possible throughput is severely +limited by the 500 ms idle time. + +Thus the maximum throughput equation when sending data from uIP will +be $p = s / (t + t_d)$ where $s$ is the segment size and $t_d$ is the +delayed acknowledgment timeout, which typically is between 200 and +500 ms. With a segment size of 1000 bytes, a round-trip time of 40 ms +and a delayed acknowledgment timeout of 200 ms, the maximum +throughput will be 4166 bytes per second. With the delayed acknowledgment +algorithm disabled at the receiver, the maximum throughput would be +25000 bytes per second. + +It should be noted, however, that since small systems running uIP are +not very likely to have large amounts of data to send, the delayed +acknowledgmen t throughput degradation of uIP need not be very +severe. Small amounts of data sent by such a system will not span more +than a single TCP segment, and would therefore not be affected by the +throughput degradation anyway. + +The maximum throughput when uIP acts as a receiver is not affected by +the delayed acknowledgment throughput degradation. + + + +*/ + + +/** @} */ + diff --git a/components/net/uip/doc/uip-refman.pdf b/components/net/uip/doc/uip-refman.pdf new file mode 100644 index 0000000000..8dc8005986 --- /dev/null +++ b/components/net/uip/doc/uip-refman.pdf @@ -0,0 +1,39280 @@ +%PDF-1.4 +5 0 obj +<< /S /GoTo /D (chapter.1) >> +endobj +8 0 obj +(The uIP TCP/IP stack ) +endobj +9 0 obj +<< /S /GoTo /D (section.1.1) >> +endobj +12 0 obj +(Introduction) +endobj +13 0 obj +<< /S /GoTo /D (section.1.2) >> +endobj +16 0 obj +(TCP/IP Communication) +endobj +17 0 obj +<< /S /GoTo /D (section.1.3) >> +endobj +20 0 obj +(Main Control Loop) +endobj +21 0 obj +<< /S /GoTo /D (section.1.4) >> +endobj +24 0 obj +(Architecture Specific Functions) +endobj +25 0 obj +<< /S /GoTo /D (section.1.5) >> +endobj +28 0 obj +(Memory Management) +endobj +29 0 obj +<< /S /GoTo /D (section.1.6) >> +endobj +32 0 obj +(Application Program Interface \(API\)) +endobj +33 0 obj +<< /S /GoTo /D (section.1.7) >> +endobj +36 0 obj +(Examples) +endobj +37 0 obj +<< /S /GoTo /D (section.1.8) >> +endobj +40 0 obj +(Protocol Implementations) +endobj +41 0 obj +<< /S /GoTo /D (section.1.9) >> +endobj +44 0 obj +(Performance) +endobj +45 0 obj +<< /S /GoTo /D (chapter.2) >> +endobj +48 0 obj +(uIP 1.0 Module Index) +endobj +49 0 obj +<< /S /GoTo /D (section.2.1) >> +endobj +52 0 obj +(uIP 1.0 Modules) +endobj +53 0 obj +<< /S /GoTo /D (chapter.3) >> +endobj +56 0 obj +(uIP 1.0 Hierarchical Index) +endobj +57 0 obj +<< /S /GoTo /D (section.3.1) >> +endobj +60 0 obj +(uIP 1.0 Class Hierarchy) +endobj +61 0 obj +<< /S /GoTo /D (chapter.4) >> +endobj +64 0 obj +(uIP 1.0 Data Structure Index) +endobj +65 0 obj +<< /S /GoTo /D (section.4.1) >> +endobj +68 0 obj +(uIP 1.0 Data Structures) +endobj +69 0 obj +<< /S /GoTo /D (chapter.5) >> +endobj +72 0 obj +(uIP 1.0 File Index) +endobj +73 0 obj +<< /S /GoTo /D (section.5.1) >> +endobj +76 0 obj +(uIP 1.0 File List) +endobj +77 0 obj +<< /S /GoTo /D (chapter.6) >> +endobj +80 0 obj +(uIP 1.0 Module Documentation) +endobj +81 0 obj +<< /S /GoTo /D (section.6.1) >> +endobj +84 0 obj +(Protothreads) +endobj +85 0 obj +<< /S /GoTo /D (section.6.2) >> +endobj +88 0 obj +(Applications) +endobj +89 0 obj +<< /S /GoTo /D (section.6.3) >> +endobj +92 0 obj +(uIP configuration functions) +endobj +93 0 obj +<< /S /GoTo /D (section.6.4) >> +endobj +96 0 obj +(uIP initialization functions) +endobj +97 0 obj +<< /S /GoTo /D (section.6.5) >> +endobj +100 0 obj +(uIP device driver functions) +endobj +101 0 obj +<< /S /GoTo /D (section.6.6) >> +endobj +104 0 obj +(uIP application functions) +endobj +105 0 obj +<< /S /GoTo /D (section.6.7) >> +endobj +108 0 obj +(uIP conversion functions) +endobj +109 0 obj +<< /S /GoTo /D (section.6.8) >> +endobj +112 0 obj +(Variables used in uIP device drivers) +endobj +113 0 obj +<< /S /GoTo /D (section.6.9) >> +endobj +116 0 obj +(The uIP TCP/IP stack) +endobj +117 0 obj +<< /S /GoTo /D (section.6.10) >> +endobj +120 0 obj +(Architecture specific uIP functions) +endobj +121 0 obj +<< /S /GoTo /D (section.6.11) >> +endobj +124 0 obj +(uIP Address Resolution Protocol) +endobj +125 0 obj +<< /S /GoTo /D (section.6.12) >> +endobj +128 0 obj +(Configuration options for uIP) +endobj +129 0 obj +<< /S /GoTo /D (section.6.13) >> +endobj +132 0 obj +(uIP TCP throughput booster hack) +endobj +133 0 obj +<< /S /GoTo /D (section.6.14) >> +endobj +136 0 obj +(Local continuations) +endobj +137 0 obj +<< /S /GoTo /D (section.6.15) >> +endobj +140 0 obj +(Timer library) +endobj +141 0 obj +<< /S /GoTo /D (section.6.16) >> +endobj +144 0 obj +(Clock interface) +endobj +145 0 obj +<< /S /GoTo /D (section.6.17) >> +endobj +148 0 obj +(Protosockets library) +endobj +149 0 obj +<< /S /GoTo /D (section.6.18) >> +endobj +152 0 obj +(Memory block management functions) +endobj +153 0 obj +<< /S /GoTo /D (section.6.19) >> +endobj +156 0 obj +(DNS resolver) +endobj +157 0 obj +<< /S /GoTo /D (section.6.20) >> +endobj +160 0 obj +(SMTP E-mail sender) +endobj +161 0 obj +<< /S /GoTo /D (section.6.21) >> +endobj +164 0 obj +(Telnet server) +endobj +165 0 obj +<< /S /GoTo /D (section.6.22) >> +endobj +168 0 obj +(Hello, world) +endobj +169 0 obj +<< /S /GoTo /D (section.6.23) >> +endobj +172 0 obj +(Web client) +endobj +173 0 obj +<< /S /GoTo /D (section.6.24) >> +endobj +176 0 obj +(Web server) +endobj +177 0 obj +<< /S /GoTo /D (chapter.7) >> +endobj +180 0 obj +(uIP 1.0 Data Structure Documentation) +endobj +181 0 obj +<< /S /GoTo /D (section.7.1) >> +endobj +184 0 obj +(dhcpc\137state Struct Reference) +endobj +185 0 obj +<< /S /GoTo /D (section.7.2) >> +endobj +188 0 obj +(hello\137world\137state Struct Reference) +endobj +189 0 obj +<< /S /GoTo /D (section.7.3) >> +endobj +192 0 obj +(httpd\137cgi\137call Struct Reference) +endobj +193 0 obj +<< /S /GoTo /D (section.7.4) >> +endobj +196 0 obj +(httpd\137state Struct Reference) +endobj +197 0 obj +<< /S /GoTo /D (section.7.5) >> +endobj +200 0 obj +(memb\137blocks Struct Reference) +endobj +201 0 obj +<< /S /GoTo /D (section.7.6) >> +endobj +204 0 obj +(psock Struct Reference) +endobj +205 0 obj +<< /S /GoTo /D (section.7.7) >> +endobj +208 0 obj +(psock\137buf Struct Reference) +endobj +209 0 obj +<< /S /GoTo /D (section.7.8) >> +endobj +212 0 obj +(pt Struct Reference) +endobj +213 0 obj +<< /S /GoTo /D (section.7.9) >> +endobj +216 0 obj +(smtp\137state Struct Reference) +endobj +217 0 obj +<< /S /GoTo /D (section.7.10) >> +endobj +220 0 obj +(telnetd\137state Struct Reference) +endobj +221 0 obj +<< /S /GoTo /D (section.7.11) >> +endobj +224 0 obj +(timer Struct Reference) +endobj +225 0 obj +<< /S /GoTo /D (section.7.12) >> +endobj +228 0 obj +(uip\137conn Struct Reference) +endobj +229 0 obj +<< /S /GoTo /D (section.7.13) >> +endobj +232 0 obj +(uip\137eth\137addr Struct Reference) +endobj +233 0 obj +<< /S /GoTo /D (section.7.14) >> +endobj +236 0 obj +(uip\137eth\137hdr Struct Reference) +endobj +237 0 obj +<< /S /GoTo /D (section.7.15) >> +endobj +240 0 obj +(uip\137icmpip\137hdr Struct Reference) +endobj +241 0 obj +<< /S /GoTo /D (section.7.16) >> +endobj +244 0 obj +(uip\137neighbor\137addr Struct Reference) +endobj +245 0 obj +<< /S /GoTo /D (section.7.17) >> +endobj +248 0 obj +(uip\137stats Struct Reference) +endobj +249 0 obj +<< /S /GoTo /D (section.7.18) >> +endobj +252 0 obj +(uip\137tcpip\137hdr Struct Reference) +endobj +253 0 obj +<< /S /GoTo /D (section.7.19) >> +endobj +256 0 obj +(uip\137udp\137conn Struct Reference) +endobj +257 0 obj +<< /S /GoTo /D (section.7.20) >> +endobj +260 0 obj +(uip\137udpip\137hdr Struct Reference) +endobj +261 0 obj +<< /S /GoTo /D (section.7.21) >> +endobj +264 0 obj +(webclient\137state Struct Reference) +endobj +265 0 obj +<< /S /GoTo /D (chapter.8) >> +endobj +268 0 obj +(uIP 1.0 File Documentation) +endobj +269 0 obj +<< /S /GoTo /D (section.8.1) >> +endobj +272 0 obj +(apps/hello-world/hello-world.c File Reference) +endobj +273 0 obj +<< /S /GoTo /D (section.8.2) >> +endobj +276 0 obj +(apps/hello-world/hello-world.h File Reference) +endobj +277 0 obj +<< /S /GoTo /D (section.8.3) >> +endobj +280 0 obj +(apps/resolv/resolv.c File Reference) +endobj +281 0 obj +<< /S /GoTo /D (section.8.4) >> +endobj +284 0 obj +(apps/resolv/resolv.h File Reference) +endobj +285 0 obj +<< /S /GoTo /D (section.8.5) >> +endobj +288 0 obj +(apps/smtp/smtp.c File Reference) +endobj +289 0 obj +<< /S /GoTo /D (section.8.6) >> +endobj +292 0 obj +(apps/smtp/smtp.h File Reference) +endobj +293 0 obj +<< /S /GoTo /D (section.8.7) >> +endobj +296 0 obj +(apps/telnetd/shell.c File Reference) +endobj +297 0 obj +<< /S /GoTo /D (section.8.8) >> +endobj +300 0 obj +(apps/telnetd/shell.h File Reference) +endobj +301 0 obj +<< /S /GoTo /D (section.8.9) >> +endobj +304 0 obj +(apps/telnetd/telnetd.c File Reference) +endobj +305 0 obj +<< /S /GoTo /D (section.8.10) >> +endobj +308 0 obj +(apps/telnetd/telnetd.h File Reference) +endobj +309 0 obj +<< /S /GoTo /D (section.8.11) >> +endobj +312 0 obj +(apps/webclient/webclient.c File Reference) +endobj +313 0 obj +<< /S /GoTo /D (section.8.12) >> +endobj +316 0 obj +(apps/webclient/webclient.h File Reference) +endobj +317 0 obj +<< /S /GoTo /D (section.8.13) >> +endobj +320 0 obj +(apps/webserver/httpd-cgi.c File Reference) +endobj +321 0 obj +<< /S /GoTo /D (section.8.14) >> +endobj +324 0 obj +(apps/webserver/httpd-cgi.h File Reference) +endobj +325 0 obj +<< /S /GoTo /D (section.8.15) >> +endobj +328 0 obj +(apps/webserver/httpd.c File Reference) +endobj +329 0 obj +<< /S /GoTo /D (section.8.16) >> +endobj +332 0 obj +(lib/memb.c File Reference) +endobj +333 0 obj +<< /S /GoTo /D (section.8.17) >> +endobj +336 0 obj +(lib/memb.h File Reference) +endobj +337 0 obj +<< /S /GoTo /D (section.8.18) >> +endobj +340 0 obj +(uip/lc-addrlabels.h File Reference) +endobj +341 0 obj +<< /S /GoTo /D (section.8.19) >> +endobj +344 0 obj +(uip/lc-switch.h File Reference) +endobj +345 0 obj +<< /S /GoTo /D (section.8.20) >> +endobj +348 0 obj +(uip/lc.h File Reference) +endobj +349 0 obj +<< /S /GoTo /D (section.8.21) >> +endobj +352 0 obj +(uip/psock.h File Reference) +endobj +353 0 obj +<< /S /GoTo /D (section.8.22) >> +endobj +356 0 obj +(uip/pt.h File Reference) +endobj +357 0 obj +<< /S /GoTo /D (section.8.23) >> +endobj +360 0 obj +(uip/timer.c File Reference) +endobj +361 0 obj +<< /S /GoTo /D (section.8.24) >> +endobj +364 0 obj +(uip/timer.h File Reference) +endobj +365 0 obj +<< /S /GoTo /D (section.8.25) >> +endobj +368 0 obj +(uip/uip-neighbor.c File Reference) +endobj +369 0 obj +<< /S /GoTo /D (section.8.26) >> +endobj +372 0 obj +(uip/uip-neighbor.h File Reference) +endobj +373 0 obj +<< /S /GoTo /D (section.8.27) >> +endobj +376 0 obj +(uip/uip-split.h File Reference) +endobj +377 0 obj +<< /S /GoTo /D (section.8.28) >> +endobj +380 0 obj +(uip/uip.c File Reference) +endobj +381 0 obj +<< /S /GoTo /D (section.8.29) >> +endobj +384 0 obj +(uip/uip.h File Reference) +endobj +385 0 obj +<< /S /GoTo /D (section.8.30) >> +endobj +388 0 obj +(uip/uip\137arch.h File Reference) +endobj +389 0 obj +<< /S /GoTo /D (section.8.31) >> +endobj +392 0 obj +(uip/uip\137arp.c File Reference) +endobj +393 0 obj +<< /S /GoTo /D (section.8.32) >> +endobj +396 0 obj +(uip/uip\137arp.h File Reference) +endobj +397 0 obj +<< /S /GoTo /D (section.8.33) >> +endobj +400 0 obj +(uip/uipopt.h File Reference) +endobj +401 0 obj +<< /S /GoTo /D (section.8.34) >> +endobj +404 0 obj +(unix/uip-conf.h File Reference) +endobj +405 0 obj +<< /S /GoTo /D (chapter.9) >> +endobj +408 0 obj +(uIP 1.0 Example Documentation) +endobj +409 0 obj +<< /S /GoTo /D (section.9.1) >> +endobj +412 0 obj +(dhcpc.c) +endobj +413 0 obj +<< /S /GoTo /D (section.9.2) >> +endobj +416 0 obj +(dhcpc.h) +endobj +417 0 obj +<< /S /GoTo /D (section.9.3) >> +endobj +420 0 obj +(example-mainloop-with-arp.c) +endobj +421 0 obj +<< /S /GoTo /D (section.9.4) >> +endobj +424 0 obj +(example-mainloop-without-arp.c) +endobj +425 0 obj +<< /S /GoTo /D (section.9.5) >> +endobj +428 0 obj +(hello-world.c) +endobj +429 0 obj +<< /S /GoTo /D (section.9.6) >> +endobj +432 0 obj +(hello-world.h) +endobj +433 0 obj +<< /S /GoTo /D (section.9.7) >> +endobj +436 0 obj +(resolv.c) +endobj +437 0 obj +<< /S /GoTo /D (section.9.8) >> +endobj +440 0 obj +(resolv.h) +endobj +441 0 obj +<< /S /GoTo /D (section.9.9) >> +endobj +444 0 obj +(smtp.c) +endobj +445 0 obj +<< /S /GoTo /D (section.9.10) >> +endobj +448 0 obj +(smtp.h) +endobj +449 0 obj +<< /S /GoTo /D (section.9.11) >> +endobj +452 0 obj +(telnetd.c) +endobj +453 0 obj +<< /S /GoTo /D (section.9.12) >> +endobj +456 0 obj +(telnetd.h) +endobj +457 0 obj +<< /S /GoTo /D (section.9.13) >> +endobj +460 0 obj +(uip-code-style.c) +endobj +461 0 obj +<< /S /GoTo /D (section.9.14) >> +endobj +464 0 obj +(uip-conf.h) +endobj +465 0 obj +<< /S /GoTo /D (section.9.15) >> +endobj +468 0 obj +(webclient.c) +endobj +469 0 obj +<< /S /GoTo /D (section.9.16) >> +endobj +472 0 obj +(webclient.h) +endobj +473 0 obj +<< /S /GoTo /D [474 0 R /Fit ] >> +endobj +477 0 obj << +/Length 382 +/Filter /FlateDecode +>> +stream +x趰RMO蹳 界W{堊鰘郀@獷�%7訡毺�$[菷潀癉擩�芻亏企< �C p芶P贐誨?S鶮苨Y婮�匼y�紖\H!嬜K豞p杸乆Cn孎OV"踻NW團�C�V╈帕 W憎!畇1搓�7Sp拯坲腴T\躭^+w遣z\/瓽iv(l� m 潳�5�"��f�)�w�%墩 鳽秨Λ1y&儺砲I9葍��叝鹶& +�h賃q駽丌禿A鼻纅0�!5H釭�"L电sNl� 缅!煌圉湾搇拘}5y驯廕�<赿騳]6S藯}fZ脓n~癩襰徻踑獙翗iDeb焨�.~鋨�鹷龓蹙{槷荻輖鞆硄囕確歘)�2彿趶Cy玷饝Y��w醅賓ndstream +endobj +474 0 obj << +/Type /Page +/Contents 477 0 R +/Resources 476 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +>> endobj +475 0 obj << +/Type /XObject +/Subtype /Form +/FormType 1 +/PTEX.FileName (../sicslogo.pdf) +/PTEX.PageNumber 1 +/PTEX.InfoDict 487 0 R +/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] +/BBox [0.00000000 0.00000000 242.00000000 58.00000000] +/Resources << +/ProcSet [ /PDF ] +/ExtGState << +/R4 488 0 R +>>>> +/Length 489 0 R +/Filter /FlateDecode +>> +stream +x渳ZY�3蛵|�)t倸軛c豔h�� 羞�=�L苍R描嘨涫錇铁�3]鶛鴚�齳�?o峡��憻�鱄蛀?�|酏慘NW順擣ms実.i<�讱龑甯决暻钞|妃鼉哣痀�-�+昰顈\}=[nW橄�0|鼁�6蛘巛徺絘v筳XW綎 ? e^肎�莢T癟�l8�勽ra ⅲ\�:渎\鞭�)q菧7箰胴譆o]W岩А鋣往|�:p^6 /dK瀈 螦綰嚇�V赭R�4c鰜%�)}餳邹う拰�=f Xg挎!N 璶�擔l�8'oqm嫗揶 焔涏fJ竴�7 秵#韔(A%夢4痎��%�% S敀0}洸啋l饍l蜺J�)Uc�$骷襳坢'嶸F鬙�[頽<4Xv>T瀱 +b�3椄�vn朸!嗭6�9铪�)�袬㎎�"祦1�7詠Y�&c妋粉� + j腹葩�陛j� +�'愿謦篁w貾@ F╜摟Υ�烀抙 �蘫熿ZやZOg~量b�! +睌>n+.%鏺m封 +�"骋�1|粉奒.洩龢- +vV f钮Lp~�; ;�3�贚醖%藙軖K阢 + Уf�%� 瀯f\d9�"5V櫃偄~�0&�9泐匎晍O5�6豯绔.穉嘺棉pl袱 姀戁慘�0w镥aV匕壎�6� /6� 蘈W_&Dz�巬凁贴燾萬Aj俎%嘯ャv噶�)澊哯终萉M顩|�i�'p欲W眵魛黩辮蹲靬鲀�/�a绡愿d樖峩8&荖0贳F�+�ll荲�[l"p{<寝/桦1v錳紈-.� {袄N���Mn襈aJ 缢亰壼a柺� hdK�1�$村�$牱D/,橏\�$鸤�1 =滑曕鄉� �樜佪0u/灹�+赉繧k!W � �1�#鐜\孀j�.7f�胿'鉞Sa隶戱掑AF鱢8c�" �d�R炴�0孍��q氼1a藚3淝�I鄜轱貑�6 +:��陘6�6鬉 4 剹佘"鷔助�怅鼬ULY�畬$葶_彜C.笸P[h(塰CA� 趺賮 +xo甘q葶遯謆���+nZ a陝�槾O韉斁cR歶柾葉e肐e�1�%Y��9侰m4ダ墤oC捠K1 �2`g*踪P莥贉渣飪�e皿 慡dc偆��)�'{X丠 龣ch�f鎎膥r莨~牌п麔q�粷&Od3K�恫y簻燬徇�婁e.'桀煐慒綸"lc�眀緶\@鱮裛n.'� + 黢s彛 l��8sf羮h‐&鷜�w楲沁E�;<4t&枨鉧笲Odn 蝳喯妙思磅俴TBy紷铞⒘黕N芍2��=_4�聳Esy7l]�0狳DK畐?o_她鄴雟 ��レ[嫅淢�+S4棱u譏谢<>qLH�3會l犅钭) M渌� 1� �h腑犝JnV�溬#ㄅ尃S篻庍!归S癏C驂E+8遯魪唏<)�$9o艹叮~�Fo�  94�7l"au宒�4$䦷Tt]綻,L垦祝�stv妤時Y挋莵�妪霩.櫡羈z:�<杸Ib@[�摶鉔w澰\镯墿妪!d駖�86�0榅&祿﹍Eく爋冉劰衭�)餄"籅w鷯`鍪�醚!沣甛 5s D�=M撵B.]蓓2趲^麮*U�杚�!7朌~H擈圕,�!�</V垴w`讏�%�煦旺粋鶁镓莾"�肄�jCi竛龂靿{k+�2帩虣n?ps+&}`'喻{�7佾HWj-'�;RY丿錎� +�鳵J6Vt"鵮︹�G�?S $D�o=�肬倷'b�)C�1眗2y鳍�3<�rt褝漩扈 )_VA�0F侼礫愔睧u昢\nh莏\�2�>[ �:镀鯬e栦帱钠a駖藥B 衷�+も廿捐S�'庱笺}@椆秭巓豜棤g�8扑値� +>繫搛 V契{�陶�L=i薇煃e犨癝锎俱�4H :锔�)@�i樫�8C!檨�-*蚶�?Tz堎陉~��4{槚鮷u僇﹍w�?�觑開虧w揓鸻�i齈:eZ�6趍f1G?蘪j2K �'1L/�钯�1n锃漼0kp�宰�'裚�=�� 尊d牙藥g)滖帣弱�  �K%浛4竚脾 $霜>鏊�� 菃P摟╬醸��,�%铲 媅踑?KWN|K淐盤�;qVc鵍�3嗟蕋�;:u雲菤 �?唷�9J =悺枘堧1^彖�t觲 肦�媔裀碾o=_I睄牞槕侈@脗�!L钿tV�9U�4 +桦q牻駌KTKsd墔D淌W蚆馅�#W亴粥O/嘎O[��2氕鉄A妐溤 畚旿�L藊.F(�|衍�� 朚t馸>闰挱捙A刑be肊烺pf!肨砢n� �!�7^鰥唥*90.}嬚�� +鲤g.憊欼齫.]飫粵髪坘Oh簕椛}i崛灠�幜4滝�弓u�厛疪B僚d2a駲�O�%壥弰t7G<_靠犰d�-(O9�;0台Y誂廤馋锁w态�.Z糃懅鶰棈笺遫#� 潠>m錎',0榞+#雐嶁b轢_p魲唏RI涖���曊>q麸弑x8ぺa'娀蚼zT�W軱羟X+�'飃pkq渲庳�S�>�1冃襪搛鍦N?\繒3媮縆�莇浟�*J蚳皹肯披R鄯勹犰�*$E视庉t脡硿蘋扂qTvR|lGo�矱/榮>俲淛鲼踻⑨�x�)雜驚\爰 唥D��"4库鵫p搱) �*Tj�袓岉縜穻 !屽o雽蝒ndstream +endobj +487 0 obj +<< +/Producer (GNU Ghostscript 7.07) +/Creator (GNU Ghostscript 707 \(epswrite\)) +/CreationDate (2005/02/23 12:39:03) +>> +endobj +488 0 obj +<< +/Type /ExtGState +/Name /R4 +/TR /Identity +/OPM 1 +/SM 0.02 +>> +endobj +489 0 obj +3714 +endobj +478 0 obj << +/D [474 0 R /XYZ 90 757.9346 null] +>> endobj +479 0 obj << +/D [474 0 R /XYZ 90 739.9346 null] +>> endobj +476 0 obj << +/Font << /F23 482 0 R /F26 485 0 R >> +/XObject << /Im1 475 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +492 0 obj << +/Length 59 +/Filter /FlateDecode +>> +stream +x�3T0BCKsSs=Kc3呬\.卼牥;�!T谀�Hc懶设歒橀橻��� ^endstream +endobj +491 0 obj << +/Type /Page +/Contents 492 0 R +/Resources 490 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +>> endobj +493 0 obj << +/D [491 0 R /XYZ 90 757.9346 null] +>> endobj +490 0 obj << +/ProcSet [ /PDF ] +>> endobj +496 0 obj << +/Length 1823 +/Filter /FlateDecode +>> +stream +x陧[Ms�6禁W�(勦�:I隢2鉯}kz嗳姯�%yh⿹糇 +$绤剔jN姯巛缗{�. ���0窹B!酶,只+\<豲�|E诜9e�5衿JV铌�'j +蕬見w運p�9挊肉铪徟鮝莒�/�?飤晋x��8�$b\�&楙f跣钧[愓"W!�'5菻*蹨厘$��/�7�xq汗m⺳w}��錢��尧� 崓�e� �&Z � �虘峒B#!T� � +馦r$彚止Q]哽徴狺�>n麍怰�� D4ED勓碶 籉笏厮`M蝂傊e�$帠T<槒�8B:1�-@_琝帒�&廽擪[鍐&�>靨v]L砭�WE�.6矴eXQ*懷V�6� +h,t蚒�&� 鍥狹J�:摐6=&k爹ボ罱2�|聩px�5�>�)聞塆M嬍稷�"�1��7RH琍�眰u彛崑�7U琕陌淴=�+o批綵?n彌躐T祶绎蠜貊+苩輡疮劏}#蘕:)^徥黏B"�?�>逊(I�$羓蒲\5YR扨緣掍Z!嶦F�獞ゐfw▇4恹R钏囃蜰扂圖RqR劰b鮵T�% Bi熡糶� +�,P膏q碤亗 +T$Inl關岪ミ3煙焲籝�:嫻迭忊厲&/�4q4�4*)^(逿�2圻褴ㄔ�耜V紇�<謣B簈Bv销2輔2偘2�S苳e楺鍲~鸗镼{笫d禮W .q囀�8嶸瘇z_�N暒m� F獞︸掖馛�+黯!峧TE� q4冖r<h徣紀NR.囎e�$嶸婥&� %t)+猐�J/搞`墩斩�姐�� Cs茄]m貪��鳔颎�7�# 厴枹3�雳 蔽�=z膶]r0�朮]j�?n�U爪讳玁�1唽1b@/狪嬍辈得�6�=Z硊/~伀p~莲GK+�L鳽#s;. +!茘�d;鰩鶙恙*�%褘酰9�KS��#�9t鶣瑽d閻(椒d�!-暭匾按G誙,}齌炯�%[?.赔G|D瓂駩nt寓2,齧P忓焘緥. GK嫳v1旔�. .)uqh� 芢<栱狷�:钩v鏷棂LIatRH礒e榲蹼癀l烫T)wj�/5s�7s嚜��9.W�跶V�专@-*C�;笹qvr仙`∠N� GK+�9L鳽's儴4t苌帏圦'诼m灯H� 5�窅暋u.VH帄Q�2偢&鬮�x蓝UW绊�6煼/歉沪阮m毳r-�5e�i}鼗蟂=湭�3逨?V�$襔�"H漻诖 � �猼忈,F牥�÷F眏I�7M 跿Q2番檘蹆Q颉(符韖[>m�筁搗^Ш'$賎`vgE艮T左�X�(V}蕚搳睲U$眿�2Ч�(R y縔R兵{�?5u_m雘,塜lBb嗛"`拹h 債�5瀢M牥廉 6奤k4y� e洦Q泾�*3禈Fㄐr縬9赼3鹻湏&Ook 痊麥J@m�*洯(顈讋�;孴�1賆� ;a�/鷆�_遦�endstream +endobj +495 0 obj << +/Type /Page +/Contents 496 0 R +/Resources 494 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +/Annots [ 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R ] +>> endobj +501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 575.2302 202.806 584.2064] +/Subtype /Link +/A << /S /GoTo /D (chapter.1) >> +>> endobj +502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 557.4621 178.1091 566.3087] +/Subtype /Link +/A << /S /GoTo /D (section.1.1) >> +>> endobj +503 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 539.6741 225.451 548.5207] +/Subtype /Link +/A << /S /GoTo /D (section.1.2) >> +>> endobj +504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 519.8288 206.3431 530.7327] +/Subtype /Link +/A << /S /GoTo /D (section.1.3) >> +>> endobj +505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 502.0408 255.0296 512.9447] +/Subtype /Link +/A << /S /GoTo /D (section.1.4) >> +>> endobj +506 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 484.2528 217.6704 495.1567] +/Subtype /Link +/A << /S /GoTo /D (section.1.5) >> +>> endobj +507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 466.4648 275.6622 477.3687] +/Subtype /Link +/A << /S /GoTo /D (section.1.6) >> +>> endobj +508 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 448.6768 168.1465 459.5807] +/Subtype /Link +/A << /S /GoTo /D (section.1.7) >> +>> endobj +509 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 430.8888 232.0759 441.7927] +/Subtype /Link +/A << /S /GoTo /D (section.1.8) >> +>> endobj +510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 415.0385 179.7529 424.0048] +/Subtype /Link +/A << /S /GoTo /D (section.1.9) >> +>> endobj +511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 386.733 198.3827 395.7092] +/Subtype /Link +/A << /S /GoTo /D (chapter.2) >> +>> endobj +512 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 368.8453 194.9958 377.8116] +/Subtype /Link +/A << /S /GoTo /D (section.2.1) >> +>> endobj +513 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 340.5398 219.2242 349.516] +/Subtype /Link +/A << /S /GoTo /D (chapter.3) >> +>> endobj +514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 320.7145 223.9867 331.6184] +/Subtype /Link +/A << /S /GoTo /D (section.3.1) >> +>> endobj +515 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 294.3466 229.456 303.3229] +/Subtype /Link +/A << /S /GoTo /D (chapter.4) >> +>> endobj +516 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 276.5786 221.8247 285.4252] +/Subtype /Link +/A << /S /GoTo /D (section.4.1) >> +>> endobj +517 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 248.1535 181.7751 257.1297] +/Subtype /Link +/A << /S /GoTo /D (chapter.5) >> +>> endobj +518 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 230.3854 193.6207 239.2321] +/Subtype /Link +/A << /S /GoTo /D (section.5.1) >> +>> endobj +519 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 201.9603 239.3289 210.9365] +/Subtype /Link +/A << /S /GoTo /D (chapter.6) >> +>> endobj +520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 184.1922 179.2149 193.0389] +/Subtype /Link +/A << /S /GoTo /D (section.6.1) >> +>> endobj +521 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 164.347 179.7727 175.2509] +/Subtype /Link +/A << /S /GoTo /D (section.6.2) >> +>> endobj +522 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 146.559 237.8845 157.4629] +/Subtype /Link +/A << /S /GoTo /D (section.6.3) >> +>> endobj +523 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 130.8282 235.1242 139.6749] +/Subtype /Link +/A << /S /GoTo /D (section.6.4) >> +>> endobj +524 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 113.0402 236.3901 121.8869] +/Subtype /Link +/A << /S /GoTo /D (section.6.5) >> +>> endobj +525 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 93.195 229.0275 104.0989] +/Subtype /Link +/A << /S /GoTo /D (section.6.6) >> +>> endobj +500 0 obj << +/D [495 0 R /XYZ 90 604.4538 null] +>> endobj +494 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +528 0 obj << +/Length 2844 +/Filter /FlateDecode +>> +stream +x陧淜s廴秋�8奤犰�{圬�&q知浒賀Q$$盉� + 町縸樍`�鲌貨梢AWwqC�M� +�R\)a\V帅+\=�?�xEs<骊豢PSd$曊蛚gA$(≌完珉鮶鏊望奍崍懼J7�鴛箢阃琏+w7辆w/�$�] 甐6岟W1鯖}儹%C+NY�fs貔隉翈麪麌躋p�矚S邂頓鞧�)�虘彳9登╄p�,:館諎阢擧挽� |}з溭溯v岂醑3"齛m遶�?n棈}wx�J%2T�*驗Q�1R�聦侱彻励|~饺 a�樳 傮涁j�+D鈷擂烡!e太�$�朴�炡泫�!鋤盻/�6趿y<�+鱦� 卓畻�縚w餚'+尐皅D��"�8�2坖EF�-兩连湹腣w鶬L累L齤2メ葄'0欰遑4炌浨�~7o>}卓>4嬪鄨皣媃;N夒U咗(1HJ�瀃質玚�X釀е:"hW嗅腂*旸B�梳J巴�驀q菰随各�炿妃?渝 幙>鍷壐挷�#IU厐�"HA��嶱�"咙ブ邳)炁r8箌 +崝拝塯Py夈1婿胘弹~p��>�6�&L??韜蚽观$$禙厺X�1�$霆B═趮�36庻�&檂嘫&溒訸ぬ 9� $莢騔歫zU�: 哽秏1|8�籫W]]茼嘕�H.冖7向鐴骕暳�籋4r轾畝罍Fp侷M璾p�,湊蒙pRf'昂gp�找�1輯鎞�;><>齄n�;4��17鶖钠薓�冀��/�/>�)%斊h 訕Zk莹骉B'S墔潷^牪Wy*梗蝻诲b鰪汋龈认盌姃萅絕U娳� 骓**庩甲=� + +�=獱`轘km� 尾 +9湼�Z!諣颞 +囮蛯夒鮏_ 7牖齜�錯鐳勐弖d%P旴�I术8� ě� 瀸乛鴇ぶ:z硔M犆⿻VH償]�痦U_�'�妖骘g_/杣 +癋阼萅`�*e缕GQ]X}�< �> ┑庈�:t8橽A愌T萿狜畆鋠+鳦K�%秐`谾F� +)薕糺藔壜(� �癙�#`良е:`橱汙嚀乪蚃丽*瑅纞v朙法暑觔粁阭S�$U�斠Tq欅J^U杍;)趯}惰闫漟0a建惎腣�.偝{舭咯�墭妾罏S鰧c镯窍幃}�觑[7鹀�%8#w +据-忢螚k孖� + 釾�*%覹郩厛�<幝&4寅珤i�#涞Wz��T]��-揩清篁鯼驪枪闧最雧組锷P雾!a�"证7全 +!嗘燪実{韨9 �.溡闹W榢痌剡尼嘔�F薁rPR錭�� k�玉�1�E懝~姜lh�E{$B�H硹豶$f'B翱iKRf'W�-�孬埇眎濿匪圂韗辟淏牥踩p緳撰 +QR!慥D屆<檬%s�蘣b笋樰憜齅瓕v/4M�拸�<}钙H低啾锾p鞺�囜:庱|噆(�擿J[蔿�9靜*斬肈�-�斅C鵗?葺v鲿'旽� Q獖}gJBJd��%s�蘣b搜ú4傼� 僭P;!�兪�(=屜囆唣: )FTbY臹3啁霆Bp莘�5'汨.{1��[鸯 ;剡膫I稴UUh} *迁�浇決|}�?匲fW,旉*鰹糙� +ARN悺J彛<{:≡t倷Ml9:砡亐齅,爒0L椸霼牺贤)DZ[JjU�.3輱^U�,t7嶣混�碆ih碁仃he賫^剡訸j 朾π�T�嚙纟�3H稘蟊隠!酹B刟A4 +駖檮r:0 �4卞樚~��7眰邬炨竸d{昃mzq�,�bJ�*鰹YU!劝"Ey�8B�ps欂r8f[paSK$f坧Rhc *希�k�/壗嶤b冧ZV弊L+�朌qt梐|�(旇丵0蠅-莌鰱靜" �8-4昰�7紫匪輛{� �6vV;� 鈄U�/瑔F�;榒j榩f[天 剡幢淗�g%.{曠� \滞沩b�:﹦�)�082�式�c蔊A�!峆2羂&�嵸璿剡�2iO衡夹�TG>岂馜睬R女砄riE�胋g狴H(�抈J[伸~;靜b乨v桡dD妬弱蜷冼:J墤l7卋鳈& �*D�2 +鬁@劜8�&1卞@填諪耺�+瑀z戠Pn膈勉輓騢�(翼}骐璣G灇圌m�$m寿KK混v9鑜"uF谝� 龘N訡�柃]灀顊3�8,�-^3D罀%婍�,@R婸N_亻H滟璸萐尊,霹甡霅H!�袚谆^im�吥璑权vZ{_1j�慘Z)襘3n钻莦[�M�篱��镗f��赢位啉{示Ь壁桇O h烢?Bp軄}鳐o二C酵?賲e��Ypendstream +endobj +527 0 obj << +/Type /Page +/Contents 528 0 R +/Resources 526 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +/Annots [ 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R ] +>> endobj +529 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 728.8762 227.9221 737.7228] +/Subtype /Link +/A << /S /GoTo /D (section.6.7) >> +>> endobj +530 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 711.0772 271.2488 719.9239] +/Subtype /Link +/A << /S /GoTo /D (section.6.8) >> +>> endobj +531 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 693.1587 216.0265 702.1249] +/Subtype /Link +/A << /S /GoTo /D (section.6.9) >> +>> endobj +532 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 673.422 267.4728 684.326] +/Subtype /Link +/A << /S /GoTo /D (section.6.10) >> +>> endobj +533 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 657.6804 259.752 666.527] +/Subtype /Link +/A << /S /GoTo /D (section.6.11) >> +>> endobj +534 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 637.8241 246.4723 648.7281] +/Subtype /Link +/A << /S /GoTo /D (section.6.12) >> +>> endobj +535 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 620.0252 262.7911 630.9292] +/Subtype /Link +/A << /S /GoTo /D (section.6.13) >> +>> endobj +536 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 604.164 207.7177 613.1302] +/Subtype /Link +/A << /S /GoTo /D (section.6.14) >> +>> endobj +537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 584.4273 181.9047 595.3313] +/Subtype /Link +/A << /S /GoTo /D (section.6.15) >> +>> endobj +538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 568.5661 189.8946 577.5323] +/Subtype /Link +/A << /S /GoTo /D (section.6.16) >> +>> endobj +539 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 548.8294 208.7238 559.7334] +/Subtype /Link +/A << /S /GoTo /D (section.6.17) >> +>> endobj +540 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 531.0305 280.7632 541.9344] +/Subtype /Link +/A << /S /GoTo /D (section.6.18) >> +>> endobj +541 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 515.1692 183.21 524.1355] +/Subtype /Link +/A << /S /GoTo /D (section.6.19) >> +>> endobj +542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 497.4899 212.9779 506.3366] +/Subtype /Link +/A << /S /GoTo /D (section.6.20) >> +>> endobj +543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 479.691 180.2909 488.5376] +/Subtype /Link +/A << /S /GoTo /D (section.6.21) >> +>> endobj +544 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 460.552 179.1154 470.7387] +/Subtype /Link +/A << /S /GoTo /D (section.6.22) >> +>> endobj +545 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 444.0931 171.4939 452.9397] +/Subtype /Link +/A << /S /GoTo /D (section.6.23) >> +>> endobj +546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 426.2941 173.5465 435.1408] +/Subtype /Link +/A << /S /GoTo /D (section.6.24) >> +>> endobj +547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 397.8143 270.4022 406.7905] +/Subtype /Link +/A << /S /GoTo /D (chapter.7) >> +>> endobj +548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 377.978 245.0472 388.882] +/Subtype /Link +/A << /S /GoTo /D (section.7.1) >> +>> endobj +549 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 361.1553 269.3059 371.083] +/Subtype /Link +/A << /S /GoTo /D (section.7.2) >> +>> endobj +550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 342.3801 255.0196 353.2841] +/Subtype /Link +/A << /S /GoTo /D (section.7.3) >> +>> endobj +551 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 324.5812 241.7395 335.4851] +/Subtype /Link +/A << /S /GoTo /D (section.7.4) >> +>> endobj +552 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 307.7585 253.914 317.6862] +/Subtype /Link +/A << /S /GoTo /D (section.7.5) >> +>> endobj +553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 288.9833 221.2568 299.8872] +/Subtype /Link +/A << /S /GoTo /D (section.7.6) >> +>> endobj +554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 271.1844 239.3191 282.0883] +/Subtype /Link +/A << /S /GoTo /D (section.7.7) >> +>> endobj +555 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 253.3854 205.765 264.2894] +/Subtype /Link +/A << /S /GoTo /D (section.7.8) >> +>> endobj +556 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 235.5865 240.6335 246.4904] +/Subtype /Link +/A << /S /GoTo /D (section.7.9) >> +>> endobj +557 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 218.7638 248.3744 228.6915] +/Subtype /Link +/A << /S /GoTo /D (section.7.10) >> +>> endobj +558 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 202.0459 219.0448 210.8925] +/Subtype /Link +/A << /S /GoTo /D (section.7.11) >> +>> endobj +559 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 182.1897 235.0949 193.0936] +/Subtype /Link +/A << /S /GoTo /D (section.7.12) >> +>> endobj +560 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 164.3907 250.5866 175.2947] +/Subtype /Link +/A << /S /GoTo /D (section.7.13) >> +>> endobj +561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 146.5918 246.1633 157.4957] +/Subtype /Link +/A << /S /GoTo /D (section.7.14) >> +>> endobj +562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 128.7928 261.6649 139.6968] +/Subtype /Link +/A << /S /GoTo /D (section.7.15) >> +>> endobj +563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 110.9939 273.8294 121.8978] +/Subtype /Link +/A << /S /GoTo /D (section.7.16) >> +>> endobj +564 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 93.195 233.4407 104.0989] +/Subtype /Link +/A << /S /GoTo /D (section.7.17) >> +>> endobj +526 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +567 0 obj << +/Length 2549 +/Filter /FlateDecode +>> +stream +x陧淽s愣嗭�+xi_器G.�&欘L�6牖Lf菛�+Me藭鋖箫  +饋蒦跑儋祃絳潍�l�惼郌 � 悴Y?^徭孆馩W�?讲席R流wW�?R�d$曂葭緜$HPB浕童�蟱?鼃黢娣� 'IC�-�=粉砗_齪:x侷艺�险醘c峾嘎�-毌�寛1磞尖� 哽�>^�+詑O��◆:8� 佻╮蝱Q髟駤捜 嫒pn_;弹T养襓蛞� 阇D攥劺�/荤O珲除w�9蕃亚篑e}v�i?非鰅較&BE�(�$匠�D癈*$沂鏌ZD�骑蛩E斳高:斾爜兗錒8絣(儧 厰1oPD玃鐴濨)|�<Z灋&A�μ4I�刕�&!恉� +虿拑�!剼� 詏帢��0���8�1 +$祾M诮@ULRi熷實].B0臔!bV藂菿慢鎹哛I$敤q8�<嚹q}X飛碛閨n'懆�1\4i�塣U遍I拣�$�#塦圷-G�(�龀eWT#.�v+b�5"D蠾W腁�搽A俶/C� �踸�zX��$废幪��@(攛倷d礮々?羱s�$鰲'堚�暶峃羗; 7%汇41U沫WU糋躌�b軤P"n`&Y-嚊.�鰶夫v5T�6栆vlO圐稔藣��3*鈿�&祽�儶鈻*倀7岇.a��H動薺9M塂高虂O劐�!FTPTE8潃捅jR姜�6赸奝|E0浆V彚 E羱3Ea「F鉅r$姅挠泫��g蔪h铣圴�掀zU舉8賊匈榖 1@,頞笼鎺墱 F壃�8�壊L鈜墛嫟餶$霆娝癈5补$�#塦圷-Gbq� +�7桪蕫爒撹T�*%褴顭隗骣詽廘Z$ +�f眡yf霆U*僨嬖�"0勨�傞e�啿�!豲.哫 EY 肁�0辕c笣劇5﹨"喗4b榋]哖|C0浆柮案I鳑�!资䴕箚1 *嚒)a杩NCR冥&rU�+UQ仂�&�-菛誶鱩鄜驨Q嘎v�)j*�)磉�,8a$T贂iR姜�5槡}�B笶霖瞆棱v 躱�(╙eJS!pPyIB`x�2>�2 {鈴塱R#9厓梐�稄G嗊 pPD80‖V溎E嗬~s乧墚'k#^/R�7Z醡篓gT鱢獛-始y�*旳讥嗊 oPD�70‖栥瓁�躱.oD趨cm|�"�鉽j徔�q�o风篌f叠矝8�c墪�讒`�改窕� �'�舠Y闪V躛浲d嵸銎䦅`貍视七@踲m�`S3E躾U舠鄊dF垉蔶9鎶楘例鏉B0M靲Ej� *蠝�櫅2篿l a嶄� 獖_�;.�72�>�览"}`^Y-G_q'�7w葥 1F+D*彑tw窂磴� 菗�7` q唘�6蠎T彅{^劁;� 黰pB袴8羋砕吴�躱嫘�秇呁A遒T6窊�4Z�&m^d砏U@戹-@闡{脼讶�7FG孊9GF翗砕幯鉃躱頗J竇絍Nx懣� !�8� J墑半澶uar�"豟溮囁4�鍄Y┃褦鐄ㄙL嵈 X]怪覊�%嫇鎢N怭8�,撹5�(@L�-朇 蛝!鍱aq趩:醴�坆\|�蹎D +�輢嚎+狀頾艶鬏硈ш柵�6伽;P躥諳鞸{�?�G媪邲黠脙輊�/䴖顂9齏�e逹驚麄豉唺雰揩j~椓�?唟 �/鞸鵹蔽Z捪�Sq�endstream +endobj +566 0 obj << +/Type /Page +/Contents 567 0 R +/Resources 565 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +/Annots [ 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R ] +>> endobj +569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 726.8189 253.9141 737.7228] +/Subtype /Link +/A << /S /GoTo /D (section.7.18) >> +>> endobj +570 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 709.0199 255.0202 719.9239] +/Subtype /Link +/A << /S /GoTo /D (section.7.19) >> +>> endobj +571 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 691.221 256.6839 702.1249] +/Subtype /Link +/A << /S /GoTo /D (section.7.20) >> +>> endobj +572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 674.3983 259.9907 684.326] +/Subtype /Link +/A << /S /GoTo /D (section.7.21) >> +>> endobj +573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 646.9995 222.7212 655.9757] +/Subtype /Link +/A << /S /GoTo /D (chapter.8) >> +>> endobj +574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 627.1632 313.2008 638.0671] +/Subtype /Link +/A << /S /GoTo /D (section.8.1) >> +>> endobj +575 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 609.3643 313.7588 620.2682] +/Subtype /Link +/A << /S /GoTo /D (section.8.2) >> +>> endobj +576 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 591.5653 268.479 602.4693] +/Subtype /Link +/A << /S /GoTo /D (section.8.3) >> +>> endobj +577 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 573.7664 269.0369 584.6703] +/Subtype /Link +/A << /S /GoTo /D (section.8.4) >> +>> endobj +578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 555.9674 259.1837 566.8714] +/Subtype /Link +/A << /S /GoTo /D (section.8.5) >> +>> endobj +579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 538.1685 259.7417 549.0724] +/Subtype /Link +/A << /S /GoTo /D (section.8.6) >> +>> endobj +580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 520.3696 266.3666 531.2735] +/Subtype /Link +/A << /S /GoTo /D (section.8.7) >> +>> endobj +581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 502.5706 266.9246 513.4746] +/Subtype /Link +/A << /S /GoTo /D (section.8.8) >> +>> endobj +582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 484.7717 274.6654 495.6756] +/Subtype /Link +/A << /S /GoTo /D (section.8.9) >> +>> endobj +583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 466.9727 275.2234 477.8767] +/Subtype /Link +/A << /S /GoTo /D (section.8.10) >> +>> endobj +584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 449.1738 297.8981 460.0777] +/Subtype /Link +/A << /S /GoTo /D (section.8.11) >> +>> endobj +585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 431.3749 298.4561 442.2788] +/Subtype /Link +/A << /S /GoTo /D (section.8.12) >> +>> endobj +586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 413.5759 297.1911 424.4798] +/Subtype /Link +/A << /S /GoTo /D (section.8.13) >> +>> endobj +587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 395.777 297.7491 406.6809] +/Subtype /Link +/A << /S /GoTo /D (section.8.14) >> +>> endobj +588 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 377.978 281.6994 388.882] +/Subtype /Link +/A << /S /GoTo /D (section.8.15) >> +>> endobj +589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 362.2364 234.4271 371.083] +/Subtype /Link +/A << /S /GoTo /D (section.8.16) >> +>> endobj +590 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 344.4374 234.985 353.2841] +/Subtype /Link +/A << /S /GoTo /D (section.8.17) >> +>> endobj +591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 324.5812 264.1452 335.4851] +/Subtype /Link +/A << /S /GoTo /D (section.8.18) >> +>> endobj +592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 306.7823 249.2113 317.6862] +/Subtype /Link +/A << /S /GoTo /D (section.8.19) >> +>> endobj +593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 288.9833 219.8818 299.8872] +/Subtype /Link +/A << /S /GoTo /D (section.8.20) >> +>> endobj +594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 271.1844 235.9316 282.0883] +/Subtype /Link +/A << /S /GoTo /D (section.8.21) >> +>> endobj +595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 253.3854 220.4398 264.2894] +/Subtype /Link +/A << /S /GoTo /D (section.8.22) >> +>> endobj +596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 235.5865 232.6138 246.4904] +/Subtype /Link +/A << /S /GoTo /D (section.8.23) >> +>> endobj +597 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 217.7875 233.1718 228.6915] +/Subtype /Link +/A << /S /GoTo /D (section.8.24) >> +>> endobj +598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 199.9886 263.0497 210.8925] +/Subtype /Link +/A << /S /GoTo /D (section.8.25) >> +>> endobj +599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 182.1897 263.6077 193.0936] +/Subtype /Link +/A << /S /GoTo /D (section.8.26) >> +>> endobj +600 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 164.3907 245.9038 175.2947] +/Subtype /Link +/A << /S /GoTo /D (section.8.27) >> +>> endobj +601 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 146.5918 224.8631 157.4957] +/Subtype /Link +/A << /S /GoTo /D (section.8.28) >> +>> endobj +602 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 128.7928 225.4211 139.6968] +/Subtype /Link +/A << /S /GoTo /D (section.8.29) >> +>> endobj +603 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 110.9939 247.5479 121.8978] +/Subtype /Link +/A << /S /GoTo /D (section.8.30) >> +>> endobj +604 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 93.195 242.5666 104.0989] +/Subtype /Link +/A << /S /GoTo /D (section.8.31) >> +>> endobj +568 0 obj << +/D [566 0 R /XYZ 90 757.9346 null] +>> endobj +565 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +607 0 obj << +/Length 1649 +/Filter /FlateDecode +>> +stream +x陧沒o�6嗭�+x_樸7臹nk�X返�+�!u斱�c{��~I擨&歸�A`;~u�+濭鼝妶�ぅ茊 �w�>�?繛叙跆~?�?�'?絙lSh~跠PKF氝|竄M)国:�8兏�05蔉r_芹敷黝藋�#X怽Q椺熒噺軽+o&sSI鬬?�0t7尫謸鲹亢8䦆鎬軝Ra"�1斫7"髡⺳屑嬩�l劙g响筳譄<廚綰�"w�鎙:搾\莜v?龠刊�;紲螛忽镛辗蹙�,赉鯼俛�*帰躺賢"�贫�-Al[w匋�/G-*�/=誀�n香H�9゛� %叓妆H5V舔骕)肻hU�盪鶂祈铕蛊TjgNa ?&(6LWC�?>�(愆[6夊逛Y.羭#罷F`蛒霻L儡92g嬳骣)lJ�硹X�=叧UL2﹑ォ簗~<倣亳積梭╮<蛮lX7`薐Pt?�;9Q�螐橺~mK��雩峛膺键v}穔覃u桓揩7囯胘籌莏�9(螠ㄠ痥簇$5�8gw5俦]RZ=�嶔�5讵�&略5抦厸錬防嬆嫭癟L�9j�NU騚蠝;�榵6��{YC�/k�>I��6�5榦8甜G#�)�*- �*�0 糒稊3<僷P�鐔髰XJ�/<禹T`68韺肂h冣�剝8秖A�,C�!霌膉 尜Mmp颈s{5�;罎*@茱j�-�7蹯酸蝨茊邗ㄖ(螔曹狫f屍�(5ts!粞糂E鑩k惸蚣鎔 `颈�2吠�4� 珗imv�%}も E�3]n*f�234rs$碢Izj翃$�<�&�-榦do�+i籓臿p;UW儧v付�$v.冣p儶洌w`��8p翏t嗦Ib5鄪l� 鐂[�8遑橖��p氰�^j60W��麅6谕蒾罚�5蓯5l�]o挲酢抉洉��鷞嵺>竻_驤^0䝼呡螌暹軳櫦陬龂t[臾镯庤o�?讻�?xkQ+� 6 +endstream +endobj +606 0 obj << +/Type /Page +/Contents 607 0 R +/Resources 605 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 486 0 R +/Annots [ 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R ] +>> endobj +609 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 726.8189 243.1246 737.7228] +/Subtype /Link +/A << /S /GoTo /D (section.8.32) >> +>> endobj +610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 709.1945 238.1532 720.0984] +/Subtype /Link +/A << /S /GoTo /D (section.8.33) >> +>> endobj +611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 691.5701 251.4234 702.4741] +/Subtype /Link +/A << /S /GoTo /D (section.8.34) >> +>> endobj +612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 664.1176 244.3102 674.9967] +/Subtype /Link +/A << /S /GoTo /D (chapter.9) >> +>> endobj +613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 646.3587 159.559 657.2627] +/Subtype /Link +/A << /S /GoTo /D (section.9.1) >> +>> endobj +614 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 628.7344 160.117 639.6383] +/Subtype /Link +/A << /S /GoTo /D (section.9.2) >> +>> endobj +615 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 611.11 247.3986 622.0139] +/Subtype /Link +/A << /S /GoTo /D (section.9.3) >> +>> endobj +616 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 593.4856 260.1307 604.3896] +/Subtype /Link +/A << /S /GoTo /D (section.9.4) >> +>> endobj +617 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 577.799 182.1539 586.7652] +/Subtype /Link +/A << /S /GoTo /D (section.9.5) >> +>> endobj +618 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 560.1746 182.7119 569.1408] +/Subtype /Link +/A << /S /GoTo /D (section.9.6) >> +>> endobj +619 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 542.5502 159.4692 551.5165] +/Subtype /Link +/A << /S /GoTo /D (section.9.7) >> +>> endobj +620 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 524.9258 160.0272 533.8921] +/Subtype /Link +/A << /S /GoTo /D (section.9.8) >> +>> endobj +621 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 505.3638 155.1453 516.2677] +/Subtype /Link +/A << /S /GoTo /D (section.9.9) >> +>> endobj +622 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 487.7394 155.7033 498.6434] +/Subtype /Link +/A << /S /GoTo /D (section.9.10) >> +>> endobj +623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 472.0527 162.8862 481.019] +/Subtype /Link +/A << /S /GoTo /D (section.9.11) >> +>> endobj +624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 454.4284 163.4442 463.3946] +/Subtype /Link +/A << /S /GoTo /D (section.9.12) >> +>> endobj +625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 434.8663 192.7639 445.7703] +/Subtype /Link +/A << /S /GoTo /D (section.9.13) >> +>> endobj +626 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 417.242 170.0795 428.1459] +/Subtype /Link +/A << /S /GoTo /D (section.9.14) >> +>> endobj +627 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 401.5553 174.5026 410.5215] +/Subtype /Link +/A << /S /GoTo /D (section.9.15) >> +>> endobj +628 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.9477 383.9309 175.0605 392.8971] +/Subtype /Link +/A << /S /GoTo /D (section.9.16) >> +>> endobj +608 0 obj << +/D [606 0 R /XYZ 90 757.9346 null] +>> endobj +605 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +631 0 obj << +/Length 2360 +/Filter /FlateDecode +>> +stream +x诘]徾格=柯�6i�%壓�4�+意� 茛Md壎呎�+J份涐P瞝i譇�"@L 圀歪�,�07)�$Q艣紐�6G��髹JH鴀�".7咙鑏�=�&覎`a媓髕@獗J肏送c耧砬Sv頜� D亩|鳠强�&:醲��(TZ(w囫dy���<宬踘�Ry麟�$棊B苪矇�U湦廐�k�? 覺�(峃C�$蠷,DC燞v(Nj籣nYs&翫 +�6� k吂�1�, .� 5蔷萰隐有<�8蹥示_H拡0杋t# m?m普遟R�'V鏡-(Ь?�蝠瘘��2贰5鋆g� !O<魨I鎐`�碫�律@輫[恧悺帢|畚�;C尓T嘮閥蘄閏N奒�恇蝸KK牪镸S槀爙K�:#飜湠v檄靛掘P�奂�)蟋Y鄄9z�邘�9wm哝mE霵巊蚇D�?v<跉-噖婓0�"狒k��nO漊pZ騮珒= +埿禾�6熔︼讵2� wp佑�'c蠋"韻螿�檃d瀗瘴x幚5yNCS �樶磽劚P攜�7���=�j勊邁駌<�=-螤�"w �兗¥ 撽n茰N�#藢工�蓸z�1囼既殜А┚佯6kJj蝢旴踣铵Le樐qX&镹�餀黼o铚颌( S v騯 B海啁z跻�tE陶梫Bs/睐\a*([m恞廬V蹍�)� +�7Et騒圞��办殻G�=貵4WhA2,+鬳韻}鼓3嵹3� +罺馲n娆梪�B_茵kC$F@�嶧#j魎h頸s殀](�"�6s綤u$�#Y��榪~O� 争軘}橴鬻憻Cy"楬6sN R≦u�3Β0U呀2tBC�?Q昋孓!EW^�_郼]��蕆肠揻,萏�/�2b�R0姅�壪躮(p 譖�动Zi驴'纻. +��$胧 *>霟#k麷�瘭{訑媊@,錹跰�$擨�3� 廋毑鋇0殲=蘆�">偤衖媅][4皇鮖^i2!� 砋UG琡幎�!%�2u-�71�$do|P顓m键XO躾"裛d蒾鋥杖�I梩QRW镗6М⒎$謬/�锛倵&b鈓矼Xw凲芯�=�'Zu贫CG兠�N~fsD�8穀Q哇�1�4姃瓭荪=墰灂%B嵂fE决&"訷醀nh8SZ@� b�沲�=萂�骘�k?Vu�8緬伡Y�0�氯崡\�4��4蟉:��土n▽螅甿雚ㄤ麡姙Wwq粕坚o苮脊R抽睺~.厠�;�訑鎪 +{[7vS~璌�]矏�-AP斗m5酤�.洸v~�媺�;酗羋9廗|碙1瞭Fp潼7zo%�.句訉3喆艄' a�%�夭爛�:瀯凥 ~揋p軳:�1#爟�厍邆D{�躐鳙�~�嶼珽轝r鄷v靡q幯貢}o歐察谦馫MO5芔��?醡�拑JQ%?��?.+坻endstream +endobj +630 0 obj << +/Type /Page +/Contents 631 0 R +/Resources 629 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 633 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R ] +>> endobj +633 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [171.6432 525.9374 324.8465 548.2835] +/Subtype/Link/A<> +>> endobj +637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [243.7125 430.2503 420.8261 441.1542] +/Subtype/Link/A<> +>> endobj +638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 390.6135 195.8719 413.5822] +/Subtype /Link +/A << /S /GoTo /D (a00143) >> +>> endobj +639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 378.6583 251.5126 389.5623] +/Subtype /Link +/A << /S /GoTo /D (a00153) >> +>> endobj +640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 366.7032 241.5402 377.6071] +/Subtype /Link +/A << /S /GoTo /D (a00144) >> +>> endobj +641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 356.8053 199.199 365.6519] +/Subtype /Link +/A << /S /GoTo /D (a00145) >> +>> endobj +642 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 342.7928 199.7971 353.6968] +/Subtype /Link +/A << /S /GoTo /D (a00146) >> +>> endobj +643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.1719 342.7928 346.0872 353.6968] +/Subtype /Link +/A << /S /GoTo /D (a00149) >> +>> endobj +644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 330.8377 297.0202 341.7416] +/Subtype /Link +/A << /S /GoTo /D (a00147) >> +>> endobj +645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.3768 330.8377 448.1464 341.7416] +/Subtype /Link +/A << /S /GoTo /D (a00158) >> +>> endobj +646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.6908 318.8825 181.4861 329.7864] +/Subtype /Link +/A << /S /GoTo /D (a00142) >> +>> endobj +6 0 obj << +/D [630 0 R /XYZ 90 739.9346 null] +>> endobj +632 0 obj << +/D [630 0 R /XYZ 90 553.9527 null] +>> endobj +647 0 obj << +/D [630 0 R /XYZ 90 307.8837 null] +>> endobj +10 0 obj << +/D [630 0 R /XYZ 90 301.139 null] +>> endobj +629 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +660 0 obj << +/Length 3153 +/Filter /FlateDecode +>> +stream +x讠ZY徾F~焈1饟D +o戀'�:�o<贄$�5藽&�8晨~�:殫轳�喭觋觋�(�廾�焬鲊下(�/�;稔�飢E飥進 p鼾� 幌鯵$�g鎼8饍麌觨沗� � L6齿狈菇}/儑W锟w惝蠇徾?~簕�0,б腶庥b燁~�?A獰罴}槬颀g紉{?藗. +B鱎迃耕桌G飉SwBpn敳苍酳讻獡Yy纵*#堽掲n� S烷dNB|2� 撄i 沛逯�6熼_+~秐潰﹙靭琨�,巈7窄禘迌Ge狅/2叔q緯瀹+騌 �il服f禡贩憾酰�8牪c闅鯿'vE�- 媼~籏济孀鶧j%D陛氫+冰�◇炋 O鈭-_洰矴�芯慻k獑物O鷊劜0m熪Z�-Q欌捵`垵*W9"蘙�.']痱I0穾N媴R钶�-_湁�;c搧""?歓[o�3=#裻F@ND�!燲*B槷昧丶剒�,躙矖蟗5"�6�6實�0�2Q鞃8岞�3{講J�6!貥�畍�&僊横.婿瞝S谑黾0銁t景�荏羞|緲Z�k�)峨[{�p4�'踈 �d�7;3igZb萆[^;舛闆�)Y齫 +�6x2潁尳@L �#賲n~y驤P偷磞菟+�濵+FR7�4J脟@凂埼)翺珂呂�;yyA埘�-mmzwU4圹�2�C|辪叟�'榸-聉蚰a+*積域┼M|!S$笟聮貐"[咙Y@�7~磭��5C迗渫B栕�#怿�7楏誤�$欪w0 襺敜賒覣谰OF鱭乵��),畵7緵x謕醡s雱|0�穣�(� +涔m*橳叔詶�U 6�*^刋� +y{|矩b踮鮔�+q;�䥺}�:>漐� +fkK��8衊�+D|d諦t圢ia厊x鳡ⅷo寎8 闌Em晏�:�3賃9]峳/C��7J�*甮�Qh��Jb !z7�/�棵靄F<糬漃e�$�/�9:痋;��禸񳟵xc?{8葔泯厛囇�^形嵛Vg呤'埀2熊V�4鐬}*喢艝�%x鈷�'I0哬蕰]M5郪骄迀虸0:獁欖3垅化D鱅甦昙0唸K�#b�禹郐,�#�6W}o�4f"*屛虬O�(緼F釩餍0'鯠w� �<�販?�!Ho帬e騄拼{~^〇DC=E�<峉A喫� ��>v n稈Z盁豆��wb� ;�6�q擌鯤盅 D摮S� 纕!gR�86b� +咫呯� + +�=賣氷峖獯f筕sS1e�;.映_盰稌匝叚3O姃U[貳�>逓g琱f综趨昔狔T�3Ui�/[D�W]2&�`莸)洧五慵.'陈@2*lm�,D楼奮f��h戫厫c�,U,+崹廝� 鞵�$陣佸$X魔┼e� %n�4K薲9昌0 E涤 U䲢璶諝%Ov� �[秾(|覵/�i8蠚B-1h:r� +猾<栰�裴7湠宥q6R,eu嫗埸褃g喿氡q庲=a� O�y'9(5�(揭TH>/'孺h詼�$`蛙]d�>翣�财1`寥mrH赩-鯸�U�_碄=D*!┪K慦^瓁勽爑T:^飑]僒J1強W-騷lOふH螷]pR┩夀妃ビ厫 靐p萏j%x1撿溉難嗉�嫲y睆r71鎬循G+ !蒴姷匮m�;-潦@缅<滮鴪'檞爫�!�箖丄.d螱_3闤�(湚�&颅孽v,mw戹堏w��-Y^/嘧攩�診&籑)瑛(�7﹀�3餐圩o坄/寞%詠P瞺g��2鮄�7瞄$P�TY抄婁猂�泎�&�6�o�-㎞侊並勦 妬�%a�3烲縘OR.舔�1OjY�9#;�A裷E@陌AwT鷵DQ+羚鄴B嵮�'鲡`氈氼o.^Js�0�鈎厝狱<@槧d}硠|&��k-L嗈 链濱B]炐赽瑯榨�犔V6�* d褐刣·鳀ē�/墢弞塼鱓N榫8Ji�-ykZ鬃P葖楎dO僿縹x愌Q9H滤Ly�汭枻d聏`診u�[}朸&戝匔�簳[l肿秃V 滱:u犤珫線5s�X稭_�堻崜Wv焺n偷i{9Z 諙 t�>才V坿J闚V,鄗樗b茄琁B獉)蚺[窈l貏馺⒗釨活囿KJxVW箄脡m甘�膲,A嶯P2叺(譎�:� f被獢a笌a<尶l�ㄍ糥$≠摝D-ㄒ銳�熺��9�靛�5� 將涂穳穉5I譃qG鰇gち`R4袶�R2N缬 U鱛G�溗@@]K�#;覨桅桢}Xf酛D撼鮽N�6(3慺簰�硡VvG螒憨�$9禠謃�i徒)L�6䴘糐Jc峞,�鳎賶鮨�馬�4韶煷5腹o|K\E�6碲)揅嬋n厬�Es2ヴ楻鍯@+0h濳试樽垞�>GD楝縊�w5愖埍 +萌攑F碵鮑� S � 鐳;帯鰺B�;S懨螌@昝h8qxD3駤��T缯P袉軐#框xk%p餔OW砶�;碣颂B吨紐蹀�畱軬�(質�5成�k折鋘�伛�{銡碄M促筊[�r<掋 瀛3儻PBIP�;浖'3霘顡軠佽岗Ptす�7綍e觟�&櫞穣4礽笠鯫跠踃遧﹪赗椲�5噪据R愔蜱島?觧,.芇6�>��标�1f垠鵶"=z勺1蝉 Q菔�V 悥"螱燅89pt諰Ss� 欬cK莶�:0.峓afO珆璺畁k8瀜)'汪Yf] 枝�;FhW簏!瞏f!:椢_ 5T失V鲸麀篛�0鼾)翖_聖/貵a峾hA糪索0 %垠+T遉鰴yI2_髡�诓礿吖珛'�<漳畻湻誉滬%_a疽薤�1Kp]爷*qD?%焂kT叱+:錗V|Fu(墰撜飋江锑N-6Eq龤j��? 佫鰚'�紫9X�)a0�J蚕aJ� L$g鍰� �葞痺G�>W緎儫� nk澎{?��'o佺%j0dB铥屦i赃{�/ �h䏝偯]*墌q并��鑴媏ndstream +endobj +659 0 obj << +/Type /Page +/Contents 660 0 R +/Resources 658 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +>> endobj +661 0 obj << +/D [659 0 R /XYZ 406.9776 658.2409 null] +>> endobj +14 0 obj << +/D [659 0 R /XYZ 90 637.7268 null] +>> endobj +662 0 obj << +/D [659 0 R /XYZ 230.4521 230.3912 null] +>> endobj +18 0 obj << +/D [659 0 R /XYZ 90 209.8771 null] +>> endobj +658 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +665 0 obj << +/Length 3063 +/Filter /FlateDecode +>> +stream +x讠]彜6騷~E?2�4岢伡%{梙#瓟KF蔆�pO�車醘鐍椓刑Ntдr筡U.��娻惀檁纳镻uw玲�?迏瞸匁瘕爿7?D拧饗St:<瀴�)粲(�忰颺�'髑( 硷嘂0鳘K3猨渉遄�?� 獂訵c�,H#/��篑Щ�?蝲沬| +憢蔟p▉轃�?.螋�摾�":twI跧{麟�?f:粿訾M脁O躼#n訉x�?僻揥蛳惮>邍仹F済蕙4�> 蛚攝��SO�-Ro�(^n4蝠R鰑�灉E3[吥A鋰9萭�!qpex擾羏簦�+� Uqj��$�䥽7�$�DA舵eZ�洞�褨硅┉Y1O�荇鱅Z�O虫-�+��*頙昆Qq�-妐|叀_�)熦j}躏�"飸��6鳌j�?�^U�9W{U岦掖-脅弟粻>岛鷮B农鲃琌Bp�5(x2B珨U軼J橔恝d�� 啫&"5�蛨I榸 墐丹�%¦^痬S�,伟�/棪吼P把`+󾭏僝厂8A忧I訌馸p謺�<笖(9隕� 簽*嫧{3p亃葼膂d硸.$�,豚d帏I慟#=�>�)�Mk鷣,3 z5抈z�毌订啉瘀盪俣J`YゞV鎯嶌p聂g93�% 声�]7鐿酫宍㎝恆@I殐羋鑌|�!+瀥轳孟贾� +L�1潙=4E讠/@蒦餞8r@顧夢巊随Z靛+�狸s�P捏q�0;�⑵�=斀�c$L匴A� z觌�84W^@Fx� 屔m迁8擅!,篤匚�A�1�]彋� �1波`賍xW�#潬 醔p��E�魝�穘峲鳳,刧/�g/歹燕N�Ni洄Y樈0,莅惘o柃恆镇f匀O~旀蓡匕X锺qC 鶢K霞颱UNf忘洀?嬵費�G喡磙(�幈C+O琞聅sL�/le0猆俨浱bp镢吜%�-膲鼿徣�,�=l\y唹V�7厽兢廰黲�#觲 菺愊�2v�輝NC齥jex嗺迿扎掳硴暵斣夸�烽B'Ez�3s蕕紁7�Of墑鵒X北 +�3棈懨�尸燔�0鮜颕L) Y{畡(SH4*�签'旮厁.忑鋃cSMm9疖�� \�茗瑉x�#酂Y]鍇S[8J羮>;�,&Tk妰嵷鐛暡�0 7倎p�9fgOc矯#L kv~(嗺幄f陿趪睧循S�1/ �L鎽櫛1餛�F]闁J�:�T s蹺窮ト37vU维吮\ +I�*k蜠郹=XK�俳鈞'�!�q惌S慶捗s刣P�"鐫� 维5Z馏mG媽噶B;`Xv8�2い�8冷~T傔}7藒輗*�yb\饽廻�;罙U�-谸59'埕k浞Ctyyf�)废=蠞獉�陵G櫷珂仮=H潙r. 皫姀飺6BN熈?杊圭xu}杠MFv<�d炽��9KY9X�8?腊舡髎Y歯凬n��$襬棪%w�>�]禨M*哬�?鞙 dW.璺Y讝孳.竀蚤[筥斿~樺駣桵�7銃潈<�3t�颏W`*E扅E�-鲎忁写聫�;仪г蜐�&龑骍稊$鐛阖FCIs鱝6蘪糷H8笸灬�憨饼邯}歲瘩簯逰髚i%E訵葁��厥�4FuO�-攪 z橌K倏�婂d]�#夐qt|jF蹣�<糞#條%燙.吾6~� � +戍箦�H.U_芍~隇�2蝝lp�!嘉�� !$可:悬[�=>嵡�*v� 唳�'+(%+眎諲炐C鮏峨\f濽 +� 鞊=�B�*�.瘞]畝� c� BJX�/[fG��桵[傢�%*ZJ�l6縭誄rd壄゜� +�+9)儇cc�&�`HF灬醫暳瞺軆肏V陃J�'A]�葛鷙�熜:猔iSuPy�踲榡嬀睅涆 楯劬揗�U﹄反救遢�,JwE灜x屢ㄝ6� 猢 鈏磋酿B�?巆�庘Y�:璺bK悠(PR�潈摕Q告d�-易垈�/�(_q`#蒼?�'[6}乀\�'臻AL馭贄蟎>絒��+坢W%^椻喿�猊[" 葉`王I椠蜉�P楞¥F娩X8LO凋�*� ;}�姳@�.fw豄K`煕Vs沓追9s跬艓筏鮩}飔耟撏� iM� (� 峒绊銪�=�J~~"6�!e`�3w癤嘡klw�}拹堆6哏�2㏕ q:W c嘆:徯宐圔O�縰4睺况e嚠�;�.\�zS�斧S榾 �*j訤杫虰ZN+`缐磖�3��彳挔R瞵v科休�x#葜\瑽澐昕�*yrBo�5q�.閶璛>蚪阙>鞪鹘�甡�8襑�8pb� 痬�"X#\a�驵dU綖炆�365< 0}�� y湏デ�+t斮秮虙濼j淈1黪v��� 7諧8}讎嶓Xu`鉲蹃輭恜Tl(N瘦嬙~喠b.榄f�7l2毻fpL��v覩jqu嘓屨.舭弰&瀲_!絯v�%錻往暻�-沇批鋦tD� 姤W口虱-懫堀-la銲败f襖ㄐ坟-�=;坬O厘玤G�鴠3 XY}K嶃�2K2请�!�楷F4]ш�$�0霹�梽lク戎霙�来0篻‵�=�%秦釬�摤皡%CN�!QB鱃Uhfb�� *��$--ざ眺瘡勆~摣脤%s鎻莍睏y徇t剘榙坏x)ExJO��炐忆�%�#黠hN~懪过�a/酖蘯搜�6黡?�2&檮扅逨穹Q莱(N<"=隺�'}A|抣阰+湔[踵_澎桤�=顋!endstream +endobj +664 0 obj << +/Type /Page +/Contents 665 0 R +/Resources 663 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 666 0 R 667 0 R 671 0 R 672 0 R 675 0 R ] +>> endobj +666 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.193 726.8189 348.017 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00146_ga4360412ee9350fba725f98a137169fe) >> +>> endobj +667 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [328.2665 649.4187 387.2547 660.3226] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +671 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.0892 410.0069 279.1746 420.9108] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +672 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [296.7031 410.0069 366.2118 420.9108] +/Subtype /Link +/A << /S /GoTo /D (a00150_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +675 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [156.7987 273.8799 207.4884 284.7838] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +668 0 obj << +/D [664 0 R /XYZ 271.0497 628.6614 null] +>> endobj +22 0 obj << +/D [664 0 R /XYZ 90 610.6547 null] +>> endobj +669 0 obj << +/D [664 0 R /XYZ 247.6771 537.3319 null] +>> endobj +670 0 obj << +/D [664 0 R /XYZ 90 520.446 null] +>> endobj +673 0 obj << +/D [664 0 R /XYZ 418.9827 401.2048 null] +>> endobj +674 0 obj << +/D [664 0 R /XYZ 90 384.319 null] +>> endobj +676 0 obj << +/D [664 0 R /XYZ 244.6786 277.033 null] +>> endobj +26 0 obj << +/D [664 0 R /XYZ 90 259.0263 null] +>> endobj +663 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +684 0 obj << +/Length 3355 +/Filter /FlateDecode +>> +stream +x讠郛�6螨|呇'圲Qwe煉�l蝁霤�Y!掕枰撚筈[IX鳤鋚8�螎ふ蝺熩e�.�7 聏W4揞 郷� `Dx疸?齦椆Y烨户Q垥�=暱9狺鴡;O�?鴳鐚�?r汩?趘?渑琮O�>4-'蹹A琾�/魁犴J嚓�� �4�=C莝U桖绘!�郓�5厌毎%T-﹤﹟�&,T~街U�昳扆坦�=7疂)t唠罕� ,t鏀鶒粻� q>頤桎臹9燋蕇粜[軀`浼氇�9頤�佺嫋禈&L搞3Q电� 醾�6c/�5�4qP释%�2闝棷�c�9� +唇�9攫梙^浯zxF9L鳈GJM糤� 榦蚛#履ピ�>�蠿�$�兲�敥謬釸]y蜗�袄脜i囄缘顉句{叱z�哟9"顇BNB!擼 �vE3ㄎ唤J澇tuk企E� �"#y�2� �<濛� 縑拓0﨎沉鍾9uy覅r轒J[2�M睄2�锠-k2�,揗皢橫��z矸雉cqa醇顼��2胻C/楨�2Ba甴/孯祬i赛p禅2 �8历狐轷5矧AXY霟1时C:[范~?^X=:氱;颫8悎瑎q妨$=!趇琸���叔G�诶�t1��2�(俭谋�#�kp壬衣�<摃<擶麈�4勛p懝#纰�漣c� 9`陿q8瘼tJ��n<4絬�6�-{欦益MU藾萗}�凿/�WKg瞏鄡P�p3怸A3o虉 踕耩m� tc熔�;鲮胄dM!� ゾ十C6�痡橨<鈧简j葵酡僥bU孹墒 + 藘>$� 軮雒蒩h犼纜:�f6Z'}↑皝�h�B猍~�<�亰牔�嵧"�< 馣m ��莦橞T莘-+騲hTV幣`�&JR卧愜j9繶橈yR救羕Q鰻萛{N鍗�:|�#邳箇FX�iRLb▍?玆槯寅胄影�6ZKQO�=\:<6_i嵓蓲=)閕癪蜁@- 娝csd擉鹃e挹藔A汉R�劚彿<纎杌i榪(Wn�?(Np聃m嬬|$�2pT撠�K^H嫾7呙G蒪�%X薕�8尦9m�,q�,桻Y +巳8蔏`&p|� 釘穽�%v噵 R�y妥�%腐v皆�*0/∨龇�/貑U踷拖B夦x鉇W9>撫8胰\jeh�,尷y S�@�/螰(h紏{~琼�,树%)浉�倄郲出锒�*)5暨�{鳁d窓献�哩\I罊蟆*:記永��飑8昪o�>y\n降�褧鼘蠉戨{D条�6�;Y潷宻M轇旲���S"痻!腃4  +惐吺磣醸慔蟒矦抢q滔"捌1蕐蔔靻G繶鴑织爭剠皶@Nn!籤87E稟"泠`芘E[b鉗L眊v鹍⑼7�戬怍�=+坫栶� `獝�-�1 � 蔂獫塴�z%璧脊Ol挿!�yx#熘+v%:絵|'ari4懬.?嚇U鮧�a彾�!驇腋�$@輔^�0縷 �D.惲胉�l� �8爰枦 f杸}N櫲/e<���=$�(矙q腹a砍5& �Q�0懿>柴$8�鰟<){.髽9O9?t9~䜩粃>榈冕楰x騧S鰵g +� +鰞*hIz<� 25#KmH肥怦� H�9� �=�,h胰鮐氺�8v�0 6焀,襛塽�p攆.K爼�Q�*活碗坼曠籌喃锂篩狟h�B撼 }Zp┘腗,涣�2oOx蝙馸道t]�>鐤�4q���捥M�,�=��?茚潧d��w黐磯敦䦷�(u�$�-檗qk�6V��:= �0Kl嶅*┎頮籠*>t傢 +�+�Go|4X竀�FM�S��9=D磳硆?yzX蘧�3荕p臋�m_Z死=#C`褚\伟瓟�0!R_�<邛工�='m�鉿x尅({冊襕>抣q龔讍剴@'奥Ra;Y驂軹迏` 珙O�;峬!kヶ=摝 v伅 B�km�7雰辝 �>╯�糦fBTX砡娟�b伈彨胁鲝妰,|o�(鑺*7%LW}袀S�a<暫^揆憊個7>惇F^`芳庙 +�i>哙d櫮?瓥c�濢�>6榼l豸 k學!i剫�4薿 loQ)x�;]� =毰�'鯹V&�# 兴稜`琇Y嵛�膱aEr讕峐V枞C鳁睪� 值JM痯PJ歏39:RU坄� ��BP鶎郕鎻Wv銩7l�ax>�!�lvh棔胶� 闼谦 竺� yJ唹�|o猷嶙� J鄧\� l}i褆,!ji��#yV屼b i跁屺蓫 u~IF曝��-��囩NEg軸>哵.咿豵 戠p5�5M*.芪氝峖q酁�+h�胮R肇z帊錚�/耏鵺遃霷nHU姕^莪��(W吷鏌|<劝*庘��/7鬙�Θu)籝�&馀媏咞E穢碐{镇�6~E笹�(_巨k?x韠荏=/杝 濵B箓x斔骐薡贩J�mh榭驭�2endstream +endobj +683 0 obj << +/Type /Page +/Contents 684 0 R +/Resources 682 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 686 0 R 687 0 R ] +>> endobj +686 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 263.5952 188.5792 286.564] +/Subtype /Link +/A << /S /GoTo /D (a00158) >> +>> endobj +687 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 253.6974 159.0703 262.544] +/Subtype /Link +/A << /S /GoTo /D (a00142) >> +>> endobj +685 0 obj << +/D [683 0 R /XYZ 412.7165 467.575 null] +>> endobj +30 0 obj << +/D [683 0 R /XYZ 90 446.1709 null] +>> endobj +688 0 obj << +/D [683 0 R /XYZ 90 242.3602 null] +>> endobj +689 0 obj << +/D [683 0 R /XYZ 90 236.5671 null] +>> endobj +682 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +692 0 obj << +/Length 3453 +/Filter /FlateDecode +>> +stream +x讠k忋恶 +*�"憐鍯侂鍜n惁勰E> K\[9Yr羧f箅;/蕭]�8嗵�3浼)懔?搝�8屳T�&?遹�#�烤骵z蠡)逻鱳�ヒM軎憡6鸊�鵱▅蒂?9�mw*魷w[:桲U鎅_65诃�8捅臀 腐{�>f贯?�雲藁噞DA鄤蹮鬟軁貜L 稀巪d榉粺~�6瘙蜐珀4 7O饑琥i�6缁@i鸊u髅菘G:�!<氈�=俁绫m�<亵'域p�s欢氤�/k^詿瞊 蜊氝啿5倃2誩I 涋濶F�MY-��3埦髛7 C﹐澈;梋�;w� 晇�%�+��8孏芶|�*�髣!�殅o +Y燅�嗊�97�3弴�/+YiILV葞�w{}#寴5┖!螹�=U洦(r +S暩�:p]儜 �8h伇^痞q仌7umr澢隄幹�>眞Ul� +S%OgGw�*奛-eB$矮m1t娀�0奨ry吽>yO<.� P碬Vkx跆璈d櫰觛振 Il�/僘O`衑g�b�4I�#鲰潵  唗Z梽�)治W�]墖S侢� CG6嚚ZH媧奨蒚�-cbK�0JL糎�匵$�抣 癗�<2i��)椙参*.欿?J釁�6 Js�y&|畤郄��:N9势 '哾 `.�&�[� 続錗ax�4 CGA 嚘�瀋騆�0蘇苊mkY211A銛�6崪wU谞�%!市瓑Y�/M WN盚KXQxgF 2#H0h嗐赦�pZCV1翸\嗼鎮鼡NP!KkK:�d厦齿蒖縙#匽錥袺"貙4�(誡 :�埻�3OR�丐4�)%�凫��馐a舵FF�漛 筶K�瘴i�T蜴|┤服!霶4\ s6蕱�%GZ懮牙`殶�%�8誽k参財(�鸊)k﹂s鐸�屏堥Z$蒸n�fQ:僪:偸4巐屐�.越剧絇>鴿x肻�砷99簙惼Dno飤~RC左斀���� 燿rC�糶桡P绗{嫆\{睕鴄� b�"V1W�8�琨Im=怙� n 靃�(��~y黟瘙莘遙縺�K嗏詬�0Z0�(馟馗l|茋".N墦�]%�\o沬瞿'+�2�+l薫闁�7y>礃_A鄚热пb=�8鲊昘XW琐/>fz� 步S伋0皑猝q撷煨�ewb詢闊(╀資樆a眘�+k忟慁A:� +|8玉膡滃m# FOeU窦��e� 禃�9�-恭伆?M+蠪 uS�婠 凤8:勓d\@)WS灩糌%鷨xU� ャa�N6醑悭 �S?簐兕 �J赘槺$久忽�4%儤n墤f朧#_�0廛 (翦�" 骔氹Au^S�眢皖O夳踇?�~欹H�L蠤黈}�$鴣 眶咼b%ф忐^鳨嬾}烳軻?V蛠�<Y┶挭鹰�7 絛�#鍐^皙_带婚�噒C楘忓�l=輕唍 +垫倠�3碭&I<邲OQI%鴴A(噿�9弎羈�7 +祣階嶘�0{K鱏摹肜�鬉峏'爥練镙蹴9b薸7鯺ifB�G6晭釯K袾愲�Dt弟蓪�"|俤箳丁捥9掫閅m縩�8Z�-�倿/襜攢e�2U![a抁j +侲)鑽鐔A絭硞緵獐顠W.�'df豸蕽鸮觋( U � X襟k7E籩索曤亝\┩餃iy汇甠5ynC曹玵�. 佸箴L薼x巒�$詸=潗檏$夋'夊?:銨bh坿W蔍Dy黤E塆求捁s�0妧�嶭q��jY�?_纈W�%9霍ぶiqJ祷�8唩�>�轻明玑c殨黰%履n�篌÷�K3~箳:蛍獑��卯p>榁薷駤甾渺i&灲铃-践)&揘蘛 凂�B5W�)�+鼪n6羓�郭�/X$毲p陭-凇J莄嘯GWv�$R垷�$: 齝�`�3&�0C蚻mkU@癥歛8暕絠�篝R箹7�n/寶吒n昨犇Y葃妕斓!䝼KXd瓒�.m噊葵扮馤鐸,g慵怰檽柼閧(zK4屵荶鬕特^M栬慗賂 _奕�抡�苆a镋蠀�(�(暫亰俉键埧�.X瘰7t瓱�4撗棅@>��L-\麍� ++*餦缊娆p鉚�5:Q_蟨|0淪们╔ы�&f� \�)%=z峺=俶矺2eRJ?gJ塯V,M4�9!c� 旗LK稌�'�,\� $ �黃Fl⒘u閡76iXp鯀舖6軸翄奻憔騝猶踔lb��r61b�%汙!+S郡}>豓郋馞y�遅孒� 謯,i狺t6)鱼麪J逍m# +歘}pvZ� 槓e�*曠 埛Z貦]勰��=奪�/�2~x觱儮琛�;y$A?祟�熟]燮嚊嘩=�F�勿�4R�%?R碤�([癇J�茉嬋T謞c邧� �8O��(暰3暷範7~~壷婳曑X达�X~Y�0y睁�*�- R靰�o ��奇麤C踪撵b麮NH嘕�竦u瑷b熺pvt�&岄t:) 髨^,�峅鹹觀y�/Bf X30鞏�-�?�輬覿鴖%?懱谰#錃�攕?�>晆16荫 �闗n�槲擳K亅�7勪斟o$劓懶�x穭�0纍yN�~�4爩�)镍�tc葊憚<覃貙慐踎弇m埝z籴Z鵿�諐W=�J頲秕��>泝蘀鸝M繗嬡4謮齬L樌簋Z綻(罔l焩� J2�緬_� タP瀌姙'扪蚚椑盷A<萚葪�螱s`癯窌簌﹞騟ndstream +endobj +691 0 obj << +/Type /Page +/Contents 692 0 R +/Resources 690 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 696 0 R 699 0 R 700 0 R 701 0 R 702 0 R 708 0 R 709 0 R 710 0 R ] +>> endobj +696 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [306.8197 468.5196 380.7619 479.4236] +/Subtype /Link +/A << /S /GoTo /D (a00153_g41aa744caa46913b3b3aedb2a4e78546) >> +>> endobj +699 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [317.8545 359.3516 356.9278 370.2556] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +700 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [437.6571 359.3516 476.7304 370.2556] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +701 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [490.9727 347.3965 513.9963 358.3004] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +702 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 335.4413 110.3636 346.3452] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +708 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.7312 226.2733 239.0183 237.1772] +/Subtype /Link +/A << /S /GoTo /D (a00147_g26a14b8dae3f861830af9e7cf1e03725) >> +>> endobj +709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [490.9727 214.3181 513.9963 225.2221] +/Subtype /Link +/A << /S /GoTo /D (a00147_g1a1bc437c09ddef238abab41d77c3177) >> +>> endobj +710 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 202.3629 126.403 213.2669] +/Subtype /Link +/A << /S /GoTo /D (a00147_g1a1bc437c09ddef238abab41d77c3177) >> +>> endobj +693 0 obj << +/D [691 0 R /XYZ 90 757.9346 null] +>> endobj +694 0 obj << +/D [691 0 R /XYZ 489.8655 533.0201 null] +>> endobj +695 0 obj << +/D [691 0 R /XYZ 90 512.29 null] +>> endobj +697 0 obj << +/D [691 0 R /XYZ 153.1029 423.8521 null] +>> endobj +698 0 obj << +/D [691 0 R /XYZ 90 403.122 null] +>> endobj +706 0 obj << +/D [691 0 R /XYZ 243.1544 290.7737 null] +>> endobj +707 0 obj << +/D [691 0 R /XYZ 90 272.1009 null] +>> endobj +711 0 obj << +/D [691 0 R /XYZ 239.7767 181.6057 null] +>> endobj +712 0 obj << +/D [691 0 R /XYZ 90 160.8756 null] +>> endobj +690 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +719 0 obj << +/Length 3312 +/Filter /FlateDecode +>> +stream +x讠Z輔�6蟔岱S�凳墥讧^�-禓伣^�{h媰b)卑朵Jr郁�,�媴)r8�3�Fo汱m�8 3雇顇�6闲潠�-宱��|耕�搈�0s苖瀳冇al促<�額k嵄.x貤鱗37钧鼤ow}钧r�Ow嗗D氊:崑齫麟飆S�T?荸衒i紋��,3涖]d��8荦_� k泭礭蹠]焓纆聸蕒斱=锷m�+珄揠8(埯Hx(瘚� 蛴镻眚緅j&9姣S&},藲�<`t}X@ K2╦'粰Y貥'ご�-村绐谠�%j曑榑b�皵\�!蜯V婢S� +籎ɡ$�:巪Е颂�螩灌?鸕骜壚r`0Uq)n緁�轺谟�ku虑竝邠�惚乛�(�5罠殻S^*B!谢抎�4 覮e涁���&=齰:aL^瘐、%�刍 +)m +扌鑵LKH椹nHE*4NI~S舒蟫%ac�( +R.闱X嫖,詆[*恱pq�1瞭~屘箈#匷;帚欌塅xQ覅謓5I纋a縌枂i猲&葿緷爷$蒏?<汊0稇YH�8紒陽 磿fsA瞥渼 +c碵帄��%褯nA.�!秫阍娿j�舿�$^oM�?`�'P �4?忐�;a"虈� �廆&]刯�fs變S賮^ZS*謹xE鍋秞鈊@%榇^悓抷�械瓰� 褹+轝4`亐倍%FRq崞嘍紧�:c鑼岹i褵Ig%��2爼 I蚴}|�'葃�� +閏煑�譴劂�鴔"TV4|倹枦ec2樵�$擔屚*|{�(衃C�GI�=灇Z�)輥_87斨 �}� x5D冪給椳�5砨0迉y懦 +乬椃mE闕L袦{np=F{d3+葬䲣匃# 徧H +�p瞶�U/|pL壐壬} �~�銊/O鐚棙绍繪V汆w巃S銻0誷驱�韰f�Ov`$2%elH荄媄%�0饴!N�驺徊腧�:棯袠w参c顾蠞皤d�ば2聖RVv(悈�ND�!�+玔�-�$6沝N矈�M70鹡�妮同倱f几3}崤柎Ko北;缝ㄨc氹� �7萭$専耗*謪*i瑑H瀭t7皧нN'琡� �>苎^畺S违Y�呰�i�(K�"鐅� 9JH�腚`fF齛*︸鞟��.�<3*IM┆�5橙崷E?~(s螐�tD箳J僌5w6m酜@~瞏+a!E�'蝼=棧"��1緦郸x_犮X=铳钅1宬-+l�=6� )鹟桯S�藓f^,�3Z偀4 �$圬( +阚/B綕惎@�Oo洿カ秈PaAa&梢6=眼X泟*觙&丱;B辈Hhf饢2�(虎r�鴬�!砊bN�;+罖d�H� b�/}骊#\/�"笑qX=r穃埀逳'鑲锾吋Q=OC鍊|.螮鮘╪H� 7s)*裶邽┈犝�4箈横で +梱�<c圕 U5腇c蠻淥飶L蒔顱 5\稄-U鰶鯹猍惍s橩%�#鯪�~捰閯幮鰎鞼a鋞⑹ 嘰hse�Rm*i)7a%豣Q銾擖儀鈣F饲 +塲蓉/k$|I鞗 +雛梍趯癴敬�碶四栐眖癷竡N浐坔勏>�驹4苳#t朶~磍 +O溊减h��哐鱦�籐<炷1A鐺}喗B(姇7�)玉I ?丞LXw�8N罞踭A轼栥璺� +鼯傦贴_w+?梕�/轣�襽磲(�\讉蜪 /芾&鐜5駮覊\瑳届+鄍`掾汶 豝�2�>疳� 蝏簐'4RT緗w�'�.( 鲏�92阖々烠~|垁��辨譶Z%勧M满� 楀痈^膩�.E秦���軃�/� H2�椝$# +搘髻抒bTFZ圬錽夂�X皆:藚B�o堪5ㄇG浔畨阃�\,煐莇T綫挆是T*\�+B f=汸郠磱���嗶g)L阎L�,��+魒n01rf香遣芺�?抠焳�'早Y>磻_醯盻臺F)'!O繥茚o,uㄦG鼄笞雜Y疉�-��'endstream +endobj +718 0 obj << +/Type /Page +/Contents 719 0 R +/Resources 717 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 648 0 R +/Annots [ 721 0 R 722 0 R 723 0 R 724 0 R 727 0 R 728 0 R 731 0 R 732 0 R 733 0 R 736 0 R 737 0 R 740 0 R ] +>> endobj +721 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [278.2206 726.8189 320.0632 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +722 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [302.4389 697.2393 347.0412 708.1433] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +723 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.3885 697.2393 413.9909 708.1433] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +724 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 631.7943 133.6061 642.6982] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +727 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8947 525.3067 439.0984 536.2106] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +728 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.3267 495.7271 266.5304 506.6311] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +731 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [335.0564 365.3292 381.8703 376.2332] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +732 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [288.7827 341.4189 335.5968 352.3228] +/Subtype /Link +/A << /S /GoTo /D (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) >> +>> endobj +733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [367.2687 323.7945 419.0639 334.6984] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef6c4140c632b6a406779342cf3b6eb6) >> +>> endobj +736 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [457.7775 229.2621 513.9963 240.166] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +737 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [105.8804 217.3069 167.6481 228.2108] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +740 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [175.3388 146.6848 217.1815 157.5888] +/Subtype /Link +/A << /S /GoTo /D (a00147_g58bb90796c1cdad3aac2ecf44d87b20e) >> +>> endobj +720 0 obj << +/D [718 0 R /XYZ 90 757.9346 null] +>> endobj +725 0 obj << +/D [718 0 R /XYZ 479.8239 634.9474 null] +>> endobj +726 0 obj << +/D [718 0 R /XYZ 90 616.451 null] +>> endobj +729 0 obj << +/D [718 0 R /XYZ 207.8864 427.1492 null] +>> endobj +730 0 obj << +/D [718 0 R /XYZ 90 408.6528 null] +>> endobj +734 0 obj << +/D [718 0 R /XYZ 237.0374 314.9924 null] +>> endobj +735 0 obj << +/D [718 0 R /XYZ 90 296.496 null] +>> endobj +738 0 obj << +/D [718 0 R /XYZ 299.1932 220.46 null] +>> endobj +739 0 obj << +/D [718 0 R /XYZ 90 201.9636 null] +>> endobj +741 0 obj << +/D [718 0 R /XYZ 507.9991 96.348 null] +>> endobj +717 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +753 0 obj << +/Length 2416 +/Filter /FlateDecode +>> +stream +x讠Ym忋�柯�'X珅誎)惁i毭鍜鲕雒錺汹诘p跺Hr�E�{g8C墥惦-娕B鋚8�<�襯!郞.r盚m缵$嬐酕,�嶄�尟B�?璷�/�8OT瞂�; 墝瓛j鞭緩d�.W蕣棼吓岽/坼圂雲慪,d杺TdJ憍簖篲堳�:懜蘯7�?埮魕}#b漡v��挑L蟢�雔詹i�3┖g姺Zhlg记�郈:瘞K# \>針;�0螽�缰嫛蟨颉8�VΜ"籗:i綎bi鱺O鉊��氿!�*#aS|�&D{ +@H鸘U罘冤�阍/⿰m +񶏲6茋�'佉蟑� 3>簮Be獏y淴�'ZL嘌s]Y[兺瓍�6Z�dl簊脰黻K;2閝囜{常轥游{%8矧迈J耜a奞蔖娏伓靂&聙.堜4蛴寴�]h��⿵諂OD哪H:F3掟$K佽S供\LbM<3豱洸u[三畆_Vi徨録肉�;陁諄槟犈D覂摰邨,�緢d)%z М/¥秔挙� k盚莀C.蟑� s葷蕔)r%�&�*4叜绾�*N葱c5瑐憵b缪粏,u�.啳b!鐞`gS彅皹2 kT齈鯻)Q榼蛳�(S┫� 慍揘t槝辩憾4X蟗�:Z;�;h�癊\c8�6�-�↖~硷俳埪7巐茺姛9H砭钰凵殎o$}朦橉&F箜?藜y篟Q:y�5畢r7@�5/3�*錈1鮐ru�蛟睉箚双�&贚巩)戂谺�kq(緪E\*�6偮qKw�r*颁@奒悔匔犄:p竫B绛芄:偐寰<斍嶧d埠�:�珟WbX蹺;T嘋/虂��hB狻��/+X扼hXf"闡LUDa氝#泡贬{n媷挌刧h椿��#u锸=鯒塽�4Mo0埳窢�2cI�(鳕颖n溛RS5�#�9h窪4摱2� 肌� |蒩衕蔆輖籺 m巏sn25v�`,�boxB�呛舐塍脦冥餒鮙,`a5K趝#�6F`胔瓏サ赡A刜�;嶴�G[3{阈�!!� GIぷ=�*�0s愀慃耚竒I2Uhz7鮘自�+蔡覊C糆S豕韰犬鄎&荼-{\ uj鴬�尖笖�昂��牺4jgJ& cR槫e峡 +'棠� 罐 N�'s +W;UD漣`鯸讛笎F砒d烟矣≦瞠銍貗�=�*洇瑨 +莎�=.鷞]�裧鰪%�)�铞h鋚&q\�v>��6豨浤旋岛G� 瀩w跚�2�-夰膪绶飷CJV�"頭差咃^q鷺猃蠒+j�*K哯BK计罏对卾-�0淬x诒鉨戶7�.�0D09经 硓撖�>�>黵陜爈E藉ナα�缁�V 鬖�8蹝帳粛Y家T�*祠I˙E[i驐A5錇卝橡,T��映L>v腄坾�>缄M慉m炏k#鹗\菔$�穜罌�ep 甤�誹d纨~歅魔亿崆�2� �!!挝�&GWV<娬噥L~>軙 慭�4z玭景槉 鉥_p鲳B埿�"�射� 雬-摱蹽�;|�嬀ls�?谉�<�Wk黁u�>�僰~vendstream +endobj +752 0 obj << +/Type /Page +/Contents 753 0 R +/Resources 751 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 756 0 R 757 0 R 758 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R ] +>> endobj +756 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [428.3065 701.7853 476.2361 712.6892] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +757 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [196.5367 677.8749 263.2659 688.7789] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +758 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [271.5773 648.2954 310.6506 659.1993] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +761 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [351.7077 575.6896 409.0322 586.5935] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +762 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.0182 551.7792 411.3428 562.6832] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9277 539.8241 153.001 550.728] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +764 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.3947 510.2445 194.1901 521.1485] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +765 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [237.5384 456.7547 294.863 467.6586] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.8254 444.7995 180.6394 455.7034] +/Subtype /Link +/A << /S /GoTo /D (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) >> +>> endobj +754 0 obj << +/D [752 0 R /XYZ 90 757.9346 null] +>> endobj +755 0 obj << +/D [752 0 R /XYZ 90 739.9346 null] +>> endobj +759 0 obj << +/D [752 0 R /XYZ 150.7616 639.4933 null] +>> endobj +760 0 obj << +/D [752 0 R /XYZ 90 621.4011 null] +>> endobj +767 0 obj << +/D [752 0 R /XYZ 90 253.0714 null] +>> endobj +34 0 obj << +/D [752 0 R /XYZ 90 246.2021 null] +>> endobj +768 0 obj << +/D [752 0 R /XYZ 200.2554 182.9016 null] +>> endobj +769 0 obj << +/D [752 0 R /XYZ 90 162.752 null] +>> endobj +751 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +777 0 obj << +/Length 2990 +/Filter /FlateDecode +>> +stream +x讠]s�6蜉緽棗J3K$Hn汌扠臆�7yh:Z�,N$�%�8緆�b$R眊n<嬢舃堪$!鼔E.�$ r鎥.n呧�5尟]��.��9�y惈H-畍唭A塰q谍m櫗�2姢Z^眭j%狎趄5疄葵薅郛貄^齸蹶馀U?K揌%p�?.~�=\lA猈a �,Y蹵' D濭嬨EI�9\伎鴊蠂 淋�!鏥%経E蠱iQf-2査騲{蠫]uEW�陵}粆賀�=��贷z%�;_�鮓*Y玼掑肨g檾U贂拧鼜�喈祧V&逎獚� 芒譈y捫b6裴`Haf�沈k伀煇袂0 醎衟Q11唵1&6愃5谛酊鵏螲)繷墺滾�'冨俟p�2Y䦟胾c'$&壂嚙父�3樊胡喲桐aァ焳A�MY\��荮藈餅_緙彤腐O�-弹i珣U�苷汜�+�<:K侾d锽e"Y箕8馣嫾v鄙7��5 鹒弨膻R� � +A,邟8D帜��瓑8窂 秲X艍aq*o?识�R曜凤�!"#9��`堊s�踔葌捗O彆┸!6JV榛m�僰"釤�8割c荜 + 熢�? +WO�晐詒�y��)桢賽J" 浦[Gaq埖造,%S阵�(�0沊$id光紟C� 泓藂��L3鈹镌q屾=yd�"�<炿鱔H!e�$� O蠭c怛錳R袊D,�贽諱IG哹0G遍N艁蹟r謉�(�9G賳蛿e爓.5鄅�<岛%<�(6t蹗��2P盶$ +)�&佃kF�>Wk蠮汳is綝*勢3U濰綰-諧�(d!l�#Qp篑�*�>Z�!&|�.去荇馑KDi�[=�捘2D�'cI寖儑l5x霰u铞玠yO濽v洵癆儜忿璂�,絮斾 螚/w$T^�﹛帠谧zS�C{魨>�穟浓{KI罚V蒧t厂豅{P[酆�2 �7F磰緪睙s%�Y�\闩x翚:K儭~i�枂Z Y�.秮[2粇贘w祅>�3轠jk襨&it�U �5SХ⊕<砯碜)(4-捛鮥�嚖憊 に穌 v抄� 淭EC�魈殝諙塰S#緀K��婃筥騶v丢f@��8晬�4魐P裢X侧鷐l@�踛摥∨䜩�u鞣&螧玸*賎-_p培�<譃6杛&缙A��"D�&]芲�sY诅kS 辕曓�橄'�,H3�<�&I棻$艑爲 d峲螎 7婌褗傍�?醟褧G江O�3n,侺踷璞恈� �笒�絎頯m夊 i:剆AD�$zzX 樲弼婭掌(.�诪/甭�棈G楢罳L餌~薳弔(o�E瞈隖A饱Kb帉�7lほ唫ガO坍�4�#8{Q"s幉屃=b罍┼�<{x勉柖О移:鬨� �B��nC阚挢惘]偐La9�"�� 酙醳`忰熊i缐.陷v� 騫�>Tr蝹]iK{�:c2�(P`荙d瑗N�$鲵X妴�極妥滒杊pg涐!宨絗敀縏c�.W砳` nj韏灧琡'19鈗�3�/ML艧狂 晛蘨�/m胸ⅡB鎦?f膬/_扏刷落6劓-3M�豼y密�N7聠筞 H ac潄(稭i�劥f墏;}癦A[?蔪鏐橚��u�7�w{韯奿 殼>骖骡聛8s憝'卻.�⊿�4&忎紾赼adi肏懹玛[輄紷鱔|片g6b�*j詩齘�+, 宖\2鯋Pr洑:N((檣1绠蓂:鏏桔琚岛1螆繼{鄷埨窮鳵蚦rm佥;駂HMa厫A竆勚鋐 `\5�,鏝U#杪嶰]�冥:炡n螇>WVuRB鮊*%3�摺婺+8(~6&�器@�=邪�1vpmxG�(�!觫蒓- 鋽箭琯儌uD麖�6謜�z�:1℅1訋3)K;W2嬟N]XsY迳糮拵�)釤轓-嵆#){� 營H垡Hg橫2缼I69@o鵓瀛�� 7vv8蜍衼N,絠�,7c�=�:妜葨G,9ü/VQ日6Ahj<繺�D璷眜婻o �6椞頔xh溕鍙'灑靊蹞牔-,%5 堶�03� �i城躌駯埒壨C塤�$�槔"鶌R'镘蚕�.倖阋鰈 P洝�佳錺`僖8y巃K�矤跮#mF榰g#畿�悪�欅�1�:|�1%〈Gl殓%櫛*`抹B蝰�禶s10�2鮉佖>觅b噣s�0o饵疴躞_呒X�聆省澩 琅\�){憵N#�0葨遅@�]�@鼲BG懧O�7�7崾80� #zc樞򸑫絾僆䜣♂Xp4陴枊诲 +樹(2A +閯晥湴f秒拵筕�慽 +[莥JeIF鴒鍌�8Pr壳溒諏-�{OH普Z:e飻霮�3Zg<媵#芫旱F_R�(�輕澃袿~�0驝S/�$^Mj萙dS攲劜w X龈o頧覷柧� ��缕苣3^传噾趮=�秘z~丛砄養$�#�颾�>流胅丸�;Y巅押:嘳��3?E[�%z阓3l旷<芟jD 鈚鲰5\鋪P夲縹qc~(�墣扄;!*摍诡崁e耽牞胯 +� 飙�=t奖峎窼澑#"䥺�"�, +�叀庥<:J輝?:#贛瑙龒瀄獒弬f呆?檀�+endstream +endobj +776 0 obj << +/Type /Page +/Contents 777 0 R +/Resources 775 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 786 0 R ] +>> endobj +779 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [281.2378 575.7435 329.1674 586.6474] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +780 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [302.6467 563.7883 361.9339 574.6922] +/Subtype /Link +/A << /S /GoTo /D (a00147_g26a14b8dae3f861830af9e7cf1e03725) >> +>> endobj +781 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [380.0705 563.7883 432.2742 574.6922] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [303.0487 515.9676 369.7779 526.8716] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [381.0655 515.9676 442.8332 526.8716] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +786 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1141 445.5872 173.1874 456.4911] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +778 0 obj << +/D [776 0 R /XYZ 90 757.9346 null] +>> endobj +784 0 obj << +/D [776 0 R /XYZ 444.3276 519.1207 null] +>> endobj +785 0 obj << +/D [776 0 R /XYZ 90 502.5047 null] +>> endobj +775 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +789 0 obj << +/Length 1132 +/Filter /FlateDecode +>> +stream +x诃W{o�6�邿B雬B.f�Q+�&^�,m=腃�5E 藅,DW�:Y扬荆H俨v2庿�;摭頔�1]F僚E穏循袀r麇x0嗮:鹓↘AHg彈�*x礊A�8�[fC耎N蔟隑'пl&�.qM�!樮(D邐b)�|啸躙C�?�? *弓j钨c腣拑�zk蟠對j湑�膃T刞嫐5欳�2F�4褅�鍵N脵T蘍﹁鞩m圴G�鏇躤.�譛PF渖梆,s慺�q3)銐仍j:Sk"~溅�檲覤h俤�96└�5M牡貑(�眅Y:S$O梡S厓Z槇(晙,�(綒鍥謶屎鶌矙U挪K皺狪C~畵n捠祇騙澁編樕*� 匂T吐ば�*gne.z(s)T�:頰欅蛙A�-�}u詫d砒P5莨滯稪v舡r蒸謼睭F酢給u9&p;朙衕熯韛n鎨=|_'踾#D,﹩涆蟴>U�=XM�Tx嚬躞H+!晐'沓N潞嬀��2並=!Tq煵>舑M讨絎姾�杇#M�4徜^}O踊�ê[鹑穄 >��?屈endstream +endobj +788 0 obj << +/Type /Page +/Contents 789 0 R +/Resources 787 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +>> endobj +790 0 obj << +/D [788 0 R /XYZ 90 757.9346 null] +>> endobj +791 0 obj << +/D [788 0 R /XYZ 90 329.3658 null] +>> endobj +792 0 obj << +/D [788 0 R /XYZ 90 323.8457 null] +>> endobj +793 0 obj << +/D [788 0 R /XYZ 90 84.5604 null] +>> endobj +787 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +796 0 obj << +/Length 2120 +/Filter /FlateDecode +>> +stream +x诃賿否漘柳�&S�儡騍熵睺旸梢�I�5$�%JC =嚚M�O7構弛];礥;@Q杌 �3髷豌0鯮?堟挥屚�黬祈�肿}勶6�?妕瀦i$Ⅸ鎌(D� 笸偝遐绫-6G筡嫄-氉oi谤 7l鱭鵤骹雒�=喜�怯~澖鎨`胪寉~殑� L樓覶蘋矦鴑捪nf�l樾傎0%U三i�8饕0N.b芕,/鰝鍤3�?�*W�V晩?媾挸艆f��.�憭繌*va泪灟^!�卶D:丶}�=鰹鸄��魨,?沈%柚鉏銩揠趾裌+sf鄘蘋⒘橝矣�B)毽韵Tu�(-/螢侥芯�睰#!0Zu +苅.u燈擲/枿!y{h螯賳⿱驰蟥6~嚔蜤�耋踝潿x蠖/3鮄�� ^B娤竖�!K�0馜纁凃薗b�6 憷 �6�硦[閜戯m\c5�*a偣.劻DY�b +c�� +馔話r啇妥锈,n斵I囪埜o坏轩 +RvF7�"�0[瀜d +TB湰p垓0,靘UG繥軺�!晝�.*'凢 轀�$�U烼豘&kY炡昔rT鏅 +VZA\嬚�7�FE岎]譠Z韫,尾蘭鶅.鶖a+絩涆W.瞯旨TBF�k&�钐)9/�%秔柁sk党蛖v' �5 茸 2撱荋捽缇炅�2 /L予i蟚}焐绮濯瓴僬儣%憦]梬菍�5RE顉餰�=il?黶�皲� r徛��&`毢秔_暨�#�?A飥�;� +p瑺,杄諺绻s�7崫pa快ヰ_ +F3蔸;鷝Q巭釣Et_嬒鱳颡艧-&呆?苟懀endstream +endobj +795 0 obj << +/Type /Page +/Contents 796 0 R +/Resources 794 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 799 0 R 800 0 R 801 0 R ] +>> endobj +799 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 292.733 131.9523 303.6369] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +800 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [425.6978 292.733 476.9349 303.6369] +/Subtype /Link +/A << /S /GoTo /D (a00147_g81ac47cee1c18f6aa479044069db7ca3) >> +>> endobj +801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.1347 268.8226 206.3718 279.7266] +/Subtype /Link +/A << /S /GoTo /D (a00147_g81ac47cee1c18f6aa479044069db7ca3) >> +>> endobj +797 0 obj << +/D [795 0 R /XYZ 90 757.9346 null] +>> endobj +798 0 obj << +/D [795 0 R /XYZ 90 739.9346 null] +>> endobj +802 0 obj << +/D [795 0 R /XYZ 207.8662 271.9757 null] +>> endobj +803 0 obj << +/D [795 0 R /XYZ 90 254.2666 null] +>> endobj +794 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +808 0 obj << +/Length 1875 +/Filter /FlateDecode +>> +stream +x讠賻�6疠_筣�$e]I矦姢i� �! 睤勐蕭�#沵�� 嚁%Y{$�D珂\&�3+鬋7鯲仌�腾傠c螡!�/棆焴�籷 雛�8荃謊鲛鎛竧勏鞐煋愅蜚�k�=梱� +�*$幮潘薧扸镊巖��痊 z砢�G緐骝8謣�炠媼艧=:Ps鲽軟3(�2n `_H鰘Q鷥x淦`9�>Uy秚苐IF鶺舍饋� O嗨轸?E薟.郘w�T湫磚椂M洿扝橈 +纣 lY厞�颏F俒x骉8渷諵hA>拰g鬉�崐w*�9�糸�� r2�2m%Z蛺笼謐�6� Y8缗—�)1懃I#轸匪?~緻鶫蓔r�$�襲-搆s#3�量�F餺1馑 ^e#KG嵪H鍬磚Nf-郛.#t6擊倫HO滛3}愬緄締澧j�!�>+� ��曉�#薌厐骕石客{�j�7h&爟�姵B管I�%軉ZT鋓益UI*昷 f4y�6传6詝�leM浂襙��0牑諟wUWd碸kM蔿�|��+嚔`焝=諘榵鎛禧詎寧鑬w閤\�铯禯s�2诛%Et%n畎u嗦硥 E�&咇W�-积�8帞啫id6f烮痤>/祼沒烆嫣�(R棉Doe.:Tx5Y匍�+痠I� {桭ZЖ繘此隧t�4L:�CK鯛lū応鵮0 豇螑�a驖f�*m<篰0裡2�銸9錖项^�#嘴撾%�&o<照谒&#滑4j58+ 鲻鈧脎V弎庰H9篬殧3w铭xI叶K娾Vg +茉-錜�%鱩 +mb玭挥���s_笧CM愮3�#t肬j刢軨桘D+�61熢K賉 +q譀蛶i龌簗蘣��*t�T'O汴��縔潖 E佞俊潡i登�%�5\噢2垲罶 堞顴:�7錩\�-`-�0�0�8赱鵹�<}3`0摐񝜄oJf哭鬪╁鴙)vX;�h珵Sv6瘾.T簴迿橨3撍^锑F[烇笰�r骨w�3箃聎稘O誝y倦�姳:搕畋P鈹�4厃l�侗餱 蠒�啵�y沽�@嚲PC~茗�9喡笐2麧B┒u�'� 黉垓庌宮<Μ譣)鞗:oU 鉬擶�?詩wC;篤XJ,o醴菓洰牭 +�8犂刼�.澍髠:0椥鹾��k-@霙效�.R預3癡B�|蝥4K℅疟僵妭RMC=� ��R��)蟃��.嶯#�14P錸抵eV*羜訄抎畜稇臚鬩k櫰q(fS�\N<紲A缍J+溧A螱c�ーiHU扸X�<TT腆Hgh刃 +躢-硫骐螐0(Z�&台~�5%Ls�5娻=弻○vt扩eVǜ勍�+M 聏�0  -汭�衳綃g3e +顶惭l麙�瑯XE勍抈嗺牑;s鳐�遪e9uN}3�&騟ndstream +endobj +807 0 obj << +/Type /Page +/Contents 808 0 R +/Resources 806 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 810 0 R 811 0 R ] +>> endobj +810 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [283.7538 392.0799 328.3562 402.9838] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +811 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.5337 350.5452 436.3476 361.4491] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +809 0 obj << +/D [807 0 R /XYZ 90 757.9346 null] +>> endobj +812 0 obj << +/D [807 0 R /XYZ 437.842 353.6982 null] +>> endobj +813 0 obj << +/D [807 0 R /XYZ 90 337.096 null] +>> endobj +806 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R /F11 705 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +816 0 obj << +/Length 1829 +/Filter /FlateDecode +>> +stream +x谂]s�6瘕~匥_|l鬭鶅 绦朆 +n�`绗�.巬祡$i�颙+呱>_. 澨崶疹j颠R–鄰: q"� Bgy>#��熗╕鯼莩~^�'駬悈吴Ts�/e�"R6�8峹�.r9鳂 铤� 考y袕�.]~�Z紭=]l�3�R帝_�焾搧X/f溺I,� ��& s蝕泯經醿 歚闠傭ヽ�@"B醣_�u"G嶐h砰G"群X}^諹%棟�~T^H堺�:摚�柘翤h��#嶉M狛玏�遁魐珝鴚荽�Y讠坟vDq讔yy^t=荏�7MB�7d6!雬嗢`詓w菃餡uY頢�鳴<緯Uv漼艻wV罊��  +卝 �8tO渍�+闖蛣娙q澧鑢刦2-嬯l荽歋醊!巐毢A8h(+�椇<韕寮8送0O鐚竉塰y篫蒍f竳re樺rl.�'崎"H(�1q勦>塂屃甐�3凃� +�莩�1鬽m韕憝��脝耊� 镮葚~1挃残擡�∣櫸�,螰蹠怋R�H禔S"� 苹N峸莴� 齱*陫s櫿雗�  +弱z璞攘髢8姂6失吕須掉� ��"ō铽A n⿷� ~自H;C整2 �Y�"�2-K�芆J�2R瞟� 霠O鴬侖JQ趤咪i嬽餌� +G瞬nev']_D和; +f 陈pB y=bSt鳸a�#�6挏3a鲁挈>费�Y赖丿届敂,0�4�%倷庍荶=4蔻Z暄s� 㘎�帉N�JBr:)�6�SKW��"p搎姞壪IZ?rD忥�Ib囷�1)|@�1i珻偰∠H )�.1贷衲 �酦�6�漇wS% +撠7^愦覂`池甒+瀹�驭敇顴崊逝T�!m%e� NdOXID喝e�枴鄛槕狴碊\�朑 �2堑脏UW@丙� 赅z�EY,S惘\椝维濌屃�8喽P*Q峋+Y�!如�N虃虘��.�0R}琉�h�6e昼覽C剽R�8憣泴郐択3靪V ̄*l3J佸u4蜁e蛥夅匿濇 +�-蜽�璴�5�:I�)~s�'&#呕黶p霷説褥來虅菚u���帺橠#謮9��/鏀竔/槩7羆踓罝踎笠哖薓Sl5聑鰔&l窬簵� +�5砳蟭C仫玊;鍂郌趂�?榏 8�+裙l埕L"艮s┨�鬭毽虀�Z満媦 \-���#KQn ��仚U熓z厠舒鷎kZa�8誃ニ绩ひD繞V拔�7③懓 ┞腍�'辽J滴&�>職�E赅�GhD$柈秚災�'�:嚠 n彳.';e鰈靿�/俨S:�1摟匤玛n馾耵篼'菋鉝�D&.@4蠠緗鵽钛 鬴$颻縸!as舿怼鯟(qP�4吥X?洀瞌脣�:�4鲅�8�<�=得笩P榔>O�W�%-紦椵猭梯嵟~�01架*W倊昲躌VG鹢sG揋鱚㈧_�"脩uQ@牒9u翞鎍凤wf岔T鞅8x朅32獠k橡�#枨"狚”a辞�o懲#�(!qW72*拀躮骊,}h=唡e鶡 �荶LKI辌阊: M勧旣檘傲q妊鯊7矏跗r�>�龉>凭�>翊}�;�_V也MY�蟜踪Zk, ig牁绢犟-<$<�!�>�蜹龐踍蟖w坙��D6絘h彑供O僪蝙儉h(嘛z�/�1怭戊圎J<廢夌 阵i/�:�3YI諁櫐た^ékm&戛_蒀�2�3╧」S�6M7出?╫�究謼Wg�+I=襉h�?{沞ndstream +endobj +815 0 obj << +/Type /Page +/Contents 816 0 R +/Resources 814 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 770 0 R +/Annots [ 818 0 R 819 0 R 820 0 R 821 0 R ] +>> endobj +818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [490.9727 549.9227 513.9963 560.8266] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +819 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 537.9675 127.509 548.8715] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +820 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0815 537.9675 200.8491 548.8715] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +821 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [418.3117 508.388 485.0409 519.2919] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +817 0 obj << +/D [815 0 R /XYZ 90 757.9346 null] +>> endobj +814 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +824 0 obj << +/Length 2698 +/Filter /FlateDecode +>> +stream +x讠k撣恶 +E煥謆 �Ow�w�8鐀�6諰>�徛漍SP>_3菖.�镬IG,鰠啪塙?笔俇%~βxU瘋��__ ^蘼鷙岎份誣緱�*蟪X偏莪� ?払畍鸰<�'洯�镎琰x冱簕� +咈晞勒")刕节鯍X慔�妩珀梍冋zs�*KU=L_d橽疊┸ずzw醑�-X偉鼶B-m(^$ 勢P鍳q(V� �(昋a硙验蟏ル�6o�-}襄镃言貊,n,桖aFc耂�翢繓凹}D羂罘L愧犪o栘*-Б锼�80渝潪M%寡代n鱮麝�君聩繻�7fyn�"E牌�?�埏酒L稻o趈�蛖÷z�輅�$K�7?衣vA稆.忣�S�4澋�慀鹔E>翰DbD阦o�`畈 �?5鍨FF}掊� Bcvt]{.:B�ヱ:L�A渌 夾8R榋�?Q鸌*舑7�蔽��2髤埐歉彊鉤咢蒓'藛--C濮︰s把r约燗qh�鹬gl霝镟 +嗄!屺Q匰V`qQ��?H凖Veg拊鄕�!X臄�34kn�+紲嫺ι尲�-鬀J�6擯=0慻7热Е�;菀X�26蛶跇麼耻z�8N鳛7豭蓰拆硤w 鸹�葯$踽K�8D翆E鶝m�"6�嘳耫糑�yM��L鹡飞旝r#勷0 l� 紬谆�糬儠B檧丶.�;� JN�#靱&�%池+ ~飤#绖egY崧m右p幸邵赌峾马kFo�#崿y街濆诖馜凈b?6u痽眃嶎eq槺暾��逘`怚�;k�蠻宅ir售嶧鯰莤|帹U勈3蹂Q驿5#Ⅹ埲闛XNChu黕h喊�5*蠚Z栟�v馇恌啺�"潩4鰨64獩�垐婑u�6-#兀�/&4]8墖%� �;V愯�b笂N噒?e祅凹痿迺*剩�7缥仐LA芰吨�v{獑�儵�:j&�CO菝寁f觩d�,p鰳H�j気桿E�G朩�帿蛒鶆gO~瓣Yj嚛!呠T�9椠3蝩5�+�;斊 3,骤胃张d效&吃$�=鎚牧淤圥鴢2>飜瀉縍�u蹱[�6阜^l�.8帽垨耥掎[7K^幼\`襚|[X� 旽?T╀"(舫T�袣w� +妘w�$~(.軁”耂m�)�+属癋酾�7� 鷵f妭瘤H軑nf苃﹢�:斤�:�(恁.r7竝�"t扎`ト)����#篵�栎� +鑉蜉/Q┚�)畯�/*ⅶ鈥&� E]螾])�1澍g&塧:�詗�8mft罳� 銊諉喲F<�(鈗��*Q#V�:u陨坺\△wS辚<筈瘞揑�qV�K佈鞄旿� �煉贉抖eY鋑�鲣逼贘疟� r渳^堚懓|榘Z 展6且顨刧凸谟�|忶蕈� t-橉N琏�炟� 呶�.4w鱣傷3A!诇p 侌7�#5d#蕻[渌KM撫�~Y横�$鬺{誐躑w繟�瀲f�先 �瓺橓㎎2鷚W�;F鵬�?婥邘耖繓qN监:倁U履W∈f禾楸兢B�2蒚囻嗣`�!习-�#n駠w5耗偪�f讕闪 +緫暸故["�镁�? bV�2橙t釫03��:ヒ灐�Ld�$壵JOS檦狃z樴襱梶筷鳷鐶i,g谔徬a}A �*M錞俱�斊�9A覨毾v#R镱�/X唒l?旜駮r劍茚R徕HB+斶R� P跦R�4缻3d楘:.�<}}l鴨I弻迅琒G�錃y褘O_�+鲺洚鈁_觱够褏G�.�嗠_p訰斻襫坍袥栿[\菊艛w8ktP�3ds&GB{^�,哉肦]s&�7祣Z篸F琉j狐蕋顸9�縖���噌"庘�氙p} +$B神�1璊�鳜Z獾畊;8掚!��o饦�<捒羢藔f2b�:毮煂�S/pG 秦<�?齻}�j�endstream +endobj +823 0 obj << +/Type /Page +/Contents 824 0 R +/Resources 822 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +/Annots [ 826 0 R 827 0 R ] +>> endobj +826 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [203.7378 146.6848 248.3401 157.5888] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +827 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [190.9801 134.7297 235.5824 145.6336] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +825 0 obj << +/D [823 0 R /XYZ 90 757.9346 null] +>> endobj +828 0 obj << +/D [823 0 R /XYZ 279.4381 96.348 null] +>> endobj +822 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +832 0 obj << +/Length 2726 +/Filter /FlateDecode +>> +stream +x讠藪�6�>_褧摵瘦邀憸謳�W椭�=)��g氹�(婻企� 燸#;甅魽��倭螄_�+黓杁�"娪]Y_@拷 +x�髧9了猾熯勁�8i橆铑-�48&a铑�?� �� 婻镱,鲊0窠狷�w痭vc計蝮粀W讫X�$J茼苏 +膠w��"Ov��(耛}噾.W3颉 籤K�$埗� +�#`Bjf1�喵桔n錇顄�/なu較d-沕鬔7�n烟H`�0?y怺fd�8糈庿O5勵i>� 6�%� 猤"�1稪跣葕 �<�'鑣O玻槔贿�'�$浅t尋(螪弟磿萁頹�!��"I�顟艦ie�>鶁X|?4eO{$殜�! T铀N攄8�9绳Q蔲E7 � 訐u擤部<TI�琿藽镢Y]鋳�3菳:o崖巇�つ綂�* 鄡�!��輐9義�/@ ?馮Ox�{峟劯 +媲�$h�61�77f�莈5h鸣]�侫x/&�J蠈 n璙nm慸m絷酟�犜蠽籍’�*�1辨�齄��'菔奊��<巄e�4�#呕闇 ��f企曥厷 傓*�钲熐=g� +�纈�,z鋚囦�,i�=J巕�%.yN.�} +脤��j讶�0�碀M鈉R皓}佪笍虧b0贖m�}T齓1厾礳4姭j� 棴鍕U敌?醁Ye施g�簬=/Y鮗斐嵧l0:�:漇�j蘥*毹魚D埞媟K�2{蝁+绗�+w(赴ZR瑔纕嘲q捀�fh鶊P5鴴h�榥懞嵝�局Tllh�F望啴Z銣s猙珊姽� l��:�抁wQ暵屚冸knP 汎%�=萰0'uQ�c5}O锷4�LB曹刜� J� 町蛣!蹽葞輌<葼�>卅y�鯂8牔t鸝m磐� 牪a直[<?-X_垙x鎚P�_.梇噮UT�m� +� �0踽D=5踿穂B�-忘氽蘁橉怼H桷�4㈧瀤7囱�=��1n\憢1=孥�<槼�(9恋蚄歵{踇|<� �*悒T 玬�悰|甴杔虒`鉖l燾持甧�0全峨n∝7�`#i堫�婂澔郓籛�4PL#l5鬾嘵靲q觰1t� h狮8�鏻珒樄� +l�5w笭蚛o:IN�85枴(奬�145�)Z�=蘙滥DZ=菭弿i嗫�樹Y�琔監�Z�.燑目~{s 違昽��\ P峮鈇獐�>击竍�5蛍杛8墩麭酏g�'痏蔹繡�+蒴擯Y�垀� �焔�9R穟><5京�#樼"C蹹d�6L犬s4硋7L 舛!u\2锼鱑f払�1�痑�輱黻 锖g礟涽ヱrw�d漸�&�3?耪0�25乼MY�9�绥訆蚈-峪f��沐尉(g捂q蓩3~魑鴱倶�矺>@鉙P�嬻 +儅[�顢;纒壌砱襵�榒�&�2洀P飁{Q义{~戾祤qk�.t黺 ~� ,虦8_[u�%譖;叶\ wU2=t%�"�潋i +t墽 +Ih�)縶萜�iE櫧岻C�-鏒l阎�:諒k╙�┢.� _�.脆恋媎K踉JL俌D.3r轍咁礿楝Ⅹ颼z绨畋凗g论)O魻l�)y蒦瞳\殒第╋渏李攷Af.]�饛欓u妻9#饕6样觥 坑5逨4?Z躡h43蚣果澬P睰峉承Ay粰�袮褔j褤0S仡R4G穚+癕B)��哔�@撤=�XnG凡�6鯳D骔驹]T`��$仞�3踳楍]mLn入�僣g�x鶳?�4I�芽忲_��Q8�w1=Y攃i夿X�4:QP矐�W-�q僿h爜� 浏�K��吘熞绒巘氟68岨淊 浀戰� +�f1endstream +endobj +831 0 obj << +/Type /Page +/Contents 832 0 R +/Resources 830 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +833 0 obj << +/D [831 0 R /XYZ 90 757.9346 null] +>> endobj +38 0 obj << +/D [831 0 R /XYZ 90 739.9346 null] +>> endobj +834 0 obj << +/D [831 0 R /XYZ 437.7219 648.3003 null] +>> endobj +835 0 obj << +/D [831 0 R /XYZ 90 630.343 null] +>> endobj +836 0 obj << +/D [831 0 R /XYZ 498.8037 552.4222 null] +>> endobj +837 0 obj << +/D [831 0 R /XYZ 90 534.4648 null] +>> endobj +838 0 obj << +/D [831 0 R /XYZ 231.09 381.1364 null] +>> endobj +839 0 obj << +/D [831 0 R /XYZ 90 363.179 null] +>> endobj +840 0 obj << +/D [831 0 R /XYZ 464.8599 263.3404 null] +>> endobj +841 0 obj << +/D [831 0 R /XYZ 90 245.383 null] +>> endobj +842 0 obj << +/D [831 0 R /XYZ 164.1609 96.348 null] +>> endobj +830 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +845 0 obj << +/Length 2718 +/Filter /FlateDecode +>> +stream +x讠YK撱�鞠瘶[í態俹邷挖5沴說� IH檹+�>� j桴Vウjt岶{�<<纩cЩ<寬氢蜞?瀫C �-鸱顎宽兪骫灗鋛$ I皨U�麇/^八6[噉d^;碋[3妁r�4�閬榚y�矜粐符iY�*�釛_磠鬣锫<�_犮飩飒抖�|�錮�'鰊� 朽`#鷄��|�+L$幻D>r燦栔u鎁捅�.%a悻>韾坁t柛侗论q郔 眍e�'睒/c1T�8蕼���4�&枪旆�ZTg�蘗4霂V蟗O笄5脥 溅5�6`�+S;筵hz +�4� X檶H侘碭窞鲃儢测?r�→潲婞@濣眷�堯肾�噦韐跧�/Bh3阡懟淈n7蟹粦I澣/桅�# 9� �\�4�r le3�T�:耄C抹3�!餢�0V櫜 �?毾;辜5鶵躠咔岷��r闍� �7䌷� w帎~ c Jh�7蓄蛲恼rr魺1}UM佗絖�<兘o蒐� � +玏�娈辮C鬆~Zh/礌D,�/�8毽�/<朾�橛$k�煸{?諧嬑 ;��労�,闡篫�爝�嬄8夻��技爍t5LVc 玟籃菟$~htq枙f%w搉�.QQ8�*�揂ga�℃詖犮吇`頭[B蛺�♀犈v{5輙X8�R�)4熫� Mk檨|鷷�<瞖胡苶谯颳觢W皖,�*� �P2Y坥>乾恎\ +!籰 W沕邮屔�榐乊窇J硷刖]N夕楣潪y啼�5;"~!碂�- + d杯�沂v�3 1填k� 検宫禜5d瞢哃V 筃�渂贙U�<瞵q驳5-�2鏯D襵E�&�  h_�芷勉d>劣v 槮瑸區璷爄{x~ +0JSr蟷{�"Sb縨葍2舊 罸�8�i�鐒s畖`岵>亼T+潗鷆sW暍��8色呇iYsC }�峿疲I9<�4� 隖萾饏6B徙嚒fY��Ogns|`媼 柦刔銻痱d妹&A曷#SE濾.s_鯧h`蕻(慳�'懠�VTJHV烪略鹔.-n� �珞訷踴�&帮� \O芔LK�脄�闂帮P照p[f�膺6 :�7鎃{欬貛M瑰鹀u捣I�I躱{� 歰+.U栌莰jF.鄩bX !Zh�9v嘓L趧県�6衏m狑蓮龔0鑯蛝墧6p 鏡%薺埑幊rs鼌bTX巾J +QT所 +0t鍇碝耪�地� .ル衍%冤 +晏痍殠簠艚 団O6�e�)礽罈p狊%\n烎祋钦)岃ダ�+颻黡(竄諙�3q呒S笓渐捓rx芵u[浐涛P枻試_磣�[ec*覉�46d6U&佥!f迎8g-捴q苑5X&'熧w唚硜ⅸ�>SN紵螰閒�謯)q*:噗櫬8H�%砏M嘞��燢~�)g発宦葟槑z'-A��;'Q�,竖䦷){藪yk燚褯�%圅d@f莟,D欮衡Q� 魒篽}踃�p+oJ輹Ac妥�0澲禒肨唹宭扳瀢伻鼑頵曢�?妆艬k�X@7鹺X ~橽�.�Q窷插硧唦鍯�# 體K�)掃O賮\z晍4尸盛TP蚶哾Yb�2秂K�-鄀歄 B9 r=� 啶LgV孅;4Nc+泴:�訧棌冂;u鈺F@虜;~皒>�<�1/w(�2!t� i㱮嶽b縑珖.总� 蝢彦z濛絽C甮^貃咃闭蘒@⒚j潥��3闱O嬞� 昿縍�粎=�柒┙辐嗦p)�匧Z鳾噰-ID��*o鯐H"0碄 +嶅濑A篥z�7騷U>(|>q秔舋A过;�,O�"決BI�(堙*碲澈�?頜b��5萂嫖厗ARN� }�3凉s.響�闪蹬)!y圍$蝖D约4�9YyZ8_q濯�<.蘷kg粕(N�4婼~p霗9豎猟�8断\@紇m9f9?艛'挙8 &w"v螩颺@O�#4棍C譤譂�萮C樎xOsz�8#^[閥9_鶸谭x朽鮢3蒃㎝#pCU\辸R飯��<轿拈瑱�:d十:U �9�k耷[Wy俫�P霹V疅�萚�/o嶐}樾Q匵煞 uQ�寬{嶩вq讘C赳沓��緬蛌睂�8qz簝Ya#R�[嵑嫔阗と蔕灹.堃者a}(�$N_C榍� �鞮vyf銮NQ-iPk[T賩襸踴噁�(擤�;錽O鶁"w04そ�1噔铦 <�盹窊i钔�?债冂�V黣ndstream +endobj +844 0 obj << +/Type /Page +/Contents 845 0 R +/Resources 843 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +846 0 obj << +/D [844 0 R /XYZ 90 757.9346 null] +>> endobj +847 0 obj << +/D [844 0 R /XYZ 90 739.9346 null] +>> endobj +848 0 obj << +/D [844 0 R /XYZ 513 669.6866 null] +>> endobj +849 0 obj << +/D [844 0 R /XYZ 90 652.6059 null] +>> endobj +850 0 obj << +/D [844 0 R /XYZ 145.0727 576.8531 null] +>> endobj +851 0 obj << +/D [844 0 R /XYZ 90 559.7724 null] +>> endobj +852 0 obj << +/D [844 0 R /XYZ 199.2294 400.9501 null] +>> endobj +853 0 obj << +/D [844 0 R /XYZ 90 383.8694 null] +>> endobj +854 0 obj << +/D [844 0 R /XYZ 437.8115 266.5818 null] +>> endobj +855 0 obj << +/D [844 0 R /XYZ 90 249.5011 null] +>> endobj +843 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +858 0 obj << +/Length 2680 +/Filter /FlateDecode +>> +stream +x讠YK撱�鞠-T誋&>D遞奖k�*昅恧rp|燞虉5$!蟊c鄈副+)4 犙齯7靯�辉�%QrLu矧呓籃�0~�3|x蝴頖曨襝玿黥L忄〡頌姛� �t愯貃簶鼳E�7<~嫫�熆s懋向/O燁4�'蹓t鄇哭嬁+`[燁NO杨 :�1HS但顱Ш鹯鲝Q袆璖E佫:朸KA7酳錣蹡�'食C蠉� 縼子I亹]疷檊}i泏�$^)琫沁懙5菡6]y.9鰕拍Jb氬飇c�*蜣x欺�4�鱩謙u賣� 憇盋U牰A� 8�;�,韐^V樸��'负z魦痄毒VfD辭磂�+󴡩覤锯短� 痀鄢蓵  [6/躙*�;晛�8�:舕咔観}!饈啕辈斧7桍僲鷙�<[� �ぢcE) "餍缮�碚襮羄H烜W>娂幓�鰙眍�9�溭錀�)籞楰舌xVU斯u=4�閘�7cf控� oeq�踆�7爏|E裏{c漥郓m{鉽Q枝章}呣c�&�/軅搑�#觶� =:弾摩i�)L薽r冦<&擬仹CS/峫瘄賜Ye鏙鏌�<<#��0☆氬�a�2򧋅h證'︻唀卸倗E謌荜/Y鉠2岗 刘� 筚D(!衸z �5s�m�8�)9�* 長忎@ 乻�=vO螐摰'亶8餓N匱>而T,#�94i[d&葏f6J嫫觎歹CxR�/w抅!V箥澻�6LS秹6邵在m� 堉�夹Bj;�!�<豌F杽$�"蚡廄驯�,C勇xA�%謿�1�4�锺�{m{3駇櫑���,贤盏磥圳�27\U�+雚駟 Kq�9孙Φ躾[c舣�=徖:b覠喸X @襞t|��╞`嚏R 巰墐s滥联�9N螧y3詆蚩1.^W諧誫嵄兲d馈 刣垻�$1�ㄗ縜鞍�+bI裯7�3玘l 菿塾�卑`▃�-�怯筱羆F@嵚t錕�&S猿猛捖9衍�&$�紑逇_嚥晧订n�瀺3嵤l纇6紤�歔�36 � ��)e9躕Q桂o�4實逅�6a W糔l�� �$M�,yq�?f6ju�+奢Y苕yha羢�7S屴7瑵,_t絪讙Y檵+恽�1�)�%鈟�l�<_A蘂剬?v筜ΒN轅臼B�/xi�<p乯黌F�<�z{XF"�,嵋誅;M埋JC萕.%&8勧e�鵩"鏬Q,򨏚&撬��%瓠出昚0轨樔�籏孎�蒸愝�"T叵F�23僪�|5頌Mhd[榢0�0騦瞺牞匟佉馲�n6﹗仱RN#鹚闔谜~xp瑇癈�緜�O� 閕べ輾趩�爱=i3w#﹏� 埝r�2泳暣�襾�:Q�=|~<蛐C莀╉SZ牋�&T'佂7]oF虜a闇�+褺鱈d紸C羝j�0u抨剗鉚[6(漓畽+C楋孹Z俩謂蓝P8l^\z,�6ou+A�08偅缉狀gLzMKY/�6评m��U4箠毅媻Vj�藹巀 D8-rw雤S��B1潇D累C掌|旈グu賞賮d蔶曮6�/&韱毶yV迕Uc�z暤W +纁� +� =c�亷�歯R<剙�9?糗w臛�) �0f虻�<医昤3}~)XW$△w^蜪璸�5驠蚼U� 嵒愆唵鍱jMz� +&%錥*[�80g!Lge#qh #rq�z|甓1鱙9SZ[s 集椓�5"晆�8掇J&~肥"塄旊@硵苝i利0B棾�_证≒� +h勑菵yf脉tD剙1匑鯧&�乸�9` �>aΜL膜踡怔搃虚]晤 +劭蛊'贱A:亽��揭�+焮树c)8U_淈G *幍掟锨 -�腐 鋏ndstream +endobj +857 0 obj << +/Type /Page +/Contents 858 0 R +/Resources 856 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +859 0 obj << +/D [857 0 R /XYZ 90 757.9346 null] +>> endobj +860 0 obj << +/D [857 0 R /XYZ 207.8864 706.0616 null] +>> endobj +861 0 obj << +/D [857 0 R /XYZ 90 687.3006 null] +>> endobj +862 0 obj << +/D [857 0 R /XYZ 429.0947 581.6321 null] +>> endobj +863 0 obj << +/D [857 0 R /XYZ 90 562.871 null] +>> endobj +864 0 obj << +/D [857 0 R /XYZ 416.2232 469.1577 null] +>> endobj +865 0 obj << +/D [857 0 R /XYZ 90 450.3967 null] +>> endobj +866 0 obj << +/D [857 0 R /XYZ 318.9393 332.7731 null] +>> endobj +42 0 obj << +/D [857 0 R /XYZ 90 312.8912 null] +>> endobj +856 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +869 0 obj << +/Length 1859 +/Filter /FlateDecode +>> +stream +x讠XY徾6~鳢餋d4珗:W鷲� 6@�佗IP�m 厌枞讫鯘�:� +燲,8� g>幀�m阭�(q� 尫Y雕禛`抠(Y緛鯖估他统啐t浐i烨埯i垥咿�濡�?驕�;遱L{伫懹磿�3雏|�v鮽$$� w筵齢T|妭X∩瘺彑絤窘輝n愞F�榵甁S[mB?皳r骯笄▏h肸h� +謆 産骯歱h何w7A�9Ys�)瞎躐轭&鬰�?^�鯙塻踕﹄@缡蓻ZDM藙畒┄肠A亘�/ㄝ�桬^6祷兠縰頞儤�裻}Q閊v4�+�苌铚蛲挟E 7箪.GST缫T︻蔁帣簛霓鹭靮]�&钆婍擲fC)'�怯�y濼�0鰣靸訫9H杢I0�>&w�5qc? 勺锜o逶 渘萅陶徝輠^闛篻�<%@!�Bu恇�伞嵇�9槍��N;� +|{P疖4�5圇笘dTe~闛晪擋2騡瑸 v^歀�(淡諓?V吅^顳=�坁�+属 Y�H焕冟W覭莾闐蠩�3�$+径�2'餜�d�/4 +�2產� 賑皴6刲短疏篶輶炁N\礝N� �4Y� 怯�&骉A�76匪�*z�,靺氽 +{T&E^螉o� +浮餟"j�槥;馕鼉郭:�'f'#V�*L干A晷6�(��= 珸砼鄵3徔�*烋鹕�<饼嫺魒L鮠t〉z:�軿鯤梡涁6鄾蜬� ���閪攦綬#獃�8z涰歲m蕏祾矡W椮奫‐[潖篻馭�厨 � 蹑gA尥�哓涅@墙枹rP懕旝鋋Lo 箬貯=度�"t}L 葒�8壦gj鴢U� �<葓z┟� @s&s{*� 3�"覥z肸~郬顟=�7滛;肆d?~R�+腭褔$}Or貯齼�$ g��b%�<└�-'�vB賾嚽�j(D堚%镋溔�8俑�=綗链�8w�'*濯0Y虄/YG��妦z粎-*痃考舗�扶�)qcxcj璞请�o1&蕳褅�蟷o垯抇韝洛娨汰淄魉铠陎皈禃簌輑辝ndstream +endobj +868 0 obj << +/Type /Page +/Contents 869 0 R +/Resources 867 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +870 0 obj << +/D [868 0 R /XYZ 90 757.9346 null] +>> endobj +871 0 obj << +/D [868 0 R /XYZ 299.5322 694.1065 null] +>> endobj +872 0 obj << +/D [868 0 R /XYZ 90 677.3793 null] +>> endobj +867 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +875 0 obj << +/Length 280 +/Filter /FlateDecode +>> +stream +x讠Q=o�0蔟+<&C岋焟苸狣Uo垇扏D�_'N"勜悋{鐆燂�损�;蓫6漏滧z�$邌�優�煗躽6yB菨p勀獲 4r_.癷(J麲昮╡r|濭囡鐡�V胂t� 鲨莮�8Z摧举b)y�*�蔣��#8噟莚T凅呸仉X']碌璟:#K耎s-@嘄�垂i哊;R@﹕镠8+澛悩r�牯沀u礯�2试匝� 燞A'寝飙湤殺�JImR訧晨8�>瘕鞢體赩蹂54╭�3會}竫jendstream +endobj +874 0 obj << +/Type /Page +/Contents 875 0 R +/Resources 873 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 829 0 R +>> endobj +876 0 obj << +/D [874 0 R /XYZ 90 757.9346 null] +>> endobj +873 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +879 0 obj << +/Length 1608 +/Filter /FlateDecode +>> +stream +x陧汳徾6嗭�+|磥氠鰱洟)壯�床v-T�挐6%醯�9挰F攘�=O鎪v�裠佂?残x!匘汃`盹疴杉�?鏀橶鄡� l眝o齠s麝;�� 燽眣次畱Pl辟|� 煆q綵S仐t跚媲�帳捘迉峗伕⒓坚纛�2&W锍�)崼雡噈黽雲pd〉梹!.hPzc荛桨匜:胺昇蠅噬q^mRT痑鯍&疟菏�掖贺W慰掇镛n谲"�&k\ 剷r箅骞5^;諹p 鎴HF[�6棼<;f荾嘯4鏱塚ka1盔/\氘�.��!�$凊�鵖m龐in隬殷^2,� 粖&拕檕% i.e?m�#�ib�嶻nD�?7緃蚻�?eQX�e嘽r8吳$;鰟�3ff0QN:G!艊潋齕�4�C袱J い笘哬狶� �CE�1砤緙~N摠!�)=�4ms4W苲鹏齕1Y2�0U%� Q熙P%k蘬樳豹cy\d椐K籶憐.c冊]杷礏噩m@>匣U廯RF蠱AZz-e寴+-�(k蘬�遫�檑�>L曛Y膄ak`S8樄�=@9T疪烑 +(F0�(�;踇罖5f6瓮J鈋�鈉僐拗.其\�8G扱孽J閥/�#疴 宍��%bε 讟U4途猦鹝E�.8O�&峛辦~i縯�[瘖烑 +6�F0lv�)�暗f6蝊W蕯穱z嚈&窳�9.g!螘d q齊z�+�8D罝 �)唜犐q崣G溮Mi0�&⑽慹u絩z轐�(豑�&歺癅#A 榵磃�2nW蠚蹃蹑妄�8喲�3^脦�)嚝猫)G縺�+`@A卫&歳0!悙lh�贇�=_壊蔑缨S^庂�7O嚚邐`阎#T7眩F待 +藂8鲊C榡a� +�C 5fg %囦槃i�虘b戽猅'GN炃q�+愶� +尼��0G尃 `C怹�3幎駣婂�$��6O�7阱�9W�Ge漒9y荱痐���+r�0�2瀐$��86fg\�/蠏<�-鎦�KN痹+掞縟 |4�0U嵚�5�J嫡鍜i舚S� +佰葩剰悌O(匣J�弨里�&jv圧K5@Skf|eEY唝>豤H咋瘓吠j阞剡妄Z熔鑢n睪懺瘨锟芪乚a�.GC娪№\kvV沕o穣\�8}癘癘/�<e﹊x�\ 供嘚�&�珘�耇uH诶礷g鑜拊荾灊瀡惜鶴釩�磲蚞9乥�稔稚彄遯 +沱仿( ��0?�盆歇�5+蟞逖.9蒲裨�-炪(盋ヨ筩%�9Nf菓�+夛楷<�8剦f輸 �:葑殨嚶⊙c鯸R撳B滙y磢>趘�>j摧瘲锟� +.H`軽]S恀�2� S=��5玁�0盠鯩肑搰<�?�2�&Ltn詴ev絲顺署 a;r-v�",9庐1+玒氋昋祔3衰G{$&篡5%賹跅:G憅孽J辂/墐�'耇厧`DH� 厲钙峅a�3づ氢⑥q5c�@s�Z瘋��4pR�0hD+D�@��>辡╮/鳵弼�!|婘錓�2傓�9�&Y#彵8穟焍q� <\~�鲎渒B%�枬?鼽"攔(endstream +endobj +878 0 obj << +/Type /Page +/Contents 879 0 R +/Resources 877 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +/Annots [ 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R ] +>> endobj +881 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 483.9922 513.9963 492.8388] +/Subtype /Link +/A << /S /GoTo /D (section.6.1) >> +>> endobj +882 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 469.9249 513.9963 478.8911] +/Subtype /Link +/A << /S /GoTo /D (section.6.14) >> +>> endobj +883 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 456.0968 513.9963 464.9434] +/Subtype /Link +/A << /S /GoTo /D (section.6.2) >> +>> endobj +884 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 442.1491 513.9963 450.9957] +/Subtype /Link +/A << /S /GoTo /D (section.6.19) >> +>> endobj +885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 430.1939 513.9963 439.0406] +/Subtype /Link +/A << /S /GoTo /D (section.6.20) >> +>> endobj +886 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 418.2388 513.9963 427.0854] +/Subtype /Link +/A << /S /GoTo /D (section.6.21) >> +>> endobj +887 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 406.2836 513.9963 415.1302] +/Subtype /Link +/A << /S /GoTo /D (section.6.22) >> +>> endobj +888 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 394.428 513.9963 403.1751] +/Subtype /Link +/A << /S /GoTo /D (section.6.23) >> +>> endobj +889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 382.3733 513.9963 391.2199] +/Subtype /Link +/A << /S /GoTo /D (section.6.24) >> +>> endobj +890 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 368.4256 513.9963 377.2722] +/Subtype /Link +/A << /S /GoTo /D (section.6.9) >> +>> endobj +891 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 354.4779 513.9963 363.3245] +/Subtype /Link +/A << /S /GoTo /D (section.6.3) >> +>> endobj +892 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 342.5227 513.9963 351.3693] +/Subtype /Link +/A << /S /GoTo /D (section.6.4) >> +>> endobj +893 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 330.6671 513.9963 339.4142] +/Subtype /Link +/A << /S /GoTo /D (section.6.5) >> +>> endobj +894 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 318.6124 513.9963 327.459] +/Subtype /Link +/A << /S /GoTo /D (section.6.6) >> +>> endobj +895 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 306.6572 513.9963 315.5038] +/Subtype /Link +/A << /S /GoTo /D (section.6.7) >> +>> endobj +896 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 294.702 513.9963 303.5487] +/Subtype /Link +/A << /S /GoTo /D (section.6.8) >> +>> endobj +897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 282.7469 513.9963 291.5935] +/Subtype /Link +/A << /S /GoTo /D (section.6.11) >> +>> endobj +898 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 270.6721 513.9963 279.6383] +/Subtype /Link +/A << /S /GoTo /D (section.6.13) >> +>> endobj +899 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 258.8365 513.9963 267.6832] +/Subtype /Link +/A << /S /GoTo /D (section.6.10) >> +>> endobj +900 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 244.7692 513.9963 253.7355] +/Subtype /Link +/A << /S /GoTo /D (section.6.12) >> +>> endobj +901 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 232.8141 513.9963 241.7803] +/Subtype /Link +/A << /S /GoTo /D (section.6.15) >> +>> endobj +902 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 220.8589 513.9963 229.8251] +/Subtype /Link +/A << /S /GoTo /D (section.6.16) >> +>> endobj +903 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [502.0411 208.9037 513.9963 217.87] +/Subtype /Link +/A << /S /GoTo /D (section.6.17) >> +>> endobj +904 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 197.0682 513.9963 205.9148] +/Subtype /Link +/A << /S /GoTo /D (section.6.18) >> +>> endobj +880 0 obj << +/D [878 0 R /XYZ 90 757.9346 null] +>> endobj +46 0 obj << +/D [878 0 R /XYZ 90 739.9346 null] +>> endobj +50 0 obj << +/D [878 0 R /XYZ 90 553.9527 null] +>> endobj +877 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +908 0 obj << +/Length 276 +/Filter /FlateDecode +>> +stream +x讠Q=O�0蔟+<&C梯9垁獞怈d�:鈜iQ瑶{溫�"鑶<�;葵|�翪顎e創ユG|緱 ]緲茏祛�w耰壹迧4 +EH糿�A^HB Y縵� R悺�灮�?鴪Wm阆c=鮇�(﹒桷芍郙玝 こ�:GJ扺缋挢隩'c颅�盒V c铜V鎋3屭賽俁违勇i�$吥R7K啁遇�7QΞ絁桜暎竖� % � J2�巋棑屎St泯鞢w眷} +�4贚�k苮dendstream +endobj +907 0 obj << +/Type /Page +/Contents 908 0 R +/Resources 906 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +>> endobj +909 0 obj << +/D [907 0 R /XYZ 90 757.9346 null] +>> endobj +906 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +912 0 obj << +/Length 1260 +/Filter /FlateDecode +>> +stream +x陧汳彨6嗺�+� R泮鄹薧蹉vUU賃U�顎J>�0簼_;��=V=we岶 r黵鄛�9��?磹p!�扨鲸Op瘳6�騽啛)&j轼a�Y�?疅���唨s��/Z淪 XI臊熕O亡茏梑�\掆o��H7�J�Zbzk痱鵺�4+慷鮡{)P宫毝趘f腌憔褻〝馉� � 鬀╔!鵖方^�;)[�襠!佷Z毽岝�3<n凇q{l闗踥廢m6t淼~BK_锿趄躷�g孙號]乁~C撱iX㎞噑W黪B份官铌^焿铛濇覱肷#�@X笴K`Y�>吸渹WV瘩�>n)@傕IS┪真趏{u藼�%(VL濆紭/▅篝<谿e {�=py"�皘[鵰|灾."LS�鵾�!拋R0�1�1�詣蔘↘掄 kc楴畅活殆Z �<]糊��4�-�,�筅7S7怮'd� RQ茟釮�e&L竖逿享F鳝挈�2s暒;Os,lV;l秹3'l� R力nx0V�?仄�;lCGF8蔿}w�1Q躽 潻罡�;g└#`.H埢1L鐈�煌�;U�;SN騷["�,+骦8S7� 'i� R憜 �i& 唑<_d臞"懇J^�狂糖騡刁餲麏p殇蠙A*�剦~C訢咂謃TOs!茌崏挛珑6丯:�>s�,T前u疥�蜹}k -8魖鈵鞎s蹏(碳� f畏��<�?Z!AAI幕緩�e_癳ndstream +endobj +911 0 obj << +/Type /Page +/Contents 912 0 R +/Resources 910 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +/Annots [ 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R ] +>> endobj +914 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 483.9922 513.9963 492.8388] +/Subtype /Link +/A << /S /GoTo /D (section.7.1) >> +>> endobj +915 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 472.1366 513.9963 480.8837] +/Subtype /Link +/A << /S /GoTo /D (section.7.2) >> +>> endobj +916 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 460.0819 513.9963 468.9285] +/Subtype /Link +/A << /S /GoTo /D (section.7.3) >> +>> endobj +917 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 448.1267 513.9963 456.9733] +/Subtype /Link +/A << /S /GoTo /D (section.7.4) >> +>> endobj +918 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 436.1715 513.9963 445.0182] +/Subtype /Link +/A << /S /GoTo /D (section.7.5) >> +>> endobj +919 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 424.2163 513.9963 433.063] +/Subtype /Link +/A << /S /GoTo /D (section.7.6) >> +>> endobj +920 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 412.1416 513.9963 421.1078] +/Subtype /Link +/A << /S /GoTo /D (section.7.7) >> +>> endobj +921 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 400.306 513.9963 409.1527] +/Subtype /Link +/A << /S /GoTo /D (section.7.8) >> +>> endobj +922 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 388.3508 513.9963 397.1975] +/Subtype /Link +/A << /S /GoTo /D (section.7.9) >> +>> endobj +923 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 376.3957 513.9963 385.2423] +/Subtype /Link +/A << /S /GoTo /D (section.7.10) >> +>> endobj +924 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 364.4405 513.9963 373.2872] +/Subtype /Link +/A << /S /GoTo /D (section.7.11) >> +>> endobj +925 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 352.4853 513.9963 361.332] +/Subtype /Link +/A << /S /GoTo /D (section.7.12) >> +>> endobj +926 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 340.5302 513.9963 349.3768] +/Subtype /Link +/A << /S /GoTo /D (section.7.13) >> +>> endobj +927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 328.575 513.9963 337.4217] +/Subtype /Link +/A << /S /GoTo /D (section.7.14) >> +>> endobj +928 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 316.6198 513.9963 325.4665] +/Subtype /Link +/A << /S /GoTo /D (section.7.15) >> +>> endobj +929 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 304.5451 513.9963 313.5113] +/Subtype /Link +/A << /S /GoTo /D (section.7.16) >> +>> endobj +930 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 292.7095 513.9963 301.5561] +/Subtype /Link +/A << /S /GoTo /D (section.7.17) >> +>> endobj +931 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 280.8539 513.9963 289.601] +/Subtype /Link +/A << /S /GoTo /D (section.7.18) >> +>> endobj +932 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 268.7992 513.9963 277.6458] +/Subtype /Link +/A << /S /GoTo /D (section.7.19) >> +>> endobj +933 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 256.9435 513.9963 265.6906] +/Subtype /Link +/A << /S /GoTo /D (section.7.20) >> +>> endobj +934 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 244.8888 513.9963 253.7355] +/Subtype /Link +/A << /S /GoTo /D (section.7.21) >> +>> endobj +913 0 obj << +/D [911 0 R /XYZ 90 757.9346 null] +>> endobj +54 0 obj << +/D [911 0 R /XYZ 90 739.9346 null] +>> endobj +58 0 obj << +/D [911 0 R /XYZ 90 553.9527 null] +>> endobj +910 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +937 0 obj << +/Length 287 +/Filter /FlateDecode +>> +stream +x讠QMO�0 界W湄l�c晲@�6�0趎L赯Q1饼{姚�*�梳�#稛煈��pp2占80郲�3覊�'��9粄"菨p𰋳}岯纤eD'磊韪x�R`<铼v萜hbsW!酣岁�=驺鋪槖还_l�^z�!漊; �9�枓�8{鑫奁>!�苴疜'趈a�〞�嘵E隟P施圸8#m'�$_榡�=�+9痡/譿U櫄:嗨湃bT裶p��� ���&&5mp�/髊溛郦䓖 卹�6Q�旌{~endstream +endobj +936 0 obj << +/Type /Page +/Contents 937 0 R +/Resources 935 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +>> endobj +938 0 obj << +/D [936 0 R /XYZ 90 757.9346 null] +>> endobj +935 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +941 0 obj << +/Length 1873 +/Filter /FlateDecode +>> +stream +x陧\Ms�6禁W�(勦�4I[鲾墪S垩�mq*K墳翮$H +4V潹湨邃 Z||讳� *$瘤I N擯�0.撜� N碜?邜�4~'f偘d鎋蚈�$#)〩�逛 蛼飞煌驉閷 +<嵊?婵� 8RZ戔ly鈿蝌傜蹚Lv飾蒎晴U䙡�=I軼坊u鶺CK8矠褗V2��%-Gd:#泾N-K 2侧)Yiq炳�+?桋A京� 氅b祵暹_瞸銕顝Y鶳劣雨�騦�;齈X均0o�廂|_:k+i罹�$膉描�佺逰貪 貪�5(l袃MbB舤]�Y/瞌O�玛飘U�>_7(b]膷h囮 翽鮆劗亟鋠i`�4���豃 揾儳啎y悋=X隲褉褙B�*P�&%Hb%�6G_醿�;5�H鍪嵨�靍v0 f枇篱链A溗X▉鱯z�梀�)ci両努�+鄸鮍閃� �8跎傤��. ���, 孜e媟Cb崰V躉瀗wi~�$8寜膅6�*T虂z躵`怎U2P� 鑼X李2��z0�< 厱鮻X�賁z W�Q蘈�3Va籞枂硕醔趒/}饢祾弞颷(]J r絉�3�籏 pg鯼钄 Mb崱V纠�nFQ��▼(f�3�惧"'>�B� 0體誂醤�:_嘁�(馷庢荔�%菸'�;閭{话C�3VI咃錠╖竔綴,纂pH禴鐅镅礚��"硙�=邓蹯>珃�騇z苷吐媵tj�7兵穔5|毥ぺ鮴_r;[O狔Xj怲8譁i`綬7怭)b詒�R+T碳5am氕|[剾t筺�"贪�q臓椌;��;厓跭�CK�(れ�搙 �%灜��R筎▁蘥鯳(f_1dm鹀嶞m;榐曙 U李��?� ]刞仈难 珪縆城妄��"蔙h-�xB艤�i罽蹓Q郫<媈傦 N李�4� <許脨�"諧i`掂�b� 3H��5t睩艑sj呂L踴S�0?T(䲠撏~晃v忣\京镜7� +襗`K鮏灜N5h�;则Xq>N興YI橼澤軌戏w螬瓘轓 !擓磔轁;檿#檃;��u词絿黑树�9鼈�+=vv套%1漳J縵殪_w9�T櫮��=x症� mb揤崻S8_],质鬈蜽t� 礮o莥�3漗陲 +譑np 4?綮U夏肘 瑬鶥顺|蜜澳'攫k媻贄 IiL埝k洖熯w6=6咔�zそ糈鶎v癈{0磀拱e>彮��'貹5-搙��33犢 +s燸\�囜o﹣若拁g�v'}懊{0t櫬8�4^г扳~兢鳙mfG� �,仳傪b裴q獐P1覃.屖�6�戦%P霳锒`^hO�(〾轷� � I阅endstream +endobj +940 0 obj << +/Type /Page +/Contents 941 0 R +/Resources 939 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +/Annots [ 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R ] +>> endobj +943 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 481.9349 152.2025 492.8388] +/Subtype /Link +/A << /S /GoTo /D (a00077) >> +>> endobj +944 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 483.9922 513.9963 492.8388] +/Subtype /Link +/A << /S /GoTo /D (section.7.1) >> +>> endobj +945 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 470.956 176.4612 480.8837] +/Subtype /Link +/A << /S /GoTo /D (a00078) >> +>> endobj +946 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 472.1366 513.9963 480.8837] +/Subtype /Link +/A << /S /GoTo /D (section.7.2) >> +>> endobj +947 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 458.0246 162.175 468.9285] +/Subtype /Link +/A << /S /GoTo /D (a00079) >> +>> endobj +948 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 460.0819 513.9963 468.9285] +/Subtype /Link +/A << /S /GoTo /D (section.7.3) >> +>> endobj +949 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 446.0694 148.8948 456.9733] +/Subtype /Link +/A << /S /GoTo /D (a00080) >> +>> endobj +950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 448.1267 513.9963 456.9733] +/Subtype /Link +/A << /S /GoTo /D (section.7.4) >> +>> endobj +951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 435.0905 161.0693 445.0182] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 436.1715 513.9963 445.0182] +/Subtype /Link +/A << /S /GoTo /D (section.7.5) >> +>> endobj +953 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 422.1591 128.4121 433.063] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 424.2163 513.9963 433.063] +/Subtype /Link +/A << /S /GoTo /D (section.7.6) >> +>> endobj +955 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 410.2039 146.4744 421.1078] +/Subtype /Link +/A << /S /GoTo /D (a00083) >> +>> endobj +956 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 412.1416 513.9963 421.1078] +/Subtype /Link +/A << /S /GoTo /D (section.7.7) >> +>> endobj +957 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 398.2487 112.9203 409.1527] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +958 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 400.306 513.9963 409.1527] +/Subtype /Link +/A << /S /GoTo /D (section.7.8) >> +>> endobj +959 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 386.2936 147.7889 397.1975] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +960 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 388.3508 513.9963 397.1975] +/Subtype /Link +/A << /S /GoTo /D (section.7.9) >> +>> endobj +961 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 375.3146 155.5297 385.2423] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +962 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 376.3957 513.9963 385.2423] +/Subtype /Link +/A << /S /GoTo /D (section.7.10) >> +>> endobj +963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 362.7568 126.2002 373.2872] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +964 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 364.4405 513.9963 373.2872] +/Subtype /Link +/A << /S /GoTo /D (section.7.11) >> +>> endobj +965 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 350.4281 142.2503 361.332] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +966 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 352.4853 513.9963 361.332] +/Subtype /Link +/A << /S /GoTo /D (section.7.12) >> +>> endobj +967 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 338.4729 157.7419 349.3768] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +968 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 340.5302 513.9963 349.3768] +/Subtype /Link +/A << /S /GoTo /D (section.7.13) >> +>> endobj +969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 326.5177 153.3186 337.4217] +/Subtype /Link +/A << /S /GoTo /D (a00090) >> +>> endobj +970 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 328.575 513.9963 337.4217] +/Subtype /Link +/A << /S /GoTo /D (section.7.14) >> +>> endobj +971 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 314.5625 168.8202 325.4665] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +972 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 316.6198 513.9963 325.4665] +/Subtype /Link +/A << /S /GoTo /D (section.7.15) >> +>> endobj +973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 302.6074 180.9847 313.5113] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +974 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 304.5451 513.9963 313.5113] +/Subtype /Link +/A << /S /GoTo /D (section.7.16) >> +>> endobj +975 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 290.6522 140.596 301.5561] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +976 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 280.7543 513.9963 289.601] +/Subtype /Link +/A << /S /GoTo /D (section.7.17) >> +>> endobj +977 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 266.7419 161.0694 277.6458] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +978 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 268.8987 513.9963 277.6458] +/Subtype /Link +/A << /S /GoTo /D (section.7.18) >> +>> endobj +979 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 254.7867 162.1755 265.6906] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +980 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 256.844 513.9963 265.6906] +/Subtype /Link +/A << /S /GoTo /D (section.7.19) >> +>> endobj +981 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 242.8315 163.8392 253.7355] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +982 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 244.9884 513.9963 253.7355] +/Subtype /Link +/A << /S /GoTo /D (section.7.20) >> +>> endobj +983 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.1769 231.8526 167.1461 241.7803] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +984 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 232.9337 513.9963 241.7803] +/Subtype /Link +/A << /S /GoTo /D (section.7.21) >> +>> endobj +942 0 obj << +/D [940 0 R /XYZ 90 757.9346 null] +>> endobj +62 0 obj << +/D [940 0 R /XYZ 90 739.9346 null] +>> endobj +66 0 obj << +/D [940 0 R /XYZ 90 553.9527 null] +>> endobj +939 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1007 0 obj << +/Length 287 +/Filter /FlateDecode +>> +stream +x讠Q=o�0蔟+<&C芑s|��( ,%Q�_�祃晣{鏖w颬Bx(=Hk:g�; +悋� 覻萭�弲xx!/津L,孆0丵B扙筃(O3蚶橍嫹 $� 偋m穽h盏脎]R判�.玈�)栤箻岦宖紎�%�恊喙牬wF~zO�(r襑鏢�4'&唵{k^�;V仲{F6鯻1]hA璷礵瀛v-5吰淚Z 烛 杓v踀e敥}絺e�&镚i�0#=w鄨�)櫎is鰼珩P烷|咦0�'j7*�斺} endstream +endobj +1006 0 obj << +/Type /Page +/Contents 1007 0 R +/Resources 1005 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 905 0 R +>> endobj +1008 0 obj << +/D [1006 0 R /XYZ 90 757.9346 null] +>> endobj +1005 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1011 0 obj << +/Length 3129 +/Filter /FlateDecode +>> +stream +x陧\K�7钧W9�枉c/A鰬�温H孛f﹎ 袶Ic'�~�&慌&k葹I秅 *V}]H汳f佝#3僩J(d棾逋 <{oo�� ?s熟_鄧� l6彌昱�Q尋v跷)椳 ≠靔踹嬁�阀鎝9�_埶�]7郒iE\l� +�5錷兓護�0A豞�6鮪拯蛛 Y4钀 qAe獵 r9'恽�7涖)(c3儗t璠]T#臝Us鉀��火懂u{�~豱j考籭v��� 苩蹌�7У亢>l毿t�棁晚i尺��0进荱飗B"�:渒�f僋塌炃饩b�$佝�=ku徎附=綷瓧匪椊熛m窧�8KN磿BK纼�#!� r鑢.lO|齭䲟t袄 a�亓g騯R@瞧潝ks金輜橴R1葘@Z k怭D�%膱窼�"�蹈肽w氙q7a蹺=V娀琧岣�;鰹�+|t� �4�w漍w雈惠�?^浰壅�,+;腋�-鵁飪蘋1�)与 %h|啀酨獝Z%p眶R攁D羔C縛伩啭俩�$忖放蚼7pv込I排G�熡>宱囃)弱儻躜v砛疵[: +�雩齫奎�=ps:vC� 閟s�|霣ot�*~却;7�T聵� c涰&�茲�#򬘺.屗�2絇0謭�8Y� +芢�� 鉝蚥誑@)31w-.揄猛盼�乒窖乒�<枪劫乒殴紧qnE�8wR.雾兿鎆#N寁=崒_!B裧4@qc6x鮸e翹皱儞凉Y!!� +4� + 骃 h�!I靹 :�>氥~�!O�"F���嶵珒�\Jq憦_DS粈�&翍骸摢欁v馠�趙��钇﹏┒[�4冕�+�90牱闋[箊J*�>�9\獉/G駹柢L籫��"槉 +6kr� +澵h*DzGQ#諝Pa漇�!;饕 帉 +A猣轗羑!嗹T�#{筥J伈/Y谋o�;_亿\辣Q魌錏>emy"榟踩孉學k<絏蠇阃�6g厺;1佸,V['_脩閡8`tP6峱抌H=蠭�,+i輎o ,;J阏踸�7w� +x鞮.&泮 \鐆� +yt �.未{.0� 0倝��⒏Zw昱苧!R;� e欈� kh臚孖1d\R5藮 亦�C.斍%濫]瑥h离xR靻L荤 �"槉/J 醪^拴兕�P`V�>�5gUA�%盂R芔犝F歳憖圈TA猣贜綐澲 M窚贉�JL)阵+'鱽 8~m�=慽鞔� m@SM工]橋j}�{m"豌hS啋�=�X��4 垖6A猣谝F+F啨A趞;f噌D?9�~艗€3頌%`F0锗"l偱娫X覊=�%戞q,)C婶:(4�麆�%02�qC怢m�49�(擎敘鬵P婜��>�4臹却{襽鮚罷C 親*Z+b Mi蔖2�1i�i��H覬諏隩E绦�(吱�=/粡5�譍宝� 檝��6 #榡ā 滇^琯颓鎧馆4籗�)懧J蟗�%辴�50橿η祯[W0玟巘�4U孲聭鍾 �;藜 +^�&�ifb�"�;▼I��;喃Q醊鬪 w壛pL疃9禬昿锬顟顀醊撻嘂 +鱲X�螺廞E銛�肜崁d�髥� p�(歩� � @SM�0ET醞》�p�,蠬I蘤炳" 倈 PΨ}?鎡篯蜅�7P曳�n 糚鸥K鷦54頧馃K�/歬x轰_G�!籗sx甾PY,嘯傗K��艊3頌p!D0V\� +�0鷨c�7(餫杼pT燲%8�Q� U�;>Hd续錍e隲怬龕燮D賾檝�妦罷询,Lk踟^炝��齟@欈>鷣j搼�晜H}袸誏�.揬-WC�S勿?趵箎u婟恑髟�2`-%ù恧�i{�u捗�#嵛w�(毫# 房菷鯋F躖匔y焸�4} +�(|t� )苆%蝆塘踤甠B団笣蚰鶭�9堊歆Z濝涙纡抍鐼V畱�"�>{獧1宀Bl踖�洓鱬fp隵飵顥Q伶翱;mv宛r聼N.�<*轂i鞴�0�L晪9A聵Z��#�7�e�1騻?7報鰷o�"cF惇吩0屔□?H .粲�噱Q�(�=宇�n嬃Β祋"E賸登�7沸紕;� *�7�.d纘 3垰疓I�湁L詽L蛛餌&铛{&2%儚炄�+艸�賸臕9套I磐,VXL谹締 盂�斯;椴]\7�#袈!bF0� �A郅牬B7湆�NF_冈锦窎麧哇w齺:{雤ql?玚粏綵o/緔�>��u|pg�刍骧嵖癞Y听�hh娳啨N�M噢3宍ⅰ��(�焭眏�幨欈��7у��!) K��瑜j妤獿櫮|m斯�黹p蠹�\冃�?孲�)谵硽o�-;�&檔A�觘_e谯榁�3宍獦秈涏jU�t\L�dz}L撂�w孞轎侦2�4脇h譋輿b绬M箪g�}��1�?蓬纱{䜣g騚� ]呥╦壂絓箄_ +扛魎跪�-W忸,,W騘�+僞嚄+E儚N曷%痡y��'鮄岣F愰=G|炞FL憖H緭獧i崜噖y痼輫弋嫯鑄搌e�?�8~T +/鯠� #罷)渟�� +[:�:["呫豏F愰m賠偋@�(� 璗�.� y衝O曈鷃鵳瑵�6D=弝囹Q$)鯝�|�F0諓�(猌肱�$��#IAΨlnl�鄧i窧X匍�H秌孑WP%錍髱+W桳\�0�ダ*�*Ow忊I��檝��- 罷<�q;�$R8�'e欈!O�O$u岁�'璗图潶Y 64_鉏錍�?�5��T鞓L�'�5#榡6�5b楿嫭漍滰懧q*#若骫硑烤捱7�(e楓J&x草� UC醞F�!婗隣嬘耈M輦腤Y�"朜籣纭躁顆X忂^喂鹴v[fu縗�頪紐鸄�;Q頹盵��語狃C诇勬蠲佥� 態 w]掭濛]��閙鷌*麚�泫英a}盘3豟箛鬎"��;泛燄A朴茴噇'a刖"o� +Q岡ǒ��蔟w}endstream +endobj +1010 0 obj << +/Type /Page +/Contents 1011 0 R +/Resources 1009 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +/Annots [ 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R ] +>> endobj +1013 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.3629 456.6823 228.655 467.5862] +/Subtype /Link +/A << /S /GoTo /D (a00100) >> +>> endobj +1014 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 458.7396 513.9963 467.5862] +/Subtype /Link +/A << /S /GoTo /D (section.8.1) >> +>> endobj +1015 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.3629 444.5481 229.2129 455.4521] +/Subtype /Link +/A << /S /GoTo /D (a00101) >> +>> endobj +1016 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 434.6502 513.9963 443.4969] +/Subtype /Link +/A << /S /GoTo /D (section.8.2) >> +>> endobj +1017 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.3257 420.4588 183.9331 431.3628] +/Subtype /Link +/A << /S /GoTo /D (a00102) >> +>> endobj +1018 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 422.3965 513.9963 431.3628] +/Subtype /Link +/A << /S /GoTo /D (section.8.3) >> +>> endobj +1019 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.3257 408.3247 184.4911 419.2286] +/Subtype /Link +/A << /S /GoTo /D (a00103) >> +>> endobj +1020 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 410.382 513.9963 419.2286] +/Subtype /Link +/A << /S /GoTo /D (section.8.4) >> +>> endobj +1021 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.3543 396.1905 174.6379 407.0945] +/Subtype /Link +/A << /S /GoTo /D (a00104) >> +>> endobj +1022 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 398.2478 513.9963 407.0945] +/Subtype /Link +/A << /S /GoTo /D (section.8.5) >> +>> endobj +1023 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.3543 384.0564 175.1958 394.9603] +/Subtype /Link +/A << /S /GoTo /D (a00105) >> +>> endobj +1024 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 386.1137 513.9963 394.9603] +/Subtype /Link +/A << /S /GoTo /D (section.8.6) >> +>> endobj +1025 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0952 371.9223 181.8208 382.8262] +/Subtype /Link +/A << /S /GoTo /D (a00106) >> +>> endobj +1026 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 373.9795 513.9963 382.8262] +/Subtype /Link +/A << /S /GoTo /D (section.8.7) >> +>> endobj +1027 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0952 359.7881 182.3787 370.692] +/Subtype /Link +/A << /S /GoTo /D (a00107) >> +>> endobj +1028 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 361.8454 513.9963 370.692] +/Subtype /Link +/A << /S /GoTo /D (section.8.8) >> +>> endobj +1029 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0952 347.654 190.1196 358.5579] +/Subtype /Link +/A << /S /GoTo /D (a00108) >> +>> endobj +1030 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 349.7113 513.9963 358.5579] +/Subtype /Link +/A << /S /GoTo /D (section.8.9) >> +>> endobj +1031 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0952 335.5198 190.6776 346.4238] +/Subtype /Link +/A << /S /GoTo /D (a00109) >> +>> endobj +1032 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 337.4575 513.9963 346.4238] +/Subtype /Link +/A << /S /GoTo /D (section.8.10) >> +>> endobj +1033 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.7115 323.3857 213.3523 334.2896] +/Subtype /Link +/A << /S /GoTo /D (a00110) >> +>> endobj +1034 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 325.443 513.9963 334.2896] +/Subtype /Link +/A << /S /GoTo /D (section.8.11) >> +>> endobj +1035 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.7115 311.2516 213.9103 322.1555] +/Subtype /Link +/A << /S /GoTo /D (a00111) >> +>> endobj +1036 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 313.3088 513.9963 322.1555] +/Subtype /Link +/A << /S /GoTo /D (section.8.12) >> +>> endobj +1037 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.7641 299.1174 212.6453 310.0213] +/Subtype /Link +/A << /S /GoTo /D (a00112) >> +>> endobj +1038 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 301.1747 513.9963 310.0213] +/Subtype /Link +/A << /S /GoTo /D (section.8.13) >> +>> endobj +1039 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.7641 286.9833 213.2032 297.8872] +/Subtype /Link +/A << /S /GoTo /D (a00113) >> +>> endobj +1040 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 289.0405 513.9963 297.8872] +/Subtype /Link +/A << /S /GoTo /D (section.8.14) >> +>> endobj +1041 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.7641 274.8491 197.1536 285.7531] +/Subtype /Link +/A << /S /GoTo /D (a00114) >> +>> endobj +1042 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 276.9064 513.9963 285.7531] +/Subtype /Link +/A << /S /GoTo /D (section.8.15) >> +>> endobj +1043 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [116.4668 250.5808 149.8812 261.4848] +/Subtype /Link +/A << /S /GoTo /D (a00120) >> +>> endobj +1044 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 252.6381 513.9963 261.4848] +/Subtype /Link +/A << /S /GoTo /D (section.8.16) >> +>> endobj +1045 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [116.4668 238.4467 150.4392 249.3506] +/Subtype /Link +/A << /S /GoTo /D (a00121) >> +>> endobj +1046 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 240.504 513.9963 249.3506] +/Subtype /Link +/A << /S /GoTo /D (section.8.17) >> +>> endobj +1047 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 214.1784 179.5994 225.0823] +/Subtype /Link +/A << /S /GoTo /D (a00123) >> +>> endobj +1048 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 204.1609 513.9963 213.1272] +/Subtype /Link +/A << /S /GoTo /D (section.8.18) >> +>> endobj +1049 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 190.0891 164.6655 200.993] +/Subtype /Link +/A << /S /GoTo /D (a00124) >> +>> endobj +1050 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 192.1464 513.9963 200.993] +/Subtype /Link +/A << /S /GoTo /D (section.8.19) >> +>> endobj +1051 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 177.955 135.336 188.8589] +/Subtype /Link +/A << /S /GoTo /D (a00125) >> +>> endobj +1052 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 180.0123 513.9963 188.8589] +/Subtype /Link +/A << /S /GoTo /D (section.8.20) >> +>> endobj +1053 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 153.6867 151.3858 164.5906] +/Subtype /Link +/A << /S /GoTo /D (a00127) >> +>> endobj +1054 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 155.744 513.9963 164.5906] +/Subtype /Link +/A << /S /GoTo /D (section.8.21) >> +>> endobj +1055 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 141.5526 135.8939 152.4565] +/Subtype /Link +/A << /S /GoTo /D (a00128) >> +>> endobj +1056 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 143.6098 513.9963 152.4565] +/Subtype /Link +/A << /S /GoTo /D (section.8.22) >> +>> endobj +1057 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 129.4184 148.068 140.3223] +/Subtype /Link +/A << /S /GoTo /D (a00129) >> +>> endobj +1058 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 131.4757 513.9963 140.3223] +/Subtype /Link +/A << /S /GoTo /D (section.8.23) >> +>> endobj +1059 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 117.2843 148.6259 128.1882] +/Subtype /Link +/A << /S /GoTo /D (a00130) >> +>> endobj +1060 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 119.3415 513.9963 128.1882] +/Subtype /Link +/A << /S /GoTo /D (section.8.24) >> +>> endobj +1061 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 105.1501 178.5039 116.0541] +/Subtype /Link +/A << /S /GoTo /D (a00131) >> +>> endobj +1062 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 95.2522 513.9963 104.0989] +/Subtype /Link +/A << /S /GoTo /D (section.8.25) >> +>> endobj +1012 0 obj << +/D [1010 0 R /XYZ 90 757.9346 null] +>> endobj +70 0 obj << +/D [1010 0 R /XYZ 90 739.9346 null] +>> endobj +74 0 obj << +/D [1010 0 R /XYZ 90 553.9527 null] +>> endobj +1009 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1091 0 obj << +/Length 1559 +/Filter /FlateDecode +>> +stream +x阱Z]o�6}鳢校 �,�%酯纫礙�Y绶�Y眳:抔薽蝻G姢B墝óA譮婶褰嚄玷挃Q�奟�,)�<蕂f0趫孀3た^婏椂料砏8峈恟蹋誹雭#�0卵j齸廀饷闙Dh g覒l=]\.枠�9P菁*w吅花峙4鹐誆掷酘讫{鳋屩鄾$MX鬥|��)巒f骯7鹀鰗鏕}裿饙彜 $1#�莏H枙c崘Ρ� 堮}J垥)@1翍眏3P顭 塒 +xL尤rЬ9l瓷籢xm?舄�/躭脗�9�:`�@蝬�0�(!亐貒�'d鹱"[1�$�!n9@掶u�譟揮eG輁_]Y}\铌<郓蟜$菬膅 +绉c盫=斉佩'甖騴]ǘ琙珱χ艵苏%ICR.3 R苩茢OA兄Ц^煔覣擌鞚&磛/钅b� 2�%凁墙�4}杌ih*� 9兡瘠/�檒�-韣.�飏^P�Q0D@馉芡LO�;鋫鰣圁n蘬�灄�Ql瀷B柷l@甿m菍L镍曧徫猳u�IL"{澒瞵/溩炎l佱鼡黈椱U�-T噓彼� +輟�咫�7U�0"织C亡P�6埤㏎ef瓙2Q*撕瞜O悃"�//A<�I賫a 阐=\�:%效w?偳襺,追j5<c纸錺氼�8~5U賨H +F脩kX夽備用+蹙陉uY拂b~f顝M�舣�(J�u眂秅&閒t^颙7全/偳� K��"�!�嘲n,囉t3幚駅t初�&墖<簯F“媧*�<桨�-Z+紼摶焃76S叆淠 ~:Z馾~扸F缏癞碆絑�"hM� +�', i艠叺b9湨晀巁嵿恛}KK dC我R[參s +h*V斀鑂2/媩�阱豎Q�=�W壂l婞喔/騌�*7� +UnuT�q邠肐�M藉~阓_yGM鮳疟逎罨]軎坞�-剶騩EoO�&褅4q巜Eo�2葖啾鑽E綇Y鹭罉呴m9淔飍巁涋[結傎唶蕲U(8�:胦 颤Pk惊沣v.熯Ui=遁臦蛆}頯�:�菗蜪*童鉣�{U郋餢 艕凾`搪*�NS�8钳FP飣'g �爌D牠B�ⅳ[娻籍$�7龕啕柽m 蘓�?誡�'鍝�2:巜%���#� &�P蜝漎K营紆晜)鄬[���钳9f坞贲�塇D邡8湱�� +E鐗xH 侹iu磄捶橽 剳d锍時��鴍u鴴> endobj +1093 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 726.8189 179.0619 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00132) >> +>> endobj +1094 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 716.8014 513.9963 725.7676] +/Subtype /Link +/A << /S /GoTo /D (section.8.26) >> +>> endobj +1095 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 690.9534 161.358 701.8573] +/Subtype /Link +/A << /S /GoTo /D (a00134) >> +>> endobj +1096 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 681.0555 513.9963 689.9021] +/Subtype /Link +/A << /S /GoTo /D (section.8.27) >> +>> endobj +1097 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 667.043 140.3173 677.947] +/Subtype /Link +/A << /S /GoTo /D (a00135) >> +>> endobj +1098 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 669.1003 513.9963 677.947] +/Subtype /Link +/A << /S /GoTo /D (section.8.28) >> +>> endobj +1099 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 655.0879 140.8753 665.9918] +/Subtype /Link +/A << /S /GoTo /D (a00136) >> +>> endobj +1100 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 657.1451 513.9963 665.9918] +/Subtype /Link +/A << /S /GoTo /D (section.8.29) >> +>> endobj +1101 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 643.1327 163.0021 654.0366] +/Subtype /Link +/A << /S /GoTo /D (a00137) >> +>> endobj +1102 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 645.0704 513.9963 654.0366] +/Subtype /Link +/A << /S /GoTo /D (section.8.30) >> +>> endobj +1103 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 631.1775 158.0208 642.0815] +/Subtype /Link +/A << /S /GoTo /D (a00138) >> +>> endobj +1104 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 633.1152 513.9963 642.0815] +/Subtype /Link +/A << /S /GoTo /D (section.8.31) >> +>> endobj +1105 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 619.2223 158.5788 630.1263] +/Subtype /Link +/A << /S /GoTo /D (a00139) >> +>> endobj +1106 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 621.16 513.9963 630.1263] +/Subtype /Link +/A << /S /GoTo /D (section.8.32) >> +>> endobj +1107 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [118.6786 607.2672 153.6074 618.1711] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +1108 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 609.2049 513.9963 618.1711] +/Subtype /Link +/A << /S /GoTo /D (section.8.33) >> +>> endobj +1109 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.6599 595.312 166.8776 606.2159] +/Subtype /Link +/A << /S /GoTo /D (a00141) >> +>> endobj +1110 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.0598 597.2497 513.9963 606.2159] +/Subtype /Link +/A << /S /GoTo /D (section.8.34) >> +>> endobj +1092 0 obj << +/D [1090 0 R /XYZ 90 757.9346 null] +>> endobj +1089 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1122 0 obj << +/Length 1862 +/Filter /FlateDecode +>> +stream +x趰XK撣6钧WhoT暸鄘o墲le珳竩塻�Hh臉"�$枭t�$%羊査C犙鐵�$v��2阱i杚掜沨� ��紲�� 嘥幕脄�Oo钧I�;匶&虞� 単I納�逎Uo醢?�4 +昌O�� I�估 萂盲悏�0憳E燕儵峪僵瞵矋閒i" 酅挜eq槫2s也P�"姠嚆�E`g7要",釉 恊X蔅z硤髭�5E徴恤珒�;貥儳*�髊 蚇階鍽�4)+Esk�-赐筚緃麷 甄V�,a痰涚螡 朜f�-z/余薧赪"^�"�3鸫2輍仗磺籽陭C順�;譬:擓j璾�肵_幒�=@^寷v丵w�w诰�畗f�3耏of2�7馣倊0h諚� %�:�Z瑻�4r�&wY幪帕 +犖辍Y蛪u�&庭o5z �剮浼 i~襃u[P佶а鲆伢5ZH1揺�;g烢����+�+-刭p@�` 輂宾斗鑂最栨轆佌9(|疶爻�4汗橢氡5甄�笣錽柏�%欮/ +!�寺羳咔�tq`M滀 敻b蠚tR +�3冊|V誄鈷Qp CY(�NzH�$x"9y蠴CoF/詏亢�4f�#f��B�L这\煝(6h� k:9槚垕抢�2(�辣箩祴0#-8�阨jY衑jm脰脻伭qt爿&苻剿.u僸缣纶 "煴�9扪�4un匚r檴@誣 培�恈�鄳簿g�&f�=Н签u� ZQ +�6q焪�-坯�癰狠�坱灞籃�&v77L暆M �T蹝S尨�.,8;�*斲"#.o?騶#� +1ひ銳��-蓙迢然1菖�帹6儘獩缞W�x,�(P侅螼肠�"� D�]!谈p 掗�囁Zゃ&殝X 1辺 舨c#!�9乼�$P谢欻N7Rㄘ$渨惵� H闐�y�*Q"/Hv醀傮;�釫}F脻S翈�V�醱g�>M$赔N,握鯈K骍�9}娨䦆花鰊甍*v�闅�5�7KEs n = t釬>�Y迏甛�4饦R時}M)W濠鋁uD獲QDX�%zmh񅙲@�6脇NGu�圣イ�n�啓桃噔,归穈q�*檡騷m螺��.�+h儩�蒎刖褰T熲C燽铻i�*�;榿I]淘賾5�6��"E憭o营c薲�鰞�&qB茥�(簱V�S �2�堐 +�优奱+�@c\$�T� 麻>p褡�4~琿纡朸憚e攅讂a韫晴梬�豺%紴稆:圯v眕c蛁牶�哪~嫫}P �'噣�*�+咷�z秓鶫� +星zg@讂�餄鬓瑖列3p骮享6c鞒Ik虹?/'�Xfa�_卭Y~3}���j舭�4w涶B2䝼颀.戴-吴徿 爂�邚\匮齝n軭�#檵P$��鱗邕�?�endstream +endobj +1121 0 obj << +/Type /Page +/Contents 1122 0 R +/Resources 1120 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +>> endobj +1123 0 obj << +/D [1121 0 R /XYZ 90 757.9346 null] +>> endobj +78 0 obj << +/D [1121 0 R /XYZ 90 739.9346 null] +>> endobj +657 0 obj << +/D [1121 0 R /XYZ 90 553.9527 null] +>> endobj +82 0 obj << +/D [1121 0 R /XYZ 90 553.9527 null] +>> endobj +1124 0 obj << +/D [1121 0 R /XYZ 90 520.1647 null] +>> endobj +1120 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1127 0 obj << +/Length 2807 +/Filter /FlateDecode +>> +stream +x讠賻跢騷綛� 漩擅X,鈉6o|E� 郟��⿶T瞥_縐]軹髳d`a屬飚嬧+��*e玐莂*U词wWl��?]q�纙�稼\�"]塰倒7"j僚j除m-掚@$,f朊鞧j舵!A籪{� +縤蛎/淂哇珱虭撞膽隉W魁蜼[`镯 e氳�及惂懋攼睽胡|躏-� K錊膖枔�p豖O/接s匤&j鍫P_勑�q隑藭噉Fn篅敨0eQ4"�:獻皐V绹诣╈i源菣嫘計埒狍��yⅤi駒玟憷. �EOB玳"蜷~l沰曐⒊陋汓kY?X盶sG�/辋PU4� 度睹N'禺向疉[驡\凜倕Y^性�$"^n緀粆屮撒虓/t/��(尭8�鄬皨j8K瘿� t�Ft�沪}鏿嗑褪�k鬈跖甗�O落專z腌$`�. � 9稂g�趋堔鼌6�/囟宓s:m�&o*蠝杁�2=m>�i `舚栤Q�:亴杈)妢e怼剌垌ec袘 戉审紫連]>�r掎�晤齖詽�u褯源_鞤僸阾��7�5莐b麈徾鞣�/L3SfKB!觴绿4�;� ,瘫! ?�XX�.衉�嫆Q: +煽W0�SS琕,痭~簘J.毘P砊灄�u亝96拫盦%蚊Tk狵��%J)脴�S頛j�7,�锾�鰲洆试2LX扤鴼j覣]郌B怰﹫擒恲僼糒ee|J\ +砫}犯� 务文e鞤�(洘?菁<�\芇譎筊iF�/ (馉庵y苿b釀'1� 釵虙E�(稹鎤�$ 搥+V!氅-Q靺2f瘁~K料覈�%� +�:冣咾侥娓|硃樈躽E2l� l硝凩B)�繷 Px冓SIBq)�5�椁F脵k3�I懍K;�U憴貍o噝[�4�钫�7A�?W吤慍i_繳誤瑉阧讅c避5� +繯菰A揿vE洍槡�6pS4}6M酖0�,d刪 q诇宪�kW路艧嚥-P�4QZ}嬷�踨产郷唽��笹禓�*墧a+ +y(爐e�^^#_p_o;挥W +3碽┃%�*仚份或詵}彈4|箋︾薽�#�7圍+�暐瞎�%娧悂肯B0T鮅aI IP�ゅ�+7鷹庉幚連�x嗁刢帑G�Lg蕥 6駭梚:pPs撓�!�,�籼礚瑘╡�2�鹽遇魊�6V�*蟎Z啊�#序葄?鐝籸�/�j貥殍擵笖∫Jd +竨]允�#鸱痰2菍 4U劐?>w醰��4侗L償儦�坫 �)瑻燯𒗛鱈�2郆`{�;缭僺J霚踜灛勺pd礂&锽<椞ff@獣{ 5{p�*�球PHjEgq�趢蒐t�:�峜�郀蛛-U毨`� +誏苒眭R$� +去�\漏鉧J勰隌翵o"m瓑S2麲*れ�焢壡�5�,Dj贖XTk�晓蓄洰榣gQ3��7�,眒,澪F|:�x!您 �攼h軵�'食5�.x9�v:戥 梟�壖犪.�>⒙&覫乊郜捧q��鉩�剨琌<九�莈��-撹褛鯈�鲄�8寗� v婮�gM鑪`荇d1�%LN竒�h0�5衊舗�;痺 +X烑矐浱豺槨%懃Y侹j�� �33铨P须p*Om6$[2��1c竪�蛳玲3sr茑�贫掼璀�;G硗@瘛 "1T"堣y_鍼.=/賮+M|顛s �吓vZ 俣-}.葹囷14鹋�攥�漿W( 禿墒*籹呶琩#絕4+*p�h��鼐%,P?谽ーiR%�C0M Z犅�=`M叓�4眛!頳@j駒�n�:崴�5�3J滲9o偞�"i昴��懒`鴅�殜d逮攣圼�黗9膧丳鎍�=X峿� �.�n毇.黒盽[莖D愼8�<穈O4�"S(鎝�5 炇z坋1(踡u蠎疀僛9x%屒盕1?\(� #薒F鈋AGt拎冥Mx羿oNc鸷C有噶﹟o繷�鸇TF�灌 风 乫 +�刬d6埿躊pt�堶8?磼疱罟/亥��佛��2獂�*泥^�#齙�1芈ヰfQ樒pS5譳亘"1皞"C汒嗁灶�/v�%|�/\�'{!� a(#媗龍抪_缈ü{v喀黀泽�?rIJ�⒃ndstream +endobj +1126 0 obj << +/Type /Page +/Contents 1127 0 R +/Resources 1125 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +/Annots [ 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1139 0 R 1140 0 R ] +>> endobj +1129 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [364.0856 532.3134 409.2359 543.2173] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge6bae7dc0225468c8a5ac269df549892) >> +>> endobj +1130 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [455.8347 532.3134 511.5056 543.2173] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1131 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.2535 520.3582 263.1547 531.2622] +/Subtype /Link +/A << /S /GoTo /D (a00142_g99e43010ec61327164466aa2d902de45) >> +>> endobj +1132 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [302.7829 520.3582 348.4913 531.2622] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b04a0035bef29d905496c23bae066d2) >> +>> endobj +1133 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [267.6923 508.4031 354.8052 519.307] +/Subtype /Link +/A << /S /GoTo /D (a00142_gad14bbbf092b90aa0a5a4f9169504a8d) >> +>> endobj +1134 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [462.2904 508.4031 513.9963 519.307] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) >> +>> endobj +1135 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 496.8215 138.0296 507.3518] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) >> +>> endobj +1136 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 461.075 239.3186 481.9864] +/Subtype /Link +/A << /S /GoTo /D (a00142) >> +>> endobj +1139 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [326.8799 360.3806 400.6034 371.2846] +/Subtype/Link/A<> +>> endobj +1140 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [132.4581 350.1928 206.1817 359.3294] +/Subtype/Link/A<> +>> endobj +1128 0 obj << +/D [1126 0 R /XYZ 90 757.9346 null] +>> endobj +1137 0 obj << +/D [1126 0 R /XYZ 341.7132 422.4291 null] +>> endobj +1138 0 obj << +/D [1126 0 R /XYZ 90 405.4028 null] +>> endobj +1141 0 obj << +/D [1126 0 R /XYZ 215.4248 351.5786 null] +>> endobj +1142 0 obj << +/D [1126 0 R /XYZ 90 336.3195 null] +>> endobj +1125 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1151 0 obj << +/Length 2493 +/Filter /FlateDecode +>> +stream +x讠藪�6�>_褅Zu昜+抸瓮�$�-o2U{坰蠬靑曊RG�<檤�╓k趪-譞$ �賐�?彼俔%~βxW滐傒3�?� F�|鱴鳢e端�,栺铖h9穆彜惢球w/雠� @鞥甑�5';襶亠�x 咈晞 � ?<嶳Y〩�e⺻鼷廉�>�臼襤�摾Y&w缁P*7╋~畸先�v林�"《6洆0Mho鎀觖� +R/縗�6/N4sPs� 崬甓鳵5�8薋嫁嬋RWEe铟嘝瓢D�=w�;�i诮尲椗壹0�+^N�毬Tm訐磿3招鷓燘鳼褨� 貙 N璮8h4*�@�d齄�0馽問岌帋�鰽唹梬�}u迹塱劭娄MW4/贑�4鸱鹹<聱s^54*�#阾詽n +芕V�;�+ �瀣懢鋆n粢2耼�79O;定磦#G心��<@櫦'靍iXIF攅[霝v耦qn{C磽�瑡S轙龣p謑k 鏹濠Dx焇桐mp,絞輍豱邸�8 Qx� 7.入�%┖hK�济tCaz豼H飅/o0打斻�厵b~\L{篕踜獹磘殟堇n戨转�T�"繾z�螟仒屁E榶4sn䦷T� q1`<嫋蟭 傮P涥R髮腤唂椂jL垮V钱=S弭�,P椡担!幦K)?V2t怪�侘s[�5眬頬�?仧瓝k鶃H揮斊>鼌洨�鎀坠?忘2�.蔙? +El曻wk酏Z�()n��6湮硬?*毟∴飔�譂砲�)[�6-濹z]E��8湽颌k{鏅3鈯籍1<旔j:剘�匳wzRi与!:;R�Ja� 骇HXW懳wJ棞崩A勠� �:�B寀 +FNA蜡lj囑q誅v篢鍰A劁滇��=p�} 蟹�O鏉s亮聛=M詓鏭↖�(謌A53�?� K桋牜x�8瀪+N�j訲臔m�/un[@貶�珧壔*笺&叩`H[吨/亪抙/�+绷�+M0剦 +4! �孏Ce鄌%佧宬p�4畢�<磅窘64�," �]T焹@4�2�09粙:fE%1岡l�Oa仜C攅摞17.冷s�72攀S�鬱捁� 槽A愝ㄤ嶁|j8坭 9{]i颰!鐊s� <駄迴�--p充 `糊�邛惩顒挢洮耶� �踃r鈨澁.�斷~捩阔�,榤9�.赚3葪鮚N享qk狂|�剘つ沷s偔鷄ぴ�7&�秩H輺7R}K��,堛W�(熪�陃濯�遘靶-y3 輺:Zh.u肂-M檞霶�7N梂隝輪ad鵤渾ofNp�0#�6蘉y揳�!�f!u�0E{綯鸾FC� 恶箽1+DAH椇G�>延恨葏 a欷砭魷達墕oY|U�,蹟劆<7虑 酹衹遶�熃�;} }a�窘l�;�,〇N噮/ 诅 8竔MH0�北 達��B8屼韜�)鮹蚯j銇jl脻7}�O璀��菵(娉斞涻鲉旇j颸"T蒢_蒚�/ �/d緔�﹐K_翊曥0騏$怒鼺L臈A百捓酅����s�SX"敎�,莮枿札�&|&詞|�7rwEp鲬_茑#弃�!�躃u/毩哹~a� 霝蹏�>1�,焷緊�z}滞趷mf��QJ濌endstream +endobj +1150 0 obj << +/Type /Page +/Contents 1151 0 R +/Resources 1149 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +/Annots [ 1159 0 R 1164 0 R ] +>> endobj +1159 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [236.6531 419.6496 314.5786 430.5536] +/Subtype /Link +/A << /S /GoTo /D (a00155) >> +>> endobj +1164 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 93.195 146.3484 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00128) >> +>> endobj +1152 0 obj << +/D [1150 0 R /XYZ 90 757.9346 null] +>> endobj +1153 0 obj << +/D [1150 0 R /XYZ 194.5769 652.5717 null] +>> endobj +1154 0 obj << +/D [1150 0 R /XYZ 90 636.3994 null] +>> endobj +1155 0 obj << +/D [1150 0 R /XYZ 90 553.639 null] +>> endobj +1156 0 obj << +/D [1150 0 R /XYZ 90 546.5037 null] +>> endobj +1157 0 obj << +/D [1150 0 R /XYZ 275.1139 480.7842 null] +>> endobj +1158 0 obj << +/D [1150 0 R /XYZ 90 464.6119 null] +>> endobj +1160 0 obj << +/D [1150 0 R /XYZ 90 346.02 null] +>> endobj +1161 0 obj << +/D [1150 0 R /XYZ 90 327.3277 null] +>> endobj +1162 0 obj << +/D [1150 0 R /XYZ 90 308.6354 null] +>> endobj +1163 0 obj << +/D [1150 0 R /XYZ 90 111.5284 null] +>> endobj +1149 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1168 0 obj << +/Length 1828 +/Filter /FlateDecode +>> +stream +x诃ZMo7诫W鐴栠送-┹腁bけ�� P$�*K倱蝵愨.E�>x�7�<顾�袱鉈�R��#:締痏孹w� ��炏F魁了qIJ王x龅睜Q滖駆鵤"梏 7礌撁臶窽t�m/揿枃酮�>�-帆m5豁粲煺鑭鎥;窋鞋f齡翎/两W#JDi曾>P率拸oG� 鸻3�齑7��潳�a芆x褞�`F �4噚p}羃8杣8埭Ei�U卿韣*誨W愍淉T撜|y逨a}{穀�0恆,g晾*,覣m'�1R*呕覨翯�镖Y�?1Zs"筪言�-擆R僎M�0騢Е� +� 库J$羍胉>踸�7钪;? �Tk�;嬰y鱶窐o诠Y於誾{hf&�+)妕剬&欱v憽J錗灃烟h$�,閠笳纵姜n衡�2縚�Rq浇n抗;懚��F"s�:挗�闯r6璒W政皑�)3摀9� ��"毘> 懗嗘l捬�0^泹=摞f��(AA氟恬姲x虈纍砻]�骨�,悜[� 轴d+� ウ濎嬳篫�7�cK冣侶�S�RSla���)N蠛)鰕Y�>R史�0蕷 +燨焑嬊��6K造笈迮,p�耬Y"�(�:爸D�*騤〔o瘿C粦/%�.2n嬄Xk莞YLM5D氱┅廚�肢瞡I楪5?*,H� +戠>�R X%地眺��n楉EW0雸:H�鉌D樟$粤罰uH2�岬晷闩铡O灐�佪Nf/邼?;毫)碅B皌  +!璝}匚oW熺酮}�*�5湜虦粜壜q癱bN櫄x晒�*b�-蚀菨脤n舠活�謴[炠Gs┠N捄荐H3亿g紊辘C玗N??qqy撼�2=x B垏盯��#5E�;n 氰VO/v準zl�#v�4e` [閯乪A骖巪t�+睾 蹱鹙警r 港%m镒恕澾画詀�8JB笩r��Q@���<�螑�Xc靈ˊ� +侌Z夎疋�'� 膷纍'鐥gb﹩愧0胬Z�/啓鍶f忀釷唙銄�)46�叡諴祼%�7�-N﹨叆誦e��必妙歱Z蔐�=糸朰�蹷薅澤笸n聍攣�髐u鎲 絍T&|@B& 晧$鉗&^+=^\&2伕仨d恺攓:yv1族焘u笆罗廟j伊p(膵衂L2x菁譀咸88<炅衝せ扨]2d�叡謏謃葆绮��$刱 嫟,驤蠫'$牧lN!�l\況l��l>w]Cw,[�珃�U�1赙�\B2I乵 痺蟕蛹}迣z飸缭{趰纍P镲_^�>隢kj:厁Z嬜�!�$Al}洷J讋沍搾#�(�3�6d憙�Z缣"餍�"钒�"竃蹏潖.r╜^樚�*>鷗恍啦�疱z祇廡7k�楫雈陣,醭拾嘸�m束�Hh妰抎于a縕誮髆]臙∥i�$U)=9;t\荡蹡G空砧妬�0笼^G譯H�⑧�>渹�]泅b祬啩矅#�{c/^�=t稔缨\<遢 l0,轁鮊9劵{u&|禹藈麞鄯镒15缀鍱�?�)pendstream +endobj +1167 0 obj << +/Type /Page +/Contents 1168 0 R +/Resources 1166 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1063 0 R +/Annots [ 1174 0 R 1176 0 R 1178 0 R 1179 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R ] +>> endobj +1174 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 661.3282 194.7663 670.1749] +/Subtype /Link +/A << /S /GoTo /D (a00155) >> +>> endobj +1176 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 576.9176 148.2809 586.6957] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1178 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 520.3286 184.2462 531.2325] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge6bae7dc0225468c8a5ac269df549892) >> +>> endobj +1179 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [185.5712 520.3286 195.3146 531.2325] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1181 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 437.9752 204.7293 448.8791] +/Subtype /Link +/A << /S /GoTo /D (a00142_g3d4c8bd4aada659eb34f5d2ffd3e7901) >> +>> endobj +1182 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 399.3979 194.7667 410.3018] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1183 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [196.0917 399.3979 205.835 410.3018] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1184 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 360.8206 184.8042 371.7245] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b04a0035bef29d905496c23bae066d2) >> +>> endobj +1185 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.1292 360.8206 195.8725 371.7245] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1187 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 278.4673 223.997 289.3712] +/Subtype /Link +/A << /S /GoTo /D (a00142_g99e43010ec61327164466aa2d902de45) >> +>> endobj +1188 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.322 278.4673 235.0654 289.3712] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1189 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 239.89 226.2087 250.7939] +/Subtype /Link +/A << /S /GoTo /D (a00142_gad14bbbf092b90aa0a5a4f9169504a8d) >> +>> endobj +1190 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.5337 239.89 237.2771 250.7939] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1192 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 157.5366 234.5175 168.4405] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) >> +>> endobj +1193 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [235.8425 157.5366 245.5859 168.4405] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1194 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 118.9593 197.387 129.8632] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) >> +>> endobj +1195 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.712 118.9593 208.4553 129.8632] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1169 0 obj << +/D [1167 0 R /XYZ 90 757.9346 null] +>> endobj +1173 0 obj << +/D [1167 0 R /XYZ 90 678.0824 null] +>> endobj +1175 0 obj << +/D [1167 0 R /XYZ 90 595.729 null] +>> endobj +1177 0 obj << +/D [1167 0 R /XYZ 90 539.14 null] +>> endobj +1180 0 obj << +/D [1167 0 R /XYZ 90 456.7866 null] +>> endobj +1186 0 obj << +/D [1167 0 R /XYZ 90 297.2787 null] +>> endobj +1191 0 obj << +/D [1167 0 R /XYZ 90 174.0645 null] +>> endobj +1166 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1200 0 obj << +/Length 2058 +/Filter /FlateDecode +>> +stream +x诃Zk6_a`控罋朔葇Ks劫6q�m(�肭]?汈遷(�4%J@�\�:�3冕)�)�d�覍碎�0劣橡跛 狈p綴MoiI錿酴� 斝閖笥L"2_P乬o蟬щ楹猺s��瞶5鍎!� + �F谭撳食Z�撃p�蛴/x�鏭M0bZ夐鴢褮NN欫盁紵踚n�襞&���.: +�Mp睡浑铠� �舵拭V�SM�澬妵薤鏒潭真动簱r碽勦�F�狖#圔\B譶<帮扑鍿脽�)唾爤B@BD�Q採.� �Q�7/�6�e軋靂竱�/4 罭Mf喞軕盗VK叵狁�;|謨仦�=UXс雳 kl-防r�7邈��%谩=贾�)囄偦緷洸q件駔楼BL +蚍t�蔒,繾J裪^恮劉[鋍漹#�*woV彲yM� +�&拢2闹骱� �4;燇 �;爇梏�$稢eY恢 �?瓃N荕R怵0l朑J�NI堍芀糋淹嵺窈鄯g项�;洀�5攪9脸藀 �iA�"#C 旋-�Ii銂�*霍tL聙▉c�)� 読^熽恮D猍鋍R漹#��,{篈�/Z�1p� 9�w凭飔焣�l羔瞌RlQ� '鑲'I}~�� 櫱d7镃转隧泧驹�3 E伊;P�&��灏EL +%煓�>権愂瑑錝沚 r涙跎 yGd稥>&絠7"籥�ж紤鄽锳皎 �)裐蔽�3C赸�刋,T$翠钔*�0�奸-N脎ve輓8媤n��#iO`j;�-bm闉嗘昝7藯弌z決豽p&贁耝呅"裴��+呜頏3J)Jx赐5�昪崿厸蘊鯼清瓪憚絠覶骞�4壛藫缨蝸M�:qw检6葭_�魐\啕禽醝_�$�#)鮒朕忆v姃騠猬痘 �术鵧.商}u籘涙陑j⺪|PkH郲�t谡沑脯Cdi飫�,娉G 糽O方妃h�?硭点/-甅汆掄�渽謎偟#�!满/瀩兕舟娅鎞軲�9邘袠镁佄烇� 鐴s 芨�#i�.?炋筷n�3Yɡ\壮[撿瓮��q夗�*鎒鄯塨澳0舎菦巘<*�� 咮倍0�冒@蟵鷂y厦棟袕v�*3t_腭[弋U}h 炷Z爹l猆U稚3髛w▎g綰膳Jp�锲�-J L`�%�Q紈 h⑩倨 l眰倨遧蚴syó争�,^Z)*%��,�{�=\� T鹄�^�伕�,綠跄遉Q)F� 賔}nscJDu�;�2坼膣磜魘[_o鏹8}P哢1皤歿�T"}L"Eua_σ�棤咶G笏汱蒜艺�!隡珒7埘��#�2IH;葛�ud蚉7胨�;兴*Ex�測攙茱\{30欸躘槯+冖緹�Dx�弶�/龓﹏�<媩8S$�S頶J� 樗闤澦keМ 鱗w袷敹淉@嫙Q鰧怄臱趀~N澎dur{|k讶?z集縸畮葆1?碴熯螻Oendstream +endobj +1199 0 obj << +/Type /Page +/Contents 1200 0 R +/Resources 1198 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1208 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1216 0 R 1218 0 R 1220 0 R 1222 0 R 1225 0 R 1226 0 R 1230 0 R ] +>> endobj +1203 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 703.2457 207.0905 714.1497] +/Subtype /Link +/A << /S /GoTo /D (a00142_gcd3ac045f0a4ae63412e3b3d8780e8ab) >> +>> endobj +1204 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.4154 703.2457 218.1588 714.1497] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1205 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 663.1387 187.0159 674.0427] +/Subtype /Link +/A << /S /GoTo /D (a00142_g905451249dca72ce0385bf2a9ff178ee) >> +>> endobj +1206 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.3408 663.1387 198.0842 674.0427] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1208 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 577.8136 216.3557 588.3439] +/Subtype /Link +/A << /S /GoTo /D (a00142_gfa82b860a64b67d25ab3abc21811896f) >> +>> endobj +1210 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 491.7412 194.2089 502.6451] +/Subtype /Link +/A << /S /GoTo /D (a00142_g155cba6121323726d02c00284428fed6) >> +>> endobj +1211 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.5338 491.7412 205.2772 502.6451] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1212 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 451.6342 229.068 462.5382] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge3c821e3a388615528efda9d23c7d115) >> +>> endobj +1213 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.393 451.6342 240.1363 462.5382] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1216 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 366.9117 206.8414 376.8394] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b5319b5b65761a845fcd1500fde4cdc) >> +>> endobj +1218 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 353.3339 200.296 363.2616] +/Subtype /Link +/A << /S /GoTo /D (a00142_gcfae9053e5c107a1aed6b228c917d2ea) >> +>> endobj +1220 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 339.7562 198.0843 349.6838] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9ff1e8936a8a26bff54c05f8a989b93b) >> +>> endobj +1222 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 326.1784 207.489 336.1061] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge469332907e0617d72d5e2dd4297119d) >> +>> endobj +1225 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.44 265.1092 223.2892 275.9883] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1226 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [344.7086 210.7642 400.3795 221.6682] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1230 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 121.7215 139.4144 144.6902] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1201 0 obj << +/D [1199 0 R /XYZ 90 757.9346 null] +>> endobj +1202 0 obj << +/D [1199 0 R /XYZ 90 720.5385 null] +>> endobj +1207 0 obj << +/D [1199 0 R /XYZ 90 594.7328 null] +>> endobj +1209 0 obj << +/D [1199 0 R /XYZ 90 509.034 null] +>> endobj +1214 0 obj << +/D [1199 0 R /XYZ 90 385.5117 null] +>> endobj +1215 0 obj << +/D [1199 0 R /XYZ 90 385.5117 null] +>> endobj +1217 0 obj << +/D [1199 0 R /XYZ 90 370.8968 null] +>> endobj +1219 0 obj << +/D [1199 0 R /XYZ 90 357.319 null] +>> endobj +1221 0 obj << +/D [1199 0 R /XYZ 90 343.7412 null] +>> endobj +1223 0 obj << +/D [1199 0 R /XYZ 90 311.1951 null] +>> endobj +1144 0 obj << +/D [1199 0 R /XYZ 90 285.6088 null] +>> endobj +1224 0 obj << +/D [1199 0 R /XYZ 90 285.6088 null] +>> endobj +1146 0 obj << +/D [1199 0 R /XYZ 221.1768 96.348 null] +>> endobj +1198 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1240 0 obj << +/Length 1617 +/Filter /FlateDecode +>> +stream +x诮Ymo�6_!`_l`怿獥~k懍p�Yb`冖Pd&6&K濴#M龓"镱Z "�<�摄筌赡灭G�{�Q蘹啷��←韨豠苶W嗤f褊�4鯾4�6晢� A �6蹚KFW>峱垪珲 4^凪銄�=g掖瘖魘惞J跃萕�7�讻飘uK皜h��,>~妻躿防埮戰炧#窃;,8e鮇陡[�1談≌ �.Y呑鞋.@�朒0扑_厄�4稫嘿|哈p� 躚�1慒W鍗)W#�;騷遺Z祰G�3NGm銤環刦Lvui摪b�,sd}Bk潝#AhTI_�4KJ籩jg2邭F馺瀴y薆jW蔰嫶 鹬'! +(g暥蚽蓘/IZ�)杣座$乏鮌攆h[Y哏彟_�eZ�w鞕~p靹V>l苟驣�$[紎��抔k鬪秿嫢*%,�4齇{祂�<$*輎忷� 娐8湁}K]Qsn�茘��6�7護�t爸晴�&湣 孹莾N�4R3� 噞膍B]脩@楧��虇Q�騗﹡癋1聵�.�� 繘臧输 �,O痾 �;2J鑟@-蓣DPwp圔履嬛岖J園<�袨\~#5剥侄S�8A坳k{眾}樤装鑌泅5�幋萓Yd驽なs�=>�侽煘#4qx�81� 襖M荓N蹌a庘坧hN_︽�#�踋zLQ隗鰺揾�;�毐壅ロh魕瓉聐3�,轛弹x諤�2蟣_3}鯏毄� +韾舧鲃t儯ぁC峫��Zo喒Q� 倕XY勩Yn粹�#?膷璫�棠u芨苳躧協LvuMscpch銂ob�笴�L垰u3M�}lw 蘧诱垥�+"朻h.燽箏槢h详?=�)梫酤�<摷0_緽OD*貂z鄪 a�� r5侭OB薪L媰茛s~�檫�)i�:滺擖丽鵜��<纾苼礑抜sテQ寢Rd{#/!&(ㄧ�05b34裹 +戬悅ZV:Y;� }�? (舡?孉E1懬 �8ヤ偤爳鬏 脜A[飜e員t��曉溦灦光纇up�+肾咪匲風;嵪�\籉2y +浵W╞炢"o_t"簸扲� +麻5 ��婶 �� 蕚 :�4筊鉿胉wp屌w嵬�x芋do�紮\� 摁�?�7-��K蔏�LN�+5~|4孭蘭 +q'胨悵婑記��荸o咄淋��5遢�*Π�1^�9^[\C绱蔷迊楢毲繴8SR#娿筣�蔖]XJ窲|C{oh-vI51鍫SN虡頸/(�� H蝶-鏥>HH:売墹~顢:n�$莄歞YU硬ュ垭粛兆�+帡� MG#�<"4癭6切导颪嗍炥唂��v蘷 � +唾礻殼gnu红|++铥o +!M匓ㄍ鋟莴�*k讅U齜鶯}惇�腙辷IJ�-ku鏭滾o洔浙夑�8fIj黻拳�2�=C悈�#G坅6�9窇鬏 刈ka辗�7z渹i�;瀻�嘵 3憿栺_剢�5�0� +i愈>ⅰo鱻硘�1�$�~璩~趿3�)劦維潉,肄2�h銑v鳝蘣櫒^j魖_7揲9珲'�({E-濹宮桂皞R筃 �?u载uU|}~斀8�/霍/^拮vendstream +endobj +1239 0 obj << +/Type /Page +/Contents 1240 0 R +/Resources 1238 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1243 0 R 1244 0 R 1245 0 R 1247 0 R 1249 0 R 1250 0 R 1251 0 R 1253 0 R 1254 0 R 1255 0 R ] +>> endobj +1243 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.3618 726.9533 212.211 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1244 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 673.1002 144.6746 683.6305] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1245 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 596.8009 139.4144 619.7697] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1247 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.6892 535.7904 215.5384 546.6695] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1249 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.9195 382.4035 212.7687 393.2826] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1250 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 264.2062 165.0084 286.8014] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) >> +>> endobj +1251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 226.0566 139.4144 249.0253] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.089 147.4217 236.9382 158.3008] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1254 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [492.0786 105.1501 513.9963 116.0541] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 93.5686 128.067 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +1241 0 obj << +/D [1239 0 R /XYZ 90 757.9346 null] +>> endobj +1242 0 obj << +/D [1239 0 R /XYZ 90 739.9346 null] +>> endobj +1233 0 obj << +/D [1239 0 R /XYZ 221.1768 571.8217 null] +>> endobj +1246 0 obj << +/D [1239 0 R /XYZ 90 554.2766 null] +>> endobj +1143 0 obj << +/D [1239 0 R /XYZ 221.1768 418.4348 null] +>> endobj +1248 0 obj << +/D [1239 0 R /XYZ 90 400.8896 null] +>> endobj +1232 0 obj << +/D [1239 0 R /XYZ 213.6651 183.453 null] +>> endobj +1252 0 obj << +/D [1239 0 R /XYZ 90 165.9078 null] +>> endobj +1238 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1258 0 obj << +/Length 1484 +/Filter /FlateDecode +>> +stream +x诘XY徾6~鳢袊蔃舔筼垤6i�勰E� Pd�lyk�9;IY分m�V49汏驵7I�釓憟恌\蒩唭 L繕芳�鮁]嗲屐嚐�4覓蔪�.5H�%4X�戼� +>滄D吳釾l薗瀚��0�8X0/0ffg魉湿%�$奇_撤飍�p痜1璂�~`D处羇�)�?龀7尺+=v∠7N�/EX癭)瘮A(A���垇s妤ks偯��"=�7m? �(b�u�@H%軪� �#&.Z 斍��%g街/V絋��琻昩墓怣�徎 "`G鬈鮠� +腘$乾8黯G^溛Iq>エ韤蠈T`Z01灳涸pc�7栾磕嚽}:�82j殯�2E^畽櫽�-絥ふカ!隟k%f 蒫倰@�'j啖挌2菅fL楖�]鋟0�$嘊1kw�;宨�+v翘�1.靤克\�)誺p\郄ye飇垡@+O杠瑧聭'!9�(b~凡f潕囧�7蟔捱她;,��5UR仺�鷽d洰�G�)Q�6糄�0鍁�/坊|�� 诅,盺3吂斟謆;貾�Z秒:闄會4�"岟g穌� /[�$Ck? +砪而;=蒽谖簵ds瘷昡^鵆�倲䴗蝁端6.?n鉠礷碵Om醡溮A:'"+艺帼Ih阚�&4納請C7簜|I燍!�%]毳 巙梮 �?2攴楅貥DBx`猲o閾捘�>窂K 昚5dwH尝庶p~狡廚 w籪eI�:\�I!"邎Rx楪Za87C � QbAGa-�嘩驄� �:黻韔蛿rDㄤ-─Μv�\憀w3焠P燡�辒�2c乘?g �,5擮湽羚r擃\湣鯸生)��颋:<腎Iz0�=穌hWUx蘈�岺�弡�2C�頳�#≡难�.5虨LJ$8揥眊� 殓螶l忤:掰彖邗亏柃苞�]/�鈷-�碕h,dV菮OL钍jo洢 +@F絃踠際h>sT蓐�諳 +呦��AdDL虐&6E/fx燱澱崵c觳莞)K硝襗曟F> �8减G挿r螊鎍嫂欷県"$}"��'N蘵゛�'慒kv轺賩$齵�3P\al��╒鉗àz滦貇豊q�4^m?儮ubi畹F~嬨鮬裔L�5濊魎⿷っ絾�'農寵菌枺嫲鳀�{�-莌l.��;趈莇據秛�5汳朊!痱S8:z 廃P<鯠@翍MFS餜S�;趈�<陔付xBCi��DL侖竷1態騜[�+�5.t溜�)@O_ +M菗秝鱓?xe> 晤∞�蕁(鰸辗值冠褡*鐭�4r�口巛袼譓毜�#雼�?鷦韊ndstream +endobj +1257 0 obj << +/Type /Page +/Contents 1258 0 R +/Resources 1256 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1260 0 R 1263 0 R 1265 0 R 1266 0 R ] +>> endobj +1260 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 677.3005 139.4144 700.2692] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1263 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.2734 447.0773 225.1226 457.9564] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1265 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 123.8393 139.4144 146.8081] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1266 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2799 123.8393 187.5634 146.8081] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1259 0 obj << +/D [1257 0 R /XYZ 90 757.9346 null] +>> endobj +1234 0 obj << +/D [1257 0 R /XYZ 221.1768 649.8092 null] +>> endobj +1261 0 obj << +/D [1257 0 R /XYZ 90 628.496 null] +>> endobj +1197 0 obj << +/D [1257 0 R /XYZ 221.1768 486.8766 null] +>> endobj +1262 0 obj << +/D [1257 0 R /XYZ 90 465.5635 null] +>> endobj +1196 0 obj << +/D [1257 0 R /XYZ 221.1768 287.9871 null] +>> endobj +1264 0 obj << +/D [1257 0 R /XYZ 90 266.674 null] +>> endobj +1148 0 obj << +/D [1257 0 R /XYZ 221.1768 96.348 null] +>> endobj +1256 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1270 0 obj << +/Length 1720 +/Filter /FlateDecode +>> +stream +x诮Y[o�6~鳢0��8^%猳-挼)籂k=E[幁腂e+揹べ�.�憞幸求�)2丘G�1濭"B1汜|碂狴<~9#鎢飪&嗯j銮�4炃(i8_葜B�%t沮~Z0� ^翽�AX非,雁媩s�'噅]a鵨鮶v箁糉-罛�潁鷤鏪P秕 #K1��8龑Sfd橱晨�炧[� �)耍�3耀 A_c鉴m泑茦虙蕻緙X�席V_W]>盔��.� +�8枒\�w虍·� |_褳Tヮ}�#9ⅰ鄊驇]h偛+KQmQ韸%憢d��Lf嵣�, 鍒馲O戝沷Z您罢儑%乢i�U�匎焚佫y�7饸w>KDJX稷恟V抄vi� 齴S鋤Xnv夠愈 Q$戛!Q� Z< '1╟Q�S鱬C歟zt╀涻ě��%s+ (B郢骄鍺K�0Y�0眞�-(hⅩ;-�%f K@,cBj觌糐瀠Y �(b攲�:攪烽$G("L湦閉S抢LK藏A,.R�.�:V,銮惨痭骴}8霶?Mi暜臭磕LxH珴~�6こ@�!�棟啹肙,�/W-R收跽J�G-e"�涭PS*��(&mn弴M潱k圮$穣慩毹鑁O�0hY{*�咹(B氡趍巈�tVSD幤澋�qV�林恥)謠垥�v[�#钲�乱憔鍻蕜擂噽揊楋P烏穫哹�9樈批�$�<=�L捨m睳隅�*r搉霜8n猚憼a驟!鈧眽╫缕蘤aj�豣fPEd雃定>s踭帏P誨泍e�3VhL襊U┊|wuwS::0q1晻洦aG嚾傇a豺(晃蕓南G�9�%�0蟣n��8Z|袦鄆銁rZG!�$腽w{G嫐b鞩kt彁v鄂� 6彙e淹#9縴t鷊]蔜.,嶪鋶^QAL唘WNe��曶�&UN恖煢�/媝�"?浅H5淓8a圗\濽.} +屼秊&颼錼tr賍糠\禭M筪癎6a#fs0}0邦�%鏟诼(� 法>y踷p飞O觠1杪L`駚儴s�&j貐Y肨W硭飇u4q�1瓿k`_Co t0モv饭郀M咖戉坮\晾ˇ▄�礜q悾� 聜1yzQ潋gE騽Ⅷ嵴諞K�e +E∈�4&(�$毤M1鵂9罻灪r囶S簤6顱艩{�:Eq�2�淯牐M~�6N潚豤-希 LSm鬈 �*8� 獁壈満Cs鵂9羢钌5�=�5�C骙{MK瘞78詣6}i.r}檾B菕篑L贒 gRJ螸-|j3郤`お�4馱5沨F�j�6-謃� �8BLF紷5b4嫴滰彅B$3帗ZP彺S` U�8n�t帱|~� Uq鑐霹xui㎡奨皱6BL���<�'w犖��"8鍁u脾{�隸qaVj掣|\ +盚{!r[潲ND杆餘x淯N魸�=炄|A�><$Er骽顯瞸I9�鏠镙躆R栴晪桴7曫,C掇榓z铻��*�#咦+�徏 ΝoE涿V齛N�!鴼[ 11㎏L�!u�(#縇I碑鞈于�/;x�$N�&嗵�料({F�7<妐h鯥Y67旗斐{p�糑z�蹴蚦���剉endstream +endobj +1269 0 obj << +/Type /Page +/Contents 1270 0 R +/Resources 1268 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1273 0 R 1274 0 R 1275 0 R 1277 0 R 1278 0 R 1280 0 R 1281 0 R 1283 0 R ] +>> endobj +1273 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [254.4125 726.9533 265.2617 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1274 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [344.4185 635.8929 389.5689 658.8616] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge6bae7dc0225468c8a5ac269df549892) >> +>> endobj +1275 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 536.6764 165.0084 559.2716] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) >> +>> endobj +1277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [248.3253 477.3718 259.1745 488.2509] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1278 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 347.5941 139.4144 370.5628] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1280 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [251.6528 288.663 262.502 299.5422] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1281 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.5441 246.9287 410.4453 257.459] +/Subtype /Link +/A << /S /GoTo /D (a00142_g99e43010ec61327164466aa2d902de45) >> +>> endobj +1283 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [216.8635 135.3029 227.7127 146.182] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1271 0 obj << +/D [1269 0 R /XYZ 90 757.9346 null] +>> endobj +1272 0 obj << +/D [1269 0 R /XYZ 90 739.9346 null] +>> endobj +1145 0 obj << +/D [1269 0 R /XYZ 221.1768 512.4758 null] +>> endobj +1276 0 obj << +/D [1269 0 R /XYZ 90 495.858 null] +>> endobj +1147 0 obj << +/D [1269 0 R /XYZ 221.1768 323.7671 null] +>> endobj +1279 0 obj << +/D [1269 0 R /XYZ 90 307.1492 null] +>> endobj +1235 0 obj << +/D [1269 0 R /XYZ 221.1768 170.4069 null] +>> endobj +1282 0 obj << +/D [1269 0 R /XYZ 90 153.7891 null] +>> endobj +1268 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1286 0 obj << +/Length 879 +/Filter /FlateDecode +>> +stream +x诘V逴�0~蟔i/璂=�&糾�!浐-{@�P�㎝�4疬镘8i毟-�4!a;>猾璃�~H}-5 筆~拣��劅/<佰#�� >F摞O,鬋*鑡s�"0?氜佱圛:Cy櫁惩,橪W名枋� 錤 �9昆滸 猽Jr髼w{O�):w錛旅@笭聬� O0^/孓w飇sO当9鄪M0�+顝�"劼iHB!蠬 櫅� $凃5青4浶艭爟I1Y$eR琋籷eDs泣稣�=G刖'8輟T \no5�,�:H"斷N�-jm鍒煼Q%BH祴J卐瀎菮�(s;�籟TI� R}報�,騳礨暸:.譋B�允█ 4<,_踛縷*4醔�锵_&嬪<�+�&筁抩鎏椻蒼}蹜帐屦惢dm虒嬘Y紝I躶�D@p亓Qcu 簑泚掼乁T邅�$慼硊栜Q什碙蟋RqRV�<同�,ふ$現sd^If淃;2a7� K]韬�M�慐J铴d=躙瀇�=]^逹I�41)�=0�+茐f!;c?j鑗S�^w 2� !t�;25V荘{�該ΖXR垓嶡� �6s餱(� M娑(媩q琾譟欄矟la[i惽窈X憝d�?$Z肃p%翻鯳材�4嚳杳嗄咦嚵釄�7fG凌穧�境餇>讥OHp閪I磆k�63�<赆b荙n1眿珍4塡�=k輓{�,]賐Yg�6霟庸%駏[O.贠ze訶瓥I湚顤L潟� ��6�&篚V憢u%渋�0!捃�9讥Uw_p� 讴 E贏UB鉵�4 � +最妱�跛�:a"紿菠@f,u笩肷�$R_-�賾�2~蔿鼘Re6L缍捴梒kM献j<薩^煉琄從G�?q寶jendstream +endobj +1285 0 obj << +/Type /Page +/Contents 1286 0 R +/Resources 1284 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1288 0 R 1290 0 R ] +>> endobj +1288 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 680.3578 139.4144 703.3265] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1290 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [253.3962 620.7106 264.2454 631.5897] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +1287 0 obj << +/D [1285 0 R /XYZ 90 757.9346 null] +>> endobj +1236 0 obj << +/D [1285 0 R /XYZ 221.1768 655.9239 null] +>> endobj +1289 0 obj << +/D [1285 0 R /XYZ 90 639.1968 null] +>> endobj +1284 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1293 0 obj << +/Length 1738 +/Filter /FlateDecode +>> +stream +x诃YKs�6倦W�(蚑(鷸莆k7�5�!蓌h懖9棨遷A�鈶G掄b耥罘媴H�~d溹q蘡敯H��呙疔1痝饉� +�1�&�%倞駖賙qJ鑨瀩�01漄塩鶛�K�8u黻G簢�3ZS ̄�鏓鱜5�"X'+殀颜蛽Y�摧:+@孴fi_戅C^io攜赥Eu療篫_砛y�?�5/隚=竾F桚R\髲2A'"�"D� 玣f{剣 $e蘊+狔銌幚蹐蒱獹-鲘R究翃)測W孭"伌X縎#徒y跖罞�� "埼薯牷季�l蚨.得��"ATP?軝耤 Y��"W鍬栢H�O N踒鎥,硤z虗Q8N鋢坻w謯)斜�$7蘕吤楾K橓I嘶伯�-蒴濉n�*]�)ief琑#Vt�*�4冉�稏"M程`l�!+碨改鷲� 灀�$e箰�c璗惏幒躇陣f臷h7熸茝W�擳}哝Uv劥 p嘺陜<ZI!�39��2 Q諬 宔2炣吼O�阯>�� 箺V鞷1W崀n�熢]建嵻7瘫r\�I[}万o覬裏=�=殡�7�%5�4 鍄J焨Jdzp摎﹋縋W遘�<魉U踛迤嘉�>旘軌Pm妢g3鱹斟M晈�Db�3^$圖擛LI`怕Y�(彾L +M\║膸w麥�%ぞ励�R-v裿怕*趏�}引枰2r燒恳伆槪��� 堵�?N劭&�x,"惓B稧O +g訠ベ�(4q &蒊�bA{W隯~瞵粁H扇"āT瞽{:C瑋羴撖嘁鳛賛 淙/.魺j藑LXN覃b� + �LX紜潆沲拯蝣鯚護n?究菌xu0鲟觰��1缞�郲補�輥詈~飕�+ �#8衶�忀, +饎DwP#躰(c�$敡V*$G葙{��s…屙a7�(4豐嚒18�,C鞋� m/勒z�i�(�-帣l洗^(\�巄姰 囎Qx~|�昏�鰻{~堼鑶昏鰝躝玿俬L黨罧F +�9旂c2嗬Z滜氮� a郉�7(墮鞆o&DL鄇 }沇y芿��珆�7T嫹6剼+緺靷�sca:o鯈琵偛�镱蓗禁鵷�|稴�,4荎�呹A歟ndstream +endobj +1292 0 obj << +/Type /Page +/Contents 1293 0 R +/Resources 1291 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1231 0 R +/Annots [ 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1306 0 R 1308 0 R 1310 0 R 1311 0 R 1313 0 R 1314 0 R ] +>> endobj +1297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 605.7915 170.2586 614.6381] +/Subtype /Link +/A << /S /GoTo /D (a00160) >> +>> endobj +1298 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 566.9372 200.0265 575.7838] +/Subtype /Link +/A << /S /GoTo /D (a00161) >> +>> endobj +1299 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 517.124 167.3395 525.9706] +/Subtype /Link +/A << /S /GoTo /D (a00162) >> +>> endobj +1300 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 476.9297 166.1639 487.1163] +/Subtype /Link +/A << /S /GoTo /D (a00163) >> +>> endobj +1301 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.9003 461.5917 379.5448 471.4969] +/Subtype /Link +/A << /S /GoTo /D (a00158) >> +>> endobj +1302 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 439.4154 158.5425 448.262] +/Subtype /Link +/A << /S /GoTo /D (a00164) >> +>> endobj +1303 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 400.5611 160.595 409.4077] +/Subtype /Link +/A << /S /GoTo /D (a00165) >> +>> endobj +1306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 316.3067 204.5193 326.6527] +/Subtype /Link +/A << /S /GoTo /D (a00143_g54a466311575a727830a92a6c3621cb2) >> +>> endobj +1308 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 302.7973 215.5877 313.7013] +/Subtype /Link +/A << /S /GoTo /D (a00143_g5eced097547fd3fac4ba2a255493d921) >> +>> endobj +1310 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 290.8222 133.6164 300.7498] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1311 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 290.8222 225.7693 300.7498] +/Subtype /Link +/A << /S /GoTo /D (a00143_gd85fc90c30d1fc37c63c4844be5fe09d) >> +>> endobj +1313 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 277.8707 133.6164 287.7984] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1314 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 277.8707 210.2674 287.7984] +/Subtype /Link +/A << /S /GoTo /D (a00143_g41bf109b6a45328d5744c0a76563fb6c) >> +>> endobj +1294 0 obj << +/D [1292 0 R /XYZ 90 757.9346 null] +>> endobj +649 0 obj << +/D [1292 0 R /XYZ 90 739.9346 null] +>> endobj +86 0 obj << +/D [1292 0 R /XYZ 90 739.9346 null] +>> endobj +1295 0 obj << +/D [1292 0 R /XYZ 90 716.7484 null] +>> endobj +1296 0 obj << +/D [1292 0 R /XYZ 90 622.6841 null] +>> endobj +1304 0 obj << +/D [1292 0 R /XYZ 90 334.6987 null] +>> endobj +1305 0 obj << +/D [1292 0 R /XYZ 90 334.6987 null] +>> endobj +1307 0 obj << +/D [1292 0 R /XYZ 90 320.2917 null] +>> endobj +1309 0 obj << +/D [1292 0 R /XYZ 90 306.7824 null] +>> endobj +1312 0 obj << +/D [1292 0 R /XYZ 90 294.8072 null] +>> endobj +1291 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1324 0 obj << +/Length 1594 +/Filter /FlateDecode +>> +stream +x诘橫徾6嗭�z▆0��"鳀v稟H浗%A牭够B齍Yn��綜憯)K&誦 ,R痜喢�I� 脧d +g/恇谷V�螢狕韺港K缚 ?呦~鷷狶!%ㄈ�[ � N 皖谉�迸抮蝵镬��cM鋭嵎戜j╫$�6A 朴 M�6 R湻6!� �噢貲腨秸MYm糈Z拐荱]Z持 �fh幐�6贷g齩�挪鯫阶莭m/幒i�-鸳莶┒N}(雛�];3疹瞒翊zv溎�)纂Z忷埉鍐#�)ou玀 v�8倛 �摣鴨鄣a�喕L鎔;漆gJ/傖)蔣躢��鲊祂槔y.PA r彳塥煖鎻0 疧�1発�8U嚡许消cc2 +m擠蓌&:U"劇刀0瞧7鼡aO0nh&0FJI��+^嗞6 +�3 Q埣M o\�(继D馫7灼珢�+胬碍�?ze錴L地孤3赔被� 兡舻=膟!/�;Q锍�躋�砝c煨�\佤H?E�&卮L芞遡⑽/-M厵肒擿Iα�#0w2袍�f/瞈炎仚 $ +8{Y枥` 楦�晷�瑊围�c`7槸柞鴏 �3BH<�*佬赿�)A斎墊熍1紳j|猑肭虼q吊"珞� �*?.rX榎�!噥M�"�y疇 �;Y蛐`騽_y蟧蚓� �'�� 唛f[�R.QA槍'%"Z汮y. b碢�0��;�8�.%W赏 佝�:鄏仱R┡F'K�寔髹�鷿n嚣p鉧 �K弅�3E� Bp隩�喼&s�韫b怍猚躾嬴蜚�'�队9 肿��+戔芩覝c溓齰渿~'p辳>咉x�鏦'h吠�&饧i孏0�6t硛蓩b"鑱:簵崈灇�l箶騏萫夆 r;Y捾衊勡刜On蟧氒倔 �&�� ��=煝9bR饃":U"偂5O甆∷`7'`[9 軵A窊祂媰^U^.緝珃缌~�f琉鼦镾3� r鉅 蛰a禊p g劵砓wrJ粨S菗=9莜N[絢枢霻]?;m u嚢g6頇f�繙h疂蓲雘�佋澾~钔蛆|鼱t怹�&�# +)r譳杹hx�/�汤辑%a6�m|䎬鱢乇 �7鈤漻th85f淹;�&幈Iˊ淨m{'6�7!0碂虸祥H=-鎳}祪譀倶7{[Y�?僀u0複ml瓦 �!cU杨戠逸鸙m6鲫凛3hm�?远绛畒禬�繓[h蟝Z赩魜� + 斸�%羌Om;桾耭�`�:(悰蕛O� +怠烥zF鉉�1母; 癈婩嚃?洓:歌凷�)'Z�"糪腕�'玅c赛w哃��>@%L.�[暬Q诳|�8Ce]�/鲵蹋駘L.阠c 鸘}邈�0嗅�30嵹鱩鮏)磚壕L慘傹Bd� > endobj +1328 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 613.307 210.8161 624.211] +/Subtype /Link +/A << /S /GoTo /D (a00144_g12b467f314489259dd718228d0827a51) >> +>> endobj +1329 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 573.4169 211.922 584.3208] +/Subtype /Link +/A << /S /GoTo /D (a00144_g20bc87e5c063c3f4b01547be6e5a0148) >> +>> endobj +1330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 533.5268 202.5074 544.4307] +/Subtype /Link +/A << /S /GoTo /D (a00144_g41d37ea1e3bd24f7b51e9409aceaaa80) >> +>> endobj +1331 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 493.6367 209.7101 504.5406] +/Subtype /Link +/A << /S /GoTo /D (a00144_geb79c914cf137e6d27fd7583e5a66679) >> +>> endobj +1332 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 453.7466 203.6134 464.6505] +/Subtype /Link +/A << /S /GoTo /D (a00144_gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c) >> +>> endobj +1333 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 413.8565 210.8161 424.7604] +/Subtype /Link +/A << /S /GoTo /D (a00144_g5323320b7316647042016f17c4e881be) >> +>> endobj +1334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 373.9664 206.3828 384.8703] +/Subtype /Link +/A << /S /GoTo /D (a00144_g30e827f33eacff55ecb4d8fb5a11d5d1) >> +>> endobj +1325 0 obj << +/D [1323 0 R /XYZ 90 757.9346 null] +>> endobj +651 0 obj << +/D [1323 0 R /XYZ 90 739.9346 null] +>> endobj +90 0 obj << +/D [1323 0 R /XYZ 90 739.9346 null] +>> endobj +1326 0 obj << +/D [1323 0 R /XYZ 90 716.5154 null] +>> endobj +1327 0 obj << +/D [1323 0 R /XYZ 90 632.7749 null] +>> endobj +1335 0 obj << +/D [1323 0 R /XYZ 90 334.9631 null] +>> endobj +1336 0 obj << +/D [1323 0 R /XYZ 90 308.245 null] +>> endobj +1337 0 obj << +/D [1323 0 R /XYZ 90 308.245 null] +>> endobj +1338 0 obj << +/D [1323 0 R /XYZ 226.1581 201.4941 null] +>> endobj +1339 0 obj << +/D [1323 0 R /XYZ 90 183.6017 null] +>> endobj +1322 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1348 0 obj << +/Length 1499 +/Filter /FlateDecode +>> +stream +x诃X[o�6~鳢0`�恬.﹠手甴�]浄�d媞勞�+KK箫wx揺轀,E垟�9}<4I�釓 "ql� l狨�q焀饈�5z覃_4 擧*冸[鉇$(×u�9d駌Ec岚y���a踴_f蚇裒玶屿UQ^睡罪鄹.-�$裃�/>臕榻[`膾X餍翀$ � N欙���磣�3`lv溌蘠聜昻� u�直@樐Ba�=�!ab疣(�) 紤皮�7�!筒軎^�$漆]y瑄�9竉�%�蕺跊|��陂悧}磡b2�嶪2:�6誴9�a汤梟皥槍>, �*莴ZU�S1JG$襔3磽 ��'�: � >旲�衂� 篮q皺pr� +X嫇餚�`@�.硭�>蜽Y�p擞% 姿 w蠵n餧Z踧鼯ng[k黜 苩稴檥�蕻倔c晑礽� +4磠p莶蠧稭e苽燦睷�#2t[q7��(喌03|ヴ�"7z45 聅�N磤敺鰅2ua蜠鑡 +� 楩X2H"�(b�%鼟俑''汓叒鏖駴婢Ыs涛� O,M�(棸�� 歊寪 1:瘲撏碯D$�}抁喠g匆薭\)舞fRI蓿镈疾悷"淏4揘嬠Q堣(d鞾鋞-� h璘噈V兴 ogt裖w雟专s稁蜮9r埲s銨;r嘤r8�:珅%x�O5d曛P迟�/U倮R"<�7綿w鲖1醦� !� 议ZM媷脬a麵�K`F>僉�詺]斝,' 曆Y軣$$(u�y表褷菲� 嬫�4+GRF�+:V3� % -梋V轭X螑b&>�'=l块7罩}鷛FG厬4�(e假鵄Ok针�,W}�%P g眏�.d鏳�E 鐝叽� lZbv觽#珿B=緢:∕=��ZU�7调WK幟?嚮�9LG@傻躐�F謻�䲟V`邐R+榫|,軇p簓抪揤絩UVY_站緐猔i嘋淐Yd珂z&~�%聺;�7昁+�讵BUi睃遦m椪穠w8G� 哆I� 鵁讁莌Z�4&圧n锊V雨� z陂QGU氕,Cr K聖憨J�, s╢qx魟T问�44:楢顳杢(瓴7蠷�%唺h筨X唎潧MZ^�冩h�<趨s倒K嫮:�∶��,6敐^y�*彵赴�珯礸q&�'骅邢d拣穎:5Z�l%橤牭佮简 敯����XW挺�'GI�塝/股*宗_Hs枳W9剀o芵�F2榴> endobj +1352 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 411.5145 158.5126 434.4833] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +1354 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.1221 221.3274 271.6871 244.2962] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +1349 0 obj << +/D [1347 0 R /XYZ 90 757.9346 null] +>> endobj +1344 0 obj << +/D [1347 0 R /XYZ 226.1581 652.2086 null] +>> endobj +1350 0 obj << +/D [1347 0 R /XYZ 90 635.97 null] +>> endobj +1342 0 obj << +/D [1347 0 R /XYZ 226.1581 538.4468 null] +>> endobj +1351 0 obj << +/D [1347 0 R /XYZ 90 522.2081 null] +>> endobj +1345 0 obj << +/D [1347 0 R /XYZ 226.1581 389.7944 null] +>> endobj +1353 0 obj << +/D [1347 0 R /XYZ 90 373.5557 null] +>> endobj +1341 0 obj << +/D [1347 0 R /XYZ 243.8616 199.6073 null] +>> endobj +1355 0 obj << +/D [1347 0 R /XYZ 90 183.3686 null] +>> endobj +1346 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1358 0 obj << +/Length 998 +/Filter /FlateDecode +>> +stream +x讠W[8~鏦DZi駔|媫狦Z┗瀛r *$,劧邕w対��U<`倾檕>吓唸�"C&膒、錸B�5~~;�銁�x禈73�!F1-�蓘E嬚签"|3IЁw镙`Y�(e胗!瞤N乓螏8諏�)7诚孄蓻Ec躢揬�5��溷g�泯�n磳~鄤0咵粔`紴l'&�6z苈y脴媯x蹃酹%5愔扨� 猜悆刔HQnO(淚$� �s树_騷篫綯砐Q:点謐T�&夗J~㱮s� 泝襰�3\俧�!B 賚>f咋x崆}鍿�B紫脴胦渆K*p栜&}d}�<宼{,G�/\穎�謣榭蜛�伾G�嶜V[V@�0W #�$*妝B7暼�2��垝��7?虞~�并ン窓�%矕缠V涘~I�t\:�.n刵仨氩v�媯c�6瞜窈系� 踼v69u�镆钾栧>W�8=靽\0靯F嗔喐h劼x�綨��5'欱駾R� 鶽儰敡j��墕 /峆褸梾D螡/娆V亯,1 碲胩^7婞r貶+骺� _聙猲懙[稐2K6g �4χ"^1DR_uf� � {�+g稶Y礙忂l%癢袒姍 \饡��6^沇C�}慞鸽弱諙篰{i嵯j郼 |�d紒7b7x悁K20诶;v� |貥輻�3&懛<齔G^�+L灱X魑6茳��星p搐 0晘N��v��mV嵷3粇惇F� +|�*坒R?疥H鷶憣^M)%誳綇螐<峓�w*兟*纔� o�"梅\厄蝬��鞫_滭X]q�縞�F�黗�<艮孈监譍��狐螉>=鉰劅_譪N閑ndstream +endobj +1357 0 obj << +/Type /Page +/Contents 1358 0 R +/Resources 1356 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1340 0 R +/Annots [ 1360 0 R 1361 0 R 1362 0 R 1363 0 R 1365 0 R ] +>> endobj +1360 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 624.1462 158.5126 647.1149] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +1361 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 586.5419 139.4144 609.5106] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1362 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 586.5419 262.94 609.5106] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1363 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.8054 586.5419 416.0743 609.5106] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1365 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 429.2598 158.5126 452.2285] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +1359 0 obj << +/D [1357 0 R /XYZ 90 757.9346 null] +>> endobj +1343 0 obj << +/D [1357 0 R /XYZ 226.1581 562.108 null] +>> endobj +1364 0 obj << +/D [1357 0 R /XYZ 90 545.3808 null] +>> endobj +1356 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1370 0 obj << +/Length 1193 +/Filter /FlateDecode +>> +stream +x诘X遱�6 ~鱛鹡b �櫱.i/箄�铹殄[It�-蠔踗鼲墧eQ盾踲yiA��"�%2!� 蜄#洁�G�区礉��M碻騢兜赉h� E地氡揮[@m�%?m睉矉a≧噕縉�<皪�0瞔�>诩8櫥6 +/?�"衚Q祢酰=�厭(-藹荚恗牪c麃J辏�kO!!�叅('篠�=嘠 莔� +墹慒$JTH皒hb鬪i卻矠�' C0�4>PV�8毬2涟i�)軋 [釅半S頯 +�>#�Pz} +o�2_�A90槦啷喬k J藥y浥乚- ����D姓[詂P� 揝橠焩綉0�[ぶ譕棴Dr燘绑识-}��爈� Tc顭嚡%輙鷠靡昤,訔欕司�橾:3Q訖[姎�uu耪}論w但�梏X讎専}L1!芗恛抨蓥地-�'7桃E3敜鍉

�e褌侶芩e0楲緘缱�2濤�-�'"亪嶁Io鎨「-Nㄚ貍C]v�m*锆晶缩"踍劑臜��4�Ρ�!N捞K��>剣-辽5bb69產扑4_-奲怂�8莠�,` �撋@��H�6 �'�珋�i絢齢h�!佫摗)vet8�7�7R˙mU]f銜0I�鮸r�=P蔿e鳥髤慈W瓳Pm�(�=P�?槓)痊窉锊鏻摥f櫕�?畂咕焇齴軩a捷搤栤蘶M誦)v敟|n�*lW蓳硤 FいC硲徾/匁�=�1�曖�!�'芅挟l巷纏=0b齁猀�'鷺;伡另�2�2};わ]H辝咎�篊�欅`脷麾9'舚;'呕�@@$絎#屵0阓�Tc黄W�$÷飤�[� _碬妘鴆妒6i閮虢7枽vn听�宊0w%偵N�鹢镳钿橥�哌^侧颇^e鬌��endstream +endobj +1369 0 obj << +/Type /Page +/Contents 1370 0 R +/Resources 1368 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1340 0 R +/Annots [ 1374 0 R 1375 0 R 1376 0 R 1380 0 R 1381 0 R 1384 0 R ] +>> endobj +1374 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 615.6894 166.9111 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00145_gc48ed5f0d27721ef62a3ed02a5ad8d2e) >> +>> endobj +1375 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 576.8351 180.1912 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00145_g22f140b02c354dfebcc7ad481c3bcd68) >> +>> endobj +1376 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.0068 576.8351 208.6941 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1380 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 414.8106 227.254 437.7793] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1381 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 414.8106 380.3883 437.7793] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1384 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.8969 339.5315 225.6901 350.4107] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1371 0 obj << +/D [1369 0 R /XYZ 90 757.9346 null] +>> endobj +652 0 obj << +/D [1369 0 R /XYZ 90 739.9346 null] +>> endobj +94 0 obj << +/D [1369 0 R /XYZ 90 739.9346 null] +>> endobj +1372 0 obj << +/D [1369 0 R /XYZ 90 719.4886 null] +>> endobj +1373 0 obj << +/D [1369 0 R /XYZ 90 634.6393 null] +>> endobj +1377 0 obj << +/D [1369 0 R /XYZ 90 539.515 null] +>> endobj +1378 0 obj << +/D [1369 0 R /XYZ 90 513.03 null] +>> endobj +1379 0 obj << +/D [1369 0 R /XYZ 90 513.03 null] +>> endobj +1382 0 obj << +/D [1369 0 R /XYZ 224.9827 374.7449 null] +>> endobj +1383 0 obj << +/D [1369 0 R /XYZ 90 358.994 null] +>> endobj +1368 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1388 0 obj << +/Length 1934 +/Filter /FlateDecode +>> +stream +x诮Z[o�6~鳢鸢k8^D�*皸.m慴貌6輤犎J"詵RYj�緾馼阞Q胍mI嚣xx>^L�e寳廝虃p欘xy穇/垀|螼\缷嬇彲h紝Q襭yq踆 鈹绣沛r"�>�瘹硈鮡摥 _}斡L_W鶜嗾g鵢V﹞稭懼yY灬R劕簿簒硏ya筯獪匘2讣滤 P~忱埮�/�#莟筟敊嬳廨鈝kG=h岝�6辝 窩M�)� r篖0>CO� 俠蝃w,9�.袾N�:煞貴Y9亡i�?HC�sF绦Ek璡躦鹟p窵*}抠�7_�#鮍d酰d_Vmi繈騿旄韇┛銭漊 x,钤嵡季?� �G锹"喢疙纈�cZd麘�a�8鈎�5╪�Q繢p�#~爺鱹 �(g�-淑炂8 粇窟铻�!奾Dz五jNc藓4 轌c`W襤驀爰xh� �) =10(燇伒6鰳c�#螟G垁y,PHi浜>q�-帡凙�鋵孞缯:喃2亡F&匢绱苜\~H�5奴彮竗t敮圥21蚖�% 墭瘢商#财虛�鍹f奏D2{鼩d铠�'s座宒鲂�5牲怳y股��8BXD�凃�X3鶞朎1櫽Px�杼渧蠸9m`mN瘏,A* +*}YnS诰铬踎蛭趥�吧�:棧�/yR4��稣>赸�6癁D�!虉稞na~I8�$1碜J迈;C鐂$1Mc`譎B淼,蛧贻's;DL�&#bQ*Cku� $� � �1夋喦鈣�v蒺 �T� �=1(燇�5辄Rz綛u瘬Z� K畲毒鸌}�?;傀鶙咿�<{﹢(8�a���崄鵈3逖痛_+罪 裻溝�4崄輣i觕�擛月`:�!1�6粯`啫\A�+&z獦楽L燴靦-鶈旹7x(叟労ㄋ^召譛撝M礷血]��=AL嵸釉� 挨寎登录2r N热阕权阕/.�2蛐氐2*粉q �怯q�(仭倒�?鈩蚛c歌 Y榙�6k>e鸝}Rw�=╆4屛葅凈浣浭{罪尲�8煋饔4vM�7涖K +鼻剳镻X攪眯陟試�E|f鮬裇﹐`_�yz﨧�$罤愷i�嬪圍陚咵~}X浯>\貏>:~�:煛崄�1}屪噣 聕}2�!2�6W$L槺�3雰嫗墔"y忾�0�&3#銧韱鸻つX粫Ⅵ��X莟昑yr�� f 剤徘鱾]罃. 摊� � 6%鹍cT閏g针瞜孽p棖QRL&貿�8虺c倕棟羥賮╫�&is; r�岓錉Y斚}(gx肩.擾三禀濤躜zu,oaI�g3笾EO(诼�)L飫伂eE年諻波燩唫x&g=�5 +/f.⒇=Q{簸+�:z*觙瘬�9|姀>祐�!帧亘P槂w��豗褯髎6孑Myi +wH傽D�6�4L]&毡濼婾歭鯌沊=辡Y唠禽冒x�0L憝室蘺&赉繷Y涵蔧蠙s囍'宷揜澲γ砣獝[茇�=饬q沮5j}聈48敔l瘹銭夕+v誏_�a櫵^=�B秿瞐踤斥N� B壔�钇&p省禡Rij簷f戝$�6觲?Kv氦宖藷z詨1@:iC`X�0鹓Ti�.拒�塶Q6鮉侉恀飯镮�=锘钆x睾s.K� #陵L7貤蓃圢D;裃wZ槔缇u5W��"|盋 咣阂勱�-xP攠@谉r羸/4�){E/��# cf?勖�7蒝焜K茐濸彭緬l蚬箖搗n� +�?7抄鰁S�鞔躣f蹇-e�揍葘L㖞� D�?窭饐呪逿磗*M`漆�楳G碴莺$d館gEV%稛& 繗/o潲а勱O鼫茬�+妐–)鹡&蓝�挠蝻/w賎)!�1�榵鱊endstream +endobj +1387 0 obj << +/Type /Page +/Contents 1388 0 R +/Resources 1386 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1340 0 R +/Annots [ 1392 0 R 1393 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1402 0 R 1403 0 R ] +>> endobj +1392 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 611.3557 185.9198 622.2597] +/Subtype /Link +/A << /S /GoTo /D (a00146_ga4360412ee9350fba725f98a137169fe) >> +>> endobj +1393 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 570.6172 198.084 581.5212] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1395 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 529.8787 213.1775 540.7826] +/Subtype /Link +/A << /S /GoTo /D (a00146_gfd5ebb56a1bd1da9878aa886a2075e80) >> +>> endobj +1396 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [242.9955 529.8787 285.9441 540.7826] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +1397 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 515.9852 222.4327 526.8891] +/Subtype /Link +/A << /S /GoTo /D (a00146_gbaf0bb2b6a4424b4eb69e45e457c2583) >> +>> endobj +1398 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 475.2467 205.2871 486.1506] +/Subtype /Link +/A << /S /GoTo /D (a00146_gf20aaf4292cb0d2a1b10bc0a568b51fa) >> +>> endobj +1399 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 434.5082 218.0093 445.4121] +/Subtype /Link +/A << /S /GoTo /D (a00146_g2c64c8c36bc84f9336f6a2184ea51883) >> +>> endobj +1400 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 393.7697 242.358 404.6736] +/Subtype /Link +/A << /S /GoTo /D (a00146_gf5c2ad5acf3cc23b8262e9ba6a15136b) >> +>> endobj +1402 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 306.5867 133.6164 317.4907] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1403 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 306.5867 166.9014 317.4907] +/Subtype /Link +/A << /S /GoTo /D (a00146_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1389 0 obj << +/D [1387 0 R /XYZ 90 757.9346 null] +>> endobj +653 0 obj << +/D [1387 0 R /XYZ 90 739.9346 null] +>> endobj +98 0 obj << +/D [1387 0 R /XYZ 90 739.9346 null] +>> endobj +1390 0 obj << +/D [1387 0 R /XYZ 90 719.0647 null] +>> endobj +1391 0 obj << +/D [1387 0 R /XYZ 90 631.2478 null] +>> endobj +1394 0 obj << +/D [1387 0 R /XYZ 90 549.9141 null] +>> endobj +1401 0 obj << +/D [1387 0 R /XYZ 90 326.4788 null] +>> endobj +1404 0 obj << +/D [1387 0 R /XYZ 90 266.2048 null] +>> endobj +677 0 obj << +/D [1387 0 R /XYZ 90 239.2959 null] +>> endobj +1405 0 obj << +/D [1387 0 R /XYZ 90 239.2959 null] +>> endobj +1386 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1414 0 obj << +/Length 1818 +/Filter /FlateDecode +>> +stream +x阱X{�5�?�"J(1~祗J+=鑅�8赥嫡i搖�{籥=膚g沏蒽&沑K)Bg=銠駒<b提O孋>鯹焻蜀扑�懓�餲]伅纾/緯�8d�'今|e4x偣R锐<~5q鋞&铙I}qに'俼"鞠�:誅?蓷鯈为↗騦鷉t>o鞿穃� 代腓�>幜絞#蜹搞[L劇邔弔鬮鬰珖f佬� 3 �蠍� u��梣� 喻�.�嘂\榵勌�1n�0&u步Nu6漼淥Q敕蒖荅騐综髤rw谛鹋 +6�N铗殘ɡ磲撣"⿸lm{ D覞`腎鈔:β濊俤狹T昳桪~踯j厘�*� ]枻夤.蟠6{�\y�/s蘆�9頷o①歒騰-\Qg�&泟`‰R蔳浼�)9悍�z潍�.2]}N� n�4% +}'F 颵犻[轇B飭秐U洡$jUgK滧� 偦鲾嘚&t� �>摼镯碽�>夣*�4m朝_~K勢E棘妟YQnQ]m�7qa/燩<�"&犚9綫鳈a9�$蘡讖所)jX垣W鼚儋f +O27湮A嶝痆诋賣冲?F��!(城蛰制钁蹒辄囁�yqu}>:�� +站ci� +(徾$;5�6��o朶骨∨MK搠�9l诀 :麼G"u鋚r$lg�ON]┿嚀�$劚x㘚t矼uy�>�2�箩拿瀊mY蟵账濷瀋瓨 5Vursv%Y氱圪mRmf捌l癸笖摦O蘘﹞\:詥.�3%殊隢�T�=隚C邮哏莵迵}>鍑P哎8漋��怠W岒[�@�2 夰D挎\f塃艎谠QHA理┚��4�v,�{� �2埙c莄.� � 偯>�袠蓍皋�"摄d夳u檊Ys\鞰戙崩#0we憵m�/浯�>�;�)d橿頵毮p'I袘x,�,Рx!玱�`\譌憦�<樾,�X蠾渒跲绤#篈撷鈳>�;嚣炵 T蓫.JLm箒3T �=37Ns� .b䦛%h禝昰Vn�)!痈忎,繷錔優0&H﨏侍E� +潫妷�;寀#侼�61@ +�電A 掬ⅱ^雲?d滋 萘粀V甝I槢H[槶窞簚� ]ky岎肛!Kj>j餭菊Y?闂i^陎0 ~�I卉J劃|李BWu戓b*錍v懱MtG霱4��4E陦2伮比k\8燧F薩�q}哜Gd/篇�pJ]袝{摓s�& r�.袕殩 鋚(�iB欎;phc�&eN邤硇褳阖�鮁E-R�6�8ギǎ� +"i7� 邆蓺�; +�;V躏喝!疶壙币���19m�!a�5勺�腜 +梁靅Lv�﨟�a4瑥I锒�Z8J蜅� 禳鎳怂桘郃驇俺{�$�濮!9�灷9�6籖茄p +#�-浃佥 � 唋毗o! +d┤� 翞蝃�#韀� +|����V"l�-聂@M貒���"�Ω掲儡V~�0(�菇鈀胃陷=�p瓡合 _盤鳱邖� Qi歑惦@�濎!@炝]偒翱�郎:z�7鴨瘟i峁�=d泧�唸n<卤%U&皸勩芍t�;濋"�(�􅕝淨m?劥-?撽L�7{嚍=D0 |>|躱p驌坏>x襴�:タ澓 endstream +endobj +1413 0 obj << +/Type /Page +/Contents 1414 0 R +/Resources 1412 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1340 0 R +/Annots [ 1416 0 R 1417 0 R 1419 0 R ] +>> endobj +1416 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 418.8948 227.254 441.8636] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1417 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 418.8948 380.3883 441.8636] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1419 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [314.29 105.1501 371.0667 116.0541] +/Subtype /Link +/A << /S /GoTo /D (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) >> +>> endobj +1415 0 obj << +/D [1413 0 R /XYZ 90 757.9346 null] +>> endobj +678 0 obj << +/D [1413 0 R /XYZ 226.1581 392.748 null] +>> endobj +1418 0 obj << +/D [1413 0 R /XYZ 90 373.4515 null] +>> endobj +1412 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1423 0 obj << +/Length 1804 +/Filter /FlateDecode +>> +stream +x谕Ymo�6_!`_ld怿*J�6`[虎謊M-誦a朵Jr觍�逹$e結r趡D/<�=>�=w墖釓x訾�(b<鹬�鰊狨�泵>岥m乢�?麼#/BQ@镪χ$(∞U騰 彬├她� s摠薕閆夔"]键��┞蓟賕�*统CN葤痴棆gW  U皜h$o遚/�/�(�=<`Dz�=l棆�=f牉0鰦9翀2魘*蛷lI � 2J罧|"榱I��%&贗凥DWVJ{�&/轪佊�`键蒤�s祇4�7/.�斋K;zv柭Tb瀭�+唜繣m`燁畐狧�$]讝魷'�4��7zX媜Tf旫l釋殹3q被西昖s虉T懇�:Q: +>┾篢Y覞鍙橒�5B�#�0 �$擽��$悾嬱匋对0睹a藹�(�$�-^韪崑x�*U旂}�6"�(�c馛F�贐B皠Q&Z5攗瀍�4劏拇�岸]�憪 籛w6暢僈狳芢+7ㄑ�:簖]壕3穒iess齚Цh�7��&遧T値��查UnKM�2QD檳玤熴韓�&謜�4GQH8苤c鶰qk嘵wV弋�B6耳峏漃歏 Lз&蟱䙌Z甍悕h�Ni�◥3>k 礽H邲E嫵d`滳�逊~�5嶞巵轎�G峽嚿j绿产嵲 6� +!SI(!踵S�c殽噟�+s荬橫咺7佐攳Fw祲^| CG嚠@#娯 +�X呢=(iJ频N`屯鯦琻终M9 + m 7�稕迢┤转,屿諺騀<�i⒉*肇TbI狻3a棫Y迦�IZYf)玝慨鰠B�A (�5蜬`o惷d桟鍒3z< 憸Kb'锓'�$馌颴峷~� + �4=D}JwRs8Bra菄呎瘜S锖9泳钠狃鲟p-挍1闽趹囗x3H+梃 �:硲燍C轿檆5憅�$碸�lゆls″z禡�_Y�81猻U;(s僓MO菲昘嚑M\琀讣輔!gk�'EB[嘳!u庭8胫諁閽�% +みZ潚jl謺;诞硆軴郏5歴俙借t峮K\0栉 T'6`� 锬辟Nl�嘚l鑱袾琧鳁 .冤賴厛嚑� �8򋂍p絊�=4騦�/Nh�2e!聜僧�&蹍鎕c:鐱M +囟祭瓖�l示薞伶z銰k�>*+�囖曌辅阴~鉔+�$=�汋C�5澚e篗k]宲眇~`�fd 郌�]'锓'実MWo胯6�攢柯0枇陣獡�C�!☆U;`毷�=撲鸿昊,矾vb勯"ャ梁1�*胙k/05[4=飗豍檯�/乙�2媏揲1-D[gL:A癚奔窡o�*>术4v睦蠐\邧:熙4奝 傕Q\?`傠H乒�涘鶬竳鑱Q佚RB:侂g� 魹迈搤i竳趓悯��甮騕q�8熙籣8濐/�{篝獗f飁� + �-秌崲V资褒(o鮮� � �5{ )投 顔�6*`�#咠 $7l勬>08y�=a$�zO荻1 壜儴嚚侩pR38嗂�Fhk鳓姜桼�!�9琣 鍋媝犏\q頢�眜涵躥B喘鷓S搒yw葞�8-q 芷醱H宒8_闈歼�0BK涧��f鉅嚚螿Nj�;觻�.殓� +'� .賒輏 +h[zx�亠鋶��6@靦N页��� 跬N�﨩:E GO梏)�>l"bj鬤  W滳誫k!L!� `Y鑾�, 蚬蔜W巚]醤^曛po礧|N�9沛塨X咀濄◣ 苠臾嘯5鈡�?�+悹"endstream +endobj +1422 0 obj << +/Type /Page +/Contents 1423 0 R +/Resources 1421 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1425 0 R 1426 0 R 1428 0 R 1429 0 R 1430 0 R 1432 0 R 1433 0 R 1435 0 R 1436 0 R ] +>> endobj +1425 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 593.8152 227.254 616.7839] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1426 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 593.8152 380.3883 616.7839] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1428 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.4376 488.8567 182.4258 499.7606] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1429 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [305.6958 488.8567 344.7692 499.7606] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1430 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 438.1531 236.5593 461.1218] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1432 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [132.348 333.1946 215.6849 344.0985] +/Subtype /Link +/A << /S /GoTo /D (a00146_gbaf0bb2b6a4424b4eb69e45e457c2583) >> +>> endobj +1433 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 284.5483 236.5593 307.517] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1435 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [250.4549 179.5898 309.4431 190.4937] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1436 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.1787 167.6346 205.1669 178.5385] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1424 0 obj << +/D [1422 0 R /XYZ 90 757.9346 null] +>> endobj +1407 0 obj << +/D [1422 0 R /XYZ 226.1581 568.2372 null] +>> endobj +1427 0 obj << +/D [1422 0 R /XYZ 90 549.794 null] +>> endobj +1408 0 obj << +/D [1422 0 R /XYZ 226.1581 412.5751 null] +>> endobj +1431 0 obj << +/D [1422 0 R /XYZ 90 394.1319 null] +>> endobj +1409 0 obj << +/D [1422 0 R /XYZ 226.1581 258.9703 null] +>> endobj +1434 0 obj << +/D [1422 0 R /XYZ 90 240.5271 null] +>> endobj +1421 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1440 0 obj << +/Length 2117 +/Filter /FlateDecode +>> +stream +x诃Y{徾6�邿吕塝>DJL�襢�&Hs{玩�40礀�jK�$'�o鴴鯛q6鈉8筱p^ど�?矓x�I婂龈浪A祠孀]俹�_|G錜")╔揄4A.镆鰽4��/o∩q@6�唆|萀鸈�=尝I毤,V頭-n頩�g�(┛.�浪嘟Z`膁虠煚�憭.弸𐴽,�.�1z乷w!厺艅-譒牁刃Ks処�"(A刾闣D,�,ZF�!貇ǖ瘭l瞘幂LQ�(]v幠禩宫#椸E勸 7%鴜 jf2貢昷腁诚F8B��郟S諆⿱妊�!馯埼鵬s湿糒箜蠘c�#CD X壻磃Z�脩DQ郧�;[esOA/! 闟锻搩Q󜾊7}b財f贽N4�/+們�0軴{訆僺�f蠿綬z鶒佲+K�7{觶䲟%H奣锧�6AL劙'B愪雿Z\d�5"K!辆9�)隁)A獽nd剦>8!E饴U+詙瀚道8|饤鎘G�2焪/o7颺躰君麤7o艙'u缈z�q侭蛑:蝘連r殿K�鲌鬂歏KJ麏襁,,�(:昑yn�鷦dV鳑4麡o炒�?f咋螉纯j�馟g唽g�'棰 �姽`�!↘u= 0� ^K糢鏆T�1k勃緉I>�4B&� J-檪�-婹�'4喨-Z*�z��/墷�/鱪o揘q>辦o剉�3咂M傖殕倷�a)J蠼穭И躥u潵桕a +宐1桹篢�揋旁毾蚾神t圈巕Btú]蜋8�蟽袥yZ2�7+�s}L蜮P枾� +}kp:�厊*逖屛Z�Hcn +襍sn6伥笔 C閃U右厢駶T �"縱X$�9謚K5僯蘉&X沿1J!#=�"�cZ�oH�=鋮�本K�%僪嬾Z睦�!�2妏虅$G�X锟顓I/;l攱�0l磕騡}�4D,斈凙淮缏&cC邤Ijw3� O��,礠狩奘S�崑1.r銶muS澐凸蕫�8恟 虸紖 絑3F�>Fq2B楤<9鲪�9'v綦��忴^K渠倣!咰T蚏蚡�P�*婝X頦,�1妐錡Z閖碪�&)蜏靂櫊q啴臫z廣hK?硥1__鷆慇"岠�[�9汆�2$倨鑼.颌n�$5RT干F嚚蠰4�%Hh禠5緯T+�>嘸休>�&镪m隣I袿︾�9抯鹋磽N肼嶕<]�+宪]鱦� Fc>潷籘左tH!Os}V彦0Qt崘鴭畺l惰歍昆�k繹t蹁>焾嚲栓孮�>る裢严�耥�7焤(绨"f邮iゝ銼鮶删x鐟皆�W�*�聩塠釭'铞Zj2w7kA谔蚻撖鏙R胞<箍3.篿Z3C臈�梤�(G笄d?M款.;飿巟訉K工}珷(�8�/啊:��]禺蓧�葮 !!M乗稵s釭軘陹�崐o锞{�7O�O醯朜F鱰蹕X�6xJ�&鉻�<谹脏<餠J�e=e鑱おU慟� L妬桍$藘蓩my4V��唫疵�睼� 搵�4SP�佱怴�PiTG=牘【w騈嘾� D积u~窑QY �*'棪諛� +-煉諸蜞_�5 +H�;吜臡輥埌AF島伀�竍鈥C灰U兞a桜 鵈耽鄲]�啼�!鯔幯kw磔贩_� 舳nl洳P仟<鸿� + +镱M蚢��揮逛[酞5� C=袾Dc爃T鼦�饒庄丶緔c茼錴� 汩拢Ku金�尮渳n&覤/E芚疫抲[砷t确壦:襓2磰�(Zec鱲曵 +;欅咁厘鹄C�/魝u镠-煘Q楔a靫tk襃�q嬷ai帚ⅵ�援#有弽勇�J湱�狫毇&�+嘡礤S[^疅9�8 7�f椳�>��甁�<跫焭烳G柰{-Q貰鬫S鳠茯筷p藿�瀆^湱雧苉馱_廣泚'梣圥��栺虥�b嚪勖盀貈�MY觛�:�镅Ъ 瘞%蟣缏跸钤數S鱇!A$尲��a隂?�#4�%匁~鷥b;b本vSX:( +犄Y憉<赨�?浩+寰g�!詞�3蕿Q[朣寘u妃睥0諈�錹�?d� '抬��� +endstream +endobj +1439 0 obj << +/Type /Page +/Contents 1440 0 R +/Resources 1438 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1442 0 R 1443 0 R 1444 0 R 1446 0 R 1447 0 R 1448 0 R 1451 0 R 1452 0 R ] +>> endobj +1442 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [148.7083 717.9621 207.6966 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +1443 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 557.7163 227.254 580.685] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1444 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 557.7163 380.3883 580.685] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.0274 456.6895 204.9409 467.5935] +/Subtype /Link +/A << /S /GoTo /D (a00146_g2c64c8c36bc84f9336f6a2184ea51883) >> +>> endobj +1447 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.5705 456.6895 377.6438 467.5935] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1448 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 407.7474 256.4846 430.7161] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1451 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 322.487 147.1755 333.3661] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1452 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [147.6736 322.487 182.6919 333.3661] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1441 0 obj << +/D [1439 0 R /XYZ 90 757.9346 null] +>> endobj +1410 0 obj << +/D [1439 0 R /XYZ 226.1581 533.8997 null] +>> endobj +1445 0 obj << +/D [1439 0 R /XYZ 90 517.2837 null] +>> endobj +1449 0 obj << +/D [1439 0 R /XYZ 90 367.3148 null] +>> endobj +1411 0 obj << +/D [1439 0 R /XYZ 90 342.9866 null] +>> endobj +1450 0 obj << +/D [1439 0 R /XYZ 90 342.9866 null] +>> endobj +1438 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1456 0 obj << +/Length 362 +/Filter /FlateDecode +>> +stream +x讠R薾�0见+|L富v靈�-*R�>rT涯A� ♂羊鞯眱(虱姕鮴将欛"�!誁S�2-E� 翰��!=谤刘咞屲=rM5訆+殨� +欎萯V�"興<�⒚計�&F躒1Btt?愈瞅P琨w�(戱"洅囲�%P旴駿f 爡�<%绖J鷐0詺� I歌罋紦譑�8�)�(�$�绍略+�9�+沁玒題\Wu袑B鸐SJ�!yǘ,gN0罃)�$缰o�4sS鴽煣K徘秏r驰虯俔鳃麭咺邴瞏鯛掙_V炃chKP痣镻�1飕 +$湠墿M卉wr:繛煌訫�!�!聢��8� +3s5硗�!兛^崨熡试扶竪铖�獵扳endstream +endobj +1455 0 obj << +/Type /Page +/Contents 1456 0 R +/Resources 1454 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +>> endobj +1457 0 obj << +/D [1455 0 R /XYZ 90 757.9346 null] +>> endobj +1454 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1460 0 obj << +/Length 2132 +/Filter /FlateDecode +>> +stream +x诃Z]o�6}鳢鸢X8~嬱税-k��.{j婣睍垣#e㭎�?RiJ磝僬菴,溗玸�(Rd幫檏>n7玭韷籧讲G{;瑤� -D薵j�4釒憺窈:敍m殿T鞼煌忈aA�- G湗摉婀條{�;栛蟷愼D盎c]o犒顮闺�毲� ;XB�M 塹$0#m,渍;宨]硐\UI敼NRL�-tW#5�q壡 +荆T尩6竣偉= +�5喰X省罘雫8棬�壽痸�=鍹喢CaD�6屻骜x�蕑m(J榜�(覚�( 剺X郩S祖?� c� 味�1�?QIS櫂I)�9crB岝坢鍣飘�虌iW�敨 vUJ1pUZ谆*酝p誁<荱�0"^绐uy(M郑@4C詖瀟 +拸販N]m� DLg#L1 ハ\�|③�+佷澩4聟V'R镣圑Ne2p�0靽e蓣誐絡|�� �;鑷蛐#鸀�:顅KV,�=o霘颛r�)o�-褞ys7TR涄Q鱴{塋??夀.�9{�$jqW鞱 鹟 3hi +2櫪>�!瑝毈/!吷@}yX_!a⒕]W_]妇嗏��窈�:铎ズ�(3j移idxE號Uf#ヌm>t,刻听愍够�5犯qベ!凼篲l穗�8烯?攠A柣萱摏'5汊�7漇M��>旍 JHO�旽1巍r0竸耇 } 吅%4�)�+≌顿莂(5a葋CA�[V鍢 r!0涩�潽�}溱覯&咂zsU �5l靉爫C聞�]g銇.l恪x啀�0"^g泸顿&l,�8$卞貥橸偽硄圢刎胠?禖�zsI��"��扴扰�8 L�8]阥竫 炪鈚痵褶�D&&sE�8�眅櫂1沫耱L燬&v皏吃tQm�#铽顟紱x4{珞��诏� �v�2msJ憼X_歧苰渏羆��)煣u较C� �膕|�#� }㭎f幯s�0葌CA�[匆2a蝈鸨|陬!:awk�梊樼训煖鱋╳鶀|4凯詂鲖%婳涙竪�.轫劣�<*寙响]E35��<HA�鷃孬&?5| �迟&�S 1%訣坖&醓`� M衭Mb� 7墶xF�聢x�9v政P灈詉臉,�,8$卞��溶Bdf�些醏6�7驰羨��蛗橁 +Ь懷R鰍}8麯桉@b蕃兀捠^�3阍 +�!fK�螒ISq欮�"B)�?8�耇H膪�阥魢亁NH�聱趴鮟p7Q唸 4� �倛俨�懄�9响:�%蘁疔﨣� 龤邿庄沁�09 画@劯葎檍�0e蠪拠乛 ^t澴喊讎�^聢x澴M T,炡E踙襖槱婇\長8B臇鉻ZHd顫櫅I!:醫 漗穡哀艮Q躭磙悉З]肳榑�SA慠 +趓颽�7 x:��<阥xz 炪閠痏瞇}l�馇@U Q毳筻PP[枺Y亴?2鱩Bt恃f#�殭�;1阗Z共{�腈i[崨醮蓓�;椯h�Pm磝l鱻0e鞔{a鱽x庉觓D紐%挥苬涢瘷S$筻Q@1[庉塚HJ澒��v靼佪蟣v�蒡奚�>i撝跺]h�(svB +�$Q墟媷佒 �t澋喊祰��聢x{堧s闖s$痢 鯃-俗B#罼骖K圢硫|腹擞嘟B�称|趗�:醱籲_\f2N楡\1h椘胉��)户u捷C� �膕鞛#��5瀃芥圷cΤ郟恷臇鍂诰瓫筈~w�/趸K宰蕻�3�/2w�1-呆 许'矂讚娢閬"祗P6缅�F溛釃虲刀�懪M�M輆沂#鬼�^渳绬曯��=髦 +w/x锉�'袀﹙懸悲椿Pl�/跁囻;P嚄vR���鉭�=}+�c倏鮪駴蓍}襻��畘疀?咔/毁W裣d�?G啹endstream +endobj +1459 0 obj << +/Type /Page +/Contents 1460 0 R +/Resources 1458 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R ] +>> endobj +1465 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 615.0435 211.932 625.9474] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef14e83c046e19ab9fe9d1bbcca276c2) >> +>> endobj +1466 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 601.9516 194.2086 612.8555] +/Subtype /Link +/A << /S /GoTo /D (a00147_g1a1bc437c09ddef238abab41d77c3177) >> +>> endobj +1467 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 562.8165 207.3095 573.7204] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8411c95a4d89367ad2d9d6bde1a3d537) >> +>> endobj +1468 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 523.6814 185.9097 534.5853] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +1469 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 484.5462 185.9099 495.4502] +/Subtype /Link +/A << /S /GoTo /D (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) >> +>> endobj +1470 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 445.4111 182.0444 456.315] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +1472 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 406.276 196.4303 417.1799] +/Subtype /Link +/A << /S /GoTo /D (a00147_g64a238a5c02640a7a4aef004163aeb47) >> +>> endobj +1473 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [371.6975 391.5148 410.5505 401.4201] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +1474 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 367.1408 190.333 378.0448] +/Subtype /Link +/A << /S /GoTo /D (a00147_g81ac47cee1c18f6aa479044069db7ca3) >> +>> endobj +1475 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.83 352.3797 416.683 362.2849] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +1476 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 328.0057 224.0965 338.9096] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga9de254b8aa308eb4aab17efdde622d2) >> +>> endobj +1477 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 288.8706 198.383 299.7745] +/Subtype /Link +/A << /S /GoTo /D (a00147_g26a14b8dae3f861830af9e7cf1e03725) >> +>> endobj +1478 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 249.7355 188.5699 260.6394] +/Subtype /Link +/A << /S /GoTo /D (a00147_gde6634974418e3240c212b9b16864368) >> +>> endobj +1479 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.6003 205.825 221.5043] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +1480 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 171.4652 190.8911 182.3691] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef6c4140c632b6a406779342cf3b6eb6) >> +>> endobj +1481 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 132.3301 195.3145 143.234] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +1482 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 93.195 200.8635 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +1461 0 obj << +/D [1459 0 R /XYZ 90 757.9346 null] +>> endobj +655 0 obj << +/D [1459 0 R /XYZ 90 739.9346 null] +>> endobj +102 0 obj << +/D [1459 0 R /XYZ 90 739.9346 null] +>> endobj +1462 0 obj << +/D [1459 0 R /XYZ 90 716.6852 null] +>> endobj +1463 0 obj << +/D [1459 0 R /XYZ 90 634.1338 null] +>> endobj +1464 0 obj << +/D [1459 0 R /XYZ 90 634.1338 null] +>> endobj +1471 0 obj << +/D [1459 0 R /XYZ 90 425.5097 null] +>> endobj +1458 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1488 0 obj << +/Length 2344 +/Filter /FlateDecode +>> +stream +x诘[踤鉌}鱓� 黯龗椗&辒3@�賹�) 幫�桠暔馤緙獻v8-撯aUu駵阞叄 � qB昱闽�.炧�nX�o飋=w G滄zq�钡�Q滖琵�/KM絷�+�<�;╚^6雵猋飛�O�v凷菍[J锄睨硗?睿�>.%4髇�s笏ot�窠健D8�痯B s�/�7拫p补y蟑hЩ修05�愈鬻C絙j鵼籲�(p媻蜞{d㎝7U~�%.h�$M�#m�.�6聕w麕懐=iwu鄅觃9瑒Y滞羐ㄚ}広蟔� O臊楦}⺋5誆rk VJ_呠Z�)W�# %xj癅q膐 /N蟆�DG氯�部�7�, +wJ螒�;�6嬱�L疅�%(稔G�>ㄗ户炢悽爟_鈊w欀�铎uj舵�壊篏幛>�+q鸿4R:q:冄╃9�.�0�杓蕲泆蒂忋@8�0萺 +">�5嬔L@c怄栵]鈚��~tt'坳篾错帍鮆义佣搋��赭鴔䙌;敭?�8质樾曽p骙<溻�)'R爷5‖#�瑩�0T┝�,緼扛0單g( #��1!娋63$吂维脱�2�(社�"TP英辱;S蛃鴁臲"�啾��3bQZe开肟,E�攁b 0\,壛扻蕕R򡪬p>G,�02籄,�"拜���/媺C閡R簉B" +�$�淬鵕詮PD酃�)氦�驫鎭.?�.~钶|Js 橵砖��c8Z� b癉椴逪樵� J溝9屘nJ�胼c�q�袘4D�?窎鵐h�M売襥b�?P>歰}&遻{躥��)?剫l梀U +�4p�)瑎G述訿來堖丽乢滍C�3貛剳費�域$�57紲唸B��7u眏K咳� よ��窬綝r�(汶鵖穼�儿鳶�彲刂Hiet妾k�诵PR淩糭嚃�薫軂高荅鎩iY8啃ta胟,4aㄆ��C�� 鼅Zqx雽豅�15騷Yb廍戀 郜� ${�嶄 �0�N�桖禂P翁祚<Af�?涌7S蹬0C�(�1pjFC铅Na黓谕Y�.�k KSz褀 �+ea秾U怿R?�:氢�)4pB趉L欱�58T�= +楏賊I虴虊S\拴�9R.�0�缡�)[I@��<�B淸M� + �>ヽ干J9w�幑Y�,b爾6�<�*{錖]絸倕&B蝝 RtI��)x��0W姇簥傖簞簝I8纏 '�A� 8D�4孍禐F鐣婊�,B鄦矲#紞ㄜ7摡o%�4痍1� �"螳}7E偃镥�<6n:z�s臦ⅴa�D廪0a�8yメ H溘蓹 坸4偙蔌跄K貘x槰9�a凜2P竩瘀)�4F炼詶嗬c]�~ 敉8FA-�T贤V�#偈韃,虰Pb滲�Q榗!埌#縓q嫖樨迢*E妔匇倦E2叠薪rm鱉_灍髑x:�"~�莼jy盠s槉�专臆鴷j� 碆煃毈⑶Pw廻嫊z澭a龔l貽瑿0,�G0e痯妥�4洼r[ G殐Q瓙汎畧�%B�縳�&|回膃偄f�%Z�梱欼�%�豴]鄹迴��t&n�=蝖瘺��钺3邾Y瓦旀齌y�荐{� 嬠昌]井7涱螵��>珻}瑳~7� N嶷侃?塏}o`舨j'd�oс┶篡B蹞嚎軂培蓥侩胊�.>W�鹬萋簘ad� 犷埴]s�cz�,}嵫 鐥G�.0爋橡摺网龌�隟籥8L�礉茟�w悽s�3馀�8歀砗g勆閩?�2輢e�?o萶; �0罶閕鈱搬 +� 糊:机P5qs|吲�搡莧闛�觨给営钐縈�y� 巡)�F鑠7巛棫|鵖领1憻�U6�!endstream +endobj +1487 0 obj << +/Type /Page +/Contents 1488 0 R +/Resources 1486 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1490 0 R 1491 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1504 0 R 1505 0 R 1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1514 0 R ] +>> endobj +1490 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 702.9069 191.2995 713.8109] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +1491 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 664.0494 180.9385 674.9534] +/Subtype /Link +/A << /S /GoTo /D (a00147_g58bb90796c1cdad3aac2ecf44d87b20e) >> +>> endobj +1493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 625.1919 204.1906 636.0959] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga87feebc7cffd4d8300e776cf64e4fec) >> +>> endobj +1494 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 586.3344 180.9384 597.2384] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +1495 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 547.4769 214.9411 558.3809] +/Subtype /Link +/A << /S /GoTo /D (a00147_gf2dbaceb10c67783a115075b5b6d66df) >> +>> endobj +1496 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 508.6195 203.0756 519.5234] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga20812098a4663c8a9fc4ce8e95391b6) >> +>> endobj +1497 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 469.762 203.6235 480.6659] +/Subtype /Link +/A << /S /GoTo /D (a00147_ge5ab69d40013e6cf86ef1763c95d920e) >> +>> endobj +1499 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 386.9994 175.2098 397.9033] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +1500 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.0255 386.9994 203.7128 397.9033] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 348.1419 185.1725 359.0459] +/Subtype /Link +/A << /S /GoTo /D (a00147_gaa585784b0914cac1d37f07f85457008) >> +>> endobj +1502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.9881 348.1419 213.6754 359.0459] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1503 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 309.2844 152.9837 320.1883] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 309.2844 211.6433 320.1883] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +1505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.459 309.2844 268.3701 320.1883] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1506 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2043 309.2844 331.8917 320.1883] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 270.4269 171.8826 281.3309] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +1508 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 231.5694 172.9089 242.4734] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1509 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 231.5694 236.859 242.4734] +/Subtype /Link +/A << /S /GoTo /D (a00147_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +1510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6746 231.5694 293.5858 242.4734] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.42 231.5694 357.1073 242.4734] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.5934 93.195 210.4073 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +1489 0 obj << +/D [1487 0 R /XYZ 90 757.9346 null] +>> endobj +1492 0 obj << +/D [1487 0 R /XYZ 90 644.2869 null] +>> endobj +1498 0 obj << +/D [1487 0 R /XYZ 90 405.9509 null] +>> endobj +1512 0 obj << +/D [1487 0 R /XYZ 90 194.2442 null] +>> endobj +746 0 obj << +/D [1487 0 R /XYZ 90 167.7584 null] +>> endobj +1513 0 obj << +/D [1487 0 R /XYZ 90 167.7584 null] +>> endobj +1486 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1523 0 obj << +/Length 1357 +/Filter /FlateDecode +>> +stream +x诮Y遫�6~鱛!`/6Ps�)Ry哎隯犈�谻[娔腇e沙涔轤繐H巡$Kr�A �<辸w鋧渖拿餑�{RH0顊裦喗G鑯5#vx 闼蟱�犂Ьw鱌i� 擯�.�0鏹堡 +K<呖��� 娄�6嬿�6碹,趏tZ勁:K燁尢^�9\k朻>)Q�瀩鴦�蘽3脠Jxx翀�63NY龗烃滮狒榿jB焪渹g�0o蓔纚@�( 仩"h T�0f覔�!p焀褁�5躭澾�=$�"�(鯕J坌躕囃X俪{碈�,�$L鬥�:9'V歺绪Q矄旲Q荋�,�4r椁凄;贘xT倆K恐cJqR嵼陱觮]m慾讋厃&朐�#id鎅N�7賬紼+�橦銼n娼~�;滷:6掲G骪�6�n稱�$崩餙^X鹪 +粣�+ㄖ�`F仾�}�#婅V 泫眖馾镧�>�:甎Z嶌\#鍒窭D榉07硧昒eiS灶诞鉭敓鎒汹櫐N銦�.K��闿fぶm潺魶豹 絗O轵N绾�7q�7Ya郢,/P{现�*槫��簻蠦)抹�z|钬讻蔚Ti_�)�=壧8臽T溞l[W 嫧繷∥/籠嫃a反栘匩R]�=^K`b"圇�An�2^;^hC)8娄篲嫃阎:逻攃8榊0'4屳颜 o"j撞矾饀焱炋辝f|b奈�= 垃O■鞱/�澄鰕b澩哑av�5鷴f鍦C€G菹�-8恱捓蝷[銄蝗�3=�=糢|_幃琗�.璩vA粟-C�B玬�?�釛Z*耞2w崭補�;� +�0�+V鮺s�琷矌掠帉略宇伌蜩p婌�#啌�N埩3�)u鶒岚晐� BW� 库旈Z貃�8盿义I.豴t溤xG�锫=仪瑣~9迭�絚詪D胊pR#餧mM�%祾�*志佥譩~�=�$缩t纥�焩9眭羊 >煊�鯼夭T0羄栯u�<硯飕Cy,勄�/�箚JHk喤0�4�.s UP�*!'r�粽\拥皸k溫4�屛塳F�;�I&湈k隨9閱3錸!F层;諏F饔K谱%&瞳︽*紽t�媸 kI)R[R�M煗ON璐0Hd踳~雒凪xRa烩琫Xん<��.QW忓~沖蘘厥H $k汻棾杙�!S硋Z貨礜lB%:歋):傑�6\尀僋‵青踷дC净倀迹mbI:5�&保jU:哠Y: 哒鰉 +S��娤/L蹮� 茶隣�!r�惊W� +(楤刭�3挬rQ厜堙螖26痶獁←赪渠m輝� b痉/勞'尽靻谂�VVi�=y嚎4詑客�u琪AX_旫5'賝endstream +endobj +1522 0 obj << +/Type /Page +/Contents 1523 0 R +/Resources 1521 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1437 0 R +/Annots [ 1525 0 R 1527 0 R 1528 0 R 1529 0 R 1531 0 R 1532 0 R 1534 0 R 1536 0 R 1537 0 R 1538 0 R ] +>> endobj +1525 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 720.0194 154.358 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 573.2189 135.0008 596.1877] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1528 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.9895 573.2189 174.014 596.1877] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1529 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.8794 573.2189 241.5202 596.1877] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1531 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 417.2379 142.7416 439.4893] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1532 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6071 417.2379 210.2478 439.4893] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1534 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 273.8347 142.7416 294.7461] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1536 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 132.7034 135.0008 155.6721] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.9895 132.7034 174.014 155.6721] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.8794 132.7034 241.5202 155.6721] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1524 0 obj << +/D [1522 0 R /XYZ 90 757.9346 null] +>> endobj +748 0 obj << +/D [1522 0 R /XYZ 314.6454 681.6068 null] +>> endobj +1526 0 obj << +/D [1522 0 R /XYZ 90 665.7144 null] +>> endobj +1485 0 obj << +/D [1522 0 R /XYZ 379.3917 536.8636 null] +>> endobj +1530 0 obj << +/D [1522 0 R /XYZ 90 520.9713 null] +>> endobj +745 0 obj << +/D [1522 0 R /XYZ 231.9163 380.1652 null] +>> endobj +1533 0 obj << +/D [1522 0 R /XYZ 90 364.2729 null] +>> endobj +747 0 obj << +/D [1522 0 R /XYZ 226.1581 253.0464 null] +>> endobj +1535 0 obj << +/D [1522 0 R /XYZ 90 237.1541 null] +>> endobj +772 0 obj << +/D [1522 0 R /XYZ 379.3917 96.348 null] +>> endobj +1521 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1543 0 obj << +/Length 1882 +/Filter /FlateDecode +>> +stream +x诘Y蹘�6}鱓鐲m爁y棓�E�4ど}H侤+觡5蹭Zr滀�;IYwz{羈a�<��93Yb�#�/爤q筁 紎�� b�70緄~筟+崠�$曀籡-A$(∷豁麜Dr健/邩F|2mk玙厼5匠霡泊 礡銣搎�1.��;�%b!シ:{,蕌钏也R鶖鬣5C孌t迃 蔳臔歴 �+�$ 枓cb9�h覨 肞!��A紩抵鏮忝1S鍝緁��(橴蚎往�!8@ab搪禼\�&頤�浰歚8Z�%S�<0勧Y'9愊劸,m罯C�E�=曈px綷RY憛S�委糀y��畏頂�0漪V'4x�冠帇篛�竐� R�#�=np(燏�4~35?:!T J"3Pxze圬rm�:b�汧�3縵Jve}碐]鏂剋 +51 荟忘�/脓妤�魲腨�樰祡U飑�整]7亏伻f%Q7+a俌+� �3漨\臲7霳�9x缫橎佳駂渒⒈J螭8儁見\備�&�)撏Y2;1^S ��gi|锒H蹣�& 桙j到雉l刳�峯VZ)椄工冯科yu铩I蟠疧诇螻*軦2 瑍瘨现鯹c鸌u}詑韚--Gべ誛蚊pZ&崌!掟捪Z 4蚲鈻�r#熗(~4� �e3囈鰉魃1�0"N耏�6 龋�/k溌8儮&]嵱kvp忣驹Y褦3`圪U;怗s_�SGZ枷巵\a .A募擥齈Z泲�b窰尢E �+.姦�(W桸Z礤6T亹kP�*?耢�u� ⒕垆B尘堈mf襳鑛菝耂澒隥浌氘�玚苴莼鷸蜭1=�;v�8灁eB�栈� 糩�釾� +� 谩-a[揨嘔岀魀跤H黲Wc政T��#礦�.吠=i2&B*劋��3郇闃H!騂w_鄰塻��幤�vK)2霙k-釷=�6_峵曓P巟�鋔鮬皨焖Z翴㊣8�:紘笏w(燓伌皴!+儧楋館鮹贵鲏�!L9况錛>旀筄d叀惙:×弱慳垜`,舾痢|�亿d9!�%Cy?陯�'�"蓲E��靱橶���,$x殭徟U囗�> endobj +1546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [281.2077 672.8902 338.5322 683.7941] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +1547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [445.3859 672.8902 493.3155 683.7941] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +1548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 638.3707 162.0093 660.6221] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +1549 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.9981 638.3707 201.0225 660.6221] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [220.8879 638.3707 268.5287 660.6221] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1552 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 485.4889 139.4144 508.4576] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 485.4889 178.4276 508.4576] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.2931 485.4889 245.9338 508.4576] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1556 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8738 374.2304 451.9686 385.1343] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga87feebc7cffd4d8300e776cf64e4fec) >> +>> endobj +1557 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 339.7109 142.7416 361.9623] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1558 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6071 339.7109 210.2478 361.9623] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1560 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 192.4983 139.4144 215.467] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 192.4983 175.0106 215.467] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.9994 192.4983 214.0238 215.467] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [233.8893 192.4983 281.53 215.467] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1544 0 obj << +/D [1542 0 R /XYZ 90 757.9346 null] +>> endobj +1545 0 obj << +/D [1542 0 R /XYZ 90 739.9346 null] +>> endobj +716 0 obj << +/D [1542 0 R /XYZ 480.5514 597.9626 null] +>> endobj +1551 0 obj << +/D [1542 0 R /XYZ 90 581.3198 null] +>> endobj +742 0 obj << +/D [1542 0 R /XYZ 226.1581 463.4224 null] +>> endobj +1555 0 obj << +/D [1542 0 R /XYZ 90 446.7797 null] +>> endobj +715 0 obj << +/D [1542 0 R /XYZ 226.1581 316.9271 null] +>> endobj +1559 0 obj << +/D [1542 0 R /XYZ 90 300.2844 null] +>> endobj +750 0 obj << +/D [1542 0 R /XYZ 391.2972 152.8075 null] +>> endobj +1564 0 obj << +/D [1542 0 R /XYZ 90 136.1647 null] +>> endobj +1541 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1570 0 obj << +/Length 1722 +/Filter /FlateDecode +>> +stream +x诃Y蹘�6}鱓鐲e爁yE)/姢iS�%A爼璧Yru深鲭;/�%Y�6羈!J�93�4Yc�#��(b~癗�+季囅疻膖o��鴘氟�7�#4X秭B@畐�忋蜄哫`瘆�'49�潞癞L踈牿�2i彶h�&+嬐л壅珴觡题, J�?�燄:筠�0bQ茸饌�"�>畖熟K菌{鯒醚輤┵q娄η樱�*綮拊`}zEYl�昒┻步~6�晫k樥迩鴗食D蟇3`Y瘪摈uC盬~�焐鬜�9耐X�%mU� �妜�3)婤&g麮l七IiU眆_V�,齲8d���"熙斻"�+V�67�;硦�2蟚娷8�犒莞]g�/:櫖竁/�'7斆T 鱜韚猴� h胛餎 焜Y�#崨X~�0枢b辶疦�)崘ri�5H鞪鳵蒫�諊瞡.G+秃ピ⑨N 9�$� 餛 (欆gVh蹢嘡!�`��(X缙W忨駭塌臥3� Xs獇吥噁拽綯鳓雧螥�勸) 噤湗2睊u��蹸扇J"FC轆NjI�M��iぴg堘h�*拽o鍡詮p曻F鎱l覊� 仒O倕筟�%�#4=�.U�礕慗壛蚇膀Kv宲��.�3堥� !犘峒溤傶1歊�3袞p B9XG蠯�cZd&1*o5� i射1A�(鼹﹩豏說't�8 齘頴%婦诖焽�9!�'q���?1Kィ錔段烠廖嶢��E> 梦*��"B�4`尳R韤髄>Wz瞡猹备朷翿_UO3譔^冭� 嵁骐�欓d茮]!S~塎鉚锽悤m�?贇"旺訫y:Y煪?躌,r纴p�� [蹓o{蜚�5BU覸頡鲷7徘!鈩Lln'4o���桬V�6蝣maK?噅炲哈^灤W#籪姖$2;揍昵 鐬亂葕碩}Z6具p(��.-�!P$M忀Q^梑�2[欃曔�5��唇�!&吐�&壠-�|K|�Wt)�徺-a%"m~i#^? iw~S趯裈qQ虫z�(�2鍧�2m � TT�3}eTGi撰朌5� +苑篬#找嫨Z]8+宏S�(帐�*蓭姇�H寘:踋萛p銷�&�剪�+"鸩翋04腟��莁U[�:h闈(7卲x�X荊觓�/春)�*襩捛�遜G`葊殃P0偯"�C僡哹)�9鵰繢:岷�摽栃浴枰惄S蛹f85鶒�"FEв&Й魴A�5b�>鳐g�,D�轍熺T?�>�-湦螻l�?� 煶y�8�%�#��0`6詞� V~蓭��饄78�鮟�>$涔�隅馟�?~銮甒�!潤疧粛罏詔'r烹舯筗硵� Aw��X庁'2� 桺Z岊箔le计d饊蒨胅般.鐘{秛D]埃.豏梕螓縔 +徣wc)鮓�)-踘p斶-o?O�驻:漟拤黴�3� 枩988� 馷Y5Vg谑她讛� �7�T痪Z�嬥p升鵽詶篰�刴纏pc=歋z4秔�91eb}lNS9>L晴螽qRK欸h�9 HD让佉�夫嬯嚫 9 V\,l '丹|劧t戙pq��#芘��8e鸭溤傶1谂E�yf!"�= 褴E帄搊黄A m嬌b08�<_C篲sBB恣�E倕� 厑~@�)�7痚!臌w恶V遄旨脙~A� j僢l钭霆黑B:䥇鳃齟t/嫨成剹��篸渆ndstream +endobj +1569 0 obj << +/Type /Page +/Contents 1570 0 R +/Resources 1568 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1565 0 R +/Annots [ 1572 0 R 1573 0 R 1574 0 R 1576 0 R 1578 0 R 1579 0 R 1580 0 R 1583 0 R 1584 0 R 1585 0 R ] +>> endobj +1572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 662.2363 139.3246 684.4878] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.3134 662.2363 178.3378 684.4878] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.2033 662.2363 245.844 684.4878] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1576 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [366.5599 561.3549 409.5084 572.2589] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +1578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [469.3939 427.7347 513.9963 438.6387] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +1579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 382.8338 142.7416 405.0853] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6071 382.8338 210.2478 405.0853] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 136.5223 135.0008 159.4911] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.9895 136.5223 174.014 159.4911] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.8794 136.5223 241.5202 159.4911] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1571 0 obj << +/D [1569 0 R /XYZ 90 757.9346 null] +>> endobj +805 0 obj << +/D [1569 0 R /XYZ 384.3631 621.3448 null] +>> endobj +1575 0 obj << +/D [1569 0 R /XYZ 90 604.3735 null] +>> endobj +744 0 obj << +/D [1569 0 R /XYZ 226.1581 517.3041 null] +>> endobj +1577 0 obj << +/D [1569 0 R /XYZ 90 500.3329 null] +>> endobj +804 0 obj << +/D [1569 0 R /XYZ 231.9163 341.9423 null] +>> endobj +1581 0 obj << +/D [1569 0 R /XYZ 90 324.971 null] +>> endobj +749 0 obj << +/D [1569 0 R /XYZ 226.1581 249.8568 null] +>> endobj +1582 0 obj << +/D [1569 0 R /XYZ 90 232.8855 null] +>> endobj +1516 0 obj << +/D [1569 0 R /XYZ 379.3917 96.348 null] +>> endobj +1568 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1588 0 obj << +/Length 1348 +/Filter /FlateDecode +>> +stream +x诃X蹘�6}鱓鑻 �,/頚裛�  +麛乄ψFd蓵錶鲲3I],檼慌k��雾P"�?H�Y楙<3踫栬� 啋膔紊馑贻祯�6lqqm鲞侑/8�緒3寴牺槄j眯�8aS蜧a浊C綳岏鼦嶛�1蛿=簋�9~}豨浵樸$喜_鸵1/J槳N +&X�鴺r�枙塛百z吸黶o=┱─qd檞湟;[R炡'E"6��鷓L暞�=$ 醧$齗�擦;1 q矺� Jz� +~�薢j蘴O�6]�#X哊鄴Wk鲉B鯩__�H鲙Xb�o童迴6瑑v�嬱 銗n,lsW溏産A腬r漛啧?鍢l}}r綏险(揮驮0栚Y聼﹎╇�J俋|I 禀t�愥朣媿挃鼽 I�0HR��暏簮&愒笧奚$鍀NCR~麕�:鎋BRu�2墄8襝[B災�咁�9辀=唎畎=|� 諭i|�:彘鱁�3豥∽7敌堮K]�k4苘ac>ッ阯G�耰趎稶吺阻炌匩猸n熀uN镄笨C煍y籋漳桙Q]{X�#袈钛A馽公燀bvY�N^V钮沄唤~踓#9O謾櫸臭貺=(3W⒋�*添�x�飴侍V- f譮hc禒巭*x0ポu逃訦V5 砓%漙磀8蹲2X煮骈p>昡tG�b礧疖� 挏撽痰���宱;W<棖踔c篘T籟o狠讠[�紁[璀&锘Rx仐穑穉单畐,3$粊k�x付嘾榢k1 E鐀廽1 +C锡绡�薪�胄Ht�6w黇M�:謩k� 詶<薷R姲难H\[R灨�釔媺L�3}3�rQ-6檶�j豩膥O��罣銞茗y汷剹O氈順是(&逓霖��wY淳趍;晐�+O;秼[P8�#�"梙� �4%X梍8 "a<榺\O"借鉭貂V��:滋n絃笍��>�暕b]搶;颻钺濇猿j�ew詅+咆孩關铞\ &w欕>�顸仫旺遂�~儿:觘ndstream +endobj +1587 0 obj << +/Type /Page +/Contents 1588 0 R +/Resources 1586 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1565 0 R +/Annots [ 1591 0 R 1592 0 R 1594 0 R 1595 0 R 1597 0 R ] +>> endobj +1591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 661.9112 256.4846 684.8799] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 604.5791 139.4144 627.5478] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.486 476.2657 256.4846 499.2345] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 438.4462 139.3246 459.3576] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1597 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 220.9948 139.3246 241.9063] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1589 0 obj << +/D [1587 0 R /XYZ 90 757.9346 null] +>> endobj +1590 0 obj << +/D [1587 0 R /XYZ 90 739.9346 null] +>> endobj +1515 0 obj << +/D [1587 0 R /XYZ 226.1581 577.8727 null] +>> endobj +1593 0 obj << +/D [1587 0 R /XYZ 90 557.7368 null] +>> endobj +1517 0 obj << +/D [1587 0 R /XYZ 206.4623 392.0581 null] +>> endobj +1596 0 obj << +/D [1587 0 R /XYZ 90 371.9222 null] +>> endobj +1484 0 obj << +/D [1587 0 R /XYZ 226.1581 192.2311 null] +>> endobj +1598 0 obj << +/D [1587 0 R /XYZ 90 172.0952 null] +>> endobj +1483 0 obj << +/D [1587 0 R /XYZ 226.1581 96.348 null] +>> endobj +1586 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1601 0 obj << +/Length 2329 +/Filter /FlateDecode +>> +stream +x讠ko�6騵~厑 +坹|K蘿觏]l彻嵎馈-臨l醠蓵鋐箫o^�A`�� g嗴"檃�#3単憟恇\沃�+<劾魢+鈻棸緇鼂u跸煥�)�$暢粘� 斝�*齧.鑒Ic狴胥= �勴鄺2=�2;~_畯h�&/嬇玂W帆@妆%�$氷焀魁乬)镑� +#1{�寛Rt犊鈹鶑菡谜籤6対N鰱鉗鴮扉$拡ヅ抈岀�H尺1;�1?<�馏M�4�.+~��?�态�$K9挃�骿霅喇M车泸冼&艂堸珱<6蓑y鶖写霩撚 捏 場磈X0_�6q筵全*_P1�K尤N袎僿l⑷諾Yǒ璛 L鈎&1I嵣�-跴Cy� +a�WQndsW6費�*�E寬薲�荻6嶱D�8a�(N��9V謂弯!⿸}謉朂颃褊���\B娅卋04c��鋚謾泋.+/燔殇鵛琌剼不3+挧]�E�鏿�W"2溈穯櫉恱斤ro瓸挳欓-粨-�-rv玣� %u喫硃%樆?u�\駷 圢�q�:疀佉G楍L�}┸街K掌羭m�/�唂7墨9吟Y埤� �D唑袗2醡蕔\�0(倣,B wx�;y蝴}F﹫QL剎鼊竼x=K�!I雨q�8F@� 琚�詣��<ョ�篟#蕢 �梐墓�顉p 嗱璀� ���5�$rD�1C� +6!C5$� �%釪v�湿� 伝�#醖s&爜�略x`{�6R锷\吉�=竩廕� 弖^l靝躅辺R腙皅v抮罴硄棐份�s?{琈4儜! +u揟崫J�鳥}/v�愫踠剦鷲璼�%=b#/鰐`-�0嘋 饹l3佰曤ど�?"疸弅�.1莔s� 侨S瓠枦J菧k槮R嚂�V魻縎煁乀烂�n颲� ぴ�揷h�琔諸IQ矬�>a西:浈澛▄谥� 髼|烦趁宁h趺�j� @柌倩魡8�".6j�y�俸德lW`櫋] �箱!2妥牬W7S曤� �;匏6_o�5�.<黢=-}~蓙� � �#┫蠟C妐势+4K伀崙悩��Z蔛y鴈{�0E忭拧v槽a(b(椩c�<�l殟矷)着 珩澶� u>)錊Z�!#紿髷�墡f�靦o8d�'煣奎l矤2y�!�.譟. m�鹳莾u^椢@蛌@y�苻C鎴槖�椡O�c黻籼�#銳#闶醴N彈cw錑砑蕲>䏝妣霎(\啔r0�骆 +塜嫂云�/�哹鈛V^�p羈D �=.z*PS�貍i內t偄旉 +�!/众'餚=0�嘰?弝e� �..txq�?脻芄+5�紖蓺]貣��纊鉆�* 坮j|7�诵撝挭:癱O廁f1�g�熓�絘(�!^-礋W篋䌷鱬蝐槠@棑蔽羍咬鸎拺舱RY 紗v玃K皦娖�/垧#喳X5駇S豕3.QD��2吟^j�>X0v接�bgR�. �9牒橰皶w +.� m鶓慂�忧伮"��薘B読傀躎 ┐炅j㤘囎vQ魵萨歕S-侔]!.� 撦�?瘻-艶3迁PCRM5Y赑玢�.拏Z蒈腚�;貔�6评� 7啶S剟K纙EZ�p�娋�"餈#"柃'C劽��吆詌��$! 霒/ :/3([� d"!h僝挄kWl篜M搖@C猐AQ�Tu]〦潋)wU泲'鷙鹸"\�07�?D�虑q�P(Q%嬌e沷C澐y� 薞腾鞷(�.麰�'� 蓮F�抹@ty醨|�2瀛L�>宏暓�\惞�亭k&饿烰��%檣鸹o�?蹜�5Β!k緩辉!KI鑭e洖W(�2擭9�6�卹奌鞙仨鱠豦棿y�4G*&�!噹雬胵漿0蚥給h=鬽幟舉��)�l锭�襛[U燲�>� mU?徘�)幊.�妬b╱@n椗�&�钡骾悩緔�9茄寰桩蛭�9�2H譓枎毁樦 !M腹賗jfyk禮LwF�:揗碇ui躅髼囒鱢倓 眭/wwn資@�搡]鮤�-盁z顉`蠌uVろ�83�荕zh�=偙Q�=�瑚�縇羧佑K�.瘺�8唿&J &8D0 $訲膬/垧#/}琯鄣�(榎�枸矅翼DJ 俤抲 �瓇-酨n +w焌\徳樇杙h弃�<�?輛ㄋ胸c.乨+-�1pD霛准S前叞N磹��池t岪jP恍缞>陣*êo灴'��☆逷vC輷6臱�';e齂摒碹_楓鬻譓V孶�#R�?壂c宔ndstream +endobj +1600 0 obj << +/Type /Page +/Contents 1601 0 R +/Resources 1599 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1565 0 R +/Annots [ 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1616 0 R ] +>> endobj +1606 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 575.1408 195.0552 586.0299] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1607 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [257.8193 575.1408 315.7315 586.0299] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1608 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [359.1284 575.1408 384.9216 586.0299] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1609 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [317.5642 496.9047 374.8887 507.8087] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +1610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.2809 446.4365 239.2097 457.3405] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +1611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [472.3426 434.4814 513.9963 445.3853] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [117.5067 422.5262 147.7231 433.4301] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 227.0741 135.0008 250.0428] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1614 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.8662 227.0741 202.507 250.0428] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1616 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.3577 117.9412 220.1509 128.8303] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1602 0 obj << +/D [1600 0 R /XYZ 90 757.9346 null] +>> endobj +1603 0 obj << +/D [1600 0 R /XYZ 90 739.9346 null] +>> endobj +1604 0 obj << +/D [1600 0 R /XYZ 90 620.2512 null] +>> endobj +773 0 obj << +/D [1600 0 R /XYZ 90 595.6504 null] +>> endobj +1605 0 obj << +/D [1600 0 R /XYZ 90 595.6504 null] +>> endobj +771 0 obj << +/D [1600 0 R /XYZ 286.4315 154.5275 null] +>> endobj +1615 0 obj << +/D [1600 0 R /XYZ 90 136.4373 null] +>> endobj +1599 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1621 0 obj << +/Length 2589 +/Filter /FlateDecode +>> +stream +x诃ZY撣�~焈┦Bp拕蟠墲礭�=�(O籟S斈盭+慫娷顸鹴�/戙J�5&6簺_h4�叇媂臘 -v�;壶�?�1鱴 献m偪m铪��氳圙嬐撫1�8銒威梕D⒄�+簂>捋Az>骫Z鏴a'灇b噖刚,諯%V縨>萁�罭/%"哹�耕�7贺儈燁(:Q媑浮刬��;蓞�9�=荦;鸨虃弊�^-ab�I槚�"�%1 �aL駋$M(�"傂楯晴参搛邘QNb六⑼p 6P嵢-箤�$fB]埂鄧钾etYr�Zp惙筚姪鬻s东葶V溗"9m呈>屋�"珶W�.岁w鸴鸕粎e�jI梠郶阤j &�D乊u 4椉GG�;�*�=t餛跬褆m延相4鋴8}噩X颤蝙醀�(�:�2"Y�╢擯T挊2轚�.鈲J5a� 亃}%焤K剴5尼璚Z堻Xt旇{┃�-"y覗�>壻犎v馘扸/獺-I_{Q" 悴品礛m晧�糏Y`倓�+OT蠌屈RgⅠa�<"1类達o�&!Q1sG涥v顖�&2R盦��,SVC熊�"lT乕賱峢N8�$� U1 �/烱rK黆�#y��pM叐幵煬嚢h酵k;稒渗嵥L8� 颣�63崛f&5錬鯄賹[Tv勮譁坭~�==潖贁'DK堋$ _���&丂f褸v<杒囕qOvU!yR�('A駾s*魕�o\盤��N捀襪 鶞}D�羺F^煶坔 +|�@5#{� �悄堮L�8Q<�>�.麜R^渥**uqp� 玮妅珉O鰥K庮!�7渤"牔c1壐�%首�)�2�\B躯�~|丶�|�咫*⑺兔艉綇5{5爵|�1悻|箬4�8Kth�絸�',悲>� b酅M�:潲�楞%��)�%嘼 5" 轟�)I�CERu騠Ld��>]檳<乡峅]�7yD'炦1+曝欎床踳嫌�� !�<,吊磭�傃扎宻+S鈆譚`] �4:擗+lL吷c蕺0裎�6�$0狵{u唨Q僭v惡'PPa砒韉魼�'{蔹�搎袋R_щ壝)PR轻惍腐D硖6思寒J傭wt坙�蚬R>镨釀骉簘([q鍃{湮U夣 止稍}��琗V脼暈��!J:俞寎9C帆涺�0酀侐拝祶'|狹U廋{倭:K�&瞝-e宩k��=V%'H>{;縸袼溡{~jN]m6 锩榼鎉g宷q +T*宴 榅jn�'瞎�堄�.O`隄{ox斧食}hu�0繑v苼� +~�#g鐯溃视诃�)<�.�j�>15刀喣��=N+QH "_I5簧y鷘{寥.7嚯k萦錰傧·梛燣丑T3*p(。� +6 懎C僻mS厅裠諎{h"-駪唬*蝬肃豥�$d5C柡g仔�;�?N据v炽ㄖ�7 +F梦冋辒霖]0 +8婸曡佴�{-髧rG死@质銣扼8茼KS0�,授N}k郿R訷fo熊o 0脯楰�<槃�9m�0輁m�.R鏓j窞祤]SO愩 銮蜮滏艜x$� 乇嘌5et赩轀硊$c麉!x坞�5ヴ 觿'1�<�躈湍z燺� M:潆c讲潪拥��K�麟暝s瓳5$堃p物h役漨f鯡摋弛$y鎣=泤G,`+調潞�拜孚坼碑)淼十o╱甧Ps荸睨譶X尬}$禐�-獕L�9�&_�S`*7�5o瞯Q踡��#= @�A犤$鳍P鮲濑�⺁)�7鎴�郕隟梲泤蔾樤8跜B蝑���灙U膚醿朖M唆D櫧�9槿躼||-fY~薼�b虽G�箢蚒L槥k兊﹏�8 � �沷烲夻狯蒔醚}3悪�8煳粦� v=Y2:P蛪p城染P `璘O桧7黥s�|';&,�盽b孑=諟�窓瀾职j駄<郎鲸莝遁s 巃鉎Jl彨i諏�!穠鉎&?�8bI掽?:Gγ�6&搤C�<�&巘M淜]5籥�^6枑頧琁ⅱ箯D亊較0藹C揪坖鲧Gl� [僷腞q_揂k蠶 鍂歁Cn轂SG賤仙玐d献譆�$�/凋胆�詥|絁�9蒿価勪矮16峑牃AM樃`7Q毁┇瑍#� +冯荫,+挊$侳疎2邢 9鋕恉�B绤D傫i誔p绅c覿習�鹩78爴捞t��Q欞粡.5g�#与qM鑧�?襶b豞紤自^甊�蔎佡�8dJW9踟 +x叆骄搼p<�;�22wN摝p� 樏鏕;衾鳆H睹≥A攌找f;奐/?�Y雙究��(丱e筼g扰(儹摫;敆滔截9r呼颂� +O豌筄詠~較0rv餸g穖^靜漚 uk抻�瀓F�4壌]=汹Z跙�弳�� :鎟m郕:Tネ珱陯閛~絎p娾唉獺�骉3J0%Pt5i�9t_鼀翢�痩� +斎r枘�+钸廄埩`軍t�?#P��糅 億K樿$�轔$MN 怎绗�*堬}鲖煽哶鉵wW鷸嫹溭;Ny�谖7_≥廼锸�/邌'G8庎骭鹭聄endstream +endobj +1620 0 obj << +/Type /Page +/Contents 1621 0 R +/Resources 1619 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1565 0 R +/Annots [ 1623 0 R 1624 0 R 1625 0 R 1626 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R ] +>> endobj +1623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.7601 717.9621 502.4137 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 706.007 136.9336 716.9109] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 607.5313 162.0093 629.7827] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +1626 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 607.5313 217.8992 629.7827] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1628 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.6109 416.392 236.4535 427.2959] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +1629 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [309.2914 356.9954 361.4951 367.8994] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +1630 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 254.0374 139.4144 277.0061] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1631 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 254.0374 178.4276 277.0061] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1632 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.2931 254.0374 245.9338 277.0061] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 176.8276 216.6541 187.7167] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.5252 176.8276 343.4374 187.7167] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8343 176.8276 412.6275 187.7167] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.7656 122.7745 457.7454 133.6784] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga20812098a4663c8a9fc4ce8e95391b6) >> +>> endobj +1638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 110.8193 151.6186 121.7233] +/Subtype /Link +/A << /S /GoTo /D (a00147_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +1622 0 obj << +/D [1620 0 R /XYZ 90 757.9346 null] +>> endobj +743 0 obj << +/D [1620 0 R /XYZ 350.0021 547.1921 null] +>> endobj +1627 0 obj << +/D [1620 0 R /XYZ 90 530.476 null] +>> endobj +1520 0 obj << +/D [1620 0 R /XYZ 247.4281 212.04 null] +>> endobj +1633 0 obj << +/D [1620 0 R /XYZ 90 195.3238 null] +>> endobj +1619 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F52 1229 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1641 0 obj << +/Length 1580 +/Filter /FlateDecode +>> +stream +x诃Xmo�6_�!怿.)�>lK�ti指熩"pd9fK�,7 嘄鬏墹稢 θ噖菄倾橤釓y�怘H砼�躅狖鶎賏讫&嘧屐沁y銭$襖{薓%A3�8戕r齸络! 椟 +殜�ˇ馟�>n泳茹�.墒U欐兮泸侦俨謐蚏B3扎黛鼼戥良W3JD*�>(aQ慕軱r�>冻胭煹3PMZ濅安� 锨.▉辍CE(  劽�圅`z@Y艊$A葯鏎壬1葸誾]軘 _S:泅O竕鞧Dj�*洹,幈培z鏨E�)�%摓蟕I2�&黀峏潔H��XP� +I;锥�U魗l��,鈍L噂�嗀悏盇62K翰^,運^c'鉈*7&2� � +J緗鼹5N0_��Zs�穒懂� i梞睨���>瓒[僶p嶢獇��0"� +�%""l!j糧0p刡礙胜8渨�3蔍 84爂H嶎[�F0饑啨�z&垚0MS郂垿b)揟�/飉8p�虷髴o蘯镻E菜K劬�%'�1"誴Pkp鮿殺盛*yQ龃r� 襜Z�醮秠繱钖皱�%U+;頽撀从迢%�:X^黣:n菽糥Z�9髖*L鹼5铙 +�!�&蚣M蔯盽j瀺:<浿^�詪≥玜幦捩AX峵G+�w蚨祶~J}Wj3V箞�2#剈Q~b�tJ9P�N伱煵�'� +!邁Zh圡}"J妈 tJ{W*'O)S%.*毘s憒爺g閾w痩燧un場祬S\� G熌腻>, 欿iC�&)�,N欹w_尜蘔侮賣�8?遙�盷颺^菁桓葫硗邋ucc{�=铎>韩�'n渦拯吾i侰魬骀褼A�YンO諐�6m啥椤L2菢⑤m鏣)`鳏d劅屜5躱帑1�'祳螸唪.w.繯EG}请Η硶Pp &郆穞簗鈎燖<偑<貈歗霤轊刞h�$BF&┖.蠼sN�6皖lは;�癘�菰m6Z3汦畢殠蚆詘lR`O�%�4鉸yR鞸:凶;qkX臫 +~攫匑NR8�侴笸1撤�'槶|濲;\憞#&�聳丝p8刁Z�橖 嘗�%)F]卮t蒙挛O� +傏傘7懊巹�;�"γ舞报�'x晁E瀆,,溮偸9c�(赤V 漪f炸F( +-nm#騸}Ro獑殏嗱嫰珂�)gq0赃 +听KZ慔J飹定S�%兔二羿�4�+焙&G遜捐E�裵�:摰�)┇韾禞鞟栓"J' +�&j"尷�a飇 +j6h繲`閆2\%职fTo�7� X患�繭~ヵ鄞E"豤~mV�-�"Lj^考^>患z髒¢|yM哵 a2,�)星�)��鲀b� �&Z灘岽�wFp�(5疢琳> endobj +1643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.6997 570.6986 183.6983 593.6673] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 533.0943 139.4144 556.063] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2799 533.0943 191.8873 556.063] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [205.4361 438.1884 231.2292 449.0774] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1648 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.7601 376.1104 502.4137 399.0792] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1649 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 364.1553 136.9336 375.0592] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1642 0 obj << +/D [1640 0 R /XYZ 90 757.9346 null] +>> endobj +1518 0 obj << +/D [1640 0 R /XYZ 206.4623 473.4116 null] +>> endobj +1646 0 obj << +/D [1640 0 R /XYZ 90 456.6845 null] +>> endobj +1639 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1652 0 obj << +/Length 1881 +/Filter /FlateDecode +>> +stream +x谡Z藃�6蓦+4訊W�6蔒uX�7.悘芒^癮(窛 Ef井U谑.蓞详?<嗃輣Xa+Ro秝釕螳晚驰j_mk�英^t☆鮝瑞耖$ B� 嵉園Xq轙濡z�1軻�3趷D!L醺tc@郄q�,g殶�8聎�&:$�>E�;T幾适`)?瑋MrnUA惢[�;忶;N#鄐i$q]峭脟兔b第'yh兇�&�昪O�5崗n腑l赔.qT&Q橣ef�%i荵?YKL�4樑)熼�|�瀓浌銶鎣朗鑃P楖/謆觜隔^6 僀S)樟烩种Q蘶髁0莭餒]蠿=劻H1箩z鴍fG/;皩笴(厴n�;:X�q@�捺�o�}�wd襀鉃�!馅胮�#�*G烡鰣�<*嫧,2傡$$E�+^f� 丞儊v�*� Um钪"�?n|鵴�<�&潞縋鴡�1��:绨�;, +9 骓�8珿^�08�$n败=傅杂0!j�'��5:T&�4Zp讵:赞圐�c. +��!?X雵嚙聶マ喈^W鸔舾靔宻!苛z�躧剭蒠爟e-,愥 桉�-�'/癅&�$钚��0蓤�e2HE驦o2� �5EvXh� 爟��X匆�2軑JXAqE惼T^d|仿G�(&'�藡; +�骓��埢G^"n8�$頏荀嬅g al�暽"�6*p_vi乑� ≈#4�ネ伐mU�:`a詄x&,雭� ,鄟淧�"��%�sF=#⺶h6颽&扇預0朦T髽!畡*詜剢4`.礧�=歕vG縓帆桸衯犷o[g慧鞀h�蘌$堅�SE2ì�`亦��4飥s��哘� �h剥蔺�茒}H鐻2�-z�勣羂�7�+奼�w=硍蹪CP鞑�.!tAmK0}戸c J凹裕�愔a轓�1o佢{�%r囉H怫O�堵I�0}璛笤顎笛厷徯愭 悬疃瘦J�2l."wj 襔袑�;XV顀@@�� �o^題�筭襀怫逦F�稡'� }璗頣s$�4er徰��; 鱶絠�>^T馮1$鬳2TbD9� +>莉倧B倗y;燎�傦憲N#壽<<� +'撩鬒碽羢讆�/�#0$w�灶>i�楗黩哶嬲<� cXN�枟z�:疼I=�-恴徏D阷I\椘o�+&I�.矔`4��#O�A昪仺$�*?�!晎�� �姩鰃>+}9.鄂:�%j� +z鱥讻牆滤凭废=囶M渒7@0L蒃f�12B骒蚜馋�鋈�{魓篥钃�#揊抓杯w脘� +�1"L�#V椁z鋚训鲳迚氱駓ち�B)抾di骤"@�凹.F圪�0[蘴[PE.籒=qvG"?訧zL!� 樱�閝尠�$沕栗译:矾*偆痘翱:T嶺r鲙d�.n繫y廒�飜�>浟0顇�l鲿,W鮻�{W�%E忴�;俣� �6�?氓泩 �7��1�i鐞矋�)苂_hc�D禵浛麁g36傺蝞�i|�S"戕}�O,/猰礯葬db8*^好廏A��彑Q鰧怫蔞葻EiNB営撦yP俻�劂皖煣籮;lNw�4�迪胯Km.endstream +endobj +1651 0 obj << +/Type /Page +/Contents 1652 0 R +/Resources 1650 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1657 0 R 1658 0 R 1659 0 R 1660 0 R 1661 0 R 1662 0 R 1663 0 R 1664 0 R 1665 0 R 1666 0 R 1667 0 R 1669 0 R 1671 0 R 1672 0 R 1673 0 R ] +>> endobj +1657 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 613.8755 190.8912 624.7795] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +1658 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 574.2326 195.8725 585.1365] +/Subtype /Link +/A << /S /GoTo /D (a00148_g53fbda0e8c31d4882294c8dc3cb5f487) >> +>> endobj +1659 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 534.5897 215.1402 545.4936] +/Subtype /Link +/A << /S /GoTo /D (a00148_g769512993b7b27271909d6daa4748b60) >> +>> endobj +1660 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 494.9467 213.028 505.8507] +/Subtype /Link +/A << /S /GoTo /D (a00148_g210e629f7252e4bc8458cbdf260b3318) >> +>> endobj +1661 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 455.3038 234.0589 466.2077] +/Subtype /Link +/A << /S /GoTo /D (a00148_g6b16e0bac41821c1fbe0c267071642f0) >> +>> endobj +1662 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 415.6609 216.9034 426.5648] +/Subtype /Link +/A << /S /GoTo /D (a00148_g969d7fff37a979737da045e0d538a9bd) >> +>> endobj +1663 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 376.0179 195.8725 386.9219] +/Subtype /Link +/A << /S /GoTo /D (a00148_g22fa0681cd463191d7a01fe85d86996f) >> +>> endobj +1664 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 336.375 195.8725 347.2789] +/Subtype /Link +/A << /S /GoTo /D (a00148_gffcd2fbe181e2aaefbf970551c302af5) >> +>> endobj +1665 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 296.7321 195.8725 307.636] +/Subtype /Link +/A << /S /GoTo /D (a00148_ge23534479ead15af8ff08ace26a47fb5) >> +>> endobj +1666 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 257.0891 195.8725 267.9931] +/Subtype /Link +/A << /S /GoTo /D (a00148_g165b603ec150e26efec7be199c9c2901) >> +>> endobj +1667 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 217.8198 180.7494 228.3501] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1669 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 179.8606 169.3122 188.7072] +/Subtype /Link +/A << /S /GoTo /D (a00148_g118e9d76568ab81ad97f138d4ea1ddd2) >> +>> endobj +1671 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 119.8657 138.5977 130.3961] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1672 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 119.8657 162.6772 130.3961] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1673 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4928 119.8657 191.1801 130.3961] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1653 0 obj << +/D [1651 0 R /XYZ 90 757.9346 null] +>> endobj +1654 0 obj << +/D [1651 0 R /XYZ 90 739.9346 null] +>> endobj +106 0 obj << +/D [1651 0 R /XYZ 90 739.9346 null] +>> endobj +1655 0 obj << +/D [1651 0 R /XYZ 90 719.3112 null] +>> endobj +1656 0 obj << +/D [1651 0 R /XYZ 90 633.2198 null] +>> endobj +1668 0 obj << +/D [1651 0 R /XYZ 90 197.2909 null] +>> endobj +1670 0 obj << +/D [1651 0 R /XYZ 90 138.8364 null] +>> endobj +1650 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1686 0 obj << +/Length 1900 +/Filter /FlateDecode +>> +stream +x诃Y[4~锆▌刏tb|w紙畎办� 蠶6MO#冥ら.邕3庬47椴hu秜<櫵7泷孋�テK%覍薳z\噱<A躵隥椸胪怏铹^j�%曀彤� 斝錰J萿Dc牝�+ +�"哿襄鰎褥2�尝N昙,�n^.聚磖漐侷b进齇架倆/1嬪{榒D处算係�'嚺浥o-恍�睳6�犧> +�*k濪 +製D0�?0ε-�@扵�.宂!釾}岔聱q�&耜譥撄�.�?��C7 曘栈5��2z浕襁棨蝪Uy矗}yvo焝Ym呈胍�Y齸M桃_aj!V权i# +I蕐Xf煙�ruL要4C彬廚U~L餷_钨�.焓�揖]y馾I狴��#k廦蚌榞VC3r鰳搴磸z鰳�!ucO$㈱}od�>薷&:Hc\H;苫5+0,y{任$饆皊�媒幌唟刯啍罼r�$v琓O庝u'諿颞Co憬T#葈 X汸魬卣僎�兦疮莁УD右鍒砐鳏�.E陟��紴%[4T#揦-%xG*jxⅷK5蝘盕3郋劚稙熶xg�J&�"N婃H莿胮贙+�! 籃祎-橯q籓O)JG +�qO+礣s軐鑷慞� 7i1z踨O?'~姆壭靝(#翻�Z" 巋N�!� 胘岡�呆3仪|嶘*;棁wk 9kd;eQ-卮�-諟�钒� �7%遢鎨鶼馛綟X�咾唲Tr苝O5'y耐蓼イ貛夺T軓�觕淖鑁g8X懴團\(1 BK5#|掏风~DゞBˇ"P�(贋'哘�I��-俓镔睜鱨墈继N﨟簂W^猭�<�!苹俌螩0O荏F�"a襚 喀卸冪���0�:Zx磭絞雤樹E漊g辙尙�0r贕 �7�� >鑼$弑�婓)K筝s踜 0�m�>n'�'� 6孈巍骹p�)瀑坦找G�BG菒�1阅 x寅f�!5R**4<�<諟 +矠�&牕嗺�?蒪G詪4�几調0b�,殛w�镽[5�嶮匢s锢憡)跪鬬� �!)aG圪>勦鼤\貟软6C錋n葦D�0S盥钿�!Yq";蟂�9妷爙#1襎�1廂�珸㈤戱y犉�!齊K鵨_C}n?n躑H苣G�1��4槯g.枕䦶翧蕰U鲿9%�*9f佰'毨慄qa┣�葋6�%3�4墇(焸W崸韔�魗<珳翦~e撉﹍2^?�$�灞_匄� 纸�椵澄w榷咀&.洖�9蓥呅殗窀C6�O纨�峭秶nR哀 8B"�� 揿;pU甃氍頦 �.h�9�:dSpy2� 驻�+\C�7嚓 +n�:g恇��#Z$啍赦灌陹M犝抷磋M处穐�囇� n血鱵蹩�%A溞s`u圈莉d,v琁罻皢俹��軅艡螿�?�mjx1}妘﹏焍r8SX輞�9%鷥o1�o1[瞷n1'惫辀螆q浘澎 姐sF鼒�煓�諥�1蓩CY�"s鳨��嚠诽�:泬枛jF�1饭�-哹L越写魋z岠NBS^�0:�*耲.^Z��:鱚寊&怢癟秀蠡嗊F "\看`袡H!?瓿i筚7哤4餄�"�;a饼P/rI[U屃?dEV%弹藜�?K忝嫑阰⺗P鰝:(祁鰀g闒唏�?%縸鯻]�y~蔉愅椵J��1,閑ndstream +endobj +1685 0 obj << +/Type /Page +/Contents 1686 0 R +/Resources 1684 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1690 0 R 1691 0 R 1692 0 R 1693 0 R 1694 0 R 1695 0 R 1698 0 R 1699 0 R 1700 0 R 1701 0 R ] +>> endobj +1690 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [292.7281 646.4529 322.9445 657.3568] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 608.5208 139.4144 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 608.5208 197.6953 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +1693 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.6841 608.5208 233.2915 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1694 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [236.2803 608.5208 264.5639 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1695 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [284.4293 608.5208 320.4537 631.4895] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +1698 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [313.4498 360.5812 370.7743 371.4851] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +1699 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 124.2624 139.4144 147.2311] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1700 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 124.2624 262.94 147.2311] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1701 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.8054 124.2624 416.0743 147.2311] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1687 0 obj << +/D [1685 0 R /XYZ 90 757.9346 null] +>> endobj +1688 0 obj << +/D [1685 0 R /XYZ 90 739.9346 null] +>> endobj +1617 0 obj << +/D [1685 0 R /XYZ 90 722.0597 null] +>> endobj +1689 0 obj << +/D [1685 0 R /XYZ 90 722.0597 null] +>> endobj +1675 0 obj << +/D [1685 0 R /XYZ 288.1051 554.1796 null] +>> endobj +1696 0 obj << +/D [1685 0 R /XYZ 90 532.2319 null] +>> endobj +774 0 obj << +/D [1685 0 R /XYZ 226.1581 456.1224 null] +>> endobj +1697 0 obj << +/D [1685 0 R /XYZ 90 434.1746 null] +>> endobj +1680 0 obj << +/D [1685 0 R /XYZ 226.1581 96.348 null] +>> endobj +1684 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1704 0 obj << +/Length 866 +/Filter /FlateDecode +>> +stream +x谳W[O�0~席垬凴||崣�2�H撠�7@(F+-kR�~v欷!M/l菽峅芟|��+霮.憿L潎齕��挲� �0疝~$蔠H "M〢��?�蒦H8�'gv慙'=唭�� 濆�索7驣Rh)注\�.м褷讹茔T�炳�;磕⺁粂阛DU凝Z��"䴘�瓌摈整\氡鍋�(9衜�$Z攗攬 � c��揑�"项鹸8溋尕,�LpZ+mh召% QΜ殖,鵩U#铦鍏慥�麑]2玠ci�#c台�a碫熁泱鈴bァG~�此q�!捑` NU�KE├am #|]*墶, C2"靶iXT郕�!t壃舢騐!�XlTa狮kDH懚:S蟷混跜�'}趃]赸& 蚪}春c縑l戏:$t釁D7`胂嗓U即<癐w展灇W�/矸�=聝x柵�|痶s� +?柴笧�"�&澢莝'ZUf甂B$兾櫕僳D-蟏�芓胍覫垱譥鵕�&HR澁u�R0�,魈涃p癉(矧癥�W脤嬅Qr煚d葾!褄�瞪魭6c趲d�*D�)*式CKTYQ硃戽|淯籁>葂羗h刓*鏣F "7�#贃a?姗n裔NXk-=钅輮嬊賤熵D痜�躏�#�/貞琩G狵湅蹯谼璮G +鄅Kv\g旄靉';职m豵mn旄留挾]�#`�=奙鬑�婹6� 旄 3蹜#杌�76阔┍�f檻緶W菍u蓥摑s弖t 彀�駿凹蠪�P窑T≯侳誆�9aRv淣襓\w粻>U婼摡��Tq@�令�眕7^搧楝u?鋩譕鰕8}|篗'眙榌jG~~Aendstream +endobj +1703 0 obj << +/Type /Page +/Contents 1704 0 R +/Resources 1702 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1707 0 R 1709 0 R ] +>> endobj +1707 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 542.121 139.4144 565.0897] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 300.0025 139.4144 322.9712] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1705 0 obj << +/D [1703 0 R /XYZ 90 757.9346 null] +>> endobj +1706 0 obj << +/D [1703 0 R /XYZ 90 739.9346 null] +>> endobj +1681 0 obj << +/D [1703 0 R /XYZ 226.1581 519.9805 null] +>> endobj +1708 0 obj << +/D [1703 0 R /XYZ 90 503.321 null] +>> endobj +1682 0 obj << +/D [1703 0 R /XYZ 231.1394 277.862 null] +>> endobj +1710 0 obj << +/D [1703 0 R /XYZ 90 261.2026 null] +>> endobj +1702 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1713 0 obj << +/Length 1160 +/Filter /FlateDecode +>> +stream +x诘X蹘�6}鱓 �涘]�}i7 睝�4鮗,�2�j[�,gcER柇嫕4E�)�� )��?D8E�"芿恖F8x傋疓� 蟕|��:;崅E捠`粳$A��艬MfT�忳o轆S�1A�6辠孆Z埚]栰7z[芿歮'熸鳎W筅畇K0I屨縂>醏钶�0b��3t0"QD兺圫�;胙煟?j;PM鑊О2EX0c)馧�B (A��!孻剬!X>耜K忌讂w{綛�) +擊�4忿a;f�On鑮肁侰&�蝚鉫Ml鐭涨�-o� +W{o秅褂"�6�.;彊y踬柘*苢懫�~S箉c;祥zm[IJ沶;Н鳟薗_歽泟FlX洦~}銳!‐P/脬愰o智秶濟X卯亚霖躐傞蹚袵衩鬛]仪嘾搟�$樱葱媵蚍l撉卌-�'滎�)莪Tn� .I僺]哱]'uMt吭炸!�#觙廭-k~夎斎)萚煷3瓭JGD戠54UR_+B╀挒墟E�-+隂鵍,际眎T*d粁幃秃樗 +�R抅P�&猒�(躢耒�)牳逬] 鑃�m痂�'p關�f\﹤拗竧N�#P�:Bp�?馠餝胹P�_焓䓖CGh�3╪戌�> endobj +1715 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 717.9621 139.4144 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1717 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 473.5762 139.4144 496.5449] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +1714 0 obj << +/D [1712 0 R /XYZ 90 757.9346 null] +>> endobj +1683 0 obj << +/D [1712 0 R /XYZ 231.1394 695.4109 null] +>> endobj +1716 0 obj << +/D [1712 0 R /XYZ 90 678.4366 null] +>> endobj +1677 0 obj << +/D [1712 0 R /XYZ 231.1394 451.025 null] +>> endobj +1718 0 obj << +/D [1712 0 R /XYZ 90 434.0507 null] +>> endobj +1676 0 obj << +/D [1712 0 R /XYZ 351.1686 188.4371 null] +>> endobj +1719 0 obj << +/D [1712 0 R /XYZ 90 171.4629 null] +>> endobj +1711 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1722 0 obj << +/Length 1393 +/Filter /FlateDecode +>> +stream +x诘X蹘�6}鱓[牥涘]增璏$@�45袊$Xhmy-詵\I蝔暨;忌篩靓)俙y9�3嚽"�$坧�E屗`禑噜哶M垱^傈� 鴈97�$暳rc,H�%4X�?L% +g *痿漨l岂趔屶iR�)t网鏄�*钑袓XNE4|3y宫鶟{侷①�瀨鴦�5根f�嫈�"�'�2哔M䴓黕郾f列.9�*聜卬鑽5P=�B`(�!ぇ溉枃槝竝*J冶9霍臸5[H導禛嫱齓��D�傒^� 點{夎溔9橲�$躜q蒃梱��6ǔ酠�氱喾,%G滖p0妘\毃~篓a汤V(S戄�;�q飺 +R涠薕0E!衼�#5猴墵 OQH�8Y债瑩碴馭咮善黠A鹓MV狿�9k�.穳��>外阾M蚵6*�葬z欼1EgBE�"奃镁z寓  憞ig薭眨%R*h=狾蹓GJM[迁虖攀�7E痉mR噶*�"RuR�X]J�j$�)EX2腼�/颃癒桅3ユ�$qh�9=R<俯鳝搕'4�!#;|讘�;┘p駄晪纵肙tJ豐t p熾!�*�微窰銂縬>薷�%蓓j)[舏棶摑�酔D码咅贄噏�(嬩覦�y樴爘潥窷N慉F碆蠐a璓�.嫂妖譺�A9誦��1临w[(�;蘟糜p^T1*郰栣Q談�拭.壀q赯T鮤嘐U媣y&婫b�#h癒虏 媮噄g粽�'K�啙岓zT煼'F╞餐�|�81豨�w�8笷惈ちj信諚R庺兮嘧|习�:鰙虖疟诙b7�淽XD"u2 空峚=�0瑖�檍酆s箔�伢襨鯲`樺Eb鼻R�;C�LZ�淘帧镉�;祶+;鍸y蕯=辈籜搉 �!�+赨骸�>�j泽u脮⑨蹮�9�.姿俟彘F/�]┭"䦷榹b喚�銙秇E歎嗞R裆翸骤喩-�(��9购2跸�7/�滉P∶pu��?}3燉,!�6U厔黚�誷Nh'_%YR臅�唁 遊選昭u埆}逺vK表Q尌��≦%澰﨓�"�螋壕A豍|�姂鹱endstream +endobj +1721 0 obj << +/Type /Page +/Contents 1722 0 R +/Resources 1720 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1724 0 R ] +>> endobj +1724 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 606.9556 135.0008 629.9244] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +1723 0 obj << +/D [1721 0 R /XYZ 90 757.9346 null] +>> endobj +1679 0 obj << +/D [1721 0 R /XYZ 357.2656 564.4285 null] +>> endobj +1725 0 obj << +/D [1721 0 R /XYZ 90 546.998 null] +>> endobj +1678 0 obj << +/D [1721 0 R /XYZ 226.1581 281.678 null] +>> endobj +1726 0 obj << +/D [1721 0 R /XYZ 90 264.2476 null] +>> endobj +1720 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1729 0 obj << +/Length 1266 +/Filter /FlateDecode +>> +stream +x讠X踤�8}鱓鑁".�蟾洣�痕m�"吮[ruI毧摺D蕱([ AJ螠9s崛拿餑<吔P凥1.絛坷�#件� f;�T圜这穂�<厰ひ[mZ � A 鮒雘灸藔F8膥笞gX +�劵脓b蒽襫}S$�>碗肝妡鵦u辐瓣�X侷㘎|麃�5阑[`腡$�x缊(E烬係fv嫰�{=軫{`�;N脸�0/`ED馡〩 L�垹"�4態承 C�>o嬴�$貜藊熤iY]忼$槩怮隄 酱�朑$�($L礿(駔]冃N& [� +丞a爲+羾哤[蝻硬�VZU� 5� D麻鯞翂�%B寯鍍炵銙�##玤�8壁換懐呱厔$G3d湂]`�永鰍蹁廿 +1 N]秌�#>8�揅�=!yZk P欶6�P|Z�&�攇m氰3纱藃q�-娡1閘蟟�趘牤�I驶:龗n�2蛽訢溽�?q棁┛c佱煷幺�')|U亀�%LD!bK�掐m�'G腘�uPD9b\懀"鋿-奥凴瀫婺t佈[澹戼2憫N�=陶獳4D拮`侶,F乒aユ 啢�+d`x[ye�(�!倓'漤,X�90庌�,P,��z)尊�2)n飷 像n"Q厼�)�2:1嵭i傻瓓�!f�恴K"45Dd饜欟�&坞�6E�)媫汾秨?贾Θ妑潠莶.鶵~�_Q>MK 酧栣j汚� 齅_5�=斮>.齿珇攡S閦m艐瞇$C撞{�激.�,~廿諨霒^un閁T瘜[趯vK��5%莺B黐m0Ym��jf鄛U碚;�]WUf�:NTSL'翦%">S+絴pz續戤^磴煫%夵j涙僴 +<�3獩^jc!0煦�4f纋瘽{誑vpK#钮�<䴘J��墚 +�>鼕�H鸽�7�%覾��3m娃�僭竭媔埄蚊f皬硘W囙%躿(q驁JDE8肶/5烧�!]9F!當⿷腕筴溺審礿�0荤Jv}囷淗88凭[�9髱段鱪皝裵l=b莪鬡G駫>$� �︾=�/鏽蠯蜆w礽骹 +勷%T 「x�H^撗 膯儬i脈'{髫榣煪fo嗾蒄戠iRO靌嚦嚉踽|僈靍�郫�>d鲝閜ZZ肔烂砂a� 態鯳��6鳹朒�,陚工=M媲4O烁禱谪~矉;荸驚Lt 睛鞖�(埔�,毆绿%�/6P7暖浊赠鼳6乓^o鏥endstream +endobj +1728 0 obj << +/Type /Page +/Contents 1729 0 R +/Resources 1727 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1674 0 R +/Annots [ 1733 0 R 1734 0 R 1735 0 R 1736 0 R 1737 0 R 1738 0 R ] +>> endobj +1733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 582.7574 152.1568 593.3475] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1734 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7156 582.7574 207.5088 593.3475] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1735 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [294.093 528.4053 335.7466 539.3093] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +1736 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 492.7935 227.254 515.7623] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1737 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.2428 492.7935 262.8502 515.7623] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +1738 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.7156 492.7935 330.3564 515.7623] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +1730 0 obj << +/D [1728 0 R /XYZ 90 757.9346 null] +>> endobj +1731 0 obj << +/D [1728 0 R /XYZ 90 627.2963 null] +>> endobj +1618 0 obj << +/D [1728 0 R /XYZ 90 602.9681 null] +>> endobj +1732 0 obj << +/D [1728 0 R /XYZ 90 602.9681 null] +>> endobj +1727 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1741 0 obj << +/Length 1212 +/Filter /FlateDecode +>> +stream +x谂W蹘�6}鱓柩V,�7夳Xlt�mj�賎!薢[�,箳紱鼄�"u砫籑[唌^�3噰3�!x?鄆�2 � 迮�鮲8鼅n谇y(瘕z褫L{歨艛穨i4( �笾蹚KE聲�$]襩昳瓷捠潽dk[i頕~6渡 +潋5��/�绣IJ砠( +V熤弸w�③佷 + �??Qo�;y\P聈(�7霵Z3锇尫漧耠鈼N彎h�!佅3傕kー萀0`(〡琫 Z势2瀿1搪�2g�!4k�=$U\η:-r我�1垩VM噃9詰齵IVL.遧g��(稠W3>辢綇j犯L.韢�(o� "扉獷�3Kr� +.勵圃O}GAHB龄E� +�32T罜央1F�撶秬�掽狤At垘F頊)wn昝犛iMt� 詓=伹�(埆��丰 J╢p^+7啑煶$�T&瞭p#!伭@�C檳,衻F('� �イ^�(昲Pbd袬嘵'fP蜺戤捋v褚��>"螁諹�,N醍皗y�$譪\S,h<畱:曩鑟咟≡4飫x橯x�聻锘/厌堳妖魱a$鄕C_3�-鈜f腒(.�嶬*'讐圡Mla鷩(统�8鷒i谨rH鈙鄬)耫p兂N�ぉ6槲暤鵹b]`� 蜍鶨j:鵞8&z疪�6�4総nI軥5說P賦鱕�*a扝-l豸�K)� +龕`翴蚋}bl决) +򿤨�铤筩Y腎U澩樏鞤猚栔先*f鉜幪紾睖领儦"o牑鶪O真]�鄉� + d�/Q聀�>蓳2猍JZ�j徠僋�听觷骑�=F﹔�0�嘜1+M铇飮馑纵磾1镨~�曕蕈endstream +endobj +1740 0 obj << +/Type /Page +/Contents 1741 0 R +/Resources 1739 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 1745 0 R 1746 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R ] +>> endobj +1745 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 615.6894 138.5977 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1746 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 615.6894 170.976 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00149_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +1750 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 531.3846 152.1568 542.2638] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1751 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.6549 531.3846 186.2086 542.2638] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +1752 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 394.5058 227.254 417.4746] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +1753 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 394.5058 380.3883 417.4746] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +1742 0 obj << +/D [1740 0 R /XYZ 90 757.9346 null] +>> endobj +654 0 obj << +/D [1740 0 R /XYZ 90 739.9346 null] +>> endobj +110 0 obj << +/D [1740 0 R /XYZ 90 739.9346 null] +>> endobj +1743 0 obj << +/D [1740 0 R /XYZ 90 719.4886 null] +>> endobj +1744 0 obj << +/D [1740 0 R /XYZ 90 634.6393 null] +>> endobj +1747 0 obj << +/D [1740 0 R /XYZ 90 578.3693 null] +>> endobj +1748 0 obj << +/D [1740 0 R /XYZ 90 551.8843 null] +>> endobj +1749 0 obj << +/D [1740 0 R /XYZ 90 551.8843 null] +>> endobj +1739 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1758 0 obj << +/Length 2127 +/Filter /FlateDecode +>> +stream +x诃ZK忋6钧W�(1莽箄2Iv�3圬K拑,砿蓱漕睐�)>-緿n� �*珚_獺�)�檉x殘e屒觔3劣t�>!鲶鞠�??M~鼚f� e1崸O蠚CL悹凬煐F1澩i��>?BS鄨 l_涘畳�)vY鱵_6蹯铵/揰燑糣,羈齡蜱選�窬L0bY*饌�2:軱8e睽汓w驀鏲>�绱劃W弍=蚤GA菽獓操渀專У漳膣羲銖鮵瘼�2�蕜悬罓�藰銍堝鳬鰕Y丧5愳姸�:�60籦B曝坋d�"*;筇k鯇抄滢晰[髄灲�^pho郐o姦2没壌&哬菟z�淑�5峮揥昳E�; 杅夨潧瞙亄莘MU啥CJ5� IPL9�+K痙�綎K贆-2h詹怾椃餅RKm纱h$nk贈AE迟礻残而,z+⊥豌UM) c靦S奻)叨` ;4uj鑵&Z峯_AiN+[� +濋櫅嘫h樺儐機岛蚧m晇恀踞é]手6熗37廹9c咯綌皥U硏飁gz桃�q族�;P貈07垒O/隴絣さ鑲W0巰敌渵7栉�$噫<�珕茩嘚Cp�8K鶠彋�/骜\�(*伉尀*4/膿 邱鸭S垎�33坉4;瀁}jW栨跴G掅劘v祌嬛'"垯岏q�9C$!$邂�{芌� 闬�AP燸H仹)審�B#N瞭晟攼�懝A@��潁0�(巀虚*├c�6畟諃P� .飽偉坒剠枞�0C帏���x0�5椺劘C`q"螾�1�<�(&L軍@��4 !袘)!煯榶�1鰫藀睒eW�;狏>r鎥拏a壻\�#%糁℅S嶳枈�<賦�+�椃UЬl�lqPJ;vY>螲=KB誥橆嘻艹阡鼸�!J喴$�?�1啣fq, �名Q:.潎镻���!�曺'F>裳�7鬝,�1L权瀞uP�;�蘚@y%H處炖-桩矩�6诟獨E^欥搿m鷘迯铢蝑鲼}]$宍�*閲 �* _翈,屶名<.滸餚:郡P!Buh^旧v钛軬#��#誧N`窂�槕$凱G�/n睱玞 拶溼#晙啾漲筴E耩硌|*� K�1W械乀繢b桴慩}鵯T诙K濘+毆琠LWe�-碓噧堠>8=TIZ战?r�Z鎲E唣=�巭攻�'〡劙┤HB! %虛漝瑞n' H玷�8:朔蚽缔顉_�v�+@嘱竹蠸R攔艷��P渠馩旪D韄]@.硣)汜b\9舂��鸍烖F鼸艍6耙縘�4endstream +endobj +1757 0 obj << +/Type /Page +/Contents 1758 0 R +/Resources 1756 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 1763 0 R 1764 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R 1774 0 R ] +>> endobj +1763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 574.0416 151.3297 584.9456] +/Subtype /Link +/A << /S /GoTo /D (a00136) >> +>> endobj +1764 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 535.1382 150.7717 546.0421] +/Subtype /Link +/A << /S /GoTo /D (a00135) >> +>> endobj +1766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 452.2677 224.9331 463.1716] +/Subtype /Link +/A << /S /GoTo /D (a00144) >> +>> endobj +1767 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 415.4215 222.1728 424.2682] +/Subtype /Link +/A << /S /GoTo /D (a00145) >> +>> endobj +1768 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 376.5181 223.4387 385.3647] +/Subtype /Link +/A << /S /GoTo /D (a00146) >> +>> endobj +1769 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 335.5574 216.0761 346.4613] +/Subtype /Link +/A << /S /GoTo /D (a00147) >> +>> endobj +1770 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 298.7112 214.9707 307.5579] +/Subtype /Link +/A << /S /GoTo /D (a00148) >> +>> endobj +1771 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 259.8078 258.2974 268.6544] +/Subtype /Link +/A << /S /GoTo /D (a00149) >> +>> endobj +1772 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 220.9044 246.8006 229.751] +/Subtype /Link +/A << /S /GoTo /D (a00152) >> +>> endobj +1773 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 168.9847 249.8397 179.8887] +/Subtype /Link +/A << /S /GoTo /D (a00154) >> +>> endobj +1774 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 119.1224 254.5214 130.0263] +/Subtype /Link +/A << /S /GoTo /D (a00151) >> +>> endobj +1759 0 obj << +/D [1757 0 R /XYZ 90 757.9346 null] +>> endobj +1760 0 obj << +/D [1757 0 R /XYZ 90 739.9346 null] +>> endobj +114 0 obj << +/D [1757 0 R /XYZ 90 739.9346 null] +>> endobj +1761 0 obj << +/D [1757 0 R /XYZ 90 719.4775 null] +>> endobj +1762 0 obj << +/D [1757 0 R /XYZ 90 593.0161 null] +>> endobj +1765 0 obj << +/D [1757 0 R /XYZ 90 471.2422 null] +>> endobj +1756 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1780 0 obj << +/Length 2922 +/Filter /FlateDecode +>> +stream +x诃渙S�七�)T�7�s�f�螒�晒$wW� 睲��$桹��3鬶F輧+�*#校~z�;-鞪Lx�'&�8阖牬漒�'熉焈飰耖凁�糧靰鲀&撆千V0#厹,�俜l�H明焀�彸篑/G邕デ脲�?�妅o鳝汘秞硍踩芻^FYm�棍薿|r騵城�紮�;�9鶀OK晘7啕)琴<耵傊�≮�'寫ie豝焚俱鍅官匇駄齲?~跣�顦r�,l�ì鄸i艴s滆�珨f跭痧*i顦U敮衛嘀柧O[[9�!@R~�9>u�i診�挒省�sx践zyuw{[e�,矪[|来 �脉yg45婂槹2綣2霉蘺>�!O珶� 澚萼'Y蠹X}綗*篵u籢畂頽7s鱭髎Y��q鉜W�琭糏鳃俺樾穐鯿駼2顲;飆@k=称k�硨l@i@�75`酜4`檐褉DU茉�徸;歱搬脌桌蒺�&4�9U咭傦廮袀:磿遭-鑧穈<稁龑礰捬-b-堺�劸T �=-堢P臡-N炿圍 R禱�皫匳�/�?a穎�0蒪Ⅸ��愇摫7鷟麇鲇鏃un��7霙珖$Z螀�>-毛7皋fl瘅丑所b僻躇bv45c袊�s}幅)v�<�,<u� ��ゅ硨lyiy�7祙酜磡檐羊DU茉螂��献黪a讋rU㏕EU漶�8�}<�2埩羮3鐺�)渰噜9Tq湜w袘\1岬%� F诫乩慯癲M蔫嗑�籁��=t�`敛k遵,睺F诫槹η�,a���7脕�溌�濩7罽�?_.痆ld8遆�>l氈陞gsB"�i察隝�>軐'論xj綧ж| +鸢�$�3嫒�&oP风v��$~3腐~ s蹨缘銓婣飈m(@Z;巳諪焄涴M璢閦芤蔦噦I'短www襍iTqcqv8諀�枨泺鉷*勜_Ln�&� xY矈菺 +藙熬蘂锤浶K暑~� +0領Fs�w�7s嚲� �顇U苣溏鎲Y嬜f>獔\ゐ屺0敥�r璝(臂�0銲F#�r�7#嚲� �鋢U軇浏飂媧齡�殊E�*耛啣圴挨裖�(+翑慊�*P�QN2�2�(憔�2繇燶橑P朴ㄢ&淑go叨�*a韅�$��9a`A7o1患�忡�1拢�屫鲸i� L;鐱�竓跶冢穏髶氻�,觉I�;K.樼\温度嗐佸F霧 �$ab巰.顩馚�緟y`<�*n^幗:粯Z具8L蟀吺鄒�*"�8鬹檧j潔U8*8)誑襊�愇2�4犋L氿M� _歵i轆欻泈娉佑摚派qEZz平皒矈H@*哠)�l雽兰BF,(繦'Ms週鷙�.蘽H鉯Tq榕燧神冫z�sNz� YE鳮)櫞jB段薬�唒d▊宼捬�1G@魍ぁo槁紘4濬7�&'�唒|齐慣T"駦u庘E"�)Z透CF*(纮' s纐� 鷙/蘽�鉯Tq岙}褄又a�$a譫2^$S�7显Z01疠o虲9蒱葮#�岥f刃�ra�O '�0<�4|��>巏构b-GVy�08{敕恃狐J�%�Bh��&|砺棪]歸�&舀�&趏鐙t礰絞{&�7x)矈�!�秗h}�%|樠d覀寀捬�1G�魍o肼紘5濬7镔笏w圀[讇 +�,^叕"鞜�T^曵�N1'怚 +0蜪Fs�g�7s喚� �蝬U�灳溝R献.$辎8氯挢 磯��馄�,+nS�0 K嵡彵g?�o�;>稽昨嫠蛎楍讖wb�!i苘>哓附�+ %&0U凩�踁荕7槫挖JD �,讆+懎蔲a兰� 娖呜y雵P∶�|O睈2磸⑵�,b蹓q呒C邘澑0镔夞4鑻� 熍�6囶速鸦笾d駬f�&ID�"昤�ヵ秝,睤蹳�1O2�9�樸緳9繇`^橑0怯ㄢ頵繉.�$^�$"R�叼r�"璼鮜櫼粀蜱�埽垊峹=h郒c喍愌禸�筷�`m�$b柉W帆:}廆毫馷z餱*烃泺嫄鉕T逰均Mrn酋罷汖糉H_j �(擎珩�椽綣$~-Q�>��U遝ndstream +endobj +1779 0 obj << +/Type /Page +/Contents 1780 0 R +/Resources 1778 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1792 0 R 1794 0 R 1796 0 R 1798 0 R 1800 0 R 1802 0 R 1804 0 R 1806 0 R 1808 0 R 1810 0 R 1812 0 R 1814 0 R 1816 0 R 1818 0 R 1820 0 R 1822 0 R 1824 0 R 1826 0 R 1828 0 R 1830 0 R 1832 0 R 1834 0 R 1836 0 R 1838 0 R 1839 0 R 1840 0 R 1842 0 R 1844 0 R 1846 0 R ] +>> endobj +1783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 704.2225 177.6109 715.1264] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1784 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 665.5053 197.5362 676.4093] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1785 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 626.7882 175.9567 637.6921] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +1786 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 588.071 196.4301 598.975] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +1787 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 575.1882 204.1809 586.0921] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +1788 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 562.3053 199.1998 573.2093] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +1789 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 549.4225 193.1026 560.3264] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +1792 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 467.8426 214.6224 477.7703] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6bfa488f87f68a6f7f4a3efb9e45eaf8) >> +>> endobj +1794 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 454.9597 216.6746 464.8874] +/Subtype /Link +/A << /S /GoTo /D (a00150_g39ce739bd352d7e348e37395ce903e43) >> +>> endobj +1796 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 442.0769 206.9409 452.0045] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf848ce44c810492e7a35c2d23a429f45) >> +>> endobj +1798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 429.194 193.6609 439.1217] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf0ed78fd2be24d849cdd5af75e3b2674) >> +>> endobj +1800 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 416.3111 200.3059 426.2388] +/Subtype /Link +/A << /S /GoTo /D (a00150_g57e6dc1d58a36d0ed53a3dd29ccc5798) >> +>> endobj +1802 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 403.4283 201.9198 413.356] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga4c4310e54f18541b09e1e251fe7b22d) >> +>> endobj +1804 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 390.5454 229.0778 400.4731] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf84316f469ce0726985c0702db49a989) >> +>> endobj +1806 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 377.6626 220.769 387.5903] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2d3ba4b14d6d2f6576f9b547800b7945) >> +>> endobj +1808 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 364.7797 193.9898 374.7074] +/Subtype /Link +/A << /S /GoTo /D (a00150_gabc40c09f49d15acb1b1a7f02bb3a807) >> +>> endobj +1810 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 351.8969 199.7479 361.8246] +/Subtype /Link +/A << /S /GoTo /D (a00150_g041aea91aa6ef84dcc6cac3c51db9b2f) >> +>> endobj +1812 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 338.4114 243.3742 348.9417] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd605357e29affb0d3104294c90f09905) >> +>> endobj +1814 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 326.1312 252.8785 336.0588] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5c97ae587595b5444be80f5ecc1d3382) >> +>> endobj +1816 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 313.2483 224.6544 323.176] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf0ccbc3bb2a3ba1ebc255c7b3fcedd24) >> +>> endobj +1818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 300.3655 207.4989 310.2931] +/Subtype /Link +/A << /S /GoTo /D (a00150_g28eda870cff3d8e3cf2949e6f57a502b) >> +>> endobj +1820 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 287.4826 221.3369 297.4103] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga5e3c856b86725125d19fccc34cd9eb5) >> +>> endobj +1822 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 274.5998 218.5673 284.5274] +/Subtype /Link +/A << /S /GoTo /D (a00150_g8af482dec973db57d8b3bd3f69461488) >> +>> endobj +1824 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 261.7169 234.7964 271.6446] +/Subtype /Link +/A << /S /GoTo /D (a00150_gae59b70658f28ee6e998eaaab05e423f) >> +>> endobj +1826 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 248.834 224.5549 258.7617] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga533c394b1fa0030205534befa31c525) >> +>> endobj +1828 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 235.9512 224.5549 245.8789] +/Subtype /Link +/A << /S /GoTo /D (a00150_g160128ab5d2ea3cc497b91ee4eb4ef99) >> +>> endobj +1830 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 223.0683 211.9222 232.996] +/Subtype /Link +/A << /S /GoTo /D (a00150_g64d9affc680a445d708234e70450477b) >> +>> endobj +1832 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.1855 222.8911 220.1132] +/Subtype /Link +/A << /S /GoTo /D (a00150_gfff0ed43201bf1e2020de1a0d6cac070) >> +>> endobj +1834 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 197.3026 219.2748 207.2303] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd135fb0cfdfb2c212f0f51865a3640e4) >> +>> endobj +1836 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 184.4198 214.1439 194.3474] +/Subtype /Link +/A << /S /GoTo /D (a00150_g13dfcb4a5f920e108253ade527a66cc2) >> +>> endobj +1838 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 171.5369 211.7529 181.4646] +/Subtype /Link +/A << /S /GoTo /D (a00150_gde29ec025e6754afd8cc24c954a8dec8) >> +>> endobj +1839 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 158.6541 238.2734 168.5817] +/Subtype /Link +/A << /S /GoTo /D (a00150_ge0825474feee11b4e038bfe71757875f) >> +>> endobj +1840 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [289.3868 143.1256 318.6011 153.0309] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1842 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 119.9369 229.7753 129.8646] +/Subtype /Link +/A << /S /GoTo /D (a00150_g359951eecd80541c2101f628a9da9146) >> +>> endobj +1844 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 107.0541 223.6882 116.9817] +/Subtype /Link +/A << /S /GoTo /D (a00150_g517c770991459cc62dc009c0d3875c6a) >> +>> endobj +1846 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 94.1712 225.3421 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf72d7b9a737707dcfb2c41fec2b6792e) >> +>> endobj +1781 0 obj << +/D [1779 0 R /XYZ 90 757.9346 null] +>> endobj +1782 0 obj << +/D [1779 0 R /XYZ 90 723.1038 null] +>> endobj +1790 0 obj << +/D [1779 0 R /XYZ 90 485.7477 null] +>> endobj +1791 0 obj << +/D [1779 0 R /XYZ 90 485.7477 null] +>> endobj +1793 0 obj << +/D [1779 0 R /XYZ 90 471.8276 null] +>> endobj +1795 0 obj << +/D [1779 0 R /XYZ 90 458.9448 null] +>> endobj +1797 0 obj << +/D [1779 0 R /XYZ 90 446.0619 null] +>> endobj +1799 0 obj << +/D [1779 0 R /XYZ 90 433.1791 null] +>> endobj +1801 0 obj << +/D [1779 0 R /XYZ 90 420.2962 null] +>> endobj +1803 0 obj << +/D [1779 0 R /XYZ 90 407.4134 null] +>> endobj +1805 0 obj << +/D [1779 0 R /XYZ 90 394.5305 null] +>> endobj +1807 0 obj << +/D [1779 0 R /XYZ 90 381.6476 null] +>> endobj +1809 0 obj << +/D [1779 0 R /XYZ 90 368.7648 null] +>> endobj +1811 0 obj << +/D [1779 0 R /XYZ 90 355.8819 null] +>> endobj +1813 0 obj << +/D [1779 0 R /XYZ 90 342.3964 null] +>> endobj +1815 0 obj << +/D [1779 0 R /XYZ 90 330.1162 null] +>> endobj +1817 0 obj << +/D [1779 0 R /XYZ 90 317.2334 null] +>> endobj +1819 0 obj << +/D [1779 0 R /XYZ 90 304.3505 null] +>> endobj +1821 0 obj << +/D [1779 0 R /XYZ 90 291.4677 null] +>> endobj +1823 0 obj << +/D [1779 0 R /XYZ 90 278.5848 null] +>> endobj +1825 0 obj << +/D [1779 0 R /XYZ 90 265.702 null] +>> endobj +1827 0 obj << +/D [1779 0 R /XYZ 90 252.8191 null] +>> endobj +1829 0 obj << +/D [1779 0 R /XYZ 90 239.9362 null] +>> endobj +1831 0 obj << +/D [1779 0 R /XYZ 90 227.0534 null] +>> endobj +1833 0 obj << +/D [1779 0 R /XYZ 90 214.1705 null] +>> endobj +1835 0 obj << +/D [1779 0 R /XYZ 90 201.2877 null] +>> endobj +1837 0 obj << +/D [1779 0 R /XYZ 90 188.4048 null] +>> endobj +1841 0 obj << +/D [1779 0 R /XYZ 90 137.9854 null] +>> endobj +1843 0 obj << +/D [1779 0 R /XYZ 90 123.922 null] +>> endobj +1845 0 obj << +/D [1779 0 R /XYZ 90 111.0391 null] +>> endobj +1778 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1850 0 obj << +/Length 3655 +/Filter /FlateDecode +>> +stream +x诃\ko\�_盄乥呏 邚 _Y稌葨*��\ie礶W徳%w椳徨� E,﹞v喂s唖I.鲓��嬂�8敹嫬O{|�>削啮�'聃'鹈呸7蟙X媼泆+槕B..,"=w|鵻t5|)唿蝌篚闱真鳔煰?璶�=鵹�砼弡�厀+�(+�鲛煎嬰(锴=蜹餱襁�g"锅揣ナ|�;啕G壋ya龁公K/?憂s-菟楍b澻]�W/竐Zy饺〝俖�4�+<�.峑�p ]忱H�r晋卻y籮樀eN:Q3钷o!gPC�搯譍麣/O�?/O.�^炡�*�s栥�( \婽朓SK1~剭�`鷁fv喲nc尷n湻� y G莈4q崇G�/.�_5s蟿�螧A鬜pf鯏^�9煿b粱就蛔1椃(赿�x寬�閫脨y腵T�4j恩跤幙"0)u@P@8箶偣X秮�愛 �i/矢髼嗤W即�5鶂艅�&n6爂r�;!�4�/%g� +W笙b�<嫻憓�3:胔�1F`4蝃寙�FW�#F�2毟籪��2B桨x" +奝 �%_� 鄦W=e=�笚D湗+ +kbo��E喲E�1偄纘KQ@迊ⅷ菺�椦妮Ew�2�<瀳�"も �1`[E�, +#��E喲E�1偄纘KQ@迊ⅷ菺�椦�穭 �(癉�鞀b獱_柹v椱鱩迢 �來8o��豝憦貛薶�&1輻蠋歭 o#&h"EQ{蠈�j䲡�頧D\坯w]体 �佀8oq�竆憦笇薶鈌椣瀜9緫签:瀬將▋d*業⑺r蝒�"&劸��箿a此#p�-.C��+�梣M莒蛸鵈氩O�%側@FQ詑飔毿C觇矠s櫱倏v猴2`.g�2�\苰嬎恮厘妡膃\F7粅z�2殎澦8uqRG楃V杵;芃� 紟x淨づ菸a�4 Ii+�{q 莹佘镉V炅O崐h�捀� "竷b偒姎s玶鉻\繩腯漓�0赺�岓�!飥�鶊歉�&nv袤謅g密�(�:zl笜d�澼{16u\鬩体 �佀8oq�竆憦笇薶鈌�.庣� A�(�:V凈qY]Q蟑阥蝒�#契稲!s9胔�1F�2蝃\喖.W�#.�2毟馘撚嬎肳O蹪To妒釿((俕奌g�2寋舆�替 �佂8o��豛憦貙薶釨沖潨湺�#滪�-瀱�"TL� k暡憭� 鹻��鶞a聪#��->C��+�焣M\梵梭髒8墪瞥PP}螔� R倌� +嘻"�贉a赐#��-6C��+�泀M軌统{�*禭Dd!@j螌旬0穁至F�腼oBbt亼F;� 辧t臟]�M萮�&�,叔崃嫇顺糜泯��逑sn;) 瀻�"tHgdBNt梯У彨霸*簙鎤喲~c尷o湻� y菺e4q+扣�)� 瀭 "�%7�:3衫苤坴� )��Y渁磁#��-C��+�媞M躭�%谴幏a.=瀼�"勅($M-D�0g筿L(捱0�舔 �-�佸8o��X^憦X幩h庵栂9硸HBA祀#g茊歖荣…u� 7胼霕薣m2B:8贺j�byqt襆�滋*嶆%cpI奊�$ e�Uf灋�"t└3坪Z桺v�D:吉���U@喲�1� +纘K@迊 +ㄈG*椦妮U莱沲�/乡N$ +/ 瀶�"4ん┲)9眬浲i刼� Q茰&R$詗適 鮁9�[堩淵襮�(,飋諤V8F� +�-�y +�")\FwW8q�癞聱爨痱誒眽<=;lwp擭gP澠SSP�&'徻鸝覝�*�瘕齒@�/0襷攓g=翛xi雓�� M芷T犰i?稡嚅)(B椧楫!\璳nO估�3"`�?�y��恮��妡�\F7渗!.麞療5"琫渒Gd �(j霗0燍V扊�竰紌h?� �g囉愸敄&n因椝嚝/襁譿蛚訕笟qOFA�剢鱉o�:桖$\蛙c鍃《纺tG黭#闻蓈pa4OO洎崨篝瘆蓷�7s �$1h +姞o�%�7閘腭聱`脎�A泞^醴�!�Fw �t 湻t �;�%*驊.佀h�&蟴m� fb秷d艥X(m&〨跠贐�!�9驪饎�6.�&l\醮R"u洶奩铴u8�&捯徽畸h}没闩�(堶稸!/F���湻��;0^*驊駛薶怄YUo�螖�Q鋛其峳撥�F甏�FQ饎�6n0縙}陯飿持嵘(╒A=bb窑q覬7V [耨�)x"Qm\昶倻 僩(�&陴峌莑�5� ��蝃�h鵋@e4q走誽陧弈� 濰BFQ�>卫�=m抾糞� /輍& +炐移�囫鹤(済蔋�'Zup測4鼺⊙x疤閲髷馮灇窽.M$灔�"枸h脥"維蟒�>xk[�%:�$P乙#锧媭�#�0崥克w?翙=蜑�#刦!�覺笹荀孨G.呹D 樥F{�1硄掴6�盎"�椦耐��<燒Z�T2姠n�?eO+�揘N轉?K桫桙憢}�Y]痭頶 +$N莃!厏+� +�,攓W o.悐鱝s漨yD�3f�:6pJ�4旰� {賜斮舢8�.]2/(﨡坰h�&誩\-/M隹鑧鬃w�s螲P誟z螲P�3�5�瓔8鄣r!礚S〩g蔯~裬n�>r[骄xw)�柸蟅_铞昜锼霉謃��|躇鵱鹷~竁J遇 �+[ &璹胳璲!訋Y�KGp�kF�5k8ok悧k罄X�%L��5湟�鳻谜暠V蒣�5K�5�!0諴e珹�7\縊籪烑?�3尞A�� 蝃j騌5X1� .a昻ㄩ尌�M梁Y嬰儤諼Je镣褥�4��%nTA宛W硱XCi7檚陛榽冀J璿n�!t猈�/F@姳廊bDw臜疰b瑇KK鞠縙7躴6�0額9f<ア墰濥r鼯*蕹� 猟咾K$!�(z�>j掽8A潧5窝d<ーw�?7佑;b瘼W^Po:biD謸+珀蓰�2,芜銟妖�9� +=描BG宋*酑.sJ]P蔹軾9f�7u1y�Qび A +R^普蜮8国痫O漮瀍艥砍Z77H値檘rB媩樉艙 +绘e奒3ē�7餌堸懲呌;澇糠擒%箝椓<憼6n?A�0 2擰滨陛圛�>畁鐉H^n蓹 A彮� Y%Xp痤阏闱w踘?|佝rt夯]=l�f鵤u曁Z⑼B*m��逗�.�6?騐藳鳵�#氘鸕�>贜�=5�薙荢7(骸nq�弙� �4S� oa笐⒙2 + +[O+;m4鈱�-帛颕拎�!謎* +hUl抡圭簍聐䴖�綞纄YX�'u7氤跙荝蚏掤绔壅]^综!s洘君迩4��过煽曣[箎指滠n~毁梖鵼;挹噿�膑麫虔靠_5�"7B蚭�秪g奺ndstream +endobj +1849 0 obj << +/Type /Page +/Contents 1850 0 R +/Resources 1848 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 1853 0 R 1855 0 R 1857 0 R 1859 0 R 1861 0 R 1863 0 R 1865 0 R 1867 0 R 1869 0 R 1871 0 R 1873 0 R 1875 0 R 1877 0 R 1879 0 R 1881 0 R 1883 0 R 1885 0 R 1887 0 R 1889 0 R 1891 0 R 1893 0 R 1895 0 R 1897 0 R 1899 0 R 1901 0 R 1903 0 R 1905 0 R 1907 0 R 1908 0 R 1909 0 R 1911 0 R 1912 0 R 1914 0 R 1915 0 R 1916 0 R 1918 0 R 1919 0 R 1920 0 R 1922 0 R 1924 0 R 1927 0 R 1928 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R ] +>> endobj +1853 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 727.7951 234.7566 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00150_gad0321f4c570f9983c6de81ece3ddc20) >> +>> endobj +1855 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 714.8027 209.1527 724.7304] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6bc12c6c7b56f73ce5d57abfdcdc6eb5) >> +>> endobj +1857 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 701.8102 220.2212 711.7379] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb948296aea6b6b3aa1f156799c4d479c) >> +>> endobj +1859 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 688.8178 218.5673 698.7454] +/Subtype /Link +/A << /S /GoTo /D (a00150_g17d111686f98e4c09db73a770ac3f1a4) >> +>> endobj +1861 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 675.2227 229.0778 685.753] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6f2b90c597ec23f39ec716ccec11233c) >> +>> endobj +1863 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 662.2302 227.424 672.7605] +/Subtype /Link +/A << /S /GoTo /D (a00150_g15f2617f7dc1713f9d10282125c6027b) >> +>> endobj +1865 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 649.8404 227.424 659.7681] +/Subtype /Link +/A << /S /GoTo /D (a00150_gee37386b2ab828787c05227eb109def7) >> +>> endobj +1867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 636.848 187.0257 646.7756] +/Subtype /Link +/A << /S /GoTo /D (a00150_g88e60aa2cf23e1c65d630701db08c743) >> +>> endobj +1869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 623.8555 190.9012 633.7832] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6020613f5062417d9811cfa837215c83) >> +>> endobj +1871 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 610.8631 189.2474 620.7907] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5ca559def464ef20d8b1f7d32f2f160d) >> +>> endobj +1873 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 597.8706 189.2474 607.7983] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1320fd0006a2f70138bc2d0018dda829) >> +>> endobj +1875 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 584.8781 191.6086 594.8058] +/Subtype /Link +/A << /S /GoTo /D (a00150_g44b3b1ab31a403ba28ec135adfcbefef) >> +>> endobj +1877 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 571.8857 192.007 581.8134] +/Subtype /Link +/A << /S /GoTo /D (a00150_gc84f499cba8a02fc0e306c10b2acabf0) >> +>> endobj +1879 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 558.8933 189.7953 568.8209] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1425d4a0c2760adb653a04c0fb137a8d) >> +>> endobj +1881 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 545.9008 215.2498 555.8285] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1215163245304bad20d6c5608ad75ab7) >> +>> endobj +1883 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 532.9083 221.8948 542.836] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9f1822e1d231235edacad691f3cb7bbb) >> +>> endobj +1885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 519.9159 214.7117 529.8436] +/Subtype /Link +/A << /S /GoTo /D (a00150_g691688604655ea8943d15f14c60027d8) >> +>> endobj +1887 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 506.9234 239.0603 516.8511] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12f3bf821224b8e7b48a57ed3cea15cf) >> +>> endobj +1889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 493.931 239.7177 503.8587] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5c5b1834e497f53ad0ef947bbe9777fa) >> +>> endobj +1891 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 480.9385 204.1812 490.8662] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd58231410d58e34b455328b888a9e73c) >> +>> endobj +1893 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 467.9461 244.6991 477.8738] +/Subtype /Link +/A << /S /GoTo /D (a00150_g207d17b633cd095120a74bc1f2257b17) >> +>> endobj +1895 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 454.9536 209.1625 464.8813] +/Subtype /Link +/A << /S /GoTo /D (a00150_g4cc3e223b63f27b546d62e9a258dba5a) >> +>> endobj +1897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 441.9612 305.6302 451.8889] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1cea57e3ea526f210b1068e6dcf7b4f4) >> +>> endobj +1899 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 428.9687 321.0623 438.8964] +/Subtype /Link +/A << /S /GoTo /D (a00150_g62c03e0a308cc23929a80fe8d8f9dc1e) >> +>> endobj +1901 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 415.3736 218.1788 425.904] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1d3211dbbdfb22d6a47b60dddcf945e8) >> +>> endobj +1903 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 402.9838 341.9936 412.9115] +/Subtype /Link +/A << /S /GoTo /D (a00150_g42288d5c3cf4b10becefec657f441e54) >> +>> endobj +1905 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 389.9914 341.0573 399.9191] +/Subtype /Link +/A << /S /GoTo /D (a00150_g8387881de3a8bfd3c0d57b9d04ac9b7e) >> +>> endobj +1907 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 376.0227 167.0009 386.9266] +/Subtype /Link +/A << /S /GoTo /D (a00150_g24f52ac52d6e714cb04a5aa01be3bdd0) >> +>> endobj +1908 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.7613 376.0227 256.6538 386.9266] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +1909 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [273.2016 376.0227 305.9885 386.9266] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1911 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 363.0302 172.5401 373.9342] +/Subtype /Link +/A << /S /GoTo /D (a00150_g96544dedc1cdc71ad2ad54bf1d5e5433) >> +>> endobj +1912 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.3005 363.0302 262.193 373.9342] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +1914 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 350.0378 191.3593 360.9417] +/Subtype /Link +/A << /S /GoTo /D (a00150_g4309376690872fa4beb4f025f5cc199b) >> +>> endobj +1915 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [223.1197 350.0378 288.763 360.9417] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +1916 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [305.3108 350.0378 338.0977 360.9417] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1918 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 337.0453 186.9261 347.9492] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb9435261753469accec0c9bf8a5a2686) >> +>> endobj +1919 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [218.6865 337.0453 279.3487 347.9492] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +1920 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [295.8965 337.0453 328.6835 347.9492] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +1922 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 324.4265 191.6285 334.9568] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9c0814ed491fa452ec97910c0728d410) >> +>> endobj +1924 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 311.434 189.2275 321.9643] +/Subtype /Link +/A << /S /GoTo /D (a00150_g013c3a06a8b58589a77f4a3442f89c2a) >> +>> endobj +1927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 254.0565 170.966 264.9604] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1928 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4642 254.0565 229.3566 264.9604] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20ceef9d0868d391c2f33041b02cb1f1) >> +>> endobj +1930 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 215.1201 170.966 226.0241] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1931 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4642 215.1201 229.3566 226.0241] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ebb4dac683163840eab9c6c41ad61f7) >> +>> endobj +1932 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 202.1277 204.1712 213.0316] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20ceef9d0868d391c2f33041b02cb1f1) >> +>> endobj +1933 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.6693 202.1277 257.5805 213.0316] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1936 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 145.1237 183.4989 156.0277] +/Subtype /Link +/A << /S /GoTo /D (a00150_g266263ac78a1361a2b1d15741d3b0675) >> +>> endobj +1937 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.3145 145.1237 207.0205 156.0277] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1938 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 132.1313 138.5977 143.0352] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1939 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 132.1313 189.7953 143.0352] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +1940 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 132.1313 218.2983 143.0352] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1941 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 132.1313 266.5273 143.0352] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1942 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 93.195 138.5977 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1943 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 93.195 197.5461 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +1851 0 obj << +/D [1849 0 R /XYZ 90 757.9346 null] +>> endobj +1852 0 obj << +/D [1849 0 R /XYZ 90 739.9346 null] +>> endobj +1854 0 obj << +/D [1849 0 R /XYZ 90 731.7802 null] +>> endobj +1856 0 obj << +/D [1849 0 R /XYZ 90 718.7877 null] +>> endobj +1858 0 obj << +/D [1849 0 R /XYZ 90 705.7953 null] +>> endobj +1860 0 obj << +/D [1849 0 R /XYZ 90 692.8028 null] +>> endobj +1862 0 obj << +/D [1849 0 R /XYZ 90 679.2077 null] +>> endobj +1864 0 obj << +/D [1849 0 R /XYZ 90 666.2153 null] +>> endobj +1866 0 obj << +/D [1849 0 R /XYZ 90 653.8255 null] +>> endobj +1868 0 obj << +/D [1849 0 R /XYZ 90 640.833 null] +>> endobj +1870 0 obj << +/D [1849 0 R /XYZ 90 627.8406 null] +>> endobj +1872 0 obj << +/D [1849 0 R /XYZ 90 614.8481 null] +>> endobj +1874 0 obj << +/D [1849 0 R /XYZ 90 601.8557 null] +>> endobj +1876 0 obj << +/D [1849 0 R /XYZ 90 588.8632 null] +>> endobj +1878 0 obj << +/D [1849 0 R /XYZ 90 575.8708 null] +>> endobj +1880 0 obj << +/D [1849 0 R /XYZ 90 562.8783 null] +>> endobj +1882 0 obj << +/D [1849 0 R /XYZ 90 549.8858 null] +>> endobj +1884 0 obj << +/D [1849 0 R /XYZ 90 536.8934 null] +>> endobj +1886 0 obj << +/D [1849 0 R /XYZ 90 523.901 null] +>> endobj +1888 0 obj << +/D [1849 0 R /XYZ 90 510.9085 null] +>> endobj +1890 0 obj << +/D [1849 0 R /XYZ 90 497.916 null] +>> endobj +1892 0 obj << +/D [1849 0 R /XYZ 90 484.9236 null] +>> endobj +1894 0 obj << +/D [1849 0 R /XYZ 90 471.9311 null] +>> endobj +1896 0 obj << +/D [1849 0 R /XYZ 90 458.9387 null] +>> endobj +1898 0 obj << +/D [1849 0 R /XYZ 90 445.9462 null] +>> endobj +1900 0 obj << +/D [1849 0 R /XYZ 90 432.9538 null] +>> endobj +1902 0 obj << +/D [1849 0 R /XYZ 90 419.3587 null] +>> endobj +1904 0 obj << +/D [1849 0 R /XYZ 90 406.9689 null] +>> endobj +1906 0 obj << +/D [1849 0 R /XYZ 90 393.9764 null] +>> endobj +1910 0 obj << +/D [1849 0 R /XYZ 90 380.0077 null] +>> endobj +1913 0 obj << +/D [1849 0 R /XYZ 90 367.0153 null] +>> endobj +1917 0 obj << +/D [1849 0 R /XYZ 90 354.0228 null] +>> endobj +1921 0 obj << +/D [1849 0 R /XYZ 90 341.0304 null] +>> endobj +1923 0 obj << +/D [1849 0 R /XYZ 90 328.4115 null] +>> endobj +1925 0 obj << +/D [1849 0 R /XYZ 90 270.7639 null] +>> endobj +1926 0 obj << +/D [1849 0 R /XYZ 90 270.7639 null] +>> endobj +1929 0 obj << +/D [1849 0 R /XYZ 90 234.2545 null] +>> endobj +1519 0 obj << +/D [1849 0 R /XYZ 90 219.1052 null] +>> endobj +1934 0 obj << +/D [1849 0 R /XYZ 90 164.1147 null] +>> endobj +1935 0 obj << +/D [1849 0 R /XYZ 90 164.1147 null] +>> endobj +1848 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1947 0 obj << +/Length 2723 +/Filter /FlateDecode +>> +stream +x谕[蹝�}忒�#Ye赂_�9qYUq攈�YアH見すC墒拽��樍 涊Tヴ�%y貆杏а笎�(點3GgF鈩猿蹒:�o�t煤彈瘗2鲦q7s膇甮穡 ��熭n尢5q�%Wt~鹮埝qU魑媁邍�氄b)ùz忭硭浛轋�/%4髇�竬髺�6里� %耏5� +/(a务夔蒃xq篾鏌袾� c脫T+靗蒑;�攣5刬�0|胏<漎�> >て資@鶢糥莜削婬BⅠq悔lO磉�S鹌z灵鸣s醤鹫悛E,漮涇蘮逧w|鬓#蟱�0F:屖0嗤+嚑�隳r│S唈卢MRF$)绵S)瑴E槒扬湯�|�+1K =J�,兦軂孢9}�>鶺蕽恓嵅 ��3语殞�0DS&嬼8憥湠:蜳z拽O筜�/3犐)匧糎sQN慫噶樱妦駃v豰鄌6昮�1" 玊Z�.H-翵Z冴骴亶夑蚱j抗~�:7玣5)5m)憣沢憵諴&堅" 昛j鹕RC�\廬Yj%z彇B/帔羿 �7揜娜r�劯琊旄f痨j叇81嗰J�%钂��$確歞�2瓿岰@樞Z槴Z@巠尐e ++I(�$W�S哂J x孍f7(錫垤�#D寖vM:$吂穼h�罱R2縑J∷� @溃 唙'+囦�颞8魣BsF�$<:R g槨4$鑂i八繡c慧餁蓐~黠U�;t毦;镒磍�>r瑀U猇9h�璔坖# Umj盃Z膐Pm�/撅 +�",2籄但虵餦弛7� A@a蜛跼K1fa冶蘓?�1欇损順ds孛彣�/�-榧蜛┦ GN咓; y楦$8饦肣痫2r$`劔 O�#嵘鞱�4抑 � (瘫矂*7葘脩镽QS�奪�.�k麧娱[酌溁>e政'�.嫉凫婂MiI4脰@吊M1Hb冒�`x}K 栮[賝琽季鮸自�2嬏n╫~Z蔢hhh6�(谭禗R5餧奂+釈(e暽湢K�`O煛讋茬殺檧F,匸槶H醼|�lj瑪�);焍朊~�1刓�M.#*鬏汫槖D�6圠7忯S,*�~鹭�3婚璺雦nUK檬�(�=鳠 +c�萚� 墧獾坸斄衝�0G�N#S%舉V-F 爯嘹獳[�)Pj%N-羺ん�hftm�"塚nw玻��埪 嵞里閤85�",�%B;[W凷t�G廿hT翌�z-舏!蘾禬>:帙a��p萦d�/�!抋K绞B-�$ +� )��暝鄵 5�.鄗旌郊馼m牳鵠�薳D妣>昑圓t茒礶衱g�),w:<佁n価v琳黭靖PP`� DB� H~%�)2V�%#陲&T!�1橾碻;@��)B-邈i0V癊M羻�&/r瘚V�#咽鞱l� c��萝�PSf鷑駔�1谏蕑潬K�:�<呑a{鷟煺j筲l氛皆GKi塭丌刀<� +z�Pxq練+�薔c袽湤炪奅`櫬衘,z軨惩司觖橚贁�@坰珘众鮾>号_睷謳=�1�8怺诟驙#�3xE邓��R抮;訣竿lc毊x鮬墚wP忶�;g蛱 +X�<膝 釥榉 +p3競#�,�V衟�/*饩� +#,2籄�*啓枃堿@a迧&咼>堼◥)�Ξ隈<� 砙8_饽0C�(�1� +謑f0tL温騰J�)� �k�:5� I h�5臯}祾哊芚%0I.槟鄵WL�(鼣]鵵F夀�/g �瓽颿s�?宮i M夀2�0勤淆l椦b燼駇�-l籾x斄蓄魮q䎬X`C(瘫�鋥像縭\�雭`膴蕑悹K� 篮��4 U侀霊�缯举5葆�,⒃y腐蟒[豮9\6_釻蔖Q鲔骐狒i k涢�繕�[炘顭榯Xa 0及$K紹賝,糤棂�,2蛔�(麘�(擷科,G �0逨�#�<�X �> endobj +1949 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 703.0355 138.5977 713.9394] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 703.0355 201.9695 713.9394] +/Subtype /Link +/A << /S /GoTo /D (a00150_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +1951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 664.4351 138.5977 675.3391] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 664.4351 204.7393 675.3391] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7023a34ba9e9d03b5fbedbcb32924453) >> +>> endobj +1953 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 625.8348 180.1912 636.7387] +/Subtype /Link +/A << /S /GoTo /D (a00150_g22f140b02c354dfebcc7ad481c3bcd68) >> +>> endobj +1954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.0068 625.8348 208.6941 636.7387] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1955 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 587.2344 177.9699 598.1383] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +1956 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7856 587.2344 201.4916 598.1383] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +1957 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.8776 587.2344 256.5649 598.1383] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1958 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 548.634 166.9111 559.538] +/Subtype /Link +/A << /S /GoTo /D (a00150_gc48ed5f0d27721ef62a3ed02a5ad8d2e) >> +>> endobj +1959 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 510.0337 152.9837 520.9376] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1960 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 510.0337 211.6433 520.9376] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9c24fba2cd8f7f62accb0a0d5bbe4dad) >> +>> endobj +1961 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.459 510.0337 268.3701 520.9376] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1962 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2043 510.0337 331.8917 520.9376] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 471.4333 172.9089 482.3372] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1964 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 471.4333 236.859 482.3372] +/Subtype /Link +/A << /S /GoTo /D (a00150_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +1965 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6746 471.4333 293.5858 482.3372] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +1966 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.42 471.4333 357.1073 482.3372] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1967 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 432.8329 185.1725 443.7369] +/Subtype /Link +/A << /S /GoTo /D (a00150_gaa585784b0914cac1d37f07f85457008) >> +>> endobj +1968 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.9881 432.8329 213.6754 443.7369] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 394.2326 175.2098 405.1365] +/Subtype /Link +/A << /S /GoTo /D (a00150_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +1970 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.0255 394.2326 203.7128 405.1365] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1971 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 356.0058 138.5977 366.5361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1972 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 356.0058 162.6772 366.5361] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +1973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4928 356.0058 191.1801 366.5361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +1974 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 317.0318 171.8826 327.9358] +/Subtype /Link +/A << /S /GoTo /D (a00150_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +1976 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 234.645 192.0768 245.5489] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +1977 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 196.0446 152.9837 206.9486] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1978 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 196.0446 200.0271 206.9486] +/Subtype /Link +/A << /S /GoTo /D (a00150_g788ffac72342f6172343d7f8099cbe1a) >> +>> endobj +1979 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 157.4443 152.9837 168.3482] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +1980 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4818 157.4443 196.4305 168.3482] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +1982 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 144.6198 172.9089 155.5237] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1983 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 144.6198 239.8777 155.5237] +/Subtype /Link +/A << /S /GoTo /D (a00150_g210f227119fc972e6222c9cb452e15a9) >> +>> endobj +1985 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 106.0194 172.9089 116.9234] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +1986 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.4071 106.0194 236.281 116.9234] +/Subtype /Link +/A << /S /GoTo /D (a00150_geb533744817cf6695d75293369c2248b) >> +>> endobj +1987 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 93.195 151.3294 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +1988 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.8276 93.195 185.3713 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ee50a40597e67fce96541ab56c3b712) >> +>> endobj +1948 0 obj << +/D [1946 0 R /XYZ 90 757.9346 null] +>> endobj +1975 0 obj << +/D [1946 0 R /XYZ 90 253.468 null] +>> endobj +1406 0 obj << +/D [1946 0 R /XYZ 90 176.4106 null] +>> endobj +1981 0 obj << +/D [1946 0 R /XYZ 90 161.4293 null] +>> endobj +1984 0 obj << +/D [1946 0 R /XYZ 90 124.9858 null] +>> endobj +1945 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2003 0 obj << +/Length 2504 +/Filter /FlateDecode +>> +stream +x诃[賻7}锆 a"汒饬<8�貥8澑�2禷�%u穈翟褣�溥绮奷�]J愝.U�"锕 � (仯� qB炅酤�n狯�,<皿q赈蒏��8王嚓A3�8銉郑1吩嗅%\*:d勚?璯季~緸铒绔載稾疐痎_几J�ZJh鎨恺G:�阶�g锗鳣 s��/$衩蜮砼/鶤魾哞$U� +;sS�'u缹�4{p结��,籍�7儑�8;�(o摣�0鑔挮.熌氕妨v窐nI�監脿U&N0餭�)� 冩啿G9E&'Ha� 咙>p茑- o拜�$�2袪~骘ln茫_s� �T�"粓k佰跲�;翂�镭q"5evB屁-矉�&慌莽攰身禖�0ⅴ�(杀 燴X綜蔶玢0筇~el捺偈谽\儩份鈇2沵z��%枙潞蘎["榬E�譨y穯0瀖枩CT�,A賭*kl 1�oL�+k�5x酒8护q晤8�枾k尦L穀畸肾sGbH蝄H墥P∈kI╠�$q剷%�<_b淽�8gw溎擞%芛&壽,g涋 f淧� �ú聤&%樎VV8k饇卶vI釡輖 +#,OWg�n�,'j別;Q瀍i�%�#�,q粥�沆捘9汇$FX�.1�2I躥Y +b勩)A H烁.)ae叧蟇g�钨�0买t卶朓�6薭%FH濺堿獫)Iae壋蠗g�$钨y阃ww燏刬C ey鞉I{&� .睂�>桚Ql�0Jr淧咁}咬姷岕飠]_艋赭鬟={�)"�6( 擿E聑<賮 +�"]kc霳^k谽\�8熙堄狺�/ㅀ.ZB暫鳗嫂V黠呓狐酏堁峄梠_�?C;:�8�莔9録d�)龙7�&So浵炧|W邒謆vx3邔c脙籔 +�梍cJ)I瑄N倳##k扒�U�7鵿揎镛F肱眺%烃�鶅J絋)倰a卝<_②i7冷醓6費:D#訰匸� +�L~荓#�<�?�#L蓲{�'z9厕Λ8]鍒籾�?�- c箻舟谜峧P照b章烅佘嬖 痊A�I臟踦 Vv憩A痰駘搆琮~%譶<频q獫vo�6 N罫盽獉*KH)1詴v��,a粥鵸g梽钨頇�+軉h�$J镓�-羅gEz驻�.绔n仰�(0-��*&臏薡覀潓皡`崥 +\oww貂坙訧Y鵗邃|%�$牄�*鵍jJ失Ut醅钩=�a95芟n'�9�-�軀塍r#圲奱魘a�0e9�&娀淫^倳�<_Q淽�4g嚠90v'�9 +�"顖�=屼耒{苐�.*aee�蟇g棓唾y跰撰nD(��2'T凤芁鏈D薢栭浹hhQQ株冁�;恝P{匃3l�0澐谮S�T.U�;n�>輔6#a嗴�.}�!<侎艇~笜併R翘W)f铝躋Z[垜+艸捺�1R`q v���c剶F\/胣⺳ +�-9Jq淧ノ�I`矣杓趕�7o迆熨�艬錡埧d蘝"/H彠� �.鵎��a鬘�鐴\摓熼/痘a劫m鹯焋庒�%T�L垾愊*楖汐稺/轡際C宏w-!�廾蕿c�Pe�9茌閹僐K~換蠛靏R 蘡�礖u:ocX篐*D�.}�鍱执韗x�^{徽邑拱腪&癖 F s蚰b,�#`1U(� 諼倂j罨缜譢陉疭s9H蔝閿#潦憪5x~(囔R,潇� 勫暴�YdqYn粇�芬�4� U 馈~狣 +n囋_F壎�鰸 �鵑剷}轳t吡�%呱佟玌屳色�粓k搀萤郵穯Y敢�,滳経掖L骬<銅W�#厦r4�8蘷.亲_v駆R'S蒙棸窛详珱酽荡||�v;�m?_M脫政�:畧錿楷+嫑k�噦蔠嚲i啁?D!怠J<6DXh贳Y�-鹣./煆�>95�9:|錾焩啨裴韸{漒U{澋q�嬯葵嚀舝r1惔�6貞P;j救%�-�$匈B�%�8�''v�-As� 婬;%GTA)避春oYV﹝�%"纝Y譢薁萣 唖zx?檔4絒/g醤p学 �⒘K�:p+�WA釜�P�:挩侤厵Wン褎�/魳вnA!齀景-"-u=�&7凑}�:c)M垖\0�6K�*Cy啩左d頨PX�.�)M@�)j箝缗�6D鄗开D�0腯3躩w⒀嶊纞耒濑a9诙︰�2k #C-�项<窝礶�桛�* 馎B卑狶(O`粃貈漬>PE�3痫FcM持倡:S呟唿c�� 国&|^累靇=il簞� 碃0鎼d�該P&枊�.櫌篿c�悟�堒懢�>1聕耢q@ +礃V烢U3/餕髵技鑠�钏酔Yé釭|5週v盫芶�/^麣��缨\<遽`淔僒A�2z绉b譥b聱笏m魅D�4J� +b┩endstream +endobj +2002 0 obj << +/Type /Page +/Contents 2003 0 R +/Resources 2001 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1754 0 R +/Annots [ 2006 0 R 2007 0 R 2009 0 R 2010 0 R 2012 0 R 2013 0 R 2015 0 R 2016 0 R 2017 0 R 2018 0 R 2019 0 R 2020 0 R 2021 0 R 2022 0 R 2024 0 R 2025 0 R 2026 0 R 2027 0 R 2028 0 R 2030 0 R 2031 0 R 2032 0 R 2034 0 R 2035 0 R 2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R 2041 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R 2047 0 R 2048 0 R 2050 0 R 2051 0 R 2054 0 R 2055 0 R ] +>> endobj +2006 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 702.117 133.6164 713.021] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2007 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 702.117 172.6397 713.021] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb4ef6b00924990e7a293f66715b6d1d1) >> +>> endobj +2009 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 688.3741 166.8215 699.278] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2010 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 688.3741 221.3367 699.278] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7d3673f52f5846b6961d23b150decd54) >> +>> endobj +2012 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 674.6312 166.8215 685.5351] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2013 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 674.6312 220.2307 685.5351] +/Subtype /Link +/A << /S /GoTo /D (a00150_g3237be0d9ec457de0177689ee23c0d5c) >> +>> endobj +2015 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 660.8883 166.8215 671.7922] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2016 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 660.8883 213.028 671.7922] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20df5c82f2a15a508c19e505b5d9de2b) >> +>> endobj +2017 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 647.1453 166.8215 658.0493] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2018 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 647.1453 221.3367 658.0493] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7d3673f52f5846b6961d23b150decd54) >> +>> endobj +2019 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 633.4024 166.8215 644.3063] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2020 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 633.4024 213.028 644.3063] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20df5c82f2a15a508c19e505b5d9de2b) >> +>> endobj +2021 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 619.6595 166.8215 630.5634] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2022 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 619.6595 220.2307 630.5634] +/Subtype /Link +/A << /S /GoTo /D (a00150_g3237be0d9ec457de0177689ee23c0d5c) >> +>> endobj +2024 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 605.9166 168.4754 616.8205] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +2025 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 605.9166 218.5572 616.8205] +/Subtype /Link +/A << /S /GoTo /D (a00150_g499bb98a0b4ae9a98553ede81317606d) >> +>> endobj +2026 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 592.1736 133.6164 603.0776] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2027 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 592.1736 166.9014 603.0776] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2028 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 551.7363 192.0768 562.6403] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +2030 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 511.2991 195.9522 522.203] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga05a3dde2048480fa3ab2a5961898d18) >> +>> endobj +2031 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 497.5561 138.5977 508.4601] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2032 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 497.5561 170.976 508.4601] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +2034 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 457.1189 138.5977 468.0228] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2035 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 457.1189 174.8513 468.0228] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5b5615dc240daed20949c0fded2b4679) >> +>> endobj +2036 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 443.3759 133.6164 454.2799] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2037 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 443.3759 172.6397 454.2799] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb4ef6b00924990e7a293f66715b6d1d1) >> +>> endobj +2038 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 429.633 152.9837 440.537] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2039 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 429.633 200.0271 440.537] +/Subtype /Link +/A << /S /GoTo /D (a00150_g788ffac72342f6172343d7f8099cbe1a) >> +>> endobj +2040 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 389.1957 152.9837 400.0997] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2041 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4818 389.1957 196.4305 400.0997] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +2043 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 375.4528 138.5977 386.3567] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2044 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 375.4528 200.3154 386.3567] +/Subtype /Link +/A << /S /GoTo /D (a00150_g236d5c7872f59c8fe7b701c7252b976e) >> +>> endobj +2045 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 361.7099 172.9089 372.6138] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +2046 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 361.7099 239.8777 372.6138] +/Subtype /Link +/A << /S /GoTo /D (a00150_g210f227119fc972e6222c9cb452e15a9) >> +>> endobj +2047 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 321.2726 172.9089 332.1765] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +2048 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.4071 321.2726 236.281 332.1765] +/Subtype /Link +/A << /S /GoTo /D (a00150_geb533744817cf6695d75293369c2248b) >> +>> endobj +2050 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 307.5297 133.6164 318.4336] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2051 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 307.5297 177.0532 318.4336] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2a0cf5d86c58fab216414ce59bf1fea1) >> +>> endobj +2054 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [266.5461 195.4567 299.333 206.3606] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2055 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [313.5331 177.8323 346.3201 188.7363] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2004 0 obj << +/D [2002 0 R /XYZ 90 757.9346 null] +>> endobj +2005 0 obj << +/D [2002 0 R /XYZ 90 722.0018 null] +>> endobj +2008 0 obj << +/D [2002 0 R /XYZ 90 706.1021 null] +>> endobj +2011 0 obj << +/D [2002 0 R /XYZ 90 692.3592 null] +>> endobj +2014 0 obj << +/D [2002 0 R /XYZ 90 678.6162 null] +>> endobj +2023 0 obj << +/D [2002 0 R /XYZ 90 623.6445 null] +>> endobj +2029 0 obj << +/D [2002 0 R /XYZ 90 531.1839 null] +>> endobj +2033 0 obj << +/D [2002 0 R /XYZ 90 477.0037 null] +>> endobj +2042 0 obj << +/D [2002 0 R /XYZ 90 393.1808 null] +>> endobj +2049 0 obj << +/D [2002 0 R /XYZ 90 325.2577 null] +>> endobj +2052 0 obj << +/D [2002 0 R /XYZ 90 267.6373 null] +>> endobj +1847 0 obj << +/D [2002 0 R /XYZ 90 240.7961 null] +>> endobj +2053 0 obj << +/D [2002 0 R /XYZ 90 240.7961 null] +>> endobj +2001 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2058 0 obj << +/Length 2056 +/Filter /FlateDecode +>> +stream +x谂Y[徾�~鳢餥m f9�$Jyk7M�砩I霏-ZYk �%G柌�摺x报�=懒>,E~� �>4�):� q/X'�]p桢簚颳呖g�:"Q纻觚S{B膅乐鼷?6壎;嬗妄1U冩讖z骖泖f|┿渌v签汙l���苞檗謡�<I鲭陱胯z忺}XQ拢衉?�%El}Zy寷弢鮵鮛{嶼h7宂�>~?�>3dx_a颎鴙斠望戡,詴迺IsJ�:nюB=I�(橤B醶侢蛠 慢(Z �饄�桲誂c>u甡窕顔嗙J&� >ㄟc�';媄"靤鴋醕]%�?㎡,剬�邾`餕� 螡��A�QC耯>W聦F凴迵路81`勄悁臓x@儀�庲�3V諅镄�<葫�揤�0磺L徔6qQg鯆鷝�藡F<驹趒薺烿jX楆懼蟍怟_蒲究!抂i� H�<痚忐槨�9埻搖鵨f蟄v姭,憻力工{ /+5H塬e臕��2僛闱<5$趉蓱簴)F錒_K拺讙S蔚菩淼0\梨饯�<�;欯亀鉖J�1�蹂暡某掼z� 5站滷>淖丱夝距*侩nP5搬跪幙躱!茳琪弦k峣v籴蹸4沓觭媄`俿A�.�8┐ 3攍飼伞#(碿y镆?)eEv 员遏<+碭! 櫀鼡 J斿&乪g掫琙q�)}JHR璟+漄拌窖�=�!9~�4'#�7潊�(窑Y晌摏汖�飭庱躘� M�9}L� 诱�!掸擇磪事堝u��餥k蕾﨡:揎9� 霶H�0*損弴K佪鄔� #亇pn孛懜�*�)�#梼~\7�!]鸷^8�0�:t褄�駝 脲�4鹮葇瓵o帖宲A絒舋� ��;�E�y`A~5$戽E亃 @竸�3嬄橨寣喣匸m菖Uポ璴��顷g佐堉�奞��1Mb塧S數膟. sPr蘪粽�T驋冪c�誔椕笑>�/+甏孬�沜XGJV镈蚞Y欜赉)鋶:��<�3釨-ヲ尶氪*鈂� L 闅殭牃y泒㏑橮T樽&玓�/q酔}f厒貪��*�2)s祹_F/H -� U1磳8l]巈搆篐k,爪跣 V攵捔骤梌4<鐀襂表地涞�3脚C^>*YR���$釋艚'膜 +h�6!沣m�砗ā訂mI塯耱羁梪鷙u)柦溋�s钇��X賡T硛p蒥话 YX7艓jh灝招�罡��? {襂㎞7ザ蛙y��5豔S腹鎔^艉�箞繙蟋~历廛季ゆ�/A 彋�^偤f^�,l�%萫a�%h伆y r 垲g簁`敱[ n吪/p4嵩c螈皑!a穖谰VD^O7� 廩喍�4Vs闀醖鐎鮱(]鸉 j鴴N�/D' +E� ?�襲蹎坆{r梡�阆i&棜DE $墚!O�<メ�2籤套�;�4冠o)C檦r塓� O�/e硭S�!卤n�慿曩,視.桬鷿�-�4憫钼汽N祼?娇迷5]FA&�7_FuQ觘�  {諻誕c 蘢�'鉟诼z铑���<+�倱╕@8�(钀�+ガ#魌:�尔盱t�&虢�>趀凖聇�$_�1繠壴呁 呃:崮<%炵� d jH�'x焫,]馋�3�◤n戲�椉u?�`,Xp�j邶繥<栋郝獩J^蠼9��葟6�嫒6�/桡Z爞Α Tvs伿㑳仾埝益T}Z眤竽�$) + d{鵲~僲Dq 6]3啦W洒晶.�?Z诺┌崉~3��8�鑋七2獘{J�椩HY鮺�B蒡齗薬栾���K$endstream +endobj +2057 0 obj << +/Type /Page +/Contents 2058 0 R +/Resources 2056 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2062 0 R 2063 0 R 2064 0 R 2066 0 R 2067 0 R 2069 0 R 2070 0 R 2071 0 R ] +>> endobj +2062 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 702.4242 152.1568 713.0144] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2063 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7156 702.4242 207.5088 713.0144] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2064 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [294.093 647.6032 335.7466 658.5071] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +2066 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.6856 560.3152 218.4975 571.2043] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2067 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [251.3742 560.3152 277.1673 571.2043] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2069 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 305.376 152.1568 316.2651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2070 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.5073 305.376 236.3005 316.2651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2071 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [262.8907 305.376 288.6839 316.2651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2059 0 obj << +/D [2057 0 R /XYZ 90 757.9346 null] +>> endobj +2060 0 obj << +/D [2057 0 R /XYZ 90 739.9346 null] +>> endobj +1996 0 obj << +/D [2057 0 R /XYZ 90 722.6349 null] +>> endobj +2061 0 obj << +/D [2057 0 R /XYZ 90 722.6349 null] +>> endobj +681 0 obj << +/D [2057 0 R /XYZ 486.51 597.8832 null] +>> endobj +2065 0 obj << +/D [2057 0 R /XYZ 90 578.8113 null] +>> endobj +1944 0 obj << +/D [2057 0 R /XYZ 224.7534 342.944 null] +>> endobj +2068 0 obj << +/D [2057 0 R /XYZ 90 323.8721 null] +>> endobj +1992 0 obj << +/D [2057 0 R /XYZ 167.4587 96.348 null] +>> endobj +2056 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2075 0 obj << +/Length 2271 +/Filter /FlateDecode +>> +stream +x诃YYo鉌~鳢杏B琋�$絆壡欛缿蕉f丒4I[腍ぢc溬_空臟敵恍邯汉簬檃鴳Y�g烉P栏淓� <{呩�腘/a~�绝醙�H*g�MA$(〕u\鷭%醣囩蹴4�凪銞<畐塱龋z焏UX而}鈌蒺礲 &夆暖裤Y 鈣纠�緲紸#t犊鄶刮钼殁 3�岉N鰹鞶鑪vw(@ 衽抈岀eU訯���<.齠璮奧 yl 牙�-黀�U%N�6Q� 鬐幇��6�0秳焚�()a�菫����P�>钸袄})慜剎Б�T�<�!屻b38/F@矻蠭m5爄u1�!JO� 謜鮁翲7�鏐Z苠@z 朞棍N%6餴%╦%9�=煛� +6�=p韍匇q";LyQ峢匟$�'琕篮��N�!L� 鍒窭惣nf暃oh>E蚕+擘秠iAu檉咕~XB鍴�鯧8qI9訑综�樹髼:嫶g優樆押Lb右laΜ垄2C※d蓚婛洐秝�:.�(I攤丵GX隟c�5 �9碭2伶種��.徛*)[驁F穄�!�"垡1傜i 軭S,8c]2*鏴R�燛Q嶠J�/ZmO�Zm瀗Vk�-Uv"蘠$Uf�>-�#錿�夤耯l3鲮櫩セ漣E!湗i嗘T hF@狞U�23`,娞�p3y� [;楅�篴愓�0磌0銊<$E毲i圅輲y敂`a椵�浇穖m�5譶遏�<�3k鰋)p螸#ae偰綯J鷏�*%Hs�諫Bb>搨"仑9遴�搌(竹�=溃B巗 i<唡餏]i�藖稳效@}幘@橒轑偰襝�(GZ禥C响� 袀� ╋k�+餣W�$SY擫砿P#|�;%谻W诶帡�垮餞蠉� 婄邤 wi�?5済庶4鹋|塌`<棪�v9怲嬁庵薲j.�47G蟢](?�-�8Q欥悛�弼a��?*蟯骄玩f諐腲欰艵盄泽@賆倿\聐:檘鴈{罰鞢褐鼠C叾)槒(a�'E锶�9�j島兪T^AWyOi)嚴眘a,h荁疁�uZ� 脻��啀[详v/荜鞠捖$折\y^|祤飼呬E蹹施v馨,C K*蔉趝z鋚�髢檧糇揼=V僟� 5:か旜i�兗_=濖X狽镴2V萀硁畀�)虮o�+/^CyU處�3諎�/埒題獖食蛟� 洠P飔閧/�:菬`蔨o�.鯝磤��愶滛�蔦_瘱 Ыxm鋪�瞆LtY G鍍觤P�"�&樆铨絨S>d袮��7蛹4獺@/夢/�%U歮�圞.坡dw档E_烲CcT)C跆膖Hk�4A鄉|逥�u矫"�'恔敡冔�An I�9^胝f�=(�&U郂#*柃'C劔 襢紇蓵{IQb�NK梁礙匩陮C�%曄楴诎 ]5皏怪岖姱砽-h鹊�(( 攖]�?阼,椣�-賚飱�;bk羮u谸U范Ⅴ朰郲�鞷0壨k覕ah�玝N娄栨uU刈誳鷤eM殽D7怦w}氉hE$卝溥狁腯�:酲觽Y5l濝冱訴罭]螌烍�=#赫�$Iz幖憉}僰�D_G祥=碳喁Y0X癇*児粆Z攥�p5譕撶*[�*噏罜L@ AU-釕s5S僟��<�铻|�$`桪b�★X�cp�揾彵N闸碜厕扣z椧挷Flq]T锫猳0蜦禝籔m撹萺�,罋�I5\辎黋U瘐栓u线]。�*蝑廂a)>F镾貽O啯N4橈OG�6阾'�;`聋C�$鱟 � � �/�9齯 徼檸aO膙 创嘮F��嚕鷓髶差/7彿� �<� 觫绑k��6w7珇0�.颪OM鵡擳O钵猡倲嘳Zm蚝:暂P��?敤Lq鬫Z vA�觃痎�諭Z梁=骐種 + 工�(j��,)T唀-s�糈苂uj�!詞�eW頡S尌嵂蕦颌浛彎f?�~M脖W�-�盂[坋ndstream +endobj +2074 0 obj << +/Type /Page +/Contents 2075 0 R +/Resources 2073 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2078 0 R 2079 0 R 2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2087 0 R ] +>> endobj +2078 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 726.9434 195.0552 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2079 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [257.8193 726.9434 315.7315 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2080 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [359.1284 726.9434 384.9216 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2081 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [317.5642 648.9799 374.8887 659.8838] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +2082 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.2809 603.5654 239.2097 614.4693] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2083 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [472.3426 591.6102 513.9963 602.5142] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +2084 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [117.5067 579.6551 147.7231 590.559] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +2087 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 227.4529 152.1568 238.332] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2076 0 obj << +/D [2074 0 R /XYZ 90 757.9346 null] +>> endobj +2077 0 obj << +/D [2074 0 R /XYZ 90 739.9346 null] +>> endobj +1991 0 obj << +/D [2074 0 R /XYZ 286.4315 370.591 null] +>> endobj +2085 0 obj << +/D [2074 0 R /XYZ 90 354.6099 null] +>> endobj +679 0 obj << +/D [2074 0 R /XYZ 224.9827 261.9201 null] +>> endobj +2086 0 obj << +/D [2074 0 R /XYZ 90 246.9153 null] +>> endobj +1995 0 obj << +/D [2074 0 R /XYZ 300.8374 96.348 null] +>> endobj +2073 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2090 0 obj << +/Length 2121 +/Filter /FlateDecode +>> +stream +x诃Y[忋�~席萩lT],[隗詛w杨钨蓎j媮�(3�&v闗gЭ⺁譞稉L裝0�,Q$ERI浱1鼞鼓髮gH�$漮�3<勯g�-痐}�'鴉=*�蓴蹀pH 鈹轩z麟"Er耿/諳�簑wn孥化i箜珏娽DT._繜}�倽^湧D孆c鲭飜��0bR瘗3<`Dい筱,√?f鞒�>v羖�:'�5纾饦呫!啿鍔`�. ^T盼�8=姦U� s<<�1�濬+絇?:奜=�<酹G>Vq萐胭戶� +"箩魜M袶(�=�&淓ROUm�LQ�3�5槄8"�#Z慏 施8膿4镊m,�9璱嬺�>稌q譁远� c獪?�6hh�&"洤)Es9iO搓S� /$聵�,A"%膆j折戂1Ed贺@5!穙*�3�葡軐⿰r L郅h`D錬邥鄱↗;瘱�/線漐穕導W岀台鞄U坼马+U鹟B浸l6/X�;燦疴 <'r戂�-圠�� U7A儺�X'蓌� 瑂馴�v笳v鷌�$b耨媒緹>pLPB蹭撼� %8NP�#%獄"蕞#蓂v <酷Z皒2-�┉舒��1cU喲戛n)�J郱G騯|�;Zj毤~Yq豀J�u逡雳�:�x�Q�@w}=晛�葳&?璢tc��烱猶A#�庺�.�� 裈Z褂.�]F�)� 薍�誄��>珿騣�.�?媢D鐝"R�0IFIW洟=#簨嘡z\�>杬(�',J閼E)頑l綽N鄪A锽�0縎:{攨臟�-┃t� /9巤熶1=≒牠�u蒔J撃剥猇��.��黝钺鐆麟�?軁L�6�靋窬�?扆}R嘋踵N{�=牭客oI蹫&蛞1k�L訝夢 :�埔朄鈈 �(/@3匘�8+R#�$�H2@j_"`f杼P厗%馘m>Uj橒鮸搌i'窤潈ヰ�P礛�3祖F酈醂B]�"\6V0氌�)%硕晃<`)@C|�!�69漟礂吁摕�$02��:G括闦;容 +$a�*潱廣M挤縋�>傯潵嫃遽舚:��6讂8讧躴x蕳早~;砆诗腙 �>雬P籶Zd蝝%�=4輛丹荞鰱;諘�"�4苕涡M鋭�f�葠玁3詂mè濍魧=湣鄱]~衒蠴ξ蔉吔�'芊褻厎朶蝗驳 竡抸\w麖>;;縴褊溡屈Kq鞄S �!臑國P�3乒z +TE�pq"┑竈y.尪@渨muWo莨aq[W'籬u墭7暆qF� +攡�#':��G]洵�?Px釮�& l僞�:4�&虆�1褄AB�,揌`羄褆鶸肈�聃疟筙bQ(�>Rf貗y�*P纆缐4V羄叭芛艭劥3t獈q嬫� �2���=6� �曹瓭瘑~柴沅洭k:<螵-t�/擶� +5&籢^酴.梂,翋dE泇U旃�藵Y�)钽8<�*S�(N=vP�暛R鲅汑僨I 亦LOuYg纓s瓡胳T�enS蠆AV�r糰椬⺁5NnQ瀴k+藅廐�3d魭�s6巇*_傜:C世�0崹壤�$�.M躾�鑇� c棊籢坜鷛.:�%蕛Xp猍殼 q 鞬ど 9j雔斏�桿k@灨琯Qx�娑R螒��1岉掚 索^稍隃xC璼.兒sΧ鋡w."枕3锦娄Ou ▇a#⺗�5%� +4�欘�Y喀嶜,H�^?牃0@軏Cta朒钭净侭�7UWkg�=?�'WY71鮂吢k岄gS&P0蹳�>�5z瞊[螠p~C�舄埔"^v麄蘶Z>o鳅懦uwz藎�N苓頣�膺hUMK0�v恌 L甉^�垅T�.�9�#!�#> endobj +2093 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.3577 726.9434 220.1509 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2094 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.7601 659.7528 502.4137 682.7215] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +2095 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 647.7976 136.9336 658.7016] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +2097 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.6109 376.6552 236.4535 387.5592] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +2098 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [309.2914 313.2651 361.4951 324.169] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +2100 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.8969 154.1071 225.6901 164.9862] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2091 0 obj << +/D [2089 0 R /XYZ 90 757.9346 null] +>> endobj +2092 0 obj << +/D [2089 0 R /XYZ 90 739.9346 null] +>> endobj +1997 0 obj << +/D [2089 0 R /XYZ 350.0021 514.5454 null] +>> endobj +2096 0 obj << +/D [2089 0 R /XYZ 90 491.9191 null] +>> endobj +1990 0 obj << +/D [2089 0 R /XYZ 247.4281 195.2196 null] +>> endobj +2099 0 obj << +/D [2089 0 R /XYZ 90 172.5933 null] +>> endobj +680 0 obj << +/D [2089 0 R /XYZ 225.6001 96.348 null] +>> endobj +2088 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2103 0 obj << +/Length 1978 +/Filter /FlateDecode +>> +stream +x诮YYo苋~焈1y F仸�'芍"/摈氨k{眈宇B燞J楥Nx豮[}q�<�$X浲才餑�oC"蓌癕N紏�轱7膥廾鱹鹣面镞Q箷H4��5厐 A �襙v!沮�噚拙zC亀a3L�<3銞e覟并墰cY\齰x靳鲂竦b 捧_沖~蜜膡搅埳Hl坷 FDJ�=m8e�%遼攸苎1魝┹ 聻�= +賋�$b堗±凲�8ɡ�5;酯z皭�=�|呙彊彣*Z�6#�"@�轶l�璸 +>足I紊悃�=�� 娻]yLaL擫@婖H�KjO9霥Z/�慇楧�6� >i>达F�I�1ZB 伱@嬻>k贘moF秼) +%塑;��0q9鄃豖囯澤S\峒鞬S氱葑ST啫Vw�隖_汅;j飄萚卑2瞼�%慰� 対鄢赶H糙 ?緕w�腔逢哚奃环稪剱�2塼脊鷾涆瞞蝝剅 鳃喚�IF�$�;Vr岮隡�&^NFd 鐘h 鶜泆鴠翑�襲.疢戏p{G奟 嶮%豯��'记LM駠觗z 煂=嬱伺'廳��1崬竣�1]'荫5嶳寖�⒅:詩� � I噩掷Nk�2騇钖a墓w=抇R燨詃嘷唁橆l犵$@乪�*霵c茷V �d哘焣u.玣B;`�<�l=蛘眻( .�嶠鄠u{额�<罈Q背蛀癀s蝡宀DI鱯x�櫛輢[$諩2 +竞斌� 煄鲅f 竰bⅤ�A谪Aj@隆七斧)感H泩h�0!豃�1iO犉洹^�72硗'哓l��*�#掄M}y怨㑳 � O"�5 巤J哪 �� )翋�嚪o>↖B娷摄絺Y�睌遼Gmr逨H�嫉肹汱q�>鼾��蘗囄8棆�>j綡ap釞鏋縎Ee\脓 .鵅�2%繠�2捘 羃揭�)娺f�$*p� xw�#�1�w厭k�(1埠�)摢霻�:冩暺`硒鐬瞶�%e9槜痻�)hAl叡C�b牞奩忨aJ 6嗒堞=蓍h勋嫭{&�'W:箙ez!v冲9誕壱e孙�,焋De葻^�/r繙鄻齞y蘖�"G�蜺叝�R]+鬑te�雌�鼀鑣7Ν�楾�羌鶔 +:�1O鍦�;Z斢+挷蚞賜9�峙li鍇vG倗��褢xl盛v熙サ�殒&W穕馑腡}=h熄~��/蘧y筢Y� p別Q�vg兾秾)\ ,溆{讫 M�掇5鯡榤�0v}c煴9��眖L菞厚蟢鼷奝7tQ諌o篘単W柞仟$罄Z^x谄�"vi骶7#阖詟d)鶏銐豫� 峜8摴菵(Fl92鮍髴IpH�3"�"鱇d碂孡� 馩当鳔7庂jk鯸曕ck蟱 v#p酌瑟儾H`J���9]鵉�N筼�%C閊饊vⅷ]}�Yw簈�'7x璽葳鸬鎵o(弧銮G妐`C瑠�.p�{Y�!e闓� -�蚖靉endstream +endobj +2102 0 obj << +/Type /Page +/Contents 2103 0 R +/Resources 2101 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2106 0 R 2108 0 R 2109 0 R 2110 0 R 2111 0 R 2112 0 R 2113 0 R 2115 0 R ] +>> endobj +2106 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 726.9533 157.1381 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2108 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.7319 549.2408 221.6354 560.1299] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +2109 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [290.5065 549.2408 348.4187 560.1299] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +2110 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.8156 549.2408 417.6088 560.1299] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2111 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.7656 495.1877 457.7454 506.0916] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga20812098a4663c8a9fc4ce8e95391b6) >> +>> endobj +2112 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 483.2325 151.6186 494.1364] +/Subtype /Link +/A << /S /GoTo /D (a00147_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +2113 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.6997 295.1891 183.6983 318.1579] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +2115 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 204.0406 157.1381 214.9197] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2104 0 obj << +/D [2102 0 R /XYZ 90 757.9346 null] +>> endobj +2105 0 obj << +/D [2102 0 R /XYZ 90 739.9346 null] +>> endobj +1993 0 obj << +/D [2102 0 R /XYZ 224.7534 583.8924 null] +>> endobj +2107 0 obj << +/D [2102 0 R /XYZ 90 567.737 null] +>> endobj +1989 0 obj << +/D [2102 0 R /XYZ 206.4623 238.6822 null] +>> endobj +2114 0 obj << +/D [2102 0 R /XYZ 90 222.5267 null] +>> endobj +1994 0 obj << +/D [2102 0 R /XYZ 207.0201 96.348 null] +>> endobj +2101 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2118 0 obj << +/Length 2118 +/Filter /FlateDecode +>> +stream +x谳Zm徾6柯m4f畻m矨.輋�;爄靶隰甈[r%9涇P|1%蕭飠@qE�0Eg囅 �d&�,�$廹臊�=B鼢W� /a|� |缓;*f墭瞥斩�QBg噛屇bI#<_=I�8捃殲窟~m踰摥],鎖萿� 芓歁QhP�i�0I揧 �A}`厲綯棂1])A榿�鄔e#_霏LQ�(7毪禚�"|OXt抑z*/粥 +茢O�ZT谭莃蒌e←鍌D笙唰� 肺S#砦淡飧悤瓮糂6蟤糤筷亣/崣XV愭x�灩榞簕 &y{J⒐琷囙X� 靬��$Q蘽�9{0滭劅B绞O疻 捨xw� FN務丣f9� 鎝P�#; �* 哗繨�岥缐/=P1R束SS豕諆0恇潞8鷳j�&q歷尗萒С恔Y譟鮡G篌菙1動旟(F帿'+;a�:lD爼j壱cn鍜�+i�貅�9p慔O�國R#�甘愞�:lY曧e囩<� a�I囇]�81熞;�A�12k�诌 H CW顷遲寪x鶒7'67慶J刁翭撉P狢3攋i唺L愅柼\�姉XG�+�2G慿甌硬痞澛(奌j4nm幥t']�众TN$A1錤鮷箷�n6��油睚蹧徽趸��/b◣類K殣薊��5�尻n姀.咗瘸k㑳�>頴裠��尰Y礥咹繓i�畛W�塢昶,唸�巊螚H1E\V~镺Fㄗ嘴p豥MT78嗻%IH考盧鎅氟� 哴LS}$思hl��@阱腱=-繬�:賰�玲�孛侭鴏4歰鼲韰血烷4V'罙 hX&�,aa列髶,Δu钝� R<澾l�1�褯珲�v�!A_-媿[U泮�+@/瓜緲CVK+k親 顢輂yF鰐a�涠竄釦e�V喞�J<.谼p;?!尞P� n濞sC峙奡籬z瞍&0勞K捾*馽�杽b蓫屣油關暘V皀1駫掊珕恑钏cs86V � �:銥x慆Oy�"攬8綐� #<枘.辶.惓<氾� d 膟��<叁�瘥T頛O^浸�3tC7捻ci簷睼5 &'�~售 4l硇礚齌肗Wk鹃3穋惵┉譅eJ>h 9iIE4�棶iADUQ?<�撃�T}>p踯當X嘈甦侗8��跷 '鬂<洼榱'悧�晗5 +庥D噈U铥镟��>?柱縠楎\l0玍3tuL[s氩P匇xL钄�/鲛揪{蹥栧賈掄1�=莐I_陓-I(F4J�蜑^噕kD'�mq鍪瑽jB玪t懔蘪蠀梯�,7棬迻霃N4&蠛s酳泣癡淆皢君�6諱P+洣�湩R賮H兆蠱黝�a7锍綃tf�TU譁 瞞观昷-项K^^}N'埁埯纅c豋G�撖W╕閱(漯Dン�B9靮YHo壎d鶉m糛�9�B�/~I貹婖�86⺁�(玘>!wQ璃>聠;�'糃endstream +endobj +2117 0 obj << +/Type /Page +/Contents 2118 0 R +/Resources 2116 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2121 0 R 2122 0 R 2123 0 R 2126 0 R 2127 0 R 2129 0 R 2130 0 R 2131 0 R 2132 0 R 2133 0 R 2134 0 R 2136 0 R 2137 0 R ] +>> endobj +2121 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.4174 726.9434 236.2105 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2122 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.7601 665.9261 502.4137 688.8948] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +2123 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 653.9709 136.9336 664.8748] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +2126 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.0073 491.9593 207.708 502.8384] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +2127 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.426 437.8962 436.0284 448.8001] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +2129 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.0073 370.7781 207.708 381.6572] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +2130 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.426 316.715 436.0284 327.6189] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +2131 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 281.9517 139.4144 304.9205] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2132 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 281.9517 175.0106 304.9205] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2133 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.9994 281.9517 214.0238 304.9205] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2134 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [233.8893 281.9517 281.53 304.9205] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +2136 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 207.7121 147.1755 218.5912] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2137 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [147.6736 207.7121 182.6919 218.5912] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2119 0 obj << +/D [2117 0 R /XYZ 90 757.9346 null] +>> endobj +2120 0 obj << +/D [2117 0 R /XYZ 90 739.9346 null] +>> endobj +2124 0 obj << +/D [2117 0 R /XYZ 90 537.7634 null] +>> endobj +1998 0 obj << +/D [2117 0 R /XYZ 90 512.4589 null] +>> endobj +2125 0 obj << +/D [2117 0 R /XYZ 90 512.4589 null] +>> endobj +2128 0 obj << +/D [2117 0 R /XYZ 90 389.2643 null] +>> endobj +1453 0 obj << +/D [2117 0 R /XYZ 300.8374 242.7345 null] +>> endobj +2135 0 obj << +/D [2117 0 R /XYZ 90 226.1983 null] +>> endobj +2116 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2140 0 obj << +/Length 1602 +/Filter /FlateDecode +>> +stream +x谡Y[o�6~鳢杏`c嘶膎{仝� �!�<臁-EV鋂r襜�摺H屎Er籰肞う萻�9�!%鈇鳪<吔@H1.进f伣-L?_混煤�&鴡絰�#U濨JR榄痡 � A 踔浄藔畖�//蟖(饞 l瘚�!K跳in捈姫慈W镒g媑隖�5K0I粗�o遚o鏉-0b*�<`D敘尥係�才/嫙9f髱尐 B惜乹‥5�&槩�Q +∴@���樿�BWBx嶫G宥H7贗愪+�%豸&筂鉪砄o擙E欎泈X`M 縟匎弞巔跘;+譿廄獵夯�<\脚�瓅夞蜃楃痎礁x蹯'-鳑灵昮諟Y�畂�p泬瘡箅吾�V皺76*$$�5�%�郾翢p�Q瘰�2yc�>��(K媻v籑TE3�┃跏X*訩悢琔�>礗 祲(茿M�4y�1陀�氇�*鬀ス璖聰W鎃掣"颬孿HH�$寮�&笿鯥蒻(/?5粆'e�D洲6獉4� �)壚?腤P�げ�猹�DppzBHDCi媃/矸栨M粶竭f躊H��箞� �3$杊鸲婢,�孪鶭)f銽�鶎�㏒~CNl�9轕崹f荭�!靹語蠇4瘨絀—翱�6 忝R蚮.枬+揦/A嵢5p鼢妵Tx蕣恅.�惯��2�:�>\ ,霘蠴G4CLu镖憣#[鰲疄KW�.萉琄鯆�  'a巇�9指掀q鎝�┴蓯英烜Gu +鄑,�o鷍G幡璾 +mN蠊汭楙2O倸)棌H3雄N 俁 h�,衟锑涮H觙榾殕�$Zq/靥鑦h友罬鄢L&a�1 坧�1G浞﹩�*5���'碚硰淹.K�'脥dR3�=偮�'lz@�3翱�5]CV烮�,+輌L匥嗹:#G4gB_柖嘌PJAUtU�G?/W�/o堊娐盋��諟鎭4愀I鍇3@.輬9;9 龑C冠幓�2蜶(渁≒(PDN嚒S?惁折C慛�3烃彠9�# &旘.^j.�竭fi��5�y1r鰛�%辫櫺軨}雰宿,�啢 t�禋uCR畈春G!?籙 咞塨н� W茊�sYE�5#� {缘馑Z�p.�驕厧n月�吢〢p9i∵P嶈铛%@E簺p炱跉船腋Dc_%昊忤�-�齒瓤趿� a�G拳�呞�讬z炰�>猏-竍{�gh鰜P麐烶鰟趏3ciF5�鸮寶�8�?m嘳_�=`$J!%2endstream +endobj +2139 0 obj << +/Type /Page +/Contents 2140 0 R +/Resources 2138 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2072 0 R +/Annots [ 2143 0 R 2144 0 R 2145 0 R 2147 0 R 2148 0 R 2149 0 R 2150 0 R 2151 0 R 2152 0 R 2154 0 R 2155 0 R 2157 0 R 2158 0 R ] +>> endobj +2143 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 553.2679 195.0552 564.147] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2144 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.5347 553.2679 241.8394 564.147] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2145 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.9862 510.9639 146.0595 521.8678] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2147 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 442.6743 195.0552 453.5535] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2148 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.5347 442.6743 241.8394 453.5535] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2149 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.9862 400.3703 146.0595 411.2742] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2150 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 364.3227 162.0093 387.2914] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2151 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.9981 364.3227 193.2816 387.2914] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2152 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.1471 364.3227 260.7879 387.2914] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +2154 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.3636 287.6273 152.1568 298.5064] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2155 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.6549 287.6273 186.2086 298.5064] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +2157 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7506 117.8746 193.9393 128.7537] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +2158 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.4374 117.8746 230.7508 128.7537] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ee50a40597e67fce96541ab56c3b712) >> +>> endobj +2141 0 obj << +/D [2139 0 R /XYZ 90 757.9346 null] +>> endobj +1999 0 obj << +/D [2139 0 R /XYZ 207.0201 589.4618 null] +>> endobj +2142 0 obj << +/D [2139 0 R /XYZ 90 571.7541 null] +>> endobj +2146 0 obj << +/D [2139 0 R /XYZ 90 461.1605 null] +>> endobj +1755 0 obj << +/D [2139 0 R /XYZ 208.1261 323.8211 null] +>> endobj +2153 0 obj << +/D [2139 0 R /XYZ 90 306.1135 null] +>> endobj +2000 0 obj << +/D [2139 0 R /XYZ 368.3438 154.0685 null] +>> endobj +2156 0 obj << +/D [2139 0 R /XYZ 90 136.3608 null] +>> endobj +2138 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2161 0 obj << +/Length 368 +/Filter /FlateDecode +>> +stream +x讠R[o�0~锆�#啅�1mz� 酮A/�鐥蛣朰皋O杦驍fQ:叁嫊:,2矫襠om軿讝IL�xD2譵讂I6:朑I苠fJvx?擡擳�T�@聘�7zTsR�=C{G�.萎螲嬊秊f矰僩栦I�=溌+s剈40#閿�)�(暆秈�(�】购+鞠�$矣苋??皚紐endstream +endobj +2160 0 obj << +/Type /Page +/Contents 2161 0 R +/Resources 2159 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +>> endobj +2162 0 obj << +/D [2160 0 R /XYZ 90 757.9346 null] +>> endobj +2159 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2166 0 obj << +/Length 2324 +/Filter /FlateDecode +>> +stream +x诃ZY6~靠聫6P砛%2o觗RL�23髵�,俗氯�+薎锟镝&掩鐻 +?X酸傧GRd呩GV +疪�"舩彩OOx��~"铛辭C偀灍~|O認!曅d鮸0�%t跫�碞鵩K%N聱鰪弍)饸 l/~藩白镪黺*蝝謻鮵簌舆�;筃-�ⅴ糸3^鞟�O1%抨+躟D敘逿O�y鶺乔�0Μ凪汫8�'咱G淋詺� �岏鷒蛦萿~,�"oo嫫賤�y�+�4拂�'穝絡儹$倲F竄 ⒉梽垞醍h巢*鑫w�5o蕥�0bAD4瞸瀼臥腹-霄旷锍Τe茙S框t� +�oj~,��96窊損v0狠昻d哆桭-掩�%敵^{唹岖� _醚躤U~玪�錟�S珡~p璒棝头^砻bC您廗q緰*謃舡Y_�&潇�;蜗o?㭎耽雓沬k鮟c�衯� 傾0�)祋1S隟霆懔窈>h鰍[蹏谒幸9歬Gk5� <)藹σ捔遂z-N华h6B瑧V(q�#.锋R_�趿3vn錯玸赁u1宗\磬�*趡靹瓆�&蛳0���0桘嶇謇亻赽aQ�=砸utD +�3� C a�� �$稆ha縍*啿謺.夭膸*&餔�$�U臜2T(Y縥^涂C<}L�_�湟o:~�8�#'8鈦D �$ S匲H4岙@憝H(�)▏t乄4M秆P�:2�"F�$�)搩柈s脅x0搹]Γq墉夿$筁�'狀Θ>箄�fκ!p�d8W郠櫜�  2�#媐�>�#r}嗊升病?蝢�&D d/涓i1廑屮~翔8�X7�$�O�*(�忎J奟I涿鎨鷺#酒|鵞;詟b寑(鼛j,楌@.�@ā鍢M瑍 BFcCS_齛�儾O檢�=}�=c酒=$欚�H$P兴T1罛",� 3� I ;�q┙慀呍 愙慽 辠M箨p翩W{� 繷颁墏V 藲:E 洙抾逥� H$唎�,巓谩D搶袀� +校[L�C�&3�0XDc�諆X�4��+J㈥y簕�螅Y巔J闕kQ怒'娚VR_繫。忄h珙盼[镩� �?$+t 藛{⒈貃p$ +麮G喯�#s喔映珥0艷8�雳�:鷪兤|��>�墄萐�'�忇蝱罸q^凣 ,.蓛�P/粒'仇h{譩谹C 詼 噹v蚘�:X}/Uo^亞'UP�q�W剱�<βr]IX0�%楯$" +��8� �S椀�05�.偐 陖;�.a隄z�╁eUU�装籂宥蒞惡婣�W{眻0CL�鄱恴﹫<賐筸╟戫}櫶斠a0魭Y +]b� +C6~_B�+91_jLANp驐T�& �4塗ZG愥wWZD;Owлr�-蜁Q嫌莴An髾R� 磏tQ蚼GQ�B^�鷩=Xj,酘 +蜞嶣H絇j賀�=魁�5US鱗痞司\鯵浲W歚�4鶢觊]k+蓹恣Qt�5e稕�;� +謐屘譶H癙�Y磛�$~s鞦大tw贛叠亨刡波荩ニ"鏈榲烆^;�1y>�/僂C諵艅�f襱鄽O\朢Ia廵iH絇��畏蛔�;毡洑�縘n�6遄怊[q屋涹泶雈瑶萫~摝 I�m ě+�2}HI2F萆樳鞙9U淰vgc!ь旐媶$綗�#庂�3稴饯嗢$h!"�;I瀨袕廡G\g焚(挙鈄黳D#△}$蘎⌒緧凥舸)庑琏[l�&�<迅�P+側G缟#�r漮0%ADP眷9O4抸� *!\湋;﹝�-�?�艌�>�擋�貼霃S-,齌滟蜏� �>篆饺狫_谢6珆鏯偓�Ks&楊<蹫蛾q%船缃E�>fn��0J傱,q+"韊�*酱{鮧�?^_娧7K鷆� /� �6oendstream +endobj +2165 0 obj << +/Type /Page +/Contents 2166 0 R +/Resources 2164 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +/Annots [ 2170 0 R 2172 0 R 2173 0 R 2174 0 R 2175 0 R 2176 0 R 2177 0 R 2178 0 R 2179 0 R 2180 0 R 2181 0 R 2182 0 R 2185 0 R 2186 0 R 2190 0 R 2191 0 R ] +>> endobj +2170 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 574.4454 173.4566 585.3494] +/Subtype /Link +/A << /S /GoTo /D (a00137) >> +>> endobj +2172 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 492.1342 177.9699 503.0381] +/Subtype /Link +/A << /S /GoTo /D (a00151_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +2173 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7856 492.1342 201.4916 503.0381] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2174 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.8776 492.1342 256.5649 503.0381] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2175 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 453.586 138.5977 464.4899] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2176 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 453.586 189.7953 464.4899] +/Subtype /Link +/A << /S /GoTo /D (a00151_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +2177 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 453.586 218.2983 464.4899] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2178 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 453.586 266.5273 464.4899] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2179 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 415.0378 138.5977 425.9417] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2180 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 415.0378 197.5461 425.9417] +/Subtype /Link +/A << /S /GoTo /D (a00151_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +2181 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 376.4895 138.5977 387.3935] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2182 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 376.4895 201.9695 387.3935] +/Subtype /Link +/A << /S /GoTo /D (a00151_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +2185 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 294.1783 133.6164 305.0822] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2186 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 294.1783 177.0532 305.0822] +/Subtype /Link +/A << /S /GoTo /D (a00151_g2a0cf5d86c58fab216414ce59bf1fea1) >> +>> endobj +2190 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.6669 210.1544 223.4788 221.0435] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2191 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [256.3555 210.1544 282.1487 221.0435] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2167 0 obj << +/D [2165 0 R /XYZ 90 757.9346 null] +>> endobj +1777 0 obj << +/D [2165 0 R /XYZ 90 739.9346 null] +>> endobj +118 0 obj << +/D [2165 0 R /XYZ 90 739.9346 null] +>> endobj +2168 0 obj << +/D [2165 0 R /XYZ 90 716.7484 null] +>> endobj +2169 0 obj << +/D [2165 0 R /XYZ 90 593.2423 null] +>> endobj +2171 0 obj << +/D [2165 0 R /XYZ 90 510.9311 null] +>> endobj +2183 0 obj << +/D [2165 0 R /XYZ 90 312.9752 null] +>> endobj +2184 0 obj << +/D [2165 0 R /XYZ 90 312.9752 null] +>> endobj +2187 0 obj << +/D [2165 0 R /XYZ 90 257.149 null] +>> endobj +2188 0 obj << +/D [2165 0 R /XYZ 90 230.664 null] +>> endobj +2189 0 obj << +/D [2165 0 R /XYZ 90 230.664 null] +>> endobj +2164 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2197 0 obj << +/Length 1763 +/Filter /FlateDecode +>> +stream +x谂Y[徲F~席萚�櫸�6o +�]�y澷岴bФ��3濳谱di玧ヵ頉�燐8d夅�,紝D�棋2;,痱n縔鹸 献!鄺外缱4Y&(慣.7鳝I悹�.7蹚+�綴S乄/�]蕤�9��<⿵*�?aL3s}z溰煀刷咾.矈耐缤慌�瘨誜0I碆.>~扑-h⺪�Kb秉�$∷脗S�.鰦�?�鬆]0鲡溌K莿-譒$| 処亶(A�:n�8A砲1唒剏k7*=‵U躞䓖LQ�(]啟�E�d&^:�!Q惎!w7傢~$�39ip��2fW浶�/檖 w趧 洫F虥小喣妸Hd梮瘖1鄞E覛FД艅� +�&BqB"$HBZ羲t煗雯+?臀灱窄 +竟蕍*;噋┇�7U4跡滣╔輫U琖d6殑�$ a砣鉎舫�6瞧�鉛Y碒{?+墙:@/3缀�=o塨�0蒿蛪韜[+DWnG鈄尃D覊� ��AY#呔~ 漦�輡$(6�2;D叏�!J摧�E/55:憏Z�醗c-倜岆礯脵斩D{�(]膩;\rgv謶b韊箮cB詩 8�5癦驀�爷:\悻U�#o&澢c榋迥�;/DM;�'烡O榾扫3�h2>ayX痋w�,倶�p樀丟��IT"茦霷� �>Pz 9Q骄矧l�盢舠衢� +娛㏎[4�!�>桞販�,�]胏墓hjH�3粿`梫鉒�彤��垮}M炀紊�13┣ �'v鐄筙sy7�8糋=Z:-╟踬苵� �!鮚U7O�6垐X8烦晒澟b0漒=穱 f鎣�<穡U槣�/还終 s{~霴钸趛 逳 Y見簄撇無v*趸� =镚蚿﹌揨s滕轳�:~焳?}焪孵Η儖斜宖:-鬾f6詔V��"幧鮕=藒坞!齢f{�r蓗泱R�Z]鄵u丣�色隑竊�.x劐盒Ua�.\ vu 秎���0l^��0R忐灍で�6m覚诶��*p�+忧漆倐楞刚帤� ++^4u鱵3 3絒{f顦7�'鎝i[畗仉'uwOf缰|,腼%`�%l仓怘"汤叧�&DM���$哆鐆^炒�"3�-2v辴s唨贯Gh�9鳥K舴ks鑴剳潵舴f哭湨卾玢鳚鷙# �關V�7R鑍搑U[ +苇zc8廨cY座濢喣:嚱逪>�G?褌�{|m}�4剌饒�"-@虳媋`彲oj充A� 厍阃�:M碲b鎞A騙[諰o{[吳駳��Y孈7o迴H!��/f韽�1,丗篛�$b丙-�*�-鱂狫赶抗搘�<'{A�=忡�=w臱�:霜鲀!A竗錩�谬� l�>\尶Jendstream +endobj +2196 0 obj << +/Type /Page +/Contents 2197 0 R +/Resources 2195 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +/Annots [ 2200 0 R 2201 0 R 2202 0 R 2204 0 R 2206 0 R ] +>> endobj +2200 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 624.7403 157.1381 635.6294] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2201 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.4886 624.7403 241.2818 635.6294] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2202 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [267.872 624.7403 293.6652 635.6294] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2204 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 384.3441 157.1381 395.2232] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2206 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 262.609 157.1381 273.4881] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2198 0 obj << +/D [2196 0 R /XYZ 90 757.9346 null] +>> endobj +2192 0 obj << +/D [2196 0 R /XYZ 224.7534 659.9636 null] +>> endobj +2199 0 obj << +/D [2196 0 R /XYZ 90 643.2365 null] +>> endobj +2193 0 obj << +/D [2196 0 R /XYZ 90 419.4579 null] +>> endobj +2203 0 obj << +/D [2196 0 R /XYZ 90 404.8876 null] +>> endobj +2194 0 obj << +/D [2196 0 R /XYZ 90 295.6655 null] +>> endobj +2205 0 obj << +/D [2196 0 R /XYZ 90 281.0952 null] +>> endobj +2195 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2209 0 obj << +/Length 2273 +/Filter /FlateDecode +>> +stream +x诃Zk徾6�>柯� 豠鶁鋄粰� 毰4檅Qち@�5c!说錘部~/%Q橳�"D矌罟肩�!Jd佱Y糚B!酶\瑹�~姶棷狷�铌籛�, 2捠泡CA$(煌嚗挮k滤箅[8xIn迻涹.o巁栯骃警勃(鳙弚o畁�:�6-�$爆\}鴪H锿F蘦眡�寛1t駎�)s'猾鱓縯q� � S�凪7弍縋�> +蚒M�$"duM0鲒鼾fs\教Oф噖軡雴甄孵宀*族�6滇 �Qs@�-3@庡e^e�.叽U薕隿qp5傽逃缕佁%nr桔赯KU'�$'冧帱鲐&諤咻6E ?焜n)�灞);婟cs�)癁蠹嶕航9k�6F哆4籦��=蔠T,�\碧w銢爀�-]厾-z蹟 k媆m['堇裶焀綺q键w媢!QS!I9痗6m5囟�5dXf泆v獨 滙c岙U+�,浢祠�45�雔鄺秹鰄訢{_'\/�浻消意燋蚷]蜀-M!}簃閞}�u夃j1*!�.骺cL螱绂纰趲婇<萦 +譐裺鴚�}m/疕S烅�9⑤�9偁噐�U{W[>柉O +崌 -&Z-剳��';�]p<�a淘Bb嵏 �.��*1f%�"�(売v� ^匡瑦"L粞�.\磪i蘪K鮰劐Y�V顆�酨]5]譆S� 5�5銏r猨芖0販&芻� 俔�%茧S崈61突(栭wJEXS笁 F讈�0�,鍚z8kL薫鸂fDk�[�;?O$0巎8圎靫@� �f褼�.1見H�&鮜覟〒Bf眐硞屑w灷 鱗揂�0鱜e簪冑<遞脬妺e賈)s漹撣� 刖聒� +漑煔):1 +祅覂Y芼!鈓i汢(L磐猔趩#� O烈F�茰珥�8郙xq�<菍�偢�住馐嫩vdD鼸7r墺�:崞f觸=5�=\2]� c*� 持=}�G�3砋篬F鰞-x搒l+诂g^fU咒蚓:炞展]AN尲軒覬髬烑蟱挨纾尳�嘉�轘葳畜0�1�戏鳷A\琦稼辭�%鉊4�u�矍澘陑Xhl挳w皛,q穣渡�/刓T�!H <蛹>z诩 瀿`I詺窓&菔槙]墜n�穠挨[絒嘉��磽]8Hs 絔�鵨�:|*� 甅阕追�7w?蔟v{so筈2擨x婆<^�旽�2嵈&��溡泜O�<:鶂樲栔;畦�珥赧yg�= 煟w<� 頧镒≤T -崏%2燭�僎!j柜斳餢db�> &穬ュ�1zr莥;箎�r如�O#��-妙 媬Ah�*�e 1霐A +鴭枦蛣拊Xp芒鍜�> K�e祯N�:�糹絿�3鬘�孽周髋�v>墎y� �(僀僪蛃嚴餑︿痔n\~掘1�,-w屟�;污身笪恵@>G顇A躹涶�/vo熳涽wA�&0P%銜鑀�(佱k6LaRj�﹃惨樞-*璼勎�9J讴鞈�賕灒q4噏証巅烝b键-鑴� +A娪S�aD 栝敽癪牵��P^幼烈�=呫紳�>� �鋝D帶膗2�暨z殕閦jn%淮 +疩� (<箁x +$0賺9�'G�/ �bB;XZ��'t湻阽�!魛|幮�4偢6�瓯鶸�%&aH�*Q嘕QK嵏耠橥透�'i禴a頤|� +鑮 蓱bPD祧倌[A(�&蛳篮� 獕淸�焗b�->�(^�侱4宩J� 霡)騫,她即騛a�#蟆堳#K鳎W忊糫?騳g簦鶞~O#圼镖轣闕娒�)I绽銳!&瑷�)钮煊哕暏皬W� 茚m 悝簰懓R"^�暍zS餽慴y饁窦_7/幝h�&杯閬,�}L鸷8帻营R沺��pC钊Nw婳e�X腻QF鐀�1閜焨喛|痉梭�8�%V褑;L淴 $�7弤�灦�?D笟�>Ct"咟4k媓�% ̄ HxPVL勰笩仫1]*6�髛~�*�-泏���急c=!待繝�m縂�硕圬o蚛� ?\諁代咫c >鼎U�?黕aHendstream +endobj +2208 0 obj << +/Type /Page +/Contents 2209 0 R +/Resources 2207 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +/Annots [ 2213 0 R 2214 0 R 2216 0 R 2219 0 R 2221 0 R 2223 0 R 2225 0 R 2227 0 R 2229 0 R 2231 0 R 2233 0 R 2234 0 R 2236 0 R 2237 0 R 2240 0 R 2241 0 R 2242 0 R ] +>> endobj +2213 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 536.3999 169.0332 547.3038] +/Subtype /Link +/A << /S /GoTo /D (a00139) >> +>> endobj +2214 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 497.4963 168.4752 508.4002] +/Subtype /Link +/A << /S /GoTo /D (a00138) >> +>> endobj +2216 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 414.6253 188.6792 425.5293] +/Subtype /Link +/A << /S /GoTo /D (a00090) >> +>> endobj +2219 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 332.7306 237.3867 342.6583] +/Subtype /Link +/A << /S /GoTo /D (a00152_g3e1562e8a6de32268e5df92a52152f91) >> +>> endobj +2221 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 319.7545 226.8662 329.6822] +/Subtype /Link +/A << /S /GoTo /D (a00152_g03d140db75de3d3cdfbbab1c4fed8d8d) >> +>> endobj +2223 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 306.7784 231.8475 316.7061] +/Subtype /Link +/A << /S /GoTo /D (a00152_gbb558f3a9b1ec015e83c314aba694e35) >> +>> endobj +2225 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 292.8261 198.642 303.73] +/Subtype /Link +/A << /S /GoTo /D (a00152_g737337d6a51e31b236c8233d024138a8) >> +>> endobj +2227 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 280.2236 216.8139 290.7539] +/Subtype /Link +/A << /S /GoTo /D (a00152_g7a7c46ffaba30477b8c9e3e61bd2e106) >> +>> endobj +2229 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 267.8502 202.6371 277.7778] +/Subtype /Link +/A << /S /GoTo /D (a00152_g06ba7b414e718081998f2814090debf1) >> +>> endobj +2231 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 254.8741 237.9346 264.8017] +/Subtype /Link +/A << /S /GoTo /D (a00152_gbb56b549f7ab4d86e1cc39b8afc70d1e) >> +>> endobj +2233 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 240.9217 167.0009 251.8256] +/Subtype /Link +/A << /S /GoTo /D (a00152_g24f52ac52d6e714cb04a5aa01be3bdd0) >> +>> endobj +2234 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [248.2853 240.9217 281.0723 251.8256] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2236 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 227.9456 175.8576 238.8496] +/Subtype /Link +/A << /S /GoTo /D (a00152_g9f2196e2705036869611962425e404bf) >> +>> endobj +2237 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [264.3448 227.9456 297.1318 238.8496] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +2240 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 171.0022 184.6146 181.9061] +/Subtype /Link +/A << /S /GoTo /D (a00152_g2d9d28afa353f662b9bb5234fc419f72) >> +>> endobj +2241 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 132.0986 191.7978 143.0025] +/Subtype /Link +/A << /S /GoTo /D (a00152_g902c4a360134096224bc2655f623aa5f) >> +>> endobj +2242 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 93.195 184.0569 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) >> +>> endobj +2210 0 obj << +/D [2208 0 R /XYZ 90 757.9346 null] +>> endobj +1775 0 obj << +/D [2208 0 R /XYZ 90 739.9346 null] +>> endobj +122 0 obj << +/D [2208 0 R /XYZ 90 739.9346 null] +>> endobj +2211 0 obj << +/D [2208 0 R /XYZ 90 719.4775 null] +>> endobj +2212 0 obj << +/D [2208 0 R /XYZ 90 555.3745 null] +>> endobj +2215 0 obj << +/D [2208 0 R /XYZ 90 433.5999 null] +>> endobj +2217 0 obj << +/D [2208 0 R /XYZ 90 350.729 null] +>> endobj +2218 0 obj << +/D [2208 0 R /XYZ 90 350.729 null] +>> endobj +2220 0 obj << +/D [2208 0 R /XYZ 90 336.7157 null] +>> endobj +2222 0 obj << +/D [2208 0 R /XYZ 90 323.7396 null] +>> endobj +2224 0 obj << +/D [2208 0 R /XYZ 90 310.7635 null] +>> endobj +2226 0 obj << +/D [2208 0 R /XYZ 90 296.8112 null] +>> endobj +2228 0 obj << +/D [2208 0 R /XYZ 90 284.2087 null] +>> endobj +2230 0 obj << +/D [2208 0 R /XYZ 90 271.8352 null] +>> endobj +2232 0 obj << +/D [2208 0 R /XYZ 90 258.8591 null] +>> endobj +2235 0 obj << +/D [2208 0 R /XYZ 90 244.9068 null] +>> endobj +2238 0 obj << +/D [2208 0 R /XYZ 90 189.9768 null] +>> endobj +2239 0 obj << +/D [2208 0 R /XYZ 90 189.9768 null] +>> endobj +2207 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2246 0 obj << +/Length 2421 +/Filter /FlateDecode +>> +stream +x诮Y輷�6呖聫騆�)Q麞6�6檏惠竪覫3;Z橿kbK�,g橱�@�%k碥]缙"AA|�(媃?1藗Y�? V飚傎#��技�鯀损蒡阰oe6它,栺l�6b�+)鋖国枧�髤T亀|wK冏玌3┃"荛C�=秂]腰�,譵]訹�(zI2�磡u踌宎[U 4逑珡焸� +l~鴄柂�L_d櫆懋"谏鲫谜瘽Z0/Lm9 +敓嗛l!冥胻�,偰�'IpI";ー柭雚�>�$Y:砛�(豻榵zy幡蓁σ-�6:_閱苖M蠝齍蹏鷋叱n掮臷掮�<+%稬璱P驤胝P恕�� 烤c]d麩G}h9Y�$v-Bq迊�?聣D崴A��4韮0t侾�卛4胴忻H㎞崈筏 +g塩e甂zE鋑A鮺羉ㄋ諌�竻P#莞�<2蠞k呭縟艍\粹X铒骹邧;垼�)欚C﹒� 栯�Y瑙Q枍�ɡ�柒�8壋罈↑��.2�2N�(赡Y+�eAr偈-佮筪ュ洸r蔋 5N臕v:� 蹉怮U苅� 讞s� 疝r鬜,咯嬨NWmnH`吱wC既萕Q9抾敛綻#�2F蒈�$u蠏誔A�6忆d�(鹙nyeU曰庈箸鞣僆P 帇eD倵�1F扲蠀G�耡S�+?`驥穂mi螪�.L剷濳鍈) f^5�!虆騆g灖嵁h5g5d*zSia�h酇k鎚t��+�!�椫[嫼澸(��>昜腏1攱5穆[Aoak堇檕焛ueyx�7�L�� 攣桨�>秕5F��T赌j| 鬁迵6羚嘑�%�X�&gO瑋甙忞懔 穑nX� y匒惒�*禷�9柶~佈S�汕 3 +Z鋕74昴}A[�-L髐S颋,滷趕�<<3檢� 琂zN7�濛^F6謺Or彿:?篒R�!尿轸�%云5H$�7嗘Es�"�=�-,+�y巴�?墽宻區欻�氫 Mdhtof峮廙呟 蝇g晡墻鮶$鋛[?鋄棗*Q修-)咹喸(`�Z僼F>掔3倝X档& 胕8�1&屋30� =�@魾疟�*6�� +��襇嵁仺i壆�l�7壇阩屺(郓-j�.eu�{ +恬 嚪梣 r憄B妱� �Y鳴髉��5x甠骱hy9�揋H嘿�d蓹�1UW痟谶鞇寝靝�k@mImD乬�$ヴ磑OD豳S8)c勤,埋0嫭跘� Jd�4檯 堍�!皫eZ竆R@驛惨�TO�5唔_�"V�'�gU�]苽��) 噚汏:64�葮关Avl雤坷Y纝�/N稹寎h|謖]0門欴 7J+咐怠Y|1EVem +n藠�嗳0怢W�.6劖M尜�6垽�"d璇� b幱蠕橉铒nn��x肯酭噵�&,率�犊輡X螕犬|gho癃菙楕M闂�?�h磔睚b�,\{so�聓诊tSZG�%梴$�积玅鱰s�亣�鱨�藡见0鬅C镗姣��鋦j2搠緲{_茚}\衻~�'堞辟戆鞗䴔PGNW3h勹�3墼Z��7�蠻逈�'B廇誼n,媾�1瀮� 5=嶇q餯)帨�碂^c鄜�-恼誺ot維tW络駹檼3N躖�-G肈K牯欝�k桎9耉朳鮶镰皔�qu)娵\訩僦u9@<簘2乖|&f譐泛 Oa�5鸭鱔vo峻� C}�2Bi稽罀81攨礻c*c 韊餢c8�1嗐巺�W�>剫5=)#攮闄�$�V󌫀 W忄l戰�5粑e菻顲吚 Q犺窹/醛@@yPW� +钞霖屡R8%O +嗙8p#�;X!£+��Y +�傰 �漦.u罗h]}甇&幮$〝蝅,�8茟<萚) J�3�牑�6>颃�& a啈h�偋夜t熽 i?�#儽渡榢-O靣P鵖腽\5鮺o�*淀 设脕脮菨錬臒挀:=觢S>n�;KP犊qmiy咝F,sU麖>歺孙oM?4k嗡U{��鳾A� 蜿�+'?=t轄\N枪攔..K)^i`�;9禸!S_眕邞韫&呑�6竐m t?鉻�哛ZH�3穣╈�%8櫓苒糡※@�!傕OK餿.}拫v'X淾�- 隔:f貅"烧�龗A� !蜻輺�/M釈(欬�5'b�O�v�RxE 痀睙%aj�羍#p'?鐹7�7 郅矁鳂GG�上郱喿2嗨B狞� +]a?Wu �烅囮徍籊塸�?�.闯齟ndstream +endobj +2245 0 obj << +/Type /Page +/Contents 2246 0 R +/Resources 2244 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2163 0 R +/Annots [ 2248 0 R 2251 0 R 2252 0 R 2255 0 R ] +>> endobj +2248 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 702.4657 192.3555 713.3696] +/Subtype /Link +/A << /S /GoTo /D (a00152_g058a8e6025f67b021862281f1911fcef) >> +>> endobj +2251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 617.6293 168.4754 628.5332] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +2252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 617.6293 218.5572 628.5332] +/Subtype /Link +/A << /S /GoTo /D (a00152_g499bb98a0b4ae9a98553ede81317606d) >> +>> endobj +2255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 372.6901 227.254 395.6588] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2247 0 obj << +/D [2245 0 R /XYZ 90 757.9346 null] +>> endobj +2249 0 obj << +/D [2245 0 R /XYZ 90 637.022 null] +>> endobj +2250 0 obj << +/D [2245 0 R /XYZ 90 637.022 null] +>> endobj +2253 0 obj << +/D [2245 0 R /XYZ 90 603.0588 null] +>> endobj +2243 0 obj << +/D [2245 0 R /XYZ 90 578.5313 null] +>> endobj +2254 0 obj << +/D [2245 0 R /XYZ 90 578.5313 null] +>> endobj +1420 0 obj << +/D [2245 0 R /XYZ 338.656 320.2263 null] +>> endobj +2256 0 obj << +/D [2245 0 R /XYZ 90 302.5028 null] +>> endobj +2244 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2260 0 obj << +/Length 858 +/Filter /FlateDecode +>> +stream +x诃Vmo�0#H皿�!遉Z㏑謋掖E �嵎Y�?�F�6m姅渳缁缥wO孿�>葝�+�≤M +簕祡� ��>�\n湕痲銯 鈽粵濕�`aw搤餌�8�z菦���絧Wデ\鲵�*9察�.獼�渔止趯q-,F8襋�:>A7U餹H2鱍- @Q勢隆� 嬡yp迣~z�9皵�*�7 �(V!匓#�盟�#!� ┅普鞲╯佼�"垇 籗写G{澽i鯲u?垹秳怢巚�(}募fP腨橶U> endobj +2262 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 717.9621 227.254 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2264 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 543.1103 227.254 566.079] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2261 0 obj << +/D [2259 0 R /XYZ 90 757.9346 null] +>> endobj +2257 0 obj << +/D [2259 0 R /XYZ 267.4535 665.9412 null] +>> endobj +2263 0 obj << +/D [2259 0 R /XYZ 90 649.2141 null] +>> endobj +2258 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2267 0 obj << +/Length 2057 +/Filter /FlateDecode +>> +stream +x诃歒s��啭+X��*Dp~箨娂钉HTU捿-諛壧奊萢譀_熎蜛T瑀晥欓閚4>t7h�>�p_ � 悴?Y魀�n_鯃<傜:缽戕_.╅d$朂駍〢$(↓耵鐏D�GT嗔賘� 启e飞婛j閚v紆螩*珝回]吡@*�� 闿�+G紵侷b蔌w镧_q +阛膶�#b �/z湶p褛{椠��/毊 祓| Gp噯 S樋梎�M﹂�d�(魿沫z��误"浛鍿о<逳6驲縒膉 c鮔瘝鱼� o徒/撌蹱o窛/_馨樺n拔7C�uf醑|R確璏赞y哇 �L�訔J if鲅媾塑譜爳誣p薖焆Wo9声鈲f/窤X;M/Z玙Iw碮廴厴嫚�($)珏民� �!L��隮耡� {} �kX錛1_x�=Dp馶/�%�;賠�圪j麝莀s'U鼮g� 濑A眗煁瑯誊0宪H峨|2�>N�款nr��書IY歿G�L幺b3�j壻y2鄎m� 摴浻誨啡桬�芪嘍 緀嬽玏鶦X�淍1� +�/髪�)j磅荛�>ps睔� \卮焞c:n囋嘒 剦V}a$覙獌�]獩-5纴欔K��]綴鶉禪�)R寬纲J陘�:�+�{m逐椪B�瑸輌癸頎撑K﹢〗�/鳢磡О/� 插M_�'f颜蒴c⿻塆皰J豧悊)�-踑觅@,W>榑C g衮%燓�4鴀�ATg怸�1o鏩桹0G襠�<�%zF硓駿囮壨C逡C~償�縿�=Pe諓緺f���8搱3枉z_(]緈�,n睊J賲m皵-�Ka�P佣|斘J>錍Gokペ~(俙貳< "np曤@�"笑谾^�0侞<暭� 瑢頦b钟従愮�*W漎n踕莪齪u踪�$ SQ&T��>�5儚3�!�2芓偭J,蒨]a劻勢繾觧溋﹀L�藧D2劌愸� 觔驆r臿 I枧躛9;芖硥�7袗貛3莂~\cv⑶5楠镞鏠廠&%Jg锢I=(3酲�5k惷$"�:俜陮沉,酆Af?犅�_霜肥� 熭BmV厷s�8暡�^V(+g泓�'遧嬗i総瘮!��1矗�;�:塵敕�:矋�&s]8骵p齲壽岵嫫硟睴>錯度=(程f27仅眆撣W抗牖С蹧�!攊t�(2 �<r�%ず@$!Ub蓜蹈OH �!!5忐iZN}偻I\"Ei?灀倈蕧巀隖堸訔�穬泲绸蹴虲4 +ibd"$#)訹��>s�I�+涙燠|盵x邳�,鼢雏燀隋(�;駂奲� �!蛹CYd蠫h峂娐 枽唉0Fa躰Ea蓊 6専Ba軑庌厽��7w拂C 玿�D鑐壈負犞U�&N$:1[�堿�$_�8�/�/u*0撰MACWG�7 I�2I峬HD*3VbI&� +#L&�&v覮6崯纃聧庌�?趥鷛yyq�魀�彃"N��7襬溲�)玬γ> endobj +2270 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.1536 672.5415 350.0824 683.4455] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [274.7554 593.6496 309.6842 616.6183] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2273 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 524.9361 172.3507 535.84] +/Subtype /Link +/A << /S /GoTo /D (a00141) >> +>> endobj +2274 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 486.1806 164.0618 497.0846] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 365.4596 298.8158 375.3872] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3f6f1f6f98431f2d33ed30a30d2ccc35) >> +>> endobj +2279 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 326.7041 293.2467 336.6318] +/Subtype /Link +/A << /S /GoTo /D (a00153_g974c9b4bbe6b07cc1d64ac4fad278030) >> +>> endobj +2281 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 287.9486 263.8671 297.8763] +/Subtype /Link +/A << /S /GoTo /D (a00153_gcacc406c3bf7d0e00412e4c946252739) >> +>> endobj +2283 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 249.1931 265.0627 259.1208] +/Subtype /Link +/A << /S /GoTo /D (a00153_gca1240bba5dd57f8c7c27123c84a1f6d) >> +>> endobj +2285 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.4377 245.6755 220.3653] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3001114ddadc1f2ada5cc9a780e866fc) >> +>> endobj +2287 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 171.6822 220.231 181.6098] +/Subtype /Link +/A << /S /GoTo /D (a00153_g763f12007aad8cc0e483bf50f8a8d9b4) >> +>> endobj +2289 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 132.9267 286.1035 142.8544] +/Subtype /Link +/A << /S /GoTo /D (a00153_g9dd44616d41cef74d3beb51d8be5ecec) >> +>> endobj +2291 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 94.1712 253.6255 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g529648ad3b0b327a43689b0f1779ff55) >> +>> endobj +2268 0 obj << +/D [2266 0 R /XYZ 90 757.9346 null] +>> endobj +650 0 obj << +/D [2266 0 R /XYZ 90 739.9346 null] +>> endobj +126 0 obj << +/D [2266 0 R /XYZ 90 739.9346 null] +>> endobj +2269 0 obj << +/D [2266 0 R /XYZ 90 716.7484 null] +>> endobj +2272 0 obj << +/D [2266 0 R /XYZ 90 543.8366 null] +>> endobj +2275 0 obj << +/D [2266 0 R /XYZ 90 420.1859 null] +>> endobj +2276 0 obj << +/D [2266 0 R /XYZ 90 381.3704 null] +>> endobj +2278 0 obj << +/D [2266 0 R /XYZ 90 344.7717 null] +>> endobj +2280 0 obj << +/D [2266 0 R /XYZ 90 306.0163 null] +>> endobj +2282 0 obj << +/D [2266 0 R /XYZ 90 267.2608 null] +>> endobj +2284 0 obj << +/D [2266 0 R /XYZ 90 228.5053 null] +>> endobj +2286 0 obj << +/D [2266 0 R /XYZ 90 189.7498 null] +>> endobj +2288 0 obj << +/D [2266 0 R /XYZ 90 150.9943 null] +>> endobj +2290 0 obj << +/D [2266 0 R /XYZ 90 112.2389 null] +>> endobj +2265 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2295 0 obj << +/Length 2082 +/Filter /FlateDecode +>> +stream +x诃Zms�4䴙_��$3T栎2呤祑蹵岣�`:n獯喣 盋��瀅Kr�8盶鑤澢猾粘赸%lL釓峜:嶵Db!鮴�疡<~7b钽 � 鴉6-徢1�5足俨挔Q滖駆褊男�74�0Tt�祪浲b縅眸j3忒蛹L蔿揙�榼]蟡轿,%4C�弤麅�`迖%"6j�7敯8驺鮄r醥V[袿�鸄趼┵I獔f|�#;��f4"Ls�囐G紇嚔c痥夘`�!峛3�(鬒韷斮及�0s{莨雛侍dy��:b � 謔�3� "妁e吷G欸噀峞eT)��0溔餃q�Wb�x聓宜$墿謒藉�6]毪}枟娈熵�"票<�?�=8抬枱>dQGn丹�,�梓�1D)�妏 鐰び1%�Y鏯諪c齯煏v癏�~嗌s粢QL敠鎁瑗�&俌@絡X恀M�=� +桴鬸轫袐�玨8� x葃~y|趣庈奯嗬+)诊�苿z)�l� (7鍪� +,啴皥�#L�葡壗踭炨;s+!�,R�5煰鰦越W沽詎�IJP湩�:)㳠厦咺挘櫈`$3:I霁�>豰鰁奦0W豨O閖eG䦃]\胔棫頴�&e仜8�u3:r[坼蹯蹞�%倚唶\!"h駙�/c澬吧:躬aUq雼┿聿*fZ�'7X7廀N骝蛕洯�.鷶晱琪谻ES ^N澕�郛P衅p!z瑏>� 穁�鯙uGu 噹輍� �&�'衘X0衵5-犠ZKo8汹�Z缹嶾h迟鬏CM(媢�R峠y岒秊-蠎廋Pk螄q�� V弐韈;A�\H)Zf氪]>`�k恂錷2莮�/l;乙匵膳篌!�;遻髨璤樾毇楬<串a酘h鞁剘絬$4�垊栻!懶oFG畯凮讞贩�7遼婭'縱矌�%2� 疇�/�:樢�瀄装娚S�&鸧撖枻豲穢VV�,齨毌�;CR辁赯誈S詢�2\j$kX槮 亇4碜[哟﹚M[蕠写邔庈M飊.鼓n蜉u�:��4鄮皟藰�U� I�凧盚 d}萸zk磉脘s掇n]镗I辠黵嚽- ]o掏婋)�$Y~T�厗萦�>��?殴O1��y侢黸7� +姏m�8[,休泚忒6学�.� 萜祈oW�偆E モl7=A\脗A塬���>圼z肁躒> �ft潸 契鑄]袴<`(䦅啷閰qxME诹凨/1�K垱赀�77O)�v\螵晇慢L�颋p裊l浍$h韰4�:P惈a=L碚鑩谛fiS�庼p$沉匣7過岿铞鐩垲譣h稂得莉NO�K榁�齶V �o顔毮�08I磫夆OC��蝫i灺� 榉�?鴢i脽�3町鬹.炬顥:0-鬏顁蔝湾頞z|p爹恦~龋 灲i /� 孶閑ndstream +endobj +2294 0 obj << +/Type /Page +/Contents 2295 0 R +/Resources 2293 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2297 0 R 2298 0 R 2299 0 R 2301 0 R 2302 0 R 2303 0 R 2305 0 R 2306 0 R 2308 0 R 2311 0 R 2312 0 R ] +>> endobj +2297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.0032 702.6096 196.7092 713.5135] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2298 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.9845 663.1573 206.6718 674.0613] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2299 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.1599 623.7051 252.3298 634.609] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +2301 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 459.7527 225.9098 469.6804] +/Subtype /Link +/A << /S /GoTo /D (a00153_g51195ea7cd5aa387a87f9d3b23905b62) >> +>> endobj +2302 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 420.3005 246.7912 430.2281] +/Subtype /Link +/A << /S /GoTo /D (a00153_g9069474ea570fd78c481aa164317dbaf) >> +>> endobj +2303 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 380.8482 245.6755 390.7759] +/Subtype /Link +/A << /S /GoTo /D (a00153_ge0f8cbeca9731af2171ffd37e79de893) >> +>> endobj +2305 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 296.6881 187.0159 306.6157] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb61381673de27f31848c5396bf0b338e) >> +>> endobj +2306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 257.2358 233.6306 267.1635] +/Subtype /Link +/A << /S /GoTo /D (a00153_gf963fdea2b75d27ef31e92d1d01359ee) >> +>> endobj +2308 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 217.7836 248.0566 227.7113] +/Subtype /Link +/A << /S /GoTo /D (a00153_gc3882366feda1cb759ccbfe98327a7db) >> +>> endobj +2311 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 133.6234 188.6795 143.5511] +/Subtype /Link +/A << /S /GoTo /D (a00153_gdcf372ff9748996f7c05e9822a615384) >> +>> endobj +2312 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 94.1712 254.552 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g92f3344ec8ca46893163399c89fafed5) >> +>> endobj +2296 0 obj << +/D [2294 0 R /XYZ 90 757.9346 null] +>> endobj +2300 0 obj << +/D [2294 0 R /XYZ 90 556.5104 null] +>> endobj +2304 0 obj << +/D [2294 0 R /XYZ 90 312.6772 null] +>> endobj +2307 0 obj << +/D [2294 0 R /XYZ 90 236.1996 null] +>> endobj +2309 0 obj << +/D [2294 0 R /XYZ 90 149.6126 null] +>> endobj +2310 0 obj << +/D [2294 0 R /XYZ 90 149.6126 null] +>> endobj +2293 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2322 0 obj << +/Length 2189 +/Filter /FlateDecode +>> +stream +x诃Z]s鄱}庄蠰`\|铔粔3夗谑mo?�#K赐〥�"�4髯�I@�(t泷孍奊凰�9�@2起G��� 透/�#<~劘邖Hs�疅鴢7逞�爖瑧朤巊�I悹剮g薩':=�O辬蜻0豁继6y尜跎脭娚f[熿.@&JM欮>�0:煿@�8撃勸玷走駒 駘a拇�/p�褮幾#N�=Y峮G?:;鯀�莕梒�S�氃7鑱:`�D$�QHGB]~+�&?.釪E�$挺歂6S�'徴縐赿${�??焆��)摟t1騁盵7糕i砙-脬I`�6哓旀�f褾�垕0九� CB`贠�椑 G鍽刞�8S|靈&縌*毫怜╜c哙懩7_聭芌洱~稬 -蟠銣K斝�87椂� 嫫免cat鞖0>_\吡S緖{uyy{ +1毃H�R)�瓺 羾襏*�>�"|u皧癘 芍罂初n]熖讻]^6渒樆劁嬢v;e�$底鰈掬y酣*@/1�@0��m�!H A涥$93�$鮹驾G襙満臛B獣妞W> ��* 鑡瘈坃珋栠�谖( F钱U篱斆@1圾嚣菡貔eG�#�R��:!淶$﹥9b拢N�,棠|枛関濆圂贺=?o� �l<�?v高蓝S眠�䏝J鸼硚蜼都gy痻刦0篞駛蟟慇�9�N;X斢玖�#~-~銣n;篱H粬忧+:畓础歠/$矏Q瓝�� +魘肪O讽俕厘U9嫌彤X}��>� j创 熹X縅�!楩壠I対g0奈癬荖唢v稖ag8寧]宋�烦笏氆洨劎族)'"� *#靺}嚑�?瓾對鲰4]eE閁`荱S�,鍽ラP�!廘曲嫴�7`i寞ei薿湧m�X 譽�7镂Lkp:%剺�兠CM`蔈,%) #馑j*W鎻2�8厮�瞧]�,WA�1/珏芡�2骉^燏M-O��,y�� 崵Jb-們砰� �;熳眼�;��-鏑�滓�.維�&W漙�4鼻2aQ�`谴皂X/78袡s5P#:� k�,鲜l惊O觊b�5�蠹XgE崛^fkㄩ9L8�$�#Q=颲E赺�9c�(�: �9塪"謤8X滬灹髅~鱹�高r>匊�0:v-�?濥\��鏽A菆QE脡p℉擯��T/5`殗ul=蘍逤嚚oa{牦碾e杠�2p£e嘤酣�5狧蚳� p|哓=P褦L諽YB櫋� '6渳甾�:bz~X红儁'a黸z&S$、k)杘0 瑘_+瑬吒摆�+F钱'�^鰅媋7擅筽℉f枑饍G z�O虈��l/瓌y覀'瓌滓傦鄍^@侮兌凄7�@E塌艟裱�嵙砌.Z +K5湎]Z攳隯r�?H�i£eb坜-觮m墙rS>��Jmh玢患�-iQ<霽齤�输毹�*$&bj蛋竄=�!祮�:碟~ǖ鍇圸胊t靂礏�鏖鲻�üP�,8T�=厙茿)偾�迾)晴n/~9s�,讻e倧镲>瀇v緡搬�{�VH/晾/fx`椋C姺癡棣Q�偠柅鍋�褒毨��*殸J櫿>褎僂5� h"庾j㈠7畨扼殘勓彪鏾贤V繭梘WS&&?u�!"B蒆B��9?M(覊�5u 尪yX"U贙箦_槎誊鰈]�i_�损碮/鴴逅蜅) �,�XJ耠鬥�+�氤,蜶蟕垾a繋ゾ�,m9乱p划r_|奛 艙計Yuz鮵謅jB愒� +'拧"袬�W%谘@紻�M迂*廲緡1呗岓鰼誾晆cX鐕[蒎�=樈籎^鏤Viu�2\�)%��恚忥泤蝬诫}z笙v嬃P槹^妁���,犌津"~Z~闶k;牸H籲辐婧^ +~sW5-G�.嗲眑P窴臺荷Fx倶皎s\"6tpp+琪�0� 搱5鹼運� q-c窗8=�! +嘄: +鷡P板|胊t靭4黻絽wG(L�缏�"1P朄蕏規!P蛲'肦涑�褓�:籷�% ���榏B?就忐�:�蹑轻�.铃Sq翱桞^�/韏蠪l嶷�Q審.琧xD +鵐/V鶵豯慠�62e_�$P珤綤�F鼹^搮O鲟�) ;�js�=e��3�!冫R�x� 縢浛�>a:TM殫��`,錯ndstream +endobj +2321 0 obj << +/Type /Page +/Contents 2322 0 R +/Resources 2320 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2325 0 R 2327 0 R 2328 0 R 2329 0 R 2330 0 R 2331 0 R 2332 0 R 2333 0 R 2334 0 R 2335 0 R 2336 0 R 2338 0 R 2339 0 R ] +>> endobj +2325 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 703.2861 227.424 713.2138] +/Subtype /Link +/A << /S /GoTo /D (a00153_g196379ceb1219a99f4495e41ccc9bbfb) >> +>> endobj +2327 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 617.7172 235.8724 627.6449] +/Subtype /Link +/A << /S /GoTo /D (a00153_gac0de06236b02659460445de30776e00) >> +>> endobj +2328 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 577.6656 202.5175 587.5932] +/Subtype /Link +/A << /S /GoTo /D (a00153_gf5fe83be78b78b9e7d9e7f1e34ab1cc5) >> +>> endobj +2329 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 537.6139 233.4713 547.5416] +/Subtype /Link +/A << /S /GoTo /D (a00153_g8f4ebd8ef6c0ea665ed351d87fec09fd) >> +>> endobj +2330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 497.5622 215.0208 507.4899] +/Subtype /Link +/A << /S /GoTo /D (a00153_g51c1cd531ff0afb81620151f2248cd21) >> +>> endobj +2331 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 457.5105 187.9025 467.4382] +/Subtype /Link +/A << /S /GoTo /D (a00153_g15de27b044603284f68db05a378235a7) >> +>> endobj +2332 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 417.4589 211.3245 427.3866] +/Subtype /Link +/A << /S /GoTo /D (a00153_g67cf1e0d2324c93f332c1f020c0fe8b3) >> +>> endobj +2333 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 377.4072 231.2496 387.3349] +/Subtype /Link +/A << /S /GoTo /D (a00153_g24aa5bc36939cc9a0833e1df01478a7e) >> +>> endobj +2334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 325.794 211.942 336.3243] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4910467b83a639f06739c82cd362037e) >> +>> endobj +2335 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 286.345 259.1549 296.2726] +/Subtype /Link +/A << /S /GoTo /D (a00153_g5b9dba2123705bce1ce95c3deca0bdad) >> +>> endobj +2336 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 246.2933 272.6941 256.221] +/Subtype /Link +/A << /S /GoTo /D (a00153_g2bc3b489923793759526a3181eb667fa) >> +>> endobj +2338 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 160.7244 233.1426 170.6521] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb1455b27c06532a399cf06d2c1d6d08d) >> +>> endobj +2339 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 120.6728 236.4303 130.6004] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3090117ef3ff5775b77cb1960e442d07) >> +>> endobj +2323 0 obj << +/D [2321 0 R /XYZ 90 757.9346 null] +>> endobj +2324 0 obj << +/D [2321 0 R /XYZ 90 722.0018 null] +>> endobj +2326 0 obj << +/D [2321 0 R /XYZ 90 634.0061 null] +>> endobj +2337 0 obj << +/D [2321 0 R /XYZ 90 177.0133 null] +>> endobj +2320 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2354 0 obj << +/Length 2254 +/Filter /FlateDecode +>> +stream +x诃Z[s�6~鳢蠰_翝d貛�я剖胣垴�-qB�*/I菸= +iR込2佮凉崦箑&3 ��,�3Ox(`\微� 灜a剺拽瘙�%x�L0~�c ∪鳛E>拋7LK5塊囕,菂ZT築賾|&莡8鋔y穃l~朱悟鷑y}~證&叞鑩/C﨣�)�S来dJ韹笂媘捙テYbPY�]VId嫠z匪 苧撟槭3禔q籏邑�&袤桎 +rB�<F 9匫Mv @-�B�1埡r徖hG�1 WG茁翩诱挣蟇=h�U�鱾/�&坧FОi善皺�*2疀�抣� \Tab抮� b� 蕧�5��9">g�\膱f5軚l�.�郚鹊理葷nW�罎PG吠鵁�?-槝焆湡A疙EWH鳒O鶅B砧兲桝Xx�-傴n蓴诛��<\EaYu"槌0R 朽5`&(挃S0砫�0s幜l\n 3W�0�?f鉰豇恶矜燋7�?縻#A茔d� 怗蒏僚<銩剻�%�昳拀5#馤Р壝T嬫U懂6厦嶫鋍"^v獆aDL廖扢梦a8籷�-靄惯T]�'珵l�埡矡G潵熞⑶WiQ'畸4_鲾�P�礌�癟Sⅴ噟離,p� %{聺擝;�<悽 1覦甡��4投\?�苮0柫q'�!9朖I�-捥偌6凁牱驳C蟀嵥2lk夋�<{>革#B09Ry噝鴙丆�拖o�u 蔗E洡姡猲忉K圑N郎�{x@鲅丂?�0'�-c螵w摗葤R奎緣5�=獨嫵UBAfHT颜y呤姨�$阼ゝ詼玶`鮼�.�糺鯡欂zL鼧7I晊Jn〨U� +熢�{c=�&U暁倍郍x�R"蘓f掌嫁�,臣 +赨 +D裎\苒��*/�44�诱行嘾愍1hU诌齵yy�轶佩g�0*驊Bvfk[荲啺PY暳�\68坰A褱S<[銚擼鯲6l跟b>F\賂�尋姈l2U孞堙� �6Ut銷W(]酖T(j豇秴�嘐 +L8偑�1閑E +僉#輣{8&穌4?尊R刌�5#�'鮗m碽矗8檕氩遥嘪�/氿綨� +2轏葵濼=2&@�4颂崄憭X弓7u>堨觇炤逓熭荑�6%Q薯s���%��頵攝& +3=(!肽z◤悢萁覦ae垟eI禵pp呏6� 糊﹡?u簦Y煰瓅蠼OAL鴪Fu�88�-諗lIte桿Q奂綪恗\溷摼Y�;O;戕&d磔�=#�漕.4藩{塎H4 +欠韊V +岺掷QU椿炌^捋7[� 陼K0埁6+浈R]汋寤5酺7�&Y斨 跒GZq!|�,劒邬$� 籤Z噟 打]�6}hA� �:Z魻eéd 瑾|z [;pHC2�弝 +] U愈_棝灼﹊ +n嚋`顱7z卽低u:(4}N楀|袗@鉔|�湔�j�eW� xj獐fA�勪�#傣锿殕zH瘹HK鍀V 沿��/桧1�:\'�4o8騎榬鎃a瞠�'�1拾客秾奷g磩�Qe蹩C�d}1馑�04鹋� 陆�?-腊D���叽P�2鈢P$H@%髐D��j4�#~e� �磬�:u祔 渣夥斀ユO(埔淶u鉅鎙�媪嗹孅彠u躃o闛剪?�(纋endstream +endobj +2353 0 obj << +/Type /Page +/Contents 2354 0 R +/Resources 2352 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2364 0 R 2366 0 R 2367 0 R ] +>> endobj +2357 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 705.2116 209.0629 715.1393] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3589822ecb9d9c4145209756396b8a6b) >> +>> endobj +2358 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 666.5202 222.0741 676.4479] +/Subtype /Link +/A << /S /GoTo /D (a00153_g5726142fec34f35fb9ea19e5a45975c6) >> +>> endobj +2359 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 627.8288 214.124 637.7565] +/Subtype /Link +/A << /S /GoTo /D (a00153_g21664b7441cfa37d280228d23316d609) >> +>> endobj +2360 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 589.1374 228.3406 599.0651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g156dd2891a57035e4afdc4c2bc0b0ebf) >> +>> endobj +2361 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 550.446 212.4703 560.3737] +/Subtype /Link +/A << /S /GoTo /D (a00153_ge6f4a2453dbd8bc60e6a82774552366a) >> +>> endobj +2362 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 510.7784 166.3534 521.6823] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb58e1ceb7cb73ca2bcd73146b6c1b4e7) >> +>> endobj +2364 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 378.2912 233.5112 388.2189] +/Subtype /Link +/A << /S /GoTo /D (a00153_g285a80366aed9428f64282b8d13c918b) >> +>> endobj +2366 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.3051 251.4958 359.3784 262.3998] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2367 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.4596 221.9163 356.3884 232.8202] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2355 0 obj << +/D [2353 0 R /XYZ 90 757.9346 null] +>> endobj +2356 0 obj << +/D [2353 0 R /XYZ 90 720.8203 null] +>> endobj +2363 0 obj << +/D [2353 0 R /XYZ 90 444.8446 null] +>> endobj +2365 0 obj << +/D [2353 0 R /XYZ 90 311.3811 null] +>> endobj +2352 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2377 0 obj << +/Length 1774 +/Filter /FlateDecode +>> +stream +x谕YK徾6钧W枧b�憭r踋o襠浑E摾惺箔謻\=操ER置枩磭�Q鈎捱蘌&��NRuS田a!�籰騳駐t花褄r&圱惘亚县Z伨oG1襄�3躟D<廧麘M櫣賺G?W|訤)s弼�:矢楚燻紺忣`5w,愅\�2T�'�(錷�唥蕶Uc�W %6虬 �?珺辋8霩�r–殥錘貉$u 鶂m甊嘷骥双洬w镖Z@� l纷䦅╛6�9棒嚴唔何w詒郋!軉�AP挠:u�菛 J籺绕庣橨-跴祜�*Y玨n禓蒥訞�.忄x梠Xd郅丨院疮\E鷧t聹q�gZB灗脞纩滇N �e郂O刚�D'鄛尗隊婖, �=渨T0,忩碧K� �1BD�:疲銾l'湉o骭o�頾遦庫,荵槆�>捙J5荩测pHR輥宙sHr�(掼3T�0�9I搣蠙恤� �⑤眐旹Z�CTZ辉k.躔\�+aQ霑欃*;ょ嶟T儧博J轰�h濲;X(粈A緧4覥汓FUq�腶﹙蒚��(I憃扟8j��4� 4�捉2M鄞鵃£~�2G敫镺hx瘪fR~絑7�4\A貧=俤e鎴栾謤"D�"藐�-:jd昡d2�2咒(_匍M��碋в�伟枼鬂鲣Й呤纯籙� 艃y_峠{�kT璐�7-Gw�6�扫`M#梷鑗E跒�畏Y揝B\W偕\繆O豤闶肅讠c棪濮擴k44�"7:~�_?卧�� XZ靣xNN阺I�w/宲;聈槅q`滝鬜酱鬝8糋�0�:W鷀�#�7G絴��~{ynt慟璃�'莞(!湍緦{UE斚%傚5 s�)�(搀� q菦0U踎$庚]摰Z^U韾ee搹�輗��/qrs隣(0虢=�竰Qw峼._P鮘I衞鞉肋5�彦,枆暏~N俎7鐢}QNE 丐垣�旐謳7#i=#眢y�0ax麬傸jvs醺躺�4馱仧鍗鲕搘�踢4� +T+絢z粲諷�<23�" 讌浤�S�6!d墳灒|潩l%�'匨/m%砜f啜o;'�1拎f"给W�跀踊 �F�C�<嚬鎋(瓌傣.孋h闡&�do% 覤╥%o({c�:臱滮桱R#��,� ;噏N�)��d+endstream +endobj +2376 0 obj << +/Type /Page +/Contents 2377 0 R +/Resources 2375 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2379 0 R 2380 0 R 2381 0 R 2382 0 R 2383 0 R 2384 0 R 2387 0 R 2389 0 R ] +>> endobj +2379 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 726.8189 213.038 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00153_g41aa744caa46913b3b3aedb2a4e78546) >> +>> endobj +2380 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 687.2449 190.8907 698.1489] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +2381 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.3888 687.2449 268.6482 698.1489] +/Subtype /Link +/A << /S /GoTo /D (a00153_g69646a81a922033c5281445a71f8ffed) >> +>> endobj +2382 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.7197 672.2644 372.0849 682.1696] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2383 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2897 647.671 239.3189 658.575] +/Subtype /Link +/A << /S /GoTo /D (a00153_ga92afb113e122f860392bfbd385f842e) >> +>> endobj +2384 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.7197 632.6905 372.0849 642.5957] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2387 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 564.2011 245.6657 574.1288] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb6e04358481bd2057524fb874cfa472b) >> +>> endobj +2389 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 550.8899 229.0679 560.8176] +/Subtype /Link +/A << /S /GoTo /D (a00153_g6836f92f3692f3a4429eb599db40cbae) >> +>> endobj +2378 0 obj << +/D [2376 0 R /XYZ 90 757.9346 null] +>> endobj +713 0 obj << +/D [2376 0 R /XYZ 90 739.9346 null] +>> endobj +2385 0 obj << +/D [2376 0 R /XYZ 90 582.5346 null] +>> endobj +2386 0 obj << +/D [2376 0 R /XYZ 90 582.5346 null] +>> endobj +2388 0 obj << +/D [2376 0 R /XYZ 90 568.1862 null] +>> endobj +2390 0 obj << +/D [2376 0 R /XYZ 90 536.5063 null] +>> endobj +2340 0 obj << +/D [2376 0 R /XYZ 90 511.0399 null] +>> endobj +2391 0 obj << +/D [2376 0 R /XYZ 90 511.0399 null] +>> endobj +2351 0 obj << +/D [2376 0 R /XYZ 238.8902 421.844 null] +>> endobj +2392 0 obj << +/D [2376 0 R /XYZ 90 404.3073 null] +>> endobj +2350 0 obj << +/D [2376 0 R /XYZ 215.8768 311.4556 null] +>> endobj +2393 0 obj << +/D [2376 0 R /XYZ 90 293.9189 null] +>> endobj +2371 0 obj << +/D [2376 0 R /XYZ 352.8421 189.1121 null] +>> endobj +2394 0 obj << +/D [2376 0 R /XYZ 90 171.5754 null] +>> endobj +2368 0 obj << +/D [2376 0 R /XYZ 238.8902 96.348 null] +>> endobj +2375 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2399 0 obj << +/Length 1725 +/Filter /FlateDecode +>> +stream +x诃X[o�6~鳢0��9�%眔i韛.�4s\`[[娡腂uquA掿�姢-'+偫yn�$c�#c幥.s穕g級Fx|�GD/蟕}V'x�侐1G堋蝬}WJpb斝駔鹵赓�醢�'膨 +� O耲p憀婸<�憟s?抶鷠齣碭Wz礩蘲堅鷖趱;o良O#�,畋�|`D8сhdS藎劊胙煏礟2繇�霐鞶鴗疹D(Mgc<鵰+綼Lc涧/双泈S�姿rW 为�8⿳岈忿i�,鳺彃;鯖洢 +平岿!厠\}逳)M)涇塼守I峈q慍m�A�%埗晄�.)颅菈!,%慖鵤h(鬂珣�5賁.�7rlM黿玿秹萙鈈!磫<�+爴蠴涇wu嗠Z瀢LgL9�<慬yP蘵lS�a灘� V縜搝�8 M婝菥冗h聠Q價w笼顖袞因� +虊捔孜d査洃"YLV�>夔h� +�馞�鬞1載�0萶�"泳a嗎� 兰罇叞�4蛄9��7焀笈�� }�7檔 垵蘹鮁償nvA.6y�6 呙.仂ZyhG�:枥婨| � @[9f闱Mv鋾窟-?�,.缢矺�"�/�>栧G� 拢舴贉a蚍跿植F動b/BKPiyZ%腐RYNJ時喃祮J9_2y旿H洏�/e�<嚜漣K虽塝畻プSG憊\2y卅c 3鋣.葲妦Vg鑹袔\墏  硸盱0TC汗监YVS� +fh,鐣;繻 0=倭7i挼-碅&w0�K;R5H73暿6謆T豚謁�b�$U�Z)粪禜{岈坒5獮嫘枼 +qG8gNS汜蝑葒t筏|僲z �=d鸔*€VP�乾堾_��=C=牷%�@,蛉蟸D�;葨鐜��+竾<ガnF絟歔�<粰{e� kz�^|早畀<轶仦瞂�qZK罐婱 E磠J�!鋖�Q�=�糓韮�(��袯捺b缶rq6滇掶兽D]7GwO鵵购N胡R +sX炄\G镖照��E6�d%佊旊 �z虏#窎P%�K&�沾┹r 諃%枀p薮D]�崕N塽2GwO�毊鎅榽v萿F賈c���,"邀2pJ�鶮髰嗝 w炯^/.�>痙墚痏疝颡Kv@AR椲茀r煠y謰左眢o�5斁嫖)遪!x忐P膧 q橌�標rXH揭蟊#� ^���)垙"﹟%h綱]樍'Y晩谼慆舘栮�7咆Qr嶂敜睿还:虛千{褃j梠�=(�鐬�endstream +endobj +2398 0 obj << +/Type /Page +/Contents 2399 0 R +/Resources 2397 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2292 0 R +/Annots [ 2404 0 R 2405 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R 2411 0 R 2413 0 R ] +>> endobj +2404 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 421.5214 227.254 444.4901] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2405 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 421.5214 380.3883 444.4901] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +2407 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.808 302.734 388.7368 313.638] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +2408 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [490.9727 302.734 513.9963 313.638] +/Subtype /Link +/A << /S /GoTo /D (a00144_g12b467f314489259dd718228d0827a51) >> +>> endobj +2409 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 290.7789 143.0105 301.6828] +/Subtype /Link +/A << /S /GoTo /D (a00144_g12b467f314489259dd718228d0827a51) >> +>> endobj +2410 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.9993 290.7789 209.4109 301.6828] +/Subtype /Link +/A << /S /GoTo /D (a00144_g41d37ea1e3bd24f7b51e9409aceaaa80) >> +>> endobj +2411 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.7857 290.7789 297.4 301.6828] +/Subtype /Link +/A << /S /GoTo /D (a00144_geb79c914cf137e6d27fd7583e5a66679) >> +>> endobj +2413 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [261.4335 197.9645 328.7205 208.8684] +/Subtype /Link +/A << /S /GoTo /D (a00144_g30e827f33eacff55ecb4d8fb5a11d5d1) >> +>> endobj +2400 0 obj << +/D [2398 0 R /XYZ 90 757.9346 null] +>> endobj +2401 0 obj << +/D [2398 0 R /XYZ 90 739.9346 null] +>> endobj +2374 0 obj << +/D [2398 0 R /XYZ 224.7534 640.6243 null] +>> endobj +2402 0 obj << +/D [2398 0 R /XYZ 90 623.0456 null] +>> endobj +2341 0 obj << +/D [2398 0 R /XYZ 238.8902 547.8099 null] +>> endobj +2403 0 obj << +/D [2398 0 R /XYZ 90 530.2312 null] +>> endobj +2314 0 obj << +/D [2398 0 R /XYZ 208.1261 381.0771 null] +>> endobj +2406 0 obj << +/D [2398 0 R /XYZ 90 363.4985 null] +>> endobj +2316 0 obj << +/D [2398 0 R /XYZ 233.9089 276.3076 null] +>> endobj +2412 0 obj << +/D [2398 0 R /XYZ 90 258.7289 null] +>> endobj +2342 0 obj << +/D [2398 0 R /XYZ 238.8902 171.5381 null] +>> endobj +2414 0 obj << +/D [2398 0 R /XYZ 90 153.9594 null] +>> endobj +2397 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2417 0 obj << +/Length 1471 +/Filter /FlateDecode +>> +stream +x谂X雘�6�羁B杈菮瓚�;吆紪"M吃:碋 K触E塲��~菞e)婋a(� y<�飤靼皡�[1睟?tb� �!k渌智 8_�3滮zAb+v鈥謗-%伛 &�2鹍&�駪}Z诚慚�$绩�"諿眓說='綸7j覿萋"H廃鶙遨蠃rg埗觲,跳:Y佧v�7巪�6攘qL琷�譴寿囐;9闌�0u]籗鱱G�%� 誹熄�#+�&\=藗Q�"~�/縑O馢�籦 >qrG\琗嘈 堢I閣tM蔙�)嬲宇攡F>�'桬�)$,�9:6鋺欸Q;\炷q桧傟泫#勳_2um}�?痭锆�靠>垦曹�,�9�c)k櫽潈魥 + |沜擀�"�4蒱c庂哋;h�K�6Oc醠簄⿴G義=b轝� 竐��9竰�$a9�踚略b謚�2gNs� q廧s烍9秙p汳a�0蔱H�/t磞輹貾灦绦6c?器�3鱰!5貖1秛鸳T ��;�(菷�>酁� �o狱№� 恛�:{屙�,鴠蓠m菑B�;@:9�赭棗W7�?F�宕├K: +咑NYo6� ]栆�'卾馸>0~ 唅]m嬕8痐噐$�9籯楹+[^>Z" 2B� 蚌惂骎pu,昲説{�"向A;ADUXq襩4溯^�/鲽熥踘R艜d~7&甤K\�(�( 晍胹X浑zr h�+W�8�繆j[� +b%C榇単�\眕憔髠訑wPjD�3Z塏mヅ儧z ��^{}L&逜63è迁p徬ktl^�>軛撽輿弚s偎強跦PdW慎㈥*礱]祾e忠lx颌�9薉=Z*択#B&a焆p敢r蕸劦U罸\�鋱>鍲Z3FS鞨!|BV勃恟皦 s溦|旍y�6螪M龑*=*�� 轆4|f�X@@�伣p o4 %�暝~� 8倥e(�6F�<胰鑕p鋯~韍;;栝*馦�3 +%%鲨<uYu��#薇禟E,牰O備8ct0驇�H�6w�e漭Bgsvvw驸菆惠U^3%&Y謤Qz�&�4y7鶅�(@;n攀�刉[慃J懚I�0�0餠�&-N`�鉘繝\嫧盆鹑Ui饆�$隯誼((闓櫌H嚻顲憧ZkJ �趂o鴆Q栚�4�y�)x觠薊鉖9 灲逾@Oq@U�$M撂徣椶撠�M劧戦泜连あ;鉦沛+觲稪 +M骦�颥w沮� 嬚奛嶃I 缘蕎Q趄Ξv9蝬槈|�(�0!N銯唁4c�鸤�珿眱� 瞏� c脹氂摫R寛姂錉�讋邶(tB禚酱a9z>疀囍L,逵p�檡q躐麹t憺胵G�r�%�,H鄕1妿.PX4# +曾��>N~;A�鷁!?繢� +v蓗HjZd綠h#膍/)蔓酧=邫臶�::�1_j0:!� A篫#鉴}Fp;hX屜觑O鱻鴺2釤U%┝endstream +endobj +2416 0 obj << +/Type /Page +/Contents 2417 0 R +/Resources 2415 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2425 0 R +/Annots [ 2421 0 R ] +>> endobj +2421 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [293.1521 514.0489 332.2253 524.9528] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb58e1ceb7cb73ca2bcd73146b6c1b4e7) >> +>> endobj +2418 0 obj << +/D [2416 0 R /XYZ 90 757.9346 null] +>> endobj +2372 0 obj << +/D [2416 0 R /XYZ 319.1084 712.3476 null] +>> endobj +2419 0 obj << +/D [2416 0 R /XYZ 90 695.8178 null] +>> endobj +2370 0 obj << +/D [2416 0 R /XYZ 368.9116 591.1728 null] +>> endobj +2420 0 obj << +/D [2416 0 R /XYZ 90 574.643 null] +>> endobj +2345 0 obj << +/D [2416 0 R /XYZ 238.8902 487.6225 null] +>> endobj +2422 0 obj << +/D [2416 0 R /XYZ 90 471.0926 null] +>> endobj +2346 0 obj << +/D [2416 0 R /XYZ 207.0201 378.4029 null] +>> endobj +2423 0 obj << +/D [2416 0 R /XYZ 90 361.8731 null] +>> endobj +2315 0 obj << +/D [2416 0 R /XYZ 207.0201 257.2281 null] +>> endobj +2424 0 obj << +/D [2416 0 R /XYZ 90 240.6983 null] +>> endobj +2318 0 obj << +/D [2416 0 R /XYZ 238.8902 96.348 null] +>> endobj +2415 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2428 0 obj << +/Length 1383 +/Filter /FlateDecode +>> +stream +x诮XYo覺~席�4cK膕椮眣+4@P 1僨U畗_�%x:縹屋�1iD穴R飤诛,1�"�M盥 柢浧�M钒齶傰� 蝕� O律螲0 溊#�4蹾 +v\偵4L>X緂蠄�萰Wo`�" ;HMね槡_杚洺^雩疱dv|礨.醢帔e蜥�& 匏 rh嗷觨癅2�'sB�"洭'vt詠|0嬮9�X.攙瀮塁 Jb剱鮗�>"D +徽洓匪嬽zy�堳沸 H�I0)�;t(挕=w*匯弖慧昒�洸Rc裖�1矘綪报甕~涊贋k9偐`�嶨鎀矐逘�实Z鮚蕌�#�6U�頰壼7渒菫�$奥攌Z5m舑E_Z甒詩 +=& o�"属2/邰槌χ蹕隢�煸攑�+-矰蜌蘊1:Tnm疔啬�*�鹘娝劑Y���3x桔U鍂濭 撟狴!晚產�s�c鑷=�#� >�$6j攔J(D箼I鼓,�梈净1T迤嫃菶qY膎罳壘y��巅w现�杙;美鬩a1跞耏P煴�2梖齕恰�Bh牙駖蠒杫U6祚�+F�|歮wk刼?�0係L�=5柳屝:pSQ� )媱┛rs�aP劆�5#濩i爺糡I兯鸳塭埭靭噚O步匪]悚嶯/羇z���kq*c=]Z藜_胶|m面鸖YK� �#L7J沮氐X震趢璪1�旡鑧踰-m襬糎Jq鰉$嬐%踰Z�"� 瘳[ζZ� +&檦,胲a�#XR$硣豓聣WJn業果G嚤$8膾 �/卑閵4戱8襼磔�d3翤N塝�".s^l�*墯柩X�0� 遨t諗,<邉3P�(饅鋾鈺L{ApV3冗耒%�S糭c�岉9俲妢氲鎪F�5V酈 Q�H�**隃譽胹V禯縓T-i藁砶砕詣)r)#莁篃Mn���/郒fK> endobj +2429 0 obj << +/D [2427 0 R /XYZ 90 757.9346 null] +>> endobj +2430 0 obj << +/D [2427 0 R /XYZ 90 739.9346 null] +>> endobj +2348 0 obj << +/D [2427 0 R /XYZ 238.8902 601.3918 null] +>> endobj +2431 0 obj << +/D [2427 0 R /XYZ 90 584.8893 null] +>> endobj +2344 0 obj << +/D [2427 0 R /XYZ 238.8902 497.8687 null] +>> endobj +2432 0 obj << +/D [2427 0 R /XYZ 90 481.3661 null] +>> endobj +2369 0 obj << +/D [2427 0 R /XYZ 207.0201 388.6763 null] +>> endobj +2433 0 obj << +/D [2427 0 R /XYZ 90 372.1738 null] +>> endobj +2347 0 obj << +/D [2427 0 R /XYZ 238.8902 297.1084 null] +>> endobj +2434 0 obj << +/D [2427 0 R /XYZ 90 280.6058 null] +>> endobj +2349 0 obj << +/D [2427 0 R /XYZ 238.8902 205.5404 null] +>> endobj +2435 0 obj << +/D [2427 0 R /XYZ 90 189.0378 null] +>> endobj +2317 0 obj << +/D [2427 0 R /XYZ 207.0201 96.348 null] +>> endobj +2426 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2438 0 obj << +/Length 1725 +/Filter /FlateDecode +>> +stream +x诘Y]撢6}鏦0�� �>,Y蔥粵汵歟煉�瀫M崫d�}d�%,з�>瑣筥�: 2起G� +廲#�"1^頖x紒廮巿y<冪扯怜笱峡Q5VH *企� A�)°鼶 B�3蜀�&�>`L7U�(�<�?�X攥O颌京^絽 K9戱翥枧紂镍蓹 趰F�?怦 +鼄=聢)汕_�#�颎e鰂7�嘣N/鍎 墬耺|�腖0茡烿�:K隊頮絵樝�琽Dっ<致��盚誼蟓y髷 箭s\蟾屉�籘琊藬� sb布�9,枱�O捯d䴓de}蹰駵~B�i礧$F侳蘹曏穣礫兆Y^�惠=硤婆鍁憁扷0:拗YJ蠉�(m@6w$闐贆嘦z�VB[dR�.S�b<&%b譑t徭�7茌抗�+R�8烰餵迟%&+pl焐蝮壁{瞗覵髩]怉詍|�&2sIPL勽董5毜謺 +a�K1$L�䲡椛�.)�艑拁制蔆跱�1> endobj +2445 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [203.2945 407.1106 229.0877 417.9898] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 333.1135 139.4144 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2447 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 333.1135 175.6584 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +2448 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.6472 333.1135 211.2546 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2449 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.2434 333.1135 247.4088 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2450 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [250.3976 333.1135 278.6812 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2451 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [281.6699 333.1135 310.5115 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +2452 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [313.5003 333.1135 349.5247 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2453 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.3901 333.1135 412.6078 356.0822] +/Subtype /Link +/A << /S /GoTo /D (a00050) >> +>> endobj +2455 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.3132 280.0189 219.125 290.8981] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +2456 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 206.0218 139.4144 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2457 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 206.0218 175.6584 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +2458 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.6472 206.0218 211.2546 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2459 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [214.2434 206.0218 243.0849 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +2460 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [246.0737 206.0218 282.0981 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2461 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.0869 206.0218 321.6693 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00045) >> +>> endobj +2462 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [341.5347 206.0218 384.7524 228.9905] +/Subtype /Link +/A << /S /GoTo /D (a00050) >> +>> endobj +2464 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.7012 152.9273 279.1888 163.8064] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +2439 0 obj << +/D [2437 0 R /XYZ 90 757.9346 null] +>> endobj +2440 0 obj << +/D [2437 0 R /XYZ 90 739.9346 null] +>> endobj +2319 0 obj << +/D [2437 0 R /XYZ 238.8902 670.3741 null] +>> endobj +2441 0 obj << +/D [2437 0 R /XYZ 90 654.4845 null] +>> endobj +2343 0 obj << +/D [2437 0 R /XYZ 238.8902 558.783 null] +>> endobj +2442 0 obj << +/D [2437 0 R /XYZ 90 542.8934 null] +>> endobj +2443 0 obj << +/D [2437 0 R /XYZ 90 451.9385 null] +>> endobj +1385 0 obj << +/D [2437 0 R /XYZ 90 425.3268 null] +>> endobj +2444 0 obj << +/D [2437 0 R /XYZ 90 425.3268 null] +>> endobj +1321 0 obj << +/D [2437 0 R /XYZ 242.1978 314.3947 null] +>> endobj +2454 0 obj << +/D [2437 0 R /XYZ 90 298.5051 null] +>> endobj +2313 0 obj << +/D [2437 0 R /XYZ 242.1978 187.303 null] +>> endobj +2463 0 obj << +/D [2437 0 R /XYZ 90 171.4134 null] +>> endobj +2395 0 obj << +/D [2437 0 R /XYZ 242.1978 96.348 null] +>> endobj +2436 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2472 0 obj << +/Length 1155 +/Filter /FlateDecode +>> +stream +x谕XK徾6钧W鑘1�7�=y� H[咭`釙d[�,9zd��綜憯鮖薃/�θ�3遼$gD�脧!擯(d\褃厓#tZ7紖駇瘥n踣G! +%暳钚Z� Jh皨楷缔l┢ +瘺?>CS�5A�6�,�&Kl鹽5�$uZ錄钦嘳缱�L沲坳薟腀飍� �^�#�48�8e�![砪� s� 骂 徛2袸D(b坥�c籍_/I�启墧�)坪┉s3R滹�卷岌T&V �&�<昭錳筎爀騎徤P異倅C2#%:袛﹣挃曛銿�a[帕貘!`枼慮娑e锳兑术��9襦b嚿GA2 +汱`}[�宽O�<惦E強|瞞櫺�0"G,FZw�%�決:鬩誩誐� �VN9詵(hp�� 赥�>薧G*踼曱借茋m煀,N筱騔�(享 �翫獲 +8=Z猋]沲瘿�* eS/ZB;z鳀玄�%t鯾 瞲硠.%t鄘﹦騙箘 +鄨 Dy硠鯭o桺A5�)~g 藉K钄醠 韅哹|�.裓 �0�r[�典zb瓧@狗癯鶕骻橳E鰙#藕烢 A�鸳Q(n� 馱悘M]OnU觿L蚹SHz�q毒o0L輲6G4+帪裪_Z洶�=�(E斸���( E)膩緟湯� 7"懩�6�Aǹ:[�!�虈亅.榆i^4踵$v仔.杝RU;齲钤3プ嘚X髏n绰6瓪炘�5�︺i粷惝籪朚应珐缌0#剺w骽轖Z琯A�o�1崡S{� +砲b潝v贽歅}p~輒嗝Dv;%洼� "\蛜腊*D +.桧 S躾%3x弆�L鋻vTL �> endobj +2475 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.377 726.9533 248.7336 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +2476 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.0545 702.4697 359.1278 713.3737] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2477 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 649.2336 135.5587 672.2023] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +2478 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5475 649.2336 175.1299 672.2023] +/Subtype /Link +/A << /S /GoTo /D (a00045) >> +>> endobj +2479 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.9953 649.2336 243.1941 672.2023] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +2481 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.377 591.5789 252.071 602.458] +/Subtype /Link +/A << /S /GoTo /D (a00153_ga92afb113e122f860392bfbd385f842e) >> +>> endobj +2482 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.0545 567.0953 359.1278 577.9993] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +2483 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 513.8592 139.9724 536.8279] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +2473 0 obj << +/D [2471 0 R /XYZ 90 757.9346 null] +>> endobj +2474 0 obj << +/D [2471 0 R /XYZ 90 739.9346 null] +>> endobj +2396 0 obj << +/D [2471 0 R /XYZ 227.8216 626.7922 null] +>> endobj +2480 0 obj << +/D [2471 0 R /XYZ 90 610.0651 null] +>> endobj +2484 0 obj << +/D [2471 0 R /XYZ 90 476.7479 null] +>> endobj +2373 0 obj << +/D [2471 0 R /XYZ 90 450.3624 null] +>> endobj +2485 0 obj << +/D [2471 0 R /XYZ 90 450.3624 null] +>> endobj +2470 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2489 0 obj << +/Length 2005 +/Filter /FlateDecode +>> +stream +x跐蹝鄱钶_岱�3k捄X闧�$挺i洆�/ы烊mk"K>耗輣}耘诸f:灡H@\�r)�'棻Xn倣{~窵O �<鴩呬�5���糢�2v鉖吽磙P�(〇垤w'tシZ獲8蔟Gl跨A{琖2rp碁q摈嶲�� �壘乻FOC嵍4�7諯j<l憚OQ昧'粛e�5 牖y}r絮2�瑢8�泟碪4�3��*螕3佤\鏘藔R�譄 惟虢9XM魜螒s%妷1淝勡'矤缁2釺�瞊3S騝�O�1c疏�)a征"燾見R�5/)0'摅{瑮鳥Q�0尖+�*� g�_s匹8熎2X鼦d浮�2��o�7扨 =珎衧美W �gF] 翸"]迩儰乆F i�I��8Z鰄(镺#�R髓&齐爇w�驰�邹8脲�6窽S'M綯yv齷嫇颲莘惰髢i褩�o�$泗q鉣�(乚庱昛a髡�B帼���7o灰fsq�1掠q4Fx&巣�汨Y嶤嚼灼褎/�30跰$稊�飃"夞_掆�.G覂q�養魡+i�難A艏&z�dPB�^蓘櫳j盲湩麼D�Wh礹(苫ぬl傣u悪A狢 噒鲃宆孧`饡�1茷� (酄;婞∷R躤貮�.獼弧#博jο�#J}泅�$9{呠鴦亽曚腏O5s騟mN4y葶l9%囄~tJl皻3鬽f-�蔃谴胕Ic鲂�/FSN=煨樰濾�昶=踅绪製殏噀1X�'擃殲+S 觚�5�:澈�.嗢蔂r诶彎\鋝�MK3湜 +� }鯹Ql�9绽@`跁釬⺗颌犙嶻pQ壔竱 桸�1憓� �:)梓Z澩u綅>'5Td孝厑儹HY籲獗]#Hu仟+2Z1�繰桡伝撗L哧剄L賒�$厼qFm^�2‖�L�:鯤�;D�8�韴耡=k�3S氾 ;胭H阵�#�O褃H<0�4�'. 鬁�%MA燅迠�;f`�姝�8鮷茗=�,�+Q紊cQ%贅�7娆槼嚋g醾-猎|茾�>碞g8甶#LCg嫎B�[镗痯灪S竂猗iuT0裒‵澤Ca�> endobj +2493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 503.0404 171.8124 513.9444] +/Subtype /Link +/A << /S /GoTo /D (a00134) >> +>> endobj +2495 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 420.2854 201.2321 431.1893] +/Subtype /Link +/A << /S /GoTo /D (a00154_gb4b17aaf20d630f30919b19937b966a3) >> +>> endobj +2490 0 obj << +/D [2488 0 R /XYZ 90 757.9346 null] +>> endobj +1776 0 obj << +/D [2488 0 R /XYZ 90 739.9346 null] +>> endobj +130 0 obj << +/D [2488 0 R /XYZ 90 739.9346 null] +>> endobj +2491 0 obj << +/D [2488 0 R /XYZ 90 716.7484 null] +>> endobj +2492 0 obj << +/D [2488 0 R /XYZ 90 521.9904 null] +>> endobj +2494 0 obj << +/D [2488 0 R /XYZ 90 439.2353 null] +>> endobj +2496 0 obj << +/D [2488 0 R /XYZ 90 382.9653 null] +>> endobj +2497 0 obj << +/D [2488 0 R /XYZ 90 356.4803 null] +>> endobj +2498 0 obj << +/D [2488 0 R /XYZ 90 356.4803 null] +>> endobj +2487 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2501 0 obj << +/Length 1890 +/Filter /FlateDecode +>> +stream +x诃Z[o�6~鳢06牥恬N1��&mSち指谻[幁�;充fE��綜墧)K"U�S溲�;$E� 1鼞∑C%覍酸鈇�圇旋z@祓�'纠恿oj�%暶閉$(∶轵鉎泷�&X嵫狎Oh +<"棈w诲a摉眢葩饜n髖巨m菬� +讱%�$鯚燎蟲�筠0b:�'咐坔M�N櫥� nUz蕘鈫6�a眍帬�:�(斧J�$"|万� J压� 蔝斱�1告j灍 ?钪[埙碕}蚭槫B�eka诖s缝y<歔琍GQ1(D栨+(e&J!哢�9六� P#!枅硠�癘攰S,侻� Fb咐~崶<�苚�2袆P}妉嗹鱒娼o儞徺行[dn乂 8GJs鰸�篓1|丬梚墦B驵墣1蓭&B�$`厜0痓a%�Q3g%�P蕵氚I�"B亙剋�%� &b剅bqBy +C� +鉜劒酕UC頒ò �%�&儆:_琙x�)S�H D� �(Ck銜3朸旱覜珚�~7僚V^纺� 熐D孷煱鲤Ol?h7載 +佸O!+� 硊 +摰嫆誛 k讘祹&k�Y#64鬦参椝齠~沶��&�8 A�蚯��櫟/L豃歆囤F䌷Ux_^竐|sH砡祛2澝偏丿訟�婲^s艕話� �']m軓��6g跀.)"q�鰈[�莒F9'軪� 剨膲艐$勮I�*髯ヵ垂FKえ"'噍u怃cf4�3f倡棾浛/咛尢fP睾)*U$躂脓1虪え奺葔�3�) e(孾e惹響�x� 呁h�-6I/g椬椨� O楤$�8�tC[9� 測+^{鶅煼�(羽$� �$�/ @%%@馠��#@ 7N�:xD蘦璧xq筢軪�81嚉L抪 *�xS[� 郔�7�:罵d﹒諪 x湫夘~荔B詐bqj�=j剄+j=≦顲嵃 綎7-SEDp �搳!7碋�XT.�/f崇p�a撪N~x!~8�8?B�?赂?|�侘酖貙哵藦嬰蠖x繧艕赯�-醾"湪顋荂槎R駆嗉dA玕{�=R�#魃t袉S瓆�A攉-B鱐Wt羹pu諙v仡性漺O 攛'蟶袺}肥綇�#�5�>�浹雄s�妬稥�7嫡I袙l*0懲%蹓艙B魭骗掜泠Hv 糘裁f4赧Y魞8.鷄鋯稏r_頹�?3帕 "��>"屲兄榎N�&篟斫a殠}}L楅]�)�w�?継�昘�A�#?"笌5芗舫瑣�6[遫輖`囤眢鎧怈]KrbS'm*鶊uM藉!飕iekx�G匶╄�� q猚 H%蠔�0敪0n�-窎�/c奊坏}G 飭S探u� �到pQ傝k凰呱庆n桧剩9A楁p</m吚奾BZ砿^�)��鷪� C�uf壌2�颼)�枉"娎瘨卥m簾绉g栾\悱y髎�勞_|F�颠薖尌=NS1rl4?>麟}邙溒|玮L螈�嘞援endstream +endobj +2500 0 obj << +/Type /Page +/Contents 2501 0 R +/Resources 2499 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2425 0 R +/Annots [ 2505 0 R 2506 0 R 2507 0 R 2510 0 R 2512 0 R 2514 0 R 2516 0 R 2518 0 R 2519 0 R 2520 0 R 2521 0 R 2522 0 R 2525 0 R 2527 0 R ] +>> endobj +2505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 576.2119 145.7904 585.0586] +/Subtype /Link +/A << /S /GoTo /D (a00125) >> +>> endobj +2506 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 537.3577 175.12 546.2043] +/Subtype /Link +/A << /S /GoTo /D (a00124) >> +>> endobj +2507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 498.5034 190.0538 507.35] +/Subtype /Link +/A << /S /GoTo /D (a00123) >> +>> endobj +2510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 414.6673 235.723 424.595] +/Subtype /Link +/A << /S /GoTo /D (a00155_g44311ecc30759ca38b4069182247bdae) >> +>> endobj +2512 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 401.1132 185.352 411.6435] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) >> +>> endobj +2514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 388.1618 205.845 398.6921] +/Subtype /Link +/A << /S /GoTo /D (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) >> +>> endobj +2516 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 375.2103 183.1503 385.7407] +/Subtype /Link +/A << /S /GoTo /D (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) >> +>> endobj +2518 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 362.2589 185.91 372.7892] +/Subtype /Link +/A << /S /GoTo /D (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) >> +>> endobj +2519 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 349.3075 185.352 359.8378] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) >> +>> endobj +2520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 336.356 205.845 346.8864] +/Subtype /Link +/A << /S /GoTo /D (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) >> +>> endobj +2521 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 323.4046 183.1503 333.9349] +/Subtype /Link +/A << /S /GoTo /D (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) >> +>> endobj +2522 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 310.4532 185.91 320.9835] +/Subtype /Link +/A << /S /GoTo /D (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) >> +>> endobj +2525 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.1599 253.2274 224.0961 264.1313] +/Subtype /Link +/A << /S /GoTo /D (a00155_g3983e0c026396d5c4506779d770007ba) >> +>> endobj +2527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.7556 240.276 190.6918 251.1799] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2bdc4b7b4038454a79f1b2a94a6d2a98) >> +>> endobj +2502 0 obj << +/D [2500 0 R /XYZ 90 757.9346 null] +>> endobj +1165 0 obj << +/D [2500 0 R /XYZ 90 739.9346 null] +>> endobj +134 0 obj << +/D [2500 0 R /XYZ 90 739.9346 null] +>> endobj +2503 0 obj << +/D [2500 0 R /XYZ 90 719.4886 null] +>> endobj +2504 0 obj << +/D [2500 0 R /XYZ 90 593.1046 null] +>> endobj +2508 0 obj << +/D [2500 0 R /XYZ 90 432.641 null] +>> endobj +2509 0 obj << +/D [2500 0 R /XYZ 90 432.641 null] +>> endobj +2511 0 obj << +/D [2500 0 R /XYZ 90 418.6523 null] +>> endobj +2513 0 obj << +/D [2500 0 R /XYZ 90 405.0983 null] +>> endobj +2515 0 obj << +/D [2500 0 R /XYZ 90 392.1468 null] +>> endobj +2517 0 obj << +/D [2500 0 R /XYZ 90 379.1954 null] +>> endobj +2523 0 obj << +/D [2500 0 R /XYZ 90 269.8939 null] +>> endobj +2524 0 obj << +/D [2500 0 R /XYZ 90 269.8939 null] +>> endobj +2526 0 obj << +/D [2500 0 R /XYZ 90 257.2125 null] +>> endobj +2499 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2530 0 obj << +/Length 1914 +/Filter /FlateDecode +>> +stream +x诃Y蹘�6}鱓y瞾,他%}j籑�-赿邟 Pl鞿�/[Y�&�!E褦d� +�� Gg�"檆鴳沽s%2屗鵭7皿更jF�~經挌笰FR9炕w$A�:縖縚HD尿� +几[建ve轂nuQ]~納3鐒!�'�C煺亠w帘廗0Ig�?怡鈡3脠-��� F�:咄8e萆v鰊鰓坝辮\� 祢�Gp卾�0^弿`�`k� #劤Yd�2谸腫�-洟跂胫萴y\照cS鲛嫆 vˊ扝犰躮J麛\4]"D岙?謬%嫥j]圹鳔?秬麅靀6M�xn显�.齳�*鲭讻�>遬~怇!強尞6尻�郢E砮�*� +F�)巑.J麠仟.�(挃3黣哜娗莔�*\诬呡樨碐蟰毗Tl穇煹�.Ⅵ� �锂L{�)�/瀕�(槦=~Syt骺?x冯棉?V湚�B[� 朢,#犴Hlpx嵠泟�u冠礳�㳠峁!鉈訦JI淂磈b砪6)([啀}著v�V�=6��(w9謁宾7?[㱮鉤5�>獇印G柭mb -稅レsⅤ&|鷅バa⒄\(�(5鋌漺牄5�2mY� �=塔<4鍕�)R寬篡�亨7~+�gk珀6隃jU7湝幃�-爟)H槨�"捶�弝�饳X莢mm�囻H�(3&澅�蔈‖渏訌ⅴ朲焓鈞臁� d褛拆iIA兌>s峭岽]非燒乔rU}罉桛F�?з�翧Q{翵喐糘Xx7^裖-垘颲億)S呩糰E�銌c榖yk�%L� 3&7@s }m&�梄(g殶鞽g(c雒ST按莯戍祵翽駗繍�韴談�:P3魘曊煁ad矾:決 B#�9I`葊��%M簮/��7\)D9!T佺B曑� +�VF�虊� 尺嬝 藈0 牺-範 \JD5戦�}夹�(�磧4@Дr措`y贓S碖� 措挟鐈 +硪1岇鰅��歜j_P*p廔N繒v f+罼巚l +愍葶盾曽苪g组F R哋 4B噯�,欯9� � +穜y[4E�;�漥鄯_TP&竇绅玊� *X柺I廹*g黺T铢�-鄨��>��T鲽\ #籫*C惱]蒭z�L�7挊1 h掅p囮z锂鸰B畫"兊椘擫�$B_f)叾�*ホI=,唐搐0�z]`{ Rv�,'S钗擫;�;}瞜狢�S绖埦�#=<滦j嚆'X軒b�喴⒂冿@闲搑M麨?`�/W$匲N~�Y絑帞B� 樋SC爲W(呷+愞p-C庆买^�&摊>涚Qs迄莎カ╥�$択� �源栍�3F'�"纋岋JR1Y2`i"`�椋煲 s燺ξ;X拘#儵JO� �讂削攂OG1瞷.w�5k\鹌U& *鏭SX�26H�'续IMΖ!�3q岉^/{鱁R雝j旄_鴮!┩恾壥�>�6&骗C&N�1:Q�f菘u滂泂G鸰誰w徟畬ォ豝-3<� +�!錙$tX"﨨}秉,[罝鵪黺暹鬀-�撅 鍩塨d稺u(x7殌4в小rh�羖慆�� S饳8苬牋 凬' 犉�J─&`略�嶂zt�D钄t0/�W%嗑^r�8靻燅Nu絛j嬠鰝� 觅J�; 侢B3羱孈@髤ナ-N,/懥擛亪T 軷5理um桊�Fv馅黻岝f4[�$xP.弧赖�>�0�僻�"�3q岉&訟 B9I�?犉�隊悇 鸾�� 珘鈖Т粒墚痞\賶l癱X�$"诓稿揝嗸蘸�剄M&�=d宐|qC謭蒴麨=r�!逊?X篒d虞8磥\耽軛u裻莓�萘'B���/({Aq{抆]硎钹髕z龡G#苓=�=|P顕鴀hQ~�H9糴ndstream +endobj +2529 0 obj << +/Type /Page +/Contents 2530 0 R +/Resources 2528 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2534 0 R 2536 0 R 2537 0 R 2539 0 R 2541 0 R 2542 0 R 2543 0 R 2544 0 R 2545 0 R 2546 0 R 2547 0 R 2548 0 R ] +>> endobj +2534 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.9242 571.076 269.2362 594.0447] +/Subtype /Link +/A << /S /GoTo /D (a00157) >> +>> endobj +2536 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 493.9051 159.0804 502.7518] +/Subtype /Link +/A << /S /GoTo /D (a00130) >> +>> endobj +2537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 449.4179 158.5224 458.2645] +/Subtype /Link +/A << /S /GoTo /D (a00129) >> +>> endobj +2539 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 353.4255 161.5608 362.2722] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2541 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 255.7495 172.9881 266.2798] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +2542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.4309 255.7495 224.4542 266.2798] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 211.2623 180.7289 221.7926] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +2544 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.1718 211.2623 232.195 221.7926] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2545 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 166.7751 186.816 177.3054] +/Subtype /Link +/A << /S /GoTo /D (a00156_gcb807bd57e5489b386b876af5c1f163a) >> +>> endobj +2546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.2588 166.7751 238.2821 177.3054] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 121.9143 184.6543 132.8182] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6d71dececfce707c668e6257aad5906e) >> +>> endobj +2548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.0971 121.9143 236.1204 132.8182] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2531 0 obj << +/D [2529 0 R /XYZ 90 757.9346 null] +>> endobj +2532 0 obj << +/D [2529 0 R /XYZ 90 739.9346 null] +>> endobj +138 0 obj << +/D [2529 0 R /XYZ 90 739.9346 null] +>> endobj +2533 0 obj << +/D [2529 0 R /XYZ 90 715.481 null] +>> endobj +2535 0 obj << +/D [2529 0 R /XYZ 90 513.6142 null] +>> endobj +2538 0 obj << +/D [2529 0 R /XYZ 90 373.1347 null] +>> endobj +2540 0 obj << +/D [2529 0 R /XYZ 90 277.1423 null] +>> endobj +2528 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2557 0 obj << +/Length 2012 +/Filter /FlateDecode +>> +stream +x诘ZK撣6 钧W鴋螪,�"橻_�43椁浗宑踊歺%W柍I}A懺媧d�69�6? ��%k �蒢愕i朴觜a呑w痼�裼 �']繭帆^P街H�4]�k )A�壕=价h篗o絹±偘�.讚q鉥婟趿湔妡慝寨穽^o朻)盳�^禁 �`瞢FL+眫�/鷄�) _N�?9n0�;A伉�AZ鯣a灰m/ED �"�o^\髛m��WR�譣I坸YY^91U鯼树骟9+稤m塘'鳵曌}5teI%� 擱V鞮y�!7滿x遗莙崵Z沰�"�)C樿t`览� *諯xWo*� 橏��1s.叏碻�8�;跢\N慙叼� �至$D $�!<�|o�濍常u鋯骰��-2s@V� 6慲?绲篡#徑湬胎簗�復隣4盏�= 材猜K8n �O�罅淢~闰;忩芼翑 漯鮽唩?a)慠8�?�J酣8綌FR�i1d禇拊f柣S欜騶��IF扫�! :钉桟K$ &泎� F\冰�腥婊)G噤髷尘�濗�攤馃鳓��� 6Q霘竧@3a� �vG崞&桵絴&&s痕PD寿X$�*�饺�LY�衫撉錂P朗�1粯伸什槰b�;╥7奣"姤畐螂巛鸣d鎩8#瓲P鈪贽鴓穆q_�5駊�?镅>2�)膲�70iPK�#iV醭H)�訸 擭�<鄺訥r瓃�3u�拠]枱娾�剒哛傎B�x遗荅 捼ぷ{pA8tQ!偓d杭�1肂P 6豗HK�7"Dm�%�*8跒n_じ_樃埔eLM舳P罷]��.J鰢~l鞌M;�!2斿�a}籮 围匌泶圾綖%淵跭s,J� +l嗸N]鶚澕U鮞Z肂陠龉)=24躏C(竻5匹X�_1)鹔3覍镑p +繹M糈琁毲$�栨uQ�4徚@�4}R3f� s�,ob豯3基�7?谀鬞>狈雂t8&�Z�.j&:侫U鲿舡�6@7\�gF�摍xl�(o`mi硻 Ud懺"然ywaD� 诚9T亨S�"P�.鴶(鯐峂W梓�3瞤軡�-��$l9kx覡L姤-衶畝蕣■i�餕vDr繊轈2A�证A-XK胄{獋惂襸趴呡砆v�抶禠鈑薨D�9E忻Z>�S胁-�'�#4>�;筘矚蕋`B�{T瑇@�[竨z��咔� +X奦峯�?F鋸e�0樰_K葨猻髤磇W涎z呕�均诧鐅�#�CO腠彽 0鸫FZ_冴鉧6�� i紼帷W1 境~鉞�%^餓w寥駨鋨%�'pa镰�7'b�礰g ).Y邎.�'�3�&炠麉=坞鴔S�%j摾+�+歮玣盾4U�-彾Te哔P僮�.GI逍Dみ鯍浸#h2a絅,EZ谇qP�),�)mL�{irS瞠�*3ふ�0xe�5k�'~N賡��瀫b渾淭4o;�?<%饥�武cGf腒��)�*endstream +endobj +2556 0 obj << +/Type /Page +/Contents 2557 0 R +/Resources 2555 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2572 0 R 2573 0 R 2574 0 R ] +>> endobj +2561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [238.7907 702.6042 264.0158 713.4833] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 552.0997 139.4144 575.0684] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 552.0997 262.94 575.0684] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2564 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.8054 552.0997 416.0743 575.0684] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +2566 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [233.7 476.8541 258.9251 487.4443] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2567 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.5998 434.4572 435.3076 445.3612] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +2568 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 339.0297 166.2529 361.6249] +/Subtype /Link +/A << /S /GoTo /D (a00156_gcb807bd57e5489b386b876af5c1f163a) >> +>> endobj +2569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 302.8975 227.254 325.8663] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2570 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [247.1194 302.8975 380.3883 325.8663] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +2572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.9988 227.652 267.2239 238.2422] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.3063 185.2551 432.0141 196.159] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +2574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.5476 139.225 513.9963 162.1938] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +2558 0 obj << +/D [2556 0 R /XYZ 90 757.9346 null] +>> endobj +2559 0 obj << +/D [2556 0 R /XYZ 90 739.9346 null] +>> endobj +2554 0 obj << +/D [2556 0 R /XYZ 90 723.1038 null] +>> endobj +2560 0 obj << +/D [2556 0 R /XYZ 90 723.1038 null] +>> endobj +2552 0 obj << +/D [2556 0 R /XYZ 264.324 511.5135 null] +>> endobj +2565 0 obj << +/D [2556 0 R /XYZ 90 495.425 null] +>> endobj +2553 0 obj << +/D [2556 0 R /XYZ 208.4343 262.3114 null] +>> endobj +2571 0 obj << +/D [2556 0 R /XYZ 90 246.5665 null] +>> endobj +2555 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2577 0 obj << +/Length 1169 +/Filter /FlateDecode +>> +stream +x诮W蹘�6}鱓柩"喢o-�]燖汋[,�6�j[�,gw�綜憭u硿l,妵3gf巻$D�Adhぅ&� 3=汶O3�1吻m蜡速槈 1姪h供,( �嫋氙sE@.b&閨箑d烅m釃混〩嫹坯鍈$�实@'n嶀铐煦瞦xI过{鲺;嵵蕊~F 7墝^p@ 芒齃0^v硣贌�?Q- O0 -臷��E%扨H4f�恖<�!儕4青4Uh助鹩�)侩� ��嬟桘䥇郎{S<嚛/-朄5牙�M蔻汆樸Y築=鰀薿TR鼉Yi(�&善 � 2u搙�7J�!+滁2V致9��!啉_穌&�R紊奣"C閭&� _�/vc {X贀钳v疓藩鴀饆X麌S�ee玏i刺� 繅Z騽�斠鶑 胠茛鯃i�Kz*嬻1E(K扝 N45霧�|躛0斿衝S�aS zznPC区插X裍䦷_��艡 V�錒岂3QF阑~�撠敂I聮霵阝G�1捅yI�瑓逽k�朮��'\刪瓴 v�+魊洝�8纜s>休瓤e篌僧龥2骺昹蹸摞v昀浖L匛^FYpRnmXx.蠀%媂帞l廞O匩QB憿XM.� U6絗韃簮]�溈陈�"a勲�=V@法T熪!:T^瞉�4C脇 @� �.樐O�Kw绱瑳P~媠蓣7e�V%溉堞�祩&齢� }袏M颮m怎]J*A�冿崯]薐�卌嬘祄 +F w�=d淫@泹▉5_�9P">|  境鱝�貜�.�8鎁楄瞇倡壛�沣g╒>.ītT縪us變厹v\�幓I[�4撬:n侠胲縴藏{靧I_攟邯d鼮堚牕曑FM(k/昑�?睛蜰hx蕌u��猕5d8z詊`庘z�:jX覄H� � 陽雭5縮鰸廪虓�=ё#奋禚為擰(蕨賏楃区%+穛Z�罜1傔PK兒Aih璾杙g揪鲃搫傼僭4鳾<v'S摕笋�靍T咭K兒羓h捅蚯<熘F鹁$v�溩�犏�荒粔校}揊�#�簒V7��飈膴蛽H竝?賰-�堊9~竪9�苞Bt区�(U㱮悴憞~|s@�|z罂蜃穏;8驣糾庝�no�endstream +endobj +2576 0 obj << +/Type /Page +/Contents 2577 0 R +/Resources 2575 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2579 0 R 2581 0 R 2582 0 R 2583 0 R 2584 0 R 2585 0 R ] +>> endobj +2579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 718.3357 160.1659 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +2581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.0325 640.9795 250.2576 651.5696] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +2582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [431.0264 598.5826 495.3943 609.4865] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6d71dececfce707c668e6257aad5906e) >> +>> endobj +2583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 495.4786 139.4144 518.4473] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +2584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.4032 495.4786 262.94 518.4473] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +2585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.8054 495.4786 416.0743 518.4473] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +2578 0 obj << +/D [2576 0 R /XYZ 90 757.9346 null] +>> endobj +2551 0 obj << +/D [2576 0 R /XYZ 229.1564 675.9038 null] +>> endobj +2580 0 obj << +/D [2576 0 R /XYZ 90 659.5503 null] +>> endobj +2575 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2588 0 obj << +/Length 1530 +/Filter /FlateDecode +>> +stream +x讠XKs�6倦Wp�i&B�醄k'櫎M悠�%MA1�⿸T髯wA_"誸t鼯� `鴳@鉆 �4�2堶 |伹�絾麟6嘧慌席�4覓枢n[I� Jhp幅冈|郸!Vxy|�'\ +�$粙w冁�3铤&嫃{摉Q檇殛筝叟嘶Fom朻扻�/>~屏蘽焕堥P哙#�5 � N櫩�-n5r軏陜1�a泐庎 觜QpW9�$"r�&沐�.嫙�3IZ殀牌:�$�$@��$ R烁1e旍苔帀)�<9鴪� 謯磿c硪N屋c筛o菉啷蹬=*�獒#�S~3&={閫|"RH%愒�+鯱苵h诺怜�膏�=实帟赊湮朷驉G鵶��0R挀�=届6�+c� +v瓐襇/p嘳Tn硘镱妰墦O觴悈�1峬R>X"雬蚟環M挃��捛(}秊玄�3秳<}�8waⅧq替�1猠 S淢7兇h)D E垹捹L�H�r/K7g蠥冈={z閚P3V +�1顓L氡m�*2Kw项Y�鏳E柵誮袜洡蚊轉�1鳠貾 窹�!蟅D,�&熛萢鱍済/埽脒達�v慨<�&掖&痨鲥觖?nj芊悄�&蝦瓣惀O摤鏞a馓桯董�=ヱ\珅閑2揚Bc啋�&覂謒詐� 5聵A锢厹釜�5祔旬犬 @R?G:$.O癇�01ff沶 畞U孼1睖%>懚儽p:^ j4`瓍�2!$锤z�1�ダ溼�+G榪zvW�寉-g!?杀 +?Q*�9眐�詼^X�5柌黹@9桯QEz氏'葶缣鹊f�:t%7Xb〡繪=""磎O�'g簫 殏�蝶�輏�!k�坡�+ ,�0k�/�2杨V+~蒊襛遨幍鵷j禛鏉y僑岎 }i∏9�冐�1Uc鐐 y幏o`�熢x怿宆像庌�6鋂��>iBDO鱵妠鼫怪妀岛ORX啁v(]娙�x詼v+Ei/鯴`�&�菣D� z阙鑹阨`謷7���樲&瞁恶垅巴_L�讽汓磁盗凚9~炛喟I槪祰陀�%p娭觶Z孵:B�r?��扈?Om彑砫 穔蔂wf鐔p: jF;点a(z�/�6� +�_�0囱詎`謷爪靤鷺籈!-l`稑/躇��P働�鑖讦醮��3'� f3o摉r�j麽哆瀡楫颱�.]畇�<欙O輒b3R恂溾m怯]� w踘康/炽n�<鉮�Yl髄邠箯捲鷂�=b崯�苕崸�A�5W�鴗vzC+ 邁0 沆�07郳殔軘�<-δ鞣QO蘎v嗓 猼r杍N蟁j ㈨ +齼底謒Z湡�&�7�酰3R隢�桁L?鯏OF—捷�{�'%鶀湛�P岍�嗗2仕藁�R*L@c'�瓼喜0婬!�譨h钓囸 a濐)慥0=� +趕Oo姭堅銺s蠕冱蝊嫉񇑝勚�鴬�+Z燐R宔]+*桛榡x@靸~搣㧏锹黾v$J�h銫4endstream +endobj +2587 0 obj << +/Type /Page +/Contents 2588 0 R +/Resources 2586 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2591 0 R 2592 0 R 2593 0 R 2596 0 R 2598 0 R 2599 0 R ] +>> endobj +2591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.6865 672.5415 331.7604 683.4455] +/Subtype /Link +/A << /S /GoTo /D (a00156) >> +>> endobj +2592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.9692 654.9172 432.0432 665.8211] +/Subtype /Link +/A << /S /GoTo /D (a00156) >> +>> endobj +2593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 587.7333 161.7601 610.7021] +/Subtype /Link +/A << /S /GoTo /D (a00156) >> +>> endobj +2596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 531.8574 226.3182 541.7851] +/Subtype /Link +/A << /S /GoTo /D (a00157_ge3ced0551b26c9b99cb45a86f34d100a) >> +>> endobj +2598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 448.4997 175.7578 459.03] +/Subtype /Link +/A << /S /GoTo /D (a00157_g78ab77b57cf2e00089f0a3a22508524c) >> +>> endobj +2599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.4252 409.6454 214.6911 420.1757] +/Subtype /Link +/A << /S /GoTo /D (a00157_ge5b7160f2e653725ba5e2024c3cb7bff) >> +>> endobj +2589 0 obj << +/D [2587 0 R /XYZ 90 757.9346 null] +>> endobj +2550 0 obj << +/D [2587 0 R /XYZ 90 739.9346 null] +>> endobj +142 0 obj << +/D [2587 0 R /XYZ 90 739.9346 null] +>> endobj +2590 0 obj << +/D [2587 0 R /XYZ 90 719.4886 null] +>> endobj +2594 0 obj << +/D [2587 0 R /XYZ 90 549.8311 null] +>> endobj +2595 0 obj << +/D [2587 0 R /XYZ 90 549.8311 null] +>> endobj +2597 0 obj << +/D [2587 0 R /XYZ 90 467.076 null] +>> endobj +2600 0 obj << +/D [2587 0 R /XYZ 90 371.9517 null] +>> endobj +2601 0 obj << +/D [2587 0 R /XYZ 90 345.4667 null] +>> endobj +2602 0 obj << +/D [2587 0 R /XYZ 90 345.4667 null] +>> endobj +2603 0 obj << +/D [2587 0 R /XYZ 499.0115 286.0122 null] +>> endobj +2604 0 obj << +/D [2587 0 R /XYZ 90 269.2851 null] +>> endobj +2586 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2607 0 obj << +/Length 2480 +/Filter /FlateDecode +>> +stream +x诃ZYo�8~席0�/60骝u糅訾^lo�$,03(� -KI頛鲎o嫈hI柤h聒X珚E芺裴焁%|閳%*W汇 _=灭�aХ0旷�n僉V KB�� 匬0-匼=�^嘗D洯詜迗x]礥S砭n_gmC3E⺋踗玿�隓o~}鴗筢°k乓*弱鳑�瀚=堶閱3暷z� +蜠捜振&愂u姏麤tth�,樢N 5瓰孒u#_=六5鷣VDN癉kC靿詃軗c�纪�4/�=雇歖澘磞UZB�3;褹!Ⅲp萡U痏�3乸0轫m∽唑}中HZ�7/郜~聟�.mES蝴B3M�;櫠杺ヘ淝糎� 4�:葭╓Z恺]� *d:a�<搹u垐�2 猝踩�蠸u}cC阶:o郜のSUS兡侳U矬捥=RT!) 諦揺e惠坠�'臋\哚X0蛆5o置];S瀡高C:唕黙勝漐�:0殫F�&茬栖�'Q�z酛砅曬 *珫噒#拐桭虀瞒仰筱K�亖c�6緋/E舅-1p氈�:C^f蚡昋鯧=VUY糛�谦響A□瘕j飒蔡v鑓亭xQQ4�祗tN 豥悷む,I耙I�┫�湭�-鍳/裻縺矋誧簼5贑潵$!gI<恈愭,f墂癏呩9�煼�n康溗#4嗷鯽诤矟_8WF坞&詋顿唹�]� �紒6黎嘯ee9  +梮斾-蜱C麣��8Q�D缪b�'�砪 �&漾近砸lZ4暶ゥ]j砛]`煑� 录C[Y烴逦婧墧V@楡?ECp# ~}唬德d�"茮阌摊般$穉�咹�q匆R砅)5#歹Q鉰'N82蠷P澞PV狕煫6{7�*�朾瀖嚉嚯о媱�=5d�>邾悶`梔H噸眞繾熞燾R储37僅P乛瘴D0辔7� 芥厺4粓 @ 洅�7 {虉~銤{ 粉l赟迍泩�)椁褗糀Ny凈紸鷡珼淳�S�0Q澚翢裵���7鋧覅7R$鄠��"氟d棯铧戹膋k8Б}嫏藀礋P鯜}j玳TRS.�*�"�*G滎 }冦MVB]驦潁讦4廈W橉p��啼x刧� +壵� hkH娗糹 穳"平㖞R謬馋� 岻�! 怢_3驰q?B妉��殽z 璜FP膾>8荛兠�>8i 酕抶�:� T-揺槦曀h�<カQ睞)�F�'k�.坋Abr<�& +y疆O�4俈昃氣� Wm_ tp氅8譚塘襵M�t瑧z664i� �慸:�*P愑礣u縛滫苩MMt�黠�杺I艓斂U�?|见孏�9倖�鈳G<�+"g眾С�m=訢r�澬"閔GAK竽�O炔�4UH? 琏鹺葝7鳷苹� 鷅Jb^鱰+�裔<蠀琔璙冧l�>Wpmj�)vv偦d�'<嘎咮�饦疟寳猦囘� &*�蒉c>钺扥�(d�6�3jI�5攤M= +lE靐�寧鸆^尟 _)-權牝媿槳%B�8栝�NJ=產皓B珁�j壇X隆�?缢�,�g�務愺E阻餕2岃欿�;寗�{S筅k怕X�>肔X*b"皞騋$姐h緜;W.濔f婎�ㄍ(l駆U膞萾U��8m ,魵嶗椾丷孖晥+咓休僘锾鄝2憣�!U欠t緜$鱩}诘'髄6樨2LX�! .9�榪�惰爻{荿嚯麑oc�;v麓�3鉁髮c[鼟 #簼c�Fw郄�(�9%�C�%.飴�聏iolyo<俿{3戏�燂肄渜緁o鎒秧鰂渞犉� rf曌p侢搸  稆g:雝剥]晜-l望4复OΚ嬞GBN�月COg憖閐Q錾0�晸镕D +�7阋>`匹;丌K蟫靅z伅s�3�赱MG虄怑2鏃节釛�秧幌w鉰O酳G2o�道}L�=D嶚B綱��(翋钆‵焻,PK孏詯駑饵豆钴OP|z⑸�昅^媗� �!夢u1椋g2KCy锸煀A��)y� f\� )猩i幇酸�4噝﹍頯酸�� 鱵綸耕|��3孀匊�#簘笡涼鴒$鮽y+t�鯿j�v[G<怪~Q�!菟�@�$T笭篊-1Q唱_巀 B^�v.r 剕镯3唙炯磧肾@誄j_ +蝌,螓粉KZA廊P��G–墵倄閌'詒淸軀旝牂�8.G赶鰥鵀`@硰睇無�nb排溾f栵愐鍫VLQx澪z烑�嫣� 8hg誹榶�J蘖嵪衈橙施莀�抸B +珼Hy淇寜�*峥�&珢%緈>鵅��2@w+鴽k|路嚀�i奎漈�$�<碮 斒>]衞0网鈓跚踫V蛢?铏跋�]劍Qendstream +endobj +2606 0 obj << +/Type /Page +/Contents 2607 0 R +/Resources 2605 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2610 0 R 2611 0 R 2612 0 R 2613 0 R 2615 0 R 2617 0 R 2618 0 R 2620 0 R 2621 0 R 2622 0 R 2623 0 R 2624 0 R 2625 0 R ] +>> endobj +2610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.6232 595.7581 261.9762 606.662] +/Subtype /Link +/A << /S /GoTo /D (a00142) >> +>> endobj +2611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [471.5956 429.6401 513.9963 440.544] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +2612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 417.6849 128.067 428.5888] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +2613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.8032 405.7297 277.2062 416.6337] +/Subtype /Link +/A << /S /GoTo /D (a00158_gfa11b2a1faf395ae2a6626e01c482d5d) >> +>> endobj +2615 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 348.9505 161.8402 359.8544] +/Subtype /Link +/A << /S /GoTo /D (a00127) >> +>> endobj +2617 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 266.3068 181.8351 277.2107] +/Subtype /Link +/A << /S /GoTo /D (a00083) >> +>> endobj +2618 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 253.3937 163.7728 264.2977] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2620 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 170.75 204.7292 181.6539] +/Subtype /Link +/A << /S /GoTo /D (a00158_g26ae707402e494f3895a9f012a93ea29) >> +>> endobj +2621 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.0542 170.75 231.2894 181.6539] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2622 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 131.9725 215.2497 142.8764] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +2623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [216.5747 131.9725 241.8099 142.8764] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 93.195 210.8263 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00158_g70d236d1cf34b4e21836edda60247b70) >> +>> endobj +2625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.1513 93.195 237.3865 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2608 0 obj << +/D [2606 0 R /XYZ 90 757.9346 null] +>> endobj +656 0 obj << +/D [2606 0 R /XYZ 90 739.9346 null] +>> endobj +146 0 obj << +/D [2606 0 R /XYZ 90 739.9346 null] +>> endobj +2609 0 obj << +/D [2606 0 R /XYZ 90 716.7484 null] +>> endobj +2614 0 obj << +/D [2606 0 R /XYZ 90 367.862 null] +>> endobj +2616 0 obj << +/D [2606 0 R /XYZ 90 285.2183 null] +>> endobj +2619 0 obj << +/D [2606 0 R /XYZ 90 189.6616 null] +>> endobj +2605 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2632 0 obj << +/Length 2761 +/Filter /FlateDecode +>> +stream +x诘[飶�6�頻犓�7﹡K矝\r�&冯"碋鄕祷F絭j薓筮逷iJ�8贻p�7R汸鴱M +:1蕫BH=Y>炑�=~u期猁�饇~鲚K^L +Rh�'蠡欰3�8銚O覤衔攻哊肎E墟�圹煤l>_l棁莚S-v3鹐靣t郯斝泰鲇/tr 峤9VM纠敯⑧撉3蓞�c}vs鲲烙|Q�嘣�$U� +;9绂OJ缹�4噟p结!奛,黒K�_RS貕G箿軘涆f苑媕A跆喠o檂�0�('�6Q�>kT@浅&⒊凄[)瑴構骻蜺鼕+1� O$a篖拏j菡饵橰�)q〾釂跄軼畸s囜馲 � 泯突�鷛syu耨f~輳� Aㄥ&焾�B"H訇@Mu酺Av奇 嘌.傁蜃$U-瘤{&湴9醥冹�$� YD淧8鑼U誆笙姘^焀孱q礩T錷s倒�15t扯P鳏�峦l型Z[�$垱 usL榪3㈦蒈雅蒈醘$寗麒鎃梂椬蟜尡閨旗糨um痄 +7俋楫匼^ + (e4穛�cS餳}轆s J�E~��懝锼M筟T圯LRl眘у>kz%罥t漪0�+榮38�8Q7熅嘚A�;l杣右翦b +仟. +視}f灕(J攭秤E撩稷鎶B^7匵wDQ鑸�) +�0辌Qx聆萃ebE�� 焻�B銼读�,裋郾 x4�>镳�.溭B"C�(L8ak�>lpα敳i��3竾9�腠眷给3!5軻[H葘娱�3F乒癡`L?塹4歓�70愿1a聘埉7nG7nW|剄�0蓿q�/焆W詸/�棓0)F鲞1:gq带缰咣渭��\.W瞠鮇癀脎M琝嫿a矯蘆�$沴 +z m屄填a纲#聹袤毫毂�硍那�=F聓4麉[鷈y!ο轣^ヶ矰rI ($殧mxFg�;6庨鱕3瀲觛〢祈Q榥聠舞�f倘n?杺阛Q祴衽>达翷KgW勖~9�^�鷂 :烩I鎧 m奱 脬 �L槺?㈦磉雅磉a$寗鱤���紴'梷�蘵> 叏僾嚧ZNG�?嘌脦w74啡�= +N�0荎-�|d�3�0賩`�73靮愱鞯恬4M紕婺H�5��;"�;��霂0vG|尡骯$冀澋遇v;熜蹑SPH )蹱�!ZM哓,<A焪剞簚芠id�� 'lń�&�i�澇穱淼逓y榫KS刐�4{wc)烛^"耚i入喴霂( �1�!F�往'詈Q�" +Z鋝P坸�6<�饭%�?嘌�)��C嗩Q榩聠�a-x傏q5!FgjB�9鯆r筤碷z邹酕檕�夗�1D&特氧讹桠讹姀�=F聓待斟嘾�?粹捂$蟊$\盟|E≧jl2 犗沋閮_ +藨亄&湴@Q"榖#婡勎�儑驳r��~S/芸糇�~u控鞻葵 緋籷'D崥鍻S犽辈`X�0� D劰2愖 e �Q:鈉蔃>寗鱔>�湯g細縹{ju 荩樫|H蕱[X誓豑<A焪�J〝热[&坨姺涆晎n%[�B#� +1:W<蘀骯V痖路}糆/填 糺w(硰� 蕡(▇拀}崒礏"60枣1a奇埉穣G7ks n靔g]钹X}諷��虞�;当 �薵#爯@R禔�+C`苀"嘌�&钒V�� +N丶系睐砷鹹rn\烚铪w*aRR(F&,鄳窼蘖処�-wO'gP榩�稦呓d2+垜; 圌[楺母b667弲橉止�}+爒Q銳 +(L5a髩i�&wy�u盥p �%猵彂0Yj浖沐v�(/& �;�7浭uW�宝憏�>H�?聱�j饫猫u墡�韆x壩(篬h0橲瑒�岴 +y輥閺砷f耺)0� �YP儑'�;(8C皿窷x礛?篺}]&/彀�j嵧煼��( +r鲟R蹸艾N=ā膏=蹯�5�#逋>╝�*� ═窼倄}3C珇�8箘I�3s[嬊啚餱�6�6U刃= +N貑V碑JPK$橣.洫剣酻"�5ry萼�Xw�bI�/墥荟t�-铖X 镅庑IrX溩蓑逆0I1, - +寠^r&桩邠cS餒)o�9��,?|Je{g0�2�~c颃4礴囐尾LCo瓻w枀袮�3儖撘閰_+渵橱n'�'n�� a-譹酫�5k�鐥痎_漗iS鲯暅0▉躧儺碵鼀鼉酏訑7s%韰愜噆Q榩轮�);'V灋5舞M地�7繗江�锄`醢 仙�6'逫穷剂櫼\述q泎魆避m洀{'�n瘁CW,�瑟}颩嚄a掃t鈛扣�弴}{h箎l瘵价钰蠣V?珄側從_喈D.蛛}7!o葑r�冞?8焖鬘亄蜆侚蜕(�?轅甮!雟D泮SL4)�.祘c娀!胱汸� I亲 ~�薷綈C�沩眶{.剧硭职扪mf\=叨ODe_镉諲A�9懃�s�6Fendstream +endobj +2631 0 obj << +/Type /Page +/Contents 2632 0 R +/Resources 2630 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2549 0 R +/Annots [ 2634 0 R 2635 0 R 2636 0 R 2637 0 R 2638 0 R 2639 0 R 2640 0 R 2641 0 R 2642 0 R 2643 0 R 2644 0 R 2645 0 R 2646 0 R 2647 0 R 2648 0 R 2649 0 R 2650 0 R 2651 0 R 2652 0 R 2653 0 R 2654 0 R 2655 0 R 2657 0 R 2658 0 R 2659 0 R 2660 0 R 2663 0 R 2664 0 R 2665 0 R 2666 0 R 2668 0 R 2669 0 R 2672 0 R ] +>> endobj +2634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 703.3528 234.079 714.2568] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb0ad55aa96dd1d200cd0fc5a99f6a4f7) >> +>> endobj +2635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [235.404 703.3528 260.6392 714.2568] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 665.3872 274.846 676.2911] +/Subtype /Link +/A << /S /GoTo /D (a00158_g10d9a9201cba1a6db623284c475c6cea) >> +>> endobj +2637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [276.171 665.3872 301.4062 676.2911] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 627.4215 216.3655 638.3254] +/Subtype /Link +/A << /S /GoTo /D (a00158_g5d56800f82bfc7bbf53bb4a659589812) >> +>> endobj +2639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.6905 627.4215 242.9257 638.3254] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 589.4558 231.2097 600.3597] +/Subtype /Link +/A << /S /GoTo /D (a00158_gd895ab98c54d9966ff554aa873151751) >> +>> endobj +2641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [232.5347 589.4558 257.7699 600.3597] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2642 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 551.4901 225.0331 562.394] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb5d9c0becf7cb32d0aaef466839dd92e) >> +>> endobj +2643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.3581 551.4901 251.5933 562.394] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 513.5244 229.4168 524.4284] +/Subtype /Link +/A << /S /GoTo /D (a00158_g4ab2de595d36e9e55dd61f6ecd139162) >> +>> endobj +2645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.7417 513.5244 255.9769 524.4284] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 475.5588 207.4989 486.4627] +/Subtype /Link +/A << /S /GoTo /D (a00158_gfa11b2a1faf395ae2a6626e01c482d5d) >> +>> endobj +2647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.8238 475.5588 234.059 486.4627] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2648 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 437.5931 244.0317 448.497] +/Subtype /Link +/A << /S /GoTo /D (a00158_gc7cc1dba1819f7fcdaa9ff9eed5a08f4) >> +>> endobj +2649 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [245.3566 437.5931 270.5918 448.497] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2650 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 399.6274 205.2872 410.5313] +/Subtype /Link +/A << /S /GoTo /D (a00158_g4a264bb64ae706d53f572b1d9e4037a2) >> +>> endobj +2651 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.6122 399.6274 231.8474 410.5313] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2652 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 361.6617 232.7343 372.5656] +/Subtype /Link +/A << /S /GoTo /D (a00158_g55ce98ea4d6f22e9d5068b904d4d2447) >> +>> endobj +2653 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [234.0593 361.6617 259.2945 372.5656] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2654 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 323.696 244.4801 334.6] +/Subtype /Link +/A << /S /GoTo /D (a00158_g2ebfe5c8a7f3173714efdf2df74fc392) >> +>> endobj +2655 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [245.805 323.696 271.0402 334.6] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2657 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.8747 285.7303 255.1444 296.6343] +/Subtype /Link +/A << /S /GoTo /D (a00158_ga87ff36af81990e6ffe20d76d5e4606f) >> +>> endobj +2658 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [256.4694 285.7303 281.7046 296.6343] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2659 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [432.9613 285.7303 458.1965 296.6343] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2660 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [474.7532 285.7303 484.4966 296.6343] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +2663 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 217.7672 138.5977 228.6711] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2664 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 217.7672 198.084 228.6711] +/Subtype /Link +/A << /S /GoTo /D (a00158_g3178402dd725776415bf9745e7bf92ba) >> +>> endobj +2665 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.5269 217.7672 251.7621 228.6711] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2666 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [257.2416 217.7672 282.4768 228.6711] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2668 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 205.2601 196.7092 216.164] +/Subtype /Link +/A << /S /GoTo /D (a00158_g3b19f65e48079d8105be2a99b5b4b2ae) >> +>> endobj +2669 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.1521 205.2601 250.3873 216.164] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2672 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [239.0101 147.2581 265.361 158.1372] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2633 0 obj << +/D [2631 0 R /XYZ 90 757.9346 null] +>> endobj +2656 0 obj << +/D [2631 0 R /XYZ 90 304.3794 null] +>> endobj +2661 0 obj << +/D [2631 0 R /XYZ 90 236.2728 null] +>> endobj +2662 0 obj << +/D [2631 0 R /XYZ 90 236.2728 null] +>> endobj +2667 0 obj << +/D [2631 0 R /XYZ 90 221.7522 null] +>> endobj +2670 0 obj << +/D [2631 0 R /XYZ 90 192.0859 null] +>> endobj +2626 0 obj << +/D [2631 0 R /XYZ 90 167.7577 null] +>> endobj +2671 0 obj << +/D [2631 0 R /XYZ 90 167.7577 null] +>> endobj +2630 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2685 0 obj << +/Length 1701 +/Filter /FlateDecode +>> +stream +x谕YM徾6禁W琛6P1�縭K瞡癷歭 +牭祂#矔Jr7K姢,嫈礇�鴃��<囷�2姞鸂H聢S$IX崔蟕t_螑}q奏鵭鲣w,# $�,Z�4#�6� 緢1咉玶伳绩嫪X^ 8详�<蓋譭Z�/b筁鎾/>甞蜄�6畢E C:昕�a碤館� R需N齹I墸�,聊g飃祣虄f@hv V3圖1a@ �� ��@堚p"�qB�0i瞦ョ潠�>瞶跓'�p俼評�x@Zk塲瀽 �G劄糺(_�2h4�=A �8wV�4恘pB� \��RX斟q]� +詣蜾w攖FS:��1: 憳Es6熛bwP�6?曷~o3<+萻玨kT読Yg邢敨&绸r閆 � �*_ 缤d朹育�<,4荷K�3軸挹G镂嗜朑! 昋k�!n�w艌;�$5�/颌查K僁e犟@�1+沮顢�"夌鹴]之lwj�<襨灘齝��(ii"4忩<砯7e�7]捷�1 倍1阭櫏洲Y躮w雖雀韧 I┥H綶`:�o佽<�櫂*礗倾L艿fb歱恅�酕AC聧H侣輾=L窯硃n? A�> 䲟 髦Q墚 +Ky�啎<�ㄝD请5R?�9�>T汕B?Z蓕凙%o�ヤj晐B咦脭�<舸扥�鑬漋蜓狗J>煮5淞J� 齫JN&朁域锼UP喂ZX(e�$"搑铎泐��獄~囧\� �】X蝚*扮mL握歒瘡掦S�7峀塑譣=蝭�.(漌滸FnG�谝 Z2W蹴繠琄═|难8雟瓎Y梡}烀鳴�0②挵j穎S硌,淭跲CP迪��鞨& 扅�/~啐吺.�%c磜� TMR淫j!誸_/�鶑h:%"(熲?gwh润;�\巍霢梵煶� +靬轿绲�+服yv腑风K��&�9�9帳-梔�%`W+}5複S孏挅裨鷷Y},哆V�-*召燫}鯽釶5] *誻Bズ=T世\{t隭�俘"湭嵠氮B�*�(捴>�饂匡穉力~�-焆胤簂蔸uQ%�2榽o{帾�捲YM`I樉絨t帴(MZ ω�唾崺今蛑�訟樾g)鸥rt寙�c脘q�?�}a賞VS嵄淒盟@P3簯顙薅�7z_�2 )�8H 翥襱LQ杘.� +傉9�#$�`�&馁禽"鼽+圸U,階�+埑� +靬U婕v�"[鏸欟> endobj +2687 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 680.7395 162.0093 703.7082] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2688 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 680.7395 210.1583 703.7082] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2690 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6739 621.5426 267.0248 632.4217] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 495.0915 162.0093 518.0602] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 495.0915 210.1583 518.0602] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2694 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [270.0136 435.8946 296.3645 446.7737] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2696 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [253.4163 297.3671 279.7672 308.2462] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2697 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.6802 255.2592 460.6174 266.1631] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb5d9c0becf7cb32d0aaef466839dd92e) >> +>> endobj +2699 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.9319 147.2581 254.2828 158.1372] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2700 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.6929 93.195 231.8468 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +2686 0 obj << +/D [2684 0 R /XYZ 90 757.9346 null] +>> endobj +2675 0 obj << +/D [2684 0 R /XYZ 236.6686 656.6872 null] +>> endobj +2689 0 obj << +/D [2684 0 R /XYZ 90 640.0288 null] +>> endobj +2679 0 obj << +/D [2684 0 R /XYZ 236.6686 471.0392 null] +>> endobj +2693 0 obj << +/D [2684 0 R /XYZ 90 454.3808 null] +>> endobj +2678 0 obj << +/D [2684 0 R /XYZ 236.6686 332.5117 null] +>> endobj +2695 0 obj << +/D [2684 0 R /XYZ 90 315.8533 null] +>> endobj +2680 0 obj << +/D [2684 0 R /XYZ 236.6686 182.4027 null] +>> endobj +2698 0 obj << +/D [2684 0 R /XYZ 90 165.7442 null] +>> endobj +2683 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2704 0 obj << +/Length 2110 +/Filter /FlateDecode +>> +stream +x谡Y輳�6鱛a�晛氬法煎歮惔椾阐P燱Z[k胛東捾憎走餕朌I轊鹯X`I撁欋p�7C�,1鼞e倵眻Q赂\n� 架琉�q觡榑w 傍礼�,擧*�O唭$HPB�踎T�G鐆煚+pD稘織垠!除7彐|虋&m虿X饉q餍蕌j &墫鸁暖酷�詛坷�%J,柯孒捫錻�)�?孄�?Z>v�,�О3E豶�$R$幔TJ LT 啝"韪!T�0f�2f 瘤贡僻罳Zデ誴�S3J梋謂丂憱:�篧M嶲L樃r摘滉r5鵺�肏 )F暩 +鱐#f`]酟 舃�﨩,p軹鏜cO_+cG�;�C2VZ╙厵%陦圉�<� 栫k呛� 0洱褦;�;UeS醏姮ACc枈!蝑<�]猧彁�$疏{鱃z<睮_ 尝椭9t蜏﹙n阺蟂�宧绕<�%�*畛谩\�*mU!�1溊瑧<�-喖�哔肑媘 ZQも� 崛o)1洫暔復)�;� "捨镙�鹨b岾傛谋寬襾霙 B�沽Lk"P嚰p唯皾蛏秡塆]wh廫Tu�悶Q陌4�$"1�0幘賈蓭艇麖?孱梬:�*刓J +麙V'━_w勸蝓�`I聮� +胏騎�躗� � 遱�睒p鱵3廍弋剤晡T朝瞭k�NDR� 穱}�)9弾棣*mP飿i摴)+:nv栏F@qU�牮3漽_��/Ⅳp,kOp袖(覌8炿汰� 踤殊_鏱泱劫A塸)鈑揿僪'QH&H熍В輵�#�>鋔2祋�~䎬�n{鈯悂:C荏T反傅�?枑剉~落|B闞M'$�9`嫴xs�9wLu9潟驿�8+卝巉lp@-驅�呌旴獃�*恉Pi琘 �'嫱��"V诽姟��/纕址*?2⑸x遄�=Sbを �0Z��遀~.攁r�#:T��Ad砱V~sc�1謷M�<剄�螃i﹏I竨�顈即辍IU=馶阵鲱幂缱獶D+ⅱ彑寇遾x3V18W罤糳 p昑�8粬~輂zW葁�b )(088GsK鑰S遝EVY�跂顣齿T岲檿侪愞Z6呜鄞Im�柀m瀨裗L|/煄npOcL纾籏5輰'圧羅匃c +锑}犐8薹d厦鸜+\�>4�(搠�鶶 |5%埅壖�1O噇�<濴kxu住p#!讳B=U(紀Q使� �7蟄稻Z D!辙睷噇蜫濴+歏籃,lD"n堳T∝緘P燚S}悲+ �;�4鴕#檱<么桜躮I%]鑀蕇受鑉L亷茢�涬 �+"⑦�?s�0b5捓货 c+]E洿�+�% ZwI�)矺忶&=.v离8ve� +�GO��堅繘*-阠^�+羦�K�&V7��)u⒃@^祆纲崬疖惫灵黧q�蜲+*ⅶS�◥砹p発v譌分鎧q昺蠜蘉iY#�*2m巂�滰&�砪Y]VRDZ&a 3�31\��/nu5� {钾諾�腝z:�,oAaC婴秈KN钞籍镯蕱8暬淊.讃猖�3Z�3�5楒c鈿郇�.�甜Jq �艗揫2瀪輂0騸鸾^診橠 辘盵嚶嬘�T>貃�妳�:5&墋Q�#簟憔镟烇啶} �3簈k毩b鉗� 适啀W佴裶�)MLu棡笥p8u@?py巙m�(uNU譁�煈P:d盼鴬"�4V你頹礹峐榋k璞.�*颐Ob}Z韠� 6A�BF灃`饜^,z�/锍b澳11U|U7c徜 葫nP +柵茀艙O�5酞�髖榣貌冫粎绡�(韭耒_LH蜃]L攒配輫夌X� 瓺 咲涇 +~O绢袕級刮寂2�8g}S�#�!u全s q瘼c鍅�柱抽'[/絳!y6=篮搋c瑔z喫~橒鱕萃[~n.礛!f�9崕缵 =f鄂醘莟薜}% 紹烘蠶.骨紟fi�:k?簒;e沑{_VRP^溛M响m侯呪硂�30APp�>L幞﨎"錈鶥l緋+XBX锒'Q霔<}駞匼襐曨]蹬�佦u辦�9�労竣�u�)埔F浬'黬䎬馹����呄槙�?hrrendstream +endobj +2703 0 obj << +/Type /Page +/Contents 2704 0 R +/Resources 2702 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2701 0 R +/Annots [ 2706 0 R 2707 0 R 2709 0 R 2710 0 R 2711 0 R 2712 0 R 2714 0 R 2715 0 R 2717 0 R ] +>> endobj +2706 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 680.2836 162.0093 703.2523] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2707 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 680.2836 210.1583 703.2523] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.2593 620.4508 257.6102 631.3299] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2710 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [109.2077 566.739 186.4774 577.2694] +/Subtype /Link +/A << /S /GoTo /D (a00158_g5d56800f82bfc7bbf53bb4a659589812) >> +>> endobj +2711 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 529.4341 211.653 552.0292] +/Subtype /Link +/A << /S /GoTo /D (a00158_gc7cc1dba1819f7fcdaa9ff9eed5a08f4) >> +>> endobj +2712 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 454.077 135.0008 477.0457] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2714 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.5354 394.2442 327.8863 405.1233] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2715 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.6755 238.611 418.4257 249.5149] +/Subtype /Link +/A << /S /GoTo /D (a00158_g10d9a9201cba1a6db623284c475c6cea) >> +>> endobj +2717 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [228.4897 147.2803 254.8406 158.1595] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2705 0 obj << +/D [2703 0 R /XYZ 90 757.9346 null] +>> endobj +2627 0 obj << +/D [2703 0 R /XYZ 236.6686 655.7754 null] +>> endobj +2708 0 obj << +/D [2703 0 R /XYZ 90 638.937 null] +>> endobj +2674 0 obj << +/D [2703 0 R /XYZ 236.6686 429.5689 null] +>> endobj +2713 0 obj << +/D [2703 0 R /XYZ 90 412.7304 null] +>> endobj +2628 0 obj << +/D [2703 0 R /XYZ 236.6686 182.605 null] +>> endobj +2716 0 obj << +/D [2703 0 R /XYZ 90 165.7665 null] +>> endobj +2702 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2720 0 obj << +/Length 1889 +/Filter /FlateDecode +>> +stream +x阱Z輔�6鱛!`/60滁啪礛Zほ�,u褔�[幗)�'薑晨~G墧%QN謬bCQ垨Nw?�飛C< �埀�'匘妐遊轒皐 愤L坹<囩蠛浪配賙�<厰O}o�.4� JǚX}烔埲贉 +<教f$槮y篛��濬|oo�0{樛枈O暁}Y紳�/*�朻>裋�渱䝼�纚;翀〡x黟#�躅&�2�#瀨橖Z�)/t蛶S榊@�7g> +堚漅丂�A "D衝G +a踏'CXb^x鉘�;搪�(彶�< 2J胶j �RI籋`xDB癉�0q元§ �哘 |� 鈎躂u竵諐3�&儲襁袄�<;,�2vEN恎� -騟爫杘aV +5L�2hVF怰� �:�&囔騁灇�&2O矲B6屝6冁�0撖瓃"F<�!-簼eユu薄HY1=庞肸癁u3sCF�(厱rQ碆&岭X5Q钀-7a�%J�愱鉗釵嬕6�Ll�3�:蛦脢z面R婓懓张耉塽噈� 徉l畦+�"i哊@� o!选;$m l�C鞍^+�}r剺:畹%�Qp璌踝Q遟園窖:�揄猕穩扐薝&萧濎�<簀D逥� 雽��7Q{�4媁h锧柲P�}d吰 磚i?栣 +穐岔G�1m�宁.吖s嚽K:�詾u��d�8移`煣唬鬆b�/G�%ed9证�#篚A飑'C�}傕"�> endobj +2722 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 648.0568 162.0093 671.0255] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2723 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 648.0568 210.1583 671.0255] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2725 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [256.7339 570.3345 283.0848 581.2137] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2726 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [260.0953 528.1725 365.4795 539.0765] +/Subtype /Link +/A << /S /GoTo /D (a00158_g2ebfe5c8a7f3173714efdf2df74fc392) >> +>> endobj +2728 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [259.9318 418.3349 286.2827 429.2141] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2729 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 364.5914 154.6371 375.1217] +/Subtype /Link +/A << /S /GoTo /D (a00158_g26ae707402e494f3895a9f012a93ea29) >> +>> endobj +2731 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [254.3228 266.7089 280.6737 277.588] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2732 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 212.5917 154.6371 223.4957] +/Subtype /Link +/A << /S /GoTo /D (a00158_g26ae707402e494f3895a9f012a93ea29) >> +>> endobj +2733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 120.9622 162.0093 143.9309] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2734 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 120.9622 210.1583 143.9309] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2721 0 obj << +/D [2719 0 R /XYZ 90 757.9346 null] +>> endobj +2681 0 obj << +/D [2719 0 R /XYZ 378.1965 605.8182 null] +>> endobj +2724 0 obj << +/D [2719 0 R /XYZ 90 588.8207 null] +>> endobj +2676 0 obj << +/D [2719 0 R /XYZ 236.6686 453.8186 null] +>> endobj +2727 0 obj << +/D [2719 0 R /XYZ 90 436.8211 null] +>> endobj +2677 0 obj << +/D [2719 0 R /XYZ 236.6686 302.1926 null] +>> endobj +2730 0 obj << +/D [2719 0 R /XYZ 90 285.1951 null] +>> endobj +2629 0 obj << +/D [2719 0 R /XYZ 236.6686 96.348 null] +>> endobj +2718 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2737 0 obj << +/Length 1898 +/Filter /FlateDecode +>> +stream +x诘Y踤�6诀S谽怼fy)┗J洿K乏Y�!m(� 暐L枟朕}?ERN Y烵冡q靫蹸s�mg毓呑ogD//a}i^璮/扌� P ╬V7A:�9義堡�削х鹑駵 �掮雧�<趏悻 �$�_V飂'珰睎�3A$劭f熅`g 蚪沘��;黟#再蝄侍弔v1Γ� C阸��厽濺O �!�],AS<�i茦fZ��缓89;䦟9頹EY�\作j姇Lrジ諓彇t5|i猁雳J9飗y舻莀0溷麕I ��%沈�2�:,C�1�30憿 f裍O尝.bn牗\馁嘿嶄> 癏P桿愓&偕#髆箌捏煊o錐鯏/��-�� �&T杌"/笫D香-柼8Vㄎ蝉曹q竀/甋@�羮V&ゝ懄m9饇j旬�8SO oY+GP拦�?4闣:逻痀緺|~煩焑n�臵7鮂訂�"庘DnR藲圊儲皦 l洍秡~覣璣�,庲,�#櫗�X>G楡 +E"H0Y创Q��1Z� Bm�5`;;�/驒绶櫵+媫T*熢i q�!狴挬趨貮�(稹 $iE驢撐摤茒�:*�"cn疰~揇�&澺憁坁k�2%懈k)C渀鬲岾-財K L阇壷錕9r��5�>邘71r監踻�7X 8怰( ���馗\勫�6鮵p�1l�1f i>"<8繷凓屰瀜".fm埔3鹟椳f�- 瘜A港r3R9焞bS1a槀.牖觘誇崡U頒d10碩箐[附K銐�:藕 +?樬�病╝R妮都CQ?\P清应㏎�8鳕I蝚鯴簡�仪j闗祌爍p殬Y恱~;0�3齎�m愇j跾00姲pyk鈊�&潍嬚橇㏒蚸葬群亀h�4絘t磋��>洧嗉#Bw�4–寋袁�恒杓鷍�$潄S'k禣�%蝝拝 沝罚阹桕$犛jF3�恵灋u;� 0Q寋� �龈羐� +袜�7绵嘤b~�#尤x痳�8>9蝎l財y �*Te裞K|D檛�$[冴砿FJ:\隢�鬇s伿鑒F祗o鯵詳4sTj孧�忲懮83耖T睶悌�O)�凫�p畴K8仂j�q炯�蕥t=绪癷#�!捍�**O�08鴁譎銌叙CBt⿴鱸婂A圢雗@伥hY �M偸`漶 ? Ok震荸�� p�?:]]齳�:齷帮{PHY@�其窬o餕{聾�睇 c2搸熣�岥袁垗騦]ygSb肛��r醿+鞬s嬘T細lg|/鰍鏽�粵�/妶畤C譏�R 谳臦"�k�-�4虜<2铔K,%@�#.%坬WF� 滰�AQ銞鰡~B蹰V]粖粘撍銋+膝剱鵭谤� X�)[>y#�m枋vZ�胠JD�8 +硋?茱L�2�2谀绞�:y!咪礫�(卽刀3�骊m鷤膭OU�!晏H倩釘Q鵳桪a�>,7A^譂贒桬囱*4�<噕Ri裲zR +i!�攵k釁懔� 襃轊�}碏U1昂Z皲êW駈遙 l輇U�e�@,pU泾筞掖荤j籑狶秖5�9濦+彛T鞰8J-腶裏 �>圐S�涭浏N逓濽奍:吭^鮍@ w侏貴�:Q帋廣G5跌ホU.)馐喌谻鞉 i2笑坌洞�ZI凯>貟>� у靁胾9谤_厤覿|��&�4緬}俦􆗡坳�.烬芲①啐谼犨z冞腊#�.烎愭�耑�?姑笰�齔)贳8媼f�6]杞yx'嬓^�愡お盔%e/銯1�菾愲奔�m蝲8慰=荟镘d�耙�錯ndstream +endobj +2736 0 obj << +/Type /Page +/Contents 2737 0 R +/Resources 2735 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2701 0 R +/Annots [ 2740 0 R 2741 0 R 2743 0 R 2744 0 R 2745 0 R 2747 0 R 2748 0 R ] +>> endobj +2740 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [238.4524 726.9533 264.8033 737.8324] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2741 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 567.8253 135.0008 590.794] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2743 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [262.8109 509.031 289.1618 519.9102] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2744 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 370.1174 162.0093 393.0862] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +2745 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 370.1174 210.1583 393.0862] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2747 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [274.8955 313.1712 301.2464 324.0503] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +2748 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [420.3578 271.0632 513.9963 281.9672] +/Subtype /Link +/A << /S /GoTo /D (a00158_g55ce98ea4d6f22e9d5068b904d4d2447) >> +>> endobj +2738 0 obj << +/D [2736 0 R /XYZ 90 757.9346 null] +>> endobj +2739 0 obj << +/D [2736 0 R /XYZ 90 739.9346 null] +>> endobj +2673 0 obj << +/D [2736 0 R /XYZ 236.6686 544.1142 null] +>> endobj +2742 0 obj << +/D [2736 0 R /XYZ 90 527.5172 null] +>> endobj +2682 0 obj << +/D [2736 0 R /XYZ 236.6686 348.2544 null] +>> endobj +2746 0 obj << +/D [2736 0 R /XYZ 90 331.6573 null] +>> endobj +2735 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R /F14 636 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2751 0 obj << +/Length 564 +/Filter /FlateDecode +>> +stream +x讠TMs�0襟+t�十惧[;i2鮈g�)�4b隳R�'蹩疈聠Bs閜悇烐捷}p DKM-姮恎鼷>掳澓齮鴾E7w�K璪奷�.侭*2抦bEQ')�M\5毡Z�&q�~鱐珲9I90+bL砮�%�]�+liE廆6N�2虱戜�-�⒌�"義控G?�8~�;0棡`.5儨Q僔挞尋�F籎0捦W耎 +�5褱S� 簉捏:?MQ鐗括鎸慳鑎繢�=U猞W%歫潋禃蜴獃潏郂峊rV臅糋蛿�晒k3&� 嶮}Z7�o�)湊�;冇扴K闛鳡咅M�1}蘋!t�+]饼ⅸ馒R勢z銱鷱� � 潟鐌s�訥}╒锖*7籪W�f〃PZ}誊�&蹄&H;b晰\%宩艮yu:喘闐矢+IU垪�#輂h爿�?�D蕸䝼梺妅�'罩忢憓10}愤yG栀G \灗瘒賹;倈t�禋淊a "赿飲波螃貏tB七2A熉C� � 鼕≒蹌筛 +=}]4 困�o珑bb榧?S�?*鍵+endstream +endobj +2750 0 obj << +/Type /Page +/Contents 2751 0 R +/Resources 2749 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2701 0 R +>> endobj +2752 0 obj << +/D [2750 0 R /XYZ 90 757.9346 null] +>> endobj +2749 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2755 0 obj << +/Length 2441 +/Filter /FlateDecode +>> +stream +x诘Z[徾6~鳢0�Xsy夸4Eせ畚[S奊36晁琫w揀�=I�eR-� t鹼久脧噰⑷��\v�;�;�/p坫a賥�摈K0I,�g奎婄噙�F蘦1� 寛1t緹q事舗鲶�?�鳡X�a沩#�H〗实O"+�1处�O_\k>韼脒蓍�:TO祄毣~�侄崓mこN�⒌竦乒`漸D箭机\mw鮾廤莠O坨-0蘑n皏纆)潡�ef#�岽诹箣<\肱閤9ou銥>煄K"l紩�氻⺻鏾}┫|\R眡㎡彈潎匞荊g�侖鲢皲澇戁烔$询秂]紶e鸻�w農榴#启初>沫冼YN払抮雘漵壏I�w胼o琩��/铪C睫U灳l�w� }0�5�)往\r壈破┮>:=y蘋�>;�*䜩i茺劾遾x� �$駝Sぅ82Tb�Q嶶焳_璒G磩6入H�骆O�CO莭踖袃薅im�7>塂狈#/謫?庺� )B●�#8闎/t鳸鼉4/豋康砘�T$1橁�3鑼U駼R� d櫈aE�:鴲�h#�莛B!�)楺SC蒯 围v�>炾鶹箶HpN�霵%'榪5A4$�a⒄\壐溷3M璪T:沯`� 槺F淍,髲莝齴� +�,R寬W綵L硄埰]�+v.� w�4[格笆]_浧甅� [徳�'攥魨;賚]描bSyv�胪屦{3Vc 臿糔譖畔[k>獾^Pf鉺俖潠D/瀄lG阛H篢俎O轆�,竼殱(us�埔孴諑%鸋〩�,� +g霵%^樲 杛� %�.I梽翃啔!箜��%籥奭r粿雝悸闚狸.� 睡昺�&絲r$\ +�O叆W4 <奏╀.道l▽瀧橌t戈ZR拣码璲帔翠b醀6(鞾�圅%u辌�0G4念8腐�(�.朗矉 鎑楃韉足-犬��R瞍�攠毟tW踑|颷(�$庸 谆V钷c钥y蕻僣轜茎 9桯A�< 枯�_r#�*圻撖肭愤. !媨毈r▌L$d>Dj蚭n�鈼� m玪wN^絡鑸(,M阿洇b@F +�(�,鉛 +� �oY +}� R(笐�揃� +�/劉C|H璭晲鑤 9� 髮Ψ腙愑I�晆抍宼掔韙驨蠭弢奛騨$v僋L靨憮o~@晉kA鼋A鑣_ +勲胑?�<�%��/�'1:SQu07u脔顠〦轝qC硯�巪j�GgW;未4n嬥]紆3* +Z瀁 膧躊 膀P�1FC%羡 晿�溷�!瓲M犞鑣gJ(�/y懾韸a�rJ儺M!T⒅ e� �6=��k$(鏢C嗅 ~ u$�q粂晬B嘕椤z堖欱e弴a纋dw盷\q h]胎 ��6ct&mt0K�鑓[矶N�a�Ⅱ[�/U�倒'揞佼影��*籡租 K�遆3厰$a揭{P墋h藪咛疍qR錩艴坿桪�)U�瑯c儥擷� )鼻嶝炼3~<�1盈0(b殙亙� +勉K�&v鸞岄趽 �4-*燡炱顕A婍w许詉kV配�(t鴤┹R陝扫�;啯3燫鷡髅 �%'�0躈漧R陝陸2E&ξ滽�謣襦wx�&蜧�&k呙0c{倡蠬砤籵'W/�<盳L�#i4���=燡魤祙veQ#铽dWTkS十V萎懥\v腕v�5鎉o@ #纽郥x撑f�/y愗韢T�涴S��P%rM莢櫻 淚0b\嫂A桊?R慌r�蠂ヴ價S#�4哸B昔胝蘾天G� 驺溠珞)泭崛皽辅屟筎`n馵}峝溋?u�!唏异㖞r6�>+踍(ng鐎/D#礫氏淎�%蛒宽 �j-洘崉A3mk怋&嚜p�; 2$翼7OY��#屍�/きY�v%�(G弼�蹰鶸W兀�N轠乗�〓坃S�:l轈长谞齦↓zS寎�竟�;~T'踮痬僰Q旫鞯�7endstream +endobj +2754 0 obj << +/Type /Page +/Contents 2755 0 R +/Resources 2753 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2701 0 R +/Annots [ 2759 0 R 2760 0 R 2761 0 R 2762 0 R 2763 0 R 2765 0 R 2766 0 R 2768 0 R 2771 0 R 2773 0 R 2774 0 R 2776 0 R 2777 0 R 2778 0 R 2779 0 R 2780 0 R 2781 0 R 2782 0 R 2783 0 R 2784 0 R ] +>> endobj +2759 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.7882 642.9278 343.8612 653.8318] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2760 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.7163 630.9727 260.5985 641.8766] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +2761 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.5434 630.9727 467.5403 641.8766] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +2762 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [268.7434 593.3114 307.8165 616.2802] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.4207 581.3563 163.4938 592.2602] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2765 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 486.8218 162.5475 495.6685] +/Subtype /Link +/A << /S /GoTo /D (a00120) >> +>> endobj +2766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 447.8916 163.1055 456.7383] +/Subtype /Link +/A << /S /GoTo /D (a00121) >> +>> endobj +2768 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 363.8772 196.4299 373.8049] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2771 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 306.282 227.9818 316.8123] +/Subtype /Link +/A << /S /GoTo /D (a00159_ga680bc3f3a1a8a6aec20fe729d138cb8) >> +>> endobj +2773 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 293.2926 223.0005 303.8229] +/Subtype /Link +/A << /S /GoTo /D (a00159_g720ac440c7b24bdd07c53ba146e36fb2) >> +>> endobj +2774 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 280.3032 178.1689 290.8335] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2776 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 197.3698 179.0853 207.9001] +/Subtype /Link +/A << /S /GoTo /D (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) >> +>> endobj +2777 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.5282 197.3698 265.4205 207.9001] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2778 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.8984 182.3375 338.7573 192.2427] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2779 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 158.4396 192.6345 168.9699] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +2780 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [221.0774 158.4396 278.9697 168.9699] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2781 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.8358 143.4073 391.6946 153.3125] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 119.1358 180.9085 130.0397] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +2783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.3513 119.1358 267.2437 130.0397] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2784 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.2067 104.4771 431.0655 114.3823] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2756 0 obj << +/D [2754 0 R /XYZ 90 757.9346 null] +>> endobj +2757 0 obj << +/D [2754 0 R /XYZ 90 739.9346 null] +>> endobj +150 0 obj << +/D [2754 0 R /XYZ 90 739.9346 null] +>> endobj +2758 0 obj << +/D [2754 0 R /XYZ 90 716.7313 null] +>> endobj +2764 0 obj << +/D [2754 0 R /XYZ 90 503.7525 null] +>> endobj +2767 0 obj << +/D [2754 0 R /XYZ 90 381.8888 null] +>> endobj +2769 0 obj << +/D [2754 0 R /XYZ 90 324.8962 null] +>> endobj +2770 0 obj << +/D [2754 0 R /XYZ 90 324.8962 null] +>> endobj +2772 0 obj << +/D [2754 0 R /XYZ 90 310.267 null] +>> endobj +2775 0 obj << +/D [2754 0 R /XYZ 90 215.9841 null] +>> endobj +2753 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2791 0 obj << +/Length 2035 +/Filter /FlateDecode +>> +stream +x诘ZY徾6~鳢0�籜3�%n褔4G�閼.鷴乂制Fm9曞ほ��紺癜$意� +d)裼\蝲��#s呯櫲恇\嗡� 线秒og腘痐~�|s3{魷BJR9抗�$H�%t~硚綈堜�x癫�歿3据蔩蚿_耘鹙_窄y�;誩�=訥x� 傎蝽蛬俪o�5S0I�客^颗�5橕b�S箻�寛Rt緹q受胣鲶�'/荓t募勁�%)!梻賋D�+�1^<`L胧8鲷P灤泤鯪{4�剸r母闗B氖鷅=鲵偎o轥侂b_]橶嵌9曧℡抾徂乍=爤講朞:,]籗u=巒.&y6�"G榪覐M#^跹&Nr懰0盿�P.W\+7EcF讷wO~摄镘粆悼}WNu玗y .烬世��;�DJH 鶋竸�kp々Rj酂婮�/.�7鉔L椶G驜K7/蜔?徾?澲祉襃�,�i&�"�0饊X]Mz牽鷛禺�)�#�(h �x�眷f8蕆J娼鱖t2�� g� _Q H墍慇矛擏�*wEc话Ua\,愺�dHR位/o6[]&�*R63t疦莏mF瓭1kV靨鷳/謂/�鎻+L0<躖盐-iS磃T谍��7蜊M鍑襎�钯W怀]m!�?-A�lY锬綑瞊蚻a^>監MSX丕m�1B蕘,4/琒餹_村茍"謡嶞P昜]|:aR舳j谈��\蕎甑y "锻�1S芏鮶护b駋�>;[坷燾t櫉齘�?�.*A(�<{X濌仯e释�=τ�<評e稚瞟�稌蹄z蹚H�%銀�,S�洵睿娄�+�1Y0��銙纕j`g禪s 侴0�-;;f@`圙嚃罀�-!8Ca�,U浺绽眫��9��GE"�/-�盶瘛^�hn�0ナ�+糹輸咿0�6*贾K�+�.歪杨nui� 渝�9駿O5�-鎁�+廜x收^uev[ou嵡躺�'B隥)#i趫獲iLJ蛐8|J} 浊�+偫�R�&冟Q +8P Ae>碆罕Z!�竐a瘌�乗喕Κ.EA纞$婁観皎��4�绣�鋮錎欧鞴`Se帕:豖/�,≈侭� 睖禋�uE㑇E� 鵎�9湛ZB经-Чom硧岰爏h墵鮜SAs爱燊a�$\o盜��昩}點jㄖG�=串銂� a搞0p瓝sf呇� +l鰒炶�=訢W� 券]}薊閯j嶵N8 俖箞�,郝l玗]祂T&r鞤伴鑨TJy M+7X枙1$vk榀f锌酆儹蕠鶢控U>7n�/�s�(瑧1� v>?3{z~ni�??�3�▂�=7=z珁⺁2�1樅hn.F󜇕j!�6婕鮿r磛擟齡�!儮$0g�蝤U��0蒀罐.K榍}C�1秶唽蓞C呹c�?GnP�憢F68餮7�0<冴�4� ylNe�#ń焜��7+b鰘�6OQ鋈膴�.碊's�99�A�9r鹓�(q�%蕇枏,Cヴ襹亪昹*a}q&vu筪覮i银y�7�$迀=蘥鞞9鶩哅{颭鲊�NK\取仪擓┨I黳�=8e),-%攺叹\�>酅(7櫜袦㎎南��Y御 +匘 +�CM�+gH{霌�S�?沚�F)唶=宐LF鏛1�i����軩癔瓴:炨禣^_w鳟W� x埥67綕嶕:2(NO 鼓O軓�6� �3�TI~�/P��!�<怠-|涨G嘏Xj俓P臿甙�t瘿P麁\P%5�j�/竻]� &9 �: 樴E��&��-宧娨H餙v咋Gj濾趴�5蓈q鷮~�ED聶�0姲Y娾8�ArS齻S�(�)9癲|-銹 瓷�x釲z芢n脦滋顂鐼▅傑尙圫 �&6>焛拓�(�R��`6�簥貆� :簸c橧N荴∷鍰�> endobj +2795 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [324.7453 474.4264 376.5504 497.3951] +/Subtype /Link +/A << /S /GoTo /D (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) >> +>> endobj +2796 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.3663 474.4264 437.2485 497.3951] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +2797 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [454.1911 474.4264 508.1881 497.3951] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +2798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 410.341 142.7416 431.2524] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [244.1409 324.7746 304.8028 335.3648] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2802 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [348.807 300.0021 387.8801 310.906] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2803 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.2161 264.2545 324.2892 287.2232] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2804 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 230.5641 142.7416 251.4756] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2806 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [234.3477 153.4162 295.0096 164.3053] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2807 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.1676 128.9426 430.2407 139.8465] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2808 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [295.4576 93.195 334.5307 116.1637] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2792 0 obj << +/D [2790 0 R /XYZ 90 757.9346 null] +>> endobj +2793 0 obj << +/D [2790 0 R /XYZ 90 739.9346 null] +>> endobj +2785 0 obj << +/D [2790 0 R /XYZ 90 723.1038 null] +>> endobj +2794 0 obj << +/D [2790 0 R /XYZ 90 723.1038 null] +>> endobj +2799 0 obj << +/D [2790 0 R /XYZ 90 371.2512 null] +>> endobj +2786 0 obj << +/D [2790 0 R /XYZ 90 344.9853 null] +>> endobj +2800 0 obj << +/D [2790 0 R /XYZ 90 344.9853 null] +>> endobj +2787 0 obj << +/D [2790 0 R /XYZ 492.0776 188.3053 null] +>> endobj +2805 0 obj << +/D [2790 0 R /XYZ 90 172.6296 null] +>> endobj +2789 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F23 482 0 R /F52 1229 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2812 0 obj << +/Length 1157 +/Filter /FlateDecode +>> +stream +x谂W[o�6~鳢鷇3腔D康HV4@�[[ 奓'耫)鹰i鲭{(R奷蔙� � J黿!I��!伮A(B�桝rZ徉~縚7絽餹窥�7�厰�2�[ � A 鰢蟢債fKa ^7>翽�5A�n婥搃;�*掓ん:"遼葸鹘bg梎���>帕旎Ya腡$�'�(E冇奡謢d�?V亏r霥籤�=N0�2�柏z4�"槩怮 +鄕H鸋:��! + A�2醲s�Q�1%儊4_g騮侴潝#F蒆錥咔"蚹]趶簆�龘>宄遝E騑7譾擵銜wn酇�嚆Z泄g慇楧a EL嗎h;D�聵匒垗�4j]毽�蔽珴V�%2GM╣S伸aF�迍�嘉鯁婖擙(鮍�:O躙R4ym嚽�4b鉵⺶q7cw3鼈��&;�)泅�砘j扗W毡�2'c�怉煜N霒寳+ j �RB8�欜�:=谹^�N峺�T5ゅ~#謖v乤楅�)妏D�2@]厭敝彪锺�1觭\橯蛻�嘺;g䲠鱪暧圦�)N3獌k濆�>犇3�r伶S攞覍�6#罺t2`慹鷷䝼1陀vs秹v壪臆m〔镡h遞E霾寇m8^�鯏 懁溁Bv%S嚼�lYR韛m�21顆�&娅�莳;#(g�n}搱D�!秮躠件�1%�︵x�f]6I}� jD2�!鈽�烎p佅d_y唰g埪怰ㄥ�!gL镼緕 鵃絙埅s鯋Zf;:駼尼辛致壚��犦�,fH�-卨埗耐a茣狰羛/� #}f褴z2賹癑哺�.礝i/�(2}儉 +罰 I爨��/7O桷潯S嚒�28縐46�,�=h^�'�/酴蚖`�8�侮!牝�+垺 砱跚6e|襭短l罶�蹫%�=X氅9n晾P少槛=j慢q哸V缺曳硠},�鈁ZT袤蠍鷏~f�,[[鼈拒尊v婛鴘�頌琘緍貣"侨,_嚚藎�!癊)袷faN鮋7 緟撏B{]�0潡faA�'�?h殔扬紋eq� +逢螘璌J�3t鍌︻�N�01烪!�誙方獹皠癚�,�00[�)4X�%鞰1n阶�.王隶'飊阯pc苶桪倃旐ɑ誗尌蜑V笡�BvU|咀蕙_6��.�?endstream +endobj +2811 0 obj << +/Type /Page +/Contents 2812 0 R +/Resources 2810 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2809 0 R +/Annots [ 2814 0 R 2816 0 R 2817 0 R 2818 0 R 2819 0 R ] +>> endobj +2814 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 641.7124 142.7416 662.6238] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2816 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.1396 562.6724 291.8015 573.2626] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +2817 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.903 537.8999 324.976 548.8038] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [285.2161 500.2956 324.2892 523.2643] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +2819 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 464.7486 142.7416 485.66] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2813 0 obj << +/D [2811 0 R /XYZ 90 757.9346 null] +>> endobj +2788 0 obj << +/D [2811 0 R /XYZ 407.944 597.5968 null] +>> endobj +2815 0 obj << +/D [2811 0 R /XYZ 90 581.5869 null] +>> endobj +2810 0 obj << +/Font << /F29 499 0 R /F52 1229 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2822 0 obj << +/Length 2497 +/Filter /FlateDecode +>> +stream +x诮Zm徾6柯纝眮毲wI龞k禘�4�&浕赽〉暤奠ns傀�I驟&u桠^�g�3� �� �?2��棾浙�=楞畧⺻ �/]�?n�=璮�$暢巯�I悹勎n卓�%"誦I灴~�q� 寮轹�?蠜免粉�3嶬剠5j罛=胶镜旱i侷�4�~跛ox�過a莫R虨� u�=^q侍椵涨珶瓬釃~镭 a鉙$�j鍴a蕝;E俼f巸�*!z1郖&R"�D尃鎄ow蚙划閂図觪籵� 娓銹�溮M3�:焦 =�-盛鏢籖b会k}0c;{�>w椨搯 泒wl隚=鯃荶枚G_�譃浢vU飭蕑��:杂鍰 +$)g郎迉$V絤� 2噺nxR籱證饇�yx馓u=黚陶#彌ZY枕痂�鼅嘺d=n喦G餷繨V2TQV�$PF朙揓齮x袠�,~�8嫫4柅�0涕n暖X`鳲B�8�,慭&<法�!\膮`�!�6h�,澘oT虩-!A�K藆�8_粀国憔墾�6芏欯便�7H蚂g0T袙eo馣w@<遆x艐瘲麼+墾�⑨[vT%*蛤籯琴锝�)� �,�齥�(缡>9�n阯x|�\鄚鳰Mr~?碟q熒rH踅莘薋嶜虔n徥/擗焫�节oPv漡珃r_h�0撺-濟R碨u2a褌駲$PWyYd鑑馣w@朮瓹忁Q楄A*唜壂愧�暢�剥巅1敶�熀`矍筘碐揰鱛仙5屬疧黄<4抈%��Q!鎕lu僽L浉dX瀦繃U�Y�敆Kv表p#qV虺レWJ�>俙E!g�-*�趥 +K枧橆殬搄弹B� Nj|螁H顧� 豳D朄塮樢�fa +�� +�v腶"��(�g轎郰 禞捋 +}.猺fa蔞b判6�E� +誱4踮<�&歿~|C#F哫 隕�ZI�#焷迳�L�/捪記!煣y +6Dr颦b騛X礌$} %典+'�S$塖4/愊�<颟eRwǘ�5郅鞦K筁H^$E5q&.趎A握H蓞DBm欪I4*祉hi鍖!J +~戄. 羘 瞬;填宆胣O镞謟r.*H狘2� >gF$W欛橥洼ё7w痭n緖躅]軡JT駫�=aQ(玊*�輙設O��;�'K&/W5悐粊邈炓枘=戚�;!顬�)qO�蒛f���暡鄼�TNo齸QzUW偮鰒��-�=� F)拽'�(6rNn-�##崐��9s�=E嵤3&∥!LR╁嫞t]\蚐貟�!敧l湛�>\邁xs�1�jUUz�斨 暭�<蒎Hh�-p�y眜夃ZX6篒嶇餱魵鴝z�鰰O坧茖H�2忝跚熮-企轢��5tH溞2� 嬍楢o0釠燎w`\c��=��lo%#梬a. E薙$パZ埆篆椺貮E`c觌N� 豇�戃�2麡滠燗9龝�啇^pW幈s uJ舨鋜�@*�枏zJ�醮^uWo>隇�)QO[� O�"K�q譣袪滝R絿郋鄘堸jS�:( 鬘Am喚墛鐖KXt&z逾3髩�*ND�#ぺ*筍+鳊"+豲墣� �0頍頁����晠溆v~.:眹�0e脀茅��盼痦y砞┯拲> 旒砈 i谀�3襞=.璗2�8t辜中挩讅鬼墔e珟+0Qu2zM振鬴珟瘂B丈X蓇j邁帇4湕'TN} i蔇鑭(;c女袠Lu�羐-錨.Z+^椹[T/*h袒 卋輛]s戌姗zA焍Z絧褖zaa}截藩{~8 荳聻�)M莲9;u崺鷹釢iw�4仺闚^�<杛侸滇蛿藯G`ㄑ1肻Sr仲鈀7蔦铱�$7鮄甋�氥9=�f�*iGP� +弹.鷝帑!�'[S /迥鋞些�40e蒓髑z�镘V惈韖髡�駫x=灦�3i� +^V/髵刡�.sgC朞JG`j絅氲殒晖烆)雞趭H黰粛S縋w��8翣r闗H}J娎�)OJ� +�'�t� 蔥X�牯;/fY%阌VR�6ux�青x"咟K返鸇呮�F莴�"u)D_�&*訮lh阪P跭n芃?�?蕺t襙諢鳾示�捼龟Z玵敖NM鰋薪��Cw淦4�?�Y贠aendstream +endobj +2821 0 obj << +/Type /Page +/Contents 2822 0 R +/Resources 2820 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2809 0 R +/Annots [ 2825 0 R 2826 0 R 2827 0 R 2829 0 R 2830 0 R 2833 0 R 2835 0 R 2837 0 R 2839 0 R 2842 0 R 2843 0 R 2844 0 R 2845 0 R 2846 0 R 2847 0 R 2848 0 R 2850 0 R 2851 0 R 2852 0 R 2853 0 R ] +>> endobj +2825 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.9274 654.5304 448.5608 665.4343] +/Subtype /Link +/A << /S /GoTo /D (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) >> +>> endobj +2826 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [236.6088 642.5752 297.2509 653.4791] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +2827 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.2771 612.9957 194.4771 623.8996] +/Subtype /Link +/A << /S /GoTo /D (a00160_g6d9751d534453425c7a5a215d1d4414c) >> +>> endobj +2829 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 556.6105 162.2985 565.4572] +/Subtype /Link +/A << /S /GoTo /D (a00103) >> +>> endobj +2830 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 516.8967 161.7405 525.7433] +/Subtype /Link +/A << /S /GoTo /D (a00102) >> +>> endobj +2833 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 430.0643 237.9445 440.9683] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3d768e989e308144190ae1a5ddfa9726) >> +>> endobj +2835 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 417.0567 174.2837 427.587] +/Subtype /Link +/A << /S /GoTo /D (a00160_g070d2ce7b6bb7e5c05602aa8c308d0c4) >> +>> endobj +2837 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 404.2781 216.3555 414.2058] +/Subtype /Link +/A << /S /GoTo /D (a00160_gecf13b8dc783db2202ca5c34fe117fc3) >> +>> endobj +2839 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 390.8969 231.4091 400.8246] +/Subtype /Link +/A << /S /GoTo /D (a00160_g221d37ccde7e3fd0dd2c2eb0a6b15493) >> +>> endobj +2842 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 331.4782 194.0092 342.3822] +/Subtype /Link +/A << /S /GoTo /D (a00160_g7c5359305008e9183b18d6ab75f568bf) >> +>> endobj +2843 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 318.097 188.4803 329.001] +/Subtype /Link +/A << /S /GoTo /D (a00160_g6d9751d534453425c7a5a215d1d4414c) >> +>> endobj +2844 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [243.4737 318.097 268.161 329.001] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2845 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 278.7567 182.941 289.2871] +/Subtype /Link +/A << /S /GoTo /D (a00160_gdf916e0c752f5cda70d0bddb2be422ba) >> +>> endobj +2846 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.7567 278.7567 211.444 289.2871] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2847 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 238.6693 138.5977 249.5732] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2848 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 238.6693 214.2533 249.5732] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3191066cf8f76bd00b6843b77c37068f) >> +>> endobj +2850 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 199.329 178.5273 209.8593] +/Subtype /Link +/A << /S /GoTo /D (a00160_gb50f78bbf36d912d69f6c1685d0b40e3) >> +>> endobj +2851 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 159.2415 138.5977 170.1454] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2852 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 159.2415 205.5661 170.1454] +/Subtype /Link +/A << /S /GoTo /D (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) >> +>> endobj +2853 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 119.5276 187.9223 130.4316] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +2823 0 obj << +/D [2821 0 R /XYZ 90 757.9346 null] +>> endobj +1315 0 obj << +/D [2821 0 R /XYZ 90 739.9346 null] +>> endobj +154 0 obj << +/D [2821 0 R /XYZ 90 739.9346 null] +>> endobj +2824 0 obj << +/D [2821 0 R /XYZ 90 719.2952 null] +>> endobj +2828 0 obj << +/D [2821 0 R /XYZ 90 573.933 null] +>> endobj +2831 0 obj << +/D [2821 0 R /XYZ 90 449.444 null] +>> endobj +2832 0 obj << +/D [2821 0 R /XYZ 90 449.444 null] +>> endobj +2834 0 obj << +/D [2821 0 R /XYZ 90 434.0494 null] +>> endobj +2836 0 obj << +/D [2821 0 R /XYZ 90 421.0417 null] +>> endobj +2838 0 obj << +/D [2821 0 R /XYZ 90 408.2632 null] +>> endobj +2840 0 obj << +/D [2821 0 R /XYZ 90 350.858 null] +>> endobj +2841 0 obj << +/D [2821 0 R /XYZ 90 350.858 null] +>> endobj +2849 0 obj << +/D [2821 0 R /XYZ 90 218.4785 null] +>> endobj +2820 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2861 0 obj << +/Length 1851 +/Filter /FlateDecode +>> +stream +x诃YKs�6倦W�(虳(�$}k汫揑�4qOI艭I触塋*��� ��y氀� 道.鰜�@�~d炧y$"�0.鐩�炦羚W3b⺗��+W鄰胭o/i2OP"_�6#H�%t~烬� X.WE4^剈泔b[2輣^l犒,j_渌of/甗牌.�$Qj肯>朋-伧f�Kb1�孒捫孲f_砄�趒�M嚲� 满鏕J劆v��轾IP冭rE0茓梪緄田烸荱郖蔘S顚剤肭掄E边瓯�%�侃8� 荃�b4狍 D饽腝齍�檹螖[鶗�!宬8�&颚 +L`�#}:�62耛! 殅0f跐懗p�8�7"埸t蔎pde忞Y��&6 +b剺#�" F� 媲橄" 鑍]毺}仨7;騱焧醚藜W厏�'娱�0�|r煗P讒盄樐裓r倶HX+磖ヂ嗯 熈X�!F牎骜A%XZY晻Й畘�)�%�喆摇%^�D�8徻.�.Q,$鱀+浙 +7―硤�cq,鰕� Y�|祣琇鹗靀fФ礇o�)蔶g勳j梟� |悮虡�軠觧;�,啌d"Y⿷d!Q)H銧?欲�!K��%16瀀嬟滂睈�&�S&柾蚋攂�6仌,喺+驺jウ��)L阁m燷艗u�蔕�屰衩.�$QI�8�+5�?M閛扴�h塧読䙡灘$西绾I+�<靤撻溑~报.嚩粑Q謿FI0刘螯1煌�,遜︹V轩'焪�緘k汋䎬So�7牁娕儌SN =�2�/T呹2E龍�8払\D垀嫡ъ仂R僛 .怘i乲 sX遻,�蓜GF鑉�F噄廋T)渀V~鍁鑑粮�,"酘pwL栩+*鰴DA倇�/疬诛>JLP +(�#.:"=珠鏇�kt啬蓼�某;�=\�И 沧錠o}\�J\金v_烼%R�眷諍�l�>�鮏儣阠�;舄vM%肳�8燜9h橋�8'爤�+喩獾閖Mkg m3cP戧韺盱,9W醨鏾 +�2� �=4|若蠇�>煎4唞L鈗紆駯s寗O鈌}鶪竃`H?7k跑膰S�8幧[�鴓*媋k衢-{:G悉_7巼ⅧmG4霯H$櫲�2g':bcN碽�*饣V啼刦+j罡繤蚰赚軋呫Fxi�蟃?Zf�>昬汙8玹燂�;荧q:鏆�*贃芈K冋g)��*B聈耮亢�辍鵆�$S搗珄S試m踪%吺$凮`:^ó詐÷�羻擼H屒T?���鉜靊b<隊31炐寁!1龅_@�'�平�忹�%�鷥裐b苌)�&祴d�1G� >r 〤Y+縭;劑�;人��8I:&t=e�>�1�9锯3/蟋ty機燂� +6蟡昽� E�-�X壔祆齔瓄べ�%�*c�奕7g`E!"_慭┽ 堕0I�íKe@>�(峧?c]ňw筰�,庑谹i膩彥~磮磬,�0�� �5洙�-淅嫋娢Rn屧�#鴅hh�定√矨�>ZykQg庠fg壡:砫螈� +.'M�F�焲�嘤�粮阌�Z|毿岞kn(齾7蜛Mp5昣]晢V踖觫�>埄劒; �/芓访Χb訕隂0埄佲~L�? S站�>N濭��X鬹彛嗭c��-炠軑潓t輓u渱�牖: 听滤u HT弭辬a0欻!�譛es�cu_沩G�&E,n.�(t鋩鍗WY灂ieY�-挚m銔B�S�_QvE铜,磐澀赟5�诼脎酰借x�椂�6登K��雜endstream +endobj +2860 0 obj << +/Type /Page +/Contents 2861 0 R +/Resources 2859 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2809 0 R +/Annots [ 2865 0 R 2866 0 R 2867 0 R 2869 0 R 2870 0 R 2871 0 R 2873 0 R 2874 0 R 2875 0 R 2877 0 R ] +>> endobj +2865 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.3331 702.4599 232.1263 713.05] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2866 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 599.8741 139.3246 622.1255] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.1901 599.8741 192.3555 622.1255] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [269.7449 518.2645 295.538 529.1536] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2870 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 360.3144 139.3246 382.5658] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2871 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.1901 360.3144 192.3555 382.5658] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2873 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 313.9634 157.1381 324.8426] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2874 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 199.7115 139.3246 221.9629] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2875 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.1901 199.7115 192.3555 221.9629] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2877 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 118.1118 157.1381 128.9909] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2862 0 obj << +/D [2860 0 R /XYZ 90 757.9346 null] +>> endobj +2863 0 obj << +/D [2860 0 R /XYZ 90 739.9346 null] +>> endobj +2857 0 obj << +/D [2860 0 R /XYZ 90 722.6705 null] +>> endobj +2864 0 obj << +/D [2860 0 R /XYZ 90 722.6705 null] +>> endobj +2856 0 obj << +/D [2860 0 R /XYZ 358.4819 555.6542 null] +>> endobj +2868 0 obj << +/D [2860 0 R /XYZ 90 536.7606 null] +>> endobj +2858 0 obj << +/D [2860 0 R /XYZ 90 349.9037 null] +>> endobj +2872 0 obj << +/D [2860 0 R /XYZ 90 333.1669 null] +>> endobj +2854 0 obj << +/D [2860 0 R /XYZ 278.4221 155.4916 null] +>> endobj +2876 0 obj << +/D [2860 0 R /XYZ 90 136.598 null] +>> endobj +2859 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2880 0 obj << +/Length 1378 +/Filter /FlateDecode +>> +stream +x诃X輘�8鱛鳞罫'牸�&綨3=穽漿i;b� S)芃筮� +I凭粚�H摭-脧x{憟恉<鬡�燧抿� 臂S責� ⺋N~�揓O"倚[nj!A��-譥�L├|an蕗木�傧�`_暳峰暻q尠A�>Ep'砮#郦&XH翠�/甙��&1 �0垞詛減受C6YL>7|蘁}`菳N梁�0o蔅�゜�0�#p%�A嚌K�1嫾�1�#蘫坻E�.褐LQ�(踮 {b�宫%車"履灈紎H�吸�._Ui戨'�y鯾殖Ⅷ�5媔n柂�*U鍵f枔睱^祚峐鸀=鳳l�Xp撄-逻毜鳠 Q瞊]f �煳o>|0鹵)H辌�.霮tU�┉�+启锖5勒0�� 喽�甅��?�& �<�誋縅AL濤J�25�裓w枫e迍~@冕qd鸼B幔UOK#F�9�:ā:%壳M���bXv軀GJ|弌屈嚍&G<営沔;猄騵軐�&m!』襡�轻賬p臾翳裾z<U朆轺硛r爧鉿� � 駗nZ|]歚僷L`�眎b楆+�4OmO肄5Ks[鯨唶E瘡dv碀猕i( +l涋≧瀚z�壮徘袌��黜l炯~?[粹T�,�舫�!腳蝞/?蝕贮惖=wg汼泔垆閕昫�诋�=峤�Q-�@0�0e颞vE"��喸髆懏籧锃猛趃�捯0囄�.乥=頇�妓 L<{*�懺驩_KJQ║t|蘢焉馉�軋+HVi鐫诠%鎎�,港 \vX0p籓3�c镶9�2%�黱骿W��zb坮j�*C:U脬A�S�5�誋衊別黦b䴓�嶚} 1�!;驡辞�騵芷1�P��B|忥贅?n~凒'澉笣夰琥×�z豇瀷n豤�>稺羭��骟W曼淁蚥v�:◤�>1D�<�=,��貂���辤�"�hV m�;暙2Q.2箾+怀勞+緺靷赑Q岉牰�h镪HM嶐∏.媉/鳘�D6錈兺櫈endstream +endobj +2879 0 obj << +/Type /Page +/Contents 2880 0 R +/Resources 2878 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2809 0 R +/Annots [ 2882 0 R 2883 0 R 2884 0 R 2885 0 R 2887 0 R 2888 0 R 2889 0 R ] +>> endobj +2882 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [277.7877 706.007 338.4298 716.9109] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +2883 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 619.5604 139.3246 641.8119] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2884 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.3134 619.5604 175.4788 641.8119] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.3443 619.5604 242.985 641.8119] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +2887 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 424.9723 139.3246 447.2237] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +2888 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.3134 424.9723 175.4788 447.2237] +/Subtype /Link +/A << /S /GoTo /D (a00047) >> +>> endobj +2889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.3443 424.9723 242.985 447.2237] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +2881 0 obj << +/D [2879 0 R /XYZ 90 757.9346 null] +>> endobj +2855 0 obj << +/D [2879 0 R /XYZ 316.2991 559.1605 null] +>> endobj +2886 0 obj << +/D [2879 0 R /XYZ 90 542.4334 null] +>> endobj +2878 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2892 0 obj << +/Length 2408 +/Filter /FlateDecode +>> +stream +x诃ZMs�6禁W╦/rU屌' 涓Ojfk6俦o檾嫋hK��%⿲� $H�甅鵣妡熳枳h�� +�Y)际E�阗js悸玤庚�1弌帙��?R礡He4[�?u2�%tu魁mM凹尽�^�?� +�� 慢艞遇|(鵛Vm杨O挣秣煰n�瘪K皩h��];^m量蟇1%抨;�(EW�+N欭q负机烦�?鑎榡� l簘�#窩m)�7镗�! +�!沲輻{永蹧c�?糇MYm薢7ǚD�⒊痹啫糥B呢鶳禶≤氊斖控葊!鎱\垩尬�"蕜X唔�/囶毌縯击譒灷侬酴=mN纟7,皀 �'凉㈤q垓拼襈檑弌�捲@鱉�枯蕈-猰Q沇綺�.搡�'�慝g肬mu u淂H懏M璹该閳擽�!(��嶵_|伯�9S9�(�&<贗*睾1瘛偖薻"织吔林莩K>鲼虌{�鸚 s�0ɡ攏�頝譚菭毁濬<涌�76u�!劕癟�(跏齄A�mшY�$4�:穉�)tO骮W3丈躽,K饩m喧f驀� Y俅�亭:c圦�:G?Bj7}\� +捪�绪M�#�!�$控裠�(c.倁�,舞P)^( +g賵: �0ff猩�3隚醭羭鮹傍�乚鞢sl_�.餉dP縟Ⅴ\!I2@J顑&B�#騀d鼆+毳�+ ^f俭 +螘\9橏騌8weewm�咮鵽6!8Y�5銠NG%諀nq +@蒘筫a檐� 苧+坞rk罌拳髵軍�豼沟櫴-NqⅤ怺T葁�晥鋣*� j榊�.q棯孏~>� }(慸谕.e覍K啢旪蚌嬣浕�>o趕}M鋤�4蚂Z%蛸趱戶u癲鶩/闆嗟�;鄊褐嗛玚喦鋱9捑燆!発喻�'m貚$类匘,j�=RRr!{淹4jRe滺岏y�=@Le K�c鬞庴:晑蘅� c@�3斢湆如叾鴶乚[n縹}焎G(亁鍌模郟 z桫p y0犌s晠)� +�帞>嬕挤u}蚢杕F雨||�#k�+烫?W{-Riv闣輸C�L樱�!鵎Fc柮�#�O'簝%�7I�疢�o4厌M>"�&z嘜�豼墌wA歝�2Ni<� 3佦據>醫劫構t4椡?濡5繋蛃�両�2�>Q辭霓o隒Y樽嶀蝬X_�#Q嗛|趛�X赮X:韇宆谂y]邬奸�:$_P_nv�燁~y��笯C�愧R蘺錌��_q1%2銆!l^d俾�"�=戙糔d焪伻�%"禽靂�7鯏�鹃沩7�瘱X猀驛忭斈�單蠐|@Lb KKc�$庴:墋�葪Hw#発%~)臊)8乮%�'俙Q)v%P庂�恳rJh�媚夹 &磪�1zB莥澬>��銴剮�氐B影+S�3�矸�1魕(�#b鑴芓I繢v|@DcKje糷溹�x��h減#発5f�芹�4N[�臓1浺X阸;瞸�b[XZ�'q溩i祗.衳@綝愀乚�1熥8邺嬈qbПO �)峴=pg筮t> Ρ叆5�1z莥澠>��銴4幓氐媦崳砜h'v牨樬晒�輒梏摯忕j�(Q�(>?�麁XRXX:)b宆R膟]R鐴溆>� 翑U"F軕昁僌y豼+椲覦j�e,XT奬Dh瓼o靤プ嶌骠fW�%⒉甇踉椃]!��硡嬮>:茶錪诮煀冕必h濥�;鮠抯剪e7K7饐m树澼�,猵棿fTQ5莭�8嬛N'Hl� +B�(O-�-\荧蠑嬙'瑑%{峯0襨级� x摻f冉犠$�旌^朝鲰T5B鍓XT��)t憅栳� 锰�蒩μ躇OZ撥乱捛=摄糔r�7-鶂{変q/籒蜮錏w駊揋"蘄枅侲F俀6婠�虧y>?<鷢橁朧=畦�鐄糹�躃T弡豼猳N暈�=熾p擳掹X<曭A)膜�#@鵱\靎P匊绥鍾,硲�&巘A�$颊c籗覸疟i�0弻g)N�闾`毑頞馜n耡�俾佦GGn�6/^蔒�祔幚�-|愍萋*靬&涾� sU狾忑%C/%`L&嘵 K鱄蟕珿苰]忯y綑錵洃阊廗:rb緆x蕸闭藥{Ym胢X�&y<曕� $D飸櫬�=策"j=c��<{嚺~�+b2m嵌籪�69C倫w8轫就[�,O4籱糛Jp�#滈"�,/>�≥疀愳!�騆�> endobj +2896 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 575.9645 157.9746 586.8684] +/Subtype /Link +/A << /S /GoTo /D (a00105) >> +>> endobj +2897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 539.0153 157.4166 549.9192] +/Subtype /Link +/A << /S /GoTo /D (a00104) >> +>> endobj +2899 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 459.0226 183.1495 468.8008] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +2902 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 404.9565 217.4713 414.8842] +/Subtype /Link +/A << /S /GoTo /D (a00161_g029256bc17a12e1e86781887e11c0c7d) >> +>> endobj +2904 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.6302 367.0311 204.6385 377.935] +/Subtype /Link +/A << /S /GoTo /D (a00161_gcff75c8c930abd6ff168e85373a4eb92) >> +>> endobj +2906 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 344.0533 176.5052 353.981] +/Subtype /Link +/A << /S /GoTo /D (a00161_g3212e70c55244608ac16316888c354f0) >> +>> endobj +2908 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 332.0544 176.4952 341.9821] +/Subtype /Link +/A << /S /GoTo /D (a00161_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +2910 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 319.0793 194.2087 329.9832] +/Subtype /Link +/A << /S /GoTo /D (a00161_gf7dd2757d1e766f65b01ba7c91c660a0) >> +>> endobj +2912 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 308.0567 173.7357 317.9843] +/Subtype /Link +/A << /S /GoTo /D (a00161_g34b924954ba5707d536df28d71a80d39) >> +>> endobj +2914 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 296.0578 173.7357 305.9855] +/Subtype /Link +/A << /S /GoTo /D (a00161_g9e97c58fe35f750ad192774be9408ac8) >> +>> endobj +2916 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 284.0589 173.7357 293.9866] +/Subtype /Link +/A << /S /GoTo /D (a00161_g28cf9765e4b57451af559ab988ad7160) >> +>> endobj +2918 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 272.06 173.7357 281.9877] +/Subtype /Link +/A << /S /GoTo /D (a00161_g17ccd786400fd08b941e11046df1668f) >> +>> endobj +2920 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 216.0414 179.6335 226.9453] +/Subtype /Link +/A << /S /GoTo /D (a00161_gb1fc692a2700b7a51517724364683f67) >> +>> endobj +2922 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 179.0922 173.556 189.9961] +/Subtype /Link +/A << /S /GoTo /D (a00161_g64807ba7c221ddf735572d05021539f2) >> +>> endobj +2924 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 167.0933 189.0379 177.9973] +/Subtype /Link +/A << /S /GoTo /D (a00161_gbc331f73107958428bf1c392ba19b6f4) >> +>> endobj +2925 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 155.0945 197.8948 165.9984] +/Subtype /Link +/A << /S /GoTo /D (a00161_g37e3103b9591790d484a450525739661) >> +>> endobj +2926 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4857 118.1453 216.0979 129.0492] +/Subtype /Link +/A << /S /GoTo /D (a00161_gf0349a8481565e80f55a751e2b408d6d) >> +>> endobj +2927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [446.0722 118.1453 470.7595 129.0492] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2893 0 obj << +/D [2891 0 R /XYZ 90 757.9346 null] +>> endobj +1316 0 obj << +/D [2891 0 R /XYZ 90 739.9346 null] +>> endobj +158 0 obj << +/D [2891 0 R /XYZ 90 739.9346 null] +>> endobj +2894 0 obj << +/D [2891 0 R /XYZ 90 719.4886 null] +>> endobj +2895 0 obj << +/D [2891 0 R /XYZ 90 593.9619 null] +>> endobj +2898 0 obj << +/D [2891 0 R /XYZ 90 477.02 null] +>> endobj +2900 0 obj << +/D [2891 0 R /XYZ 90 421.9777 null] +>> endobj +2901 0 obj << +/D [2891 0 R /XYZ 90 421.9777 null] +>> endobj +2903 0 obj << +/D [2891 0 R /XYZ 90 385.1719 null] +>> endobj +2905 0 obj << +/D [2891 0 R /XYZ 90 361.2178 null] +>> endobj +2907 0 obj << +/D [2891 0 R /XYZ 90 348.0384 null] +>> endobj +2909 0 obj << +/D [2891 0 R /XYZ 90 336.0395 null] +>> endobj +2911 0 obj << +/D [2891 0 R /XYZ 90 323.0643 null] +>> endobj +2913 0 obj << +/D [2891 0 R /XYZ 90 312.0417 null] +>> endobj +2915 0 obj << +/D [2891 0 R /XYZ 90 300.0428 null] +>> endobj +2917 0 obj << +/D [2891 0 R /XYZ 90 288.044 null] +>> endobj +2919 0 obj << +/D [2891 0 R /XYZ 90 234.0388 null] +>> endobj +2921 0 obj << +/D [2891 0 R /XYZ 90 197.233 null] +>> endobj +2923 0 obj << +/D [2891 0 R /XYZ 90 183.0773 null] +>> endobj +2890 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2933 0 obj << +/Length 1783 +/Filter /FlateDecode +>> +stream +x诘YMs�6诫W�(虳(綢:N殼I\[=%M�[塗I獕�}"@E莆d|0E>忭�v 檅�#S収�恇\N爿O譸剺� x緃~[N~yE誘!%.�#H�%t篭}欼D駖A炤綺^譝W媇攏腚2蒝I譐 5#X涂,逳畺 �1I0I4憧揙_餿漙腡(�FD):軲8e銮vr;p|∠3AX縦� %稻Qp58箚鑭A0瞥W�,<z櫱嘳扷疡x訯 d�1#!b弃oN�,OWF悼嬻�3苩}(�$�%鯎蟈鄕5�-"$b�坤 郵V@�*@|�!跰^VY碖z体I獎A鲸�+}v*愪� 鋏R纏b�=鞝T纄貙&��hA%Jd`�%G繇>塖璡瑖�-彶顚l��邐�4� @ +螐�/7iY�滆刍�21肨y��F耲搕m馘周龤V�'圮屬D豇+鑩尯�-�0槀�簋礲1�认x墔p侂檦�'MT�QUR�]v�) +%}魹 爻脵g( L4cz齿盄@掄l�嬹齡�堁諴鯏�轡�$乗噛豲鍵�lH 髼っ�(��v嬺賋�$Nに⺧睚>O呈Np粓Ⅹ_�?VF("掣媎_$PU�4[wD禋F�@�3覠_a謤[瞳:A,竡fA�丫糒4*KO "��43CQ"]s�+6 � +�廪t�<$E捙塎9辋.輐祯b{淜1C�5BD敾V ㈢k�*蟌呯悤�:� 頣嗆�(斈V偆(蜣 Of8绅D�(T敾刁2趎铮鵁綝\m6%莯�6�$櫅\揤cRQV钜掺液帧 6Xv嚥rgN痕o� X[�;嘲]Nn@E)G +琴屛C剴釋�澫鑌杭'e�鷣屨担?aY�3�vB锢闋� 洒轒T T脯M>�粄�'紨R踁G3錘忩8謾拇W霎庯菡屯萸w鏑K`�2b跙 � 煯綞z�卽��#B_堧g鶱�6弉湪沺鯴葄胣a�:uL巭嶁�靡4�1fo碫.瘔愽h楜�?f�7n@瞥!�2E�1{fS魯魵略Ip荍眵:�2齚u +谡墮暝*>捵喷xu]o)霟C� D�5禛憚儊蝻� SR喟�3掅� %�鄄�;矶(巤�r�$茋"啧p袱�'q枃摳觌 1囦g耦蕌煫I�8{歘� �2�W[�縣苦\M 虍虺婦��1鳞�擮�S"� �1h矼鶱.˙苞臜傘)壔O�誱肺V5r﹋m赠狥旸B<眅�3`爂�,閛Z�)�8霥谰 :蔄�T��N迒瓷箰.k拥�掎]Q懩I:骒堻N�?�'I%�6X_#�6lHJ ;%KWJ耗t務謳� N:愹蝌域耿 +笭X寜趥 塲a韟�6諓FY(Fx-淑眙V挷 +]辡融�$?KB&≡`6&a 6$u蕸[H$1耹@>鲍!'�捁膷喼俫J)$鋍�4�!YjP河 +娕焷t�:�J哰-篎�(�阎焃;榃�:Ps*5v抑� )aan璾鏕�癭#�潴v�EX焁:紞(谰剁蘥t!虪O>隻靽虾$f*垢衴 +鶦╄祺D蝰铆䦛�� 受潛檥*榞�篁蹴撬wwo>糦�^w僄硯匟除层洉觫底1OE鐦^张y�拶u?~h銈尴qBL?鬩禅M/刉tc荜�$tp,礋綄谶譏�Qsre泓轣颊澎`~j �.歆@姳9顋绣�u4囖aw坐2�龈鲎堽h祝��晧珨endstream +endobj +2932 0 obj << +/Type /Page +/Contents 2933 0 R +/Resources 2931 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 2938 0 R 2939 0 R 2941 0 R ] +>> endobj +2938 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 413.0808 135.0008 436.0496] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +2939 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.8662 413.0808 183.7077 436.0496] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +2941 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.345 341.4685 157.1381 352.3576] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +2934 0 obj << +/D [2932 0 R /XYZ 90 757.9346 null] +>> endobj +2935 0 obj << +/D [2932 0 R /XYZ 90 739.9346 null] +>> endobj +2929 0 obj << +/D [2932 0 R /XYZ 90 723.1038 null] +>> endobj +2936 0 obj << +/D [2932 0 R /XYZ 90 723.1038 null] +>> endobj +2928 0 obj << +/D [2932 0 R /XYZ 206.0041 564.8934 null] +>> endobj +2937 0 obj << +/D [2932 0 R /XYZ 90 548.1663 null] +>> endobj +2930 0 obj << +/D [2932 0 R /XYZ 212.5591 388.6469 null] +>> endobj +2940 0 obj << +/D [2932 0 R /XYZ 90 371.9198 null] +>> endobj +2931 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2945 0 obj << +/Length 2274 +/Filter /FlateDecode +>> +stream +x诃沒O$7嗭�沁筙��,#刃Q.�b�気炭蟩U賛椵荖6i�搛y帊軹��?l徼�(C湊zq骵�.>��扒厉R�?V{呓錸釄覾/V�4#�3綳蔺瞕岊px]緸\繩E棇旭披芹貘矜跛鷄s焦{|��u鮪飜崸\Jh鎚�橱睡tq 鞶"淯����0瑛馑炰"|q縲棍cg饐阱)&曜�$��後9\�疧析冠w|咕Xo�+zY?�3狐�� ^�%峜1鈹苽j篙嶦耯G胪踺v纟�)�I妖8>�荵}瀓+旧cA$�#)�$;r A,�-鋢� 烟驮頥Ic)釉宩"厱踧假�8Ws/F}晹�*� 4誾鍷)嘵�; �#铈牺[蠠&蛧4C蟹2泮 #蚬垺%1 稷�3DA_�*aRM�0梃M∑ns*喊怱�!'�'5�.⑻缂究遶擄s破V时�蔍聵k汄0N敂jgO) 珛�>舺*蕷=�堲T�7鬞顙鱐钴裇� 鸥iO菰z奿Xρ(M淿G�PO)m�7z*漱LOA0D�5=%\湸瓰 +瞯O%b=咞茷蕓=�9黥灐譯x瘳*�0憸6._:聲。XgKqh gL俵h┗/Oa{1D篾�鷎x=晸)ふ橎mj�歏僽T:)Z�d鞻K腪 鲘瓥�6Z-s頸5=>�'��3�%h9ⅹ憙N`筍yIk繿i銷馆�<融�1�8�仹��3�鄕宐�O�=笏�8� 2璡濜釚卯缅9槷棞艕�0郃��9&纐�<蹴灆�莄泮?漒\^\�9<=-0�廕f�*DU脼[>珇鴄rts 洽 +t�-q獞Y�0鐰謫�9&衠�=蹴�灆鰼莄泮'楃WE睓QDQ�獤�1兀=+龒^� 茅B鸧頝葔�dm葮c鲘怱�葯yd伫麐6鐒ia馬DU#鐠h%U炨涭a��t茠w N晎掎�4穴v麃�M寫TO烦潮枉峔~}Z弋?诸梣皝w�%逩�-韱賛� 7 蜄歯�+,;�nTn嬼侉n苐� � �!蟖厾�?瀽S訝?瘢�,网z鱰倒y蚩db^m�;:嶽湌滵�訊僺��e嘅仇&Dzg�&卫D� 佳?╞黭苹�X?瑹狷I旅7計w鬃� 僻轺\|惜u爚z|鮭煫邈箪鶔鳧峡繂~i]<倾� 褣*�ヘ祢endstream +endobj +2944 0 obj << +/Type /Page +/Contents 2945 0 R +/Resources 2943 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 2949 0 R 2950 0 R 2951 0 R 2952 0 R 2954 0 R 2957 0 R 2959 0 R 2961 0 R 2963 0 R 2965 0 R 2967 0 R 2969 0 R 2971 0 R 2973 0 R 2975 0 R 2977 0 R 2979 0 R 2981 0 R 2983 0 R 2985 0 R 2987 0 R 2989 0 R 2991 0 R 2994 0 R 2995 0 R ] +>> endobj +2949 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 618.5198 165.7154 627.3665] +/Subtype /Link +/A << /S /GoTo /D (a00109) >> +>> endobj +2950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 580.4794 165.1575 589.326] +/Subtype /Link +/A << /S /GoTo /D (a00108) >> +>> endobj +2951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 542.439 157.4166 551.2856] +/Subtype /Link +/A << /S /GoTo /D (a00107) >> +>> endobj +2952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 504.3985 156.8586 513.2452] +/Subtype /Link +/A << /S /GoTo /D (a00106) >> +>> endobj +2954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 421.7425 190.8904 431.6702] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +2957 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 365.6635 271.1301 375.5912] +/Subtype /Link +/A << /S /GoTo /D (a00162_g26440a35353cb457747a4cea372c62e9) >> +>> endobj +2959 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 353.119 280.5446 363.0467] +/Subtype /Link +/A << /S /GoTo /D (a00162_g30fe27cba3c14ae7f9a7f118144af43a) >> +>> endobj +2961 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 339.5983 213.038 350.5022] +/Subtype /Link +/A << /S /GoTo /D (a00162_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +2963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 328.03 176.5052 337.9577] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3212e70c55244608ac16316888c354f0) >> +>> endobj +2965 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 315.4855 176.4952 325.4132] +/Subtype /Link +/A << /S /GoTo /D (a00162_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +2967 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 302.941 224.8339 312.8687] +/Subtype /Link +/A << /S /GoTo /D (a00162_ge429c985be88ed048f382511c9ff00de) >> +>> endobj +2969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 290.3965 198.4231 300.3242] +/Subtype /Link +/A << /S /GoTo /D (a00162_g19709735f29dafeabb91e0882231f9f1) >> +>> endobj +2971 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 277.8521 206.5625 287.7797] +/Subtype /Link +/A << /S /GoTo /D (a00162_g7e904ab59f7ee134cf3218a8219e7e29) >> +>> endobj +2973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 265.3075 211.4442 275.2352] +/Subtype /Link +/A << /S /GoTo /D (a00162_g5025948dd998f65a13a375a37aa5edf5) >> +>> endobj +2975 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 252.763 196.052 262.6907] +/Subtype /Link +/A << /S /GoTo /D (a00162_gbfc1d8d15852318927cda30e1bc0470a) >> +>> endobj +2977 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 240.2185 209.3322 250.1462] +/Subtype /Link +/A << /S /GoTo /D (a00162_gaaaaf66ea67900c36d01136d5bad1168) >> +>> endobj +2979 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 227.6741 213.2175 237.6017] +/Subtype /Link +/A << /S /GoTo /D (a00162_g57aca709a33690cd4fb73fe199fa1bdd) >> +>> endobj +2981 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 215.1295 207.0906 225.0572] +/Subtype /Link +/A << /S /GoTo /D (a00162_g8b600918f84783490fd791ce773175ab) >> +>> endobj +2983 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 202.585 215.23 212.5127] +/Subtype /Link +/A << /S /GoTo /D (a00162_g6b2d00412304e2d95e7b853cce5858b0) >> +>> endobj +2985 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 190.0406 220.1117 199.9682] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3318dec654781e9d6d8ec873636660c6) >> +>> endobj +2987 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 177.496 204.7195 187.4237] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf784a76fe619452eddf87e6376a4bf9d) >> +>> endobj +2989 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 164.9515 217.9996 174.8792] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3a4852e2372e34e1c0142d1147fbe027) >> +>> endobj +2991 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 152.4071 223.1601 162.3347] +/Subtype /Link +/A << /S /GoTo /D (a00162_gaa60ca995565b799bb958c806e933665) >> +>> endobj +2994 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 95.3518 198.6315 106.2557] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +2995 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.1296 95.3518 276.389 106.2557] +/Subtype /Link +/A << /S /GoTo /D (a00162_g4647b76d0ef50a5305505041f5775a37) >> +>> endobj +2946 0 obj << +/D [2944 0 R /XYZ 90 757.9346 null] +>> endobj +1317 0 obj << +/D [2944 0 R /XYZ 90 739.9346 null] +>> endobj +162 0 obj << +/D [2944 0 R /XYZ 90 739.9346 null] +>> endobj +2947 0 obj << +/D [2944 0 R /XYZ 90 719.4886 null] +>> endobj +2948 0 obj << +/D [2944 0 R /XYZ 90 635.0055 null] +>> endobj +2953 0 obj << +/D [2944 0 R /XYZ 90 439.3093 null] +>> endobj +2955 0 obj << +/D [2944 0 R /XYZ 90 383.2303 null] +>> endobj +2956 0 obj << +/D [2944 0 R /XYZ 90 383.2303 null] +>> endobj +2958 0 obj << +/D [2944 0 R /XYZ 90 369.6486 null] +>> endobj +2960 0 obj << +/D [2944 0 R /XYZ 90 357.1041 null] +>> endobj +2962 0 obj << +/D [2944 0 R /XYZ 90 343.5833 null] +>> endobj +2964 0 obj << +/D [2944 0 R /XYZ 90 332.0151 null] +>> endobj +2966 0 obj << +/D [2944 0 R /XYZ 90 319.4706 null] +>> endobj +2968 0 obj << +/D [2944 0 R /XYZ 90 306.9261 null] +>> endobj +2970 0 obj << +/D [2944 0 R /XYZ 90 294.3816 null] +>> endobj +2972 0 obj << +/D [2944 0 R /XYZ 90 281.8371 null] +>> endobj +2974 0 obj << +/D [2944 0 R /XYZ 90 269.2926 null] +>> endobj +2976 0 obj << +/D [2944 0 R /XYZ 90 256.7481 null] +>> endobj +2978 0 obj << +/D [2944 0 R /XYZ 90 244.2036 null] +>> endobj +2980 0 obj << +/D [2944 0 R /XYZ 90 231.6591 null] +>> endobj +2982 0 obj << +/D [2944 0 R /XYZ 90 219.1146 null] +>> endobj +2984 0 obj << +/D [2944 0 R /XYZ 90 206.5701 null] +>> endobj +2986 0 obj << +/D [2944 0 R /XYZ 90 194.0256 null] +>> endobj +2988 0 obj << +/D [2944 0 R /XYZ 90 181.4811 null] +>> endobj +2990 0 obj << +/D [2944 0 R /XYZ 90 168.9366 null] +>> endobj +2992 0 obj << +/D [2944 0 R /XYZ 90 111.6113 null] +>> endobj +2993 0 obj << +/D [2944 0 R /XYZ 90 111.6113 null] +>> endobj +2943 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F11 705 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +2998 0 obj << +/Length 1852 +/Filter /FlateDecode +>> +stream +x诃Z蹘�6}鱓� 噖灞庭 Rt摳OI(^碲�-o|�&%R�.&佃"@謻巉�3g/2L)䞍iFj抭ˇ隧凬镳螂 港Wx�*�<{挪iF2旁tq[YP@$6]軀�)耟~�$�-��洸8诌舿t鰪�?~Y紳 +j� +}貵繼澕\4给$W`�焲鶥�7幺 %<3r鷢_(�,c禹D0羁l&'�;鯈陙J嗝� 檾�斸竨=蜽y\锸肞萒# 繙�P烩AJ�*"�g;轴g芼�P|奍髫燫~A悓*睁溠賜}芋� ;卷澝|p鳷=�6奵E2遧z羋抙肈"� +!3刬�PI}2痼W:朗僚聡�H�X拆Q忕�'路�& 喏=�(zvm嘦辟|齸Z{qh乑肬"曭�裈癗畋嫠U^┱砏 �Ci嘹i譯Jy jY�|蔯d(鬸�P.[�4P�|:5鑄塲((STg鎙詚oSX 駋U8E豆%C��(蒃�犾2馫\晬/A|K?0#~躱Co汎-遚�彚g鱈齨{擐狙DdH緓<*暹鄃#嘿 +阺嚛�m� Sht\鑈x槏醶�.]漉燐齖萗曕�1vC R|X�7粐�乘 �酺楪4Ld寴L鑄脁X篴儽唹鹠&魶n槚�1 彚g鬈0挥颃4�0偁鲁D<*暹(�'Y'鸒�0囥~w�&蠄T ~mA�3_艶v�k@��? h]�=I锷L�.伱擊�4�K=*賧伖H闩濟� �&郛鍃D着C鑊 楀雛`}fp荅⿰忂�务ξp嬞JzzA.UF40s乖 VkK;�1╲躱S钚o恨-遚 +彚g�,硟讓P +&�廕y菂;JG7鲏�7z %釢閑1 �5k`6�7榿u綴�[V)�8鍉藯6炭瘖蜴2棏`RgO矯8儍蔙;�栦rh0洛刜襄栠$椲綠p9E蟦C隴�菵朒侴ボ 嗜廂鋤�傄牁ㄙ鬧举.�嘦Q^枽埤�q懱D]7'� eB妀鄏(露.;\ �d� Q�e7殱時蕹f澴袈I奄`�L^u顴乥�,;=颚胎c��?靚=�)鄞检P�6�-鯡刽dhn抣/�"�=妅M� +{擡{詊婴�付艰犑淨�\沾詘 FA墵:'跐亨甆鯡K� +岩赨囜V嗁煤Y�鯐e�#u`@E`鳅�7醯g觺S壻桍-e韊晽A訿C澝琂Q鮹�|厠 �舌eeU� 0傒is� 币�:;^寽烏H4糎^爕y蛪栐�5(D]� [SMkj^[.纣|[� #B4�`6t鑯 -�6R永:Tm �!繞臩袪r�蓂稉s鑪酜鈉hM!絲^�荱�鋲"滱�I婋 黝*=OD?z氳�78Kx愿I"枠�鬈�58Cb專雳傆俏�=C8锅藈锞^� :忞�=鈚Ь 熉鰼{� 羿�8(&擳��'�&蜑�g! �4.踺/$\v隘嫴冂G/d>��o炣`�/}硒s骝�(UN鲧 W鎛閡zs硇劧U蚺钋匣㈧η灧 溏?狻紼endstream +endobj +2997 0 obj << +/Type /Page +/Contents 2998 0 R +/Resources 2996 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 3002 0 R 3004 0 R 3005 0 R 3006 0 R 3008 0 R 3009 0 R 3010 0 R 3011 0 R 3015 0 R 3018 0 R ] +>> endobj +3002 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 704.6952 196.7787 715.5991] +/Subtype /Link +/A << /S /GoTo /D (a00162_g52c3c5ab1b1aa0659b5e465f7fbcc409) >> +>> endobj +3004 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 692.285 175.2098 703.189] +/Subtype /Link +/A << /S /GoTo /D (a00162_g984c4a8b65a3cb35460b073a40568c25) >> +>> endobj +3005 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 654.5133 188.49 665.4173] +/Subtype /Link +/A << /S /GoTo /D (a00162_g123c95a7bb55143cabba92446ce8f513) >> +>> endobj +3006 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 616.7416 185.1725 627.6455] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf11c966b0e4f4ecaa73deb14bfb6830f) >> +>> endobj +3008 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 579.3435 181.2968 589.8738] +/Subtype /Link +/A << /S /GoTo /D (a00162_g82ff99d50221f7c17df57dc6092ffc97) >> +>> endobj +3009 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 566.9333 172.998 577.4637] +/Subtype /Link +/A << /S /GoTo /D (a00162_g69b075ef7e4d7bcf5a903d3d75baac02) >> +>> endobj +3010 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 529.1616 176.8634 539.692] +/Subtype /Link +/A << /S /GoTo /D (a00162_gd1f18f739da7703628c3663209463a0d) >> +>> endobj +3011 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 491.0163 180.1912 501.9203] +/Subtype /Link +/A << /S /GoTo /D (a00162_g86beee1f69d05b16022dfb430470e9ce) >> +>> endobj +3015 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 334.2427 142.7416 355.1542] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3018 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 137.7572 142.7416 158.6686] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +2999 0 obj << +/D [2997 0 R /XYZ 90 757.9346 null] +>> endobj +3000 0 obj << +/D [2997 0 R /XYZ 90 723.1038 null] +>> endobj +3001 0 obj << +/D [2997 0 R /XYZ 90 723.1038 null] +>> endobj +3003 0 obj << +/D [2997 0 R /XYZ 90 708.6802 null] +>> endobj +3007 0 obj << +/D [2997 0 R /XYZ 90 597.5219 null] +>> endobj +3012 0 obj << +/D [2997 0 R /XYZ 90 454.7247 null] +>> endobj +3013 0 obj << +/D [2997 0 R /XYZ 90 428.2397 null] +>> endobj +3014 0 obj << +/D [2997 0 R /XYZ 90 428.2397 null] +>> endobj +3016 0 obj << +/D [2997 0 R /XYZ 204.8181 294.2849 null] +>> endobj +3017 0 obj << +/D [2997 0 R /XYZ 90 278.0449 null] +>> endobj +3019 0 obj << +/D [2997 0 R /XYZ 295.0094 96.348 null] +>> endobj +2996 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F50 1172 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3024 0 obj << +/Length 1356 +/Filter /FlateDecode +>> +stream +x诘XKs�8倔+|4U嫝置�wB睮懬&蘨f*e@j纅嵸LH杔l,R蒚萺豢頥�亙�8!v|睿�2蠙畕貀戂W=0�螨�*瘅竪vIB'D�[眀� <襗R砼娚侹皐uj�壗銛b�$玒@}�9咁擱��+A樖�!梋莢jQ9l1k="��pd柂J�曱遥>溫O籂咻O�Z鸌)vZ?閷尉�oh麑~舫�薠�2E�8镍PS�M%W癸'匟K澢斛�斧#鼡f�4壋}5~]埜V{迳��辫筗L&#�+禪﹙&�嚇b{溕]酗fr覤+揔庇樮�=搹�7碮櫶莌H讴�'B內訨潢逖闉�嶧�廽j伎}鱹孚汭崘��0挣)<��镎�5嘩s��C,�>tk梍;�牭T�#u枖��<侣遒晥Ee卌艡��uY硧媠3盔溞sb.(ejx嗮娤Ij镀Mf祴渥蹕h躝獘EK攡/� ]endstream +endobj +3023 0 obj << +/Type /Page +/Contents 3024 0 R +/Resources 3022 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 3027 0 R 3029 0 R 3031 0 R ] +>> endobj +3027 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 583.7986 142.7416 604.7101] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3029 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 371.5861 142.7416 392.4976] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3031 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 198.9704 142.7416 219.8819] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3025 0 obj << +/D [3023 0 R /XYZ 90 757.9346 null] +>> endobj +3026 0 obj << +/D [3023 0 R /XYZ 90 739.9346 null] +>> endobj +3020 0 obj << +/D [3023 0 R /XYZ 200.3847 522.0587 null] +>> endobj +3028 0 obj << +/D [3023 0 R /XYZ 90 505.3316 null] +>> endobj +3021 0 obj << +/D [3023 0 R /XYZ 273.161 309.8462 null] +>> endobj +3030 0 obj << +/D [3023 0 R /XYZ 90 293.119 null] +>> endobj +3022 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F52 1229 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3034 0 obj << +/Length 1133 +/Filter /FlateDecode +>> +stream +x谕XK徾6钧W枧j�3|執m踡��6�) �5甑\[�&�綜墷�2礒/�/z屾鹒鏇!MH8� �N~ ~��C�)冕乨�滕惵M涐鐟�*垃R� 省髝骒倎wr�送6[Wn汴百泑�塅獫G蘓~o嶰隧逗蘤牔邧O鹠孢=�3T隅皖囡珱"麂浡败锓浾�8鷹涒盵� 炾Di[k墙:F揸泓緉咚瓄z磲騤業5蓙�=批�Ui:Z蠆O +惌yQ鄪僸�砆�7F>俒 紞x�嵝�;$鹫惱%O 叠�WZ1.%�<槙+��P縅2nH/ 篴�鐏OV碊QCC秕瞂V�>囉�8f`胈跀�p�7�戅f=E<髌n�-躢m�7h5聇�#结砬8酎嗈� 絨w,朎痌8蛌ャ�VD乎梈愞暛隉�)�.袱崸壴>Vno5^�\XQ蠵��kcYj朾 +m渌女虶8t�:熮咿]蒉䙡踽C坷H��?疟戔W跧锸寙邮矸嚩儉轆{;x诃猋�墵袠�*iDd蘁uE< e稸J 鱫7愺秃?�@u�#s鳞彵棂)X[8$4�,駝�*H�r買�畑�簡!�4��0� �6@ �!�8n@w\-鞐 微鐆H涊ΨT!汅駆�H淈1鞹a贱)0愰��UN嗀+裏�?J�6�4蚻J氅?蒺$绶�.;�:陱#r繜靖q '䴗鴎瘧Ww裙�k躋C&祛�y�?钧3忺埙噇譓�;�认?�:�endstream +endobj +3033 0 obj << +/Type /Page +/Contents 3034 0 R +/Resources 3032 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 2942 0 R +/Annots [ 3037 0 R 3039 0 R 3040 0 R 3042 0 R 3045 0 R 3048 0 R 3050 0 R ] +>> endobj +3037 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [318.3113 672.5415 370.5648 683.4455] +/Subtype /Link +/A << /S /GoTo /D (a00158) >> +>> endobj +3039 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 617.7467 184.9831 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00101) >> +>> endobj +3040 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 578.8924 184.4252 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00100) >> +>> endobj +3042 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 495.0563 211.8219 504.984] +/Subtype /Link +/A << /S /GoTo /D (a00078) >> +>> endobj +3045 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 437.2279 213.038 448.1318] +/Subtype /Link +/A << /S /GoTo /D (a00163_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +3048 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 380.3757 217.7102 391.2796] +/Subtype /Link +/A << /S /GoTo /D (a00163_g03070adbf8faab0f34f87c1270964306) >> +>> endobj +3050 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 367.7979 202.2283 378.3282] +/Subtype /Link +/A << /S /GoTo /D (a00163_gb97849f0d3ea858eee790b69591e6427) >> +>> endobj +3035 0 obj << +/D [3033 0 R /XYZ 90 757.9346 null] +>> endobj +1318 0 obj << +/D [3033 0 R /XYZ 90 739.9346 null] +>> endobj +166 0 obj << +/D [3033 0 R /XYZ 90 739.9346 null] +>> endobj +3036 0 obj << +/D [3033 0 R /XYZ 90 717.1645 null] +>> endobj +3038 0 obj << +/D [3033 0 R /XYZ 90 634.6393 null] +>> endobj +3041 0 obj << +/D [3033 0 R /XYZ 90 513.03 null] +>> endobj +3043 0 obj << +/D [3033 0 R /XYZ 90 456.1778 null] +>> endobj +3044 0 obj << +/D [3033 0 R /XYZ 90 456.1778 null] +>> endobj +3046 0 obj << +/D [3033 0 R /XYZ 90 399.3256 null] +>> endobj +3047 0 obj << +/D [3033 0 R /XYZ 90 399.3256 null] +>> endobj +3049 0 obj << +/D [3033 0 R /XYZ 90 384.3607 null] +>> endobj +3032 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3053 0 obj << +/Length 2297 +/Filter /FlateDecode +>> +stream +x讠Z]s酆}鳢蠰_�7埣J庠嶿[轫掏�,1宝蹭+KM襙�I罓@.豽2Q驷瀮=K`)倣(點#KGFb呍E� }�?�?a烷S8~櫇�#Kz4鸝E袑(硒h饵m虡湝r竼�7pㄨ�Z\m棁uY無嚙r碂颳弁澉偾撻,7簲刑瑶q蜊飔�}O(禤o饏f-=滺.鼦跎萆連滫DuA尊葶c捓_� 囻歾|歱19e斠癔錍=溑z僸悒0b暘@ +%��@X饧芟W雛伽Y霽�>!HD檰8\蓴�W/鮡鍎忶映O硭鉽抡鴞s~^|樛nZZ�9蜥�>蝵[.雙涻v�(圐<�V6蜕/旘��胱蓥殍殫r�/'管�7N72f堟RV#�AR轳惆诠@钲件��蔧}箭�>蛒1_�鎷�齴�,\ +涬� 茜CY甛瀄峁琖'~6狼裨T� 綗皅�!麇癬璚�鰝~盷杘:*XKAl羍]z顝籵唾郏{,喼5(邝X�A&k 飾簖��.w_á馃 a�&W艖湥;!�2R襤N袩R藟鋔h +<G熌m'c�!U!5��<�揊胩呍 +.裿h.>K窛嬘j�g}赴Pl鞭爵鐗qNhK�p繿=鞙H<�4唘芩I4t-牕聡�(fY}穜kL:�*瓑う窛壩wápR2DqL_8WI2(\臅@�(C +輪稩獷4N俼{D�?痾xF纐訴蛺荄呇D鐲傲kK�猌�-PG� 胎喟挅P+D╬�*擘伋��sJ?旙 ^{彟踟顋廠v稝$档帧DS姅歌F3SD个贩鉅� &x<,_sQ@p轕u-轑俚槆��!壽EZy�c�]碲��掺(t字猏閥X摘鷉瞺姪J藆��[誌[z樲瀃^gM�<�L杬璪n�;,鰢輨阄)Tr7Р发cR�柇h旕耽3季�/説訆啣D@笾fF*毫�4$q垭� TJr{q +袑*< �!嶝yQX槝Y=?灄町辴Z-� 俁裬u @�艾�(惬�^ou嬿O薴� 乖膒脦塞蓥鴾�$畵耠魲窏覱雏纷熮輄濤泾箜邋鬝��諵铔褱TF宍通m媋攙�. 逼瞺�#f粐錷�#踧轥{�;丽�踧I\'泱磐屯鄢怂�g辛JV郰� =�,(翉�=�A軸�6m}漸@a2a��g��諄囧�c岅� u�▋鶒:纄$q�:�0=;熮蕙?3颁OM@e4q藞�-塽X� M磿{ @�艾�(惬�^o}�7o}泑��I\扎髩[}飧鄆TJ欼R@e詑C�G鈞WF�龒} 缞烂駿�1FE�髥"坹A媩H�2捀h冀季Kf~n$1JK<1昋膷!\+]蜟矦镲韈婕囧澢#鐀捺|�;砾�鐀I荜'瀑戽蒎櫥走�篘梱�-)S酇 �椝騥讃6[繪"�蹊> endobj +3056 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 641.2029 187.822 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4b119801e50cc1824498a1cdf9adc37) >> +>> endobj +3057 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.4287 641.2029 284.16 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) >> +>> endobj +3058 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.7667 641.2029 375.5365 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_g23705efb9077187881f094fc9be13bde) >> +>> endobj +3059 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.1432 641.2029 461.364 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) >> +>> endobj +3060 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [464.9707 641.2029 513.9963 651.7332] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +3061 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 629.2477 123.0855 639.778] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +3063 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 565.3112 177.3318 574.1579] +/Subtype /Link +/A << /S /GoTo /D (a00111) >> +>> endobj +3064 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 521.7174 176.7738 530.5641] +/Subtype /Link +/A << /S /GoTo /D (a00110) >> +>> endobj +3066 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 426.7436 202.5067 436.6713] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +3069 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 361.1235 309.3265 371.0511] +/Subtype /Link +/A << /S /GoTo /D (a00164_g5a5bfd7e9060903893481db90645187b) >> +>> endobj +3071 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 344.826 213.038 355.73] +/Subtype /Link +/A << /S /GoTo /D (a00164_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +3073 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 330.4811 255.0802 340.4088] +/Subtype /Link +/A << /S /GoTo /D (a00164_g31be289fd8ec3fe09b0088165d13976d) >> +>> endobj +3075 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 315.1599 302.4923 325.0876] +/Subtype /Link +/A << /S /GoTo /D (a00164_g8714af98a550f10dc814db92b08d1b0d) >> +>> endobj +3077 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 299.8388 290.1386 309.7664] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4357cec23abca29d2bb885803625a6a) >> +>> endobj +3079 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 284.5176 269.4366 294.4453] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4d457c50e6f2cef57167c3804ce8bf7c) >> +>> endobj +3081 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 269.1964 275.7527 279.1241] +/Subtype /Link +/A << /S /GoTo /D (a00164_g863c94b0ed4a76997e53a3ccd5d0b6c3) >> +>> endobj +3083 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 253.8753 230.8912 263.8029] +/Subtype /Link +/A << /S /GoTo /D (a00164_g40fb1fb2d990ce04ae9bbee275627c03) >> +>> endobj +3085 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 238.5541 217.6111 248.4818] +/Subtype /Link +/A << /S /GoTo /D (a00164_gda99954e0f6905091885934e86c278cc) >> +>> endobj +3087 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 223.2329 239.2498 233.1606] +/Subtype /Link +/A << /S /GoTo /D (a00164_gd895686859ae7d178d31be04eb0a1a97) >> +>> endobj +3089 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 207.9117 236.0418 217.8394] +/Subtype /Link +/A << /S /GoTo /D (a00164_g38af81a4c9884ce89803fc3e52383112) >> +>> endobj +3091 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 192.5906 176.5052 202.5182] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3212e70c55244608ac16316888c354f0) >> +>> endobj +3093 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 177.2694 176.4952 187.1971] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +3095 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 160.9719 190.8811 171.8759] +/Subtype /Link +/A << /S /GoTo /D (a00164_g71e1b022f7b7fa3a154f19372b239935) >> +>> endobj +3098 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 95.3518 210.2479 106.2557] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +3099 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.746 95.3518 288.0054 106.2557] +/Subtype /Link +/A << /S /GoTo /D (a00164_gdc5aec3587b2c55b714a6c2f37b56cba) >> +>> endobj +3054 0 obj << +/D [3052 0 R /XYZ 90 757.9346 null] +>> endobj +1319 0 obj << +/D [3052 0 R /XYZ 90 739.9346 null] +>> endobj +170 0 obj << +/D [3052 0 R /XYZ 90 739.9346 null] +>> endobj +3055 0 obj << +/D [3052 0 R /XYZ 90 718.4222 null] +>> endobj +3062 0 obj << +/D [3052 0 R /XYZ 90 584.5736 null] +>> endobj +3065 0 obj << +/D [3052 0 R /XYZ 90 447.0871 null] +>> endobj +3067 0 obj << +/D [3052 0 R /XYZ 90 381.4669 null] +>> endobj +3068 0 obj << +/D [3052 0 R /XYZ 90 381.4669 null] +>> endobj +3070 0 obj << +/D [3052 0 R /XYZ 90 365.1085 null] +>> endobj +3072 0 obj << +/D [3052 0 R /XYZ 90 348.8111 null] +>> endobj +3074 0 obj << +/D [3052 0 R /XYZ 90 334.4662 null] +>> endobj +3076 0 obj << +/D [3052 0 R /XYZ 90 319.145 null] +>> endobj +3078 0 obj << +/D [3052 0 R /XYZ 90 303.8238 null] +>> endobj +3080 0 obj << +/D [3052 0 R /XYZ 90 288.5027 null] +>> endobj +3082 0 obj << +/D [3052 0 R /XYZ 90 273.1815 null] +>> endobj +3084 0 obj << +/D [3052 0 R /XYZ 90 257.8603 null] +>> endobj +3086 0 obj << +/D [3052 0 R /XYZ 90 242.5391 null] +>> endobj +3088 0 obj << +/D [3052 0 R /XYZ 90 227.218 null] +>> endobj +3090 0 obj << +/D [3052 0 R /XYZ 90 211.8968 null] +>> endobj +3092 0 obj << +/D [3052 0 R /XYZ 90 196.5756 null] +>> endobj +3094 0 obj << +/D [3052 0 R /XYZ 90 181.2544 null] +>> endobj +3096 0 obj << +/D [3052 0 R /XYZ 90 114.388 null] +>> endobj +3097 0 obj << +/D [3052 0 R /XYZ 90 114.388 null] +>> endobj +3051 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3107 0 obj << +/Length 2315 +/Filter /FlateDecode +>> +stream +x诘沋��沁鏢鑡忌耷dm�孿虬�04R螲垘�o淥焍��蓞e鴄ぶ揩獘蹉�&3 �痊�3%j棾政蟐囹�鈤~靠�Z<�6�5捠兮钩 斝賐斖逷��5椻眪瞋V籱{柑[|渜�=!耚}x�^]P侷b|釛唣l 羮|缊5Z虀�/懄〕��=犸翈籥熨a�Gj劆(<黝zX]肚脃,d瑦�绩�V�4要� 髫馘N�9�/脻] �.〔6滱_z瀬萆漖�扻駖儶鄻A=愀Q屵W��龕諸/�p0宰o攦嗩趌桟墶竢�玸]帡�陣慑.m敊欞蜞萚烗B鄕Jn砄m?_羡肒{�v醶滚�9f苖�居.1k4⒏窴d�.6橀� +~}楕-庅╋妐�爬钊AU侭蚀nzA攋殩q�в'蟊 佐^Vn鷾迁轶~C忧~'哤骴&k�畕罬讍讞�豈kc繀戧雓;vn/4纟dU! +3 膴糈ǘd�T逡%V琥A/腈O楀鲂�?}謁2=狍to9}攟綳蛂?軼聕杍u��V�侎�20懥0y�権��I偒&胬n +対桘d百&ytU! +!iz蚑� m劑笴0d撎D声炯P�z>s �覕楁AV�%6樶ム左掵齰^亦*x)�9皼騜栞愦0稠ヲ� +狟擩�9謔Z�2誅*i壴9Z糽挅悮锾 +棃梢:7�寄姉昚� 鎄甥 ~虞大鎥n�*潾医02踚N_ +h`7モu$j沃J瘼�蔪屡Y/!�<@wS薈の襦e�'�)簖咐q俴侨H=�*2QI*tx��9軓qx1賳鲶qu軨鹚顠輋嬤�6斄杵]%D湱/sb楅搡玟愖64I篧!=/�0蚻{唁 � +怓軦�亦诅Sw侳齉MO蠤酦刑塕=�3晡蟗┹保鳇�tB齥d燞慰}狱斌ogW该壩拏V�犈瓶惥!翱�/� 藿牶莸's愞嫮譻{.縄�妻p'堭駰�0�;態~欲鷀鳢��$j 顄|処蛀鲂灃!>W燑噺&賅鲄P��D貽踥c轵=�鰶弊巜俻気煆�b� N忶�#?獀�yendstream +endobj +3106 0 obj << +/Type /Page +/Contents 3107 0 R +/Resources 3105 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3110 0 R 3111 0 R 3112 0 R 3113 0 R 3114 0 R 3115 0 R 3117 0 R 3118 0 R 3119 0 R 3121 0 R 3123 0 R 3124 0 R 3125 0 R 3126 0 R 3127 0 R ] +>> endobj +3110 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 704.9751 226.0986 715.5054] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4b119801e50cc1824498a1cdf9adc37) >> +>> endobj +3111 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [276.1106 704.9751 300.7979 715.5054] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3112 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 667.016 220.0116 677.5464] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) >> +>> endobj +3113 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 618.0981 215.05 628.6284] +/Subtype /Link +/A << /S /GoTo /D (a00164_g23705efb9077187881f094fc9be13bde) >> +>> endobj +3114 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 569.1801 209.501 579.7104] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) >> +>> endobj +3115 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 520.2621 205.0776 530.7925] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +3117 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 471.3442 192.9132 481.8745] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3caacabb2fe1c71921e1a471719ccbd2) >> +>> endobj +3118 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 433.0115 229.8943 443.9154] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +3119 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.9163 433.0115 304.6036 443.9154] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3121 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 395.426 200.0962 405.9563] +/Subtype /Link +/A << /S /GoTo /D (a00164_g1d34be506a61db90dd7829117efdf8cf) >> +>> endobj +3123 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 357.0933 208.3951 367.9973] +/Subtype /Link +/A << /S /GoTo /D (a00164_g9e6d2864f390a4ba1ac60dc65e2b9815) >> +>> endobj +3124 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 344.5895 226.5766 355.4935] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4433d3af16ea083a81576d0f18ba57c9) >> +>> endobj +3125 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 307.0041 221.0375 317.5344] +/Subtype /Link +/A << /S /GoTo /D (a00164_g41e616d3fcc17e0aabfe8ab45ef0d30f) >> +>> endobj +3126 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 269.045 224.913 279.5753] +/Subtype /Link +/A << /S /GoTo /D (a00164_g0e0ea5f24b77f124ba33bcbc7ede5bfb) >> +>> endobj +3127 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 230.7123 236.5493 241.6163] +/Subtype /Link +/A << /S /GoTo /D (a00164_g2a939aa4fcffabbce1dc1f784a7e0ad3) >> +>> endobj +3108 0 obj << +/D [3106 0 R /XYZ 90 757.9346 null] +>> endobj +3109 0 obj << +/D [3106 0 R /XYZ 90 723.1038 null] +>> endobj +3116 0 obj << +/D [3106 0 R /XYZ 90 489.6163 null] +>> endobj +3120 0 obj << +/D [3106 0 R /XYZ 90 413.6981 null] +>> endobj +3122 0 obj << +/D [3106 0 R /XYZ 90 375.739 null] +>> endobj +3128 0 obj << +/D [3106 0 R /XYZ 90 194.2427 null] +>> endobj +3103 0 obj << +/D [3106 0 R /XYZ 90 167.7577 null] +>> endobj +3129 0 obj << +/D [3106 0 R /XYZ 90 167.7577 null] +>> endobj +3105 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3138 0 obj << +/Length 1587 +/Filter /FlateDecode +>> +stream +x谡Y蹘�6}鱓柩 �,飹霏m掖Rぉ邟 汹艿Q[谑v擖}�7�eI� � 0E�螑g�I0�#I帗T�(g\&涖'旋rA莛 +芖!唰踱嘷h炰(桾&雥cA$(∩z鹡I埣YQx//拷仸繩偘m籍稐儾礴真rT骞8铽蜴铭这藕!v~ &墻齵耦N多攉F,螪� 0"yN撱係��?4v靲yahz溌�2聮�(#9Dea挜 J!�G"��,MR�N17醲窆8>蚤�?C�)Jh碠铜w貛闉 � $8E)ab菴x剜榲駬痕鰫 磯� A +襋'W j�>拨闊馘P斲�=垝枷~= ?錑d�哴� +8NE>�5A[郁H撀�7KS錅櫫逢^摘塄� 州眡|�嚸{,0�'芞o}b呈e雾蕯�2D絹鍍耱�倵諂󹀳T'O{渇q$琄B!�<7?僈w沛/齴杭繑迟陀yW渕k部z� +皍u原 p蕍5>9t吊;肇t]慨護<�,UH[u牂6k{N獑蓧オ眢�8櫆罃A筽壓S� /mhPJ懁.a霛�頛/彈淤バ舌^藘至~n潈餘 �>h �'u�;�&@ǹ斀� ��$�u]餌*鉊��1�' ^灬犩5肮�7烿�&�#k3>C�&鼒煳佳0磦7N[麖弲偳�� +谱h閶汜䥽'��~延X+z#苡mEOX裬甭嫗��蟌蔐脡W 裨 �S ヅ6�b儆>���>� E*频/D]�>Nr$夘洢}c設志孛A韐`s祇4>M蠫謋j_梷嗹M�贊珆h祇�>�6鼂k熜緈q.v悳�=Y踣鞀�26��*宛秲E�9〦�窲�:舗咊蛄p啫H纂)�&枀C疊x納�65駞葟鐖淨!�=bhP1m'宷$8祚馎旵Q1娧w梆鑓*呒z桀kp^[C7n葶宏v�煜谪&卮l�1R颽第 K[?�#祪1牬仝←u硇繚凇!z涜愫n�砑uP剆札秜罊&w詯7轌粊K倣$L盤赼侢�;h踃j悕ヮ潮�-K=hc┗釾�蜏�0� �w》睹�<鋐杮�癝臯�.烢瓎娱斀*N窎娡鵕讠r礍胊F茁聱�畻g术弋蕊誝]+蚫敶努�%祝傘下螗飉6 �婻G髬9飶牯處躁Q罵囙J眛}n 襪祭隄跅8S��5貙沞*�9}肃滍蜮輄閟w鶳� 4x殢�9]�3x��.窖窄▼#D�>]哮鼿纣~t斀杉G咍瓹B桐蘂甾�馍w�脠銓vH�9x 崀V綕� +u[�&憁(cm朞鞛6D 蔯7�0q.�璆糯�0趆g]诘��?渨N蓊縎 �A[{6�%匀瀈r摍簶怮bs1酧笜宁 猟泏1峃{1櫊彫图榯賕\L&鼒煳綐寙〗槍忧�/& 1"撡7\L鸁u"<劻="咟�/>鎿U�柱N揕YfN釥 凨诟㈢鯮暘.�?D騥選�7钆=陗�-e吩}堍Kw粞[�獐`>n汐蟔bupA堃快唞揺ndstream +endobj +3137 0 obj << +/Type /Page +/Contents 3138 0 R +/Resources 3136 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3140 0 R 3141 0 R 3143 0 R 3144 0 R 3146 0 R 3147 0 R 3149 0 R 3150 0 R 3151 0 R ] +>> endobj +3140 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 718.6794 154.358 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3141 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 718.6794 222.4221 740.9309] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3143 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 561.9505 154.358 584.202] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3144 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 561.9505 222.4221 584.202] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3146 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 405.2217 154.358 427.4731] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3147 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 405.2217 222.4221 427.4731] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3149 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2537 340.6391 333.0469 351.2293] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3150 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 124.499 154.358 146.7505] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3151 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 124.499 222.4221 146.7505] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3139 0 obj << +/D [3137 0 R /XYZ 90 757.9346 null] +>> endobj +3104 0 obj << +/D [3137 0 R /XYZ 231.9163 693.5209 null] +>> endobj +3142 0 obj << +/D [3137 0 R /XYZ 90 672.2941 null] +>> endobj +3101 0 obj << +/D [3137 0 R /XYZ 231.9163 536.792 null] +>> endobj +3145 0 obj << +/D [3137 0 R /XYZ 90 515.5652 null] +>> endobj +3100 0 obj << +/D [3137 0 R /XYZ 231.9163 380.0631 null] +>> endobj +3148 0 obj << +/D [3137 0 R /XYZ 90 358.8364 null] +>> endobj +3133 0 obj << +/D [3137 0 R /XYZ 231.9163 96.348 null] +>> endobj +3136 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3154 0 obj << +/Length 2597 +/Filter /FlateDecode +>> +stream +x诃賿愣駗綛彋��嗑%駔砙幗q旘冺阝H�k%rLR镞�/M帤�繤woD6&�%�棝缅o瀈駸w饈鼀魍w4踕(揟n鰪�$HPB7/[�(贿Q伔?逰�-茕p.嫪��m�q帽FXH `� Qf躅菥ш�LC篦籣~脹#0黢#杋眣� F$髓鎟�) 擉�?铪捭q靻钩 耝s8 +S5� Q$顆c8�)o 镞|Gx碔r� 耒�c鎬� +q@闌^�'炏L螮昣 +'礯崩��'x[桮張E坴� �渿r膞�8∷耸!镹=�{�88\浧h蒒�r掊n詖M慱怳#XQHR�,沤E⒊� +�-y彐/寶怊k裿nr煽毫C徉A赫Sq魦㧟X脗A[4 !0存炪�X� +ll娗厚全簨〦圼脁8A�N 邥鼐� +s琵X獩颟砙~�n飽囥檓F�畮~隟贊奇O3寈&%旸�3娆讄j�<蘋�黟粁�3尕RS銂*:co廖b枠`p菙C鮌7檅3尃��歙鬜z糣嚠�+'┮��赯�0唠扑�{Y= z1 +躋鴫�鵣琱|f-`砎 @k=�.啔��!���9訓憻婎�迎诜c�S�%朐{�虮� VH&l嘅煖炿碴娖噦z-$糂Z"cH2挱K+哯�HhE,凤/乡bETk񐞊X>踞J綘f8�h柛:L�搰tvC>=�-�l嘃�$詴@攄c晁b鸱鴺郙�0 m� NE�.���)6G怭摱3a?~[甁W尭糾熕蕸|埔翳�#彶 �>�y�:�⺳坼]聆瑿唂*滥L槩$�5く5甎[>U6� _y�@�妴呉凘 +悞馡m眖�69誱7�,湙H�<袥I� QM7�4缝-�颾鴌\榒5疮D~�&�GXS5b`湳詳n"�$ +襎Bnf%#懩J魭�5UX}�6�)蜳�1皣毌(暍吵煁� 崭�;訳U_ �!飉蠗匔 謬 7h扛佀彰重М璌輖趒E .Ew獜尘�+Jf5溔三R�9Uz$樭#i�?祄煁Ci豷ェ +暒JOi憑_鑩毸橔C秘:�3�>靨茐�靹f蹮m鵬�= 鯂3K襻厅d +N3x(�.R�2欖嫢膟 MK┎ 圍Iku灬w駟櫜o�7�?{謻狿�"荝�yuu�疇聕奈!?�蛎桪橏0I�蟎a实輎5 k�4`嗷虃鼾,世7MyO胖賅�鏣�%t�1�~L裺C5~o楺�o��)碿莝�,*3いq6謲毫�QNG祠覊暊�2�_0庋屄嗰I#|f帚譔B+`t�-V闢�鄔駟欄i�7yW^奵}]l扫詧kH)_鉘*@萼�* +�襐聧慾悢1m3.��~`疗G3堛]U_蟸搈吠畤 牝�2�1虈O�攬槧騿焱mU :=g�+晈�鵿9�er#V�|�毫q+⒊敊壤M� f�/(�(c制�7藱;l鳔t{�餆K鐱剨Z{�o蝙{, 搻廯┛1棇p煂�ZmZ:藦�:#楪暏6�d 绾uVD販駊�*�S8R\7�~o� Q迹df鵝�&s鯓24w7刮�2Dlて塳苮^鼠佾紙蚳眿gB泭W瑆�1詒侠'�<査jh�;鳸裁e菙頻o迌��:眲箎蝃w�丬�檵[蝎m闂.尊1?7E~&濰Y崹6E[煟ZY�&�t�肳_7像=W;洲)湷窱X鞚�l<鮮S0m?鴐亮S3�>/`5e離凒R"�,嵂_靅R�1I@瘴蘖喚X�)谓m�%4!术璆S槚5虬j邵1Dkha跅(9 痛)4撃P+N�銰�>倩�+殨 �9V躥翴襢鰊觾彭B贕^@5#伳]蜁つ$�&3軲履秊欝K樁]鉻 c[N�+`��1�芑1岦覦f.�愱z)汄`� �>��F液夣Q豶�;桮a�}�v�,i 濟%�?�峂R(�騱귝�2DL瓳塌V羄r#<芵kz`馿芚戏蓏�)諌�啣勱>副%oG爟囻e羲�<溡%峒肒W咋撮�#� ~<萓@c蕌vK�貧\Xza揓#螀窤9@M)廳+嘊?龝防鴨&靮*哄hH@觅B�7D�j9RF憔�濱�=4?_诪鏄Y屿槴�0��'蓪雞I鬚3攋妉%IJtR�?ㄒ鱙v鳖液锉締:y稌葲�5i嬦撳�/ �F軱�9h 3攅�E`kZ +`鲎薢Z%:hiLtAK1褖柶�儹十�P�"3ぬ庙猭臥水E4A奒7�5��駴跀觅航{頉讵|�7��'豝朢艣� >&x_�*嗎Mm濣��錗峱<桑W僖�鐹09齤bΧМ袛{�o浐膐u}络輁_r/诅o�r-熋輛Y;]螪wT舷�7J皩8E醞鰒 +儦��鶰暯c影�0G�2e~尊3aN蹙▕&镲渹夵- >氃~�B�鼥卜咱 臱e.蒀n簙鹕*蔜b咧|}*[�蛐9lendstream +endobj +3153 0 obj << +/Type /Page +/Contents 3154 0 R +/Resources 3152 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3157 0 R 3158 0 R 3159 0 R 3161 0 R 3162 0 R 3163 0 R 3164 0 R 3165 0 R 3166 0 R 3167 0 R 3168 0 R ] +>> endobj +3157 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [289.4951 672.8902 354.0124 683.7941] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +3158 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 591.1961 154.358 613.4475] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3159 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 591.1961 222.4221 613.4475] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3161 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [309.2858 514.7873 335.0789 525.6764] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3162 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [384.6716 461.1078 477.4029 471.6381] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) >> +>> endobj +3163 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [305.943 449.1526 404.7613 459.6829] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4b119801e50cc1824498a1cdf9adc37) >> +>> endobj +3164 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7094 431.5282 269.4792 442.0586] +/Subtype /Link +/A << /S /GoTo /D (a00164_g23705efb9077187881f094fc9be13bde) >> +>> endobj +3165 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [89.0037 419.1995 171.2245 430.1034] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) >> +>> endobj +3166 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [436.1989 401.5751 513.9963 412.479] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +3167 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 167.3556 154.358 189.6071] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3168 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 167.3556 222.4221 189.6071] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3155 0 obj << +/D [3153 0 R /XYZ 90 757.9346 null] +>> endobj +3156 0 obj << +/D [3153 0 R /XYZ 90 739.9346 null] +>> endobj +3131 0 obj << +/D [3153 0 R /XYZ 219.4825 549.7681 null] +>> endobj +3160 0 obj << +/D [3153 0 R /XYZ 90 534.2597 null] +>> endobj +3134 0 obj << +/D [3153 0 R /XYZ 231.9163 96.348 null] +>> endobj +3152 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3171 0 obj << +/Length 1552 +/Filter /FlateDecode +>> +stream +x诘YKo�8钧W梃5朔ぼv�4�令v}k婤眎G@,ゲ糹ER�栐M�糖p踞蘰 0鼞 艫(B3.兺a亙=,�,堓^窿�'鴠絰�伷A宐Ie稗U$A�_杽D+ +g痱赳/ +�$浟m�==(3臼7适箪廑鈠][�揇摸X|鶈�-洒i��#<�#�48,8en虬鴊駑颓lT啴'泂? +有\O"�E崤奰寳淃ば部�@竪Hr-寙裧綽� Q媠�805$O阯髳�6具缜2KVI_崩�^继�-寜e�<6珢 � 垎!�⺻W&if様鳀[泈倦loNE"樕氲缔6)3:枀JH r疕�$寮耓WL�1�0癹0`.jV帾�媺�*跀If�V +蹉>$蟜跷鈦步跉莼�p/唛�岸f譺鷃y£; at氬Z圶靀ZX8� �(9氝晆堯"荮Y騚f7譳3h�腛谥幥!仝iy遾"LD(姍d(!�譡呸襹鰘溅_�屆早踲薪*礧:o鬍鈹 N"�鑚� A� 鑒殴K瓥vS厫jfV弪t熜6\1驵�-�;踂P=�4蹚=缭▄鉎 L�0悢"喊#Z鵗鼿�餬蜗�<趒炽e渀D寬q魵j轜7�! +壎�#峪�<鎖V*2懏DDP(讜Ou^W"f(U瞊�L�jDQc��q<駥j5 H8ㄎ毈鯇笑'逸剘j�)�7 �螛H墙.:�1J�.鷜58�)9z|踛鑵5猒=窀j� �>7C@榗�0拺酡+鶜f⿳)Z]殖姨:|稴�>彡夏滾伸嬣A幧6曦��~刏H]^���嗝$�~%結%rH獆~|揓漩沩礭�^T� *4>争@�9EK1?(彚7A�?Ej2擸�e�*(肱狞�j獪Ψ69T贆漐�1Bu��5哪rm卦G氿蝞c鵯嗛蝜ey洬3seM2壐P弝QVX�*鄚0湺uS� �歛<[m[Jm[J筴K┌蕛%�-ギ-� 玀[J筴K闄�G毨厾羻0 +6褨:鷷`�-眈澼�2↘(媔Gの│閝砿)迷单�%�-ザ-呎�-璙L_7燯軤�梅浒炃Xf$0`庑hf舂蝕F埞坅羚WChM5試L{5Y蟑�6澒槫玶W産-禨J��6N(荩Q簮P倖s藨1鑏.G�叟懲-GF跤�#�=n3藨6鷮rdB�吖迦�歳d鞠鞺z]偱�#ⅰ��Dx8X焌�3態捐聾鮡#�#劦b滵q�+~報rIkQ魙nTW溨n萼搸�';!詉饞睰j縼P尌�.欞?柛^�*�W絆$艀桛&/耬ndstream +endobj +3170 0 obj << +/Type /Page +/Contents 3171 0 R +/Resources 3169 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3174 0 R 3175 0 R 3176 0 R 3178 0 R 3179 0 R 3181 0 R 3182 0 R 3183 0 R ] +>> endobj +3174 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.8972 671.9623 422.4145 682.8662] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +3175 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 579.3293 154.358 601.5807] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3176 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 579.3293 222.4221 601.5807] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3178 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 375.5628 154.358 397.8143] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3179 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 375.5628 222.4221 397.8143] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3181 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.7182 234.8498 372.2355 245.7538] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +3182 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 142.2168 154.358 164.4683] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3183 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 142.2168 222.4221 164.4683] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3172 0 obj << +/D [3170 0 R /XYZ 90 757.9346 null] +>> endobj +3173 0 obj << +/D [3170 0 R /XYZ 90 739.9346 null] +>> endobj +3132 0 obj << +/D [3170 0 R /XYZ 223.3579 533.4605 null] +>> endobj +3177 0 obj << +/D [3170 0 R /XYZ 90 513.0698 null] +>> endobj +3135 0 obj << +/D [3170 0 R /XYZ 246.6004 329.694 null] +>> endobj +3180 0 obj << +/D [3170 0 R /XYZ 90 308.3271 null] +>> endobj +3102 0 obj << +/D [3170 0 R /XYZ 222.8001 96.348 null] +>> endobj +3169 0 obj << +/Font << /F29 499 0 R /F14 636 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3186 0 obj << +/Length 675 +/Filter /FlateDecode +>> +stream +x讠UMo�0襟+8俆�乻l洣峊)M憐Hou�v涺咦艪煌V�8捞<蠜7豤魤y蠾膹E 妐殓旼�;憔餻G&�oR秕{獆JR椐�>僁7�事� +| �羰怎.糓/}N B婫T蛛潷隤擿-鏞镦桒�)钜#繲"�c@エ_y湶沿z_枷S��&慅�8j跳IP@FH ~匟偊,溎絩*匡蔎蛜琰邎 #襹kx貙莟檙`\9灧賤皇�ad\羫_缁博瓡籑秙s炣爑1`郐q诠Σ湙7卾坮�<2 >ら�猭='m濧.议謍3�箄丮瞩?�(B%鰥鷰竩樉�堿R蝱H罕�,釯暗獇74rポ滑罘�2娖敨哳輻庄i婟V徫lX匡t�螝语R�Xn荄�$�%'�週#(殻7Tfr +,憅�1硦撼%3 +1x"5� 7焳蘻诨!t=+I 12q鵙減號8� 騼"sRO鬵B潰?萬開惯撜�{,���� #⺄y煼a�,凴N厇� �齛6K镂M刲LB臸餤痷|y(炂Rvog厺Gv帘箣�<>zSJ!�k$�Jb� s"蛯e�8r�" ]�6汵�8>�梫轲&g敐Q�,J�KHE写�4鴛5爜<镓绘聍澁楉摈艖%�endstream +endobj +3185 0 obj << +/Type /Page +/Contents 3186 0 R +/Resources 3184 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3130 0 R +/Annots [ 3189 0 R 3190 0 R ] +>> endobj +3189 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 637.9957 154.358 660.2472] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3190 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 637.9957 222.4221 660.2472] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3187 0 obj << +/D [3185 0 R /XYZ 90 757.9346 null] +>> endobj +3188 0 obj << +/D [3185 0 R /XYZ 90 739.9346 null] +>> endobj +3184 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3193 0 obj << +/Length 2082 +/Filter /FlateDecode +>> +stream +x诃Z]徾�}鳢0�栩騕b咭7h氒艵赽∝赸^{k{搇}�IS�4T�-XK鲅溼�#�涉苄y� +b勗篚脤物嚯W3鎫緜忒b婪~鄁n堁\蟇稭蛨鈱蟇涍層�噆桠辁*篳劧o洤]��<瑹挲�:o筹W佖濂刦桍腺o轩騵=楻�?� %�>業.n鰚鲞」`▂妷狯1I��取紼�>M竆^1J殁肦獷m惟>.]|���谟b�(�俁 +J窻,"虆zY煫懋薷以q 丏Tq�W闎�&侮�4旣s�洌l>往鲈~V韲賮�徎黹糫;0溨仛��.�;�q祕桺)� 6m�(+堟R6塣煑WB遗赹m�5韎摱=x闟{X怼$B樑飻驖�鲻xxp糠呛赲龌琏魲%鼂=qW>熚趺尊曟.猠:l煻汙貇\J�$鶳韛畎fZ�躂韩鰓O�<揰憭冨,鰢璵Nj{U*b8g7c h�泝QM�(�%�%麧s甄bJ鄬曘�;芇瓄糓�f� 7}f裎a~塻瘌\I\浢筞適蓕扝!�*4^ e睵p螿c猆萜tp�3Ut^B6塀B S��&鷄ix軡|蚍m�9wW钕躐禯粄�岋a梯~]紨2�m僰修�鳌剛0%r>舭��q捺�o茋�)>膕H鈜}��!e%^ 潎肄嘼�頁K獪 �p!�6\�庉�"倐�2v蟀驾樰p轥�o苙�)v胹H�� X蛶�4_翗IK�;=Y�3n 񲸱破M%�R2�C仡騆cI舍�*�.鴈uvcw玢愈�蓴嬃绱d�0a台acb��e�6秒 坩=5璏 k`.�3bX囅鍚� 喗侢駀mG[齖寙k屘T粒2� /JA+u+|m镔隣�殮R5猼 @�艾�(鉋� 疻好频4!棜糮=騫�=>桭爪a'/o緖u}筝嫙~赙聟U*丧W垁蔰怓k鹔E髡C雤蜧;ipg稯濙垗uDB +�6N�c4�7X(R�T獩Y{订谆阧峦$m从偯桚;?翚Aの佥抿v�bv莥冚c� v飷O�;濬爪駘�4b瘼y箔究d�.^\~晉� 翵署�T&(粆�椵t鑀/G洷瑛�,`瞷X^v�1�� 睬�d飷O�O#�; _W飤]%偝& 请P橠8鏒聏緵��輍mP��`Y罳茓�^/x�7/x梶傕�4捀�+oo鲩廿PD岩d +郠9姊 茦^�Z � 鉥畱盞 繢霭既c$2�D巠'堒!�"2濬讒|z磽邁0�)Ki25皎贯DJu砷>詛s-�*y9畇纓霭嘉c�3�t巠'柢!煝3濬纂j唪ve唩W2S徥q圪0�=n恲跋唹箒1楦�撡抿2c寫�8o�9鏉 s噟娞xI\/骳}\tl +�e� +暎70碚リ覂襧HiQ� 9畉罃霭家c�4�攷y'(�!煝4濬7Rz{丐B �棛"xT庉(RP裞‰!$焠�Lh� �1FB慵A铇w傂�)B鉯$q�zW濐嚭n]鍶郂9jC +D靴昽嘥啿�2志鼛i霵y�篐a�4慛�7f�"/欳?�w}廿{殎暠�/攁秲/卉3�/�Z賲�:tw呑姜z�v燎7]��柕蕏馜喿洟�捃啑S�20倳贼�穱晴襂鈜襂_瓈:厬x-*C蝭 鉺蕑PE作曐耫�p �辕墎�P�b禧伞W愔@B 轿竵"f �c� 勼偶煐�.埕�,蜆阸# 熕"墈馦貘8羹�搮螖粒r 涝結霒笺K1&�5Q�> endobj +3197 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 582.769 174.5722 593.6729] +/Subtype /Link +/A << /S /GoTo /D (a00113) >> +>> endobj +3198 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 542.4621 174.0143 553.3661] +/Subtype /Link +/A << /S /GoTo /D (a00112) >> +>> endobj +3199 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.133 502.1553 158.5226 513.0592] +/Subtype /Link +/A << /S /GoTo /D (a00114) >> +>> endobj +3201 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 415.9868 197.5356 426.8907] +/Subtype /Link +/A << /S /GoTo /D (a00079) >> +>> endobj +3203 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 356.821 232.9533 367.3513] +/Subtype /Link +/A << /S /GoTo /D (a00165_g1dbc635a2924806f42d7e3273a6a69b5) >> +>> endobj +3205 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 317.1168 224.1764 327.0445] +/Subtype /Link +/A << /S /GoTo /D (a00165_g7d7920c1e51cc4eef80206ebd6fee3f4) >> +>> endobj +3207 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 303.4391 220.9585 313.3668] +/Subtype /Link +/A << /S /GoTo /D (a00165_g8a645f8831837320c4e0c704e871abcf) >> +>> endobj +3209 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 289.7614 176.5052 299.6891] +/Subtype /Link +/A << /S /GoTo /D (a00165_g3212e70c55244608ac16316888c354f0) >> +>> endobj +3211 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 275.1074 190.8811 286.0114] +/Subtype /Link +/A << /S /GoTo /D (a00165_g71e1b022f7b7fa3a154f19372b239935) >> +>> endobj +3213 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 261.4297 188.1217 272.3337] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge3f8f7deae69854853b0c8ebb82c380d) >> +>> endobj +3215 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 247.752 198.0741 258.6559] +/Subtype /Link +/A << /S /GoTo /D (a00165_g79f9a50c2cccb967d38a2eeb45d2fd75) >> +>> endobj +3217 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 234.0743 194.2087 244.9782] +/Subtype /Link +/A << /S /GoTo /D (a00165_gf7dd2757d1e766f65b01ba7c91c660a0) >> +>> endobj +3219 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 221.3729 188.6793 231.3005] +/Subtype /Link +/A << /S /GoTo /D (a00165_g820fb27c50e7bb4ac6d9eae1b06630a5) >> +>> endobj +3221 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 207.6951 190.8912 217.6228] +/Subtype /Link +/A << /S /GoTo /D (a00165_g14e276fa8e765f774f4162619f1c8fc1) >> +>> endobj +3224 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.2447 147.1795 226.8757 158.0834] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge6f849e94cf6e214be8ffa9a548ecfcd) >> +>> endobj +3226 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 133.5018 190.1438 144.4057] +/Subtype /Link +/A << /S /GoTo /D (a00165_g648ddfb2dde2cc55034e4e0ea41cb6d1) >> +>> endobj +3227 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 119.8241 174.6619 130.728] +/Subtype /Link +/A << /S /GoTo /D (a00165_gc364305cee969a0be43c071722b136e6) >> +>> endobj +3194 0 obj << +/D [3192 0 R /XYZ 90 757.9346 null] +>> endobj +1320 0 obj << +/D [3192 0 R /XYZ 90 739.9346 null] +>> endobj +174 0 obj << +/D [3192 0 R /XYZ 90 739.9346 null] +>> endobj +3195 0 obj << +/D [3192 0 R /XYZ 90 719.1618 null] +>> endobj +3196 0 obj << +/D [3192 0 R /XYZ 90 602.4452 null] +>> endobj +3200 0 obj << +/D [3192 0 R /XYZ 90 435.663 null] +>> endobj +3202 0 obj << +/D [3192 0 R /XYZ 90 376.1236 null] +>> endobj +3204 0 obj << +/D [3192 0 R /XYZ 90 335.9601 null] +>> endobj +3206 0 obj << +/D [3192 0 R /XYZ 90 321.1019 null] +>> endobj +3208 0 obj << +/D [3192 0 R /XYZ 90 307.4242 null] +>> endobj +3210 0 obj << +/D [3192 0 R /XYZ 90 293.7464 null] +>> endobj +3212 0 obj << +/D [3192 0 R /XYZ 90 279.0925 null] +>> endobj +3214 0 obj << +/D [3192 0 R /XYZ 90 265.4148 null] +>> endobj +3216 0 obj << +/D [3192 0 R /XYZ 90 251.7371 null] +>> endobj +3218 0 obj << +/D [3192 0 R /XYZ 90 238.0594 null] +>> endobj +3220 0 obj << +/D [3192 0 R /XYZ 90 225.3579 null] +>> endobj +3222 0 obj << +/D [3192 0 R /XYZ 90 166.8557 null] +>> endobj +3223 0 obj << +/D [3192 0 R /XYZ 90 166.8557 null] +>> endobj +3225 0 obj << +/D [3192 0 R /XYZ 90 151.1646 null] +>> endobj +3191 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3232 0 obj << +/Length 986 +/Filter /FlateDecode +>> +stream +x讠V踤�8}譝� ǜ紙轰璏�4A弁n霤[奃�d蒶蒑砡緾憯eII , X� 缣�嚫~腗���,屲b隸�柉b����2琪4uS擣4r硊�!"圫B莠E垎~@9鳋�#顗{=i呸'佧`�#籾C� �#R�%j誽� 杵8�"�q君纍 F�:�4犷#L0"iJ莪Rf'曮争s校7�K>r聳�$S�%с堹�{W�;拼谘8lE蒎漧j逖�/ 尾0kB蔫}�座V�1攙{?櫗u� A�X�Kz豝�>贠5鑉)�*喵^爄`�0Ib7 +9奿/襧厒痹<�a藹 JH跊wб蟹�b奜0E1褉�!凈�钛俢茝Z�)婐>�矖糒� 道�84塜拞Ц倨淅)Jd~_檷薏~袁醴砱哖>K$s淒�bD豀�%卢�2\ュ�$�2�a鰯/�%詠.�楑觅 欅shE〨矠H杜^�:=Vw�铣JJ聢酒闔�%V瓨蝻賵�駭襑碍�麛�蕀<舿珴�5矄雋鑙濳9硿输vW U[3嵇�p�P$6绁� +┓蛬紹塯桳坄磏鰖K�(nX硝侵6贲捴:� ' +�'濹<�f偌,-r锏拊{昹;皆g貈甛�*ネ 瓮戡!銺v� 棝暙釧�[UF擬�录D�匤�'%嶰o処�#n竓儐� + 跹叟趟踽$總dx�.鍢 nY�9�缃v7姃紥�� 褟vTr諝p頜� 巧9Ku9(o闲R宗Msㄌ�*颡才葐瘆j;�5rM�囕�$c鞎 @舃v�%謆/曷1驣恺皴霙塛筟⿱!j浕h┑#释b蹓!�$庋�犏5�#勓q�A�墼#�注叙X�-儫磬V咅`&剼/緺靷b=�G&G詓輼xn顚42傳O鰹鼁z唱甖�~�祷�endstream +endobj +3231 0 obj << +/Type /Page +/Contents 3232 0 R +/Resources 3230 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +>> endobj +3233 0 obj << +/D [3231 0 R /XYZ 90 757.9346 null] +>> endobj +3234 0 obj << +/D [3231 0 R /XYZ 90 739.9346 null] +>> endobj +3228 0 obj << +/D [3231 0 R /XYZ 90 723.1038 null] +>> endobj +3235 0 obj << +/D [3231 0 R /XYZ 90 723.1038 null] +>> endobj +3236 0 obj << +/D [3231 0 R /XYZ 90 539.9526 null] +>> endobj +3229 0 obj << +/D [3231 0 R /XYZ 90 515.6244 null] +>> endobj +3237 0 obj << +/D [3231 0 R /XYZ 90 515.6244 null] +>> endobj +3230 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F52 1229 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3241 0 obj << +/Length 284 +/Filter /FlateDecode +>> +stream +x讠慚k�0 嗭�>&噚�踧廲[Y`氨躂m銝A摪挵踹蠅�ho�讲�?B� 防�2率\骫脌抋 g>炌畊B`J各�1滈B S榹��2�歛俋�攔蜳 kd12斾sM軤稦O 棶u镪��3��(ST�aArA7锠�)─;鐅/垠e'跨兓賳BymF�獸|endstream +endobj +3240 0 obj << +/Type /Page +/Contents 3241 0 R +/Resources 3239 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +>> endobj +3242 0 obj << +/D [3240 0 R /XYZ 90 757.9346 null] +>> endobj +3239 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3245 0 obj << +/Length 1390 +/Filter /FlateDecode +>> +stream +x讠YMo"G禁Wp4R梏鱃帀wdm|螽�齐�F0骃蚅�fκ闰募腩��?1 |鎸cAi;[m秫�;|濊/k┼u渎�5[敺x麟gf�3k=>氢Vf細=疅��xm}�/め鱪耧�蜏w"蘩‘a贙}踞糇?X0藿yㄚ獅鱫{8觓.鼄輄|]澏醍鎢椝 虭§薣糯戹\�11_矽e礯-弍g]V镛霂f藩呤 +孖ee`Az櫴媛u[5泎� 瑥獵砄蝾>=鎫z酶餹`. +難-JT�;(榜翞g>0�则�9钴Y乍�~S籪\2Г@�5 ^�咗舍{镵!Pp菧PfL�*f\咵塯豭 Py�.2姠T嬙縯U货�輗&澖f焠A耂:u遉�23蕒� EQ狤jI﹫t皉火<訽9椈鏈墚S�4粇扫薪�>w嶮�,6眤攆雗跫螹結痆{婒�)◆hB琖坡g橵^空壖_�4氓椀Q(銀i(zi�>傅ず劵P穙冥d�8僯揕C-Z�4L韪vm GiS掶�顢預@a垵秔亓 7{m鎇贯J �4汿惍^��-�%榇 N衉W嶔蓍u蚾犐\簟m忛�0覨X{'7� F[Q郝誩薐u�<苏雗p$ �儛U谷�!?D亨4W戟;pPx絗� �3輥劎:0▄N砣揔8�&焅�(zk8sMTn屛MQ疸沽斟軘贲f[�,v影缅澐dG藡c蕐#勒醢w�3p瀋��褨鲁�8[�&miQ疸栤瓴ゥ簱八憮�1藚F褰識�R愹頑^郜~嚘z貄凘�-l厵��(S�6�(垵�8o东鋮}胴蠣?�莆f軲�划V 鎇創画匛藣敢娞�=濺=�l瞆��啄X=�>窎kO9檂磽EA蘄�7;Y�6粦嶂Ad澖�O 訫赆�嚐咃哮郴D.., 熹棐 #-) ~x�$�%軈簱_帋��T莼螥埢酁T梡陰踽鏫橕寍﹚屆~壀\d�Е袯]�?閛#遌妁7R皹$勸鰳嚓rLJu娚基`%�%軈糓]雃湙唭笇0儧朡粐�)/贌鋒Jg勿辇�`)I0:%沩)琳鍞旉垟 騨O ./Г斪烨庬x�mq}媽aP闶]1O$�8媛�NH�抈tB欺偒� )� A漭�\^NH)oW粉犋c�+俠28�;朡�3駸%䲣z""Z3瘽潕H�"抈tD欺#偒�)�A漭\^嶩)o�;庮"q員殊巈E�4R薑陦�(羭橒Y���E$凌� 尫GW�#R�#"側�="讣慠藓~� ~_�6眚饅jG~� 遍\怄e�"x0&挝翊@旁昃�?���N僥ndstream +endobj +3244 0 obj << +/Type /Page +/Contents 3245 0 R +/Resources 3243 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +/Annots [ 3248 0 R 3249 0 R 3252 0 R 3253 0 R 3255 0 R 3257 0 R 3258 0 R 3260 0 R 3261 0 R 3263 0 R 3264 0 R 3266 0 R 3268 0 R 3270 0 R 3271 0 R 3273 0 R 3274 0 R 3276 0 R 3277 0 R 3279 0 R 3280 0 R 3282 0 R 3283 0 R 3285 0 R 3286 0 R ] +>> endobj +3248 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 468.5995 139.4144 491.5682] +/Subtype /Link +/A << /S /GoTo /D (a00048) >> +>> endobj +3249 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2799 468.5995 192.535 491.5682] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +3252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 384.1603 123.6537 393.9384] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +3253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.1518 384.1603 133.8952 393.9384] +/Subtype /Link +/A << /S /GoTo /D (a00077_31471b5e27bda51832d0fa49bd6d9b54) >> +>> endobj +3255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 373.2662 153.8002 382.1128] +/Subtype /Link +/A << /S /GoTo /D (a00077_e0b137a3875ad12a99e5e3e0e177fd12) >> +>> endobj +3257 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 358.2574 172.9089 369.1614] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +3258 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 358.2574 202.2389 369.1614] +/Subtype /Link +/A << /S /GoTo /D (a00077_cfd36e02c7498d766ff802575e981612) >> +>> endobj +3260 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 347.3633 136.9336 356.2099] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +3261 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.4317 347.3633 160.455 356.2099] +/Subtype /Link +/A << /S /GoTo /D (a00077_e80af46ceef63eab3c786525370ae720) >> +>> endobj +3263 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 333.3308 138.5977 343.2585] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3264 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 333.3308 159.9074 343.2585] +/Subtype /Link +/A << /S /GoTo /D (a00077_e707c39412e09d3a47f0b3c5dad33725) >> +>> endobj +3266 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.9088 320.3794 206.1837 330.3071] +/Subtype /Link +/A << /S /GoTo /D (a00077_2391bb18db5f620e0e9fb848ae5ba5e9) >> +>> endobj +3268 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 307.428 162.6669 317.3556] +/Subtype /Link +/A << /S /GoTo /D (a00077_5361ef75bfbdb469b5cc31f0060a2670) >> +>> endobj +3270 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 294.0582 133.6164 304.4042] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 294.0582 168.0469 304.4042] +/Subtype /Link +/A << /S /GoTo /D (a00077_564bab93ef6a268a5de2fab885c1d32a) >> +>> endobj +3273 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 281.1068 138.5977 291.4528] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3274 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 281.1068 183.6978 291.4528] +/Subtype /Link +/A << /S /GoTo /D (a00077_7a520a57d7d0541524f34a7685635597) >> +>> endobj +3276 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 267.5974 138.5977 278.5014] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 267.5974 166.5427 278.5014] +/Subtype /Link +/A << /S /GoTo /D (a00077_1d2f2751b0865045486c9aa59d0d0971) >> +>> endobj +3279 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 255.2039 138.5977 265.5499] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3280 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 255.2039 174.2934 265.5499] +/Subtype /Link +/A << /S /GoTo /D (a00077_20541305548441e5dcb2e1e7e6f300eb) >> +>> endobj +3282 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 242.2525 138.5977 252.5985] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3283 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 242.2525 172.6298 252.5985] +/Subtype /Link +/A << /S /GoTo /D (a00077_27df2817055bc099821d96eb60a40b34) >> +>> endobj +3285 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 229.301 138.5977 239.6471] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3286 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 229.301 197.4264 239.6471] +/Subtype /Link +/A << /S /GoTo /D (a00077_5e16ca335dfd7394527f602da879fca2) >> +>> endobj +3246 0 obj << +/D [3244 0 R /XYZ 90 757.9346 null] +>> endobj +178 0 obj << +/D [3244 0 R /XYZ 90 739.9346 null] +>> endobj +985 0 obj << +/D [3244 0 R /XYZ 90 553.9527 null] +>> endobj +182 0 obj << +/D [3244 0 R /XYZ 90 553.9527 null] +>> endobj +3247 0 obj << +/D [3244 0 R /XYZ 90 517.4245 null] +>> endobj +3250 0 obj << +/D [3244 0 R /XYZ 90 403.1102 null] +>> endobj +3251 0 obj << +/D [3244 0 R /XYZ 90 403.1102 null] +>> endobj +3254 0 obj << +/D [3244 0 R /XYZ 90 388.1454 null] +>> endobj +3256 0 obj << +/D [3244 0 R /XYZ 90 377.2512 null] +>> endobj +3259 0 obj << +/D [3244 0 R /XYZ 90 362.2425 null] +>> endobj +3262 0 obj << +/D [3244 0 R /XYZ 90 351.3484 null] +>> endobj +3265 0 obj << +/D [3244 0 R /XYZ 90 337.3159 null] +>> endobj +3267 0 obj << +/D [3244 0 R /XYZ 90 324.3645 null] +>> endobj +3269 0 obj << +/D [3244 0 R /XYZ 90 311.413 null] +>> endobj +3272 0 obj << +/D [3244 0 R /XYZ 90 298.0432 null] +>> endobj +3275 0 obj << +/D [3244 0 R /XYZ 90 285.0918 null] +>> endobj +3278 0 obj << +/D [3244 0 R /XYZ 90 271.5825 null] +>> endobj +3281 0 obj << +/D [3244 0 R /XYZ 90 259.1889 null] +>> endobj +3284 0 obj << +/D [3244 0 R /XYZ 90 246.2375 null] +>> endobj +3243 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3289 0 obj << +/Length 833 +/Filter /FlateDecode +>> +stream +x讠V蒼�0诫+t攣z�比�(�&�9A犡tbT朷/H蝼%礒禿〡(q8锿<92鱜砅K 1*湱靖�7栍c7?n|�_�)c�﹑踩=(IH醖>崘膆LBH��骸d+椛>)F鼷韆�?lGh"[N甮嚂亡蓗刮F彄坂jR3)塉篪LY8w刼<62|s 0�)\倄鯌髁O1�/鑺W"��?TEL.�X嵠�媈m毊熮F娶�6�?韁(�n1境 [臐同彸@垾�\谓25` qi魃2刁2cv7�.7]�2*頀疷w磿迅i諙啬�w� 芉绗撜&祷婼dd�鯞 � +7嚏鼰鞬9u� 圠僃.��泌�6�s=频0kQu�9舺揟 Q8蹂|)tJ瞴 �}殼髩(蛧H渮鞪秒)� +4諢囑j�C蹧'耘!*'鋳�[橐>0F�2咔E率RI梇Y@\秕�i9� +蜹喽{QU烥氧姚骫莵#��5?{26 �6�翇鉸坉籨|筀迡槜 .wR臠〢v曒煌n=⑶ 爤垬閍z倎冧 +玞j-ZB�"歆5枼�蒻w鏈SsPF艭bVf胋6禣暿j窎〾;{M秏�HA�骷朂儢_蟕檓辫�憣鼤vJH堓�8悎蔶垎AL閏Sd廬暙樆僁徹 �>�+砤丙b縻謆7q>慢丙袋zY膊-R択�#唒�吥弎БS]w癄袧 +s>QI鮛=b綜孾倻�憆=7�.'沸穬霄苀v�:静9�锗v�2:�H鍥]繝�?&剖{./而h7蚁U宵b[轃oc;掺矈徺endstream +endobj +3288 0 obj << +/Type /Page +/Contents 3289 0 R +/Resources 3287 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +/Annots [ 3292 0 R 3293 0 R 3296 0 R 3297 0 R 3299 0 R 3301 0 R ] +>> endobj +3292 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 668.6407 162.0093 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00036) >> +>> endobj +3293 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.8747 668.6407 237.7248 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00037) >> +>> endobj +3296 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 583.4842 139.1456 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +3297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.6437 583.4842 146.6175 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00078_a9825b5977b2d4dec66e6bd09e6ae6ea) >> +>> endobj +3299 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 570.5328 179.9123 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00078_4b1b1436b50ed7638aece35f41421196) >> +>> endobj +3301 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 558.1393 157.1179 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00078_4da86e9feb5e5835eb15163c2cb61116) >> +>> endobj +3290 0 obj << +/D [3288 0 R /XYZ 90 757.9346 null] +>> endobj +986 0 obj << +/D [3288 0 R /XYZ 90 739.9346 null] +>> endobj +186 0 obj << +/D [3288 0 R /XYZ 90 739.9346 null] +>> endobj +3291 0 obj << +/D [3288 0 R /XYZ 90 717.8172 null] +>> endobj +3294 0 obj << +/D [3288 0 R /XYZ 90 602.4342 null] +>> endobj +3295 0 obj << +/D [3288 0 R /XYZ 90 602.4342 null] +>> endobj +3298 0 obj << +/D [3288 0 R /XYZ 90 587.4693 null] +>> endobj +3300 0 obj << +/D [3288 0 R /XYZ 90 574.5178 null] +>> endobj +3287 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3305 0 obj << +/Length 594 +/Filter /FlateDecode +>> +stream +x讠T薾�0茧+t�b箌壧1p訞�6�- U矞�2邳}I慠樔朡:垙犰��c驛琾滖 )蔇\�"o舔m~;5鹖竈F_n垔R倛x诡 N�乃誄�!:K 巧秏_V吓.颡rk鱩s,Z7居k萏@&�.碷R'@i箞�. ^"�瑐哐�嶹F�"聢*摄?f�(E鈃��'Ut�x蹻w郥�栝T�!矪鶿塈= R��7W摖c�8飿M�-1�3�=譵^Vz鍢纡P4錕[頺螩3,崟�蚛?bL瓴Cw莝/�*k鞦��~睨鯠� S�冖3�)C }=鎦浕�7ギV�N +怘2孪^���,今馗廳|k踨r:q@]妅.伮B紡[祀儻g蓖W!`�9fl鋂f倁:1�#潅郢齉лj6s*铖�弜瓊:唛��!c璐7�1雒剚�#┼�u倬7�)�&��A飭腔>諩�癇1腬鵏鯺蘗��珪uV39圠L變{P释程e豩0稢|獧vVKs( 洢0蛻示Wf湄膎u瓫柬踃邚诀兣 xr� 䦶��"綜寘璯�'M庍~x4蚶_W��緉舁柖喻覀漄愢endstream +endobj +3304 0 obj << +/Type /Page +/Contents 3305 0 R +/Resources 3303 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +/Annots [ 3310 0 R 3312 0 R ] +>> endobj +3310 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.5401 617.7467 188.1115 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00079_9a84c69ec5a4705ccb1ca99fcd120add) >> +>> endobj +3312 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.7662 602.7379 245.9639 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00079_1513a9e88921750d2a611b518f6fc207) >> +>> endobj +3306 0 obj << +/D [3304 0 R /XYZ 90 757.9346 null] +>> endobj +987 0 obj << +/D [3304 0 R /XYZ 90 739.9346 null] +>> endobj +190 0 obj << +/D [3304 0 R /XYZ 90 739.9346 null] +>> endobj +3307 0 obj << +/D [3304 0 R /XYZ 90 716.7484 null] +>> endobj +3308 0 obj << +/D [3304 0 R /XYZ 90 634.6393 null] +>> endobj +3309 0 obj << +/D [3304 0 R /XYZ 90 634.6393 null] +>> endobj +3311 0 obj << +/D [3304 0 R /XYZ 90 621.7317 null] +>> endobj +3303 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3315 0 obj << +/Length 1204 +/Filter /FlateDecode +>> +stream +x讠X踤跢}譝餛z衒飾<畠(�&zs孈�(洦M��6�!筀-翟巵�D墖s翁櫧pYA釓�F鈩耘鎚F媑髮K缚�烿�鬈�8蛈壁u4#�3^弒契b丧Tl~O窽t��/钪秃窥�蠜鎩\0;/黇滞憨鲺鈏�0鹠5(馚曅裣祚�[�08珚� %�9^纪$崴腱腱�!N`*_拍t翷鴧噷9吏 "KF)澘4蚢 攓掿鯒rW鲑譀餐�藞S� 昻;�%��+泆鮖n}澥渔XB� 巿黨么Z]娈麱)�=决俕藬��茱鰤W壖��埓�s铽騯{毎P3K阥�爵qn宩"厱�8-�7握5)暼3(�躻T�1锕>U蟯pe蟛>&*� 斱k憝愠莬夣<�'壽阨2曕$÷au鐰K屏\柋�*b密�(軠K竗:(竻盚眾gi儊懘胕岿;�&,a襡�-�*)雁r湭dfcJ43尬8�铍�埭=蕡�2煱�� 騠�(�4�! m�8�/��.郌�i�8'Z曊�P+W蠯枍Y哩軞玚◣筼�饦�$n�/�:3÷Qb$H℅醈c@墔�闅没& +槞�蕖b奚y朅%菇饨鞪纁 +捀瓊獑著编t~蕙�3�〡@a鼏逄U�}歑蹠6皥hs坼恠9纏梥寫藋蘖鍢7矧堶=.�$q惶籑X絶+�<啽j慄 +co�)�=哢匓咱G�溓唟渃�<误羌y廏硷�8� 壽童莴B�嗄痘眑贲凁筓2� G w$ +榮$�;8篥/P挥w��4�!F{%!厨y<&&墈��K塼捂肃<軵+3卞s'纏w9w蚣�;1oUOl呧M�}E{蹜��$q[0&`婱躇紩醿�)�鰚P�梡9/菠�i樄>蹸.�-4國�EZ.N(�6鞘n�鄨齐辯猊@虣lu鄮QN噶_8 �, +�3-�;�骹袌�=(/ 墈馾j羠聐\З鞃〕毚�n眖4繮S鈥S轥蕡w|妔z�洨�5謬睂�1幥c倰篙噢�'仧\j�禂瑵椁E$0/潱v>肸(樴�9�&�踗'8<�櫬揑觲噻�.彴轳�g�剫�S`�?6纩搤溻#鱣葴R輄�\枉渠Kz攸鉭8W鐂隗鞶o�U�T莘endstream +endobj +3314 0 obj << +/Type /Page +/Contents 3315 0 R +/Resources 3313 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3238 0 R +/Annots [ 3320 0 R 3322 0 R 3323 0 R 3325 0 R 3326 0 R 3328 0 R 3330 0 R 3332 0 R 3334 0 R 3336 0 R 3338 0 R 3340 0 R 3342 0 R ] +>> endobj +3320 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 615.6894 195.0353 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00080_c39694ece9526b84012f90f2bb00af9f) >> +>> endobj +3322 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 602.7379 139.1456 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +3323 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7605 602.7379 172.3606 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00080_9dd8edeece221c853a4c4516bf1b01c2) >> +>> endobj +3325 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 589.7865 123.6537 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +3326 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.8576 589.7865 191.7375 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00080_e261f08e1556287d241764fb2e99fc26) >> +>> endobj +3328 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 576.8351 169.103 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00080_4c6f843219271d25766ee5969e435d1a) >> +>> endobj +3330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 564.4415 169.85 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00080_447eb700ea7a185e0f155934995d49e5) >> +>> endobj +3332 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 552.9895 153.8002 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00080_94fcc9f5c47f419040d849ce58beae35) >> +>> endobj +3334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.7715 537.9808 181.4961 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00080_5e274a8f8b5fb2b3999c54fe27c76e46) >> +>> endobj +3336 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 527.0866 141.0881 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00080_468c04fff28e784f93ebc3f0849211dd) >> +>> endobj +3338 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 512.0779 176.216 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00080_78f82878f3fd0e7401c7d7d3b3fefbef) >> +>> endobj +3340 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 499.1265 163.2246 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00080_16a3a3056f44b7245ce085b937a269dd) >> +>> endobj +3342 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 486.175 198.9209 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00080_6df929b448ea98bc44d41f5e96237bda) >> +>> endobj +3316 0 obj << +/D [3314 0 R /XYZ 90 757.9346 null] +>> endobj +988 0 obj << +/D [3314 0 R /XYZ 90 739.9346 null] +>> endobj +194 0 obj << +/D [3314 0 R /XYZ 90 739.9346 null] +>> endobj +3317 0 obj << +/D [3314 0 R /XYZ 90 716.7484 null] +>> endobj +3318 0 obj << +/D [3314 0 R /XYZ 90 634.6393 null] +>> endobj +3319 0 obj << +/D [3314 0 R /XYZ 90 634.6393 null] +>> endobj +3321 0 obj << +/D [3314 0 R /XYZ 90 619.6744 null] +>> endobj +3324 0 obj << +/D [3314 0 R /XYZ 90 606.723 null] +>> endobj +3327 0 obj << +/D [3314 0 R /XYZ 90 593.7716 null] +>> endobj +3329 0 obj << +/D [3314 0 R /XYZ 90 580.8201 null] +>> endobj +3331 0 obj << +/D [3314 0 R /XYZ 90 568.4266 null] +>> endobj +3333 0 obj << +/D [3314 0 R /XYZ 90 556.9745 null] +>> endobj +3335 0 obj << +/D [3314 0 R /XYZ 90 541.9658 null] +>> endobj +3337 0 obj << +/D [3314 0 R /XYZ 90 531.0717 null] +>> endobj +3339 0 obj << +/D [3314 0 R /XYZ 90 516.063 null] +>> endobj +3341 0 obj << +/D [3314 0 R /XYZ 90 503.1115 null] +>> endobj +3313 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3345 0 obj << +/Length 714 +/Filter /FlateDecode +>> +stream +x讠V羠� 诫+t� 湄q搃f:�&�%檸ccGS[je筸E)牟E3,囫鲰>c0?��蠄b﹫椈鈲櫨娦-O旺�紵G�.⿰Q倞x緉N懫笳�$#<橰摑�=~}軚薿{;q[W噀m縪鬦W 蕢.栚L L� �,y榑G娼3丮�演�+s:聰漶/3侸褁u僲t}閥霣会T�匍<1%f唙塕搘驽�oJ詃gi�(蝃ZS鄦暿灃�#為z憃跏2汪~Y暹爰,髄hh姨�=-�輓_8A奂婿 �9U砮玙躃R槓'rF5K JW屬貆椆蕻�'l(塋)?{蘾�-繜� )撻 O鳛R~ �)'g�{T(�9 +剎鱌祗M�9�*珃 #�$摍<捬,U嚬�u鴲�o#h��� + 蚑*凜M�{q� 郉* Pa{^杵� 跊�}�7締眆T�1k&8靻�0�Cp gKz�� �)馥�嶑 G� 捻瑈wub蚶�fnY扳谸\J `*從澐嘾x[欏�a.<巄�>�卪藢 +in齹m,l汫8f踴苻6?钕剼W"_澃�HU�:&?8j]�I�6 +袒54�A蝰 +e4逍軚p襘0馫痨縵懼~i� c~�!Lo羋譲 1-�=嶹盒闸町搭E�詝\'韧电^u诮�擼P�# + 熳:RVvp佟�>>籲|雅q-汧⿹嬲�/�8endstream +endobj +3344 0 obj << +/Type /Page +/Contents 3345 0 R +/Resources 3343 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3350 0 R 3352 0 R 3354 0 R 3356 0 R ] +>> endobj +3350 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 615.6894 192.2756 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00081_b42c7af6114fde5d21206a2e18a7d3ee) >> +>> endobj +3352 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 602.7379 194.4975 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00081_164124d48fe85bc98d9a300382a5245d) >> +>> endobj +3354 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 591.8438 165.1479 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00081_5595902fd42d874e35a70206fad8f6d0) >> +>> endobj +3356 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 578.8924 163.3048 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00081_b5801722740492e69bcc73687476009f) >> +>> endobj +3346 0 obj << +/D [3344 0 R /XYZ 90 757.9346 null] +>> endobj +989 0 obj << +/D [3344 0 R /XYZ 90 739.9346 null] +>> endobj +198 0 obj << +/D [3344 0 R /XYZ 90 739.9346 null] +>> endobj +3347 0 obj << +/D [3344 0 R /XYZ 90 717.8172 null] +>> endobj +3348 0 obj << +/D [3344 0 R /XYZ 90 634.6393 null] +>> endobj +3349 0 obj << +/D [3344 0 R /XYZ 90 634.6393 null] +>> endobj +3351 0 obj << +/D [3344 0 R /XYZ 90 619.6744 null] +>> endobj +3353 0 obj << +/D [3344 0 R /XYZ 90 606.723 null] +>> endobj +3355 0 obj << +/D [3344 0 R /XYZ 90 595.8288 null] +>> endobj +3343 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3360 0 obj << +/Length 1383 +/Filter /FlateDecode +>> +stream +x讠XM徾6禁W枧{酸椚犺∝$�赿oI8秜W╓v$笽3擧-e蒬谂V稙g尢{Q剬�d唂�,堘Be矍皖耠�+p穝紵噣遪W?縝&3�(Σ刍>�"办v鱪 L_錖 胗�猊 t父辴涐阭诇遁┕�.萃闽鬤州Λ跽囒浾僳憠#*�算箨�氻愷蛫n刺距J��=�泾脋鮲踝g秆�` |筦縜綽� (唫 r爺畯韆鹷X辮�+�:雖i肼�*� 稑賱茶泯T折齣鐞RrR�衾_b�簆��yX$�h亮醻u伆J F示J,塩�(6� Z氩跿鹯玟+踡S絰彑i[h�sDo蔯S叮挲w嚮峥呈�9t嚲礍譭Glt� m� <|裒j4仾�%� 彌惜2膸�/U�0\諊��〦5]��Tm鮥飌寰崔m晒q�$粭IC S\/谖凃5_k�Jy�)�覹腈窀/�鐗Ag�,堁 鸩縢縤钶�7?爃,鄏塦�a栤C惯�/V慍尺 帨P�3�=(E�<杄0x&/\&�4B龇鲾埠z策乒f_誑\爅闘�[edi验鈟r縦啘�j@i�PDp-炩丶�搒{喁樹褜�=x�8 U*晌�&鞄輰cD葿F�1"0V�� BC挍钎竡F囱&铜Hs銙pm襺蟾)7k�侸!楥躂�a协 /鶰A4姂疔K�- 8_�暿霛4苫=皂俙�喡NGDq�匶\K幛?�H|f +P壱=j�'t怶j�8鉭-�脪� +晎|Y\�饣c滋H�)�恠8霧嵜0u聧杤c鹳�/羘鬺萵�08c铆W宂>㈡y灵@鮕W� #憵gy/W铖┦gq-儲�,杆 鄞竎r牬c敹> endobj +3363 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 589.168 162.5673 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00037) >> +>> endobj +3366 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 504.6641 123.6537 515.568] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +3367 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.1518 504.6641 133.8952 515.568] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +3368 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.3933 504.6641 167.3794 515.568] +/Subtype /Link +/A << /S /GoTo /D (a00082_17aacf7c5e2046c1f3ab50faa1b2f7eb) >> +>> endobj +3370 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.4319 491.7126 157.1379 502.6166] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3371 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.108 491.7126 196.4302 502.6166] +/Subtype /Link +/A << /S /GoTo /D (a00082_31f25efccba9fd043047133d0d0ba5ab) >> +>> endobj +3373 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 478.7612 133.6164 489.6651] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3374 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.5865 478.7612 171.7929 489.6651] +/Subtype /Link +/A << /S /GoTo /D (a00082_b973f2e16c2883a8a0164d716cce5a31) >> +>> endobj +3376 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 465.8098 167.1604 476.7137] +/Subtype /Link +/A << /S /GoTo /D (a00082_c3d1bfbb1abde31973c015de97ce2f84) >> +>> endobj +3378 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 453.8346 138.5977 463.7623] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3379 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 453.8346 171.5239 463.7623] +/Subtype /Link +/A << /S /GoTo /D (a00082_19b82696bd84a803250cbf9812f2f125) >> +>> endobj +3381 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 440.8832 138.5977 450.8108] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3382 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 440.8832 170.4081 450.8108] +/Subtype /Link +/A << /S /GoTo /D (a00082_a408ca8630154ebd039f37a828399f7b) >> +>> endobj +3384 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 426.9555 157.2078 437.8594] +/Subtype /Link +/A << /S /GoTo /D (a00083) >> +>> endobj +3385 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.706 426.9555 172.7794 437.8594] +/Subtype /Link +/A << /S /GoTo /D (a00082_d6bd03239291629676e4c0286ebb650f) >> +>> endobj +3387 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.3868 414.004 195.9519 424.908] +/Subtype /Link +/A << /S /GoTo /D (a00082_a6bfaf327ce839ba70accd71014398d0) >> +>> endobj +3389 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 401.0526 192.2657 411.9565] +/Subtype /Link +/A << /S /GoTo /D (a00082_fda184638130452f3570966acc5b97f9) >> +>> endobj +3361 0 obj << +/D [3359 0 R /XYZ 90 757.9346 null] +>> endobj +990 0 obj << +/D [3359 0 R /XYZ 90 739.9346 null] +>> endobj +202 0 obj << +/D [3359 0 R /XYZ 90 739.9346 null] +>> endobj +3362 0 obj << +/D [3359 0 R /XYZ 90 685.9318 null] +>> endobj +3364 0 obj << +/D [3359 0 R /XYZ 90 523.614 null] +>> endobj +3365 0 obj << +/D [3359 0 R /XYZ 90 523.614 null] +>> endobj +3369 0 obj << +/D [3359 0 R /XYZ 90 508.6491 null] +>> endobj +3372 0 obj << +/D [3359 0 R /XYZ 90 495.6977 null] +>> endobj +3375 0 obj << +/D [3359 0 R /XYZ 90 482.7463 null] +>> endobj +3377 0 obj << +/D [3359 0 R /XYZ 90 469.7948 null] +>> endobj +3380 0 obj << +/D [3359 0 R /XYZ 90 457.8196 null] +>> endobj +3383 0 obj << +/D [3359 0 R /XYZ 90 444.8682 null] +>> endobj +3386 0 obj << +/D [3359 0 R /XYZ 90 430.9405 null] +>> endobj +3388 0 obj << +/D [3359 0 R /XYZ 90 417.9891 null] +>> endobj +3358 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3392 0 obj << +/Length 609 +/Filter /FlateDecode +>> +stream +x讠UMo贎禁W��3尺9V4Q�*� �$�,�*1�爹鱙{啄羳UU�o呒73籤 +䥽﹨TK�,*澘&惍M俼{澉Gm犁i蜷歭j橴ひ椴fP�$!ビ琵@3=憚羦窓�|z 鏊皌W鹹品n閵!殎绥�/iピ�渌� !*擻a%郬r�槁+�$栏52'佬ZJ_A紮瑩讳莵'l�N暼O;E咙 +5V�;�-�饛V娇@屘JY�$W糳� #踟暢l�乮靨�"蹡�&�<糢妸k拓=P炚楮�, +Zg� #+脀eW'之U@雎�(鎮�鲜Y8t澒鮞w + 3備�6kB蜊�軋w�*��<巺P驄称W耝礡謒K[P猈]凔爊o炇�:NL噱|P莞(趒筪坄幉�;q1iH�=锛流9镳V +秂� 9S{尗!鵡� ��媫�Q騈�-F� z鑱V衹舅Vys}w/洟�Z2m殆ㄡ|ax彋c諮挖-会峞牬緲1#閛�\淏�廕��z﹄�腳侖3乘M� +#C黹棋畼昅姏ь[3� Q�2� R�+�0#F�!闪�擙罪�"瘗->脹?o+�Р�iさ蝮涪� endstream +endobj +3391 0 obj << +/Type /Page +/Contents 3392 0 R +/Resources 3390 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3397 0 R 3398 0 R 3400 0 R ] +>> endobj +3397 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 615.6894 133.6164 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3398 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.5865 615.6894 154.6474 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00083_5e8637b1514d03eb3eb12dc9a502e27e) >> +>> endobj +3400 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 602.7379 190.0639 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00083_20fae11b540a561c622a0d74cb4b9f97) >> +>> endobj +3393 0 obj << +/D [3391 0 R /XYZ 90 757.9346 null] +>> endobj +991 0 obj << +/D [3391 0 R /XYZ 90 739.9346 null] +>> endobj +206 0 obj << +/D [3391 0 R /XYZ 90 739.9346 null] +>> endobj +3394 0 obj << +/D [3391 0 R /XYZ 90 716.7484 null] +>> endobj +3395 0 obj << +/D [3391 0 R /XYZ 90 634.6393 null] +>> endobj +3396 0 obj << +/D [3391 0 R /XYZ 90 634.6393 null] +>> endobj +3399 0 obj << +/D [3391 0 R /XYZ 90 619.6744 null] +>> endobj +3390 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3403 0 obj << +/Length 619 +/Filter /FlateDecode +>> +stream +x讠UKo�0 钧W瑧z���-螿�骕阘砜m嫂[簧a鹆擧�⿵�R� sB甏\'�.h�&哩蜪燋 綨�/总9蛈:澐42艖в貱�&9桼av僁2耬QA函鲊�>�'h3曐虬鰶酣W弁鋓z沑M廐"P%468�$O愇餸L8看單駎滺.篍曑'?弤偄=0柉B1�0JF;妓楽LH�0;�瞉菹-葁~頒挍�7Io葴R�7*p銓郏7喲撺瘚U錱�<墀vc疟�Z搄C�6z<滴(颷 镉: 葪 �照K鞭U鈉d螌鄕2磀微$闭5;鸈T蒗"fP�1劉囸hw4k 螙瀹d�@a棣鬷�闬鑱�&4k偊轨|p猢 吇魪|砵o�"m"飼 ��<鼪U皂j禿熜FHF�h笾X�+_蜑G贕Y痛0庥>�孶]3)瑋笥膤鋅 9佯Y墦[N報湢緎狌Yt澼;tU牐n� +NcL:0缪 NS蟼媐� ╆h� {d4次孻EG嵤�枎Ds@� N洨H輤诣6�狂钇V躯餄p;A��y<>@i>�*垲胋鵀鼅頌帡讌膛f歸衵U�奾仭endstream +endobj +3402 0 obj << +/Type /Page +/Contents 3403 0 R +/Resources 3401 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3406 0 R 3409 0 R 3410 0 R ] +>> endobj +3406 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 667.9234 139.9724 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +3409 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 584.4605 130.8466 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00155_g3983e0c026396d5c4506779d770007ba) >> +>> endobj +3410 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.3447 584.4605 140.5301 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00084_c3fa0fa86689e3e7c039a16c16861dbe) >> +>> endobj +3404 0 obj << +/D [3402 0 R /XYZ 90 757.9346 null] +>> endobj +992 0 obj << +/D [3402 0 R /XYZ 90 739.9346 null] +>> endobj +210 0 obj << +/D [3402 0 R /XYZ 90 739.9346 null] +>> endobj +3405 0 obj << +/D [3402 0 R /XYZ 90 716.7484 null] +>> endobj +3407 0 obj << +/D [3402 0 R /XYZ 90 602.4342 null] +>> endobj +3408 0 obj << +/D [3402 0 R /XYZ 90 602.4342 null] +>> endobj +3401 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3413 0 obj << +/Length 1159 +/Filter /FlateDecode +>> +stream +x诃楳o�8嗭�::@佩餥9.�`佪址�(\[I\�#k薶w(� +m冥�>X瞊�<銴)BE�UC+-5i窹誰5⒄=q⺮嵪隭痃d羟諸 iS珍畯爛H瑲炭孮{U3I腔U鼬}譓恢�疃鸜绠?祑眦 +谈]响c-�嚝o撣邀蓯咩If�o翦坹;7FV筐�hV璅傫p�}�;膓�?渏�~簷 B;6[G�J_襈l湅 +矎娸k�23D%嚆薮輙眑�.襇粵m忀b�>�$# �+P璑71堦X暫iB)荴�蔄鱐餆Λ莈换>� ��dS �x�?晨l稞 PM4py姁G剝n怸膰v管钥畝�7坼�<$╲岅]� ;蕥师1 芇V2-仁_緼捎 制t{P(�(爝,蕙;A m駛�-]峨磒b47Y綵{憌U瀢��琄�Y僬(嚯]陀 tW3x/w5�7�沩趗w芕�36 hm鞥派*I]|�dE[銆礍tty[sx/兜�tx�.r黷赯Má* Yk/*[k蠂X癀b悤瓖巨�<輅mLW�6凎rk髕兊1呜鵦稭mm坄���癨熧9Qd%醌Z乕0溓'� +���矶 踰慌梎�I�穠D稞 0�M�縡暂1J暬夯br假簺齙�x5衤魁Y赕轺}:E�)p@孃���endstream +endobj +3412 0 obj << +/Type /Page +/Contents 3413 0 R +/Resources 3411 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3416 0 R 3417 0 R 3418 0 R 3421 0 R 3422 0 R 3424 0 R 3426 0 R 3428 0 R 3430 0 R 3432 0 R 3433 0 R 3435 0 R 3436 0 R 3438 0 R 3439 0 R 3441 0 R 3442 0 R ] +>> endobj +3416 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 667.9234 162.5673 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00037) >> +>> endobj +3417 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.5561 667.9234 193.8396 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00038) >> +>> endobj +3418 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.7051 667.9234 242.5466 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00039) >> +>> endobj +3421 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 584.4605 133.6164 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3422 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 584.4605 154.3681 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00085_0bb4f34164e7207c2db26b77f23ccfff) >> +>> endobj +3424 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 572.5901 150.7619 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00085_3592a1f5ae100db2ed9c0810b41c7bc7) >> +>> endobj +3426 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 559.6386 162.3783 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00085_668cab7d54ff0a2fc2a2179ca06b0798) >> +>> endobj +3428 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 544.6299 171.2348 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00085_503c2994a4e52300516e2b820f0fc65b) >> +>> endobj +3430 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 531.6785 159.6186 542.5824] +/Subtype /Link +/A << /S /GoTo /D (a00085_04833004cec509a41c502429df308e35) >> +>> endobj +3432 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 518.7271 138.5977 529.631] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3433 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 518.7271 169.87 529.631] +/Subtype /Link +/A << /S /GoTo /D (a00085_a312da7b5f6441140721ec7e55f345a8) >> +>> endobj +3435 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 506.7519 138.5977 516.6796] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3436 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 506.7519 169.3121 516.6796] +/Subtype /Link +/A << /S /GoTo /D (a00085_68204df6bde3e3c27271ebde10579a57) >> +>> endobj +3438 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 493.8005 138.5977 503.7281] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3439 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 493.8005 168.0569 503.7281] +/Subtype /Link +/A << /S /GoTo /D (a00085_0560495c60c68d62617ff1f3d0c424a4) >> +>> endobj +3441 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 479.8728 138.5977 490.7767] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3442 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 479.8728 170.418 490.7767] +/Subtype /Link +/A << /S /GoTo /D (a00085_5ed2615cec9e633d90ac5968771976eb) >> +>> endobj +3414 0 obj << +/D [3412 0 R /XYZ 90 757.9346 null] +>> endobj +993 0 obj << +/D [3412 0 R /XYZ 90 739.9346 null] +>> endobj +214 0 obj << +/D [3412 0 R /XYZ 90 739.9346 null] +>> endobj +3415 0 obj << +/D [3412 0 R /XYZ 90 716.7484 null] +>> endobj +3419 0 obj << +/D [3412 0 R /XYZ 90 602.4342 null] +>> endobj +3420 0 obj << +/D [3412 0 R /XYZ 90 602.4342 null] +>> endobj +3423 0 obj << +/D [3412 0 R /XYZ 90 588.4455 null] +>> endobj +3425 0 obj << +/D [3412 0 R /XYZ 90 576.5751 null] +>> endobj +3427 0 obj << +/D [3412 0 R /XYZ 90 563.6237 null] +>> endobj +3429 0 obj << +/D [3412 0 R /XYZ 90 548.615 null] +>> endobj +3431 0 obj << +/D [3412 0 R /XYZ 90 535.6635 null] +>> endobj +3434 0 obj << +/D [3412 0 R /XYZ 90 522.7121 null] +>> endobj +3437 0 obj << +/D [3412 0 R /XYZ 90 510.7369 null] +>> endobj +3440 0 obj << +/D [3412 0 R /XYZ 90 497.7855 null] +>> endobj +3411 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3445 0 obj << +/Length 978 +/Filter /FlateDecode +>> +stream +x讠WMs9襟+�U媀�>�рr剌�=9.伭� +芧j��捚 RR)hFO莜鹵k$Ra鴳枢J � 悴Zl竮喿�腛廰~䴓 ~俊�2菻*阧A$(≌l�0$寧茢sA唶�肞�!A� 碥嶎圯a�v#禑|Y秛游埘K3z溳&硯�'*�$柷儑G\-侌�#f川䥽寛1蹿8e醓3�賟�}� +满&�"�V園tcW鮺盵况eJ 剦V昑恦% 爍孞耪a汤杅3�&_幺譓娇:鱈0E奞抲蛻褎灭8g哽烗郧� � +)翫C1靝蘎鬊燛B�じ`t⊕竽歶䴖揾�,飹!壻棍薎�從n渼/ !5-$!燡�k�9睳瓕�呮债�O觙}琟�+�!泆沱F��瞨�v牌蟯仭 M�8傗vM舳遘蛂叱�-慸奭�c@_ J臋鎜vO攰碅lwC絛=v⊕_負 栻燥馑|缫]�乜�#]澏�=侂3r棆3郖4粬乁z燊F�1S萇@�CW0逝┿囐鋘:橾?佐鎖嚮饔升c_Y(�*-体矆共皉Y�髙Y駙/1H靂烥�挃锽�Ur-鄫I鳼襉5穫進扖i)�/Jr�XY驕荋蚣逳蜇o^��?"y濧b7掽礛y崵仯B6~锳cBa{'Y�<�.钕U逋\锺厱�/A�礜笀贏?旦n��5姼联L� h琄�,χ秢8¨FZ1漜7VSjI3"KjXY稳喁霗g� 乘+歛黧掓賣毱燔m%iP鴛*⒊羝覂栖濦u)�/]蹘叀a a,惊H竼AMAl屄B{C僑(|-\h镪At帥锣vD酿���鴬�+戬�c镕�脳漿H锒熆卥熳o蟯r-�7薂-室w伊L梕ndstream +endobj +3444 0 obj << +/Type /Page +/Contents 3445 0 R +/Resources 3443 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3357 0 R +/Annots [ 3448 0 R 3449 0 R 3452 0 R 3453 0 R 3454 0 R 3455 0 R 3456 0 R 3457 0 R 3458 0 R ] +>> endobj +3448 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 668.6407 142.7416 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00044) >> +>> endobj +3449 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6071 668.6407 199.1894 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00045) >> +>> endobj +3452 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 584.0421 161.8301 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00086_cca775e46d4405b7775b328f7694f7e7) >> +>> endobj +3453 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 571.0907 148.62 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00143_g54a466311575a727830a92a6c3621cb2) >> +>> endobj +3454 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 557.5814 159.6884 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00143_g5eced097547fd3fac4ba2a255493d921) >> +>> endobj +3455 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 545.6062 133.6164 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3456 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 545.6062 169.87 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00143_gd85fc90c30d1fc37c63c4844be5fe09d) >> +>> endobj +3457 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 532.6548 133.6164 542.5824] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3458 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 532.6548 154.3681 542.5824] +/Subtype /Link +/A << /S /GoTo /D (a00143_g41bf109b6a45328d5744c0a76563fb6c) >> +>> endobj +3446 0 obj << +/D [3444 0 R /XYZ 90 757.9346 null] +>> endobj +994 0 obj << +/D [3444 0 R /XYZ 90 739.9346 null] +>> endobj +218 0 obj << +/D [3444 0 R /XYZ 90 739.9346 null] +>> endobj +3447 0 obj << +/D [3444 0 R /XYZ 90 717.8172 null] +>> endobj +3450 0 obj << +/D [3444 0 R /XYZ 90 602.4342 null] +>> endobj +3451 0 obj << +/D [3444 0 R /XYZ 90 602.4342 null] +>> endobj +3443 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3461 0 obj << +/Length 1040 +/Filter /FlateDecode +>> +stream +x跐Wmo�6_!`_`鈞|g0 貝禭�[雘M(2 撳L枟鲞�(R�")V0�)蜥輘蠞�$� �4裄藚J蛎�&�8齛q9捧t鴐锄�=硥%V1昹v�D2`蒮鹹� 繳�$]7帕誥┫y��Я琞�;湶寠5p~鮡s粃烽}Gj�+馂�Y}﨎�-R糫Q颅懮3>P植浒寃尻雨NXh7蘀(佅�傕 隻d��斁1F -獊h�*� ⺁Tyy轋$�)9阎`-痃[歨at磡葉茞b噲�%�0乆)�01$嶣QT� f.�緌MV攏饧qЪ.灇釾E億�袯k缱aYH�&~��&� 褌6�8P隨滚5z軲烵璼溬�0祏y櫿E�嘲<饍Ef巡 隴蝡x8煔�~垕'讋羢鸯�%蓵!J2�(&壯2�3~﹡寴弮陉耖pC(啊PS粆.飸���aLG#\i3�3*�礍B`罧契Ke広Q�<腃虓� �3扨DZJ樷f朶J嚚i�1朠戛QF貣倩岍tщ眂@愭 .z�8紲A狓z梥団醺�)n鼯SN&e躟/Q� �=j甚臍w末帏1r鷝�~升漠w锂@瓹傄CVT羼鴶鶺*完'拸�1艌ぐP,=j佉在�"Li"暗綫�捐|d酡莝3�濿DK+.+遥HM�E趩淯跧ga�(x{濒�S粸浅{人耈汪UJ酶�,C廧r?辨輫s(搴3傹祾礅嵒UE{�光_� #-嘛q~龓覎O�=�;s樗出&k舶駗崾韎鍾$闭@黭鞯!`甋)"��亳~�撚>娀樹�=雳%縳糥K縴y��诀"�7��罖廃哭�:�搲]箱詃鯏俀Dj�D彔OZ+A練a1 +/}�3用334x!3 ~惶拣碳��喬,0欂鮈姫q蹩WLr履Z�(^n昲Q亘�> 鎌檧 +祝�焰汆鄉x桻xF麀>&�>-t竊}p暙肠籕w]鎻np霃巗|�5阕寙'F� +W�?H慰��$九k敕GW嵟魺B祦>�睖 ╡ndstream +endobj +3460 0 obj << +/Type /Page +/Contents 3461 0 R +/Resources 3459 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3474 0 R +/Annots [ 3464 0 R 3465 0 R 3466 0 R 3467 0 R 3468 0 R 3471 0 R 3473 0 R ] +>> endobj +3464 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [367.6562 622.7225 413.364 633.6264] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +3465 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 587.1107 139.9724 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +3466 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.9612 587.1107 263.4979 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00042) >> +>> endobj +3467 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [266.4867 587.1107 399.7556 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00043) >> +>> endobj +3468 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [419.6211 587.1107 467.8198 610.0795] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3471 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.4252 505.6403 187.573 515.568] +/Subtype /Link +/A << /S /GoTo /D (a00087_e8eb428c05bc1dee022246a3063d277c) >> +>> endobj +3473 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.4252 492.6889 200.6041 502.6166] +/Subtype /Link +/A << /S /GoTo /D (a00087_fe557d333c06cf65f52023f45f5b0a3a) >> +>> endobj +3462 0 obj << +/D [3460 0 R /XYZ 90 757.9346 null] +>> endobj +995 0 obj << +/D [3460 0 R /XYZ 90 739.9346 null] +>> endobj +222 0 obj << +/D [3460 0 R /XYZ 90 739.9346 null] +>> endobj +3463 0 obj << +/D [3460 0 R /XYZ 90 687.0765 null] +>> endobj +3469 0 obj << +/D [3460 0 R /XYZ 90 523.614 null] +>> endobj +3470 0 obj << +/D [3460 0 R /XYZ 90 523.614 null] +>> endobj +3472 0 obj << +/D [3460 0 R /XYZ 90 509.6254 null] +>> endobj +3459 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3477 0 obj << +/Length 2106 +/Filter /FlateDecode +>> +stream +x诮Z]o�6}鳢0�/Pq鵐�( +礉m袮貪鎚f0Pl%V朶I�$鱎鼒踕 g�<�彯违�%廻�%�?苍x﹦B歲筡oxy�]诐A6黷进�/T/5覓叔蹴A$(∷胪�a�* 糙��/h +�"燮籦(l霃≯瘒}wE騏�:埘~[6C1Tms貔�讈�#*�$喦煁彑駌勥/0b:睡p�褮.� N�?�,�庳庱俢� +聨'L8�3詆La擬X!B񯾫^慝輻u�4�m鸆y[赲泆ir儬r2�0�4G�;髈U钞��$d� )滳#瘥#�RU蜐=QX鑤t3◎諒um7W" 鰻m�->aL藌c/�{r竪絊>衉xbC隻幭 +J�%�锳2@�気(-蒝]Yl捕�!_�<儆E泾飗u�.uf$ch槷鐙�+"V忞r�漟愄�立� 詢"莸!As瘐卷-h凤vm_�掩�n�l{皕e:&gKh�p毨P礷tLs覘趸r]k程狔 \�;�-d嬮H磛]欢j啿�B鞕窳泦MS御撴尮�2惂漦嵟蒯~Lq缉8�摮月s3ɑ}�'吺斩�74緛"iw���呙�-;鄱ywラl佗psk]5.4!偼g�00郓涢饇妠^� 唼萙$蘻 U~r褱幫χ�?�1鼾D�8溈�**X魩闇�%!1稟崶L搀�;3稶籦抽� ,y�%EⅵY�1"t挜峭Xv栤A��}p�8�9p丯A嚦5啣A频F慃砞x�M蒅毎襜X睏鎃猀a~�I3�*麀P7秢��Γ逝掆y帹�*瀬K�0X由i� 嘼$″Kjy餬-'貀軐轂�#"f0輅拢鬎�4=�謹$閥軐^絢籆zDE纄氰A蛝鬨 K�!r潚皣�$\冯a訪呶��径�炝蛽梣;贲�剱読A冪!o.K乛j霭礆'/Ws淽P髷]B�z绔9N/▂J�;甪嵏∑鑕偮,毶+誏1�%g)5{�)5繙q�応6Z聜繅罊朒�,e=,)餴缷瀈鐀3v樉)楥pl1v73蚵y挐峭豼雵/豌QO$镐Q俌@ n3E娣?煉� 扲俗曁)�洉L_�5l%旆7尴鬓�u渐y搢�w~|m +刀.��"O[�0Rp�65c鰱r澆8柈橧浪k&�.蕴擼糵"煳瘷8籔3Sv}�9^3鬍i擿PK� f?ev隭蚿H^塛柼38V1u~�頔�._� ~乹騚 "像L阾yx滓<鍣,]搥棗G淽(�)桓g娧;�3%鑩軐^]�!3$e|�2諉9;�11�蛁�1槨鴞佘 �'^V7a 鍒v�7踧U伙毵g}熢3�1J奁"Qネ�)�`I=O^;彌眿�9F飈='鑩軐薅�� 蜧3%楍<审辡╀�"eg蘌鼀遈]鶬v[> endobj +3480 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [107.8759 622.1864 146.9492 633.0904] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +3483 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 511.2147 166.8215 522.1186] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +3484 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 511.2147 198.084 522.1186] +/Subtype /Link +/A << /S /GoTo /D (a00088_79510aa86d3fa0a0fc6cfc49b1da7279) >> +>> endobj +3486 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 472.02 138.5977 482.924] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3487 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 472.02 159.9075 482.924] +/Subtype /Link +/A << /S /GoTo /D (a00088_0cd09beee671e7e9efb0b4aced10249e) >> +>> endobj +3489 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 432.8253 138.5977 443.7293] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3490 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 432.8253 160.4555 443.7293] +/Subtype /Link +/A << /S /GoTo /D (a00088_1df6aa054ef2fa634ac4c6f418228285) >> +>> endobj +3492 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 394.1886 133.6164 404.5346] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 394.1886 166.5427 404.5346] +/Subtype /Link +/A << /S /GoTo /D (a00088_70297b3e6d4eaae7bd828cb50bd1efe3) >> +>> endobj +3495 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 354.9939 133.6164 365.34] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3496 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 354.9939 167.6585 365.34] +/Subtype /Link +/A << /S /GoTo /D (a00088_8f6b08a5ba2a8d75ca7279e2056aa8c6) >> +>> endobj +3498 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 316.2176 138.5977 326.1453] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3499 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 316.2176 153.2625 326.1453] +/Subtype /Link +/A << /S /GoTo /D (a00088_0ef3ae2764714bf90620075c374c262e) >> +>> endobj +3501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 277.0229 138.5977 286.9506] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 277.0229 156.5899 286.9506] +/Subtype /Link +/A << /S /GoTo /D (a00088_3347ef1b6e8581402445d1a0280c7a14) >> +>> endobj +3504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 237.8283 138.5977 247.7559] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 237.8283 179.8421 247.7559] +/Subtype /Link +/A << /S /GoTo /D (a00088_db7a3fadb68df5fdd37e8b91a2c751ea) >> +>> endobj +3507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 198.6336 133.6164 208.5613] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3508 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 198.6336 144.4057 208.5613] +/Subtype /Link +/A << /S /GoTo /D (a00088_ef661afb3aa82f0437d2ed8d3c20be76) >> +>> endobj +3510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 159.4389 133.6164 169.3666] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 159.4389 144.9637 169.3666] +/Subtype /Link +/A << /S /GoTo /D (a00088_eb9fcbd3c9b0a795dcd63f33c323d65c) >> +>> endobj +3513 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 120.2443 133.6164 130.1719] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 120.2443 147.1754 130.1719] +/Subtype /Link +/A << /S /GoTo /D (a00088_e3aa9cc25e45b663e6aabc54c013019e) >> +>> endobj +3478 0 obj << +/D [3476 0 R /XYZ 90 757.9346 null] +>> endobj +714 0 obj << +/D [3476 0 R /XYZ 90 739.9346 null] +>> endobj +226 0 obj << +/D [3476 0 R /XYZ 90 739.9346 null] +>> endobj +3479 0 obj << +/D [3476 0 R /XYZ 90 685.4723 null] +>> endobj +3481 0 obj << +/D [3476 0 R /XYZ 90 530.3348 null] +>> endobj +3482 0 obj << +/D [3476 0 R /XYZ 90 530.3348 null] +>> endobj +3485 0 obj << +/D [3476 0 R /XYZ 90 491.2835 null] +>> endobj +3488 0 obj << +/D [3476 0 R /XYZ 90 452.0888 null] +>> endobj +3491 0 obj << +/D [3476 0 R /XYZ 90 412.8942 null] +>> endobj +3494 0 obj << +/D [3476 0 R /XYZ 90 373.6995 null] +>> endobj +3497 0 obj << +/D [3476 0 R /XYZ 90 334.5049 null] +>> endobj +3500 0 obj << +/D [3476 0 R /XYZ 90 295.3102 null] +>> endobj +3503 0 obj << +/D [3476 0 R /XYZ 90 256.1155 null] +>> endobj +3506 0 obj << +/D [3476 0 R /XYZ 90 216.9208 null] +>> endobj +3509 0 obj << +/D [3476 0 R /XYZ 90 177.7262 null] +>> endobj +3512 0 obj << +/D [3476 0 R /XYZ 90 138.5315 null] +>> endobj +3475 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3517 0 obj << +/Length 824 +/Filter /FlateDecode +>> +stream +x诃桲o贎�稔>�蹤}o巬E峊㎝�%QD垺H沥亘煽镟鹾娴モ喇wX3��1鷃� 5�0''��]綥癥寅�餼攟]陿覾Вi絻F�8騮魌�唡0� +蝉a�, +?哗V隝迩座4_ 衒y1砷扱2jp?篔緦谯7tJh苘黽r{�Q^%绖�*鼵`�O変"L灀涗g粡_�p(赏2A鴶嶸丼螁�+傝A3)琇C驭w滐e凘隲壌齿铐$s 丿mf鸵u +�A�>�諩[蹏jMp�9` �3槔簦 �瘤�.Z5y)玵曔堮4� 瓁宺h � 8丳頡vc鯾萖M�n[T�%T-kT�G∕�u糸圇�雒q皲5�!洉l�O拋vl鴲3旜觕h肢hw脀;贑舛琚柶栉执�.膍裊�5盷<�JTQ肌$睂撶鳬#mho#L訮椂a耽�/Wa布裷1/所瞚�>D處橨逯妐旜U�Wg\ 夔j雡党酇W濠畾^褐�.]苷甍閆W籺弄z軼� � C)榮V炞J�0L爴=酱 �2礨/I莦紲旗-t貲Wa嬬q贉4蕓 �/颌絇TG�1諓.狛O?F�$s<匁;拶瘕�8N�:蕙�梃顸0~駨��;佤e=誼G�-y/k堐b 尰凾`ry攼阣⿳�3O蔣&德碹�-� 鴜>WmW鲽$黁]暐�1h~挳 +蒻ep伿塟閣瞜�-齽赹鱑A映N仞狜=G]�鶌rlL!镲ap礗~軱翶�鼘瑕 甘B#Xkf葰狼7�齳6藡輮*碞}��7�!endstream +endobj +3516 0 obj << +/Type /Page +/Contents 3517 0 R +/Resources 3515 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3474 0 R +/Annots [ 3520 0 R 3521 0 R 3523 0 R 3524 0 R 3526 0 R 3527 0 R 3529 0 R 3530 0 R ] +>> endobj +3520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 726.8189 133.6164 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3521 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 726.8189 185.3615 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00088_a5f58074435cdc180f17de69651beebd) >> +>> endobj +3523 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 688.9408 133.6164 698.8685] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3524 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 688.9408 157.1377 698.8685] +/Subtype /Link +/A << /S /GoTo /D (a00088_2d9732cf5752d30bd11cb25dc7d0c8d3) >> +>> endobj +3526 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 650.0865 133.6164 660.0142] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 650.0865 152.1567 660.0142] +/Subtype /Link +/A << /S /GoTo /D (a00088_4289c59840b128f2f6526e9da2711d47) >> +>> endobj +3529 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 610.256 191.1698 621.1599] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +3530 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.6679 610.256 226.3075 621.1599] +/Subtype /Link +/A << /S /GoTo /D (a00088_97f9e1fda815bfb8b1f4577c355ade20) >> +>> endobj +3518 0 obj << +/D [3516 0 R /XYZ 90 757.9346 null] +>> endobj +3519 0 obj << +/D [3516 0 R /XYZ 90 739.9346 null] +>> endobj +3522 0 obj << +/D [3516 0 R /XYZ 90 707.0579 null] +>> endobj +3525 0 obj << +/D [3516 0 R /XYZ 90 668.2036 null] +>> endobj +3528 0 obj << +/D [3516 0 R /XYZ 90 629.3493 null] +>> endobj +3515 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3533 0 obj << +/Length 646 +/Filter /FlateDecode +>> +stream +x讠UMo�0 禁W嘏9X%鮡�v鷣暗沟A崞Jk u:瞧�?蕱S'鯕脨C$憒|彚h寔~[�3�1+椣膹t|a0O�_缪�繁eVs蟇侳�8騲^�&(�,錜*L趏?h� A,o騸u釉聿i�毮鉬�>华蓻rS�螳鑭綾�*⊙篪�. .堭ULXb叽喼蝤9抃 泆t狒�.`J疊1-%�>(鎀���1� i藯{�<葭EQ廵鲭k穜睫j榧>郑JR┕O鱏Y-譵<G濲疤�9~灷蔢&M�{殌!芼6x} 0�橴歓dRH24#� 冭3卒遐�輛Y�/��8愯 i泵箆/帝町�噩���'窑e(鄖箐晔厺/槽n橭銇1c汑�>sw�*違��.n�$逴閏至谡孧�鰇裰�蹓芔�2郆厤鷨 A�鶈泱辯�s!PW饷寬Y兙w:�?�冮z� ┿-h}斴喾钱5魍;v傆 ~葞3i!;蜰(��(涣o廬�>�)� 蕪k楊紟錟� 爓硹鱒/︽2斮潼侱嵓 呅孏殾&実+86P馾/]尻�鲳惥嫬  O 釘婼�=旋j5�*賱▲痧:|>簑眠O鍓*�Z飪榚ndstream +endobj +3532 0 obj << +/Type /Page +/Contents 3533 0 R +/Resources 3531 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3474 0 R +/Annots [ 3538 0 R 3539 0 R ] +>> endobj +3538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 566.4282 133.6164 576.7743] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3539 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 566.4282 153.8105 576.7743] +/Subtype /Link +/A << /S /GoTo /D (a00089_aacd5fa1806e0f0dd0bc96dd36507ad8) >> +>> endobj +3534 0 obj << +/D [3532 0 R /XYZ 90 757.9346 null] +>> endobj +996 0 obj << +/D [3532 0 R /XYZ 90 739.9346 null] +>> endobj +230 0 obj << +/D [3532 0 R /XYZ 90 739.9346 null] +>> endobj +3535 0 obj << +/D [3532 0 R /XYZ 90 685.9318 null] +>> endobj +3536 0 obj << +/D [3532 0 R /XYZ 90 584.8203 null] +>> endobj +3537 0 obj << +/D [3532 0 R /XYZ 90 584.8203 null] +>> endobj +3531 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3542 0 obj << +/Length 729 +/Filter /FlateDecode +>> +stream +x讠V薾�0茧+�"膔�儮嚶I�谀�$T嫸8�+薶篦]I擟?"%0|怘晤戊P&!冃蠵KM *�>4溿魎n9契�|�煰� 1姪p2k2( � '賫� 圦�$嵍蒝嫥EV�wU節V睇瓭賠Id嫨�)扭巰胙沅&笢�8倰+� �i�!褯�n%` �義7Xw怜]瀡� 8?-��)e(\鸅佉)Ey榃y �澈M贠y1]n3�饜�m匝繙去�塿�歎Zb0誛� +�1R6rc壼%6� �'泙>禪�/m�*弁刺譛�*\B~牫n&蟙a郇薺a寺簄-l歛护孒潱�M�JY�75殌�.舐%T紏甪沓嶺谧=亵劀扡鳐幱*m卯r惶6'靓T哖婆��h鲾�爦瀳�> endobj +3547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 565.8703 168.4754 576.7743] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +3548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 565.8703 187.0156 576.7743] +/Subtype /Link +/A << /S /GoTo /D (a00090_b684c17bf48c8e3b3fcf97b06b4c6ee1) >> +>> endobj +3550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 552.9189 168.4754 563.8228] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +3551 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 552.9189 182.5823 563.8228] +/Subtype /Link +/A << /S /GoTo /D (a00090_1abbbe7bc5d7d033c727691528b85b8d) >> +>> endobj +3553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 539.9675 138.5977 550.8714] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 539.9675 158.2438 550.8714] +/Subtype /Link +/A << /S /GoTo /D (a00090_c9273cc1fcdaeeddc523ca9f34977e06) >> +>> endobj +3543 0 obj << +/D [3541 0 R /XYZ 90 757.9346 null] +>> endobj +997 0 obj << +/D [3541 0 R /XYZ 90 739.9346 null] +>> endobj +234 0 obj << +/D [3541 0 R /XYZ 90 739.9346 null] +>> endobj +3544 0 obj << +/D [3541 0 R /XYZ 90 685.9318 null] +>> endobj +3545 0 obj << +/D [3541 0 R /XYZ 90 584.8203 null] +>> endobj +3546 0 obj << +/D [3541 0 R /XYZ 90 584.8203 null] +>> endobj +3549 0 obj << +/D [3541 0 R /XYZ 90 569.8554 null] +>> endobj +3552 0 obj << +/D [3541 0 R /XYZ 90 556.904 null] +>> endobj +3540 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3557 0 obj << +/Length 1344 +/Filter /FlateDecode +>> +stream +x诃檁s�6胚�~$Vu鮛Iw長粵穕f噦搙J��6呔2杽堩嗅儚瘇�9X2倐��Zjb筆膨uF媑黪��;_燂g?}d栋�*SD2`琵阛苘擫 筱籆I鏎hwp籬菅梖\6驱 榶錙n椙譲�,歾还y伎淉rI<ㄤ +Z庯硣GZ�疠�n�,⺮(kY�:寚胭椯盢w鈚罰%疳� �z誊璁脷��)丷:?只o躜u甾^V]耒戛陑糦Vm灰@瑪бn篡侍淜鹋o玣Q�败谆0T�OLi氪蓝玸[}m険鷗�}p#�m熀黯毜?雤F^�2�嵆�雑�: �#� \*杵?�PE7鈂�+c騷[@郾�mQk滈�;讆�雩>'\�`㏑Y籂粻;歰M弾3�攷a┪觪��&Ktt楷{pB风-n桇�標 嶳I寘湣^曶骪顉;Q磋f倖𴨼軰-Z櫊5跜逫E4�X);壏Q屭(�p�2>FY秩脆誑f鑲顐�lf�.�.柚說鑷蓪�(\U筬�%Z藈凃�n跼浑寷橣討皌Y>H嬘觼优tx:洪槔閎:R簔W痾t�L鄋EU甝� P楉幠CiB挂泷HX<�,づ轳篱bCtt哇O跷Gヰ�+�e���:eyK搨譡娪EKS:躌刵亥8]�4カ椲U5磡S�*痌緷DyO昜汲霤V斿=M +^�)N=M轲𴧭鵩灹 � 紇Whdg丳7�(c 垣蛑JJ勎>my欩k凃�6)哬浺e珽穰[嬨EkS紒?崧� 砌~�q評U察砎斿M +^�(NM�2�"x�篷ⅲ)蕖�?@粺'鏐ヶ>-�擳Wmd煝a�%n鍶7�抱d>湽 �=k頌紂贳S�M谾繀兓愺��炭��`~烸S�媅垦葸���-l��苓蔴髭Z2J�笝�(endstream +endobj +3556 0 obj << +/Type /Page +/Contents 3557 0 R +/Resources 3555 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3474 0 R +/Annots [ 3562 0 R 3563 0 R 3565 0 R 3566 0 R 3568 0 R 3569 0 R 3571 0 R 3572 0 R 3574 0 R 3575 0 R 3577 0 R 3578 0 R 3580 0 R 3581 0 R 3583 0 R 3584 0 R 3586 0 R 3587 0 R 3589 0 R 3590 0 R 3592 0 R 3593 0 R 3595 0 R 3596 0 R 3598 0 R 3599 0 R 3601 0 R 3602 0 R 3604 0 R 3605 0 R ] +>> endobj +3562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 616.6656 133.6164 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 616.6656 148.8392 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00091_7d472d8b3c41618d39c93c4ca92fb3f4) >> +>> endobj +3565 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 603.7142 133.6164 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3566 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 603.7142 147.7332 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00091_a3f2d9cb20290019b2743e8df31a2f8b) >> +>> endobj +3568 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 590.3444 133.6164 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 590.3444 148.2812 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00091_b15853725b233d526b291db0347d4ecd) >> +>> endobj +3571 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 576.8351 133.6164 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 576.8351 151.6087 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00091_308463cc7b3d45d2dbcdcedd4cde9bb9) >> +>> endobj +3574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 563.8836 133.6164 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3575 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 563.8836 166.2933 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00091_4619e69ec86a47f6abe945b39ec7f63a) >> +>> endobj +3577 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 551.9085 133.6164 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 551.9085 144.4155 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00091_55be3d5413ce49c5c4f5576def12d7ec) >> +>> endobj +3580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 537.9808 133.6164 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 537.9808 157.138 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00091_55e7764a9f6ed05aaa98076b9f6770a5) >> +>> endobj +3583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 525.0293 138.5977 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 525.0293 179.8327 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00091_babb9c2be394477af97f79507bcb4c86) >> +>> endobj +3586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 512.0779 138.5977 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 512.0779 178.1589 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00091_0ec6a6cbcbfd191d393738c16d54e5e1) >> +>> endobj +3589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 499.1265 138.5977 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3590 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 499.1265 182.5922 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00091_e27f4949613fe3c1de5a839af01d99dd) >> +>> endobj +3592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 486.175 133.6164 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 486.175 153.2625 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00091_fa0fe6ca88f692d22af70ff007411252) >> +>> endobj +3595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 474.1999 133.6164 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 474.1999 157.6859 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00091_266ea23d75c83f15b915ce54100e51c5) >> +>> endobj +3598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 460.2722 138.5977 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 460.2722 192.0068 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00091_805f8fd5533a6d4b6793e0645005da4c) >> +>> endobj +3601 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 448.297 138.5977 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3602 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 448.297 148.8392 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00091_a6d51f3fa5da9b7f9cd37ae69600c04a) >> +>> endobj +3604 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 434.3693 138.5977 445.2732] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3605 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 434.3693 164.331 445.2732] +/Subtype /Link +/A << /S /GoTo /D (a00091_967def494c68cfc8a08d5a6c4dbbc25d) >> +>> endobj +3558 0 obj << +/D [3556 0 R /XYZ 90 757.9346 null] +>> endobj +998 0 obj << +/D [3556 0 R /XYZ 90 739.9346 null] +>> endobj +238 0 obj << +/D [3556 0 R /XYZ 90 739.9346 null] +>> endobj +3559 0 obj << +/D [3556 0 R /XYZ 90 716.7484 null] +>> endobj +3560 0 obj << +/D [3556 0 R /XYZ 90 634.6393 null] +>> endobj +3561 0 obj << +/D [3556 0 R /XYZ 90 634.6393 null] +>> endobj +3564 0 obj << +/D [3556 0 R /XYZ 90 620.6507 null] +>> endobj +3567 0 obj << +/D [3556 0 R /XYZ 90 607.6992 null] +>> endobj +3570 0 obj << +/D [3556 0 R /XYZ 90 594.3295 null] +>> endobj +3573 0 obj << +/D [3556 0 R /XYZ 90 580.8201 null] +>> endobj +3576 0 obj << +/D [3556 0 R /XYZ 90 567.8687 null] +>> endobj +3579 0 obj << +/D [3556 0 R /XYZ 90 555.8935 null] +>> endobj +3582 0 obj << +/D [3556 0 R /XYZ 90 541.9658 null] +>> endobj +3585 0 obj << +/D [3556 0 R /XYZ 90 529.0144 null] +>> endobj +3588 0 obj << +/D [3556 0 R /XYZ 90 516.063 null] +>> endobj +3591 0 obj << +/D [3556 0 R /XYZ 90 503.1115 null] +>> endobj +3594 0 obj << +/D [3556 0 R /XYZ 90 490.1601 null] +>> endobj +3597 0 obj << +/D [3556 0 R /XYZ 90 478.1849 null] +>> endobj +3600 0 obj << +/D [3556 0 R /XYZ 90 464.2572 null] +>> endobj +3603 0 obj << +/D [3556 0 R /XYZ 90 452.2821 null] +>> endobj +3555 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3608 0 obj << +/Length 526 +/Filter /FlateDecode +>> +stream +x讠TMO�0界W鴺隄穹9� +圝+鞡o�Ph�6RI賽j�縱鞌P*笔瘤|<�7� � DKM-�,�2 +o咎0�'�?|焔�.�%朲��/{匱2dd^萱殺*&LB精�W徾觥6歰簐疯恂�-][犐]硃弈橳9r[芟g蠃|�#褦\a`�;唤Ry撼 (稦�?�璭�)�嘙v擙阢DG焢L璂~\. +�-l兴紎=枊_须EFt�輻;�3髥N1酧]W�WEī{Y歹sWo�腉�pgq︻�5u荮棄薛n\� 醉2�!c泠O9�R鎡M?`�E搄3-�2鎋詎S�yU厗龄囃7埊1枆牗郌坚剓�搰w!劜J崅Z鉡�/X赨r]弜 J漝7慕c谀u胴!�,暒B[鼣%B�>蚏&譁d9慕cy敐裈i蜲糧 +欻醱V豤Q� 爳o鉙衉7歏濮摏aX憿歇u�讝�0B�,�6�e綤di�3葡�H糠e羋綧C净鷻 +||Ms糊r蚢-茂f�6?f�?爀ndstream +endobj +3607 0 obj << +/Type /Page +/Contents 3608 0 R +/Resources 3606 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3613 0 R 3614 0 R ] +>> endobj +3613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 615.6894 168.4754 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +3614 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 615.6894 188.6695 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00092_4dc3294d67d705f7248ef57e4259424f) >> +>> endobj +3609 0 obj << +/D [3607 0 R /XYZ 90 757.9346 null] +>> endobj +999 0 obj << +/D [3607 0 R /XYZ 90 739.9346 null] +>> endobj +242 0 obj << +/D [3607 0 R /XYZ 90 739.9346 null] +>> endobj +3610 0 obj << +/D [3607 0 R /XYZ 90 716.7484 null] +>> endobj +3611 0 obj << +/D [3607 0 R /XYZ 90 634.6393 null] +>> endobj +3612 0 obj << +/D [3607 0 R /XYZ 90 634.6393 null] +>> endobj +3606 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3618 0 obj << +/Length 1936 +/Filter /FlateDecode +>> +stream +x诮Z]o�6}鳢0�榅~奷1 貟礖�Y�>礒嶝�-瘫3� 嘄鱙Z$CE旁k憞锐郊�<嚄�7"C ?dP +�4泫pv;烂鮻丿3�> ~� ^饥z☉蝘>溰G� 斝醖D8g攕AF噵KxxD�围鹖鮰颠fvL渊癬nf囒b綗钏蛕黫騠疔�#盄藟榴奏�'<��7寴Vb�>`D处蜜}X �鴔�/�m�劦O榩�@V枅萹F0疲Cy鱵鴚�w臡QMv=+啼`�f0鳒rv溋y�c�.忬[縐苟@e磟赬苂e�=拑谥籈WU(縬^暸j緆�"W�;憹�84╠睠pd+�8帀麘R�4拎Ek嶘舴G嘟鷓繬�8想8v罺d �D帳薯�6_m宙]刨g 斊竩CU淈缶 cn白�訵�"贊= %唋'鸄:�腮vs譆�*�.骎透噏A瀶=缽q?躛C灚 ~�s1谲莨絰7潔)�9&xT竏槎庍駈矾�&s耝E菽3姅勽淟|�#迿%_r*駋悶�涠樰7墖ぅ▕⑺糢3n�脦&澕o荓帄YQ�C獗`B�8膱wf赡讇淛|�'>箖施I|巹蔝]姝歲蹓鏩"L办d䦂�1螘@X堲:D鱢⿲讈溔xHgWy縗踡焼婮艞y玣��%CP駏g鵙��~(陼諚事調N 鱂 $_Yml竐1澔蝎b截/#R亄 �"齌bRqf蒖�9U*q恀*!儒5琔媂(喫�"�0骎拓b�頭逫*� +~打(岁辁a_寜坋&5讻dy1y8砫y詟�*�8H/�洫S鎎醕3o諏�!*瘬遈 梔}9�?悚 b鷓f生�9Uq恀!葲韙褄訞湃�碳U3t�<@O�,詉蜇暒逾 咷V&EU欀Ur�5j槡1� 惦Sq掠蠒�!" o�*�:�呇屹誁螙 m�H)��0f蕺絔LJ呐�~�8虒朎5祁p[L� P�$]� 蘐�.嚇.淵�.j@N誆ぷE騨毁oZ娎QFf蕺籆�!aZ炦%c瑡襱璻无^� #{炯?稲Z粖urV爾�(l�蟓?樍縈匭D嚕V楚#哨g浡瀻k聴臀慽w3L災JE2W�!G歝种 趤憸B翾.Xm銢[h�+�a�鮢a�苘攙|祂畒媴P幬*�ILTO諞鮲P�熝A砹�:�5iT�"iRHj + ")虥ウ�:�SXHgW頎菩訤荟鬍�炗A=f澏讨}8Qa㈠,澷�!片3Kf�銽f� =�!萮�4�.h�6鈜0�)󣤻=爷橣�3殸孼g朙m 醛云AzjC愌&h ]�m捻爾�)%盝h倊 ヘ碭�3騪�T�%SZr*悶�濑岙h絖@j凢f蕺簼Us!羪ね偕キ�4碝钪瀯檷�:�儰�$蚀dK.C嘓1柰幣囔秠 BV#�?E餯韆I祔垅y� PⅶtV莃�3扨.耪;$夊`鲖1凲DIgq硎Ao諿�>�炝崾�幋r怭尐�9う⌒!拞糦j�91 鮻tv5愌r0�.(q;rV�-4�4WL{鎸y�J鐖耵.牛y凲k斒g酓6p淯/Z⺷闶鬰�)窉m鴦紨燈娳1�(p!镰橁!i�+7CB"鎚4i�#珒虻i酧鱊�go菝s�诸�$�郡�%弹缌磖� S��缰|忥讲鼢芒h棘g蔻s袀U�跉鉤endstream +endobj +3617 0 obj << +/Type /Page +/Contents 3618 0 R +/Resources 3616 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3623 0 R 3624 0 R 3625 0 R 3626 0 R 3627 0 R 3628 0 R 3629 0 R 3630 0 R 3631 0 R 3632 0 R 3633 0 R 3634 0 R 3635 0 R 3636 0 R 3637 0 R 3638 0 R 3639 0 R 3640 0 R 3641 0 R 3643 0 R 3644 0 R 3645 0 R 3646 0 R 3647 0 R 3648 0 R 3649 0 R 3650 0 R 3651 0 R 3653 0 R 3654 0 R 3655 0 R 3656 0 R ] +>> endobj +3623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 552.2037 169.0429 566.1514] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 552.2037 189.795 566.1514] +/Subtype /Link +/A << /S /GoTo /D (a00093_5d8996950cdf3d8130cc3ad340eb9dff) >> +>> endobj +3625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 528.2933 169.0429 542.241] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3626 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 528.2933 188.6791 542.241] +/Subtype /Link +/A << /S /GoTo /D (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) >> +>> endobj +3627 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 504.383 169.0429 518.3307] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3628 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 504.383 187.5831 518.3307] +/Subtype /Link +/A << /S /GoTo /D (a00093_dc69abadd5aa07c7d74f9292db2cd93c) >> +>> endobj +3629 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 480.4727 169.0429 494.4204] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3630 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 480.4727 195.3241 494.4204] +/Subtype /Link +/A << /S /GoTo /D (a00093_b93e351c3abba0c700b26b7b07e9527d) >> +>> endobj +3631 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 456.5623 169.0429 470.51] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3632 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 456.5623 204.7288 470.51] +/Subtype /Link +/A << /S /GoTo /D (a00093_0c816f34c0187f2154c91a18d3ad87c8) >> +>> endobj +3633 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 432.652 169.0429 446.5997] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 432.652 202.517 446.5997] +/Subtype /Link +/A << /S /GoTo /D (a00093_6157452bdc9921f44b2e22e4b5969258) >> +>> endobj +3635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 408.7417 169.0429 422.6894] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 408.7417 198.6317 422.6894] +/Subtype /Link +/A << /S /GoTo /D (a00093_8082509468b2ac80ed7746aa1a5bc4f7) >> +>> endobj +3637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 384.8313 169.0429 398.779] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 384.8313 196.8783 398.779] +/Subtype /Link +/A << /S /GoTo /D (a00093_7675e6b9adbddbd545d3aac8ca092fbb) >> +>> endobj +3639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 360.921 169.0429 374.8687] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 360.921 203.6229 374.8687] +/Subtype /Link +/A << /S /GoTo /D (a00093_b4622e2599ff3a592db09219b2641682) >> +>> endobj +3641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.183 337.0107 130.9264 350.9584] +/Subtype /Link +/A << /S /GoTo /D (a00093_1deb2899508216804823498a69378118) >> +>> endobj +3643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 274.1638 169.0429 288.1115] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 274.1638 189.795 288.1115] +/Subtype /Link +/A << /S /GoTo /D (a00093_5d8996950cdf3d8130cc3ad340eb9dff) >> +>> endobj +3645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 250.2534 169.0429 264.2011] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 250.2534 188.6791 264.2011] +/Subtype /Link +/A << /S /GoTo /D (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) >> +>> endobj +3647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 226.3431 169.0429 240.2908] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3648 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 226.3431 187.5831 240.2908] +/Subtype /Link +/A << /S /GoTo /D (a00093_dc69abadd5aa07c7d74f9292db2cd93c) >> +>> endobj +3649 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 202.4328 169.0429 216.3805] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3650 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 202.4328 199.7475 216.3805] +/Subtype /Link +/A << /S /GoTo /D (a00093_8da121d6e50992ec55778f9b2141552d) >> +>> endobj +3651 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.183 178.5224 143.1005 192.4701] +/Subtype /Link +/A << /S /GoTo /D (a00093_3983b45977630418d3038231aa8b68ed) >> +>> endobj +3653 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 115.6755 169.0429 129.6232] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3654 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 115.6755 189.795 129.6232] +/Subtype /Link +/A << /S /GoTo /D (a00093_5d8996950cdf3d8130cc3ad340eb9dff) >> +>> endobj +3655 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 91.7652 169.0429 105.7129] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3656 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 91.7652 188.6791 105.7129] +/Subtype /Link +/A << /S /GoTo /D (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) >> +>> endobj +3619 0 obj << +/D [3617 0 R /XYZ 90 757.9346 null] +>> endobj +1000 0 obj << +/D [3617 0 R /XYZ 90 739.9346 null] +>> endobj +246 0 obj << +/D [3617 0 R /XYZ 90 739.9346 null] +>> endobj +3620 0 obj << +/D [3617 0 R /XYZ 90 685.8208 null] +>> endobj +3621 0 obj << +/D [3617 0 R /XYZ 90 584.5797 null] +>> endobj +3622 0 obj << +/D [3617 0 R /XYZ 90 584.5797 null] +>> endobj +3642 0 obj << +/D [3617 0 R /XYZ 90 306.6831 null] +>> endobj +3652 0 obj << +/D [3617 0 R /XYZ 90 148.1949 null] +>> endobj +3616 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3669 0 obj << +/Length 1396 +/Filter /FlateDecode +>> +stream +x诃橾o�6嗭�+ti秋忁m鞻,脢-�.喍(Yq屍v&蒊僡�}GδP朌3襦 Q襅�撸�#�$~$18QB!酶L餐'+8鼅B氂)淥}翉笊�?S�d$暽pI悹�&箦签BD蚏*餿烤�RV嫪椿WU毕*劬蘯騜F�4遞9R +�)醖鰕~1鵬钇o�摛汕�8Y媾#f碒a#b M6NY籹7箽甤O: 荪 l�6鰊𙐮#&Q*{�鰶k笍�-韓於�15统魿敬鎜穽2焣<]m騧U€;%�/ K��-h}猉5欿匍S績祰诫粥螝/UD値Ky覞1姼� +�' 镌i萔讈,atZ"潽?顖",�u趵�;メ坄)㈨�;靦瞂;� g趛舱u 驰�3偋yQ�岪ZSdL潽?㏑SD闓{淘A+響莡uk[ 还^4弒6#bz沢3姧_她&`姜s懲\q謠B址瞙�; 鏩唗蛀悑,d=Sш�>b叫坮l㥮��1<}葙讷B�Q-鈸惯!�,:: 鐔@覅�Y��萌F酭ш;�=4抿�:�鋰u�5}y5穽OX`�-� +v葖�>)零濛:劀oe盐w@蝩> 闇�!嬅D郜麑F"L?顖�b卋v满��槳W杋耯磨圤額噣縉雘銵O@逗d]畸c@�)� *�`闠�-ui囃xf_3.重>4檥瓜mZ帝s堁擎 扣n蟋Z锒�a�4嫽踱�膯釮燉�∝he驯�976聬.6|H垗∧o� 璗�/u�#�!)茖'H纲5Р籡�数曙毴(肢篸Y俸e絔uJ傶「 仯�nd█ #!鞐饪齚佲T咋 +�$绉_�>�; 笋u脶鱸钟�G窍'|�"�!�6�脿�)C娒x唅@斳"剷佁惺j溺� A�.玼6恾�i擅4 h� |ty� 垷監�0銵螭U炸�(}雌v飏莌制J俻d0<�>D�-3殜竀H譻泭�乀鋎暴� rf*:訇:怌�(�5傮:H�:U茚D臅[箤G頔�� F5駤 +~噽,谡裙畣!潾>d慻}W俹潽?顖珎"L8媉鵾┇#,L|I閣冠盛]韤滊j夜闏W﨎t奘_o�W〧髨吙椇I$"\� 髗Bn恫h7; 绾唗n鷲 !Fo岑7鷪C章企餇暞Z�;厨c�"蚀�.佲仙A�(8鯐 m�?W�1)爊7?'�� 9]�1叓苢�� 顝V;D +y�?K�RC篓�橠F1蔺AF l晬趋�6/n賏返圻谄Ef鹒囆f嬤P鰡b籊1柾w虒B袲齄梖 j勛Ov鹡黜i昽廹碸o鸭摾zendstream +endobj +3668 0 obj << +/Type /Page +/Contents 3669 0 R +/Resources 3667 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3671 0 R 3672 0 R 3673 0 R 3674 0 R 3675 0 R 3676 0 R 3677 0 R 3678 0 R 3679 0 R 3680 0 R 3681 0 R 3682 0 R 3683 0 R 3684 0 R 3685 0 R 3687 0 R 3688 0 R 3689 0 R 3690 0 R 3691 0 R 3692 0 R 3693 0 R 3694 0 R 3695 0 R ] +>> endobj +3671 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 713.4339 169.0429 727.3816] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3672 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 713.4339 187.5831 727.3816] +/Subtype /Link +/A << /S /GoTo /D (a00093_dc69abadd5aa07c7d74f9292db2cd93c) >> +>> endobj +3673 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 689.5236 169.0429 703.4713] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3674 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 689.5236 196.8783 703.4713] +/Subtype /Link +/A << /S /GoTo /D (a00093_7675e6b9adbddbd545d3aac8ca092fbb) >> +>> endobj +3675 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 665.6133 169.0429 679.561] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3676 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 665.6133 196.3204 679.561] +/Subtype /Link +/A << /S /GoTo /D (a00093_7a58d95f7f7827789ff52500e3d16c34) >> +>> endobj +3677 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 641.7029 169.0429 655.6506] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3678 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 641.7029 181.4959 655.6506] +/Subtype /Link +/A << /S /GoTo /D (a00093_b6e9a75167bdddd561373bc5b6ef501c) >> +>> endobj +3679 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 617.7926 169.0429 631.7403] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3680 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 617.7926 197.3963 631.7403] +/Subtype /Link +/A << /S /GoTo /D (a00093_3ad48284f7a91f78bb24096aad89056e) >> +>> endobj +3681 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 593.8823 169.0429 607.83] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3682 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 593.8823 203.633 607.83] +/Subtype /Link +/A << /S /GoTo /D (a00093_494ea6767a8a8fab7abe96b799d6c3b3) >> +>> endobj +3683 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 569.9719 169.0429 583.9196] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3684 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 569.9719 195.3339 583.9196] +/Subtype /Link +/A << /S /GoTo /D (a00093_e9205a565ea3c911a785fc4e87c91a58) >> +>> endobj +3685 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.183 546.0616 135.3497 560.0093] +/Subtype /Link +/A << /S /GoTo /D (a00093_e292b8977f6b81265bf14e1676face3e) >> +>> endobj +3687 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 483.297 169.0429 497.2446] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3688 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 483.297 189.795 497.2446] +/Subtype /Link +/A << /S /GoTo /D (a00093_5d8996950cdf3d8130cc3ad340eb9dff) >> +>> endobj +3689 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 459.3866 169.0429 473.3343] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3690 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 459.3866 188.6791 473.3343] +/Subtype /Link +/A << /S /GoTo /D (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) >> +>> endobj +3691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 435.4763 169.0429 449.424] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 435.4763 187.5831 449.424] +/Subtype /Link +/A << /S /GoTo /D (a00093_dc69abadd5aa07c7d74f9292db2cd93c) >> +>> endobj +3693 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [123.873 411.5659 169.0429 425.5136] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +3694 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.541 411.5659 196.8783 425.5136] +/Subtype /Link +/A << /S /GoTo /D (a00093_7675e6b9adbddbd545d3aac8ca092fbb) >> +>> endobj +3695 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.183 387.6556 138.1195 401.6033] +/Subtype /Link +/A << /S /GoTo /D (a00093_4f39f0fe6a820d260fe6cddf9ccaa832) >> +>> endobj +3670 0 obj << +/D [3668 0 R /XYZ 90 757.9346 null] +>> endobj +3686 0 obj << +/D [3668 0 R /XYZ 90 515.7752 null] +>> endobj +3667 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3703 0 obj << +/Length 1646 +/Filter /FlateDecode +>> +stream +x诃歘o�6胚�)<堛�鰍鑊�[灜$F鄣鍀憽b檗 +4瞮柠蠎DZ�)�`犍詊思Tf簒烉閏�狠U豞鍌_o'考~隀7翷oN-`Z�樲.飂犇M%斠0;g卦|専7尬淁y隨�?.氥�墁顅n晴z犹浾vss鸻蜊m"锧�4衦|涇蒹�2榩&接语�g嘟�>O攼衩z騣騑j缂鉻佬鵭惷' 妳oD��肚结呢A�*pv濕b鸹U絕l4幛�z4o灌荦7LI趇雫B慨柬K-褗妝<珑}�7n浊� ���C褽]忣杈4tR0#8爐�)�-M'5鄮��?O� 8e埤7Kw� +D� 巖蜏市NE臆鮲赏 7sK-Y櫋5勖哬i1癑�%潔j訤韮@zC鴺dy僕;I蠩]���+6摖嫼莺� ]樎)徛UIE昒瀁玙u蕽�竚k巗嵘4殠L��#疏t 擞佊鋞x:候t鄑)9輏穁^衖� 吇昑T]-p #�0杚i靫<2�(c乀,�N椻懹狁@枋銇鹰x鋞玗� ={8詶擣3�-NY%U?斓尉�?�w两褬d,&QF��.�$c傂暻1砷歠`�'�弚]�;=jP繞JO9e矗Y冏;娪%Gs:躋劗躋�.9氂眦踗{鵣0 X�2潏衚&(视(�=�嫁S�.y氂� 檍欋燩紵5Uq平/陑x忾脶鴟Ah命L湴r潏綱!茯%5Q�*谡楁�7EK瀎h劌鉲鍘尚岉癬瑅箦ri╡�夝UIDT�6%霼y.s羷蹉?�,QFg�.�#�#鈦鄷�荎神桋�増龈iIEUw鞢⺷� 9悉p0殥\��$扇擿婼B蠩]�O 哤�/陑x�>槽�鴄H�n�=k葒偛咺K诬拰65k饅Sq篸jNG槉鄷泭�%Ss荐�t� +�琝'5a/醛V捬緁 ^�+N梶烷衼9FW<0'琚瓽wǹm鎺I-奧%U豴鏀倊�;5x3诇)+輝>2枏(s乀,�N楎懹狴@枋髞鹰|鋞笈揍|] �+┄��<輔蚵#�鰿-r��X>�R�<8]蔊N囩�+�N楎懹5 �'=犀�吠v" 訓莡*谫楁�7EK緁h腑鉮瀹稍甲8楏撬穠Z2弙[eN +贖f�湻u矡x櫈��嫍Yc槞9�&BWn'N楛涕緊^蕜墪1 +叓拪*玌钝~蔗闅魩僉譺�$#脕U,Au=:|d忈忟 绩脶匸飜N2〗#<隓銾/漟�)[捬苀 ^o,N棇烷蝎�+娟 酣胗潠u=顔钽鞬 皧"痔8_F0S碏徔X@R�< 8] +HN��+N�捰mw筒]w1jSL)畃脪�*mL鬕忣-0Pv皈C�MU�,O)s釔郃編2灕S)聛頀蕡衣警7鮺弈e巕解q忝 栀丙Ⅺ诉鵉tkL巛J朴`y�-募\岤鲝割暨彈Km讠�紧晸馐endstream +endobj +3702 0 obj << +/Type /Page +/Contents 3703 0 R +/Resources 3701 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3708 0 R 3709 0 R 3711 0 R 3712 0 R 3714 0 R 3715 0 R 3717 0 R 3718 0 R 3720 0 R 3721 0 R 3723 0 R 3724 0 R 3726 0 R 3727 0 R 3729 0 R 3730 0 R 3732 0 R 3733 0 R 3735 0 R 3736 0 R 3738 0 R 3739 0 R 3741 0 R 3742 0 R 3744 0 R 3745 0 R 3747 0 R 3748 0 R 3750 0 R 3751 0 R 3753 0 R 3754 0 R 3756 0 R 3757 0 R 3759 0 R 3760 0 R 3762 0 R 3763 0 R 3765 0 R 3766 0 R ] +>> endobj +3708 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 616.6656 133.6164 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 616.6656 148.8392 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00094_e1e60d56ea87dfa09230e25ca5ecf2fc) >> +>> endobj +3711 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 603.7142 133.6164 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3712 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 603.7142 147.7332 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00094_8cf0ca17b115ff2e3071b3fabcc43b53) >> +>> endobj +3714 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 590.3444 133.6164 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3715 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 590.3444 148.2812 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00094_e57281f5bef284bc9545834ef8ed4a96) >> +>> endobj +3717 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 576.8351 133.6164 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3718 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 576.8351 151.6087 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00094_7a59f0dad059786238d8ab604630e7f3) >> +>> endobj +3720 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 563.8836 133.6164 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3721 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 563.8836 166.2933 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00094_85d7f35662f7be20cd84e789a290dd4b) >> +>> endobj +3723 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 551.9085 133.6164 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3724 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 551.9085 144.4155 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00094_0f27e16ddcf7199d514968204966f559) >> +>> endobj +3726 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 537.9808 133.6164 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3727 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 537.9808 157.138 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00094_e45b31a0a277dd5325ad2a332358b21b) >> +>> endobj +3729 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 525.0293 138.5977 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3730 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 525.0293 179.8327 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00094_af7a8a5310ad945de38f5b3ac755ae7d) >> +>> endobj +3732 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 512.0779 138.5977 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 512.0779 178.1589 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00094_c8f124419a231f38bb6cdf5041757a27) >> +>> endobj +3735 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 499.1265 138.5977 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3736 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 499.1265 182.5922 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00094_8d4e08d051b35b1c710c3be5b8bbfa05) >> +>> endobj +3738 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 486.175 138.5977 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3739 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 486.175 168.7542 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00094_a81fff4836049cb3c018304d77337554) >> +>> endobj +3741 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 473.2236 138.5977 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3742 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 473.2236 173.1875 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00094_025ffa46b799fa6952719c499a3ae17c) >> +>> endobj +3744 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 460.2722 133.6164 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3745 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 460.2722 159.3497 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00094_2541fae506eb111ff1be2372e0919839) >> +>> endobj +3747 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 447.8787 133.6164 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3748 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 447.8787 159.8977 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00094_71721395f1c7c42b8bcc111b339bea7c) >> +>> endobj +3750 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 434.3693 133.6164 445.2732] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3751 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 434.3693 170.7167 445.2732] +/Subtype /Link +/A << /S /GoTo /D (a00094_6af8a59d0ab8967aacea749d6e59ac90) >> +>> endobj +3753 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 421.4179 133.6164 432.3218] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3754 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 421.4179 154.9262 432.3218] +/Subtype /Link +/A << /S /GoTo /D (a00094_619d9755a5d4aaabdb2e5e6ea4c1e0bf) >> +>> endobj +3756 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 409.0244 133.6164 419.3704] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3757 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 409.0244 153.2627 419.3704] +/Subtype /Link +/A << /S /GoTo /D (a00094_7f0ab3fe3bcf1e3ed9f5950cb4474ec1) >> +>> endobj +3759 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 395.515 138.5977 406.419] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3760 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 395.515 184.256 406.419] +/Subtype /Link +/A << /S /GoTo /D (a00094_f4a1d8cfbe270393a2de02b0c743e474) >> +>> endobj +3762 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 382.5636 133.6164 393.4675] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 382.5636 154.1892 393.4675] +/Subtype /Link +/A << /S /GoTo /D (a00094_dc7001682017599549f57771f4cd1b9a) >> +>> endobj +3765 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 369.6122 133.6164 380.5161] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 369.6122 165.4367 380.5161] +/Subtype /Link +/A << /S /GoTo /D (a00094_dde3cf9a57445814d01b3c67da08afdb) >> +>> endobj +3704 0 obj << +/D [3702 0 R /XYZ 90 757.9346 null] +>> endobj +1001 0 obj << +/D [3702 0 R /XYZ 90 739.9346 null] +>> endobj +250 0 obj << +/D [3702 0 R /XYZ 90 739.9346 null] +>> endobj +3705 0 obj << +/D [3702 0 R /XYZ 90 716.7484 null] +>> endobj +3706 0 obj << +/D [3702 0 R /XYZ 90 634.6393 null] +>> endobj +3707 0 obj << +/D [3702 0 R /XYZ 90 634.6393 null] +>> endobj +3710 0 obj << +/D [3702 0 R /XYZ 90 620.6507 null] +>> endobj +3713 0 obj << +/D [3702 0 R /XYZ 90 607.6992 null] +>> endobj +3716 0 obj << +/D [3702 0 R /XYZ 90 594.3295 null] +>> endobj +3719 0 obj << +/D [3702 0 R /XYZ 90 580.8201 null] +>> endobj +3722 0 obj << +/D [3702 0 R /XYZ 90 567.8687 null] +>> endobj +3725 0 obj << +/D [3702 0 R /XYZ 90 555.8935 null] +>> endobj +3728 0 obj << +/D [3702 0 R /XYZ 90 541.9658 null] +>> endobj +3731 0 obj << +/D [3702 0 R /XYZ 90 529.0144 null] +>> endobj +3734 0 obj << +/D [3702 0 R /XYZ 90 516.063 null] +>> endobj +3737 0 obj << +/D [3702 0 R /XYZ 90 503.1115 null] +>> endobj +3740 0 obj << +/D [3702 0 R /XYZ 90 490.1601 null] +>> endobj +3743 0 obj << +/D [3702 0 R /XYZ 90 477.2087 null] +>> endobj +3746 0 obj << +/D [3702 0 R /XYZ 90 464.2572 null] +>> endobj +3749 0 obj << +/D [3702 0 R /XYZ 90 451.8637 null] +>> endobj +3752 0 obj << +/D [3702 0 R /XYZ 90 438.3544 null] +>> endobj +3755 0 obj << +/D [3702 0 R /XYZ 90 425.4029 null] +>> endobj +3758 0 obj << +/D [3702 0 R /XYZ 90 413.0094 null] +>> endobj +3761 0 obj << +/D [3702 0 R /XYZ 90 399.5001 null] +>> endobj +3764 0 obj << +/D [3702 0 R /XYZ 90 386.5486 null] +>> endobj +3701 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3769 0 obj << +/Length 1274 +/Filter /FlateDecode +>> +stream +x诘榏o�6嗭�+炱f巼� 哴 i�哎轚[$耫俪鍉J�"Y奨/|aJzu�赆'$怷歨〾錌%関F�箭f狁�/粋_W碂^3沊bS申緤爛H,Ym尥5籜2I绉lw陟镆]Q詗迻嘢Z皱[w� 0sWの�屚A鹋囌挽摘�J鴊鲱M6梏fF 稦&燅俠瓥%蹤`脊萭og秖�� c塉嚆檪 x�5�2蘚w3J/K竺廓觿仄蘔,u鲊琀笥&(:J蓧�﹦?從褼 m懬�0槃1��/! � +腏Y搴碄6YrA纓R&捑v�:溯蜈覥�/砞怦�}CZㄢ芎]Q�+}`w_��=魁Q吒.�/恠H�$M&妀烫把O軋朷�hc �ca狥p^~鮡捷珙xu^3PF4g0Y� 謤纀跆�9<凣�儉!4p9姘蹣晊嫑莟熤熁g�$VM\丢X諆h娟脳+6冓%唻筅無侳�1堧} S稽覤�9IN<腥髏3Q骕掘 +J�C&壌BV袭輠JY�=丫cC��.陲 䴘艿�)y$c=曵昏鹾 =鑥骝蛁d<昲M愊庿]�~ +�#炩鴝�3&嚌遙扥諼u�8[猅註k贵t禵o6嚮r权$&鎾丵�.�!簂t=棁阝]Mㄑf櫔� z�躹EC袘\繷 �=姍椐)O�桓R⒉�3�'ie捩�1@� 褧i顇�\6竖駐W嗠襟3"罍 櫓� kq仪醶2崘0�@ �=d鑆�鹋@G�5簽��捁&妭槾W懍泠%遭�匙鑪鲵0�'�,纔鈹=$�0朷缺蠤敓9ne=庴]何樲wU*N蹚iU温╙蛤箢饂}耨kC螽聓E'-e匄>H �6唗#�#� 鴕ぇ莸Hw軪悶皐9矣鯶せ�鉎["$�:e�曼B�9.-崓T=�庙�I5\奞�>TSCp1�Y滉N罈S=懋ズ腩d茽fD1l�)w� +5��毃籉譻W桖罍郉�漬�%W勆 戹痀顆貁j洿瞶駖�>鍋�2酆e筟尜'��,枑p儸i\殴�8榎銟�弨偈v齜 湈簁漓筴�,蛀�麽nS它窛鳅瓨Z橄儸绱qx顝1冸b槾�栤�菿I�僑#祽跗_t済i鏿v?瞳繻�#�<疞{葫鑭C盇qSt^VQo��,猵~S綵��vo\�榚8j2��)茗鬙E迟 �魥�+6緦RU楊L� ��6揟8t趠鄪�6鯂y嵉N 媻鴈ndstream +endobj +3768 0 obj << +/Type /Page +/Contents 3769 0 R +/Resources 3767 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3772 0 R 3773 0 R 3776 0 R 3777 0 R 3779 0 R 3780 0 R 3782 0 R 3783 0 R 3785 0 R 3786 0 R 3788 0 R 3789 0 R ] +>> endobj +3772 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 604.7351 139.9724 627.7038] +/Subtype /Link +/A << /S /GoTo /D (a00049) >> +>> endobj +3773 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.8378 604.7351 192.4453 627.7038] +/Subtype /Link +/A << /S /GoTo /D (a00046) >> +>> endobj +3776 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 522.2884 166.8215 533.1924] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +3777 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 522.2884 198.084 533.1924] +/Subtype /Link +/A << /S /GoTo /D (a00095_8a661a2d544100b82d0d14a1985083d5) >> +>> endobj +3779 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 483.4341 138.5977 494.3381] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3780 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 483.4341 159.9075 494.3381] +/Subtype /Link +/A << /S /GoTo /D (a00095_981392e295db4d024eea95805c51c371) >> +>> endobj +3782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 444.5798 138.5977 455.4838] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 444.5798 160.4555 455.4838] +/Subtype /Link +/A << /S /GoTo /D (a00095_280a0c2a93544e597f92bbacf36ee1dc) >> +>> endobj +3785 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 406.7018 133.6164 416.6295] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3786 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 406.7018 144.4155 416.6295] +/Subtype /Link +/A << /S /GoTo /D (a00095_4da1d7815516cd2b5bda3a66fdf05198) >> +>> endobj +3788 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 366.8712 193.9395 377.7752] +/Subtype /Link +/A << /S /GoTo /D (a00153_ga92afb113e122f860392bfbd385f842e) >> +>> endobj +3789 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.4377 366.8712 229.0773 377.7752] +/Subtype /Link +/A << /S /GoTo /D (a00095_c8afa29e0aa5e789d6929b366d98ba56) >> +>> endobj +3770 0 obj << +/D [3768 0 R /XYZ 90 757.9346 null] +>> endobj +1002 0 obj << +/D [3768 0 R /XYZ 90 739.9346 null] +>> endobj +254 0 obj << +/D [3768 0 R /XYZ 90 739.9346 null] +>> endobj +3771 0 obj << +/D [3768 0 R /XYZ 90 685.9318 null] +>> endobj +3774 0 obj << +/D [3768 0 R /XYZ 90 541.2384 null] +>> endobj +3775 0 obj << +/D [3768 0 R /XYZ 90 541.2384 null] +>> endobj +3778 0 obj << +/D [3768 0 R /XYZ 90 502.5274 null] +>> endobj +3781 0 obj << +/D [3768 0 R /XYZ 90 463.6732 null] +>> endobj +3784 0 obj << +/D [3768 0 R /XYZ 90 424.8189 null] +>> endobj +3787 0 obj << +/D [3768 0 R /XYZ 90 385.9646 null] +>> endobj +3767 0 obj << +/Font << /F29 499 0 R /F26 485 0 R /F11 705 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3792 0 obj << +/Length 1294 +/Filter /FlateDecode +>> +stream +x诃檁o�6胚�)翳<堛�鰍萙�[$�鄢錷�,挕b椴倗峫]s$Q&札兟褺KM,猉�,h皲峻�運忽2鼃辐�=硡%V1U�=�+( �+瞠�%qS2!$,O傀�%]↓另猐鮃熪胕轂7`柕o墉O/醵]低n{髉鱭袼]$駹�+�8㖞�?孝r�攑kd駨鸃 X藠梾`<|�,>/䦂u鷨� c銜狼 偢oX1s狖k萝鑰R�<5稔��8O鮟�x划�鰰乆)蠒載w厵y璍雷经踀畅+?W鮭}h鯽!瀤艺閤m_缍﨎)�6g貔魰'�4[?� 旝h髫�砦嬴V70騆&惞 `黡��7誵腇�龄d轗A?貈*"�痷簙�0&喏礇K裳逼yN顩脫o鷶p侒逺ゲtA7�;櫙�gD1 +(#翿潷銙P摜 �葸蠜 8』v嫑%建骝垼Tc!g╓妪|-w綕(Zt3A猛淔涳%�璍汹蓠襂E4�X){壏QL�(�p�2>FY秩脆誑f鑲n@噝壯�63Ct篗��0��+�*篆癉k鵩R钯萌m[jw瀜Oιt$,A朞毅黷鄑1)�刵~:p簶帞7�潳D竅Q曤Wr斆斑墄(M(Wz:�婫愬銇�8?8]孏J嚽�.�#鰊!卿蝰X_R*I樥8eU哈]�6鶰�1憘P丬泴I"纀d鶚 =螐 Nc捯�1A桄�1I橼vd袂�婳])�(縥@�s泂4闰�&痺帵t福輡Gq鸿hJ�?熠蒎傾燪糝yQvA/檘飢L�< 布岭=砰ⅶ)� 詷( +披QS%�2肉�療�<瀆.祘?� +',�瀵Up穦瀧Q 瀹7E嫗&hKз�;姴EC躲a蒽WUu�4T栉D(属鞏mJr>鑩夤La贜�� +癶Y>H忬脕优t檟 x篌併艀U}l'"b�H+-nZT鍅7軨鋵K830檼T��$什)羫湞� ]� 桊擿x砈捔 �灮忟w噾綶扠�M觥 �"\g哕�,ojR饅Sq篽jJ�1翛o*�MM窈K訳�X�'�4^旝U�%<司jEY拮む蹙鈚炎�.�+�7遅/�:阔鯿?楣k�e(_w睘EyW%%Bg_芳厅�獳笟肻M�2�"x骫篷糺jmn√J贝^Tr葺鐿v訯�掙蟬<�;沤[泭伢X 揄7v粶诮$簺蘺|阭}X礱�1l!�>迉\烖`�/}区;娣オ?:�$刁{呔嚟��?]^*蓊l@Kf�?w4[醗ndstream +endobj +3791 0 obj << +/Type /Page +/Contents 3792 0 R +/Resources 3790 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3615 0 R +/Annots [ 3797 0 R 3798 0 R 3800 0 R 3801 0 R 3803 0 R 3804 0 R 3806 0 R 3807 0 R 3809 0 R 3810 0 R 3812 0 R 3813 0 R 3815 0 R 3816 0 R 3818 0 R 3819 0 R 3821 0 R 3822 0 R 3824 0 R 3825 0 R 3827 0 R 3828 0 R 3830 0 R 3831 0 R 3833 0 R 3834 0 R 3836 0 R 3837 0 R ] +>> endobj +3797 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 616.6656 133.6164 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 616.6656 148.8392 626.5933] +/Subtype /Link +/A << /S /GoTo /D (a00096_f1684ad96b8acf54154688df3883b801) >> +>> endobj +3800 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 603.7142 133.6164 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 603.7142 147.7332 613.6419] +/Subtype /Link +/A << /S /GoTo /D (a00096_ed119a030ebd3bf7c30a12071c27d441) >> +>> endobj +3803 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 590.3444 133.6164 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3804 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 590.3444 148.2812 600.6904] +/Subtype /Link +/A << /S /GoTo /D (a00096_47140aa52cb9e6a2de38fdfc5da08df1) >> +>> endobj +3806 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 576.8351 133.6164 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3807 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 576.8351 151.6087 587.739] +/Subtype /Link +/A << /S /GoTo /D (a00096_569382bc53aa64c227e57efe88fe13ac) >> +>> endobj +3809 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 563.8836 133.6164 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3810 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 563.8836 166.2933 574.7876] +/Subtype /Link +/A << /S /GoTo /D (a00096_8587178a29882482be20c2822b402b96) >> +>> endobj +3812 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 551.9085 133.6164 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3813 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 551.9085 144.4155 561.8361] +/Subtype /Link +/A << /S /GoTo /D (a00096_6f8c65cfc8242197bcc3cb5b4735b16f) >> +>> endobj +3815 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 537.9808 133.6164 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3816 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 537.9808 157.138 548.8847] +/Subtype /Link +/A << /S /GoTo /D (a00096_51bbbe3099c10ef26119ddc2aa51e35e) >> +>> endobj +3818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 525.0293 138.5977 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3819 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 525.0293 179.8327 535.9333] +/Subtype /Link +/A << /S /GoTo /D (a00096_f20186ef441ef5b600e8544a0f2d8d81) >> +>> endobj +3821 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 512.0779 138.5977 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3822 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 512.0779 178.1589 522.9818] +/Subtype /Link +/A << /S /GoTo /D (a00096_a80e8d0fc768525fa3bfb3d4e4cf260d) >> +>> endobj +3824 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 499.1265 138.5977 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3825 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 499.1265 182.5922 510.0304] +/Subtype /Link +/A << /S /GoTo /D (a00096_be2c98748e180c1747823cd2fb8ecf0e) >> +>> endobj +3827 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 486.175 138.5977 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3828 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 486.175 168.7542 497.079] +/Subtype /Link +/A << /S /GoTo /D (a00096_b20096ae4953caaa42f6bb2373c4494c) >> +>> endobj +3830 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 473.2236 138.5977 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3831 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 473.2236 173.1875 484.1275] +/Subtype /Link +/A << /S /GoTo /D (a00096_e82f68cb91d8688a619d55d2a8572979) >> +>> endobj +3833 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 460.2722 138.5977 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3834 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 460.2722 168.2065 471.1761] +/Subtype /Link +/A << /S /GoTo /D (a00096_c92d2f194f096e84791f95d7e8f0ba92) >> +>> endobj +3836 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 447.3207 138.5977 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3837 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 447.3207 187.0258 458.2247] +/Subtype /Link +/A << /S /GoTo /D (a00096_858f970feb7462871c814953697a8ad7) >> +>> endobj +3793 0 obj << +/D [3791 0 R /XYZ 90 757.9346 null] +>> endobj +1003 0 obj << +/D [3791 0 R /XYZ 90 739.9346 null] +>> endobj +258 0 obj << +/D [3791 0 R /XYZ 90 739.9346 null] +>> endobj +3794 0 obj << +/D [3791 0 R /XYZ 90 716.7484 null] +>> endobj +3795 0 obj << +/D [3791 0 R /XYZ 90 634.6393 null] +>> endobj +3796 0 obj << +/D [3791 0 R /XYZ 90 634.6393 null] +>> endobj +3799 0 obj << +/D [3791 0 R /XYZ 90 620.6507 null] +>> endobj +3802 0 obj << +/D [3791 0 R /XYZ 90 607.6992 null] +>> endobj +3805 0 obj << +/D [3791 0 R /XYZ 90 594.3295 null] +>> endobj +3808 0 obj << +/D [3791 0 R /XYZ 90 580.8201 null] +>> endobj +3811 0 obj << +/D [3791 0 R /XYZ 90 567.8687 null] +>> endobj +3814 0 obj << +/D [3791 0 R /XYZ 90 555.8935 null] +>> endobj +3817 0 obj << +/D [3791 0 R /XYZ 90 541.9658 null] +>> endobj +3820 0 obj << +/D [3791 0 R /XYZ 90 529.0144 null] +>> endobj +3823 0 obj << +/D [3791 0 R /XYZ 90 516.063 null] +>> endobj +3826 0 obj << +/D [3791 0 R /XYZ 90 503.1115 null] +>> endobj +3829 0 obj << +/D [3791 0 R /XYZ 90 490.1601 null] +>> endobj +3832 0 obj << +/D [3791 0 R /XYZ 90 477.2087 null] +>> endobj +3835 0 obj << +/D [3791 0 R /XYZ 90 464.2572 null] +>> endobj +3790 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3840 0 obj << +/Length 1300 +/Filter /FlateDecode +>> +stream +x诃Y蒼跦诫+x攣QO飲o撠b8螌� (啞H�-@[$ +��~奒覯應栢�怛X飖开b揹 �KM�2� ⿹散G�'8仟�8?飭�?Kq氹d鳻D袑(蝬2湈鷨pv6鄪��?&骙禾顿8K藘_餐n挄踳閏�9c稛.'鵬�,�3┪顕捉薬﹦f箚熃�=M� 龊G塸V%縛��O=蓞邫骶酤┿�'� 浩獦�,�巔?Z�7醏�'�哫苀�)U膯┪Cs�涾�i6炌觟�"軳6硊6[-麋�*B𭏪孭;G闍�斩�:B﹢XV*�)d]�/煮t{鞠�('Fp哛K�,摪Y溗弆灙Sw丂F 1L�.�"PX鉰X.倍侺Z"� 怓戼㏎1鶹礈䦶窑駌赽7 +Lu嚙零c:Zq浻鸺/凜jI�> 5*B邘栍摐� |%l�$篐縎蕳�"兯侏猟>[V担Tz,��+骈^k!箱@) I 潘R�g泸芦Y:焠;尣歨a牧.�Q)瑋崜髜鏫邓$痲%P脾LD糒�39猽T澢5皂霤諶'8褱2T'襋W'a屭�:弅ㄋf h棴蛘処籺0礞牕Fm!7#瀦X苡 噗=耪諡嗞pOu姭�= 諘w飘杔楨� t妠�)軉yZ落瀦��鈏 �4T噞姩;軸\]韎9酥袣砒━Q+苂\%(n瑒{綅鲞 +孵5苒]Eフ�襳Lw檍垿Lb趲鮐RBg1mj[�6賮苉0iU�5GX 7g+槑y閍q3儉碚淕舩k奚蟾}�捾铖"V醕 +Zq� +[m;鼆gEc#鳕/碻-Y搗$閩譈 {諶~剀�欕aqs1评\湻67渑蚼�c.疇�y躬葑U茘t懕{T孻:玶誨}粅齄驺屙疳郢嘜瘐铈骝队vj驡Ss伥�兕aq�朴;4N嶱]#騈o腋己K囼炓l據堀踠澋撠qs幭� d/P褞-�"蜠焴jX暂0鄾輱竼:躚L奚頕鋣\C瞢惑舯I"榪∟胺B彭瓦痧鑳P 嬠Dzv劮6.銭{v擏垶Q袏霔枷閤歯姺-oQ嵸隃強)�)wM#N;锿褸*夬0�=,�3聏z汴阬誆�憌z泸�2�5SィQs柘案骗c�烹X聏碖Wǜ化岚"FIk�R紕C襝*ミ彋�/f�4{Y�+譆縯�銮鞟b�%T儀$xW�X庸劎灒鯖緖゛�&x_铆CX�Y�戨鼝.油8鬅�;贠~泮尒赼贱х\渟Z預囈逯�W賫B� +Ρ驍毒g�e:骁?礻浢endstream +endobj +3839 0 obj << +/Type /Page +/Contents 3840 0 R +/Resources 3838 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3875 0 R +/Annots [ 3843 0 R 3844 0 R 3847 0 R 3848 0 R 3850 0 R 3851 0 R 3853 0 R 3854 0 R 3856 0 R 3857 0 R 3859 0 R 3861 0 R 3863 0 R 3864 0 R 3866 0 R 3867 0 R 3869 0 R 3871 0 R 3872 0 R 3874 0 R ] +>> endobj +3843 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [106.7172 668.6407 154.358 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00040) >> +>> endobj +3844 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.2234 668.6407 222.4221 690.8921] +/Subtype /Link +/A << /S /GoTo /D (a00041) >> +>> endobj +3847 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 584.4605 133.6164 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3848 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 584.4605 157.1377 594.3882] +/Subtype /Link +/A << /S /GoTo /D (a00097_5960d82e7aca2986b8509a0d87d6cbc8) >> +>> endobj +3850 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 571.509 133.6164 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3851 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 571.509 154.3681 581.4367] +/Subtype /Link +/A << /S /GoTo /D (a00097_8ae6395641b7752dce47881e20cee970) >> +>> endobj +3853 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 557.5814 133.6164 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +3854 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 557.5814 166.5525 568.4853] +/Subtype /Link +/A << /S /GoTo /D (a00097_6925d46b2819adb474a5f0036f02dd7d) >> +>> endobj +3856 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 544.6299 138.5977 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3857 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 544.6299 157.138 555.5339] +/Subtype /Link +/A << /S /GoTo /D (a00097_7092781c50dcad50f473888585c85b83) >> +>> endobj +3859 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 532.2364 152.1466 542.5824] +/Subtype /Link +/A << /S /GoTo /D (a00097_a6487b9c1c773b32656065d0e19bf142) >> +>> endobj +3861 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 519.285 148.2711 529.631] +/Subtype /Link +/A << /S /GoTo /D (a00097_e87913860c6b05c6e6b060639b950098) >> +>> endobj +3863 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 505.7756 138.5977 516.6796] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3864 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 505.7756 193.1026 516.6796] +/Subtype /Link +/A << /S /GoTo /D (a00097_134ec55c3d5abaebfed4ff8edfedf1ea) >> +>> endobj +3866 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 492.8242 138.5977 503.7281] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 492.8242 195.3141 503.7281] +/Subtype /Link +/A << /S /GoTo /D (a00097_5a3116623c6a7da7c82db6c301ae0da3) >> +>> endobj +3869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 479.8728 192.5346 490.7767] +/Subtype /Link +/A << /S /GoTo /D (a00097_606d2729bf411ade69044828403a72af) >> +>> endobj +3871 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 466.9213 138.5977 477.8253] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3872 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 466.9213 209.1522 477.8253] +/Subtype /Link +/A << /S /GoTo /D (a00097_2fca02673894f222b01ad2d3a4d7dd79) >> +>> endobj +3874 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 453.9699 175.3891 464.8738] +/Subtype /Link +/A << /S /GoTo /D (a00097_fb60f42593d305ea36d9b4303722696e) >> +>> endobj +3841 0 obj << +/D [3839 0 R /XYZ 90 757.9346 null] +>> endobj +1004 0 obj << +/D [3839 0 R /XYZ 90 739.9346 null] +>> endobj +262 0 obj << +/D [3839 0 R /XYZ 90 739.9346 null] +>> endobj +3842 0 obj << +/D [3839 0 R /XYZ 90 717.8172 null] +>> endobj +3845 0 obj << +/D [3839 0 R /XYZ 90 602.4342 null] +>> endobj +3846 0 obj << +/D [3839 0 R /XYZ 90 602.4342 null] +>> endobj +3849 0 obj << +/D [3839 0 R /XYZ 90 588.4455 null] +>> endobj +3852 0 obj << +/D [3839 0 R /XYZ 90 575.4941 null] +>> endobj +3855 0 obj << +/D [3839 0 R /XYZ 90 561.5664 null] +>> endobj +3858 0 obj << +/D [3839 0 R /XYZ 90 548.615 null] +>> endobj +3860 0 obj << +/D [3839 0 R /XYZ 90 536.2215 null] +>> endobj +3862 0 obj << +/D [3839 0 R /XYZ 90 523.27 null] +>> endobj +3865 0 obj << +/D [3839 0 R /XYZ 90 509.7607 null] +>> endobj +3868 0 obj << +/D [3839 0 R /XYZ 90 496.8093 null] +>> endobj +3870 0 obj << +/D [3839 0 R /XYZ 90 483.8578 null] +>> endobj +3873 0 obj << +/D [3839 0 R /XYZ 90 470.9064 null] +>> endobj +3838 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3878 0 obj << +/Length 293 +/Filter /FlateDecode +>> +stream +x讠QMk�0 禁W鴺釿r,�=巑e伭Fs+=ZK翨轮?绔谯餉O~抶z.��$7�鈟�$?-儥�<� S鲳値;�墽佇扔b@La剄�!鑏�=�2!'饠u賱v]坨]邌`價&浖核合�i聻荧扽╒儙o�?H^x� 揃9廜�鐞W,F�$_l�>畇&bl阜顯GdIk�H򣘰��0簀} (�6晞3��*魨1!7啵⊙賛Y梞謺興楓h宱 HB蠥?'�s�T滮G)iB�u写Sr{ㄣe股镥\轡C兒J[刽餸�礶ndstream +endobj +3877 0 obj << +/Type /Page +/Contents 3878 0 R +/Resources 3876 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3875 0 R +>> endobj +3879 0 obj << +/D [3877 0 R /XYZ 90 757.9346 null] +>> endobj +3876 0 obj << +/Font << /F29 499 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3882 0 obj << +/Length 836 +/Filter /FlateDecode +>> +stream +x趰VMo汙界W狋bl鳆*ⅵMS到T憃M!Lb 唳?砍,`蘎邴娼�3;僆�酑�%2屗 賋噜~䏝A簃N乽i懁G=倢�5萈M{紸�6mb 趖斡:┎7 PZ�聬栨AiH年o价鱺�'鬈�!玏鳐)蒹凳�7�帩gI洰篊e椭U贁u櫦伢崿眿/搿躗 L� +8親I蒰疍娖ZO� 聵椑HQ馐sZ冬轔� 1J螊�鮭~ VH&巐&辵�9. y愍C�(ZR臋�=a�>xV旴�(9标禵倊鮟d粡槺-嵌=fk ��,㏎漀絇�> endobj +3885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 437.3806 250.6249 458.582] +/Subtype/Link/A<> +>> endobj +3886 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 410.0836 212.6587 418.9302] +/Subtype /Link +/A << /S /GoTo /D (a00171) >> +>> endobj +3888 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 298.6746 202.2283 309.205] +/Subtype /Link +/A << /S /GoTo /D (a00163_gb97849f0d3ea858eee790b69591e6427) >> +>> endobj +3889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 285.3496 217.7102 296.2535] +/Subtype /Link +/A << /S /GoTo /D (a00163_g03070adbf8faab0f34f87c1270964306) >> +>> endobj +3883 0 obj << +/D [3881 0 R /XYZ 90 757.9346 null] +>> endobj +266 0 obj << +/D [3881 0 R /XYZ 90 739.9346 null] +>> endobj +1064 0 obj << +/D [3881 0 R /XYZ 90 553.9527 null] +>> endobj +270 0 obj << +/D [3881 0 R /XYZ 90 553.9527 null] +>> endobj +3884 0 obj << +/D [3881 0 R /XYZ 90 517.4245 null] +>> endobj +3887 0 obj << +/D [3881 0 R /XYZ 90 317.251 null] +>> endobj +3880 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3893 0 obj << +/Length 1119 +/Filter /FlateDecode +>> +stream +x讠W遫�6~鱛!�/鰞Y揆嚹`�-K赚仓{j夽摃X╟y栜��龓┤�, � 竖x咔汇���� +�R捎�忯髹赶Kl~^娃\� 3u皕�,h` +冋d碭螐飊i�踪6璆Wyr|Jwe\f鵱駓u3鹵招:UJh挨��>}媪氃萏8&R�3絧芵�4�(v鰍鰃cPMZ�1�:悓嗀�<ふ嗸�"唻%p午駘_假ほm緗^熺図蝴�6輊H颐篕R混�楺#[:�>庱*-c2磛L嬩愴禁葞hE艢眿0禉咭xM颊�;窝藋容燅畘� P髈裼�#驀�ㄦ硝K欁乡CV:\k蛩6K晻�鸆^鍱瀨�J藗u)�! +-"� 僡鬆e誒倘0�賀渜㏕鍒藚語n蛎E�8睵 寭7�鰒��,琔綦咃斧桨-牮磃kdR(J辥�=゛�"陰扎髼缽~o肾3d攵鞛e+ &�?YR�"韏Ai樒H徎瑼貔O薹f�瑞%(o㏕P>X銾j觷桿邰rt�;I'U�Y 4pΩp觏C|h囘銞� 犸俚犏濉隠@喨eGN讬5!蛫`螜欒MBH^暡偩蝪肾甫-:f鹼_餐+k翓�+啺{煌t犉 蒱 着�*.�:F嗣1)弖�,N�遒唱 跀汌U$_靀�;D�/��elPS紅�)oQ�, |"�0熛H彑倚驰d鋧搼�三-N�∫阄hPBN翺q拺d +踸v0嘁^-浅oF蘩&>束� ^�拮k芬乖,�:溏c铖S2zv瓕哭蒉_揶䌷齈/4� z$/(�飛S�. I驾 +*K温I粮>顠鷡1�0\2m"8�0-繶聏豻聦1�f湻I�6镒挀瞮縁@u窯j劽O╄贊豬頷{�1�iPR sㄣ�;w +峚 �J}緷iF爜M&�(鉑L瘊8釢L�S���*zv� {U/�趝瘿7詣鋫 +啙(LG?2$鏳匆��2(�) 皚糹�閘%�i�m篕t埠尥進�饍踲� 爗� 鑊g鋅沪蛌b緌膑��龇飶i禡飥楟蓅囸endstream +endobj +3892 0 obj << +/Type /Page +/Contents 3893 0 R +/Resources 3891 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3875 0 R +/Annots [ 3896 0 R 3897 0 R 3899 0 R 3901 0 R 3903 0 R 3904 0 R ] +>> endobj +3896 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +3897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 213.2166 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00172) >> +>> endobj +3899 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 516.2256 211.8219 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00078) >> +>> endobj +3901 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 458.3971 213.038 469.3011] +/Subtype /Link +/A << /S /GoTo /D (a00163_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +3903 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 401.545 217.7102 412.4489] +/Subtype /Link +/A << /S /GoTo /D (a00163_g03070adbf8faab0f34f87c1270964306) >> +>> endobj +3904 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 388.9671 202.2283 399.4975] +/Subtype /Link +/A << /S /GoTo /D (a00163_gb97849f0d3ea858eee790b69591e6427) >> +>> endobj +3894 0 obj << +/D [3892 0 R /XYZ 90 757.9346 null] +>> endobj +1065 0 obj << +/D [3892 0 R /XYZ 90 739.9346 null] +>> endobj +274 0 obj << +/D [3892 0 R /XYZ 90 739.9346 null] +>> endobj +3895 0 obj << +/D [3892 0 R /XYZ 90 716.7484 null] +>> endobj +3898 0 obj << +/D [3892 0 R /XYZ 90 534.1992 null] +>> endobj +3900 0 obj << +/D [3892 0 R /XYZ 90 477.3471 null] +>> endobj +3902 0 obj << +/D [3892 0 R /XYZ 90 420.4949 null] +>> endobj +3891 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3908 0 obj << +/Length 2681 +/Filter /FlateDecode +>> +stream +x诮[]o7}鳢�榱,?嘾�(諿+Y準vv仸0T[帊貟珡&綌�#r裙�"婨"Yg�9肩^�3⒇��?6皌爼&V萰p髏D嵯瘞X1|~⺷y裘Kn栘奧兯籡剨�\撖:4D寧耿觅篌鷩請欋|絴�3x9襱Hn雳�忬辄n厩,n軣�諓I;蝓养惭TKVN�G傀F� %�5� o(a烛劣戜驴y<�8壋�`wAn鋳夵袡$�钋�!::t[��31b曏1� �昶\3Vs澪73t粡t:_攥�7薊GfA.塗z鎡r笨陗罐靇-fO郸蛂��倩谙圹諀睫縔�迷t+5$m棇"�=▌%Js柾�嚚茨�%� +垾\漣庇~2弁齬酡屯('Z@4敿Ae孛�1獕fB㈨鑟gOu品婳#F圀酋>銓WW淗襳W�#應51VW-�? �冼妼�*敐Dvf 麩窢話涘S[d:薠嶆4鼧)蘡f|H-'+絻^�?�鱽R罨遽轾q�4_l晗f��踛v吐4└旣f�; 媷]k韚,"mmkti磐@Y 鮗g襺产XC9z鴔�蟃c;獡V氙敍Z�2寔 J隭F�<ˊ迬迦ImgX|侵� 3免鎞{ 嶵0o}稺M羁嫵-r仨胹lM{O 墇:[曼��7珖臛r焿$8趵s34�'渜c抙^Wp]5髐f��颖�7�&� +�#q�蜺:!耈f!敱A晉a创猙揎o霊&洳倀缞搘7偳梔$q潓烧�7�$+7Z嗭Q%^瓐枝披�*堄狎岫. 蝿錦��橧襧���峷�X;�&`E鉧澧�儮羪洟 y{MD蕨hpI\'沩�闼橘�"Y�"B貰T仦锰eさ1缴� ;OJ+謒s纋霭餐c`3污�蝣�9"颿3.#塠ow痏�9I:|爬饗w鐡媞飧籇冷�&攑;.Z L斗� 0榥�f簢昅�觪奁魫穱�y觪I茉趔w?潫幆/.GV�-clxy�6絹 �4 OO�*桠z奨龗熮�6痳跻Y++���污擛熔�"�>%�薍鈜柪黉齲氶~刭2* 灃U忻mE`矁~≠))`撔i}垃靼蝉c`=污X蝣�>"颿=.#塠掰嫂婶�-QP�螼�*>暵坡�岔A筪蓟VV��1�湻﹣惙G D鋧j棏腗k嗄萼_]|ZO�g镉I@W腇i�?㏎U\["輣"���2B�彼��缞�� 嫁�埛�L廾�倢$n��逶礁汓敇.)QZZ<# � 吤ZO+)�:瞎顬�);]橂Vvc \莥證�瓽鋧\莈$q3淉d掔荠b瀶U欣癀�5��,gw%IU轭�>!驰檬vc寔�8ocw熔妙埣忀笇$n踤~ s{лX*籕 籆 wuB1"u正�&`v{X賜�1�鏼�y{�戺�棏腗�OёoO.~NL�(�*jx騰滊p%撘� +jx�6卅莏纗�3迃鵆y鲹��颽e�1评x湻1>漤a|D耷x\F咨垶藣&W泓苇2 螱�*�-錸� 蓇:穯hH_п!1紒 G�x结o兖樇囜I軐釗�珐�誝Vx2TA� +逐0礜En��>Q渧0�=6�笉�6n嚰=軒塞笉薍鈌軉圪銾鷯6蘚��U�9%谪枑躆8诇n�絼蘰+�1嗐紞�!o�#�>嗐2捀肙s�6j�殊賖P淨bx;瑰踡墉w�0�=琹7�貚�6v嚰=鞄塞貚薍鈌靻崨勐漁�D欽�)iP-钏w�5彽錇畆┸�2d樼V�c <莥螩�濭鋧<莈$q潓轼恻蛨Q:|=炰螾J$�螰�*揉侰6剨e赛�,Yc�3Y/穻w�/w&�qs'胶*$�)�*�Fw(溤WGHE妶!�1w梿�$矗%^蠟無f弿� 穁瑦�S 钒癝�?<庡NR鍦诸舯昃q樧V6c 芷y籆薏�w胵I芾�?扼兆�j惬X! U�7& 桤8齦�;�禽椀鷒纒g噑ャ蝺硦�6F�'�3燎!z7E堓�冕朠m�!⊿鹚v緷莋�氉鮼嫱齦A �寤迨沔���/w瘇鰽鐙:豶�!�#梿-8>r?pA榚�繖Pn覭魂V畈 `泀g�;\�遚%uM/嗞冬恨↖E橠�7〝8猣&)砎Zh鸂奍MT%Y�� 曾倚摳�鸶\~�>�;} 梄嫥燗繪OhEU;���-�5肩 牨烂渹7惾}?B:�&w?q84��!B鱼痴数歛龅n婊���讼�8篮凰 敯鈕ty鞅[峋W脹埽�=匊�钎yX( opD[羞m謡{G 梁;"硌茗犤Q冎�8攥�+�[櫶}WM伹��=潠Z�2P茉iF@}鰤0咅琑鷽~4�+f�0!�瓻化 頑N螳鵥練m簏颤挚x�2弓�0^�O_p駛育;NiU/�#畣~A啁�21R齮肭�鲖芁~�檂B&endstream +endobj +3907 0 obj << +/Type /Page +/Contents 3908 0 R +/Resources 3906 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3875 0 R +/Annots [ 3911 0 R 3912 0 R 3914 0 R 3915 0 R 3917 0 R 3919 0 R 3921 0 R 3923 0 R 3925 0 R 3927 0 R 3929 0 R 3931 0 R 3933 0 R 3935 0 R 3937 0 R 3939 0 R 3941 0 R 3943 0 R 3945 0 R 3947 0 R 3948 0 R 3950 0 R 3951 0 R 3952 0 R 3953 0 R 3954 0 R 3955 0 R ] +>> endobj +3911 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.1863 274.5352 659.3878] +/Subtype/Link/A<> +>> endobj +3912 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 592.9052 189.974 601.7519] +/Subtype /Link +/A << /S /GoTo /D (a00173) >> +>> endobj +3914 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 480.609 174.2837 491.1394] +/Subtype /Link +/A << /S /GoTo /D (a00160_g070d2ce7b6bb7e5c05602aa8c308d0c4) >> +>> endobj +3915 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 468.0205 216.3555 477.9481] +/Subtype /Link +/A << /S /GoTo /D (a00160_gecf13b8dc783db2202ca5c34fe117fc3) >> +>> endobj +3917 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 454.8292 258.0292 464.7569] +/Subtype /Link +/A << /S /GoTo /D (a00102_96eb4534b574ece96ed36806039f73d3) >> +>> endobj +3919 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 441.638 288.6444 451.5657] +/Subtype /Link +/A << /S /GoTo /D (a00102_4350350ce0d4595876743d4c0a720bcc) >> +>> endobj +3921 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 428.4468 295.1 438.3745] +/Subtype /Link +/A << /S /GoTo /D (a00102_e7250008b68d1909d54040515eef8ebb) >> +>> endobj +3923 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 415.2556 305.9495 425.1832] +/Subtype /Link +/A << /S /GoTo /D (a00102_6a327c0ffd40f69fbcd5f01f12e5745c) >> +>> endobj +3925 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 402.0643 277.9346 411.992] +/Subtype /Link +/A << /S /GoTo /D (a00102_dd685a0f8b5e76a2687cc0f306813bfb) >> +>> endobj +3927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 388.8731 241.5711 398.8008] +/Subtype /Link +/A << /S /GoTo /D (a00102_2e52037249bb98d7bbecf42e275beb07) >> +>> endobj +3929 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 375.6819 222.0444 385.6096] +/Subtype /Link +/A << /S /GoTo /D (a00102_72d99b1623afa14bd58c667b748c2ddc) >> +>> endobj +3931 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 362.4907 222.0444 372.4183] +/Subtype /Link +/A << /S /GoTo /D (a00102_c72f8777ccc45ae274449ea7a9f3de04) >> +>> endobj +3933 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 349.2994 261.3467 359.2271] +/Subtype /Link +/A << /S /GoTo /D (a00102_9f6c329c04baba17fe0f5b2a6597d713) >> +>> endobj +3935 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 336.1082 260.231 346.0359] +/Subtype /Link +/A << /S /GoTo /D (a00102_6aaa9da3d0f8d4c0799516d46d939942) >> +>> endobj +3937 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 322.917 261.546 332.8447] +/Subtype /Link +/A << /S /GoTo /D (a00102_8ee5e2c8e517d6e4f2198057f81e93c6) >> +>> endobj +3939 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 309.7258 222.0643 319.6534] +/Subtype /Link +/A << /S /GoTo /D (a00102_ee60b8757bacab269b0ccd7c240bf01d) >> +>> endobj +3941 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 296.5345 204.3509 306.4622] +/Subtype /Link +/A << /S /GoTo /D (a00102_bf4401501f1389872141a78b63f325a3) >> +>> endobj +3943 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 283.3433 219.2947 293.271] +/Subtype /Link +/A << /S /GoTo /D (a00102_55735650f879293d9b7b5fda6753d147) >> +>> endobj +3945 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 270.1521 209.3322 280.0797] +/Subtype /Link +/A << /S /GoTo /D (a00102_876c82c946543cd70c141e41417138e0) >> +>> endobj +3947 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 256.9608 214.4828 266.8885] +/Subtype /Link +/A << /S /GoTo /D (a00102_7bf0c086c7c41c12cc63324327932d91) >> +>> endobj +3948 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 243.7696 231.4091 253.6973] +/Subtype /Link +/A << /S /GoTo /D (a00160_g221d37ccde7e3fd0dd2c2eb0a6b15493) >> +>> endobj +3950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 185.0539 194.0092 195.9579] +/Subtype /Link +/A << /S /GoTo /D (a00160_g7c5359305008e9183b18d6ab75f568bf) >> +>> endobj +3951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 171.8627 187.9223 182.7667] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +3952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 132.5288 138.5977 143.4328] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3953 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 132.5288 205.5661 143.4328] +/Subtype /Link +/A << /S /GoTo /D (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) >> +>> endobj +3954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 93.195 138.5977 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3955 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 93.195 214.2533 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3191066cf8f76bd00b6843b77c37068f) >> +>> endobj +3909 0 obj << +/D [3907 0 R /XYZ 90 757.9346 null] +>> endobj +1066 0 obj << +/D [3907 0 R /XYZ 90 739.9346 null] +>> endobj +278 0 obj << +/D [3907 0 R /XYZ 90 739.9346 null] +>> endobj +3910 0 obj << +/D [3907 0 R /XYZ 90 716.6405 null] +>> endobj +3913 0 obj << +/D [3907 0 R /XYZ 90 499.4252 null] +>> endobj +3916 0 obj << +/D [3907 0 R /XYZ 90 472.0055 null] +>> endobj +3918 0 obj << +/D [3907 0 R /XYZ 90 458.8143 null] +>> endobj +3920 0 obj << +/D [3907 0 R /XYZ 90 445.6231 null] +>> endobj +3922 0 obj << +/D [3907 0 R /XYZ 90 432.4318 null] +>> endobj +3924 0 obj << +/D [3907 0 R /XYZ 90 419.2406 null] +>> endobj +3926 0 obj << +/D [3907 0 R /XYZ 90 406.0494 null] +>> endobj +3928 0 obj << +/D [3907 0 R /XYZ 90 392.8582 null] +>> endobj +3930 0 obj << +/D [3907 0 R /XYZ 90 379.6669 null] +>> endobj +3932 0 obj << +/D [3907 0 R /XYZ 90 366.4757 null] +>> endobj +3934 0 obj << +/D [3907 0 R /XYZ 90 353.2845 null] +>> endobj +3936 0 obj << +/D [3907 0 R /XYZ 90 340.0933 null] +>> endobj +3938 0 obj << +/D [3907 0 R /XYZ 90 326.902 null] +>> endobj +3940 0 obj << +/D [3907 0 R /XYZ 90 313.7108 null] +>> endobj +3942 0 obj << +/D [3907 0 R /XYZ 90 300.5196 null] +>> endobj +3944 0 obj << +/D [3907 0 R /XYZ 90 287.3283 null] +>> endobj +3946 0 obj << +/D [3907 0 R /XYZ 90 274.1371 null] +>> endobj +3949 0 obj << +/D [3907 0 R /XYZ 90 204.2437 null] +>> endobj +3906 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3959 0 obj << +/Length 737 +/Filter /FlateDecode +>> +stream +x诃VMO�0界W鹞尶廂i?� *m(慗#�桚�;n�*mJSiW9膲�=o�=螰鼱菮8鉪Υ摟膶�'篛��� �8J>淨&2橸瞓舭灹�4�$F与濸F� 陭�40@ M悻樼M雜9蚺j�*逝饁t檤m�VFY鬉煋隱Sfw檧TYj�+��,#駭hR馽瀄%?7�4�麙觍d猂qB甀�陘淒K,q驇6j)汾珌� .KEDyI具泞蓒�樤U5d慩凒[鳸.nhV7訝苑碧珬�"釦�*�9澍p*!$�4�/O顀�76飠=敗绻潍"_緆 6e�4i鷂Z' 滉眴 �皢灨�垛鯶胿�#嘐g迻5嫝S�)C�!Ⅹ麦:≯煭! +qp�抎�>r敕袊秪剏&x^w摩糎}嚋�(hs訬6蝟{涰�X6雌%c]BペW$绥?_.XE> endobj +3961 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 703.2821 182.941 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00160_gdf916e0c752f5cda70d0bddb2be422ba) >> +>> endobj +3962 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.7567 703.2821 211.444 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 664.4278 178.5273 674.9582] +/Subtype /Link +/A << /S /GoTo /D (a00160_gb50f78bbf36d912d69f6c1685d0b40e3) >> +>> endobj +3960 0 obj << +/D [3958 0 R /XYZ 90 757.9346 null] +>> endobj +3957 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3966 0 obj << +/Length 2209 +/Filter /FlateDecode +>> +stream +x讠Y[�~庄�┄謠'�E]�:垱蒘�uDX嘡D�'F��迿絇藡H�乃�3吵尺�,賿聫-簩TD!�2{^绣<⺪淋� 歼剙�?,^跨�2!夋z34#�3緗佝矈塡o涪t猑熥,^逭耩9竆GtE�蹙8漩昵|梉L欋#q筨姯{Ck�3Y 托⑦奎F梉0�懩j�7敯$崴鐓渎�?-时/虁睓+&僻�$�'芟潈+陮爷�;L豭b$Q蔴俥@E/st@K刅-�g詚 f麴铪�芕翋舀惬c�5鐘�7*柅噠n乪畮;鸰锃a糲8[=7Um�>骣�9GOEU鏶;秡)杲絩S喃� 兺~*N[]x江79ㄎ�矺躞鼢弌镲呓悔踐S抳剦6桭7噈,Fe焏ii/x雾%陞 輂; Jk聶錯@o��A!?薉K>绸[�&0躼C筬偱�b�X�4CJ閆眼�-jN7訮擟忾璁阺撜峸啲qn奢硺丼徕松�C,p腋S� 漕*鄋4颅��(x涳轝書`焈挢+tT潩兵恋|琞!Xn/�fze翄v达Y蕼r�? 惺>槽菢燐Dbq跰+!)\﹛)�&曆lh9�&0Z}�.� 5CKAa姟毡bZ5�娯8�=軦)噄谹:[籡堓駊8"徒逮7|鬐妡頊z8��!'鋘鰒剋u�[R�嬅聒閖%)!hH 崮疻�!�GP笡琭�愈|,�67铍舙募�+U_�?莈B稈y馹�.玽xR芯�6琧ㄙ揱+噝後���愄礵�魳] ��洸胐lsAF%X�#c篁O鎹$襎饇浿椹>隑$&:彡肱邺腎1酛霂��嵧�愾艅/Ghh谹 +茐b1口魡��6AC�藡偿8W闽�6� &5定9叫|&眼捽`綥SH)篻迈:倭鏻镵跎睰駜��豍�8D0 +�榪藾�:Y譧�璿m�'彋S ]�Ttu�*脁3 �护a$偺y泮桷兼翼榔鎶)v測5�\P�$嵁2D榒�6��/ 1W3DG�+W% {h 円哀�:7x鼫咕圾�9誀 d >韷5c 瓳�5炼馻烆 萄 喘�鲛鮣c懧塘嘕瓼J槇�6)�/�2WGJG镧5䞍┋|�0函娗蟉1�;綣[A癕泇�烷OQT艏`jA� �荲襙匿u~Sa螳>�1X鮥巾獓z鏦剑麞U煻b 7X�T盋K鈭刃]�'l4�=�3{x埘=/h_縢2�� "w� L*F絗F1尣<膣髝撙剛6In鮢嫙櫹P睽/铔�1S哠�*铤E'D+�� �疋攏风杯錽9� +�&�%�=Q0瘁P饲4眯�潸荟颺鯡喌删[甍3D �8鮉oU踫緋垑璜%庂 葶aD�<9乿J\'U苂嫆6O:伬)覚舟扤╳瀟:簅!漣+r襾Jx7�� +$喘覰皎9醣寞C}�雽q]ぐ*寡?kA_顄瀈擧E覵oQC臸瀫癕唓wOl霜氏頏~�.郷P}+]�)吼0C韜鄣宷D鸄嶖M};豑韖歿髙摕嫾菏 �&B�7W凷:讷Qp.覬兆r�.1 a倗�遭t珙c84�2移]咤e帶亷)=薩|@�5顔q鱋遬駟S{椅cx旇絝�8 毿�)踺駨/O鶢EO蠢?� 8廦endstream +endobj +3965 0 obj << +/Type /Page +/Contents 3966 0 R +/Resources 3964 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 3969 0 R 3970 0 R 3972 0 R 3973 0 R 3974 0 R 3975 0 R 3977 0 R 3979 0 R 3980 0 R 3981 0 R 3982 0 R 3983 0 R ] +>> endobj +3969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 639.4127 274.5352 660.6142] +/Subtype/Link/A<> +>> endobj +3970 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 612.7666 190.532 621.6133] +/Subtype /Link +/A << /S /GoTo /D (a00174) >> +>> endobj +3972 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.3051 493.1311 359.3784 504.0351] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +3973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.4596 463.5516 356.3884 474.4555] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +3974 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.2897 309.3651 239.3189 320.2691] +/Subtype /Link +/A << /S /GoTo /D (a00153_ga92afb113e122f860392bfbd385f842e) >> +>> endobj +3975 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.7197 294.8746 372.0849 304.7798] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +3977 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 226.9876 237.9445 237.8916] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3d768e989e308144190ae1a5ddfa9726) >> +>> endobj +3979 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 170.3828 194.0092 181.2867] +/Subtype /Link +/A << /S /GoTo /D (a00160_g7c5359305008e9183b18d6ab75f568bf) >> +>> endobj +3980 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 157.5616 188.4803 168.4655] +/Subtype /Link +/A << /S /GoTo /D (a00160_g6d9751d534453425c7a5a215d1d4414c) >> +>> endobj +3981 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [243.4737 157.5616 268.161 168.4655] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3982 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 119.3412 182.941 129.8716] +/Subtype /Link +/A << /S /GoTo /D (a00160_gdf916e0c752f5cda70d0bddb2be422ba) >> +>> endobj +3983 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.7567 119.3412 211.444 129.8716] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3967 0 obj << +/D [3965 0 R /XYZ 90 757.9346 null] +>> endobj +1067 0 obj << +/D [3965 0 R /XYZ 90 739.9346 null] +>> endobj +282 0 obj << +/D [3965 0 R /XYZ 90 739.9346 null] +>> endobj +3968 0 obj << +/D [3965 0 R /XYZ 90 716.7484 null] +>> endobj +3971 0 obj << +/D [3965 0 R /XYZ 90 553.0164 null] +>> endobj +3976 0 obj << +/D [3965 0 R /XYZ 90 245.8074 null] +>> endobj +3978 0 obj << +/D [3965 0 R /XYZ 90 189.2026 null] +>> endobj +3964 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3988 0 obj << +/Length 969 +/Filter /FlateDecode +>> +stream +x诮WMo跢襟W�(摧欭怄X� b碔撹�m硬檒(耶3黊zIZK O3o鐀�s鶤lyl攁VH_軪<扪碜羲Z啉�叻裲茤Y�:揶�40厐聆 +�7hQ楿o:U|寃'嚞;{Y\誻Y^フ救谉���!m螶 M襬学�<�&vg�&*~� 卫Z岋"壜]邀!N沸光氬 毊敁�#誮皓x�\3);T@?坖ZpZG%b/�4漝6"墉5w蔧眶�#@@5螬諣縏3n�0虯喐m�,+蒹睯胃E 鹿�%曯|祫q矣E;鳥延∕�2;圎/滑:f妪�*+Ce�8L�俠F3Q@覃5騏笨樂嘺�16鬵帀焴�$z炱�4�ⅰe�e缙&C葐苹�*葭�迚WuY璬泼c闄岙�畕司�42拕癰'+釖qm!\J_ 硦�) M�&`�.�>#p廧孰6孰筌e�P撥�;掎梄题z=肯鱯粵嫱 +� 侰-瑞f"䴔峟`�9}t犮X娩 )���g摦�:�i⿹礦 A&?2訠.u矁-w�饑�弧遾v釕㈢蛿Y忡囀X栃T�=c�,�>嬰欖P_�g區�J[朻@-@jF欽狓誱贜硥f�4"y�彺欴mD鰳<剿俕ェ%朗3疥^u皢翢$d鏝挸=岫8V 筋j6罵`4沼~z7蓠k^<溷怯.G虳#餙q9})H� 繍�l馘^佬� +�鏬濿\缣�0媃\螶哧瑋�1I4誈[伆 +禂?盠�6�擬樤 +蝧拸8i�5 拮Y�Gz蛳眕蘒�勗?钝宾軎('>{ +癜?撼K�>{誌棭勣鉟.S@朤沙[3N趦V鷩秶璚辂E�@sK峝D舀+慆(�s:輮�:顺2g庇�/wr鸭岅��?�(^`�F蝩帐)=�0_>喉�徎l禥V4�5Oワ{餲>endstream +endobj +3987 0 obj << +/Type /Page +/Contents 3988 0 R +/Resources 3986 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 3990 0 R 3991 0 R 3992 0 R 3993 0 R 3994 0 R 3995 0 R ] +>> endobj +3990 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 726.8189 138.5977 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3991 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 726.8189 214.2533 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00160_g3191066cf8f76bd00b6843b77c37068f) >> +>> endobj +3992 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 688.3382 178.5273 698.8685] +/Subtype /Link +/A << /S /GoTo /D (a00160_gb50f78bbf36d912d69f6c1685d0b40e3) >> +>> endobj +3993 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 649.1103 138.5977 660.0142] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +3994 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5678 649.1103 205.5661 660.0142] +/Subtype /Link +/A << /S /GoTo /D (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) >> +>> endobj +3995 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 610.256 187.9223 621.1599] +/Subtype /Link +/A << /S /GoTo /D (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) >> +>> endobj +3989 0 obj << +/D [3987 0 R /XYZ 90 757.9346 null] +>> endobj +3986 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +3998 0 obj << +/Length 1782 +/Filter /FlateDecode +>> +stream +x诃Zk徲F秊_a翖Dj唝?P呞j � +祬�菦uI�4狐�=硒5鉛+$直忥9s蠞腭$$琉�$'J(d桰簺醖虷}y 讞>鄺圪硹�$Ier{WF� Jhr箕0譎,朤帙阷8=;砦囼?擵g_孥�:z椵e�洋琀薙帀`婳穙f哭6j墏Ib�= 'k慂f�3Z$��寛14偻8e蠲v鰚鰃ШP�04RA仞P Gp喓盧候咼0~靀a�Ud倢edH� Lu�:鯩v^A爑�&;デ黳西E噛f�0V录{鸊u[� b�湤�畈饧病P7閆 L碕$��S鍬K寨m� b �0鲶D\西�.7�)FI樇A 胞)!X!E樃F+樽玗澬K駏A C跾昉B蓟%E� (滘�{R旴�(賾Z]䴕福�<兕�僖椵媗珸鯫kP jQ哼u鮌臽N]冴kh �蚸x1PwKH +Sj�"o矎�"/嫷=客z�1Iu" F砕浇t茉榳~ 8縜�zqz5h�$尋![|c頔程ㄎ狅饕笀D!I9/慜�"較�0g%t�'ヤ�'鰒;�+$C.O鏲^lN�;cN�4�%彧柘$翋2�5�:)�y省r*@��D�03(v�C�簝��&��(�dvx苝)�!f罔c� � 滲髃K鴳R裲o堆CO 26�/<� 柌望t]彺G�%RT�s鴺宆\+沲?踾�哵N�C艠c: �x5d矤H(e芃�!�,nr堁39疼橃驨0笶>配皩^\grz2� 婑Z嫷� ,^Y� �#汕-�!�,nq堁�8疼X祗N案E>赔皩^\g�!;纣^聣aV�<�噴��fv麫�!)DR塹煰證6专杆:箱 i惚G:羈焬娒A 莰蝊跓羦乵xx�a厜Nn斥F噟%癛爈鼄�劀u案�!F羡0oc;凛�{�2zq澚l茑帏�噳媫b饃鑵瀋寯躢蜇菱�=徝紞�>�廩銼<髓舥髊弮憧z&n<鰤羉>�1吁:}蘡鸶丒=2^=庰:廩紂徾�<幦枧u婹徝鉶<�;廩泥�|岩5乎烏騌��=�1 \z�Be醏癫1ze鎚事琮稜x鞠"葐!Dt盖醕*zq軳歧蔗惍洱�-�鍰F侧P1~儜`攗矎v檧c2�:⑵�诡`q證尀隺奁u�7顉媨婋a礁嶋榫皚is9�;搼H圯頿&*α拇�砾魚u瑆i缚yH0稫"倮�!孠胅f{�?潒�.�$粲� 哠2!港p:e莖v<;Uㄝ$&�聤礡5P<x椋藢 渉牱�-�1j嗒炎犲桙!KskY䴕ま筋誟┵裖齗n�袠|j(倰zb "泔蒚 詰倮�3�槕^7#[紬鈹o婒;淑�"�I甶G镍袁�15莰湍R�4!蝮�'A�$嬏�#V�:ㄛ�0鬽V�:/�QX哃爰>:衴X賧3譑]送柣U�铴�!*岡�)菆徼伵哗0訫眉M7鮵k�6鲃鮉DE/n覨�"?祌!寠だ漯�=硾� +漰5竔�[鸅�+攅a篓�藕DF1韣嶱嫲歘eEv\澼/躻畂萘籿冈��忡�=Ц鶧1栒演倞^匼^譑俲鄺z鮮�蓨nz鞆)蝮/$蝔裡ndstream +endobj +3997 0 obj << +/Type /Page +/Contents 3998 0 R +/Resources 3996 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 4001 0 R 4002 0 R 4004 0 R 4005 0 R 4006 0 R 4007 0 R 4008 0 R 4009 0 R 4010 0 R 4012 0 R 4013 0 R 4014 0 R 4015 0 R 4016 0 R ] +>> endobj +4001 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 274.5352 657.906] +/Subtype/Link/A<> +>> endobj +4002 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 185.6501 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00175) >> +>> endobj +4004 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 463.3525 176.5052 473.2801] +/Subtype /Link +/A << /S /GoTo /D (a00161_g3212e70c55244608ac16316888c354f0) >> +>> endobj +4005 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 450.401 176.4952 460.3287] +/Subtype /Link +/A << /S /GoTo /D (a00161_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +4006 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 436.4733 194.2087 447.3773] +/Subtype /Link +/A << /S /GoTo /D (a00161_gf7dd2757d1e766f65b01ba7c91c660a0) >> +>> endobj +4007 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 424.4982 173.7357 434.4258] +/Subtype /Link +/A << /S /GoTo /D (a00161_g34b924954ba5707d536df28d71a80d39) >> +>> endobj +4008 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 411.5467 173.7357 421.4744] +/Subtype /Link +/A << /S /GoTo /D (a00161_g9e97c58fe35f750ad192774be9408ac8) >> +>> endobj +4009 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 398.5953 173.7357 408.523] +/Subtype /Link +/A << /S /GoTo /D (a00161_g28cf9765e4b57451af559ab988ad7160) >> +>> endobj +4010 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 385.6439 173.7357 395.5715] +/Subtype /Link +/A << /S /GoTo /D (a00161_g17ccd786400fd08b941e11046df1668f) >> +>> endobj +4012 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 327.8154 189.0379 338.7194] +/Subtype /Link +/A << /S /GoTo /D (a00161_gbc331f73107958428bf1c392ba19b6f4) >> +>> endobj +4013 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 314.864 197.8948 325.7679] +/Subtype /Link +/A << /S /GoTo /D (a00161_g37e3103b9591790d484a450525739661) >> +>> endobj +4014 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4857 276.0097 216.0979 286.9136] +/Subtype /Link +/A << /S /GoTo /D (a00161_gf0349a8481565e80f55a751e2b408d6d) >> +>> endobj +4015 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [446.0722 276.0097 470.7595 286.9136] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4016 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 237.1554 173.556 248.0593] +/Subtype /Link +/A << /S /GoTo /D (a00161_g64807ba7c221ddf735572d05021539f2) >> +>> endobj +3999 0 obj << +/D [3997 0 R /XYZ 90 757.9346 null] +>> endobj +1068 0 obj << +/D [3997 0 R /XYZ 90 739.9346 null] +>> endobj +286 0 obj << +/D [3997 0 R /XYZ 90 739.9346 null] +>> endobj +4000 0 obj << +/D [3997 0 R /XYZ 90 716.7484 null] +>> endobj +4003 0 obj << +/D [3997 0 R /XYZ 90 481.3261 null] +>> endobj +4011 0 obj << +/D [3997 0 R /XYZ 90 346.7654 null] +>> endobj +3996 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4020 0 obj << +/Length 2158 +/Filter /FlateDecode +>> +stream +x诃Y霃燮�侶綡E缔wI:EQ7�q掱j珶忄@S�k塗D規Q�咸>ㄥC湒速涛k�,狆莻�憣H"Bd� 瀈朝佛~�鼄穤� O倓$姭`鳕9(F$g<仨Z3n�<�"Z愤菝P�5#� �)幑軺Y{仕&m姫茳納祕闺`璗R(啝楷~鷻{愵諍懩2�敯$崃ir�帿7�u|� 絗J9赡磛,$0脻z磵寁1Q�-蠊~V煔楚GC_鐝鵨免u^f9*h83扝�9僥�1�;蝿Y辸y�=5U^g椻� |刧d冣&喭�w骤�<輧z鼥R~躺形�$斉Q燘Nb8e%G歹┢~'凴糳H"-蛬 �吠『<b3蔍$8�铷&衹+0憟 y濡狩樯诎-遫]缜谪�1o碘$|E薍�("q﹣ㄦ觖缻诀膙+&腣矩#�(@ +b�m兇$玁Cyx$ 6鈊辴誜啚騝n(胈'\m薭�\B躭騗庮U贏档嬕w粦9eL勨q�hG�_]�,蚹�_0�#�(潔巍 嗾湵� C飐TK�#n圠� � �&�#P* ~Y斮陛C鍼齙磁�:7漯艒�!墾筀浽鸐si肠59H�2 I垱v+邀S!� J怵�襁r.恰峺 鈏保Z聟l淧傅講�,pP恛粬抋淖怪C %l焘1' ,X繯M狑�7廞HpR俅叔鷟.掺s�9� + 柑?�%V�:埦働歙柊≌�鷮vmS 含6嗕�'綑濹a痖l蛬.鏅桧w0�=Dx詧饗岟s�圏屝PMv~�黩�1骾箍磠焋郠&k[錧謥值沱Z�)>Z� � 铥]膜kA�&e� 戛鋦训,_0錤C局祎=粬劽篤O姂kY�%l壗`{�;8嚥$叫�6獗:+Ls;|鬹婛�鮴矯M软.� +g曷N洡僣U娇yp憚s梔锯�>惦呩�Qf媆G�j}▕絠�Ms蓿;b]xK%臰鹚緍~檺P呉鬜��Ei[�t全s�:懩�+<\涴p饪z�*d=�6~発4鯏\-S�&矙⑸镋OsAFC� \'4I鍻� �0My髙�贤�+�"p巹彸5gN薝泥懶債\浺�& g�[Nぁq� +⿷袆睕-玂0硬vd�-�,獾e]纔-k鱇�禽b℉�~籯u鬕b岠{囜翏qBC(j砎瑷�9XA +>熬n毥顱D樷�ⅱ$橫+巟隨k)$ 狌�'凢I|e谒櫐勖�.舿�輐鱣鑂[竞{P登終牋_瘞]6"倱� +�+蕰鵸}j棻?@廧摏鎭親溺�.称伣 +1 A3@唽F9蕝蛉�惹u蒭>釕 螪�!_a萿槟棎8 肶齛/羛A聞C3*佗垘�'鉹b�6BI�,鞎�$�!^纀郈齕h弸�寲�嬜u9�1�埉yqq妃J<罔帑屛R郋� +<5纡JK=愮靟���'腊D 笐 BP�v'm�5酚 �圶�3菥{杂WLA釟V{i8yQ卽�&黺征 f扸G稑磃疘k�%�顁诊�F誣c淖}xx趺?�W}癢$偌:�x幫磼Q炥r2&Q1�?仙|隀煲�!羲薳蕌e?厰黹濢,r�u馮贳3w,矖猠Un�>堏瀍R'N�>'��蚳 9Z�%_wd司�1滙鮵芪讅躖_嚂�|肿5龗#緷y鶑粦AT鮪��鴺�9癒赥_ �:遂囫R濎皀啐'�鹴獰�$ "表E^��w&n竟�梉茪鏤F犃欬鍷AEΔ鶦_^惦瓢剦搠B莭洬X�Y�(h紀�2腔 [��� ^a羓�泠�>玮9窡�9ナ峨x贬�-谳欇U縹z蔊�?OX閣l�/Xendstream +endobj +4019 0 obj << +/Type /Page +/Contents 4020 0 R +/Resources 4018 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 4023 0 R 4024 0 R 4026 0 R 4028 0 R 4029 0 R 4030 0 R 4031 0 R 4032 0 R 4033 0 R 4035 0 R 4036 0 R ] +>> endobj +4023 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 641.4254 274.5352 662.6268] +/Subtype/Link/A<> +>> endobj +4024 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 614.7347 186.2081 625.6386] +/Subtype /Link +/A << /S /GoTo /D (a00176) >> +>> endobj +4026 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 541.2703 183.1495 551.0484] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +4028 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.3051 441.6787 359.3784 452.5826] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4029 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.4596 412.0991 356.3884 423.0031] +/Subtype /Link +/A << /S /GoTo /D (a00140) >> +>> endobj +4030 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 261.938 213.038 272.842] +/Subtype /Link +/A << /S /GoTo /D (a00153_g41aa744caa46913b3b3aedb2a4e78546) >> +>> endobj +4031 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 224.1492 190.8907 235.0531] +/Subtype /Link +/A << /S /GoTo /D (a00085) >> +>> endobj +4032 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.3888 224.1492 268.6482 235.0531] +/Subtype /Link +/A << /S /GoTo /D (a00153_g69646a81a922033c5281445a71f8ffed) >> +>> endobj +4033 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.7197 210.0611 372.0849 219.9664] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4035 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 143.9152 217.4713 153.8429] +/Subtype /Link +/A << /S /GoTo /D (a00161_g029256bc17a12e1e86781887e11c0c7d) >> +>> endobj +4036 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.6302 105.1501 204.6385 116.0541] +/Subtype /Link +/A << /S /GoTo /D (a00161_gcff75c8c930abd6ff168e85373a4eb92) >> +>> endobj +4021 0 obj << +/D [4019 0 R /XYZ 90 757.9346 null] +>> endobj +1069 0 obj << +/D [4019 0 R /XYZ 90 739.9346 null] +>> endobj +290 0 obj << +/D [4019 0 R /XYZ 90 739.9346 null] +>> endobj +4022 0 obj << +/D [4019 0 R /XYZ 90 716.7484 null] +>> endobj +4025 0 obj << +/D [4019 0 R /XYZ 90 559.6875 null] +>> endobj +4027 0 obj << +/D [4019 0 R /XYZ 90 501.564 null] +>> endobj +4034 0 obj << +/D [4019 0 R /XYZ 90 161.3562 null] +>> endobj +4018 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4040 0 obj << +/Length 690 +/Filter /FlateDecode +>> +stream +x讠V薾�0茧+x�f袱H�9鰬� +穿oiP(秎 靛T矝骘�IU禿1@a棱c�3凰% 勧坅DKM崍Y�"F�8|仜炨 x7彯n�!��櫙 +ㄤ郎|�0I胃d擊邯v囩鎻n扈M就l�>[e�扞V,�!稍>物骎儞(厒Z怜栳憫%J綃&戜;寕1滌 哔F撷;�,騎�v�)棍暎脍簔s,噟_TC挋樗A�7o塂'岴稸j讹滣b q)F閆P�bj楻'たM鳄睪, O夒檙� 鱙 恜n禆P餅藑戸4h躪s1昙�犂򄧤撿XT葨v�.6ii[YY頚@?%殏釪N�]Q櫛豗躧搶$∕艒6躵L洡5Yk{焠稯棰N螼玥鍁m6榱厄蔵�迯桵鎝f砞歰軿,K�3�.症酚�玳E󒊇媋躸�9p�.�/謮R �%J VJ奏H�x}瓬�嬪旣 �P殉壑K^鋰~絧*パ�xT圽K婖qz騛�L⿸扟鈘�;�睌{X8錭対攺蠖)矧哠~慢枖彨栀mS庽m]�=%IB�U +�7 ob.微魏企5謨� 嗹AI鮛穥硈\倃oo叿礖鞤詺o�"+觾?�)髻7铌3铊:垒梋sq蜋韖栖[g5錼瞱W民�嚘j��^讀驗収~z 溺/m�慹ndstream +endobj +4039 0 obj << +/Type /Page +/Contents 4040 0 R +/Resources 4038 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 4043 0 R 4044 0 R 4045 0 R ] +>> endobj +4043 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 704.1539 179.6335 715.0578] +/Subtype /Link +/A << /S /GoTo /D (a00161_gb1fc692a2700b7a51517724364683f67) >> +>> endobj +4044 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 665.2996 173.556 676.2035] +/Subtype /Link +/A << /S /GoTo /D (a00161_g64807ba7c221ddf735572d05021539f2) >> +>> endobj +4045 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 652.3482 189.0379 663.2521] +/Subtype /Link +/A << /S /GoTo /D (a00161_gbc331f73107958428bf1c392ba19b6f4) >> +>> endobj +4041 0 obj << +/D [4039 0 R /XYZ 90 757.9346 null] +>> endobj +4042 0 obj << +/D [4039 0 R /XYZ 90 723.1038 null] +>> endobj +4038 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4048 0 obj << +/Length 1254 +/Filter /FlateDecode +>> +stream +x诃X]o�6}鳢� /� �6ら毜X桗�- +UVb!鹅Y龆钭颮e}Y2傲Ν脅/�%)B@�仴仏歑.Tm&4x瓶逳爘<晴�:噻配鷰倮珮 +OyD2`羈鵬 +R玩�2莣財t +�嵒dmt苣�!<$踭鰁q?y敞hKU�+p�L>}×蛰O(嶂揉/麬 X藗虳0��''縒q�y嚲罥帻�A�鎳莗春�!z6J�4茼搽C糔忝�:[烹5壼億専恺 �4NX 矆腏橤庆亨蘐� 旕o鉉垇杄衡,�';�,屆ks嗦8啥�1凫紕BY;罠 +F�B-褰轳爕�5�眲R幈$%TH橩鴌嗆敲j豢iseDs娩獓�>t牃h囹-啗2q囚et"q缔��%�$秕CG腦璟R嬊/乷齔擁{羧Vu贊萅@埐虙(#Y苤聞%�5湺 +斟o �婉款裰�砂$�yn�<袸㥮w詢4刢擛%掤R絳�.1忰轺鴜紺萧w�:u��"尷盝�裿濭峇w�9jRΠ>賡�#偲T +�#_%i�>.盢桘Uu妃粋.牸 �:Xri8概庻!p� +@v�'�3Y鮀鐷F=饀遰匲i1��.� 琻�8隮�%"(gw�:牤�V��8庰3c不�ky惐B嶑�`㏑M轜藃�rfZ溏眄馽2:q篚龡7镞}x� :妹⒊T0F {8jD铆EI!��泏譓�#T跰桐%孾Q"漿﹋顦Fn衢鬀pgI資空~玚d<鵰勛聋鐚验6Yv�1@陡羡豌荰t釼�p�3��c讉�{*┫丁;xf鲁毨RQT5拄為(荔::W"i`P��<擰\VOA潚wn� 咨?逖臧<�B髁7頶 �膀涋0~檬{F�*ZO3�9�?�@呔熆�?菨�w#悭詹�/�9 8endstream +endobj +4047 0 obj << +/Type /Page +/Contents 4048 0 R +/Resources 4046 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 3984 0 R +/Annots [ 4051 0 R 4052 0 R 4054 0 R 4056 0 R 4057 0 R 4058 0 R ] +>> endobj +4051 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4052 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 185.0921 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00177) >> +>> endobj +4054 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 516.2256 223.1601 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00162_gaa60ca995565b799bb958c806e933665) >> +>> endobj +4056 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 458.7707 172.998 469.3011] +/Subtype /Link +/A << /S /GoTo /D (a00162_g69b075ef7e4d7bcf5a903d3d75baac02) >> +>> endobj +4057 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 419.9164 176.8634 430.4468] +/Subtype /Link +/A << /S /GoTo /D (a00162_gd1f18f739da7703628c3663209463a0d) >> +>> endobj +4058 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 380.6885 180.1912 391.5925] +/Subtype /Link +/A << /S /GoTo /D (a00162_g86beee1f69d05b16022dfb430470e9ce) >> +>> endobj +4049 0 obj << +/D [4047 0 R /XYZ 90 757.9346 null] +>> endobj +1070 0 obj << +/D [4047 0 R /XYZ 90 739.9346 null] +>> endobj +294 0 obj << +/D [4047 0 R /XYZ 90 739.9346 null] +>> endobj +4050 0 obj << +/D [4047 0 R /XYZ 90 716.7484 null] +>> endobj +4053 0 obj << +/D [4047 0 R /XYZ 90 534.1992 null] +>> endobj +4055 0 obj << +/D [4047 0 R /XYZ 90 477.3471 null] +>> endobj +4046 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4062 0 obj << +/Length 1385 +/Filter /FlateDecode +>> +stream +x诃Y[o�6~鳢校 � 飾`�!K� z蒣[ 腂l俚錯莜摺$试扭}(e}:玢痒慓 I0�#壛� +芿曹Np�?繖慂�钕}里鲹玔j儗�2�(#H�%4筥}歫s*餿边瘖t摟抨旮N7串钴f洿}H颐岃i�/鞳\33%B途苓Mox�4撃缠6'+爗7翀-抔咐�C擁凷�.6搹擏M滉F衛a糜%�/酝椔魰7]傫K� 摤�d�(筸p獩鑸择o襜乂U舾屮3苩摙n宓@榟旽�6� 滞佹>�/m� b �0鲔 挓婖頿萃M0E奞N逘阐5!X!E�8G+盈酆ⅶ黫F�4�珚�=-)釲�z失~頠U +i噅u�)q�?=陬�谝л媗 ,�霪莑yD谴藚r�$�2\�障邭x?毻�藔桄D笎� +z叭浽*+螶呂r_q絁 +�DI$罤`V撤��5鎯��~�?0瘊{q-;缬. 蛻琄<噴ヮE畅褠�缙卍仴*�逓颔q`]偭刓\緘缾+$[髎涴3ア颋�0��T,/,�K傥屸�.[鮮C5 !(>脾�胚h秓s +K褢8T,烩栬n肀喇0&�伣T�厁^G烕钂壚�&挆L`恿疏sP虽璾韇擙Wo炮逤蠩b鄜;y榅蛬P�>椪 :QF陿z,甞/`H结紞zq醵r廞o楨/頨角bq惎@Z论 痢b�B镹馟蕳兇�誳攟}t@� z� (�~],-艇y毌.j檏h� �)髬R鍼W茅孒箚壐�dX�>, 錠蕤斲笹H9垄譥堶�)h鸸�痢b�5AR婲z+邋zqㄛA顆E鯹�6峩 f LI�2.w垌"[Bbd寲#-帷C杙0K廨a婆t稬徢�#璯嫐鏴G劓��:朻 +a璝�寧皠CF,崃B栶笃-咽=�a礁gK|; �&Q耫�水$4渧js��轥V�p剆6� +:d迟咣﨟[谩M'Z嘉^缹F旕堫+3q�7劝題X@鳝糛莘s徯}凟/頨骰S1�厉钑FP秉Z")ラT�5旓鰝cq �虆樚 !�4�(�踡澅7諣j[沈⒔�鹩c懑蒎&�9薟荤欌計綾�5臱鸖脲�1U韃!�9X躼^缾衤y泫y闫k�c�0媈艹聆囕v?`<� 齪*朹肵髇鮛觴󥟘彳舂慒裥!�8匕Y鯱Wf �*哸 q政富h*羃� 6 蔋d5�箺队�a璫a墝��>Q嚟(楑y撴閍Q竷nwj鴹芡垬炾 B���5e�WWcY�f*[q熮精穴~齘燒铪樻輮诳8j^}�醹s膃ndstream +endobj +4061 0 obj << +/Type /Page +/Contents 4062 0 R +/Resources 4060 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4065 0 R 4066 0 R 4068 0 R 4069 0 R 4070 0 R 4071 0 R 4072 0 R 4073 0 R ] +>> endobj +4065 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4066 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 185.6501 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00178) >> +>> endobj +4068 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 550.8716 172.998 561.402] +/Subtype /Link +/A << /S /GoTo /D (a00162_g69b075ef7e4d7bcf5a903d3d75baac02) >> +>> endobj +4069 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 512.0173 176.8634 522.5477] +/Subtype /Link +/A << /S /GoTo /D (a00162_gd1f18f739da7703628c3663209463a0d) >> +>> endobj +4070 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 472.7894 180.1912 483.6934] +/Subtype /Link +/A << /S /GoTo /D (a00162_g86beee1f69d05b16022dfb430470e9ce) >> +>> endobj +4071 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 433.9352 175.2098 444.8391] +/Subtype /Link +/A << /S /GoTo /D (a00162_g984c4a8b65a3cb35460b073a40568c25) >> +>> endobj +4072 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 395.0809 185.1725 405.9848] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf11c966b0e4f4ecaa73deb14bfb6830f) >> +>> endobj +4073 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 356.2266 188.49 367.1305] +/Subtype /Link +/A << /S /GoTo /D (a00162_g123c95a7bb55143cabba92446ce8f513) >> +>> endobj +4063 0 obj << +/D [4061 0 R /XYZ 90 757.9346 null] +>> endobj +1071 0 obj << +/D [4061 0 R /XYZ 90 739.9346 null] +>> endobj +298 0 obj << +/D [4061 0 R /XYZ 90 739.9346 null] +>> endobj +4064 0 obj << +/D [4061 0 R /XYZ 90 716.7484 null] +>> endobj +4067 0 obj << +/D [4061 0 R /XYZ 90 569.448 null] +>> endobj +4060 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4078 0 obj << +/Length 2227 +/Filter /FlateDecode +>> +stream +x诃[]o燮}庄� ǚ\7m�"i穳��*3盤YV跹��境$梌r棾Q驷湷sf朘/玩~剀压Q�8!鮸s?sO痣飃�=}绡b婪�/箾;�4左涨:俧Dq歧_L馘w\樑逭Opㄨ��架瞠骅琶鎟_硐塍鯽奎m鮶v疥h[UJh鍵�滮�澾偤�3J劤j�綪聹泱麢�"|偻尴~钼4'� r僑L銰�$佭�0<�5丸,q�+F)]�囉诅j矾畏釗l喢|W}瑤Kf諂S鵤6�qJ振!�><穄|耑�誽 乶蹌Uq{閭8"r羾瘼]纨]帝5诐_K� C�*B�5s-!円浍 �産TZ +�J腞�0蕀-妁D\蝫莋Cn�#8蒙;T�=N&詂礆}�&鸩�c设②潥2]�9態A乖W�'慾 �b謦6��槆�"籴妼l薔"{k慅哂vs"▍KG4�O[嘕鵾O䁖25v臫伞9�<駿�+凯 砃舳窟%阛~ ⑻5鉊i讵鳔師Z袒佝�繆/蓉熌蹶s(胵���謂@暼揾灉碔越$��圈�5羲韣郴苈◇扛l漕 癸�(r�0�!8蹙��}蜾鐝拏磯� 瀑^ �-*篱|茴?懟L$ M羒~摏9!�7怚! LO<陻供H黼V忂阞@n喲0IX��笿g6?t�2v�/軓叧=�/o蹜&銻� 悘wX罈d$q綄W飋>靪閨﹫⒅P%f�#漵�锌�:g矑D 牌M�樕V6c孡苰;揷� &魅屗H��7菧梢孤鳾P壸[l輅鴃駇蝏蓤栋��8`X賐�1�珥,巠'X�#焍1.#塠/WK'`灯[?冀y縻�7梢� h<� 剆M发/勬 缰�鸥�3<朗哻寫�8ogx�;琉�胵I軐岑�/%]|棶� 慭籅B牧1�}%,�8S腦j��樸Vvc�莥;莄� 庽颧8幩H鈌�攉7i僑�#k]菷�*揉�獆衲2x蝞X[钿篙�;朗vc寫�8ogw�;令�籷I軠蔺狩骓*睖Q"ヅ@!湴億垖崧:b蛒{G��6F鱤6N紟I薞鳂'8峩F网&澝础瞲fz%u?�2g把怳鋂+`X賑�12珥\巠'剀#熲3.#墰u:油0� +�瀺U愥坜騛6T蝞-�3萐W 漓安�cd7污�驨盎G>舗\F7c鱳on轤С7'���MG�*栲�脴腚�9�#�#廯1�;朗~c寫�8o鐆�;溜�縬I\/cu眭jl%�!e陨B":TA仧擴}\e[[�*� _1�:朗Vc寫�8ogu�;陵�玵I苋觎ts帬Y鑀z�<�d煫�3椸�0�9$/c3w般-滸Lá�荩�8ip8&-躢炧/產电n畭嵾鷸桫;雾沒簙喂掶-0轥{;`//麔邖晚�q蓧� +﹪�D��+c孞珥j"纨k砷鈇涭0葐凒r�=^_R懩瓀1齘閲?/踫�?"}熽B廯咼>�=Uts�>秢úw7�Ba贕d6鮝D� +榯]郷玚X��o看3~6喃]E压R-搿@賀沆cP晓砄a砾畗}��k%PI�"��)牌ow~騏捃B�X桂X徙糫崆煎嘛qO)|\E鞅�菄鸆Z�寀P|xo嶝蔭鰺Ⅳ盟 +�0�`灅碤� F# 辛紗煄踼�腈鉷\J胆�4艭瓵毭羡苗嬔嗰洭歓�$ 么$Z�=o�Vl�8 �0扌0=辀敏�'4LAE鞅a.缑%�0p7�#4 U夥歨 鸒�0憓誘轍L釥�;�mA辄+~|b Fh�,邆蚄JO觺�n�O觺饒gis竺�/朗�内珥�/�-穇弡J*捀鸦�尔蘎蚏"(諈,T夁rb銉霤麉L洫\e嗪U#w粟���`e�1迫u湻s=�-晦銥�:�"�痪>6胼.�7f,梾DTI偝��攳7l鬗^ +駲V��z�._今|u〾3轮�5鳢�绿暹W�>噖忻�?唭万K麉聆�>汊o_�/脱�%嚨瘫鶔䁖里��� 烵U�?㧐齃桛�-J鮡ndstream +endobj +4077 0 obj << +/Type /Page +/Contents 4078 0 R +/Resources 4076 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4081 0 R 4082 0 R 4084 0 R 4085 0 R 4086 0 R 4087 0 R 4088 0 R 4089 0 R 4090 0 R 4091 0 R 4092 0 R 4093 0 R 4094 0 R 4095 0 R 4096 0 R 4097 0 R 4099 0 R 4100 0 R 4101 0 R 4102 0 R 4103 0 R ] +>> endobj +4081 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 250.6249 659.9632] +/Subtype/Link/A<> +>> endobj +4082 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 611.4648 193.391 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00179) >> +>> endobj +4084 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 465.4097 176.5052 475.3374] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3212e70c55244608ac16316888c354f0) >> +>> endobj +4085 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 452.4583 176.4952 462.386] +/Subtype /Link +/A << /S /GoTo /D (a00162_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +4086 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 439.5069 224.8339 449.4346] +/Subtype /Link +/A << /S /GoTo /D (a00162_ge429c985be88ed048f382511c9ff00de) >> +>> endobj +4087 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 426.5554 198.4231 436.4831] +/Subtype /Link +/A << /S /GoTo /D (a00162_g19709735f29dafeabb91e0882231f9f1) >> +>> endobj +4088 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 413.604 206.5625 423.5317] +/Subtype /Link +/A << /S /GoTo /D (a00162_g7e904ab59f7ee134cf3218a8219e7e29) >> +>> endobj +4089 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 400.6526 211.4442 410.5803] +/Subtype /Link +/A << /S /GoTo /D (a00162_g5025948dd998f65a13a375a37aa5edf5) >> +>> endobj +4090 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 387.7011 196.052 397.6288] +/Subtype /Link +/A << /S /GoTo /D (a00162_gbfc1d8d15852318927cda30e1bc0470a) >> +>> endobj +4091 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 374.7497 209.3322 384.6774] +/Subtype /Link +/A << /S /GoTo /D (a00162_gaaaaf66ea67900c36d01136d5bad1168) >> +>> endobj +4092 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 361.7983 213.2175 371.726] +/Subtype /Link +/A << /S /GoTo /D (a00162_g57aca709a33690cd4fb73fe199fa1bdd) >> +>> endobj +4093 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 348.8469 207.0906 358.7745] +/Subtype /Link +/A << /S /GoTo /D (a00162_g8b600918f84783490fd791ce773175ab) >> +>> endobj +4094 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 335.8954 215.23 345.8231] +/Subtype /Link +/A << /S /GoTo /D (a00162_g6b2d00412304e2d95e7b853cce5858b0) >> +>> endobj +4095 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 322.944 220.1117 332.8717] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3318dec654781e9d6d8ec873636660c6) >> +>> endobj +4096 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 309.9926 204.7195 319.9202] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf784a76fe619452eddf87e6376a4bf9d) >> +>> endobj +4097 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 297.0411 217.9996 306.9688] +/Subtype /Link +/A << /S /GoTo /D (a00162_g3a4852e2372e34e1c0142d1147fbe027) >> +>> endobj +4099 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 239.2127 175.2098 250.1166] +/Subtype /Link +/A << /S /GoTo /D (a00162_g984c4a8b65a3cb35460b073a40568c25) >> +>> endobj +4100 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 200.3584 188.49 211.2623] +/Subtype /Link +/A << /S /GoTo /D (a00162_g123c95a7bb55143cabba92446ce8f513) >> +>> endobj +4101 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 161.5041 185.1725 172.408] +/Subtype /Link +/A << /S /GoTo /D (a00162_gf11c966b0e4f4ecaa73deb14bfb6830f) >> +>> endobj +4102 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 123.0234 181.2968 133.5537] +/Subtype /Link +/A << /S /GoTo /D (a00162_g82ff99d50221f7c17df57dc6092ffc97) >> +>> endobj +4103 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 109.6984 196.7787 120.6023] +/Subtype /Link +/A << /S /GoTo /D (a00162_g52c3c5ab1b1aa0659b5e465f7fbcc409) >> +>> endobj +4079 0 obj << +/D [4077 0 R /XYZ 90 757.9346 null] +>> endobj +1072 0 obj << +/D [4077 0 R /XYZ 90 739.9346 null] +>> endobj +302 0 obj << +/D [4077 0 R /XYZ 90 739.9346 null] +>> endobj +4080 0 obj << +/D [4077 0 R /XYZ 90 716.7484 null] +>> endobj +4083 0 obj << +/D [4077 0 R /XYZ 90 483.3834 null] +>> endobj +4098 0 obj << +/D [4077 0 R /XYZ 90 258.1626 null] +>> endobj +4076 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4107 0 obj << +/Length 1235 +/Filter /FlateDecode +>> +stream +x讠X[s贔}鏦h�x`橱嫥萤鞂]B輼<%唫l3罖A匡芬Jb錳�t9麧尺&抈鴳泥D � �2Y<鱬��?魣{=匃C痣戴顨毮 #㎜�yI悹�&渝椌F員帼|�;妓阴&蜄�?z*轢iq�)}H�Ⅺ閒a1苢�3�6巾]M+)Nー扻!蹙|蒙喏0bF嬩o噶�C撶К糦黝{Tq�y兌 纶{L8�'挫2� (壳��謊鑗A@�"'�ほ鳷�q�4汣j�.[m7.蠹眖琹S墓J纂⑤!���B鬛3賈 L碕$bk� }TX � ��鶤u.錼"庂觱唁 R寬8y卝a鱏@癇�0q姈�/缦.伹枉笼t}(H堊ZR臋�偵[�HU +i1隦嬜邠蜿7Ov佗E遏e懎�9叁灏Z�!mj≤ I祵ЛB咟祹囇,��-56劚闎R濸9J縝L70驞縸����(�$ 墲z鹙��0焲鸎o衎转;嵦� CaR諓熏�誆D充�%Q謷埶怐A69稀oW浥刬C氯s\矶� =�93g0巂<c}4湘E嘛除q�� 缧2� +�譁淽|@��0H4?疟黖)崛稉 �(c呹鈪賎)爰嚰�33皉0輅>_^%綤C�+!沢aッ|� 鉏(Q-j禰�0�4k5歬�(#娆�> bt�4:蕏2簝�4浩鹶閦恠�U~揠�%#坘eL摣閔鳋魃鮨|3�_M偐Y�j�$殠 +铡�*jgQ琢q涐R#�1?o��^潞 �1z喦y+脈轜^#嶀qA芾鹕鐝煮q�笩箆�狢�fΞ內6脜@孎}蘮囮v;B鐧%鯤_a迪�В歈瓎�7w乘换鳁鉸�.,鐦�妔S杩`礊魊併腷[鰱鍉H╧X[雩披/籺�>喘p霢皺觛 �D*u朒旕T#糴懺x尝焌�(D昲0GjwIhF韃� 熹�K�/ VpI1� T�.��&鰨砽背鍞+漞醸�缤竇狤EsS�$嚬�[揠鉬aO�%蓧]卧鶔�睊,a�%c鬔2蝃暏消c@q籞嘂O@"軕脀�鉃�>陞)愐攚$uI�R爦憜X�2pM诰鎼城T 駢�}枭婫C篓_��,�嚋N�襇簢後>瓟讖迮`rt7労|A�u熂`怅a@E�/n�7w�鹣鼯a薱篿η~卝上靠 Auendstream +endobj +4106 0 obj << +/Type /Page +/Contents 4107 0 R +/Resources 4105 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4110 0 R 4111 0 R 4113 0 R 4115 0 R 4116 0 R 4117 0 R 4119 0 R 4120 0 R 4122 0 R ] +>> endobj +4110 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 250.6249 659.9632] +/Subtype/Link/A<> +>> endobj +4111 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 611.4648 193.9489 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00180) >> +>> endobj +4113 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 535.9072 190.8904 545.8349] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +4115 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 479.055 271.1301 488.9827] +/Subtype /Link +/A << /S /GoTo /D (a00162_g26440a35353cb457747a4cea372c62e9) >> +>> endobj +4116 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 466.1036 280.5446 476.0313] +/Subtype /Link +/A << /S /GoTo /D (a00162_g30fe27cba3c14ae7f9a7f118144af43a) >> +>> endobj +4117 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 452.1759 213.038 463.0799] +/Subtype /Link +/A << /S /GoTo /D (a00162_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +4119 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 395.3237 198.6315 406.2277] +/Subtype /Link +/A << /S /GoTo /D (a00086) >> +>> endobj +4120 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.1296 395.3237 276.389 406.2277] +/Subtype /Link +/A << /S /GoTo /D (a00162_g4647b76d0ef50a5305505041f5775a37) >> +>> endobj +4122 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 338.4716 196.7787 349.3755] +/Subtype /Link +/A << /S /GoTo /D (a00162_g52c3c5ab1b1aa0659b5e465f7fbcc409) >> +>> endobj +4108 0 obj << +/D [4106 0 R /XYZ 90 757.9346 null] +>> endobj +1073 0 obj << +/D [4106 0 R /XYZ 90 739.9346 null] +>> endobj +306 0 obj << +/D [4106 0 R /XYZ 90 739.9346 null] +>> endobj +4109 0 obj << +/D [4106 0 R /XYZ 90 716.7484 null] +>> endobj +4112 0 obj << +/D [4106 0 R /XYZ 90 553.8809 null] +>> endobj +4114 0 obj << +/D [4106 0 R /XYZ 90 497.0287 null] +>> endobj +4118 0 obj << +/D [4106 0 R /XYZ 90 411.9902 null] +>> endobj +4121 0 obj << +/D [4106 0 R /XYZ 90 357.4215 null] +>> endobj +4105 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4126 0 obj << +/Length 2234 +/Filter /FlateDecode +>> +stream +x诘Z蹝�6}煰P%/颐 竉\[﹗2r2庬贊Qv挃K杊�*篖tI忑鷐�d僓眐啋�糸A恖D釓�e�R��+:�_�p弄煰狩�疠礻�軑q氹鸯�9俧Dq艷冲/c﹂錃;.跳t�/8Tt�-^Eyt砙�6碰8?畍凵o硹W覻M[㏑B3O�/垦�越饥D8獸�J榮|垂抃�氆嚝譹��'t N1�=:& |妹�8屩敚硠鄙5庣OO噊�*�-�+清�,赾�/�� 炽b�(黊KF淩gH茬圉BB蚆q淐暥獍丿濨� 悎拣q紅W乒�<瓔K捪v锼�乔J軓砓錜%縨哢�2kFZ�.-;30�(-��")p�9v鵿鸳沣n��('Fp哛谞�;N &T胩綔o灦縊隒橶脾�5'R(ē骙�HtC�3憨滁貅Q8�)�NH5隭s;甮焹�.A.H%嬢�-�峜毚�h�;夊|跶x滋唨鷸�zS麶)弋.宸譋扝e壭軒4�殦麿��>�>喁�:蘋鈠uq嵌揌%4洧)艀市а<=�yd!$3DsY骜胝v�>-5�_漋O漶+猴�(z�胝��魭岮饈q丨�躺H[I b渕碦+效p8頦�浔#拕驵4宽歐arp`紒塈H翷�*婥莈GjE E.�1爇栄0SXy夈 錦洘餫NAkT�势Q瓫糭/珣&銻� k戺鱕犁d$q綄�N葵眙挽盱鲺纛鏨襪 +娹 +囩eDp2矔 笘v侪噔矸;`vX辬�1�绛韼y剌 b7.#壽贷a6q.�0煃g渔菬^菥櫠� +蕡t氠i猀}� +猬6M}漸 眰炳:�XX�0屁p藓b�u� R笇$.Z?N熯L�扽枃Lr墽e4q菆�)塽Y�5,菠旆>`�X込�1�绛瓘yX� b=.#墜Z3�4|*h伓DJ欼R嵤ㄣ喡絔K�*3厒uBoD�,_cT8o]1飥"h�)\F-傦_�=L盂I屢OL嵤(鈖缒e[戣r�%�#�鍂眺 +暦\GIk�#�炃藽,G5矗z ~'崤九x.胶ss盨h珑�aU3]va-,岫は��\貌�3剂�o掬&��32捀壪w?%.3M4�螪嵤H� T│劗 �0 +V���-`VX辥�1�绛瓗yX� b5.#墰X蝟正gz�8.,亼*膓\F7q|z�铑S�i赊�7-Ca8灝曆�9嘐2s-泦� 詧錦鞕嶕L�貊L敎/�/�珔�,, 栫鰖*�-Q8p倚+1檫o晢�潅klGm錾泐p祛A7�4� \�",IL藳�-�窯1fX嬆hjXo嬙y 麓 TX鹹目罆�痑��b=傮諱鬄秶諊mx铕港籲儗5�%?!>'(壽l墽-~螪�2@~裤F%dp? 3� 靽嶕C�貊�9)纾韎螽�榫鄴p&?O[缻7&�,遨" +埖蝃稥�* 釂�4菢jq鼢B犁T$q浗摆総滔�.搰��)p襙Zy� N!戆^竊慛ˊ�;w�嗕|晋_�*�:=迩蚽yZζる峣只鱊! L+^�>椄匰樴覃綒8#禊}X�2�辴愨鰿�-鲶c榾脣牤昧K?濻鮼耜?}婆3^�5�)斟邀 W鉣5'く椏�^.�C懠V钸黝纫�D0 鏴ndstream +endobj +4125 0 obj << +/Type /Page +/Contents 4126 0 R +/Resources 4124 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4129 0 R 4130 0 R 4132 0 R 4133 0 R 4134 0 R 4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R ] +>> endobj +4129 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7782 274.5352 657.9796] +/Subtype/Link/A<> +>> endobj +4130 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.5548 205.0073 618.4014] +/Subtype /Link +/A << /S /GoTo /D (a00181) >> +>> endobj +4132 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 463.5277 255.0802 473.4554] +/Subtype /Link +/A << /S /GoTo /D (a00164_g31be289fd8ec3fe09b0088165d13976d) >> +>> endobj +4133 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 450.591 302.4923 460.5187] +/Subtype /Link +/A << /S /GoTo /D (a00164_g8714af98a550f10dc814db92b08d1b0d) >> +>> endobj +4134 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 437.6543 290.1386 447.582] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4357cec23abca29d2bb885803625a6a) >> +>> endobj +4135 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 424.7176 269.4366 434.6453] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4d457c50e6f2cef57167c3804ce8bf7c) >> +>> endobj +4136 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 411.7809 275.7527 421.7086] +/Subtype /Link +/A << /S /GoTo /D (a00164_g863c94b0ed4a76997e53a3ccd5d0b6c3) >> +>> endobj +4137 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 398.8442 230.8912 408.7719] +/Subtype /Link +/A << /S /GoTo /D (a00164_g40fb1fb2d990ce04ae9bbee275627c03) >> +>> endobj +4138 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 385.9075 217.6111 395.8352] +/Subtype /Link +/A << /S /GoTo /D (a00164_gda99954e0f6905091885934e86c278cc) >> +>> endobj +4139 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 372.9708 239.2498 382.8985] +/Subtype /Link +/A << /S /GoTo /D (a00164_gd895686859ae7d178d31be04eb0a1a97) >> +>> endobj +4140 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 360.0341 236.0418 369.9618] +/Subtype /Link +/A << /S /GoTo /D (a00164_g38af81a4c9884ce89803fc3e52383112) >> +>> endobj +4141 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 347.0974 176.5052 357.0251] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3212e70c55244608ac16316888c354f0) >> +>> endobj +4142 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 334.1607 176.4952 344.0884] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6cda47c85ce1b58b501b44ac9cccc50e) >> +>> endobj +4143 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 320.2477 190.8811 331.1517] +/Subtype /Link +/A << /S /GoTo /D (a00164_g71e1b022f7b7fa3a154f19372b239935) >> +>> endobj +4145 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 263.4235 226.5766 274.3275] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4433d3af16ea083a81576d0f18ba57c9) >> +>> endobj +4146 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 224.9723 221.0375 235.5026] +/Subtype /Link +/A << /S /GoTo /D (a00164_g41e616d3fcc17e0aabfe8ab45ef0d30f) >> +>> endobj +4147 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 186.1475 224.913 196.6778] +/Subtype /Link +/A << /S /GoTo /D (a00164_g0e0ea5f24b77f124ba33bcbc7ede5bfb) >> +>> endobj +4148 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 146.949 236.5493 157.853] +/Subtype /Link +/A << /S /GoTo /D (a00164_g2a939aa4fcffabbce1dc1f784a7e0ad3) >> +>> endobj +4149 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 108.4978 192.9132 119.0281] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3caacabb2fe1c71921e1a471719ccbd2) >> +>> endobj +4127 0 obj << +/D [4125 0 R /XYZ 90 757.9346 null] +>> endobj +1074 0 obj << +/D [4125 0 R /XYZ 90 739.9346 null] +>> endobj +310 0 obj << +/D [4125 0 R /XYZ 90 739.9346 null] +>> endobj +4128 0 obj << +/D [4125 0 R /XYZ 90 716.7484 null] +>> endobj +4131 0 obj << +/D [4125 0 R /XYZ 90 481.4867 null] +>> endobj +4144 0 obj << +/D [4125 0 R /XYZ 90 282.3587 null] +>> endobj +4124 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4153 0 obj << +/Length 834 +/Filter /FlateDecode +>> +stream +x诃VMO跕禁W鴺H�2;臊庳h應对7奝HL�l�h�}寝点b#鍚摈y骓蹤籴!袕�B-5�"R徕>�pE顥g�>k耷裂)谛2玃咇m锳q&慶//'唓>潯勆a{魷�,6�$蓓-秔毵隡猬嬩6骚躄抰Q尖(`�焇喷罥\玉l� �;讣俻I`�>�0n-嗺A劉z�?傦�稰~鹨�#愄蜳籱6@=0讓+�dV蜩皧剢姠�"�"a�Z﨑擼 8蠾(E豻豨U∑怛圷P�鱥�0芍薧lAh蝒'v睌�<姊散聫辫�-X� s截d郅G芞艷T(!#�({I儙� 乴�?w�悂V#9饬�&篸"!4腄E� hi諝接偵噐骵濎罴眡腆┬T/煌_�*{HRg}娿o枼i藏�獐,怔Mr\i獈ツH幾把o:锐懜U幏�>�*M朸┗y辌�0]嚦铰忨轾mg�*賣� f(1酲@#酫p&屟漜爘疍8:�3n|P満��A8P�+Il�+嚬硕粀�=�"G鮖9k~z~算尻�'��鑘X�5XP>C驪姼YN[o錞G�楻_!жcp� u!娢Q籍 5�]▎局韊>衒|浭<引Qf;c涗Ot蟵/掘孥_胃万謌n孜~墚覷�灊奈窸vw衮p嚀萈夎m:湴L肖3亦> endobj +4155 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 714.241 200.0962 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00164_g1d34be506a61db90dd7829117efdf8cf) >> +>> endobj +4156 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 675.0131 229.8943 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +4157 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.9163 675.0131 304.6036 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4158 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 636.1588 208.3951 647.0628] +/Subtype /Link +/A << /S /GoTo /D (a00164_g9e6d2864f390a4ba1ac60dc65e2b9815) >> +>> endobj +4154 0 obj << +/D [4152 0 R /XYZ 90 757.9346 null] +>> endobj +4151 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4161 0 obj << +/Length 2081 +/Filter /FlateDecode +>> +stream +x诃Z[�5~席罧"作K��hYJi傽碕3齿ㄙd丧�像岉x.�a'3熛w|矽煦IH佱�J(d椗阯倠wp q忕饇綴L<&0菻*嬇MmA$(∨ⅫmJ$澩LMO蟔隶繱俻s駆僵毇'徽楫�椙鮪;鹀馼騮h漌侷bI�滭�.J痤�#f�(䝼chq7釘�浬浬O罭鬆049A仞�Gp圍镼槶jf�侀岏tyx餡鮲礩�<蜽瓒;鬃誐禑=蔚!!�Q揁�-噭閦D蛽旮K� [uX碜�>h`圗拱v纔-Mm缁jYq=饂尒麋f鏽o轁� �*7噉F碄榟UHl\樍xz�魐共正藿磒掱o.朑w�<�0驴%官细橆�:o9B櫤灰?腑遁!e8鲕.袍拭�3Ζ摘Z↗t1J爈枇t:J.H�!虅父(Q#aC`,�(XvQ� &� 痏擹假E┩=bQ蕏殉踍擵豁禯過A響\0*�4TH`a:I�5�$�)� 皅殜� M貈�$�5%欁墀5�儲,霈�[5穋M�崷靸FS1謮珕�q攒I 癗bg埀?盥k +癸�"i7噅�辆l%dzQ楾�0mw鮅� ==,�9]:T^杇s)U&I�(#壹&c�1扡盒第鋛}W暬Sk媳荪SQ牬 擧$8飫~���4N媑pJ�5燚Fb%2陼鱧%��燚�=+逼V晚X塿Dk悝僼:珹��3ìg垂p邯�6j祊浨!]Bn/n嬾蹠O�>K-��XV绷�3糬�-蕃圮#4橊穝�慧m奨�6苪:晀傏�0倯:$v�襱d��J �裩r��Mk沔�o�-d� 垢� 籀J鬒n@麕庍6壿6%7烣赴*3jxN��nd0%�4on虥n媨宲觀綮v皖0�眈5墍束@!B袾剖�:喩三3F隺舱璣>9賘姿戗椪bz3#映r酕#輓guhguhgk宇栍闯�7�=C呌� 谡M�;犡�)成骵=趰T3鵌鬶Wg畇=*萛B宨R�4+��%鑊m雙絔骺4咹搸�e� G玽r�?X!堭�/�0�'瞴魺VS寙!$> +汢"*Qh{<飱觞踛[項a3��艑堥蓕�?畅�銍�=ゎ鰿c関�]��C#坑=冽]整亼螥旫 �9縠ndstream +endobj +4160 0 obj << +/Type /Page +/Contents 4161 0 R +/Resources 4159 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4074 0 R +/Annots [ 4164 0 R 4165 0 R 4167 0 R 4169 0 R 4170 0 R 4172 0 R 4173 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R ] +>> endobj +4164 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.5601 274.5352 659.7615] +/Subtype/Link/A<> +>> endobj +4165 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 611.1369 205.5653 619.9836] +/Subtype /Link +/A << /S /GoTo /D (a00182) >> +>> endobj +4167 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 517.644 202.5067 527.5717] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +4169 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 460.4808 309.3265 470.4085] +/Subtype /Link +/A << /S /GoTo /D (a00164_g5a5bfd7e9060903893481db90645187b) >> +>> endobj +4170 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 446.4691 213.038 457.373] +/Subtype /Link +/A << /S /GoTo /D (a00164_ge28f6cb60e86088d8886d0f804b4f37c) >> +>> endobj +4172 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 389.3059 210.2479 400.2098] +/Subtype /Link +/A << /S /GoTo /D (a00097) >> +>> endobj +4173 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [210.746 389.3059 288.0054 400.2098] +/Subtype /Link +/A << /S /GoTo /D (a00164_gdc5aec3587b2c55b714a6c2f37b56cba) >> +>> endobj +4175 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 332.5162 226.0986 343.0466] +/Subtype /Link +/A << /S /GoTo /D (a00164_gc4b119801e50cc1824498a1cdf9adc37) >> +>> endobj +4176 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [276.1106 332.5162 300.7979 343.0466] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4177 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 293.4938 220.0116 304.0242] +/Subtype /Link +/A << /S /GoTo /D (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) >> +>> endobj +4178 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 243.5125 215.05 254.0429] +/Subtype /Link +/A << /S /GoTo /D (a00164_g23705efb9077187881f094fc9be13bde) >> +>> endobj +4179 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 193.5312 209.501 204.0615] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) >> +>> endobj +4180 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 143.5499 205.0776 154.0802] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf8f12c820cc08da32aa62898bfc02db3) >> +>> endobj +4181 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 93.5686 192.9132 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00164_g3caacabb2fe1c71921e1a471719ccbd2) >> +>> endobj +4162 0 obj << +/D [4160 0 R /XYZ 90 757.9346 null] +>> endobj +1075 0 obj << +/D [4160 0 R /XYZ 90 739.9346 null] +>> endobj +314 0 obj << +/D [4160 0 R /XYZ 90 739.9346 null] +>> endobj +4163 0 obj << +/D [4160 0 R /XYZ 90 716.7106 null] +>> endobj +4166 0 obj << +/D [4160 0 R /XYZ 90 535.7017 null] +>> endobj +4168 0 obj << +/D [4160 0 R /XYZ 90 478.5385 null] +>> endobj +4171 0 obj << +/D [4160 0 R /XYZ 90 406.0564 null] +>> endobj +4174 0 obj << +/D [4160 0 R /XYZ 90 351.1766 null] +>> endobj +4159 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4185 0 obj << +/Length 1318 +/Filter /FlateDecode +>> +stream +x诘YMo�6禁W� 冕扶�6I h货m籜8禸单詵w淊鷰,姟$婽� r%>� 唣岶4$� Iiⅴ&)*Y�&4Y犴� 亻K溈�?�&W7,MR�*儆蓚"癲饵ta伴%擊b|跟�=.稕,/_Gd]线l禮=鷺=e�)構,_T�p 奜?项'�3帊VrU0O>}ι>烶耂#搊xA �)Kv義s睗�1侃'N淸礌�n扠﹄ez��&�夷��K�&W p掙�$ �.邤淁v蟑ァ\蹃*拒�#R騻ti糼@!獚I%柔凷E�/彳K8喱郌$VO芼?8|奍烒�hQ1� HJ昷�=鎳�*蠔5S嬽|邒BsB╅FQM鞼蟊艗徘忾侪鈗彩蕁(�b狹猓E�3��;i爳6$\輤�ú�5:﹣斪爾Uへ郤5f]�zk0敜涝X:>稙炤SzA}檠�)'妀嫜�"巠5�'ヲ鸤靟榄=铡SP� +9N'虐m��!��帚 +帍T玝9薽u��櫷~� -�<[敍挛攨E孩T冼+杒k�*o~<c酹腭癜蒞漐w{=砋.+着r奥)� 峺� +嚈#宩﹑璸玖@厠鴐*\孙�)�舊袤� 溉讹岷粥cQ綮峨赽[瞊0iJ 侣 q�(�華噝琷 A鼿F樷bH"( 烽> 旔蟲龋楎癬梥唢�;沊臮鳚� +N0靤呴7�-|,虨蓥曝m瘐趄滜;:Iぁ"L朇EⅷZ?摚迸廟"�猓C暖仢殗莚旧;诊犷嶷蕺诉觩夓柵寮礉隆�1筝`仈&%"5�H1(\�"�8XT0玖�`"~链鼅縛诹�L$虨荻`甓/燂蜨�*�呴r℉ ?k$嚧摝憵� +�侒q汃��8貭f> endobj +4187 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.012 702.9085 229.8943 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) >> +>> endobj +4188 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [279.9163 702.9085 304.6036 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4189 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 664.4278 200.0962 674.9582] +/Subtype /Link +/A << /S /GoTo /D (a00164_g1d34be506a61db90dd7829117efdf8cf) >> +>> endobj +4190 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 625.1999 208.3951 636.1039] +/Subtype /Link +/A << /S /GoTo /D (a00164_g9e6d2864f390a4ba1ac60dc65e2b9815) >> +>> endobj +4191 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 612.2485 226.5766 623.1524] +/Subtype /Link +/A << /S /GoTo /D (a00164_g4433d3af16ea083a81576d0f18ba57c9) >> +>> endobj +4192 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 573.7678 221.0375 584.2981] +/Subtype /Link +/A << /S /GoTo /D (a00164_g41e616d3fcc17e0aabfe8ab45ef0d30f) >> +>> endobj +4193 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0186 534.9135 224.913 545.4438] +/Subtype /Link +/A << /S /GoTo /D (a00164_g0e0ea5f24b77f124ba33bcbc7ede5bfb) >> +>> endobj +4194 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 495.6856 236.5493 506.5895] +/Subtype /Link +/A << /S /GoTo /D (a00164_g2a939aa4fcffabbce1dc1f784a7e0ad3) >> +>> endobj +4186 0 obj << +/D [4184 0 R /XYZ 90 757.9346 null] +>> endobj +4183 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4198 0 obj << +/Length 923 +/Filter /FlateDecode +>> +stream +x诘V遫�6~譥!t/鰞�;� �6d)朼磊谻[ �,跙l贀鋟w擠G栘x�0�)榛锞;弴1��釪%� +┿lA肌護"�?/棼b鴄蒈s5遵r�2hd�#彈�3詒距枊dvWZ*�!僴q_祢nuw萅l姚8旙O藝枨遒m疛 嵨�褔O疕軨LXb萧 �>抃鴩]�>z{骈>�∴妏t(结>户颟菸]輊q`�9揃Qe礦逳�& 36�#┹绉丿~撒賨({蚂�$喝jV鏲-\Z�/ы寶|舒�暓鋞帺�.�浪诰嗪_鱺7Q徥0A,盕` +D}�6=孑p�=~14l�勛�躴W‵B苅舁+瞌l�=胗�/覉�失�-魶⑻v�uM嶀诈8岔+g�~!啾>dOh惓M瓶�秠鸊":綟>=wJ澳殝s7�漥I抵阥U�6@$�)扒�&���煾�(7aut�9$#u�沙T� 礩!帝邿侍澀:p烰�-?�:Ζ�3弒鴳s5碓�v�3隁_簥-h}榉擤渲}��0.翈D|絪x�59� 9摼�3墪/玮尯鉁sj[ 珍��俵沄}%� ��+墇�磈石A_積骇�04�!C�#氄�"4d倐gM硹0N┼d杵2/�)~摋y�6~.��/~襦f漇����匸.ny?攔莪謘甪噡0歂瘡_桵>):7N掺7<墧!endstream +endobj +4197 0 obj << +/Type /Page +/Contents 4198 0 R +/Resources 4196 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4195 0 R +/Annots [ 4201 0 R 4202 0 R 4204 0 R ] +>> endobj +4201 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4202 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 202.2478 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00183) >> +>> endobj +4204 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.2447 427.1275 226.8757 438.0314] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge6f849e94cf6e214be8ffa9a548ecfcd) >> +>> endobj +4199 0 obj << +/D [4197 0 R /XYZ 90 757.9346 null] +>> endobj +1076 0 obj << +/D [4197 0 R /XYZ 90 739.9346 null] +>> endobj +318 0 obj << +/D [4197 0 R /XYZ 90 739.9346 null] +>> endobj +4200 0 obj << +/D [4197 0 R /XYZ 90 716.7484 null] +>> endobj +4203 0 obj << +/D [4197 0 R /XYZ 90 446.0774 null] +>> endobj +4196 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4208 0 obj << +/Length 1107 +/Filter /FlateDecode +>> +stream +x讠W]o�6}鳢�槞薿2唘鯍5k伄5皣�Y墠8vf呻{)懖,手�*J圇滬i�&��hb!裄藚J钵$zD)~煻客GW�&朮臫2刊,(J$�,�/>� 2e崎髎q�5�+蜉劼鴂�'遌,蓑y1�VdY惝V爰~鷲�;�鐩探�*9�2��>ody諕+闐�3�嶂蠕+.�PkY�4寚舲魆鬢cPm鑣^R揎=甙�>胔瓒�嗲軬焝2J瑪&胵1s #杂万2EK嬟�,/草旯\m7�o逄賟.刳芜円铌�(旉讜濟y�)筝絪$图鎒�.�3[绀�-# P��  �7�4mbj3�p�%亐惒��j備鹯馆]v�)0�9g�T{;n4褦藘祳~�>�7廢氉EuJ[�#侹j紫慣瓑盳uぶ�擆鬵Kv匮#[礶G枬�e�Z�yW �(f赠�5�锐貧��ェ0� �肓!g公f_堩妺") 醜%Q�钫籓�忶蠳繭�z�賣贲 � #Pb朗帎nj�>舵鑹�: +# &┢x +QA_�6賨坷蜺80^<垤�,_8n$訮�瓅粜灐膓 ?gi欀声X铞Y汞'Z�3�%5D'y趢緉T豍F�8屔x +俯壄w柋A 疋缘犜1oQy1s�?S躷極梑�i堨6嫢x洢雞づ*躢臔狦罳�1A�篓d�.硗磒' 靌�3檔`儥>藊若o若锼咓4"奾圏t�~HFd咨鴆>?粆}鲺oQ胅�"-菅P +bkU@�&}��'卹70霁&sA4螔&螼S爭芺O瞛鸫嵁$JH JT� +瀸@[s0��剳:VV�y禢w钅摵椾.�Z麿�-魤蘖i.攺鋾椩�;\<�;m罊辤`兘s栺�;肌w巟� �$�+��貛堄=餋r"籊rⅥa�m霹X4�r起酄乿r�頁-宾辏�8趢荺餈�=�%尟♂8辁隘哲齽�=A鬓�歪齁-�*B僛(g韟Wx+耞(I�"溨雦擄�2躑B'� 7�鱺A��.縟P��蜉> endobj +4211 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4212 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 202.8057 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00184) >> +>> endobj +4214 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 515.2493 197.5356 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00079) >> +>> endobj +4216 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 458.7707 232.9533 469.3011] +/Subtype /Link +/A << /S /GoTo /D (a00165_g1dbc635a2924806f42d7e3273a6a69b5) >> +>> endobj +4218 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.2447 375.6421 226.8757 386.546] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge6f849e94cf6e214be8ffa9a548ecfcd) >> +>> endobj +4209 0 obj << +/D [4207 0 R /XYZ 90 757.9346 null] +>> endobj +1077 0 obj << +/D [4207 0 R /XYZ 90 739.9346 null] +>> endobj +322 0 obj << +/D [4207 0 R /XYZ 90 739.9346 null] +>> endobj +4210 0 obj << +/D [4207 0 R /XYZ 90 716.7484 null] +>> endobj +4213 0 obj << +/D [4207 0 R /XYZ 90 534.1992 null] +>> endobj +4215 0 obj << +/D [4207 0 R /XYZ 90 477.3471 null] +>> endobj +4217 0 obj << +/D [4207 0 R /XYZ 90 394.592 null] +>> endobj +4206 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4222 0 obj << +/Length 1627 +/Filter /FlateDecode +>> +stream +x讠橸徾6呥�+勪舿0肊軅"h�,�m夷A� 胸�!忞%3榀铳$蕯H�*��>虹鑯祼dL鉒r�4薊都澿�緙=!硐s鴠� +~[L灱�:親 *才U]A�)≠b鮵J剺桐N�颼撱)A纲xUf肱蒡x[n拧痕叹.轑^.:�6g�涌'熆鈒檗L0bZ耢>`D处夙$~XO>L�4?�;��>:�#鴨诿床9:�熗 苮Zl符'麇寰芡烚0�暬'7嚸v厲勉}_^潥枦ei幏1"Hs^AU'#DZ�濉�Ju鍉公抖qP�9�暮l鰟�揅�鏢4l烩%3慍7sV4wUPa虪`0蟝鈞腹�=z�IFI芗S茌&,�$専霁舛m醧蠼娴�7-$馁[P�3Cм�/獢Hiㄙ徻=砙�;表佖聧鞺6 +堼刖Z钛�f」F�*o[齵頦3N�-I酓咇`�/�/覯U秃裊|况���*� q佦翩лu珁镡氟够C縒驻砱�0宧甚0膒鋂U授玣琎跙鯸蹔DB+蠹V>�6缩q硢��驯冖汫fosb7B67旀gンQ/�9纣卯赲' �3�3$店漼儺羪澝hk�� T梳L⒇ +焻f\楳4  s�蘨�腻>pU鼠趤灲V簜写$`fQ�1麭)鳔Cs-�9(曦㏑緋A覺埦镢U{y.悿� 滔煐V煀嵴51>,f毩2]键鰅F(�>縓\跊�(N樐灰�q犿HHqp;損�錣鞄 嗇室豤�龈o囕�伣g>{<哤7�桥粡 8i蒁�A(� ;嘔�剟��-鏆��b拉, <骅忹v繻�纚鎐�莄xuM寢o縨筑�G+漢�U�Jk=h~繣2\ 郌Q焽�b惌, 9骅@廂v怾�恵鎐 莄xu-潺禭�1鄟@‐'z`U)sM摐魍� 娃瘘S偀屐 +"�;Y抯择�9醟9鱸訙#8'bxu-缢bs韈枅P�'Z`U)o倛�7`唾 罴)嶱>�冘�#v猕iG�1豼�7歛X找輺籩�9x)4\:胥发劮逐垽x�栩]It酎[*W鉱ei�1G噋芊C禚巂�39毛隸V>e�(� V時7O簶 �t歪� G盶A 磿�衠�措;t蟶 鑨 痭wU^麤衪-T��(e�1"捝�5P� +Q啘孏灗\A尣暐)�蕅邘搽;俽蟶 鍃 ゼ糩与�* wU�XU受躿)>�~`艡�,鲯逭q�4o C/Y(傻:?栈側罔d杀u<崓劘=�3姧w�?肂74!|鄛~hX}*匴穥貔n椗z跛辺�*@$槩凍c巑+`;t�F<椾.剿扽~笛�.� LR�4endstream +endobj +4221 0 obj << +/Type /Page +/Contents 4222 0 R +/Resources 4220 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4195 0 R +/Annots [ 4225 0 R 4226 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4238 0 R 4239 0 R ] +>> endobj +4225 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 250.6249 659.9632] +/Subtype/Link/A<> +>> endobj +4226 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 186.7561 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00185) >> +>> endobj +4228 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 447.7854 224.1764 457.713] +/Subtype /Link +/A << /S /GoTo /D (a00165_g7d7920c1e51cc4eef80206ebd6fee3f4) >> +>> endobj +4229 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 434.8339 220.9585 444.7616] +/Subtype /Link +/A << /S /GoTo /D (a00165_g8a645f8831837320c4e0c704e871abcf) >> +>> endobj +4230 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 421.8825 176.5052 431.8102] +/Subtype /Link +/A << /S /GoTo /D (a00165_g3212e70c55244608ac16316888c354f0) >> +>> endobj +4231 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 407.9548 190.8811 418.8588] +/Subtype /Link +/A << /S /GoTo /D (a00165_g71e1b022f7b7fa3a154f19372b239935) >> +>> endobj +4232 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 395.0034 188.1217 405.9073] +/Subtype /Link +/A << /S /GoTo /D (a00165_ge3f8f7deae69854853b0c8ebb82c380d) >> +>> endobj +4233 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 382.052 198.0741 392.9559] +/Subtype /Link +/A << /S /GoTo /D (a00165_g79f9a50c2cccb967d38a2eeb45d2fd75) >> +>> endobj +4234 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 369.1005 194.2087 380.0045] +/Subtype /Link +/A << /S /GoTo /D (a00165_gf7dd2757d1e766f65b01ba7c91c660a0) >> +>> endobj +4235 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 357.1253 188.6793 367.053] +/Subtype /Link +/A << /S /GoTo /D (a00165_g820fb27c50e7bb4ac6d9eae1b06630a5) >> +>> endobj +4236 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 344.1739 190.8912 354.1016] +/Subtype /Link +/A << /S /GoTo /D (a00165_g14e276fa8e765f774f4162619f1c8fc1) >> +>> endobj +4238 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 286.3455 190.1438 297.2494] +/Subtype /Link +/A << /S /GoTo /D (a00165_g648ddfb2dde2cc55034e4e0ea41cb6d1) >> +>> endobj +4239 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 273.3941 174.6619 284.298] +/Subtype /Link +/A << /S /GoTo /D (a00165_gc364305cee969a0be43c071722b136e6) >> +>> endobj +4223 0 obj << +/D [4221 0 R /XYZ 90 757.9346 null] +>> endobj +1078 0 obj << +/D [4221 0 R /XYZ 90 739.9346 null] +>> endobj +326 0 obj << +/D [4221 0 R /XYZ 90 739.9346 null] +>> endobj +4224 0 obj << +/D [4221 0 R /XYZ 90 716.7484 null] +>> endobj +4227 0 obj << +/D [4221 0 R /XYZ 90 465.759 null] +>> endobj +4237 0 obj << +/D [4221 0 R /XYZ 90 305.2954 null] +>> endobj +4220 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4243 0 obj << +/Length 1440 +/Filter /FlateDecode +>> +stream +x诃X蹘�6}鱓閶 � 噖.姞 6 才m簅IPxmy-�/[傥&%Q朌Yt欣皱铚醦x4"$怷歨〾錌%笸�&xS�?m^邖^緀6蹦*籩翣�H,筟|j2e拵踪M汗�:&篁谯l潠G襡歄缹禹躚移�敒|净焦獵�"擻� 酂亚�4Y`�7#J�52y�J繸杔F俼��5�)o� T�)俉�*脩腈H佉�*幆$b�,�1蓭棛1亰�:=虗iQR]y�=草�"鈲筽<.\[蜍]|饉經?枃�5� +娾<��6輷n陯$孨7刏蕒鏏�&*,c ��$%THY鍙囌.筷jeDs免5狦綑牃h囹腣�/f�*磴�8]锼�4濾�.眧姧~ B諝玌'则鯿鈴~o勴熻 [5�榏3 }6邠}趰� K3j8m5*詏 G�砃lR�Γk�史�� B 瑕峒u騅�)墷.澄&z�:kX�1Q~U]l溗|"鋢穒�;樰2す衇便5�;铙鎆�##XVj)Q瓵硭�I荩b�郯籦w�鰹?腯呌�&娈w�釔�胫钰詽@z歁)�ō;豯鳻om�< 筐pU[`,2|強�孚+跧鹹夏0.春4 5>G�m7aB嬦4渊P居n�9Ze' x嫦 紡观a研y�>駻+f縄袏�!+霭r踑�#蘹�T�澍K�;钭遟沃V攎+巛巽#�yc�,8v[述OJ璤�"�!郯?iK鞥�3簋�姇J���?\�<68kna*锥魁 �:w銁梟�k瑲h棵u�n\u�`�?絙鼕羊孮Z頃/' �//O庯�ㄐ�轜鮱禁!輛3�6瘆h嶞�A�0^endstream +endobj +4242 0 obj << +/Type /Page +/Contents 4243 0 R +/Resources 4241 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4195 0 R +/Annots [ 4246 0 R 4247 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R ] +>> endobj +4246 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4247 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 190.781 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00187) >> +>> endobj +4249 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 515.6229 179.0853 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) >> +>> endobj +4250 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.5282 515.6229 265.4205 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.8984 500.6286 338.7573 510.5338] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 476.7686 192.6345 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +4253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [221.0774 476.7686 278.9697 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4254 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.8358 461.7743 391.6946 471.6795] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 437.5407 180.9085 448.4446] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +4256 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.3513 437.5407 267.2437 448.4446] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4257 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.2067 422.92 431.0655 432.8252] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4244 0 obj << +/D [4242 0 R /XYZ 90 757.9346 null] +>> endobj +1079 0 obj << +/D [4242 0 R /XYZ 90 739.9346 null] +>> endobj +330 0 obj << +/D [4242 0 R /XYZ 90 739.9346 null] +>> endobj +4245 0 obj << +/D [4242 0 R /XYZ 90 719.4886 null] +>> endobj +4248 0 obj << +/D [4242 0 R /XYZ 90 534.1992 null] +>> endobj +4241 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4261 0 obj << +/Length 1733 +/Filter /FlateDecode +>> +stream +x诃Y蹘�8}锆埬K反m|繝誮�埥兰B=��5}a�藒龞�8砟帩闸y槫sRU>.扦鲤G +� %2屗b節噔3bB毲sx>�O�'烻Sd$暸鮩eA$(∨蹶龜H=汼C櫄瀇��O 迈朋酽梭盾�~7鹸齤蜢亥m�LK潺G\籛寴癣�7ch睗p受蚮騨騡kP�� ,>:�麭蒺(孷眨訄ㄙ渀導涻兔m菇檘�Bψ4蠺*� 2�旜 癠� |$?�3麳釚4卒羶#崶_3す鸣��p皘��H蠖5囿�(�鶚*H�貚誂XZ� E嬍�ZKVBP�1d�B�> U'柉�'i薅N|�u�!S'i7划Nb- QTf嗭P9蘩毇嵼b[簻7潃贿澐�"皾/來 窜靶袔c扅脏箯感酂鋾癥潦鑻褄筞n�祯歮O硬l{粣庞{4�'囋FG°+*嚍KcYy糩赩4稜2 �.炶泑@bΥ办LI2^fJ喿蛿颳泯zvN�&D舾漇兿y豰;�5t�醠佪�6�4�祮瀂� 糢莌驢盕俽>6->鉍h7��.泄rFs[�朩W蟕J]蛹�;(怘�)l群忌f陈�<於rq{(猛W �;T嶾S򰡼篴諰b跨*96->鉍h7踤JD光�0川惥譶j&�0屝蘤粴X彊=観し~9RRL�X�=�朾潗�V飣?B��/臀殘樽觜|茳7q6Q[遁P 胓�谕�3g衜IOJ诉�2丹>S 褹�ハ擷1�1�0"態镴洹鱜鼴诋E�^磄蠆�U膞Q钍Z搈w蚌芣疾%rnnmG�=⑼�;臱6U8剣�&<⒖��� 庢頇箂蛬铱�3罨endstream +endobj +4260 0 obj << +/Type /Page +/Contents 4261 0 R +/Resources 4259 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4195 0 R +/Annots [ 4264 0 R 4265 0 R 4267 0 R 4269 0 R 4270 0 R 4271 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R ] +>> endobj +4264 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4265 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 191.339 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00188) >> +>> endobj +4267 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 551.4743 196.4299 561.402] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4269 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 494.0195 227.9818 504.5498] +/Subtype /Link +/A << /S /GoTo /D (a00159_ga680bc3f3a1a8a6aec20fe729d138cb8) >> +>> endobj +4270 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 481.068 223.0005 491.5984] +/Subtype /Link +/A << /S /GoTo /D (a00159_g720ac440c7b24bdd07c53ba146e36fb2) >> +>> endobj +4271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 468.1166 178.1689 478.6469] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4273 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 385.3616 179.0853 395.8919] +/Subtype /Link +/A << /S /GoTo /D (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) >> +>> endobj +4274 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.5282 385.3616 265.4205 395.8919] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4275 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.8984 370.3672 338.7573 380.2725] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4276 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 346.5073 192.6345 357.0376] +/Subtype /Link +/A << /S /GoTo /D (a00159_gfe5e93119035e14cc485760a176249ba) >> +>> endobj +4277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [221.0774 346.5073 278.9697 357.0376] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4278 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.8358 331.5129 391.6946 341.4182] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4279 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 307.2794 180.9085 318.1833] +/Subtype /Link +/A << /S /GoTo /D (a00159_gceb952d27de8125d5146ac0bee325b8f) >> +>> endobj +4280 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.3513 307.2794 267.2437 318.1833] +/Subtype /Link +/A << /S /GoTo /D (a00081) >> +>> endobj +4281 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.2067 292.6586 431.0655 302.5639] +/Subtype /Link +/A << /S /GoTo /D (a00159_gf31774d02a69fd3f1c2b282454438cba) >> +>> endobj +4262 0 obj << +/D [4260 0 R /XYZ 90 757.9346 null] +>> endobj +1080 0 obj << +/D [4260 0 R /XYZ 90 739.9346 null] +>> endobj +334 0 obj << +/D [4260 0 R /XYZ 90 739.9346 null] +>> endobj +4263 0 obj << +/D [4260 0 R /XYZ 90 719.4886 null] +>> endobj +4266 0 obj << +/D [4260 0 R /XYZ 90 569.448 null] +>> endobj +4268 0 obj << +/D [4260 0 R /XYZ 90 512.5958 null] +>> endobj +4272 0 obj << +/D [4260 0 R /XYZ 90 403.9379 null] +>> endobj +4259 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4285 0 obj << +/Length 1524 +/Filter /FlateDecode +>> +stream +x讠Xmo�6_!t@a3�憿�l薑�.-吨輻�TI秴蕭'赏奱�}蚀(K羻E熁�=w<yP�!/刕@焬駈綅榽1Czy)謼独/�-�� 3o祅#飙掲s_,1咉C犊茹e�$U}J�l章m枾j�&]д駓Z膔失 � W/g7m&% I+䴗��紻橕r 9�� ( 狈淁槝梶鰒鰗嚕� C轗D嗇E>3伉媴麃�.傪?�+淭�剶惰飧%8鍳t�4⺷贒)QP譱W倬墒B+*G�*溁�>Owi袲瓅 P3/�(W酶,毈8碆禋�誇Y豯�7项[7誎_樜|愔显�:崥C暈*菽1�橲塿:v団�凉<�6vY�>S��0`=S镇g蠈~堤6;蘤顿�4 f�Tgq 甏o 鯟�0g闱諭国Ow绚�杞D訞bQやj� 熛�逧"丛搆氾r鱲g瓥4镥�囿H�4�?捽中&垳xqu�#.w{懥曋�2泤w2]�" y枦拟綣,翊 ,�>纶_箆�1�!螷)再θ妽z輻Y绚昢|虤�┐栻サ^o謂嵥�UBn_I囕�庠+詚祻�&�yT�,敢鮃� +� 亪�n埼K!岯8邥�?9蕣uY碲爙+ 炞j瓟凍溴 )鉉G'韖H��(銈\淢鍾穋ioqs蒃�m沠yq!�8�糙\擡��0硸�.鵊k癿vy遧qB"?�ujv/�:�S砷 .B$. �4妸虾毞�$搶鷴%噧產隦囻勜P谰�,N�藑j臸 O拥�UVOv伎测�?w*�Q!qFjJ祪譃<ぐ�愇?貘A=^炕��# D寽%0F#6M�1�契v磅>�'薀B乹3\M�77o呓簈j��9?僋jB箣vJ倎`�9d>?lK`,谾l:豤璥忞韨m雧B癘�?%劂f8�:豲o�D}4qFjJ硟6愵壘��6W%厇衈V闡4r~�]*倉D]9�??亳�0闱q�6x巖步G�?O9K`宺Fl歳c-蕧腠(g雧錘�?卹鉬8笟r7噉�>qFjJ硟�� 摧��?�篛搕=詡�b熷�-0聫Nl��忺樞k鴔⒎Q~v?幚y�%叻vS H@蘔繝q?鼄P霈=O(#?e穬玓趪匹擑�)泩�掑C襠痣 +l郎讙亱-坄鹷 翤pN�Z'L-Q朐嫶H��Ⅴ� ^�/蝺~AX?�%&��7 !觃@驌葇額右@ ~�)�I孇Y蔬峣柱� R,邎endstream +endobj +4284 0 obj << +/Type /Page +/Contents 4285 0 R +/Resources 4283 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4288 0 R 4289 0 R 4290 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4297 0 R ] +>> endobj +4288 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4289 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [294.3312 566.4382 625.0908 576.7194] +/Subtype/Link/A<> +>> endobj +4290 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 532.6241 218.2873 541.4707] +/Subtype /Link +/A << /S /GoTo /D (a00190) >> +>> endobj +4292 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 474.0882 185.352 484.6185] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) >> +>> endobj +4293 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 461.1368 205.845 471.6671] +/Subtype /Link +/A << /S /GoTo /D (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) >> +>> endobj +4294 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 448.1853 183.1503 458.7157] +/Subtype /Link +/A << /S /GoTo /D (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) >> +>> endobj +4295 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 435.2339 185.91 445.7642] +/Subtype /Link +/A << /S /GoTo /D (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) >> +>> endobj +4297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.7556 378.0081 190.6918 388.9121] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2bdc4b7b4038454a79f1b2a94a6d2a98) >> +>> endobj +4286 0 obj << +/D [4284 0 R /XYZ 90 757.9346 null] +>> endobj +1081 0 obj << +/D [4284 0 R /XYZ 90 739.9346 null] +>> endobj +338 0 obj << +/D [4284 0 R /XYZ 90 739.9346 null] +>> endobj +4287 0 obj << +/D [4284 0 R /XYZ 90 716.7484 null] +>> endobj +4291 0 obj << +/D [4284 0 R /XYZ 90 492.6645 null] +>> endobj +4296 0 obj << +/D [4284 0 R /XYZ 90 394.6746 null] +>> endobj +4283 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4302 0 obj << +/Length 1578 +/Filter /FlateDecode +>> +stream +x讠X[o�6~鳢0皣�fx�%輪mI枝[嫮癜嚩0Y兜豓λ躟�摺H蚀(K�"旸~哚9i�1�d獗/|2顛爿徸悬zDt� 鷊读忬颜O4�(舁7灟j� A 蠗'那� )�'正*饎 琟~J穳z煌鈐楈栓L除趔鑞扌j�髨$齥赳3/粱�#孹堮>0"aH腔|lG_誕铓� 瑊v�#hzf氆�@3�岏煰恶�8糀涼?$�$煉`掛鉊NP! +Q#Cd%0 幦坔燠iヽ�q�>汬� qた÷惯=o揷dk�l�,幎�5析e函j5=F卆4珍>a佱忚6@桒礍 L毂�澄�m濯*� �F� QO韲)蠾�&睡圮S�3J�v;�'L裫鷈从 OS�'啥P !�鞶臋逭>q\鮹劸譺Uu?嵧巯栛fD囒烅秲,埨盹�4.P懘}�薒欐I臝�%S"&_�I\罐D阺U韈�>鍔l�9L L�$疉�$�镽縦?y凂鮐�g1[綥=1A��"d�A�W1@毊覍[I貴qi�#�儯q�<9�Q鷝4%�<�瑅详m欐I\n_訵�7�Ys瞖�Jf5隙銾\V�1*猉椱H筏鷶尻y谸�,]IY爁&>钀sK~�9釙m廦瀏uk#睮�)艙縎9?i笔碀z{Hwf貄��闈色l嵆<5頁硠>凨踺\w鞆�-L,r穽莶aI0l黍觋p8爔揊�Z� Dm緿Y綟沼�.z躛麡!伢C]�>a嗸悍瑀X焓梪\畮罖況穖蠔s�8嘮q:鏥慾�:f薢砮!bAㄤ{ 羣�w薚?e)橠圓�:⒃奕畖璵>貃幈熧:�Wzg0诘63&郳r闔籿�zM遥畠 瑍兩8偼溭丩�凋�视\x鰧it砬l�?庠凓霝鋺 +6過破j��!黾S薤杬�9鲪O}�"?/ c?鋯�+軽,~筜<�1靠y硏砐8騹茗泽"恋� r +孪g� a�b(C苐8C`_嗿y� 偌d鑴鼟 趸徉J7 ?黠镧�讌"`瑔�4U.瑣O=綰k� +y�'�渠爵k祺衁娠%mro慯恴淁捥鼹蠪誽�p黟;穌s� 铦}c韵靈uソ9誝��鑃��何�3�酎瓈m�'c6瑘>FK�&l� DqB~�*pp�.�:�EDp2c5撵� �豀钸�-�0濟`~Jz^朅�>屬�>�-}趔6y/星 �%w昧怔竰鄣]剟0VC�Z�><鰠喠>跬�>熂<'薲誹餭>C�g貅埬X j�(憕R�洿T3T雪嗲鹺o奙枟n�`z湓〕瞚帖]sP�/剠KO耡羟僫�藕蟸鴫'��u[�:�!纈喵y(鬉P05Fa牸r� <}U礮脧�<*蹢掞趟[y+S�B�_SvM鯀3咆So+蒈 �7訌/鎊�:qnゅU眖蛫�t>endstream +endobj +4301 0 obj << +/Type /Page +/Contents 4302 0 R +/Resources 4300 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4305 0 R 4306 0 R 4307 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4315 0 R ] +>> endobj +4305 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [89.0037 554.483 445.4449 564.3808] +/Subtype/Link/A<> +>> endobj +4307 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 538.2933 203.3535 547.1399] +/Subtype /Link +/A << /S /GoTo /D (a00191) >> +>> endobj +4309 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 480.3601 235.723 490.2877] +/Subtype /Link +/A << /S /GoTo /D (a00155_g44311ecc30759ca38b4069182247bdae) >> +>> endobj +4310 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 466.806 185.352 477.3363] +/Subtype /Link +/A << /S /GoTo /D (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) >> +>> endobj +4311 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 453.8545 205.845 464.3849] +/Subtype /Link +/A << /S /GoTo /D (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) >> +>> endobj +4312 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 440.9031 183.1503 451.4334] +/Subtype /Link +/A << /S /GoTo /D (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) >> +>> endobj +4313 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 427.9517 185.91 438.482] +/Subtype /Link +/A << /S /GoTo /D (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) >> +>> endobj +4315 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.1599 370.7259 224.0961 381.6298] +/Subtype /Link +/A << /S /GoTo /D (a00155_g3983e0c026396d5c4506779d770007ba) >> +>> endobj +4303 0 obj << +/D [4301 0 R /XYZ 90 757.9346 null] +>> endobj +1082 0 obj << +/D [4301 0 R /XYZ 90 739.9346 null] +>> endobj +342 0 obj << +/D [4301 0 R /XYZ 90 739.9346 null] +>> endobj +4304 0 obj << +/D [4301 0 R /XYZ 90 716.7484 null] +>> endobj +4308 0 obj << +/D [4301 0 R /XYZ 90 498.3337 null] +>> endobj +4314 0 obj << +/D [4301 0 R /XYZ 90 387.3924 null] +>> endobj +4300 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4319 0 obj << +/Length 637 +/Filter /FlateDecode +>> +stream +x讠UKo覢钧W�>x�3雧E*�( A森�П�8%N增叱k�&nl +�!鏇o;蚂坅D E �$蒞#扶�"澸x?峃涎C岲I朅H隭SdI妭呕蟒词椴蹪桿循畩E盜@荅澔#脥圓Ar3綄>L魑�6�%8卓㈦F鎂鉫�(7Z�籥孉矈2鋋SE撸o{烆�5 Q�2jO0�6f諒 md%P#DKi�Q()x页b;矻髱戡h騇y�-椎'饨�;'詔<熥觎騯�-胼�6�8籞PZ橸繖/园础宷�%�C�*y椄�.讻杀o嫛�#检|�褶�0Epq`k菹g+熆]}�媼�谐朒3.l嚧V�R暍赬午R浑;V焭矁艌l贄=`vfV鲔μ�荶03T/��鴲往3襜)園夦=趡p瘸�cX梞_秹.;�闍h�- 憖TH嬲猾铜荺跛餴違^М}搩Zr蔖�#莔P�;`s~┫_恳�尃l超E�*爰谕砑愽蔁Ty�<斲|I�'c�⺋qf]�蚩哾;榈5廄G.硇�:藹84蔈Q涃6 ┬_骡2稂��� 騃鳣 c瞇-駔憧縵4趵烵�%�焠孃8=n倧溏7駉偄endstream +endobj +4318 0 obj << +/Type /Page +/Contents 4319 0 R +/Resources 4317 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4322 0 R 4323 0 R ] +>> endobj +4322 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 250.6249 659.9632] +/Subtype/Link/A<> +>> endobj +4323 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 611.4648 174.0239 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00192) >> +>> endobj +4320 0 obj << +/D [4318 0 R /XYZ 90 757.9346 null] +>> endobj +1083 0 obj << +/D [4318 0 R /XYZ 90 739.9346 null] +>> endobj +346 0 obj << +/D [4318 0 R /XYZ 90 739.9346 null] +>> endobj +4321 0 obj << +/D [4318 0 R /XYZ 90 716.7484 null] +>> endobj +4317 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4327 0 obj << +/Length 2258 +/Filter /FlateDecode +>> +stream +x诃Z]s鄹}庄徐綡3�橬靌溳&[[}谳�(mkV朶塲汘鷁�$纕=~0%瀞q乻�!�)�?25x獎B唓9]?M痿緙?!晚躝剙7松铷�d$曈鍈� 斝閞笏�(:_PC櫄漮~咾乬狷廨vW訵W圂貤玶{叵[~榎/絣昤扻�N~� O7輫 F蘦1� +0"菩橛凷�>�&w摽{烔F魼_�a#򩅯廈kU�:�(�/苮v�>�饇:�G忀戚髋qN衄丿 鄹殨 #D� +Y丹L*蠆颱Q畝i愉�8瓘踘�% bA�-�*敩x~>蕛 iN瓞(k嗇鏊qu黇x,V�c�+P7鵝 L礆J��o_�h⑩痢 聵椑p亂咫9垷饲民UW沗��$-頠=阛vVH&.l朁f踉漩集3�;展%$xZR臋�T=蹒(T6慀v磉ь昵 l鱀O�2 ;b�� 炜灦�:軽(7HR-觟蟥X空饦完��-坧擳!I鑅a囍~[ �*盂}8洧T +�蠰%翋�:x{泺� n棉w枧抻�N梥kW迬RK�;�&-赼并ㄉ[孛 阖蜈遫麟輞5DB�晁峁D忂Y媵塌�譙hG�Q魈猏�=qW想騖W㏒O獟0bpZ}迵��/F�b問馾�=(�q �鶻(lF6菝s�謅媠X'&訊v爩j棲i魻[櫾H缕�5D'荜aV\浗}闁V碥,�5胘愚�5~�?镒v%1lp[F��`疳5*�IIi吾柗x@橋xZ讻<�狎桒洤脠x/F炕䎬O��槫撪Q鯓m仃 伥{|.倛71� 昔縂鍎#禶B呃�9杠鹍%鱆cJ燬暲联JP�7梡唌 {J疟x勐fH5w识柗m@槻mZ综6�a蹡�郐脠x鄱齶芳嵡/CX闷1�徥D� ZF:囲屚伹g#栩[�r�8頟9釄-邦�<J硌 +Vb淲Ct芦嘱j3垲匣茛,嶰埤猼驱鎣�0'b6鑖 +沶偷|7S)慥:诽霭瑳C聞�3何�-菁涆�#軠 #饨根请圩sB萳i螾?蓥纤夾g俦愂婫e娰铜�PllJ<>A梬熊 c�皮涱Q針-0鰿�/帿�畋W昭鯟音� C�i��2絻嬴捋垃浟釛壓菌�-{椷蜅甛渱嶝o巾6��(P厡柟搣�厐0U液�(労#夿K|LQH�馸娐蹮>輂荎d仒44�徥惹l肒s崵杬l<>A�7�/P�3Mwp臇蹕踋鋓v圢芰圯狒��(�K甠墓��&|櫋坠杣nH榩nF�9伐泈n[|剆3aD�甾^烤zc{�飠岉[蒤xT&垬mx}螑`3噜Y�kbq镽0斡韛n臇3/Q睾�3o圢樧矛?惶淑}馆u总q=�'钶�3蹞洿w籄o�Q约尫�LU污桏v@橋vZ讃;�犴桒o坸坜柩�aSY2晧!f�6L`Lp66 煃犓沺7F篓L�PN端,妥I�3�(3fづt殊6h耒七囍膤z.諿;j較|m顝珃.鞡v{胒囶紝� A宍濗簝褰炛鮚uGx�%>齐�0"迡庄�衜� 浗:﨧宩�)椁xT&殬mxB'H1=6炗锊&,荮笔篡�[nB71>r:縛No@瓀cv毗另�0~"吭�騫拯8鰑u� w榰秶骾�-|踗礎}o)擔W姙Db�戸q���sU 4> endobj +4330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.6594 250.6249 657.8608] +/Subtype/Link/A<> +>> endobj +4331 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.2769 190.0737 618.1808] +/Subtype /Link +/A << /S /GoTo /D (a00194) >> +>> endobj +4333 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 515.1065 181.8351 526.0104] +/Subtype /Link +/A << /S /GoTo /D (a00083) >> +>> endobj +4334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 502.1362 163.7728 513.0401] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4336 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 419.2928 204.7292 430.1968] +/Subtype /Link +/A << /S /GoTo /D (a00158_g26ae707402e494f3895a9f012a93ea29) >> +>> endobj +4337 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.0542 419.2928 231.2894 430.1968] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4338 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 380.401 215.2497 391.3049] +/Subtype /Link +/A << /S /GoTo /D (a00158_g84901a5aa60040e96d272a69977edd22) >> +>> endobj +4339 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [216.5747 380.401 241.8099 391.3049] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4340 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 341.5091 210.8263 352.413] +/Subtype /Link +/A << /S /GoTo /D (a00158_g70d236d1cf34b4e21836edda60247b70) >> +>> endobj +4341 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.1513 341.5091 237.3865 352.413] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4342 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 302.6172 234.079 313.5211] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb0ad55aa96dd1d200cd0fc5a99f6a4f7) >> +>> endobj +4343 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [235.404 302.6172 260.6392 313.5211] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4344 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 263.7253 274.846 274.6292] +/Subtype /Link +/A << /S /GoTo /D (a00158_g10d9a9201cba1a6db623284c475c6cea) >> +>> endobj +4345 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [276.171 263.7253 301.4062 274.6292] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4346 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 224.8334 216.3655 235.7373] +/Subtype /Link +/A << /S /GoTo /D (a00158_g5d56800f82bfc7bbf53bb4a659589812) >> +>> endobj +4347 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.6905 224.8334 242.9257 235.7373] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4348 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 185.9415 231.2097 196.8454] +/Subtype /Link +/A << /S /GoTo /D (a00158_gd895ab98c54d9966ff554aa873151751) >> +>> endobj +4349 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [232.5347 185.9415 257.7699 196.8454] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4350 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 147.0496 225.0331 157.9535] +/Subtype /Link +/A << /S /GoTo /D (a00158_gb5d9c0becf7cb32d0aaef466839dd92e) >> +>> endobj +4351 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.3581 147.0496 251.5933 157.9535] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4352 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 108.1577 229.4168 119.0617] +/Subtype /Link +/A << /S /GoTo /D (a00158_g4ab2de595d36e9e55dd61f6ecd139162) >> +>> endobj +4353 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.7417 108.1577 255.9769 119.0617] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4328 0 obj << +/D [4326 0 R /XYZ 90 757.9346 null] +>> endobj +1084 0 obj << +/D [4326 0 R /XYZ 90 739.9346 null] +>> endobj +350 0 obj << +/D [4326 0 R /XYZ 90 739.9346 null] +>> endobj +4329 0 obj << +/D [4326 0 R /XYZ 90 716.74 null] +>> endobj +4332 0 obj << +/D [4326 0 R /XYZ 90 534.0752 null] +>> endobj +4335 0 obj << +/D [4326 0 R /XYZ 90 438.2616 null] +>> endobj +4325 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4357 0 obj << +/Length 1660 +/Filter /FlateDecode +>> +stream +x诘Zk�7秊_1U�6�泖僶斴)PHEViv枍X毻轿匚d滖礫!懬溰s|晴匚哢恃�(C湊篫|殃=箭d穆�)\煻?蜦胃�q氹jv但�Q滖jv��&S鴑璃埘�筺�8[拊统W鮑綑0;甒 �栄啅�搘厂SY�驍刑��5�.A嬗%耏U}��0鐇鮭$箞/nF疓喀:蛥�帊RREi普e`f�9q娚恟趈沨祶QMぐ睯0呒窚玭匫q%獀羂UDa糒G�>潺霾~K)_�乖膒�:濑益}兰j藞xLFV姿x陪�/N?焨u�(蕌� 叞缯v艇婃紟XN�?酫莺^廖-�!哲"C�(�8�單騳譒tC9#�鄆絚W床喇孱秙W澼蹯栛&蹲! >m&R嵶�5td麻勓q烬~"轼�賌o&聦膣%�僾�0f探[ @-c'j靨羵�辢�^茇囦實热觐嶟嬜�-aV +%谁H(DC^逘V(X�v!酫莺謳(�42魣聢砵樈C8鏱樈坭偨坛?綴�[蠇�樥e螭鰲��hP減-潺D僷D繤I唨聝a_當 E� -�┬f +E 莳I句J�u叛'P�9课朕`藎�c魸獏E��+:�謓-4�$B蹃 �� �<鮅礁�7>靀箮V__ 蓢mq&垽庉徟)%R5[墥�貈m}B".o罦6o�瘗�edu鱒~倪繥曝x6q瀎6`睦A�B磀祕�/虷xT@穘魁洕迦�# +#为a 牞"� 3,阼B$豱p]+镬� 唶┥曾s筲r� p=6無6丝霕�!)�蔋戴J3場f跴垇Cc燷�o寔^<��"#弫7麝样焘风丑g荖�S霨B!B騤� mE拢 +簎鸆繮BF@m窎g裢b胶\n楇U1@稸NL�簲嬲紮8>炃睚輏患9皐�#$聉s匪寏汣�J正販sbd硊(�<聀浄 +杔^鍹6o�mn�笅.�;摋Et�篪歆W�-緬処耸軭(DH^涫⿻趬凣t膂涇R槤� �g闸系眸迴銞踌搌>}��;�0)ā KxDw^贩a�!筧 �g遮[�g{�嵻Sx󊲄呩綁xLbVw讻m苚Q�"3)�0脂ZlL楳~z缹歾�蝪D9刿M�.╂惞焠麕rW%葧_7涗� +0�5顽晤V �邵#�� +d�7③�BD'�%FPoa1勂�圃E軄�;�/槽 iX蓹,抒D:jpyv�3T^�熔亵耾謔闡&�B妍朠�鐖2佥儵x 麁E�$� Q\�{繥<�#痆8蔄$�&к�勈�"�#酛玭�8z�Y� k[纁C详�6籱獝F淯�;批攢欔�)�擱"吗�(1�7ro�泈q=咪鰢毛涠蜜o駡�du�嚌$嚸X炠)唘!�0 f�&擫~OmE�#:蚝�3]:"`�,?俽趲��g鴯呕藅\<娑� 喠8�嘍�覬�S� ;O�o�(D缈p ? + "夹'酹尢份飍~塐烔輂x義x�箈萯� +6m簓v�'鍅帊�/�酂_浨擋棷矬鮅1q�?�*騛!endstream +endobj +4356 0 obj << +/Type /Page +/Contents 4357 0 R +/Resources 4355 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R ] +>> endobj +4359 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 713.8674 207.4989 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00158_gfa11b2a1faf395ae2a6626e01c482d5d) >> +>> endobj +4360 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.8238 713.8674 234.059 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4361 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 675.0131 244.0317 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00158_gc7cc1dba1819f7fcdaa9ff9eed5a08f4) >> +>> endobj +4362 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [245.3566 675.0131 270.5918 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4363 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 636.1588 205.2872 647.0628] +/Subtype /Link +/A << /S /GoTo /D (a00158_g4a264bb64ae706d53f572b1d9e4037a2) >> +>> endobj +4364 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [206.6122 636.1588 231.8474 647.0628] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4365 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 597.3045 232.7343 608.2085] +/Subtype /Link +/A << /S /GoTo /D (a00158_g55ce98ea4d6f22e9d5068b904d4d2447) >> +>> endobj +4366 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [234.0593 597.3045 259.2945 608.2085] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4367 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 558.4502 244.4801 569.3542] +/Subtype /Link +/A << /S /GoTo /D (a00158_g2ebfe5c8a7f3173714efdf2df74fc392) >> +>> endobj +4368 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [245.805 558.4502 271.0402 569.3542] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4369 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.8747 519.5959 255.1444 530.4999] +/Subtype /Link +/A << /S /GoTo /D (a00158_ga87ff36af81990e6ffe20d76d5e4606f) >> +>> endobj +4370 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [256.4694 519.5959 281.7046 530.4999] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4371 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [432.9613 519.5959 458.1965 530.4999] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4372 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [474.7532 519.5959 484.4966 530.4999] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4374 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 450.7886 138.5977 461.6925] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4375 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 450.7886 198.084 461.6925] +/Subtype /Link +/A << /S /GoTo /D (a00158_g3178402dd725776415bf9745e7bf92ba) >> +>> endobj +4376 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [226.5269 450.7886 251.7621 461.6925] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4377 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [257.2416 450.7886 282.4768 461.6925] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4378 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.5466 437.8372 196.7092 448.7411] +/Subtype /Link +/A << /S /GoTo /D (a00158_g3b19f65e48079d8105be2a99b5b4b2ae) >> +>> endobj +4379 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.1521 437.8372 250.3873 448.7411] +/Subtype /Link +/A << /S /GoTo /D (a00082) >> +>> endobj +4358 0 obj << +/D [4356 0 R /XYZ 90 757.9346 null] +>> endobj +4373 0 obj << +/D [4356 0 R /XYZ 90 469.7385 null] +>> endobj +4355 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4382 0 obj << +/Length 1695 +/Filter /FlateDecode +>> +stream +x诃Y]徲F}席班%憵a�?PU� 勔匱<Bn廨嵢&勰タ咀銓=鰧K�>$�焥缥絞甤抈�#壛� +芿埠涏�|B戬琊<]N=�&1菻*撳u� 斝d箏?%娤嬖PΖkx+饠 \統顿f栈孆阾楉�4哽w硰藯撍e#[G%�$呰_擏q矄鑎N0bF嬩 |缊C摶 ~豊轓~ox�/� �'隷�﨏眚(琕U堃贉`導�輛W�&晃3ⅶ賜�+�( 2B敂怰F狳L塇Mz戝)0$e钦asoSD躺<餚亜やy}冂鰫ルcu額�5IF�,k�0�*�嵞傯嫒傛.石m� �8儓0+#z2� N斧M0E奞oP=阯&VH&蝜:将髕趠�<投�*弰8WK�8P)錟?z�*叴Q�j貂缒钧� 踍�秚闽構R鉬uD乾 �I猠8m 首o-躦+��)�9柌�騴�/�虞�,歇潢租�[/|"4b@�Sps]卂|u俯1o荦辐箋A晓{糆tesz� 酴呾D协;媻閦l�.�鑞鮘[F� 憸椚嚊輏{Z僸H椠�簘0�#*U礐i濾i~�NT偻鼻F�L洼�5杽扌S�燭� WQ琚燽儕閭,e[鱔SfN +�;拭Ee癖<蕺�<}�誠EVnQ=絾M酛罊P地㈣畉基g锠鋅#蓪躠蒯葆犫y�#簐嘯�讜x瘟%R昕->忌 勉-徱濮耪b�M 瀒"皑槾荲f 祀J8T�絰嫃F绣╬��Y稥臫=秡菽�8�宎渁d L巐O酻喙�.�N4↘^0嚂裧襐椪3\m�觠瑲罖 � 抌刌鸃 闋鸐�)償T�>hW埕悶腺tW張k�鲚�D4冾�钚愧�T<籆D缀CK7�m�� 勉a湾� o:� 芔F�9hPq熗.剿>ュ�s 5cpPl擗歵褋苅`缏�1u妔]�(GB幐R 鲌玫島Qm睋瘉舓�! 誺X珐mWwDm纺窃v8 彿�W�浓0彜愧b�坂裧耑櫻鴋]撖b�4�:碱Q踬bG5QeF}.:辛 涕啖/玽蚾�7�<=鋍;谵�7�.�/账鮥穜n韔涊M�_鼈j�批圾�I﹉�/X�/\聙_Dt璤磘銅���0<挹/.�.�e �I�E艛=夺Av� +>z�崰�;<(k%coQ1U�-�p搲)igp�+jT�*2;廅彛�2壈絻�爥$娙焠鳙��:�/�&�棄4��-�,E-"▁秷埉祱杗�"阝#,"喦[[幕鷇秉羟誶袷;d)C儔撗�"Q鴏CvA┈頓G妗罣#栩 孋 Y稥臫=禕鯂W杭G �� 莡爧H硙8僐箣-郾|w倝`蹓篂戋�7僃B8FK鮙f7$F柏铮 ,摒aㄡ煤M没�#�%>︶胊x糬每{眡u�7瀫 +�"湆壜gnx嵓-磠墡9嘮]"楿ud�郁�:�靣xe`#卉A嚭苈苪鶙坻q榉v�忓沔>0鎪)菒UR涁7?f.崲�!尯髨DF1]� nQ)�(怜饄端inG泚哽洍批O�B隬鼧睬磣�藪踺諏聽u∕詛瘙鏦�7欦Ka�$軉鎑開憾辬endstream +endobj +4381 0 obj << +/Type /Page +/Contents 4382 0 R +/Resources 4380 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4298 0 R +/Annots [ 4385 0 R 4386 0 R 4388 0 R 4390 0 R 4391 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R ] +>> endobj +4385 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 630.2193 250.6249 651.4207] +/Subtype/Link/A<> +>> endobj +4386 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 596.8117 174.5819 607.7156] +/Subtype /Link +/A << /S /GoTo /D (a00195) >> +>> endobj +4388 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 512.3371 148.2809 522.1152] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4390 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 445.4868 184.2462 456.3907] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge6bae7dc0225468c8a5ac269df549892) >> +>> endobj +4391 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [185.5712 445.4868 195.3146 456.3907] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4393 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 350.0315 204.7293 360.9354] +/Subtype /Link +/A << /S /GoTo /D (a00142_g3d4c8bd4aada659eb34f5d2ffd3e7901) >> +>> endobj +4394 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 305.7728 194.7667 316.6767] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) >> +>> endobj +4395 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [196.0917 305.7728 205.835 316.6767] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4396 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 261.5141 184.8042 272.418] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b04a0035bef29d905496c23bae066d2) >> +>> endobj +4397 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [186.1292 261.5141 195.8725 272.418] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4399 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 166.0587 223.997 176.9627] +/Subtype /Link +/A << /S /GoTo /D (a00142_g99e43010ec61327164466aa2d902de45) >> +>> endobj +4400 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.322 166.0587 235.0654 176.9627] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4401 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 121.8 226.2087 132.704] +/Subtype /Link +/A << /S /GoTo /D (a00142_gad14bbbf092b90aa0a5a4f9169504a8d) >> +>> endobj +4402 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.5337 121.8 237.2771 132.704] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4383 0 obj << +/D [4381 0 R /XYZ 90 757.9346 null] +>> endobj +1085 0 obj << +/D [4381 0 R /XYZ 90 739.9346 null] +>> endobj +354 0 obj << +/D [4381 0 R /XYZ 90 739.9346 null] +>> endobj +4384 0 obj << +/D [4381 0 R /XYZ 90 715.5325 null] +>> endobj +4387 0 obj << +/D [4381 0 R /XYZ 90 533.9892 null] +>> endobj +4389 0 obj << +/D [4381 0 R /XYZ 90 467.1389 null] +>> endobj +4392 0 obj << +/D [4381 0 R /XYZ 90 371.6836 null] +>> endobj +4398 0 obj << +/D [4381 0 R /XYZ 90 187.7108 null] +>> endobj +4380 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4406 0 obj << +/Length 1720 +/Filter /FlateDecode +>> +stream +x诃Z[o9}鏦 � H作丙�殾jB窄�*ba挔%惀Dm�特x�3嬺�'啭.>菫��2詘X�i棋pq?烂[篥賭�煒螼B莱汆� 獓iI錺vs� 斝醠鵴�ャ*痂q躔鋋忣猈/V氩布)wc錰a咭敧)镍箪誤:箐un侷b��|鼘嘖撱�FL+1黬^`D处名絏��8���*Q謁#!H A]懺診T5綷暬勁輏1_Wu=拶罘KWM窣 >~^e聜n,g婝(6漁擣�#攸,I鏏)酘c)�,薕覯1s� +Z�&除dw[C.�取真饁v齸L(潪袭g//Ё搗6𜰖觹馉tQ珻蟊�1〥�)曎囪[Q->"� 篵(郾,鍩誶7琾S>壸^亪�)b拝 t,� +{�yね阗z�涐�[�3�,�?疚W�6鸘-蝭鮧1&bt穁/絛筽抏厱l嵺�?}���鈽搕uuq�+!糤驲*�匘颽犼脌 �糔� ^X鳰� �iDqk韄�k::k�$K�欃鑱8DE�=1(�麃�虪穂睤萳�ㄛ� �((YF愐歡J6@�$隸n琰絉�4�"3�萁玸�4対T漼>_瘡粃餄剮崫Kn:璛�5剙�5xh I疲5嘉及54�3�H#婋�*灴淣藿炂;汙Lh烆侴魆4g7)璸��X鯱筤z佘Tz�� 1s��QH埲聾%�"x潏及垰�"覉庵"鷓>}=�7�(�h丆A躋逮Kr�鸣�;<楢;n�%9GTa澁郏�8戳2)S:驠\圢槅嘦�,鳤抆徶*頪{钼qW9莊�銝聞0J命�殭跪骀�h篎翏>咾):I�恌�9d螒s2噕訮套�.f绡%M昚娌0�J覩柄o�霍hf�蟹v垯偻搕�Q禸�7锥涗�4F恚碧3iNI篎�+瑚哯菨wS蟡口�7瓒 �c侴�7�1鯶H扽b��>DPE蛝U斟I�'t証煕亵贕H鴩噥抎<:离,ち {H�<肈�4⒏鞧u�g�)膛� 镹x�捣M橮�p专m�㏎;<�c0�4�u葲1�y唯觟Dq冔+覫祝猽衾�r� *4n鯙t �1�(!鼵�!;<�c0�4�r葲1�y螑觟Dq輴/&]3斗Z郟穀 E摏v蜆bい��R3v0x�)芵苅^?銗7c� 驕в堚咷縳述y状H7粒vk祖饩諀瞩�b蜬菹� H眶U∶JQ鎋aAB"]0寰 T'a�<+7錸�/隿�;菁q疾7S�b罯){Jq鯅b,隒謽毭援>A澘�晋=賬麀[n陧边c觇���1endstream +endobj +4405 0 obj << +/Type /Page +/Contents 4406 0 R +/Resources 4404 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4419 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R ] +>> endobj +4409 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 704.1539 234.5175 715.0578] +/Subtype /Link +/A << /S /GoTo /D (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) >> +>> endobj +4410 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [235.8425 704.1539 245.5859 715.0578] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4411 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 665.2996 197.387 676.2035] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) >> +>> endobj +4412 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.712 665.2996 208.4553 676.2035] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4414 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 582.5446 207.0905 593.4485] +/Subtype /Link +/A << /S /GoTo /D (a00142_gcd3ac045f0a4ae63412e3b3d8780e8ab) >> +>> endobj +4415 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.4154 582.5446 218.1588 593.4485] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4416 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 543.6903 187.0159 554.5942] +/Subtype /Link +/A << /S /GoTo /D (a00142_g905451249dca72ce0385bf2a9ff178ee) >> +>> endobj +4417 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.3408 543.6903 198.0842 554.5942] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4419 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 461.3088 216.3557 471.8392] +/Subtype /Link +/A << /S /GoTo /D (a00142_gfa82b860a64b67d25ab3abc21811896f) >> +>> endobj +4421 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 378.1802 194.2089 389.0841] +/Subtype /Link +/A << /S /GoTo /D (a00142_g155cba6121323726d02c00284428fed6) >> +>> endobj +4422 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.5338 378.1802 205.2772 389.0841] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4423 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 339.3259 229.068 350.2298] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge3c821e3a388615528efda9d23c7d115) >> +>> endobj +4424 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [230.393 339.3259 240.1363 350.2298] +/Subtype /Link +/A << /S /GoTo /D (a00084) >> +>> endobj +4426 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 257.5471 206.8414 267.4748] +/Subtype /Link +/A << /S /GoTo /D (a00142_g7b5319b5b65761a845fcd1500fde4cdc) >> +>> endobj +4427 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 244.5957 200.296 254.5234] +/Subtype /Link +/A << /S /GoTo /D (a00142_gcfae9053e5c107a1aed6b228c917d2ea) >> +>> endobj +4428 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 231.6442 198.0843 241.5719] +/Subtype /Link +/A << /S /GoTo /D (a00142_g9ff1e8936a8a26bff54c05f8a989b93b) >> +>> endobj +4429 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 218.6928 207.489 228.6205] +/Subtype /Link +/A << /S /GoTo /D (a00142_ge469332907e0617d72d5e2dd4297119d) >> +>> endobj +4407 0 obj << +/D [4405 0 R /XYZ 90 757.9346 null] +>> endobj +4408 0 obj << +/D [4405 0 R /XYZ 90 720.8203 null] +>> endobj +4413 0 obj << +/D [4405 0 R /XYZ 90 599.211 null] +>> endobj +4418 0 obj << +/D [4405 0 R /XYZ 90 477.6017 null] +>> endobj +4420 0 obj << +/D [4405 0 R /XYZ 90 394.8466 null] +>> endobj +4425 0 obj << +/D [4405 0 R /XYZ 90 275.5208 null] +>> endobj +4404 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4433 0 obj << +/Length 1429 +/Filter /FlateDecode +>> +stream +x诃X[o�6}鳢�榊~�3哴��0`k笾�++�_2Y铄唢�$什(SZ�!抲魙噰喾毁�fK琤*够�+( �K頥oS衘綻杚�%M佇驵缤氧.;l騧惮娸v顅銮]锥e%�佐抠埙4Y!慧%�檤�J繸杔f俼矠綑読.�7� N偪0?<啠胀� a|�Jiz(瀇V�&/鐇殥l8伦籪襹涘n凪i V屎4J�*3s,M�-~漌Kj攀鱕Y<{┌锿�郐屋溗存U呋.>査騥sRl炞y';阯$t⒏!訰>獨-p]K(錢KRB厰5穇鏗釶=钍玜o爩h� 藜C峵飇T \鞼薓a麆髺骐}�(@飊艌�譔}譕U瓑盳 �6棢鬢彾縞劧暧*;K司撒d��0a塨F舉隤a�搧囌\�烥��/尚└�:G)�鮆mV\貎4刢旸%掤柦籘>礃轺鳨�啈��:v峓f罸�"谜鏠S韮j�=ie霴鷬燪N!j��6[V$ +赤E掇eO漶吇吖絹�1h=�:�7\磏�7噈骀i?捑 攭诚�>`蘿 + d谋巏鴰1恨% Z-诒CM跖喽T┯緹鎸b鬎5,��>盔<~奅P穂|鰕� N�3!丟M5讉�瓦QI鱑y葌� U0\娦�'x剈�R犁瀽谄鑀acL+� +@鵋娽D�9_DUm�庩囀嘪晽笇d篭産M� hu鋒N0矘稷彯�!ib悮鮀廪�jk嶦�7yKi冱k7 )9G +�DX+悚ZN�0.嗉飬禗 +撅`摼�岠~鼾I逫邿鼍厉,偤G邨蟓厶� >汙!霣:�彴顈鐂續�1q:T伉赠�e靝鮁�/俭c�JE\f�>:b�孚慨G沌羌o禚餾Q=棝�M缩y鸎TE�嗷豞P�,7S鲼癷 +旗镗倏遷邺'�/�淓P髂铂苬�p�椓&荇��#��.⒚O�隖@f 小缕�坤訨膏� 躋ha蛥蠧�烂�琴�/鏐��蕆蝩�/敉匣b[澗x�*s悜�篏[j縊@P �7泹X@x豻@� +�"薹 垀_'瞻-舅Z衘婿|6x�仩�1曩\攜U驰�#*B 殺`侊椐贕褹j垢T�?�#�II�酑2:�6��6�C�18阩�t瑁#樾羂筇=藶Zc邚�試徦}s�;竅Ru8Z焝|W釰]d}N1'��娛亽隂>种鵤�喱�IQ玗斶'溼嶎�,� 傽79u^遨糪V��铘�?竨�:�'磊�魥�+謣昮敧6g�;蕻�3鼃��x隒|秜邠=禐J�m�$endstream +endobj +4432 0 obj << +/Type /Page +/Contents 4433 0 R +/Resources 4431 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4436 0 R 4437 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R ] +>> endobj +4436 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4437 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 186.7559 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00196) >> +>> endobj +4439 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 515.6229 172.9881 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +4440 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.4309 515.6229 224.4542 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4441 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 476.7686 180.7289 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +4442 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.1718 476.7686 232.195 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4443 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 437.9143 186.816 448.4446] +/Subtype /Link +/A << /S /GoTo /D (a00156_gcb807bd57e5489b386b876af5c1f163a) >> +>> endobj +4444 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.2588 437.9143 238.2821 448.4446] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4445 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 398.6864 184.6543 409.5903] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6d71dececfce707c668e6257aad5906e) >> +>> endobj +4446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.0971 398.6864 236.1204 409.5903] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4434 0 obj << +/D [4432 0 R /XYZ 90 757.9346 null] +>> endobj +1086 0 obj << +/D [4432 0 R /XYZ 90 739.9346 null] +>> endobj +358 0 obj << +/D [4432 0 R /XYZ 90 739.9346 null] +>> endobj +4435 0 obj << +/D [4432 0 R /XYZ 90 716.7484 null] +>> endobj +4438 0 obj << +/D [4432 0 R /XYZ 90 534.1992 null] +>> endobj +4431 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4450 0 obj << +/Length 1521 +/Filter /FlateDecode +>> +stream +x讠Y賻�6}鱓閶 � �%(�.�MQ燤�- 胖钠x飑,g^J��6槆裷t镝�=嚔L2 $38SB!酶�6 渳勊/そ絾鹝鹚礅閟j2儗�2唤�#H�%4惠綴jD鵭M^^鰪OCQ�芀磌�>�婃鑅qg镩eq茇KJk�$J菥\黺蹜h9 +&墺鹣馔;渕侂�F蘦憓�寛14{Xp受蒩駔駑ЧQ?06TA伉X Gp吅罵或� +{瘍�6� 2B浴⌒62兆袌戳o�*嘓�&訫q迶j:秮�76�%l�8�+&�5倜﨏櫁_洆]憃輱�覥亞底a&橣豟6Z9Z癝碅3�%0耚垰呦+�)疹T>�&�"�(�'颬#冽�瑦"L\U榉鵆[账�鎛Y蜯U 駷�q&�戋~�*叴Qr@倒}煿�?<陬�谝�D�r狚觵�91銪笰抝/[� +篦F躇i�5.$礏?X銶a;敫�.酤鑧\PI��(�$ 蘘鲻V偶颛哚#�牡�� +a;$�%b�綠d貆旿D抽Q[F伦艵$ +噬y嶞n�.[0 ~餯s8m钛钌剳0�輟訫^錗羅W錯S]:徃,8,耇晟暲�)L侶4科冰逺*Be[�9E3v═^0h儱扃=祝 23 觾逃礤�)A躪{ )H�蒭|饌!7� 毨脤J! �a�5絩8永Q驓#�/X噼`�淄旬]�,Q8[Mx璌(33箈鑞%絭)�W諾嬴捏藂c=b�/9�*�&D�%�2汃跅壖�/{y?�(^烐郯3M�鋷tf婳�鈜濝㘎�Q0G嗚D *昞q�5$��'吪淪p畽E桊 a躀yR +�誓 小履匊�)�8譺X蘁VP�(M�;F鮹#腾赀[+穩VE m$桖JI︳ +=�糢嫌珡巟G�_-秹�,�:�&襯"鼈坕輧�8鬤J�栔�0x轓鱺薮顊圭�>�"坽諁Y�*哓i�(侰ヒk夽$lP黫遨錌j2� >�#�;瓅F`郇u�*L躓>c鷟貆錽槰�1�+&鎵贕GD萘l鶺us4z�景朊消j7竰� +邭蛎欀H慆菃�-/B2拹K蔬�"瘬/oR�3錈`捻煽仕�`瘔Q�28T��4#� �1墾dn!:|侴7b +Q-t�*L<0pJ%虐3桛�丽ACg�噹�兊P非�軙+.枾�bs)�S蒜�>鹸�FY1齸漓���h�0>m懊RX洈A8X� 紑1儓珥 孪kK5L 颙苸 +瑙濚嘜鈄健灊/忹�璊脢f�-B JQ�狏w�歧枹�'x剄#� `C薎|�*L> endobj +4453 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4454 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 187.3139 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00197) >> +>> endobj +4456 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 534.931 161.5608 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4458 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 450.4922 172.9881 461.0226] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) >> +>> endobj +4459 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.4309 450.4922 224.4542 461.0226] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4460 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 411.6379 180.7289 422.1683] +/Subtype /Link +/A << /S /GoTo /D (a00156_gedaf3e48c2b04229b85455fb948468d6) >> +>> endobj +4461 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [209.1718 411.6379 232.195 422.1683] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4462 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 372.7836 186.816 383.314] +/Subtype /Link +/A << /S /GoTo /D (a00156_gcb807bd57e5489b386b876af5c1f163a) >> +>> endobj +4463 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.2588 372.7836 238.2821 383.314] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4464 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.9214 333.5557 184.6543 344.4597] +/Subtype /Link +/A << /S /GoTo /D (a00156_g6d71dececfce707c668e6257aad5906e) >> +>> endobj +4465 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.0971 333.5557 236.1204 344.4597] +/Subtype /Link +/A << /S /GoTo /D (a00087) >> +>> endobj +4451 0 obj << +/D [4449 0 R /XYZ 90 757.9346 null] +>> endobj +1087 0 obj << +/D [4449 0 R /XYZ 90 739.9346 null] +>> endobj +362 0 obj << +/D [4449 0 R /XYZ 90 739.9346 null] +>> endobj +4452 0 obj << +/D [4449 0 R /XYZ 90 716.7484 null] +>> endobj +4455 0 obj << +/D [4449 0 R /XYZ 90 551.8236 null] +>> endobj +4457 0 obj << +/D [4449 0 R /XYZ 90 469.0686 null] +>> endobj +4448 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4469 0 obj << +/Length 1547 +/Filter /FlateDecode +>> +stream +x讠Y[o�6}鳢�榊�/罰珻�":t�碋嘭J"谋2踛�繌枿P偫瞮魸蔑FR$�?��)a\f 晤徵臆灻鴠1y鬄毺 #┨wG � A ��/SⅣlN ejZ]~侹仹狷鈣鄙氆髍U=遨抿P斲俜耪鋌岩6�撃揀3 gkPw5翀-��#b 蜑&�2鱡3�<礢�8>048A仞�G� u茫0ZU廚#*fs�1濾朋鵁o筲盾袜�)Z�z澾錺OO箜*��2B烂杸�D庴K肫g鶁�+灊抢�a鞽荭秙�<,o楙FEyWn婍銃S畺淂���^�夙销篁觲Y_ucm筸@嚥鏲�/霃魂P�谢隣}僷媻閺]q萉?碄榟旾�6� 喴佹>*LVm� l �0忤﹚3餚钗S�%q�5李G坄�a馀趹~絴j鈁m!嫤鵩_菞飅Ig辕乀6J訾址3w鯂'�=1 [薞�d��/V{聪鸝(7HR-鉵kQ!g唷5��v�鍰8��涿�虔觤q瑳#嬫誉� ��+�$ �貊诸玖\w�繞�籚]a;H邲DBs钵эM嘕�璝x�:揇乕9?B_壅Σ�+津酰嘩謳mE�D樤�!et'﹞*燿8��籦{�,qHR�痦PB5m俼韨戯�!A4鈽蜓裳 U紕⒄�%麶a :崫牸-*� 3樍Rvy_瘺�鋅"E閼廹济v瓕忥Y\~�T儴12�嘕pSL �0雛獓鈧�~,� *���(i`忯匄7o誮给sq}y�9P牎h��%x ,�3^=R� 碨痫蔔C瞎F耯=� > � -,� Q茥tH鸷|桊~烸X�雬糰=铖刾鴶娎n3幂�猞�y8樴纈�0wE婮垹X#崣顓 燔譫(鬖 烧x毙;X:�1F/魆�6�>o:�頢BW� B�滐妑]勲仞H匛�-*!凴崍勍h7 '劅R$�0汜�别;X:�1F/黴�6�>o:�頢�W� 驴\耊05泟'ZTB�牍�.�濎�煝�:�0鲚M伧$LJ�G|�曗�栜Rw鵮�怯f�K鑚H佪+l諟鏀��蕥] �(%鉃iQ�聖癲� N/70谻Bk�6$V踃粈lS湅駐�b砺烈�"畦祴8o�.|辴昏p熞.�*籄ZT想�!|矦 敋壐3ZTB厊缞揯啔�>�u�#Z|RA遪瞚(� 聣thQ)~eK豻鵮顟膅桚啀飽|@$馵X2馽宮�&鹰}J澝u�%麜輶(群竤ZT(⒂瘓�3 韷p;乥�1q巽OK嘜�!�竌S枏誷 HCt錻G川� 殤�#暧PD5>�烺豈�'悻>妶z燛%�嘐�6λ璒E醞�8僥"咟_�*�棕钆��朷"譽滛酇{~猡X�騧緝庌�竁�菖諏坕諀!殆膅敐焰�膊9姼城瀹9t帣茚脃消<8^茬>^�囖endstream +endobj +4468 0 obj << +/Type /Page +/Contents 4469 0 R +/Resources 4467 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4472 0 R 4473 0 R 4476 0 R 4478 0 R 4481 0 R 4483 0 R 4485 0 R 4486 0 R 4487 0 R 4489 0 R 4490 0 R 4492 0 R 4493 0 R 4494 0 R ] +>> endobj +4472 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4473 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 217.1919 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00198) >> +>> endobj +4476 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 516.2256 200.2959 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00131_5320d4457a472d8888ec1905bc0e0a1c) >> +>> endobj +4478 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 504.3552 188.6795 513.2018] +/Subtype /Link +/A << /S /GoTo /D (a00131_5f2e1fcf0055d20ce17664b1027bb9eb) >> +>> endobj +4481 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 445.4457 207.3094 456.3496] +/Subtype /Link +/A << /S /GoTo /D (a00131_1273664aba3e6a2a46e87dcb1a5f19ad) >> +>> endobj +4483 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 432.4943 226.6668 443.3982] +/Subtype /Link +/A << /S /GoTo /D (a00131_890e822616a6839dfbf51dcb591b8e99) >> +>> endobj +4485 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 419.5428 208.4056 430.4468] +/Subtype /Link +/A << /S /GoTo /D (a00131_88460bea09a462d0e22511cb567eee14) >> +>> endobj +4486 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.2212 419.5428 265.1324 430.4468] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4487 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.295 419.5428 398.1028 430.4468] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4489 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 406.5914 220.5797 417.4953] +/Subtype /Link +/A << /S /GoTo /D (a00131_1d5ce7047650f3ecee0814dbc8714099) >> +>> endobj +4490 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [224.3954 406.5914 277.3066 417.4953] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4492 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 393.64 191.7182 404.5439] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.6883 393.64 287.4687 404.5439] +/Subtype /Link +/A << /S /GoTo /D (a00131_692d80636342d564422ccd9296ad568d) >> +>> endobj +4494 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [291.2843 393.64 344.1955 404.5439] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4470 0 obj << +/D [4468 0 R /XYZ 90 757.9346 null] +>> endobj +1088 0 obj << +/D [4468 0 R /XYZ 90 739.9346 null] +>> endobj +366 0 obj << +/D [4468 0 R /XYZ 90 739.9346 null] +>> endobj +4471 0 obj << +/D [4468 0 R /XYZ 90 716.7484 null] +>> endobj +4474 0 obj << +/D [4468 0 R /XYZ 90 534.1992 null] +>> endobj +4475 0 obj << +/D [4468 0 R /XYZ 90 534.1992 null] +>> endobj +4477 0 obj << +/D [4468 0 R /XYZ 90 520.2106 null] +>> endobj +4479 0 obj << +/D [4468 0 R /XYZ 90 464.3956 null] +>> endobj +4480 0 obj << +/D [4468 0 R /XYZ 90 464.3956 null] +>> endobj +4482 0 obj << +/D [4468 0 R /XYZ 90 449.4308 null] +>> endobj +4484 0 obj << +/D [4468 0 R /XYZ 90 436.4793 null] +>> endobj +4488 0 obj << +/D [4468 0 R /XYZ 90 423.5279 null] +>> endobj +4491 0 obj << +/D [4468 0 R /XYZ 90 410.5765 null] +>> endobj +4467 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4498 0 obj << +/Length 1405 +/Filter /FlateDecode +>> +stream +x讠X[o�6}鳢�榊^腫0 霅祂�]毞�[N�8r鍷箕鹽擧�e邑皱�;囘�R`�#吰呬iV奲�4僚=<~7!鲺尴C蜡7撟o�.4覀娾f軿qJhq锄4U垔贉r<=窒轙觚幂v7#O袰黩m僵韩雑]�;5瓪T +仹D曩棝o7^嫊蕶 F蛇揙_p�蒞寴V鉴7璱�4))s7浬巧_轓鳍齚l臏榜!��昶L�22岊?��1�9o理唨�D,莈uX�g瓴�/w躞∞6� �莺丑{礨qg尒映挹嚝臿q坟矍踰骰蛆f籠l簕7糊�6襸ф顊鼷W�隧蔤[4t豘pu牦躐p苜穙�?糥B矛Pa!楤Xc6S殗�8晻F3芭1�%绛宿虒旅胿w1�&�"�(I搟�{*�%拕�k-齤馾}l!潶說�殣鄈AQ�8dvO慣)懸R � w鮃 踼1"[劜#薋�d�帛梴疮哯h⿷燡ぽ鍽1o啾5��驢-� w&)��兗琇!4u[@毽W COr�X)翀cf諞W粄嫻蔑痼饍戰Gv嵑^/彳磼�7堾氣@闲�昋[3*愼﹁y�:揇俒瞬咡P7送褦紑V� +簦嘩':+Te讬.●tn�x�桺{軓�缐0赇�脐L@┄蚺庒�L)忞鄞`(�$鍃a裍�>锞m奶4LtL 極'櫭�4Dvm捿�$籡琕�8歉機H�5"�zCL恇Z袋o復覕遆癒�憠誌H勖擦N2�;秒傒泯:�0┲�8軃&��岫鴾娙n�:_np#尋]酫+�0鋅?榗��&c�Q疏樾�T�,�c�4�}葲}忹溞Dv�*=幖D%�OxTF5��w�(慻焕鉺魬]鐐t观8�蘃f�綜屮岘0]扒遯螶<祴珩寛j豐濋徬垔頌50-O{疲b� Eh槅填i�槏,� �q [mT秽nI溟vR砺硫�"�磱4痮!o綸舾蟟i戄(-幭�9��B�O;茫22(�藪 㟼(,64蝨勄g 韋泦4� 韦僄屮-鳖體堙磕堁郇6�@*�,燌 F_畽膖i烻缢#T楉WDc$!胍务╔D痏mf:狷U臜≧ xOД胓�蹗馨賜徬� 褧碙;拢r2攤k�2�;b�>5ET狍狃9戄\}矑u莯IxT啛��?]烼挛^橛�R蹰`L1S氉W^葲煒z茜LLi戄(駸玗絔账�)BH逃铕▽J"�,渮a萶c$A( 鰤噔漡�)ぐ賸裵�-悥半睬誚勓j�L弼陶{.甪凮忲哖麐/(粻富僾d弚�3失铘��匊簵�具W托=姘}�?�F$Y蚭ndstream +endobj +4497 0 obj << +/Type /Page +/Contents 4498 0 R +/Resources 4496 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4501 0 R 4502 0 R 4504 0 R 4507 0 R 4509 0 R 4510 0 R 4511 0 R 4513 0 R 4514 0 R 4516 0 R 4517 0 R 4518 0 R 4520 0 R ] +>> endobj +4501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 217.7498 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00199) >> +>> endobj +4504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 532.8737 216.3454 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 476.0215 207.3094 486.9254] +/Subtype /Link +/A << /S /GoTo /D (a00132_1273664aba3e6a2a46e87dcb1a5f19ad) >> +>> endobj +4509 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 463.0701 208.4056 473.974] +/Subtype /Link +/A << /S /GoTo /D (a00132_88460bea09a462d0e22511cb567eee14) >> +>> endobj +4510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.2212 463.0701 265.1324 473.974] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [320.295 463.0701 398.1028 473.974] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4513 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 450.1186 220.5797 461.0226] +/Subtype /Link +/A << /S /GoTo /D (a00132_1d5ce7047650f3ecee0814dbc8714099) >> +>> endobj +4514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [224.3954 450.1186 277.3066 461.0226] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4516 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 437.1672 191.7182 448.0711] +/Subtype /Link +/A << /S /GoTo /D (a00092) >> +>> endobj +4517 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.6883 437.1672 287.4687 448.0711] +/Subtype /Link +/A << /S /GoTo /D (a00132_692d80636342d564422ccd9296ad568d) >> +>> endobj +4518 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [291.2843 437.1672 344.1955 448.0711] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 424.2158 226.6668 435.1197] +/Subtype /Link +/A << /S /GoTo /D (a00132_890e822616a6839dfbf51dcb591b8e99) >> +>> endobj +4499 0 obj << +/D [4497 0 R /XYZ 90 757.9346 null] +>> endobj +1111 0 obj << +/D [4497 0 R /XYZ 90 739.9346 null] +>> endobj +370 0 obj << +/D [4497 0 R /XYZ 90 739.9346 null] +>> endobj +4500 0 obj << +/D [4497 0 R /XYZ 90 716.7484 null] +>> endobj +4503 0 obj << +/D [4497 0 R /XYZ 90 551.8236 null] +>> endobj +4505 0 obj << +/D [4497 0 R /XYZ 90 494.9714 null] +>> endobj +4506 0 obj << +/D [4497 0 R /XYZ 90 494.9714 null] +>> endobj +4508 0 obj << +/D [4497 0 R /XYZ 90 480.0066 null] +>> endobj +4512 0 obj << +/D [4497 0 R /XYZ 90 467.0551 null] +>> endobj +4515 0 obj << +/D [4497 0 R /XYZ 90 454.1037 null] +>> endobj +4519 0 obj << +/D [4497 0 R /XYZ 90 441.1523 null] +>> endobj +4496 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4524 0 obj << +/Length 902 +/Filter /FlateDecode +>> +stream +x讠VKo�8倦W�(奈�"E嬇禡虞�) +誚《涞箫;擧G�绨掆饹忬鈆魢0�3"U醶@弗蟧t� �'c乄�7Fq畁{匧r溽j�%B q� Y札髞�"d0L]1�.雞�/�6o撕娍�7珦Z荍 +匳榭翖�n堓uL-脽�喥餻.�|<� 齺ニI朔脭�畀情顿p;蛒'QW^�/i徊ew� ~*n媍�:*猽a/8 #3R鋈dY 条2C噠Y�9!m湱奻},轗$F�8柉p拮浳s腑徝ょ貣誺X謁�*縵碥�1蔴k菀 _蔶蹮1�1穚cs堽��暌A祑N螃劐鳛��8呰�;/r磔絛榦鶳`覺袙�,TB30 =閰挶�狌�7构珇X3籪p3忤粹,掆�?跚宩�1m25�:l�輬�?盄[峣蠍-r\7�)xj樷Z�7跧j��雅鏷V�� 檺狋悢K掆罦^7�*y睁鹡�侾B吚$寝n種嬗佚^>Xp� 撞W�)C釟歭Bd}^�9�34珵-U&奾�)RFy5T柅甖[#6 錤J翑D|� ,㈣珠嶶x霉湩き檾g5灓炗K曓�R忰瀓赥7Y� 蕢瞌#盟?莃嗠"鉡擗\踨9�2茀早-q抸�稥尗 �愢瑼s渰冝,z(%'# + N創眛螪B▔塉{k蝎櫻爾蛇y雕�賑[�矯径 囈�6霫嶵睺嬻臫*��%�� 昑��5閾B�|黊)j5劧v��.$CZ3�-樂㧐�斫焅矍磗 鋘� ..鸽�("攌b.#�"虥碉骶U鹵�-fM氻�<祽晘`綣廵ndstream +endobj +4523 0 obj << +/Type /Page +/Contents 4524 0 R +/Resources 4522 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4430 0 R +/Annots [ 4527 0 R 4528 0 R 4530 0 R ] +>> endobj +4527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 250.6249 657.906] +/Subtype/Link/A<> +>> endobj +4528 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 200.0459 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00201) >> +>> endobj +4530 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 550.498 201.2321 561.402] +/Subtype /Link +/A << /S /GoTo /D (a00154_gb4b17aaf20d630f30919b19937b966a3) >> +>> endobj +4525 0 obj << +/D [4523 0 R /XYZ 90 757.9346 null] +>> endobj +1112 0 obj << +/D [4523 0 R /XYZ 90 739.9346 null] +>> endobj +374 0 obj << +/D [4523 0 R /XYZ 90 739.9346 null] +>> endobj +4526 0 obj << +/D [4523 0 R /XYZ 90 716.7484 null] +>> endobj +4529 0 obj << +/D [4523 0 R /XYZ 90 569.448 null] +>> endobj +4522 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4534 0 obj << +/Length 2879 +/Filter /FlateDecode +>> +stream +x讠渕o7沁鸖-p恀樶抿)(奒l賟庳>[9燞習曍hb昆唼f�%=\��;id颻鬅�9K�6�墘��-螵1撜�>��>�葆]8緥�;/x鎹4撆鏜#槚BNWI7蹠歄焠究�?l谍襦骐z|齳}?n壕]悼rNpb鰅駐g緢頬rZ褄�刁�焅A抩w8S揲��蝿鱮騧*u鏱鏮1析梨 C绋�>I�0鴯 g)幛->I羪鮕漏mc +娴弈勔*� 桵屔Du齲 懏丁鲎涳�7w穄 �@�梛gq�%餿t秨必;{^?<^芫\輂璝挎" g'FΦ皟 噯髮s��47~撧玒涄沲蔟司粪扽%mU罡,俒f呉涎6鯳椷孩>蔺9|湖-�栎F睩i7泈龗-s逇^�N芦w(眇巵� N;嬡&p i�� +2唋訇頪?i�玳褽U濩r騳�6嘷妻畃!$L�躝�喂冀賹豈祇嚎圻]g逶�)#菽p鞋讦���襥务鷀鼏�1惻m驰N讓▋殃{羟^'*裒c诞�+喗牒x�2#烩齶s机鷗池@'亡鐾鞮� +請痤鹀� 杭糭]椩袏Y飹壯;)榲 4嚟噌颃骣 �堅繞�<j�0�=葱j\碨xx�� 宂-u靔啂� 愚51J膂粩:oU�& 齺矉)\g<7&1�;翘箒1%璈澢gJ�r鐶輸ym�梘鏕'媰H蝑#� m邚�);�� � + B6j2P攦瑢檙D渋�鸙怤蘫P觟dq7藛匠辶袸杽3按餗�AU矄~�%颵�|恟鍜穆 (蔄V9"蚀o}+('�5旈4哺侐舘斸嵓駞 +U哨KXm隵��� k�.銛憖�de蕯#鸉守穫rb^C橬#�(焈,r拾切B*T%k厢Bk媚(7C擡� �� +S�e�7R凭��蕋Y蹳馔8e�蠑i際[e7D� Ν&_H@Q�2e�Q#e靃A91L� 擾�>輠�%l寪�*U赊+&窲甍�@+g檺趲偲t�A搸蠣 �t鈁潥W�.� �?�鎼銈籅偑d �5绞�r惒曁伛�:N1頣e膭"L欶廊磦/vK嫘�囝-巼z吊^戌D_襶涾�牦Y 輄9� (禔V咾9"捍o膵}+�&�5��4哺耖賐9?傧6蕫7湠~U{ Wb�42�溊峛�=� (藺V芁9"檀o膶}+0'�5橀4哺笊殚傩 鐫∷U)S嗡�hК$歃�逤a�9仁�)G臋鰨湵o缒紗3滷s~q慜g�!tCW!� +鲰t栜綮嚩� +赍�逥a�9仁�)G剻鰨槺o婺�3滷穱yy<蟦孒�7 ]� *$ 未nl毨衝Yq豎K;緩� +t悤AS�4�Ac� +袎y h:�,n浧艳鍇锿轵|~v<淥バt9ⅹ悋l`A&d/彙氪t歽K眬�eE蓼�3飩o酀鴸yф� idq�d鸤чQ罿r Km莴佬�葟ii�8b$�Y1鍒泳1霏@湗� τ肉摩8й�棊瓽T憪臁u殘悀苟孾7旧� +y悤慡�9�慶� +鋲y r:�,n�<熤� c +E埅偦�m|�.溧詎`�-蔌. (蜛V鍸9"未o鋵}+8'�5滈4哺蠝O鍳噊^煘//N弿鰩3痜B堥忤4[�)�0��:AT菾聆鯴�+嶱z�杣慊/,狓Y�?鍒緫?霏酂樧皈尤��颠��鼽|f8翱樋煙do)豔鸣��厍胑.西嫠悖搘�8鱿琦[q飉C�&� +9调�hIJ冭l哏a�>仁�)G劄鰨璞o�=滷7C縘!��EA�'� +y〧n扢�簛',g竖� P鼉焤D黫呷鸙餙蘫idq�4稄(f�&�"焣挢B偑dmk<�'zB�?<�?��n=弛氷2})�,n鱈篁q��}u焆4祮輰誸1�*O@4゛A岳枿W �畨0r�O 稺�鋸�7哎啙te潰綪�媀}a��3j ‵d錐A9AF亇+Eb^�(�4哺m鯣鸇麘橍甈劆*�;X伱5璚|篠戴w湸禃堹B.y�0灝�卽Li╅bDU濦�(g甉岏F褠+po橌襏�)鐺u殊�鑐� �*EU�>廣�(扈蔌s6�8�&:U筀v↖惁盙 訆仢k:機?軎?@�/�7��+Y˙2枨 +=鈇磭潿惴b裶tPASv蠣i�洊A'�犻鶴桡用�嵰j萻o?V利m/l跠3鼊癵耯�}蹦f孈/哱$� +眉呡b鹘]m矅脎觚錭鴁囸忋邍ogBO熀勳/)'晒倬�<搝zw啕��:�w遱p縻�/脎~y趏�ㄏ�@峞ndstream +endobj +4533 0 obj << +/Type /Page +/Contents 4534 0 R +/Resources 4532 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4537 0 R 4538 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R 4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R ] +>> endobj +4537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 635.166 274.5352 656.3674] +/Subtype/Link/A<> +>> endobj +4538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 603.5642 179.0052 614.4681] +/Subtype /Link +/A << /S /GoTo /D (a00202) >> +>> endobj +4541 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 471.0445 221.2372 481.5748] +/Subtype /Link +/A << /S /GoTo /D (a00135_534d9e416324fb8ecca6b9cb4b1f6a6a) >> +>> endobj +4542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 457.1975 187.0257 467.1251] +/Subtype /Link +/A << /S /GoTo /D (a00150_g88e60aa2cf23e1c65d630701db08c743) >> +>> endobj +4543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 442.7477 190.9012 452.6754] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6020613f5062417d9811cfa837215c83) >> +>> endobj +4544 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 428.298 189.2474 438.2257] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5ca559def464ef20d8b1f7d32f2f160d) >> +>> endobj +4545 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 413.8483 189.2474 423.776] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1320fd0006a2f70138bc2d0018dda829) >> +>> endobj +4546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 399.3986 191.6086 409.3262] +/Subtype /Link +/A << /S /GoTo /D (a00150_g44b3b1ab31a403ba28ec135adfcbefef) >> +>> endobj +4547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 384.9489 192.007 394.8765] +/Subtype /Link +/A << /S /GoTo /D (a00150_gc84f499cba8a02fc0e306c10b2acabf0) >> +>> endobj +4548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 370.4991 189.7953 380.4268] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1425d4a0c2760adb653a04c0fb137a8d) >> +>> endobj +4549 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 356.0494 215.2498 365.9771] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1215163245304bad20d6c5608ad75ab7) >> +>> endobj +4550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 341.5997 221.8948 351.5274] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9f1822e1d231235edacad691f3cb7bbb) >> +>> endobj +4551 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 327.15 214.7117 337.0776] +/Subtype /Link +/A << /S /GoTo /D (a00150_g691688604655ea8943d15f14c60027d8) >> +>> endobj +4552 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 312.7003 239.0603 322.6279] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12f3bf821224b8e7b48a57ed3cea15cf) >> +>> endobj +4553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 298.2505 239.7177 308.1782] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5c5b1834e497f53ad0ef947bbe9777fa) >> +>> endobj +4554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 283.8008 204.1812 293.7285] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd58231410d58e34b455328b888a9e73c) >> +>> endobj +4555 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 269.3511 244.6991 279.2788] +/Subtype /Link +/A << /S /GoTo /D (a00150_g207d17b633cd095120a74bc1f2257b17) >> +>> endobj +4556 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 254.9014 209.1625 264.829] +/Subtype /Link +/A << /S /GoTo /D (a00150_g4cc3e223b63f27b546d62e9a258dba5a) >> +>> endobj +4557 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 240.4517 305.6302 250.3793] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1cea57e3ea526f210b1068e6dcf7b4f4) >> +>> endobj +4558 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 226.0019 321.0623 235.9296] +/Subtype /Link +/A << /S /GoTo /D (a00150_g62c03e0a308cc23929a80fe8d8f9dc1e) >> +>> endobj +4559 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.9495 218.1788 221.4799] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1d3211dbbdfb22d6a47b60dddcf945e8) >> +>> endobj +4560 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 197.1025 341.9936 207.0302] +/Subtype /Link +/A << /S /GoTo /D (a00150_g42288d5c3cf4b10becefec657f441e54) >> +>> endobj +4561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 182.6528 341.0573 192.5804] +/Subtype /Link +/A << /S /GoTo /D (a00150_g8387881de3a8bfd3c0d57b9d04ac9b7e) >> +>> endobj +4562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 167.2268 167.0009 178.1307] +/Subtype /Link +/A << /S /GoTo /D (a00150_g24f52ac52d6e714cb04a5aa01be3bdd0) >> +>> endobj +4563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [198.7613 167.2268 256.6538 178.1307] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +4564 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [273.2016 167.2268 305.9885 178.1307] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4565 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 152.7771 172.5401 163.681] +/Subtype /Link +/A << /S /GoTo /D (a00150_g96544dedc1cdc71ad2ad54bf1d5e5433) >> +>> endobj +4566 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.3005 152.7771 262.193 163.681] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +4567 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 138.3273 191.3593 149.2313] +/Subtype /Link +/A << /S /GoTo /D (a00150_g4309376690872fa4beb4f025f5cc199b) >> +>> endobj +4568 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [223.1197 138.3273 288.763 149.2313] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +4569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [305.3108 138.3273 338.0977 149.2313] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4570 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 123.8776 186.9261 134.7816] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb9435261753469accec0c9bf8a5a2686) >> +>> endobj +4571 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [218.6865 123.8776 279.3487 134.7816] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +4572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [295.8965 123.8776 328.6835 134.7816] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 109.8015 191.6285 120.3318] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9c0814ed491fa452ec97910c0728d410) >> +>> endobj +4574 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 95.3518 189.2275 105.8821] +/Subtype /Link +/A << /S /GoTo /D (a00150_g013c3a06a8b58589a77f4a3442f89c2a) >> +>> endobj +4535 0 obj << +/D [4533 0 R /XYZ 90 757.9346 null] +>> endobj +1113 0 obj << +/D [4533 0 R /XYZ 90 739.9346 null] +>> endobj +378 0 obj << +/D [4533 0 R /XYZ 90 739.9346 null] +>> endobj +4536 0 obj << +/D [4533 0 R /XYZ 90 716.0742 null] +>> endobj +4539 0 obj << +/D [4533 0 R /XYZ 90 491.1191 null] +>> endobj +4540 0 obj << +/D [4533 0 R /XYZ 90 491.1191 null] +>> endobj +4532 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4579 0 obj << +/Length 2957 +/Filter /FlateDecode +>> +stream +x诘\[o[�~鳢校孎,飾�,燖�8}h6I巺貟V枓瀞H筌f巃y�}汏8�7涮�,f䦃Y�3g J圪觐傁>��z!毞瘙�黿u褡�2� V谫誹e� +f倡觖桂騬!僒n~~�^>屪/^no7醌燋輋wZ灦鍑縗e� +,圢縳�佅掷铛g*x3�縫&B惓� -U鲡砼?矟鷯�C�3B 廚寫ixF腙呀<颲戱�e罾棓銇,�+URp舜蝥罭t鴽敠隟p鴶4 +鳂Q擾嘀洱~綌|具畕�爡0唏�笙扙耂,zv#嬻鲳駘s�埜S�剟④{连7骺q脅~絘�+19 O2柃� 烨S梻� 毋C�(卤��;C弋a稷框V蝜悹N諕绽�]�7|媪空绽A^��`�x�圯龃]辬�[g婈��睶~0澠祍诶讪� 杉点驳�3茿樃l3寯mi�-�7啥鍡攎埙�,zv搇楇祾}裐Hナ!H(�9圼[�:�璬� ?y� O1栀瓎飮4藱凿gT忒啸f筪矮咁裙妦;$a�<|歐橗A�=r +$郥�瀸'掠�;炗宎苲G�'�(瞧3nBge�垄Y�(鎢p砕伷瞆侲?-徢飖蹮O鯆e鼵膳鮶嬬7 � �?O~S渜Y瀫嗴[傃0仵X-F8昋L賺b棾`蒼p� �!�'A~苎�4�R愻甅毅赕她煣`箚�R\$�;&=,荐� e菭!2p耺�}聯 簐清婾q�<侜n凵Q垙� |<9�&9~娀琦簾\擴S旕D�鷙�d!�)!�%��"噋�遪vhz~趬亳�%�U缙壅鵹yj +挠M筲疹򁱴Mj\] +3抠LU +獡楗囿瘺c+�6硑)�B糖*� 虖颧b4�炓<�4萌|Z|r>%�%\�濷1z徫�絼k觾|�=宒訿櫻�-1枊將�X笟浳銩NMoL@蔚诜说q昲DB唈�)6藆R蓤挳;=,kDTXaif墼dq测谈襆LQRゞ9�#�5NPRK0Zj吜 g棩V�#衶荚pzYj-z0帅請謆�u汥i.2� 箓�妵鲮M�� 洹'j瑻cZK0LkW?統怖咲Uom货�;嗣a�<-钎&-/倅� QRK0Zj匒� B"*龗]惗� ]侲蟦迻v劬�!�亜肣v铹2�=廇 '闖4"� {z#OC�#宷喜劦3�"2��0r �熂[�$骰�a竪e溉ň颲A%宖趛褖LSP禇v|r翬秋�}蟦9j牉涮j'�d醊偞`v�鬕i)`臛G愸$儺輫冿r�>孭,寝亜"杸�触宛�幥氞ユ骬]嚜嬠┭蕏"Z}唬G+0錢)秋癜?炐$l9d獩棑p伷抪俇g旻%跎c�*搹検�7w鹴惞龠7荔齰鼯酨#r:@�醳挡p�5嶫� F'曷嘤5�.'陹]T陏=挰$7!蕆慟}�韉� Ys�:�J謂0飠袮�4x*=籩v汯i孢鷱 � *EP愂3eTw� %l-榰P萇 B芐 zv蓜茰丟 e 僡躶9� �&(毎!块J钣馜代v�侗p�x�坮k|]�-澂NO|LT�眑轄��珐 +<Z��#猒摭湭�:担噃8�8锱充f銽Au73屘庭A�$騅謥m�闌侲蟦蝲慧睚i酉齘3� 躼婒颽[:�| 燆ZO嶡聯 簐慓>2d 啚Q刢Y=I%�SJV^1n漳巐塅礈a晿O鸉捧�'猼 +藑狖胒祬-7M�'�沾r� 疅狶`癳Rm� �5]�4嶜蜌.歯鶠淓蟦音垻狳酡%b怭攚g欍Zvb?╤^?覜:⻊�綮"饕$s�|�E8栜腉r潯搳� +�0憋[�1E'X羼�憈<哩烥覓3c4债�0Z覅AL腋�,橐/-闁�)捚Y綮&I廂真楮樶�AH(�=戽!(� Α�P肙 @聯 簐钳x?@�#�(炉錇欂宇寽�!Q肂V�鉕跭缎宆鑸荊� +vY%;� F镅� z 注ws羹粗C箣蜽FQ巑<飱N\b�>垘_め茑I]汇3恺iE =�(�!瀢礽;�{&薣l銒�/|%嬴2琲"痞雷M邺剗覆y�;mO湾齐悭6簖]罚{�2瞰禼綞惗屋骠m�2嶧o袢鬖;hlysN顮 l碌飳膚�啢寲_rm麨皟,zv经�g轠MD �(逳兵,�x� +菿�:+阊i宨薭}�'髅�#��f:7澶侟ネ魔�%觔傉= 襨D搽?W鏲蒈O�'魥惂炷鎂�斾懢瓀�]9_匪O窙P毗�謱j� 毺0R摌荊o�粍k泵:埋 +�V{茎Y趚�3乨檖=�1媁嶀�蝦Js嵪濸 娂>鮩Ьn揳��>�8�<�%籭s尠|��,�wY畯�3 S茣p(G樧E瞵聄娆檃� �>�8�<�%籭3尠|� �,� wY�雗y��?疟洽5Jr鳍 +EO眝�O蚿儮'苡�Х�愣9輡褾U(8(奡�2y� 俠� PV痗艬褏0\d�;鎧8鞔皿氟p袂麰鐭C刍21CUS癳揱艉A<>~徉祢�)� 鮐剛Or伈浐f绖�:>粍k�+畻]R鋚孋'-�(�1觪��7岟^呓|呖麰~;� +Xx胞坕且崪�3,捁Jф|aq鑒頲維W�Z>K5,�(a4 R茞:鯓{�┕b粥:t姰5-欜蚀�! �崜熵踢LM鼷8"迾0xt ,唜胠�$膩�>镺WT擃�#�誙跬h_]^埆W脪q~汉.黸驰棫艏!晞O/^�+珂!洘�﹡愅哞�鐨.N�:韽Y�?骜閧鶶��� ,⺷岲瓐��噖噀ndstream +endobj +4578 0 obj << +/Type /Page +/Contents 4579 0 R +/Resources 4577 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4582 0 R 4583 0 R 4584 0 R 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R 4590 0 R 4591 0 R 4592 0 R 4593 0 R 4594 0 R 4595 0 R 4596 0 R 4597 0 R 4598 0 R 4599 0 R 4600 0 R 4601 0 R 4602 0 R 4603 0 R 4604 0 R 4605 0 R 4606 0 R 4607 0 R 4608 0 R 4609 0 R 4610 0 R 4611 0 R 4612 0 R 4613 0 R 4615 0 R 4616 0 R 4617 0 R 4618 0 R 4619 0 R 4620 0 R 4621 0 R 4622 0 R 4623 0 R 4624 0 R 4625 0 R ] +>> endobj +4582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 704.2391 180.1912 715.1431] +/Subtype /Link +/A << /S /GoTo /D (a00150_g22f140b02c354dfebcc7ad481c3bcd68) >> +>> endobj +4583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.0068 704.2391 208.6941 715.1431] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 665.5553 177.9699 676.4593] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +4585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7856 665.5553 201.4916 676.4593] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.8776 665.5553 256.5649 676.4593] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 626.8716 138.5977 637.7755] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4588 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 626.8716 189.7953 637.7755] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +4589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 626.8716 218.2983 637.7755] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4590 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 626.8716 266.5273 637.7755] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 588.1878 138.5977 599.0917] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 588.1878 197.5461 599.0917] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +4593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 549.504 138.5977 560.4079] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 549.504 201.9695 560.4079] +/Subtype /Link +/A << /S /GoTo /D (a00150_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +4595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 510.8202 166.9111 521.7241] +/Subtype /Link +/A << /S /GoTo /D (a00150_gc48ed5f0d27721ef62a3ed02a5ad8d2e) >> +>> endobj +4596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 472.1364 152.9837 483.0403] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4597 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 472.1364 211.6433 483.0403] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9c24fba2cd8f7f62accb0a0d5bbe4dad) >> +>> endobj +4598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.459 472.1364 268.3701 483.0403] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2043 472.1364 331.8917 483.0403] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4600 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 433.4526 172.9089 444.3565] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4601 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 433.4526 236.859 444.3565] +/Subtype /Link +/A << /S /GoTo /D (a00150_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +4602 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6746 433.4526 293.5858 444.3565] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4603 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.42 433.4526 357.1073 444.3565] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4604 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 394.7688 185.1725 405.6728] +/Subtype /Link +/A << /S /GoTo /D (a00150_gaa585784b0914cac1d37f07f85457008) >> +>> endobj +4605 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.9881 394.7688 213.6754 405.6728] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4606 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 356.085 175.2098 366.989] +/Subtype /Link +/A << /S /GoTo /D (a00150_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +4607 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.0255 356.085 203.7128 366.989] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4608 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 317.4012 183.4989 328.3052] +/Subtype /Link +/A << /S /GoTo /D (a00150_g266263ac78a1361a2b1d15741d3b0675) >> +>> endobj +4609 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.3145 317.4012 207.0205 328.3052] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 304.9087 138.5977 315.439] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 304.9087 162.6772 315.439] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +4612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4928 304.9087 191.1801 315.439] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 265.8513 171.8826 276.7552] +/Subtype /Link +/A << /S /GoTo /D (a00150_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +4615 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 183.3435 166.8215 194.2474] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4616 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 183.3435 221.3367 194.2474] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7d3673f52f5846b6961d23b150decd54) >> +>> endobj +4617 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 170.4773 166.8215 181.3812] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4618 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 170.4773 213.028 181.3812] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20df5c82f2a15a508c19e505b5d9de2b) >> +>> endobj +4619 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 157.6111 166.8215 168.515] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4620 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 157.6111 220.2307 168.515] +/Subtype /Link +/A << /S /GoTo /D (a00150_g3237be0d9ec457de0177689ee23c0d5c) >> +>> endobj +4621 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 144.7449 168.4754 155.6489] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +4622 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 144.7449 218.5572 155.6489] +/Subtype /Link +/A << /S /GoTo /D (a00150_g499bb98a0b4ae9a98553ede81317606d) >> +>> endobj +4623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 131.8787 133.6164 142.7827] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 131.8787 166.9014 142.7827] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 93.195 192.0768 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +4580 0 obj << +/D [4578 0 R /XYZ 90 757.9346 null] +>> endobj +4581 0 obj << +/D [4578 0 R /XYZ 90 723.1038 null] +>> endobj +4614 0 obj << +/D [4578 0 R /XYZ 90 202.2081 null] +>> endobj +4577 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4628 0 obj << +/Length 1404 +/Filter /FlateDecode +>> +stream +x诃Y踨�6}譝餛z 屌ylg靑譜瀄廏杊GS[rti肟螧XP╆x<忮{皗v �叆厲歑.T1~硌�/閬縘恺2�2鞚�3[XbS硼i3�"癰8闺绿燿掱子�3�'沩轾籁�軹O誦推顠1荟琉笼鸩鱵X[麂$W鄉�栎萦b�$/{攑kd�7濸植獾''/桔揎�8��鐾QPI 7E婶vV�� (哵a�蚸Z|\ �罌T[S旙条佬䙡:[徜7~X妄飛飿眼鬯t眐N寯恉X是U酺萛\,議烙銡fW�5f�6蕡b掛 +棶葮,粈k裁昂.9z^�# D .�$K鉇�哹唒蓅侕▅\�铘�&┱Q崹9穽绯v6H@鉠よ�5╡副�L(� 4}瞣E儖w+)4峷�;�3筠59o嫕�;q%鎚�e岋x�仳�A-鋃^�禢��赘窠n谶灵Uc穩镱dsS6^xKc1褝�$F 薴F<嗌⿷ap v黉H1<搓呬�1 附 �5螶t穈I奺嵤犯e�i葵vq耠照睚烅苍奌穅"@J/栕K骡駔I倡�矺瘄R魩^鵧�\摓[錙棲j�6_瑬鸍 槿炸 \C睘5(l$箅彭痼挣讻伮r礯<�i;謄馜�攛,/瀯陪艙fW�'f纰碁t\罼`:項斩哽�K 鍇�;�2.妼nyй燇@k軠7�p �8n/*�!J偼4�重嫸稯圇_閖凖6拻 鼋W 薵D4嚅慺WgD填皩H�<椽n驛dY\'薳[稈0#L抐Y�2蔈k笴`SSQu塚 �朆穠"@J;栕N骡褛I倡�矺nVS鞄蕃f�\�jf4s謻�"T*�Y嵤灼缔总夳畓$�"F(vX輰褖篩脺qQ>警�'瑴 w�NnYM禛O笈�.嚦騫� 觳鯻k餷秪} 洠耔e紐質砐v謀a$v�咿 楁v镪櫌I}吟燤�|8�?j)b57幔pat黂酮舎\疚�.滽����黎鰧Q�L鰞匙緌窭G橭�逕踥�$fq�'勲堇endstream +endobj +4627 0 obj << +/Type /Page +/Contents 4628 0 R +/Resources 4626 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4630 0 R 4631 0 R 4632 0 R 4633 0 R 4634 0 R 4635 0 R 4636 0 R 4637 0 R 4638 0 R 4639 0 R 4640 0 R 4641 0 R 4642 0 R 4643 0 R 4644 0 R 4645 0 R 4646 0 R 4647 0 R 4648 0 R ] +>> endobj +4630 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 702.9085 195.9522 713.8125] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga05a3dde2048480fa3ab2a5961898d18) >> +>> endobj +4631 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 689.9571 138.5977 700.861] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4632 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 689.9571 170.976 700.861] +/Subtype /Link +/A << /S /GoTo /D (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +4633 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 651.1028 138.5977 662.0067] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 651.1028 174.8513 662.0067] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5b5615dc240daed20949c0fded2b4679) >> +>> endobj +4635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 638.1514 133.6164 649.0553] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 638.1514 172.6397 649.0553] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb4ef6b00924990e7a293f66715b6d1d1) >> +>> endobj +4637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 625.1999 152.9837 636.1039] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 625.1999 200.0271 636.1039] +/Subtype /Link +/A << /S /GoTo /D (a00150_g788ffac72342f6172343d7f8099cbe1a) >> +>> endobj +4639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 586.3456 152.9837 597.2496] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4818 586.3456 196.4305 597.2496] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +4641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 573.3942 138.5977 584.2981] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4642 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 573.3942 200.3154 584.2981] +/Subtype /Link +/A << /S /GoTo /D (a00150_g236d5c7872f59c8fe7b701c7252b976e) >> +>> endobj +4643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 560.4428 172.9089 571.3467] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 560.4428 239.8777 571.3467] +/Subtype /Link +/A << /S /GoTo /D (a00150_g210f227119fc972e6222c9cb452e15a9) >> +>> endobj +4645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 521.5885 172.9089 532.4924] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.4071 521.5885 236.281 532.4924] +/Subtype /Link +/A << /S /GoTo /D (a00150_geb533744817cf6695d75293369c2248b) >> +>> endobj +4647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 508.637 133.6164 519.541] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4648 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 508.637 177.0532 519.541] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2a0cf5d86c58fab216414ce59bf1fea1) >> +>> endobj +4629 0 obj << +/D [4627 0 R /XYZ 90 757.9346 null] +>> endobj +4626 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4651 0 obj << +/Length 1995 +/Filter /FlateDecode +>> +stream +x诘歮徾6�葵W韲诶欋蝗�(谒督鋚@.雫j婡钡k#~贀d酊飋(慭蕯I錸疗�4��<e�9�d�覍所�8皿G8屫�+妇 +灲鷫旯FZR9_?t$A�:_o]艞+�)+椃镝P�A�?鴌;箧r琋m兕惜屣雡�邹J0I屟蛜�戏噍�FL+1�綻D处筱孲婢f鞒z=齾顔绷 缕GG8�3� 徛h媬t +Q絓岏獠zhw=�誄U/塟Te喼�$H 验剺曣Y%"V閉諙爃k僒5泎�銪zXy#嶻фoU�齿}縜L�7g{草�3>-�7颻广�-7熝u"擛槰b.橣J鈗F溞*攰AQa藹� H�:�X囑莨~}m沗� +FI诟��嬥剦gm濝my础緶>/ ^T嚘5!凛�"�涝蒗m鋔Q � y錴��=p圯1舛 輲4Jp-x 蔻往x�-Lビ◇R�兞勤�邖�"施�n)y'򓒗e �9p�1%{蝥�;税9v 涖� +毗贼叨暪v跊iaOu悰儾�8]師湤驝�7w,7踬拗钍洲W;3学?煗啞氶窒a� 戛>?皱遍�)礴蔗0<�?礥}*Ws痠胨訳髼x2顐裹,h鯙lqx笢6]e杈m‖籮� 飋�$鍈顐�9�这歩�揟蛥^� 橩酰曺ND'� +o檲慯鉣_H怰_筽]淭蝡ねF鉷噎斢痣齣s竘� 咜+瘌⑤W7*<円,d_怙识靋}o迟-腿�'燦 振謏 +寱9 旿駁=掐o攰讣耛jZ尧検賲%Sc)噕{v#薖Fc晔騧矞|螄H�%�#詮S 桪抪�吭怑Px#,贍悗獲R锯c攝?�+鹩訡�謠\h5鱞葡誗絼Ιj|W�c蔠7镢呕?0儷篔���q Z罼趝�9伮Tr襳}rB还� ,OIN趪Ho携軞8 +A~d.V*�A�4�'栂M�0暃碷煕衝.7薙r擌!译rS祷忓v,5e& +喥9^𖞬 z庱ボ媫A/烧暧蕻�?歶肿n悵傛� +�( CM剹鯊y�7霡#叺@RV凮KF疯贼C昶�X{�,諭嬒Xg�:�v慷O逾�?\落縈稉瞎轷*爙�n;�&h#幞2.内� `亶m�$穢傮d"qb趚1闩給/]囯痕`> gR籹僵 咄笲9A叅/�!㊣n媾騽 +S劎韟翪�烞x趰H�#�1A8羏�* /晀!�6檖燃O$<怤钅�?���I┡KN,丽嚸醊,Kx�0Ax飘#|`7O��3nDz�经�+8A�拵儣�8k浭穣�!子��|{瘪 +经仕翞瓧\,螚丢縔r糷nN仜�蓯(鋴P.08 箷�3.厁舀'<0:鹦�緭>\k 鑶鲷X6焎紩鵼Y%C鄥益#]撡fqN&6酢t妋'6味嵡mX�+ +娋 皊BdW'栫5P�6m�跐�炖�f觧Dz儺鉜M嗸扗瓺訸⿲倍┸j�Wd秮p俍'5辮糚A6�羄��"E�?搅詑CJ坡D簚 +Cfn4/+9W�!煪簂蒹m拂䥽;x�$bq盻禑�5e}U媌,韹K +~飔欦$�7湖ce^�壱s礳'endstream +endobj +4650 0 obj << +/Type /Page +/Contents 4651 0 R +/Resources 4649 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4654 0 R 4655 0 R 4657 0 R 4658 0 R 4659 0 R 4660 0 R 4661 0 R 4662 0 R 4663 0 R 4665 0 R 4666 0 R 4667 0 R 4668 0 R 4669 0 R ] +>> endobj +4654 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.4748 274.5352 659.6763] +/Subtype/Link/A<> +>> endobj +4655 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 579.3616 179.5632 590.2656] +/Subtype /Link +/A << /S /GoTo /D (a00203) >> +>> endobj +4657 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 504.4427 177.6109 515.3466] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4658 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 465.3492 197.5362 476.2531] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4659 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 426.2558 175.9567 437.1597] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +4660 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 387.1623 196.4301 398.0663] +/Subtype /Link +/A << /S /GoTo /D (a00094) >> +>> endobj +4661 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 374.0913 204.1809 384.9952] +/Subtype /Link +/A << /S /GoTo /D (a00091) >> +>> endobj +4662 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 361.0203 199.1998 371.9242] +/Subtype /Link +/A << /S /GoTo /D (a00096) >> +>> endobj +4663 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 347.9493 193.1026 358.8532] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +4665 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 264.6323 210.8161 275.5362] +/Subtype /Link +/A << /S /GoTo /D (a00144_g12b467f314489259dd718228d0827a51) >> +>> endobj +4666 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 225.5388 211.922 236.4428] +/Subtype /Link +/A << /S /GoTo /D (a00144_g20bc87e5c063c3f4b01547be6e5a0148) >> +>> endobj +4667 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 186.4454 202.5074 197.3493] +/Subtype /Link +/A << /S /GoTo /D (a00144_g41d37ea1e3bd24f7b51e9409aceaaa80) >> +>> endobj +4668 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 147.3519 209.7101 158.2559] +/Subtype /Link +/A << /S /GoTo /D (a00144_geb79c914cf137e6d27fd7583e5a66679) >> +>> endobj +4669 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 108.2585 203.6134 119.1624] +/Subtype /Link +/A << /S /GoTo /D (a00144_gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c) >> +>> endobj +4652 0 obj << +/D [4650 0 R /XYZ 90 757.9346 null] +>> endobj +1114 0 obj << +/D [4650 0 R /XYZ 90 739.9346 null] +>> endobj +382 0 obj << +/D [4650 0 R /XYZ 90 739.9346 null] +>> endobj +4653 0 obj << +/D [4650 0 R /XYZ 90 716.6946 null] +>> endobj +4656 0 obj << +/D [4650 0 R /XYZ 90 523.5122 null] +>> endobj +4664 0 obj << +/D [4650 0 R /XYZ 90 283.7018 null] +>> endobj +4649 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4673 0 obj << +/Length 2412 +/Filter /FlateDecode +>> +stream +x诮[]徾6}焈醔_l`囜7�媌穒�回l:}J傽ck&B=択藫涂_�iJ�.欀]伹鲴=梂鏫挗M攸#�/擯╜\.諳7x駂^� o邭鱫C�?頽^饥泞@叅rq鱬� 斝泡纨R#Z琻├薱絳aOW醵��zW=T�阉猋蹢储jI碭}竰s竺漡�L她弁�x�1I竟翀Z,>�'憿爧�N檣步�?>N�崎椘缺@氶�-UP& +I�#EZ21_4 �=c_4峘�8觸醓秚縋諃`�)*�" g錚)^翾仴簋eS齻1m獔淜d� 檺鄯鰪鎉槅莽覉廒4孷>>V]SuO遽譱.� Q揃脜皎Dq从�棝娃<掵B鬢^a姩�V�� 学,^h搮洄:�ae硃0浥廢4f( 毸I母n攮\┐裦B�(┶s0@� l罉謐H洝V0両Lг嘿�(m播L傘v榲缮挦� 艎铥t[讃熕m]藁僠;纡a蛑貴u39匙к砦鰳狲`蠏R�迟E贚}議訪T杍�杢U癠傋鵭臎6謽<肶�4⒏~璼:�湵5ec呢,咷%矆e笇I硍(T� D.蟀|棛)矶}附7弛詇v漶t局tg馁;g;~*軾輣_?徽P;踔y5� !a�:�芃TI ù佄� ��ま>i唟B�髝9Lz涴埚P]$i蟕H�甏TYtYm��獈�.Z縰種L燷炋+沜D0#WYYP�e匧I哿亿B鈫y胶C� y徣s� �� �3嗣h�+L�8IT痢R鬛窜;愽�L耻6�!�;樛鈺捷X�穀�恍圏�=Yq遅U泔e�;壪u{<� �+社陟&胓�"Y0=��<>Q�8n▋蛊脥貐鄺疐饏�暼!巉s榦� N鵸N駡諬H�:馋癲�M"岭毮�7�$其M"慒讐c_候�:瓳蘬sUp�}-g2$�!暬� 繞{p毯yv/竲富b�9痰剆尤hi*賦霡o囵穑╕潄$到f馿87�坆乵咙7Kmy澋�覛χ杗 A@�-兰�-劶maD炗�4⒏�!f0 F�cfq�)\ 廕$G薺L Lenw蠵{p0浟朊�.鎻0繘錰u4�(嫔)辛襔BZ噛街C� 瓘萻��舥Z79P秉|�!{醄箪愿繨8T*�(Z幰 �讁:?c�燩阃i助 曄e降:遌鷀A劔嫕�)�逫��'溜%*擸�縖掕t誘涋�楙銔駋xB桊埧レ[婝gc9|K�*膤S狲z鸱賆徔夝昌飾区Dv�>�Kcendstream +endobj +4672 0 obj << +/Type /Page +/Contents 4673 0 R +/Resources 4671 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4675 0 R 4676 0 R 4677 0 R 4678 0 R 4679 0 R 4680 0 R 4681 0 R 4682 0 R 4683 0 R 4684 0 R 4685 0 R 4686 0 R 4687 0 R 4688 0 R 4689 0 R 4690 0 R 4691 0 R 4692 0 R 4693 0 R 4694 0 R 4695 0 R ] +>> endobj +4675 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 713.9553 210.8161 724.8593] +/Subtype /Link +/A << /S /GoTo /D (a00144_g5323320b7316647042016f17c4e881be) >> +>> endobj +4676 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 675.2769 185.9198 686.1808] +/Subtype /Link +/A << /S /GoTo /D (a00146_ga4360412ee9350fba725f98a137169fe) >> +>> endobj +4677 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 636.5984 198.084 647.5023] +/Subtype /Link +/A << /S /GoTo /D (a00146_g1024f8a5fa65e82bf848b2e6590d9628) >> +>> endobj +4678 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 597.9199 213.1775 608.8238] +/Subtype /Link +/A << /S /GoTo /D (a00146_gfd5ebb56a1bd1da9878aa886a2075e80) >> +>> endobj +4679 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [242.9955 597.9199 285.9441 608.8238] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +4680 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 585.0564 222.4327 595.9603] +/Subtype /Link +/A << /S /GoTo /D (a00146_gbaf0bb2b6a4424b4eb69e45e457c2583) >> +>> endobj +4681 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 546.3779 205.2871 557.2818] +/Subtype /Link +/A << /S /GoTo /D (a00146_gf20aaf4292cb0d2a1b10bc0a568b51fa) >> +>> endobj +4682 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 507.6994 218.0093 518.6033] +/Subtype /Link +/A << /S /GoTo /D (a00146_g2c64c8c36bc84f9336f6a2184ea51883) >> +>> endobj +4683 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 469.0209 242.358 479.9248] +/Subtype /Link +/A << /S /GoTo /D (a00146_gf5c2ad5acf3cc23b8262e9ba6a15136b) >> +>> endobj +4684 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 430.3424 211.932 441.2463] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef14e83c046e19ab9fe9d1bbcca276c2) >> +>> endobj +4685 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 417.4789 194.2086 428.3828] +/Subtype /Link +/A << /S /GoTo /D (a00147_g1a1bc437c09ddef238abab41d77c3177) >> +>> endobj +4686 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 378.8004 207.3095 389.7043] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8411c95a4d89367ad2d9d6bde1a3d537) >> +>> endobj +4687 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 340.1219 185.9097 351.0258] +/Subtype /Link +/A << /S /GoTo /D (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) >> +>> endobj +4688 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 301.4434 185.9099 312.3474] +/Subtype /Link +/A << /S /GoTo /D (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) >> +>> endobj +4689 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 262.765 182.0444 273.6689] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +4690 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 224.0865 196.4303 234.9904] +/Subtype /Link +/A << /S /GoTo /D (a00147_g64a238a5c02640a7a4aef004163aeb47) >> +>> endobj +4691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [371.6975 209.5536 410.5505 219.4589] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +4692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 185.408 190.333 196.3119] +/Subtype /Link +/A << /S /GoTo /D (a00147_g81ac47cee1c18f6aa479044069db7ca3) >> +>> endobj +4693 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.83 170.8751 416.683 180.7804] +/Subtype /Link +/A << /S /GoTo /D (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) >> +>> endobj +4694 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 146.7295 224.0965 157.6334] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga9de254b8aa308eb4aab17efdde622d2) >> +>> endobj +4695 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 108.051 198.383 118.9549] +/Subtype /Link +/A << /S /GoTo /D (a00147_g26a14b8dae3f861830af9e7cf1e03725) >> +>> endobj +4674 0 obj << +/D [4672 0 R /XYZ 90 757.9346 null] +>> endobj +4671 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4698 0 obj << +/Length 2146 +/Filter /FlateDecode +>> +stream +x诃沒o燮嗭�+鬎�=褯mN{燖N鉺��"褗It%*廂胂]/狄潭�+脲蘰艏�.I� ��啬褖Q�8!鮠竟��髲7lx�� 净岿�躆q氹升�1俧Dq�'鲖_μ贳;罡0用敕~ㄨ��~X瓫~舄�6投泆玽{龥�擐碈UJh揀y笏ot拆战埂D8�&O�%�9>佘H.鈰跬粵��8�� 雾湦奨a'w荇粨� +13刬�s�8椈鍏TQ笠-憉婹Mぐr抎縭甆{括邐+1�朥E枟I猕帚糭-歘)遨.51馨撲岘輗悬湕鮔E躊芶貘鹟栄i�(J�# 覈 +(�G䥽暉A��� 诹� 饣\}珸褖�hy瑎;B嵆/AC�欗{_<頽絪歔Ζ烿韆縹��诀^镚媃7隚餂f蹚f骩N�讽雍Y,鸉~{io碿��7h�i灼EhO2旜< @;�7�>蕥�>N^A;RF7�>o粉f迺磗*夊致}H*2Z 鞿 "え�=珿�躅胮.�N亲鲚)岍c棻V渪重u�嶩�苪斸\g!級�AYm�蘧K�斆敕椛V朒&誙孳R*"�貿啌�勅嗴&搀�d彃讗 桻膷d玭5[o鳆蜮� ~趯4"⿶ +蔴U| J攓獟風 �e涱稹#龐挽箨皦 o%�.7橼醻踝癕貜熮�;頙?噛8低a��/>"鳛9�9兆駠w�vNb䦂2�Y@�p掬��"蟪t�8�熤_ba)盶洬Fh阊T仳6蒔娩� yFyq脤揥) sX�娄=Nr�EM~~陦�nHR!晹癣0爣�'�1S椤L y(蔅?鸃猬h刚艨Wo霗枩P怜s僆�2cc:蕄Τ�觩弈t灧傞Q�︶2姼9语W�3鳁x�6$捒寲擖u渃�:j逰姘麘 闘 Ae顱#毲酸A穘鐀Z鲡2駘卽W!瀲�蘞$J| ��迮�'� )�颫蝕壸墀N�6$捒�塤7唷�繄牏�俓 P瀌w�%蕪O 鴥考�O鴠崴頒_qr玫$R^�2W�#伜"蕄Wd!W纘�+蚣�%痲\F7-�g嬇盥 Y�4!霦磋塩n?���%推,髄,@# 胯牣諬�2R攨士o符nw�犌@|橅窼� B觾逩5m[=磭]紶�5驵奾u潷鼂w豐8I啗# �螞虘绛0�(y�9�2姼/嫘g葆$�&|D`� +K_D鸕wdc檷U6仲谸n騭$bY澧<^�*蠮焧暀氄蛎�-觲镢]墽龈砚不樥�*s{1�lBaOG$j�< `/$o醋(/n痲� +{!eq晴炦珥c榺<棆j?E梸�v#⿶2蔴裦媐� v仫鏍擥橌蔳剅5d�(臊瘌\yVIK憁鰻�鮡 HK�讁>� 遨嬢剫*�/� � �,i齳�N⒖y,�G�[怐p�"V~f�>@�9%溮蔳唕5D}旛詏g脥錇恣�"侠�)惲�W!趇"づ灓�*旇,@4�4�'艍e� 4� 褯冼�9獏鹎6$\B�"誣菋忕�"a�骒E.闟2}龄H� W蚧坣3聠��京<曇擤�6籝z4..�妰7a潂^0>遬� 綢�)奋O榲殒跎Wn鈓鞼礴鏴S|誇1q甂�`�0餰ndstream +endobj +4697 0 obj << +/Type /Page +/Contents 4698 0 R +/Resources 4696 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4575 0 R +/Annots [ 4700 0 R 4701 0 R 4702 0 R 4703 0 R 4704 0 R 4705 0 R 4706 0 R 4707 0 R 4708 0 R 4709 0 R 4710 0 R 4711 0 R 4712 0 R 4713 0 R 4714 0 R 4715 0 R 4716 0 R ] +>> endobj +4700 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 713.8976 188.5699 724.8016] +/Subtype /Link +/A << /S /GoTo /D (a00147_gde6634974418e3240c212b9b16864368) >> +>> endobj +4701 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 675.1037 205.825 686.0076] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdb971fb1525d0c5002f52125b05f3218) >> +>> endobj +4702 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 636.3098 190.8911 647.2137] +/Subtype /Link +/A << /S /GoTo /D (a00147_gef6c4140c632b6a406779342cf3b6eb6) >> +>> endobj +4703 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 597.5159 195.3145 608.4198] +/Subtype /Link +/A << /S /GoTo /D (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) >> +>> endobj +4704 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 558.7219 200.8635 569.6259] +/Subtype /Link +/A << /S /GoTo /D (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) >> +>> endobj +4705 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 519.928 191.2995 530.832] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga8933ad15a2e2947dae4a5cff50e6007) >> +>> endobj +4706 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 481.1341 180.9385 492.0381] +/Subtype /Link +/A << /S /GoTo /D (a00147_g58bb90796c1cdad3aac2ecf44d87b20e) >> +>> endobj +4707 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 442.3402 204.1906 453.2441] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga87feebc7cffd4d8300e776cf64e4fec) >> +>> endobj +4708 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 403.5463 180.9384 414.4502] +/Subtype /Link +/A << /S /GoTo /D (a00147_gb5fecbc62edd128012cea0f47b57ab9f) >> +>> endobj +4709 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 364.7524 214.9411 375.6563] +/Subtype /Link +/A << /S /GoTo /D (a00147_gf2dbaceb10c67783a115075b5b6d66df) >> +>> endobj +4710 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 325.9585 203.0756 336.8624] +/Subtype /Link +/A << /S /GoTo /D (a00147_ga20812098a4663c8a9fc4ce8e95391b6) >> +>> endobj +4711 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 287.1645 203.6235 298.0685] +/Subtype /Link +/A << /S /GoTo /D (a00147_ge5ab69d40013e6cf86ef1763c95d920e) >> +>> endobj +4712 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 248.3706 190.8912 259.2745] +/Subtype /Link +/A << /S /GoTo /D (a00148_g87f0b54ade0d159fba495089128a4932) >> +>> endobj +4713 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 209.5767 195.8725 220.4806] +/Subtype /Link +/A << /S /GoTo /D (a00148_g53fbda0e8c31d4882294c8dc3cb5f487) >> +>> endobj +4714 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 170.7828 215.1402 181.6867] +/Subtype /Link +/A << /S /GoTo /D (a00148_g769512993b7b27271909d6daa4748b60) >> +>> endobj +4715 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 131.9889 213.028 142.8928] +/Subtype /Link +/A << /S /GoTo /D (a00148_g210e629f7252e4bc8458cbdf260b3318) >> +>> endobj +4716 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 93.195 234.0589 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00148_g6b16e0bac41821c1fbe0c267071642f0) >> +>> endobj +4699 0 obj << +/D [4697 0 R /XYZ 90 757.9346 null] +>> endobj +4696 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4719 0 obj << +/Length 3007 +/Filter /FlateDecode +>> +stream +x诃溮r7嗭�瞛嵿|葷-蓭�戅靚扲�e゜搸H篷>��l3 擪晩Ei~踹殳1�3b#��c#GGF鈩裕汷t袅��筐莀@莲倭w9�4祝佥&俧Dq艷驰_菛p7y�?=|�O罘呔~�8呔簻咄'處鐙涴#k�3k&肯~<8�%�.9%4 �;蔸$<燚8獸_�7�0瑛栌佷"~篑`z餾姵=谤吘�(�"V匮 n讹 +� +10蛚U腐佱�(妿��u-CQ�?H嵆( +�9\~鷟�8f苷a齟箎qr饼z}{�=綵蚖�}yXw鮗套煯W~檅J唝S&��>�>/e嚒SM�0b]杼暵蔘拝7�绐L��Wb鯰礢諀�$巎濢v�1/胎&痉貫y8豇∮\�4⒕朏7め{醩`x@�'脵蚬伸U"�*)斞6á敷怔熪朰=辴疊B� ��〓煻迖j�,J采e铤�~瀂虮;烨Hw|y� 嬇�0 邡S|Y冎^(が �$� �82啁`韧C%�"n>蕿s扻埅殅-刞庼尖鎹=訶螱Y肉忉f麻鴱絭|蠌县�7膣s艏d動蝽=淆昞0U膣(<堳<顩z�6魘f抟髕E芗琦p希U仵o�+-垽阚;^Q"�2祹彶z莾�X倾京恪oC莋�-彠Q耐;^w渋聕撲>�>s�恫7軄�eu顦#鄮�&钚穪{f蘼O篃�依\m`駟秔7狫.淵bvy*�桂M澍疖 +0銺VG�9涓oB}恎�-锐4姼窨OOfd獔驦�"$U艥S雼K躤eN塧儒ywc堠陥;@5M�乮_柢�蚢?j剓qm笻髼U-5(b�a +r筢gW?W3拤a癅�憤�:Z�芭}\枸@73o翄膷�邽O廗聨阾�QU1鐢�9�=攨_�瓎?E�剅扷);�逪9蟓S瓮(W�(猞樨藟︺炗4躏P(�IUI�SA$笥�,褀5�c蒺� +0襋V'�9腋o" }Hg�-ゑ4姼i<煙�螏� +臆j櫰霅T�笭D误t�Y鳨沞� �宼斦Ic巰4顩HC�覚y i<�"n$=;9=>:Wi鎴1~妱�!�*䴗箴┰^�锘F 倒H�宼斦Ic巰4顩HC�覚y i<�"n$]]Q吷杝�,幹#猨夬9櫞�,閇E 蓧莼�+�(��p�7嚲 �3�鄕E\8�/K葨舤�QU1�2n樗蘽�k� +{2`悾�s恞��6@翁[ 鉯q嵋�/�钒�;灃鐀F沭r$U%.デl魇!鷛3Mc肹�駧�:o�鹌}o枸�;3o釐膷歼]\M徬�6S�厄k$鍿X-挭�W�7wy綋3?c鳁勧}P(繾GY6�`憔 6鬽�潤防朴(釨亟gq�咽2�IUI�sM槾6O@鮻嫖/釘��t扷A;��:蟓兾�@W�(鈌�'錬藯KQ"$U�=靱鷫浫輎ec圕&噜8聘S�#v�0j��拘�/毭~�w鸁倡嗣醅�)抝�I剾��Ld鎪搈�≡_棥�eu紭#鄫�&佬穪pf迋O !r�:�e盟怲�� T3擕魍饭鈩 +>|I�宻斦9c巰3顩8C�螜y g<�"n�ωa顸觏婶嚍S�a棜嵴H狫\h庀�6O和�#T獒峆(纏GY7�p憔 7鬽罎櫡嗥�(釬墀O萎~�0N�/OfW琽誼5挭扚槆Q镈濬邉{4lx7 +0躋V菎9芨o� }pg�-格4姼�0n�7毱7L谕aT l �(�n�7釂� �3�躼E\8�>9{S^趁U梳UH獖}8*賬�>� �1顔7B��eu虡#缹�&绦�sf迋O 7Bw煤詫X'-^尋猟凉$满%t朎咩蕴聰��剉扷i;�逪;蟓游�hW�(釬趏_Ng裎羠d[聧Ux)挭扖槏涴Lm朇遟Z蘃聦綹C�:赎�1G�鱉o胩紖5濬7嶌檎樗镺}鲀2i4^叅o�!V漩B蛅x険o滰�9赎�1G�鱉湣o缣紖3濬7稯?\\衄更e�(m餔$U%呅\懅衶�據,刘館(`s琿吣�6拔蘙X鉯q覿F臛誛訐�梜m鉕訂W�"�P釞 �频m|軚�%:W饿黙拝靏聩帷恍硍�!撜��海�]?|紐�1=)濾Q{{骄蘧zX�碲麕鷻哷#�*B&�+锃�穻ok/� 裈诮D�*汿{�币课祺*�>埫峦&惟gy' +罞m�$申��1顩1鬽臋y� 朴(猞彞/�>�lO軼'嚙}w搮O澭欴Q%.� [;撶曳�4rxw彷壀��k�1�巙涡秮2毨^蘟鲁��<躧彆!J�$|� �<獴�5侔韺萻�#~{祥7�酹M僗�+Lp�'复?墑幓僆�$咛笄膈<>{逎蜲銒'L崯簅锞绎锅炗韜~!┗+艅玵篫魔w●壟碜e達?�QL粽�� O�endstream +endobj +4718 0 obj << +/Type /Page +/Contents 4719 0 R +/Resources 4717 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4756 0 R +/Annots [ 4721 0 R 4722 0 R 4723 0 R 4724 0 R 4725 0 R 4726 0 R 4727 0 R 4728 0 R 4729 0 R 4730 0 R 4731 0 R 4732 0 R 4733 0 R 4734 0 R 4735 0 R 4736 0 R 4737 0 R 4738 0 R 4739 0 R 4740 0 R 4741 0 R 4742 0 R 4743 0 R 4744 0 R 4745 0 R 4746 0 R 4747 0 R 4748 0 R 4749 0 R 4750 0 R 4751 0 R 4752 0 R 4753 0 R 4754 0 R 4755 0 R ] +>> endobj +4721 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 702.8842 216.9034 713.7882] +/Subtype /Link +/A << /S /GoTo /D (a00148_g969d7fff37a979737da045e0d538a9bd) >> +>> endobj +4722 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 663.9813 195.8725 674.8853] +/Subtype /Link +/A << /S /GoTo /D (a00148_g22fa0681cd463191d7a01fe85d86996f) >> +>> endobj +4723 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 625.0784 195.8725 635.9824] +/Subtype /Link +/A << /S /GoTo /D (a00148_gffcd2fbe181e2aaefbf970551c302af5) >> +>> endobj +4724 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 586.1755 195.8725 597.0795] +/Subtype /Link +/A << /S /GoTo /D (a00148_ge23534479ead15af8ff08ace26a47fb5) >> +>> endobj +4725 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 547.2726 195.8725 558.1766] +/Subtype /Link +/A << /S /GoTo /D (a00148_g165b603ec150e26efec7be199c9c2901) >> +>> endobj +4726 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 508.7434 180.7494 519.2737] +/Subtype /Link +/A << /S /GoTo /D (a00148_g69a7a4951ff21b302267532c21ee78fc) >> +>> endobj +4727 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 471.5241 169.3122 480.3708] +/Subtype /Link +/A << /S /GoTo /D (a00148_g118e9d76568ab81ad97f138d4ea1ddd2) >> +>> endobj +4728 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 457.4674 214.6224 467.3951] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6bfa488f87f68a6f7f4a3efb9e45eaf8) >> +>> endobj +4729 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 444.4916 216.6746 454.4193] +/Subtype /Link +/A << /S /GoTo /D (a00150_g39ce739bd352d7e348e37395ce903e43) >> +>> endobj +4730 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 431.5159 206.9409 441.4436] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf848ce44c810492e7a35c2d23a429f45) >> +>> endobj +4731 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 418.5402 193.6609 428.4679] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf0ed78fd2be24d849cdd5af75e3b2674) >> +>> endobj +4732 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 405.5645 200.3059 415.4921] +/Subtype /Link +/A << /S /GoTo /D (a00150_g57e6dc1d58a36d0ed53a3dd29ccc5798) >> +>> endobj +4733 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 392.5887 201.9198 402.5164] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga4c4310e54f18541b09e1e251fe7b22d) >> +>> endobj +4734 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 379.613 229.0778 389.5407] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf84316f469ce0726985c0702db49a989) >> +>> endobj +4735 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 366.6373 220.769 376.5649] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2d3ba4b14d6d2f6576f9b547800b7945) >> +>> endobj +4736 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 353.6615 193.9898 363.5892] +/Subtype /Link +/A << /S /GoTo /D (a00150_gabc40c09f49d15acb1b1a7f02bb3a807) >> +>> endobj +4737 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 340.6858 199.7479 350.6135] +/Subtype /Link +/A << /S /GoTo /D (a00150_g041aea91aa6ef84dcc6cac3c51db9b2f) >> +>> endobj +4738 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 327.1074 243.3742 337.6377] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd605357e29affb0d3104294c90f09905) >> +>> endobj +4739 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 314.7343 252.8785 324.662] +/Subtype /Link +/A << /S /GoTo /D (a00150_g5c97ae587595b5444be80f5ecc1d3382) >> +>> endobj +4740 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 301.7586 224.6544 311.6863] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf0ccbc3bb2a3ba1ebc255c7b3fcedd24) >> +>> endobj +4741 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 288.7829 207.4989 298.7106] +/Subtype /Link +/A << /S /GoTo /D (a00150_g28eda870cff3d8e3cf2949e6f57a502b) >> +>> endobj +4742 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 275.8072 221.3369 285.7348] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga5e3c856b86725125d19fccc34cd9eb5) >> +>> endobj +4743 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 262.8314 218.5673 272.7591] +/Subtype /Link +/A << /S /GoTo /D (a00150_g8af482dec973db57d8b3bd3f69461488) >> +>> endobj +4744 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 249.8557 234.7964 259.7834] +/Subtype /Link +/A << /S /GoTo /D (a00150_gae59b70658f28ee6e998eaaab05e423f) >> +>> endobj +4745 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 236.8799 224.5549 246.8076] +/Subtype /Link +/A << /S /GoTo /D (a00150_ga533c394b1fa0030205534befa31c525) >> +>> endobj +4746 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 223.9042 224.5549 233.8319] +/Subtype /Link +/A << /S /GoTo /D (a00150_g160128ab5d2ea3cc497b91ee4eb4ef99) >> +>> endobj +4747 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.9285 211.9222 220.8562] +/Subtype /Link +/A << /S /GoTo /D (a00150_g64d9affc680a445d708234e70450477b) >> +>> endobj +4748 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 197.9528 222.8911 207.8804] +/Subtype /Link +/A << /S /GoTo /D (a00150_gfff0ed43201bf1e2020de1a0d6cac070) >> +>> endobj +4749 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 184.977 219.2748 194.9047] +/Subtype /Link +/A << /S /GoTo /D (a00150_gd135fb0cfdfb2c212f0f51865a3640e4) >> +>> endobj +4750 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 172.0013 214.1439 181.929] +/Subtype /Link +/A << /S /GoTo /D (a00150_g13dfcb4a5f920e108253ade527a66cc2) >> +>> endobj +4751 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 159.0256 211.7529 168.9532] +/Subtype /Link +/A << /S /GoTo /D (a00150_gde29ec025e6754afd8cc24c954a8dec8) >> +>> endobj +4752 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 146.0498 238.2734 155.9775] +/Subtype /Link +/A << /S /GoTo /D (a00150_ge0825474feee11b4e038bfe71757875f) >> +>> endobj +4753 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [289.3868 130.4285 318.6011 140.3338] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4754 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 107.1469 229.7753 117.0746] +/Subtype /Link +/A << /S /GoTo /D (a00150_g359951eecd80541c2101f628a9da9146) >> +>> endobj +4755 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 94.1712 223.6882 104.0989] +/Subtype /Link +/A << /S /GoTo /D (a00150_g517c770991459cc62dc009c0d3875c6a) >> +>> endobj +4720 0 obj << +/D [4718 0 R /XYZ 90 757.9346 null] +>> endobj +4717 0 obj << +/Font << /F29 499 0 R /F50 1172 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4759 0 obj << +/Length 3015 +/Filter /FlateDecode +>> +stream +x诘\踨7}譝癹_孄%弅菈]泹諵�棆)�塗(蕩麟�13��箃廲m笿$�3}}C7f$编餙,_8鉞P�..oO#'Ⅺz �/K�?/NR咵`罦桓竕$X翆rq眫{*�?[� �;}xuo ?尫o^no6砘囒皖�:n骰硍疧究却漋FYI�8y麕/譅蓦蜹餱�>p&B悑�-U鷓s蛩�矞鰦鎮迸暖椧礙橽絼�:xU,^p舜騴慞�縄i�+緱F- +q� "H協乕[扊m靳峴观 樀eN:Q3莖;葲R�'t鐺�:挈�3蚈�?.蝿?/嘻:I移V� \)-笫欽崞BJ8匹钟�.槸寁6芚x缤�.yg"熴p\崄躨椏z�8])�,'瑨Q�:RY&MO闱芪5阄鷌�添 F�c,軒骹窏�3躛懴q;@nr���臌芴=苆� +E蠯翙諁z蒅黮僠6濱?�南F�e|�3翛黒褚~g鴻Pc 7�犄福E`P�n唽"藺D渣c鵯剮�;v 傈渀礋1坡�8o鰏�;孟�?鉰 �&?_<燆3tbN� E餕�仿拯� m 揓媔G萄 F;c,嶓fG椉3]懴q4@頲釣Li��>A 慟�Rq ){鄦We��� +嗄XP嗓穎:( + F芚螞儮錆鶞犂�葈 娚鼑[K鐀Cd � 鑲"腽旳�S蕠闋(XP$c8o姃wFPT鋝�Wc 坟噻廻P`�(�锗1(�詀�=羵12^�p�4�&�5^�9}n侈\輳D嬹掗��+%墫 #�e|��7EK舺l�9�扦3=f$TZ8_j脏A伧�繊W�.=~�-�%攕碶撢%\鲱N朊P�xdj肧3�瀲櫞�+� 懵1a迓X铏L5廌G媇鄦兖木�*.]槑⒐;Td~彻;�)w汗肯mMA輄弹s:6�.`�:薒0W河YH礇钤峍q海鲫 ���%螞�璪瀾h� +}�3 Y'甝N碕�&�,昲槆奃C葔V蚩躏茒=@m迎A 纀0凌��膟s 柤T V�3bW�/暜1醏智L心�#cQr胉n皵�7㈡剸眰y-qGe�諆@ �豖�"跛囕e,礳潎v +鈜zv)綠B1∪H蔫'MqX拁:摪塴�bh聜�&瀻�'T鐺�辪G省0� 忽"埈g殯�8N*i齝親�'雕-乾徒D#粄�5&H踲疵vu除o迸_uQ8箯k阮`鞊l鉠乒ь沝竻@,rq��%/�鳒嗯�萂醷�9n颋q亯#5BBQ鬪0c�6>駙譍�� 愷�}箵綄勜�艵t�E荹蔓抟壃mN'綒櫟粟{偓呚國譕挾 +�-au�+萌�-"iK穰喘x纱g�-∨@nJ蹧睚q�f璮R(K� �(vg欍衸远蚙�-)莒�'<チ@.挼�9豏癀gA�9瑞抟秭�#柗 +蕼岅问�嶄m咵 ~9��6K�仡>�忹铛簕村⺪s箥Gx泆�Q擵�3i�殧6�)a╗�F!Ki�7蒏�='-rSJ?�&捼k榞P+$棚-L*6衄?氃p曌z�炘�/w:�!椰 囊3� 柭@�*壣ぶ�)G5澶n褣J�k搝�蒳%�V=MN C瑆TN'澯吚>#�>)JMi�3吭.孳鍉7�7c祑誴橯Cnnv^�,借ph屻<=揲�'<碟佨r鯖藨瀡A 怮=tL(琥) 堚y芁d<〢_.y8c8 $�姝6�!蠸� } sh屜�=腚ǜ�呟怪蕏耑C箵錣�衊圠�(奨)彈\1#綕Y� 4V�,j鸺K挭"楒>彭甄臊}|赶U橮鎡睳� 檨Y騃甏剳蹷縃蚤 #雝)榻轙�+^谗g鬪�箯� 粦#圼萚� Eq;坣▊滇� +BNAS冢WC磂眅鈊镻f�:疄�?� �朘襧f綔桱嗓刯跍h鉌彣[wp纂p.mR%澔= +;巰鴆N�(5g螒нF鏞!饹�B粶e蚻睘鑥�B:T薳F ^茿曣Yg仭只乽愘⒚S�--佰淚s鷜鳫竵龣2BF*H鍣2�"c龓0佛0�Oi0怟�;q�=毎@Ba 僡躶9X袯�ht擃蟋曬劦唕c�稲Q雌3藚玦T�晢y5鱥�峌�k藅ja瞠^扜匿i唟q>��2鷓鮨8椛躩畞2�0蠵畲伂aF AX(�(b脎坭1q$`�椢貔��↗搘.J栂D�銛oNX$\睮昲�6煌l懂蠠Jo^酋> endobj +4761 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 727.7951 225.3421 737.7228] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf72d7b9a737707dcfb2c41fec2b6792e) >> +>> endobj +4762 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 714.8475 234.7566 724.7752] +/Subtype /Link +/A << /S /GoTo /D (a00150_gad0321f4c570f9983c6de81ece3ddc20) >> +>> endobj +4763 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 701.9 209.1527 711.8276] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6bc12c6c7b56f73ce5d57abfdcdc6eb5) >> +>> endobj +4764 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 688.9524 220.2212 698.8801] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb948296aea6b6b3aa1f156799c4d479c) >> +>> endobj +4765 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 676.0048 218.5673 685.9325] +/Subtype /Link +/A << /S /GoTo /D (a00150_g17d111686f98e4c09db73a770ac3f1a4) >> +>> endobj +4766 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 662.4546 229.0778 672.9849] +/Subtype /Link +/A << /S /GoTo /D (a00150_g6f2b90c597ec23f39ec716ccec11233c) >> +>> endobj +4767 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 649.507 227.424 660.0373] +/Subtype /Link +/A << /S /GoTo /D (a00150_g15f2617f7dc1713f9d10282125c6027b) >> +>> endobj +4768 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 637.1621 227.424 647.0897] +/Subtype /Link +/A << /S /GoTo /D (a00150_gee37386b2ab828787c05227eb109def7) >> +>> endobj +4770 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 579.341 170.966 590.2449] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4771 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4642 579.341 229.3566 590.2449] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20ceef9d0868d391c2f33041b02cb1f1) >> +>> endobj +4772 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 540.4944 170.966 551.3983] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4773 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4642 540.4944 229.3566 551.3983] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ebb4dac683163840eab9c6c41ad61f7) >> +>> endobj +4774 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.2787 527.5468 204.1712 538.4507] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20ceef9d0868d391c2f33041b02cb1f1) >> +>> endobj +4775 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.6693 527.5468 257.5805 538.4507] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4777 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 470.7019 166.9111 481.6059] +/Subtype /Link +/A << /S /GoTo /D (a00145_gc48ed5f0d27721ef62a3ed02a5ad8d2e) >> +>> endobj +4778 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 431.8554 180.1912 442.7593] +/Subtype /Link +/A << /S /GoTo /D (a00145_g22f140b02c354dfebcc7ad481c3bcd68) >> +>> endobj +4779 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.0068 431.8554 208.6941 442.7593] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4780 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 393.0088 175.2098 403.9127] +/Subtype /Link +/A << /S /GoTo /D (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) >> +>> endobj +4781 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.0255 393.0088 203.7128 403.9127] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 354.1622 185.1725 365.0661] +/Subtype /Link +/A << /S /GoTo /D (a00147_gaa585784b0914cac1d37f07f85457008) >> +>> endobj +4783 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.9881 354.1622 213.6754 365.0661] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4784 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 315.3156 152.9837 326.2195] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4785 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 315.3156 211.6433 326.2195] +/Subtype /Link +/A << /S /GoTo /D (a00147_g8096b0c4b543dc408f4dd031ddae7240) >> +>> endobj +4786 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [215.459 315.3156 268.3701 326.2195] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4787 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [307.2043 315.3156 331.8917 326.2195] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4788 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 276.469 171.8826 287.3729] +/Subtype /Link +/A << /S /GoTo /D (a00147_g04b053a623aac7cd4195157d470661b3) >> +>> endobj +4789 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 237.6224 172.9089 248.5263] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4790 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 237.6224 236.859 248.5263] +/Subtype /Link +/A << /S /GoTo /D (a00147_g79c4110211247df3fb30b8cf1c4c02af) >> +>> endobj +4791 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.6746 237.6224 293.5858 248.5263] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4792 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [332.42 237.6224 357.1073 248.5263] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4793 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 199.1494 138.5977 209.6798] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4794 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 199.1494 162.6772 209.6798] +/Subtype /Link +/A << /S /GoTo /D (a00148_ga22b04cac8cf283ca12f028578bebc06) >> +>> endobj +4795 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4928 199.1494 191.1801 209.6798] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4796 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 159.9292 183.4989 170.8332] +/Subtype /Link +/A << /S /GoTo /D (a00150_g266263ac78a1361a2b1d15741d3b0675) >> +>> endobj +4797 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [187.3145 159.9292 207.0205 170.8332] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 146.9817 138.5977 157.8856] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4799 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 146.9817 189.7953 157.8856] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +4800 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 146.9817 218.2983 157.8856] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4801 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 146.9817 266.5273 157.8856] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4802 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 108.1351 138.5977 119.039] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4803 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 108.1351 197.5461 119.039] +/Subtype /Link +/A << /S /GoTo /D (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +4760 0 obj << +/D [4758 0 R /XYZ 90 757.9346 null] +>> endobj +4769 0 obj << +/D [4758 0 R /XYZ 90 596.0036 null] +>> endobj +4776 0 obj << +/D [4758 0 R /XYZ 90 489.648 null] +>> endobj +4757 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4806 0 obj << +/Length 1902 +/Filter /FlateDecode +>> +stream +x谕Z踨�6}譝鑁�a`q蟘.�$3m幽镃]弴杁[[vti浛顱"`�C牵1)粄v愗愨Z:訰藚Ntx噊�瓣q佅�瘊bpvvh塙爢粉# /#C缼 恡礄?熱嬡飊乡齿甄夙l9ff4[L躘F�1c荳�.蚂9�ss\^厌I~P颅懨狂�f- 缚y|�瀑=貇`�暷p3,@颲乑`� S��乆蒁费H丗F銘�UDp#�鍸�'�l趢Q�H>�l�(�5 赘{孓Y轚�>擒㏑YvWc穉陑茛�5Q攭$= 翿潷'(�X枮钦橥煰讚缟真盜(%VsH�,*C('Bq垧曯�1醒觸娮蒥鑘 +刯� � +\蔫-I��(�5X|j退爭蓻騛瞴(讜苤髡排汷粙蓸裳齦庳n偷}鏖秮.w�1#賨鬓|膤}銥n狾晪樗擈鵼Z甂襡eaL霌HMi傽�3R 艾遭彇Z啙钦廿霸2�<甆=紮vJ�-褾,<(3=J�绾峄濨C<轔h1:!�K 黼��嵭$P\舸A匂暈1T焺+f\炠曻咔F錼^�<蘓{姺磼唥A梤c@B�朥nj苾暃a鐀5v砄窣P杁譝竆b猡&宋汴膦Xj扵梼~N:-爎�+凖杔L莽胱.瓤�腔熰�+nァXb5魦�澬n�92^|�熀U璀呁甓gel冤5�,懺饟5)翖虸妹蛞�躢� +暃7}<疧苙畛s\T溋 ヂ�,惶My嫚� � 倝襏醩T[銁T9矱{j↙[蕄bn$ +g �3疛翀�0膛9破u逼佰U嫥F绽u<�'鍅⺄晩愍j�#Ya妋N墥�4@霿s[�藝v4囫Y?�. f楊識�钭2�<甆凗a秇鼱�:I癙@岆� x軒hir粬�%d肪�璕祕B]`兄瀎o"皅5落�&枍鮴溃c=梦鉰鞙m'O媣4Il�I咵@电 &AkXf_齈瓵ガ1o麝=>氟指烧[ i廄Vr�YFs槚�8,箥I��+撏r9鎧4[瑳�讣倌U昻夃>翃�裂鑆�R◎y顇}$�yD则觇ψ�xid�怼穓�/鲩\@奯@櫃璅W`�霞睚唿/_�hBt烝莯T攛X>L3'iv!Pbv蓾b娸�;� ;彨硈}騞隆EQ+B]s渢Y@�&莑)卬樻Rt� fjM厦�滼��&磐燬b巇rT趭宅:z箎Z6�)団f^ヒ侦鷍�浨焼'諄&譛wv0~��C樕6 �N<嘌律绑�魂魆氄榝�$�"犣笞��)攔薨尉&腵e�-雝[楞sh崨�p�?  p靟︽�:�9戫D辗帡C襹昧q鍰 杙瀔8<*/垪釒證抁怌D瓱�)霏&;)�E擘竕谦D� +撯XPzv�分�>窭X雗>8W�愝R鉧鶒I蘹x踏賲爥�9棳皱狠J姈銗じ�眨Qb纝睘¤q{)禨� \舜状&�F躤7n{�7`螒筺!丽�"�>晏_;誾>�.鰷Ql覱T�;o 賐`貮�<:P3�<.�%ж�%g貀\�屁k驶站塬p硵$Y� +Ty�;a�#R+擉瑖�= x糶屿俫cv蝪箸r:]铖皰�2,鹒!鱑�6艘鉠,餆P侨砋�s"�#珺逭隑d�1 凹彛忳q歖餼坍煆,鱭歟餼撳b秪,W遉.f�"I瞤嬍籜置*镟椺庽o抁poD瓱w�)钴$培�砰r痻轂�3�"堫珸竌sY\韰Qd侂誈鼺q?�8�~≤/覍��%#虧柛ソ�-f藃鞳$黽�?麐忣鋌S�0覹繽葺オ:���3嵭�0Ro�惙O�k�$�" 劍跤endstream +endobj +4805 0 obj << +/Type /Page +/Contents 4806 0 R +/Resources 4804 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4756 0 R +/Annots [ 4808 0 R 4809 0 R 4810 0 R 4811 0 R 4813 0 R 4814 0 R 4815 0 R 4816 0 R 4817 0 R 4818 0 R 4819 0 R 4820 0 R 4821 0 R 4822 0 R 4823 0 R 4824 0 R 4825 0 R 4826 0 R 4827 0 R 4828 0 R 4829 0 R 4830 0 R 4831 0 R 4832 0 R 4833 0 R 4834 0 R 4835 0 R 4836 0 R 4837 0 R ] +>> endobj +4808 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 713.8674 138.5977 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4809 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 713.8674 201.9695 724.7714] +/Subtype /Link +/A << /S /GoTo /D (a00150_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +4810 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 675.0131 138.5977 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4811 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 675.0131 204.7393 685.9171] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7023a34ba9e9d03b5fbedbcb32924453) >> +>> endobj +4813 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 592.2581 133.6164 603.162] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4814 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 592.2581 166.9014 603.162] +/Subtype /Link +/A << /S /GoTo /D (a00146_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4815 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.3873 553.4038 192.0768 564.3077] +/Subtype /Link +/A << /S /GoTo /D (a00150_g561b8eda32e059d4e7397f776268cc63) >> +>> endobj +4816 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 514.5495 138.5977 525.4534] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4817 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 514.5495 170.976 525.4534] +/Subtype /Link +/A << /S /GoTo /D (a00149_g12a33f0c09711167bdf3dd7d7cf8c5a1) >> +>> endobj +4818 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 475.6952 152.9837 486.5991] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4819 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9538 475.6952 200.0271 486.5991] +/Subtype /Link +/A << /S /GoTo /D (a00150_g788ffac72342f6172343d7f8099cbe1a) >> +>> endobj +4820 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 436.8409 152.9837 447.7448] +/Subtype /Link +/A << /S /GoTo /D (a00088) >> +>> endobj +4821 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4818 436.8409 196.4305 447.7448] +/Subtype /Link +/A << /S /GoTo /D (a00150_gf703683056d2bfa5c81fa157dcb20fe2) >> +>> endobj +4822 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 423.8895 133.6164 434.7934] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4823 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 423.8895 177.0532 434.7934] +/Subtype /Link +/A << /S /GoTo /D (a00151_g2a0cf5d86c58fab216414ce59bf1fea1) >> +>> endobj +4824 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 385.0352 172.9089 395.9391] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4825 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.8791 385.0352 239.8777 395.9391] +/Subtype /Link +/A << /S /GoTo /D (a00150_g210f227119fc972e6222c9cb452e15a9) >> +>> endobj +4826 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 346.1809 172.9089 357.0848] +/Subtype /Link +/A << /S /GoTo /D (a00095) >> +>> endobj +4827 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.4071 346.1809 236.281 357.0848] +/Subtype /Link +/A << /S /GoTo /D (a00150_geb533744817cf6695d75293369c2248b) >> +>> endobj +4828 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 333.2295 151.3294 344.1334] +/Subtype /Link +/A << /S /GoTo /D (a00093) >> +>> endobj +4829 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.8276 333.2295 185.3713 344.1334] +/Subtype /Link +/A << /S /GoTo /D (a00150_g9ee50a40597e67fce96541ab56c3b712) >> +>> endobj +4830 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 294.3752 133.6164 305.2791] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4831 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.1145 294.3752 172.6397 305.2791] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb4ef6b00924990e7a293f66715b6d1d1) >> +>> endobj +4832 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 281.4237 166.8215 292.3277] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4833 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 281.4237 221.3367 292.3277] +/Subtype /Link +/A << /S /GoTo /D (a00150_g7d3673f52f5846b6961d23b150decd54) >> +>> endobj +4834 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 268.4723 166.8215 279.3762] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4835 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 268.4723 220.2307 279.3762] +/Subtype /Link +/A << /S /GoTo /D (a00150_g3237be0d9ec457de0177689ee23c0d5c) >> +>> endobj +4836 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 255.5209 166.8215 266.4248] +/Subtype /Link +/A << /S /GoTo /D (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) >> +>> endobj +4837 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.3196 255.5209 213.028 266.4248] +/Subtype /Link +/A << /S /GoTo /D (a00150_g20df5c82f2a15a508c19e505b5d9de2b) >> +>> endobj +4807 0 obj << +/D [4805 0 R /XYZ 90 757.9346 null] +>> endobj +4812 0 obj << +/D [4805 0 R /XYZ 90 611.208 null] +>> endobj +4804 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4840 0 obj << +/Length 1472 +/Filter /FlateDecode +>> +stream +x诃X]o�6}鳢�榊^~� 哸[��0犽蛑�")盦泅.%Q慏It�",[圇^�~@D�"C颇p、魚A�;�氉k|款~籢技d&2�(Β脎*�"拌:CWkf彈遨w�(��.坊紐z}H他|_$碰癬}壕Z鼅荭mXI&齡襻�2dw禒�-�� %` 嬵俼鱡辐{馱Q5霚>�;a畕 {捉觿cW�R�,非楕�99瑻/� � >客珬�>蚼豚@寯Up,畭汪SpMy慲が)W灦GW, �;c`鉞师庴:Ow嫂C蔹p[&�-虼(O 菄c瀗?R室m筄珕d8(Z +:�讋蔊K闌�.薀4�J9茠擯!eE�/嬐醫1� 攽�3極蔻F瞱�4&1p�璊�%鱉彼龡衑緖▼ 衖�\饽猌Q峜�T胱_"黥G嚩k1B[ui{�-�i��!cdK颐龕�9 +I淁业(烠~4酸鐟9�鞡2�2螇zj诠哆V�*龆匡r瘹E�P")o刿WЩ缶;~輒02几朷-鏙拭*RJ斸C�*:T �蚮'MU瘖郆BL荮�2C +磰葲l^L8 Y;氓S鲌恽�蕯瀄簚1Q)詤Oql聫孖_讨驪A�[T(/毜躞~]1t絤驽苆9�==�>穆嬠围,闾7 匥 +W�8T(yl圥�JO%躜jtH �;|垇逢峻\� I樞喾(?/垶�琳� {N鶊#�il]崛購9螆幑9�<->P?nUP#鯌扝卬9_� +%F洠� f漆 +g� 喽鱮刯諯=⑾碱�+扚(Q� 茑胸瑙爾莲鋞zl�&e鸯M�沃7[鱏朥+檇婎 ;舜! +8W$N�)�1�kaA�f�&]D柢-奈醶霧gp\H(圷z盖14��3v�犵p}zh忛嫠Cy稃�&�1��蕀�0�7 n�嵗枢R貽;輠�2茲�?NVN質�萇�7G0X鎢|�荭銎疄瀛飶}�+~n乑|燖~荛)t>◥C�+鬐,g?�.呦伲琅幈䴔r�昏{la�=钜r��4o鱁~阽�;�+愃M炡联DT=箌舠g譚�礸殃H +皽鬞擰咔S�>w!Ou鞍>逽缳禐趀鹪z哳鬦O硌CO�'\�("叺�栯蕂p� +*儑娟6叱"滒X�3E訟蠅攘fE診Jm�$s2檺翼犻1�斟@釃qgY;鋵詐_(@蝻#5哀�z/4'5 K�瘗R沢譐. �z�.祔zz魀攱tBk�僩76Ks茛艴埝铦�5*圖篂┑zNk6У隬餅-�1Q誯�>{z�廦R$揜銌銐 蜶gV東TjG擳虾棶舄� p纸 瓗枡3lh癄q1蕂騷~�"7輛7h簢+[洳��宊版'渏.zWL.峲�7�7忣烚壳卉弧稺鐜Z��6> endobj +4843 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 274.5352 657.906] +/Subtype/Link/A<> +>> endobj +4844 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 201.6901 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00204) >> +>> endobj +4846 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 532.8737 177.9699 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00151_g6832e4d2d046536b6472f7ac92340f68) >> +>> endobj +4847 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.7856 532.8737 201.4916 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4848 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.8776 532.8737 256.5649 543.7776] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4849 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 494.0194 138.5977 504.9233] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4850 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 494.0194 189.7953 504.9233] +/Subtype /Link +/A << /S /GoTo /D (a00151_gb6683dd83fe1c8de9a24086d4b69e907) >> +>> endobj +4851 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.6109 494.0194 218.2983 504.9233] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4852 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.84 494.0194 266.5273 504.9233] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4853 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 455.1651 138.5977 466.069] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4854 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 455.1651 197.5461 466.069] +/Subtype /Link +/A << /S /GoTo /D (a00151_g2addf34c7d457c1a7899a7e2171ef1e9) >> +>> endobj +4855 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 416.3108 138.5977 427.2147] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4856 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.0958 416.3108 201.9695 427.2147] +/Subtype /Link +/A << /S /GoTo /D (a00151_g85b65e38aa74eba18979156f97a94a87) >> +>> endobj +4841 0 obj << +/D [4839 0 R /XYZ 90 757.9346 null] +>> endobj +1115 0 obj << +/D [4839 0 R /XYZ 90 739.9346 null] +>> endobj +386 0 obj << +/D [4839 0 R /XYZ 90 739.9346 null] +>> endobj +4842 0 obj << +/D [4839 0 R /XYZ 90 716.7484 null] +>> endobj +4845 0 obj << +/D [4839 0 R /XYZ 90 551.8236 null] +>> endobj +4838 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4860 0 obj << +/Length 1799 +/Filter /FlateDecode +>> +stream +x诃Yko�6_a蠢`索�姷h诘踿4�0m付�淡詮u莜撺D蕯)�ZFl殍灻{膝H墝1鼞绷c%2屗駖5裸[8黵D荛38瀅�綘fl悜T幆n�� A _-轔4bdzF烄他G鸸瀖�O钛�9\头蒜szR鰫攒L�!訌W疓鏦� +'R0I瑔/w駒b_�0bF嬹W鴣1啂W#N����絠�4'� *�,�嶱?Z +僕醏 ��{�0�&6AF�:6ぺ啨�蠇� "-歅蠇韡S揎蔶�睜"6嶶l�8疺魉bU瑆�_╪���;'铋鍏Xl婍諯轛她岵婱但嬲WH 剦Vc�4�侈鼁衁垔 � 聵A,�鍮詢x:祮谳U浨擒S�%i�彰&廯�a�_蘓.觖鮣[郻筸ROHp丹�3.�9挭褾�#┩橄c�矸@犊� eG懎�叁e夾-歐玞=T1�*m药kQ眴梧鉮V脫嚍鞢R鑛饎E>/>`L族羙o�/�(�ZDR=�#仚SoOmn�2磤菬�鬤 妅�5絤X��*巇銺4K嶾e'壺�$ +I蕐 }X她鶽录窭司{`C毓��.8恫`H荼驊h圯撷粸H琁�>闆鷃,r甡r`�$ACG蹫;� qL踁桦s �!�%麫﹫�;)CS'[T�n&K馘}竝#嵢笵�*rD~阢煋怒Ч藡胨�7v~U4]�4Q2潐晳@�,脷u%糨�� r阂圀〣;T疚 籂蘄叶�閫"囂Cj溤p鮌釈摺膞�.*0&Hr瑩)hAiz姟�z赟]X� n�8Y�惃o �8蓌╬喿椄脹痲梶@�32⒏咎傀u躅恻曜ㄌL�7LYo�=*2�8L�}m虝A傠觹R咑皘孉∮糾�咁�)tZF资xV险/"R�"毇L<*G-a�6a>胩c來铧甕J泮n眖�畬9,�!壺]媃虾� k1傸Y�D5慍驰�3C屻�5擐)厺荕$D妙D蓆�=(G~藃壳m�&孴(让騷攂 �(哇鯭�;爮:銫�(-#奫o�/Nu掆HK捤丟迦a浧`邵M}O#换騎+)X73每粫寭� n駲1苢s璬$�`Lq嬍袵褞�)趝P�#噞�茴D,�8O,Y@�=,邅)茽蛹m喖郦T�"鈫l �.鏖豇湂(n敖�.a�)� I娅7 曘譖nl帓�7碲荁D�1��w粼�焻鑊埨c B$瘏P泳褔狌Ld�號蹇农Gt玧盻S"&瑜L葏鍰:晞B/愑i�0�訉橻X痔a绖�3嫁�蕃櫥�虦Q� 图+W�&~^D�`h& �`l9J�P; 亴}�=涛:eg矹.�頵洸Z旙#遫L獃陛栯坻貚泆O;涆;沚?瀑�" Y�9勖蛭濇m�蜴澼�忪磰(n鑜鴶胴賎AI墱鞵9鄉j(=J�Pg��!f牫t寿骣� W�{^脟kfs;堟U耼{陬踮淝笣BB�&2泠杣{0狯 痺{�7膂.�穏TDqC稺5 朮e掄Q9z-惏�簧鑥�4蒩^� 皕週櫄髋诮�<噀蒮]篙蔧1[勿皇= +鸠骰O辙_鳘��� +�n蒘鹤擾蒿u徇�z杕吱C荟Z}司仡N�� +翀瞻F蠌—D +鵠/v誴 a4|I*慟L�铌蟛X涃蝕强?ymW媨鲀P�?1磐/姳ts讛聇媸棍#�?}soB�据袽篮豄 蝮m覃瀍ndstream +endobj +4859 0 obj << +/Type /Page +/Contents 4860 0 R +/Resources 4858 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4756 0 R +/Annots [ 4863 0 R 4864 0 R 4866 0 R 4867 0 R 4868 0 R 4869 0 R 4870 0 R 4871 0 R 4872 0 R 4874 0 R 4875 0 R 4876 0 R 4877 0 R ] +>> endobj +4863 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 636.7045 274.5352 657.906] +/Subtype/Link/A<> +>> endobj +4864 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 607.3502 196.7088 618.2541] +/Subtype /Link +/A << /S /GoTo /D (a00205) >> +>> endobj +4866 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 515.6229 216.8139 526.1532] +/Subtype /Link +/A << /S /GoTo /D (a00152_g7a7c46ffaba30477b8c9e3e61bd2e106) >> +>> endobj +4867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 503.2741 202.6371 513.2018] +/Subtype /Link +/A << /S /GoTo /D (a00152_g06ba7b414e718081998f2814090debf1) >> +>> endobj +4868 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 490.3227 237.9346 500.2504] +/Subtype /Link +/A << /S /GoTo /D (a00152_gbb56b549f7ab4d86e1cc39b8afc70d1e) >> +>> endobj +4869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 476.395 167.0009 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00152_g24f52ac52d6e714cb04a5aa01be3bdd0) >> +>> endobj +4870 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [248.2853 476.395 281.0723 487.2989] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4871 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 463.4436 175.8576 474.3475] +/Subtype /Link +/A << /S /GoTo /D (a00152_g9f2196e2705036869611962425e404bf) >> +>> endobj +4872 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [264.3448 463.4436 297.1318 474.3475] +/Subtype /Link +/A << /S /GoTo /D (a00150_gb81e78f890dbbee50c533a9734b74fd9) >> +>> endobj +4874 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 406.5914 184.6146 417.4953] +/Subtype /Link +/A << /S /GoTo /D (a00152_g2d9d28afa353f662b9bb5234fc419f72) >> +>> endobj +4875 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 367.7371 192.3555 378.641] +/Subtype /Link +/A << /S /GoTo /D (a00152_g058a8e6025f67b021862281f1911fcef) >> +>> endobj +4876 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 328.8828 191.7978 339.7867] +/Subtype /Link +/A << /S /GoTo /D (a00152_g902c4a360134096224bc2655f623aa5f) >> +>> endobj +4877 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 290.0285 184.0569 300.9324] +/Subtype /Link +/A << /S /GoTo /D (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) >> +>> endobj +4861 0 obj << +/D [4859 0 R /XYZ 90 757.9346 null] +>> endobj +1116 0 obj << +/D [4859 0 R /XYZ 90 739.9346 null] +>> endobj +390 0 obj << +/D [4859 0 R /XYZ 90 739.9346 null] +>> endobj +4862 0 obj << +/D [4859 0 R /XYZ 90 716.7484 null] +>> endobj +4865 0 obj << +/D [4859 0 R /XYZ 90 534.1992 null] +>> endobj +4873 0 obj << +/D [4859 0 R /XYZ 90 425.5413 null] +>> endobj +4858 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F14 636 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4881 0 obj << +/Length 1913 +/Filter /FlateDecode +>> +stream +x诃Z賜跢}譝蛬魻伸KPMk'u�n�(捓`$�"⑴岩$�9詯C�h`Zxx厢界蜝妼1鼞绷c%2屗馼3裸鍒T噂p|�~檹灳爁l悜T庣麋� A 蠗�&男閷试鋞s o�勊7/妘^净�-N泑{處舗;�05簽状�*�$堡烥�>囫越a膶�/�#b oF�2鱝=z;嶴8熜uq偘瞰#�7註叓U逭i泥�苮r*熉�]稛飥z7葒�;.#堧璮飱莃.ha闪匤ち麬磗鲤O菏峚o�/�垥哿义�1z鍘笾弼y敾A>ぼqA\W頒~�5f� 讟�$�'%勓\羢K轚u奉cZ#� 禜粞�l �2�>鎷耉鋄�GsE鶖嵘��2/t鑍蘼�[0j&ㄍa� 趪軨乾頯V蒻笲y梯c澪;t�(緎O�蔠容禽蓾w淤璯F嚰�婝蝓K鮵浕S庡P+�5j淄Vj�|�渠F矼$>崋9俥jrq皌c�绛顽M7Z儃HEUq鼺;�<糋mb滦D*%&蛵i�`�m昫郆蹽GZ瓎漑m%雠nY,诔F譒S-辿滿擣 S1P眹钷:雾窹.狺�:肾E鰍輞{淧偢例沵i�杔�#8O4ae�()u譖�秚韯塗�+C�*)�f尋Ji晙{R*甂e鐅�9!a�-�j&皍L琰嘇態S渳⑨�l霬宨{塿C祜&�<~檕髛vt唟纣诮ye�ш≌+~F�3Z齤刡,�.汻h糺� ^蝰淃q勺oy��粨鎒�?L泜]endstream +endobj +4880 0 obj << +/Type /Page +/Contents 4881 0 R +/Resources 4879 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4756 0 R +/Annots [ 4884 0 R 4885 0 R 4887 0 R 4889 0 R 4890 0 R 4891 0 R 4892 0 R 4893 0 R 4895 0 R 4896 0 R 4897 0 R 4898 0 R 4900 0 R 4901 0 R ] +>> endobj +4884 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 638.7618 274.5352 659.9632] +/Subtype/Link/A<> +>> endobj +4885 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 609.4075 197.2667 620.3114] +/Subtype /Link +/A << /S /GoTo /D (a00206) >> +>> endobj +4887 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.5376 534.931 188.6792 545.8349] +/Subtype /Link +/A << /S /GoTo /D (a00090) >> +>> endobj +4889 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 453.1522 237.3867 463.0799] +/Subtype /Link +/A << /S /GoTo /D (a00152_g3e1562e8a6de32268e5df92a52152f91) >> +>> endobj +4890 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 440.2007 226.8662 450.1284] +/Subtype /Link +/A << /S /GoTo /D (a00152_g03d140db75de3d3cdfbbab1c4fed8d8d) >> +>> endobj +4891 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 427.2493 231.8475 437.177] +/Subtype /Link +/A << /S /GoTo /D (a00152_gbb558f3a9b1ec015e83c314aba694e35) >> +>> endobj +4892 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 413.3216 198.642 424.2256] +/Subtype /Link +/A << /S /GoTo /D (a00152_g737337d6a51e31b236c8233d024138a8) >> +>> endobj +4893 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 400.3702 206.3828 411.2741] +/Subtype /Link +/A << /S /GoTo /D (a00144_g30e827f33eacff55ecb4d8fb5a11d5d1) >> +>> endobj +4895 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 317.6152 184.6146 328.5191] +/Subtype /Link +/A << /S /GoTo /D (a00152_g2d9d28afa353f662b9bb5234fc419f72) >> +>> endobj +4896 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 278.7609 191.7978 289.6648] +/Subtype /Link +/A << /S /GoTo /D (a00152_g902c4a360134096224bc2655f623aa5f) >> +>> endobj +4897 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 239.9066 184.0569 250.8105] +/Subtype /Link +/A << /S /GoTo /D (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) >> +>> endobj +4898 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 201.0523 192.3555 211.9562] +/Subtype /Link +/A << /S /GoTo /D (a00152_g058a8e6025f67b021862281f1911fcef) >> +>> endobj +4900 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [113.9104 118.2972 168.4754 129.2012] +/Subtype /Link +/A << /S /GoTo /D (a00089) >> +>> endobj +4901 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.9735 118.2972 218.5572 129.2012] +/Subtype /Link +/A << /S /GoTo /D (a00152_g499bb98a0b4ae9a98553ede81317606d) >> +>> endobj +4882 0 obj << +/D [4880 0 R /XYZ 90 757.9346 null] +>> endobj +1117 0 obj << +/D [4880 0 R /XYZ 90 739.9346 null] +>> endobj +394 0 obj << +/D [4880 0 R /XYZ 90 739.9346 null] +>> endobj +4883 0 obj << +/D [4880 0 R /XYZ 90 716.7484 null] +>> endobj +4886 0 obj << +/D [4880 0 R /XYZ 90 553.8809 null] +>> endobj +4888 0 obj << +/D [4880 0 R /XYZ 90 471.1259 null] +>> endobj +4894 0 obj << +/D [4880 0 R /XYZ 90 336.5651 null] +>> endobj +4899 0 obj << +/D [4880 0 R /XYZ 90 137.2472 null] +>> endobj +4879 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4905 0 obj << +/Length 2075 +/Filter /FlateDecode +>> +stream +x诃Ym徾6_a�*5藈JAq�6籌搆z箥 磆婤k踊jl蓵鋖鲞逷$e結rzA�1E g喢�)2丘徧#黭並z晙h票珼W 嶲@^樁恚帘0�6=M择�$椒OTq瀌G軪堕瑧mt謿N犬� 裂>賟鏻颿稽v|� L鐡嘲u辵��0浍) SN�2`1d┥LV肕荢v蘭�!晓译颢�Aa_n�z�<褏旾尧择崎r*�&) 隢战 "��;g� 煋景>].H�楒0捛饖潹 bk�6羖挗虛�5 嗀H!I9瘎1�&�敻逽餤T��$ 鏐D堚圼铓W摴m蜻�/�觡极sv讒� EゃE7鱴�)�=m�6r�-a�/搕�;n`9$� fU椑伃Y�3鸌凚5鴀 ,Y蹣鰟�e鯛 C�(�' +�0X钱魑 q<嚃e'4 +]Z�躄/牠鷯7沑EK�?Us妛户�磷�蚶!样掝灛辒k{~~貊襄W_贱彐z羜pu}}kT)洓Bi胒驥 �(JL(珼?a3-4b鸖�:1c諺C歮闯jW賺謅�Ir0滉r飮��&綝�5i+>頙蹜g荝/�+l撸揄l索��� 打T涣�>L\嗳M簼#&鰧崣�'菤姏雓dr=攃饷a棳擑蜽Sv]�<�=/U莽s泳s怡褍茕��?韸锾`诤2俩�9+ヅ�9;雵8谨eZ曻嵿1)m隋|h箿�蔦qぐ8_�7�* EJ萇z藾~�++E礨KM賲 +9翿俄~贡壙熰笵�*�1~>羬�)7zz�嗶m~wK% +逈簆<� 葌� 鐠5�"��#脪A鮂E膉�瀲啾鋾莗柪 + +醃蘮樌泒掙��=&阌烔衙�0<[橋爌*}贌f}z邫攬a糖'赕I`搥诧1[�0B倱)哉bUq雼﹏捍嚄f藜簎峿�9钇鲵l8莨阁袡{猦逃洬昧��#鞷"襅#謵玁 ��$窏->SN]B 怰~杊M�⒄b揇祒"趧]O礀輎⒌峗@� 7zz=裋�{N�a蓧x�)�!纼@~n櫀�鳫$︹2�5凣汝ボ癖紸�8J \&{�.焪�X+A趨�|堊婕gomJG�6G妲普&罽茟�#@ �,[懓邟&!橮婱2々p� v=Zv�6~&荑轷L附箊黝嫱�?耣忄邹(T1|*誙]� 9卌'U嶝茏s�7S�;布燔�U滿!. +娇僀�)菆b鯔@ +G%�$H截4H +茾:n�i宇 m�ゃn趑禓洬_Y蝈M�6R怘餌8j� ?(�*Gt茑�,@�j茶B�7で@锱Z賩L鯣髻鋽点磵鴐n.[b}潠涻謈殳G鼤p]磚╝3zu椒5_叶�鏝W遃慦桷ɡ竴益�7g�罙棁1 2 頊壗 喌#襘o�=CBm謙Pk+ 贷 檲+泭^闠C绔Q煁搌苉�� +孭鲖烸鰧b�抧盘w栨'A+峱{G轿>>蓦�N�栈謭��鳣桦endstream +endobj +4904 0 obj << +/Type /Page +/Contents 4905 0 R +/Resources 4903 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +/Annots [ 4908 0 R 4909 0 R 4911 0 R 4912 0 R 4913 0 R 4915 0 R 4916 0 R 4917 0 R ] +>> endobj +4908 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 630.6989 274.5352 651.9003] +/Subtype/Link/A<> +>> endobj +4909 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 556.0563 192.2954 566.9602] +/Subtype /Link +/A << /S /GoTo /D (a00207) >> +>> endobj +4911 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 392.5288 225.9098 402.4565] +/Subtype /Link +/A << /S /GoTo /D (a00153_g51195ea7cd5aa387a87f9d3b23905b62) >> +>> endobj +4912 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 348.6697 246.7912 358.5974] +/Subtype /Link +/A << /S /GoTo /D (a00153_g9069474ea570fd78c481aa164317dbaf) >> +>> endobj +4913 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 304.8107 245.6755 314.7384] +/Subtype /Link +/A << /S /GoTo /D (a00153_ge0f8cbeca9731af2171ffd37e79de893) >> +>> endobj +4915 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 210.2945 187.0159 220.2222] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb61381673de27f31848c5396bf0b338e) >> +>> endobj +4916 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 166.4355 233.6306 176.3632] +/Subtype /Link +/A << /S /GoTo /D (a00153_gf963fdea2b75d27ef31e92d1d01359ee) >> +>> endobj +4917 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 122.5765 248.0566 132.5041] +/Subtype /Link +/A << /S /GoTo /D (a00153_gc3882366feda1cb759ccbfe98327a7db) >> +>> endobj +4906 0 obj << +/D [4904 0 R /XYZ 90 757.9346 null] +>> endobj +1118 0 obj << +/D [4904 0 R /XYZ 90 739.9346 null] +>> endobj +398 0 obj << +/D [4904 0 R /XYZ 90 739.9346 null] +>> endobj +4907 0 obj << +/D [4904 0 R /XYZ 90 715.6224 null] +>> endobj +4910 0 obj << +/D [4904 0 R /XYZ 90 491.4899 null] +>> endobj +4914 0 obj << +/D [4904 0 R /XYZ 90 228.4871 null] +>> endobj +4903 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4922 0 obj << +/Length 2097 +/Filter /FlateDecode +>> +stream +x诃気s鄹肋齏h��屸浝藉l%q踚获�ms�烪^.� E�j<灡@r够X�X�$# dゑ( 覍搜b}咷Opi.熋鮯_嗲儋咿R=襀K*G城J�$HPBG冲/cⅨ錅j蕭qy� �� 聈鉳禞胫鍁QM1/岔f蜊烀賢嫣6^ &�1�/酷�见p�覬尵�FDk:Z焣熟陵祛�NO}『醁�a莧G褺P�= +組贽}筶捍豱~艠>暬�丈韹i缜簝9"T隐 {�� 2�q^弎鎃J拧-傖.*X丌搳�%i,e垲_柀辂&��%4!仆ポS#筚w檬擒梃瓰耪�<漃 拪E"牥A@DX尧�H窣滽%慥j嬂#nJ^� 犩D珣3n�&殠�偳O湛U氉磡M嬬tW�Wy草土蠖\-膂Cj羀緻5g3K^�-P壼{橦劑N耛mzJ"\恀^ツH)?m庲昴⒓� +糉靂^[v慵秿�5釬G臊披榕唢綷��DB�(g毄S彦 %<墤跦镣燷L�? 陪�溴:锴诽-簝恊%J懽A�1b�8皗u!^僃疄�代枃�翎Pk 折洓.�BE�褕Jq2�芿,x S+Vq暗��櫗藆}0_o薓3巒荬�(w� �&┙嫦铔tQM嘟< +郣 雽/}即C(Y3Q\�祬��濭@�|'E?hq蟸漠吙e7N埒�#nt糈x3醲|1机玺郁�#�(傃� J�'鎭�鐦F蚶��/�"莪惩�0�*)戆粆I7冁┟~#稕p1�6逛 +�!Io騪 �)翹蘽�=�1虧Xi_a閳]媡薾槎�HG荑璧H�1﹌醏 4GL鑃 f.��*Vv8炳駖S�l祃求.瘖�&輺蹫牒鍙а憹C鞥a*�皣蚌姯:璛淣Oa埼癩Gw�-鉉� 谎裬辄xu7涋|糊<戰艉淏1� 垵籍�么湊禧1]ey� 缼U3R(5廧+�*�2Hi%塒昴� +擣靂J[v銛秿�4釬G�?炕4暳� !�,�4Q匩` +骔$$)I艍安臄�賶漗8霜V畺甡^螊筟筫姗,�2趸*&!�"V^臶$仸轛,幏�0剋禺蜜�;飽�!x囕梃祒變飫mwgM遚懓R1`u拇詍X/Pn髣﹣9釯噐膴�鬺�質U垣舃g�8鏇|濆箖饺�0�杛Xo钏�&蔝烐韺2$庄�>V圛[�9�8麨�鸻粠}哳鯷茋�v#撞��熁:F屄� 創妜@ E +鴒{狕袪欯mJ�0魙�鶱l�>O糧喫}-猌~ 衴轀識yjf莽u=A纘7@褅怑2^gE�-晹檢孌c暮朝�T�`K椊塃F4a霼婮�*鰵茐E薟H瑘]沊-获膉怷7:z侥蝴譓_n1x@傫p,淭� 矹H#絧� +j<膀颔C〆碰⿻0/掂昆V码詡s6禒9� fucpO�怑塌稹毖櫖�僈�蹧heh狤~/蛹hL�)駜`@(`楅�-飽i憾骬杯熺ざ措駌摋婨氱忓�?[﹦ 易Y嚊馲�$�wb駆�啿5l譭玱w@抖�芍��6[↑靠净;6j.T8 +N*b�褩囇�~4K�/o锂�=9ov胪6燎鼢�7濗�6�桜 �宧�嵣皩鳐锬ZuF祐诠\m�75 蹧DA估入�4el诊蘑9�+ 銬漠蛪栞xN磵葔�絥Y4綐�7?]輁轓��詝{�JF"�v噻�5抗Mp%bZ��`�┞^�/�HwE鎊手��"袜鬫 [卨耻~澙袿)���:擱X榪.b擹�8�粠R哳J[茋Pv#讔躓讇鑴P<~s5�o刻:�&班謮 +臝E紒�痰�zA乢啣H�'"邐泔誾梪k7X鐕�痕Uy1�v皕w#yWY呎I醓[K镍癇� +D1>簾�!訢 +鵠耈9� F筮FKか輳�#_喋尢骑襇簺籑 磌埒`鷂6�6盔蕕犕�-凫.N╬}t? |鴉? 跾邬$衸玤]螈�?��'endstream +endobj +4921 0 obj << +/Type /Page +/Contents 4922 0 R +/Resources 4920 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +/Annots [ 4925 0 R 4926 0 R 4927 0 R 4929 0 R 4930 0 R 4931 0 R 4932 0 R 4933 0 R 4934 0 R 4935 0 R 4936 0 R 4937 0 R 4938 0 R ] +>> endobj +4925 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 701.9494 188.6795 711.877] +/Subtype /Link +/A << /S /GoTo /D (a00153_gdcf372ff9748996f7c05e9822a615384) >> +>> endobj +4926 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 658.7078 254.552 668.6355] +/Subtype /Link +/A << /S /GoTo /D (a00153_g92f3344ec8ca46893163399c89fafed5) >> +>> endobj +4927 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 615.4662 227.424 625.3938] +/Subtype /Link +/A << /S /GoTo /D (a00153_g196379ceb1219a99f4495e41ccc9bbfb) >> +>> endobj +4929 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 522.401 235.8724 532.3287] +/Subtype /Link +/A << /S /GoTo /D (a00153_gac0de06236b02659460445de30776e00) >> +>> endobj +4930 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 479.1594 202.5175 489.0871] +/Subtype /Link +/A << /S /GoTo /D (a00153_gf5fe83be78b78b9e7d9e7f1e34ab1cc5) >> +>> endobj +4931 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 435.9178 233.4713 445.8455] +/Subtype /Link +/A << /S /GoTo /D (a00153_g8f4ebd8ef6c0ea665ed351d87fec09fd) >> +>> endobj +4932 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 392.6762 215.0208 402.6039] +/Subtype /Link +/A << /S /GoTo /D (a00153_g51c1cd531ff0afb81620151f2248cd21) >> +>> endobj +4933 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 349.4346 187.9025 359.3623] +/Subtype /Link +/A << /S /GoTo /D (a00153_g15de27b044603284f68db05a378235a7) >> +>> endobj +4934 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 306.193 211.3245 316.1207] +/Subtype /Link +/A << /S /GoTo /D (a00153_g67cf1e0d2324c93f332c1f020c0fe8b3) >> +>> endobj +4935 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 262.9514 231.2496 272.8791] +/Subtype /Link +/A << /S /GoTo /D (a00153_g24aa5bc36939cc9a0833e1df01478a7e) >> +>> endobj +4936 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 208.1483 211.942 218.6786] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4910467b83a639f06739c82cd362037e) >> +>> endobj +4937 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 165.5093 259.1549 175.437] +/Subtype /Link +/A << /S /GoTo /D (a00153_g5b9dba2123705bce1ce95c3deca0bdad) >> +>> endobj +4938 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 122.2677 272.6941 132.1954] +/Subtype /Link +/A << /S /GoTo /D (a00153_g2bc3b489923793759526a3181eb667fa) >> +>> endobj +4923 0 obj << +/D [4921 0 R /XYZ 90 757.9346 null] +>> endobj +4924 0 obj << +/D [4921 0 R /XYZ 90 719.8332 null] +>> endobj +4928 0 obj << +/D [4921 0 R /XYZ 90 540.2849 null] +>> endobj +4920 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4941 0 obj << +/Length 1952 +/Filter /FlateDecode +>> +stream +x诃Zko�6_a燺l犆酳�-檇R娴�剌�[眳:杒身烃-櫾碅悇�=$辖饥L�~萖鈗*R$O扑�鹒D体Wp齍p9絶K錢"櫺d<l,$ J鑨菌e�!痞罁c� 垮綟蒹敦婧u�?鎳)�&鵱┖R撇 慴鑪�~�%D��c羲ox�烇F1檳馹�#"%?�8e雒vt7鷹常/47� S�?NB�傏丷wyq鸜eY額艠畯嘐]�;� 儐v�7�"営蟪齶]揱&8A渆躖QL~ゴ3o肕T盃;�8%I�$炗V��.飜� JiJ|详蔭m 穖醦jUq�2鹼�0烰6垢伎淉鼹� e两憏�0缹3�I污牉IKI桫U")b`衮x�邉7|A)8曎丌啭屁�*Z澹㥮跭NV踱倕� 戤璮恉q蘄槷aK(欚巢K� qAc簊皑疒蕥殷电; �崕輺?\b蜀洇G}囩聜"(冹Dy阺 煏嘸H�,ㄦ:$g 篝鳽焧{1%x睼N$~㈧镪C慦艼鲸巼)K'鵍�&�\o*遉旵轢U鐑僑$806��?�'6秄)`�7�.?,�+�婰燚︾粉6 �嵞犌鏗岠祽棂岹|@$Fht熠H糡掻蚨w��阨l&0�L�L搸H1J�巸 ��3.rJ皲�&蓣爖帍獉j�(B蝟BH擩灲�6!`�3暛"庠06@�g g埏qz螄�3L讑驨�(虰蚲w筚浕嶩)イYdFC拡靮E�胜�1慫樷}曌┴亵\靥[C灚阞i銅_�0玀y軞忑愛嚶咤趔J��嫍Q*暀$1X\�-�!�:ザ�P|圧�4:v璕�汗檥奸�tG≧gx竝�XHs�鎮D拈`!qnKW~瑡葳檄它P/lM言�BR絸ryF螤�叔塂勸,�*穖0犥坃玕蟧\咕�蕧需豼拉*�?M櫂\\焦�斲砂�葃l> 憣~缑 壋槅-L懢燡壭柝u震�2z^壚�,#A债9榛 +QY松鎵[m跽�烩6諲�\s 眽艓L�?惇"T逪`抩{�<戰P"﹠蜷;7&)譑}.P趢@�8X4P��%庾婄7(倔�⊙彪戍質侦詓帓D蝠\8T�錔鴦銊霏wBP殜�/娵�衵[X|紺[�鲭只韜纙{螄瑆楩钱K尦泂婱3HO$ O凜EPx  e>B稃RA匃織繾J}L�F酃(A2e欭v�!顸啱兜偼�l銤失G鹺広譼?Q�批�8循�)*贄 l缶�U~蝫в>浹3?�}筫ndstream +endobj +4940 0 obj << +/Type /Page +/Contents 4941 0 R +/Resources 4939 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +/Annots [ 4944 0 R 4945 0 R 4947 0 R 4948 0 R 4949 0 R 4950 0 R 4951 0 R 4952 0 R 4954 0 R 4956 0 R 4957 0 R ] +>> endobj +4944 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 705.1301 233.1426 715.0578] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb1455b27c06532a399cf06d2c1d6d08d) >> +>> endobj +4945 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 666.2758 236.4303 676.2035] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3090117ef3ff5775b77cb1960e442d07) >> +>> endobj +4947 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 583.5208 209.0629 593.4485] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3589822ecb9d9c4145209756396b8a6b) >> +>> endobj +4948 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 544.6665 222.0741 554.5942] +/Subtype /Link +/A << /S /GoTo /D (a00153_g5726142fec34f35fb9ea19e5a45975c6) >> +>> endobj +4949 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 505.8122 214.124 515.7399] +/Subtype /Link +/A << /S /GoTo /D (a00153_g21664b7441cfa37d280228d23316d609) >> +>> endobj +4950 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 466.9579 228.3406 476.8856] +/Subtype /Link +/A << /S /GoTo /D (a00153_g156dd2891a57035e4afdc4c2bc0b0ebf) >> +>> endobj +4951 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 428.1036 212.4703 438.0313] +/Subtype /Link +/A << /S /GoTo /D (a00153_ge6f4a2453dbd8bc60e6a82774552366a) >> +>> endobj +4952 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [133.9153 388.2731 166.3534 399.177] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb58e1ceb7cb73ca2bcd73146b6c1b4e7) >> +>> endobj +4954 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 255.3053 233.5112 265.233] +/Subtype /Link +/A << /S /GoTo /D (a00153_g285a80366aed9428f64282b8d13c918b) >> +>> endobj +4956 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 172.5503 245.6657 182.478] +/Subtype /Link +/A << /S /GoTo /D (a00153_gb6e04358481bd2057524fb874cfa472b) >> +>> endobj +4957 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 159.5989 229.0679 169.5265] +/Subtype /Link +/A << /S /GoTo /D (a00153_g6836f92f3692f3a4429eb599db40cbae) >> +>> endobj +4942 0 obj << +/D [4940 0 R /XYZ 90 757.9346 null] +>> endobj +4943 0 obj << +/D [4940 0 R /XYZ 90 720.8203 null] +>> endobj +4946 0 obj << +/D [4940 0 R /XYZ 90 599.211 null] +>> endobj +4953 0 obj << +/D [4940 0 R /XYZ 90 322.1845 null] +>> endobj +4955 0 obj << +/D [4940 0 R /XYZ 90 190.524 null] +>> endobj +4939 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F50 1172 0 R /F14 636 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4960 0 obj << +/Length 2082 +/Filter /FlateDecode +>> +stream +x诃歔o愣沁�)岞舿0藡x[E饭漧w摐�zN[�-�:水%焚~�3擠E7擌6酥h嫦釓Rb�#C崌扠 喅�熰鐙)OO帱鹩t疠9誄嵈燽8]�A�:溛-��)摚蒎 r<"珩sT澁g籙攄a瘬耧�兂i禩艡 &�僟敲90缊i艊�寛謙�斮/蟽涣�+?艍鼈酒q满[G縋�< +瓡E��O苮碖鈼飗駀2['�1�#磍7�6ZD�1Q�(橢厀�4绻w犬qN斋wDJ�偋y櫙(漨銔�8b礜0~宖]鴜�EF諯岗XAU弨孢0籱�鶑鏃�祘Cq剦扖0劇焮si�&u�.-J#�`�%+鋷嵈l罐緆�&�"衫�3xe�綖&�%拕馱oy鴜�*摷K>� 漤9-扡H韏AQ�8昣鮹G獢Hi)ZR嬘焽鲨鐨l{E弆Q椵駆� 4灔(嵹Zh爲燡赣VYu�7搋f��忻釀p霋R8鄥閕d蠮釽遭r漈r �R嶲@e∞溬>�&孵罘鎿殅O锓�iv绵m嬓q找��ny2qQ�=讶.� � 傑蜊8�=镦Q憸!︰內朘�=�QY腎杴貲i阎�/崵洫4W%圦篛逥垃跬_裞m�尪h�)�1DuP爍撓忞�E砽抧l垬9&﹗>ΞI梆溝u,`�※F蒼�觬zQ|vB�'薖鵘�2蘆郯<�晇f汖狱嫸踴>彃鈷藕�叧eq促鍹E� 讀4]Fi�#軚�瓷 +qb{M 獿B Kg澕諛�颤8L蕚>?;矞劔(-椺樷瞴�/俨<豯髞齊|豢紋8咕:+�喷翡u⿸錰$O1個辊杛�!S B�8驫h忘��(t黔(=�翭餋(t髓P騨zvus};袐=$R菔=i1隝膂#I� +aL鶫磃戻斈蒘 掏z�9恉�h$蓗&a錊 �>&瓩熒欳擃�擋�0�~搉� &2觜祧犷蚩gaY�$V灁纞屧�璝罊吞r顂篬���恶T璺ǚ攓:鳫磃~k]$恒V$帚@b#�!$篹t�6H紱�5较GS仫^瀟y滏个�%�(G譤 +P羭P%1鬈]橮 +q庻懾鍂eWv昚﨤耻Z膃瀲�dr^D骂H煞筼F圥錥躑f~糺]x广Vx浙v�"ⅶwEZa�矡/k飺择涹�'乥XeI屋�y襷$`丅�猴~Ie柨p �% �;�E擯�(自�5�Vs����� X捚O墋� ]�rВ!�vYMM{Y=旰~���2�=膓�樮蓙�.戜h錉�柭嚋53Z颶�"蔚v##4囁^� ,扭wb脨J"妠._齠L瘋KH肀  伌d蚀淨感�# |� 繄抙f籸鴇>� 焓/剸燌e飄� +鸥皨1逭ⅲ秀兴棫帎yy荍玡��5/骃endstream +endobj +4959 0 obj << +/Type /Page +/Contents 4960 0 R +/Resources 4958 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +/Annots [ 4963 0 R 4964 0 R 4966 0 R 4967 0 R 4968 0 R 4969 0 R 4970 0 R 4971 0 R 4972 0 R 4973 0 R 4974 0 R 4975 0 R 4976 0 R ] +>> endobj +4963 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [176.9013 641.6664 250.6249 662.8678] +/Subtype/Link/A<> +>> endobj +4964 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.3666 617.2739 200.5842 628.1778] +/Subtype /Link +/A << /S /GoTo /D (a00208) >> +>> endobj +4966 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 491.778 298.8158 501.7057] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3f6f1f6f98431f2d33ed30a30d2ccc35) >> +>> endobj +4967 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 454.9084 293.2467 464.8361] +/Subtype /Link +/A << /S /GoTo /D (a00153_g974c9b4bbe6b07cc1d64ac4fad278030) >> +>> endobj +4968 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 418.0389 263.8671 427.9666] +/Subtype /Link +/A << /S /GoTo /D (a00153_gcacc406c3bf7d0e00412e4c946252739) >> +>> endobj +4969 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 381.1693 265.0627 391.097] +/Subtype /Link +/A << /S /GoTo /D (a00153_gca1240bba5dd57f8c7c27123c84a1f6d) >> +>> endobj +4970 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 344.2997 245.6755 354.2274] +/Subtype /Link +/A << /S /GoTo /D (a00153_g3001114ddadc1f2ada5cc9a780e866fc) >> +>> endobj +4971 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 307.4302 220.231 317.3579] +/Subtype /Link +/A << /S /GoTo /D (a00153_g763f12007aad8cc0e483bf50f8a8d9b4) >> +>> endobj +4972 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 270.5606 286.1035 280.4883] +/Subtype /Link +/A << /S /GoTo /D (a00153_g9dd44616d41cef74d3beb51d8be5ecec) >> +>> endobj +4973 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.7309 233.6911 253.6255 243.6187] +/Subtype /Link +/A << /S /GoTo /D (a00153_g529648ad3b0b327a43689b0f1779ff55) >> +>> endobj +4974 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.0032 195.8452 196.7092 206.7492] +/Subtype /Link +/A << /S /GoTo /D (a00153_g4caecabca98b43919dd11be1c0d4cd8e) >> +>> endobj +4975 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.9845 158.9757 206.6718 169.8796] +/Subtype /Link +/A << /S /GoTo /D (a00153_g77570ac4fcab86864fa1916e55676da2) >> +>> endobj +4976 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [207.1599 122.1061 252.3298 133.01] +/Subtype /Link +/A << /S /GoTo /D (a00153_g727459e5c4f777543c81ffffa3df3f0c) >> +>> endobj +4961 0 obj << +/D [4959 0 R /XYZ 90 757.9346 null] +>> endobj +1119 0 obj << +/D [4959 0 R /XYZ 90 739.9346 null] +>> endobj +402 0 obj << +/D [4959 0 R /XYZ 90 739.9346 null] +>> endobj +4962 0 obj << +/D [4959 0 R /XYZ 90 716.7484 null] +>> endobj +4965 0 obj << +/D [4959 0 R /XYZ 90 542.7325 null] +>> endobj +4958 0 obj << +/Font << /F29 499 0 R /F23 482 0 R /F11 705 0 R /F26 485 0 R /F50 1172 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4980 0 obj << +/Length 1572 +/Filter /FlateDecode +>> +stream +x诮X}o�8�繜"�&m;%旝@飔:B溒�r@赨wY�垁篡�?僲扨HG�8璟乜唧j# x麿椟`瑢9]捳A_饍痻B犛�(徇枆�"H冄辫幕笢夲@�9U晛�.7We漇4i鄥07埐�#Q�?��觜$27制B)楞}N諨�孛%Y,p鯅峗癡睦o烽J緬n�&!*魍�弡臦q战敝{c�#麨Z4?u鱟i葼祗�9f�3c讂�仪Z喤^'r�銬F>啚� +�!;Q衃腵1鳪&9趿.bU[臦FCM�8QQ��O 鉢*獯�3��)�)�蠒峕2�3{鼘�5N誵!9A/紑��V.术Y鈞Ik@霴!<)� �%K5)>�6c鐆鋙蠖4pHR5媟g@K浇FcE��>7胥Fq�+I踕X绷6$|�,?鉌r�>躅嚚.�?R�%!>6:��q嗜�``Cl狦渡痥鷋灝嫥2塿F橄刄&r�. +盛吗『~ee9I帾K灴�$� XF踉Q平]藳C椶a鞕wg8�z]:�-渹)镸钌�7g�,變奘芒 M垓8Yy禖7舙僦镞杦;栔泴aQ|嘤�.=蟰韫7�dL0S前<�!cb.VSh]�>芅兾紒擏灬A�艮:PR*3騵s�'� \@锞↑衄汖屟7ˋ 莾鎗a嗅迨Y陬b�*W{�烘聙7`�3� VjfZ�寨;7嬻�� IW嗄�;搝��鲚I笒�+iL�"o麕4逎!鳵5(�&�'P/�鄭軭^鍻e傗-J傢�=�藡ボ骥6 "脧�祄p芏蠜=趒�7m氲瞩��z獶Q=鸞%d綰bWt,��#� �5J"枮 |��H戱�&,u +焕"i�n=Y�秅3鄚谱o藅U菡逆7狎估 蝤缇��託�endstream +endobj +4979 0 obj << +/Type /Page +/Contents 4980 0 R +/Resources 4978 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +>> endobj +4981 0 obj << +/D [4979 0 R /XYZ 90 757.9346 null] +>> endobj +406 0 obj << +/D [4979 0 R /XYZ 90 739.9346 null] +>> endobj +1237 0 obj << +/D [4979 0 R /XYZ 90 549.2183 null] +>> endobj +410 0 obj << +/D [4979 0 R /XYZ 90 549.2183 null] +>> endobj +4978 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4984 0 obj << +/Length 1278 +/Filter /FlateDecode +>> +stream +x诮X[o*7~鏦� {|Y逳�泟6G:⒀娐BP氓\贒争锏譤 +a5j蚶貫�{重C�{ +y� _褉{僫yc=}U纍宫姿� Q狍%Q烌'軏F)�>#榵寻W腏柺D 亰泎[� 睆,>鳔嫥�j罅f毺铸鮠>+=D7�0趈v�1时邀G△�肌6穰�|�$簋�鋍7-刦儳B穚放� ���r恵zF �9H纯满癛�#T黫槍&衬篞% +鉰珁Y繆;a5� kv�洗膊�0嬃aV& 儗^nkK婣lV澮�9�"门诱貛��4,踱F芅h�8衬泮e慸鬝2巳�磰�ㄧ砂<��$c�<鉤%儠�1z陱a%鬇蒨�梱z�䲢|靲u敓饛忩婥�S~蘟镽q2氶l磧鹺;M母v]m菎u壀C_f齣毅癿�0F摟墑3-� '#垇蒭俇廱cR索\ 營╒/Z_tZ昛狄嶌$z侄 *U.�4逎痤>4爜� C�2_遁鵀嶲慇�*O�:�0�;托y�(�6w0� 愮�!躹痓 R*S3E(( �%hd5顔漮a'n�:[���"T醢�!@�$蟻徽�6�!倯嗡愔濂�,蛞c沋i誁穵人廧� �(T(2/1*寨:棈桺刣^64+��掍+萏Ph�%涓疼�刚庩璮芙啃i遃篲6磄挐�榇�#硑A�H~≈旌ぶ-P�q蕩�.+礪莥脿揔�0i▇�渷QQ'`L釠笄%5�P�矔^�0(K~C`uS$�(g96��A`辛喟y杷蘛mK�鈠/糗瀍餍0賿榣IB羀O�7獫銮揂<樝�$鷷rz0E帓�J翃]�N装騯#�;i�;鞞�?�+�/$赁蝲 擨�3F蓼軞[�4b�%��NhD��PR�.Iq%,柅=萁�;6蒡瘓�-F茸�&霱V肫h盺灲轘j嫸�� b|�'曔辌罪?E倃X蜷觀兀嚵� 4�□黼��UB>F� 騋=貵�2Yo柍m'珣瘟牷冣溉v珚P_i�<��嚔**E�)犱+楕豹饩�嚝*[讴*屇縠礘�&藊2|UW鶮] +䦷 �)!瑈尣}浔R_C刍餢掎*捺⊕斐}歀�榻砲遨]榙譝`倅藉`|cB灳=8��闄'}⊕ZS阐N舽%񛐄攈羳摥)泼玠�,dh_ゆ3鹻�7%虋7滥/剘!領K7管R�a霹�呔~{蔀綖_粕羶梱�Ⅳ橦哀endstream +endobj +4983 0 obj << +/Type /Page +/Contents 4984 0 R +/Resources 4982 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4918 0 R +>> endobj +4985 0 obj << +/D [4983 0 R /XYZ 90 757.9346 null] +>> endobj +4982 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4988 0 obj << +/Length 1353 +/Filter /FlateDecode +>> +stream +x谳踤�6糨_!犂惉3�;�惸n猱嵼X0d呧什#,禱K闅 �"e�2掍A紲;蠉4驙鶪瀯瀈HB�蚙袥�槽m颠����$�s/�8 #�銢# 衠3x4緧垘?o< +}W45扲毫姂晝�4汷瓫�+y薮 襣轤j丅呸珽1)'w璦臊妿�(\�0D\鷓O�圝}癛Ou虑m銫x磳篼妩竿�8]鋴|i葡蛧�*4U鰭�r�,61��:7┵|Qlb$傇k#%?� �嶕�鸨WYn畀`@�8cdoTen�乱膶JY>蕮葘稞0/p�悆K{单鼊Ka塹C`4囁鳶�,詇�dpER�嵃忎嬖>2L拃1TWA��8徧7gレ%1� +瓫黮>潒矨�浸ex諁�'澪�+kZ≒79嗣pL0次>媑砚A涄+0g`垡轺}K訿�5�<龚留�Q冑f�(�'�<珔M轾彌m+j0剱� +�!j傍>Q蠖7 甍@袹櫲�+7�>届峄撫疢� �v韄萜LD嗅箆.囜皗踣#渨譩g!M諚<疥KY}I企馞罀��Uu}��&yS�%摺鑦/;崬&课�(l�4姙湩Q柬i熡d霻逨a磳Gy尾u��-A]�6b雝檸蒲(砃�1蓙I�g栜!X龚�紪裍Y� �*遂#踼舶棟0JW'%曋[冘�*嵢炮肟B|獟�&>q9荖\巄�泒叜筪qn猏爧裘媡�(閘臆Ez�(殚屿稶y`kA%嗇T�-�X懡Y�h� 敦l锿\萭蒬>�'fr�刧譨�喏�/.囄C湉fq�j�F;s�"S S2qB�*u唤筜If﹟慆櫮勐U6�%d � +鏞甉醔�F咞V漗8N�(�螹a語詰dCK!J�]u� 鱨g�禛e哭虉覈w7O�]鱦�6姰V粊.擙Zqm8]*F嬇x攺現1��.�*a�薢促A蝪:範握�"(籲瑾o8奻�27谪弧eR詨烏�u7c蘩Ⅵc頣;鑸:�2謭锘�P�zㄔ揽轫进崩W(隇^�)坃经[!礃珩<^�� 夜+o�;悍�_|酜L^陣J=S-7I1fG橐L顊 ,嗲箜Κ钞橤�0喟�勛cendstream +endobj +4987 0 obj << +/Type /Page +/Contents 4988 0 R +/Resources 4986 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +4989 0 obj << +/D [4987 0 R /XYZ 90 757.9346 null] +>> endobj +4986 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4993 0 obj << +/Length 1285 +/Filter /FlateDecode +>> +stream +x谳X[o�6~鳢蠸`o暿荒t�.n柆�4vY �6�祃U挍dC�鸋懖e櫀統脌�怩滐�~<$t�麮�千厩1a�(�鏭6w犻ve縖饁貀�q噞�!� 颙 zA� �7]@螮>餉w~r)�t�t��%镈枋裭4O拇垔x6磔O;B�F1僇飾瓮-p�鄆x�詙�郃螒搕耈e�t>,滂巖偼> +蓖@嫒朗@$眭祡戌=@�.︺��ラ8*�=椛^佟 敚偘P�:怌(p\(睉爺黓貳ck4+檃駵 +%� q湧妛�rkv煅�?]^�?\�脥z9l褠嬱�2拃&� RP�昦準R禪 nc埄u>倍�熯觥7蝂鑽�佫�蒾涢蚾�踒鎠轃FY.B岖��( C +H嬏8<�堥�*]�4掷\��(�'e浩ㄋ�/栋*ó繙aE*xeE幁葅|�'%皆1�.澧�,嬡w(G?婆鐰�)圌畜1劵膽舟糟搚l╟F�(逝�脣酸膳y8竳{�唃o�Z咽岶粔HF閟y榵SQ$Q臚� 覧6q亼鸌�燀Cx+颢嬰a�� + 璞笅鎿"蘤驜d鸴噋+v圸��翧�曜M �4W嚺^郎v啻�8~检踑3#揪驮窣�湤]� `3畍^蚋饈躊頾�-h� +聯#籷茆� 你}渹繴���3鑷脫3籟� �)*,釪靺o荖Z摈享藣☉湁b濵楐mWR戃7k痮ma膨曈�蕻.圿yuQ�*荱�!nNzF��;聏绀G轗闕徆:碶��-�0摞蔚邥嬵錌 嫭a帿+W|W^翟吶�}]蹘W�u�*G澠贪H�YO 頪栻鴚1+�=i�,旿%h覦�M予^嵚祮*c]盏%#怪镼_虒p97�!⿴f_K噎稲錯錬mㄖ彤�1!票'簞骤,=H|雜!p�e{截昽巵�e 诪櫱}�9屼D滦娐|,�"� +1謴嫵濽呌ぽ供�4侰�憏潝� +鹰�⑤Y�+胂槦灚抬鐊宾v�-'� *觘ndstream +endobj +4992 0 obj << +/Type /Page +/Contents 4993 0 R +/Resources 4991 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +4994 0 obj << +/D [4992 0 R /XYZ 90 757.9346 null] +>> endobj +4991 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4997 0 obj << +/Length 1339 +/Filter /FlateDecode +>> +stream +x谂XmS跢_ˇS邙r�/ `垞擯p�勓(枥岇Hr撲亏�;箏9蓌翷�2蜉�=畸燹ju(��/ + @蕛 n挑q瑰甕镂 �t^a(�8媪嗪B�0宲0�/�@;]锑v<細\伀澦翛�B ���暢澽`θ倭GO潒K钠�7垝,�7怰8鸽PL炅╯搦s哻� >w">x`fD�?馗'�;橋�.噋鸈�&@!H�.2JìD~�.!q07輢�?��$鄬�&輍^沟禟+i (�$琄y� \拹V鈚^燉�?@嘠弔X频~'眣Ⅱ�CY尟綞w篐Z 痾驱�q+摙剓檩庹掳��0k�)�8]啜�妈&J襗K�C� 綂僆�,"微�k寺瀩��金紈r�?9龌Ig跰pn髤�镛�5�逕鷚3�,w橊�-&&-,5�4�$�諽樻楬伐H顃婧pq蟏歒G欰�1桂蟸⺷2杩�%凜�&�0征qTD礗v巅7&�/�$玉�u抸晄铦E韦浜Dj越礶煋(藆x椷,.锕��>8}t�;鹢�n挋庵冤`鲁轆��w蠠�8攺檸n�"赠鬏魂M"�8YH线W映侤鮮��8蝨頗�%蹩埿糍s/.�!N&%差贏樘�1窊xU�MV犐Zh�,讶Β-尋焊嬺蹗榒ML8�6*D|嗉墜6p�"姨唄a沭滠調潤fr#Vd+q毌K�竕b� 湲�4眀巠 +本帵#7绕觔#fD嵦X嘈b�鋺舂聧<璚E�$沋#接Q]婍{躑�$u湇�:女苅湻G�7i1嬷篞 �=�紲}硕迹V谏颍淥G顓悛�W篭艮哌萛]6�)�>G竪�>壵誎h馗NnΤ僻檜闈U忺睩�(q漘1�,鱘�!牁癕>�#殢汦+戯滶zろ葙��+岫銔/L`>贻�6r�.O嫛�樲U譺呋岛/喩,襟聢;陖謎1岶�>� � +顴4&#硒]甎穪襩A蟔歷LY_�9#JR巙�3雍啮Fp溭�鯊7;坢O堇恘焢揮 砣鬤荥恨羖{溬链l<*i�?>冂狲嗣峃楅)o�< 飧=羍ndstream +endobj +4996 0 obj << +/Type /Page +/Contents 4997 0 R +/Resources 4995 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +4998 0 obj << +/D [4996 0 R /XYZ 90 757.9346 null] +>> endobj +4995 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5001 0 obj << +/Length 970 +/Filter /FlateDecode +>> +stream +x谳W]o�6}庄衈{圶~K臧�.裐炪臵�! 誦j铂XV揵�)J幀衦� {h屇$o罟嚰�既嗱僱�.s丱(窏k 跓弪{ 5fG跐�?�Zo~辆�焎n噖5G�a勴0�a埱v� G誨.� ��z<齐"zr盰Vk戯鈃荷欠幞匊� 1F8Rq锃沎h'掄��=f?� 洒苯�(&�$�謔{m�L鹀垬6萴光B詎她簔耪&P�2跘漽淀囑��)�;脲jSe韶�幎"^轜閂瑭x,涓眅".E┣+�犉s(恱\fP.Cj� +\衳a�0銄86v�'�>L� D�襖a蟽�FL傞卹臢9㭎tq� 瓰q誳|d榒鰝 j移纲�> +L�� =vx莩s�7��yU鈢 鼋迻稗覘M�稬�=Y-媏旀�::杠溴�0�顴溨�2姄d{壹AS霗入猢YK�!骥X褋衣m1Vi +5餵lN;7W倴捌夗qH锢Y頙务〕\4鲌ピ=q纄� 僪2泟搘S#(A衔E宀�特Y琪�%!xODVB~繡乄I邂【m�嵴l�/>溝希Ep�1笌鎃住妕<iⅴw使蠡&桁鏖魟��NK餝�'Oxf婄覫0 _@� I酧"�tZ厛;燘柠鎀堷�*DaW呪芛Q9炫4T�-酻�'檲�<�JRB�7�蔔wS�鲿(w'S�イ� +馰暗L萼[sN�2蒨O/篵iR�省寋鍃襇=jt炚煟彰p�徽F�::頙W澁齭頨傐搽z�=烤:�(Tmv5 �鮏@.蜍�f�)I鸈蔫�.26p�艜B�脻�/?巭+�盓傭綇8��狵,O� 偦m梞噟徤.D>k%庽T征"[y3軵�.\�U�徭九�-n:2鶞醶t7苐促晟笾碛锥k{Y<胱T#e8�彲X鰁ndstream +endobj +5000 0 obj << +/Type /Page +/Contents 5001 0 R +/Resources 4999 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +5002 0 obj << +/D [5000 0 R /XYZ 90 757.9346 null] +>> endobj +4999 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5005 0 obj << +/Length 2011 +/Filter /FlateDecode +>> +stream +x诮Yms6_醝;油潣 駷齊侷處c粈7蚻w\r卢 .啶�; a缆 蹤蝔謟9Gz瀞巘$�<��?T$呌Q?|耐7@篏�T竢譖j�&Cy璁�d繧馈|鶢q餷%﨏痄飢铋飓鹖(�*荎23伡惙L窔堗�溆�9�惜� �* _p呯�α醰 B乂6g餶5N貿(拌H@`�"嘯 %1?テ饇働�*q 悒D鏓AY丕腪!镮銄猓栐Cy蒶Y^巧6%� 3b�89茨洿��6聈鑬9z2瘲�;攍�,C�.墴脌植'/�%D羙6馣=朥?巶07�\≯㈧瞷`调纮+莔z4m唟輥~P(�4檡再昡紘摇k�滚騌G珻忊,粞9�6$�7!匛嶙\覍�.bS�/堍�,5A鍫劮�:b罈�5@Ux棻�)cS�票眖H{陱髫[錮 奙羿 粼I�绷浂儒 +⒗駛趓霴!堼�E欁胤.鑆� Iq脶�=�6)k8lR:G�爡轖#惃櫋�瘹7蚨Tu祾W硉[K=ど�'閴0`霊鑯@U聽�椏( +鸫� �1%S� +6喇z\;F觴澖錄h穋Lhf*ж!?O*_X瀵$O'Q-护�A"縼eTu找8Pz嚃;�r啓_粀簃捜!� {涖瞯u_*6s\薦氦垹1煿秛祎�6鑿?t��耦繰{撗g燍勐62哕&筠.�e倷邡痰L鐪21λ�5�!u対,�9)L璠衰`妌Zo( 曤蝼执� 钚╁薹�m钩婟5ク囮秌拴N�K{1wNp�\Ec�1uk庱`afjU猢湘屫讬栌殚\幟胧爷Η貈辧め5秎觩iU 糬発︳6�0 櫩欂梁}~娜1]bE,{>� �74�騅削F:� +尌m轛Q�,�^簷锨� � 祾c跓-胻>渟У0枎I袔uWo�繩�*又c枊5sM踍.\k>+.囕4霓4&�;镌�:;n-甍�jx%添�&�<茓uOML,Fw筜m夎UX:x�� 6Ro6m誀xQ簩h#1f轑�sf碫�U^>o紟U呗盌7奢Y�騇�;1胡=�?抗諌ln�3=b{I謖捿[ b�� +螳"廜@栦酯4゜晐+瑌蓳9MT�崁醛轄%^癖"�<櫩i婵反痖 H訾菺L繽B�哽媄~$)K�3(痬y�8r�|x-邱_瘡(j�'� 砂�?,�?�endstream +endobj +5004 0 obj << +/Type /Page +/Contents 5005 0 R +/Resources 5003 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +5006 0 obj << +/D [5004 0 R /XYZ 90 757.9346 null] +>> endobj +2465 0 obj << +/D [5004 0 R /XYZ 90 739.9346 null] +>> endobj +414 0 obj << +/D [5004 0 R /XYZ 90 739.9346 null] +>> endobj +5003 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5009 0 obj << +/Length 369 +/Filter /FlateDecode +>> +stream +x讠RKk1剧Wz�-l湙$搷仟}厲頜d焙娻�-J�哽f两�2�/笸銫 釥� 漸蔾胷� W!� 癕g!焆�O^z鍣X随Fe I婭B`覍8H嶰/链悹俬寏f蹚M濁~~躒幻彀揎襥1b芄%f5c蓣SL� 佮X��>夫;8犘{抂aH煖峹wb�t蚲Qw �2D鄆@ +蠛8sM5�3� 儺+槯$7課盺F蛔訷R 斔 3�7辗M�+�錏�,噺儣A鵛�霐螎锢錼簞龊枈 +嶋黮輵-�k邖b�AM梻岚@澴�嗛Lウ鶳愍Di=4黧�揷� �7鬒鳗�p礀)賒�漦��烎黧华當WKK蟊nendstream +endobj +5008 0 obj << +/Type /Page +/Contents 5009 0 R +/Resources 5007 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 4990 0 R +>> endobj +5010 0 obj << +/D [5008 0 R /XYZ 90 757.9346 null] +>> endobj +5007 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5013 0 obj << +/Length 1250 +/Filter /FlateDecode +>> +stream +x谡X[o�6~鳢:牥讏錧R�X摯K兜兮< Y`� �%M杛列�>R�丧�&�6丄�<楋愮;(��@莄逦l9�违~7@f跁髇[嗤x瘘-�sg<�-pF�G缑悜�姏p�'耛唓歞Y頭清� �偯踏� b菷沣玲x碚�b�#弩熈�t" 顇 |鎈�(俺PL歂28叮'j[l {p�9倹璋 謐� �軫H>鶠鉇 犌;孆癋豰Kkp軕p=�l崁嘑.椚~堄YREB鳛TqOi� 鍞这窸|=*莫拪�:+>簯笂g庐I瓪嫴�#��*旕Rvn髮慔蹄载xs鯲?� T縐YT砇彥鐴箻,ⅱ6嚫垏欍"橤辕XOQ帙豬 K[瑭20琊BukAy &!怠�竵馶�6I劂礭��達韥0p迫梽耗莯q�;!�#娪�.2 �(�6�*嫞酹m垰d6�(�/谳K�5bj嬧<將b胰�=�3J�$⿹P?姊埑(濵瓯==(椋鸙嫸�eC?�%A轈苓儃綃嬠i%梫懎十璣Mf淦\]wG尜淉綹膲P戗/儼,<�慾蒞嘿貥B勓6D[馶塽,局 軒喨9娮d絭_椃�)忒 珽櫏+5vt29�2鋚rt�0/K �&X艁8族�7"襌堄稼�#�i]彘傴礂B滼z47鮡ab з晊淲楝尦穿�,茧bU%歒軫a6C]�]蜛@患$财yj絎嫭J實�MQ酮�!輤i2doc�2搔a"�-7�;���M淹虤4揓t� +云1b�(H�=^]�胅X炠菄绫�!绛D藇dN`�7'穈+�(4H?�&2}褸E�2藇v�袐n襅髬掞�1攡U芇鯩2嗱�2唞d�繊翚柉 hD�置}�7y\埲rP跰� &mJ&u淖/#F}為sF鐓 _昂鵌7娙騞齄礄}鰈F�"r儷鲋 媫oDf檡�$憴�X"赤~�>F|幎熴-溺�6妇邞骒嗄&�FAim 7/�@猿^蜛I$�>�sGV唣鵕赡i輥I瞲膐畽 �;憡"��%T鹻髉> endobj +5014 0 obj << +/D [5012 0 R /XYZ 90 757.9346 null] +>> endobj +1366 0 obj << +/D [5012 0 R /XYZ 90 739.9346 null] +>> endobj +418 0 obj << +/D [5012 0 R /XYZ 90 739.9346 null] +>> endobj +5011 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5018 0 obj << +/Length 790 +/Filter /FlateDecode +>> +stream +x诃Vmk�0_a宒酞t禴芰`[灰� 垡O] Nf帩9v�2鲞w蹭.I�.芭漷瑚G:1熲屈橔扠噾餲 忷7竱�1��lnx?鰩>B烨$ 颊 崂�燽�汅挏8絆薥凵I9k酣�:+嬦貘�;?Zv庱P0c鲊wuM�拣( c琵;淧骡鼌A豈r铽鼯Q廵�}駋�(|\憯u�+m|勉盆插棑ギ�2蚮�(�7&T�$稲襂礚4狧�C譸4[^禍榩伩眫>%隱m塪Z�9o奩浗v�雛桙橶z珍礜;�婴N:岻� � qo{瑔�艿�-涇闃:�+,洢师#�7 ]邥征�;�7y9MrK瘬*K嚍勁渭IsW潁g�.]N:厃沆嫉%璻`�BO�#"誚耺�`﹁盾捲�1洓zo9譟4颁蠟坤� XR-'楢r$庚.煋T櫈` 襣錌玳�>f4 "厍渲�h!s鄐�"(靺-厶忮鵫ry2j埂"绤貤|謸}F9逝秅⑾]閎睊�$ +�<鑘}H騶烇緦躂缎U�)觡]=X捬幊睭W�:�-( ,��)樑Z胄D�/矹窌i杏� �u盋冋�7儺熽杳憿鬏骖饺S�p)剆H�1矻韈F嶻楹‐1h�澜Z�&牨T TxP﹤�鞒噦+"8緬v�#C热薅M隠p馩澇睚 +E^��[� 曢�!燻$嘌汴�.t暣]�4ysj跳�#.唽7a郌z �1竁bGXj>>(+;y鷾�>t/夳� a歿O杶辄@endstream +endobj +5017 0 obj << +/Type /Page +/Contents 5018 0 R +/Resources 5016 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5015 0 R +>> endobj +5019 0 obj << +/D [5017 0 R /XYZ 90 757.9346 null] +>> endobj +5016 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5022 0 obj << +/Length 1194 +/Filter /FlateDecode +>> +stream +x谡X[o�6~鳢:`白�%)�踡K�"Y譮H哹驯0Ere)I1艨�]伞滽媢�x;W烍R$�H�档O阝g�#0鰬I(磓?溴琱3eG徻|�弻=Zx▆寃鋞�4癉^朢5WU齇槱藎溙斯h歟鎔郶�&縋禑Ax鎎琐r� 壩 +杢?u+ � %Ao>鼁縉C�$8彾)镫吨哘B\ J珻y賦紩v�$暹樸�*蟭K<�[�}k:岺Jg>2 +d&a騟歟踉褀#/SLng@夼詖棯潍,烳�9�鏇� 禼洰Tc��q(m溪�鵽�忛审�\vt 5{錟樗,僇HM㱮^鏉颦聮軫,}芭76奕�=p扝篏D矅鞫zEIO屴盓礿啿秗R撙媗閇=>0R偏E^(肗狐輾猅L���*-�/顿Ll1仁鐔l 馱坂[t趀粄$P[赋%�0粼┇9ge1=�.�;o薡揥カ椪,�<�-暪U踗i�:墿-,�>�T[54z鮕W��3P糝甛鑣:鍐�捊嶉螈:K 劭L�<=+旓�!爚泑弭籸R力8丒珕aD漰�9克q%��!dh匑>8q"�蝞Μ抟�)1悬逊�!�?Z弄X�6X;m㏕姿糣櫑\シ�-@�薣w穁睧g�^� 尩拖秠sx<諈塠}豘gW玒8l套8疸揀赘I&嘩+ 藰~3X2昕, 追鶊捭壒:4婤 Kfn烩d 4鸴渗�2進兣�&<� �7�>忆a愐翌+&{癹�;B嬨� Z渱Shq�従Z�= Z滐�;犈姶$HC�ι漬^}鐴 堺�埦r鑛丘搸'雰赾秳+眔Q�/乑5m]甉睢刋xバ罣睤�&痒駪践lDa摈5 隸�1�%/J輷X埰P锱H讔8J軏 a寍U�1蟗�:橏O�9�>na`>ɑ?パS髸gF:焻硗'攺诿c燜@x隽�挣噑嵠嶍1蟏烗�<虫uendstream +endobj +5021 0 obj << +/Type /Page +/Contents 5022 0 R +/Resources 5020 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5015 0 R +>> endobj +5023 0 obj << +/D [5021 0 R /XYZ 90 757.9346 null] +>> endobj +1367 0 obj << +/D [5021 0 R /XYZ 90 739.9346 null] +>> endobj +422 0 obj << +/D [5021 0 R /XYZ 90 739.9346 null] +>> endobj +5020 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5026 0 obj << +/Length 1686 +/Filter /FlateDecode +>> +stream +x谳Y[o�6~鳢02`K姎%)拻寒h譼]妌薖{h婡曡X�,y耗蛫�")櫜dGI灃<�2/�;蠉"欱駨�>満�綜�4\M圄Rf倀鱈粝��8�<� 鸖� 抽|Q�衢<鷓尅w2�.t醧uv.�#U沲梎礜竮9吐j庞2(�,=�4;y=o$k`詀H数{蜥淔噗 庯验F粿�|OW�髵L轔~o諵鮿>�(r�D坃把 匽枭 A彈X滘0 颦x`y砞[伌o{薳`躄Xd聥澼NS氥@��;�叴8啻�峘濬I斨呵�M閹悠�84na裿羊t0 讉皨u絒A+ざ遦|� � 饢迮钜硣%8T�聓w<�q][#z?bw(槡梣惸�l鶖駱NZUESJ涩椛岻I襇嵺 �;�"蟅�(n姃瘑晳抻溷暽眎嫆�:[碾 箓�鈈�辢 $U<阽漱C�2丣嬰,巣�7A�>k(怱jz5韐_�萲L筈睙躓 姩a妚S(%必ec瀁迧遮嫣炏_槭}軹�騥塨S"\g �>捏:�4P蝣簏穇咚�) l�)眢�鲺��[�#�="飄g}濞].僰腱uB�g�/舷_絴鱊G� 坛�0]橒w;Hhg�6牃嚎璠�壑璄sj�=< 偉銒癗~橈苵 � +y汑%O壐A�9i�.SgdaX鍆b/絒屏%h� +R举�-E�L焻�/y舾3% +J絁愮�5/L蕬� �0� +j総刉i� _6摆A蛉Y亍詼農^鍭Z瞝&�2JM�> endobj +5027 0 obj << +/D [5025 0 R /XYZ 90 757.9346 null] +>> endobj +1566 0 obj << +/D [5025 0 R /XYZ 90 739.9346 null] +>> endobj +426 0 obj << +/D [5025 0 R /XYZ 90 739.9346 null] +>> endobj +5024 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5030 0 obj << +/Length 1036 +/Filter /FlateDecode +>> +stream +x诮Wmo�6_!鬋c��;燙鄹Y�-ik�"说0Yr鮎�鲞�7)�*舦W,�!閹|�9蝾xD�肉衦� 8q�lF喧$臈#d远雄�/妫骔榌p啓5_)��[箦�1tbc +请0嶴{7Ap渇�搹髃藖�� t9C.ィ榧6iQ聬4鴜酤#礀傎��=j砟坰lmF&誈<殟拗8Z�&�9F轶孻B釨Ty唴.v�1��阖眑$�O﹡R�9s罢�雙b3芹,-�< � -�齃薒盔踡~~y�a鯕旳Qf!P杔�L�鍼拖=老畤Q撨笰#纐J 蜎厝揕W 卐碷i拕A.鼝黫~+ 谾�汙3粆鵽qus5�琏稠銝�,J秂qW甐aV ?耇m�+�?髫r鸒�� 睓q~`侦Z%梣W�&'锹�(胥xo溰檷蚃谩�*揁咵5�7r_凞訽k?Y芶>M櫂�Z鯣抛蟬�1¥Mxi峭F�7�>=檦宏� �, 摙騃E硆h�*麘9搴&骠f-�)╤ nO3顛m畊�*�a�庞⺮��(�'-掔飧n�%鐠]�夐�砊槾柑譗砾麈b晑漻隝涚潰襱熖�罬橶9稂结梾�$1#:� +S欘盛;9 繄<鍹N�~曎U鮦R�+岂�:U$6"噸+~f杬-梐�>[雧P�鼭擓o� Ks�&=9!MN`8�4v飤�;諷<�愝 +:3@vg嫕焯鳐#亠櫮猔襒īK赲坚胬悝赕嗯趄軎�� +!噠B訠歁o.躇籲鑇閜uv諌[緉�'y4�稬緵>繕遶 �)尦A b0摩$羦o�i鍴~�+馕 Kc�辫QX V�(瑓蝌粉亵鸲粆B瘏$�漆苗(偔S漫4�窝jF黯�r苻�� 1漱优J� =1芗2Q9圵]� I�2L翷T槬�拭I>痎�'垘K髞皔搂�<臥a檦[M0鱅齉^�1x纷蠇綦䲟8:�#o}=塍/ 瘭羍ndstream +endobj +5029 0 obj << +/Type /Page +/Contents 5030 0 R +/Resources 5028 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5015 0 R +>> endobj +5031 0 obj << +/D [5029 0 R /XYZ 90 757.9346 null] +>> endobj +5028 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5034 0 obj << +/Length 1357 +/Filter /FlateDecode +>> +stream +x诮X[o�6~鳢�花轊u眯魵贇�鰫�"驯P[ReiiP艨�IG挬8N嬃骓滙澝�翎竮{畾 ��厚阫肝WRw^fQ禆i朓朜>娃峖投� 0F8~]|俕��A@良k諄鲋#妷憩FFn蹊塅厘C捻 峘�!V�鹕A荎筞e与 傘琗臽賥B0戰=R �!霡眿ы��@"嬈.ㄡ犐�+,堑�-�)R.S縔瘌q35菸 y 鬴 K53`�"�5�苢橾Y昸踑瀘� L@�� +i(К� b绬鰉X荩�_鄮禼銅]e瑱倽1>OqGw #à扵 H]僱�毓I脲2亵鶀澵;鹨尐醌*�&\�'9X冥`VFa歠eGx�(X�B��9#J羸锓珞擉�'gg.嫒觤�!,.]嗠廳�<fp埮仅睆楖�埡騫豼柄P"Dt六.拟'iR� �+1�3岙杽鉀飺緲虹g孆阬舿璜乐�6��#�?}!�|拑jgg鼑^艢w=另W/U欲姧硡G�琞癙j╫d* �7�贱偑�穽w钠曢∣]�焍��@ !篆�硄�胛頢a}抽W炉7Wr鐌皛竤D�?T�ndstream +endobj +5033 0 obj << +/Type /Page +/Contents 5034 0 R +/Resources 5032 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5015 0 R +>> endobj +5035 0 obj << +/D [5033 0 R /XYZ 90 757.9346 null] +>> endobj +3302 0 obj << +/D [5033 0 R /XYZ 90 739.9346 null] +>> endobj +430 0 obj << +/D [5033 0 R /XYZ 90 739.9346 null] +>> endobj +5032 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5038 0 obj << +/Length 1998 +/Filter /FlateDecode +>> +stream +x谕Zko_a禃歍1a啗I_U%6洶r� x覷[�p屩�薳砆�|槂�瞲芬儡蟳�9�兤,鶅�2;�墤9^;翀?掙�⑼�>﹚付F梠�<�Y拟刳3垐0耤她鞮fん 爻�M霞$趠<椮3�9�脄;尜)� +"�<飲蔾G猆璈8咫�=v�赁嶺啌鴫X�2#sP貚萄/��&頉&�.}U騉彂_~朁菪r胹玒�廄莔z鹪N峋�"fYVc谰篍瞳蕾F╋x�.盖桮�诋4y氐� gg鸄�y巃供�yx +凔�燮�m翵7s�/\��級E蘅sxv� +n鋎y来倦躆D屷|檼摏 9A�9日w磭5埨Q諸W嘸�HP薾��璽]�篞 �& :Q趽騲�斾吚�尗#覇&Wm咬��A8(涼灀;r謴�芄幄>舮(k�!I^賋䲠 ��汁Fs7�(櫔馧洨鎻TN輑qm猅诠b)-寜匌0竍乌詵絥E~暋--�0�+K訔嘽墉~O( ;�a�-朐�-烥犬餂J�/L荤bN~ê縐蒵��/-C┴mZ�6砠堁砸 �踷d~~Z�7 鞦]卧孚z絝��C3箦jU+詈抨释恗j穐}lI!~^�棶ㄌ遡Y^H\穿諠0g穈 ��9� �)Y� }�;$Hp�8鞨*珶湰訇迵詖>�)5=I┽�;徒^1�齉1Bu�#^捒畉�/^�3'�� �齺昊n紻�紻�5o虳|祺X當齕?tv溡俊爈�96�?:$篦齾c 褚褟!X瞉H�/�.▲J� 卓;Y猞餕?]^枧vq嚀U憻篁�技=G耏F �'{吂+號0遨� 艁(/哖鬴h屈w嘃9�>=?挘B 烖# 綀Jendstream +endobj +5037 0 obj << +/Type /Page +/Contents 5038 0 R +/Resources 5036 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5039 0 obj << +/D [5037 0 R /XYZ 90 757.9346 null] +>> endobj +1567 0 obj << +/D [5037 0 R /XYZ 90 739.9346 null] +>> endobj +434 0 obj << +/D [5037 0 R /XYZ 90 739.9346 null] +>> endobj +5036 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5043 0 obj << +/Length 1362 +/Filter /FlateDecode +>> +stream +x诘X雘�6�羁B谰拿舔!Rd7 �7K椚�輤�0T嫀匷�#蒶俛��(慗�&� +0�;��%��� 舼嵬�鰊舔Y嚫頌亠��2榧xM暓�Tx揈虯�)∞$�>1�� p�O剁Wf锐 A�wQ篩i;9]戏┪狮L諽鼾銶g0y8� 茩 展窛膑貗崁o:1%棍蒐0"JQ/眸�5揢g荠齺忀�悀�0HA釞�揊Aj� 瑍Bt{銚飹l沮期蝵*�<蒼序鏙没/|n!�(>�,� ; �璻磫0婶m=z�9⺧澞5抈�(孳�6/k咦[> +$%尬篈\秕6:蔃��;Xgq鈊|Q觭��8E!.)ZQ�窿!裿1��Hr炮B繢輹�(D╠韮霫腉妾[g�#蘋睷鏨床\&Kg�4篕襪j'�6隣s;^;k溱\�.熹覴gv�;伛b�0慶�詹0,骠iw�,聕�Vき=洳�鏻4槍�c� !基�"�&�< � �.婅骗.u胲�姼:�!怉(6>�m\悮ㄜ蜬;幊b秾軺� it{D毻-3J�!J貾蕟p眾n +蛎蝿侶(拲]f�/鷊腬坐j�轂_鼻wL$>蔰x鮦x:槏't�舧銬灺�<|;UBZ陈�#I鶧÷誉柙nV燭�(t螂p詿溈5"1l鵃n,|&,:I(膩�.�-JJR佊侉�囷98 +孎乘�g� 垑�"損>z|#晁L鷹;L繢猃�2)鮲珛�(爔Q腄Y馡�0偮坢固s繞��+箬蛮�?�&�欧Mㄖ@r� p浕侰 F>!鋂桯垹漙U'豜A�珰蘨橲肸Q�P巡╨�ハ铓�葮暥�%埧騸�!/&践** +�翰\]喻09r+澚磣C沴f�&娿8�3艔�(�\|汉�4�vh偂黌辙羖N莾υ乆u�0_IUq� + !� 襎勼鹛甈KbO隞P洓丳zjj纏鋃牟溅蒁l �聍埶緅瞒H]S搵}1鬽秵墐=b�Il骵�?:�5;D}峗S|摊)�+�_氂螳佾aj9�og冃~(@x�� V瘉譔�&L� +_惽�5緜缭4" +� >�?Q宴O鼈摼|R睇��坈,?�55愢獄 醖䥇腨M婋鹅pT00O2�豐聴Q鑉墭r�蟏貥�.婼齠& �葵dfJr纃酡抹V]^#J%鞕蝨n襛l侵欭縧o簞焞荬~c馣蔨R骱fR楎骸�&p顩富�谨鯲=�V�耣轸endstream +endobj +5042 0 obj << +/Type /Page +/Contents 5043 0 R +/Resources 5041 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5044 0 obj << +/D [5042 0 R /XYZ 90 757.9346 null] +>> endobj +5041 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5047 0 obj << +/Length 1592 +/Filter /FlateDecode +>> +stream +x谳Y[o�6~鳢� +t半X%)^泆@噝E�6�o�唊+壭XJe9m蚌繌eIX鱎麃�淆痧��8P(L�*�<�-:(感彑u0��>∣鴈躽�+Q� +'<煑8�$线tU(z翽7颽賺椯誐O爊8虢?(�!b\ 7s 幪游p\i僗谋痒斌� +孚扮FJ侧摼A!V��%懟龟渦鋁B舌髬崛��伆s宧?咍 GQo��.媔懱躸練鰖昞OV箅�,K右WLeH(%�kC�,�<癮�$8�=纤HY鍾躢;滯舚�3�, +嶷pRN楨K*j=e蕨� +}XI*岃&箨� 据疶1r脾紹c�D妱�(賠I靦�d#冤nx鮒/I�8O燙g宷轗!w凨厡訂莎琞舉灜..硗�砽q=ueСl享陀�3{慛1黏@算b暓Nj旄仛澺1)Bp% +┬.4]Q;\T$絅�枍#`b[穢佳馐泱6�)>磍�.6EhK�鮰║篖.RW_乘inW�)cX鶭`Mk��"�2灅\紼 m�椇忣蠌�8空�0h�:鳒鄸k蘪字╪kX鷿禃u靍蕨勍砿*Uo!#趗k3I�'懁r疞杗鼷雄刮'绐﹦!焜(觘rU&l▽錰訖.|Jg$鋱鴏v嫲F肝u�<7:镙熭;*︼氪憋浮醼是 +嘍扸宄|犄K迀3 +�A0扆�'s [St潰Hr忨畽�轠鄲俼袠c�.Uf惊 �"*z@啲�� + +闠郟D傅8橻2wd粘�c秾�淐 +�Gk5鞸`_}C�9诜鰂�#K%怙n徜T<:N宼k�� +;\%刷 +�錢爴/c槤G頯Vu戅:�D^No�-竸觾軮3}门�8�f怫0嶠帤6/�#鏜:砋�榚mo僐渳K(趴縞w≡M柼組@:��>L獯虚[殠f*`觙R[秇仾唘� ;物�6玳rr9碪A�=苤L�亩ㄖ}嶧疐迀K +b噱讁禞珥槡耄趸�5�� /邝CvMa颠E*揣w袸崂谮佀)<R綣+你`�籓蹺vWY趧i爸k噳b﹖臟Z尽*zZ�'9兏�' 閚9n-OU5悖�靱�踘曏�7妠浯W�Q*醓m6焜虮耸aU锗牶0�6bリ%鷑xj枅y頌O嬮憋[1辭'HW�邳?}�(?繦蛡#R��"掝3al~甋<�a�0鉑w窦嘫w7樌�戣A鯪嚁郢�a�,�7珦遖v哌隈i鳄�"N坩1遆<聩`蜧Eendstream +endobj +5046 0 obj << +/Type /Page +/Contents 5047 0 R +/Resources 5045 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5048 0 obj << +/D [5046 0 R /XYZ 90 757.9346 null] +>> endobj +5045 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5051 0 obj << +/Length 1707 +/Filter /FlateDecode +>> +stream +x谳ms�6鴞~E��敌�%踠鞄研旳�6蹢宜箟埒H渀;-��#氡k;r洊}\j[殷�*夣)黦齹�=閼@釜?烑h�嗺{ �榳� ~鰹芥A? 佲�?供}娃� Y苪[}�+瑢谷榁|{徳iH~馉V�塒义Jd艱a暏秩Xr�2匧[lz��OtN矶霪腹mUS�#>鞚Z昜�鷱7站M〗胼Z埘�?牢u匈煾�:罙�.�;r+A>嵽�<洜縉餻5�6E跬縻 遗鴋彯騣毝/y燠8){夕£gZ ++]叭j7$雱,拈鋆�(颦'-褼cU9颭歭篤"浧觶�1溾 �{尲�C'屄I曅� 麙3\竂U;偧 湜觿 +_q訿"Q*黇椇g-糍僫c隗醽lY肿貇郩Kvc栧�&7m轳�$>礐椀0.�y< a�hp8<:7鳋-4姠傟gI篎_ 3敲椕�R铝醻{尺FimU禽僎ie-籛瘭W刨�/郟怖铛�0岭��烉�)秽墥完~擠)x悄\,髚W炯賏r{�痻溢\<鐇�誂櫡�.返牾曲漳賣y+聃�"Z粡�-� @纄ndstream +endobj +5050 0 obj << +/Type /Page +/Contents 5051 0 R +/Resources 5049 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5052 0 obj << +/D [5050 0 R /XYZ 90 757.9346 null] +>> endobj +5049 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5055 0 obj << +/Length 1755 +/Filter /FlateDecode +>> +stream +x谳Y[s�8~席�2覤-t眃墔伟啦0,煲0� 0c;崌�禖圪蹇飸%;�+嚖郄韊l雛t.吖H"c 縟8�R�鉮1裸3h~>"钝儈os�/撗齙�+�闵处 鈹旭$䅟燩p鑁�奀"�2�; ��?M^巬,�堧睌p�:z6iW� q&坁镫杳'<巵睏#寴抾|ヨx1�)k>妫撗�-観Op膳 s &菩`�FA卫菶扰0�轸#�8 �"\.;N娾�絮�#竽0倶卓k笰� +鐤�<魘 +經T�*�3蓲9�<�<;}鲻頉�?;�(KΘ鮸:蚖Y躦N�z絲�9s pK琙檣 �:欹蜼f畿7`3)�滕�s奉Q� 煄7��碴瘸y嬄露厽骍e^珯mJ�*�3瓊rm�0媨矛鐷:I&U68h�,优册=NK`?NbT疈檹%綜> +$%洑0后(S坄苳\q琎@賮熏�瓝Y癦疵喠 扸U� 贏娩g62N兢藶4瓮[� 嗦邴�帅V瞨柉嬷�N读AY8D�$鷴亻醂�6貒;毪U蕻l8[5`猣�駰.岼lZ刄438�� `C0s燣a$筨=窑E�"伬��2,输T鱤T��hG""@,爘楑5~V轵"WV }�<];磎� �<PD高� +閷F矇F绯t灅X箟疸�隔m�4*k厌唍菚踙3M嬕隗骵5�胅�2_Q襹Eya1'UR,�,眀寠hH�傋僠敐e5鍕%,U&裾咈�34藡E8ob#g洒U癢d�QFz&匲成辊蠽�坵皕菤�"篵]O緕 醩康耩篧m蛧鮂偍鈚�(S$杴敄粠岟Qg杍GY�.�Y�"酮Z�氟r呝y� 蟪[豚O 掻d偾�0GJ� ;l&鵱撿糒秞�"锥仉紃�m:�1偛掞e��臘_,瓴��b9莤7且霭糇︸�蕕"S矺硶�9aǐXEVV炡(v潉`e�霑�1o圇銡K[T桲嫷�65G蟀,{mU5锏虛飕�5嵠9� 鱩.�0qF鷽eh�;蛛k鶑z5W軾s惭[c蓍拯⺄:楍筢C沕�:&ZQ�#��i �糤y�0鑷泳q旵柔孜繭t礷sp撓^黙#Zk镲C牠鱛d恏长�劖*這蕁�]�鎉袑突�!�盻�$溷郊�0礓�O諳�6y篾D鲹淀镘q*沋幾嗷6)�纅�愡纈8�3蘯$�9m;F蚠菂G'壳�u�)谣&俑々/m�)彍灰i嫏樵MInv鏗鞪g儯u副M.#箎竭;O讹觫ud剀l5醣(i�u�$ (`�'h+�瑴嘫u宇O6雼��Q'Yw皴�a迷�052@蛍�6灱鉏諹V單-椤s-F倉闘卅l┻乎竿箝L漬圃柭屟&z^硧uR≯庬�9厮湱&�L1鸍婹蕫"胾�&ń淃1a6晜s禬 � 睝}�I黀せv飪靰:E,�.`謤�.飉 + ~牣-G 嫲97x髟屁�*嬏櫁Y襢李抮_ 5!舄h/ R蹩3;硚�-Oc�Y藹詡�A2褳璯 邔�-眳1雿忧a玿y錣�思� +&�S�j� �潍 �"倠�t隦�I楤菁.侻p纃s玝櫺�>O菠+劫謜Fyf灴7// ?X�澲�'~@��?a蕈嚁�T鷆u=賮�/腕i~qyugO=鶭取�損櫜endstream +endobj +5054 0 obj << +/Type /Page +/Contents 5055 0 R +/Resources 5053 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5056 0 obj << +/D [5054 0 R /XYZ 90 757.9346 null] +>> endobj +5053 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5059 0 obj << +/Length 1399 +/Filter /FlateDecode +>> +stream +x谳X[o�6~鳢 +l嫍J%)^鄣@噝E�,kg{h傽卞D�-9�4 嘄鱍"%�2-莕煉� 潘狴螎�:@﨏G�� Sg�鏩�@=硎ywu溜懔�?恜�'(⑽xVQ犘#"g<齶� 簣姡睰�魛陮�嬪_g*<��8黩xP�,莬p6蠶�>}@耆` I糒狍}�?�,[c'铵A<�#�9阬丑"鷛罵蛺o溦\�'憵|QM"�`菂Ru榃K~璮扒8rV嗇鱓�頠B麺g谜�樊/�戉H㑇H姰厶qP留v糆�#靯,�"淘﹣j鈆猑枿6� rc蓾躍筦�5K襷]�%q顽獁U�瑉I憑Z緡��) ��!袧咅鷛ち⑺t揹y;苁#尧��恡襥/<东輏覣亿�j9働惥&言��4虙薘�e$氒i��!@鑓腜*穵zC辱��� 襾,+oZY鹚赑戻經鎅x骷韓爜5�4紟�<跃樺i1蒣僞K%,崙J5嵨�:rt:⺶4:覭�-��/.-悚熕领sta鍧銌��7u剎� 潔邘G楃хg[_籛i苴F}�-� 钉"b奋諴m詻Vm埒脷�5漮;蓭叕�3鮨�跊鮌謼iPnz�Xd传-耡岻瑊� 儃�C}P檕垔赏暤% 鲣k蟚舮%鏨_+薉魽u殩Wl麹敞Mw +G�偸��kb磯伴d鵣xc賧逇闫 栒朿蹉U7>齝Ю�(�标#鲚�n^腁O釗�8T欫;g�'Ir玱瑗� 浬aw掅 M�蒐捣qr洓尘\戙絉aN鯦呫$o蜻:翝瘠网搙�庭P� 纄P�8榦C燧S鵉渦ㄑ)�4┇壆)D!�-o耆礮踭�=芶�3掻�}R牟�0 S�附�&AlV&EN蜌�� �L#茙唆截髓厮栌0/R-猋&�浺�皗鮌{I.�歡)媚滋��=��C0滼&j朝舽z~rb�;nq徥�襷p狚赶4��#kg仧茼(場vHe1Y`G�佘2軋ˉ岓挪S^譋�#+蓵鶽&懍<蔰汋湎傦Q_ 裦鰆#熿S 7� +'bl弦袃榊熕乼H 腙蜐�-蠫玂钤嚏鍕磸淦2k痀)檥芶*侃z\/CW冼Yw巼��"輦椚夢爰,熄晖唸TaX瓶z╛鹂=\噆o麇:EJ�藍endstream +endobj +5058 0 obj << +/Type /Page +/Contents 5059 0 R +/Resources 5057 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5040 0 R +>> endobj +5060 0 obj << +/D [5058 0 R /XYZ 90 757.9346 null] +>> endobj +5057 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5063 0 obj << +/Length 1263 +/Filter /FlateDecode +>> +stream +x谳XKs�6倦W皸屧��$�&哟VS{\箥增鄕4�贉Hぢ嘳窊�^�i妳)藇s恡纚�胞-溉侐彍:驚@(wf�t.d鼷2卯w�~橍^⻊'擒�,J �v&笥~紒�歆澉E�,�靸汆lr銹�雀b洎揶pR飄b�#颠甾�t鍾保$饳s-� 牢狦1�宿各[-G� l�"6`軕=D0,qz卙�"漫� !�z�9.捇P繙髆9�)r�喫O椝爹e�桿C枋2蕆訒�2f(Z存漆�蔐譙Rt,嬺z甊庭@鈙y眬r┙F�.)e'� =�陟憡糎嶞扬乔�儰�1瞼Ю篑x}\.�>罃庵帜�"I?B#秸]雷F{]|民神俞h蜥p86S�?忎z��擺轮VT�讁罕�3諜滷gK橸-敀F��6嗣��#h�u腿hendstream +endobj +5062 0 obj << +/Type /Page +/Contents 5063 0 R +/Resources 5061 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5064 0 obj << +/D [5062 0 R /XYZ 90 757.9346 null] +>> endobj +5061 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5068 0 obj << +/Length 2089 +/Filter /FlateDecode +>> +stream +x谕Zmo_a�*5゜买fH逆bN巕'=禃K 幯汆驋\�?邊萘|Cu_剌gf灊�@]�C]呿雠>p傇]l:l�7遳眍狺撖穠琥=F�8﹌/�$膱夂尔�囦�譯E狾qQd/脪傱儋l�� 肊厚偰I�0更塔醒靊e +L�%敪鸒鐝控畫~璋 b�WX) +纵t巼屎cu~+�!鶂c驂�?. 苈亜窸T, bY�"篋騾囯桲,-唱� � 嬩~废r 蹢J>@黯�&h�.谱g��24璨'a(踪��� r�?鎉舰OfXI�[諒蕒F�暂k�駛愫I�呴柆浍p<� 隩aI�1|險~~6崮l訔挂l譚 +�8�<欨5趽我抟屈瘯z吾内7�戁"t=RZy� 釲騳|H揢HP]gCJ�4璫R另亢Y剾_闍(咭缊望豶cy永皟晇3頨q'F*in�"�y晲e�dEv��P藃=鼑开Q!Lf$�蕭瓠哩�5錕�(.搞E/炢磾p柖闹M硝�$驘�<.澍溊%�4Μ鰅Oρ芦<蹁N鬎)F洏誒V�|蚙�4i[j-�&t咳�]貕(沫m�$�(衜绝.話晸@�綦u习�紫鎹鱗#.鄊间f辊虉!棈JY.m阁[�4N�潐�.4�<�/�豞跣�辛韚a�/�+X拽ㄗ>�鼂V)蟀螌X嫷鉶紙n8乬X^朖�9兜豆&m�珱鉖蹣昻 +9S��*棘嬱鵽p鞥pKgZw �&� 意艻既w B�=廖Q韀磯5�#OYc肦伋袷 +邞`/謔�"l7J-襚悙鼁�F嗷a,�&L� �-@� � 焲�衬險�囁涞�H字[d�历w睫碰P_�,{�!嶰XW:'s�#�=议币2捋彧⿷碞M鉇jCR积H4�3{d槫擢�鴣鯫哖燙颠ЕfY \h|亊?雬薭�[�,阧羯`<険;Z繚伽01ha�6尫崼姲0}=t�5�J矄駷k鎌�;訹}+趞揕墹猥詃猧雰賆ネ訖95,�6�><曛`髭;腻j璕�?h猒k� 赫�觏X獼�T/j-翽7祦]p`襝韽i�5�zQ觺�0T�#�膩1贝遞x ~�l麤臥絎飥#俳鈂2泯<槞趠a �5坏l轂費Dis� ch暤di鎯>鞋�(N锚pfi鞵嫡妿�橗0竊翁�'峮�Zc�'秄毘┉撦5nd�`�j刴 X圻�&谳X坑&稇I皎[贜楠衮%� +�>獱躖呎厸羏鐼liI!~^碥匥WT�zA��谽[尺m塘vC�紎惟乷奠釾昰谷Q窷斣*�釐Iwy,v葑暱X�7}釴粋珟C觓滌畾呯訝))婄�Q�gVs�)侂疅接蕁� 暧[琶m饾t鞺硘鴼W滩⒎�>餜�^聃溘冂獟E�Z/K塬W� '耿溍�'{ �澲栎kb�葔$圌�7 +a譨� L攏�6礫癡x﹠穾隖S+ 涧�CQ闋Ed"鵙� �=[膵忝覢�,懑F@� +U'3疖~�R纣"L譶M~�铯o�%�&樺0蚍I+嚖�'0<纤_翠瀡R$虸2W�3�,|��.�妛b8檽损與秭儎oXlL$壱W仅�?\愸膕�%F閏踟�.厢佡F�抇K嚼嫓軓g_(d.?嚶嘖$^ご�8辮� G?q任偆醇淠渨Y屦[�,H愊 >�={@d_&岩'�)'endstream +endobj +5067 0 obj << +/Type /Page +/Contents 5068 0 R +/Resources 5066 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5069 0 obj << +/D [5067 0 R /XYZ 90 757.9346 null] +>> endobj +2466 0 obj << +/D [5067 0 R /XYZ 90 739.9346 null] +>> endobj +438 0 obj << +/D [5067 0 R /XYZ 90 739.9346 null] +>> endobj +5066 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5072 0 obj << +/Length 572 +/Filter /FlateDecode +>> +stream +x诃TKo覢钧W臚蕍f遊.�"廎\Je呚I#�:qJ黽謂'丞#R亅貪澢魍C頒b乭┅錌懮22s荳6顏��疐临%衬R珮"]A!� %7ˉ&0 a� 覷矩DBz輲咲�� �+^�2凑ip1�#6�$WX彷7稝Gl逯H蜞 爃-#薂0�3羥餴_�;陝揪$蚓�q'p�s}j邨R袬刧uh)2鉰犆x^{,旿 i漘栙d=铣�$� +橀IT諭鮜�(h硇,JH螱{>泑烒]Q;炰亵+H(Q舓O� �9? 2蒝丐叓�/<>�9 J�%`<��)p俰任阴 猇Z˙S聾wA響質t�5�茓<�^�&w懵_9P#-?㎎6^�:B1祢�#M迼i表@?閖丙nU尘羜O鉟�%骾���績8䙡q輻鳰�!奞T�>�%魋}滃_攉荁7Awm皸�:灀� +R篧X镣昑��:梻湹臲9裷緿 墛銾殽舩�&^◇摊飛沘�2,Y陈9沌 寂斶M#&眉餏cM浝o[烤�ngiv8濲�{骟邸嚉endstream +endobj +5071 0 obj << +/Type /Page +/Contents 5072 0 R +/Resources 5070 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5073 0 obj << +/D [5071 0 R /XYZ 90 757.9346 null] +>> endobj +5070 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5076 0 obj << +/Length 2024 +/Filter /FlateDecode +>> +stream +x谕Z[o汬}鳢皏+mR艅n&%6I��N嫡.乹宩� 8i�~�C��獶b顂蝫e�!��繮f噿 12菋C�懊軀9匊G�苇灵攪2#婸Z玪0ph篃� d廏Pb%鰄�-pQ`�面鯖韔7(疞Cg纾 �/ 幙X�猆霯� �襺�|] 瘕�e8y, 焢卐�,谩?�!G+泚9鳳瑩wd汎 �k&x稝�b翿N棊G�e伲豋秾SG>尌∧B啎膴\燀O忲G��!F%眬B�R 鄕$bч���<鵴6圊氍kT魨V敟\C沓��D 髭?幏]7 吠鞫粉8�r� X,G欋E^萬p谨喏狰V�i +珴�2喔簶恥睍6駁�)$O歊^2E^RG卷mH? +\礙h麷�-堪Z�浵�"� �襘因uA趭� ^a赮m匢鑴わ3+癌�8�鏞,X/@n^���?崑 稅检Q�3� � +sz揌(�8�讕任O6�:\�*魝6 �卤鐰{Z莂1劮h� {C謧EJ"绲Gd镩裍澤,-柫毷1庹皍篣5谹d�7� +*襲鳧謄嬲-1�hy椁�逝晶{�%S祏0醷3 w蓅M哂�5昣挅{��,柝{DbZ ��2饎嗟F�<,訴B'�*背iё礰�4平鍡蠒烽�棍皂2!{ {棳C�做笠t|E詅呲庚O7ob溞讈麶mC貭m冉ve摸�2 愤#颽潝Q�)C>dYE|^呣8� q� 袽刡=v: 斣爜\/N"�"@裮屆]錉讪{/�#YVa淝D碠^�&q7*[�0諲豢[氕<'s4�#q�"逰歜pX魥創�齠>)� q鍹醉H�(帙(9k_欕I蘒テ调�=:膘鈩Zgb{AM2鰙鳻獭�B_�:p掾tB鳐塽鉗\�濾j疍-j牟p6剁8�1,7珢 �.iS 譂愎幢U�;獝C锡?^旹�:讪�?穜@翝襭� I逊駴玤屿X�e�*韐此j鷊嶺�y%糱呃鰇铼E�膲楈:2l歔髐彟淥u3N殳煘W頠�4荜�0~欺.�*餋J&鱽�8塃鴈�,猜汴6嚝�) m姂�3≠)遙嫓4疨|^懨�4�{ &巁0採!箿霟X�+�$鏱篣 昘i]鷯6U睃帨猱璋筰i忠"UeNN艄eh鏚K7菳�瓨t�?�(嚪�?�)s侽0T撿�d唠臠0SC橻歫濸&撡r/Ic'N翷恢,:咭OJQ磗�膐AI╘恵 諛\�錦沬謁M��5/豞P� +Q╞X赿9SH骲i,t硧C�,WX裈3'3E籚�8�槈橨昲闒�鶜W蔿謒_斔s�:W⿸旙Y淊��﹜M5C漍呩元�/X53襚.詨V栽�*V癰軡f�3蘥�璏縊成t懻澦駏礃誱鷫茦糌%胖.澎&�=`爽樻�恊榤� E  乁`uD鲐駶庆T廬俺C=vbg'0;l)5艅�:=┢�`汍U&碖sx篛5欻!谹撟�筕�JuCb. 17弭*屄_迣~:Ku軋驶"婼極���j埧񵽈卺彲_�=]\総悘Vd故�?$�?峬$Zu罍丰u韖洅叫�z:�P媎粳歞篨w肷$+秭巿1趖y晿輳 w",-祁$渘#y褊鮴tHZ 4v�i救�險g漣F\�吐沝鼉 b�4輊廭濭沭 �6N摧麬1耣R嫖�*旎l栵\�= 棽霅<浴惟覜鮻�%E粁{饷娯楽�(EバeH�7舳[駋?�层8攃$帻Q,*睢P塉�-斖M√汩,�]-邺�芤嚭�"]例品O44@��$T咼鶋�翍T丵!枳椙Q詝T岼睺奷YFe䶮章栳Dh庙牌��F哣*�'� P�81 �<�La4�80s 8�颀s3I娟�"痤9yp璱鹙L6磉:丂苑颣R萶簮�.P�5盦凤O,m讻 嚻 瑛E度姼桃�%_韵�7崼埑u颖粂O甓壮瘞瞡ML滃E軾_緅碔x顂�<�?}~�-鲇鉵K慄� P焣鏴ndstream +endobj +5079 0 obj << +/Type /Page +/Contents 5080 0 R +/Resources 5078 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5081 0 obj << +/D [5079 0 R /XYZ 90 757.9346 null] +>> endobj +5078 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5084 0 obj << +/Length 982 +/Filter /FlateDecode +>> +stream +x谕X[s汧~鏦袟屧)浗胺d蛐苆芅S9檘<寪玍匥歀��瀅@6燛`牵饼{;琨栵�dC鯊l mN9惸ev氨爙:遆�v愿S燄沢=�K[�0辰ea�!@1露犯a屒鎼肣~z甞)!藯�砞噀�$騇e~秺q晈fM糩�0J襼?Y梂衈(�gD +j�� )苯盶Lv嵉5侈呲)�&~Af�褞 V|y�2v刾t>浘~;烳�<櫹紜彁耮)卅q鹣/c嚛 )諐^jr薀#佀\Z檘嚉裖羅~RXA� +!�耿0鰏1�.0瞜y荷扼 壷wH$��"j纳8/&繛xS视賢^w�6脥舰2綵j�)XE�<晃椝0箘Wュ焇輞磊A冱蟞P�撷}t6﹥砟缏ja盻�8 +�2�=5M>渮命鄪��芉�-$:G]c/躍H�)�3v?!-� I 缿�-D虉�7p>TH�0鍪束P!�!Q貝齪!i聠恱鱸躳4XH魻T≦*魳R赦^6O +赕诖�i祻R31i[�&�%兦�3傓儭G� +~jW!;\�\鞓恋L釳� +�=芦i癕砩3揋臋孀嘇� 暶醎a蟜� GO鞢pl腎鰌鵱覜:尯�儙�#o�6LV馼刂� �8i鱈x�2g.橉hJxD鱸舭凣郈g� 芧鲌蝤敮鶲�lc穎锛簌溻b>}弁縴毞B獅/ 歸M攦蠇AL�D许b]'�<轤醼P袔梙"1@X懂n!KJ熴章DY玛姥o穪恐Q觞"DLk幠岺蘔隊X莍ō ]O嗌]=A錒q┿?\斢wY●皇]� �<壧s琛悜l�'�蛞�穙錝O萔沺缳Pn黙軇镠A�梤/谂$�/Pc� �嶟P潻〝 �\/敥儎‰H珔.梅P4�7a&~�+�$G弩蓊錶岃(�WO��釜゛Yc:姄脖_|箕韩粆鵽頤躷)贪K��餙endstream +endobj +5083 0 obj << +/Type /Page +/Contents 5084 0 R +/Resources 5082 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5065 0 R +>> endobj +5085 0 obj << +/D [5083 0 R /XYZ 90 757.9346 null] +>> endobj +5082 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5088 0 obj << +/Length 1329 +/Filter /FlateDecode +>> +stream +x谳Ymo�6_C<�,�%�0�-酆dm毩蕨�Yv促�+K聿��}蕭J+~)1I�<倾輵B�?� 棂�侾頔��铲�欘戩5_鴌:x�+�俢頜缯�靓�7g瞘8� 瀖V�D脀觡徛@棋愱 寜j�2宲ご�紋綑剆=��垁y�H飙L糟鑾J琅�!猗�=兮Cd閌闪譴0劽 + <鸗1戞�r蔐/2綂靅駩轻�-dP鏝<駶�甍��7B� 猈咀�~�紽箬她U + g岇覎毷5� ,�%�$%=瞑顡卭馁��q趥3Y荙2O�8L鮱騤z6q�!蝝風�朕�4?}嶠蝌cs<�T�<[虳&澷)�湝@他库ㄨh�僈湂k礩t0匭Q喫� 紥� �%0乢�2N;坉寺V�;尨?D�%�51伋L7�"礥w潐;﹥怓頥貸跙鍸&鲔T賧G%拃�%E玼x甿�8罎lB驭�5�!蕴掕"�*�A鷲�.�+殠�-Q�駋�;XO岯篙�yi�*7d栮� 2 7縔怰� (�|扪�;Q豃┮�,�,i=g阵埕跬D鮜俺�!稊J鏁僴�E7緗YYr翻�,��2GQ鍲:誕詗凚�5:0莒*3`�(┡l�踕�燵=QK 娷�豧︸6U箙j?n�法_嬛1{\[$h娫qu躙nA醞e霈雟蝥蝼猾洬忥6`缴⒖mm 抰]麇|经窊悻ro�殔趍殿恤�悶*炑o�,�=眘d蜐c�&U怭/譇�+蟹ac�胍截欒�抗I醜蠞曑�蔥瑍�9 摴-P俨}(軨|鯘�牞 g簖陒D E镣�瞯餓`巷 駿溒yX巩�&�R挣暯�"&�;齹肮� L.�!亃�r}7bv栧:耀�媾鸊}�9q蟥�e� 爀ndstream +endobj +5087 0 obj << +/Type /Page +/Contents 5088 0 R +/Resources 5086 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5089 0 obj << +/D [5087 0 R /XYZ 90 757.9346 null] +>> endobj +5086 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5093 0 obj << +/Length 1936 +/Filter /FlateDecode +>> +stream +x谕Yms汧_;S籧a嶹醰:�盚e�姏i;.d1�"皳闊锪�"��:馜w芩>畸八怼!�� �eQf^悊n8`噺�厌O付梠9e�0娔IC{]� !F�7唇呶8N8q2+砱櫨腗�=C K�''躮}覚苙鶴辘A��a�hv)�y 錼�;�0纖栣暠8|�朅娐 脕礼匈鹯2P,h襉D|硞H`�4浒�2QPa��,{��畅C� 嬈騊f9啎a_�桑阗�4陌d槓傽筆济HaI夊螱uY �率 鉨瞒�Cl贪�"c|bDaDI@茫缈#^pitdg夒譮=憮|彄pOM���O�,鞵[榄@{�:p媎G; 吀髶0HS��%馭郃/�8)磡@枯葡A鬑簄yA撅�1�?N旔B?疥毓h@ 俑闠屎x噉�杔�;S黓Z苰垷�5餵礐-濦�8堚4p� �P咱p�#疶y劓Fl w��N��KU葇oks]� 謃帡制2p醛䶮"熯�笨 +^錕繻B笁盄� 澰O抍5U┭盙籜�?#饠56垔溞�麫偅4:擡豲擹~チ!1#/N v�X�0N;綞8箍y!贬彏� 垃奔:滚�:}.��2大�<��鉵符�?早$O裃f仫_癞rJ纣g{梕嫉颰S#=x�4�鶷洅搋G薁潶檃掱��,;:緲B�.諂]殮e祍侊焲亊粶雬隻� [�,h襞d練陭诳^伽�0hc�6崑毑皚;t�7�J"脁K~o5s2�甑>醉�5k菊鞥nD�鮑�2沾跎j撬暪4,�v�T騞猍摴jS\W�琂嗀[P鸝3u>颼械~PZ];虪v勣*LuS涁%7j� &=二�>皷贒/{诏j~�81桍~�夤`�*﹃瓃蓮肯摃┹�>耏玨酥頃軪旫9缙0認杅~�'汋舏X5畀,崲潽禯�1V�椞YY;奖� [3驼抑嵟�73�0チ�*;澠��0� 骳U蓽闩珆褋��£ni%/mS-賛佴>盻括�6L粊mX麩�谕\垦�*廴5赣-韅t赵璡|E緒*wUcuf皼�#z[�j04^�匥%zI�q埗翥`x1'3x� 衠t�)_ B�琫棢UE崏|j�畵�-旹醺衵布匂>u芸簲釵R�B鳹鳟5Ofs馜z�授峵��詒袝 ]崂B緲藃庼壷N宽蠮|瓻�熁穨蔌�H_N,n%趗鏝)竍蒥�<)WH翴7!8袮�?z�艜��"-�5~哹淄呋(�)韸�'�炎焛邯E 淦+d飭$Q[茆z寳 �;茎�E媲�)厢咘�@)�~�'NA吸�9鐀䓖 峸鏗<薶q魲解�+庌X鏸湸昼淴嗡滪銿鏕�舽v~衍`�x訊蝒ndstream +endobj +5092 0 obj << +/Type /Page +/Contents 5093 0 R +/Resources 5091 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5094 0 obj << +/D [5092 0 R /XYZ 90 757.9346 null] +>> endobj +2467 0 obj << +/D [5092 0 R /XYZ 90 739.9346 null] +>> endobj +446 0 obj << +/D [5092 0 R /XYZ 90 739.9346 null] +>> endobj +5091 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5097 0 obj << +/Length 919 +/Filter /FlateDecode +>> +stream +x讠WKo覢钧WX庖爁籵锫�7�詐偸J'5J爨l� +蹩3掭卮鞚濝�=瀽脧�菈H恌\瀑2埋蕊#獐噋?l3�G'铷�5覓蕏<�� A 嵡觨G<R亸諯矪W儖馳瘫BXH纋X( 5z;�)騰&Ifg繇荢扮,聢i%膺p缊hM鉫�)�褃鬳囥.珸�AX�%羋��鐜斨nQ�拦瞁O漦(Q斈-鷫�)C歚1D\r嵝捔Pb|臬*︻� R:�;xS畫y欫jR环籍�萻 嵒�*D訟EEY楩QC>剹��8敁{ⅰ憪�峸�23EU畱eIL誄�$翴潞鲂�YU螉堆瘩虫2啍瞌sQe撆U�6錮�;� 懇qH#(1� h澴框V陠攦- +Z° 髪溥嗡i�-�Σ_Q氷竻jy@�)貹zVW薱�H�柝�C"p�G鸈js�#咸緟R"蛈/勫z镜歐絢犡鑢i鮻�"/秮t\O�(sw8�4ョo?縤q姨扛0箶u\U�w鳱)勝 鴡�K7刁 {臯y@eht$嵫1Y瓲3鱉�婌熠d觙b|h�嗕犓塲拨禝�A盘筠x�臝霄瘕箾Omh��&_w亱莯� +� _>赙.靌洘 +f(TmJ�祇�成���収+S貱=狚椾&(罛腜鱦崆E1+ab该子Q鷕4z闱怘h麓E� 飖_暖O里bbP>幾珅g賋澑)V┥琋KMM04:@勶c怞:6�6 X艠怅�&A鄣槮v鼅H�>汥`� �#茦�3�Mfm3w籠[桽F撍幒7潧瞢牺BL酙p/�"厊援l梴"勓鰊_�備waoDc潲继k(埄埏=?m_�D��匉'~F�3��P尌{� �8猨w販�<7驅椬铢s=纤4媩 >�读賓ndstream +endobj +5096 0 obj << +/Type /Page +/Contents 5097 0 R +/Resources 5095 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5098 0 obj << +/D [5096 0 R /XYZ 90 757.9346 null] +>> endobj +5095 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5101 0 obj << +/Length 1899 +/Filter /FlateDecode +>> +stream +x谕Ymo�6_a�� 盉R镔0L睓D�-箳墁鑺L变D�-e矞�(鲞G墹l賿2y�04v晴�)���:璜�*琚绔�?愭�d��?�p轷委愞�]AJ遊(�⒕|:AH9 ㄠdcNIQ'P磤盔eH+綴卶鎔Q焴鲛醢W翁�散髖�靰� �Q卒� ��:戬zye賡{颣=矗ǔO哹絹PH �"b癑 �Op拝�8�a緩^�5弹$U�<�Mq(}侺惷�r凚0滅s梡愗*i艀~(�e�&EWi敋]� 鰓�儮�A�<ど鎵瓮歆� Q�! 钤I戜BH�<�/邭礗痟�UCm缣$fH�*搵.PiS䦛K眨\簣萺h碭{蚥U�Pw暫忈rI鞽囬s楻� +牏�睑q$豥廔趯獤焵6E1�6�醨M+?龡u4_ 腽gf�"鑂��_櫛�縏諉j�� +5g赗m�PzE晷衙溟k=��o忘訹x活俍憶%睃榁H妘蟣P�抁H唭姮糕 Q#"PD�/l姞柨l増鍻Jq� �0鯆幌0��'拣��'V亪齻 $^ 鲒�'ZZZ�"垢H�+囅掲_鶍錀�崃[d﨟X悭��馿ndstream +endobj +5100 0 obj << +/Type /Page +/Contents 5101 0 R +/Resources 5099 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5102 0 obj << +/D [5100 0 R /XYZ 90 757.9346 null] +>> endobj +1540 0 obj << +/D [5100 0 R /XYZ 90 739.9346 null] +>> endobj +450 0 obj << +/D [5100 0 R /XYZ 90 739.9346 null] +>> endobj +5099 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5105 0 obj << +/Length 1195 +/Filter /FlateDecode +>> +stream +x谳X[o�6~鳢�0`堐堝!臶�>t塠$p� q眹,0[N�9瞜溯偂�}G"錒 +環�黑/琥� E(�!04PB�#Lo{4噶閣=p�!畤� ?峽/�2b$摿x^p怈実�鬋&鐰/�8洃i�r|DT*$餐w1︱俎`紦錞\B.镾镡�3T榇G 7Z鄝0�方堮r拌濛~亳� 佅"躦� pFQ(Mbh〔I�%�呦鈟捚vp>~3L幭�!�8� +裏咲2朜敌嵠�4NマKy4<; )��#5濱E-婱v�%域}綕f鲚!5勺澊�+餗2彶懔p4ON�93欚~赺O咰g(^罳 眜�%f>b睙8G旹)鲬�6見\_P(/�5纋a0`#]靫f訁(� ㄌ��莜惱�&R諭窾7鋃)U7I?尞榍玼A(�顤�0H�,/c榀嬪t睝齄FLf乿↓梠 \瓠鉲籒砥埒鰖R跋9�悑扩溁/獾 �/�5A嘝嫖鱕�h妆�!�R広"勫廷&P� ��后uW�=磩� /魏g髸峒WxW� m呏�媯忨b1M�皢-L訣 l2鳕AdQ]�� �4ψ骸O砬訄oO�9m嶋?�8�=HY 剻巈盳�瘚�-貧蹔售t撥ゑ處捲漀繶]汲e蔁/笕-h�+茄>~钽裳勹韉翎d48w;�?O +#�敼#`2�nH顦虴r�$;眩冕c�0�#V膡兦}�"r勛滕陊�岽]曃k哺Z 摵a^�=f﹙�4汫[�j诖�?�牃驅僋��磈冒F莅壍&:疺裾zy皇 红�T︰r剛璬C`�9轓糮DR�:!~筿5}Q餬w �;H顛-ㄇ�=涳虹/擰嵕JЙ粧厌顑胄�2y� }�钦C� 遐嘫諘匲渕2]'衮*o(债 +茂`� �G罦眽(Zo篪AT襴Z碀A[冻杝90�0劭��=踄詾鞮T硙雇V[o秼噸/9洴�+=珨 �9珮hh躵��=,庠8赺i艨�4α輜��>炳pxz錓=S�牙┾t偢顃h^�丠y�i�嘾)鋼铄娀D�$╤�*Q8.镙�笰镡4^愎f�棭}�/_N� 0&� 飭艙綿黣^n�姢}涽�8X`{虺跰芷�;�<^⺻w冾k�'�4豇鏾Q黟9endstream +endobj +5104 0 obj << +/Type /Page +/Contents 5105 0 R +/Resources 5103 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5106 0 obj << +/D [5104 0 R /XYZ 90 757.9346 null] +>> endobj +5103 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5109 0 obj << +/Length 1205 +/Filter /FlateDecode +>> +stream +x谳蓃�6舢痐/�2i,臇69碤R{�+'祝�)阪劉慗忾暨  E� �4�b噌瓅魛鼑�#,8�顰�@�%躱_鴈68儎'A鮢� +� 騠嫑S匄蠫 0p航鴀. 8�袐駰h刮統綂匪$/�2]迕圪錪鳄1酮孭鵹)S�!鍪d�蔀柱s慏Y秺鐄�)�*n續��:晦�6 +%礓k墸店疦喻颰诩67Gt惔a]蠉tiР鞺涙噎]|�*串�5.鲇鲹墲q�鴡笱��+廠�`净f瘌f溶�%s曆�f蒯u,茨p�m��便艋坜蜋6 ′(<鍋Q;�/�?��伽蓌祖*jrgu9F�� +t躙筯絍V禨�;荦幾抻�:g毤矖賤�&�;PW炑爴S.唲瓁o铓�謟栅陙襞a甍腼i蚔;綱鉷寓醻AH焦涖�#煺縹o癜漳� g椡櫂9鞨搛猀强;紅YuGtHf魫 梱6帧踦桀\螦� 祐魧^F.v�;%廆牨`u7蓨摹過w�$鷃ц|g �*T"l趺*#+{兑芛;G鮖QG��+���z'伛鮊�4蜼裴嶶垨3鞆渀 佒Q餌 �&鶰莹j炂% +抹=N`槴iF1えE牲6蓳MT獮Y 蜼哈}W/.噽染� 蹛�/~佁銶:8斋�!"Й嵽<演=沼�/O沙箿榊� 賡endstream +endobj +5108 0 obj << +/Type /Page +/Contents 5109 0 R +/Resources 5107 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5090 0 R +>> endobj +5110 0 obj << +/D [5108 0 R /XYZ 90 757.9346 null] +>> endobj +5107 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5113 0 obj << +/Length 1224 +/Filter /FlateDecode +>> +stream +x谕X[o�6}鳢衈 +{橷�%�瑄 幊-.鰫�++�Ur-9Y做繌I[鬶倭l�潘w妁�(��? + "A(拸=苌醱=d9��4�=婨 �鄻盂FG�a剝殁�/B�3丿蛹H�H7芋��@匹Z� +c{瞄茤q�帞诫,�=垐Y�(; !p鸨G1睗紈整eO4緢"緪x G"坙HXF閳0剝�霁z^g� 潋y]T賋�.t/+j箴V�)3恮椒尻w萡家 |a4赕γ馾8}3{}9y;浖��&�+瞅�$搄愵|馴$儛@ヴV珸�iu澼h欙岄甥聒�&:┨L懳蠹LfJ摣Si餲�/緔g股�6襈�'c=櫮i"�7K咀XQ寖謕�勁�3F鲑Fm阙蹛 馧HB囋嗈C�-|�#ㄧ镆z栜�L橝f异∣琸煈浓F岏鄷疏阹柆@Y协襷�*紣@磌�髱Z燭嗝憨牏V�4藌u�T夥9哉娂弱笞痎�寗[鳏WA朂櫀[撣喓A嚥*vJ筸銰C!t`h婙� Bo12Z4�庳}B崵Tkb欀U抏IY<剃音6顸噌膂M�;Y�;镼W9烖�)Enndstream +endobj +5112 0 obj << +/Type /Page +/Contents 5113 0 R +/Resources 5111 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5114 0 obj << +/D [5112 0 R /XYZ 90 757.9346 null] +>> endobj +5111 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5118 0 obj << +/Length 1020 +/Filter /FlateDecode +>> +stream +x谡XKs親倦W璐e/玜歐�C 咼*眞墾�)�"�瞝lHm襁iF帩尙��鯝箨畀款i鵓��/∠)拕蘋�鬿麴;匍@�� ^G摅稾�H啓Mj �觯馿�0�鯲��&�=爄 �&觵甃鏷柈Κ(�2�枘Dk�% Uv?y梂�k�'D +��悢責z!&M'魑�謟藾-囹�"鈘慁z凜�8埖寇x?` 罗,5v鞮誽e缪a4�/嶰O_Ti#�! ⿻V鰖忣%�蠵/I摜� N噧(� ��囕埓G潏8nCt4r�!漻嶧nSa7趲�诐 j�>痝) b�HWc(�5�3P"c氱w迫棳�5<狧誦��9q( xK J膶<�,啸*瞥y�/#2vS=屲责FB+汗棶Q �"襐�&憍繄H睴Dd�I[竜�%鸰樋腆V�/災钾媦倥�&綍yw�垀� 膡qO�>YO`赝}[�祅鰶滔&�?�鮦胪}|蚴岧鏣庙郗�7峑琠}鮦�7噍枤锆U崎m波a窉庎�+A〒T�-﹏�9:Gux恏漳湥躊�f襠-&@">)蟽_鳙-*��H����煠耖�,粅菩虠*/T9帗�俾t_q\�5�_飊裕{嶊铝烈w� 3endstream +endobj +5117 0 obj << +/Type /Page +/Contents 5118 0 R +/Resources 5116 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5119 0 obj << +/D [5117 0 R /XYZ 90 757.9346 null] +>> endobj +5116 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5122 0 obj << +/Length 633 +/Filter /FlateDecode +>> +stream +x诃U遫�0~蟔酖2)�wnc誔籲#o]UQb*4H:j�麥豠 x�戳冦畸罹���奅��嶇Aw苵�sG��蕨裂'獝翵R壱I滱(J倡灺aD闀z栯2勉�: NL�4i�(薁�齮]薗LBU閃puMPf( 倷Jz0侫)婃К偬俛餸澢:j��#套扗�hZⅵ秘v�#H镸'?� K�,G�#iL''vΗi�婷皁b�熾螎� +s蓞�&聢沩鎖r怍-z5娇蠆ギ(U%� _鑢等�1塳镎險>+'I謉矄峬珏� 6^&][bQ垼-\9濍琗� p応�9!�4絺p綤.糣�%萮O魵s陘v�椮>甛?dt 渴Y筵�y +簨^+遙感忬iy扰16钅肾El+�稰�"硝 ,�蚓樛U_5� 漡{鍡d楛��;﹗誑拾翾鎠蕮:鋶龢�8〃e廅忒.`ぢR龇谛.n貴LQ T%-苯-偌辣y�;]絳韝娌9�徑枠I +R�歺鯏N miiFK殙鍴T$蟭�f鬱vP筣/殗A⒎r爊%菙Sbw�i�&!絙a7_]4v伔Ov齒<>蓍|S瀓{豉 � 宔ndstream +endobj +5121 0 obj << +/Type /Page +/Contents 5122 0 R +/Resources 5120 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5123 0 obj << +/D [5121 0 R /XYZ 90 757.9346 null] +>> endobj +5120 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5126 0 obj << +/Length 1857 +/Filter /FlateDecode +>> +stream +x诘Ymo�:秊_m撝N-沛交�Mh脭B礛 K H魂k癕Bdd籞跌葭9像cc�.孇伄聉%Ab�粨E図>⑩� 乍t沉呌9粍JWa奭g殢 F�v锼溧�)擷�=Z�#��#腊8↓t斯�3齢瞆鴄軎As>v4�8d簋御驆韟嗲藀�,t烸唀�⒗睥肅巉�惑�W�Wm �T﹨,a 瞬G�?cf坭e乤�,u%2�$柛萘@焠镀8�.B&眬聽 2帏TD尾� 抚偈藋僿矧fXQ懓楆{�5 +#�<鑞�飠^=蒲j夌v椝�9F,釸ax��\�9>黐?縢4瀾dX韺槦9L.&銾l㎜�>汥M8沅淣蓮氅��(咽炑*�,頔哈 翁擎錫bM@呁2#*�/�`蟿k縪聞{z摘3祬伀�郖:獨� 犘毲LH�誾}VK� YisT{嫦缁�EF釙蜩褹愝U:嫐,�瓃�c畀��<翙縗T�! & 擑�ⅫIq@禕�G�6 lMt/Z灸零�,N�dY�'w榗�=怪8T qK扃黍殾�""瞸/H�8xX鍑蓟�$��R揇玿鈕祕B7~灵i/B韘愇p +山(塚i冑bk�L僆~�"�1伕翥E惁>簩'溃箃姒4錝趔y�剰8;塀/绕M�紖煘7�,�0x嗖S夑㈤�'慓爆挃�3u┛ f車瑭鐲梀=魙卬�a��勎泽�猗�7糝謅�摴,鼧,8瀋XN薵饿�8lb�2附8v貴V�![勛2虂� O�1�!紴_�疒qeN媦揭�wF肕�掍翸�8p槠XD倆糪{茧�稦浮�&躐��衇鴈黔艅�剦椔�D愆c#嘵�=��竅Di�6咑葬E@7H墏櫌E欴郁箞[罸K抦l@蟌暭�x9味攑c嘔�=迺偬滚襁�6芿洍苇ji8GKG杫w�>蝅� H3u� L ЭWm邬韀Ro鬷倀�>�,投礌�6�"携GC漛E禭铓M杗魡憔n\扅咆� �$墶~�;纯c瀕K嚡呂愤�(��%脂�U�鶳w疃丶�##g*q檍9zo峇G远l麖偩z璣Q峝�&噴挢耶 烶临� 垩澅�$旜{螘i鲰2K秄蓁=蛜Op汌桍嵌F婿UG葩�設;�酆�V:横h�59篿�-�4醺娎龇Vl�<$v雍+檌<_�' 樭圮44崌F荝 u蹘�%B觬*灾�谍W崱] �+丸i骞吞俒葜证珫ng訔�*U)广-Ua筰籉oRK麧旑�'氚G鄴政峖坋 +讯�熳 �7牜!  W紃醛A8�>��4|驭e7Nk暸恁�澭t捄��6 ]^ +眵�7簑^篭ff'O�0案喜? 鏨鍦缥r嶉C贠rO�0� 螟?y�&骐`z>q剑 烷�铒+.�r���B�;IU�2�>溙W鬪嵴*XF藬櫧=G案鏢x%藁隋臐铣朥f鍈�牚V怌璂!躜~場�!Z�}� +�*5|�℉d�}S营�>�气:浨畓1 啷蕳L� +鈕=&嫦�2�8根X(2娔少#Q庆q凚上 ~枨n~�柦{f哞亠5M|<卵奷睬劈�=囓9$з"农�1驈�,雏满養W�<�;溪賩gK�o�,齟ndstream +endobj +5125 0 obj << +/Type /Page +/Contents 5126 0 R +/Resources 5124 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5127 0 obj << +/D [5125 0 R /XYZ 90 757.9346 null] +>> endobj +2469 0 obj << +/D [5125 0 R /XYZ 90 739.9346 null] +>> endobj +454 0 obj << +/D [5125 0 R /XYZ 90 739.9346 null] +>> endobj +5124 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5130 0 obj << +/Length 616 +/Filter /FlateDecode +>> +stream +x讠T遫�0~蟔a�/dR\��阇值�+╅B呅"A`恏CS��9盇 �4�)褫}鼯惑���I.眆盄覷@蝎q�嗦憠GM雷$讣�i�(欁 0Q2u4F敁N�-蟋樶穚滛PL&\� +EA79掊&牶間043抸罫+巭僠袣Sv0柫S疸萩u偗"蘔扏�# JⅵBi+"�!潒Y6_錂5抧蠱n記飪籺瘘�t焞D]伴溒眻�%憥$薵嫻爘Nm硋哦�鲮跉願I崮F燣p�6仝怷Q"Q�;豹Q焞KE5麷S鑞�-r螇8艂P站殫众^蕐洤"閣庢D4蹂o姯�窽╇M^畍Y^x疡t軦/朳阑7鑬^闉坟o23&g絑关づt揘6涄淂uB汗竂腆鉼�敏z8脊铟=)妜Ω�1倚iDM'衰��1蓨鷾瑫U�/k躴�>尌芢沫盠用(}K�#直>ku0啎n檄姏姞赼姷I-+呢� 冥迠湱鋞�哫z�01�僚z�+��67归焏臧鰷圝鋧杇[3�3煌坠�?�x芶�耿鞀kQB�=虲�;氕5蕠c|氽�睑齄5薕跾韑O�`f欪endstream +endobj +5129 0 obj << +/Type /Page +/Contents 5130 0 R +/Resources 5128 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5131 0 obj << +/D [5129 0 R /XYZ 90 757.9346 null] +>> endobj +5128 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5134 0 obj << +/Length 1803 +/Filter /FlateDecode +>> +stream +x诃Y[s�6~達便>灶� 状覫�8檉�3槟}J驙彼槄-o洱��#`癥踾X.s幘s$�%��x椋沪O-glh箹�?.皕m洒F妨换奴腳�gy誣p癷L杦嶙KB�+兏菶楀煙濂�.眽殝�l籏xs�> �-O V腨z觚钣怄N彫�僭琳��,緙G薖@&�={箺7饶綩栛匛(�$�/嬁魒�u�!~6γ眅�'I豰�&FH寃F悈��!醘pL鲁M�=w�"b"组欨 +46涵8蜶t4袪們� GByU嵀QXR都毫/�叽 /;巷6県o贬虴Eq长公6W5Mh尹J浲�>6塆紒�-吁Ho�瑼peV[怩M吮�&�陊�>J�尚�<9綶砍f涙龋u灂恢�da湲籉i鳳忧場犤弻>賧on瞹s翚燋購脷�6 K B5y剀缽錏s箯婱餂=C崥罎挺圂�鯵瓳扁(VW|З�磨~爬橙O�)锺h蘱=N翛M仴 +q)�なj, 嫭`銓c鯋%j>f駽yKNO^i歈l�+瀌`T皽f 貣w-g67w嘳H渿�讫 A稫X繹Γ0R*cb庋'1校洓鉖形r柬待M�3焁}堷垎~諜陿�&鲦� 魬蠉媞m酰痀b岉��4抛櫷穜R砘q诸c琞�#软~醐覐<��騲W�#=1賝Z賮續�)*(囚-��;�-+婱朞瘐相箔覛2界夆�撓邎8︵繌!铚�&x>螞�N碵{@ 囄J�%6溒憨n肈_�6靵弒&笱wc媬昫两褼ix�漊A儆L=:y強$孮餿>鴭圳V猗奏)A+xPM50憠哛�葄Ie"鰛2鏠e��E喹DWA董"I臠抏餍鉃穤犼_W鷢盛|V龐L c�'�1鬄苐x韖[&El谭劒幓峞,棄殝粶G腺*9@�6.rt~蕪J楯�4噔ZKI��團蝍�#啳s钝垑淥馣5\畔Oq$%,�.溱榆\ �寿詞F�)麞丄E櫉hx殽�:蒝`�柷2&爺e蠧椉[饃 襐UB0�$w6~U丆]�=缁阏矆��#�q禺2拧�B娳A褰hP�=+﹍�<%l@糥h�!~FY箅芊蒆|@�昳漹膓��z圗灂厛C>礟鯄Eg蔑 +_]g羟胫%OI呠�4<�*賙{屨�齔�3q� a蚠D)�)T${国鋍Bey�5GOvV鈗砹夐`賕袍|漾\*+嗰儗揬裒�儵^� nR嫝輯H!虯皡Ll笎�t绔諍{�zRL欞E乞煢 �5^畀佢挰m�>@坺甀-醉o凇�,qm|症O璂i5疬�� 吔筢 7鍁洔勗襋�b蛇wV堫f菁:N趗7^葃4墳)鏓橩P4 F�-thD()�6rl隲LP讶烖�0枴簒敻D\)� 巄v鄪 个翅b7`樵匪��(8 鸼i手�9鈔?jA<$� rV簡m�'m∧f��1戨睚{砤波TzHY绊犋鋏h�f� �K;h6叾@)鴙棸偀.Y瞘∽�sGU栎8)蠁�JUOAPgI掜u讕恊s.��乮峿%�b$額筦马=隧謑�zc梘EVvP�繻 琙B�繚順� ~鰈�A[v�曞氩硑1垿- 叟h殎v硛fc[钹!;��踶�9w}R锷.槖�9�$颮�:8v琋Je姀<�9J�#鶌n鮷 煯皚Y�L�/zM鑛⑽� BNs]狦獩用��锡跷e譎誕鼆會覆峞ndstream +endobj +5133 0 obj << +/Type /Page +/Contents 5134 0 R +/Resources 5132 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5115 0 R +>> endobj +5135 0 obj << +/D [5133 0 R /XYZ 90 757.9346 null] +>> endobj +5136 0 obj << +/D [5133 0 R /XYZ 90 739.9346 null] +>> endobj +458 0 obj << +/D [5133 0 R /XYZ 90 739.9346 null] +>> endobj +5132 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5139 0 obj << +/Length 1533 +/Filter /FlateDecode +>> +stream +x谕XK徾6钧W韪蜦 _⑷��碋嫺�$d欥 ++K�qA䓖)懺[霆伞��扅f83遬��?rt|�侾鎰�tj +鲍鋘鲀6玤縛� f蝔_�0挛f麈FD�.鲟M澻0軮7/b 碌K0凌o齨骿躞抢�C�.�純蜰羪祩��9g�$v�+妷�痎j盅倆聰6"S�0G嶘Yu耙巫�0VAu愐 +s5┡)疎Oj c@P醫品�8K櫖]酠q'鮇蚚愳瞹斿厏=橪� 忩沸CO�i公wt9绪(崎/蛆`痂G%囏 +�,6襪匃覡K峍Q憶伋墸D� 瘌x��.糶z5L�@愽Wz�i{b-旓蒋}锝�O旯/摪堃D�V�+O瓈� +煢dx�"畡 鎬 L'Tr� _�&Wf �1娀嗻- 冐(dQ皪ケ~~棖眖� >f|k巕'肵鶕竇^�=貆+扒X_s�坏7赴獁e誝� P_[崣訅鬊� �� +U0g瘅v�;棈┉!磓澺(蚅0らICD*譸塞拎�F怼eR�,祖列L逯%褋 �〓鷟蕀艞�-噵弤s'39鯯霙Ijd� 擵訧滣蜥渇稽r螠�*�瞍^狑涪B �淘QZy�橧熼IfA慺F韞蘹1�.劄鵏R/荋mSy%Ov"晸��:顺茝#�<▓� �*憌�2�v橛伮a怟鸔� yTg焈休[~6椦狼鵚镗'譜迶 v�蔷f +寰�萍懫瓠~�埔崀 ;|{祮潰O蜺�<渊3v評&qe�8��!埔}J萜ixo臅躲�'o +�*[蟲谪+棲50魗vp�&缁(瀠]厂V瀒y富靣Q>[V.w=Z屴�UU咒W �苒4謄�>4Jyd韃奕d�D�1軪�( 獋#縺/�XP�)程嬉S𤢡�!共a�袸 �匃c]P?�mp氳 /燄�.诺鯅23�V∷:鯌� Le嬊鎻磠m┄sL囕�>q)M箖| 怗�勦甥J1c懴鎑b鍩�.��M睄趼v5S戶#�+禼墺`S忝 髁氫:q莏j刵)���辅n$T(u`�;论�S�#C弲BC覴銜覤瑓�4璷|徎$篲颫浺S陏媙―(?苽t"c潶k&+晷滫}e谪c_�-�%i�鈚膍N白避G�(5|怘胨?�朖卖XsL[蟇z嫛方憂驮牪貊)�'欖,膕T 镸1@�.�)sx罐韨.l�.�"Βa癲_鏉腼�䲡=鎾aS铛V�-裑o榠� (,�.韽 鏘F]G'G駞 �-#[�妟廠�# .AyQ頜icXD紼勵濑狓)xg:B[y垝Z昹髜�韇诳捛騳=�#�厙�q猭垚?iC~諉O ��炕踳焮扜6�@詿l機uv坹鞁u邼�)堗n蹪�nD颔L}�{U6T线硭�5騨J螅 +批 焎�C齂1?觨�5鰊额����q醮10O誨煱峡A阏endstream +endobj +5138 0 obj << +/Type /Page +/Contents 5139 0 R +/Resources 5137 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5140 0 obj << +/D [5138 0 R /XYZ 90 757.9346 null] +>> endobj +5137 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5144 0 obj << +/Length 2011 +/Filter /FlateDecode +>> +stream +x谕Z韔汧柯�*旦b埋N6M#6I��n礢F�遤兦K襩��该�N?L{跨�C��*;擡橯yAz�;记�@篏��?嗵湝s關eT墦單2_A屓n桫_辯紅4鈊Vf撺�E�`丌�w7�5,*撔K70H�吜扬螄侇�;`"/乴呖_~g�>鴄�2吉埫G\a牚躳38濾�{鸨\ц�'4�週 n�(C� �*劊`YLmG^,弨鴰Y�)("�E�,前睺�3 t餳tFbx2 (: 嶧r掜]bLXP�镞鏬2OaXI� U迪蕒TF�0躪� +x刘�$紡聇[鞃�n揵巊T纀應� b>囷剿o�疮&及毨� +WY韯雿S獘墆[i揯#Q� ��晃pO�% =碊^褮�篛BQ�&,q\庅澶黀┇/( �敞����(B�耏a$�*�� 埿鮒Ei[h�)j� +��懧7�%0QP峒m4s妜�濍�)袄'咍篣袡善TU� +R鋚壘鍏1�洺s�.�躒�.l刀毿嗾@u隢�0眔萊oq幟鞸勵WD砡Y戸��H告XV:.婗#鬛L屌�%i珕>7[蹾l琐 <�%O�7^嶊:M4ac�犨禃r怈辙璍LI勵覞枛歊Б噄湔睐n鬞敱bG�鵖魍Z�4i�m浶蠝8鳌鉠芈h儝�? 熤va痚竈噺(�/G� q�hV论冷碿妣�恜XUj\碟}z堡qB�3q┚K筛w酑9嚭`;魲蛥{A� 觹A紽譤z┶a��,嫉�60"'� �+R残[赲棿�胛馶谪*儻给�xU嬴vH�)鴷�wB肕�7$艒嬨V�]d壡誱4椛cF�vgB砈盓錺笉P櫭�,�{ &幓崉g慑|�拟\69藰缥礷槟rH胲2?}R晕n荣鶔涃庒,R說d >e:杚秔L�,羟歁梸鹶7颊傍L�|攻踕?�"鸮艇e倷Z谔1t麡2OcvA�;q:�ζ曖轩巠�E;�7�攧蕐駕鉑堋�S霉� �躳f%鹲J_# +�,�/�i�/iwq锜錔+�鰔�W�G0厘b%汑は坾鞬m:矶/叔箉濋TI谫磱嵷浲N傇�&啣彎襭j�1�瑲)経条盦拄�:V癴�?cd�x"���鮣i詟菜稀枎C義a閃ヂ�5趮硦�.Lsbwp锜⿺l蔸d寀鹓傆磌幈皍倂�9ZM茦v :櫠�-lc�.铺�-k1w s朹踚(絠\氉剞┢5 vRs]sV35� S%欃x铟勥酯巼�(7踫�4K亻`��X嘇姖襥�6bc愿術銡G�僰弥w7s�2靣濹痰v游F�'45�.cVS涧�3弚翆�%C瞪'T虺晀嗟嶟嶨磗隉茼砒抸C:類囆?�9鍓l魈E[秐敶渄俗Hg�r悃z/ +$Qz兆螯{總�炢�帩Y鏁�4厢壻�> +%堛Y&忪脋植�+Z鴲} OI%薊�/{蜀��,Sュ'姣/Y妁��=芽t燒軥鯝緼J�&◆Xendstream +endobj +5143 0 obj << +/Type /Page +/Contents 5144 0 R +/Resources 5142 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5145 0 obj << +/D [5143 0 R /XYZ 90 757.9346 null] +>> endobj +2468 0 obj << +/D [5143 0 R /XYZ 90 739.9346 null] +>> endobj +462 0 obj << +/D [5143 0 R /XYZ 90 739.9346 null] +>> endobj +5142 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5148 0 obj << +/Length 1024 +/Filter /FlateDecode +>> +stream +x诘X[o�8~鏦D跅2RR;馿鎖Ε垔[Riw.BDS�蛅q咽凪�v倔}�$,$` d1�9偢詺璠萙Js�-琼� _�杙旁��饵+醼鄱眹pc镶h�锸Y�枊竷<*鱒S1a授犋鍋�?廂�叉爷�r堗烏Kv�B`k輗1):/璹胂r=�-0硫�榩QKZ��0檰Ei$<体b悰�<鸂�9宑蚌熳欇颇�\K钎wcm�"t祘�骮�;i眸d梬d隨�z粧泴B/�>欤v�.�$T發尅#袆鉗� 4狕犁0ww>軲�2wɡo!38r娰7\�7&嗚蔉湃*� 爒�!骭? 媾膍�.WqZ幸9I#宯m屵伕玴凲� �/峥炼�+餃襡魛t仏赨M搙3鵌�祪7朢 揮8Kv9j�+囁jW鵰愳"揸葡 貏裄w抴犆�n �(/鴧髠�5/�1/�$\F3�*�)n&姃臏(軘(D狨錫�;\}j敭焹\Yq峡閱鼪弬�.專 脯 >� �鵆绗�<鮂摏徉n蝠�/�tnp0郑.2�-\撗;E倿_/騈 Ⅱ�)睉J瘮k$~a)坰J:~o靪a�@`粹}5�訮庬�9碱�-熆鳐婨!匘�4g�莈医穘篏�9酁W劢僜淉热6qmP V捧棫换毋d茺趇�)⒈檌n磰摌T;�7'滈譣&尬僲�崍|a湏h鮱[A暨~g2|柬+M渂l磼摌苙� >萱穢抧6�i=时讏rL/M9;+寮婒,帉K擇*锹d%�$� 4� +f?搕�4!�攻�窭�k奌�裕'征猜$桲鹵I�FxQ克漃Nv�(豊w闟L�&x鮸(鳘J欐鶙�#&�5掯0挴 Yk哑^番泰^姴貼>聩U?o氵 zU|4溺?�Xendstream +endobj +5147 0 obj << +/Type /Page +/Contents 5148 0 R +/Resources 5146 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5149 0 obj << +/D [5147 0 R /XYZ 90 757.9346 null] +>> endobj +5146 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5152 0 obj << +/Length 839 +/Filter /FlateDecode +>> +stream +x诮VYo覢~鳢拌K倲砦^鲵魻-姃>�*J鞰c�8$�;c{m譱k(R鰳輽o�郣鼇隝廻.�L贽狯囼捩佔琊攊W瓨r鉢�"0w^w骰=鍽弙V鐥8暣�摀oi"6赔xf枎襤>朕 .湏Ae�揬Af鲖s}C�^8攑鞬w� J@k鍺義箞澗蟊襍� M蘒郙*w< +  +��� 8袬呟�.黒�<梙"�wc�p1塀廷4叛撲'{�� 塹&B醁�捏佴B髩襆源蒼OQ�9�8殭bqu~9<⺶xu寭硴7w齨|B畭衷ㄆ]w�駍嫮旟�*碣雫隤�5暀\fu矻Y剨1便x黀岝#枦 鷱s/`煿臁荀�琮六&灚]�紂W<汎�83�捕c4 釻h槟N&f浰q圯q欈贶h眻� �!煥鼉mee琛茹;a"+湑5盚鏌M悞�I袘�亞��跲輲zZ漕%鷃+N蠔觮A&向�>�%kP斦�68o?�&&庣锦<壝鉶�-@ +�0!X た惄塯&�蘒嗰� u 煻痭圮谲.M蛘$チ趽抰?n厯`T暋�<蕻2鹧J餶鑐?�硿莀珮S釱荭�剆^G泅�s�r挭j�$孞�!荲\亲谼�fF鉓悙p疹h╗f嚸� 圌!埱≥K脼��蔉仃�}|袢谰%i伆I愆I��C┏T �6�3舕亽戬lN羮�渕2p厡�T勿b鍮 %凓铺L2JMXp韺e慊rr�資�0;�尶`柆3JU1w櫶塙陡详o織匎埙;s徥g�!J�Q堛鈋ndstream +endobj +5151 0 obj << +/Type /Page +/Contents 5152 0 R +/Resources 5150 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5153 0 obj << +/D [5151 0 R /XYZ 90 757.9346 null] +>> endobj +5150 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5156 0 obj << +/Length 1973 +/Filter /FlateDecode +>> +stream +x诘Y}s揌�?�"�9Z黍栃s湥 6毪!�:�(�0埣磟麇o佪%P燝羝:禀}~巷mwC�C�幠#髠4磜vx嫐�w煛�楁帱5'eF�8ihn�$缊鄦窆�皲�夔黝邛=7H躇f(癱�%磒6庛瀣u牃t7 F�%愴鮹瘃3;t�7栣灞8糋�蔡 w併I�兎t潰#熜$�鴉罓嶩�!!G嘊杴 �!劝`<嶺巃GR呇(揉趁�i埌峏@��pr&!�9��@� +銃缷y�鞢颞嗉}V�#3�$�酇�'� 栥$醡bok繌�=8瀾嬝�A膢遻徔㱮_Mxd5�嵐蔶鏧|�2n\]L袒豃涺+|帋庥q7lR{*�7詈(嗥Vf瓶昰鶓��l1婸�0榌/.鋝X唤�晉捭v櫃娌BD^N�.慹�5Y# 媉'�r(紼ao莺膌菍$sB�z薭x弽缁�& +w祶c7簊)j銖茱�筓t穠"n傍栵�-鸞t�7鬗貕q暫5σ�4矯X迈O�?� 潝O晵&烇齅劉冺衠/:痼今S釾壍E氿蓁+茶?8�9�; 譌聰#诹�&駐�+kFu椵LL�槶伇瘙趈RCdhl陂E-�茊qo池樄R囋r顴!1e+橱猭Q���9�(宫4賳爻锹1b�運凰K ���M�頭u�縎�谞~�T阽鷞�$��尲�-%�貦U巈褂�%銎▲>幮槝D�<�;][IG5� Pw/N"o潠MSQ�巤�0峫�6j�V凜�&寁1 D^才.�-(爑堓呦Q铕6灊;$挢�0慕砑勬潁辻⿻墕z�&酏疝 nI� 疕l韴� +o�&墝�>T�W阍�砛姳�1=K$�7e;:嚫V;羟 +94ta赓�)贄溔|忇楻+U;lS#饴�-擫#靝习黊狟�灬贺& 譂�!廴*澰v og橈习]崏� 犴� +�棅玶J鱱B;璭c顪剾 呐潟笐g戩H#A;^�?�2鄷,K拗莄�3蒝伒s[N$囩厺鯎昕zNG艳噍� #��埢]榯冁�?u��� ]�0�%񛐢�$�4帓碦t韂;K瑖p敷>>B薗朢們 菑hW>&� G車g�(p趉驠裊|M沫K]{ш川]~�4妹敃9郁Ⅻ醌b惿蠟狺艛餞觚RW ]匎a�^/鐞`E茶事劒�\L娅)\\狷迨, + 骛歞京澲�%朔C餆J斉陔怊Z�'3浴\�94?载| 虴FbQ!�+Xe妌律j驽J_j嗂��龡谏摴) +.�薸&琤吙S榑cμ�t�=(梥�.矤v鸁鳔PW'&祶Zu倢�?� 芌滰ZS攉����ma╫Wh"���猏+W腇搏杀茖鼀惨誯�bp脐�0」2� �喂掖㏎e蒔鮳p�b湚Q除暋b碨臫j#愼撋詒V\t嚂��0U]_-M�-蕸郘籄&M4� 坝歸j媄藽飘�狟f6灮v荹愋�ns3S裯$.╙毢B0u81括jj嘿`mXj暾^⿱塟輀�$竵哯挳栊榷瘓EQ公歎�0冊T飦�"鱿�$灃a门;*觲���(D�0貤�9�o葌@���95堒/饥顼e�窠%-囀釽.s�<'�8膘o]B馟 �?!<呂E�=敱O飱&纏�!H:G�< � A亨馵邌�视涯搤幺�8jx{��?祭鯯r�抸{fi架6搠滞S$秖JI}�,�8+r阈縦櫼舾(馦爰蘮^�-硙�4Ehj�:幓�继峼9A艆D#��6}p F�縔d��A�)���5K�<馇� /慻l7p#+�>蜂祺�逌駓�+�每�莀plQ藎�(mN81�f曑� 榼稚~п彑疯俆�'鸓蘩峡_�endstream +endobj +5155 0 obj << +/Type /Page +/Contents 5156 0 R +/Resources 5154 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5157 0 obj << +/D [5155 0 R /XYZ 90 757.9346 null] +>> endobj +1539 0 obj << +/D [5155 0 R /XYZ 90 739.9346 null] +>> endobj +466 0 obj << +/D [5155 0 R /XYZ 90 739.9346 null] +>> endobj +5154 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5160 0 obj << +/Length 1022 +/Filter /FlateDecode +>> +stream +x谳XKo�8钧W貗輩T>$>Z炝m�4iwc眍�- W鹅Jr泃��})憆e$籋/MD$圀qf>�v慆艓D�'┫渪誄蔚>韆+v弟轃�"�=}E�#=�s吚�L渉鼍O|4p G醴g飔3@}�!�oΛ蚏櫸�:蕻TZL媎�>F缃0诃l (缅簾{�?"g� <�!廕8_uyXJ猬z>g�齄茚A��` +9�=��$赺n點�4Uk灰髾楢>pBfj灓蕋� _技8 /I8Fa貅刨eh�G��'嵴XG炎R 寥#`N喲p帔D��裂//Fc�-e伂�@~E颺] O'棧2@X碊堄.逖m j� +骰T邘�O袈捍毛曊m巍Ah 湇G搕i貰7h +)��88jQ�7覺賛唍D噣-狓 K\^ng鄹0懑闟糒魙0)gX+蜱� Zz濾2,=L�>踃焳_T3濼咩俙go荦�?認T2Ob,�2聵璱 +<唡z�5f\�犹 ��李N$<�$7酻睷彭F}@Nf� 騢封繍L贑毄b洢�.疐唜搗燒绅%O拠�'i摼y睺閠u�>榉�'惥uP�/u鈦陨&u媢^AF;�0H^夶淥谫脠钣G◣�=悟� 哽 卅yr潽檷詁�`(�&]=� U瑡*RU饴T�.}#� +� _F��&7I���n0G�p饒`�碫6鞚_r0壸i�w�袳G漄滢^∏x尷\糩醃欪糢y盩筲蜶y騇�+嫝豅籼蕽J鏆忢鐰K� i燽� +罰&我鍙�0P闱�偀e珌奓�5;爉婶阡;j9丝B8�幧g鲺闣莕B�7紜癬6Evg� XUB��Kj:S賀抗�ジ鉰卓殮 靉焹�)滂<�霢拧%磰迆uK浲�(�?攈E煈�)ォ�*U櫨爁礜枉m�8郂�饿E�=#�眳0�g�5悹课L鐍澎觤],还誫�げ~D�踺瀘endstream +endobj +5159 0 obj << +/Type /Page +/Contents 5160 0 R +/Resources 5158 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5141 0 R +>> endobj +5161 0 obj << +/D [5159 0 R /XYZ 90 757.9346 null] +>> endobj +5158 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5164 0 obj << +/Length 1373 +/Filter /FlateDecode +>> +stream +x谳Xmo�6_C财,_姆皏i� k7拿>t呩萺"詴\IN�;姢$+碿��-� 橤�=像顇"�0鼡H鉎r�4婨攟徼哶張廇>頞x1=}EuTD揈�)⊙dH#聫菙悖祥U蔡壹F神yc�0犡蹋11#覫k蛠酟c胗栎{�赠#��>�寛󨷂�)�?枺搜/�+h�8q翨#O�Gi9茙�悖�"�7\�-�"鍺[yKy�,�*�sl柪�梣混KP(幥D伌BU=玈;�;眙潘嫵�7撻邃嚿轸迮鬯隅A5耶�+(TVR�4羜4&嗉X5S镜[嚖ox�5啒�仺mH凟=�l�l@M[j爰十髏n%7�2鋱7�:龅 唜PR靺歃g焾im_WE镚�-�6柶"攦l绖靾鷺u鈆�4)蜍後垰,�#�"s銕茊9嫣賘6煑� 矦cじf{倍 �!蛻埳恠芤氄Y已jm6#潥xp�'爫3芇,Av2l`闏~晻U韜:M>刈la燉岾f&NT9埞}烗蹵N� +冱泥礨�4VH)踏cfQY举�%錡-Lf�椯晄1劼��~3'渱]漕聊�1�綞隊鈔鑻Kb�(�郟 +觰L6��"莟o|癎膨v�,�霑鲀� a:,Q囓l(Y磵�70;衞~礁rj丩�!`幨碸�.猵p_9s僄鞴�3圎蘨蔎咻局輵ssSyeFM�4�:跛噼f|鰈�6*籑郵��_歹��1aC�+趛埠3�*d�绺辦朂�媙芅7�8じ椔阶綽苒闰Q�筈篯�/U� �2U龛t�>犛!�璙G烘e泗 W^B狉r:C茲 鷗ˉS钜%)VwS�,哭Q籴�`�}R笤剹递V� b�.艺Rn3,)|x忕麊�29侏瓂[議 ;拍牴憀G憗圆t鞱�湣`@K坿E�=i5刉�� ��恶楆~6l鹡摦*Ti>熛曩Cl +镓sE|粉迭�6G鶅� `N懤t?mR� �廦=傲酒F勃藵阢 /緌W▋篖�)遫i邌簞;� 攳2Sz瘲� +偁坘�廼Z撡je吕wm圞:�&U谤Pj谹�4蚨岍W�;筠�潈祁噗Z+�>荥F3l-讧s卸seP垂{怯�'任.逳,I燐|F騳`�<冶圐J�n�48��))骵晳�+榼�?W把k%囙� 镁鵡>豨j飪 +庩G鈀Wi9漖淃�.缯I鑾� 鴤拮釮#杈臰]�6椌 +�F鹷緋@K酲aN蟠溦2骶En�?鶙骳隆硬?uO鼘瞘踎馥*燠鈽颍⒋?宙嵻墨;兵��4t徆� o詄洏endstream +endobj +5163 0 obj << +/Type /Page +/Contents 5164 0 R +/Resources 5162 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5166 0 R +>> endobj +5165 0 obj << +/D [5163 0 R /XYZ 90 757.9346 null] +>> endobj +5162 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5169 0 obj << +/Length 1411 +/Filter /FlateDecode +>> +stream +x谳X軼�6蟔�'� l鬽洯邸#P(萑Y'�$J皓cФ訑�'Y�臝:�28`禀雡諘- ~″衰c卢沥鴟謧歭 航甜鹤:C剃� + :Ad鯁wmDP荈.pA{v﨨 )hCˋ鱯0橣\綔$冑勄y悋I芄颹春绞�F1円钋州=皢郋 8伧�5/纴緩琁� \綝诛�E(L圡2K|q,D耞W��/�赮濬<� P饦缬�,鉯? 忷G肔P狘鸌:'熨綜 4~撩@��;6僕陸9c灖実y腉国鷭z搪i扞{@邴炸wl倿3檳f^5kv卝蠷u沏≡�'�-勶�5M篝^�>P餟讋墘h{傞洃�* fⅶ垏a菄�X6貮紓迩侭證忠g +C豨糁a�� j沗懡�+:+d� 曾SMa�@褍�^虒d旕62C劈窇堲\� 腌哲� b鉝�5�#墹1⿱靗BC�玆乴嘡侇.�= � 襼�!A\T搾谶 岪S-!豍K齩k 徵丹��汃�檈Qs�"酹XWa�6�4*W涣c� 9 犿�圠Po嫀�=獐hw�6=ms�F�#UA晻�{{e}蓈魅�!OワU�炶s� �)� �剔梪_$襎腷玃ItU寫�0m-宀L t�s譯uW0挟祜�da覂�)�搵Vi{�捪j扯絥!厘.#4NSSs~{訌� s墠=梴 e�惂馺25a裑刡�羴Q〃(I-�4�牠K閃翰聂醌Q?+� Th嗞畠 +穯�)琚湬�0RK�缵縚击戮VFQ0�)|与�;�<>隷運w��t�-�'�-L$牧牝Qv淓cX�$.:� Ch�?眻0Rb�/Eo蕺謨� +�;t匷*籙 覙6坯姝9篨G鳑忡Q普hc�1�鎝 耉醤*B�,oB��!@/2狒�'\腀)綣>瘛n�<��8跡O闏 �5:Mf裥Q闼dP渏彺肊归瓉(:絲�=�[,6� �<�"%1H�9�-9湯A条 叶溳粻蜰�$;X歆W惛[f缯蜔�s倆��> endobj +5170 0 obj << +/D [5168 0 R /XYZ 90 757.9346 null] +>> endobj +5167 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5173 0 obj << +/Length 1556 +/Filter /FlateDecode +>> +stream +x谕Y踨�6}譝皔趧q#H$ugrq襠�4潹搰模a(:釺�姫�6.垾DB�.�j蠄$n粄v鱜A瞼�? 4 �(&ZHdW=|嗘=嗇!魢�O隅\歨臮锌琖P孌滖�?黳� 嫀B衙朦S6.騃E玻孇獲覄蠬谅f椔傣嘻Ki↙$3簿�>\衊J疥Q"t尊@ 託W=蒃�0罱臊禱莢�|6EL鴮R茨�5Fq񲸄q厞颐jCMv&扼搭鋫hFe2蠤&鯋$Nx衘���$�Xr�務:�K攑L又磞昖Ef锍QZ鷃�)雩�<粴}�]M�:�;)4疛v侹M'笫懞鏡5烤�袓Y砓�!^! 害0;鬿瘽�(d�{魅;Ix[%.u=*乒A 敵它d/碫u�2恔�眝衁=b[$R� 稶9T�匯趹燩� )�8�,璉g殓�2�糸u^�&4Vx晽sROf"!*佷�!m0bD9U襏7Fu嬎:�童r+爯虙�齰諰逶颵�杰愋�:�;�(蕮�#�*�*捁勚蹓#槨e^-J *娴 �-貃|� +w宭忈�1M!�埪t�+co�"縊抎]'z澁臢硒�蟮﹄|絗jP鶂�F炒滅僎�!M斱kd镹�襀 t謷贩D}勰lV晱6亩�^L媾鏘>t餏垘辑j+#� √扫猣簈1葾q垴#�逵:筝��-T�*s鐍饒絟�?囑%8w +ㄎF蛠�5遹"[矨:� �*E廇璂b韑�:Y�w缵�iQl汚婚牱q魐z☉恄钧u0o謦� 焠I嗸]�=n櫍鬙糑1&〈.Jl�嬨j]1}AcL儔?b�<歄o/禉n*�c嗪n郳!腲� L媆i『�#詢Vn�(#扠鼦f顎T添首)轙&琁淂詮�1� 99i圁擾酮{#�4?���!1#盽�1皶萍鍙磯傖磻|]T#GYdxG昚9万�6=碃J[/� +�0﹫Q@)佊W碠G#耰9k氰�91$�7霽_逕?y妁淊郵�q�|痨q��?�\2苁阄W5F江MZ锫V|垾谽�$o#�3k<遒v硭)姙向l6L?c\鵻�錊�ヱ>9�#Aぴ眂H7G腫4帏W� 獩贷�1厐酀峷m鎶鑇- 噇9驤銕赳|篽R愆�*4Z敌�ㄞ#u纏扝棴橞]砮虧5Ua檷� �<:Xm�.MF� 棆7�7靠~� 颇�瀹曰V偩<褚"莹񆜵m�*'凫坡pU\�6技唬m=霎�2簑鞚�啀MI鑵燇%;�d架侘I4儝y:瘭7E{,譓jf軬*qykx�>洌R�(�Uy[粦^� 鞠曐h�|庯�D侳瑦8譬盻]��央事M �葨}(芛乔�u$P渢_eh 燞飗zn瑂橔鐾娲�pげ{tpz皨(~�:椡蚰}葅x帏蛚N摫黜>呿姪H楉�'�F荥B胵_Γ茊�$/·诏訅浸臆�:b滄韮﹢�+}扰C冕� xP倩�#汑�<,^九�~罕譯盈7熱(锢c�x瘗�Rendstream +endobj +5172 0 obj << +/Type /Page +/Contents 5173 0 R +/Resources 5171 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5166 0 R +>> endobj +5174 0 obj << +/D [5172 0 R /XYZ 90 757.9346 null] +>> endobj +5171 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5177 0 obj << +/Length 1192 +/Filter /FlateDecode +>> +stream +x谕X[S�6~席p_禝Y{u縧g;�.Y喗搐��0&鄆癝�)蠳�{�,9凞q麓�K:凤\td G~q$筁4e"喏Pt 藝=焐1秀e喎^DG:褌坔t説8�揾49��1慔 9赉沽�>綕M崨泫氪螉|p>:� G ��[豢魑蜵4��=擯瓁t擿璉t踓劧搃锎縻B�#4!�8�!E+嶂A﨡�ム烣醌洇踌| 樉q艚u辞:a俼/慕衑i疫�,bK,┮S赚ZfLi⒋奲 �2請|譖X"墫柷澈t鯿LU"詩屙祉=r産裛[lB� 诇mO2�~EU蒛65/滳知V贌Ωz鋩�AP寈暖� B"N�劧甮7&潣r氬�8 眥�3�%樷爌C瘃�%�I竆 =槕崄c罸\^�3荌" U嘚竊O~5邧迄7)r?殽e曞譵Z +骷笤襎铭(布6>|i>駫uZ.q6$陦册B躿洂�C\厲� 8凄*谦W>N3吖��姎�5\fZy�� +眘洵眄�-p及摄�僑O-M=/sE搰 1Gk鈳鑒Ih�1b霍汎��q[X 纮�.|0 +t�3�(�:获E6 F琳$斾�$璖蹡,玬HAv誙 +阽f幣E轁亗k�'�:蟜琜� 琳秇2遷md|Q狂�呔;9~]湈鯣面�惜'G焼M,6{-槸鎁潭繕 kj^夙`M;�绑"�*燂賴狺琉G|馼�'7鲉m^玁痌ǘ含籠柫戻壦k罒SD鯣� 睈IhIT,:暾4絭爝x�F�/颫�/>~㧐x�%t掹休櫵�4僿纽磑郂櫄覘7撙弩Obk陬晅6�:_.掻槀K�3PO+╔g*xG'曗�買誷我p+暡粆J站5穿勅徲閠[#暫zR�6°"贤�6摱齧)2諡盪Rg穎梼_憛闰炠�煤�疞>i枍m@钡辨oX恵A�6�]叚dpU=凯�;鵿喉琍z菅iQm馬#/侦焖毁聆犺螚,M儷l�*0;驻鎘薤(c鞮爾k╨罯妝�+,�kUCW揍遧渀&儣>[班鈅� 47 +D0%��%U龌�d�,燲皣&7%]a箋~l�帖s?聊?裬B__聧�匃嬕M�/K.趝掻噆硋Cb�.Q�吘Fpendstream +endobj +5176 0 obj << +/Type /Page +/Contents 5177 0 R +/Resources 5175 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5166 0 R +>> endobj +5178 0 obj << +/D [5176 0 R /XYZ 90 757.9346 null] +>> endobj +5175 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5181 0 obj << +/Length 866 +/Filter /FlateDecode +>> +stream +x诮V[OA~達眪�s��&�[阙>XC$�,US澷�0m +!s9凤軉億ň��Y≤镘z酗=Yr犺�,胿�5v别s?顣8 #烨輯�堈蘞韃^u拋L 些_�>���+艢S絝<礷�0聭秛鏬\B揩@x1�^ @B`�郑楲墂鎪涥1凴厘C腻髡M涯)瑋 峅⒁ (掴z�"k冝O揉x0l�;7搏陣舣p硼�)N�亰:培V鎲酰Y���"sv墁虃{vR�鬞辸跡{]疳哿GV赏,柫Gp~.n臘Я耵�VT⑸瘲梳狗$M-宇J�漽^獢蒆気嫵�,I�5维裢M�*稶n賹戼逮hn9躱黔x�▂r�2璲刡8�创謓6.朑 瞨e牤瞸话旃,苰赇列虹,'`TQ%昪�8~��#Bg¥`傇�!竤�0���F�屟Q� aT亞楑&蝃盒�$璢瘶Uj岷(喗ぽ72飈9|嶃虞孟{擄蜐U:筂Rc&>�#>0N玮s�"l4�殱幐�橸G儈贜叹y� Je/1]?A犧坖kYc竛лD�:L躿絑�8氈aス軶洈渡D.GY颢昫偻xhS搷姉蠴:UcY�m蚚c�?坞tz@悈�,H�略椗媄��z僁緉�,k]B楑a苿浫 �1宗疶蔿��"�+ (zK氮<qRq-t:璽x枚 PQ溝煘�(o@�-QQ�"�?旉▔ⅰs靺�B滖繗B速9R"堗傺Y�8$裠蚀 4�=櫴糫犬煶袁G撏A壁��0R畃 �-纲蹶樥曹汽X偏G愁d弣橵茫GdG|��葳endstream +endobj +5180 0 obj << +/Type /Page +/Contents 5181 0 R +/Resources 5179 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5166 0 R +>> endobj +5182 0 obj << +/D [5180 0 R /XYZ 90 757.9346 null] +>> endobj +5179 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5185 0 obj << +/Length 1880 +/Filter /FlateDecode +>> +stream +x诘Ymo�:䴙_m撝N-低{wu5毿�) 恦�6e4�- !愍k癕:2]璟鼁蝧蝭|ll��l珷-�2傇�,Z狚�洴Z恦熲�N腱﹎昐%$禎i*A倻� j;迼#$H千H28�C\��)杩芘j顡J7渓�2v� \s>秚'覮亯��?[_緛秶~l嶹饼�+�儶娳嫋�xV櫡熘镠'斮'B拒@(p�1 6X&��B姥�?��nV寞��娷�鈥,寮粐� >�M怘m孧�a$瘌T�(��郤埈攖阑wi譱支p@ReшYi徥墥�;韄!/笧�Q竃輽�"膕*廿*'H倶N�+籞氿�4亾敁vF}�銌敿01��6閛�*湓i�桪ヅJc�=啧鼒貞�&6�3谝s�!)QW働c�&�1瓪�.H┗Y鏺R彭<夷M屡空 (X$藘_鸕a�$�澧_﹉甩澿C䥇Y鸑陝(x樑D鞼 � 䦶.l:嫊翴*騀峲h�9憺偂=鷁�*� GI�Z�(高E娤]zぐYSB磄n_u,蓁9[ �5u鞸螲塓5i 7q嵸rc�L僆鹤Q舗D!h谋O伄1餢-灩qa軳鸣<| +�t駟K/H洚k+�g�~|^#Ym,rDp>〝u醫?啌衏X6霕�3vY�3细麽c6�-璊梃买芅�2寖�卖�<`�䴘ㄤyXF鞁绍 ~D溊s�W�g瘰醭l�抇閰��旎E譹Sj�:���Y�#3批�$]囉�)耍l[!]+抣 l�qW鸧> 蔘播,wv橎鷧�*噇妯y䎱z哅p冁玒:┍帧e�]終jw擜=:L9=�"屣�5汳~麞�含@ш焽杗壅\郃c#銁�7Vl嫢 C穒�2濥╧ 甴齜鋹吕緌m8l綾�宔猥�7��(�髵黕隫;� 8wo^� q"񝋱2蛂屛ǒ焰崛毝^5?�2瀟 挥讓k綃� D橶i纎�醑萦]�,贓_/Z�TmB篌~装魩搎韅襝秣i�=�;FV�?霕 +歶G� b�佞�瀳侵�m姓+茟溆銹2沲�Y鷘F8{ta;�3r陥襹瞎2彤濛挱[7FG愤S湨]帼戎)诋鎕c0鋵9#�鸳曟:评�-k4t s褒鞕窐�,��-琋sP葃橃�72醲捍Oj07�豆黹X藝儗棊於髓8{0ruL�)a[ 宙_5o\閮帪譵&�毒u篺v�>gV孢[�9wT`u杅p槉=F[氾�<佴= +梛院7FF�=�8E燮n策.蘊彮�$ 診鄲S冃|譺瞔睁N嫷(�8T些諠�+痗w颍�(t怮󍳱唚^窱錰'彜 r(�捨�dC餦愇馢%擎靚H�E痚咴�&d汎'Wo膀瞽�乛簿惜弌鯆>� 渜o<.節渀���4ガQ-i玫溙7煳酻氂�+i鎓f靡贈`�)ì�/1sk$N瑮鉱眢xd觖l紺�$ e�"[䲠)恛學FLU�.洔<}(刹R旗Z*}_6V�汮/崫篷j:wJ嚄EOL敇怳舉$H荖f.齚渽滕�緯G{脫$籁2*錜鴠�~�?7�:^钮^攧篒sZn焁鰻9(去}牆> endobj +5186 0 obj << +/D [5184 0 R /XYZ 90 757.9346 null] +>> endobj +2486 0 obj << +/D [5184 0 R /XYZ 90 739.9346 null] +>> endobj +470 0 obj << +/D [5184 0 R /XYZ 90 739.9346 null] +>> endobj +5183 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5189 0 obj << +/Length 1221 +/Filter /FlateDecode +>> +stream +x谡YKo�6钧W枧Y� "%顬襪籑�\�=eC栬X╚暐lS��饯D贃B賾� r慀殭of狙腄�肉衦�8睓迩#h萆�/#'r}不崆勹��-8锰�-+ �秄镣�奈&樎駑别$X澼萎-�R&珆豽造桤貴�6�啍G7沸 +�#w] @渃+贅4僪羟梓崪z�:`翫1乥枩q j@a壯�11��廄晽烳榺[E�^ �(L� 嗮鯯匯:�涃�>殍�%b舐t4+r鉇�4��嚤(2qC把蛀�3."�$甇(﹣X謨u憲径座吼 +QO朼6/黮頴Y5;/� +I禁)Xb�^M鐥娱缢痏� +�4邒"�$�4Ik�挬圿k$s羦�>TK撏歀I茲�4�?V璸@檷瑵腋呯�U玗枆_刬夫疵聈齌PD狑鎖莒貁w4 +�:汳k�宑� � � +Ogェ璡團[.|迡霶�Pi�4l鑜誼表甯\嵼谯q塜罕q踱°�8 蔋tz槐� 踤,╛g岻mP�%寙誳9ny;螵�'μS�%i�hコ bkz]u祌/m浵隺欴:a杋揆哥�m�.9��=�7Dl镠褁芴SJ臹襊C~E昼�;2!�=渨6騌Z?p:翨勆�1^tR%M麲eQ}"嗕f宽歙�9G-髍/钰}Y?�4�琁看搯垌垓u$`鱐樱F蹎雛娈X閔-_昔C8.n檦ˉ�lK愫O篛脿蹍(沇2#��V蚖9�8�>I�z�斁�"�'漒埵Υe櫓I泺擭嚀7唛忑s麆弨�&壺鞭恾zK冟��-洒$)无o臐玳忷赶蕒尴鸐(肢 [賵 4微]抧�H篩跧q�筗ei胳�!纕$�6z2攸~�囀獰牙也�X�:塬0詫� 6緹 � GM5A窡�S敍f<墷絢�"鼁輣m紼汍Ш挷琉"愈f泤W衶� 枧kz謿�鲈漃K2�|ZI纎�$zkc滒�( +~敭7�䴔�$G�埏槬樉4K1{N朾gOw]E� I眐�5R�踦rZN嗴�* 嬓嬄臩~�0愴镤牓(;閵豷� o鱚��饭覨(H_D"rku阀(牉�5/譯垘K=恾E齽1 +�a跬囹 颖鷔U 诗┺ 鬎E觞)岙�1x�=掰梧��>�*endstream +endobj +5188 0 obj << +/Type /Page +/Contents 5189 0 R +/Resources 5187 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +>> endobj +5190 0 obj << +/D [5188 0 R /XYZ 90 757.9346 null] +>> endobj +5187 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5194 0 obj << +/Length 1641 +/Filter /FlateDecode +>> +stream +x诘Z[彌8~席鄎P踿凛л頻w*U韏#酢�*'x玕睝&涂_l淍R�!破龉~>鏯h駜栵�6q\l爸Ⅺ� ��筐莃鳅/D,b尠祒.W佬�D�"黵囓鄜巪鄡惠�'阳�碅誼麵鉳莫�?诱.fIA �&鬟飃弸zgE樼`(鼾o鲥癇A帑�x謂<偓x�"G?D�g�噪T鍎>�<梏1�-雁�D俖库:帳誃嶮 p�9A9霆qm?@諵麟瞷�$f叟Vs镧�粭攪Uk蠔珗 箌� /��1�+��嫁^\-鰖樦W�*=�_M飨餒l火樕廩朤{R��鱞瘵j$a玆湾s應7k帿F尾栭U�滂9_'4褸Q烉:塬C@宮苤溠c瓫X羰氫|s�L蜣-蚳躸逻暎�<)�;筕^d典�#Z$欪檘iZ最c�瀽 +� v1锁J[翐~咮祔蹆么∣峆$ +睘%@�6�+釟賙[$葐8�qP⒏I�M应s�6W�:Hl簞寲]蓬7|甸E珖缎].;侭�躨r甬旵擇櫖��#�<9蛒�0驅я霴�9c艐6_0傱埂)鴡Nwbyrr,�襻W槡p逡嫹褯1q盉a旔4琳 +� +�2抚5b駛熴菄�,)鶫潐a峣'{d穸8戳8I囌X鉸�<k5G5o�絒篻�;犻:6p偹0绸脴荓r}陥s追秪�?座#箥?剩�纵�纱:佊+君L潂璱瘴N蘝業簿詩L@�?菰Tu*'!]撴讓k禊聬f|碗j@齧G 睦藊�琿!Α炄��*iTh��N黯�-谣味 ,赣隵-衒f逮i�;缧稤d��5釛"2!}W!� ]亏���6娟朌y�#S爟幆y坱纖y 翧bQM�$�KXF擞T^钀> �?杵鹻鑹4D]A�糀�� p誾綠濴H藝荧#洫[#?kvr_D^滂懸�铆▔endstream +endobj +5193 0 obj << +/Type /Page +/Contents 5194 0 R +/Resources 5192 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +>> endobj +5195 0 obj << +/D [5193 0 R /XYZ 90 757.9346 null] +>> endobj +5192 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5198 0 obj << +/Length 885 +/Filter /FlateDecode +>> +stream +x诮W[O�0~席埓��8 {儇:趨i戹↗穳DHS砪'4! 嚼剱锴遷|螚dC鶉l诋�烶fO�磄rBfy ���腽3鰉� 3;�F����{鱸<筃溉A芸 +蝜 +=& 珆橔j�誱孋Rw軿W袔$�3 鈡巬/ 咔鲕攦k霔醭玻�m�D贖1[胃暏颁鑚N漫�A�;,坄|�=@��[姤A�&򎾁茄鷖艎F懡2�c渿壭锋1诐8]�"湜Q:m,O朰&莪_傕\鳍0uo慻<�崝@]耆7斏V#畔 ]C恖M0貝攲"瀏w< +E搇苚梶a|0tg\z(艑G]燵3?tC~[b�ㄤ亴O犹i^G[\T� 鎶槸Ggk:i柼^k�'脿疟�%巠暏�<爰蛒~ (�衚A湗撚銲*豪抄翖謼 n�-齥bθ―毯拨 莆qw�ok6棃袑缢碳�蒈人T扔靳@躔*瓹C�糖磏 �*�2}�H<段n嶐c钄繳铦緰豪搹懈VK,l题絫憲秧�43�!栿qS腲R��)6懗粇w撣U□d洸v愡^/䲢Bk�rd扉侜�-<落Hfq1捙�)H祠韵A5X灋涊纋T_諂J�<谈h篏晬-6洞rendstream +endobj +5197 0 obj << +/Type /Page +/Contents 5198 0 R +/Resources 5196 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +>> endobj +5199 0 obj << +/D [5197 0 R /XYZ 90 757.9346 null] +>> endobj +5196 0 obj << +/Font << /F29 499 0 R /F26 485 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5202 0 obj << +/Length 3602 +/Filter /FlateDecode +>> +stream +x跐\踤7}鱓鑁L汍耍/ZG粠b� +怖頑怗cKX�0'浛遙撏f撜蛪 NuXg奅�~泥/~滟懻杬┨焰�;�� 瀪瑒�?�愷��3pJ匐泲&鼞P�:藦.�^c%eJ姡嬰�=\o�w驘嬁�8饺�H �硧<% 蛉#`6聦4B繠�h^?=葺n窂�/k:�4u捋蒬 ?趠K極}茡覡]D�7,E殕_蝷闇� +:�:�!t唯g:騗===亢俎�=�?N8;~茌]��N7�(�;獙q摮uQ2灁眚Z縜慭賔RR臲絸J晫晷�*�;戡�  獂蕜r摮�* OJL曏oT臿獂鉲�D�铡 �8C濇�*豁筱蒿閺戩喟嚟覔ug�$8)袢啯紽|妙5矽娋�0#D� +妷Z�AQ蔂緀鬄 + OJL嗂餇冩�� +e�4:$T�6鑐缔鶬囩羽7, 將JA}薴濜G<) 慀�1~賬濲/�择彣m坃3j-C鉍>�)c諲f进灁X�柯怊殯jH�狢鈼6�,膺o�尔隬稀6�S#罙6眄亜'��j縌凍饎江徐亜晷 劇枦E �: (魈L�= 灁�颠▉m5皵薖8g h4H�m衻+(�� 龎fB给q5鱐HxR`*詞� +脱�=T7�*尐mP� j孿I迁r^e蹘#�xD傏kT�=溅J蕣� 佒9!~�霢3��泅随顅燓 �92I髄吖"峱R鄳R韚欣0燹 +髁娊�崰u螤亝KDy `軤X!x讹k0繧伹5榶�LcL艓h0��9�姧3 灧贿O�>揞^蒽鱋譫箜�A晢謔粞�!罥伹tFT珒駣窖!佒9�ZQ璾_<茑矎~> pR囫|榶�:hL��!`�� +JP-`铿蓘�p{�7;枵苿'�Vk縌觺D_/犞aDuh�扱2gxa豰nn髹威鹡{B刦窍O弁砜涾镞�>�齛兛D劸M{�&诐<瘠4@ヱ杔� �g劗鴎塅T�5H�,叧;V胪葶婵�*陞I赹;蝣醰擀い誴{損v g{GJ茡�I澠oX圵X�}皫�+K袺'�0�鐁{縀瞒氉 �?營 荁燐\ +P +,孳M� 蔗剕恜瓏d専!�-q哳締嚄� &��4�&涽$HxR`"詞梔性;%+﨔唲臧@}罫濜雥E�B鍝 +n鲂伥d瘠4@di�.娶@矽kYFT�5�"5鍅V聠鴄Y\咡 �k矊盀,3㧐YVY�,淪鎉�4�酟}7糵琼篪4�'閤y苠y��$悡愚f聯�{垃�'L英8脈臺�0# +釦潵瀷�]遧�6椣=RD�8g\┥Ⅶ薀黏4繼鵮棵鼵H瑠y韉祤鏅?�:�!ts:�;�?豸d9\�< �)涼4坧R�1 *瘍Lc鏷窹唾慶4�:�!~ Oo�?叿麠Q傸倧~�#擯搈�珵OJ灩逜�&乤p頑�=_@Buh� +X涋蕠/0.s鳮;�a%焞{飽 OJ燧馋wB[!湉躒sUuH�鶺暈��8犷�� K髹� N艓7q鬥蔔〞�~谐鰛'�=�V兗hZdt螵汸譅儙围鐐泒8(V磇�� %疃P曽O�#灁�嵾�泳nJ繟叚鴎=FT弖紏嘒5-樱炅9懎蛪襚%'f玦_凋�=鏮虊uV� ntn~� h�s猝媼忥.呔?粅�鋓j�4z8邤撦'{讪计R论麑μ眾統跦爑�)5敘J汭洢禩Rc樛鴁W掄だcMI鍀!蝠 �*鲦 I爑螑RP%<驂/&� rT:o`3獦柁��x祢]y]RE3笂H=go頧 次Ta嶫珛L貄唤躙葺!倮↓3.埕�!罥伹病�阒貦�%沴H爑N堐*觼:m�歋2N�-��$插�6&3f>+僩�M\�罄y潓風未~扡値嶤(�;眨e�&q9焾壊�8Ov忔岎螆L�5F哕O� 鍖��粏f莚朦蓓梂髹�/�~E7稔蘎茡�Y_鉾Q豟种 hdI�韝l*hz�8*d箘;�#R;�10岘>t�瘠4@银]娺k獫�P�?�9~鄺P簊鴂w[溧 瞛+3��'YD韚1tN-�{yu8s鄍脳|*x�"�3悦棨 � <罥伹评U泃>4�{�阷巺@ 叏树瑧 +�#a淞%怖疶��+�3雠螜U�6Nら楢�/�;淠4柺鳰o4钑�'珎曌x卨/P653j无$Du8s栊� 纟�黨F@兡澿嚙Da皷#瑳�,g�:悫崉迡k顽e�祽NQ�鄻�) V瓷哎22F=_愧6诂M�g"~揶?铪寃�/喻喻WW叨髹噠o凜另枲'冯*e<) 阱秪宛W樻掟YW ǒ�#狢;─蹉$乔葶9亳v熅x剸ew蝶�%v領)=OxR`黧陲pA醉潎ssAO�kVDB铿�龠於W紫S@7淢竧<) .�3縜)鞼瓋|螐l�誧�E]x� 琌县w駊#嗃�.皾菺<) �54~鉏佣┦媒宰 –Q=隈�%簈`溷鏮撖泸烷s$鲊\揈/�灁X钭~囓7m顕��1锯or?�9~鑖�8��椣�/辨樕 �)�MJ8R ++烠涠e 跍粔<�:�9r栳�3驧錀��<籬�遯亸涩#缊'�"A鉾A勷瓨v疎Q諭劇鉏剋帷牾 琰乃阕N圯牳�,攷鞝#菆'�"G鉾A1┋_q崹�$G橖簲泗�襸火�8v瞒z飫'�謠讆耔S蛺觻&T�5G_�<よ苯巏n淞��俬��;�绤Y熂A=�|9��z~鷌� a嵊錱,攙Tsf萌DD雡Ah硶呟藐FFuX'E蔵尐荣9�惖茂錯凗n埧芖嗷a�?�9�Gv脌瓯骛酸�閛MuDJe;w柙I苭�?Z績�-崁3\璒漝T噓挘�=塺|:}Mh~�琍粸 + OJL呞飹 +� ss﨔厔臧ff.� +�<寄頻芠s枥M苭F_Z� " �哪MFuX'��(ZTM湹渗卧K雡!|&%�邻琈F鮔s耐鐙O�6搬桾鮠咱 OJl詞�#B麧杽酉賨徒1�:磽�0O斷�.�2瀅\䏝~q�笯;蕰2Ne鉼I顣n}�(冎9s踈熙鈉蹷g�5�3铘��x�-妛曇劜梻y3�怈尸K1�3膢r沱W$vA噹e窸�5>)x扉躵�>b擜�|1轘t�?�錚�9�:橲鵟�-��毱痨�BS翗:��<�d]莈ndstream +endobj +5201 0 obj << +/Type /Page +/Contents 5202 0 R +/Resources 5200 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +/Annots [ 5204 0 R 5205 0 R 5206 0 R 5207 0 R 5208 0 R 5209 0 R 5210 0 R 5211 0 R 5212 0 R 5213 0 R 5214 0 R 5215 0 R 5216 0 R 5217 0 R 5218 0 R 5219 0 R 5220 0 R 5221 0 R 5222 0 R 5223 0 R 5224 0 R 5225 0 R 5226 0 R 5227 0 R 5228 0 R 5229 0 R 5230 0 R 5231 0 R 5232 0 R 5233 0 R 5234 0 R 5235 0 R 5236 0 R 5237 0 R 5238 0 R 5239 0 R 5240 0 R 5241 0 R 5242 0 R 5243 0 R 5244 0 R 5245 0 R 5246 0 R 5247 0 R 5248 0 R 5249 0 R 5250 0 R 5251 0 R 5252 0 R 5253 0 R 5254 0 R 5255 0 R 5256 0 R 5257 0 R 5258 0 R 5259 0 R 5260 0 R 5261 0 R 5262 0 R 5263 0 R 5264 0 R 5265 0 R 5266 0 R 5267 0 R 5268 0 R 5269 0 R 5270 0 R 5271 0 R 5272 0 R ] +>> endobj +5204 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.9034 619.7797 156.8586 630.6836] +/Subtype /Link +/A << /S /GoTo /D (page.36) >> +>> endobj +5205 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [217.4706 607.7527 234.407 618.6566] +/Subtype /Link +/A << /S /GoTo /D (page.147) >> +>> endobj +5206 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [218.0285 595.7257 234.965 606.6296] +/Subtype /Link +/A << /S /GoTo /D (page.148) >> +>> endobj +5207 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [172.7487 583.6987 189.6852 594.6027] +/Subtype /Link +/A << /S /GoTo /D (page.149) >> +>> endobj +5208 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.3067 571.6718 190.2432 582.5757] +/Subtype /Link +/A << /S /GoTo /D (page.151) >> +>> endobj +5209 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.4535 559.6448 180.3899 570.5487] +/Subtype /Link +/A << /S /GoTo /D (page.153) >> +>> endobj +5210 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.0114 547.6178 180.9479 558.5217] +/Subtype /Link +/A << /S /GoTo /D (page.154) >> +>> endobj +5211 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [170.6363 535.5908 187.5728 546.4947] +/Subtype /Link +/A << /S /GoTo /D (page.156) >> +>> endobj +5212 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.1943 523.5638 188.1308 534.4678] +/Subtype /Link +/A << /S /GoTo /D (page.157) >> +>> endobj +5213 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.9352 511.5368 195.8717 522.4408] +/Subtype /Link +/A << /S /GoTo /D (page.158) >> +>> endobj +5214 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.4931 499.5099 196.4296 510.4138] +/Subtype /Link +/A << /S /GoTo /D (page.159) >> +>> endobj +5215 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.1679 487.4829 219.1044 498.3868] +/Subtype /Link +/A << /S /GoTo /D (page.160) >> +>> endobj +5216 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.7258 475.4559 219.6623 486.3598] +/Subtype /Link +/A << /S /GoTo /D (page.162) >> +>> endobj +5217 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.4608 463.4289 218.3973 474.3329] +/Subtype /Link +/A << /S /GoTo /D (page.164) >> +>> endobj +5218 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.0188 451.402 218.9553 462.3059] +/Subtype /Link +/A << /S /GoTo /D (page.165) >> +>> endobj +5219 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [185.9692 439.375 202.9056 450.2789] +/Subtype /Link +/A << /S /GoTo /D (page.166) >> +>> endobj +5220 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [232.6036 427.348 244.5587 438.2519] +/Subtype /Link +/A << /S /GoTo /D (page.74) >> +>> endobj +5221 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.7603 392.8518 165.7155 403.0385] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5222 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.1837 380.8248 170.1389 391.0115] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5223 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.0254 368.7978 166.9805 378.9845] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5224 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [135.4892 344.7439 147.4444 354.9305] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5225 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [135.4892 320.6899 147.4444 330.8766] +/Subtype /Link +/A << /S /GoTo /D (page.94) >> +>> endobj +5226 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [211.603 307.9457 223.5582 318.8496] +/Subtype /Link +/A << /S /GoTo /D (page.79) >> +>> endobj +5227 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.0181 284.7592 157.9546 295.6631] +/Subtype /Link +/A << /S /GoTo /D (page.123) >> +>> endobj +5228 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [148.3408 273.4495 165.2773 283.6361] +/Subtype /Link +/A << /S /GoTo /D (page.105) >> +>> endobj +5229 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.2461 250.263 161.1826 260.4496] +/Subtype /Link +/A << /S /GoTo /D (page.113) >> +>> endobj +5230 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.2768 238.236 182.2133 248.4227] +/Subtype /Link +/A << /S /GoTo /D (page.124) >> +>> endobj +5231 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 213.4648 175.27 224.3687] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5232 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 189.4108 138.5976 200.3147] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5233 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 177.3838 175.27 188.2878] +/Subtype /Link +/A << /S /GoTo /D (page.60) >> +>> endobj +5234 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.1403 154.0471 216.0768 164.2338] +/Subtype /Link +/A << /S /GoTo /D (page.121) >> +>> endobj +5235 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.6645 141.3029 169.601 152.2068] +/Subtype /Link +/A << /S /GoTo /D (page.121) >> +>> endobj +5236 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.3933 117.2489 151.3298 128.1528] +/Subtype /Link +/A << /S /GoTo /D (page.121) >> +>> endobj +5237 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9906 105.2219 167.9271 116.1259] +/Subtype /Link +/A << /S /GoTo /D (page.125) >> +>> endobj +5238 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [350.8746 619.7797 367.8111 630.6836] +/Subtype /Link +/A << /S /GoTo /D (page.121) >> +>> endobj +5239 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.1917 607.7527 371.1282 618.6566] +/Subtype /Link +/A << /S /GoTo /D (page.126) >> +>> endobj +5240 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.1781 585.2835 372.1146 595.4701] +/Subtype /Link +/A << /S /GoTo /D (page.167) >> +>> endobj +5241 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.7361 573.2565 372.6726 583.4432] +/Subtype /Link +/A << /S /GoTo /D (page.168) >> +>> endobj +5242 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.3297 561.2295 401.2849 571.4162] +/Subtype /Link +/A << /S /GoTo /D (page.90) >> +>> endobj +5243 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.298 526.0161 372.2345 536.2027] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5244 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [360.8372 501.9621 377.7737 512.1488] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5245 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.6463 489.9351 396.5828 500.1218] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5246 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.761 477.9081 392.6975 488.0948] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5247 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.5691 465.8812 390.5056 476.0678] +/Subtype /Link +/A << /S /GoTo /D (page.104) >> +>> endobj +5248 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.298 441.8272 372.2345 452.0139] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5249 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [366.3662 429.8002 383.3027 439.9869] +/Subtype /Link +/A << /S /GoTo /D (page.127) >> +>> endobj +5250 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.298 405.7463 372.2345 415.9329] +/Subtype /Link +/A << /S /GoTo /D (page.103) >> +>> endobj +5251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.298 381.6923 372.2345 391.8789] +/Subtype /Link +/A << /S /GoTo /D (page.104) >> +>> endobj +5252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [462.3752 368.948 479.3117 379.852] +/Subtype /Link +/A << /S /GoTo /D (page.102) >> +>> endobj +5253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [390.3358 345.7615 402.291 356.6655] +/Subtype /Link +/A << /S /GoTo /D (page.95) >> +>> endobj +5254 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [360.8269 334.4518 372.7821 344.6385] +/Subtype /Link +/A << /S /GoTo /D (page.27) >> +>> endobj +5255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [333.709 321.7076 350.6455 332.6115] +/Subtype /Link +/A << /S /GoTo /D (page.128) >> +>> endobj +5256 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.918 310.3979 409.8731 320.5845] +/Subtype /Link +/A << /S /GoTo /D (page.96) >> +>> endobj +5257 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [399.0338 298.3709 410.9889 308.5576] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5258 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [426.6999 286.3439 438.6551 296.5306] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5259 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [412.085 274.3169 424.0402 284.5036] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5260 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [387.9554 262.29 399.9106 272.4766] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5261 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [390.1671 250.263 402.1223 260.4496] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5262 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [457.5143 238.236 469.4695 248.4227] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5263 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [387.3975 226.209 399.3526 236.3957] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5264 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [415.4025 214.182 427.3577 224.3687] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5265 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.878 202.1551 425.8332 212.3417] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5266 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [407.7013 190.1281 419.6565 200.3147] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5267 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.4946 178.1011 405.4498 188.2878] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5268 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [416.7473 166.0741 433.6837 176.2608] +/Subtype /Link +/A << /S /GoTo /D (page.100) >> +>> endobj +5269 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [427.1483 154.0471 444.0848 164.2338] +/Subtype /Link +/A << /S /GoTo /D (page.100) >> +>> endobj +5270 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.6343 129.2759 365.5895 140.1798] +/Subtype /Link +/A << /S /GoTo /D (page.96) >> +>> endobj +5271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [351.7713 117.2489 368.7078 128.1528] +/Subtype /Link +/A << /S /GoTo /D (page.129) >> +>> endobj +5272 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.6343 93.195 365.5895 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5203 0 obj << +/D [5201 0 R /XYZ 90 757.9346 null] +>> endobj +5200 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5275 0 obj << +/Length 3125 +/Filter /FlateDecode +>> +stream +x讠溬r9嗭�uiG�鞬��3碼�"鑹�C幢較z喎煟虜J粧rpa禚弤澂�U赿呩Y糝B!酶\}黺�W_嗲/赛��∴冁鄌?S�2菻*W浵c � A ]m>齰xrz件蹊魍��a!�!鹲*堼榱z鉡熗撃洱缌o裤�'枘�寴裝鮛�#b ]};鄶筼.�蹤^J9翵I�$ +擢)嚪鏾��7珉嬽�'�1疭M倢擈骖O夷訄p肰�"踉/項Ys粜雵0 飂蕻韮Q�?!&馩竫U钦铝aId@瑛堛莽G欣徭劝莽s拞#偉X�) hp虿ж渴╉ +湦伛躲�>=�嫴銄�税-,N置�4]-�遑刋*訆,饴%,烿a@媼搷\t滽鋉缫t礬G屷pZ絏煯宪�"唾霹)翖� +Z瑖*虔篫T#Nq8砃N�2 �梑 +\棘�%霪ri��%貏S雝�>[滣瀓Bq$_>章�''9�:课╅j9I妱1酺;[?=~vD疳粺�F#声蜷答8YO鋉怯t祒繶j�<��?*慴�&Y孝鉪=:�漀诱�!)ッI雳EY`�4e?0﹤�'雚夵隲毊绤尨�2醨q�9蹧 W聳熄0犃扑l芛C�0歵 呫T[ GJHZ嘢挲“.焞.逎nN^锵H�1[>�#'�2�:Pg源祵8H箽&滞}�1孈�(� ;;�2乌3fy艱! 鮩襾4cш谖o6g裪⒕輁<[�89统嚭趐刿郊摻�a@�Y欢,��"馩搘獮玂�熚鋑G0繯�*� N?��e鞻0h�1��僑鮘=X&懫a8䌷}�:�趦悒貳t騱�! (�$kw虩e�t槇�?瓦﹝�>a硈棋�鋈P(� >|_Z濹橆聑K��聙乙煻[乣�)Ky鞜-�!p�8杶檫即U茡昶沲�)喽񁒺襳+賙偞偝X鞜M乊誷踬3�8�.q奥乥�苆冁圊C愾(o诽伮橳J8闫� 割8P�8�4�0嬻醏l28� �聙B嚥vG 剪6谹�僑鮘=�&8!9嗺/OJ #,9藹a�{f��0ろ�0�Np欨gfU险a犉 �⺻瞺}�9{y�,i聙/�夶獶诋@鰌� +kO8R#� 脆8YN鋉囉t祊凞Zw鞩呟蔩/烡a@媻揢錇J鋉бt礣@ +粩(Vc竝x僲T�纋 +Zh湰�&虔篫4X#�峩待� �,X�矯Od'o饦E搪�瓕乷俉3b 庴⑤%G� 嫙孰簞E鲛爞�1{�#W寋退嘆_鑙趈�� 肞縀�)'闤z8X纞EIペ� 巹捙PE� x棘\c�*爭�#$鮴-A+呧~�$琇�5 �9Y廝鋉'詖鮿�5eQ橳嗦M 圀昑l9� �粕z`"�:樁��弚*蹉~脝碎-:NV.-wt"�:澏c煘褣MG遨磔蹂_魽3絶耨s蜧iK费納�! (�4kwUf皐4�9牳) ш賀9軼谇f4c*瘗闟N@肦&�!N?�叜d鞻 hd0O;�楿=[O@R(@� |俎適o�:"鈖{洆0 +a嵧.碈麻�0犘ガ� + nG-匔I軄剟W鮨= 亼�,"qy}肕a0��[� 硚J�!m穯繼22晇 E郥=[弨iご幹�?斗邒觼轢H:岤! (O嚫輭�*M芿趤聇U=[縝贕�薞霓矙)帏霻骱炙嘆_鑗趈m盤I峣鞛聁c狍Sg醔Y輎{l祗SP;惻p聙/脶�;P逵眜��#Q娞�0サtPR"i馽1� �噬籂�訟祄=(�!�硘┹�嚶陯鍎個!'��:P'远鮿堸p%�!釪#蓪XN(hr糙J� E�j�:B鲩)�O铪辰技鴝貂疚鐍{y到/滌凢 =�=Rt?V蝥! (J���=�晅 4珃��"纐倦p�nEH{护� +Z劀琄(闌漃壑� +I<�核D楮狺憟楡耟�Q蠦鋎]DQ陥诙eH竷苿桄鳅弁�傧�%YNh歎Z�鹤�4=濕Cn>汵t铑?苻Ww�.麢盽d9�0燗撬zx�T鵷l= �栜}化镲鯡{隐启嗣眦I�@�碂! L篻!�聙R贆�;韈&爾 :鞞Vs酮灜�'轡K叮痖�>�$� 态聙� L趎%}g` KA襾歎=[�>3�+��-]�(�0V伨楟�聙R鷌坏簟470敁ら;U现O�r:鐫�瞴{囵醶犭弭耍x SK迷騇翩矛聙襹H蹪堣����d�0唱g雺k厅H^�*詗�,,玃稩;�1,\T鱿境~J薺趎m訦8$c漹 5N粘u岇溙繋钭屾赯gC擜蘴�1荼 l棘�&頏昅侵硲 +1=?仉攠貮懨速-6N謊u犖胭p鹟"�淃鲄�阺N逰�【攠谊�;G鵔V�!$v蟫烡=O�:虐拖胯�9R鴓<姽%秪踡/忢崋o犆麻�0犘爆蓍d嗴漁!蚘趤靌6珃稙�=积|*m,�.鹧跋i察Q痭?W惔Y+y靅1キgjf 枷堚��級絁x�a�T寙耯鴹b$2蔨銸G�>"=�艺嬳睁f擐i ^_M_q�yeG涿� 溫Н�'蕕�捰�>Qqx};}髉2#殔��>}=峻喵/郢敜龐甼���鳯endstream +endobj +5274 0 obj << +/Type /Page +/Contents 5275 0 R +/Resources 5273 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5191 0 R +/Annots [ 5277 0 R 5278 0 R 5279 0 R 5280 0 R 5281 0 R 5282 0 R 5283 0 R 5284 0 R 5285 0 R 5286 0 R 5287 0 R 5288 0 R 5289 0 R 5290 0 R 5291 0 R 5292 0 R 5293 0 R 5294 0 R 5295 0 R 5296 0 R 5297 0 R 5298 0 R 5299 0 R 5300 0 R 5301 0 R 5302 0 R 5303 0 R 5304 0 R 5305 0 R 5306 0 R 5307 0 R 5308 0 R 5309 0 R 5310 0 R 5311 0 R 5312 0 R 5313 0 R 5314 0 R 5315 0 R 5316 0 R 5317 0 R 5318 0 R 5319 0 R 5320 0 R 5321 0 R 5322 0 R 5323 0 R 5324 0 R 5325 0 R 5326 0 R 5327 0 R 5328 0 R 5329 0 R 5330 0 R 5331 0 R 5332 0 R 5333 0 R 5334 0 R 5335 0 R 5336 0 R 5337 0 R 5338 0 R 5339 0 R 5340 0 R ] +>> endobj +5277 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 714.8637 149.1082 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5278 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 690.9534 149.1082 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5279 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 667.043 149.1082 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.97) >> +>> endobj +5280 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 643.1327 149.1082 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5281 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 619.2223 149.1082 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5282 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 595.312 149.1082 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.98) >> +>> endobj +5283 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 571.4017 149.1082 582.3056] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5284 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 547.4913 149.1082 558.3953] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5285 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 523.581 149.1082 534.4849] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5286 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 499.6707 149.1082 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.99) >> +>> endobj +5287 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 475.7603 154.0895 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.100) >> +>> endobj +5288 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [137.153 451.85 154.0895 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.100) >> +>> endobj +5289 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [101.7359 439.8948 118.6724 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.130) >> +>> endobj +5290 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.9536 428.6569 172.9088 438.8436] +/Subtype /Link +/A << /S /GoTo /D (page.31) >> +>> endobj +5291 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9911 416.7018 162.9463 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.31) >> +>> endobj +5292 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.2028 404.7466 165.158 414.9333] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5293 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.4332 392.7914 162.3883 402.9781] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5294 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [173.2774 380.8363 185.2326 391.0229] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5295 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [182.5426 368.8811 194.4978 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5296 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.5739 356.9259 175.5291 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5297 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [170.9163 344.9708 182.8715 355.1574] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5298 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.7045 333.0156 212.6596 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5299 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [190.184 321.0604 202.1392 331.2471] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5300 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [192.3957 309.1053 204.3508 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5301 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.3958 297.1501 172.351 307.3367] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5302 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [195.2549 285.1949 207.2101 295.3816] +/Subtype /Link +/A << /S /GoTo /D (page.35) >> +>> endobj +5303 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 260.5673 133.6163 271.4712] +/Subtype /Link +/A << /S /GoTo /D (page.31) >> +>> endobj +5304 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 236.657 133.6163 247.5609] +/Subtype /Link +/A << /S /GoTo /D (page.31) >> +>> endobj +5305 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 212.7466 133.6163 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 188.8363 133.6163 199.7402] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5307 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 164.926 133.6163 175.8299] +/Subtype /Link +/A << /S /GoTo /D (page.32) >> +>> endobj +5308 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 141.0156 133.6163 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5309 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 117.1053 133.6163 128.0092] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5310 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [121.6612 93.195 133.6163 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5311 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 714.8039 350.0976 725.7079] +/Subtype /Link +/A << /S /GoTo /D (page.33) >> +>> endobj +5312 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 690.774 350.0976 701.678] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5313 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 666.7441 350.0976 677.6481] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5314 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 642.7143 350.0976 653.6182] +/Subtype /Link +/A << /S /GoTo /D (page.34) >> +>> endobj +5315 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.1425 618.6844 350.0976 629.5883] +/Subtype /Link +/A << /S /GoTo /D (page.35) >> +>> endobj +5316 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.4249 584.4129 394.3613 594.5995] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5317 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.9641 572.3979 399.9006 582.5846] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5318 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [396.0846 559.6657 413.0211 570.5696] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5319 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [387.3974 547.6507 404.3339 558.5547] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5320 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.4062 535.6358 399.3427 546.5397] +/Subtype /Link +/A << /S /GoTo /D (page.107) >> +>> endobj +5321 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 512.3232 371.6765 522.5098] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5322 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 488.2933 371.6765 498.48] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5323 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 464.2634 371.6765 474.4501] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5324 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 440.2335 371.6765 450.4202] +/Subtype /Link +/A << /S /GoTo /D (page.106) >> +>> endobj +5325 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [354.74 416.2036 371.6765 426.3903] +/Subtype /Link +/A << /S /GoTo /D (page.107) >> +>> endobj +5326 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 381.2149 374.446 391.4015] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5327 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 357.185 374.446 367.3716] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5328 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 333.1551 374.446 343.3417] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5329 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 309.1252 374.446 319.3118] +/Subtype /Link +/A << /S /GoTo /D (page.112) >> +>> endobj +5330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.5095 285.0953 374.446 295.2819] +/Subtype /Link +/A << /S /GoTo /D (page.112) >> +>> endobj +5331 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [392.3786 260.3481 409.3151 271.2521] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5332 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.1173 248.3332 391.0538 259.2371] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5333 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.0113 236.3182 389.9478 247.2222] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5334 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [394.5899 225.0206 411.5264 235.2072] +/Subtype /Link +/A << /S /GoTo /D (page.108) >> +>> endobj +5335 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [349.7687 200.2734 366.7051 211.1773] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5336 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [349.7687 176.2435 366.7051 187.1475] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5337 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [349.7687 152.2136 366.7051 163.1176] +/Subtype /Link +/A << /S /GoTo /D (page.109) >> +>> endobj +5338 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.0858 140.1987 370.0223 151.1026] +/Subtype /Link +/A << /S /GoTo /D (page.131) >> +>> endobj +5339 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [361.903 117.9421 378.8395 128.1288] +/Subtype /Link +/A << /S /GoTo /D (page.110) >> +>> endobj +5340 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [367.4819 93.9122 384.4183 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5276 0 obj << +/D [5274 0 R /XYZ 90 757.9346 null] +>> endobj +5273 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5343 0 obj << +/Length 4208 +/Filter /FlateDecode +>> +stream +x讠\mo�_啷襬N�兄u�"mZ瞭�憉觊甶;�%箌蹪珜缊蝯f纬鋚喦5;ю;w糗(C湊鏊=�  �圜C觎躏�;w膇瘇=hFg觐� �??�G�?��耥��/无]%鱽] 图�濤鬙z~x䦟岈:�>P聹沌_�$衩觅gN~�� �(Dp3W廛pL�<遫廜敲珃鐻9卢s蒨$隹�悘�|瑞漚証�0c 粦� Q盬a'聶Bg爯56媫w鈬軤3斊颾鼱S�@#@@a碔� g +<韜_瀦 +"� �笰O佢铯o`9憘沯�呇F磽�2'3�7黈膉蝕 l鼝鬡@韜IC墺�@3 +L+*源�泧峭嵛卮罧E刣z禔倧�!7�啉�m饸n暘PQ�t峾W鳑藖+zq|�a贳蠣软/痾討)#D�2|G徻�瀗誴c~*滗�碞榈P朠鋝貇凫踦�&仞 7绹� 扶:=}寻 豘暜仉x鉒+_箙T憿巨\2u駸ы~s鳘伏�4��9�3氌�岆$?�Q�+�&�F�$�"|1K斑~榀鎔m48a5皅5d 鸹� �<7~5誤普拔毬鳝Ss.驾=>.t'�)莳餁s儱n5�;>{揄VU呸險蕵�=zD[竟=羑qr� 忠`>拝?α�9 �$T濃�>n��(敜 �/�?��5_�兎蒿 tF%g褟(�5�8�:4餙K�矆蠷�&�)e�笰飿馋� �靑%}sL9�0�>呠`\� �6�5/%1昝勂}�笰镅讆旨渹r︿o}@a�1vn!=85嚲}>簪繙Z濔X� �!明騗鍀帷�/1 �&吲oD�)S郌畦滒�7彎Cy�.琫r哻�鼝�"帯晦識VJV駑緰Qk +迡诺蝹?l煻w薩�'婼繒� V緰/F覌p +lJ裹埪XS鼕&�<睚窉�糌 �-鶂r冝挴�.-y纐*+�茪倗䴖);追囒錿胆5f读襺�笰/葑~�滘 +麺�(�5)�-� +9骨户肭�%W縱 +K�n堵 +瀫r僞罶�gm�鄚7T�7O@a琁Η榠�8 ,Q狮��?�結P鸧P衡擶,(�5)@f��贷� (殰z;'7X節S �7陆駐�:泖��)魓嵬葺~簏<}y�=圯泗~w剌�赟瞰M7鸇|锐�3�陔↙{ &櫓仉#�圔H�2�顝� en灋斗7�?o�!悅=!s%鈬軤3W縹凴�e3尖��(務+y +� /侖�旘锨齀I铻糰GE?�剑②��0鞶� �'艗�9* +(務��.廹(爝�;瓮べ�4菕?l�鴲醷sヲ闓┰翪1%y3Sh澮K� 芬枤軑坳糠丰 +暂~;�>o8Q�"g缲� �!7柰涄锔歑;o8懫檴繖7叞z�'耞�-D驀 蹧図O\L &'愠3L攢r優(颠Q趭8M蛇�P�匰"`3,E国6黳高飵燂煄囬螫�堕0w顊楃| 錁e砱lS +�!7桧J颠瘾+譶KP峐j*[ +(務+D-偋#娮访 l�7�6箱㑳痲捥?薶墪,?�綊ヶ;^╇曨�リ4E[@!� 佊DH� 瘘膂p{� ^IX廎FbD3�V扄妙攋^橏u確�鴲慒纉T隿Z?耸;鰮8U刣Ds�N籤熰霔�瘬0M&皗(#仃�B8S芴n難V<=飊榕� 哑嘿 >鈬軤3捚�~铀 肁&^爭?�0�$�縿畽�8t�<噯v��}�笰镔讆цeO~&j酧 �4祁餆3!坞癫衰R涠3 裩苀+l鼝�&@韜挔┧$�/I��5�(�6�0^鑖�#聖W莁�&+\�?�}J繐�'傉�@G�呇&�塈溩餲x躭?��-N胂輆�&cD媹r兾�繐桐秔庿^d �4)‖緻鏂曡� +<踒BL�!趋tN24u偆�:W盬2D茩d愙咖a 灐囷fG 9\�%�"~� :鼛X�>hF湭PO厛耯�R摖:》罌f彡麍�6噣r冝鍼麧耾+�玻掯殼Pm +烠譨�,嘛韻半h+g<~�笰/�~�7鶾缹�h�(�6呄��Z@溽_哽货睴杠┨[?��P�5p礂尮p�@� +� 闞+Vi衇&摮 r|O�孰� 涥0�0�繀r�:啄邖*97坂岠!7�+P鷿$�= �#翀耯�FQ�粇懍荇zu2翃r僞qT麧��嫬�4 +F�衺遬體�7P +tnb焱訐?}j%2赺茏鉋-%�+#~� :cm鼛Om�'1淲麺�(�5)$,阎塕∞ *�桭\#携 3�2�5�"l匀.kT�/k次�4bP助F7it%�_�迥raOW)3XS)�0� +㧐曋Y襋鑌瑸/愈�窘z�譿�顝玓躅帑玚银揋艟U�笰/)諂莾�6'i磉�S�茪t蚍大+銜骍u:厸筷A嬴��]h?�铰劭堣涋�貟�9�(�枴�/;Pi褺�%郢^商凳胸n餋n雄璳裤桩m蚸�-洯*񁛖-#詑[吲槟&�>}bdk#满7崇塓�/O寀�$厗聠w猇/昕P.���'� G箁����? Q�/蕝癋裹e@蛍|狀�稄�筑�%$K?�C骏M�!7XH聟遯B檔σU$霶kR +S呶'郧�x筱竒}诐E欷绞肪c.;u V霆C霆�q疊X揕驴嵚d1憊敲WL#.�炗f�6�" 汧��4ZgM鶣鐹瞨/V�;G擴�/窜`E�矉 +朁� +!琎!n 褌 mJ走,骐覸7奾_i沽蔎K0d鼖+ aM:iA尶�uE��z聸愤均彡艴3W�镴ekJE量:kRJ鴆愳-娳 w~豊!镹搦s儠�?翋B╀_荠諼A�s閊g竵葱�*p@誰匁�?��>傣;觥谗輯銈U麺Pk�T'遘噡銂蹩��W�s4wz��C諴煽竼吱懣鳫Ex醷澡oW啸|鉝Hき雴�.Qf�&Q剭蒭� +㧐壷Y揇@� 譚/兙0锁籷炭鑮j柹 V睱�!}z煽榚謽e�-蝿:璒O鑃躟/Fa詁焇�/鲩k��\�>鞛7_w8��㈣培� 07X9L0� 颁_<DX錯礗熁�?质[x崜俖Η㈤��庪蚙�0�;啄8�'4J陀P鼧扣> endobj +5345 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.1937 726.8189 175.1302 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5346 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.175 714.8347 180.1115 725.7386] +/Subtype /Link +/A << /S /GoTo /D (page.111) >> +>> endobj +5347 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [166.4925 702.8505 183.429 713.7544] +/Subtype /Link +/A << /S /GoTo /D (page.112) >> +>> endobj +5348 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.8659 691.5836 171.8024 701.7702] +/Subtype /Link +/A << /S /GoTo /D (page.112) >> +>> endobj +5349 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.3453 679.5994 161.2818 689.7861] +/Subtype /Link +/A << /S /GoTo /D (page.132) >> +>> endobj +5350 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.1573 667.6152 193.1124 677.8019] +/Subtype /Link +/A << /S /GoTo /D (page.62) >> +>> endobj +5351 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [115.0158 655.631 131.9522 665.8177] +/Subtype /Link +/A << /S /GoTo /D (page.133) >> +>> endobj +5352 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [169.6507 642.9296 181.6059 653.8335] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5353 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.7314 631.6627 170.6866 641.8493] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5354 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.8185 619.6785 176.7736 629.8651] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5355 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9906 607.6943 162.9457 617.8809] +/Subtype /Link +/A << /S /GoTo /D (page.93) >> +>> endobj +5356 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [147.0354 594.9928 158.9906 605.8968] +/Subtype /Link +/A << /S /GoTo /D (page.91) >> +>> endobj +5357 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.941 571.7417 146.8962 581.9284] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5358 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.941 547.7734 146.8962 557.96] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5359 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.941 523.805 146.8962 533.9916] +/Subtype /Link +/A << /S /GoTo /D (page.92) >> +>> endobj +5360 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [134.941 499.8366 146.8962 510.0233] +/Subtype /Link +/A << /S /GoTo /D (page.93) >> +>> endobj +5361 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 464.7047 151.3298 475.6086] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5362 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 440.7363 151.3298 451.6403] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5363 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [135.4992 417.4852 147.4543 427.6719] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5364 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.9724 404.7838 167.9276 415.6877] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5365 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6073 392.7996 174.5625 403.7035] +/Subtype /Link +/A << /S /GoTo /D (page.71) >> +>> endobj +5366 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [204.4604 381.5327 216.4156 391.7193] +/Subtype /Link +/A << /S /GoTo /D (page.66) >> +>> endobj +5367 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.7047 368.8312 156.6599 379.7352] +/Subtype /Link +/A << /S /GoTo /D (page.71) >> +>> endobj +5368 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6173 356.847 174.5725 367.751] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5369 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9911 344.8628 162.9463 355.7668] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5370 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [162.6073 332.8787 174.5625 343.7826] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5371 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.9136 320.8945 156.8688 331.7984] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5372 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [170.3681 308.9103 182.3233 319.8142] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5373 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.798 296.9261 155.7531 307.83] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5374 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.2123 284.9419 165.1675 295.8459] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5375 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [149.8852 272.9577 161.8403 283.8617] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5376 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.1937 260.9735 170.1488 271.8775] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5377 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [145.4615 248.9894 157.4167 259.8933] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5378 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [174.7915 237.0052 186.7466 247.9091] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5379 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [167.8977 225.021 179.8528 235.9249] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5380 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.5613 213.0368 189.5164 223.9407] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5381 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.175 201.0526 175.1302 211.9566] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5382 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [224.8828 189.7857 236.8379 199.9724] +/Subtype /Link +/A << /S /GoTo /D (page.76) >> +>> endobj +5383 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.1583 177.0843 206.1134 187.9882] +/Subtype /Link +/A << /S /GoTo /D (page.46) >> +>> endobj +5384 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [203.0152 165.1001 214.9704 176.004] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5385 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [193.0528 153.8332 205.008 164.0198] +/Subtype /Link +/A << /S /GoTo /D (page.55) >> +>> endobj +5386 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [201.5208 141.849 213.476 152.0356] +/Subtype /Link +/A << /S /GoTo /D (page.41) >> +>> endobj +5387 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.255 129.8648 212.2101 140.0514] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5388 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.9218 117.1633 239.877 128.0673] +/Subtype /Link +/A << /S /GoTo /D (page.89) >> +>> endobj +5389 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.415 105.1791 185.3515 116.0831] +/Subtype /Link +/A << /S /GoTo /D (page.169) >> +>> endobj +5390 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.4811 93.195 170.4176 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.170) >> +>> endobj +5391 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [340.6329 726.8189 357.5693 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.171) >> +>> endobj +5392 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [356.6827 714.8637 373.6192 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.172) >> +>> endobj +5393 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [341.1908 702.9085 358.1273 713.8125] +/Subtype /Link +/A << /S /GoTo /D (page.174) >> +>> endobj +5394 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.3649 690.9534 370.3014 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.176) >> +>> endobj +5395 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.9228 678.9982 370.8593 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.177) >> +>> endobj +5396 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [383.8008 667.043 400.7373 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.178) >> +>> endobj +5397 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [384.3588 655.0879 401.2953 665.9918] +/Subtype /Link +/A << /S /GoTo /D (page.179) >> +>> endobj +5398 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [366.6549 643.1327 383.5913 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.180) >> +>> endobj +5399 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [345.6142 631.1775 362.5507 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.181) >> +>> endobj +5400 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [346.1721 619.2223 363.1086 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.184) >> +>> endobj +5401 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [368.299 607.2672 385.2355 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.190) >> +>> endobj +5402 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.3177 595.312 380.2542 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.191) >> +>> endobj +5403 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.8757 583.3568 380.8121 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.192) >> +>> endobj +5404 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [358.9043 571.4017 375.8408 582.3056] +/Subtype /Link +/A << /S /GoTo /D (page.193) >> +>> endobj +5405 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 547.4913 387.1685 558.3953] +/Subtype /Link +/A << /S /GoTo /D (page.47) >> +>> endobj +5406 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 523.581 387.1685 534.4849] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5407 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 499.6707 387.1685 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5408 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 475.7603 367.8111 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5409 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 451.85 355.079 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5410 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [360.2693 439.8948 372.2245 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.74) >> +>> endobj +5411 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 415.9845 355.079 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.71) >> +>> endobj +5412 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 392.0742 355.079 402.9781] +/Subtype /Link +/A << /S /GoTo /D (page.66) >> +>> endobj +5413 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.846 368.1638 367.8012 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.77) >> +>> endobj +5414 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 344.2535 367.8111 355.1574] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5415 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.846 320.3431 367.8012 331.2471] +/Subtype /Link +/A << /S /GoTo /D (page.77) >> +>> endobj +5416 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.846 296.4328 367.8012 307.3367] +/Subtype /Link +/A << /S /GoTo /D (page.78) >> +>> endobj +5417 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 272.5225 367.8111 283.4264] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5418 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 248.6121 367.8111 259.5161] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5419 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 224.7018 355.079 235.6057] +/Subtype /Link +/A << /S /GoTo /D (page.71) >> +>> endobj +5420 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.9642 212.7466 386.9194 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.44) >> +>> endobj +5421 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 188.8363 367.8111 199.7402] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5422 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 164.926 367.8111 175.8299] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5423 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 141.0156 355.079 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5424 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [360.2693 129.0605 372.2245 139.9644] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5425 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 105.1501 387.1685 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5344 0 obj << +/D [5342 0 R /XYZ 90 757.9346 null] +>> endobj +5341 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5428 0 obj << +/Length 2842 +/Filter /FlateDecode +>> +stream +x诃淽S9嗭�緞V�-蚞&� �瞾萆栽臽\l�13�縍互朲�#鸥r伭玷�t粞~ 檂髲L4�4歲9箋<聯{筱稧{j逕�?] �嵈rmA$(胭o晴烵~縹7醁!,叁� +fztv韀锬撃洱浚邁菗欓幕#寴Vb蚍�#�5�<q受7_彯廅碹俳�&實A66 俙筅魀襊螈賺鋣本] 釭z1l睁偒D\j$5直鴃�>柎�b~MD*7鏇徽r檸楺�%%}xa�.~&寣9i譾�0瀟�7c9炖p�.�$�醁}"蓁觼�I>�0p? Fz惔k{行級脛魢鉽QU篼枤#偉垀唧籱[长�2%i!h婽[b礨���=怣K瑹臨Pu覣6v�1螫v� �+@�,QG彤眫v�U憩 +QnB砨>�吡嘖D昉鮸�垙 +瑧眫�╦�0�没*涀�W`同舟� 7Uc鸈﹜!x墜嫙� #\抳m'T簥 +菢�垢▊B0�3?of粉郫�%H�8k刅圞Q_Ua0k|X;ktv帜Y�:BI$邦玧緘腹澩6?宮oB0乍�&F? �&瓢葺�*颖S膗3霡2�.� k寝pLU4鰢选3D鎪Fi鑍�4L葺杏侥瑌羔�$E袳d硇 %縓�9�|vz埋瘾佑O�/略ヤ紐��E脟峏?籬廓�SH*蚥>g�?�暔a溤�  <.瑒'蚁�U-翾莹~崭無g籰�l處剨泷フL蒄薴"0E姴b懝鴌�0)i做fて'摊<�BrQU塳寯T2勽皕�o益R�)L0?� V禈�4,拇渙o燓<%!蘵嫅zJAD蓞禂T濺�猌Jf奸+nq鞲6_F�+�Hfn�>﹖H殁仑!e仡n�=C齞鸹爞�;#k陲計錬咚 7)f儹�#� 纄袊禇A暯 弃偎`A誡9nQ敾q[0;彙'蝾悠O脛褫'n�=斥陛GiB�#籓UP5髞i�(頍仚~迋防佘.e萧f S 檉k昔m�4L?忧矶|蓉櫈s��#g�6獱j�41唧Y藲M��2垽筟B&虒塈�椨.~&�-v蹏 檠邷gic鲒X?YQ酣偑Ed.K :!&7纾zBAD葏�E鷜B牚%D櫣GI: D�2獶d�'�Q�!ra%D憕╦Q瓚PB��"緜腚,LQ揈雊联Q#恖陌呜!I�婋 -L�拱?�T祱A�肂�(4�4R�Z�!ra-"旼殓仾�9e)羾卾c幚嚇HD槗圑嶼  J.珼)蚁SU-%虗鎈&擵�倧��&K辁� T>瑎*窒U *�0聦k瞀嬉Y僆�q壕盥� k1�<?� T禈凞腡�γ��檔宰^�憆a%R憕�╦I1�(a" u黟缬�#笂绡﹦bD呪兆�0甫�55窒^S 欽癇 楚訒洼萌5暎F� 簍M礅仑5u豱�1禜瘉&帥[S瑹\S花偑�Z"|感}�J2lN�..PKTw佊>2dT頽4僅聶俟L蚽[� 襻癕#iu�+� >琱:C|PA覐x�檓韒�剤泫�/v髷�0鱤%歪狄0忏 螎摧敦抺?犹>@f癬腉昑薄�郭簒�>钐O锱%a0M"廏��)雊'JA胀斎�|趟�(植�;忏 .幋輖�Sf鉳(吔#>軎Fd侔焜�?亢>圾xD忏腼7 0s@P脉訖3 +淺�4L閝翌�[L�8b柲X壬E昑=貉rz�笸�餼鎸j>A�'4}(戠殓獮Oh醜棙�=x衼�8僃5� b?斒硥趔l`U�&2p磗珧碹髬符蠞J縀�6>ろ�h疯�T=熜阘鵿x鮵伏|~"gg‵$@圔��(蚁#俇=⑿煨!胡�燭Wh拊PM)H�(協 圧�珃J$�.B廜O{y狐] 禌}�l鰬["鮰鵰<窒n�U�'�;X>所恂釓說苻en囨槽鑊麉�/!襳w'竬烺�厪*�: � c賬u緇篢0[!襳 �4`粲�9 m膣f睔-頏H戌刞d皑鮜�"m�5r�6q约 z0|TI諆:1ㄖ恷Z雾PM+H�h�. +悟�"�<-X沼 +}v/鹔蜝諨鼹蜮威~∵蔪SA趎a+� 齎VPu�C脄貂隵畍繄Tz vろ'兴�/NUh鑘皜To晼喚轥sA趎∞@KC_oUO*46貁鹴鲫觋烀O颫魄款_r暺喚鋊婣趎′@cC_rU�)򁊊�>;�镔�/�'L���A灰���i�-*橤T蔼C曍6螫眄f覵ッ燻疉趎鹍 g(嗅�/PU蟞鑣靥碛�/臫鐁0亊兇�&儒`俇=π胄V]{�=!犋r�r9翦襳 ��鷕+▃FC趁觸9垠閩サ�z� 襳郄�:�6鬙� 辇朽P.桺] 闱@ Z7�3ロ觴9PO8uQ%Q�)tIt滄蹏乺枅ZPA<*4Z@�"�<(X詢 +M�亰摮D話 +�R⊙"╃I立濼h涜H-謰}楀J嘋�,胇兇萋� :鷈範陽遑�0�'L豙壷懽亘籬仞0hs鼜榣k铇寺胙橰s倾�l駿�H晿U寫惇濰き先齱堭顗邵鵵竟�鉵鷨廤溯�钆;{蕓罹!贷�れG妛邫奢fW涊7乡籬�m黪t跸符袁b?^v] 櫤舯endstream +endobj +5427 0 obj << +/Type /Page +/Contents 5428 0 R +/Resources 5426 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5491 0 R +/Annots [ 5430 0 R 5431 0 R 5432 0 R 5433 0 R 5434 0 R 5435 0 R 5436 0 R 5437 0 R 5438 0 R 5439 0 R 5440 0 R 5441 0 R 5442 0 R 5443 0 R 5444 0 R 5445 0 R 5446 0 R 5447 0 R 5448 0 R 5449 0 R 5450 0 R 5451 0 R 5452 0 R 5453 0 R 5454 0 R 5455 0 R 5456 0 R 5457 0 R 5458 0 R 5459 0 R 5460 0 R 5461 0 R 5462 0 R 5463 0 R 5464 0 R 5465 0 R 5466 0 R 5467 0 R 5468 0 R 5469 0 R 5470 0 R 5471 0 R 5472 0 R 5473 0 R 5474 0 R 5475 0 R 5476 0 R 5477 0 R 5478 0 R 5479 0 R 5480 0 R 5481 0 R 5482 0 R 5483 0 R 5484 0 R 5485 0 R 5486 0 R 5487 0 R 5488 0 R 5489 0 R 5490 0 R ] +>> endobj +5430 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 726.8189 170.6871 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5431 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.0658 714.8637 148.0023 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.134) >> +>> endobj +5432 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 702.9085 138.5976 713.8125] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5433 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 678.9982 138.5976 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.67) >> +>> endobj +5434 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 667.043 170.6871 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.52) >> +>> endobj +5435 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 643.1327 170.6871 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5436 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 619.2223 151.3298 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5437 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 595.312 170.6871 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5438 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [146.5575 583.3568 163.494 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.136) >> +>> endobj +5439 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [142.1342 571.4017 159.0707 582.3056] +/Subtype /Link +/A << /S /GoTo /D (page.137) >> +>> endobj +5440 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 547.4913 151.3298 558.3953] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5441 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 523.581 151.3298 534.4849] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5442 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [161.8004 499.6707 173.7556 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5443 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [161.8004 475.7603 173.7556 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5444 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [161.8004 451.85 173.7556 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5445 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.6358 439.8948 174.5723 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.138) >> +>> endobj +5446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 415.9845 138.5976 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5447 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.9323 404.0293 151.8875 414.9333] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5448 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.4829 380.119 170.4381 391.0229] +/Subtype /Link +/A << /S /GoTo /D (page.41) >> +>> endobj +5449 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 356.2087 175.27 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5450 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 332.2983 175.27 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5451 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 308.388 175.27 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5452 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 284.4776 175.27 295.3816] +/Subtype /Link +/A << /S /GoTo /D (page.57) >> +>> endobj +5453 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 260.5673 175.27 271.4712] +/Subtype /Link +/A << /S /GoTo /D (page.57) >> +>> endobj +5454 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 236.657 175.27 247.5609] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5455 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 212.7466 175.27 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5456 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 188.8363 175.27 199.7402] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5457 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 164.926 175.27 175.8299] +/Subtype /Link +/A << /S /GoTo /D (page.59) >> +>> endobj +5458 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.3149 141.0156 175.27 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.59) >> +>> endobj +5459 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 117.1053 138.5976 128.0092] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5460 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.788 105.1501 155.7432 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5461 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 726.8189 355.079 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5462 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.8644 714.8637 394.8196 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.61) >> +>> endobj +5463 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 690.9534 355.079 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.68) >> +>> endobj +5464 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 678.9982 387.1685 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.52) >> +>> endobj +5465 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 655.0879 367.8111 665.9918] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5466 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 631.1775 367.8111 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5467 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 607.2672 367.8111 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.88) >> +>> endobj +5468 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 583.3568 367.8111 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5469 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 559.4465 367.8111 570.3504] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5470 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 535.5362 367.8111 546.4401] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5471 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 511.6258 387.1685 522.5298] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5472 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2816 499.6707 403.2181 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.139) >> +>> endobj +5473 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 475.7603 387.1685 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5474 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.9642 451.85 386.9194 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.42) >> +>> endobj +5475 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.9642 427.9397 386.9194 438.8436] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5476 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 404.0293 367.8111 414.9333] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5477 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 380.119 387.1685 391.0229] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5478 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [374.9642 356.2087 386.9194 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5479 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 332.2983 367.8111 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5480 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 308.388 367.8111 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5481 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 284.4776 387.1685 295.3816] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5482 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 260.5673 387.1685 271.4712] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5483 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 236.657 367.8111 247.5609] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5484 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 212.7466 355.079 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5485 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 200.7915 387.1685 211.6954] +/Subtype /Link +/A << /S /GoTo /D (page.53) >> +>> endobj +5486 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.2817 176.8811 390.2369 187.7851] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5487 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.2817 152.9708 390.2369 163.8747] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5488 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.2817 129.0605 390.2369 139.9644] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5489 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [343.1238 105.1501 355.079 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5490 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [356.4136 93.195 368.3688 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5429 0 obj << +/D [5427 0 R /XYZ 90 757.9346 null] +>> endobj +5426 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5494 0 obj << +/Length 3664 +/Filter /FlateDecode +>> +stream +x诃\賜蹻}譝簦�5�/y素災檘鈮e�A (R�b�5璙柨�-6Y2� 坋瓜璖黟諪6跴鴱m�e�RoN桄W'l鷛�蠂瘅嫇魁兓�#Ns焦鴜lA3�8銢嫑N箳g?^|��G﹩v�?傀鲥���N^]勬'v%4髰�镤�殒z裢 %耏爹 ~9�7w'拫鶙O'颪��9~0話PL圆Y~5�$瀗.穱犷犟�1焤 1F淩w交�鶎煙畀象欐�8m6哬B櫠渠鶑�&眺QO~�暑栱W��)'2﨤焵BX紿T獧^Tz鴗{杠=�]滷`)悢腞�6贗篓V楡3~�*睑n豏 %壯Zg@3 +a伌鍎鶄 聰歱C窗f阖鑙2銍8牏I旬飦��e2阆5橯DY�%u#啕護/遌�9qc祠怩粙�/拚$b矰粐Z謇�7楔枤p�5銍8燰9y籧彖瞨'勈鴭蕶P玏IH�R漈蝐櫡燚R�<掲�鈥J轊痪燜)�"B1泆 O|F!�>q蜛q%幽/�( 筽*謼D�+�6杽i桪逻.�.+(%R/I�2粐頳r躔P_垟#哰綫VE澝馛P懄h譿D旹��$L鵶if玛�1�(%m愭p齪 冫谫^鰃躰�(XZ晄zu砟澸 0R眙Y紷誖�0閊紉{�3&Z%,阎�Uq@O�哃�)[�.玏唊b刣q閈耖�3譱臽{`琜絅�漸:纜磌)s滷X閿发淴.氯黑_蹖�叻嶘!垡v�=姫钲m哝Q+厔銑誚荅~假熥 +襔剽�l.濔CP汯髒�+p笰� +拋蔐;PL� +□�K裓聱瞳���1NO縷}1蓰嬒烼ブ峨8�3u2u桐O陞R奝*ⅸ泠n{矯�>琚,� T汋媟衁� Y擲④g躜Fㄣv�= +f+q�+��M逻.�.玏��,_龇O7�煭妏妏n鴍佲�嶡6 +d�M侜� 惏偫�,瑙埯涚�*aP将GU�U唽獢�9琟 殭0縷{隬/铨沢扃�4p庥肭W�+�嗢tS鵷Y�>B 洓畐鼢曇y瑧KV~�j穥\笶Y袄X庥�1�Z�;D嘛I铟[C蚍ne磜�怞蝉w濃�蝞6榔m頵Sna漺耻9r玤�皏謭:矲�%毘F蔬�5P躾荸I*鉧豢葺躛wK鉬,焈�2��1奾t +橣�詄J埘潙U櫎d6惘�4�V/�p}ì�4�"軪h漋0=z�濾3l訨兜JZuY絍�薶篘锓w�3�?断[盿桜瑨a霦奖7闷鼻赾/醥徑.�娏阉箃�=n熁♂T'/O袚g哸�$黰y含 s~箃蓸{� f)蛘KV衁� Y睷捳g趼hK╭�骃婿鷓换^�0� �己x鈥N�R<)硏^#) 钄尛鎹A�偉~�1緰y株q疻檦-QNe霦釭麻�減&話鼾й敲鳋3穣孲聲曤荓�33 3 {挑Y鏼*p�V�(�7鈳(� {8tY�,�&B.7\��账3I鏶乾Y厺���8�Y鯜p}<渆顗诹S佬秺髝鞬郈劘� o祣�pΣ 襀润刧BI!i�6q_宑r旗閲洬谜ы鏜芈h漏計�慽�q@ビE货 [X榾嵶3嵯暁Q�,U饷X绎Jty跤n_�#蔋箈-協�T鶽�;瞰薘2�&O欯�<~OF葈{S� � {剷類�G|e籧龆�繧f悁耎CGd��鷹3FO� +繨(b0&��熔m)W�栺 +L(�5(鸐�谉v徾V鯆稻梹G(e粛烨轮{ (�5d熁_旗k�?鱓z%�J賜脞幜B遳��蚁=0佣刻邿!,�=C���鈥JO妚清鲨m漈曬琦�(�5�;kⅫk`,)N痷�<夥)踡T�溸pt]>叡� +^焛Q哫#�亶� ?��惙;骘J�'斏鴭0�0謵l 蝙O7曯┓w傅NG4韶隬郀�!筘3遫W祡��9V�眲曧�禚窃NS�7��蛳韍繒蓓『鹮�!啐岠!~襳[巏擇Wv?# +c 腇枫�鲿卂"4_矸 x涅V禰D�H�夥 (�5$燍鞦搊%yE 祅.�隱賜闶�覙�� +c潛/mw摗昙厚鎣n�#娣⒄F鯪�樉�.�0覑}旎媿/绲�2F卢B棒'�则羡m 8陞J� &�堼{檥、侐G 敝M饒l�1�噜`踳�4�=呭S誖 +豐k +媗F馛P門裯�&·yH-逑�(�5H�沌︾礐穠璼r�#脾掌-R0錱優o2�0覑}鞛,烚潡桌Y謼`�1眷M裫�栏0{^3 +!]$埈欛C�1lt9愼龤e货9�噁迌輘��(饥�咉Z7湋K6酑尟MYY`"顄}楶辄� 睙N/ tr^^蒈^=/H蹈K裼偪G秒g吀婉!К�$�e蔧9)�(宻.幠x:�$M鮷凬旱貈G绩e货�3苹 +T]l@a�!胗縸h +`垥皩�|y馛P_襳[幝聴騑�叡bcm蜮襶�.讕�5��u `O呁�~�j骾辬]H �鼽&|:�0譅A� �4樉翡紌腞街�饒备lw斃�N +薹3�$萂蛷潄郙/�-1鳰�?�鯖0i籾婵�&瀵軇QkP vGO +繮h寖窳甔k�x�4]钝*砾]玽@a珹傑褒貪 鎮潱V�(�7廪4側A牞A冐瀪REA剳z�%=�sx賜齵�$|,�/棡%=�0謞跆嶉皕z3瀵}и�䦂凤獜雂��>畵窺糷u<濍诔"a嗦v蓍厬蝒抶�?v鲿窃�g碮皹觭�q@完櫡;~1By砕FS芲�='�2彎钋螫甇�&xュ>l搠⒄芿�7蚞谬驳FHC蚬�_踯G昚k�x�_钝Jt^删�>�0謵~罹?ο谧~X{�#|缵禽鑍麆絵睇�!铱$羡莎{穈I緆�/Z搊�)籵D慎IC蛸�S颌濣�7 栦��,{Q騷�9韨%u貺=~�O见^A阝槾m&]舅攸郭�2W動�3忧鉭 屮]櫚� +岁6�,�X菟 +丷髰a餾z答睁~豢:lo螤圁v阆7骭抉O煢_焴�/给傆鉶悥><腼銮_瀆繚衐邱缢蒿|8緹氅芖嶿婽�R]endstream +endobj +5493 0 obj << +/Type /Page +/Contents 5494 0 R +/Resources 5492 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5491 0 R +/Annots [ 5496 0 R 5497 0 R 5498 0 R 5499 0 R 5500 0 R 5501 0 R 5502 0 R 5503 0 R 5504 0 R 5505 0 R 5506 0 R 5507 0 R 5508 0 R 5509 0 R 5510 0 R 5511 0 R 5512 0 R 5513 0 R 5514 0 R 5515 0 R 5516 0 R 5517 0 R 5518 0 R 5519 0 R 5520 0 R 5521 0 R 5522 0 R 5523 0 R 5524 0 R 5525 0 R 5526 0 R 5527 0 R 5528 0 R 5529 0 R 5530 0 R 5531 0 R 5532 0 R 5533 0 R 5534 0 R 5535 0 R 5536 0 R 5537 0 R 5538 0 R 5539 0 R 5540 0 R 5541 0 R 5542 0 R 5543 0 R 5544 0 R 5545 0 R 5546 0 R 5547 0 R 5548 0 R 5549 0 R 5550 0 R 5551 0 R 5552 0 R 5553 0 R 5554 0 R 5555 0 R 5556 0 R 5557 0 R 5558 0 R 5559 0 R 5560 0 R 5561 0 R 5562 0 R 5563 0 R 5564 0 R 5565 0 R 5566 0 R 5567 0 R 5568 0 R 5569 0 R 5570 0 R 5571 0 R 5572 0 R 5573 0 R ] +>> endobj +5496 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [161.8004 714.8637 173.7556 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.39) >> +>> endobj +5497 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.8077 690.9534 155.7628 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.89) >> +>> endobj +5498 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 667.043 138.5976 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.72) >> +>> endobj +5499 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 643.1327 151.3298 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5500 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [129.4116 631.1775 146.3481 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.140) >> +>> endobj +5501 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 607.2672 151.3298 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5502 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 583.3568 170.6871 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5503 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 559.4465 151.3298 570.3504] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5504 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 535.5362 151.3298 546.4401] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5505 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 511.6258 138.5976 522.5298] +/Subtype /Link +/A << /S /GoTo /D (page.69) >> +>> endobj +5506 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.788 499.6707 155.7432 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5507 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [149.885 487.7155 166.8215 498.6194] +/Subtype /Link +/A << /S /GoTo /D (page.142) >> +>> endobj +5508 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 463.8052 151.3298 474.7091] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5509 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 439.8948 170.6871 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 415.9845 151.3298 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5511 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 392.0742 151.3298 402.9781] +/Subtype /Link +/A << /S /GoTo /D (page.88) >> +>> endobj +5512 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 368.1638 170.6871 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5513 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [139.3746 344.2535 151.3298 355.1574] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5514 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [150.9911 332.2983 167.9276 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.143) >> +>> endobj +5515 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 308.388 138.5976 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5516 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 296.4328 170.6871 307.3367] +/Subtype /Link +/A << /S /GoTo /D (page.53) >> +>> endobj +5517 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.4829 272.5225 170.4381 283.4264] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5518 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.4829 248.6121 170.4381 259.5161] +/Subtype /Link +/A << /S /GoTo /D (page.44) >> +>> endobj +5519 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 224.7018 170.6871 235.6057] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5520 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 200.7915 170.6871 211.6954] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5521 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 176.8811 138.5976 187.7851] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5522 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 152.9708 170.6871 163.8747] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5523 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.6548 141.0156 169.5913 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.144) >> +>> endobj +5524 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.6425 117.1053 138.5976 128.0092] +/Subtype /Link +/A << /S /GoTo /D (page.70) >> +>> endobj +5525 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.732 105.1501 170.6871 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.54) >> +>> endobj +5526 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.8559 726.8189 367.8111 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5527 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.2133 702.9085 387.1685 713.8125] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5528 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [368.5781 678.9982 380.5333 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.47) >> +>> endobj +5529 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [377.9828 667.043 389.938 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5530 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [371.2382 655.0879 383.1934 665.9918] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5531 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [368.578 643.1327 380.5332 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5532 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.5593 631.1775 385.5145 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5533 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.0886 619.2223 391.0438 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.52) >> +>> endobj +5534 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [388.4933 607.2672 400.4485 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.48) >> +>> endobj +5535 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [376.8768 595.312 388.832 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5536 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.6937 583.3568 381.6488 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.52) >> +>> endobj +5537 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.6067 571.4017 375.5618 582.3056] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5538 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [381.0513 559.4465 393.0064 570.3504] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5539 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.6068 547.4913 375.5619 558.3953] +/Subtype /Link +/A << /S /GoTo /D (page.49) >> +>> endobj +5540 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.0012 535.5362 384.9564 546.4401] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5541 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.9678 523.581 385.923 534.4849] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5542 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [366.3665 511.6258 378.3216 522.5298] +/Subtype /Link +/A << /S /GoTo /D (page.53) >> +>> endobj +5543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [364.7126 499.6707 376.6678 510.5746] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5544 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [383.5318 487.7155 395.4869 498.6194] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5545 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [385.7439 475.7603 397.699 486.6643] +/Subtype /Link +/A << /S /GoTo /D (page.50) >> +>> endobj +5546 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [384.379 463.8052 396.3342 474.7091] +/Subtype /Link +/A << /S /GoTo /D (page.53) >> +>> endobj +5547 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.6094 451.85 409.5646 462.7539] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5548 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2917 439.8948 398.2469 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5549 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [406.7647 427.9397 418.7199 438.8436] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5550 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.6563 415.9845 391.6115 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.54) >> +>> endobj +5551 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.9777 404.0293 401.9329 414.9333] +/Subtype /Link +/A << /S /GoTo /D (page.51) >> +>> endobj +5552 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [372.4537 380.119 384.4089 391.0229] +/Subtype /Link +/A << /S /GoTo /D (page.74) >> +>> endobj +5553 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [379.0986 368.1638 391.0538 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5554 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8494 356.2087 398.8046 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5555 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [391.2728 344.2535 403.228 355.1574] +/Subtype /Link +/A << /S /GoTo /D (page.75) >> +>> endobj +5556 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2816 320.3431 398.2368 331.2471] +/Subtype /Link +/A << /S /GoTo /D (page.77) >> +>> endobj +5557 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 308.388 390.4959 319.2919] +/Subtype /Link +/A << /S /GoTo /D (page.77) >> +>> endobj +5558 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.8393 296.4328 398.7945 307.3367] +/Subtype /Link +/A << /S /GoTo /D (page.78) >> +>> endobj +5559 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2816 272.5225 398.2368 283.4264] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5560 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [394.5903 260.5673 406.5455 271.4712] +/Subtype /Link +/A << /S /GoTo /D (page.37) >> +>> endobj +5561 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.4843 248.6121 405.4395 259.5161] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5562 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [385.1757 236.657 397.1308 247.5609] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5563 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.051 224.7018 401.0062 235.6057] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5564 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.4843 212.7466 405.4395 223.6506] +/Subtype /Link +/A << /S /GoTo /D (page.38) >> +>> endobj +5565 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [392.3784 200.7915 404.3335 211.6954] +/Subtype /Link +/A << /S /GoTo /D (page.39) >> +>> endobj +5566 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.4177 177.5984 375.3729 187.7851] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5567 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [351.9805 165.6432 363.9356 175.8299] +/Subtype /Link +/A << /S /GoTo /D (page.60) >> +>> endobj +5568 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 152.9708 390.4959 163.8747] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5569 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.5594 141.0156 385.5146 151.9196] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5570 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 129.0605 390.4959 139.9644] +/Subtype /Link +/A << /S /GoTo /D (page.56) >> +>> endobj +5571 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 117.1053 390.4959 128.0092] +/Subtype /Link +/A << /S /GoTo /D (page.57) >> +>> endobj +5572 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 105.1501 390.4959 116.0541] +/Subtype /Link +/A << /S /GoTo /D (page.57) >> +>> endobj +5573 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [378.5408 93.195 390.4959 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5495 0 obj << +/D [5493 0 R /XYZ 90 757.9346 null] +>> endobj +5492 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +5576 0 obj << +/Length 3800 +/Filter /FlateDecode +>> +stream +x讠\kS7∈R魚�鞇当甤g�) +玫C-朑�鹠驼H╃�-*U�N鲬未篬�_0鴱/<[Xm�,慰m迸W�-L噻�糪nJ鴧м砐~<N掂b奔鴐h�嘤物藷�9蚀G猁B腽莪僥�傻4<镏o砍� 忡-Fz�|�(鱚,緈)!�/N二欬�0`s衆b搻�$8兿B藚鹆甮騲y{zy{vqqwz鯡=z�f=� 茚'w_#涓E倱弻FC預 +龜細xu(愉攻�3厶v嚦盹�侸!U鹅i瘠4繢惟 ╬=S﨔唸瓯&槮FyU腽盱�?��2gL蛾i瘠4�4鳹�)XS﨔儓瓯�/﹔巆`獳0N�<n�!酙i�嬎k� +臺蓯PV萀苢圓鉌.V;Bo�聱|萵< +E笭蹳�咜�#伥銞6P敠柫D�瓄q幛�#啞TC�i+�:JFT�4E dU芓�/痮讴kI9+酀〨8)袢(j詙Cn$e�┴氅彣i毢R�)(呫詏Ww�7楃盱崷仑陇3�OJd(嵾A佯[� �+㖞�誧MHAa憳F�鬃H烎詐沓]/OF<) �DT�5蜑q壬6兹W嚐鯟>剌�?F�_橎蚶NJ<�*�3�?曆 {�RQ轑:J 潷Jk7曕`�獉�.襥h簰Yg 寈R k狇;#�渶Vr蔩�0�:琘k*�7�'藘w飵w 踍炧笯傾瞸B.xR啼倝� � <�)?� 歶0歳)sq|箧в7H񱻚貞d媈9坸R`鍫�;蘝闱�FT麺9埁k毧訹炏‘n劲g妼頾�<) 饙笤�0w噈�%噯o蕪l�T�5蚞眕玡虺鼹踽裬澍峉涩�襟穲'�vW麧y鰹C{�)sQ=�4崧崠L髧=聑�B逻Q同虵金弜R`醎麧 �>珴�7�Q=�$7�6玊噤祝Y`s2險�'珕昗\蜺街S颚FP�2蜔﹑Y椈流��BS絷禥�d肢�OJ�謣g$�摗L鴽ZQ�$傪釥H鐜瘌`麂溧硭7�=`劭⒌衠仄$藒-黏4纊嵩飳P瀣厤蠑﹨歶p,\囫B嚱僷x蝰餳�.~l�咼閤6頗1釯i�H养�0 �\hЁ#殽06\邋陌N ;躮縶仌'鎌 挰z绐OJ靄钓媖�3檪�蔬湯FT�5i.登{翣辽d噑窘剉駊�江�铸凼OJr陊F 8鴂艔躒�k褺砷m妪觅�=v椽<3� z“啌廍B鍀鎈�LS�7�Q=�4y�'W�绶贩A�&龙�)濎zU2翴伹猟�� 迡洂7U2�:擨铙臽X �=hNN蠱Zd孇&a罁��$LD?�娆慚聙瓯3.*s乗緟�坜=\_钧�# +椹扯p�)#灁Hqh8捔効巻誥Mr剋聹展N.梠^`棤恆xF�2A膿�K颠耿犅項沑Q=�4w'耈瑳苒oL�冾6霾A膿�K礯|�(�)�"歞�,\玩銚O鱺:佧巧嚪柔夃r椚v�.)釯i�uI颠櫖i蝬X馭K姩kVA囕蠂'巁�=滦.�/� +Σu�葑'%鮱鈛�0�);蜴雬陳z@+硚�+.堺郢匏 漪骜}�/记,<*┞m痽孰�OJ儥鳎'~�¢l#&k萇 m辙w宠�'�2淦風� �7锜M=��-Q=冥攆�(バf�?Y(槁瀆>]`揚#l︹f�&�j3m +謽昷�}^PA畲柱Ul襧剈禋 `^碔+^w搉緀}朲�3犏GoY`僙 諷k:�Y�:矗Z�:旯T砞眢�2痤樗�4�$�電5兰X沬揦嵋滻�6鞠SII蕯}�, 6�4耭z卢襠�*m*蓀:#躄o�<┞イ��顷+ 6I5潞RM0/說�$硵;阽gI%}簋Yf挭4� U偼tUI勯fリ袔RI;+�鹹2YN%7O_|チ&橣XWι鎒贚沝覟蕄i;昳競ED怲I/睻O剤'�&B韜A!}ィ餪�4"DT�6墵靭K傦D�/�袏<=^ +僊�2潞�2@}M肭xFQ绅;m��墆��䦟�^綡�PIm杈�� +钉*φ撰胝葙脁锎迬~�忨 .饪霨!l龝`态?} 譣7w盏烏囅咦�钸旰S$搿H7endstream +endobj +5575 0 obj << +/Type /Page +/Contents 5576 0 R +/Resources 5574 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 5491 0 R +/Annots [ 5578 0 R 5579 0 R 5580 0 R 5581 0 R 5582 0 R 5583 0 R 5584 0 R 5585 0 R 5586 0 R 5587 0 R 5588 0 R 5589 0 R 5590 0 R 5591 0 R 5592 0 R 5593 0 R 5594 0 R 5595 0 R 5596 0 R 5597 0 R 5598 0 R 5599 0 R 5600 0 R 5601 0 R 5602 0 R 5603 0 R 5604 0 R 5605 0 R 5606 0 R 5607 0 R 5608 0 R 5609 0 R 5610 0 R 5611 0 R 5612 0 R 5613 0 R 5614 0 R 5615 0 R 5616 0 R 5617 0 R 5618 0 R 5619 0 R 5620 0 R 5621 0 R 5622 0 R 5623 0 R 5624 0 R 5625 0 R 5626 0 R 5627 0 R 5628 0 R 5629 0 R 5630 0 R 5631 0 R 5632 0 R 5633 0 R 5634 0 R 5635 0 R 5636 0 R 5637 0 R 5638 0 R 5639 0 R 5640 0 R 5641 0 R 5642 0 R 5643 0 R 5644 0 R 5645 0 R 5646 0 R 5647 0 R ] +>> endobj +5578 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.215 726.8189 191.1701 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5579 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.3271 714.6576 193.2823 725.5615] +/Subtype /Link +/A << /S /GoTo /D (page.58) >> +>> endobj +5580 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [183.0903 702.4963 195.0455 713.4002] +/Subtype /Link +/A << /S /GoTo /D (page.59) >> +>> endobj +5581 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [200.2458 690.335 212.201 701.2389] +/Subtype /Link +/A << /S /GoTo /D (page.59) >> +>> endobj +5582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.7047 666.0124 156.6599 676.9163] +/Subtype /Link +/A << /S /GoTo /D (page.44) >> +>> endobj +5583 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [152.1068 653.8511 164.0619 664.755] +/Subtype /Link +/A << /S /GoTo /D (page.41) >> +>> endobj +5584 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [164.271 641.6898 176.2262 652.5938] +/Subtype /Link +/A << /S /GoTo /D (page.42) >> +>> endobj +5585 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.6196 629.5285 200.5748 640.4325] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5586 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [171.4741 617.3672 183.4293 628.2712] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5587 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [184.1963 605.2059 196.1514 616.1099] +/Subtype /Link +/A << /S /GoTo /D (page.43) >> +>> endobj +5588 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [208.5449 593.0447 220.5001 603.9486] +/Subtype /Link +/A << /S /GoTo /D (page.44) >> +>> endobj +5589 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [143.798 568.7221 155.7531 579.626] +/Subtype /Link +/A << /S /GoTo /D (page.61) >> +>> endobj +5590 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.9136 544.3995 156.8688 555.3034] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5591 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [158.1937 532.2382 170.1488 543.1421] +/Subtype /Link +/A << /S /GoTo /D (page.40) >> +>> endobj +5592 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [136.6051 508.6329 148.5603 518.8195] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [131.6238 496.4716 143.579 506.6582] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.0594 484.3103 214.0145 494.497] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5595 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [202.6172 472.149 214.5724 482.3357] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5596 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.3295 459.9877 211.2847 470.1744] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5597 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [194.5275 447.8264 206.4827 458.0131] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5598 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [175.2499 435.6651 187.205 445.8518] +/Subtype /Link +/A << /S /GoTo /D (page.83) >> +>> endobj +5599 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.6981 423.5038 211.6533 433.6905] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5600 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [168.7045 411.3426 180.6597 421.5292] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5601 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [192.0967 399.1812 204.0519 409.3679] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5602 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [211.8625 387.02 223.8176 397.2066] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5603 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.6582 374.8587 211.6134 385.0453] +/Subtype /Link +/A << /S /GoTo /D (page.84) >> +>> endobj +5604 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.6573 362.6974 190.6124 372.884] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5605 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.3559 349.8188 156.3111 360.7227] +/Subtype /Link +/A << /S /GoTo /D (page.88) >> +>> endobj +5606 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [180.311 338.3748 192.2662 348.5614] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5607 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [177.5114 326.2135 189.4666 336.4002] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5608 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [197.4366 314.0522 209.3917 324.2389] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5609 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.9782 301.8909 224.9333 312.0776] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5610 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [199.8175 289.7296 211.7727 299.9163] +/Subtype /Link +/A << /S /GoTo /D (page.85) >> +>> endobj +5611 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.3418 277.5683 237.297 287.755] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [154.0895 265.407 166.0446 275.5937] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [188.261 253.2457 200.2162 263.4324] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5614 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [157.0877 240.3672 169.0429 251.2711] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5615 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [189.1772 228.2059 201.1324 239.1098] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5616 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [178.129 216.7619 190.0842 226.9485] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5617 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [238.881 204.6006 250.8362 214.7872] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5618 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [153.2028 192.4393 165.158 202.6259] +/Subtype /Link +/A << /S /GoTo /D (page.86) >> +>> endobj +5619 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [191.947 179.5607 203.9021 190.4647] +/Subtype /Link +/A << /S /GoTo /D (page.88) >> +>> endobj +5620 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [220.739 168.1167 232.6941 178.3034] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5621 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [181.2077 155.9554 193.1629 166.1421] +/Subtype /Link +/A << /S /GoTo /D (page.87) >> +>> endobj +5622 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.2346 130.9155 191.1898 141.8195] +/Subtype /Link +/A << /S /GoTo /D (page.89) >> +>> endobj +5623 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [155.6932 118.7543 172.6297 129.6582] +/Subtype /Link +/A << /S /GoTo /D (page.196) >> +>> endobj +5624 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [236.3796 93.9122 248.3347 104.0989] +/Subtype /Link +/A << /S /GoTo /D (page.61) >> +>> endobj +5625 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.106 727.5361 370.0425 737.7228] +/Subtype /Link +/A << /S /GoTo /D (page.114) >> +>> endobj +5626 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [355.1585 715.581 372.095 725.7676] +/Subtype /Link +/A << /S /GoTo /D (page.120) >> +>> endobj +5627 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [403.9849 691.6706 420.9214 701.8573] +/Subtype /Link +/A << /S /GoTo /D (page.115) >> +>> endobj +5628 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [399.5614 679.7155 416.4979 689.9021] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5629 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [414.4954 667.7603 431.4319 677.947] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5630 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [420.5824 655.8051 437.5189 665.9918] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5631 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [408.4181 643.85 425.3546 654.0366] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5632 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [386.2814 631.1775 403.2179 642.0815] +/Subtype /Link +/A << /S /GoTo /D (page.117) >> +>> endobj +5633 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [412.2935 619.9396 429.23 630.1263] +/Subtype /Link +/A << /S /GoTo /D (page.117) >> +>> endobj +5634 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.9572 607.2672 430.8937 618.1711] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5635 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [390.1568 595.312 407.0933 606.2159] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5636 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [409.5338 584.0741 426.4703 594.2608] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5637 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 560.1638 386.0624 570.3504] +/Subtype /Link +/A << /S /GoTo /D (page.115) >> +>> endobj +5638 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 536.2535 386.0624 546.4401] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5639 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 512.3431 386.0624 522.5298] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5640 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 488.4328 386.0624 498.6194] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5641 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 464.5224 386.0624 474.7091] +/Subtype /Link +/A << /S /GoTo /D (page.116) >> +>> endobj +5642 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 440.6121 386.0624 450.7988] +/Subtype /Link +/A << /S /GoTo /D (page.117) >> +>> endobj +5643 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 416.7018 386.0624 426.8884] +/Subtype /Link +/A << /S /GoTo /D (page.117) >> +>> endobj +5644 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 392.7914 386.0624 402.9781] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5645 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 368.8811 386.0624 379.0678] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5646 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [372.443 356.9259 389.3795 367.1126] +/Subtype /Link +/A << /S /GoTo /D (page.145) >> +>> endobj +5647 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [369.1259 333.0156 386.0624 343.2022] +/Subtype /Link +/A << /S /GoTo /D (page.118) >> +>> endobj +5577 0 obj << +/D [5575 0 R /XYZ 90 757.9346 null] +>> endobj +5574 0 obj << +/Font << /F29 499 0 R /F23 482 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +4977 0 obj +[474 0 R /Fit] +endobj +4919 0 obj +[474 0 R /Fit] +endobj +4902 0 obj +[474 0 R /Fit] +endobj +4878 0 obj +[474 0 R /Fit] +endobj +4857 0 obj +[474 0 R /Fit] +endobj +4670 0 obj +[474 0 R /Fit] +endobj +4576 0 obj +[474 0 R /Fit] +endobj +4531 0 obj +[474 0 R /Fit] +endobj +4521 0 obj +[474 0 R /Fit] +endobj +4495 0 obj +[474 0 R /Fit] +endobj +4466 0 obj +[474 0 R /Fit] +endobj +4447 0 obj +[474 0 R /Fit] +endobj +4403 0 obj +[474 0 R /Fit] +endobj +4354 0 obj +[474 0 R /Fit] +endobj +4324 0 obj +[474 0 R /Fit] +endobj +4316 0 obj +[474 0 R /Fit] +endobj +4299 0 obj +[474 0 R /Fit] +endobj +4282 0 obj +[474 0 R /Fit] +endobj +4258 0 obj +[474 0 R /Fit] +endobj +4240 0 obj +[474 0 R /Fit] +endobj +4219 0 obj +[474 0 R /Fit] +endobj +4205 0 obj +[474 0 R /Fit] +endobj +4182 0 obj +[474 0 R /Fit] +endobj +4150 0 obj +[474 0 R /Fit] +endobj +4123 0 obj +[474 0 R /Fit] +endobj +4104 0 obj +[474 0 R /Fit] +endobj +4075 0 obj +[474 0 R /Fit] +endobj +4059 0 obj +[474 0 R /Fit] +endobj +4037 0 obj +[474 0 R /Fit] +endobj +4017 0 obj +[474 0 R /Fit] +endobj +3985 0 obj +[474 0 R /Fit] +endobj +3956 0 obj +[474 0 R /Fit] +endobj +3905 0 obj +[474 0 R /Fit] +endobj +3890 0 obj +[474 0 R /Fit] +endobj +3700 0 obj +[474 0 R /Fit] +endobj +3699 0 obj +[474 0 R /Fit] +endobj +3698 0 obj +[474 0 R /Fit] +endobj +3697 0 obj +[474 0 R /Fit] +endobj +3696 0 obj +[474 0 R /Fit] +endobj +3666 0 obj +[474 0 R /Fit] +endobj +3665 0 obj +[474 0 R /Fit] +endobj +3664 0 obj +[474 0 R /Fit] +endobj +3663 0 obj +[474 0 R /Fit] +endobj +3662 0 obj +[474 0 R /Fit] +endobj +3661 0 obj +[474 0 R /Fit] +endobj +3660 0 obj +[474 0 R /Fit] +endobj +3659 0 obj +[474 0 R /Fit] +endobj +3658 0 obj +[474 0 R /Fit] +endobj +3657 0 obj +[474 0 R /Fit] +endobj +5648 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] +>> endobj +1228 0 obj << +/Length1 1642 +/Length2 9543 +/Length3 532 +/Length 10417 +/Filter /FlateDecode +>> +stream +x陧teT滍�%�嵒换K朽惁粊倚�4竰偦嘆pw 偦OpK�0潲孳s讬��=縡M鰖熩U华瀅o�0��(�a�U� 扜�梍� u秛G罍ua�<:0T t<`"�,,Jp 吂(�I�  P唨倐 \�陶 祑@貚 L8父��i磅��墍诨X^< N0Wg� 騺饪h���� PzΑ�`W�5ˋ\ 饑&糗m潬 �6qA@8v08篱�sC�磫鄛郣@��+}儀� � n�+� E �P�tA>��簚溰� +x佰窿*�{餻~�若`$嚭"Y鯏U���D崁>�樰�'r�右_���B]$��'�-�"\潃^�萛嵝渴pG@]��Y7�铝N鈦鎭睃砄��桕赇鮓4�/���奃@滌xqr倫鬼�.竱鍱门���vw����uA�f嗐� 驸�C靝鵷a葒���炇��>�� �[塞?鱛5鶲��魗⺈jUw'']狊�g��x�5m罒e泐 o牋�#� u蝥痓�折騱褗0'鹂b�+肛?# �+舴奝厇B纙P$�`tz父快�.`� �y粆忡�倘 +rt勅�� 彬\铖>囚~国渐qV?Ht偯W彄&<繞鄒<$-p2懷�9,湢�!馸T讅濫-臝氲�狐礋估南軣磼橃Z�>?梞貺檃y3NQ飼賹U�喨1}�&痞�9�:� n瞢�PG裍Kb梖年~M巾{K$��: 泴0�!�j燠�*�2�,�6^ qL�荚B�甚>蕞;7!u夳鈎瓃鑟籗���7ML極霟h腥NAQ"﹚觖畗)铺套1百 冕釓處敼�1W 鐿鐩�勥�A)�hA{嬥鯵+(R� GB9sR钠'&粙尌U7H?^O�27�6域�%*G彻煵縅堏&JD 跊E鮝宏嵡� +S鷻毵)[�*持(AB緄侥壗'�#莚RmB[罁驚6媳甇件鰿g楎0仓�軇pWb袶譍�?N� _”C@qR襙P氇祇5M�$`C瀐rA駸始6 擄滤飻|J�<茺[�8J 財{匩�'2閝G蝨糹�?^o憬�4v4^琋恥5觤铔笺Z笰鴆懼s緵6�!�"B漤,r0A紪�g_@�?�<賫2腥逿m摶攍凿勏柏z&i��黏�2烢嬡��>輟C�)籂轊舯樯Q讕甐Q+稇L��碑)�贫-�"[|B�G�&~﹙刦_琦}苖V鮁瑖坘桭嬏?"胝狒�7訯V 翯�8=V?B&,'竰谝t#�榹*鴈i芶+= 恫忟"籔>覧桎b�P2� +姓鍽�1j匸b掶N氙钙b骴銷鞌昱隙l衚3�-贍豍轎欴 l])H戃f`閺勯繻�4V{臞蠈%59肮搖^敖鼭╅ A粸�1w篾虙龃娆\爨5 S明繵弴:.+C颇 躾巶@I緫*(諐m(羡琁C烫 佲�&-脦嵹湵詥渢诹欠|磗兽c鵽�-XZ巢W|c叼觔M+?�-QM鉟�1/�(靷s蜈T>HiN:W鯽祁�x髅� +岋qv�.=W楙MJ~�xa�:芊0� 螙.鵨rH5曰倅錖l� [杛xzO.�:讉渴姕El瞂i埾b�侟�O>8緀a鶜欚滔啙鞱齽o瓮n2�>R;�*贝璪鯅 8��fj鱃,鲢稏T坛�v鴕昔 ;Ah�;�'S獞�2銩�"TO� �/瞑艍(�,�>Q;�6d+ +J U�莟:朓#仄鶇-姓勷涛辆|;");!�^巟�� Z� +: +v +z�'畊D轢�1� +璹'lw遌轩h4T)&巓��9/体疑=礡T�閧讎]驥朵g1:壘u17磭� tРn询�!4痖�&v氧-僮3哖 镺{逅pㄏX6┹寧曌�輩個蓜�迷X;G迓x瓪w�E`桊4蚖L而� 溠锰� $局婏6�%S秺F 孵� 趧蜍zR0��# ]o&�KU黚�� +[甦銋� 樧 闘呃嗍板網睲锍溷瞯#鵢[i5 >嶋榭4 �芢��*N踂��=岱癳モ(珍掌l� 瀪竪�%迩煂泇湵Y�O|�鰝M��$碙ce�<揶勤1D:<{y 鳆l)&D貯垃0礍.lF围啕�;汌�醁�%��!�0夥>{侓?oehqc鲈hB裴棑明鯩Ky呺kg崶彙�5 �k� F霉銂貌膫)犚g砮�嵖�'Y<竰y$膵8;漌麕&�f汞 wL�|肈膦詿鵽Cd阍8l�;+钀癑oI/ぐ.k�霰霱�4I�;獤e权络q醛錪咋M/��/邑�/玐'�-輰�&髱聀霏�&鰰� �$G娓f( +稲m敕狕�4W幀貀 +笳]~�;开�/�(32u� 裶徔o}�B膬_#玅�5l钺决UF�翶Q殽儆喥Se~輓谇離峚J�/萐乩x毉猠�*N3�,畑逹x盻痃}詙s=t辋攍�>绹荭g#ze⿸�F暗駧鮁�5鶴U鲭恞瑤r&g�/i=�3h捕z�7�4�輜榵鞌 X迸梧畎GU軗竣蓴▉U櫖煚 骃礥�'鈝T灔富�篜>鸎NI黧痟C%> hC眹5�n {6x� K+礫�2蒦曌赐椧鷵�(�6|>懂�馻\c袽�<圭団yx=�&S9�>�蜑�兵jT滬宊Xq锰老貰蟄 雭a谯坐豄$騰誻Xn"怨+ 憷熷E*瞥悆勩黧嚧庿t\嵸\颞�呾翅!e躗熫嬿� C�║c扻莮9mZ + 2粒}奒�8z� k�l�73_Y�9鶌O[=�9屪->?%热裤>��&[頹髯�.#5�<枃�gte簭戻肟\eU塋j氺/开濼(zV琁�/3蟐$|焴�8в&\恛鈋F锬伬s�8;q競︿裀�S 齒端Mi�讋韊S呃�pal跉cB蓒�,se鑹瀼o睍呮Z貁�8<�0颸xg� +(處陿i�鰳�$屘茩�63囔�!C使噓鍴9藦pT�v愑牽*� :�$/�6R謖 礡Z3內肚狋亂良a蓫"/嵉N捈,�.�*/��庱"�W4歰2癀踔e -�'�0髧{俏骎嫜蜁n/靆lW峖櫅藮�(堵檄� 竈�4;�囅�(��窄鑟�:溵�2曭鍂眧q]x%`吡廨/{5昌%釜_"q蓇�蘃:n�&f!c璧M祜S]�!鎒K嬤6 �1棑厃薲i#簡覛燧�5驻鞝tr酠s隘�)邤銕 <鼵0孍�5_帊r斱R寣蔠Q笙P(5\L败�uEU3⺗S擏NUPY,礠衂U|�,=癯_?6哿�恴� WFXR帏J[﨧^{�~|z匣_慨江穝�2寙e湾0_g覉n��坪`j蓁Bq>宍 7�礅��'8K�G疡Lx耬�魜[H��9� �6汞涏$L8/Q�&壮r血鴅$s鉐誹/紸�:`P&bT韮膋镣9i慘急耻~C菌Vw邸 钿茺鏁魷褪=斴"c{.)��2G圫=w�$�絎俣#f枵OOfZ^�(G輐颔qd$耰龙Y蜹碉輨h&Y�!倖@昈hC憓譌哝tz^O �k|扉费v!w蕙}坓昈笚鵸Ti︺[魳痥&&鎙'@喹s8嬅�塼+橆N緬�$�棺3 7濓�墟徲�/?a棪 Z�綇�券龢}DUo穼Pr閾瘧}?ˉr晟乙╨ � 送)$睞E癿豤紶OH矟M�2l 6)氙瀸敱�"鶪,�^皁�4皗脻�"C�`孏矔[� 锅诂- +m嬒z`�㧟鍲緵W?劓t8Fd嘲Q缓粿#鬍ru� he_H僬硢�(aa弒 G俖=am#;�竭リ疵䲣${<\( `�陷��櫽曠~坾O蠾�>u<р 噡櫀`iz鍌xL�绂n�蟃疊吲G⒓4呃di虤@祲灴:熳z_{�"t奺}]覔颲�螐-茝 �� 佷犴酡飞 z脡28p缘霧�*沭臀礼�/S嵞偈z�*褌p窆��%.��懖c-燸趕I=蜺�=I詀�3嗪� 洨}�,uH._崨熱樤q_Crr�茏纯�&脿觓櫷檉稣緹X獭翞{晹Tj�>t%Hw哹 +@绛L&菌� 1b攰JgK.溤K璸�U╦RHM枩濼鰊鷰螶隗�+}�KM2榊�楔D悗�-觚騥巁膏�"�.S厾�>賨婒甌R穹諒S偈.�鯠�&�GOgB 孏枡�9`伃泩雁洬��'[|$攄@餹y陚(盐吃聧区W灱m彎�;n蹶%蕕LKM_n蒧� p铒q"b��~鉭2P罰弚���'佉傞^9VzM�r. w碶3摩��軈梶J蘼跪壃�8)lca檓c�1裠調撯伫 煇xm頚I6Wb�薐眀� 賬淬p恒�-炋+�;m� +iK歰瑹Jb�1|设@皚vP嚃繛敫�,鱹3�<) �<�+p�0Y勼bB@棗(pH绋頹k� 怲�,b�#L]Q萐.3o镆M饴�5朕+z盕虣}鵌玚鳰�7审`�7鲞�W� +鄄A5Z>:羙∴E蓖�/o}诫FLO侯&~櫆z餁�9)噦穿60嗱��畠H$�#鍴啣I3(噂OP熓(腻�5C�.藮轼d鳲}燁x^�NE螓� +W摎醣藜錨_﨑o爸瀩� ,q8$<妀f晪Xm`�嚠睗��gr墴臓];�?.鲈Z○wl'杘qM暖�<訯呥狠�'YEI�v�#�4| 諄糫�'騘S欪瓖�0b;;遯p3�聵釚 �/赢�&� �=瘂屙垳4耩7�!\H^.斥苫^鸑ㄅ�#揶槃簿癇F3鯐-壺�9鷊�k�.� 鸫>靆J濏=鍢Z�;⒐!�,N朶H-� 潮�$ī�_胕蒝圃嫱笤印晱誒`O盱&A�擙�~糊S�襁!撺R獓Pk巸``歃�)<颣謨z\砈>扫Y盅磺嗯㏎?u!c斳�>p8戱Z�{� �/跊醸苣渳臕嗣�掐怊娝踜I;伡a瘇.v1遟n趆E`z黺z栈<蠟粖X`!�嗉暑x鯝僐l剌h欶~腩&号厩6 +�晰霛B��0氺蠍�籫顸�;蟗r忤� 鋾�?鵽�&\jズ碑XIb4埑{咍裓E讆顊V~�(Y[3�/�%C{\�"~B �@敹逻)猋鈭�榩,T隮剥泰剹蔓vDq>hu镖傦鑌轘槄�霩汳��yQ輔劬購�/躊嵮(里j[秦靤y�'羙@沓y�4]n鞉雳惏矓(哴燜u�<劰�姴c塣"j\ R朮�"7�$�0拾杨�,軹� 觗趗2*_"蜑_K-栙闠 骮祔錇j`孾n~瑗緕~XK`8p�`荸芔韵`'�,�+2竳y5茉珔稚-帄餏綨tM5辒嶒疋屇宷蠸l矺轷錭Vn� �弲鲒U騘.#缉璾cr�满4 鋘很<匩〖<5耗�*臯償B怏碣�w� 钬>1j$当@e振M朓妱Ж痲e檴8v#(祣�)tO� ?KV鏅曭{溝 cL�t v湞-咲涱�x�.d奔滟wl霅74H]軅Om艡圅 +� 蹢暱蚗K� 璺uv鼭粩d浰�x +�坓雽k橢S�*�4+d痧黸┏鈟粏怔蹚惴;ef乚應�>WhY汃3py汒冡M坑坓捱渆[X灲 +現�#蚫[B靺 /m袂�0耵[袈M/x簯箝W$�)蛠瀪炳l`Tse&綏�9戴gC澻炯>攦 礛0筜谱笓偛櫡�;N�8鐼IJs�( (tfL咵hK D蛰L烯鸿戛S O僄%�D:犎N�遇o禃罶*CO齘翕,紮pV屼/U诇ㄟ宅Q�墁飐镍軏 颊�3妔6碔縥w蘀逖v愍�#靁�9箶源饦�<\1�矓�#}sHP=p潻游蟅餮'繥� hZ!麏蠾k爀$嘟@巊p�4I炚Y靂锓W遭A�;經b8Lb撄W剾嬅�1U�'醋随�/j橤毭�w,x%784/T�>@歋殩@n苨([}X乶n僧窄犾宯g崣薊>�褷#�*扢渓譌(�4穖义NG�乚罵痸&'H� l淨厞肠⑤I=炰m�[t邷埗L�=燹[ 㖞tP!榱#g齀殱泥)酥9�#7�#�呵&_鸲繪C瘚阋2�漁I诖痔#>荰顧�9貔�,錙_出磁 9婥賍Y-�]鼽H�5f'喜蝆i釠�,�?@图謏�c璔楼荪賯游挅y軡"嫐摒0>�-怿:O峐耶F$H� 璡A憑汩隗/萔Jg\稏(釱逛儏jG鳈戴獻剕'髠�/S>_匣洐怽蒵C單崛l陨S6 ,筠�窻查#2�<-NW宱Mr^鍀航岅m�PI嫔U孮"~G或}槕鱡憅儝q澉垌`S凶諽YE擁U髕厃� G醂椉\k繂葔惝琽譋inY�,!駓骵X炎r/koM0Ga�狪E�2X粩� +AM�,p}jo- +?J�5窷梘验i�璫%葄cA=�=rO�+n囑嫬m鳗匀k宭X曔e�簰燜=六`瘱E}帣{襕迵�<織銐;$鉕搓瓻盷GMk]輣厜�1P箄款N�)饱诃}堯ui齿簶[釅尔℃��+賸漂(苚涱匙E蚟彸 +>-$0釻(�.臟裃燈a袁_G咹�%�0J愿j送+釫祬��*I�饇4钏X2J秚c髡膳8胈瓏囼3�9s�?\{<)鎑鷟cL训$┎$挻馠趫縈匨牐�榤� %镙�=os杌糶/鈈╪~RM硽3貤�跟駎儮隭,K潚Y�6溣u组�嬿曠��糎S芺V陸をB�!�6r媲d濡躕�64c� 誩 �'i鬱-嗴谞辋j吿槎-瀠铵贮�2欫迵�洯�3�影M�4沁�+XiI6绰:褻 瑨巷酁9c/`@L瓎蒍豅�#66�举吝tg@v滜|C穏遅k濭騸.=j栳 5/栏5#�4a#b噹箄�3�9啓勦c醾{Jn-v,~Y抷^/^[卆t餋燍觕�;fD�{赿(鶜m愽辣{偌髝涖謹zb瑩1鯉�3偩SA鲋椋�2>嶸羐�3陸(� �ゼ�夃 斥鱴�,簱e舢径k邩j鱜苀Q>Pa7溩��孳�5岢Se櫭l)6怫亿屓騜\級hッN莍憼 厥W藇搏炅螆F訨堁H喺惭 O宦qˇ竺�J�5l.4� nOL�!卒�'絏宷l�?Lj�/Ab讈榝"I〣钵[.奜}h職Q':�,宔沛圮�垿}~3漝� 瞥9铟柣 "{,�i鴕會v跻B0=n柢%�*&晊╔v��6�紭9|q厭掫4DデE匃8∧飌ㄕ篇D�ФxJ(8p0=唤V� 矛'宙vo鰹� 橹k8c\9ォ.� 氲恚s斥閥啱坵}�覴秺qY2国Mm8惙I錄2塽骅漓V� �)!�~T徫��+颙H霫l紊F緄�>~[鹳W婢潻D慣h啥z瘚/bC�#饇枣楆6ウ艞O+�彻~�*汴h:A庈鰞�,縹|~}盼;+螟u.p�d�"瞏嘔遃騧{6濯倆睽�伭N,�鬣 惍�#倽{7崱氬�Wt5壇脛;捃塴�2薾mx�!蛑MF熉希�矱葏 �$n�9協娻yca#1菦塽顩 鶹t漖� +斦髄軄髠�9佻+f尚u#鶴c啢O曈穠d蘶辽.捲�< CK婻3侌銜訊� ブ;w�"扑迧蟅V|� �#漑�?鼷傋瘀|肢�,d:羪蟁膵�� 歲臞钗芷雠]o艝耆筆朕)=y醀��'_踠稥a忧嗀暴J師�'V菀I嬈韝+萢{�)懿般t�7眫<罆I6綐_榮陆颩鲐i鑍� :2 翷*僎8L;萑�EK蔑�/弎� 灘l尘w@" ,鐇蓍o臷�;_�(祚@�:� ��0莸l瓦镤荗轈}C吜涭焐←.昖U�矽嵞h鲇u[镄�&惿� +煍拣kFx�畳�2�&?�6}欕盾W鯟�Yl.揶醉NU外y夳e硲�靰:肶`5;-齡Wc �/�.裑贠x征防鴫遾񋃔eyUG嶿爻㎜赀泗k]wkP^�(夭昉�r8.x酎晨h鷊�� 8朗4�S~ +(4 燫�1E〢t;|軸�;匧饄盵猖㈨禃�0推z?6��U憗,�菛诽�,^�7紴2R8?5玏靾靘及�(紽鷨Q姷4曰Js�1 3j�斷SZ徻L┙�dJ]<旞U�7f\消取Bt鼯�!G6輣L#≠5F�%Ar�+轮K欳施;鴻$~彚蔼琕;�F質�4R謩m場F尀畮�:麍丕杤:d銨t黠��7瑤諛 &z鹄橃{鴍>︼`睵^并軐�鹃C絃贅蒺旵;b昵Uj�-�<�{Y憾贵�$�,>魕米処Y昵t�=勔TB灴-U峞 獢�my�4 hD1糴-}硚苁皎崷陵霨-z覛 �6煸彳,蘜`步愨�5冎窏qA�;幫�沍愋i�帯K徴吇浜&j蝷袜j髁 m敘8W瘷TD{艑S摉礒B鎁 wt汁 稻�47艒慚�w �桄cES�+择 �*�4劥樃d蠻'�?曗� �8朷 �-孉殽n蠃F噚鸂,开[瓽盱)_Uq獒Z/p珯'構癡C~膛绾g�5毣�潴���熰� �G聹乸G��{�玡ndstream +endobj +1229 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5648 0 R +/FirstChar 2 +/LastChar 122 +/Widths 5649 0 R +/BaseFont /NUDUEK+NimbusRomNo9L-MediItal +/FontDescriptor 1227 0 R +>> endobj +1227 0 obj << +/Ascent 688 +/CapHeight 688 +/Descent -209 +/FontName /NUDUEK+NimbusRomNo9L-MediItal +/ItalicAngle -15.3 +/StemV 120 +/XHeight 462 +/FontBBox [-200 -324 996 964] +/Flags 4 +/CharSet (/fi/zero/one/two/three/six/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/z) +/FontFile 1228 0 R +>> endobj +5649 0 obj +[556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 500 500 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 0 389 389 278 556 444 0 0 0 389 ] +endobj +1171 0 obj << +/Length1 1647 +/Length2 16082 +/Length3 532 +/Length 16971 +/Filter /FlateDecode +>> +stream +x诂禼x%\�-踲Vl�鄱m踲嵌m砪跱:鲰鼷无�<箸荦c璯�U*妯Y�"#RP�4�72撤s�萗��:+氽寿s尚)櫄籎��㧏l0dd翹.桍v"�.uS�埄1��滥排C秝餿�4穚P�*㏒研玄楀�戠 #�-晚�笝谪;貧诠T65竂��,mL买 +殥r�Jq9U�俯潻舆&\峫,�2柶桅T3{'�涂c{;�Zs���%� 08;�[� 3�06u��8�:賈:;�� 皌�;诠{�睄?涃�� '�笨d +鑫.纹N�.�縔D宁]叀�?節-��{晨�&銎��呆/�/蚠耘幸�郻赆騉.#S�墺硟崱邕���,�U啱偿濝U@ p257t2�1uv﨣髼麩垸�>�[鲉6��姸�椬謄殁ljcF媚�7П诉苕杤0 �虌�=�夞遶W��儡L濥uA��� 者" M祉l<&0 r�.S(�颰����@����G潺�'�阻{��唧�s当�3待;��3�繈菩饂�d�,C'�? 且��jhki泫 +揸��q䎱)硖�*D悄F霄o偿硺〾偉嫳捞墟镥甹gb阣cig鶺�蒿� F��啯XX[埤�劭!S;��廾_蔺�兏尋牏8��a埝薡犸T辅x:�⺈&uY{��<麮%$d�穰cb��1s0䙌��#3�G�1Y中派�犕H先����:辋7Q;c{�鍴倥形滹椠п刎丈榀���;�忬�仼﹪�1腾步1O圲zV咾=f奕攬鯜鐷–Y揓qa@瓆�z�.W暳G](}� 鱓囩夜苗�跹X� Eou�/ U!�y蚎僞|茀z岟廷��;Z艳敘抆�﨤�酝3U塠a閾偀qZcA(嘻 +唙�+�40?!,y笉E瓕 銶攒滳�▽桾N�2觼壳EZcs挖J_o矞)暢霮賺妱v囄 B.sぐ3�/6殈m�1韜┰ Qj勞恮`D\疫(j�/]^e[_)抲mp態Bhy蹅檋攭� 蟋3M脵訿}諹^�褊绵氻琻!\x�t*JC>苞膖gu棕+┻Z返W�C�祘Q��89X嶽批7礎脩LX檗补�:y莦释�騱豢(辩 � 観4O髳~瓳瓐qjT*篺�玕cB濕.蠝 厩�:�0菄鼍y$穳�ご&蹄?1r瓦韋氌8暬昄M裞K>/2u磫e�7 M㑳鈪v筅Ad(戙�8饟A��;!蔙:朏�Z纆氙琋醯嚑浏亂8A,深�1⊙J=�lH?佾X?T]鐝d2Mzz仰~ 諷馶 鱘-耶爖襺近夆2桠\?s鰝_N酺�BR鎩踅舆X$�鍒剘�>e崍dR7]"+�=嶺�8�?$7舜谤F +S紾愾蝼欝空沇p輼洦撎 �/��={C-捫�C⒏懲趷9� +矐鬶�<嗎N,锄,藍鈨�(n�<-仂�"寽�詨鱥f9i^G�#e@p%怣浫({櫋揍烸o�遻dy�*Vq杆I�(h1&n琈aC{+鱶�.繗bTT�|i�敽9槣碎嬪J<諴咮Z}§※ 勱$粞4f烺D�9\<頖摴\韹�敍~{�Q宜顦/�5It*馇蟍*匽礇訵漲��( s9-渦M8! k滌%�*庍�@痯}牖�牁� �2鳎臫廿泹倊YGx搅湕�^菹Jh$瑙M=秴罌8��@竂锧1蟅穄Oh臡�#i�+麼(檖 恤r燃溕XqF鷋�=YY娿H鐥修�!攽L産C&O誳�讅h�*绔琈T鮪� :肺�綏;づ*TA Ec) +�僲鵿h宻脦M鼿魃�癋�+P#;=E@%篝胭珰�;)h:я菖J蜨{�P7乤|zB�硺鍣宒{�)g韍壉qt隟叧俕� \閆 頩饷-(疮ずY�e祃a巓�埝� 呲i杂�臨膝鳥+�8�!種�秏L;c%�9玑乭Τm匄榨h+ f洨f羇塖歶9fP獢T膘J赩籬摵L0崗zh粭�5勑�*�鎩瞿窬埩派'�Z酚{憽h鬰\,�5O鈀:紩�緽F�@�釆曗}5閫崨ヂ�]霝埓*7鰡w@秃�3侲慦m鎲囄dK炡乽鞿�2桾W誎佖7� ;毋缘篡f$?拣;n3�zA趥@�+谆っ�6)軺硃敁$覕灯{倓;潀�U^i鸤��/愹郕#貹Xv-u寭�4詏�(荩擂甶E琵+柧紦@�墀8珱z癇蟒�0f錖8厳yV +m旽糇;V訔9囆�)/脗硘f謍褉�w,N輈,毅賤餲a!�3b@6�3Y�=%餒柦�普2)缣07,]�Q鐛氼�3&L_Z 壭�,�軒�?)R娂莮樐頀蚗-{━##U�6� {]K^葠窌i�砶�;C岀z議m\O稷s 6k魓%纐�=b~,堙'b舆rHb�铛丱偭�,萺堜紶a&$绘3磻2�ov5;%宗餏#x哿�$吀<迢 b僔HL~� 翅翌邀g樟 籴\o4I)髆)�<[x{�0号撙\譼灷!B'{輼� �%裎聅7&妐莁co昩+`f�G;Yf2�F鳻A鰲釷�?秅n!龑Zi�嫫Pj$��8�鴄ゝi壍� 詂緊�'Z@{扸In�!颎屢夘�罐8铞踲M\Ns袦躊/魹呱/鱌�鯗Ka;*F旙Y�)�{菛衈l�t}段}凋O摍.yn�9~�/圖w&襆駕縐孚e 驽6碸哰E�*zd怙_頨BW�?譳龇3/)�wq餌_媘}^Z 煉媶閫�- �玃軕<�寻%Gqq�.魹��"綟嗙峩� ?t賐齭愊黎"�> 啝�\r惶乚�纽��-碭Q粷�?橍IO�,�{咡晨HI鐈鉡 x�?p農n7l{c倩6K!'纖�脱堗�>迹Hx睋a饂耑�.�鷐"緪�5t磭凰�.�誢涋纯式}S颯�璝t�+葭� tjD�)Y闷 ?萌� 襍vA;0��帷褛綑U傑�3N体(譸e N{I猋-×A%R�E冬堛褮粉�/9国8~�rZ}邡桱秝瓔謚⒍驤��AMダ*镙n* +堳阍=�0�0�=F>(詝�6躚佉!碽傋 Dou,拧�$WV&3袹;譌狏麿簰刧�鄤峙_k虫�%~斃5�%j+�'�3�'揪茄r8焊 �)帥堋\0�<塗0弌�ru +N�)纘く�.跤T@诛G虢I#竓曬a譓貔� 擢鞀�% H l?@�饂[U鲽 霔V^5� �昮`纕寁犎�神+4D蟓h虮辉秪�;�憄�(雦玵�8r薹枩煰QI履+*捂 S钣 ;+潨a7(域兗E鵫 + xw﨓涐�凳F�&^,俨殐xhb讫\ 玁3�1@*杹�%@鄭�5嘄摩�撈�.ラbJ陃奪c泡N儖逴尥f5��6c��9〡诨銹 1&昤�麭繁馯x閰$�/姮pw脞J;�謯堳iz1nj�>川hF沴EK圲a甮篾吋F�2\a7b#跠� c�8QUGol� FU墵�2卋0漘仟N5vH=蛑P驝�_w{銰偢讖F!3鷎碴U�﹨奍:!闒U@�>蹒P�Z辌銂纃蟍^0[臨隍{{薢c埨�&F忂趵髗�捳砥蛻vJ囃�;屁譭%0玊跮適`�7擕挣喁長��5镍鲈%t 孤4擎C_润p魽&珖9垍僻孧�寁笃愪�7闦婆闶F梲髼芀欁刟+p�蛳挱礌�8�=l扺LiXt岷*{唴轓sSov�$Q,J� 刁�侣峎Qn-F��裝�魶彽E)蚑�.m=撞 忲~'谤�/鶃藥�槟誜姝� 皶� "佰�寙 +弰BJ栻骯2{e��7痙峈�|�6廂-H�-堂<佌b妏��6�蠷3擸明⿸^?�3�/ ZA掦唡�鮌秬慊V韭苤艛X两蜚黕黺�;脹]砎�+EH矞禮貢 哩�_� � ~e�1Z5吿扦蒊oXr紪犙楐:崉4G�2皑鬨t�;雑3� Ua枼 D 6,由9#�#H^e�螓,哇酖a�聰�訖 {*攁>�S|1I筲2>n┮觘肳xJ涷i�'�'O昨n�齃崷ds畏^;�曶哉`�*菷嬖F嗈:緰+<|H緍y跅dU~�4�9vb 搵y2E壡�潷攐[罱棝jtuj柈�殈桭掌R�嗪彂��潾�浪`很忐劺B�6阽5怹��.7毫轜�/磡69祓緣舥硑盵se[*zw琑龤KD殅喖4○;�宖X�陙�ⅲ%QE簸w-f*!廬葲�7污QJ6ae9,珬廍lA;騡蘎R肥&|wP莅?-v⺮灇ZCLM�?倳QC孌}w��1"� v犝NR瞡tM; ]Xく瑂>在㏕6絙�x笩?S劥f澏�牕J?J�潢簕Q琯熛pY]ea耼O啯蓦u@aR;E[*�嗳cgt e熄嵡檊kNM豍T盰呖 w8,T%d矫扖茰久W� 燂嶨IB义<懯rM+(�2� 宩幋U�� 篙 h�%�4@畫x�3韲�叚慱w �# .?瘎杶�&觎,N�(��糲�霵�>W柂�琊祌<�哩9鑊J枑貔螱!腌K蛥*M荑 f Q闏B疨隩:譁ah� g少�f%Fnb騳q�;�@肾稒(樘�8覢�?A徻oz�饨迧 界af怣凞聢2IJ�$诛L鎝�!�?��盬v偁硚i�$泇嘫$梍龖�+鋈劲熅 +酏繂坿�4gr4e屨幙s薉Q]鴶V蓈 +�&E癐崗頓lij﹦徾VU妩\鉂*硥r桗澕o��蠝狵晪m葜你�' Ni覌厎}奾eRcu�肩厼\� (燩啋砎� 仮z咄qZK评艙仛派� 銶?%-枾駅��筟 铉LJI粦�n{`轲珊~�3冾�-鰓q�-�8;哉k蘍'N#�6l!�!c�%�1G鰨钵b嫖&榰濷 #3a �,o孙2�)k翙犜o改 O╋━鹏呋Z�d咈�mbT瓡X‰�; � +_刳缷箂瑾3珤B$x`邝顦篼�+_邒b^呥u�猹G/篋JZバTH爒t|hiЦ纑涗�Vる]嫀zk评�/午~0軋鍻q鵈艐雖k蓞YO柾2@Ba吉�*�荿�.閴敤rnC^诓�r怇^;澠�*�Lk#c堋翋芮8=?OH逃sE趎ト瓛栥ZΒ蠮掬s竷韐d�)I涵�OfV汙际T繦l嶥睤k顽�/唥禽;昛�� 嫝氻W0"[姶�6O16cV篏坫氽5~?K閬�">r鉨/PXU鄨説n╣�?S�(�*�噛u^ �UH �歮I垘 桱 =^<�9後�#B1y>竆Qj;�s�o何叻6抲M$�7e哅�0GY僶>晶� 汍繬@f>&纀p磠珂载SF��$�2珍崿恣譖wYHAYC◥w柵侎~g� *媀寃劜b�A+^6B%�.礕販餼檣�&M鏴婲?+{+�#r逪驱�67MS 喣煈�'谡Z)�)�䙌蟃9(ev#`z佇sP=嫄蒢(j}'縃iZ/蟸�7�p交s嵏]�℃>顫T4�0SQ香�! 6蔽罠閬P�8,霕'▕d�&~':诛霃骓C鞦飜� �!鬽溲咗�s邅gKh贱x﨔t40#鮳� +嵫&聗� �吰B>D�#潮'V晊曃k ,ê*�§涳葞(��%A勛m7�釧u蘨X溾I.鈠L5�f忈UU愠�z房 旭勏蠊稺词�5皦燕�辧j�憁筱轒禘ㄝ汍絻\0樭壢K\津>祲╇5暊冬塗QLo搖c5嫌咍u�-箌杴�;v�-永6?1翩﨟� q陁妓O喥�3榝黬簹粚珇p峳S疠M�H0;~��)注鑑!�>〩�>H匛瑌.獆狖輌 當�& z鶮C�4O靃�o(尝�#�寲WB縢襨-( 萧�9坊I浼x$�2婴柛��*x饽Js��畧ⅴ綶�?b嶷U(擇些芗GI8绸饆E孷艤^k眆∩硂Pe�P畝M3� +�,,冴嫠佪 �T順�<�;墸烃]FJ�$Nf亁}窊絒m~鮴邂畺%o天H^诡摏怊陴&翆q軁K�&H 龛鴷x�7�fK絳趒骳/O%鋋|8v!F,�"'鴗��2槩礎A稆�<&N敏徠&{;v!讬'@7 +�.i賤柁{秉X廩�o榮孴省w9萎*�-爿烏� l�+�覿嗹夥脄鰊檖幰/洕7⑹鎩� め�8稜�7樀u浐a沔_ b@hv�/瑹溍V賒G�+]油裐�0汞頺'絁骏舝+諉萛/噚x1硱6]祤o~� +UyOj骐塇e諏ws�昼琲齜-� e漱zq_帠曻� C+f]9)叨釼宎bqtfEg茅蘾@耮枖>-�(R蚵齔白e{ �=q� q裝Z瓸釤�,m鳖XX,Nt鬻$�/傁 �6i霦1%舐蘳扅�0惝s嘗豾&9躨L蚔CN蛕x綹竺槾< �$稈$d�≡灃潘鎷ZE �"z鬠� +F芲軙� 鲘=WE{�%韐味*碋覫鵴膬т;屴so粻 跩B(8� +&〤q垟K%R尗;亖遗�L�({墵�?暳}ヮ譁}<贾u-:懬v篈[�9Ew慚(鶁HX�)I�&� 3"牲�饢紺[�'x� 糌架缂矼"@r� 峼栱_蓐�?羋份�2陎 e +;秳9}骍慒囁)奩u"t#傾坚oMa�{v`Z疅趯b铪贻繶�7蹹�?薿P*�遲g塤釽伨煩薊莠� DyHXW魥�%�7�澐韥�&閴tvq開9�>跗 1 . @脠唱瓒枤攁?ayF>�v朹yR芴�螹#�vs闺艭I/$@瘑鯙�*蝬鹽銒`X啎]d}葿z瀪�)�'僱鼼笡j姵TQ踟0 �許4J'b=P<@Za:坯h�63Y篥擋Kb�垩|鞉P请u|髋跀慫񥥊�)n�垅"9揅W緆瘫鏔X�,|{胫I�/錇c㑇鳦5鴠麤曇俸芋 +趨w�6栀楤�2晆飫怆睱:f嫰[圚梬革I,i谎賻Cw~刨蝒 +祬搞KE禭蔴�wg楝茙扥p�$襃'x镂�鯫搏�=終5加|逽�4T8�9|景�%X幷�1�"玗哕x襃櫣嶗�>+陌盥[滜jN[啿 痼)j�:�嗮魶税kg!铺琉��D[C鎌渼骃秪陓>隙hl�%姾��3[V棅�!�E挦T.�=[靾P��鲔D儯9鞸哕滲Oap��牻怸苃0烢ng�堏Q�珱盺q鎂�2絞鵵╭*Y誁胢鹼{半吀4}貌龙&綵7芉 }SP 赝W@E飤z蓎djn绡秺�,Vg�=k�6�)�;墨]禉}余霸桱�'nF剑�dT-詁Y� 瑯摖墊A�斓� 层鋱n(/勵Tuhgb葍嶈b`r2?餏xI� �F�<磡�锤�46楨o[g8q蓻9eN� 仝�'宅犘磦�IB1W|�穛�,位鏼濋3�&吋I�聻R枉�;�$睓煁齽�餫�+vk怳=uz^裉\皪孟$�+珻=跿?墉5|渴�婮Ss|苅考m唧�cB揗椇�L[D瀻�#1�&θ�.@动DK.滹矶{�6娃鹸A#oJ嚐閁+阩芵Aj鎮榢%湞}�*3}羔闩!氆`"&襫白硐癗`ニ条a%m凡�0 矻Ж楛H��z柟$旳�,DC盰qB杯蝾 �3悀烊佄/諉}浐竍姢R�&�8曾纚哜�/;>廕背1缉+嚸�(<LbG撄>乫紬ME!7�罃骙,[緘£8茵▽劆鰠陆王多F� � W灘2"狗u � ~膴儺豮�#y� K_M驞y煰枡Mu冟鐴B邹�;BZ>G烔艂黅1h8瓐詹誸�;k驣�蔎熞�7Q[0�!�9|I籙Tm嚥,荫灋陚宑来hH陑�$奓p哰鄢咡n殺焢 筳=哲 劑措骚o汉$�F虧-L篾婄足t^Xq�,J� [樃:䶮pVs掃蠖殲��'_gn輁$メ $禎Y乼z�琢泶Xn卉]傋瑴皹樃w�傽#2,s@N|侲'OT璇頲%MM�3巜8爡韡釀 +因S- 道J +摘�**�#遗�i鹱^J'&熪}G鍨功R瘪3�鳑剸倫-8橜}嗎N!忍0.佲"┚b飬by緽宧�9y惊懤�; f��&0=��)>!諡泍�W,!Vs�Fb醹 pK>阗&憑;^2k^荋e鲘$割稱 %� i礐鴞髻翗巴镵滖� ?騥�<狀燊>擽�2��-�4矬�7萪[煏変Ii�腍彺�偁侕D~�/O缘瑮� 巡俱 +}Lk鑢<騜d斷絈E[3�脰空`鳻Y>涠+W橭Q3n魂珴3椊a膒X劽L�^灖� 7胶91c +>鵯��(飛綦4!駝zQ耮£赝M蜱騇LJg 狄JV鈣bD"骉�mJ絽鍽_%軓槜勈=5髷,⒒�<4ej惨C�C'黰-2z�$坄逘 馶FB;�6=鑛埤J�=�侐"眓>嫂乏jW\蔻铤昡@�/郿坣%pH^1 pH��蕗飩s^诿�%h;湩�A�%��G8 躓罀�斲求瓖擄都グ旧�>;灤攔� +菙d梂,g,t俯看�薏鞎�46愳�d&耟fVB及┄)wI�3欜�4;沂>琱燛^uvxYsh�2 }�G2Y戫T嚉建舣潸讙j~扠莌�n僖搊nh+n询�|俳や,サdd塥va蚶^a��+琐詜�嵴掓乬XI姈E訠阼1┙劻鬲蚣Si{�&AE�*%mS鋂!湏摍 C穮?`�奕�蕻G3]o媬镢$;胯5醵!9#�'��;!藆rk�2k���:h�7 ︷tE� 0Д�羝恤佥辺嚲�:� "釤J�#�+]聢6[)�&磜:厞伜宰�0愦)C�熔壓吣KN[鐎莂侂M鄄�?��_孋雯X鋺x^\钮彆娷>堟阊溇=捋[T哋;闽絆橓湛颀卢祉袗�氩�坾J嬙 `缍`鯟��"�#6/8vK�=�(,蝈祜茷F騆揥xIA(搉項� f�虒Jy�3N'xuD脀�脚o�7�,e哏+儓郡�9�湕騙D乾慛e夑j0蜶�:攇2刬/姑&鰇D誢K騆 e儿菿�<S殶黰捾籃c鄝枔囬 ㄆa罌¤鷐3��1泛q\o簿�/'>稦1薀5)@k绶�更9w2?�.~{紀汱熟晭+s祉遑冕$靲旊.菬)旓猱!\� 遊佯~ 悧挟n<�$A2帗=雹 驩Y��"br��=仌X疐�升+}6擏轟蔵蠿暂襺O�y|鎧叅�/柄$'慭y馦�7m�d愗鉄掮塆Q糢n璨臎Y哵鰿!薰绩���1mC2�{彣�*匞�7磧徠仑駜櫄芗j .�?bz/{癟檻o絓II|�0’册��庳TlWm9�%鏍Pw-�7~尒N.涀l%~赝镕箴�0Z槌燊騹潻埠覹甆蔋�仈|狭1O黶_i偊{魂黗4うLM�3+�1^�"�CuXR鲙`擙z�YU币y嫾U2還怤羛$�4z鈟呚�瓧d默墸\g珖_刀3M>9�?5�*�{翱|談�,X�(囇Ⅺ3兀旽l幛,v贼Kz� +竽�A"紡璸票�&�-乳礠愿{瀭�\嗍&8Y晖倎M膖�+譍� 覞淞^(v葳锴x2!摜Wz�+v"D駭n黖盲暡p�8啙o懳硪扒kz傏灣?皖愒⺶]�;y筡孌'X瞍\暜犦峙pp鏩dCti谆壐�a4屝(�$旽-�䦟硿{E��螻�1ad/�$1}墄���� 诩蹯↙燨Bd`馷L5[澞Id憁弲an膖#鄳Q�荶�肒f誚�)=na僒鱛 g�!p荘r�#�'咳�\锋揹x5�/B�鋡4�絞青�#I�J6'姄=蚈觽感� =c{� �0a皃�9z灌}磵S�6<� H椴0�dX哶筫�9袬孙:'唑憍27礜揆濈P_鷸<6%EXIiK汸)Ux,M�?<3镻q俲d� 蜲姽星u懬i � US跷疷V紁鲍擪�):ㄞr}):QW 禩�r‖兲玆&�)0$驦髾謵艚抒�!0椪鈲ym v楄犃榪改]鴼xi2銳癥拌|0M萴D3J<�I莗赊㖞 b'T}1渨博)/酙零M� 弾梊�;魺�(-�.!譠 +.zo暤斝襢妶�璦 埏嘲腆R�瀦K� 檵a�'! v� 銨Q睼寽ew寕竹"犠�&腓巶u�"���6堞_D�$8勜�#O┹�ew^%P�O`QI6倔cfS 顓妭毧栫珑做�髜v樧踝�L十@M=岮4毝穹2独NF!-�y$<穷卼洓睲-�4孤迎甪�y?眥瘵敡|]út� 錿m + sBW劻軜顖�$(m��虤M俶��d/�塴鳇嘂[�>濲褩楣慧�\ �2m�瀾 +`{r鞀��蛓賩y鶆Q�7扤�伍_�&I蛷Wu眨��&-N�7诟艒 姘梬8KCg 羢鑶f婾剄w"Y鴻築詊�<宽�-�/D2J�?s#$裴皒盍7R樭纀a蕏�' 眲�3T艊羋z�>t黊吏alY(�<�,埸倚�)|將�膵氱g蜠 +{�.絚琀鹘傈 摎忸风>j輁b喘$Q瞁 I� �lW噗J猩翼a鸓� 緾è[鷬醘k靸揩?貂e奠%;蝥H杏V桡沰t�"4!�檚稚�/椃�嵽j/sCR'2グ棹 鬌胿Q恉舠贻J闚x�6竼?釳_� h瀸88I婀痑捼蒝Ols狿箲稘聚呠 �逇$俧I襯\�5藶FP�6灊榪R� s狴Im蔊亲)|4�>1褠� +森?抪p�箂=槏葙鲖h�權奋銍{(渒坡.謨d涨箜授S�琵V&0鐙U決)郊n楇炌鲄("鯗4��zS漧壢拊萙夭纎絷AO舂ぬ膅{y︸蟧 %�芶G橠2�旔1d2带釨Fz(黀� 魶�臓'>軩�>徹篼鲔j>ty楲脂�#� 陋藲�瑌�蘴H翹I鐡vQ涄�wn髮g4D擁帲tB勅 ;钅⒋崂�� [慃撻�9俹�吳Yイ茅惷~锣玙诎SdYO +k);d缇_凙[},/$3'E+偤雍峛萾茿32虸b潞��)ˊ6④� 郢{賙?PUN�雜螦�2蘰檼 0r焍颤糑;侦氙�%�糞蒛O意~-lN起輸⒏Y厡"抦犽偳焩�"乚�4U婴cn0x嗂坏郸3u杆逳�-�挱�*鹹�螑C\嫽Z閕+嬋幇-n�苼ys刃oX陫}i扭 )D猄u挙Ob 晠JNB诼堼L[貦xA砡跺丟洃刡 �) :8╯H>嘨�'4I�>.髛U酫凚C枹�;滚sqp鵖�#a詁;GB 悪��:mH]}�7輻c�#5瓁=T�v�.藫纺C�K^b埃Lz千:u x篙遅侲镆C蠑 趋�(u湔��鎐鑰勡,東\�74�=w"擹紇①�"ゅ�>jy n}/%o鳩�;�斦℉f潂1�-!踀3怢雰綳�冞圃�訿�{!t([涙孅`C裯嫯�(yF�<�;豔棰:V/�0R虛.絪艋�%"=葳�- ?p澟��鉃囖髐鰤m扜~7鹀僑�0㎞p_數,M槶Q�3&��箚DC樗$歷殷> 闝'診�擤K璽^玘擳甴咯愇刓骦鯱,�;�+)L=玎餋笈�氇叟苙q予橷j鳽䎱鑆鋬駡d(_�u%L<�%�O�誐Z奾f�⒛4X�>~�1拀x�蘇{� 鞢軫X偹9裙蜃Ma躆敜Th���^��C晃4{Z�o-凱琴诜種顟育*絩椿|(靜r碿暧昲 m:� + ��迻 >�QU玃jP莇乖3�*�?sXk胰早ZE3充権!t栧還淪X玫徴莄姅師陥fP2羒�q�)狩鵻鵳儢p_G缡聑贄#\)嶑�Y;蕃鎟�谾�蟏澘鉱蓀~废沱裮+鏌�2龆L袶'B�剶XQs劧牷孓��鰴汗/翅C� |V�*l醙趯佊讥悝V彑挜kw�2 姁G�:齋9喢_M呣癢逬薗烛镈]軓R奂�蒙/~﨨 聐�/棯Z怨豧濴髙~炘K�)D�h8#�5忎�0噅^*#耾Ju澬�鈭n瑹"";莺葬"V �/t"$蠽=毚螩鼃牊徴鯦NGP@F�赺¨X#堼Y旂裑伴髑溲塤<�飓% >1Q预ⅸ沧昋~K鰧鯅篝�-⿶�畻 �-笹齚灼噼八h怆K鄣\p穲歛4LO6藕朤迨�雬� 6�豧磽玸礩线x%N;菺�)ポ�裮K脳鈦2绩{^輚}扭{e +X_枮昤�墣?杆�'�淙汀i燫铯_��3阺t実� +|*腛淺�*N�/ec鬝眕\Q0?憴iB樼b&蓲塵�>x魃c�.烑30窻f鶃N訷壖%8俋鱚 V�/3p疫h炡�熒� 齵3#�) �sB鸰簺韠$蟒N{�2烼v骚謯:6骆�;}医撱(ч�7剴�7^>涙�:鬣缫扠~Bm哆举|鵦�5嬇O�#酴另銲,t�*Z颒昙t�8/却��氖K灛摐�$願就弯褿畺��頻<顦r]攐頢G瘍據4~z郄%6醘溗"澏浊> endobj +1170 0 obj << +/Ascent 668 +/CapHeight 668 +/Descent -193 +/FontName /GLIAQG+NimbusRomNo9L-ReguItal +/ItalicAngle -15.5 +/StemV 78 +/XHeight 441 +/FontBBox [-169 -270 1010 924] +/Flags 4 +/CharSet (/fi/fl/quotedbl/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/six/eight/question/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/W/Y/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) +/FontFile 1171 0 R +>> endobj +5650 0 obj +[500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 420 0 0 0 0 333 333 333 0 0 250 333 250 278 500 500 500 500 500 0 500 0 500 0 0 0 0 0 0 500 0 611 611 667 722 611 611 722 722 333 0 667 556 833 667 722 611 722 611 500 556 722 0 833 0 556 0 0 0 0 0 500 0 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 ] +endobj +704 0 obj << +/Length1 771 +/Length2 1151 +/Length3 532 +/Length 1712 +/Filter /FlateDecode +>> +stream +x陧RkTSW應‖騌I誾X%2yj   b,�/壒7鋿鋇z箒�D|PIU朎lt蒘T� +珚@}犜�0|慥啺㈱_s梁篔吸�5琰9哔�;哔4廐Ca酨 %&G偉R � �3汳⊙俼XN "'`!�>`礦 �+�/洵蝤򷀮挦"�W0}捘" �# +9 +Bk� +��0z&┱`峀�蝿�,bR8! +l動斅氃$A�嗫�!m苹T実挗�讛L: EBVRXk1�Lj鵲葰^?楇x覱Q餑�9os�9頣:� R蝥┃E9f儗淡踪扈F/涻P1湐2鉹y{�殐;頨[3毤n謞5�9�*闔烟赱7_=蒏咴賝q��*�$棢Y�廀巛猥掳j蘎sy~隐g-远;=榉Mc乖顔���6]�瑜p�/赌� V藙�鶿彥0��=Lq-�襙gv��{$攻岜掕��*]� 轧a5T[浮-�^,�6�+pIo桠鷹p2汌抑竣d缣/^�=cざ>T{^� 齌mn9獬(蟸h藗鬩�Q� 究跐彣K誻�4�8o�>(*嚤n_趫陧齝翜角 �8v9鐬姎P栥艩�+b映弭v趩+u� р�U㎜<>餷k姡�銌,钯O6瘘捯^�Yㄆ皗用欠V.诒�"t�P3臒楁劫:�p7w$Z衶荓w~霨僛�r謟}�4爼Z�c1肝�([颹d;0A僙�4un4韧z9H炴eq7K]織臍�*!*[*9璣n3阄瘫'ヮ謌冏蛮�粻累晳 䎱�'殆甒F�:9矪獢綢旐M澂讨牒鎒7w�-p3级烓酿%鳙悠ν6箴祾H�;[U泅氘W胏5�-�鼯迅�击s媀S∑ヵc糊踽e筑�;/eGXh倦鉤&.}mS?詀[瀟�+tiR45鱘�*q�8F寳E(趏Y=,璷<臂a鐞*Г{na爽�;7�祧xY柆螂剙簏偓榮〖9遻..VPJ钌q土磠廪饻鐏?|絞2轰I靁SQ� 飳oE塪鳭楄V�Z]泛功琾弔n嗺聹w\^s蜻軶伊}満寈�:裨r穙酴艤�悖爸5�z� q\圩湟忍��u哓5i旒^�� -k碬餆脡蝕聪� 靎��鑚撺逐�.圼摨鮺9簄'��%橢O.f葔U=紋枍O�#TS���幄��D�栥汩�极寷endstream +endobj +705 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5651 0 R +/FirstChar 60 +/LastChar 62 +/Widths 5652 0 R +/BaseFont /PAZEBY+CMMI10 +/FontDescriptor 703 0 R +>> endobj +703 0 obj << +/Ascent 694 +/CapHeight 683 +/Descent -194 +/FontName /PAZEBY+CMMI10 +/ItalicAngle -14.04 +/StemV 72 +/XHeight 431 +/FontBBox [-32 -250 1048 750] +/Flags 4 +/CharSet (/less/greater) +/FontFile 704 0 R +>> endobj +5652 0 obj +[778 0 778 ] +endobj +5651 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 60/less 61/.notdef 62/greater 63/.notdef] +>> endobj +635 0 obj << +/Length1 821 +/Length2 1061 +/Length3 532 +/Length 1656 +/Filter /FlateDecode +>> +stream +x陧RkXT��<纐V槍P# p騻s倮81&6  �肫-螷璏�-絠闥O;|�u� 曼[g灴训玘#8~脌燺~p�,鋭�#>�"Lm)�3\v8鲕覜硦�w慧幌�5卽* 襺烤@`KA妩;v麰菇髮� VR;G覥rkm�儦圩粀�0�BR6硟w� �kn增�/ojT�-`+�4YC[縨漸丧瘽a汼�_�萩[3-彘瞫姠g=l6巜7b�/�,细9,莚`�>犘★镂o炴{岿駝2�;|嬵�:浘ljh}�a茗钣烰#"何尐妇#薢hHnv#唖跢迃锪齻煹銔ZD&v羿䦷袷栮�5揄G"l囐b鋉衚N璆+齯s振栤訩p肊b�=拆掍x鵝颩蛜埚踻'雁� 踫u廯嗡9U賩wF�]叉"“%b昂囵@剁� K騿硭be煕趛粦�嫀}>垫枡m2~蔴!遷ぁk蛇河��L彯W}曓蛟~农�W钝皳簸昪�1O� �z+�UY[襂-�1�"g�J�6匔孂俸离5或暶=饕i棵%鱇乒F:nN铄m蟎�&k藱镗誷O�/r^{饮D龗anj柰姤{�$焲錆+閸徿鸧tDO�$闿霏痎童�8�-G� 脒(]m躜棂�(�瑢枪3Л皖�1揸磯9�.6潵"P觃4嚠 ]\颬碥橓vZ炁i创魇�=謶蒅#L葼瞧T�!'[q蘳鯥kK泾旚�艵柄:o抄2嚞诛y$璈2翪?� 咟%皈惈 F绚b憻窍�&endstream +endobj +636 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5653 0 R +/FirstChar 3 +/LastChar 110 +/Widths 5654 0 R +/BaseFont /DKDCMS+CMSY10 +/FontDescriptor 634 0 R +>> endobj +634 0 obj << +/Ascent 750 +/CapHeight 683 +/Descent -194 +/FontName /DKDCMS+CMSY10 +/ItalicAngle -14.035 +/StemV 85 +/XHeight 431 +/FontBBox [-29 -960 1116 775] +/Flags 4 +/CharSet (/asteriskmath/similar/arrowright/backslash) +/FontFile 635 0 R +>> endobj +5654 0 obj +[500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 778 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 ] +endobj +5653 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 3/asteriskmath 4/.notdef 24/similar 25/.notdef 33/arrowright 34/.notdef 110/backslash 111/.notdef] +>> endobj +498 0 obj << +/Length1 1626 +/Length2 16798 +/Length3 532 +/Length 17712 +/Filter /FlateDecode +>> +stream +x诂禼t鍈�&踲vl;鄱m鄱m�鄱m趁幯婶��寛}甹兿篜Y畀蠒K�?荝�'泯6}i�7厁�$TE�;鋆4'A z屦櫩詂紀梕隼簇誑�曯�>!餲籜湢n_�H軍蠬�鼘�阊粦殎P陭/�'熆欳7]慓m㈣啢兗彎w縫苭邁S�]媉.<��+*� />誾~�4紕岷6�0$�緷銥陹鐠W陕9y目 鴲泩�7蒵+诒稹鮓c斊MnK聉H� �)蕸浝筍&象氄堠嵮)� +`=4果G岓炷�ν攟躲Eɡ�3正�#渖滁 +J�>撡擤榈O 锰齪梆q儞!�谝嘓趹�6c醡nめi儚淣M}憷葰凈[帓祽天0E$悠炎d~` 痰� +鱊�/,葢C腟z璿 +T⒔ W c蔟$姆珫僒�1骃鼲鷒骟%渱T蔘铷锁参y緬緱胂�!^篈k緣DYsfvjJI溾�'q8 *1|╡� +脵Dq⺳聳2降绬爻鷝汫3? +(勏 +#㈩;┣硟}_韘巗娪柪祧A塛銒"@经`Q.阯梱綗埍{敄{半h袴Q楡i嵐譅椅QLb葓={sFc�0牊靟a窵種\AqY�#頦乺▎姕Oj�6\Ζ穷哋xE%? R#)sG@AR璤^hmq�"NrxTJv 犏�9IX咥FTF鳑拿�8櫃,�)�#|�3熒踾鉻竹泞 +/� ]骡�c鲊Qb�&M\�p閘Kl5鸷e錈惇�ⅳ"Prw馀A�1�o祺凗釂�Zt�U2]Tm �売!Z樼媐!o�0碧D虾z銄?瓵な砭鞺�7頺覨庄\蔩屚v效5+[吲<�榽�粭拻 +�2M�<姭熽��<珹񞺵�3GlREP � +镠Z�"�eMI瀫爦璳锁窭�馉n辰� x浧R4h珶h顎如窊Kt菍ovPY 囙冝Q灶)7n瞈\|c潾v"w県)薈K B亂0喀繤 A匁訡�氚鈓郜'竣�璁U箩:!�;郤�=T碑�8嗢銥Mza鈤dР怪`8.9#!nx�傔睸択旚脉藇7趫zV墮D辉蟲緖厐k]屲�姌�8[r⑩+限�)巄�;徃�朐嵌捪92~ O�%嗺裨�$萵y>痁!�$裶鹍Dz 8�6酜諹� &扷~蘛9 +聥苠{憸?﹎醓`喅享P娰 叱媛n.走2G星Y余H鹮@其搟V旁 =s刓a�Otq=�Axeuc�#fud釪姮f矊�"岝E谽腐7?C繎殟�$.⒖㈤韌 諬�嘓驛x烙欵��0堨{�氒蚞葴�$箴J䲟R+鮞缬賧QV*坋T鐐n�,ポ�j厷绶,>?%�3鏲� +%. u/�^駠J躃�'檹I赟by[蒠�;�'cD��蠺�>;>7�:V袁蘥rV〉Z嶹爴:�4dOIe(N嘯rh^7毩r� UcK�&帞�邿)杨産閣H蟪橰褨Q悏B瓯e烈抑n坸'魪� :f赘D燹%6 +�绝y婚(o�)x%糇睬I�=�櫳�檓频� �汫*In韯YP菜瘠甏]震F汘Zn澳,a�1�x湁偩(═箾{w�*悡2C�R屠帹1滂|朸AZ.1d蟰U筌P蔥�4ir锵�hn�3�_�5B獜 &7逰�\^0� f熞淬瞐�$0/CR�0璱烳轳�釠浮�?�6voj+▆蠪d|@籦à--�7X 馒 箩鄖�'諍〒n)緲C筄#嘚糈缼rDo�:銊V培9��#�  牺寥! ]嘁�*�<呢y0筄柗\3呅憣^l殩z櫥Q贼T�呶v#r$z<轎w寵�瓲轍粽w�"W餎嘆縲�;蠞絥2L櫡;v峴\騸跽娵)訤)�*鑝0n�<&r鸧騘���!峢桞>唇哢�矿 廟.-�%D/D渫z蚃(u]禯}�<拒q╞赸嘧 +Cjo披{坑Q癱瘼Gpa沵鱱�涎噮%u8妁恴皣� f鈅%)i�+岻鴞瑠[X镨 _B{睾s杀�堥o沞%H骷沔禆g鶢{Mr偋薒$藻l 闬bK 挤<<{桋膌QK苏�-腚湷u浘A�愯硵�o竜ㄈ2�!x⒚U撗�~創>菍F?粑U籚�\躿�1篺纅踹ea湸孕燎丢p⒛讒�9Af熁L�9;堫�縦& �攌/�懼罹#骩陧讁劤悫u��'_矍证莠�?�&9框甮�漃�/F2�8蠴�*To~訲纃闀#h蠙桩`�丸4N跥c様翩Yp~碣*蜩悹z臭倛O淉规�.%oY叇�稡圝i!]�$�:�4幌�0J~r��+1%]Q遄R狼7姍� +s哷愵劙R瓆痫箓1抄G}"-驿糪7(桍[Ⅳ顯�?墥Y軐O� 蛚�)柄bV鳴簄铢奃�!� .坝 m` 舝翕;⒚:𲵓x.眆 4fr�:c鼪韪俺痕琙B{却霰礳夷�,<俑棢欫春$�%煡訛1佖R鬶$Y魇豬g�)誗�7T昴齠97�7褗1�=赼忶刈扎=蛥c�h�}偌雜o�=D(�g�⿱�M蝃o8:�"錧鈥郂?B=B>羒埸N繇�(#w�4垒q�>瞕n�+f揱馟]乫蘨痧i梋轞铽伱骙�}T��*�)⺳\�%T� 盱S,y-蘬9览 �嫺祲NYv.dJ +9铍V藴�)�(魈惹+傉闔f蘡z� �KJ�-j1璲渷蘵G"棚j 蓴�6乸崪2�蘦i^yD旲腯賐r湫蘹5Z椵 蒉�+��>�桤el[磫擉,檊濶f�'济挭&*0_漝晿;洪�蘹�撷7t� _镫8]E9T礼糗>C��;帞ハ洜闺覑t)N夝t忙O掮� Z�'幉遤c⑹嘃k效�$bD樍D蚡蜏';W觫�y闒�琟誜YS嚡逤囒 +�麖�!爴�2�枼c�L�"痴缺\評g蘆燩�賿P焀�.鹲贻鱰凷邐瓰挙x壍 噶I��术pUo閮�9康礍�Q� .7擹3{犑軿k潉]嶽悜蒯嶒錧mQN%禯聃z軄都蔐|`俊M脂粠紽� �9鬥�U +[)暃齾漱Z媵E殾�}妢3 櫩s�� 脘'8^璛鋚Y�-�瓯?瓎撎胖@�fc9�媓略�'a佚�a餿'踳C �苖賡#P埋*%淩矮\�"u尮#惶(槇晎篤YP釕O斧渀pS�.崘�(�DVm烎c辁b�<◥/良���0V筟�<粳mAue� +�M謆麈So-篲姪罽票菈_擎媳d搳桧q~h�&}�;�没-;u昅匲狊�畦9�)鼒v坞/蜂|貟仔近�x玆�嶏?鲷冂FB3=杪巢�>@w0��Ed鲏抬鉼�妆冼歨�/偳Rs8E漚郡萱轡'牐轪� 蘟吽 �+乆T凶-噴蘴錿i/躪虑,杁琲�r涫殻僘|�0N8僕*k螄瘖|=4>草n 铅i綺_匩$瘜壔饔毱n嗱膸�oke�,�塬B焣-%%6乚u僥 +嚪谢�>FUyメ峙顱s糔碞jZ嗂H蜑紎�-�X蜻WZ畋垓a/鍭d_;鈄�%平勬╜"鑜璏嶲� +αI�垫LNF霃矜�6$�+攉^(R'顧�?OC5畇帍6F鴡Q鵔嗶鯉� 霳K鏏O婢wS皒[�<[庿慑忈h鵗I筸18俪羈鬜1鴨贾筅X羚v嫆d��F|驷�瓩耫蹍&D狌泲Ra^趇鼙#=@な湙WgW納O蹴觹�9弖縳箠;�,公z诂|蜕眮誒3呅E氈b焓断+竄 +箖}賠椦蔾!�; 二l�證昳磷構灿� +隐 y楦顰u�}N菜E晱伕u廸6绩1恁翠�卓侗酧(5�巂簪�娐窇桛殱蠳\u^ 襘L瓍魴�?�c礿嫌違�9�0y^y}�,4┰猒澧Jj歫']��蚙瓱�=劇�十な|肁蓭wAd � +焘騂糉怕o鵌屏Z4p�洅鷻V軒V! O骓誎也�酖鳫籓<)��*柟礀�C��K鱳綾/R餌憧揸�6'8觼燭冷挚�"O猺F�徂�Q煝�>Д^bia唛铞g烴79�;k5凮'嗑Xo勡�9邁嫺c\j璜饐�o.澤�'攤n轾�>�4鷴 o B砊� �瞘犐�*? ��"<严纝�!鷋!巸踣峲�5竩8猂 %鋐螮N�>`=皯\$ju霠鑻 +%稱衜垕�%Q�]b~蜁e轜dA� +娱瀜挐9G怈躄�供KqXw:睫菼�>娞澴00<獠溪錿�l徕Ba� �$xN臞�%t厕!^銇3礓� � � _�,nV=p(α阊%蠺鮂X淝YO,斕窮壿}LE|�Oz镫勽�政Y諷!P7J�"枀仈听绔t,t 蘋A溅B `�+c%ク胸{鉣俄箝�tYDF +毶B�9黤頻Sx趇DJ-�=84牊毌韸C�"&Z�4+�:7��#坜�$ 蠂f憯L^�8j�蝛^�`厒x6穑�P嫒 +詑鳜╀椑<�:R莞饢5L熦 �� [n硍}#/8乛 �%权刳訔�Q严方絩┞qМ軸�([H� 襔зe�#娠|鏤 ъs粓� ^檅�Б� Cb越>鬩�&18J�5"麌n�-腸w歚 ��癱LOc怙n�<犑�駈痔K攸-摇Kl楠 錎Va8�I憏*�;5!�;膉��k_G9F;鍯驀@n窢欕倴惃�柚悇(早5l琔,9濭m諽~–珉��$;�4鸇�汘,�<﹗�瘤e暓孀�庮曻� 剖=u]�C�<丿柋礦9硽烫�Q聦� 瘉佀u潋#蛗訔A$矧b� +杵64v絙盋䌷�4�o鸪�.塸桐Q鬭5�%B�8�鼙珅9偩灟&~ �]n侽塛c矊C韈9俞nz艅q#j翤餹鳽�r噁L�?�'箊犰�膽Q*�刋儒w妥℉鰏鳚膶G晻��雾(<吴禾I�5+d虹飼M�珜�c 俱u存R寤窶T髐PX6啥�$欏累滟o畬酊$/绉0夊亸c�盱��*阓L妗sj:撍霧�ㄚa蚴辎RIY捸LT@� +�哴;⊙{で-&�� 尻洬*?颋'滸y贐��庞%执(V朧J� +�+|�/洡斱�-� CPI擣鎋i�&T8�漏�4�0'e 䱷}!�=λ�6鱗p檙嘚wt嬙O脤慻 妹菎铍绢s '$d輨7�#>4� D�${磈G玌�z擯葼4��a[6�7/勛俄 娧晱lQ��/狥畱E >^呥ht.僑<挒y鯿��f)澥k箦畞^Z麆櫹斵聼嵁3缽袥; �輤氄脇跦%眲:鷌僄2�2臔餀挋镐K�僭�峂�$>:篸юO雞}�鐠m1#� 夳*紎�+#j-樻s� �14浾埭#|*|珯�/▲憼郟~�PfD谨MD⑹ +�H\熠綉KUク=竂p伍恰��&xE[ 藳嘍p炃� 蘡塎� m镫1Uon揜凗&Wx俯斚字^諓 ?7龓韊{群7YlW偫蔿睜!謍竔柔�'^轒●T苊盂媲 ?鈺g暋絤銕z頃砞}P7闪1{蓇�鴏�2菬姐蓛e&+复埛�,y剠 ��bL霌趲 +wM/C桩吩iW_[報垾{seO| 獠�6kt嶷m:霒Y湫傓u艒 賍壠襌�櫘� +L虄T7栽)*孋躳A甄\栧糔瘧 � T忽锋6,�.8穜棝46'F#樹5]7v�z渠鷼鏿兦%o{mK(恐宪?m叶屽爺Z鍨霊魩佷ZS=3;�(�;s郏�&萵)a桞� m律儽|�%�3�)*;Y琿I �衲�衎[豙)蚼鐖$蛄o�;鼝qNL9跘贿P稺狢麽O9�崴嗕G6勧�吙'QV﹐^|W祼C呙骩?N�+�棗濮�$d %恢 鱨郐峸鎏嗰Y傌眗�+綨蹳0C9衰u縱5榢屵咉� 琉彉43�;盰鉳uh �+氫2啯溩E1Gq�3�*,�>#傝褊O� �:u汈=?昤OE"\瞃ワ瓥R&,睮=~I遷m鲉T仺韆遍儾�'查拋p臙f%肖�'熒嶔id 溝哀'��单裪撓U跐u/鲂e豁O 邖n\聞�$��r>.=�?,琭"N蹀杌~tV�'q籆'斷|齻i{Y2釟瓍疠嚣}蔫肙祩w坼封鲰辐锨�,狇竓w馱HJtJ趏詮N繦�0�趩�6罶設摁g}捯we垯诿倌觞9r-拐��6毝绷蘖;d魭~�%�-M鵥� +p�4飠6p暋骊暅隝�= 轕圭〔斁釕嘔吠8Y莿@儐搙R珚儽冇Vj 涮Sm�8}MT埒腱廴�4n, �(MD%}Hs�MD匣ua?皞鰉幊炳I贃佱JP +� >掴*跅�铜暖�&h隒*~碆s`D�;,�?n �->鷻豾V?錸Y賱玆~gヂ躋毱櫭�<訆┴爴�7@ 傈(]]肽M吭,6柄菸栃x_猛彈+�� 篫`� 禝W盜O竻e;=�?+鱃�扣乘夌z侒跹凬梑q∨嘖;Я锆Ea颙8鯎鉗1;噖K萿 �5氉崦�6洘�6受晛゜Z氱飗^蓡�%簾^F�-&�枵ユ<�-w陽0)�-蜸7阶清据�7%� 媼紮颎�6鱐p4-!G潑�1E�袉yb辯鸾P)廰{劒磚勡N�樉慔蓉D抇蒈@� �=鎇?+0铝槂定B褗r&叠牋瘚鬟�.简�"s7jQ垌鉰霖S諝晊JFa绰<妸.P彄pDMx槝� �:`$��1鷷u涡B郵邏H�瓌3b絹爧V颎鏿RZ.$鯿靺R獵固,1叞)�/儶�C虞S� 籜~�|��6%V'q}〆�#钐�)躀rU嵁�7&? 燲貌8勔 X�奾忢@E斯[鮰�&=QmP莄孻�"葛\XO笤廁$+�*句奀牤a梙gV慑痽?碂5<印[藳1 �9诋]掏δ*虛q�FYC鮯闔e莢4戞节к� 4I雼藕 儛彖*�?UM��*傷蚌��(�螚rKB埕7屟o:as究n摥屁礛tH�>鯺oT/lOQ�令 +B唌Sp|U�犜栰柠1愹<h*s廅T\馇乮�固酊�-知K駪�雄!t/钊彣茒�餢8�螑鰊Pw疝�!t訟 �!6{"匸o�穎{�j� 梓癲9答uC>�娤趜3砭�鄕%4E3泘苕篪脀�圠�,b5Y緷霬j>忈(v<5綔續eJ!ミ眶� np��;5$�,属hF斓-�%E殺�3嚢稾lr�� '�b鈤46�� 餂_酪)v�喬7鲷�42�.伉�+湎櫮愾蚅譨阬)M 儡砈�< +捚>O�8R#阨偵bc萋J]柟棚i蝰9�黌�"濕� Ya壦獑�kH蹪溦槈M齶?"�5{霕j覝4�iao�,甄蝎c目G�)鱤8)e� qE0*�=埪�(|��s媨�*<魖c`�2�(9,�-ro 砰t%�1縷Q�&�\�i尽S+w9罄�宑"鄔@�瀽SQx谛揎窻�83N~塛茥蚁銰&bs馴�8�$g曉�羸�!浻x糾KP�抯v_�5�.呪V笨�驩宬�F"肌!*g� ,斚刽酥W-ぬ崧鮋龋��6!.�=0� 蚛瘃�="8瓰~褡啹q呡}唋�7O镃s/哌榚 莳QM��?z醀 c�!砣勲'Lc瀠`f萱� +啞V� @靵bJX埼-M_ q�#鯊S!"�2夕�:kcX絑2椆.玭葩设W�俯�,;f厍g#i奝瞱�?q��7�=uFC�� +p癛�玶��/6�_寓鶔J]�RK詆 �;丷﹩虝t4.d炅i��q濾嬧彪ly朗怣墎鶺3�捷�枠賠憏K +銗刾蓘購]~恊k閷�蝇|5僊邺$ 奊z肍Q�舋欿拴墨, (@�沎:巚�5檟�0矬M润熮E� 鹷vq錢垍�yF鋣�0�喞灧j鸠xlz蔯=T)澻-^{蜇+3\w怢烺燏撥栱炩諪� >�(0硈p�z岃Z獛�'2l@W[Q�=o罆瘂p� 9�)i�)鷰WD6=屾鑊&崎2E徱BvG�%霷蝕凳赤��0�$錶椗儠鼧菬!*XM� F M葠沗欄rT鮪]_(o蓞玽}Φ诗pB�+*pK囫賓�(6Wb▁2!Q7%饚I望�2阦橝驲醯骃w陾�>癏)D陋耭 *S錁�FZR礧趉祉Y囹E>X�CSUh]A\l%魡紿觺�啲%淄L逕虓!<沅�;�揽詚� :幕魆^铡oE�?i琡�K赃)?禋珂�楿eM葴U_纏�莏j磙7�4�.h6泼\T�5鳑�+﹁唅騽�用�&w湤a?襏I猇蜉駃p嫇&馴�)�t覽(攛 ��梼/黴�2�_㎎M|U泬崿骅冏H�摚8蝬軩C=邠:狝軎}悘_I�"ZK祻@鋆弋* ;賈 Vu b�%旒�!Sa旱P�=gII�.汫�0F�烀轭y�>疢.醇�&yr靧鍎芧鈖赎4�(愚�馊堓� ^A罕�=]p#R\?3焺�1伣*�3'pЫ�#�鯱�(臓� 盹齸 嗭z缃�溻徱�鐪鰷�鐊{��3玼泴�W楕綟嵠�#5綑SB鍜�� 珤�)諛骚讬勁態绳[輌t勎u丛i"廖篘蟚鬀鸪磯省_讄 97刃w1n2M�偝$n3菮"秒慡�躅毋荬�77�餳痟6k�獏"~�;7暮罄螢�葋4收S坴啅縷莹漳缓4�.V墵讏R灙X糌RZ�甐A(�5�鈻;=&垼'抴j[唍啟>B麚灎h48"彂n尧紵S毲� S錜鈄绱i��>�-誜ZN�G�=膻餋銏!C猸勵贬Z#�毿谄羮 馷2泽��+� 苏猗P�!氓p育Tj檱灼揤s示5︹�5疈7勛�S�$o赧�齹7袵冃輒n疟w攪挃抌^壱橺嫖_}�V趬P梞沩銼N鏜緲T=刊)�;鈩���倦珩い臔敓Q� 陖{Bx�哑�0響 痩R挰f湵�N擝H(麪; 祾铬q痯S#圎o华F_鑿鈬O绩;<捭忞髻姑'�&雂坄C�)巋CTDyQ診j薽闒Qh �2�*H砳墿C媫骵汮}OT眽粙a@]獉8 孫Bh%摦]轗L4 �." ^柽ku焔-q�,IC┚I粷棦風碾譕 f餉}F�?斪Q�!c繾_綡x仸p0�2蕻!Gb��&矫�*Ct�MH梧f]y+� r�韯�錑f�=誐膜b6诺=誜�戳埐璣h0笱09c薔`Z B黪Mw羄@�0昇�P7_�灬糉撕�Mgkd0s�+�*md变xk曄;澷-�噛MN57燒丿啍愵櫓y��*�蘢唭丠髹t鷋鳁}f"挫硘PJ睗S�#G[�;�>�Z搲4]�3A|�*KBz#� U鮲i4:8i,pLI�Yu-9uP�>K\2M疫/�.3�,\粰嫅�燷圻�礆掠 攱�(*Fd8N唗蜳�36�髬F旛l`伵$�bd秌囉軇縜鐽_友x牞xo8垜�3檑次=�駺G齤�9瀔捩�^s>嵴X8'偺/絇�2X^$07V�!鴼F�<鑬9掏�u�:C砼烮阝*A堘暑��a漬�FZ儡嵑E鈓蕬曇�'緤�-z撺擌昩鍺吨]bD�鸧频�匡丛5継=� 睡¦}a�)V%+荭k�5罧S搏,暝Y� 鼆濔Dě戙逕q-嵈b&━噋Uf~�*� 水p 喇�6铵u波:糏�侔�)竐(+2t?盋 +粖 *蘬FH�)軥~榋蓤Z煱徭$皛臋&g7S&銹矼杄l撣痣T嶔�YF�,c¤氕.*iy汀� K{贎�*yJ? 禱5轅<濐3�0婴� 嵀�5曁储错f[涟b愆8$殰m&(衏�qT矈膐禂a/|俘Y鎒� :綫奢垩4垕K涞毘童*b沘刀綊��&┖>鰽曃穞菪RLn孿0紅T雌j經?P暪!4碴 糽υ趫x5鍥穪 v熫�CD�莸g丱t>E劊澶曾A釁�-�*�5紃%" +2�"b'鷐0%�;乫E竷j'd�,蓩g! o遰续貥篿 n�1�+~� #ユ瑖# B軒'澓恺a戦聯M悟T玳壧皲噣鋏鲩� e�;t|隽+鬓 I貂^J譳}飋ぱ瑇迋囍灊�(ⅷ艝�3R3┻鯙�忡溪E嚜箹澪紊,濂羁@�?U錂鏎桥q捋S癜t�壷s魇H0�6$ Y!�c5. oM徶3"充7%07筑�麏9訠�C﹌躠{嬈�R�(詆⺶*�=?w +&� T�7侻%[堙鴩p嫮踜{五艇~繒�4道L崝馣SS�9i乇/Y媅�T_� 溳�&硋z騚籰 炪3隄�9&FG嶼哰h挅J�+�%醓'坰� n!�)k�鮺�4甹�匝R�>秶�)▊I阛GU鮾橛w巏_鄆� 駔*斁 +P�碄'盉1@0LQ嵦�-?n靶諝錯矣:xX廃�@�瘭謇跖遆浏fJ囡霋霈祴a䦷霷5耢漦_挩锂 悌 阹d[谨蒧�9晉%鞝xAr|C (D喊g賗�5裸駓匮輚�#犱檜�� +�� Lp誸�783蓧Zf鰸E崫瀜�._r%X_VK^鷌B珯捈�AV1�NY:pYf.妺具簓�-馪頩朣鵷� �4麎Q艰�'ot"フ耽萑l莶��5� 9vV�擱9f癞4L�"�>嫽毭蕫�c諢dp謔�8桑訽聐k�'儨�丁 稛v铉冀=猕��輫y�D5� +>�?($揠駮}BE薨^黑|颇隉濥i鞔囻LL沢轨帵果"�;谮倴�w甝匍蘥擎�)拯!菀牁M:扉栦攜瑌転s8v� 猗枰�纬奋�9足P黍�沧廧�闣5繖絡薺暫剮桵鶾 篚�泐欫稚陲3�.dbq銜螖泺磷恩萘䴕P帅3y�-7�$ gk臋概=Q仓/痕笃}c锲e'落z.5L喏q翓�YL�t隨���2�鏡懆鬿v}塤[% >飢粁悯訖UKvでp%^L椢|;]G�/烬l誩 +蝒[资488蜻F+ac�'�'#鏙v�*V�_爳~vI┏书[{s胅蜿X_=涴摔鷳滖�-|i�7m\猗pX1�$!鵀╯蹏oc�%_~?ЁJw臃L兾﹔n�W涶℉~�-咽_�/�:卂骧u互艐蟣(縷g闻弸具櫀胼齸釟U淀�,s籫脕煯f藁�7M娟靟镚-S承�'遧菽a藈�?�#t}狁� +焏撮[,濲摈�=Zg;糵缦U祧`醬8潳テ蝬螤lO/i�N藗�o��赳]蠔� �&腼甅?∽�9i=嫪巍~5_w�漵琻�dh绝诋w> 6絥=o晑赈覽?冫^咨螨璣/%�晴薞U0E糬h%�/臓譅饀塹忾Gb碛9躭飏蘝胺87nnG荲鱰絪/]49_薻_糞�� k嫻獧7=4砗ぷ�-冇丫Ga┓藟s ��&王づ`k崤{騕弉蔩氦蚋嗾�{鲈哲筳#沘~i顽}^伐 餁篏煥w}_dz~鹯岘J�m>-~X閏�纣頔N�蜾6�7賓/<麾ADV鄇9�2麰_� ]娣瀦舧砉�73蠀;[�9�<蜷滨}Kf/h趘�;瘷w秚[呝挩и柾�(#糲K噟vT��榍瘇旣�瘤TZ3~綡�-欚j�;�/E嗰 m鯔*S脘�>}搜焲菗"_艟�'m轰灿kvb摮颣_�5u鴆@!�5`X悳摎XT挓沊斖蹠奺ndstream +endobj +499 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5648 0 R +/FirstChar 2 +/LastChar 151 +/Widths 5655 0 R +/BaseFont /SPHROT+NimbusRomNo9L-Medi +/FontDescriptor 497 0 R +>> endobj +497 0 obj << +/Ascent 690 +/CapHeight 690 +/Descent -209 +/FontName /SPHROT+NimbusRomNo9L-Medi +/ItalicAngle 0 +/StemV 140 +/XHeight 461 +/FontBBox [-168 -341 1000 960] +/Flags 4 +/CharSet (/fi/exclam/numbersign/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/question/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/emdash) +/FontFile 498 0 R +>> endobj +5655 0 obj +[556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 500 0 0 0 0 333 333 0 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 0 0 0 0 500 0 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 0 722 556 667 722 722 1000 722 722 667 333 0 333 0 500 0 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ] +endobj +484 0 obj << +/Length1 1612 +/Length2 19242 +/Length3 532 +/Length 20154 +/Filter /FlateDecode +>> +stream +x诂穋xe碇&WX┴蓨m鄱mk哦]a%郦囟m鄱O絳w髯�>}鶁屉毾�=p廹�5I 攊M鞂L澎�未宼 \9K[#'Y;� 瓛┕ 喁�枖T匮孕僖(b鑜�P75垬槝寽湝挨a;{GKs g叒�:%55�I�1y麿蚠O'Ks �祜嫬⿳澖�)轩/��担博)蕾�`fic +朩袛�P埶�腗仸巻6#Kc�尌�)猩�`f�谤�`l4秉�4'嚎X侼C�摻┍錩7SwcS�T4{SG[K'Э�K'�梗!轩o滍朄c��+7雏WB鰩v-l�掰�)�99;;Z�;﨔U鹷炍單�膙颤�貦4�3v�辋曼�:Z�桅钗��22榅:氽z鼚�剔羊_i�8Y��+�)埂崺撚_樋��t缈�黲�谯踴垲_V�+Kg'S3:XF1崫��6�乱�3(扏3;#每�&.��S鏹犋�Q�33��04�趚LL蚡殄鞙��P盠鬟G���-�沸��徿�滂荒�矬B嫻刎�邺�/肋 c�cl �_鎲稏6���4T7齱��8捨��!4�K每厲Nb栴�& +栁�3C浛濟梊hb阧c 4杩� 爀d`�潑叆�5馃殖㘚e +4��掫閁$DD叐�s薐�/魑*��ト跈�?BBv�/诳7悥墮丽7 #O�!诳`��,k桁h�玄[2憧 +��漷�Fhlg蛳�(;M䦷��6vqt昕n��琦_僴j阯j 徊hg�l�;=争F鲟笀vo7#鴃坿q滼A�昡椷镳m蝦凎�胡I弲S麖})獌醤t虍d铀\\b蕿<� �6v陜@z絙勗3鮤y�--6祪漲E%舰w(忌6fG璜'Jb�<T扜酒)当h�?闍��錈瀾%?=掲� t軥鲮鉖g怕恟籅 怑�;d狃k〇{EPB�6楞艽^}╳z殄悞`揇谑�*樼�[e迵 S[鵼e%汍+4携g''9g部謀HE�0xp'倆oЛI偊铱这>�]S�:厈z睐�=74ヘ^\胫礝蔃;酭馷纲迚許gIH诼艚$3�q^輬翻{坪鶯�$[遵O:�輎c� 贗[綼龒H邉蘞P玫栜�q釞涳e攌/I|�;�#c攩6\屣{b睁&�9暓め温� 渽郘Q_蜠鴓�8怙鐵s赺Gi顩@溥�'�'�.D坝s䲢鬞e�$6偠鬽dew峅陶?笿� c� 迒FW綩f勼鹌雲督"玛�Yi鱃s炵堻 碐璤績{~1噸醝O煤�崺僺 P寣v�$��粶�6树#帤頏^g:t< +�;丝=翺Ml駦鋢V怘酏嫽�4�!泉贮銜�┡�4.� +碛鐄孺 謟t鸶�/!J&猚d>9裎�>阵5 裈躜㎜耲做w�睐�P纆墋�誟[� _g莪岋s蛀*猆/d褀哉$樭剺汓*煒掰^痯� 闼x潧DE梩LB4�1%%c�痊怮d罕痷PT儀>姧嚪懃椙Di逕镓馽缺猪z zz^N&^_鰂哉m�:[纪睃n5QC蛲E8�� R梪�??慱眙.縒A3`� 墥"�=2緎崉妀畷耶覠%換R舶vIE紶|犢榆扊仆蠅b蝮軸O*="�&QMW�\5l蕂a鮯2o-蕫髍{嵼莠iB$�}16粪s11钱f橏�6枆慱~Z4▌ik∈棾5K5�#C麫桍薗:毻R谏�亇簝R褡扼粩豙��0jX,<啛*鮶z鉶朙И�v�8KJ.(!Tl懥蠠<<`�:觊򊧅飑6洧連�h湮腳�湶`6礵&a )�U�#4;彛跐A;�c鑠置柖f栝�&慹钎捼�(懫d��m�8�p蝩g疣� B:肍pJ鴴�%0螼\�执牗�*志�2�=求X7漏<滼G鏩驼c蓭�s�1枈餞C崾嗺覝莇苿,��/J�盵u<碘�'rn'乧�+絻�;S�0槵改蛊$氮楧犁趕11瞺悮 +� 藠ow�藵�+慾 z巼私�?擙v絾龎O�u +"�炪B<靂鲮N助�0泅諞 9RT /纴�$�.`Lw惼#世I篮*赾B嗔�)�呼ほ↑气c6�"�m ] 汜*荧5颂麀封絋瞗铡�<\1h沟zぽ橯刯I _u鲔&駢喠D|�*闛鰉}c胥q尸 �%拼霏�<弲G橿4傴溛瑺纜me-k}�;�藀\骧A�d�<隯隄骉鏁j纪淠%{$罥��L銽+�' TX姎璅賸fW替濏驦b �?=袇漇c歷*仴螙扊`觳漯� #[ k踛�8�T�#1瞛�Y�;�"臇詉�轔娉肱冊u赆庑:�7��4紈�8b-掸{��Z惋芮殐�涳.珈 Q�[0�敳k�0~窡�倖逃w�dp!)/j�(鈆U<鸝v� 郣縟`借鎙8炯㎏V礭�>'磹亐ε;軥佯諚瞔Q駿m�53O豨xC鲣懧W拞広岿$屙萆谷�,煉:LB妰虆N� !卜7氓%燠淽�<氞毞 n+!檄u毧:�O領萜うx+羘t)C7K"蛋T洟�6'yTG倞74樻硯1Hr于|r懿眿妢t叆`竲蓱y+ �5稚My摾5�@暄[U籔帾貴Q�涟%縢濹懍鹝3詗暹`,PX{篷�!_嶉 蓌jh�#;b秐聑vh:蟸_�� }`覊=缴e凋�\g9哓.:�(d=邊)�嘉qBごz蹈3fnux�<漒禥袙I� ~ii�&��J,uP哀q貓殛sH贘凘�岊悥"吚璳T/擨騁�% =覿9�9�+J]X榄峱�+q>1鳢2cw7蚅 �!Y跑猩懭亢U�觤�h�6}鼅朔嵋7�)銥�5 ��甲俞�t�H緽觇j+梲(喒�*y�话#~撜闩P紲qP屘B � �)T嫯|bxY倡惂ve�"! 苊艕~曵鏎戸�� 戝駛叧肤*面tT�ot傏�5丅c漋二暫楑C籄� 獭W{`!y旿融嵳癥镋憣凇2�5aR�4佪`R�52v像�争凨� 瀿鲢3jA +挐蜣頢urx杯欯}�0DS'0鱆ho穄礙A脮A@積汭*嵾TP[逢ы爚\ 簅傇�DH�$j� _〇魻柭k+�8~W苜龘r�)f齢槲�&澡}恌"B�;账餶媶黷s�:鄚丞t#9鼽H荽賫哊秚'酞_鰰v鐯@罷琹杌W`昣i詽╀齻雷噐y碉 +凩〉\淗^-煼=]螨〖5f抷狞腹>镡馎蓇迓泳P熚P�m-圞�9峨�,M�D看襽D騻�8p�4韧滏sR橵D�+��畯飣舾0逆W+ON -ZJ茌溤恜h曵OcB弒�2U$忮e也塶徘V��;=2|芉 酭b=Wy5從�8潒�_F�B杞EK岜堖u逽抜%M獍�情槃w6N&齽祙薨X�0&E殅[�1Y�B镁�={箙愩鎅L钯.顖列4兪9?fd[僕A� 癴鄳,� 黅q埮 �z雛暴盋k踶tnatM恾媳F仩<傽耍愊�*鄰 {'伀陞�/+殒莿3斞\牾(c_岪鱗' +k邮德毞 +/哷纤J 7y�屼8Z沤asけ +磕J+鲶5麱3Z!^ N�絫h牚�4睤Oc}= ~�< ,菕q/l駸&�;驢 +禡鎣?尯◆谢�1�5孫鱲丿硭继:~q怽矊 c糐:,遢驮4K\縘 +侧*94磮独�2m沾F� u<噥�:萞53酊蠆韌R畔[鹧鑛工�9箧隿凌]g橆译?屼裋泵咂�;嗀`屇�4嚔6&H_j绰%/笔@^�騵G�`懵E皚猁Y J +���70揾P�龍Z�,>J_频6迾Z�?1怑蕕�2侶J蔜2r判駿�#駈/刿R6脸澶j7�"诙Y胃篾趭鬬玫]�2wv7LOx*茢鵛撼k螇�8h璼B1雓p剱寤=�cF妸嗛tn綂筰撀'幤Vt?�85"皨4瀪緾Y髕�0�莕��龌�9耸綍|"�紀~ 薋寊:D祍消!�1Hm*�_U忊���娬嚧彊�%帧銍0涼�.^阷嶆趔涘䎱机+1�<娔`� @妾&│冣�1SJ(y*58F釈:�w 4Y檁 诿��)鵐�(\䥺-咦T%衘�5潮g嫧釾�9``�4K +2iV�"�� 饤8�Q�跥�?I }彳諱a�S冦蠛�$i i}绊�;r_7.悸& +蟢畇[砉1t酞�;a8倵穠诃.�52噡伈>挷TP:T敓kz幓噡 豠奊�:A7X� +Eq#;��UO. +妫\s0V傃汆直蔻v湒7SN�晇糾� k[炟駎鶕�揟嚌ㄤ媳�4u�U+蔣e苬%"�舤{ 敌oゅQt錎�邡yI颙嵊Y腆A鐊B醰 %�%�&熮╳�Nfgq駰�fRn乧� +&P[�)2Z槴狨NUy7o�(憴鬗看�7蚋i:}蓒芝N,k巚,F �汫蝮}�vk$芙 尶_�+T觐 n+j��䙡滶襒G徥 +Z倾憉噋lsl鼃!a蚎a壾P 踙蒤 抠w�6!斤鏟惪8��>潨�$!疖^6垍k�'"�?鮎轩嗟瓺(嫓G[Q`��0~�-薈 槮苈挭齓韻�[赛鼷N}R>羨�颅圼椭選d�t宄:aXK硤_蒆n5殙瑺nX愋彜抵 +!菀Lz~峬澻#Hru~X壆琄貛�9鄎喈�?��5q顟蔮u鸡n8V5fxJ*�m┑王BKu迶S蟀o%rIt.�-奱軅�)恭fI囥暃w ⊿涼檱�3k縑埛荬'絿\!_Z暼�<((k歄s� 寇o鈘曾�+D�.q(�,U�蜐t桟gy6�7мv杠�0&^KLp薗U N齯V聸o巧俏)�5.5彴B聣鑱�9 橼铪!崪慃<熑�湟爗夯腁狊轒U番b爳s赴�/ぢ�要慑悯顚匓wE7e麸唌iD:\搸6G醦齀柘笣� +穀霥�+猌愜偯$8$煹=�5T鵛鈋� 鲰筢UDd噟撓蜎竏呫%,骹低s崙腟C>>岼K>> �.�*V�) I欶r裬rS陕鎻噢e襏沂- 絮f@�YD�Q秱Kz�:p�6� 鈾橆a鲱KG:H瞭,Z臭迺熢エ嘆e妫'猿I餹p穅猅與�$�YA渰(�+k 釟 乓#賴EJzば容庘贄峴:>乛2�囪j炧畋笻��*e�(#E緑嘉v� 码鵪粂譺聻灔缐D馕�yj酐m潛�泳;_}I昛3邟奫i�N\兦甎>�淲烙"�!%ccg&:洤~9阬儡駎�閮�x佷枠�?u櫬徾协Pr佸�2ⅷ 窠8�-Ft葮2_ A懅萖琼蹑q撌�陔-㭎聲q垵癗彗嚣;6鎂痍\鱓�#蒜筹8�涍媏G~�.2K畈UpXM誦hF暁8E瞴qT-蜆旊�惟S�'f諊�.鈕讑n?嵆�夙XxJ簣憫�垴毐c瘢`�VWg� 塬�79蟻兑窫儱� 扔詞硗釘墣l�?豝d黔/括挼晌嵵{C咚bV�5[抸0�#櫉` 鞆{秂}祈梖@�衾踾伀懳鉗雖鱙sp�Z截砞p|扭密DTba#�砮餙hq=G�3G8,�7芙=;i-孇"Y酛8黹硪�膤t贡u9綋嵀缊腫&厫�$葅Do飲� �,�>凈漢� _藯�$楞葌﹂;>闽諄O$ �!T���4靋葞�+笔舯�98叙'溾罎 d�殖塝���# 赹�+� �+ !瑵M烃掁S! w?R�9喴Tva童�)蟉��琬u*奉邹壋RG� Tu喴@\樐�习.忽pb蟉1卙攠ldVD\循FG物碕�#&[<腭x鵵储S炍$GX �{斓桖譶dYf4<(^侔逮璼]茴σc莽竆酂@*//∨唤�l脥�H秥雟溁�=皭� Q�A7乗卂t|�0 AKZ恲+?`6臯9蛽�(~R�葡菀1雰管癀茛蒷磸ぃf貁V鷐�C^6麻 鵉廃鈈u1 蜯維f畏+楎�蘲r,嬔稁��鶊�&K蟀�%X錗�砪鹸�9焝^m �fz䥽隬1(v�埚扇]震宻0W陞ehhV驑XP�>複剼Z艩飫9杚�;I慼薕]2J�Z釐�U锭^蜝��"誳�b幗�E�/yY�%羐�0a�爤��梬嶩R瀐骴灲~椴o +�{� f醛Hg愔桞7早~8�(P﨨S,}鰦�蓏 +橁檊w j� {�頄銪��&1珣A�)賯WR)�#▲y?\�@F氾d䴙� 鎒Ё殊枢�,曺沸xM&�&4b2iC弝5挍&e 蚹VZ腡瓠d罘X誤!=娎兽摺緷圭6犽{Y�=饪豺T敾畳{)蚫�(上盒嗈渍�猊�埩�5F⑷$IWRm�哽�-�+狕4�k>nE&蟹�/L * 毵剔璾b珌#�雄 +琊濁xx�3輻*橃鈌鳙e饢w鞷套劷攰5墋曻髪袸fk�2;�泜2�癸ゃ攵诿淊4E6xhJ�-8;|搘?H3Y覗蜯1?� )捓6筱糮I�0艓�T�1UV�?W�"敽ubuD阃羠n鍈.媤踩C谷会♀�y�9�螨I�N�G苗kmy軮嬲搈��:,{�*zM_�iy逮_淛B�tdM`�9Y�)�:59竟NIrKC6冸璉秗衔惑q!\S秮徤扶�3⺌R��0Q�[X� !<渧y蟥�J%8��-!65槑q皲璹歝 Q.投�9 3諃Z鄲x:�∏}-颓�』w�#鹶葕觱j�aq�2M�=绍,+���#�1�� JeC罢�+敚 獣V玪酆咗71凌<祽�"G�<鯢奴�;鹸<茡 +相衪5鑎8雮y巺�8�9簇e0丌囆%4BE:鎅蘚p沙.卭@" 瀠%郛�6c臷j^Kq 簪>*}-� 0郦髮#嬾L豓�砂 %p&�<�;藥驜砀�8暊8異f轨�幡S}� o�裼W堞B焑*步凈幉陚K﹌�躭�?W筬<池&衠i2�7撩+P蕓SuAt孧`嵤慵Q<飪6)醪磚憫難M+/訝杽s^堇 鈇S7Z' �"摗E4sZ�2O�:搴�*ZQ:� 醢]翗鼷敍 !欹稫ak瘻Qc俐碄%蝲囓PKz${鵥覙�/B彑施@a�4zg霼!輳�O!�!敕<-�qimA岏� 喖瘋鄇嫐髏sr論埡陌鲿氬鏥F.梙 栺鯴R礘�>~黚�!矫苺�歰裙r^?K +;崍P棰攱灡# "y�E兆O�铈B匐腓yt廐鬧4喒e�(28BGu殱ANS扈KuUAt=z 鷱�'骕~Q� +u遯颤腥单=M�慠�^� �� +6i�8jJ舫I}Y辀NT-闛[HU�ji煃遏�$7Q顾葀/嫠B�t淛阮友蠻②蒿�9卬�挵ZF<愎,�4XsEX倆撣琛劃�jW軠"輐iW>|塡鄠翂�rx瞕br�/悚G塯^a爏疽O秄1悬殐�.H嬤k�2鋁�� +/�罄陾 +鮫犹�oBtvL蘿k採/鞔弟沌)-蚄踋�L;灦6澓臄dw鬸B盲�%宸Y�.跆�耴曢辺gO&)S怬击.�N4F6s��?�&D緱距~K6鲼埚#�2,芗*p�vg�?�洼�澀淊a9�%.X麒廈啵S=X�蛢g92+,C.f軩悆蟘畯*茻�!脺�*�*m匵1n鱆毱_轻U垐Q4酶M棟甑癩鹔鎥魝�:yj �澰㈧"��"`� 藈存n聝境諷p9� � 5跂�$��"壺!��7*铝踙u汙泵-埡q砩� 1KP�,H5徣閆渄M` �;磽:9@0X兩|1瑙#B鮒�#g歿u@鋛c)4槤q�?禾濪<�9痳AX畡焸濛�#團.SOyNK邖,,_Ⅱ](窗劬H筩1�顡)�鯨 2�+eK櫕A#�7酩谶嵼裂}这 蚘孄�=仡;s%8溅j呃1闁愂2�囜H茢趿/眼�eMG觶z�0I]阐汐嚭WP淫楍毆d!睽�5�%v 鸨�5廚填岃?>!N椤蕰焱輱忤�:沃��d��?弼氳棎窱�淤骺^gx魨犼喬 t�;�3馡短緥 驢犤崯4屗晻爔 I�<蠛�7CKv{]ㄑ�癓攡c|纬劘�1�6]抅oA Um.�尧瑃R╱I�� #攠~` +③��/茂硯r蠪覸疱缢'畂E籢!s"瑾/莚w#�)騼k魋酰�礪蟆某8�p?0閙�'$k嶠�6F镏焄<庉舞�;M迣_#f槛嵂pf!�5C_Ihn寯嚟Df榼蓺:�㈥z^@指煘譞wK�0�!bL[��:韤無D3�;话�|L婈 s偼鴤違SS�*用SZ~帣蟙;紇否搟�-�:桖���:収陁绱LOx�=3a�-�&�醘淙S�鹛m靽跽稫湏g�$qQn�0啟v糮^}d�<骧鞆緱昛mU)�6�y�赝HG@ <翀�?tQ 穜&�@隣錃.AFf閦�%J賎谮瘐*艆y庶,5�tN痕X駋x\8<6L愖蠦繢&$�:慕5贳�颠葉诹)>踳0銼Q( 痻y�'姗9腹`�┙XG蒻 援/Ds`A|L`�(珀莒:Oz�Q�4朅4P埾郁�媵栟EDi&�^悤� 踌�4讫��"没}|y祣糖ZU刽F,v_tdZ> D%�屙 �邂O藽P�,o蕄儲�)I騶薣3f忿椠豰S躠`h�D敇�z� ↗危&�,噍`�:Q譕;h�%ㄘ鉚bD濒&劆�<;\/�6鈣"�/�#9*�4YV槪S隁| =�&�岱,鍙i +^�軃碓聁-俼u2W媌p+祽^N全贺╠W陷△ 鉄褼 H泐�R蔟1u灗�鬅i?弌喋傳Z媺�yL6ぬ痫@T( 蓎綘V]�敏刁n[姙yNS束%轳$�K fp騝s艾棪1?< �鹯�8啯疓�蛉�!e�檣�"r颁a爔�/�.�?H买e]�8L憢z怩錜!�Z紱�.� l|FV竴礛�1�?譲洴XTui7^姀�8R4�繚邢�捞Y壾�.9嵤�3矋�;幔醯�戈|儵+`<EV{涾*r嬝 骉}娌藕�5$峐t�2恀et,�=祀}fM黬?ゥ^(�2�=O廲J去V┸f鋷1L轝稄骻 +鲴"�這籮=1O柶+社�獅C哑摵��窞m邍愍衖]忆愥版}粔b� +譶!ど��>婄$)衴�洔荟榄�-磒扈涑烒nX蘠詺Uc羀9K5颫3S-芶臩坨鍉駹�{卯�95q龋I?覴仢飮堾�.K円G谐實刖浺啋蝥喦2�&竱q$�鰁31�箅.Z�o顷�/bB瘿稘��&J┤]�級Lc鄄%絾全0�/"%`娇捡w絧M-:�/勬陖~醨�=_鳍撥�鍺﨤~撛w�m弎!H階唣22樨K�?裣\玙詜b|篾审┃Cb~褼i�=�(電鯋;'佭�9嚨}七廕1_�ńY\�,�A�1~;瀛]蒶cB�Jt$�$阷U@�5仫貅驺椘`澝Z誏�# V 妪;d[�0移�6鬓$谻Z_煾 埕玧]k樄��N� �@pi,z[�"-v[|"F徐綦摵壚鍙檾俋<8#市^��+&"坟鹥 +滐X4:T_H袾g?=,erO晉Jf伝楫瘰`an獭唆8憻Yw晜榤瓳BB保Sg霁贚屋�2 幙I枉捞G +A㏑俻胥!Xkc搻j砒闚]�xq堭蒐*邎垵^綾zdx錱mM硌�庾簄VX&�$�秝�䲠� 8b絃鞁^闊鬯N尪jG棘�GJf"蒌gf忇�(碭��X捯斲瘳]nDY奈J{6g凫� i|簝趷~襫�Z殣`曷荛昔号買:sc7� #C]* 謣鐓%缑P,吰ぃ琵TLV2\b檣8�姜揆HN菆澤5+o{鹑� R驫�/O獸e帝L~腣:�~"禥�$硕#渢R蛨棳��#缠$i峏Y颳醖C贅�? iF岠 �3O +j�2p��%�5攈疒t)梶,�肆遂弌x�vc譣�锢椔)�<惑Y壄b��!f1�)L��:q诊[RKub鵟烧*嗽�鍶蠵?吠楯�6颳澲Z聞窦[岬巙櫛晾瓆嫈Wm俤搪;豪{�#脲sL羏IU噰�5*捩�]G駹6済d[�$"*垞�7i� �92w諔|5*匸)妥k禸寽C6鸿驑鸳c�硳握F{�*穿:|:p錠qr皣"�3�/;]3鋑�"}]焇粮餟B� 銫圻X2z颍%�+�('S纅巽畄]媊D�殆=r{.�p�%*櫇 � G闆轶刃Z|媖縖�'鐹 �-t�%%籘6啄?[輠eヰ,3`缊 産坫�?�+溭W翲%8�l鵀mp碌蔪纳Y腇櫽婁�'薀DM閪z梙梮B篑a=鲌�瑮�,烚𓑡嚙p�-尶瘤;R�&c䲠��,P伲N�槛'缾麚p嶭旁gi礈��艷J}�.)�葩|!�+讋劄�澨烑缗俵�=�蜞� 粉�.乍�-枿x慛愤寷#俔屈�%鍎([�甜棰�3鸕yY+,栌两� w︺B�4柖倛悇嘮�(鲉s�{壞缉禘尷皽v5^採 鋐婭�7Ce氀z否Fk虬 �'乢~賒钗�畄潦媎wF20葟棩�)歵+瀱�榉�9 c'挙� d醕zパ綣毂愌殣矤蹂]櫝RF<烺檪嶫蜡L囹牝礀a竡盷+兙韬螩�訊`硌�L囹 刾甎*尬澿�'厅9漃崶m�颱谕p�,�4獕崨沟 ,� +r?�$0騷餜眀�瞣z鞢┡凷烤珅z乃��m~.a� 痓0蛕炬穢躇G�"謝z��薳吚�#:>� p1�8f'QZ瘼帜.豄+d铻�8媇雫 肌;>�f谓墺3玹2%=鄟W眽� +墇�&06l2�40a陖��驚聝 拑�聉嚉�20鷮�醡已窊/.壂6%�7!.}軉l鱬u 版!�;�g�4壘U灃P櫐z U钕l�玮秱离${�飶谠鮵鯜=躠 +浛l �gQ僾儯*\f駔�+F`樬W琉粂専鞞庨繡-鎐 =豜绨貃d侏T�!闥櫒,惼�6D篖|湤彝簨磵B鰼m俴皔i.ぷC誥A卲槙���' +�鹫m虮� 捀� 礻� �5淏#f�篠呤n愉x辬�(槧捜K�/T]v荜K7擫湓+ dDw4掔Fs�u扜 �0'r"8�b遅方暽梁M酝頸2瓑ki胏╭铦樥`._瞌郣G禛�9hN盗炯?隑驋爸N禒$8M9bMJ帡靳aw�!餮Ak犔:鳰耘 5護Zj⺁�5&叀�踉Rd砟h磷f脢� �5w�藧y榘 堋曡詉拤S8x-僰~d@谻P菕�暩婳�簆�驢舊�0n\AU鹈6墟楇U&攦%毒鞲nm=喜�(� 圼fs�0<�2,鎤ⅶ缑鞱罼:聊�︶' )Ы�眲)聳f齮鎖P氳 U2庼釈pv⒒e魱撺韥$袽A兽蝄0厫Hz�=稔阩�堠�%1攜蠽l瑓蚇[I[龆r煴}绉we轥鬬}�!� 粥�:�'邏渃祡酷M鑉搶茧�焤8纳c耨 Tf炐腊+`�詓:惒f冹 囈=e-a~【�/媷烲�;/䲣俗>悐�娼\b� 婭銖D夕{悪挘�2味檬計&沕("�&py�%'}螆膳x瀷饣須觿&v萻�!眎䲡/c�)鯎嫨��龋��� 侸vu�/G"� +檛�>=簸�!a诬B+耺l�曭fUM?(觱欮5=F%"��%眮傕瘸P!莨 ~ � Nqz�'KJ� �Ka�.蝛O禆]#皨� 蒒辸吵怐划H(鉓7%畑a#VC尲ⅵ㈩皝eglS�扟a杧芔<夜波骓�輧跇d:�n_� $s/`┯^K颠g鵃轡歋Y$辭伹� +l顨K飾魧�8紑醴�)尬2D矫鄰�1鯙u挲芓�>佔�妐�r讵8q�=齓�5顀x o�-C儥^呞 �6=('湥倝 +"員�!8臈Py2 84`n褙鯷n瑨Rf貽稥+7 Mr蓺G��莳E踺V扥CF�/畵r馰y� AEh轐驣各/呭M�<�'l\灇z煰ng�"瑾�&煻o�25)5擆6椆哥� 疨蒂U屲�;�秜Z寎�^栿�.Uh镈g0徜暝e�2﨩鷨艝7癚祽鯆+�骡r畄=踭< 爝YZI!r#衽帊*yT剈U]�=��,瀘�&j粡燓週a{�<�)�<{`�6z辸筢彃Z_HK枨搙~�'鯾逈M� 茽N3f誟撇ml筼&�W%尣 Nc洫鈎V�/ 条绺絻枏腠稦繗椔櫣�Kh�冨Q鐯� 儍�.鏢X挟r圯�犧� o蝺"枙S鵤倫芙U�+k跗畀�2 唪=�>6�d髱炻P雺粰{嵤淛KX厺),?m�釧�:Q#z恹R腀TJq 硉&s秓(恒�孛��袛3葃琗V C_洦Nt鵪|";j�:n~� I^�鞢^2(史淩pX�?偾K咶袞 恖m騡a�?侤'U�'M瑿頎痛覷庒Id嬟U錸X� :`鏡m嬼巧発UP苕)�.*kxDyZC鷇憆Ld幤a@`3�6﹑�奦儣<\蹸忶賄婮A爉S龓xz癍�A懮�礄冈▎l鯊r℡霞鋀徑U�废.9A悰影�.t╪f酞�O�协胖岅fY<*I鎐炱垔`;逭藙p��3硾:1阧瞌�" R戫�g<0:岮%啾萦禣+7)�$船(�$-M湵R9[Bh铮?-蕻鑚u涮颧YQ窤F貆伞mr9p恟�7謳呎F,<+Q倅梧Uy%鹝&Z服-*�8鯲-%秞薕锱yx嚒N瘍d圲#� d�5[p鸚顅墜蘺���|硲��4p;轭g$(邻d垄枋魯KG/笄kB鉍嵋珋髬即Y簎H桯4{丟焄�� 黩 P~Sx鮈统覶�8� 呌�.|鍈 忥9q竓`w泖-o烀靱�%噸\��i�>`屰{蹵�T�迸,jUK�*豹Vc�m捣JmM浓脚M┴[蹐絎壗昙z>馏铧熙䶮嗦嗓9c釵薕瞢櫖3�8g +黆黶 +符K{�0G捽漗蟵y.�3睲O俪w闖�4Wt寿mC%%軴�樃ηF笻F,痫溑$2oM饐�葜餫� U锁扳娱s甚鳼Cq遖sZQ%XQv� 嶒%騏o�匕掺瘿?�+蕹甦d��9�$澪j湀∥>嗆�4xq儱+囧)&稀覤拍峆 䴕煏o陥Z�9Z_禜蜵�:駐図粑m"*O糾珽B梲D莢�-涍HS斶�%Ol9�8差]a�徂悥�)z��3賒y凉栭�O�!* r鰍鎌洰樥嘐l 暎鏤⑵杤�洔�#脼x飱3罄J廚◢\糭]窽']Y�O娩吙]� (J��二融猖�彻�4衸齨鴉�,��)w啠罱讧�:E萐氋撦秈{=z螈?/� +P浿麅絮{藺顚~n@屐繬�円 ^銲�*� +KFp☉�(湥灟��k�)瀤�3� �8 鞳�4�V佴蔳〇|岫w勞S�#�<氝iFk-\)'譖H邐臷O耮+岼� �哆�t鈮j1I邉`﨤滹弲堫農Q)鯺鎼擽仐甏�!�&稂jO蓎蜑e樒-!Z�/縳沟囀Y!莈鐂l抺硊闾+�__哰R}A虧爀0�.&�I鏌'澇�:8gXg笸�;�+A鼂�*f�"騪b3))�� I\阳2S`.t蠴<坒@7'剢孁壝o 诅瀳︾?星嫮W墷鈆��韠 呋S%�&'藇4腰�嚢7趲'A幘淟V貘�1丿�*�蓯Xt2z躏#篡]9蝽Y�e眂蒸k帯雁x鋿鎿鯸��Jl缦�尀緋�(捄1U礊鎮醍慗J軾吨=Q繁R迊L捀齿�(栮!R菀酊槂�7洏 杔.n巯�'�( +釨徺p$硺B艬r�J虜薘�qdpKMS嚯@#甩冖6)�C樤bB澪腺 ㄞ谾v慇聥�-偯勍#`� 賂邯侖禗�&?�鎐n~杙N麰枨=闀r~覠轨;o`荔聄a獙糺�{媄宠?咾�畨�"u_趌�FE�&勭i\?�>餃e�穵[� �;VQL� 玽'诞柙婇w0[屨�u眥?較)^�9&@珏]記S>�'Kを�瞷z5胨掍�"1oS!i;� �譓杧Wt蠇, rc茠ijHc囚BK垳D詩槌塧"Ci鋫∴跶吻塓@?繚)鉏憣鶕課忮KN萴�2m�8>x�u硣5藑f抌uy��"=瑒�$[Nz厜�VW\O#eP!PcHCt� c7�5引焬D`��%║K厺窜織cj|鈳y愌姷� IC鱭-鰤5zhvz椽�?*|�鵖Ev瓜痣o!'匛纣饠麋!/湽儁8FL~憞V紘�$9l埌蚾�,罰L:^點灞嶰=�c�=唶覿鈩o羨Qx +�+K��嬖兔駡嬆I辥閾n]�a d� f`逄hh駶復*躞|p�k�v睊压�-[登q,�7`蓝?�R� +�9�滪�5>簵D燷頽�5w#� �'?�ОD豫r�2U埯4��0熂嘵4i�塬RI9�� 墶{�+d�墉恺栅帉沘x 影溂檫[l[轾変 纽L/败 糍浤*q逶Y┗|gL�A-苆晄RF傠P�I檵t0<甡_�%鯀w'劝�� 莡2_�>n稀�霋貊秈毇擶8mh称=槣 +Vx�3_w4?�<&鉲傢+te� vr�>欷v[e?慏���j]<葺��幊�6撫� ) 嬆E偽D`璆懝*2消D屔u�!�奲餱O 炃m這I�A2裧闳翗��g涺p蝘k剷P�-蚘绦鰏J鍚p�;%咃龝)e2 w_彅揖� +%┲寕�6W偮谏昰� Q'赼僛W>Bc5 绹与EF�" 騝 [.6{纰房嬖Kd翜m遧抍�s弱夿鸼�9(樢凍虸罚戠^@C剙AS瞊B噜艪q:厥飳)�?寞@�"睐�&5挶UH稭爅�熤Z5)メd8乂茹}蘃胼猔嗥阣迺扖�/�/脀顂~��娃/�樸Vf[HT� �響渔艡簞=讔;毤�|伭貧+﨓菽潣鼡)o*,|濔G�"锔ビJ粦yj邭較娜縭� 杨鮲@仯叵N2C柴7粚鸋G T墖陧=�%詷RG4稖p▆O贒zX珣I�竔GqI稫6�0:匿邀m�4 D薴a�硁�=^焬泸H3DむUd敹郱�4碾廦��Йx�0:Oa}謵X楱蕨}匔Q慢*�礧a甅�0;袱({n�"X|`K菧x踎童偖O4TK�)譾診k"VwCI.}籚灟�)L乀�Xg�-,汞3D燋&q攡�桔Q櫺稲J垷鈁�%]冖鹱棋~闹CW〃屘_lw�"�画苋�"�灬PV罶;�放�<縞孚陻o�/' +"雚p~�R)卥&榟FG#馹r��鍚�!�3飿`p}�;污衐綱j� 拴�3g�7煻� �+Z充脟始VS��&s�"=4褤蔕h滭邖�?殞砍8kC﨏9嗪醪鯦�+h�;蟏�-滛哺)~眿嫸�>厸QT�))�&QV��3QO錪虱�Ga氠2/菋� ��$剰?屢\\ (檬Oe5將晊l謚挢j蛅�;枳t秾�6嵚Q舰B蹙餂c1Q刪薪墑�a翟!p9颠8�e泾q圯�a �釡挥覍"R;� e饪l揋\f佳\w_詨F;(�而案0涤I:鹦奣軃��!R� h��/_\旭(涅RX p��@ヤ +|�>i�2$擿L�=�9碣⑽唓觲 樏�)<]忷阥j爍衆E脍垖铽Tc愎V�)�r+鯘瓾q��誐p鲼?=萸蒅 傛鼤rlW�窓QG�;�澘�*紬�=�w泘hdP �峪�縒c{造W篝� k�=2D硋%肝魵枿^Cb:;s:遰O彊阩{调嶎�-�'躔Y�!颼+痯膑T�,�'剞秷�効�� +n嵕!f\皰d楅茴 +"牐荗邗癞�/蠶h砽 讬坝怯珥奍 +&|<麜湧N 璔.維诂�'~茚.N]b沷泉$g�,x救O?}称�>{}�(圻��(\齳 w�昔�扴 ��`(隭fS�$ˋf�廔駡諤k曐蘂[糉Q$To酄ミv奸鍨W(}P╥ 况嬜tG� +泏<\)� 蟋S' |砶��4擖?{瘺鎢祈_�皋f疘邝zO纟曥�$P贏I4呣�4�(Z!%鸢-�6h�#鐠.罗V]`甿潌` Gm.1qD�4医;胹っ 鐫5~嬫欭j頼獹滱�.�擼pm4丯a釳�撶揩喝(鐵��熝��韢�<蓓}�4�>[ 蘣ndstream +endobj +485 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5648 0 R +/FirstChar 33 +/LastChar 125 +/Widths 5656 0 R +/BaseFont /THDDQC+NimbusMonL-Regu +/FontDescriptor 483 0 R +>> endobj +483 0 obj << +/Ascent 625 +/CapHeight 557 +/Descent -147 +/FontName /THDDQC+NimbusMonL-Regu +/ItalicAngle 0 +/StemV 41 +/XHeight 426 +/FontBBox [-12 -237 650 811] +/Flags 4 +/CharSet (/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright) +/FontFile 484 0 R +>> endobj +5656 0 obj +[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] +endobj +481 0 obj << +/Length1 1630 +/Length2 19123 +/Length3 532 +/Length 20039 +/Filter /FlateDecode +>> +stream +x诂碪T]矶%�盍Y富{pww]赋pwww囙凛�!偦籹箫]祍玘胠m隒9雹 +綈┙1P苻D咸滥惙�5vqV斗暦鐤毣籴壬E渶F K{;Q#��4�M,,fnnn8r�埥儑摜�@ウ珹MKK鳠�\��a�閘in狓 +幢w�趤﨎黖���`fi�((jI蒏�$湔@;爴� @雅仄� ki磗R天�6�&鰒�存甜K�`pv歑� 簺�1��N稏挝�栁s'#;羞��杤&6.��餡of�瘋滌�z佝谍S磜9�8Y:��*妸�籒悈锜芪��{晨灕�&.�呆/踎樋V悜3t龘�0祎v�1蝤淃/槂撳渴pq洞3�� +�N@s#'S牫骭樋��L�?��/�98豿�+邺_^��K�3衅�帣錹N羞苕杤p��鞀敐�=�欓遺S��肮濥5 �v嗿oFv6S�<=鑟J��� �}$�7PB� ��o濑W廅桮��鸀�+锤媿嵓戫���=2Fv�縲 胸9��b宭-m<﨩Q�誟r�`R ?c�3�K 涌晼吴栴@SEK悏捞孺锾W�3:賆��r�铏櫂䦆M章夷陬��m跈醑�邃攄%膇�7鯻帄り狃范�褝溄��䜩秝x�3sp鑉笜�究�q嘲oR� 堸?e9#悡�;@鏾週��掰|�)辇1;{�VGddg鷚埝р硥嫇觃��u�蚩�t毨�-蹧�[e�昃� O婈赭2C�8�5�伧噊qW菊�04M髚磞,�8硷I屿忲b貾訾/ +饈H +Q7(:8i�跛3N5⒔.e�@is0╋oO*)霔続Lw�:羄>R麚�鷆�=8 鶜�5腶v�4仭�潨R$=>P帊 鮘檑茫蛵鸍坞 +匟屣構'ōV�婭髛?^(Q阥o繦雐_F吿b�X*顜[Pt�2^滪_渜Hq�G橧�#H材�:唩掵颟腶俇h�諞σ�W7灢n��s執�.葠�7嚣�4鐹{�硕�;鈫瘠K�槉l哕蓲嬈詮犊渳蠆Z�� +蜍1A蹦Z=6 o袘沲╨欲�%T湰塉@兞�+b禧,幦A抎燻�#**�&鰗$踄l� 哎F@��,憎x>掴塒拈Ni果B頨絳≌/8諎め誩岆N奚誔朂z侥躵��!I8W改�5*鼗进|墩流捸7轨9咡渞酲铍悭m^耡运a桬,J銁鎴麈慏呠铏;�?艡АRa� +� +莙.x啄ΕF^馀墝蛊藕i櫔Z嚈� 掛a[猪岵}躘4J璃g幜c�饭�5~X4k!縟 ^x3T桨罻s奠b&:0�#DZ珈辸�㈢^�瞺C詿[-筚齳#攭�%嘖蟩9愆�*曹侏→暋葏[�#�2jU槧%}悳D忡膪莲矮�亓慃km媵�餥H{-0砭&hmE腖鉖庘圼cD,"H�R�軣[�!轪邐缁扺p暱l7瞗皥6邡X粣t�3韐 �苀杀S;,W讶丞K咊狞戤蠟x�Cu�9O埦p肸胄伺�>r 汱}T鶖⒀L姐烗*(�橤,6e嗉堽��7Ip澽XO慑牚� [赓8+虂譊蔢焐ゅ�+鉟裐��1怜<�缶萗L$l�*搷�.� ^阻?�+L摙X窶�;o�緎厖\嵓錏^橍r7y/O睸/�$�7竜� �慀3n�" W1H夎]sj禿6叆�f蒋�5崨� n(蓃�.�8`�53籯s蘈斷鱧{栮K渗e*铽胐�9r铰迁YA ;轢匿-Щ8<x�%內鸟�2嬱⿱9鳦�!礱f絷j瓽仙冣膩叀)^�/�%遟G4粼� �万=p<抴堲A�dm$向�沯槪冴�=伲?搮Z@g衖宱G戂鷮酈I跭稞憫~謦g`頧诟邞瀂碛vk�伎]肂N厡J洷蛋颏V&fゲ=S0醿�1G⒐�*7T yi稇Lq慨k�|7靿G诀矐P}昳懵0�9砸8+R蠑棆r陫腡吳&牟+8;魵n�#酵�"裥妇萗CV桘顤鱎迼J緪c闄&匒el閠篽買S,~�&U趀愍E\N颷hR\5mi擳$`rら籬:鈿ZE~H�虠R>vCjJ纩--j� C%犡�$禙c�3坨呩$索叁3�"獛踸鱭fnh 挾^q^�譿肦蚝↙L5�.僻Hb疜D +%�0M瓲颵;q愅�Cd肯�岼DF夑蒉赣;\~樕2F鎃刢湢hHq铜-宬<&顣Jz秩<啖\S護 �<磄逦b憷呿鑐]j脁妫�.蕕�檁1�)�)親�8�?'�/鮊)鮲t~ⅸ�卷解 諝b镯♂��8�&洊`鏜m[V\q繸^qd'�N[龟v�/砎姖�t鵅�)bN1fm攍^~M咅CLJau婄媽焽霱e茝#J^:$E礭bj褵-餩�#L鄎&)[*w�d7�4TN[紃8��柖�B慯泺孬Γ热稵�櫃鲝]爍�6喋8}?翉s0�鹭;2Sy[%(JW硙T露嘸�(幵�'�+�5僊Rb\雏勩沃U賙�0t咳聺?龋%�Y拟炕裋滓A|?�柕3,P偅5嵏�=!o馏�*n妵� +n�2/��q⿴碡� 沧K$h�>`_澼萩撴 f}姜p茑- 釈櫽渳橱迓Fk@怆病>滚忕稇 U鑰6谞釡Rxa敏)椰;-�_u%挪a鮐��"剜UuZ宦S櫰覉�5墏諁滖gQAV ��氉h�稀塷�!__梕�%5\n厧蓠� +0孥剋泷M彷�8%蜀<说|�烔�c諘|暨_Ⅺ T;6墢潁嬂骪&Rpn秔D*Y漐e�, x�鱊酡�纨蘅x脺$�.>P|種=2�瞷G.凖葁︺�阚廋eケf髶O橑�+櫰Uj葫u谟�%p徿n�){匋聗棌�"���秶�(贺鵗)[/n鋻m甀�,;�4匔�齑鲁潪蔋l暥�!N旀/P 袩M鋮F*�(嵩薦�=囟鹲鍹殙杞9梱wg<�595Z�4�.)嬴@嫈椬妇Z�� �42�$B=wV椘z�熪Ao�?V)腑;� +�*▃w匿E[甿[��5瑚潰0霢$ [^9'oY�4殨�4&cNI鍜<襦j2痄頻敚杨%Aw狕-J压崟猘zY5r�魨斴rd岄�+E騄g跅蹤u�3槢0猴�髏W�9 x糾m朿?邋d{徉 +<壻`F枋濏瀛筌禃薞gk銟豄-o囔Z锏屫Tu8�".簧归�4莅P邩銌�1鲜�=Z栄f坁�!j袠; 迃L撒�M9蠔}�8跾�:囕�锏�x陁lS摘i剚濻 �)�(CP�>璟�靭7糶蝛槲�熖�&曏H腻鯊e;w砸幨7漨� y)aP鴮6釨飮岷u%'鎁�p +i�1g�&鳸n橠彪�=訰穩[铀醔%m泆嬪蝁鋝觓y忱t兦sy漄m掦和hb搅GEYW猰H卭K簞z觲Y鹤�+PS农帹鐭�5�l獲@挲H氿奜�j� 趢y皃 �-*3Sz湰@|忢y滝掘{q减�q圻X<瘔�鞄沠:艈憥k9馑3�'o%掑$聰蒚Bi皠)S嬴嫚觀縇?�.稩&)勀_(翬繳4#(竍<�7(\租M羆畉忦Fh1�X;F�4囕�&凜n闗w緳窩b鵕悂]+'v┩匒笉I[情盽}�椖|H �;蛷9攅愌� � +VD嗏�:嘩,澜 察坾J(�-o軧ó鍧磒m�2�#劖w唉$B=`aC嬏�:䥽*�z)途�"�>曣;衯`I謥释》�+lm憘穲 >�莺灣鰨眦F,欄F� +3喲垓��%墕淾lu�5鬯S陚��gA詽JQ�7新dM,7slm疅鐡0;簡�悗粗L\~`s穦OZ�鱧v勩e�. +潰媥+DA =汌 樨*a/蛜玷�9�>饢胕�.S�6朊@帄aS猥瘄�侎S0�/h輧掩�(|櫉65q師S懎釚ɑvh┠]瑵1 �;H犒 <歋�蕓�-迢�遳齓薅�ZY�)V(>@y�'J�1瑸c萏殥H鈃夏\?iJㄐo多�8児AL赕訛Bt&�2鶮蒿� 拭 餲蜁閮B曣O�16D:/缪@悒*溳�m襟興V栫�君pE`i羽Ts蠱鯫:芵虭怵X蘊RR 鳜褄騁养萠\芓^�69ⅵ媽程�"櫫+熄岌j躢鄒麰�麥佉+|鶴咆▎馰qR 趫⻊�<猰愡/幸I 鼚頦銵Γ迀Q溚N鉗褲C覷G馢�)閐Y蝢С檦u�)J嶇P�4�]Ns韧B砛e幐QcpK獇� o蠔搱'^8妞�&�8杅;`榮0�%3#l;酞給�巳麝积壥� 赵�0��旜�)释$贿x5m[be�=A|宬.飂殱JX靸�籒2〗Z廠X?o+贛瑓濮鎨痫$?/牗蕝�2Bi9�%wU貎硩危驈s掫鉚哥j}O�$,E�"禞f鍲�董s8歛纍�:溄Dlc0銶锾Ec * F擙�!媓�'趃m骢񷆸� E橾=綱P●窻糱%E詵宔A惺踒�*�#�+vP僶铹Ξ谺4m�4姤V讴冖�6垫啟 �%螬�_�沌皙Q\譢?|�q灅吐f鋩塬篋ц柒襴屖訸吝瑛xf槅 捤UV柧縗 �D$s峫r�恜誖�潩滶LJd巷tl釿牨枯Mm05愹犲ri'�>溚A�槪(Ef +{Y�L[昐�蜆钚�$p幬仺�瓕JH兛P矺汓H�,滩'�+眯媱雯L操舽諽焂�)� \坭��閡柅�9�;o7磲.挿Xǹ蓮}�.寞o婬%�(�插n"aN!犸EfT�铈屿2孄柒肚pp諥搀V遥%�!�囀{lC日jBwM廩�ho�;�8帪弽?9紗�^膣窃畖�:�搗�ty僈弧g/錑Y#湈;螺��/|赌krp�2⌒*�罼�=�:r辏P�壈�G酶�%怤}簤p�=昣}抩Q +zQ�_朒d~訐�"釩7-XpT�钫&�lХ�6嘚r� 鉟�4z�~w嵂�?轺梘皰荆軏褸博鬲xT╤ㄠ衵茍L廇鷱揙b鞙��8硦�昸N軦!_剡1q辠M趎,�(�7嬢)粀= �櫣>&X��4觱尜W覸绮�:銇H?EN�5殅╆鋗� 42i瘉�T梵�箓2傴�告\OIS|r痷式^掞J恮羈f{�;骀救��0/]Sp�,殡晹鴫 衡骟B峓�[&梾鱔n寂@/y� 䞍漃厧時?霪}S jaB�躆[馡柾t蒜?J�澦掼<�B~篽⒑}铍3�>|醞n甧�3.�)j俐幵諑 .+:疼c圃h)q綪s黤潀��,伟(媸評棙駅倐迵凝� W/ H鵊�}16H=贳�6�0雚x鷶U堟狭夃g薽硟緱V桰�稜f统饽恇櫧�:砘1荕@SE_I岿_�7诰6;玢u頓μ,跸W.��螓錺?堨韋Q�J`�顕臹1C蜤t濺,p56慀� NY+櫹{M交@奣薬b齥 乡e�;�$�嵊/墮磁巪hg�0熴s齍洌矕Q膹邊�,h-釐^缔%定-�-S唪狽麽x1勵拜z PM妩xr掮如樭xa<秄$﨓MJ�>祟嶤桄譻N7缻S (堀盂!泄s8d噸囔b3USK.O@ 饶抰绔拃�1鏮詘赈肼庛BRa苹h�(U([鳞鳕 �!鬈簼� #璳wQa$繗仧眥蚍兇M鄔�#�!r鰴蜆拎{伿<鰌腾[輎个节嵛坆fm萖秨2�rve褚禥 庂�?F�-据华VcW霖篼" 蛒3迹倨昼顬O%翺v軤段蜦G�曗灺夳櫎m'犲 +�潚審��2o�8^U芒`巾奓纟机<凸y魤YT�(�0ピ﨩蓟ErR鱏惜闉�譥郮&rOnL岽j�h$弭jU ��u厪R讆顁盒芏p垐>u �;U署抁��菆誾0邐翡�7V氺挢t,4渘纚雖?檗�iZ籟D瘮夨3汿z糓萜扟tCE孩#X厗3$�徑婗�,啬抻黄惌氉佛�eu兕襖%�鸅8�&�/�L6粄 yMpW 蕋�*$~柼(�c�?^nj=/7F9y<膝�k锌+濫 鵘p2wc*Y祵鹀Z�!N|sC6M勊�,焷5嶯 �K:�7S軺gD2SR]緜責�+�$堓�p �: l�kr蔽臾Q欒珰:b5涗]芹仓翛跮i;A梌袇�-辝笮@虰焄幊� +褍谚Ⅰ龘�3銁r iAi/�慭.%a夦� +╭浶�C�{�粹脞Q&�'卄晪榪抬�2鲌�b颂"桟亅j{琞圸儠鶊X"婩鶊�$�W髊謌;vu瞪d饑.糒Y9b渡�覶鐈節吣�$n�W�$彗#徣捩咠\z{/O�N0鎅塮�嬊X�!Q��=蔢焥I枪懓� 寠��'?龎brc霷_yD鴇葰 K兡侯塓*魰B%藕N嘎I凴�1X购翄@皡�.� 颣�'�6蚯&聏�+嬞>!r鉅^(; +J阢鶺8T~a�-骣7蒒必 �(�%i沀畗B瓹=;灋oη揤b[?╰彷�$�鏼$�泷囖�" +忡嶵��%鑬j盓�3�熎�'J驌)&洢蓝<7.�)Q抆唛玓碜磱R魱Y�汑i駿=Gs渐粇勛4艬P梧n�9kN�&塀衢焢�佗全`�=J�#傔|�顬�/~0鼣e}罯*儘h7�xd_Φ�3D飨yh媦恕G(吀佗rUo胮V蕡`缿�.>IU鶝�8� +骁&:轵0虡 卂敡jΡ幛 $臁O贴钻=V怜娜q�4w�8G霢鈑 躘&�55@D{禞^�-i&�+z�:N^+U>�=璘~�*HnVV俕贕れ宍誇慘粑o蔅J 谚旂�○蔙巤薂熎矽a>笫K+蘨�щ呢陊�W,聐rSt+═�,�) 忡 垱躀獇pCK�K�R-碙掙跂#�鰼 鰶*蒇�]箯�1!ez9_w屌灺q荒{�橃B=�%獈)J�<阩l蛆頛=恣`q螨胨緮~浝(xY&d锰c� 馆&產a侊)砳x�懅�V噷V慷�u胛籪q\z$X錯4+�鯊�1wED[甩3V薍�,朡骯�=恱�肤銏�4 +\鐓Y证�:8犧y+爗�釋>鏸=�i朁氘Z?wJ@庂WO)w:�8Q攌鴠熃採v��zb� 碧振m鞘��7糟濓歛"�<�#�8�_魀袽6YwH伤歏4_� 立搘�� ,橦n!M �0B2T鴊羸�o胒a�:琂筈/讜.崢2X�`2�蹦,�潖3嬲Su�M#�65hq�Фe>q齞俤坑"蟬筫_篾xh]6=� $4,肂 :銉�蟠篋�2Z� 鶣惴�鴴H _逬3cYR0AA�4�橝滩m鮐k Q咛-T=s椷記fX韊T酱�趉;�pb|a[B?佝I侎俉犾 +欩u趐�]苣%��(决gz�7j[Eb 噿曂弜汽\扌/r鲘颫\犏p�/嶳-鱥>d幫i� を�+` ;(C炤騖欛�$K9�3�'Ck囉铿u>抅�2 i蔓刍�!我¨F{v啽dсO筍�2δ洈錰ο?釕q~�9":_瞏忮i]9t斔lZs壼xp蜐� h��=J(絭藂掀K� %|u �&U8奙釕]zU!熴�"蒪┮I嫜u鯪晿霺B渲趓j鹰=哗p壬迭� 壾��$:�Y�2Lx彎�b}顃佴]�貂忛懸唞�+爃芣肔�&+�賹pg� }F芊㈡ο�,牝5 膀@L鄢s8�Y]zhtt螿[唻�.�凢?憤騼�<莲歶該愁W� AuR&~� ��胥珊hj瀔 hm蟘謞NXM� Tk篕飯^�:蹬��#"�?Y�/\s��n陱$礚坐$┷4鐨_&ck� }栆GVH哙akU雿鰔�&瞛`U剘M頑嶦壹qdN��9E妕2ezI�(冟>罽!�翋傥w�5喈拓:l願�9)�'�酋鲎勅寒聒(\猚X V夜�%��艚曩h鼑飽萑t彜K″y聁菞疫愤頒r�3#N饏鉳1w焫#巵&�餏eq�)〤FQ�w灺k*�$GP�:jC�S C姺@�)3勮�d皺仡�0歋s鍂縗9眚Z�兇�癨晘�埚966)�>�%lF趚劦�7闑�,€$ ^噖W莍#M喍�>頹柳套妯脽墝柾�"牉W徬�,莣y1朌堽�OL�壖螿 W晀昉K曥遺��A.杏E瓵}趫||澘?疛w�+愜C!TG塉瑚禷b藤-9蜆躾FD盁� ti:Z遯筬|B�7蒥1u紺# 鞤0鯖般♀O搇礭诗╡�v磱IP囈�1sk麑>勏过X繾s&幉Szb鑯�>湆騉鰉愶�7h� `*��騍:i肴X6 酞蔱�3遛粼砽u峈魠顾勆E緄偑3\+逌򘢢0G异瑄咗E診婓\穭Z瘇D鴓CQ� 伌瑬钦P$姑�Ο嵛禚梔咟鬋|CmK鈟� 譬�0瑄\乵餐灣睾註}苚�v峪 b2t剝p褽齱;睪2鼾`DHc竨韷R�??縑蓑�哂z嵧�/@L�劑嘒櫥 腩�5喌0榹渡撥:蛽逻禌R=�6凒于褾:牦O矪WOu( 呎Kn�!潞�!j�>��(騡匡岋讳��72聴sC鳫(x怹1靋yw働饎搉翷5棻蕈U/?�0鑑嶐橡~絣AS弭左�3p=V9Y坣5>あQ蜛珹 +崧C緲鸏�&zQ颶$h蒀 濥蠪奌-蜰抁�蟶髨汤K7�85�'\)�办q��:經聪d*懗婰鞗$�1� +]�憱毉83燝苋 塈O螋伎賌}稇匣\簬F秭湆5x�Zqo怜J:(凪?辗F�%e癖㈩ +n$[}+Y{"�4T�A滖o}#�隐嚂P絸YRy锭% 搔�!�f"/�鸴栉闈е�毑E饤摙8~�б(d拣+��8�終y��#�X1硓彵m琎釂0俳歨荪�>禹9Y廾吉h陳麨 痬r� w瑸pL 袭@抰儦晼偵lu�=鹱~Y镇BB1崛炊壯倱-噷z�0q壉`捌级Yxw�胈�&賲叾讵5>^?b4w�爳詄割��梉�'熑?l澠U肺y灖g�&l4I柿�嘟g_&�*頿[)8粏Q� 竅1醬�2m/麠/Uj$珆-us痈�6x煰寊鏕PYh饴z笩鞩皏b;@方�8罝so�>鑫瞄捊d杀j<从帗'mM�0瓹O㖞癕F挐�倕MW諹碿�?6! �癃筟)愦jh]煓� �<凓鎲ρ蘂�>!著衾終I忽;-3,fw?嶭睙摰8岲K(a�$-K�&%悼U瀲槄豳v兩&硐喟�R�=鶖�{$�'1_p嫎�yX缜�&焮粠+�%F�2襵'�绥^,�0秺�藎.�O曚頏9B褺1靆?A10|E-佩縂� 湬虘v氛n翆bL�)x岋I8Pr� �椌i� |縰}簴聎酥o`鄪劵�"�#蹯y痜�=卸欢植U�秉j亯還煄椃A霘oP|淫夜A藚婬(iy+�9�蟑7Hb�%�.�0�>w闢bBM蚳�U3诣�emJ刔�%K樲s�W锱 f汰鼰P�逍}勂萀嘦妫{訌*犿柾G喡r�7劤�=狨i戻7㖞1筎��7淥�鈍棡�髬逴圭T@�犗|� +�4.l筂W�!漥绕^�"采洦C�: 煫傦`潈褲臭桙�;�鵖Xq}^D蘇t各�,[�鷤P轄Ca 锫磵E;鮱}��# u簿@廅)溑俢)禯z,�詈ゞC8��6甶6QㄍNg奴摻I铙陟�F鞳彲x#.痒_影(jz�L"距�%辶崻来3忇椞iH=程鵺趐H吣藁�婝泤a&l�<}芽鍐满U汸訆�{敎=a汎O�% S牦�i5�&H5J�$9!� r麡�*璯�4宾C�#>气U� .>冑娍��#T揋�.d踺�:睹跆�鱚kk魱�弇Fo蠏�Icju�-?/鶑喎聫?庝Y3翮地$眶鲊'怯C�8F$夸)}俴溂A"�廁>p迤h 暟颬1<]︵课�2埽�d8�,O3窰俀蛬e�芸�*&裓G醢� 掲洈U鎭ma簟匄蚇 ��Br洅衶抨鴃#<熛茿'E9皾FCK�1衅悤黧夂�5d扄梵窹Q笽z 胐腎梣1韗葘h熠蕅(鏠I�:r恅6�*\�J戕酀v�[慕{鏖犅=瀳艐牛骿C�!:9j枌攌笐j靲公*�诔8闷` q/q臟酧蜌u也莏;=勸j蝬颋洵�'�QC橢KD6侯Nv絔倔棉3狲榬⒈9突 +�, mm o_磨&觥儕篑挪�j牬牡V糕带e熶睼签Z祤懛儞巵}q剭U_鷖#毽g浶珖f� a擃,�悲� +蟠j8Hf )换秺簜a�<赛7繀砖�%�+苌崢躗?,熽�!鹼op�Lh�≮�!9�9哭XY嶖浅/5 浄襅|噪U�3b俨<霪�(鍔矬 �[&湪Ytb著濥�Y暷 @]筌ネt�-0 赂夳N;v?1`e┅粼濶V饋=Sv官戲�%畦5g)W鷲�<(A瓇泖缄捿去�閎[�鯽�榨x蛘� 乩�,*.}G歡�.碐�"�?鱈翚#w 婴f甉弘� 愘H䲟�7Л荴2伭�:@咚�碘f7蔇�LD蜺x聉� L6蟛�哼C棌*劋0X国缪�=厸漍銍b篣藬wK&熦鉖y�#Z獩|铳c溙hK碬s�\[4麆�<惪 �t� 砰荱�(9庐(臾忯祓*矩砤奘辘属�7脡d壽涀*桵仹 +�.跘輴�5登 6襝惫P�8 甁XK嶥僲�0鯌悩a苳�*�&&銊溋�!埵�%:s=闤鶿ó+鍟V1沑䲡籱w湗<窝.旖�=嗗r箝厼i萚UxA餁[簁胴壓°秅濷儏N�3\昋Z鱊铫"偗煜靧䲡�,臩y蓁瓭璖'卄*瘅蓵蛫�溜>圿|'�貓vr�($宂�`4鲦曎揌VUHTR佊2GMjⅩ:鐜$皞�撲~i.3 �猡�_⑺奤X仨家屁~�/ia笌醓鯳�煣�$敯,V鉃Tn�2�-�6濙_6儭楮r.敻刟�卅g酨7[c/钲qCN&[鯆X�辳 ?┻g�)鏖鑗试�M�-舻%与#鎏.蛹鉚 噟_凬地8嘽ku╣耈2赛}燼K蹛`'L栵&�$眾�.妪yN娷棾憌_J噀in�杫沟o┖礸簍瀙Gn韌!磭0�'BA簡緾驪U?鴤{�s63J媎^]7-N +�^豞'��'tё->鼊o0耛Gv&H,鎈|i弊琮鶯輫遬蕸穦b鉮���=C0;�'匓@岿衕'襹績�弒c禇贞D剴�╓臟)攪bs厃嗶蔳�逥�# 僡y9虴珜 庙AkO[�" (<罈飒k~繥螫了鲴帾蒯勯M啁蒶6羵�洞Qn竴�导)罸(h髛�+C蕒%� +g�搛侸^鷜颥�K負zv毋呱2R釋浀)剪�痝釴UJ�$Y勤n鯁蒕'赱wZc�垖(\@�沾s�F蜚o0�v柫@帨���VzN��%.*誊7�唜F諦嘑��△j2@瑿r�2�+�E鰎Lj�Th彬c揞}� 簹{[`:9猰瑖辺{$苍�A� !�幄�� 脖Xъ煞�-�樺�0珧o�?笉眏铦啜 d擁 止et恆2�-峣2Z�7R癠c*\琼=Do�怬�>厫�牆<�X嚀镒[g巆{Z詍f�蚩w醩惨e橴�,m�z戱f牕S揲 X絯�.7濇T瀆B.U彎q�乏M疐/諛逷悤X�榧扣�I� |�$蔕荣�)>7 �89�:A9I3� K賨� �)SI鸅癪缜耩�鱫鱚琬.堓�$?嬩睎;执罼P庤px��7嫊乯鸣讲粉I氰櫜�'浼K"髝.蔁Q�吣�0A.?ъl愑�蟁畩 信%N3標ХF�9辀拴げ�<纁ゾ嶄�帽鏀驓遃y�䅟樨"M�+N爤o�朹抡��<嘏x �sv7呀{鈟吶糼OQ!U�/砏S羒o(O铽W淗欽唃'x-�朔�4�酉0吋g撑+m憫o�_溮�1齅t 瑙﹜xq砱`(隳Z�G𜚷掭�"� 7莍閙从s�<}D�+1rlfI瘉(晣縴U>勆7Z眩癙誣.棩獡琟屄藗� 窲荑>]趙9S0E沬nhN� 痥0~xp�&^纆]皕x蠷h-_鴨結鱰NmYU[�梧c�'#炊锔� 滀;*�(2u踴Z�薋nX挦(顫寝�揭0则f'樨T髫胕悴 "o紩l1j崝臦X欺�?鉰峐{銜JH� 9蝦o鴳z傟�/~髀�:萮GW�E両=��.�0[珿Q昐荱��孶0K毵明�道呚�睔��摚~k/,腎凙�▇�?�,4@�*`7痦 葫�3�d5籜張3��C W椅篑|爂奰靭黧殹f蔯+T鬲V�;鵘[�wp�8I�pY(W枢祪 2jn堕盿韹崑拠諑�&ヒB(r轹�7Dk濗b賕7�1��"鵀褧Fgm�2赟`^� 罍焋�3瞯彝(誙u鉗z寞k毛�媥郫瞮q酕n5殢獊笘I� 髽'8�2J'>5h殕f綇��.=CD岿厊DL蒝圴遂竃埾7u頫j脯nF�B瓱Q^�5bI剌b柤鐋ek3矈岘�PYM +9迚W夁內驩{6Dジ �0�戻儘篐辵獯礋a,kZd�0笖h,镂X^p`���绒(mB鐋>持p)勎�耴�2橞��/ 拏趀��>QX嘗B鎕 +篪砏E鱞蔮�khc聛灟檲S4>z奜蝩[y錵88珊t錦萳玷� 5縩繙%� *哤侙J�5滉蠀94=然羅V�娝l籮鷯Q竗炋i箮{碌ld麿<!嬆ot�郧蚛:hY(�!迗�.氍]挛h繵痞>�9濢HV}9戣cV�=汄&窐�v`�N膿E剿��)蒁Q\隯詨85 +亓佝犑舲8�羭�1昬鞮沂蹕w槺S�# L?9!�枎涻-�o醻OZ� 0�&鼸� ,\槄�%DrE萼皋擰蹌` m�玽憁.cF沷萋倆?炛�*t鑳謧 !㈢y� 踜赛蕚~�=�<�+d趠┿tV��"熭髗�:�,楅�-�+O� .@畲斱V/彦酩p銒� 耙滾怘墠烡�&Z埭树e龗奺�!�3�� +�*�Q翉銅���X爃榭鲮�H兔� `俼漄#碑(緟z扸亿!嚸 +玥厞m +妒牢襹gR洪嵵�寔q 酄DR#� 擋�<褎|?︼嫛�,9姵﹉XD湋M +*|��>`\� +稉汼�"豁�冥E黃扥`6M猇,諌禇 盈�骑恁3t�-R∴~~)M裣Wr-%觳8棋0\Dem?憚� 蘌兽彵4m镧9h铑@碵�i22醩歉AB笱駶_tx\h阑U� 汳⺪-氩d根~燩\]ElS�#镸霓6� +�+O価趙努�%@<箛Uf 嘃;f髣逊]VO .檞鐯 \棒l辕倌b;療鶶UOX济技鯤蝚o@?X�A{'菈蔤俚O ﹒鹷?-u璑髾峲��β罏暭跎菫FL鲥;b烩�)齵P�.�嘍de:捣鴯A�6蕐薜逪臀)�6K渵l蒩 棿壿0|魨楢莡`Y﹗傡70約k籌Uqb礱~<`P菒U瞂,:乘 皯噌�.矄3=)g7��.詸榈� 溞wl'鮥�6鞻鳁2⒔c骹v钑5怉$钭j�腉雀姁鏾雗砯J 蘝A+緣 燋埮淴�p脬aS jM$礓|p_w葔飈踋8 e选 KF吅7測x  +龈�G� 够v�di癥STE鱒 xd� 膏疑�<咘鮒暧9�'緻\l赀眛">Y42O2OT$壺�W衛/栓w�柑挀� &緵堕%z6w灿B辮妫{U8犯� `�1趜k褺丫O皒�-Jc`�Eqq�%i熎=|cpa�񸝰3岀寓狫�I峠鼸� 胎醂虱R氊8焾醻跍 #%厄 b� g19嬲1 潧毾�;3"�)�7茵�>鲰8 鴰�7 b巎PK@鏃h@酼B�52椳<�6騁h慏臙聬jxz曗飤D�苛 �o�睌c钂祆)�4!%糎e置�.b;峬e�4蕮珙*崊AA済妥曻辢遼(捎蓽-慧/嶑#s昔Jx[鄂�;z�#蒡{i陛瀪�鈍�茦罪6�7kぷ軕業I4皌 /�3�%B6_�.\睃羙WE掿袷G�杫�6 +悍�#攲7m*輓�呹缄缱淉妁�<裢颉嶽� �'�,:黐�8鋓�孜\�5� +E陼铑�F*耟 峵б﹖KH��'1�&菀rt峷斃�髹}铢菓6�G,H +J鮏kph�儎洉�攱钜狞鞕l~]@ wML-r犈%aNq3瘠>.温[Ca挭�8<�8蓊3榎\;��3Z轱1x�z~v>蚇(钃�"Ys\蹖颽緊+�.実鉀x预�氿&�△筚芶^靽S鶼驵]M�9紱zoZm�(M&]�"=铯0懅d��琶%<岺�)褺暇oW�;By綺� 雙T乐)虞d真�涋=ak6 S+夔,▍睍ZG&�5O�+0e瑖漲 刐Gr魑U(4n�菇}濞�盝W�![^&B VO#杏霍o廩揎繧��9z'笈]� SS`剌o髦}暂酇Vi%s袤!B錰R�蚌�+�:疩 .聃蜩1鳣$獭�?K悪7J!ち*藕鬐lA�>K'鯛焩R� F蘭o`貆妳�亃皱� 猑闡袶醬f 頶豯賅�!YyLj摣 箸崿�XE趧�韓襜昀 +ur栯鹁�!ni圫(寃lxǒq8�:綛� +畴纔2K惎贏堍V愍氬Eg筴孭:1 � 竒lZ:]陸掫%tx�,\塤秲佾奫�嵘桅佑 ^x渨&倬n纎剿铮犖�呍 �/螁隇岏�z艍HP隌�'棑6精:媆瞍U闸�8}d(!隂蚢哢辍I�-踬$揄U;鍾諚NN?钰2馫@e�粮輞A)BJ5|魁唔5�鮰貢q�3p嶸强U[脉GLRC� C騂专~礅禷h5=8i�羥D椩彯 +ろx�铰kY晠鋕萒`柸惃P1�/弱*�"錒馻鯓Q鼹諰�:'&灤噉O顖"? 飙蘀�$C卌�跞|C癫�3�饒萮袍傿�濂鎬喦;悐e晞.r=n&炪捳緆dY邈忏aJ�)!覑P裭S嘷纻gp~�&鯘�帍舷馡茗呓7叽�@az6钅虱;�澔sw8KBRU唏胆精您6�鸠髹浴玧G 霩?1☆�賌揲bS��1x$砓赋�??��cF卙kc~珌昍媝秡嬵竉L鱕柞L搔�<瓧�-'"!xbd唢�洅輕KZ刁1挱�"屎U秵6-缛夬y :�7屣壌\l@w讣尵�& y隡9驵罧�瓴0n��7嶱$�E >n綪庼q�蔹僸at怢臮i'F7蟡QH�:~竾k$埧E`鱚剎l詖{穟锈y z絙�ijY0Xo隦齚+洫琞偽骎�榽C勄樃�朄� lco焫<檡y 8偲聣鍛mK恱V殌氪~E;睖F浗t�O勜F��胡9�+奕@w芝c幭H漌攱鯚C嫻[�.闋�'謃�:磙i�h-$皖�/紀 W階拷'魤絾�?[礥]qK*e畧�5匚幅yE狷�"鯳(�54uY#yd尌垽踲郪]*z�,讜搖;F=鸹_ 曚v@Y撺8'�5�&8鈨箔/�<>!�傧Sl配]賎�,\5葲貜鶽�=鯶{硘暴{阫鸧m悷a鏼靂K鳃=Vp)段.Y�*�;犰"~O葈漜�>曁'j齶M琪锟s�7]�#j@^f9&嬞F_觼S獸擌\��.驩颦婳�?棡憅�蜋鄱3灁盼疽瀠.-0:邔辥砪 滀蓏m軇��HJ|屫p|劁耐T-:垽]鞀譳湍醺�7�'ぱ浍8說栝岂踊�?d1釣蘅 緱Jh&;Lf辖� 飕�!�%>P�:�&氣佊;[嚙K8�伮紗筏捧�&鼞韚�1阹_(鼺Sh�襰礱錖翢 ��╉乙绨凯O�氒YA桃�μr秖馾/�1@仲獰䞍┢Hs憳磢 薓 卷忷v!r隃劎�$竵hB鴥_]�#闤z牡J�祆褘賧 6WJ� 喧�蕞G��5'J5^�5[ +|>]%观_枈玶p榲贞Q&  [餳�?鑀()〗骛J齫帿}舮R碩F/ep 衩+濷G +#�丵HV:j b鰕i鑷E\掍4a哞�佴�&盾 �-饽J\xNズ痾z颒敂k硔悡` ]瞝�E籹齊:�6堆樤箞%d筀*uT匷�1l+�(o�1vP貛閪+抟9鱜5/抄z梜儊�-a��\絵8蚰u胉 �:i5�n ��延Ho4g:堎Hv窅�.癲恱,�$<�*Z卅<�$缁錬|-鱟賯_;y銭倶颼u{�3O9垒T+ +b筽�緔 7鷙iC嵽鯖�臥X桵e瀅干\N�5f摴_M嗜孕甸屜缏H褆篃玛鞺韀c�m��> AK6賃񖗢W[�/姈矅锇櫔C娡#鵃7噋_�9%��幗9�9�s)﹋濋M礩o欅叩袋Z滂l泮D24X祗\]�2瑖� +缦敂�6,#TJ遫⺮L'?膙C哏 腺z9��蟳.Iu扉�(q�6'謜U嫞 ⺪�Wb$cT鑾撛6XE姽�0|璃a爥w�琐MHvw祅赔R涡 >▓劘黢,ЪW勒�L巢豎棈娑MUq_�>忛�,軹2豏�>彨A猐�挘Iaizp�3漿:r3儗�;汬塯 }F:3�*支U郝壨簽丧''辋Nf�塦L褄O唕�"l{s嬳(�)坈髽��7`嘔H撵P哖@%躩� 怈 鼗祵rb>趢񖨿{瞐�&祽䏝r柑� 膺蓈凳慛/�<阣Y.z?G駼�5oⅪ齋黏陇塈�陘I繝循� +駘韼V�5`O局尫赗�'峀oS� 螉谦篃徐c{饤茢�S鋶g�/dT�2�4}偍担#�=?md!��$@叴7膂q遙G墁�9璼謪梘闈f.i�%n廓� �4�0�YIhwBaW�&寿q��,脂�牓湪�:KE鯭1攁漎� y暩�痨讻W+Qb芿R!>�:X牸\u5QZ;沁合�.�3雤2痚`呐3涝MU兕琻懜阉�5龀,褃/Yc >�"竁C?�&櫱]燐阥�S糪�1嘧扇朓臫捧3拴3戌痒�/Gn虶鸛tl7)q�7~�于`#嬴輲`鐿u�,婌ny傿黡Z酦盷漇-棔穠斴奻/2Z捡霓o逍纫�)B2)薩k>婩� +拫'2虉藂�=鈲]6d昳硅服j1zひ�&�8J>:B驉+彲��1J�t玗� +総庍+Tz才粎{�8>碤緋 �si�\齅�偡O#X禚n�28鄎V4趖"P�"N凥藽獝 鈹� 禎嵸zB=*=6�涏tt)埳,�>v襈_��恡﹌A塐喖�#渔6�=鸾��飭誃�^S-嗬涺Q掮�rK捜q�%^ �*襩莻俴讙%J�'Z氡梵�O��%��﨩�巓|y抉q'�-莈ndstream +endobj +482 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 5648 0 R +/FirstChar 2 +/LastChar 149 +/Widths 5657 0 R +/BaseFont /MMQLGF+NimbusRomNo9L-Regu +/FontDescriptor 480 0 R +>> endobj +480 0 obj << +/Ascent 678 +/CapHeight 651 +/Descent -216 +/FontName /MMQLGF+NimbusRomNo9L-Regu +/ItalicAngle 0 +/StemV 85 +/XHeight 450 +/FontBBox [-168 -281 1000 924] +/Flags 4 +/CharSet (/fi/fl/exclam/quotedbl/numbersign/dollar/ampersand/quoteright/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/braceright/bullet) +/FontFile 481 0 R +>> endobj +5657 0 obj +[556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 408 500 500 0 778 333 333 333 0 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 564 0 444 0 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 0 333 0 500 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 0 480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 ] +endobj +486 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [474 0 R 491 0 R 495 0 R 527 0 R 566 0 R 606 0 R] +>> endobj +648 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [630 0 R 659 0 R 664 0 R 683 0 R 691 0 R 718 0 R] +>> endobj +770 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [752 0 R 776 0 R 788 0 R 795 0 R 807 0 R 815 0 R] +>> endobj +829 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [823 0 R 831 0 R 844 0 R 857 0 R 868 0 R 874 0 R] +>> endobj +905 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [878 0 R 907 0 R 911 0 R 936 0 R 940 0 R 1006 0 R] +>> endobj +1063 0 obj << +/Type /Pages +/Count 6 +/Parent 5658 0 R +/Kids [1010 0 R 1090 0 R 1121 0 R 1126 0 R 1150 0 R 1167 0 R] +>> endobj +1231 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1199 0 R 1239 0 R 1257 0 R 1269 0 R 1285 0 R 1292 0 R] +>> endobj +1340 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1323 0 R 1347 0 R 1357 0 R 1369 0 R 1387 0 R 1413 0 R] +>> endobj +1437 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1422 0 R 1439 0 R 1455 0 R 1459 0 R 1487 0 R 1522 0 R] +>> endobj +1565 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1542 0 R 1569 0 R 1587 0 R 1600 0 R 1620 0 R 1640 0 R] +>> endobj +1674 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1651 0 R 1685 0 R 1703 0 R 1712 0 R 1721 0 R 1728 0 R] +>> endobj +1754 0 obj << +/Type /Pages +/Count 6 +/Parent 5659 0 R +/Kids [1740 0 R 1757 0 R 1779 0 R 1849 0 R 1946 0 R 2002 0 R] +>> endobj +2072 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2057 0 R 2074 0 R 2089 0 R 2102 0 R 2117 0 R 2139 0 R] +>> endobj +2163 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2160 0 R 2165 0 R 2196 0 R 2208 0 R 2245 0 R 2259 0 R] +>> endobj +2292 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2266 0 R 2294 0 R 2321 0 R 2353 0 R 2376 0 R 2398 0 R] +>> endobj +2425 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2416 0 R 2427 0 R 2437 0 R 2471 0 R 2488 0 R 2500 0 R] +>> endobj +2549 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2529 0 R 2556 0 R 2576 0 R 2587 0 R 2606 0 R 2631 0 R] +>> endobj +2701 0 obj << +/Type /Pages +/Count 6 +/Parent 5660 0 R +/Kids [2684 0 R 2703 0 R 2719 0 R 2736 0 R 2750 0 R 2754 0 R] +>> endobj +2809 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [2790 0 R 2811 0 R 2821 0 R 2860 0 R 2879 0 R 2891 0 R] +>> endobj +2942 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [2932 0 R 2944 0 R 2997 0 R 3023 0 R 3033 0 R 3052 0 R] +>> endobj +3130 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [3106 0 R 3137 0 R 3153 0 R 3170 0 R 3185 0 R 3192 0 R] +>> endobj +3238 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [3231 0 R 3240 0 R 3244 0 R 3288 0 R 3304 0 R 3314 0 R] +>> endobj +3357 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [3344 0 R 3359 0 R 3391 0 R 3402 0 R 3412 0 R 3444 0 R] +>> endobj +3474 0 obj << +/Type /Pages +/Count 6 +/Parent 5661 0 R +/Kids [3460 0 R 3476 0 R 3516 0 R 3532 0 R 3541 0 R 3556 0 R] +>> endobj +3615 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [3607 0 R 3617 0 R 3668 0 R 3702 0 R 3768 0 R 3791 0 R] +>> endobj +3875 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [3839 0 R 3877 0 R 3881 0 R 3892 0 R 3907 0 R 3958 0 R] +>> endobj +3984 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [3965 0 R 3987 0 R 3997 0 R 4019 0 R 4039 0 R 4047 0 R] +>> endobj +4074 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [4061 0 R 4077 0 R 4106 0 R 4125 0 R 4152 0 R 4160 0 R] +>> endobj +4195 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [4184 0 R 4197 0 R 4207 0 R 4221 0 R 4242 0 R 4260 0 R] +>> endobj +4298 0 obj << +/Type /Pages +/Count 6 +/Parent 5662 0 R +/Kids [4284 0 R 4301 0 R 4318 0 R 4326 0 R 4356 0 R 4381 0 R] +>> endobj +4430 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4405 0 R 4432 0 R 4449 0 R 4468 0 R 4497 0 R 4523 0 R] +>> endobj +4575 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4533 0 R 4578 0 R 4627 0 R 4650 0 R 4672 0 R 4697 0 R] +>> endobj +4756 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4718 0 R 4758 0 R 4805 0 R 4839 0 R 4859 0 R 4880 0 R] +>> endobj +4918 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4904 0 R 4921 0 R 4940 0 R 4959 0 R 4979 0 R 4983 0 R] +>> endobj +4990 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [4987 0 R 4992 0 R 4996 0 R 5000 0 R 5004 0 R 5008 0 R] +>> endobj +5015 0 obj << +/Type /Pages +/Count 6 +/Parent 5663 0 R +/Kids [5012 0 R 5017 0 R 5021 0 R 5025 0 R 5029 0 R 5033 0 R] +>> endobj +5040 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5037 0 R 5042 0 R 5046 0 R 5050 0 R 5054 0 R 5058 0 R] +>> endobj +5065 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5062 0 R 5067 0 R 5071 0 R 5075 0 R 5079 0 R 5083 0 R] +>> endobj +5090 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5087 0 R 5092 0 R 5096 0 R 5100 0 R 5104 0 R 5108 0 R] +>> endobj +5115 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5112 0 R 5117 0 R 5121 0 R 5125 0 R 5129 0 R 5133 0 R] +>> endobj +5141 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5138 0 R 5143 0 R 5147 0 R 5151 0 R 5155 0 R 5159 0 R] +>> endobj +5166 0 obj << +/Type /Pages +/Count 6 +/Parent 5664 0 R +/Kids [5163 0 R 5168 0 R 5172 0 R 5176 0 R 5180 0 R 5184 0 R] +>> endobj +5191 0 obj << +/Type /Pages +/Count 6 +/Parent 5665 0 R +/Kids [5188 0 R 5193 0 R 5197 0 R 5201 0 R 5274 0 R 5342 0 R] +>> endobj +5491 0 obj << +/Type /Pages +/Count 3 +/Parent 5665 0 R +/Kids [5427 0 R 5493 0 R 5575 0 R] +>> endobj +5658 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [486 0 R 648 0 R 770 0 R 829 0 R 905 0 R 1063 0 R] +>> endobj +5659 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [1231 0 R 1340 0 R 1437 0 R 1565 0 R 1674 0 R 1754 0 R] +>> endobj +5660 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [2072 0 R 2163 0 R 2292 0 R 2425 0 R 2549 0 R 2701 0 R] +>> endobj +5661 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [2809 0 R 2942 0 R 3130 0 R 3238 0 R 3357 0 R 3474 0 R] +>> endobj +5662 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [3615 0 R 3875 0 R 3984 0 R 4074 0 R 4195 0 R 4298 0 R] +>> endobj +5663 0 obj << +/Type /Pages +/Count 36 +/Parent 5666 0 R +/Kids [4430 0 R 4575 0 R 4756 0 R 4918 0 R 4990 0 R 5015 0 R] +>> endobj +5664 0 obj << +/Type /Pages +/Count 36 +/Parent 5667 0 R +/Kids [5040 0 R 5065 0 R 5090 0 R 5115 0 R 5141 0 R 5166 0 R] +>> endobj +5665 0 obj << +/Type /Pages +/Count 9 +/Parent 5667 0 R +/Kids [5191 0 R 5491 0 R] +>> endobj +5666 0 obj << +/Type /Pages +/Count 216 +/Parent 5668 0 R +/Kids [5658 0 R 5659 0 R 5660 0 R 5661 0 R 5662 0 R 5663 0 R] +>> endobj +5667 0 obj << +/Type /Pages +/Count 45 +/Parent 5668 0 R +/Kids [5664 0 R 5665 0 R] +>> endobj +5668 0 obj << +/Type /Pages +/Count 261 +/Kids [5666 0 R 5667 0 R] +>> endobj +5669 0 obj << +/Type /Outlines +/First 7 0 R +/Last 407 0 R +/Count 9 +>> endobj +471 0 obj << +/Title 472 0 R +/A 469 0 R +/Parent 407 0 R +/Prev 467 0 R +>> endobj +467 0 obj << +/Title 468 0 R +/A 465 0 R +/Parent 407 0 R +/Prev 463 0 R +/Next 471 0 R +>> endobj +463 0 obj << +/Title 464 0 R +/A 461 0 R +/Parent 407 0 R +/Prev 459 0 R +/Next 467 0 R +>> endobj +459 0 obj << +/Title 460 0 R +/A 457 0 R +/Parent 407 0 R +/Prev 455 0 R +/Next 463 0 R +>> endobj +455 0 obj << +/Title 456 0 R +/A 453 0 R +/Parent 407 0 R +/Prev 451 0 R +/Next 459 0 R +>> endobj +451 0 obj << +/Title 452 0 R +/A 449 0 R +/Parent 407 0 R +/Prev 447 0 R +/Next 455 0 R +>> endobj +447 0 obj << +/Title 448 0 R +/A 445 0 R +/Parent 407 0 R +/Prev 443 0 R +/Next 451 0 R +>> endobj +443 0 obj << +/Title 444 0 R +/A 441 0 R +/Parent 407 0 R +/Prev 439 0 R +/Next 447 0 R +>> endobj +439 0 obj << +/Title 440 0 R +/A 437 0 R +/Parent 407 0 R +/Prev 435 0 R +/Next 443 0 R +>> endobj +435 0 obj << +/Title 436 0 R +/A 433 0 R +/Parent 407 0 R +/Prev 431 0 R +/Next 439 0 R +>> endobj +431 0 obj << +/Title 432 0 R +/A 429 0 R +/Parent 407 0 R +/Prev 427 0 R +/Next 435 0 R +>> endobj +427 0 obj << +/Title 428 0 R +/A 425 0 R +/Parent 407 0 R +/Prev 423 0 R +/Next 431 0 R +>> endobj +423 0 obj << +/Title 424 0 R +/A 421 0 R +/Parent 407 0 R +/Prev 419 0 R +/Next 427 0 R +>> endobj +419 0 obj << +/Title 420 0 R +/A 417 0 R +/Parent 407 0 R +/Prev 415 0 R +/Next 423 0 R +>> endobj +415 0 obj << +/Title 416 0 R +/A 413 0 R +/Parent 407 0 R +/Prev 411 0 R +/Next 419 0 R +>> endobj +411 0 obj << +/Title 412 0 R +/A 409 0 R +/Parent 407 0 R +/Next 415 0 R +>> endobj +407 0 obj << +/Title 408 0 R +/A 405 0 R +/Parent 5669 0 R +/Prev 267 0 R +/First 411 0 R +/Last 471 0 R +/Count -16 +>> endobj +403 0 obj << +/Title 404 0 R +/A 401 0 R +/Parent 267 0 R +/Prev 399 0 R +>> endobj +399 0 obj << +/Title 400 0 R +/A 397 0 R +/Parent 267 0 R +/Prev 395 0 R +/Next 403 0 R +>> endobj +395 0 obj << +/Title 396 0 R +/A 393 0 R +/Parent 267 0 R +/Prev 391 0 R +/Next 399 0 R +>> endobj +391 0 obj << +/Title 392 0 R +/A 389 0 R +/Parent 267 0 R +/Prev 387 0 R +/Next 395 0 R +>> endobj +387 0 obj << +/Title 388 0 R +/A 385 0 R +/Parent 267 0 R +/Prev 383 0 R +/Next 391 0 R +>> endobj +383 0 obj << +/Title 384 0 R +/A 381 0 R +/Parent 267 0 R +/Prev 379 0 R +/Next 387 0 R +>> endobj +379 0 obj << +/Title 380 0 R +/A 377 0 R +/Parent 267 0 R +/Prev 375 0 R +/Next 383 0 R +>> endobj +375 0 obj << +/Title 376 0 R +/A 373 0 R +/Parent 267 0 R +/Prev 371 0 R +/Next 379 0 R +>> endobj +371 0 obj << +/Title 372 0 R +/A 369 0 R +/Parent 267 0 R +/Prev 367 0 R +/Next 375 0 R +>> endobj +367 0 obj << +/Title 368 0 R +/A 365 0 R +/Parent 267 0 R +/Prev 363 0 R +/Next 371 0 R +>> endobj +363 0 obj << +/Title 364 0 R +/A 361 0 R +/Parent 267 0 R +/Prev 359 0 R +/Next 367 0 R +>> endobj +359 0 obj << +/Title 360 0 R +/A 357 0 R +/Parent 267 0 R +/Prev 355 0 R +/Next 363 0 R +>> endobj +355 0 obj << +/Title 356 0 R +/A 353 0 R +/Parent 267 0 R +/Prev 351 0 R +/Next 359 0 R +>> endobj +351 0 obj << +/Title 352 0 R +/A 349 0 R +/Parent 267 0 R +/Prev 347 0 R +/Next 355 0 R +>> endobj +347 0 obj << +/Title 348 0 R +/A 345 0 R +/Parent 267 0 R +/Prev 343 0 R +/Next 351 0 R +>> endobj +343 0 obj << +/Title 344 0 R +/A 341 0 R +/Parent 267 0 R +/Prev 339 0 R +/Next 347 0 R +>> endobj +339 0 obj << +/Title 340 0 R +/A 337 0 R +/Parent 267 0 R +/Prev 335 0 R +/Next 343 0 R +>> endobj +335 0 obj << +/Title 336 0 R +/A 333 0 R +/Parent 267 0 R +/Prev 331 0 R +/Next 339 0 R +>> endobj +331 0 obj << +/Title 332 0 R +/A 329 0 R +/Parent 267 0 R +/Prev 327 0 R +/Next 335 0 R +>> endobj +327 0 obj << +/Title 328 0 R +/A 325 0 R +/Parent 267 0 R +/Prev 323 0 R +/Next 331 0 R +>> endobj +323 0 obj << +/Title 324 0 R +/A 321 0 R +/Parent 267 0 R +/Prev 319 0 R +/Next 327 0 R +>> endobj +319 0 obj << +/Title 320 0 R +/A 317 0 R +/Parent 267 0 R +/Prev 315 0 R +/Next 323 0 R +>> endobj +315 0 obj << +/Title 316 0 R +/A 313 0 R +/Parent 267 0 R +/Prev 311 0 R +/Next 319 0 R +>> endobj +311 0 obj << +/Title 312 0 R +/A 309 0 R +/Parent 267 0 R +/Prev 307 0 R +/Next 315 0 R +>> endobj +307 0 obj << +/Title 308 0 R +/A 305 0 R +/Parent 267 0 R +/Prev 303 0 R +/Next 311 0 R +>> endobj +303 0 obj << +/Title 304 0 R +/A 301 0 R +/Parent 267 0 R +/Prev 299 0 R +/Next 307 0 R +>> endobj +299 0 obj << +/Title 300 0 R +/A 297 0 R +/Parent 267 0 R +/Prev 295 0 R +/Next 303 0 R +>> endobj +295 0 obj << +/Title 296 0 R +/A 293 0 R +/Parent 267 0 R +/Prev 291 0 R +/Next 299 0 R +>> endobj +291 0 obj << +/Title 292 0 R +/A 289 0 R +/Parent 267 0 R +/Prev 287 0 R +/Next 295 0 R +>> endobj +287 0 obj << +/Title 288 0 R +/A 285 0 R +/Parent 267 0 R +/Prev 283 0 R +/Next 291 0 R +>> endobj +283 0 obj << +/Title 284 0 R +/A 281 0 R +/Parent 267 0 R +/Prev 279 0 R +/Next 287 0 R +>> endobj +279 0 obj << +/Title 280 0 R +/A 277 0 R +/Parent 267 0 R +/Prev 275 0 R +/Next 283 0 R +>> endobj +275 0 obj << +/Title 276 0 R +/A 273 0 R +/Parent 267 0 R +/Prev 271 0 R +/Next 279 0 R +>> endobj +271 0 obj << +/Title 272 0 R +/A 269 0 R +/Parent 267 0 R +/Next 275 0 R +>> endobj +267 0 obj << +/Title 268 0 R +/A 265 0 R +/Parent 5669 0 R +/Prev 179 0 R +/Next 407 0 R +/First 271 0 R +/Last 403 0 R +/Count -34 +>> endobj +263 0 obj << +/Title 264 0 R +/A 261 0 R +/Parent 179 0 R +/Prev 259 0 R +>> endobj +259 0 obj << +/Title 260 0 R +/A 257 0 R +/Parent 179 0 R +/Prev 255 0 R +/Next 263 0 R +>> endobj +255 0 obj << +/Title 256 0 R +/A 253 0 R +/Parent 179 0 R +/Prev 251 0 R +/Next 259 0 R +>> endobj +251 0 obj << +/Title 252 0 R +/A 249 0 R +/Parent 179 0 R +/Prev 247 0 R +/Next 255 0 R +>> endobj +247 0 obj << +/Title 248 0 R +/A 245 0 R +/Parent 179 0 R +/Prev 243 0 R +/Next 251 0 R +>> endobj +243 0 obj << +/Title 244 0 R +/A 241 0 R +/Parent 179 0 R +/Prev 239 0 R +/Next 247 0 R +>> endobj +239 0 obj << +/Title 240 0 R +/A 237 0 R +/Parent 179 0 R +/Prev 235 0 R +/Next 243 0 R +>> endobj +235 0 obj << +/Title 236 0 R +/A 233 0 R +/Parent 179 0 R +/Prev 231 0 R +/Next 239 0 R +>> endobj +231 0 obj << +/Title 232 0 R +/A 229 0 R +/Parent 179 0 R +/Prev 227 0 R +/Next 235 0 R +>> endobj +227 0 obj << +/Title 228 0 R +/A 225 0 R +/Parent 179 0 R +/Prev 223 0 R +/Next 231 0 R +>> endobj +223 0 obj << +/Title 224 0 R +/A 221 0 R +/Parent 179 0 R +/Prev 219 0 R +/Next 227 0 R +>> endobj +219 0 obj << +/Title 220 0 R +/A 217 0 R +/Parent 179 0 R +/Prev 215 0 R +/Next 223 0 R +>> endobj +215 0 obj << +/Title 216 0 R +/A 213 0 R +/Parent 179 0 R +/Prev 211 0 R +/Next 219 0 R +>> endobj +211 0 obj << +/Title 212 0 R +/A 209 0 R +/Parent 179 0 R +/Prev 207 0 R +/Next 215 0 R +>> endobj +207 0 obj << +/Title 208 0 R +/A 205 0 R +/Parent 179 0 R +/Prev 203 0 R +/Next 211 0 R +>> endobj +203 0 obj << +/Title 204 0 R +/A 201 0 R +/Parent 179 0 R +/Prev 199 0 R +/Next 207 0 R +>> endobj +199 0 obj << +/Title 200 0 R +/A 197 0 R +/Parent 179 0 R +/Prev 195 0 R +/Next 203 0 R +>> endobj +195 0 obj << +/Title 196 0 R +/A 193 0 R +/Parent 179 0 R +/Prev 191 0 R +/Next 199 0 R +>> endobj +191 0 obj << +/Title 192 0 R +/A 189 0 R +/Parent 179 0 R +/Prev 187 0 R +/Next 195 0 R +>> endobj +187 0 obj << +/Title 188 0 R +/A 185 0 R +/Parent 179 0 R +/Prev 183 0 R +/Next 191 0 R +>> endobj +183 0 obj << +/Title 184 0 R +/A 181 0 R +/Parent 179 0 R +/Next 187 0 R +>> endobj +179 0 obj << +/Title 180 0 R +/A 177 0 R +/Parent 5669 0 R +/Prev 79 0 R +/Next 267 0 R +/First 183 0 R +/Last 263 0 R +/Count -21 +>> endobj +175 0 obj << +/Title 176 0 R +/A 173 0 R +/Parent 79 0 R +/Prev 171 0 R +>> endobj +171 0 obj << +/Title 172 0 R +/A 169 0 R +/Parent 79 0 R +/Prev 167 0 R +/Next 175 0 R +>> endobj +167 0 obj << +/Title 168 0 R +/A 165 0 R +/Parent 79 0 R +/Prev 163 0 R +/Next 171 0 R +>> endobj +163 0 obj << +/Title 164 0 R +/A 161 0 R +/Parent 79 0 R +/Prev 159 0 R +/Next 167 0 R +>> endobj +159 0 obj << +/Title 160 0 R +/A 157 0 R +/Parent 79 0 R +/Prev 155 0 R +/Next 163 0 R +>> endobj +155 0 obj << +/Title 156 0 R +/A 153 0 R +/Parent 79 0 R +/Prev 151 0 R +/Next 159 0 R +>> endobj +151 0 obj << +/Title 152 0 R +/A 149 0 R +/Parent 79 0 R +/Prev 147 0 R +/Next 155 0 R +>> endobj +147 0 obj << +/Title 148 0 R +/A 145 0 R +/Parent 79 0 R +/Prev 143 0 R +/Next 151 0 R +>> endobj +143 0 obj << +/Title 144 0 R +/A 141 0 R +/Parent 79 0 R +/Prev 139 0 R +/Next 147 0 R +>> endobj +139 0 obj << +/Title 140 0 R +/A 137 0 R +/Parent 79 0 R +/Prev 135 0 R +/Next 143 0 R +>> endobj +135 0 obj << +/Title 136 0 R +/A 133 0 R +/Parent 79 0 R +/Prev 131 0 R +/Next 139 0 R +>> endobj +131 0 obj << +/Title 132 0 R +/A 129 0 R +/Parent 79 0 R +/Prev 127 0 R +/Next 135 0 R +>> endobj +127 0 obj << +/Title 128 0 R +/A 125 0 R +/Parent 79 0 R +/Prev 123 0 R +/Next 131 0 R +>> endobj +123 0 obj << +/Title 124 0 R +/A 121 0 R +/Parent 79 0 R +/Prev 119 0 R +/Next 127 0 R +>> endobj +119 0 obj << +/Title 120 0 R +/A 117 0 R +/Parent 79 0 R +/Prev 115 0 R +/Next 123 0 R +>> endobj +115 0 obj << +/Title 116 0 R +/A 113 0 R +/Parent 79 0 R +/Prev 111 0 R +/Next 119 0 R +>> endobj +111 0 obj << +/Title 112 0 R +/A 109 0 R +/Parent 79 0 R +/Prev 107 0 R +/Next 115 0 R +>> endobj +107 0 obj << +/Title 108 0 R +/A 105 0 R +/Parent 79 0 R +/Prev 103 0 R +/Next 111 0 R +>> endobj +103 0 obj << +/Title 104 0 R +/A 101 0 R +/Parent 79 0 R +/Prev 99 0 R +/Next 107 0 R +>> endobj +99 0 obj << +/Title 100 0 R +/A 97 0 R +/Parent 79 0 R +/Prev 95 0 R +/Next 103 0 R +>> endobj +95 0 obj << +/Title 96 0 R +/A 93 0 R +/Parent 79 0 R +/Prev 91 0 R +/Next 99 0 R +>> endobj +91 0 obj << +/Title 92 0 R +/A 89 0 R +/Parent 79 0 R +/Prev 87 0 R +/Next 95 0 R +>> endobj +87 0 obj << +/Title 88 0 R +/A 85 0 R +/Parent 79 0 R +/Prev 83 0 R +/Next 91 0 R +>> endobj +83 0 obj << +/Title 84 0 R +/A 81 0 R +/Parent 79 0 R +/Next 87 0 R +>> endobj +79 0 obj << +/Title 80 0 R +/A 77 0 R +/Parent 5669 0 R +/Prev 71 0 R +/Next 179 0 R +/First 83 0 R +/Last 175 0 R +/Count -24 +>> endobj +75 0 obj << +/Title 76 0 R +/A 73 0 R +/Parent 71 0 R +>> endobj +71 0 obj << +/Title 72 0 R +/A 69 0 R +/Parent 5669 0 R +/Prev 63 0 R +/Next 79 0 R +/First 75 0 R +/Last 75 0 R +/Count -1 +>> endobj +67 0 obj << +/Title 68 0 R +/A 65 0 R +/Parent 63 0 R +>> endobj +63 0 obj << +/Title 64 0 R +/A 61 0 R +/Parent 5669 0 R +/Prev 55 0 R +/Next 71 0 R +/First 67 0 R +/Last 67 0 R +/Count -1 +>> endobj +59 0 obj << +/Title 60 0 R +/A 57 0 R +/Parent 55 0 R +>> endobj +55 0 obj << +/Title 56 0 R +/A 53 0 R +/Parent 5669 0 R +/Prev 47 0 R +/Next 63 0 R +/First 59 0 R +/Last 59 0 R +/Count -1 +>> endobj +51 0 obj << +/Title 52 0 R +/A 49 0 R +/Parent 47 0 R +>> endobj +47 0 obj << +/Title 48 0 R +/A 45 0 R +/Parent 5669 0 R +/Prev 7 0 R +/Next 55 0 R +/First 51 0 R +/Last 51 0 R +/Count -1 +>> endobj +43 0 obj << +/Title 44 0 R +/A 41 0 R +/Parent 7 0 R +/Prev 39 0 R +>> endobj +39 0 obj << +/Title 40 0 R +/A 37 0 R +/Parent 7 0 R +/Prev 35 0 R +/Next 43 0 R +>> endobj +35 0 obj << +/Title 36 0 R +/A 33 0 R +/Parent 7 0 R +/Prev 31 0 R +/Next 39 0 R +>> endobj +31 0 obj << +/Title 32 0 R +/A 29 0 R +/Parent 7 0 R +/Prev 27 0 R +/Next 35 0 R +>> endobj +27 0 obj << +/Title 28 0 R +/A 25 0 R +/Parent 7 0 R +/Prev 23 0 R +/Next 31 0 R +>> endobj +23 0 obj << +/Title 24 0 R +/A 21 0 R +/Parent 7 0 R +/Prev 19 0 R +/Next 27 0 R +>> endobj +19 0 obj << +/Title 20 0 R +/A 17 0 R +/Parent 7 0 R +/Prev 15 0 R +/Next 23 0 R +>> endobj +15 0 obj << +/Title 16 0 R +/A 13 0 R +/Parent 7 0 R +/Prev 11 0 R +/Next 19 0 R +>> endobj +11 0 obj << +/Title 12 0 R +/A 9 0 R +/Parent 7 0 R +/Next 15 0 R +>> endobj +7 0 obj << +/Title 8 0 R +/A 5 0 R +/Parent 5669 0 R +/Next 47 0 R +/First 11 0 R +/Last 43 0 R +/Count -9 +>> endobj +5670 0 obj << +/Names [(Doc-Start) 479 0 R (Item.1) 1160 0 R (Item.2) 1161 0 R (Item.3) 1162 0 R (a00036) 1566 0 R (a00037) 3302 0 R (a00038) 1267 0 R (a00039) 2467 0 R (a00040) 1539 0 R (a00041) 2486 0 R (a00042) 1366 0 R (a00043) 1367 0 R (a00044) 1540 0 R (a00045) 2469 0 R (a00046) 1567 0 R (a00047) 2466 0 R (a00048) 1237 0 R (a00049) 2465 0 R (a00050) 2468 0 R (a00051) 5136 0 R (a00077) 985 0 R (a00077_1d2f2751b0865045486c9aa59d0d0971) 3275 0 R (a00077_20541305548441e5dcb2e1e7e6f300eb) 3278 0 R (a00077_2391bb18db5f620e0e9fb848ae5ba5e9) 3265 0 R (a00077_27df2817055bc099821d96eb60a40b34) 3281 0 R (a00077_31471b5e27bda51832d0fa49bd6d9b54) 3251 0 R (a00077_5361ef75bfbdb469b5cc31f0060a2670) 3267 0 R (a00077_564bab93ef6a268a5de2fab885c1d32a) 3269 0 R (a00077_5e16ca335dfd7394527f602da879fca2) 3284 0 R (a00077_7a520a57d7d0541524f34a7685635597) 3272 0 R (a00077_cfd36e02c7498d766ff802575e981612) 3256 0 R (a00077_e0b137a3875ad12a99e5e3e0e177fd12) 3254 0 R (a00077_e707c39412e09d3a47f0b3c5dad33725) 3262 0 R (a00077_e80af46ceef63eab3c786525370ae720) 3259 0 R (a00078) 986 0 R (a00078_4b1b1436b50ed7638aece35f41421196) 3298 0 R (a00078_4da86e9feb5e5835eb15163c2cb61116) 3300 0 R (a00078_a9825b5977b2d4dec66e6bd09e6ae6ea) 3295 0 R (a00079) 987 0 R (a00079_1513a9e88921750d2a611b518f6fc207) 3311 0 R (a00079_9a84c69ec5a4705ccb1ca99fcd120add) 3309 0 R (a00080) 988 0 R (a00080_16a3a3056f44b7245ce085b937a269dd) 3339 0 R (a00080_447eb700ea7a185e0f155934995d49e5) 3329 0 R (a00080_468c04fff28e784f93ebc3f0849211dd) 3335 0 R (a00080_4c6f843219271d25766ee5969e435d1a) 3327 0 R (a00080_5e274a8f8b5fb2b3999c54fe27c76e46) 3333 0 R (a00080_6df929b448ea98bc44d41f5e96237bda) 3341 0 R (a00080_78f82878f3fd0e7401c7d7d3b3fefbef) 3337 0 R (a00080_94fcc9f5c47f419040d849ce58beae35) 3331 0 R (a00080_9dd8edeece221c853a4c4516bf1b01c2) 3321 0 R (a00080_c39694ece9526b84012f90f2bb00af9f) 3319 0 R (a00080_e261f08e1556287d241764fb2e99fc26) 3324 0 R (a00081) 989 0 R (a00081_164124d48fe85bc98d9a300382a5245d) 3351 0 R (a00081_5595902fd42d874e35a70206fad8f6d0) 3353 0 R (a00081_b42c7af6114fde5d21206a2e18a7d3ee) 3349 0 R (a00081_b5801722740492e69bcc73687476009f) 3355 0 R (a00082) 990 0 R (a00082_17aacf7c5e2046c1f3ab50faa1b2f7eb) 3365 0 R (a00082_19b82696bd84a803250cbf9812f2f125) 3377 0 R (a00082_31f25efccba9fd043047133d0d0ba5ab) 3369 0 R (a00082_a408ca8630154ebd039f37a828399f7b) 3380 0 R (a00082_a6bfaf327ce839ba70accd71014398d0) 3386 0 R (a00082_b973f2e16c2883a8a0164d716cce5a31) 3372 0 R (a00082_c3d1bfbb1abde31973c015de97ce2f84) 3375 0 R (a00082_d6bd03239291629676e4c0286ebb650f) 3383 0 R (a00082_fda184638130452f3570966acc5b97f9) 3388 0 R (a00083) 991 0 R (a00083_20fae11b540a561c622a0d74cb4b9f97) 3399 0 R (a00083_5e8637b1514d03eb3eb12dc9a502e27e) 3396 0 R (a00084) 992 0 R (a00084_c3fa0fa86689e3e7c039a16c16861dbe) 3408 0 R (a00085) 993 0 R (a00085_04833004cec509a41c502429df308e35) 3429 0 R (a00085_0560495c60c68d62617ff1f3d0c424a4) 3437 0 R (a00085_0bb4f34164e7207c2db26b77f23ccfff) 3420 0 R (a00085_3592a1f5ae100db2ed9c0810b41c7bc7) 3423 0 R (a00085_503c2994a4e52300516e2b820f0fc65b) 3427 0 R (a00085_5ed2615cec9e633d90ac5968771976eb) 3440 0 R (a00085_668cab7d54ff0a2fc2a2179ca06b0798) 3425 0 R (a00085_68204df6bde3e3c27271ebde10579a57) 3434 0 R (a00085_a312da7b5f6441140721ec7e55f345a8) 3431 0 R (a00086) 994 0 R (a00086_cca775e46d4405b7775b328f7694f7e7) 3451 0 R (a00087) 995 0 R (a00087_e8eb428c05bc1dee022246a3063d277c) 3470 0 R (a00087_fe557d333c06cf65f52023f45f5b0a3a) 3472 0 R (a00088) 714 0 R (a00088_0cd09beee671e7e9efb0b4aced10249e) 3485 0 R (a00088_0ef3ae2764714bf90620075c374c262e) 3497 0 R (a00088_1df6aa054ef2fa634ac4c6f418228285) 3488 0 R (a00088_2d9732cf5752d30bd11cb25dc7d0c8d3) 3522 0 R (a00088_3347ef1b6e8581402445d1a0280c7a14) 3500 0 R (a00088_4289c59840b128f2f6526e9da2711d47) 3525 0 R (a00088_70297b3e6d4eaae7bd828cb50bd1efe3) 3491 0 R (a00088_79510aa86d3fa0a0fc6cfc49b1da7279) 3482 0 R (a00088_8f6b08a5ba2a8d75ca7279e2056aa8c6) 3494 0 R (a00088_97f9e1fda815bfb8b1f4577c355ade20) 3528 0 R (a00088_a5f58074435cdc180f17de69651beebd) 3519 0 R (a00088_db7a3fadb68df5fdd37e8b91a2c751ea) 3503 0 R (a00088_e3aa9cc25e45b663e6aabc54c013019e) 3512 0 R (a00088_eb9fcbd3c9b0a795dcd63f33c323d65c) 3509 0 R (a00088_ef661afb3aa82f0437d2ed8d3c20be76) 3506 0 R (a00089) 996 0 R (a00089_aacd5fa1806e0f0dd0bc96dd36507ad8) 3537 0 R (a00090) 997 0 R (a00090_1abbbe7bc5d7d033c727691528b85b8d) 3549 0 R (a00090_b684c17bf48c8e3b3fcf97b06b4c6ee1) 3546 0 R (a00090_c9273cc1fcdaeeddc523ca9f34977e06) 3552 0 R (a00091) 998 0 R (a00091_0ec6a6cbcbfd191d393738c16d54e5e1) 3585 0 R (a00091_266ea23d75c83f15b915ce54100e51c5) 3594 0 R (a00091_308463cc7b3d45d2dbcdcedd4cde9bb9) 3570 0 R (a00091_4619e69ec86a47f6abe945b39ec7f63a) 3573 0 R (a00091_55be3d5413ce49c5c4f5576def12d7ec) 3576 0 R (a00091_55e7764a9f6ed05aaa98076b9f6770a5) 3579 0 R (a00091_7d472d8b3c41618d39c93c4ca92fb3f4) 3561 0 R (a00091_805f8fd5533a6d4b6793e0645005da4c) 3597 0 R (a00091_967def494c68cfc8a08d5a6c4dbbc25d) 3603 0 R (a00091_a3f2d9cb20290019b2743e8df31a2f8b) 3564 0 R (a00091_a6d51f3fa5da9b7f9cd37ae69600c04a) 3600 0 R (a00091_b15853725b233d526b291db0347d4ecd) 3567 0 R (a00091_babb9c2be394477af97f79507bcb4c86) 3582 0 R (a00091_e27f4949613fe3c1de5a839af01d99dd) 3588 0 R (a00091_fa0fe6ca88f692d22af70ff007411252) 3591 0 R (a00092) 999 0 R (a00092_4dc3294d67d705f7248ef57e4259424f) 3612 0 R (a00093) 1000 0 R (a00093_0c816f34c0187f2154c91a18d3ad87c8) 3661 0 R (a00093_1deb2899508216804823498a69378118) 3622 0 R (a00093_3983b45977630418d3038231aa8b68ed) 3642 0 R (a00093_3ad48284f7a91f78bb24096aad89056e) 3698 0 R (a00093_494ea6767a8a8fab7abe96b799d6c3b3) 3699 0 R (a00093_4f39f0fe6a820d260fe6cddf9ccaa832) 3686 0 R (a00093_5d8996950cdf3d8130cc3ad340eb9dff) 3657 0 R (a00093_6157452bdc9921f44b2e22e4b5969258) 3662 0 R (a00093_7675e6b9adbddbd545d3aac8ca092fbb) 3664 0 R (a00093_7a58d95f7f7827789ff52500e3d16c34) 3696 0 R (a00093_7f7bb2145afba5df00c6e10ddefa8ae1) 3658 0 R (a00093_8082509468b2ac80ed7746aa1a5bc4f7) 3663 0 R (a00093_8da121d6e50992ec55778f9b2141552d) 3666 0 R (a00093_b4622e2599ff3a592db09219b2641682) 3665 0 R (a00093_b6e9a75167bdddd561373bc5b6ef501c) 3697 0 R (a00093_b93e351c3abba0c700b26b7b07e9527d) 3660 0 R (a00093_dc69abadd5aa07c7d74f9292db2cd93c) 3659 0 R (a00093_e292b8977f6b81265bf14e1676face3e) 3652 0 R (a00093_e9205a565ea3c911a785fc4e87c91a58) 3700 0 R (a00094) 1001 0 R (a00094_025ffa46b799fa6952719c499a3ae17c) 3740 0 R (a00094_0f27e16ddcf7199d514968204966f559) 3722 0 R (a00094_2541fae506eb111ff1be2372e0919839) 3743 0 R (a00094_619d9755a5d4aaabdb2e5e6ea4c1e0bf) 3752 0 R (a00094_6af8a59d0ab8967aacea749d6e59ac90) 3749 0 R (a00094_71721395f1c7c42b8bcc111b339bea7c) 3746 0 R (a00094_7a59f0dad059786238d8ab604630e7f3) 3716 0 R (a00094_7f0ab3fe3bcf1e3ed9f5950cb4474ec1) 3755 0 R (a00094_85d7f35662f7be20cd84e789a290dd4b) 3719 0 R (a00094_8cf0ca17b115ff2e3071b3fabcc43b53) 3710 0 R (a00094_8d4e08d051b35b1c710c3be5b8bbfa05) 3734 0 R (a00094_a81fff4836049cb3c018304d77337554) 3737 0 R (a00094_af7a8a5310ad945de38f5b3ac755ae7d) 3728 0 R (a00094_c8f124419a231f38bb6cdf5041757a27) 3731 0 R (a00094_dc7001682017599549f57771f4cd1b9a) 3761 0 R (a00094_dde3cf9a57445814d01b3c67da08afdb) 3764 0 R (a00094_e1e60d56ea87dfa09230e25ca5ecf2fc) 3707 0 R (a00094_e45b31a0a277dd5325ad2a332358b21b) 3725 0 R (a00094_e57281f5bef284bc9545834ef8ed4a96) 3713 0 R (a00094_f4a1d8cfbe270393a2de02b0c743e474) 3758 0 R (a00095) 1002 0 R (a00095_280a0c2a93544e597f92bbacf36ee1dc) 3781 0 R (a00095_4da1d7815516cd2b5bda3a66fdf05198) 3784 0 R (a00095_8a661a2d544100b82d0d14a1985083d5) 3775 0 R (a00095_981392e295db4d024eea95805c51c371) 3778 0 R (a00095_c8afa29e0aa5e789d6929b366d98ba56) 3787 0 R (a00096) 1003 0 R (a00096_47140aa52cb9e6a2de38fdfc5da08df1) 3802 0 R (a00096_51bbbe3099c10ef26119ddc2aa51e35e) 3814 0 R (a00096_569382bc53aa64c227e57efe88fe13ac) 3805 0 R (a00096_6f8c65cfc8242197bcc3cb5b4735b16f) 3811 0 R (a00096_8587178a29882482be20c2822b402b96) 3808 0 R (a00096_858f970feb7462871c814953697a8ad7) 3835 0 R (a00096_a80e8d0fc768525fa3bfb3d4e4cf260d) 3820 0 R (a00096_b20096ae4953caaa42f6bb2373c4494c) 3826 0 R (a00096_be2c98748e180c1747823cd2fb8ecf0e) 3823 0 R (a00096_c92d2f194f096e84791f95d7e8f0ba92) 3832 0 R (a00096_e82f68cb91d8688a619d55d2a8572979) 3829 0 R (a00096_ed119a030ebd3bf7c30a12071c27d441) 3799 0 R (a00096_f1684ad96b8acf54154688df3883b801) 3796 0 R (a00096_f20186ef441ef5b600e8544a0f2d8d81) 3817 0 R (a00097) 1004 0 R (a00097_134ec55c3d5abaebfed4ff8edfedf1ea) 3862 0 R (a00097_2fca02673894f222b01ad2d3a4d7dd79) 3870 0 R (a00097_5960d82e7aca2986b8509a0d87d6cbc8) 3846 0 R (a00097_5a3116623c6a7da7c82db6c301ae0da3) 3865 0 R (a00097_606d2729bf411ade69044828403a72af) 3868 0 R (a00097_6925d46b2819adb474a5f0036f02dd7d) 3852 0 R (a00097_7092781c50dcad50f473888585c85b83) 3855 0 R (a00097_8ae6395641b7752dce47881e20cee970) 3849 0 R (a00097_a6487b9c1c773b32656065d0e19bf142) 3858 0 R (a00097_e87913860c6b05c6e6b060639b950098) 3860 0 R (a00097_fb60f42593d305ea36d9b4303722696e) 3873 0 R (a00100) 1064 0 R (a00101) 1065 0 R (a00102) 1066 0 R (a00102_2e52037249bb98d7bbecf42e275beb07) 3926 0 R (a00102_4350350ce0d4595876743d4c0a720bcc) 3918 0 R (a00102_55735650f879293d9b7b5fda6753d147) 3942 0 R (a00102_6a327c0ffd40f69fbcd5f01f12e5745c) 3922 0 R (a00102_6aaa9da3d0f8d4c0799516d46d939942) 3934 0 R (a00102_72d99b1623afa14bd58c667b748c2ddc) 3928 0 R (a00102_7bf0c086c7c41c12cc63324327932d91) 3946 0 R (a00102_876c82c946543cd70c141e41417138e0) 3944 0 R (a00102_8ee5e2c8e517d6e4f2198057f81e93c6) 3936 0 R (a00102_96eb4534b574ece96ed36806039f73d3) 3916 0 R (a00102_9f6c329c04baba17fe0f5b2a6597d713) 3932 0 R (a00102_bf4401501f1389872141a78b63f325a3) 3940 0 R (a00102_c72f8777ccc45ae274449ea7a9f3de04) 3930 0 R (a00102_dd685a0f8b5e76a2687cc0f306813bfb) 3924 0 R (a00102_e7250008b68d1909d54040515eef8ebb) 3920 0 R (a00102_ee60b8757bacab269b0ccd7c240bf01d) 3938 0 R (a00103) 1067 0 R (a00104) 1068 0 R (a00105) 1069 0 R (a00106) 1070 0 R (a00107) 1071 0 R (a00108) 1072 0 R (a00109) 1073 0 R (a00110) 1074 0 R (a00111) 1075 0 R (a00112) 1076 0 R (a00113) 1077 0 R (a00114) 1078 0 R (a00120) 1079 0 R (a00121) 1080 0 R (a00123) 1081 0 R (a00124) 1082 0 R (a00125) 1083 0 R (a00127) 1084 0 R (a00128) 1085 0 R (a00129) 1086 0 R (a00130) 1087 0 R (a00131) 1088 0 R (a00131_1273664aba3e6a2a46e87dcb1a5f19ad) 4480 0 R (a00131_1d5ce7047650f3ecee0814dbc8714099) 4488 0 R (a00131_5320d4457a472d8888ec1905bc0e0a1c) 4475 0 R (a00131_5f2e1fcf0055d20ce17664b1027bb9eb) 4477 0 R (a00131_692d80636342d564422ccd9296ad568d) 4491 0 R (a00131_88460bea09a462d0e22511cb567eee14) 4484 0 R (a00131_890e822616a6839dfbf51dcb591b8e99) 4482 0 R (a00132) 1111 0 R (a00132_1273664aba3e6a2a46e87dcb1a5f19ad) 4506 0 R (a00132_1d5ce7047650f3ecee0814dbc8714099) 4512 0 R (a00132_692d80636342d564422ccd9296ad568d) 4515 0 R (a00132_88460bea09a462d0e22511cb567eee14) 4508 0 R (a00132_890e822616a6839dfbf51dcb591b8e99) 4519 0 R (a00134) 1112 0 R (a00135) 1113 0 R (a00135_534d9e416324fb8ecca6b9cb4b1f6a6a) 4540 0 R (a00136) 1114 0 R (a00137) 1115 0 R (a00138) 1116 0 R (a00139) 1117 0 R (a00140) 1118 0 R (a00141) 1119 0 R (a00142) 657 0 R (a00142_authors) 1137 0 R (a00142_g155cba6121323726d02c00284428fed6) 1235 0 R (a00142_g2f8f70c30b9ee08a103fbd69a4365c4c) 1148 0 R (a00142_g2ffbb9e554e08a343ae2f9de4bedfdfc) 1144 0 R (a00142_g3d4c8bd4aada659eb34f5d2ffd3e7901) 1196 0 R (a00142_g7b04a0035bef29d905496c23bae066d2) 1146 0 R (a00142_g7b5319b5b65761a845fcd1500fde4cdc) 1215 0 R (a00142_g905451249dca72ce0385bf2a9ff178ee) 1233 0 R (a00142_g99e43010ec61327164466aa2d902de45) 1145 0 R (a00142_g9e97a0b4d5cc7764d8e19758f5da53ae) 1197 0 R (a00142_g9ff1e8936a8a26bff54c05f8a989b93b) 1219 0 R (a00142_gad14bbbf092b90aa0a5a4f9169504a8d) 1147 0 R (a00142_gcd3ac045f0a4ae63412e3b3d8780e8ab) 1232 0 R (a00142_gcfae9053e5c107a1aed6b228c917d2ea) 1217 0 R (a00142_ge3c821e3a388615528efda9d23c7d115) 1236 0 R (a00142_ge469332907e0617d72d5e2dd4297119d) 1221 0 R (a00142_ge6bae7dc0225468c8a5ac269df549892) 1143 0 R (a00142_gfa82b860a64b67d25ab3abc21811896f) 1234 0 R (a00142_pt-autovars) 1153 0 R (a00142_pt-desc) 1141 0 R (a00142_pt-impl) 1157 0 R (a00142_pt-scheduling) 1155 0 R (a00143) 649 0 R (a00143_g41bf109b6a45328d5744c0a76563fb6c) 1312 0 R (a00143_g54a466311575a727830a92a6c3621cb2) 1305 0 R (a00143_g5eced097547fd3fac4ba2a255493d921) 1307 0 R (a00143_gd85fc90c30d1fc37c63c4844be5fe09d) 1309 0 R (a00144) 651 0 R (a00144_g12b467f314489259dd718228d0827a51) 1341 0 R (a00144_g20bc87e5c063c3f4b01547be6e5a0148) 1338 0 R (a00144_g30e827f33eacff55ecb4d8fb5a11d5d1) 1345 0 R (a00144_g41d37ea1e3bd24f7b51e9409aceaaa80) 1342 0 R (a00144_g5323320b7316647042016f17c4e881be) 1344 0 R (a00144_gd8e8bc9bc0e2ea4a24a8a024fd3a7f7c) 1336 0 R (a00144_geb79c914cf137e6d27fd7583e5a66679) 1343 0 R (a00145) 652 0 R (a00145_g22f140b02c354dfebcc7ad481c3bcd68) 1382 0 R (a00145_gc48ed5f0d27721ef62a3ed02a5ad8d2e) 1378 0 R (a00146) 653 0 R (a00146_g1024f8a5fa65e82bf848b2e6590d9628) 678 0 R (a00146_g2c64c8c36bc84f9336f6a2184ea51883) 1409 0 R (a00146_ga4360412ee9350fba725f98a137169fe) 677 0 R (a00146_gb81e78f890dbbee50c533a9734b74fd9) 1411 0 R (a00146_gbaf0bb2b6a4424b4eb69e45e457c2583) 1407 0 R (a00146_gf20aaf4292cb0d2a1b10bc0a568b51fa) 1408 0 R (a00146_gf5c2ad5acf3cc23b8262e9ba6a15136b) 1410 0 R (a00146_gfd5ebb56a1bd1da9878aa886a2075e80) 1394 0 R (a00147) 655 0 R (a00147_g04b053a623aac7cd4195157d470661b3) 743 0 R (a00147_g0a8bb9d6d0f1f56852ccfccbbad6c5d8) 804 0 R (a00147_g1a1bc437c09ddef238abab41d77c3177) 716 0 R (a00147_g26a14b8dae3f861830af9e7cf1e03725) 715 0 R (a00147_g58bb90796c1cdad3aac2ecf44d87b20e) 750 0 R (a00147_g61db1dcb7c760e4dd5d60bf4e5576dca) 745 0 R (a00147_g64a238a5c02640a7a4aef004163aeb47) 1471 0 R (a00147_g79c4110211247df3fb30b8cf1c4c02af) 1520 0 R (a00147_g7b2ac4b18bd2ac3912fe67b3b17158c3) 749 0 R (a00147_g8096b0c4b543dc408f4dd031ddae7240) 773 0 R (a00147_g81ac47cee1c18f6aa479044069db7ca3) 805 0 R (a00147_g8411c95a4d89367ad2d9d6bde1a3d537) 1483 0 R (a00147_g88d2ccf7cd821f89d9a8df7e3948b56c) 746 0 R (a00147_ga20812098a4663c8a9fc4ce8e95391b6) 1516 0 R (a00147_ga87feebc7cffd4d8300e776cf64e4fec) 1492 0 R (a00147_ga8933ad15a2e2947dae4a5cff50e6007) 744 0 R (a00147_ga9de254b8aa308eb4aab17efdde622d2) 1484 0 R (a00147_gaa585784b0914cac1d37f07f85457008) 1518 0 R (a00147_gb5fecbc62edd128012cea0f47b57ab9f) 742 0 R (a00147_gdb971fb1525d0c5002f52125b05f3218) 772 0 R (a00147_gdd1ab3704ecd4900eec61a6897d32dc8) 771 0 R (a00147_gde6634974418e3240c212b9b16864368) 1485 0 R (a00147_ge5ab69d40013e6cf86ef1763c95d920e) 1517 0 R (a00147_gef14e83c046e19ab9fe9d1bbcca276c2) 1464 0 R (a00147_gef6c4140c632b6a406779342cf3b6eb6) 747 0 R (a00147_gf2dbaceb10c67783a115075b5b6d66df) 1515 0 R (a00147_gfbd5fc486dfdf6bf6fc9db52b1f418c4) 748 0 R (a00148) 1654 0 R (a00148_g118e9d76568ab81ad97f138d4ea1ddd2) 1668 0 R (a00148_g165b603ec150e26efec7be199c9c2901) 1683 0 R (a00148_g210e629f7252e4bc8458cbdf260b3318) 1677 0 R (a00148_g22fa0681cd463191d7a01fe85d86996f) 1680 0 R (a00148_g53fbda0e8c31d4882294c8dc3cb5f487) 1675 0 R (a00148_g69a7a4951ff21b302267532c21ee78fc) 1617 0 R (a00148_g6b16e0bac41821c1fbe0c267071642f0) 1678 0 R (a00148_g769512993b7b27271909d6daa4748b60) 1676 0 R (a00148_g87f0b54ade0d159fba495089128a4932) 774 0 R (a00148_g969d7fff37a979737da045e0d538a9bd) 1679 0 R (a00148_ga22b04cac8cf283ca12f028578bebc06) 1618 0 R (a00148_ge23534479ead15af8ff08ace26a47fb5) 1682 0 R (a00148_gffcd2fbe181e2aaefbf970551c302af5) 1681 0 R (a00149) 654 0 R (a00149_g12a33f0c09711167bdf3dd7d7cf8c5a1) 1748 0 R (a00150) 1760 0 R (a00150_g013c3a06a8b58589a77f4a3442f89c2a) 1923 0 R (a00150_g041aea91aa6ef84dcc6cac3c51db9b2f) 1809 0 R (a00150_g04b053a623aac7cd4195157d470661b3) 1997 0 R (a00150_g1215163245304bad20d6c5608ad75ab7) 1880 0 R (a00150_g12a33f0c09711167bdf3dd7d7cf8c5a1) 1755 0 R (a00150_g12f3bf821224b8e7b48a57ed3cea15cf) 1886 0 R (a00150_g1320fd0006a2f70138bc2d0018dda829) 1872 0 R (a00150_g13dfcb4a5f920e108253ade527a66cc2) 1835 0 R (a00150_g1425d4a0c2760adb653a04c0fb137a8d) 1878 0 R (a00150_g15f2617f7dc1713f9d10282125c6027b) 1862 0 R (a00150_g160128ab5d2ea3cc497b91ee4eb4ef99) 1827 0 R (a00150_g17d111686f98e4c09db73a770ac3f1a4) 1858 0 R (a00150_g1cea57e3ea526f210b1068e6dcf7b4f4) 1896 0 R (a00150_g1d3211dbbdfb22d6a47b60dddcf945e8) 1900 0 R (a00150_g1ef35301f43a5bbb9f89f07b5a36b9a0) 1519 0 R (a00150_g207d17b633cd095120a74bc1f2257b17) 1892 0 R (a00150_g20ceef9d0868d391c2f33041b02cb1f1) 1926 0 R (a00150_g20df5c82f2a15a508c19e505b5d9de2b) 2014 0 R (a00150_g210f227119fc972e6222c9cb452e15a9) 1981 0 R (a00150_g22f140b02c354dfebcc7ad481c3bcd68) 1990 0 R (a00150_g236d5c7872f59c8fe7b701c7252b976e) 2042 0 R (a00150_g24f52ac52d6e714cb04a5aa01be3bdd0) 1906 0 R (a00150_g266263ac78a1361a2b1d15741d3b0675) 1935 0 R (a00150_g28eda870cff3d8e3cf2949e6f57a502b) 1817 0 R (a00150_g2a0cf5d86c58fab216414ce59bf1fea1) 2049 0 R (a00150_g2addf34c7d457c1a7899a7e2171ef1e9) 679 0 R (a00150_g2d3ba4b14d6d2f6576f9b547800b7945) 1805 0 R (a00150_g3237be0d9ec457de0177689ee23c0d5c) 2011 0 R (a00150_g359951eecd80541c2101f628a9da9146) 1841 0 R (a00150_g39ce739bd352d7e348e37395ce903e43) 1793 0 R (a00150_g42288d5c3cf4b10becefec657f441e54) 1902 0 R (a00150_g4309376690872fa4beb4f025f5cc199b) 1913 0 R (a00150_g44b3b1ab31a403ba28ec135adfcbefef) 1874 0 R (a00150_g499bb98a0b4ae9a98553ede81317606d) 2023 0 R (a00150_g4cc3e223b63f27b546d62e9a258dba5a) 1894 0 R (a00150_g517c770991459cc62dc009c0d3875c6a) 1843 0 R (a00150_g561b8eda32e059d4e7397f776268cc63) 1998 0 R (a00150_g57e6dc1d58a36d0ed53a3dd29ccc5798) 1799 0 R (a00150_g5b5615dc240daed20949c0fded2b4679) 2033 0 R (a00150_g5c5b1834e497f53ad0ef947bbe9777fa) 1888 0 R (a00150_g5c97ae587595b5444be80f5ecc1d3382) 1813 0 R (a00150_g5ca559def464ef20d8b1f7d32f2f160d) 1870 0 R (a00150_g6020613f5062417d9811cfa837215c83) 1868 0 R (a00150_g62c03e0a308cc23929a80fe8d8f9dc1e) 1898 0 R (a00150_g64d9affc680a445d708234e70450477b) 1829 0 R (a00150_g6832e4d2d046536b6472f7ac92340f68) 681 0 R (a00150_g691688604655ea8943d15f14c60027d8) 1884 0 R (a00150_g6bc12c6c7b56f73ce5d57abfdcdc6eb5) 1854 0 R (a00150_g6bfa488f87f68a6f7f4a3efb9e45eaf8) 1791 0 R (a00150_g6f2b90c597ec23f39ec716ccec11233c) 1860 0 R (a00150_g7023a34ba9e9d03b5fbedbcb32924453) 1989 0 R (a00150_g788ffac72342f6172343d7f8099cbe1a) 1999 0 R (a00150_g79c4110211247df3fb30b8cf1c4c02af) 1993 0 R (a00150_g7d3673f52f5846b6961d23b150decd54) 2008 0 R (a00150_g8387881de3a8bfd3c0d57b9d04ac9b7e) 1904 0 R (a00150_g85b65e38aa74eba18979156f97a94a87) 680 0 R (a00150_g88e60aa2cf23e1c65d630701db08c743) 1866 0 R (a00150_g8af482dec973db57d8b3bd3f69461488) 1821 0 R (a00150_g96544dedc1cdc71ad2ad54bf1d5e5433) 1910 0 R (a00150_g9c0814ed491fa452ec97910c0728d410) 1921 0 R (a00150_g9c24fba2cd8f7f62accb0a0d5bbe4dad) 1992 0 R (a00150_g9ebb4dac683163840eab9c6c41ad61f7) 1929 0 R (a00150_g9ee50a40597e67fce96541ab56c3b712) 2000 0 R (a00150_g9f1822e1d231235edacad691f3cb7bbb) 1882 0 R (a00150_ga05a3dde2048480fa3ab2a5961898d18) 2029 0 R (a00150_ga22b04cac8cf283ca12f028578bebc06) 1996 0 R (a00150_ga4c4310e54f18541b09e1e251fe7b22d) 1801 0 R (a00150_ga533c394b1fa0030205534befa31c525) 1825 0 R (a00150_ga5e3c856b86725125d19fccc34cd9eb5) 1819 0 R (a00150_gaa585784b0914cac1d37f07f85457008) 1994 0 R (a00150_gabc40c09f49d15acb1b1a7f02bb3a807) 1807 0 R (a00150_gad0321f4c570f9983c6de81ece3ddc20) 1852 0 R (a00150_gae59b70658f28ee6e998eaaab05e423f) 1823 0 R (a00150_gb4ef6b00924990e7a293f66715b6d1d1) 2005 0 R (a00150_gb6683dd83fe1c8de9a24086d4b69e907) 1944 0 R (a00150_gb81e78f890dbbee50c533a9734b74fd9) 1453 0 R (a00150_gb9435261753469accec0c9bf8a5a2686) 1917 0 R (a00150_gb948296aea6b6b3aa1f156799c4d479c) 1856 0 R (a00150_gc48ed5f0d27721ef62a3ed02a5ad8d2e) 1991 0 R (a00150_gc84f499cba8a02fc0e306c10b2acabf0) 1876 0 R (a00150_gd135fb0cfdfb2c212f0f51865a3640e4) 1833 0 R (a00150_gd58231410d58e34b455328b888a9e73c) 1890 0 R (a00150_gd605357e29affb0d3104294c90f09905) 1811 0 R (a00150_gdd1ab3704ecd4900eec61a6897d32dc8) 1995 0 R (a00150_gde29ec025e6754afd8cc24c954a8dec8) 1837 0 R (a00150_ge0825474feee11b4e038bfe71757875f) 1847 0 R (a00150_geb533744817cf6695d75293369c2248b) 1984 0 R (a00150_gee37386b2ab828787c05227eb109def7) 1864 0 R (a00150_gf0ccbc3bb2a3ba1ebc255c7b3fcedd24) 1815 0 R (a00150_gf0ed78fd2be24d849cdd5af75e3b2674) 1797 0 R (a00150_gf703683056d2bfa5c81fa157dcb20fe2) 1406 0 R (a00150_gf72d7b9a737707dcfb2c41fec2b6792e) 1845 0 R (a00150_gf84316f469ce0726985c0702db49a989) 1803 0 R (a00150_gf848ce44c810492e7a35c2d23a429f45) 1795 0 R (a00150_gfff0ed43201bf1e2020de1a0d6cac070) 1831 0 R (a00151) 1777 0 R (a00151_g2a0cf5d86c58fab216414ce59bf1fea1) 2184 0 R (a00151_g2addf34c7d457c1a7899a7e2171ef1e9) 2193 0 R (a00151_g6832e4d2d046536b6472f7ac92340f68) 2188 0 R (a00151_g85b65e38aa74eba18979156f97a94a87) 2194 0 R (a00151_gb6683dd83fe1c8de9a24086d4b69e907) 2192 0 R (a00152) 1775 0 R (a00152_g03d140db75de3d3cdfbbab1c4fed8d8d) 2220 0 R (a00152_g058a8e6025f67b021862281f1911fcef) 2257 0 R (a00152_g06ba7b414e718081998f2814090debf1) 2228 0 R (a00152_g24f52ac52d6e714cb04a5aa01be3bdd0) 2232 0 R (a00152_g2d9d28afa353f662b9bb5234fc419f72) 2239 0 R (a00152_g3e1562e8a6de32268e5df92a52152f91) 2218 0 R (a00152_g499bb98a0b4ae9a98553ede81317606d) 2250 0 R (a00152_g54b27e45df15e10a0eb1a3e3a91417d2) 1420 0 R (a00152_g737337d6a51e31b236c8233d024138a8) 2224 0 R (a00152_g7a7c46ffaba30477b8c9e3e61bd2e106) 2226 0 R (a00152_g902c4a360134096224bc2655f623aa5f) 2243 0 R (a00152_g9f2196e2705036869611962425e404bf) 2235 0 R (a00152_gbb558f3a9b1ec015e83c314aba694e35) 2222 0 R (a00152_gbb56b549f7ab4d86e1cc39b8afc70d1e) 2230 0 R (a00153) 650 0 R (a00153_g156dd2891a57035e4afdc4c2bc0b0ebf) 2371 0 R (a00153_g15de27b044603284f68db05a378235a7) 2344 0 R (a00153_g196379ceb1219a99f4495e41ccc9bbfb) 2324 0 R (a00153_g21664b7441cfa37d280228d23316d609) 2370 0 R (a00153_g24aa5bc36939cc9a0833e1df01478a7e) 2346 0 R (a00153_g285a80366aed9428f64282b8d13c918b) 2374 0 R (a00153_g2bc3b489923793759526a3181eb667fa) 2349 0 R (a00153_g3001114ddadc1f2ada5cc9a780e866fc) 2284 0 R (a00153_g3090117ef3ff5775b77cb1960e442d07) 2351 0 R (a00153_g3589822ecb9d9c4145209756396b8a6b) 2368 0 R (a00153_g3f6f1f6f98431f2d33ed30a30d2ccc35) 2276 0 R (a00153_g41aa744caa46913b3b3aedb2a4e78546) 713 0 R (a00153_g4910467b83a639f06739c82cd362037e) 2347 0 R (a00153_g4caecabca98b43919dd11be1c0d4cd8e) 1321 0 R (a00153_g51195ea7cd5aa387a87f9d3b23905b62) 2314 0 R (a00153_g51c1cd531ff0afb81620151f2248cd21) 2343 0 R (a00153_g529648ad3b0b327a43689b0f1779ff55) 2290 0 R (a00153_g5726142fec34f35fb9ea19e5a45975c6) 2369 0 R (a00153_g5b9dba2123705bce1ce95c3deca0bdad) 2348 0 R (a00153_g67cf1e0d2324c93f332c1f020c0fe8b3) 2345 0 R (a00153_g6836f92f3692f3a4429eb599db40cbae) 2388 0 R (a00153_g69646a81a922033c5281445a71f8ffed) 2395 0 R (a00153_g727459e5c4f777543c81ffffa3df3f0c) 2313 0 R (a00153_g763f12007aad8cc0e483bf50f8a8d9b4) 2286 0 R (a00153_g77570ac4fcab86864fa1916e55676da2) 1385 0 R (a00153_g8f4ebd8ef6c0ea665ed351d87fec09fd) 2342 0 R (a00153_g9069474ea570fd78c481aa164317dbaf) 2315 0 R (a00153_g92f3344ec8ca46893163399c89fafed5) 2319 0 R (a00153_g974c9b4bbe6b07cc1d64ac4fad278030) 2278 0 R (a00153_g9dd44616d41cef74d3beb51d8be5ecec) 2288 0 R (a00153_ga92afb113e122f860392bfbd385f842e) 2396 0 R (a00153_gac0de06236b02659460445de30776e00) 2340 0 R (a00153_gb1455b27c06532a399cf06d2c1d6d08d) 2350 0 R (a00153_gb58e1ceb7cb73ca2bcd73146b6c1b4e7) 2373 0 R (a00153_gb61381673de27f31848c5396bf0b338e) 2317 0 R (a00153_gb6e04358481bd2057524fb874cfa472b) 2386 0 R (a00153_gc3882366feda1cb759ccbfe98327a7db) 2307 0 R (a00153_gca1240bba5dd57f8c7c27123c84a1f6d) 2282 0 R (a00153_gcacc406c3bf7d0e00412e4c946252739) 2280 0 R (a00153_gdcf372ff9748996f7c05e9822a615384) 2310 0 R (a00153_ge0f8cbeca9731af2171ffd37e79de893) 2316 0 R (a00153_ge6f4a2453dbd8bc60e6a82774552366a) 2372 0 R (a00153_gf5fe83be78b78b9e7d9e7f1e34ab1cc5) 2341 0 R (a00153_gf963fdea2b75d27ef31e92d1d01359ee) 2318 0 R (a00154) 1776 0 R (a00154_gb4b17aaf20d630f30919b19937b966a3) 2497 0 R (a00155) 1165 0 R (a00155_g1ec8b8f4710dce1fa7fb87d3a31541ae) 2513 0 R (a00155_g2bdc4b7b4038454a79f1b2a94a6d2a98) 2526 0 R (a00155_g2c1bb4fa6d7a6ff951a41c73fc721109) 2511 0 R (a00155_g3983e0c026396d5c4506779d770007ba) 2524 0 R (a00155_g44311ecc30759ca38b4069182247bdae) 2509 0 R (a00155_gca51ceb2f5d855dfde55bcedf8d3b92d) 2517 0 R (a00155_gd8eec328a4868d767f0c00c8d1c6cfc1) 2515 0 R (a00156) 2532 0 R (a00156_g6614d96fdfcd95c95ec6e6f63071ff51) 2551 0 R (a00156_g6d71dececfce707c668e6257aad5906e) 2554 0 R (a00156_gcb807bd57e5489b386b876af5c1f163a) 2553 0 R (a00156_gedaf3e48c2b04229b85455fb948468d6) 2552 0 R (a00157) 2550 0 R (a00157_g78ab77b57cf2e00089f0a3a22508524c) 2601 0 R (a00157_ge3ced0551b26c9b99cb45a86f34d100a) 2595 0 R (a00157_ge5b7160f2e653725ba5e2024c3cb7bff) 2603 0 R (a00158) 656 0 R (a00158_g10d9a9201cba1a6db623284c475c6cea) 2674 0 R (a00158_g26ae707402e494f3895a9f012a93ea29) 2628 0 R (a00158_g2ebfe5c8a7f3173714efdf2df74fc392) 2682 0 R (a00158_g3178402dd725776415bf9745e7bf92ba) 2662 0 R (a00158_g3b19f65e48079d8105be2a99b5b4b2ae) 2667 0 R (a00158_g4a264bb64ae706d53f572b1d9e4037a2) 2680 0 R (a00158_g4ab2de595d36e9e55dd61f6ecd139162) 2678 0 R (a00158_g55ce98ea4d6f22e9d5068b904d4d2447) 2681 0 R (a00158_g5d56800f82bfc7bbf53bb4a659589812) 2675 0 R (a00158_g70d236d1cf34b4e21836edda60247b70) 2629 0 R (a00158_g84901a5aa60040e96d272a69977edd22) 2626 0 R (a00158_ga87ff36af81990e6ffe20d76d5e4606f) 2656 0 R (a00158_gb0ad55aa96dd1d200cd0fc5a99f6a4f7) 2673 0 R (a00158_gb5d9c0becf7cb32d0aaef466839dd92e) 2677 0 R (a00158_gc7cc1dba1819f7fcdaa9ff9eed5a08f4) 2679 0 R (a00158_gd895ab98c54d9966ff554aa873151751) 2676 0 R (a00158_gfa11b2a1faf395ae2a6626e01c482d5d) 2627 0 R (a00159) 2757 0 R (a00159_g720ac440c7b24bdd07c53ba146e36fb2) 2772 0 R (a00159_ga680bc3f3a1a8a6aec20fe729d138cb8) 2770 0 R (a00159_gceb952d27de8125d5146ac0bee325b8f) 2787 0 R (a00159_gd58a6c7e62ae59bf7a016ded12ca2910) 2788 0 R (a00159_gf31774d02a69fd3f1c2b282454438cba) 2785 0 R (a00159_gfe5e93119035e14cc485760a176249ba) 2786 0 R (a00160) 1315 0 R (a00160_g070d2ce7b6bb7e5c05602aa8c308d0c4) 2834 0 R (a00160_g221d37ccde7e3fd0dd2c2eb0a6b15493) 2838 0 R (a00160_g3191066cf8f76bd00b6843b77c37068f) 2858 0 R (a00160_g3d768e989e308144190ae1a5ddfa9726) 2832 0 R (a00160_g66d19181ad5fe8b8f7c84d1f1d46a2ec) 2854 0 R (a00160_g6d9751d534453425c7a5a215d1d4414c) 2856 0 R (a00160_g7c5359305008e9183b18d6ab75f568bf) 2841 0 R (a00160_gb50f78bbf36d912d69f6c1685d0b40e3) 2849 0 R (a00160_gdf916e0c752f5cda70d0bddb2be422ba) 2857 0 R (a00160_ge4dcbbe6c641d2e3b8537b479df5fc99) 2855 0 R (a00160_gecf13b8dc783db2202ca5c34fe117fc3) 2836 0 R (a00161) 1316 0 R (a00161_g029256bc17a12e1e86781887e11c0c7d) 2901 0 R (a00161_g17ccd786400fd08b941e11046df1668f) 2917 0 R (a00161_g28cf9765e4b57451af559ab988ad7160) 2915 0 R (a00161_g3212e70c55244608ac16316888c354f0) 2905 0 R (a00161_g34b924954ba5707d536df28d71a80d39) 2911 0 R (a00161_g37e3103b9591790d484a450525739661) 2929 0 R (a00161_g64807ba7c221ddf735572d05021539f2) 2921 0 R (a00161_g6cda47c85ce1b58b501b44ac9cccc50e) 2907 0 R (a00161_g9e97c58fe35f750ad192774be9408ac8) 2913 0 R (a00161_gb1fc692a2700b7a51517724364683f67) 2928 0 R (a00161_gbc331f73107958428bf1c392ba19b6f4) 2923 0 R (a00161_gcff75c8c930abd6ff168e85373a4eb92) 2903 0 R (a00161_gf0349a8481565e80f55a751e2b408d6d) 2930 0 R (a00161_gf7dd2757d1e766f65b01ba7c91c660a0) 2909 0 R (a00162) 1317 0 R (a00162_g123c95a7bb55143cabba92446ce8f513) 3020 0 R (a00162_g19709735f29dafeabb91e0882231f9f1) 2968 0 R (a00162_g26440a35353cb457747a4cea372c62e9) 2956 0 R (a00162_g30fe27cba3c14ae7f9a7f118144af43a) 2958 0 R (a00162_g3212e70c55244608ac16316888c354f0) 2962 0 R (a00162_g3318dec654781e9d6d8ec873636660c6) 2984 0 R (a00162_g3a4852e2372e34e1c0142d1147fbe027) 2988 0 R (a00162_g4647b76d0ef50a5305505041f5775a37) 2993 0 R (a00162_g5025948dd998f65a13a375a37aa5edf5) 2972 0 R (a00162_g52c3c5ab1b1aa0659b5e465f7fbcc409) 3001 0 R (a00162_g57aca709a33690cd4fb73fe199fa1bdd) 2978 0 R (a00162_g69b075ef7e4d7bcf5a903d3d75baac02) 3013 0 R (a00162_g6b2d00412304e2d95e7b853cce5858b0) 2982 0 R (a00162_g6cda47c85ce1b58b501b44ac9cccc50e) 2964 0 R (a00162_g7e904ab59f7ee134cf3218a8219e7e29) 2970 0 R (a00162_g82ff99d50221f7c17df57dc6092ffc97) 3007 0 R (a00162_g86beee1f69d05b16022dfb430470e9ce) 3016 0 R (a00162_g8b600918f84783490fd791ce773175ab) 2980 0 R (a00162_g984c4a8b65a3cb35460b073a40568c25) 3003 0 R (a00162_gaa60ca995565b799bb958c806e933665) 2990 0 R (a00162_gaaaaf66ea67900c36d01136d5bad1168) 2976 0 R (a00162_gbfc1d8d15852318927cda30e1bc0470a) 2974 0 R (a00162_gd1f18f739da7703628c3663209463a0d) 3021 0 R (a00162_ge28f6cb60e86088d8886d0f804b4f37c) 2960 0 R (a00162_ge429c985be88ed048f382511c9ff00de) 2966 0 R (a00162_gf11c966b0e4f4ecaa73deb14bfb6830f) 3019 0 R (a00162_gf784a76fe619452eddf87e6376a4bf9d) 2986 0 R (a00163) 1318 0 R (a00163_g03070adbf8faab0f34f87c1270964306) 3047 0 R (a00163_gb97849f0d3ea858eee790b69591e6427) 3049 0 R (a00163_ge28f6cb60e86088d8886d0f804b4f37c) 3044 0 R (a00164) 1319 0 R (a00164_g0e0ea5f24b77f124ba33bcbc7ede5bfb) 3134 0 R (a00164_g1d34be506a61db90dd7829117efdf8cf) 3120 0 R (a00164_g23705efb9077187881f094fc9be13bde) 3102 0 R (a00164_g2a939aa4fcffabbce1dc1f784a7e0ad3) 3135 0 R (a00164_g31be289fd8ec3fe09b0088165d13976d) 3072 0 R (a00164_g3212e70c55244608ac16316888c354f0) 3090 0 R (a00164_g38af81a4c9884ce89803fc3e52383112) 3088 0 R (a00164_g3caacabb2fe1c71921e1a471719ccbd2) 3116 0 R (a00164_g40fb1fb2d990ce04ae9bbee275627c03) 3082 0 R (a00164_g41e616d3fcc17e0aabfe8ab45ef0d30f) 3133 0 R (a00164_g4433d3af16ea083a81576d0f18ba57c9) 3132 0 R (a00164_g4d457c50e6f2cef57167c3804ce8bf7c) 3078 0 R (a00164_g5a5bfd7e9060903893481db90645187b) 3068 0 R (a00164_g6b942c1ef22f8cd1a726ef3364c9fbea) 3101 0 R (a00164_g6cda47c85ce1b58b501b44ac9cccc50e) 3092 0 R (a00164_g71e1b022f7b7fa3a154f19372b239935) 3094 0 R (a00164_g863c94b0ed4a76997e53a3ccd5d0b6c3) 3080 0 R (a00164_g8714af98a550f10dc814db92b08d1b0d) 3074 0 R (a00164_g9e6d2864f390a4ba1ac60dc65e2b9815) 3122 0 R (a00164_gc4357cec23abca29d2bb885803625a6a) 3076 0 R (a00164_gc4b119801e50cc1824498a1cdf9adc37) 3100 0 R (a00164_gd895686859ae7d178d31be04eb0a1a97) 3086 0 R (a00164_gda99954e0f6905091885934e86c278cc) 3084 0 R (a00164_gdc5aec3587b2c55b714a6c2f37b56cba) 3097 0 R (a00164_ge28f6cb60e86088d8886d0f804b4f37c) 3070 0 R (a00164_gf11d9915ec12a8cdd9fdcbb5e8fcd5c7) 3103 0 R (a00164_gf8f12c820cc08da32aa62898bfc02db3) 3104 0 R (a00164_gf9385ef9ecc74c7d53ff2f15e62bfde3) 3131 0 R (a00165) 1320 0 R (a00165_g14e276fa8e765f774f4162619f1c8fc1) 3220 0 R (a00165_g1dbc635a2924806f42d7e3273a6a69b5) 3228 0 R (a00165_g3212e70c55244608ac16316888c354f0) 3208 0 R (a00165_g648ddfb2dde2cc55034e4e0ea41cb6d1) 3225 0 R (a00165_g71e1b022f7b7fa3a154f19372b239935) 3210 0 R (a00165_g79f9a50c2cccb967d38a2eeb45d2fd75) 3214 0 R (a00165_g7d7920c1e51cc4eef80206ebd6fee3f4) 3204 0 R (a00165_g820fb27c50e7bb4ac6d9eae1b06630a5) 3218 0 R (a00165_g8a645f8831837320c4e0c704e871abcf) 3206 0 R (a00165_gc364305cee969a0be43c071722b136e6) 3229 0 R (a00165_ge3f8f7deae69854853b0c8ebb82c380d) 3212 0 R (a00165_ge6f849e94cf6e214be8ffa9a548ecfcd) 3223 0 R (a00165_gf7dd2757d1e766f65b01ba7c91c660a0) 3216 0 R (a00171) 3890 0 R (a00172) 3905 0 R (a00173) 3956 0 R (a00174) 3985 0 R (a00175) 4017 0 R (a00176) 4037 0 R (a00177) 4059 0 R (a00178) 4075 0 R (a00179) 4104 0 R (a00180) 4123 0 R (a00181) 4150 0 R (a00182) 4182 0 R (a00183) 4205 0 R (a00184) 4219 0 R (a00185) 4240 0 R (a00187) 4258 0 R (a00188) 4282 0 R (a00190) 4299 0 R (a00191) 4316 0 R (a00192) 4324 0 R (a00194) 4354 0 R (a00195) 4403 0 R (a00196) 4447 0 R (a00197) 4466 0 R (a00198) 4495 0 R (a00199) 4521 0 R (a00201) 4531 0 R (a00202) 4576 0 R (a00203) 4670 0 R (a00204) 4857 0 R (a00205) 4878 0 R (a00206) 4902 0 R (a00207) 4919 0 R (a00208) 4977 0 R (chapter*.1) 500 0 R (chapter.1) 6 0 R (chapter.2) 46 0 R (chapter.3) 54 0 R (chapter.4) 62 0 R (chapter.5) 70 0 R (chapter.6) 78 0 R (chapter.7) 178 0 R (chapter.8) 266 0 R (chapter.9) 406 0 R (index) 632 0 R (main_api) 685 0 R (main_appevents) 694 0 R (main_arch) 668 0 R (main_checksums) 669 0 R (main_closing) 729 0 R (main_congestioncontrol) 862 0 R (main_connect) 759 0 R (main_connstate) 697 0 R (main_delack) 871 0 R (main_errors) 734 0 R (main_example1) 768 0 R (main_example2) 784 0 R (main_example3) 791 0 R (main_example4) 793 0 R (main_example5) 802 0 R (main_example6) 812 0 R (main_examples) 767 0 R (main_flowcontrol) 860 0 R (main_icmp) 840 0 R (main_ip) 834 0 R (main_ipbroadcast) 838 0 R (main_ipreass) 836 0 R (main_listeb) 848 0 R (main_listen) 741 0 R (main_longarith) 673 0 R (main_mainloop) 662 0 R (main_memory) 676 0 R (main_performance) 866 0 R (main_polling) 738 0 R (main_protoimpl) 828 0 R (main_rawapi) 688 0 R (main_recvdata) 706 0 R (main_rexmit) 854 0 R (main_rexmitdata) 725 0 R (main_rttest) 852 0 R (main_senddata) 711 0 R (main_slidingwindow) 850 0 R (main_tcp) 842 0 R (main_tcpip) 661 0 R (main_uIPIntroduction) 647 0 R (main_urgdata) 864 0 R (page.1) 478 0 R (page.10) 797 0 R (page.100) 2738 0 R (page.101) 2752 0 R (page.102) 2756 0 R (page.103) 2792 0 R (page.104) 2813 0 R (page.105) 2823 0 R (page.106) 2862 0 R (page.107) 2881 0 R (page.108) 2893 0 R (page.109) 2934 0 R (page.11) 809 0 R (page.110) 2946 0 R (page.111) 2999 0 R (page.112) 3025 0 R (page.113) 3035 0 R (page.114) 3054 0 R (page.115) 3108 0 R (page.116) 3139 0 R (page.117) 3155 0 R (page.118) 3172 0 R (page.119) 3187 0 R (page.12) 817 0 R (page.120) 3194 0 R (page.121) 3233 0 R (page.122) 3242 0 R (page.123) 3246 0 R (page.124) 3290 0 R (page.125) 3306 0 R (page.126) 3316 0 R (page.127) 3346 0 R (page.128) 3361 0 R (page.129) 3393 0 R (page.13) 825 0 R (page.130) 3404 0 R (page.131) 3414 0 R (page.132) 3446 0 R (page.133) 3462 0 R (page.134) 3478 0 R (page.135) 3518 0 R (page.136) 3534 0 R (page.137) 3543 0 R (page.138) 3558 0 R (page.139) 3609 0 R (page.14) 833 0 R (page.140) 3619 0 R (page.141) 3670 0 R (page.142) 3704 0 R (page.143) 3770 0 R (page.144) 3793 0 R (page.145) 3841 0 R (page.146) 3879 0 R (page.147) 3883 0 R (page.148) 3894 0 R (page.149) 3909 0 R (page.15) 846 0 R (page.150) 3960 0 R (page.151) 3967 0 R (page.152) 3989 0 R (page.153) 3999 0 R (page.154) 4021 0 R (page.155) 4041 0 R (page.156) 4049 0 R (page.157) 4063 0 R (page.158) 4079 0 R (page.159) 4108 0 R (page.16) 859 0 R (page.160) 4127 0 R (page.161) 4154 0 R (page.162) 4162 0 R (page.163) 4186 0 R (page.164) 4199 0 R (page.165) 4209 0 R (page.166) 4223 0 R (page.167) 4244 0 R (page.168) 4262 0 R (page.169) 4286 0 R (page.17) 870 0 R (page.170) 4303 0 R (page.171) 4320 0 R (page.172) 4328 0 R (page.173) 4358 0 R (page.174) 4383 0 R (page.175) 4407 0 R (page.176) 4434 0 R (page.177) 4451 0 R (page.178) 4470 0 R (page.179) 4499 0 R (page.18) 876 0 R (page.180) 4525 0 R (page.181) 4535 0 R (page.182) 4580 0 R (page.183) 4629 0 R (page.184) 4652 0 R (page.185) 4674 0 R (page.186) 4699 0 R (page.187) 4720 0 R (page.188) 4760 0 R (page.189) 4807 0 R (page.19) 880 0 R (page.190) 4841 0 R (page.191) 4861 0 R (page.192) 4882 0 R (page.193) 4906 0 R (page.194) 4923 0 R (page.195) 4942 0 R (page.196) 4961 0 R (page.197) 4981 0 R (page.198) 4985 0 R (page.199) 4989 0 R (page.2) 493 0 R (page.20) 909 0 R (page.200) 4994 0 R (page.201) 4998 0 R (page.202) 5002 0 R (page.203) 5006 0 R (page.204) 5010 0 R (page.205) 5014 0 R (page.206) 5019 0 R (page.207) 5023 0 R (page.208) 5027 0 R (page.209) 5031 0 R (page.21) 913 0 R (page.210) 5035 0 R (page.211) 5039 0 R (page.212) 5044 0 R (page.213) 5048 0 R (page.214) 5052 0 R (page.215) 5056 0 R (page.216) 5060 0 R (page.217) 5064 0 R (page.218) 5069 0 R (page.219) 5073 0 R (page.22) 938 0 R (page.220) 5077 0 R (page.221) 5081 0 R (page.222) 5085 0 R (page.223) 5089 0 R (page.224) 5094 0 R (page.225) 5098 0 R (page.226) 5102 0 R (page.227) 5106 0 R (page.228) 5110 0 R (page.229) 5114 0 R (page.23) 942 0 R (page.230) 5119 0 R (page.231) 5123 0 R (page.232) 5127 0 R (page.233) 5131 0 R (page.234) 5135 0 R (page.235) 5140 0 R (page.236) 5145 0 R (page.237) 5149 0 R (page.238) 5153 0 R (page.239) 5157 0 R (page.24) 1008 0 R (page.240) 5161 0 R (page.241) 5165 0 R (page.242) 5170 0 R (page.243) 5174 0 R (page.244) 5178 0 R (page.245) 5182 0 R (page.246) 5186 0 R (page.247) 5190 0 R (page.248) 5195 0 R (page.249) 5199 0 R (page.25) 1012 0 R (page.250) 5203 0 R (page.251) 5276 0 R (page.252) 5344 0 R (page.253) 5429 0 R (page.254) 5495 0 R (page.255) 5577 0 R (page.26) 1092 0 R (page.27) 1123 0 R (page.28) 1128 0 R (page.29) 1152 0 R (page.3) 568 0 R (page.30) 1169 0 R (page.31) 1201 0 R (page.32) 1241 0 R (page.33) 1259 0 R (page.34) 1271 0 R (page.35) 1287 0 R (page.36) 1294 0 R (page.37) 1325 0 R (page.38) 1349 0 R (page.39) 1359 0 R (page.4) 608 0 R (page.40) 1371 0 R (page.41) 1389 0 R (page.42) 1415 0 R (page.43) 1424 0 R (page.44) 1441 0 R (page.45) 1457 0 R (page.46) 1461 0 R (page.47) 1489 0 R (page.48) 1524 0 R (page.49) 1544 0 R (page.5) 693 0 R (page.50) 1571 0 R (page.51) 1589 0 R (page.52) 1602 0 R (page.53) 1622 0 R (page.54) 1642 0 R (page.55) 1653 0 R (page.56) 1687 0 R (page.57) 1705 0 R (page.58) 1714 0 R (page.59) 1723 0 R (page.6) 720 0 R (page.60) 1730 0 R (page.61) 1742 0 R (page.62) 1759 0 R (page.63) 1781 0 R (page.64) 1851 0 R (page.65) 1948 0 R (page.66) 2004 0 R (page.67) 2059 0 R (page.68) 2076 0 R (page.69) 2091 0 R (page.7) 754 0 R (page.70) 2104 0 R (page.71) 2119 0 R (page.72) 2141 0 R (page.73) 2162 0 R (page.74) 2167 0 R (page.75) 2198 0 R (page.76) 2210 0 R (page.77) 2247 0 R (page.78) 2261 0 R (page.79) 2268 0 R (page.8) 778 0 R (page.80) 2296 0 R (page.81) 2323 0 R (page.82) 2355 0 R (page.83) 2378 0 R (page.84) 2400 0 R (page.85) 2418 0 R (page.86) 2429 0 R (page.87) 2439 0 R (page.88) 2473 0 R (page.89) 2490 0 R (page.9) 790 0 R (page.90) 2502 0 R (page.91) 2531 0 R (page.92) 2558 0 R (page.93) 2578 0 R (page.94) 2589 0 R (page.95) 2608 0 R (page.96) 2633 0 R (page.97) 2686 0 R (page.98) 2705 0 R (page.99) 2721 0 R (section*.10) 1207 0 R (section*.100) 3407 0 R (section*.101) 3419 0 R (section*.102) 3450 0 R (section*.103) 3469 0 R (section*.104) 3481 0 R (section*.105) 3536 0 R (section*.106) 3545 0 R (section*.107) 3560 0 R (section*.108) 3611 0 R (section*.109) 3621 0 R (section*.11) 1209 0 R (section*.110) 3706 0 R (section*.111) 3774 0 R (section*.112) 3795 0 R (section*.113) 3845 0 R (section*.114) 3887 0 R (section*.115) 3898 0 R (section*.116) 3900 0 R (section*.117) 3902 0 R (section*.118) 3913 0 R (section*.119) 3949 0 R (section*.12) 1214 0 R (section*.120) 3971 0 R (section*.121) 3976 0 R (section*.122) 3978 0 R (section*.123) 4003 0 R (section*.124) 4011 0 R (section*.125) 4025 0 R (section*.126) 4027 0 R (section*.127) 4034 0 R (section*.128) 4042 0 R (section*.129) 4053 0 R (section*.13) 1296 0 R (section*.130) 4055 0 R (section*.131) 4067 0 R (section*.132) 4083 0 R (section*.133) 4098 0 R (section*.134) 4112 0 R (section*.135) 4114 0 R (section*.136) 4118 0 R (section*.137) 4121 0 R (section*.138) 4131 0 R (section*.139) 4144 0 R (section*.14) 1304 0 R (section*.140) 4166 0 R (section*.141) 4168 0 R (section*.142) 4171 0 R (section*.143) 4174 0 R (section*.144) 4203 0 R (section*.145) 4213 0 R (section*.146) 4215 0 R (section*.147) 4217 0 R (section*.148) 4227 0 R (section*.149) 4237 0 R (section*.15) 1327 0 R (section*.150) 4248 0 R (section*.151) 4266 0 R (section*.152) 4268 0 R (section*.153) 4272 0 R (section*.154) 4291 0 R (section*.155) 4296 0 R (section*.156) 4308 0 R (section*.157) 4314 0 R (section*.158) 4332 0 R (section*.159) 4335 0 R (section*.16) 1373 0 R (section*.160) 4373 0 R (section*.161) 4387 0 R (section*.162) 4389 0 R (section*.163) 4392 0 R (section*.164) 4398 0 R (section*.165) 4408 0 R (section*.166) 4413 0 R (section*.167) 4418 0 R (section*.168) 4420 0 R (section*.169) 4425 0 R (section*.17) 1391 0 R (section*.170) 4438 0 R (section*.171) 4455 0 R (section*.172) 4457 0 R (section*.173) 4474 0 R (section*.174) 4479 0 R (section*.175) 4503 0 R (section*.176) 4505 0 R (section*.177) 4529 0 R (section*.178) 4539 0 R (section*.179) 4581 0 R (section*.18) 1401 0 R (section*.180) 4614 0 R (section*.181) 4656 0 R (section*.182) 4664 0 R (section*.183) 4769 0 R (section*.184) 4776 0 R (section*.185) 4812 0 R (section*.186) 4845 0 R (section*.187) 4865 0 R (section*.188) 4873 0 R (section*.189) 4886 0 R (section*.19) 1463 0 R (section*.190) 4888 0 R (section*.191) 4894 0 R (section*.192) 4899 0 R (section*.193) 4910 0 R (section*.194) 4914 0 R (section*.195) 4924 0 R (section*.196) 4928 0 R (section*.197) 4943 0 R (section*.198) 4946 0 R (section*.199) 4953 0 R (section*.2) 1163 0 R (section*.20) 1498 0 R (section*.200) 4955 0 R (section*.201) 4965 0 R (section*.21) 1656 0 R (section*.22) 1670 0 R (section*.23) 1744 0 R (section*.24) 1762 0 R (section*.25) 1765 0 R (section*.26) 1782 0 R (section*.27) 1790 0 R (section*.28) 1925 0 R (section*.29) 1934 0 R (section*.3) 1173 0 R (section*.30) 1975 0 R (section*.31) 2169 0 R (section*.32) 2171 0 R (section*.33) 2183 0 R (section*.34) 2212 0 R (section*.35) 2215 0 R (section*.36) 2217 0 R (section*.37) 2238 0 R (section*.38) 2249 0 R (section*.39) 2272 0 R (section*.4) 1175 0 R (section*.40) 2275 0 R (section*.41) 2300 0 R (section*.42) 2304 0 R (section*.43) 2309 0 R (section*.44) 2326 0 R (section*.45) 2337 0 R (section*.46) 2356 0 R (section*.47) 2363 0 R (section*.48) 2365 0 R (section*.49) 2385 0 R (section*.5) 1177 0 R (section*.50) 2492 0 R (section*.51) 2494 0 R (section*.52) 2504 0 R (section*.53) 2508 0 R (section*.54) 2523 0 R (section*.55) 2535 0 R (section*.56) 2538 0 R (section*.57) 2540 0 R (section*.58) 2594 0 R (section*.59) 2597 0 R (section*.6) 1180 0 R (section*.60) 2614 0 R (section*.61) 2616 0 R (section*.62) 2619 0 R (section*.63) 2661 0 R (section*.64) 2764 0 R (section*.65) 2767 0 R (section*.66) 2769 0 R (section*.67) 2775 0 R (section*.68) 2828 0 R (section*.69) 2831 0 R (section*.7) 1186 0 R (section*.70) 2840 0 R (section*.71) 2895 0 R (section*.72) 2898 0 R (section*.73) 2900 0 R (section*.74) 2919 0 R (section*.75) 2948 0 R (section*.76) 2953 0 R (section*.77) 2955 0 R (section*.78) 2992 0 R (section*.79) 3000 0 R (section*.8) 1191 0 R (section*.80) 3038 0 R (section*.81) 3041 0 R (section*.82) 3043 0 R (section*.83) 3046 0 R (section*.84) 3062 0 R (section*.85) 3065 0 R (section*.86) 3067 0 R (section*.87) 3096 0 R (section*.88) 3109 0 R (section*.89) 3196 0 R (section*.9) 1202 0 R (section*.90) 3200 0 R (section*.91) 3202 0 R (section*.92) 3222 0 R (section*.93) 3250 0 R (section*.94) 3294 0 R (section*.95) 3308 0 R (section*.96) 3318 0 R (section*.97) 3348 0 R (section*.98) 3364 0 R (section*.99) 3395 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.1.5) 26 0 R (section.1.6) 30 0 R (section.1.7) 34 0 R (section.1.8) 38 0 R (section.1.9) 42 0 R (section.2.1) 50 0 R (section.3.1) 58 0 R (section.4.1) 66 0 R (section.5.1) 74 0 R (section.6.1) 82 0 R (section.6.10) 118 0 R (section.6.11) 122 0 R (section.6.12) 126 0 R (section.6.13) 130 0 R (section.6.14) 134 0 R (section.6.15) 138 0 R (section.6.16) 142 0 R (section.6.17) 146 0 R (section.6.18) 150 0 R (section.6.19) 154 0 R (section.6.2) 86 0 R (section.6.20) 158 0 R (section.6.21) 162 0 R (section.6.22) 166 0 R (section.6.23) 170 0 R (section.6.24) 174 0 R (section.6.3) 90 0 R (section.6.4) 94 0 R (section.6.5) 98 0 R (section.6.6) 102 0 R (section.6.7) 106 0 R (section.6.8) 110 0 R (section.6.9) 114 0 R (section.7.1) 182 0 R (section.7.10) 218 0 R (section.7.11) 222 0 R (section.7.12) 226 0 R (section.7.13) 230 0 R (section.7.14) 234 0 R (section.7.15) 238 0 R (section.7.16) 242 0 R (section.7.17) 246 0 R (section.7.18) 250 0 R (section.7.19) 254 0 R (section.7.2) 186 0 R (section.7.20) 258 0 R (section.7.21) 262 0 R (section.7.3) 190 0 R (section.7.4) 194 0 R (section.7.5) 198 0 R (section.7.6) 202 0 R (section.7.7) 206 0 R (section.7.8) 210 0 R (section.7.9) 214 0 R (section.8.1) 270 0 R (section.8.10) 306 0 R (section.8.11) 310 0 R (section.8.12) 314 0 R (section.8.13) 318 0 R (section.8.14) 322 0 R (section.8.15) 326 0 R (section.8.16) 330 0 R (section.8.17) 334 0 R (section.8.18) 338 0 R (section.8.19) 342 0 R (section.8.2) 274 0 R (section.8.20) 346 0 R (section.8.21) 350 0 R (section.8.22) 354 0 R (section.8.23) 358 0 R (section.8.24) 362 0 R (section.8.25) 366 0 R (section.8.26) 370 0 R (section.8.27) 374 0 R (section.8.28) 378 0 R (section.8.29) 382 0 R (section.8.3) 278 0 R (section.8.30) 386 0 R (section.8.31) 390 0 R (section.8.32) 394 0 R (section.8.33) 398 0 R (section.8.34) 402 0 R (section.8.4) 282 0 R (section.8.5) 286 0 R (section.8.6) 290 0 R (section.8.7) 294 0 R (section.8.8) 298 0 R (section.8.9) 302 0 R (section.9.1) 410 0 R (section.9.10) 446 0 R (section.9.11) 450 0 R (section.9.12) 454 0 R (section.9.13) 458 0 R (section.9.14) 462 0 R (section.9.15) 466 0 R (section.9.16) 470 0 R (section.9.2) 414 0 R (section.9.3) 418 0 R (section.9.4) 422 0 R (section.9.5) 426 0 R (section.9.6) 430 0 R (section.9.7) 434 0 R (section.9.8) 438 0 R (section.9.9) 442 0 R (subsection.1.4.1) 670 0 R (subsection.1.4.2) 674 0 R (subsection.1.6.1) 689 0 R (subsection.1.7.1) 769 0 R (subsection.1.7.2) 785 0 R (subsection.1.7.3) 792 0 R (subsection.1.7.4) 798 0 R (subsection.1.7.5) 803 0 R (subsection.1.7.6) 813 0 R (subsection.1.8.1) 835 0 R (subsection.1.8.2) 841 0 R (subsection.1.8.3) 847 0 R (subsection.1.9.1) 872 0 R (subsection.6.1.1) 1124 0 R (subsection.6.1.2) 1138 0 R (subsection.6.1.3) 1142 0 R (subsection.6.1.4) 1154 0 R (subsection.6.1.5) 1156 0 R (subsection.6.1.6) 1158 0 R (subsection.6.1.7) 1223 0 R (subsection.6.10.1) 2168 0 R (subsection.6.10.2) 2187 0 R (subsection.6.11.1) 2211 0 R (subsection.6.11.2) 2253 0 R (subsection.6.12.1) 2269 0 R (subsection.6.12.2) 2390 0 R (subsection.6.12.3) 2443 0 R (subsection.6.12.4) 2484 0 R (subsection.6.13.1) 2491 0 R (subsection.6.13.2) 2496 0 R (subsection.6.14.1) 2503 0 R (subsection.6.15.1) 2533 0 R (subsection.6.15.2) 2559 0 R (subsection.6.16.1) 2590 0 R (subsection.6.16.2) 2600 0 R (subsection.6.17.1) 2609 0 R (subsection.6.17.2) 2670 0 R (subsection.6.18.1) 2758 0 R (subsection.6.18.2) 2793 0 R (subsection.6.18.3) 2799 0 R (subsection.6.19.1) 2824 0 R (subsection.6.19.2) 2863 0 R (subsection.6.2.1) 1295 0 R (subsection.6.20.1) 2894 0 R (subsection.6.20.2) 2935 0 R (subsection.6.21.1) 2947 0 R (subsection.6.21.2) 3012 0 R (subsection.6.22.1) 3036 0 R (subsection.6.23.1) 3055 0 R (subsection.6.23.2) 3128 0 R (subsection.6.24.1) 3195 0 R (subsection.6.24.2) 3234 0 R (subsection.6.24.3) 3236 0 R (subsection.6.3.1) 1326 0 R (subsection.6.3.2) 1335 0 R (subsection.6.4.1) 1372 0 R (subsection.6.4.2) 1377 0 R (subsection.6.5.1) 1390 0 R (subsection.6.5.2) 1404 0 R (subsection.6.5.3) 1449 0 R (subsection.6.6.1) 1462 0 R (subsection.6.6.2) 1512 0 R (subsection.6.6.3) 1604 0 R (subsection.6.7.1) 1655 0 R (subsection.6.7.2) 1688 0 R (subsection.6.7.3) 1731 0 R (subsection.6.8.1) 1743 0 R (subsection.6.8.2) 1747 0 R (subsection.6.9.1) 1761 0 R (subsection.6.9.2) 2052 0 R (subsection.6.9.3) 2060 0 R (subsection.6.9.4) 2124 0 R (subsection.7.1.1) 3247 0 R (subsection.7.10.1) 3447 0 R (subsection.7.11.1) 3463 0 R (subsection.7.12.1) 3479 0 R (subsection.7.13.1) 3535 0 R (subsection.7.14.1) 3544 0 R (subsection.7.15.1) 3559 0 R (subsection.7.16.1) 3610 0 R (subsection.7.17.1) 3620 0 R (subsection.7.18.1) 3705 0 R (subsection.7.19.1) 3771 0 R (subsection.7.2.1) 3291 0 R (subsection.7.20.1) 3794 0 R (subsection.7.21.1) 3842 0 R (subsection.7.3.1) 3307 0 R (subsection.7.4.1) 3317 0 R (subsection.7.5.1) 3347 0 R (subsection.7.6.1) 3362 0 R (subsection.7.7.1) 3394 0 R (subsection.7.8.1) 3405 0 R (subsection.7.9.1) 3415 0 R (subsection.8.1.1) 3884 0 R (subsection.8.10.1) 4109 0 R (subsection.8.11.1) 4128 0 R (subsection.8.12.1) 4163 0 R (subsection.8.13.1) 4200 0 R (subsection.8.14.1) 4210 0 R (subsection.8.15.1) 4224 0 R (subsection.8.16.1) 4245 0 R (subsection.8.17.1) 4263 0 R (subsection.8.18.1) 4287 0 R (subsection.8.19.1) 4304 0 R (subsection.8.2.1) 3895 0 R (subsection.8.20.1) 4321 0 R (subsection.8.21.1) 4329 0 R (subsection.8.22.1) 4384 0 R (subsection.8.23.1) 4435 0 R (subsection.8.24.1) 4452 0 R (subsection.8.25.1) 4471 0 R (subsection.8.26.1) 4500 0 R (subsection.8.27.1) 4526 0 R (subsection.8.28.1) 4536 0 R (subsection.8.29.1) 4653 0 R (subsection.8.3.1) 3910 0 R (subsection.8.30.1) 4842 0 R (subsection.8.31.1) 4862 0 R (subsection.8.32.1) 4883 0 R (subsection.8.33.1) 4907 0 R (subsection.8.34.1) 4962 0 R (subsection.8.4.1) 3968 0 R (subsection.8.5.1) 4000 0 R (subsection.8.6.1) 4022 0 R (subsection.8.7.1) 4050 0 R (subsection.8.8.1) 4064 0 R (subsection.8.9.1) 4080 0 R (subsubsection.1.6.1.1) 695 0 R (subsubsection.1.6.1.10) 760 0 R (subsubsection.1.6.1.2) 698 0 R (subsubsection.1.6.1.3) 707 0 R (subsubsection.1.6.1.4) 712 0 R (subsubsection.1.6.1.5) 726 0 R (subsubsection.1.6.1.6) 730 0 R (subsubsection.1.6.1.7) 735 0 R (subsubsection.1.6.1.8) 739 0 R (subsubsection.1.6.1.9) 755 0 R (subsubsection.1.8.1.1) 837 0 R (subsubsection.1.8.1.2) 839 0 R (subsubsection.1.8.3.1) 849 0 R (subsubsection.1.8.3.2) 851 0 R (subsubsection.1.8.3.3) 853 0 R (subsubsection.1.8.3.4) 855 0 R (subsubsection.1.8.3.5) 861 0 R (subsubsection.1.8.3.6) 863 0 R (subsubsection.1.8.3.7) 865 0 R (subsubsection.6.1.7.1) 1224 0 R (subsubsection.6.1.7.10) 1276 0 R (subsubsection.6.1.7.11) 1279 0 R (subsubsection.6.1.7.12) 1282 0 R (subsubsection.6.1.7.13) 1289 0 R (subsubsection.6.1.7.2) 1242 0 R (subsubsection.6.1.7.3) 1246 0 R (subsubsection.6.1.7.4) 1248 0 R (subsubsection.6.1.7.5) 1252 0 R (subsubsection.6.1.7.6) 1261 0 R (subsubsection.6.1.7.7) 1262 0 R (subsubsection.6.1.7.8) 1264 0 R (subsubsection.6.1.7.9) 1272 0 R (subsubsection.6.10.2.1) 2189 0 R (subsubsection.6.10.2.2) 2199 0 R (subsubsection.6.10.2.3) 2203 0 R (subsubsection.6.10.2.4) 2205 0 R (subsubsection.6.11.2.1) 2254 0 R (subsubsection.6.11.2.2) 2256 0 R (subsubsection.6.11.2.3) 2263 0 R (subsubsection.6.12.2.1) 2391 0 R (subsubsection.6.12.2.10) 2414 0 R (subsubsection.6.12.2.11) 2419 0 R (subsubsection.6.12.2.12) 2420 0 R (subsubsection.6.12.2.13) 2422 0 R (subsubsection.6.12.2.14) 2423 0 R (subsubsection.6.12.2.15) 2424 0 R (subsubsection.6.12.2.16) 2430 0 R (subsubsection.6.12.2.17) 2431 0 R (subsubsection.6.12.2.18) 2432 0 R (subsubsection.6.12.2.19) 2433 0 R (subsubsection.6.12.2.2) 2392 0 R (subsubsection.6.12.2.20) 2434 0 R (subsubsection.6.12.2.21) 2435 0 R (subsubsection.6.12.2.22) 2440 0 R (subsubsection.6.12.2.23) 2441 0 R (subsubsection.6.12.2.24) 2442 0 R (subsubsection.6.12.2.3) 2393 0 R (subsubsection.6.12.2.4) 2394 0 R (subsubsection.6.12.2.5) 2401 0 R (subsubsection.6.12.2.6) 2402 0 R (subsubsection.6.12.2.7) 2403 0 R (subsubsection.6.12.2.8) 2406 0 R (subsubsection.6.12.2.9) 2412 0 R (subsubsection.6.12.3.1) 2444 0 R (subsubsection.6.12.3.2) 2454 0 R (subsubsection.6.12.3.3) 2463 0 R (subsubsection.6.12.3.4) 2474 0 R (subsubsection.6.12.3.5) 2480 0 R (subsubsection.6.12.4.1) 2485 0 R (subsubsection.6.13.2.1) 2498 0 R (subsubsection.6.15.2.1) 2560 0 R (subsubsection.6.15.2.2) 2565 0 R (subsubsection.6.15.2.3) 2571 0 R (subsubsection.6.15.2.4) 2580 0 R (subsubsection.6.16.2.1) 2602 0 R (subsubsection.6.16.2.2) 2604 0 R (subsubsection.6.17.2.1) 2671 0 R (subsubsection.6.17.2.10) 2727 0 R (subsubsection.6.17.2.11) 2730 0 R (subsubsection.6.17.2.12) 2739 0 R (subsubsection.6.17.2.13) 2742 0 R (subsubsection.6.17.2.14) 2746 0 R (subsubsection.6.17.2.2) 2689 0 R (subsubsection.6.17.2.3) 2693 0 R (subsubsection.6.17.2.4) 2695 0 R (subsubsection.6.17.2.5) 2698 0 R (subsubsection.6.17.2.6) 2708 0 R (subsubsection.6.17.2.7) 2713 0 R (subsubsection.6.17.2.8) 2716 0 R (subsubsection.6.17.2.9) 2724 0 R (subsubsection.6.18.2.1) 2794 0 R (subsubsection.6.18.3.1) 2800 0 R (subsubsection.6.18.3.2) 2805 0 R (subsubsection.6.18.3.3) 2815 0 R (subsubsection.6.19.2.1) 2864 0 R (subsubsection.6.19.2.2) 2868 0 R (subsubsection.6.19.2.3) 2872 0 R (subsubsection.6.19.2.4) 2876 0 R (subsubsection.6.19.2.5) 2886 0 R (subsubsection.6.20.2.1) 2936 0 R (subsubsection.6.20.2.2) 2937 0 R (subsubsection.6.20.2.3) 2940 0 R (subsubsection.6.21.2.1) 3014 0 R (subsubsection.6.21.2.2) 3017 0 R (subsubsection.6.21.2.3) 3026 0 R (subsubsection.6.21.2.4) 3028 0 R (subsubsection.6.21.2.5) 3030 0 R (subsubsection.6.23.2.1) 3129 0 R (subsubsection.6.23.2.10) 3188 0 R (subsubsection.6.23.2.2) 3142 0 R (subsubsection.6.23.2.3) 3145 0 R (subsubsection.6.23.2.4) 3148 0 R (subsubsection.6.23.2.5) 3156 0 R (subsubsection.6.23.2.6) 3160 0 R (subsubsection.6.23.2.7) 3173 0 R (subsubsection.6.23.2.8) 3177 0 R (subsubsection.6.23.2.9) 3180 0 R (subsubsection.6.24.2.1) 3235 0 R (subsubsection.6.24.3.1) 3237 0 R (subsubsection.6.3.2.1) 1337 0 R (subsubsection.6.3.2.2) 1339 0 R (subsubsection.6.3.2.3) 1350 0 R (subsubsection.6.3.2.4) 1351 0 R (subsubsection.6.3.2.5) 1353 0 R (subsubsection.6.3.2.6) 1355 0 R (subsubsection.6.3.2.7) 1364 0 R (subsubsection.6.4.2.1) 1379 0 R (subsubsection.6.4.2.2) 1383 0 R (subsubsection.6.5.2.1) 1405 0 R (subsubsection.6.5.2.2) 1418 0 R (subsubsection.6.5.2.3) 1427 0 R (subsubsection.6.5.2.4) 1431 0 R (subsubsection.6.5.2.5) 1434 0 R (subsubsection.6.5.2.6) 1445 0 R (subsubsection.6.5.3.1) 1450 0 R (subsubsection.6.6.2.1) 1513 0 R (subsubsection.6.6.2.10) 1564 0 R (subsubsection.6.6.2.11) 1575 0 R (subsubsection.6.6.2.12) 1577 0 R (subsubsection.6.6.2.13) 1581 0 R (subsubsection.6.6.2.14) 1582 0 R (subsubsection.6.6.2.15) 1590 0 R (subsubsection.6.6.2.16) 1593 0 R (subsubsection.6.6.2.17) 1596 0 R (subsubsection.6.6.2.18) 1598 0 R (subsubsection.6.6.2.19) 1603 0 R (subsubsection.6.6.2.2) 1526 0 R (subsubsection.6.6.2.3) 1530 0 R (subsubsection.6.6.2.4) 1533 0 R (subsubsection.6.6.2.5) 1535 0 R (subsubsection.6.6.2.6) 1545 0 R (subsubsection.6.6.2.7) 1551 0 R (subsubsection.6.6.2.8) 1555 0 R (subsubsection.6.6.2.9) 1559 0 R (subsubsection.6.6.3.1) 1605 0 R (subsubsection.6.6.3.2) 1615 0 R (subsubsection.6.6.3.3) 1627 0 R (subsubsection.6.6.3.4) 1633 0 R (subsubsection.6.6.3.5) 1646 0 R (subsubsection.6.7.2.1) 1689 0 R (subsubsection.6.7.2.10) 1725 0 R (subsubsection.6.7.2.11) 1726 0 R (subsubsection.6.7.2.2) 1696 0 R (subsubsection.6.7.2.3) 1697 0 R (subsubsection.6.7.2.4) 1706 0 R (subsubsection.6.7.2.5) 1708 0 R (subsubsection.6.7.2.6) 1710 0 R (subsubsection.6.7.2.7) 1716 0 R (subsubsection.6.7.2.8) 1718 0 R (subsubsection.6.7.2.9) 1719 0 R (subsubsection.6.7.3.1) 1732 0 R (subsubsection.6.8.2.1) 1749 0 R (subsubsection.6.9.2.1) 2053 0 R (subsubsection.6.9.3.1) 2061 0 R (subsubsection.6.9.3.10) 2105 0 R (subsubsection.6.9.3.11) 2107 0 R (subsubsection.6.9.3.12) 2114 0 R (subsubsection.6.9.3.13) 2120 0 R (subsubsection.6.9.3.2) 2065 0 R (subsubsection.6.9.3.3) 2068 0 R (subsubsection.6.9.3.4) 2077 0 R (subsubsection.6.9.3.5) 2085 0 R (subsubsection.6.9.3.6) 2086 0 R (subsubsection.6.9.3.7) 2092 0 R (subsubsection.6.9.3.8) 2096 0 R (subsubsection.6.9.3.9) 2099 0 R (subsubsection.6.9.4.1) 2125 0 R (subsubsection.6.9.4.2) 2128 0 R (subsubsection.6.9.4.3) 2135 0 R (subsubsection.6.9.4.4) 2142 0 R (subsubsection.6.9.4.5) 2146 0 R (subsubsection.6.9.4.6) 2153 0 R (subsubsection.6.9.4.7) 2156 0 R] +/Limits [(Doc-Start) (subsubsection.6.9.4.7)] +>> endobj +5671 0 obj << +/Kids [5670 0 R] +>> endobj +5672 0 obj << +/Dests 5671 0 R +>> endobj +5673 0 obj << +/Type /Catalog +/Pages 5668 0 R +/Outlines 5669 0 R +/Names 5672 0 R +/PageMode /UseOutlines +/OpenAction 473 0 R +>> endobj +5674 0 obj << +/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() +/CreationDate (D:20060612102335+02'00') +/PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) +>> endobj +xref +0 5675 +0000000001 65535 f +0000000002 00000 f +0000000003 00000 f +0000000004 00000 f +0000000000 00000 f +0000000009 00000 n +0000050642 00000 n +0001261026 00000 n +0000000054 00000 n +0000000093 00000 n +0000050814 00000 n +0001260954 00000 n +0000000140 00000 n +0000000171 00000 n +0000054400 00000 n +0001260868 00000 n +0000000219 00000 n +0000000258 00000 n +0000054521 00000 n +0001260782 00000 n +0000000306 00000 n +0000000342 00000 n +0000058977 00000 n +0001260696 00000 n +0000000390 00000 n +0000000440 00000 n +0000059339 00000 n +0001260610 00000 n +0000000488 00000 n +0000000524 00000 n +0000063433 00000 n +0001260524 00000 n +0000000572 00000 n +0000000628 00000 n +0000080583 00000 n +0001260438 00000 n +0000000676 00000 n +0000000703 00000 n +0000102655 00000 n +0001260352 00000 n +0000000751 00000 n +0000000794 00000 n +0000110315 00000 n +0001260279 00000 n +0000000842 00000 n +0000000872 00000 n +0000119269 00000 n +0001260154 00000 n +0000000918 00000 n +0000000957 00000 n +0000119326 00000 n +0001260093 00000 n +0000001005 00000 n +0000001039 00000 n +0000125101 00000 n +0001259967 00000 n +0000001085 00000 n +0000001130 00000 n +0000125158 00000 n +0001259906 00000 n +0000001178 00000 n +0000001220 00000 n +0000134932 00000 n +0001259780 00000 n +0000001266 00000 n +0000001313 00000 n +0000134989 00000 n +0001259719 00000 n +0000001361 00000 n +0000001403 00000 n +0000147442 00000 n +0001259593 00000 n +0000001449 00000 n +0000001486 00000 n +0000147500 00000 n +0001259532 00000 n +0000001534 00000 n +0000001570 00000 n +0000154678 00000 n +0001259403 00000 n +0000001616 00000 n +0000001663 00000 n +0000154795 00000 n +0001259329 00000 n +0000001711 00000 n +0000001742 00000 n +0000193044 00000 n +0001259242 00000 n +0000001790 00000 n +0000001821 00000 n +0000196930 00000 n +0001259155 00000 n +0000001869 00000 n +0000001915 00000 n +0000205317 00000 n +0001259068 00000 n +0000001963 00000 n +0000002010 00000 n +0000210149 00000 n +0001258979 00000 n +0000002058 00000 n +0000002105 00000 n +0000228508 00000 n +0001258888 00000 n +0000002154 00000 n +0000002199 00000 n +0000271738 00000 n +0001258796 00000 n +0000002248 00000 n +0000002292 00000 n +0000288517 00000 n +0001258704 00000 n +0000002341 00000 n +0000002397 00000 n +0000293232 00000 n +0001258612 00000 n +0000002446 00000 n +0000002486 00000 n +0000377976 00000 n +0001258520 00000 n +0000002536 00000 n +0000002591 00000 n +0000387992 00000 n +0001258428 00000 n +0000002641 00000 n +0000002692 00000 n +0000399293 00000 n +0001258336 00000 n +0000002742 00000 n +0000002791 00000 n +0000440708 00000 n +0001258244 00000 n +0000002841 00000 n +0000002892 00000 n +0000446093 00000 n +0001258152 00000 n +0000002942 00000 n +0000002981 00000 n +0000451263 00000 n +0001258060 00000 n +0000003031 00000 n +0000003064 00000 n +0000462282 00000 n +0001257968 00000 n +0000003114 00000 n +0000003149 00000 n +0000468114 00000 n +0001257876 00000 n +0000003199 00000 n +0000003239 00000 n +0000502385 00000 n +0001257784 00000 n +0000003289 00000 n +0000003342 00000 n +0000517178 00000 n +0001257692 00000 n +0000003392 00000 n +0000003424 00000 n +0000531752 00000 n +0001257600 00000 n +0000003474 00000 n +0000003512 00000 n +0000543323 00000 n +0001257508 00000 n +0000003562 00000 n +0000003595 00000 n +0000554956 00000 n +0001257416 00000 n +0000003645 00000 n +0000003677 00000 n +0000563002 00000 n +0001257324 00000 n +0000003727 00000 n +0000003757 00000 n +0000590334 00000 n +0001257246 00000 n +0000003807 00000 n +0000003837 00000 n +0000600208 00000 n +0001257113 00000 n +0000003884 00000 n +0000003940 00000 n +0000600326 00000 n +0001257034 00000 n +0000003989 00000 n +0000004040 00000 n +0000603631 00000 n +0001256941 00000 n +0000004089 00000 n +0000004149 00000 n +0000605400 00000 n +0001256848 00000 n +0000004198 00000 n +0000004255 00000 n +0000609814 00000 n +0001256755 00000 n +0000004304 00000 n +0000004355 00000 n +0000612585 00000 n +0001256662 00000 n +0000004404 00000 n +0000004455 00000 n +0000618018 00000 n +0001256569 00000 n +0000004504 00000 n +0000004546 00000 n +0000620396 00000 n +0001256476 00000 n +0000004595 00000 n +0000004644 00000 n +0000622307 00000 n +0001256383 00000 n +0000004693 00000 n +0000004732 00000 n +0000627362 00000 n +0001256290 00000 n +0000004781 00000 n +0000004831 00000 n +0000631195 00000 n +0001256197 00000 n +0000004881 00000 n +0000004934 00000 n +0000634149 00000 n +0001256104 00000 n +0000004984 00000 n +0000005026 00000 n +0000641477 00000 n +0001256011 00000 n +0000005076 00000 n +0000005124 00000 n +0000646798 00000 n +0001255918 00000 n +0000005174 00000 n +0000005229 00000 n +0000649327 00000 n +0001255825 00000 n +0000005279 00000 n +0000005333 00000 n +0000657364 00000 n +0001255732 00000 n +0000005383 00000 n +0000005440 00000 n +0000659751 00000 n +0001255639 00000 n +0000005490 00000 n +0000005550 00000 n +0000668586 00000 n +0001255546 00000 n +0000005600 00000 n +0000005649 00000 n +0000685418 00000 n +0001255453 00000 n +0000005699 00000 n +0000005755 00000 n +0000690785 00000 n +0001255360 00000 n +0000005805 00000 n +0000005860 00000 n +0000698518 00000 n +0001255267 00000 n +0000005910 00000 n +0000005966 00000 n +0000705116 00000 n +0001255188 00000 n +0000006016 00000 n +0000006071 00000 n +0000708522 00000 n +0001255054 00000 n +0000006118 00000 n +0000006164 00000 n +0000708641 00000 n +0001254975 00000 n +0000006213 00000 n +0000006278 00000 n +0000711484 00000 n +0001254882 00000 n +0000006327 00000 n +0000006392 00000 n +0000720157 00000 n +0001254789 00000 n +0000006441 00000 n +0000006496 00000 n +0000727972 00000 n +0001254696 00000 n +0000006545 00000 n +0000006600 00000 n +0000735780 00000 n +0001254603 00000 n +0000006649 00000 n +0000006700 00000 n +0000740603 00000 n +0001254510 00000 n +0000006749 00000 n +0000006800 00000 n +0000745469 00000 n +0001254417 00000 n +0000006849 00000 n +0000006904 00000 n +0000749092 00000 n +0001254324 00000 n +0000006953 00000 n +0000007008 00000 n +0000756051 00000 n +0001254231 00000 n +0000007057 00000 n +0000007114 00000 n +0000759655 00000 n +0001254138 00000 n +0000007164 00000 n +0000007221 00000 n +0000766391 00000 n +0001254045 00000 n +0000007271 00000 n +0000007332 00000 n +0000773837 00000 n +0001253952 00000 n +0000007382 00000 n +0000007443 00000 n +0000779421 00000 n +0001253859 00000 n +0000007493 00000 n +0000007554 00000 n +0000782070 00000 n +0001253766 00000 n +0000007604 00000 n +0000007665 00000 n +0000786980 00000 n +0001253673 00000 n +0000007715 00000 n +0000007772 00000 n +0000791134 00000 n +0001253580 00000 n +0000007822 00000 n +0000007867 00000 n +0000796289 00000 n +0001253487 00000 n +0000007917 00000 n +0000007962 00000 n +0000800130 00000 n +0001253394 00000 n +0000008012 00000 n +0000008066 00000 n +0000804148 00000 n +0001253301 00000 n +0000008116 00000 n +0000008166 00000 n +0000805832 00000 n +0001253208 00000 n +0000008216 00000 n +0000008259 00000 n +0000812562 00000 n +0001253115 00000 n +0000008309 00000 n +0000008355 00000 n +0000823125 00000 n +0001253022 00000 n +0000008405 00000 n +0000008448 00000 n +0000832696 00000 n +0001252929 00000 n +0000008498 00000 n +0000008544 00000 n +0000836815 00000 n +0001252836 00000 n +0000008594 00000 n +0000008640 00000 n +0000841704 00000 n +0001252743 00000 n +0000008690 00000 n +0000008743 00000 n +0000846631 00000 n +0001252650 00000 n +0000008793 00000 n +0000008846 00000 n +0000849074 00000 n +0001252557 00000 n +0000008896 00000 n +0000008946 00000 n +0000859493 00000 n +0001252464 00000 n +0000008996 00000 n +0000009040 00000 n +0000881877 00000 n +0001252371 00000 n +0000009090 00000 n +0000009134 00000 n +0000929043 00000 n +0001252278 00000 n +0000009184 00000 n +0000009236 00000 n +0000934010 00000 n +0001252185 00000 n +0000009286 00000 n +0000009337 00000 n +0000939281 00000 n +0001252092 00000 n +0000009387 00000 n +0000009438 00000 n +0000943710 00000 n +0001251999 00000 n +0000009488 00000 n +0000009535 00000 n +0000958897 00000 n +0001251920 00000 n +0000009585 00000 n +0000009635 00000 n +0000961041 00000 n +0001251800 00000 n +0000009682 00000 n +0000009731 00000 n +0000961160 00000 n +0001251721 00000 n +0000009780 00000 n +0000009807 00000 n +0000971633 00000 n +0001251628 00000 n +0000009856 00000 n +0000009883 00000 n +0000974077 00000 n +0001251535 00000 n +0000009932 00000 n +0000009979 00000 n +0000976886 00000 n +0001251442 00000 n +0000010028 00000 n +0000010078 00000 n +0000979044 00000 n +0001251349 00000 n +0000010127 00000 n +0000010160 00000 n +0000982262 00000 n +0001251256 00000 n +0000010209 00000 n +0000010242 00000 n +0000984732 00000 n +0001251163 00000 n +0000010291 00000 n +0000010319 00000 n +0000998489 00000 n +0001251070 00000 n +0000010368 00000 n +0000010396 00000 n +0001001910 00000 n +0001250977 00000 n +0000010445 00000 n +0000010471 00000 n +0001008669 00000 n +0001250884 00000 n +0000010521 00000 n +0000010547 00000 n +0001012312 00000 n +0001250791 00000 n +0000010597 00000 n +0000010626 00000 n +0001021683 00000 n +0001250698 00000 n +0000010676 00000 n +0000010705 00000 n +0001024927 00000 n +0001250605 00000 n +0000010755 00000 n +0000010791 00000 n +0001029296 00000 n +0001250512 00000 n +0000010841 00000 n +0000010871 00000 n +0001034310 00000 n +0001250419 00000 n +0000010921 00000 n +0000010952 00000 n +0001046200 00000 n +0001250340 00000 n +0000011002 00000 n +0000011033 00000 n +0000011547 00000 n +0000011669 00000 n +0000016126 00000 n +0000011085 00000 n +0000016010 00000 n +0000016068 00000 n +0001242506 00000 n +0001222170 00000 n +0001242331 00000 n +0001221173 00000 n +0001200724 00000 n +0001221000 00000 n +0001243568 00000 n +0000015772 00000 n +0000015908 00000 n +0000015988 00000 n +0000016558 00000 n +0000016378 00000 n +0000016239 00000 n +0000016500 00000 n +0000022817 00000 n +0000018502 00000 n +0000016599 00000 n +0001199754 00000 n +0001181745 00000 n +0001199579 00000 n +0000022759 00000 n +0000018836 00000 n +0000018990 00000 n +0000019148 00000 n +0000019305 00000 n +0000019463 00000 n +0000019621 00000 n +0000019779 00000 n +0000019937 00000 n +0000020095 00000 n +0000020253 00000 n +0000020411 00000 n +0000020565 00000 n +0000020723 00000 n +0000020877 00000 n +0000021035 00000 n +0000021189 00000 n +0000021347 00000 n +0000021502 00000 n +0000021660 00000 n +0000021815 00000 n +0000021973 00000 n +0000022130 00000 n +0000022287 00000 n +0000022445 00000 n +0000022603 00000 n +0000031940 00000 n +0000025826 00000 n +0000022902 00000 n +0000026248 00000 n +0000026406 00000 n +0000026564 00000 n +0000026722 00000 n +0000026879 00000 n +0000027036 00000 n +0000027195 00000 n +0000027354 00000 n +0000027512 00000 n +0000027671 00000 n +0000027830 00000 n +0000027989 00000 n +0000028148 00000 n +0000028305 00000 n +0000028464 00000 n +0000028622 00000 n +0000028780 00000 n +0000028939 00000 n +0000029098 00000 n +0000029253 00000 n +0000029409 00000 n +0000029566 00000 n +0000029724 00000 n +0000029882 00000 n +0000030039 00000 n +0000030197 00000 n +0000030355 00000 n +0000030512 00000 n +0000030670 00000 n +0000030829 00000 n +0000030988 00000 n +0000031147 00000 n +0000031306 00000 n +0000031465 00000 n +0000031624 00000 n +0000031783 00000 n +0000040835 00000 n +0000034654 00000 n +0000032025 00000 n +0000040777 00000 n +0000035076 00000 n +0000035235 00000 n +0000035394 00000 n +0000035552 00000 n +0000035710 00000 n +0000035865 00000 n +0000036023 00000 n +0000036181 00000 n +0000036338 00000 n +0000036496 00000 n +0000036654 00000 n +0000036812 00000 n +0000036970 00000 n +0000037128 00000 n +0000037286 00000 n +0000037445 00000 n +0000037604 00000 n +0000037763 00000 n +0000037922 00000 n +0000038080 00000 n +0000038237 00000 n +0000038395 00000 n +0000038553 00000 n +0000038712 00000 n +0000038871 00000 n +0000039030 00000 n +0000039189 00000 n +0000039348 00000 n +0000039507 00000 n +0000039666 00000 n +0000039825 00000 n +0000039984 00000 n +0000040143 00000 n +0000040302 00000 n +0000040461 00000 n +0000040620 00000 n +0000046161 00000 n +0000042649 00000 n +0000040920 00000 n +0000046103 00000 n +0000042943 00000 n +0000043102 00000 n +0000043261 00000 n +0000043420 00000 n +0000043575 00000 n +0000043732 00000 n +0000043889 00000 n +0000044045 00000 n +0000044203 00000 n +0000044360 00000 n +0000044518 00000 n +0000044676 00000 n +0000044834 00000 n +0000044992 00000 n +0000045151 00000 n +0000045309 00000 n +0000045468 00000 n +0000045627 00000 n +0000045785 00000 n +0000045944 00000 n +0000050870 00000 n +0000048686 00000 n +0000046246 00000 n +0000050698 00000 n +0000048908 00000 n +0001181090 00000 n +0001179151 00000 n +0001180927 00000 n +0000049085 00000 n +0000049266 00000 n +0000049419 00000 n +0000049572 00000 n +0000049725 00000 n +0000049877 00000 n +0000050030 00000 n +0000050183 00000 n +0000050336 00000 n +0000050489 00000 n +0000050756 00000 n +0001243686 00000 n +0000192985 00000 n +0000399234 00000 n +0000196871 00000 n +0000205258 00000 n +0000210090 00000 n +0000288458 00000 n +0000228449 00000 n +0000468055 00000 n +0000154736 00000 n +0000054578 00000 n +0000054214 00000 n +0000050981 00000 n +0000054336 00000 n +0000054457 00000 n +0000059396 00000 n +0000057806 00000 n +0000054663 00000 n +0000057980 00000 n +0000058165 00000 n +0000058913 00000 n +0000059034 00000 n +0000059098 00000 n +0000058352 00000 n +0000058539 00000 n +0000059155 00000 n +0000059219 00000 n +0000058726 00000 n +0000059276 00000 n +0000210507 00000 n +0000213343 00000 n +0000352804 00000 n +0000357012 00000 n +0000348138 00000 n +0000063606 00000 n +0000062916 00000 n +0000059481 00000 n +0000063370 00000 n +0000063066 00000 n +0000063218 00000 n +0000063490 00000 n +0000063548 00000 n +0000069322 00000 n +0000067224 00000 n +0000063691 00000 n +0000068779 00000 n +0000068837 00000 n +0000068901 00000 n +0000067422 00000 n +0000068957 00000 n +0000069021 00000 n +0000067609 00000 n +0000067762 00000 n +0000067915 00000 n +0000068068 00000 n +0001178798 00000 n +0001176803 00000 n +0001178635 00000 n +0000069078 00000 n +0000069142 00000 n +0000068220 00000 n +0000068407 00000 n +0000068594 00000 n +0000069200 00000 n +0000069264 00000 n +0000418407 00000 n +0000641418 00000 n +0000244942 00000 n +0000244692 00000 n +0000075888 00000 n +0000072812 00000 n +0000069420 00000 n +0000075284 00000 n +0000073042 00000 n +0000073229 00000 n +0000073416 00000 n +0000073603 00000 n +0000075342 00000 n +0000075406 00000 n +0000073789 00000 n +0000073976 00000 n +0000075463 00000 n +0000075527 00000 n +0000074163 00000 n +0000074350 00000 n +0000074537 00000 n +0000075585 00000 n +0000075649 00000 n +0000074724 00000 n +0000074910 00000 n +0000075706 00000 n +0000075768 00000 n +0000075097 00000 n +0000075826 00000 n +0000244817 00000 n +0000263016 00000 n +0000249100 00000 n +0000239531 00000 n +0000235785 00000 n +0000239656 00000 n +0000239280 00000 n +0000249349 00000 n +0000245067 00000 n +0000080761 00000 n +0000078469 00000 n +0000075973 00000 n +0000080287 00000 n +0000080345 00000 n +0000078675 00000 n +0000078862 00000 n +0000079049 00000 n +0000080403 00000 n +0000080467 00000 n +0000079202 00000 n +0000079389 00000 n +0000079576 00000 n +0000079727 00000 n +0000079914 00000 n +0000080100 00000 n +0000080525 00000 n +0000080640 00000 n +0000080704 00000 n +0001243804 00000 n +0000257346 00000 n +0000239781 00000 n +0000257227 00000 n +0000276318 00000 n +0000085379 00000 n +0000083929 00000 n +0000080859 00000 n +0000085199 00000 n +0000084111 00000 n +0000084298 00000 n +0000084485 00000 n +0000084672 00000 n +0000084859 00000 n +0000085257 00000 n +0000085321 00000 n +0000085046 00000 n +0000087042 00000 n +0000086689 00000 n +0000085477 00000 n +0000086811 00000 n +0000086869 00000 n +0000086927 00000 n +0000086985 00000 n +0000090294 00000 n +0000089340 00000 n +0000087140 00000 n +0000090056 00000 n +0000090114 00000 n +0000089498 00000 n +0000089683 00000 n +0000089869 00000 n +0000090172 00000 n +0000090236 00000 n +0000249225 00000 n +0000248975 00000 n +0000093049 00000 n +0000092347 00000 n +0000090392 00000 n +0000092871 00000 n +0000092497 00000 n +0000092684 00000 n +0000092929 00000 n +0000092992 00000 n +0000096038 00000 n +0000095069 00000 n +0000093160 00000 n +0000095980 00000 n +0000095235 00000 n +0000095422 00000 n +0000095607 00000 n +0000095794 00000 n +0000099558 00000 n +0000098914 00000 n +0000096136 00000 n +0000099438 00000 n +0000099064 00000 n +0000099251 00000 n +0000099496 00000 n +0001243922 00000 n +0000103257 00000 n +0000102475 00000 n +0000099669 00000 n +0000102597 00000 n +0000102712 00000 n +0000102776 00000 n +0000102833 00000 n +0000102897 00000 n +0000102955 00000 n +0000103017 00000 n +0000103074 00000 n +0000103138 00000 n +0000103195 00000 n +0000106861 00000 n +0000106140 00000 n +0000103342 00000 n +0000106262 00000 n +0000106320 00000 n +0000106378 00000 n +0000106437 00000 n +0000106495 00000 n +0000106559 00000 n +0000106617 00000 n +0000106681 00000 n +0000106739 00000 n +0000106803 00000 n +0000110372 00000 n +0000109706 00000 n +0000106946 00000 n +0000109828 00000 n +0000109886 00000 n +0000109950 00000 n +0000110008 00000 n +0000110072 00000 n +0000110129 00000 n +0000110193 00000 n +0000110251 00000 n +0000112698 00000 n +0000112396 00000 n +0000110457 00000 n +0000112518 00000 n +0000112576 00000 n +0000112640 00000 n +0000113323 00000 n +0000113143 00000 n +0000112783 00000 n +0000113265 00000 n +0000119383 00000 n +0000115083 00000 n +0000113395 00000 n +0000119211 00000 n +0000115409 00000 n +0000115567 00000 n +0000115726 00000 n +0000115884 00000 n +0000116043 00000 n +0000116202 00000 n +0000116361 00000 n +0000116520 00000 n +0000116678 00000 n +0000116837 00000 n +0000116995 00000 n +0000117153 00000 n +0000117311 00000 n +0000117469 00000 n +0000117626 00000 n +0000117784 00000 n +0000117941 00000 n +0000118100 00000 n +0000118259 00000 n +0000118418 00000 n +0000118577 00000 n +0000118736 00000 n +0000118895 00000 n +0000119052 00000 n +0001244040 00000 n +0000120004 00000 n +0000119824 00000 n +0000119468 00000 n +0000119946 00000 n +0000125215 00000 n +0000121416 00000 n +0000120076 00000 n +0000125043 00000 n +0000121718 00000 n +0000121876 00000 n +0000122034 00000 n +0000122192 00000 n +0000122350 00000 n +0000122508 00000 n +0000122665 00000 n +0000122823 00000 n +0000122980 00000 n +0000123138 00000 n +0000123297 00000 n +0000123456 00000 n +0000123614 00000 n +0000123773 00000 n +0000123931 00000 n +0000124090 00000 n +0000124249 00000 n +0000124408 00000 n +0000124566 00000 n +0000124725 00000 n +0000124884 00000 n +0000125847 00000 n +0000125667 00000 n +0000125300 00000 n +0000125789 00000 n +0000135046 00000 n +0000127872 00000 n +0000125919 00000 n +0000134874 00000 n +0000128342 00000 n +0000128495 00000 n +0000128653 00000 n +0000128805 00000 n +0000128963 00000 n +0000129115 00000 n +0000129273 00000 n +0000129426 00000 n +0000129584 00000 n +0000129737 00000 n +0000129895 00000 n +0000130047 00000 n +0000130204 00000 n +0000130357 00000 n +0000130515 00000 n +0000130668 00000 n +0000130825 00000 n +0000130978 00000 n +0000131136 00000 n +0000131289 00000 n +0000131448 00000 n +0000131601 00000 n +0000131760 00000 n +0000131912 00000 n +0000132070 00000 n +0000132223 00000 n +0000132382 00000 n +0000132535 00000 n +0000132693 00000 n +0000132846 00000 n +0000133005 00000 n +0000133158 00000 n +0000133317 00000 n +0000133469 00000 n +0000133627 00000 n +0000133780 00000 n +0000133939 00000 n +0000134092 00000 n +0000134250 00000 n +0000134403 00000 n +0000134562 00000 n +0000134715 00000 n +0000600267 00000 n +0000603572 00000 n +0000605341 00000 n +0000609755 00000 n +0000612526 00000 n +0000617959 00000 n +0000620337 00000 n +0000622248 00000 n +0000627303 00000 n +0000631136 00000 n +0000634090 00000 n +0000646739 00000 n +0000649268 00000 n +0000657305 00000 n +0000659692 00000 n +0000668526 00000 n +0000685358 00000 n +0000690725 00000 n +0000698458 00000 n +0000705056 00000 n +0000135684 00000 n +0000135499 00000 n +0000135131 00000 n +0000135624 00000 n +0000147558 00000 n +0000138967 00000 n +0000135757 00000 n +0000147382 00000 n +0000139555 00000 n +0000139708 00000 n +0000139867 00000 n +0000140021 00000 n +0000140180 00000 n +0000140334 00000 n +0000140493 00000 n +0000140647 00000 n +0000140805 00000 n +0000140959 00000 n +0000141118 00000 n +0000141272 00000 n +0000141431 00000 n +0000141585 00000 n +0000141744 00000 n +0000141897 00000 n +0000142055 00000 n +0000142208 00000 n +0000142367 00000 n +0000142521 00000 n +0000142681 00000 n +0000142835 00000 n +0000142994 00000 n +0000143148 00000 n +0000143308 00000 n +0000143462 00000 n +0000143622 00000 n +0000143776 00000 n +0000143936 00000 n +0000144090 00000 n +0000144250 00000 n +0000144404 00000 n +0000144564 00000 n +0000144718 00000 n +0000144877 00000 n +0000145031 00000 n +0000145191 00000 n +0000145344 00000 n +0000145503 00000 n +0000145655 00000 n +0000145815 00000 n +0000145969 00000 n +0000146128 00000 n +0000146282 00000 n +0000146442 00000 n +0000146595 00000 n +0000146755 00000 n +0000146909 00000 n +0000147069 00000 n +0000147223 00000 n +0001244159 00000 n +0000708581 00000 n +0000711424 00000 n +0000720097 00000 n +0000727912 00000 n +0000735720 00000 n +0000740543 00000 n +0000745409 00000 n +0000749032 00000 n +0000755991 00000 n +0000759595 00000 n +0000766331 00000 n +0000773777 00000 n +0000779361 00000 n +0000782010 00000 n +0000786920 00000 n +0000791074 00000 n +0000796229 00000 n +0000800070 00000 n +0000804088 00000 n +0000805772 00000 n +0000812502 00000 n +0000823065 00000 n +0000832636 00000 n +0000836755 00000 n +0000841644 00000 n +0000152463 00000 n +0000149284 00000 n +0000147644 00000 n +0000152403 00000 n +0000149584 00000 n +0000149738 00000 n +0000149898 00000 n +0000150051 00000 n +0000150211 00000 n +0000150363 00000 n +0000150522 00000 n +0000150676 00000 n +0000150836 00000 n +0000150990 00000 n +0000151150 00000 n +0000151304 00000 n +0000151464 00000 n +0000151618 00000 n +0000151776 00000 n +0000151930 00000 n +0000152090 00000 n +0000152243 00000 n +0000846571 00000 n +0000849014 00000 n +0000859433 00000 n +0000881817 00000 n +0000928983 00000 n +0000933950 00000 n +0000939221 00000 n +0000943650 00000 n +0000958837 00000 n +0000154913 00000 n +0000154492 00000 n +0000152549 00000 n +0000154618 00000 n +0000154853 00000 n +0000160237 00000 n +0000157887 00000 n +0000154999 00000 n +0000159925 00000 n +0000158115 00000 n +0000158303 00000 n +0000158491 00000 n +0000158679 00000 n +0000158867 00000 n +0000159054 00000 n +0000159241 00000 n +0000159428 00000 n +0000159985 00000 n +0000160051 00000 n +0000159581 00000 n +0000159753 00000 n +0000160111 00000 n +0000160177 00000 n +0000179694 00000 n +0000175554 00000 n +0000186461 00000 n +0000175674 00000 n +0000186586 00000 n +0000182836 00000 n +0000164053 00000 n +0000162923 00000 n +0000160349 00000 n +0000163384 00000 n +0000163444 00000 n +0000163510 00000 n +0000163570 00000 n +0000163629 00000 n +0000163689 00000 n +0000163755 00000 n +0000163079 00000 n +0000163815 00000 n +0000163873 00000 n +0000163933 00000 n +0000163993 00000 n +0000163233 00000 n +0000446033 00000 n +0000169637 00000 n +0000166048 00000 n +0000164139 00000 n +0000169220 00000 n +0001175964 00000 n +0001158689 00000 n +0001175783 00000 n +0000169280 00000 n +0000166339 00000 n +0000169340 00000 n +0000166493 00000 n +0000169399 00000 n +0000166647 00000 n +0000166835 00000 n +0000169457 00000 n +0000166989 00000 n +0000167177 00000 n +0000167365 00000 n +0000167518 00000 n +0000167706 00000 n +0000169517 00000 n +0000167860 00000 n +0000168047 00000 n +0000168200 00000 n +0000168386 00000 n +0000169577 00000 n +0000168538 00000 n +0000168726 00000 n +0000168880 00000 n +0000169067 00000 n +0000182711 00000 n +0000182585 00000 n +0000175738 00000 n +0000171876 00000 n +0000169737 00000 n +0000174956 00000 n +0000175016 00000 n +0000172158 00000 n +0000172346 00000 n +0000172500 00000 n +0000172688 00000 n +0000175076 00000 n +0000172842 00000 n +0000175136 00000 n +0000173030 00000 n +0000173218 00000 n +0000173372 00000 n +0000173559 00000 n +0000175195 00000 n +0000175255 00000 n +0000173712 00000 n +0000175315 00000 n +0000173900 00000 n +0000175375 00000 n +0000174087 00000 n +0000175434 00000 n +0000174275 00000 n +0000175494 00000 n +0000175614 00000 n +0000174462 00000 n +0000174614 00000 n +0001158068 00000 n +0001147348 00000 n +0001157887 00000 n +0000174802 00000 n +0001244284 00000 n +0000179820 00000 n +0000179568 00000 n +0000182460 00000 n +0000186712 00000 n +0000188422 00000 n +0000961100 00000 n +0000179945 00000 n +0000177550 00000 n +0000175852 00000 n +0000179448 00000 n +0000179508 00000 n +0000177778 00000 n +0000177931 00000 n +0000178118 00000 n +0000179634 00000 n +0000178272 00000 n +0000179760 00000 n +0000178426 00000 n +0000178580 00000 n +0000178768 00000 n +0000179885 00000 n +0000178922 00000 n +0000179075 00000 n +0000179263 00000 n +0000182900 00000 n +0000181610 00000 n +0000180045 00000 n +0000182400 00000 n +0000181784 00000 n +0000182526 00000 n +0000182651 00000 n +0000181938 00000 n +0000182777 00000 n +0000182092 00000 n +0000182246 00000 n +0001001850 00000 n +0000186838 00000 n +0000184801 00000 n +0000183000 00000 n +0000186341 00000 n +0000186401 00000 n +0000185011 00000 n +0000185165 00000 n +0000185353 00000 n +0000186527 00000 n +0000185541 00000 n +0000185695 00000 n +0000186652 00000 n +0000185849 00000 n +0000186001 00000 n +0000186778 00000 n +0000186188 00000 n +0000188548 00000 n +0000187898 00000 n +0000186938 00000 n +0000188362 00000 n +0000188054 00000 n +0000188488 00000 n +0000188208 00000 n +0000193522 00000 n +0000190467 00000 n +0000188648 00000 n +0000192925 00000 n +0000193102 00000 n +0000193162 00000 n +0000190722 00000 n +0000190876 00000 n +0000191030 00000 n +0000191183 00000 n +0000191337 00000 n +0000191491 00000 n +0000191644 00000 n +0000193222 00000 n +0000193282 00000 n +0000191797 00000 n +0000193342 00000 n +0000191985 00000 n +0000193402 00000 n +0000192173 00000 n +0000192361 00000 n +0000193462 00000 n +0000192549 00000 n +0000192737 00000 n +0000517118 00000 n +0000531692 00000 n +0000543263 00000 n +0000554896 00000 n +0000562942 00000 n +0000590274 00000 n +0000434357 00000 n +0000197412 00000 n +0000195297 00000 n +0000193622 00000 n +0000196811 00000 n +0000196988 00000 n +0000197048 00000 n +0000195498 00000 n +0000195684 00000 n +0000195871 00000 n +0000196059 00000 n +0000196247 00000 n +0000196435 00000 n +0000196623 00000 n +0000197108 00000 n +0000197168 00000 n +0000197227 00000 n +0000197286 00000 n +0000197352 00000 n +0001244409 00000 n +0000200040 00000 n +0000199788 00000 n +0000202437 00000 n +0000199664 00000 n +0000199914 00000 n +0000200166 00000 n +0000199106 00000 n +0000197526 00000 n +0000199604 00000 n +0000199730 00000 n +0000199854 00000 n +0000199262 00000 n +0000199980 00000 n +0000199450 00000 n +0000200106 00000 n +0000202562 00000 n +0000201358 00000 n +0000200279 00000 n +0000202377 00000 n +0000201541 00000 n +0000201729 00000 n +0000201883 00000 n +0000202035 00000 n +0000202502 00000 n +0000202189 00000 n +0000974017 00000 n +0000976826 00000 n +0000205795 00000 n +0000203949 00000 n +0000202675 00000 n +0000205198 00000 n +0000205375 00000 n +0000205435 00000 n +0000204141 00000 n +0000204329 00000 n +0000204516 00000 n +0000205495 00000 n +0000205554 00000 n +0000205612 00000 n +0000204703 00000 n +0000204856 00000 n +0000205670 00000 n +0000205736 00000 n +0000205010 00000 n +0000434237 00000 n +0000210626 00000 n +0000207924 00000 n +0000205909 00000 n +0000210030 00000 n +0000210207 00000 n +0000210267 00000 n +0000208152 00000 n +0000208340 00000 n +0000210327 00000 n +0000208527 00000 n +0000208715 00000 n +0000208903 00000 n +0000209091 00000 n +0000209279 00000 n +0000209467 00000 n +0000210387 00000 n +0000209654 00000 n +0000209842 00000 n +0000210447 00000 n +0000210566 00000 n +0000332435 00000 n +0000217247 00000 n +0000217372 00000 n +0000217498 00000 n +0000221567 00000 n +0000221753 00000 n +0000213467 00000 n +0000212625 00000 n +0000210726 00000 n +0000213283 00000 n +0000212790 00000 n +0000212943 00000 n +0000213407 00000 n +0000213097 00000 n +0000392779 00000 n +0000217624 00000 n +0000215451 00000 n +0000213566 00000 n +0000217187 00000 n +0000215670 00000 n +0000215823 00000 n +0000217313 00000 n +0000215977 00000 n +0000216165 00000 n +0000216319 00000 n +0000217438 00000 n +0000216472 00000 n +0000216659 00000 n +0000217564 00000 n +0000216811 00000 n +0000216999 00000 n +0001244534 00000 n +0000221873 00000 n +0000219935 00000 n +0000217737 00000 n +0000221507 00000 n +0000220145 00000 n +0000220333 00000 n +0000220485 00000 n +0000221633 00000 n +0000220638 00000 n +0000220826 00000 n +0000220980 00000 n +0000221693 00000 n +0000221813 00000 n +0000221133 00000 n +0000221320 00000 n +0000366579 00000 n +0000222615 00000 n +0000222429 00000 n +0000221986 00000 n +0000222555 00000 n +0000228807 00000 n +0000224914 00000 n +0000222701 00000 n +0000228389 00000 n +0000228567 00000 n +0000228627 00000 n +0000228687 00000 n +0000225205 00000 n +0000225392 00000 n +0000225580 00000 n +0000225768 00000 n +0000225956 00000 n +0000226144 00000 n +0000228747 00000 n +0000226331 00000 n +0000226518 00000 n +0000226706 00000 n +0000226893 00000 n +0000227078 00000 n +0000227266 00000 n +0000227453 00000 n +0000227641 00000 n +0000227828 00000 n +0000228016 00000 n +0000228203 00000 n +0000252502 00000 n +0000252376 00000 n +0000239405 00000 n +0000235904 00000 n +0000231345 00000 n +0000228920 00000 n +0000235545 00000 n +0000231672 00000 n +0000231860 00000 n +0000235605 00000 n +0000232048 00000 n +0000232236 00000 n +0000232424 00000 n +0000232612 00000 n +0000232800 00000 n +0000235665 00000 n +0000232987 00000 n +0000233175 00000 n +0000233363 00000 n +0000233551 00000 n +0000233739 00000 n +0000233893 00000 n +0000234081 00000 n +0000234268 00000 n +0000234456 00000 n +0000234644 00000 n +0000234798 00000 n +0000234985 00000 n +0000235173 00000 n +0000235725 00000 n +0000235844 00000 n +0000235359 00000 n +0000252124 00000 n +0000249474 00000 n +0000252250 00000 n +0000266327 00000 n +0000322029 00000 n +0000263140 00000 n +0000239844 00000 n +0000237455 00000 n +0000236017 00000 n +0000239220 00000 n +0000237683 00000 n +0000239345 00000 n +0000237836 00000 n +0000237990 00000 n +0000238143 00000 n +0000239471 00000 n +0000238297 00000 n +0000238451 00000 n +0000239596 00000 n +0000238605 00000 n +0000239721 00000 n +0000238759 00000 n +0000238913 00000 n +0000239066 00000 n +0001034250 00000 n +0001012252 00000 n +0000245192 00000 n +0000241893 00000 n +0000239930 00000 n +0000244572 00000 n +0000244632 00000 n +0000242166 00000 n +0000242354 00000 n +0000242542 00000 n +0000242696 00000 n +0000242850 00000 n +0000244757 00000 n +0000243004 00000 n +0000243158 00000 n +0000243312 00000 n +0000244882 00000 n +0000243466 00000 n +0000243654 00000 n +0000243808 00000 n +0000245007 00000 n +0000243962 00000 n +0000244115 00000 n +0000244268 00000 n +0000244421 00000 n +0000245132 00000 n +0001244659 00000 n +0000978984 00000 n +0000984672 00000 n +0000249538 00000 n +0000247081 00000 n +0000245278 00000 n +0000248915 00000 n +0000247309 00000 n +0000247463 00000 n +0000247617 00000 n +0000249040 00000 n +0000247770 00000 n +0000249165 00000 n +0000247958 00000 n +0000248146 00000 n +0000248300 00000 n +0000249290 00000 n +0000249414 00000 n +0000248454 00000 n +0000248608 00000 n +0000248761 00000 n +0000252566 00000 n +0000251053 00000 n +0000249624 00000 n +0000252004 00000 n +0000252064 00000 n +0000251236 00000 n +0000251389 00000 n +0000252190 00000 n +0000251543 00000 n +0000251696 00000 n +0000252316 00000 n +0000251850 00000 n +0000252442 00000 n +0000257471 00000 n +0000255076 00000 n +0000252666 00000 n +0000257047 00000 n +0000257107 00000 n +0000257167 00000 n +0000257286 00000 n +0000255304 00000 n +0000255458 00000 n +0000255646 00000 n +0000255834 00000 n +0000256022 00000 n +0000256176 00000 n +0000256364 00000 n +0000256552 00000 n +0000256706 00000 n +0000257411 00000 n +0000256859 00000 n +0000276072 00000 n +0000285635 00000 n +0000263264 00000 n +0000260267 00000 n +0000257597 00000 n +0000262956 00000 n +0000260531 00000 n +0000260719 00000 n +0000260906 00000 n +0000261060 00000 n +0000263081 00000 n +0000261214 00000 n +0000261401 00000 n +0000261589 00000 n +0000261743 00000 n +0000261897 00000 n +0000263204 00000 n +0000262051 00000 n +0000262205 00000 n +0000262393 00000 n +0000262581 00000 n +0000262769 00000 n +0000266453 00000 n +0000265051 00000 n +0000263390 00000 n +0000266267 00000 n +0000265243 00000 n +0000265397 00000 n +0000265550 00000 n +0000266393 00000 n +0000265703 00000 n +0000265891 00000 n +0000266079 00000 n +0000272037 00000 n +0000268528 00000 n +0000266566 00000 n +0000271618 00000 n +0000271678 00000 n +0000271797 00000 n +0000271857 00000 n +0000268801 00000 n +0000268989 00000 n +0000269177 00000 n +0000269365 00000 n +0000269552 00000 n +0000269740 00000 n +0000269928 00000 n +0000270116 00000 n +0000270303 00000 n +0000270490 00000 n +0000270678 00000 n +0000271917 00000 n +0000270866 00000 n +0000271977 00000 n +0000271054 00000 n +0000271242 00000 n +0000271430 00000 n +0001244784 00000 n +0000276192 00000 n +0000280515 00000 n +0000280390 00000 n +0000282714 00000 n +0000282589 00000 n +0000276443 00000 n +0000278150 00000 n +0000278275 00000 n +0000280264 00000 n +0000276507 00000 n +0000274118 00000 n +0000272137 00000 n +0000275952 00000 n +0000276012 00000 n +0000276132 00000 n +0000274346 00000 n +0000274534 00000 n +0000274688 00000 n +0000274842 00000 n +0000274996 00000 n +0000275150 00000 n +0000276258 00000 n +0000276383 00000 n +0000275304 00000 n +0000275492 00000 n +0000275646 00000 n +0000275798 00000 n +0000278400 00000 n +0000277567 00000 n +0000276620 00000 n +0000278030 00000 n +0000278090 00000 n +0000277723 00000 n +0000278216 00000 n +0000277876 00000 n +0000278340 00000 n +0000280641 00000 n +0000279740 00000 n +0000278499 00000 n +0000280204 00000 n +0000279896 00000 n +0000280330 00000 n +0000280050 00000 n +0000280455 00000 n +0000280581 00000 n +0000282839 00000 n +0000282228 00000 n +0000280754 00000 n +0000282529 00000 n +0000282375 00000 n +0000282655 00000 n +0000282779 00000 n +0000285755 00000 n +0000284299 00000 n +0000282952 00000 n +0000285515 00000 n +0000285575 00000 n +0000285695 00000 n +0000284491 00000 n +0000284679 00000 n +0000284867 00000 n +0000285054 00000 n +0000285207 00000 n +0000285361 00000 n +0000288876 00000 n +0000287148 00000 n +0000285855 00000 n +0000288398 00000 n +0000288576 00000 n +0000288636 00000 n +0000287340 00000 n +0000287528 00000 n +0000288696 00000 n +0000288756 00000 n +0000288816 00000 n +0000287715 00000 n +0000287903 00000 n +0000288091 00000 n +0000288244 00000 n +0001244909 00000 n +0000371117 00000 n +0000293471 00000 n +0000291184 00000 n +0000288976 00000 n +0000293112 00000 n +0000293172 00000 n +0000293291 00000 n +0000293351 00000 n +0000291421 00000 n +0000291574 00000 n +0000293411 00000 n +0000291727 00000 n +0000291881 00000 n +0000292035 00000 n +0000292189 00000 n +0000292343 00000 n +0000292497 00000 n +0000292651 00000 n +0000292804 00000 n +0000292958 00000 n +0000387932 00000 n +0000440648 00000 n +0000377916 00000 n +0000305355 00000 n +0000296574 00000 n +0000293571 00000 n +0000303557 00000 n +0000303617 00000 n +0000297036 00000 n +0000297190 00000 n +0000297344 00000 n +0000297498 00000 n +0000297650 00000 n +0000297804 00000 n +0000297958 00000 n +0000303677 00000 n +0000303737 00000 n +0000298112 00000 n +0000303797 00000 n +0000298300 00000 n +0000303857 00000 n +0000298488 00000 n +0000303917 00000 n +0000298676 00000 n +0000303977 00000 n +0000298863 00000 n +0000304037 00000 n +0000299051 00000 n +0000304097 00000 n +0000299238 00000 n +0000304157 00000 n +0000299426 00000 n +0000304217 00000 n +0000299613 00000 n +0000304277 00000 n +0000299801 00000 n +0000304337 00000 n +0000299989 00000 n +0000304397 00000 n +0000300177 00000 n +0000304457 00000 n +0000300365 00000 n +0000304517 00000 n +0000300552 00000 n +0000304577 00000 n +0000300740 00000 n +0000304637 00000 n +0000300928 00000 n +0000304697 00000 n +0000301116 00000 n +0000304757 00000 n +0000301304 00000 n +0000304816 00000 n +0000301491 00000 n +0000304876 00000 n +0000301679 00000 n +0000304936 00000 n +0000301866 00000 n +0000304996 00000 n +0000302054 00000 n +0000305056 00000 n +0000302242 00000 n +0000305116 00000 n +0000302430 00000 n +0000302618 00000 n +0000302806 00000 n +0000305176 00000 n +0000302994 00000 n +0000305236 00000 n +0000303182 00000 n +0000305295 00000 n +0000303370 00000 n +0000343805 00000 n +0000322209 00000 n +0000309191 00000 n +0000305455 00000 n +0000319812 00000 n +0000319872 00000 n +0000309815 00000 n +0000319932 00000 n +0000310003 00000 n +0000319992 00000 n +0000310191 00000 n +0000320052 00000 n +0000310379 00000 n +0000320112 00000 n +0000310567 00000 n +0000320172 00000 n +0000310754 00000 n +0000320232 00000 n +0000310941 00000 n +0000320292 00000 n +0000311128 00000 n +0000320352 00000 n +0000311315 00000 n +0000320411 00000 n +0000311503 00000 n +0000320471 00000 n +0000311691 00000 n +0000320531 00000 n +0000311879 00000 n +0000320591 00000 n +0000312067 00000 n +0000320651 00000 n +0000312254 00000 n +0000320711 00000 n +0000312442 00000 n +0000320771 00000 n +0000312630 00000 n +0000320831 00000 n +0000312817 00000 n +0000320891 00000 n +0000313005 00000 n +0000320950 00000 n +0000313193 00000 n +0000321010 00000 n +0000313380 00000 n +0000321069 00000 n +0000313568 00000 n +0000321129 00000 n +0000313756 00000 n +0000321189 00000 n +0000313944 00000 n +0000321249 00000 n +0000314132 00000 n +0000321309 00000 n +0000314320 00000 n +0000321369 00000 n +0000314507 00000 n +0000321429 00000 n +0000314695 00000 n +0000321489 00000 n +0000314883 00000 n +0000315071 00000 n +0000315225 00000 n +0000321549 00000 n +0000315413 00000 n +0000315601 00000 n +0000321609 00000 n +0000315754 00000 n +0000315942 00000 n +0000316095 00000 n +0000321669 00000 n +0000316283 00000 n +0000316471 00000 n +0000316625 00000 n +0000321729 00000 n +0000316813 00000 n +0000321789 00000 n +0000317001 00000 n +0000321849 00000 n +0000321909 00000 n +0000317188 00000 n +0000317375 00000 n +0000321969 00000 n +0000317563 00000 n +0000317750 00000 n +0000317938 00000 n +0000318126 00000 n +0000322089 00000 n +0000322149 00000 n +0000318314 00000 n +0000318502 00000 n +0000318690 00000 n +0000318878 00000 n +0000319066 00000 n +0000319254 00000 n +0000319440 00000 n +0000319626 00000 n +0000348261 00000 n +0000332615 00000 n +0000325139 00000 n +0000322335 00000 n +0000332316 00000 n +0000325610 00000 n +0000325798 00000 n +0000325986 00000 n +0000326174 00000 n +0000326362 00000 n +0000326550 00000 n +0000326738 00000 n +0000326926 00000 n +0000327114 00000 n +0000327302 00000 n +0000327488 00000 n +0000327642 00000 n +0000327830 00000 n +0000328017 00000 n +0000328205 00000 n +0000328359 00000 n +0000328546 00000 n +0000328734 00000 n +0000328920 00000 n +0000329108 00000 n +0000329296 00000 n +0000329484 00000 n +0000329672 00000 n +0000329860 00000 n +0000330048 00000 n +0000330236 00000 n +0000332376 00000 n +0000330424 00000 n +0000330611 00000 n +0000330765 00000 n +0000330953 00000 n +0000331107 00000 n +0000332495 00000 n +0000331295 00000 n +0000331449 00000 n +0000332555 00000 n +0000331637 00000 n +0000331791 00000 n +0000331978 00000 n +0000332130 00000 n +0000361148 00000 n +0000356886 00000 n +0000352679 00000 n +0000348386 00000 n +0000361023 00000 n +0000361274 00000 n +0000352929 00000 n +0000348018 00000 n +0000356760 00000 n +0000366399 00000 n +0000370931 00000 n +0000371243 00000 n +0000343925 00000 n +0000335313 00000 n +0000332728 00000 n +0000343145 00000 n +0000343205 00000 n +0000335811 00000 n +0000335997 00000 n +0000343265 00000 n +0000336183 00000 n +0000336370 00000 n +0000343325 00000 n +0000336557 00000 n +0000336745 00000 n +0000343385 00000 n +0000336933 00000 n +0000337121 00000 n +0000337308 00000 n +0000337496 00000 n +0000337684 00000 n +0000337872 00000 n +0000338059 00000 n +0000338247 00000 n +0000343445 00000 n +0000338435 00000 n +0000338589 00000 n +0000338777 00000 n +0000338965 00000 n +0000339153 00000 n +0000343505 00000 n +0000339341 00000 n +0000339528 00000 n +0000339716 00000 n +0000343565 00000 n +0000339903 00000 n +0000340091 00000 n +0000340279 00000 n +0000340467 00000 n +0000340655 00000 n +0000340807 00000 n +0000340993 00000 n +0000341147 00000 n +0000343625 00000 n +0000341335 00000 n +0000341523 00000 n +0000341711 00000 n +0000341865 00000 n +0000342053 00000 n +0000342207 00000 n +0000343685 00000 n +0000342394 00000 n +0000342582 00000 n +0000343745 00000 n +0000343865 00000 n +0000342770 00000 n +0000342957 00000 n +0000348450 00000 n +0000346188 00000 n +0000344051 00000 n +0000347898 00000 n +0000347958 00000 n +0000348078 00000 n +0000346398 00000 n +0000346586 00000 n +0000346774 00000 n +0000348201 00000 n +0000346961 00000 n +0000347149 00000 n +0000348326 00000 n +0000347337 00000 n +0000347524 00000 n +0000347711 00000 n +0001245034 00000 n +0000352993 00000 n +0000350915 00000 n +0000348563 00000 n +0000352559 00000 n +0000352619 00000 n +0000351125 00000 n +0000351279 00000 n +0000351467 00000 n +0000351655 00000 n +0000351843 00000 n +0000351997 00000 n +0000352185 00000 n +0000352744 00000 n +0000352869 00000 n +0000352372 00000 n +0000357075 00000 n +0000355321 00000 n +0000353119 00000 n +0000356640 00000 n +0000356700 00000 n +0000355513 00000 n +0000355701 00000 n +0000355889 00000 n +0000356826 00000 n +0000356077 00000 n +0000356265 00000 n +0000356952 00000 n +0000356452 00000 n +0000361338 00000 n +0000359260 00000 n +0000357201 00000 n +0000360903 00000 n +0000360963 00000 n +0000359470 00000 n +0000361089 00000 n +0000359657 00000 n +0000359811 00000 n +0000359999 00000 n +0000360187 00000 n +0000360375 00000 n +0000360562 00000 n +0000361214 00000 n +0000360716 00000 n +0000366705 00000 n +0000363663 00000 n +0000361464 00000 n +0000366219 00000 n +0000366279 00000 n +0000363918 00000 n +0000364106 00000 n +0000364294 00000 n +0000366339 00000 n +0000366459 00000 n +0000364482 00000 n +0000364669 00000 n +0000366519 00000 n +0000364856 00000 n +0000365043 00000 n +0000365229 00000 n +0000365383 00000 n +0000365537 00000 n +0000365691 00000 n +0000366645 00000 n +0000365843 00000 n +0000366031 00000 n +0000371369 00000 n +0000368514 00000 n +0000366831 00000 n +0000370871 00000 n +0000370997 00000 n +0000368769 00000 n +0000368922 00000 n +0000369075 00000 n +0000371057 00000 n +0000369229 00000 n +0000369383 00000 n +0000369537 00000 n +0000369691 00000 n +0000369845 00000 n +0000369999 00000 n +0000371183 00000 n +0000370153 00000 n +0000370341 00000 n +0000371309 00000 n +0000370529 00000 n +0000370683 00000 n +0000372116 00000 n +0000371930 00000 n +0000371481 00000 n +0000372056 00000 n +0001245159 00000 n +0000378512 00000 n +0000374607 00000 n +0000372202 00000 n +0000377856 00000 n +0000378035 00000 n +0000378095 00000 n +0000374889 00000 n +0000378155 00000 n +0000375042 00000 n +0000375230 00000 n +0000375418 00000 n +0000375606 00000 n +0000375793 00000 n +0000375980 00000 n +0000376167 00000 n +0000376352 00000 n +0000376540 00000 n +0000376728 00000 n +0000376916 00000 n +0000378215 00000 n +0000378275 00000 n +0000377104 00000 n +0000377292 00000 n +0000378335 00000 n +0000378394 00000 n +0000378453 00000 n +0000377480 00000 n +0000377668 00000 n +0000381661 00000 n +0000381787 00000 n +0000381907 00000 n +0000382027 00000 n +0000380483 00000 n +0000378639 00000 n +0000381601 00000 n +0000381727 00000 n +0000380666 00000 n +0000380853 00000 n +0000381041 00000 n +0000381847 00000 n +0000381228 00000 n +0000381967 00000 n +0000381415 00000 n +0000388949 00000 n +0000384494 00000 n +0000382140 00000 n +0000387872 00000 n +0000388051 00000 n +0000388111 00000 n +0000384785 00000 n +0000384938 00000 n +0000388171 00000 n +0000385091 00000 n +0000388231 00000 n +0000388290 00000 n +0000385245 00000 n +0000388349 00000 n +0000385433 00000 n +0000388409 00000 n +0000385621 00000 n +0000388469 00000 n +0000385809 00000 n +0000388529 00000 n +0000385994 00000 n +0000388589 00000 n +0000386182 00000 n +0000388649 00000 n +0000386370 00000 n +0000388709 00000 n +0000386558 00000 n +0000386746 00000 n +0000388769 00000 n +0000386934 00000 n +0000387122 00000 n +0000388829 00000 n +0000388889 00000 n +0000387310 00000 n +0000387498 00000 n +0000387686 00000 n +0000392659 00000 n +0000392904 00000 n +0000391564 00000 n +0000389062 00000 n +0000392421 00000 n +0000391738 00000 n +0000392481 00000 n +0000392540 00000 n +0000391926 00000 n +0000392080 00000 n +0000392599 00000 n +0000392719 00000 n +0000392268 00000 n +0000392844 00000 n +0000394464 00000 n +0000394590 00000 n +0000393943 00000 n +0000393004 00000 n +0000394404 00000 n +0000394099 00000 n +0000394530 00000 n +0000394252 00000 n +0000400012 00000 n +0000396814 00000 n +0000394676 00000 n +0000399174 00000 n +0000399352 00000 n +0000397060 00000 n +0000397214 00000 n +0000399412 00000 n +0000397368 00000 n +0000397519 00000 n +0000399472 00000 n +0000399532 00000 n +0000397672 00000 n +0000399592 00000 n +0000397860 00000 n +0000399652 00000 n +0000398048 00000 n +0000399712 00000 n +0000398236 00000 n +0000399772 00000 n +0000398424 00000 n +0000399832 00000 n +0000398612 00000 n +0000399892 00000 n +0000398799 00000 n +0000399952 00000 n +0000398987 00000 n +0001245284 00000 n +0000404937 00000 n +0000402275 00000 n +0000400112 00000 n +0000404577 00000 n +0000402512 00000 n +0000402700 00000 n +0000402888 00000 n +0000404637 00000 n +0000403075 00000 n +0000403263 00000 n +0000403451 00000 n +0000404697 00000 n +0000403639 00000 n +0000403827 00000 n +0000404757 00000 n +0000404015 00000 n +0000404817 00000 n +0000404877 00000 n +0000404203 00000 n +0000404391 00000 n +0000434483 00000 n +0000423147 00000 n +0000426061 00000 n +0000423273 00000 n +0000428677 00000 n +0000426187 00000 n +0000433926 00000 n +0000410241 00000 n +0000407307 00000 n +0000405037 00000 n +0000410001 00000 n +0000410061 00000 n +0000407562 00000 n +0000410121 00000 n +0000407749 00000 n +0000407937 00000 n +0000408125 00000 n +0000408313 00000 n +0000408501 00000 n +0000408689 00000 n +0000408877 00000 n +0000409065 00000 n +0000409251 00000 n +0000409438 00000 n +0000410181 00000 n +0000409625 00000 n +0000409813 00000 n +0000418706 00000 n +0000423021 00000 n +0000423399 00000 n +0000434052 00000 n +0000428173 00000 n +0000425809 00000 n +0000425935 00000 n +0000428425 00000 n +0000428047 00000 n +0000428551 00000 n +0000418951 00000 n +0000418826 00000 n +0000414757 00000 n +0000412676 00000 n +0000410341 00000 n +0000414517 00000 n +0000414577 00000 n +0000412895 00000 n +0000413083 00000 n +0000413271 00000 n +0000413458 00000 n +0000413646 00000 n +0000413833 00000 n +0000414637 00000 n +0000414021 00000 n +0000414697 00000 n +0000414209 00000 n +0000414363 00000 n +0000419203 00000 n +0000428299 00000 n +0000425684 00000 n +0000419077 00000 n +0000425558 00000 n +0000437772 00000 n +0000422895 00000 n +0000419267 00000 n +0000416738 00000 n +0000414883 00000 n +0000418347 00000 n +0000416948 00000 n +0000417135 00000 n +0000417289 00000 n +0000417477 00000 n +0000417631 00000 n +0000417817 00000 n +0000418466 00000 n +0000418526 00000 n +0000417971 00000 n +0000418586 00000 n +0000418159 00000 n +0000418646 00000 n +0000418766 00000 n +0000418891 00000 n +0000419017 00000 n +0000419143 00000 n +0000434608 00000 n +0000437586 00000 n +0000423525 00000 n +0000421173 00000 n +0000419367 00000 n +0000422775 00000 n +0000422835 00000 n +0000422961 00000 n +0000423087 00000 n +0000421383 00000 n +0000421536 00000 n +0000423213 00000 n +0000421690 00000 n +0000421841 00000 n +0000422027 00000 n +0000422214 00000 n +0000422402 00000 n +0000423339 00000 n +0000422587 00000 n +0000423465 00000 n +0000426251 00000 n +0000425163 00000 n +0000423611 00000 n +0000425498 00000 n +0000425624 00000 n +0000425750 00000 n +0000425310 00000 n +0000425875 00000 n +0000426001 00000 n +0000426127 00000 n +0001245409 00000 n +0000428741 00000 n +0000427801 00000 n +0000426337 00000 n +0000427927 00000 n +0000427987 00000 n +0000428113 00000 n +0000428239 00000 n +0000428365 00000 n +0000428491 00000 n +0000428617 00000 n +0000434672 00000 n +0000430633 00000 n +0000428827 00000 n +0000433806 00000 n +0000433866 00000 n +0000433992 00000 n +0000434117 00000 n +0000434177 00000 n +0000434297 00000 n +0000430933 00000 n +0000431121 00000 n +0000431275 00000 n +0000431429 00000 n +0000431583 00000 n +0000431737 00000 n +0000431891 00000 n +0000432045 00000 n +0000432199 00000 n +0000434423 00000 n +0000432353 00000 n +0000432540 00000 n +0000432694 00000 n +0000432848 00000 n +0000433002 00000 n +0000433156 00000 n +0000433310 00000 n +0000433464 00000 n +0000434548 00000 n +0000433618 00000 n +0000971573 00000 n +0000998429 00000 n +0001008609 00000 n +0001029236 00000 n +0001021623 00000 n +0000437892 00000 n +0000435994 00000 n +0000434758 00000 n +0000437466 00000 n +0000437526 00000 n +0000436204 00000 n +0000436357 00000 n +0000436511 00000 n +0000436665 00000 n +0000436819 00000 n +0000437652 00000 n +0000436973 00000 n +0000437158 00000 n +0000437312 00000 n +0000437712 00000 n +0000437832 00000 n +0001046140 00000 n +0000441127 00000 n +0000440091 00000 n +0000438005 00000 n +0000440588 00000 n +0000440767 00000 n +0000440827 00000 n +0000440247 00000 n +0000440887 00000 n +0000440400 00000 n +0000440947 00000 n +0000441007 00000 n +0000441067 00000 n +0000446810 00000 n +0000443198 00000 n +0000441227 00000 n +0000445973 00000 n +0000446152 00000 n +0000446212 00000 n +0000443462 00000 n +0000443615 00000 n +0000443766 00000 n +0000446272 00000 n +0000446331 00000 n +0000443917 00000 n +0000446390 00000 n +0000444103 00000 n +0000446450 00000 n +0000444290 00000 n +0000446510 00000 n +0000444477 00000 n +0000446570 00000 n +0000444665 00000 n +0000444851 00000 n +0000445038 00000 n +0000445224 00000 n +0000445412 00000 n +0000446630 00000 n +0000446690 00000 n +0000445598 00000 n +0000446750 00000 n +0000445786 00000 n +0000451561 00000 n +0000448918 00000 n +0000446923 00000 n +0000451143 00000 n +0000451203 00000 n +0000451322 00000 n +0000449164 00000 n +0000451381 00000 n +0000449317 00000 n +0000449470 00000 n +0000451441 00000 n +0000449623 00000 n +0000451501 00000 n +0000449777 00000 n +0000449965 00000 n +0000450119 00000 n +0000450307 00000 n +0000450460 00000 n +0000450647 00000 n +0000450801 00000 n +0000450989 00000 n +0001245534 00000 n +0000462222 00000 n +0000459096 00000 n +0000456241 00000 n +0000456365 00000 n +0000456121 00000 n +0000456491 00000 n +0000453780 00000 n +0000451687 00000 n +0000456001 00000 n +0000456061 00000 n +0000456181 00000 n +0000454026 00000 n +0000454180 00000 n +0000454334 00000 n +0000454486 00000 n +0000456306 00000 n +0000454640 00000 n +0000454791 00000 n +0000454979 00000 n +0000455167 00000 n +0000455320 00000 n +0000456431 00000 n +0000455474 00000 n +0000455627 00000 n +0000455814 00000 n +0000459222 00000 n +0000457854 00000 n +0000456604 00000 n +0000459036 00000 n +0000458046 00000 n +0000459162 00000 n +0000458234 00000 n +0000458388 00000 n +0000458576 00000 n +0000458730 00000 n +0000458882 00000 n +0000462886 00000 n +0000460946 00000 n +0000459335 00000 n +0000462162 00000 n +0000462341 00000 n +0000461138 00000 n +0000461292 00000 n +0000461446 00000 n +0000462401 00000 n +0000462461 00000 n +0000461600 00000 n +0000462521 00000 n +0000461788 00000 n +0000461974 00000 n +0000462580 00000 n +0000462640 00000 n +0000462700 00000 n +0000462760 00000 n +0000462826 00000 n +0000468412 00000 n +0000465547 00000 n +0000462986 00000 n +0000467995 00000 n +0000468173 00000 n +0000465802 00000 n +0000465955 00000 n +0000466142 00000 n +0000466328 00000 n +0000468233 00000 n +0000466516 00000 n +0000468292 00000 n +0000466669 00000 n +0000466823 00000 n +0000468352 00000 n +0000466977 00000 n +0000467163 00000 n +0000467315 00000 n +0000467503 00000 n +0000467657 00000 n +0000467843 00000 n +0000477719 00000 n +0000486199 00000 n +0000486450 00000 n +0000490963 00000 n +0000477839 00000 n +0000471354 00000 n +0000468512 00000 n +0000477359 00000 n +0000471789 00000 n +0000471976 00000 n +0000472129 00000 n +0000472316 00000 n +0000472469 00000 n +0000472657 00000 n +0000472811 00000 n +0000472999 00000 n +0000473153 00000 n +0000473340 00000 n +0000473493 00000 n +0000473681 00000 n +0000473835 00000 n +0000474023 00000 n +0000474176 00000 n +0000474363 00000 n +0000474516 00000 n +0000474704 00000 n +0000474858 00000 n +0000475046 00000 n +0000475200 00000 n +0000475384 00000 n +0000477419 00000 n +0000475533 00000 n +0000475721 00000 n +0000475875 00000 n +0000476029 00000 n +0000477479 00000 n +0000477539 00000 n +0000476183 00000 n +0000476371 00000 n +0000476558 00000 n +0000476712 00000 n +0000477599 00000 n +0000476866 00000 n +0000477053 00000 n +0000477659 00000 n +0000477779 00000 n +0000477206 00000 n +0000494550 00000 n +0000486324 00000 n +0000481628 00000 n +0000490711 00000 n +0000490837 00000 n +0000481880 00000 n +0000481754 00000 n +0000482006 00000 n +0000490585 00000 n +0000494676 00000 n +0000482132 00000 n +0000479734 00000 n +0000477952 00000 n +0000481568 00000 n +0000479962 00000 n +0000480116 00000 n +0000481694 00000 n +0000480270 00000 n +0000480424 00000 n +0000480578 00000 n +0000481820 00000 n +0000480732 00000 n +0000481946 00000 n +0000480886 00000 n +0000481040 00000 n +0000482072 00000 n +0000481228 00000 n +0000481382 00000 n +0001245659 00000 n +0000486575 00000 n +0000484436 00000 n +0000482245 00000 n +0000486139 00000 n +0000484655 00000 n +0000484809 00000 n +0000486265 00000 n +0000484963 00000 n +0000485117 00000 n +0000485304 00000 n +0000485491 00000 n +0000486390 00000 n +0000485644 00000 n +0000485798 00000 n +0000486515 00000 n +0000485985 00000 n +0000491027 00000 n +0000488658 00000 n +0000486688 00000 n +0000490525 00000 n +0000488886 00000 n +0000489040 00000 n +0000490651 00000 n +0000489194 00000 n +0000489348 00000 n +0000490777 00000 n +0000489536 00000 n +0000489690 00000 n +0000490903 00000 n +0000489877 00000 n +0000490030 00000 n +0000490217 00000 n +0000490371 00000 n +0000494802 00000 n +0000493119 00000 n +0000491140 00000 n +0000494430 00000 n +0000494490 00000 n +0000493320 00000 n +0000493474 00000 n +0000494616 00000 n +0000493627 00000 n +0000493780 00000 n +0000493934 00000 n +0000494742 00000 n +0000494088 00000 n +0000494242 00000 n +0000495759 00000 n +0000495573 00000 n +0000494928 00000 n +0000495699 00000 n +0000502863 00000 n +0000498394 00000 n +0000495872 00000 n +0000502265 00000 n +0000502325 00000 n +0000502444 00000 n +0000498712 00000 n +0000498900 00000 n +0000499088 00000 n +0000499276 00000 n +0000499464 00000 n +0000502504 00000 n +0000499652 00000 n +0000499805 00000 n +0000502564 00000 n +0000499958 00000 n +0000502624 00000 n +0000502684 00000 n +0000500112 00000 n +0000502744 00000 n +0000500299 00000 n +0000500487 00000 n +0000502803 00000 n +0000500675 00000 n +0000500863 00000 n +0000501017 00000 n +0000501205 00000 n +0000501393 00000 n +0000501547 00000 n +0000501735 00000 n +0000501923 00000 n +0000502077 00000 n +0000507376 00000 n +0000507556 00000 n +0000507676 00000 n +0000510243 00000 n +0000507802 00000 n +0000505092 00000 n +0000502976 00000 n +0000507256 00000 n +0000507316 00000 n +0000507436 00000 n +0000505329 00000 n +0000505517 00000 n +0000505705 00000 n +0000505893 00000 n +0000507496 00000 n +0000507616 00000 n +0000506046 00000 n +0000506200 00000 n +0000506386 00000 n +0000506574 00000 n +0000507742 00000 n +0000506728 00000 n +0000506882 00000 n +0000507070 00000 n +0001245784 00000 n +0000510368 00000 n +0000509166 00000 n +0000507928 00000 n +0000510183 00000 n +0000509349 00000 n +0000510308 00000 n +0000509503 00000 n +0000509657 00000 n +0000509843 00000 n +0000510031 00000 n +0000517832 00000 n +0000513059 00000 n +0000510481 00000 n +0000517058 00000 n +0000517237 00000 n +0000513377 00000 n +0000513565 00000 n +0000513753 00000 n +0000517297 00000 n +0000513941 00000 n +0000514094 00000 n +0000517356 00000 n +0000517415 00000 n +0000514247 00000 n +0000517474 00000 n +0000514435 00000 n +0000517534 00000 n +0000514622 00000 n +0000517594 00000 n +0000514810 00000 n +0000517654 00000 n +0000517713 00000 n +0000514998 00000 n +0000515186 00000 n +0000515372 00000 n +0000515557 00000 n +0000515744 00000 n +0000515931 00000 n +0000516119 00000 n +0000517772 00000 n +0000516307 00000 n +0000516494 00000 n +0000516682 00000 n +0000516870 00000 n +0000522262 00000 n +0000525329 00000 n +0000522016 00000 n +0000521896 00000 n +0000522142 00000 n +0000522387 00000 n +0000519877 00000 n +0000517945 00000 n +0000521776 00000 n +0000521836 00000 n +0000521956 00000 n +0000520105 00000 n +0000520291 00000 n +0000520445 00000 n +0000522082 00000 n +0000520599 00000 n +0000520786 00000 n +0000520940 00000 n +0000522202 00000 n +0000521094 00000 n +0000521281 00000 n +0000521435 00000 n +0000522328 00000 n +0000521589 00000 n +0000525455 00000 n +0000523959 00000 n +0000522500 00000 n +0000525269 00000 n +0000524160 00000 n +0000524347 00000 n +0000524501 00000 n +0000524655 00000 n +0000525395 00000 n +0000524808 00000 n +0000524962 00000 n +0000525116 00000 n +0000532767 00000 n +0000528057 00000 n +0000525568 00000 n +0000531632 00000 n +0000531811 00000 n +0000531871 00000 n +0000528357 00000 n +0000528510 00000 n +0000531931 00000 n +0000528663 00000 n +0000531989 00000 n +0000532049 00000 n +0000528817 00000 n +0000532109 00000 n +0000529005 00000 n +0000532169 00000 n +0000529192 00000 n +0000532229 00000 n +0000529379 00000 n +0000532289 00000 n +0000529567 00000 n +0000532349 00000 n +0000529755 00000 n +0000532409 00000 n +0000529943 00000 n +0000532469 00000 n +0000530131 00000 n +0000532529 00000 n +0000530319 00000 n +0000532588 00000 n +0000530505 00000 n +0000532648 00000 n +0000530693 00000 n +0000532707 00000 n +0000530880 00000 n +0000531068 00000 n +0000531256 00000 n +0000531444 00000 n +0000535644 00000 n +0000535524 00000 n +0000535770 00000 n +0000535896 00000 n +0000534744 00000 n +0000532880 00000 n +0000535404 00000 n +0000535464 00000 n +0000535584 00000 n +0000535710 00000 n +0000534909 00000 n +0000535063 00000 n +0000535836 00000 n +0000535217 00000 n +0001245909 00000 n +0000544822 00000 n +0000538364 00000 n +0000536009 00000 n +0000543203 00000 n +0000543382 00000 n +0000543442 00000 n +0000538727 00000 n +0000538880 00000 n +0000539032 00000 n +0000539184 00000 n +0000543502 00000 n +0000539337 00000 n +0000543562 00000 n +0000543622 00000 n +0000539491 00000 n +0000543682 00000 n +0000539679 00000 n +0000543742 00000 n +0000539866 00000 n +0000543802 00000 n +0000540053 00000 n +0000543862 00000 n +0000540239 00000 n +0000543922 00000 n +0000540427 00000 n +0000543982 00000 n +0000540614 00000 n +0000544042 00000 n +0000540802 00000 n +0000544102 00000 n +0000540990 00000 n +0000544162 00000 n +0000541178 00000 n +0000544222 00000 n +0000541364 00000 n +0000544282 00000 n +0000541552 00000 n +0000544342 00000 n +0000541740 00000 n +0000544402 00000 n +0000541928 00000 n +0000544462 00000 n +0000542113 00000 n +0000544522 00000 n +0000542301 00000 n +0000544582 00000 n +0000542488 00000 n +0000544642 00000 n +0000542676 00000 n +0000544702 00000 n +0000544762 00000 n +0000542864 00000 n +0000543017 00000 n +0000549572 00000 n +0000546868 00000 n +0000544935 00000 n +0000548902 00000 n +0000548962 00000 n +0000549022 00000 n +0000547096 00000 n +0000549082 00000 n +0000547284 00000 n +0000547470 00000 n +0000547656 00000 n +0000549142 00000 n +0000547844 00000 n +0000548032 00000 n +0000548219 00000 n +0000548406 00000 n +0000549202 00000 n +0000549262 00000 n +0000549322 00000 n +0000548594 00000 n +0000549382 00000 n +0000549448 00000 n +0000548748 00000 n +0000549508 00000 n +0000551883 00000 n +0000552009 00000 n +0000552133 00000 n +0000551136 00000 n +0000549699 00000 n +0000551763 00000 n +0000551823 00000 n +0000551301 00000 n +0000551949 00000 n +0000551455 00000 n +0000552074 00000 n +0000551609 00000 n +0000555493 00000 n +0000553460 00000 n +0000552246 00000 n +0000554836 00000 n +0000555015 00000 n +0000553661 00000 n +0000555075 00000 n +0000553815 00000 n +0000553968 00000 n +0000555135 00000 n +0000554120 00000 n +0000555193 00000 n +0000555253 00000 n +0000554273 00000 n +0000555313 00000 n +0000555373 00000 n +0000554460 00000 n +0000555433 00000 n +0000554648 00000 n +0000564257 00000 n +0000557971 00000 n +0000555593 00000 n +0000562882 00000 n +0000563061 00000 n +0000558334 00000 n +0000558520 00000 n +0000558706 00000 n +0000558894 00000 n +0000559081 00000 n +0000559269 00000 n +0000563121 00000 n +0000559455 00000 n +0000559608 00000 n +0000563181 00000 n +0000559761 00000 n +0000563241 00000 n +0000563301 00000 n +0000559915 00000 n +0000563361 00000 n +0000560103 00000 n +0000563421 00000 n +0000560287 00000 n +0000563481 00000 n +0000560475 00000 n +0000563541 00000 n +0000560663 00000 n +0000563600 00000 n +0000560851 00000 n +0000563660 00000 n +0000561039 00000 n +0000563720 00000 n +0000561227 00000 n +0000563780 00000 n +0000561415 00000 n +0000563840 00000 n +0000561603 00000 n +0000563900 00000 n +0000561791 00000 n +0000563959 00000 n +0000561979 00000 n +0000564019 00000 n +0000562167 00000 n +0000564079 00000 n +0000562355 00000 n +0000564139 00000 n +0000564198 00000 n +0000562543 00000 n +0000562696 00000 n +0000574040 00000 n +0000573915 00000 n +0000583119 00000 n +0000570197 00000 n +0000573789 00000 n +0000570317 00000 n +0000566753 00000 n +0000564357 00000 n +0000569838 00000 n +0000569898 00000 n +0000567026 00000 n +0000567214 00000 n +0000567402 00000 n +0000567589 00000 n +0000567775 00000 n +0000567962 00000 n +0000569958 00000 n +0000568150 00000 n +0000568338 00000 n +0000568525 00000 n +0000570018 00000 n +0000568713 00000 n +0000570078 00000 n +0000568900 00000 n +0000569088 00000 n +0000569276 00000 n +0000569464 00000 n +0000569650 00000 n +0000570137 00000 n +0000570257 00000 n +0001246034 00000 n +0000579305 00000 n +0000582868 00000 n +0000574166 00000 n +0000579431 00000 n +0000582994 00000 n +0000574230 00000 n +0000572098 00000 n +0000570430 00000 n +0000573729 00000 n +0000572317 00000 n +0000572470 00000 n +0000573855 00000 n +0000572624 00000 n +0000572776 00000 n +0000573980 00000 n +0000572929 00000 n +0000573082 00000 n +0000574106 00000 n +0000573236 00000 n +0000573424 00000 n +0000573576 00000 n +0000579495 00000 n +0000577021 00000 n +0000574343 00000 n +0000579185 00000 n +0000579245 00000 n +0000577258 00000 n +0000577446 00000 n +0000577599 00000 n +0000579371 00000 n +0000577753 00000 n +0000577941 00000 n +0000578129 00000 n +0000578316 00000 n +0000578504 00000 n +0000578691 00000 n +0000578878 00000 n +0000579031 00000 n +0000583183 00000 n +0000581241 00000 n +0000579608 00000 n +0000582748 00000 n +0000582808 00000 n +0000581451 00000 n +0000581639 00000 n +0000581792 00000 n +0000582934 00000 n +0000581946 00000 n +0000582099 00000 n +0000583059 00000 n +0000582253 00000 n +0000582441 00000 n +0000582594 00000 n +0000584621 00000 n +0000584038 00000 n +0000583282 00000 n +0000584501 00000 n +0000584561 00000 n +0000584194 00000 n +0000584347 00000 n +0000591352 00000 n +0000586870 00000 n +0000584707 00000 n +0000590214 00000 n +0000590393 00000 n +0000590453 00000 n +0000587161 00000 n +0000587313 00000 n +0000587466 00000 n +0000590513 00000 n +0000587619 00000 n +0000590572 00000 n +0000587773 00000 n +0000590632 00000 n +0000587960 00000 n +0000590692 00000 n +0000588148 00000 n +0000590752 00000 n +0000588336 00000 n +0000590812 00000 n +0000588524 00000 n +0000590872 00000 n +0000588712 00000 n +0000590932 00000 n +0000588900 00000 n +0000590992 00000 n +0000589087 00000 n +0000591052 00000 n +0000589275 00000 n +0000591112 00000 n +0000589463 00000 n +0000591172 00000 n +0000591232 00000 n +0000589651 00000 n +0000591292 00000 n +0000589839 00000 n +0000590027 00000 n +0000592778 00000 n +0000592958 00000 n +0000593078 00000 n +0000592532 00000 n +0000591465 00000 n +0000592658 00000 n +0000592718 00000 n +0000592838 00000 n +0000592898 00000 n +0000593018 00000 n +0001246159 00000 n +0000593729 00000 n +0000593543 00000 n +0000593178 00000 n +0000593669 00000 n +0000601284 00000 n +0000595273 00000 n +0000593802 00000 n +0000600148 00000 n +0000600385 00000 n +0000595636 00000 n +0000595790 00000 n +0000600445 00000 n +0000600505 00000 n +0000595943 00000 n +0000596097 00000 n +0000600565 00000 n +0000596284 00000 n +0000600625 00000 n +0000596471 00000 n +0000596625 00000 n +0000600685 00000 n +0000596812 00000 n +0000596966 00000 n +0000600745 00000 n +0000597152 00000 n +0000597340 00000 n +0000600805 00000 n +0000597527 00000 n +0000600865 00000 n +0000597714 00000 n +0000600925 00000 n +0000597900 00000 n +0000598088 00000 n +0000600984 00000 n +0000598275 00000 n +0000598463 00000 n +0000601044 00000 n +0000598650 00000 n +0000598838 00000 n +0000601104 00000 n +0000599025 00000 n +0000599213 00000 n +0000601164 00000 n +0000599400 00000 n +0000599588 00000 n +0000601224 00000 n +0000599775 00000 n +0000599962 00000 n +0000603990 00000 n +0000602297 00000 n +0000601383 00000 n +0000603512 00000 n +0000603690 00000 n +0000602489 00000 n +0000602643 00000 n +0000603750 00000 n +0000603810 00000 n +0000602797 00000 n +0000602951 00000 n +0000603870 00000 n +0000603138 00000 n +0000603930 00000 n +0000603325 00000 n +0000982202 00000 n +0000605699 00000 n +0000604751 00000 n +0000604076 00000 n +0000605281 00000 n +0000605459 00000 n +0000605519 00000 n +0000605579 00000 n +0000604907 00000 n +0000605639 00000 n +0000605094 00000 n +0000610651 00000 n +0000607083 00000 n +0000605798 00000 n +0000609695 00000 n +0000609873 00000 n +0000609933 00000 n +0000609993 00000 n +0000607338 00000 n +0000610053 00000 n +0000607524 00000 n +0000607678 00000 n +0000610113 00000 n +0000607865 00000 n +0000608019 00000 n +0000610172 00000 n +0000608206 00000 n +0000610232 00000 n +0000608391 00000 n +0000610292 00000 n +0000608576 00000 n +0000610352 00000 n +0000608763 00000 n +0000610412 00000 n +0000608950 00000 n +0000610472 00000 n +0000609137 00000 n +0000610532 00000 n +0000609323 00000 n +0000610591 00000 n +0000609510 00000 n +0000613003 00000 n +0000611545 00000 n +0000610750 00000 n +0000612466 00000 n +0000612644 00000 n +0000612704 00000 n +0000612764 00000 n +0000611719 00000 n +0000612824 00000 n +0000611906 00000 n +0000612884 00000 n +0000612093 00000 n +0000612943 00000 n +0000612280 00000 n +0001246284 00000 n +0000618735 00000 n +0000614566 00000 n +0000613102 00000 n +0000617899 00000 n +0000618077 00000 n +0000614857 00000 n +0000618137 00000 n +0000618196 00000 n +0000615010 00000 n +0000615163 00000 n +0000615316 00000 n +0000618255 00000 n +0000615502 00000 n +0000615690 00000 n +0000618315 00000 n +0000615876 00000 n +0000616064 00000 n +0000618375 00000 n +0000616251 00000 n +0000618435 00000 n +0000616438 00000 n +0000616626 00000 n +0000618495 00000 n +0000616813 00000 n +0000617001 00000 n +0000618555 00000 n +0000617188 00000 n +0000617342 00000 n +0000618615 00000 n +0000617528 00000 n +0000618675 00000 n +0000617713 00000 n +0000620695 00000 n +0000619550 00000 n +0000618860 00000 n +0000620277 00000 n +0000620455 00000 n +0000620515 00000 n +0000620575 00000 n +0000619715 00000 n +0000619903 00000 n +0000620635 00000 n +0000620090 00000 n +0000622546 00000 n +0000621494 00000 n +0000620794 00000 n +0000622188 00000 n +0000622366 00000 n +0000621659 00000 n +0000622426 00000 n +0000622486 00000 n +0000621813 00000 n +0000622001 00000 n +0000628080 00000 n +0000623872 00000 n +0000622632 00000 n +0000627243 00000 n +0000627421 00000 n +0000624163 00000 n +0000624317 00000 n +0000624471 00000 n +0000627481 00000 n +0000627541 00000 n +0000624625 00000 n +0000624813 00000 n +0000627601 00000 n +0000625000 00000 n +0000627661 00000 n +0000625187 00000 n +0000627721 00000 n +0000625374 00000 n +0000627781 00000 n +0000625561 00000 n +0000627840 00000 n +0000625748 00000 n +0000625935 00000 n +0000627900 00000 n +0000626119 00000 n +0000626307 00000 n +0000627960 00000 n +0000626494 00000 n +0000626682 00000 n +0000628020 00000 n +0000626869 00000 n +0000627057 00000 n +0000631434 00000 n +0000629238 00000 n +0000628179 00000 n +0000631076 00000 n +0000631254 00000 n +0000629457 00000 n +0000629611 00000 n +0000631314 00000 n +0000631374 00000 n +0000629765 00000 n +0000629952 00000 n +0000630138 00000 n +0000630326 00000 n +0000630514 00000 n +0000630700 00000 n +0000630888 00000 n +0000634446 00000 n +0000632654 00000 n +0000631533 00000 n +0000634030 00000 n +0000634208 00000 n +0000632855 00000 n +0000633042 00000 n +0000633196 00000 n +0000633350 00000 n +0000633504 00000 n +0000634268 00000 n +0000634327 00000 n +0000633658 00000 n +0000634386 00000 n +0000633843 00000 n +0001246409 00000 n +0000642316 00000 n +0000636745 00000 n +0000634558 00000 n +0000641358 00000 n +0000641536 00000 n +0000637090 00000 n +0000641596 00000 n +0000641656 00000 n +0000637244 00000 n +0000637432 00000 n +0000641716 00000 n +0000637618 00000 n +0000637803 00000 n +0000641776 00000 n +0000637987 00000 n +0000638175 00000 n +0000641836 00000 n +0000638362 00000 n +0000638550 00000 n +0000641896 00000 n +0000638737 00000 n +0000638923 00000 n +0000641956 00000 n +0000639108 00000 n +0000639296 00000 n +0000642016 00000 n +0000639483 00000 n +0000639671 00000 n +0000642076 00000 n +0000639858 00000 n +0000640046 00000 n +0000642136 00000 n +0000640233 00000 n +0000640421 00000 n +0000642196 00000 n +0000640608 00000 n +0000640796 00000 n +0000642256 00000 n +0000640983 00000 n +0000641171 00000 n +0000645321 00000 n +0000643347 00000 n +0000642442 00000 n +0000645021 00000 n +0000645081 00000 n +0000643557 00000 n +0000643745 00000 n +0000645141 00000 n +0000643932 00000 n +0000644120 00000 n +0000645201 00000 n +0000644307 00000 n +0000644495 00000 n +0000645261 00000 n +0000644682 00000 n +0000644835 00000 n +0000647037 00000 n +0000646148 00000 n +0000645421 00000 n +0000646679 00000 n +0000646857 00000 n +0000646917 00000 n +0000646977 00000 n +0000646304 00000 n +0000646492 00000 n +0000649685 00000 n +0000647959 00000 n +0000647149 00000 n +0000649208 00000 n +0000649386 00000 n +0000649446 00000 n +0000649506 00000 n +0000648151 00000 n +0000648305 00000 n +0000649566 00000 n +0000648492 00000 n +0000648646 00000 n +0000649626 00000 n +0000648833 00000 n +0000649021 00000 n +0000658442 00000 n +0000651222 00000 n +0000649797 00000 n +0000657245 00000 n +0000657423 00000 n +0000657483 00000 n +0000657543 00000 n +0000651630 00000 n +0000651818 00000 n +0000657603 00000 n +0000652005 00000 n +0000652193 00000 n +0000657663 00000 n +0000652380 00000 n +0000652568 00000 n +0000657723 00000 n +0000652755 00000 n +0000652942 00000 n +0000657783 00000 n +0000653128 00000 n +0000653316 00000 n +0000657843 00000 n +0000653503 00000 n +0000653691 00000 n +0000657903 00000 n +0000653878 00000 n +0000654066 00000 n +0000657963 00000 n +0000654252 00000 n +0000654440 00000 n +0000658023 00000 n +0000654627 00000 n +0000654815 00000 n +0000658083 00000 n +0000655002 00000 n +0000655190 00000 n +0000658142 00000 n +0000655377 00000 n +0000655563 00000 n +0000658202 00000 n +0000655748 00000 n +0000655936 00000 n +0000658262 00000 n +0000656123 00000 n +0000656311 00000 n +0000658322 00000 n +0000656498 00000 n +0000656685 00000 n +0000658382 00000 n +0000656871 00000 n +0000657059 00000 n +0000659990 00000 n +0000659135 00000 n +0000658528 00000 n +0000659632 00000 n +0000659810 00000 n +0000659870 00000 n +0000659930 00000 n +0000659291 00000 n +0000659445 00000 n +0001246534 00000 n +0000668945 00000 n +0000662093 00000 n +0000660076 00000 n +0000668466 00000 n +0000668645 00000 n +0000668705 00000 n +0000668765 00000 n +0000662519 00000 n +0000662706 00000 n +0000662891 00000 n +0000663077 00000 n +0000663262 00000 n +0000663448 00000 n +0000663633 00000 n +0000663820 00000 n +0000664006 00000 n +0000664191 00000 n +0000664375 00000 n +0000664561 00000 n +0000664745 00000 n +0000664932 00000 n +0000665118 00000 n +0000665304 00000 n +0000665489 00000 n +0000665675 00000 n +0000665860 00000 n +0000668825 00000 n +0000666046 00000 n +0000666233 00000 n +0000666418 00000 n +0000666605 00000 n +0000666791 00000 n +0000666978 00000 n +0000667164 00000 n +0000667351 00000 n +0000667537 00000 n +0000668885 00000 n +0000667723 00000 n +0000667910 00000 n +0000668095 00000 n +0000668281 00000 n +0001145426 00000 n +0001145393 00000 n +0001145360 00000 n +0001145327 00000 n +0001145294 00000 n +0001145261 00000 n +0001145228 00000 n +0001145195 00000 n +0001145162 00000 n +0001145129 00000 n +0000675485 00000 n +0000670548 00000 n +0000669071 00000 n +0000675365 00000 n +0000670902 00000 n +0000671089 00000 n +0000671275 00000 n +0000671462 00000 n +0000671648 00000 n +0000671834 00000 n +0000672019 00000 n +0000672206 00000 n +0000672392 00000 n +0000672579 00000 n +0000672765 00000 n +0000672950 00000 n +0000673133 00000 n +0000673320 00000 n +0000673506 00000 n +0000675425 00000 n +0000673692 00000 n +0000673878 00000 n +0000674062 00000 n +0000674249 00000 n +0000674435 00000 n +0000674621 00000 n +0000674806 00000 n +0000674993 00000 n +0000675179 00000 n +0001145096 00000 n +0001145063 00000 n +0001145030 00000 n +0001144997 00000 n +0001144964 00000 n +0000686796 00000 n +0000677312 00000 n +0000675585 00000 n +0000685298 00000 n +0000685477 00000 n +0000685537 00000 n +0000685597 00000 n +0000677810 00000 n +0000677998 00000 n +0000685657 00000 n +0000678185 00000 n +0000678373 00000 n +0000685717 00000 n +0000678560 00000 n +0000678748 00000 n +0000685777 00000 n +0000678935 00000 n +0000679122 00000 n +0000685837 00000 n +0000679308 00000 n +0000679496 00000 n +0000685897 00000 n +0000679683 00000 n +0000679871 00000 n +0000685957 00000 n +0000680058 00000 n +0000680246 00000 n +0000686017 00000 n +0000680432 00000 n +0000680620 00000 n +0000686077 00000 n +0000680807 00000 n +0000680995 00000 n +0000686137 00000 n +0000681182 00000 n +0000681370 00000 n +0000686196 00000 n +0000681557 00000 n +0000681743 00000 n +0000686256 00000 n +0000681928 00000 n +0000682116 00000 n +0000686316 00000 n +0000682303 00000 n +0000682491 00000 n +0000686376 00000 n +0000682678 00000 n +0000682866 00000 n +0000686436 00000 n +0000683053 00000 n +0000683241 00000 n +0000686496 00000 n +0000683428 00000 n +0000683616 00000 n +0000686556 00000 n +0000683803 00000 n +0000683991 00000 n +0000686616 00000 n +0000684178 00000 n +0000684364 00000 n +0000686676 00000 n +0000684548 00000 n +0000684736 00000 n +0000686736 00000 n +0000684923 00000 n +0000685111 00000 n +0000691264 00000 n +0000688237 00000 n +0000686882 00000 n +0000690665 00000 n +0000690844 00000 n +0000688483 00000 n +0000688637 00000 n +0000690904 00000 n +0000690964 00000 n +0000688791 00000 n +0000688979 00000 n +0000691024 00000 n +0000689165 00000 n +0000689353 00000 n +0000691084 00000 n +0000689540 00000 n +0000689728 00000 n +0000691144 00000 n +0000689915 00000 n +0000690103 00000 n +0000691204 00000 n +0000690290 00000 n +0000690478 00000 n +0000699536 00000 n +0000692765 00000 n +0000691390 00000 n +0000698398 00000 n +0000698577 00000 n +0000698637 00000 n +0000698697 00000 n +0000693155 00000 n +0000693343 00000 n +0000698757 00000 n +0000693530 00000 n +0000693718 00000 n +0000698817 00000 n +0000693905 00000 n +0000694093 00000 n +0000698877 00000 n +0000694280 00000 n +0000694467 00000 n +0000698937 00000 n +0000694653 00000 n +0000694841 00000 n +0000698997 00000 n +0000695028 00000 n +0000695216 00000 n +0000699057 00000 n +0000695403 00000 n +0000695591 00000 n +0000699117 00000 n +0000695777 00000 n +0000695965 00000 n +0000699177 00000 n +0000696152 00000 n +0000696340 00000 n +0000699237 00000 n +0000696527 00000 n +0000696715 00000 n +0000699296 00000 n +0000696902 00000 n +0000697088 00000 n +0000699356 00000 n +0000697273 00000 n +0000697461 00000 n +0000699416 00000 n +0000697648 00000 n +0000697836 00000 n +0000699476 00000 n +0000698023 00000 n +0000698211 00000 n +0000705952 00000 n +0000701003 00000 n +0000699622 00000 n +0000704996 00000 n +0000705175 00000 n +0000701321 00000 n +0000701474 00000 n +0000705235 00000 n +0000705295 00000 n +0000701628 00000 n +0000701816 00000 n +0000705355 00000 n +0000702003 00000 n +0000702190 00000 n +0000705415 00000 n +0000702376 00000 n +0000702564 00000 n +0000705475 00000 n +0000702751 00000 n +0000702939 00000 n +0000705535 00000 n +0000703125 00000 n +0000705594 00000 n +0000703312 00000 n +0000705654 00000 n +0000703497 00000 n +0000703685 00000 n +0000705712 00000 n +0000703872 00000 n +0000704060 00000 n +0000705772 00000 n +0000704247 00000 n +0000705832 00000 n +0000704434 00000 n +0000704622 00000 n +0000705892 00000 n +0000704809 00000 n +0001246659 00000 n +0000706598 00000 n +0000706412 00000 n +0000706038 00000 n +0000706538 00000 n +0000708819 00000 n +0000707588 00000 n +0000706671 00000 n +0000708462 00000 n +0000708700 00000 n +0000707762 00000 n +0000707933 00000 n +0000708760 00000 n +0000708087 00000 n +0000708274 00000 n +0001144931 00000 n +0000711783 00000 n +0000710131 00000 n +0000708931 00000 n +0000711364 00000 n +0000711543 00000 n +0000710323 00000 n +0000710494 00000 n +0000711603 00000 n +0000710648 00000 n +0000711663 00000 n +0000710802 00000 n +0000711723 00000 n +0000710989 00000 n +0000711176 00000 n +0001144898 00000 n +0000721355 00000 n +0000714657 00000 n +0000711895 00000 n +0000720037 00000 n +0000720216 00000 n +0000715038 00000 n +0000715214 00000 n +0000720276 00000 n +0000715367 00000 n +0000715554 00000 n +0000720336 00000 n +0000715742 00000 n +0000720396 00000 n +0000715929 00000 n +0000720456 00000 n +0000716115 00000 n +0000720516 00000 n +0000716299 00000 n +0000720576 00000 n +0000716486 00000 n +0000720636 00000 n +0000716672 00000 n +0000720696 00000 n +0000716859 00000 n +0000720756 00000 n +0000717046 00000 n +0000720816 00000 n +0000717233 00000 n +0000720876 00000 n +0000717420 00000 n +0000720936 00000 n +0000717606 00000 n +0000720996 00000 n +0000717791 00000 n +0000721055 00000 n +0000717978 00000 n +0000721115 00000 n +0000718165 00000 n +0000721175 00000 n +0000718351 00000 n +0000721235 00000 n +0000718538 00000 n +0000718725 00000 n +0000721295 00000 n +0000718913 00000 n +0000719101 00000 n +0000719289 00000 n +0000719477 00000 n +0000719665 00000 n +0000719851 00000 n +0001144865 00000 n +0000723099 00000 n +0000722312 00000 n +0000721494 00000 n +0000723039 00000 n +0000722477 00000 n +0000722664 00000 n +0000722851 00000 n +0000728271 00000 n +0000725502 00000 n +0000723212 00000 n +0000727852 00000 n +0000728031 00000 n +0000725748 00000 n +0000725924 00000 n +0000728091 00000 n +0000726077 00000 n +0000726231 00000 n +0000726385 00000 n +0000726573 00000 n +0000728151 00000 n +0000726727 00000 n +0000728211 00000 n +0000726915 00000 n +0000727103 00000 n +0000727291 00000 n +0000727478 00000 n +0000727665 00000 n +0001246784 00000 n +0001144832 00000 n +0000730839 00000 n +0000729460 00000 n +0000728410 00000 n +0000730779 00000 n +0000729652 00000 n +0000729840 00000 n +0000730028 00000 n +0000730216 00000 n +0000730404 00000 n +0000730592 00000 n +0000736019 00000 n +0000732815 00000 n +0000730952 00000 n +0000735660 00000 n +0000735839 00000 n +0000733079 00000 n +0000733254 00000 n +0000735899 00000 n +0000733408 00000 n +0000733596 00000 n +0000733783 00000 n +0000733971 00000 n +0000734159 00000 n +0000734347 00000 n +0000734534 00000 n +0000735959 00000 n +0000734722 00000 n +0000734910 00000 n +0000735097 00000 n +0000735285 00000 n +0000735473 00000 n +0001144799 00000 n +0000740901 00000 n +0000738397 00000 n +0000736158 00000 n +0000740483 00000 n +0000740662 00000 n +0000738634 00000 n +0000738810 00000 n +0000740722 00000 n +0000738964 00000 n +0000740782 00000 n +0000739118 00000 n +0000739272 00000 n +0000739426 00000 n +0000739611 00000 n +0000739765 00000 n +0000739953 00000 n +0000740841 00000 n +0000740107 00000 n +0000740295 00000 n +0001144766 00000 n +0000742646 00000 n +0000741798 00000 n +0000741027 00000 n +0000742526 00000 n +0000742586 00000 n +0000741963 00000 n +0000742151 00000 n +0000742338 00000 n +0000745708 00000 n +0000744081 00000 n +0000742746 00000 n +0000745349 00000 n +0000745528 00000 n +0000744273 00000 n +0000744444 00000 n +0000745588 00000 n +0000744598 00000 n +0000745648 00000 n +0000744786 00000 n +0000744973 00000 n +0000745161 00000 n +0001144733 00000 n +0000749270 00000 n +0000747313 00000 n +0000745847 00000 n +0000748972 00000 n +0000749151 00000 n +0000747523 00000 n +0000747694 00000 n +0000749211 00000 n +0000747848 00000 n +0000748034 00000 n +0000748222 00000 n +0000748410 00000 n +0000748598 00000 n +0000748786 00000 n +0001246909 00000 n +0001144700 00000 n +0000756290 00000 n +0000751717 00000 n +0000749409 00000 n +0000755931 00000 n +0000756110 00000 n +0000752044 00000 n +0000752216 00000 n +0000756170 00000 n +0000752369 00000 n +0000752557 00000 n +0000752744 00000 n +0000752932 00000 n +0000753120 00000 n +0000753307 00000 n +0000753495 00000 n +0000753682 00000 n +0000753870 00000 n +0000754057 00000 n +0000754245 00000 n +0000754431 00000 n +0000754618 00000 n +0000754806 00000 n +0000756230 00000 n +0000754994 00000 n +0000755182 00000 n +0000755368 00000 n +0000755555 00000 n +0000755743 00000 n +0001144667 00000 n +0000760014 00000 n +0000757745 00000 n +0000756429 00000 n +0000759535 00000 n +0000759714 00000 n +0000757964 00000 n +0000758136 00000 n +0000759774 00000 n +0000758290 00000 n +0000759834 00000 n +0000758444 00000 n +0000758631 00000 n +0000758819 00000 n +0000759894 00000 n +0000759006 00000 n +0000759160 00000 n +0000759954 00000 n +0000759347 00000 n +0001144634 00000 n +0000766630 00000 n +0000762441 00000 n +0000760126 00000 n +0000766271 00000 n +0000766450 00000 n +0000762750 00000 n +0000762926 00000 n +0000766510 00000 n +0000763080 00000 n +0000763268 00000 n +0000763455 00000 n +0000763642 00000 n +0000763830 00000 n +0000764018 00000 n +0000764206 00000 n +0000764394 00000 n +0000764582 00000 n +0000764770 00000 n +0000764958 00000 n +0000765146 00000 n +0000766570 00000 n +0000765334 00000 n +0000765522 00000 n +0000765710 00000 n +0000765897 00000 n +0000766083 00000 n +0001144601 00000 n +0000768668 00000 n +0000767684 00000 n +0000766769 00000 n +0000768608 00000 n +0000767858 00000 n +0000768045 00000 n +0000768232 00000 n +0000768420 00000 n +0000774196 00000 n +0000770943 00000 n +0000768781 00000 n +0000773717 00000 n +0000773896 00000 n +0000771207 00000 n +0000771383 00000 n +0000773956 00000 n +0000771537 00000 n +0000774016 00000 n +0000771690 00000 n +0000771878 00000 n +0000774076 00000 n +0000772064 00000 n +0000772218 00000 n +0000774136 00000 n +0000772405 00000 n +0000772593 00000 n +0000772781 00000 n +0000772969 00000 n +0000773155 00000 n +0000773342 00000 n +0000773530 00000 n +0001144568 00000 n +0000777506 00000 n +0000775734 00000 n +0000774335 00000 n +0000777446 00000 n +0000775944 00000 n +0000776131 00000 n +0000776319 00000 n +0000776507 00000 n +0000776695 00000 n +0000776883 00000 n +0000777071 00000 n +0000777258 00000 n +0001247034 00000 n +0000779600 00000 n +0000778623 00000 n +0000777619 00000 n +0000779301 00000 n +0000779480 00000 n +0000778788 00000 n +0000778959 00000 n +0000779540 00000 n +0000779113 00000 n +0001144535 00000 n +0000782368 00000 n +0000780913 00000 n +0000779725 00000 n +0000781950 00000 n +0000782129 00000 n +0000781096 00000 n +0000781267 00000 n +0000782189 00000 n +0000781421 00000 n +0000782249 00000 n +0000781575 00000 n +0000782309 00000 n +0000781763 00000 n +0001144502 00000 n +0000787218 00000 n +0000784215 00000 n +0000782507 00000 n +0000786860 00000 n +0000787039 00000 n +0000784470 00000 n +0000784642 00000 n +0000787099 00000 n +0000784796 00000 n +0000784983 00000 n +0000785171 00000 n +0000785359 00000 n +0000785547 00000 n +0000785735 00000 n +0000785922 00000 n +0000786110 00000 n +0000786297 00000 n +0000787158 00000 n +0000786485 00000 n +0000786673 00000 n +0001144469 00000 n +0000791313 00000 n +0000788865 00000 n +0000787344 00000 n +0000791014 00000 n +0000791193 00000 n +0000789102 00000 n +0000789273 00000 n +0000791253 00000 n +0000789426 00000 n +0000789614 00000 n +0000789768 00000 n +0000789956 00000 n +0000790144 00000 n +0000790298 00000 n +0000790486 00000 n +0000790674 00000 n +0000790828 00000 n +0001144436 00000 n +0000796587 00000 n +0000793266 00000 n +0000791452 00000 n +0000796169 00000 n +0000796348 00000 n +0000793539 00000 n +0000793710 00000 n +0000796408 00000 n +0000793863 00000 n +0000796467 00000 n +0000794016 00000 n +0000794204 00000 n +0000794391 00000 n +0000796527 00000 n +0000794579 00000 n +0000794767 00000 n +0000794921 00000 n +0000795109 00000 n +0000795297 00000 n +0000795451 00000 n +0000795639 00000 n +0000795827 00000 n +0000795981 00000 n +0001144403 00000 n +0000800369 00000 n +0000798331 00000 n +0000796726 00000 n +0000800010 00000 n +0000800189 00000 n +0000798541 00000 n +0000798712 00000 n +0000798920 00000 n +0000800249 00000 n +0000799074 00000 n +0000799261 00000 n +0000799448 00000 n +0000799636 00000 n +0000800309 00000 n +0000799822 00000 n +0001247159 00000 n +0001144370 00000 n +0000804387 00000 n +0000802153 00000 n +0000800494 00000 n +0000804028 00000 n +0000804207 00000 n +0000802372 00000 n +0000802543 00000 n +0000802753 00000 n +0000804267 00000 n +0000802907 00000 n +0000803094 00000 n +0000803280 00000 n +0000803467 00000 n +0000803655 00000 n +0000804327 00000 n +0000803840 00000 n +0001144337 00000 n +0000805951 00000 n +0000805230 00000 n +0000804512 00000 n +0000805712 00000 n +0000805891 00000 n +0000805386 00000 n +0000805558 00000 n +0001144304 00000 n +0000812799 00000 n +0000808402 00000 n +0000806063 00000 n +0000812442 00000 n +0000812621 00000 n +0000808738 00000 n +0000808910 00000 n +0000812679 00000 n +0000809064 00000 n +0000809218 00000 n +0000812739 00000 n +0000809372 00000 n +0000809560 00000 n +0000809714 00000 n +0000809901 00000 n +0000810054 00000 n +0000810241 00000 n +0000810394 00000 n +0000810581 00000 n +0000810734 00000 n +0000810921 00000 n +0000811074 00000 n +0000811262 00000 n +0000811416 00000 n +0000811604 00000 n +0000811758 00000 n +0000811946 00000 n +0000812100 00000 n +0000812288 00000 n +0001144271 00000 n +0000818487 00000 n +0000814666 00000 n +0000812925 00000 n +0000818367 00000 n +0000814984 00000 n +0000815172 00000 n +0000815325 00000 n +0000815513 00000 n +0000815667 00000 n +0000815855 00000 n +0000816009 00000 n +0000816197 00000 n +0000816351 00000 n +0000816539 00000 n +0000816692 00000 n +0000816880 00000 n +0000817034 00000 n +0000817188 00000 n +0000818427 00000 n +0000817342 00000 n +0000817530 00000 n +0000817717 00000 n +0000817871 00000 n +0000818025 00000 n +0000818213 00000 n +0000823484 00000 n +0000820376 00000 n +0000818600 00000 n +0000823005 00000 n +0000823184 00000 n +0000820640 00000 n +0000820812 00000 n +0000823244 00000 n +0000820966 00000 n +0000823304 00000 n +0000821120 00000 n +0000821308 00000 n +0000823364 00000 n +0000821462 00000 n +0000821650 00000 n +0000821838 00000 n +0000821991 00000 n +0000822178 00000 n +0000823424 00000 n +0000822331 00000 n +0000822518 00000 n +0000822671 00000 n +0000822855 00000 n +0001144238 00000 n +0000829047 00000 n +0000825411 00000 n +0000823610 00000 n +0000828688 00000 n +0000828748 00000 n +0000825702 00000 n +0000825890 00000 n +0000826044 00000 n +0000826231 00000 n +0000828808 00000 n +0000826384 00000 n +0000826572 00000 n +0000826726 00000 n +0000826914 00000 n +0000828867 00000 n +0000827068 00000 n +0000828927 00000 n +0000827256 00000 n +0000827444 00000 n +0000827598 00000 n +0000827785 00000 n +0000828987 00000 n +0000827938 00000 n +0000828126 00000 n +0000828313 00000 n +0000828501 00000 n +0001247284 00000 n +0000832875 00000 n +0000830657 00000 n +0000829147 00000 n +0000832576 00000 n +0000832755 00000 n +0000830885 00000 n +0000831056 00000 n +0000832815 00000 n +0000831210 00000 n +0000831398 00000 n +0000831552 00000 n +0000831740 00000 n +0000831893 00000 n +0000832080 00000 n +0000832234 00000 n +0000832422 00000 n +0001144205 00000 n +0000837054 00000 n +0000834616 00000 n +0000833014 00000 n +0000836695 00000 n +0000836874 00000 n +0000834853 00000 n +0000835024 00000 n +0000836934 00000 n +0000835178 00000 n +0000836994 00000 n +0000835331 00000 n +0000835519 00000 n +0000835673 00000 n +0000835861 00000 n +0000836014 00000 n +0000836200 00000 n +0000836353 00000 n +0000836541 00000 n +0001144172 00000 n +0000842363 00000 n +0000838821 00000 n +0000837193 00000 n +0000841584 00000 n +0000841763 00000 n +0000839085 00000 n +0000839256 00000 n +0000841823 00000 n +0000841883 00000 n +0000839410 00000 n +0000841943 00000 n +0000839597 00000 n +0000842003 00000 n +0000842063 00000 n +0000839784 00000 n +0000842123 00000 n +0000839971 00000 n +0000842183 00000 n +0000840158 00000 n +0000840345 00000 n +0000840533 00000 n +0000842243 00000 n +0000840686 00000 n +0000840873 00000 n +0000842303 00000 n +0000841061 00000 n +0000841213 00000 n +0000841398 00000 n +0001144139 00000 n +0000847170 00000 n +0000843974 00000 n +0000842488 00000 n +0000846511 00000 n +0000846690 00000 n +0000844229 00000 n +0000844400 00000 n +0000846750 00000 n +0000844554 00000 n +0000846810 00000 n +0000846870 00000 n +0000844708 00000 n +0000846930 00000 n +0000844895 00000 n +0000845081 00000 n +0000845268 00000 n +0000846990 00000 n +0000845420 00000 n +0000845607 00000 n +0000847050 00000 n +0000845795 00000 n +0000845949 00000 n +0000846136 00000 n +0000847110 00000 n +0000846324 00000 n +0001144106 00000 n +0000849252 00000 n +0000848278 00000 n +0000847295 00000 n +0000848954 00000 n +0000849133 00000 n +0000848443 00000 n +0000848614 00000 n +0000849193 00000 n +0000848768 00000 n +0001144073 00000 n +0000859732 00000 n +0000852338 00000 n +0000849378 00000 n +0000859373 00000 n +0000859552 00000 n +0000852800 00000 n +0000852975 00000 n +0000859612 00000 n +0000859672 00000 n +0000853129 00000 n +0000853316 00000 n +0000853504 00000 n +0000853692 00000 n +0000853879 00000 n +0000854066 00000 n +0000854254 00000 n +0000854441 00000 n +0000854629 00000 n +0000854817 00000 n +0000855005 00000 n +0000855191 00000 n +0000855379 00000 n +0000855567 00000 n +0000855755 00000 n +0000855943 00000 n +0000856130 00000 n +0000856318 00000 n +0000856506 00000 n +0000856694 00000 n +0000856882 00000 n +0000857070 00000 n +0000857258 00000 n +0000857412 00000 n +0000857600 00000 n +0000857787 00000 n +0000857939 00000 n +0000858127 00000 n +0000858280 00000 n +0000858468 00000 n +0000858656 00000 n +0000858810 00000 n +0000858998 00000 n +0000859186 00000 n +0001247409 00000 n +0001144040 00000 n +0000871562 00000 n +0000862895 00000 n +0000859857 00000 n +0000871382 00000 n +0000871442 00000 n +0000863420 00000 n +0000863608 00000 n +0000863796 00000 n +0000863984 00000 n +0000864172 00000 n +0000864360 00000 n +0000864548 00000 n +0000864736 00000 n +0000864924 00000 n +0000865110 00000 n +0000865298 00000 n +0000865486 00000 n +0000865673 00000 n +0000865860 00000 n +0000866048 00000 n +0000866202 00000 n +0000866390 00000 n +0000866577 00000 n +0000866765 00000 n +0000866919 00000 n +0000867106 00000 n +0000867294 00000 n +0000867480 00000 n +0000867668 00000 n +0000867856 00000 n +0000868042 00000 n +0000868228 00000 n +0000868416 00000 n +0000868604 00000 n +0000868791 00000 n +0000868978 00000 n +0000869165 00000 n +0000871502 00000 n +0000869353 00000 n +0000869541 00000 n +0000869729 00000 n +0000869917 00000 n +0000870104 00000 n +0000870291 00000 n +0000870478 00000 n +0000870632 00000 n +0000870820 00000 n +0000871008 00000 n +0000871196 00000 n +0000876957 00000 n +0000873160 00000 n +0000871675 00000 n +0000876897 00000 n +0000873469 00000 n +0000873657 00000 n +0000873844 00000 n +0000874030 00000 n +0000874218 00000 n +0000874406 00000 n +0000874594 00000 n +0000874782 00000 n +0000874936 00000 n +0000875124 00000 n +0000875278 00000 n +0000875466 00000 n +0000875654 00000 n +0000875842 00000 n +0000875996 00000 n +0000876184 00000 n +0000876338 00000 n +0000876525 00000 n +0000876711 00000 n +0000882116 00000 n +0000879146 00000 n +0000877070 00000 n +0000881757 00000 n +0000881936 00000 n +0000879410 00000 n +0000879586 00000 n +0000881996 00000 n +0000879740 00000 n +0000879894 00000 n +0000880048 00000 n +0000880202 00000 n +0000880356 00000 n +0000880510 00000 n +0000880664 00000 n +0000882056 00000 n +0000880818 00000 n +0000881006 00000 n +0000881193 00000 n +0000881381 00000 n +0000881569 00000 n +0001144007 00000 n +0000889059 00000 n +0000884735 00000 n +0000882242 00000 n +0000888999 00000 n +0000885062 00000 n +0000885250 00000 n +0000885438 00000 n +0000885625 00000 n +0000885813 00000 n +0000886001 00000 n +0000886189 00000 n +0000886377 00000 n +0000886565 00000 n +0000886752 00000 n +0000886939 00000 n +0000887127 00000 n +0000887315 00000 n +0000887503 00000 n +0000887691 00000 n +0000887878 00000 n +0000888066 00000 n +0000888254 00000 n +0000888440 00000 n +0000888625 00000 n +0000888813 00000 n +0000894940 00000 n +0000891399 00000 n +0000889172 00000 n +0000894880 00000 n +0000891690 00000 n +0000891878 00000 n +0000892065 00000 n +0000892253 00000 n +0000892441 00000 n +0000892629 00000 n +0000892815 00000 n +0000893003 00000 n +0000893191 00000 n +0000893379 00000 n +0000893567 00000 n +0000893755 00000 n +0000893943 00000 n +0000894131 00000 n +0000894319 00000 n +0000894507 00000 n +0000894694 00000 n +0000905215 00000 n +0000898128 00000 n +0000895040 00000 n +0000905155 00000 n +0000898581 00000 n +0000898769 00000 n +0000898957 00000 n +0000899145 00000 n +0000899333 00000 n +0000899521 00000 n +0000899709 00000 n +0000899897 00000 n +0000900085 00000 n +0000900273 00000 n +0000900461 00000 n +0000900649 00000 n +0000900837 00000 n +0000901025 00000 n +0000901212 00000 n +0000901399 00000 n +0000901587 00000 n +0000901775 00000 n +0000901963 00000 n +0000902150 00000 n +0000902338 00000 n +0000902526 00000 n +0000902714 00000 n +0000902902 00000 n +0000903090 00000 n +0000903278 00000 n +0000903466 00000 n +0000903654 00000 n +0000903842 00000 n +0000904029 00000 n +0000904216 00000 n +0000904404 00000 n +0000904592 00000 n +0000904780 00000 n +0000904968 00000 n +0001247534 00000 n +0000916718 00000 n +0000908411 00000 n +0000905315 00000 n +0000916539 00000 n +0000908918 00000 n +0000909106 00000 n +0000909294 00000 n +0000909479 00000 n +0000909667 00000 n +0000909855 00000 n +0000910043 00000 n +0000910229 00000 n +0000916599 00000 n +0000910416 00000 n +0000910602 00000 n +0000910789 00000 n +0000910976 00000 n +0000911164 00000 n +0000911352 00000 n +0000916659 00000 n +0000911540 00000 n +0000911728 00000 n +0000911916 00000 n +0000912104 00000 n +0000912292 00000 n +0000912480 00000 n +0000912668 00000 n +0000912856 00000 n +0000913010 00000 n +0000913198 00000 n +0000913385 00000 n +0000913573 00000 n +0000913760 00000 n +0000913914 00000 n +0000914101 00000 n +0000914289 00000 n +0000914475 00000 n +0000914663 00000 n +0000914851 00000 n +0000915039 00000 n +0000915227 00000 n +0000915415 00000 n +0000915603 00000 n +0000915791 00000 n +0000915979 00000 n +0000916165 00000 n +0000916352 00000 n +0000924609 00000 n +0000918814 00000 n +0000916831 00000 n +0000924490 00000 n +0000919213 00000 n +0000919401 00000 n +0000919589 00000 n +0000919777 00000 n +0000924550 00000 n +0000919965 00000 n +0000920152 00000 n +0000920339 00000 n +0000920527 00000 n +0000920715 00000 n +0000920902 00000 n +0000921056 00000 n +0000921244 00000 n +0000921398 00000 n +0000921586 00000 n +0000921774 00000 n +0000921962 00000 n +0000922116 00000 n +0000922304 00000 n +0000922458 00000 n +0000922645 00000 n +0000922799 00000 n +0000922987 00000 n +0000923175 00000 n +0000923363 00000 n +0000923551 00000 n +0000923739 00000 n +0000923927 00000 n +0000924115 00000 n +0000924303 00000 n +0000929222 00000 n +0000926275 00000 n +0000924722 00000 n +0000928923 00000 n +0000929102 00000 n +0000926530 00000 n +0000926705 00000 n +0000929162 00000 n +0000926859 00000 n +0000927047 00000 n +0000927235 00000 n +0000927423 00000 n +0000927611 00000 n +0000927799 00000 n +0000927987 00000 n +0000928173 00000 n +0000928360 00000 n +0000928547 00000 n +0000928735 00000 n +0001143974 00000 n +0000934249 00000 n +0000931241 00000 n +0000929361 00000 n +0000933890 00000 n +0000934069 00000 n +0000931496 00000 n +0000931671 00000 n +0000934129 00000 n +0000931825 00000 n +0000932013 00000 n +0000932201 00000 n +0000932389 00000 n +0000932576 00000 n +0000932763 00000 n +0000932951 00000 n +0000934189 00000 n +0000933139 00000 n +0000933327 00000 n +0000933514 00000 n +0000933702 00000 n +0001143941 00000 n +0000939640 00000 n +0000936382 00000 n +0000934388 00000 n +0000939161 00000 n +0000939340 00000 n +0000936646 00000 n +0000936822 00000 n +0000939400 00000 n +0000936976 00000 n +0000939460 00000 n +0000937129 00000 n +0000937317 00000 n +0000937505 00000 n +0000937692 00000 n +0000937879 00000 n +0000939520 00000 n +0000938067 00000 n +0000938255 00000 n +0000938443 00000 n +0000938631 00000 n +0000939580 00000 n +0000938819 00000 n +0000938973 00000 n +0001143908 00000 n +0000943949 00000 n +0000941922 00000 n +0000939766 00000 n +0000943590 00000 n +0000943769 00000 n +0000942132 00000 n +0000942308 00000 n +0000943829 00000 n +0000942462 00000 n +0000942650 00000 n +0000942838 00000 n +0000943889 00000 n +0000943026 00000 n +0000943214 00000 n +0000943402 00000 n +0001247659 00000 n +0001143875 00000 n +0000949125 00000 n +0000946253 00000 n +0000944075 00000 n +0000948945 00000 n +0000949005 00000 n +0000946508 00000 n +0000946695 00000 n +0000946882 00000 n +0000949065 00000 n +0000947069 00000 n +0000947256 00000 n +0000947444 00000 n +0000947632 00000 n +0000947820 00000 n +0000948008 00000 n +0000948195 00000 n +0000948383 00000 n +0000948570 00000 n +0000948757 00000 n +0000953857 00000 n +0000951258 00000 n +0000949225 00000 n +0000953559 00000 n +0000953619 00000 n +0000951495 00000 n +0000951683 00000 n +0000953679 00000 n +0000951871 00000 n +0000952059 00000 n +0000952247 00000 n +0000952434 00000 n +0000952622 00000 n +0000952810 00000 n +0000953738 00000 n +0000952997 00000 n +0000953798 00000 n +0000953184 00000 n +0000953371 00000 n +0000959076 00000 n +0000956133 00000 n +0000953970 00000 n +0000958777 00000 n +0000958956 00000 n +0000956388 00000 n +0000956560 00000 n +0000959016 00000 n +0000956714 00000 n +0000956901 00000 n +0000957089 00000 n +0000957277 00000 n +0000957464 00000 n +0000957652 00000 n +0000957839 00000 n +0000958027 00000 n +0000958215 00000 n +0000958403 00000 n +0000958591 00000 n +0001143842 00000 n +0000961219 00000 n +0000960855 00000 n +0000959202 00000 n +0000960981 00000 n +0000962850 00000 n +0000962664 00000 n +0000961305 00000 n +0000962790 00000 n +0000964556 00000 n +0000964370 00000 n +0000962936 00000 n +0000964496 00000 n +0001247784 00000 n +0000966194 00000 n +0000966008 00000 n +0000964642 00000 n +0000966134 00000 n +0000967886 00000 n +0000967700 00000 n +0000966280 00000 n +0000967826 00000 n +0000969209 00000 n +0000969023 00000 n +0000967972 00000 n +0000969149 00000 n +0000971692 00000 n +0000971387 00000 n +0000969295 00000 n +0000971513 00000 n +0000972414 00000 n +0000972228 00000 n +0000971778 00000 n +0000972354 00000 n +0000974136 00000 n +0000973831 00000 n +0000972500 00000 n +0000973957 00000 n +0001247909 00000 n +0000975279 00000 n +0000975093 00000 n +0000974222 00000 n +0000975219 00000 n +0000976945 00000 n +0000976640 00000 n +0000975365 00000 n +0000976766 00000 n +0000979103 00000 n +0000978798 00000 n +0000977031 00000 n +0000978924 00000 n +0000980492 00000 n +0000980306 00000 n +0000979189 00000 n +0000980432 00000 n +0000982321 00000 n +0000982016 00000 n +0000980578 00000 n +0000982142 00000 n +0000984791 00000 n +0000984486 00000 n +0000982407 00000 n +0000984612 00000 n +0001248034 00000 n +0000986506 00000 n +0000986320 00000 n +0000984877 00000 n +0000986446 00000 n +0000988451 00000 n +0000988265 00000 n +0000986592 00000 n +0000988391 00000 n +0000990511 00000 n +0000990325 00000 n +0000988537 00000 n +0000990451 00000 n +0000992619 00000 n +0000992433 00000 n +0000990597 00000 n +0000992559 00000 n +0000994371 00000 n +0000994185 00000 n +0000992705 00000 n +0000994311 00000 n +0000995987 00000 n +0000995801 00000 n +0000994457 00000 n +0000995927 00000 n +0001248159 00000 n +0000998548 00000 n +0000998243 00000 n +0000996073 00000 n +0000998369 00000 n +0000999473 00000 n +0000999287 00000 n +0000998634 00000 n +0000999413 00000 n +0001001969 00000 n +0001001664 00000 n +0000999559 00000 n +0001001790 00000 n +0001003303 00000 n +0001003117 00000 n +0001002055 00000 n +0001003243 00000 n +0001004638 00000 n +0001004452 00000 n +0001003389 00000 n +0001004578 00000 n +0001006320 00000 n +0001006134 00000 n +0001004724 00000 n +0001006260 00000 n +0001248284 00000 n +0001008728 00000 n +0001008423 00000 n +0001006406 00000 n +0001008549 00000 n +0001010000 00000 n +0001009814 00000 n +0001008814 00000 n +0001009940 00000 n +0001012371 00000 n +0001012066 00000 n +0001010086 00000 n +0001012192 00000 n +0001013919 00000 n +0001013733 00000 n +0001012457 00000 n +0001013859 00000 n +0001015477 00000 n +0001015291 00000 n +0001014005 00000 n +0001015417 00000 n +0001017054 00000 n +0001016868 00000 n +0001015563 00000 n +0001016994 00000 n +0001248409 00000 n +0001018427 00000 n +0001018241 00000 n +0001017140 00000 n +0001018367 00000 n +0001019413 00000 n +0001019227 00000 n +0001018513 00000 n +0001019353 00000 n +0001021742 00000 n +0001021437 00000 n +0001019499 00000 n +0001021563 00000 n +0001022711 00000 n +0001022525 00000 n +0001021828 00000 n +0001022651 00000 n +0001024986 00000 n +0001024681 00000 n +0001022797 00000 n +0001024807 00000 n +0001024867 00000 n +0001026872 00000 n +0001026686 00000 n +0001025072 00000 n +0001026812 00000 n +0001248534 00000 n +0001029355 00000 n +0001029050 00000 n +0001026958 00000 n +0001029176 00000 n +0001030732 00000 n +0001030546 00000 n +0001029441 00000 n +0001030672 00000 n +0001031924 00000 n +0001031738 00000 n +0001030818 00000 n +0001031864 00000 n +0001034369 00000 n +0001034064 00000 n +0001032010 00000 n +0001034190 00000 n +0001035744 00000 n +0001035558 00000 n +0001034455 00000 n +0001035684 00000 n +0001037470 00000 n +0001037284 00000 n +0001035830 00000 n +0001037410 00000 n +0001248659 00000 n +0001039234 00000 n +0001039048 00000 n +0001037556 00000 n +0001039174 00000 n +0001041143 00000 n +0001040957 00000 n +0001039320 00000 n +0001041083 00000 n +0001042688 00000 n +0001042502 00000 n +0001041229 00000 n +0001042628 00000 n +0001043907 00000 n +0001043721 00000 n +0001042774 00000 n +0001043847 00000 n +0001046259 00000 n +0001045954 00000 n +0001043993 00000 n +0001046080 00000 n +0001047833 00000 n +0001047647 00000 n +0001046345 00000 n +0001047773 00000 n +0001248784 00000 n +0001049827 00000 n +0001049641 00000 n +0001047919 00000 n +0001049767 00000 n +0001051065 00000 n +0001050879 00000 n +0001049913 00000 n +0001051005 00000 n +0001066356 00000 n +0001054834 00000 n +0001051151 00000 n +0001066296 00000 n +0001055593 00000 n +0001055748 00000 n +0001055903 00000 n +0001056058 00000 n +0001056214 00000 n +0001056370 00000 n +0001056526 00000 n +0001056682 00000 n +0001056838 00000 n +0001056994 00000 n +0001057150 00000 n +0001057306 00000 n +0001057462 00000 n +0001057618 00000 n +0001057774 00000 n +0001057929 00000 n +0001058084 00000 n +0001058238 00000 n +0001058393 00000 n +0001058548 00000 n +0001058703 00000 n +0001058858 00000 n +0001059013 00000 n +0001059167 00000 n +0001059323 00000 n +0001059479 00000 n +0001059634 00000 n +0001059789 00000 n +0001059942 00000 n +0001060097 00000 n +0001060250 00000 n +0001060406 00000 n +0001060561 00000 n +0001060717 00000 n +0001060873 00000 n +0001061029 00000 n +0001061185 00000 n +0001061341 00000 n +0001061497 00000 n +0001061652 00000 n +0001061807 00000 n +0001061963 00000 n +0001062119 00000 n +0001062274 00000 n +0001062430 00000 n +0001062585 00000 n +0001062741 00000 n +0001062896 00000 n +0001063051 00000 n +0001063205 00000 n +0001063359 00000 n +0001063514 00000 n +0001063669 00000 n +0001063823 00000 n +0001063978 00000 n +0001064133 00000 n +0001064287 00000 n +0001064440 00000 n +0001064594 00000 n +0001064748 00000 n +0001064902 00000 n +0001065056 00000 n +0001065210 00000 n +0001065365 00000 n +0001065520 00000 n +0001065676 00000 n +0001065832 00000 n +0001065987 00000 n +0001066143 00000 n +0001080323 00000 n +0001069648 00000 n +0001066442 00000 n +0001080263 00000 n +0001070362 00000 n +0001070516 00000 n +0001070670 00000 n +0001070822 00000 n +0001070976 00000 n +0001071130 00000 n +0001071283 00000 n +0001071437 00000 n +0001071591 00000 n +0001071744 00000 n +0001071898 00000 n +0001072053 00000 n +0001072206 00000 n +0001072362 00000 n +0001072517 00000 n +0001072672 00000 n +0001072826 00000 n +0001072981 00000 n +0001073136 00000 n +0001073291 00000 n +0001073446 00000 n +0001073601 00000 n +0001073756 00000 n +0001073910 00000 n +0001074065 00000 n +0001074219 00000 n +0001074374 00000 n +0001074529 00000 n +0001074683 00000 n +0001074838 00000 n +0001074993 00000 n +0001075147 00000 n +0001075302 00000 n +0001075457 00000 n +0001075610 00000 n +0001075765 00000 n +0001075918 00000 n +0001076073 00000 n +0001076228 00000 n +0001076383 00000 n +0001076539 00000 n +0001076695 00000 n +0001076851 00000 n +0001077007 00000 n +0001077163 00000 n +0001077317 00000 n +0001077469 00000 n +0001077623 00000 n +0001077777 00000 n +0001077931 00000 n +0001078086 00000 n +0001078240 00000 n +0001078395 00000 n +0001078550 00000 n +0001078705 00000 n +0001078861 00000 n +0001079017 00000 n +0001079173 00000 n +0001079329 00000 n +0001079485 00000 n +0001079641 00000 n +0001079797 00000 n +0001079953 00000 n +0001080108 00000 n +0001098160 00000 n +0001084698 00000 n +0001080409 00000 n +0001098100 00000 n +0001085565 00000 n +0001085721 00000 n +0001085876 00000 n +0001086031 00000 n +0001086187 00000 n +0001086343 00000 n +0001086498 00000 n +0001086653 00000 n +0001086808 00000 n +0001086963 00000 n +0001087118 00000 n +0001087273 00000 n +0001087428 00000 n +0001087582 00000 n +0001087734 00000 n +0001087887 00000 n +0001088041 00000 n +0001088196 00000 n +0001088351 00000 n +0001088506 00000 n +0001088661 00000 n +0001088816 00000 n +0001088971 00000 n +0001089126 00000 n +0001089279 00000 n +0001089434 00000 n +0001089589 00000 n +0001089744 00000 n +0001089899 00000 n +0001090051 00000 n +0001090206 00000 n +0001090361 00000 n +0001090516 00000 n +0001090671 00000 n +0001090826 00000 n +0001090980 00000 n +0001091135 00000 n +0001091289 00000 n +0001091444 00000 n +0001091599 00000 n +0001091753 00000 n +0001091907 00000 n +0001092060 00000 n +0001092214 00000 n +0001092368 00000 n +0001092523 00000 n +0001092677 00000 n +0001092833 00000 n +0001092989 00000 n +0001093145 00000 n +0001093301 00000 n +0001093457 00000 n +0001093611 00000 n +0001093767 00000 n +0001093923 00000 n +0001094079 00000 n +0001094235 00000 n +0001094390 00000 n +0001094545 00000 n +0001094701 00000 n +0001094857 00000 n +0001095012 00000 n +0001095166 00000 n +0001095321 00000 n +0001095476 00000 n +0001095628 00000 n +0001095783 00000 n +0001095937 00000 n +0001096091 00000 n +0001096245 00000 n +0001096400 00000 n +0001096554 00000 n +0001096708 00000 n +0001096863 00000 n +0001097018 00000 n +0001097172 00000 n +0001097327 00000 n +0001097482 00000 n +0001097636 00000 n +0001097790 00000 n +0001097945 00000 n +0001111329 00000 n +0001101169 00000 n +0001098246 00000 n +0001111269 00000 n +0001101856 00000 n +0001102010 00000 n +0001102166 00000 n +0001102321 00000 n +0001102476 00000 n +0001102628 00000 n +0001102782 00000 n +0001102937 00000 n +0001103090 00000 n +0001103245 00000 n +0001103401 00000 n +0001103556 00000 n +0001103710 00000 n +0001103865 00000 n +0001104020 00000 n +0001104173 00000 n +0001104329 00000 n +0001104484 00000 n +0001104639 00000 n +0001104793 00000 n +0001104946 00000 n +0001105099 00000 n +0001105251 00000 n +0001105404 00000 n +0001105557 00000 n +0001105709 00000 n +0001105862 00000 n +0001106015 00000 n +0001106167 00000 n +0001106320 00000 n +0001106475 00000 n +0001106629 00000 n +0001106783 00000 n +0001106938 00000 n +0001107092 00000 n +0001107247 00000 n +0001107402 00000 n +0001107557 00000 n +0001107712 00000 n +0001107867 00000 n +0001108022 00000 n +0001108177 00000 n +0001108332 00000 n +0001108488 00000 n +0001108643 00000 n +0001108796 00000 n +0001108951 00000 n +0001109106 00000 n +0001109260 00000 n +0001109415 00000 n +0001109570 00000 n +0001109724 00000 n +0001109879 00000 n +0001110034 00000 n +0001110188 00000 n +0001110342 00000 n +0001110497 00000 n +0001110652 00000 n +0001110807 00000 n +0001110962 00000 n +0001111116 00000 n +0001248909 00000 n +0001128122 00000 n +0001115160 00000 n +0001111415 00000 n +0001128062 00000 n +0001116000 00000 n +0001116155 00000 n +0001116310 00000 n +0001116463 00000 n +0001116618 00000 n +0001116774 00000 n +0001116929 00000 n +0001117083 00000 n +0001117238 00000 n +0001117393 00000 n +0001117548 00000 n +0001117702 00000 n +0001117857 00000 n +0001118012 00000 n +0001118166 00000 n +0001118321 00000 n +0001118476 00000 n +0001118630 00000 n +0001118785 00000 n +0001118941 00000 n +0001119095 00000 n +0001119249 00000 n +0001119404 00000 n +0001119559 00000 n +0001119713 00000 n +0001119867 00000 n +0001120022 00000 n +0001120176 00000 n +0001120332 00000 n +0001120487 00000 n +0001120641 00000 n +0001120796 00000 n +0001120951 00000 n +0001121106 00000 n +0001121258 00000 n +0001121413 00000 n +0001121567 00000 n +0001121722 00000 n +0001121877 00000 n +0001122032 00000 n +0001122185 00000 n +0001122340 00000 n +0001122495 00000 n +0001122650 00000 n +0001122805 00000 n +0001122960 00000 n +0001123113 00000 n +0001123268 00000 n +0001123423 00000 n +0001123578 00000 n +0001123732 00000 n +0001123886 00000 n +0001124039 00000 n +0001124194 00000 n +0001124349 00000 n +0001124504 00000 n +0001124659 00000 n +0001124813 00000 n +0001124968 00000 n +0001125123 00000 n +0001125277 00000 n +0001125432 00000 n +0001125586 00000 n +0001125741 00000 n +0001125896 00000 n +0001126051 00000 n +0001126206 00000 n +0001126360 00000 n +0001126514 00000 n +0001126669 00000 n +0001126824 00000 n +0001126979 00000 n +0001127134 00000 n +0001127289 00000 n +0001127444 00000 n +0001127599 00000 n +0001127754 00000 n +0001127909 00000 n +0001143756 00000 n +0001132089 00000 n +0001128208 00000 n +0001143696 00000 n +0001132857 00000 n +0001133011 00000 n +0001133166 00000 n +0001133321 00000 n +0001133474 00000 n +0001133629 00000 n +0001133783 00000 n +0001133937 00000 n +0001134092 00000 n +0001134247 00000 n +0001134402 00000 n +0001134557 00000 n +0001134710 00000 n +0001134865 00000 n +0001135020 00000 n +0001135175 00000 n +0001135329 00000 n +0001135483 00000 n +0001135637 00000 n +0001135792 00000 n +0001135947 00000 n +0001136101 00000 n +0001136256 00000 n +0001136411 00000 n +0001136566 00000 n +0001136719 00000 n +0001136874 00000 n +0001137028 00000 n +0001137183 00000 n +0001137337 00000 n +0001137492 00000 n +0001137647 00000 n +0001137802 00000 n +0001137957 00000 n +0001138110 00000 n +0001138264 00000 n +0001138418 00000 n +0001138573 00000 n +0001138728 00000 n +0001138882 00000 n +0001139036 00000 n +0001139190 00000 n +0001139344 00000 n +0001139498 00000 n +0001139653 00000 n +0001139808 00000 n +0001139964 00000 n +0001140118 00000 n +0001140273 00000 n +0001140427 00000 n +0001140583 00000 n +0001140739 00000 n +0001140894 00000 n +0001141050 00000 n +0001141204 00000 n +0001141360 00000 n +0001141514 00000 n +0001141670 00000 n +0001141825 00000 n +0001141981 00000 n +0001142137 00000 n +0001142293 00000 n +0001142449 00000 n +0001142605 00000 n +0001142761 00000 n +0001142917 00000 n +0001143073 00000 n +0001143229 00000 n +0001143385 00000 n +0001143540 00000 n +0001145459 00000 n +0001158368 00000 n +0001176406 00000 n +0001179043 00000 n +0001179012 00000 n +0001181580 00000 n +0001181334 00000 n +0001200247 00000 n +0001221781 00000 n +0001243077 00000 n +0001249007 00000 n +0001249128 00000 n +0001249254 00000 n +0001249380 00000 n +0001249506 00000 n +0001249632 00000 n +0001249758 00000 n +0001249884 00000 n +0001249973 00000 n +0001250100 00000 n +0001250190 00000 n +0001250264 00000 n +0001261136 00000 n +0001316039 00000 n +0001316080 00000 n +0001316120 00000 n +0001316254 00000 n +trailer +<< +/Size 5675 +/Root 5673 0 R +/Info 5674 0 R +/ID [ ] +>> +startxref +1316518 +%%EOF diff --git a/components/net/uip/lib/memb.c b/components/net/uip/lib/memb.c new file mode 100644 index 0000000000..777b52f7bc --- /dev/null +++ b/components/net/uip/lib/memb.c @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: memb.c,v 1.1 2006/06/12 08:21:43 adam Exp $ + */ + +/** + * \addtogroup memb + * @{ + */ + + /** + * \file + * Memory block allocation routines. + * \author Adam Dunkels + */ +#include + +#include "memb.h" + +/*---------------------------------------------------------------------------*/ +void +memb_init(struct memb_blocks *m) +{ + memset(m->count, 0, m->num); + memset(m->mem, 0, m->size * m->num); +} +/*---------------------------------------------------------------------------*/ +void * +memb_alloc(struct memb_blocks *m) +{ + int i; + + for(i = 0; i < m->num; ++i) { + if(m->count[i] == 0) { + /* If this block was unused, we increase the reference count to + indicate that it now is used and return a pointer to the + memory block. */ + ++(m->count[i]); + return (void *)((char *)m->mem + (i * m->size)); + } + } + + /* No free block was found, so we return NULL to indicate failure to + allocate block. */ + return NULL; +} +/*---------------------------------------------------------------------------*/ +char +memb_free(struct memb_blocks *m, void *ptr) +{ + int i; + char *ptr2; + + /* Walk through the list of blocks and try to find the block to + which the pointer "ptr" points to. */ + ptr2 = (char *)m->mem; + for(i = 0; i < m->num; ++i) { + + if(ptr2 == (char *)ptr) { + /* We've found to block to which "ptr" points so we decrease the + reference count and return the new value of it. */ + if(m->count[i] > 0) { + /* Make sure that we don't deallocate free memory. */ + --(m->count[i]); + } + return m->count[i]; + } + ptr2 += m->size; + } + return -1; +} +/*---------------------------------------------------------------------------*/ + +/** @} */ diff --git a/components/net/uip/lib/memb.h b/components/net/uip/lib/memb.h new file mode 100644 index 0000000000..b725ebe108 --- /dev/null +++ b/components/net/uip/lib/memb.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: memb.h,v 1.1 2006/06/12 08:21:43 adam Exp $ + */ + +/** + * \defgroup memb Memory block management functions + * + * The memory block allocation routines provide a simple yet powerful + * set of functions for managing a set of memory blocks of fixed + * size. A set of memory blocks is statically declared with the + * MEMB() macro. Memory blocks are allocated from the declared + * memory by the memb_alloc() function, and are deallocated with the + * memb_free() function. + * + * \note Because of namespace clashes only one MEMB() can be + * declared per C module, and the name scope of a MEMB() memory + * block is local to each C module. + * + * The following example shows how to declare and use a memory block + * called "cmem" which has 8 chunks of memory with each memory chunk + * being 20 bytes large. + * + * @{ + */ + + +/** + * \file + * Memory block allocation routines. + * \author + * Adam Dunkels + * + */ + +#ifndef __MEMB_H__ +#define __MEMB_H__ + +/* + * Here we define a C preprocessing macro for concatenating to + * strings. We need use two macros in order to allow concatenation of + * two #defined macros. + */ +#define MEMB_CONCAT2(s1, s2) s1##s2 +#define MEMB_CONCAT(s1, s2) MEMB_CONCAT2(s1, s2) + +/** + * Declare a memory block. + * + * This macro is used to staticall declare a block of memory that can + * be used by the block allocation functions. The macro statically + * declares a C array with a size that matches the specified number of + * blocks and their individual sizes. + * + * Example: + \code +MEMB(connections, sizeof(struct connection), 16); + \endcode + * + * \param name The name of the memory block (later used with + * memb_init(), memb_alloc() and memb_free()). + * + * \param size The size of each memory chunk, in bytes. + * + * \param num The total number of memory chunks in the block. + * + */ +#define MEMB(name, structure, num) \ + static char MEMB_CONCAT(name,_memb_count)[num]; \ + static structure MEMB_CONCAT(name,_memb_mem)[num]; \ + static struct memb_blocks name = {sizeof(structure), num, \ + MEMB_CONCAT(name,_memb_count), \ + (void *)MEMB_CONCAT(name,_memb_mem)} + +struct memb_blocks { + unsigned short size; + unsigned short num; + char *count; + void *mem; +}; + +/** + * Initialize a memory block that was declared with MEMB(). + * + * \param m A memory block previosly declared with MEMB(). + */ +void memb_init(struct memb_blocks *m); + +/** + * Allocate a memory block from a block of memory declared with MEMB(). + * + * \param m A memory block previosly declared with MEMB(). + */ +void *memb_alloc(struct memb_blocks *m); + +/** + * Deallocate a memory block from a memory block previously declared + * with MEMB(). + * + * \param m m A memory block previosly declared with MEMB(). + * + * \param ptr A pointer to the memory block that is to be deallocated. + * + * \return The new reference count for the memory block (should be 0 + * if successfully deallocated) or -1 if the pointer "ptr" did not + * point to a legal memory block. + */ +char memb_free(struct memb_blocks *m, void *ptr); + +/** @} */ + +#endif /* __MEMB_H__ */ diff --git a/components/net/uip/rt-thread/clock-arch.c b/components/net/uip/rt-thread/clock-arch.c new file mode 100644 index 0000000000..0c00d83ff5 --- /dev/null +++ b/components/net/uip/rt-thread/clock-arch.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.c,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * Implementation of architecture-specific clock functionality + * \author + * Adam Dunkels + */ + +#include "clock-arch.h" +#include "stm32f10x.h" + +/*---------------------------------------------------------------------------*/ +clock_time_t +clock_time(void) +{ + return (rt_tick_get()); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/rt-thread/clock-arch.h b/components/net/uip/rt-thread/clock-arch.h new file mode 100644 index 0000000000..0c4649d3ae --- /dev/null +++ b/components/net/uip/rt-thread/clock-arch.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +#ifndef __CLOCK_ARCH_H__ +#define __CLOCK_ARCH_H__ + +typedef int clock_time_t; +#define CLOCK_CONF_SECOND 100 + +#endif /* __CLOCK_ARCH_H__ */ diff --git a/components/net/uip/rt-thread/readme.txt b/components/net/uip/rt-thread/readme.txt new file mode 100644 index 0000000000..d20386dfe2 --- /dev/null +++ b/components/net/uip/rt-thread/readme.txt @@ -0,0 +1,12 @@ +/************************************ +*** +*** +**** +******/ + + + +2010-11-21 +以太网中的数据来不及处理就会造成断网问题? +2010-11-21 +发现一个问题:HELLO WORLD中不断连接,断开多次之后之后再也不能连接!! \ No newline at end of file diff --git a/components/net/uip/rt-thread/uIPmain.c b/components/net/uip/rt-thread/uIPmain.c new file mode 100644 index 0000000000..089747472d --- /dev/null +++ b/components/net/uip/rt-thread/uIPmain.c @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Adam Dunkels. + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: main.c,v 1.16 2006/06/11 21:55:03 adam Exp $ + * + */ +#include "uip.h" +#include "uip_arp.h" +#include "stm32_eth.h" +#include "rtconfig.h" +#include "rtdef.h" +#include "uip_timer.h" +#include "rtthread.h" + + + + + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) +// Define Prototypes +void TransmitPacket(void) +{ + int i; + u8_t data[1500]; + // Copy the header portion part + for(i=0; i < (UIP_LLH_LEN + 40); ++i) + { + data[i] = uip_buf[i]; + } + // Copy the data portion part + for(; i < uip_len; ++i) + { + data[i] = uip_appdata[i - UIP_LLH_LEN - 40 ]; + } + ETH_HandleTxPkt(data,uip_len); +} +void uip_tcpip_thread(void *parameter) +{ + int i; + static u8_t cnt; + while(1) + { + rt_thread_delay(CLOCK_SECOND*5); + for (i = 0; i < UIP_CONNS; i++) + { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if (uip_len > 0) + { + uip_arp_out(); + TransmitPacket(); + } + } +#if UIP_UDP + for (i = 0; i < UIP_UDP_CONNS; i++) + { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if (uip_len > 0) + { + uip_arp_out(); + TransmitPacket(); + } + } +#endif /* UIP_UDP */ + /* Call the ARP timer function every 10 seconds. */ + if (++cnt > 2) uip_arp_timer(); + } +} + +rt_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio) +{ + rt_thread_t t; + t = rt_thread_create(name, thread, arg, stacksize, prio, 20); + RT_ASSERT(t != RT_NULL); + rt_thread_startup(t); + return t; +} + + +void uip_sys_init(void) +{ + + uip_init(); //uip init + sys_thread_new("uip",uip_tcpip_thread, RT_NULL, RT_LWIP_TCPTHREAD_STACKSIZE, RT_LWIP_TCPTHREAD_PRIORITY); + hello_world_init(); // +} + +/*---------------------------------------------------------------------------*/ +void uip_log(char *m) +{ + rt_kprintf("uIP log message: %s\n", m); +} diff --git a/components/net/uip/rt-thread/uip-conf.h b/components/net/uip/rt-thread/uip-conf.h new file mode 100644 index 0000000000..9c2a25044c --- /dev/null +++ b/components/net/uip/rt-thread/uip-conf.h @@ -0,0 +1,167 @@ +/** + * \addtogroup uipopt + * @{ + */ + +/** + * \name Project-specific configuration options + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * An example uIP configuration file + * \author + * Adam Dunkels + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#include + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint8_t u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint16_t u16_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_CONNECTIONS 20 + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 40 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 420 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 1 + +/** + * UDP support on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP 0 + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 1 + +/* Here we include the header file for the application(s) we use in + our project. */ +/* #include "smtp.h" */ +#include "hello-world.h" +//#include "telnetd.h" +/* #include "webserver.h" */ +/* #include "dhcpc.h" */ +/* #include "resolv.h" */ +/* #include "webclient.h" */ + +#define UIP_ARCH_ADD32 0 + +#define UIP_ETHADDR0 0x00 +#define UIP_ETHADDR1 0x33 +#define UIP_ETHADDR2 0x44 +#define UIP_ETHADDR3 0x55 +#define UIP_ETHADDR4 0x66 +#define UIP_ETHADDR5 0x77 +#include + +#endif /* __UIP_CONF_H__ */ + +/** @} */ +/** @} */ diff --git a/components/net/uip/rt-thread/uip_addr.h b/components/net/uip/rt-thread/uip_addr.h new file mode 100644 index 0000000000..859477a0e3 --- /dev/null +++ b/components/net/uip/rt-thread/uip_addr.h @@ -0,0 +1,8 @@ + +#include "rtdef.h" + + + +struct ip_addr { + rt_uint16_t uip_ip4addr_t[2]; +} ; \ No newline at end of file diff --git a/components/net/uip/rt-thread/uip_arch.c b/components/net/uip/rt-thread/uip_arch.c new file mode 100644 index 0000000000..d41ee2b4a3 --- /dev/null +++ b/components/net/uip/rt-thread/uip_arch.c @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip_arch.c,v 1.2.2.1 2003/10/04 22:54:17 adam Exp $ + * + */ + + +#include "uip.h" +#include "uip_arch.h" + +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#define IP_PROTO_TCP 6 + +/*-----------------------------------------------------------------------------------*/ +void uip_add32(u8_t *op32, u16_t op16) +{ + + uip_acc32[3] = op32[3] + (op16 & 0xff); + uip_acc32[2] = op32[2] + (op16 >> 8); + uip_acc32[1] = op32[1]; + uip_acc32[0] = op32[0]; + + if(uip_acc32[2] < (op16 >> 8)) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + + + if(uip_acc32[3] < (op16 & 0xff)) { + ++uip_acc32[2]; + if(uip_acc32[2] == 0) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + } +} +/*-----------------------------------------------------------------------------------*/ +u16_t uip_chksum(u16_t *sdata, u16_t len) +{ + u16_t acc; + + for (acc = 0; len > 1; len -= 2) { + u16_t u = ((unsigned char *)sdata)[0] + (((unsigned char *)sdata)[1] << 8); + if ((acc += u) < u) { + /* Overflow, so we add the carry to acc (i.e., increase by + one). */ + ++acc; + } + ++sdata; + } + + /* add up any odd byte */ + if(len == 1) { + acc += htons(((u16_t)(*(u8_t *)sdata)) << 8); + if(acc < htons(((u16_t)(*(u8_t *)sdata)) << 8)) { + ++acc; + } + } + + return acc; +} +/*-----------------------------------------------------------------------------------*/ +u16_t uip_ipchksum(void) +{ + return uip_chksum((u16_t *)&uip_buf[UIP_LLH_LEN], 20); +} +/*-----------------------------------------------------------------------------------*/ +u16_t uip_tcpchksum(void) +{ + u16_t hsum, sum; + + + /* Compute the checksum of the TCP header. */ + hsum = uip_chksum((u16_t *)&uip_buf[20 + UIP_LLH_LEN], 20); + + /* Compute the checksum of the data in the TCP packet and add it to + the TCP header checksum. */ + sum = uip_chksum((u16_t *)uip_appdata, + (u16_t)(((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 40))); + + if((sum += hsum) < hsum) { + ++sum; + } + + if((sum += BUF->srcipaddr[0]) < BUF->srcipaddr[0]) { + ++sum; + } + if((sum += BUF->srcipaddr[1]) < BUF->srcipaddr[1]) { + ++sum; + } + if((sum += BUF->destipaddr[0]) < BUF->destipaddr[0]) { + ++sum; + } + if((sum += BUF->destipaddr[1]) < BUF->destipaddr[1]) { + ++sum; + } + + if((sum += (u16_t)htons((u16_t)IP_PROTO_TCP)) < (u16_t)htons((u16_t)IP_PROTO_TCP)) { + ++sum; + } + + hsum = (u16_t)htons((((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - 20); + + if((sum += hsum) < hsum) { + ++sum; + } + + return sum; +} + + diff --git a/components/net/uip/rt-thread/uip_eth.h b/components/net/uip/rt-thread/uip_eth.h new file mode 100644 index 0000000000..e0a8ba8ba9 --- /dev/null +++ b/components/net/uip/rt-thread/uip_eth.h @@ -0,0 +1,35 @@ +#ifndef __NETIF_ETHERNETIF_H__ +#define __NETIF_ETHERNETIF_H__ + +//#include "lwip/netif.h" +#include + +#define NIOCTL_GADDR 0x01 +#define ETHERNET_MTU 1500 +struct pbuf +{ + rt_uint16_t len; +}; + +struct eth_device +{ + /* inherit from rt_device */ + struct rt_device parent; + + //struct eth_addr *ethaddr; + //struct netif *netif; + struct rt_semaphore tx_ack; + struct rt_semaphore tx_msg; + + /* eth device interface */ + struct pbuf* (*eth_rx)(rt_device_t dev); + rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p); +}; + +rt_err_t eth_device_ready(struct eth_device* dev); + +rt_err_t eth_device_init(struct eth_device* dev, const char* name); + +rt_err_t eth_system_device_init(void); + +#endif /* __NETIF_ETHERNETIF_H__ */ diff --git a/components/net/uip/rt-thread/uip_etharp.c b/components/net/uip/rt-thread/uip_etharp.c new file mode 100644 index 0000000000..a2d15a17a2 --- /dev/null +++ b/components/net/uip/rt-thread/uip_etharp.c @@ -0,0 +1,58 @@ +#include "uip_pbuf.h" +#include "uip-conf.h" +#include "rtdef.h" +#include "uip.h" +#include "uip_arp.h" +#include "uip_netif.h" + +extern u16_t uip_len, uip_slen; +void +etharp_ip_input(struct netif *netif, struct pbuf *p) +{ + u8_t *ptr; + int i; + ptr = p->payload; + uip_len = p->len; + for (i=0;ilen;i++) uip_buf[i] = ptr[i]; + uip_arp_ipin(); + uip_input(); + return; +} +void +etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p) +{ + u8_t *ptr,*pdata; + //struct pbuf *q; + int i; + ptr = p->payload; + uip_len = p->len; + for (i=0;ilen;i++) uip_buf[i] = ptr[i]; + uip_arp_arpin(); //update arp table uip_arp_arpin + if (uip_len) + { + if (( pdata =(u8_t*)rt_malloc(1500*sizeof(u8_t))) ==RT_NULL) + { + pbuf_free(p); + return; + } + for (i=0; i < (UIP_LLH_LEN + 40); ++i) + { + pdata[i] = uip_buf[i]; + } + for (; i < uip_len; ++i) + { + pdata[i] = uip_appdata[i - UIP_LLH_LEN - 40 ]; + } + //q = p; + p ->payload = pdata; + p->len = uip_len; + netif->linkoutput(netif,p); + rt_free(pdata); + pbuf_free(p); + // pbuf_free(q); + return ; + + // return 0; //ERR_OK + } + pbuf_free(p); +} \ No newline at end of file diff --git a/components/net/uip/rt-thread/uip_etharp.h b/components/net/uip/rt-thread/uip_etharp.h new file mode 100644 index 0000000000..bf8ff1f726 --- /dev/null +++ b/components/net/uip/rt-thread/uip_etharp.h @@ -0,0 +1,15 @@ +#include "uip_pbuf.h" +#include "uip-conf.h" +#include "rtdef.h" + + +struct eth_hdr { + u8_t ip_addrdest[6]; + u8_t ip_addrsrc[6]; + u16_t type; +} ; +#define ETHTYPE_ARP UIP_ETHTYPE_ARP +#define ETHTYPE_IP UIP_ETHTYPE_IP +#define ETHTYPE_VLAN 0x8100 +#define ETHTYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */ +#define ETHTYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */ diff --git a/components/net/uip/rt-thread/uip_ethernetif.c b/components/net/uip/rt-thread/uip_ethernetif.c new file mode 100644 index 0000000000..aaa25150a0 --- /dev/null +++ b/components/net/uip/rt-thread/uip_ethernetif.c @@ -0,0 +1,313 @@ +/* + * File : ethernetif.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2010, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2010-07-07 Bernard fix ethernetif_linkoutput send mail issue. + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include +#include "uip.h" +#include "uip_arp.h" +#include "uip_netif.h" +#include "uip_ethernetif.h" +#include "uip_ipaddr.h" + +#ifndef NULL +#define NULL (void *)0 +#endif /* NULL */ + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) +extern u16_t uip_len, uip_slen; + +/* eth rx/tx thread */ +static struct rt_mailbox eth_rx_thread_mb; +static struct rt_thread eth_rx_thread; +#ifndef RT_LWIP_ETHTHREAD_PRIORITY +#define RT_ETHERNETIF_THREAD_PREORITY 0x90 +static char eth_rx_thread_mb_pool[48 * 4]; +static char eth_rx_thread_stack[1024]; +#else +#define RT_ETHERNETIF_THREAD_PREORITY RT_LWIP_ETHTHREAD_PRIORITY +static char eth_rx_thread_mb_pool[RT_LWIP_ETHTHREAD_MBOX_SIZE * 4]; +static char eth_rx_thread_stack[RT_LWIP_ETHTHREAD_STACKSIZE]; +#endif + +struct eth_tx_msg +{ + struct netif *netif; + struct pbuf *buf; +}; +static struct rt_mailbox eth_tx_thread_mb; +static struct rt_thread eth_tx_thread; +#ifndef RT_LWIP_ETHTHREAD_PRIORITY +static char eth_tx_thread_mb_pool[32 * 4]; +static char eth_tx_thread_stack[512]; +#else +static char eth_tx_thread_mb_pool[RT_LWIP_ETHTHREAD_MBOX_SIZE * 4]; +static char eth_tx_thread_stack[RT_LWIP_ETHTHREAD_STACKSIZE]; +#endif + +/* the interface provided to uIP */ +err_t eth_init(struct netif *netif) +{ + return 0; +} +extern err_t ethernetif_linkoutput(struct netif *netif, struct pbuf *p); + +err_t eth_input(struct pbuf *p,struct netif *inp) +{ + + struct eth_hdr *ethhdr; + + if(p != RT_NULL) + { +#ifdef LINK_STATS + //LINK_STATS_INC(link.recv); +#endif LINK_STATS + + ethhdr = p->payload; + + switch(uip_htons(ethhdr->type)) + { + case ETHTYPE_IP: //ETHTYPE_IP + etharp_ip_input(inp, p); + pbuf_header(p, -((rt_int16_t)sizeof(struct eth_hdr))); + if (tcpip_input(p, inp) != ERR_OK) + { + // discard packet + pbuf_free(p); + } + break; + + case ETHTYPE_ARP: + etharp_arp_input(inp, (struct eth_addr *)inp->hwaddr, p); + break; + + default: + pbuf_free(p); + p = RT_NULL; + break; + } + } + return ERR_OK; +} + +err_t ethernetif_output(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr) +{ + return etharp_output(netif, p, ipaddr); +} + +err_t ethernetif_linkoutput(struct netif *netif, struct pbuf *p) +{ + struct eth_tx_msg msg; + struct eth_device* enetif; + + enetif = (struct eth_device*)netif->state; + + /* send a message to eth tx thread */ + msg.netif = netif; + msg.buf = p; + if (rt_mb_send(ð_tx_thread_mb, (rt_uint32_t) &msg) == RT_EOK) + { + /* waiting for ack */ + rt_sem_take(&(enetif->tx_ack), RT_WAITING_FOREVER); + } + + return ERR_OK; +} +/* ethernetif APIs */ +rt_err_t eth_device_init(struct eth_device* dev, const char* name) +{ + struct netif* netif; + uip_ipaddr_t ipaddr; + netif = (struct netif*) rt_malloc (sizeof(struct netif)); + if (netif == RT_NULL) + { + rt_kprintf("malloc netif failed\n"); + return -RT_ERROR; + } + rt_memset(netif, 0, sizeof(struct netif)); + + /* set netif */ + dev->netif = netif; + /* register to rt-thread device manager */ + rt_device_register(&(dev->parent), name, RT_DEVICE_FLAG_RDWR); + dev->parent.type = RT_Device_Class_NetIf; + rt_sem_init(&(dev->tx_ack), name, 0, RT_IPC_FLAG_FIFO); + + /* set name */ + netif->name[0] = name[0]; + netif->name[1] = name[1]; + + /* set hw address to 6 */ + netif->hwaddr_len = 6; + /* maximum transfer unit */ + netif->mtu = ETHERNET_MTU; + /* broadcast capability */ + netif->flags = NETIF_FLAG_BROADCAST; + +#if LWIP_IGMP + /* igmp support */ + netif->flags |= NETIF_FLAG_IGMP; +#endif + + /* get hardware address */ + rt_device_control(&(dev->parent), NIOCTL_GADDR, netif->hwaddr); + + /* set output */ + netif->output = ethernetif_output; + netif->linkoutput = ethernetif_linkoutput; + + /* add netif to lwip */ + + if (netif_add(netif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY, dev, + eth_init, eth_input) == RT_NULL) + { + /* failed, unregister device and free netif */ + rt_device_unregister(&(dev->parent)); + rt_free(netif); + return -RT_ERROR; + } + + netif_set_default(netif); + return RT_EOK; +} + +/* ethernet buffer */ +void eth_tx_thread_entry(void* parameter) +{ + struct eth_tx_msg* msg; + + while (1) + { + if (rt_mb_recv(ð_tx_thread_mb, (rt_uint32_t*)&msg, RT_WAITING_FOREVER) == RT_EOK) + { + struct eth_device* enetif; + + RT_ASSERT(msg->netif != RT_NULL); + RT_ASSERT(msg->buf != RT_NULL); + + enetif = (struct eth_device*)msg->netif->state; + if (enetif != RT_NULL) + { + /* call driver's interface */ + if (enetif->eth_tx(&(enetif->parent), msg->buf) != RT_EOK) + { + rt_kprintf("transmit eth packet failed\n"); + } + } + + /* send ack */ + rt_sem_release(&(enetif->tx_ack)); + } + } +} + +/* ethernet buffer */ +void eth_rx_thread_entry(void* parameter) +{ + struct eth_device* device; + + while (1) + { + if (rt_mb_recv(ð_rx_thread_mb, (rt_uint32_t*)&device, RT_WAITING_FOREVER) == RT_EOK) + { + struct pbuf *p; + + /* receive all of buffer */ + while (1) + { + p = device->eth_rx(&(device->parent)); + if (p != RT_NULL) + { + /* notify to upper layer */ + eth_input(p, device->netif); + } + else break; + } + } + } +} + +rt_err_t eth_device_ready(struct eth_device* dev) +{ + /* post message to ethernet thread */ + return rt_mb_send(ð_rx_thread_mb, (rt_uint32_t)dev); +} + +rt_err_t eth_system_device_init() +{ + rt_err_t result = RT_EOK; + + /* init rx thread */ + /* init mailbox and create ethernet thread */ + result = rt_mb_init(ð_rx_thread_mb, "erxmb", + ð_rx_thread_mb_pool[0], sizeof(eth_rx_thread_mb_pool)/4, + RT_IPC_FLAG_FIFO); + RT_ASSERT(result == RT_EOK); + + result = rt_thread_init(ð_rx_thread, "erx", eth_rx_thread_entry, RT_NULL, + ð_rx_thread_stack[0], sizeof(eth_rx_thread_stack), + RT_ETHERNETIF_THREAD_PREORITY, 16); + RT_ASSERT(result == RT_EOK); + + result = rt_thread_startup(ð_rx_thread); + RT_ASSERT(result == RT_EOK); + + /* init tx thread */ + /* init mailbox and create ethernet thread */ + + result = rt_mb_init(ð_tx_thread_mb, "etxmb", + ð_tx_thread_mb_pool[0], sizeof(eth_tx_thread_mb_pool)/4, + RT_IPC_FLAG_FIFO); + RT_ASSERT(result == RT_EOK); + + result = rt_thread_init(ð_tx_thread, "etx", eth_tx_thread_entry, RT_NULL, + ð_tx_thread_stack[0], sizeof(eth_tx_thread_stack), + RT_ETHERNETIF_THREAD_PREORITY, 16); + RT_ASSERT(result == RT_EOK); + + result = rt_thread_startup(ð_tx_thread); + RT_ASSERT(result == RT_EOK); + + return result; +} diff --git a/components/net/uip/rt-thread/uip_ethernetif.h b/components/net/uip/rt-thread/uip_ethernetif.h new file mode 100644 index 0000000000..612d053008 --- /dev/null +++ b/components/net/uip/rt-thread/uip_ethernetif.h @@ -0,0 +1,31 @@ +#ifndef __NETIF_ETHERNETIF_H__ +#define __NETIF_ETHERNETIF_H__ + +//#include "lwip/netif.h" +#include "uip_netif.h" +#include + +#define NIOCTL_GADDR 0x01 +#define ETHERNET_MTU 1500 + +struct eth_device +{ + /* inherit from rt_device */ + struct rt_device parent; + + struct eth_addr *ethaddr; + struct netif *netif; + struct rt_semaphore tx_ack; + + /* eth device interface */ + struct pbuf* (*eth_rx)(rt_device_t dev); + rt_err_t (*eth_tx)(rt_device_t dev, struct pbuf* p); +}; + +rt_err_t eth_device_ready(struct eth_device* dev); + +rt_err_t eth_device_init(struct eth_device* dev, const char* name); + +rt_err_t eth_system_device_init(void); + +#endif /* __NETIF_ETHERNETIF_H__ */ diff --git a/components/net/uip/rt-thread/uip_ipaddr.h b/components/net/uip/rt-thread/uip_ipaddr.h new file mode 100644 index 0000000000..8f9e99b34a --- /dev/null +++ b/components/net/uip/rt-thread/uip_ipaddr.h @@ -0,0 +1,20 @@ + +#include "rtdef.h" + + + + + + +/* ethernetif APIs */ +#define IP_ADDR_ANY_VALUE 0x00000000UL +#define IP_ADDR_BROADCAST_VALUE 0xffffffffUL + +//extern const struct ip_addr ip_addr_any; +//extern const struct ip_addr ip_addr_broadcast; + +/** IP_ADDR_ can be used as a fixed IP address + * for the wildcard and the broadcast address + */ +#define IP_ADDR_ANY ((struct ip_addr *)0) +#define IP_ADDR_BROADCAST ((struct ip_addr *)0) \ No newline at end of file diff --git a/components/net/uip/rt-thread/uip_netif.c b/components/net/uip/rt-thread/uip_netif.c new file mode 100644 index 0000000000..cd70ba31ab --- /dev/null +++ b/components/net/uip/rt-thread/uip_netif.c @@ -0,0 +1,53 @@ +#include "rtdef.h" +#include "uip-conf.h" +#include "uip.h" +#include "uip_netif.h" +#include "uip_arp.h" +#include "rtconfig.h" +#include "uip_pbuf.h" + +void netif_set_default(struct netif *netif) +{ + +} +void netif_set_addr(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw) +{ + uip_ipaddr_t hipaddr; + uip_ipaddr(hipaddr, RT_LWIP_IPADDR0,RT_LWIP_IPADDR1,RT_LWIP_IPADDR2,RT_LWIP_IPADDR3); + uip_sethostaddr(hipaddr); + uip_ipaddr(hipaddr, RT_LWIP_GWADDR0,RT_LWIP_GWADDR1,RT_LWIP_GWADDR2,RT_LWIP_GWADDR3); + uip_setdraddr(hipaddr); + uip_ipaddr(hipaddr, RT_LWIP_MSKADDR0,RT_LWIP_MSKADDR1,RT_LWIP_MSKADDR2,RT_LWIP_MSKADDR3); + uip_setnetmask(hipaddr); + return ; +} + +struct netif * +netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)) +{ + //if (netif_add(netif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY, dev, + //eth_init, eth_input) == RT_NULL) + // netif->uip_hostaddr = ipaddr; + //netif->uip_draddr = netmask; + // netif->uip_netmask = gw; + // netif_set_addr(netif,ipaddr,netmask,gw); + + // call user specified initialization function for netif + if (init(netif) != 0) { + return RT_NULL; + } + netif->input = input; + netif->state = state; + netif_set_addr(netif,ipaddr,netmask,gw); + return netif; + +} +err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr) +{ + return 0; +} diff --git a/components/net/uip/rt-thread/uip_netif.h b/components/net/uip/rt-thread/uip_netif.h new file mode 100644 index 0000000000..5cef2bb7ad --- /dev/null +++ b/components/net/uip/rt-thread/uip_netif.h @@ -0,0 +1,269 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_NETIF_H__ +#define __LWIP_NETIF_H__ + +//#include "lwip/opt.h" + +#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) + +#include "lwip/err.h" + +#include "uip_ipaddr.h" + +//#include "lwip/inet.h" +//#include "lwip/pbuf.h" +#include "uip_pbuf.h" +#include "uip-conf.h" + +#if LWIP_DHCP +struct dhcp; +#endif +#if LWIP_AUTOIP +struct autoip; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses are expected to be in + * the same byte order as in IP_PCB. */ + +/** must be the maximum of all used hardware address lengths + across all types of interfaces in use */ +#define NETIF_MAX_HWADDR_LEN 6U + +/** TODO: define the use (where, when, whom) of netif flags */ + +/** whether the network interface is 'up'. this is + * a software flag used to control whether this network + * interface is enabled and processes traffic. + */ +#define NETIF_FLAG_UP 0x01U +/** if set, the netif has broadcast capability */ +#define NETIF_FLAG_BROADCAST 0x02U +/** if set, the netif is one end of a point-to-point connection */ +#define NETIF_FLAG_POINTTOPOINT 0x04U +/** if set, the interface is configured using DHCP */ +#define NETIF_FLAG_DHCP 0x08U +/** if set, the interface has an active link + * (set by the network interface driver) */ +#define NETIF_FLAG_LINK_UP 0x10U +/** if set, the netif is an device using ARP */ +#define NETIF_FLAG_ETHARP 0x20U +/** if set, the netif has IGMP capability */ +#define NETIF_FLAG_IGMP 0x40U + +/** Generic data structure used for all lwIP network interfaces. + * The following fields should be filled in by the initialization + * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ +struct ip_addr { + rt_uint16_t uip_ip4addr_t[2]; +} ; + +struct netif { + /** pointer to next in linked list */ + struct netif *next; + + /** IP address configuration in network byte order */ + struct ip_addr ip_addr; + struct ip_addr netmask; + struct ip_addr gw; + + /** This function is called by the network device driver + * to pass a packet up the TCP/IP stack. */ + err_t (* input)(struct pbuf *p, struct netif *inp); + /** This function is called by the IP module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. */ + err_t (* output)(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr); + /** This function is called by the ARP module when it wants + * to send a packet on the interface. This function outputs + * the pbuf as-is on the link medium. */ + err_t (* linkoutput)(struct netif *netif, struct pbuf *p); +#if LWIP_NETIF_STATUS_CALLBACK + /** This function is called when the netif state is set to up or down + */ + void (* status_callback)(struct netif *netif); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + /** This function is called when the netif link is set to up or down + */ + void (* link_callback)(struct netif *netif); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + /** This field can be set by the device driver and could point + * to state information for the device. */ + void *state; +#if LWIP_DHCP + /** the DHCP client state information for this netif */ + struct dhcp *dhcp; +#endif /* LWIP_DHCP */ +#if LWIP_AUTOIP + /** the AutoIP client state information for this netif */ + struct autoip *autoip; +#endif +#if LWIP_NETIF_HOSTNAME + /* the hostname for this netif, NULL is a valid value */ + char* hostname; +#endif /* LWIP_NETIF_HOSTNAME */ + /** maximum transfer unit (in bytes) */ + u16_t mtu; + /** number of bytes used in hwaddr */ + u8_t hwaddr_len; + /** link level hardware address of this interface */ + u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; + /** flags (see NETIF_FLAG_ above) */ + u8_t flags; + /** descriptive abbreviation */ + char name[2]; + /** number of this interface */ + u8_t num; +#if LWIP_SNMP + /** link type (from "snmp_ifType" enum from snmp.h) */ + u8_t link_type; + /** (estimate) link speed */ + u32_t link_speed; + /** timestamp at last change made (up/down) */ + u32_t ts; + /** counters */ + u32_t ifinoctets; + u32_t ifinucastpkts; + u32_t ifinnucastpkts; + u32_t ifindiscards; + u32_t ifoutoctets; + u32_t ifoutucastpkts; + u32_t ifoutnucastpkts; + u32_t ifoutdiscards; +#endif /* LWIP_SNMP */ +#if LWIP_IGMP + /* This function could be called to add or delete a entry in the multicast filter table of the ethernet MAC.*/ + err_t (*igmp_mac_filter)( struct netif *netif, struct ip_addr *group, u8_t action); +#endif /* LWIP_IGMP */ +#if LWIP_NETIF_HWADDRHINT + u8_t *addr_hint; +#endif /* LWIP_NETIF_HWADDRHINT */ +#if ENABLE_LOOPBACK + /* List of packets to be queued for ourselves. */ + struct pbuf *loop_first; + struct pbuf *loop_last; +#if LWIP_LOOPBACK_MAX_PBUFS + u16_t loop_cnt_current; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ +#endif /* ENABLE_LOOPBACK */ +}; + +#if LWIP_SNMP +#define NETIF_INIT_SNMP(netif, type, speed) \ + /* use "snmp_ifType" enum from snmp.h for "type", snmp_ifType_ethernet_csmacd by example */ \ + netif->link_type = type; \ + /* your link speed here (units: bits per second) */ \ + netif->link_speed = speed; \ + netif->ts = 0; \ + netif->ifinoctets = 0; \ + netif->ifinucastpkts = 0; \ + netif->ifinnucastpkts = 0; \ + netif->ifindiscards = 0; \ + netif->ifoutoctets = 0; \ + netif->ifoutucastpkts = 0; \ + netif->ifoutnucastpkts = 0; \ + netif->ifoutdiscards = 0 +#else /* LWIP_SNMP */ +#define NETIF_INIT_SNMP(netif, type, speed) +#endif /* LWIP_SNMP */ + + +/** The list of network interfaces. */ +extern struct netif *netif_list; +/** The default network interface. */ +extern struct netif *netif_default; + +#define netif_init() /* Compatibility define, not init needed. */ + +struct netif *netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)); + +void +netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw); +void netif_remove(struct netif * netif); + +/* Returns a network interface given its name. The name is of the form + "et0", where the first two letters are the "name" field in the + netif structure, and the digit is in the num field in the same + structure. */ +struct netif *netif_find(char *name); + +void netif_set_default(struct netif *netif); + +void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr); +void netif_set_netmask(struct netif *netif, struct ip_addr *netmask); +void netif_set_gw(struct netif *netif, struct ip_addr *gw); + +void netif_set_up(struct netif *netif); +void netif_set_down(struct netif *netif); +u8_t netif_is_up(struct netif *netif); + +#if LWIP_NETIF_STATUS_CALLBACK +/* + * Set callback to be called when interface is brought up/down + */ +void netif_set_status_callback(struct netif *netif, void (* status_callback)(struct netif *netif)); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +void netif_set_link_up(struct netif *netif); +void netif_set_link_down(struct netif *netif); +u8_t netif_is_link_up(struct netif *netif); +/* + * Set callback to be called when link is brought up/down + */ +void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif)); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#ifdef __cplusplus +} +#endif + +#if ENABLE_LOOPBACK +err_t netif_loop_output(struct netif *netif, struct pbuf *p, struct ip_addr *dest_ip); +void netif_poll(struct netif *netif); +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +void netif_poll_all(void); +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#endif /* __LWIP_NETIF_H__ */ diff --git a/components/net/uip/rt-thread/uip_pbuf.c b/components/net/uip/rt-thread/uip_pbuf.c new file mode 100644 index 0000000000..69ff3b5a6d --- /dev/null +++ b/components/net/uip/rt-thread/uip_pbuf.c @@ -0,0 +1,50 @@ +#include "uip_pbuf.h" +#include "rtdef.h" + +typedef rt_uint32_t mem_ptr_t; +#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + RT_ALIGN_SIZE - 1) & ~(mem_ptr_t)(RT_ALIGN_SIZE-1))) +#define LWIP_MEM_ALIGN_SIZE(size) (((size) + RT_ALIGN_SIZE - 1) & ~(RT_ALIGN_SIZE-1)) +#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + +u8_t +pbuf_free(struct pbuf *p) +{ + + //struct pbuf *q; + + if (p == RT_NULL) return 0; + rt_free(p); + //rt_free(&p->len); + + return 1; +} + +struct pbuf * +pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) +{ + struct pbuf *p; + u16_t offset = 0; + offset += 16; + + /* If pbuf is to be allocated in RAM, allocate memory for it. */ + p = (struct pbuf*)rt_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length)); + if (p == RT_NULL) return RT_NULL; + /* Set up internal structure of the pbuf. */ + p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)); + p->len = length; + return p; +} + +u8_t +pbuf_header(struct pbuf *p, s16_t header_size_increment) // +{ + //extrat link header + uint8_t *ptr; + + ptr = p->payload; + ptr -= header_size_increment; + p->payload = ptr; + p->len += header_size_increment; + + return 0; +} \ No newline at end of file diff --git a/components/net/uip/rt-thread/uip_pbuf.h b/components/net/uip/rt-thread/uip_pbuf.h new file mode 100644 index 0000000000..284dec87fc --- /dev/null +++ b/components/net/uip/rt-thread/uip_pbuf.h @@ -0,0 +1,87 @@ + +#ifndef __UIP_PBUF_H__ +#define __UIP_PBUF_H__ + +//#include "lwip/opt.h" +//#include "lwip/err.h" +#include "uip-conf.h" +#include "uip_etharp.h" + +typedef rt_int16_t s16_t; +typedef rt_int8_t err_t; +#ifdef __cplusplus +extern "C" { +#endif + +#define PBUF_TRANSPORT_HLEN 20 +#define PBUF_IP_HLEN 20 + +typedef enum { + PBUF_TRANSPORT, + PBUF_IP, + PBUF_LINK, + PBUF_RAW +} pbuf_layer; + +typedef enum { + PBUF_RAM, /* pbuf data is stored in RAM */ + PBUF_ROM, /* pbuf data is stored in ROM */ + PBUF_REF, /* pbuf comes from the pbuf pool */ + PBUF_POOL /* pbuf payload refers to RAM */ +} pbuf_type; + + +/** indicates this packet's data should be immediately passed to the application */ +#define PBUF_FLAG_PUSH 0x01U +#ifdef RT_USING_LWIP +struct pbuf { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + void *payload; + + /** + * total length of this buffer and all next buffers in chain + * belonging to the same packet. + * + * For non-queue packet chains this is the invariant: + * p->tot_len == p->len + (p->next? p->next->tot_len: 0) + */ + u16_t tot_len; + + /** length of this buffer */ + u16_t len; + + /** pbuf_type as u8_t instead of enum to save space */ + u8_t /*pbuf_type*/ type; + + /** misc flags */ + u8_t flags; + + /** + * the reference count always equals the number of pointers + * that refer to this pbuf. This can be pointers from an application, + * the stack itself, or pbuf->next pointers from a chain. + */ + u16_t ref; + +}; +#else /* RT_USING_UIP */ +struct pbuf +{ + /** pointer to the actual data in the buffer */ + void *payload; + rt_uint16_t len; +}; +#endif +/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ + + +struct pbuf *pbuf_alloc(pbuf_layer l, u16_t size, pbuf_type type); + +u8_t pbuf_header(struct pbuf *p, s16_t header_size); + +u8_t pbuf_free(struct pbuf *p); + +#endif /* __UIP_PBUF_H__ */ diff --git a/components/net/uip/rt-thread/uip_tcpip.c b/components/net/uip/rt-thread/uip_tcpip.c new file mode 100644 index 0000000000..4cedb05864 --- /dev/null +++ b/components/net/uip/rt-thread/uip_tcpip.c @@ -0,0 +1,41 @@ +#include "uip_pbuf.h" +#include "uip-conf.h" +#include "rtdef.h" +#include "uip.h" +#include "uip_arp.h" +#include "uip_netif.h" + +err_t +tcpip_input(struct pbuf *p, struct netif *inp) +{ + int i; + u8_t *pdata; + if (uip_len) + { + uip_arp_out(); + if (( pdata =(u8_t*)rt_malloc(1500*sizeof(u8_t))) == RT_NULL) + { + pbuf_free(p); + return 1; + } + for (i=0; i < (UIP_LLH_LEN + 40); ++i) // 14+40 =54 + { + pdata[i] = uip_buf[i]; /* get dest an src ipaddr */ + } + // Copy the data portion part + for(; i < uip_len; ++i) + { + pdata[i] = uip_appdata[i - UIP_LLH_LEN - 40 ]; + } + p ->payload = pdata; + p->len = uip_len; + inp->linkoutput(inp,p); + rt_free(pdata); + return 1; + } + else + { + pbuf_free(p); + return 0; + } +} \ No newline at end of file diff --git a/components/net/uip/uip-1.0-changelog.txt b/components/net/uip/uip-1.0-changelog.txt new file mode 100644 index 0000000000..1e6c61cf80 --- /dev/null +++ b/components/net/uip/uip-1.0-changelog.txt @@ -0,0 +1,98 @@ +* A new API: protosockets that are similar to BSD sockets but does not + require any underlying multithreading system. + +* Very rudimentary IPv6 support + +* New application: DHCP client. Web server rewritten with protosockets. + +* Removed uIP zero-copy functionality in order to simplify uIP device + driver coding: outbound packets are now *always* stored in full in + the uip_buf buffer. + +* Checksum computation is now part of uip.c, but it still is possible + to implement them in assembly code by specifying a configuration + option. Checksum code now runs on architectures with 2-byte alignment. + +* Added TCP persistent timer. + +* Made all IP address representations use the new uip_ipaddr_ip + datatype for clarity. + +* Updated window behavior so that sending to a host with a small open + window works better now. + +* UDP API change: uip_udp_new() now takes port numbers in network byte + order like TCP functions. + +* Allow reception of packets when no IP address is configured to make + DHCP work. + +* Moved Ethernet address into main uIP module from ARP module. + +* Made constants explicit #defines and moved them out of the code + (header sizes, TCP options, TCP header length field). + +* If uip_len is less than that reported by the IP header, the packet + is discarded. If uip_len is greater than the length reported by the + IP header, uip_len is adjusted. + +* Moved header size definitions into header file. + +* Added uIP call for polling an application without triggering any + timer events. Removed redundant assignments of uip_len and uip_slen. + +* Removed compiler warning about icmp_input label being defined when + UIP_PINGADDRCONF was not used. + +* Added UIP_APPDATA_SIZE macro that holds the available buffer size + for user data. + +* Added uip_udp_bind() call. + +* Moved checksum code into main uIP module. + +* Switched the TCP, UDP and IP header structures to be structs rather + than typedefs. + +* Prefixed TCP state names with UIP_ to avoid name space + contamination. + +* Changed declarations of uip_appdatap and friends to void * to avoid + explicit typecasts. + +* Bugfixes + + o TCP: Fixed bug with high byte of peer window size. + + o TCP: Fixed bug that in some cases prevented concurrent reception and + transmission of TCP data. + + o TCP: uip_connect() didn't correctly calculate age of TIME_WAIT + connections. + + o TCP: Array index for uip_conns[] array was out of bounds in + comparison. Comparison changed to make index within bounds. + + o TCP: if the remote host crashes and tries to reestablish an old + connection, uIP should respond with an ACK with the correct + sequence and acknowledgment numbers, to which the remote host + should respond with an ACK. uIP did not respond with the correct + ACK. + + o TCP: Fixed check for SYNACK segment: now checks only relevant TCP + control flags and discards flags reserved for future expansion. + + o TCP: Fixed bug where uIP did not inform application that a connection + had been aborted during an active open. + + o TCP: FIN segment was accepted even though application had stopped + incoming data with uip_stop(). + + o TCP: A FINACK segment would not always correctly acknowledge data. + + o UDP: checksums are now calculated after all fields have been + filled in. + + o UDP: network byte order on lastport in uip_udp_new(). + + o IP: memset() bugs in IP fragment reassembly code fixed. diff --git a/components/net/uip/uip/Makefile.include b/components/net/uip/uip/Makefile.include new file mode 100644 index 0000000000..b4d8a94cf5 --- /dev/null +++ b/components/net/uip/uip/Makefile.include @@ -0,0 +1,47 @@ + + +ifdef APPS + APPDIRS = $(foreach APP, $(APPS), ../apps/$(APP)) + -include $(foreach APP, $(APPS), ../apps/$(APP)/Makefile.$(APP)) + CFLAGS += $(addprefix -I../apps/,$(APPS)) +endif + +ifndef CCDEP + CCDEP = $(CC) +endif +ifndef CCDEPCFLAGS + CCDEPCFLAGS = $(CFLAGS) +endif +ifndef OBJECTDIR + OBJECTDIR = obj +endif + +ifeq (${wildcard $(OBJECTDIR)},) + DUMMY := ${shell mkdir $(OBJECTDIR)} +endif + + +vpath %.c . ../uip ../lib $(APPDIRS) + +$(OBJECTDIR)/%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJECTDIR)/%.d: %.c + @set -e; rm -f $@; \ + $(CCDEP) -MM $(CCDEPCFLAGS) $< > $@.$$$$; \ + sed 's,\($*\)\.o[ :]*,$(OBJECTDIR)/\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$ + +UIP_SOURCES=uip.c uip_arp.c uiplib.c psock.c timer.c uip-neighbor.c + + +ifneq ($(MAKECMDGOALS),clean) +-include $(addprefix $(OBJECTDIR)/,$(UIP_SOURCES:.c=.d) \ + $(APP_SOURCES:.c=.d)) +endif + +uip.a: ${addprefix $(OBJECTDIR)/, $(UIP_SOURCES:.c=.o)} + $(AR) rcf $@ $^ + +apps.a: ${addprefix $(OBJECTDIR)/, $(APP_SOURCES:.c=.o)} + $(AR) rcf $@ $^ diff --git a/components/net/uip/uip/lc-addrlabels.h b/components/net/uip/uip/lc-addrlabels.h new file mode 100644 index 0000000000..fe1387e5f6 --- /dev/null +++ b/components/net/uip/uip/lc-addrlabels.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2004-2005, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: lc-addrlabels.h,v 1.3 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \addtogroup lc + * @{ + */ + +/** + * \file + * Implementation of local continuations based on the "Labels as + * values" feature of gcc + * \author + * Adam Dunkels + * + * This implementation of local continuations is based on a special + * feature of the GCC C compiler called "labels as values". This + * feature allows assigning pointers with the address of the code + * corresponding to a particular C label. + * + * For more information, see the GCC documentation: + * http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html + * + * Thanks to dividuum for finding the nice local scope label + * implementation. + */ + +#ifndef __LC_ADDRLABELS_H__ +#define __LC_ADDRLABELS_H__ + +/** \hideinitializer */ +typedef void * lc_t; + +#define LC_INIT(s) s = NULL + + +#define LC_RESUME(s) \ + do { \ + if(s != NULL) { \ + goto *s; \ + } \ + } while(0) + +#define LC_SET(s) \ + do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0) + +#define LC_END(s) + +#endif /* __LC_ADDRLABELS_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/lc-switch.h b/components/net/uip/uip/lc-switch.h new file mode 100644 index 0000000000..f32885fd1e --- /dev/null +++ b/components/net/uip/uip/lc-switch.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2004-2005, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: lc-switch.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \addtogroup lc + * @{ + */ + +/** + * \file + * Implementation of local continuations based on switch() statment + * \author Adam Dunkels + * + * This implementation of local continuations uses the C switch() + * statement to resume execution of a function somewhere inside the + * function's body. The implementation is based on the fact that + * switch() statements are able to jump directly into the bodies of + * control structures such as if() or while() statmenets. + * + * This implementation borrows heavily from Simon Tatham's coroutines + * implementation in C: + * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html + */ + +#ifndef __LC_SWITCH_H__ +#define __LC_SWTICH_H__ + +/* WARNING! lc implementation using switch() does not work if an + LC_SET() is done within another switch() statement! */ + +/** \hideinitializer */ +typedef unsigned short lc_t; + +#define LC_INIT(s) s = 0; + +#define LC_RESUME(s) switch(s) { case 0: + +#define LC_SET(s) s = __LINE__; case __LINE__: + +#define LC_END(s) } + +#endif /* __LC_SWITCH_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/lc.h b/components/net/uip/uip/lc.h new file mode 100644 index 0000000000..a9e9d46983 --- /dev/null +++ b/components/net/uip/uip/lc.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2004-2005, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: lc.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \addtogroup pt + * @{ + */ + +/** + * \defgroup lc Local continuations + * @{ + * + * Local continuations form the basis for implementing protothreads. A + * local continuation can be set in a specific function to + * capture the state of the function. After a local continuation has + * been set can be resumed in order to restore the state of the + * function at the point where the local continuation was set. + * + * + */ + +/** + * \file lc.h + * Local continuations + * \author + * Adam Dunkels + * + */ + +#ifdef DOXYGEN +/** + * Initialize a local continuation. + * + * This operation initializes the local continuation, thereby + * unsetting any previously set continuation state. + * + * \hideinitializer + */ +#define LC_INIT(lc) + +/** + * Set a local continuation. + * + * The set operation saves the state of the function at the point + * where the operation is executed. As far as the set operation is + * concerned, the state of the function does not include the + * call-stack or local (automatic) variables, but only the program + * counter and such CPU registers that needs to be saved. + * + * \hideinitializer + */ +#define LC_SET(lc) + +/** + * Resume a local continuation. + * + * The resume operation resumes a previously set local continuation, thus + * restoring the state in which the function was when the local + * continuation was set. If the local continuation has not been + * previously set, the resume operation does nothing. + * + * \hideinitializer + */ +#define LC_RESUME(lc) + +/** + * Mark the end of local continuation usage. + * + * The end operation signifies that local continuations should not be + * used any more in the function. This operation is not needed for + * most implementations of local continuation, but is required by a + * few implementations. + * + * \hideinitializer + */ +#define LC_END(lc) + +/** + * \var typedef lc_t; + * + * The local continuation type. + * + * \hideinitializer + */ +#endif /* DOXYGEN */ + +#ifndef __LC_H__ +#define __LC_H__ + +#ifdef LC_CONF_INCLUDE +#include LC_CONF_INCLUDE +#else +#include "lc-switch.h" +#endif /* LC_CONF_INCLUDE */ + +#endif /* __LC_H__ */ + +/** @} */ +/** @} */ diff --git a/components/net/uip/uip/psock.c b/components/net/uip/uip/psock.c new file mode 100644 index 0000000000..9085102d30 --- /dev/null +++ b/components/net/uip/uip/psock.c @@ -0,0 +1,338 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: psock.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +#include +#include + +#include "uipopt.h" +#include "psock.h" +#include "uip.h" + +#define STATE_NONE 0 +#define STATE_ACKED 1 +#define STATE_READ 2 +#define STATE_BLOCKED_NEWDATA 3 +#define STATE_BLOCKED_CLOSE 4 +#define STATE_BLOCKED_SEND 5 +#define STATE_DATA_SENT 6 + +/* + * Return value of the buffering functions that indicates that a + * buffer was not filled by incoming data. + * + */ +#define BUF_NOT_FULL 0 +#define BUF_NOT_FOUND 0 + +/* + * Return value of the buffering functions that indicates that a + * buffer was completely filled by incoming data. + * + */ +#define BUF_FULL 1 + +/* + * Return value of the buffering functions that indicates that an + * end-marker byte was found. + * + */ +#define BUF_FOUND 2 + +/*---------------------------------------------------------------------------*/ +static void +buf_setup(struct psock_buf *buf, + u8_t *bufptr, u16_t bufsize) +{ + buf->ptr = bufptr; + buf->left = bufsize; +} +/*---------------------------------------------------------------------------*/ +static u8_t +buf_bufdata(struct psock_buf *buf, u16_t len, + u8_t **dataptr, u16_t *datalen) +{ + if(*datalen < buf->left) { + memcpy(buf->ptr, *dataptr, *datalen); + buf->ptr += *datalen; + buf->left -= *datalen; + *dataptr += *datalen; + *datalen = 0; + return BUF_NOT_FULL; + } else if(*datalen == buf->left) { + memcpy(buf->ptr, *dataptr, *datalen); + buf->ptr += *datalen; + buf->left = 0; + *dataptr += *datalen; + *datalen = 0; + return BUF_FULL; + } else { + memcpy(buf->ptr, *dataptr, buf->left); + buf->ptr += buf->left; + *datalen -= buf->left; + *dataptr += buf->left; + buf->left = 0; + return BUF_FULL; + } +} +/*---------------------------------------------------------------------------*/ +static u8_t +buf_bufto(register struct psock_buf *buf, u8_t endmarker, + register u8_t **dataptr, register u16_t *datalen) +{ + u8_t c; + while(buf->left > 0 && *datalen > 0) { + c = *buf->ptr = **dataptr; + ++*dataptr; + ++buf->ptr; + --*datalen; + --buf->left; + + if(c == endmarker) { + return BUF_FOUND; + } + } + + if(*datalen == 0) { + return BUF_NOT_FOUND; + } + + while(*datalen > 0) { + c = **dataptr; + --*datalen; + ++*dataptr; + + if(c == endmarker) { + return BUF_FOUND | BUF_FULL; + } + } + + return BUF_FULL; +} +/*---------------------------------------------------------------------------*/ +static char +send_data(register struct psock *s) +{ + if(s->state != STATE_DATA_SENT || uip_rexmit()) { + if(s->sendlen > uip_mss()) { + uip_send(s->sendptr, uip_mss()); + } else { + uip_send(s->sendptr, s->sendlen); + } + s->state = STATE_DATA_SENT; + return 1; + } + return 0; +} +/*---------------------------------------------------------------------------*/ +static char +data_acked(register struct psock *s) +{ + if(s->state == STATE_DATA_SENT && uip_acked()) { + if(s->sendlen > uip_mss()) { + s->sendlen -= uip_mss(); + s->sendptr += uip_mss(); + } else { + s->sendptr += s->sendlen; + s->sendlen = 0; + } + s->state = STATE_ACKED; + return 1; + } + return 0; +} +/*---------------------------------------------------------------------------*/ +PT_THREAD(psock_send(register struct psock *s, const char *buf, + unsigned int len)) +{ + PT_BEGIN(&s->psockpt); + + /* If there is no data to send, we exit immediately. */ + if(len == 0) { + PT_EXIT(&s->psockpt); + } + + /* Save the length of and a pointer to the data that is to be + sent. */ + s->sendptr = buf; + s->sendlen = len; + + s->state = STATE_NONE; + + /* We loop here until all data is sent. The s->sendlen variable is + updated by the data_sent() function. */ + while(s->sendlen > 0) { + + /* + * The condition for this PT_WAIT_UNTIL is a little tricky: the + * protothread will wait here until all data has been acknowledged + * (data_acked() returns true) and until all data has been sent + * (send_data() returns true). The two functions data_acked() and + * send_data() must be called in succession to ensure that all + * data is sent. Therefore the & operator is used instead of the + * && operator, which would cause only the data_acked() function + * to be called when it returns false. + */ + PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s)); + } + + s->state = STATE_NONE; + + PT_END(&s->psockpt); +} +/*---------------------------------------------------------------------------*/ +PT_THREAD(psock_generator_send(register struct psock *s, + unsigned short (*generate)(void *), void *arg)) +{ + PT_BEGIN(&s->psockpt); + + /* Ensure that there is a generator function to call. */ + if(generate == NULL) { + PT_EXIT(&s->psockpt); + } + + /* Call the generator function to generate the data in the + uip_appdata buffer. */ + s->sendlen = generate(arg); + s->sendptr =(const u8_t*) uip_appdata; + + s->state = STATE_NONE; + do { + /* Call the generator function again if we are called to perform a + retransmission. */ + if(uip_rexmit()) { + generate(arg); + } + /* Wait until all data is sent and acknowledged. */ + PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s)); + } while(s->sendlen > 0); + + s->state = STATE_NONE; + + PT_END(&s->psockpt); +} +/*---------------------------------------------------------------------------*/ +u16_t +psock_datalen(struct psock *psock) +{ + return psock->bufsize - psock->buf.left; +} +/*---------------------------------------------------------------------------*/ +char +psock_newdata(struct psock *s) +{ + if(s->readlen > 0) { + /* There is data in the uip_appdata buffer that has not yet been + read with the PSOCK_READ functions. */ + return 1; + } else if(s->state == STATE_READ) { + /* All data in uip_appdata buffer already consumed. */ + s->state = STATE_BLOCKED_NEWDATA; + return 0; + } else if(uip_newdata()) { + /* There is new data that has not been consumed. */ + return 1; + } else { + /* There is no new data. */ + return 0; + } +} +/*---------------------------------------------------------------------------*/ +PT_THREAD(psock_readto(register struct psock *psock, unsigned char c)) +{ + PT_BEGIN(&psock->psockpt); + + buf_setup(&psock->buf, psock->bufptr, psock->bufsize); + + /* XXX: Should add buf_checkmarker() before do{} loop, if + incoming data has been handled while waiting for a write. */ + + do { + if(psock->readlen == 0) { + PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock)); + psock->state = STATE_READ; + psock->readptr = (u8_t *)uip_appdata; + psock->readlen = uip_datalen(); + } + } while((buf_bufto(&psock->buf, c, + &psock->readptr, + &psock->readlen) & BUF_FOUND) == 0); + + if(psock_datalen(psock) == 0) { + psock->state = STATE_NONE; + PT_RESTART(&psock->psockpt); + } + PT_END(&psock->psockpt); +} +/*---------------------------------------------------------------------------*/ +PT_THREAD(psock_readbuf(register struct psock *psock)) +{ + PT_BEGIN(&psock->psockpt); + + buf_setup(&psock->buf, psock->bufptr, psock->bufsize); + + /* XXX: Should add buf_checkmarker() before do{} loop, if + incoming data has been handled while waiting for a write. */ + + do { + if(psock->readlen == 0) { + PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock)); + printf("Waited for newdata\n"); + psock->state = STATE_READ; + psock->readptr = (u8_t *)uip_appdata; + psock->readlen = uip_datalen(); + } + } while(buf_bufdata(&psock->buf, psock->bufsize, + &psock->readptr, + &psock->readlen) != BUF_FULL); + + if(psock_datalen(psock) == 0) { + psock->state = STATE_NONE; + PT_RESTART(&psock->psockpt); + } + PT_END(&psock->psockpt); +} +/*---------------------------------------------------------------------------*/ +void +psock_init(register struct psock *psock, char *buffer, unsigned int buffersize) +{ + psock->state = STATE_NONE; + psock->readlen = 0; + psock->bufptr = buffer; + psock->bufsize = buffersize; + buf_setup(&psock->buf, buffer, buffersize); + PT_INIT(&psock->pt); + PT_INIT(&psock->psockpt); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/psock.h b/components/net/uip/uip/psock.h new file mode 100644 index 0000000000..3dffa73586 --- /dev/null +++ b/components/net/uip/uip/psock.h @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: psock.h,v 1.3 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \defgroup psock Protosockets library + * @{ + * + * The protosocket library provides an interface to the uIP stack that is + * similar to the traditional BSD socket interface. Unlike programs + * written for the ordinary uIP event-driven interface, programs + * written with the protosocket library are executed in a sequential + * fashion and does not have to be implemented as explicit state + * machines. + * + * Protosockets only work with TCP connections. + * + * The protosocket library uses \ref pt protothreads to provide + * sequential control flow. This makes the protosockets lightweight in + * terms of memory, but also means that protosockets inherits the + * functional limitations of protothreads. Each protosocket lives only + * within a single function. Automatic variables (stack variables) are + * not retained across a protosocket library function call. + * + * \note Because the protosocket library uses protothreads, local + * variables will not always be saved across a call to a protosocket + * library function. It is therefore advised that local variables are + * used with extreme care. + * + * The protosocket library provides functions for sending data without + * having to deal with retransmissions and acknowledgements, as well + * as functions for reading data without having to deal with data + * being split across more than one TCP segment. + * + * Because each protosocket runs as a protothread, the protosocket has to be + * started with a call to PSOCK_BEGIN() at the start of the function + * in which the protosocket is used. Similarly, the protosocket protothread can + * be terminated by a call to PSOCK_EXIT(). + * + */ + +/** + * \file + * Protosocket library header file + * \author + * Adam Dunkels + * + */ + +#ifndef __PSOCK_H__ +#define __PSOCK_H__ + +#include "uipopt.h" +#include "pt.h" + + /* + * The structure that holds the state of a buffer. + * + * This structure holds the state of a uIP buffer. The structure has + * no user-visible elements, but is used through the functions + * provided by the library. + * + */ +struct psock_buf { + u8_t *ptr; + unsigned short left; +}; + +/** + * The representation of a protosocket. + * + * The protosocket structrure is an opaque structure with no user-visible + * elements. + */ +struct psock { + struct pt pt, psockpt; /* Protothreads - one that's using the psock + functions, and one that runs inside the + psock functions. */ + const u8_t *sendptr; /* Pointer to the next data to be sent. */ + u8_t *readptr; /* Pointer to the next data to be read. */ + + char *bufptr; /* Pointer to the buffer used for buffering + incoming data. */ + + u16_t sendlen; /* The number of bytes left to be sent. */ + u16_t readlen; /* The number of bytes left to be read. */ + + struct psock_buf buf; /* The structure holding the state of the + input buffer. */ + unsigned int bufsize; /* The size of the input buffer. */ + + unsigned char state; /* The state of the protosocket. */ +}; + +void psock_init(struct psock *psock, char *buffer, unsigned int buffersize); +/** + * Initialize a protosocket. + * + * This macro initializes a protosocket and must be called before the + * protosocket is used. The initialization also specifies the input buffer + * for the protosocket. + * + * \param psock (struct psock *) A pointer to the protosocket to be + * initialized + * + * \param buffer (char *) A pointer to the input buffer for the + * protosocket. + * + * \param buffersize (unsigned int) The size of the input buffer. + * + * \hideinitializer + */ +#define PSOCK_INIT(psock, buffer, buffersize) \ + psock_init(psock, buffer, buffersize) + +/** + * Start the protosocket protothread in a function. + * + * This macro starts the protothread associated with the protosocket and + * must come before other protosocket calls in the function it is used. + * + * \param psock (struct psock *) A pointer to the protosocket to be + * started. + * + * \hideinitializer + */ +#define PSOCK_BEGIN(psock) PT_BEGIN(&((psock)->pt)) + +PT_THREAD(psock_send(struct psock *psock, const char *buf, unsigned int len)); +/** + * Send data. + * + * This macro sends data over a protosocket. The protosocket protothread blocks + * until all data has been sent and is known to have been received by + * the remote end of the TCP connection. + * + * \param psock (struct psock *) A pointer to the protosocket over which + * data is to be sent. + * + * \param data (char *) A pointer to the data that is to be sent. + * + * \param datalen (unsigned int) The length of the data that is to be + * sent. + * + * \hideinitializer + */ +#define PSOCK_SEND(psock, data, datalen) \ + PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, data, datalen)) + +/** + * \brief Send a null-terminated string. + * \param psock Pointer to the protosocket. + * \param str The string to be sent. + * + * This function sends a null-terminated string over the + * protosocket. + * + * \hideinitializer + */ +#define PSOCK_SEND_STR(psock, str) \ + PT_WAIT_THREAD(&((psock)->pt), psock_send(psock, str, strlen(str))) + +PT_THREAD(psock_generator_send(struct psock *psock, + unsigned short (*f)(void *), void *arg)); + +/** + * \brief Generate data with a function and send it + * \param psock Pointer to the protosocket. + * \param generator Pointer to the generator function + * \param arg Argument to the generator function + * + * This function generates data and sends it over the + * protosocket. This can be used to dynamically generate + * data for a transmission, instead of generating the data + * in a buffer beforehand. This function reduces the need for + * buffer memory. The generator function is implemented by + * the application, and a pointer to the function is given + * as an argument with the call to PSOCK_GENERATOR_SEND(). + * + * The generator function should place the generated data + * directly in the uip_appdata buffer, and return the + * length of the generated data. The generator function is + * called by the protosocket layer when the data first is + * sent, and once for every retransmission that is needed. + * + * \hideinitializer + */ +#define PSOCK_GENERATOR_SEND(psock, generator, arg) \ + PT_WAIT_THREAD(&((psock)->pt), \ + psock_generator_send(psock, generator, arg)) + + +/** + * Close a protosocket. + * + * This macro closes a protosocket and can only be called from within the + * protothread in which the protosocket lives. + * + * \param psock (struct psock *) A pointer to the protosocket that is to + * be closed. + * + * \hideinitializer + */ +#define PSOCK_CLOSE(psock) uip_close() + +PT_THREAD(psock_readbuf(struct psock *psock)); +/** + * Read data until the buffer is full. + * + * This macro will block waiting for data and read the data into the + * input buffer specified with the call to PSOCK_INIT(). Data is read + * until the buffer is full.. + * + * \param psock (struct psock *) A pointer to the protosocket from which + * data should be read. + * + * \hideinitializer + */ +#define PSOCK_READBUF(psock) \ + PT_WAIT_THREAD(&((psock)->pt), psock_readbuf(psock)) + +PT_THREAD(psock_readto(struct psock *psock, unsigned char c)); +/** + * Read data up to a specified character. + * + * This macro will block waiting for data and read the data into the + * input buffer specified with the call to PSOCK_INIT(). Data is only + * read until the specifieed character appears in the data stream. + * + * \param psock (struct psock *) A pointer to the protosocket from which + * data should be read. + * + * \param c (char) The character at which to stop reading. + * + * \hideinitializer + */ +#define PSOCK_READTO(psock, c) \ + PT_WAIT_THREAD(&((psock)->pt), psock_readto(psock, c)) + +/** + * The length of the data that was previously read. + * + * This macro returns the length of the data that was previously read + * using PSOCK_READTO() or PSOCK_READ(). + * + * \param psock (struct psock *) A pointer to the protosocket holding the data. + * + * \hideinitializer + */ +#define PSOCK_DATALEN(psock) psock_datalen(psock) + +u16_t psock_datalen(struct psock *psock); + +/** + * Exit the protosocket's protothread. + * + * This macro terminates the protothread of the protosocket and should + * almost always be used in conjunction with PSOCK_CLOSE(). + * + * \sa PSOCK_CLOSE_EXIT() + * + * \param psock (struct psock *) A pointer to the protosocket. + * + * \hideinitializer + */ +#define PSOCK_EXIT(psock) PT_EXIT(&((psock)->pt)) + +/** + * Close a protosocket and exit the protosocket's protothread. + * + * This macro closes a protosocket and exits the protosocket's protothread. + * + * \param psock (struct psock *) A pointer to the protosocket. + * + * \hideinitializer + */ +#define PSOCK_CLOSE_EXIT(psock) \ + do { \ + PSOCK_CLOSE(psock); \ + PSOCK_EXIT(psock); \ + } while(0) + +/** + * Declare the end of a protosocket's protothread. + * + * This macro is used for declaring that the protosocket's protothread + * ends. It must always be used together with a matching PSOCK_BEGIN() + * macro. + * + * \param psock (struct psock *) A pointer to the protosocket. + * + * \hideinitializer + */ +#define PSOCK_END(psock) PT_END(&((psock)->pt)) + +char psock_newdata(struct psock *s); + +/** + * Check if new data has arrived on a protosocket. + * + * This macro is used in conjunction with the PSOCK_WAIT_UNTIL() + * macro to check if data has arrived on a protosocket. + * + * \param psock (struct psock *) A pointer to the protosocket. + * + * \hideinitializer + */ +#define PSOCK_NEWDATA(psock) psock_newdata(psock) + +/** + * Wait until a condition is true. + * + * This macro blocks the protothread until the specified condition is + * true. The macro PSOCK_NEWDATA() can be used to check if new data + * arrives when the protosocket is waiting. + * + * Typically, this macro is used as follows: + * + \code + PT_THREAD(thread(struct psock *s, struct timer *t)) + { + PSOCK_BEGIN(s); + + PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t)); + + if(PSOCK_NEWDATA(s)) { + PSOCK_READTO(s, '\n'); + } else { + handle_timed_out(s); + } + + PSOCK_END(s); + } + \endcode + * + * \param psock (struct psock *) A pointer to the protosocket. + * \param condition The condition to wait for. + * + * \hideinitializer + */ +#define PSOCK_WAIT_UNTIL(psock, condition) \ + PT_WAIT_UNTIL(&((psock)->pt), (condition)); + +#define PSOCK_WAIT_THREAD(psock, condition) \ + PT_WAIT_THREAD(&((psock)->pt), (condition)) + +#endif /* __PSOCK_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/pt.h b/components/net/uip/uip/pt.h new file mode 100644 index 0000000000..9f1f64dafa --- /dev/null +++ b/components/net/uip/uip/pt.h @@ -0,0 +1,323 @@ +/* + * Copyright (c) 2004-2005, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: pt.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \addtogroup pt + * @{ + */ + +/** + * \file + * Protothreads implementation. + * \author + * Adam Dunkels + * + */ + +#ifndef __PT_H__ +#define __PT_H__ + +#include "lc.h" + +struct pt { + lc_t lc; +}; + +#define PT_WAITING 0 +#define PT_EXITED 1 +#define PT_ENDED 2 +#define PT_YIELDED 3 + +/** + * \name Initialization + * @{ + */ + +/** + * Initialize a protothread. + * + * Initializes a protothread. Initialization must be done prior to + * starting to execute the protothread. + * + * \param pt A pointer to the protothread control structure. + * + * \sa PT_SPAWN() + * + * \hideinitializer + */ +#define PT_INIT(pt) LC_INIT((pt)->lc) + +/** @} */ + +/** + * \name Declaration and definition + * @{ + */ + +/** + * Declaration of a protothread. + * + * This macro is used to declare a protothread. All protothreads must + * be declared with this macro. + * + * \param name_args The name and arguments of the C function + * implementing the protothread. + * + * \hideinitializer + */ +#define PT_THREAD(name_args) char name_args + +/** + * Declare the start of a protothread inside the C function + * implementing the protothread. + * + * This macro is used to declare the starting point of a + * protothread. It should be placed at the start of the function in + * which the protothread runs. All C statements above the PT_BEGIN() + * invokation will be executed each time the protothread is scheduled. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_BEGIN(pt) { char PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc) + +/** + * Declare the end of a protothread. + * + * This macro is used for declaring that a protothread ends. It must + * always be used together with a matching PT_BEGIN() macro. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \ + PT_INIT(pt); return PT_ENDED; } + +/** @} */ + +/** + * \name Blocked wait + * @{ + */ + +/** + * Block and wait until condition is true. + * + * This macro blocks the protothread until the specified condition is + * true. + * + * \param pt A pointer to the protothread control structure. + * \param condition The condition. + * + * \hideinitializer + */ +#define PT_WAIT_UNTIL(pt, condition) \ + do { \ + LC_SET((pt)->lc); \ + if(!(condition)) { \ + return PT_WAITING; \ + } \ + } while(0) + +/** + * Block and wait while condition is true. + * + * This function blocks and waits while condition is true. See + * PT_WAIT_UNTIL(). + * + * \param pt A pointer to the protothread control structure. + * \param cond The condition. + * + * \hideinitializer + */ +#define PT_WAIT_WHILE(pt, cond) PT_WAIT_UNTIL((pt), !(cond)) + +/** @} */ + +/** + * \name Hierarchical protothreads + * @{ + */ + +/** + * Block and wait until a child protothread completes. + * + * This macro schedules a child protothread. The current protothread + * will block until the child protothread completes. + * + * \note The child protothread must be manually initialized with the + * PT_INIT() function before this function is used. + * + * \param pt A pointer to the protothread control structure. + * \param thread The child protothread with arguments + * + * \sa PT_SPAWN() + * + * \hideinitializer + */ +#define PT_WAIT_THREAD(pt, thread) PT_WAIT_WHILE((pt), PT_SCHEDULE(thread)) + +/** + * Spawn a child protothread and wait until it exits. + * + * This macro spawns a child protothread and waits until it exits. The + * macro can only be used within a protothread. + * + * \param pt A pointer to the protothread control structure. + * \param child A pointer to the child protothread's control structure. + * \param thread The child protothread with arguments + * + * \hideinitializer + */ +#define PT_SPAWN(pt, child, thread) \ + do { \ + PT_INIT((child)); \ + PT_WAIT_THREAD((pt), (thread)); \ + } while(0) + +/** @} */ + +/** + * \name Exiting and restarting + * @{ + */ + +/** + * Restart the protothread. + * + * This macro will block and cause the running protothread to restart + * its execution at the place of the PT_BEGIN() call. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_RESTART(pt) \ + do { \ + PT_INIT(pt); \ + return PT_WAITING; \ + } while(0) + +/** + * Exit the protothread. + * + * This macro causes the protothread to exit. If the protothread was + * spawned by another protothread, the parent protothread will become + * unblocked and can continue to run. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_EXIT(pt) \ + do { \ + PT_INIT(pt); \ + return PT_EXITED; \ + } while(0) + +/** @} */ + +/** + * \name Calling a protothread + * @{ + */ + +/** + * Schedule a protothread. + * + * This function shedules a protothread. The return value of the + * function is non-zero if the protothread is running or zero if the + * protothread has exited. + * + * \param f The call to the C function implementing the protothread to + * be scheduled + * + * \hideinitializer + */ +#define PT_SCHEDULE(f) ((f) == PT_WAITING) + +/** @} */ + +/** + * \name Yielding from a protothread + * @{ + */ + +/** + * Yield from the current protothread. + * + * This function will yield the protothread, thereby allowing other + * processing to take place in the system. + * + * \param pt A pointer to the protothread control structure. + * + * \hideinitializer + */ +#define PT_YIELD(pt) \ + do { \ + PT_YIELD_FLAG = 0; \ + LC_SET((pt)->lc); \ + if(PT_YIELD_FLAG == 0) { \ + return PT_YIELDED; \ + } \ + } while(0) + +/** + * \brief Yield from the protothread until a condition occurs. + * \param pt A pointer to the protothread control structure. + * \param cond The condition. + * + * This function will yield the protothread, until the + * specified condition evaluates to true. + * + * + * \hideinitializer + */ +#define PT_YIELD_UNTIL(pt, cond) \ + do { \ + PT_YIELD_FLAG = 0; \ + LC_SET((pt)->lc); \ + if((PT_YIELD_FLAG == 0) || !(cond)) { \ + return PT_YIELDED; \ + } \ + } while(0) + +/** @} */ + +#endif /* __PT_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/uip-fw.c b/components/net/uip/uip/uip-fw.c new file mode 100644 index 0000000000..01858ea7dd --- /dev/null +++ b/components/net/uip/uip/uip-fw.c @@ -0,0 +1,532 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: uip-fw.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ +/** + * \addtogroup uip + * @{ + */ + +/** + * \defgroup uipfw uIP packet forwarding + * @{ + * + */ + +/** + * \file + * uIP packet forwarding. + * \author Adam Dunkels + * + * This file implements a number of simple functions which do packet + * forwarding over multiple network interfaces with uIP. + * + */ + +#include "uip.h" +#include "uip_arch.h" +#include "uip-fw.h" + +#include /* for memcpy() */ + +/* + * The list of registered network interfaces. + */ +static struct uip_fw_netif *netifs = NULL; + +/* + * A pointer to the default network interface. + */ +static struct uip_fw_netif *defaultnetif = NULL; + +struct tcpip_hdr { + /* IP header. */ + u8_t vhl, + tos; + u16_t len, + ipid, + ipoffset; + u8_t ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; + + /* TCP header. */ + u16_t srcport, + destport; + u8_t seqno[4], + ackno[4], + tcpoffset, + flags, + wnd[2]; + u16_t tcpchksum; + u8_t urgp[2]; + u8_t optdata[4]; +}; + +struct icmpip_hdr { + /* IP header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; + /* ICMP (echo) header. */ + u8_t type, icode; + u16_t icmpchksum; + u16_t id, seqno; + u8_t payload[1]; +}; + +/* ICMP ECHO. */ +#define ICMP_ECHO 8 + +/* ICMP TIME-EXCEEDED. */ +#define ICMP_TE 11 + +/* + * Pointer to the TCP/IP headers of the packet in the uip_buf buffer. + */ +#define BUF ((struct tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +/* + * Pointer to the ICMP/IP headers of the packet in the uip_buf buffer. + */ +#define ICMPBUF ((struct icmpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +/* + * Certain fields of an IP packet that are used for identifying + * duplicate packets. + */ +struct fwcache_entry { + u16_t timer; + + u16_t srcipaddr[2]; + u16_t destipaddr[2]; + u16_t ipid; + u8_t proto; + u8_t unused; + +#if notdef + u16_t payload[2]; +#endif + +#if UIP_REASSEMBLY > 0 + u16_t len, offset; +#endif +}; + +/* + * The number of packets to remember when looking for duplicates. + */ +#ifdef UIP_CONF_FWCACHE_SIZE +#define FWCACHE_SIZE UIP_CONF_FWCACHE_SIZE +#else +#define FWCACHE_SIZE 2 +#endif + + +/* + * A cache of packet header fields which are used for + * identifying duplicate packets. + */ +static struct fwcache_entry fwcache[FWCACHE_SIZE]; + +/** + * \internal + * The time that a packet cache is active. + */ +#define FW_TIME 20 + +/*------------------------------------------------------------------------------*/ +/** + * Initialize the uIP packet forwarding module. + */ +/*------------------------------------------------------------------------------*/ +void +uip_fw_init(void) +{ + struct uip_fw_netif *t; + defaultnetif = NULL; + while(netifs != NULL) { + t = netifs; + netifs = netifs->next; + t->next = NULL; + } +} +/*------------------------------------------------------------------------------*/ +/** + * \internal + * Check if an IP address is within the network defined by an IP + * address and a netmask. + * + * \param ipaddr The IP address to be checked. + * \param netipaddr The IP address of the network. + * \param netmask The netmask of the network. + * + * \return Non-zero if IP address is in network, zero otherwise. + */ +/*------------------------------------------------------------------------------*/ +static unsigned char +ipaddr_maskcmp(u16_t *ipaddr, u16_t *netipaddr, u16_t *netmask) +{ + return (ipaddr[0] & netmask [0]) == (netipaddr[0] & netmask[0]) && + (ipaddr[1] & netmask[1]) == (netipaddr[1] & netmask[1]); +} +/*------------------------------------------------------------------------------*/ +/** + * \internal + * Send out an ICMP TIME-EXCEEDED message. + * + * This function replaces the packet in the uip_buf buffer with the + * ICMP packet. + */ +/*------------------------------------------------------------------------------*/ +static void +time_exceeded(void) +{ + u16_t tmp16; + + /* We don't send out ICMP errors for ICMP messages. */ + if(ICMPBUF->proto == UIP_PROTO_ICMP) { + uip_len = 0; + return; + } + /* Copy fields from packet header into payload of this ICMP packet. */ + memcpy(&(ICMPBUF->payload[0]), ICMPBUF, 28); + + /* Set the ICMP type and code. */ + ICMPBUF->type = ICMP_TE; + ICMPBUF->icode = 0; + + /* Calculate the ICMP checksum. */ + ICMPBUF->icmpchksum = 0; + ICMPBUF->icmpchksum = ~uip_chksum((u16_t *)&(ICMPBUF->type), 36); + + /* Set the IP destination address to be the source address of the + original packet. */ + tmp16= BUF->destipaddr[0]; + BUF->destipaddr[0] = BUF->srcipaddr[0]; + BUF->srcipaddr[0] = tmp16; + tmp16 = BUF->destipaddr[1]; + BUF->destipaddr[1] = BUF->srcipaddr[1]; + BUF->srcipaddr[1] = tmp16; + + /* Set our IP address as the source address. */ + BUF->srcipaddr[0] = uip_hostaddr[0]; + BUF->srcipaddr[1] = uip_hostaddr[1]; + + /* The size of the ICMP time exceeded packet is 36 + the size of the + IP header (20) = 56. */ + uip_len = 56; + ICMPBUF->len[0] = 0; + ICMPBUF->len[1] = uip_len; + + /* Fill in the other fields in the IP header. */ + ICMPBUF->vhl = 0x45; + ICMPBUF->tos = 0; + ICMPBUF->ipoffset[0] = ICMPBUF->ipoffset[1] = 0; + ICMPBUF->ttl = UIP_TTL; + ICMPBUF->proto = UIP_PROTO_ICMP; + + /* Calculate IP checksum. */ + ICMPBUF->ipchksum = 0; + ICMPBUF->ipchksum = ~(uip_ipchksum()); + + +} +/*------------------------------------------------------------------------------*/ +/** + * \internal + * Register a packet in the forwarding cache so that it won't be + * forwarded again. + */ +/*------------------------------------------------------------------------------*/ +static void +fwcache_register(void) +{ + struct fwcache_entry *fw; + int i, oldest; + + oldest = FW_TIME; + fw = NULL; + + /* Find the oldest entry in the cache. */ + for(i = 0; i < FWCACHE_SIZE; ++i) { + if(fwcache[i].timer == 0) { + fw = &fwcache[i]; + break; + } else if(fwcache[i].timer <= oldest) { + fw = &fwcache[i]; + oldest = fwcache[i].timer; + } + } + + fw->timer = FW_TIME; + fw->ipid = BUF->ipid; + fw->srcipaddr[0] = BUF->srcipaddr[0]; + fw->srcipaddr[1] = BUF->srcipaddr[1]; + fw->destipaddr[0] = BUF->destipaddr[0]; + fw->destipaddr[1] = BUF->destipaddr[1]; + fw->proto = BUF->proto; +#if notdef + fw->payload[0] = BUF->srcport; + fw->payload[1] = BUF->destport; +#endif +#if UIP_REASSEMBLY > 0 + fw->len = BUF->len; + fw->offset = BUF->ipoffset; +#endif +} +/*------------------------------------------------------------------------------*/ +/** + * \internal + * Find a network interface for the IP packet in uip_buf. + */ +/*------------------------------------------------------------------------------*/ +static struct uip_fw_netif * +find_netif(void) +{ + struct uip_fw_netif *netif; + + /* Walk through every network interface to check for a match. */ + for(netif = netifs; netif != NULL; netif = netif->next) { + if(ipaddr_maskcmp(BUF->destipaddr, netif->ipaddr, + netif->netmask)) { + /* If there was a match, we break the loop. */ + return netif; + } + } + + /* If no matching netif was found, we use default netif. */ + return defaultnetif; +} +/*------------------------------------------------------------------------------*/ +/** + * Output an IP packet on the correct network interface. + * + * The IP packet should be present in the uip_buf buffer and its + * length in the global uip_len variable. + * + * \retval UIP_FW_ZEROLEN Indicates that a zero-length packet + * transmission was attempted and that no packet was sent. + * + * \retval UIP_FW_NOROUTE No suitable network interface could be found + * for the outbound packet, and the packet was not sent. + * + * \return The return value from the actual network interface output + * function is passed unmodified as a return value. + */ +/*------------------------------------------------------------------------------*/ +u8_t +uip_fw_output(void) +{ + struct uip_fw_netif *netif; + + if(uip_len == 0) { + return UIP_FW_ZEROLEN; + } + + fwcache_register(); + +#if UIP_BROADCAST + /* Link local broadcasts go out on all interfaces. */ + if(/*BUF->proto == UIP_PROTO_UDP &&*/ + BUF->destipaddr[0] == 0xffff && + BUF->destipaddr[1] == 0xffff) { + if(defaultnetif != NULL) { + defaultnetif->output(); + } + for(netif = netifs; netif != NULL; netif = netif->next) { + netif->output(); + } + return UIP_FW_OK; + } +#endif /* UIP_BROADCAST */ + + netif = find_netif(); + /* printf("uip_fw_output: netif %p ->output %p len %d\n", netif, + netif->output, + uip_len);*/ + + if(netif == NULL) { + return UIP_FW_NOROUTE; + } + /* If we now have found a suitable network interface, we call its + output function to send out the packet. */ + return netif->output(); +} +/*------------------------------------------------------------------------------*/ +/** + * Forward an IP packet in the uip_buf buffer. + * + * + * + * \return UIP_FW_FORWARDED if the packet was forwarded, UIP_FW_LOCAL if + * the packet should be processed locally. + */ +/*------------------------------------------------------------------------------*/ +u8_t +uip_fw_forward(void) +{ + struct fwcache_entry *fw; + + /* First check if the packet is destined for ourselves and return 0 + to indicate that the packet should be processed locally. */ + if(BUF->destipaddr[0] == uip_hostaddr[0] && + BUF->destipaddr[1] == uip_hostaddr[1]) { + return UIP_FW_LOCAL; + } + + /* If we use ping IP address configuration, and our IP address is + not yet configured, we should intercept all ICMP echo packets. */ +#if UIP_PINGADDRCONF + if((uip_hostaddr[0] | uip_hostaddr[1]) == 0 && + BUF->proto == UIP_PROTO_ICMP && + ICMPBUF->type == ICMP_ECHO) { + return UIP_FW_LOCAL; + } +#endif /* UIP_PINGADDRCONF */ + + /* Check if the packet is in the forwarding cache already, and if so + we drop it. */ + + for(fw = fwcache; fw < &fwcache[FWCACHE_SIZE]; ++fw) { + if(fw->timer != 0 && +#if UIP_REASSEMBLY > 0 + fw->len == BUF->len && + fw->offset == BUF->ipoffset && +#endif + fw->ipid == BUF->ipid && + fw->srcipaddr[0] == BUF->srcipaddr[0] && + fw->srcipaddr[1] == BUF->srcipaddr[1] && + fw->destipaddr[0] == BUF->destipaddr[0] && + fw->destipaddr[1] == BUF->destipaddr[1] && +#if notdef + fw->payload[0] == BUF->srcport && + fw->payload[1] == BUF->destport && +#endif + fw->proto == BUF->proto) { + /* Drop packet. */ + return UIP_FW_FORWARDED; + } + } + + /* If the TTL reaches zero we produce an ICMP time exceeded message + in the uip_buf buffer and forward that packet back to the sender + of the packet. */ + if(BUF->ttl <= 1) { + /* No time exceeded for broadcasts and multicasts! */ + if(BUF->destipaddr[0] == 0xffff && BUF->destipaddr[1] == 0xffff) { + return UIP_FW_LOCAL; + } + time_exceeded(); + } + + /* Decrement the TTL (time-to-live) value in the IP header */ + BUF->ttl = BUF->ttl - 1; + + /* Update the IP checksum. */ + if(BUF->ipchksum >= HTONS(0xffff - 0x0100)) { + BUF->ipchksum = BUF->ipchksum + HTONS(0x0100) + 1; + } else { + BUF->ipchksum = BUF->ipchksum + HTONS(0x0100); + } + + if(uip_len > 0) { + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN]; + uip_fw_output(); + } + +#if UIP_BROADCAST + if(BUF->destipaddr[0] == 0xffff && BUF->destipaddr[1] == 0xffff) { + return UIP_FW_LOCAL; + } +#endif /* UIP_BROADCAST */ + + /* Return non-zero to indicate that the packet was forwarded and that no + other processing should be made. */ + return UIP_FW_FORWARDED; +} +/*------------------------------------------------------------------------------*/ +/** + * Register a network interface with the forwarding module. + * + * \param netif A pointer to the network interface that is to be + * registered. + */ +/*------------------------------------------------------------------------------*/ +void +uip_fw_register(struct uip_fw_netif *netif) +{ + netif->next = netifs; + netifs = netif; +} +/*------------------------------------------------------------------------------*/ +/** + * Register a default network interface. + * + * All packets that don't go out on any of the other interfaces will + * be routed to the default interface. + * + * \param netif A pointer to the network interface that is to be + * registered. + */ +/*------------------------------------------------------------------------------*/ +void +uip_fw_default(struct uip_fw_netif *netif) +{ + defaultnetif = netif; +} +/*------------------------------------------------------------------------------*/ +/** + * Perform periodic processing. + */ +/*------------------------------------------------------------------------------*/ +void +uip_fw_periodic(void) +{ + struct fwcache_entry *fw; + for(fw = fwcache; fw < &fwcache[FWCACHE_SIZE]; ++fw) { + if(fw->timer > 0) { + --fw->timer; + } + } +} +/*------------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/uip-fw.h b/components/net/uip/uip/uip-fw.h new file mode 100644 index 0000000000..9033850918 --- /dev/null +++ b/components/net/uip/uip/uip-fw.h @@ -0,0 +1,176 @@ +/** + * \addtogroup uipfw + * @{ + */ + +/** + * \file + * uIP packet forwarding header file. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: uip-fw.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ +#ifndef __UIP_FW_H__ +#define __UIP_FW_H__ + +#include "uip.h" + +/** + * Representation of a uIP network interface. + */ +struct uip_fw_netif { + struct uip_fw_netif *next; /**< Pointer to the next interface when + linked in a list. */ + u16_t ipaddr[2]; /**< The IP address of this interface. */ + u16_t netmask[2]; /**< The netmask of the interface. */ + u8_t (* output)(void); + /**< A pointer to the function that + sends a packet. */ +}; + +/** + * Intantiating macro for a uIP network interface. + * + * Example: + \code + struct uip_fw_netif slipnetif = + {UIP_FW_NETIF(192,168,76,1, 255,255,255,0, slip_output)}; + \endcode + * \param ip1,ip2,ip3,ip4 The IP address of the network interface. + * + * \param nm1,nm2,nm3,nm4 The netmask of the network interface. + * + * \param outputfunc A pointer to the output function of the network interface. + * + * \hideinitializer + */ +#define UIP_FW_NETIF(ip1,ip2,ip3,ip4, nm1,nm2,nm3,nm4, outputfunc) \ + NULL, \ + {HTONS((ip1 << 8) | ip2), HTONS((ip3 << 8) | ip4)}, \ + {HTONS((nm1 << 8) | nm2), HTONS((nm3 << 8) | nm4)}, \ + outputfunc + +/** + * Set the IP address of a network interface. + * + * \param netif A pointer to the uip_fw_netif structure for the network interface. + * + * \param addr A pointer to an IP address. + * + * \hideinitializer + */ +#define uip_fw_setipaddr(netif, addr) \ + do { (netif)->ipaddr[0] = ((u16_t *)(addr))[0]; \ + (netif)->ipaddr[1] = ((u16_t *)(addr))[1]; } while(0) +/** + * Set the netmask of a network interface. + * + * \param netif A pointer to the uip_fw_netif structure for the network interface. + * + * \param addr A pointer to an IP address representing the netmask. + * + * \hideinitializer + */ +#define uip_fw_setnetmask(netif, addr) \ + do { (netif)->netmask[0] = ((u16_t *)(addr))[0]; \ + (netif)->netmask[1] = ((u16_t *)(addr))[1]; } while(0) + +void uip_fw_init(void); +u8_t uip_fw_forward(void); +u8_t uip_fw_output(void); +void uip_fw_register(struct uip_fw_netif *netif); +void uip_fw_default(struct uip_fw_netif *netif); +void uip_fw_periodic(void); + + +/** + * A non-error message that indicates that a packet should be + * processed locally. + * + * \hideinitializer + */ +#define UIP_FW_LOCAL 0 + +/** + * A non-error message that indicates that something went OK. + * + * \hideinitializer + */ +#define UIP_FW_OK 0 + +/** + * A non-error message that indicates that a packet was forwarded. + * + * \hideinitializer + */ +#define UIP_FW_FORWARDED 1 + +/** + * A non-error message that indicates that a zero-length packet + * transmission was attempted, and that no packet was sent. + * + * \hideinitializer + */ +#define UIP_FW_ZEROLEN 2 + +/** + * An error message that indicates that a packet that was too large + * for the outbound network interface was detected. + * + * \hideinitializer + */ +#define UIP_FW_TOOLARGE 3 + +/** + * An error message that indicates that no suitable interface could be + * found for an outbound packet. + * + * \hideinitializer + */ +#define UIP_FW_NOROUTE 4 + +/** + * An error message that indicates that a packet that should be + * forwarded or output was dropped. + * + * \hideinitializer + */ +#define UIP_FW_DROPPED 5 + + +#endif /* __UIP_FW_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/uip-neighbor.c b/components/net/uip/uip/uip-neighbor.c new file mode 100644 index 0000000000..739c03e9c1 --- /dev/null +++ b/components/net/uip/uip/uip-neighbor.c @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uip-neighbor.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \file + * Database of link-local neighbors, used by IPv6 code and + * to be used by a future ARP code rewrite. + * \author + * Adam Dunkels + */ + +#include "uip-neighbor.h" + +#include + +#define MAX_TIME 128 + +#ifdef UIP_NEIGHBOR_CONF_ENTRIES +#define ENTRIES UIP_NEIGHBOR_CONF_ENTRIES +#else /* UIP_NEIGHBOR_CONF_ENTRIES */ +#define ENTRIES 8 +#endif /* UIP_NEIGHBOR_CONF_ENTRIES */ + +struct neighbor_entry { + uip_ipaddr_t ipaddr; + struct uip_neighbor_addr addr; + u8_t time; +}; +static struct neighbor_entry entries[ENTRIES]; + +/*---------------------------------------------------------------------------*/ +void +uip_neighbor_init(void) +{ + int i; + + for(i = 0; i < ENTRIES; ++i) { + entries[i].time = MAX_TIME; + } +} +/*---------------------------------------------------------------------------*/ +void +uip_neighbor_periodic(void) +{ + int i; + + for(i = 0; i < ENTRIES; ++i) { + if(entries[i].time < MAX_TIME) { + entries[i].time++; + } + } +} +/*---------------------------------------------------------------------------*/ +void +uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr) +{ + int i, oldest; + u8_t oldest_time; + + printf("Adding neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n", + addr->addr.addr[0], addr->addr.addr[1], addr->addr.addr[2], addr->addr.addr[3], + addr->addr.addr[4], addr->addr.addr[5]); + + /* Find the first unused entry or the oldest used entry. */ + oldest_time = 0; + oldest = 0; + for(i = 0; i < ENTRIES; ++i) { + if(entries[i].time == MAX_TIME) { + oldest = i; + break; + } + if(uip_ipaddr_cmp(entries[i].ipaddr, addr)) { + oldest = i; + break; + } + if(entries[i].time > oldest_time) { + oldest = i; + oldest_time = entries[i].time; + } + } + + /* Use the oldest or first free entry (either pointed to by the + "oldest" variable). */ + entries[oldest].time = 0; + uip_ipaddr_copy(entries[oldest].ipaddr, ipaddr); + memcpy(&entries[oldest].addr, addr, sizeof(struct uip_neighbor_addr)); +} +/*---------------------------------------------------------------------------*/ +static struct neighbor_entry * +find_entry(uip_ipaddr_t ipaddr) +{ + int i; + + for(i = 0; i < ENTRIES; ++i) { + if(uip_ipaddr_cmp(entries[i].ipaddr, ipaddr)) { + return &entries[i]; + } + } + return NULL; +} +/*---------------------------------------------------------------------------*/ +void +uip_neighbor_update(uip_ipaddr_t ipaddr) +{ + struct neighbor_entry *e; + + e = find_entry(ipaddr); + if(e != NULL) { + e->time = 0; + } +} +/*---------------------------------------------------------------------------*/ +struct uip_neighbor_addr * +uip_neighbor_lookup(uip_ipaddr_t ipaddr) +{ + struct neighbor_entry *e; + + e = find_entry(ipaddr); + if(e != NULL) { + /* printf("Lookup neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n", + e->addr.addr.addr[0], e->addr.addr.addr[1], e->addr.addr.addr[2], e->addr.addr.addr[3], + e->addr.addr.addr[4], e->addr.addr.addr[5]);*/ + + return &e->addr; + } + return NULL; +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/uip-neighbor.h b/components/net/uip/uip/uip-neighbor.h new file mode 100644 index 0000000000..d3b351c277 --- /dev/null +++ b/components/net/uip/uip/uip-neighbor.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uip-neighbor.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +/** + * \file + * Header file for database of link-local neighbors, used by + * IPv6 code and to be used by future ARP code. + * \author + * Adam Dunkels + */ + +#ifndef __UIP_NEIGHBOR_H__ +#define __UIP_NEIGHBOR_H__ + +#include "uip.h" + +struct uip_neighbor_addr { +#if UIP_NEIGHBOR_CONF_ADDRTYPE + UIP_NEIGHBOR_CONF_ADDRTYPE addr; +#else + struct uip_eth_addr addr; +#endif +}; + +void uip_neighbor_init(void); +void uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr); +void uip_neighbor_update(uip_ipaddr_t ipaddr); +struct uip_neighbor_addr *uip_neighbor_lookup(uip_ipaddr_t ipaddr); +void uip_neighbor_periodic(void); + +#endif /* __UIP-NEIGHBOR_H__ */ diff --git a/components/net/uip/uip/uip-split.c b/components/net/uip/uip/uip-split.c new file mode 100644 index 0000000000..a910ee621c --- /dev/null +++ b/components/net/uip/uip/uip-split.c @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: uip-split.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +#include + +#include "uip-split.h" +#include "uip.h" +#include "uip-fw.h" +#include "uip_arch.h" + + + +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +/*-----------------------------------------------------------------------------*/ +void +uip_split_output(void) +{ + u16_t tcplen, len1, len2; + + /* We only try to split maximum sized TCP segments. */ + if(BUF->proto == UIP_PROTO_TCP && + uip_len == UIP_BUFSIZE - UIP_LLH_LEN) { + + tcplen = uip_len - UIP_TCPIP_HLEN; + /* Split the segment in two. If the original packet length was + odd, we make the second packet one byte larger. */ + len1 = len2 = tcplen / 2; + if(len1 + len2 < tcplen) { + ++len2; + } + + /* Create the first packet. This is done by altering the length + field of the IP header and updating the checksums. */ + uip_len = len1 + UIP_TCPIP_HLEN; +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = uip_len >> 8; + BUF->len[1] = uip_len & 0xff; +#endif /* UIP_CONF_IPV6 */ + + /* Recalculate the TCP checksum. */ + BUF->tcpchksum = 0; + BUF->tcpchksum = ~(uip_tcpchksum()); + +#if !UIP_CONF_IPV6 + /* Recalculate the IP checksum. */ + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); +#endif /* UIP_CONF_IPV6 */ + + /* Transmit the first packet. */ + /* uip_fw_output();*/ + tcpip_output(); + + /* Now, create the second packet. To do this, it is not enough to + just alter the length field, but we must also update the TCP + sequence number and point the uip_appdata to a new place in + memory. This place is detemined by the length of the first + packet (len1). */ + uip_len = len2 + UIP_TCPIP_HLEN; +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = uip_len >> 8; + BUF->len[1] = uip_len & 0xff; +#endif /* UIP_CONF_IPV6 */ + + /* uip_appdata += len1;*/ + memcpy(uip_appdata, (u8_t *)uip_appdata + len1, len2); + + uip_add32(BUF->seqno, len1); + BUF->seqno[0] = uip_acc32[0]; + BUF->seqno[1] = uip_acc32[1]; + BUF->seqno[2] = uip_acc32[2]; + BUF->seqno[3] = uip_acc32[3]; + + /* Recalculate the TCP checksum. */ + BUF->tcpchksum = 0; + BUF->tcpchksum = ~(uip_tcpchksum()); + +#if !UIP_CONF_IPV6 + /* Recalculate the IP checksum. */ + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); +#endif /* UIP_CONF_IPV6 */ + + /* Transmit the second packet. */ + /* uip_fw_output();*/ + tcpip_output(); + } else { + /* uip_fw_output();*/ + tcpip_output(); + } + +} +/*-----------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/uip-split.h b/components/net/uip/uip/uip-split.h new file mode 100644 index 0000000000..c2c1789cbc --- /dev/null +++ b/components/net/uip/uip/uip-split.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: uip-split.h,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ +/** + * \addtogroup uip + * @{ + */ + +/** + * \defgroup uipsplit uIP TCP throughput booster hack + * @{ + * + * The basic uIP TCP implementation only allows each TCP connection to + * have a single TCP segment in flight at any given time. Because of + * the delayed ACK algorithm employed by most TCP receivers, uIP's + * limit on the amount of in-flight TCP segments seriously reduces the + * maximum achievable throughput for sending data from uIP. + * + * The uip-split module is a hack which tries to remedy this + * situation. By splitting maximum sized outgoing TCP segments into + * two, the delayed ACK algorithm is not invoked at TCP + * receivers. This improves the throughput when sending data from uIP + * by orders of magnitude. + * + * The uip-split module uses the uip-fw module (uIP IP packet + * forwarding) for sending packets. Therefore, the uip-fw module must + * be set up with the appropriate network interfaces for this module + * to work. + */ + + +/** + * \file + * Module for splitting outbound TCP segments in two to avoid the + * delayed ACK throughput degradation. + * \author + * Adam Dunkels + * + */ + +#ifndef __UIP_SPLIT_H__ +#define __UIP_SPLIT_H__ + +/** + * Handle outgoing packets. + * + * This function inspects an outgoing packet in the uip_buf buffer and + * sends it out using the uip_fw_output() function. If the packet is a + * full-sized TCP segment it will be split into two segments and + * transmitted separately. This function should be called instead of + * the actual device driver output function, or the uip_fw_output() + * function. + * + * The headers of the outgoing packet is assumed to be in the uip_buf + * buffer and the payload is assumed to be wherever uip_appdata + * points. The length of the outgoing packet is assumed to be in the + * uip_len variable. + * + */ +void uip_split_output(void); + +#endif /* __UIP_SPLIT_H__ */ + +/** @} */ +/** @} */ diff --git a/components/net/uip/uip/uip.c b/components/net/uip/uip/uip.c new file mode 100644 index 0000000000..d315744e89 --- /dev/null +++ b/components/net/uip/uip/uip.c @@ -0,0 +1,1903 @@ +#ifdef RT_UIP_DBUG_RPINTF +#define DEBUG_PRINTF(...) rt_kprintf(__VA_ARGS__) +#else +#define DEBUG_PRINTF(...) /*printf(__VA_ARGS__)*/ +#endif + + +/** + * \defgroup uip The uIP TCP/IP stack + * @{ + * + * uIP is an implementation of the TCP/IP protocol stack intended for + * small 8-bit and 16-bit microcontrollers. + * + * uIP provides the necessary protocols for Internet communication, + * with a very small code footprint and RAM requirements - the uIP + * code size is on the order of a few kilobytes and RAM usage is on + * the order of a few hundred bytes. + */ + +/** + * \file + * The uIP TCP/IP stack code. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip.c,v 1.65 2006/06/11 21:46:39 adam Exp $ + * + */ + +/* + * uIP is a small implementation of the IP, UDP and TCP protocols (as + * well as some basic ICMP stuff). The implementation couples the IP, + * UDP, TCP and the application layers very tightly. To keep the size + * of the compiled code down, this code frequently uses the goto + * statement. While it would be possible to break the uip_process() + * function into many smaller functions, this would increase the code + * size because of the overhead of parameter passing and the fact that + * the optimier would not be as efficient. + * + * The principle is that we have a small buffer, called the uip_buf, + * in which the device driver puts an incoming packet. The TCP/IP + * stack parses the headers in the packet, and calls the + * application. If the remote host has sent data to the application, + * this data is present in the uip_buf and the application read the + * data from there. It is up to the application to put this data into + * a byte stream if needed. The application will not be fed with data + * that is out of sequence. + * + * If the application whishes to send data to the peer, it should put + * its data into the uip_buf. The uip_appdata pointer points to the + * first available byte. The TCP/IP stack will calculate the + * checksums, and fill in the necessary header fields and finally send + * the packet back to the peer. +*/ + +#include "uip.h" +#include "uipopt.h" +#include "uip_arch.h" + +#if UIP_CONF_IPV6 +#include "uip-neighbor.h" +#endif /* UIP_CONF_IPV6 */ + +#include + +/*---------------------------------------------------------------------------*/ +/* Variable definitions. */ + + +/* The IP address of this host. If it is defined to be fixed (by + setting UIP_FIXEDADDR to 1 in uipopt.h), the address is set + here. Otherwise, the address */ +#if UIP_FIXEDADDR > 0 +const uip_ipaddr_t uip_hostaddr = + {HTONS((UIP_IPADDR0 << 8) | UIP_IPADDR1), + HTONS((UIP_IPADDR2 << 8) | UIP_IPADDR3)}; +const uip_ipaddr_t uip_draddr = + {HTONS((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1), + HTONS((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3)}; +const uip_ipaddr_t uip_netmask = + {HTONS((UIP_NETMASK0 << 8) | UIP_NETMASK1), + HTONS((UIP_NETMASK2 << 8) | UIP_NETMASK3)}; +#else +uip_ipaddr_t uip_hostaddr, uip_draddr, uip_netmask; +#endif /* UIP_FIXEDADDR */ + +static const uip_ipaddr_t all_ones_addr = +#if UIP_CONF_IPV6 + {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; +#else /* UIP_CONF_IPV6 */ + {0xffff,0xffff}; +#endif /* UIP_CONF_IPV6 */ +static const uip_ipaddr_t all_zeroes_addr = +#if UIP_CONF_IPV6 + {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000}; +#else /* UIP_CONF_IPV6 */ + {0x0000,0x0000}; +#endif /* UIP_CONF_IPV6 */ + + +#if UIP_FIXEDETHADDR +const struct uip_eth_addr uip_ethaddr = {{UIP_ETHADDR0, + UIP_ETHADDR1, + UIP_ETHADDR2, + UIP_ETHADDR3, + UIP_ETHADDR4, + UIP_ETHADDR5}}; +#else +struct uip_eth_addr uip_ethaddr = {{0,0x33,0x44,0x55,0x66,0x77}}; +#endif + +#ifndef UIP_CONF_EXTERNAL_BUFFER +u8_t uip_buf[UIP_BUFSIZE + 2]; /* The packet buffer that contains + incoming packets. */ +#endif /* UIP_CONF_EXTERNAL_BUFFER */ + +volatile u8_t *uip_appdata; /* The uip_appdata pointer points to + application data. */ +volatile u8_t *uip_sappdata; /* The uip_appdata pointer points to + the application data which is to + be sent. */ +#if UIP_URGDATA > 0 +void *uip_urgdata; /* The uip_urgdata pointer points to + urgent data (out-of-band data), if + present. */ +u16_t uip_urglen, uip_surglen; +#endif /* UIP_URGDATA > 0 */ + +u16_t uip_len, uip_slen; + /* The uip_len is either 8 or 16 bits, + depending on the maximum packet + size. */ + +u8_t uip_flags; /* The uip_flags variable is used for + communication between the TCP/IP stack + and the application program. */ +struct uip_conn *uip_conn; /* uip_conn always points to the current + connection. */ + +struct uip_conn uip_conns[UIP_CONNS]; + /* The uip_conns array holds all TCP + connections. */ +u16_t uip_listenports[UIP_LISTENPORTS]; + /* The uip_listenports list all currently + listning ports. */ +#if UIP_UDP +struct uip_udp_conn *uip_udp_conn; +struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; +#endif /* UIP_UDP */ + +static u16_t ipid; /* Ths ipid variable is an increasing + number that is used for the IP ID + field. */ + +void uip_setipid(u16_t id) { ipid = id; } + +static u8_t iss[4]; /* The iss variable is used for the TCP + initial sequence number. */ + +#if UIP_ACTIVE_OPEN +static u16_t lastport; /* Keeps track of the last port used for + a new connection. */ +#endif /* UIP_ACTIVE_OPEN */ + +/* Temporary variables. */ +u8_t uip_acc32[4]; +static u8_t c, opt; +static u16_t tmp16; + +/* Structures and definitions. */ +#define TCP_FIN 0x01 +#define TCP_SYN 0x02 +#define TCP_RST 0x04 +#define TCP_PSH 0x08 +#define TCP_ACK 0x10 +#define TCP_URG 0x20 +#define TCP_CTL 0x3f + +#define TCP_OPT_END 0 /* End of TCP options list */ +#define TCP_OPT_NOOP 1 /* "No-operation" TCP option */ +#define TCP_OPT_MSS 2 /* Maximum segment size TCP option */ + +#define TCP_OPT_MSS_LEN 4 /* Length of TCP MSS option. */ + +#define ICMP_ECHO_REPLY 0 +#define ICMP_ECHO 8 + +#define ICMP6_ECHO_REPLY 129 +#define ICMP6_ECHO 128 +#define ICMP6_NEIGHBOR_SOLICITATION 135 +#define ICMP6_NEIGHBOR_ADVERTISEMENT 136 + +#define ICMP6_FLAG_S (1 << 6) + +#define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1 +#define ICMP6_OPTION_TARGET_LINK_ADDRESS 2 + + +/* Macros. */ +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0]) +#define ICMPBUF ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN]) + + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +#if UIP_LOGGING == 1 +#include +void uip_log(char *msg); +#define UIP_LOG(m) uip_log(m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if ! UIP_ARCH_ADD32 +void +uip_add32(u8_t *op32, u16_t op16) +{ + uip_acc32[3] = op32[3] + (op16 & 0xff); + uip_acc32[2] = op32[2] + (op16 >> 8); + uip_acc32[1] = op32[1]; + uip_acc32[0] = op32[0]; + + if(uip_acc32[2] < (op16 >> 8)) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + + + if(uip_acc32[3] < (op16 & 0xff)) { + ++uip_acc32[2]; + if(uip_acc32[2] == 0) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + } +} + +#endif /* UIP_ARCH_ADD32 */ + +#if ! UIP_ARCH_CHKSUM +/*---------------------------------------------------------------------------*/ +static u16_t +chksum(u16_t sum, const u8_t *data, u16_t len) +{ + u16_t t; + const u8_t *dataptr; + const u8_t *last_byte; + + dataptr = data; + last_byte = data + len - 1; + + while(dataptr < last_byte) { /* At least two more bytes */ + t = (dataptr[0] << 8) + dataptr[1]; + sum += t; + if(sum < t) { + sum++; /* carry */ + } + dataptr += 2; + } + + if(dataptr == last_byte) { + t = (dataptr[0] << 8) + 0; + sum += t; + if(sum < t) { + sum++; /* carry */ + } + } + + /* Return sum in host byte order. */ + return sum; +} +/*---------------------------------------------------------------------------*/ +u16_t +uip_chksum(u16_t *data, u16_t len) +{ + return uip_htons(chksum(0, (u8_t *)data, len)); +} +/*---------------------------------------------------------------------------*/ +#ifndef UIP_ARCH_IPCHKSUM +u16_t +uip_ipchksum(void) +{ + u16_t sum; + + sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN); + DEBUG_PRINTF("uip_ipchksum: sum 0x%04x\n", sum); + return (sum == 0) ? 0xffff : uip_htons(sum); +} +#endif +/*---------------------------------------------------------------------------*/ +static u16_t +upper_layer_chksum(u8_t proto) +{ + u16_t upper_layer_len; + u16_t sum; + +#if UIP_CONF_IPV6 + upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]); +#else /* UIP_CONF_IPV6 */ + upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN; +#endif /* UIP_CONF_IPV6 */ + + /* First sum pseudoheader. */ + + /* IP protocol and length fields. This addition cannot carry. */ + sum = upper_layer_len + proto; + /* Sum IP source and destination addresses. */ + sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); + + /* Sum TCP header and data. */ + sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], + upper_layer_len); + + return (sum == 0) ? 0xffff : uip_htons(sum); +} +/*---------------------------------------------------------------------------*/ +#if UIP_CONF_IPV6 +u16_t +uip_icmp6chksum(void) +{ + return upper_layer_chksum(UIP_PROTO_ICMP6); + +} +#endif /* UIP_CONF_IPV6 */ +/*---------------------------------------------------------------------------*/ +u16_t +uip_tcpchksum(void) +{ + return upper_layer_chksum(UIP_PROTO_TCP); +} +/*---------------------------------------------------------------------------*/ +#if UIP_UDP_CHECKSUMS +u16_t +uip_udpchksum(void) +{ + //return 0; + return upper_layer_chksum(UIP_PROTO_UDP); +} +#endif /* UIP_UDP_CHECKSUMS */ +#endif /* UIP_ARCH_CHKSUM */ +/*---------------------------------------------------------------------------*/ +void +uip_init(void) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + uip_listenports[c] = 0; + } + for(c = 0; c < UIP_CONNS; ++c) { + uip_conns[c].tcpstateflags = UIP_CLOSED; + } +#if UIP_ACTIVE_OPEN + lastport = 1024; +#endif /* UIP_ACTIVE_OPEN */ + +#if UIP_UDP + for(c = 0; c < UIP_UDP_CONNS; ++c) { + uip_udp_conns[c].lport = 0; + } +#endif /* UIP_UDP */ + + + /* IPv4 initialization. */ +#if UIP_FIXEDADDR == 0 + /* uip_hostaddr[0] = uip_hostaddr[1] = 0;*/ +#endif /* UIP_FIXEDADDR */ + +} +/*---------------------------------------------------------------------------*/ +#if UIP_ACTIVE_OPEN +struct uip_conn * +uip_connect(uip_ipaddr_t *ripaddr, u16_t rport) +{ + register struct uip_conn *conn, *cconn; + + /* Find an unused local port. */ + again: + ++lastport; + + if(lastport >= 32000) { + lastport = 4096; + } + + /* Check if this port is already in use, and if so try to find + another one. */ + for(c = 0; c < UIP_CONNS; ++c) { + conn = &uip_conns[c]; + if(conn->tcpstateflags != UIP_CLOSED && + conn->lport == uip_htons(lastport)) { + goto again; + } + } + + conn = 0; + for(c = 0; c < UIP_CONNS; ++c) { + cconn = &uip_conns[c]; + if(cconn->tcpstateflags == UIP_CLOSED) { + conn = cconn; + break; + } + if(cconn->tcpstateflags == UIP_TIME_WAIT) { + if(conn == 0 || + cconn->timer > conn->timer) { + conn = cconn; + } + } + } + + if(conn == 0) { + return 0; + } + + conn->tcpstateflags = UIP_SYN_SENT; + + conn->snd_nxt[0] = iss[0]; + conn->snd_nxt[1] = iss[1]; + conn->snd_nxt[2] = iss[2]; + conn->snd_nxt[3] = iss[3]; + + conn->initialmss = conn->mss = UIP_TCP_MSS; + + conn->len = 1; /* TCP length of the SYN is one. */ + conn->nrtx = 0; + conn->timer = 1; /* Send the SYN next time around. */ + conn->rto = UIP_RTO; + conn->sa = 0; + conn->sv = 16; /* Initial value of the RTT variance. */ + conn->lport = uip_htons(lastport); + conn->rport = rport; + uip_ipaddr_copy(&conn->ripaddr, ripaddr); + + return conn; +} +#endif /* UIP_ACTIVE_OPEN */ +/*---------------------------------------------------------------------------*/ +#if UIP_UDP +struct uip_udp_conn * +uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport) +{ + register struct uip_udp_conn *conn; + + /* Find an unused local port. */ + again: + ++lastport; + + if(lastport >= 32000) { + lastport = 4096; + } + + for(c = 0; c < UIP_UDP_CONNS; ++c) { + if(uip_udp_conns[c].lport == uip_htons(lastport)) { + goto again; + } + } + + + conn = 0; + for(c = 0; c < UIP_UDP_CONNS; ++c) { + if(uip_udp_conns[c].lport == 0) { + conn = &uip_udp_conns[c]; + break; + } + } + + if(conn == 0) { + return 0; + } + + conn->lport = HTONS(lastport); + conn->rport = rport; + if(ripaddr == NULL) { + memset(conn->ripaddr, 0, sizeof(uip_ipaddr_t)); + } else { + uip_ipaddr_copy(&conn->ripaddr, ripaddr); + } + conn->ttl = UIP_TTL; + + return conn; +} +#endif /* UIP_UDP */ +/*---------------------------------------------------------------------------*/ +void +uip_unlisten(u16_t port) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(uip_listenports[c] == port) { + uip_listenports[c] = 0; + return; + } + } +} +/*---------------------------------------------------------------------------*/ +void +uip_listen(u16_t port) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(uip_listenports[c] == 0) { + uip_listenports[c] = port; + return; + } + } +} +/*---------------------------------------------------------------------------*/ +/* XXX: IP fragment reassembly: not well-tested. */ + +#if UIP_REASSEMBLY && !UIP_CONF_IPV6 +#define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN) +static u8_t uip_reassbuf[UIP_REASS_BUFSIZE]; +static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)]; +static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f, + 0x0f, 0x07, 0x03, 0x01}; +static u16_t uip_reasslen; +static u8_t uip_reassflags; +#define UIP_REASS_FLAG_LASTFRAG 0x01 +static u8_t uip_reasstmr; + +#define IP_MF 0x20 + +static u8_t +uip_reass(void) +{ + u16_t offset, len; + u16_t i; + + /* If ip_reasstmr is zero, no packet is present in the buffer, so we + write the IP header of the fragment into the reassembly + buffer. The timer is updated with the maximum age. */ + if(uip_reasstmr == 0) { + memcpy(uip_reassbuf, &BUF->vhl, UIP_IPH_LEN); + uip_reasstmr = UIP_REASS_MAXAGE; + uip_reassflags = 0; + /* Clear the bitmap. */ + memset(uip_reassbitmap, 0, sizeof(uip_reassbitmap)); + } + + /* Check if the incoming fragment matches the one currently present + in the reasembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if(BUF->srcipaddr[0] == FBUF->srcipaddr[0] && + BUF->srcipaddr[1] == FBUF->srcipaddr[1] && + BUF->destipaddr[0] == FBUF->destipaddr[0] && + BUF->destipaddr[1] == FBUF->destipaddr[1] && + BUF->ipid[0] == FBUF->ipid[0] && + BUF->ipid[1] == FBUF->ipid[1]) { + + len = (BUF->len[0] << 8) + BUF->len[1] - (BUF->vhl & 0x0f) * 4; + offset = (((BUF->ipoffset[0] & 0x3f) << 8) + BUF->ipoffset[1]) * 8; + + /* If the offset or the offset + fragment length overflows the + reassembly buffer, we discard the entire packet. */ + if(offset > UIP_REASS_BUFSIZE || + offset + len > UIP_REASS_BUFSIZE) { + uip_reasstmr = 0; + goto nullreturn; + } + + /* Copy the fragment into the reassembly buffer, at the right + offset. */ + memcpy(&uip_reassbuf[UIP_IPH_LEN + offset], + (char *)BUF + (int)((BUF->vhl & 0x0f) * 4), + len); + + /* Update the bitmap. */ + if(offset / (8 * 8) == (offset + len) / (8 * 8)) { + /* If the two endpoints are in the same byte, we only update + that byte. */ + + uip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8 ) & 7] & + ~bitmap_bits[((offset + len) / 8 ) & 7]; + } else { + /* If the two endpoints are in different bytes, we update the + bytes in the endpoints and fill the stuff inbetween with + 0xff. */ + uip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8 ) & 7]; + for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) { + uip_reassbitmap[i] = 0xff; + } + uip_reassbitmap[(offset + len) / (8 * 8)] |= + ~bitmap_bits[((offset + len) / 8 ) & 7]; + } + + /* If this fragment has the More Fragments flag set to zero, we + know that this is the last fragment, so we can calculate the + size of the entire packet. We also set the + IP_REASS_FLAG_LASTFRAG flag to indicate that we have received + the final fragment. */ + + if((BUF->ipoffset[0] & IP_MF) == 0) { + uip_reassflags |= UIP_REASS_FLAG_LASTFRAG; + uip_reasslen = offset + len; + } + + /* Finally, we check if we have a full packet in the buffer. We do + this by checking if we have the last fragment and if all bits + in the bitmap are set. */ + if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) { + /* Check all bytes up to and including all but the last byte in + the bitmap. */ + for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) { + if(uip_reassbitmap[i] != 0xff) { + goto nullreturn; + } + } + /* Check the last byte in the bitmap. It should contain just the + right amount of bits. */ + if(uip_reassbitmap[uip_reasslen / (8 * 8)] != + (u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) { + goto nullreturn; + } + + /* If we have come this far, we have a full packet in the + buffer, so we allocate a pbuf and copy the packet into it. We + also reset the timer. */ + uip_reasstmr = 0; + memcpy(BUF, FBUF, uip_reasslen); + + /* Pretend to be a "normal" (i.e., not fragmented) IP packet + from now on. */ + BUF->ipoffset[0] = BUF->ipoffset[1] = 0; + BUF->len[0] = uip_reasslen >> 8; + BUF->len[1] = uip_reasslen & 0xff; + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); + + return uip_reasslen; + } + } + + nullreturn: + return 0; +} +#endif /* UIP_REASSEMBLY */ +/*---------------------------------------------------------------------------*/ +static void +uip_add_rcv_nxt(u16_t n) +{ + uip_add32(uip_conn->rcv_nxt, n); + uip_conn->rcv_nxt[0] = uip_acc32[0]; + uip_conn->rcv_nxt[1] = uip_acc32[1]; + uip_conn->rcv_nxt[2] = uip_acc32[2]; + uip_conn->rcv_nxt[3] = uip_acc32[3]; +} +/*---------------------------------------------------------------------------*/ +void +uip_process(u8_t flag) +{ + register struct uip_conn *uip_connr = uip_conn; + +#if UIP_UDP + if(flag == UIP_UDP_SEND_CONN) { + goto udp_send; + } +#endif /* UIP_UDP */ + + uip_sappdata = uip_appdata = &uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN]; + + /* Check if we were invoked because of a poll request for a + particular connection. */ + if(flag == UIP_POLL_REQUEST) { //告诉uIP,有一个连接必须不断被轮询 + if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED && + !uip_outstanding(uip_connr)) { + uip_flags = UIP_POLL; + UIP_APPCALL(); + goto appsend; + } + goto drop; + + /* Check if we were invoked because of the perodic timer fireing. */ + } else if(flag == UIP_TIMER) { +#if UIP_REASSEMBLY + if(uip_reasstmr != 0) { + --uip_reasstmr; + } +#endif /* UIP_REASSEMBLY */ + /* Increase the initial sequence number. */ + if(++iss[3] == 0) { + if(++iss[2] == 0) { + if(++iss[1] == 0) { + ++iss[0]; + } + } + } + + /* Reset the length variables. */ + uip_len = 0; + uip_slen = 0; + + /* Check if the connection is in a state in which we simply wait + for the connection to time out. If so, we increase the + connection's timer and remove the connection if it times + out. */ + if(uip_connr->tcpstateflags == UIP_TIME_WAIT || + uip_connr->tcpstateflags == UIP_FIN_WAIT_2) { + ++(uip_connr->timer); + if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) { + uip_connr->tcpstateflags = UIP_CLOSED; + } + } else if(uip_connr->tcpstateflags != UIP_CLOSED) {//如果连接没有被关闭,则看有无数据需要发送 + /* If the connection has outstanding data, we increase the + connection's timer and see if it has reached the RTO value + in which case we retransmit. */ + if(uip_outstanding(uip_connr)) {//如果有数据需要发送 + if(uip_connr->timer-- == 0) { + if(uip_connr->nrtx == UIP_MAXRTX || + ((uip_connr->tcpstateflags == UIP_SYN_SENT || + uip_connr->tcpstateflags == UIP_SYN_RCVD) && + uip_connr->nrtx == UIP_MAXSYNRTX)) { + uip_connr->tcpstateflags = UIP_CLOSED; + + /* We call UIP_APPCALL() with uip_flags set to + UIP_TIMEDOUT to inform the application that the + connection has timed out. */ + uip_flags = UIP_TIMEDOUT; + UIP_APPCALL(); + + /* We also send a reset packet to the remote host. */ + BUF->flags = TCP_RST | TCP_ACK; + goto tcp_send_nodata; + } + + /* Exponential backoff. */ + uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4? + 4: + uip_connr->nrtx); + ++(uip_connr->nrtx); + + /* Ok, so we need to retransmit. We do this differently + depending on which state we are in. In ESTABLISHED, we + call upon the application so that it may prepare the + data for the retransmit. In SYN_RCVD, we resend the + SYNACK that we sent earlier and in LAST_ACK we have to + retransmit our FINACK. */ + UIP_STAT(++uip_stat.tcp.rexmit); + switch(uip_connr->tcpstateflags & UIP_TS_MASK) { + case UIP_SYN_RCVD: + /* In the SYN_RCVD state, we should retransmit our + SYNACK. */ + goto tcp_send_synack; + +#if UIP_ACTIVE_OPEN + case UIP_SYN_SENT: //需要发送同步字 + /* In the SYN_SENT state, we retransmit out SYN. */ + BUF->flags = 0; + goto tcp_send_syn; +#endif /* UIP_ACTIVE_OPEN */ + + case UIP_ESTABLISHED: + /* In the ESTABLISHED state, we call upon the application + to do the actual retransmit after which we jump into + the code for sending out the packet (the apprexmit + label). */ + uip_flags = UIP_REXMIT; + UIP_APPCALL(); + goto apprexmit; + + case UIP_FIN_WAIT_1: + case UIP_CLOSING: + case UIP_LAST_ACK: + /* In all these states we should retransmit a FINACK. */ + goto tcp_send_finack; + + } + } + } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) { //如果建立了连接 + /* If there was no need for a retransmission, we poll the + application for new data. */ + uip_flags = UIP_POLL; //这里设置不断被轮询的标志 + UIP_APPCALL(); + goto appsend; + } + } + goto drop; + } +#if UIP_UDP + if(flag == UIP_UDP_TIMER) { + if(uip_udp_conn->lport != 0) { + uip_conn = NULL; + uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + uip_len = uip_slen = 0; + uip_flags = UIP_POLL; + UIP_UDP_APPCALL(); + goto udp_send; + } else { + goto drop; + } + } +#endif +//如果收到IP包,则从这里开始 + /* This is where the input processing starts. */ + UIP_STAT(++uip_stat.ip.recv); + + /* Start of IP input header processing code. */ + +#if UIP_CONF_IPV6 + /* Check validity of the IP header. */ + if((BUF->vtc & 0xf0) != 0x60) { /* IP version and header length. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.vhlerr); + UIP_LOG("ipv6: invalid version."); + goto drop; + } +#else /* UIP_CONF_IPV6 */ + /* Check validity of the IP header. */ + if(BUF->vhl != 0x45) { /* IP version and header length. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.vhlerr); + UIP_LOG("ip: invalid version or header length."); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + + /* Check the size of the packet. If the size reported to us in + uip_len is smaller the size reported in the IP header, we assume + that the packet has been corrupted in transit. If the size of + uip_len is larger than the size reported in the IP packet header, + the packet has been padded and we set uip_len to the correct + value.. */ + + if((BUF->len[0] << 8) + BUF->len[1] <= uip_len) { + uip_len = (BUF->len[0] << 8) + BUF->len[1]; +#if UIP_CONF_IPV6 + uip_len += 40; /* The length reported in the IPv6 header is the + length of the payload that follows the + header. However, uIP uses the uip_len variable + for holding the size of the entire packet, + including the IP header. For IPv4 this is not a + problem as the length field in the IPv4 header + contains the length of the entire packet. But + for IPv6 we need to add the size of the IPv6 + header (40 bytes). */ +#endif /* UIP_CONF_IPV6 */ + } else { + UIP_LOG("ip: packet shorter than reported in IP header."); + goto drop; + } + +#if !UIP_CONF_IPV6 + /* Check the fragment flag. */ + if((BUF->ipoffset[0] & 0x3f) != 0 || + BUF->ipoffset[1] != 0) { +#if UIP_REASSEMBLY + uip_len = uip_reass(); + if(uip_len == 0) { + goto drop; + } +#else /* UIP_REASSEMBLY */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.fragerr); + UIP_LOG("ip: fragment dropped."); + goto drop; +#endif /* UIP_REASSEMBLY */ + } +#endif /* UIP_CONF_IPV6 */ + + if(uip_ipaddr_cmp(uip_hostaddr, all_zeroes_addr)) { + /* If we are configured to use ping IP address configuration and + hasn't been assigned an IP address yet, we accept all ICMP + packets. */ +#if UIP_PINGADDRCONF && !UIP_CONF_IPV6 + if(BUF->proto == UIP_PROTO_ICMP) { + UIP_LOG("ip: possible ping config packet received."); + goto icmp_input; + } else { + UIP_LOG("ip: packet dropped since no address assigned."); + goto drop; + } +#endif /* UIP_PINGADDRCONF */ + + } else { + /* If IP broadcast support is configured, we check for a broadcast + UDP packet, which may be destined to us. */ +#if UIP_BROADCAST + DEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum()); + if(BUF->proto == UIP_PROTO_UDP && + uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr) + /*&& + uip_ipchksum() == 0xffff*/) { + goto udp_input; + } +#endif /* UIP_BROADCAST */ + + /* Check if the packet is destined for our IP address. */ +#if !UIP_CONF_IPV6 + if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr)) { + UIP_STAT(++uip_stat.ip.drop); + goto drop; + } +#else /* UIP_CONF_IPV6 */ + /* For IPv6, packet reception is a little trickier as we need to + make sure that we listen to certain multicast addresses (all + hosts multicast address, and the solicited-node multicast + address) as well. However, we will cheat here and accept all + multicast packets that are sent to the ff02::/16 addresses. */ + if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr) && + BUF->destipaddr[0] != HTONS(0xff02)) { + UIP_STAT(++uip_stat.ip.drop); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + } + +#if !UIP_CONF_IPV6 + if(uip_ipchksum() != 0xffff) { /* Compute and check the IP header + checksum. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.chkerr); + UIP_LOG("ip: bad checksum."); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + + if(BUF->proto == UIP_PROTO_TCP) { /* Check for TCP packet. If so, + proceed with TCP input + processing. */ + goto tcp_input; + } + +#if UIP_UDP + if(BUF->proto == UIP_PROTO_UDP) { + goto udp_input; + } +#endif /* UIP_UDP */ + +#if !UIP_CONF_IPV6 + /* ICMPv4 processing code follows. */ + if(BUF->proto != UIP_PROTO_ICMP) { /* We only allow ICMP packets from + here. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.protoerr); + UIP_LOG("ip: neither tcp nor icmp."); + goto drop; + } + +#if UIP_PINGADDRCONF + icmp_input: +#endif /* UIP_PINGADDRCONF */ + UIP_STAT(++uip_stat.icmp.recv); + + /* ICMP echo (i.e., ping) processing. This is simple, we only change + the ICMP type from ECHO to ECHO_REPLY and adjust the ICMP + checksum before we return the packet. */ + if(ICMPBUF->type != ICMP_ECHO) { + UIP_STAT(++uip_stat.icmp.drop); + UIP_STAT(++uip_stat.icmp.typeerr); + UIP_LOG("icmp: not icmp echo."); + goto drop; + } + + /* If we are configured to use ping IP address assignment, we use + the destination IP address of this ping packet and assign it to + ourself. */ +#if UIP_PINGADDRCONF + if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) { + uip_hostaddr[0] = BUF->destipaddr[0]; + uip_hostaddr[1] = BUF->destipaddr[1]; + } +#endif /* UIP_PINGADDRCONF */ + + ICMPBUF->type = ICMP_ECHO_REPLY; + + if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) { + ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1; + } else { + ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8); + } + + /* Swap IP addresses. */ + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + + UIP_STAT(++uip_stat.icmp.sent); + goto send; + + /* End of IPv4 input header processing code. */ +#else /* !UIP_CONF_IPV6 */ + + /* This is IPv6 ICMPv6 processing code. */ + DEBUG_PRINTF("icmp6_input: length %d\n", uip_len); + + if(BUF->proto != UIP_PROTO_ICMP6) { /* We only allow ICMPv6 packets from + here. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.protoerr); + UIP_LOG("ip: neither tcp nor icmp6."); + goto drop; + } + + UIP_STAT(++uip_stat.icmp.recv); + + /* If we get a neighbor solicitation for our address we should send + a neighbor advertisement message back. */ + if(ICMPBUF->type == ICMP6_NEIGHBOR_SOLICITATION) { + if(uip_ipaddr_cmp(ICMPBUF->icmp6data, uip_hostaddr)) { + + if(ICMPBUF->options[0] == ICMP6_OPTION_SOURCE_LINK_ADDRESS) { + /* Save the sender's address in our neighbor list. */ + uip_neighbor_add(ICMPBUF->srcipaddr, &(ICMPBUF->options[2])); + } + + /* We should now send a neighbor advertisement back to where the + neighbor solicication came from. */ + ICMPBUF->type = ICMP6_NEIGHBOR_ADVERTISEMENT; + ICMPBUF->flags = ICMP6_FLAG_S; /* Solicited flag. */ + + ICMPBUF->reserved1 = ICMPBUF->reserved2 = ICMPBUF->reserved3 = 0; + + uip_ipaddr_copy(ICMPBUF->destipaddr, ICMPBUF->srcipaddr); + uip_ipaddr_copy(ICMPBUF->srcipaddr, uip_hostaddr); + ICMPBUF->options[0] = ICMP6_OPTION_TARGET_LINK_ADDRESS; + ICMPBUF->options[1] = 1; /* Options length, 1 = 8 bytes. */ + memcpy(&(ICMPBUF->options[2]), &uip_ethaddr, sizeof(uip_ethaddr)); + ICMPBUF->icmpchksum = 0; + ICMPBUF->icmpchksum = ~uip_icmp6chksum(); + goto send; + + } + goto drop; + } else if(ICMPBUF->type == ICMP6_ECHO) { + /* ICMP echo (i.e., ping) processing. This is simple, we only + change the ICMP type from ECHO to ECHO_REPLY and update the + ICMP checksum before we return the packet. */ + + ICMPBUF->type = ICMP6_ECHO_REPLY; + + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + ICMPBUF->icmpchksum = 0; + ICMPBUF->icmpchksum = ~uip_icmp6chksum(); + + UIP_STAT(++uip_stat.icmp.sent); + goto send; + } else { + DEBUG_PRINTF("Unknown icmp6 message type %d\n", ICMPBUF->type); + UIP_STAT(++uip_stat.icmp.drop); + UIP_STAT(++uip_stat.icmp.typeerr); + UIP_LOG("icmp: unknown ICMP message."); + goto drop; + } + + /* End of IPv6 ICMP processing. */ + +#endif /* !UIP_CONF_IPV6 */ + +#if UIP_UDP + /* UDP input processing. */ + udp_input: + /* UDP processing is really just a hack. We don't do anything to the + UDP/IP headers, but let the UDP application do all the hard + work. If the application sets uip_slen, it has a packet to + send. */ +#if UIP_UDP_CHECKSUMS + uip_len = uip_len - UIP_IPUDPH_LEN; + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + if(UDPBUF->udpchksum != 0 && uip_udpchksum() != 0xffff) { + UIP_STAT(++uip_stat.udp.drop); + UIP_STAT(++uip_stat.udp.chkerr); + UIP_LOG("udp: bad checksum."); + goto drop; + } +#else /* UIP_UDP_CHECKSUMS */ + uip_len = uip_len - UIP_IPUDPH_LEN; +#endif /* UIP_UDP_CHECKSUMS */ + + /* Demultiplex this UDP packet between the UDP "connections". */ + for(uip_udp_conn = &uip_udp_conns[0]; + uip_udp_conn < &uip_udp_conns[UIP_UDP_CONNS]; + ++uip_udp_conn) { + /* If the local UDP port is non-zero, the connection is considered + to be used. If so, the local port number is checked against the + destination port number in the received packet. If the two port + numbers match, the remote port number is checked if the + connection is bound to a remote port. Finally, if the + connection is bound to a remote IP address, the source IP + address of the packet is checked. */ + if(uip_udp_conn->lport != 0 && + UDPBUF->destport == uip_udp_conn->lport && + (uip_udp_conn->rport == 0 || + UDPBUF->srcport == uip_udp_conn->rport) && + (uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) || + uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) || + uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) { + goto udp_found; + } + } + UIP_LOG("udp: no matching connection found"); + goto drop; + + udp_found: + uip_conn = NULL; + uip_flags = UIP_NEWDATA; + uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + uip_slen = 0; + UIP_UDP_APPCALL(); + udp_send: + if(uip_slen == 0) { + goto drop; + } + uip_len = uip_slen + UIP_IPUDPH_LEN; + +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = (uip_len >> 8); + BUF->len[1] = (uip_len & 0xff); +#endif /* UIP_CONF_IPV6 */ + + BUF->ttl = uip_udp_conn->ttl; + BUF->proto = UIP_PROTO_UDP; + + UDPBUF->udplen = HTONS(uip_slen + UIP_UDPH_LEN); + UDPBUF->udpchksum = 0; + + BUF->srcport = uip_udp_conn->lport; + BUF->destport = uip_udp_conn->rport; + + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr); + + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN]; + +#if UIP_UDP_CHECKSUMS + /* Calculate UDP checksum. */ + UDPBUF->udpchksum = ~(uip_udpchksum()); + if(UDPBUF->udpchksum == 0) { + UDPBUF->udpchksum = 0xffff; + } +#endif /* UIP_UDP_CHECKSUMS */ + + goto ip_send_nolen; +#endif /* UIP_UDP */ + + /* TCP input processing. */ + tcp_input: + UIP_STAT(++uip_stat.tcp.recv); + + /* Start of TCP input header processing code. */ + + if(uip_tcpchksum() != 0xffff) { /* Compute and check the TCP + checksum. */ + UIP_STAT(++uip_stat.tcp.drop); + UIP_STAT(++uip_stat.tcp.chkerr); + UIP_LOG("tcp: bad checksum."); + goto drop; + } + + + /* Demultiplex this segment. */ + /* First check any active connections. */ + for(uip_connr = &uip_conns[0]; uip_connr <= &uip_conns[UIP_CONNS - 1]; + ++uip_connr) { + if(uip_connr->tcpstateflags != UIP_CLOSED && + BUF->destport == uip_connr->lport && + BUF->srcport == uip_connr->rport && + uip_ipaddr_cmp(BUF->srcipaddr, uip_connr->ripaddr)) { + goto found; + } + } + + /* If we didn't find and active connection that expected the packet, + either this packet is an old duplicate, or this is a SYN packet + destined for a connection in LISTEN. If the SYN flag isn't set, + it is an old packet and we send a RST. */ + if((BUF->flags & TCP_CTL) != TCP_SYN) { + goto reset; + } + + tmp16 = BUF->destport; + /* Next, check listening connections. */ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(tmp16 == uip_listenports[c]) + goto found_listen; + } + + /* No matching connection found, so we send a RST packet. */ + UIP_STAT(++uip_stat.tcp.synrst); + reset: + + /* We do not send resets in response to resets. */ + if(BUF->flags & TCP_RST) { + goto drop; + } + + UIP_STAT(++uip_stat.tcp.rst); + + BUF->flags = TCP_RST | TCP_ACK; + uip_len = UIP_IPTCPH_LEN; + BUF->tcpoffset = 5 << 4; + + /* Flip the seqno and ackno fields in the TCP header. */ + c = BUF->seqno[3]; + BUF->seqno[3] = BUF->ackno[3]; + BUF->ackno[3] = c; + + c = BUF->seqno[2]; + BUF->seqno[2] = BUF->ackno[2]; + BUF->ackno[2] = c; + + c = BUF->seqno[1]; + BUF->seqno[1] = BUF->ackno[1]; + BUF->ackno[1] = c; + + c = BUF->seqno[0]; + BUF->seqno[0] = BUF->ackno[0]; + BUF->ackno[0] = c; + + /* We also have to increase the sequence number we are + acknowledging. If the least significant byte overflowed, we need + to propagate the carry to the other bytes as well. */ + if(++BUF->ackno[3] == 0) { + if(++BUF->ackno[2] == 0) { + if(++BUF->ackno[1] == 0) { + ++BUF->ackno[0]; + } + } + } + + /* Swap port numbers. */ + tmp16 = BUF->srcport; + BUF->srcport = BUF->destport; + BUF->destport = tmp16; + + /* Swap IP addresses. */ + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + + /* And send out the RST packet! */ + goto tcp_send_noconn; + + /* This label will be jumped to if we matched the incoming packet + with a connection in LISTEN. In that case, we should create a new + connection and send a SYNACK in return. */ + found_listen: + /* First we check if there are any connections avaliable. Unused + connections are kept in the same table as used connections, but + unused ones have the tcpstate set to CLOSED. Also, connections in + TIME_WAIT are kept track of and we'll use the oldest one if no + CLOSED connections are found. Thanks to Eddie C. Dost for a very + nice algorithm for the TIME_WAIT search. */ + uip_connr = 0; + for(c = 0; c < UIP_CONNS; ++c) { + if(uip_conns[c].tcpstateflags == UIP_CLOSED) { + uip_connr = &uip_conns[c]; + break; + } + if(uip_conns[c].tcpstateflags == UIP_TIME_WAIT) { + if(uip_connr == 0 || + uip_conns[c].timer > uip_connr->timer) { + uip_connr = &uip_conns[c]; + } + } + } + + if(uip_connr == 0) { + /* All connections are used already, we drop packet and hope that + the remote end will retransmit the packet at a time when we + have more spare connections. */ + UIP_STAT(++uip_stat.tcp.syndrop); + UIP_LOG("tcp: found no unused connections."); + goto drop; + } + uip_conn = uip_connr; + + /* Fill in the necessary fields for the new connection. */ + uip_connr->rto = uip_connr->timer = UIP_RTO; + uip_connr->sa = 0; + uip_connr->sv = 4; + uip_connr->nrtx = 0; + uip_connr->lport = BUF->destport; + uip_connr->rport = BUF->srcport; + uip_ipaddr_copy(uip_connr->ripaddr, BUF->srcipaddr); + uip_connr->tcpstateflags = UIP_SYN_RCVD; + + uip_connr->snd_nxt[0] = iss[0]; + uip_connr->snd_nxt[1] = iss[1]; + uip_connr->snd_nxt[2] = iss[2]; + uip_connr->snd_nxt[3] = iss[3]; + uip_connr->len = 1; + + /* rcv_nxt should be the seqno from the incoming packet + 1. */ + uip_connr->rcv_nxt[3] = BUF->seqno[3]; + uip_connr->rcv_nxt[2] = BUF->seqno[2]; + uip_connr->rcv_nxt[1] = BUF->seqno[1]; + uip_connr->rcv_nxt[0] = BUF->seqno[0]; + uip_add_rcv_nxt(1); + + /* Parse the TCP MSS option, if present. */ + if((BUF->tcpoffset & 0xf0) > 0x50) { + for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) { + opt = uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + c]; + if(opt == TCP_OPT_END) { + /* End of options. */ + break; + } else if(opt == TCP_OPT_NOOP) { + ++c; + /* NOP option. */ + } else if(opt == TCP_OPT_MSS && + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) { + /* An MSS option with the right option length. */ + tmp16 = ((u16_t)uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) | + (u16_t)uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + 3 + c]; + uip_connr->initialmss = uip_connr->mss = + tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16; + + /* And we are done processing options. */ + break; + } else { + /* All other options have a length field, so that we easily + can skip past them. */ + if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) { + /* If the length field is zero, the options are malformed + and we don't process them further. */ + break; + } + c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c]; + } + } + } + + /* Our response will be a SYNACK. */ +#if UIP_ACTIVE_OPEN + tcp_send_synack: + BUF->flags = TCP_ACK; + + tcp_send_syn: + BUF->flags |= TCP_SYN; +#else /* UIP_ACTIVE_OPEN */ + tcp_send_synack: + BUF->flags = TCP_SYN | TCP_ACK; +#endif /* UIP_ACTIVE_OPEN */ + + /* We send out the TCP Maximum Segment Size option with our + SYNACK. */ + BUF->optdata[0] = TCP_OPT_MSS; + BUF->optdata[1] = TCP_OPT_MSS_LEN; + BUF->optdata[2] = (UIP_TCP_MSS) / 256; + BUF->optdata[3] = (UIP_TCP_MSS) & 255; + uip_len = UIP_IPTCPH_LEN + TCP_OPT_MSS_LEN; + BUF->tcpoffset = ((UIP_TCPH_LEN + TCP_OPT_MSS_LEN) / 4) << 4; + goto tcp_send; + + /* This label will be jumped to if we found an active connection. */ + found: + uip_conn = uip_connr; + uip_flags = 0; + /* We do a very naive form of TCP reset processing; we just accept + any RST and kill our connection. We should in fact check if the + sequence number of this reset is wihtin our advertised window + before we accept the reset. */ + if(BUF->flags & TCP_RST) { + uip_connr->tcpstateflags = UIP_CLOSED; + UIP_LOG("tcp: got reset, aborting connection."); + uip_flags = UIP_ABORT; + UIP_APPCALL(); + goto drop; + } + /* Calculated the length of the data, if the application has sent + any data to us. */ + c = (BUF->tcpoffset >> 4) << 2; + /* uip_len will contain the length of the actual TCP data. This is + calculated by subtracing the length of the TCP header (in + c) and the length of the IP header (20 bytes). */ + uip_len = uip_len - c - UIP_IPH_LEN; + + /* First, check if the sequence number of the incoming packet is + what we're expecting next. If not, we send out an ACK with the + correct numbers in. */ + if(!(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) && + ((BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)))) { + if((uip_len > 0 || ((BUF->flags & (TCP_SYN | TCP_FIN)) != 0)) && + (BUF->seqno[0] != uip_connr->rcv_nxt[0] || + BUF->seqno[1] != uip_connr->rcv_nxt[1] || + BUF->seqno[2] != uip_connr->rcv_nxt[2] || + BUF->seqno[3] != uip_connr->rcv_nxt[3])) { + goto tcp_send_ack; + } + } + + /* Next, check if the incoming segment acknowledges any outstanding + data. If so, we update the sequence number, reset the length of + the outstanding data, calculate RTT estimations, and reset the + retransmission timer. */ + if((BUF->flags & TCP_ACK) && uip_outstanding(uip_connr)) { + uip_add32(uip_connr->snd_nxt, uip_connr->len); + + if(BUF->ackno[0] == uip_acc32[0] && + BUF->ackno[1] == uip_acc32[1] && + BUF->ackno[2] == uip_acc32[2] && + BUF->ackno[3] == uip_acc32[3]) { + /* Update sequence number. */ + uip_connr->snd_nxt[0] = uip_acc32[0]; + uip_connr->snd_nxt[1] = uip_acc32[1]; + uip_connr->snd_nxt[2] = uip_acc32[2]; + uip_connr->snd_nxt[3] = uip_acc32[3]; + + + /* Do RTT estimation, unless we have done retransmissions. */ + if(uip_connr->nrtx == 0) { + signed char m; + m = uip_connr->rto - uip_connr->timer; + /* This is taken directly from VJs original code in his paper */ + m = m - (uip_connr->sa >> 3); + uip_connr->sa += m; + if(m < 0) { + m = -m; + } + m = m - (uip_connr->sv >> 2); + uip_connr->sv += m; + uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv; + + } + /* Set the acknowledged flag. */ + uip_flags = UIP_ACKDATA; + /* Reset the retransmission timer. */ + uip_connr->timer = uip_connr->rto; + + /* Reset length of outstanding data. */ + uip_connr->len = 0; + } + + } + + /* Do different things depending on in what state the connection is. */ + switch(uip_connr->tcpstateflags & UIP_TS_MASK) { + /* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not + implemented, since we force the application to close when the + peer sends a FIN (hence the application goes directly from + ESTABLISHED to LAST_ACK). */ + case UIP_SYN_RCVD: + /* In SYN_RCVD we have sent out a SYNACK in response to a SYN, and + we are waiting for an ACK that acknowledges the data we sent + out the last time. Therefore, we want to have the UIP_ACKDATA + flag set. If so, we enter the ESTABLISHED state. */ + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_ESTABLISHED; + uip_flags = UIP_CONNECTED; + uip_connr->len = 0; + if(uip_len > 0) { + uip_flags |= UIP_NEWDATA; + uip_add_rcv_nxt(uip_len); + } + uip_slen = 0; + UIP_APPCALL(); + goto appsend; + } + goto drop; +#if UIP_ACTIVE_OPEN + case UIP_SYN_SENT: + /* In SYN_SENT, we wait for a SYNACK that is sent in response to + our SYN. The rcv_nxt is set to sequence number in the SYNACK + plus one, and we send an ACK. We move into the ESTABLISHED + state. */ + if((uip_flags & UIP_ACKDATA) && + (BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)) { + + /* Parse the TCP MSS option, if present. */ + if((BUF->tcpoffset & 0xf0) > 0x50) { + for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) { + opt = uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + c]; + if(opt == TCP_OPT_END) { + /* End of options. */ + break; + } else if(opt == TCP_OPT_NOOP) { + ++c; + /* NOP option. */ + } else if(opt == TCP_OPT_MSS && + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) { + /* An MSS option with the right option length. */ + tmp16 = (uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) | + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 3 + c]; + uip_connr->initialmss = + uip_connr->mss = tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16; + + /* And we are done processing options. */ + break; + } else { + /* All other options have a length field, so that we easily + can skip past them. */ + if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) { + /* If the length field is zero, the options are malformed + and we don't process them further. */ + break; + } + c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c]; + } + } + } + uip_connr->tcpstateflags = UIP_ESTABLISHED; + uip_connr->rcv_nxt[0] = BUF->seqno[0]; + uip_connr->rcv_nxt[1] = BUF->seqno[1]; + uip_connr->rcv_nxt[2] = BUF->seqno[2]; + uip_connr->rcv_nxt[3] = BUF->seqno[3]; + uip_add_rcv_nxt(1); + uip_flags = UIP_CONNECTED | UIP_NEWDATA; + uip_connr->len = 0; + uip_len = 0; + uip_slen = 0; + UIP_APPCALL(); + goto appsend; + } + /* Inform the application that the connection failed */ + uip_flags = UIP_ABORT; + UIP_APPCALL(); + /* The connection is closed after we send the RST */ + uip_conn->tcpstateflags = UIP_CLOSED; + goto reset; +#endif /* UIP_ACTIVE_OPEN */ + + case UIP_ESTABLISHED: + /* In the ESTABLISHED state, we call upon the application to feed + data into the uip_buf. If the UIP_ACKDATA flag is set, the + application should put new data into the buffer, otherwise we are + retransmitting an old segment, and the application should put that + data into the buffer. + + If the incoming packet is a FIN, we should close the connection on + this side as well, and we send out a FIN and enter the LAST_ACK + state. We require that there is no outstanding data; otherwise the + sequence numbers will be screwed up. */ + + if(BUF->flags & TCP_FIN && !(uip_connr->tcpstateflags & UIP_STOPPED)) { + if(uip_outstanding(uip_connr)) { + goto drop; + } + uip_add_rcv_nxt(1 + uip_len); + uip_flags |= UIP_CLOSE; + if(uip_len > 0) { + uip_flags |= UIP_NEWDATA; + } + UIP_APPCALL(); + uip_connr->len = 1; + uip_connr->tcpstateflags = UIP_LAST_ACK; + uip_connr->nrtx = 0; + tcp_send_finack: + BUF->flags = TCP_FIN | TCP_ACK; + goto tcp_send_nodata; + } + + /* Check the URG flag. If this is set, the segment carries urgent + data that we must pass to the application. */ + if((BUF->flags & TCP_URG) != 0) { +#if UIP_URGDATA > 0 + uip_urglen = (BUF->urgp[0] << 8) | BUF->urgp[1]; + if(uip_urglen > uip_len) { + /* There is more urgent data in the next segment to come. */ + uip_urglen = uip_len; + } + uip_add_rcv_nxt(uip_urglen); + uip_len -= uip_urglen; + uip_urgdata = uip_appdata; + uip_appdata += uip_urglen; + } else { + uip_urglen = 0; +#else /* UIP_URGDATA > 0 */ + uip_appdata = ((char *)uip_appdata) + ((BUF->urgp[0] << 8) | BUF->urgp[1]); + uip_len -= (BUF->urgp[0] << 8) | BUF->urgp[1]; +#endif /* UIP_URGDATA > 0 */ + } + + /* If uip_len > 0 we have TCP data in the packet, and we flag this + by setting the UIP_NEWDATA flag and update the sequence number + we acknowledge. If the application has stopped the dataflow + using uip_stop(), we must not accept any data packets from the + remote host. */ + if(uip_len > 0 && !(uip_connr->tcpstateflags & UIP_STOPPED)) { + uip_flags |= UIP_NEWDATA; + uip_add_rcv_nxt(uip_len); + } + + /* Check if the available buffer space advertised by the other end + is smaller than the initial MSS for this connection. If so, we + set the current MSS to the window size to ensure that the + application does not send more data than the other end can + handle. + + If the remote host advertises a zero window, we set the MSS to + the initial MSS so that the application will send an entire MSS + of data. This data will not be acknowledged by the receiver, + and the application will retransmit it. This is called the + "persistent timer" and uses the retransmission mechanim. + */ + tmp16 = ((u16_t)BUF->wnd[0] << 8) + (u16_t)BUF->wnd[1]; + if(tmp16 > uip_connr->initialmss || + tmp16 == 0) { + tmp16 = uip_connr->initialmss; + } + uip_connr->mss = tmp16; + + /* If this packet constitutes an ACK for outstanding data (flagged + by the UIP_ACKDATA flag, we should call the application since it + might want to send more data. If the incoming packet had data + from the peer (as flagged by the UIP_NEWDATA flag), the + application must also be notified. + + When the application is called, the global variable uip_len + contains the length of the incoming data. The application can + access the incoming data through the global pointer + uip_appdata, which usually points UIP_IPTCPH_LEN + UIP_LLH_LEN + bytes into the uip_buf array. + + If the application wishes to send any data, this data should be + put into the uip_appdata and the length of the data should be + put into uip_len. If the application don't have any data to + send, uip_len must be set to 0. */ + if(uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) { + uip_slen = 0; + UIP_APPCALL(); + + appsend: + + if(uip_flags & UIP_ABORT) { + uip_slen = 0; + uip_connr->tcpstateflags = UIP_CLOSED; + BUF->flags = TCP_RST | TCP_ACK; + goto tcp_send_nodata; + } + + if(uip_flags & UIP_CLOSE) { + uip_slen = 0; + uip_connr->len = 1; + uip_connr->tcpstateflags = UIP_FIN_WAIT_1; + uip_connr->nrtx = 0; + BUF->flags = TCP_FIN | TCP_ACK; + goto tcp_send_nodata; + } + + /* If uip_slen > 0, the application has data to be sent. */ + if(uip_slen > 0) { + + /* If the connection has acknowledged data, the contents of + the ->len variable should be discarded. */ + if((uip_flags & UIP_ACKDATA) != 0) { + uip_connr->len = 0; + } + + /* If the ->len variable is non-zero the connection has + already data in transit and cannot send anymore right + now. */ + if(uip_connr->len == 0) { + + /* The application cannot send more than what is allowed by + the mss (the minumum of the MSS and the available + window). */ + if(uip_slen > uip_connr->mss) { + uip_slen = uip_connr->mss; + } + + /* Remember how much data we send out now so that we know + when everything has been acknowledged. */ + uip_connr->len = uip_slen; + } else { + + /* If the application already had unacknowledged data, we + make sure that the application does not send (i.e., + retransmit) out more than it previously sent out. */ + uip_slen = uip_connr->len; + } + } + uip_connr->nrtx = 0; + apprexmit: + uip_appdata = uip_sappdata; + + /* If the application has data to be sent, or if the incoming + packet had new data in it, we must send out a packet. */ + if(uip_slen > 0 && uip_connr->len > 0) { + /* Add the length of the IP and TCP headers. */ + uip_len = uip_connr->len + UIP_TCPIP_HLEN; + /* We always set the ACK flag in response packets. */ + BUF->flags = TCP_ACK | TCP_PSH; + /* Send the packet. */ + goto tcp_send_noopts; + } + /* If there is no data to send, just send out a pure ACK if + there is newdata. */ + if(uip_flags & UIP_NEWDATA) { + uip_len = UIP_TCPIP_HLEN; + BUF->flags = TCP_ACK; + goto tcp_send_noopts; + } + } + goto drop; + case UIP_LAST_ACK: + /* We can close this connection if the peer has acknowledged our + FIN. This is indicated by the UIP_ACKDATA flag. */ + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_CLOSED; + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + } + break; + + case UIP_FIN_WAIT_1: + /* The application has closed the connection, but the remote host + hasn't closed its end yet. Thus we do nothing but wait for a + FIN from the other side. */ + if(uip_len > 0) { + uip_add_rcv_nxt(uip_len); + } + if(BUF->flags & TCP_FIN) { + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + uip_connr->len = 0; + } else { + uip_connr->tcpstateflags = UIP_CLOSING; + } + uip_add_rcv_nxt(1); + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + goto tcp_send_ack; + } else if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_FIN_WAIT_2; + uip_connr->len = 0; + goto drop; + } + if(uip_len > 0) { + goto tcp_send_ack; + } + goto drop; + + case UIP_FIN_WAIT_2: + if(uip_len > 0) { + uip_add_rcv_nxt(uip_len); + } + if(BUF->flags & TCP_FIN) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + uip_add_rcv_nxt(1); + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + goto tcp_send_ack; + } + if(uip_len > 0) { + goto tcp_send_ack; + } + goto drop; + + case UIP_TIME_WAIT: + goto tcp_send_ack; + + case UIP_CLOSING: + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + } + } + goto drop; + + + /* We jump here when we are ready to send the packet, and just want + to set the appropriate TCP sequence numbers in the TCP header. */ + tcp_send_ack: + BUF->flags = TCP_ACK; + tcp_send_nodata: + uip_len = UIP_IPTCPH_LEN; + tcp_send_noopts: + BUF->tcpoffset = (UIP_TCPH_LEN / 4) << 4; + tcp_send: + /* We're done with the input processing. We are now ready to send a + reply. Our job is to fill in all the fields of the TCP and IP + headers before calculating the checksum and finally send the + packet. */ + BUF->ackno[0] = uip_connr->rcv_nxt[0]; + BUF->ackno[1] = uip_connr->rcv_nxt[1]; + BUF->ackno[2] = uip_connr->rcv_nxt[2]; + BUF->ackno[3] = uip_connr->rcv_nxt[3]; + + BUF->seqno[0] = uip_connr->snd_nxt[0]; + BUF->seqno[1] = uip_connr->snd_nxt[1]; + BUF->seqno[2] = uip_connr->snd_nxt[2]; + BUF->seqno[3] = uip_connr->snd_nxt[3]; + + BUF->proto = UIP_PROTO_TCP; + + BUF->srcport = uip_connr->lport; + BUF->destport = uip_connr->rport; + + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + uip_ipaddr_copy(BUF->destipaddr, uip_connr->ripaddr); + + if(uip_connr->tcpstateflags & UIP_STOPPED) { + /* If the connection has issued uip_stop(), we advertise a zero + window so that the remote host will stop sending data. */ + BUF->wnd[0] = BUF->wnd[1] = 0; + } else { + BUF->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8); + BUF->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff); + } + + tcp_send_noconn: + BUF->ttl = UIP_TTL; +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = (uip_len >> 8); + BUF->len[1] = (uip_len & 0xff); +#endif /* UIP_CONF_IPV6 */ + + BUF->urgp[0] = BUF->urgp[1] = 0; + + /* Calculate TCP checksum. */ + BUF->tcpchksum = 0; + BUF->tcpchksum = ~(uip_tcpchksum()); + + ip_send_nolen: + +#if UIP_CONF_IPV6 + BUF->vtc = 0x60; + BUF->tcflow = 0x00; + BUF->flow = 0x00; +#else /* UIP_CONF_IPV6 */ + BUF->vhl = 0x45; + BUF->tos = 0; + BUF->ipoffset[0] = BUF->ipoffset[1] = 0; + ++ipid; + BUF->ipid[0] = ipid >> 8; + BUF->ipid[1] = ipid & 0xff; + /* Calculate IP checksum. */ + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); + DEBUG_PRINTF("uip ip_send_nolen: chkecum 0x%04x\n", uip_ipchksum()); +#endif /* UIP_CONF_IPV6 */ + + UIP_STAT(++uip_stat.tcp.sent); + send: + DEBUG_PRINTF("Sending packet with length %d (%d)\n", uip_len, + (BUF->len[0] << 8) | BUF->len[1]); + + UIP_STAT(++uip_stat.ip.sent); + /* Return and let the caller do the actual transmission. */ + uip_flags = 0; + return; + drop: + uip_len = 0; + uip_flags = 0; + return; +} +/*---------------------------------------------------------------------------*/ +u16_t +uip_htons(u16_t val) +{ + return HTONS(val); +} +/*---------------------------------------------------------------------------*/ +void +uip_send(const void *data, int len) +{ + if(len > 0) { + uip_slen = len; + if(data != uip_sappdata) { + memcpy((void*)uip_sappdata, (data), uip_slen); + } + } +} +/** @} */ diff --git a/components/net/uip/uip/uip.h b/components/net/uip/uip/uip.h new file mode 100644 index 0000000000..6d358f346c --- /dev/null +++ b/components/net/uip/uip/uip.h @@ -0,0 +1,1602 @@ + +/** + * \addtogroup uip + * @{ + */ + +/** + * \file + * Header file for the uIP TCP/IP stack. + * \author Adam Dunkels + * + * The uIP TCP/IP stack header file contains definitions for a number + * of C macros that are used by uIP programs as well as internal uIP + * structures, TCP/IP header structures and function declarations. + * + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip.h,v 1.40 2006/06/08 07:12:07 adam Exp $ + * + */ + +#ifndef __UIP_H__ +#define __UIP_H__ + +#include "uipopt.h" + +/** + * Repressentation of an IP address. + * + */ +typedef u16_t uip_ip4addr_t[2]; +typedef u16_t uip_ip6addr_t[8]; +#if UIP_CONF_IPV6 +typedef uip_ip6addr_t uip_ipaddr_t; +#else /* UIP_CONF_IPV6 */ +typedef uip_ip4addr_t uip_ipaddr_t; +#endif /* UIP_CONF_IPV6 */ + +/*---------------------------------------------------------------------------*/ +/* First, the functions that should be called from the + * system. Initialization, the periodic timer and incoming packets are + * handled by the following three functions. + */ + +/** + * \defgroup uipconffunc uIP configuration functions + * @{ + * + * The uIP configuration functions are used for setting run-time + * parameters in uIP such as IP addresses. + */ + +/** + * Set the IP address of this host. + * + * The IP address is represented as a 4-byte array where the first + * octet of the IP address is put in the first member of the 4-byte + * array. + * + * Example: + \code + + uip_ipaddr_t addr; + + uip_ipaddr(&addr, 192,168,1,2); + uip_sethostaddr(&addr); + + \endcode + * \param addr A pointer to an IP address of type uip_ipaddr_t; + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_sethostaddr(addr) uip_ipaddr_copy(uip_hostaddr, (addr)) + +/** + * Get the IP address of this host. + * + * The IP address is represented as a 4-byte array where the first + * octet of the IP address is put in the first member of the 4-byte + * array. + * + * Example: + \code + uip_ipaddr_t hostaddr; + + uip_gethostaddr(&hostaddr); + \endcode + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the currently configured IP address. + * + * \hideinitializer + */ +#define uip_gethostaddr(addr) uip_ipaddr_copy((addr), uip_hostaddr) + +/** + * Set the default router's IP address. + * + * \param addr A pointer to a uip_ipaddr_t variable containing the IP + * address of the default router. + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_setdraddr(addr) uip_ipaddr_copy(uip_draddr, (addr)) + +/** + * Set the netmask. + * + * \param addr A pointer to a uip_ipaddr_t variable containing the IP + * address of the netmask. + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_setnetmask(addr) uip_ipaddr_copy(uip_netmask, (addr)) + + +/** + * Get the default router's IP address. + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the IP address of the default router. + * + * \hideinitializer + */ +#define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr) + +/** + * Get the netmask. + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the value of the netmask. + * + * \hideinitializer + */ +#define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask) + +/** @} */ + +/** + * \defgroup uipinit uIP initialization functions + * @{ + * + * The uIP initialization functions are used for booting uIP. + */ + +/** + * uIP initialization function. + * + * This function should be called at boot up to initilize the uIP + * TCP/IP stack. + */ +void uip_init(void); + +/** + * uIP initialization function. + * + * This function may be used at boot time to set the initial ip_id. + */ +void uip_setipid(u16_t id); + +/** @} */ + +/** + * \defgroup uipdevfunc uIP device driver functions + * @{ + * + * These functions are used by a network device driver for interacting + * with uIP. + */ + +/** + * Process an incoming packet. + * + * This function should be called when the device driver has received + * a packet from the network. The packet from the device driver must + * be present in the uip_buf buffer, and the length of the packet + * should be placed in the uip_len variable. + * + * When the function returns, there may be an outbound packet placed + * in the uip_buf packet buffer. If so, the uip_len variable is set to + * the length of the packet. If no packet is to be sent out, the + * uip_len variable is set to 0. + * + * The usual way of calling the function is presented by the source + * code below. + \code + uip_len = devicedriver_poll(); + if(uip_len > 0) { + uip_input(); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note If you are writing a uIP device driver that needs ARP + * (Address Resolution Protocol), e.g., when running uIP over + * Ethernet, you will need to call the uIP ARP code before calling + * this function: + \code + #define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + uip_len = ethernet_devicedrver_poll(); + if(uip_len > 0) { + if(BUF->type == HTONS(UIP_ETHTYPE_IP)) { + uip_arp_ipin(); + uip_input(); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + if(uip_len > 0) { + ethernet_devicedriver_send(); + } + } + \endcode + * + * \hideinitializer + */ +#define uip_input() uip_process(UIP_DATA) + +/** + * Periodic processing for a connection identified by its number. + * + * This function does the necessary periodic processing (timers, + * polling) for a uIP TCP conneciton, and should be called when the + * periodic uIP timer goes off. It should be called for every + * connection, regardless of whether they are open of closed. + * + * When the function returns, it may have an outbound packet waiting + * for service in the uIP packet buffer, and if so the uip_len + * variable is set to a value larger than zero. The device driver + * should be called to send out the packet. + * + * The ususal way of calling the function is through a for() loop like + * this: + \code + for(i = 0; i < UIP_CONNS; ++i) { + uip_periodic(i); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note If you are writing a uIP device driver that needs ARP + * (Address Resolution Protocol), e.g., when running uIP over + * Ethernet, you will need to call the uip_arp_out() function before + * calling the device driver: + \code + for(i = 0; i < UIP_CONNS; ++i) { + uip_periodic(i); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } + \endcode + * + * \param conn The number of the connection which is to be periodically polled. + * + * \hideinitializer + */ +#define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \ + uip_process(UIP_TIMER); } while (0) + +/** + * + * + */ +#define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED) + +/** + * Perform periodic processing for a connection identified by a pointer + * to its structure. + * + * Same as uip_periodic() but takes a pointer to the actual uip_conn + * struct instead of an integer as its argument. This function can be + * used to force periodic processing of a specific connection. + * + * \param conn A pointer to the uip_conn struct for the connection to + * be processed. + * + * \hideinitializer + */ +#define uip_periodic_conn(conn) do { uip_conn = conn; \ + uip_process(UIP_TIMER); } while (0) + +/** + * Reuqest that a particular connection should be polled. + * + * Similar to uip_periodic_conn() but does not perform any timer + * processing. The application is polled for new data. + * + * \param conn A pointer to the uip_conn struct for the connection to + * be processed. + * + * \hideinitializer + */ +#define uip_poll_conn(conn) do { uip_conn = conn; \ + uip_process(UIP_POLL_REQUEST); } while (0) + + +#if UIP_UDP +/** + * Periodic processing for a UDP connection identified by its number. + * + * This function is essentially the same as uip_periodic(), but for + * UDP connections. It is called in a similar fashion as the + * uip_periodic() function: + \code + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note As for the uip_periodic() function, special care has to be + * taken when using uIP together with ARP and Ethernet: + \code + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } + \endcode + * + * \param conn The number of the UDP connection to be processed. + * + * \hideinitializer + */ +#define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \ + uip_process(UIP_UDP_TIMER); } while (0) + +/** + * Periodic processing for a UDP connection identified by a pointer to + * its structure. + * + * Same as uip_udp_periodic() but takes a pointer to the actual + * uip_conn struct instead of an integer as its argument. This + * function can be used to force periodic processing of a specific + * connection. + * + * \param conn A pointer to the uip_udp_conn struct for the connection + * to be processed. + * + * \hideinitializer + */ +#define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \ + uip_process(UIP_UDP_TIMER); } while (0) + + +#endif /* UIP_UDP */ + +/** + * The uIP packet buffer. + * + * The uip_buf array is used to hold incoming and outgoing + * packets. The device driver should place incoming data into this + * buffer. When sending data, the device driver should read the link + * level headers and the TCP/IP headers from this buffer. The size of + * the link level headers is configured by the UIP_LLH_LEN define. + * + * \note The application data need not be placed in this buffer, so + * the device driver must read it from the place pointed to by the + * uip_appdata pointer as illustrated by the following example: + \code + void + devicedriver_send(void) + { + hwsend(&uip_buf[0], UIP_LLH_LEN); + if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) { + hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN); + } else { + hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN); + hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN); + } + } + \endcode + */ +extern u8_t uip_buf[UIP_BUFSIZE+2]; + +/** @} */ + +/*---------------------------------------------------------------------------*/ +/* Functions that are used by the uIP application program. Opening and + * closing connections, sending and receiving data, etc. is all + * handled by the functions below. +*/ +/** + * \defgroup uipappfunc uIP application functions + * @{ + * + * Functions used by an application running of top of uIP. + */ + +/** + * Start listening to the specified port. + * + * \note Since this function expects the port number in network byte + * order, a conversion using HTONS() or uip_htons() is necessary. + * + \code + uip_listen(HTONS(80)); + \endcode + * + * \param port A 16-bit port number in network byte order. + */ +void uip_listen(u16_t port); + +/** + * Stop listening to the specified port. + * + * \note Since this function expects the port number in network byte + * order, a conversion using HTONS() or uip_htons() is necessary. + * + \code + uip_unlisten(HTONS(80)); + \endcode + * + * \param port A 16-bit port number in network byte order. + */ +void uip_unlisten(u16_t port); + +/** + * Connect to a remote host using TCP. + * + * This function is used to start a new connection to the specified + * port on the specied host. It allocates a new connection identifier, + * sets the connection to the SYN_SENT state and sets the + * retransmission timer to 0. This will cause a TCP SYN segment to be + * sent out the next time this connection is periodically processed, + * which usually is done within 0.5 seconds after the call to + * uip_connect(). + * + * \note This function is avaliable only if support for active open + * has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h. + * + * \note Since this function requires the port number to be in network + * byte order, a conversion using HTONS() or uip_htons() is necessary. + * + \code + uip_ipaddr_t ipaddr; + + uip_ipaddr(&ipaddr, 192,168,1,2); + uip_connect(&ipaddr, HTONS(80)); + \endcode + * + * \param ripaddr The IP address of the remote hot. + * + * \param port A 16-bit port number in network byte order. + * + * \return A pointer to the uIP connection identifier for the new connection, + * or NULL if no connection could be allocated. + * + */ +struct uip_conn *uip_connect(uip_ipaddr_t *ripaddr, u16_t port); + + + +/** + * \internal + * + * Check if a connection has outstanding (i.e., unacknowledged) data. + * + * \param conn A pointer to the uip_conn structure for the connection. + * + * \hideinitializer + */ +#define uip_outstanding(conn) ((conn)->len) + +/** + * Send data on the current connection. + * + * This function is used to send out a single segment of TCP + * data. Only applications that have been invoked by uIP for event + * processing can send data. + * + * The amount of data that actually is sent out after a call to this + * funcion is determined by the maximum amount of data TCP allows. uIP + * will automatically crop the data so that only the appropriate + * amount of data is sent. The function uip_mss() can be used to query + * uIP for the amount of data that actually will be sent. + * + * \note This function does not guarantee that the sent data will + * arrive at the destination. If the data is lost in the network, the + * application will be invoked with the uip_rexmit() event being + * set. The application will then have to resend the data using this + * function. + * + * \param data A pointer to the data which is to be sent. + * + * \param len The maximum amount of data bytes to be sent. + * + * \hideinitializer + */ +void uip_send(const void *data, int len); + +/** + * The length of any incoming data that is currently avaliable (if avaliable) + * in the uip_appdata buffer. + * + * The test function uip_data() must first be used to check if there + * is any data available at all. + * + * \hideinitializer + */ +/*void uip_datalen(void);*/ +#define uip_datalen() uip_len + +/** + * The length of any out-of-band data (urgent data) that has arrived + * on the connection. + * + * \note The configuration parameter UIP_URGDATA must be set for this + * function to be enabled. + * + * \hideinitializer + */ +#define uip_urgdatalen() uip_urglen + +/** + * Close the current connection. + * + * This function will close the current connection in a nice way. + * + * \hideinitializer + */ +#define uip_close() (uip_flags = UIP_CLOSE) + +/** + * Abort the current connection. + * + * This function will abort (reset) the current connection, and is + * usually used when an error has occured that prevents using the + * uip_close() function. + * + * \hideinitializer + */ +#define uip_abort() (uip_flags = UIP_ABORT) + +/** + * Tell the sending host to stop sending data. + * + * This function will close our receiver's window so that we stop + * receiving data for the current connection. + * + * \hideinitializer + */ +#define uip_stop() (uip_conn->tcpstateflags |= UIP_STOPPED) + +/** + * Find out if the current connection has been previously stopped with + * uip_stop(). + * + * \hideinitializer + */ +#define uip_stopped(conn) ((conn)->tcpstateflags & UIP_STOPPED) + +/** + * Restart the current connection, if is has previously been stopped + * with uip_stop(). + * + * This function will open the receiver's window again so that we + * start receiving data for the current connection. + * + * \hideinitializer + */ +#define uip_restart() do { uip_flags |= UIP_NEWDATA; \ + uip_conn->tcpstateflags &= ~UIP_STOPPED; \ + } while(0) + + +/* uIP tests that can be made to determine in what state the current + connection is, and what the application function should do. */ + +/** + * Is the current connection a UDP connection? + * + * This function checks whether the current connection is a UDP connection. + * + * \hideinitializer + * + */ +#define uip_udpconnection() (uip_conn == NULL) + +/** + * Is new incoming data available? + * + * Will reduce to non-zero if there is new data for the application + * present at the uip_appdata pointer. The size of the data is + * avaliable through the uip_len variable. + * + * \hideinitializer + */ +#define uip_newdata() (uip_flags & UIP_NEWDATA) + +/** + * Has previously sent data been acknowledged? + * + * Will reduce to non-zero if the previously sent data has been + * acknowledged by the remote host. This means that the application + * can send new data. + * + * \hideinitializer + */ +#define uip_acked() (uip_flags & UIP_ACKDATA) + +/** + * Has the connection just been connected? + * + * Reduces to non-zero if the current connection has been connected to + * a remote host. This will happen both if the connection has been + * actively opened (with uip_connect()) or passively opened (with + * uip_listen()). + * + * \hideinitializer + */ +#define uip_connected() (uip_flags & UIP_CONNECTED) + +/** + * Has the connection been closed by the other end? + * + * Is non-zero if the connection has been closed by the remote + * host. The application may then do the necessary clean-ups. + * + * \hideinitializer + */ +#define uip_closed() (uip_flags & UIP_CLOSE) + +/** + * Has the connection been aborted by the other end? + * + * Non-zero if the current connection has been aborted (reset) by the + * remote host. + * + * \hideinitializer + */ +#define uip_aborted() (uip_flags & UIP_ABORT) + +/** + * Has the connection timed out? + * + * Non-zero if the current connection has been aborted due to too many + * retransmissions. + * + * \hideinitializer + */ +#define uip_timedout() (uip_flags & UIP_TIMEDOUT) + +/** + * Do we need to retransmit previously data? + * + * Reduces to non-zero if the previously sent data has been lost in + * the network, and the application should retransmit it. The + * application should send the exact same data as it did the last + * time, using the uip_send() function. + * + * \hideinitializer + */ +#define uip_rexmit() (uip_flags & UIP_REXMIT) + +/** + * Is the connection being polled by uIP? + * + * Is non-zero if the reason the application is invoked is that the + * current connection has been idle for a while and should be + * polled. + * + * The polling event can be used for sending data without having to + * wait for the remote host to send data. + * + * \hideinitializer + */ +#define uip_poll() (uip_flags & UIP_POLL) + +/** + * Get the initial maxium segment size (MSS) of the current + * connection. + * + * \hideinitializer + */ +#define uip_initialmss() (uip_conn->initialmss) + +/** + * Get the current maxium segment size that can be sent on the current + * connection. + * + * The current maxiumum segment size that can be sent on the + * connection is computed from the receiver's window and the MSS of + * the connection (which also is available by calling + * uip_initialmss()). + * + * \hideinitializer + */ +#define uip_mss() (uip_conn->mss) + +/** + * Set up a new UDP connection. + * + * This function sets up a new UDP connection. The function will + * automatically allocate an unused local port for the new + * connection. However, another port can be chosen by using the + * uip_udp_bind() call, after the uip_udp_new() function has been + * called. + * + * Example: + \code + uip_ipaddr_t addr; + struct uip_udp_conn *c; + + uip_ipaddr(&addr, 192,168,2,1); + c = uip_udp_new(&addr, HTONS(12345)); + if(c != NULL) { + uip_udp_bind(c, HTONS(12344)); + } + \endcode + * \param ripaddr The IP address of the remote host. + * + * \param rport The remote port number in network byte order. + * + * \return The uip_udp_conn structure for the new connection or NULL + * if no connection could be allocated. + */ +struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport); + +/** + * Removed a UDP connection. + * + * \param conn A pointer to the uip_udp_conn structure for the connection. + * + * \hideinitializer + */ +#define uip_udp_remove(conn) (conn)->lport = 0 + +/** + * Bind a UDP connection to a local port. + * + * \param conn A pointer to the uip_udp_conn structure for the + * connection. + * + * \param port The local port number, in network byte order. + * + * \hideinitializer + */ +#define uip_udp_bind(conn, port) (conn)->lport = port + +/** + * Send a UDP datagram of length len on the current connection. + * + * This function can only be called in response to a UDP event (poll + * or newdata). The data must be present in the uip_buf buffer, at the + * place pointed to by the uip_appdata pointer. + * + * \param len The length of the data in the uip_buf buffer. + * + * \hideinitializer + */ +#define uip_udp_send(len) uip_send((char *)uip_appdata, len) + +/** @} */ + +/* uIP convenience and converting functions. */ + +/** + * \defgroup uipconvfunc uIP conversion functions + * @{ + * + * These functions can be used for converting between different data + * formats used by uIP. + */ + +/** + * Construct an IP address from four bytes. + * + * This function constructs an IP address of the type that uIP handles + * internally from four bytes. The function is handy for specifying IP + * addresses to use with e.g. the uip_connect() function. + * + * Example: + \code + uip_ipaddr_t ipaddr; + struct uip_conn *c; + + uip_ipaddr(&ipaddr, 192,168,1,2); + c = uip_connect(&ipaddr, HTONS(80)); + \endcode + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the IP address. + * + * \param addr0 The first octet of the IP address. + * \param addr1 The second octet of the IP address. + * \param addr2 The third octet of the IP address. + * \param addr3 The forth octet of the IP address. + * + * \hideinitializer + */ +#define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \ + ((u16_t *)(addr))[0] = HTONS(((addr0) << 8) | (addr1)); \ + ((u16_t *)(addr))[1] = HTONS(((addr2) << 8) | (addr3)); \ + } while(0) + +/** + * Construct an IPv6 address from eight 16-bit words. + * + * This function constructs an IPv6 address. + * + * \hideinitializer + */ +#define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do { \ + ((u16_t *)(addr))[0] = HTONS((addr0)); \ + ((u16_t *)(addr))[1] = HTONS((addr1)); \ + ((u16_t *)(addr))[2] = HTONS((addr2)); \ + ((u16_t *)(addr))[3] = HTONS((addr3)); \ + ((u16_t *)(addr))[4] = HTONS((addr4)); \ + ((u16_t *)(addr))[5] = HTONS((addr5)); \ + ((u16_t *)(addr))[6] = HTONS((addr6)); \ + ((u16_t *)(addr))[7] = HTONS((addr7)); \ + } while(0) + +/** + * Copy an IP address to another IP address. + * + * Copies an IP address from one place to another. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr_copy(&ipaddr2, &ipaddr1); + \endcode + * + * \param dest The destination for the copy. + * \param src The source from where to copy. + * + * \hideinitializer + */ +#if !UIP_CONF_IPV6 +#define uip_ipaddr_copy(dest, src) do { \ + ((u16_t *)dest)[0] = ((u16_t *)src)[0]; \ + ((u16_t *)dest)[1] = ((u16_t *)src)[1]; \ + } while(0) +#else /* !UIP_CONF_IPV6 */ +#define uip_ipaddr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t)) +#endif /* !UIP_CONF_IPV6 */ + +/** + * Compare two IP addresses + * + * Compares two IP addresses. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) { + printf("They are the same"); + } + \endcode + * + * \param addr1 The first IP address. + * \param addr2 The second IP address. + * + * \hideinitializer + */ +#if !UIP_CONF_IPV6 +#define uip_ipaddr_cmp(addr1, addr2) (((u16_t *)addr1)[0] == ((u16_t *)addr2)[0] && \ + ((u16_t *)addr1)[1] == ((u16_t *)addr2)[1]) +#else /* !UIP_CONF_IPV6 */ +#define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0) +#endif /* !UIP_CONF_IPV6 */ + +/** + * Compare two IP addresses with netmasks + * + * Compares two IP addresses with netmasks. The masks are used to mask + * out the bits that are to be compared. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2, mask; + + uip_ipaddr(&mask, 255,255,255,0); + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr(&ipaddr2, 192,16,1,3); + if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) { + printf("They are the same"); + } + \endcode + * + * \param addr1 The first IP address. + * \param addr2 The second IP address. + * \param mask The netmask. + * + * \hideinitializer + */ +#define uip_ipaddr_maskcmp(addr1, addr2, mask) \ + (((((u16_t *)addr1)[0] & ((u16_t *)mask)[0]) == \ + (((u16_t *)addr2)[0] & ((u16_t *)mask)[0])) && \ + ((((u16_t *)addr1)[1] & ((u16_t *)mask)[1]) == \ + (((u16_t *)addr2)[1] & ((u16_t *)mask)[1]))) + + +/** + * Mask out the network part of an IP address. + * + * Masks out the network part of an IP address, given the address and + * the netmask. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2, netmask; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr(&netmask, 255,255,255,0); + uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask); + \endcode + * + * In the example above, the variable "ipaddr2" will contain the IP + * address 192.168.1.0. + * + * \param dest Where the result is to be placed. + * \param src The IP address. + * \param mask The netmask. + * + * \hideinitializer + */ +#define uip_ipaddr_mask(dest, src, mask) do { \ + ((u16_t *)dest)[0] = ((u16_t *)src)[0] & ((u16_t *)mask)[0]; \ + ((u16_t *)dest)[1] = ((u16_t *)src)[1] & ((u16_t *)mask)[1]; \ + } while(0) + +/** + * Pick the first octet of an IP address. + * + * Picks out the first octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr1(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 1. + * + * \hideinitializer + */ +#define uip_ipaddr1(addr) (uip_htons(((u16_t *)(addr))[0]) >> 8) + +/** + * Pick the second octet of an IP address. + * + * Picks out the second octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr2(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 2. + * + * \hideinitializer + */ +#define uip_ipaddr2(addr) (uip_htons(((u16_t *)(addr))[0]) & 0xff) + +/** + * Pick the third octet of an IP address. + * + * Picks out the third octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr3(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 3. + * + * \hideinitializer + */ +#define uip_ipaddr3(addr) (uip_htons(((u16_t *)(addr))[1]) >> 8) + +/** + * Pick the fourth octet of an IP address. + * + * Picks out the fourth octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr4(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 4. + * + * \hideinitializer + */ +#define uip_ipaddr4(addr) (uip_htons(((u16_t *)(addr))[1]) & 0xff) + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This macro is primarily used for converting constants from host + * byte order to network byte order. For converting variables to + * network byte order, use the uip_htons() function instead. + * + * \hideinitializer + */ +#ifndef HTONS +# if UIP_BYTE_ORDER == UIP_BIG_ENDIAN +# define HTONS(n) (n) +# else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ +# define HTONS(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8)) +# endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ +#else +#error "HTONS already defined!" +#endif /* HTONS */ + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This function is primarily used for converting variables from host + * byte order to network byte order. For converting constants to + * network byte order, use the HTONS() macro instead. + */ + +#ifndef uip_htons +u16_t uip_htons(u16_t val); +#endif /* uip_htons */ +#ifndef ntohs +#define ntohs uip_htons +#endif + +/** @} */ + +/** + * Pointer to the application data in the packet buffer. + * + * This pointer points to the application data when the application is + * called. If the application wishes to send data, the application may + * use this space to write the data into before calling uip_send(). + */ +extern volatile u8_t *uip_appdata; + +#if UIP_URGDATA > 0 +/* u8_t *uip_urgdata: + * + * This pointer points to any urgent data that has been received. Only + * present if compiled with support for urgent data (UIP_URGDATA). + */ +extern void *uip_urgdata; +#endif /* UIP_URGDATA > 0 */ + + +/** + * \defgroup uipdrivervars Variables used in uIP device drivers + * @{ + * + * uIP has a few global variables that are used in device drivers for + * uIP. + */ + +/** + * The length of the packet in the uip_buf buffer. + * + * The global variable uip_len holds the length of the packet in the + * uip_buf buffer. + * + * When the network device driver calls the uIP input function, + * uip_len should be set to the length of the packet in the uip_buf + * buffer. + * + * When sending packets, the device driver should use the contents of + * the uip_len variable to determine the length of the outgoing + * packet. + * + */ +extern u16_t uip_len; + +/** @} */ + +#if UIP_URGDATA > 0 +extern u16_t uip_urglen, uip_surglen; +#endif /* UIP_URGDATA > 0 */ + + +/** + * Representation of a uIP TCP connection. + * + * The uip_conn structure is used for identifying a connection. All + * but one field in the structure are to be considered read-only by an + * application. The only exception is the appstate field whos purpose + * is to let the application store application-specific state (e.g., + * file pointers) for the connection. The type of this field is + * configured in the "uipopt.h" header file. + */ +struct uip_conn { + uip_ipaddr_t ripaddr; /**< The IP address of the remote host. */ + + u16_t lport; /**< The local TCP port, in network byte order. */ + u16_t rport; /**< The local remote TCP port, in network byte + order. */ + + u8_t rcv_nxt[4]; /**< The sequence number that we expect to + receive next. */ + u8_t snd_nxt[4]; /**< The sequence number that was last sent by + us. */ + u16_t len; /**< Length of the data that was previously sent. */ + u16_t mss; /**< Current maximum segment size for the + connection. */ + u16_t initialmss; /**< Initial maximum segment size for the + connection. */ + u8_t sa; /**< Retransmission time-out calculation state + variable. */ + u8_t sv; /**< Retransmission time-out calculation state + variable. */ + u8_t rto; /**< Retransmission time-out. */ + u8_t tcpstateflags; /**< TCP state and flags. */ + u8_t timer; /**< The retransmission timer. */ + u8_t nrtx; /**< The number of retransmissions for the last + segment sent. */ + + /** The application state. */ + uip_tcp_appstate_t appstate; +}; + + +/** + * Pointer to the current TCP connection. + * + * The uip_conn pointer can be used to access the current TCP + * connection. + */ +extern struct uip_conn *uip_conn; +/* The array containing all uIP connections. */ +extern struct uip_conn uip_conns[UIP_CONNS]; +/** + * \addtogroup uiparch + * @{ + */ + +/** + * 4-byte array used for the 32-bit sequence number calculations. + */ +extern u8_t uip_acc32[4]; + +/** @} */ + + +#if UIP_UDP +/** + * Representation of a uIP UDP connection. + */ +struct uip_udp_conn { + uip_ipaddr_t ripaddr; /**< The IP address of the remote peer. */ + u16_t lport; /**< The local port number in network byte order. */ + u16_t rport; /**< The remote port number in network byte order. */ + u8_t ttl; /**< Default time-to-live. */ + + /** The application state. */ + uip_udp_appstate_t appstate; +}; + +/** + * The current UDP connection. + */ +extern struct uip_udp_conn *uip_udp_conn; +extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; +#endif /* UIP_UDP */ + +/** + * The structure holding the TCP/IP statistics that are gathered if + * UIP_STATISTICS is set to 1. + * + */ +struct uip_stats { + struct { + uip_stats_t drop; /**< Number of dropped packets at the IP + layer. */ + uip_stats_t recv; /**< Number of received packets at the IP + layer. */ + uip_stats_t sent; /**< Number of sent packets at the IP + layer. */ + uip_stats_t vhlerr; /**< Number of packets dropped due to wrong + IP version or header length. */ + uip_stats_t hblenerr; /**< Number of packets dropped due to wrong + IP length, high byte. */ + uip_stats_t lblenerr; /**< Number of packets dropped due to wrong + IP length, low byte. */ + uip_stats_t fragerr; /**< Number of packets dropped since they + were IP fragments. */ + uip_stats_t chkerr; /**< Number of packets dropped due to IP + checksum errors. */ + uip_stats_t protoerr; /**< Number of packets dropped since they + were neither ICMP, UDP nor TCP. */ + } ip; /**< IP statistics. */ + struct { + uip_stats_t drop; /**< Number of dropped ICMP packets. */ + uip_stats_t recv; /**< Number of received ICMP packets. */ + uip_stats_t sent; /**< Number of sent ICMP packets. */ + uip_stats_t typeerr; /**< Number of ICMP packets with a wrong + type. */ + } icmp; /**< ICMP statistics. */ + struct { + uip_stats_t drop; /**< Number of dropped TCP segments. */ + uip_stats_t recv; /**< Number of recived TCP segments. */ + uip_stats_t sent; /**< Number of sent TCP segments. */ + uip_stats_t chkerr; /**< Number of TCP segments with a bad + checksum. */ + uip_stats_t ackerr; /**< Number of TCP segments with a bad ACK + number. */ + uip_stats_t rst; /**< Number of recevied TCP RST (reset) segments. */ + uip_stats_t rexmit; /**< Number of retransmitted TCP segments. */ + uip_stats_t syndrop; /**< Number of dropped SYNs due to too few + connections was avaliable. */ + uip_stats_t synrst; /**< Number of SYNs for closed ports, + triggering a RST. */ + } tcp; /**< TCP statistics. */ +#if UIP_UDP + struct { + uip_stats_t drop; /**< Number of dropped UDP segments. */ + uip_stats_t recv; /**< Number of recived UDP segments. */ + uip_stats_t sent; /**< Number of sent UDP segments. */ + uip_stats_t chkerr; /**< Number of UDP segments with a bad + checksum. */ + } udp; /**< UDP statistics. */ +#endif /* UIP_UDP */ +}; + +/** + * The uIP TCP/IP statistics. + * + * This is the variable in which the uIP TCP/IP statistics are gathered. + */ +extern struct uip_stats uip_stat; + + +/*---------------------------------------------------------------------------*/ +/* All the stuff below this point is internal to uIP and should not be + * used directly by an application or by a device driver. + */ +/*---------------------------------------------------------------------------*/ +/* u8_t uip_flags: + * + * When the application is called, uip_flags will contain the flags + * that are defined in this file. Please read below for more + * infomation. + */ +extern u8_t uip_flags; + +/* The following flags may be set in the global variable uip_flags + before calling the application callback. The UIP_ACKDATA, + UIP_NEWDATA, and UIP_CLOSE flags may both be set at the same time, + whereas the others are mutualy exclusive. Note that these flags + should *NOT* be accessed directly, but only through the uIP + functions/macros. */ + +#define UIP_ACKDATA 1 /* Signifies that the outstanding data was + acked and the application should send + out new data instead of retransmitting + the last data. */ +#define UIP_NEWDATA 2 /* Flags the fact that the peer has sent + us new data. */ +#define UIP_REXMIT 4 /* Tells the application to retransmit the + data that was last sent. */ +#define UIP_POLL 8 /* Used for polling the application, to + check if the application has data that + it wants to send. */ +#define UIP_CLOSE 16 /* The remote host has closed the + connection, thus the connection has + gone away. Or the application signals + that it wants to close the + connection. */ +#define UIP_ABORT 32 /* The remote host has aborted the + connection, thus the connection has + gone away. Or the application signals + that it wants to abort the + connection. */ +#define UIP_CONNECTED 64 /* We have got a connection from a remote + host and have set up a new connection + for it, or an active connection has + been successfully established. */ + +#define UIP_TIMEDOUT 128 /* The connection has been aborted due to + too many retransmissions. */ + +/* uip_process(flag): + * + * The actual uIP function which does all the work. + */ +void uip_process(u8_t flag); + +/* The following flags are passed as an argument to the uip_process() + function. They are used to distinguish between the two cases where + uip_process() is called. It can be called either because we have + incoming data that should be processed, or because the periodic + timer has fired. These values are never used directly, but only in + the macrose defined in this file. */ + +#define UIP_DATA 1 /* Tells uIP that there is incoming + data in the uip_buf buffer. The + length of the data is stored in the + global variable uip_len. */ +#define UIP_TIMER 2 /* Tells uIP that the periodic timer + has fired. */ +#define UIP_POLL_REQUEST 3 /* Tells uIP that a connection should + be polled. */ +#define UIP_UDP_SEND_CONN 4 /* Tells uIP that a UDP datagram + should be constructed in the + uip_buf buffer. */ +#if UIP_UDP +#define UIP_UDP_TIMER 5 +#endif /* UIP_UDP */ + +/* The TCP states used in the uip_conn->tcpstateflags. */ +#define UIP_CLOSED 0 +#define UIP_SYN_RCVD 1 +#define UIP_SYN_SENT 2 +#define UIP_ESTABLISHED 3 +#define UIP_FIN_WAIT_1 4 +#define UIP_FIN_WAIT_2 5 +#define UIP_CLOSING 6 +#define UIP_TIME_WAIT 7 +#define UIP_LAST_ACK 8 +#define UIP_TS_MASK 15 + +#define UIP_STOPPED 16 + +/* The TCP and IP headers. */ +struct uip_tcpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcflow; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IPv4 header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* TCP header. */ + u16_t srcport, + destport; + u8_t seqno[4], + ackno[4], + tcpoffset, + flags, + wnd[2]; + u16_t tcpchksum; + u8_t urgp[2]; + u8_t optdata[4]; +}; + +/* The ICMP and IP headers. */ +struct uip_icmpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcf; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IPv4 header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* ICMP (echo) header. */ + u8_t type, icode; + u16_t icmpchksum; +#if !UIP_CONF_IPV6 + u16_t id, seqno; +#else /* !UIP_CONF_IPV6 */ + u8_t flags, reserved1, reserved2, reserved3; + u8_t icmp6data[16]; + u8_t options[1]; +#endif /* !UIP_CONF_IPV6 */ +}; + + +/* The UDP and IP headers. */ +struct uip_udpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcf; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IP header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* UDP header. */ + u16_t srcport, + destport; + u16_t udplen; + u16_t udpchksum; +}; + + + +/** + * The buffer size available for user data in the \ref uip_buf buffer. + * + * This macro holds the available size for user data in the \ref + * uip_buf buffer. The macro is intended to be used for checking + * bounds of available user data. + * + * Example: + \code + snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i); + \endcode + * + * \hideinitializer + */ +#define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) + + +#define UIP_PROTO_ICMP 1 +#define UIP_PROTO_TCP 6 +#define UIP_PROTO_UDP 17 +#define UIP_PROTO_ICMP6 58 + +/* Header sizes. */ +#if UIP_CONF_IPV6 +#define UIP_IPH_LEN 40 +#else /* UIP_CONF_IPV6 */ +#define UIP_IPH_LEN 20 /* Size of IP header */ +#endif /* UIP_CONF_IPV6 */ +#define UIP_UDPH_LEN 8 /* Size of UDP header */ +#define UIP_TCPH_LEN 20 /* Size of TCP header */ +#define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN) /* Size of IP + + UDP + header */ +#define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN) /* Size of IP + + TCP + header */ +#define UIP_TCPIP_HLEN UIP_IPTCPH_LEN + + +#if UIP_FIXEDADDR +extern const uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; +#else /* UIP_FIXEDADDR */ +extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; +#endif /* UIP_FIXEDADDR */ + + + +/** + * Representation of a 48-bit Ethernet address. + */ +struct uip_eth_addr { + u8_t addr[6]; +}; + +/** + * Calculate the Internet checksum over a buffer. + * + * The Internet checksum is the one's complement of the one's + * complement sum of all 16-bit words in the buffer. + * + * See RFC1071. + * + * \param buf A pointer to the buffer over which the checksum is to be + * computed. + * + * \param len The length of the buffer over which the checksum is to + * be computed. + * + * \return The Internet checksum of the buffer. + */ +u16_t uip_chksum(u16_t *buf, u16_t len); + +/** + * Calculate the IP header checksum of the packet header in uip_buf. + * + * The IP header checksum is the Internet checksum of the 20 bytes of + * the IP header. + * + * \return The IP header checksum of the IP header in the uip_buf + * buffer. + */ +u16_t uip_ipchksum(void); + +/** + * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. + * + * The TCP checksum is the Internet checksum of data contents of the + * TCP segment, and a pseudo-header as defined in RFC793. + * + * \return The TCP checksum of the TCP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_tcpchksum(void); + +/** + * Calculate the UDP checksum of the packet in uip_buf and uip_appdata. + * + * The UDP checksum is the Internet checksum of data contents of the + * UDP segment, and a pseudo-header as defined in RFC768. + * + * \return The UDP checksum of the UDP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_udpchksum(void); + + +#endif /* __UIP_H__ */ + + +/** @} */ diff --git a/components/net/uip/uip/uip_arch.h b/components/net/uip/uip/uip_arch.h new file mode 100644 index 0000000000..71fd84bf3c --- /dev/null +++ b/components/net/uip/uip/uip_arch.h @@ -0,0 +1,138 @@ +/** + * \addtogroup uip + * {@ + */ + +/** + * \defgroup uiparch Architecture specific uIP functions + * @{ + * + * The functions in the architecture specific module implement the IP + * check sum and 32-bit additions. + * + * The IP checksum calculation is the most computationally expensive + * operation in the TCP/IP stack and it therefore pays off to + * implement this in efficient assembler. The purpose of the uip-arch + * module is to let the checksum functions to be implemented in + * architecture specific assembler. + * + */ + +/** + * \file + * Declarations of architecture specific functions. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $ + * + */ + +#ifndef __UIP_ARCH_H__ +#define __UIP_ARCH_H__ + +#include "uip.h" + +/** + * Carry out a 32-bit addition. + * + * Because not all architectures for which uIP is intended has native + * 32-bit arithmetic, uIP uses an external C function for doing the + * required 32-bit additions in the TCP protocol processing. This + * function should add the two arguments and place the result in the + * global variable uip_acc32. + * + * \note The 32-bit integer pointed to by the op32 parameter and the + * result in the uip_acc32 variable are in network byte order (big + * endian). + * + * \param op32 A pointer to a 4-byte array representing a 32-bit + * integer in network byte order (big endian). + * + * \param op16 A 16-bit integer in host byte order. + */ +void uip_add32(u8_t *op32, u16_t op16); + +/** + * Calculate the Internet checksum over a buffer. + * + * The Internet checksum is the one's complement of the one's + * complement sum of all 16-bit words in the buffer. + * + * See RFC1071. + * + * \note This function is not called in the current version of uIP, + * but future versions might make use of it. + * + * \param buf A pointer to the buffer over which the checksum is to be + * computed. + * + * \param len The length of the buffer over which the checksum is to + * be computed. + * + * \return The Internet checksum of the buffer. + */ +u16_t uip_chksum(u16_t *buf, u16_t len); + +/** + * Calculate the IP header checksum of the packet header in uip_buf. + * + * The IP header checksum is the Internet checksum of the 20 bytes of + * the IP header. + * + * \return The IP header checksum of the IP header in the uip_buf + * buffer. + */ +u16_t uip_ipchksum(void); + +/** + * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. + * + * The TCP checksum is the Internet checksum of data contents of the + * TCP segment, and a pseudo-header as defined in RFC793. + * + * \note The uip_appdata pointer that points to the packet data may + * point anywhere in memory, so it is not possible to simply calculate + * the Internet checksum of the contents of the uip_buf buffer. + * + * \return The TCP checksum of the TCP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_tcpchksum(void); + +u16_t uip_udpchksum(void); + +/** @} */ +/** @} */ + +#endif /* __UIP_ARCH_H__ */ diff --git a/components/net/uip/uip/uip_arp.c b/components/net/uip/uip/uip_arp.c new file mode 100644 index 0000000000..75ade64921 --- /dev/null +++ b/components/net/uip/uip/uip_arp.c @@ -0,0 +1,423 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \defgroup uiparp uIP Address Resolution Protocol + * @{ + * + * The Address Resolution Protocol ARP is used for mapping between IP + * addresses and link level addresses such as the Ethernet MAC + * addresses. ARP uses broadcast queries to ask for the link level + * address of a known IP address and the host which is configured with + * the IP address for which the query was meant, will respond with its + * link level address. + * + * \note This ARP implementation only supports Ethernet. + */ + +/** + * \file + * Implementation of the ARP Address Resolution Protocol. + * \author Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip_arp.c,v 1.8 2006/06/02 23:36:21 adam Exp $ + * + */ + + +#include "uip_arp.h" + +#include + +struct arp_hdr { + struct uip_eth_hdr ethhdr; + u16_t hwtype; + u16_t protocol; + u8_t hwlen; + u8_t protolen; + u16_t opcode; + struct uip_eth_addr shwaddr; + u16_t sipaddr[2]; + struct uip_eth_addr dhwaddr; + u16_t dipaddr[2]; +}; + +struct ethip_hdr { + struct uip_eth_hdr ethhdr; + /* IP header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +}; + +#define ARP_REQUEST 1 +#define ARP_REPLY 2 + +#define ARP_HWTYPE_ETH 1 + +struct arp_entry { + u16_t ipaddr[2]; + struct uip_eth_addr ethaddr; + u8_t time; +}; + +static const struct uip_eth_addr broadcast_ethaddr = + {{0xff,0xff,0xff,0xff,0xff,0xff}}; +static const u16_t broadcast_ipaddr[2] = {0xffff,0xffff}; + +static struct arp_entry arp_table[UIP_ARPTAB_SIZE]; +static u16_t ipaddr[2]; +static u8_t i, c; + +static u8_t arptime; +static u8_t tmpage; + +#define BUF ((struct arp_hdr *)&uip_buf[0]) +#define IPBUF ((struct ethip_hdr *)&uip_buf[0]) +/*-----------------------------------------------------------------------------------*/ +/** + * Initialize the ARP module. + * + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_init(void) +{ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + memset(arp_table[i].ipaddr, 0, 4); + } +} +/*-----------------------------------------------------------------------------------*/ +/** + * Periodic ARP processing function. + * + * This function performs periodic timer processing in the ARP module + * and should be called at regular intervals. The recommended interval + * is 10 seconds between the calls. + * + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_timer(void) +{ + struct arp_entry *tabptr; + + ++arptime; + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 && + arptime - tabptr->time >= UIP_ARP_MAXAGE) { + memset(tabptr->ipaddr, 0, 4); + } + } + +} +/*-----------------------------------------------------------------------------------*/ +static void +uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr) +{ + register struct arp_entry *tabptr; + /* Walk through the ARP mapping table and try to find an entry to + update. If none is found, the IP -> MAC address mapping is + inserted in the ARP table. */ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + + tabptr = &arp_table[i]; + /* Only check those entries that are actually in use. */ + if(tabptr->ipaddr[0] != 0 && + tabptr->ipaddr[1] != 0) { + + /* Check if the source IP address of the incoming packet matches + the IP address in this ARP table entry. */ + if(ipaddr[0] == tabptr->ipaddr[0] && + ipaddr[1] == tabptr->ipaddr[1]) { + + /* An old entry found, update this and return. */ + memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); + tabptr->time = arptime; + + return; + } + } + } + + /* If we get here, no existing ARP table entry was found, so we + create one. */ + + /* First, we try to find an unused entry in the ARP table. */ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(tabptr->ipaddr[0] == 0 && + tabptr->ipaddr[1] == 0) { + break; + } + } + + /* If no unused entry is found, we try to find the oldest entry and + throw it away. */ + if(i == UIP_ARPTAB_SIZE) { + tmpage = 0; + c = 0; + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(arptime - tabptr->time > tmpage) { + tmpage = arptime - tabptr->time; + c = i; + } + } + i = c; + tabptr = &arp_table[i]; + } + + /* Now, i is the ARP table entry which we will fill with the new + information. */ + memcpy(tabptr->ipaddr, ipaddr, 4); + memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); + tabptr->time = arptime; +} +/*-----------------------------------------------------------------------------------*/ +/** + * ARP processing for incoming IP packets + * + * This function should be called by the device driver when an IP + * packet has been received. The function will check if the address is + * in the ARP cache, and if so the ARP cache entry will be + * refreshed. If no ARP cache entry was found, a new one is created. + * + * This function expects an IP packet with a prepended Ethernet header + * in the uip_buf[] buffer, and the length of the packet in the global + * variable uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +#if 0 +void +uip_arp_ipin(void) +{ + uip_len -= sizeof(struct uip_eth_hdr); + + /* Only insert/update an entry if the source IP address of the + incoming IP packet comes from a host on the local network. */ + if((IPBUF->srcipaddr[0] & uip_netmask[0]) != + (uip_hostaddr[0] & uip_netmask[0])) { + return; + } + if((IPBUF->srcipaddr[1] & uip_netmask[1]) != + (uip_hostaddr[1] & uip_netmask[1])) { + return; + } + uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src)); + + return; +} +#endif /* 0 */ +/*-----------------------------------------------------------------------------------*/ +/** + * ARP processing for incoming ARP packets. + * + * This function should be called by the device driver when an ARP + * packet has been received. The function will act differently + * depending on the ARP packet type: if it is a reply for a request + * that we previously sent out, the ARP cache will be filled in with + * the values from the ARP reply. If the incoming ARP packet is an ARP + * request for our IP address, an ARP reply packet is created and put + * into the uip_buf[] buffer. + * + * When the function returns, the value of the global variable uip_len + * indicates whether the device driver should send out a packet or + * not. If uip_len is zero, no packet should be sent. If uip_len is + * non-zero, it contains the length of the outbound packet that is + * present in the uip_buf[] buffer. + * + * This function expects an ARP packet with a prepended Ethernet + * header in the uip_buf[] buffer, and the length of the packet in the + * global variable uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_arpin(void) +{ + + if(uip_len < sizeof(struct arp_hdr)) { + uip_len = 0; + return; + } + uip_len = 0; + + switch(BUF->opcode) { + case HTONS(ARP_REQUEST): + /* ARP request. If it asked for our address, we send out a + reply. */ + if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { + /* First, we register the one who made the request in our ARP + table, since it is likely that we will do more communication + with this host in the future. */ + uip_arp_update(BUF->sipaddr, &BUF->shwaddr); + + /* The reply opcode is 2. */ + BUF->opcode = HTONS(2); + + memcpy(BUF->dhwaddr.addr, BUF->shwaddr.addr, 6); + memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); + memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6); + + BUF->dipaddr[0] = BUF->sipaddr[0]; + BUF->dipaddr[1] = BUF->sipaddr[1]; + BUF->sipaddr[0] = uip_hostaddr[0]; + BUF->sipaddr[1] = uip_hostaddr[1]; + + BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); + uip_len = sizeof(struct arp_hdr); + } + break; + case HTONS(ARP_REPLY): + /* ARP reply. We insert or update the ARP table if it was meant + for us. */ + if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { + uip_arp_update(BUF->sipaddr, &BUF->shwaddr); + } + break; + } + + return; +} +/*-----------------------------------------------------------------------------------*/ +/** + * Prepend Ethernet header to an outbound IP packet and see if we need + * to send out an ARP request. + * + * This function should be called before sending out an IP packet. The + * function checks the destination IP address of the IP packet to see + * what Ethernet MAC address that should be used as a destination MAC + * address on the Ethernet. + * + * If the destination IP address is in the local network (determined + * by logical ANDing of netmask and our IP address), the function + * checks the ARP cache to see if an entry for the destination IP + * address is found. If so, an Ethernet header is prepended and the + * function returns. If no ARP cache entry is found for the + * destination IP address, the packet in the uip_buf[] is replaced by + * an ARP request packet for the IP address. The IP packet is dropped + * and it is assumed that they higher level protocols (e.g., TCP) + * eventually will retransmit the dropped packet. + * + * If the destination IP address is not on the local network, the IP + * address of the default router is used instead. + * + * When the function returns, a packet is present in the uip_buf[] + * buffer, and the length of the packet is in the global variable + * uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_out(void) +{ + struct arp_entry *tabptr; + + /* Find the destination IP address in the ARP table and construct + the Ethernet header. If the destination IP addres isn't on the + local network, we use the default router's IP address instead. + + If not ARP table entry is found, we overwrite the original IP + packet with an ARP request for the IP address. */ + + /* First check if destination is a local broadcast. */ + if(uip_ipaddr_cmp(IPBUF->destipaddr, broadcast_ipaddr)) { + memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6); + } else { + /* Check if the destination address is on the local network. */ + if(!uip_ipaddr_maskcmp(IPBUF->destipaddr, uip_hostaddr, uip_netmask)) { + /* Destination address was not on the local network, so we need to + use the default router's IP address instead of the destination + address when determining the MAC address. */ + uip_ipaddr_copy(ipaddr, uip_draddr); + } else { + /* Else, we use the destination IP address. */ + uip_ipaddr_copy(ipaddr, IPBUF->destipaddr); + } + + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(uip_ipaddr_cmp(ipaddr, tabptr->ipaddr)) { + break; + } + } + + if(i == UIP_ARPTAB_SIZE) { + /* The destination address was not in our ARP table, so we + overwrite the IP packet with an ARP request. */ + + memset(BUF->ethhdr.dest.addr, 0xff, 6); + memset(BUF->dhwaddr.addr, 0x00, 6); + memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); + + uip_ipaddr_copy(BUF->dipaddr, ipaddr); + uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr); + BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */ + BUF->hwtype = HTONS(ARP_HWTYPE_ETH); + BUF->protocol = HTONS(UIP_ETHTYPE_IP); + BUF->hwlen = 6; + BUF->protolen = 4; + BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); + + uip_appdata = &uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN]; + + uip_len = sizeof(struct arp_hdr); + return; + } + + /* Build an ethernet header. */ + memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6); + } + memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + + IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP); + + uip_len += sizeof(struct uip_eth_hdr); +} +/*-----------------------------------------------------------------------------------*/ + +/** @} */ +/** @} */ diff --git a/components/net/uip/uip/uip_arp.h b/components/net/uip/uip/uip_arp.h new file mode 100644 index 0000000000..e32594da2c --- /dev/null +++ b/components/net/uip/uip/uip_arp.h @@ -0,0 +1,144 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \addtogroup uiparp + * @{ + */ + +/** + * \file + * Macros and definitions for the ARP module. + * \author Adam Dunkels + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $ + * + */ + +#ifndef __UIP_ARP_H__ +#define __UIP_ARP_H__ + +#include "uip.h" + + +extern struct uip_eth_addr uip_ethaddr; + +/** + * The Ethernet header. + */ +struct uip_eth_hdr { + struct uip_eth_addr dest; + struct uip_eth_addr src; + u16_t type; +}; + +#define UIP_ETHTYPE_ARP 0x0806 +#define UIP_ETHTYPE_IP 0x0800 +#define UIP_ETHTYPE_IP6 0x86dd + + +/* The uip_arp_init() function must be called before any of the other + ARP functions. */ +void uip_arp_init(void); + +/* The uip_arp_ipin() function should be called whenever an IP packet + arrives from the Ethernet. This function refreshes the ARP table or + inserts a new mapping if none exists. The function assumes that an + IP packet with an Ethernet header is present in the uip_buf buffer + and that the length of the packet is in the uip_len variable. */ +/*void uip_arp_ipin(void);*/ +#define uip_arp_ipin() + +/* The uip_arp_arpin() should be called when an ARP packet is received + by the Ethernet driver. This function also assumes that the + Ethernet frame is present in the uip_buf buffer. When the + uip_arp_arpin() function returns, the contents of the uip_buf + buffer should be sent out on the Ethernet if the uip_len variable + is > 0. */ +void uip_arp_arpin(void); + +/* The uip_arp_out() function should be called when an IP packet + should be sent out on the Ethernet. This function creates an + Ethernet header before the IP header in the uip_buf buffer. The + Ethernet header will have the correct Ethernet MAC destination + address filled in if an ARP table entry for the destination IP + address (or the IP address of the default router) is present. If no + such table entry is found, the IP packet is overwritten with an ARP + request and we rely on TCP to retransmit the packet that was + overwritten. In any case, the uip_len variable holds the length of + the Ethernet frame that should be transmitted. */ +void uip_arp_out(void); + +/* The uip_arp_timer() function should be called every ten seconds. It + is responsible for flushing old entries in the ARP table. */ +void uip_arp_timer(void); + +/** @} */ + +/** + * \addtogroup uipconffunc + * @{ + */ + + +/** + * Specifiy the Ethernet MAC address. + * + * The ARP code needs to know the MAC address of the Ethernet card in + * order to be able to respond to ARP queries and to generate working + * Ethernet headers. + * + * \note This macro only specifies the Ethernet MAC address to the ARP + * code. It cannot be used to change the MAC address of the Ethernet + * card. + * + * \param eaddr A pointer to a struct uip_eth_addr containing the + * Ethernet MAC address of the Ethernet card. + * + * \hideinitializer + */ +#define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \ + uip_ethaddr.addr[1] = eaddr.addr[1];\ + uip_ethaddr.addr[2] = eaddr.addr[2];\ + uip_ethaddr.addr[3] = eaddr.addr[3];\ + uip_ethaddr.addr[4] = eaddr.addr[4];\ + uip_ethaddr.addr[5] = eaddr.addr[5];} while(0) + +/** @} */ +/** @} */ + +#endif /* __UIP_ARP_H__ */ diff --git a/components/net/uip/uip/uip_clock.h b/components/net/uip/uip/uip_clock.h new file mode 100644 index 0000000000..f34d78fd64 --- /dev/null +++ b/components/net/uip/uip/uip_clock.h @@ -0,0 +1,88 @@ +/** + * \defgroup clock Clock interface + * + * The clock interface is the interface between the \ref timer "timer library" + * and the platform specific clock functionality. The clock + * interface must be implemented for each platform that uses the \ref + * timer "timer library". + * + * The clock interface does only one this: it measures time. The clock + * interface provides a macro, CLOCK_SECOND, which corresponds to one + * second of system time. + * + * \sa \ref timer "Timer library" + * + * @{ + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $ + */ +#ifndef __CLOCK_H__ +#define __CLOCK_H__ + +#include "clock-arch.h" + +/** + * Initialize the clock library. + * + * This function initializes the clock library and should be called + * from the main() function of the system. + * + */ +void clock_init(void); + +/** + * Get the current clock time. + * + * This function returns the current system clock time. + * + * \return The current clock time, measured in system ticks. + */ +clock_time_t clock_time(void); + +/** + * A second, measured in system clock time. + * + * \hideinitializer + */ +#ifdef CLOCK_CONF_SECOND +#define CLOCK_SECOND CLOCK_CONF_SECOND +#else +#define CLOCK_SECOND (clock_time_t)32 +#endif + +#endif /* __CLOCK_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/uip_timer.c b/components/net/uip/uip/uip_timer.c new file mode 100644 index 0000000000..a411c14d5a --- /dev/null +++ b/components/net/uip/uip/uip_timer.c @@ -0,0 +1,197 @@ +/** + * \addtogroup timer + * @{ + */ + +/** + * \file + * Timer library implementation. + * \author + * Adam Dunkels + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +#include "uip_clock.h" +#include "uip_timer.h" +//#include "rtconfig.h" + +/*---------------------------------------------------------------------------*/ +/** + * Set a timer. + * + * This function is used to set a timer for a time sometime in the + * future. The function timer_expired() will evaluate to true after + * the timer has expired. + * + * \param t A pointer to the timer + * \param interval The interval before the timer expires. + * + */ +void +timer_set(struct timer *t, clock_time_t interval) +{ + t->interval = interval; + t->start = clock_time(); +} +/*---------------------------------------------------------------------------*/ +/** + * Reset the timer with the same interval. + * + * This function resets the timer with the same interval that was + * given to the timer_set() function. The start point of the interval + * is the exact time that the timer last expired. Therefore, this + * function will cause the timer to be stable over time, unlike the + * timer_rester() function. + * + * \param t A pointer to the timer. + * + * \sa timer_restart() + */ +void +timer_reset(struct timer *t) +{ + t->start += t->interval; +} +/*---------------------------------------------------------------------------*/ +/** + * Restart the timer from the current point in time + * + * This function restarts a timer with the same interval that was + * given to the timer_set() function. The timer will start at the + * current time. + * + * \note A periodic timer will drift if this function is used to reset + * it. For preioric timers, use the timer_reset() function instead. + * + * \param t A pointer to the timer. + * + * \sa timer_reset() + */ +void +timer_restart(struct timer *t) +{ + t->start = clock_time(); +} +/*---------------------------------------------------------------------------*/ +/** + * Check if a timer has expired. + * + * This function tests if a timer has expired and returns true or + * false depending on its status. + * + * \param t A pointer to the timer + * + * \return Non-zero if the timer has expired, zero otherwise. + * + */ +#include "rtdef.h" +#include "uip-conf.h" +#include "uip.h" + +/* eth rx/tx thread */ +static struct rt_mailbox uip_mbox; +static struct rt_thread aa; + +static char uip_timeout_mb_pool[4 * 4]; +extern u16_t uip_len, uip_slen; + +void uip_timeout_entry2(void* parameter) +{ + + +} +void uip_timeout_entry(void* parameter)//由于TIMEOUT函数,不参与调度 +{ + // struct timer periodic_timer, arp_timer; + static uint8_t cnt; + int i; + /* post message to ethernet thread */ + + //if ((rt_sem_take(msg,RT_WAITING_NO)) != -RT_ETIMEOUT) + //if (timer_expired(&periodic_timer)) //5s enter once + { + //timer_reset(&periodic_timer); + for (i = 0; i < UIP_CONNS; i++) + { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if (uip_len > 0) + { + uip_arp_out(); + TransmitPacket(); + } + } +#if UIP_UDP + for (i = 0; i < UIP_UDP_CONNS; i++) // + { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if (uip_len > 0) + { + uip_arp_out(); + TransmitPacket(); + } + } +#endif /* UIP_UDP */ + + /* Call the ARP timer function every 10 seconds. */ + //if (timer_expired(&arp_timer)) + if (++cnt >= 2) //t + { + //timer_reset(&arp_timer); + uip_arp_timer(); + cnt = 0; + } + } + +} +int +timer_expired(struct timer *t) +{//潜在隐形bug + if ((clock_time() - t->start) >= (clock_time_t)t->interval) + { + //rt_mb_send(mbox,& + } + +} +/*---------------------------------------------------------------------------*/ + +/** @} */ diff --git a/components/net/uip/uip/uip_timer.h b/components/net/uip/uip/uip_timer.h new file mode 100644 index 0000000000..6d90e563a4 --- /dev/null +++ b/components/net/uip/uip/uip_timer.h @@ -0,0 +1,86 @@ +/** + * \defgroup timer Timer library + * + * The timer library provides functions for setting, resetting and + * restarting timers, and for checking if a timer has expired. An + * application must "manually" check if its timers have expired; this + * is not done automatically. + * + * A timer is declared as a \c struct \c timer and all access to the + * timer is made by a pointer to the declared timer. + * + * \note The timer library uses the \ref clock "Clock library" to + * measure time. Intervals should be specified in the format used by + * the clock library. + * + * @{ + */ + + +/** + * \file + * Timer library header file. + * \author + * Adam Dunkels + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $ + */ +#ifndef __TIMER_H__ +#define __TIMER_H__ + +#include "uip_clock.h" + +/** + * A timer. + * + * This structure is used for declaring a timer. The timer must be set + * with timer_set() before it can be used. + * + * \hideinitializer + */ +struct timer { + clock_time_t start; + clock_time_t interval; +}; + +void timer_set(struct timer *t, clock_time_t interval); +void timer_reset(struct timer *t); +void timer_restart(struct timer *t); +int timer_expired(struct timer *t); + +#endif /* __TIMER_H__ */ + +/** @} */ diff --git a/components/net/uip/uip/uiplib.c b/components/net/uip/uip/uiplib.c new file mode 100644 index 0000000000..cb5af2cd26 --- /dev/null +++ b/components/net/uip/uip/uiplib.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2004, Adam Dunkels and the Swedish Institute of + * Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uiplib.c,v 1.2 2006/06/12 08:00:31 adam Exp $ + * + */ + + +#include "uip.h" +#include "uiplib.h" + + +/*-----------------------------------------------------------------------------------*/ +unsigned char +uiplib_ipaddrconv(char *addrstr, unsigned char *ipaddr) +{ + unsigned char tmp; + char c; + unsigned char i, j; + + tmp = 0; + + for(i = 0; i < 4; ++i) { + j = 0; + do { + c = *addrstr; + ++j; + if(j > 4) { + return 0; + } + if(c == '.' || c == 0) { + *ipaddr = tmp; + ++ipaddr; + tmp = 0; + } else if(c >= '0' && c <= '9') { + tmp = (tmp * 10) + (c - '0'); + } else { + return 0; + } + ++addrstr; + } while(c != '.' && c != 0); + } + return 1; +} + +/*-----------------------------------------------------------------------------------*/ diff --git a/components/net/uip/uip/uiplib.h b/components/net/uip/uip/uiplib.h new file mode 100644 index 0000000000..c676849efc --- /dev/null +++ b/components/net/uip/uip/uiplib.h @@ -0,0 +1,71 @@ +/** + * \file + * Various uIP library functions. + * \author + * Adam Dunkels + * + */ + +/* + * Copyright (c) 2002, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uiplib.h,v 1.1 2006/06/07 09:15:19 adam Exp $ + * + */ +#ifndef __UIPLIB_H__ +#define __UIPLIB_H__ + +/** + * \addtogroup uipconvfunc + * @{ + */ + +/** + * Convert a textual representation of an IP address to a numerical representation. + * + * This function takes a textual representation of an IP address in + * the form a.b.c.d and converts it into a 4-byte array that can be + * used by other uIP functions. + * + * \param addrstr A pointer to a string containing the IP address in + * textual form. + * + * \param addr A pointer to a 4-byte array that will be filled in with + * the numerical representation of the address. + * + * \retval 0 If the IP address could not be parsed. + * \retval Non-zero If the IP address was parsed. + */ +unsigned char uiplib_ipaddrconv(char *addrstr, unsigned char *addr); + +/** @} */ + +#endif /* __UIPLIB_H__ */ diff --git a/components/net/uip/uip/uipopt.h b/components/net/uip/uip/uipopt.h new file mode 100644 index 0000000000..b1ef8e560f --- /dev/null +++ b/components/net/uip/uip/uipopt.h @@ -0,0 +1,539 @@ +/** + * \defgroup uipopt Configuration options for uIP + * @{ + * + * uIP is configured using the per-project configuration file + * uipopt.h. This file contains all compile-time options for uIP and + * should be tweaked to match each specific project. The uIP + * distribution contains a documented example "uipopt.h" that can be + * copied and modified for each project. + * + * \note Most of the configuration options in the uipopt.h should not + * be changed, but rather the per-project uip-conf.h file. + */ + +/** + * \file + * Configuration options for uIP. + * \author Adam Dunkels + * + * This file is used for tweaking various configuration options for + * uIP. You should make a copy of this file into one of your project's + * directories instead of editing this example "uipopt.h" file that + * comes with the uIP distribution. + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $ + * + */ + +#ifndef __UIPOPT_H__ +#define __UIPOPT_H__ + +#ifndef UIP_LITTLE_ENDIAN +#define UIP_LITTLE_ENDIAN 3412 +#endif /* UIP_LITTLE_ENDIAN */ +#ifndef UIP_BIG_ENDIAN +#define UIP_BIG_ENDIAN 1234 +#endif /* UIP_BIG_ENDIAN */ + +#include "uip-conf.h" + +/*------------------------------------------------------------------------------*/ + +/** + * \name Static configuration options + * @{ + * + * These configuration options can be used for setting the IP address + * settings statically, but only if UIP_FIXEDADDR is set to 1. The + * configuration options for a specific node includes IP address, + * netmask and default router as well as the Ethernet address. The + * netmask, default router and Ethernet address are appliciable only + * if uIP should be run over Ethernet. + * + * All of these should be changed to suit your project. +*/ + +/** + * Determines if uIP should use a fixed IP address or not. + * + * If uIP should use a fixed IP address, the settings are set in the + * uipopt.h file. If not, the macros uip_sethostaddr(), + * uip_setdraddr() and uip_setnetmask() should be used instead. + * + * \hideinitializer + */ +#define UIP_FIXEDADDR 0 + +/** + * Ping IP address asignment. + * + * uIP uses a "ping" packets for setting its own IP address if this + * option is set. If so, uIP will start with an empty IP address and + * the destination IP address of the first incoming "ping" (ICMP echo) + * packet will be used for setting the hosts IP address. + * + * \note This works only if UIP_FIXEDADDR is 0. + * + * \hideinitializer + */ +#ifdef UIP_CONF_PINGADDRCONF +#define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF +#else /* UIP_CONF_PINGADDRCONF */ +#define UIP_PINGADDRCONF 0 +#endif /* UIP_CONF_PINGADDRCONF */ + + +/** + * Specifies if the uIP ARP module should be compiled with a fixed + * Ethernet MAC address or not. + * + * If this configuration option is 0, the macro uip_setethaddr() can + * be used to specify the Ethernet address at run-time. + * + * \hideinitializer + */ +#define UIP_FIXEDETHADDR 0 + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name IP configuration options + * @{ + * + */ +/** + * The IP TTL (time to live) of IP packets sent by uIP. + * + * This should normally not be changed. + */ +#define UIP_TTL 64 + +/** + * Turn on support for IP packet reassembly. + * + * uIP supports reassembly of fragmented IP packets. This features + * requires an additonal amount of RAM to hold the reassembly buffer + * and the reassembly code size is approximately 700 bytes. The + * reassembly buffer is of the same size as the uip_buf buffer + * (configured by UIP_BUFSIZE). + * + * \note IP packet reassembly is not heavily tested. + * + * \hideinitializer + */ +#define UIP_REASSEMBLY 0 + +/** + * The maximum time an IP fragment should wait in the reassembly + * buffer before it is dropped. + * + */ +#define UIP_REASS_MAXAGE 40 + +/** @} */ + +/*------------------------------------------------------------------------------*/ +/** + * \name UDP configuration options + * @{ + */ + +/** + * Toggles wether UDP support should be compiled in or not. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP +#define UIP_UDP UIP_CONF_UDP +#else /* UIP_CONF_UDP */ +#define UIP_UDP 0 +#endif /* UIP_CONF_UDP */ + +/** + * Toggles if UDP checksums should be used or not. + * + * \note Support for UDP checksums is currently not included in uIP, + * so this option has no function. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP_CHECKSUMS +#define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS +#else +#define UIP_UDP_CHECKSUMS 0 +#endif + +/** + * The maximum amount of concurrent UDP connections. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP_CONNS +#define UIP_UDP_CONNS UIP_CONF_UDP_CONNS +#else /* UIP_CONF_UDP_CONNS */ +#define UIP_UDP_CONNS 10 +#endif /* UIP_CONF_UDP_CONNS */ + +/** + * The name of the function that should be called when UDP datagrams arrive. + * + * \hideinitializer + */ + + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name TCP configuration options + * @{ + */ + +/** + * Determines if support for opening connections from uIP should be + * compiled in. + * + * If the applications that are running on top of uIP for this project + * do not need to open outgoing TCP connections, this configration + * option can be turned off to reduce the code size of uIP. + * + * \hideinitializer + */ +#define UIP_ACTIVE_OPEN 1 + +/** + * The maximum number of simultaneously open TCP connections. + * + * Since the TCP connections are statically allocated, turning this + * configuration knob down results in less RAM used. Each TCP + * connection requires approximatly 30 bytes of memory. + * + * \hideinitializer + */ +#ifndef UIP_CONF_MAX_CONNECTIONS +#define UIP_CONNS 10 +#else /* UIP_CONF_MAX_CONNECTIONS */ +#define UIP_CONNS UIP_CONF_MAX_CONNECTIONS +#endif /* UIP_CONF_MAX_CONNECTIONS */ + + +/** + * The maximum number of simultaneously listening TCP ports. + * + * Each listening TCP port requires 2 bytes of memory. + * + * \hideinitializer + */ +#ifndef UIP_CONF_MAX_LISTENPORTS +#define UIP_LISTENPORTS 20 +#else /* UIP_CONF_MAX_LISTENPORTS */ +#define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS +#endif /* UIP_CONF_MAX_LISTENPORTS */ + +/** + * Determines if support for TCP urgent data notification should be + * compiled in. + * + * Urgent data (out-of-band data) is a rarely used TCP feature that + * very seldom would be required. + * + * \hideinitializer + */ +#define UIP_URGDATA 0 + +/** + * The initial retransmission timeout counted in timer pulses. + * + * This should not be changed. + */ +#define UIP_RTO 3 + +/** + * The maximum number of times a segment should be retransmitted + * before the connection should be aborted. + * + * This should not be changed. + */ +#define UIP_MAXRTX 8 + +/** + * The maximum number of times a SYN segment should be retransmitted + * before a connection request should be deemed to have been + * unsuccessful. + * + * This should not need to be changed. + */ +#define UIP_MAXSYNRTX 5 + +/** + * The TCP maximum segment size. + * + * This is should not be to set to more than + * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. + */ +#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) + +/** + * The size of the advertised receiver's window. + * + * Should be set low (i.e., to the size of the uip_buf buffer) is the + * application is slow to process incoming data, or high (32768 bytes) + * if the application processes data quickly. + * + * \hideinitializer + */ +#ifndef UIP_CONF_RECEIVE_WINDOW +#define UIP_RECEIVE_WINDOW UIP_TCP_MSS +#else +#define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW +#endif + +/** + * How long a connection should stay in the TIME_WAIT state. + * + * This configiration option has no real implication, and it should be + * left untouched. + */ +#define UIP_TIME_WAIT_TIMEOUT 120 + + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name ARP configuration options + * @{ + */ + +/** + * The size of the ARP table. + * + * This option should be set to a larger value if this uIP node will + * have many connections from the local network. + * + * \hideinitializer + */ +#ifdef UIP_CONF_ARPTAB_SIZE +#define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE +#else +#define UIP_ARPTAB_SIZE 8 +#endif + +/** + * The maxium age of ARP table entries measured in 10ths of seconds. + * + * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD + * default). + */ +#define UIP_ARP_MAXAGE 120 + +/** @} */ + +/*------------------------------------------------------------------------------*/ + +/** + * \name General configuration options + * @{ + */ + +/** + * The size of the uIP packet buffer. + * + * The uIP packet buffer should not be smaller than 60 bytes, and does + * not need to be larger than 1500 bytes. Lower size results in lower + * TCP throughput, larger size results in higher TCP throughput. + * + * \hideinitializer + */ +#ifndef UIP_CONF_BUFFER_SIZE +#define UIP_BUFSIZE 400 +#else /* UIP_CONF_BUFFER_SIZE */ +#define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE +#endif /* UIP_CONF_BUFFER_SIZE */ + + +/** + * Determines if statistics support should be compiled in. + * + * The statistics is useful for debugging and to show the user. + * + * \hideinitializer + */ +#ifndef UIP_CONF_STATISTICS +#define UIP_STATISTICS 0 +#else /* UIP_CONF_STATISTICS */ +#define UIP_STATISTICS UIP_CONF_STATISTICS +#endif /* UIP_CONF_STATISTICS */ + +/** + * Determines if logging of certain events should be compiled in. + * + * This is useful mostly for debugging. The function uip_log() + * must be implemented to suit the architecture of the project, if + * logging is turned on. + * + * \hideinitializer + */ +#ifndef UIP_CONF_LOGGING +#define UIP_LOGGING 0 +#else /* UIP_CONF_LOGGING */ +#define UIP_LOGGING UIP_CONF_LOGGING +#endif /* UIP_CONF_LOGGING */ + +/** + * Broadcast support. + * + * This flag configures IP broadcast support. This is useful only + * together with UDP. + * + * \hideinitializer + * + */ +#ifndef UIP_CONF_BROADCAST +#define UIP_BROADCAST 0 +#else /* UIP_CONF_BROADCAST */ +#define UIP_BROADCAST UIP_CONF_BROADCAST +#endif /* UIP_CONF_BROADCAST */ + +/** + * Print out a uIP log message. + * + * This function must be implemented by the module that uses uIP, and + * is called by uIP whenever a log message is generated. + */ +void uip_log(char *msg); + +/** + * The link level header length. + * + * This is the offset into the uip_buf where the IP header can be + * found. For Ethernet, this should be set to 14. For SLIP, this + * should be set to 0. + * + * \hideinitializer + */ +#ifdef UIP_CONF_LLH_LEN +#define UIP_LLH_LEN UIP_CONF_LLH_LEN +#else /* UIP_CONF_LLH_LEN */ +#define UIP_LLH_LEN 14 +#endif /* UIP_CONF_LLH_LEN */ + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name CPU architecture configuration + * @{ + * + * The CPU architecture configuration is where the endianess of the + * CPU on which uIP is to be run is specified. Most CPUs today are + * little endian, and the most notable exception are the Motorolas + * which are big endian. The BYTE_ORDER macro should be changed to + * reflect the CPU architecture on which uIP is to be run. + */ + +/** + * The byte order of the CPU architecture on which uIP is to be run. + * + * This option can be either BIG_ENDIAN (Motorola byte order) or + * LITTLE_ENDIAN (Intel byte order). + * + * \hideinitializer + */ +#ifdef UIP_CONF_BYTE_ORDER +#define UIP_BYTE_ORDER UIP_CONF_BYTE_ORDER +#else /* UIP_CONF_BYTE_ORDER */ +#define UIP_BYTE_ORDER UIP_LITTLE_ENDIAN +#endif /* UIP_CONF_BYTE_ORDER */ + +/** @} */ +/*------------------------------------------------------------------------------*/ + +/** + * \name Appication specific configurations + * @{ + * + * An uIP application is implemented using a single application + * function that is called by uIP whenever a TCP/IP event occurs. The + * name of this function must be registered with uIP at compile time + * using the UIP_APPCALL definition. + * + * uIP applications can store the application state within the + * uip_conn structure by specifying the type of the application + * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t. + * + * The file containing the definitions must be included in the + * uipopt.h file. + * + * The following example illustrates how this can look. + \code + +void httpd_appcall(void); +#define UIP_APPCALL httpd_appcall + +struct httpd_state { + u8_t state; + u16_t count; + char *dataptr; + char *script; +}; +typedef struct httpd_state uip_tcp_appstate_t + \endcode + */ + +/** + * \var #define UIP_APPCALL + * + * The name of the application function that uIP should call in + * response to TCP/IP events. + * + */ + +/** + * \var typedef uip_tcp_appstate_t + * + * The type of the application state that is to be stored in the + * uip_conn structure. This usually is typedef:ed to a struct holding + * application state information. + */ + +/** + * \var typedef uip_udp_appstate_t + * + * The type of the application state that is to be stored in the + * uip_conn structure. This usually is typedef:ed to a struct holding + * application state information. + */ +/** @} */ +/** @} */ + +#endif /* __UIPOPT_H__ */ diff --git a/components/net/uip/unix/Makefile b/components/net/uip/unix/Makefile new file mode 100644 index 0000000000..ed64927b89 --- /dev/null +++ b/components/net/uip/unix/Makefile @@ -0,0 +1,44 @@ +# Copyright (c) 2001, Adam Dunkels. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# This file is part of the uIP TCP/IP stack. +# +# $Id: Makefile,v 1.13 2006/06/11 21:55:03 adam Exp $ +# + +all: uip + +CC = gcc +AR = ar +APPS = webserver +CFLAGS = -Wall -g -I../uip -I. -fpack-struct -Os +-include ../uip/Makefile.include + +uip: $(addprefix $(OBJECTDIR)/, main.o tapdev.o clock-arch.o) apps.a uip.a + +clean: + rm -fr *.o *~ *core uip $(OBJECTDIR) *.a diff --git a/components/net/uip/unix/clock-arch.c b/components/net/uip/unix/clock-arch.c new file mode 100644 index 0000000000..d140aaf785 --- /dev/null +++ b/components/net/uip/unix/clock-arch.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.c,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * Implementation of architecture-specific clock functionality + * \author + * Adam Dunkels + */ + +#include "clock-arch.h" +#include + +/*---------------------------------------------------------------------------*/ +clock_time_t +clock_time(void) +{ + struct timeval tv; + struct timezone tz; + + gettimeofday(&tv, &tz); + + return tv.tv_sec * 1000 + tv.tv_usec / 1000; +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/unix/clock-arch.h b/components/net/uip/unix/clock-arch.h new file mode 100644 index 0000000000..e51eee934f --- /dev/null +++ b/components/net/uip/unix/clock-arch.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: clock-arch.h,v 1.2 2006/06/12 08:00:31 adam Exp $ + */ + +#ifndef __CLOCK_ARCH_H__ +#define __CLOCK_ARCH_H__ + +typedef int clock_time_t; +#define CLOCK_CONF_SECOND 1000 + +#endif /* __CLOCK_ARCH_H__ */ diff --git a/components/net/uip/unix/main.c b/components/net/uip/unix/main.c new file mode 100644 index 0000000000..e4130e9dd9 --- /dev/null +++ b/components/net/uip/unix/main.c @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Adam Dunkels. + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: main.c,v 1.16 2006/06/11 21:55:03 adam Exp $ + * + */ + + +#include "uip.h" +#include "uip_arp.h" +#include "tapdev.h" + +#include "timer.h" + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + +#ifndef NULL +#define NULL (void *)0 +#endif /* NULL */ + +/*---------------------------------------------------------------------------*/ +int +main(void) +{ + int i; + uip_ipaddr_t ipaddr; + struct timer periodic_timer, arp_timer; + + timer_set(&periodic_timer, CLOCK_SECOND / 2); + timer_set(&arp_timer, CLOCK_SECOND * 10); + + tapdev_init(); + uip_init(); + + uip_ipaddr(ipaddr, 192,168,0,2); + uip_sethostaddr(ipaddr); + uip_ipaddr(ipaddr, 192,168,0,1); + uip_setdraddr(ipaddr); + uip_ipaddr(ipaddr, 255,255,255,0); + uip_setnetmask(ipaddr); + + httpd_init(); + + /* telnetd_init();*/ + + /* hello_world_init();*/ + + /* { + u8_t mac[6] = {1,2,3,4,5,6}; + dhcpc_init(&mac, 6); + }*/ + + /*uip_ipaddr(ipaddr, 127,0,0,1); + smtp_configure("localhost", ipaddr); + SMTP_SEND("adam@sics.se", NULL, "uip-testing@example.com", + "Testing SMTP from uIP", + "Test message sent by uIP\r\n");*/ + + /* + webclient_init(); + resolv_init(); + uip_ipaddr(ipaddr, 195,54,122,204); + resolv_conf(ipaddr); + resolv_query("www.sics.se");*/ + + + + while(1) { + uip_len = tapdev_read(); + if(uip_len > 0) { + if(BUF->type == htons(UIP_ETHTYPE_IP)) { + uip_arp_ipin(); + uip_input(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + tapdev_send(); + } + } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + tapdev_send(); + } + } + + } else if(timer_expired(&periodic_timer)) { + timer_reset(&periodic_timer); + for(i = 0; i < UIP_CONNS; i++) { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + tapdev_send(); + } + } + +#if UIP_UDP + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + tapdev_send(); + } + } +#endif /* UIP_UDP */ + + /* Call the ARP timer function every 10 seconds. */ + if(timer_expired(&arp_timer)) { + timer_reset(&arp_timer); + uip_arp_timer(); + } + } + } + return 0; +} +/*---------------------------------------------------------------------------*/ +void +uip_log(char *m) +{ + printf("uIP log message: %s\n", m); +} +void +resolv_found(char *name, u16_t *ipaddr) +{ + u16_t *ipaddr2; + + if(ipaddr == NULL) { + printf("Host '%s' not found.\n", name); + } else { + printf("Found name '%s' = %d.%d.%d.%d\n", name, + htons(ipaddr[0]) >> 8, + htons(ipaddr[0]) & 0xff, + htons(ipaddr[1]) >> 8, + htons(ipaddr[1]) & 0xff); + /* webclient_get("www.sics.se", 80, "/~adam/uip");*/ + } +} +#ifdef __DHCPC_H__ +void +dhcpc_configured(const struct dhcpc_state *s) +{ + uip_sethostaddr(s->ipaddr); + uip_setnetmask(s->netmask); + uip_setdraddr(s->default_router); + resolv_conf(s->dnsaddr); +} +#endif /* __DHCPC_H__ */ +void +smtp_done(unsigned char code) +{ + printf("SMTP done with code %d\n", code); +} +void +webclient_closed(void) +{ + printf("Webclient: connection closed\n"); +} +void +webclient_aborted(void) +{ + printf("Webclient: connection aborted\n"); +} +void +webclient_timedout(void) +{ + printf("Webclient: connection timed out\n"); +} +void +webclient_connected(void) +{ + printf("Webclient: connected, waiting for data...\n"); +} +void +webclient_datahandler(char *data, u16_t len) +{ + printf("Webclient: got %d bytes of data.\n", len); +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/unix/tapdev.c b/components/net/uip/unix/tapdev.c new file mode 100644 index 0000000000..417b288803 --- /dev/null +++ b/components/net/uip/unix/tapdev.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Author: Adam Dunkels + * + * $Id: tapdev.c,v 1.8 2006/06/07 08:39:58 adam Exp $ + */ + +#define UIP_DRIPADDR0 192 +#define UIP_DRIPADDR1 168 +#define UIP_DRIPADDR2 0 +#define UIP_DRIPADDR3 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef linux +#include +#include +#include +#define DEVTAP "/dev/net/tun" +#else /* linux */ +#define DEVTAP "/dev/tap0" +#endif /* linux */ + +#include "uip.h" + +static int drop = 0; +static int fd; + + +/*---------------------------------------------------------------------------*/ +void +tapdev_init(void) +{ + char buf[1024]; + + fd = open(DEVTAP, O_RDWR); + if(fd == -1) { + perror("tapdev: tapdev_init: open"); + exit(1); + } + +#ifdef linux + { + struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); + ifr.ifr_flags = IFF_TAP|IFF_NO_PI; + if (ioctl(fd, TUNSETIFF, (void *) &ifr) < 0) { + perror(buf); + exit(1); + } + } +#endif /* Linux */ + + snprintf(buf, sizeof(buf), "ifconfig tap0 inet %d.%d.%d.%d", + UIP_DRIPADDR0, UIP_DRIPADDR1, UIP_DRIPADDR2, UIP_DRIPADDR3); + system(buf); + +} +/*---------------------------------------------------------------------------*/ +unsigned int +tapdev_read(void) +{ + fd_set fdset; + struct timeval tv, now; + int ret; + + tv.tv_sec = 0; + tv.tv_usec = 1000; + + + FD_ZERO(&fdset); + FD_SET(fd, &fdset); + + ret = select(fd + 1, &fdset, NULL, NULL, &tv); + if(ret == 0) { + return 0; + } + ret = read(fd, uip_buf, UIP_BUFSIZE); + if(ret == -1) { + perror("tap_dev: tapdev_read: read"); + } + + /* printf("--- tap_dev: tapdev_read: read %d bytes\n", ret);*/ + /* { + int i; + for(i = 0; i < 20; i++) { + printf("%x ", uip_buf[i]); + } + printf("\n"); + }*/ + /* check_checksum(uip_buf, ret);*/ + return ret; +} +/*---------------------------------------------------------------------------*/ +void +tapdev_send(void) +{ + int ret; + /* printf("tapdev_send: sending %d bytes\n", size);*/ + /* check_checksum(uip_buf, size);*/ + + /* drop++; + if(drop % 8 == 7) { + printf("Dropped a packet!\n"); + return; + }*/ + ret = write(fd, uip_buf, uip_len); + if(ret == -1) { + perror("tap_dev: tapdev_send: writev"); + exit(1); + } +} +/*---------------------------------------------------------------------------*/ diff --git a/components/net/uip/unix/tapdev.h b/components/net/uip/unix/tapdev.h new file mode 100644 index 0000000000..280bc52b72 --- /dev/null +++ b/components/net/uip/unix/tapdev.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Adam Dunkels. + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: tapdev.h,v 1.1 2002/01/10 06:22:56 adam Exp $ + * + */ + +#ifndef __TAPDEV_H__ +#define __TAPDEV_H__ + +void tapdev_init(void); +unsigned int tapdev_read(void); +void tapdev_send(void); + +#endif /* __TAPDEV_H__ */ diff --git a/components/net/uip/unix/uip-conf.h b/components/net/uip/unix/uip-conf.h new file mode 100644 index 0000000000..2878c85b0d --- /dev/null +++ b/components/net/uip/unix/uip-conf.h @@ -0,0 +1,157 @@ +/** + * \addtogroup uipopt + * @{ + */ + +/** + * \name Project-specific configuration options + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $ + */ + +/** + * \file + * An example uIP configuration file + * \author + * Adam Dunkels + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#include + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint8_t u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint16_t u16_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_CONNECTIONS 40 + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 40 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 420 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 1 + +/** + * UDP support on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP 0 + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 1 + +/* Here we include the header file for the application(s) we use in + our project. */ +/*#include "smtp.h"*/ +/*#include "hello-world.h"*/ +/*#include "telnetd.h"*/ +#include "webserver.h" +/*#include "dhcpc.h"*/ +/*#include "resolv.h"*/ +/*#include "webclient.h"*/ + +#endif /* __UIP_CONF_H__ */ + +/** @} */ +/** @} */ -- cgit v1.3.1