diff options
author | sicarius <devnull@localhost> | 2007-02-17 01:35:01 +0100 |
---|---|---|
committer | sicarius <devnull@localhost> | 2007-02-17 01:35:01 +0100 |
commit | 4a2ba4b7105d168932163cbd07a062fdf2ba00e9 (patch) | |
tree | 1891a3eab64be1ae1a31e1b882ad9e6ce356620e /source | |
parent | 37d4d23f1dca88b6d074fb09739c9ae071551694 (diff) | |
download | rc2007-soccer-4a2ba4b7105d168932163cbd07a062fdf2ba00e9.tar rc2007-soccer-4a2ba4b7105d168932163cbd07a062fdf2ba00e9.zip |
+++ enhanced framework hardware interface
Diffstat (limited to 'source')
33 files changed, 2328 insertions, 1341 deletions
diff --git a/source/AVR_Studio/Soccer/Soccer.aps b/source/AVR_Studio/Soccer/Soccer.aps index 04830f4..459bdc6 100755 --- a/source/AVR_Studio/Soccer/Soccer.aps +++ b/source/AVR_Studio/Soccer/Soccer.aps @@ -1 +1 @@ -<AVRStudio><MANAGEMENT><ProjectName>Soccer</ProjectName><Created>07-Feb-2007 15:43:12</Created><LastEdit>14-Feb-2007 18:24:30</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>07-Feb-2007 15:43:12</Created><Version>4</Version><Build>4, 12, 0, 462</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Soccer.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>Y:\AVR_Studio\Soccer\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega128</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Soccer.c</SOURCEFILE><SOURCEFILE>hal\board.c</SOURCEFILE><SOURCEFILE>hal\keylcd.c</SOURCEFILE><SOURCEFILE>hal\i2c.c</SOURCEFILE><SOURCEFILE>global.c</SOURCEFILE><SOURCEFILE>hal\uart.c</SOURCEFILE><SOURCEFILE>navigation.c</SOURCEFILE><SOURCEFILE>sensor\sensor.c</SOURCEFILE><SOURCEFILE>sensor\ballsensor.c</SOURCEFILE><SOURCEFILE>hal\maussensor.c</SOURCEFILE><SOURCEFILE>sensor\position.c</SOURCEFILE><SOURCEFILE>sensor\abstand.c</SOURCEFILE><HEADERFILE>hal\board.h</HEADERFILE><HEADERFILE>hal\keylcd.h</HEADERFILE><HEADERFILE>hal\i2c.h</HEADERFILE><HEADERFILE>global.h</HEADERFILE><HEADERFILE>hal\uart.h</HEADERFILE><HEADERFILE>navigation.h</HEADERFILE><HEADERFILE>sensor\sensor.h</HEADERFILE><HEADERFILE>sensor\ballsensor.h</HEADERFILE><HEADERFILE>hal\maussensor.h</HEADERFILE><HEADERFILE>sensor\position.h</HEADERFILE><HEADERFILE>sensor\abstand.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>Soccer.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>Soccer.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>global.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>hal\board.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>hal\i2c.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>hal\keylcd.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -DF_CPU=16000000ULUL -O3 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>0</USES_WINAVR><GCC_LOC>C:\WinAVR\bin\avr-g++.exe</GCC_LOC><MAKE_LOC>C:\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>Y:\AVR_Studio\Soccer\hal\board.h</Name><Name>Y:\AVR_Studio\Soccer\hal\keylcd.h</Name><Name>Y:\AVR_Studio\Soccer\hal\i2c.h</Name><Name>Y:\AVR_Studio\Soccer\global.h</Name><Name>Y:\AVR_Studio\Soccer\hal\uart.h</Name><Name>Y:\AVR_Studio\Soccer\navigation.h</Name><Name>Y:\AVR_Studio\Soccer\sensor\sensor.h</Name><Name>Y:\AVR_Studio\Soccer\sensor\ballsensor.h</Name><Name>Y:\AVR_Studio\Soccer\hal\maussensor.h</Name><Name>Y:\AVR_Studio\Soccer\sensor\position.h</Name><Name>Y:\AVR_Studio\Soccer\sensor\abstand.h</Name><Name>Y:\AVR_Studio\Soccer\Soccer.c</Name><Name>Y:\AVR_Studio\Soccer\hal\board.c</Name><Name>Y:\AVR_Studio\Soccer\hal\keylcd.c</Name><Name>Y:\AVR_Studio\Soccer\hal\i2c.c</Name><Name>Y:\AVR_Studio\Soccer\global.c</Name><Name>Y:\AVR_Studio\Soccer\hal\uart.c</Name><Name>Y:\AVR_Studio\Soccer\navigation.c</Name><Name>Y:\AVR_Studio\Soccer\sensor\sensor.c</Name><Name>Y:\AVR_Studio\Soccer\sensor\ballsensor.c</Name><Name>Y:\AVR_Studio\Soccer\hal\maussensor.c</Name><Name>Y:\AVR_Studio\Soccer\sensor\position.c</Name><Name>Y:\AVR_Studio\Soccer\sensor\abstand.c</Name></Files></ProjectFiles><Files><File00000><FileId>00000</FileId><FileName>Soccer.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>hal\board.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>hal\keylcd.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>hal\keylcd.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>hal\i2c.h</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>hal\i2c.c</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>global.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>global.c</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>c:\WinAVR\avr\include\avr\iom128.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>hal\board.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>hal\uart.c</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>navigation.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>hal\uart.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>navigation.c</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>sensor\sensor.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>sensor\sensor.c</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>sensor\ballsensor.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>sensor\ballsensor.c</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>c:\WinAVR\avr\include\stdlib.h</FileName><Status>1</Status></File00018><File00019><FileId>00019</FileId><FileName>c:\WinAVR\avr\include\avr\signal.h</FileName><Status>1</Status></File00019><File00020><FileId>00020</FileId><FileName>hal\maussensor.h</FileName><Status>1</Status></File00020><File00021><FileId>00021</FileId><FileName>hal\maussensor.c</FileName><Status>1</Status></File00021><File00022><FileId>00022</FileId><FileName>sensor\position.h</FileName><Status>1</Status></File00022><File00023><FileId>00023</FileId><FileName>sensor\position.c</FileName><Status>1</Status></File00023><File00024><FileId>00024</FileId><FileName>sensor\abstand.h</FileName><Status>1</Status></File00024><File00025><FileId>00025</FileId><FileName>sensor\abstand.c</FileName><Status>1</Status></File00025></Files><Workspace><File00000><Position>299 72 1025 527</Position><LineCol>27 13</LineCol><State>Maximized</State></File00000><File00001><Position>293 68 1019 523</Position><LineCol>108 6</LineCol></File00001><File00002><Position>248 200 994 442</Position><LineCol>6 0</LineCol></File00002><File00003><Position>160 84 906 326</Position><LineCol>26 0</LineCol></File00003><File00004><Position>275 56 777 343</Position><LineCol>54 0</LineCol></File00004><File00005><Position>281 60 1007 515</Position><LineCol>13 0</LineCol></File00005><File00006><Position>156 54 968 446</Position><LineCol>26 13</LineCol></File00006><File00007><Position>287 64 1013 519</Position><LineCol>8 0</LineCol></File00007><File00008><Position>373 206 1003 511</Position><LineCol>769 0</LineCol></File00008><File00009><Position>310 121 940 426</Position><LineCol>36 24</LineCol></File00009><File00010><Position>291 94 921 399</Position><LineCol>277 0</LineCol></File00010><File00011><Position>313 123 943 428</Position><LineCol>3 0</LineCol></File00011><File00012><Position>335 152 965 457</Position><LineCol>0 0</LineCol></File00012><File00013><Position>357 181 987 486</Position><LineCol>42 41</LineCol></File00013><File00014><Position>379 210 1009 515</Position><LineCol>6 20</LineCol></File00014><File00015><Position>290 66 1016 521</Position><LineCol>12 58</LineCol></File00015><File00016><Position>313 123 943 428</Position><LineCol>14 16</LineCol></File00016><File00017><Position>335 152 965 457</Position><LineCol>40 29</LineCol></File00017><File00018><Position>357 181 987 486</Position><LineCol>115 0</LineCol></File00018><File00019><Position>382 212 1012 517</Position><LineCol>35 0</LineCol></File00019><File00020><Position>300 100 930 405</Position><LineCol>116 22</LineCol></File00020><File00021><Position>296 70 1022 525</Position><LineCol>27 5</LineCol></File00021><File00022><Position>347 160 977 465</Position><LineCol>18 11</LineCol></File00022><File00023><Position>369 189 999 494</Position><LineCol>27 0</LineCol></File00023><File00024><Position>391 218 1021 523</Position><LineCol>7 3</LineCol></File00024><File00025><Position>303 102 933 407</Position><LineCol>20 23</LineCol></File00025></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
+<AVRStudio><MANAGEMENT><ProjectName>Soccer</ProjectName><Created>07-Feb-2007 15:43:12</Created><LastEdit>17-Feb-2007 01:32:56</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>07-Feb-2007 15:43:12</Created><Version>4</Version><Build>4, 12, 0, 462</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Soccer.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>Y:\AVR_Studio\Soccer\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega128</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><Item>51</Item><Item>402</Item><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Soccer.c</SOURCEFILE><SOURCEFILE>hal\board.c</SOURCEFILE><SOURCEFILE>hal\keylcd.c</SOURCEFILE><SOURCEFILE>hal\i2c.c</SOURCEFILE><SOURCEFILE>global.c</SOURCEFILE><SOURCEFILE>hal\uart.c</SOURCEFILE><SOURCEFILE>navigation.c</SOURCEFILE><SOURCEFILE>sensor\sensor.c</SOURCEFILE><SOURCEFILE>sensor\ballsensor.c</SOURCEFILE><SOURCEFILE>hal\maussensor.c</SOURCEFILE><SOURCEFILE>sensor\position.c</SOURCEFILE><SOURCEFILE>sensor\abstand.c</SOURCEFILE><HEADERFILE>hal\board.h</HEADERFILE><HEADERFILE>hal\keylcd.h</HEADERFILE><HEADERFILE>hal\i2c.h</HEADERFILE><HEADERFILE>global.h</HEADERFILE><HEADERFILE>hal\uart.h</HEADERFILE><HEADERFILE>navigation.h</HEADERFILE><HEADERFILE>sensor\sensor.h</HEADERFILE><HEADERFILE>sensor\ballsensor.h</HEADERFILE><HEADERFILE>hal\maussensor.h</HEADERFILE><HEADERFILE>sensor\position.h</HEADERFILE><HEADERFILE>sensor\abstand.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>Soccer.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>Soccer.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>global.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>hal\board.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>hal\i2c.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>hal\keylcd.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -DF_CPU=16000000ULUL -O3 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>0</USES_WINAVR><GCC_LOC>C:\WinAVR\bin\avr-g++.exe</GCC_LOC><MAKE_LOC>C:\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>Y:\AVR_Studio\Soccer\hal\board.h</Name><Name>Y:\AVR_Studio\Soccer\hal\keylcd.h</Name><Name>Y:\AVR_Studio\Soccer\hal\i2c.h</Name><Name>Y:\AVR_Studio\Soccer\global.h</Name><Name>Y:\AVR_Studio\Soccer\hal\uart.h</Name><Name>Y:\AVR_Studio\Soccer\navigation.h</Name><Name>Y:\AVR_Studio\Soccer\sensor\sensor.h</Name><Name>Y:\AVR_Studio\Soccer\sensor\ballsensor.h</Name><Name>Y:\AVR_Studio\Soccer\hal\maussensor.h</Name><Name>Y:\AVR_Studio\Soccer\sensor\position.h</Name><Name>Y:\AVR_Studio\Soccer\sensor\abstand.h</Name><Name>Y:\AVR_Studio\Soccer\Soccer.c</Name><Name>Y:\AVR_Studio\Soccer\hal\board.c</Name><Name>Y:\AVR_Studio\Soccer\hal\keylcd.c</Name><Name>Y:\AVR_Studio\Soccer\hal\i2c.c</Name><Name>Y:\AVR_Studio\Soccer\global.c</Name><Name>Y:\AVR_Studio\Soccer\hal\uart.c</Name><Name>Y:\AVR_Studio\Soccer\navigation.c</Name><Name>Y:\AVR_Studio\Soccer\sensor\sensor.c</Name><Name>Y:\AVR_Studio\Soccer\sensor\ballsensor.c</Name><Name>Y:\AVR_Studio\Soccer\hal\maussensor.c</Name><Name>Y:\AVR_Studio\Soccer\sensor\position.c</Name><Name>Y:\AVR_Studio\Soccer\sensor\abstand.c</Name></Files></ProjectFiles><Files><File00000><FileId>00000</FileId><FileName>Soccer.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>hal\board.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>hal\keylcd.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>hal\keylcd.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>hal\i2c.h</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>hal\i2c.c</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>global.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>global.c</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>c:\WinAVR\avr\include\avr\iom128.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>hal\board.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>hal\uart.c</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>navigation.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>hal\uart.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>navigation.c</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>sensor\sensor.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>sensor\sensor.c</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>sensor\ballsensor.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>sensor\ballsensor.c</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>c:\WinAVR\avr\include\stdlib.h</FileName><Status>1</Status></File00018><File00019><FileId>00019</FileId><FileName>c:\WinAVR\avr\include\avr\signal.h</FileName><Status>1</Status></File00019><File00020><FileId>00020</FileId><FileName>hal\maussensor.h</FileName><Status>1</Status></File00020><File00021><FileId>00021</FileId><FileName>hal\maussensor.c</FileName><Status>1</Status></File00021><File00022><FileId>00022</FileId><FileName>sensor\position.h</FileName><Status>1</Status></File00022><File00023><FileId>00023</FileId><FileName>sensor\position.c</FileName><Status>1</Status></File00023><File00024><FileId>00024</FileId><FileName>sensor\abstand.h</FileName><Status>1</Status></File00024><File00025><FileId>00025</FileId><FileName>sensor\abstand.c</FileName><Status>1</Status></File00025><File00026><FileId>00026</FileId><FileName>c:\WinAVR\avr\include\avr\io.h</FileName><Status>1</Status></File00026><File00027><FileId>00027</FileId><FileName>c:\WinAVR\avr\include\math.h</FileName><Status>1</Status></File00027><File00028><FileId>00028</FileId><FileName>c:\WinAVR\avr\include\inttypes.h</FileName><Status>1</Status></File00028><File00029><FileId>00029</FileId><FileName>c:\WinAVR\avr\include\avr\sfr_defs.h</FileName><Status>1</Status></File00029><File00030><FileId>00030</FileId><FileName>c:\WinAVR\avr\include\avr\version.h</FileName><Status>1</Status></File00030><File00031><FileId>00031</FileId><FileName>c:\WinAVR\avr\include\stdint.h</FileName><Status>1</Status></File00031><File00032><FileId>00032</FileId><FileName>c:\WinAVR\lib\gcc\avr\4.1.1\include\stddef.h</FileName><Status>1</Status></File00032></Files><Workspace><File00000><Position>299 73 1025 528</Position><LineCol>17 0</LineCol></File00000><File00001><Position>287 64 1013 519</Position><LineCol>12 0</LineCol></File00001><File00002><Position>242 196 988 438</Position><LineCol>16 2</LineCol></File00002><File00003><Position>154 80 900 322</Position><LineCol>4 12</LineCol></File00003><File00004><Position>269 52 771 339</Position><LineCol>54 0</LineCol></File00004><File00005><Position>275 56 1001 511</Position><LineCol>13 0</LineCol></File00005><File00006><Position>150 50 962 442</Position><LineCol>32 2</LineCol></File00006><File00007><Position>281 60 1007 515</Position><LineCol>8 0</LineCol></File00007><File00008><Position>367 202 997 507</Position><LineCol>114 24</LineCol></File00008><File00009><Position>304 117 934 422</Position><LineCol>48 27</LineCol></File00009><File00010><Position>285 90 915 395</Position><LineCol>576 20</LineCol></File00010><File00011><Position>307 119 937 424</Position><LineCol>13 0</LineCol></File00011><File00012><Position>329 148 959 453</Position><LineCol>15 34</LineCol></File00012><File00013><Position>351 177 981 482</Position><LineCol>31 0</LineCol></File00013><File00014><Position>373 206 1003 511</Position><LineCol>6 0</LineCol></File00014><File00015><Position>284 62 1010 517</Position><LineCol>12 0</LineCol></File00015><File00016><Position>307 119 937 424</Position><LineCol>14 0</LineCol></File00016><File00017><Position>329 148 959 453</Position><LineCol>40 0</LineCol></File00017><File00018><Position>351 177 981 482</Position><LineCol>115 0</LineCol></File00018><File00019><Position>376 208 1006 513</Position><LineCol>35 0</LineCol></File00019><File00020><Position>299 72 1025 527</Position><LineCol>116 0</LineCol><State>Maximized</State></File00020><File00021><Position>290 66 1016 521</Position><LineCol>27 0</LineCol></File00021><File00022><Position>347 160 977 465</Position><LineCol>18 0</LineCol></File00022><File00023><Position>363 185 993 490</Position><LineCol>27 0</LineCol></File00023><File00024><Position>385 214 1015 519</Position><LineCol>7 0</LineCol></File00024><File00025><Position>297 98 927 403</Position><LineCol>20 0</LineCol></File00025><File00026><Position>325 131 955 436</Position><LineCol>0 0</LineCol></File00026><File00027><Position>347 160 977 465</Position><LineCol>0 0</LineCol></File00027><File00028><Position>369 189 999 494</Position><LineCol>0 0</LineCol></File00028><File00029><Position>391 218 1021 523</Position><LineCol>23 17</LineCol></File00029><File00030><Position>303 102 933 407</Position><LineCol>0 0</LineCol></File00030><File00031><Position>325 131 955 436</Position><LineCol>0 0</LineCol></File00031><File00032><Position>347 160 977 465</Position><LineCol>0 0</LineCol></File00032></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
diff --git a/source/AVR_Studio/Soccer/Soccer.c b/source/AVR_Studio/Soccer/Soccer.c index 117b6bc..00f1dcf 100755 --- a/source/AVR_Studio/Soccer/Soccer.c +++ b/source/AVR_Studio/Soccer/Soccer.c @@ -10,19 +10,29 @@ Sensor sensor; int main() {
//board.ledOn();
- sleep(2);
+ sleep(1);
uart1_puts("Hallo hier ist das RNMega128Funk-Board");
+ while(true)
+ {
+ uart1_puts("3");
+ sleep(1);
+ }
+
+ int speed = 100;
- int speed = 255;
- board.motor(0, speed);
- board.motor(1, speed);
- board.motor(2, speed);
-
- sleep(2);
- navigation.Aktualisieren(180,0,speed);
- while(true) { sleep(1); }
+ /*for(int i=0;i<360;i+=5) {
+ navigation.Aktualisieren(0,i,0);
+ msleep(1000);
+ }*/
+
+ /*sleep(2);
+ board.motor(0,0);
+ board.motor(1,0);
+ board.motor(2,0);
+ board.motor(3,0);
+ while(true) { sleep(1); }*/
/*board.motor(0,speed);
board.motor(2,speed);
sleep(2);
@@ -83,11 +93,16 @@ int main() { while(true) {
navigation.Aktualisieren(0,0,speed);
sleep(2);
- navigation.Aktualisieren(90,0,speed);
+ navigation.Aktualisieren(135,0,speed);
sleep(2);
navigation.Aktualisieren(180,0,speed);
sleep(2);
- navigation.Aktualisieren(270,0,speed);
+ navigation.Aktualisieren(225,0,speed);
+ sleep(2);
+ board.motor(0,0);
+ board.motor(1,0);
+ board.motor(2,0);
+ board.motor(3,0);
sleep(2);
}
diff --git a/source/AVR_Studio/Soccer/default/Soccer.elf b/source/AVR_Studio/Soccer/default/Soccer.elf Binary files differindex 5c63ac2..d0dc77f 100755 --- a/source/AVR_Studio/Soccer/default/Soccer.elf +++ b/source/AVR_Studio/Soccer/default/Soccer.elf diff --git a/source/AVR_Studio/Soccer/default/Soccer.hex b/source/AVR_Studio/Soccer/default/Soccer.hex index 1bf5d66..1944751 100755 --- a/source/AVR_Studio/Soccer/default/Soccer.hex +++ b/source/AVR_Studio/Soccer/default/Soccer.hex @@ -2,1168 +2,1159 @@ :100010000C9483000C9483000C9483000C94830054
:100020000C9483000C9483000C9483000C94830044
:100030000C9483000C9483000C9483000C94830034
-:100040000C94D4010C9483000C94CD040C94FE0405
+:100040000C9487010C9483000C9484040C94B504E4
:100050000C9483000C9483000C9483000C94830014
:100060000C9483000C9483000C9483000C94830004
-:100070000C9483000C9483000C946B050C949E05E7
+:100070000C9483000C9483000C9422050C94550579
:100080000C9483000C9483000C9483000829573F40
:100090009F2D49CBA5310F76C73493F27E37D00D13
:1000A000013AB60B613D2AAAAB3F0000003F800039
:1000B0000000BA00B30011241FBECFEFD0E1DEBFB5
-:1000C000CDBF11E0A0E0B1E0E4EBF8E400E00BBF4D
-:1000D00002C007900D92A833B107D9F711E0A8E349
-:1000E000B1E001C01D92AE3FB107E1F710E0C4EBF3
-:1000F000D0E004C02297FE010E940123C23BD10739
+:1000C000CDBF11E0A0E0B1E0EEE2F8E400E00BBF4C
+:1000D00002C007900D92AA33B107D9F712E0AAE344
+:1000E000B1E001C01D92A030B107E1F710E0C4EB10
+:1000F000D0E004C02297FE010E94BE22C23BD1077D
:10010000C9F70C94C1000C9400008130910531F0C6
:10011000892B19F46F5F7F4FA9F008956F5F7F4FB0
-:10012000E1F788E391E00E94610289E391E00E9497
-:1001300027038BE391E00E94870781E491E00E940E
-:10014000D907089581E491E00E94B9078BE391E01B
-:100150000E94940689E391E00E94D80288E391E02E
-:100160000E94270108956FEF7FEF80E090E00E94EA
+:10012000E1F78AE391E00E941A028BE391E00E94DA
+:10013000DE028DE391E00E94440783E491E00E9497
+:100140009607089583E491E00E9476078DE391E09D
+:100150000E944B068BE391E00E948F028AE391E0BC
+:100160000E94EB0008956FEF7FEF80E090E00E9427
:10017000850008956FEF7FEF81E090E00E94850099
-:10018000089520E030E080E090E0A0E0B0E00000E2
-:100190000196A11DB11D8E3E42E7940745E1A407DB
-:1001A00040E0B407A1F72F5F3F4F2230310559F7E8
-:1001B00080E091E00E9417064FEF50E060E070E0B1
-:1001C00088E391E00E944F014FEF50E061E070E062
-:1001D00088E391E00E944F014FEF50E062E070E051
-:1001E00088E391E00E944F0120E030E080E090E061
-:1001F000A0E0B0E000000196A11DB11D8E3E42E7D7
-:10020000940745E1A40740E0B407A1F72F5F3F4FF3
-:100210002230310559F72FEF30E040E050E064EB39
-:1002200070E08BE391E00E949B0780E090E0A0E00B
-:10023000B0E000000196A11DB11D8E3E22E792079D
-:1002400025E1A20720E0B207A1F7EFCF08950895B6
-:1002500086E886B967B987B1806C87B9369A3699CE
-:10026000FECF40E020E030E0369A3699FECF84B1F0
-:1002700095B1280F391F4F5F4330B1F73798C90147
-:1002800063E070E00E94B422CB01089570936E0188
-:1002900060936D010895C19A0895C19808956430DE
-:1002A000710598F44115510589F480E090E06115DD
-:1002B0007105C9F49BBD8ABD14161506B4F5C09A24
-:1002C000C1980895979A969ADD980895CA0157FDA6
-:1002D00031C088968F3F910551F34CF38FEF90E03A
-:1002E0006115710539F361307105B9F0623071053E
-:1002F00051F06330710549F71416150644F5969AC6
-:100300009798DD9A0895909387008093860014163D
-:10031000150624F5959A9498089599BD88BD1416EC
-:10032000150684F4C29AC3980895452B41F4C19AE6
-:10033000C09A089588279927841B950BCACFC19A24
-:10034000C0980895452B79F0C39AC2980895452B1B
-:1003500009F4B8CF979A9698DD9A0895452B31F015
-:10036000949A95980895C39AC29A0895949A959AE2
-:1003700008958091650088608093650020E030E0FA
-:1003800080E090E00000019645E08D379407D1F7BA
-:100390002F5F3F4F83E0283E380791F7809165003B
-:1003A000877F8093650008951F920F920FB60F927A
-:1003B00011242F933F938F939F9320912701309186
-:1003C000280180916D0190916E0197FD23C0959554
-:1003D0008795821793077CF48091650084608093F1
-:1003E00065002115310579F48FEF90E09093280195
-:1003F0008093270111C0809165008B7F80936500F9
-:100400002115310589F32150304030932801209384
-:10041000270102C00196DBCF9F918F913F912F91D1
-:100420000F900FBE0F901F9018956430710508F063
-:100430003EC084B321E030E0062E02C0220F331FFD
-:100440000A94E2F7822B84BB85B3822B85BBE0E064
-:10045000F0E040E050E000004F5F5F4F85E04D3737
-:100460005807C9F7319683E0E83EF80791F785B35E
-:10047000922F9095892385BB84B3982394BB83B333
-:10048000992786239723892BD1F383B39927862332
-:100490009723892B61F02FEF3FEF2F5F3F4F000035
-:1004A00083B3992786239723892BB9F702C02FEFAF
-:1004B0003FEFC9010895662311F0C1980895C19ACC
-:1004C00008958EE78ABB1BBA2FEF27BB82E088BB5B
-:1004D0008FEC84BB15BA8CEF81BB93E092BB8FEDA0
-:1004E00082B913B810926100209362008FE180936B
-:1004F00064009093650091EA9FBD85E88EBD90935E
-:100500008B0080938A001BBC1ABCC19AC09A19BC8C
-:1005100018BCC39AC29A1092870010928600949ACF
-:10052000959A979A969ADD981E98DA9A8AE090E0C2
-:100530000E94C805789408958EE78ABB1BBA2FEFF6
-:1005400027BB82E088BB8FEC84BB15BA8CEF81BBE4
-:1005500093E092BB8FED82B913B8109261002093A3
-:1005600062008FE1809364009093650091EA9FBDE3
-:1005700085E88EBD90938B0080938A001BBC1ABCCB
-:10058000C19AC09A19BC18BCC39AC29A109287002B
-:1005900010928600949A959A979A969ADD981E984A
-:1005A000DA9A8AE090E00E94C80578940895089548
-:1005B000089508950E94430399270895CF92DF92EA
-:1005C000EF92FF920F931F93CF93DF93CDB7DEB7D8
-:1005D0008C01FB01EDB6FEB6DB010D900020E9F7C2
-:1005E0006D010894C108D108C61AD70AC601019640
-:1005F0002DB73EB7281B390B0FB6F8943EBF0FBE80
-:100600002DBF4DB75EB74F5F5F4F1C141D0464F4E0
-:1006100020E030E0BA018191DB018D93BD012F5FB5
-:100620003F4FC216D306B9F7960162E0C8010E9497
-:1006300070040FB6F894FEBE0FBEEDBEDF91CF91F1
-:100640001F910F91FF90EF90DF90CF9008950E943F
-:10065000380308950E9438030895FC0180E48093D4
-:10066000700084E4809374001092710010820895E9
-:10067000FC0180E48093700084E480937400109205
-:10068000710010820895FC01808199270895660FFA
-:1006900060937200089580917400992787FD90956A
-:1006A0008827990F881F99270895FC0190E020E082
-:1006B00030E0660F44EC80917400806A809374008F
-:1006C0008091740087FFFCCF80917100887F883013
-:1006D00001F560937300409374008091740087FF6C
-:1006E000FCCF80917100887F883189F08091710002
-:1006F000887F803221F09923F1F2108208952F5FD4
-:100700003F4F2A303105B9F781E08083089591E0A9
-:10071000EDCF82E080830895660F616024EC8091C4
-:100720007400806A809374008091740087FFFCCF0E
-:100730008091710060937300209374008091740025
-:1007400087FFFCCF809171009091710080917100C2
-:1007500080917400806880937400987F9034F9F6DB
-:1007600008956093730084EC80937400809174000A
-:1007700087FFFCCF8091710080917100089584ED16
-:1007800080937400089584EC8093740080917400C9
-:1007900087FFFCCF20E030E094ECFB0180917100FA
-:1007A000887F803889F480917300808390937400EF
-:1007B0008091740087FFFCCF2F5F3F4F319680916F
-:1007C0007100887F803879F38091710084EC809388
-:1007D0007400C9010895FB018091740087FFFCCF6C
-:1007E000809171008091710080917300808384EC0E
-:1007F0008093740008951F93141615060CF5DA0102
-:10080000119720E030E014E894ECFB0180818093A4
-:100810007300A217B30789F090937400809174005D
-:1008200087FFFCCF80917100809171002F5F3F4F57
-:1008300031964217530751F703C010937400EECF5F
-:1008400084EC809374001F910895FC01660F616031
-:1008500074EC80917400806A8093740080917400BD
-:1008600087FFFCCF809171006093730070937400D8
-:100870008091740087FFFCCF80917100909171008E
-:100880008091710080917400806880937400987FDB
-:100890009034F9F680818823E9F412161306B4F433
-:1008A00060E070E094ECFA018091740087FFFCCF67
-:1008B0008091710080917100809173008193909379
-:1008C00074006F5F7F4F2617370771F784ED8093B1
-:1008D0007400089584ED8093740083E0808308950C
-:1008E000DC0190E0E0E0F0E0660F74EC80917400D1
-:1008F000806A809374008091740087FFFCCF8091A0
-:100900007100887F8830E9F56093730070937400FC
-:100910008091740087FFFCCF80917100887F8831BF
-:1009200071F180917100887F803211F19923F1F289
-:100930001C9212161306BCF460E070E094ECFA010D
-:10094000808180937300909374008091740087FF7E
-:10095000FCCF80917100809171006F5F7F4F319665
-:100960002617370769F784ED809374001C92089569
-:100970003196EA30F105D1F681E08C9304C091E024
-:10098000D0CF82E08C9384ED8093740008950E9410
-:100990005E2208950E94BB2108951F920F920FB608
-:1009A0000F9211242F933F934F938F939F93EF9325
-:1009B000FF933BB14CB12091D6012F5F2F718091F5
-:1009C000D701E22FFF279927E817F90741F0832F76
-:1009D00088712093D601E852FE4F408301C082E027
-:1009E0008093F801FF91EF919F918F914F913F91EB
-:1009F0002F910F900FBE0F901F9018951F920F927E
-:100A00000FB60F9211248F939F93EF93FF939091C2
-:100A1000B4018091B501981761F0E091B501EF5FE5
-:100A2000EF71E093B501FF27EA54FE4F80818CB946
-:100A300001C05598FF91EF919F918F910F900FBE3C
-:100A40000F901F9018959C011092B4011092B5015F
-:100A50001092D6011092D70197FF03C082E08BB9A4
-:100A60003F77832F99278093900029B988E98AB925
-:100A700086E08093950008959091D6018091D701EA
-:100A8000981791F0E091D701EF5FEF71E093D701F4
-:100A9000FF27E852FE4F20818091F8019927982F77
-:100AA0008827820F911D089580E091E00895382FE6
-:100AB0002091B4012F5F2F71E22FFF278091B501A4
-:100AC00099278E179F07D1F3EA54FE4F3083209366
-:100AD000B401559A08951F920F920FB60F921124E8
-:100AE0002F933F934F938F939F93EF93FF93309167
-:100AF0009B0040919C00209191012F5F2F7180916C
-:100B00009201E22FFF279927E817F90741F0832F79
-:100B1000887120939101ED56FE4F408301C082E021
-:100B20008093B301FF91EF919F918F914F913F91EE
-:100B30002F910F900FBE0F901F9018951F920F923C
-:100B40000FB60F9211248F939F93EF93FF93909181
-:100B50006F0180917001981769F0E0917001EF5F6B
-:100B6000EF71E0937001FF27EF58FE4F8081809373
-:100B70009C0005C080919A008F7D80939A00FF9120
-:100B8000EF919F918F910F900FBE0F901F9018952E
-:100B90009C0110926F0110927001109291011092BD
-:100BA000920197FF04C082E080939B003F77832FE0
-:100BB0009927809398002093990088E980939A0060
-:100BC00086E080939D00089590919101809192011B
-:100BD000981791F0E0919201EF5FEF71E09392012D
-:100BE000FF27ED56FE4F20818091B3019927982F62
-:100BF0008827820F911D089580E091E00895382F95
-:100C000020916F012F5F2F71E22FFF2780917001DC
-:100C100099278E179F07D1F3EF58FE4F308320930B
-:100C20006F0180919A00806280939A000895DC01A0
-:100C30003C913323D1F0119620916F012F5F2F71DA
-:100C4000E22FFF27809170019927E817F907D1F368
-:100C5000EF58FE4F308320936F0180919A0080629D
-:100C600080939A003C91332331F70895FC018491DD
-:100C70008823D1F0AF014F5F5F4F382F2091B4012F
-:100C80002F5F2F71E22FFF278091B5019927E81779
-:100C9000F907D1F3EA54FE4F30832093B401559AFB
-:100CA000FA018491882339F70895DC013C913323BC
-:100CB000B1F011962091B4012F5F2F71E22FFF2721
-:100CC0008091B5019927E817F907D1F3EA54FE4F4F
-:100CD00030832093B401559A3C91332351F7089502
-:100CE000FC0184918823F1F0AF014F5F5F4F382FF3
-:100CF00020916F012F5F2F71E22FFF2780917001EC
-:100D00009927E817F907D1F3EF58FE4F3083209366
-:100D10006F0180919A00806280939A00FA01849119
-:100D2000882319F7089508950895FC01718360835D
-:100D30000895FC01738362830895FC0175836483C5
-:100D400008952F923F924F925F926F927F928F926F
-:100D50009F92AF92BF92CF92DF92EF92FF920F934A
-:100D60001F93CF93DF93CDB7DEB724970FB6F894D8
-:100D7000DEBF0FBECDBF1C01FC01608171818827E1
-:100D800077FD8095982F0E94411F7B018C010E9466
-:100D9000052369837A838B839C83C801B7010E94F2
-:100DA000A2235B016C0181E491E00E94A507F1019F
-:100DB00022813381821B930BAA2797FDA095BA2F1E
-:100DC000BC01CD010E94411F3B014C0127ED33EBDB
-:100DD0004DED5FEB69817A818B819C810E94231E9E
-:100DE000A60195010E94C51D20E030E040E05FE3D0
-:100DF0000E94231E7B018C01F1016481758188278B
-:100E000077FD8095982F0E94411F9B01AC01C8017E
-:100E1000B7010E94231EA40193010E94F61D0E94A7
-:100E2000AA1FAB01BC0188E3482E81E0582E60E088
-:100E300070E0C2010E944F01F10164817581882731
-:100E400077FD8095982F0E94411F9B01AC01C60140
-:100E5000B5010E94231E9B01AC01C401B3010E9495
-:100E6000F61D0E94AA1FAB01BC0161E070E0C20147
-:100E70000E944F0127ED33EB4DED5FE369817A81ED
-:100E80008B819C810E94231EA60195010E94C51D95
-:100E900020E030E040E05FE30E94231E7B018C01F4
-:100EA000F10164817581882777FD8095982F0E94D4
-:100EB000411F9B01AC01C801B7010E94231E9B0189
-:100EC000AC01C401B3010E94F61D0E94AA1FAB0130
-:100ED000BC0162E070E0C2010E944F0124960FB68F
-:100EE000F894DEBF0FBECDBFDF91CF911F910F9160
-:100EF000FF90EF90DF90CF90BF90AF909F908F903A
-:100F00007F906F905F904F903F902F900895FC01DD
-:100F10001182108213821282158214820E94A1060D
-:100F20000895FC01118210821382128215821482AC
-:100F30000E94A1060895FC0171836083538342835C
-:100F4000358324830E94A106089542960E94E31AE5
-:100F500008950F931F938C0142960E94E71AC801CF
-:100F60000E944308C80184960E946C1C1F910F9137
-:100F700008950F931F938C0184960E945D1CC801F5
-:100F800042960E94D21BC8010E943E081F910F91F9
-:100F900008950F931F938C0184960E945D1CC801D5
-:100FA00042960E94D21BC8010E943E081F910F91D9
-:100FB00008950F931F938C010E941B08C80142964D
-:100FC0000E94EA1BC80184960E94501C1F910F9139
-:100FD00008950F931F938C010E941B08C80142962D
-:100FE0000E94EA1BC80184960E94501C1F910F9119
-:100FF0000895FC01118210828EE190E09383828338
-:101000008CE390E09583848384E690E097838683E5
-:1010100084EB90E09187808784E091E093878287DA
-:101020008CE291E0958784878AE491E097878687B0
-:10103000118A108A0895FC01118210828EE190E0DD
-:10104000938382838CE390E09583848384E690E0AD
-:101050009783868384EB90E09187808784E091E09A
-:10106000938782878CE291E0958784878AE491E078
-:1010700097878687118A108A089508950895FC013C
-:101080008089918908950F931F93CF93DF93CDB7F4
-:10109000DEB760970FB6F894DEBF0FBECDBF8C01F0
-:1010A00060E088E391E00E9428019A83898361E0EF
-:1010B00088E391E00E9428019C838B8362E088E3AF
-:1010C00091E00E9428019E838D8363E088E391E094
-:1010D0000E94280198878F8364E088E391E00E9452
-:1010E00028019A87898765E088E391E00E942801BA
-:1010F0009C878B8766E088E391E00E9428019E87A9
-:101100008D8767E088E391E00E942801988B8F87A4
-:1011100029813A8144E02030340714F020E034E0A3
-:101120004B815C8142175307ACF5E1E0F0E02D8183
-:101130003E812417350764F5E2E0F0E04F815885E1
-:10114000421753071CF5E3E0F0E029853A852417A0
-:101150003507D4F4E4E0F0E04B855C854217530793
-:101160008CF4E5E0F0E02D853E852417350744F446
-:10117000E6E0F0E0821793078CF4E7E0F0E00EC0C1
-:101180009A01F8CFA901EFCF9A01E6CFA901DDCFEF
-:101190009A01D4CFA901E0E0F0E0C9CFEE0FFF1F24
-:1011A000E00FF11F80819181F801918B808B609617
-:1011B0000FB6F894DEBF0FBECDBFDF91CF911F9168
-:1011C0000F91089508950895089508950F931F931A
-:1011D000CF93DF93DC0184B32D913C91119741E0D3
-:1011E00050E0FA01022E02C0EE0FFF1F0A94E2F750
-:1011F0008E2B84BB07E010E0021B130BED010A806D
-:1012000002C0440F551F0A94E2F7342F309585B37E
-:10121000832385BB25B383B380952823862F992705
-:10122000002E02C0959587950A94E2F78E23282B0D
-:1012300025BB660F000085B3842B85BB85B3832354
-:1012400085BB25B383B380952823862F9927002E4D
-:1012500002C0959587950A94E2F78E23282B25BB2B
-:10126000660F000085B3842B85BB85B3832385BBC4
-:1012700025B383B380952823862F9927002E02C09B
-:10128000959587950A94E2F78E23282B25BB660F48
-:10129000000085B3842B85BB85B3832385BB25B331
-:1012A00083B380952823862F9927002E02C0959519
-:1012B00087950A94E2F78E23282B25BB660F000042
-:1012C00085B3842B85BB85B3832385BB25B383B3CB
-:1012D00080952823862F9927002E02C09595879503
-:1012E0000A94E2F78E23282B25BB660F000085B3F6
-:1012F000842B85BB85B3832385BB25B383B38095BE
-:101300002823862F9927002E02C0959587950A9449
-:10131000E2F78E23282B25BB660F000085B3842BB4
-:1013200085BB85B3832385BB25B383B380952823F1
-:10133000862F9927002E02C0959587950A94E2F78B
-:101340008E23282B25BB000085B3842B85BB85B35A
-:10135000832385BB95B383B380959823660F772746
-:1013600002C0759567950A95E2F7E6239E2B95BB1B
-:10137000000085B3482B45BBDF91CF911F910F91A2
-:101380000895FC0124B3A081B18161E070E0CB013C
-:101390000A2E02C0880F991F0A94E2F7809528232D
-:1013A00024BB028002C0660F771F0A94E2F7362F33
-:1013B000309585B3832385BB000085B3862B85BB21
-:1013C00043B385B3832385BB55270A2E02C05595A9
-:1013D00047950A94E2F741705070440F000085B3BE
-:1013E000862B85BB83B325B3232325BB99270A2EE0
-:1013F00002C0959587950A94E2F78170482B440FB7
-:10140000000085B3862B85BB83B325B3232325BB7F
-:1014100099270A2E02C0959587950A94E2F7817064
-:10142000482B440F000085B3862B85BB83B325B3BF
-:10143000232325BB99270A2E02C0959587950A94E8
-:10144000E2F78170482B440F000085B3862B85BBE3
-:1014500083B325B3232325BB99270A2E02C0959574
-:1014600087950A94E2F78170482B440F000085B3FA
-:10147000862B85BB83B325B3232325BB99270A2E4F
-:1014800002C0959587950A94E2F78170482B440F26
-:10149000000085B3862B85BB83B325B3232325BBEF
-:1014A00099270A2E02C0959587950A94E2F78170D4
-:1014B000482B440F000085B3682B65BB83B3992785
-:1014C00002C095958795AA95E2F78170482B842FE5
-:1014D00099270895CF93DF93FC0144B3C081D18154
-:1014E00021E030E0C9010C2E02C0880F991F0A9438
-:1014F000E2F7A82F482B44BB47E050E04C1B5D0BA4
-:10150000028002C0220F331F0A94E2F7322FE22F2B
-:10151000E09585B38E2385BB25B383B380952823BF
-:10152000862F9927042E02C0959587950A94E2F795
-:101530008A23282B25BB660F000085B3832B85BB30
-:1015400085B38E2385BB25B383B380952823862F4F
-:101550009927042E02C0959587950A94E2F78A236D
-:10156000282B25BB660F000085B3832B85BB85B375
-:101570008E2385BB25B383B380952823862F992797
-:10158000042E02C0959587950A94E2F78A23282BAA
-:1015900025BB660F000085B3832B85BB85B38E23E7
-:1015A00085BB25B383B380952823862F9927042EE6
-:1015B00002C0959587950A94E2F78A23282B25BBCC
-:1015C000660F000085B3832B85BB85B38E2385BB57
-:1015D00025B383B380952823862F9927042E02C034
-:1015E000959587950A94E2F78A23282B25BB660FE9
-:1015F000000085B3832B85BB85B38E2385BB25B3C4
-:1016000083B380952823862F9927042E02C09595B1
-:1016100087950A94E2F78A23282B25BB660F0000E2
-:1016200085B3832B85BB85B38E2385BB25B383B35D
-:1016300080952823862F9927042E02C0959587959B
-:101640000A94E2F78A23282B25BB000085B3832B5D
-:1016500085BB85B38E2385BB95B383B380959823D3
-:10166000660F772702C0759567954A95E2F78A2F2E
-:101670008623982B95BB000085B3832B85BB80E028
-:1016800090E00000019621E08C329207D1F784B3FC
-:10169000A0958A2384BB85B38E2385BB000085B3C8
-:1016A000832B85BB43B385B38E2385BB55270C2E77
-:1016B00002C0559547950A94E2F741705070440F67
-:1016C000000085B3832B85BB83B325B32E2325BBB5
-:1016D00099270C2E02C0959587950A94E2F78170A0
-:1016E000482B440F000085B3832B85BB83B325B300
-:1016F0002E2325BB99270C2E02C0959587950A9419
-:10170000E2F78170482B440F000085B3832B85BB23
-:1017100083B325B32E2325BB99270C2E02C09595A4
-:1017200087950A94E2F78170482B440F000085B337
-:10173000832B85BB83B325B32E2325BB99270C2E82
-:1017400002C0959587950A94E2F78170482B440F63
-:10175000000085B3832B85BB83B325B32E2325BB24
-:1017600099270C2E02C0959587950A94E2F781700F
-:10177000482B440F000085B3832B85BB83B325B36F
-:101780002E2325BB99270C2E02C0959587950A9488
-:10179000E2F78170482B440F000085B3832B85BB93
-:1017A00083B3992702C095958795CA95E2F7817012
-:1017B000482B842F9927DF91CF910895EF92FF92C4
-:1017C0000F931F93CF93DF937C01606884B3E7018D
-:1017D00028813981A1E0B0E0FD01022E02C0EE0FA8
-:1017E000FF1F0A94E2F78E2B84BB07E010E0021B78
-:1017F000130B0A8002C0AA0FBB1F0A94E2F73A2F0C
-:10180000309585B3832385BB25B383B38095282387
-:10181000862F9927002E02C0959587950A94E2F7A6
-:101820008E23282B25BB660F000085B38A2B85BB32
-:1018300085B3832385BB25B383B380952823862F67
-:101840009927002E02C0959587950A94E2F78E237A
-:10185000282B25BB660F000085B38A2B85BB85B37B
-:10186000832385BB25B383B380952823862F9927AF
-:10187000002E02C0959587950A94E2F78E23282BB7
-:1018800025BB660F000085B38A2B85BB85B38323F8
-:1018900085BB25B383B380952823862F9927002EF7
-:1018A00002C0959587950A94E2F78E23282B25BBD5
-:1018B000660F000085B38A2B85BB85B3832385BB68
-:1018C00025B383B380952823862F9927002E02C045
-:1018D000959587950A94E2F78E23282B25BB660FF2
-:1018E000000085B38A2B85BB85B3832385BB25B3D5
-:1018F00083B380952823862F9927002E02C09595C3
-:1019000087950A94E2F78E23282B25BB660F0000EB
-:1019100085B38A2B85BB85B3832385BB25B383B36E
-:1019200080952823862F9927002E02C095958795AC
-:101930000A94E2F78E23282B25BB000085B38A2B5F
-:1019400085BB85B3832385BB95B383B380959823EB
-:10195000660F7727002E02C0759567950A94E2F707
-:101960008E2F8623982B95BB000085B38A2B85BBD1
-:1019700084B38E2B84BB85B3832385BB25B383B30C
-:1019800080952823842F9927002E02C0959587954E
-:101990000A94E2F78E23282B25BB440F000085B361
-:1019A0008A2B85BB85B3832385BB25B383B3809501
-:1019B0002823842F9927002E02C0959587950A9495
-:1019C000E2F78E23282B25BB440F000085B38A2B1A
-:1019D00085BB85B3832385BB25B383B3809528233B
-:1019E000842F9927002E02C0959587950A94E2F7D7
-:1019F0008E23282B25BB440F000085B38A2B85BB83
-:101A000085B3832385BB25B383B380952823842F97
-:101A10009927002E02C0959587950A94E2F78E23A8
-:101A2000282B25BB440F000085B38A2B85BB85B3CB
-:101A3000832385BB25B383B380952823842F9927DF
-:101A4000002E02C0959587950A94E2F78E23282BE5
-:101A500025BB440F000085B38A2B85BB85B3832348
-:101A600085BB25B383B380952823842F9927002E27
-:101A700002C0959587950A94E2F78E23282B25BB03
-:101A8000440F000085B38A2B85BB85B3832385BBB8
-:101A900025B383B380952823842F9927002E02C075
-:101AA000959587950A94E2F78E23282B25BB000095
-:101AB00085B38A2B85BB85B3832385BB95B383B35D
-:101AC00080959823440F552702C0559547950A9550
-:101AD000E2F7E4239E2B95BB000085B38A2B85BBE0
-:101AE00080E090E000000196E1E08C329E07D1F7A3
-:101AF000DF91CF911F910F91FF90EF900895CF93B9
-:101B0000DF93FC0124B34081518161E070E0CB019F
-:101B1000042E02C0880F991F0A94E2F7A82F282BE1
-:101B200024BBC7E0D0E0C41BD50BCB01028002C0B0
-:101B3000880F991F0A94E2F7582F482F409585B3D4
-:101B4000842385BB25B383B38095282380E890E068
-:101B50000C2E02C0959587950A94E2F73A2F382308
-:101B6000232B25BB000085B3852B85BB85B3842340
-:101B700085BB95B383B38095982395BB000085B34F
-:101B8000852B85BB85B3842385BB95B383B38095B3
-:101B9000982395BB000085B3852B85BB85B3842333
-:101BA00085BB95B383B38095982395BB000085B31F
-:101BB000852B85BB85B3842385BB95B383B3809583
-:101BC000982395BB000085B3852B85BB85B3842303
-:101BD00085BB95B383B38095982395BB000085B3EF
-:101BE000852B85BB85B3842385BB95B383B3809553
-:101BF000982395BB000085B3852B85BB85B38423D3
-:101C000085BB95B383B38095982395BB000085B3BE
-:101C1000852B85BB84B38A2B84BB85B3842385BB8A
-:101C200095B383B3809598230C2E02C07595679564
-:101C30000A94E2F78A2F8623982B95BB000085B380
-:101C4000852B85BB85B3842385BB25B383B3809562
-:101C5000282382E090E00C2E02C0959587950A9487
-:101C6000E2F78A23282B25BB000085B3852B85BB93
-:101C700085B3842385BB25B383B38095282384E073
-:101C800090E00C2E02C0959587950A94E2F78A237E
-:101C9000282B25BB000085B3852B85BB85B384230A
-:101CA00085BB25B383B38095282388E090E00C2E74
-:101CB00002C0959587950A94E2F78A23282B25BBC5
-:101CC000000085B3852B85BB85B3842385BB25B3F5
-:101CD00083B38095282380E190E00C2E02C0959577
-:101CE00087950A94E2F78A23282B25BB000085B349
-:101CF000852B85BB85B3842385BB25B383B38095B2
-:101D0000282380E290E00C2E02C0959587950A94D6
-:101D1000E2F78A23282B25BB000085B3852B85BBE2
-:101D200085B3842385BB25B383B38095282380E4C2
-:101D300090E00C2E02C0959587950A94E2F78A23CD
-:101D4000282B25BB000085B3852B85BB85B3842359
-:101D500085BB95B383B380959823932B95BB0000E7
-:101D600085B3852B85BB80E090E00000019621E0E3
-:101D70008C329207D1F784B38A2B84BB85B384233A
-:101D800085BB25B383B38095282388E890E00C2E8B
-:101D900002C0959587950A94E2F78A23282B25BBE4
-:101DA000000085B3852B85BB85B3842385BB25B314
-:101DB00083B38095282380E190E00C2E02C0959596
-:101DC00087950A94E2F78A23282B25BB000085B368
-:101DD000852B85BB85B3842385BB25B383B38095D1
-:101DE000282380E290E00C2E02C0959587950A94F6
-:101DF000E2F78A23282B25BB000085B3852B85BB02
-:101E000085B3842385BB25B383B38095282380E4E1
-:101E100090E00C2E02C0959587950A94E2F78A23EC
-:101E2000282B25BB000085B3852B85BB85B3842378
-:101E300085BB25B383B38095282380E890E002C05A
-:101E400095958795CA95E2F78A23282B25BB000034
-:101E500085B3852B85BB85B3842385BB95B383B3BD
-:101E60008095982395BB000085B3852B85BB85B3F2
-:101E7000842385BB95B383B38095982395BB0000DD
-:101E800085B3852B85BB85B3842385BB95B383B38D
-:101E90008095982395BB000085B3852B85BB84B3C3
-:101EA000A82BA4BB85B3842385BB95B383B380954E
-:101EB000982395BB000085B3852B85BB85B3842310
-:101EC00085BB95B383B38095982395BB000085B3FC
-:101ED000852B85BB85B3842385BB95B383B3809560
-:101EE000982395BB000085B3852B85BB85B38423E0
-:101EF00085BB95B383B38095982395BB000085B3CC
-:101F0000852B85BB85B3842385BB95B383B380952F
-:101F1000982395BB000085B3852B85BB85B38423AF
-:101F200085BB95B383B38095982395BB000085B39B
-:101F3000852B85BB85B3842385BB95B383B38095FF
-:101F4000982395BB000085B3852B85BB85B384237F
-:101F500085BB95B383B38095982395BB000085B36B
-:101F6000852B85BB80E090E00000019621E08C325B
-:101F70009207D1F781E08093F901DF91CF91089525
-:101F8000FC0120E030E080E090E00000019645E0B8
-:101F90008D379407D1F72F5F3F4F2436310599F7DE
-:101FA00084B321E030E0028002C0220F331F0A9484
-:101FB000E2F7322F822B84BB85B3622F6095862394
-:101FC00085BB40E050E080E090E00000019625E015
-:101FD0008D379207D1F74F5F5F4F4A30510599F720
-:101FE00024B34081518181E090E0042E02C0880F2B
-:101FF000991F0A94E2F7782F282B24BBE7E0F0E042
-:10200000E41BF50B85B3862385BB25B383B380958D
-:10201000282380E890E00E2E02C0959587950A94BB
-:10202000E2F7472F4823242B25BB000085B3832BE1
-:1020300085BB85B3862385BB95B383B380959823F1
-:1020400095BB000085B3832B85BB85B3862385BBF9
-:1020500095B383B38095982395BB000085B3832BFC
-:1020600085BB85B3862385BB95B383B380959823C1
-:1020700095BB000085B3832B85BB85B3862385BBC9
-:1020800095B383B38095982395BB000085B3832BCC
-:1020900085BB85B3862385BB95B383B38095982391
-:1020A00095BB000085B3832B85BB85B3862385BB99
-:1020B00095B383B38095982395BB000085B3832B9C
-:1020C00085BB85B3862385BB95B383B38095982361
-:1020D00095BB000085B3832B85BB84B3872B84BB62
-:1020E00085B3862385BB95B383B380959823942BC2
-:1020F00095BB000085B3832B85BB85B3862385BB49
-:1021000095B383B38095982395BB000085B3832B4B
-:1021100085BB85B3862385BB95B383B38095982310
-:1021200095BB000085B3832B85BB85B3862385BB18
-:1021300095B383B38095982395BB000085B3832B1B
-:1021400085BB85B3862385BB95B383B380959823E0
-:1021500095BB000085B3832B85BB85B3862385BBE8
-:1021600095B383B38095982395BB000085B3832BEB
-:1021700085BB85B3862385BB95B383B380959823B0
-:1021800095BB000085B3832B85BB85B3862385BBB8
-:1021900095B383B38095982395BB000085B3832BBB
-:1021A00085BB80E090E00000019621E08C32920730
-:1021B000D1F784B3872B84BB85B3862385BB25B336
-:1021C00083B38095282380E890E00E2E02C0959579
-:1021D00087950A94E2F78723282B25BB000085B357
-:1021E000832B85BB85B3862385BB95B383B380954D
-:1021F000982395BB000085B3832B85BB85B38623CD
-:1022000085BB95B383B38095982395BB000085B3B8
-:10221000832B85BB85B3862385BB95B383B380951C
-:10222000982395BB000085B3832B85BB85B386239C
-:1022300085BB95B383B38095982395BB000085B388
-:10224000832B85BB85B3862385BB95B383B38095EC
-:10225000982395BB000085B3832B85BB85B386236C
-:1022600085BB95B383B38095982395BB000085B358
-:10227000832B85BB85B3862385BB95B383B38095BC
-:10228000982395BB000085B3832B85BB84B3872B34
-:1022900084BB85B3862385BB25B383B38095282370
-:1022A00081E090E00E2E02C0959587950A94E2F7A2
-:1022B0008723282B25BB000085B3832B85BB85B3E3
-:1022C000862385BB25B383B38095282382E090E0E5
-:1022D0000E2E02C0959587950A94E2F78723282B46
-:1022E00025BB000085B3832B85BB85B3862385BBC7
-:1022F00025B383B38095282384E090E00E2E02C09E
-:10230000959587950A94E2F78723282B25BB000033
-:1023100085B3832B85BB85B3862385BB25B383B368
-:102320008095282388E090E00E2E02C09595879531
-:102330000A94E2F78723282B25BB000085B3832B63
-:1023400085BB85B3862385BB25B383B380952823BE
-:1023500080E190E00E2E02C0959587950A94E2F7F1
-:102360008723282B25BB000085B3832B85BB85B332
-:10237000862385BB25B383B38095282380E290E034
-:102380000E2E02C0959587950A94E2F78723282B95
-:1023900025BB000085B3832B85BB85B3862385BB16
-:1023A00025B383B38095282380E490E002C09595FF
-:1023B0008795EA95E2F77823272B25BB000085B3A4
-:1023C000832B85BB85B3682365BB95B383B38095A9
-:1023D0009823942B95BB000085B3382B35BB80E048
-:1023E00090E00000019641E08C329407D1F7089507
-:1023F000EF92FF920F931F93FC0144B3A081B18130
-:1024000021E030E0C9010A2E02C0880F991F0A940A
-:10241000E2F7182F482B44BB47E050E04A1B5B0B08
-:10242000028002C0220F331F0A94E2F7722F622F3C
-:10243000609585B3862385BB35B323B388E090E0F0
-:10244000042E02C0959587950A94E2F7F12EF822A2
-:10245000209532233F2935BB000085B3872B85BBF0
-:1024600085B3862385BB35B323B380E190E0042E8A
-:1024700002C0959587950A94E2F7E12EE82220950F
-:1024800032233E2935BB000085B3872B85BB85B33E
-:10249000862385BB35B323B380E290E0042E02C0CF
-:1024A000959587950A94E2F7012F0823209532230A
-:1024B000302B35BB000085B3872B85BB85B38623C6
-:1024C00085BB35B323B380E490E0042E02C095951C
-:1024D00087950A94E2F7F12FF823209532233F2BBA
-:1024E00035BB000085B3872B85BB85B3862385BBB1
-:1024F00035B323B380E890E002C0959587954A955F
-:10250000E2F7E12FE823209532233E2B35BB000074
-:1025100085B3872B85BB85B3862385BB95B383B3F2
-:102520008095982395BB000085B3872B85BB85B329
-:10253000862385BB95B383B38095982395BB000014
-:1025400085B3872B85BB85B3862385BB95B383B3C2
-:102550008095982395BB000085B3872B85BB80E0D1
-:1025600090E00000019621E08C329207D1F784B30D
-:10257000312F3095832384BB85B3862385BB000030
-:1025800085B3872B85BB43B385B3862385BB55278E
-:102590000A2E02C0559547950A94E2F74170507093
-:1025A000440F000085B3872B85BB83B325B3262357
-:1025B00025BB99270A2E02C0959587950A94E2F7C4
-:1025C0008170482B440F000085B3872B85BB83B3F4
-:1025D00025B3262325BB99270A2E02C095958795FA
-:1025E0000A94E2F78170482B440F000085B3872BD3
-:1025F00085BB83B325B3262325BB99270A2E02C0AA
-:10260000959587950A94E2F78170482B440F000056
-:1026100085B3872B85BB83B325B3262325BB992799
-:102620000A2E02C0959587950A94E2F78170482B8F
-:10263000440F000085B3872B85BB83B325B32623C6
-:1026400025BB99270A2E02C0959587950A94E2F733
-:102650008170482B440F000085B3872B85BB83B363
-:1026600025B3262325BB99270A2E02C09595879569
-:102670000A94E2F78170482B440F000085B3872B42
-:1026800085BB83B399270A2E02C0959587950A9436
-:10269000E2F78170482B5527242F8091F901813072
-:1026A00009F00BC147FD07C184B3812B84BB85B3FF
-:1026B000862385BB95B383B3809598239F2995BBCB
-:1026C000000085B3872B85BB85B3862385BB95B377
-:1026D00083B3809598239E2995BB000085B3872BF3
-:1026E00085BB85B3862385BB95B383B3809598233B
-:1026F000902B95BB000085B3872B85BB85B38623C4
-:1027000085BB95B383B3809598239F2B95BB000021
-:1027100085B3872B85BB85B3862385BB95B383B3F0
-:10272000809598239E2B95BB000085B3872B85BB96
-:1027300085B3862385BB95B383B38095982395BBDA
-:10274000000085B3872B85BB85B3862385BB95B3F6
-:1027500083B38095982395BB000085B3872B85BBF9
-:1027600085B3862385BB95B383B38095982395BBAA
-:10277000000085B3872B85BB80E090E000000196C8
-:1027800021E08C329207D1F784B3832384BB85B3D5
-:10279000862385BB000085B3872B85BB43B385B3F8
-:1027A000862385BB55270A2E02C0559547950A9466
-:1027B000E2F741705070440F000085B3872B85BB52
-:1027C00083B325B3262325BB99270A2E02C09595EE
-:1027D00087950A94E2F78170482B440F000085B377
-:1027E000872B85BB83B325B3262325BB99270A2EC8
-:1027F00002C0959587950A94E2F78170482B440FA3
-:10280000000085B3872B85BB83B325B3262325BB67
-:1028100099270A2E02C0959587950A94E2F7817050
-:10282000482B440F000085B3872B85BB83B325B3AA
-:10283000262325BB99270A2E02C0959587950A94D1
-:10284000E2F78170482B440F000085B3872B85BBCE
-:1028500083B325B3262325BB99270A2E02C095955D
-:1028600087950A94E2F78170482B440F000085B3E6
-:10287000872B85BB83B325B3262325BB99270A2E37
-:1028800002C0959587950A94E2F78170482B440F12
-:10289000000085B3872B85BB83B399270A2E02C01E
-:1028A000959587950A94E2F78170482B842F992794
-:1028B000282F87FFF9CE1092F901822F992787FDE3
-:1028C00090951F910F91FF90EF900895FC0144B3F4
-:1028D000A081B18121E030E0C9010A2E02C0880F39
-:1028E000991F0A94E2F7782F482B44BB47E050E049
-:1028F0004A1B5B0B028002C0220F331F0A94E2F7CF
-:10290000322F622F609585B3862385BB25B383B3B1
-:102910008095282384E090E0042E02C09595879549
-:102920000A94E2F78723282B25BB000085B3832B6D
-:1029300085BB85B3862385BB25B383B380952823C8
-:1029400088E090E0042E02C0959587950A94E2F7FE
-:102950008723282B25BB000085B3832B85BB85B33C
-:10296000862385BB25B383B38095282380E190E03F
-:10297000042E02C0959587950A94E2F78723282BA9
-:1029800025BB000085B3832B85BB85B3862385BB20
-:1029900025B383B38095282380E290E0042E02C003
-:1029A000959587950A94E2F78723282B25BB00008D
-:1029B00085B3832B85BB85B3862385BB25B383B3C2
-:1029C0008095282380E490E0042E02C09595879599
-:1029D0000A94E2F78723282B25BB000085B3832BBD
-:1029E00085BB85B3862385BB25B383B38095282318
-:1029F00080E890E002C0959587954A95E2F7872395
-:102A0000282B25BB000085B3832B85BB85B386238C
-:102A100085BB95B383B38095982395BB000085B3A0
-:102A2000832B85BB85B3862385BB95B383B3809504
-:102A3000982395BB000085B3832B85BB80E090E095
-:102A40000000019621E08C329207D1F784B3709593
-:102A5000872384BB85B3862385BB000085B3832B86
-:102A600085BB43B385B3862385BB55270A2E02C099
-:102A7000559547950A94E2F741705070440F000055
-:102A800085B3832B85BB83B325B3262325BB992729
-:102A90000A2E02C0959587950A94E2F78170482B1B
-:102AA000440F000085B3832B85BB83B325B3262356
-:102AB00025BB99270A2E02C0959587950A94E2F7BF
-:102AC0008170482B440F000085B3832B85BB83B3F3
-:102AD00025B3262325BB99270A2E02C095958795F5
-:102AE0000A94E2F78170482B440F000085B3832BD2
-:102AF00085BB83B325B3262325BB99270A2E02C0A5
-:102B0000959587950A94E2F78170482B440F000051
-:102B100085B3832B85BB83B325B3262325BB992798
-:102B20000A2E02C0959587950A94E2F78170482B8A
-:102B3000440F000085B3832B85BB83B325B32623C5
-:102B400025BB99270A2E02C0959587950A94E2F72E
-:102B50008170482B440F000085B3832B85BB83B362
-:102B6000992702C095958795AA95E2F78170482B21
-:102B7000842F99270895FC0144B3A081B18121E0FD
-:102B800030E0C9010A2E02C0880F991F0A94E2F7AB
-:102B9000782F482B44BB47E050E04A1B5B0B028078
-:102BA00002C0220F331F0A94E2F7322F622F609582
-:102BB00085B3862385BB25B383B38095282382E024
-:102BC00090E0042E02C0959587950A94E2F787233A
-:102BD000282B25BB000085B3832B85BB85B38623BB
-:102BE00085BB25B383B38095282384E090E0042E31
-:102BF00002C0959587950A94E2F78723282B25BB79
-:102C0000000085B3832B85BB85B3862385BB25B3A5
-:102C100083B38095282388E090E0042E02C0959528
-:102C200087950A94E2F78723282B25BB000085B3FC
-:102C3000832B85BB85B3862385BB25B383B3809562
-:102C4000282380E190E0042E02C0959587950A9490
-:102C5000E2F78723282B25BB000085B3832B85BB98
-:102C600085B3862385BB25B383B38095282380E273
-:102C700090E0042E02C0959587950A94E2F7872389
-:102C8000282B25BB000085B3832B85BB85B386230A
-:102C900085BB25B383B38095282380E490E0042E80
-:102CA00002C0959587950A94E2F78723282B25BBC8
-:102CB000000085B3832B85BB85B3862385BB25B3F5
-:102CC00083B38095282380E890E002C0959587958E
-:102CD0004A95E2F78723282B25BB000085B3832B79
-:102CE00085BB85B3862385BB95B383B38095982335
-:102CF00095BB000085B3832B85BB80E090E000008E
-:102D0000019621E08C329207D1F784B37095872326
-:102D100084BB85B3862385BB000085B3832B85BB2D
-:102D200043B385B3862385BB55270A2E02C055952C
-:102D300047950A94E2F741705070440F000085B344
-:102D4000832B85BB83B325B3262325BB99270A2E66
-:102D500002C0959587950A94E2F78170482B440F3D
-:102D6000000085B3832B85BB83B325B3262325BB06
-:102D700099270A2E02C0959587950A94E2F78170EB
-:102D8000482B440F000085B3832B85BB83B325B349
-:102D9000262325BB99270A2E02C0959587950A946C
-:102DA000E2F78170482B440F000085B3832B85BB6D
-:102DB00083B325B3262325BB99270A2E02C09595F8
-:102DC00087950A94E2F78170482B440F000085B381
-:102DD000832B85BB83B325B3262325BB99270A2ED6
-:102DE00002C0959587950A94E2F78170482B440FAD
-:102DF000000085B3832B85BB83B325B3262325BB76
-:102E000099270A2E02C0959587950A94E2F781705A
-:102E1000482B440F000085B3832B85BB83B39927D0
-:102E200002C095958795AA95E2F78170482B842F6B
-:102E300099270895FC0144B3A081B18121E030E0DD
-:102E4000C9010A2E02C0880F991F0A94E2F7782F51
-:102E5000482B44BB47E050E04A1B5B0B028002C09A
-:102E6000220F331F0A94E2F7322F622F609585B349
-:102E7000862385BB25B383B38095282383E090E028
-:102E8000042E02C0959587950A94E2F78723282B94
-:102E900025BB000085B3832B85BB85B3862385BB0B
-:102EA00025B383B38095282386E090E0042E02C0EA
-:102EB000959587950A94E2F78723282B25BB000078
-:102EC00085B3832B85BB85B3862385BB25B383B3AD
-:102ED000809528238CE090E0042E02C0959587957C
-:102EE0000A94E2F78723282B25BB000085B3832BA8
-:102EF00085BB85B3862385BB25B383B38095282303
-:102F000088E190E0042E02C0959587950A94E2F737
-:102F10008723282B25BB000085B3832B85BB85B376
-:102F2000862385BB25B383B38095282380E390E077
-:102F3000042E02C0959587950A94E2F78723282BE3
-:102F400025BB000085B3832B85BB85B3862385BB5A
-:102F500025B383B38095282380E690E0042E02C039
-:102F6000959587950A94E2F78723282B25BB0000C7
-:102F700085B3832B85BB85B3862385BB25B383B3FC
-:102F80008095282380EC90E0042E02C095958795CB
-:102F90000A94E2F78723282B25BB000085B3832BF7
-:102FA00085BB85B3862385BB25B383B38095282352
-:102FB00080E890E002C0959587954A95E2F78723CF
-:102FC000282B25BB000085B3832B85BB80E090E0D8
-:102FD0000000019621E08C329207D1F784B37095FE
-:102FE000872384BB85B3862385BB000085B3832BF1
-:102FF00085BB43B385B3862385BB55270A2E02C004
-:10300000559547950A94E2F741705070440F0000BF
-:1030100085B3832B85BB83B325B3262325BB992793
-:103020000A2E02C0959587950A94E2F78170482B85
-:10303000440F000085B3832B85BB83B325B32623C0
-:1030400025BB99270A2E02C0959587950A94E2F729
-:103050008170482B440F000085B3832B85BB83B35D
-:1030600025B3262325BB99270A2E02C0959587955F
-:103070000A94E2F78170482B440F000085B3832B3C
-:1030800085BB83B325B3262325BB99270A2E02C00F
-:10309000959587950A94E2F78170482B440F0000BC
-:1030A00085B3832B85BB83B325B3262325BB992703
-:1030B0000A2E02C0959587950A94E2F78170482BF5
-:1030C000440F000085B3832B85BB83B325B3262330
-:1030D00025BB99270A2E02C0959587950A94E2F799
-:1030E0008170482B440F000085B3832B85BB83B3CD
-:1030F000992702C095958795AA95E2F78170482B8C
-:10310000842F99270895FC01672B09F03FC284E0C2
-:1031100090E09183808386E090E09383828320E037
-:1031200030E080E090E00000019645E08D379407A4
-:10313000D1F72F5F3F4F2436310599F784B321E053
-:1031400030E0028002C0220F331F0A94E2F7322FD0
-:10315000822B84BB85B3622F6095862385BB40E0BC
-:1031600050E080E090E00000019625E08D37920766
-:10317000D1F74F5F5F4F4A30510599F724B3408133
-:10318000518181E090E0042E02C0880F991F0A94BB
-:10319000E2F7782F282B24BBE7E0F0E0E41BF50BE7
-:1031A00085B3862385BB25B383B38095282380E828
-:1031B00090E00E2E02C0959587950A94E2F7472F6E
-:1031C0004823242B25BB000085B3832B85BB85B307
-:1031D000862385BB95B383B38095982395BB000068
-:1031E00085B3832B85BB85B3862385BB95B383B31A
-:1031F0008095982395BB000085B3832B85BB85B351
-:10320000862385BB95B383B38095982395BB000037
-:1032100085B3832B85BB85B3862385BB95B383B3E9
-:103220008095982395BB000085B3832B85BB85B320
-:10323000862385BB95B383B38095982395BB000007
-:1032400085B3832B85BB85B3862385BB95B383B3B9
-:103250008095982395BB000085B3832B85BB85B3F0
-:10326000862385BB95B383B38095982395BB0000D7
-:1032700085B3832B85BB84B3872B84BB85B386231F
-:1032800085BB95B383B380959823942B95BB0000A1
-:1032900085B3832B85BB85B3862385BB95B383B369
-:1032A0008095982395BB000085B3832B85BB85B3A0
-:1032B000862385BB95B383B38095982395BB000087
-:1032C00085B3832B85BB85B3862385BB95B383B339
-:1032D0008095982395BB000085B3832B85BB85B370
-:1032E000862385BB95B383B38095982395BB000057
-:1032F00085B3832B85BB85B3862385BB95B383B309
-:103300008095982395BB000085B3832B85BB85B33F
-:10331000862385BB95B383B38095982395BB000026
-:1033200085B3832B85BB85B3862385BB95B383B3D8
-:103330008095982395BB000085B3832B85BB80E0E7
-:1033400090E00000019621E08C329207D1F784B31F
-:10335000872B84BB85B3862385BB25B383B3809538
-:10336000282380E890E00E2E02C0959587950A9458
-:10337000E2F78723282B25BB000085B3832B85BB71
-:1033800085B3862385BB95B383B38095982395BB7E
-:10339000000085B3832B85BB85B3862385BB95B39E
-:1033A00083B38095982395BB000085B3832B85BBA1
-:1033B00085B3862385BB95B383B38095982395BB4E
-:1033C000000085B3832B85BB85B3862385BB95B36E
-:1033D00083B38095982395BB000085B3832B85BB71
-:1033E00085B3862385BB95B383B38095982395BB1E
-:1033F000000085B3832B85BB85B3862385BB95B33E
-:1034000083B38095982395BB000085B3832B85BB40
-:1034100085B3862385BB95B383B38095982395BBED
-:10342000000085B3832B85BB84B3872B84BB85B316
-:10343000862385BB25B383B38095282381E090E064
-:103440000E2E02C0959587950A94E2F78723282BC4
-:1034500025BB000085B3832B85BB85B3862385BB45
-:1034600025B383B38095282382E090E00E2E02C01E
-:10347000959587950A94E2F78723282B25BB0000B2
-:1034800085B3832B85BB85B3862385BB25B383B3E7
-:103490008095282384E090E00E2E02C095958795B4
-:1034A0000A94E2F78723282B25BB000085B3832BE2
-:1034B00085BB85B3862385BB25B383B3809528233D
-:1034C00088E090E00E2E02C0959587950A94E2F769
-:1034D0008723282B25BB000085B3832B85BB85B3B1
-:1034E000862385BB25B383B38095282380E190E0B4
-:1034F0000E2E02C0959587950A94E2F78723282B14
-:1035000025BB000085B3832B85BB85B3862385BB94
-:1035100025B383B38095282380E290E00E2E02C06D
-:10352000959587950A94E2F78723282B25BB000001
-:1035300085B3832B85BB85B3862385BB25B383B336
-:103540008095282380E490E002C095958795EA95C0
-:10355000E2F77823272B25BB000085B3832B85BB9F
-:1035600085B3682365BB95B383B380959823942B6B
-:1035700095BB000085B3382B35BB80E090E00000A0
-:10358000019641E08C329407D1F7089585E090E0F0
-:103590009183808387E090E093838283C0CDFC0198
-:1035A00060857185828593850E94AA1FDC01CB010D
-:1035B0000895FC0164857585868597850E94AA1FFC
-:1035C000DC01CB010895FC018089918908952F9237
-:1035D0003F924F925F926F927F928F929F92AF92A3
-:1035E000BF92CF92DF92EF92FF920F931F93CF93F0
-:1035F000DF93CDB7DEB725970FB6F894DEBF0FBEC9
-:10360000CDBF1C010E941A17E82EC1010E94BB15F4
-:10361000482E84E0882E912C820C931CC4010E94B9
-:103620001A17A82EC4010E94BB158983F101608975
-:103630007189635D7F4F882777FD8095982F0E9461
-:10364000411F6A837B838C839D83FF240027F7FCC3
-:103650000095102FC801B7010E94411F7B018C010A
-:103660006A817B818C819D810E94A2239B01AC0198
-:10367000C801B7010E94231E3B014C01BB24CC248E
-:10368000B7FCC094DC2CC601B5010E94411F7B0130
-:103690008C016A817B818C819D810E9405239B0125
-:1036A000AC01C801B7010E94231E9B01AC01C401FB
-:1036B000B3010E94F61D20E030E040E05FE30E948D
-:1036C000231E9B01AC01F101608571858285938584
-:1036D0000E94F61DF10160877187828793875524C8
-:1036E000662457FC6094762CC301B2010E94411FEE
-:1036F0007B018C016A817B818C819D810E94A22348
-:103700009B01AC01C801B7010E94231E5B016C0143
-:10371000F9816F2F7727882777FD8095982F0E9452
-:10372000411F7B018C016A817B818C819D810E947C
-:1037300005239B01AC01C801B7010E94231E9B0118
-:10374000AC01C601B5010E94F61D20E030E040E06A
-:103750005FE30E94231E9B01AC01F1016485758526
-:10376000868597850E94F61DF10164877587868797
-:10377000978725960FB6F894DEBF0FBECDBFDF91B9
-:10378000CF911F910F91FF90EF90DF90CF90BF905E
-:10379000AF909F908F907F906F905F904F903F90F1
-:1037A0002F9008950F931F938C0104960E94E508B3
-:1037B000C8010E94E5081F910F9108950F931F9370
-:1037C0008C0104960E94E508C8010E94E5081F913B
-:1037D0000F910895EF92FF920F931F938C010E9417
-:1037E000E30894E0E92EF12CE00EF11EC7010E94DF
-:1037F000E30860E070E0C8010E94831861E070E0B7
-:10380000C7010E94831880E090E0A0E0B0E0F801DA
-:1038100080879187A287B38784879587A687B78794
-:10382000118A108A1F910F91FF90EF900895EF92E7
-:10383000FF920F931F938C010E94E30824E0E22E75
-:10384000F12CE00EF11EC7010E94E30860E070E079
-:10385000C8010E94831861E070E0C7010E948318CC
-:1038600080E090E0A0E0B0E0F80180879187A28737
-:10387000B38784879587A687B787118A108A1F9197
-:103880000F91FF90EF900895FC018FEF9FEF9183D0
-:10389000808393838283958384839783868308952B
-:1038A000FC018FEF9FEF91838083938382839583C5
-:1038B000848397838683089508950895FB01643077
-:1038C000710538F4EE0FFF1FE80FF91F8081918119
-:1038D00008958FEF9FEF0895EF92FF920F931F933C
-:1038E0007C0108E311E060E070E0C8010E9415026D
-:1038F000F7019183808361E070E0C8010E941502A6
-:10390000F7019383828362E070E0C8010E94150290
-:10391000F7019583848363E070E0C8010E9415027B
-:10392000F701978386831F910F91FF90EF90089581
-:10393000A0E0B0E0EEE9FCE10C94CC22FC016A01CD
-:103940009081923008F41BC1DB018C91823080F0B1
-:10395000943061F4843009F012C19181EB018981C6
-:10396000981709F40CC1E9E2F1E009C1843011F4BF
-:10397000FB0105C1823091F4923009F000C1EA01E7
-:10398000DF0188E00D9009928150E1F78181FB0110
-:1039900091818923E6018983F601F1C0923041F3D8
-:1039A00062807380EB018A809B80E480F5800681D1
-:1039B00017812C813D814E815F815301A818B90880
-:1039C000C501B7FCABC080970CF457C086149704B0
-:1039D0000CF4BEC03401EE24FF2487019181FB0169
-:1039E0008181981709F4A6C0992309F49CC02E1967
-:1039F0003F09400B510B57FDB0C0E60119827B8295
-:103A00006A82F6012483358346835783E6012C813D
-:103A10003D814E815F8179018A01DA01C9010197F7
-:103A2000A109B1098F5F9F4FAF4FBF43F8F4E60183
-:103A30006A817B81A8019701220F331F441F551F04
-:103A40006150704079018A01DA01C9010197A10929
-:103A5000B1098F5F9F4FAF4FBF4360F3E6017B8398
-:103A60006A83F601248335834683578383E0D60136
-:103A70008C9357FD39C0F60182C086149704B4F4C4
-:103A8000C0E0D0E0DA01C90181709070A070B07020
-:103A90005695479537952795282B392B4A2B5B2B25
-:103AA0002196AC16BD0671F78A0C9B1C681479042C
-:103AB0000CF094CFC0E0D0E05401A618B708D801AC
-:103AC000C70181709070A070B07016950795F7943B
-:103AD000E794E82AF92A0A2B1B2B2196AC16BD067F
-:103AE00071F76A0C7B1C7ACFDA01C901B695A795EC
-:103AF000979587952170307040705070282B392B26
-:103B00004A2B5B2BE6012C833D834E835F838A81A6
-:103B10009B8101969B838A83F60131C08827992770
-:103B20008A199B0950CFE21AF30A040B150BA8015E
-:103B3000970161CFE60199837B826A822E0D3F1D3A
-:103B4000401F511FF60124833583468357838ECF50
-:103B500020E030E040E050E041CF81E0E6018983A1
-:103B60007B826A8250954095309521953F4F4F4F0B
-:103B70005F4FF601248335834683578347CFCF01B8
-:103B8000EEE0CDB7DEB70C94E822A0E2B0E0EBECBB
-:103B9000FDE10C94D42269837A838B839C832D83EB
-:103BA0003E834F83588789E1E82EF12CEC0EFD1EF1
-:103BB000B701CE0101960E941C218E010F5E1F4F9E
-:103BC000B801CE0105960E941C218A8991E08927BF
-:103BD0008A8BAE01475F5F4FB801C7010E94981CF6
-:103BE0000E94FA1FE6E0A0960C94F022A0E2B0E05A
-:103BF000ECEFFDE10C94D42269837A838B839C8360
-:103C00002D833E834F83588799E1E92EF12CEC0EEA
-:103C1000FD1EB701CE0101960E941C218E010F5E90
-:103C20001F4FB801CE0105960E941C21AE01475FCF
-:103C30005F4FB801C7010E94981C0E94FA1FE6E07E
-:103C4000A0960C94F022A0E2B0E0E9E2FEE10C9430
-:103C5000C82269837A838B839C832D833E834F8321
-:103C600058878E01075E1F4FB801CE0101960E9452
-:103C70001C21F1E1EF2EF12CEC0EFD1EB701CE015F
-:103C800005960E941C21898D823078F099899230A6
-:103C900040F420E09A8D8A89981321E02A8BB7019D
-:103CA000E9C0843051F4923061F020E09A8D8A8925
-:103CB000981321E02A8FB801DDC0943029F48230B6
-:103CC00041F769E271E0D6C0823079F3923009F3AE
-:103CD0002D8D3E8D4F8D58A18D899E89AF89B88DD0
-:103CE000222433242101AA24BB246501EE24FF24CD
-:103CF000870160E070E00DC06F5F7F4F603271053B
-:103D000099F1880F991FAA1FBB1F569547953795A4
-:103D1000279520FF19C0280E391E4A1E5B1E6624F7
-:103D200077244301281639064A065B0628F4E1E0A9
-:103D30006E2E712C812C912CAE0CBF1CC01ED11E7E
-:103D4000A60CB71CC81CD91CEE0CFF1C001F111FB1
-:103D5000B7FFD2CFE1E06E2E712C812C912CE6289A
-:103D6000F72808291929C8CF8B8D9C8D2B893C8970
-:103D7000820F931F02969C878B871A869A8D8A8959
-:103D8000981711F081E08A87D7FE17C08B859C8534
-:103D9000A0FE0CC0569447943794279420E030E05E
-:103DA00040E050E8222A332A442A552AD694C79460
-:103DB000B794A79401969C878B8730E0A31630E0D8
-:103DC000B30630E0C30630E4D30618F58B859C8536
-:103DD0000EC0220C331C441C551C019720E0A21677
-:103DE00020E0B20620E0C20620E4D20680F4AA0C4D
-:103DF000BB1CCC1CDD1C57FEECCF31E0632E712CBC
-:103E0000812C912CA628B728C828D928E2CF9C87D6
-:103E10008B87D601C5018F779070A070B070803409
-:103E20009105A105B10551F0AD86BE86CF86D88A31
-:103E300083E08987BE01675F7F4F1CC0A7FCF4CF7A
-:103E4000211431044104510479F380E490E0A0E0AE
-:103E5000B0E0A80EB91ECA1EDB1E80E8682E8FEFE8
-:103E6000782E8FEF882E8FEF982EA620B720C820AF
-:103E7000D920DACFCB010E94FA1FE2E1A0960C9480
-:103E8000E422A8E0B0E0E7E4FFE10C94D7229B0134
-:103E9000AC0183E089831A8257FD51C02115310599
-:103EA0004105510539F482E08983CE0101960E94D3
-:103EB000FA1F4CC0EEE1F0E0FC83EB838A8188239B
-:103EC000C9F1203010E0310710E0410710E8510738
-:103ED000C9F188279927DC01821B930BA40BB50B32
-:103EE0008D839E83AF83B8872D813E814F81588516
-:103EF000203080E0380780E0480780E45807A8F6C3
-:103F0000EB81FC81DA01C901880F991FAA1FBB1F31
-:103F100031979C01AD01803010E0910710E0A107BE
-:103F200010E4B10778F3FC83EB838D839E83AF832A
-:103F3000B887BBCF2D833E834F835887D5CF81E091
-:103F40008A83ACCF60E070E080E09FECE3E02896ED
-:103F50000C94F322ACE0B0E0E0EBFFE10C94D8224B
-:103F600069837A838B839C83BE016B5F7F4FCE0115
-:103F700001960E941C218D81823061F0823050F0C8
-:103F8000843069F48E81882359F52FEF3FEF4FEF8E
-:103F90005FE72AC020E030E040E050E025C02F81FC
-:103FA000388537FDF7CF2F31310564F78EE190E08A
-:103FB000821B930B29853A854B855C8504C05695F9
-:103FC0004795379527958A95D2F78E81882361F09A
-:103FD00050954095309521953F4F4F4F5F4F04C00E
-:103FE00020E030E040E050E8CA01B901E2E02C9660
-:103FF0000C94F4224F925F926F927F928F929F92D5
-:10400000AF92BF92DF92EF92FF920F931F9320E047
-:1040100030E040E050E0FC01E480F580068117814B
-:10402000D1808081823038F4D801C701A061AF7798
-:10403000B0706FEFD9C0843009F46EC0823009F4DB
-:1040400071C0E114F1040105110509F46BC082810E
-:1040500093816FEF823896070CF06AC062E87FEFB9
-:10406000681B790B6A3171050CF080C0470158015B
-:10407000062E04C0B694A794979487940A94D2F716
-:1040800044245524320181E090E0A0E0B0E004C077
-:10409000880F991FAA1FBB1F6A95D2F70197A10924
-:1040A000B109E822F9220A231B23E114F1040105D6
-:1040B000110529F061E0462E512C612C712C8501EF
-:1040C0007401E428F52806291729D801C7018F773C
-:1040D0009070A070B07080349105A105B10509F40D
-:1040E00057C0D801C701CF96A11DB11D60E070E097
-:1040F0008030E0E09E07E0E0AE07E0E4BE0710F0AD
-:1041000061E070E027E0B695A795979587952A9589
-:10411000D1F7AF77B07068C080E090E0A0E0B0E089
-:104120006FEF62C080E090E0A0E0B0E060E05CC0D3
-:10413000803891058CF7BC0161587F4FD801C701C9
-:104140008F779070A070B07080349105A105B10593
-:10415000A1F08FE390E0A0E0B0E0E80EF91E0A1FA6
-:104160001B1F17FD28C0D801C701CCCF60E070E04D
-:1041700080E090E0A0E0B0E0CCCFE7FEF2CF80E4BA
-:1041800090E0A0E0B0E0E80EF91E0A1F1B1FE9CF87
-:10419000E7FC18C080E090E060E0E61660E0F6061C
-:1041A00060E0060760E4160710F081E090E0BC01D3
-:1041B000D801C701A7CF16950795F794E7946F5FCD
-:1041C0007F4FD1CFD801C701805C9F4FAF4FBF4F0A
-:1041D00060E070E08030E0E09E07E0E0AE07E0E401
-:1041E000BE0708F48FCF8CCF282F392F9A2F9F77B7
-:1041F000842F8078892B962F9795992797958F777D
-:10420000482F492B6695852F8078862BD794DD24FF
-:10421000D7948F77582F5D29CA01B9011F910F914B
-:10422000FF90EF90DF90BF90AF909F908F907F9026
-:104230006F905F904F900895FC01DB0120813181E8
-:104240009281492F4F7750E0991F9927991F8381B9
-:10425000682F660F692B881F8827881FFD018183BF
-:10426000662309F049C0211531054105510509F4BE
-:1042700070C082E89FEFFD0193838283220F331F7A
-:10428000441F551F220F331F441F551F220F331F7A
-:10429000441F551F220F331F441F551F220F331F6A
-:1042A000441F551F220F331F441F551F220F331F5A
-:1042B000441F551F83E08C932030F0E03F07F0E06F
-:1042C0004F07F0E45F0790F482E89FEF220F331F5F
-:1042D000441F551F0197203060E0360760E0460715
-:1042E00060E4560798F3FD0193838283FD012483E4
-:1042F00035834683578308956F3F71F1862F992741
-:104300008F579040FD019383828383E08C93220F2B
-:10431000331F441F551F220F331F441F551F220FE9
-:10432000331F441F551F220F331F441F551F220FD9
-:10433000331F441F551F220F331F441F551F220FC9
-:10434000331F441F551F506424833583468357838E
-:10435000089582E08C93089521153105410551059A
-:1043600019F484E08C93089544FD02C01C92BECFE2
-:1043700081E08C93BBCFCF93DF93AC01029710F415
-:1043800042E050E0A091FC01B091FD01FD01C0E0D0
-:10439000D0E020E030E020C0808191818417950733
-:1043A00069F482819381209719F09B838A8304C0EA
-:1043B0009093FD018093FC01CF0132C0481759074B
-:1043C00038F42115310519F08217930708F49C0180
-:1043D000EF010280F381E02D3097F1F621153105D0
-:1043E00089F1C901841B950B049708F4A901E0E049
-:1043F000F0E026C08D919C91119782179307E9F404
-:104400004817590779F4ED018A819B81309719F09B
-:104410009383828304C09093FD018093FC01CD01BE
-:10442000029649C0841B950BFD01E80FF91F4193CB
-:10443000519302978D939C933AC0FD01A281B38161
-:104440001097C1F68091FA019091FB01892B41F4FC
-:1044500080913301909134019093FB018093FA0194
-:1044600020913501309136012115310541F42DB7E8
-:104470003EB78091310190913201281B390BE091B8
-:10448000FA01F091FB012E1B3F0B2417350788F032
-:10449000CA0102962817390760F0CF01840F951FD3
-:1044A00002969093FB018093FA0141935193CF01BF
-:1044B00002C080E090E0DF91CF910895CF93DF9329
-:1044C000009709F44EC0EC0122971B821A82A0913A
-:1044D000FC01B091FD01109711F140E050E001C0E6
-:1044E000DC01AC17BD0700F1BB83AA83FE0121915B
-:1044F0003191E20FF31FEA17FB0771F42E5F3F4F74
-:104500008D919C911197820F931F99838883FD0150
-:10451000828193819B838A834115510559F4D093FD
-:10452000FD01C093FC011DC0FD0182819381AD019D
-:104530000097B1F6FA01D383C28321913191E20F42
-:10454000F31FEC17FD0769F42E5F3F4F88819981B7
-:10455000820F931FFA01918380838A819B819383C9
-:104560008283DF91CF910895AA1BBB1B51E107C045
-:10457000AA1FBB1FA617B70710F0A61BB70B881FF3
-:10458000991F5A95A9F780959095BC01CD01089582
-:104590002F923F924F925F926F927F928F929F9253
-:1045A000AF92BF92CF92DF92EF92FF920F931F9341
-:1045B000CF93DF93CDB7DEB7CA1BDB0B0FB6F894F2
-:1045C000DEBF0FBECDBF09942A88398848885F8432
-:1045D0006E847D848C849B84AA84B984C884DF80A3
-:1045E000EE80FD800C811B81AA81B981CE0FD11D87
-:1045F0000FB6F894DEBF0FBECDBFED010895EE0FEC
-:10460000FF1F0590F491E02D099450E449EC3FE040
-:104610002BED01D013C05F77552319F444230AF022
-:104620002BC02F933F934F935F93A3D055274427DD
-:1046300059D05F914F913F912F9105CB1F939F7759
-:1046400050EC49E43FE02BEDD1DA10E89F775FE3CF
-:1046500049EC3FE02BED621773078407950720F0C4
-:1046600050EC49E4C3DA112780D09068ECE8F0E020
-:1046700006D091271F9108959FEF80EC0895FF9237
-:10468000EF92DF92CF92BF926B017C01B59016D072
-:10469000B590BB2069F09F938F937F936F93B60182
-:1046A000C7010CD02F913F914F915F910E94B92388
-:1046B000BF90CF90DF90EF90FF900895A0D002C000
-:1046C0009601A701EF93FF930E94231EFF91EF91A4
-:1046D00096D0EF93FF930E94F61DFF91EF91BA944D
-:1046E00079F70895C8D0CF93DF93D52FC42F5527DE
-:1046F0004427332722279923D9F09F37C8F0F92F71
-:1047000088D0592F482F372F262FF63968F422DC0E
-:10471000B8DBC030CD0721F06993799389939993E1
-:104720009058DF91CF9162CA99278827772766270B
-:10473000C030CD0721F02993399349935993DF91E4
-:10474000CF9167C09F939F77993358F050E449EC1D
-:104750003FE02BED60DF5FEB49EC3FE02BED46DA0D
-:104760006DDF5F915078952708959B01AC010C9403
-:10477000231E67D001D04DC0552359F0992369F00D
-:104780009F575F57951B33F442F4903811F49158BA
-:1047900005C072CF91589F3F09F47FC0BB271124F9
-:1047A00062177307840730F4660F771F881FBB1FDB
-:1047B000915098F311D00F920FD00F920DD0A0E826
-:1047C0002617370748071B0609F0A048BA2F602DA7
-:1047D0007F918F9100240895A0E800246217730749
-:1047E0008407B10528F0621B730B840BB1090A2AF8
-:1047F000660F771F881FBB1FA69581F708955591F7
-:1048000045913591259108959A95BB0F661F771FA5
-:10481000881F11249923A1F08823B2F79F3F59F0F4
-:10482000BB0F48F421F4002011F460FF04C06F5F57
-:104830007F4F8F4F9F4F881F9795879597F90895C2
-:1048400029C0052E092607FA440F551F5F3F79F04E
-:10485000AA27A51708F051E04795880F991F9F3F99
-:1048600031F0BB27B91708F091E0879508959F9123
-:104870009F91112401CF97FB880F991F9F3F31F023
-:10488000BB27B91708F091E0879508959F919F91F4
-:104890001124F2CE6627772788279927089510E0FC
-:1048A000C4EBD0E004C0FE010E9401232296C63B67
-:0448B000D107C9F76C
-:1048B40048616C6C6F206869657220697374206448
-:1048C400617320524E4D65676131323846756E6BA7
-:1048D4002D426F61726400FF0000000000000000C0
-:0848E400002000FE01000000AD
+:10018000089580E090E0A0E0B0E000000196A11D9D
+:10019000B11D8E3E22E7920725E1A20720E0B207BB
+:1001A000A1F782E091E00E94CE0580E091E00E94FC
+:1001B000CE0580E090E0A0E0B0E000000196A11D37
+:1001C000B11D8E3E22E7920725E1A20720E0B2078B
+:1001D000A1F7EBCF0895089586E886B967B987B18E
+:1001E000806C87B9369A3699FECF40E020E030E047
+:1001F000369A3699FECF84B195B1280F391F4F5FDB
+:100200004330B1F73798C90163E070E00E94712272
+:10021000CB0108957093700160936F010895C19AA6
+:100220000895C19808956430710590F44115510501
+:1002300081F480E090E061157105C1F49BBD8ABD39
+:100240001416150684F5C09AC1980895949A959A43
+:100250000895CA0157FD22C088968F3F910559F332
+:1002600054F38FEF90E06115710541F36130710532
+:1002700069F06230710561F7909387008093860082
+:1002800014161506C4F4959A9498089599BD88BDDE
+:1002900014161506ACF4C29AC398089588279927B6
+:1002A000841B950BD9CF452B19F4C19AC09A089598
+:1002B000C19AC0980895452B49F2949A959808954B
+:1002C000452B19F0C39AC2980895C39AC29A08950B
+:1002D0008091650088608093650020E030E080E0D8
+:1002E00090E00000019645E08D379407D1F72F5F2D
+:1002F0003F4F83E0283E380791F780916500877F64
+:10030000809365000895DD9A0895DD9808951F9201
+:100310000F920FB60F9211242F933F938F939F93B9
+:100320002091290130912A0180916F0190917001F3
+:1003300097FD23C095958795821793077CF480914C
+:1003400065008460809365002115310579F48FEF95
+:1003500090E090932A018093290111C0809165005B
+:100360008B7F809365002115310589F32150304042
+:1003700030932A012093290102C00196DBCF9F917F
+:100380008F913F912F910F900FBE0F901F90189556
+:100390006430710508F03EC084B321E030E0062EE1
+:1003A00002C0220F331F0A94E2F7822B84BB85B36D
+:1003B000822B85BBE0E0F0E040E050E000004F5FC2
+:1003C0005F4F85E04D375807C9F7319683E0E83E27
+:1003D000F80791F785B3922F9095892385BB84B355
+:1003E000982394BB83B3992786239723892BD1F332
+:1003F00083B3992786239723892B61F02FEF3FEF53
+:100400002F5F3F4F000083B3992786239723892BC3
+:10041000B9F702C02FEF3FEFC9010895662311F02D
+:10042000C1980895C19A0895662311F0DD9A089540
+:10043000DD9808958EE78ABB1BBA2FEF27BB82E0B9
+:1004400088BB8FEC84BB15BA88EF81BB93E092BB6D
+:100450008FED82B913B810926100209362008FE192
+:10046000809364009093650091EA9FBD82E88EBD01
+:1004700090938B0080938A001BBC1ABCC19AC09ACF
+:1004800019BC18BCC39AC29A1092870010928600B9
+:10049000949A959A1E98DA9A969A979887E690E099
+:1004A0000E947F05789408958EE78ABB1BBA2FEFD0
+:1004B00027BB82E088BB8FEC84BB15BA88EF81BB79
+:1004C00093E092BB8FED82B913B810926100209334
+:1004D00062008FE1809364009093650091EA9FBD74
+:1004E00082E88EBD90938B0080938A001BBC1ABC5F
+:1004F000C19AC09A19BC18BCC39AC29A10928700BC
+:1005000010928600949A959A1E98DA9A969A9798DD
+:1005100087E690E00E947F057894089508950895F5
+:1005200008950E94FA0299270895CF92DF92EF92E0
+:10053000FF920F931F93CF93DF93CDB7DEB78C015C
+:10054000FB01EDB6FEB6DB010D900020E9F76D0171
+:100550000894C108D108C61AD70AC60101962DB75A
+:100560003EB7281B390B0FB6F8943EBF0FBE2DBF08
+:100570004DB75EB74F5F5F4F1C141D0464F420E05D
+:1005800030E0BA018191DB018D93BD012F5F3F4FB8
+:10059000C216D306B9F7960162E0C8010E9427048B
+:1005A0000FB6F894FEBE0FBEEDBEDF91CF911F9146
+:1005B0000F91FF90EF90DF90CF9008950E94EF028F
+:1005C00008950E94EF020895FC0180E4809370007A
+:1005D00084E4809374001092710010820895FC01ED
+:1005E00080E48093700084E4809374001092710022
+:1005F00010820895FC01808199270895660F609309
+:100600007200089580917400992787FD909588273E
+:10061000990F881F99270895FC0190E020E030E0B1
+:10062000660F44EC80917400806A8093740080911E
+:10063000740087FFFCCF80917100887F883001F5BE
+:1006400060937300409374008091740087FFFCCF27
+:1006500080917100887F883189F080917100887F56
+:10066000803221F09923F1F2108208952F5F3F4FDD
+:100670002A303105B9F781E08083089591E0EDCF0C
+:1006800082E080830895660F616024EC809174009D
+:10069000806A809374008091740087FFFCCF809102
+:1006A000710060937300209374008091740087FF41
+:1006B000FCCF8091710090917100809171008091C8
+:1006C0007400806880937400987F9034F9F60895E0
+:1006D0006093730084EC809374008091740087FFB2
+:1006E000FCCF8091710080917100089584ED80931A
+:1006F0007400089584EC809374008091740087FFE7
+:10070000FCCF20E030E094ECFB0180917100887F09
+:10071000803889F480917300808390937400809175
+:10072000740087FFFCCF2F5F3F4F3196809171009F
+:10073000887F803879F38091710084EC8093740015
+:10074000C9010895FB018091740087FFFCCF80915F
+:1007500071008091710080917300808384EC80939C
+:10076000740008951F93141615060CF5DA011197FD
+:1007700020E030E014E894ECFB018081809373006A
+:10078000A217B30789F0909374008091740087FFDB
+:10079000FCCF80917100809171002F5F3F4F3196A7
+:1007A0004217530751F703C010937400EECF84EC47
+:1007B000809374001F910895FC01660F616074ECD2
+:1007C00080917400806A809374008091740087FF28
+:1007D000FCCF8091710060937300709374008091DE
+:1007E000740087FFFCCF809171009091710080911F
+:1007F000710080917400806880937400987F9034B9
+:10080000F9F680818823E9F412161306B4F460E047
+:1008100070E094ECFA018091740087FFFCCF809126
+:1008200071008091710080917300819390937400A6
+:100830006F5F7F4F2617370771F784ED8093740041
+:10084000089584ED8093740083E080830895DC0133
+:1008500090E0E0E0F0E0660F74EC80917400806A54
+:10086000809374008091740087FFFCCF80917100A9
+:10087000887F8830E9F560937300709374008091ED
+:10088000740087FFFCCF80917100887F883171F1FF
+:1008900080917100887F803211F19923F1F21C92CE
+:1008A00012161306BCF460E070E094ECFA0180814B
+:1008B00080937300909374008091740087FFFCCF45
+:1008C00080917100809171006F5F7F4F3196261784
+:1008D000370769F784ED809374001C920895319670
+:1008E000EA30F105D1F681E08C9304C091E0D0CFDD
+:1008F00082E08C9384ED8093740008950E941B2203
+:1009000008950E94782108951F920F920FB60F92BA
+:1009100011242F933F934F938F939F93EF93FF93C4
+:100920003BB14CB12091D8012F5F2F718091D9013B
+:10093000E22FFF279927E817F90741F0832F8871E5
+:100940002093D801E652FE4F408301C082E080939D
+:10095000FA01FF91EF919F918F914F913F912F91CC
+:100960000F900FBE0F901F9018951F920F920FB609
+:100970000F9211248F939F93EF93FF939091B60161
+:100980008091B701981761F0E091B701EF5FEF71C7
+:10099000E093B701FF27E854FE4F80818CB901C076
+:1009A0005598FF91EF919F918F910F900FBE0F90EF
+:1009B0001F9018959C011092B6011092B7011092E9
+:1009C000D8011092D90197FF03C082E08BB93F771D
+:1009D000832F99278093900029B988E98AB986E006
+:1009E0008093950008959091D8018091D90198172E
+:1009F00091F0E091D901EF5FEF71E093D901FF270A
+:100A0000E652FE4F20818091FA019927982F88277E
+:100A1000820F911D089580E091E00895382F209174
+:100A2000B6012F5F2F71E22FFF278091B701992721
+:100A30008E179F07D1F3E854FE4F30832093B60101
+:100A4000559A08951F920F920FB60F9211242F936B
+:100A50003F934F938F939F93EF93FF9330919B001E
+:100A600040919C00209193012F5F2F718091940100
+:100A7000E22FFF279927E817F90741F0832F8871A4
+:100A800020939301EB56FE4F408301C082E0809398
+:100A9000B501FF91EF919F918F914F913F912F91D0
+:100AA0000F900FBE0F901F9018951F920F920FB6C8
+:100AB0000F9211248F939F93EF93FF939091710165
+:100AC00080917201981769F0E0917201EF5FEF7108
+:100AD000E0937201FF27ED58FE4F808180939C00C8
+:100AE00005C080919A008F7D80939A00FF91EF91CD
+:100AF0009F918F910F900FBE0F901F9018959C01A2
+:100B0000109271011092720110929301109294014F
+:100B100097FF04C082E080939B003F77832F992743
+:100B2000809398002093990088E980939A0086E04A
+:100B300080939D000895909193018091940198175E
+:100B400091F0E0919401EF5FEF71E0939401FF2742
+:100B5000EB56FE4F20818091B5019927982F882769
+:100B6000820F911D089580E091E00895382F209123
+:100B700071012F5F2F71E22FFF278091720199275A
+:100B80008E179F07D1F3ED58FE4F308320937101EC
+:100B900080919A00806280939A000895DC013C91D4
+:100BA0003323D1F01196209171012F5F2F71E22F25
+:100BB000FF27809172019927E817F907D1F3ED58C3
+:100BC000FE4F30832093710180919A008062809360
+:100BD0009A003C91332331F70895FC0184918823D6
+:100BE000D1F0AF014F5F5F4F382F2091B6012F5FDB
+:100BF0002F71E22FFF278091B7019927E817F90796
+:100C0000D1F3E854FE4F30832093B601559AFA0190
+:100C10008491882339F70895DC013C913323B1F0A6
+:100C200011962091B6012F5F2F71E22FFF2780913F
+:100C3000B7019927E817F907D1F3E854FE4F30833D
+:100C40002093B601559A3C91332351F70895FC0146
+:100C500084918823F1F0AF014F5F5F4F382F2091CF
+:100C600071012F5F2F71E22FFF2780917201992769
+:100C7000E817F907D1F3ED58FE4F30832093710147
+:100C800080919A00806280939A00FA01849188236F
+:100C900019F7089508950895FC01718360830895FC
+:100CA000FC01738362830895FC0175836483089556
+:100CB0002F923F924F925F926F927F928F929F926C
+:100CC000AF92BF92CF92DF92EF92FF920F931F935A
+:100CD000CF93DF93CDB7DEB724970FB6F894DEBF7E
+:100CE0000FBECDBF1C01FC0160817181882777FD9B
+:100CF0008095982F0E94FE1E2DE433EF4EE85CE3B2
+:100D00000E94E01D7B018C010E94C22269837A83CC
+:100D10008B839C83C801B7010E945F235B016C0138
+:100D200083E491E00E946207F10122813381821BFA
+:100D3000930BAA2797FDA095BA2FBC01CD010E9465
+:100D4000FE1E3B014C0127ED33EB4DED5FE3698166
+:100D50007A818B819C810E94E01DA60195010E94F1
+:100D6000821D20E030E040E05FE30E94E01D7B0157
+:100D70008C01F10164817581882777FD8095982F1A
+:100D80000E94FE1E9B01AC01C801B7010E94E01D3C
+:100D9000A40193010E94B31D0E94671FAB01BC0117
+:100DA0008AE3482E81E0582E60E070E0C2010E9484
+:100DB0001301F10164817581882777FD8095982F53
+:100DC0000E94FE1E9B01AC01C601B5010E94E01D00
+:100DD0009B01AC01C401B3010E94B31D0E94671FB7
+:100DE000AB01BC0161E070E0C2010E94130127ED7C
+:100DF00033EB4DED5FEB69817A818B819C810E94A1
+:100E0000E01DA60195010E94821D20E030E040E037
+:100E10005FE30E94E01D7B018C01F101648175811B
+:100E2000882777FD8095982F0E94FE1E9B01AC01BC
+:100E3000C801B7010E94E01D9B01AC01C401B301D0
+:100E40000E94B31D0E94671FAB01BC0162E070E00D
+:100E5000C2010E94130124960FB6F894DEBF0FBEA4
+:100E6000CDBFDF91CF911F910F91FF90EF90DF9059
+:100E7000CF90BF90AF909F908F907F906F905F903A
+:100E80004F903F902F900895FC01118210821382A1
+:100E90001282158214820E9458060895FC01118264
+:100EA000108213821282158214820E9458060895BD
+:100EB000FC017183608353834283358324830E94C2
+:100EC0005806089542960E94A01A08950F931F9302
+:100ED0008C0142960E94A41AC8010E940008C80111
+:100EE00084960E94291C1F910F9108950F931F93C0
+:100EF0008C0184960E941A1CC80142960E948F1B86
+:100F0000C8010E94FB071F910F9108950F931F9333
+:100F10008C0184960E941A1CC80142960E948F1B65
+:100F2000C8010E94FB071F910F9108950F931F9313
+:100F30008C010E94D807C80142960E94A71BC801D5
+:100F400084960E940D1C1F910F9108950F931F937B
+:100F50008C010E94D807C80142960E94A71BC801B5
+:100F600084960E940D1C1F910F910895FC0111821F
+:100F700010828EE190E0938382838CE390E09583EE
+:100F8000848384E690E09783868384EB90E0918766
+:100F9000808784E091E0938782878CE291E0958757
+:100FA00084878AE491E097878687118A108A08955A
+:100FB000FC01118210828EE190E0938382838CE3A6
+:100FC00090E09583848384E690E09783868384EB26
+:100FD00090E09187808784E091E0938782878CE21C
+:100FE00091E0958784878AE491E097878687118AC4
+:100FF000108A089508950895FC01808991890895C3
+:101000000F931F93CF93DF93CDB7DEB760970FB6E3
+:10101000F894DEBF0FBECDBF8C0160E08AE391E0A3
+:101020000E94EC009A83898361E08AE391E00E9448
+:10103000EC009C838B8362E08AE391E00E94EC00E9
+:101040009E838D8363E08AE391E00E94EC009887A1
+:101050008F8364E08AE391E00E94EC009A8789879D
+:1010600065E08AE391E00E94EC009C878B8766E054
+:101070008AE391E00E94EC009E878D8767E08AE317
+:1010800091E00E94EC00988B8F8729813A8144E09F
+:101090002030340714F020E034E04B815C814217AB
+:1010A0005307ACF5E1E0F0E02D813E8124173507D0
+:1010B00064F5E2E0F0E04F815885421753071CF5D4
+:1010C000E3E0F0E029853A8524173507D4F4E4E01D
+:1010D000F0E04B855C85421753078CF4E5E0F0E0C7
+:1010E0002D853E852417350744F4E6E0F0E08217AD
+:1010F00093078CF4E7E0F0E00EC09A01F8CFA90165
+:10110000EFCF9A01E6CFA901DDCF9A01D4CFA90193
+:10111000E0E0F0E0C9CFEE0FFF1FE00FF11F80818C
+:101120009181F801918B808B60960FB6F894DEBFA9
+:101130000FBECDBFDF91CF911F910F9108950895FC
+:101140000895089508950F931F93CF93DF93DC01C3
+:1011500084B32D913C91119741E050E0FA01022EA9
+:1011600002C0EE0FFF1F0A94E2F78E2B84BB07E04C
+:1011700010E0021B130BED010A8002C0440F551F43
+:101180000A94E2F7342F309585B3832385BB25B3CA
+:1011900083B380952823862F9927002E02C095952A
+:1011A00087950A94E2F78E23282B25BB660F000053
+:1011B00085B3842B85BB85B3832385BB25B383B3DC
+:1011C00080952823862F9927002E02C09595879514
+:1011D0000A94E2F78E23282B25BB660F000085B307
+:1011E000842B85BB85B3832385BB25B383B38095CF
+:1011F0002823862F9927002E02C0959587950A945B
+:10120000E2F78E23282B25BB660F000085B3842BC5
+:1012100085BB85B3832385BB25B383B38095282302
+:10122000862F9927002E02C0959587950A94E2F79C
+:101230008E23282B25BB660F000085B3842B85BB2E
+:1012400085B3832385BB25B383B380952823862F5D
+:101250009927002E02C0959587950A94E2F78E2370
+:10126000282B25BB660F000085B3842B85BB85B377
+:10127000832385BB25B383B380952823862F9927A5
+:10128000002E02C0959587950A94E2F78E23282BAD
+:1012900025BB660F000085B3842B85BB85B38323F4
+:1012A00085BB25B383B380952823862F9927002EED
+:1012B00002C0959587950A94E2F78E23282B25BBCB
+:1012C000000085B3842B85BB85B3832385BB95B391
+:1012D00083B380959823660F772702C0759567952D
+:1012E0000A95E2F7E6239E2B95BB000085B3482BB9
+:1012F00045BBDF91CF911F910F910895FC0124B35D
+:10130000A081B18161E070E0CB010A2E02C0880F9C
+:10131000991F0A94E2F78095282324BB028002C01B
+:10132000660F771F0A94E2F7362F309585B3832333
+:1013300085BB000085B3862B85BB43B385B3832370
+:1013400085BB55270A2E02C0559547950A94E2F7AA
+:1013500041705070440F000085B3862B85BB83B36A
+:1013600025B3232325BB99270A2E02C0959587957F
+:101370000A94E2F78170482B440F000085B3862B56
+:1013800085BB83B325B3232325BB99270A2E02C02F
+:10139000959587950A94E2F78170482B440F0000D9
+:1013A00085B3862B85BB83B325B3232325BB992720
+:1013B0000A2E02C0959587950A94E2F78170482B12
+:1013C000440F000085B3862B85BB83B325B323234D
+:1013D00025BB99270A2E02C0959587950A94E2F7B6
+:1013E0008170482B440F000085B3862B85BB83B3E7
+:1013F00025B3232325BB99270A2E02C095958795EF
+:101400000A94E2F78170482B440F000085B3862BC5
+:1014100085BB83B325B3232325BB99270A2E02C09E
+:10142000959587950A94E2F78170482B440F000048
+:1014300085B3682B65BB83B3992702C095958795C3
+:10144000AA95E2F78170482B842F99270895CF93AE
+:10145000DF93FC0144B3C081D18121E030E0C901B8
+:101460000C2E02C0880F991F0A94E2F7A82F482B70
+:1014700044BB47E050E04C1B5D0B028002C0220FD2
+:10148000331F0A94E2F7322FE22FE09585B38E23C3
+:1014900085BB25B383B380952823862F9927042EF7
+:1014A00002C0959587950A94E2F78A23282B25BBDD
+:1014B000660F000085B3832B85BB85B38E2385BB68
+:1014C00025B383B380952823862F9927042E02C045
+:1014D000959587950A94E2F78A23282B25BB660FFA
+:1014E000000085B3832B85BB85B38E2385BB25B3D5
+:1014F00083B380952823862F9927042E02C09595C3
+:1015000087950A94E2F78A23282B25BB660F0000F3
+:1015100085B3832B85BB85B38E2385BB25B383B36E
+:1015200080952823862F9927042E02C095958795AC
+:101530000A94E2F78A23282B25BB660F000085B3A7
+:10154000832B85BB85B38E2385BB25B383B3809561
+:101550002823862F9927042E02C0959587950A94F3
+:10156000E2F78A23282B25BB660F000085B3832B67
+:1015700085BB85B38E2385BB25B383B38095282394
+:10158000862F9927042E02C0959587950A94E2F735
+:101590008A23282B25BB660F000085B3832B85BBD0
+:1015A00085B38E2385BB25B383B380952823862FEF
+:1015B0009927042E02C0959587950A94E2F78A230D
+:1015C000282B25BB000085B3832B85BB85B38E23D9
+:1015D00085BB95B383B380959823660F772702C0A8
+:1015E000759567954A95E2F78A2F8623982B95BBC8
+:1015F000000085B3832B85BB80E090E0000001965E
+:1016000021E08C329207D1F784B3A0958A2384BB62
+:1016100085B38E2385BB000085B3832B85BB43B385
+:1016200085B38E2385BB55270C2E02C05595479553
+:101630000A94E2F741705070440F000085B3832B89
+:1016400085BB83B325B32E2325BB99270C2E02C05F
+:10165000959587950A94E2F78170482B440F000016
+:1016600085B3832B85BB83B325B32E2325BB992755
+:101670000C2E02C0959587950A94E2F78170482B4D
+:10168000440F000085B3832B85BB83B325B32E2382
+:1016900025BB99270C2E02C0959587950A94E2F7F1
+:1016A0008170482B440F000085B3832B85BB83B327
+:1016B00025B32E2325BB99270C2E02C0959587951F
+:1016C0000A94E2F78170482B440F000085B3832B06
+:1016D00085BB83B325B32E2325BB99270C2E02C0CF
+:1016E000959587950A94E2F78170482B440F000086
+:1016F00085B3832B85BB83B325B32E2325BB9927C5
+:101700000C2E02C0959587950A94E2F78170482BBC
+:10171000440F000085B3832B85BB83B3992702C098
+:1017200095958795CA95E2F78170482B842F992764
+:10173000DF91CF910895EF92FF920F931F93CF9374
+:10174000DF937C01606884B3E70128813981A1E0DF
+:10175000B0E0FD01022E02C0EE0FFF1F0A94E2F777
+:101760008E2B84BB07E010E0021B130B0A8002C023
+:10177000AA0FBB1F0A94E2F73A2F309585B3832353
+:1017800085BB25B383B380952823862F9927002E08
+:1017900002C0959587950A94E2F78E23282B25BBE6
+:1017A000660F000085B38A2B85BB85B3832385BB79
+:1017B00025B383B380952823862F9927002E02C056
+:1017C000959587950A94E2F78E23282B25BB660F03
+:1017D000000085B38A2B85BB85B3832385BB25B3E6
+:1017E00083B380952823862F9927002E02C09595D4
+:1017F00087950A94E2F78E23282B25BB660F0000FD
+:1018000085B38A2B85BB85B3832385BB25B383B37F
+:1018100080952823862F9927002E02C095958795BD
+:101820000A94E2F78E23282B25BB660F000085B3B0
+:101830008A2B85BB85B3832385BB25B383B3809572
+:101840002823862F9927002E02C0959587950A9404
+:10185000E2F78E23282B25BB660F000085B38A2B69
+:1018600085BB85B3832385BB25B383B380952823AC
+:10187000862F9927002E02C0959587950A94E2F746
+:101880008E23282B25BB660F000085B38A2B85BBD2
+:1018900085B3832385BB25B383B380952823862F07
+:1018A0009927002E02C0959587950A94E2F78E231A
+:1018B000282B25BB000085B38A2B85BB85B38323EA
+:1018C00085BB95B383B380959823660F7727002E49
+:1018D00002C0759567950A94E2F78E2F8623982BA0
+:1018E00095BB000085B38A2B85BB84B38E2B84BB4C
+:1018F00085B3832385BB25B383B380952823842FA9
+:101900009927002E02C0959587950A94E2F78E23B9
+:10191000282B25BB440F000085B38A2B85BB85B3DC
+:10192000832385BB25B383B380952823842F9927F0
+:10193000002E02C0959587950A94E2F78E23282BF6
+:1019400025BB440F000085B38A2B85BB85B3832359
+:1019500085BB25B383B380952823842F9927002E38
+:1019600002C0959587950A94E2F78E23282B25BB14
+:10197000440F000085B38A2B85BB85B3832385BBC9
+:1019800025B383B380952823842F9927002E02C086
+:10199000959587950A94E2F78E23282B25BB440F53
+:1019A000000085B38A2B85BB85B3832385BB25B314
+:1019B00083B380952823842F9927002E02C0959504
+:1019C00087950A94E2F78E23282B25BB440F00004D
+:1019D00085B38A2B85BB85B3832385BB25B383B3AE
+:1019E00080952823842F9927002E02C095958795EE
+:1019F0000A94E2F78E23282B25BB440F000085B301
+:101A00008A2B85BB85B3832385BB25B383B38095A0
+:101A10002823842F9927002E02C0959587950A9434
+:101A2000E2F78E23282B25BB000085B38A2B85BBCC
+:101A300085B3832385BB95B383B380959823440FE7
+:101A4000552702C0559547950A95E2F7E4239E2B4A
+:101A500095BB000085B38A2B85BB80E090E0000039
+:101A60000196E1E08C329E07D1F7DF91CF911F9173
+:101A70000F91FF90EF900895CF93DF93FC0124B373
+:101A80004081518161E070E0CB01042E02C0880FDB
+:101A9000991F0A94E2F7A82F282B24BBC7E0D0E0B7
+:101AA000C41BD50BCB01028002C0880F991F0A947A
+:101AB000E2F7582F482F409585B3842385BB25B383
+:101AC00083B38095282380E890E00C2E02C0959582
+:101AD00087950A94E2F73A2F3823232B25BB000081
+:101AE00085B3852B85BB85B3842385BB95B383B331
+:101AF0008095982395BB000085B3852B85BB85B366
+:101B0000842385BB95B383B38095982395BB000050
+:101B100085B3852B85BB85B3842385BB95B383B300
+:101B20008095982395BB000085B3852B85BB85B335
+:101B3000842385BB95B383B38095982395BB000020
+:101B400085B3852B85BB85B3842385BB95B383B3D0
+:101B50008095982395BB000085B3852B85BB85B305
+:101B6000842385BB95B383B38095982395BB0000F0
+:101B700085B3852B85BB85B3842385BB95B383B3A0
+:101B80008095982395BB000085B3852B85BB84B3D6
+:101B90008A2B84BB85B3842385BB95B383B380959F
+:101BA00098230C2E02C0759567950A94E2F78A2F48
+:101BB0008623982B95BB000085B3852B85BB85B309
+:101BC000842385BB25B383B38095282382E090E0EE
+:101BD0000C2E02C0959587950A94E2F78A23282B4C
+:101BE00025BB000085B3852B85BB85B3842385BBCE
+:101BF00025B383B38095282384E090E00C2E02C0A7
+:101C0000959587950A94E2F78A23282B25BB000037
+:101C100085B3852B85BB85B3842385BB25B383B36F
+:101C20008095282388E090E00C2E02C0959587953A
+:101C30000A94E2F78A23282B25BB000085B3852B65
+:101C400085BB85B3842385BB25B383B380952823C7
+:101C500080E190E00C2E02C0959587950A94E2F7FA
+:101C60008A23282B25BB000085B3852B85BB85B334
+:101C7000842385BB25B383B38095282380E290E03D
+:101C80000C2E02C0959587950A94E2F78A23282B9B
+:101C900025BB000085B3852B85BB85B3842385BB1D
+:101CA00025B383B38095282380E490E00C2E02C0F6
+:101CB000959587950A94E2F78A23282B25BB000087
+:101CC00085B3852B85BB85B3842385BB95B383B34F
+:101CD00080959823932B95BB000085B3852B85BBFE
+:101CE00080E090E00000019621E08C329207D1F76D
+:101CF00084B38A2B84BB85B3842385BB25B383B38C
+:101D00008095282388E890E00C2E02C09595879551
+:101D10000A94E2F78A23282B25BB000085B3852B84
+:101D200085BB85B3842385BB25B383B380952823E6
+:101D300080E190E00C2E02C0959587950A94E2F719
+:101D40008A23282B25BB000085B3852B85BB85B353
+:101D5000842385BB25B383B38095282380E290E05C
+:101D60000C2E02C0959587950A94E2F78A23282BBA
+:101D700025BB000085B3852B85BB85B3842385BB3C
+:101D800025B383B38095282380E490E00C2E02C015
+:101D9000959587950A94E2F78A23282B25BB0000A6
+:101DA00085B3852B85BB85B3842385BB25B383B3DE
+:101DB0008095282380E890E002C095958795CA9584
+:101DC000E2F78A23282B25BB000085B3852B85BB32
+:101DD00085B3842385BB95B383B38095982395BB46
+:101DE000000085B3852B85BB85B3842385BB95B364
+:101DF00083B38095982395BB000085B3852B85BB65
+:101E000085B3842385BB95B383B38095982395BB15
+:101E1000000085B3852B85BB84B3A82BA4BB85B3F9
+:101E2000842385BB95B383B38095982395BB00002D
+:101E300085B3852B85BB85B3842385BB95B383B3DD
+:101E40008095982395BB000085B3852B85BB85B312
+:101E5000842385BB95B383B38095982395BB0000FD
+:101E600085B3852B85BB85B3842385BB95B383B3AD
+:101E70008095982395BB000085B3852B85BB85B3E2
+:101E8000842385BB95B383B38095982395BB0000CD
+:101E900085B3852B85BB85B3842385BB95B383B37D
+:101EA0008095982395BB000085B3852B85BB85B3B2
+:101EB000842385BB95B383B38095982395BB00009D
+:101EC00085B3852B85BB85B3842385BB95B383B34D
+:101ED0008095982395BB000085B3852B85BB80E05A
+:101EE00090E00000019621E08C329207D1F781E06A
+:101EF0008093FB01DF91CF910895FC0120E030E059
+:101F000080E090E00000019645E08D379407D1F71E
+:101F10002F5F3F4F2436310599F784B321E030E03D
+:101F2000028002C0220F331F0A94E2F7322F822B65
+:101F300084BB85B3622F6095862385BB40E050E06B
+:101F400080E090E00000019625E08D379207D1F700
+:101F50004F5F5F4F4A30510599F724B3408151815B
+:101F600081E090E0042E02C0880F991F0A94E2F7E6
+:101F7000782F282B24BBE7E0F0E0E41BF50B85B3BA
+:101F8000862385BB25B383B38095282380E890E022
+:101F90000E2E02C0959587950A94E2F7472F4823A5
+:101FA000242B25BB000085B3832B85BB85B38623FB
+:101FB00085BB95B383B38095982395BB000085B30B
+:101FC000832B85BB85B3862385BB95B383B380956F
+:101FD000982395BB000085B3832B85BB85B38623EF
+:101FE00085BB95B383B38095982395BB000085B3DB
+:101FF000832B85BB85B3862385BB95B383B380953F
+:10200000982395BB000085B3832B85BB85B38623BE
+:1020100085BB95B383B38095982395BB000085B3AA
+:10202000832B85BB85B3862385BB95B383B380950E
+:10203000982395BB000085B3832B85BB85B386238E
+:1020400085BB95B383B38095982395BB000085B37A
+:10205000832B85BB84B3872B84BB85B3862385BB49
+:1020600095B383B380959823942B95BB000085B3DB
+:10207000832B85BB85B3862385BB95B383B38095BE
+:10208000982395BB000085B3832B85BB85B386233E
+:1020900085BB95B383B38095982395BB000085B32A
+:1020A000832B85BB85B3862385BB95B383B380958E
+:1020B000982395BB000085B3832B85BB85B386230E
+:1020C00085BB95B383B38095982395BB000085B3FA
+:1020D000832B85BB85B3862385BB95B383B380955E
+:1020E000982395BB000085B3832B85BB85B38623DE
+:1020F00085BB95B383B38095982395BB000085B3CA
+:10210000832B85BB85B3862385BB95B383B380952D
+:10211000982395BB000085B3832B85BB80E090E0BE
+:102120000000019621E08C329207D1F784B3872B0F
+:1021300084BB85B3862385BB25B383B380952823D1
+:1021400080E890E00E2E02C0959587950A94E2F7FC
+:102150008723282B25BB000085B3832B85BB85B344
+:10216000862385BB95B383B38095982395BB0000E8
+:1021700085B3832B85BB85B3862385BB95B383B39A
+:102180008095982395BB000085B3832B85BB85B3D1
+:10219000862385BB95B383B38095982395BB0000B8
+:1021A00085B3832B85BB85B3862385BB95B383B36A
+:1021B0008095982395BB000085B3832B85BB85B3A1
+:1021C000862385BB95B383B38095982395BB000088
+:1021D00085B3832B85BB85B3862385BB95B383B33A
+:1021E0008095982395BB000085B3832B85BB85B371
+:1021F000862385BB95B383B38095982395BB000058
+:1022000085B3832B85BB84B3872B84BB85B386239F
+:1022100085BB25B383B38095282381E090E00E2E03
+:1022200002C0959587950A94E2F78723282B25BB52
+:10223000000085B3832B85BB85B3862385BB25B37F
+:1022400083B38095282382E090E00E2E02C09595FE
+:1022500087950A94E2F78723282B25BB000085B3D6
+:10226000832B85BB85B3862385BB25B383B380953C
+:10227000282384E090E00E2E02C0959587950A945D
+:10228000E2F78723282B25BB000085B3832B85BB72
+:1022900085B3862385BB25B383B38095282388E047
+:1022A00090E00E2E02C0959587950A94E2F7872359
+:1022B000282B25BB000085B3832B85BB85B38623E4
+:1022C00085BB25B383B38095282380E190E00E2E53
+:1022D00002C0959587950A94E2F78723282B25BBA2
+:1022E000000085B3832B85BB85B3862385BB25B3CF
+:1022F00083B38095282380E290E00E2E02C095954E
+:1023000087950A94E2F78723282B25BB000085B325
+:10231000832B85BB85B3862385BB25B383B380958B
+:10232000282380E490E002C095958795EA95E2F72E
+:102330007823272B25BB000085B3832B85BB85B372
+:10234000682365BB95B383B380959823942B95BB85
+:10235000000085B3382B35BB80E090E0000001968B
+:1023600041E08C329407D1F70895EF92FF920F93DA
+:102370001F93FC0144B3A081B18121E030E0C90189
+:102380000A2E02C0880F991F0A94E2F7182F482BD3
+:1023900044BB47E050E04A1B5B0B028002C0220FA7
+:1023A000331F0A94E2F7722F622F609585B386235C
+:1023B00085BB35B323B388E090E0042E02C0959529
+:1023C00087950A94E2F7F12EF822209532233F29CF
+:1023D00035BB000085B3872B85BB85B3862385BBC2
+:1023E00035B323B380E190E0042E02C09595879524
+:1023F0000A94E2F7E12EE822209532233E2935BBEC
+:10240000000085B3872B85BB85B3862385BB35B399
+:1024100023B380E290E0042E02C0959587950A943C
+:10242000E2F7012F082320953223302B35BB000023
+:1024300085B3872B85BB85B3862385BB35B323B393
+:1024400080E490E0042E02C0959587950A94E2F707
+:10245000F12FF823209532233F2B35BB000085B3A5
+:10246000872B85BB85B3862385BB35B323B380E833
+:1024700090E002C0959587954A95E2F7E12FE82311
+:10248000209532233E2B35BB000085B3872B85BBBF
+:1024900085B3862385BB95B383B38095982395BB7D
+:1024A000000085B3872B85BB85B3862385BB95B399
+:1024B00083B38095982395BB000085B3872B85BB9C
+:1024C00085B3862385BB95B383B38095982395BB4D
+:1024D000000085B3872B85BB80E090E0000001966B
+:1024E00021E08C329207D1F784B3312F30958323CA
+:1024F00084BB85B3862385BB000085B3872B85BB52
+:1025000043B385B3862385BB55270A2E02C0559554
+:1025100047950A94E2F741705070440F000085B36C
+:10252000872B85BB83B325B3262325BB99270A2E8A
+:1025300002C0959587950A94E2F78170482B440F65
+:10254000000085B3872B85BB83B325B3262325BB2A
+:1025500099270A2E02C0959587950A94E2F7817013
+:10256000482B440F000085B3872B85BB83B325B36D
+:10257000262325BB99270A2E02C0959587950A9494
+:10258000E2F78170482B440F000085B3872B85BB91
+:1025900083B325B3262325BB99270A2E02C0959520
+:1025A00087950A94E2F78170482B440F000085B3A9
+:1025B000872B85BB83B325B3262325BB99270A2EFA
+:1025C00002C0959587950A94E2F78170482B440FD5
+:1025D000000085B3872B85BB83B325B3262325BB9A
+:1025E00099270A2E02C0959587950A94E2F7817083
+:1025F000482B440F000085B3872B85BB83B39927F5
+:102600000A2E02C0959587950A94E2F78170482BAF
+:102610005527242F8091FB01813009F00BC147FD24
+:1026200007C184B3812B84BB85B3862385BB95B357
+:1026300083B3809598239F2995BB000085B3872B92
+:1026400085BB85B3862385BB95B383B380959823DB
+:102650009E2995BB000085B3872B85BB85B3862358
+:1026600085BB95B383B380959823902B95BB0000D1
+:1026700085B3872B85BB85B3862385BB95B383B391
+:10268000809598239F2B95BB000085B3872B85BB36
+:1026900085B3862385BB95B383B3809598239E2B02
+:1026A00095BB000085B3872B85BB85B3862385BB8F
+:1026B00095B383B38095982395BB000085B3872B92
+:1026C00085BB85B3862385BB95B383B3809598235B
+:1026D00095BB000085B3872B85BB85B3862385BB5F
+:1026E00095B383B38095982395BB000085B3872B62
+:1026F00085BB80E090E00000019621E08C329207DB
+:10270000D1F784B3832384BB85B3862385BB0000C4
+:1027100085B3872B85BB43B385B3862385BB5527FC
+:102720000A2E02C0559547950A94E2F74170507001
+:10273000440F000085B3872B85BB83B325B32623C5
+:1027400025BB99270A2E02C0959587950A94E2F732
+:102750008170482B440F000085B3872B85BB83B362
+:1027600025B3262325BB99270A2E02C09595879568
+:102770000A94E2F78170482B440F000085B3872B41
+:1027800085BB83B325B3262325BB99270A2E02C018
+:10279000959587950A94E2F78170482B440F0000C5
+:1027A00085B3872B85BB83B325B3262325BB992708
+:1027B0000A2E02C0959587950A94E2F78170482BFE
+:1027C000440F000085B3872B85BB83B325B3262335
+:1027D00025BB99270A2E02C0959587950A94E2F7A2
+:1027E0008170482B440F000085B3872B85BB83B3D2
+:1027F00025B3262325BB99270A2E02C095958795D8
+:102800000A94E2F78170482B440F000085B3872BB0
+:1028100085BB83B399270A2E02C0959587950A94A4
+:10282000E2F78170482B842F9927282F87FFF9CE54
+:102830001092FB01822F992787FD90951F910F9190
+:10284000FF90EF900895FC0144B3A081B18121E095
+:1028500030E0C9010A2E02C0880F991F0A94E2F7DE
+:10286000782F482B44BB47E050E04A1B5B0B0280AB
+:1028700002C0220F331F0A94E2F7322F622F6095B5
+:1028800085B3862385BB25B383B38095282384E055
+:1028900090E0042E02C0959587950A94E2F787236D
+:1028A000282B25BB000085B3832B85BB85B38623EE
+:1028B00085BB25B383B38095282388E090E0042E60
+:1028C00002C0959587950A94E2F78723282B25BBAC
+:1028D000000085B3832B85BB85B3862385BB25B3D9
+:1028E00083B38095282380E190E0042E02C0959563
+:1028F00087950A94E2F78723282B25BB000085B330
+:10290000832B85BB85B3862385BB25B383B3809595
+:10291000282380E290E0042E02C0959587950A94C2
+:10292000E2F78723282B25BB000085B3832B85BBCB
+:1029300085B3862385BB25B383B38095282380E4A4
+:1029400090E0042E02C0959587950A94E2F78723BC
+:10295000282B25BB000085B3832B85BB85B386233D
+:1029600085BB25B383B38095282380E890E002C01F
+:10297000959587954A95E2F78723282B25BB00007C
+:1029800085B3832B85BB85B3862385BB95B383B382
+:102990008095982395BB000085B3832B85BB85B3B9
+:1029A000862385BB95B383B38095982395BB0000A0
+:1029B00085B3832B85BB80E090E00000019621E089
+:1029C0008C329207D1F784B37095872384BB85B38B
+:1029D000862385BB000085B3832B85BB43B385B3BA
+:1029E000862385BB55270A2E02C0559547950A9424
+:1029F000E2F741705070440F000085B3832B85BB14
+:102A000083B325B3262325BB99270A2E02C09595AB
+:102A100087950A94E2F78170482B440F000085B334
+:102A2000832B85BB83B325B3262325BB99270A2E89
+:102A300002C0959587950A94E2F78170482B440F60
+:102A4000000085B3832B85BB83B325B3262325BB29
+:102A500099270A2E02C0959587950A94E2F781700E
+:102A6000482B440F000085B3832B85BB83B325B36C
+:102A7000262325BB99270A2E02C0959587950A948F
+:102A8000E2F78170482B440F000085B3832B85BB90
+:102A900083B325B3262325BB99270A2E02C095951B
+:102AA00087950A94E2F78170482B440F000085B3A4
+:102AB000832B85BB83B325B3262325BB99270A2EF9
+:102AC00002C0959587950A94E2F78170482B440FD0
+:102AD000000085B3832B85BB83B3992702C09595EE
+:102AE0008795AA95E2F78170482B842F992708953E
+:102AF000FC0144B3A081B18121E030E0C9010A2E7C
+:102B000002C0880F991F0A94E2F7782F482B44BB24
+:102B100047E050E04A1B5B0B028002C0220F331FCC
+:102B20000A94E2F7322F622F609585B3862385BB26
+:102B300025B383B38095282382E090E0042E02C061
+:102B4000959587950A94E2F78723282B25BB0000EB
+:102B500085B3832B85BB85B3862385BB25B383B320
+:102B60008095282384E090E0042E02C095958795F7
+:102B70000A94E2F78723282B25BB000085B3832B1B
+:102B800085BB85B3862385BB25B383B38095282376
+:102B900088E090E0042E02C0959587950A94E2F7AC
+:102BA0008723282B25BB000085B3832B85BB85B3EA
+:102BB000862385BB25B383B38095282380E190E0ED
+:102BC000042E02C0959587950A94E2F78723282B57
+:102BD00025BB000085B3832B85BB85B3862385BBCE
+:102BE00025B383B38095282380E290E0042E02C0B1
+:102BF000959587950A94E2F78723282B25BB00003B
+:102C000085B3832B85BB85B3862385BB25B383B36F
+:102C10008095282380E490E0042E02C09595879546
+:102C20000A94E2F78723282B25BB000085B3832B6A
+:102C300085BB85B3862385BB25B383B380952823C5
+:102C400080E890E002C0959587954A95E2F7872342
+:102C5000282B25BB000085B3832B85BB85B386233A
+:102C600085BB95B383B38095982395BB000085B34E
+:102C7000832B85BB80E090E00000019621E08C3240
+:102C80009207D1F784B37095872384BB85B38623DD
+:102C900085BB000085B3832B85BB43B385B38623F7
+:102CA00085BB55270A2E02C0559547950A94E2F731
+:102CB00041705070440F000085B3832B85BB83B3F4
+:102CC00025B3262325BB99270A2E02C09595879503
+:102CD0000A94E2F78170482B440F000085B3832BE0
+:102CE00085BB83B325B3262325BB99270A2E02C0B3
+:102CF000959587950A94E2F78170482B440F000060
+:102D000085B3832B85BB83B325B3262325BB9927A6
+:102D10000A2E02C0959587950A94E2F78170482B98
+:102D2000440F000085B3832B85BB83B325B32623D3
+:102D300025BB99270A2E02C0959587950A94E2F73C
+:102D40008170482B440F000085B3832B85BB83B370
+:102D500025B3262325BB99270A2E02C09595879572
+:102D60000A94E2F78170482B440F000085B3832B4F
+:102D700085BB83B325B3262325BB99270A2E02C022
+:102D8000959587950A94E2F78170482B440F0000CF
+:102D900085B3832B85BB83B3992702C0959587950F
+:102DA000AA95E2F78170482B842F99270895FC019A
+:102DB00044B3A081B18121E030E0C9010A2E02C0F4
+:102DC000880F991F0A94E2F7782F482B44BB47E0FD
+:102DD00050E04A1B5B0B028002C0220F331F0A9493
+:102DE000E2F7322F622F609585B3862385BB25B32A
+:102DF00083B38095282383E090E0042E02C095954C
+:102E000087950A94E2F78723282B25BB000085B31A
+:102E1000832B85BB85B3862385BB25B383B3809580
+:102E2000282386E090E0042E02C0959587950A94A9
+:102E3000E2F78723282B25BB000085B3832B85BBB6
+:102E400085B3862385BB25B383B3809528238CE087
+:102E500090E0042E02C0959587950A94E2F78723A7
+:102E6000282B25BB000085B3832B85BB85B3862328
+:102E700085BB25B383B38095282388E190E0042E99
+:102E800002C0959587950A94E2F78723282B25BBE6
+:102E9000000085B3832B85BB85B3862385BB25B313
+:102EA00083B38095282380E390E0042E02C095959B
+:102EB00087950A94E2F78723282B25BB000085B36A
+:102EC000832B85BB85B3862385BB25B383B38095D0
+:102ED000282380E690E0042E02C0959587950A94F9
+:102EE000E2F78723282B25BB000085B3832B85BB06
+:102EF00085B3862385BB25B383B38095282380ECD7
+:102F000090E0042E02C0959587950A94E2F78723F6
+:102F1000282B25BB000085B3832B85BB85B3862377
+:102F200085BB25B383B38095282380E890E002C059
+:102F3000959587954A95E2F78723282B25BB0000B6
+:102F400085B3832B85BB80E090E00000019621E0F3
+:102F50008C329207D1F784B37095872384BB85B3F5
+:102F6000862385BB000085B3832B85BB43B385B324
+:102F7000862385BB55270A2E02C0559547950A948E
+:102F8000E2F741705070440F000085B3832B85BB7E
+:102F900083B325B3262325BB99270A2E02C0959516
+:102FA00087950A94E2F78170482B440F000085B39F
+:102FB000832B85BB83B325B3262325BB99270A2EF4
+:102FC00002C0959587950A94E2F78170482B440FCB
+:102FD000000085B3832B85BB83B325B3262325BB94
+:102FE00099270A2E02C0959587950A94E2F7817079
+:102FF000482B440F000085B3832B85BB83B325B3D7
+:10300000262325BB99270A2E02C0959587950A94F9
+:10301000E2F78170482B440F000085B3832B85BBFA
+:1030200083B325B3262325BB99270A2E02C0959585
+:1030300087950A94E2F78170482B440F000085B30E
+:10304000832B85BB83B325B3262325BB99270A2E63
+:1030500002C0959587950A94E2F78170482B440F3A
+:10306000000085B3832B85BB83B3992702C0959558
+:103070008795AA95E2F78170482B842F99270895A8
+:10308000FC01672B09F03FC284E090E091838083CC
+:1030900086E090E09383828320E030E080E090E05F
+:1030A0000000019645E08D379407D1F72F5F3F4F21
+:1030B0002436310599F784B321E030E0028002C064
+:1030C000220F331F0A94E2F7322F822B84BB85B381
+:1030D000622F6095862385BB40E050E080E090E061
+:1030E0000000019625E08D379207D1F74F5F5F4FC3
+:1030F0004A30510599F724B34081518181E090E035
+:10310000042E02C0880F991F0A94E2F7782F282B0B
+:1031100024BBE7E0F0E0E41BF50B85B3862385BB19
+:1031200025B383B38095282380E890E00E2E02C05B
+:10313000959587950A94E2F7472F4823242B25BBC2
+:10314000000085B3832B85BB85B3862385BB95B3F0
+:1031500083B38095982395BB000085B3832B85BBF3
+:1031600085B3862385BB95B383B38095982395BBA0
+:10317000000085B3832B85BB85B3862385BB95B3C0
+:1031800083B38095982395BB000085B3832B85BBC3
+:1031900085B3862385BB95B383B38095982395BB70
+:1031A000000085B3832B85BB85B3862385BB95B390
+:1031B00083B38095982395BB000085B3832B85BB93
+:1031C00085B3862385BB95B383B38095982395BB40
+:1031D000000085B3832B85BB85B3862385BB95B360
+:1031E00083B38095982395BB000085B3832B85BB63
+:1031F00084B3872B84BB85B3862385BB95B383B308
+:1032000080959823942B95BB000085B3832B85BBB9
+:1032100085B3862385BB95B383B38095982395BBEF
+:10322000000085B3832B85BB85B3862385BB95B30F
+:1032300083B38095982395BB000085B3832B85BB12
+:1032400085B3862385BB95B383B38095982395BBBF
+:10325000000085B3832B85BB85B3862385BB95B3DF
+:1032600083B38095982395BB000085B3832B85BBE2
+:1032700085B3862385BB95B383B38095982395BB8F
+:10328000000085B3832B85BB85B3862385BB95B3AF
+:1032900083B38095982395BB000085B3832B85BBB2
+:1032A00085B3862385BB95B383B38095982395BB5F
+:1032B000000085B3832B85BB80E090E00000019681
+:1032C00021E08C329207D1F784B3872B84BB85B37E
+:1032D000862385BB25B383B38095282380E890E0BF
+:1032E0000E2E02C0959587950A94E2F78723282B26
+:1032F00025BB000085B3832B85BB85B3862385BBA7
+:1033000095B383B38095982395BB000085B3832B39
+:1033100085BB85B3862385BB95B383B380959823FE
+:1033200095BB000085B3832B85BB85B3862385BB06
+:1033300095B383B38095982395BB000085B3832B09
+:1033400085BB85B3862385BB95B383B380959823CE
+:1033500095BB000085B3832B85BB85B3862385BBD6
+:1033600095B383B38095982395BB000085B3832BD9
+:1033700085BB85B3862385BB95B383B3809598239E
+:1033800095BB000085B3832B85BB85B3862385BBA6
+:1033900095B383B38095982395BB000085B3832BA9
+:1033A00085BB84B3872B84BB85B3862385BB25B3BC
+:1033B00083B38095282381E090E00E2E02C095957E
+:1033C00087950A94E2F78723282B25BB000085B355
+:1033D000832B85BB85B3862385BB25B383B38095BB
+:1033E000282382E090E00E2E02C0959587950A94DE
+:1033F000E2F78723282B25BB000085B3832B85BBF1
+:1034000085B3862385BB25B383B38095282384E0C9
+:1034100090E00E2E02C0959587950A94E2F78723D7
+:10342000282B25BB000085B3832B85BB85B3862362
+:1034300085BB25B383B38095282388E090E00E2ECA
+:1034400002C0959587950A94E2F78723282B25BB20
+:10345000000085B3832B85BB85B3862385BB25B34D
+:1034600083B38095282380E190E00E2E02C09595CD
+:1034700087950A94E2F78723282B25BB000085B3A4
+:10348000832B85BB85B3862385BB25B383B380950A
+:10349000282380E290E00E2E02C0959587950A942D
+:1034A000E2F78723282B25BB000085B3832B85BB40
+:1034B00085B3862385BB25B383B38095282380E419
+:1034C00090E002C095958795EA95E2F77823272B3F
+:1034D00025BB000085B3832B85BB85B3682365BB03
+:1034E00095B383B380959823942B95BB000085B347
+:1034F000382B35BB80E090E00000019641E08C3233
+:103500009407D1F7089585E090E09183808387E068
+:1035100090E093838283C0CDFC01608571858285B4
+:1035200093850E94671FDC01CB010895FC0164852F
+:103530007585868597850E94671FDC01CB010895FC
+:10354000FC018089918908952F923F924F925F925A
+:103550006F927F928F929F92AF92BF92CF92DF92A3
+:10356000EF92FF920F931F93CF93DF93CDB7DEB708
+:1035700025970FB6F894DEBF0FBECDBF1C010E9489
+:10358000D716E82EC1010E947815482E84E0882EB7
+:10359000912C820C931CC4010E94D716A82EC40142
+:1035A0000E9478158983F10160897189635D7F4F7D
+:1035B000882777FD8095982F0E94FE1E6A837B8363
+:1035C0008C839D83FF240027F7FC0095102FC801F2
+:1035D000B7010E94FE1E7B018C016A817B818C8178
+:1035E0009D810E945F239B01AC01C801B7010E942D
+:1035F000E01D3B014C01BB24CC24B7FCC094DC2C67
+:10360000C601B5010E94FE1E7B018C016A817B818F
+:103610008C819D810E94C2229B01AC01C801B7012F
+:103620000E94E01D9B01AC01C401B3010E94B31DC7
+:1036300020E030E040E05FE30E94E01D9B01AC0130
+:10364000F10160857185828593850E94B31DF1012A
+:1036500060877187828793875524662457FC60941E
+:10366000762CC301B2010E94FE1E7B018C016A818F
+:103670007B818C819D810E945F239B01AC01C801ED
+:10368000B7010E94E01D5B016C01F9816F2F772764
+:10369000882777FD8095982F0E94FE1E7B018C0164
+:1036A0006A817B818C819D810E94C2229B01AC0139
+:1036B000C801B7010E94E01D9B01AC01C601B50124
+:1036C0000E94B31D20E030E040E05FE30E94E01D77
+:1036D0009B01AC01F10164857585868597850E9403
+:1036E000B31DF101648775878687978725960FB686
+:1036F000F894DEBF0FBECDBFDF91CF911F910F9128
+:10370000FF90EF90DF90CF90BF90AF909F908F9001
+:103710007F906F905F904F903F902F9008950F9300
+:103720001F938C0104960E94A208C8010E94A2085F
+:103730001F910F9108950F931F938C0104960E947F
+:10374000A208C8010E94A2081F910F910895EF924C
+:10375000FF920F931F938C010E94A00894E0E92E22
+:10376000F12CE00EF11EC7010E94A00860E070E09D
+:10377000C8010E94401861E070E0C7010E94401833
+:1037800080E090E0A0E0B0E0F80180879187A28718
+:10379000B38784879587A687B787118A108A1F9178
+:1037A0000F91FF90EF900895EF92FF920F931F9368
+:1037B0008C010E94A00824E0E22EF12CE00EF11E04
+:1037C000C7010E94A00860E070E0C8010E94401894
+:1037D00061E070E0C7010E94401880E090E0A0E046
+:1037E000B0E0F80180879187A287B38784879587A7
+:1037F000A687B787118A108A1F910F91FF90EF90CB
+:103800000895FC018FEF9FEF9183808393838283E0
+:1038100095838483978386830895FC018FEF9FEFC0
+:103820009183808393838283958384839783868324
+:10383000089508950895FB016430710538F4EE0F82
+:10384000FF1FE80FF91F8081918108958FEF9FEF8F
+:103850000895EF92FF920F931F937C010AE311E00A
+:1038600060E070E0C8010E94C801F7019183808385
+:1038700061E070E0C8010E94C801F7019383828370
+:1038800062E070E0C8010E94C801F701958384835B
+:1038900063E070E0C8010E94C801F7019783868346
+:1038A0001F910F91FF90EF900895A0E0B0E0EBE53D
+:1038B000FCE10C948922FC016A019081923008F4A9
+:1038C0001BC1DB018C91823080F0943061F4843034
+:1038D00009F012C19181EB018981981709F40CC19B
+:1038E000EBE2F1E009C1843011F4FB0105C1823043
+:1038F00091F4923009F000C1EA01DF0188E00D90F7
+:1039000009928150E1F78181FB0191818923E601D0
+:103910008983F601F1C0923041F362807380EB013C
+:103920008A809B80E480F580068117812C813D810F
+:103930004E815F815301A818B908C501B7FCABC01F
+:1039400080970CF457C0861497040CF4BEC0340161
+:10395000EE24FF2487019181FB018181981709F4EE
+:10396000A6C0992309F49CC02E193F09400B510BA6
+:1039700057FDB0C0E60119827B826A82F60124837A
+:10398000358346835783E6012C813D814E815F81DB
+:1039900079018A01DA01C9010197A109B1098F5F93
+:1039A0009F4FAF4FBF43F8F4E6016A817B81A801C6
+:1039B0009701220F331F441F551F6150704079013A
+:1039C0008A01DA01C9010197A109B1098F5F9F4FEF
+:1039D000AF4FBF4360F3E6017B836A83F601248324
+:1039E00035834683578383E0D6018C9357FD39C0D6
+:1039F000F60182C086149704B4F4C0E0D0E0DA0186
+:103A0000C90181709070A070B07056954795379538
+:103A10002795282B392B4A2B5B2B2196AC16BD06FC
+:103A200071F78A0C9B1C681479040CF094CFC0E0E9
+:103A3000D0E05401A618B708D801C7018170907072
+:103A4000A070B07016950795F794E794E82AF92AC4
+:103A50000A2B1B2B2196AC16BD0671F76A0C7B1C3A
+:103A60007ACFDA01C901B695A79597958795217008
+:103A7000307040705070282B392B4A2B5B2BE6019D
+:103A80002C833D834E835F838A819B8101969B8338
+:103A90008A83F60131C0882799278A199B0950CF5C
+:103AA000E21AF30A040B150BA801970161CFE60196
+:103AB00099837B826A822E0D3F1D401F511FF601A4
+:103AC00024833583468357838ECF20E030E040E067
+:103AD00050E041CF81E0E60189837B826A82509584
+:103AE0004095309521953F4F4F4F5F4FF60124830E
+:103AF00035834683578347CFCF01EEE0CDB7DEB79E
+:103B00000C94A522A0E2B0E0E8E8FDE10C9491223B
+:103B100069837A838B839C832D833E834F8358876D
+:103B200089E1E82EF12CEC0EFD1EB701CE010196C5
+:103B30000E94D9208E010F5E1F4FB801CE0105965D
+:103B40000E94D9208A8991E089278A8BAE01475F3C
+:103B50005F4FB801C7010E94551C0E94B71FE6E0E5
+:103B6000A0960C94AD22A0E2B0E0E9EBFDE10C944C
+:103B7000912269837A838B839C832D833E834F8339
+:103B8000588799E1E92EF12CEC0EFD1EB701CE010C
+:103B900001960E94D9208E010F5E1F4FB801CE0101
+:103BA00005960E94D920AE01475F5F4FB801C7015B
+:103BB0000E94551C0E94B71FE6E0A0960C94AD220F
+:103BC000A0E2B0E0E6EEFDE10C94852269837A8301
+:103BD0008B839C832D833E834F8358878E01075EA2
+:103BE0001F4FB801CE0101960E94D920F1E1EF2EBE
+:103BF000F12CEC0EFD1EB701CE0105960E94D920D6
+:103C0000898D823078F09989923040F420E09A8D45
+:103C10008A89981321E02A8BB701E9C0843051F4D6
+:103C2000923061F020E09A8D8A89981321E02A8FE2
+:103C3000B801DDC0943029F4823041F76BE271E0C5
+:103C4000D6C0823079F3923009F32D8D3E8D4F8DA1
+:103C500058A18D899E89AF89B88D222433242101F2
+:103C6000AA24BB246501EE24FF24870160E070E0F4
+:103C70000DC06F5F7F4F6032710599F1880F991FFA
+:103C8000AA1FBB1F569547953795279520FF19C04A
+:103C9000280E391E4A1E5B1E66247724430128160F
+:103CA00039064A065B0628F4E1E06E2E712C812C61
+:103CB000912CAE0CBF1CC01ED11EA60CB71CC81C7C
+:103CC000D91CEE0CFF1C001F111FB7FFD2CFE1E083
+:103CD0006E2E712C812C912CE628F72808291929A1
+:103CE000C8CF8B8D9C8D2B893C89820F931F0296A8
+:103CF0009C878B871A869A8D8A89981711F081E0A4
+:103D00008A87D7FE17C08B859C85A0FE0CC0569471
+:103D100047943794279420E030E040E050E8222A8E
+:103D2000332A442A552AD694C794B794A794019667
+:103D30009C878B8730E0A31630E0B30630E0C306E3
+:103D400030E4D30618F58B859C850EC0220C331CFD
+:103D5000441C551C019720E0A21620E0B20620E08A
+:103D6000C20620E4D20680F4AA0CBB1CCC1CDD1CCD
+:103D700057FEECCF31E0632E712C812C912CA628BC
+:103D8000B728C828D928E2CF9C878B87D601C501E0
+:103D90008F779070A070B07080349105A105B10547
+:103DA00051F0AD86BE86CF86D88A83E08987BE0172
+:103DB000675F7F4F1CC0A7FCF4CF2114310441047E
+:103DC000510479F380E490E0A0E0B0E0A80EB91EC1
+:103DD000CA1EDB1E80E8682E8FEF782E8FEF882EAC
+:103DE0008FEF982EA620B720C820D920DACFCB019C
+:103DF0000E94B71FE2E1A0960C94A122A8E0B0E0D7
+:103E0000E4E0FFE10C9494229B01AC0183E0898300
+:103E10001A8257FD51C0211531054105510539F46C
+:103E200082E08983CE0101960E94B71F4CC0EEE16B
+:103E3000F0E0FC83EB838A818823C9F1203010E015
+:103E4000310710E0410710E85107C9F18827992789
+:103E5000DC01821B930BA40BB50B8D839E83AF8378
+:103E6000B8872D813E814F815885203080E038070A
+:103E700080E0480780E45807A8F6EB81FC81DA016E
+:103E8000C901880F991FAA1FBB1F31979C01AD0163
+:103E9000803010E0910710E0A10710E4B10778F33B
+:103EA000FC83EB838D839E83AF83B887BBCF2D8349
+:103EB0003E834F835887D5CF81E08A83ACCF60E0C3
+:103EC00070E080E09FECE3E028960C94B022ACE038
+:103ED000B0E0EDE6FFE10C94952269837A838B8351
+:103EE0009C83BE016B5F7F4FCE0101960E94D9205B
+:103EF0008D81823061F0823050F0843069F48E819F
+:103F0000882359F52FEF3FEF4FEF5FE72AC020E0FE
+:103F100030E040E050E025C02F81388537FDF7CFF5
+:103F20002F31310564F78EE190E0821B930B2985D8
+:103F30003A854B855C8504C05695479537952795FE
+:103F40008A95D2F78E81882361F0509540953095FF
+:103F500021953F4F4F4F5F4F04C020E030E040E0DD
+:103F600050E8CA01B901E2E02C960C94B1224F92BC
+:103F70005F926F927F928F929F92AF92BF92DF92E9
+:103F8000EF92FF920F931F9320E030E040E050E06B
+:103F9000FC01E480F58006811781D1808081823028
+:103FA00038F4D801C701A061AF77B0706FEFD9C006
+:103FB000843009F46EC0823009F471C0E114F10458
+:103FC0000105110509F46BC0828193816FEF82387E
+:103FD00096070CF06AC062E87FEF681B790B6A31C4
+:103FE00071050CF080C047015801062E04C0B6943C
+:103FF000A794979487940A94D2F7442455243201C5
+:1040000081E090E0A0E0B0E004C0880F991FAA1FF3
+:10401000BB1F6A95D2F70197A109B109E822F922DD
+:104020000A231B23E114F1040105110529F061E0C5
+:10403000462E512C612C712C85017401E428F52841
+:1040400006291729D801C7018F779070A070B0702A
+:1040500080349105A105B10509F457C0D801C70105
+:10406000CF96A11DB11D60E070E08030E0E09E07BA
+:10407000E0E0AE07E0E4BE0710F061E070E027E0AA
+:10408000B695A795979587952A95D1F7AF77B07094
+:1040900068C080E090E0A0E0B0E06FEF62C080E038
+:1040A00090E0A0E0B0E060E05CC0803891058CF763
+:1040B000BC0161587F4FD801C7018F779070A07005
+:1040C000B07080349105A105B105A1F08FE390E0B7
+:1040D000A0E0B0E0E80EF91E0A1F1B1F17FD28C064
+:1040E000D801C701CCCF60E070E080E090E0A0E0B4
+:1040F000B0E0CCCFE7FEF2CF80E490E0A0E0B0E00B
+:10410000E80EF91E0A1F1B1FE9CFE7FC18C080E06C
+:1041100090E060E0E61660E0F60660E0060760E426
+:10412000160710F081E090E0BC01D801C701A7CFCD
+:1041300016950795F794E7946F5F7F4FD1CFD8011D
+:10414000C701805C9F4FAF4FBF4F60E070E0803091
+:10415000E0E09E07E0E0AE07E0E4BE0708F48FCFA2
+:104160008CCF282F392F9A2F9F77842F8078892BF7
+:10417000962F9795992797958F77482F492B669576
+:10418000852F8078862BD794DD24D7948F77582F6E
+:104190005D29CA01B9011F910F91FF90EF90DF9047
+:1041A000BF90AF909F908F907F906F905F904F9057
+:1041B0000895FC01DB01208131819281492F4F77E5
+:1041C00050E0991F9927991F8381682F660F692BEB
+:1041D000881F8827881FFD018183662309F049C055
+:1041E000211531054105510509F470C082E89FEFA2
+:1041F000FD0193838283220F331F441F551F220F1B
+:10420000331F441F551F220F331F441F551F220FFA
+:10421000331F441F551F220F331F441F551F220FEA
+:10422000331F441F551F220F331F441F551F83E0A8
+:104230008C932030F0E03F07F0E04F07F0E45F0799
+:1042400090F482E89FEF220F331F441F551F019700
+:10425000203060E0360760E0460760E4560798F3D8
+:10426000FD0193838283FD01248335834683578335
+:1042700008956F3F71F1862F99278F579040FD0168
+:104280009383828383E08C93220F331F441F551F37
+:10429000220F331F441F551F220F331F441F551F6A
+:1042A000220F331F441F551F220F331F441F551F5A
+:1042B000220F331F441F551F220F331F441F551F4A
+:1042C00050642483358346835783089582E08C931A
+:1042D0000895211531054105510519F484E08C93A9
+:1042E000089544FD02C01C92BECF81E08C93BBCFE9
+:1042F000CF93DF93AC01029710F442E050E0A0911D
+:10430000FE01B091FF01FD01C0E0D0E020E030E00F
+:1043100020C0808191818417950769F482819381FF
+:10432000209719F09B838A8304C09093FF018093A8
+:10433000FE01CF0132C04817590738F42115310565
+:1043400019F08217930708F49C01EF010280F381B2
+:10435000E02D3097F1F62115310589F1C901841B53
+:10436000950B049708F4A901E0E0F0E026C08D91D8
+:104370009C91119782179307E9F44817590779F42C
+:10438000ED018A819B81309719F09383828304C069
+:104390009093FF018093FE01CD01029649C0841BDA
+:1043A000950BFD01E80FF91F4193519302978D93EF
+:1043B0009C933AC0FD01A281B3811097C1F6809110
+:1043C000FC019091FD01892B41F480913501909180
+:1043D00036019093FD018093FC01209137013091CB
+:1043E00038012115310541F42DB73EB780913301D5
+:1043F00090913401281B390BE091FC01F091FD01F3
+:104400002E1B3F0B2417350788F0CA010296281788
+:10441000390760F0CF01840F951F02969093FD013C
+:104420008093FC0141935193CF0102C080E090E062
+:10443000DF91CF910895CF93DF93009709F44EC099
+:10444000EC0122971B821A82A091FE01B091FF011C
+:10445000109711F140E050E001C0DC01AC17BD073E
+:1044600000F1BB83AA83FE0121913191E20FF31F7A
+:10447000EA17FB0771F42E5F3F4F8D919C911197C6
+:10448000820F931F99838883FD01828193819B838F
+:104490008A834115510559F4D093FF01C093FE0161
+:1044A0001DC0FD0182819381AD010097B1F6FA0133
+:1044B000D383C28321913191E20FF31FEC17FD07E3
+:1044C00069F42E5F3F4F88819981820F931FFA0113
+:1044D000918380838A819B8193838283DF91CF91B3
+:1044E0000895AA1BBB1B51E107C0AA1FBB1FA6173B
+:1044F000B70710F0A61BB70B881F991F5A95A9F78D
+:1045000080959095BC01CD0108952F923F924F92D6
+:104510005F926F927F928F929F92AF92BF92CF9253
+:10452000DF92EF92FF920F931F93CF93DF93CDB75C
+:10453000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFD4
+:1045400009942A88398848885F846E847D848C84A5
+:104550009B84AA84B984C884DF80EE80FD800C81AE
+:104560001B81AA81B981CE0FD11D0FB6F894DEBF91
+:104570000FBECDBFED010895EE0FFF1F0590F49122
+:10458000E02D099450E449EC3FE02BED01D013C03D
+:104590005F77552319F444230AF02BC02F933F93E0
+:1045A0004F935F93A3D05527442759D05F914F91E4
+:1045B0003F912F9105CB1F939F7750EC49E43FE04B
+:1045C0002BEDD1DA10E89F775FE349EC3FE02BED6C
+:1045D000621773078407950720F050EC49E4C3DAAB
+:1045E000112780D09068ECE8F0E006D091271F9169
+:1045F00008959FEF80EC0895FF92EF92DF92CF92A3
+:10460000BF926B017C01B59016D0B590BB2069F0CC
+:104610009F938F937F936F93B601C7010CD02F9117
+:104620003F914F915F910E947623BF90CF90DF9092
+:10463000EF90FF900895A0D002C09601A701EF93DC
+:10464000FF930E94E01DFF91EF9196D0EF93FF93AF
+:104650000E94B31DFF91EF91BA9479F70895C8D0E5
+:10466000CF93DF93D52FC42F5527442733272227F5
+:104670009923D9F09F37C8F0F92F88D0592F482FA8
+:10468000372F262FF63968F422DCB8DBC030CD078F
+:1046900021F069937993899399939058DF91CF9101
+:1046A00062CA9927882777276627C030CD0721F06F
+:1046B0002993399349935993DF91CF9167C09F9381
+:1046C0009F77993358F050E449EC3FE02BED60DFE1
+:1046D0005FEB49EC3FE02BED46DA6DDF5F91507800
+:1046E000952708959B01AC010C94E01D67D001D083
+:1046F0004DC0552359F0992369F09F575F57951B7B
+:1047000033F442F4903811F4915805C072CF9158A7
+:104710009F3F09F47FC0BB271124621773078407EA
+:1047200030F4660F771F881FBB1F915098F311D08C
+:104730000F920FD00F920DD0A0E826173707480729
+:104740001B0609F0A048BA2F602D7F918F9100249D
+:104750000895A0E80024621773078407B10528F0C4
+:10476000621B730B840BB1090A2A660F771F881F1F
+:10477000BB1FA69581F708955591459135912591D7
+:1047800008959A95BB0F661F771F881F11249923E0
+:10479000A1F08823B2F79F3F59F0BB0F48F421F4F2
+:1047A000002011F460FF04C06F5F7F4F8F4F9F4F59
+:1047B000881F9795879597F9089529C0052E092692
+:1047C00007FA440F551F5F3F79F0AA27A51708F095
+:1047D00051E04795880F991F9F3F31F0BB27B917CC
+:1047E00008F091E0879508959F919F91112401CF42
+:1047F00097FB880F991F9F3F31F0BB27B91708F02F
+:1048000091E0879508959F919F911124F2CE66279C
+:10481000772788279927089510E0C4EBD0E004C0DB
+:0E482000FE010E94BE222296C63BD107C9F7B8
+:10482E00330048616C6C6F2068696572206973741F
+:10483E002064617320524E4D656761313238467582
+:10484E006E6B2D426F61726400FF0000000000006D
+:0A485E00000000200000020000002E
:00000001FF
diff --git a/source/AVR_Studio/Soccer/default/dep/Soccer.o.d b/source/AVR_Studio/Soccer/default/dep/Soccer.o.d index 4c16d08..51a77bf 100755 --- a/source/AVR_Studio/Soccer/default/dep/Soccer.o.d +++ b/source/AVR_Studio/Soccer/default/dep/Soccer.o.d @@ -7,12 +7,9 @@ Soccer.o: ../Soccer.c ../global.h c:/winavr/bin/../avr/include/stdlib.h \ c:/winavr/bin/../avr/include/avr/iom128.h \
c:/winavr/bin/../avr/include/avr/portpins.h \
c:/winavr/bin/../avr/include/avr/version.h \
- c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/uart.h \
- ../hal/../global.h ../hal/keylcd.h ../hal/i2c.h \
- c:/winavr/bin/../avr/include/compat/twi.h \
- c:/winavr/bin/../avr/include/util/twi.h \
- c:/winavr/bin/../avr/include/string.h ../navigation.h \
- c:/winavr/bin/../avr/include/math.h ../sensor/sensor.h \
+ c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../global.h \
+ ../hal/keylcd.h c:/winavr/bin/../avr/include/string.h ../hal/uart.h \
+ ../navigation.h c:/winavr/bin/../avr/include/math.h ../sensor/sensor.h \
../sensor/../hal/board.h ../sensor/ballsensor.h ../sensor/position.h \
../sensor/../hal/maussensor.h ../sensor/../hal/../global.h \
../sensor/abstand.h ../sensor/../global.h
@@ -41,20 +38,14 @@ c:/winavr/bin/../avr/include/avr/version.h: c:/winavr/bin/../avr/include/avr/interrupt.h:
-../hal/uart.h:
-
../hal/../global.h:
../hal/keylcd.h:
-../hal/i2c.h:
-
-c:/winavr/bin/../avr/include/compat/twi.h:
-
-c:/winavr/bin/../avr/include/util/twi.h:
-
c:/winavr/bin/../avr/include/string.h:
+../hal/uart.h:
+
../navigation.h:
c:/winavr/bin/../avr/include/math.h:
diff --git a/source/AVR_Studio/Soccer/default/dep/board.o.d b/source/AVR_Studio/Soccer/default/dep/board.o.d index 255bb8a..1553156 100755 --- a/source/AVR_Studio/Soccer/default/dep/board.o.d +++ b/source/AVR_Studio/Soccer/default/dep/board.o.d @@ -8,8 +8,8 @@ board.o: ../hal/board.c ../hal/board.h \ c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h \
c:/winavr/bin/../avr/include/stdlib.h \
- c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h ../hal/uart.h \
- ../hal/../global.h ../hal/../hal/board.h
+ c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h ../hal/../global.h \
+ ../hal/../hal/board.h
../hal/board.h:
@@ -33,8 +33,6 @@ c:/winavr/bin/../avr/include/stdlib.h: c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h:
-../hal/uart.h:
-
../hal/../global.h:
../hal/../hal/board.h:
diff --git a/source/AVR_Studio/Soccer/default/dep/keylcd.o.d b/source/AVR_Studio/Soccer/default/dep/keylcd.o.d index 5a3eaeb..e69de29 100755 --- a/source/AVR_Studio/Soccer/default/dep/keylcd.o.d +++ b/source/AVR_Studio/Soccer/default/dep/keylcd.o.d @@ -1,52 +0,0 @@ -keylcd.o: ../hal/keylcd.c ../hal/keylcd.h ../hal/i2c.h ../hal/../global.h \
- c:/winavr/bin/../avr/include/stdlib.h \
- c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h \
- ../hal/../hal/board.h c:/winavr/bin/../avr/include/avr/io.h \
- c:/winavr/bin/../avr/include/avr/sfr_defs.h \
- c:/winavr/bin/../avr/include/inttypes.h \
- c:/winavr/bin/../avr/include/stdint.h \
- c:/winavr/bin/../avr/include/avr/iom128.h \
- c:/winavr/bin/../avr/include/avr/portpins.h \
- c:/winavr/bin/../avr/include/avr/version.h \
- c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.h \
- ../hal/../hal/../global.h c:/winavr/bin/../avr/include/compat/twi.h \
- c:/winavr/bin/../avr/include/util/twi.h \
- c:/winavr/bin/../avr/include/string.h
-
-../hal/keylcd.h:
-
-../hal/i2c.h:
-
-../hal/../global.h:
-
-c:/winavr/bin/../avr/include/stdlib.h:
-
-c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h:
-
-../hal/../hal/board.h:
-
-c:/winavr/bin/../avr/include/avr/io.h:
-
-c:/winavr/bin/../avr/include/avr/sfr_defs.h:
-
-c:/winavr/bin/../avr/include/inttypes.h:
-
-c:/winavr/bin/../avr/include/stdint.h:
-
-c:/winavr/bin/../avr/include/avr/iom128.h:
-
-c:/winavr/bin/../avr/include/avr/portpins.h:
-
-c:/winavr/bin/../avr/include/avr/version.h:
-
-c:/winavr/bin/../avr/include/avr/interrupt.h:
-
-../hal/../hal/uart.h:
-
-../hal/../hal/../global.h:
-
-c:/winavr/bin/../avr/include/compat/twi.h:
-
-c:/winavr/bin/../avr/include/util/twi.h:
-
-c:/winavr/bin/../avr/include/string.h:
diff --git a/source/AVR_Studio/Soccer/hal/board.c b/source/AVR_Studio/Soccer/hal/board.c index 458ed03..9d895e8 100755 --- a/source/AVR_Studio/Soccer/hal/board.c +++ b/source/AVR_Studio/Soccer/hal/board.c @@ -16,7 +16,7 @@ Board::Board() { PORTC = 0; // Alle Low, kein Pollup
// Alle Ausgänge bis auf PD0+1(I2C) + 2+3(RS232)
- DDRD = (1 << PD2) | (1 << PD3) | (1 << PD4) | (1 << PD5) | (1 << PD6) | (1 << PD7);
+ DDRD = (1 << PD3) | (1 << PD4) | (1 << PD5) | (1 << PD6) | (1 << PD7);
PORTD = (1 << PD0) | (1 << PD1); // Pollup-Widerstand an PD0+1 aktivieren
// PE5 ist eingang
@@ -33,11 +33,11 @@ Board::Board() { // aktiviere Kanal A+B auf PWM1 mit 8Bit
TCCR1A = (1<< COM1A1) | (1<< COM1B1) | (1<< WGM10);
- TCCR1B = (1<<ICNC1) | (1<<CS12) | (1<<CS10); // set clock/prescaler 1/1024 -> enable counter
+ TCCR1B = (1<<ICNC1) | (1<<CS11); // | (1<<CS12) | (1<<CS10); // set clock/prescaler 1/1024 -> enable counter
// aktiviere Kanal A+B auf PWM3 mit 8Bit
TCCR3A = (1<< COM3A1) | (1<< COM3B1) | (1<< WGM10);
- TCCR3B = (1<<ICNC3) | (1<<CS32) | (1<<CS30); // set clock/prescaler 1/1024 -> enable counter
+ TCCR3B = (1<<ICNC3) | (1<<CS31); // | (1<<CS32) | (1<<CS30); // set clock/prescaler 1/1024 -> enable counter
// Schalte Motoren auf 0
motor(0,0);
@@ -49,8 +49,11 @@ Board::Board() { PORTE &= ~(1 << PE6); // Pin2 low
PORTA |= (1 << PA2); // Pin1 high
- // Uart-Interface einschalten
- uart1_init( 10); // 9600 BAUD bei 16MHz Atmel
+ // Dribbler-richtung einstellen
+ DRIBBLER_PORT |= DRIBBLER_A; // Pin1 high
+ DRIBBLER_PORT &= ~DRIBBLER_B; // Pin2 low
+
+
// aktiviere interrupt
sei();
@@ -202,27 +205,6 @@ void Board::motor(int i, int speed) MOTOR2_PORT |= MOTOR2_A;//In 1 ein
}
}
- else if(i == 3) // Dribbler... hier haben wir kein PWM
- {
- if(speed > 0)
- {
- DRIBBLER_PORT |= DRIBBLER_A;//In 1 ein
- DRIBBLER_PORT &= ~DRIBBLER_B;//In 2 aus
- DRIBBLER_PWMPORT |= DRIBBLER_PWM;
- }
- else if(speed < 0)
- {
- DRIBBLER_PORT |= DRIBBLER_B;//In 2 ein
- DRIBBLER_PORT &= ~DRIBBLER_A;//In 1 aus
- DRIBBLER_PWMPORT |= DRIBBLER_PWM;
- }
- else
- {
- DRIBBLER_PORT |= DRIBBLER_B;//In 2 ein
- DRIBBLER_PORT |= DRIBBLER_A;//In 1 ein
- DRIBBLER_PWMPORT &= ~DRIBBLER_PWM;
- }
- }
}
void Board::kicker() {
@@ -231,6 +213,19 @@ void Board::kicker() { KICKER_AUS
}
+void Board::dribblerOn() {
+ DRIBBLER_AN
+}
+
+void Board::dribblerOff() {
+ DRIBBLER_AUS
+}
+
+void Board::dribbler(bool status) {
+ if(status) dribblerOn();
+ else dribblerOff();
+}
+
//PWM routine für den Beeper
ISR (TIMER0_OVF_vect)
{
diff --git a/source/AVR_Studio/Soccer/hal/board.h b/source/AVR_Studio/Soccer/hal/board.h index a76aeb7..e608836 100755 --- a/source/AVR_Studio/Soccer/hal/board.h +++ b/source/AVR_Studio/Soccer/hal/board.h @@ -4,7 +4,7 @@ #include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
-#include "uart.h"
+//#include "uart.h"
#include "../global.h"
//#define abs(a) ((a < 0)? -a : a)
@@ -26,10 +26,12 @@ #define MOTOR2_PWM OCR3A #define MOTOR2_A (1 << 5) #define MOTOR2_B (1 << 4) - +
+
+// Dribbler #define DRIBBLER_PORT PORTD
-#define DRIBBLER_PWMPORT PORTA
-#define DRIBBLER_PWM (1 << 5) +#define DRIBBLER_AN PORTA |= (1 << 5);
+#define DRIBBLER_AUS PORTA &= ~(1 << 5);
#define DRIBBLER_A (1 << 6) #define DRIBBLER_B (1 << 7) @@ -62,6 +64,10 @@ public: void led(bool status);
void motor(int i, int speed);
void kicker();
+
+ void dribbler(bool status);
+ void dribblerOn();
+ void dribblerOff();
};
#endif
diff --git a/source/AVR_Studio/Soccer/hal/keylcd.c b/source/AVR_Studio/Soccer/hal/keylcd.c index fb2efa6..4b98f75 100755 --- a/source/AVR_Studio/Soccer/hal/keylcd.c +++ b/source/AVR_Studio/Soccer/hal/keylcd.c @@ -1,7 +1,8 @@ #include "keylcd.h"
-KeyLCD::KeyLCD() : i2c() {
-
+KeyLCD::KeyLCD() {
+ // Uart-Interface einschalten
+ uart1_init( 103); // 9600 BAUD bei 16MHz Atmel
}
KeyLCD::~KeyLCD() {
@@ -10,12 +11,7 @@ KeyLCD::~KeyLCD() { // Gibt Daten auf dem keyLCD aus
void KeyLCD::print(char *data) {
- int len=strlen(data);
- uint8_t buf[len+1];
-
- for (int i=0; i<len; i++) buf[i] = uint8_t(data[i]);
-
- i2c.send(I2C_KEYLCD, buf, len);
+ uart1_puts(data);
}
// Löscht das keyLCD
@@ -23,6 +19,3 @@ void KeyLCD::clear() { }
-uint8_t KeyLCD::error() {
- return i2c.error();
-}
diff --git a/source/AVR_Studio/Soccer/hal/keylcd.h b/source/AVR_Studio/Soccer/hal/keylcd.h index 590c0cb..9403aa6 100755 --- a/source/AVR_Studio/Soccer/hal/keylcd.h +++ b/source/AVR_Studio/Soccer/hal/keylcd.h @@ -1,22 +1,18 @@ #ifndef _KEYLCD_H_
#define _KEYLCD_H_
-#include "i2c.h"
+//#include "i2c.h"
#include "string.h"
-
-#define I2C_KEYLCD 2
-#define LCD_CMD_PRINTSTR 0
+#include "uart.h"
class KeyLCD
{
private:
- I2C i2c;
public:
KeyLCD();
~KeyLCD();
void print(char* data);
- uint8_t error();
void clear();
};
diff --git a/source/AVR_Studio/Soccer/navigation.c b/source/AVR_Studio/Soccer/navigation.c index cbdbdc9..2698390 100755 --- a/source/AVR_Studio/Soccer/navigation.c +++ b/source/AVR_Studio/Soccer/navigation.c @@ -26,18 +26,18 @@ void Navigation::SetzeGeschwindigkeit(int nGeschwindigkeit) { // Aktualieren ohne Parameter
-void Navigation::Aktualisieren() {
+void Navigation::Aktualisieren() {
// Richtung in x und y-Kompontente zerlegen
- double y = cos(richtung); // richtung ist winkel
- double x = sin(richtung);
+ double y = cos((double)richtung*0.01745); // richtung ist winkel
+ double x = sin((double)richtung*0.01745);
// Abweichung der Ausrichtung ermitteln(als winkel)
int w = sensor.GetAusrichtung() - ausrichtung;
// Stärke der einzelnen Motoren berechnen
- double v0 = (-x-sqrt(3)*y)/2;
+ double v0 = (-x+sqrt(3)*y)/2;
double v1 = x;
- double v2 = (-x+sqrt(3)*y)/2;
+ double v2 = (-x-sqrt(3)*y)/2;
// Ausgerechnete Stärke an die Motoren übergeben
board.motor(0,(int)((double)v0*geschwindigkeit +w));
diff --git a/source/Concept/Framework/RoboCode.aps b/source/Concept/Framework/RoboCode.aps index 3864c4f..b759997 100644 --- a/source/Concept/Framework/RoboCode.aps +++ b/source/Concept/Framework/RoboCode.aps @@ -1 +1 @@ -<AVRStudio><MANAGEMENT><ProjectName>RoboCode</ProjectName><Created>16-Feb-2007 15:16:46</Created><LastEdit>16-Feb-2007 16:19:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>16-Feb-2007 15:16:46</Created><Version>4</Version><Build>4, 12, 0, 462</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\RoboCode.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>main.cpp</SOURCEFILE><SOURCEFILE>sensor.cpp</SOURCEFILE><SOURCEFILE>tools.cpp</SOURCEFILE><SOURCEFILE>atmega128io.cpp</SOURCEFILE><SOURCEFILE>distance_sensor.cpp</SOURCEFILE><SOURCEFILE>engine.cpp</SOURCEFILE><SOURCEFILE>io_module.cpp</SOURCEFILE><SOURCEFILE>ir_sensor.cpp</SOURCEFILE><SOURCEFILE>kicker.cpp</SOURCEFILE><SOURCEFILE>led.cpp</SOURCEFILE><SOURCEFILE>robot.cpp</SOURCEFILE><HEADERFILE>sensor.h</HEADERFILE><HEADERFILE>stdafx.h</HEADERFILE><HEADERFILE>tools.h</HEADERFILE><HEADERFILE>atmega128io.h</HEADERFILE><HEADERFILE>defines.h</HEADERFILE><HEADERFILE>distance_sensor.h</HEADERFILE><HEADERFILE>engine.h</HEADERFILE><HEADERFILE>io_module.h</HEADERFILE><HEADERFILE>ir_sensor.h</HEADERFILE><HEADERFILE>kicker.h</HEADERFILE><HEADERFILE>led.h</HEADERFILE><HEADERFILE>robot.h</HEADERFILE><OTHERFILE>default\Makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>default\Makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>RoboCode.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -O0 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>G:\_Tools\Winavr\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>G:\_Tools\Winavr\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\sensor.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\stdafx.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\tools.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\atmega128io.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\defines.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\distance_sensor.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\engine.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\io_module.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\ir_sensor.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\kicker.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\led.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\robot.h</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\main.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\sensor.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\tools.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\atmega128io.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\distance_sensor.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\engine.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\io_module.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\ir_sensor.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\kicker.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\led.cpp</Name><Name>I:\Projects\RoboCup WM 2006 07\trunk\rc2007-soccer\source\Concept\Framework\robot.cpp</Name></Files></ProjectFiles><Files><File00000><FileId>00000</FileId><FileName>stdafx.h</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>engine.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>defines.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>io_module.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>robot.h</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>robot.cpp</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>atmega128io.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>main.cpp</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>tools.cpp</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>tools.h</FileName><Status>1</Status></File00009></Files><Workspace><File00000><Position>331 119 937 393</Position><LineCol>7 24</LineCol></File00000><File00001><Position>353 141 953 387</Position><LineCol>123 3</LineCol></File00001><File00002><Position>375 163 975 409</Position><LineCol>107 8</LineCol></File00002><File00003><Position>397 185 997 431</Position><LineCol>16 0</LineCol></File00003><File00004><Position>419 207 1019 453</Position><LineCol>3 19</LineCol></File00004><File00005><Position>309 97 909 343</Position><LineCol>44 0</LineCol></File00005><File00006><Position>353 141 953 387</Position><LineCol>4 26</LineCol></File00006><File00007><Position>375 163 975 409</Position><LineCol>5 0</LineCol></File00007><File00008><Position>397 185 997 431</Position><LineCol>2 11</LineCol></File00008><File00009><Position>419 207 1019 453</Position><LineCol>5 11</LineCol></File00009></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
+<AVRStudio><MANAGEMENT><ProjectName>RoboCode</ProjectName><Created>16-Feb-2007 15:16:46</Created><LastEdit>17-Feb-2007 01:31:58</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>16-Feb-2007 15:16:46</Created><Version>4</Version><Build>4, 12, 0, 462</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\RoboCode.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>Y:\Concept\Framework\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>main.cpp</SOURCEFILE><SOURCEFILE>sensor.cpp</SOURCEFILE><SOURCEFILE>tools.cpp</SOURCEFILE><SOURCEFILE>atmega128io.cpp</SOURCEFILE><SOURCEFILE>distance_sensor.cpp</SOURCEFILE><SOURCEFILE>engine.cpp</SOURCEFILE><SOURCEFILE>io_module.cpp</SOURCEFILE><SOURCEFILE>ir_sensor.cpp</SOURCEFILE><SOURCEFILE>kicker.cpp</SOURCEFILE><SOURCEFILE>led.cpp</SOURCEFILE><SOURCEFILE>robot.cpp</SOURCEFILE><SOURCEFILE>dribbler.cpp</SOURCEFILE><SOURCEFILE>display.cpp</SOURCEFILE><HEADERFILE>sensor.h</HEADERFILE><HEADERFILE>stdafx.h</HEADERFILE><HEADERFILE>tools.h</HEADERFILE><HEADERFILE>atmega128io.h</HEADERFILE><HEADERFILE>defines.h</HEADERFILE><HEADERFILE>distance_sensor.h</HEADERFILE><HEADERFILE>engine.h</HEADERFILE><HEADERFILE>io_module.h</HEADERFILE><HEADERFILE>ir_sensor.h</HEADERFILE><HEADERFILE>kicker.h</HEADERFILE><HEADERFILE>led.h</HEADERFILE><HEADERFILE>robot.h</HEADERFILE><HEADERFILE>dribbler.h</HEADERFILE><HEADERFILE>display.h</HEADERFILE><OTHERFILE>default\Makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>default\Makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>RoboCode.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -O0 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>Y:\Concept\Framework\sensor.h</Name><Name>Y:\Concept\Framework\stdafx.h</Name><Name>Y:\Concept\Framework\tools.h</Name><Name>Y:\Concept\Framework\atmega128io.h</Name><Name>Y:\Concept\Framework\defines.h</Name><Name>Y:\Concept\Framework\distance_sensor.h</Name><Name>Y:\Concept\Framework\engine.h</Name><Name>Y:\Concept\Framework\io_module.h</Name><Name>Y:\Concept\Framework\ir_sensor.h</Name><Name>Y:\Concept\Framework\kicker.h</Name><Name>Y:\Concept\Framework\led.h</Name><Name>Y:\Concept\Framework\robot.h</Name><Name>Y:\Concept\Framework\dribbler.h</Name><Name>Y:\Concept\Framework\display.h</Name><Name>Y:\Concept\Framework\main.cpp</Name><Name>Y:\Concept\Framework\sensor.cpp</Name><Name>Y:\Concept\Framework\tools.cpp</Name><Name>Y:\Concept\Framework\atmega128io.cpp</Name><Name>Y:\Concept\Framework\distance_sensor.cpp</Name><Name>Y:\Concept\Framework\engine.cpp</Name><Name>Y:\Concept\Framework\io_module.cpp</Name><Name>Y:\Concept\Framework\ir_sensor.cpp</Name><Name>Y:\Concept\Framework\kicker.cpp</Name><Name>Y:\Concept\Framework\led.cpp</Name><Name>Y:\Concept\Framework\robot.cpp</Name><Name>Y:\Concept\Framework\dribbler.cpp</Name><Name>Y:\Concept\Framework\display.cpp</Name></Files></ProjectFiles><Files><File00000><FileId>00000</FileId><FileName>stdafx.h</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>engine.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>defines.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>io_module.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>robot.h</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>robot.cpp</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>atmega128io.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>main.cpp</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>tools.cpp</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>tools.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>distance_sensor.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>ir_sensor.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>kicker.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>led.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>sensor.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>dribbler.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>kicker.cpp</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>dribbler.cpp</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>ir_sensor.cpp</FileName><Status>1</Status></File00018><File00019><FileId>00019</FileId><FileName>io_module.cpp</FileName><Status>1</Status></File00019><File00020><FileId>00020</FileId><FileName>engine.cpp</FileName><Status>1</Status></File00020><File00021><FileId>00021</FileId><FileName>distance_sensor.cpp</FileName><Status>1</Status></File00021><File00022><FileId>00022</FileId><FileName>atmega128io.cpp</FileName><Status>1</Status></File00022><File00023><FileId>00023</FileId><FileName>led.cpp</FileName><Status>1</Status></File00023><File00024><FileId>00024</FileId><FileName>sensor.cpp</FileName><Status>1</Status></File00024><File00025><FileId>00025</FileId><FileName>display.h</FileName><Status>1</Status></File00025><File00026><FileId>00026</FileId><FileName>display.cpp</FileName><Status>1</Status></File00026></Files><Workspace><File00000><Position>299 73 1025 528</Position><LineCol>7 24</LineCol></File00000><File00001><Position>347 137 947 383</Position><LineCol>11 21</LineCol></File00001><File00002><Position>369 159 969 405</Position><LineCol>57 11</LineCol></File00002><File00003><Position>391 181 991 427</Position><LineCol>16 0</LineCol></File00003><File00004><Position>413 203 1013 449</Position><LineCol>19 38</LineCol></File00004><File00005><Position>303 93 903 339</Position><LineCol>69 15</LineCol></File00005><File00006><Position>347 137 947 383</Position><LineCol>18 37</LineCol></File00006><File00007><Position>299 72 1025 527</Position><LineCol>86 2</LineCol><State>Maximized</State></File00007><File00008><Position>391 181 991 427</Position><LineCol>2 0</LineCol></File00008><File00009><Position>413 203 1013 449</Position><LineCol>36 2</LineCol></File00009><File00010><Position>300 100 930 405</Position><LineCol>4 19</LineCol></File00010><File00011><Position>322 129 952 434</Position><LineCol>23 0</LineCol></File00011><File00012><Position>344 158 974 463</Position><LineCol>29 0</LineCol></File00012><File00013><Position>366 187 996 492</Position><LineCol>58 0</LineCol></File00013><File00014><Position>388 216 1018 521</Position><LineCol>0 0</LineCol></File00014><File00015><Position>300 100 930 405</Position><LineCol>43 0</LineCol></File00015><File00016><Position>344 158 974 463</Position><LineCol>1 0</LineCol></File00016><File00017><Position>366 187 996 492</Position><LineCol>0 0</LineCol></File00017><File00018><Position>388 216 1018 521</Position><LineCol>9 0</LineCol></File00018><File00019><Position>300 100 930 405</Position><LineCol>1 0</LineCol></File00019><File00020><Position>322 129 952 434</Position><LineCol>1 0</LineCol></File00020><File00021><Position>344 158 974 463</Position><LineCol>0 28</LineCol></File00021><File00022><Position>366 187 996 492</Position><LineCol>463 0</LineCol></File00022><File00023><Position>388 216 1018 521</Position><LineCol>1 0</LineCol></File00023><File00024><Position>300 100 930 405</Position><LineCol>0 19</LineCol></File00024><File00025><Position>303 102 933 407</Position><LineCol>26 11</LineCol></File00025><File00026><Position>347 160 977 465</Position><LineCol>0 0</LineCol></File00026></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
diff --git a/source/Concept/Framework/atmega128io.cpp b/source/Concept/Framework/atmega128io.cpp index cf8fb98..b1d6f4d 100644 --- a/source/Concept/Framework/atmega128io.cpp +++ b/source/Concept/Framework/atmega128io.cpp @@ -1 +1,585 @@ -#include "atmega128io.h"
\ No newline at end of file +#include "atmega128io.h"
+
+/*************************************************************************
+Title: Interrupt UART library with receive/transmit circular buffers
+Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
+File: $Id: uart.c,v 1.5.2.10 2005/11/15 19:49:12 peter Exp $
+Software: AVR-GCC 3.3
+Hardware: any AVR with built-in UART,
+ tested on AT90S8515 at 4 Mhz and ATmega at 1Mhz
+
+DESCRIPTION:
+ An interrupt is generated when the UART has finished transmitting or
+ receiving a byte. The interrupt handling routines use circular buffers
+ for buffering received and transmitted data.
+
+ The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE variables define
+ the buffer size in bytes. Note that these variables must be a
+ power of 2.
+
+USAGE:
+ Refere to the header file uart.h for a description of the routines.
+ See also example test_uart.c.
+
+NOTES:
+ Based on Atmel Application Note AVR306
+
+*************************************************************************/
+#include <avr/io.h>
+#include <avr/interrupt.h>
+//#include <avr/signal.h>
+#include <avr/pgmspace.h>
+
+/*
+ * constants and macros
+ */
+
+/* size of RX/TX buffers */
+#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1)
+#define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1)
+
+#if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK )
+#error RX buffer size is not a power of 2
+#endif
+#if ( UART_TX_BUFFER_SIZE & UART_TX_BUFFER_MASK )
+#error TX buffer size is not a power of 2
+#endif
+
+#if defined(__AVR_AT90S2313__) \
+ || defined(__AVR_AT90S4414__) || defined(__AVR_AT90S4434__) \
+ || defined(__AVR_AT90S8515__) || defined(__AVR_AT90S8535__) \
+ || defined(__AVR_ATmega103__)
+ /* old AVR classic or ATmega103 with one UART */
+ #define AT90_UART
+ #define UART0_RECEIVE_INTERRUPT SIG_UART_RECV
+ #define UART0_TRANSMIT_INTERRUPT SIG_UART_DATA
+ #define UART0_STATUS USR
+ #define UART0_CONTROL UCR
+ #define UART0_DATA UDR
+ #define UART0_UDRIE UDRIE
+#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__)
+ /* old AVR classic with one UART */
+ #define AT90_UART
+ #define UART0_RECEIVE_INTERRUPT SIG_UART_RECV
+ #define UART0_TRANSMIT_INTERRUPT SIG_UART_DATA
+ #define UART0_STATUS UCSRA
+ #define UART0_CONTROL UCSRB
+ #define UART0_DATA UDR
+ #define UART0_UDRIE UDRIE
+#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \
+ || defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) \
+ || defined(__AVR_ATmega323__)
+ /* ATmega with one USART */
+ #define ATMEGA_USART
+ #define UART0_RECEIVE_INTERRUPT SIG_UART_RECV
+ #define UART0_TRANSMIT_INTERRUPT SIG_UART_DATA
+ #define UART0_STATUS UCSRA
+ #define UART0_CONTROL UCSRB
+ #define UART0_DATA UDR
+ #define UART0_UDRIE UDRIE
+#elif defined(__AVR_ATmega163__)
+ /* ATmega163 with one UART */
+ #define ATMEGA_UART
+ #define UART0_RECEIVE_INTERRUPT SIG_UART_RECV
+ #define UART0_TRANSMIT_INTERRUPT SIG_UART_DATA
+ #define UART0_STATUS UCSRA
+ #define UART0_CONTROL UCSRB
+ #define UART0_DATA UDR
+ #define UART0_UDRIE UDRIE
+#elif defined(__AVR_ATmega162__)
+ /* ATmega with two USART */
+ #define ATMEGA_USART0
+ #define ATMEGA_USART1
+ #define UART0_RECEIVE_INTERRUPT SIG_USART0_RECV
+ #define UART1_RECEIVE_INTERRUPT SIG_USART1_RECV
+ #define UART0_TRANSMIT_INTERRUPT SIG_USART0_DATA
+ #define UART1_TRANSMIT_INTERRUPT SIG_USART1_DATA
+ #define UART0_STATUS UCSR0A
+ #define UART0_CONTROL UCSR0B
+ #define UART0_DATA UDR0
+ #define UART0_UDRIE UDRIE0
+ #define UART1_STATUS UCSR1A
+ #define UART1_CONTROL UCSR1B
+ #define UART1_DATA UDR1
+ #define UART1_UDRIE UDRIE1
+#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
+ /* ATmega with two USART */
+ #define ATMEGA_USART0
+ #define ATMEGA_USART1
+ #define UART0_RECEIVE_INTERRUPT SIG_UART0_RECV
+ #define UART1_RECEIVE_INTERRUPT SIG_UART1_RECV
+ #define UART0_TRANSMIT_INTERRUPT SIG_UART0_DATA
+ #define UART1_TRANSMIT_INTERRUPT SIG_UART1_DATA
+ #define UART0_STATUS UCSR0A
+ #define UART0_CONTROL UCSR0B
+ #define UART0_DATA UDR0
+ #define UART0_UDRIE UDRIE0
+ #define UART1_STATUS UCSR1A
+ #define UART1_CONTROL UCSR1B
+ #define UART1_DATA UDR1
+ #define UART1_UDRIE UDRIE1
+#elif defined(__AVR_ATmega161__)
+ /* ATmega with UART */
+ #error "AVR ATmega161 currently not supported by this libaray !"
+#elif defined(__AVR_ATmega169__)
+ /* ATmega with one USART */
+ #define ATMEGA_USART
+ #define UART0_RECEIVE_INTERRUPT SIG_USART_RECV
+ #define UART0_TRANSMIT_INTERRUPT SIG_USART_DATA
+ #define UART0_STATUS UCSRA
+ #define UART0_CONTROL UCSRB
+ #define UART0_DATA UDR
+ #define UART0_UDRIE UDRIE
+#elif defined(__AVR_ATmega48__) ||defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
+ #define ATMEGA_USART0
+ #define UART0_RECEIVE_INTERRUPT SIG_USART_RECV
+ #define UART0_TRANSMIT_INTERRUPT SIG_USART_DATA
+ #define UART0_STATUS UCSR0A
+ #define UART0_CONTROL UCSR0B
+ #define UART0_DATA UDR0
+ #define UART0_UDRIE UDRIE0
+#elif defined(__AVR_ATtiny2313__)
+ #define ATMEGA_USART
+ #define UART0_RECEIVE_INTERRUPT SIG_USART0_RX
+ #define UART0_TRANSMIT_INTERRUPT SIG_USART0_UDRE
+ #define UART0_STATUS UCSRA
+ #define UART0_CONTROL UCSRB
+ #define UART0_DATA UDR
+ #define UART0_UDRIE UDRIE
+#else
+ #error "no UART definition for MCU available"
+#endif
+
+
+/*
+ * module global variables
+ */
+static volatile unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE];
+static volatile unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE];
+static volatile unsigned char UART_TxHead;
+static volatile unsigned char UART_TxTail;
+static volatile unsigned char UART_RxHead;
+static volatile unsigned char UART_RxTail;
+static volatile unsigned char UART_LastRxError;
+
+#if defined( ATMEGA_USART1 )
+static volatile unsigned char UART1_TxBuf[UART_TX_BUFFER_SIZE];
+static volatile unsigned char UART1_RxBuf[UART_RX_BUFFER_SIZE];
+static volatile unsigned char UART1_TxHead;
+static volatile unsigned char UART1_TxTail;
+static volatile unsigned char UART1_RxHead;
+static volatile unsigned char UART1_RxTail;
+static volatile unsigned char UART1_LastRxError;
+#endif
+
+
+
+SIGNAL(UART0_RECEIVE_INTERRUPT)
+/*************************************************************************
+Function: UART Receive Complete interrupt
+Purpose: called when the UART has received a character
+**************************************************************************/
+{
+ unsigned char tmphead;
+ unsigned char data;
+ unsigned char usr;
+ unsigned char lastRxError;
+
+
+ /* read UART status register and UART data register */
+ usr = UART0_STATUS;
+ data = UART0_DATA;
+
+ /* */
+#if defined( AT90_UART )
+ lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
+#elif defined( ATMEGA_USART )
+ lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
+#elif defined( ATMEGA_USART0 )
+ lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) );
+#elif defined ( ATMEGA_UART )
+ lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
+#endif
+
+ /* calculate buffer index */
+ tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK;
+
+ if ( tmphead == UART_RxTail ) {
+ /* error: receive buffer overflow */
+ lastRxError = UART_BUFFER_OVERFLOW >> 8;
+ }else{
+ /* store new index */
+ UART_RxHead = tmphead;
+ /* store received data in buffer */
+ UART_RxBuf[tmphead] = data;
+ }
+ UART_LastRxError = lastRxError;
+}
+
+
+SIGNAL(UART0_TRANSMIT_INTERRUPT)
+/*************************************************************************
+Function: UART Data Register Empty interrupt
+Purpose: called when the UART is ready to transmit the next byte
+**************************************************************************/
+{
+ unsigned char tmptail;
+
+
+ if ( UART_TxHead != UART_TxTail) {
+ /* calculate and store new buffer index */
+ tmptail = (UART_TxTail + 1) & UART_TX_BUFFER_MASK;
+ UART_TxTail = tmptail;
+ /* get one byte from buffer and write it to UART */
+ UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */
+ }else{
+ /* tx buffer empty, disable UDRE interrupt */
+ UART0_CONTROL &= ~_BV(UART0_UDRIE);
+ }
+}
+
+
+/*************************************************************************
+Function: uart_init()
+Purpose: initialize UART and set baudrate
+Input: baudrate using macro UART_BAUD_SELECT()
+Returns: none
+**************************************************************************/
+void uart_init(unsigned int baudrate)
+{
+ UART_TxHead = 0;
+ UART_TxTail = 0;
+ UART_RxHead = 0;
+ UART_RxTail = 0;
+
+#if defined( AT90_UART )
+ /* set baud rate */
+ UBRR = (unsigned char)baudrate;
+
+ /* enable UART receiver and transmmitter and receive complete interrupt */
+ UART0_CONTROL = _BV(RXCIE)|_BV(RXEN)|_BV(TXEN);
+
+#elif defined (ATMEGA_USART)
+ /* Set baud rate */
+ if ( baudrate & 0x8000 )
+ {
+ UART0_STATUS = (1<<U2X); //Enable 2x speed
+ baudrate &= ~0x8000;
+ }
+ UBRRH = (unsigned char)(baudrate>>8);
+ UBRRL = (unsigned char) baudrate;
+
+ /* Enable USART receiver and transmitter and receive complete interrupt */
+ UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
+
+ /* Set frame format: asynchronous, 8data, no parity, 1stop bit */
+ #ifdef URSEL
+ UCSRC = (1<<URSEL)|(3<<UCSZ0);
+ #else
+ UCSRC = (3<<UCSZ0);
+ #endif
+
+#elif defined (ATMEGA_USART0 )
+ /* Set baud rate */
+ if ( baudrate & 0x8000 )
+ {
+ UART0_STATUS = (1<<U2X0); //Enable 2x speed
+ baudrate &= ~0x8000;
+ }
+ UBRR0H = (unsigned char)(baudrate>>8);
+ UBRR0L = (unsigned char) baudrate;
+
+ /* Enable USART receiver and transmitter and receive complete interrupt */
+ UART0_CONTROL = _BV(RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
+
+ /* Set frame format: asynchronous, 8data, no parity, 1stop bit */
+ #ifdef URSEL0
+ UCSR0C = (1<<URSEL0)|(3<<UCSZ00);
+ #else
+ UCSR0C = (3<<UCSZ00);
+ #endif
+
+#elif defined ( ATMEGA_UART )
+ /* set baud rate */
+ if ( baudrate & 0x8000 )
+ {
+ UART0_STATUS = (1<<U2X); //Enable 2x speed
+ baudrate &= ~0x8000;
+ }
+ UBRRHI = (unsigned char)(baudrate>>8);
+ UBRR = (unsigned char) baudrate;
+
+ /* Enable UART receiver and transmitter and receive complete interrupt */
+ UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
+
+#endif
+
+}/* uart_init */
+
+
+/*************************************************************************
+Function: uart_getc()
+Purpose: return byte from ringbuffer
+Returns: lower byte: received byte from ringbuffer
+ higher byte: last receive error
+**************************************************************************/
+unsigned int uart_getc(void)
+{
+ unsigned char tmptail;
+ unsigned char data;
+
+
+ if ( UART_RxHead == UART_RxTail ) {
+ return UART_NO_DATA; /* no data available */
+ }
+
+ /* calculate /store buffer index */
+ tmptail = (UART_RxTail + 1) & UART_RX_BUFFER_MASK;
+ UART_RxTail = tmptail;
+
+ /* get data from receive buffer */
+ data = UART_RxBuf[tmptail];
+
+ return (UART_LastRxError << 8) + data;
+
+}/* uart_getc */
+
+
+/*************************************************************************
+Function: uart_putc()
+Purpose: write byte to ringbuffer for transmitting via UART
+Input: byte to be transmitted
+Returns: none
+**************************************************************************/
+void uart_putc(unsigned char data)
+{
+ unsigned char tmphead;
+
+
+ tmphead = (UART_TxHead + 1) & UART_TX_BUFFER_MASK;
+
+ while ( tmphead == UART_TxTail ){
+ ;/* wait for free space in buffer */
+ }
+
+ UART_TxBuf[tmphead] = data;
+ UART_TxHead = tmphead;
+
+ /* enable UDRE interrupt */
+ UART0_CONTROL |= _BV(UART0_UDRIE);
+
+}/* uart_putc */
+
+
+/*************************************************************************
+Function: uart_puts()
+Purpose: transmit string to UART
+Input: string to be transmitted
+Returns: none
+**************************************************************************/
+void uart_puts(const char *s )
+{
+ while (*s)
+ uart_putc(*s++);
+
+}/* uart_puts */
+
+
+/*************************************************************************
+Function: uart_puts_p()
+Purpose: transmit string from program memory to UART
+Input: program memory string to be transmitted
+Returns: none
+**************************************************************************/
+void uart_puts_p(const char *progmem_s )
+{
+ register char c;
+
+ while ( (c = pgm_read_byte(progmem_s++)) )
+ uart_putc(c);
+
+}/* uart_puts_p */
+
+
+/*
+ * these functions are only for ATmegas with two USART
+ */
+#if defined( ATMEGA_USART1 )
+
+SIGNAL(UART1_RECEIVE_INTERRUPT)
+/*************************************************************************
+Function: UART1 Receive Complete interrupt
+Purpose: called when the UART1 has received a character
+**************************************************************************/
+{
+ unsigned char tmphead;
+ unsigned char data;
+ unsigned char usr;
+ unsigned char lastRxError;
+
+
+ /* read UART status register and UART data register */
+ usr = UART1_STATUS;
+ data = UART1_DATA;
+
+ /* */
+ lastRxError = (usr & (_BV(FE1)|_BV(DOR1)) );
+
+ /* calculate buffer index */
+ tmphead = ( UART1_RxHead + 1) & UART_RX_BUFFER_MASK;
+
+ if ( tmphead == UART1_RxTail ) {
+ /* error: receive buffer overflow */
+ lastRxError = UART_BUFFER_OVERFLOW >> 8;
+ }else{
+ /* store new index */
+ UART1_RxHead = tmphead;
+ /* store received data in buffer */
+ UART1_RxBuf[tmphead] = data;
+ }
+ UART1_LastRxError = lastRxError;
+}
+
+
+SIGNAL(UART1_TRANSMIT_INTERRUPT)
+/*************************************************************************
+Function: UART1 Data Register Empty interrupt
+Purpose: called when the UART1 is ready to transmit the next byte
+**************************************************************************/
+{
+ unsigned char tmptail;
+
+
+ if ( UART1_TxHead != UART1_TxTail) {
+ /* calculate and store new buffer index */
+ tmptail = (UART1_TxTail + 1) & UART_TX_BUFFER_MASK;
+ UART1_TxTail = tmptail;
+ /* get one byte from buffer and write it to UART */
+ UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */
+ }else{
+ /* tx buffer empty, disable UDRE interrupt */
+ UART1_CONTROL &= ~_BV(UART1_UDRIE);
+ }
+}
+
+
+/*************************************************************************
+Function: uart1_init()
+Purpose: initialize UART1 and set baudrate
+Input: baudrate using macro UART_BAUD_SELECT()
+Returns: none
+**************************************************************************/
+void uart1_init(unsigned int baudrate)
+{
+ UART1_TxHead = 0;
+ UART1_TxTail = 0;
+ UART1_RxHead = 0;
+ UART1_RxTail = 0;
+
+
+ /* Set baud rate */
+ if ( baudrate & 0x8000 )
+ {
+ UART1_STATUS = (1<<U2X1); //Enable 2x speed
+ baudrate &= ~0x8000;
+ }
+ UBRR1H = (unsigned char)(baudrate>>8);
+ UBRR1L = (unsigned char) baudrate;
+
+ /* Enable USART receiver and transmitter and receive complete interrupt */
+ UART1_CONTROL = _BV(RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
+
+ /* Set frame format: asynchronous, 8data, no parity, 1stop bit */
+ #ifdef URSEL1
+ UCSR1C = (1<<URSEL1)|(3<<UCSZ10);
+ #else
+ UCSR1C = (3<<UCSZ10);
+ #endif
+}/* uart_init */
+
+
+/*************************************************************************
+Function: uart1_getc()
+Purpose: return byte from ringbuffer
+Returns: lower byte: received byte from ringbuffer
+ higher byte: last receive error
+**************************************************************************/
+unsigned int uart1_getc(void)
+{
+ unsigned char tmptail;
+ unsigned char data;
+
+
+ if ( UART1_RxHead == UART1_RxTail ) {
+ return UART_NO_DATA; /* no data available */
+ }
+
+ /* calculate /store buffer index */
+ tmptail = (UART1_RxTail + 1) & UART_RX_BUFFER_MASK;
+ UART1_RxTail = tmptail;
+
+ /* get data from receive buffer */
+ data = UART1_RxBuf[tmptail];
+
+ return (UART1_LastRxError << 8) + data;
+
+}/* uart1_getc */
+
+
+/*************************************************************************
+Function: uart1_putc()
+Purpose: write byte to ringbuffer for transmitting via UART
+Input: byte to be transmitted
+Returns: none
+**************************************************************************/
+void uart1_putc(unsigned char data)
+{
+ unsigned char tmphead;
+
+
+ tmphead = (UART1_TxHead + 1) & UART_TX_BUFFER_MASK;
+
+ while ( tmphead == UART1_TxTail ){
+ ;/* wait for free space in buffer */
+ }
+
+ UART1_TxBuf[tmphead] = data;
+ UART1_TxHead = tmphead;
+
+ /* enable UDRE interrupt */
+ UART1_CONTROL |= _BV(UART1_UDRIE);
+
+}/* uart1_putc */
+
+
+/*************************************************************************
+Function: uart1_puts()
+Purpose: transmit string to UART1
+Input: string to be transmitted
+Returns: none
+**************************************************************************/
+void uart1_puts(const char *s )
+{
+ while (*s)
+ uart1_putc(*s++);
+
+}/* uart1_puts */
+
+
+/*************************************************************************
+Function: uart1_puts_p()
+Purpose: transmit string from program memory to UART1
+Input: program memory string to be transmitted
+Returns: none
+**************************************************************************/
+void uart1_puts_p(const char *progmem_s )
+{
+ register char c;
+
+ while ( (c = pgm_read_byte(progmem_s++)) )
+ uart1_putc(c);
+
+}/* uart1_puts_p */
+
+
+#endif
diff --git a/source/Concept/Framework/atmega128io.h b/source/Concept/Framework/atmega128io.h index a6044c4..ed526ae 100644 --- a/source/Concept/Framework/atmega128io.h +++ b/source/Concept/Framework/atmega128io.h @@ -1,12 +1,183 @@ #ifndef _ATMEGA128IO_H
#define _ATMEGA128IO_H
+#define UART_BAUD_RATE 9600
+
#include <avr/io.h>
#include <avr/interrupt.h>
-namespace hardware
-{
+/************************************************************************
+Title: Interrupt UART library with receive/transmit circular buffers
+Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
+File: $Id: uart.h,v 1.7.2.5 2005/08/14 11:25:41 Peter Exp $
+Software: AVR-GCC 3.3
+Hardware: any AVR with built-in UART, tested on AT90S8515 at 4 Mhz
+Usage: see Doxygen manual
+************************************************************************/
+
+/**
+ * @defgroup pfleury_uart UART Library
+ * @code #include <uart.h> @endcode
+ *
+ * @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers.
+ *
+ * This library can be used to transmit and receive data through the built in UART.
+ *
+ * An interrupt is generated when the UART has finished transmitting or
+ * receiving a byte. The interrupt handling routines use circular buffers
+ * for buffering received and transmitted data.
+ *
+ * The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define
+ * the size of the circular buffers in bytes. Note that these constants must be a power of 2.
+ * You may need to adapt this constants to your target and your application by adding
+ * CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_RX_BUFFER_SIZE=nn to your Makefile.
+ *
+ * @note Based on Atmel Application Note AVR306
+ * @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury
+ */
+
+/**@{*/
+
+
+#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
+#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
+#endif
+
+
+/*
+** constants and macros
+*/
+
+/** @brief UART Baudrate Expression
+ * @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz
+ * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600
+ */
+#define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu)/((baudRate)*16l)-1)
+
+/** @brief UART Baudrate Expression for ATmega double speed mode
+ * @param xtalcpu system clock in Mhz, e.g. 4000000L for 4Mhz
+ * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600
+ */
+#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) (((xtalCpu)/((baudRate)*8l)-1)|0x8000)
+
+
+/** Size of the circular receive buffer, must be power of 2 */
+#ifndef UART_RX_BUFFER_SIZE
+#define UART_RX_BUFFER_SIZE 32
+#endif
+/** Size of the circular transmit buffer, must be power of 2 */
+#ifndef UART_TX_BUFFER_SIZE
+#define UART_TX_BUFFER_SIZE 32
+#endif
+
+/* test if the size of the circular buffers fits into SRAM */
+#if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) )
+#error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than size of SRAM"
+#endif
+
+/*
+** high byte error return code of uart_getc()
+*/
+#define UART_FRAME_ERROR 0x0800 /* Framing Error by UART */
+#define UART_OVERRUN_ERROR 0x0400 /* Overrun condition by UART */
+#define UART_BUFFER_OVERFLOW 0x0200 /* receive ringbuffer overflow */
+#define UART_NO_DATA 0x0100 /* no receive data available */
+
+
+/*
+** function prototypes
+*/
+
+/**
+ @brief Initialize UART and set baudrate
+ @param baudrate Specify baudrate using macro UART_BAUD_SELECT()
+ @return none
+*/
+extern void uart_init(unsigned int baudrate);
+
+
+/**
+ * @brief Get received byte from ringbuffer
+ *
+ * Returns in the lower byte the received character and in the
+ * higher byte the last receive error.
+ * UART_NO_DATA is returned when no data is available.
+ *
+ * @param void
+ * @return lower byte: received byte from ringbuffer
+ * @return higher byte: last receive status
+ * - \b 0 successfully received data from UART
+ * - \b UART_NO_DATA
+ * <br>no receive data available
+ * - \b UART_BUFFER_OVERFLOW
+ * <br>Receive ringbuffer overflow.
+ * We are not reading the receive buffer fast enough,
+ * one or more received character have been dropped
+ * - \b UART_OVERRUN_ERROR
+ * <br>Overrun condition by UART.
+ * A character already present in the UART UDR register was
+ * not read by the interrupt handler before the next character arrived,
+ * one or more received characters have been dropped.
+ * - \b UART_FRAME_ERROR
+ * <br>Framing Error by UART
+ */
+extern unsigned int uart_getc(void);
+
+
+/**
+ * @brief Put byte to ringbuffer for transmitting via UART
+ * @param data byte to be transmitted
+ * @return none
+ */
+extern void uart_putc(unsigned char data);
+
+
+/**
+ * @brief Put string to ringbuffer for transmitting via UART
+ *
+ * The string is buffered by the uart library in a circular buffer
+ * and one character at a time is transmitted to the UART using interrupts.
+ * Blocks if it can not write the whole string into the circular buffer.
+ *
+ * @param s string to be transmitted
+ * @return none
+ */
+extern void uart_puts(const char *s );
+
+
+/**
+ * @brief Put string from program memory to ringbuffer for transmitting via UART.
+ *
+ * The string is buffered by the uart library in a circular buffer
+ * and one character at a time is transmitted to the UART using interrupts.
+ * Blocks if it can not write the whole string into the circular buffer.
+ *
+ * @param s program memory string to be transmitted
+ * @return none
+ * @see uart_puts_P
+ */
+extern void uart_puts_p(const char *s );
+
+/**
+ * @brief Macro to automatically put a string constant into program memory
+ */
+#define uart_puts_P(__s) uart_puts_p(PSTR(__s))
+
+
+
+/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */
+extern void uart1_init(unsigned int baudrate);
+/** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */
+extern unsigned int uart1_getc(void);
+/** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */
+extern void uart1_putc(unsigned char data);
+/** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */
+extern void uart1_puts(const char *s );
+/** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */
+extern void uart1_puts_p(const char *s );
+/** @brief Macro to automatically put a string constant into program memory */
+#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))
-};
+/**@}*/
#endif diff --git a/source/Concept/Framework/default/Makefile b/source/Concept/Framework/default/Makefile index ca32983..20eef5c 100644 --- a/source/Concept/Framework/default/Makefile +++ b/source/Concept/Framework/default/Makefile @@ -6,14 +6,14 @@ PROJECT = RoboCode
MCU = atmega128
TARGET = RoboCode.elf
-CC = avr-gcc.exe
+CC = avr-g++.exe
## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
-CFLAGS += -Wall -gdwarf-2 -O0
+CFLAGS += -Wall -gdwarf-2 -DF_CPU=16000000ULUL -O3 -fsigned-char
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
## Assembly specific flags
diff --git a/source/Concept/Framework/defines.h b/source/Concept/Framework/defines.h index 1b14aa7..1e25ba5 100644 --- a/source/Concept/Framework/defines.h +++ b/source/Concept/Framework/defines.h @@ -57,6 +57,7 @@ //Constants
#define SPEED_PER_PWM 1
+#define DISTANCE_PER_VALUE 1
//IO Module Names
enum IOModuleNames
@@ -70,13 +71,20 @@ enum IOModuleNames IO_ENGINE_DRIVE_LEFT = IO_ENGINE_START,
IO_ENGINE_DRIVE_RIGHT,
IO_ENGINE_DRIVE_BACK,
- IO_ENGINE_DRIBBLER,
IO_ENGINE_END,
+ //Dribbler
+
+ IO_DRIBBLER_START = IO_ENGINE_END,
+
+ IO_DRIBBLER_MAIN = IO_DRIBBLER_START,
+
+ IO_DRIBBLER_END,
+
//Kicker
- IO_KICKER_START = IO_ENGINE_END,
+ IO_KICKER_START = IO_DRIBBLER_END,
IO_KICKER_MAIN = IO_KICKER_START,
@@ -93,6 +101,10 @@ enum IOModuleNames IO_SENSOR_IR_260_DEG,
IO_SENSOR_IR_300_DEG,
IO_SENSOR_IR_330_DEG,
+ IO_SENSOR_DISTANCE_0_DEG,
+ IO_SENSOR_DISTANCE_90_DEG,
+ IO_SENSOR_DISTANCE_180_DEG,
+ IO_SENSOR_DISTANCE_270_DEG,
IO_SENSOR_END,
@@ -104,8 +116,16 @@ enum IOModuleNames IO_LED_END,
+ //Displays
+
+ IO_DISPLAY_START = IO_LED_END,
+
+ IO_DISPLAY_MAIN = IO_DISPLAY_START,
+
+ IO_DISPLAY_END,
+
//General
- IO_END = IO_LED_END,
+ IO_END = IO_DISPLAY_END,
};
#endif diff --git a/source/Concept/Framework/display.cpp b/source/Concept/Framework/display.cpp new file mode 100644 index 0000000..82fbb41 --- /dev/null +++ b/source/Concept/Framework/display.cpp @@ -0,0 +1 @@ +#include "display.h"
diff --git a/source/Concept/Framework/display.h b/source/Concept/Framework/display.h new file mode 100644 index 0000000..8e6e0a4 --- /dev/null +++ b/source/Concept/Framework/display.h @@ -0,0 +1,60 @@ +#ifndef _DISPLAY_H
+#define _DISPLAY_H
+
+#include "stdafx.h"
+
+class Display : public IO_Module
+{
+public:
+ Display()
+ {
+ this->parent = NULL;
+ this->moduleId = 0;
+ }
+
+ Display(uint32 displayId)
+ {
+ this->parent = NULL;
+ this->moduleId = displayId;
+
+ switch(displayId)
+ {
+ case IO_DISPLAY_MAIN:
+ msleep(500);
+ uart1_init(103);//9600 BAUD at 16MHz Atmel
+ sleep(2);
+ break;
+ default:
+ break;
+ }
+ }
+
+protected:
+ //Hardware
+ volatile uint8* hardwarePort;
+ volatile uint16* pwmSpeed;
+ uint8 pinForward;
+ uint8 pinReverse;
+
+public:
+ void Print(char* newString)
+ {
+ switch(moduleId)
+ {
+ case IO_DISPLAY_MAIN:
+ uart1_puts(newString);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void Print(int32 newInteger)
+ {
+ char buffer[12];
+ ltoa(newInteger, buffer, 10);
+ Print(buffer);
+ }
+};
+
+#endif diff --git a/source/Concept/Framework/distance_sensor.cpp b/source/Concept/Framework/distance_sensor.cpp index a11460c..c6c0582 100644 --- a/source/Concept/Framework/distance_sensor.cpp +++ b/source/Concept/Framework/distance_sensor.cpp @@ -1 +1,26 @@ -#include "distance_sensor.h"
\ No newline at end of file +#include "distance_sensor.h"
+
+//-----------------------------------------------------------------------------
+float Distance_Sensor::GetDistance()
+{
+ uint32 result = 0;
+
+ //Generate pulse
+ *hardwareDDR |= pin;//Set pin output
+ *hardwarePort |= pin;//Activate port
+ usleep(10);//Wait for 10µs
+ *hardwarePort &= ~pin;//Deactivate port
+ *hardwareDDR &= ~pin;//Set pin input
+
+ //Wait for response
+ while(!(*hardwarePin & pin));
+
+ //Calculate duration of response
+ while(*hardwarePin & pin)
+ {
+ result++;
+ asm volatile("nop");
+ }
+
+ return (float(result) * DISTANCE_PER_VALUE);
+}
diff --git a/source/Concept/Framework/distance_sensor.h b/source/Concept/Framework/distance_sensor.h index 7690ab4..832e556 100644 --- a/source/Concept/Framework/distance_sensor.h +++ b/source/Concept/Framework/distance_sensor.h @@ -1,7 +1,7 @@ #ifndef _DISTANCE_SENSOR_H
#define _DISTANCE_SENSOR_H
-//#include "stdafx.h"
+#include "stdafx.h"
#include "sensor.h"
class Distance_Sensor : public Sensor
@@ -11,17 +11,61 @@ public: {
this->parent = NULL;
this->moduleId = 0;
+ this->hardwarePort = NULL;
+ this->hardwareDDR = NULL;
+ this->hardwarePin = NULL;
+ this->pin = 0;
}
Distance_Sensor(uint32 sensorId)
{
this->parent = NULL;
this->moduleId = sensorId;
+
+ switch(sensorId)
+ {
+ case IO_SENSOR_DISTANCE_0_DEG:
+ this->hardwarePort = &PORTC;
+ this->hardwareDDR = &DDRC;
+ this->hardwarePin = &PINC;
+ this->pin = (1 << 0);
+ break;
+ case IO_SENSOR_DISTANCE_90_DEG:
+ this->hardwarePort = &PORTC;
+ this->hardwareDDR = &DDRC;
+ this->hardwarePin = &PINC;
+ this->pin = (1 << 1);
+ break;
+ case IO_SENSOR_DISTANCE_180_DEG:
+ this->hardwarePort = &PORTC;
+ this->hardwareDDR = &DDRC;
+ this->hardwarePin = &PINC;
+ this->pin = (1 << 2);
+ break;
+ case IO_SENSOR_DISTANCE_270_DEG:
+ this->hardwarePort = &PORTC;
+ this->hardwareDDR = &DDRC;
+ this->hardwarePin = &PINC;
+ this->pin = (1 << 3);
+ break;
+ default:
+ this->hardwarePort = NULL;
+ this->hardwareDDR = NULL;
+ this->hardwarePin = NULL;
+ this->pin = 0;
+ break;
+ }
}
protected:
+ //Hardware
+ volatile uint8* hardwarePort;
+ volatile uint8* hardwareDDR;
+ volatile uint8* hardwarePin;
+ uint8 pin;
public:
+ float GetDistance();
};
#endif diff --git a/source/Concept/Framework/dribbler.cpp b/source/Concept/Framework/dribbler.cpp new file mode 100644 index 0000000..20557e4 --- /dev/null +++ b/source/Concept/Framework/dribbler.cpp @@ -0,0 +1 @@ +#include "dribbler.h"
diff --git a/source/Concept/Framework/dribbler.h b/source/Concept/Framework/dribbler.h new file mode 100644 index 0000000..64c045a --- /dev/null +++ b/source/Concept/Framework/dribbler.h @@ -0,0 +1,118 @@ +#ifndef _DRIBBLER_H
+#define _DRIBBLER_H
+
+#include "stdafx.h"
+
+class Dribbler : public IO_Module
+{
+public:
+ Dribbler()
+ {
+ this->enabled = false;
+ this->curSpeed = 0;
+ this->parent = NULL;
+ this->moduleId = 0;
+ this->hardwarePort = NULL;
+ this->portPower = NULL;
+ this->pinForward = 0;
+ this->pinReverse = 0;
+ this->pinPower = 0;
+ }
+
+ Dribbler(uint32 dribblerId)
+ {
+ this->enabled = false;
+ this->curSpeed = 1.0f;
+ this->parent = NULL;
+ this->moduleId = dribblerId;
+
+ switch(dribblerId)
+ {
+ case IO_DRIBBLER_MAIN:
+ this->hardwarePort = &PORTD;
+ this->portPower = &PORTA;
+ this->pinForward = (1 << 6);
+ this->pinReverse = (1 << 7);
+ this->pinPower = (1 << 5);
+ break;
+ default:
+ this->hardwarePort = NULL;
+ this->portPower = NULL;
+ this->pinForward = 0;
+ this->pinReverse = 0;
+ this->pinPower = 0;
+ break;
+ }
+
+ UpdateDirection();
+ }
+
+protected:
+ bool enabled;
+ float curSpeed;
+
+ //Hardware
+ volatile uint8* hardwarePort;
+ volatile uint8* portPower;
+ uint8 pinForward;
+ uint8 pinReverse;
+ uint8 pinPower;
+
+ void UpdateDirection()
+ {
+ if(enabled)
+ {
+ if(curSpeed > 0)
+ {
+ *hardwarePort |= pinForward;
+ *hardwarePort &= ~pinReverse;
+ }
+ else if(curSpeed < 0)
+ {
+ *hardwarePort |= pinReverse;
+ *hardwarePort &= ~pinForward;
+ }
+ else
+ {
+ *hardwarePort |= pinForward;
+ *hardwarePort |= pinReverse;
+ }
+
+ *portPower |= pinPower;
+ }
+ else
+ {
+ *hardwarePort &= ~pinForward;
+ *hardwarePort &= ~pinReverse;
+
+ *portPower &= ~pinPower;
+ }
+ }
+
+public:
+ float GetSpeed()
+ {
+ return curSpeed;
+ }
+
+ void SetSpeed(float newSpeed)
+ {
+ curSpeed = newSpeed;
+
+ UpdateDirection();
+ }
+
+ bool GetEnabled()
+ {
+ return enabled;
+ }
+
+ void SetEnabled(bool newStatus)
+ {
+ enabled = newStatus;
+
+ UpdateDirection();
+ }
+};
+
+#endif diff --git a/source/Concept/Framework/engine.cpp b/source/Concept/Framework/engine.cpp index 11856cc..5c14c17 100644 --- a/source/Concept/Framework/engine.cpp +++ b/source/Concept/Framework/engine.cpp @@ -1 +1 @@ -#include "engine.h"
\ No newline at end of file +#include "engine.h"
diff --git a/source/Concept/Framework/engine.h b/source/Concept/Framework/engine.h index 2d8c409..0e7cf8c 100644 --- a/source/Concept/Framework/engine.h +++ b/source/Concept/Framework/engine.h @@ -14,10 +14,8 @@ public: this->moduleId = 0;
this->hardwarePort = NULL;
this->pwmSpeed = NULL;
- this->pwmPort = NULL;
this->pinForward = 0;
this->pinReverse = 0;
- this->pinPwm = 0;
}
Engine(uint32 engineId)
@@ -26,9 +24,6 @@ public: this->curSpeed = 0;
this->parent = NULL;
this->moduleId = engineId;
- this->pwmSpeed = NULL;
- this->pwmPort = NULL;
- this->pinPwm = 0;
switch(engineId)
{
@@ -38,25 +33,18 @@ public: this->pinForward = (1 << 0);
this->pinReverse = (1 << 1);
break;
- case IO_ENGINE_DRIVE_RIGHT:
+ case IO_ENGINE_DRIVE_BACK:
this->hardwarePort = &PORTB;
this->pwmSpeed = &OCR1B;
this->pinForward = (1 << 2);
this->pinReverse = (1 << 3);
break;
- case IO_ENGINE_DRIVE_BACK:
+ case IO_ENGINE_DRIVE_RIGHT:
this->hardwarePort = &PORTD;
this->pwmSpeed = &OCR3A;
this->pinForward = (1 << 5);
this->pinReverse = (1 << 4);
break;
- case IO_ENGINE_DRIBBLER:
- this->hardwarePort = &PORTD;
- this->pwmPort = &PORTA;
- this->pinForward = (1 << 6);
- this->pinReverse = (1 << 7);
- this->pinPwm = (1 << 5);
- break;
default:
this->hardwarePort = NULL;
this->pwmSpeed = NULL;
@@ -77,9 +65,6 @@ protected: volatile uint16* pwmSpeed;
uint8 pinForward;
uint8 pinReverse;
- //Dribbler only
- volatile uint8* pwmPort;
- uint8 pinPwm;
void UpdateDirection()
{
@@ -118,18 +103,7 @@ public: {
curSpeed = newSpeed;
- if(pwmSpeed)
- {
- *pwmSpeed = abs(newSpeed / SPEED_PER_PWM);
- }
- else if(pwmPort && (uint16)(abs(newSpeed / SPEED_PER_PWM)))
- {
- *pwmPort |= pinPwm;
- }
- else if(pwmPort)
- {
- *pwmPort &= ~pinPwm;
- }
+ *pwmSpeed = abs(newSpeed / SPEED_PER_PWM);
UpdateDirection();
}
diff --git a/source/Concept/Framework/io_module.cpp b/source/Concept/Framework/io_module.cpp index 93f78ae..3549af5 100644 --- a/source/Concept/Framework/io_module.cpp +++ b/source/Concept/Framework/io_module.cpp @@ -1 +1 @@ -#include "io_module.h"
\ No newline at end of file +#include "io_module.h"
diff --git a/source/Concept/Framework/ir_sensor.cpp b/source/Concept/Framework/ir_sensor.cpp index 065143e..c34feed 100644 --- a/source/Concept/Framework/ir_sensor.cpp +++ b/source/Concept/Framework/ir_sensor.cpp @@ -6,4 +6,4 @@ uint16 IR_Sensor::GetIRIntensity() if(!parent) return 0;
return parent->GetADCValue(channel);
-}
\ No newline at end of file +}
diff --git a/source/Concept/Framework/kicker.cpp b/source/Concept/Framework/kicker.cpp index 94bd711..6670efb 100644 --- a/source/Concept/Framework/kicker.cpp +++ b/source/Concept/Framework/kicker.cpp @@ -1 +1 @@ -#include "kicker.h"
\ No newline at end of file +#include "kicker.h"
diff --git a/source/Concept/Framework/led.cpp b/source/Concept/Framework/led.cpp index a81aaf4..687b2db 100644 --- a/source/Concept/Framework/led.cpp +++ b/source/Concept/Framework/led.cpp @@ -1 +1 @@ -#include "led.h"
\ No newline at end of file +#include "led.h"
diff --git a/source/Concept/Framework/main.cpp b/source/Concept/Framework/main.cpp index d6e1d92..a3cd05c 100644 --- a/source/Concept/Framework/main.cpp +++ b/source/Concept/Framework/main.cpp @@ -13,6 +13,14 @@ int main() newEngine = NULL;
}
+ //Init Dribbler
+ for(uint8 i = IO_DRIBBLER_START; i < IO_DRIBBLER_END; i++)
+ {
+ Dribbler* newDribbler = new Dribbler(i);
+ localRobot->AddModule(newDribbler);
+ newDribbler = NULL;
+ }
+
//Init Kicker
for(uint8 i = IO_KICKER_START; i < IO_KICKER_END; i++)
{
@@ -41,6 +49,16 @@ int main() newSensor = NULL;
break;
}
+ case IO_SENSOR_DISTANCE_0_DEG:
+ case IO_SENSOR_DISTANCE_90_DEG:
+ case IO_SENSOR_DISTANCE_180_DEG:
+ case IO_SENSOR_DISTANCE_270_DEG:
+ {
+ Distance_Sensor* newSensor = new Distance_Sensor(i);
+ localRobot->AddModule(newSensor);
+ newSensor = NULL;
+ break;
+ }
//Other cases
default:
{
@@ -60,6 +78,14 @@ int main() newLed = NULL;
}
+ //Init Displays
+ for(uint8 i = IO_DISPLAY_START; i < IO_DISPLAY_END; i++)
+ {
+ Display* newDisplay = new Display(i);
+ localRobot->AddModule(newDisplay);
+ newDisplay = NULL;
+ }
+
//Run
while(true)
{
diff --git a/source/Concept/Framework/robot.cpp b/source/Concept/Framework/robot.cpp index f14f2f7..a051dd4 100644 --- a/source/Concept/Framework/robot.cpp +++ b/source/Concept/Framework/robot.cpp @@ -18,7 +18,7 @@ Robot::Robot() PORTC = 0;
//All output except PD0+1(I2C) + 2+3(RS232)
- DDRD = (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
+ DDRD = (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
PORTD = (1 << 0) | (1 << 1);//Activate pullup at PD0+1
//PE5 for input
@@ -34,12 +34,12 @@ Robot::Robot() PORTG = (1 << 0) | (1 << 1);
// activate channel A+B on PWM1 at 8Bit
- TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM10);
- TCCR1B = (1 <<ICNC1) | (1 <<CS12) | (1 <<CS10); // set clock/prescaler 1/1024 -> enable counter
+ TCCR1A = (1<< COM1A1) | (1<< COM1B1) | (1<< WGM10);
+ TCCR1B = (1<<ICNC1) | (1<<CS11); // set clock/prescaler 1/8 -> enable counter
// activate Kanal A+B on PWM3 at 8Bit
- TCCR3A = (1 << COM3A1) | (1 << COM3B1) | (1 << WGM10);
- TCCR3B = (1 <<ICNC3) | (1 <<CS32) | (1 <<CS30); // set clock/prescaler 1/1024 -> enable counter
+ TCCR3A = (1<< COM3A1) | (1<< COM3B1) | (1<< WGM10);
+ TCCR3B = (1<<ICNC3) | (1<<CS31); // set clock/prescaler 1/8 -> enable counter
//Activate interrupt
sei();
diff --git a/source/Concept/Framework/stdafx.h b/source/Concept/Framework/stdafx.h index 218b774..f48adfe 100644 --- a/source/Concept/Framework/stdafx.h +++ b/source/Concept/Framework/stdafx.h @@ -8,8 +8,10 @@ #include "atmega128io.h" #include "tools.h"
#include "io_module.h"
+#include "display.h"
#include "sensor.h"
#include "engine.h"
+#include "dribbler.h"
#include "kicker.h"
#include "led.h"
#include "distance_sensor.h"
diff --git a/source/Concept/Framework/tools.h b/source/Concept/Framework/tools.h index 2af60df..6519a1b 100644 --- a/source/Concept/Framework/tools.h +++ b/source/Concept/Framework/tools.h @@ -6,6 +6,34 @@ #ifndef new void* operator new(size_t sz); void operator delete(void* p); -#endif +#endif
+
+inline void sleep(int sec)
+{
+ for (int s=0; s<sec; s++) {
+ for (long int i=0; i<1405678; i++) {
+ asm volatile("nop");
+ }
+ }
+};
+
+inline void msleep(int msec)
+{
+ for (int s=0; s<msec; s++) {
+ for (long int i=0; i<1405; i++) {
+ asm volatile("nop");
+ }
+ }
+};
+
+inline void usleep(int usec)
+{
+ usec *= 100;
+ for (int s=0; s<usec; s++) {
+ for (long int i=0; i<1405; i++) {
+ asm volatile("nop");
+ }
+ }
+}; #endif |