/branches/test_v2.12/V2.04a/FlightCtrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</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>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/branches/test_v2.12/V2.04a/GPS.c |
---|
0,0 → 1,16 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) Holger Buss, Ingo Busker |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
unsigned char GPS_Aid_StickMultiplikator = 0; // 64 = 100% |
/branches/test_v2.12/V2.04a/Hex-Files/Flight-Ctrl_MEGA1284p_V2_04a.hex |
---|
0,0 → 1,5350 |
:100000000C94F40A0C944E0B0C944E0B0C944E0B67 |
:100010000C944E0B0C944E0B0C944E0B0C944E0BFC |
:100020000C944E0B0C94561F0C944E0B0C944E0BD0 |
:100030000C94CD390C944E0B0C944E0B0C944E0B2F |
:100040000C944E0B0C944E0B0C94791B0C944E0B91 |
:100050000C94AA110C944E0B0C9474110C944E0B2E |
:100060000C9464210C944E0B0C9415350C944E0B8F |
:100070000C94B5A20C944E0B0C94F3970C944E0B6D |
:100080000C944E0B0C944E0B0C944E0B8D21922124 |
:100090009721A021B721CE21DE21EE215C22B424BC |
:1000A000CE21782389239E23BD23DA23252471249E |
:1000B00024270828AB2824295C290C2AC62A2F2BA0 |
:1000C000AA2BDC2B482C762CA32C032D5C2DC12DC8 |
:1000D0000C2E562EBA2E3C733A74BF74DC73137513 |
:1000E00043757B730B74A8864C87D1872C887D88D9 |
:1000F000E6882A9368899C899C899C899C899C892B |
:100100009C899C899C899C89C989448AE18A068B3F |
:10011000498BA18B378C428DA58DA58DA58DA58D85 |
:10012000A58DA58DA58DA58DA58DD58DF38D188E4D |
:10013000748EB08E078F348FD48F2A932B902B9090 |
:100140002B902B902B902B902B902B90B2A0B5A0A6 |
:10015000B5A0B5A0BEA0C1A0C4A0D6A0D3A00A0DD2 |
:100160003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DBF |
:100170003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DAF |
:100180003D3D3D000A0D426174743A002025642013 |
:1001900043656C6C732000204C6F77207761726E22 |
:1001A000696E673A2025642E25645600202041752B |
:1001B000746F2D43483A2025642E25645600202074 |
:1001C0004175746F6C616E64696E673A2025642EA8 |
:1001D000256456000A0D466C69676874436F6E7437 |
:1001E000726F6C206E6F7420737570706F727465AF |
:1001F0006421000A0D466F756E6420424C2D4374D5 |
:10020000726C3A20002564000A0D0A0D2121204D50 |
:10021000495353494E4720424C2D4354524C3A20A7 |
:100220002564202121000A0D43616C6962726174AA |
:10023000696E672070726573737572652073656E81 |
:10024000736F722E2E004F4B0A0D000A0D466C691B |
:100250006768742D74696D65202575206D696E2041 |
:10026000546F74616C3A2575206D696E00416E673C |
:100270006C654E69636B20202020202020416E6732 |
:100280006C65526F6C6C202020202020204163631D |
:100290004E69636B202020202020202020416363B2 |
:1002A000526F6C6C20202020202020202059617764 |
:1002B0004779726F202020202020202020416C745C |
:1002C0006974756465205B302E316D5D2041636318 |
:1002D0005A20202020202020202020202047617329 |
:1002E00020202020202020202020202020436F6D4F |
:1002F000706173732056616C7565202020566F6C99 |
:1003000074616765205B302E31565D202052656335 |
:100310006569766572204C6576656C202047797238 |
:100320006F20436F6D70617373202020204D6F74B8 |
:100330006F7220312020202020202020204D6F743B |
:100340006F7220322020202020202020204D6F742A |
:100350006F7220332020202020202020204D6F7419 |
:100360006F722034202020202020202020313620B1 |
:100370002020202020202020202020202031372055 |
:100380002020202020202020202020202031382044 |
:100390002020202020202020202020202031392033 |
:1003A0002020202020202020202020202053657283 |
:1003B000766F2020202020202020202020486F76CB |
:1003C00065726761732020202020202020437572F1 |
:1003D00072656E74205B302E31415D202043617068 |
:1003E0006163697479205B6D41685D2020486569AF |
:1003F00067687420536574706F696E74203235209D |
:1004000020202020202020202020202020323620C4 |
:1004100020202020202020202020202020436F6D1D |
:100420007061737320536574706F696E74493243E1 |
:100430002D4572726F7220202020202020424C20F7 |
:100440004C696D69742020202020202020475053C3 |
:100450005F4E69636B2020202020202020475053CE |
:100460005F526F6C6C202020202020202021212131 |
:1004700020494E434F4D50415449424C4520212183 |
:1004800021002E005B25695D005B25695D002B2046 |
:100490004D696B726F4B6F70746572202B004857FB |
:1004A0003A5625642E25642053573A25642E25306C |
:1004B00032642563200053657474696E673A25645D |
:1004C000202573004D69786572204572726F722124 |
:1004D000004552522532643A004861726477617275 |
:1004E00065204572726F7220313A25642021210007 |
:1004F0004D697373696E6720424C2D4374726C3A78 |
:10050000256420212100493243204552524F522177 |
:10051000212100424C2D53656C667465737420452F |
:1005200072723A253264004865696768743A20201F |
:1005300025356900536574706F696E743A253569A5 |
:100540000050726573737572653A253569004F66A0 |
:10055000667365743A2020253569002841290025F5 |
:1005600069006163742E2062656172696E67004E76 |
:1005700069636B3A20202020202025356900526FC6 |
:100580006C6C3A20202020202025356900436F6DB7 |
:10059000706173733A202020253569004B25693A34 |
:1005A00025346920204B25693A25346920004E699D |
:1005B0003A2534692020526F3A2534692000477368 |
:1005C0003A253469202047693A25346920005031A2 |
:1005D0003A253469202050323A25346920005033BE |
:1005E0003A253469202050343A253469200047796F |
:1005F000726F202D2053656E736F72004E69636BAE |
:100600002025346920282533692E25782900526F4A |
:100610006C6C2025346920282533692E2578290023 |
:100620005961772020253469202825336929004124 |
:100630004343202D2053656E736F72004E69636BC8 |
:100640002025346920282533692900526F6C6C20DD |
:10065000253469202825336929005A2020202025A7 |
:10066000346920282533692900566F6C74616765E9 |
:100670003A2020202533692E2531695600437572B2 |
:1006800072656E743A2020202533692E2531694128 |
:1006900000506F7765723A2020202020253469575A |
:1006A000004469736368617267653A202535696D36 |
:1006B00041680052656365697665720052432D5149 |
:1006C00075616C6974793A202534690052432D4371 |
:1006D00068616E6E656C733A25346900556E6465A9 |
:1006E00072766F6C74616765732020005761726E5B |
:1006F0003A202532642E25645600486F6D653A20F5 |
:100700002532642E256456004C616E643A202532F1 |
:10071000642E25645600506F746925693A2020259F |
:10072000336900506F746925693A202025336900C8 |
:10073000466C696768742D54696D65202000546F9C |
:1007400074616C3A2535756D696E004163743A20A9 |
:10075000202535756D696E002872657365742900F2 |
:10076000436F6D70617373004D61676E65743A20FD |
:100770002020253569004779726F3A2020202020FB |
:1007800025356900536574706F696E743A2025359C |
:100790006900536572766F202000536574706F692D |
:1007A0006E74202025336900506F736974696F6E11 |
:1007B0003A202533690052616E67653A2533692D09 |
:1007C00025336900424C2D4374726C204572726F60 |
:1007D0007273200025336420253364202533642080 |
:1007E0002533642000424C2054656D70657261743D |
:1007F0007572650025336420253364202533642019 |
:100800002533642000424C2043757272656E74007B |
:1008100028696E20302E314129002533642025338C |
:100820006420253364202533642000424C2D43741A |
:10083000726C20666F756E64200020256320202076 |
:1008400025632020202563202020256320002025EB |
:10085000632020202563202020256320202025637D |
:1008600020002025632020202D2020202D20202046 |
:100870002D20003130003131003132000A0D2D2D94 |
:100880003E204861726477617265205665727369B3 |
:100890006F6E2042797465204368616E67656420DD |
:1008A0003C2D2D000A0D47656E65726174696E6797 |
:1008B0002064656661756C7420506172616D657449 |
:1008C000657220536574202564000A0D5573696EA6 |
:1008D0006720506172616D65746572205365742084 |
:1008E0002564000A0D47656E65726174696E672044 |
:1008F00064656661756C74204D6978657220546119 |
:10090000626C65000A0D4D697865722D436F6E66E5 |
:1009100069673A202725732720282575204D6F7495 |
:100920006F727329000A0D414343206E6F74206378 |
:10093000616C69627261746564210D0A0000008F48 |
:10094000001E01AD013B02CA025803E60374040213 |
:10095000058F051B06A7063307BE074808D2085BAC |
:1009600009E3096B0AF20A780BFD0B810C040D8672 |
:100970000D070E870E060F840F00107B10F5106E0A |
:1009800011E5115B12CF124213B31323149214FE1C |
:10099000146A15D3153B16A11605176717C8172734 |
:1009A000188318DE1837198E19E319361A871AD6E4 |
:1009B0001A231B6E1BB61BFD1B411C831CC31C0092 |
:1009C0001D3C1D751DAB1DE01D121E421E6F1E9AA3 |
:1009D0001EC31EE91E0D1F2E1F4D1F691F841F9B66 |
:1009E0001FB01FC31FD31FE11FEC1FF51FFB1FFF0D |
:1009F0001F002006010000A97A00020101EF7B011F |
:100A0000030202837C02040303427F030507072BD2 |
:100A10007D04060808567D05000606E07C040707ED |
:100A200007817D05080808597E2532692E25316920 |
:100A30005600253364256320253033646D2563001B |
:100A4000537461747573004552524F523A202532E7 |
:100A500064200053657425643A25732020002534F2 |
:100A600069202532693A25303269002534696D25BF |
:100A70006300253369202533692025336920253318 |
:100A80006900253369202533692025336920253302 |
:100A9000690054656D7065726174757265732020AC |
:100AA0002020002563432020202020002532692EAD |
:100AB00025316956202533692E25316941002534B9 |
:100AC0006957202536696D4168004D61676E657410 |
:100AD0003A253369252520253369256300496E634E |
:100AE0006C692E3A25336925632028256929200061 |
:100AF0004C6F616420576179706F696E7473002860 |
:100B0000466978656429202020202020004C6F61F0 |
:100B10006420576179706F696E7473002852656C38 |
:100B20006174697665292020200046495820576164 |
:100B300079706F696E7473004649583A2573006E78 |
:100B40006F2053442D436172640023253264205783 |
:100B5000503A002532642F256420002D2D2F2D2D95 |
:100B6000002D3E0020200052656C6174697665207E |
:100B7000575073200052656C3A2573006E6F2053F6 |
:100B8000442D43617264006E6F204750532D4669B7 |
:100B9000780023253264205750733A002532642FA1 |
:100BA000256420002D2D2F2D2D002D3E002020000E |
:100BB0002532756D2F73205361743A25642000200F |
:100BC000203344004E6F4678004447505300486F2E |
:100BD0006D653A2533646D202533642563202563D4 |
:100BE000004E6F204E6176694374726C21000000E4 |
:100BF00005000500040106010800060102000400CA |
:100C000004000700070007000700070007000700AF |
:100C100003010301050017010F01060009010A0184 |
:100C200019010501050119011A010F01010009004F |
:100C3000060006004E6F204572726F722020202041 |
:100C400020202020004E6F7420636F6D70617469E6 |
:100C5000626C652020004D4B334D6167206E6F74D0 |
:100C600020636F6D7061004E6F20464320636F6D8F |
:100C70006D756E6963617400436F6D70617373208D |
:100C8000636F6D6D756E69630047505320636F6DC0 |
:100C90006D756E69636174696F00636F6D70617308 |
:100CA000732076616C7565202020005243205369C3 |
:100CB000676E616C206C6F73742020004643207354 |
:100CC0007069207278206572726F7220004E6F20FA |
:100CD0004E4320636F6D6D756E69636174004643AA |
:100CE000204E69636B204779726F202020200046D8 |
:100CF0004320526F6C6C204779726F2020202000B7 |
:100D0000464320596177204779726F2020202020A8 |
:100D1000004643204E69636B20414343202020203E |
:100D20002000464320526F6C6C204143432020201A |
:100D30002020004643205A2D4143432020202020DC |
:100D40002020200050726573737572652073656E84 |
:100D5000736F7220004932432046432D3E424C2D92 |
:100D60004374726C2000426C204D697373696E6726 |
:100D7000202020202020004D697865722045727265 |
:100D80006F722020202020004361726566726565C5 |
:100D9000204572726F7220200047505320466978B8 |
:100DA000206C6F737420202020004D61676E657485 |
:100DB000204572726F7220202020004D6F746F7278 |
:100DC000207265737461727420202000424C204CA4 |
:100DD000696D69746174696F6E20202000475053FB |
:100DE0002052616E676520202020202020004E6F59 |
:100DF0002053442D43617264202020202020005382 |
:100E0000442D4C6F6767696E67206572726F720060 |
:100E1000466C79696E672072616E676521202020BB |
:100E2000004D617820416C746974756465212020DF |
:100E300020004E6F204750532066697820202020E4 |
:100E4000202000636F6D70617373206E6F74206378 |
:100E5000616C2E00424C2D53656C66746573742072 |
:100E600020202020006E6F206578742E20636F6D27 |
:100E7000706173732000636F6D70617373207365AD |
:100E80006E736F7220200053657420203A00202179 |
:100E9000212020204C414E44494E47202020202133 |
:100EA00021202000202121204C69506F20766F6C7A |
:100EB0007461676520212120200020202020204D02 |
:100EC000696B726F4B6F7074657220202020200058 |
:100ED0002020202020202020202020202020202012 |
:100EE00020202020200020202532692E253169561F |
:100EF00020200020202532692E253169562020002F |
:100F0000414C543A2534696D20256300414C543AD4 |
:100F10002534696D202000414C543A2D2D2D2D2073 |
:100F20000020202532693A25303269202000202017 |
:100F30002532693A253032692020004449523A204E |
:100F400025336425630043002000202025356920D7 |
:100F500020002020253569202000493A2532692EBD |
:100F60002531694120003A003A003A002D2D2D2DFF |
:100F70002D2D2D2D2D2B2D2D2D2D2D2D2D2D2D2DA3 |
:100F80002D002D2D2D2D2D2D2D2D2D2D2D2D2D2DBE |
:100F90002D2D2D2D2D2D2D003A005341543A253263 |
:100FA000642000444953543A2533646D00442000C2 |
:100FB0003344002121004D41473A25337525252032 |
:100FC00000484D3A253364256320256300696E632C |
:100FD0006C3A2532642563282532692900202020B7 |
:100FE000202532756D2F733A2020484D3A25336401 |
:100FF0002563202563004552523A20253264202182 |
:10100000004552523A20002121204C69506F207631 |
:101010006F6C7461676520212100207777772E4DF2 |
:10102000696B726F4B6F707465722E64652020005F |
:10103000202532693A2530326920202532692E2553 |
:10104000316956202534696D416800202532693A9E |
:101050002530326920202532692E25316956202518 |
:1010600034696D4168004449523A25336425630070 |
:10107000414C543A2534696D00414C543A25346949 |
:101080006D00414C543A2D2D2D2D20002563004834 |
:101090004D3A25336425632020444953543A25337F |
:1010A000646D202563005057523A2532692E253150 |
:1010B0006941202825695729200043460020200047 |
:1010C0004750533A2532756D2F73205341543A25BA |
:1010D0006420002020334420004E4F4649580044ED |
:1010E00047505320002020204E6F204E61766943E8 |
:1010F00074726C20202020202020002532692E25AB |
:1011000069202532692E2569202532692E2569201E |
:101110002532692E25694100253369202533692050 |
:1011200025336920253369256343002532692E253F |
:1011300069202532692E256941002532692E2569ED |
:10114000202532692E2569202532692E2569202522 |
:1011500032692E25694100253369202533692563CD |
:101160004320202020202020200025336920253303 |
:101170006920253369202533692563430045525290 |
:101180003A202532642021004552523A2000212184 |
:10119000204C69506F20766F6C7461676520212147 |
:1011A00000207777772E4D696B726F4B6F70746587 |
:1011B000722E646520200053657474696E673A2549 |
:1011C0007520257320004D696E3A2532692E253130 |
:1011D00069562025732000414C543A00504F544921 |
:1011E0003A2533752000284F4E29202000284F46ED |
:1011F000462920004C494D495400564152494F0060 |
:1012000044495341424C45440043463A0044495303 |
:1012100041424C45440020284F4E29200020284FB1 |
:1012200046462900205445414348004750533A0060 |
:1012300044495341424C4544002846524545290003 |
:1012400028484F4D45290028414944292000284875 |
:101250004F4C4429002046533A257573656B200096 |
:10126000484F4D4520414C543A0025756D00484F7C |
:101270004C4420004E693A25346920526F3A253497 |
:101280006920433A2533690047733A253469205968 |
:10129000613A253469200050313A253469205032B2 |
:1012A0003A25346920333A2533690050343A2534DD |
:1012B000692050353A25346920363A253369004390 |
:1012C0004F55504C494E47204F46462120004C4F29 |
:1012D0004F50494E472120004848212000434F4DA0 |
:1012E00050415353204F46462120004C6F616420EB |
:1012F000576179706F696E7473002852656C617400 |
:1013000069766520506F736974696F6E7329004147 |
:1013100063746976652057503A2532642F2564201E |
:10132000004E6F20575073206163746976652020EA |
:10133000202020002532692E253169562000257392 |
:101340000020202000253269202020004C6F61649D |
:10135000206C6973743A004C6F6164206C6973741B |
:101360003A202D2D20004E6F2053442D436172648E |
:101370002020200028536574202D3E204C6F61648E |
:101380002900202020202020202020202020200094 |
:10139000214E6F204750532D4669782120004C6F15 |
:1013A000616420576179706F696E747300284669B3 |
:1013B00078656420506F736974696F6E732900419A |
:1013C00063746976652057503A2532642F2564206E |
:1013D000004E6F205750732061637469766520203A |
:1013E0002020002532692E25316956200025730002 |
:1013F00020202000253264202846495829004C6FBF |
:101400006164206C6973743A004C6F6164206C698C |
:1014100073743A202D2D20004E6F2053442D4361CC |
:1014200072642020200028536574202D3E204C6FCC |
:10143000616429002020202020202020202020203E |
:101440002000004F5051525354535657480058599A |
:10145000005A5545464748410049424A4A00000063 |
:101460000000000000000000444C4D00000000009F |
:101470004E0000004B00430A0D7777772E4D696BC5 |
:10148000726F4B6F707465722E646520286329201B |
:10149000486953797374656D7320476D6248000A1B |
:1014A0000D74686520757365206F662074686973B4 |
:1014B00020736F667477617265206973206F6E6C3C |
:1014C00079207065726D6974746564200A0D6F6EA1 |
:1014D000206F726967696E616C204D696B726F4B2A |
:1014E0006F707465722D4861726477617265005522 |
:1014F00073657200486F54542056340041435420A1 |
:1015000044534C004A657469005370656B7472757E |
:101510006D0050504D000A0D526563656976657225 |
:101520003A2000532E42757300756E6B6E6F776EA6 |
:101530002E205573696E672050504D2E2E2E006E52 |
:101540006F7420737570706F727465642062792097 |
:10155000686172647761726521000A0D202D204C4C |
:101560004942204E4F5420434F4D50415449424C24 |
:10157000452021212121000A0D0A0D212120426F41 |
:101580006F746C6F61646572206E6F7420636F6D31 |
:1015900070617469626C6520746F20486172647751 |
:1015A000617265203E20322E322021210A0D0A0D63 |
:1015B000000A0D466C69676874436F6E74726F6CD5 |
:1015C0000A0D48617264776172653A25642E25645C |
:1015D0000A0D536F6674776172653A5625642E253D |
:1015E000303264256320000011241FBECFEFD0E409 |
:1015F000DEBFCDBF12E0A0E0B1E0ECE4FCE401E02E |
:101600000BBF02C007900D92AC3EB107D9F71DE0A9 |
:10161000ACEEB2E001C01D92A232B107E1F77AEA66 |
:10162000E2E0F0E081E280935700149120EF37EF81 |
:1016300041E050E0CDEAD5E06FE0DA01C9012F5F6B |
:101640003F4F4F4F5F4FABBFFC0187918993615074 |
:1016500067FFF3CF84EE8ABD8091B5058093810545 |
:10166000893138F086E08093140187E0809313017C |
:101670007BEAEDEAF5E06EE08191782770956150A4 |
:1016800067FFFACF8091BC05781721F0173911F464 |
:101690000000FECF0E94830C0C9425A60C94000041 |
:1016A0008EE591E09F938F938CE898E19F938F93C1 |
:1016B000E091C005F091C10509950F900F900F9032 |
:1016C0000F90089580916508E82FFF27EE0FFF1F08 |
:1016D000E752F64F808191818D5E9F4F14F01092FA |
:1016E0000401808191818A5B9F4FCCF48091040139 |
:1016F0008823A9F481E0809304018091F4058F5F31 |
:101700008093F405853038F088EE93E090932703BA |
:1017100080932603089566E970E00E94FB3C0895DB |
:10172000CF93DF93C82F882311F184E891E09F9332 |
:101730008F938CE898E19F938F93E091C005F0918F |
:10174000C105099580912601909127016BE270E017 |
:101750000E9498A5CB018F5F809300010F900F909E |
:101760000F900F90873018F086E0809300018091F1 |
:101770008808823328F590910001989F802D1124CC |
:1017800080930201CC23F1F068EC70E0892F0E9475 |
:10179000FB3C8091000199279F938F938CE891E007 |
:1017A0009F938F938CE898E19F938F93E091C0056E |
:1017B000F091C10509958DB79EB706968DBF02C001 |
:1017C000809302019091D308923340F480910001FC |
:1017D000899F802D11248093F60202C09093F60217 |
:1017E0003091D408323340F480910001839F802DE2 |
:1017F00011248093F50202C03093F5028091F60225 |
:1018000090910201981720F491509093F6029F5FF7 |
:101810008091F502891720F091509093F5029F5F17 |
:101820008091F6022091F502821728F0332319F0F7 |
:1018300021502093F602CC2309F462C0892F6AE07C |
:101840000E9478A5892F99279F938F9380910201F9 |
:101850000E9478A599279F938F9387E991E09F93A2 |
:101860008F93CCE8D8E1DF93CF93E091C005F0915E |
:10187000C10509958DB79EB708968DBF8091F50279 |
:101880008823E9F06AE00E9478A5892F99279F9321 |
:101890008F938091F5020E9478A599279F938F934B |
:1018A0008CEA91E09F938F93DF93CF93E091C005F3 |
:1018B000F091C10509958DB79EB708968DBF8091AF |
:1018C000F6028823E9F06AE00E9478A5892F99271B |
:1018D0009F938F938091F6020E9478A599279F93FA |
:1018E0008F938EEB91E09F938F93DF93CF93E09153 |
:1018F000C005F091C10509958DB79EB708968DBFBB |
:10190000DF91CF910895CFEFD0E4DEBFCDBF882423 |
:101910009924C1E07C2E14B815B88AE08AB98FE505 |
:101920008BB9B7EECB2EB3E0DB2E2EEC3FEFC20E21 |
:10193000D31ED7FEFACF6624199B08C04C9B04C067 |
:1019400085E18093030108C086E101C089E18093AD |
:10195000030181E08093150481E887B93E9A8FEFF7 |
:1019600088B98BE184B981E085B9469A84B7877FCD |
:1019700084BF809160008861809360001092600055 |
:1019800084EC99E0909327038093260310926304DC |
:10199000109262041092DE091092DD091092650423 |
:1019A000109264041092670410926604209103015F |
:1019B000243128F084EC94E0A0E0B0E004C08BE097 |
:1019C00095E0A0E0B0E08093430190934401A093A0 |
:1019D0004501B09346012898293111F4299A01C094 |
:1019E00029980E94CA1C0E949B1C0E9494180E9465 |
:1019F00094390E94862081E00E94C9340E94E271DD |
:101A00000E94408086E00E942AA1809103018931D2 |
:101A100011F4299A01C0299878940E94B0338091DA |
:101A200003018431E8F488E190E02CE00FB6F894EB |
:101A3000A895809360000FBE2093600084ED91E034 |
:101A40009F938F938CE898E19F938F93E091C005CB |
:101A5000F091C10509950F900F900F900F90EECF68 |
:101A600080917503826080937503109278030E94C1 |
:101A7000CE4884EF91E00E94611C6C018091750357 |
:101A800080FD05C0C6010E946A1C8823B9F383EF5C |
:101A900091E09F938F93ACE8AA2EA8E1BA2EBF9253 |
:101AA000AF92E091C005F091C105099580EA9FE0F1 |
:101AB0000E94611C6C01C0E0D0E00F900F900F906D |
:101AC0000F900BE719E0F3EFEF2EF8E0FF2E0E94E6 |
:101AD000CE488091750380FD05C0C6010E946A1C36 |
:101AE0008823B9F3F70180811816ACF40BC00E946B |
:101AF000CE488091750380FD05C0C6010E946A1C16 |
:101B00008823B9F3C6010E946A1C882321F4F801D6 |
:101B10008081882364F7F801808187FF19C02196AE |
:101B2000DF93CF93219785E092E09F938F93BF92AD |
:101B3000AF92E091C005F091C10509958091EE0248 |
:101B40008F5F8093EE022DB73EB72A5F3F4F2DBFC8 |
:101B5000219684E090E0E80EF91E085F1F4FCC301C |
:101B6000D10508F4B4CFC0E0D0E008E719E0E3EF16 |
:101B7000EE2EE8E0FE2EF801838187FD1DC0F701FF |
:101B800080811816CCF42196DF93CF93219788E0BB |
:101B900092E09F938F938CE898E19F938F93E091CD |
:101BA000C005F091C105099582E0809324032DB70B |
:101BB0003EB72A5F3F4F2DBFF80183818078838332 |
:101BC000219624E030E0E20EF31E085F1F4FCC3078 |
:101BD000D10588F20E94500B909163088091EE022B |
:101BE000981728F48091DA0580618093DA0599309E |
:101BF00020F088E080933E0102C090933E0186E28F |
:101C000092E09F938F93CCE8D8E1DF93CF93E0915C |
:101C1000C005F091C105099588EE93E00E94611C12 |
:101C20006C010E94C4200F900F900F900F90C6017E |
:101C30000E946A1C8823D9F386E492E09F938F93D5 |
:101C4000DF93CF93E091C005F091C105099580E045 |
:101C50000E94D53D289880ED97E0909327038093CC |
:101C6000260385E58093F6058EE090E00E94D03152 |
:101C70009927182F00278FE090E00E94D031080F9D |
:101C8000111D1093F4020093F3028AE090E00E9489 |
:101C9000D0319927182F00278BE090E00E94D03197 |
:101CA000080F111D1093F2020093F1020F900F9094 |
:101CB0000F900F900F5F1F4F39F08091F3029091BA |
:101CC000F4028F5F9F4F41F41092F4021092F302DE |
:101CD0001092F2021092F1028091F1029091F202C0 |
:101CE0009F938F938091F3029091F4029F938F932F |
:101CF0008BE492E09F938F93DF93CF93E091C005A5 |
:101D0000F091C10509950E949C2688E893E1909383 |
:101D10003D0180933C01C1E0C093F5058C2F0E94EA |
:101D2000900B80918B080E9476A00E94500B80ED52 |
:101D300097E00E94611C6C018AEF90E00E94611C98 |
:101D400083E08093BD071092ED028091D7082DB7F4 |
:101D50003EB7285F3F4F2DBF84FF02C0C093F702FC |
:101D600012BC11BC8091F902882311F04798FECF74 |
:101D700080912A03882309F4A6C280911801882340 |
:101D800009F4A1C2F89480912A03815080932A0318 |
:101D900078948091F405882319F00E94620B02C0A8 |
:101DA0000E94944C0E94CE48289880915604882323 |
:101DB00031F0809156048150809356040EC080917A |
:101DC0006F00806280936F001092DA091092D90937 |
:101DD0008091DA0588608093DA0580913C019091CA |
:101DE0003D01019790933D0180933C0180913C011E |
:101DF00090913D01892B21F0809176038823C9F1D0 |
:101E000080913C0190913D01892BD9F40E94F334DB |
:101E100085E090E090933D0180933C018091F7072D |
:101E20009091F80701969093F8078093F7078091B7 |
:101E3000DA0581608093DA058091BE078260809325 |
:101E4000BE0780910B0190910C018F5F9F4F91F421 |
:101E500080915504882371F088EA91E690932703D6 |
:101E60008093260380E890E090930C0180930B010F |
:101E700001C028980E9428A280912A03882309F093 |
:101E800020C280917C05882319F00E94AA9319C270 |
:101E900080912503882311F40E940372809111011F |
:101EA000882311F00E94241D0E94DE180E94FF1357 |
:101EB000C6010E946A1C882309F4FFC184E190E0F6 |
:101EC000C80ED91E0E94E21C80918B08863019F43E |
:101ED0000E94548604C0843011F40E947A94809148 |
:101EE0001504882331F180910408909105088C52E3 |
:101EF000914074F08091CD079091CE078050924030 |
:101F0000C4F48091040890910508835593408CF0A7 |
:101F1000639432E3361570F480915504882331F0D0 |
:101F20008091D90580628093D90504C080934104D3 |
:101F300001C0662480917603882329F48091520B96 |
:101F40008E3150F405C08091DA0582608093DA0505 |
:101F50008091BE0782600FC0809126039091270375 |
:101F6000892B59F480913C0190913D01079728F00D |
:101F70008091BE078D7F8093BE078091F7028823F2 |
:101F800061F080915604873940F01092F70288E89A |
:101F900093E1909327038093260380910601882381 |
:101FA00021F08150809306012EC08093000610928C |
:101FB00029041092280410922704109226041092EB |
:101FC000250410922404809156048823E1F4809122 |
:101FD0000B0190910C018F5F9F4FA9F42091F702A4 |
:101FE000223089F088E99AE39093270380932603AF |
:101FF00080E09CE090930C0180930B01222319F068 |
:1020000082E08093F7028091A501893C70F08150B5 |
:102010008093A5018091DA058B7F8093DA0580910A |
:10202000DD0581608093DD0551C08091DF0A882342 |
:10203000F9F08091DA0584608093DA0589E0809375 |
:10204000370580910B0190910C018F5F9F4F81F4B8 |
:1020500080915504882361F088E99AE390932703DF |
:102060008093260380E098EA90930C0180930B0103 |
:102070001092290510922805109227051092260526 |
:10208000109225051092D20A8FEF8093470B109281 |
:10209000110B1092100B1092130B1092120B8FEF6A |
:1020A0009FEF90930F0B80930E0B109245041092AC |
:1020B00046041092470410924804109249048091FB |
:1020C000DD058E7F8093DD051092A50160910201F0 |
:1020D000262F332780912601909127012817390751 |
:1020E000F4F080911D04806280931D0480910B01A7 |
:1020F00090910C018F5F9F4F91F4809126019091F8 |
:1021000027010B9764F080E797E190932703809372 |
:10211000260380E093E090930C0180930B0112BCA6 |
:1021200011BC8091F8028F5F8093F802813309F02F |
:102130007BC01092F80280916205882319F08150CB |
:102140008093620580911D0481FF0AC08091EF0297 |
:102150009091F00201969093F0028093EF0204C0F8 |
:102160005AEA852E55E0952E80911E0490911F0409 |
:102170008050944008F049C020910608309107082B |
:10218000409108085091090880911E0190911F010B |
:10219000A0912001B0912101281739074A075B0758 |
:1021A00064F48091060890910708A0910808B09106 |
:1021B00009080596A11DB11D20C020910608309187 |
:1021C0000708409108085091090880911E019091DC |
:1021D0001F01A0912001B091210182179307A4074C |
:1021E000B5079CF48091060890910708A091080813 |
:1021F000B09109080597A109B10980930608909349 |
:102200000708A0930808B0930908862F992701961C |
:102210002091260130912701821793072CF4809199 |
:102220001D048F7D80931D040894811C911C82E7FE |
:1022300088168BE0980609F040C0882499242091E4 |
:10224000F3023091F4022F5F3F4F3093F40220935A |
:10225000F3028091F1029091F20201969093F202C2 |
:102260008093F102832F9927682F8EE090E00E94DF |
:10227000D8318091F3029091F4029070682F8FE032 |
:1022800090E00E94D8318091F1029091F202892F62 |
:102290009927682F8AE090E00E94D8318091F1025E |
:1022A0009091F2029070682F8BE090E00E94D831FC |
:1022B00084E190E00E94611C6C010E943E770E94C4 |
:1022C000788071107A94772039F40E9402778823FD |
:1022D00019F08CE0782E46CD80912503882309F0F3 |
:1022E00041CD0E9403723ECD1F920F920FB60F9206 |
:1022F00011248F939F93EF93FF938091080188237C |
:10230000E1F48091130390911403019690931403C8 |
:1023100080931303FC01EF51F94FE081ED3019F088 |
:102320008C3D910539F4109214031092130381E04F |
:1023300080930801E093C60004C010921403109229 |
:102340001303FF91EF919F918F910F900FBE0F900C |
:102350001F9018951F920F920FB60F9211242F9372 |
:102360003F934F935F936F937F938F939F93AF931D |
:10237000BF93CF93EF93FF9390E08091F902813068 |
:1023800029F48091C6008093CE00D1C08091F902DB |
:10239000823029F48091C60080930306C8C08091E2 |
:1023A000C60080930B03509119035C3D10F090938D |
:1023B0001A0380910B038D3009F06AC080911A03D3 |
:1023C000823009F065C090931A03852F99278D5F9D |
:1023D000994FFC01329740812091150330911603EB |
:1023E000241B3109DC0111978C91281B3109C9018B |
:1023F0009F70909316038093150346E096958795FA |
:102400004A95E1F7982F935C909317032F733070E0 |
:10241000235C209318038081981729F48C91281746 |
:1024200011F491E006C090E0809108038F5F8093E3 |
:10243000080380910A03882309F079C0992309F4DD |
:1024400076C081E080930A03580F509307035150E0 |
:10245000E52FFF27ED5FF94F8DE080838091050622 |
:10246000823509F064C0C0915504CC2309F05FC0E7 |
:102470000E949C2688E190E02CE00FB6F894A89585 |
:10248000809360000FBE20936000C09324034FC070 |
:1024900020911A03822F992781309105F9F082301B |
:1024A00091051CF4892B21F040C0029711F13DC029 |
:1024B00080910B03833239F480910A03882319F445 |
:1024C00081E080931A0380910B038093030681E0DF |
:1024D0008093190380910B03992722C02F5F2093CB |
:1024E0001A03E52FFF27ED5FF94F80910B038083DF |
:1024F00009C0E52FFF27ED5FF94F80910B03808323 |
:102500005C3D20F45F5F5093190302C010921A03E0 |
:1025100020910B038091150390911603820F911D5A |
:10252000909316038093150302C010921A03FF9133 |
:10253000EF91CF91BF91AF919F918F917F916F91CB |
:102540005F914F913F912F910F900FBE0F901F9071 |
:102550001895AC01A0E0B0E09D01A817B90748F4B8 |
:10256000E1EEF6E08191280F311D1196A417B50711 |
:10257000C8F33F70FD01EF51F94FC90156E0969540 |
:1025800087955A95E1F7835C80831196FD01EF51A1 |
:10259000F94F2F733070822F835C8083AE51B94F17 |
:1025A0008DE08C93109208018091E1068093C60023 |
:1025B0000895A0E0B0E0EFEDF2E10C94F1A52C85D8 |
:1025C0009D850E85BB2483E28093E1069F599093FD |
:1025D000E2062093E30633E0E32EF12C002309F416 |
:1025E0009EC0CF84D888BE016D5E7F4FA989BA890D |
:1025F0000150109709F493C01097B9F0F601EB0D54 |
:10260000F11DB3949081119791F4002349F1FB01DE |
:102610006E5F7F4FDB01C080D1806E5F7F4F0D907A |
:10262000BC91A02DBB24015002C090E019C01097AE |
:10263000B9F0F601EB0DF11DB3944081119791F4BF |
:10264000002341F1FB016E5F7F4FDB01C080D18031 |
:102650006E5F7F4F0D90BC91A02DBB24015002C036 |
:1026600040E018C01097B1F0F601EB0DF11DB394E6 |
:102670001081119781F4002371F0FB013296DB0188 |
:10268000CD90DC90BF016E5F7F4FA081B181BB24F4 |
:10269000015001C010E0F701EF51F94F892F8695E5 |
:1026A0008695835C80830894E11CF11CF701EF514F |
:1026B000F94F892F99278370907024E0880F991F14 |
:1026C0002A95E1F755279A0194E0369527959A9532 |
:1026D000E1F7822B835C80830894E11CF11CF701F5 |
:1026E000EF51F94F4F705070440F551F440F551F55 |
:1026F000812F992726E0969587952A95E1F7842BD7 |
:10270000835C80830894E11CF11CF701EF51F94FC1 |
:102710001F73135C10830894E11CF11C6ACFC7017E |
:102720000E94A912E9E00C940DA6A3E07A2F409133 |
:1027300007034650442309F458C0E72FFF27ED5FF5 |
:10274000F94F80818D537F5FE72FFF27ED5FF94FB2 |
:1027500020812D537F5FE72FFF27ED5FF94F3081F9 |
:102760003D537F5FE72FFF27ED5FF94F60816D538A |
:102770007F5F9927880F991F880F991F522F5295B5 |
:102780005F70582B822F99278F709070F4E0880F1C |
:10279000991FFA95E1F7232F26952695282B832F4D |
:1027A000992783709070E6E0880F991FEA95E1F70A |
:1027B000682B41504F3FC9F0EA2FFF27ED5FF94FDB |
:1027C0005083AF5F41504F3F81F0EA2FFF27ED5F0D |
:1027D000F94F2083AF5F41504F3F39F0EA2FFF2779 |
:1027E000ED5FF94F6083AF5FA5CF86E096E09093F1 |
:1027F000060380930503A350A09304030895A2E069 |
:10280000B0E0E5E0F4E10C94F7A580910A03882399 |
:1028100009F47EC40E94951380910406823609F063 |
:10282000E4C28091050699278037910509F4AFC06D |
:1028300081379105C4F48A36910509F441C28B367B |
:10284000910544F48B34910571F18636910509F4B4 |
:102850006AC1CBC28D36910509F469C08E369105E7 |
:1028600009F44DC0C2C28437910541F18537910505 |
:102870004CF48137910509F491C08337910509F42F |
:10288000EAC0B3C28737910509F4DCC188379105E6 |
:102890002CF48537910509F498C1A7C289379105B1 |
:1028A00009F47DC1A2C2E0910503F0910603808185 |
:1028B0009181909392018093910197C28091070337 |
:1028C000A0910503B0910603853140F080E1EEED63 |
:1028D000F5E00D9001928A95E1F70DC08D919D91E3 |
:1028E0000D90BC91A02D8093DE059093DF05A09301 |
:1028F000E005B093E10580EF809302034BC0809127 |
:1029000008018823E1F38DE490E09F938F9386EE96 |
:1029100098E09F938F9381E08F938F938EE48F93B2 |
:102920000E94D9128DB79EB707968DBF5EC2A09147 |
:102930000503B09106031C91113081F48DE4E6EE9D |
:10294000F8E00D9001928A95E1F70E94EB3219832D |
:102950008091DA058F7E8093DA0501C0198280911B |
:1029600008018823E1F381E090E09F938F93CE01EB |
:1029700001969F938F9381E08F938F938DE48F9334 |
:102980000E94D912ADB7BEB71796ADBF2EC281E077 |
:1029900080930D038FEF8093060127C28091550429 |
:1029A0008823E1F5E0910503F0910603E0818E2F85 |
:1029B0008A508A3058F48983882311F481E003C057 |
:1029C000863010F085E0898361E00EC08E2F84513F |
:1029D0008A3070F48983882311F481E003C0863043 |
:1029E00010F085E0898360E089810E946D3312C018 |
:1029F000E983EF3F19F40E944E338983898188234C |
:102A000011F481E003C0863010F085E0898389816C |
:102A10000E94EE3180E00E94900B03C00E944E3372 |
:102A20008983809108018823E1F381E890E09F93F6 |
:102A30008F9384E698E09F938F9381E090E09F933B |
:102A40008F93CE0101969F938F9382E08F9381E0C5 |
:102A50008F9381E52DC12091050330910603D901A3 |
:102A60008C918150853008F045C0F9018181823612 |
:102A700009F040C0809155048823E1F52F5F3F4F56 |
:102A800081E8E4E6F8E0D9010D9001928A95E1F73A |
:102A9000F90182910E945B328091A5089927AA27AB |
:102AA000BB27BC01CD0124EC39E040E050E00E949E |
:102AB00059A5DC01CB018093890190938A01A093F1 |
:102AC0008B01B0938C018091A6089927AA27BB2778 |
:102AD000BC01CD010E9459A5DC01CB018093850189 |
:102AE00090938601A0938701B09388010E944E3392 |
:102AF000898301C01982809108018823E1F381E074 |
:102B000090E09F938F93CE0101969F938F9381E0E6 |
:102B10008F938F9383E58F930E94D9128DB79EB7C1 |
:102B200007968DBF2BC080915504882309F05DC1A5 |
:102B3000E0910503F0910603E0818E2F81508530EE |
:102B400018F48E2F0E94EE310E944E3389838091BB |
:102B500008018823E1F381E090E09F938F93CE01F9 |
:102B600001969F938F9381E08F938F9386E48F9349 |
:102B70000E94D912ADB7BEB71796ADBF10915504DC |
:102B8000112341F46EE670E089810E94FB3C812FA5 |
:102B90000E94900B80918B080E9476A026C119821A |
:102BA0002981A0910503B0910603E9EDF9E08D912B |
:102BB000992787FD909593A382A3822F8F5F8983A6 |
:102BC000282F32968C3098F310C1E0910503F091D4 |
:102BD000060380810E94EA388A83882319F481E001 |
:102BE000898301C01982809108018823E1F388E07C |
:102BF00090E09F938F9380E799E09F938F9321E0DC |
:102C000030E03F932F9380910503909106039F93AB |
:102C10008F933F932F93CE0102969F938F933F9371 |
:102C20002F93CE01820F931F9F938F9384E08F93F6 |
:102C300081E08F9385E58F930E94D912EDB7FEB79F |
:102C400073963CC080910403893008F4CEC0209173 |
:102C50000503309106032F5F3F4F88E0A0E7B9E0FE |
:102C6000F90101900D928A95E1F7D9018E910E94A8 |
:102C70003D388A83882319F481E0898301C0198251 |
:102C8000809108018823E1F321E030E03F932F9306 |
:102C9000CE0102969F938F933F932F93CE01820F85 |
:102CA000931F9F938F9382E08F9381E08F9387E5AB |
:102CB0008F930E94D912EDB7FEB73B96EDBF95C03A |
:102CC00080915504882309F090C00E942DA089832B |
:102CD000823019F0843009F088C020E430E0F894A4 |
:102CE0008091C1008F738093C1008091C9008F7360 |
:102CF0008093C9008091C100877E8093C10080913C |
:102D0000C900877E8093C9008091C80087FF03C0F7 |
:102D10008091CE00F9CF8091C00087FF03C08091E1 |
:102D2000C600F9CFE0910503F0910603E081E130A0 |
:102D300021F482E08093F9022EC0E43611F421E8F8 |
:102D400030E081E08093F902832F99278093CD00B2 |
:102D50002093CC008091CD008093C5008091CC0061 |
:102D60008093C4008091CA008F7D8093CA008091B7 |
:102D7000CA008F7E8093CA008091C9008B7F8093A8 |
:102D8000C9008091CA0084608093CA008091CA0003 |
:102D900082608093CA008091CA00877F8093CA00B6 |
:102DA0008091C200877F8093C2008091C9008E7F8E |
:102DB0008093C9008091C10088618093C100809197 |
:102DC000C90088618093C9008091C10080688093A8 |
:102DD000C1008091C90080688093C90010926E0084 |
:102DE00010926F00109270007894809105069927D8 |
:102DF0008436910509F421C185369105C4F48136E4 |
:102E0000910509F4D5C08236910544F48F339105BC |
:102E100039F18B34910509F4C0C072C18236910535 |
:102E200009F4D3C08336910509F4E2C069C18C3638 |
:102E3000910509F450C18D3691054CF48736910502 |
:102E400009F45BC18836910509F415C159C184376D |
:102E5000910509F467C08637910509F44AC150C14C |
:102E6000209104062C5629832C3008F049C1822F6A |
:102E70009927BC01660F771F660F771F680F791FB0 |
:102E80006C5C764F409105035091060385E0DB01B1 |
:102E9000FA0101900D928A95E1F7DB018C9180FF98 |
:102EA0000BC080911B0390911C03009729F00197A0 |
:102EB00090931C0380931B03822F9927FC01EE0F34 |
:102EC000FF1FEE0FFF1FE80FF91FEC5CF64F80812C |
:102ED00082FF26C080911B0390911C03892BC9F4AB |
:102EE000299A109278041092790410927A04109220 |
:102EF0007B04109274041092750410927604109260 |
:102F0000770410928004109281041092820410922F |
:102F1000830484EF91E090931C0380931B03F0C023 |
:102F20002998EEC080910703A0910503B091060394 |
:102F3000803140F080E1EEEDF5E00D9001928A9550 |
:102F4000E1F70DC08D919D910D90BC91A02D8093C6 |
:102F5000DE059093DF05A093E005B093E105809135 |
:102F600008018823E1F31F92809105018F9384E586 |
:102F70008F930E94D9128AEF809302038FEF809380 |
:102F8000060180EA9FE00E94611C9093FB028093FF |
:102F9000FA020F900F900F90B3C0E0910503F091EB |
:102FA0000603808191819093920180939101A8C042 |
:102FB000E0910503F0910603808180930701803240 |
:102FC00098F08FE1809307010FC0A0910503B091A5 |
:102FD00006038BE0E6EFF5E00D9001928A95E1F7AC |
:102FE0008091FF058093FF078FEF8093060188C0D3 |
:102FF0008091FE029091FF02892B89F4E0910503F4 |
:10300000F0910603E081EE2351F08AE0E89FC001D1 |
:1030100011240E94611C9093D1058093D005E0910A |
:103020000503F091060390818AE0989FC001112466 |
:103030009093FF028093FE0215C08FEF80930601EC |
:10304000E0910503F091060390818AE0989FC0010A |
:1030500011249093010380930003892B19F081E0E0 |
:1030600080930F0380EA9FE00E94611C9093FB0213 |
:103070008093FA0245C08FEF80930601E09105032B |
:10308000F0910603908197FD08C082E080930C03C5 |
:103090001092FD021092FC021AC0909580916E036E |
:1030A000892B80936E0391818AE0989FC00111243F |
:1030B0009093FD028093FC0284E080930C0380EAED |
:1030C0009FE00E94611C9093FB028093FA0281E0D2 |
:1030D0008093100315C08FEF80930601E0910503E4 |
:1030E000F0910603808180936F0381E08093110348 |
:1030F00007C081E080930E0303C081E08093120338 |
:1031000010920A0310920603109205031092040312 |
:10311000E3E0CE5F0C9413A6982F8091C00085FF4A |
:10312000FCCF9093C60008950F931F9388E180937E |
:10313000C1008091C00082608093C0008091C10076 |
:1031400080688093C1008091C10080648093C10039 |
:1031500000E010E00093C5008AE290E08093C40094 |
:1031600080910003909101030E94611C9093D3050C |
:103170008093D2058CED90E00E94611C9093020632 |
:103180008093010682E08093D40584E08093D50586 |
:103190001092D8058BE08093D6051092D705109237 |
:1031A000DC05809103018093DB05109306030093F7 |
:1031B0000503109204031F910F910895A0E1B0E060 |
:1031C000E4EEF8E10C94F6A580910801882309F457 |
:1031D0008CC28091FA029091FB020E946A1C8823A3 |
:1031E00061F01092FD021092FC0210920103109205 |
:1031F00000031092FF021092FE028091FC02909157 |
:10320000FD02892B41F08091DF069091E0060E943B |
:103210006A1C882329F480911003882309F460C074 |
:1032200080910801882309F45BC080910C0303E1BD |
:1032300018E08430A8F00E94B22680E590E09F93C9 |
:103240008F931F930F9381E08F938F9388E48F93D5 |
:103250000E94D9122DB73EB7295F3F4F2DBF34C012 |
:10326000109270038DE694E09F938F9385EA96E227 |
:103270009F938F93E091C005F091C105099584E17A |
:1032800090E09F938F931F930F9381E090E09F9323 |
:103290008F938CE093E09F938F9382E08F9381E0F4 |
:1032A0008F9388E48F930E94D91280910C03982FFA |
:1032B0008F5F80930C032DB73EB7215F3F4F2DBF2B |
:1032C000943010F010920C038091FC029091FD025A |
:1032D0000E94611C9093E0068093DF061092100319 |
:1032E00080911103882351F180910801882331F1E5 |
:1032F0000E94B22680E590E09F938F9383E198E04F |
:103300009F938F9321E030E03F932F9388E291E0E9 |
:103310009F938F933F932F938FE693E09F938F9389 |
:1033200083E08F9381E08F938CE48F930E94D91276 |
:10333000109211038DB79EB70F968DBF80910E032B |
:103340008823D1F0809108018823B1F08AE090E0D1 |
:103350009F938F9384ED95E09F938F9381E08F935C |
:103360008F9386E58F930E94D91210920E032DB78A |
:103370003EB7295F3F4F2DBF809112038823D9F0BC |
:10338000809108018823B9F08BE090E09F938F93A0 |
:1033900086EF95E09F938F9381E08F938091050155 |
:1033A0008F9387E48F930E94D912109212038DB7E6 |
:1033B0009EB707968DBF8091000390910103892BE2 |
:1033C00041F08091D2059091D3050E946A1C882318 |
:1033D00021F480910F03882341F180910801882313 |
:1033E00021F10E94053C82E490E09F938F938DEB46 |
:1033F00097E09F938F9381E08F938F9384E48F93D3 |
:103400000E94D91210920F032DB73EB7295F3F4F8C |
:103410002DBF8091000390910103009731F00E942D |
:10342000611C9093D3058093D2058091FE02909108 |
:10343000FF02892B09F497C08091D0059091D105A6 |
:103440000E946A1C882309F48EC080910801882399 |
:1034500009F489C08091E50A9091E60A9093C3052A |
:103460008093C2058091E70A9091E80A9093C50580 |
:103470008093C4052091C70A3091C80A4091C90AB7 |
:103480005091CA0ADA01C901F3E0880F991FAA1FF7 |
:10349000BB1FFA95D1F7820F931FA41FB51F820F90 |
:1034A000931FA41FB51F2091430130914401409107 |
:1034B000450150914601BC01CD010E94CDA530933C |
:1034C000C7052093C6058091780490917904A09156 |
:1034D0007A04B0917B04E9E0B595A7959795879517 |
:1034E000EA95D1F78093C805809174049091750492 |
:1034F000A0917604B091770479E0B595A79597955A |
:1035000087957A95D1F78093C90580918004909131 |
:103510008104A0918204B091830469E0B595A795D8 |
:10352000979587956A95D1F78093CA058EE090E0CC |
:103530009F938F9382EC95E09F938F9381E08F937D |
:103540008F9383E48F930E94D9128091FE02909111 |
:10355000FF020E94611C9093D1058093D0058DB726 |
:103560009EB707968DBF809107018F3F79F199270C |
:1035700054E0880F991F5A95E1F783599D4F40E118 |
:1035800050E0BC01CE0101960E94A3A380E190E02F |
:103590009F938F93CE0101969F938F9381E090E04C |
:1035A0009F938F9387E091E09F938F9382E08F9317 |
:1035B00081E08F9381E48F930E94D9128FEF8093E3 |
:1035C00007012DB73EB7255F3F4F2DBF8091FF0705 |
:1035D0008823C9F0809108018823A9F081E090E058 |
:1035E0009F938F938FEF97E09F938F9381E08F93BB |
:1035F0008F9382E48F930E94D9121092FF078DB7A8 |
:103600009EB707968DBF80910D038823D1F08091DE |
:1036100008018823B1F086E490E09F938F9389EDB1 |
:1036200099E09F938F9381E08F938F9380E58F93A1 |
:103630000E94D91210920D032DB73EB7295F3F4F5C |
:103640002DBF80910106909102060E946A1C88237A |
:1036500009F44BC080910801882309F446C0809189 |
:10366000A501882361F58091E50A9091E60A90937F |
:10367000EF058093EE058091E70A9091E80A909318 |
:10368000F1058093F005809132048093F2058091DA |
:1036900031048093F30588E090E09F938F938EEE42 |
:1036A00095E09F938F9381E08F9383E08F938BE6D8 |
:1036B0008F930E94D9128DB79EB707968DBF8091C8 |
:1036C000F405853018F086E08093F405809123039B |
:1036D000882319F083E690E002C087EE93E00E9411 |
:1036E000611C9093020680930106E4E0C05F0C9495 |
:1036F00012A61F920F920FB60F9211242F933F9391 |
:103700005F936F937F938F939F93AF93BF93EF9349 |
:10371000FF9380912503882329F080912503815010 |
:103720008093250380914A05882319F08150809366 |
:103730004A0580912D03815080932D038F3F09F01E |
:1037400051C089E080932D0380912B0390912C032D |
:10375000019690932C0380932B03809112018F5F2D |
:10376000817080931201882349F480912A03843068 |
:1037700028F480912A038F5F80932A03349903C031 |
:1037800081E0809323038091260390912703892B66 |
:1037900011F180912603909127030B9750F08091AF |
:1037A0002603909127030A9790932703809326037B |
:1037B00004C0109227031092260380912603909153 |
:1037C000270320910B0130910C0182239323892B35 |
:1037D00041F0479A07C08FEF9FEF90930C018093C1 |
:1037E0000B01479880912303882309F45AC0209144 |
:1037F000A501222309F055C08091B70A83FF51C06B |
:1038000086B19927FC01E071F07084FF13C08091AC |
:10381000280390912903019690932903809328030C |
:103820008091280390912903895E9340D0F12093E1 |
:10383000230337C08091280390912903892B69F1D4 |
:1038400080912803909129038A56914030F5809108 |
:1038500028039091290369E270E00E9484A5809179 |
:10386000280390912903860F971F90932903809333 |
:10387000280380912803909129030B9750F08091A1 |
:103880002803909129030A979093920180939101C4 |
:1038900004C0F0939201E0939101109229031092D9 |
:1038A0002803FF91EF91BF91AF919F918F917F91ED |
:1038B0006F915F913F912F910F900FBE0F901F90CE |
:1038C000189520912B0330912C03280F391FC90123 |
:1038D0000196089520912B0330912C03821B930BAA |
:1038E000892F99278695807490700895CF93DF93E0 |
:1038F0000E94611CEC01CE010E946A1C8823D9F34E |
:10390000DF91CF910895CF93DF930E94611CEC016A |
:1039100009C080911801882329F0909318018FEC39 |
:1039200080937A00CE010E946A1C982F882389F325 |
:10393000DF91CF9108959FB7F8945F983E9A469A89 |
:103940008091B0008F708093B0008091B000836050 |
:103950008093B0008091B1008B738093B10080910F |
:10396000B1008B608093B1001092B2008FEF809312 |
:10397000B3008091B00080688093B00080917000A7 |
:103980008A7F8093700080917000826080937000C5 |
:103990009FBF08958AE090E00E94611C9093010807 |
:1039A0008093000882E085BD83EB84BD8FEF88BDE6 |
:1039B00084EB87BD86E086BD80916E008160809338 |
:1039C0006E0008958091D6082091700182FF30C06A |
:1039D000909194088CE3989FB001112490919308E2 |
:1039E00080E5989FA0011124922F905897FD9D5F2C |
:1039F0009595959586E09802C001112420910901C2 |
:103A000030910A01281B390B30930A0120930901D8 |
:103A1000421753072CF050930A014093090108956F |
:103A20002617370784F070930A01609309010895FF |
:103A3000822F992736E0880F991F3A95E1F79093E6 |
:103A40000A01809309010895EF92FF920F931F934B |
:103A5000CF93DF9380919B08E82FFF27E75BFE4F12 |
:103A60009681C08180911101813009F021C180913E |
:103A7000D80887FF05C0C0E0D0E0E0E0F0E046C035 |
:103A8000892F992787FD9095A92FB92F2091B004F0 |
:103A90003091B1044091B2045091B304BC01CD0106 |
:103AA0000E9459A597FF04C061587F4F8F4F9F4FC9 |
:103AB0007B018C0187E015950795F794E7948A952B |
:103AC000D1F78C2F992787FD9095A92FB92F209199 |
:103AD000A8043091A9044091AA045091AB04BC0100 |
:103AE000CD010E9459A597FF04C061587F4F8F4FA9 |
:103AF0009F4FB7E09595879577956795BA95D1F7DC |
:103B0000F801E701C61BD70BE80BF90B2091300534 |
:103B100030913105C901A3E0880F991FAA95E1F7FB |
:103B2000821B930BAA2797FDA095BA2FC81BD90B10 |
:103B3000EA0BFB0B80916E019927AA27BB27BC01DA |
:103B4000CD019E01AF010E9459A597FF04C06150AD |
:103B50007E4F8F4F9F4FFC01EB0179E0F595E79584 |
:103B6000D795C7957A95D1F71091D608609109013C |
:103B700070910A0112FF05C07093100160930F014C |
:103B800018C040910F015091100180919A08282F80 |
:103B90003327CB01841B950BB9010E9498A5809116 |
:103BA0000F0190911001860F971F90931001809341 |
:103BB0000F0110FF14C080910F019091100197FD2B |
:103BC0000F9664E0959587956A95E1F7AA2797FD8A |
:103BD000A095BA2FC80FD91FEA1FFB1F15C08091EF |
:103BE0000F019091100197FD0F9654E095958795E0 |
:103BF0005A95E1F7AA2797FDA095BA2F8C1B9D0B2C |
:103C0000AE0BBF0BFD01EC012091CE08222321F168 |
:103C1000332780911F0390912003829FA001839FEF |
:103C2000500D929F500D1124CA01AA2797FDA0950F |
:103C3000BA2F8C0F9D1FAE1FBF1F2F5F3F4F442712 |
:103C400037FD4095542FBC01CD010E94CDA5309386 |
:103C5000200320931F0304C0D0932003C0931F03AD |
:103C600080919308282F3327220F331F220F331FF1 |
:103C700080911F0390912003821793077CF080911D |
:103C80009408282F3327220F331F220F331F8091D0 |
:103C90001F03909120032817390724F43093200341 |
:103CA00020931F03809111018F5F80931101F9C050 |
:103CB000892F992787FD9095A92FB92F2091A804C6 |
:103CC0003091A9044091AA045091AB04BC01CD01EC |
:103CD0000E9459A597FF04C061587F4F8F4F9F4F97 |
:103CE0007B018C0187E015950795F794E7948A95F9 |
:103CF000D1F78C2F992787FD9095A92FB92F209167 |
:103D0000B0043091B1044091B2045091B304BC01AD |
:103D1000CD010E9459A59B01AC0197FF04C0215819 |
:103D20003F4F4F4F5F4FC7E05595479537952795C4 |
:103D3000CA95D1F72E0D3F1D401F511F80916D0177 |
:103D40009927AA27BB27BC01CD010E9459A597FF3F |
:103D500004C061507E4F8F4F9F4FFC01EB01B9E0D3 |
:103D6000F595E795D795C795BA95D1F780916F01ED |
:103D70009927A6E0880F991FAA95E1F740910D01B8 |
:103D800050910E0120919A083327841B950BB9019D |
:103D90000E9498A580910D0190910E01860F971FAA |
:103DA00090930E0180930D018091D60881FF14C07D |
:103DB00080910D0190910E0197FD0F9674E09595FD |
:103DC00087957A95E1F7AA2797FDA095BA2FC80F96 |
:103DD000D91FEA1FFB1F15C080910D0190910E01A4 |
:103DE00097FD0F9664E0959587956A95E1F7AA2768 |
:103DF00097FDA095BA2F8C1B9D0BAE0BBF0BFD0141 |
:103E0000EC012091CF08222321F1332780911D035B |
:103E100090911E03829FA001839F500D929F500D91 |
:103E20001124CA01AA2797FDA095BA2F8C0F9D1FB8 |
:103E3000AE1FBF1F2F5F3F4F442737FD4095542FC4 |
:103E4000BC01CD010E94CDA530931E0320931D031C |
:103E500004C0D0931E03C0931D0380919708282FA0 |
:103E60003327220F331F220F331F80911D039091A0 |
:103E70001E03821793077CF080919808282F332720 |
:103E8000220F331F220F331F80911D0390911E03B9 |
:103E90002817390724F430931E0320931D03109232 |
:103EA0001101E6E0CDB7DEB70C9410A61F920F9279 |
:103EB0000FB60F9211242F933F934F935F938F93DD |
:103EC0009F93EF93FF9380912E03882309F0DDC029 |
:103ED0008091B00086FF9FC08091B0008F7B80935F |
:103EE000B000E091310320919908EE23D9F43327F3 |
:103EF0008DED96E0289FA001299F500D389F500D11 |
:103F00001124CA0120912F0330913003821B930B9F |
:103F100090932203809321031092300310922F0379 |
:103F2000469AB0C02E1738F48AE090E090932203AE |
:103F300080932103A7C089EA93E0909322038093A2 |
:103F400021038E2F992783309105D9F08430910574 |
:103F500034F48130910549F0029761F020C084303B |
:103F6000910591F0059799F01AC080911F039091E7 |
:103F7000200304C080911D0390911E0387559E4F1E |
:103F80001DC08091920A05C080916B0A02C0809189 |
:103F90009B0A9927880F991F880F991FEFCFFF273A |
:103FA000EE0FFF1FE752F64F20813181220F331FA2 |
:103FB0008091210390912203820F931F90932203FB |
:103FC00080932103809121039091220355E08D3D40 |
:103FD000950718F08CED95E005C08757914030F4B7 |
:103FE00087E791E09093220380932103209121039E |
:103FF000309122032C5B3040309322032093210325 |
:1040000080912F0390913003820F931F9093300380 |
:1040100080932F0337C08091B00080648093B000FC |
:104020008CEB90E0909322038093210380912F03E7 |
:104030009091300384549F4F9093300380932F03CB |
:1040400080912403882321F080915604882321F451 |
:1040500080912403823011F4469801C0469A8091E1 |
:1040600031038F5F80933103282F33278091990884 |
:1040700099270196821793072CF481E08093110110 |
:104080001092310381E080932E032091210330911F |
:10409000220341E02F37340730F08FEF8093B300D5 |
:1040A0002F5F30400FC02F3F3105C9F0C0F0A9018C |
:1040B0004F5F50404F37510550F480E88093B30074 |
:1040C00020583040309322032093210312C08FEFF9 |
:1040D0008093B30050932203409321030AC0809140 |
:1040E00021038093B30010922203109221031092B7 |
:1040F0002E03FF91EF919F918F915F914F913F918F |
:104100002F910F900FBE0F901F90189510927C006A |
:104110008FEC80937A0008958091150460911601C8 |
:104120007091170120913E03882379F0CB01AA27D3 |
:10413000BB27332727FD3095432F532FBC01CD01DB |
:104140000E9459A5DC01CB0116C084E0660F771FE1 |
:104150008A95E1F7CB01AA27BB27332727FD3095A6 |
:10416000432F532FBC01CD010E9459A5DC01CB0187 |
:104170000497A109B1098093360390933703A09364 |
:104180003803B09339030895CF93DF9310923E0321 |
:104190000E948C2083E090E00E94D031C82FDD2760 |
:1041A000C03FD10508F42A96C7BD8C2F809588BDE5 |
:1041B00086E990E00E94831C80911C0190911D0172 |
:1041C0008152934010F0C0EFD0E0C630D10510F11D |
:1041D000C7BD8C2F809588BD84E690E00E94831C2B |
:1041E00082E894E09F938F938CE898E19F938F935C |
:1041F000E091C005F091C105099580911C01909155 |
:104200001D010F900F900F900F908152934010F46A |
:104210002197DBCFC09310086C2F83E090E00E94C1 |
:10422000D8318091710880FF0AC0809110088A50AF |
:104230008C3D28F08091D90580648093D90580E178 |
:1042400080931501809115048823E9F08091030182 |
:10425000873150F4CC38D105B0F480EA90E08C1B63 |
:104260009D0B6AE170E009C0CA3AD10560F48CEB9D |
:1042700090E08C1B9D0B63E170E00E9484A5CB0154 |
:10428000805F8093150180911501282F332780913D |
:104290001C0190911D01829FA001839F500D929F50 |
:1042A000500D1124CA01AA27BB2780931E019093A9 |
:1042B0001F01A0932001B09321018CE291E00E94A4 |
:1042C000831CDF91CF9108951F920F920FB60F922A |
:1042D0001124EF92FF920F931F932F933F934F93CD |
:1042E0005F936F937F938F939F93AF93BF93CF937E |
:1042F000DF93EF93FF9380915603282F33274427B2 |
:1043000055278F5F80935603F9012231310508F05C |
:10431000ECC4EA5BFF4F0C941FA68091780090914B |
:10432000790046C08091780090917900EBC180912E |
:1043300078009091790090935A0380935903FBC1C0 |
:104340008091BA049091BB0420917800309179005B |
:10435000821B930B909303088093020880910208BC |
:1043600090910308909364038093630303C2809148 |
:104370007800909179002091BC043091BD04821B9B |
:10438000930B90930F0880930E0880910E089091E4 |
:104390000F089093660380936503A9C480915D0321 |
:1043A00090915E032091780030917900820F931FE5 |
:1043B00090935E0380935D0381E09AC480915B03D8 |
:1043C00090915C032091780030917900820F931FC7 |
:1043D00090935C0380935B0384E08AC48091D70848 |
:1043E00083FF26C080912601909127019C01220F16 |
:1043F000331F280F391F40917800509179008BE0CE |
:1044000090E0489FB001499F700D589F700D112496 |
:10441000CB016EE170E00E9484A5260F371F369510 |
:10442000279536952795309327012093260142C082 |
:1044300080916C0390916D03892B91F42091780009 |
:1044400030917900C90153E0880F991F5A95E1F71F |
:10445000820F931F820F931F90936D0380936C03C1 |
:104460002091780030917900C90143E0880F991FAD |
:104470004A95E1F7820F931F820F931F20916C03DF |
:1044800030916D038217930718F02E5F3F4F02C0E3 |
:104490002250304030936D0320936C0380916C0365 |
:1044A00090916D036FE170E00E9484A570932701E5 |
:1044B0006093260185E01CC480917800909179007A |
:1044C0009093050880930408809104089091050852 |
:1044D0004091B6045091B704841B950B6091B504CC |
:1044E000262F332727FD3095821B930B909344038F |
:1044F0008093430380911504882309F071C0809153 |
:1045000043039091440302977CF172E04E3E5707BB |
:104510000CF0A7C020915703309158032B5F3F4FF9 |
:1045200030935803209357032550304080911E0448 |
:1045300090911F04845F914030F4215F3F4F30938E |
:104540005803209357038091570390915803853661 |
:1045500091050CF486C04F5F5F4F5093B7044093B2 |
:10456000B6048456904037C0809143039091440331 |
:104570008F5F9F4F0CF075C082E0473258070CF4F4 |
:1045800070C020915703309158032550304030932C |
:104590005803209357032B5F3F4F80911E04909147 |
:1045A0001F04845F914030F42F5030403093580303 |
:1045B0002093570380915703909158037FEF8C39D4 |
:1045C00097070CF04EC0415050405093B7044093B1 |
:1045D000B6048C599F4F909358038093570341C062 |
:1045E0008091870A9091880A8F5C9F41D4F18091D5 |
:1045F0004303909144030297ACF02091570330910C |
:104600005803C90101969093580380935703895822 |
:1046100093413CF166301CF46F5F6093B5042758FA |
:1046200033411BC080914303909144038F5F9F4FA0 |
:10463000C4F42091570330915803C9010197909316 |
:1046400058038093570388579C4E5CF46B3F1CF0D3 |
:1046500061506093B50429573C4E30935803209322 |
:10466000570380914303909144039C01442737FDF5 |
:104670004095542F8091700490917104A091720420 |
:10468000B0917304820F931FA41FB51F8093700411 |
:1046900090937104A0937204B093730420917004FA |
:1046A00030917104409172045091730457FF04C01B |
:1046B00021503C4F4F4F5F4F9AE0559547953795A6 |
:1046C00027959A95D1F78091700490917104A091EB |
:1046D0007204B0917304821B930BA40BB50B8093EF |
:1046E000700490937104A0937204B0937304F7C0A4 |
:1046F00080915B0390915C03209178003091790068 |
:10470000820F931F90935C0380935B031092550379 |
:10471000F1C22091780030917900809159039091F5 |
:104720005A03280F391F8FEF97E0821B930B90934A |
:104730004A038093490380911401DAC28091BA043C |
:104740009091BB042091780030917900821B930BEB |
:1047500090930308809302088091020890910308C7 |
:104760002091630330916403820F931F9093480359 |
:104770008093470380911301BBC280917800909190 |
:1047800079002091BC043091BD04821B930B90935F |
:104790000F0880930E0880910E0890910F082091C9 |
:1047A000650330916603820F931F909346038093B5 |
:1047B00045039DC220915D0330915E038091780096 |
:1047C00090917900280F391F220F331F220F331FBA |
:1047D00030935E0320935D03C90137FD079603E024 |
:1047E000959587950A95E1F790934E0380934D0335 |
:1047F00080915F0390916003820F931F97FD019654 |
:10480000959587959093600380935F032091C604EC |
:104810003091C704821B930B909325018093240150 |
:1048200020915303309154038091240190912501EC |
:10483000280F391F37FF02C02F5F3F4F359527954F |
:104840003093540320935303B7CD20915B033091F1 |
:104850005C038091780090917900280F391F220F16 |
:10486000331F220F331F30935C0320935B03C90176 |
:1048700037FD0796A3E095958795AA95E1F7909364 |
:104880004C0380934B038091610390916203820FEC |
:10489000931F97FD0196959587959093620380935A |
:1048A00061032091C4043091C504821B930B909343 |
:1048B0002301809322012091510330915203809172 |
:1048C000220190912301280F391F37FF02C02F5F6B |
:1048D0003F4F35952795309352032093510383E042 |
:1048E00007C280911504882309F180E00E94AE9EE2 |
:1048F0009B01AC0120503F4F4F4F5F4F57FF06C009 |
:104900009B01AC0121503D4F4F4F5F4F79E05595D2 |
:104910004795379527957A95D1F7209332033093B1 |
:104920003303409334035093350310C080915004F7 |
:1049300090915104A0915204B0915304809332039A |
:1049400090933303A0933403B0933503109256032E |
:1049500081E08093180180913A0390913B03019686 |
:1049600090933B0380933A03809178009091790073 |
:1049700090931D0180931C0180911504882309F4F4 |
:1049800072C080911C0190911D017C0100271127AC |
:104990008091360390913703A0913803B091390389 |
:1049A000E81AF90A0A0B1B0BE0926703F0926803FE |
:1049B0000093690310936A0380911501282F332710 |
:1049C0004427552780911E0190911F01A09120013D |
:1049D000B0912101BC01CD010E94CDA580911E01A5 |
:1049E00090911F01A0912001B0912101821B930B96 |
:1049F000A40BB50B80931E0190931F01A09320017F |
:104A0000B093210180911E0190911F01A09120017E |
:104A1000B09121018E0D9F1DA01FB11F80931E011B |
:104A200090931F01A0932001B0932101809106086B |
:104A300090910708A0910808B091090820911E01E3 |
:104A400030911F014091200150912101821B930B55 |
:104A5000A40BB50B8093500490935104A09352047F |
:104A6000B093530444C180911C0190911D01AA2769 |
:104A7000BB27C0916703D0916803E0916903F0916F |
:104A80006A03C80FD91FEA1FFB1FC0936703D093A7 |
:104A90006803E0936903F0936A0380916B038F5F6F |
:104AA00080936B03803108F422C180911E019091A4 |
:104AB0001F01A0912001B09121019C01AD0163E093 |
:104AC000220F331F441F551F6A95D1F7281B390B3E |
:104AD0004A0B5B0B2C0F3D1F4E1F5F1F809136034F |
:104AE00090913703A0913803B0913903281B390BFB |
:104AF0004A0B5B0B57FF04C0295F3F4F4F4F5F4F7F |
:104B000003E055954795379527950A95D1F720935A |
:104B10001E0130931F014093200150932101C09149 |
:104B20000608D0910708E0910808F09109088091E3 |
:104B30001E0190911F01A0912001B0912101C81B7D |
:104B4000D90BEA0BFB0BC0935004D0935104E093B4 |
:104B50005204F093530420913F033091400340915D |
:104B600041035091420357FF04C0215F3F4F4F4F15 |
:104B70005F4F14E055954795379527951A95D1F7CE |
:104B800080913F0390914003A0914103B091420373 |
:104B9000821B930BA40BB50B80933F0390934003B0 |
:104BA000A0934103B093420380913F03909140034F |
:104BB000A0914103B09142038C0F9D1FAE1FBF1FF8 |
:104BC00080933F0390934003A0934103B09342032B |
:104BD00080913F0390914003A0914103B091420323 |
:104BE000B7FF03C00F96A11DB11DC4E0B595A795F1 |
:104BF00097958795CA95D1F720915004309151042B |
:104C0000281B390B64E0213036071CF020E034E02B |
:104C100006C07CEF2030370714F420E03CEF809191 |
:104C20003C0390913D0380913C0390913D0397FF9D |
:104C300003C0909581959F4FA901F3E0440F551F44 |
:104C4000FA95E1F78D5B9240C4F080913C0390911E |
:104C50003D039C01E4E0220F331FEA95E1F7281B96 |
:104C6000390B240F351F37FF02C0215F3F4F74E01F |
:104C7000359527957A95E1F717C080913C0390917F |
:104C80003D039C0165E0220F331F6A95E1F7281B65 |
:104C9000390B240F351F37FF02C0215E3F4F45E01F |
:104CA000359527954A95E1F730933D0320933C03D2 |
:104CB0008091670390916803A0916903B0916A03A2 |
:104CC000B7FF03C00196A11DB11DB595A795979596 |
:104CD00087958093670390936803A0936903B093CB |
:104CE0006A0388E080936B0302C01092560382E04F |
:104CF000809355038091550380937C0080915603E7 |
:104D0000882319F08FEC80937A00FF91EF91DF9167 |
:104D1000CF91BF91AF919F918F917F916F915F9153 |
:104D20004F913F912F911F910F91FF90EF900F9016 |
:104D30000FBE0F901F90189590E2E3E1F8E08FE42A |
:104D40009193815087FFFCCF089590917003903527 |
:104D500040F4E92FFF27ED5EF74F80839F5F90932C |
:104D600070030895A0E0B0E0E8EBF6E20C94F2A541 |
:104D700020916E0320FF0AC080916F03882311F0F9 |
:104D8000815002C08091280180936F0321FF0CC0E5 |
:104D900090916F0380912801981719F410926F0376 |
:104DA00003C09F5F90936F03822F992780FF04C0F9 |
:104DB00081FF02C010926F030E949C2680916F03B6 |
:104DC000282F332705EA16E2C091C005D091C1050E |
:104DD0008A3098F481E1809370033F932F9384E8A5 |
:104DE00094E09F938F931F930F93FE0109952DB726 |
:104DF0003EB72A5F3F4F2DBF12C080E18093700302 |
:104E00003F932F9389E894E09F938F931F930F9381 |
:104E1000FE0109954DB75EB74A5F5F4F4DBF2091C8 |
:104E20006F03822F9927AA27BB27FC01439710F015 |
:104E30000C94B62FE85AFF4F05EA16E2C091C00560 |
:104E4000D091C1050C941FA6109270038EE894E0D7 |
:104E50009F938F9355EAE52E56E2F52E1F930F93FD |
:104E6000FE01099584E1809370030F900F900F90DD |
:104E70000F9081E690E09F938F9384E090E09F9362 |
:104E80008F9382E090E09F938F93809103016AE07B |
:104E90000E9478A5892F99279F938F938091030172 |
:104EA0000E9478A599279F938F938EE994E09F9312 |
:104EB0008F931F930F93E091C005F091C105099561 |
:104EC00088E2809370038DB79EB70E968DBF87EEF4 |
:104ED00098E09F938F938091010199279F938F93DF |
:104EE00086EB94E09F938F931F930F93E091C005FF |
:104EF000F091C10509958091DA059927EDB7FEB7C4 |
:104F00003896EDBFEC01C071D07084FF0BC08CE30C |
:104F10008093700384EC94E09F938F931F930F937F |
:104F20000C94AC2F90913705992351F18CE3809329 |
:104F30007003892F99279F938F9381ED94E09F931E |
:104F40008F93FF92EF92E091C005F091C105099512 |
:104F5000DF93CF939091370581E1989FC001112491 |
:104F60008C5C934F9F938F93FF92EF92E091C005DB |
:104F7000F091C10509952DB73EB7245F3F4FFFC59E |
:104F80009091D905992371F08CE380937003892F58 |
:104F900099279F938F9389ED94E09F938F93FF922E |
:104FA000EF927FC5909176039923B9F08CE38093BB |
:104FB0007003892F99279F938F9380EF94E09F939D |
:104FC0008F93FF92EF92E091C005F091C105099592 |
:104FD0008DB79EB706968DBFD2C780913C01909148 |
:104FE0003D01069730F48CE38093700386E095E0F2 |
:104FF000AFC79091520B9E3108F0C1C78CE38093EC |
:105000007003892F99279F938F9383E195E017C1B0 |
:10501000109270038091500490915104A091520419 |
:10502000B0915304BC01CD0125E030E040E050E0F8 |
:105030000E94CDA53F932F9387E295E09F938F9396 |
:105040001F930F93FE01099584E1809370032DB7A0 |
:105050003EB72A5F3F4F2DBF80914C0490914D0485 |
:10506000A0914E04B0914F04BC01CD0125E030E089 |
:1050700040E050E00E94CDA53F932F9384E395E05C |
:105080009F938F931F930F93E091C005F091C105FB |
:10509000099588E2809370034DB75EB74A5F5F4F12 |
:1050A0004DBF80911C0190911D019F938F9381E4CE |
:1050B00095E09F938F931F930F93E091C005F0911C |
:1050C000C10509958CE3809370038DB79EB7069652 |
:1050D0008DBF87B599279F938F938EE495E09F931B |
:1050E0008F931F930F93E091C005F091C10509952F |
:1050F000EDB7FEB73696EDBF80911504882309F40D |
:105100003EC789E3809370038BE595E09F938F936F |
:105110001F930F93E091C005F091C10509958DE4AF |
:10512000809370030F900F900F900F908091150156 |
:1051300099279F938F938FE595E09F938F931F936C |
:105140000F93E091C005F091C10509952DB73EB7C9 |
:105150002A5F3F4F14C51092700382E695E09F933B |
:105160008F9345EAE42E46E2F42E1F930F93FE013F |
:10517000099584E1809370030F900F900F900F902A |
:105180008091B0049091B104A091B204B091B304A5 |
:10519000B7FF04C081509C4FAF4FBF4F3AE0B59569 |
:1051A000A795979587953A95D1F7BF93AF939F931E |
:1051B0008F938FE695E09F938F93FF92EF92E0910C |
:1051C000C005F091C105099588E2809370034DB741 |
:1051D0005EB7485F5F4F4DBF8091A8049091A904CE |
:1051E000A091AA04B091AB04B7FF04C081509C4FBA |
:1051F000AF4FBF4F2AE0B595A795979587952A950C |
:10520000D1F7BF93AF939F938F938EE795E09F93D2 |
:105210008F93FF92EF92E091C005F091C10509953F |
:105220008CE3809370038DB79EB708968DBF8091F5 |
:10523000730A9091740A9F938F938DE895E09F93E2 |
:105240008F93FF92EF927CC291E0F92EC1E0D0E003 |
:105250000BED19E09F2D969584E1989FC0011124D4 |
:1052600080937003F801828193819F938F9321969D |
:10527000DF93CF932197808191819F938F93DF93C9 |
:10528000CF938CE995E09F938F9385EA96E29F9365 |
:105290008F93E091C005F091C10509952DB73EB7F8 |
:1052A000245F3F4F2DBF32E0F30E22960C5F1F4F5D |
:1052B00048E04F1578F663C6109270038091660837 |
:1052C000E82FFF27EE0FFF1FE752F64F80819181F5 |
:1052D0009F938F9380916508E82FFF27EE0FFF1FA4 |
:1052E000E752F64F808191819F938F938EEA95E0EC |
:1052F0009F938F931F930F93FE01099584E18093F1 |
:1053000070038DB79EB708968DBF80916808E82F0F |
:10531000FF27EE0FFF1FE752F64F808191819F9389 |
:105320008F9380916708E82FFF27EE0FFF1FE7524A |
:10533000F64F8081918181589F4F9F938F938EEB81 |
:1053400095E09F938F931F930F93E091C005F09189 |
:10535000C105099588E280937003EDB7FEB73896D2 |
:10536000EDBF80916A08E82FFF27EE0FFF1FE7527D |
:10537000F64F8081918181589F4F9F938F938091A9 |
:105380006908E82FFF27EE0FFF1FE752F64F8081D5 |
:10539000918181589F4F9F938F938EEC95E09F93BF |
:1053A0008F931F930F93E091C005F091C10509956C |
:1053B0008CE3809370032DB73EB7285F3F4F2DBF1E |
:1053C00080916C08E82FFF27EE0FFF1FE752F64F82 |
:1053D0008081918181589F4F9F938F9380916B081B |
:1053E000E82FFF27EE0FFF1FE752F64F80819181D4 |
:1053F00081589F4F9F938F938EED95E09F938F934E |
:105400001F930F93E091C005F091C10509954DB729 |
:105410005EB7485F5F4F4EC3109270038EEE95E00B |
:105420009F938F9385EAE82E86E2F82E1F930F93C1 |
:10543000FE01099584E1809370030F900F900F9007 |
:105440000F908091C6049091C7049C0197FF02C001 |
:10545000215F3F4F207F821B930B97FD019695950F |
:1054600087959F938F938091C6049091C70497FD71 |
:105470000F96B4E095958795BA95E1F79F938F9332 |
:105480002091C6043091C70437FF02C0295F3F4F07 |
:10549000A3E035952795AA95E1F780914D0390916A |
:1054A0004E03821B930B9F938F938CEF95E09F93FA |
:1054B0008F93FF92EF92E091C005F091C10509959D |
:1054C00088E2809370038DB79EB70A968DBF809156 |
:1054D000C4049091C5049C0197FF02C0215F3F4F17 |
:1054E000207F821B930B97FD0196959587959F933F |
:1054F0008F938091C4049091C50497FD0F96E4E0CA |
:1055000095958795EA95E1F79F938F932091C40431 |
:105510003091C50437FF02C0295F3F4F73E03595D6 |
:1055200027957A95E1F780914B0390914C03821B6C |
:10553000930B9F938F938EE096E09F938F93FF92B0 |
:10554000EF92E091C005F091C10509958CE380933D |
:105550007003EDB7FEB73A96EDBF8091C20490910B |
:10556000C30497FD0196959587959F938F9380919E |
:10557000C2049091C3042091490330914A03821BD5 |
:10558000930B9F938F9380E296E0ECC2109270038E |
:105590008FE296E09F938F931F930F93FE010995DF |
:1055A00084E1809370030F900F900F900F90809183 |
:1055B000BC049091BD049F938F938091450390917B |
:1055C00046039F938F938CE396E09F938F931F9353 |
:1055D0000F93E091C005F091C105099588E2809391 |
:1055E00070034DB75EB7485F5F4F4DBF8091BA04FF |
:1055F0009091BB049F938F938091470390914803B0 |
:105600009F938F938BE496E09F938F931F930F93B9 |
:10561000E091C005F091C10509958CE3809370037A |
:105620008DB79EB708968DBF8091B6049091B70450 |
:105630009F938F9380914303909144039F938F9303 |
:105640008AE596E09F938F931F930F93E091C00597 |
:10565000F091C1050995EDB7FEB7389679C0109263 |
:10566000700380912601909127016AE070E00E940A |
:1056700098A59F938F9380912601909127016AE0CE |
:1056800070E00E9498A57F936F9389E696E09F93C0 |
:105690008F931F930F93FE01099584E1809370030C |
:1056A0002DB73EB7285F3F4F2DBF80914C0B909197 |
:1056B0004D0B6AE070E00E9484A59F938F938091C8 |
:1056C0004C0B90914D0B6AE070E00E9484A57F9393 |
:1056D0006F938DE796E09F938F931F930F93E091C5 |
:1056E000C005F091C105099588E2809370034DB71C |
:1056F0005EB7485F5F4F4DBF80914E0B90914F0B4F |
:105700009F938F9381E996E09F938F931F930F93BD |
:10571000E091C005F091C10509958CE38093700379 |
:105720008DB79EB706968DBF8091500B9091510B0F |
:105730009F938F9381EA96E09F938F931F930F938C |
:10574000E091C005F091C1050995EDB7FEB7369619 |
:10575000EDBF15C41092700383EB96E09F938F9377 |
:105760001F930F93FE01099588E2809370030F90B9 |
:105770000F900F900F908091560499279F938F93CD |
:105780008CEB96E09F938F931F930F93E091C0054E |
:10579000F091C10509958CE3809370032DB73EB756 |
:1057A0002A5F3F4F2DBF8091D809992701979F937A |
:1057B0008F938CEC96E071C1109270038CED96E0A3 |
:1057C0009F938F931F930F93FE01099584E180931C |
:1057D00070030F900F900F900F90809102016AE07C |
:1057E0000E9478A5892F99279F938F93809102011A |
:1057F0000E9478A599279F938F938CEE96E09F93B4 |
:105800008F931F930F93E091C005F091C105099507 |
:1058100088E2809370038DB79EB708968DBF809104 |
:10582000F5026AE00E9478A5892F99279F938F93AC |
:105830008091F5020E9478A599279F938F938AEF14 |
:1058400096E09F938F931F930F93E091C005F09183 |
:10585000C10509958CE380937003EDB7FEB73896C8 |
:10586000EDBF8091F6026AE00E9478A5892F992702 |
:105870009F938F938091F6020E9478A599279F931A |
:105880008F9388E097E09F938F931F930F936EC140 |
:1058900057E5C52E54E0D52E20E030E0E90143E085 |
:1058A000F42EC0937003F60181916F0199279F93A5 |
:1058B0008F9389010F5F1F4F1F930F9386E197E02E |
:1058C0009F938F9385EA96E29F938F93E091C00513 |
:1058D000F091C10509952DB73EB7285F3F4F2DBF09 |
:1058E000FA9464969801F7FEDCCF49C39BE5C92E74 |
:1058F00094E0D92EC0E0D0E08E0183E0F82E009332 |
:105900007003F60181916F0199279F938F932596DC |
:10591000DF93CF9383E297E09F938F9385EA96E29C |
:105920009F938F93E091C005F091C10509952DB724 |
:105930003EB7285F3F4F2DBFFA940C5E1F4F249750 |
:10594000F7FEDDCF1CC31092700380E397E09F93B6 |
:105950008F931F930F93FE01099584E18093700349 |
:105960000F900F900F900F908091F1029091F202A2 |
:105970009F938F938EE397E09F938F931F930F9343 |
:10598000E091C005F091C105099588E2809370030C |
:105990004DB75EB74A5F5F4F4DBF8091F302909164 |
:1059A000F4029F938F938BE497E09F938F931F93C1 |
:1059B0000F93E091C005F091C105099589E48093AA |
:1059C00070038DB79EB706968DBF88E597E09F93CD |
:1059D0008F931F930F93E091C005F091C105099536 |
:1059E00080916E030F900F900F900F9083FFC7C2AE |
:1059F0001092F4021092F30260E070E08EE090E00A |
:105A00000E94E931BCC21092700380E697E09F9338 |
:105A10008F931F930F93FE01099584E18093700388 |
:105A20000F900F900F900F908091910190919201A3 |
:105A30009F938F9388E697E09F938F931F930F9385 |
:105A4000E091C005F091C105099588E2809370034B |
:105A5000EDB7FEB73696EDBF8091730A9091740A48 |
:105A60009F938F9386E797E09F938F931F930F9356 |
:105A7000E091C005F091C10509958CE38093700316 |
:105A80002DB73EB72A5F3F4F2DBF80916E04909196 |
:105A90006F049F938F9384E897E09F938F931F9356 |
:105AA0000F93E091C005F091C10509954DB75EB720 |
:105AB0004A5F5F4F4DBF63C21092700382E997E067 |
:105AC0009F938F93B5EAEB2EB6E2FB2E1F930F93B5 |
:105AD000FE01099584E1809370030F900F900F9061 |
:105AE0000F908091700199279F938F938AE997E097 |
:105AF0009F938F931F930F93E091C005F091C10581 |
:105B0000099588E2809370038DB79EB706968DBF86 |
:105B100080911F039091200397FD0396959587959B |
:105B2000959587959F938F9388EA97E09F938F939E |
:105B3000FF92EF92E091C005F091C10509958CE3C9 |
:105B400080937003EDB7FEB73696EDBF8091940851 |
:105B500099279F938F938091930899279F938F9371 |
:105B600086EB97E09F938F93FF92EF92E091C005B1 |
:105B7000F091C10509952DB73EB7285F3F4F2DBF66 |
:105B8000FEC11092700384EC97E09F938F93F5EA27 |
:105B9000CF2EF6E2DF2E1F930F93FE0109950F9093 |
:105BA0000F900F900F90C8E7D9E000E010E0E2E01E |
:105BB000FE2E802F8C5E809370038B8D99278F77BC |
:105BC00090709F938F938B8999278F7790709F9375 |
:105BD0008F938B8599278F7790709F938F938B816D |
:105BE00099278F7790709F938F9384ED97E09F9381 |
:105BF0008F93DF92CF92E091C005F091C105099596 |
:105C00004DB75EB7445F5F4F4DBFFA940C5E1F4FB8 |
:105C1000A096F7FECECFB3C11092700385EE97E049 |
:105C20009F938F9375EAC72E76E2D72E1F930F931B |
:105C3000FE0109950F900F900F900F90C8E7D9E0E3 |
:105C400000E010E062E0F62E802F8C5E80937003FF |
:105C50008F8D992787FD90959F938F938F89992793 |
:105C600087FD90959F938F938F85992787FD9095BA |
:105C70009F938F938F81992787FD90959F938F9303 |
:105C800084EF97E09F938F93DF92CF92E091C005CE |
:105C9000F091C10509958DB79EB70C968DBFFA940A |
:105CA0000C5E1F4FA096F7FECFCF69C11092700314 |
:105CB00085E098E09F938F9355EAC52E56E2D52E46 |
:105CC0001F930F93FE01099587E4809370030F9053 |
:105CD0000F900F900F9080E198E09F938F931F9308 |
:105CE0000F93E091C005F091C1050995FF240F9035 |
:105CF0000F900F900F90C0E0D0E08E01802F8C5E4F |
:105D0000809370038C2F8D5F0E9457809F938F9399 |
:105D10008C2F8E5F0E9457809F938F938C2F8F5F65 |
:105D20000E9457809F938F938C2F0E9457809F9340 |
:105D30008F938AE198E09F938F93DF92CF92E091C7 |
:105D4000C005F091C10509959E012C5F3F4F8091E0 |
:105D500063089927EDB7FEB73C96EDBF28173907C2 |
:105D60000CF00DC1F3940C5E1F4FE901F2E0FF153A |
:105D700028F605C1109270038BE298E09F938F93F1 |
:105D800045EAE42E46E2F42E1F930F93FE01099597 |
:105D900084E1809370030F900F900F900F9080918B |
:105DA0009309881F8827881F97E0899FC0011124C5 |
:105DB0008D969F938F9380918B09881F8827881FCA |
:105DC00096E0899FC00111248D969F938F938091B7 |
:105DD0008309881F8827881F95E0899FC0011124A7 |
:105DE0008D969F938F9380917B09881F8827881FAA |
:105DF0009927880F991F880F991F8D969F938F93CE |
:105E00008AE398E09F938F931F930F93E091C005CF |
:105E1000F091C105099588E2809370032DB73EB7D4 |
:105E2000245F3F4F2DBF8091B309881F8827881FAB |
:105E30009BE0899FC00111248D969F938F93809141 |
:105E4000AB09881F8827881F9AE0899FC001112409 |
:105E50008D969F938F938091A309881F8827881F11 |
:105E600099E0899FC00111248D969F938F93809113 |
:105E70009B09881F8827881F992723E0880F991F6F |
:105E80002A95E1F78D969F938F938EE498E09F93E8 |
:105E90008F931F930F93E091C005F091C105099571 |
:105EA0008CE3809370034DB75EB7445F5F4F4DBF87 |
:105EB0008091BB09881F8827881F9CE0899FC001AB |
:105EC00011248D969F938F9382E698E09F938F93F2 |
:105ED0001F930F93E091C005F091C1050995809142 |
:105EE000C309EDB7FEB73696EDBF87FF12C080E459 |
:105EF0008093700383E798E09F938F931F930F9392 |
:105F0000E091C005F091C10509950F900F900F9099 |
:105F10000F908091CB0987FF12C084E480937003B7 |
:105F200086E798E09F938F93FF92EF92E091C005F0 |
:105F3000F091C10509950F900F900F900F908091EF |
:105F4000D30987FF1CC088E48093700389E798E039 |
:105F50009F938F93FF92EF92E091C005F091C1055E |
:105F600009950F900F900F900F9009C08091280114 |
:105F7000281719F421502093280110926F031092D2 |
:105F80006E03E8E0CDB7DEB70C940EA6F999FECF0C |
:105F900092BD81BDF89A80B599270895F999FECFF1 |
:105FA0001FBA92BD81BD60BD0FB6F894FA9AF99AF6 |
:105FB0000FBE08954AEA20E030E02617370740F484 |
:105FC000FC018191480F2F5F3F4F26173707C8F319 |
:105FD000842F99270895EAEA40E050E046175707D2 |
:105FE00078F49C01F999FECF32BD21BDF89A80B5B5 |
:105FF000E80F4F5F5F4F2F5F3F4F4617570790F3F4 |
:106000008E2F9927089581E08093670882E080931E |
:10601000660883E08093650884E08093680885E0E3 |
:106020008093690886E080936A0887E080936B0814 |
:1060300088E080936C0889E080936D088AE0809303 |
:106040006E088BE080936F088CE080937008089551 |
:1060500082E6809364088CE0E9EDF8E011928A957D |
:10606000E9F78AE0809384081092A8088BE1809376 |
:1060700080088EE48093A5088093A60880E2809330 |
:10608000A7081092D5088AE68093710882E780936A |
:10609000D70880E58093D80886E080938B0810921B |
:1060A000C8081092C50838E030937E0886EE8093C9 |
:1060B0007F0880E48093810885E0809374082EE156 |
:1060C0002093720890911504992399F084E18093AC |
:1060D000750888E2809373082093770881E08093A5 |
:1060E0007808109279088FE780937A082093CB087C |
:1060F00010C08FE080937508209373089093770801 |
:106100003093780884E18093790890937A0890938B |
:10611000CB088FE0809376081092D0088CE08093B3 |
:10612000D10810928D0810928E0810928F0810924C |
:1061300090081092AA081092AB081092AC08109226 |
:10614000AD0890E89093910842E34093920872E082 |
:106150007093D60888E18093930886EE8093940824 |
:1061600083E0809399085DE750939C0850939D08C5 |
:1061700050939E089093950865E56093960886E491 |
:10618000809397088CED809398088CE380939A080D |
:1061900010929B089AEA9093AE088CEC8093B0081A |
:1061A0001092B2089093B30898E29093AF0890933E |
:1061B000B1081092B40840939F082AE52093A008E4 |
:1061C0004093A10836E03093B50884E68093B60882 |
:1061D0008093B7082093B80888E78093B908909314 |
:1061E000BD088BE48093BA086093BB088093BC0819 |
:1061F0003093BE0888E08093BF084093C0088AE2CD |
:106200008093C10885EF8093C2088CE88093C3080F |
:106210007093C4081092C6081092C70881E4809356 |
:10622000890820938A081092C9081092CA0886E942 |
:106230008093CC085093A20884E38093A308109223 |
:10624000CD081092CE081092CF081092D20881E2A9 |
:106250008093880880E28093D4088FE18093D308EC |
:1062600008950E9428308AE080937B0880E1809323 |
:106270007C0826E020937D089AE59093820888E7C1 |
:1062800080938308909385088093860820938708DD |
:1062900080E280938C088CE38093A4088BE4809345 |
:1062A000A90886E491E6A3E7B4E78093D908909320 |
:1062B000DA08A093DB08B093DC0861E870E084E6BC |
:1062C00098E00E94DA2F8093E5080895CF93DF933A |
:1062D0000E94283088E080937B0830E130937C086E |
:1062E00026E020937D0894E69093820888E78093C7 |
:1062F00083089093850880938608209387083093BD |
:106300008C0886E48093A4088093A908A9EDB8E0DE |
:1063100085E0E9E2F1E0ED01019009928A95E1F76B |
:1063200061E870E0CD01855790400E94DA2F80939C |
:10633000E508DF91CF9108950E94283026E0209350 |
:106340007B088AE080937C0884E080937D0894E653 |
:106350009093820888E780938308909385088093C0 |
:1063600086082093870880E180938C0886E48093D8 |
:10637000A4088093A90885E491E6A3E7B9E7809390 |
:10638000D9089093DA08A093DB08B093DC0861E8A1 |
:1063900070E084E698E00E94DA2F8093E508089583 |
:1063A000F999FECF92BD81BDF89A80B599270895DD |
:1063B000F999FECF1FBA92BD81BD60BD0FB6F894AA |
:1063C000FA9AF99A0FBE089566EC7FE20E94E7A35D |
:1063D00008954EEC5FE20E9421A40895EF92FF928F |
:1063E0000F931F93CF93C82F8150853008F0C3E0DF |
:1063F00082E8C89F8001112482EEE82E8FEFF82EEC |
:10640000E00EF11E61E870E0C7010E94EB2F682FDB |
:1064100098012D593F4F8FB39927AC0142705070AE |
:1064200081FDF9CF32BD21BDF89A80B5861711F0F4 |
:10643000CA0123C08FB399279C012270307081FD5F |
:10644000F9CFF2BCE1BCF89A80B5823611F0C901EF |
:1064500014C082E8C89FC00111244E9726EC3FE289 |
:1064600042E850E0BC0184E698E00E94C2A30E948A |
:106470002F770E94489D81E090E0CF911F910F916E |
:10648000FF90EF900895282F863010F025E003C08C |
:10649000882309F421E020930101F999FECF1FBA66 |
:1064A00082E090E092BD81BD20BD0FB6F894FA9ACB |
:1064B000F99A0FBE0895CF93C82F80916408823651 |
:1064C00009F051C0C63010F0C5E003C0CC2309F478 |
:1064D0004AC00E9412A28091D80882FF07C0809112 |
:1064E0008908843618F080E58093890861E870E0B7 |
:1064F00084E698E00E94DA2F8093E50882E8C89F3E |
:10650000C00111242EEC3FE242E850E064E678E05E |
:106510004E970E94FFA32EEC3FE24CE050E065E670 |
:1065200078E080E590E00E94FFA36CE070E085E6F3 |
:1065300098E00E94DA2F282FF999FECF1FBA8CE538 |
:1065400090E092BD81BD20BD0FB6F894FA9AF99AF9 |
:106550000FBE8C2F0E9443320E942F770E94489DCD |
:1065600081E090E002C080E090E0CF9108956DE47A |
:1065700070E088EE93E00E94EB2F482F8FB39927AD |
:106580009C012270307081FDF9CF85E394E092BDCB |
:1065900081BDF89A80B5841779F48FB399279C014F |
:1065A0002270307081FDF9CF88EE93E092BD81BDFD |
:1065B000F89A80B5813011F0C901089526EC3FE2C8 |
:1065C0004EE450E068EE73E086EE98E00E94C2A3CD |
:1065D00081E090E008958091E6088130A9F46DE4AF |
:1065E00070E086EE98E00E94DA2F809333092EEC5B |
:1065F0003FE24EE450E066EE78E088EE93E00E94E1 |
:10660000FFA381E090E0089580E090E00895CF93AB |
:10661000DF9381E08093E608E6EEF8E08FE01586F0 |
:1066200016861786108A8150349687FFF8CF80E44B |
:106630008093F3088093F4081092F5088093F6088D |
:106640008093F70890EC9093F8081092F9088093E3 |
:10665000FA088093FB081092FC089093FD08909331 |
:10666000FE088093FF08109200098093010990931F |
:106670000209A7EEB8E08CE0EFE2F1E0ED01019055 |
:1066800009928A95E1F76DE470E0CD0101970E94CF |
:10669000DA2F80933309DF91CF910895F999FECFD6 |
:1066A00082E090E092BD81BDF89A80B5282F8630B7 |
:1066B00078F023E0322FF999FECF1FBA82E090E004 |
:1066C00092BD81BD30BD0FB6F894FA9AF99A0FBE0B |
:1066D00020930101822F992708951F93CF93C82FEC |
:1066E000162F863010F0C5E003C0882309F4C1E0FE |
:1066F0008C2F99278230910541F08330910544F425 |
:10670000019731F40E94313105C00E94663102C008 |
:106710000E949C311123E1F06CE070E080E590E094 |
:106720000E94EB2F282FF999FECF8CE590E092BDC7 |
:1067300081BDF89A80B5821759F426EC3FE24CE00F |
:1067400050E060E570E085E698E00E94C2A302C0D8 |
:106750000E9403308C2F0E945B32CF911F910895CD |
:10676000DF92EF92FF920F931F93CF93FF24DF2CC2 |
:10677000EF2C81E190E00E94D031909103019817B5 |
:1067800091F1963169F481E190E00E94D031853138 |
:1067900039F44C9905C06F2D81E090E00E94D8310A |
:1067A0006091030181E190E00E94D83188E190E09E |
:1067B00028E00FB6F894A895809360000FBE209350 |
:1067C00060008CE798E09F938F938CE898E19F930B |
:1067D0008F93E091C005F091C10509950F900F903E |
:1067E0000F900F90FFCF81E090E00E94D031823671 |
:1067F00011F031E0E32E6CE070E080E590E00E9463 |
:10680000EB2FC82FF999FECF8CE590E092BD81BDAA |
:10681000F89A80B58C1711F421E0D22EC1E001E086 |
:1068200010E0EE2029F48C2F0E94EE318823B9F578 |
:1068300091E0F92E1F930F9384EA98E09F938F9332 |
:106840008CE898E19F938F93E091C005F091C1058A |
:1068500009952DB73EB72A5F3F4F2DBF0130110577 |
:1068600021F00230110521F006C00E94313105C02F |
:106870000E94663102C00E949C31DD2059F026EC56 |
:106880003FE24CE050E060E570E085E698E00E9471 |
:10689000C2A302C00E9403308C2F0E945B32CF5FE4 |
:1068A0000F5F1F4FC63008F4BCCFFF2019F083E004 |
:1068B0000E9443320E944E33C82F0E94EE318C2F2B |
:1068C00099279F938F938AEC98E09F938F930CE87E |
:1068D00018E11F930F93E091C005F091C105099550 |
:1068E00081E090E00E94D0312DB73EB72A5F3F4F44 |
:1068F0002DBF8F3F21F00E94B732882399F483EE99 |
:1069000098E09F938F931F930F93E091C005F091B0 |
:10691000C10509950E9407330E94EB320F900F903A |
:106920000F900F90EE2029F062E681E090E00E9447 |
:10693000D8311092630890E0E3EFF8E0CFE0808177 |
:10694000349618160CF49F5FC150C7FFF8CF909390 |
:106950006308892F99279F938F9387EE98E09F93E1 |
:106960008F9384E099E09F938F931F930F93E0910F |
:10697000C005F091C10509950E94500B8DB79EB7D7 |
:1069800008968DBFCF911F910F91FF90EF90DF90F0 |
:106990000895982F2FB7F8943998389A88B1836062 |
:1069A00088B98091B9008C7F8093B9008AE2809386 |
:1069B000B80010927B031092790310927803992308 |
:1069C00079F0E8E7F9E08BE01082118212821382FD |
:1069D00014821582168217828150389687FFF4CF71 |
:1069E00078942FBF089510927B0384E98093BC00B4 |
:1069F00080E88093BC001092BD001092BA00109203 |
:106A0000BB001092B9001092B8001092770380E09A |
:106A10000E94C9341092BB0085E88093BC0080912D |
:106A2000750382608093750308951F920F920FB6CD |
:106A30000F9211242F933F936F937F938F939F9384 |
:106A4000EF93FF9380917B03282F33278F5F8093F1 |
:106A50007B032330310509F40DC1243031055CF48A |
:106A60002130310509F454C0223031050CF091C0B9 |
:106A7000232B71F0DFC22530310509F45CC12530CC |
:106A800031050CF40FC12630310509F419C2D2C208 |
:106A900081E08093770309C0809179038C3090F472 |
:106AA000809179038F5F8093790380917903E82F38 |
:106AB000FF27EE0FFF1FEE0FFF1FEA51F74F8585EF |
:106AC000181654F7809179036CE00E9478A5909392 |
:106AD0007903809181038F5F8093810390913E01C0 |
:106AE000981770F41092810310927403109273033C |
:106AF00085E080937B0380917803880F8D5A04C0D2 |
:106B000080917903880F8E5A8093BB0085E810C16D |
:106B100080917903E82FFF2723E0EE0FFF1F2A95CE |
:106B2000E1F7E858F64F81818093BB0085E88093B8 |
:106B3000BC0080917903E82FFF2793E0EE0FFF1F41 |
:106B40009A95E1F7E858F64F808180FF91C08091D7 |
:106B50007903E82FFF2783E0EE0FFF1F8A95E1F707 |
:106B6000E858F64F8281882329F0809163088730A6 |
:106B700008F476C28091730390917403892B09F015 |
:106B80006FC28091710390917203892B09F068C2E2 |
:106B90006FC08091790321E030E002C0220F331FE3 |
:106BA0008A95E2F78091710390917203282339232B |
:106BB000232B79F080917903E82FFF27EE0FFF1F39 |
:106BC000EE0FFF1FEE0FFF1FE858F64F80E18483A2 |
:106BD0000DC080917903E82FFF27EE0FFF1FEE0F06 |
:106BE000FF1FEE0FFF1FE858F64F148280917903C4 |
:106BF000E82FFF2773E0EE0FFF1F7A95E1F7E858C3 |
:106C0000F64F8481282F332763E0220F331F6A95C4 |
:106C1000E1F780917903E82FFF27EE0FFF1FEE0FBA |
:106C2000FF1FEE0FFF1FE858F64F82818770822BFF |
:106C30008093BB0085E88093BC002091790381E0BC |
:106C400090E002C0880F991F2A95E2F72091730304 |
:106C50003091740382239323892B51F080E799E0CC |
:106C600090937F0380937E0388E080938003F8C134 |
:106C700084E0DDC1E0917E03F0917F0381918093F8 |
:106C8000BB0085E88093BC00F0937F03E0937E0314 |
:106C900080918003815080938003882309F4E0C1B0 |
:106CA00083E0C5C18091B900803351F580917C03A8 |
:106CB000882329F4809179038F5F80937C038091EE |
:106CC0007903E82FFF27EE0FFF1FEE0FFF1FEE0FD8 |
:106CD000FF1FE858F64F838199278F7790708F3781 |
:106CE000910574F480917903E82FFF2733E0EE0FCC |
:106CF000FF1F3A95E1F7E858F64F83818F5F838352 |
:106D000010927B0384E98093BC008AE090E090932A |
:106D10003D0180933C01809179038F5F80937903DB |
:106D200010927B03809175038E7F8093750385EAB3 |
:106D30008093BC0095C18091B9008034C1F18091ED |
:106D40007803E82FFF2723E0EE0FFF1F2A95E1F7D6 |
:106D5000E858F64F83818F778383809178038F5F24 |
:106D600080937803809178038C30A0F010927803A0 |
:106D7000109272031092710380917D038F5F809354 |
:106D80007D038C3038F010927D03809175038D7FE8 |
:106D900080937503809175038160809375031092D1 |
:106DA0007B0384E98093BC001092770382C08091BA |
:106DB0007803E82FFF2793E0EE0FFF1F9A95E1F786 |
:106DC000E858F64F83818068838380917803E82FA9 |
:106DD000FF2783E0EE0FFF1F8A95E1F7E858F64F93 |
:106DE000808180FF40C080917803E82FFF27EE0F5D |
:106DF000FF1FEE0FFF1FEE0FFF1FE858F64F8481B5 |
:106E000099270097D1F0409709F04AC080E799E0B0 |
:106E100090937F0380937E0388E08093800380912A |
:106E20007803E82FFF27EE0FFF1FEE0FFF1FEE0F77 |
:106E3000FF1FE858F64F148233C0809178039927DA |
:106E4000E3E0880F991FEA95E1F78358964F9093F6 |
:106E50007F0380937E039091780380917D03981740 |
:106E6000E1F483E01BC080917803992773E0880FD9 |
:106E7000991F7A95E1F78358964F90937F038093FB |
:106E80007E038091750381FD06C090917803809107 |
:106E90007D03981711F482E001C081E080938003A4 |
:106EA00080918003813011F485E801C085EC8093E6 |
:106EB000BC0080917C038093760310927C03D0C049 |
:106EC000E0917E03F0917F038091BB0080838091ED |
:106ED0007E0390917F03019690937F0380937E03BE |
:106EE00080918003815080938003823010F085EC84 |
:106EF0009BC0813011F485E897C08091750381FFB4 |
:106F00006BC080911D0480FD67C080917803E82FDD |
:106F1000FF2763E0EE0FFF1F6A95E1F7E858F64F91 |
:106F2000868199278C7F9070883F910581F48091AC |
:106F30007803E82FFF27EE0FFF1FEE0FFF1FEE0F66 |
:106F4000FF1FE858F64F8081816080830DC08091DB |
:106F50007803E82FFF27EE0FFF1FEE0FFF1FEE0F46 |
:106F6000FF1FE858F64F108280917803E82FFF2723 |
:106F700033E0EE0FFF1F3A95E1F7E858F64F8681B0 |
:106F8000883F71F480917803E82FFF2723E0EE0F0C |
:106F9000FF1F2A95E1F7E858F64F808186601BC0F5 |
:106FA00080917803E82FFF2793E0EE0FFF1F9A955B |
:106FB000E1F7E858F64F8681893F71F480917803B4 |
:106FC000E82FFF2783E0EE0FFF1F8A95E1F7E858CF |
:106FD000F64F808184608083809178038F5F8093F7 |
:106FE0007803809178038C30A0F01092780310928F |
:106FF00072031092710380917D038F5F80937D03F4 |
:107000008C3038F010927D03809175038D7F8093D2 |
:10701000750310927B0384E98093BC008091750313 |
:107020008160809375031AC08093BC0086E08093D2 |
:107030007B0316C010927B0384E98093BC0080918F |
:1070400075038160809375038AE090E090933D0121 |
:1070500080933C0110927903109278031092770389 |
:10706000FF91EF919F918F917F916F913F912F9120 |
:107070000F900FBE0F901F9018951F93CF93DF9323 |
:10708000182F80915504882321F4809102038823CE |
:1070900019F081E090E09AC01D3008F095C01123EE |
:1070A000B1F0E12FFF2743E0EE0FFF1F4A95E1F714 |
:1070B000E858F64F35978081359688230CF084C0C8 |
:1070C0003897808180FD03C083E090E07FC080918D |
:1070D000700999278B709070029719F084E090E006 |
:1070E00075C067E070E080E799E00E94DA2F909128 |
:1070F0007709891719F085E090E068C080ED97E086 |
:107100000E94611CEC018091750380FD05C0CE01D9 |
:107110000E946A1C8823B9F3112319F48FEF90E0C1 |
:107120000BC0212F33272150304081E090E002C076 |
:10713000880F991F2A95E2F7909374038093730345 |
:10714000A1E0B0E0E8E7F9E040E050E06BE0CD011D |
:10715000042E02C0880F991F0A94E2F7209173034E |
:107160003091740382239323892B11F011821282B0 |
:1071700061504F5F5F4F389667FFE9CF10927903F8 |
:1071800010927B03809175038E7F8093750385EA4F |
:107190008093BC008091750380FD05C0CE010E94E4 |
:1071A0006A1C8823B9F38091730390917403892B2F |
:1071B00029F0CE010E946A1C882311F38091730389 |
:1071C00090917403009711F082E090E0DF91CF91ED |
:1071D0001F9108950F931F93CF93DF93982F809162 |
:1071E0005504882321F480910203882319F081E05B |
:1071F00090E095C09D30A0F4992319F486E090E0CA |
:107200008EC0C92FDD27FE0153E0EE0FFF1F5A95F8 |
:10721000E1F7E858F64F35978081359687FD03C032 |
:1072200082E090E07CC03897808180FD03C083E0DD |
:1072300090E075C080ED97E00E94611C8C01809108 |
:10724000750380FD05C0C8010E946A1C8823B9F33C |
:10725000219721E030E0C90102C0880F991FCA952B |
:10726000E2F79093720380937103D901E8E7F9E0A4 |
:1072700040E050E06BE0CD01042E02C0880F991F62 |
:107280000A94E2F7209171033091720382239323D1 |
:10729000892B11F01182128261504F5F5F4F389637 |
:1072A00067FFE9CF10927803109270091092770966 |
:1072B00010927B03809175038E7F8093750385EA1E |
:1072C0008093BC008091750380FD05C0C8010E94B9 |
:1072D0006A1C8823B9F38091710390917203892B02 |
:1072E00029F0C8010E946A1C882311F3809170095B |
:1072F00099278B709070029719F084E090E00FC08E |
:1073000067E070E080E799E00E94DA2F90917709BA |
:10731000891719F085E090E002C080E090E0DF91ED |
:10732000CF911F910F910895CF93DF9380E021E8D3 |
:107330003FEFCFE1DAE0E9EDF9E0DF01853020F45D |
:1073400011961C921E9202C03183208319821882EA |
:1073500022968F5F12963296833280F38FE790E009 |
:107360009093180A8093170A81E89FEF9093160A6A |
:107370008093150A10921A0A1092190A1092C304E7 |
:107380001092C2041092C5041092C4041092C70453 |
:107390001092C604DF91CF9108951F920F920FB6FD |
:1073A0000F9211240F931F932F933F934F935F934B |
:1073B0006F937F938F939F93AF93BF93CF93DF93FD |
:1073C000EF93FF938091D70882FDC2C04091860061 |
:1073D000509187008091830390918403481B590B3F |
:1073E000809186009091870090938403809383031B |
:1073F000CA018D549440A0918503B0918603835FA8 |
:107400009A4158F4809185038093D809149714F019 |
:107410001092410181E090E096C0A131B1050CF0DD |
:10742000DFC1CA018B5F9040845B914008F086C049 |
:1074300080913F0190914001481B590BE091CD088C |
:10744000EE2351F0FF27EE0FFF1FE752F64F80812A |
:10745000918184369105ECF4FD01EA0FFB1FE752A0 |
:10746000F64F80819181FA01E81BF90BCF01F7FFFC |
:1074700003C0909581959F4F06975CF480915604C8 |
:10748000883C20F480915604865F01C088EC80938C |
:107490005604FD01EA0FFB1FE752F64F80819181F0 |
:1074A0009C01220F331F280F391F240F351F37FF70 |
:1074B00002C02D5F3F4FE901D595C795D595C7957A |
:1074C000CA0101968C179D0714F4219706C04150FC |
:1074D0005040C417D5070CF4219680915604833C84 |
:1074E000E0F08D010A0F1B1FF801E752F64F808173 |
:1074F00091819E01281B390BC90163E070E00E9455 |
:1075000098A5CB01880F991F860F971F015E154F15 |
:10751000D80111969C938E9307C0AA0FBB1FA15E42 |
:10752000B54F11961C921E92E0918503F09186034F |
:10753000EE0FFF1FE752F64FD183C0838091850382 |
:10754000909186030196909386038093850348C1AA |
:107550004091860050918700809187039091880325 |
:10756000481B590B80918600909187009093880367 |
:1075700080938703CA018D54944060911104835F06 |
:107580009A4108F072C06093820380918203843034 |
:1075900008F453C09091D80980918203981709F09C |
:1075A0004CC0509112045B3008F43FC0109241016E |
:1075B0001092110440E05F31C0F0E42FFF27EE0F7E |
:1075C000FF1F9F0123533C4FDF01A752B64F8D9100 |
:1075D0009C91D9018D939C93DF01A15EB54F8D9154 |
:1075E0009C91E151FC4F91838083E42FFF27EE0FA4 |
:1075F000FF1F9F012752364FDF01A757BC4F8D91C8 |
:107600009C91D90111969C938E93DF01A555BC4F97 |
:107610008D919C91E15EF54F91838083842F8F5FE4 |
:10762000482F813140F280931104809112048F3FE2 |
:1076300079F08F5F809312040BC08091120485361D |
:1076400020F08AE08093120402C010921204289A5B |
:1076500081E08093110480915504882309F0C0C013 |
:10766000809182038093D809BBC0613108F098C033 |
:10767000CA018B5F9040845B914008F090C080917C |
:107680003F0190914001481B590BE62FFF27EE0F59 |
:10769000FF1FE757FC4F80819181FA01E81BF90B2E |
:1076A000CF0105960B9720F5E091CD08EE2351F020 |
:1076B000FF27EE0FFF1FE752F64F8081918184363E |
:1076C0009105B4F4809112048A3120F0809156041F |
:1076D000865F05C08B3028F0809156048E5F8093C2 |
:1076E000560480915604893C18F088EC8093560427 |
:1076F000E62FFF27EE0FFF1FE757FC4F8081918198 |
:107700009C01220F331F280F391F240F351F37FF0D |
:1077100002C02D5F3F4FE901D595C795D595C79517 |
:10772000CA0101968C179D0714F4219706C0415099 |
:107730005040C417D5070CF42196809156048E3B17 |
:10774000D8F0E62FFF27EE0FFF1FDF01A757BC4F32 |
:107750008D919C919E01281B390BC90163E070E05B |
:107760000E9498A5CB01880F991F860F971FE5559A |
:10777000FC4F9183808308C0E62FFF27EE0FFF1F89 |
:10778000E555FC4F1182108280911104E82FFF27EC |
:10779000EE0FFF1FE757FC4FD183C08301C0289A2B |
:1077A00080911104843120F48F5F8093110418C0FC |
:1077B0008431B1F4289A8EE18093110420E1CFE165 |
:1077C000DAE0ADECB3E0E9EDF9E08D919D919183C4 |
:1077D00080833296198218822296215027FFF5CF96 |
:1077E000FF91EF91DF91CF91BF91AF919F918F91D9 |
:1077F0007F916F915F914F913F912F911F910F91C9 |
:107800000F900FBE0F901F9018958091E50A9091F0 |
:10781000E60A9093C0078093BF078091E70A909192 |
:10782000E80A9093C2078093C1078091BB0A9091A8 |
:10783000BC0A97FD039695958795959587959093A6 |
:10784000C4078093C3078091CB0A9091CC0A97FD1F |
:10785000039695958795959587959093C607809300 |
:10786000C5078091C2049091C304209149033091CF |
:107870004A03821B930B9093C8078093C70780919C |
:10788000500490915104A0915204B0915304BC0152 |
:10789000CD012AE030E040E050E00E94CDA53093D9 |
:1078A000CA072093C9078091040890910508909316 |
:1078B000CC078093CB078091910190919201909396 |
:1078C000D0078093CF078091260190912701909354 |
:1078D000D2078093D1078091560499279093D407BB |
:1078E0008093D3078091730A9091740A9093D6077E |
:1078F0008093D5078091790999279093D807809331 |
:10790000D7078091810999279093DA078093D90747 |
:107910008091890999279093DC078093DB078091F8 |
:10792000910999279093DE078093DD0780911F03CB |
:10793000909120039093E8078093E70780913A04A1 |
:1079400090913B049093EA078093E90780914C0B58 |
:1079500090914D0B9093EC078093EB078091500B27 |
:107960009091510B9093EE078093ED0780914C041A |
:1079700090914D04A0914E04B0914F04BC01CD01F3 |
:107980002AE030E040E050E00E94CDA53093F007BF |
:107990002093EF0780916E0490916F049093F60707 |
:1079A0008093F5078091520B99279093FA07809363 |
:1079B000F90780912805909129059093FC07809301 |
:1079C000FB0780912605909127059093FE078093F1 |
:1079D000FD078091D905882321F48091DA05882359 |
:1079E00021F08091BE07816003C08091BE078E7F29 |
:1079F0008093BE070895EF92FF921F93CF93DF937A |
:107A0000182F7B0180915504882371F58091030123 |
:107A1000893111F4299801C0299A11501F3FE9F0CA |
:107A2000F0922703E0922603E701809126039091CC |
:107A30002703892B11F4209781F380912A0388234F |
:107A4000A1F310922A038091260390912703892B9A |
:107A500009F421970E9428A2E8CF8091030189317F |
:107A600011F4299A01C02998DF91CF911F91FF90BD |
:107A7000EF900895CF93DF9310927A0080914D0399 |
:107A800090914E0390937E0A80937D0A80914B03E0 |
:107A900090914C0390936F0A80936E0A80914903F2 |
:107AA00090914A039093C10A8093C00A20914503A4 |
:107AB00030914603C901880F991F880F991F820FC3 |
:107AC000931F820F931F9093BC0A8093BB0A20914F |
:107AD000470330914803C901880F991F880F991FE8 |
:107AE000820F931F820F931F9093CC0A8093CB0A2F |
:107AF0008FEC80937A00A7E5B4E0C9E6D8E097E080 |
:107B00008991E82FFF27EE0FFF1FE752F64F0190F4 |
:107B1000F081E02DE158FF4F1E161F061CF0E0E03B |
:107B2000F0E005C0EF3FF10514F0EFEFF0E08C91CD |
:107B3000282F3327E217F30714F4815004C02E17BF |
:107B40003F0714F48F5F8C939150119697FFD8CF15 |
:107B50008091A5089927AA27BB27BC01CD0124EC59 |
:107B600039E040E050E00E9459A5DC01CB01809350 |
:107B7000890190938A01A0938B01B0938C0180912D |
:107B8000A6089927AA27BB27BC01CD010E9459A5A9 |
:107B9000DC01CB018093850190938601A09387013E |
:107BA000B0938801DF91CF910895A0E0B0E0EBEDB4 |
:107BB000FDE30C94ECA5782E91E0692ECC24DD2415 |
:107BC00056014601E6011092D905D092BD04C0923B |
:107BD000BC04D092BB04C092BA04D092B704C09245 |
:107BE000B6041092B504D092C704C092C604D092D5 |
:107BF000C504C092C404D092C304C092C2041092BF |
:107C00006B0110926A0110923E030E943A3D84E695 |
:107C100090E00E94831C0E943A3D8091710880FF91 |
:107C200014C080911C0190911D01875B934058F412 |
:107C300080911C0190911D018E5E924020F08091F8 |
:107C40003E03882311F00E94C42000911C01109172 |
:107C50001D0187B58B5F87BD87B5809588BD8FE196 |
:107C6000E82E8AE090E00E94831C80914903909165 |
:107C70004A03C80ED91E80914D0390914E03A80E61 |
:107C8000B91E80914B0390914C03880E991E8091F0 |
:107C9000040890910508C80FD91FEA94E7FEE1CFC8 |
:107CA00080911C0190911D01825F934080F480912E |
:107CB0001C0190911D01459750F080911C019091FD |
:107CC0001D01081B190B109317010093160187B5AE |
:107CD000855087BD87B5809588BD9501205F3F4F52 |
:107CE00036952795369527953093C7042093C6047B |
:107CF000C401409696958795969587959093C5046F |
:107D00008093C40440E150E0C40ED51EB5E0D69483 |
:107D1000C794BA95E1F7D092C304C092C204C40FCD |
:107D2000D51FA5E0D695C795AA95E1F7D093B704DE |
:107D3000C093B6049093C1048093C0043093BF04F1 |
:107D40002093BE0452E07516C9F58091BB0A90914C |
:107D5000BC0A97FF03C0909581959F4F6CE070E03F |
:107D60000E9498A59B017093BD046093BC04809110 |
:107D7000CB0A9091CC0A97FF03C0909581959F4FB5 |
:107D80006CE070E00E9498A57093BB046093BA0405 |
:107D9000B90184E090E00E94E9316091BA047091E9 |
:107DA000BB0486E090E00E94E9316091B6047091D6 |
:107DB000B70488E090E00E94E9314FC084E090E091 |
:107DC0000E94E4319093BD048093BC0486E090E06F |
:107DD0000E94E4319C019093BB048093BA0480918B |
:107DE000BC049091BD048150984018F42150384053 |
:107DF000A0F185E299E09F938F938CE898E19F939F |
:107E00008F93E091C005F091C10509958091BB0A5F |
:107E10009091BC0A97FF03C0909581959F4F6CE0AD |
:107E200070E00E9498A57093BD046093BC0480919B |
:107E3000CB0A9091CC0A97FF03C0909581959F4FF4 |
:107E40006CE070E00E9498A57093BB046093BA0444 |
:107E500066240F900F900F900F9012BC11BC1092DF |
:107E60007E0A10927D0A10926F0A10926E0A10928A |
:107E7000C10A1092C00A88EC90E00E94831C809195 |
:107E80004503909146039C01220F331F220F331F9D |
:107E9000280F391F280F391F3093BC0A2093BB0AC3 |
:107EA00080914703909148038C01000F111F000F30 |
:107EB000111F080F191F080F191F1093CC0A0093E8 |
:107EC000CB0A80918008C82EDD24EE24FF244427AD |
:107ED00037FD4095542FC701B6010E9459A54B01AB |
:107EE0005C016093B0047093B1048093B2049093EA |
:107EF000B3049801442737FD4095542FC701B601BC |
:107F00000E9459A5DC01CB018093A8049093A90499 |
:107F1000A093AA04B093AB04809290049092910431 |
:107F2000A0929204B0929304809388049093890461 |
:107F3000A0938A04B0938B04109280041092810461 |
:107F40001092820410928304009191011091920189 |
:107F500010936F0400936E0484E690E090938E017A |
:107F600080938D0182E390E0909327038093260312 |
:107F70008091A5089927AA27BB27BC01CD0124EC35 |
:107F800039E040E050E00E9459A5DC01CB01885661 |
:107F9000954CAF4FBF4F8093890190938A01A09376 |
:107FA0008B01B0938C018091A6089927AA27BB2743 |
:107FB000BC01CD010E9459A5DC01CB018856954C2E |
:107FC000AF4FBF4F8093850190938601A0938701A7 |
:107FD000B09388011092480110924701C801AA2766 |
:107FE00097FDA095BA2F2091430130914401409113 |
:107FF000450150914601BC01CD010E9459A5DC010B |
:10800000CB018093C70A9093C80AA093C90AB09382 |
:10801000CA0A10926B0410926A040E942F7777208C |
:1080200029F080911D04846080931D048FEF80935C |
:10803000470B1092480B80E28093490BC7E5D4E0D0 |
:10804000A9E6B8E077E0E72E8D91E82FFF27EE0F45 |
:10805000FF1FE752F64F8081918181588993EA94FE |
:10806000E7FEF2CF84E680935604809124038823B0 |
:1080700011F0579A17C08091D608992780FF05C044 |
:1080800082FF03C080EE9EE202C080E091E1909307 |
:108090000A018093090181E0809311010E94241D4F |
:1080A0000E94241D8091B0049091B104A091B2046B |
:1080B000B091B304E0904301F09044010091450178 |
:1080C00010914601BC01CD01A80197010E94CDA5E8 |
:1080D00059016A018091A8049091A904A091AA0471 |
:1080E000B091AB04BC01CD01A80197010E94CDA5C0 |
:1080F000B901C5010E9479A38C010E94A17A9C015B |
:108100009093880A8093870A8091B6049091B7046F |
:10811000AA2797FDA095BA2F6DE0880F991FAA1F77 |
:10812000BB1F6A95D1F78050904FAF43B0404427B2 |
:1081300037FD4095542FBC01CD010E94CDA5C9014A |
:1081400080509E4F9093B7048093B604053111057B |
:108150000CF06624772081F080911504882361F06B |
:10816000C9018C5890408234910530F08091D90536 |
:1081700080628093D90566248091C6049091C704DB |
:1081800080569940815C9B4228F08091D90581609E |
:108190008093D9058091C4049091C504805699407C |
:1081A000815C9B4228F08091D90582608093D9053B |
:1081B0008091C2049091C3048C529140895795409C |
:1081C00028F08091D90584608093D9058091BC0402 |
:1081D0009091BD048C529140835C914028F0809135 |
:1081E000D90588608093D9058091BA049091BB0429 |
:1081F0008C529140835C914028F08091D905806138 |
:108200008093D9058091B6049091B7048050924034 |
:108210008355914028F08091D90580628093D905DB |
:108220008091D9058111662486E4809380010E94A3 |
:10823000489D82E00E94AE9E80911E0190911F0198 |
:10824000A0912001B0912101809306089093070826 |
:10825000A0930808B093090810923D0310923C03C4 |
:1082600010923F0310924003109241031092420378 |
:1082700010927004109271041092720410927304A0 |
:108280001092F8071092F7070E948C20862D9927EC |
:10829000EEE0CDB7DEB70C9408A6A3E1B0E0E3E5CD |
:1082A000F1E40C94E8A58091C2049091C30420915C |
:1082B000490330914A03821B930B9093C10A809328 |
:1082C000C00A809153039091540397FD07969C0137 |
:1082D00053E0359527955A95E1F730937E0A209320 |
:1082E0007D0A809151039091520397FD079643E0D8 |
:1082F000959587954A95E1F790936F0A80936E0A5A |
:1083000030938A0A2093890A9093810A8093800A85 |
:108310008091BB0A9091BC0AAC01440F551F480FD5 |
:10832000591F2091450330914603C901880F991FB9 |
:10833000880F991F820F931F820F931F480F591F99 |
:1083400057FF02C04D5F5F4F55954795559547952F |
:108350005093BC0A4093BB0A8091CB0A9091CC0AFF |
:10836000AC01440F551F480F591F2091470330910E |
:108370004803C901880F991F880F991F820F931F07 |
:10838000820F931F480F591F57FF02C04D5F5F4F69 |
:1083900055954795559547955093CC0A4093CB0AF0 |
:1083A0002091450330914603C901880F991F880F1A |
:1083B000991F820F931F820F931F9C01442737FD43 |
:1083C0004095542F8091A0049091A104A091A20403 |
:1083D000B091A304820F931FA41FB51F8093A00424 |
:1083E0009093A104A093A204B093A3042091470307 |
:1083F00030914803C901880F991F880F991F820F78 |
:10840000931F820F931F9C01442737FD4095542FE3 |
:1084100080919C0490919D04A0919E04B0919F0432 |
:10842000820F931FA41FB51F80939C0490939D04FB |
:10843000A0939E04B0939F048091930A9091940A14 |
:108440002091450330914603820F931F9093940A25 |
:108450008093930A8091C30A9091C40A20914703A4 |
:1084600030914803820F931F9093C40A8093C30AEC |
:108470008091B8049091B90401969093B9048093C7 |
:10848000B80480910408909105082091B6043091B9 |
:10849000B704821B930B9C01442737FD4095542F52 |
:1084A0008091980490919904A0919A04B0919B04B2 |
:1084B000820F931FA41FB51F809398049093990473 |
:1084C000A0939A04B0939B048FEC80937A0010924F |
:1084D0001801209188043091890440918A045091B8 |
:1084E0008B0429873A874B875C8729543B46414058 |
:1084F00050402CF028E43BE641E050E00DC0898577 |
:108500009A85AB85BC85885B9449AE4FBF4F4CF4D0 |
:1085100028EB34E94EEF5FEF2D833E834F8358877E |
:1085200008C089859A85AB85BC858D839E83AF8382 |
:10853000B887209190043091910440919204509119 |
:1085400093042D873E874F87588B29543B464140E3 |
:1085500050402CF028E43BE641E050E00DC08D8512 |
:108560009E85AF85B889885B9449AE4FBF4F4CF468 |
:1085700028EB34E94EEF5FEF29833A834B835C832A |
:1085800008C08D859E85AF85B88989839A83AB8322 |
:10859000BC83A091C00AB091C10ABB8BAA8BFD011C |
:1085A000CF01AA2797FDA095BA2FA0908004B09084 |
:1085B0008104C0908204D0908304A80EB91ECA1E04 |
:1085C000DB1EA0928004B0928104C0928204D092FB |
:1085D0008304E090C70AF090C80A0091C90A10917C |
:1085E000CA0AE80EF91E0A1F1B1FE092C70AF09282 |
:1085F000C80A0093C90A1093CA0AF0913904F98B8A |
:10860000FF2309F098C180913804882309F093C1B1 |
:108610008091B70A86FF8FC180916E0A90916F0A90 |
:10862000AA2797FDA095BA2FBC01CD0129813A81D7 |
:108630004B815C810E9459A59B01AC0197FF04C04E |
:108640002150384F4F4F5F4F6BE055954795379509 |
:1086500027956A95D1F780916A01682E772488243E |
:108660009924CA01B901A40193010E9459A5DC0112 |
:10867000CB018093D2049093D304A093D404B093FD |
:10868000D504B7FF04C08150904FAF4FBF4F1C01BE |
:108690002D013CE055944794379427943A95D1F7AF |
:1086A0002092D2043092D3044092D4045092D50444 |
:1086B00080917D0A90917E0AAA2797FDA095BA2FF6 |
:1086C000BC01CD012D813E814F8158850E9459A565 |
:1086D00097FF04C06150784F8F4F9F4F2BE09595C7 |
:1086E0008795779567952A95D1F7A40193010E9404 |
:1086F00059A5DC01CB018093D6049093D704A093B5 |
:10870000D804B093D904B7FF04C08150904FAF4F45 |
:10871000BF4F9C01AD018CE0559547953795279546 |
:108720008A95D1F72093D6043093D7044093D80488 |
:108730005093D9048091D2049091D3049093660A07 |
:108740008093650A8091D6049091D70490936A0A29 |
:108750008093690A22193309440955092093D604E4 |
:108760003093D7044093D8045093D904E20EF31EFB |
:10877000041F151FE092C70AF092C80A0093C90AA5 |
:108780001093CA0A809169018823B1F457FF04C08D |
:108790002F5F3F4F4F4F5F4F559547953795279523 |
:1087A000A21AB30AC40AD50AA0928004B092810426 |
:1087B000C0928204D09283042A893B8979010027E0 |
:1087C000F7FC0095102F8091D6049091D704A091CA |
:1087D000D804B091D904E80EF91E0A1F1B1FC80166 |
:1087E000B70129813A814B815C810E9459A59B0187 |
:1087F000AC0197FF04C02150384F4F4F5F4FBBE093 |
:108800005595479537952795BA95D1F780916B0186 |
:10881000A82EBB24CC24DD24CA01B901A6019501F0 |
:108820000E9459A5DC01CB018093CA049093CB042C |
:10883000A093CC04B093CD04B7FF04C08150904FF7 |
:10884000AF4FBF4F3C014D01ACE0959487947794B6 |
:108850006794AA95D1F76092CA047092CB04809273 |
:10886000CC049092CD04C801B7012D813E814F8187 |
:1088700058850E9459A597FF04C06150784F8F4FCB |
:108880009F4FFBE09595879577956795FA95D1F77A |
:10889000A60195010E9459A5DC01CB018093CE046D |
:1088A0009093CF04A093D004B093D104B7FF04C039 |
:1088B0008150904FAF4FBF4FAC01BD01ECE07595BB |
:1088C000679557954795EA95D1F74093CE04509315 |
:1088D000CF046093D0047093D1042A893B8937FF79 |
:1088E00003C0309521953F4F21343105E4F1D40187 |
:1088F000C30197FE07C0B095A095909581959F4FB5 |
:10890000AF4FBF4F81389105A105B10584F4DB015C |
:10891000CA0177FF07C0B095A095909581959F4FAC |
:10892000AF4FBF4F81389105A105B105E4F081E05B |
:1089300080936C0418C010926A0A1092690A10920F |
:10894000660A1092650A1092CE041092CF0410921B |
:10895000D0041092D1041092CA041092CB04109249 |
:10896000CC041092CD048091CE049091CF04A091BC |
:10897000D004B091D104BC01CD0124E630E040E048 |
:1089800050E00E94CDA5E090CA04F090CB04E21A1A |
:10899000F30AF0927C0AE0927B0A8091CA049091DB |
:1089A000CB04A091CC04B091CD04BC01CD0124E650 |
:1089B00030E040E050E00E94CDA5DA01C9012091ED |
:1089C000CE043091CF048C01021B130B1093710A5B |
:1089D0000093700A8091430190914401A091450158 |
:1089E000B0914601BC01CD0128E631E040E050E005 |
:1089F0000E9459A52091C70A3091C80A4091C90A1E |
:108A00005091CA0A261737074807590764F0261BF2 |
:108A1000370B480B590B2093C70A3093C80A409371 |
:108A2000C90A5093CA0A2091C70A3091C80A4091D6 |
:108A3000C90A5091CA0A57FF0CC0260F371F481F9A |
:108A4000591F2093C70A3093C80A4093C90A50930C |
:108A5000CA0A60916E0A70916F0A6E0D7F1D9B01AC |
:108A6000442737FD4095542F8091840490918504CC |
:108A7000A0918604B0918704820F931FA41FB51F95 |
:108A80008093840490938504A0938604B093870414 |
:108A900080913E0490913F04681B790BCB01AA277B |
:108AA00097FDA095BA2F29853A854B855C85820F65 |
:108AB000931FA41FB51F8093880490938904A093EB |
:108AC0008A04B0938B04C0908501D0908601E09019 |
:108AD0008701F0908801C816D906EA06FB06C4F49F |
:108AE00088EA91E6A0E0B0E08C199D09AE09BF09C3 |
:108AF0008093880490938904A0938A04B0938B0494 |
:108B00008093840490938504A0938604B093870493 |
:108B100022273327A9012C193D094E095F098091AD |
:108B2000880490918904A0918A04B0918B048217E3 |
:108B30009307A407B507B4F4D701C601885A914634 |
:108B4000A040B0408093880490938904A0938A0445 |
:108B5000B0938B048093840490938504A09386043F |
:108B6000B093870460917D0A70917E0A600F711F37 |
:108B70009B01442737FD4095542F80918C049091A0 |
:108B80008D04A0918E04B0918F04820F931FA41FB7 |
:108B9000B51F80938C0490938D04A0938E04B093A2 |
:108BA0008F0480913C0490913D04681B790BCB01AC |
:108BB000AA2797FDA095BA2F2D853E854F85588908 |
:108BC000820F931FA41FB51F80939004909391046C |
:108BD000A0939204B0939304E0908901F0908A01ED |
:108BE00000918B0110918C01E816F9060A071B070A |
:108BF000C4F488EA91E6A0E0B0E08E199F09A00BCA |
:108C0000B10B8093900490939104A0939204B0933D |
:108C1000930480938C0490938D04A0938E04B0935E |
:108C20008F0422273327A9012E193F09400B510B2E |
:108C30008091900490919104A0919204B09193043A |
:108C400082179307A407B507B4F4D801C701885A5F |
:108C50009146A040B0408093900490939104A093DB |
:108C60009204B093930480938C0490938D04A0930A |
:108C70008E04B0938F048091800490918104A09120 |
:108C80008204B09183048093940490939504A093FC |
:108C90009604B09397048091900490919104A091D0 |
:108CA0009204B09193048093B0049093B104A09384 |
:108CB000B204B093B3048091880490918904A09188 |
:108CC0008A04B0918B048093A8049093A904A09384 |
:108CD000AA04B093AB0480918C0490918D04A09170 |
:108CE0008E04B0918F048093AC049093AD04A09354 |
:108CF000AE04B093AF048091840490918504A09158 |
:108D00008604B09187048093A4049093A504A09353 |
:108D1000A604B093A704809124019091250197FDAA |
:108D2000079633E0959587953A95E1F790937E0AFB |
:108D300080937D0A809122019091230197FD0796EF |
:108D400023E0959587952A95E1F790936F0A809394 |
:108D50006E0A80914D0390914E030F9734F488E191 |
:108D60009CEF90937E0A80937D0A80914D039091B1 |
:108D70004E03079734F480E398EF90937E0A809334 |
:108D80007D0A80914D0390914E03815D974034F0B0 |
:108D900088EE93E090937E0A80937D0A80914D0344 |
:108DA00090914E03805E974034F080ED97E0909371 |
:108DB0007E0A80937D0A80914B0390914C030F971C |
:108DC00034F488E19CEF90936F0A80936E0A80914F |
:108DD0004B0390914C03079734F480E398EF909302 |
:108DE0006F0A80936E0A80914B0390914C03815DD2 |
:108DF000974034F088EE93E090936F0A80936E0A68 |
:108E000080914B0390914C03805E974034F080ED4D |
:108E100097E090936F0A80936E0A609178016623C1 |
:108E200009F4AEC040912401509125018091DA04EB |
:108E30009091DB04481B590B5093E1044093E004EC |
:108E40002091240130912501280F391F37FF02C0DE |
:108E50002F5F3F4F359527953093DB042093DA043D |
:108E6000413851051CF080E890E005C040585F4F44 |
:108E700034F480E89FEF9093E1048093E004409104 |
:108E80002201509123018091DC049091DD04481B64 |
:108E9000590B5093DF044093DE042091220130915E |
:108EA0002301280F391F37FF02C02F5F3F4F359531 |
:108EB00027953093DD042093DC04413851051CF0E4 |
:108EC00080E890E005C040585F4F34F480E89FEFA1 |
:108ED0009093DF048093DE04462F55278091E004B1 |
:108EE0009091E104849FB001859F700D949F700D57 |
:108EF00011249B0177FF02C0215F3F4FB4E03595FD |
:108F00002795BA95E1F780917D0A90917E0A820FAC |
:108F1000931F90937E0A80937D0A8091DE04909146 |
:108F2000DF04849F9001859F300D949F300D1124A4 |
:108F3000A90137FF02C0215F3F4FA4E03595279577 |
:108F4000AA95E1F780916E0A90916F0A820F931FA4 |
:108F500090936F0A80936E0A80912401909125016D |
:108F6000860F971F90932501809324018091220101 |
:108F700090912301840F951F9093230180932201E8 |
:108F80000091800A1091810A8091650A9091660A89 |
:108F9000101611065CF59C0197FF04C022273327A9 |
:108FA000281B390BC901AA2797FDA095BA2F20913C |
:108FB0006901332744275527BC01CD010E9459A5DB |
:108FC0009B01AC0197FF04C0215C3F4F4F4F5F4FA7 |
:108FD000F6E05595479537952795FA95D1F7809105 |
:108FE0007B0A90917C0A820F931F27C097FF03C0D2 |
:108FF000909581959F4FAA2797FDA095BA2F209114 |
:109000006901332744275527BC01CD010E9459A58A |
:109010009B01AC0197FF04C0215C3F4F4F4F5F4F56 |
:10902000E6E05595479537952795EA95D1F78091D4 |
:109030007B0A90917C0A821B930B90937C0A80930D |
:109040007B0AE090890AF0908A0A8091690A9091DF |
:109050006A0A1E141F045CF59C0197FF04C02227B6 |
:109060003327281B390BC901AA2797FDA095BA2FD2 |
:1090700020916901332744275527BC01CD010E9467 |
:1090800059A59B01AC0197FF04C0215C3F4F4F4F96 |
:109090005F4F76E055954795379527957A95D1F7A7 |
:1090A0008091700A9091710A820F931F27C097FFD9 |
:1090B00003C0909581959F4FAA2797FDA095BA2F41 |
:1090C00020916901332744275527BC01CD010E9417 |
:1090D00059A59B01AC0197FF04C0215C3F4F4F4F46 |
:1090E0005F4F66E055954795379527956A95D1F777 |
:1090F0008091700A9091710A821B930B9093710A70 |
:109100008093700A8091B70A87FF44C0398933235E |
:1091100009F040C0809138048823E1F541E0E4166D |
:1091200041E0F4064CF080917D0A90917E0A8E0D0C |
:109130009F1D805091400DC050E0E5165FEFF50691 |
:1091400064F480917D0A90917E0A8E0D9F1D80505F |
:109150009F4F90937E0A80937D0A81E0013018072B |
:109160004CF080916E0A90916F0A800F911F805091 |
:1091700091400CC09FEF0030190764F480916E0A93 |
:1091800090916F0A800F911F80509F4F90936F0AAC |
:1091900080936E0AE2E1CD5E0C9404A680915504A2 |
:1091A000882329F580911D048C7F80931D04809174 |
:1091B0001C048F7D80931C04AEEDB5E0E8E7F9E078 |
:1091C0009BE080910203882309F48C938D91818325 |
:1091D00012829150389697FFF4CF80910203882332 |
:1091E00059F08091020381508093020305C0809161 |
:1091F0001D04816080931D0480917703882319F0FA |
:1092000010927703089580937B03809175038E7F7E |
:109210008093750385EA8093BC000895882319F430 |
:1092200080E090E00895E82FFF27EE0FFF1FE75240 |
:10923000F64F8081918181589F4F8F3F910521F09A |
:109240001CF08FEF90E004C097FF02C080E090E038 |
:1092500099270895CF93DF93A7E5B4E0C9E6D8E056 |
:1092600057E08991E82FFF27EE0FFF1FE752F64FD7 |
:109270000190F081E02DE158FF4FEF3FF10521F023 |
:109280001CF0EFEFF0E004C0F7FF02C0E0E0F0E018 |
:10929000893111F4EC931BC04C91242F3327E21732 |
:1092A000F307A9F0CF01821B930B97FD03969595C9 |
:1092B000879595958795242F280F2C93822F992792 |
:1092C000E817F90714F4215001C02F5F2C93515077 |
:1092D000119657FFC6CF80917308883F38F0EFEFA3 |
:1092E000F0E0E81BF109E95AFB4F808180937D0192 |
:1092F00080917D01882329F0843618F084E68093DC |
:109300007D0180917508883F38F0EFEFF0E0E81BB1 |
:10931000F109E95AFB4F808180937C0180917C01A7 |
:10932000882329F0843618F084E680937C018091AC |
:109330008208883F38F0EFEFF0E0E81BF109E95AC6 |
:10934000FB4F808180937701809177018B3010F4FF |
:109350008AE002C08F3F11F4809377018091AF08BB |
:10936000883F38F0EFEFF0E0E81BF109E95AFB4FD6 |
:1093700080818093950A8091950A863010F485E06B |
:1093800002C08F3F11F48093950A8091B108883F05 |
:1093900038F0EFEFF0E0E81BF109E95AFB4F80816C |
:1093A0008093BE0A8091BE0A863010F485E002C028 |
:1093B0008F3F11F48093BE0A80919C08873F19F477 |
:1093C000429905C006C0863F31F4439B02C08CE839 |
:1093D00015C086E413C0883F38F0EFEFF0E0E81BDB |
:1093E000F109E95AFB4F80818093920A8091920A99 |
:1093F000893110F488E102C08F3F11F48093920A02 |
:1094000080919D08873F19F4429905C006C0863FA8 |
:1094100031F4439B02C08CE815C086E413C0883F3A |
:1094200038F0EFEFF0E0E81BF109E95AFB4F8081DB |
:1094300080936B0A80916B0A893110F488E102C035 |
:109440008F3F11F480936B0A80919E08883F38F01B |
:10945000EFEFF0E0E81BF109E95AFB4F80818093C0 |
:109460009B0A80919B0A893110F488E102C08F3FEA |
:1094700011F480939B0A809174080E940E49809396 |
:10948000330480917708883F38F0EFEFF0E0E81B75 |
:10949000F109E95AFB4F808180937B018091790823 |
:1094A000883F38F0EFEFF0E0E81BF109E95AFB4F95 |
:1094B00080818093790180918108883F38F0EFEFB7 |
:1094C000F0E0E81BF109E95AFB4F808180937A01B3 |
:1094D00080918308883F38F0EFEFF0E0E81BF10956 |
:1094E000E95AFB4F80818093760180918408883F00 |
:1094F00038F0EFEFF0E0E81BF109E95AFB4F80810B |
:109500008093780180918508883F38F0EFEFF0E094 |
:10951000E81BF109E95AFB4F808180937501809126 |
:109520008608883F38F0EFEFF0E0E81BF109E95AD0 |
:10953000FB4F80818093740180918C08883F38F0C4 |
:10954000EFEFF0E0E81BF109E95AFB4F80818093CF |
:10955000720180918D08883F38F0EFEFF0E0E81B52 |
:10956000F109E95AFB4F80818093320480918E0883 |
:10957000883F38F0EFEFF0E0E81BF109E95AFB4FC4 |
:1095800080818093310480918F08883F38F0EFEF1D |
:10959000F0E0E81BF109E95AFB4F80818093300429 |
:1095A00080919008883F38F0EFEFF0E0E81BF10978 |
:1095B000E95AFB4F808180932F048091AA08883F4D |
:1095C00038F0EFEFF0E0E81BF109E95AFB4F80813A |
:1095D00080932E048091AB08883F38F0EFEFF0E0E5 |
:1095E000E81BF109E95AFB4F808180932D0480919B |
:1095F000AC08883F38F0EFEFF0E0E81BF109E95ADA |
:10960000FB4F808180932C048091AD08883F38F017 |
:10961000EFEFF0E0E81BF109E95AFB4F80818093FE |
:109620002B0480919108883F38F0EFEFF0E0E81BC1 |
:10963000F109E95AFB4F8081809370018091950870 |
:10964000883F38F0EFEFF0E0E81BF109E95AFB4FF3 |
:10965000808180936F0180919208883F38F0EFEF0E |
:10966000F0E0E81BF109E95AFB4F808180936E011D |
:1096700080919608883F38F0EFEFF0E0E81BF109A1 |
:10968000E95AFB4F808180936D0180919F08883F4C |
:1096900038F0EFEFF0E0E81BF109E95AFB4F808169 |
:1096A00080936C018091A208883F38F0EFEFF0E0E2 |
:1096B000E81BF109E95AFB4F808180936B0180918F |
:1096C000A308883F38F0EFEFF0E0E81BF109E95A12 |
:1096D000FB4F808180936A018091A408883F38F015 |
:1096E000EFEFF0E0E81BF109E95AFB4F808180932E |
:1096F00069018091CC08883F38F0EFEFF0E0E81B7B |
:10970000F109E95AFB4F808180937A0A90913205E2 |
:10971000992321F080917A0A981720F080917A0A93 |
:10972000882311F490937A0A809171088093B70A84 |
:109730008091D70880939A0A8091A908883F38F0D1 |
:10974000EFEFF0E0E81BF109E95AFB4F80818093CD |
:1097500068018091C508883F38F0EFEFF0E0E81B22 |
:10976000F109E95AFB4F80818093CE0A8091720102 |
:10977000282F33272F5F3F4F8CE398E2B9010E94D7 |
:1097800098A570937F0160937E0180917F088093FC |
:10979000BF0A80917E088093820AE091C708EE2379 |
:1097A00009F449C081E080932A04FF27EE0FFF1FD0 |
:1097B000E752F64F80819181805C9F4F14F41092A4 |
:1097C0002A048091800120912A04821721F183309C |
:1097D000F8F43091AF01222351F08CED95E0909395 |
:1097E000270380932603332369F48EE209C088ECB3 |
:1097F00090E09093270380932603332319F487E1A5 |
:109800008093AF0185E0809340042093800103C0E2 |
:1098100081508093800180910E0B90910F0B97FFE8 |
:109820000FC080912A04882359F08091D90580685F |
:109830008093D90505C0E0932A048AE080938001D3 |
:1098400080910E0B90910F0B97FF1DC080915504D6 |
:109850008823C9F080912A048823A9F080910B0104 |
:1098600090910C018F5F9F4F71F488E99AE3909378 |
:1098700027038093260380E094EA90930C01809361 |
:109880000B0110922A0480912A04882321F08091F0 |
:109890001C04816003C080911C048E7F80931C0493 |
:1098A000DF91CF91089580917A08882301F5609126 |
:1098B0003A0470913B0477FF02C06D5F7F4F75954E |
:1098C0006795759567954091260150912701809184 |
:1098D0000201282F3327649FC001659F900D749F5C |
:1098E000900D1124B9010E9484A5CB0101C09927D4 |
:1098F00090938401809383018091830190918401EE |
:109900008734910538F486E490E090938401809345 |
:10991000830108958F3A910530F08FEA90E090939B |
:109920008401809383010895A8E1B0E0EAE9FCE4B2 |
:109930000C94E8A50E944D4180911D0499278471E3 |
:109940009070892B91F58091D80882FF27C0809173 |
:109950003A0490913B040097F1F002E088359007BB |
:10996000D4F49C0197FF02C02D5F3F4F359527959A |
:1099700035952795809189089927289FA001299FCF |
:10998000500D389F500D1124CA0164E670E00E940A |
:1099900098A5CB0106C08DE290E003C080918908B4 |
:1099A000992790931B0480931A04209118043091F6 |
:1099B000190455E72033350759F4109261041092C9 |
:1099C00060048091820A992790931B0480931A0463 |
:1099D00060916004709161047A8369838091820A46 |
:1099E00099270A966817790714F49A8389838091D6 |
:1099F0005604843608F062C080911C0482FD5EC06B |
:109A00008091F6049091F704009731F001979093BC |
:109A1000F7048093F6040BC01092550490931F0432 |
:109A200080931E0480911D048D7E80931D04289ACE |
:109A300080911E0490911F04895E9340E0F1809113 |
:109A4000520B8536C0F180911A0490911B049A83C1 |
:109A5000898380911D04806180931D048091650835 |
:109A6000A82FBB27AA0FBB1FFD01E15EF54F118296 |
:109A7000108280916608282F3327220F331FC901D7 |
:109A8000815E954FFC0111821082A752B64F11964C |
:109A90001C921E922752364FD90111961C921E928B |
:109AA00080916808E82FFF27EE0FFF1FE752F64F5F |
:109AB00011821082B4C510925504B1C5809156042C |
:109AC0008D3808F482C59091D008992309F445C0D7 |
:109AD0008091D108882309F440C0E92FFF27EE0FB9 |
:109AE000FF1FE752F64F80819181C397BCF08091B0 |
:109AF0009501823361F480911C0485FF08C0809138 |
:109B00001C04806480931C0480E38093AF018091E7 |
:109B10001C048F7780931C0486E917C08081918193 |
:109B20008E5C9F4FACF480919501863941F4809111 |
:109B30001C04806880931C048FE28093AF018091A5 |
:109B40001C048F7B80931C0482E38093950105C0E5 |
:109B500080911C048F7380931C0480911D048F7E60 |
:109B600080931D0490918A0882E3989FC00111247C |
:109B70009093F7048093F604E981FA81B9978CF009 |
:109B800080915504882369F080911E0490911F04F0 |
:109B9000FFEF8F3F9F0729F0019690931F0480935A |
:109BA0001E0440911E0450911F044F3F510509F0BF |
:109BB00048F5109278041092790410927A04109269 |
:109BC0007B04109274041092750410927604109223 |
:109BD00077041092E2041092E3041092E4041092CD |
:109BE000E504109280041092810410928204109275 |
:109BF000830480911C04806280931C0484E680931B |
:109C0000950135C180911D04826080931D0480916F |
:109C10001C0485FF98C08091330599279C0124700E |
:109C2000307082FD04C080911C0486FF2AC08091A0 |
:109C300042018D3331F580911504882311F180E5BF |
:109C40008093450484EF91E0A0E0B0E08093460467 |
:109C500090934704A0934804B093490480934C0424 |
:109C600090934D04A0934E04B0934F0488EE93E07C |
:109C70009093940180939301232B19F08DE08093AE |
:109C8000AF018091320390913303A0913403B091DE |
:109C9000350387399105A105B1058CF480915004F5 |
:109CA00090915104A0915204B0915304825A9E4F56 |
:109CB000AF4FBF4F24F08091B70A80FD21C088EEDE |
:109CC00093E0909394018093930180911C0486FF0C |
:109CD0000FC0109245048CE291E0A0E0B0E08093C8 |
:109CE0004C0490934D04A0934E04B0934F0403C0D2 |
:109CF00080E38093AF0180911C048F7180931C04DA |
:109D0000109278041092790410927A0410927B04D5 |
:109D100010927404109275041092760410927704D5 |
:109D20001092800410928104109282041092830495 |
:109D3000495E534008F49BC088EE93E090931F0463 |
:109D400080931E0494C080911C0487FF1AC08091E8 |
:109D50004201863711F08D33A1F4809115048823D8 |
:109D600081F08091D1088093450480EE91EBAFEFB4 |
:109D7000BFEF8093460490934704A0934804B093A8 |
:109D80004904209193013091940143E0283E340727 |
:109D900008F048C02F5F3F4F309394012093930108 |
:109DA000109278041092790410927A0410927B0435 |
:109DB0001092740410927504109276041092770435 |
:109DC00010928004109281041092820410928304F5 |
:109DD0008091320390913303A0913403B091350305 |
:109DE0008C529140A040B04080934C0490934D041D |
:109DF000A0934E04B0934F04285E3340C1F5809188 |
:109E00001C0487FF34C0809142018B3281F1809124 |
:109E10001C048F7780931C0480911C0480628093C3 |
:109E20001C0425C080911504882309F1809142010A |
:109E3000863711F08D32D9F48091500490915104FD |
:109E4000A0915204B0915304885E9340A040B0406A |
:109E500074F480910408909105088D5A93403CF069 |
:109E600010929401109293018EE08093AF01809143 |
:109E70006708E82FFF27EE0FFF1FE752F64F80819C |
:109E80009181813591050CF454C120915504222310 |
:109E900009F04FC180916808E82FFF27EE0FFF1FE0 |
:109EA000E752F64F808191818C3491050CF411C1F9 |
:109EB0008091F8048F5F8093F804893C08F439C1DD |
:109EC0002093F80410921F0410921E04309165082C |
:109ED000E32FFF27EE0FFF1FE752F64F808191819E |
:109EE00087349105B4F480916608E82FFF27EE0FC0 |
:109EF000FF1FE752F64F808191810190F081E02DA4 |
:109F0000F7FF03C0F095E195FF4FE734F1050CF43E |
:109F100078C041E020916608A22FBB27AA0FBB1F83 |
:109F2000A752B64F8D919C9111978734910544F0BB |
:109F3000E32FFF27EE0FFF1FE752F64F808191813D |
:109F40008D919C918734910574F080916508E82F7C |
:109F5000FF27EE0FFF1FE752F64F80819181873474 |
:109F600091050CF042E0E22FFF27EE0FFF1FE752B2 |
:109F7000F64F808191818634910574F48091650853 |
:109F8000E82FFF27EE0FFF1FE752F64F80819181E8 |
:109F9000873491050CF043E0E22FFF27EE0FFF1FFF |
:109FA000E752F64F808191818A5B9F4F74F48091D4 |
:109FB0006508E82FFF27EE0FFF1FE752F64F80815D |
:109FC0009181873491050CF044E0E22FFF27EE0FDA |
:109FD000FF1FE752F64F808191818A5B9F4F74F497 |
:109FE00080916508E82FFF27EE0FFF1FE752F64F1D |
:109FF00080819181863491050CF445E0842F0E9484 |
:10A00000433280916608E82FFF27EE0FFF1FE752CB |
:10A01000F64F808191810190F081E02DF7FF03C020 |
:10A02000F095E195FF4F7E97CCF480916508E82F7D |
:10A03000FF27EE0FFF1FE752F64F808191818A5B69 |
:10A040009F4F64F481E08093F4051092410488EE00 |
:10A0500093E090932703809326036BC080910101C6 |
:10A060000E94EE3180E00E94900B80918B080E944C |
:10A0700076A08091B70A80FF10C080911C0190915A |
:10A080001D01875B934038F480911C0190911D0164 |
:10A090008E5E924010F40E94C42081E00E94D53D63 |
:10A0A000982F8093410421E020932403579A8091B4 |
:10A0B000D905882311F087E006C0992319F420936D |
:10A0C000AF0103C088E18093AF0185E08093620512 |
:10A0D00027C080819181855B9F4F4CF58091F8046A |
:10A0E0008F5F8093F804893C20F1209355042093DE |
:10A0F000F80410921F0410921E0482E00E94D53DC5 |
:10A10000982F809341048091D905882311F087E02E |
:10A1100005C0992311F481E001C088E18093AF016B |
:10A1200068E770E0809101010E94FB3C02C020932F |
:10A13000F80480916708E82FFF27EE0FFF1FE75212 |
:10A14000F64F808191818C599F4F0CF037C220913E |
:10A15000C808E22FFF27EF77F070EE0FFF1FE15ED8 |
:10A16000F54F80819181069714F084E606C08081C6 |
:10A1700091818B5F9F4F1CF48CE98093FB0480914D |
:10A180005504E0916808882309F063C1FF27EE0FAA |
:10A19000FF1FE752F64F808191818C599F4F9CF4AD |
:10A1A0008091D80883FD0BC0E22FFF27EE0FFF1F21 |
:10A1B000E752F64F80819181855B9F4FDCF0809163 |
:10A1C000C8088823B9F08091D80883FF3FC18091E7 |
:10A1D000C808E82FFF27EE0FFF1FE752F64F8081D8 |
:10A1E0009181875F9F4F0CF431C18091FB048436CD |
:10A1F00009F02CC180914104882329F080911D042D |
:10A20000886080931D0480911E0190911F01A09190 |
:10A210002001B09121018093060890930708A09334 |
:10A220000808B09309081092320310923303109279 |
:10A23000340310923503109250041092510410927E |
:10A2400052041092530410923F0310924003109254 |
:10A2500041031092420380916508E82FFF27EE0F1B |
:10A26000FF1FE752F64F808191818D599F4FACF4CB |
:10A2700080916608E82FFF27EE0FFF1FE752F64F89 |
:10A28000808191810190F081E02DF7FF03C0F0956E |
:10A29000E195FF4FE436F10534F48091C808882336 |
:10A2A00011F48093F9048091F9048F5F8093F9048D |
:10A2B0008E3F08F466C18091C00A9091C10A97FF51 |
:10A2C00003C0909581959F4F8197B4F480917D0A4A |
:10A2D00090917E0A97FF03C0909581959F4F459777 |
:10A2E0005CF480916E0A90916F0A97FF03C090957D |
:10A2F00081959F4F459714F0109241041092F904F4 |
:10A300008091D905882309F094C080914104882365 |
:10A3100009F48FC080913705882309F08AC081E055 |
:10A3200090E090931F0480931E0481E08093550475 |
:10A330001092E2041092E3041092E4041092E504F7 |
:10A34000109280041092810410928204109283046F |
:10A3500010927C0410927D0410927E0410927F046F |
:10A3600080918008E82EFF24002711278091BB0AE6 |
:10A370009091BC0A9C01442737FD4095542FC80199 |
:10A38000B7010E9459A5DC01CB0180939004909302 |
:10A390009104A0939204B09393048091CB0A90917E |
:10A3A000CC0A9C01442737FD4095542FC801B701C2 |
:10A3B0000E9459A5DC01CB01809388049093890405 |
:10A3C000A0938A04B0938B048091B0049091B1045F |
:10A3D000A091B204B091B30480938C0490938D0447 |
:10A3E000A0938E04B0938F048091A8049091A90447 |
:10A3F000A091AA04B091AB04809384049093850447 |
:10A40000A0938604B0938704109278041092790484 |
:10A4100010927A0410927B041092740410927504C6 |
:10A42000109276041092770484E68093400484E3CB |
:10A430009AC08CED95E0909327038093260380913A |
:10A440004104882309F09DC081E08DC01092F90479 |
:10A4500098C0FF27EE0FFF1FE752F64F80819181D2 |
:10A46000853691059CF08091D80883FD0BC0E22FC2 |
:10A47000FF27EE0FFF1FE752F64F80819181855B2A |
:10A480009F4FDCF08091C8088823B9F08091D808EC |
:10A4900083FF75C08091C808E82FFF27EE0FFF1FCC |
:10A4A000E752F64F808191818E5C9F4F0CF067C020 |
:10A4B0008091FB048C3909F062C080916508E82F17 |
:10A4C000FF27EE0FFF1FE752F64F808191818D59D4 |
:10A4D0009F4FACF480916608E82FFF27EE0FFF1F17 |
:10A4E000E752F64F808191810190F081E02DF7FFD6 |
:10A4F00003C0F095E195FF4FE436F1053CF48091FF |
:10A50000C808882319F48093FA0418C010927804BC |
:10A510001092790410927A0410927B0410927404C1 |
:10A5200010927504109276041092770410926704CA |
:10A530001092660410926504109264048091FA04EB |
:10A540008F5F8093FA048B3F88F01092550410922D |
:10A55000FA0410921F0410921E0480911C048F7143 |
:10A5600080931C0486E28093AF010BC0843649F4CB |
:10A570008CEA9DE0909327038093260302C01092FB |
:10A58000FA042091180430911904F3E0283E3F07A3 |
:10A5900008F045C080913C0390913D038B569F4F3E |
:10A5A0001CF02F5F3F4F05C021153105C1F121502F |
:10A5B0003040309319042093180431C01092FB04EA |
:10A5C00010921904109218042AC02E5E324038F1FD |
:10A5D0008091D60A9091D70A8059914000F58091D8 |
:10A5E000500490915104A0915204B09153048C5D99 |
:10A5F0009540A040B0409CF480E395E79093190407 |
:10A600008093180480911E0490911F048A5E9340E9 |
:10A6100030F089EE93E090931F0480931E048091A4 |
:10A620004101815080934101809141018F3F21F090 |
:10A6300080911D0484FFDFC30E942A49B0907B08EB |
:10A6400080910405909105059C01220F331F280F6E |
:10A65000391FC0906508AC2DBB27AA0FBB1FFD0199 |
:10A66000E752F64F4B2D552780819181849FB00191 |
:10A67000859F700D949F700D1124260F371F37FF93 |
:10A6800002C02D5F3F4FB901759567957595679528 |
:10A69000A15EB54F80917C08082F11278D919C9168 |
:10A6A000809FD001819FB00D909FB00D11246A0F43 |
:10A6B0007B1F7093050560930405809106059091BA |
:10A6C00007059C01220F331F280F391FD090660801 |
:10A6D000AD2DBB27AA0FBB1FFD01E752F64F8081AE |
:10A6E0009181849FF001859FF00D949FF00D1124BE |
:10A6F0002E0F3F1F37FF02C02D5F3F4FA901559519 |
:10A70000479555954795A15EB54F8D919C91809F3A |
:10A710007001819FF00C909FF00C11244E0D5F1D75 |
:10A72000509307054093060580912A04882309F475 |
:10A7300048C0CB0177FD0396DC01B595A795B5958B |
:10A74000A795CA0157FD0396FC01F595E795F59588 |
:10A75000E7958091A601682F772767FD70956A9F1E |
:10A7600090016B9F300D7A9F300D11248091390537 |
:10A77000482F552747FD50954E9FC0014F9F900D84 |
:10A780005E9F900D1124280F391F37FF02C0295FEB |
:10A790003F4F03E0359527950A95E1F7309367041D |
:10A7A000209366046E9F90016F9F300D7E9F300D49 |
:10A7B00011244A9FC0014B9F900D5A9F900D112468 |
:10A7C0003FC08091C608E82FFF27E75BFE4F8681D8 |
:10A7D0008093A601908190933905A82FBB27A7FDF0 |
:10A7E000B095A69F9001A79F300DB69F300D112404 |
:10A7F000E92FFF27E7FDF095E49FC001E59F900D4D |
:10A80000F49F900D1124280F391F37FF02C0295FD4 |
:10A810003F4F13E0359527951A95E1F7309367047C |
:10A8200020936604A49F9001A59F300DB49F300D26 |
:10A830001124E69FC001E79F900DF69F900D112413 |
:10A84000281B390B37FF02C0295F3F4F43E0359586 |
:10A8500027954A95E1F7309365042093640480912D |
:10A860006808E82FFF27EE0FFF1FE752F64F8081A1 |
:10A870009181909581959F4F90936304809362049A |
:10A880008530910514F0049705C00FEF8C3F9007B9 |
:10A8900034F40496909363048093620404C010928D |
:10A8A00063041092620480911804909119048150FD |
:10A8B000924078F1809166049091670497FD079625 |
:10A8C00023E0959587952A95E1F790936704809307 |
:10A8D0006604809164049091650497FD079603E0F7 |
:10A8E000959587950A95E1F79093650480936404A4 |
:10A8F000109278041092790410927A0410927B04DA |
:10A9000010927404109275041092760410927704D9 |
:10A9100043C080912505882309F43EC0282F3327A2 |
:10A92000809166049091670497FD079613E09595D2 |
:10A9300087951A95E1F7289FA001299F500D389F10 |
:10A94000500D1124CA0157FD0F96B4E095958795D7 |
:10A95000BA95E1F79093670480936604809164044C |
:10A960009091650497FD0796A3E095958795AA9524 |
:10A97000E1F7289FB001299F700D389F700D1124B9 |
:10A98000CB0177FD0F96F4E095958795FA95E1F761 |
:10A9900090936504809364048090660490906704AB |
:10A9A0008091280590912905881A990A9092670448 |
:10A9B00080926604009164041091650480912605DC |
:10A9C00090912705081B190B1093650400936404EC |
:10A9D00080916708E82FFF27EE0FFF1FE752F64F21 |
:10A9E000E080F1808FE790E0E80EF91EF0926104BC |
:10A9F000E0926004809177019927AA2797FDA0959E |
:10AA0000BA2FBC01CD010E94CDA4DC01CB0120E016 |
:10AA100030E040E251E4BC01CD010E943BA4DC01E6 |
:10AA2000CB01BC01CD010E949FA4DC01CB0180932E |
:10AA3000C50A8091760180939C0A809175019927BF |
:10AA4000AA2797FDA095BA2FBC01CD010E94CDA4E5 |
:10AA5000DC01CB0120E030E040E251E4BC01CD015B |
:10AA60000E943BA4DC01CB01BC01CD010E949FA44C |
:10AA7000DC01CB018093750A8091740180938B0A6D |
:10AA80008091000680FF59C08091CE0A813808F479 |
:10AA900054C08091F905992787FD90952B2D332778 |
:10AAA000829FD001839FB00D929FB00D11248A0E1A |
:10AAB0009B1E90926704809266048091FA05992704 |
:10AAC00087FD9095829FF001839FF00D929FF00D7E |
:10AAD00011240E0F1F1F10936504009364048091CE |
:10AAE000FB05282F332727FD309580916204909134 |
:10AAF0006304820F931F9093630480936204809198 |
:10AB0000FD05282F332727FD30958091760899275A |
:10AB1000289F8001299F100D389F100D112410933C |
:10AB20004801009347018091FC0599278E159F05E8 |
:10AB300024F4909361048093600480916004909168 |
:10AB4000610497FF04C01092610410926004809128 |
:10AB5000B70A82FF02C010929C0A4091660450918D |
:10AB60006704CA0157FD03969C01359527953595D5 |
:10AB7000279537FF03C0309521953F4F80912204E0 |
:10AB80009091230482179307B4F4CA0157FF03C0BE |
:10AB9000909581959F4F97FD0396959587959595EF |
:10ABA000879590932304809322048536910544F081 |
:10ABB00084E690E001C001979093230480932204DF |
:10ABC0004091640450916504CA0157FD03969C01AD |
:10ABD000359527953595279537FF03C030952195F5 |
:10ABE0003F4F809120049091210482179307B4F481 |
:10ABF000CA0157FF03C0909581959F4F97FD03961B |
:10AC00009595879595958795909321048093200439 |
:10AC10008536910544F084E690E001C00197909359 |
:10AC200021048093200480911D0484FF08C01092A9 |
:10AC30002304109222041092210410922004ED2D7E |
:10AC4000FF27EE0FFF1FE752F64F4091A008242F79 |
:10AC50003327808191812817390744F48091D508E2 |
:10AC600082FF04C081E08093370413C0ED2DFF27DD |
:10AC7000EE0FFF1FE752F64F842F99272091A1086E |
:10AC8000821B9109208131812817390714F4109211 |
:10AC9000370440916608E42FFF27EE0FFF1FE752AD |
:10ACA000F64F5091A008852F992722273327281B7C |
:10ACB000390B808191818217930744F48091D508E4 |
:10ACC00083FF04C081E08093360416C0809136046F |
:10ACD000882391F0E42FFF27EE0FFF1FE752F64F76 |
:10ACE0008091A1089927851B9109208131818217C4 |
:10ACF000930714F410923604EC2DFF27EE0FFF1F7C |
:10AD0000E752F64F4091A008242F3327808191818C |
:10AD10002817390744F48091D50880FF04C081E0EA |
:10AD20008093340417C080913404882399F0EC2D6B |
:10AD3000FF27EE0FFF1FE752F64F842F9927209130 |
:10AD4000A108821B9109208131812817390714F449 |
:10AD50001092340440916508E42FFF27EE0FFF1F87 |
:10AD6000E752F64F5091A008852F992722273327C5 |
:10AD7000281B390B808191818217930744F48091BD |
:10AD8000D50881FF04C081E08093350416C080910E |
:10AD90003504882391F0E42FFF27EE0FFF1FE752C1 |
:10ADA000F64F8091A1089927851B91092081318157 |
:10ADB0008217930714F41092350480913704882386 |
:10ADC00019F480913604811181E0809338048091D8 |
:10ADD0003404882321F480913504882351F081E0E4 |
:10ADE000809339041092380410923704109236047C |
:10ADF00002C08093390480913804882321F4809123 |
:10AE00003904882369F080919F08992729813A8124 |
:10AE10008217930714F49A83898381E080936C04EA |
:10AE200080911C0499279C012470307082FF31C0EE |
:10AE30008091280590912905909581959F4F909339 |
:10AE4000670480936604809126059091270590956C |
:10AE500081959F4F90936504809364048091830152 |
:10AE60009091840190936104809360041092630434 |
:10AE7000109262048091B70A8B778B668093B70A31 |
:10AE800080919A0A8C7B80939A0A88EC8093330491 |
:10AE90001EC080911D0484FF1AC030936304209368 |
:10AEA0006204309367042093660430936504209312 |
:10AEB00064049AE59093C50A88E780939C0A90936E |
:10AEC000750A80938B0A109238041092390480918D |
:10AED0008E0A90918F0AA091900AB091910A2091C8 |
:10AEE000B0043091B1044091B2045091B304820F88 |
:10AEF000931FA41FB51F80938E0A90938F0AA0936F |
:10AF0000900AB093910A8091960A9091970AA09125 |
:10AF1000980AB091990AE090A804F090A9040091D1 |
:10AF2000AA041091AB04EB82FC820D831E838E0D6C |
:10AF30009F1DA01FB11F8093960A9093970AA0931C |
:10AF4000980AB093990A8091830A9091840AA091FB |
:10AF5000850AB091860AE090AC04F090AD040091AF |
:10AF6000AE041091AF04EF82F88609871A878E0D20 |
:10AF70009F1DA01FB11F8093830A9093840AA09302 |
:10AF8000850AB093860A8091760A9091770AA091FB |
:10AF9000780AB091790AE090A404F090A504009199 |
:10AFA000A6041091A704EB86FC860D871E878E0DE4 |
:10AFB0009F1DA01FB11F8093760A9093770AA093DC |
:10AFC000780AB093790AF0903904FF86FF2029F4BB |
:10AFD00080913804882309F460C01092A004109274 |
:10AFE000A1041092A2041092A30410929C04109247 |
:10AFF0009D0410929E0410929F0410928E0A10924B |
:10B000008F0A1092900A1092910A1092960A10924A |
:10B01000970A1092980A1092990A1092830A109235 |
:10B02000840A1092850A1092860A1092760A10926B |
:10B03000770A1092780A1092790A80919004909180 |
:10B040009104A0919204B091930480938C04909306 |
:10B050008D04A0938E04B0938F0480918804909106 |
:10B060008904A0918A04B0918B0480938404909306 |
:10B070008504A0938604B093870410923B0310923A |
:10B080003A0310923D0410923C0410923F04109237 |
:10B090003E040F85002309F0D0C180913804882335 |
:10B0A00009F0CBC18091040890910508815092402D |
:10B0B0002CF480915504882309F4BFC19090470B6C |
:10B0C000A09080082090BB0A3090BC0A4090CB0A28 |
:10B0D0005090CC0A19140CF0BBC0BB24CC24DD2446 |
:10B0E000CA01B901A60195010E94CDA579018A0185 |
:10B0F0008091100B9091110B281A390AC101AA27CF |
:10B1000097FDA095BA2FE81AF90A0A0B1B0B6B8161 |
:10B110007C818D819E81A60195010E94CDA559015A |
:10B120006A018091120B9091130B481A590AC201BF |
:10B13000AA2797FDA095BA2FA81AB90ACA0ADB0A4E |
:10B14000292C332427FC3094432C532CC801B701FD |
:10B15000A20191010E9459A597FF04C061507E4F42 |
:10B160008F4F9F4F3B014C0109E095948794779452 |
:10B1700067940A95D1F7C601B501A20191010E9419 |
:10B1800059A597FF04C061507E4F8F4F9F4F5B01C1 |
:10B190006C0119E0D594C794B794A7941A95D1F788 |
:10B1A0008091220490912304813491053CF4809194 |
:10B1B00020049091210481349105D4F0D401C3017D |
:10B1C00097FE03C00196A11DB11D3C014D01959450 |
:10B1D000879477946794D601C501D7FE03C0019682 |
:10B1E000A11DB11D5C016D01D594C794B794A794BE |
:10B1F0008091490B282F332727FD3095432F532F5C |
:10B20000261537054805590514F439014A019927CF |
:10B2100087FD9095909581959F4FAA2797FDA095C2 |
:10B22000BA2F681679068A069B0614F43C014D0174 |
:10B230002A153B054C055D0514F459016A01A81651 |
:10B24000B906CA06DB060CF0D0C05C016D01CDC0AA |
:10B25000EA2CFF2400271127CA01B901A801970190 |
:10B260000E94CDA539014A01C101AA2797FDA095E9 |
:10B27000BA2F681A790A8A0A9B0A6B817C818D81B0 |
:10B280009E81A80197010E94CDA559016A01C201C2 |
:10B29000AA2797FDA095BA2FA81AB90ACA0ADB0AED |
:10B2A000D401C30197FE03C00F96A11DB11D3C013F |
:10B2B0004D01F4E09594879477946794FA95D1F7CB |
:10B2C000D601C501D7FE03C00F96A11DB11D5C01BB |
:10B2D0006D01E4E0D594C794B794A794EA95D1F7AB |
:10B2E0008091220490912304813491053CF4809153 |
:10B2F00020049091210481349105A4F0C401B3018C |
:10B3000023E030E040E050E00E94CDA539014A0141 |
:10B31000C601B50123E030E040E050E00E94CDA539 |
:10B3200059016A0180916808E82FFF27EE0FFF1F7F |
:10B33000E752F64F808191810190F081E02DF7FF77 |
:10B3400003C0F095E195FF4F7A97A4F0C401B301D3 |
:10B3500023E030E040E050E00E94CDA539014A01F1 |
:10B36000C601B50123E030E040E050E00E94CDA5E9 |
:10B3700059016A0189E180938F0121E2621671040B |
:10B38000810491042CF070E2672E712C812C912C99 |
:10B3900030EE63163FEF73063FEF83063FEF9306F1 |
:10B3A00044F460EE662E6FEF762E6FEF862E6FEF11 |
:10B3B000962E41E2A416B104C104D1042CF050E24F |
:10B3C000A52EB12CC12CD12C50EEA5165FEFB506E1 |
:10B3D0005FEFC5065FEFD50644F440EEA42E4FEFB5 |
:10B3E000B42E4FEFC42E4FEFD42E80919004909145 |
:10B3F0009104A0919204B091930486199709A80929 |
:10B40000B9098093900490939104A0939204B0930F |
:10B4100093048091880490918904A0918A04B0914A |
:10B420008B048A199B09AC09BD0980938804909309 |
:10B430008904A0938A04B0938B0480913A0390917D |
:10B440003B038F3F910509F008F4C4C56F8566235F |
:10B4500009F04EC580913804882309F049C58091D0 |
:10B460006C04882309F044C57091A808788B772371 |
:10B4700009F43EC580918E0A90918F0AA091900A9E |
:10B48000B091910AB7FF04C081509F4FAF4FBF4F9B |
:10B49000E92EFA2E0B2F112707FD1A95E0928E0A3E |
:10B4A000F0928F0A0093900A1093910A8091960A65 |
:10B4B0009091970AA091980AB091990AB7FF04C099 |
:10B4C00081509F4FAF4FBF4F892F9A2FAB2FBB2774 |
:10B4D000A7FDBA95898B9A8BAB8BBC8B8093960A10 |
:10B4E0009093970AA093980AB093990A8091800844 |
:10B4F000A82EBB24CC24DD242091A0043091A104EB |
:10B500004091A2045091A304C601B5010E9459A51F |
:10B5100097FF04C061507F4F8F4F9F4F672E782E4B |
:10B52000892E992487FC9A946092A0047092A104B9 |
:10B530008092A2049092A30420919C0430919D04D7 |
:10B5400040919E0450919F04C601B5010E9459A5E7 |
:10B5500097FF04C061507F4F8F4F9F4F272E382E8B |
:10B56000492E552447FC5A9420929C0430929D0405 |
:10B5700040929E0450929F04809198049091990467 |
:10B58000A0919A04B0919B04B7FF04C081509F4FD3 |
:10B59000AF4FBF4F892F9A2FAB2FBB27A7FDBA956F |
:10B5A0008093980490939904A0939A04B0939B0479 |
:10B5B000D801C70186199709A809B9098093EE0433 |
:10B5C0009093EF04A093F004B093F1042091A708A6 |
:10B5D000E22EFF2400271127BC01CD01A80197010D |
:10B5E0000E94CDA559016A012093FC043093FD040B |
:10B5F0004093FE045093FF0489899A89AB89BC89E2 |
:10B6000082199309A409B5098093F2049093F30475 |
:10B61000A093F404B093F504BC01CD01A8019701F7 |
:10B620000E94CDA5209300053093010540930205AB |
:10B6300050930305D601C501D7FE04C081509F4F2A |
:10B64000AF4FBF4F892F9A2FAB2FBB27A7FDBA95BE |
:10B6500090933D0480933C0457FF04C021503F4F1A |
:10B660004F4F5F4FBB2757FDBA95A52F942F832FC0 |
:10B6700090933F0480933E04809122049091230490 |
:10B6800081349105DCF4809120049091210481346F |
:10B690009105A4F480916808E82FFF27EE0FFF1FA3 |
:10B6A000E752F64F808191810190F081E02DF7FF04 |
:10B6B00003C0F095E195FF4F7A97E4F08091470B36 |
:10B6C0008F3FC1F480913C0490913D0497FD019619 |
:10B6D0009595879590933D0480933C0480913E041A |
:10B6E00090913F0497FD01969595879590933F041F |
:10B6F00080933E048091830A9091840AA091850AE8 |
:10B70000B091860AB7FF04C081509F4FAF4FBF4F23 |
:10B71000892F9A2FAB2FBB27A7FDBA958093830A59 |
:10B720009093840AA093850AB093860A8091760A42 |
:10B730009091770AA091780AB091790AB7FF04C076 |
:10B7400081509F4FAF4FBF4F892F9A2FAB2FBB27F1 |
:10B75000A7FDBA958093760A9093770AA093780A0A |
:10B76000B093790A8091B0049091B104A091B20491 |
:10B77000B091B3042F81388549855A85281B390B30 |
:10B780004A0B5B0B2093E6043093E7044093E804F4 |
:10B790005093E9048091A8049091A904A091AA046F |
:10B7A000B091AB04EB84FC840D851E85E81AF90A80 |
:10B7B0000A0B1B0BE092EA04F092EB040093EC04FA |
:10B7C0001093ED042093EE043093EF044093F004C3 |
:10B7D0005093F104E092F204F092F3040093F40425 |
:10B7E0001093F50480918C0490918D04A0918E04A7 |
:10B7F000B0918F04821B930BA40BB50B80938C0428 |
:10B8000090938D04A0938E04B0938F048091840450 |
:10B8100090918504A0918604B09187048E199F09A8 |
:10B82000A00BB10B8093840490938504A0938604AD |
:10B83000B093870488898823E1F020916A043091CD |
:10B840006B04213831054CF08091C2049091C304FF |
:10B8500001969093C3048093C20420583F4F4CF448 |
:10B860008091C2049091C30401979093C304809384 |
:10B87000C20410926B0410926A0481E090E09093ED |
:10B88000090580930805E090EE04F090EF04009124 |
:10B89000F0041091F104D801C70117FF07C08827F1 |
:10B8A0009927DC018E199F09A00BB10B81509240A2 |
:10B8B000A040B04034F084E090E09093090580937C |
:10B8C000080580910E0590910F05A0911005B0918B |
:10B8D000110520918E0A30918F0A4091900A509163 |
:10B8E000910A821B930BA40BB50B815E914BAF4F5A |
:10B8F000BF4F8F539C49A040B04028F08091480B27 |
:10B9000089310CF4FFC021E0E21620E1F20620E0CC |
:10B91000020720E012070CF473C080910A05882307 |
:10B9200009F46AC0D801C70117FF07C08827992703 |
:10B93000DC018E199F09A00BB10B9C01AD01B7FF73 |
:10B9400004C021503E4F4F4F5F4FF9E0559547954A |
:10B9500037952795FA95D1F78091080590910905BB |
:10B96000820F931F9093090580930805D801C701A2 |
:10B9700017FF03C00796A11DB11DE3E0B595A7957C |
:10B9800097958795EA95D1F78093FC049093FD04F1 |
:10B99000A093FE04B093FF0489589341A040B040A7 |
:10B9A00064F088E893E1A0E0B0E08093FC04909319 |
:10B9B000FD04A093FE04B093FF042091FC04309199 |
:10B9C000FD044091FE045091FF0457FF04C0215034 |
:10B9D0003F4F4F4F5F4F232F342F452F552747FDA4 |
:10B9E0005A9580913C0490913D04820F931F90934F |
:10B9F0003D0480933C0406C081E080930A0502C0A8 |
:10BA000010920A0540E0E41640EFF4064FEF0407F9 |
:10BA10004FEF14070CF073C080910B05882309F4D5 |
:10BA20006AC0D801C70117FF07C088279927DC0122 |
:10BA30008E199F09A00BB10B9C01AD01B7FF04C08B |
:10BA400021503E4F4F4F5F4F69E0559547953795D1 |
:10BA500027956A95D1F78091080590910905820F85 |
:10BA6000931F9093090580930805D801C70117FF1C |
:10BA700003C00796A11DB11D23E0B595A795979525 |
:10BA800087952A95D1F78093FC049093FD04A093A9 |
:10BA9000FE04B093FF0488579C4EAF4FBF4F64F431 |
:10BAA00088E79CEEAFEFBFEF8093FC049093FD041A |
:10BAB000A093FE04B093FF042091FC043091FD0498 |
:10BAC0004091FE045091FF0457FF04C021503F4FA6 |
:10BAD0004F4F5F4F232F342F452F552747FD5A9542 |
:10BAE00080913C0490913D04820F931F90933D04FC |
:10BAF00080933C0411C081E080930B050DC010922F |
:10BB00000B050AC0109209051092080584E690E022 |
:10BB100090938E0180938D016889262F3327809121 |
:10BB20000805909109052817390724F43093090571 |
:10BB3000209308051091480B112379F0212F33270A |
:10BB400027FD309580910805909109052817390740 |
:10BB500024F430930905209308054091EE04509198 |
:10BB6000EF046091F0047091F104413851056105D2 |
:10BB7000710574F08091C6049091C7042091080566 |
:10BB800030910905820F931F9093C7048093C604D8 |
:10BB900040585F4F6F4F7F4F74F48091C60490916F |
:10BBA000C7042091080530910905821B930B9093DF |
:10BBB000C7048093C60481E090E0909309058093C8 |
:10BBC0000805C090F204D090F304E090F404F090E3 |
:10BBD000F504D701C601F7FE07C088279927DC01C5 |
:10BBE0008C199D09AE09BF0981509240A040B04018 |
:10BBF00034F084E090E090930905809308058091EB |
:10BC0000120590911305A0911405B091150520918E |
:10BC1000960A3091970A4091980A5091990A821B8E |
:10BC2000930BA40BB50B815E914BAF4FBF4F8F535E |
:10BC30009C49A040B04018F019310CF4FFC001E05D |
:10BC4000C01600E1D00600E0E00600E0F0060CF4CB |
:10BC500073C080910C05882309F46AC0D701C6011E |
:10BC6000F7FE07C088279927DC018C199D09AE09CA |
:10BC7000BF099C01AD01B7FF04C021503E4F4F4F9B |
:10BC80005F4F09E055954795379527950A95D1F768 |
:10BC90008091080590910905820F931F90930905E3 |
:10BCA00080930805D701C601F7FE03C00796A11DC2 |
:10BCB000B11D13E0B595A795979587951A95D1F77E |
:10BCC0008093000590930105A0930205B0930305AE |
:10BCD00089589341A040B04064F088E893E1A0E027 |
:10BCE000B0E08093000590930105A0930205B09306 |
:10BCF0000305209100053091010540910205509106 |
:10BD0000030557FF04C021503F4F4F4F5F4F232F74 |
:10BD1000342F452F552747FD5A9580913E04909129 |
:10BD20003F04820F931F90933F0480933E0406C00C |
:10BD300081E080930C0502C010920C0520E0C21631 |
:10BD400020EFD2062FEFE2062FEFF2060CF073C0C1 |
:10BD500080910D05882309F46AC0D701C601F7FE5A |
:10BD600007C088279927DC018C199D09AE09BF09F6 |
:10BD70009C01AD01B7FF04C021503E4F4F4F5F4FB4 |
:10BD8000E9E05595479537952795EA95D1F7809144 |
:10BD9000080590910905820F931F909309058093E0 |
:10BDA0000805D701C601F7FE03C00796A11DB11D06 |
:10BDB00073E0B595A795979587957A95D1F7809378 |
:10BDC000000590930105A0930205B09303058857E1 |
:10BDD0009C4EAF4FBF4F64F488E79CEEAFEFBFEFD0 |
:10BDE0008093000590930105A0930205B09303058D |
:10BDF0002091000530910105409102055091030505 |
:10BE000057FF04C021503F4F4F4F5F4F232F342F18 |
:10BE1000452F552747FD5A9580913E0490913F0448 |
:10BE2000820F931F90933F0480933E0411C081E0E2 |
:10BE300080930D050DC010920D050AC010920905E2 |
:10BE40001092080584E690E090938E0180938D0116 |
:10BE50004889242F332780910805909109052817D8 |
:10BE6000390724F430930905209308058091480B85 |
:10BE7000882379F0282F332727FD309580910805F6 |
:10BE8000909109052817390724F430930905209368 |
:10BE900008054091F2045091F3046091F40470910C |
:10BEA000F504413851056105710574F08091C404B1 |
:10BEB0009091C5042091080530910905820F931FC8 |
:10BEC0009093C5048093C40440585F4F6F4F7F4FD9 |
:10BED000CCF48091C4049091C50420910805309160 |
:10BEE0000905821B930B9093C5048093C4040AC078 |
:10BEF00010923F0410923E0410923D0410923C04B4 |
:10BF000010926C0480919C0A882341F410923F04A3 |
:10BF100010923E0410923D0410923C0480918E0ACF |
:10BF200090918F0AA091900AB091910A80930E058A |
:10BF300090930F05A0931005B09311058091960A78 |
:10BF40009091970AA091980AB091990A809312054E |
:10BF500090931305A0931405B09315051092A004B7 |
:10BF60001092A1041092A2041092A30410929C04B7 |
:10BF700010929D0410929E0410929F0410929804B7 |
:10BF80001092990410929A0410929B0410928E0AB7 |
:10BF900010928F0A1092900A1092910A1092960AAB |
:10BFA0001092970A1092980A1092990A1092830A96 |
:10BFB0001092840A1092850A1092860A1092760ACC |
:10BFC0001092770A1092780A1092790A10923B0325 |
:10BFD00010923A03E0906204F0906304C701F7FE08 |
:10BFE00004C0882799278E199F0904973CF08091F7 |
:10BFF000B70A84FD03C082E38093400410917D085A |
:10C00000A12EBB24CC24DD24B701882777FD8095A1 |
:10C01000982F9701F7FE04C0222733272E193F09D6 |
:10C02000442737FD4095542F0E9459A59B01AC0130 |
:10C03000C601B5010E9459A597FF04C061507E4F0B |
:10C040008F4F9F4F59E095958795779567955A95AE |
:10C05000D1F79B01812F99278E9DD0018F9DB00D27 |
:10C060009E9DB00D1124CD01B7FD03969595879542 |
:10C0700095958795280F391F809118049091190480 |
:10C080008150924010F020E030E080914204909185 |
:10C090004304280F391F442737FD4095542F209320 |
:10C0A000E2043093E3044093E4045093E504809168 |
:10C0B000800490918104A0918204B0918304821B3A |
:10C0C000930BA40BB50B8093800490938104A093F1 |
:10C0D0008204B09383048155934CA040B04064F037 |
:10C0E00080E593ECA0E0B0E080938004909381041D |
:10C0F000A0938204B0938304809180049091810482 |
:10C10000A0918204B0918304805B9C43AF4FBF4FEA |
:10C1100064F480EB9CE3AFEFBFEF809380049093D7 |
:10C120008104A0938204B093830400919101109143 |
:10C13000920117FDFCC08091B70A83FFF8C080917F |
:10C140009001815080939001882309F0F4C08DE024 |
:10C15000809390018091B0049091B104A091B204B9 |
:10C16000B091B304B7FF04C081509E4FAF4FBF4F93 |
:10C1700039E0B595A795979587953A95D1F77C01C4 |
:10C1800097FF04C0F094E194F108F3948091A8041F |
:10C190009091A904A091AA04B091AB04B7FF04C088 |
:10C1A00081509E4FAF4FBF4F29E0B595A79597950A |
:10C1B00087952A95D1F79C0197FF03C0309521956B |
:10C1C0003F4FE216F3060CF47901B701F7FE02C007 |
:10C1D000695F7F4F2B0183E0559447948A95E1F77F |
:10C1E00022E030E0420E531E6090C70A7090C80AE9 |
:10C1F0008090C90A9090CA0A20914301309144016D |
:10C200004091450150914601C401B3010E94CDA562 |
:10C2100059016A013093740A2093730A021B130BAD |
:10C22000C801845E9D4F68E671E00E9498A59C015C |
:10C23000245B304080918D0190918E01009731F008 |
:10C24000019790938E0180938D011BC049E1E41604 |
:10C25000F104BCF480916A0490916B04820F931FE7 |
:10C2600090936B0480936A0480914004882349F082 |
:10C27000815080934004882321F4B0926F04A092EF |
:10C280006E0480918D0190918E01892BF9F480913B |
:10C290008F019927289FB001299F700D389F700D3D |
:10C2A0001124CB01B2010E9498A5CB01AA2797FDCA |
:10C2B000A095BA2F680E791E8A1E9B1E6092C70A2F |
:10C2C0007092C80A8092C90A9092CA0A809140046A |
:10C2D000882369F580916E0490916F042091730A10 |
:10C2E0003091740A821B930B845E9D4F68E671E067 |
:10C2F0000E9498A59C01245B304080917A0186952C |
:10C300009927289FD001299FB00D389FB00D112487 |
:10C310009D01B7FF02C0215F3F4F04E0359527958F |
:10C320000A95E1F7309343042093420404C010922D |
:10C3300043041092420480916C04882381F010928F |
:10C34000740410927504109276041092770410927F |
:10C3500078041092790410927A0410927B048091F0 |
:10C3600039048823F1F480919C0A282F332744272D |
:10C3700055278091B0049091B104A091B204B0917E |
:10C38000B304BC01CD010E9459A5DC01CB01BC0165 |
:10C39000CD0128EF3AE240E050E00E94CDA529010E |
:10C3A00002C044245524809138048823F1F48091FC |
:10C3B0009C0A282F3327442755278091A804909161 |
:10C3C000A904A091AA04B091AB04BC01CD010E94C4 |
:10C3D00059A5DC01CB01BC01CD0128EF3AE240E0D8 |
:10C3E00050E00E94CDA5190102C02224332480917F |
:10C3F000700A9091710A893C91051CF088EC90E0DC |
:10C4000005C088539F4F34F488E39FEF9093710ADF |
:10C410008093700A80917B0A90917C0A893C9105F7 |
:10C420001CF088EC90E005C088539F4F34F488E3FB |
:10C430009FEF90937C0A80937B0A80917D0A909174 |
:10C440007E0AAA2797FDA095BA2F2091C50AA22E91 |
:10C45000BB24CC24DD24BC01CD01A60195010E94A2 |
:10C4600059A59B01AC018091700A9091710AAA278D |
:10C4700097FDA095BA2F17E0880F991FAA1FBB1F21 |
:10C480001A95D1F7280F391F4A1F5B1F57FF04C0A9 |
:10C49000215C3F4F4F4F5F4FA6E05595479537952D |
:10C4A0002795AA95D1F78201020F131F10937E0AD8 |
:10C4B00000937D0A80916E0A90916F0AAA2797FDDA |
:10C4C000A095BA2FBC01CD01A60195010E9459A5E6 |
:10C4D0009B01AC0180917B0A90917C0AAA2797FD71 |
:10C4E000A095BA2FF7E0880F991FAA1FBB1FFA95D6 |
:10C4F000D1F7280F391F4A1F5B1F57FF04C0215C6B |
:10C500003F4F4F4F5F4FE6E055954795379527953D |
:10C51000EA95D1F77101E20EF31EF0926F0AE092F4 |
:10C520006E0A8091C00A9091C10A880F991FAA27AC |
:10C5300097FDA095BA2F2091750A332744275527D8 |
:10C54000BC01CD010E9459A55B016C0197FF08C099 |
:10C550002FE330E040E050E0A20EB31EC41ED51E13 |
:10C5600076E0D594C794B794A7947A95D1F7809143 |
:10C570008B0A282F332744275527809194049091C4 |
:10C580009504A0919604B0919704BC01CD010E943E |
:10C5900059A5DC01CB01BC01CD0120EF35E540E020 |
:10C5A00050E00E94CDA5B501620F731F7093C10AC0 |
:10C5B0006093C00A0150104134F080E090E1909304 |
:10C5C0007E0A80937D0A80917D0A90917E0A805038 |
:10C5D000904F34F480E090EF90937E0A80937D0A30 |
:10C5E00051E0E51650E1F50634F080E090E19093DB |
:10C5F0006F0A80936E0A80916E0A90916F0A805044 |
:10C60000904F34F480E090EF90936F0A80936E0A1D |
:10C610006150704134F080E090E19093C10A8093C2 |
:10C62000C00A8091C00A9091C10A8050904F34F4A2 |
:10C6300080E090EF9093C10A8093C00A80911D041E |
:10C6400085FD16C080910201992720912601309125 |
:10C65000270109811A81089F7001099FF00C189F1A |
:10C66000F00C1124C701B9010E9484A57A83698363 |
:10C67000809116058150809316058F3F09F05EC0AA |
:10C680008091170590911805892B41F4809126011E |
:10C6900090912701909318058093170580912601AA |
:10C6A0009091270120911705309118052817390717 |
:10C6B00018F42F5F3F4F09C0809126019091270108 |
:10C6C0008217930730F4215030403093180520939F |
:10C6D000170584E6809316058091F602282F3327EC |
:10C6E00040911705509118054217530710F48AE03E |
:10C6F0000CC080910001280F311D2417350738F434 |
:10C7000080911404882319F081508093140480913F |
:10C71000F502282F33274217530710F489E10CC084 |
:10C7200080910001280F311D2417350738F48091BE |
:10C730001304882319F0815080931304809114040A |
:10C740008823D1F08091460490914704A091480439 |
:10C75000B0914904B7FD10C08091D1088093450481 |
:10C7600080EE91EBAFEFBFEF8093460490934704C8 |
:10C77000A0934804B093490480912503882311F4C1 |
:10C780000E94037229813A81220F331F220F331F27 |
:10C790003A8329838091B70A80FD02C00C94DB6D37 |
:10C7A00080913804882311F00C94DB6D20913904BA |
:10C7B000222311F00C94DB6D8091D90599278F7796 |
:10C7C0009070009711F00C94DB6D3C018091C804CF |
:10C7D0009091C904892B09F044C080911C0190916B |
:10C7E0001D018959934058F087B58A3F20F4809104 |
:10C7F0003E03815011C081E0809324055EC080918A |
:10C800001C0190911D018436910530F587B5863065 |
:10C81000F8F080913E038F5F80933E0395E089029C |
:10C820009001112480911008821B87BD87B58095E7 |
:10C8300088BD8CE291E090932703809326038EE5D8 |
:10C8400091E09093C9048093C8040E948C2035C065 |
:10C8500081E08093230531C0209323052093240594 |
:10C860002CC070923D0360923C0380911504882394 |
:10C8700021F081E00E94AE9E17C0809150049091FB |
:10C880005104A0915204B091530454E0880F991FB1 |
:10C89000AA1FBB1F5A95D1F780933F039093400383 |
:10C8A000A0934103B09342038091C8049091C904BE |
:10C8B00001979093C9048093C8048091B70A20918E |
:10C8C000330481FF3CC0223348F5809196018150AA |
:10C8D000809396018F3F09F052C08091AF01882369 |
:10C8E00039F480916D04882319F088E28093AF01B8 |
:10C8F00010926D048091500490915104A0915204C3 |
:10C90000B091530480934C0490934D04A0934E0433 |
:10C91000B0934F0481E08093960131C0273478F1C1 |
:10C920008091AF01882339F480916D04882319F434 |
:10C9300087E28093AF0188EC809396011DC08091BF |
:10C94000470190914801820F911D2091760833276D |
:10C95000829FA001839F500D929F500D1124CA0108 |
:10C96000AA2797FDA095BA2F80934C0490934D046D |
:10C97000A0934E04B0934F0481E080936D048091A6 |
:10C98000B0049091B104A091B204B091B304E090CE |
:10C990004301F09044010091450110914601BC0112 |
:10C9A000CD01A80197010E94CDA559016A0180918E |
:10C9B000A8049091A904A091AA04B091AB04BC0171 |
:10C9C000CD01A80197010E94CDA5B901C5010E9422 |
:10C9D00079A39093880A8093870ACC9734F08CE3EC |
:10C9E00090E09093880A8093870A8091870A9091BB |
:10C9F000880A0E94A17A9093880A8093870A80E22D |
:10CA00008093420110924B0410924A0480916D046D |
:10CA1000882309F46EC780911D0499279C01207119 |
:10CA2000307084FD66C780911C04826080931C0472 |
:10CA300070919A0A872F992741E0842E912C8822A1 |
:10CA4000992280FD04C08091B70A81FD10C0E98061 |
:10CA5000FA8030931A052093190530934B042093E4 |
:10CA60004A0480911D04806C80931D04DDC2809176 |
:10CA70001D0481FFACC20091830110918401C801A3 |
:10CA80000F96A0916004B0916104B88FAF8B8A17A4 |
:10CA90009B0708F09AC080912305882309F095C070 |
:10CAA00080911D0487FF15C080911D048F778093AE |
:10CAB0001D048091320390913303A0913403B0910F |
:10CAC000350380934C0490934D04A0934E04B0938F |
:10CAD0004F04E0907A0AEE20D9F180914C049091B5 |
:10CAE0004D04A0914E04B0914F04BC01CD0124E649 |
:10CAF00030E040E050E00E94CDA5AE2CBB24CC2419 |
:10CB0000DD24A216B306C406D50614F590924B0494 |
:10CB100080924A048091AF018823C1F4809150042F |
:10CB200090915104A0915204B0915304BC01CD01E5 |
:10CB30002FE530E040E050E00E94CDA5A216B306FC |
:10CB4000C406D5061CF48AE18093AF018DE338C09A |
:10CB500080911B0590911C05459784F080913203CC |
:10CB600090913303A0913403B091350380934C042A |
:10CB700090934D04A0934E04B0934F0480911D04F4 |
:10CB8000806480931D042F89388D201B310B2F501A |
:10CB9000304037FF03C0309521953F4F30934B0411 |
:10CBA00020934A0480911404882349F0C90163E06A |
:10CBB00070E00E9498A570934B0460934A048BE246 |
:10CBC000809342011092440437C1C8010F97EF8946 |
:10CBD000F88DE817F907C8F5209124052223A9F557 |
:10CBE00080911D0486FF15C080911D048F7B80936A |
:10CBF0001D048091320390913303A0913403B091CE |
:10CC0000350380934C0490934D04A0934E04B0934D |
:10CC10004F0480911D04806880931D048F89988D36 |
:10CC2000801B910B0F9697FF03C0909581959F4FA6 |
:10CC3000909581959F4F90934B0480934A048DE289 |
:10CC40008093420120934404F7C08DE38093420116 |
:10CC500060914504662371F12091460430914704A8 |
:10CC6000409148045091490480914C0490914D04A6 |
:10CC7000A0914E04B0914F0482179307A407B50703 |
:10CC8000CCF480911D04806480931D04862F992725 |
:10CC900090934B0480934A048AE0809344048EE589 |
:10CCA0008093420180911D0487FFC6C080911D04BE |
:10CCB0008F7733C0662309F443C020914604309136 |
:10CCC0004704409148045091490480914C0490914C |
:10CCD0004D04A0914E04B0914F04281739074A071C |
:10CCE0005B0774F580911D04806880931D04862F76 |
:10CCF0009927909581959F4F90934B0480934A0478 |
:10CD000086EF8093440486E78093420180911D045E |
:10CD100086FF92C080911D048F7B80931D048091BB |
:10CD2000320390913303A0913403B0913503809383 |
:10CD30004C0490934D04A0934E04B0934F047CC0D8 |
:10CD400080911D04807C09F477C08091440488237D |
:10CD500009F04CC08091320390913303A0913403C9 |
:10CD6000B0913503885C9040A040B04020914C04C5 |
:10CD700030914D0440914E0450914F048217930717 |
:10CD8000A407B5076CF08091320390913303A09112 |
:10CD90003403B0913503885C9040A040B0401DC082 |
:10CDA0008091320390913303A0913403B091350305 |
:10CDB00088539F4FAF4FBF4F281739074A075B076C |
:10CDC000BCF08091320390913303A0913403B09171 |
:10CDD000350388539F4FAF4FBF4F80934C049093C0 |
:10CDE0004D04A0934E04B0934F0402C0109244042B |
:10CDF00080911D048F7380931D0410921A05109268 |
:10CE0000190571FF06C084EF91E09093270380938A |
:10CE1000260380915404882379F4809150049091E2 |
:10CE20005104A0915204B0915304C397A105B105D8 |
:10CE30001CF081E0809354046091190570911A05EB |
:10CE400080914A0490914B04680F791F70931A05E2 |
:10CE500060931905CB0177FF04C088279927861BAB |
:10CE6000970B855F91400CF49BC040914404442390 |
:10CE700089F1809146049091470420914C043091AF |
:10CE80004D04821B930B0996439748F48091460406 |
:10CE900090914704A0914804B091490412C0242FF6 |
:10CEA000332727FD3095432F532F80914C049091C9 |
:10CEB0004D04A0914E04B0914F04820F931FA41F04 |
:10CEC000B51F80934C0490934D04A0934E04B093EF |
:10CED0004F0424C020914C0430914D0440914E04E5 |
:10CEE00050914F04809176081616170644F463E0BB |
:10CEF0000E9478A5280F311D411D511D07C063E018 |
:10CF00000E9478A5281B31094109510920934C043E |
:10CF100030934D0440934E0450934F0410921A05E1 |
:10CF200010921905E0905004F090510400915204C1 |
:10CF300010915304D801C70180509440A040B040E4 |
:10CF400020914C0430914D0440914E0450914F0477 |
:10CF500082179307A407B5075CF4D801C701805076 |
:10CF60009C4FAF4FBF4F281739074A075B0744F064 |
:10CF700080934C0490934D04A0934E04B0934F04BF |
:10CF800080919A0A81FF06C084E690E0909327037F |
:10CF90008093260380914504882311F40E94534C0A |
:10CFA0008091C8049091C904892BD1F180913203FA |
:10CFB00090913303A0913403B091350380934C04D6 |
:10CFC00090934D04A0934E04B0934F0429C08091D8 |
:10CFD000500490915104A0915204B091530480598F |
:10CFE0009140A040B04080934C0490934D04A09396 |
:10CFF0004E04B0934F0480917A08882311F099274A |
:10D0000002C08FE790E09093840180938301E980D0 |
:10D01000FA80F0923B04E0923A048EE2809342015F |
:10D02000E0903A04F0903B048091320390913303F6 |
:10D03000A0913403B091350320914C0430914D04FC |
:10D0400040914E0450914F04281739074A075B0757 |
:10D0500024F080919A0A80FD5EC48091150460914D |
:10D06000C8047091C904882309F07CC2672B49F079 |
:10D07000E0903A04F0903B0410921C0510921B05BE |
:10D08000E1C08091320390913303A0913403B091B9 |
:10D090003503821B930BA40BB50B8093E60490938E |
:10D0A000E704A093E804B093E904823000E8900715 |
:10D0B0000FEFA0070FEFB0072CF481E090E8AFEF7F |
:10D0C000BFEF09C08F5F9F47A040B04064F08FEF73 |
:10D0D0009FE7A0E0B0E08093E6049093E704A0937C |
:10D0E000E804B093E9048091E6049091E7049093FA |
:10D0F0001C0580931B0580917C01282F3327442732 |
:10D1000055278091E6049091E704A091E804B0913E |
:10D11000E904BC01CD010E9459A597FF04C0615EDE |
:10D120007F4F8F4F9F4F25E0959587957795679512 |
:10D130002A95D1F76093E6047093E7048093E8049E |
:10D140009093E90465302EEF72072FEF82072FEFDF |
:10D1500092072CF484E09EEFAFEFBFEF09C0605060 |
:10D1600074408040904064F080E094E0A0E0B0E043 |
:10D170008093E6049093E704A093E804B093E90455 |
:10D180006090E6047090E70420913C0330913D03E9 |
:10D1900037FF02C0295F3F4F03E0359527950A9579 |
:10D1A000E1F74FEF223834071CF421E83FEF05C0C8 |
:10D1B0002038310514F020E830E0C901AA2797FD96 |
:10D1C000A095BA2F20917D01332744275527BC0114 |
:10D1D000CD010E9459A597FF04C06D5F7F4F8F4F0F |
:10D1E0009F4F12E095958795779567951A95D1F79A |
:10D1F0009B015FEF613075071CF420E03FEF06C034 |
:10D200006F3F710519F014F020E031E080911D04AA |
:10D21000807C49F0C90137FD03969C01359527951F |
:10D22000359527950DC080919A0A80FF09C0C901E4 |
:10D2300037FD07969C01A3E035952795AA95E1F760 |
:10D24000620E731E20917B01222309F454C0609169 |
:10D25000700470917104809172049091730497FF2F |
:10D2600004C061587F4F8F4F9F4FF7E0959587958A |
:10D2700077956795FA95D1F73327442755270E946C |
:10D2800059A597FF04C0615E7F4F8F4F9F4FE5E028 |
:10D290009595879577956795EA95D1F76093E6041C |
:10D2A0007093E7048093E8049093E9046138AFEF4A |
:10D2B0007A07AFEF8A07AFEF9A072CF480E89FEF69 |
:10D2C000AFEFBFEF0AC06F3F71058105910569F0AF |
:10D2D00064F080E091E0A0E0B0E08093E6049093F9 |
:10D2E000E704A093E804B093E9048091E6049091E8 |
:10D2F000E704680E791E80917901282F33278091E9 |
:10D300004B0B992787FD9095289FF001299FF00DE1 |
:10D31000389FF00D11249F01F7FF02C021583F4FA5 |
:10D32000220F232F221F330BFFEF21383F071CF45E |
:10D3300020E83FEF06C02F3F310519F014F020E040 |
:10D3400031E0260D371DC901AA2797FDA095BA2FF8 |
:10D3500000913A0410913B049801442737FD409511 |
:10D36000542FBC01CD010E9459A597FF04C0615004 |
:10D370007E4F8F4F9F4F59E095958795779567958D |
:10D380005A95D1F7E61AF70A80914A0490914B0416 |
:10D39000892B09F064C0101611060CF060C02091B2 |
:10D3A0001B0530911C05C90137FF03C0309521953D |
:10D3B0003F4F2D33310540F480916804909169040A |
:10D3C0008E159F0574F526C02C53304045E03695E8 |
:10D3D00027954A95E1F72031310510F02FE030E034 |
:10D3E000409168045091690418161906E4F480E12C |
:10D3F00090E0821B930B489F9001499F300D589FEE |
:10D40000300D1124B4E036952795BA95E1F72E1525 |
:10D410003F0520F58091810190918201E816F9067F |
:10D42000F4F07C011CC0205F3F4F809181019091FE |
:10D430008201829FB001839F700D929F700D112415 |
:10D440009B01A4E036952795AA95E1F74E155F0557 |
:10D4500014F07A0104C0E216F30608F07901C7015E |
:10D46000AA2797FDA095BA2FFDE0880F991FAA1F44 |
:10D47000BB1FFA95D1F72091870A3091880A44277B |
:10D4800037FD4095542FBC01CD010E94CDA52093BE |
:10D49000EA043093EB044093EC045093ED04E090E5 |
:10D4A000EA04F090EB0480911D0590911E059C010B |
:10D4B000220F331F280F391F2E0D3F1D37FF02C0CB |
:10D4C0002D5F3F4FA9015595479555954795509329 |
:10D4D0001E0540931D0580917208282F3327220FC7 |
:10D4E000331F220F331F241735076CF48091BF0AB6 |
:10D4F000282F3327220F331F220F331F2055304090 |
:10D500004217530724F030931E0520931D05809188 |
:10D510009A0A80FF14C080911D0590911E05A98173 |
:10D52000BA818A179B0724F0B0931E05A0931D05AE |
:10D53000E0911D05F0911E05FA83E983ECC1298174 |
:10D540003A81201B310B37FF02C02D5F3F4F3595CD |
:10D55000279535952795E0901D05F0901E05E20E64 |
:10D56000F31EC1C1672B49F0E0903A04F0903B04F0 |
:10D5700010921C0510921B0538C1809132039091C6 |
:10D580003303A0913403B0913503821B930BA40B9A |
:10D59000B50B8093E6049093E704A093E804B0935E |
:10D5A000E904823000E890070FEFA0070FEFB00703 |
:10D5B0002CF481E090E8AFEFBFEF09C08F5F9F4789 |
:10D5C000A040B04064F08FEF9FE7A0E0B0E0809310 |
:10D5D000E6049093E704A093E804B093E9048091F3 |
:10D5E000E6049091E70490931C0580931B058091BD |
:10D5F0007C01282F3327442755278091E6049091FA |
:10D60000E704A091E804B091E904BC01CD010E94B7 |
:10D6100059A597FF04C0615E7F4F8F4F9F4F05E074 |
:10D6200095958795779567950A95D1F76093E60468 |
:10D630007093E7048093E8049093E904653028EF41 |
:10D6400072072FEF82072FEF92072CF484E098EFF8 |
:10D65000AFEFBFEF09C0605078408040904064F069 |
:10D6600080E098E0A0E0B0E08093E6049093E704C7 |
:10D67000A093E804B093E9046090E6047090E70496 |
:10D6800080917B01282F332780914303909144039D |
:10D69000829FA001839F500D929F500D11249A01EB |
:10D6A00057FF02C021503F4F232F330F330B809180 |
:10D6B0003C0390913D03820F931FAA2797FDA095ED |
:10D6C000BA2F8093E6049093E704A093E804B09304 |
:10D6D000E9048091440420914A0430914B0488234A |
:10D6E00031F0B3E0220F331FBA95E1F71BC08091F0 |
:10D6F00076089927289FB001299F700D389F700DDB |
:10D7000011249B01A3E0220F331FAA95E1F7260FF6 |
:10D71000371F37FF02C0215E3F4FF5E03595279553 |
:10D72000FA95E1F7309317042093160480911604BC |
:10D73000909117049C01442737FD4095542F809108 |
:10D74000E6049091E704A091E804B091E904821BFB |
:10D75000930BA40BB50B8093E6049093E704A0937E |
:10D76000E804B093E90420917D013327442755272D |
:10D77000BC01CD010E9459A597FF04C0615E7F4F97 |
:10D780008F4F9F4FE5E09595879577956795EA953B |
:10D79000D1F76093E6047093E7048093E8049093D4 |
:10D7A000E9046530A8EF7A07AFEF8A07AFEF9A0771 |
:10D7B0002CF484E098EFAFEFBFEF09C060507840E1 |
:10D7C0008040904064F080E098E0A0E0B0E080937A |
:10D7D000E6049093E704A093E804B093E9048091F1 |
:10D7E000E6049091E704680E791EE618F708809128 |
:10D7F0006804909169048E159F053CF48091810125 |
:10D8000090918201E816F9060CF07C01C701AA2765 |
:10D8100097FDA095BA2F5DE0880F991FAA1FBB1F27 |
:10D820005A95D1F72091870A3091880A442737FD0D |
:10D830004095542FBC01CD010E94CDA52093EA0450 |
:10D840003093EB044093EC045093ED04E090EA0431 |
:10D85000F090EB0480911D0590911E059C01220F14 |
:10D86000331F280F391F2E0D3F1D37FF02C02D5FBC |
:10D870003F4FA901559547955595479550931E05DE |
:10D8800040931D0580917208282F3327220F331FE4 |
:10D89000220F331F241735076CF48091BF0A282FFD |
:10D8A0003327220F331F220F331F205530404217DA |
:10D8B000530724F030931E0520931D0580919A0A8A |
:10D8C00020911D0530911E0580FF10C0E981FA816D |
:10D8D0002E173F0724F0F0931E05E0931D05E090FE |
:10D8E0001D05F0901E05FA82E98215C03A8329834E |
:10D8F00012C00E94534C09811A8110931E05009397 |
:10D900001D0580911D04806C80931D0480911C0472 |
:10D910008D7F80931C0480911D0499279C012270A7 |
:10D92000307081FF39C180911F0590912005A09131 |
:10D930002105B09122050097A105B10521F0809144 |
:10D9400054048130B9F480913A0490913B04AA27A1 |
:10D9500097FDA095BA2F1EE0880F991FAA1FBB1F25 |
:10D960001A95D1F780931F0590932005A093210568 |
:10D97000B093220580915404813019F482E08093A1 |
:10D98000540429813A8179010027F7FC0095102F72 |
:10D990008091870A9091880A9C01442737FD409521 |
:10D9A000542FC801B7010E9459A5DC01CB01809317 |
:10D9B000EA049093EB04A093EC04B093ED04B7FF5A |
:10D9C00004C08150904EAF4FBF4F7C018D01FDE0F0 |
:10D9D00015950795F794E794FA95D1F7E092EA0444 |
:10D9E000F092EB040093EC041093ED0460911E049C |
:10D9F00070911F043FE0603A730750F580911F0556 |
:10DA000090912005A0912105B09122059C01AD01C6 |
:10DA1000EAE05695479537952795EA95D1F7821B09 |
:10DA2000930BA40BB50BA8019701F4E0220F331F51 |
:10DA3000441F551FFA95D1F7820F931FA41FB51FDE |
:10DA400080931F0590932005A0932105B093220594 |
:10DA500060547F4118F580911F0590912005A09199 |
:10DA60002105B09122059C01AD01ECE0569547954A |
:10DA700037952795EA95D1F7821B930BA40BB50B2D |
:10DA8000A801970172E0220F331F441F551F7A959A |
:10DA9000D1F7820F931FA41FB51F41C080913C0393 |
:10DAA00090913D0380913C0390913D0397FF03C00B |
:10DAB000909581959F4F84369105CCF580913203E6 |
:10DAC00090913303A0913403B09135039C01809170 |
:10DAD0004C0490914D04281B390B37FF03C030953F |
:10DAE00021953F4F2F3F310509F00CF580911F051F |
:10DAF00090912005A0912105B09122059C01AD01D6 |
:10DB00006EE056954795379527956A95D1F7821B14 |
:10DB1000930BA40BB50B8E0D9F1DA01FB11F8093FF |
:10DB20001F0590932005A0932105B09322058091B5 |
:10DB30001F0590912005A0912105B09122051EE0BE |
:10DB4000B695A795979587951A95D1F790933B042D |
:10DB500080933A0440917808442399F055279C011A |
:10DB6000BA010E9498A5C901861B970B909369047E |
:10DB700080936804260F371F309382012093810120 |
:10DB80001FC010926904109268048FEF93E0909385 |
:10DB900082018093810114C01092540410921F05D9 |
:10DBA00010922005109221051092220530933B041B |
:10DBB00020933A0405C080911D04806C80931D045D |
:10DBC0008091330581FF37C089819A8197FD039643 |
:10DBD000959587959595879520911A0430911B040A |
:10DBE0002817390760F480913A0490913B04892BFF |
:10DBF00031F0220F331F220F331F3A832983809184 |
:10DC0000320390913303A0913403B0913503809394 |
:10DC10004C0490934D04A0934E04B0934F0488E9B4 |
:10DC20009AE3909327038093260380E09EE09093ED |
:10DC30000C0180930B012091820A822F9927880F73 |
:10DC4000991F880F991F889669817A81861797078F |
:10DC500014F09A8389838091BF0A9927880F991FAE |
:10DC6000880F991F80559040A981BA818A179B0718 |
:10DC700014F49A83898380917603882341F48091F8 |
:10DC8000520B8E3F20F080913705882321F180913F |
:10DC90001E0490911F040297C097E8F4E981FA816D |
:10DCA0001E161F06C4F481E090E090931F04809339 |
:10DCB0001E04E22EFF24EE0CFF1CEE0CFF1C87015D |
:10DCC000085D1F4F1A8309838091520B883218F424 |
:10DCD00089E08093AF0180912503882311F40E948D |
:10DCE000037229813A813093CE072093CD0780912A |
:10DCF000E2049091E304A091E404B091E50442E0D1 |
:10DD0000880F991FAA1FBB1F4A95D1F70091C00A1F |
:10DD10001091C10A081B190B213A31058CF0C90179 |
:10DD200037FD019695958795801791070CF48C0126 |
:10DD3000909581959F4F081719076CF48C010BC0C3 |
:10DD40000135110514F000E510E03FEF003B13072B |
:10DD500014F400EB1FEF8091BF0A282F3327220F06 |
:10DD6000331F220F331FC90149815A81841B950B30 |
:10DD7000801791070CF48C0169817A81621B730B07 |
:10DD8000061717070CF48B0180917D0A90917E0A8B |
:10DD90006091660470916704861B970B90938D0ABF |
:10DDA00080938C0AD0909C0A209178043091790459 |
:10DDB00040917A0450917B04DD2041F0461A570AC5 |
:10DDC000C201AA2797FDA095BA2F04C0AA2797FDE4 |
:10DDD000A095BA2F280F391F4A1F5B1F2093780484 |
:10DDE0003093790440937A0450937B0480917804B3 |
:10DDF00090917904A0917A04B0917B0481509A4F5C |
:10DE0000A040B04064F080E09AEFA0E0B0E08093E2 |
:10DE1000780490937904A0937A04B0937B04809162 |
:10DE2000780490917904A0917A04B0917B04805099 |
:10DE30009640AF4FBF4F64F480E096E0AFEFBFEF86 |
:10DE40008093780490937904A0937A04B0937B0430 |
:10DE5000C090870820918C0A30918D0AF8E0FC155B |
:10DE600098F08C2D9927829F7001839FF00C929FD0 |
:10DE7000F00C1124C701F7FC07967C01B3E0F59480 |
:10DE8000E794BA95E1F712C08C2D86959927829F69 |
:10DE9000A001839F500D929F500D1124CA0157FD80 |
:10DEA00003967C01F594E794F594E794A0907E01A5 |
:10DEB000B0907F019501442737FD4095542F809104 |
:10DEC000780490917904A0917A04B0917B04BC010C |
:10DED000CD010E94CDA5E20EF31E90906801692D40 |
:10DEE000772788279927980117FF04C0222733270F |
:10DEF000201B310B37FF02C02F5F3F4F3595279511 |
:10DF0000A981BA812A0F3B1F442737FD4095542F22 |
:10DF10000E9459A597FF04C0615C7F4F8F4F9F4FB0 |
:10DF2000E6E09595879577956795EA95D1F79B01FA |
:10DF30006E157F050CF47B01309521953F4FE2165D |
:10DF4000F3060CF4790180916E0A90916F0A60914A |
:10DF5000640470916504861B970B90936D0A8093FF |
:10DF60006C0A2091740430917504409176045091AC |
:10DF70007704DD2041F0261A370AC101AA2797FD50 |
:10DF8000A095BA2F04C0AA2797FDA095BA2F280FF5 |
:10DF9000391F4A1F5B1F209374043093750440930C |
:10DFA0007604509377048091740490917504A09145 |
:10DFB0007604B091770481509A4FA040B04064F04D |
:10DFC00080E09AEFA0E0B0E0809374049093750431 |
:10DFD000A0937604B09377048091740490917504B3 |
:10DFE000A0917604B091770480509640AF4FBF4F18 |
:10DFF00064F480E096E0AFEFBFEF809374049093F9 |
:10E000007504A0937604B093770420916C0A309144 |
:10E010006D0A48E04C1598F08C2D9927829FB0012D |
:10E02000839F700D929F700D1124CB0177FD079691 |
:10E030006C0163E0D594C7946A95E1F712C0C69469 |
:10E040008C2D9927829FD001839FB00D929FB00D98 |
:10E050001124CD01B7FD03966C01D594C794D594D6 |
:10E06000C7949501442737FD4095542F809174043F |
:10E0700090917504A0917604B0917704BC01CD0114 |
:10E080000E94CDA5C20ED31E692D77278827992718 |
:10E09000980117FF04C022273327201B310B37FFBD |
:10E0A00002C02F5F3F4F35952795E981FA812E0FEA |
:10E0B0003F1F442737FD4095542F0E9459A597FFD5 |
:10E0C00004C0615C7F4F8F4F9F4F36E095958795D9 |
:10E0D000779567953A95D1F79B016C157D050CF402 |
:10E0E0006B01309521953F4FC216D3060CF46901A0 |
:10E0F00080912503882311F40E9403728091820A83 |
:10E10000282F33273E8B2D8B8091BF0A282E332456 |
:10E110005090C90828E7A22E29E0B22E93EF892E4D |
:10E1200098E0992E8BE0482EBDE96B2EBAE07B2E4D |
:10E13000D4012C9112160CF02FC1203429F4E9815E |
:10E14000FA81F88FEF8B1FC049815A81CA01AA2733 |
:10E1500097FDA095BA2F332727FD3095432F532FD6 |
:10E16000BC01CD010E9459A597FF04C0615C7F4F9F |
:10E170008F4F9F4FA6E09595879577956795AA95C0 |
:10E18000D1F7788F6F8BF4012181203439F42F89F6 |
:10E19000388D2E0D3F1D388F2F8B2AC0203C39F42F |
:10E1A0004F89588D4E195F09588F4F8B21C0C70179 |
:10E1B000AA2797FDA095BA2F332727FD3095432F27 |
:10E1C000532FBC01CD010E9459A597FF04C0615C8B |
:10E1D0007F4F8F4F9F4FF6E0959587957795679581 |
:10E1E000FA95D1F7AF89B88DA60FB71FB88FAF8B4F |
:10E1F000F4012281203439F42F89388D2C0D3D1DF6 |
:10E20000388F2F8B2AC0203C39F44F89588D4C19F8 |
:10E210005D09588F4F8B21C0C601AA2797FDA09595 |
:10E22000BA2F332727FD3095432F532FBC01CD0143 |
:10E230000E9459A597FF04C0615C7F4F8F4F9F4F8D |
:10E24000E6E09595879577956795EA95D1F7AF893B |
:10E25000B88DA60FB71FB88FAF8BF4012381203480 |
:10E2600039F42F89388D200F311F388F2F8B2AC01A |
:10E27000203C39F44F89588D401B510B588F4F8BE0 |
:10E2800021C0C801AA2797FDA095BA2F332727FDE3 |
:10E290003095432F532FBC01CD010E9459A597FF04 |
:10E2A00004C0615C7F4F8F4F9F4F56E095958795D7 |
:10E2B000779567955A95D1F7AF89B88DA60FB71F97 |
:10E2C000B88FAF8BF501808181FD08C0D3018D919E |
:10E2D0009C91EF89F88D8E179F0774F4D3018D916F |
:10E2E0009C91EF89F88D8E0F9F1F97FD0196959554 |
:10E2F0008795988F8F8B1EC0552049F42F89388DB4 |
:10E30000220F331F281B390B388F2F8B13C031E09E |
:10E31000351580F4252D33274F89588D841B950B97 |
:10E32000B9010E9498A5CB016F89788D680F791F7C |
:10E33000788F6F8B8D899E89880F991F880F991F01 |
:10E34000AF89B88D8A179B0754F4C101880F991FB4 |
:10E35000880F991FEF89F88DE817F90714F0988F47 |
:10E360008F8B8F89988D97FD0396959587959595B9 |
:10E370008795F5018183880F991F880F991F2F8931 |
:10E38000388D281B390BC901880F8283EF89F88DDE |
:10E39000D301ED93FC9303C0F501118212824A94DC |
:10E3A00022E030E0620E731E44E050E0840E951EC1 |
:10E3B00068E070E0A60EB71E47FEBACEE2E1C85E86 |
:10E3C0000C9404A684B1806A84B93D9A82E58CBD20 |
:10E3D0001DBC459A81E08093D10A8AEA8093E20AC3 |
:10E3E00083E88093E30A8AE08093E40A1092E60AC5 |
:10E3F0001092E50A1092E80A1092E70A10924A0B6E |
:10E400001092060B08953091D10A332309F070C0A1 |
:10E410000DB407FE6DC085E080932503459A2EB5A7 |
:10E4200080913A0599278130910589F082309105D4 |
:10E430001CF4892B21F03EC00297B9F03BC0309309 |
:10E44000050B20933B052138A9F581E008C025354F |
:10E4500049F480913B05820F80933B0582E08093D5 |
:10E460003A0528C030933A0525C08091050BE82F66 |
:10E47000FF27E95DF44F20838F5F8093050B909118 |
:10E480003B058032A0F0291769F480E2A7E2BBE0E7 |
:10E49000E7E0FBE00D9001928A95E1F781E080933F |
:10E4A000060B02C03093060B10923A0503C0920F80 |
:10E4B00090933B052091E10A2232A0F44598000098 |
:10E4C000000000000000E091DA0AF091DB0AE20FA0 |
:10E4D000F11D80818EBD8091030B9081890F809307 |
:10E4E000030B03C081E08093D10A2F5F2093E10AE0 |
:10E4F0000895EF92FF920F931F93809180089927C0 |
:10E50000880F991F880F991F7C010027F7FC009541 |
:10E51000102F8091B0049091B104A091B204B091F9 |
:10E52000B304BC01CD01A80197010E94CDA5309391 |
:10E53000E60A2093E50A8091A8049091A904A0918D |
:10E54000AA04B091AB04BC01CD01A80197010E94BF |
:10E55000CDA53093E80A2093E70A2091C70A3091AD |
:10E56000C80A4091C90A5091CA0ADA01C90173E088 |
:10E57000880F991FAA1FBB1F7A95D1F7820F931F8F |
:10E58000A41FB51F820F931FA41FB51F2091430125 |
:10E59000309144014091450150914601BC01CD01AB |
:10E5A0000E94CDA53093EE0A2093ED0A8091C2041B |
:10E5B0009091C3042091490330914A03821B930B2D |
:10E5C0009093F40A8093F30AE091B804F091B904AF |
:10E5D0008091930A9091940ABF010E9498A5CB0163 |
:10E5E0009B01220F331F220F331F280F391F280FC3 |
:10E5F000391F37FF02C02D5F3F4F35952795359561 |
:10E6000027953093EA0A2093E90A8091C30A9091F2 |
:10E61000C40ABF010E9498A59B01220F331F220F3D |
:10E62000331F260F371F260F371F37FF02C02D5FFE |
:10E630003F4F35952795359527953093EC0A2093D4 |
:10E64000EB0A1092B9041092B8041092940A109236 |
:10E65000930A1092C40A1092C30A8091E40A99277F |
:10E66000AA27BB27FC013A97E830F10508F03BC226 |
:10E67000E559FF4F0C941FA6809132048093F70A4E |
:10E68000809131048093F80A809130048093F90AD4 |
:10E6900080912F048093FA0A80912E048093FB0AC4 |
:10E6A00080912D048093FC0A80912C048093FD0AB4 |
:10E6B00080912B048093FE0A80911D048093FF0AB1 |
:10E6C00080911D04837F80931D04809101018093BC |
:10E6D000000B80912601909127018093010B80917E |
:10E6E0001C048093020B4299FEC180911C04877F19 |
:10E6F00080931C04F8C180914C0B90914D0B90932A |
:10E70000F80A8093F70A8091500B9091510B9093E7 |
:10E71000FA0A8093F90A8091B5080E940E49809305 |
:10E72000FB0A809142018093FC0A90913C059093F2 |
:10E73000FD0AE92FFF2713E0EE0FFF1F1A95E1F7FF |
:10E74000E858F64F80818093FE0A86818093FF0A05 |
:10E7500083818093000B87818093010B8581809357 |
:10E76000020B9F5F90933C05E92FFF27EE0FFF1FE1 |
:10E77000EE0FFF1FEA51F74F858518160CF4B3C151 |
:10E78000992309F4B0C1892F992701966DE070E0B3 |
:10E790000E9498A59C01982FE82FFF27EE0FFF1FDE |
:10E7A000EE0FFF1FEA51F74F8585181614F022234C |
:10E7B00051F720933C0597C1809102018093F70A9D |
:10E7C0008091B6088093F80A8091B7088093F90A7F |
:10E7D0008091B8088093FA0A8091B9088093FB0A67 |
:10E7E0008091BD088093FC0A8091BE088093FD0A49 |
:10E7F0008091BF088093FE0A8091C2088093FF0A2F |
:10E800008091C0088093000B8091C1088093010B18 |
:10E810008091C30866C18091B4088093F70A809103 |
:10E820008B08863081F08091ED02823451F00E9495 |
:10E83000B981E82FFF27EE5BFB4E84918093ED02B8 |
:10E8400002C00E94B981809163058093F80A80918B |
:10E85000D1088093F90A8091CA088093FA0A8091BE |
:10E8600013048093FB0A80916A058093FC0A10923E |
:10E870006A0539C1F89480916708E82FFF27EE0FE9 |
:10E88000FF1FE752F64F0190F081E02DE038F105CF |
:10E890001CF0EFE7F0E006C02FEFE138F20714F4C8 |
:10E8A000E1E8FFEFE093F70A80916808E82FFF277F |
:10E8B000EE0FFF1FE752F64F0190F081E02DE03898 |
:10E8C000F1051CF0EFE7F0E006C07FEFE138F70755 |
:10E8D00014F4E1E8FFEFE093F80A80916608E82F6E |
:10E8E000FF27EE0FFF1FE752F64F0190F081E02D5A |
:10E8F000E038F1051CF0EFE7F0E006C08FEFE138FB |
:10E90000F80714F4E1E8FFEFE093F90A8091650855 |
:10E91000E82FFF27EE0FFF1FE752F64F0190F0811F |
:10E92000E02DE038F1051CF0EFE7F0E006C02FEF36 |
:10E93000E138F20714F4E1E8FFEF7894E093FA0A83 |
:10E94000809157048093FB0A809158048093FC0ABD |
:10E95000809159048093FD0A80915A048093FE0AA5 |
:10E9600080915B048093FF0A80915C048093000B8C |
:10E9700080915D048093010B80915E04B2C0809110 |
:10E98000F405853018F01092F40585E08093F70ABD |
:10E990008091C4088093F80A8091500490915104AA |
:10E9A000A0915204B0915304BC01CD0125E030E0A8 |
:10E9B00040E050E00E94CDA53093FA0A2093F90A76 |
:10E9C00080914C0490914D04A0914E04B0914F045D |
:10E9D000BC01CD0125E030E040E050E00E94CDA533 |
:10E9E0003093FC0A2093FB0A8091BA088093FD0AB9 |
:10E9F0008091BB088093FE0A8091BC088093FF0A37 |
:10EA0000809156048093000B80913D058093010B0B |
:10EA10008091CD079091CE0797FD039695958795A8 |
:10EA2000959587955EC082E08093F70A84E0809395 |
:10EA3000F80A1092F90A8CE38093FA0A8091030194 |
:10EA40008093FB0A8091D9058093FC0A9091DA05A6 |
:10EA50009093FD0A8F778093D90590719093DA0592 |
:10EA60008091D2088093FE0A8091B70A8093FF0AB2 |
:10EA700080919A0A8093000B8091C6088093010BC5 |
:10EA80008091D8082EC0809199088093F70A8091D0 |
:10EA9000D6088093F80A809170018093F90A8091DA |
:10EAA00092088093FA0A809193088093FB0A8091E0 |
:10EAB00094088093FC0A80916F018093FD0A8091F5 |
:10EAC00096088093FE0A809197088093FF0A8091B0 |
:10EAD00098088093000B8091520B8093010B8091DA |
:10EAE000F7078093020B8091060B882309F47DC100 |
:10EAF0006091070B8091A701681719F08AEF809346 |
:10EB0000A5016093A70181E0809390014091080BDB |
:10EB10005091090BCA0181509E4F8F5F9340B0F412 |
:10EB200020910A0B30910B0BC90181509E4F8F5FD2 |
:10EB3000934060F48091710885FF08C050932905C7 |
:10EB400040932805309327052093260580910E0BCE |
:10EB500090910F0B21E08936920724F49093920153 |
:10EB6000809391012091180B3091190B809126030D |
:10EB7000909127038217930740F48091F70288232E |
:10EB800021F43093270320932603862F9927893673 |
:10EB9000910509F4A5C08A36910544F4873691059C |
:10EBA00071F08836910509F462C027C18A36910553 |
:10EBB00009F418C18B36910509F4E2C01EC1809199 |
:10EBC0001A0B8093470B80911B0B8093490B80910C |
:10EBD0001C0B8093480B80911D0B80938F018091BB |
:10EBE0001E0B80934B0B80911F0B8093A60180918D |
:10EBF000200B809339058091210B8093250580910E |
:10EC00002A048823F9F02091220B3091230B37FD41 |
:10EC100019C030936F0420936E0490919B08992340 |
:10EC200089F08FE0989FC0011124281B390BC9017E |
:10EC300088599E4F68E671E00E9498A590936F04F2 |
:10EC400080936E0420913005309131058091240B22 |
:10EC50009091250B280F391F37FF02C02F5F3F4FC0 |
:10EC6000359527953093310520933005C6C08091A6 |
:10EC70001A0B8093DC0A80911B0B8093DD0A809134 |
:10EC80001C0B8093DE0A80911D0B8093DF0A80911C |
:10EC90001E0B8093E00A8091BD0790911F0B892B7A |
:10ECA0008093BD079091BE0793708091200B8C706C |
:10ECB000982B9093BE078091210B8093370580910C |
:10ECC000220B809397018091230B80934A0B8091B4 |
:10ECD000240B809333058091250B809332058DC0E2 |
:10ECE00080911A0B8093D20A80911B0B8093D30AD8 |
:10ECF00080911C0B8093D40A80911D0B8093D50AC0 |
:10ED000080911E0B90911F0B9093D70A8093D60A87 |
:10ED10008091200B9091210B9093D90A8093D80A6F |
:10ED20008091220B992787FD90959093140A8093E8 |
:10ED3000130A8091230B809345048091240B9091BA |
:10ED4000250B9C01442737FD4095542FDA01C9015A |
:10ED500063E0880F991FAA1FBB1F6A95D1F7820F26 |
:10ED6000931FA41FB51F820F931FA41FB51F80936D |
:10ED7000460490934704A0934804B09349043DC0CF |
:10ED800080911A0B8093360580911B0B809335057B |
:10ED900080911C0B8093340590911D0B992349F0B1 |
:10EDA0008091AF01882319F08151833010F4909342 |
:10EDB000AF018091200B9091210B90936805809377 |
:10EDC000670580911E0B80936D0580911F0B8093CA |
:10EDD0006C058091220B80936B058091230B8093AF |
:10EDE00069050BC00E94268208C010922905109266 |
:10EDF000280510922705109226051F910F91FF906C |
:10EE0000EF9008958091D10A882319F480E090E072 |
:10EE10000895459882EE9AE09093DB0A8093DA0A8F |
:10EE200090913805E92FFF27E856FE4F9F5F90939A |
:10EE3000380580818093E40A9D3010F010923805E7 |
:10EE40001092D10A0E94797281E08093E10A809148 |
:10EE5000E20A8093030B8EBD81E090E0089587B1B4 |
:10EE60008C6087B94298439810923F0580E8809360 |
:10EE7000A90110923E058093A80108958091130A7C |
:10EE80009091140A81589F4F39F08091130A909104 |
:10EE9000140A8158809349058091440581508093DC |
:10EEA00044058F3F09F052C18091AE08809345051B |
:10EEB0008091B0088093460589E080934405809155 |
:10EEC0001D04992780739070892B21F48091DA05B5 |
:10EED00080FF1DC08091B208882351F080914705C2 |
:10EEE000882319F484E080933F0581E080934705EF |
:10EEF0008091B308882379F080914805882319F41C |
:10EF000084E080933E0581E08093480504C0109220 |
:10EF100047051092480580914705882309F082C073 |
:10EF20008091D508282F332724FF07C080915504EE |
:10EF3000882319F425FD8FC090C09091AF08983FA9 |
:10EF400048F08091950A8D3D28F0809145058823F1 |
:10EF50006CF00AC0983F78F08091950A853059F49A |
:10EF60008091450587FF02C0429A01C0429881E026 |
:10EF70008093A90154C080913F05815080933F0543 |
:10EF80008F3F09F06BC08091D80885FF2FC090910A |
:10EF90004905892F869580933F05992361F49093C5 |
:10EFA0003D058091450587FF02C0429A01C0429805 |
:10EFB0001092A90153C081E080933D058091A90181 |
:10EFC00090914505882349F48093490580E4809316 |
:10EFD000A90199230CF43FC040C0982311F0429A34 |
:10EFE00001C0429886958093A90138C08091950A06 |
:10EFF000869580933F058091A901813021F410927C |
:10F00000490580E401C086958093A9018091A901FA |
:10F0100090914505892311F0429A01C042981092BF |
:10F020003D051CC080913F05815080933F058F3F77 |
:10F03000A9F489E080933F058091A901813011F402 |
:10F0400080E801C086958093A9018091A9019091E3 |
:10F05000B208892311F0429A01C042988091480574 |
:10F06000882309F043C09091D50897FF07C080918D |
:10F070005504882319F496FD52C053C09091B108ED |
:10F08000983F48F08091BE0A8D3D28F0809146055A |
:10F0900088236CF00AC0983F78F08091BE0A8530D2 |
:10F0A00059F48091460587FF02C0439A01C04398F6 |
:10F0B00081E08093A80136C080913E058150809305 |
:10F0C0003E058F3F79F58091BE0A869580933E0577 |
:10F0D0008091A801813011F480E401C0869580936D |
:10F0E000A8018091A8019091460517C080913E0526 |
:10F0F000815080933E058F3FA9F489E080933E05BF |
:10F100008091A801813011F480E801C08695809338 |
:10F11000A8018091A8019091B308892311F0439A26 |
:10F1200001C04398429B05C080911C048860809375 |
:10F130001C04439B06C080911C04806180931C04C6 |
:10F14000089580911C048F7E80931C0408954FB70E |
:10F1500024E130E0F8948091C9008F778093C90052 |
:10F160008091C9008F7B8093C9008091C9008F7DF9 |
:10F170008093C900832F99278093CD002093CC00E2 |
:10F180008091C80082608093C80080E18093C900AC |
:10F190008091CA008F778093CA008091CA008F7BCC |
:10F1A0008093CA008091CA008F7D8093CA008091AD |
:10F1B000CA008F7E8093CA008091CA00877F8093A7 |
:10F1C000CA008091C9008B7F8093C9008091CA00DA |
:10F1D00084608093CA008091CA0082608093CA00D4 |
:10F1E0008091C80087FF03C08091CE00F9CF809145 |
:10F1F000C90080688093C9004FBF0895EF92FF92C5 |
:10F200000F931F93CF93DF93482F00E010E080917E |
:10F21000AA01813061F41092AA0184E480934A0526 |
:10F2200010924C0510924B0510924D0539C18091FA |
:10F230004A05882319F421E030E001C0980190913B |
:10F240004B05992371F4232B11F081E010C084E465 |
:10F2500080934A0590934C0590934B0590934D05F0 |
:10F2600008C1913069F4232B09F0F9C082E0809342 |
:10F270004B0580914C058F5F80934C0583E0F7C070 |
:10F280009230D1F4232B09F0EAC083E080934A0541 |
:10F2900040934D0590914C05923039F410924E05F3 |
:10F2A00047FF03C081E080934E0583E080934B05C8 |
:10F2B0009F5F90934C05DDC0933009F0D0C0232BA5 |
:10F2C00009F0CDC090934A0582E080934B05809170 |
:10F2D0004C058F5F80934C0520914D05822F992717 |
:10F2E000782F6627842F9927682B792B80918B089C |
:10F2F000813049F47370CB018050924063E070E03C |
:10F300000E9498A517C0823061F47770CB018050BD |
:10F31000944066E070E00E9498A526952695269573 |
:10F320000BC0737068567140CB0177FD0196BC012C |
:10F330007595679526952695022F11270F701070E9 |
:10F340000F5F1F4F0D30110508F082C07801E00EED |
:10F35000F11EF701E752F64F808191819B01281B36 |
:10F36000390BC90137FF03C0909581959F4F0697D0 |
:10F3700004F5E091CD08EE2351F0FF27EE0FFF1FBB |
:10F38000E752F64F808191818436910594F4809103 |
:10F390005604883C30F480915604865F809356046E |
:10F3A00008C088EC8093560480916F008F7D809315 |
:10F3B0006F00F701E752F64F808191819C01220F87 |
:10F3C000331F280F391F260F371F37FF02C02D5F4D |
:10F3D0003F4FE901D595C795D595C795CB010196C6 |
:10F3E0008C179D0714F4219706C061507040C61712 |
:10F3F000D7070CF4219680915604843BD0F0F70196 |
:10F40000E752F64F80819181FE01E81BF90BCF0195 |
:10F4100063E070E00E9498A5CB01880F991F860FCA |
:10F42000971F2FE13AE0E20EF31EF70191838083EC |
:10F4300007C02FE13AE0E20EF31EF70111821082BD |
:10F44000000F111F0752164FF801D183C08311C05E |
:10F450000231110570F081E08093AA010AC081E0B9 |
:10F460008093AA0110924C0510924E0584E480937B |
:10F470004A0580914C05803198F080914E05882393 |
:10F4800031F48091AA01882311F4809341011092F4 |
:10F490004C0510924E0510924B0584E480934A056A |
:10F4A000E6E0CDB7DEB70C9410A6CF93FC0197FF32 |
:10F4B00005C0CFEFF095E195FF4F01C0C1E028E610 |
:10F4C00031E0CF01B9010E9498A5FC018B3591056F |
:10F4D00054F08B5590408A35910538F484EB90E0D8 |
:10F4E0008E1B9F0BFC0141E00DC0CF01855B90405E |
:10F4F0008A35910518F4E45BF04003C02E1B3F0BE6 |
:10F50000F9014FEFEE0FFF1FE35CF64F25913491A9 |
:10F510008C2F992787FD9095289FB001299F700D0A |
:10F52000389F700D1124842F992787FD9095689F2F |
:10F53000A001699F500D789F500D1124CA01CF91F1 |
:10F5400008952AE530E0281B390BC9010E94557A3D |
:10F550000895CF93DF9380E00E94779780912601F2 |
:10F56000909127016AE070E00E9498A59F938F9385 |
:10F5700080912601909127016AE070E00E9498A591 |
:10F580007F936F9389E29AE09F938F93CAE6D7E9BE |
:10F59000DF93CF93E091C005F091C10509952DB798 |
:10F5A0003EB7285F3F4F2DBF8091A501882361F1B1 |
:10F5B00086E00E9477978091970199279F938F9378 |
:10F5C0008091D60A9091D70A6AE070E00E9484A5E3 |
:10F5D0007F936F938FED90E09F938F938091730A49 |
:10F5E0009091740A9F938F9382E39AE09F938F93F5 |
:10F5F000DF93CF93E091C005F091C10509958DB7D8 |
:10F600009EB70C968DBF12C086E00E94779780E46B |
:10F610009AE09F938F93DF93CF93E091C005F09191 |
:10F62000C10509950F900F900F900F9080913705AD |
:10F63000882309F452C080914F05909150050E9493 |
:10F640006A1C882391F08091AB01882319F01092F5 |
:10F65000AB0103C081E08093AB018CED95E00E948B |
:10F66000611C9093500580934F058091AB018823D6 |
:10F67000E1F080E00E9477971F921F9290913705EA |
:10F6800081E1989FC00111248C5C934F9F938F93CD |
:10F69000DF93CF93E091C005F091C10509952DB797 |
:10F6A0003EB72A5F3F4F2DBF3BC086E00E94779751 |
:10F6B0008091370599279F938F9387E49AE09F93D2 |
:10F6C0008F93DF93CF93E091C005F091C105099529 |
:10F6D0008DB79EB706968DBF23C0809162058823A3 |
:10F6E000F9F00E947D9780E10E94779789ED98E07C |
:10F6F0009F938F938091010199279F938F9383E527 |
:10F700009AE09F938F93DF93CF93E091C005F091A0 |
:10F71000C10509952DB73EB7285F3F4F2DBF5CC08F |
:10F7200080E10E9477978091EF029091F0026CE364 |
:10F7300070E00E9484A59F938F938091EF02909137 |
:10F74000F0026CE370E00E9484A57F936F93809138 |
:10F75000500B9091510B9F938F938EE59AE09F935E |
:10F760008F93CAE6D7E9DF93CF93E091C005F0917C |
:10F77000C10509958091B70A2DB73EB7265F3F4F67 |
:10F780002DBF80FF29C08AE10E94779780914201B6 |
:10F7900099279F938F938091500490915104A09149 |
:10F7A0005204B0915304BC01CD0124E630E040E0A6 |
:10F7B00050E00E94CDA53F932F938BE69AE09F9354 |
:10F7C0008F93DF93CF93E091C005F091C105099528 |
:10F7D0008DB79EB708968DBFDF91CF910895CF93D7 |
:10F7E000DF9380E00E94779780919709992787FDA2 |
:10F7F00090959F938F9380918F09992787FD90957E |
:10F800009F938F9380918709992787FD90959F9368 |
:10F810008F9380917F09992787FD90959F938F9370 |
:10F8200082E79AE09F938F93CAE6D7E9DF93CF935D |
:10F83000E091C005F091C105099580E10E9477979C |
:10F840002DB73EB7245F3F4F2DBF8091B709992751 |
:10F8500087FD90959F938F938091AF09992787FD9E |
:10F8600090959F938F938091A709992787FD9095F5 |
:10F870009F938F9380919F09992787FD90959F93E0 |
:10F880008F9382E89AE09F938F93DF93CF93E091D9 |
:10F89000C005F091C1050995809163082DB73EB769 |
:10F8A000245F3F4F2DBF853098F480E10E94779709 |
:10F8B00082E99AE09F938F93DF93CF93E091C00505 |
:10F8C000F091C10509950F900F900F900F9018C0FF |
:10F8D0008730B0F488E10E9477978FED90E09F9396 |
:10F8E0008F9383EA9AE09F938F93DF93CF93E09176 |
:10F8F000C005F091C10509958DB79EB706968DBFDD |
:10F90000DF91CF9108950F931F9380E00E94779726 |
:10F910002AE030E080914C0B90914D0BB9010E9490 |
:10F9200084A59F938F9380914C0B90914D0BB901BF |
:10F930000E9484A57F936F93809126019091270167 |
:10F94000B9010E9498A59F938F9380912601909171 |
:10F950002701B9010E9498A57F936F938CEA9AE0E2 |
:10F960009F938F930AE617E91F930F93E091C005C9 |
:10F97000F091C105099580E10E9477978DB79EB7F8 |
:10F980000C968DBF8091500B9091510B9F938F934C |
:10F9900080914E0B90914F0B9F938F938EEB9AE03B |
:10F9A0009F938F931F930F93E091C005F091C10532 |
:10F9B00009958DB79EB708968DBF1F910F91089539 |
:10F9C000EF92FF920F931F9380E00E9477978FED45 |
:10F9D000E82EF12CFF92EF9280919101909192018B |
:10F9E0009F938F938091360599279F938F938AECED |
:10F9F0009AE09F938F930AE617E91F930F93E09184 |
:10FA0000C005F091C105099580E10E9477978DB7F7 |
:10FA10009EB70A968DBF8091340599279F938F9347 |
:10FA2000FF92EF928091350599279F938F938DEDEB |
:10FA30009AE09F938F931F930F93E091C005F091ED |
:10FA4000C10509958DB79EB70A968DBF1F910F917D |
:10FA5000FF90EF9008950F931F9380E00E94779797 |
:10FA600080EF9AE09F938F930AE617E91F930F9315 |
:10FA7000E091C005F091C105099580E10E9477975A |
:10FA80000F900F900F900F908FEF9AE09F938F93AE |
:10FA90001F930F93E091C005F091C10509950F9058 |
:10FAA0000F900F900F901F910F9108950F931F9338 |
:10FAB00080E00E9477978DE09BE09F938F930AE60A |
:10FAC00017E91F930F93E091C005F091C1050995C7 |
:10FAD00080E10E9477970F900F900F900F908CE12C |
:10FAE0009BE09F938F931F930F93E091C005F0913C |
:10FAF000C10509950F900F900F900F901F910F91D6 |
:10FB000008951F93CF93DF93182F8091AB0BCAE614 |
:10FB1000D7E9882391F40E9477978AE29BE09F932C |
:10FB20008F93DF93CF93E091C005F091C1050995C4 |
:10FB30000F900F900F900F9016C080E00E94779763 |
:10FB40008BEA9BE09F938F9388E39BE09F938F9337 |
:10FB5000DF93CF93E091C005F091C10509958DB772 |
:10FB60009EB706968DBF80916905CAE6D7E98823BE |
:10FB700099F480E10E9477978FE39BE09F938F93A6 |
:10FB8000DF93CF93E091C005F091C10509950F90E7 |
:10FB90000F900F900F9089C080E10E94779780911D |
:10FBA000AC0199279F938F938AE49BE09F938F9357 |
:10FBB000DF93CF93E091C005F091C10509958DB712 |
:10FBC0009EB706968DBF80916C058823E9F088E189 |
:10FBD0000E94779780916C0599279F938F938091CE |
:10FBE0006D0599279F938F9383E59BE09F938F9358 |
:10FBF000DF93CF93E091C005F091C10509958DB7D2 |
:10FC00009EB708968DBF12C088E10E9477978BE55A |
:10FC10009BE09F938F93DF93CF93E091C005F0918A |
:10FC2000C10509950F900F900F900F90809151058D |
:10FC3000882331F08EE10E94779781E69BE005C032 |
:10FC40008EE10E94779784E69BE09F938F93DF93EA |
:10FC5000CF93E091C005F091C10509950F900F90E9 |
:10FC60000F900F901F3251F49091AC018091690573 |
:10FC70009817D8F49F5F9093AC0109C01F3459F4D2 |
:10FC80008091AC01823088F081508093AC0181E09A |
:10FC9000809351050AC01F3141F48091AC01882343 |
:10FCA00021F080936A0510925105DF91CF911F9149 |
:10FCB00008951F93CF93DF93182F8091AB0BCAE663 |
:10FCC000D7E9882391F40E94779787E69BE09F937A |
:10FCD0008F93DF93CF93E091C005F091C105099513 |
:10FCE0000F900F900F900F9016C080E00E947797B2 |
:10FCF0008BEA9BE09F938F9385E79BE09F938F9385 |
:10FD0000DF93CF93E091C005F091C10509958DB7C0 |
:10FD10009EB706968DBF80916905882361F480E1C6 |
:10FD20000E9477978CE79BE09F938F938AE697E9F1 |
:10FD30009F938F930FC08091D40ACAE6D7E983308E |
:10FD400099F080E10E94779787E89BE09F938F93DB |
:10FD5000DF93CF93E091C005F091C10509950F9015 |
:10FD60000F900F900F908AC080E10E94779780914A |
:10FD7000AD0199279F938F9382E99BE09F938F9387 |
:10FD8000DF93CF93E091C005F091C10509958DB740 |
:10FD90009EB706968DBF80916C058823E9F088E1B7 |
:10FDA0000E94779780916C0599279F938F938091FC |
:10FDB0006D0599279F938F938CE99BE09F938F9379 |
:10FDC000DF93CF93E091C005F091C10509958DB700 |
:10FDD0009EB708968DBF12C088E10E94779784EA8B |
:10FDE0009BE09F938F93DF93CF93E091C005F091B9 |
:10FDF000C10509950F900F900F900F9080915205BB |
:10FE0000882331F08EE10E9477978AEA9BE005C053 |
:10FE10008EE10E9477978DEA9BE09F938F93DF930B |
:10FE2000CF93E091C005F091C10509950F900F9017 |
:10FE30000F900F901F3251F49091AD0180916905A0 |
:10FE40009817E0F49F5F9093AD0109C01F3459F4F7 |
:10FE50008091AD01823090F081508093AD0181E0BE |
:10FE6000809352050BC01F3149F48091AD01882366 |
:10FE700029F0806880936A0510925205DF91CF9136 |
:10FE80001F9108950F931F93CF93DF938091A50146 |
:10FE9000CAE6D7E9882309F47DC080E00E947797FD |
:10FEA0008091D30A99279F938F938091D50A9927A0 |
:10FEB0009F938F9380EB9BE09F938F938E01DF93B3 |
:10FEC000CF93E091C005F091C10509958DB79EB71C |
:10FED00008968DBF8091D40A833031F48CE00E9463 |
:10FEE00077978FEB9BE005C08CE00E94779784ECBE |
:10FEF0009BE09F938F93DF93CF93E091C005F091A8 |
:10FF0000C10509950F900F900F900F908091D20A24 |
:10FF100081FF12C08CE00E94779789EC9BE09F9351 |
:10FF20008F931F930F93E091C005F091C105099540 |
:10FF30000F900F900F900F9080E10E947797809123 |
:10FF4000970199279F938F938FED90E09F938F93C5 |
:10FF50008091D80A9091D90A9F938F938091D60A65 |
:10FF60009091D70A6AE070E00E9484A57F936F9316 |
:10FF70008EEC9BE09F938F938AE697E99F938F93F4 |
:10FF8000E091C005F091C10509958DB79EB70C961B |
:10FF90008DBF12C082E00E94779781EE9BE09F9315 |
:10FFA0008F93DF93CF93E091C005F091C105099540 |
:10FFB0000F900F900F900F90DF91CF911F910F91A5 |
:10FFC0000895CF93C82F2091530520935405992766 |
:10FFD0008F329105E1F0803391051CF44F9779F051 |
:10FFE00027C08F349105D9F08F38910509F586E047 |
:10FFF000289FF0011124ED50F64F849117C086E040 |
:020000021000EC |
:10000000289FF0011124EC50F64F84910FC086E038 |
:10001000289FF0011124EB50F64F849107C086E031 |
:10002000289FF0011124EA50F64F849180935305E4 |
:1000300090915305809154059813C0E08091AE01D2 |
:10004000282F33278F5F8093AE0120FD04C080915D |
:100050005505C81789F0C09355050E947D9790916A |
:10006000530586E0989FF0011124E950F64F259141 |
:1000700034918C2FF901099580E090E0CF9108959B |
:1000800010924D0B10924C0B1092510B1092500B82 |
:1000900010924F0B10924E0B1092520B82E390E095 |
:1000A0000E94611C90935705809356050895E82F90 |
:1000B000FF2783E0EE0FFF1F8A95E1F7E858F64F20 |
:1000C00095819F3F19F480E090E00895993C18F4E1 |
:1000D000892F99270895808182FF07C08AE0989F21 |
:1000E000C0011124885097400895892F99270895B9 |
:1000F000A0E0B0E0EEE7F0E80C94F1A580915605A1 |
:10010000909157050E946A1C882309F4CFC0809102 |
:10011000560590915705C2969093570580935605C2 |
:10012000C0E0D0E07E01BB247FEFC72E8091520B50 |
:100130008E3F21F481E08093EC0204C08F3F11F4E4 |
:10014000B092EC02DD2408E719E0F801838187FF13 |
:1001500017C0B3948581893C30F08D2D0E94578063 |
:10016000C80FD91F02C0C80FD11DF8018181E80E48 |
:10017000F11C8681C81610F0C82E02C01092EC0245 |
:10018000D394085F1F4FFBE0FD15F8F6C092520BA9 |
:10019000EF2841F520915C0530915D0540915E05A9 |
:1001A00050915F05BB27A52F942F832F90935B055C |
:1001B00080935A05AA27BB27281B390B4A0B5B0BD8 |
:1001C000CE01AA27BB27280F391F4A1F5B1F209388 |
:1001D0005C0530935D0540935E0550935F05C5E077 |
:1001E000D0E013C080915A0590915B058C179D0754 |
:1001F00018F4C81BD90B02C0C0E0D0E08B2D9927A2 |
:10020000880F991FC80FD91F2596D0934D0BC09307 |
:100210004C0BCF3FD10578F48091260190912701B6 |
:100220008C9F90018D9F300D9C9F300D1124C90132 |
:1002300064E670E013C0CE019695879596958795F4 |
:100240002091260130912701289FA001299F500D60 |
:10025000389F500D1124CA0169E170E00E9484A505 |
:1002600070934F0B60934E0B8091580590915905F8 |
:100270008C0F9D1F909359058093580552E0813D46 |
:100280009507A0F02091500B3091510B2F5F3F4FFD |
:10029000805D9240E2E0813D9E07C0F79093590552 |
:1002A000809358053093510B2093500BE9E0CDB764 |
:1002B000DEB70C940DA630916E05E32FFF2783E087 |
:1002C000EE0FFF1F8A95E1F7E858F64F2781422F7E |
:1002D000552747FD509580916F05992784179507FD |
:1002E0002CF420936F05309371050AC0222341F04E |
:1002F0008091700599274817590714F420937005C9 |
:10030000832F8F5F80936E058C30D0F010926E0536 |
:10031000809170058F3F19F08093650502C010929F |
:10032000650580916F0580936605809171058093C6 |
:1003300064058FEF8093700510926F051092710520 |
:10034000089595E1899F802D11240E94439D80EDA1 |
:100350009EE09F938F9385E19DE99F938F93E0911A |
:10036000C005F091C10509950F900F900F900F9067 |
:100370000895CF93C0E09091AF0190936305809171 |
:100380001D0485FF13C080911404882331F08091EF |
:100390008B08863011F4CEE001C0C0E1992301F151 |
:1003A000809172058031E1F4C92F1AC09091370510 |
:1003B000892F81508232B0F480915504882349F40A |
:1003C000E92FFF27EE0FFF1FE151F44F849188239F |
:1003D00049F4E92FFF27EE0FFF1FE251F44FC491BC |
:1003E000CC2351F48091D80886FD03C01092AF0150 |
:1003F00005C0C091AF0102C0C09363058091720532 |
:100400008C1771F480917305909174050E946A1C99 |
:10041000882319F480E090E017C080EA9FE002C0D2 |
:1004200080ED97E00E94611C9093740580937305A2 |
:10043000CC2331F08091AF01C81711F41092AF01B5 |
:10044000C09372058C2F9927CF91089520E030E05A |
:1004500050E08091250B992789389105E9F08A3879 |
:10046000910564F48230910539F1833091051CF4D3 |
:100470000197F9F028C0039719F125C08D3891052F |
:10048000A1F08E38910524F48A38910541F01BC003 |
:100490008E38910539F017C025EB3BE008C02DE8F8 |
:1004A0003CE005C023E53BE002C02FE73BE05CE217 |
:1004B0000AC02AEC32E002C02DED32E054E003C065 |
:1004C0002BEA3BE059E090911A0B40E080911B0B26 |
:1004D000481770F4951760F4D901A90FB11DE42FE6 |
:1004E000FF27E95FF44F85898C939F5F4F5FEECFC5 |
:1004F000089520E335E7809142018B3211F08D326F |
:10050000F9F480917608282F332780914A0490913E |
:100510004B04829FA001839F500D929F500D112488 |
:10052000CA0163E070E00E9498A5CB019B01205DA9 |
:100530003A48C196C19708F03FC02EEF34E73CC05F |
:10054000803229F580911D0481FF36C0209160051D |
:1005500030916105205D3A4855E72133350748F071 |
:1005600085E72439380718F420E335E702C024561C |
:10057000304045E720333407F8F454E72D3C350785 |
:1005800018F020E335E718C02C593F4F15C08E35C1 |
:1005900049F4909145048AE0989F90011124205DD0 |
:1005A0003A480AC0863741F4909145048AE0989F02 |
:1005B000C0011124281B390BC90108951F939927E5 |
:1005C0008A38910509F4ABC18B38910524F4893838 |
:1005D000910551F064C38D38910509F497C28E38A6 |
:1005E000910509F4F0C15BC30E94B981182F809373 |
:1005F0008F0C8091500490915104A0915204B091BD |
:100600005304BC01CD0124E630E040E050E00E94FC |
:10061000CDA5DA01C9018C509E4F9093BB0B8093FE |
:10062000BA0B112319F40E94798202C080E395E786 |
:100630009093C10B8093C00B8091C00B9091C10B24 |
:100640009093C30B8093C20B9093C50B8093C40B04 |
:100650002091BA0B3091BB0B8091BE0B9091BF0BD8 |
:100660002817390724F43093BF0B2093BE0B8091D9 |
:10067000BC0B9091BD0B8217930724F43093BD0BF4 |
:100680002093BC0B1092B70B85EB9BE090938805F1 |
:1006900080938705809142018093DB0B80911C043D |
:1006A00080FF02C083E401C080E28093DC0B2091D4 |
:1006B0003705222309F1822F6AE00E9478A5805D28 |
:1006C0008093C60B822F0E9478A5892F805D80932E |
:1006D000C70B8AE38093C80B81E1289FF0011124A6 |
:1006E000A9ECBBE0EC5CF34F9FE084918D939150BB |
:1006F000319697FFFACFDEC080911404882361F011 |
:10070000A6ECBBE0EEE8FEE094E184918D9391507D |
:10071000319697FFFACFC0C280911D0485FF0CC0AF |
:10072000A6ECBBE0E4EAFEE094E184918D93915065 |
:10073000319697FFFACFB0C280916205882301F10C |
:10074000A6ECBBE0E7E8FEE096E084918D93915043 |
:10075000319697FFFACF80910101805D8093CA0B9B |
:10076000ADECBBE0E9EDF8E09BE081918D93915019 |
:1007700097FFFBCF80E28093D80B8093D90BB8C052 |
:1007800030916C05332309F497C087E58093C60B3D |
:1007900080E58093C70B40E24093C80B20916D0524 |
:1007A000822F6AE00E9478A5805D8093C90B822F1A |
:1007B0000E9478A5892F805D8093CA0B8FE2809379 |
:1007C000CB0B832F0E9478A5805D8093CC0B832F69 |
:1007D0000E9478A5892F805D8093CD0B4093CE0B2E |
:1007E000209167053091680583E0293E380780F045 |
:1007F000C90168EE73E00E9484A5CB01805D8093FF |
:10080000CF0BC90168EE73E00E9484A59C0102C071 |
:100810004093CF0B2536310580F0C90164E670E0C6 |
:100820000E9484A5CB01805D8093D00BC90164E652 |
:1008300070E00E9484A59C0103C080E28093D00BED |
:10084000C9016AE070E00E9484A5CB01805D8093BD |
:10085000D10BC9016AE070E00E9484A5805D80939D |
:10086000D20B8DE68093D30B80E28093D40B209142 |
:100870006B05253660F0822F64E60E9478A5805DC6 |
:100880008093D50B822F0E9478A5292F02C08093D8 |
:10089000D50B822F6AE00E9478A5805D8093D60BED |
:1008A000822F0E9478A5892F805D8093D70B83E7E4 |
:1008B0008093D80B80E261CF809141048823D9F4E2 |
:1008C000A6ECBBE0ECEBFEE090E184918D939150BF |
:1008D000319697FFFACF82E38093D60B8EE2809316 |
:1008E000D70B80E38093D80B84E38093D90B81E608 |
:1008F0008093DA0BD1C1A6ECBBE0EAEBFEE094E119 |
:1009000084918D939150319697FFFACF8091EC02AC |
:10091000882309F4C1C182E58093C60BBDC18091D3 |
:10092000500490915104A0915204B0915304BC0121 |
:10093000CD0124E630E040E050E00E94CDA5DA0190 |
:10094000C9018C509E4F9093A30C8093A20C809170 |
:100950008F0C882319F40E94798202C080E395E706 |
:100960009093A50C8093A40C88E78093A60C8091AB |
:10097000D30A8093A70C8091D20A81FF02C084E43D |
:1009800007C08091D40A833011F480E201C081E273 |
:100990008093A80C8DE89CE0909388058093870550 |
:1009A000809197018093B40C8091A80C8093B60C31 |
:1009B0008091D80A9091D90A97FD019695958795CF |
:1009C0008093A90C69C10E945B8180915004909131 |
:1009D0005104A0915204B0915304BC01CD0124E60E |
:1009E00030E040E050E00E94CDA5DA01C9018C5012 |
:1009F0009E4F90936E0B80936D0B8091260190918A |
:100A000027019093680B8093670B8091260190914A |
:100A1000270190936A0B8093690B8091730A9091E0 |
:100A2000740A97FD0196959587958093590B80934D |
:100A3000600B2091D80A3091D90A37FF02C02F5F8E |
:100A40003F4F3595279520935E0B8091D60A909164 |
:100A5000D70A64E170E00E9484A560935F0B209345 |
:100A6000650B6093660B80918F0C882319F40E94AC |
:100A7000798202C080E395E79093760B8093750BA3 |
:100A800088E78093770B80912601909127019093BE |
:100A9000720B8093710B809165058C5E80936B0B5C |
:100AA000809166058C5E80936C0B8091500B9091C9 |
:100AB000510B6AE070E00E9484A57093740B609300 |
:100AC000730B80918F0C8093550B80914C0B909100 |
:100AD0004D0B9093700B80936F0B83E59BE090938D |
:100AE0008805809387052091EF023091F002C901BB |
:100AF0006CE370E00E9484A560937A0BC9016CE3FB |
:100B000070E00E9484A580937B0BC6C00E945B812D |
:100B10008091D60A9091D70A64E670E00E9484A57D |
:100B20007093950B6093940B8091730A9091740A63 |
:100B300097FD0196959587958093850B80919101FE |
:100B40009091920197FD0196959587958093860BDC |
:100B50008091F7078093890B8091D80A9091D90AE8 |
:100B600097FD01969595879580938A0B8091020158 |
:100B7000482F55279A012E5F3F4F80912601909173 |
:100B800027012817390784F48091260190912701C5 |
:100B9000841B950B9C01220F331F280F391F822FB6 |
:100BA00086508093910B02C01092910B8091910B13 |
:100BB000853618F084E68093910B8091370599274C |
:100BC0009093930B8093920B8091500490915104D9 |
:100BD000A0915204B0915304BC01CD0124E630E051 |
:100BE00040E050E00E94CDA5DA01C9018C509E4F33 |
:100BF0009093970B8093960B8091260190912701FB |
:100C000090938C0B80938B0B809126019091270100 |
:100C100090938E0B80938D0B80918F0C882319F409 |
:100C20000E94798202C080E395E79093990B8093AC |
:100C3000980B80918F0C885880939A0B8091260195 |
:100C40009091270190939E0B80939D0B8091650559 |
:100C50008C5E80938F0B809166058C5E8093900BE9 |
:100C60008091500B9091510B6AE070E00E9484A536 |
:100C70007093A00B60939F0B1092810B80914C0B93 |
:100C800090914D0B90939C0B80939B0B8FE79BE077 |
:100C900090938805809387052CE230E002C020E025 |
:100CA00030E0C9011F910895EF92FF920F931F93B7 |
:100CB000CF93DF9380916005909161059C0163E083 |
:100CC000220F331F6A95E1F7281B390B80913C03F3 |
:100CD00090913D03280F391F37FF02C0295F3F4F16 |
:100CE00053E0359527955A95E1F7309361052093A8 |
:100CF00060058091780599278230910509F443C7F2 |
:100D0000833091053CF4009781F0019709F42EC3DC |
:100D10000C9428938330910511F40C944B90049714 |
:100D200011F40C94B3910C94289380917705282F9B |
:100D30003327442755278F5F80937705F9012131A9 |
:100D4000310510F00C942593ED58FF4F0C941FA61D |
:100D500080911D0485FF2AC080E00E94439D809100 |
:100D60002601909127016AE070E00E9498A59F9368 |
:100D70008F9380912601909127016AE070E00E9494 |
:100D800098A57F936F9386EE9EE09F938F9386E363 |
:100D90009DE99F938F93E091C005F091C10509955E |
:100DA0002DB73EB7285F3F4F2DBF28C080E00E947F |
:100DB000439D80912601909127016AE070E00E9496 |
:100DC00098A59F938F9380912601909127016AE0C7 |
:100DD00070E00E9498A57F936F9383EF9EE09F93AE |
:100DE0008F9385E19DE99F938F93E091C005F091EA |
:100DF000C10509958DB79EB708968DBF8091B70A3A |
:100E000080FF3FC080916D048823E9F08AE00E9452 |
:100E1000439D8091420199279F938F938091500425 |
:100E200090915104A0915204B0915304BC01CD01A2 |
:100E300024E630E040E050E00E94CDA53F932F93A0 |
:100E400080E09FE0C0C68AE00E94439D80915004EC |
:100E500090915104A0915204B0915304BC01CD0172 |
:100E600024E630E040E050E00E94CDA53F932F9370 |
:100E70008CE09FE09F938F9385E19DE99F938F93F3 |
:100E800097C38AE00E94439D87E19FE09F938F93E1 |
:100E900085E19DE90C94289080911D0485FF2AC06E |
:100EA00085E10E94439D8091EF029091F0026CE3F6 |
:100EB00070E00E9484A59F938F938091EF029091A0 |
:100EC000F0026CE370E00E9484A57F936F9381E24F |
:100ED0009FE09F938F9386E39DE99F938F93E0918B |
:100EE000C005F091C10509952DB73EB7285F3F4F6A |
:100EF0002DBF28C085E10E94439D8091EF02909113 |
:100F0000F0026CE370E00E9484A59F938F93809120 |
:100F1000EF029091F0026CE370E00E9484A57F9351 |
:100F20006F938EE29FE09F938F9385E19DE99F935E |
:100F30008F93E091C005F091C10509958DB79EB7DB |
:100F400008968DBF8FE10E94439D80E690E09F93BD |
:100F50008F938091730A9091740A9F938F938BE380 |
:100F60009FE09F938F93C5E1DDE9DF93CF93E091FD |
:100F7000C005F091C105099580911C042DB73EB7BD |
:100F8000285F3F4F2DBF80FF06C089E20E94439D2E |
:100F900086E49FE073C389E20E94439D88E49FE05A |
:100FA000DAC680911D0485FF1BC08AE20E94439D22 |
:100FB0008091500B9091510B9F938F938AE49FE007 |
:100FC0009F938F9386E39DE99F938F93E091C00554 |
:100FD000F091C10509958DB79EB706968DBF1BC0D0 |
:100FE0008AE20E94439D8091500B9091510B9F93F8 |
:100FF0008F9382E59FE09F938F9385E19DE99F9377 |
:101000008F93E091C005F091C10509952DB73EB7CA |
:101010002A5F3F4F2DBF86E30E94439D80914C0B7A |
:1010200090914D0B6AE070E00E9484A59F938F938E |
:1010300080914C0B90914D0B6AE070E00E9484A56A |
:101040007F936F938AE59FE09F938F9385E19DE95E |
:101050009F938F930C94069289E00E94439D86E6AD |
:101060009FE09F938F9305E11DE91F930F93E091FC |
:10107000C005F091C10509958EE10E94439D0F9036 |
:101080000F900F900F9088E69FE09F938F931F9390 |
:101090000F93E091C005F091C105099583E30E948B |
:1010A000439D0F900F900F900F908AE69FE09F93C3 |
:1010B0008F931F930F93E091C005F091C10509959F |
:1010C0008FE30E94439D0F900F900F900F908CE63E |
:1010D0009FE09F938F931F930F93E091C005F09132 |
:1010E000C10509958EE70E94439D0F900F900F90C8 |
:1010F0000F9082E89FE00C94E6918091A5018823EF |
:1011000009F462C08DE50E94439D88E99FE09F93AA |
:101110008F93C5E1DDE9DF93CF93E091C005F091B6 |
:10112000C105099584E50E94439D0F900F900F9093 |
:101130000F908091D30A99279F938F938AE99FE01C |
:101140009F938F93DF93CF93E091C005F091C105FA |
:1011500009958EE50E94439D2DB73EB72A5F3F4F0C |
:101160002DBF8091D60A9091D70A6AE070E00E9464 |
:1011700084A57F936F9383EA9FE09F938F93DF9380 |
:10118000CF93E091C005F091C10509958DB79EB749 |
:1011900006968DBF8091D40A833081F48091D20A63 |
:1011A00081FF06C08BE50E94439D8DEA9FE0D3C579 |
:1011B0008BE50E94439D80EB9FE0CDC58BE50E94AF |
:1011C000439D83EB9FE040C784E00AC48091A50162 |
:1011D000882309F47BC080917A0545E1E42E4DE92E |
:1011E000F42E882309F44BC089E60E94439D809128 |
:1011F000360599279F938F9386EB9FE09F938F935C |
:10120000FF92EF92E091C005F091C105099585E745 |
:101210000E94439D2DB73EB72A5F3F4F2DBF80915F |
:10122000970199279F938F9300E610E01F930F93E8 |
:101230008091D80A9091D90A9F938F9381EC9FE077 |
:101240009F938F93FF92EF92E091C005F091C105BB |
:10125000099582E70E94439D8DB79EB70A968DBF80 |
:101260008091340599279F938F931F930F938091BB |
:10127000350599279F938F938DEC9FE086C689E66D |
:101280000E94439D8091970199279F938F9380E6B9 |
:1012900090E09F938F938091D80A9091D90A9F9361 |
:1012A0008F938091D50A99279F938F938DED9FE01F |
:1012B0009F938F93FF92EF92E091C005F091C1054B |
:1012C00009958DB79EB70C960C940E9285E088C355 |
:1012D000909137059923D1F080918405882381F07E |
:1012E000933270F487E00E94A18183E90E94439DBC |
:1012F0008091370599279F938F9386EF9FE0DAC3FC |
:1013000083E90E94439D81E090E1E9C380911D043F |
:1013100035E1E32E3DE9F32E85FF07C084E90E9405 |
:10132000439D87E090E10C94159283E90E94439DD0 |
:101330008AE190E10C9415928091F20C863069F468 |
:1013400080917A05882321F010927A050C942293DB |
:1013500081E080937A050C942293883011F00C94EC |
:1013600022930E94489D81E00C941E938091770502 |
:10137000282F3327442755278F5F80937705F9015E |
:101380002131310510F00C942593EC57FF4F0C944C |
:101390001FA680911D0485FF43C080E00E94439DED |
:1013A0008091500B9091510B9F938F9380912601C8 |
:1013B000909127016AE070E00E9498A59F938F9317 |
:1013C00080912601909127016AE070E00E9498A523 |
:1013D0007F936F938091EF029091F0026CE370E045 |
:1013E0000E9484A59F938F938091EF029091F002C9 |
:1013F0006CE370E00E9484A57F936F9380E390E19B |
:101400009F938F9386E39DE99F938F93E091C0050F |
:10141000F091C10509952DB73EB7225F3F4FC2C578 |
:1014200080E00E94439D8091500B9091510B9F93BF |
:101430008F9380912601909127016AE070E00E94CD |
:1014400098A59F938F9380912601909127016AE040 |
:1014500070E00E9498A57F936F938091EF02909126 |
:10146000F0026CE370E00E9484A59F938F938091BB |
:10147000EF029091F0026CE370E00E9484A57F93EC |
:101480006F938BE490E1F7C285E10E94439D80E673 |
:1014900090E09F938F9380919101909192019F93FF |
:1014A0008F9386E690E19F938F93C5E1DDE9DF930B |
:1014B000CF93E091C005F091C10509958091B70ADD |
:1014C0002DB73EB7285F3F4F2DBF80FF51C08091A1 |
:1014D0006D04882339F18FE10E94439D809150046F |
:1014E00090915104A0915204B0915304BC01CD01DC |
:1014F00024E630E040E050E00E94CDA53F932F93DA |
:1015000080E790E19F938F9385E29DE99F938F936E |
:10151000E091C005F091C10509958DB79EB706967B |
:101520008DBF38C08FE10E94439D809150049091FF |
:101530005104A0915204B0915304BC01CD0124E6A2 |
:1015400030E040E050E00E94CDA53F932F9389E723 |
:1015500090E19F938F93DF93CF93E091C005F0913B |
:10156000C10509952DB73EB72A5F3F4F2DBF12C069 |
:101570008FE10E94439D82E890E19F938F93DF93D8 |
:10158000CF93E091C005F091C10509950F900F90A0 |
:101590000F900F9089E20E94439D8091420199270C |
:1015A0009F938F938CE890E19F938F93DF93CF93DA |
:1015B000E091C005F091C10509958DB79EB70696DB |
:1015C0002DC78091A5018823F9F08BE20E94439DED |
:1015D0008091970199279F938F938091D60A90913C |
:1015E000D70A6AE070E00E9484A57F936F9380E63B |
:1015F00090E09F938F938091D80A9091D90A9F93FE |
:101600008F938FE890E168C182E0EAC18FE30E9486 |
:10161000439D80914E0B90914F0B9F938F938091A0 |
:101620004C0B90914D0B6AE070E00E9484A59F9353 |
:101630008F9380914C0B90914D0B6AE070E00E946B |
:1016400084A57F936F9386EA90E19F938F93C5E182 |
:10165000DDE9DF93CF93E091C005F091C1050995D5 |
:1016600080911C042DB73EB7265F3F4F2DBF80FFF2 |
:101670000AC082E50E94439D8AEB90E19F938F937D |
:1016800085E29DE9E5C482E50E94439D8DEB90E1F2 |
:1016900062C38091A50125E1E22E2DE9F22E882377 |
:1016A00009F449C084E50E94439D8091D30A99279B |
:1016B0009F938F938091D50A99279F938F9380EC66 |
:1016C00090E19F938F93E701FF92EF92E091C00525 |
:1016D000F091C10509958DB79EB708968DBF809191 |
:1016E000D40A833051F484E60E94439D83ED90E157 |
:1016F0009F938F93FF92EF920BC084E60E94439DCD |
:1017000089ED90E19F938F9386E39DE99F938F935B |
:10171000E091C005F091C10509950F900F900F90D1 |
:101720000F908091D20A81FF95C784E60E94439D65 |
:101730008FED90E110C384E50E94439D85EE90E11A |
:1017400074C68091790595E1E92E9DE9F92E8823EB |
:1017500009F45BC089E60E94439D83E00E945780A4 |
:101760006AE070E00E9484A59F938F9383E00E94BB |
:1017700057806AE070E00E9484A57F936F9382E0B7 |
:101780000E9457806AE070E00E9484A59F938F9327 |
:1017900082E00E9457806AE070E00E9484A57F93F7 |
:1017A0006F9381E00E9457806AE070E00E9484A5F8 |
:1017B0009F938F9381E00E9457806AE070E00E94BF |
:1017C00084A57F936F9380E00E9457806AE070E069 |
:1017D0000E9484A59F938F9380E00E9457806AE0C7 |
:1017E00070E00E9484A57F936F938BEF90E19F93AD |
:1017F0008F93FF92EF92E091C005F091C10509959A |
:101800002DB73EB72C5E3F4FCDC389E60E94439D66 |
:1018100080E690E09F938F9380919709992787FDA9 |
:1018200090959F938F9380918F09992787FD90952D |
:101830009F938F9380918709992787FD90959F9318 |
:101840008F9380917F09992787FD90959F938F9320 |
:1018500088E191E19F938F93FF92EF92E091C00511 |
:10186000F091C10509958DB79EB70E96D7C58091A9 |
:10187000790590916308882309F4AFC0943009F486 |
:10188000AEC09630C9F58EE70E94439D85E00E9468 |
:1018900057806AE070E00E9484A59F938F9385E053 |
:1018A0000E9457806AE070E00E9484A57F936F9346 |
:1018B00084E00E9457806AE070E00E9484A59F93B4 |
:1018C0008F9384E00E9457806AE070E00E9484A5B4 |
:1018D0007F936F938BE291E19F938F9385E19DE9D5 |
:1018E0009F938F93E091C005F091C10509952DB7A5 |
:1018F0003EB7245F3F4F56C3973008F4ABC68EE720 |
:101900000E94439D88E00E9457806AE070E00E9438 |
:1019100084A59F938F9388E00E9457806AE070E0CF |
:101920000E9484A57F936F9387E00E9457806AE0AE |
:1019300070E00E9484A59F938F9387E00E94578058 |
:101940006AE070E00E9484A57F936F9386E00E9416 |
:1019500057806AE070E00E9484A59F938F9386E091 |
:101960000E9457806AE070E00E9484A57F936F9385 |
:1019700085E00E9457806AE070E00E9484A59F93F2 |
:101980008F9385E00E9457806AE070E00E9484A5F2 |
:101990007F936F9384E00E9457806AE070E00E941A |
:1019A00084A59F938F9384E00E9457806AE070E043 |
:1019B0000E9484A57F936F938AE391E19F938F9315 |
:1019C00085E19DE99F938F93E091C005F091C1055A |
:1019D00009958DB79EB7489621C5943021F486E0CD |
:1019E0000E94A18137C69630F1F48EE70E94439D94 |
:1019F00080E690E09F938F938091A709992787FDB8 |
:101A000090959F938F9380919F09992787FD90953B |
:101A10009F938F9387E591E19F938F9385E19DE954 |
:101A20009F938F93B6C2973008F414C68EE70E9436 |
:101A3000439D80E690E09F938F938091B70999270B |
:101A400087FD90959F938F938091AF09992787FD8C |
:101A500090959F938F938091A709992787FD9095E3 |
:101A60009F938F9380919F09992787FD90959F93CE |
:101A70008F938AE691E19F938F9385E19DE99F93F0 |
:101A80008F93ECCE90913705992309F44AC0809149 |
:101A900084058823F9F09332E8F487E00E94A1815D |
:101AA00083E90E94439D8091370599279F938F93E7 |
:101AB0008DE791E19F938F9385E29DE99F938F93AB |
:101AC000E091C005F091C10509952DB73EB72A5F99 |
:101AD0003F4F68C283E90E94439D88E891E19F934C |
:101AE0008F9305E11DE91F930F93E091C005F091DD |
:101AF000C10509951F921F929091370581E1989F2A |
:101B0000C00111248C5C934F9F938F931F930F936D |
:101B1000E091C005F091C10509958DB79EB70A9671 |
:101B20007DC480911D0405E1E02E0DE9F02E85FFB6 |
:101B300006C084E90E94439D8EE891E176C483E962 |
:101B40000E94439D81EA91E170C48091F20C86303D |
:101B500079F480917905882319F01092790503C0F2 |
:101B600081E08093790585E00E94A18186E085C2AD |
:101B7000883009F4F4C3813009F064C50E94489D9F |
:101B8000109278055DC580917705282F332744276B |
:101B900055278F5F80937705F9012131310508F0D2 |
:101BA00054C5EB56FF4F0C941FA680E00E94439D46 |
:101BB00089ED98E09F938F938091010199279F93DE |
:101BC0008F9387EB91E19F938F9385E29DE99F939C |
:101BD0008F93E091C005F091C10509952DB73EB7EF |
:101BE000285F3F4FDFC185E10E94439D87EE98E06B |
:101BF0009F938F93809102016AE00E9478A5892FBC |
:101C000099279F938F93809102010E9478A599272D |
:101C10009F938F9386EC91E19F938F9385E19DE94C |
:101C20009F938F93E091C005F091C105099575CF01 |
:101C30008AE20E94439D87ED91E19F938F93C5E1D6 |
:101C4000DDE9DF93CF93E091C005F091C1050995DF |
:101C50008091B70A0F900F900F900F9080FF41C0B6 |
:101C6000809171089091330481FD0BC0892F9927D1 |
:101C70009F938F938CED91E19F938F93DF93CF93FD |
:101C80001FCFE091C005F091C105933318F086EEA7 |
:101C900091E102C08DEE91E19F938F93DF93CF93FB |
:101CA00009950F900F900F900F9080919A0AE091F4 |
:101CB000C005F091C1059091330480FF0BC0892FBE |
:101CC00099279F938F9384EF91E19F938F93DF9355 |
:101CD000CF9372CC892F99279F938F938AEF91E1AD |
:101CE000B7C080E092E137C08FE30E94439D89E056 |
:101CF00092E19F938F93C5E1DDE9DF93CF93E0916C |
:101D0000C005F091C10509950F900F900F900F90AD |
:101D10008091C708882319F48DE092E11CC080915E |
:101D20002A04E091C005F091C105882319F086E1ED |
:101D300092E102C08DE192E19F938F93DF93CF9365 |
:101D400009950F900F900F900F908091D70886FF04 |
:101D500081C484E292E19F938F93DF93CF9369C311 |
:101D600084E50E94439D8BE292E19F938F93C5E1AE |
:101D7000DDE9DF93CF93E091C005F091C1050995AE |
:101D80008091B70A0F900F900F900F9085FD03C0C0 |
:101D900080E392E108C08091B5080E940E49823329 |
:101DA00058F489E392E19F938F93DF93CF93E0916F |
:101DB000C005F091C10516C0843B18F080E492E1A3 |
:101DC000F2CF8091D708E091C005F091C10585FF61 |
:101DD00003C087E492E102C08EE492E19F938F9367 |
:101DE000DF93CF9309950F900F900F900F908091F4 |
:101DF000CB08882309F42EC48EE50E94439D809170 |
:101E0000CB0899279F938F9385E592E1CDCB89E607 |
:101E10000E94439D80E692E19F938F93C5E1DDE9A7 |
:101E2000DF93CF93E091C005F091C10509950F9024 |
:101E30000F900F900F908091CA08E091C005F0912B |
:101E4000C105882351F099279F938F938AE692E1E9 |
:101E50009F938F93DF93CF9337CE8EE692E19F933C |
:101E60008F93DF93CF93E9C280917B0515E1E12E3B |
:101E70001DE9F12E882309F053C08EE70E94439D8F |
:101E80008091700199279F938F9380916608E82F26 |
:101E9000FF27EE0FFF1FE752F64F808191819F933E |
:101EA0008F9380916508E82FFF27EE0FFF1FE75201 |
:101EB000F64F808191819F938F9384E792E19F9366 |
:101EC0008F93FF92EF92E091C005F091C1050995C3 |
:101ED00083E90E94439D8DB79EB70A968DBF80917E |
:101EE0006808E82FFF27EE0FFF1FE752F64F8081AB |
:101EF00091819F938F9380916708E82FFF27EE0FC2 |
:101F0000FF1FE752F64F8081918181589F4F9F9329 |
:101F10008F9388E892E19F938F93FF92EF9259CE2F |
:101F20008EE70E94439D8091590499279F938F9338 |
:101F30008091580499279F938F93809157049927F4 |
:101F40009F938F9387E992E19F938F93FF92EF92F4 |
:101F5000E091C005F091C105099583E90E94439D78 |
:101F60008DB79EB70A968DBF80915C0499279F9389 |
:101F70008F9380915B0499279F938F9380915A044C |
:101F800099279F938F938BEA92E19F938F93FF9270 |
:101F9000EF92E091C005F091C10509952DB73EB7CC |
:101FA000265F3F4F2DBF56C380918405882309F4D7 |
:101FB00051C38EE70E94439D8091B70A86FD11C0F0 |
:101FC0008FEB92E19F938F9386E39DE99F938F938D |
:101FD000E091C005F091C10509950F900F900F9009 |
:101FE0000F908091D50899278F709070892B89F078 |
:101FF0008EEC92E19F938F9386E39DE99F938F935D |
:10200000E091C005F091C10509950F900F900F90D8 |
:102010000F908091B70A82FF11C088ED92E19F93E3 |
:102020008F9386E39DE99F938F93E091C005F09194 |
:10203000C10509950F900F900F900F908091B70AEE |
:1020400083FD08C38DED92E19F938F9386E39DE915 |
:102050009F938F93EEC10091F20C063089F480912A |
:102060007B05882319F010927B0503C081E08093E3 |
:102070007B0586E00E94A18187E00E94A181E2C2E7 |
:10208000083009F4D8C2013009F0DCC20E94489D32 |
:1020900000937805D5C280917705282F33278F5F6D |
:1020A000809377052230310509F447C0233031058C |
:1020B0003CF42115310549F02130310501F1C5C24B |
:1020C000263031050CF0C1C277C080E00E94439DEC |
:1020D0008BEE92E19F938F9305E11DE91F930F9380 |
:1020E000E091C005F091C105099585E10E94439DED |
:1020F0000F900F900F900F908AEF92E167C180913F |
:102100006C05C5E1EC2ECDE9FC2E882381F08EE72D |
:102110000E94439D80916C0599279F938F93809196 |
:102120006D0599279F938F938FE093E16BC18EE7A5 |
:102130000E94439D81E293E178C183E90E94439D1F |
:1021400080912601909127016AE070E00E9498A595 |
:102150009F938F9380912601909127016AE070E010 |
:102160000E9498A57F936F9384E393E19F938F934D |
:1021700005E11DE91F930F93E091C005F091C105A2 |
:1021800009958EE90E94439D2DB73EB7285F3F4FCA |
:102190002DBF8BEA9BE09F938F938EE393E19F93F8 |
:1021A0008F931F930F93E091C005F091C10509959E |
:1021B0008DB79EB706968DBF8091B0018823E9F157 |
:1021C000809176058823C9F0809184058823A9F041 |
:1021D00089E40E94439D81E493E19F938F9385E17D |
:1021E0009DE99F938F93E091C005F091C1050995FA |
:1021F0000F900F900F900F901AC089E40E94439D9A |
:102200008091B00199279F938F9385E493E19F93E9 |
:102210008F9385E19DE99F938F93E091C005F091A5 |
:10222000C10509952DB73EB72A5F3F4F2DBF8FE3FC |
:102230000E94439D8CE493E105C08FE30E94439D7F |
:1022400087E593E19F938F9385E19DE99F938F931A |
:10225000E091C005F091C10509950F900F900F9086 |
:102260000F9080916905882331F484E50E94439D95 |
:1022700086E693E139C08091D40A833081F580915C |
:102280007605882351F08091B001882331F084E5F0 |
:102290000E94439D84E793E105C084E50E94439D2D |
:1022A00082E893E19F938F9385E19DE99F938F93BC |
:1022B000E091C005F091C10509950F900F900F9026 |
:1022C0000F908091F20C8630F1F48091B001882358 |
:1022D00019F0806880936A051092760514C084E531 |
:1022E0000E94439D80E993E19F938F9385E19DE94F |
:1022F0009F938F93E091C005F091C10509950F90D0 |
:102300000F900F900F908091F20C843059F49091BF |
:10231000B001809169059817E8F481E08093760513 |
:10232000980F0AC0823069F49091B001923090F019 |
:1023300081E08093760591509093B00110928405CE |
:1023400009C0883039F40E94489D84E08093780564 |
:10235000109277058091F20C813009F073C10E94D0 |
:10236000489D82E06BC180917705282F33278F5FCE |
:10237000809377052230310509F465C0233031059B |
:102380003CF42115310549F02130310521F15DC1C1 |
:10239000263031050CF059C195C080E00E94439D64 |
:1023A0008EE993E19F938F9305E11DE91F930F93AE |
:1023B000E091C005F091C105099585E10E94439D1A |
:1023C0000F900F900F900F908DEA93E19F938F9352 |
:1023D0001F930F932EC080916C05B5E1EB2EBDE9E4 |
:1023E000FB2E8823E9F08EE70E94439D80916C05C7 |
:1023F00099279F938F9380916D0599279F938F9332 |
:102400008FEB93E19F938F93FF92EF92E091C00542 |
:10241000F091C10509958DB79EB708968DBF1AC179 |
:102420008EE70E94439D81ED93E19F938F93FF92EE |
:10243000EF92E091C005F091C10509950F900F90C2 |
:102440000F900F9007C183E90E94439D8091260160 |
:10245000909127016AE070E00E9498A59F938F9366 |
:1024600080912601909127016AE070E00E9498A572 |
:102470007F936F9383EE93E19F938F9305E11DE923 |
:102480001F930F93E091C005F091C10509958EE966 |
:102490000E94439D2DB73EB7285F3F4F2DBF8BEA6B |
:1024A0009BE09F938F938DEE93E19F938F931F9368 |
:1024B0000F93E091C005F091C10509958DB79EB7C6 |
:1024C00006968DBF8091F20C882349F08091E10738 |
:1024D0009091E20701969093E2078093E107809143 |
:1024E000B1018823E9F1809175058823C9F08091B5 |
:1024F00084058823A9F089E40E94439D80EF93E13D |
:102500009F938F9385E19DE99F938F93E091C00501 |
:10251000F091C10509950F900F900F900F901AC080 |
:1025200089E40E94439D8091B10199279F938F93E5 |
:1025300084EF93E19F938F9385E19DE99F938F9320 |
:10254000E091C005F091C10509952DB73EB72A5F0E |
:102550003F4F2DBF8FE30E94439D8EEF93E105C057 |
:102560008FE30E94439D89E094E19F938F9385E1DF |
:102570009DE99F938F93E091C005F091C105099566 |
:102580000F900F900F900F9080916905882331F480 |
:1025900084E50E94439D88E194E113C08091750514 |
:1025A000882351F08091B101882331F084E50E94A5 |
:1025B000439D86E294E105C084E50E94439D84E347 |
:1025C00094E19F938F9385E19DE99F938F93E09191 |
:1025D000C005F091C10509950F900F900F900F90D5 |
:1025E0008091F20C843059F49091B1018091690589 |
:1025F000981740F581E080937505980F0AC08230E6 |
:1026000069F49091B1019230E8F081E08093750512 |
:1026100091509093B1011092840514C0863049F412 |
:102620008091B101882311F080936A05109275059D |
:1026300009C0813039F40E94489D83E08093780579 |
:10264000109277051092F20C05C01092770502C027 |
:1026500010927805E6E0CDB7DEB70C9410A64FB720 |
:1026600028E130E0F8948091C9008F778093C90009 |
:102670008091C9008F7B8093C9008091C9008F7DB4 |
:102680008093C900832F99278093CD002093CC009D |
:102690008091C80082608093C80080E18093C90067 |
:1026A0008091CA008F778093CA008091CA008F7B87 |
:1026B0008093CA008091CA008091CA008F7E809367 |
:1026C000CA008091CA0088608093CA008091C900C6 |
:1026D0008B7F8093C9008091CA0084608093CA0078 |
:1026E0008091CA0082608093CA008091C80087FFF1 |
:1026F00003C08091CE00F9CF8091C900806880939B |
:10270000C9008091D00C84608093D00C4FBF089595 |
:1027100090914A05992341F48F3031F490937D05CF |
:1027200080E580934A050895E0917D05EF5FE09391 |
:102730007D05E83121F481E080937C050895E9313D |
:1027400020F089E180937D050895FF27E754F34F3A |
:1027500080830895A0E0B0E0E0EBF3E90C94F0A5ED |
:1027600091E0D92E82E0A82EBD2CE12C01E0F02EC4 |
:102770008091D00C82FDB5C080916F008F7D8093D9 |
:102780006F00E091CD08EE2351F0FF27EE0FFF1F01 |
:10279000E752F64F80819181843691055CF48091F7 |
:1027A0005604883C20F4809156048C5E01C088EC6D |
:1027B000809356048091BA0C682F772780917E050C |
:1027C000815080937E058F3F31F41CE7C12E82E05B |
:1027D00080937E0502C0C4E2CC2E40E04C1508F088 |
:1027E0007EC0EA2DFF27E754F34F80818D2111F041 |
:1027F0006E297F298D2D9927880F991FD82E882320 |
:1028000019F4B1E0DB2EAD0CEE0CFF1C20E0E2165B |
:1028100028E0F20609F061C0A1E0EA2EF12CCB011C |
:102820008050944065E070E00E9498A5AB2DBB27D6 |
:10283000FD01EA0FFB1FE752F64F808191819C0159 |
:10284000220F331F280F391F260F371F37FF02C0F3 |
:102850002D5F3F4FE901D595C795D595C795CB011C |
:1028600001968C179D0714F4219706C061507040A3 |
:10287000C617D7070CF4219680915604833CD8F0F4 |
:102880008D010A0F1B1FF801E752F64F80819181DD |
:10289000FE01E81BF90BCF0163E070E00E9498A5F0 |
:1028A000CB01880F991F860F971F015E154FF80106 |
:1028B0009183808307C0AA0FBB1FA15EB54F1196FD |
:1028C0001C921E92EB2DFF27EE0FFF1FE752F64FD3 |
:1028D000D183C08360E070E0B3944F5F7FCF1092EC |
:1028E000410110927C05EAE0CDB7DEB70C940CA64E |
:1028F0000895089540E050E080917F059091800513 |
:102900009C01220F331F280F391F80913C039091A7 |
:102910003D03280F391F37FF02C02D5F3F4F35950C |
:102920002795359527953093800520937F058091D5 |
:1029300042018B32D9F480917608282F3327809179 |
:102940004A0490914B04829FA001839F500D929F57 |
:10295000500D1124CA0157FD4F96AC0125E0559545 |
:1029600047952A95E1F74B5F5F4F3DC08D32D9F413 |
:1029700080917608282F332780914A0490914B0448 |
:10298000829FA001839F500D929F500D1124CA0178 |
:1029900057FD4F96AC0195E0559547959A95E1F70F |
:1029A0004550504020C0803271F480911D0481FF59 |
:1029B0001AC0C90137FD4F96AC0185E05595479582 |
:1029C0008A95E1F710C08E3529F480914504482F8F |
:1029D000552709C0863739F4809145049927442743 |
:1029E0005527481B590BCA01AA2797FDA095BA2F56 |
:1029F0008093A4029093A502A093A602B093A7028D |
:102A000008950F931F930E945B81809126019091FE |
:102A10002701AA2797FDA095BA2F8093D301909301 |
:102A2000D401A093D501B093D60180914C0B909125 |
:102A30004D0BAA27BB278093E6019093E701A09353 |
:102A4000E801B093E9010AE010E08091500B909109 |
:102A5000510BB8010E9484A5CB01AA27BB27809304 |
:102A6000F9019093FA01A093FB01B093FC018091CE |
:102A7000500490915104A0915204B0915304BC01B0 |
:102A8000CD0124E630E040E050E00E94CDA5209347 |
:102A90000C0230930D0240930E0250930F0280916E |
:102AA000910190919201AA2797FDA095BA2F80934A |
:102AB0001F0290932002A0932102B09322028091E2 |
:102AC000D30A9927AA27BB27809332029093330217 |
:102AD000A0933402B09335028091D50A9927AA2792 |
:102AE000BB278093450290934602A0934702B09380 |
:102AF00048028091D60A9091D70AB8010E9484A515 |
:102B0000CB01AA27BB278093580290935902A09328 |
:102B10005A02B0935B028091D80A9091D90AAA27F1 |
:102B200097FDA095BA2F80936B0290936C02A093AF |
:102B30006D02B0936E02809166059927AA27BB2784 |
:102B400080937E0290937F02A0938002B0938102D3 |
:102B5000809136059927AA27BB27809391029093ED |
:102B60009202A0939302B093940280913705992723 |
:102B7000AA27BB278093B7029093B802A093B9020B |
:102B8000B093BA021F910F9108954FB720E430E03F |
:102B9000F8948091C9008F778093C9008091C90013 |
:102BA0008F7B8093C9008091C9008F7D8093C9007D |
:102BB000832F99278093CD002093CC008091C8006B |
:102BC00082608093C80088E18093C9008091CA0028 |
:102BD0008F778093CA008091CA008F7B8093CA0050 |
:102BE0008091CA008F7D8093CA008091CA008F7E39 |
:102BF0008093CA008091CA00877F8093CA00809129 |
:102C0000C9008B7F8093C9008091CA008460809343 |
:102C1000CA008091CA0082608093CA008091C80077 |
:102C200087FF03C08091CE00F9CF8091C9008068F2 |
:102C30008093C9004FBF08950F931F93CF93DF93E5 |
:102C4000482F4F5F893108F08BC08091D8098417D5 |
:102C500020F44F5F4093D8094150CB0183539B42EE |
:102C600068E170E00E9498A5A42FBB27FD01EA0F40 |
:102C7000FB1FE752F64F808191819B01281B390B86 |
:102C8000C90137FF03C0909581959F4F069794F433 |
:102C900080915604883C30F480915604865F80937E |
:102CA000560408C088EC8093560480916F008F7D95 |
:102CB00080936F00FD01EA0FFB1FE752F64F808102 |
:102CC00091819C01220F331F280F391F260F371FB8 |
:102CD00037FF02C02D5F3F4FE901D595C795D595C8 |
:102CE000C795CB0101968C179D0714F4219706C058 |
:102CF00061507040C617D7070CF421968091560496 |
:102D0000843BD8F08D010A0F1B1FF801E752F64FE4 |
:102D100080819181FE01E81BF90BCF0163E070E037 |
:102D20000E9498A5CB01880F991F860F971F015EFF |
:102D3000154FF8019183808307C0AA0FBB1FA15EC6 |
:102D4000B54F11961C921E92E42FFF27EE0FFF1F26 |
:102D5000E752F64FD183C083443011F41092410101 |
:102D6000DF91CF911F910F910895CF93DF93209121 |
:102D7000F30C822F9927807F9070409709F066C0EE |
:102D80002F3109F040C08091F40C80938B05909115 |
:102D9000F60C90938D058091F70C80938C05992308 |
:102DA00009F054C080916508282F3327220F331F64 |
:102DB000F901E15EF54F1182108280916608A82F1B |
:102DC000BB27AA0FBB1FFD01E15EF54F11821082E8 |
:102DD00080916808E82FFF27EE0FFF1FCF01815E6B |
:102DE000954FEC01198218822752364FE90119825A |
:102DF0001882A752B64F11961C921E92E752F64FB8 |
:102E00001182108223C0C22FCF70CA30F8F4809193 |
:102E1000F40C80931F0D8091F50C80931E0D809112 |
:102E2000F60C8093210D8091F70C8093200D60911A |
:102E30001E0D70911F0D8C2F0E941C966091200D0D |
:102E40007091210D8C2F8F5F0E941C96DF91CF9186 |
:102E50000895CF93C82F8F3F49F480918E058F3FFF |
:102E600029F41092900510928F0532C020919005A0 |
:102E7000222339F4CF3111F485E001C084E080933E |
:102E800091058091910590918F058217A0F4892F6B |
:102E9000809580938F058F3F19F48EEF80938F0577 |
:102EA00080918F05C81711F40E94B5961092900575 |
:102EB00010928F050BC0E22FFF27ED50F34FC08318 |
:102EC0002F5F209390059C0F90938F05C0938E05E4 |
:102ED000CF91089590918A05933240F4E92FFF270E |
:102EE000E550F34F80839F5F90938A050895833266 |
:102EF00018F48D5F80938A05089590E2EEEFFCE070 |
:102F00008FE19193815087FFFCCF0895CF93CFB786 |
:102F100023E031E0F8948091C9008F778093C90055 |
:102F20008091C9008F7B8093C9008091C9008F7DFB |
:102F30008093C900832F99278093CD002093CC00E4 |
:102F40008091C80082608093C80088E18093C900A6 |
:102F50008091CA008F778093CA008091CA008F7BCE |
:102F60008093CA008091CA0080628093CA008091D9 |
:102F7000CA0080618093CA008091CA0088608093F3 |
:102F8000CA008091C90084608093C9008091CA0002 |
:102F900084608093CA008091CA0082608093CA00D6 |
:102FA0008091C80087FF03C08091CE00F9CF809147 |
:102FB000C90080688093C9008091C90080648093B3 |
:102FC000C9000E947D97CFBFCF910895282F9927E0 |
:102FD0008F709070892B31F4209580918905822B18 |
:102FE0008093890508951F920F920FB60F921124B6 |
:102FF0008F93EF93FF938091E802882309F068C0D4 |
:10300000E0919305EE2389F480919205882369F479 |
:103010008091FB0C882321F081E08093940505C00A |
:103020008091C90081608093C900809194058823B4 |
:1030300079F4EF5FE09393058091D20C8E1720F422 |
:1030400081E0809394051CC0FF27EE52F34F3CC0F3 |
:1030500080919205882361F48091FB0C882311F400 |
:1030600083E003C0813999F481E0809392050FC019 |
:10307000833099F48091FB0C882349F01092FB0C6B |
:103080008091C9008E7F8093C9008EEF1EC0809111 |
:10309000C90081608093C9000EC0833261F48091C1 |
:1030A000C9008E7F8093C9008FEF8093CE0081E0AE |
:1030B0008093E80218C080919205E82FFF27E55021 |
:1030C000F34F8F5F8093920580818093CE000BC079 |
:1030D0001092920510929305109294058091C90068 |
:1030E00080618093C900FF91EF918F910F900FBE87 |
:1030F0000F901F901895682727E0322F67FF06C0B2 |
:10310000862F9927880F991F832702C0862F880F43 |
:10311000682F215027FFF2CF992708950F931F930F |
:10312000CF93DF93062F60E0162F601740F4EC0179 |
:1031300089910E947B98682F1F5F1017C8F3862F14 |
:103140009927DF91CF911F910F910895DC0190E0B5 |
:10315000961758F48C91803241F09F5F961728F4AF |
:10316000FD01E90FF11D8081F6CF892F9927089580 |
:10317000A0E0B0E0EEEBF8E90C94F1A58FE98093C4 |
:10318000D30C80E18093D50C84EA8093D60C85E53E |
:103190008093D70C8DE58093D80C1092D90C809138 |
:1031A0009605882309F06AC08091950513E1819FF7 |
:1031B000C001112463E084549E4F0E94A698082FFA |
:1031C00080919505819FC00111246AE08E549E4F25 |
:1031D0000E94A698982F800F865F8093D20C2EEFC6 |
:1031E000B22EB80EB092D40C209195052093DA0C33 |
:1031F000E92EFF24C70113E0880F991F1A95E1F704 |
:10320000802B8093DB0C822F9927C3E1CC2ED12C0D |
:103210008C9D90018D9D300D9C9D300D1124C90118 |
:103220008E549E4FA701BC018CED9CE00E94B9A377 |
:1032300011278091950599278C9DE0018D9DD00DDA |
:103240009C9DD00D1124CE0184549E4FA801BC0139 |
:10325000C7018452934F0E94B9A30E52134F0E0D13 |
:103260001F1D6B2D84ED9CE00E948E98F8018287D3 |
:10327000809196058F5F8093960593C0C090D90C7E |
:103280001C2D0E9401953091E902303108F058C0A0 |
:10329000B3E1EB2EF12C632F812F9927FC01EE0F68 |
:1032A000FF1FE80FF91FEC0DF11DEE52F34F832FB6 |
:1032B00099278E9DD0018F9DB00D9E9DB00D11243C |
:1032C000AE54BE4FED012D8574E0880F991F7A959D |
:1032D000E1F7282B20873E3088F42E853F853F7903 |
:1032E0008A899927982F88279295990F907E282B65 |
:1032F000392B2187832F9927828716C0ED012E85D0 |
:103300003F85488959892187BB27A52F942F832F73 |
:103310008287CA01AA27BB278387852F9927AA27D7 |
:10332000BB278487E2E0CE0E862F8F5F682F1F5F5A |
:10333000163020F4382F803108F4AECF8093E902A4 |
:1033400083E0189FC00111242C2D280F285F2093A3 |
:10335000D20C225C2093D40C812F99278C01000F72 |
:10336000111F080F191F0C0D111D0E52134F205461 |
:10337000622F84ED9CE00E948E98E80188878091FE |
:10338000E902803170F081E08093E90210929605A5 |
:10339000809195058F5F80939505803110F0109294 |
:1033A0009505E9E0CDB7DEB70C940DA68091E80253 |
:1033B000882309F447C080911D0485FD04C08091D5 |
:1033C000ED02882381F082E98093FB0C83E28093F5 |
:1033D000FC0C8091ED02882309F485E58093FD0CB7 |
:1033E0001092ED0202C08093FB0C8091EA028F30B4 |
:1033F00071F4809189050E94E17F882341F081E981 |
:103400008093FB0C8093FC0C81E38093FD0C109265 |
:10341000E8028091C80085FFFCCF8091C9008F7EB3 |
:103420008093C9008091C9008E7F8093C9000E945B |
:10343000B8988EE78093CE00809189058093EA0248 |
:10344000109289050895EF92FF920F931F93CF93E7 |
:10345000DF937C018B01EA01452B39F0F801819162 |
:103460008F01F70109952197C9F7E6E0CDB7DEB7DF |
:103470000C9410A6EF92FF920F931F93CF93DF93BC |
:103480007C018B01EA01452B41F0F8010F5F1F4FD2 |
:103490008491F70109952197C1F7E6E0CDB7DEB732 |
:1034A0000C9410A60F931F93CF938C01C62F161662 |
:1034B00034F480E2F8010995C1501C16D4F3CF9181 |
:1034C0001F910F9108950F931F93CF938C01C62FD7 |
:1034D000161634F480E3F8010995C1501C16D4F394 |
:1034E000CF911F910F910895A5E3B0E0EAE7FAE9C3 |
:1034F0000C94E8A52E96EEADFFAD2E978824992466 |
:10350000540180918305882321F42C961FAE1EAEB2 |
:103510002C97AEE44A2E512C4C0E5D1E6F01B60165 |
:1035200005C0153239F00894C11CD11CF601149164 |
:103530001123B9F7A601461B570B31F02C968EAD1F |
:103540009FAD2C970E943A9A112309F46AC20894FD |
:10355000C11CD11CFF24FDA6FCA6EFEFEE2EF9A6A0 |
:10356000F6010894C11CD11C1491153721F0812F4C |
:1035700080628837B1F4F0FE0AC0F20124E030E046 |
:10358000420E531E80809180A280B3800AC0F20157 |
:1035900042E050E0440E551E808191814C01AA24E6 |
:1035A000BB24103221F489A58823D1F61DC0133223 |
:1035B00019F458E0F52AD4CF1A3211F01D3291F4E3 |
:1035C0001A3259F4F20182E090E0480E591EE0816F |
:1035D000ECA7EE232CF6E195ECA790E1F92AAFEDEC |
:1035E000FA22BECF1B3211F419A7BACF1E32C1F591 |
:1035F000F6010894C11CD11C14911A3279F4F2011D |
:1036000022E030E0420E531E408151813FEF4F3F98 |
:10361000530714F44FEF5FEFE42EA2CF40E050E0E9 |
:10362000812F80538A30A0F4CA0173E0880F991F5C |
:103630007A95E1F7840F951F480F591F410F511DCF |
:1036400040535040F6010894C11CD11C1491E8CF9E |
:103650008FEF4F3F580714F44FEF5FEFE42E85CF05 |
:10366000103329F4F4FC7CCF90E2F92A79CF812F32 |
:1036700081538930D8F440E050E0CA0163E0880FFC |
:10368000991F6A95E1F7840F951F480F591F410F45 |
:10369000511D40535040F6010894C11CD11C149197 |
:1036A000812F80538A3048F34CA75FCF183619F426 |
:1036B000A4E0FA2A55CF1C3619F4B1E0FB2A50CF0A |
:1036C000133661F43E010894611C711CF20122E082 |
:1036D00030E0420E531E808189833CC1143421F0B6 |
:1036E000143611F0193651F5143411F431E0F32A7F |
:1036F000F0FE0AC0F20144E050E0440E551E808006 |
:103700009180A280B3800CC0F20182E090E0480E6C |
:10371000591E808191814C01AA2497FCA094BA2C57 |
:10372000B7FE0AC0B094A09490948094811C911C20 |
:10373000A11CB11C8DE289A70AE06FC01F3411F0F3 |
:103740001F3631F41F3411F491E0F92A08E064C007 |
:10375000103779F4F201A2E0B0E04A0E5B1E8081DE |
:1037600091814C01AA24BB2400E1B0E4FB2A18E7B4 |
:1037700053C01337C1F5F20122E030E0420E531E70 |
:10378000608071806114710489F43E010894611CA9 |
:10379000711C88E289838EE6F301818385E78B8340 |
:1037A0008CE68C838D8389E28E831F82E7FC13C0B5 |
:1037B0008E2D992787FD9095AC0160E070E0C301E4 |
:1037C0000E94ACA3009729F0382E3618E3140CF0B1 |
:1037D000C3C03E2CC1C0F30101900020E9F731972E |
:1037E0003E2E3618B9C0153511F0153731F41535A0 |
:1037F00011F4F1E0FF2A0AE00FC0183519F018376C |
:1038000009F0A0C000E1F3FE07C081149104A104F7 |
:10381000B10411F020E4F22A19A6EDA6E7FC02C0DB |
:103820003FEDF32249E2642E712C6C0E7D1E811453 |
:103830009104A104B10421F44DA5442309F47BC0F3 |
:10384000802F9927AA27BB278EA79FA7A8ABB9AB24 |
:10385000202E332490E0891690E0990691E0A90685 |
:1038600090E0B90648F0C501B4012EA53FA548A9CE |
:1038700059A90E94ABA517C0AFEF8A169104A10405 |
:10388000B10449F040F0C401B1010E9484A59B013C |
:103890004427552708C0882D602F0E9478A5282F1F |
:1038A0003327442755272AAB3BAB4CAB5DAB0A30E3 |
:1038B00059F48AA9880F880F880F9AA9990F890F40 |
:1038C000382D381B832F10C0003139F48AA9829516 |
:1038D000807F482D481B842F07C08AA9880F880F36 |
:1038E000880F582D581B852F90E02EA53FA548A97D |
:1038F00059A982169306A406B50608F091E08AA895 |
:103900009BA8ACA8BDA88A3010F4805D04C0895A79 |
:10391000183509F48F7DD3018E933D01992309F069 |
:1039200099CF083041F4F3FE06C0803321F080E3E4 |
:10393000FD0182933F01CE010196382E3618F8E240 |
:103940003F0E0BC0112309F46CC03E010894611CAA |
:10395000711C198331E0332E19A6032D2DA42318D1 |
:1039600027FC222489A5882311F00F5F02C0F6FCF2 |
:103970000E5F020DEF2CFF24C70180739070892B1E |
:1039800049F48CA5801B682F2C968EAD9FAD2C978B |
:103990000E94529A89A5882331F041E050E0BE018F |
:1039A000675D7F4F0AC0E6FE0EC080E38AA71BA7B3 |
:1039B00042E050E0BE01665D7F4F2C968EAD9FAD1C |
:1039C0002C970E94239AC70180739070809749F4C6 |
:1039D0008CA5801B682F2C968EAD9FAD2C970E94D6 |
:1039E000639A622D2C968EAD9FAD2C970E94639AA0 |
:1039F000832D992787FD9095AC01B3012C968EAD50 |
:103A00009FAD2C970E94239AE4FE89CD2CA5201B04 |
:103A10002CA7622F2C968EAD9FAD2C970E94529AA8 |
:103A20007ECDE2E1CB5C0C9404A6982F8091FA0C39 |
:103A3000883A50F48091FA0CE82FFF27EF51F44FA9 |
:103A400093838F5F8093FA0C0895982F8091FA0CDE |
:103A5000883A58F48091FA0CE82FFF27EF51F44F81 |
:103A6000906893838F5F8093FA0C0895982F8091CC |
:103A70008405882321F0892F0E94259D0895892F90 |
:103A80000E94159D0895883A10F48093FA0C0895C9 |
:103A900080E090E2E4EEFBE091938F5F883AE0F300 |
:103AA00008954FB721E830E0F8948091C9008F77EE |
:103AB0008093C9008091C9008F7B8093C900809159 |
:103AC000C9008F7D8093C900832F99278093CD00F3 |
:103AD0002093CC008091C80082608093C80088E168 |
:103AE0008093C9008091CA008F778093CA0080912B |
:103AF000CA008F7B8093CA008091CA008F7D80931B |
:103B0000CA008091CA008F7E8093CA008091CA004B |
:103B1000877F8093CA008091C90084608093C90028 |
:103B20008091CA0084608093CA008091CA0082603C |
:103B30008093CA008091C90081608093C900809100 |
:103B4000C80087FF03C08091CE00F9CF8091C900E3 |
:103B500080688093C9004FBF3CE73093530B2DE73B |
:103B600020937E0B8EE88093540B1092700B109272 |
:103B70006F0B1092590B80EE8093560B3093B50B60 |
:103B80002093E00B1092C10B1092C00B1092C30B4C |
:103B90001092C20B1092C50B1092C40B84EF91E0EF |
:103BA0009093BF0B8093BE0B9093BD0B8093BC0B87 |
:103BB0009093BB0B8093BA0B1092B70B89E880935C |
:103BC000B60B1092DE0B1092DF0B80E98093B80BDE |
:103BD00030938D0C2093B80C10928F0C8AE8809350 |
:103BE0008E0C1092950C1092940C1092930C1092D3 |
:103BF000970C1092980C1092990C10929A0C1092AB |
:103C00009C0C10929D0C10929E0C10929F0C109286 |
:103C1000A30C1092A20C1092A10C1092A00C80EA9E |
:103C20008093900C30937F0B2093AA0B1092810B02 |
:103C30008DE88093800B1092A90B80ED8093820B0E |
:103C40008BE78093E10B80E88093E20B1092E30B0B |
:103C50008091590B90E2E4EEFBE091938F5F883AFC |
:103C6000E0F38DE780938C0C0895CF93C82F80915B |
:103C70009705803879F48C2F0E94DE828093860528 |
:103C800080918605882331F1C093F90C80918605D7 |
:103C90008F5F16C08F37F1F48091F20C882329F4DE |
:103CA0008C2F80958F708093F20C0E94B981809345 |
:103CB000E30B81EE9BE090938805809387058DEA66 |
:103CC000809386058091C9008F7E8093C90082E031 |
:103CD00080938505C0939705CF9108953091850510 |
:103CE000332331F0809185058150809385050895B7 |
:103CF00080918605882361F1409186059091980511 |
:103D0000413069F4292F30939805809184058823E8 |
:103D100019F03093840510C0409384050DC0E091E4 |
:103D20008705F09188058191F0938805E0938705D8 |
:103D3000282F980F909398058091C80085FFFCCF9D |
:103D40002093CE008091860581508093860508954A |
:103D50008091C90080618093C90008956F927F921D |
:103D60008F929F92AF92BF92CF92DF92EF92FF928B |
:103D70000F931F93882361F1823041F41092A105C3 |
:103D80001092A2051092A3051092A4052091500450 |
:103D9000309151044091520450915304DA01C90109 |
:103DA00019E0880F991FAA1FBB1F1A95D1F780939E |
:103DB0003F0390934003A0934103B09342032093A9 |
:103DC000990530939A0540939B0550939C0526C115 |
:103DD000A0905004B0905104C0905204D09053046D |
:103DE0008091990590919A05A0919B05B0919C05B1 |
:103DF00035014601681A790A8A0A9B0A60929D0574 |
:103E000070929E0580929F059092A0058091430339 |
:103E10009091440384559F4F7C010027F7FC009547 |
:103E2000102F8091870A9091880A9C01442737FDC2 |
:103E30004095542FC801B7010E9459A597FF04C0AF |
:103E40006150704E8F4F9F4FAB01BC01FDE07595E7 |
:103E5000679557954795FA95D1F74C5A5040604071 |
:103E600070404093A5055093A6056093A7057093F5 |
:103E7000A8052091E70A3091E80A37FF02C0215FC8 |
:103E80003F4FE4E035952795EA95E1F780914703A8 |
:103E900090914803829FD001839FB00D929FB00DF7 |
:103EA0001124CD01B7FF02C081509F4FE92FFF279A |
:103EB000E7FDFA952091E50A3091E60A37FF02C046 |
:103EC000215F3F4F84E0359527958A95E1F78091F2 |
:103ED000450390914603829FD001839FB00D929F2E |
:103EE000B00D1124CD01B7FF02C081509F4F892F23 |
:103EF000990F990BE80FF91FCF01AA2797FDA095FD |
:103F0000BA2F840F951FA61FB71F8093A505909306 |
:103F1000A605A093A705B093A805BC01CD012DE08F |
:103F200030E040E050E00E9459A57B018C01C401C3 |
:103F3000B30124EF31E040E050E00E9459A5DC01DC |
:103F4000CB01E80EF91E0A1F1B1F8091A10590915D |
:103F5000A205A091A305B091A4052091A9053091D7 |
:103F6000AA054091AB055091AC05821B930BA40BA5 |
:103F7000B50BE80EF91E0A1F1B1FE092A105F09277 |
:103F8000A2050093A3051093A405D801C701805092 |
:103F90009E4FAF4FBF4FB7FF06C0D801C70181503A |
:103FA0009A4FAF4FBF4F1AE0B595A7959795879554 |
:103FB0001A95D1F78093A9059093AA05A093AB0514 |
:103FC000B093AC05A0929905B0929A05C0929B055A |
:103FD000D0929C0520913F033091400340914103D2 |
:103FE00050914203E0903203F09033030091340388 |
:103FF000109135032E193F09400B510B280F391F23 |
:104000004A1F5B1F2A0D3B1D4C1D5D1D20933F0366 |
:104010003093400340934103509342038091A9059C |
:104020009091AA0590933D0380933C0380913F03B8 |
:1040300090914003A0914103B0914203BC01CD0196 |
:104040001F910F91FF90EF90DF90CF90BF90AF90B6 |
:104050009F908F907F906F9008952FB740E0F894D5 |
:10406000E0E0F0E081E2809357009491E2E0F0E03C |
:10407000809357003491E4E0F0E0809357008491FE |
:104080002FBF9E3199F4363941F4893011F441E063 |
:104090000DC08A3059F442E009C0373939F486300E |
:1040A00011F443E003C0853009F444E0842F9927DC |
:1040B00008959FB7F8948091C900877F8093C900C5 |
:1040C0008091C9008F7E8093C9008091C9008F774D |
:1040D0008093C9008091C9008F7B8093C900809133 |
:1040E000C9008F7D8093C9009FBF08951F93CF9310 |
:1040F000DF93182F80918305882309F4A7C080914E |
:10410000E702181709F4A2C080918205882321F4E0 |
:104110000E942DA08093820582ED91E09093400152 |
:1041200080933F0186E195E19F938F93CCE8D8E19E |
:10413000DF93CF93E091C005F091C10509950F90F1 |
:104140000F900F900F90812F9927AA27BB27FC0172 |
:10415000099778F5EA55FF4F2091C0053091C105C8 |
:104160000C941FA682E195E102C089E095E19F933E |
:104170008F93DF93CF93F901099527C084E095E1F0 |
:10418000F6CF8CEF94E1F3CF84EF94E19F938F937C |
:10419000DF93CF93F901099588ED91E09093400169 |
:1041A00080933F0112C08FEE94E1E1CF83E295E16D |
:1041B000DECF89E295E19F938F93DF93CF93E091D8 |
:1041C000C005F091C105099510E00F900F900F9078 |
:1041D0000F9080918205843011F0823011F50E9499 |
:1041E00059A0812F8150833018F40E94A7782CC0E9 |
:1041F000143019F40E94869727C0183019F40E94D1 |
:10420000789422C0153019F40E94C5951DC016304F |
:1042100019F40E94519D18C01730B1F40E942F93D9 |
:1042200013C0112389F08FE395E19F938F938CE85E |
:1042300098E19F938F93E091C005F091C105099596 |
:104240000F900F900F900F901093E702DF91CF9196 |
:104250001F9108950F931F93082F81E0809383058A |
:104260004091E602EFE9F4E120E030E05FE4849180 |
:1042700099272F5F3F4F829FB001839F700D929FC0 |
:10428000700D112446275150319657FFF0CF4093BF |
:10429000E602E7E7F4E120E030E057E28491992775 |
:1042A0002F5F3F4F829FB001839F700D929F700DD3 |
:1042B000112446275150319657FFF0CF4093E60224 |
:1042C00080918205882321F40E942DA0809382058D |
:1042D00084E79AE99093C1058093C0058091E60236 |
:1042E000833459F088E190E029E20FB6F894A8955C |
:1042F000809360000FBE20936000063091F08AE545 |
:1043000095E19F938F938CE898E19F938F93E09131 |
:10431000C005F091C10509950F900F900F900F9077 |
:10432000EECF80910301893158F180918105882376 |
:10433000A9F487E795E19F938F938CE898E19F9389 |
:104340008F93E091C005F091C105099587E18093B5 |
:1043500003010F900F900F900F9012C015BC873182 |
:1043600019F48093030106C087E08093140186E06E |
:1043700080931301E091E402F091E5028DEF09953D |
:104380000E94500B81E690E09F938F9384E090E031 |
:104390009F938F9382E090E09F938F93809103018E |
:1043A0006AE00E9478A5892F99279F938F93809127 |
:1043B00003010E9478A599279F938F9381EB95E144 |
:1043C0009F938F930CE818E11F930F93E091C00522 |
:1043D000F091C10509958FE994E19F938F931F9305 |
:1043E0000F93E091C005F091C105099587E794E12D |
:1043F0009F938F931F930F93E091C005F091C10598 |
:1044000009950E94500B83EC8093810080916F008E |
:10441000806280936F008DB79EB746968DBF1F91C7 |
:104420000F9108958091CB088D3338F08091D20A96 |
:1044300087FD03C08CE38093CB0880917A088823A2 |
:1044400031F08055853618F08FE780937A0808950B |
:1044500080918305882309F487C08091BD05815030 |
:104460008093BD05882309F069C089E18093BD056B |
:104470008091CB088E3338F08091D20A87FD03C03B |
:104480008DE38093CB08809156048238A0F580910B |
:104490001E0490911F04805D974020F08091520B84 |
:1044A000843620F41092BF051092BE052091BE05FF |
:1044B0003091BF0521153105B1F1C90101979093E4 |
:1044C000BF058093BE05419798F18091D20A84FF81 |
:1044D0002FC080911C04846080931C048091E00AAA |
:1044E00087FF26C080916D05882311F13093BF05A9 |
:1044F0002093BE051DC080915604853BC8F0909165 |
:10450000CB0884E1989FC001112440962091BE05FC |
:104510003091BF052817390730F42F5F3F4F309394 |
:10452000BF052093BE0580911C048B7F80931C04E3 |
:104530008091E602833411F0109283059091E70296 |
:10454000963019F40E946E9E08958091EB028823A4 |
:1045500021F081508093EB0208958BE48093EB026D |
:10456000943011F40E94D69908951F920F920FB6BD |
:104570000F9211242F933F934F935F936F937F93E9 |
:104580008F939F93AF93BF93EF93FF939091CE0040 |
:104590008091F9028823B9F09093C6008091F902C6 |
:1045A000823009F03FC09F3FE9F58FEF94E3ACE024 |
:1045B000B0E0C297A109B109B7FFFBCF8091030614 |
:1045C0008093CE002FC02091E702822F815083304C |
:1045D00020F4892F0E94FE7825C0243021F4892FF1 |
:1045E0000E94E6971FC0283021F4892F0E947994F9 |
:1045F00019C080910301893120F0809181058823C1 |
:1046000089F0253021F4892F0E9429970BC026308C |
:1046100021F4892F0E94359E05C0273019F4892F77 |
:104620000E948893FF91EF91BF91AF919F918F91DD |
:104630007F916F915F914F913F912F910F900FBE9E |
:104640000F901F901895002422273327442751E00C |
:10465000BB27EE27FF27A0E1660F771F881F991F52 |
:10466000001C221F331F441F660F771F881F991FCE |
:10467000001C221F331F441F2AF4050E2B1F3E1F50 |
:104680004F1F04C0051A2B0B3E0B4F0B550FBB1FC2 |
:10469000EE1F587F556047FD5250AA95E9F6E69502 |
:1046A000B7955795E695B7955795852F9B2F089504 |
:1046B0002227332741E0552768E0880F991F221FE2 |
:1046C000331F880F991F221F331F1AF4240F351F21 |
:1046D00002C0241B350B440F551F487F456037FD32 |
:1046E00042506A9551F75695479556954795842FB0 |
:1046F0000895AA2797FF04C0809590958A1F9A1F56 |
:1047000077FF04C0609570956A1F7A1F669F9001BD |
:10471000779FA001679F300D411D5A1F300D411D2D |
:104720005A1F889FF001999F2E0F3F1F401D511D5A |
:10473000899F300D411D5A1F300D411D5A1FCA015E |
:10474000B901112480CFFB01DC0102C005900D925C |
:1047500041505040D8F70895FC014150504030F08E |
:1047600001900616D1F73197CF0108958827992730 |
:104770000895FB01DC0102C001900D9241505040B0 |
:10478000D8F70895A0E0B0E0E8ECF3EA0C94F0A5C7 |
:104790006C017B01EA01590121978FEFCF3FD807C8 |
:1047A00089F086010894C11CD11CC7010894E11C42 |
:1047B000F11CF5010995F80180832197FFEFCF3FA8 |
:1047C000DF0779F7EAE0CDB7DEB70C940CA6CF92FD |
:1047D000DF92EF92FF920F931F937C016B01FB011D |
:1047E0000995082FC7010196F6010995182FC801F0 |
:1047F0001F910F91FF90EF90DF90CF900895A0E070 |
:10480000B0E0E5E0F4EA0C94F2A58C017B01EA014A |
:10481000690121978FEFCF3FD80771F0F701219100 |
:104820007F01C8010F5F1F4F622FF6010995219785 |
:10483000FFEFCF3FDF0791F7E8E0CDB7DEB70C948D |
:104840000EA6CF92DF92EF92FF920F931F936C010F |
:104850008B017A01FA010995812F9927682FC601EA |
:104860000196F70109951F910F91FF90EF90DF904E |
:10487000CF9008955058BB27AA270ED0E0C0D1D0C2 |
:1048800030F0D6D020F031F49F3F11F41EF4C6C0B2 |
:104890000EF4E095E7FBBCC0E92FE2D080F3BA1735 |
:1048A000620773078407950718F071F49EF5FAC044 |
:1048B0000EF4E0950B2EBA2FA02D0B01B90190013B |
:1048C0000C01CA01A0011124FF27591B99F0593F7F |
:1048D00050F4503E68F11A16F040A22F232F342FC7 |
:1048E0004427585FF3CF469537952795A795F04015 |
:1048F0005395C9F77EF41F16BA0B620B730B840B2A |
:10490000BAF09150A1F0FF0FBB1F661F771F881FE1 |
:10491000C2F70EC0BA0F621F731F841F48F4879539 |
:1049200077956795B795F7959E3F08F0B3CF939528 |
:10493000880F08F09927EE0F97958795089598D0DE |
:1049400088F09F5790F0B92F9927B751A0F0D1F078 |
:10495000660F771F881F991F1AF0BA95C9F712C002 |
:10496000B13081F09FD0B1E008959CC0672F782FBF |
:104970008827B85F39F0B93FCCF38695779567956E |
:10498000B395D9F73EF490958095709561957F4FDA |
:104990008F4F9F4F0895E89409C097FB3EF4909580 |
:1049A0008095709561957F4F8F4F9F4F9923A9F008 |
:1049B000F92F96E9BB279395F69587957795679597 |
:1049C000B795F111F8CFFAF4BB0F11F460FF1BC0DB |
:1049D0006F5F7F4F8F4F9F4F16C0882311F096E96E |
:1049E00011C0772321F09EE8872F762F05C066231C |
:1049F00071F096E8862F70E060E02AF09A95660FD5 |
:104A0000771F881FDAF7880F9695879597F908958D |
:104A100097F99F6780E870E060E008959FEF80EC71 |
:104A2000089500240A941616170618060906089514 |
:104A300000240A9412161306140605060895092E7A |
:104A40000394000C11F4882352F0BB0F40F4BF2BE9 |
:104A500011F460FF04C06F5F7F4F8F4F9F4F089529 |
:104A600057FD9058440F551F59F05F3F71F047951F |
:104A7000880F97FB991F61F09F3F79F08795089504 |
:104A8000121613061406551FF2CF4695F1DF08C023 |
:104A9000161617061806991FF1CF86957105610540 |
:104AA00008940895E894BB2766277727CB0197F9E8 |
:104AB0000895629FD001739FF001829FE00DF11D68 |
:104AC000649FE00DF11D929FF00D839FF00D749F88 |
:104AD000F00D659FF00D9927729FB00DE11DF91F34 |
:104AE000639FB00DE11DF91FBD01CF011124089591 |
:104AF000991B79E004C0991F961708F0961B881F30 |
:104B00007A95C9F780950895AA1BBB1B51E107C090 |
:104B1000AA1FBB1FA617B70710F0A61BB70B881F4D |
:104B2000991F5A95A9F780959095BC01CD010895DC |
:104B300097FB092E07260AD077FD04D0E5DF06D0C3 |
:104B400000201AF4709561957F4F0895F6F79095BF |
:104B500081959F4F0895A1E21A2EAA1BBB1BFD0150 |
:104B60000DC0AA1FBB1FEE1FFF1FA217B307E4074C |
:104B7000F50720F0A21BB30BE40BF50B661F771FA4 |
:104B8000881F991F1A9469F7609570958095909584 |
:104B90009B01AC01BD01CF01089597FB092E0526AD |
:104BA0000ED057FD04D0D7DF0AD0001C38F4509542 |
:104BB0004095309521953F4F4F4F5F4F0895F6F741 |
:104BC00090958095709561957F4F8F4F9F4F089579 |
:104BD0002F923F924F925F926F927F928F929F920D |
:104BE000AF92BF92CF92DF92EF92FF920F931F93FB |
:104BF000CF93DF93CDB7DEB7CA1BDB0B0FB6F894AC |
:104C0000DEBF0FBECDBF09942A88398848885F84EB |
:104C10006E847D848C849B84AA84B984C884DF805C |
:104C2000EE80FD800C811B81AA81B981CE0FD11D40 |
:104C30000FB6F894DEBF0FBECDBFED010895EE0FA5 |
:0C4C4000FF1F0590F491E02D0994FFCFB8 |
:104C4C0004035E0A010164FF010020FFFFC01FC0C6 |
:104C5C001F0101070610F40101737373FF03007D3C |
:104C6C000000C409C4099600124167696C650051C3 |
:104C7C00756164726F0000000000000064000CD2CB |
:104C8C000101200B050000ECFF00020406070808D8 |
:104C9C00080706040200FEFCFAF9F8F8F8F9FAFC29 |
:104CAC00FE000204060708086440415A4655326467 |
:104CBC0064640A02969696960840403A1030380181 |
:104CCC0032FF037F0090D0030090D003003200200D |
:104CDC0064FFFFE8036464200B0A0D0B0E100B0A33 |
:104CEC000C0F0B1110FA20680101010101010115D3 |
:104CFC0001014D4B202020202020202020202001AD |
:104D0C000000000000566F6C74616765202020560F |
:104D1C00202001000000000143757272656E742042 |
:104D2C0020204120200100000000014361706163DC |
:104D3C006974792020416820010000000002416C58 |
:104D4C0074697475646520206D20200100000000DA |
:104D5C0000436F6D70617373202020B02020010020 |
:104D6C00000000005361747320202020202020209C |
:104D7C002001000000000053706565642020202095 |
:104D8C00206D2F7301000000000044697374616E84 |
:104D9C00636520206D2020010000000000486F6D2D |
:104DAC00652D4469722020B0202001000000000015 |
:104DBC006D61782E54656D702E20B043200100007B |
:104DCC000000004D61676E2E6669656C64252020BD |
:104DDC00010000000000566172696F202020202025 |
:104DEC002020200100000000004572726F72436F9A |
:104DFC006465202020200100000000004C617469D3 |
:104E0C007475646520202020200900000000004CEF |
:104E1C006F6E67697475646520202020090000009E |
:0C4E2C000000F7FFFCFF70FF01010F64A5 |
:00000001FF |
/branches/test_v2.12/V2.04a/Hex-Files/Flight-Ctrl_MEGA644_V2_04a.hex |
---|
0,0 → 1,3951 |
:100000000C949F050C94E5050C94E5050C94E5050E |
:100010000C94E5050C94E5050C94E5050C94E505B8 |
:100020000C94E5050C94AD190C94E5050C94E505CC |
:100030000C946F2F0C94E5050C94E5050C94E505E4 |
:100040000C94E5050C94E5050C94D0150C94E5058D |
:100050000C94010C0C94E5050C94CB0B0C94E50569 |
:100060000C947D1B0C94E5050C94B72A0C94E505C3 |
:100070000C94BC770C94E5050C941B72A21BA71B77 |
:10008000AC1BB51BCC1BE31BF31B031C471C321E14 |
:10009000E31B1D1D2E1D421D601D7D1DC81D141E50 |
:1000A0002520F2206521DE211622B9227823D523CE |
:1000B00050248124F72425255225A96391641665CF |
:1000C00049646A659A65E86378640A0D3D3D3D3D83 |
:1000D0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D50 |
:1000E0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D007D |
:1000F0000A0D426174743A002025642043656C6CDB |
:10010000732000204C6F77207761726E696E673ABA |
:100110002025642E2564560020204175746F2D43E0 |
:10012000483A2025642E2564560020204175746FBE |
:100130006C616E64696E673A2025642E25645600F2 |
:100140000A0D466C69676874436F6E74726F6C2039 |
:100150006E6F7420737570706F7274656421000A1D |
:100160000D466F756E6420424C2D4374726C3A20BC |
:10017000002564000A0D0A0D2121204D49535349E1 |
:100180004E4720424C2D4354524C3A2025642021A6 |
:1001900021000A0D43616C6962726174696E6720A7 |
:1001A00070726573737572652073656E736F722EEE |
:1001B0002E004F4B0A0D000A0D466C696768742DBE |
:1001C00074696D65202575206D696E20546F7461AA |
:1001D0006C3A2575206D696E00416E676C654E69DD |
:1001E000636B20202020202020416E676C65526FB9 |
:1001F0006C6C202020202020204163634E69636BBB |
:10020000202020202020202020416363526F6C6C2E |
:100210002020202020202020205961774779726FEC |
:10022000202020202020202020416C7469747564D7 |
:1002300065205B302E316D5D204163635A202020A4 |
:1002400020202020202020202047617320202020F3 |
:10025000202020202020202020436F6D70617373A8 |
:100260002056616C7565202020566F6C746167653F |
:10027000205B302E31565D202052656365697665BE |
:1002800072204C6576656C20204779726F20436F31 |
:100290006D70617373202020204D6F746F72203158 |
:1002A0002020202020202020204D6F746F722032CB |
:1002B0002020202020202020204D6F746F722033BA |
:1002C0002020202020202020204D6F746F722034A9 |
:1002D00020202020202020202031362020202020F7 |
:1002E00020202020202020202031372020202020E6 |
:1002F00020202020202020202031382020202020D5 |
:1003000020202020202020202031392020202020C3 |
:10031000202020202020202020536572766F20206E |
:10032000202020202020202020486F7665726761E1 |
:1003300073202020202020202043757272656E7467 |
:10034000205B302E31415D20204361706163697410 |
:1003500079205B6D41685D2020486569676874207D |
:10036000536574706F696E74203235202020202010 |
:100370002020202020202020203236202020202055 |
:10038000202020202020202020436F6D7061737377 |
:1003900020536574706F696E744932432D457272D3 |
:1003A0006F7220202020202020424C204C696D6953 |
:1003B0007420202020202020204750535F4E696366 |
:1003C0006B20202020202020204750535F526F6C4C |
:1003D0006C202020202020202021212120494E4354 |
:1003E0004F4D50415449424C4520212121002E00BF |
:1003F0005B25695D005B25695D002B204D696B7293 |
:100400006F4B6F70746572202B0048573A56256405 |
:100410002E25642053573A25642E253032642563F7 |
:10042000200053657474696E673A25642025730053 |
:100430004D69786572204572726F72210048617251 |
:100440006477617265204572726F7220313A25645B |
:10045000202121004D697373696E6720424C2D4342 |
:1004600074726C3A25642021210021204E432D45D1 |
:1004700052523A202532642021200049324320453F |
:1004800052524F5221212100424C2D53656C66740B |
:10049000657374204572723A253264004865696755 |
:1004A00068743A202025356900536574706F696E51 |
:1004B000743A2535690050726573737572653A2513 |
:1004C0003569004F66667365743A202025356900EA |
:1004D0006163742E2062656172696E67004E6963A4 |
:1004E0006B3A20202020202025356900526F6C6C4B |
:1004F0003A20202020202025356900436F6D70614F |
:1005000073733A202020253569004B25693A25343C |
:100510006920204B25693A25346920004E693A2527 |
:1005200034692020526F3A253469200047733A25F8 |
:100530003469202047693A253469200050313A2532 |
:100540003469202050323A253469200050333A254E |
:100550003469202050343A25346920004779726F7D |
:10056000202D2053656E736F72004E69636B2025DA |
:10057000346920282533692E25782900526F6C6C48 |
:100580002025346920282533692E257829005961D2 |
:1005900077202025346920282533692900414343E9 |
:1005A000202D2053656E736F72004E69636B20259A |
:1005B000346920282533692900526F6C6C2025345A |
:1005C00069202825336929005A20202020253469F4 |
:1005D00020282533692900566F6C746167653A20BD |
:1005E00020202533692E25316956004375727265C6 |
:1005F0006E743A2020202533692E25316941005040 |
:100600006F7765723A2020202020253469570044F6 |
:1006100069736368617267653A202535696D416861 |
:100620000052656365697665720052432D517561AC |
:100630006C6974793A202534690052432D4368610E |
:100640006E6E656C733A25346900556E646572761A |
:100650006F6C74616765732020005761726E3A2079 |
:100660002532642E25645600486F6D653A20253288 |
:10067000642E256456004C616E643A202532642E47 |
:1006800025645600506F746925693A202025336926 |
:1006900000506F746925693A202025336900466C43 |
:1006A000696768742D54696D65202000546F74610A |
:1006B0006C3A2535756D696E004163743A202025CA |
:1006C00035756D696E0028726573657429000A0DB1 |
:1006D00047656E65726174696E67206465666175F1 |
:1006E0006C7420506172616D65746572205365741D |
:1006F000202564000A0D5573696E67205061726190 |
:100700006D6574657220536574202564000A0D4779 |
:10071000656E65726174696E672064656661756C8B |
:1007200074204D69786572205461626C65000A0D11 |
:100730004D697865722D436F6E6669673A2027258B |
:10074000732720282575204D6F746F727329000A56 |
:100750000D414343206E6F742063616C6962726166 |
:10076000746564210D0A0000008F001E01AD013B7D |
:1007700002CA025803E603740402058F051B06A78C |
:10078000063307BE074808D2085B09E3096B0AF283 |
:100790000A780BFD0B810C040D860D070E870E06E3 |
:1007A0000F840F00107B10F5106E11E5115B12CF56 |
:1007B000124213B31323149214FE146A15D3153B7B |
:1007C00016A11605176717C81727188318DE1837DC |
:1007D000198E19E319361A871AD61A231B6E1BB6FF |
:1007E0001BFD1B411C831CC31C001D3C1D751DAB48 |
:1007F0001DE01D121E421E6F1E9A1EC31EE91E0D15 |
:100800001F2E1F4D1F691F841F9B1FB01FC31FD3A7 |
:100810001FE11FEC1FF51FFB1FFF1F00200601003B |
:1008200000E46A00020101D36B01030202676C025B |
:10083000040303266F030507070F6D040608083A33 |
:100840006D05000606C46C04070707656D050808FA |
:10085000083D6E2532692E25316956002533642501 |
:100860006320253033646D256300537461747573A0 |
:10087000004552524F523A202532642000253469F7 |
:10088000202532693A25303269002534696D2563A7 |
:1008900000253369202533692025336920253369F4 |
:1008A00000253369202533692025336920253369E4 |
:1008B0000054656D706572617475726573202020D7 |
:1008C00020002563432020202020002532692E258A |
:1008D000316956202533692E253169410025346957 |
:1008E00057202536696D4168004D61676E65743A21 |
:1008F000253369252520253369256300496E636CFE |
:10090000692E3A2533692563202825692920004C62 |
:100910006F616420576179706F696E747300284647 |
:100920006978656429202020202020004C6F6164B4 |
:1009300020576179706F696E7473002852656C611D |
:10094000746976652920202000464958205761792E |
:10095000706F696E7473004649583A2573006E6F64 |
:100960002053442D43617264002325326420575084 |
:100970003A002532642F256420002D2D2F2D2D00C7 |
:100980002D3E0020200052656C6174697665205709 |
:100990005073200052656C3A2573006E6F205344EB |
:1009A0002D43617264006E6F204750532D46697865 |
:1009B0000023253264205750733A002532642F25D6 |
:1009C0006420002D2D2F2D2D002D3E0020200025F0 |
:1009D00032756D2F73205361743A256420002020F6 |
:1009E0003344004E6F4678004447505300486F6DC3 |
:1009F000653A2533646D2025336425632025630023 |
:100A00004E6F204E6176694374726C21000A0D7737 |
:100A100077772E4D696B726F4B6F707465722E64B1 |
:100A2000652028632920486953797374656D7320A4 |
:100A3000476D6248000A0D74686520757365206F04 |
:100A400066207468697320736F66747761726520BD |
:100A50006973206F6E6C79207065726D697474654E |
:100A600064200A0D6F6E206F726967696E616C2079 |
:100A70004D696B726F4B6F707465722D4861726453 |
:100A800077617265005573657200486F5454205643 |
:100A900034004143542044534C004A657469005368 |
:100AA00070656B7472756D0050504D000A0D526583 |
:100AB0006365697665723A2000756E6B6E6F776E4E |
:100AC0002E205573696E672050504D2E2E2E006ECD |
:100AD0006F7420737570706F727465642062792012 |
:100AE000686172647761726521000A0D202D204CC7 |
:100AF0004942204E4F5420434F4D50415449424C9F |
:100B0000452021212121000A0D466C696768744344 |
:100B10006F6E74726F6C0A0D4861726477617265F2 |
:100B20003A25642E25640A0D536F667477617265E9 |
:100B30003A5625642E2530326425632000001124A6 |
:100B40001FBECFEFD0E1DEBFCDBF11E0A0E0B1E02E |
:100B5000E2E1F6EF02C005900D92A23BB107D9F792 |
:100B600019E0A2EBB1E001C01D92A737B107E1F790 |
:100B70004AEAE2E0F0E081E280935700549120EFEE |
:100B800037EFA4EAB3E09FE0F9012F5F3F4F849174 |
:100B90008D93915097FFF8CF573911F40000FECF95 |
:100BA000E4EAF3E09EE0819148274095915097FF59 |
:100BB000FACF8091B303481721F0573911F40000A0 |
:100BC000FECF0E941A070C94087B0C9400008AEC5C |
:100BD00090E09F938F9383EE92E19F938F93E091A8 |
:100BE000B703F091B80309950F900F900F900F90F5 |
:100BF000089580915C06E82FFF27EE0FFF1FE0535A |
:100C0000F84F808191818D5E9F4F14F01092040106 |
:100C1000808191818A5B9F4FCCF48091040188236D |
:100C2000A9F481E0809304018091EB038F5F8093AE |
:100C3000EB03853038F088EE93E09093ED018093DC |
:100C4000EC01089566E970E00E944F310895CF935A |
:100C5000DF93C82F882311F180EF90E09F938F934B |
:100C600083EE92E19F938F93E091B703F091B803E5 |
:100C7000099580912301909124016BE270E00E941C |
:100C80007B7ACB018F5F809300010F900F900F90C4 |
:100C90000F90873018F086E08093000180917F06E6 |
:100CA000823328F590910001989F802D1124809324 |
:100CB0000201CC23F1F068EC70E0892F0E944F31E3 |
:100CC0008091000199279F938F9388EF90E09F93E5 |
:100CD0008F9383EE92E19F938F93E091B703F0910E |
:100CE000B80309958DB79EB706968DBF02C0809355 |
:100CF00002019091CA06923340F480910001899FCD |
:100D0000802D11248093BC0102C09093BC013091CE |
:100D1000CB06323340F480910001839F802D112453 |
:100D20008093BB0102C03093BB018091BC019091C4 |
:100D30000201981720F491509093BC019F5F80911D |
:100D4000BB01891720F091509093BB019F5F809168 |
:100D5000BC012091BB01821728F0332319F02150E8 |
:100D60002093BC01CC2309F462C0892F6AE00E9461 |
:100D70005B7A892F99279F938F93809102010E941C |
:100D80005B7A99279F938F9383E091E09F938F9352 |
:100D9000C3EED2E1DF93CF93E091B703F091B803B4 |
:100DA00009958DB79EB708968DBF8091BB018823AA |
:100DB000E9F06AE00E945B7A892F99279F938F93CD |
:100DC0008091BB010E945B7A99279F938F9388E162 |
:100DD00091E09F938F93DF93CF93E091B703F091CE |
:100DE000B80309958DB79EB708968DBF8091BC0159 |
:100DF0008823E9F06AE00E945B7A892F99279F9304 |
:100E00008F938091BC010E945B7A99279F938F9367 |
:100E10008AE291E09F938F93DF93CF93E091B703A2 |
:100E2000F091B80309958DB79EB708968DBFDF91F5 |
:100E3000CF910895CFEFD0E1DEBFCDBF88249924B4 |
:100E4000C1E07C2E14B815B88AE08AB98FE58BB959 |
:100E5000B7EEEB2EB3E0FB2E2EEC3FEFE20EF31ECF |
:100E6000F7FEFACF189B06C0199B02C08DE005C0A3 |
:100E70008BE003C0199B04C084E18093030107C089 |
:100E80008AE0809303018EE38AB987E48BB981E815 |
:100E900087B93E9A8FEF88B98BE184B981E085B933 |
:100EA000469A84B7877F84BF809160008861809371 |
:100EB00060001092600084EC99E09093ED018093C3 |
:100EC000EC0110929D0210929C021092D507109294 |
:100ED000D40710929F0210929E021092A1021092CB |
:100EE000A00220910301243128F084EC94E0A0E0DA |
:100EF000B0E004C08BE095E0A0E0B0E0809340015A |
:100F000090934101A0934201B09343012898293165 |
:100F100011F4299A01C029980E9421170E94F21603 |
:100F20000E94EB120E94362F0E94DD1A81E00E947F |
:100F30006B2A0E944F620E94247086E00E946576B0 |
:100F400080910301893111F4299A01C0299878947C |
:100F50000E948C29809103018431E8F488E190E0BB |
:100F60002CE00FB6F894A895809360000FBE2093F4 |
:100F7000600080E491E09F938F9383EE92E19F93D2 |
:100F80008F93E091B703F091B80309950F900F90FC |
:100F90000F900F90EECF80913B02826080933B02D6 |
:100FA00010923E020E94BD3C84EF91E00E94B81670 |
:100FB0007C0180913B0280FD05C0C7010E94C116E3 |
:100FC0008823B9F38FE591E09F938F93A3EEAA2E28 |
:100FD000A2E1BA2EBF92AF92E091B703F091B803AD |
:100FE000099580EA9FE00E94B8167C01C0E0D0E03D |
:100FF0000F900F900F900F9002E717E0FAEECF2EB0 |
:10100000F6E0DF2E0E94BD3C80913B0280FD05C0D2 |
:10101000C7010E94C1168823B9F3F6018081181612 |
:10102000ACF40BC00E94BD3C80913B0280FD05C02A |
:10103000C7010E94C1168823B9F3C7010E94C116D7 |
:10104000882321F4F8018081882364F7F8018081E6 |
:1010500087FF19C02196DF93CF93219781E791E015 |
:101060009F938F93BF92AF92E091B703F091B80333 |
:1010700009958091B4018F5F8093B4012DB73EB77D |
:101080002A5F3F4F2DBF219684E090E0C80ED91E05 |
:10109000085F1F4FCC30D10508F4B4CFC0E0D0E0DA |
:1010A0000FE617E0EAEEEE2EE6E0FE2EF801838171 |
:1010B00087FD1DC0F70180811816CCF42196DF93BF |
:1010C000CF93219784E791E09F938F9383EE92E1F2 |
:1010D0009F938F93E091B703F091B803099582E055 |
:1010E0008093EA012DB73EB72A5F3F4F2DBFF8012D |
:1010F000838180788383219624E030E0E20EF31E22 |
:10110000085F1F4FCC30D10588F20E94E70590910F |
:101110005A068091B401981728F48091D103806118 |
:101120008093D103993020F088E080933B0102C086 |
:1011300090933B0182E991E09F938F93C3EED2E1BC |
:10114000DF93CF93E091B703F091B803099588EE50 |
:1011500093E00E94B8167C010E941B1B0F900F9019 |
:101160000F900F90C7010E94C1168823D9F382EB1C |
:1011700091E09F938F93DF93CF93E091B703F0912A |
:10118000B803099580E00E942932289880ED97E005 |
:101190009093ED018093EC0185E58093ED038EE063 |
:1011A00090E00E94B0279927182F00278FE090E049 |
:1011B0000E94B027080F111D1093BA010093B901C6 |
:1011C0008AE090E00E94B0279927182F00278BE033 |
:1011D00090E00E94B027080F111D1093B8010093F2 |
:1011E000B7010F900F900F900F900F5F1F4F39F0C6 |
:1011F0008091B9019091BA018F5F9F4F41F4109295 |
:10120000BA011092B9011092B8011092B701809101 |
:10121000B7019091B8019F938F938091B9019091FC |
:10122000BA019F938F9387EB91E09F938F93DF9306 |
:10123000CF93E091B703F091B80309950E949F1FE7 |
:1012400088E893E190933A0180933901C1E0C0931B |
:10125000EC038C2F0E942706809182060E94B875AD |
:101260000E94E70580ED97E00E94B8167C018AEFA6 |
:1012700090E00E94B81683E08093B4051092B30109 |
:101280008091CE062DB73EB7285F3F4F2DBF84FF1C |
:1012900002C0C093BD0112BC11BC8091BF01882364 |
:1012A00011F04798FECF8091F001882309F462C2C3 |
:1012B00080911501882309F45DC2F8948091F001B2 |
:1012C00081508093F00178948091EB03882319F08A |
:1012D0000E94F90502C00E9474400E94BD3C2898FB |
:1012E00080919002882331F0809190028150809308 |
:1012F00090020EC080916F00806280936F00109208 |
:10130000D1071092D0078091D10388608093D103D8 |
:101310008091390190913A01019790933A0180931D |
:1013200039018091390190913A01892B21F0809106 |
:101330003C028823C9F18091390190913A01892BAF |
:10134000D9F40E94952A85E090E090933A01809329 |
:1013500039018091EE059091EF0501969093EF058C |
:101360008093EE058091D10381608093D1038091B9 |
:10137000B50582608093B50580910B0190910C01B9 |
:101380008F5F9F4F91F480918F02882371F088EADC |
:1013900091E69093ED018093EC0180E890E09093CA |
:1013A0000C0180930B0101C028980E943477809132 |
:1013B000F001882309F0DCC18091EB01882311F44E |
:1013C0000E94706280911101882311F00E947B17A6 |
:1013D0000E9435130E94560EC7010E94C116882331 |
:1013E00009F4C2C184E190E0E80EF91E0E943917A9 |
:1013F00080913C02882329F4809149098E3150F470 |
:1014000005C08091D10382608093D1038091B5059E |
:1014100082600FC08091EC019091ED01892B59F40D |
:101420008091390190913A01079728F08091B50594 |
:101430008D7F8093B5058091BD01882361F08091F7 |
:101440009002873940F01092BD0188E893E19093B3 |
:10145000ED018093EC0180910601882321F08150F9 |
:10146000809306012EC08093F703109263021092BE |
:101470006202109261021092600210925F0210925A |
:101480005E02809190028823E1F480910B0190919B |
:101490000C018F5F9F4FA9F42091BD01223089F08C |
:1014A00088E99AE39093ED018093EC0180E09CE061 |
:1014B00090930C0180930B01222319F082E080931A |
:1014C000BD0180919F01893C70F0815080939F0104 |
:1014D0008091D1038B7F8093D1038091D40381606D |
:1014E0008093D40351C08091D6088823F9F080916D |
:1014F000D10384608093D10389E08093710380914C |
:101500000B0190910C018F5F9F4F81F480918F02AE |
:10151000882361F088E99AE39093ED018093EC01D0 |
:1015200080E098EA90930C0180930B011092630382 |
:1015300010926203109261031092600310925F0395 |
:101540001092C9088FEF80933E09109208091092FB |
:10155000070910920A09109209098FEF9FEF9093E3 |
:1015600006098093050910927F0210928002109262 |
:10157000810210928202109283028091D4038E7FA6 |
:101580008093D40310929F0160910201262F33278C |
:10159000809123019091240128173907F4F080915C |
:1015A000570280628093570280910B0190910C0149 |
:1015B0008F5F9F4F91F480912301909124010B97AD |
:1015C00064F080E797E19093ED018093EC0180E077 |
:1015D00093E090930C0180930B0112BC11BC80919D |
:1015E000BE018F5F8093BE01813309F074C01092F9 |
:1015F000BE018091570281FF0AC08091B501909190 |
:10160000B60101969093B6018093B50104C05AEAE1 |
:10161000852E55E0952E8091580290915902805068 |
:10162000944008F049C02091FD053091FE0540919D |
:10163000FF055091000680911B0190911C01A09123 |
:101640001D01B0911E01281739074A075B0764F492 |
:101650008091FD059091FE05A091FF05B0910006D7 |
:101660000596A11DB11D20C02091FD053091FE05FC |
:101670004091FF055091000680911B0190911C0143 |
:10168000A0911D01B0911E0182179307A407B50711 |
:101690009CF48091FD059091FE05A091FF05B0910D |
:1016A00000060597A109B1098093FD059093FE05F9 |
:1016B000A093FF05B0930006862F992701962091ED |
:1016C000230130912401821793072CF48091570253 |
:1016D0008F7D809357020894811C911C82E78816A5 |
:1016E0008BE0980609F040C0882499242091B90124 |
:1016F0003091BA012F5F3F4F3093BA012093B90167 |
:101700008091B7019091B80101969093B8018093B0 |
:10171000B701832F9927682F8EE090E00E94B827A9 |
:101720008091B9019091BA019070682F8FE090E09C |
:101730000E94B8278091B7019091B801892F99270D |
:10174000682F8AE090E00E94B8278091B7019091BD |
:10175000B8019070682F8BE090E00E94B82784E178 |
:1017600090E00E94B8167C010E9479670E945C702C |
:1017700071107A94772039F40E943D67882319F01C |
:101780008CE0782E8ACD8091EB01882309F085CDFD |
:101790000E94706282CD1F920F920FB60F92112499 |
:1017A0008F939F93EF93FF93809108018823E1F437 |
:1017B0008091D9019091DA0101969093DA0180939A |
:1017C000D901FC01E852FB4FE081ED3019F08C3D6E |
:1017D000910539F41092DA011092D90181E08093D9 |
:1017E0000801E093C60004C01092DA011092D901FA |
:1017F000FF91EF919F918F910F900FBE0F901F90CF |
:1018000018951F920F920FB60F9211242F933F93AA |
:101810004F935F936F937F938F939F93AF93BF93F8 |
:10182000CF93EF93FF9390E08091BF01813029F433 |
:101830008091C6008093CE00D1C08091BF018230DC |
:1018400029F48091C6008093FA03C8C08091C60035 |
:101850008093D1015091DF015C3D10F09093E00145 |
:101860008091D1018D3009F06AC08091E001823011 |
:1018700009F065C09093E001852F992786509C4F11 |
:10188000FC01329740812091DB013091DC01241B67 |
:101890003109DC0111978C91281B3109C9019F7016 |
:1018A0009093DC018093DB0146E0969587954A95FD |
:1018B000E1F7982F935C9093DD012F733070235CD8 |
:1018C0002093DE018081981729F48C91281711F458 |
:1018D00091E006C090E08091CE018F5F8093CE01B1 |
:1018E0008091D001882309F079C0992309F476C04A |
:1018F00081E08093D001580F5093CD015150E52FD6 |
:10190000FF27E650FC4F8DE080838091FC038235F9 |
:1019100009F064C0C0918F02CC2309F05FC00E941F |
:101920009F1F88E190E02CE00FB6F894A895809373 |
:1019300060000FBE20936000C093EA014FC0209169 |
:10194000E001822F992781309105F9F082309105CD |
:101950001CF4892B21F040C0029711F13DC0809109 |
:10196000D101833239F48091D001882319F481E0C8 |
:101970008093E0018091D1018093FA0381E080930C |
:10198000DF018091D101992722C02F5F2093E001D0 |
:10199000E52FFF27E650FC4F8091D101808309C0DD |
:1019A000E52FFF27E650FC4F8091D10180835C3DFD |
:1019B00020F45F5F5093DF0102C01092E00120919C |
:1019C000D1018091DB019091DC01820F911D9093F8 |
:1019D000DC018093DB0102C01092E001FF91EF91E6 |
:1019E000CF91BF91AF919F918F917F916F915F91B7 |
:1019F0004F913F912F910F900FBE0F901F90189510 |
:101A0000AC01A0E0B0E09D01A817B90748F4E8EDEB |
:101A1000F4E08191280F311D1196A417B507C8F382 |
:101A20003F70FD01E852FB4FC90156E0969587953E |
:101A30005A95E1F7835C80831196FD01E852FB4FD4 |
:101A40002F733070822F835C8083A752BB4F8DE051 |
:101A50008C93109208018091D8048093C600089559 |
:101A6000A0E0B0E0E6E3FDE00C94D47A2C859D85FF |
:101A70000E85BB2483E28093D8049F599093D904A8 |
:101A80002093DA0433E0E32EF12C002309F49EC006 |
:101A9000CF84D888BE016D5E7F4FA989BA89015075 |
:101AA000109709F493C01097B9F0F601EB0DF11DF2 |
:101AB000B3949081119791F4002349F1FB016E5F7B |
:101AC0007F4FDB01C080D1806E5F7F4F0D90BC9156 |
:101AD000A02DBB24015002C090E019C01097B9F0AE |
:101AE000F601EB0DF11DB3944081119791F40023A1 |
:101AF00041F1FB016E5F7F4FDB01C080D1806E5FE3 |
:101B00007F4F0D90BC91A02DBB24015002C040E03E |
:101B100018C01097B1F0F601EB0DF11DB3941081D0 |
:101B2000119781F4002371F0FB013296DB01CD9017 |
:101B3000DC90BF016E5F7F4FA081B181BB2401505B |
:101B400001C010E0F701E852FB4F892F869586957A |
:101B5000835C80830894E11CF11CF701E852FB4F81 |
:101B6000892F99278370907024E0880F991F2A95F8 |
:101B7000E1F755279A0194E0369527959A95E1F774 |
:101B8000822B835C80830894E11CF11CF701E852EE |
:101B9000FB4F4F705070440F551F440F551F812F3E |
:101BA000992726E0969587952A95E1F7842B835C03 |
:101BB00080830894E11CF11CF701E852FB4F1F736E |
:101BC000135C10830894E11CF11C6ACFC7010E94CA |
:101BD000000DE9E00C94F07AA3E07A2F4091CD015A |
:101BE0004650442309F458C0E72FFF27E650FC4F26 |
:101BF00080818D537F5FE72FFF27E650FC4F2081C8 |
:101C00002D537F5FE72FFF27E650FC4F30813D5378 |
:101C10007F5FE72FFF27E650FC4F60816D537F5FAA |
:101C20009927880F991F880F991F522F52955F701F |
:101C3000582B822F99278F709070F4E0880F991F8E |
:101C4000FA95E1F7232F26952695282B832F9927A0 |
:101C500083709070E6E0880F991FEA95E1F7682B92 |
:101C600041504F3FC9F0EA2FFF27E650FC4F508309 |
:101C7000AF5F41504F3F81F0EA2FFF27E650FC4F06 |
:101C80002083AF5F41504F3F39F0EA2FFF27E650E6 |
:101C9000FC4F6083AF5FA5CF8DEF93E09093CC01B5 |
:101CA0008093CB01A350A093CA010895A2E0B0E0B5 |
:101CB000ECE5FEE00C94DA7A8091D001882309F4F7 |
:101CC0007EC40E94EC0D8091FB03823609F0E4C2D1 |
:101CD0008091FC0399278037910509F4AFC08137C3 |
:101CE0009105C4F48A36910509F441C28B369105F9 |
:101CF00044F48B34910571F18636910509F46AC17B |
:101D0000CBC28D36910509F469C08E36910509F470 |
:101D10004DC0C2C28437910541F1853791054CF41D |
:101D20008137910509F491C08337910509F4EAC020 |
:101D3000B3C28737910509F4DCC1883791052CF4CB |
:101D40008537910509F498C1A7C28937910509F42F |
:101D50007DC1A2C2E091CB01F091CC018081918143 |
:101D600090938F0180938E0197C28091CD01A091B5 |
:101D7000CB01B091CC01853140F080E1E5EDF3E09D |
:101D80000D9001928A95E1F70DC08D919D910D9076 |
:101D9000BC91A02D8093D5039093D603A093D70335 |
:101DA000B093D80380EF8093C8014BC080910801A5 |
:101DB0008823E1F38DE490E09F938F938DED96E07F |
:101DC0009F938F9381E08F938F938EE48F930E94E4 |
:101DD000300D8DB79EB707968DBF5EC2A091CB0127 |
:101DE000B091CC011C91113081F48DE4EDEDF6E061 |
:101DF0000D9001928A95E1F70E94C728198380917E |
:101E0000D1038F7E8093D10301C019828091080194 |
:101E10008823E1F381E090E09F938F93CE010196B8 |
:101E20009F938F9381E08F938F938DE48F930E9484 |
:101E3000300DADB7BEB71796ADBF2EC281E080930F |
:101E4000D3018FEF8093060127C280918F028823F0 |
:101E5000E1F5E091CB01F091CC01E0818E2F8A5029 |
:101E60008A3058F48983882311F481E003C08630D6 |
:101E700010F085E0898361E00EC08E2F84518A3096 |
:101E800070F48983882311F481E003C0863010F058 |
:101E900085E0898360E089810E94492912C0E98335 |
:101EA000EF3F19F40E942A2989838981882311F43C |
:101EB00081E003C0863010F085E0898389810E942B |
:101EC000CE2780E00E94270603C00E942A2989832A |
:101ED000809108018823E1F381E890E09F938F933C |
:101EE0008BE596E09F938F9381E090E09F938F9393 |
:101EF000CE0101969F938F9382E08F9381E08F9321 |
:101F000081E52DC12091CB013091CC01D9018C917B |
:101F10008150853008F045C0F9018181823609F091 |
:101F200040C080918F028823E1F52F5F3F4F81E809 |
:101F3000EBE5F6E0D9010D9001928A95E1F7F90100 |
:101F400082910E94392880919C069927AA27BB2755 |
:101F5000BC01CD0124EC39E040E050E00E943C7A25 |
:101F6000DC01CB018093860190938701A0938801C7 |
:101F7000B093890180919D069927AA27BB27BC01B0 |
:101F8000CD010E943C7ADC01CB01809382019093C9 |
:101F90008301A0938401B09385010E942A2989833B |
:101FA00001C01982809108018823E1F381E090E06B |
:101FB0009F938F93CE0101969F938F9381E08F9390 |
:101FC0008F9383E58F930E94300D8DB79EB7079650 |
:101FD0008DBF2BC080918F02882309F05DC1E091F5 |
:101FE000CB01F091CC01E0818E2F8150853018F427 |
:101FF0008E2F0E94CE270E942A2989838091080172 |
:102000008823E1F381E090E09F938F93CE010196C6 |
:102010009F938F9381E08F938F9386E48F930E9499 |
:10202000300DADB7BEB71796ADBF10918F0211231B |
:1020300041F46EE670E089810E944F31812F0E9449 |
:102040002706809182060E94B87526C119822981CF |
:10205000A091CB01B091CC01E0EDF7E08D919927F3 |
:1020600087FD909593A382A3822F8F5F8983282F6A |
:1020700032968C3098F310C1E091CB01F091CC01F5 |
:1020800080810E948C2E8A83882319F481E08983C1 |
:1020900001C01982809108018823E1F388E090E073 |
:1020A0009F938F9387E697E09F938F9321E030E093 |
:1020B0003F932F938091CB019091CC019F938F936D |
:1020C0003F932F93CE0102969F938F933F932F932D |
:1020D000CE01820F931F9F938F9384E08F9381E0B3 |
:1020E0008F9385E58F930E94300DEDB7FEB7739601 |
:1020F0003CC08091CA01893008F4CEC02091CB0148 |
:102100003091CC012F5F3F4F88E0A7E6B7E0F9019F |
:1021100001900D928A95E1F7D9018E910E94DF2DF1 |
:102120008A83882319F481E0898301C01982809110 |
:1021300008018823E1F321E030E03F932F93CE01A3 |
:1021400002969F938F933F932F93CE01820F931FFD |
:102150009F938F9382E08F9381E08F9387E58F9396 |
:102160000E94300DEDB7FEB73B96EDBF95C0809154 |
:102170008F02882309F090C00E946F758983823096 |
:1021800019F0843009F088C020E430E0F8948091A0 |
:10219000C1008F738093C1008091C9008F738093B9 |
:1021A000C9008091C100877E8093C1008091C900E1 |
:1021B000877E8093C9008091C80087FF03C080910B |
:1021C000CE00F9CF8091C00087FF03C08091C60088 |
:1021D000F9CFE091CB01F091CC01E081E13021F425 |
:1021E00082E08093BF012EC0E43611F421E830E094 |
:1021F00081E08093BF01832F99278093CD002093A6 |
:10220000CC008091CD008093C5008091CC0080935C |
:10221000C4008091CA008F7D8093CA008091CA005B |
:102220008F7E8093CA008091C9008B7F8093C90004 |
:102230008091CA0084608093CA008091CA00826045 |
:102240008093CA008091CA00877F8093CA008091E2 |
:10225000C200877F8093C2008091C9008E7F8093E7 |
:10226000C9008091C10088618093C1008091C9003C |
:1022700088618093C9008091C10080688093C1000B |
:102280008091C90080688093C90010926E001092FE |
:102290006F001092700078948091FC039927843627 |
:1022A000910509F421C185369105C4F48136910563 |
:1022B00009F4D5C08236910544F48F33910539F184 |
:1022C0008B34910509F4C0C072C18236910509F4BE |
:1022D000D3C08336910509F4E2C069C18C369105FB |
:1022E00009F450C18D3691054CF48736910509F4F7 |
:1022F0005BC18836910509F415C159C18437910530 |
:1023000009F467C08637910509F44AC150C120918C |
:10231000FB032C5629832C3008F049C1822F9927C2 |
:10232000BC01660F771F660F771F680F791F655D09 |
:10233000784F4091CB015091CC0185E0DB01FA014F |
:1023400001900D928A95E1F7DB018C9180FF0BC023 |
:102350008091E1019091E201009729F0019790931B |
:10236000E2018093E101822F9927FC01EE0FFF1F0C |
:10237000EE0FFF1FE80FF91FE55DF84F808182FF28 |
:1023800026C08091E1019091E201892BC9F4299A3C |
:102390001092B2021092B3021092B4021092B502DF |
:1023A0001092AE021092AF021092B0021092B102DF |
:1023B0001092BA021092BB021092BC021092BD029F |
:1023C00084EF91E09093E2018093E101F0C02998BD |
:1023D000EEC08091CD01A091CB01B091CC018031B4 |
:1023E00040F080E1E5EDF3E00D9001928A95E1F790 |
:1023F0000DC08D919D910D90BC91A02D8093D50322 |
:102400009093D603A093D703B093D803809108018B |
:102410008823E1F31F92809105018F9384E58F93C8 |
:102420000E94300D8AEF8093C8018FEF80930601E0 |
:1024300080EA9FE00E94B8169093C1018093C0018A |
:102440000F900F900F90B3C0E091CB01F091CC01B1 |
:102450008081918190938F0180938E01A8C0E0913B |
:10246000CB01F091CC01808180930701803298F0FC |
:102470008FE1809307010FC0A091CB01B091CC01F7 |
:102480008BE0EDEEF3E00D9001928A95E1F78091FB |
:10249000F6038093F6058FEF8093060188C0809144 |
:1024A000C4019091C501892B89F4E091CB01F09191 |
:1024B000CC01E081EE2351F08AE0E89FC0011124B5 |
:1024C0000E94B8169093C8038093C703E091CB0194 |
:1024D000F091CC0190818AE0989FC00111249093E3 |
:1024E000C5018093C40115C08FEF80930601E09170 |
:1024F000CB01F091CC0190818AE0989FC00111241A |
:102500009093C7018093C601892B19F081E08093D5 |
:10251000D50180EA9FE00E94B8169093C101809394 |
:10252000C00145C08FEF80930601E091CB01F0918F |
:10253000CC01908197FD08C082E08093D201109277 |
:10254000C3011092C2011AC0909580913402892B68 |
:102550008093340291818AE0989FC0011124909366 |
:10256000C3018093C20184E08093D20180EA9FE09E |
:102570000E94B8169093C1018093C00181E08093BE |
:10258000D60115C08FEF80930601E091CB01F09149 |
:10259000CC0180818093350281E08093D70107C010 |
:1025A00081E08093D40103C081E08093D801109230 |
:1025B000D0011092CC011092CB011092CA01E3E03D |
:1025C000CE5F0C94F67A982F8091C00085FFFCCFE7 |
:1025D0009093C60008950F931F9388E18093C100E4 |
:1025E0008091C00082608093C0008091C1008068AB |
:1025F0008093C1008091C10080648093C10000E09D |
:1026000010E00093C5008AE290E08093C4008091BE |
:10261000C6019091C7010E94B8169093CA03809397 |
:10262000C9038CED90E00E94B8169093F903809353 |
:10263000F80382E08093CB0384E08093CC03109274 |
:10264000CF038BE08093CD031092CE031092D3037F |
:10265000809103018093D2031093CC010093CB01AE |
:102660001092CA011F910F910895A0E1B0E0EBE331 |
:10267000F3E10C94D97A80910801882309F48CC283 |
:102680008091C0019091C1010E94C116882361F020 |
:102690001092C3011092C2011092C7011092C6019C |
:1026A0001092C5011092C4018091C2019091C301A2 |
:1026B000892B41F08091D6049091D7040E94C116D5 |
:1026C000882329F48091D601882309F460C0809181 |
:1026D0000801882309F45BC08091D2010AE016E06A |
:1026E0008430A8F00E94B51F80E590E09F938F93FF |
:1026F0001F930F9381E08F938F9388E48F930E94B1 |
:10270000300D2DB73EB7295F3F4F2DBF34C010921B |
:10271000360289ED93E09F938F9388EA9FE19F9320 |
:102720008F93E091B703F091B803099584E190E0AD |
:102730009F938F931F930F9381E090E09F938F93CC |
:1027400082ED91E09F938F9382E08F9381E08F934E |
:1027500088E48F930E94300D8091D201982F8F5F73 |
:102760008093D2012DB73EB7215F3F4F2DBF9430EC |
:1027700010F01092D2018091C2019091C3010E9489 |
:10278000B8169093D7048093D6041092D601809106 |
:10279000D701882351F180910801882331F10E94EB |
:1027A000B51F80E590E09F938F938AE096E09F931A |
:1027B0008F9321E030E03F932F9385E291E09F9348 |
:1027C0008F933F932F9385E392E09F938F9383E0C2 |
:1027D0008F9381E08F938CE48F930E94300D109241 |
:1027E000D7018DB79EB70F968DBF8091D4018823F6 |
:1027F000D1F0809108018823B1F08AE090E09F93A6 |
:102800008F938BEC93E09F938F9381E08F938F93C3 |
:1028100086E58F930E94300D1092D4012DB73EB7FC |
:10282000295F3F4F2DBF8091D8018823D9F0809137 |
:1028300008018823B9F08BE090E09F938F938DEE91 |
:1028400093E09F938F9381E08F93809105018F9305 |
:1028500087E48F930E94300D1092D8018DB79EB7F8 |
:1028600007968DBF8091C6019091C701892B41F0D9 |
:102870008091C9039091CA030E94C116882321F454 |
:102880008091D501882341F180910801882321F1AD |
:102890000E94593082E490E09F938F9384EB95E0FF |
:1028A0009F938F9381E08F938F9384E48F930E9403 |
:1028B000300D1092D5012DB73EB7295F3F4F2DBF88 |
:1028C0008091C6019091C701009731F00E94B8161F |
:1028D0009093CA038093C9038091C4019091C5016C |
:1028E000892B09F497C08091C7039091C8030E9477 |
:1028F000C116882309F48EC080910801882309F449 |
:1029000089C08091DC089091DD089093BA03809390 |
:10291000B9038091DE089091DF089093BC03809307 |
:10292000BB032091BE083091BF084091C008509170 |
:10293000C108DA01C901F3E0880F991FAA1FBB1F64 |
:10294000FA95D1F7820F931FA41FB51F820F931F13 |
:10295000A41FB51F209140013091410140914201D7 |
:1029600050914301BC01CD010E94B07A3093BE0367 |
:102970002093BD038091B2029091B302A091B40262 |
:10298000B091B502E9E0B595A79597958795EA9539 |
:10299000D1F78093BF038091AE029091AF02A091D6 |
:1029A000B002B091B10279E0B595A795979587955A |
:1029B0007A95D1F78093C0038091BA029091BB02BF |
:1029C000A091BC02B091BD0269E0B595A79597951D |
:1029D00087956A95D1F78093C1038EE090E09F932D |
:1029E0008F9389EB93E09F938F9381E08F938F93E5 |
:1029F00083E48F930E94300D8091C4019091C501B2 |
:102A00000E94B8169093C8038093C7038DB79EB7F2 |
:102A100007968DBF809107018F3F79F1992754E088 |
:102A2000880F991F5A95E1F787529E4F40E150E079 |
:102A3000BC01CE0101960E948F7880E190E09F93C7 |
:102A40008F93CE0101969F938F9381E090E09F93A7 |
:102A50008F9387E091E09F938F9382E08F9381E043 |
:102A60008F9381E48F930E94300D8FEF8093070145 |
:102A70002DB73EB7255F3F4F2DBF8091F6058823C8 |
:102A8000C9F0809108018823A9F081E090E09F932C |
:102A90008F9386EF95E09F938F9381E08F938F9331 |
:102AA00082E48F930E94300D1092F6058DB79EB789 |
:102AB00007968DBF8091D3018823D1F080910801C2 |
:102AC0008823B1F086E490E09F938F9380ED97E0A8 |
:102AD0009F938F9381E08F938F9380E58F930E94D4 |
:102AE000300D1092D3012DB73EB7295F3F4F2DBF58 |
:102AF0008091F8039091F9030E94C116882309F48C |
:102B00004BC080910801882309F446C080919F0141 |
:102B1000882361F58091DC089091DD089093E603AD |
:102B20008093E5038091DE089091DF089093E8039D |
:102B30008093E70380916C028093E90380916B029C |
:102B40008093EA0388E090E09F938F9385EE93E073 |
:102B50009F938F9381E08F9383E08F938BE68F9386 |
:102B60000E94300D8DB79EB707968DBF8091EB0305 |
:102B7000853018F086E08093EB038091E90188238B |
:102B800019F083E690E002C087EE93E00E94B81649 |
:102B90009093F9038093F803E4E0C05F0C94F57A16 |
:102BA0001F920F920FB60F9211242F933F935F93B2 |
:102BB0006F937F938F939F93AF93BF93EF93FF9305 |
:102BC0008091EB01882329F08091EB018150809363 |
:102BD000EB0180918403882319F081508093840352 |
:102BE0008091F30181508093F3018F3F09F051C030 |
:102BF00089E08093F3018091F1019091F2010196B7 |
:102C00009093F2018093F101809112018F5F8170A6 |
:102C100080931201882349F48091F001843028F4D4 |
:102C20008091F0018F5F8093F001349903C081E0BF |
:102C30008093E9018091EC019091ED01892B11F1D4 |
:102C40008091EC019091ED010B9750F08091EC0197 |
:102C50009091ED010A979093ED018093EC0104C0EF |
:102C60001092ED011092EC018091EC019091ED0138 |
:102C700020910B0130910C0182239323892B41F089 |
:102C8000479A07C08FEF9FEF90930C0180930B0141 |
:102C900047988091E901882309F45AC020919F0147 |
:102CA000222309F055C08091AE0883FF51C086B140 |
:102CB0009927FC01E071F07084FF13C08091EE0150 |
:102CC0009091EF0101969093EF018093EE01809136 |
:102CD000EE019091EF01895E9340D0F12093E901DC |
:102CE00037C08091EE019091EF01892B69F18091BD |
:102CF000EE019091EF018A56914030F58091EE01FE |
:102D00009091EF0169E270E00E94677A8091EE0194 |
:102D10009091EF01860F971F9093EF018093EE0142 |
:102D20008091EE019091EF010B9750F08091EE01B0 |
:102D30009091EF010A9790938F0180938E0104C0C8 |
:102D4000F0938F01E0938E011092EF011092EE014B |
:102D5000FF91EF91BF91AF919F918F917F916F9173 |
:102D60005F913F912F910F900FBE0F901F9018957C |
:102D70002091F1013091F201280F391FC90101960C |
:102D800008952091F1013091F201821B930B892F5C |
:102D900099278695807490700895CF93DF930E9451 |
:102DA000B816EC01CE010E94C1168823D9F3DF9139 |
:102DB000CF910895CF93DF930E94B816EC0109C01C |
:102DC00080911501882329F0909315018FEC809351 |
:102DD0007A00CE010E94C116982F882389F3DF91D3 |
:102DE000CF9108959FB7F8945F983E9A469A809144 |
:102DF000B0008F708093B0008091B00083608093AA |
:102E0000B0008091B1008B738093B1008091B100CC |
:102E10008B608093B1001092B2008FEF8093B3006B |
:102E20008091B00080688093B000809170008A7FAC |
:102E300080937000809170008260809370009FBFCB |
:102E400008958AE090E00E94B8169093F805809368 |
:102E5000F70582E085BD83EB84BD8FEF88BD84EBF1 |
:102E600087BD86E086BD80916E00816080936E0094 |
:102E700008958091CD0620916D0182FF30C0909120 |
:102E80008B068CE3989FB001112490918A0680E50F |
:102E9000989FA0011124922F905897FD9D5F9595C2 |
:102EA000959586E09802C001112420910901309186 |
:102EB0000A01281B390B30930A012093090142179C |
:102EC00053072CF050930A014093090108952617E7 |
:102ED000370784F070930A01609309010895822FE7 |
:102EE000992736E0880F991F3A95E1F790930A01E8 |
:102EF000809309010895EF92FF920F931F93CF9350 |
:102F0000DF9380919206E82FFF27EA5BFE4F9681C0 |
:102F1000C08180911101813009F021C18091CF06DB |
:102F200087FF05C0C0E0D0E0E0E0F0E046C0892FB8 |
:102F3000992787FD9095A92FB92F2091EA0230910A |
:102F4000EB024091EC025091ED02BC01CD010E94D8 |
:102F50003C7A97FF04C061587F4F8F4F9F4F7B0192 |
:102F60008C0187E015950795F794E7948A95D1F73A |
:102F70008C2F992787FD9095A92FB92F2091E202D8 |
:102F80003091E3024091E4025091E502BC01CD0191 |
:102F90000E943C7A97FF04C061587F4F8F4F9F4F2C |
:102FA000B7E09595879577956795BA95D1F7F8012C |
:102FB000E701C61BD70BE80BF90B20916A03309190 |
:102FC0006B03C901A3E0880F991FAA95E1F7821B43 |
:102FD000930BAA2797FDA095BA2FC81BD90BEA0B14 |
:102FE000FB0B80916B019927AA27BB27BC01CD0160 |
:102FF0009E01AF010E943C7A97FF04C061507E4F52 |
:103000008F4F9F4FFC01EB0179E0F595E795D79540 |
:10301000C7957A95D1F71091CD066091090170910D |
:103020000A0112FF05C07093100160930F0118C0D0 |
:1030300040910F015091100180919106282F332764 |
:10304000CB01841B950BB9010E947B7A80910F0103 |
:1030500090911001860F971F9093100180930F019C |
:1030600010FF14C080910F019091100197FD0F96F1 |
:1030700064E0959587956A95E1F7AA2797FDA09555 |
:10308000BA2FC80FD91FEA1FFB1F15C080910F016F |
:103090009091100197FD0F9654E0959587955A955C |
:1030A000E1F7AA2797FDA095BA2F8C1B9D0BAE0BBD |
:1030B000BF0BFD01EC012091C506222321F133272E |
:1030C0008091E5019091E601829FA001839F500DC0 |
:1030D000929F500D1124CA01AA2797FDA095BA2FDF |
:1030E0008C0F9D1FAE1FBF1F2F5F3F4F442737FD23 |
:1030F0004095542FBC01CD010E94B07A3093E60177 |
:103100002093E50104C0D093E601C093E5018091CE |
:103110008A06282F3327220F331F220F331F809157 |
:10312000E5019091E601821793077CF080918B0670 |
:10313000282F3327220F331F220F331F8091E501E1 |
:103140009091E6012817390724F43093E601209383 |
:10315000E501809111018F5F80931101F9C0892FE2 |
:10316000992787FD9095A92FB92F2091E2023091E0 |
:10317000E3024091E4025091E502BC01CD010E94BE |
:103180003C7A97FF04C061587F4F8F4F9F4F7B0160 |
:103190008C0187E015950795F794E7948A95D1F708 |
:1031A0008C2F992787FD9095A92FB92F2091EA029E |
:1031B0003091EB024091EC025091ED02BC01CD0147 |
:1031C0000E943C7A9B01AC0197FF04C021583F4FFD |
:1031D0004F4F5F4FC7E05595479537952795CA954F |
:1031E000D1F72E0D3F1D401F511F80916A01992775 |
:1031F000AA27BB27BC01CD010E943C7A97FF04C0DF |
:1032000061507E4F8F4F9F4FFC01EB01B9E0F59568 |
:10321000E795D795C795BA95D1F780916C01992715 |
:10322000A6E0880F991FAA95E1F740910D015091F2 |
:103230000E01209191063327841B950BB9010E9442 |
:103240007B7A80910D0190910E01860F971F9093CC |
:103250000E0180930D018091CD0681FF14C08091F5 |
:103260000D0190910E0197FD0F9674E0959587954D |
:103270007A95E1F7AA2797FDA095BA2FC80FD91F15 |
:10328000EA1FFB1F15C080910D0190910E0197FD63 |
:103290000F9664E0959587956A95E1F7AA2797FDC3 |
:1032A000A095BA2F8C1B9D0BAE0BBF0BFD01EC0143 |
:1032B0002091C606222321F133278091E3019091CA |
:1032C000E401829FA001839F500D929F500D112415 |
:1032D000CA01AA2797FDA095BA2F8C0F9D1FAE1F7C |
:1032E000BF1F2F5F3F4F442737FD4095542FBC0130 |
:1032F000CD010E94B07A3093E4012093E30104C031 |
:10330000D093E401C093E30180918E06282F3327E8 |
:10331000220F331F220F331F8091E3019091E401AC |
:10332000821793077CF080918F06282F3327220F76 |
:10333000331F220F331F8091E3019091E40128177E |
:10334000390724F43093E4012093E3011092110132 |
:10335000E6E0CDB7DEB70C94F37A1F920F920FB66A |
:103360000F9211242F933F934F935F938F939F93CB |
:10337000EF93FF938091F401882309F0DDC08091E1 |
:10338000B00086FF9FC08091B0008F7B8093B0001B |
:10339000E091F70120919006EE23D9F433278DEDCB |
:1033A00096E0289FA001299F500D389F500D1124B1 |
:1033B000CA012091F5013091F601821B930B909385 |
:1033C000E8018093E7011092F6011092F501469A08 |
:1033D000B0C02E1738F48AE090E09093E801809313 |
:1033E000E701A7C089EA93E09093E8018093E701A1 |
:1033F0008E2F992783309105D9F08430910534F4CC |
:103400008130910549F0029761F020C08430910528 |
:1034100091F0059799F01AC08091E5019091E6012D |
:1034200004C08091E3019091E40187559E4F1DC037 |
:103430008091890805C08091620802C0809192083D |
:103440009927880F991F880F991FEFCFFF27EE0F3D |
:10345000FF1FE053F84F20813181220F331F8091ED |
:10346000E7019091E801820F931F9093E801809308 |
:10347000E7018091E7019091E80155E08D3D9507C6 |
:1034800018F08CED95E005C08757914030F487E740 |
:1034900091E09093E8018093E7012091E70130915A |
:1034A000E8012C5B30403093E8012093E7018091E4 |
:1034B000F5019091F601820F931F9093F60180938E |
:1034C000F50137C08091B00080648093B0008CEB30 |
:1034D00090E09093E8018093E7018091F50190914D |
:1034E000F60184549F4F9093F6018093F5018091EB |
:1034F000EA01882321F080919002882321F48091B1 |
:10350000EA01823011F4469801C0469A8091F70191 |
:103510008F5F8093F701282F33278091900699279A |
:103520000196821793072CF481E080931101109289 |
:10353000F70181E08093F4012091E7013091E801E7 |
:1035400041E02F37340730F08FEF8093B3002F5FC7 |
:1035500030400FC02F3F3105C9F0C0F0A9014F5FC7 |
:1035600050404F37510550F480E88093B300205805 |
:1035700030403093E8012093E70112C08FEF809331 |
:10358000B3005093E8014093E7010AC08091E7013E |
:103590008093B3001092E8011092E7011092F401B9 |
:1035A000FF91EF919F918F915F914F913F912F915B |
:1035B0000F900FBE0F901F90189510927C008FEC0B |
:1035C00080937A00089580914F0260911301709169 |
:1035D000140120910402882379F0CB01AA27BB278C |
:1035E000332727FD3095432F532FBC01CD010E9477 |
:1035F0003C7ADC01CB0116C084E0660F771F8A9508 |
:10360000E1F7CB01AA27BB27332727FD3095432FAE |
:10361000532FBC01CD010E943C7ADC01CB01049701 |
:10362000A109B1098093FC019093FD01A093FE01D3 |
:10363000B093FF010895CF93DF93109204020E948C |
:10364000E31A83E090E00E94B027C82FDD27C03F37 |
:10365000D10508F42A96C7BD8C2F809588BD86E9D0 |
:1036600090E00E94DA168091190190911A0181521E |
:10367000934010F0C0EFD0E0C630D10510F1C7BDC7 |
:103680008C2F809588BD84E690E00E94DA168EEE3D |
:1036900093E09F938F9383EE92E19F938F93E091BA |
:1036A000B703F091B80309958091190190911A011F |
:1036B0000F900F900F900F908152934010F421972C |
:1036C000DBCFC09307066C2F83E090E00E94B82701 |
:1036D0008091680680FF0AC0809107068A508C3D61 |
:1036E00028F08091D00380648093D0038CE291E035 |
:1036F0000E94DA16DF91CF9108951F920F920FB6B4 |
:103700000F9211242F933F934F935F936F937F9367 |
:103710008F939F93AF93BF93CF93DF93EF93FF93D9 |
:1037200080911C02282F3327442755278F5F8093D1 |
:103730001C02F9012231310508F0DEC3E25CFF4FC3 |
:103740000C94027B809178009091790046C0809122 |
:103750007800909179007BC18091780090917900F8 |
:103760009093200280931F028BC18091F40290916C |
:10377000F5022091780030917900821B930B909391 |
:10378000FA058093F9058091F9059091FA059093D7 |
:103790002A028093290292C1809178009091790049 |
:1037A0002091F6023091F702821B930B909306064C |
:1037B00080930506809105069091060690932C0251 |
:1037C00080932B029BC3809123029091240220912D |
:1037D000780030917900820F931F90932402809398 |
:1037E000230281E08CC380912102909122022091DA |
:1037F000780030917900820F931F9093220280937A |
:10380000210284E07CC38091320290913302892BA3 |
:1038100091F42091780030917900C901E3E0880F9C |
:10382000991FEA95E1F7820F931F820F931F9093E0 |
:103830003302809332022091780030917900C901DF |
:1038400073E0880F991F7A95E1F7820F931F820F1B |
:10385000931F20913202309133028217930718F0A0 |
:103860002E5F3F4F02C022503040309333022093EE |
:10387000320280913202909133026FE170E00E9437 |
:10388000677A709324016093230185E038C38091A7 |
:103890007800909179009093FC058093FB058091CE |
:1038A000FB059091FC054091F0025091F102841BC0 |
:1038B000950B2091EF02332727FD3095821B930B48 |
:1038C00090930A028093090280914F02882309F0A5 |
:1038D0006DC08091090290910A0202977CF122E06A |
:1038E0004E3E52070CF062C020911D0230911E0224 |
:1038F0002B5F3F4F30931E0220931D022550304016 |
:103900008091580290915902845F914030F4215F78 |
:103910003F4F30931E0220931D0280911D02909113 |
:103920001E02853691050CF441C04F5F5F4F5093E6 |
:10393000F1024093F0028456904034C08091090215 |
:1039400090910A028F5F9F4F8CF562E047325607D5 |
:103950006CF120911D0230911E02255030403093B1 |
:103960001E0220931D022B5F3F4F809158029091C1 |
:103970005902845F914030F42F50304030931E0242 |
:1039800020931D0280911D0290911E022FEF8C3911 |
:10399000920764F4415050405093F1024093F0027A |
:1039A0008C599F4F90931E0280931D0280910902B3 |
:1039B00090910A029C01442737FD4095542F809135 |
:1039C000AA029091AB02A091AC02B091AD02820F1D |
:1039D000931FA41FB51F8093AA029093AB02A093DC |
:1039E000AC02B093AD022091AA023091AB0240919B |
:1039F000AC025091AD0257FF04C021503C4F4F4FD5 |
:103A00005F4F6AE055954795379527956A95D1F7A9 |
:103A10008091AA029091AB02A091AC02B091AD024C |
:103A2000821B930BA40BB50B8093AA029093AB025D |
:103A3000A093AC02B093AD02F5C0809121029091A9 |
:103A400022022091780030917900820F931F909389 |
:103A500022028093210210921B0253C2209178000F |
:103A60003091790080911F0290912002280F391F18 |
:103A70008FEF97E0821B930B9093100280930F02BD |
:103A800086E03DC28091F4029091F5022091780089 |
:103A900030917900821B930B9093FA058093F9057E |
:103AA0008091F9059091FA052091290230912A021E |
:103AB000820F931F90930E0280930D0287E01FC226 |
:103AC00080917800909179002091F6023091F70270 |
:103AD000821B930B90930606809305068091050642 |
:103AE0009091060620912B0230912C02820F931F99 |
:103AF00090930C0280930B0201C22091230230911B |
:103B000024028091780090917900280F391F220FAC |
:103B1000331F220F331F3093240220932302C90145 |
:103B200037FD079643E0959587954A95E1F7909381 |
:103B30001402809313028091250290912602820F35 |
:103B4000931F97FD019695958795909326028093F4 |
:103B500025022091000330910103821B930B909367 |
:103B60002201809321012091190230911A02809143 |
:103B7000210190912201280F391F37FF02C02F5FCA |
:103B80003F4F3595279530931A022093190229CE7D |
:103B90002091210230912202809178009091790049 |
:103BA000280F391F220F331F220F331F3093220299 |
:103BB00020932102C90137FD0796F3E0959587957B |
:103BC000FA95E1F7909312028093110280912702F7 |
:103BD00090912802820F931F97FD019695958795E6 |
:103BE00090932802809327022091FE023091FF02D9 |
:103BF000821B930B9093200180931F012091170249 |
:103C00003091180280911F0190912001280F391FD7 |
:103C100037FF02C02F5F3F4F35952795309318022D |
:103C20002093170283E06BC180918A0290918B02EE |
:103C3000A0918C02B0918D028093F8019093F901CC |
:103C4000A093FA01B093FB0110921C0281E08093D3 |
:103C5000150180910002909101020196909301025A |
:103C600080930002809178009091790090931A01DE |
:103C7000809319018091190190911A01AA27BB27FD |
:103C8000C0912D02D0912E02E0912F02F0913002CE |
:103C9000C80FD91FEA1FFB1FC0932D02D0932E021D |
:103CA000E0932F02F0933002809131028F5F809376 |
:103CB0003102803108F422C180911B0190911C01D6 |
:103CC000A0911D01B0911E019C01AD0163E0220F86 |
:103CD000331F441F551F6A95D1F7281B390B4A0B18 |
:103CE0005B0B2C0F3D1F4E1F5F1F8091FC019091BD |
:103CF000FD01A091FE01B091FF01281B390B4A0B79 |
:103D00005B0B57FF04C0295F3F4F4F4F5F4F93E05E |
:103D100055954795379527959A95D1F720931B018F |
:103D200030931C0140931D0150931E01C091FD056D |
:103D3000D091FE05E091FF05F091000680911B01F6 |
:103D400090911C01A0911D01B0911E01C81BD90BBF |
:103D5000EA0BFB0BC0938A02D0938B02E0938C0298 |
:103D6000F0938D02209105023091060240910702E6 |
:103D70005091080257FF04C0215F3F4F4F4F5F4FE4 |
:103D800084E055954795379527958A95D1F7809189 |
:103D9000050290910602A0910702B0910802821BD1 |
:103DA000930BA40BB50B8093050290930602A0938E |
:103DB0000702B09308028091050290910602A0913B |
:103DC0000702B09108028C0F9D1FAE1FBF1F80938A |
:103DD000050290930602A0930702B0930802809117 |
:103DE000050290910602A0910702B0910802B7FF68 |
:103DF00003C00F96A11DB11DC4E0B595A795979579 |
:103E00008795CA95D1F720918A0230918B02281BA1 |
:103E1000390B64E0213036071CF020E034E006C0A6 |
:103E20008CEF2030380714F420E03CEF8091020240 |
:103E300090910302809102029091030297FF03C0C8 |
:103E4000909581959F4FA901F3E0440F551FFA9576 |
:103E5000E1F78D5B9240C4F08091020290910302E1 |
:103E60009C01E4E0220F331FEA95E1F7281B390B90 |
:103E7000240F351F37FF02C0215F3F4F74E0359597 |
:103E800027957A95E1F717C080910202909103027D |
:103E90009C0165E0220F331F6A95E1F7281B390B5F |
:103EA000240F351F37FF02C0215E3F4F45E0359597 |
:103EB00027954A95E1F730930302209302028091FF |
:103EC0002D0290912E02A0912F02B0913002B7FFE7 |
:103ED00003C00196A11DB11DB595A795979587952E |
:103EE00080932D0290932E02A0932F02B093300264 |
:103EF00088E08093310202C010921C0282E080931D |
:103F00001B0280911B0280937C0080911C028823FD |
:103F100019F08FEC80937A00FF91EF91DF91CF91B0 |
:103F2000BF91AF919F918F917F916F915F914F91D1 |
:103F30003F912F910F900FBE0F901F90189590E218 |
:103F4000EAE0F6E08FE49193815087FFFCCF08957B |
:103F500090913602903540F4E92FFF27E65FF94F44 |
:103F600080839F5F909336020895A0E0B0E0EBEB72 |
:103F7000FFE10C94D57A2091340220FF0AC0809191 |
:103F80003502882311F0815002C080912501809371 |
:103F9000350221FF0CC090913502809125019817C0 |
:103FA00019F41092350203C09F5F90933502822F5F |
:103FB000992780FF04C081FF02C0109235020E9441 |
:103FC0009F1F80913502282F332708EA1FE1C091F7 |
:103FD000B703D091B8038A3098F481E18093360218 |
:103FE0003F932F9380EF93E09F938F931F930F93B3 |
:103FF000FE0109952DB73EB72A5F3F4F2DBF11C077 |
:1040000080E1809336023F932F9385EF93E09F9357 |
:104010008F931F930F93FE0109958DB79EB7069658 |
:104020008DBF20913502822F9927AA27BB27FC013B |
:104030000D9708F096C5E05BFF4F08EA1FE1C091BD |
:10404000B703D091B8030C94027B109236028AEF2A |
:1040500093E09F938F9358EAE52E5FE1F52E1F932F |
:104060000F93FE01099584E1809336020F900F9023 |
:104070000F900F9081E690E09F938F9384E090E003 |
:104080009F938F9382E090E09F938F9380910301A1 |
:104090006AE00E945B7A892F99279F938F93809182 |
:1040A00003010E945B7A99279F938F938AE094E0A3 |
:1040B0009F938F931F930F93E091B703F091B803F1 |
:1040C000099588E280933602EDB7FEB73E96EDBFC4 |
:1040D0008EED96E09F938F938091010199279F9396 |
:1040E0008F9382E294E09F938F931F930F93E091BD |
:1040F000B703F091B80309958091D1032DB73EB76E |
:10410000285F3F4F2DBF84FF0AC08CE380933602A7 |
:1041100080E394E09F938F931F930F933DC0909102 |
:10412000D003992351F08CE380933602892F99278D |
:104130009F938F938DE394E047C090913C02992325 |
:1041400051F08CE380933602892F99279F938F93A8 |
:1041500084E594E02EC190917103992371F08CE372 |
:1041600080933602892F99279F938F938AE694E054 |
:104170009F938F93FF92EF9288C380913901909122 |
:104180003A01069798F48CE3809336028BE794E02B |
:104190009F938F93FF92EF92E091B703F091B80352 |
:1041A00009950F900F900F900F90E4C490914909DA |
:1041B0009E3108F0DFC48CE380933602892F992763 |
:1041C0009F938F9388E894E09F938F93FF92EF9251 |
:1041D000E091B703F091B80309958DB79EB70696A5 |
:1041E0008DBFC8C41092360280918A0290918B02D2 |
:1041F000A0918C02B0918D02BC01CD0125E030E090 |
:1042000040E050E00E94B07A3F932F938CE994E015 |
:104210009F938F931F930F93FE01099584E18093E1 |
:104220003602EDB7FEB73696EDBF809186029091CB |
:104230008702A0918802B0918902BC01CD0125E0DE |
:1042400030E040E050E00E94B07A3F932F9389EA3B |
:1042500094E09F938F931F930F93E091B703F09196 |
:10426000B803099588E2809336022DB73EB72A5FDE |
:104270003F4F2DBF8091190190911A019F938F9309 |
:1042800086EB94E09F938F931F930F93E091B70376 |
:10429000F091B80309958CE3809336028DB79EB7F1 |
:1042A00006968DBF87B599279F938F9383EC94E0F3 |
:1042B0009F938F931F930F93E091B703F091B803EF |
:1042C0000995EDB7FEB7369690C31092360280ED91 |
:1042D00094E09F938F9348EAE42E4FE1F42E1F93CE |
:1042E0000F93FE01099584E1809336020F900F90A1 |
:1042F0000F900F908091EA029091EB02A091EC0256 |
:10430000B091ED02B7FF04C081509C4FAF4FBF4F3B |
:104310003AE0B595A795979587953A95D1F7BF93CC |
:10432000AF939F938F938DED94E09F938F93FF9224 |
:10433000EF92E091B703F091B803099588E280937A |
:1043400036022DB73EB7285F3F4F2DBF8091E20266 |
:104350009091E302A091E402B091E502B7FF04C09E |
:1043600081509C4FAF4FBF4F2AE0B595A7959795C9 |
:1043700087952A95D1F7BF93AF939F938F938CEE38 |
:1043800094E09F938F93FF92EF92E091B703F091A7 |
:10439000B80309958CE3809336028DB79EB70896D3 |
:1043A0008DBF80916A0890916B089F938F938BEFDC |
:1043B00094E09F938F93FF92EF927ECF91E0F92E3E |
:1043C000C1E0D0E002ED17E09F2D969584E1989F23 |
:1043D000C001112480933602F801828193819F935A |
:1043E0008F932196DF93CF932197808191819F9323 |
:1043F0008F93DF93CF938AE095E09F938F9388EA22 |
:104400009FE19F938F93E091B703F091B8030995D3 |
:104410002DB73EB7245F3F4F2DBF32E0F30E2296FB |
:104420000C5F1F4F88E08F1578F6A4C310923602F8 |
:1044300080915D06E82FFF27EE0FFF1FE053F84F36 |
:10444000808191819F938F9380915C06E82FFF2755 |
:10445000EE0FFF1FE053F84F808191819F938F9360 |
:104460008CE195E09F938F931F930F93FE01099525 |
:1044700084E180933602EDB7FEB73896EDBF8091A8 |
:104480005F06E82FFF27EE0FFF1FE053F84F8081F4 |
:1044900091819F938F9380915E06E82FFF27EE0F07 |
:1044A000FF1FE053F84F8081918181589F4F9F9368 |
:1044B0008F938CE295E09F938F931F930F93E091DE |
:1044C000B703F091B803099588E2809336022DB7BF |
:1044D0003EB7285F3F4F2DBF80916106E82FFF2731 |
:1044E000EE0FFF1FE053F84F8081918181589F4F5D |
:1044F0009F938F9380916006E82FFF27EE0FFF1F99 |
:10450000E053F84F8081918181589F4F9F938F9303 |
:104510008CE395E09F938F931F930F93E091B703E4 |
:10452000F091B80309958CE3809336028DB79EB75E |
:1045300008968DBF80916306E82FFF27EE0FFF1FBF |
:10454000E053F84F8081918181589F4F9F938F93C3 |
:1045500080916206E82FFF27EE0FFF1FE053F84F10 |
:104560008081918181589F4F9F938F938CE495E038 |
:1045700030C2109236028CE595E09F938F9388EAC3 |
:10458000E82E8FE1F82E1F930F93FE01099584E129 |
:10459000809336020F900F900F900F908091000340 |
:1045A000909101039C0197FF02C0215F3F4F207F44 |
:1045B000821B930B97FD0196959587959F938F93FB |
:1045C000809100039091010397FD0F96B4E09595BB |
:1045D0008795BA95E1F79F938F93209100033091CF |
:1045E000010337FF02C0295F3F4FA3E035952795B0 |
:1045F000AA95E1F78091130290911402821B930B0C |
:104600009F938F938AE695E09F938F93FF92EF920B |
:10461000E091B703F091B803099588E280933602E0 |
:104620002DB73EB7265F3F4F2DBF8091FE02909180 |
:10463000FF029C0197FF02C0215F3F4F207F821B3A |
:10464000930B97FD0196959587959F938F938091F6 |
:10465000FE029091FF0297FD0F96E4E095958795F5 |
:10466000EA95E1F79F938F932091FE023091FF022C |
:1046700037FF02C0295F3F4F73E0359527957A9544 |
:10468000E1F78091110290911202821B930B9F938C |
:104690008F938CE795E09F938F93FF92EF92E09139 |
:1046A000B703F091B80309958CE3809336028DB778 |
:1046B0009EB70A968DBF8091FC029091FD0297FDF6 |
:1046C0000196959587959F938F938091FC02909189 |
:1046D000FD0220910F0230911002821B930B9F93D9 |
:1046E0008F938EE895E09F938F93FF92EF9275C121 |
:1046F000109236028DE995E09F938F931F930F934D |
:10470000FE01099584E1809336020F900F900F907F |
:104710000F908091F6029091F7029F938F93809172 |
:104720000B0290910C029F938F938AEA95E09F93DE |
:104730008F931F930F93E091B703F091B8030995FE |
:1047400088E2809336022DB73EB7285F3F4F2DBFDA |
:104750008091F4029091F5029F938F9380910D02C6 |
:1047600090910E029F938F9389EB95E09F938F9387 |
:104770001F930F93E091B703F091B80309958CE371 |
:10478000809336028DB79EB708968DBF8091F00258 |
:104790009091F1029F938F938091090290910A0268 |
:1047A0009F938F9388EC95E014C11092360280910C |
:1047B0002301909124016AE070E00E947B7A9F932C |
:1047C0008F9380912301909124016AE070E00E9410 |
:1047D0007B7A7F936F9387ED95E09F938F931F93E1 |
:1047E0000F93FE01099584E1809336022DB73EB701 |
:1047F000285F3F4F2DBF80914309909144096AE0A3 |
:1048000070E00E94677A9F938F9380914309909103 |
:1048100044096AE070E00E94677A7F936F938BEEA1 |
:1048200095E09F938F931F930F93E091B703F091BF |
:10483000B803099588E2809336028DB79EB7089633 |
:104840008DBF80914509909146099F938F938FEF7B |
:1048500095E09F938F931F930F93E091B703F0918F |
:10486000B80309958CE380933602EDB7FEB7369610 |
:10487000EDBF80914709909148099F938F938FE0F6 |
:1048800096E09F938F931F930F93E091B703F0915E |
:10489000B80309952DB73EB72A5F3F4F2DBF6AC1B8 |
:1048A0001092360281E296E09F938F931F930F93AD |
:1048B000FE01099588E2809336020F900F900F90C9 |
:1048C0000F908091900299279F938F938AE296E0B0 |
:1048D0009F938F931F930F93E091B703F091B803C9 |
:1048E00009958CE3809336028DB79EB706968DBFEF |
:1048F0008091CF07992701979F938F938AE396E042 |
:10490000D7CC109236028AE496E09F938F931F9340 |
:104910000F93FE01099584E1809336020F900F906A |
:104920000F900F90809102016AE00E945B7A892FBC |
:1049300099279F938F93809102010E945B7A992718 |
:104940009F938F938AE596E09F938F931F930F9386 |
:10495000E091B703F091B803099588E2809336029D |
:104960002DB73EB7285F3F4F2DBF8091BB016AE056 |
:104970000E945B7A892F99279F938F938091BB0127 |
:104980000E945B7A99279F938F9388E696E09F9386 |
:104990008F931F930F93E091B703F091B80309959C |
:1049A0008CE3809336028DB79EB708968DBF8091B9 |
:1049B000BC016AE00E945B7A892F99279F938F93AD |
:1049C0008091BC010E945B7A99279F938F9386E721 |
:1049D00096E09F938F931F930F93E091B703F0910D |
:1049E000B8030995EDB7FEB73896EDBFC3C051E9DE |
:1049F000C52E52E0D52E20E030E0E90143E0F42E50 |
:104A0000C0933602F60181916F0199279F938F938E |
:104A100089010F5F1F4F1F930F9384E896E09F93C8 |
:104A20008F9388EA9FE19F938F93E091B703F09172 |
:104A3000B80309952DB73EB7285F3F4F2DBFFA94B5 |
:104A400064969801F7FEDCCF95C095E9C92E92E0F7 |
:104A5000D92EC0E0D0E08E0183E0F82E009336021C |
:104A6000F60181916F0199279F938F932596DF938C |
:104A7000CF9381E996E09F938F9388EA9FE19F937C |
:104A80008F93E091B703F091B80309952DB73EB726 |
:104A9000285F3F4F2DBFFA940C5E1F4F2497F7FEFF |
:104AA000DDCF68C0109236028EE996E09F938F9317 |
:104AB0001F930F93FE01099584E1809336020F90B6 |
:104AC0000F900F900F908091B7019091B8019F9334 |
:104AD0008F938CEA96E09F938F931F930F93E091AF |
:104AE000B703F091B803099588E2809336028DB739 |
:104AF0009EB706968DBF8091B9019091BA019F93A0 |
:104B00008F9389EB96E09F938F931F930F93E09180 |
:104B1000B703F091B803099589E480933602EDB7A5 |
:104B2000FEB73696EDBF86EC96E09F938F931F936A |
:104B30000F93E091B703F091B80309958091340287 |
:104B40000F900F900F900F9083FF14C01092BA0136 |
:104B50001092B90160E070E08EE090E00E94C927F9 |
:104B600009C080912501281719F4215020932501AF |
:104B70001092350210923402E8E0CDB7DEB70C9403 |
:104B8000F17AF999FECF92BD81BDF89A80B5992747 |
:104B90000895F999FECF1FBA92BD81BD60BD0FB6D1 |
:104BA000F894FA9AF99A0FBE08954AEA20E030E0A4 |
:104BB0002617370740F4FC018191480F2F5F3F4FC4 |
:104BC00026173707C8F3842F99270895EAEA40E0AB |
:104BD00050E04617570778F49C01F999FECF32BD93 |
:104BE00021BDF89A80B5E80F4F5F5F4F2F5F3F4FB1 |
:104BF0004617570790F38E2F9927089581E08093E9 |
:104C00005E0682E080935D0683E080935C0684E02C |
:104C100080935F0685E08093600686E0809361065E |
:104C200087E08093620688E08093630689E0809342 |
:104C300064068AE0809365068BE0809366068CE0CC |
:104C400080936706089582E680935B063CE0E0ED82 |
:104C5000F6E0832F11928A95E9F78AE080937B062C |
:104C600010929F068BE1809377068EE480939C06DA |
:104C700080939D06F0E2F0939E061092CC068AE6A1 |
:104C80008093680682E78093CE0680E58093CF0606 |
:104C900084E0809382061092BF061092BC0668E002 |
:104CA0006093750626EE2093760680E4809378065E |
:104CB00085E080936B068EE1809369069FE0909378 |
:104CC0006C0680936A0610926E0660936F0684E10C |
:104CD00080937006109271061092C20690936D0632 |
:104CE0001092C7063093C80610928406109285066B |
:104CF00010928606109287061092A1061092A206C4 |
:104D00001092A3061092A40690E89093880642E3BE |
:104D100040938906E2E0E093CD0688E180938A061D |
:104D200020938B0683E0809390065DE75093930673 |
:104D3000509394065093950690938C0675E5709366 |
:104D40008D0686E480938E068CED80938F068CE32F |
:104D500080939106109292069AEA9093A5068CECA5 |
:104D60008093A7061092A9069093AA0698E29093C2 |
:104D7000A6069093A8061092AB06409396062AE5E5 |
:104D8000209397064093980636E03093AC0684E66D |
:104D90008093AD068093AE062093AF0688E780939C |
:104DA000B0069093B4068BE48093B1067093B2067C |
:104DB0008093B3063093B5066093B6064093B7066A |
:104DC0008AE28093B80685EF8093B9068CE88093D9 |
:104DD000BA06E093BB061092BD061092BE0681E4AF |
:104DE00080938006209381061092C0061092C1061F |
:104DF00086E98093C3065093990684E380939A06CC |
:104E00001092C4061092C5061092C6061092C906EA |
:104E100081E280937F06F093CB068FE18093CA06F0 |
:104E200008950E9423268AE08093720680E1809391 |
:104E3000730626E0209374069AE59093790688E736 |
:104E400080937A0690937C0680937D0620937E065D |
:104E500080E2809383068CE380939B068BE48093AF |
:104E6000A00686E491E6A3E7B4E78093D00690938A |
:104E7000D106A093D206B093D30661E870E08BE52B |
:104E800096E00E94D5258093DC060895CF93DF93AA |
:104E90000E94232688E08093720630E130937306E7 |
:104EA00026E02093740694E69093790688E7809331 |
:104EB0007A0690937C0680937D0620937E0630933D |
:104EC000830686E480939B068093A006A0EDB6E05F |
:104ED00085E0E6E2F1E0ED01019009928A95E1F7C3 |
:104EE00061E870E0CD01855790400E94D525809300 |
:104EF000DC06DF91CF9108950E94232626E02093BF |
:104F000072068AE08093730684E08093740694E6C8 |
:104F10009093790688E780937A0690937C06809335 |
:104F20007D0620937E0680E18093830686E480934D |
:104F30009B068093A00685E491E6A3E7B9E78093FA |
:104F4000D0069093D106A093D206B093D30661E821 |
:104F500070E08BE596E00E94D5258093DC060895ED |
:104F6000F999FECF92BD81BDF89A80B59927089531 |
:104F7000F999FECF1FBA92BD81BD60BD0FB6F894FE |
:104F8000FA9AF99A0FBE089561EC75E20E94CA7808 |
:104F9000089549EC55E20E9404790895EF92FF923A |
:104FA0000F931F93CF93C82F8150853008F0C3E033 |
:104FB00082E8C89F8001112482EEE82E8FEFF82E40 |
:104FC000E00EF11E61E870E0C7010E94E625682F3F |
:104FD00098012D593F4F8FB39927AC014270507003 |
:104FE00081FDF9CF32BD21BDF89A80B5861711F049 |
:104FF000CA0121C08FB399279C012270307081FDB6 |
:10500000F9CFF2BCE1BCF89A80B5823611F0C90143 |
:1050100012C082E8C89FC00111244E9721EC35E2EE |
:1050200042E850E0BC018BE596E00E94A5780E9422 |
:105030006A6781E090E0CF911F910F91FF90EF9010 |
:105040000895282F863010F025E003C0882309F446 |
:1050500021E020930101F999FECF1FBA82E090E090 |
:1050600092BD81BD20BD0FB6F894FA9AF99A0FBE91 |
:105070000895CF93C82F80915B06823609F04FC008 |
:10508000C63010F0C5E003C0CC2309F448C00E942C |
:105090001E778091CF0682FF07C0809180068436FC |
:1050A00018F080E58093800661E870E08BE596E07B |
:1050B0000E94D5258093DC0682E8C89FC001112498 |
:1050C00029EC35E242E850E06BE576E04E970E942D |
:1050D000E27829EC35E24CE050E06CE576E080E5E2 |
:1050E00090E00E94E2786CE070E08CE596E00E942F |
:1050F000D525282FF999FECF1FBA8CE590E092BDF7 |
:1051000081BD20BD0FB6F894FA9AF99A0FBE8C2F84 |
:105110000E9421280E946A6781E090E002C080E03E |
:1051200090E0CF9108956DE470E088EE93E00E94E6 |
:10513000E625482F8FB399279C012270307081FD9E |
:10514000F9CF85E394E092BD81BDF89A80B58417CC |
:1051500079F48FB399279C012270307081FDF9CFCB |
:1051600088EE93E092BD81BDF89A80B5813011F050 |
:10517000C901089521EC35E24EE450E068EE73E099 |
:105180008DED96E00E94A57881E090E008958091F1 |
:10519000DD068130A9F46DE470E08DED96E00E94AB |
:1051A000D52580932A0729EC35E24EE450E06DEDD9 |
:1051B00076E088EE93E00E94E27881E090E0089546 |
:1051C00080E090E00895CF93DF9381E08093DD0647 |
:1051D000EDEDF6E08FE0158616861786108A815071 |
:1051E000349687FFF8CF80E48093EA068093EB063D |
:1051F0001092EC068093ED068093EE0690EC90936F |
:10520000EF061092F0068093F1068093F20610925A |
:10521000F3069093F4069093F5068093F6061092A9 |
:10522000F7068093F8069093F906AEEDB6E08CE0B1 |
:10523000ECE2F1E0ED01019009928A95E1F76DE46D |
:1052400070E0CD0101970E94D52580932A07DF9158 |
:10525000CF910895F999FECF82E090E092BD81BD93 |
:10526000F89A80B5282F863078F023E0322FF9990C |
:10527000FECF1FBA82E090E092BD81BD30BD0FB677 |
:10528000F894FA9AF99A0FBE20930101822F992778 |
:1052900008951F93CF93C82F162F863010F0C5E0C6 |
:1052A00003C0882309F4C1E08C2F9927823091052F |
:1052B00041F08330910544F4019731F40E941127A5 |
:1052C00005C00E94462702C00E947C271123E1F0FE |
:1052D0006CE070E080E590E00E94E625282FF999C7 |
:1052E000FECF8CE590E092BD81BDF89A80B5821723 |
:1052F00059F421EC35E24CE050E060E570E08CE5DB |
:1053000096E00E94A57802C00E94FE258C2F0E9484 |
:105310003928CF911F910895DF92EF92FF920F935A |
:105320001F93CF93FF24DF2CEF2C81E090E00E94AD |
:10533000B027823611F031E0E32E6CE070E080E5BA |
:1053400090E00E94E625C82FF999FECF8CE590E009 |
:1053500092BD81BDF89A80B58C1711F421E0D22E50 |
:10536000C1E001E010E0EE2029F48C2F0E94CE274E |
:105370008823B9F591E0F92E1F930F938EEC96E0F8 |
:105380009F938F9383EE92E19F938F93E091B70366 |
:10539000F091B80309952DB73EB72A5F3F4F2DBF57 |
:1053A0000130110521F00230110521F006C00E94E4 |
:1053B000112705C00E94462702C00E947C27DD20DD |
:1053C00059F021EC35E24CE050E060E570E08CE50E |
:1053D00096E00E94A57802C00E94FE258C2F0E94B4 |
:1053E0003928CF5F0F5F1F4FC63008F4BCCFFF20B6 |
:1053F00019F083E00E9421280E942A29C82F0E94C8 |
:10540000CE278C2F99279F938F9384EF96E09F93BD |
:105410008F9303EE12E11F930F93E091B703F09186 |
:10542000B803099581E090E00E94B0272DB73EB700 |
:105430002A5F3F4F2DBF8F3F21F00E949328882382 |
:1054400099F48DE097E09F938F931F930F93E091D2 |
:10545000B703F091B80309950E94E3280E94C7287A |
:105460000F900F900F900F90EE2029F062E681E0F0 |
:1054700090E00E94B82710925A0690E0EAEEF6E01B |
:10548000CFE08081349618160CF49F5FC150C7FF9F |
:10549000F8CF90935A06892F99279F938F938EED7B |
:1054A00096E09F938F938EE297E09F938F931F9345 |
:1054B0000F93E091B703F091B80309950E94E705B7 |
:1054C0008DB79EB708968DBFCF911F910F91FF901A |
:1054D000EF90DF900895982F2FB7F8943998389A65 |
:1054E00088B1836088B98091B9008C7F8093B900BE |
:1054F0008AE28093B8001092410210923F0210920B |
:105500003E02992379F0EFE6F7E08BE010821182FA |
:105510001282138214821582168217828150389665 |
:1055200087FFF4CF78942FBF08951092410284E949 |
:105530008093BC0080E88093BC001092BD00109264 |
:10554000BA001092BB001092B9001092B8001092ED |
:105550003D0280E00E946B2A1092BB0085E8809398 |
:10556000BC0080913B02826080933B0208951F92B1 |
:105570000F920FB60F9211242F933F936F937F9347 |
:105580008F939F93EF93FF9380914102282F3327AE |
:105590008F5F809341022330310509F40DC124301F |
:1055A00031055CF42130310509F454C02230310555 |
:1055B0000CF091C0232B71F0DFC22530310509F4C6 |
:1055C0005CC1253031050CF40FC12630310509F4DA |
:1055D00019C2D2C281E080933D0209C080913F028E |
:1055E0008C3090F480913F028F5F80933F028091D6 |
:1055F0003F02E82FFF27EE0FFF1FEE0FFF1FE352C2 |
:10560000F94F8585181654F780913F026CE00E948F |
:105610005B7A90933F02809147028F5F80934702AD |
:1056200090913B01981770F41092470210923A0241 |
:105630001092390285E08093410280913E02880FEA |
:105640008D5A04C080913F02880F8E5A8093BB0010 |
:1056500085E810C180913F02E82FFF2723E0EE0F7D |
:10566000FF1F2A95E1F7E159F84F81818093BB0034 |
:1056700085E88093BC0080913F02E82FFF2793E0EC |
:10568000EE0FFF1F9A95E1F7E159F84F808180FFF7 |
:1056900091C080913F02E82FFF2783E0EE0FFF1FAC |
:1056A0008A95E1F7E159F84F8281882329F08091AA |
:1056B0005A06873008F476C28091390290913A02F6 |
:1056C000892B09F06FC28091370290913802892BA3 |
:1056D00009F068C26FC080913F0221E030E002C053 |
:1056E000220F331F8A95E2F780913702909138029A |
:1056F00028233923232B79F080913F02E82FFF27BD |
:10570000EE0FFF1FEE0FFF1FEE0FFF1FE159F84FC7 |
:1057100080E184830DC080913F02E82FFF27EE0FC8 |
:10572000FF1FEE0FFF1FEE0FFF1FE159F84F14820E |
:1057300080913F02E82FFF2773E0EE0FFF1F7A955D |
:10574000E1F7E159F84F8481282F332763E0220FD6 |
:10575000331F6A95E1F780913F02E82FFF27EE0F94 |
:10576000FF1FEE0FFF1FEE0FFF1FE159F84F828161 |
:105770008770822B8093BB0085E88093BC002091CA |
:105780003F0281E090E002C0880F991F2A95E2F75E |
:105790002091390230913A0282239323892B51F0D0 |
:1057A00087E697E0909345028093440288E08093D7 |
:1057B0004602F8C184E0DDC1E0914402F091450267 |
:1057C00081918093BB0085E88093BC00F0934502F3 |
:1057D000E0934402809146028150809346028823E0 |
:1057E00009F4E0C183E0C5C18091B900803351F56F |
:1057F00080914202882329F480913F028F5F809339 |
:10580000420280913F02E82FFF27EE0FFF1FEE0FAD |
:10581000FF1FEE0FFF1FE159F84F838199278F7704 |
:1058200090708F37910574F480913F02E82FFF2725 |
:1058300033E0EE0FFF1F3A95E1F7E159F84F83810E |
:105840008F5F83831092410284E98093BC008AE0D9 |
:1058500090E090933A018093390180913F028F5FED |
:1058600080933F021092410280913B028E7F809391 |
:105870003B0285EA8093BC0095C18091B9008034D9 |
:10588000C1F180913E02E82FFF2723E0EE0FFF1FBA |
:105890002A95E1F7E159F84F83818F7783838091CF |
:1058A0003E028F5F80933E0280913E028C30A0F0DA |
:1058B00010923E02109238021092370280914302F9 |
:1058C0008F5F809343028C3038F0109243028091B6 |
:1058D0003B028D7F80933B0280913B0281608093ED |
:1058E0003B021092410284E98093BC0010923D0279 |
:1058F00082C080913E02E82FFF2793E0EE0FFF1F4A |
:105900009A95E1F7E159F84F83818068838380910C |
:105910003E02E82FFF2783E0EE0FFF1F8A95E1F795 |
:10592000E159F84F808180FF40C080913E02E82F0E |
:10593000FF27EE0FFF1FEE0FFF1FEE0FFF1FE159B6 |
:10594000F84F848199270097D1F0409709F04AC019 |
:1059500087E697E0909345028093440288E0809325 |
:10596000460280913E02E82FFF27EE0FFF1FEE0F49 |
:10597000FF1FEE0FFF1FE159F84F148233C08091D3 |
:105980003E029927E3E0880F991FEA95E1F78C58CA |
:10599000984F909345028093440290913E028091EB |
:1059A00043029817E1F483E01BC080913E029927DF |
:1059B00073E0880F991F7A95E1F78C58984F909370 |
:1059C00045028093440280913B0281FD06C0909184 |
:1059D0003E0280914302981711F482E001C081E0F9 |
:1059E0008093460280914602813011F485E801C01F |
:1059F00085EC8093BC008091420280933C0210921F |
:105A00004202D0C0E0914402F09145028091BB0077 |
:105A100080838091440290914502019690934502C3 |
:105A200080934402809146028150809346028230E6 |
:105A300010F085EC9BC0813011F485E897C080910F |
:105A40003B0281FF6BC08091570280FD67C080914F |
:105A50003E02E82FFF2763E0EE0FFF1F6A95E1F794 |
:105A6000E159F84F868199278C7F9070883F910586 |
:105A700081F480913E02E82FFF27EE0FFF1FEE0F0B |
:105A8000FF1FEE0FFF1FE159F84F80818160808377 |
:105A90000DC080913E02E82FFF27EE0FFF1FEE0F93 |
:105AA000FF1FEE0FFF1FE159F84F108280913E0259 |
:105AB000E82FFF2733E0EE0FFF1F3A95E1F7E1599A |
:105AC000F84F8681883F71F480913E02E82FFF27CE |
:105AD00023E0EE0FFF1F2A95E1F7E159F84F80818F |
:105AE00086601BC080913E02E82FFF2793E0EE0FF7 |
:105AF000FF1F9A95E1F7E159F84F8681893F71F4CC |
:105B000080913E02E82FFF2783E0EE0FFF1F8A956A |
:105B1000E1F7E159F84F80818460808380913E02F3 |
:105B20008F5F80933E0280913E028C30A0F01092F5 |
:105B30003E021092380210923702809143028F5F2A |
:105B4000809343028C3038F01092430280913B02E4 |
:105B50008D7F80933B021092410284E98093BC00C8 |
:105B600080913B02816080933B021AC08093BC000D |
:105B700086E08093410216C01092410284E980932E |
:105B8000BC0080913B02816080933B028AE090E000 |
:105B900090933A018093390110923F0210923E0295 |
:105BA00010923D02FF91EF919F918F917F916F91A4 |
:105BB0003F912F910F900FBE0F901F9018951F933C |
:105BC000CF93DF93182F80918F02882321F4809147 |
:105BD000C801882319F081E090E09AC01D3008F0D8 |
:105BE00095C01123B1F0E12FFF2743E0EE0FFF1F17 |
:105BF0004A95E1F7E159F84F35978081359688232A |
:105C00000CF084C03897808180FD03C083E090E071 |
:105C10007FC08091670799278B709070029719F069 |
:105C200084E090E075C067E070E087E697E00E944E |
:105C3000D52590916E07891719F085E090E068C02E |
:105C400080ED97E00E94B816EC0180913B0280FD48 |
:105C500005C0CE010E94C1168823B9F3112319F49F |
:105C60008FEF90E00BC0212F33272150304081E08F |
:105C700090E002C0880F991F2A95E2F790933A02AC |
:105C800080933902A1E0B0E0EFE6F7E040E050E0B9 |
:105C90006BE0CD01042E02C0880F991F0A94E2F731 |
:105CA0002091390230913A0282239323892B11F0FB |
:105CB0001182128261504F5F5F4F389667FFE9CFC4 |
:105CC00010923F021092410280913B028E7F80939E |
:105CD0003B0285EA8093BC0080913B0280FD05C0B9 |
:105CE000CE010E94C1168823B9F3809139029091A8 |
:105CF0003A02892B29F0CE010E94C116882311F3A4 |
:105D00008091390290913A02009711F082E090E080 |
:105D1000DF91CF911F9108950F931F93CF93DF933E |
:105D2000982F80918F02882321F48091C8018823C5 |
:105D300019F081E090E095C09D30A0F4992319F40A |
:105D400086E090E08EC0C92FDD27FE0153E0EE0F04 |
:105D5000FF1F5A95E1F7E159F84F35978081359645 |
:105D600087FD03C082E090E07CC03897808180FD91 |
:105D700003C083E090E075C080ED97E00E94B81604 |
:105D80008C0180913B0280FD05C0C8010E94C116B4 |
:105D90008823B9F3219721E030E0C90102C0880FC0 |
:105DA000991FCA95E2F79093380280933702D90180 |
:105DB000EFE6F7E040E050E06BE0CD01042E02C0DA |
:105DC000880F991F0A94E2F7209137023091380228 |
:105DD00082239323892B11F01182128261504F5F2D |
:105DE0005F4F389667FFE9CF10923E021092670727 |
:105DF00010926E071092410280913B028E7F809339 |
:105E00003B0285EA8093BC0080913B0280FD05C087 |
:105E1000C8010E94C1168823B9F38091370290917E |
:105E20003802892B29F0C8010E94C116882311F37A |
:105E30008091670799278B709070029719F084E022 |
:105E400090E00FC067E070E087E697E00E94D525FC |
:105E500090916E07891719F085E090E002C080E00C |
:105E600090E0DF91CF911F910F910895CF93DF9331 |
:105E700080E021E83FEFC6E1D8E0E0EDF7E0DF01A8 |
:105E8000853020F411961C921E9202C0318320832B |
:105E90001982188222968F5F12963296833280F38F |
:105EA0008FE790E090930F0880930E0881E89FEFB2 |
:105EB00090930D0880930C0810921108109210080E |
:105EC0001092FD021092FC021092FF021092FE024C |
:105ED0001092010310920003DF91CF9108951F9259 |
:105EE0000F920FB60F9211240F931F932F933F938E |
:105EF0004F935F936F937F938F939F93AF93BF93D2 |
:105F0000CF93DF93EF93FF934091860050918700EA |
:105F10008091490290914A02481B590B809186005A |
:105F20009091870090934A0280934902CA018D5450 |
:105F30009440A0914B02B0914C02835F9A4158F477 |
:105F400080914B028093CF07149714F010923E017A |
:105F500081E090E095C0A131B1050CF095C0CA0177 |
:105F60008B5F9040845B914008F085C080913C013C |
:105F700090913D01481B590BE091C406EE2351F06E |
:105F8000FF27EE0FFF1FE053F84F80819181843689 |
:105F90009105ECF4FD01EA0FFB1FE053F84F8081FF |
:105FA0009181FA01E81BF90BCF01F7FF03C090952F |
:105FB00081959F4F06975CF480919002883C20F475 |
:105FC00080919002865F01C088EC80939002FD0171 |
:105FD000EA0FFB1FE053F84F808191819C01220F53 |
:105FE000331F280F391F240F351F37FF02C02D5FC5 |
:105FF0003F4FE901D595C795D595C795CA0101963B |
:106000008C179D0714F4219706C041505040C417C7 |
:10601000D5070CF4219680919002833CD8F08D0135 |
:106020000A0F1B1FF801E053F84F808191819E01F8 |
:10603000281B390BC90163E070E00E947B7ACB0119 |
:10604000880F991F860F971F0A5E174FF8019183DB |
:10605000808307C0AA0FBB1FAA5EB74F11961C9280 |
:106060001E92E0914B02F0914C02EE0FFF1FE053A5 |
:10607000F84FD183C08380914B0290914C020196DE |
:1060800090934C0280934B02FF91EF91DF91CF915F |
:10609000BF91AF919F918F917F916F915F914F9140 |
:1060A0003F912F911F910F910F900FBE0F901F9056 |
:1060B00018958091DC089091DD089093B705809346 |
:1060C000B6058091DE089091DF089093B905809322 |
:1060D000B8058091B2089091B30897FD0396959505 |
:1060E0008795959587959093BB058093BA05809188 |
:1060F000C2089091C30897FD03969595879595954D |
:1061000087959093BD058093BC058091FC0290918A |
:10611000FD0220910F0230911002821B930B90938D |
:10612000BF058093BE0580918A0290918B02A09159 |
:106130008C02B0918D02BC01CD012AE030E040E03C |
:1061400050E00E94B07A3093C1052093C005809141 |
:10615000FB059091FC059093C3058093C205809147 |
:106160008E0190918F019093C7058093C605809111 |
:106170002301909124019093C9058093C8058091D3 |
:10618000900299279093CB058093CA0580916A0865 |
:1061900090916B089093CD058093CC05809170070A |
:1061A00099279093CF058093CE0580917807992702 |
:1061B0009093D1058093D005809180079927909383 |
:1061C000D3058093D2058091880799279093D505B0 |
:1061D0008093D4058091E5019091E6019093DF05CD |
:1061E0008093DE0580917402909175029093E10591 |
:1061F0008093E00580914309909144099093E305D1 |
:106200008093E20580914709909148099093E505B4 |
:106210008093E4058091860290918702A091880284 |
:10622000B0918902BC01CD012AE030E040E050E0AD |
:106230000E94B07A3093E7052093E6058091A8028A |
:106240009091A9029093ED058093EC058091490906 |
:1062500099279093F1058093F005809162039091C6 |
:1062600063039093F3058093F2058091600390910E |
:1062700061039093F5058093F4058091D003882302 |
:1062800021F48091D103882321F08091B5058160AC |
:1062900003C08091B5058E7F8093B5050895EF9278 |
:1062A000FF921F93CF93DF93182F7B0180918F0272 |
:1062B000882371F580910301893111F4299801C077 |
:1062C000299A11501F3FE9F0F092ED01E092EC01A4 |
:1062D000E7018091EC019091ED01892B11F4209759 |
:1062E00081F38091F0018823A1F31092F001809155 |
:1062F000EC019091ED01892B09F421970E943477EC |
:10630000E8CF80910301893111F4299A01C02998BD |
:10631000DF91CF911F91FF90EF900895CF93DF937E |
:1063200010927A0080911302909114029093750854 |
:1063300080937408809111029091120290936608E4 |
:106340008093650880910F02909110029093B80895 |
:106350008093B70820910B0230910C02C901880F7D |
:10636000991F880F991F820F931F820F931F90937D |
:10637000B3088093B20820910D0230910E02C9013A |
:10638000880F991F880F991F820F931F820F931FE9 |
:106390009093C3088093C2088FEC80937A00A1E9A0 |
:1063A000B2E0C0E6D6E097E08991E82FFF27EE0F34 |
:1063B000FF1FE053F84F0190F081E02DE158FF4FAF |
:1063C0001E161F061CF0E0E0F0E005C0EF3FF105EF |
:1063D00014F0EFEFF0E08C91282F3327E217F3074A |
:1063E00014F4815004C02E173F0714F48F5F8C9370 |
:1063F0009150119697FFD8CF80919C069927AA2794 |
:10640000BB27BC01CD0124EC39E040E050E00E9404 |
:106410003C7ADC01CB018093860190938701A093A5 |
:106420008801B093890180919D069927AA27BB27EF |
:10643000BC01CD010E943C7ADC01CB01809382013A |
:1064400090938301A0938401B0938501DF91CF9154 |
:106450000895A0E0B0E0EFE2F2E30C94CF7A782E5A |
:1064600091E0692EEE24FF2457014701E7011092C5 |
:10647000D003F092F702E092F602F092F502E09279 |
:10648000F402F092F102E092F0021092EF02F09228 |
:106490000103E0920003F092FF02E092FE02F0920C |
:1064A000FD02E092FC0210926801109267011092C6 |
:1064B00004020E948E3184E690E00E94DA160E9467 |
:1064C0008E318091680680FF14C0809119019091EF |
:1064D0001A01875B934058F48091190190911A0139 |
:1064E0008E5E924020F080910402882311F00E9479 |
:1064F0001B1B0091190110911A0187B5865F87BD9A |
:1065000087B5809588BD8FE1C82E8AE090E00E9413 |
:10651000DA1680910F0290911002E80EF91E809118 |
:10652000130290911402A80EB91E8091110290914D |
:106530001202880E991E8091FB059091FC05C80FF0 |
:10654000D91FCA94C7FEE1CF8091190190911A0119 |
:10655000825F934080F48091190190911A014597D0 |
:1065600050F08091190190911A01081B190B10939A |
:1065700014010093130187B58A5087BD87B58095B4 |
:1065800088BD9501205F3F4F369527953695279515 |
:106590003093010320930003C4014096969587959C |
:1065A000969587959093FF028093FE0240E150E01C |
:1065B000E40EF51EA5E0F694E794AA95E1F7F092B3 |
:1065C000FD02E092FC02C40FD51FF5E0D695C795F9 |
:1065D000FA95E1F7D093F102C093F0029093FB0299 |
:1065E0008093FA023093F9022093F80252E0751674 |
:1065F000C9F58091B2089091B30897FF03C09095B8 |
:1066000081959F4F6CE070E00E947B7A9B017093B4 |
:10661000F7026093F6028091C2089091C30897FF39 |
:1066200003C0909581959F4F6CE070E00E947B7A4B |
:106630007093F5026093F402B90184E090E00E9447 |
:10664000C9276091F4027091F50286E090E00E9403 |
:10665000C9276091F0027091F10288E090E00E94F9 |
:10666000C9274FC084E090E00E94C4279093F702AE |
:106670008093F60286E090E00E94C4279C019093EC |
:10668000F5028093F4028091F6029091F702815016 |
:10669000984018F421503840A0F18FE497E09F9380 |
:1066A0008F9383EE92E19F938F93E091B703F091E4 |
:1066B000B80309958091B2089091B30897FF03C081 |
:1066C000909581959F4F6CE070E00E947B7A70936B |
:1066D000F7026093F6028091C2089091C30897FF79 |
:1066E00003C0909581959F4F6CE070E00E947B7A8B |
:1066F0007093F5026093F40266240F900F900F9050 |
:106700000F9012BC11BC1092750810927408109270 |
:106710006608109265081092B8081092B70888ECC5 |
:1067200090E00E94DA1680910B0290910C029C017D |
:10673000220F331F220F331F280F391F280F391F35 |
:106740003093B3082093B20880910D0290910E020D |
:106750008C01000F111F000F111F080F191F080FC8 |
:10676000191F1093C3080093C20880917706C82EA2 |
:10677000DD24EE24FF24442737FD4095542FC70124 |
:10678000B6010E943C7A4B015C016093EA0270936F |
:10679000EB028093EC029093ED029801442737FDC1 |
:1067A0004095542FC701B6010E943C7ADC01CB0111 |
:1067B0008093E2029093E302A093E402B093E50297 |
:1067C0008092CA029092CB02A092CC02B092CD02EB |
:1067D0008093C2029093C302A093C402B093C502F7 |
:1067E0001092BA021092BB021092BC021092BD022B |
:1067F00000918E0110918F011093A9020093A802BD |
:1068000084E690E090938B0180938A0182E390E08C |
:106810009093ED018093EC0180919C069927AA2723 |
:10682000BB27BC01CD0124EC39E040E050E00E94E0 |
:106830003C7ADC01CB018856954CAF4FBF4F80931B |
:10684000860190938701A0938801B093890180917C |
:106850009D069927AA27BB27BC01CD010E943C7A3F |
:10686000DC01CB018856954CAF4FBF4F809382011E |
:1068700090938301A0938401B09385011092450108 |
:1068800010924401C801AA2797FDA095BA2F209124 |
:106890004001309141014091420150914301BC01BE |
:1068A000CD010E943C7ADC01CB018093BE0890931D |
:1068B000BF08A093C008B093C1081092A50210921F |
:1068C000A4020E946A67772029F0809157028460B1 |
:1068D000809357028FEF80933E0910923F0980E228 |
:1068E00080934009C1E9D2E0A0E6B6E067E0C62E99 |
:1068F0008D91E82FFF27EE0FFF1FE053F84F8081A7 |
:10690000918181588993CA94C7FEF2CF84E680931F |
:1069100090028091EA01882311F0579A17C0809164 |
:10692000CD06992780FF05C082FF03C080EE9EE25E |
:1069300002C080E091E190930A018093090181E017 |
:10694000809311010E947B170E947B1788E090E0E2 |
:106950000E94C4279093F1028093F00212BC11BCF4 |
:10696000809100039091010380569940815C9B4285 |
:1069700028F08091D00381608093D0038091FE0243 |
:106980009091FF0280569940815C9B4228F0809153 |
:10699000D00382608093D0038091FC029091FD022D |
:1069A0008C5291408957954028F08091D0038460A3 |
:1069B0008093D0038091F6029091F7028C5291401F |
:1069C000835C914028F08091D00388608093D0034D |
:1069D0008091F4029091F5028C529140835C914039 |
:1069E00028F08091D00380618093D0038091F002E1 |
:1069F0009091F102805092408355914028F080910F |
:106A0000D00380628093D0038091D00381116624EB |
:106A100086E480937D0180911B0190911C01A091DF |
:106A20001D01B0911E018093FD059093FE05A0937A |
:106A3000FF05B0930006109203021092020210921A |
:106A4000050210920602109207021092080210929C |
:106A5000AA021092AB021092AC021092AD021092F8 |
:106A6000EF051092EE050E94E31A862D9927EEE0BD |
:106A7000CDB7DEB70C94EB7AA3E1B0E0E2E4F5E346 |
:106A80000C94CB7A8091FC029091FD0220910F0230 |
:106A900030911002821B930B9093B8088093B70833 |
:106AA0008091190290911A0297FD07969C0153E07C |
:106AB000359527955A95E1F730937508209374081A |
:106AC000809117029091180297FD079643E09595E3 |
:106AD00087954A95E1F7909366088093650830930F |
:106AE000810820938008909378088093770880919C |
:106AF000B2089091B308AC01440F551F480F591FBD |
:106B000020910B0230910C02C901880F991F880F48 |
:106B1000991F820F931F820F931F480F591F57FF12 |
:106B200002C04D5F5F4F55954795559547955093DA |
:106B3000B3084093B2088091C2089091C308AC0199 |
:106B4000440F551F480F591F20910D0230910E021E |
:106B5000C901880F991F880F991F820F931F820FF9 |
:106B6000931F480F591F57FF02C04D5F5F4F559548 |
:106B70004795559547955093C3084093C208209177 |
:106B80000B0230910C02C901880F991F880F991FC1 |
:106B9000820F931F820F931F9C01442737FD40955E |
:106BA000542F8091DA029091DB02A091DC02B09127 |
:106BB000DD02820F931FA41FB51F8093DA0290930A |
:106BC000DB02A093DC02B093DD0220910D02309134 |
:106BD0000E02C901880F991F880F991F820F931FFA |
:106BE000820F931F9C01442737FD4095542F8091BD |
:106BF000D6029091D702A091D802B091D902820F0B |
:106C0000931FA41FB51F8093D6029093D702A09321 |
:106C1000D802B093D90280918A0890918B08209174 |
:106C20000B0230910C02820F931F90938B0880937C |
:106C30008A088091BA089091BB0820910D0230918A |
:106C40000E02820F931F9093BB088093BA08809125 |
:106C5000F2029091F30201969093F3028093F20274 |
:106C60008091FB059091FC052091F0023091F1029A |
:106C7000821B930B9C01442737FD4095542F809134 |
:106C8000D2029091D302A091D402B091D502820F8A |
:106C9000931FA41FB51F8093D2029093D302A09399 |
:106CA000D402B093D5028FEC80937A001092150134 |
:106CB0002091C2023091C3024091C4025091C5029A |
:106CC00029873A874B875C8729543B46414050408F |
:106CD0002CF028E43BE641E050E00DC089859A8520 |
:106CE000AB85BC85885B9449AE4FBF4F4CF428EB15 |
:106CF00034E94EEF5FEF2D833E834F83588708C002 |
:106D000089859A85AB85BC858D839E83AF83B88743 |
:106D10002091CA023091CB024091CC025091CD0219 |
:106D20002D873E874F87588B29543B464140504022 |
:106D30002CF028E43BE641E050E00DC08D859E85B7 |
:106D4000AF85B889885B9449AE4FBF4F4CF428EBB0 |
:106D500034E94EEF5FEF29833A834B835C8308C0AD |
:106D60008D859E85AF85B88989839A83AB83BC83E3 |
:106D7000A091B708B091B808BB8BAA8BFD01CF01D9 |
:106D8000AA2797FDA095BA2FA090BA02B090BB0297 |
:106D9000C090BC02D090BD02A80EB91ECA1EDB1E58 |
:106DA000A092BA02B092BB02C092BC02D092BD02C5 |
:106DB000E090BE08F090BF080091C0081091C10893 |
:106DC000E80EF91E0A1F1B1FE092BE08F092BF08D2 |
:106DD0000093C0081093C108F0917302F98BFF2350 |
:106DE00009F098C180917202882309F093C18091C3 |
:106DF000AE0886FF8FC18091650890916608AA272A |
:106E000097FDA095BA2FBC01CD0129813A814B8114 |
:106E10005C810E943C7A9B01AC0197FF04C0215029 |
:106E2000384F4F4F5F4F6BE05595479537952795F6 |
:106E30006A95D1F780916701682E77248824992478 |
:106E4000CA01B901A40193010E943C7ADC01CB0183 |
:106E500080930C0390930D03A0930E03B0930F0344 |
:106E6000B7FF04C08150904FAF4FBF4F1C012D01A1 |
:106E70003CE055944794379427943A95D1F7209263 |
:106E80000C0330920D0340920E0350920F03809139 |
:106E9000740890917508AA2797FDA095BA2FBC0198 |
:106EA000CD012D813E814F8158850E943C7A97FF0C |
:106EB00004C06150784F8F4F9F4F2BE09595879579 |
:106EC000779567952A95D1F7A40193010E943C7AA2 |
:106ED000DC01CB018093100390931103A093120364 |
:106EE000B0931303B7FF04C08150904FAF4FBF4F13 |
:106EF0009C01AD018CE055954795379527958A956E |
:106F0000D1F7209310033093110340931203509351 |
:106F1000130380910C0390910D0390935D0880936F |
:106F20005C08809110039091110390936108809305 |
:106F3000600822193309440955092093100330933E |
:106F400011034093120350931303E20EF31E041F28 |
:106F5000151FE092BE08F092BF080093C00810937E |
:106F6000C108809166018823B1F457FF04C02F5FE8 |
:106F70003F4F4F4F5F4F5595479537952795A21A2D |
:106F8000B30AC40AD50AA092BA02B092BB02C09258 |
:106F9000BC02D092BD022A893B8979010027F7FC07 |
:106FA0000095102F8091100390911103A09112036E |
:106FB000B0911303E80EF91E0A1F1B1FC801B70189 |
:106FC00029813A814B815C810E943C7A9B01AC0112 |
:106FD00097FF04C02150384F4F4F5F4FBBE055958E |
:106FE000479537952795BA95D1F780916801A82ED6 |
:106FF000BB24CC24DD24CA01B901A60195010E945D |
:107000003C7ADC01CB018093040390930503A093A9 |
:107010000603B0930703B7FF04C08150904FAF4FF2 |
:10702000BF4F3C014D01ACE09594879477946794F1 |
:10703000AA95D1F76092040370920503809206032B |
:1070400090920703C801B7012D813E814F81588579 |
:107050000E943C7A97FF04C06150784F8F4F9F4F3A |
:10706000FBE09595879577956795FA95D1F7A601F9 |
:1070700095010E943C7ADC01CB0180930803909338 |
:107080000903A0930A03B0930B03B7FF04C0815018 |
:10709000904FAF4FBF4FAC01BD01ECE075956795C8 |
:1070A00057954795EA95D1F7409308035093090304 |
:1070B00060930A0370930B032A893B8937FF03C04F |
:1070C000309521953F4F21343105E4F1D401C301BE |
:1070D00097FE07C0B095A095909581959F4FAF4FB3 |
:1070E000BF4F81389105A105B10584F4DB01CA01C8 |
:1070F00077FF07C0B095A095909581959F4FAF4FB2 |
:10710000BF4F81389105A105B105E4F081E080937E |
:10711000A60218C0109261081092600810925D08D3 |
:1071200010925C08109208031092090310920A034F |
:1071300010920B03109204031092050310920603A1 |
:10714000109207038091080390910903A0910A030C |
:10715000B0910B03BC01CD0124E630E040E050E0EB |
:107160000E94B07AE0900403F0900503E21AF30A5B |
:10717000F0927308E09272088091040390910503E5 |
:10718000A0910603B0910703BC01CD0124E630E0D5 |
:1071900040E050E00E94B07ADA01C9012091080372 |
:1071A000309109038C01021B130B109368080093A4 |
:1071B00067088091400190914101A0914201B091F6 |
:1071C0004301BC01CD0128E631E040E050E00E94DF |
:1071D0003C7A2091BE083091BF084091C008509180 |
:1071E000C108261737074807590764F0261B370BD5 |
:1071F000480B590B2093BE083093BF084093C0083A |
:107200005093C1082091BE083091BF084091C0083A |
:107210005091C10857FF0CC0260F371F481F591F38 |
:107220002093BE083093BF084093C0085093C10814 |
:1072300060916508709166086E0D7F1D9B01442763 |
:1072400037FD4095542F8091BE029091BF02A091CE |
:10725000C002B091C102820F931FA41FB51F80937B |
:10726000BE029093BF02A093C002B093C10280916E |
:10727000780290917902681B790BCB01AA2797FDC0 |
:10728000A095BA2F29853A854B855C85820F931F7F |
:10729000A41FB51F8093C2029093C302A093C4029F |
:1072A000B093C502C0908201D0908301E090840128 |
:1072B000F0908501C816D906EA06FB06C4F488EAF0 |
:1072C00091E6A0E0B0E08C199D09AE09BF0980935A |
:1072D000C2029093C302A093C402B093C5028093EC |
:1072E000BE029093BF02A093C002B093C1022227B6 |
:1072F0003327A9012C193D094E095F098091C2026B |
:107300009091C302A091C402B091C5028217930765 |
:10731000A407B507B4F4D701C601885A9146A04026 |
:10732000B0408093C2029093C302A093C402B09372 |
:10733000C5028093BE029093BF02A093C002B09397 |
:10734000C1026091740870917508600F711F9B01F4 |
:10735000442737FD4095542F8091C6029091C70273 |
:10736000A091C802B091C902820F931FA41FB51F3C |
:107370008093C6029093C702A093C802B093C9023B |
:107380008091760290917702681B790BCB01AA2736 |
:1073900097FDA095BA2F2D853E854F855889820F80 |
:1073A000931FA41FB51F8093CA029093CB02A09392 |
:1073B000CC02B093CD02E0908601F090870100915D |
:1073C000880110918901E816F9060A071B07C4F421 |
:1073D00088EA91E6A0E0B0E08E199F09A00BB10BFE |
:1073E0008093CA029093CB02A093CC02B093CD02BB |
:1073F0008093C6029093C702A093C802B093C902BB |
:1074000022273327A9012E193F09400B510B8091E8 |
:10741000CA029091CB02A091CC02B091CD0282170A |
:107420009307A407B507B4F4D801C701885A914659 |
:10743000A040B0408093CA029093CB02A093CC02AC |
:10744000B093CD028093C6029093C702A093C80266 |
:10745000B093C9028091BA029091BB02A091BC0284 |
:10746000B091BD028093CE029093CF02A093D00240 |
:10747000B093D1028091CA029091CB02A091CC022C |
:10748000B091CD028093EA029093EB02A093EC02BC |
:10749000B093ED028091C2029091C302A091C40208 |
:1074A000B091C5028093E2029093E302A093E402BC |
:1074B000B093E5028091C6029091C702A091C802E4 |
:1074C000B091C9028093E6029093E702A093E8028C |
:1074D000B093E9028091BE029091BF02A091C002D8 |
:1074E000B091C1028093DE029093DF02A093E0028C |
:1074F000B093E102809121019091220197FD0796BE |
:1075000033E0959587953A95E1F7909375088093C8 |
:10751000740880911F019091200197FD079623E048 |
:10752000959587952A95E1F790936608809365086D |
:1075300080911302909114020F9734F488E19CEF2C |
:1075400090937508809374088091130290911402AF |
:10755000079734F480E398EF90937508809374084C |
:107560008091130290911402815D974034F088EE6F |
:1075700093E0909375088093740880911302909122 |
:107580001402805E974034F080ED97E09093750888 |
:107590008093740880911102909112020F9734F435 |
:1075A00088E19CEF909366088093650880911102B2 |
:1075B00090911202079734F480E398EF9093660855 |
:1075C000809365088091110290911202815D97402D |
:1075D00034F088EE93E0909366088093650880917C |
:1075E000110290911202805E974034F080ED97E096 |
:1075F000909366088093650860917501662309F48D |
:10760000AEC04091210150912201809114039091CC |
:107610001503481B590B50931B0340931A032091E9 |
:10762000210130912201280F391F37FF02C02F5F3F |
:107630003F4F359527953093150320931403413818 |
:1076400051051CF080E890E005C040585F4F34F4CD |
:1076500080E89FEF90931B0380931A0340911F01D2 |
:10766000509120018091160390911703481B590BEC |
:10767000509319034093180320911F01309120016A |
:10768000280F391F37FF02C02F5F3F4F35952795D1 |
:107690003093170320931603413851051CF080E8FE |
:1076A00090E005C040585F4F34F480E89FEF90931E |
:1076B000190380931803462F552780911A03909140 |
:1076C0001B03849FB001859F700D949F700D112442 |
:1076D0009B0177FF02C0215F3F4FB4E035952795AE |
:1076E000BA95E1F78091740890917508820F931F05 |
:1076F00090937508809374088091180390911903F2 |
:10770000849F9001859F300D949F300D1124A90115 |
:1077100037FF02C0215F3F4FA4E035952795AA951A |
:10772000E1F78091650890916608820F931F90930E |
:107730006608809365088091210190912201860F4F |
:10774000971F909322018093210180911F019091B6 |
:107750002001840F951F9093200180931F010091B9 |
:1077600077081091780880915C0890915D08101658 |
:1077700011065CF59C0197FF04C022273327281BC4 |
:10778000390BC901AA2797FDA095BA2F2091660150 |
:10779000332744275527BC01CD010E943C7A9B0129 |
:1077A000AC0197FF04C0215C3F4F4F4F5F4FF6E0A5 |
:1077B0005595479537952795FA95D1F78091720899 |
:1077C00090917308820F931F27C097FF03C0909575 |
:1077D00081959F4FAA2797FDA095BA2F209166010A |
:1077E000332744275527BC01CD010E943C7A9B01D9 |
:1077F000AC0197FF04C0215C3F4F4F4F5F4FE6E065 |
:107800005595479537952795EA95D1F78091720858 |
:1078100090917308821B930B909373088093720866 |
:10782000E0908008F0908108809160089091610854 |
:107830001E141F045CF59C0197FF04C02227332708 |
:10784000281B390BC901AA2797FDA095BA2F2091B3 |
:107850006601332744275527BC01CD010E943C7A9D |
:107860009B01AC0197FF04C0215C3F4F4F4F5F4F1E |
:1078700076E055954795379527957A95D1F780917C |
:10788000670890916808820F931F27C097FF03C075 |
:10789000909581959F4FAA2797FDA095BA2F20918B |
:1078A0006601332744275527BC01CD010E943C7A4D |
:1078B0009B01AC0197FF04C0215C3F4F4F4F5F4FCE |
:1078C00066E055954795379527956A95D1F780914C |
:1078D000670890916808821B930B909368088093C7 |
:1078E00067088091AE0887FF44C03989332309F0C7 |
:1078F00040C0809172028823E1F541E0E41641E046 |
:10790000F4064CF080917408909175088E0D9F1DBF |
:10791000805091400DC050E0E5165FEFF50664F42D |
:1079200080917408909175088E0D9F1D80509F4F17 |
:10793000909375088093740881E0013018074CF02B |
:107940008091650890916608800F911F805091404A |
:107950000CC09FEF0030190764F480916508909186 |
:107960006608800F911F80509F4F90936608809308 |
:107970006508E2E1CD5E0C94E77A80918F0288235E |
:1079800029F5809157028C7F80935702809156028F |
:107990008F7D80935602A5EDB3E0EFE6F7E09BE024 |
:1079A0008091C801882309F48C938D918183128280 |
:1079B0009150389697FFF4CF8091C801882359F0F1 |
:1079C0008091C80181508093C80105C08091570201 |
:1079D00081608093570280913D02882319F01092B4 |
:1079E0003D0208958093410280913B028E7F8093F7 |
:1079F0003B0285EA8093BC000895882319F480E057 |
:107A000090E00895E82FFF27EE0FFF1FE053F84F97 |
:107A10008081918181589F4F8F3F910521F01CF00B |
:107A20008FEF90E004C097FF02C080E090E09927BC |
:107A30000895CF93DF93A1E9B2E0C0E6D6E057E026 |
:107A40008991E82FFF27EE0FFF1FE053F84F0190B9 |
:107A5000F081E02DE158FF4FEF3FF10521F01CF0E0 |
:107A6000EFEFF0E004C0F7FF02C0E0E0F0E08931A2 |
:107A700011F4EC931BC04C91242F3327E217F3072A |
:107A8000A9F0CF01821B930B97FD039695958795DF |
:107A900095958795242F280F2C93822F9927E817E7 |
:107AA000F90714F4215001C02F5F2C935150119607 |
:107AB00057FFC6CF80916A06883F38F0EFEFF0E0BD |
:107AC000E81BF109EF56FD4F808180937A01809188 |
:107AD0007A01882329F0843618F084E680937A01AD |
:107AE00080916C06883F38F0EFEFF0E0E81BF10979 |
:107AF000EF56FD4F80818093790180917901882331 |
:107B000029F0843618F084E6809379018091790613 |
:107B1000883F38F0EFEFF0E0E81BF109EF56FD4F3A |
:107B2000808180937401809174018B3010F48AE01D |
:107B300002C08F3F11F4809374018091A606883FA4 |
:107B400038F0EFEFF0E0E81BF109EF56FD4F8081D0 |
:107B500080938C0880918C08863010F485E002C0F8 |
:107B60008F3F11F480938C088091A806883F38F0ED |
:107B7000EFEFF0E0E81BF109EF56FD4F80818093B5 |
:107B8000B5088091B508863010F485E002C08F3FBB |
:107B900011F48093B50880919306873F19F44299B8 |
:107BA00005C006C0863F31F4439B02C08CE815C077 |
:107BB00086E413C0883F38F0EFEFF0E0E81BF109EE |
:107BC000EF56FD4F80818093890880918908893123 |
:107BD00010F488E102C08F3F11F4809389088091EE |
:107BE0009406873F19F4429905C006C0863F31F4D8 |
:107BF000439B02C08CE815C086E413C0883F38F070 |
:107C0000EFEFF0E0E81BF109EF56FD4F8081809324 |
:107C1000620880916208893110F488E102C08F3FC8 |
:107C200011F48093620880919506883F38F0EFEF59 |
:107C3000F0E0E81BF109EF56FD4F80818093920838 |
:107C400080919208893110F488E102C08F3F11F4CD |
:107C50008093920880916B060E94FD3C80936D0298 |
:107C600080916E06883F38F0EFEFF0E0E81BF109F5 |
:107C7000EF56FD4F80818093780180917006883F98 |
:107C800038F0EFEFF0E0E81BF109EF56FD4F80818F |
:107C90008093760180917806883F38F0EFEFF0E02E |
:107CA000E81BF109EF56FD4F8081809377018091A9 |
:107CB0007A06883F38F0EFEFF0E0E81BF109EF5665 |
:107CC000FD4F80818093730180917B06883F38F05F |
:107CD000EFEFF0E0E81BF109EF56FD4F8081809354 |
:107CE000750180917C06883F38F0EFEFF0E0E81BEB |
:107CF000F109EF56FD4F80818093720180917D06DE |
:107D0000883F38F0EFEFF0E0E81BF109EF56FD4F48 |
:107D100080818093710180918306883F38F0EFEF76 |
:107D2000F0E0E81BF109EF56FD4F808180936F0171 |
:107D300080918406883F38F0EFEFF0E0E81BF1090E |
:107D4000EF56FD4F808180936C0280918506883FBD |
:107D500038F0EFEFF0E0E81BF109EF56FD4F8081BE |
:107D600080936B0280918606883F38F0EFEFF0E059 |
:107D7000E81BF109EF56FD4F808180936A028091E4 |
:107D80008706883F38F0EFEFF0E0E81BF109EF5687 |
:107D9000FD4F8081809369028091A106883F38F071 |
:107DA000EFEFF0E0E81BF109EF56FD4F8081809383 |
:107DB00068028091A206883F38F0EFEFF0E0E81B00 |
:107DC000F109EF56FD4F8081809367028091A306F1 |
:107DD000883F38F0EFEFF0E0E81BF109EF56FD4F78 |
:107DE0008081809366028091A406883F38F0EFEF8F |
:107DF000F0E0E81BF109EF56FD4F808180936502AA |
:107E000080918806883F38F0EFEFF0E0E81BF10939 |
:107E1000EF56FD4F808180936D0180918C06883FE5 |
:107E200038F0EFEFF0E0E81BF109EF56FD4F8081ED |
:107E300080936C0180918906883F38F0EFEFF0E085 |
:107E4000E81BF109EF56FD4F808180936B01809113 |
:107E50008D06883F38F0EFEFF0E0E81BF109EF56B0 |
:107E6000FD4F808180936A0180919606883F38F0AB |
:107E7000EFEFF0E0E81BF109EF56FD4F80818093B2 |
:107E8000690180919906883F38F0EFEFF0E0E81B38 |
:107E9000F109EF56FD4F80818093680180919A0629 |
:107EA000883F38F0EFEFF0E0E81BF109EF56FD4FA7 |
:107EB00080818093670180919B06883F38F0EFEFC7 |
:107EC000F0E0E81BF109EF56FD4F808180936601D9 |
:107ED0008091C306883F38F0EFEFF0E0E81BF1092E |
:107EE000EF56FD4F80818093710890916C03992328 |
:107EF00021F080917108981720F0809171088823F3 |
:107F000011F490937108809168068093AE08809177 |
:107F1000CE06809391088091A006883F38F0EFEF5D |
:107F2000F0E0E81BF109EF56FD4F80818093650179 |
:107F30008091BC06883F38F0EFEFF0E0E81BF109D4 |
:107F4000EF56FD4F80818093C50880916F01282FE7 |
:107F500033272F5F3F4F8CE398E2B9010E947B7A71 |
:107F600070937C0160937B01809176068093B608C4 |
:107F70008091750680937908E091BE06EE23D9F1D1 |
:107F800081E080936402FF27EE0FFF1FE053F84F5C |
:107F900080819181805C9F4F14F4109264028091E3 |
:107FA0007D01209164028217B1F0833088F422238E |
:107FB00019F08CED95E002C088EC90E09093ED0113 |
:107FC0008093EC0185E080937A0220937D0103C0C9 |
:107FD000815080937D01809105099091060997FF5A |
:107FE0000FC080916402882359F08091D00380688B |
:107FF0008093D00305C0E09364028AE080937D0102 |
:10800000809105099091060997FF1DC080918F020C |
:108010008823C9F0809164028823A9F080910B0124 |
:1080200090910C018F5F9F4F71F488E99AE39093D0 |
:10803000ED018093EC0180E094EA90930C01809331 |
:108040000B011092640280916402882321F08091D8 |
:108050005602816003C0809156028E7F8093560243 |
:10806000DF91CF91089580917106882301F5609189 |
:1080700074027091750277FF02C06D5F7F4F759536 |
:1080800067957595679540912301509124018091E2 |
:108090000201282F3327649FC001659F900D749FB4 |
:1080A000900D1124B9010E94677ACB0101C0992774 |
:1080B0009093810180938001809180019091810152 |
:1080C0008734910538F486E490E0909381018093A1 |
:1080D000800108958F3A910530F08FEA90E09093F7 |
:1080E0008101809380010895A8E1B0E0EAE7F0E41F |
:1080F0000C94CB7A0E943C35809157029927847169 |
:108100009070892B91F58091CF0682FF27C08091D6 |
:108110007402909175020097F1F002E088359007A3 |
:10812000D4F49C0197FF02C02D5F3F4F35952795F2 |
:1081300035952795809180069927289FA001299F32 |
:10814000500D389F500D1124CA0164E670E00E9462 |
:108150007B7ACB0106C08DE290E003C0809180065F |
:1081600099279093550280935402209152023091A6 |
:10817000530255E72033350759F410929B021092B1 |
:108180009A0280917908992790935502809354021E |
:1081900060919A0270919B027A8369838091790839 |
:1081A00099270A966817790714F49A83898380912E |
:1081B0009002843608F062C08091560282FD5EC053 |
:1081C0008091300390913103009731F001979093A3 |
:1081D0003103809330030BC010928F0290935902A9 |
:1081E00080935802809157028D7E80935702289A7F |
:1081F0008091580290915902895E9340E0F18091FC |
:1082000049098536C0F180915402909155029A83B4 |
:1082100089838091570280618093570280915C0628 |
:10822000A82FBB27AA0FBB1FFD01EA5EF74F1182E3 |
:10823000108280915D06282F3327220F331FC9013A |
:108240008A5E974FFC0111821082A053B84F11969D |
:108250001C921E922053384FD90111961C921E92E7 |
:1082600080915F06E82FFF27EE0FFF1FE053F84FC6 |
:108270001182108251C410928F024EC480919002DC |
:108280008D3808F41FC4809157028F7E8093570267 |
:108290009091810682E3989FC0011124909331034D |
:1082A00080933003E981FA81B9978CF080918F0235 |
:1082B000882369F08091580290915902FFEF8F3F17 |
:1082C0009F0729F0019690935902809358022091BC |
:1082D0005802309159022F3F310509F030F51092C4 |
:1082E000B2021092B3021092B4021092B502109230 |
:1082F000AE021092AF021092B0021092B102109230 |
:108300001C0310921D0310921E0310921F03109263 |
:10831000BA021092BB021092BC021092BD02809170 |
:1083200056028062809356024DC08091570282604F |
:10833000809357028091560285FF44C08091F801D6 |
:108340009091F901A091FA01B091FB018739910553 |
:10835000A105B1058CF480918A0290918B02A091C5 |
:108360008C02B0918D02825A9E4FAF4FBF4F24F0C6 |
:108370008091AE0880FD05C0809156028F71809378 |
:1083800056021092B2021092B3021092B4021092EE |
:10839000B5021092AE021092AF021092B00210928B |
:1083A000B1021092BA021092BB021092BC0210925B |
:1083B000BD02295E334030F088EE93E0909359027D |
:1083C0008093580280915E06E82FFF27EE0FFF1F73 |
:1083D000E053F84F80819181813591050CF434C1CF |
:1083E00020918F02222309F02FC180915F06E82F90 |
:1083F000FF27EE0FFF1FE053F84F808191818C34EF |
:1084000091050CF4FFC0809132038F5F809332039B |
:10841000893C08F419C1209332031092590210923A |
:10842000580230915C06E32FFF27EE0FFF1FE05349 |
:10843000F84F8081918187349105B4F480915D0675 |
:10844000E82FFF27EE0FFF1FE053F84F8081918147 |
:108450000190F081E02DF7FF03C0F095E195FF4F0B |
:10846000E734F1050CF478C041E020915D06A22FBD |
:10847000BB27AA0FBB1FA053B84F8D919C9111979A |
:108480008734910544F0E32FFF27EE0FFF1FE053E1 |
:10849000F84F808191818D919C918734910574F082 |
:1084A00080915C06E82FFF27EE0FFF1FE053F84F87 |
:1084B00080819181873491050CF042E0E22FFF2703 |
:1084C000EE0FFF1FE053F84F8081918186349105B4 |
:1084D00074F480915C06E82FFF27EE0FFF1FE05336 |
:1084E000F84F80819181873491050CF043E0E22FB1 |
:1084F000FF27EE0FFF1FE053F84F808191818A5BC9 |
:108500009F4F74F480915C06E82FFF27EE0FFF1F4A |
:10851000E053F84F80819181873491050CF044E05D |
:10852000E22FFF27EE0FFF1FE053F84F808191816C |
:108530008A5B9F4F74F480915C06E82FFF27EE0F53 |
:10854000FF1FE053F84F80819181863491050CF430 |
:1085500045E0842F0E94212880915D06E82FFF27A7 |
:10856000EE0FFF1FE053F84F808191810190F08161 |
:10857000E02DF7FF03C0F095E195FF4F7E97CCF417 |
:1085800080915C06E82FFF27EE0FFF1FE053F84FA6 |
:10859000808191818A5B9F4F64F481E08093EB033B |
:1085A00010927B0288EE93E09093ED018093EC01B2 |
:1085B0004BC0809101010E94CE2780E00E942706D7 |
:1085C000809182060E94B8758091AE0880FF10C02D |
:1085D0008091190190911A01875B934038F4809142 |
:1085E000190190911A018E5E924010F40E941B1B9B |
:1085F00081E00E94293280937B0281E08093EA012E |
:10860000579A19C080819181855B9F4FDCF48091DE |
:1086100032038F5F80933203893CB0F020938F0246 |
:1086200020933203109259021092580282E00E9465 |
:10863000293280937B0268E770E0809101010E94FB |
:108640004F3102C02093320380915E06E82FFF274E |
:10865000EE0FFF1FE053F84F808191818C599F4F9F |
:108660000CF029C22091BF06E22FFF27EF77F070B0 |
:10867000EE0FFF1FEA5EF74F80819181069714F09D |
:1086800084E606C0808191818B5F9F4F1CF48CE94A |
:108690008093350380918F02E0915F06882309F073 |
:1086A00058C1FF27EE0FFF1FE053F84F80819181E3 |
:1086B0008C599F4F9CF48091CF0683FD0BC0E22F15 |
:1086C000FF27EE0FFF1FE053F84F80819181855BFC |
:1086D0009F4FDCF08091BF068823B9F08091CF06D0 |
:1086E00083FF34C18091BF06E82FFF27EE0FFF1FE5 |
:1086F000E053F84F80819181875F9F4F0CF426C132 |
:1087000080913503843609F021C180917B02882352 |
:1087100029F08091570288608093570280911B0155 |
:1087200090911C01A0911D01B0911E018093FD0547 |
:108730009093FE05A093FF05B09300061092F801F8 |
:108740001092F9011092FA011092FB0110928A0224 |
:1087500010928B0210928C0210928D0210920502E0 |
:1087600010920602109207021092080280915C0695 |
:10877000E82FFF27EE0FFF1FE053F84F8081918114 |
:108780008D599F4FACF480915D06E82FFF27EE0FC7 |
:10879000FF1FE053F84F808191810190F081E02D1F |
:1087A000F7FF03C0F095E195FF4FE436F10534F48F |
:1087B0008091BF06882311F48093330380913303A3 |
:1087C0008F5F809333038E3F08F458C18091B708C0 |
:1087D0009091B80897FF03C0909581959F4F81971E |
:1087E000B4F4809174089091750897FF03C0909538 |
:1087F00081959F4F45975CF480916508909166083C |
:1088000097FF03C0909581959F4F459714F0109264 |
:108810007B02109233038091D003882309F093C028 |
:1088200080917B02882309F48EC080917103882394 |
:1088300009F089C081E090E090935902809358023A |
:1088400081E080938F0210921C0310921D031092FE |
:108850001E0310921F031092BA021092BB021092D4 |
:10886000BC021092BD021092B6021092B702109292 |
:10887000B8021092B90280917706E82EFF240027F3 |
:1088800011278091B2089091B3089C01442737FDCD |
:108890004095542FC801B7010E943C7ADC01CB01FE |
:1088A0008093CA029093CB02A093CC02B093CD02E6 |
:1088B0008091C2089091C3089C01442737FD4095E0 |
:1088C000542FC801B7010E943C7ADC01CB01809390 |
:1088D000C2029093C302A093C402B093C5028091D8 |
:1088E000EA029091EB02A091EC02B091ED0280932C |
:1088F000C6029093C702A093C802B093C9028091A8 |
:10890000E2029091E302A091E402B091E50280932B |
:10891000BE029093BF02A093C002B093C102109216 |
:10892000B2021092B3021092B4021092B5021092E9 |
:10893000AE021092AF021092B0021092B10284E621 |
:1089400080937A029BC08CED95E091C01092330326 |
:1089500095C0FF27EE0FFF1FE053F84F80819181F4 |
:10896000853691059CF08091CF0683FD0BC0E22FE8 |
:10897000FF27EE0FFF1FE053F84F80819181855B49 |
:108980009F4FDCF08091BF068823B9F08091CF061D |
:1089900083FF72C08091BF06E82FFF27EE0FFF1FF5 |
:1089A000E053F84F808191818E5C9F4F0CF064C042 |
:1089B000809135038C3909F05FC080915C06E82F07 |
:1089C000FF27EE0FFF1FE053F84F808191818D59F3 |
:1089D0009F4FACF480915D06E82FFF27EE0FFF1F3D |
:1089E000E053F84F808191810190F081E02DF7FFF5 |
:1089F00003C0F095E195FF4FE436F1053CF480911A |
:108A0000BF06882319F48093340318C01092B20271 |
:108A10001092B3021092B4021092B5021092AE02FC |
:108A20001092AF021092B0021092B1021092A10205 |
:108A30001092A00210929F0210929E028091340325 |
:108A40008F5F809334038B3F70F010928F021092EF |
:108A500034031092590210925802809156028F717D |
:108A6000809356020BC0843649F48CEA9DE09093C3 |
:108A7000ED018093EC0102C0109234032091520268 |
:108A80003091530273E0283E370708F045C08091CB |
:108A90000202909103028B569F4F1CF02F5F3F4FB5 |
:108AA00005C021153105C1F12150304030935302EA |
:108AB0002093520231C0109235031092530210924B |
:108AC00052022AC02E5E324038F18091CD0890913A |
:108AD000CE088059914000F580918A0290918B02D6 |
:108AE000A0918C02B0918D028C5D9540A040B04069 |
:108AF0009CF480E395E79093530280935202809117 |
:108B00005802909159028A5E934030F089EE93E0CA |
:108B1000909359028093580280913E018150809336 |
:108B20003E0180913E018F3F21F08091570284FFEA |
:108B3000DFC30E94193DB090720680913E03909170 |
:108B40003F039C01220F331F280F391FC0905C0682 |
:108B5000AC2DBB27AA0FBB1FFD01E053F84F4B2DD7 |
:108B6000552780819181849FB001859F700D949FCE |
:108B7000700D1124260F371F37FF02C02D5F3F4FA6 |
:108B8000B9017595679575956795AA5EB74F809100 |
:108B90007306082F11278D919C91809FD001819F92 |
:108BA000B00D909FB00D11246A0F7B1F70933F038F |
:108BB00060933E0380914003909141039C01220FFA |
:108BC000331F280F391FD0905D06AD2DBB27AA0F8C |
:108BD000BB1FFD01E053F84F80819181849FF0011C |
:108BE000859FF00D949FF00D11242E0F3F1F37FF2E |
:108BF00002C02D5F3F4FA901559547955595479563 |
:108C0000AA5EB74F8D919C91809F7001819FF00C5F |
:108C1000909FF00C11244E0D5F1D50934103409323 |
:108C2000400380916402882309F448C0CB0177FD9A |
:108C30000396DC01B595A795B595A795CA0157FD93 |
:108C40000396FC01F595E795F595E7958091A001D0 |
:108C5000682F772767FD70956A9F90016B9F300D95 |
:108C60007A9F300D112480917303482F552747FDBB |
:108C700050954E9FC0014F9F900D5E9F900D112407 |
:108C8000280F391F37FF02C0295F3F4F03E035959A |
:108C900027950A95E1F73093A1022093A0026E9FD9 |
:108CA00090016F9F300D7E9F300D11244A9FC001AF |
:108CB0004B9F900D5A9F900D11243FC08091BD068F |
:108CC000E82FFF27EA5BFE4F86818093A001908109 |
:108CD00090937303A82FBB27A7FDB095A69F900183 |
:108CE000A79F300DB69F300D1124E92FFF27E7FD18 |
:108CF000F095E49FC001E59F900DF49F900D112425 |
:108D0000280F391F37FF02C0295F3F4F13E0359509 |
:108D100027951A95E1F73093A1022093A002A49F12 |
:108D20009001A59F300DB49F300D1124E69FC00126 |
:108D3000E79F900DF69F900D1124281B390B37FFEC |
:108D400002C0295F3F4F43E0359527954A95E1F7EB |
:108D500030939F0220939E0280915F06E82FFF27A9 |
:108D6000EE0FFF1FE053F84F808191819095819520 |
:108D70009F4F90939D0280939C028530910514F043 |
:108D8000049705C00FEF8C3F900734F4049690933E |
:108D90009D0280939C0204C010929D0210929C023E |
:108DA00080915202909153028150924078F18091CB |
:108DB000A0029091A10297FD079623E095958795D3 |
:108DC0002A95E1F79093A1028093A00280919E02E0 |
:108DD00090919F0297FD079603E0959587950A95D8 |
:108DE000E1F790939F0280939E021092B20210923C |
:108DF000B3021092B4021092B5021092AE02109219 |
:108E0000AF021092B0021092B10243C080915F0392 |
:108E1000882309F43EC0282F33278091A002909127 |
:108E2000A10297FD079613E0959587951A95E1F7AE |
:108E3000289FA001299F500D389F500D1124CA0171 |
:108E400057FD0F96B4E095958795BA95E1F7909305 |
:108E5000A1028093A00280919E0290919F0297FDB3 |
:108E60000796A3E095958795AA95E1F7289FB0010D |
:108E7000299F700D389F700D1124CB0177FD0F963F |
:108E8000F4E095958795FA95E1F790939F0280938A |
:108E90009E028090A0029090A10280916203909126 |
:108EA0006303881A990A9092A1028092A00200910D |
:108EB0009E0210919F028091600390916103081BB4 |
:108EC000190B10939F0200939E0280915E06E82F7B |
:108ED000FF27EE0FFF1FE053F84FE080F1808FE790 |
:108EE00090E0E80EF91EF0929B02E0929A028091C7 |
:108EF00074019927AA2797FDA095BA2FBC01CD012F |
:108F00000E94B079DC01CB0120E030E040E251E486 |
:108F1000BC01CD010E941E79DC01CB01BC01CD0159 |
:108F20000E948279DC01CB018093BC08809173019F |
:108F300080939308809172019927AA2797FDA095A5 |
:108F4000BA2FBC01CD010E94B079DC01CB0120E039 |
:108F500030E040E251E4BC01CD010E941E79DC0109 |
:108F6000CB01BC01CD010E948279DC01CB01809351 |
:108F70006C0880917101809382088091F70380FFD3 |
:108F800059C08091C508813808F454C08091F0031D |
:108F9000992787FD90952B2D3327829FD001839FA2 |
:108FA000B00D929FB00D11248A0E9B1E9092A102CB |
:108FB0008092A0028091F103992787FD9095829F6E |
:108FC000F001839FF00D929FF00D11240E0F1F1FD3 |
:108FD00010939F0200939E028091F203282F332763 |
:108FE00027FD309580919C0290919D02820F931FE6 |
:108FF00090939D0280939C028091F403282F332745 |
:1090000027FD309580916D069927289F8001299F23 |
:10901000100D389F100D1124109345010093440149 |
:109020008091F30399278E159F0524F490939B025A |
:1090300080939A0280919A0290919B0297FF04C0BC |
:1090400010929B0210929A028091AE0882FF02C099 |
:10905000109293084091A0025091A102CA0157FDBD |
:1090600003969C01359527953595279537FF03C0C5 |
:10907000309521953F4F80915C0290915D0282175F |
:109080009307B4F4CA0157FF03C0909581959F4F91 |
:1090900097FD0396959587959595879590935D0295 |
:1090A00080935C028536910544F084E690E001C02F |
:1090B000019790935D0280935C0240919E025091D3 |
:1090C0009F02CA0157FD03969C013595279535955A |
:1090D000279537FF03C0309521953F4F80915A0265 |
:1090E00090915B0282179307B4F4CA0157FF03C043 |
:1090F000909581959F4F97FD0396959587959595AA |
:10910000879590935B0280935A028536910544F0CF |
:1091100084E690E001C0019790935B0280935A022D |
:109120008091570284FF08C010925D0210925C0289 |
:1091300010925B0210925A02ED2DFF27EE0FFF1FD7 |
:10914000E053F84F40919706242F33278081918177 |
:109150002817390744F48091CC0682FF04C081E0CF |
:109160008093710213C0ED2DFF27EE0FFF1FE05318 |
:10917000F84F842F992720919806821B910920810E |
:1091800031812817390714F41092710240915D065D |
:10919000E42FFF27EE0FFF1FE053F84F5091970683 |
:1091A000852F992722273327281B390B808191810E |
:1091B0008217930744F48091CC0683FF04C081E0BA |
:1091C0008093700216C080917002882391F0E42F82 |
:1091D000FF27EE0FFF1FE053F84F80919806992765 |
:1091E000851B9109208131818217930714F4109215 |
:1091F0007002EC2DFF27EE0FFF1FE053F84F409158 |
:109200009706242F3327808191812817390744F44A |
:109210008091CC0680FF04C081E080936E0217C06D |
:1092200080916E02882399F0EC2DFF27EE0FFF1F2F |
:10923000E053F84F842F992720919806821B9109BB |
:10924000208131812817390714F410926E02409161 |
:109250005C06E42FFF27EE0FFF1FE053F84F5091FD |
:109260009706852F992722273327281B390B8081C2 |
:1092700091818217930744F48091CC0681FF04C04A |
:1092800081E080936F0216C080916F02882391F075 |
:10929000E42FFF27EE0FFF1FE053F84F8091980651 |
:1092A0009927851B9109208131818217930714F436 |
:1092B00010926F0280917102882319F480917002DC |
:1092C000811181E08093720280916E02882321F4E3 |
:1092D00080916F02882351F081E080937302109295 |
:1092E0007202109271021092700202C08093730297 |
:1092F00080917202882321F480917302882369F09F |
:1093000080919606992729813A818217930714F450 |
:109310009A83898381E08093A602809156029927DF |
:109320009C012470307082FF31C080916203909163 |
:109330006303909581959F4F9093A1028093A00223 |
:109340008091600390916103909581959F4F9093D8 |
:109350009F0280939E028091800190918101909361 |
:109360009B0280939A0210929D0210929C0280911F |
:10937000AE088B778B668093AE08809191088C7BCA |
:109380008093910888EC80936D021EC080915702F3 |
:1093900084FF1AC030939D0220939C023093A10257 |
:1093A0002093A00230939F0220939E029AE590930F |
:1093B000BC0888E78093930890936C088093820898 |
:1093C0001092720210927302809185089091860823 |
:1093D000A0918708B09188082091EA023091EB02B1 |
:1093E0004091EC025091ED02820F931FA41FB51F14 |
:1093F0008093850890938608A0938708B093880887 |
:1094000080918D0890918E08A0918F08B09190085E |
:10941000E090E202F090E3020091E4021091E50294 |
:10942000EB82FC820D831E838E0D9F1DA01FB11F3A |
:1094300080938D0890938E08A0938F08B093900826 |
:1094400080917A0890917B08A0917C08B0917D086A |
:10945000E090E602F090E7020091E8021091E90244 |
:10946000EF82F88609871A878E0D9F1DA01FB11FF6 |
:1094700080937A0890937B08A0937C08B0937D0832 |
:1094800080916D0890916E08A0916F08B09170085E |
:10949000E090DE02F090DF020091E0021091E10224 |
:1094A000EB86FC860D871E878E0D9F1DA01FB11FAA |
:1094B00080936D0890936E08A0936F08B093700826 |
:1094C000F0907302FF86FF2029F4809172028823B6 |
:1094D00009F460C01092DA021092DB021092DC02F2 |
:1094E0001092DD021092D6021092D7021092D8028A |
:1094F0001092D9021092850810928608109287085F |
:109500001092880810928D0810928E0810928F0881 |
:109510001092900810927A0810927B0810927C08A2 |
:1095200010927D0810926D0810926E0810926F08CC |
:10953000109270088091CA029091CB02A091CC0247 |
:10954000B091CD028093C6029093C702A093C80247 |
:10955000B093C9028091C2029091C302A091C4024B |
:10956000B091C5028093BE029093BF02A093C00247 |
:10957000B093C10210920102109200021092770281 |
:109580001092760210927902109278020F850023D1 |
:1095900009F0D0C180917202882309F0CBC180917B |
:1095A000FB059091FC05815092402CF480918F0234 |
:1095B000882309F4BFC190903E09A09077062090BF |
:1095C000B2083090B3084090C2085090C3081914F4 |
:1095D0000CF0BBC0BB24CC24DD24CA01B901A60118 |
:1095E00095010E94B07A79018A01809107099091D2 |
:1095F0000809281A390AC101AA2797FDA095BA2F90 |
:10960000E81AF90A0A0B1B0B6B817C818D819E8104 |
:10961000A60195010E94B07A59016A018091090959 |
:1096200090910A09481A590AC201AA2797FDA095E4 |
:10963000BA2FA81AB90ACA0ADB0A292C332427FC34 |
:109640003094432C532CC801B701A20191010E9410 |
:109650003C7A97FF04C061507E4F8F4F9F4F3B0174 |
:109660004C0109E095948794779467940A95D1F713 |
:10967000C601B501A20191010E943C7A97FF04C086 |
:1096800061507E4F8F4F9F4F5B016C0119E0D59465 |
:10969000C794B794A7941A95D1F780915C029091E2 |
:1096A0005D02813491053CF480915A0290915B02F5 |
:1096B00081349105D4F0D401C30197FE03C0019613 |
:1096C000A11DB11D3C014D01959487947794679439 |
:1096D000D601C501D7FE03C00196A11DB11D5C01D5 |
:1096E0006D01D594C794B794A79480914009282F11 |
:1096F000332727FD3095432F532F2615370548056F |
:10970000590514F439014A01992787FD90959095E0 |
:1097100081959F4FAA2797FDA095BA2F68167906C5 |
:109720008A069B0614F43C014D012A153B054C05A5 |
:109730005D0514F459016A01A816B906CA06DB06CC |
:109740000CF0D0C05C016D01CDC0EA2CFF240027D5 |
:109750001127CA01B901A80197010E94B07A390105 |
:109760004A01C101AA2797FDA095BA2F681A790A64 |
:109770008A0A9B0A6B817C818D819E81A801970159 |
:109780000E94B07A59016A01C201AA2797FDA095EB |
:10979000BA2FA81AB90ACA0ADB0AD401C30197FE74 |
:1097A00003C00F96A11DB11D3C014D01F4E095943D |
:1097B000879477946794FA95D1F7D601C501D7FEBF |
:1097C00003C00F96A11DB11D5C016D01E4E0D594AD |
:1097D000C794B794A794EA95D1F780915C029091D1 |
:1097E0005D02813491053CF480915A0290915B02B4 |
:1097F00081349105A4F0C401B30123E030E040E0DE |
:1098000050E00E94B07A39014A01C601B50123E057 |
:1098100030E040E050E00E94B07A59016A01809146 |
:109820005F06E82FFF27EE0FFF1FE053F84F808100 |
:1098300091810190F081E02DF7FF03C0F095E19553 |
:10984000FF4F7A97A4F0C401B30123E030E040E079 |
:1098500050E00E94B07A39014A01C601B50123E007 |
:1098600030E040E050E00E94B07A59016A0189E19D |
:1098700080938C0121E262167104810491042CF022 |
:1098800070E2672E712C812C912C30EE63163FEF25 |
:1098900073063FEF83063FEF930644F460EE662EB7 |
:1098A0006FEF762E6FEF862E6FEF962E41E2A416A5 |
:1098B000B104C104D1042CF050E2A52EB12CC12C6E |
:1098C000D12C50EEA5165FEFB5065FEFC5065FEF32 |
:1098D000D50644F440EEA42E4FEFB42E4FEFC42E25 |
:1098E0004FEFD42E8091CA029091CB02A091CC026E |
:1098F000B091CD0286199709A809B9098093CA02C7 |
:109900009093CB02A093CC02B093CD028091C2027F |
:109910009091C302A091C402B091C5028A199B091B |
:10992000AC09BD098093C2029093C302A093C40204 |
:10993000B093C50280910002909101028F3F910582 |
:1099400009F008F4C4C56F85662309F04EC58091FF |
:109950007202882309F049C58091A602882309F084 |
:1099600044C570919F06788B772309F43EC580919A |
:10997000850890918608A0918708B0918808B7FF64 |
:1099800004C081509F4FAF4FBF4FE92EFA2E0B2FCF |
:10999000112707FD1A95E0928508F092860800933A |
:1099A00087081093880880918D0890918E08A09167 |
:1099B0008F08B0919008B7FF04C081509F4FAF4F00 |
:1099C000BF4F892F9A2FAB2FBB27A7FDBA95898B45 |
:1099D0009A8BAB8BBC8B80938D0890938E08A09351 |
:1099E0008F08B093900880917706A82EBB24CC24D2 |
:1099F000DD242091DA023091DB024091DC025091AB |
:109A0000DD02C601B5010E943C7A97FF04C0615097 |
:109A10007F4F8F4F9F4F672E782E892E992487FC7A |
:109A20009A946092DA027092DB028092DC02909249 |
:109A3000DD022091D6023091D7024091D802509198 |
:109A4000D902C601B5010E943C7A97FF04C061505B |
:109A50007F4F8F4F9F4F272E382E492E552447FC7E |
:109A60005A942092D6023092D7024092D802509255 |
:109A7000D9028091D2029091D302A091D402B091E8 |
:109A8000D502B7FF04C081509F4FAF4FBF4F892F02 |
:109A90009A2FAB2FBB27A7FDBA958093D202909344 |
:109AA000D302A093D402B093D502D801C70186197E |
:109AB0009709A809B9098093280390932903A093D3 |
:109AC0002A03B0932B0320919E06E22EFF24002749 |
:109AD0001127BC01CD01A80197010E94B07A59015C |
:109AE0006A01209336033093370340933803509331 |
:109AF000390389899A89AB89BC8982199309A40998 |
:109B0000B50980932C0390932D03A0932E03B0935B |
:109B10002F03BC01CD01A80197010E94B07A2093C8 |
:109B20003A0330933B0340933C0350933D03D601EB |
:109B3000C501D7FE04C081509F4FAF4FBF4F892F43 |
:109B40009A2FAB2FBB27A7FDBA95909377028093EE |
:109B5000760257FF04C021503F4F4F4F5F4FBB2746 |
:109B600057FDBA95A52F942F832F90937902809358 |
:109B7000780280915C0290915D0281349105DCF461 |
:109B800080915A0290915B0281349105A4F48091F6 |
:109B90005F06E82FFF27EE0FFF1FE053F84F80818D |
:109BA00091810190F081E02DF7FF03C0F095E195E0 |
:109BB000FF4F7A97E4F080913E098F3FC1F4809186 |
:109BC00076029091770297FD0196959587959093EF |
:109BD000770280937602809178029091790297FDC6 |
:109BE000019695958795909379028093780280915C |
:109BF0007A0890917B08A0917C08B0917D08B7FF0E |
:109C000004C081509F4FAF4FBF4F892F9A2FAB2F6A |
:109C1000BB27A7FDBA9580937A0890937B08A09301 |
:109C20007C08B0937D0880916D0890916E08A0919A |
:109C30006F08B0917008B7FF04C081509F4FAF4FBD |
:109C4000BF4F892F9A2FAB2FBB27A7FDBA958093C3 |
:109C50006D0890936E08A0936F08B0937008809180 |
:109C6000EA029091EB02A091EC02B091ED022F81FB |
:109C7000388549855A85281B390B4A0B5B0B209385 |
:109C800020033093210340932203509323038091B8 |
:109C9000E2029091E302A091E402B091E502EB842C |
:109CA000FC840D851E85E81AF90A0A0B1B0BE0924D |
:109CB0002403F09225030093260310932703209397 |
:109CC00028033093290340932A0350932B03E092F7 |
:109CD0002C03F0922D0300932E0310932F038091F9 |
:109CE000C6029091C702A091C802B091C902821B1E |
:109CF000930BA40BB50B8093C6029093C702A0935D |
:109D0000C802B093C9028091BE029091BF02A09197 |
:109D1000C002B091C1028E199F09A00BB10B8093B4 |
:109D2000BE029093BF02A093C002B093C102888983 |
:109D30008823E1F02091A4023091A5022138310559 |
:109D40004CF08091FC029091FD0201969093FD02EF |
:109D50008093FC0220583F4F4CF48091FC0290917C |
:109D6000FD0201979093FD028093FC021092A502E0 |
:109D70001092A40281E090E0909343038093420309 |
:109D8000E0902803F090290300912A0310912B03FF |
:109D9000D801C70117FF07C088279927DC018E1952 |
:109DA0009F09A00BB10B81509240A040B04034F00D |
:109DB00084E090E0909343038093420380914803B2 |
:109DC00090914903A0914A03B0914B0320918508DB |
:109DD000309186084091870850918808821B930B28 |
:109DE000A40BB50B815E914BAF4FBF4F8F539C4976 |
:109DF000A040B04028F080913F0989310CF4FFC0A9 |
:109E000021E0E21620E1F20620E0020720E012073E |
:109E10000CF473C080914403882309F46AC0D8010C |
:109E2000C70117FF07C088279927DC018E199F09F2 |
:109E3000A00BB10B9C01AD01B7FF04C021503E4FF8 |
:109E40004F4F5F4FF9E05595479537952795FA9510 |
:109E5000D1F78091420390914303820F931F909317 |
:109E6000430380934203D801C70117FF03C007963D |
:109E7000A11DB11DE3E0B595A79597958795EA9546 |
:109E8000D1F78093360390933703A0933803B093B0 |
:109E9000390389589341A040B04064F088E893E1C9 |
:109EA000A0E0B0E08093360390933703A09338038B |
:109EB000B093390320913603309137034091380332 |
:109EC0005091390357FF04C021503F4F4F4F5F4F10 |
:109ED000232F342F452F552747FD5A958091760221 |
:109EE00090917702820F931F90937702809376026E |
:109EF00006C081E08093440302C01092440340E016 |
:109F0000E41640EFF4064FEF04074FEF14070CF090 |
:109F100073C080914503882309F46AC0D801C70142 |
:109F200017FF07C088279927DC018E199F09A00B0E |
:109F3000B10B9C01AD01B7FF04C021503E4F4F4F04 |
:109F40005F4F69E055954795379527956A95D1F705 |
:109F50008091420390914303820F931F9093430398 |
:109F600080934203D801C70117FF03C00796A11DC4 |
:109F7000B11D23E0B595A795979587952A95D1F7BB |
:109F80008093360390933703A0933803B09339033B |
:109F900088579C4EAF4FBF4F64F488E79CEEAFEFFD |
:109FA000BFEF8093360390933703A0933803B093A9 |
:109FB0003903209136033091370340913803509193 |
:109FC000390357FF04C021503F4F4F4F5F4F232F9E |
:109FD000342F452F552747FD5A9580917602909151 |
:109FE0007702820F931F909377028093760211C0BD |
:109FF00081E0809345030DC0109245030AC0109282 |
:10A0000043031092420384E690E090938B01809387 |
:10A010008A016889262F3327809142039091430358 |
:10A020002817390724F430934303209342031091F7 |
:10A030003F09112379F0212F332727FD3095809197 |
:10A040004203909143032817390724F430934303C4 |
:10A0500020934203409128035091290360912A03E1 |
:10A0600070912B03413851056105710574F08091A1 |
:10A070000003909101032091420330914303820F2A |
:10A08000931F909301038093000340585F4F6F4FDD |
:10A090007F4F74F48091000390910103209142035B |
:10A0A00030914303821B930B909301038093000331 |
:10A0B00081E090E09093430380934203C0902C038F |
:10A0C000D0902D03E0902E03F0902F03D701C6010E |
:10A0D000F7FE07C088279927DC018C199D09AE0976 |
:10A0E000BF0981509240A040B04034F084E090E03D |
:10A0F000909343038093420380914C0390914D03CE |
:10A10000A0914E03B0914F0320918D0830918E089D |
:10A1100040918F0850919008821B930BA40BB50BB4 |
:10A12000815E914BAF4FBF4F8F539C49A040B040D1 |
:10A1300018F019310CF4FFC001E0C01600E1D006A0 |
:10A1400000E0E00600E0F0060CF473C080914603E6 |
:10A15000882309F46AC0D701C601F7FE07C0882723 |
:10A160009927DC018C199D09AE09BF099C01AD013D |
:10A17000B7FF04C021503E4F4F4F5F4F09E0559548 |
:10A180004795379527950A95D1F78091420390918D |
:10A190004303820F931F9093430380934203D7019D |
:10A1A000C601F7FE03C00796A11DB11D13E0B595CA |
:10A1B000A795979587951A95D1F780933A03909331 |
:10A1C0003B03A0933C03B0933D0389589341A040C7 |
:10A1D000B04064F088E893E1A0E0B0E080933A03F7 |
:10A1E00090933B03A0933C03B0933D0320913A032B |
:10A1F00030913B0340913C0350913D0357FF04C015 |
:10A2000021503F4F4F4F5F4F232F342F452F55275E |
:10A2100047FD5A958091780290917902820F931FA1 |
:10A22000909379028093780206C081E08093460380 |
:10A2300002C01092460320E0C21620EFD2062FEF94 |
:10A24000E2062FEFF2060CF073C0809147038823DB |
:10A2500009F46AC0D701C601F7FE07C0882799270D |
:10A26000DC018C199D09AE09BF099C01AD01B7FF46 |
:10A2700004C021503E4F4F4F5F4FE9E05595479541 |
:10A2800037952795EA95D1F7809142039091430342 |
:10A29000820F931F9093430380934203D701C6011B |
:10A2A000F7FE03C00796A11DB11D73E0B595A795F4 |
:10A2B000979587957A95D1F780933A0390933B03CE |
:10A2C000A0933C03B0933D0388579C4EAF4FBF4FC4 |
:10A2D00064F488E79CEEAFEFBFEF80933A0390936E |
:10A2E0003B03A0933C03B0933D0320913A0330918C |
:10A2F0003B0340913C0350913D0357FF04C0215064 |
:10A300003F4F4F4F5F4F232F342F452F552747FD8A |
:10A310005A958091780290917902820F931F9093C1 |
:10A3200079028093780211C081E0809347030DC0C9 |
:10A33000109247030AC0109243031092420384E62E |
:10A3400090E090938B0180938A014889242F3327D2 |
:10A3500080914203909143032817390724F43093E6 |
:10A3600043032093420380913F09882379F0282FEB |
:10A37000332727FD3095809142039091430328179E |
:10A38000390724F4309343032093420340912C0374 |
:10A3900050912D0360912E0370912F034138510588 |
:10A3A0006105710574F08091FE029091FF02209189 |
:10A3B000420330914303820F931F9093FF028093D7 |
:10A3C000FE0240585F4F6F4F7F4FCCF48091FE02EA |
:10A3D0009091FF022091420330914303821B930B23 |
:10A3E0009093FF028093FE020AC0109279021092AD |
:10A3F000780210927702109276021092A602809153 |
:10A400009308882341F410927902109278021092F6 |
:10A410007702109276028091850890918608A0912B |
:10A420008708B09188088093480390934903A093CC |
:10A430004A03B0934B0380918D0890918E08A091B0 |
:10A440008F08B091900880934C0390934D03A09394 |
:10A450004E03B0934F031092DA021092DB02109277 |
:10A46000DC021092DD021092D6021092D7021092F6 |
:10A47000D8021092D9021092D2021092D3021092F6 |
:10A48000D4021092D502109285081092860810927C |
:10A4900087081092880810928D0810928E081092EA |
:10A4A0008F081092900810927A0810927B081092F0 |
:10A4B0007C0810927D0810926D0810926E08109220 |
:10A4C0006F08109270081092010210920002E09042 |
:10A4D0009C02F0909D02C701F7FE04C088279927CF |
:10A4E0008E199F0904973CF08091AE0884FD03C04B |
:10A4F00082E380937A0210917406A12EBB24CC24AF |
:10A50000DD24B701882777FD8095982F9701F7FE06 |
:10A5100004C0222733272E193F09442737FD4095D1 |
:10A52000542F0E943C7A9B01AC01C601B5010E94E8 |
:10A530003C7A97FF04C061507E4F8F4F9F4F59E088 |
:10A5400095958795779567955A95D1F79B01812FBA |
:10A5500099278E9DD0018F9DB00D9E9DB00D112429 |
:10A56000CD01B7FD03969595879595958795280F0D |
:10A57000391F80915202909153028150924010F005 |
:10A5800020E030E080917C0290917D02280F391FFD |
:10A59000442737FD4095542F20931C0330931D030F |
:10A5A00040931E0350931F038091BA029091BB0207 |
:10A5B000A091BC02B091BD02821B930BA40BB50B02 |
:10A5C0008093BA029093BB02A093BC02B093BD02E9 |
:10A5D0008155934CA040B04064F080E593ECA0E03E |
:10A5E000B0E08093BA029093BB02A093BC02B093F8 |
:10A5F000BD028091BA029091BB02A091BC02B091C1 |
:10A60000BD02805B9C43AF4FBF4F64F480EB9CE383 |
:10A61000AFEFBFEF8093BA029093BB02A093BC024E |
:10A62000B093BD0200918E0110918F0117FDFCC007 |
:10A630008091AE0883FFF8C080918D018150809396 |
:10A640008D01882309F0F4C08DE080938D01809105 |
:10A65000EA029091EB02A091EC02B091ED02B7FFFB |
:10A6600004C081509E4FAF4FBF4F39E0B595A795BD |
:10A67000979587953A95D1F77C0197FF04C0F094A0 |
:10A68000E194F108F3948091E2029091E302A091A9 |
:10A69000E402B091E502B7FF04C081509E4FAF4F76 |
:10A6A000BF4F29E0B595A795979587952A95D1F73E |
:10A6B0009C0197FF03C0309521953F4FE216F306AA |
:10A6C0000CF47901B701F7FE02C0695F7F4F2B01DF |
:10A6D000A3E055944794AA95E1F722E030E0420EBA |
:10A6E000531E6090BE087090BF088090C008909084 |
:10A6F000C1082091400130914101409142015091A7 |
:10A700004301C401B3010E94B07A59016A01309338 |
:10A710006B0820936A08021B130BC801845E9D4FCF |
:10A7200068E671E00E947B7A9C01245B3040809156 |
:10A730008A0190918B01009731F0019790938B01E2 |
:10A7400080938A011BC049E1E416F104BCF48091B6 |
:10A75000A4029091A502820F931F9093A50280936B |
:10A76000A40280917A02882349F0815080937A0272 |
:10A77000882321F4B092A902A092A80280918A01B4 |
:10A7800090918B01892BF9F480918C019927289F56 |
:10A79000B001299F700D389F700D1124CB01B201BB |
:10A7A0000E947B7ACB01AA2797FDA095BA2F680E4D |
:10A7B000791E8A1E9B1E6092BE087092BF0880920E |
:10A7C000C0089092C10880917A02882369F580912F |
:10A7D000A8029091A90220916A0830916B08821B0F |
:10A7E000930B845E9D4F68E671E00E947B7A9C012A |
:10A7F000245B30408091770186959927289FD0016E |
:10A80000299FB00D389FB00D11249D01B7FF02C0E4 |
:10A81000215F3F4FF4E035952795FA95E1F73093A6 |
:10A820007D0220937C0204C010927D0210927C0273 |
:10A830008091A602882381F01092AE021092AF029E |
:10A840001092B0021092B1021092B2021092B302B2 |
:10A850001092B4021092B502809173028823F1F431 |
:10A8600080919308282F3327442755278091EA02A7 |
:10A870009091EB02A091EC02B091ED02BC01CD01F0 |
:10A880000E943C7ADC01CB01BC01CD0128EF3AE209 |
:10A8900040E050E00E94B07A390102C0662477247B |
:10A8A000809172028823F1F480919308282F332736 |
:10A8B000442755278091E2029091E302A091E4029F |
:10A8C000B091E502BC01CD010E943C7ADC01CB01D4 |
:10A8D000BC01CD0128EF3AE240E050E00E94B07A9E |
:10A8E000290102C04424552480916708909168088A |
:10A8F000893C91051CF088EC90E005C088539F4F7F |
:10A9000034F488E39FEF9093680880936708809100 |
:10A91000720890917308893C91051CF088EC90E0D6 |
:10A9200005C088539F4F34F488E39FEF90937308DA |
:10A93000809372088091740890917508AA2797FDFA |
:10A94000A095BA2F2091BC08A22EBB24CC24DD24D4 |
:10A95000BC01CD01A60195010E943C7A9B01AC018E |
:10A960008091670890916808AA2797FDA095BA2F53 |
:10A97000E7E0880F991FAA1FBB1FEA95D1F7280FA0 |
:10A98000391F4A1F5B1F57FF04C0215C3F4F4F4FC9 |
:10A990005F4F76E055954795379527957A95D1F78E |
:10A9A0008301020F131F10937508009374088091A0 |
:10A9B000650890916608AA2797FDA095BA2FBC015B |
:10A9C000CD01A60195010E943C7A9B01AC018091CA |
:10A9D000720890917308AA2797FDA095BA2F67E097 |
:10A9E000880F991FAA1FBB1F6A95D1F7280F391F1F |
:10A9F0004A1F5B1F57FF04C0215C3F4F4F4F5F4F03 |
:10AA0000A6E05595479537952795AA95D1F77201F8 |
:10AA1000E20EF31EF0926608E09265088091B70896 |
:10AA20009091B808880F991FAA2797FDA095BA2F73 |
:10AA300020916C08332744275527BC01CD010E9483 |
:10AA40003C7A5B016C0197FF08C02FE330E040E0E7 |
:10AA500050E0A20EB31EC41ED51EF6E0D594C794D6 |
:10AA6000B794A794FA95D1F780918208282F3327BD |
:10AA7000442755278091CE029091CF02A091D00219 |
:10AA8000B091D102BC01CD010E943C7ADC01CB0126 |
:10AA9000BC01CD0120EF35E540E050E00E94B07AE6 |
:10AAA000B501620F731F7093B8086093B708015027 |
:10AAB000104134F080E090E1909375088093740821 |
:10AAC00080917408909175088050904F34F480E024 |
:10AAD00090EF909375088093740851E0E51650E16B |
:10AAE000F50634F080E090E1909366088093650865 |
:10AAF00080916508909166088050904F34F480E012 |
:10AB000090EF90936608809365086150704134F02F |
:10AB100080E090E19093B8088093B7088091B708DF |
:10AB20009091B8088050904F34F480E090EF90936B |
:10AB3000B8088093B7088091570285FD16C08091B0 |
:10AB400002019927209123013091240109811A8162 |
:10AB5000089F7001099FF00C189FF00C1124C70189 |
:10AB6000B9010E94677A7A8369838091500381508A |
:10AB7000809350038F3F09F05EC080915103909104 |
:10AB80005203892B41F480912301909124019093E9 |
:10AB900052038093510380912301909124012091CD |
:10ABA0005103309152032817390718F42F5F3F4F94 |
:10ABB00009C080912301909124018217930730F4FA |
:10ABC00021503040309352032093510384E6809308 |
:10ABD00050038091BC01282F33274091510350919D |
:10ABE00052034217530710F48AE00CC08091000111 |
:10ABF000280F311D2417350738F480914E02882321 |
:10AC000019F0815080934E028091BB01282F332789 |
:10AC10004217530710F489E10CC080910001280FFE |
:10AC2000311D2417350738F480914D02882319F01F |
:10AC3000815080934D0280914E028823D1F0809103 |
:10AC4000800290918102A0918202B0918302B7FDAF |
:10AC500010C08091C80680937F0280EE91EBAFEF29 |
:10AC6000BFEF8093800290938102A0938202B09301 |
:10AC700083028091EB01882311F40E947062298184 |
:10AC80003A81220F331F220F331F3A832983809189 |
:10AC9000AE0880FD02C00C94505E80917202882341 |
:10ACA00011F00C94505E40917302442311F00C9407 |
:10ACB000505E8091D00399278F779070009711F0A4 |
:10ACC0000C94505E4C012091020330910303211536 |
:10ACD000310509F044C08091190190911A018959F8 |
:10ACE000934058F087B5853F20F48091040281504D |
:10ACF00011C081E080935E0353C08091190190914F |
:10AD00001A018436910530F587B58B30F8F08091C3 |
:10AD100004028F5F809304029AE08902900111245B |
:10AD200080910706821B87BD87B5809588BD8CE220 |
:10AD300091E09093ED018093EC018EE591E090938A |
:10AD40000303809302030E94E31A2AC081E08093E8 |
:10AD50005D0326C040935D0340935E0321C0909342 |
:10AD600003028093020280918A0290918B02A0914B |
:10AD70008C02B0918D0274E0880F991FAA1FBB1F2F |
:10AD80007A95D1F78093050290930602A09307026B |
:10AD9000B093080221503040309303032093020304 |
:10ADA0008091AE0820916D0281FF25C02233E8F426 |
:10ADB000809190018150809390018F3FE1F5109236 |
:10ADC000A70280918A0290918B02A0918C02B0918F |
:10ADD0008D028093860290938702A0938802B0939D |
:10ADE000890281E08093900126C0273420F188EC0D |
:10ADF000809390011DC08091440190914501820F84 |
:10AE0000911D20916D063327829FA001839F500DD5 |
:10AE1000929F500D1124CA01AA2797FDA095BA2F21 |
:10AE20008093860290938702A0938802B093890250 |
:10AE300081E08093A7028091EA029091EB02A091B9 |
:10AE4000EC02B091ED02E0904001F09041010091E0 |
:10AE5000420110914301BC01CD01A80197010E945C |
:10AE6000B07A59016A018091E2029091E302A091C7 |
:10AE7000E402B091E502BC01CD01A80197010E9456 |
:10AE8000B07AB901C5010E94657890937F088093DC |
:10AE90007E08CC9734F08CE390E090937F08809309 |
:10AEA0007E0880917E0890917F080E94DC6A9093D2 |
:10AEB0007F0880937E0880E280933F011092850294 |
:10AEC000109284028091A702882309F487C580919B |
:10AED000570299279C012071307084FD7FC58091B5 |
:10AEE000560282608093560270919108872F9927AD |
:10AEF00061E0C62ED12CC822D92280FD04C08091E9 |
:10AF0000AE0881FD10C0E980FA803093540320938D |
:10AF10005303309385022093840280915702806C02 |
:10AF200080935702BBC28091570281FF8AC2009171 |
:10AF3000800110918101C8010F96A0909A02B090F3 |
:10AF40009B028A159B0508F07DC080915D038823D4 |
:10AF500009F078C08091570287FF15C08091570291 |
:10AF60008F77809357028091F8019091F901A09119 |
:10AF7000FA01B091FB018093860290938702A0931F |
:10AF80008802B0938902E0907108EE20F9F0809178 |
:10AF9000860290918702A0918802B0918902BC013B |
:10AFA000CD0124E630E040E050E00E94B07A8E2DE2 |
:10AFB0009927AA27BB2782179307A407B50734F45C |
:10AFC000D0928502C09284028DE337C080915503F0 |
:10AFD00090915603459784F08091F8019091F90182 |
:10AFE000A091FA01B091FB018093860290938702B1 |
:10AFF000A0938802B0938902809157028064809365 |
:10B0000057029501201B310B2F50304037FF03C0F2 |
:10B01000309521953F4F3093850220938402809193 |
:10B020004E02882349F0C90163E070E00E947B7AF8 |
:10B0300070938502609384028BE280933F011092AB |
:10B040007E0234C1C8010F97A816B906C0F5209139 |
:10B050005E032223A1F58091570286FF15C08091DF |
:10B0600057028F7B809357028091F8019091F901EC |
:10B07000A091FA01B091FB01809386029093870220 |
:10B08000A0938802B09389028091570280688093D0 |
:10B090005702C501801B910B0F9697FF03C0909537 |
:10B0A00081959F4F909581959F4F909385028093B6 |
:10B0B00084028DE280933F0120937E02F7C08DE3EE |
:10B0C00080933F0160917F02662371F1209180029D |
:10B0D00030918102409182025091830280918602D8 |
:10B0E00090918702A0918802B091890282179307FC |
:10B0F000A407B507CCF4809157028064809357026F |
:10B10000862F992790938502809384028AE080930A |
:10B110007E028EE580933F018091570287FFC6C073 |
:10B12000809157028F7733C0662309F443C0209182 |
:10B13000800230918102409182025091830280917D |
:10B14000860290918702A0918802B0918902281707 |
:10B1500039074A075B0774F580915702806880932E |
:10B160005702862F9927909581959F4F909385023E |
:10B170008093840286EF80937E0286E780933F016E |
:10B180008091570286FF92C0809157028F7B8093F7 |
:10B1900057028091F8019091F901A091FA01B091C4 |
:10B1A000FB018093860290938702A0938802B0935C |
:10B1B00089027CC080915702807C09F477C080911D |
:10B1C0007E02882309F04CC08091F8019091F9012A |
:10B1D000A091FA01B091FB01885C9040A040B04082 |
:10B1E0002091860230918702409188025091890215 |
:10B1F00082179307A407B5076CF08091F80190912E |
:10B20000F901A091FA01B091FB01885C9040A04047 |
:10B21000B0401DC08091F8019091F901A091FA0110 |
:10B22000B091FB0188539F4FAF4FBF4F281739078D |
:10B230004A075B07BCF08091F8019091F901A09159 |
:10B24000FA01B091FB0188539F4FAF4FBF4F8093DE |
:10B25000860290938702A0938802B093890202C06D |
:10B2600010927E02809157028F7380935702109242 |
:10B2700054031092530371FF06C084EF91E0909342 |
:10B28000ED018093EC0180918E02882379F4809106 |
:10B290008A0290918B02A0918C02B0918D02C3978B |
:10B2A000A105B1051CF081E080938E0260915303EB |
:10B2B000709154038091840290918502680F791FE8 |
:10B2C0007093540360935303CB0177FF04C0882726 |
:10B2D0009927861B970B855F91400CF49BC040918A |
:10B2E0007E02442389F18091800290918102209115 |
:10B2F000860230918702821B930B0996439748F48C |
:10B300008091800290918102A0918202B09183028B |
:10B3100012C0242F332727FD3095432F532F8091C0 |
:10B32000860290918702A0918802B0918902820FD3 |
:10B33000931FA41FB51F8093860290938702A0934A |
:10B340008802B093890224C080916D062091860204 |
:10B350003091870240918802509189021616170693 |
:10B3600044F463E00E945B7A280F311D411D511D9A |
:10B3700007C063E00E945B7A281B3109410951092B |
:10B38000209386023093870240938802509389026B |
:10B390001092540310925303E0908A02F0908B02B3 |
:10B3A00000918C0210918D02D801C7018050944009 |
:10B3B000A040B040209186023091870240918802DF |
:10B3C0005091890282179307A407B5075CF4D8014E |
:10B3D000C70180509C4FAF4FBF4F281739074A070E |
:10B3E0005B0744F08093860290938702A0938802C3 |
:10B3F000B09389028091910881FF06C084E690E0B5 |
:10B400009093ED018093EC0180917F02882311F4E9 |
:10B410000E9433408091020390910303892BD1F164 |
:10B420008091F8019091F901A091FA01B091FB018E |
:10B430008093860290938702A0938802B09389023A |
:10B4400029C080918A0290918B02A0918C02B091C8 |
:10B450008D0280599140A040B04080938602909325 |
:10B460008702A0938802B093890280917106882395 |
:10B4700011F0992702C08FE790E0909381018093AB |
:10B48000800169817A8170937502609374028EE203 |
:10B4900080933F01E0907402F09075028091F80172 |
:10B4A0009091F901A091FA01B091FB0120918602DF |
:10B4B00030918702409188025091890228173907FC |
:10B4C0004A075B0724F08091910880FD99C2809122 |
:10B4D0004F02882309F094C28091020390910303E4 |
:10B4E000892B49F0E0907402F09075021092560397 |
:10B4F00010925503E1C08091F8019091F901A0915B |
:10B50000FA01B091FB01821B930BA40BB50B809346 |
:10B51000200390932103A0932203B093230382304E |
:10B5200070E897077FEFA7077FEFB7072CF481E05C |
:10B5300090E8AFEFBFEF09C08F5F9F47A040B040DA |
:10B5400064F08FEF9FE7A0E0B0E08093200390933A |
:10B550002103A0932203B0932303809120039091B1 |
:10B560002103909356038093550380917901282FEE |
:10B570003327442755278091200390912103A091E0 |
:10B580002203B0912303BC01CD010E943C7A97FFB6 |
:10B5900004C0615E7F4F8F4F9F4F55E09595879513 |
:10B5A000779567955A95D1F760932003709321039F |
:10B5B00080932203909323036530FEEF7F07FFEF14 |
:10B5C0008F07FFEF9F072CF484E09EEFAFEFBFEFF4 |
:10B5D00009C0605074408040904064F080E094E086 |
:10B5E000A0E0B0E08093200390932103A093220376 |
:10B5F000B0932303809020039090210320910202B6 |
:10B600003091030237FF02C0295F3F4F43E0359579 |
:10B6100027954A95E1F71FEF223831071CF421E8FE |
:10B620003FEF05C02038310514F020E830E0C901B3 |
:10B63000AA2797FDA095BA2F20917A013327442796 |
:10B640005527BC01CD010E943C7A97FF04C06D5F75 |
:10B650007F4F8F4F9F4F22E0959587957795679500 |
:10B660002A95D1F79B014FEF613074071CF420E05D |
:10B670003FEF06C06F3F710519F014F020E031E094 |
:10B6800080915702807C49F0C90137FD03969C01E7 |
:10B6900035952795359527950DC08091910880FFA8 |
:10B6A00009C0C90137FD07969C0103E03595279530 |
:10B6B0000A95E1F7820E931E20917801222309F466 |
:10B6C00054C06091AA027091AB028091AC0290913B |
:10B6D000AD0297FF04C061587F4F8F4F9F4F17E017 |
:10B6E00095958795779567951A95D1F733274427D0 |
:10B6F00055270E943C7A97FF04C0615E7F4F8F4FB1 |
:10B700009F4FB5E09595879577956795BA95D1F751 |
:10B71000609320037093210380932203909323036B |
:10B7200061385FEF75075FEF85075FEF95072CF4D2 |
:10B7300080E89FEFAFEFBFEF0AC06F3F7105810553 |
:10B74000910569F064F080E091E0A0E0B0E08093C2 |
:10B75000200390932103A0932203B09323038091AD |
:10B76000200390912103880E991E80917601282F45 |
:10B77000332780914209992787FD9095289FB00132 |
:10B78000299F700D389F700D11249B0177FF02C017 |
:10B7900021583F4F220F232F221F330B7FEF2138D9 |
:10B7A00037071CF420E83FEF06C02F3F310519F0A2 |
:10B7B00014F020E031E0280D391DC901AA2797FDBA |
:10B7C000A095BA2F00917402109175029801442738 |
:10B7D00037FD4095542FBC01CD010E943C7A97FF64 |
:10B7E00004C061507E4F8F4F9F4FF9E0959587952C |
:10B7F00077956795FA95D1F7E61AF70A8091840252 |
:10B8000090918502892B09F064C0101611060CF086 |
:10B8100060C02091550330915603C90137FF03C022 |
:10B82000309521953F4F2D33310540F48091A20290 |
:10B830009091A3028E159F0574F526C02C533040BD |
:10B84000E5E036952795EA95E1F72031310510F0CE |
:10B850002FE030E04091A2025091A3021816190681 |
:10B86000E4F480E190E0821B930B489F9001499F94 |
:10B87000300D589F300D112474E0369527957A9538 |
:10B88000E1F72E153F0520F580917E0190917F0113 |
:10B89000E816F906F4F07C011CC0205F3F4F809150 |
:10B8A0007E0190917F01829FD001839FB00D929F76 |
:10B8B000B00D11249D0164E0369527956A95E1F756 |
:10B8C0004E155F0514F07A0104C0E216F30608F085 |
:10B8D0007901C701AA2797FDA095BA2F5DE0880FCF |
:10B8E000991FAA1FBB1F5A95D1F720917E0830914E |
:10B8F0007F08442737FD4095542FBC01CD010E949D |
:10B90000B07A209324033093250340932603509369 |
:10B910002703E0902403F090250380915703909132 |
:10B9200058039C01220F331F280F391F2E0D3F1D76 |
:10B9300037FF02C02D5F3F4FA9015595479555959B |
:10B940004795509358034093570380916906282FD9 |
:10B950003327220F331F220F331F241735076CF4B0 |
:10B960008091B608282F3327220F331F220F331F51 |
:10B97000205530404217530724F03093580320934A |
:10B9800057038091910880FF14C0809157039091D4 |
:10B990005803E981FA818E179F0724F0F09358032A |
:10B9A000E0935703E0905703F0905803FA82E9823E |
:10B9B00027C029813A81201B310B37FF02C02D5F40 |
:10B9C0003F4F359527953595279500915703109151 |
:10B9D0005803020F131F1A83098312C00E943340B9 |
:10B9E00029813A813093580320935703809157025D |
:10B9F000806C80935702809156028D7F809356020F |
:10BA00008091570299279C012270307081FF39C1C3 |
:10BA10008091590390915A03A0915B03B0915C030C |
:10BA20000097A105B10521F080918E028130B9F413 |
:10BA30008091740290917502AA2797FDA095BA2F64 |
:10BA40001EE0880F991FAA1FBB1F1A95D1F780937C |
:10BA5000590390935A03A0935B03B0935C038091C6 |
:10BA60008E02813019F482E080938E0249815A81DE |
:10BA70007A010027F7FC0095102F80917E089091A5 |
:10BA80007F089C01442737FD4095542FC801B7011A |
:10BA90000E943C7ADC01CB01809324039093250320 |
:10BAA000A0932603B0932703B7FF04C08150904EA4 |
:10BAB000AF4FBF4F7C018D01FDE015950795F794C1 |
:10BAC000E794FA95D1F7E0922403F09225030093CE |
:10BAD00026031093270360915802709159025FE08A |
:10BAE000603A750750F58091590390915A03A091DF |
:10BAF0005B03B0915C039C01AD01EAE0569547956C |
:10BB000037952795EA95D1F7821B930BA40BB50BBC |
:10BB1000A8019701F4E0220F331F441F551FFA9527 |
:10BB2000D1F7820F931FA41FB51F809359039093E1 |
:10BB30005A03A0935B03B0935C0360547F4118F5F4 |
:10BB40008091590390915A03A0915B03B0915C03DB |
:10BB50009C01AD01ECE05695479537952795EA9500 |
:10BB6000D1F7821B930BA40BB50BA801970172E0D0 |
:10BB7000220F331F441F551F7A95D1F7820F931F51 |
:10BB8000A41FB51F41C080910202909103028091D1 |
:10BB900002029091030297FF03C0909581959F4FF9 |
:10BBA00084369105CCF58091F8019091F901A0912E |
:10BBB000FA01B091FB019C0180918602909187026D |
:10BBC000281B390B37FF03C0309521953F4F2F3F7E |
:10BBD000310509F00CF58091590390915A03A09119 |
:10BBE0005B03B0915C039C01AD016EE056954795F7 |
:10BBF000379527956A95D1F7821B930BA40BB50B4C |
:10BC00008E0D9F1DA01FB11F8093590390935A035F |
:10BC1000A0935B03B0935C038091590390915A0306 |
:10BC2000A0915B03B0915C031EE0B695A795979534 |
:10BC300087951A95D1F7909375028093740240917D |
:10BC40006F06442399F055279C01BA010E947B7A24 |
:10BC5000C901861B970B9093A3028093A202260F23 |
:10BC6000371F30937F0120937E011FC01092A302E3 |
:10BC70001092A2028FEF93E090937F0180937E0158 |
:10BC800014C010928E021092590310925A0310920F |
:10BC90005B0310925C03309375022093740205C01D |
:10BCA00080915702806C8093570280916D0381FFD1 |
:10BCB00037C089819A8197FD0396959587959595CB |
:10BCC000879520915402309155022817390760F466 |
:10BCD0008091740290917502892B31F0220F331FED |
:10BCE000220F331F3A8329838091F8019091F90143 |
:10BCF000A091FA01B091FB01809386029093870294 |
:10BD0000A0938802B093890288E99AE39093ED01A9 |
:10BD10008093EC0180E09EE090930C0180930B01F6 |
:10BD200020917908822F9927880F991F880F991FD2 |
:10BD30008896A981BA818A179B0714F09A83898310 |
:10BD40008091B6089927880F991F880F991F8055F1 |
:10BD50009040E981FA818E179F0714F49A838983B2 |
:10BD600080913C02882341F4809149098E3F20F064 |
:10BD7000809171038823E1F08091580290915902DB |
:10BD80000297C097A8F4E980FA801E141F0484F477 |
:10BD900081E090E09093590280935802022F11277E |
:10BDA000000F111F000F111F085D1F4F1A83098319 |
:10BDB0008091EB01882311F40E94706229813A81FD |
:10BDC0003093C5052093C40580911C0390911D03F9 |
:10BDD000A0911E03B0911F0342E0880F991FAA1F74 |
:10BDE000BB1F4A95D1F70091B7081091B808081BFE |
:10BDF000190B213A31058CF0C90137FD0196959553 |
:10BE00008795801791070CF48C01909581959F4F31 |
:10BE1000081719076CF48C010BC00135110514F0DB |
:10BE200000E510E03FEF003B130714F400EB1FEFB9 |
:10BE30008091B608282F3327220F331F220F331F7C |
:10BE4000C90149815A81841B950B801791070CF415 |
:10BE50008C0169817A81621B730B061717070CF43A |
:10BE60008B0180917408909175086091A002709187 |
:10BE7000A102861B970B9093840880938308D0902F |
:10BE800093082091B2023091B3024091B4025091D4 |
:10BE9000B502DD2041F0661A770AC301AA2797FD93 |
:10BEA000A095BA2F04C0AA2797FDA095BA2F280FF6 |
:10BEB000391F4A1F5B1F2093B2023093B302409395 |
:10BEC000B4025093B5028091B2029091B302A09156 |
:10BED000B402B091B50281509A4FA040B04064F0D6 |
:10BEE00080E09AEFA0E0B0E08093B2029093B302BA |
:10BEF000A093B402B093B5028091B2029091B302C4 |
:10BF0000A091B402B091B50280509640AF4FBF4FA0 |
:10BF100064F480E096E0AFEFBFEF8093B2029093BD |
:10BF2000B302A093B402B093B502C0907E062091F4 |
:10BF3000830830918408F8E0FC1598F08C2D99273F |
:10BF4000829F7001839FF00C929FF00C1124C70117 |
:10BF5000F7FC07967C01B3E0F594E794BA95E1F716 |
:10BF600012C08C2D86959927829FA001839F500D2A |
:10BF7000929F500D1124CA0157FD03967C01F59440 |
:10BF8000E794F594E794A0907B01B0907C01950133 |
:10BF9000442737FD4095542F8091B2029091B3020F |
:10BFA000A091B402B091B502BC01CD010E94B07A5B |
:10BFB000E20EF31E90906501692D77278827992757 |
:10BFC000980117FF04C022273327201B310B37FFAE |
:10BFD00002C02F5F3F4F35952795A981BA812A0F5F |
:10BFE0003B1F442737FD4095542F0E943C7A97FF12 |
:10BFF00004C0615C7F4F8F4F9F4FE6E0959587951A |
:10C0000077956795EA95D1F79B016E157F050CF43E |
:10C010007B01309521953F4FE216F3060CF4790130 |
:10C02000809165089091660860919E0270919F02D0 |
:10C03000861B970B90936408809363082091AE024F |
:10C040003091AF024091B0025091B102DD2041F039 |
:10C05000461A570AC201AA2797FDA095BA2F04C015 |
:10C06000AA2797FDA095BA2F280F391F4A1F5B1FDB |
:10C070002093AE023093AF024093B0025093B102CE |
:10C080008091AE029091AF02A091B002B091B10246 |
:10C0900081509A4FA040B04064F080E09AEFA0E059 |
:10C0A000B0E08093AE029093AF02A093B002B09341 |
:10C0B000B1028091AE029091AF02A091B002B09116 |
:10C0C000B10280509640AF4FBF4F64F480E096E0DD |
:10C0D000AFEFBFEF8093AE029093AF02A093B00298 |
:10C0E000B093B102209163083091640848E04C1588 |
:10C0F00098F08C2D9927829FB001839F700D929F9D |
:10C10000700D1124CB0177FD07966C0163E0D59487 |
:10C11000C7946A95E1F712C0C6948C2D9927829F27 |
:10C12000D001839FB00D929FB00D1124CD01B7FDBA |
:10C1300003966C01D594C794D594C7949501442770 |
:10C1400037FD4095542F8091AE029091AF02A0919F |
:10C15000B002B091B102BC01CD010E94B07AC20E12 |
:10C16000D31E692D772788279927980117FF04C0C8 |
:10C1700022273327201B310B37FF02C02F5F3F4F91 |
:10C1800035952795E981FA812E0F3F1F442737FD0A |
:10C190004095542F0E943C7A97FF04C0615C7F4F0A |
:10C1A0008F4F9F4F36E095958795779567953A9590 |
:10C1B000D1F79B016C157D050CF46B013095219531 |
:10C1C0003F4FC216D3060CF469018091EB0188231E |
:10C1D00011F40E94706280917908282F33273E8BDA |
:10C1E0002D8B8091B608282E33245090C0062FE660 |
:10C1F000A22E27E0B22E9AEE892E96E0992E8BE0A1 |
:10C20000482EB4E96B2EB8E07B2ED4012C91121687 |
:10C210000CF02FC1203429F4E981FA81F88FEF8BDB |
:10C220001FC049815A81CA01AA2797FDA095BA2F3C |
:10C23000332727FD3095432F532FBC01CD010E949A |
:10C240003C7A97FF04C0615C7F4F8F4F9F4FA6E001 |
:10C250009595879577956795AA95D1F7788F6F8B88 |
:10C26000F4012181203439F42F89388D2E0D3F1DA2 |
:10C27000388F2F8B2AC0203C39F44F89588D4E19A6 |
:10C280005F09588F4F8B21C0C701AA2797FDA09542 |
:10C29000BA2F332727FD3095432F532FBC01CD01F3 |
:10C2A0000E943C7A97FF04C0615C7F4F8F4F9F4F85 |
:10C2B000F6E09595879577956795FA95D1F7AF89CB |
:10C2C000B88DA60FB71FB88FAF8BF4012281203431 |
:10C2D00039F42F89388D2C0D3D1D388F2F8B2AC0B6 |
:10C2E000203C39F44F89588D4C195D09588F4F8B7C |
:10C2F00021C0C601AA2797FDA095BA2F332727FD95 |
:10C300003095432F532FBC01CD010E943C7A97FFFB |
:10C3100004C0615C7F4F8F4F9F4FE6E095958795F6 |
:10C3200077956795EA95D1F7AF89B88DA60FB71FB6 |
:10C33000B88FAF8BF4012381203439F42F89388DE5 |
:10C34000200F311F388F2F8B2AC0203C39F44F89A2 |
:10C35000588D401B510B588F4F8B21C0C801AA2705 |
:10C3600097FDA095BA2F332727FD3095432F532FE4 |
:10C37000BC01CD010E943C7A97FF04C0615C7F4FF5 |
:10C380008F4F9F4F56E095958795779567955A956E |
:10C39000D1F7AF89B88DA60FB71FB88FAF8BF50156 |
:10C3A000808181FD08C0D3018D919C91EF89F88D2A |
:10C3B0008E179F0774F4D3018D919C91EF89F88DAE |
:10C3C0008E0F9F1F97FD019695958795988F8F8B60 |
:10C3D0001EC0552049F42F89388D220F331F281B8A |
:10C3E000390B388F2F8B13C031E0351580F4252D94 |
:10C3F00033274F89588D841B950BB9010E947B7A96 |
:10C40000CB016F89788D680F791F788F6F8B8D893D |
:10C410009E89880F991F880F991FAF89B88D8A1739 |
:10C420009B0754F4C101880F991F880F991FEF894A |
:10C43000F88DE817F90714F0988F8F8B8F89988DF6 |
:10C4400097FD03969595879595958795F501818339 |
:10C45000880F991F880F991F2F89388D281B390B3A |
:10C46000C901880F8283EF89F88DD301ED93FC9386 |
:10C4700003C0F501118212824A9422E030E0620E7C |
:10C48000731E44E050E0840E951E68E070E0A60E36 |
:10C49000B71E47FEBACEE2E1C85E0C94E77A84B1DB |
:10C4A000806A84B93D9A82E58CBD1DBC459A81E0C5 |
:10C4B0008093C8088AEA8093D90883E88093DA08D1 |
:10C4C0008AE08093DB081092DD081092DC0810925D |
:10C4D000DF081092DE08109241091092FD080895BD |
:10C4E0003091C808332309F070C00DB407FE6DC049 |
:10C4F00085E08093EB01459A2EB5809174039927CE |
:10C500008130910589F0823091051CF4892B21F04E |
:10C510003EC00297B9F03BC03093FC0820937503EE |
:10C520002138A9F581E008C0253549F480917503CB |
:10C53000820F8093750382E08093740328C0309348 |
:10C54000740325C08091FC08E82FFF27E25EF64FB8 |
:10C5500020838F5F8093FC08909175038032A0F058 |
:10C56000291769F480E2AEE1B9E0EEEFF8E00D9052 |
:10C5700001928A95E1F781E08093FD0802C0309333 |
:10C58000FD081092740303C0920F909375032091DD |
:10C59000D8082232A0F445980000000000000000F6 |
:10C5A000E091D108F091D208E20FF11D80818EBD9B |
:10C5B0008091FA089081890F8093FA0803C081E086 |
:10C5C0008093C8082F5F2093D8080895EF92FF92B8 |
:10C5D0000F931F93809177069927880F991F880FD3 |
:10C5E000991F7C010027F7FC0095102F8091EA022B |
:10C5F0009091EB02A091EC02B091ED02BC01CD0153 |
:10C60000A80197010E94B07A3093DD082093DC08DE |
:10C610008091E2029091E302A091E402B091E502E0 |
:10C62000BC01CD01A80197010E94B07A3093DF08C8 |
:10C630002093DE082091BE083091BF084091C008C9 |
:10C640005091C108DA01C90173E0880F991FAA1F30 |
:10C65000BB1F7A95D1F7820F931FA41FB51F820FBE |
:10C66000931FA41FB51F20914001309141014091BB |
:10C67000420150914301BC01CD010E94B07A309338 |
:10C68000E5082093E4088091FC029091FD0220913E |
:10C690000F0230911002821B930B9093EB08809352 |
:10C6A000EA08E091F202F091F30280918A089091F9 |
:10C6B0008B08BF010E947B7ACB019B01220F331FA5 |
:10C6C000220F331F280F391F280F391F37FF02C0D1 |
:10C6D0002D5F3F4F35952795359527953093E10888 |
:10C6E0002093E0088091BA089091BB08BF010E9496 |
:10C6F0007B7A9B01220F331F220F331F260F371F18 |
:10C70000260F371F37FF02C02D5F3F4F3595279506 |
:10C71000359527953093E3082093E2081092F302B1 |
:10C720001092F20210928B0810928A081092BB08A5 |
:10C730001092BA088091DB089927AA27BB27FC0131 |
:10C740003A97E830F10508F025C2E35AFF4F0C9400 |
:10C75000027B80916C028093EE0880916B02809343 |
:10C76000EF0880916A028093F008809169028093BB |
:10C77000F108809168028093F208809167028093AB |
:10C78000F308809166028093F4088091650280939B |
:10C79000F508809157028093F60880915702837FB5 |
:10C7A00080935702809101018093F70880912301C3 |
:10C7B000909124018093F808809156028093F908A3 |
:10C7C0004299E8C180915602877F80935602E2C168 |
:10C7D00080914309909144099093EF088093EE086B |
:10C7E00080914709909148099093F1088093F0084F |
:10C7F0008091AC060E94FD3C8093F20880913F013D |
:10C800008093F308909176039093F408E92FFF2723 |
:10C8100013E0EE0FFF1F1A95E1F7E159F84F808101 |
:10C820008093F50886818093F60883818093F708CA |
:10C8300087818093F80885818093F9089F5F9093A2 |
:10C840007603E92FFF27EE0FFF1FEE0FFF1FE352C6 |
:10C85000F94F858518160CF49DC1992309F49AC1E6 |
:10C86000892F992701966DE070E00E947B7A9C01E8 |
:10C87000982FE82FFF27EE0FFF1FEE0FFF1FE35249 |
:10C88000F94F8585181614F0222351F7209376036B |
:10C8900081C1809102018093EE088091AD06809362 |
:10C8A000EF088091AE068093F0088091AF068093E8 |
:10C8B000F1088091B0068093F2088091B4068093CD |
:10C8C000F3088091B5068093F4088091B6068093B2 |
:10C8D000F5088091B9068093F6088091B706809399 |
:10C8E000F7088091B8068093F8088091BA0650C185 |
:10C8F0008091AB068093EE081092EF088091C806F5 |
:10C900008093F0088091C1068093F10880914D02D8 |
:10C910008093F208809199038093F3081092990311 |
:10C9200039C1F89480915E06E82FFF27EE0FFF1FB4 |
:10C93000E053F84F0190F081E02DE038F1051CF054 |
:10C94000EFE7F0E006C02FEFE138F20714F4E1E87A |
:10C95000FFEFE093EE0880915F06E82FFF27EE0FD0 |
:10C96000FF1FE053F84F0190F081E02DE038F10512 |
:10C970001CF0EFE7F0E006C07FEFE138F70714F4B2 |
:10C98000E1E8FFEFE093EF0880915D06E82FFF27D5 |
:10C99000EE0FFF1FE053F84F0190F081E02DE038DB |
:10C9A000F1051CF0EFE7F0E006C08FEFE138F80783 |
:10C9B00014F4E1E8FFEFE093F00880915C06E82FC3 |
:10C9C000FF27EE0FFF1FE053F84F0190F081E02D9D |
:10C9D000E038F1051CF0EFE7F0E006C02FEFE1389A |
:10C9E000F20714F4E1E8FFEF7894E093F108809106 |
:10C9F00091028093F208809192028093F3088091D3 |
:10CA000093028093F408809194028093F5088091BA |
:10CA100095028093F608809196028093F7088091A2 |
:10CA200097028093F80880919802B2C08091EB033E |
:10CA3000853018F01092EB0385E08093EE0880912A |
:10CA4000BB068093EF0880918A0290918B02A0919F |
:10CA50008C02B0918D02BC01CD0125E030E040E0B8 |
:10CA600050E00E94B07A3093F1082093F008809152 |
:10CA7000860290918702A0918802B0918902BC0140 |
:10CA8000CD0125E030E040E050E00E94B07A3093E4 |
:10CA9000F3082093F2088091B1068093F408809106 |
:10CAA000B2068093F5088091B3068093F6088091D2 |
:10CAB00090028093F708809177038093F808809123 |
:10CAC000C4059091C50597FD039695958795959515 |
:10CAD00087955EC082E08093EE0884E08093EF0843 |
:10CAE0001092F0088CE38093F10880910301809309 |
:10CAF000F2088091D0038093F3089091D103909332 |
:10CB0000F4088F778093D00390719093D103809134 |
:10CB1000C9068093F5088091AE088093F60880914D |
:10CB200091088093F7088091BD068093F808809162 |
:10CB3000CF062EC0809190068093EE088091CD069E |
:10CB40008093EF0880916D018093F00880918906B1 |
:10CB50008093F10880918A068093F20880918B0679 |
:10CB60008093F30880916C018093F40880918D0686 |
:10CB70008093F50880918E068093F60880918F0649 |
:10CB80008093F708809149098093F8088091EE0519 |
:10CB90008093F9088091FD08882309F461C16091B0 |
:10CBA000FE088091A101681719F08AEF80939F0118 |
:10CBB0006093A10181E080938D014091FF08509125 |
:10CBC0000009CA0181509E4F8F5F9340B0F42091BD |
:10CBD000010930910209C90181509E4F8F5F934036 |
:10CBE00060F48091680685FF08C05093630340930A |
:10CBF0006203309361032093600380910509909153 |
:10CC0000060921E08936920724F490938F018093DE |
:10CC10008E0120910F09309110098091EC019091C3 |
:10CC2000ED018217930740F48091BD01882321F420 |
:10CC30003093ED012093EC01862F992788369105DA |
:10CC400009F468C08936910524F48736910551F0BE |
:10CC50000FC18936910509F496C08B36910509F408 |
:10CC6000E2C006C18091110980933E0980911209AA |
:10CC7000809340098091130980933F0980911409A2 |
:10CC800080938C0180911509809342098091160947 |
:10CC90008093A001809117098093730380911809F4 |
:10CCA00080935F03809164028823F9F02091190931 |
:10CCB00030911A0937FD19C03093A9022093A802B8 |
:10CCC00090919206992389F08FE0989FC0011124DA |
:10CCD000281B390BC90188599E4F68E671E00E94F4 |
:10CCE0007B7A9093A9028093A80220916A033091E5 |
:10CCF0006B0380911B0990911C09280F391F37FF86 |
:10CD000002C02F5F3F4F3595279530936B032093DB |
:10CD10006A03AEC0809111098093D30880911209F3 |
:10CD20008093D408809113098093D50880911409C9 |
:10CD30008093D608809115098093D7088091B40517 |
:10CD400090911609892B8093B4059091B505937045 |
:10CD5000809117098C70982B9093B50580911809D4 |
:10CD600080937103809119098093910180911A0930 |
:10CD70008093410980911B0980936D0380911C0968 |
:10CD800080936C0375C0809111098093C9088091CC |
:10CD900012098093CA08809113098093CB0880916F |
:10CDA00014098093CC0880911509909116099093ED |
:10CDB000CE088093CD08809117099091180990931F |
:10CDC000D0088093CF0880911909992787FD909505 |
:10CDD00090930B0880930A0880911A0980937F0230 |
:10CDE00080911B0990911C099C01442737FD4095B7 |
:10CDF000542FDA01C90163E0880F991FAA1FBB1FD6 |
:10CE00006A95D1F7820F931FA41FB51F820F931F3E |
:10CE1000A41FB51F8093800290938102A093820289 |
:10CE2000B093830225C08091110980937003809193 |
:10CE3000120980936F038091130980936E03809190 |
:10CE4000150980939C038091160980939B03809120 |
:10CE5000190980939A0380911A098093980308C056 |
:10CE600010926303109262031092610310926003A8 |
:10CE70001F910F91FF90EF9008958091C80888232B |
:10CE800019F480E090E00895459889ED98E090933A |
:10CE9000D2088093D10890917203E92FFF27EE56B4 |
:10CEA000FE4F9F5F9093720380818093DB089D30DB |
:10CEB00010F0109272031092C8080E94E66281E09E |
:10CEC0008093D8088091D9088093FA088EBD81E0BC |
:10CED00090E0089587B18C6087B94298439810928A |
:10CEE000790380E88093A301109278038093A201D4 |
:10CEF000089580910A0890910B0881589F4F39F04E |
:10CF000080910A0890910B08815880938303809147 |
:10CF10007E03815080937E038F3F09F052C1809140 |
:10CF2000A50680937F038091A7068093800389E004 |
:10CF300080937E0380915702992780739070892B8C |
:10CF400021F48091D10380FF1DC08091A906882320 |
:10CF500051F080918103882319F484E08093790350 |
:10CF600081E0809381038091AA06882379F08091E3 |
:10CF70008203882319F484E08093780381E080930E |
:10CF8000820304C010928103109282038091810376 |
:10CF9000882309F082C08091CC06282F332724FFF4 |
:10CFA00007C080918F02882319F425FD8FC090C09F |
:10CFB0009091A606983F48F080918C088D3D28F00E |
:10CFC00080917F0388236CF00AC0983F78F08091AD |
:10CFD0008C08853059F480917F0387FF02C0429A04 |
:10CFE00001C0429881E08093A30154C080917903ED |
:10CFF0008150809379038F3F09F06BC08091CF06F9 |
:10D0000085FF2FC090918303892F869580937903A4 |
:10D01000992361F49093770380917F0387FF02C087 |
:10D02000429A01C042981092A30153C081E08093BC |
:10D0300077038091A30190917F03882349F4809323 |
:10D04000830380E48093A30199230CF43FC040C084 |
:10D05000982311F0429A01C0429886958093A301CB |
:10D0600038C080918C088695809379038091A301C4 |
:10D07000813021F41092830380E401C0869580936F |
:10D08000A3018091A30190917F03892311F0429A1B |
:10D0900001C04298109277031CC08091790381509F |
:10D0A000809379038F3FA9F489E08093790380917D |
:10D0B000A301813011F480E801C086958093A3011B |
:10D0C0008091A3019091A906892311F0429A01C091 |
:10D0D000429880918203882309F043C09091CC0646 |
:10D0E00097FF07C080918F02882319F496FD52C0E4 |
:10D0F00053C09091A806983F48F08091B5088D3DA7 |
:10D1000028F08091800388236CF00AC0983F78F063 |
:10D110008091B508853059F48091800387FF02C063 |
:10D12000439A01C0439881E08093A20136C0809168 |
:10D1300078038150809378038F3F79F58091B5080B |
:10D140008695809378038091A201813011F480E468 |
:10D1500001C086958093A2018091A20190918003E5 |
:10D1600017C0809178038150809378038F3FA9F492 |
:10D1700089E0809378038091A201813011F480E8E6 |
:10D1800001C086958093A2018091A2019091AA0688 |
:10D19000892311F0439A01C04398429B05C08091B6 |
:10D1A0005602886080935602439B06C080915602C7 |
:10D1B0008061809356020895809156028F7E8093FD |
:10D1C000560208954FB724E130E0F8948091C900E9 |
:10D1D0008F778093C9008091C9008F7B8093C900AD |
:10D1E0008091C9008F7D8093C900832F99278093F8 |
:10D1F000CD002093CC008091C80082608093C8004D |
:10D2000080E18093C9008091CA008F778093CA0023 |
:10D210008091CA008F7B8093CA008091CA008F7D65 |
:10D220008093CA008091CA008F7E8093CA0080914B |
:10D23000CA00877F8093CA008091C9008B7F80934A |
:10D24000C9008091CA0084608093CA008091CA009E |
:10D2500082608093CA008091C80087FF03C08091DC |
:10D26000CE00F9CF8091C90080688093C9004FBF7C |
:10D270000895EF92FF920F931F93CF93DF93482F60 |
:10D2800000E010E08091A401813061F41092A401CB |
:10D2900084E4809384031092860310928503109295 |
:10D2A000870339C180918403882319F421E030E099 |
:10D2B00001C0980190918503992371F4232B11F0FB |
:10D2C00081E010C084E4809384039093860390935C |
:10D2D00085039093870308C1913069F4232B09F0EB |
:10D2E000F9C082E080938503809186038F5F8093ED |
:10D2F000860383E0F7C09230D1F4232B09F0EAC013 |
:10D3000083E0809384034093870390918603923057 |
:10D3100039F41092880347FF03C081E080938803AB |
:10D3200083E0809385039F5F90938603DDC09330F5 |
:10D3300009F0D0C0232B09F0CDC09093840382E084 |
:10D3400080938503809186038F5F8093860320916D |
:10D350008703822F9927782F6627842F9927682B98 |
:10D36000792B80918206813049F47370CB01805013 |
:10D37000924063E070E00E947B7A17C0823061F4D3 |
:10D380007770CB018050944066E070E00E947B7A19 |
:10D390002695269526950BC0737068567140CB0173 |
:10D3A00077FD0196BC017595679526952695022F08 |
:10D3B00011270F7010700F5F1F4F0D30110508F00F |
:10D3C00082C07801E00EF11EF701E053F84F808132 |
:10D3D00091819B01281B390BC90137FF03C0909530 |
:10D3E00081959F4F069704F5E091C406EE2351F016 |
:10D3F000FF27EE0FFF1FE053F84F808191818436A5 |
:10D40000910594F480919002883C30F480919002D0 |
:10D41000865F8093900208C088EC80939002809190 |
:10D420006F008F7D80936F00F701E053F84F80818C |
:10D4300091819C01220F331F280F391F260F371FA0 |
:10D4400037FF02C02D5F3F4FE901D595C795D595B0 |
:10D45000C795CB0101968C179D0714F4219706C040 |
:10D4600061507040C617D7070CF421968091900246 |
:10D47000843BD0F0F701E053F84F80819181FE01A9 |
:10D48000E81BF90BCF0163E070E00E947B7ACB01CF |
:10D49000880F991F860F971F26E138E0E20EF31ED2 |
:10D4A000F7019183808307C026E138E0E20EF31E86 |
:10D4B000F70111821082000F111F0053184FF8015D |
:10D4C000D183C08311C00231110570F081E08093D7 |
:10D4D000A4010AC081E08093A401109286031092F7 |
:10D4E000880384E48093840380918603803198F0DC |
:10D4F00080918803882331F48091A401882311F45A |
:10D5000080933E0110928603109288031092850347 |
:10D5100084E480938403E6E0CDB7DEB70C94F37A1D |
:10D52000CF93FC0197FF05C0CFEFF095E195FF4F3A |
:10D5300001C0C1E028E631E0CF01B9010E947B7A49 |
:10D54000FC018B35910554F08B5590408A3591053F |
:10D5500038F484EB90E08E1B9F0BFC0141E00DC082 |
:10D56000CF01855B90408A35910518F4E45BF0406B |
:10D5700003C02E1B3F0BF9014FEFEE0FFF1FE959C0 |
:10D58000F84F259134918C2F992787FD9095289FEE |
:10D59000B001299F700D389F700D1124842F992799 |
:10D5A00087FD9095689FA001699F500D789F500D51 |
:10D5B0001124CA01CF9108952AE530E0281B390BC8 |
:10D5C000C9010E94906A0895CF93DF9380E00E9482 |
:10D5D0004E7180912301909124016AE070E00E94D5 |
:10D5E0007B7A9F938F9380912301909124016AE02D |
:10D5F00070E00E947B7A7F936F9383E598E09F931E |
:10D600008F93C1E4D1E7DF93CF93E091B703F0911B |
:10D61000B80309952DB73EB7285F3F4F2DBF8091C6 |
:10D620009F01882361F186E00E944E7180919101F3 |
:10D6300099279F938F938091CD089091CE086AE0AF |
:10D6400070E00E94677A7F936F938FED90E09F93D5 |
:10D650008F9380916A0890916B089F938F938CE5CC |
:10D6600098E09F938F93DF93CF93E091B703F0916E |
:10D67000B80309958DB79EB70C968DBF12C086E092 |
:10D680000E944E718AE698E09F938F93DF93CF9329 |
:10D69000E091B703F091B80309950F900F900F90A8 |
:10D6A0000F90809171038823F9F086E00E944E71FB |
:10D6B0008091710399279F938F9381E798E09F93BF |
:10D6C0008F93DF93CF93E091B703F091B80309955F |
:10D6D0002DB73EB72A5F3F4F2DBF80918F02882321 |
:10D6E00019F083E58093B30180E10E944E7180912F |
:10D6F000B5019091B6016CE370E00E94677A9F9348 |
:10D700008F938091B5019091B6016CE370E00E9417 |
:10D71000677A7F936F9380914709909148099F930F |
:10D720008F938DE798E09F938F93C1E4D1E7DF93C8 |
:10D73000CF93E091B703F091B80309958091AE08BB |
:10D740002DB73EB7265F3F4F2DBF80FF29C08AE12E |
:10D750000E944E7180913F0199279F938F938091F2 |
:10D760008A0290918B02A0918C02B0918D02BC0133 |
:10D77000CD0124E630E040E050E00E94B07A3F93D3 |
:10D780002F938AE898E09F938F93DF93CF93E09154 |
:10D79000B703F091B80309958DB79EB708968DBF72 |
:10D7A000DF91CF910895CF93DF9380E00E944E7177 |
:10D7B00080918E07992787FD90959F938F938091F5 |
:10D7C0008607992787FD90959F938F9380917E0779 |
:10D7D000992787FD90959F938F938091760799273E |
:10D7E00087FD90959F938F9381E998E09F938F9306 |
:10D7F000C1E4D1E7DF93CF93E091B703F091B80391 |
:10D80000099580E10E944E712DB73EB7245F3F4FCE |
:10D810002DBF8091AE07992787FD90959F938F9399 |
:10D820008091A607992787FD90959F938F9380916C |
:10D830009E07992787FD90959F938F9380919607D8 |
:10D84000992787FD90959F938F9381EA98E09F9306 |
:10D850008F93DF93CF93E091B703F091B8030995CD |
:10D8600080915A062DB73EB7245F3F4F2DBF8530BC |
:10D8700098F480E10E944E7181EB98E09F938F9322 |
:10D88000DF93CF93E091B703F091B80309950F9020 |
:10D890000F900F900F9018C08730B0F488E10E946D |
:10D8A0004E718FED90E09F938F9382EC98E09F9361 |
:10D8B0008F93DF93CF93E091B703F091B80309956D |
:10D8C0008DB79EB706968DBFDF91CF9108950F93C8 |
:10D8D0001F9380E00E944E712AE030E0809143095E |
:10D8E00090914409B9010E94677A9F938F93809128 |
:10D8F000430990914409B9010E94677A7F936F931D |
:10D900008091230190912401B9010E947B7A9F9319 |
:10D910008F938091230190912401B9010E947B7A19 |
:10D920007F936F938BEC98E09F938F9301E411E7C3 |
:10D930001F930F93E091B703F091B803099580E12D |
:10D940000E944E718DB79EB70C968DBF809147098E |
:10D95000909148099F938F93809145099091460932 |
:10D960009F938F938DED98E09F938F931F930F93C9 |
:10D97000E091B703F091B80309958DB79EB708966B |
:10D980008DBF1F910F910895EF92FF920F931F93F8 |
:10D9900080E00E944E718FEDE82EF12CFF92EF9205 |
:10D9A00080918E0190918F019F938F93809170034E |
:10D9B00099279F938F9389EE98E09F938F9301E42B |
:10D9C00011E71F930F93E091B703F091B803099506 |
:10D9D00080E10E944E718DB79EB70A968DBF8091EF |
:10D9E0006E0399279F938F93FF92EF9280916F031D |
:10D9F00099279F938F938CEF98E09F938F931F931A |
:10DA00000F93E091B703F091B80309958DB79EB7D6 |
:10DA10000A968DBF1F910F91FF90EF9008950F937D |
:10DA20001F9380E00E944E718FE099E09F938F9347 |
:10DA300001E411E71F930F93E091B703F091B8034E |
:10DA4000099580E10E944E710F900F900F900F90FA |
:10DA50008EE199E09F938F931F930F93E091B7030B |
:10DA6000F091B80309950F900F900F900F901F91B0 |
:10DA70000F9108950F931F9380E00E944E718CE2E6 |
:10DA800099E09F938F9301E411E71F930F93E09127 |
:10DA9000B703F091B803099580E10E944E710F9091 |
:10DAA0000F900F900F908BE399E09F938F931F93AC |
:10DAB0000F93E091B703F091B80309950F900F9081 |
:10DAC0000F900F901F910F9108951F93CF93DF93A5 |
:10DAD000182F80914A09C1E4D1E7882391F40E946C |
:10DAE0004E7189E499E09F938F93DF93CF93E091F8 |
:10DAF000B703F091B80309950F900F900F900F9016 |
:10DB000016C080E00E944E718AE499E09F938F9343 |
:10DB100087E599E09F938F93DF93CF93E091B703CD |
:10DB2000F091B80309958DB79EB706968DBF809189 |
:10DB30009803C1E4D1E7882399F480E10E944E71F3 |
:10DB40008EE599E09F938F93DF93CF93E091B70396 |
:10DB5000F091B80309950F900F900F900F9089C026 |
:10DB600080E10E944E718091A50199279F938F9328 |
:10DB700089E699E09F938F93DF93CF93E091B7036A |
:10DB8000F091B80309958DB79EB706968DBF809129 |
:10DB90009B038823E9F088E10E944E7180919B03EA |
:10DBA00099279F938F9380919C0399279F938F939D |
:10DBB00082E799E09F938F93DF93CF93E091B70330 |
:10DBC000F091B80309958DB79EB708968DBF12C026 |
:10DBD00088E10E944E718AE799E09F938F93DF93CB |
:10DBE000CF93E091B703F091B80309950F900F9090 |
:10DBF0000F900F9080918903882331F08EE10E946D |
:10DC00004E7180E899E005C08EE10E944E7183E874 |
:10DC100099E09F938F93DF93CF93E091B703F091B7 |
:10DC2000B80309950F900F900F900F901F3251F489 |
:10DC30009091A501809198039817D8F49F5F9093D5 |
:10DC4000A50109C01F3459F48091A501823088F0E4 |
:10DC500081508093A50181E0809389030AC01F3120 |
:10DC600041F48091A501882321F0809399031092BB |
:10DC70008903DF91CF911F9108951F93CF93DF9375 |
:10DC8000182F80914A09C1E4D1E7882391F40E94BA |
:10DC90004E7186E899E09F938F93DF93CF93E09145 |
:10DCA000B703F091B80309950F900F900F900F9064 |
:10DCB00016C080E00E944E718AE499E09F938F9392 |
:10DCC00084E999E09F938F93DF93CF93E091B7031B |
:10DCD000F091B80309958DB79EB706968DBF8091D8 |
:10DCE0009803882361F480E10E944E718BE999E0EA |
:10DCF0009F938F9381E491E79F938F930FC08091BF |
:10DD0000CB08C1E4D1E7833099F080E10E944E71E5 |
:10DD100086EA99E09F938F93DF93CF93E091B703C7 |
:10DD2000F091B80309950F900F900F900F908AC053 |
:10DD300080E10E944E718091A60199279F938F9355 |
:10DD400081EB99E09F938F93DF93CF93E091B7039B |
:10DD5000F091B80309958DB79EB706968DBF809157 |
:10DD60009B038823E9F088E10E944E7180919B0318 |
:10DD700099279F938F9380919C0399279F938F93CB |
:10DD80008BEB99E09F938F93DF93CF93E091B70351 |
:10DD9000F091B80309958DB79EB708968DBF12C054 |
:10DDA00088E10E944E7183EC99E09F938F93DF93FB |
:10DDB000CF93E091B703F091B80309950F900F90BE |
:10DDC0000F900F9080918A03882331F08EE10E949A |
:10DDD0004E7189EC99E005C08EE10E944E718CEC89 |
:10DDE00099E09F938F93DF93CF93E091B703F091E6 |
:10DDF000B80309950F900F900F900F901F3251F4B8 |
:10DE00009091A601809198039817E0F49F5F9093FA |
:10DE1000A60109C01F3459F48091A601823090F008 |
:10DE200081508093A60181E080938A030BC01F314B |
:10DE300049F48091A601882329F080688093990392 |
:10DE400010928A03DF91CF911F9108950F931F9332 |
:10DE5000CF93DF9380919F01C1E4D1E7882309F438 |
:10DE60007DC080E00E944E718091CA0899279F93DF |
:10DE70008F938091CC0899279F938F938FEC99E093 |
:10DE80009F938F938E01DF93CF93E091B703F0912F |
:10DE9000B80309958DB79EB708968DBF8091CB08C2 |
:10DEA000833031F48CE00E944E718EED99E005C014 |
:10DEB0008CE00E944E7183EE99E09F938F93DF93E5 |
:10DEC000CF93E091B703F091B80309950F900F90AD |
:10DED0000F900F908091C90881FF12C08CE00E94C2 |
:10DEE0004E7188EE99E09F938F931F930F93E0916B |
:10DEF000B703F091B80309950F900F900F900F9012 |
:10DF000080E10E944E718091910199279F938F9398 |
:10DF10008FED90E09F938F938091CF089091D008E0 |
:10DF20009F938F938091CD089091CE086AE070E026 |
:10DF30000E94677A7F936F938DEE99E09F938F9302 |
:10DF400081E491E79F938F93E091B703F091B80339 |
:10DF500009958DB79EB70C968DBF12C082E00E94C6 |
:10DF60004E7180E09AE09F938F93DF93CF93E0917F |
:10DF7000B703F091B80309950F900F900F900F9091 |
:10DF8000DF91CF911F910F910895CF93C82F2091CA |
:10DF90008B0320938C0399278F329105E1F0803316 |
:10DFA00091051CF44F9779F027C08F349105D9F073 |
:10DFB0008F38910509F586E0289FF0011124E35E72 |
:10DFC000F74F849117C086E0289FF0011124E25E8C |
:10DFD000F74F84910FC086E0289FF0011124E15E85 |
:10DFE000F74F849107C086E0289FF0011124E05E7E |
:10DFF000F74F849180938B0390918B0380918C03D6 |
:10E000009813C0E08091A701282F33278F5F80935A |
:10E01000A70120FD04C080918D03C81789F0C0932B |
:10E020008D030E94547190918B0386E0989FF001BC |
:10E030001124EF5DF74F259134918C2FF90109954B |
:10E0400080E090E0CF910895109244091092430926 |
:10E0500010924809109247091092460910924509FA |
:10E060001092490982E390E00E94B81690938F03C2 |
:10E0700080938E030895E82FFF2783E0EE0FFF1FA4 |
:10E080008A95E1F7E159F84F95819F3F19F480E0B7 |
:10E0900090E00895993C18F4892F9927089580817C |
:10E0A00082FF07C08AE0989FC001112488509740E2 |
:10E0B0000895892F99270895A0E0B0E0E2E6F0E7FF |
:10E0C0000C94D47A80918E0390918F030E94C11694 |
:10E0D000882309F4CFC080918E0390918F03C2965C |
:10E0E00090938F0380938E03C0E0D0E07E01BB2429 |
:10E0F0007FEFC72E809149098E3F21F481E0809304 |
:10E10000B20104C08F3F11F4B092B201DD240FE6DA |
:10E1100017E0F801838187FF17C0B3948581893C9C |
:10E1200030F08D2D0E943B70C80FD91F02C0C80F60 |
:10E13000D11DF8018181E80EF11C8681C81610F00E |
:10E14000C82E02C01092B201D394085F1F4FFBE0AB |
:10E15000FD15F8F6C0924909EF2841F52091940386 |
:10E16000309195034091960350919703BB27A52FBB |
:10E17000942F832F9093930380939203AA27BB2716 |
:10E18000281B390B4A0B5B0BCE01AA27BB27280F94 |
:10E19000391F4A1F5B1F20939403309395034093CC |
:10E1A000960350939703C5E0D0E013C0809192038B |
:10E1B000909193038C179D0718F4C81BD90B02C0CC |
:10E1C000C0E0D0E08B2D9927880F991FC80FD91F69 |
:10E1D0002596D0934409C0934309CF3FD10578F4E5 |
:10E1E00080912301909124018C9F90018D9F300D8F |
:10E1F0009C9F300D1124C90164E670E013C0CE016C |
:10E2000096958795969587952091230130912401C5 |
:10E21000289FA001299F500D389F500D1124CA013D |
:10E2200069E170E00E94677A70934609609345093E |
:10E2300080919003909191038C0F9D1F9093910377 |
:10E240008093900352E0813D9507A0F0209147090B |
:10E25000309148092F5F3F4F805D9240E2E0813D61 |
:10E260009E07C0F7909391038093900330934809E1 |
:10E2700020934709E9E0CDB7DEB70C94F07A089512 |
:10E2800008959091A003933240F4E92FFF27EC5AB0 |
:10E29000F64F80839F5F9093A0030895833218F414 |
:10E2A0008D5F8093A003089590E2E7E5F9E08FE1A8 |
:10E2B0009193815087FFFCCF0895CF93CFB723E090 |
:10E2C00031E0F8948091C9008F778093C9008091E4 |
:10E2D000C9008F7B8093C9008091C9008F7D809396 |
:10E2E000C900832F99278093CD002093CC00809183 |
:10E2F000C80082608093C80088E18093C900809143 |
:10E30000CA008F778093CA008091CA008F7B809368 |
:10E31000CA008091CA0080628093CA008091CA00BE |
:10E3200080618093CA008091CA0088608093CA008F |
:10E330008091C90084608093C9008091CA00846084 |
:10E340008093CA008091CA0082608093CA00809145 |
:10E35000C80087FF03C08091CE00F9CF8091C9002B |
:10E3600080688093C9008091C90080648093C9004F |
:10E370000E945471CFBFCF910895282F99278F7095 |
:10E380009070892B31F4209580919F03822B80938C |
:10E390009F0308958091AE01882309F44BC08091BA |
:10E3A000570285FD04C08091B301882381F082E982 |
:10E3B0008093540983E2809355098091B3018823A7 |
:10E3C00009F485E5809356091092B30102C0809349 |
:10E3D00054098091AF018F3071F480919F030E94A6 |
:10E3E000C56F882341F081E98093540980935509D2 |
:10E3F00081E3809356091092AE018091C80085FF99 |
:10E40000FCCF8091C9008F7E8093C9008091C900A4 |
:10E410008E7F8093C90080915409882311F48EEF78 |
:10E4200001C08EE78093CE0080919F038093AF015F |
:10E4300010929F0308951F920F920FB60F9211240E |
:10E440008F939F93EF93FF939091AE01992309F0DF |
:10E4500040C08091A103882361F4809154098823EE |
:10E4600011F483E003C0813999F481E08093A10322 |
:10E470000FC0833099F480915409882349F0909318 |
:10E4800054098091C9008E7F8093C9008EEF1EC011 |
:10E490008091C90081608093C9000EC0833261F40D |
:10E4A0008091C9008E7F8093C9008FEF8093CE004A |
:10E4B00081E08093AE0118C08091A103E82FFF276F |
:10E4C000EC5AF64F8F5F8093A10380818093CE003A |
:10E4D0000BC01092A1031092A2031092A30380918B |
:10E4E000C90080618093C900FF91EF919F918F9146 |
:10E4F0000F900FBE0F901F901895EF92FF920F9301 |
:10E500001F93CF93DF937C018B01EA01452B39F0F8 |
:10E51000F80181918F01F70109952197C9F7E6E08C |
:10E52000CDB7DEB70C94F37AEF92FF920F931F935F |
:10E53000CF93DF937C018B01EA01452B41F0F80179 |
:10E540000F5F1F4F8491F70109952197C1F7E6E00E |
:10E55000CDB7DEB70C94F37A0F931F93CF938C0152 |
:10E56000C62F161634F480E2F8010995C1501C1626 |
:10E57000D4F3CF911F910F9108950F931F93CF93D1 |
:10E580008C01C62F161634F480E3F8010995C150AA |
:10E590001C16D4F3CF911F910F910895A5E3B0E01D |
:10E5A000E4EDF2E70C94CB7A2E96EEADFFAD2E970C |
:10E5B00088249924540180919E03882321F42C9669 |
:10E5C0001FAE1EAE2C97AEE44A2E512C4C0E5D1E93 |
:10E5D0006F01B60105C0153239F00894C11CD11C79 |
:10E5E000F60114911123B9F7A601461B570B31F020 |
:10E5F0002C968EAD9FAD2C970E949472112309F436 |
:10E600006AC20894C11CD11CFF24FDA6FCA67FEFA2 |
:10E61000E72EF9A6F6010894C11CD11C14911537F8 |
:10E6200021F0812F80628837B1F4F0FE0AC0F20138 |
:10E6300024E030E0420E531E80809180A280B3809F |
:10E640000AC0F20142E050E0440E551E80819181E3 |
:10E650004C01AA24BB24103221F489A58823D1F6C9 |
:10E660001DC0133219F458E0F52AD4CF1A3211F034 |
:10E670001D3291F41A3259F4F20182E090E0480E12 |
:10E68000591EE081ECA7EE232CF6E195ECA790E172 |
:10E69000F92AAFEDFA22BECF1B3211F419A7BACF77 |
:10E6A0001E32C1F5F6010894C11CD11C14911A3216 |
:10E6B00079F4F20122E030E0420E531E4081518194 |
:10E6C0003FEF4F3F530714F44FEF5FEFE42EA2CF1D |
:10E6D00040E050E0812F80538A30A0F4CA0163E00B |
:10E6E000880F991F6A95E1F7840F951F480F591FEE |
:10E6F000410F511D40535040F6010894C11CD11CDC |
:10E700001491E8CF8FEF4F3F580714F44FEF5FEFAE |
:10E71000E42E85CF103329F4F4FC7CCF90E2F92A63 |
:10E7200079CF812F81538930D8F440E050E0CA017D |
:10E7300033E0880F991F3A95E1F7840F951F480F32 |
:10E74000591F410F511D40535040F6010894C11C00 |
:10E75000D11C1491812F80538A3048F34CA75FCF8E |
:10E76000183619F4A4E0FA2A55CF1C3619F4B1E092 |
:10E77000FB2A50CF133661F43E010894611C711CD2 |
:10E78000F20122E030E0420E531E808189833CC1B9 |
:10E79000143421F0143611F0193651F5143411F4F3 |
:10E7A00031E0F32AF0FE0AC0F20144E050E0440EEA |
:10E7B000551E80809180A280B3800CC0F20182E05F |
:10E7C00090E0480E591E808191814C01AA2497FC4B |
:10E7D000A094BA2CB7FE0AC0B094A09490948094F0 |
:10E7E000811C911CA11CB11C8DE289A70AE06FC09D |
:10E7F0001F3411F01F3631F41F3411F491E0F92A5F |
:10E8000008E064C0103779F4F201A2E0B0E04A0EEB |
:10E810005B1E808191814C01AA24BB2400E1B0E4FD |
:10E82000FB2A18E753C01337C1F5F20122E030E0AC |
:10E83000420E531E608071806114710489F43E01A0 |
:10E840000894611C711C88E289838EE6F301818340 |
:10E8500085E78B838CE68C838D8389E28E831F8290 |
:10E86000E7FC13C08E2D992787FD9095AC0160E0E1 |
:10E8700070E0C3010E949878009729F0382E36186E |
:10E88000E3140CF0C3C03E2CC1C0F3010190002082 |
:10E89000E9F731973E2E3618B9C0153511F0153706 |
:10E8A00031F4153511F4F1E0FF2A0AE00FC01835F4 |
:10E8B00019F0183709F0A0C000E1F3FE07C0811479 |
:10E8C0009104A104B10411F020E4F22A19A6EDA6E6 |
:10E8D000E7FC02C03FEDF32229E2622E712C6C0EA0 |
:10E8E0007D1E81149104A104B10421F44DA544239B |
:10E8F00009F47BC0802F9927AA27BB278EA79FA743 |
:10E90000A8ABB9AB202E332490E0891690E099068D |
:10E9100091E0A90690E0B90648F0C501B4012EA522 |
:10E920003FA548A959A90E948E7A17C0AFEF8A1651 |
:10E930009104A104B10449F040F0C401B1010E9466 |
:10E94000677A9B014427552708C0882D602F0E94B5 |
:10E950005B7A282F3327442755272AAB3BAB4CAB98 |
:10E960005DAB0A3059F48AA9880F880F880F9AA9DD |
:10E97000990F890F382D381B832F10C0003139F4BF |
:10E980008AA98295807F482D481B842F07C08AA9B9 |
:10E99000880F880F880F582D581B852F90E02EA5C3 |
:10E9A0003FA548A959A982169306A406B50608F002 |
:10E9B00091E08AA89BA8ACA8BDA88A3010F4805D1D |
:10E9C00004C0895A183509F48F7DD3018E933D0117 |
:10E9D000992309F099CF083041F4F3FE06C0803343 |
:10E9E00021F080E3FD0182933F01CE010196382E94 |
:10E9F0003618F8E23F0E0BC0112309F46CC03E013B |
:10EA00000894611C711C198391E0392E19A6032DFD |
:10EA10002DA4231827FC222489A5882311F00F5F39 |
:10EA200002C0F6FC0E5F020DEF2CFF24C7018073BD |
:10EA30009070892B49F48CA5801B682F2C968EAD85 |
:10EA40009FAD2C970E94AC7289A5882331F041E0DC |
:10EA500050E0BE01675D7F4F0AC0E6FE0EC080E356 |
:10EA60008AA71BA742E050E0BE01665D7F4F2C964F |
:10EA70008EAD9FAD2C970E947D72C7018073907000 |
:10EA8000809749F48CA5801B682F2C968EAD9FAD86 |
:10EA90002C970E94BD72622D2C968EAD9FAD2C9747 |
:10EAA0000E94BD72832D992787FD9095AC01B3011B |
:10EAB0002C968EAD9FAD2C970E947D72E4FE89CD81 |
:10EAC0002CA5201B2CA7622F2C968EAD9FAD2C97CA |
:10EAD0000E94AC727ECDE2E1CB5C0C94E77A2FB75A |
:10EAE00040E0F894E0E0F0E081E2809357009491F8 |
:10EAF000E2E0F0E0809357003491E4E0F0E08093AE |
:10EB0000570084912FBF9E3199F4363941F48930F2 |
:10EB100011F441E00DC08A3059F442E009C03739A0 |
:10EB200039F4863011F443E003C0853009F444E041 |
:10EB3000842F992708959FB7F8948091C900877F03 |
:10EB40008093C9008091C9008F7E8093C900809115 |
:10EB5000C9008F778093C9008091C9008F7B809313 |
:10EB6000C9008091C9008F7D8093C9009FBF08951F |
:10EB70001F93CF93DF93182F80919E03882309F46E |
:10EB8000A0C08091AD01181709F49BC080919D032E |
:10EB9000882321F40E946F7580939D0382ED91E09C |
:10EBA00090933D0180933C018CEA9AE09F938F9370 |
:10EBB000C3EED2E1DF93CF93E091B703F091B803B6 |
:10EBC00009950F900F900F900F90812F9927843007 |
:10EBD0009105F1F0853091051CF4892B51F00CC0A2 |
:10EBE00086309105D9F086309105ACF0089741F157 |
:10EBF0002AC088EA9AE002C08FE99AE09F938F9337 |
:10EC0000DF93CF93E091B703F091B803099527C044 |
:10EC10008AE99AE0F3CF82E99AE0F0CF8AE89AE0B5 |
:10EC20009F938F93DF93CF93E091B703F091B80355 |
:10EC3000099588ED91E090933D0180933C010FC0D0 |
:10EC400085E89AE0DBCF89EB9AE09F938F93DF937F |
:10EC5000CF93E091B703F091B803099510E00F90BE |
:10EC60000F900F900F9080919D03843011F08230AF |
:10EC700099F40E949B75812F8150833018F40E9473 |
:10EC8000E2681DC0143019F40E945D7118C018307C |
:10EC9000B1F40E943F7113C0112389F08FEC9AE008 |
:10ECA0009F938F9383EE92E19F938F93E091B703AD |
:10ECB000F091B80309950F900F900F900F9010935B |
:10ECC000AD01DF91CF911F9108950F931F93082FEE |
:10ECD00081E080939E034091AC01E5E3FAE020E0FF |
:10ECE00030E05FE4849199272F5F3F4F829FB0010E |
:10ECF000839F700D929F700D1124462751503196BD |
:10ED000057FFF0CF4093AC01EDE0FAE020E030E0B7 |
:10ED100057E2849199272F5F3F4F829FB001839FD5 |
:10ED2000700D929F700D112446275150319657FF58 |
:10ED3000F0CF4093AC0180919D03882321F40E9481 |
:10ED40006F7580939D038EEC92E79093B803809348 |
:10ED5000B7038091AC01833459F088E190E029E257 |
:10ED60000FB6F894A895809360000FBE20936000C2 |
:10ED7000063091F08AEE9AE09F938F9383EE92E1B2 |
:10ED80009F938F93E091B703F091B80309950F908B |
:10ED90000F900F900F90EECF0E94E70581E690E074 |
:10EDA0009F938F9384E090E09F938F9382E090E015 |
:10EDB0009F938F93809103016AE00E945B7A892F71 |
:10EDC00099279F938F93809103010E945B7A9927E3 |
:10EDD0009F938F9387E09BE09F938F9303EE12E1C5 |
:10EDE0001F930F93E091B703F091B803099585E362 |
:10EDF0009AE09F938F931F930F93E091B703F09145 |
:10EE0000B80309958DE09AE09F938F931F930F931A |
:10EE1000E091B703F091B80309950E94E70583ECF0 |
:10EE20008093810080916F00806280936F008DB726 |
:10EE30009EB746968DBF1F910F9108958091C2068F |
:10EE40008D3338F08091C90887FD03C08CE380932F |
:10EE5000C20680917106882331F08055853618F0FE |
:10EE60008FE780937106089580919E03882309F4AB |
:10EE700082C08091B40381508093B403882309F049 |
:10EE800069C089E18093B4038091C2068E3338F063 |
:10EE90008091C90887FD03C08DE38093C2068091ED |
:10EEA00090028238A0F58091580290915902805DBD |
:10EEB000974020F080914909843620F41092B603DF |
:10EEC0001092B5032091B5033091B6032115310599 |
:10EED000B1F1C90101979093B6038093B5034197AF |
:10EEE00098F18091C90884FF2FC0809156028460F8 |
:10EEF000809356028091D70887FF26C080919C039B |
:10EF0000882311F13093B6032093B5031DC080917F |
:10EF10009002853BC8F09091C20684E1989FC001A1 |
:10EF2000112440962091B5033091B6032817390774 |
:10EF300030F42F5F3F4F3093B6032093B503809199 |
:10EF400056028B7F809356028091AC01833411F07E |
:10EF500010929E038091B001882321F0815080930C |
:10EF6000B00108958BE48093B0018091AD018430AD |
:10EF700011F40E94CA7108951F920F920FB60F925A |
:10EF800011242F933F934F935F936F937F938F93AE |
:10EF90009F93AF93BF93EF93FF932091CE00809107 |
:10EFA000BF018823B1F02093C6008091BF01823059 |
:10EFB00029F52F3F19F58FEF94E3ACE0B0E0C2974D |
:10EFC000A109B109B7FFFBCF8091FA038093CE006E |
:10EFD00015C09091AD01892F8150833020F4822F8C |
:10EFE0000E9439690BC0943021F4822F0E94BD71B8 |
:10EFF00005C0983019F4822F0E944071FF91EF9163 |
:10F00000BF91AF919F918F917F916F915F914F9140 |
:10F010003F912F910F900FBE0F901F9018950024D5 |
:10F0200022273327442751E0BB27EE27FF27A0E103 |
:10F03000660F771F881F991F001C221F331F441F54 |
:10F04000660F771F881F991F001C221F331F441F44 |
:10F050002AF4050E2B1F3E1F4F1F04C0051A2B0B51 |
:10F060003E0B4F0B550FBB1FEE1F587F556047FDE2 |
:10F070005250AA95E9F6E695B7955795E695B79556 |
:10F080005795852F9B2F08952227332741E0552739 |
:10F0900068E0880F991F221F331F880F991F221FB6 |
:10F0A000331F1AF4240F351F02C0241B350B440FE5 |
:10F0B000551F487F456037FD42506A9551F7569578 |
:10F0C000479556954795842F0895AA2797FF04C022 |
:10F0D000809590958A1F9A1F77FF04C06095709560 |
:10F0E0006A1F7A1F669F9001779FA001679F300D6E |
:10F0F000411D5A1F300D411D5A1F889FF001999FD5 |
:10F100002E0F3F1F401D511D899F300D411D5A1F5D |
:10F11000300D411D5A1FCA01B901112480CFFB01D6 |
:10F12000DC0102C005900D9241505040D8F708957F |
:10F13000FC014150504030F001900616D1F7319754 |
:10F14000CF010895882799270895A0E0B0E0EBEA61 |
:10F15000F8E70C94D37A6C017B01EA0159012197FD |
:10F160008FEFCF3FD80789F086010894C11CD11CCE |
:10F17000C7010894E11CF11CF5010995F801808391 |
:10F180002197FFEFCF3FDF0779F7EAE0CDB7DEB792 |
:10F190000C94EF7ACF92DF92EF92FF920F931F932E |
:10F1A0007C016B01FB010995082FC7010196F6014F |
:10F1B0000995182FC8011F910F91FF90EF90DF90D4 |
:10F1C000CF900895A0E0B0E0E8EEF8E70C94D57A8F |
:10F1D0008C017B01EA01690121978FEFCF3FD807AE |
:10F1E00071F0F70121917F01C8010F5F1F4F622F5E |
:10F1F000F60109952197FFEFCF3FDF0791F7E8E090 |
:10F20000CDB7DEB70C94F17ACF92DF92EF92FF92F6 |
:10F210000F931F936C018B017A01FA010995812FDD |
:10F220009927682FC6010196F70109951F910F9143 |
:10F23000FF90EF90DF90CF9008955058BB27AA27FA |
:10F240000ED0E0C0D1D030F0D6D020F031F49F3FC6 |
:10F2500011F41EF4C6C00EF4E095E7FBBCC0E92F24 |
:10F26000E2D080F3BA17620773078407950718F096 |
:10F2700071F49EF5FAC00EF4E0950B2EBA2FA02D76 |
:10F280000B01B90190010C01CA01A0011124FF2753 |
:10F29000591B99F0593F50F4503E68F11A16F0404E |
:10F2A000A22F232F342F4427585FF3CF469537954D |
:10F2B0002795A795F0405395C9F77EF41F16BA0B12 |
:10F2C000620B730B840BBAF09150A1F0FF0FBB1FC0 |
:10F2D000661F771F881FC2F70EC0BA0F621F731F09 |
:10F2E000841F48F4879577956795B795F7959E3F66 |
:10F2F00008F0B3CF9395880F08F09927EE0F9795F4 |
:10F300008795089598D088F09F5790F0B92F992746 |
:10F31000B751A0F0D1F0660F771F881F991F1AF020 |
:10F32000BA95C9F712C0B13081F09FD0B1E008950D |
:10F330009CC0672F782F8827B85F39F0B93FCCF38E |
:10F34000869577956795B395D9F73EF49095809516 |
:10F35000709561957F4F8F4F9F4F0895E89409C036 |
:10F3600097FB3EF490958095709561957F4F8F4FF8 |
:10F370009F4F9923A9F0F92F96E9BB279395F6950E |
:10F38000879577956795B795F111F8CFFAF4BB0F8C |
:10F3900011F460FF1BC06F5F7F4F8F4F9F4F16C0F0 |
:10F3A000882311F096E911C0772321F09EE8872F7A |
:10F3B000762F05C0662371F096E8862F70E060E036 |
:10F3C0002AF09A95660F771F881FDAF7880F9695AF |
:10F3D000879597F9089597F99F6780E870E060E056 |
:10F3E00008959FEF80EC089500240A9416161706DE |
:10F3F00018060906089500240A9412161306140626 |
:10F4000005060895092E0394000C11F4882352F088 |
:10F41000BB0F40F4BF2B11F460FF04C06F5F7F4F40 |
:10F420008F4F9F4F089557FD9058440F551F59F027 |
:10F430005F3F71F04795880F97FB991F61F09F3FE1 |
:10F4400079F087950895121613061406551FF2CF0A |
:10F450004695F1DF08C0161617061806991FF1CF5A |
:10F4600086957105610508940895E894BB27662781 |
:10F470007727CB0197F90895629FD001739FF00120 |
:10F48000829FE00DF11D649FE00DF11D929FF00D34 |
:10F49000839FF00D749FF00D659FF00D9927729F6B |
:10F4A000B00DE11DF91F639FB00DE11DF91FBD01F6 |
:10F4B000CF0111240895991B79E004C0991F961774 |
:10F4C00008F0961B881F7A95C9F780950895AA1BA6 |
:10F4D000BB1B51E107C0AA1FBB1FA617B70710F03F |
:10F4E000A61BB70B881F991F5A95A9F78095909571 |
:10F4F000BC01CD01089597FB092E07260AD077FDA0 |
:10F5000004D0E5DF06D000201AF4709561957F4F96 |
:10F510000895F6F7909581959F4F0895A1E21A2ED0 |
:10F52000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FA7 |
:10F53000A217B307E407F50720F0A21BB30BE40BF7 |
:10F54000F50B661F771F881F991F1A9469F760953E |
:10F550007095809590959B01AC01BD01CF010895F8 |
:10F5600097FB092E05260ED057FD04D0D7DF0AD011 |
:10F57000001C38F450954095309521953F4F4F4FE2 |
:10F580005F4F0895F6F790958095709561957F4F40 |
:10F590008F4F9F4F08952F923F924F925F926F929D |
:10F5A0007F928F929F92AF92BF92CF92DF92EF9213 |
:10F5B000FF920F931F93CF93DF93CDB7DEB7CA1B94 |
:10F5C000DB0B0FB6F894DEBF0FBECDBF09942A88BF |
:10F5D000398848885F846E847D848C849B84AA8467 |
:10F5E000B984C884DF80EE80FD800C811B81AA81F4 |
:10F5F000B981CE0FD11D0FB6F894DEBF0FBECDBFBF |
:10F60000ED010895EE0FFF1F0590F491E02D099490 |
:02F61000FFCF2A |
:10F6120004035E0A010164FF010020FFFFC01FC056 |
:10F622001F0101F40101737373FF03007D0000C425 |
:10F6320009C4099600124167696C650051756164DD |
:10F64200726F0000000000000064000CD201012073 |
:10F652000B050000ECFF0002040607080808070675 |
:10F66200040200FEFCFAF9F8F8F8F9FAFCFE0002CE |
:10F6720004060708086440415A4655326464640A25 |
:10F6820002969696960840403A1030380132FF03AF |
:10F692007F0090D0030090D0030032002064FFFF6F |
:10F6A20064200B0A0D0B0E100B0A0C0F0B1110FA33 |
:10F6B2002068010101010101F7FFFCFF70FF010F4A |
:02F6C2006400E2 |
:00000001FF |
/branches/test_v2.12/V2.04a/Hex-Files/License.txt |
---|
0,0 → 1,69 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + * porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/branches/test_v2.12/V2.04a/Hex-Files/WasIstWas.txt |
---|
0,0 → 1,14 |
+++++++++++++++++++++++++ |
+ Flight-Ctrl: |
+++++++++++++++++++++++++ |
Flight-Ctrl_MEGA1284_Vx_yy.hex |
Flight-Ctrl_MEGA644_Vx_yy.hex |
Aktuelle Firmware |
Wird per serielle Schnittstelle (durch den Bootloader) eingespielt |
Achtung: Die Programme für den ATMEGA1284 dürfen ausschliesslich per Bootloader, also seriell (MKUSB) eingespielt werden und NICHT per ISP |
Warning: do not program the ATMEGA1284 (FC2.1) via SPI. Only use the MKUSB and the Koptertool for update! |
/branches/test_v2.12/V2.04a/License.txt |
---|
0,0 → 1,52 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/branches/test_v2.12/V2.04a/Settings.h |
---|
--- Spektrum.c (nonexistent) |
+++ Spektrum.c (revision 2650) |
@@ -0,0 +1,406 @@ |
+/*####################################################################################### |
+Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit |
+#######################################################################################*/ |
+ |
+#include "Spektrum.h" |
+#include "main.h" |
+ |
+unsigned char SpektrumTimer = 0; |
+ |
+// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt |
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
+unsigned char s_excnt = 0; // Bitcounter for Spektrum-Expander |
+unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander |
+signed char s_exdata[11]; // Data for Spektrum-Expander |
+ |
+void s_update(unsigned char channel, signed int value) // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in |
+{ |
+ if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3; |
+ else PPM_diff[channel] = 0; |
+ PPM_in[channel] = value; |
+} |
+#endif |
+ |
+//############################################################################ |
+// USART1 initialisation from killagreg |
+void SpektrumUartInit(void) |
+//############################################################################ |
+ { |
+ // -- Start of USART1 initialisation for Spekturm seriell-mode |
+ // USART1 Control and Status Register A, B, C and baud rate register |
+ uint8_t sreg = SREG; |
+ |
+ uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1); |
+ |
+ // disable all interrupts before reconfiguration |
+ cli(); |
+ // disable RX-Interrupt |
+ UCSR1B &= ~(1 << RXCIE1); |
+ // disable TX-Interrupt |
+ UCSR1B &= ~(1 << TXCIE1); |
+ // disable DRE-Interrupt |
+ UCSR1B &= ~(1 << UDRIE1); |
+/* |
+ // set direction of RXD1 and TXD1 pins |
+ // set RXD1 (PD2) as an input pin |
+ PORTD |= (1 << PORTD2); |
+ DDRD &= ~(1 << DDD2); |
+ // set TXD1 (PD3) as an output pin |
+ PORTD |= (1 << PORTD3); |
+ DDRD |= (1 << DDD3); |
+*/ |
+ // USART0 Baud Rate Register |
+ // set clock divider |
+ UBRR1H = (uint8_t)(ubrr>>8); |
+ UBRR1L = (uint8_t)ubrr; |
+ // enable double speed operation |
+ UCSR1A |= (1 << U2X1); |
+ // enable receiver and transmitter |
+ //UCSR1B = (1<<RXEN1)|(1<<TXEN1); |
+ |
+ UCSR1B = (1<<RXEN1); |
+ // set asynchronous mode |
+ UCSR1C &= ~(1 << UMSEL11); |
+ UCSR1C &= ~(1 << UMSEL10); |
+ // no parity |
+ UCSR1C &= ~(1 << UPM11); |
+ UCSR1C &= ~(1 << UPM10); |
+ // 1 stop bit |
+ UCSR1C &= ~(1 << USBS1); |
+ // 8-bit |
+ UCSR1B &= ~(1 << UCSZ12); |
+ UCSR1C |= (1 << UCSZ11); |
+ UCSR1C |= (1 << UCSZ10); |
+ // flush receive buffer explicit |
+ while(UCSR1A & (1<<RXC1)) UDR1; |
+ // enable RX-interrupts at the end |
+ UCSR1B |= (1 << RXCIE1); |
+ // -- End of USART1 initialisation |
+ // restore global interrupt flags |
+ |
+ SREG = sreg; |
+ return; |
+ } |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Copyright (c) Rainer Walther |
+// + RC-routines from original MK rc.c (c) H&I |
+// + Useful infos from Walter: http://www.rcgroups.com/forums/showthread.php?t=714299&page=2 |
+// + only for non-profit use |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// |
+// 20080808 rw Modified for Spektrum AR6100 (PPM) |
+// 20080823 rw Add Spektrum satellite receiver on USART1 (644P only) |
+// 20081213 rw Add support for Spektrum DS9 Air-Tx-Module (9 channels) |
+// Replace AR6100-coding with original composit-signal routines |
+// |
+// --- |
+// Entweder Summensignal ODER Spektrum-Receiver anschließen. Nicht beides gleichzeitig betreiben! |
+// Binding is not implemented. Bind with external Receiver. |
+// Servo output J3, J4, J5 not serviced |
+// |
+// Anschuß Spektrum Receiver |
+// Orange: 3V von der FC (keinesfalls an 5V anschließen!) |
+// Schwarz: GND |
+// Grau: RXD1 (Pin 3) auf 10-Pol FC-Stecker |
+// |
+// --- |
+// Satellite-Reciever connected on USART1: |
+// |
+// DX7/DX6i: One data-frame at 115200 baud every 22ms. |
+// DX7se: One data-frame at 115200 baud every 11ms. |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data (FLT-Mode) |
+// byte5: and byte6: channel data (Roll) |
+// byte7: and byte8: channel data (Nick) |
+// byte9: and byte10: channel data (Gier) |
+// byte11: and byte12: channel data (Gear Switch) |
+// byte13: and byte14: channel data (Gas) |
+// byte15: and byte16: channel data (AUX2) |
+// |
+// DS9 (9 Channel): One data-frame at 115200 baud every 11ms, alternating frame 1/2 for CH1-7 / CH8-9 |
+// 1st Frame: |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data |
+// byte5: and byte6: channel data |
+// byte7: and byte8: channel data |
+// byte9: and byte10: channel data |
+// byte11: and byte12: channel data |
+// byte13: and byte14: channel data |
+// byte15: and byte16: channel data |
+// 2nd Frame: |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data |
+// byte5: and byte6: channel data |
+// byte7: and byte8: 0xffff |
+// byte9: and byte10: 0xffff |
+// byte11: and byte12: 0xffff |
+// byte13: and byte14: 0xffff |
+// byte15: and byte16: 0xffff |
+// |
+// Each channel data (16 bit= 2byte, first msb, second lsb) is arranged as: |
+// |
+// Bits: F 0 C3 C2 C1 C0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 |
+// |
+// 0 means a '0' bit |
+// F: 1 = indicates beginning of 2nd frame for CH8-9 (DS9 only) |
+// C3 to C0 is the channel number. 0 to 9 (4 bit, as assigned in the transmitter) |
+// D9 to D0 is the channel data (10 bit) 0xaa..0x200..0x356 for 100% transmitter-travel |
+// |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+#define MIN_FRAMEGAP 68 // 7ms |
+#define MAX_BYTEGAP 3 // 310us |
+ |
+ |
+//############################################################################ |
+// Wird im UART-Interrupt aufgerufen |
+//############################################################################ |
+void SpektrumParser(unsigned char c) |
+{ |
+ static unsigned char Sync=0, FrameCnt=0, ByteHigh=0, ReSync=1, Frame2=0; |
+ unsigned int Channel, index = 0; |
+ signed int signal = 0, tmp; |
+ int bCheckDelay; |
+// c = UDR1; // get data byte |
+ if(ReSync == 1) |
+ { |
+ // wait for beginning of new frame |
+ ReSync = 0; |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ FrameCnt = 0; |
+ Sync = 0; |
+ ByteHigh = 0; |
+ } |
+ else |
+ { |
+ if(!SpektrumTimer) bCheckDelay = 1; else bCheckDelay = 0;//CheckDelay(FrameTimer); |
+ if ( Sync == 0 ) |
+ { |
+ if(bCheckDelay) |
+ { |
+ // nach einer Pause von mind. 7ms erstes Sync-Character gefunden |
+ // Zeichen ignorieren, da Bedeutung unbekannt |
+ Sync = 1; |
+ FrameCnt ++; |
+ SpektrumTimer = MAX_BYTEGAP; |
+ } |
+ else |
+ { |
+ // Zeichen kam vor Ablauf der 7ms Sync-Pause |
+ // warten auf erstes Sync-Zeichen |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ FrameCnt = 0; |
+ Sync = 0; |
+ ByteHigh = 0; |
+ } |
+ } |
+ else if((Sync == 1) && !bCheckDelay) |
+ { |
+ // zweites Sync-Character ignorieren, Bedeutung unbekannt |
+ Sync = 2; |
+ FrameCnt ++; |
+ SpektrumTimer = MAX_BYTEGAP; |
+ } |
+ else if((Sync == 2) && !bCheckDelay) |
+ { |
+ SpektrumTimer = MAX_BYTEGAP; |
+ // Datenbyte high |
+ ByteHigh = c; |
+ if (FrameCnt == 2) |
+ { |
+ // is 1st Byte of Channel-data |
+ // Frame 1 with Channel 1-7 comming next |
+ Frame2 = 0; |
+ if(ByteHigh & 0x80) |
+ { |
+ // DS9: Frame 2 with Channel 8-9 comming next |
+ Frame2 = 1; |
+ } |
+ } |
+ Sync = 3; |
+ FrameCnt ++; |
+ } |
+ else if((Sync == 3) && !bCheckDelay) |
+ { |
+ // Datenbyte low |
+ // High-Byte for next channel comes next |
+ SpektrumTimer = MAX_BYTEGAP; |
+ Sync = 2; |
+ FrameCnt ++; |
+ Channel = ((unsigned int)ByteHigh << 8) | c; |
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM) |
+ { |
+ signal = Channel & 0x3ff; |
+ signal -= 0x200; // Offset, range 0x000..0x3ff? |
+ signal = signal/3; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 2) & 0x0f; |
+ } |
+ else |
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_HI_RES) |
+ { |
+ signal = Channel & 0x7ff; |
+ signal -= 0x400; // Offset, range 0x000..0x7ff? |
+ signal = signal/6; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 3) & 0x0f; |
+ } |
+ else |
+ //if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES) |
+ { |
+ signal = Channel & 0x3ff; |
+ signal -= 360; // Offset, range 0x000..0x3ff? |
+ signal = signal/2; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 2) & 0x0f; |
+ } |
+ |
+ index++; |
+ if(index < 13) |
+ { |
+ // Stabiles Signal |
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
+ if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4) |
+ else if (index == 4) index = 2; |
+#endif |
+ if(abs(signal - PPM_in[index]) < 6) |
+ { |
+ if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
+ { |
+ if(SenderOkay < 200) SenderOkay += 10; |
+ else |
+ { |
+ SenderOkay = 200; |
+ TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
+ } |
+ } |
+ } |
+ tmp = (3 * (PPM_in[index]) + signal) / 4; |
+ if(tmp > signal+1) tmp--; else |
+ if(tmp < signal-1) tmp++; |
+ |
+#ifdef RECEIVER_SPEKTRUM_DX7EXP |
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
+ { |
+ if (signal > 100) // SYNC received |
+ { |
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
+ if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check |
+ { |
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
+ s_update(6,s_exdata[3]); // Elevator (CH6) |
+ s_update(11,s_exdata[4]); // Aileron (CH11) |
+ s_update(12,s_exdata[5]); // Rudder (CH12) |
+ |
+ if (s_excnt == 9) // New Mode (12 Channels) |
+ { |
+ if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5); // Hover Pitch UP (CH8) |
+ if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5); // Hover Pitch DN (CH8) |
+ if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit |
+ else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit |
+ s_update(10,s_exdata[6]); // AUX2 (CH10) |
+ } |
+ } |
+ |
+ s_excnt = 0; // Reset bitcounter |
+ s_exparity = 0; // Reset parity bit |
+ } |
+ |
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection |
+ if (signal < -100) |
+ { |
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
+ } |
+ |
+ } |
+ |
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
+ else if (index == 5) s_update(7,signal); // Gear (CH7) |
+ else if (index == 7) s_update(9,signal); // Hover Throttle (CH9) |
+ |
+#elif defined RECEIVER_SPEKTRUM_DX8EXP |
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
+ { |
+ if (signal > 100) // SYNC received |
+ { |
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
+ if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check |
+ { |
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
+ |
+ if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125); // Reconstruct tripole Elev D/R value (CH6) |
+ else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0); // Reconstruct tripole Elev D/R value (CH6) |
+ else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125); // Reconstruct tripole Elev D/R value (CH6) |
+ |
+ |
+ if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125); // Reconstruct tripole AIL D/R value (CH9) |
+ else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0); // Reconstruct tripole AIL D/R value (CH9) |
+ else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125); // Reconstruct tripole AIL D/R value (CH9) |
+ |
+ s_update(10,s_exdata[5]); // Gear (CH10) |
+ s_update(12,s_exdata[4]); // Mix (CH12) |
+ } |
+ |
+ s_excnt = 0; // Reset bitcounter |
+ s_exparity = 0; // Reset parity bit |
+ } |
+ |
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection |
+ if (signal < -100) |
+ { |
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
+ } |
+ |
+ } |
+ |
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
+ else if (index == 7) s_update(7,signal); // R Trim (CH7) |
+ else if (index == 5) s_update(8,signal); // AUX2 (CH8) |
+ else if (index == 8) s_update(11,signal); // AUX3 (CH11) |
+ |
+#else |
+ if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
+ else PPM_diff[index] = 0; |
+ PPM_in[index] = tmp; |
+#endif |
+ } |
+ else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren |
+ } |
+ else |
+ { |
+ // hier stimmt was nicht: neu synchronisieren |
+ ReSync = 1; |
+ FrameCnt = 0; |
+ Frame2 = 0; |
+ // new frame next, nach fruehestens 7ms erwartet |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ } |
+ |
+ // 16 Bytes eingetroffen -> Komplett |
+ if(FrameCnt >= 16) |
+ { |
+ // Frame complete |
+ if(Frame2 == 0) |
+ { |
+ // Null bedeutet: Neue Daten |
+ // nur beim ersten Frame (CH 0-7) setzen |
+ if(!ReSync) NewPpmData = 0; |
+ } |
+ FrameCnt = 0; |
+ Frame2 = 0; |
+ Sync = 0; |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ } |
+ } |
+} |
+ |
+ |
/branches/test_v2.12/V2.04a/Spektrum.h |
---|
0,0 → 1,12 |
/*####################################################################################### |
Dekodieren eines Spektrum Signals |
#######################################################################################*/ |
#ifndef _SPEKTRUM_H |
#define _SPEKTRUM_H |
void SpektrumUartInit(void); |
void SpektrumBinding(void); |
extern unsigned char SpektrumTimer; |
extern void SpektrumParser(unsigned char c); |
#endif //_RC_H |
/branches/test_v2.12/V2.04a/analog.c |
---|
0,0 → 1,394 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 150; |
volatile int AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0; |
volatile int HiResNick = 2500, HiResRoll = 2500; |
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile long SummenHoehe = 0; |
volatile long StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
signed char ExpandBaro = 0; |
volatile int VarioMeter = 0; |
volatile unsigned int ZaehlMessungen = 0; |
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
volatile unsigned char AdReady = 1; |
unsigned int BaroStep = 500; |
long ExpandBaroStep = 0; |
volatile long HoehenWertF = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char CalAthmospheare = 16; |
unsigned char AD_ACC_Y = 6; |
unsigned char AD_ACC_X = 7; |
#endif |
//####################################################################################### |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ANALOG_ON; |
} |
#define DESIRED_H_ADC 800 |
void CalcExpandBaroStep(void) |
{ |
if(ACC_AltitudeControl) ExpandBaroStep = BaroStep * (long)ExpandBaro; |
else ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4; |
} |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
ExpandBaro = 0; |
CalcExpandBaroStep(); |
off = GetParamByte(PID_PRESSURE_OFFSET); |
if(off < 240) off += 10; |
OCR0A = off; |
OCR0B = 255-off; |
Delay_ms_Mess(150); |
if(MessLuftdruck > DESIRED_H_ADC) off = 240; |
for(; off > 5; off--) |
{ |
OCR0A = off; |
OCR0B = 255-off; |
Delay_ms_Mess(100); |
printf("."); |
if(MessLuftdruck > DESIRED_H_ADC) break; |
} |
DruckOffsetSetting = off; |
SetParamByte(PID_PRESSURE_OFFSET, off); |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 230)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + correction of the altitude error in higher altitudes |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
CalAthmospheare = 16; |
if(ACC_AltitudeControl) |
{ |
if(PlatinenVersion < 23) { if(off < 140) CalAthmospheare += (160 - off) / 26; } |
else { if(off < 170) CalAthmospheare += (188 - off) / 19; } |
} |
Luftdruck = MessLuftdruck * CalAthmospheare; |
#endif |
Delay_ms_Mess(300); |
} |
/* |
void SucheGyroOffset(void) |
{ |
unsigned char i, ready = 0; |
int timeout; |
timeout = SetDelay(2000); |
for(i=140; i != 0; i--) |
{ |
if(ready == 3 && i > 10) i = 9; |
ready = 0; |
if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++; |
if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); |
if(AnalogOffsetNick < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 245;}; |
if(AnalogOffsetRoll < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 245;}; |
if(AnalogOffsetGier < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 245;}; |
while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;} |
AdReady = 0; |
ANALOG_ON; |
while(!AdReady); |
if(i<10) Delay_ms_Mess(10); |
} |
Delay_ms_Mess(70); |
} |
*/ |
/* |
0 n |
1 r |
2 g |
3 y |
4 x |
5 n |
6 r |
7 u |
8 z |
9 L |
10 n |
11 r |
12 g |
13 y |
14 x |
15 n |
16 r |
17 L |
*/ |
//####################################################################################### |
// |
ISR(ADC_vect) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
static signed int subcount = 0; |
static signed int gier1, roll1, nick1, nick_filter, roll_filter; |
static signed int accy, accx; |
static long tmpLuftdruck = 0; |
static char messanzahl_Druck = 0; |
switch(state++) |
{ |
case 0: |
nick1 = ADC; |
kanal = AD_ROLL; |
break; |
case 1: |
roll1 = ADC; |
kanal = AD_GIER; |
break; |
case 2: |
gier1 = ADC; |
kanal = AD_ACC_Y; |
break; |
case 3: |
Aktuell_ay = NeutralAccY - ADC; |
accy = Aktuell_ay; |
kanal = AD_ACC_X; |
break; |
case 4: |
Aktuell_ax = ADC - NeutralAccX; |
accx = Aktuell_ax; |
kanal = AD_NICK; |
break; |
case 5: |
nick1 += ADC; |
kanal = AD_ROLL; |
break; |
case 6: |
roll1 += ADC; |
kanal = AD_UBAT; |
break; |
case 7: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.ExtraConfig & CFG_3_3V_REFERENCE) UBat = (3 * UBat + (11 * ADC) / 30) / 4; // there were some single FC2.1 with 3.3V reference |
else |
#endif |
{ |
static unsigned int tmpVoltage = 0; |
if(!tmpVoltage) tmpVoltage = (10 * ADC); |
if(tmpVoltage <= (10 * ADC)) tmpVoltage += 2; else tmpVoltage -= 2; |
UBat = tmpVoltage / 31; |
} |
kanal = AD_ACC_Z; |
break; |
case 8: |
Aktuell_az = ADC; |
AdWertAccHoch = Aktuell_az - NeutralAccZ - (int) NeutralAccZfine; |
if(!ACC_AltitudeControl) // The Offset must be corrected, because of the ACC-Drift from vibrations |
{ |
if(AdWertAccHoch > 1) |
{ |
if(NeutralAccZ < 750) |
{ |
subcount += 5; |
if(modell_fliegt < 500) subcount += 10; |
if(subcount > 100) { NeutralAccZ++; subcount -= 100;} |
} |
} |
else if(AdWertAccHoch < -1) |
{ |
if(NeutralAccZ > 550) |
{ |
subcount -= 5; |
if(modell_fliegt < 500) subcount -= 10; |
if(subcount < -100) { NeutralAccZ--; subcount += 100;} |
} |
} |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else |
if(CosAttitude > 8192 - 50) // horizontal leveled within 6° |
{ |
if(AdWertAccHoch > 1) |
{ |
if(++subcount > 5000) |
{ |
if(NeutralAccZfine < 6) NeutralAccZfine++; |
subcount -= 5000; |
} |
} |
else |
if(AdWertAccHoch < -1) |
{ |
if(--subcount < -5000) |
{ |
if(NeutralAccZfine > -6) NeutralAccZfine--; |
subcount += 5000; |
} |
} |
} |
#endif |
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
kanal = AD_DRUCK; |
break; |
// "case 9:" fehlt hier absichtlich |
case 10: |
nick1 += ADC; |
kanal = AD_ROLL; |
break; |
case 11: |
roll1 += ADC; |
kanal = AD_GIER; |
break; |
case 12: |
/* if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2; |
else |
if(PlatinenVersion >= 20) AdWertGier = 2047 - (ADC + gier1); |
else AdWertGier = (ADC + gier1); |
*/ |
AdWertGier = 2047 - (ADC + gier1); |
kanal = AD_ACC_Y; |
break; |
case 13: |
Aktuell_ay = NeutralAccY - ADC; |
AdWertAccRoll = (Aktuell_ay + accy); |
kanal = AD_ACC_X; |
break; |
case 14: |
Aktuell_ax = ADC - NeutralAccX; |
AdWertAccNick = (Aktuell_ax + accx); |
kanal = AD_NICK; |
break; |
case 15: |
nick1 += ADC; |
//if(PlatinenVersion == 10) nick1 *= 2; else |
nick1 *= 4; |
AdWertNick = nick1 / 8; |
nick_filter = (nick_filter + nick1) / 2; |
HiResNick = nick_filter - AdNeutralNick; |
AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2; |
kanal = AD_ROLL; |
break; |
case 16: |
roll1 += ADC; |
//if(PlatinenVersion == 10) roll1 *= 2; else |
roll1 *= 4; |
AdWertRoll = roll1 / 8; |
roll_filter = (roll_filter + roll1) / 2; |
HiResRoll = roll_filter - AdNeutralRoll; |
AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2; |
kanal = AD_DRUCK; |
break; |
case 17: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
HoehenWertF = (ACC_AltitudeFusion(0) + SA_FILTER/2)/SA_FILTER; // cm |
} |
else HoehenWertF = HoehenWert; |
#else |
HoehenWertF = HoehenWert; |
#endif |
state = 0; |
AdReady = 1; |
ZaehlMessungen++; |
// "break" fehlt hier absichtlich |
case 9: |
MessLuftdruck = ADC; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
// ExpandBaroStep = BaroStep * (long)ExpandBaro; // wird in fc.c aufgerufen |
// tmpLuftdruck = MessLuftdruck - BaroStep * (long)ExpandBaro; // -523 counts per offset step |
tmpLuftdruck = MessLuftdruck - ExpandBaroStep; // -523 counts per offset step |
Luftdruck -= Luftdruck / CalAthmospheare; // 16 |
Luftdruck += tmpLuftdruck; |
HoehenWert = StartLuftdruck - Luftdruck; // cm |
} |
else |
#endif |
{ // old version (until FC V2.1) |
tmpLuftdruck += MessLuftdruck; |
if(++messanzahl_Druck >= 16) // war bis 0.86 "18" |
{ |
signed int tmp; |
// Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * BaroStep) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step |
// ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4; // wird in fc.c aufgerufen |
Luftdruck = (7 * Luftdruck + tmpLuftdruck - ExpandBaroStep) / 8; // -523.19 counts per 10 counts offset step |
HoehenWert = StartLuftdruck - Luftdruck; |
SummenHoehe -= SummenHoehe/SM_FILTER; |
SummenHoehe += HoehenWert; |
tmp = (HoehenWert - SummenHoehe/SM_FILTER); |
if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024; |
if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16; |
else VarioMeter = (31 * VarioMeter + 8 * tmp)/32; |
tmpLuftdruck /= 2; |
messanzahl_Druck = 16/2; |
} |
} |
kanal = AD_NICK; |
break; |
default: |
kanal = 0; state = 0; kanal = AD_NICK; |
break; |
} |
ADMUX = kanal; |
if(state != 0) ANALOG_ON; |
} |
/branches/test_v2.12/V2.04a/analog.h |
---|
0,0 → 1,58 |
#ifndef _ANALOG_H |
#define _ANALOG_H |
/*####################################################################################### |
#######################################################################################*/ |
#define SM_FILTER 16 |
#define SA_FILTER 512 |
extern volatile int UBat; |
extern volatile int AdWertNick, AdWertRoll, AdWertGier; |
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch; |
extern volatile int HiResNick, HiResRoll; |
extern volatile int AdWertNickFilter, AdWertRollFilter, AdWertGierFilter; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile long SummenHoehe; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern signed char ExpandBaro; |
extern volatile int VarioMeter; |
extern volatile unsigned int MessLuftdruck; |
extern volatile long StartLuftdruck; |
extern volatile char MessanzahlNick; |
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier; |
extern volatile unsigned char AdReady; |
extern unsigned int BaroStep; |
volatile long HoehenWertF; |
unsigned int ReadADC(unsigned char adc_input); |
void ADC_Init(void); |
void SucheLuftruckOffset(void); |
//void SucheGyroOffset(void); |
void CalcExpandBaroStep(void); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char CalAthmospheare; |
#endif |
#define AD_GIER 0 |
#define AD_ROLL 1 |
#define AD_NICK 2 |
#define AD_DRUCK 3 |
#define AD_UBAT 4 |
#define AD_ACC_Z 5 |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char AD_ACC_Y; |
extern unsigned char AD_ACC_X; |
#else |
#define AD_ACC_Y 6 |
#define AD_ACC_X 7 |
#endif |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
//Signle trigger Mode, Interrupt on |
#endif //_ANALOG_H |
/branches/test_v2.12/V2.04a/capacity.c |
---|
0,0 → 1,165 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "capacity.h" |
#include "twimaster.h" |
#include "main.h" |
#include "timer0.h" |
#include "analog.h" |
//#define CAPACITY_UPDATE_INTERVAL 10 // 10 ms |
#define CAPACITY_UPDATE_INTERVAL 50 // 50 ms |
#define FC_OFFSET_CURRENT 5 // calculate with a current of 0.5A |
#define BL_OFFSET_CURRENT 2 // calculate with a current of 0.2A |
// global varialbles |
unsigned short update_timer = 0; |
Capacity_t Capacity; |
// initialize capacity calculation |
void Capacity_Init(void) |
{ |
Capacity.ActualCurrent = 0; |
Capacity.UsedCapacity = 0; |
Capacity.ActualPower = 0; |
Capacity.MinOfMaxPWM = 0; |
update_timer = SetDelay(CAPACITY_UPDATE_INTERVAL); |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
unsigned int BL3_Current(unsigned char who) // in 0,1A |
{ |
if(Motor[who].Current == 255) return(0); // invalid |
if(Motor[who].Current <= 200) return(Motor[who].Current); |
else |
{ |
if(Motor[who].Version & MOTOR_STATE_BL30) return(200 + 10 * ((unsigned int)Motor[who].Current-200)); |
else return(Motor[who].Current); |
} |
} |
// called in main loop at a regular interval |
void Capacity_Update(void) |
{ |
unsigned short Current, SetSum; // max value will be 255 * 12 = 3060 |
static unsigned short SubCounter = 0; |
static unsigned short CurrentOffset = 0; |
static unsigned long SumCurrentOffset = 0; |
unsigned char i, NumOfMotors, MinOfMaxPWM; |
if(CheckDelay(update_timer)) |
{ |
update_timer += CAPACITY_UPDATE_INTERVAL; // do not use SetDelay to avoid timing leaks |
// determine sum of all present BL currents and setpoints |
Current = 0; |
SetSum = 0; |
NumOfMotors = 0; |
MinOfMaxPWM = 255; |
if(Capacity.MinOfMaxPWM == 254) RedundanceBlOperation = 1; |
else if(Capacity.MinOfMaxPWM == 255) RedundanceBlOperation = 0; |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK/* && Mixer.Motor[i][MIX_GAS]*/) |
{ |
NumOfMotors++; |
if(Motor[i].Current > 200) |
{ |
Current += BL3_Current(i); // extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
} |
else Current += (unsigned int)(Motor[i].Current); |
SetSum += (unsigned int)(Motor[i].SetPoint); |
if(Motor[i].MaxPWM <= MinOfMaxPWM) MinOfMaxPWM = Motor[i].MaxPWM; else RedundanceBlOperation = 0; |
} |
} |
Capacity.MinOfMaxPWM = MinOfMaxPWM; |
if(SetSum == 0) // if all setpoints are 0 |
{ // determine offsets of motor currents |
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time |
CurrentOffset = (unsigned int)(SumCurrentOffset>>CURRENT_AVERAGE); |
SumCurrentOffset -= CurrentOffset; |
SumCurrentOffset += Current; |
// after averaging set current to static offset |
Current = FC_OFFSET_CURRENT; |
} |
else // some motors are running, includes also motor test condition, where "MotorRunning" is false |
{ // subtract offset |
if(Current > CurrentOffset) Current -= CurrentOffset; |
else Current = 0; |
// add the FC and BL Offsets |
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT; |
} |
// update actual Current |
Capacity.ActualCurrent = Current; |
// update actual Power |
if(Current < 255) Capacity.ActualPower = (UBat * Current) / 100; // in W higher resolution |
else Capacity.ActualPower = (UBat * (Current/4)) / 25; // in W |
// update used capacity |
SubCounter += Current; |
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL |
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL) |
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL) |
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL) |
while(SubCounter > SUB_COUNTER_LIMIT) |
{ |
Capacity.UsedCapacity++; // we have one mAh more |
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part |
} |
} // EOF check delay update timer |
} |
/branches/test_v2.12/V2.04a/capacity.h |
---|
0,0 → 1,18 |
#ifndef _CAPACITY_H |
#define _CAPACITY_H |
typedef struct |
{ |
unsigned short ActualCurrent; // in 0.1A Steps |
unsigned short ActualPower; // in 0.1W |
unsigned short UsedCapacity; // in mAh |
unsigned char MinOfMaxPWM; // BL Power Limit |
} __attribute__((packed)) Capacity_t; |
extern Capacity_t Capacity; |
void Capacity_Init(void); |
void Capacity_Update(void); |
#endif //_CAPACITY_H |
/branches/test_v2.12/V2.04a/debug.c |
---|
0,0 → 1,48 |
#include "main.h" |
#include "debug.h" |
#ifdef DEBUG // only include functions if DEBUG is defined in main.h |
#warning : "### DEBUG-Funktion aktiv ###" |
unsigned char Debug_BufPtr = 0; |
struct str_Debug tDebug; |
unsigned char SendDebugOutput = 0; |
// function called from _printf_P to output character |
void Debug_Putchar(char c) |
{ |
if (!SendDebugOutput) |
{ |
tDebug.Text[Debug_BufPtr++] = c; // copy character to buffer |
if (Debug_BufPtr > 30) Debug_BufPtr = 30; // avoid buffer overflow |
} |
} |
void DebugSend(unsigned char cmd) |
{ |
if (!SendDebugOutput) |
{ |
tDebug.Cmd = cmd; |
tDebug.Text[Debug_BufPtr] = '\0'; // end of text marker |
Debug_BufPtr = 0; // set bufferindex to 0 |
SendDebugOutput = 1; // set flag to trasmit data the next time in serial transmit function |
} |
} |
#endif |
/* |
add the following code block to the serial transmit function |
#ifdef DEBUG // only include functions if DEBUG is defined |
if(SendDebugOutput && UebertragungAbgeschlossen) |
{ |
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug)); |
SendDebugOutput = 0; |
} |
#endif |
*/ |
/branches/test_v2.12/V2.04a/debug.h |
---|
0,0 → 1,60 |
#ifndef _DEBUG_H |
#define _DEBUG_H |
// ---------------------------------------------- |
#define CMD_NONE 0x00 |
#define CMD_RAW_OUTPUT 0x01 |
#define CMD_ERROR_MSG 0x02 |
#define CMD_WARNING_MSG 0x04 |
#define CMD_GREEN_MSG 0x08 |
// debug console in MK-Tool can also handle ANSI ESC seq. |
#define ANSI_ATTRIBUTE_OFF "\033[0m" |
#define ANSI_BOLD "\033[1m" |
#define ANSI_UNDERSCORE "\033[4m" |
#define ANSI_BLINK "\033[5m" |
#define ANSI_INVERSE "\033[7m" |
#define ANSI_INVISIBLE "\033[8m" |
#define ANSI_COLOR_BLACK "\033[30m" |
#define ANSI_COLOR_RED "\033[31m" |
#define ANSI_COLOR_GREEN "\033[32m" |
#define ANSI_COLOR_YELLOW "\033[33m" |
#define ANSI_COLOR_BLUE "\033[34m" |
#define ANSI_COLOR_VIOLETT "\033[35m" |
#define ANSI_COLOR_KOBALTBLUE "\033[36m" |
#define ANSI_COLOR_WHITE "\033[37m" |
#define ANSI_CLEAR "\033[2J" |
#define ANSI_HOME "\033[H" |
// macros for easier use |
#ifdef DEBUG // only include functions if DEBUG is defined in main.h |
#define Debug(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_NONE); } |
#define Debug_Raw(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_RAW_OUTPUT); } |
#define Debug_Warning(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_WARNING_MSG); } |
#define Debug_Error(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_ERROR_MSG); } |
#define Debug_OK(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_GREEN_MSG); } |
struct str_Debug |
{ |
unsigned char Cmd; // bitcoded command |
char Text[32]; |
}; |
extern struct str_Debug tDebug; |
unsigned char SendDebugOutput; |
void Debug_Putchar(char c); |
void DebugSend(unsigned char cmd); |
#else // dummy macros (won't waste flash, if #DEBUG is disabled) |
#define Debug(format, args...) ; |
#define Debug_Raw(format, args...) ; |
#define Debug_Warning(format, args...) ; |
#define Debug_Error(format, args...) ; |
#define Debug_OK(format, args...) ; |
#endif |
// ---------------------------------------------- |
#endif |
/branches/test_v2.12/V2.04a/eeprom.c |
---|
0,0 → 1,663 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#ifndef EEMEM |
#define EEMEM __attribute__ ((section (".eeprom"))) |
#endif |
#include <avr/eeprom.h> |
#include <string.h> |
#include "eeprom.h" |
#include "uart.h" |
#include "led.h" |
#include "main.h" |
#include "fc.h" |
#include "twimaster.h" |
paramset_t EE_Parameter; |
MixerTable_t Mixer; |
uint8_t RequiredMotors; |
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t i; |
for(i=0; i<len; i++) |
{ |
crc += pBuffer[i]; |
} |
return crc; |
} |
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t off; |
for(off=0; off<len; off++) |
{ |
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));; |
} |
return crc; |
} |
void ParamSet_DefaultStickMapping(void) |
{ |
EE_Parameter.Kanalbelegung[K_GAS] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_NICK] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.Kanalbelegung[K_POTI5] = 9; |
EE_Parameter.Kanalbelegung[K_POTI6] = 10; |
EE_Parameter.Kanalbelegung[K_POTI7] = 11; |
EE_Parameter.Kanalbelegung[K_POTI8] = 12; |
} |
/***************************************************/ |
/* Default Values for parameter set 1 */ |
/***************************************************/ |
void CommonDefaults(void) |
{ |
EE_Parameter.Revision = EEPARAM_REVISION; |
memset(EE_Parameter.Name,0,12); // delete name |
// if(PlatinenVersion >= 20) |
{ |
EE_Parameter.Gyro_D = 10; |
EE_Parameter.Driftkomp = 0; |
EE_Parameter.GyroAccFaktor = 27; |
EE_Parameter.WinkelUmschlagNick = 78; |
EE_Parameter.WinkelUmschlagRoll = 78; |
} |
/* else |
{ |
EE_Parameter.Gyro_D = 3; |
EE_Parameter.Driftkomp = 32; |
EE_Parameter.GyroAccFaktor = 30; |
EE_Parameter.WinkelUmschlagNick = 85; |
EE_Parameter.WinkelUmschlagRoll = 85; |
} |
*/ |
EE_Parameter.GyroAccAbgleich = 32; // 1/k |
EE_Parameter.BitConfig = 0; // Looping usw. |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP | CFG_LEARNABLE_CAREFREE | CFG_NO_RCOFF_BEEPING; |
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL | CFG3_NO_GPSFIX_NO_START;// |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
EE_Parameter.Receiver = RECEIVER_HOTT; |
#else |
EE_Parameter.Receiver = RECEIVER_JETI; |
#endif |
EE_Parameter.MotorSafetySwitch = 0; |
EE_Parameter.ExternalControl = 0; |
EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
EE_Parameter.KompassWirkung = 64; // Wert : 0-247 |
EE_Parameter.HoeheChannel = 5; // Wert : 0-32 |
EE_Parameter.Hoehe_MinGas = 30; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
EE_Parameter.Hoehe_P = 20; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 40; // Wert : 0-247 |
EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-247 |
EE_Parameter.Hoehe_HoverBand = 1; // Wert : 0-247 |
EE_Parameter.Hoehe_GPS_Z = 0; // Wert : 0-247 |
EE_Parameter.Hoehe_StickNeutralPoint = 127;// Wert : 0-247 (0 = Hover-Estimation) |
EE_Parameter.FailSafeTime = 30; // 0 = off |
} |
else |
#endif |
{ |
EE_Parameter.Hoehe_P = 15; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 30; // Wert : 0-247 |
EE_Parameter.Hoehe_ACC_Wirkung = 0; // Wert : 0-247 |
EE_Parameter.Hoehe_HoverBand = 8; // Wert : 0-247 |
EE_Parameter.Hoehe_GPS_Z = 20; // Wert : 0-247 |
EE_Parameter.Hoehe_StickNeutralPoint = 0;// Wert : 0-247 (0 = Hover-Estimation) |
EE_Parameter.FailSafeTime = 0; // 0 = off |
} |
EE_Parameter.Hoehe_Verstaerkung = 15; // Wert : 0-50 (15 -> ca. +/- 5m/sek bei Stick-Voll-Ausschlag) |
EE_Parameter.StartLandChannel = 0; |
EE_Parameter.LandingSpeed = 12; |
EE_Parameter.UserParam1 = 0; // zur freien Verwendung |
EE_Parameter.UserParam2 = 0; // zur freien Verwendung |
EE_Parameter.UserParam3 = 0; // zur freien Verwendung |
EE_Parameter.UserParam4 = 0; // zur freien Verwendung |
EE_Parameter.UserParam5 = 0; // zur freien Verwendung |
EE_Parameter.UserParam6 = 0; // zur freien Verwendung |
EE_Parameter.UserParam7 = 0; // zur freien Verwendung |
EE_Parameter.UserParam8 = 0; // zur freien Verwendung |
EE_Parameter.ServoNickControl = 128; // Wert : 0-247 // Stellung des Servos |
EE_Parameter.ServoNickComp = 50; // Wert : 0-247 // Einfluss Gyro/Servo |
EE_Parameter.ServoCompInvert = 2; // Wert : 0-247 // Richtung Einfluss Gyro/Servo |
EE_Parameter.ServoNickMin = 24; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoNickMax = 230; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoNickRefresh = 3; |
EE_Parameter.Servo3 = 125; |
EE_Parameter.Servo4 = 125; |
EE_Parameter.Servo5 = 125; |
EE_Parameter.ServoRollControl = 128; // Wert : 0-247 // Stellung des Servos |
EE_Parameter.ServoRollComp = 85; // Wert : 0-247 // Einfluss Gyro/Servo |
EE_Parameter.ServoRollMin = 70; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoRollMax = 220; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoManualControlSpeed = 60; |
EE_Parameter.CamOrientation = 0; // Wert : 0-24 -> 0-360 -> 15° steps |
EE_Parameter.J16Bitmask = 0xAA; |
EE_Parameter.J17Bitmask = 0xCC; |
EE_Parameter.WARN_J16_Bitmask = 0x00; |
EE_Parameter.WARN_J17_Bitmask = 0xAA; |
EE_Parameter.J16Timing = 40; |
EE_Parameter.J17Timing = 40; |
EE_Parameter.NaviOut1Parameter = 0; // Photo release in meter |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-247 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.NaviGpsModeChannel = 6; // Kanal 6 |
EE_Parameter.NaviGpsGain = 100; |
EE_Parameter.NaviGpsP = 100; |
EE_Parameter.NaviGpsI = 90; |
EE_Parameter.NaviGpsD = 120; |
EE_Parameter.NaviGpsA = 40; |
EE_Parameter.NaviGpsPLimit = 75; |
EE_Parameter.NaviGpsILimit = 85; |
EE_Parameter.NaviGpsDLimit = 75; |
EE_Parameter.NaviGpsMinSat = 6; |
EE_Parameter.NaviStickThreshold = 8; |
EE_Parameter.NaviWindCorrection = 50; |
EE_Parameter.NaviAccCompensation = 42; |
EE_Parameter.NaviOperatingRadius = 245; |
EE_Parameter.NaviAngleLimitation = 140; |
EE_Parameter.NaviPH_LoginTime = 2; |
EE_Parameter.OrientationAngle = 0; |
EE_Parameter.CareFreeChannel = 0; |
EE_Parameter.NotGas = 65; // Wert : 0-247 // Gaswert bei Empangsverlust (ggf. in Prozent) |
EE_Parameter.NotGasZeit = 90; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.MotorSmooth = 0; |
EE_Parameter.ComingHomeAltitude = 0; // 0 = don't change |
EE_Parameter.MaxAltitude = 150; // 0 = off |
EE_Parameter.AchsKopplung1 = 125; |
EE_Parameter.AchsKopplung2 = 52; |
EE_Parameter.FailsafeChannel = 0; |
EE_Parameter.ServoFilterNick = 0; |
EE_Parameter.ServoFilterRoll = 0; |
EE_Parameter.CompassOffset = 0; |
EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
EE_Parameter.ComingHomeVoltage = 32; |
EE_Parameter.AutoLandingVoltage = 31; |
} |
/* |
void ParamSet_DefaultSet1(void) // sport |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 14; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 12; // Wert : 1-20 |
EE_Parameter.Gyro_P = 80; // Wert : 0-247 |
EE_Parameter.Gyro_I = 150; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.CouplingYawCorrection = 1; |
EE_Parameter.GyroAccAbgleich = 16; // 1/k; |
EE_Parameter.DynamicStability = 100; |
memcpy(EE_Parameter.Name, "Sport\0", 12); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
*/ |
/***************************************************/ |
/* Default Values for parameter set 1 */ |
/***************************************************/ |
void ParamSet_DefaultSet1(void) // normal |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 10; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 6; // Wert : 1-20 |
EE_Parameter.Gyro_P = 90; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.CouplingYawCorrection = 60; |
EE_Parameter.DynamicStability = 75; |
memcpy(EE_Parameter.Name, "Fast",4); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Default Values for parameter set 2 */ |
/***************************************************/ |
void ParamSet_DefaultSet2(void) // Agil |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 8; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 6; // Wert : 1-20 |
EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 16; |
EE_Parameter.CouplingYawCorrection = 70; |
EE_Parameter.DynamicStability = 70; |
memcpy(EE_Parameter.Name, "Agile",5); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Default Values for parameter set 3 */ |
/***************************************************/ |
void ParamSet_DefaultSet3(void) // Easy |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 6; // Wert : 1-20 |
EE_Parameter.Stick_D = 10; // Wert : 0-20 |
EE_Parameter.StickGier_P = 4; // Wert : 1-20 |
EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 16; |
EE_Parameter.CouplingYawCorrection = 70; |
EE_Parameter.DynamicStability = 70; |
memcpy(EE_Parameter.Name, "Easy", 4); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Read Parameter from EEPROM as byte */ |
/***************************************************/ |
uint8_t GetParamByte(uint16_t param_id) |
{ |
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
} |
/***************************************************/ |
/* Write Parameter to EEPROM as byte */ |
/***************************************************/ |
void SetParamByte(uint16_t param_id, uint8_t value) |
{ |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
} |
/***************************************************/ |
/* Read Parameter from EEPROM as word */ |
/***************************************************/ |
uint16_t GetParamWord(uint16_t param_id) |
{ |
return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
} |
/***************************************************/ |
/* Write Parameter to EEPROM as word */ |
/***************************************************/ |
void SetParamWord(uint16_t param_id, uint16_t value) |
{ |
eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
} |
/***************************************************/ |
/* Read Parameter Set from EEPROM */ |
/***************************************************/ |
// number [1..5] |
uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber) |
{ |
uint8_t crc; |
uint16_t eeaddr; |
// range the setnumber |
if((1 > setnumber) || (setnumber > 5)) setnumber = 3; |
// calculate eeprom addr |
eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1); |
// calculate checksum from eeprom |
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1); |
// check crc |
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0; |
// check revision |
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0; |
// read paramset from eeprom |
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
LED_Init(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
return 1; |
} |
/***************************************************/ |
/* Write Parameter Set to EEPROM */ |
/***************************************************/ |
// number [1..5] |
uint8_t ParamSet_WriteToEEProm(uint8_t setnumber) |
{ |
uint8_t crc; |
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom |
{ |
if(setnumber > 5) setnumber = 5; |
if(setnumber < 1) return 0; |
LIBFC_CheckSettings(); |
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) // check the Setting: Not more than 100% emergency gas |
{ |
if(EE_Parameter.NotGas > 99) EE_Parameter.NotGas = 80; // i.e. 80% of Hovergas |
} |
// update checksum |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
// write paramset to eeprom |
eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
// backup channel settings to separate block in eeprom |
eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
// write crc of channel block to eeprom |
crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung)); |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc); |
// update active settings number |
SetActiveParamSet(setnumber); |
LED_Init(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
return 1; |
} |
// wrong revision |
return 0; |
} |
/***************************************************/ |
/* Read MixerTable from EEPROM */ |
/***************************************************/ |
uint8_t MixerTable_ReadFromEEProm(void) |
{ |
uint8_t crc; |
// calculate checksum in eeprom |
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1); |
// check crc |
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0; |
// check revision |
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0; |
// read mixer table |
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
return 1; |
} |
/***************************************************/ |
/* Write Mixer Table to EEPROM */ |
/***************************************************/ |
uint8_t MixerTable_WriteToEEProm(void) |
{ |
if(Mixer.Revision == EEMIXER_REVISION) |
{ |
// update crc |
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
// write to eeprom |
eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
return 1; |
} |
else return 0; |
} |
/***************************************************/ |
/* Default Values for Mixer Table */ |
/***************************************************/ |
void MixerTable_Default(void) // Quadro |
{ |
uint8_t i; |
Mixer.Revision = EEMIXER_REVISION; |
// clear mixer table |
for(i = 0; i < 16; i++) |
{ |
Mixer.Motor[i][MIX_GAS] = 0; |
Mixer.Motor[i][MIX_NICK] = 0; |
Mixer.Motor[i][MIX_ROLL] = 0; |
Mixer.Motor[i][MIX_YAW] = 0; |
} |
// default = Quadro |
Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64; |
Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64; |
Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64; |
Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64; |
memcpy(Mixer.Name, "Quadro\0\0\0\0\0\0", 12); |
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
} |
/***************************************************/ |
/* Get active parameter set */ |
/***************************************************/ |
uint8_t GetActiveParamSet(void) |
{ |
uint8_t setnumber; |
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET)); |
if(setnumber > 5) |
{ |
setnumber = 3; |
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber); |
} |
ActiveParamSet = setnumber; |
return(setnumber); |
} |
/***************************************************/ |
/* Set active parameter set */ |
/***************************************************/ |
void SetActiveParamSet(uint8_t setnumber) |
{ |
if(setnumber > 5) setnumber = 5; |
if(setnumber < 1) setnumber = 1; |
ActiveParamSet = setnumber; |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber); |
} |
/***************************************************/ |
/* Set default parameter set */ |
/***************************************************/ |
void SetDefaultParameter(uint8_t set, uint8_t restore_channels) |
{ |
if(set > 5) set = 5; |
else if(set < 1) set = 1; |
switch(set) |
{ |
case 1: |
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
break; |
case 2: |
ParamSet_DefaultSet2(); // Kamera |
break; |
case 3: |
ParamSet_DefaultSet3(); // Beginner |
break; |
default: |
ParamSet_DefaultSet3(); // Beginner |
break; |
} |
if(restore_channels) |
{ |
uint8_t crc; |
// 1st check for a valid channel backup in eeprom |
crc = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
if(crc == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) ) |
{ |
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
} |
else ParamSet_DefaultStickMapping(); |
} |
else ParamSet_DefaultStickMapping(); |
ParamSet_WriteToEEProm(set); |
} |
/***************************************************/ |
/* Initialize EEPROM Parameter Sets */ |
/***************************************************/ |
void ParamSet_Init(void) |
{ |
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(PlatinenVersion != GetParamByte(PID_HARDWARE_VERSION)) |
{ |
if(PlatinenVersion == 22 && GetParamByte(PID_HARDWARE_VERSION) == 21 && !(PIND & 0x10)) SetParamByte(PID_EE_REVISION,0); // reset the Settings if the Version changed to V2.2 |
SetParamByte(PID_HARDWARE_VERSION,PlatinenVersion); // Remember the Version number |
wdt_enable(WDTO_15MS); // Reset-Commando |
printf("\n\r--> Hardware Version Byte Changed <--"); |
while(1); |
} |
#endif |
if((EEPARAM_REVISION) != GetParamByte(PID_EE_REVISION)) |
{ |
ee_default = 1; // software update or forced by mktool |
} |
// 1st check for a valid channel backup in eeprom |
i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)))) channel_backup = 1; |
// parameter check |
// check all 5 parameter settings |
for (i = 1;i < 6; i++) |
{ |
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom |
{ |
bad_params = 1; |
printf("\n\rGenerating default Parameter Set %d",i); |
switch(i) |
{ |
case 1: |
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
break; |
case 2: |
ParamSet_DefaultSet2(); // Normal |
break; |
default: |
ParamSet_DefaultSet3(); // Easy |
break; |
} |
if(channel_backup) // if we have an channel mapping backup in eeprom |
{ // restore it from eeprom |
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
} |
else |
{ // use default mapping |
ParamSet_DefaultStickMapping(); |
} |
ParamSet_WriteToEEProm(i); |
} |
} |
if(bad_params) // at least one of the parameter settings were invalid |
{ |
// default-Setting is parameter set 3 |
SetActiveParamSet(3); |
} |
// read active parameter set to ParamSet stucture |
i = GetActiveParamSet(); |
ParamSet_ReadFromEEProm(i); |
printf("\n\rUsing Parameter Set %d", i); |
// load mixer table |
if(GetParamByte(PID_EE_REVISION) == 0xff || !MixerTable_ReadFromEEProm() ) |
{ |
printf("\n\rGenerating default Mixer Table"); |
MixerTable_Default(); // Quadro |
MixerTable_WriteToEEProm(); |
} |
if(ee_default) SetParamByte(PID_EE_REVISION, (EEPARAM_REVISION)); |
// determine motornumber |
RequiredMotors = 0; |
for(i = 0; i < 16; i++) |
{ |
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++; |
} |
printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors); |
PrintLine();// ("\n\r==================================="); |
} |
/branches/test_v2.12/V2.04a/eeprom.h |
---|
0,0 → 1,285 |
#ifndef _EEPROM_H |
#define _EEPROM_H |
#include <inttypes.h> |
#include "twimaster.h" |
#define EEPARAM_REVISION 98 // is count up, if paramater stucture has changed (compatibility) |
#define EEMIXER_REVISION 1 // is count up, if mixer stucture has changed (compatibility) |
#define EEPROM_ADR_PARAM_BEGIN 0 |
#define EE_DUMMY 0 // Byte |
#define PID_EE_REVISION 1 // byte |
#define PID_ACTIVE_SET 2 // byte |
#define PID_PRESSURE_OFFSET 3 // byte |
#define PID_ACC_NICK 4 // word |
#define PID_ACC_ROLL 6 // word |
#define PID_ACC_TOP 8 // word |
#define PID_FLIGHT_MINUTES_TOTAL 10 // word |
#define PID_FLIGHT_MINUTES 14 // word |
#define PID_SPEAK_HOTT_CFG 16 // Byte |
#define PID_HARDWARE_VERSION 17 // Byte |
#define EEPROM_ADR_CHANNELS 80 // 80 - 93, 12 bytes + 1 byte crc |
#define EEPROM_ADR_PARAMSET 100 // 100 - 725, 5 * 125 bytes |
#define EEPROM_ADR_MIXERTABLE 1000 // 1000 - 1078, 78 bytes |
#define EEPROM_ADR_BLCONFIG 1200 // 1200 - 1296, 12 * 8 bytes |
#define MIX_GAS 0 |
#define MIX_NICK 1 |
#define MIX_ROLL 2 |
#define MIX_YAW 3 |
typedef struct |
{ |
uint8_t Revision; |
int8_t Name[12]; |
int8_t Motor[16][4]; |
uint8_t crc; |
} __attribute__((packed)) MixerTable_t; |
extern MixerTable_t Mixer; |
extern uint8_t RequiredMotors; |
//GlobalConfig3 |
#define CFG3_NO_SDCARD_NO_START 0x01 |
#define CFG3_DPH_MAX_RADIUS 0x02 |
#define CFG3_VARIO_FAILSAFE 0x04 |
#define CFG3_MOTOR_SWITCH_MODE 0x08 |
#define CFG3_NO_GPSFIX_NO_START 0x10 |
#define CFG3_USE_NC_FOR_OUT1 0x20 |
#define CFG3_SPEAK_ALL 0x40 |
#define CFG3_SERVO_NICK_COMP_OFF 0x80 |
//GlobalConfig |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define CFG_DREHRATEN_BEGRENZER 0x80 |
//BitConfig |
#define CFG_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
#define CFG_MOTOR_BLINK1 0x10 |
#define CFG_MOTOR_OFF_LED1 0x20 |
#define CFG_MOTOR_OFF_LED2 0x40 |
#define CFG_MOTOR_BLINK2 0x80 |
// ExtraConfig |
#define CFG2_HEIGHT_LIMIT 0x01 |
#define CFG2_VARIO_BEEP 0x02 |
#define CFG_SENSITIVE_RC 0x04 |
#define CFG_3_3V_REFERENCE 0x08 |
#define CFG_NO_RCOFF_BEEPING 0x10 |
#define CFG_GPS_AID 0x20 |
#define CFG_LEARNABLE_CAREFREE 0x40 |
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80 |
// bit mask for ParamSet.Config0 |
#define CFG0_AIRPRESS_SENSOR 0x01 |
#define CFG0_HEIGHT_SWITCH 0x02 |
#define CFG0_HEADING_HOLD 0x04 |
#define CFG0_COMPASS_ACTIVE 0x08 |
#define CFG0_COMPASS_FIX 0x10 |
#define CFG0_GPS_ACTIVE 0x20 |
#define CFG0_AXIS_COUPLING_ACTIVE 0x40 |
#define CFG0_ROTARY_RATE_LIMITER 0x80 |
// bitcoding for EE_Parameter.ServoCompInvert |
#define SERVO_NICK_INV 0x01 |
#define SERVO_ROLL_INV 0x02 |
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value |
// defines for the receiver selection |
#define RECEIVER_PPM 0 |
#define RECEIVER_SPEKTRUM 1 |
#define RECEIVER_SPEKTRUM_HI_RES 2 |
#define RECEIVER_SPEKTRUM_LOW_RES 3 |
#define RECEIVER_JETI 4 |
#define RECEIVER_ACT_DSL 5 |
#define RECEIVER_HOTT 6 |
#define RECEIVER_SBUS 7 |
#define RECEIVER_USER 8 |
#define RECEIVER_UNKNOWN 0xFF |
// defines for lookup ParamSet.ChannelAssignment |
#define K_NICK 0 |
#define K_ROLL 1 |
#define K_GAS 2 |
#define K_GIER 3 |
#define K_POTI1 4 |
#define K_POTI2 5 |
#define K_POTI3 6 |
#define K_POTI4 7 |
#define K_POTI5 8 |
#define K_POTI6 9 |
#define K_POTI7 10 |
#define K_POTI8 11 |
// values above 247 representing poti1 to poti8 |
// poti1 = 255 |
// poti2 = 254 |
// poti3 = 253 |
// poti4 = 252 |
// poti5 = 251 |
// poti6 = 250 |
// poti7 = 249 |
// poti8 = 248 |
typedef struct |
{ |
unsigned char Revision; |
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 |
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv |
unsigned char Hoehe_MinGas; // Wert : 0-100 |
unsigned char Luftdruck_D; // Wert : 0-250 |
unsigned char HoeheChannel; // Wert : 0-32 |
unsigned char Hoehe_P; // Wert : 0-32 |
unsigned char Hoehe_Verstaerkung; // Wert : 0-50 |
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250 |
unsigned char Hoehe_HoverBand; // Wert : 0-250 |
unsigned char Hoehe_GPS_Z; // Wert : 0-250 |
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250 |
unsigned char Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char StickGier_P; // Wert : 1-20 |
unsigned char Gas_Min; // Wert : 0-32 |
unsigned char Gas_Max; // Wert : 33-250 |
unsigned char GyroAccFaktor; // Wert : 1-64 |
unsigned char KompassWirkung; // Wert : 0-32 |
unsigned char Gyro_P; // Wert : 10-250 |
unsigned char Gyro_I; // Wert : 0-250 |
unsigned char Gyro_D; // Wert : 0-250 |
unsigned char Gyro_Gier_P; // Wert : 10-250 |
unsigned char Gyro_Gier_I; // Wert : 0-250 |
unsigned char Gyro_Stability; // Wert : 0-16 |
unsigned char UnterspannungsWarnung; // Wert : 0-250 |
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust |
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen |
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D |
unsigned char I_Faktor; // Wert : 0-250 |
unsigned char UserParam1; // Wert : 0-250 |
unsigned char UserParam2; // Wert : 0-250 |
unsigned char UserParam3; // Wert : 0-250 |
unsigned char UserParam4; // Wert : 0-250 |
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo |
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag |
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag |
//--- Seit V0.75 |
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoRollComp; // Wert : 0-250 |
unsigned char ServoRollMin; // Wert : 0-250 |
unsigned char ServoRollMax; // Wert : 0-250 |
//--- |
unsigned char ServoNickRefresh; // Speed of the Servo |
unsigned char ServoManualControlSpeed;// |
unsigned char CamOrientation; // |
unsigned char Servo3; // Value or mapping of the Servo Output |
unsigned char Servo4; // Value or mapping of the Servo Output |
unsigned char Servo5; // Value or mapping of the Servo Output |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag |
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung) |
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt |
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt |
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung) |
unsigned char Driftkomp; |
unsigned char DynamicStability; |
unsigned char UserParam5; // Wert : 0-250 |
unsigned char UserParam6; // Wert : 0-250 |
unsigned char UserParam7; // Wert : 0-250 |
unsigned char UserParam8; // Wert : 0-250 |
//---Output --------------------------------------------- |
unsigned char J16Bitmask; // for the J16 Output |
unsigned char J16Timing; // for the J16 Output |
unsigned char J17Bitmask; // for the J17 Output |
unsigned char J17Timing; // for the J17 Output |
// seit version V0.75c |
unsigned char WARN_J16_Bitmask; // for the J16 Output |
unsigned char WARN_J17_Bitmask; // for the J17 Output |
//---NaviCtrl--------------------------------------------- |
unsigned char NaviOut1Parameter; // for the J16 Output |
unsigned char NaviGpsModeChannel; // Parameters for the Naviboard |
unsigned char NaviGpsGain; |
unsigned char NaviGpsP; |
unsigned char NaviGpsI; |
unsigned char NaviGpsD; |
unsigned char NaviGpsPLimit; |
unsigned char NaviGpsILimit; |
unsigned char NaviGpsDLimit; |
unsigned char NaviGpsA; |
unsigned char NaviGpsMinSat; |
unsigned char NaviStickThreshold; |
unsigned char NaviWindCorrection; |
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation |
unsigned char NaviOperatingRadius; |
unsigned char NaviAngleLimitation; |
unsigned char NaviPH_LoginTime; |
//---Ext.Ctrl--------------------------------------------- |
unsigned char ExternalControl; // for serial Control |
//---CareFree--------------------------------------------- |
unsigned char OrientationAngle; // Where is the front-direction? |
unsigned char CareFreeChannel; // switch for CareFree |
unsigned char MotorSafetySwitch; |
unsigned char MotorSmooth; |
unsigned char ComingHomeAltitude; |
unsigned char FailSafeTime; |
unsigned char MaxAltitude; |
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost" |
unsigned char ServoFilterNick; |
unsigned char ServoFilterRoll; |
unsigned char StartLandChannel; |
unsigned char LandingSpeed; |
unsigned char CompassOffset; |
unsigned char AutoLandingVoltage; // in 0,1V 0 -> disabled |
unsigned char ComingHomeVoltage; // in 0,1V 0 -> disabled |
//------------------------------------------------ |
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen |
unsigned char ExtraConfig; // bitcodiert |
unsigned char GlobalConfig3; // bitcodiert |
char Name[12]; |
unsigned char crc; // must be the last byte! |
} paramset_t; // 127 bytes |
#define PARAMSET_STRUCT_LEN sizeof(paramset_t) |
extern paramset_t EE_Parameter; |
extern uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len); |
extern void ParamSet_Init(void); |
extern void SetDefaultParameter(uint8_t set, uint8_t restore_channels); |
extern uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber); |
extern uint8_t ParamSet_WriteToEEProm(uint8_t setnumber); |
extern uint8_t GetActiveParamSet(void); |
extern void SetActiveParamSet(uint8_t setnumber); |
extern uint8_t MixerTable_ReadFromEEProm(void); |
extern uint8_t MixerTable_WriteToEEProm(void); |
extern uint8_t GetParamByte(uint16_t param_id); |
extern void SetParamByte(uint16_t param_id, uint8_t value); |
extern uint16_t GetParamWord(uint16_t param_id); |
extern void SetParamWord(uint16_t param_id, uint16_t value); |
#endif //_EEPROM_H |
/branches/test_v2.12/V2.04a/fc.c |
---|
0,0 → 1,2279 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "mymath.h" |
#include "isqrt.h" |
unsigned char h,m,s; |
unsigned int BaroExpandActive = 0; |
int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll; |
int TrimNick, TrimRoll; |
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
int Mittelwert_AccNick, Mittelwert_AccRoll; |
unsigned int NeutralAccX=0, NeutralAccY=0; |
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
int NeutralAccZ = 0; |
signed char NeutralAccZfine = 0; |
unsigned char ControlHeading = 0;// in 2° |
long IntegralNick = 0,IntegralNick2 = 0; |
long IntegralRoll = 0,IntegralRoll2 = 0; |
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
long Integral_Gier = 0; |
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
long SummeNick=0,SummeRoll=0; |
volatile long Mess_Integral_Hoch = 0; |
int KompassValue = -1; |
int KompassSollWert = 0; |
//int KompassRichtung = 0; |
char CalculateCompassTimer = 100; |
unsigned char KompassFusion = 32; |
unsigned int KompassSignalSchlecht = 50; |
unsigned char MAX_GAS,MIN_GAS; |
unsigned char HoehenReglerAktiv = 0; |
unsigned char TrichterFlug = 0; |
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
long ErsatzKompass; |
int ErsatzKompassInGrad; // Kompasswert in Grad |
int GierGyroFehler = 0; |
char GyroFaktor,GyroFaktorGier; |
char IntegralFaktor,IntegralFaktorGier; |
int DiffNick,DiffRoll; |
unsigned int StickGasHover = 127; |
int HoverGasMin = 0, HoverGasMax = 1023; |
int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0; |
//int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0; |
unsigned char Poti[9] = {0,0,0,0,0,0,0,0}; |
volatile unsigned char SenderOkay = 0; |
char MotorenEin = 0,StartTrigger = 0; |
long HoehenWert = 0; |
long SollHoehe = 0; |
signed int AltitudeSetpointTrimming = 0; |
long FromNC_AltitudeSetpoint = 0; |
unsigned char FromNC_AltitudeSpeed = 0; |
unsigned char carefree_old = 50; // to make the Beep when switching |
signed char WaypointTrimming = 0; |
int CompassGierSetpoint = 0; |
unsigned char CalibrationDone = 0; |
char NeueKompassRichtungMerken = 0; |
int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
//float Ki = FAKTOR_I; |
int Ki = 10300 / 33; |
unsigned char Looping_Nick = 0,Looping_Roll = 0; |
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
unsigned char Parameter_HoehenSchalter = 0; // Wert : 0-250 |
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
unsigned char Parameter_Hoehe_GPS_Z = 64; // Wert : 0-250 |
unsigned char Parameter_Gyro_D = 8; // Wert : 0-250 |
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250 |
unsigned char Parameter_Gyro_Gier_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_Gier_I = 150; // Wert : 10-250 |
unsigned char Parameter_Gier_P = 2; // Wert : 1-20 |
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20 |
unsigned char Parameter_UserParam1 = 0; |
unsigned char Parameter_UserParam2 = 0; |
unsigned char Parameter_UserParam3 = 0; |
unsigned char Parameter_UserParam4 = 0; |
unsigned char Parameter_UserParam5 = 0; |
unsigned char Parameter_UserParam6 = 0; |
unsigned char Parameter_UserParam7 = 0; |
unsigned char Parameter_UserParam8 = 0; |
unsigned char Parameter_NickControl = 100; |
unsigned char Parameter_ServoNickControl = 100; |
unsigned char Parameter_ServoRollControl = 100; |
unsigned char Parameter_ServoNickComp = 50; |
unsigned char Parameter_ServoRollComp = 85; |
unsigned char Parameter_LoopGasLimit = 70; |
unsigned char Parameter_AchsKopplung1 = 90; |
unsigned char Parameter_AchsKopplung2 = 65; |
unsigned char Parameter_CouplingYawCorrection = 64; |
//unsigned char Parameter_AchsGegenKopplung1 = 0; |
unsigned char Parameter_DynamicStability = 100; |
unsigned char Parameter_J16Bitmask; // for the J16 Output |
unsigned char Parameter_J16Timing; // for the J16 Output |
unsigned char Parameter_J17Bitmask; // for the J17 Output |
unsigned char Parameter_J17Timing; // for the J17 Output |
unsigned char Parameter_NaviGpsGain; |
unsigned char Parameter_NaviGpsP; |
unsigned char Parameter_NaviGpsI; |
unsigned char Parameter_NaviGpsD; |
unsigned char Parameter_NaviGpsA; |
unsigned char Parameter_NaviOperatingRadius; |
unsigned char Parameter_NaviWindCorrection; |
unsigned char Parameter_NaviSpeedCompensation; |
unsigned char Parameter_ExternalControl; |
unsigned char Parameter_GlobalConfig; |
unsigned char Parameter_ExtraConfig; |
unsigned char Parameter_MaximumAltitude; |
unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
unsigned char CareFree = 0; |
const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps |
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
int MaxStickNick = 0,MaxStickRoll = 0; |
unsigned int modell_fliegt = 0; |
volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0; |
long GIER_GRAD_FAKTOR = 1291; |
signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
signed int tmp_motorwert[MAX_MOTORS]; |
char VarioCharacter = ' '; |
unsigned int HooverGasEmergencyPercent = 0; // The gas value for Emergency landing |
unsigned int GasIsZeroCnt = 0; // to detect that the gas-stick is down for a while |
signed int Variance = 0; |
signed int CosAttitude; // for projection of hoover gas |
unsigned char ACC_AltitudeControl = 0; |
unsigned char LowVoltageLandingActive = 0; |
unsigned char LowVoltageHomeActive = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define OPA_OFFSET_STEP 5 |
#else |
#define OPA_OFFSET_STEP 10 |
#endif |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Debugwerte zuordnen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
void CopyDebugValues(void) |
{ |
DebugOut.Analog[0] = ToNaviCtrl.IntegralNick;//IntegralNick / (EE_Parameter.GyroAccFaktor * 4); |
DebugOut.Analog[1] = ToNaviCtrl.IntegralRoll;//IntegralRoll / (EE_Parameter.GyroAccFaktor * 4); |
DebugOut.Analog[2] = Mittelwert_AccNick / 4; |
DebugOut.Analog[3] = Mittelwert_AccRoll / 4; |
DebugOut.Analog[4] = (signed int) AdNeutralGier - AdWertGier; |
DebugOut.Analog[5] = HoehenWert/10; |
DebugOut.Analog[6] = Aktuell_az;//AdWertAccHoch;//(Mess_Integral_Hoch / 512); |
DebugOut.Analog[8] = KompassValue; |
DebugOut.Analog[9] = UBat; |
DebugOut.Analog[10] = SenderOkay; |
DebugOut.Analog[11] = ErsatzKompassInGrad; |
DebugOut.Analog[12] = Motor[0].SetPoint; |
DebugOut.Analog[13] = Motor[1].SetPoint; |
DebugOut.Analog[14] = Motor[2].SetPoint; |
DebugOut.Analog[15] = Motor[3].SetPoint; |
DebugOut.Analog[20] = ServoNickValue; |
DebugOut.Analog[21] = HoverGas; |
DebugOut.Analog[22] = Capacity.ActualCurrent; |
DebugOut.Analog[23] = Capacity.UsedCapacity; |
DebugOut.Analog[24] = SollHoehe/10; |
DebugOut.Analog[27] = KompassSollWert; |
DebugOut.Analog[29] = Capacity.MinOfMaxPWM; |
DebugOut.Analog[30] = GPS_Nick; |
DebugOut.Analog[31] = GPS_Roll; |
if(VersionInfo.HardwareError[0] || VersionInfo.HardwareError[1]) DebugOut.Status[1] |= 1; else DebugOut.Status[1] &= 0xfe; |
//DebugOut.Analog[16] = MinBlTemperture; |
//DebugOut.Analog[17] = MaxBlTemperture; |
//DebugOut.Analog[16] = Variance; |
//DebugOut.Analog[17] = VarioMeter; |
//DebugOut.Analog[16] = GasIsZeroCnt; |
//DebugOut.Analog[18] = HoehenWertF; |
//DebugOut.Analog[25] = Parameter_Hoehe_P; |
//DebugOut.Analog[26] = Parameter_Luftdruck_D; |
} |
void Piep(unsigned char Anzahl, unsigned int dauer) |
{ |
unsigned int wait = 0; |
if(MotorenEin) return; //auf keinen Fall im Flug! |
GRN_OFF; |
while(Anzahl--) |
{ |
beeptime = dauer; |
wait = dauer; |
while(beeptime || wait) |
{ |
if(UpdateMotor) |
{ |
UpdateMotor = 0; |
if(!beeptime) wait--; |
LIBFC_Polling(); |
}; |
} |
} |
GRN_ON; |
} |
//############################################################################ |
// Messwerte beim Ermitteln der Nullage |
void CalibrierMittelwert(void) |
//############################################################################ |
{ |
unsigned char i; |
// if(PlatinenVersion == 13) SucheGyroOffset(); |
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
ANALOG_OFF; |
MesswertNick = AdWertNick; |
MesswertRoll = AdWertRoll; |
MesswertGier = AdWertGier; |
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll; |
// ADC einschalten |
ANALOG_ON; |
for(i=0;i<8;i++) |
{ |
int tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127; |
LIMIT_MIN_MAX(tmp, 0, 255); |
if(Poti[i] > tmp) Poti[i]--; else if(Poti[i] < tmp) Poti[i]++; |
} |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
} |
//############################################################################ |
// Nullwerte ermitteln |
// Parameter: 0 -> after switch on (ignore ACC-Z fault) |
// Parameter: 1 -> before Start |
// Parameter: 2 -> calibrate and store ACC |
unsigned char SetNeutral(unsigned char AdjustmentMode) // retuns: "sucess" |
//############################################################################ |
{ |
unsigned char i, sucess = 1; |
unsigned int gier_neutral = 0, nick_neutral = 0, roll_neutral = 0, acc_z_neutral = 0, barotest; |
VersionInfo.HardwareError[0] = 0; |
// HEF4017Reset_ON; |
NeutralAccX = 0; |
NeutralAccY = 0; |
NeutralAccZ = 0; |
NeutralAccZfine = 0; |
AdNeutralNick = 0; |
AdNeutralRoll = 0; |
AdNeutralGier = 0; |
Parameter_AchsKopplung1 = 0; |
Parameter_AchsKopplung2 = 0; |
ExpandBaro = 0; |
CalibrierMittelwert(); |
Delay_ms_Mess(100); |
CalibrierMittelwert(); |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750) || ExpandBaro) SucheLuftruckOffset(); |
} |
barotest = MessLuftdruck; |
#define NEUTRAL_FILTER 32 |
OCR0A += OPA_OFFSET_STEP; |
OCR0B = 255 - OCR0A; |
for(i=0; i<NEUTRAL_FILTER; i++) |
{ |
Delay_ms_Mess(10); |
gier_neutral += AdWertGier; |
nick_neutral += AdWertNick; |
roll_neutral += AdWertRoll; |
acc_z_neutral += Aktuell_az; |
} |
if(MessLuftdruck < 1010 && MessLuftdruck > 20) BaroStep = barotest - MessLuftdruck; |
OCR0A -= OPA_OFFSET_STEP; |
OCR0B = 255 - OCR0A; |
AdNeutralNick = (nick_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8); |
AdNeutralRoll = (roll_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8); |
AdNeutralGier = (gier_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER); |
NeutralAccZ = (acc_z_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER); |
StartNeutralRoll = AdNeutralRoll; |
StartNeutralNick = AdNeutralNick; |
if(AdjustmentMode == 2) |
{ |
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
// Save ACC neutral settings to eeprom |
SetParamWord(PID_ACC_NICK, (uint16_t)NeutralAccX); |
SetParamWord(PID_ACC_ROLL, (uint16_t)NeutralAccY); |
SetParamWord(PID_ACC_TOP, (uint16_t)NeutralAccZ); |
} |
else |
{ |
// restore from eeprom |
NeutralAccX = (int16_t)GetParamWord(PID_ACC_NICK); |
NeutralAccY = (int16_t)GetParamWord(PID_ACC_ROLL); |
// strange settings? |
if(((unsigned int) NeutralAccX > 2048) || ((unsigned int) NeutralAccY > 2048)/* || ((unsigned int) NeutralAccZ > 1024)*/) |
{ |
printf("\n\rACC not calibrated!\r\n"); |
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
sucess = 0; |
} |
} |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
MesswertNick = 0; |
MesswertRoll = 0; |
MesswertGier = 0; |
Delay_ms_Mess(200); |
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll; |
IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
Mess_IntegralNick = IntegralNick; |
Mess_IntegralRoll = IntegralRoll; |
Mess_Integral_Gier = 0; |
KompassSollWert = KompassValue; |
KompassSignalSchlecht = 100; |
beeptime = 50; |
Umschlag180Nick = ((long) EE_Parameter.WinkelUmschlagNick * 2500L) + 15000L; |
Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L; |
ExternHoehenValue = 0; |
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; |
GierGyroFehler = 0; |
LED_Init(); |
if(AdjustmentMode != 0) FC_StatusFlags |= FC_STATUS_CALIBRATE; |
FromNaviCtrl_Value.Kalman_K = -1; |
FromNaviCtrl_Value.Kalman_MaxDrift = 0; |
FromNaviCtrl_Value.Kalman_MaxFusion = 32; |
for(i=0;i<8;i++) |
{ |
Poti[i] = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127; |
} |
SenderOkay = 100; |
if(ServoActive) DDRD |=0x80; // enable J7 -> Servo signal |
else |
{ |
if((EE_Parameter.ServoCompInvert & SERVO_NICK_INV) && (EE_Parameter.ServoCompInvert & SERVO_RELATIVE)) NickServoValue = 12000;//((128 + 60) * 4 * 16); // neutral position = upper 1/4// else |
else NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
CalculateServoSignals = 1; |
CalculateServo(); // nick |
CalculateServo(); // roll |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
signed int tilt1, tilt2; |
tilt1 = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
tilt2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
tilt1 = (int16_t)ihypot(tilt1,tilt2); // tilt angle over all |
CosAttitude = c_cos_8192(tilt1); |
NeutralAccZ = (long)((long) (NeutralAccZ - 512) * 8192 + 4096) / CosAttitude + 512; |
if(tilt1 > 20) sucess = 0; // calibration must be within 20° Tilt angle |
if(AdjustmentMode != 0 && ACC_AltitudeControl) if((NeutralAccZ < 682 - 30) || (NeutralAccZ > 682 + 35)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; sucess = 0;}; |
#else |
NeutralAccZ = (int16_t)GetParamWord(PID_ACC_TOP); |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
#endif |
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; }; |
if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; }; |
if((AdNeutralGier < 150 * 2) || (AdNeutralGier > 850 * 2)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; }; |
if((NeutralAccX < 300) || (NeutralAccX > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_NICK; }; |
if((NeutralAccY < 300) || (NeutralAccY > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_ROLL; }; |
if((NeutralAccZ < 512) || (NeutralAccZ > 850)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; }; |
if(VersionInfo.HardwareError[0]) sucess = 0; |
carefree_old = 70; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
ACC_AltitudeFusion(2); // initalisation |
#endif |
StartLuftdruck = Luftdruck; |
VarioMeter = 0; |
SummenHoehe = 0; Mess_Integral_Hoch = 0; |
DebugOut.Analog[28] = 0; // I2C-Counter |
CalcExpandBaroStep(); |
return(sucess); |
} |
//############################################################################ |
// Bearbeitet die Messwerte |
void Mittelwert(void) |
//############################################################################ |
{ |
static signed long tmpl,tmpl2,tmpl3,tmpl4; |
static signed int oldNick, oldRoll, d2Roll, d2Nick; |
signed long winkel_nick, winkel_roll; |
MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
MesswertNick = (signed int) AdWertNickFilter / 8; |
MesswertRoll = (signed int) AdWertRollFilter / 8; |
RohMesswertNick = MesswertNick; |
RohMesswertRoll = MesswertRoll; |
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mittelwert_AccNick = (Mittelwert_AccNick * 3 + ((ACC_AMPLIFY * AdWertAccNick))) / 4L; |
Mittelwert_AccRoll = (Mittelwert_AccRoll * 3 + ((ACC_AMPLIFY * AdWertAccRoll))) / 4L; |
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
NaviAccNick += AdWertAccNick; |
NaviAccRoll += AdWertAccRoll; |
NaviCntAcc++; |
IntegralAccZ += Aktuell_az - NeutralAccZ; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
// ADC einschalten |
ANALOG_ON; |
AdReady = 0; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L; |
else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L; |
else winkel_roll = Mess_IntegralRoll; |
if(Mess_IntegralNick > 93000L) winkel_nick = 93000L; |
else if(Mess_IntegralNick <-93000L) winkel_nick = -93000L; |
else winkel_nick = Mess_IntegralNick; |
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_Integral_Gier += MesswertGier; |
ErsatzKompass += MesswertGier; |
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
{ |
tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
tmpl3 *= Parameter_AchsKopplung2; //65 |
tmpl3 /= 4096L; |
tmpl4 = (MesswertNick * winkel_roll) / 2048L; |
tmpl4 *= Parameter_AchsKopplung2; //65 |
tmpl4 /= 4096L; |
KopplungsteilNickRoll = tmpl3; |
KopplungsteilRollNick = tmpl4; |
tmpl4 -= tmpl3; |
ErsatzKompass += tmpl4; |
if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
tmpl *= Parameter_AchsKopplung1; // 90 |
tmpl /= 4096L; |
tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
tmpl2 *= Parameter_AchsKopplung1; |
tmpl2 /= 4096L; |
if(abs(MesswertGier) > 64) if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1; |
//MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256; |
} |
else tmpl = tmpl2 = KopplungsteilNickRoll = KopplungsteilRollNick = 0; |
TrimRoll = tmpl - tmpl2 / 100L; |
TrimNick = -tmpl2 + tmpl / 100L; |
// Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag |
if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_IntegralRoll2 += MesswertRoll + TrimRoll; |
Mess_IntegralRoll += MesswertRoll + TrimRoll - LageKorrekturRoll; |
if(Mess_IntegralRoll > Umschlag180Roll) |
{ |
Mess_IntegralRoll = -(Umschlag180Roll - 25000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
if(Mess_IntegralRoll <-Umschlag180Roll) |
{ |
Mess_IntegralRoll = (Umschlag180Roll - 25000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_IntegralNick2 += MesswertNick + TrimNick; |
Mess_IntegralNick += MesswertNick + TrimNick - LageKorrekturNick; |
if(Mess_IntegralNick > Umschlag180Nick) |
{ |
Mess_IntegralNick = -(Umschlag180Nick - 25000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
if(Mess_IntegralNick <-Umschlag180Nick) |
{ |
Mess_IntegralNick = (Umschlag180Nick - 25000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
Integral_Gier = Mess_Integral_Gier; |
IntegralNick = Mess_IntegralNick; |
IntegralRoll = Mess_IntegralRoll; |
IntegralNick2 = Mess_IntegralNick2; |
IntegralRoll2 = Mess_IntegralRoll2; |
#define D_LIMIT 128 |
MesswertNick = HiResNick / 8; |
MesswertRoll = HiResRoll / 8; |
if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
// if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
// else |
{ if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
// if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
// else |
{ if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
if(Parameter_Gyro_D) |
{ |
d2Nick = HiResNick - oldNick; |
oldNick = (oldNick + HiResNick)/2; |
if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
d2Roll = HiResRoll - oldRoll; |
oldRoll = (oldRoll + HiResRoll)/2; |
if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; |
MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; |
HiResNick += (d2Nick * (signed int) Parameter_Gyro_D); |
HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D); |
} |
if(RohMesswertRoll > 0) TrimRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
else TrimRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
if(RohMesswertNick > 0) TrimNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
else TrimNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
if(Parameter_GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
{ |
if(RohMesswertNick > 256) MesswertNick += 1 * (RohMesswertNick - 256); |
else if(RohMesswertNick < -256) MesswertNick += 1 * (RohMesswertNick + 256); |
if(RohMesswertRoll > 256) MesswertRoll += 1 * (RohMesswertRoll - 256); |
else if(RohMesswertRoll < -256) MesswertRoll += 1 * (RohMesswertRoll + 256); |
} |
} |
//############################################################################ |
// Senden der Motorwerte per I2C-Bus |
void SendMotorData(void) |
//############################################################################ |
{ |
unsigned char i; |
if(!MotorenEin) |
{ |
FC_StatusFlags &= ~(FC_STATUS_MOTOR_RUN | FC_STATUS_FLY); |
FC_StatusFlags2 &= ~FC_STATUS2_WAIT_FOR_TAKEOFF; |
for(i=0;i<MAX_MOTORS;i++) |
{ |
if(!PC_MotortestActive) MotorTest[i] = 0; |
Motor[i].SetPoint = MotorTest[i]; |
Motor[i].SetPointLowerBits = 0; |
/* |
Motor[i].SetPoint = MotorTest[i] / 4; // testing the high resolution |
Motor[i].SetPointLowerBits = MotorTest[i] % 4; |
*/ |
} |
if(PC_MotortestActive) PC_MotortestActive--; |
} |
else FC_StatusFlags |= FC_STATUS_MOTOR_RUN; |
// ++++++++++++++++++++++++++++++++++++++++++ |
// ++++++++++++++++++++++++++++++++++++++++++ |
#ifdef REDUNDANT_FC_SLAVE |
I2CTimeout = 100; |
return; |
#endif |
#ifdef REDUNDANT_FC_MASTER |
if(Parameter_UserParam7 > 150) |
{ |
// Make noise |
if((BeepMuster == 0xffff)) { beeptime = 25000; BeepMuster = 0x0080; } |
// Do not send I2C-Data |
if(RedundanceBlOperation) |
{ |
I2CTimeout = 100; |
return; |
} |
} |
#endif |
if(I2C_TransferActive) |
{ |
I2C_TransferActive = 0; // enable for the next time |
} |
else |
{ |
// motor_write = 0; |
I2C_Start(TWI_STATE_MOTOR_TX); //Start I2C Interrupt Mode |
} |
} |
unsigned char GetChannelValue(unsigned char ch) // gives the unsigned value of the channel |
{ |
int tmp2; |
if(ch == 0) return(0); |
tmp2 = PPM_in[ch] + 127; |
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0; |
return(tmp2); |
} |
//############################################################################ |
// Trägt ggf. das Poti als Parameter ein |
void ParameterZuordnung(void) |
//############################################################################ |
{ |
unsigned char tmp,i; |
for(i=0;i<8;i++) |
{ |
int tmp2; |
tmp = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
tmp2 = PPM_in[tmp] + 127; |
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0; |
if(tmp == 25) Poti[i] = tmp2; // 25 = WaypointEvent channel -> no filter |
else |
if(tmp2 != Poti[i]) |
{ |
Poti[i] += (tmp2 - Poti[i]) / 4; |
if(Poti[i] > tmp2) Poti[i]--; |
else Poti[i]++; |
} |
} |
CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,5,255); |
CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,5,255); |
if(EE_Parameter.Servo3 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo3 = 140; else Parameter_Servo3 = 70;} // Out1 (J16) |
else if(EE_Parameter.Servo3 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo3 = 140; else Parameter_Servo3 = 70;} |
else CHK_POTI_MM(Parameter_Servo3,EE_Parameter.Servo3, 24, 255); |
if(EE_Parameter.Servo4 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo4 = 140; else Parameter_Servo4 = 70;} |
else if(EE_Parameter.Servo4 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo4 = 140; else Parameter_Servo4 = 70;} // Out2 (J17) |
else CHK_POTI_MM(Parameter_Servo4,EE_Parameter.Servo4, 24, 255); |
CHK_POTI_MM(Parameter_Servo5,EE_Parameter.Servo5, 24, 255); |
Parameter_HoehenSchalter = GetChannelValue(EE_Parameter.HoeheChannel); |
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung); |
CHK_POTI(Parameter_Hoehe_GPS_Z,EE_Parameter.Hoehe_GPS_Z); |
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung); |
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I); |
CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D); |
CHK_POTI(Parameter_Gyro_Gier_P,EE_Parameter.Gyro_Gier_P); |
CHK_POTI(Parameter_Gyro_Gier_I,EE_Parameter.Gyro_Gier_I); |
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor); |
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1); |
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2); |
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3); |
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4); |
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5); |
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6); |
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7); |
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8); |
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl); |
CHK_POTI(Parameter_ServoRollControl,EE_Parameter.ServoRollControl); |
CHK_POTI(Parameter_ServoNickComp,EE_Parameter.ServoNickComp); |
CHK_POTI(Parameter_ServoRollComp,EE_Parameter.ServoRollComp); |
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit); |
CHK_POTI(Parameter_AchsKopplung1,EE_Parameter.AchsKopplung1); |
CHK_POTI(Parameter_AchsKopplung2,EE_Parameter.AchsKopplung2); |
CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection); |
CHK_POTI(Parameter_MaximumAltitude,EE_Parameter.MaxAltitude); |
if((NC_To_FC_MaxAltitude && NC_To_FC_MaxAltitude < Parameter_MaximumAltitude) || Parameter_MaximumAltitude == 0) Parameter_MaximumAltitude = NC_To_FC_MaxAltitude; |
Parameter_GlobalConfig = EE_Parameter.GlobalConfig; |
Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
// CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
Ki = 10300 / (Parameter_I_Faktor + 1); |
MAX_GAS = EE_Parameter.Gas_Max; |
MIN_GAS = EE_Parameter.Gas_Min; |
if(EE_Parameter.CareFreeChannel) |
{ |
CareFree = 1; |
if(PPM_in[EE_Parameter.CareFreeChannel] < -64) CareFree = 0; |
// if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0; |
if(carefree_old != CareFree) |
{ |
if(carefree_old < 3) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(CareFree) { beeptime = 1500; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_ON; } |
else { beeptime = 200; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_OFF; } |
#else |
if(CareFree) beeptime = 1500; |
else beeptime = 200; |
#endif |
NeueKompassRichtungMerken = 5; |
carefree_old = CareFree; |
} else carefree_old--; |
} |
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= FC_ERROR0_CAREFREE; //else VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; |
} |
else |
{ |
CareFree = 0; |
carefree_old = 10; |
} |
if(FromNaviCtrl.CompassValue < 0 && MotorenEin && CareFree && BeepMuster == 0xffff) // ungültiger Kompasswert |
{ |
beeptime = 15000; |
BeepMuster = 0xA400; |
CareFree = 0; |
} |
if(CareFree) { FC_StatusFlags2 |= FC_STATUS2_CAREFREE; /*if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;*/} else FC_StatusFlags2 &= ~FC_STATUS2_CAREFREE; |
} |
void CalcStickGasHover(void) |
{ |
if(!EE_Parameter.Hoehe_StickNeutralPoint) |
{ |
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
} |
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down |
} |
//############################################################################ |
// |
void MotorRegler(void) |
//############################################################################ |
{ |
int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
int GierMischanteil,GasMischanteil; |
static long sollGier = 0,tmp_long,tmp_long2; |
static long IntegralFehlerNick = 0; |
static long IntegralFehlerRoll = 0; |
static unsigned int RcLostTimer; |
static unsigned char delay_neutral = 0; |
static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
static signed char move_safety_switch = 0; |
static long ausgleichNick, ausgleichRoll; |
int IntegralNickMalFaktor,IntegralRollMalFaktor; |
unsigned char i; |
Mittelwert(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gaswert ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!(FC_StatusFlags & (FC_STATUS_EMERGENCY_LANDING | FC_STATUS2_RC_FAILSAVE_ACTIVE))) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) |
{ |
if(HoverGas && HoverGas < 150 * STICK_GAIN) |
{ |
HooverGasEmergencyPercent = (HoverGas/(STICK_GAIN) * EE_Parameter.NotGas) / 100; // i.e. 80% of Hovergas |
} |
else HooverGasEmergencyPercent = 45; // default if the Hoovergas was could not calculated yet |
} else HooverGasEmergencyPercent = EE_Parameter.NotGas; |
} |
if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed |
{ |
StickGas = 0; // Hold Gas down in that case |
HooverGasEmergencyPercent = MIN_GAS; |
} |
GasMischanteil = StickGas; |
if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Empfang schlecht |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)) |
{ |
if(RcLostTimer) RcLostTimer--; |
else |
{ |
MotorenEin = 0; |
modell_fliegt = 0; |
FC_StatusFlags &= ~(FC_STATUS_EMERGENCY_LANDING | FC_STATUS_FLY); |
} |
ROT_ON; |
if(modell_fliegt > 1000 && Capacity.MinOfMaxPWM > 100) // wahrscheinlich in der Luft --> langsam absenken |
{ |
GasMischanteil = HooverGasEmergencyPercent; |
FC_StatusFlags |= FC_STATUS_EMERGENCY_LANDING; |
PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0; |
} |
else |
{ |
MotorenEin = 0; |
} |
} |
else |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Emfang gut |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay > 140) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
static unsigned int trigger = 1000; |
static unsigned char old_switch = 100; |
if(EE_Parameter.StartLandChannel && EE_Parameter.LandingSpeed) |
{ |
if(PPM_in[EE_Parameter.StartLandChannel] > 50) |
{ |
if(old_switch == 50) if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) { FC_StatusFlags2 |= FC_STATUS2_AUTO_STARTING; SpeakHoTT = SPEAK_RISING;} |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING; |
old_switch = 150; |
} |
else |
if(PPM_in[EE_Parameter.StartLandChannel] < -50) |
{ |
if(old_switch == 150) { FC_StatusFlags2 |= FC_STATUS2_AUTO_LANDING; SpeakHoTT = SPEAK_SINKING;} |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_STARTING; |
old_switch = 50; |
} |
else |
{ |
FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
} |
} |
#endif |
FC_StatusFlags &= ~FC_STATUS_EMERGENCY_LANDING; |
RcLostTimer = EE_Parameter.NotGasZeit * 50; |
if(GasMischanteil > 40 && MotorenEin) |
{ |
if(modell_fliegt < 0xffff) modell_fliegt++; |
} |
if((modell_fliegt < 256)) |
{ |
SummeNick = 0; |
SummeRoll = 0; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
old_switch = 100; |
#endif |
} |
else |
{ |
FC_StatusFlags |= FC_STATUS_FLY; |
if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if((NC_To_FC_Flags & NC_TO_FC_AUTOSTART || FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) && (VarioCharacter == '=') && ACC_AltitudeControl) |
{ |
FromNC_AltitudeSpeed = 80; |
FromNC_AltitudeSetpoint = 500; |
SollHoehe = 500; |
trigger = 1000; |
if(NC_To_FC_Flags & NC_TO_FC_AUTOSTART) SpeakHoTT = SPEAK_NEXT_WP; |
/* if(StartTrigger != 2) |
{ |
StartTrigger = 1; |
if(HoverGas < STICK_GAIN * 35) HoverGas = STICK_GAIN * 35; |
} |
*/ |
} |
// else FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING); |
#endif |
if(HoehenWertF > 150 || HoehenWert < -350 || !(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
trigger = 1000; |
if(FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) { FromNC_AltitudeSpeed = 0; SollHoehe = 300;/*HoehenWertF + 100;*/} |
else SpeakHoTT = SPEAK_RISING; |
#endif |
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
} |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
// sollGier = 0; |
if(modell_fliegt > 1000) modell_fliegt = 1000; // for the Hooverpoint-Estimation |
} |
else // Flying mode |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if((FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING) && (VarioCharacter == 'v' || VarioCharacter == '=') && ACC_AltitudeControl) |
{ |
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed; |
FromNC_AltitudeSetpoint = -20000; |
} |
if(trigger < 1000) |
{ |
trigger++; |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
SollHoehe = HoehenWertF - 300; |
if(trigger == 1000 && FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING && VarioCharacter != '+') |
{ |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING; |
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; // go back into starting state |
} |
} |
else |
if(ACC_AltitudeControl && (VarioCharacter == 'v' || VarioCharacter == '-') && HoehenWert < 1000 /*&& FromNC_AltitudeSetpoint < 0*/) |
{ |
if(Aktuell_az > 940) |
{ |
trigger = 0; |
SpeakHoTT = SPEAK_LANDING; |
}; |
} |
#endif |
} |
} // end of: modell_fliegt > 256 |
if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// auf Nullwerte kalibrieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
delay_neutral = 0; |
modell_fliegt = 0; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
{ |
unsigned char setting=1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
SetActiveParamSet(setting); // aktiven Datensatz merken |
} |
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 30 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) |
{ |
WinkelOut.CalcState = 1; |
CalibrationDone = 0; |
beeptime = 1000; |
} |
else |
{ |
ParamSet_ReadFromEEProm(ActiveParamSet); |
LipoDetection(0); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
} |
CalibrationDone = SetNeutral(1); |
ServoActive = 1; |
DDRD |=0x80; // enable J7 -> Servo signal |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR; |
else |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
else SpeakHoTT = SPEAK_CALIBRATE; |
ShowSettingNameTime = 5; // for HoTT & Jeti |
#endif |
Piep(ActiveParamSet,120); |
} |
} |
} |
else |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
MotorenEin = 0; |
delay_neutral = 0; |
modell_fliegt = 0; |
CalibrationDone = SetNeutral(2); // store ACC values into EEPROM |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR; |
else |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
else SpeakHoTT = SPEAK_CALIBRATE; |
#endif |
Piep(ActiveParamSet,120); |
} |
} |
else delay_neutral = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gas ist unten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < -100) |
{ |
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] > 5) move_safety_switch = 100; |
else |
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] < -5) move_safety_switch = -100; |
// Motoren Starten |
if(!MotorenEin) |
{ |
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0))) |
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] > -10 && move_safety_switch == 100))) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Einschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(CalibrationDone) FC_StatusFlags |= FC_STATUS_START; |
StartLuftdruck = Luftdruck; |
HoehenWertF = 0; |
HoehenWert = 0; |
SummenHoehe = 0; |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) delay_einschalten = 0; |
if(++delay_einschalten > 253) |
{ |
if((abs(MesswertGier) > 32 || abs(MesswertNick) > 20) || abs(MesswertRoll) > 20) CalibrationDone = 0; // dann ist der Gyro defekt, schlecht kalibriert oder der MK dreht sich |
delay_einschalten = 0; |
if(!VersionInfo.HardwareError[0] && CalibrationDone && !NC_ErrorCode) |
{ |
modell_fliegt = 1; |
MotorenEin = 1; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
Mess_Integral_Gier2 = 0; |
Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
Mess_IntegralNick2 = IntegralNick; |
Mess_IntegralRoll2 = IntegralRoll; |
SummeNick = 0; |
SummeRoll = 0; |
// ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2; |
NeueKompassRichtungMerken = 100; // 2 sekunden |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_STARTING; |
#endif |
} |
else |
{ |
beeptime = 1500; // indicate missing calibration |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
#endif |
} |
} |
} |
else delay_einschalten = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Auschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
else // only if motors are running |
{ |
// if((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && (PPM_in[EE_Parameter.MotorSafetySwitch] < -75 || EE_Parameter.MotorSafetySwitch == 0)) |
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0))) |
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -50 && move_safety_switch == -100))) |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) |
{ |
delay_ausschalten = 0; |
} |
else |
{ |
SummeNick = 0; |
SummeRoll = 0; |
StickNick = 0; |
StickRoll = 0; |
} |
if(++delay_ausschalten > 250) // nicht sofort |
{ |
MotorenEin = 0; |
delay_ausschalten = 0; |
modell_fliegt = 0; |
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_MK_OFF; |
#endif |
} |
else |
if(delay_ausschalten == 100) beeptime = 3500; |
} |
else delay_ausschalten = 0; |
} |
if(GasIsZeroCnt < 1000) |
{ |
if(VarioMeter > -150) GasIsZeroCnt++; |
else if(GasIsZeroCnt) GasIsZeroCnt--; |
} |
} |
else // gas not at minimum |
{ |
move_safety_switch = 0; |
GasIsZeroCnt = 0; |
} |
} |
else // Empfang zwischen 100 und 140 -> schlecht |
{ |
if(GasIsZeroCnt >= 750) // gas-stick was down for 1.5 seconds before RC-Lost |
{ |
if((GPSInfo.HomeDistance < 40 * 10) && (HoehenWert < 15 * 100)) // and we are at the starting point -> maybe landed? |
{ |
GasIsZeroCnt = 30000; |
if(modell_fliegt > 1001) modell_fliegt = 1001; |
} |
} |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// neue Werte von der Funke |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
static int stick_nick,stick_roll; |
unsigned char stick_p; |
ParameterZuordnung(); |
stick_p = EE_Parameter.Stick_P; |
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// CareFree und freie Wahl der vorderen Richtung |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(CareFree) |
{ |
signed int nick, roll; |
nick = stick_nick / 4; |
roll = stick_roll / 4; |
StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
} |
else |
{ |
FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; |
FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; |
StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
} |
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
if(StickGier > 4) StickGier -= 4; else |
if(StickGier < -4) StickGier += 4; else StickGier = 0; |
if(GasIsZeroCnt > 512) // About to switch - off |
{ |
StickNick = StickNick/8; |
StickRoll = StickRoll/8; |
SummeNick = 0; |
SummeRoll = 0; |
} |
else |
if(GPS_Aid_StickMultiplikator) // in that case the GPS controls stronger |
{ |
StickNick = (GPS_Aid_StickMultiplikator * (StickNick / 8)) / 16; |
StickRoll = (GPS_Aid_StickMultiplikator * (StickRoll / 8)) / 16; |
} |
StickNick -= GPS_Nick; |
StickRoll -= GPS_Roll; |
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127; |
GyroFaktor = (Parameter_Gyro_P + 10.0); |
IntegralFaktor = Parameter_Gyro_I; |
GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
IntegralFaktorGier = Parameter_Gyro_Gier_I; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//+ Analoge Steuerung per Seriell |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
{ |
StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
StickGier += ExternControl.Gier; |
ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
} |
if(StickGas < 0) StickGas = 0; |
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
if(abs(StickNick/STICK_GAIN) > MaxStickNick) |
{ |
MaxStickNick = abs(StickNick)/STICK_GAIN; |
if(MaxStickNick > 100) MaxStickNick = 100; |
} |
else MaxStickNick--; |
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll) |
{ |
MaxStickRoll = abs(StickRoll)/STICK_GAIN; |
if(MaxStickRoll > 100) MaxStickRoll = 100; |
} |
else MaxStickRoll--; |
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) {MaxStickNick = 0; MaxStickRoll = 0;} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Looping? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
else |
{ |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1; |
else |
{ |
if(Looping_Rechts) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_OBEN) Looping_Oben = 1; |
else |
{ |
if(Looping_Oben) // Hysterese |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_UNTEN) Looping_Unten = 1; |
else |
{ |
if(Looping_Unten) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0; |
} |
} |
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
} // Ende neue Funken-Werte |
if(Looping_Roll || Looping_Nick) |
{ |
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
TrichterFlug = 1; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Bei Empfangsausfall im Flug |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE) |
{ |
StickNick = -GPS_Nick; |
StickRoll = -GPS_Roll; |
StickGas = StickGasHover; |
StickGier = 0; |
Parameter_GlobalConfig &= ~(CFG_HEADING_HOLD | CFG_DREHRATEN_BEGRENZER); |
Parameter_GlobalConfig |= CFG_HOEHENREGELUNG | CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER | CFG_GPS_AKTIV; |
Parameter_ExtraConfig &= ~(CFG2_HEIGHT_LIMIT | CFG_LEARNABLE_CAREFREE | CFG2_VARIO_BEEP); |
Parameter_HoehenSchalter = 200; // switch on |
} |
else |
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) |
{ |
StickGier = 0; |
StickNick = 0; |
StickRoll = 0; |
GyroFaktor = 90; |
IntegralFaktor = 120; |
GyroFaktorGier = 90; |
IntegralFaktorGier = 120; |
Looping_Roll = 0; |
Looping_Nick = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Integrale auf ACC-Signal abgleichen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define ABGLEICH_ANZAHL 256L |
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
MittelIntegralRoll += IntegralRoll; |
MittelIntegralNick2 += IntegralNick2; |
MittelIntegralRoll2 += IntegralRoll2; |
if(Looping_Nick || Looping_Roll) |
{ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
Mess_IntegralNick2 = Mess_IntegralNick; |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
ZaehlMessungen = 0; |
LageKorrekturNick = 0; |
LageKorrekturRoll = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
{ |
long tmp_long, tmp_long2; |
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/) |
{ |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN)); |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR)); |
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16); |
tmp_long2 = (tmp_long2 * FromNaviCtrl_Value.Kalman_K) / (32 * 16); |
if((MaxStickNick > 64) || (MaxStickRoll > 64)) |
{ |
tmp_long /= 2; |
tmp_long2 /= 2; |
} |
if(tmp_long > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long) FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long)-FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion; |
} |
else |
{ |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick); |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll); |
tmp_long /= 16; |
tmp_long2 /= 16; |
if((MaxStickNick > 64) || (MaxStickRoll > 64)) |
{ |
tmp_long /= 3; |
tmp_long2 /= 3; |
} |
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25) |
{ |
tmp_long /= 3; |
tmp_long2 /= 3; |
} |
KompassFusion = 25; |
#define AUSGLEICH 32 |
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
} |
Mess_IntegralNick -= tmp_long; |
Mess_IntegralRoll -= tmp_long2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
{ |
static int cnt = 0; |
static char last_n_p,last_n_n,last_r_p,last_r_n; |
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
{ |
MittelIntegralNick /= ABGLEICH_ANZAHL; |
MittelIntegralRoll /= ABGLEICH_ANZAHL; |
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL; |
#define MAX_I 0 |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick); |
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll); |
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich; |
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL; |
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL; |
if(((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)) && (FromNaviCtrl_Value.Kalman_K == -1)) |
{ |
LageKorrekturNick /= 2; |
LageKorrekturRoll /= 2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gyro-Drift ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick2 /= ABGLEICH_ANZAHL; |
MittelIntegralRoll2 /= ABGLEICH_ANZAHL; |
tmp_long = IntegralNick2 - IntegralNick; |
tmp_long2 = IntegralRoll2 - IntegralRoll; |
IntegralFehlerNick = tmp_long; |
IntegralFehlerRoll = tmp_long2; |
Mess_IntegralNick2 -= IntegralFehlerNick; |
Mess_IntegralRoll2 -= IntegralFehlerRoll; |
if(EE_Parameter.Driftkomp) |
{ |
if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; } |
if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; } |
} |
GierGyroFehler = 0; |
#define FEHLER_LIMIT (ABGLEICH_ANZAHL / 2) |
#define FEHLER_LIMIT1 (ABGLEICH_ANZAHL * 2) //4 |
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16) //16 |
#define BEWEGUNGS_LIMIT 20000 |
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerNick) / 4096; |
if(labs(IntegralFehlerNick) > FEHLER_LIMIT1) cnt = 4; |
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8)) |
{ |
if(IntegralFehlerNick > FEHLER_LIMIT2) |
{ |
if(last_n_p) |
{ |
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8); |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick > 5000) ausgleichNick = 5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
} |
else last_n_p = 1; |
} else last_n_p = 0; |
if(IntegralFehlerNick < -FEHLER_LIMIT2) |
{ |
if(last_n_n) |
{ |
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8); |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick < -5000) ausgleichNick = -5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
} |
else last_n_n = 1; |
} else last_n_n = 0; |
} |
else |
{ |
cnt = 0; |
KompassSignalSchlecht = 100; |
} |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift; |
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerRoll) / 4096; |
if(labs(IntegralFehlerRoll) > FEHLER_LIMIT1) cnt = 4; |
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8)) |
{ |
if(IntegralFehlerRoll > FEHLER_LIMIT2) |
{ |
if(last_r_p) |
{ |
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8); |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_p = 1; |
} else last_r_p = 0; |
if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
{ |
if(last_r_n) |
{ |
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8); |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_n = 1; |
} else last_r_n = 0; |
} else |
{ |
cnt = 0; |
KompassSignalSchlecht = 100; |
} |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift; |
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
} |
else |
{ |
LageKorrekturRoll = 0; |
LageKorrekturNick = 0; |
TrichterFlug = 0; |
} |
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick_Alt = MittelIntegralNick; |
MittelIntegralRoll_Alt = MittelIntegralRoll; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
IntegralAccZ = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
ZaehlMessungen = 0; |
} // ZaehlMessungen >= ABGLEICH_ANZAHL |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(abs(StickGier) > 3) // war 15 |
{ |
// KompassSignalSchlecht = 1000; |
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX)) |
{ |
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen |
}; |
} |
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4; |
if(GasIsZeroCnt > 512) tmp_int = 0; // disable Yawing when Gas-Stick is to Zero |
tmp_int += CompassGierSetpoint; |
sollGier = tmp_int; |
Mess_Integral_Gier -= tmp_int; |
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Kompass |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) |
{ |
if(CalculateCompassTimer-- == 1) |
{ |
int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
CalculateCompassTimer = 13; // falls keine Navi-Daten |
// max. Korrekturwert schätzen |
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
v = abs(IntegralRoll /512); |
if(v > w) w = v; // grösste Neigung ermitteln |
// korrektur = w / 4 + 1; |
korrektur = w / 8 + 2; |
ErsatzKompassInGrad = ErsatzKompass/GIER_GRAD_FAKTOR; |
// Kompassfehlerwert bestimmen |
fehler = ((540 + KompassValue - ErsatzKompassInGrad) % 360) - 180; |
// GIER_GRAD_FAKTOR ist ca. 1200 |
// Kompasswert einloggen |
if(KompassSignalSchlecht) KompassSignalSchlecht--; |
else |
if(w < 25) |
{ |
GierGyroFehler += fehler; |
if(NeueKompassRichtungMerken) |
{ |
if(--NeueKompassRichtungMerken == 0) |
{ |
KompassSollWert = ErsatzKompassInGrad; |
} |
} |
} |
// Kompass fusionieren |
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur; |
// MK Gieren |
if(!NeueKompassRichtungMerken) |
{ |
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180; |
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten |
CompassGierSetpoint = v / 16; |
} |
else CompassGierSetpoint = 0; |
} // CalculateCompassTimer |
} |
else CompassGierSetpoint = 0; |
//DebugOut.Analog[16] = KompassFusion; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;}; |
if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0; |
if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0; |
#define TRIM_MAX 200 |
if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
// Maximalwerte abfangen |
#define MAX_SENSOR (4096) |
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR; |
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR; |
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR; |
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR; |
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR; |
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Undervoltage |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!(FC_StatusFlags & FC_STATUS_LOWBAT)) |
{ |
GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Auto-Landing |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
static unsigned char slower; |
if(!slower--) |
{ |
static unsigned int u_filter = 0; |
if(!u_filter) u_filter = UBat; |
if(UBat > u_filter) u_filter++; else |
if(UBat < u_filter) u_filter--; |
slower = 100; // 5Hz |
if(u_filter < BattAutoLandingVoltage) |
{ |
LowVoltageLandingActive = 10; // 2 sek |
} |
else if(u_filter > BattAutoLandingVoltage + LipoCells && LowVoltageLandingActive) LowVoltageLandingActive--; |
if(u_filter < BattComingHomeVoltage) |
{ |
LowVoltageHomeActive = 25; // min. 5 sek |
} |
else if(u_filter > BattComingHomeVoltage + LipoCells && LowVoltageHomeActive) LowVoltageHomeActive--; |
} |
if(LowVoltageLandingActive && FromNC_AltitudeSetpoint >= 0) |
{ |
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed; |
FromNC_AltitudeSetpoint = -20000; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Höhenregelung |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
GasMischanteil *= STICK_GAIN; |
// if height control is activated |
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung |
{ |
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging |
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging |
int HCGas, GasReduction = 0; |
static int HeightTrimming = 0; // rate for change of height setpoint |
static int HeightDeviation = 0, FilterHCGas = 0; |
static unsigned long HoverGasFilter = 0; |
static unsigned char delay = 100, BaroAtUpperLimit = 0, BaroAtLowerLimit = 0; |
// Expand the measurement |
// measurement of air pressure close to upper limit and no overflow in correction of the new OCR0A value occurs |
if(!BaroExpandActive) |
{ |
if(MessLuftdruck > 920) |
{ // increase offset |
if(OCR0A < (255 - OPA_OFFSET_STEP)) |
{ |
ExpandBaro -= 1; |
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down |
OCR0B = 255 - OCR0A; |
beeptime = 300; |
BaroExpandActive = 350; |
CalcExpandBaroStep(); |
} |
else |
{ |
BaroAtLowerLimit = 1; |
} |
} |
// measurement of air pressure close to lower limit and |
else |
if(MessLuftdruck < 100) |
{ // decrease offset |
if(OCR0A > OPA_OFFSET_STEP) |
{ |
ExpandBaro += 1; |
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up |
OCR0B = 255 - OCR0A; |
beeptime = 300; |
BaroExpandActive = 350; |
CalcExpandBaroStep(); |
} |
else |
{ |
BaroAtUpperLimit = 1; |
} |
} |
else |
{ |
BaroAtUpperLimit = 0; |
BaroAtLowerLimit = 0; |
} |
} |
else // delay, because of expanding the Baro-Range |
{ |
// now clear the D-values |
VarioMeter = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) ACC_AltitudeFusion(1); // init |
else SummenHoehe = HoehenWert * SM_FILTER; |
#else |
SummenHoehe = HoehenWert * SM_FILTER; |
#endif |
BaroExpandActive--; |
} |
// if height control is activated by an rc channel |
if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
{ // check if parameter is less than activation threshold |
if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position |
{ //height control not active |
if(!delay--) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
#endif |
HoehenReglerAktiv = 0; // disable height control |
SollHoehe = HoehenWert; // update SetPoint with current reading |
delay = 1; |
} |
} |
else |
if(Parameter_HoehenSchalter > 70) |
{ //height control is activated |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON; |
#endif |
delay = 200; |
HoehenReglerAktiv = 1; // enable height control |
} |
} |
else // no switchable height control |
{ |
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
HoehenReglerAktiv = 1; |
} |
// calculate cos of nick and roll angle used for projection of the vertical hoover gas |
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle |
CosAttitude = c_cos_8192(CosAttitude); // cos of actual attitude |
VarioCharacter = ' '; |
AltitudeSetpointTrimming = 0; |
if(HoehenReglerAktiv && !(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
// Holger original version |
// start of height control algorithm |
// the height control is only an attenuation of the actual gas stick. |
// I.e. it will work only if the gas stick is higher than the hover gas |
// and the hover height will be allways larger than height setpoint. |
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL; |
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert) |
{ // old version |
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control |
HeightTrimming = 0; |
AltitudeSetpointTrimming = 0; |
// set both flags to indicate no vario mode |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
} |
else |
{ |
// alternative height control |
// PD-Control with respect to hoover point |
// the thrust loss out of horizontal attitude is compensated |
// the setpoint will be fine adjusted with the gas stick position |
if(/*1 || */FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying |
{ // gas stick is above hoover point |
if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit) |
{ |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
// Limit the maximum Altitude |
if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) |
{ |
AltitudeSetpointTrimming = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && HoehenWert/95 > Parameter_MaximumAltitude) SpeakHoTT = SPEAK_MAX_ALTITUD; |
#endif |
VarioCharacter = '='; |
} |
else |
{ |
if(HeightDeviation > 20) SollHoehe = HoehenWertF; // update setpoint to current heigth |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
AltitudeSetpointTrimming = abs(StickGas - (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD)); |
if(LowVoltageLandingActive) AltitudeSetpointTrimming /= 3; // only 33% rising |
VarioCharacter = '+'; |
} |
WaypointTrimming = 0; |
} // gas stick is below hoover point |
else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit ) // Minus |
{ |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
VarioCharacter = '-'; |
WaypointTrimming = 0; |
} |
else // Gas Stick in Hover Range |
{ |
VarioCharacter = '='; |
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint > SollHoehe) // von NC gesteuert -> Steigen |
{ |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
AltitudeSetpointTrimming = FromNC_AltitudeSpeed; |
//HeightTrimming += FromNC_AltitudeSpeed; |
WaypointTrimming = 10; |
VarioCharacter = '^'; |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
} |
else |
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken |
{ |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
AltitudeSetpointTrimming = -FromNC_AltitudeSpeed; |
//HeightTrimming -= FromNC_AltitudeSpeed; |
WaypointTrimming = -10; |
VarioCharacter = 'v'; |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
} |
else |
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) |
{ |
if(!WaypointTrimming) LIMIT_MIN_MAX(SollHoehe, (HoehenWertF-200), (HoehenWertF+200)) // max. 2m Unterschied |
else WaypointTrimming = 0; |
FC_StatusFlags &= ~(FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
HeightTrimming = 0; |
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 500; |
if(!StartTrigger && HoehenWert > 50) |
{ |
StartTrigger = 1; |
} |
} |
} |
// Trim height set point |
HeightTrimming += AltitudeSetpointTrimming; |
if(abs(HeightTrimming) > 500) // bei Waypoint-Flug ist das ca. die 500Hz |
{ |
if(WaypointTrimming) |
{ |
if(abs(FromNC_AltitudeSetpoint - SollHoehe) < 10) SollHoehe = FromNC_AltitudeSetpoint; |
else SollHoehe += WaypointTrimming; |
} |
else |
{ |
if(HeightTrimming > 0) SollHoehe += EE_Parameter.Hoehe_Verstaerkung / 3; |
else SollHoehe -= EE_Parameter.Hoehe_Verstaerkung / 3; |
} |
HeightTrimming = 0; |
LIMIT_MIN_MAX(SollHoehe, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied |
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 100; |
//update hoover gas stick value when setpoint is shifted |
if(FromNC_AltitudeSpeed == 0) CalcStickGasHover(); |
/* |
if(!EE_Parameter.Hoehe_StickNeutralPoint && FromNC_AltitudeSpeed == 0) |
{ |
StickGasHover = HoverGas/STICK_GAIN; //rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
if(StickGasHover < 70) StickGasHover = 70; |
else if(StickGasHover > 175) StickGasHover = 175; |
} |
*/ |
} |
if(BaroExpandActive) SollHoehe = HoehenWertF; // update setpoint to current altitude if Expanding is active |
} //if FCFlags & MKFCFLAG_FLY |
else |
{ |
SollHoehe = HoehenWert - 400; |
if(EE_Parameter.Hoehe_StickNeutralPoint) StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
else StickGasHover = 127; |
HoverGas = GasMischanteil; |
VarioCharacter = '.'; |
} |
HCGas = HoverGas; // take hover gas (neutral point) |
} |
if(HoehenWertF > SollHoehe || !(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) |
{ |
if(!ACC_AltitudeControl) |
{ |
// from this point the Heigth Control Algorithm is identical for both versions |
if(BaroExpandActive) // baro range expanding active |
{ |
HCGas = HoverGas; // hover while expanding baro adc range |
HeightDeviation = 0; |
} // EOF // baro range expanding active |
else // valid data from air pressure sensor |
{ |
// ------------------------- P-Part ---------------------------- |
tmp_long = (HoehenWertF - SollHoehe); // positive when too high |
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
HeightDeviation = (int)(tmp_long); // positive when too high |
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense |
GasReduction = tmp_long; |
// ------------------------- D-Part 1: Vario Meter ---------------------------- |
tmp_int = VarioMeter / 8; |
LIMIT_MIN_MAX(tmp_int, -127, 128); |
tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter |
LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN); |
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint |
else |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode |
GasReduction += tmp_int; |
} // EOF no baro range expanding |
// ------------------------ D-Part 2: ACC-Z Integral ------------------------ |
if(Parameter_Hoehe_ACC_Wirkung) |
{ |
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN); |
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN); |
GasReduction += tmp_long; |
} |
// ------------------------ D-Part 3: GpsZ ---------------------------------- |
tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L; |
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN); |
GasReduction += tmp_int; |
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value |
// ------------------------ ---------------------------------- |
HCGas -= GasReduction; |
// limit deviation from hoover point within the target region |
if(!AltitudeSetpointTrimming && HoverGas > 0) // height setpoint is not changed and hoover gas not zero |
{ |
unsigned int tmp; |
tmp = abs(HeightDeviation); |
if(tmp <= 60) |
{ |
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point |
} |
else |
{ |
tmp = (tmp - 60) / 32; |
if(tmp > 15) tmp = 15; |
if(HeightDeviation > 0) |
{ |
tmp = (HoverGasMin * (16 - tmp)) / 16; |
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point |
} |
else |
{ |
tmp = (HoverGasMax * (tmp + 16)) / 16; |
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point |
} |
} |
} |
// strech control output by inverse attitude projection 1/cos |
// + 1/cos(angle) ++++++++++++++++++++++++++ |
tmp_long2 = (int32_t)HCGas; |
tmp_long2 *= 8192L; |
tmp_long2 /= CosAttitude; |
HCGas = (int16_t)tmp_long2; |
// update height control gas averaging |
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE; |
// limit height control gas pd-control output |
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN); |
// set GasMischanteil to HeightControlGasFilter |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ // old version |
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
GasMischanteil = FilterHCGas; |
} |
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else // ACC-Altitude control |
{ |
// from this point the Heigth Control Algorithm is identical for both versions |
if(BaroExpandActive) // baro range expanding active |
{ |
HCGas = HoverGas; // hover while expanding baro adc range |
HeightDeviation = 0; |
} // EOF // baro range expanding active |
else // valid data from air pressure sensor |
{ |
// ------------------------- P-Part ---------------------------- |
tmp_long = (HoehenWertF - SollHoehe); // positive when too high |
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
HeightDeviation = (int)(tmp_long); // positive when too high |
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
LIMIT_MIN_MAX(tmp_long, -511 * STICK_GAIN, 512 * STICK_GAIN); // more than full range makes sense |
GasReduction = tmp_long; |
// ------------------------ D-Part: ACC-Z Integral ------------------------ |
tmp_long = VarioMeter + (AdWertAccHoch * Parameter_Hoehe_ACC_Wirkung)/256; |
// ------------------------- D-Part: Vario Meter ---------------------------- |
if(WaypointTrimming) { |
Variance = AltitudeSetpointTrimming * 8; |
} else { |
Variance = AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung*9/32; |
} |
tmp_long -= (long)Variance; |
tmp_long = (tmp_long * (long)Parameter_Luftdruck_D) / 32; // scale to d-gain parameter |
LIMIT_MIN_MAX(tmp_long,-511 * STICK_GAIN, 512 * STICK_GAIN); |
GasReduction += tmp_long; |
} // EOF no baro range expanding |
HCGas -= GasReduction; |
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limits gas around hover point |
// strech control output by inverse attitude projection 1/cos |
// + 1/cos(angle) ++++++++++++++++++++++++++ |
tmp_long2 = (int32_t)HCGas; |
tmp_long2 *= 8192L; |
tmp_long2 /= CosAttitude; |
HCGas = (int16_t)tmp_long2; |
// update height control gas averaging |
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE; |
// limit height control gas pd-control output |
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN); |
// set GasMischanteil to HeightControlGasFilter |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ // old version |
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
GasMischanteil = FilterHCGas; |
} |
else GasMischanteil = FilterHCGas; |
} // end of ACC-Altitude control |
#endif |
} |
}// EOF height control active |
else // HC not active |
{ |
//update hoover gas stick value when HC is not active |
CalcStickGasHover(); |
/* if(!EE_Parameter.Hoehe_StickNeutralPoint) |
{ |
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
} |
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down |
*/ |
FilterHCGas = GasMischanteil; |
// set both flags to indicate no vario mode |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
FC_StatusFlags2 &= ~FC_STATUS2_ALTITUDE_CONTROL; |
} |
// Hover gas estimation by averaging gas control output on small z-velocities |
// this is done only if height contol option is selected in global config and aircraft is flying |
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
//if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation |
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(HoverGas); // 0.90f: geändert |
if(StartTrigger == 1) StartTrigger = 2; |
tmp_long2 = (int32_t)GasMischanteil; // take current thrust |
tmp_long2 *= CosAttitude; // apply attitude projection |
tmp_long2 /= 8192; |
// average vertical projected thrust |
if(modell_fliegt < 4000) // the first 8 seconds |
{ // reduce the time constant of averaging by factor of 4 to get much faster a stable value |
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/16L); |
HoverGasFilter += 16L * tmp_long2; |
} |
if(modell_fliegt < 8000) // the first 16 seconds |
{ // reduce the time constant of averaging by factor of 2 to get much faster a stable value |
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/4L); |
HoverGasFilter += 4L * tmp_long2; |
} |
else //later |
if(abs(VarioMeter) < 100 && abs(HoehenWertF - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending) |
{ |
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE; |
HoverGasFilter += tmp_long2; |
} |
HoverGas = (int16_t)(HoverGasFilter/HOVER_GAS_AVERAGE); |
if(EE_Parameter.Hoehe_HoverBand) |
{ |
int16_t band; |
band = HoverGas / EE_Parameter.Hoehe_HoverBand; // the higher the parameter the smaller the range |
HoverGasMin = HoverGas - band; |
HoverGasMax = HoverGas + band; |
} |
else |
{ // no limit |
HoverGasMin = 0; |
HoverGasMax = 1023; |
} |
} |
else |
{ |
StartTrigger = 0; |
HoverGasFilter = 0; |
HoverGas = 0; |
} |
}// EOF Parameter_GlobalConfig & CFG_HEIGHT_CONTROL |
else |
{ |
// set undefined state to indicate vario off |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
} // EOF no height control |
// Limits the maximum gas in case of "Out of Range emergency landing" |
if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING) |
{ |
if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
beeptime = 15000; |
BeepMuster = 0x0E00; |
} |
// limit gas to parameter setting |
LIMIT_MIN(GasMischanteil, (MIN_GAS + 10) * STICK_GAIN); |
if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// all BL-Ctrl connected? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(MissingMotor || Capacity.MinOfMaxPWM < 254 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors |
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase |
{ |
modell_fliegt = 1; |
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(Capacity.MinOfMaxPWM < 40) SpeakHoTT = SPEAK_ERR_MOTOR; |
#endif |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Mischer und PI-Regler |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DebugOut.Analog[7] = GasMischanteil; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gier-Anteil |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier |
#define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren |
if(GasMischanteil > MIN_GIERGAS) |
{ |
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; |
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); |
} |
else |
{ |
if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2; |
if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
} |
tmp_int = MAX_GAS*STICK_GAIN; |
if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Nick-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
else SummeNick += DiffNick; // I-Anteil bei HH |
if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8; // PI-Regler für Nick |
else pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern |
pd_ergebnis_nick += SummeNick / Ki; |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Roll-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
else SummeRoll += DiffRoll; // I-Anteil bei HH |
if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; // PI-Regler für Roll |
else pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern |
pd_ergebnis_roll += SummeRoll / Ki; |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Universal Mixer |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
for(i=0; i<MAX_MOTORS; i++) |
{ |
signed int tmp_int; |
if(Mixer.Motor[i][0] > 0) |
{ |
// Gas |
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L; |
// Nick |
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick; |
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick; |
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L; |
// Roll |
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll; |
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll; |
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L; |
// Gier |
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil; |
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil; |
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L; |
#ifdef REDUNDANT_FC_SLAVE |
tmp_int = (tmp_motorwert[i] + tmp_int) / 2; |
#else |
if(Motor[i].Version & MOTOR_STATE_FAST_MODE || tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // Beschleunigen |
else |
{ // BL-Ctrl 1.0 or 2.0 |
if(EE_Parameter.MotorSmooth == 0) |
{ |
tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing |
} |
else // 1 means tmp_int = tmp_int; |
if(EE_Parameter.MotorSmooth > 1) |
{ |
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value. |
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int) / EE_Parameter.MotorSmooth); |
} |
} |
#endif |
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4); |
Motor[i].SetPoint = tmp_int / 4; |
Motor[i].SetPointLowerBits = (tmp_int % 4)<<1; // (3 bits total) |
tmp_motorwert[i] = tmp_int; |
} |
else |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
#ifdef REDUNDANT_FC_MASTER |
if(Parameter_UserParam6 > 200 && RedundanceBlOperation) Motor[0].SetPoint = 0; |
#endif |
} |
//DebugOut.Analog[16] |
/branches/test_v2.12/V2.04a/fc.h |
---|
0,0 → 1,154 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
//#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel |
//#define GIER_GRAD_FAKTOR 1160L |
extern long GIER_GRAD_FAKTOR; // Abhängigkeit zwischen GyroIntegral und Winkel |
#define STICK_GAIN 4 |
#define ACC_AMPLIFY 6 |
#define HEIGHT_CONTROL_STICKTHRESHOLD 15 |
// FC_StatusFlags |
#define FC_STATUS_MOTOR_RUN 0x01 |
#define FC_STATUS_FLY 0x02 |
#define FC_STATUS_CALIBRATE 0x04 |
#define FC_STATUS_START 0x08 |
#define FC_STATUS_EMERGENCY_LANDING 0x10 |
#define FC_STATUS_LOWBAT 0x20 |
#define FC_STATUS_VARIO_TRIM_UP 0x40 |
#define FC_STATUS_VARIO_TRIM_DOWN 0x80 |
// FC_StatusFlags2 |
#define FC_STATUS2_CAREFREE 0x01 |
#define FC_STATUS2_ALTITUDE_CONTROL 0x02 |
#define FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04 |
#define FC_STATUS2_OUT1_ACTIVE 0x08 |
#define FC_STATUS2_OUT2_ACTIVE 0x10 |
#define FC_STATUS2_WAIT_FOR_TAKEOFF 0x20 // Motor Running, but still on the ground |
#define FC_STATUS2_AUTO_STARTING 0x40 |
#define FC_STATUS2_AUTO_LANDING 0x80 |
//NC_To_FC_Flags |
#define NC_TO_FC_FLYING_RANGE 0x01 |
#define NC_TO_FC_EMERGENCY_LANDING 0x02 |
#define NC_TO_FC_AUTOSTART 0x04 |
#define NC_TO_FC_AUTOLANDING 0x08 // not used |
extern volatile unsigned char FC_StatusFlags, FC_StatusFlags2; |
extern void ParameterZuordnung(void); |
extern unsigned char GetChannelValue(unsigned char ch); // gives the unsigned value of the channel |
#define Poti1 Poti[0] |
#define Poti2 Poti[1] |
#define Poti3 Poti[2] |
#define Poti4 Poti[3] |
#define Poti5 Poti[4] |
#define Poti6 Poti[5] |
#define Poti7 Poti[6] |
#define Poti8 Poti[7] |
#define LIMIT_MIN(value, min) {if(value <= min) value = min;} |
#define LIMIT_MAX(value, max) {if(value >= max) value = max;} |
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
#define CHK_POTI(b,a) {if(a < 248) b = a; else b = Poti[255 - a];} |
#define CHK_POTI_OFF(b,a,off) {if(a < 248) b = a; else b = Poti[255 - a] - off;} |
#define CHK_POTI_MM(b,a,min,max) {CHK_POTI(b,a); LIMIT_MIN_MAX(b, min, max);} |
#define CHK_POTI_MM_OFF(b,a,min,max,off) {CHK_POTI_OFF(b,a,off); LIMIT_MIN_MAX(b, min, max);} |
extern unsigned char Sekunde,Minute; |
extern unsigned int BaroExpandActive; |
extern long IntegralNick,IntegralNick2; |
extern long IntegralRoll,IntegralRoll2; |
//extern int IntegralNick,IntegralNick2; |
//extern int IntegralRoll,IntegralRoll2; |
extern unsigned char Poti[9]; |
extern long Mess_IntegralNick,Mess_IntegralNick2; |
extern long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern long IntegralAccNick,IntegralAccRoll; |
extern long SummeNick,SummeRoll; |
extern volatile long Mess_Integral_Hoch; |
extern long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern int KompassValue; |
extern int KompassSollWert; |
extern int KompassRichtung; |
extern char CalculateCompassTimer; |
extern unsigned char KompassFusion; |
extern unsigned char ControlHeading; |
extern int TrimNick, TrimRoll; |
extern long ErsatzKompass; |
extern int ErsatzKompassInGrad; // Kompasswert in Grad |
extern long HoehenWert; |
extern long SollHoehe; |
extern long FromNC_AltitudeSetpoint; |
extern unsigned char FromNC_AltitudeSpeed; |
extern unsigned char Parameter_HoehenSchalter; // Wert : 0-250 |
extern unsigned char CareFree; |
extern int MesswertNick,MesswertRoll,MesswertGier; |
extern int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern unsigned int NeutralAccX, NeutralAccY; |
extern unsigned char HoehenReglerAktiv; |
extern int NeutralAccZ; |
extern signed char NeutralAccZfine; |
extern long Umschlag180Nick, Umschlag180Roll; |
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier; |
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8; |
extern int NaviAccNick,NaviAccRoll,NaviCntAcc; |
extern unsigned int modell_fliegt; |
extern void MotorRegler(void); |
extern void SendMotorData(void); |
//void CalibrierMittelwert(void); |
//void Mittelwert(void); |
extern unsigned char SetNeutral(unsigned char AccAdjustment); // retuns: "sucess" |
extern void Piep(unsigned char Anzahl, unsigned int dauer); |
extern void CopyDebugValues(void); |
extern unsigned char ACC_AltitudeControl; |
extern signed int CosAttitude; // for projection of hoover gas |
extern unsigned char h,m,s; |
extern int StickNick,StickRoll,StickGier,StickGas; |
extern volatile unsigned char Timeout ; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern int DiffNick,DiffRoll; |
//extern int Poti1, Poti2, Poti3, Poti4; |
extern volatile unsigned char SenderOkay; |
extern int StickNick,StickRoll,StickGier; |
extern char MotorenEin; |
extern unsigned char CalibrationDone; |
extern unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
extern char VarioCharacter; |
extern signed int AltitudeSetpointTrimming; |
extern signed char WaypointTrimming; |
extern int HoverGas; |
extern unsigned char Parameter_Luftdruck_D; |
//extern unsigned char Parameter_MaxHoehe; |
extern unsigned char Parameter_Hoehe_P; |
extern unsigned char Parameter_Hoehe_ACC_Wirkung; |
extern unsigned char Parameter_KompassWirkung; |
extern unsigned char Parameter_Gyro_P; |
extern unsigned char Parameter_Gyro_I; |
extern unsigned char Parameter_Gier_P; |
extern unsigned char Parameter_ServoNickControl; |
extern unsigned char Parameter_ServoRollControl; |
extern unsigned char Parameter_ServoNickComp; |
extern unsigned char Parameter_ServoRollComp; |
extern unsigned char Parameter_AchsKopplung1; |
extern unsigned char Parameter_AchsKopplung2; |
//extern unsigned char Parameter_AchsGegenKopplung1; |
extern unsigned char Parameter_J16Bitmask; // for the J16 Output |
extern unsigned char Parameter_J16Timing; // for the J16 Output |
extern unsigned char Parameter_J17Bitmask; // for the J17 Output |
extern unsigned char Parameter_J17Timing; // for the J17 Output |
extern unsigned char Parameter_GlobalConfig; |
extern unsigned char Parameter_ExtraConfig; |
extern signed char MixerTable[MAX_MOTORS][4]; |
extern const signed char sintab[31]; |
extern unsigned char LowVoltageLandingActive; |
extern unsigned char LowVoltageHomeActive; |
#endif //_FC_H |
/branches/test_v2.12/V2.04a/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="jeti.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="spi.h"></File><File path="spi.c"></File><File path="led.h"></File><File path="led.c"></File><File path="fc.c"></File><File path="mymath.c"></File><File path="mymath.h"></File><File path="isqrt.S"></File><File path="Spektrum.c"></File><File path="Spektrum.h"></File><File path="eeprom.h"></File><File path="eeprom.c"></File><File path="libfc.h"></File><File path="debug.c"></File><File path="debug.h"></File><File path="hottmenu.c"></File><File path="hottmenu.h"></File></Project> |
/branches/test_v2.12/V2.04a/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/branches/test_v2.12/V2.04a/gps.h |
---|
0,0 → 1,3 |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
extern unsigned char GPS_Aid_StickMultiplikator; |
/branches/test_v2.12/V2.04a/hottmenu.c |
---|
0,0 → 1,949 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
unsigned char NaviData_WaypointIndex = 0; |
unsigned char NaviData_WaypointNumber = 0, NaviData_TargetHoldTime = 0, ToNC_Load_WP_List = 0, NaviData_MaxWpListIndex = 0; |
char WPL_Name[10];// = {" \0"}; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define HoTT_printf(format, args...) { _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);} |
#define HoTT_printfxy(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);} |
#define HoTT_printfxy_INV(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);} |
#define HoTT_printfxy_BLINK(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);} |
#define HoTT_printf_BLINK(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);} |
#define HoTT_printf_INV(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);} |
#define VOICE_MINIMALE_EINGANSSPANNUNG 16 |
#define VOICE_BEEP 5 |
#define HoTT_GRAD 96 |
#define HoTT_LINKS 123 |
#define HoTT_RECHTS 124 |
#define HoTT_OBEN 125 |
#define HoTT_UNTEN 126 |
#define HOTT_KEY_RIGHT 1 |
#define HOTT_KEY_DOWN 2 |
#define HOTT_KEY_UP 4 |
#define HOTT_KEY_SET 6 |
#define HOTT_KEY_LEFT 8 |
#define VARIO_ZERO 30000 |
unsigned int NaviData_TargetDistance = 0; |
unsigned char MaxBlTemperture = 0; |
unsigned char MinBlTemperture = 0; |
unsigned char HottestBl = 0; |
GPSPacket_t GPSPacket; |
VarioPacket_t VarioPacket; |
ASCIIPacket_t ASCIIPacket; |
ElectricAirPacket_t ElectricAirPacket; |
HoTTGeneral_t HoTTGeneral; |
unsigned char SpeakHoTT = SPEAK_MIKROKOPTER; |
unsigned char ToNC_SpeakHoTT = 0, ShowSettingNameTime = 0; |
int HoTTVarioMeter = 0; |
const char PROGMEM MIKROKOPTER[] = {" MikroKopter "}; |
const char PROGMEM UNDERVOLTAGE[] = {" !! LiPo voltage !! "}; |
const char PROGMEM LANDING[] = {" !! LANDING !! "}; |
const char PROGMEM SETTING[] = {"Set :"}; |
const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17] = |
{ |
//0123456789123456 |
"No Error \0", // 0 |
"Not compatible \0", // 1 |
"MK3Mag not compa\0", // 2 |
"No FC communicat\0", // 3 |
"Compass communic\0", // 4 |
"GPS communicatio\0", // 5 |
"compass value \0", // 6 |
"RC Signal lost \0", // 7 |
"FC spi rx error \0", // 8 |
"No NC communicat\0", // 9 |
"FC Nick Gyro \0", // 10 |
"FC Roll Gyro \0", // 11 |
"FC Yaw Gyro \0", // 12 |
"FC Nick ACC \0", // 13 |
"FC Roll ACC \0", // 14 |
"FC Z-ACC \0", // 15 |
"Pressure sensor \0", // 16 |
"I2C FC->BL-Ctrl \0", // 17 |
"Bl Missing \0", // 18 |
"Mixer Error \0", // 19 |
"Carefree Error \0", // 20 |
"GPS Fix lost \0", // 21 |
"Magnet Error \0", // 22 |
"Motor restart \0", // 23 |
"BL Limitation \0", // 24 |
"GPS Range \0", // 25 |
"No SD-Card \0", // 26 |
"SD-Logging error\0", // 27 |
"Flying range! \0", // 28 |
"Max Altitude! \0", // 29 |
"No GPS fix \0", // 30 |
"compass not cal.\0", // 31 |
"BL-Selftest \0", // 32 |
"no ext. compass \0", // 33 |
"compass sensor \0" // 34 |
}; |
const char PROGMEM HOTT_ERROR[MAX_ERR_NUMBER][2] = |
{ // 1 -> only in flight 0 -> also on ground |
//0123456789123456 |
{0,0},// "No Error \0", // 0 |
{SPEAK_ERROR,0}, // "Not compatible \0", // 1 |
{SPEAK_ERROR,0}, // "MK3Mag not compa\0", // 2 |
{SPEAK_ERR_NAVI,1}, // "No FC communicat\0", // 3 |
{SPEAK_ERR_COMPASS,1}, // "MK3Mag communica\0", // 4 |
{SPEAK_ERR_GPS,0}, // "GPS communicatio\0", // 5 |
{SPEAK_ERR_COMPASS,1}, // "compass value \0", // 6 |
{SPEAK_ERR_RECEICER,0},// "RC Signal lost \0", // 7 |
{SPEAK_ERR_NAVI,0}, // "FC spi rx error \0", // 8 |
{SPEAK_ERR_NAVI,0}, // "No NC communicat\0", // 9 |
{SPEAK_ERR_SENSOR,0}, // "FC Nick Gyro \0", // 10 |
{SPEAK_ERR_SENSOR,0}, // "FC Roll Gyro \0", // 11 |
{SPEAK_ERR_SENSOR,0}, // "FC Yaw Gyro \0", // 12 |
{SPEAK_ERR_SENSOR,0}, // "FC Nick ACC \0", // 13 |
{SPEAK_ERR_SENSOR,0}, // "FC Roll ACC \0", // 14 |
{SPEAK_ERR_SENSOR,0}, // "FC Z-ACC \0", // 15 |
{SPEAK_ERR_SENSOR,0}, // "Pressure sensor \0", // 16 |
{SPEAK_ERR_DATABUS,1}, // "I2C FC->BL-Ctrl \0", // 17 |
{SPEAK_ERR_DATABUS,1}, // "Bl Missing \0", // 18 |
{SPEAK_ERROR,0}, // "Mixer Error \0", // 19 |
{SPEAK_CF_OFF,1}, // "Carefree Error \0", // 20 |
{SPEAK_GPS_FIX,1}, // "GPS Fix lost \0", // 21 |
{SPEAK_ERR_COMPASS,0}, // "Magnet Error \0", // 22 |
{SPEAK_ERR_MOTOR,1}, // "Motor restart \0", // 23 |
{SPEAK_MAX_TEMPERAT,1},// "BL Limitation \0", // 24 |
{SPEAK_MAX_RANGE,1}, // "GPS Range \0", // 25 |
{SPEAK_ERROR,1}, // "No SD-Card \0", // 26 |
{SPEAK_ERROR,1}, // "SD-Logging error\0", // 27 |
{SPEAK_MAX_RANGE,1}, // "Flying range! \0", // 28 |
{SPEAK_MAX_ALTITUD,1}, // "Max Altitude! \0" // 29 |
{SPEAK_GPS_FIX,1}, // "No GPS fix \0" // 30 |
{SPEAK_ERR_CALIBARTION,0},// "compass not cal." // 31 |
{SPEAK_ERR_MOTOR,0}, // "BL-Selftest \0" // 32 |
{SPEAK_ERR_COMPASS,0}, // "no ext. compass" // 33 |
{SPEAK_ERR_COMPASS,0} // "compass sensor" // 34 |
}; |
void GetHottestBl(void) |
{ |
static unsigned char search = 0,tmp_max,tmp_min,who; |
if(Motor[search].Temperature > tmp_max) { tmp_max = Motor[search].Temperature; who = search;} |
else |
if(Motor[search].Temperature) if(Motor[search].Temperature < tmp_min) tmp_min = Motor[search].Temperature; |
if(++search >= MAX_MOTORS) |
{ |
search = 0; |
if(tmp_min != 255) MinBlTemperture = tmp_min; else MinBlTemperture = 0; |
MaxBlTemperture = tmp_max; |
HottestBl = who; |
tmp_min = 255; |
tmp_max = 0; |
who = 0; |
} |
} |
//--------------------------------------------------------------- |
void Hott_ClearLine(unsigned char line) |
{ |
HoTT_printfxy(0,line," "); |
} |
//--------------------------------------------------------------- |
unsigned char HoTT_Waring(void) |
{ |
unsigned char status = 0; |
static char old_status = 0; |
static int repeat; |
//if(Parameter_UserParam1) return(Parameter_UserParam1); |
ToNC_SpeakHoTT = SpeakHoTT; |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
{ |
if(LowVoltageLandingActive && (EE_Parameter.Receiver == RECEIVER_HOTT)) status = SPEAK_LANDING; |
else status = VOICE_MINIMALE_EINGANSSPANNUNG; // Jeti hat kein wort: "LANDEN" |
if(SpeakHoTT && old_status == VOICE_MINIMALE_EINGANSSPANNUNG) status = SpeakHoTT; // das soll auch noch durch kommen |
} |
else |
if(NC_ErrorCode && NC_ErrorCode < MAX_ERR_NUMBER) // Fehlercodes |
{ |
if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]); |
} |
if(!status) // Sprachansagen |
{ |
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted? |
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted? |
else status = SpeakHoTT; |
} |
else ToNC_SpeakHoTT = status; |
if(old_status == status) // Gleichen Fehler nur alle 4 sek bringen |
{ |
if(!CheckDelay(repeat)) return(0); |
repeat = SetDelay(4000); |
} |
else repeat = SetDelay(2000); |
if(status) |
{ |
if(status == SpeakHoTT) SpeakHoTT = 0; |
} |
old_status = status; |
// DebugOut.Analog[16] = status; |
return(status); |
} |
/* |
unsigned char HoTTErrorCode(void) |
{ |
return(NC_ErrorCode); |
} |
*/ |
//--------------------------------------------------------------- |
void NC_Fills_HoTT_Telemety(void) |
{ |
unsigned char *ptr = NULL; |
unsigned char max = 0,i,z; |
switch(FromNaviCtrl.Param.Byte[11]) |
{ |
case HOTT_VARIO_PACKET_ID: |
ptr = (unsigned char *) &VarioPacket; |
max = sizeof(VarioPacket); |
break; |
case HOTT_GPS_PACKET_ID: |
ptr = (unsigned char *) &GPSPacket; |
max = sizeof(GPSPacket); |
break; |
case HOTT_ELECTRIC_AIR_PACKET_ID: |
ptr = (unsigned char *) &ElectricAirPacket; |
max = sizeof(ElectricAirPacket); |
break; |
case HOTT_GENERAL_PACKET_ID: |
ptr = (unsigned char *) &HoTTGeneral; |
max = sizeof(HoTTGeneral); |
break; |
case JETI_GPS_PACKET_ID1: |
ptr = (unsigned char *) &JetiExData[14].Value; |
max = sizeof(JetiExData[14].Value); |
break; |
case JETI_GPS_PACKET_ID2: |
ptr = (unsigned char *) &JetiExData[15].Value; |
max = sizeof(JetiExData[15].Value); |
break; |
case HOTT_WPL_NAME: |
ptr = (unsigned char *) WPL_Name; |
max = sizeof(WPL_Name)-1; |
break; |
} |
z = FromNaviCtrl.Param.Byte[0]; // Data allocation |
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++) |
{ |
if(z >= max) break; |
ptr[z] = FromNaviCtrl.Param.Byte[2+i]; |
z++; |
} |
} |
unsigned int BuildHoTT_Vario(void) |
{ |
unsigned int tmp = VARIO_ZERO; |
if(VarioCharacter == '+' || VarioCharacter == '-') |
{ |
tmp = VARIO_ZERO + (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 3; |
if(tmp < VARIO_ZERO && tmp > VARIO_ZERO - 50) tmp = VARIO_ZERO - 50; // weil es sonst erst bei < 0,5m/sek piept |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = VARIO_ZERO + HoTTVarioMeter; |
if(tmp > VARIO_ZERO) |
{ |
if(tmp < VARIO_ZERO + 100) tmp = VARIO_ZERO; |
else tmp -= 100; |
} |
if(tmp < VARIO_ZERO) |
{ |
if(tmp > VARIO_ZERO - 100) tmp = VARIO_ZERO; |
else tmp += 100; |
} |
} |
else |
if(VarioCharacter == '^') tmp = VARIO_ZERO + FromNC_AltitudeSpeed * 10; |
else |
if(VarioCharacter == 'v') tmp = VARIO_ZERO - FromNC_AltitudeSpeed * 10; |
return(tmp); |
} |
//--------------------------------------------------------------- |
unsigned char HoTT_Telemety(unsigned char packet_request) |
{ |
unsigned char i; |
//Debug("rqst: %02X",packet_request); |
switch(packet_request) |
{ |
case HOTT_VARIO_PACKET_ID: |
GPSPacket.WarnBeep = HoTT_Waring(); // Achtung: das ist richtig hier, damit der Varioton schon vorher abgestellt wird |
VarioPacket.Altitude = HoehenWert/100 + 500; |
if(!GPSPacket.WarnBeep) VarioPacket.m_sec = BuildHoTT_Vario(); else VarioPacket.m_sec = VARIO_ZERO; |
VarioPacket.m_3sec = VarioPacket.m_sec; |
VarioPacket.m_10sec = VarioPacket.m_sec; |
if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude; |
if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude; |
VarioPacket.WarnBeep = 0;//HoTT_Waring(); |
HoTT_DataPointer = (unsigned char *) &VarioPacket; |
VarioPacket.FreeCharacters[0] = VarioCharacter; |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) VarioPacket.FreeCharacters[1] = 'C'; else VarioPacket.FreeCharacters[1] = ' '; |
// VarioPacket.FreeCharacters[2] = ' '; |
if(NC_ErrorCode) |
{ |
VarioPacket.Text[0] = NC_ErrorCode/10 + '0'; |
VarioPacket.Text[1] = NC_ErrorCode%10 + '0'; |
VarioPacket.Text[2] = ':'; |
for(i=0; i<16;i++) VarioPacket.Text[i+3] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]); |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(LowVoltageLandingActive) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&LANDING[i]); // no Error |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&UNDERVOLTAGE[i]); // no Error |
else |
if(ShowSettingNameTime) // no Error |
{ |
for(i=0; i<sizeof(SETTING);i++) VarioPacket.Text[i] = pgm_read_byte(&SETTING[i]); |
VarioPacket.Text[4] = '0' + ActiveParamSet; |
for(i=0; i<sizeof(EE_Parameter.Name);i++) VarioPacket.Text[i+7] = EE_Parameter.Name[i]; // no Error |
VarioPacket.Text[18] = ' '; |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(NaviData_WaypointNumber) |
{ |
unsigned int tmp_int; |
unsigned char tmp; |
VarioPacket.Text[0] = 'W'; VarioPacket.Text[1] = 'P'; |
VarioPacket.Text[2] = ' '; |
VarioPacket.Text[3] = '0'+(NaviData_WaypointIndex) / 10; |
VarioPacket.Text[4] = '0'+(NaviData_WaypointIndex) % 10; |
VarioPacket.Text[5] = '/'; |
VarioPacket.Text[6] = '0'+(NaviData_WaypointNumber) / 10; |
VarioPacket.Text[7] = '0'+(NaviData_WaypointNumber) % 10; |
VarioPacket.Text[8] = ' '; |
tmp_int = NaviData_TargetDistance; |
if(tmp_int > 1000) { VarioPacket.Text[9] = '0'+(tmp_int) / 1000; tmp_int %= 1000;} |
else VarioPacket.Text[9] = ' '; |
if(tmp_int > 100) { VarioPacket.Text[10] = '0'+(tmp_int) / 100; tmp_int %= 100;} |
else VarioPacket.Text[10] = ' '; |
VarioPacket.Text[11] = '0'+(tmp_int) / 10; |
VarioPacket.Text[12] = '0'+(tmp_int) % 10; |
VarioPacket.Text[13] = 'm'; |
VarioPacket.Text[14] = ' '; |
tmp = NaviData_TargetHoldTime; |
if(tmp > 100) { VarioPacket.Text[15] = '0'+(tmp) / 100; tmp %= 100;} else VarioPacket.Text[15] = ' '; |
VarioPacket.Text[16] = '0'+(tmp) / 10; |
VarioPacket.Text[17] = '0'+(tmp) % 10; |
VarioPacket.Text[18] = 's'; |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(!CalibrationDone) |
{ |
for(i=0; i<17;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i+2]); // no Error and not calibrated |
VarioPacket.Text[16] = '0'+VERSION_MAJOR; |
VarioPacket.Text[17] = '.'; |
VarioPacket.Text[18] = '0'+VERSION_MINOR/10; |
VarioPacket.Text[19] = '0'+VERSION_MINOR%10; |
VarioPacket.Text[20] = 'a'+VERSION_PATCH; |
} |
else |
{ |
for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error |
if(RedundanceBlOperation) VarioPacket.Text[0] = 'R'; |
} |
return(sizeof(VarioPacket)); |
break; |
case HOTT_GPS_PACKET_ID: |
GPSPacket.Altitude = HoehenWert/100 + 500; |
// GPSPacket.Distance = GPSInfo.HomeDistance/10; // macht die NC |
// GPSPacket.Heading = GPSInfo.HomeBearing/2; // macht die NC |
// GPSPacket.Speed = (GPSInfo.Speed * 36) / 10; // macht die NC |
// GPSPacket.WarnBeep = HoTT_Waring(); //(wird jetzt weiter oben gemacht) |
if(!GPSPacket.WarnBeep) GPSPacket.m_sec = BuildHoTT_Vario(); else GPSPacket.m_sec = VARIO_ZERO; |
GPSPacket.m_3sec = 120; |
GPSPacket.NumOfSats = GPSInfo.NumOfSats; |
if(GPSInfo.Flags & FLAG_DIFFSOLN) GPSPacket.SatFix = 'D'; |
else |
if(GPSInfo.SatFix == SATFIX_3D) GPSPacket.SatFix = ' '; |
else GPSPacket.SatFix = '!'; |
HoTT_DataPointer = (unsigned char *) &GPSPacket; |
GPSPacket.FreeCharacters[0] = NC_GPS_ModeCharacter; |
GPSPacket.FreeCharacters[2] = GPSPacket.SatFix; |
GPSPacket.HomeDirection = GPSInfo.HomeBearing / 2;//230; |
return(sizeof(GPSPacket)); |
break; |
case HOTT_ELECTRIC_AIR_PACKET_ID: |
GetHottestBl(); |
ElectricAirPacket.Altitude = HoehenWert/100 + 500; |
ElectricAirPacket.Battery1 = UBat; |
ElectricAirPacket.Battery2 = UBat; |
ElectricAirPacket.VoltageCell1 = ErsatzKompassInGrad / 2; |
ElectricAirPacket.VoltageCell8 = ElectricAirPacket.VoltageCell1; |
ElectricAirPacket.VoltageCell6 = GPSInfo.HomeBearing / 2; |
ElectricAirPacket.VoltageCell7 = GPSInfo.HomeDistance/20; |
ElectricAirPacket.VoltageCell13 = ElectricAirPacket.VoltageCell6; |
ElectricAirPacket.VoltageCell14 = ElectricAirPacket.VoltageCell7; |
if(!GPSPacket.WarnBeep) ElectricAirPacket.m_sec = BuildHoTT_Vario(); else ElectricAirPacket.m_sec = VARIO_ZERO; |
ElectricAirPacket.m_3sec = 120; |
ElectricAirPacket.InputVoltage = UBat; |
ElectricAirPacket.Temperature1 = MinBlTemperture + 20; |
ElectricAirPacket.Temperature2 = MaxBlTemperture + 20; |
ElectricAirPacket.Capacity = Capacity.UsedCapacity/10; |
// ElectricAirPacket.WarnBeep = 0;//HoTT_Waring(); |
ElectricAirPacket.WarnBeep = GPSPacket.WarnBeep; |
ElectricAirPacket.Current = Capacity.ActualCurrent; |
HoTT_DataPointer = (unsigned char *) &ElectricAirPacket; |
ElectricAirPacket.FlightTimeMinutes = FlugSekunden / 60; |
ElectricAirPacket.FlightTimeSeconds = FlugSekunden % 60; |
return(sizeof(ElectricAirPacket)); |
break; |
case HOTT_GENERAL_PACKET_ID: |
GetHottestBl(); |
HoTTGeneral.Rpm = GPSInfo.HomeDistance/100; |
HoTTGeneral.VoltageCell1 = ErsatzKompassInGrad / 2; |
HoTTGeneral.VoltageCell2 = KompassValue / 2; |
//HoTTGeneral.VoltageCell3 = Magnetstaerke -> macht NC |
//HoTTGeneral.VoltageCell4 = Inclinition -> macht NC |
HoTTGeneral.VoltageCell5 = DebugOut.Analog[28]; // I2C ErrorCounter |
HoTTGeneral.VoltageCell6 = GPSInfo.HomeBearing / 2; |
if(UBat > BattLowVoltageWarning + 2) HoTTGeneral.FuelPercent = (UBat - (BattLowVoltageWarning + 2)) * 3; |
else HoTTGeneral.FuelPercent = 0; |
if(HoTTGeneral.FuelPercent > 100) HoTTGeneral.FuelPercent = 100; |
HoTTGeneral.FuelCapacity = NC_ErrorCode;//HoehenWert/100; // Oelpegel |
// if(HoTTGeneral.FuelCapacity < 0) HoTTGeneral.FuelCapacity = 0; |
HoTTGeneral.Altitude = HoehenWert/100 + 500; |
HoTTGeneral.Battery1 = UBat; |
HoTTGeneral.Battery2 = UBat; |
if(!GPSPacket.WarnBeep) HoTTGeneral.m_sec = BuildHoTT_Vario(); else HoTTGeneral.m_sec = VARIO_ZERO; |
HoTTGeneral.m_3sec = 120 + GPSPacket.WarnBeep; |
HoTTGeneral.InputVoltage = UBat; |
HoTTGeneral.Temperature1 = MinBlTemperture + 20; |
HoTTGeneral.Temperature2 = MaxBlTemperture + 20; |
HoTTGeneral.Capacity = Capacity.UsedCapacity/10; |
HoTTGeneral.WarnBeep = 0;//HoTT_Waring(); |
HoTTGeneral.Current = Capacity.ActualCurrent; |
//HoTTGeneral.ErrorNumber = HoTTErrorCode(); |
HoTT_DataPointer = (unsigned char *) &HoTTGeneral; |
return(sizeof(HoTTGeneral)); |
break; |
default: return(0); |
} |
} |
//--------------------------------------------------------------- |
void HoTT_Menu(void) |
{ |
static unsigned char load_waypoint_tmp2 = 1, changed, load_waypoint_tmp = 1, changed2; |
static unsigned char line, page = 0,show_current = 0,show_mag = 0, show_poti = 0; |
unsigned char tmp; |
HoTTVarioMeter = (HoTTVarioMeter * 7 + VarioMeter) / 8; |
// if(HottKeyboard) {beeptime = 1000;}; |
switch(page) |
{ |
case 0: |
switch(line++) |
{ |
case 0: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,0," %2i.%1iV ",UBat/10, UBat%10) |
else |
HoTT_printfxy(0,0," %2i.%1iV ",UBat/10, UBat%10) |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,0,"ALT:%4im %c", (int16_t)(HoehenWert/100),VarioCharacter) |
else HoTT_printfxy(10,0,"ALT:%4im ", (int16_t)(HoehenWert/100)) |
} |
else HoTT_printfxy(10,0,"ALT:---- "); |
break; |
case 1: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60) |
else HoTT_printfxy(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60); |
HoTT_printfxy(10,1,"DIR: %3d%c",ErsatzKompassInGrad, HoTT_GRAD); |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(20,1,"C") else HoTT_printfxy(20,1," "); |
break; |
case 2: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,2," %5i ",Capacity.UsedCapacity) |
else HoTT_printfxy(0,2," %5i ",Capacity.UsedCapacity); |
HoTT_printfxy(12,2,"I:%2i.%1iA ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
break; |
case 3: |
HoTT_printfxy(9,0,":"); |
HoTT_printfxy(9,1,":"); |
HoTT_printfxy(9,2,":"); |
HoTT_printfxy(0,3,"---------+-----------"); |
// HoTT_printfxy(0,3,"---------------------"); |
HoTT_printfxy(0,6,"---------------------"); |
break; |
case 4: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(9,4,":"); |
HoTT_printfxy(0,4,"SAT:%2d ",GPSInfo.NumOfSats); |
HoTT_printfxy(10,4,"DIST:%3dm",GPSInfo.HomeDistance/10); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
if(GPSInfo.Flags & FLAG_DIFFSOLN) HoTT_printfxy(7,4,"D ") |
else HoTT_printfxy(7,4,"3D"); |
break; |
default: |
HoTT_printfxy_BLINK(7,4,"!!"); |
break; |
} |
} |
else |
{ |
Hott_ClearLine(4); |
} |
break; |
case 5: |
if(NaviDataOkay) |
{ |
if(show_mag) |
{ |
HoTT_printfxy(0,5,"MAG:%3u%% ",EarthMagneticField); |
HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter); |
HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic); |
} |
else |
{ |
HoTT_printfxy(0,5," %2um/s: HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter); |
} |
} |
else Hott_ClearLine(5); |
break; |
case 6: |
break; |
case 7: if(NC_ErrorCode) |
{ |
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER) |
{ |
Hott_ClearLine(7); |
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode); |
} |
else |
{ |
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);}; |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!") |
else HoTT_printfxy(0,7," www.MikroKopter.de "); |
break; |
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring(); |
// ASCIIPacket.WarnBeep = Parameter_UserParam1; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_mag) show_mag = 0; else show_mag = 1;} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 1: |
switch(line++) |
{ |
case 0: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity) |
else HoTT_printfxy(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity); |
break; |
case 1: |
HoTT_printfxy(0,1,"DIR:%3d%c",KompassValue, HoTT_GRAD); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,1,"ALT:%4im", (int16_t)(HoehenWert/100)) |
else HoTT_printfxy(10,1,"ALT:%4im", (int16_t)(HoehenWert/100)) |
} |
else HoTT_printfxy(10,1,"ALT:---- "); |
HoTT_printfxy(20,1,"%c",VarioCharacter); |
break; |
case 2: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(1,2,"HM:%3d%c DIST:%3dm %c", GPSInfo.HomeBearing, HoTT_GRAD, GPSInfo.HomeDistance/10, NC_GPS_ModeCharacter); |
} |
else |
{ |
Hott_ClearLine(2); |
} |
break; |
case 3: |
HoTT_printfxy(0,3,"PWR:%2i.%1iA (%iW) ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10,Capacity.ActualPower); |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(19,3,"CF") else HoTT_printfxy(19,3," "); |
break; |
case 4: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(0,4,"GPS:%2um/s SAT:%d ",GPSInfo.Speed,GPSInfo.NumOfSats); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
HoTT_printfxy(16,4," 3D "); |
break; |
//case SATFIX_2D: |
//case SATFIX_NONE: |
default: |
HoTT_printfxy_BLINK(16,4,"NOFIX"); |
break; |
} |
if(GPSInfo.Flags & FLAG_DIFFSOLN) |
{ |
HoTT_printfxy(16,4,"DGPS "); |
} |
} |
else |
{ //012345678901234567890 |
HoTT_printfxy(0,4," No NaviCtrl "); |
} |
break; |
case 5: |
if(show_current) |
{ |
// HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[0].Current/10,Motor[0].Current%10,Motor[1].Current/10,Motor[1].Current%10,Motor[2].Current/10,Motor[2].Current%10,Motor[3].Current/10,Motor[3].Current%10); |
HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", BL3_Current(0)/10,BL3_Current(0)%10,BL3_Current(1)/10,BL3_Current(1)%10,BL3_Current(2)/10,BL3_Current(2)%10,BL3_Current(3)/10,BL3_Current(3)%10); |
} |
else |
{ |
HoTT_printfxy(0,5,"%3i %3i %3i %3i%cC", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature,HoTT_GRAD); |
} |
break; |
case 6: |
if(show_current) |
{ |
if(RequiredMotors == 4) Hott_ClearLine(6); |
else |
// if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10) |
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", BL3_Current(4)/10,BL3_Current(4)%10, BL3_Current(5)/10,BL3_Current(5)%10) |
else |
// if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10,Motor[6].Current/10,Motor[6].Current%10,Motor[7].Current/10,Motor[7].Current%10); |
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", BL3_Current(4)/10,BL3_Current(4)%10,BL3_Current(5)/10,BL3_Current(5)%10,BL3_Current(6)/10,BL3_Current(6)%10,BL3_Current(7)/10,BL3_Current(7)%10,BL3_Current(8)/10,BL3_Current(8)%10); |
} |
else |
{ |
if(RequiredMotors == 4) Hott_ClearLine(6); |
else |
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%3i %3i%cC ", Motor[4].Temperature, Motor[5].Temperature,HoTT_GRAD) |
else |
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%3i %3i %3i %3i%cC", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature,HoTT_GRAD); |
} |
break; |
case 7: if(NC_ErrorCode) |
{ |
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER) |
{ |
Hott_ClearLine(7); |
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode); |
} |
else |
{ |
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);}; |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!") |
else HoTT_printfxy(0,7," www.MikroKopter.de "); |
break; |
case 8: // ASCIIPacket.WarnBeep = HoTT_Waring(); |
// ASCIIPacket.WarnBeep = Parameter_UserParam1; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_current) show_current = 0; else show_current = 1; Hott_ClearLine(5); Hott_ClearLine(6);} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 2; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 0; line = 0;} |
//if(HottKeyboard) HoTT_printfxy(15,6,"%KEY:%02x ",HottKeyboard); |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 2: |
switch(line++) |
{ |
case 0: |
HoTT_printfxy_INV(0,0,"Setting:%u %s ",ActiveParamSet,EE_Parameter.Name); |
break; |
case 1: HoTT_printfxy(0,1,"Min:%2i.%1iV %s ",BattLowVoltageWarning/10, BattLowVoltageWarning%10, Mixer.Name); |
break; |
case 2: HoTT_printfxy(0,2,"ALT:"); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(!(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER)) HoTT_printf("POTI:%3u ", Parameter_HoehenSchalter) |
else |
{ |
if(Parameter_HoehenSchalter > 50) HoTT_printf("(ON) ") else HoTT_printf("(OFF) "); |
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) HoTT_printf("LIMIT", Parameter_HoehenSchalter) |
else HoTT_printf("VARIO", Parameter_HoehenSchalter); |
} |
} |
else |
HoTT_printf("DISABLED"); |
break; |
case 3: HoTT_printfxy(0,3,"CF:"); |
if(!EE_Parameter.CareFreeChannel) HoTT_printf("DISABLED") |
else |
{ |
if(CareFree) HoTT_printf(" (ON) ") else HoTT_printf(" (OFF)"); |
if(EE_Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE) HoTT_printf(" TEACH"); |
} |
break; |
case 4: HoTT_printfxy(0,4,"GPS:"); |
if(!(Parameter_GlobalConfig & CFG_GPS_AKTIV)) HoTT_printf("DISABLED") |
else |
{ |
tmp = GetChannelValue(EE_Parameter.NaviGpsModeChannel); |
if(tmp < 50) HoTT_printf("(FREE)") |
else |
if(tmp >= 180) HoTT_printf("(HOME)") |
else |
if(EE_Parameter.ExtraConfig & CFG_GPS_AID) HoTT_printf("(AID) ") |
else HoTT_printf("(HOLD)") |
} |
if(EE_Parameter.FailSafeTime) HoTT_printfxy(10,4," FS:%usek ",EE_Parameter.FailSafeTime) |
break; |
case 5: HoTT_printfxy(0,5,"HOME ALT:"); |
if(EE_Parameter.ComingHomeAltitude) HoTT_printf("%um",EE_Parameter.ComingHomeAltitude) else HoTT_printf("HOLD "); |
break; |
case 6: |
if(!show_poti) |
{ |
HoTT_printfxy(0,6,"Ni:%4i Ro:%4i C:%3i",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]], Parameter_ServoNickControl); |
HoTT_printfxy(0,7,"Gs:%4i Ya:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
} |
else |
{ |
HoTT_printfxy(0,6,"P1:%4i P2:%4i 3:%3i",Poti1,Poti2, Poti3); |
HoTT_printfxy(0,7,"P4:%4i P5:%4i 6:%3i",Poti4,Poti5, Poti6); |
} |
break; |
case 7: //HoTT_printfxy(0,6,"WARNINGS:"); |
if(HoTTBlink) |
{ |
LIBFC_HoTT_SetPos(6 * 21); |
if(!(Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) HoTT_printf_BLINK("COUPLING OFF! "); |
if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! "); |
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! "); |
if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! "); |
} |
break; |
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring(); |
break; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_poti) show_poti = 0; else show_poti = 1; Hott_ClearLine(6); Hott_ClearLine(7);} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 3: |
switch(line++) |
{ |
case 0: |
HoTT_printfxy(0,0,"Load Waypoints"); |
HoTT_printfxy(0,1,"(Relative Positions)"); |
// HoTT_printfxy(0,1,"(Absolute)"); |
break; |
case 1: |
if(NaviData_WaypointNumber) HoTT_printfxy(0,6,"Active WP:%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else HoTT_printfxy(0,6,"No WPs active ") |
break; |
case 2: |
HoTT_printfxy(0,7,"%2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(11,7,"%s",WPL_Name) |
case 3: |
case 4: |
case 5: |
if(load_waypoint_tmp2) |
{ |
if(changed2 && HoTTBlink) HoTT_printfxy(10,3," ") |
else HoTT_printfxy(10,3,"%2i ",load_waypoint_tmp2); |
HoTT_printfxy(0,3,"Load list:") |
} |
else |
{ |
HoTT_printfxy(0,3,"Load list: -- "); |
} |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,4,"No SD-Card ") |
else |
{ |
if(GPSInfo.SatFix == SATFIX_3D) |
{ |
if(changed2 && load_waypoint_tmp2) HoTT_printfxy(0,4,"(Set -> Load)") |
else HoTT_printfxy(0,4," "); |
if(HottKeyboard == HOTT_KEY_SET) { if(load_waypoint_tmp2) ToNC_Load_WP_List = load_waypoint_tmp2 | 128; changed2 = 0;} |
} else HoTT_printfxy(0,4,"!No GPS-Fix! "); |
} |
if(HottKeyboard == HOTT_KEY_UP && load_waypoint_tmp2 < NaviData_MaxWpListIndex) { changed2 = 1; load_waypoint_tmp2++;HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && load_waypoint_tmp2 > 1) { changed2 = 1; load_waypoint_tmp2--;HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 4; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 2; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 4: |
switch(line++) |
{ |
case 0: |
HoTT_printfxy(0,0,"Load Waypoints"); |
HoTT_printfxy(0,1,"(Fixed Positions)"); |
break; |
case 1: |
if(NaviData_WaypointNumber) HoTT_printfxy(0,6,"Active WP:%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else HoTT_printfxy(0,6,"No WPs active ") |
break; |
case 2: |
HoTT_printfxy(0,7,"%2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(11,7,"%s",WPL_Name) |
case 3: |
case 4: |
case 5: |
if(HottKeyboard) DebugOut.Analog[17]++; |
if(load_waypoint_tmp) |
{ |
if(changed && HoTTBlink) HoTT_printfxy(10,3," ") |
else HoTT_printfxy(10,3,"%2d (FIX)",load_waypoint_tmp); |
HoTT_printfxy(0,3,"Load list:") |
} |
else |
{ |
HoTT_printfxy(0,3,"Load list: -- "); |
} |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,4,"No SD-Card ") |
else |
{ |
if(changed && load_waypoint_tmp) HoTT_printfxy(0,4,"(Set -> Load)") |
else HoTT_printfxy(0,4," "); |
} |
if(HottKeyboard == HOTT_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { changed = 1; load_waypoint_tmp++; HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && load_waypoint_tmp > 1) { changed = 1; load_waypoint_tmp--; HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_SET) { if(load_waypoint_tmp) ToNC_Load_WP_List = load_waypoint_tmp; changed = 0;} |
// if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 4; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 3; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
default: page = 0; |
break; |
} |
} |
#endif |
/branches/test_v2.12/V2.04a/hottmenu.h |
---|
0,0 → 1,237 |
#ifndef _HOTTMENU_H |
#define _HOTTMENU_H |
extern unsigned char NaviData_WaypointIndex; |
extern unsigned char NaviData_WaypointNumber, NaviData_TargetHoldTime,ToNC_Load_WP_List,NaviData_MaxWpListIndex; |
extern char WPL_Name[10]; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define SPEAK_ERR_CALIBARTION 1 |
#define SPEAK_ERR_RECEICER 2 |
#define SPEAK_ERR_DATABUS 3 |
#define SPEAK_ERR_NAVI 4 |
#define SPEAK_ERROR 5 |
#define SPEAK_ERR_COMPASS 6 |
#define SPEAK_ERR_SENSOR 7 |
#define SPEAK_ERR_GPS 8 |
#define SPEAK_ERR_MOTOR 9 |
#define SPEAK_MAX_TEMPERAT 10 |
#define SPEAK_ALTI_REACHED 11 |
#define SPEAK_WP_REACHED 12 |
#define SPEAK_NEXT_WP 13 |
#define SPEAK_LANDING 14 |
#define SPEAK_GPS_FIX 15 |
#define SPEAK_UNDERVOLTAGE 16 |
#define SPEAK_GPS_HOLD 17 |
#define SPEAK_GPS_HOME 18 |
#define SPEAK_GPS_OFF 19 |
#define SPEAK_BEEP 20 |
#define SPEAK_MIKROKOPTER 21 |
#define SPEAK_CAPACITY 22 |
#define SPEAK_CF_OFF 23 |
#define SPEAK_CALIBRATE 24 |
#define SPEAK_MAX_RANGE 25 |
#define SPEAK_MAX_ALTITUD 26 |
#define SPEAK_MK_OFF 38 |
#define SPEAK_ALTITUDE_ON 39 |
#define SPEAK_ALTITUDE_OFF 40 |
#define SPEAK_CF_ON 46 |
#define SPEAK_SINKING 47 |
#define SPEAK_RISING 48 |
#define SPEAK_HOLDING 49 |
#define SPEAK_GPS_ON 50 |
#define SPEAK_FOLLWING 51 |
#define SPEAK_STARTING 52 |
#define MAX_ERR_NUMBER (34+1) |
extern const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17]; |
extern unsigned int NaviData_TargetDistance; |
extern unsigned char MaxBlTemperture; |
extern unsigned char MinBlTemperture; |
extern unsigned char HottestBl; |
extern unsigned char HottKeyboard,HoTT_RequestedSensor; |
extern unsigned char HottUpdate(unsigned char key); |
extern unsigned char SpeakHoTT,ShowSettingNameTime; |
extern unsigned char ToNC_SpeakHoTT; |
extern volatile unsigned char *HoTT_DataPointer; |
extern void CreateHoTT_Menu(void); |
extern void LIBFC_HoTT_Putchar(char); |
extern void LIBFC_HoTT_Putchar_INV(char); // print Invers |
extern void LIBFC_HoTT_Putchar_BLINK(char); |
extern void LIBFC_HoTT_SetPos(unsigned char); |
extern void LIBFC_HoTT_Clear(void); |
extern void NC_Fills_HoTT_Telemety(void); |
extern void HoTT_Menu(void); |
extern unsigned char HoTT_Telemety(unsigned char); |
extern unsigned char HoTT_Waring(void); |
extern volatile unsigned char HoTTBlink; |
extern void GetHottestBl(void); |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // HOTT_GENERAL_PACKET_ID |
unsigned char WarnBeep; // 3 Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xD0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert) |
unsigned char VoltageCell2; // 8 209 = 4,18V |
unsigned char VoltageCell3; // 9 |
unsigned char VoltageCell4; // 10 |
unsigned char VoltageCell5; // 11 |
unsigned char VoltageCell6; // 12 |
unsigned int Battery1; // 13+14 51 = 5,1V |
unsigned int Battery2; // 15+16 51 = 5,1V |
unsigned char Temperature1; // 17 44 = 24°C, 0 = -20°C |
unsigned char Temperature2; // 18 44 = 24°C, 0 = -20°C |
unsigned char FuelPercent; // 19 |
signed int FuelCapacity; // 20+21 |
unsigned int Rpm; // 22+23 |
signed int Altitude; // 24+25 |
unsigned int m_sec; // 26+27 3000 = 0 |
unsigned char m_3sec; // 28 120 = 0 |
unsigned int Current; // 29+30 1 = 0.1A |
unsigned int InputVoltage; // 31+32 66 = 6,6V |
unsigned int Capacity; // 33+34 1 = 10mAh |
unsigned int Speed; // 35+36 |
unsigned char LowestCellVoltage; // 37 |
unsigned char LowestCellNumber; // 38 |
unsigned int Rpm2; // 39+40 |
unsigned char ErrorNumber; // 41 |
unsigned char Pressure; // 42 in 0,1bar 20=2,0bar |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} HoTTGeneral_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // HOTT_ELECTRIC_AIR_PACKET_ID |
unsigned char WarnBeep; // Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xE0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert) |
unsigned char VoltageCell2; // 209 = 4,18V |
unsigned char VoltageCell3; // |
unsigned char VoltageCell4; // |
unsigned char VoltageCell5; // |
unsigned char VoltageCell6; // |
unsigned char VoltageCell7; // |
unsigned char VoltageCell8; // |
unsigned char VoltageCell9; // |
unsigned char VoltageCell10; // |
unsigned char VoltageCell11; // |
unsigned char VoltageCell12; // |
unsigned char VoltageCell13; // |
unsigned char VoltageCell14; // 20 |
unsigned int Battery1; // 21+22 51 = 5,1V |
unsigned int Battery2; // 23+24 51 = 5,1V |
unsigned char Temperature1; // 25 44 = 24°C, 0 = -20°C |
unsigned char Temperature2; // 26 44 = 24°C, 0 = -20°C |
signed int Altitude; // 27+28 |
unsigned int Current; // 29+30 1 = 0.1A |
unsigned int InputVoltage; // 31+32 66 = 6,6V |
unsigned int Capacity; // 33+34 1 = 10mAh |
unsigned int m_sec; // 35+36 30000 = 0 |
unsigned char m_3sec; // 37 120 = 0 |
unsigned int Rpm; // 38+39 |
unsigned char FlightTimeMinutes; // 40 |
unsigned char FlightTimeSeconds; // 41 |
unsigned char Speed; // 42 1=2km |
unsigned char Version; // 43 0x00 |
unsigned char EndByte; // 0x7D |
} ElectricAirPacket_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // 0x89 - Vario ID |
unsigned char WarnBeep; //3 // Anzahl der Töne 0..36 |
unsigned char SensorID; // 0x90 |
unsigned char InverseStatus; |
signed int Altitude; //6+7 // 500 = 0m |
signed int MaxAltitude; //8+9 // 500 = 0m |
signed int MinAltitude; //10+11 // 500 = 0m |
unsigned int m_sec; //12+13 // 3000 = 0 |
unsigned int m_3sec; //14+15 |
unsigned int m_10sec; //26+17 |
char Text[21]; //18-38 |
char FreeCharacters[3]; // 39-41 |
unsigned char NullByte; // 42 0x00 |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} VarioPacket_t; |
typedef struct |
{ |
unsigned char StartByte; //0 // 0x7C |
unsigned char Packet_ID; //1 // 0x8A - GPS ID |
unsigned char WarnBeep; //2 // Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xA0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char Heading; //7 // 1 = 2° |
unsigned int Speed; //8+9 // in km/h |
unsigned char Lat_North; //10 |
unsigned char Lat_G; //11 |
unsigned char Lat_M; //12 |
unsigned char Lat_Sek1; //13 |
unsigned char Lat_Sek2; //14 |
unsigned char Lon_East; //15 |
unsigned char Lon_G; //16 |
unsigned char Lon_M; //17 |
unsigned char Lon_Sek1; //18 |
unsigned char Lon_Sek2; //19 |
unsigned int Distance; //20+21 // 9000 = 0m |
signed int Altitude; //22+23 // 500 = 0m |
unsigned int m_sec; //24+25 // 3000 = 0 |
unsigned char m_3sec; //26 120 = 0 |
unsigned char NumOfSats; //27 |
unsigned char SatFix; //28 |
unsigned char HomeDirection; // 29 |
unsigned char AngleX; // 30 |
unsigned char AngleY; // 31 |
unsigned char AngleZ; // 32 |
signed int GyroX; //33+34 |
signed int GyroY; //35+36 |
signed int GyroZ; //37+38 |
unsigned char Vibration; // 39 |
char FreeCharacters[3]; // 40-42 |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} GPSPacket_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7B |
unsigned char Packet_ID; // |
unsigned char WarnBeep; // Anzahl der Töne 0..36 |
char Text[8*21]; |
unsigned char EndByte; // 0x7D |
} ASCIIPacket_t; |
extern GPSPacket_t GPSPacket; |
extern VarioPacket_t VarioPacket; |
extern ASCIIPacket_t ASCIIPacket; |
extern ElectricAirPacket_t ElectricAirPacket; |
extern HoTTGeneral_t HoTTGeneral; |
#define HOTT_VARIO_PACKET_ID 0x89 |
#define HOTT_GPS_PACKET_ID 0x8A |
#define HOTT_ELECTRIC_AIR_PACKET_ID 0x8E |
#define HOTT_GENERAL_PACKET_ID 0x8D |
#define JETI_GPS_PACKET_ID1 0x01 |
#define JETI_GPS_PACKET_ID2 0x02 |
#define HOTT_WPL_NAME 0x03 |
#endif |
#endif |
/branches/test_v2.12/V2.04a/isqrt.S |
---|
0,0 → 1,203 |
;-----------------------------------------------------------------------------; |
; Fast integer squareroot routines for avr-gcc project (C)ChaN, 2008 |
; http://elm-chan.org/docs/avrlib/sqrt32.S |
;-----------------------------------------------------------------------------; |
; uint16_t isqrt32 (uint32_t n); |
; uint8_t isqrt16 (uint16_t n); |
; uint16_t ihypot (int16_t x, int16_t y); |
;-----------------------------------------------------------------------------: |
; 32bit integer squareroot |
;-----------------------------------------------------------------------------; |
; uint16_t isqrt32 ( |
; uint32_t n |
; ); |
; |
; Return Value: |
; Squareroot of n. |
; |
; Size = 53 words |
; Clock = 532..548 cycles |
; Stack = 0 byte |
.global isqrt32 |
.func isqrt32 |
isqrt32: |
clr r0 |
clr r18 |
clr r19 |
clr r20 |
ldi r21, 1 |
clr r27 |
clr r30 |
clr r31 |
ldi r26, 16 |
1: lsl r22 |
rol r23 |
rol r24 |
rol r25 |
rol r0 |
rol r18 |
rol r19 |
rol r20 |
lsl r22 |
rol r23 |
rol r24 |
rol r25 |
rol r0 |
rol r18 |
rol r19 |
rol r20 |
brpl 2f |
add r0, r21 |
adc r18, r27 |
adc r19, r30 |
adc r20, r31 |
rjmp 3f |
2: sub r0, r21 |
sbc r18, r27 |
sbc r19, r30 |
sbc r20, r31 |
3: lsl r21 |
rol r27 |
rol r30 |
andi r21, 0b11111000 |
ori r21, 0b00000101 |
sbrc r20, 7 |
subi r21, 2 |
dec r26 |
brne 1b |
lsr r30 |
ror r27 |
ror r21 |
lsr r30 |
ror r27 |
ror r21 |
mov r24, r21 |
mov r25, r27 |
ret |
.endfunc |
;-----------------------------------------------------------------------------: |
; 16bit integer squareroot |
;-----------------------------------------------------------------------------; |
; uint8_t isqrt16 ( |
; uint16_t n |
; ); |
; |
; Return Value: |
; Squareroot of n. |
; |
; Size = 33 words |
; Clock = 181..189 cycles |
; Stack = 0 byte |
.global isqrt16 |
.func isqrt16 |
isqrt16: |
clr r18 |
clr r19 |
ldi r20, 1 |
clr r21 |
ldi r22, 8 |
1: lsl r24 |
rol r25 |
rol r18 |
rol r19 |
lsl r24 |
rol r25 |
rol r18 |
rol r19 |
brpl 2f |
add r18, r20 |
adc r19, r21 |
rjmp 3f |
2: sub r18, r20 |
sbc r19, r21 |
3: lsl r20 |
rol r21 |
andi r20, 0b11111000 |
ori r20, 0b00000101 |
sbrc r19, 7 |
subi r20, 2 |
dec r22 |
brne 1b |
lsr r21 |
ror r20 |
lsr r21 |
ror r20 |
mov r24, r20 |
ret |
.endfunc |
;-----------------------------------------------------------------------------: |
; 16bit integer hypot (megaAVR is required) |
;-----------------------------------------------------------------------------; |
; uint16_t ihypot ( |
; int16_t x, |
; int16_t y |
; ); |
; |
; Return Value: |
; Squareroot of (x*x + y*y) |
; |
; Size = 42 words |
; Clock = 581..597 cycles |
; Stack = 0 byte |
.global ihypot |
.func ihypot |
ihypot: |
clr r26 |
sbrs r25, 7 |
rjmp 1f |
com r24 |
com r25 |
adc r24, r26 |
adc r25, r26 |
1: sbrs r23, 7 |
rjmp 2f |
com r22 |
com r23 |
adc r22, r26 |
adc r23, r26 |
2: mul r22, r22 |
movw r18, r0 |
mul r23, r23 |
movw r20, r0 |
mul r22, r23 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
mul r24, r24 |
movw r30, r0 |
mul r25, r25 |
add r18, r30 |
adc r19, r31 |
adc r20, r0 |
adc r21, r1 |
mul r24, r25 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
movw r24, r20 |
movw r22, r18 |
clr r1 |
rjmp isqrt32 |
.endfunc |
/branches/test_v2.12/V2.04a/isqrt.h |
---|
0,0 → 1,11 |
#ifndef _ISQRT_H |
#define _ISQRT_H |
#include <inttypes.h> |
// coded in assembler file |
extern uint16_t isqrt32(uint32_t n); |
extern uint8_t isqrt16(uint16_t n); |
extern uint16_t ihypot(int16_t x, int16_t y); |
#endif // _ISQRT_H |
/branches/test_v2.12/V2.04a/jeti_ex.c |
---|
0,0 → 1,144 |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#include "jeti_ex.h" |
#include "hottmenu.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
const char PROGMEM JETI_CODE[53] = |
{ |
0, // 0 |
'O', // SPEAK_ERR_CALIBARTION 1 |
'P', // SPEAK_ERR_RECEICER 2 |
'Q', // SPEAK_ERR_DATABUS 3 |
'R', // SPEAK_ERR_NAVI 4 |
'S', // SPEAK_ERROR 5 |
'T', // SPEAK_ERR_COMPASS 6 |
'S', // SPEAK_ERR_SENSOR 7 |
'V', // SPEAK_ERR_GPS 8 |
'W', // SPEAK_ERR_MOTOR 9 |
'H', // SPEAK_MAX_TEMPERAT 10 |
0, // SPEAK_ALTI_REACHED 11 |
'X', // SPEAK_WP_REACHED 12 |
'Y', // SPEAK_NEXT_WP 13 |
0, // SPEAK_LANDING 14 |
'Z', // SPEAK_GPS_FIX 15 |
'U', // SPEAK_UNDERVOLTAGE 16 |
'E', // SPEAK_GPS_HOLD 17 |
'F', // SPEAK_GPS_HOME 18 |
'G', // SPEAK_GPS_OFF 19 |
'H', // SPEAK_BEEP 20 |
'A', // SPEAK_MIKROKOPTER 21 |
0, // SPEAK_CAPACITY 22 |
'I', // SPEAK_CF_OFF 23 |
'B', // SPEAK_CALIBRATE 24 |
'J', // SPEAK_MAX_RANGE 25 |
'J', // SPEAK_MAX_ALTITUD 26 |
0, // 27 |
0, // 28 |
0, // 29 |
0, // 30 |
0, // 31 |
0, // 32 |
0, // 33 |
0, // 34 |
0, // 35 |
0, // 36 |
0, // 37 |
'D', // SPEAK_MK_OFF 38 |
'L', // SPEAK_ALTITUDE_ON 39 |
'M', // SPEAK_ALTITUDE_OFF 40 |
0, // 41 |
0, // 42 |
0, // 43 |
0, // 44 |
0, // 45 |
'N', // SPEAK_CF_ON 46 |
0, // SPEAK_SINKING 47 |
0, // SPEAK_RISING 48 |
0, // SPEAK_HOLDING 49 |
'K', // SPEAK_GPS_ON 50 |
0, // SPEAK_FOLLWING 51 |
'C' // SPEAK_STARTING 52 |
}; |
JetiExPacket_t JetiExData[JETI_EX_PARAMETER_COUNT + 1] = // Parameter count + DeviceName (ID0) |
{ |
// Label[10] unit[3], data type, Data , position of decimal point |
// "1234567890", "123", |
// { "-=.M_K.=-" , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "MK " , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "Voltage " , "V ", 1, 0 , 1 }, // ID 1 |
{ "Current " , "A ", 1, 0 , 1 }, // ID 2 |
{ "Capacity " , "Ah ", 1, 0 , 2 }, // ID 3 |
{ "Altitude " , "m ", 1, 0 , 0 }, // ID 4 |
{ "Compass " , "° ", 1, 0 , 0 }, // ID 5 |
{ "Sats " , " ", 1, 0 , 0 }, // ID 6 |
{ "Speed " , "m/s", 1, 0 , 0 }, // ID 7 |
{ "Distance " , "m ", 1, 0 , 0 }, // ID 8 |
{ "Home-Dir " , "° ", 1, 0 , 0 }, // ID 9 |
{ "max.Temp. " , "°C ", 1, 0 , 0 }, // ID 10 |
{ "Magn.field" , "% ", 1, 0 , 0 }, // ID 11 |
{ "Vario " , " ", 1, 0 , 0 }, // ID 12 |
{ "ErrorCode " , " ", 1, 0 , 0 }, // ID 13 |
{ "Latitude " , " ", 9, 0 , 0 }, // ID 14 special data type for coordinates Import: fixed position in list ID 14 - DO NOT MOVE !!! |
{ "Longitude " , " ", 9, 0 , 0 }, // ID 15 special data type for coordinates Import: fixed position in list ID 15 - DO NOT MOVE !!! |
}; |
void BuildJeti_Vario(void) |
{ |
signed int tmp = 0; |
static signed int JetiVarioMeter = 0; |
JetiVarioMeter = (JetiVarioMeter * 3 + VarioMeter) / 4; |
if(VarioCharacter == '+') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 + 5; |
} |
else |
if(VarioCharacter == '-') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 - 5; |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = (JetiVarioMeter/32); |
} |
else |
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed; |
else |
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed; |
JetiExData[12].Value = tmp; |
} |
// -------------------------------------------------------------------------------------------------- |
void JetiEX_Update(void) |
{ |
GetHottestBl(); |
JetiExData[1].Value = UBat; |
JetiExData[2].Value = Capacity.ActualCurrent; |
JetiExData[3].Value = Capacity.UsedCapacity / 10; |
JetiExData[4].Value = HoehenWert / 100; |
JetiExData[5].Value = KompassValue; |
JetiExData[6].Value = GPSInfo.NumOfSats; |
JetiExData[7].Value = GPSInfo.Speed; |
JetiExData[8].Value = GPSInfo.HomeDistance / 10; |
JetiExData[9].Value = GPSInfo.HomeBearing; |
JetiExData[10].Value = MaxBlTemperture; |
JetiExData[11].Value = EarthMagneticField; |
// JetiExData[12].Value = Vario; // wird in BuildJeti_Vario() gemacht |
JetiExData[13].Value = NC_ErrorCode; |
//JetiExData[14].Value = 53 * 0x10000 + 23467; // GPS-Latitude (macht NC_Fills_HoTT_Telemety() ) |
//JetiExData[15].Value = 7 * 0x10000 + 23467; // GPS-Longitude (macht NC_Fills_HoTT_Telemety() ) |
} |
#endif |
/branches/test_v2.12/V2.04a/jeti_ex.h |
---|
0,0 → 1,37 |
#ifndef _JETI_EX_H |
#define _JETI_EX_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern void BuildJeti_Vario(void); |
// define here how many Jeti EX parameters should be transmitted (max. = 15) |
// |
#define JETI_EX_PARAMETER_COUNT 15 |
// |
// ------------------------------------------------------------------------- |
extern const char PROGMEM JETI_CODE[53]; |
typedef struct |
{ |
char Label[10]; |
char Unit[3]; |
unsigned char DataType; |
long Value; |
unsigned char DecimalPointPos; |
} JetiExPacket_t; |
extern JetiExPacket_t JetiExData[]; |
extern void JetiEX_Update(void); |
#if (JETI_EX_PARAMETER_COUNT > 15) |
#error "ERROR: Too many Jeti EX parameters (max. allowed 15)" |
#endif |
#endif |
#endif //_JETI_EX_H |
/branches/test_v2.12/V2.04a/jetimenu.c |
---|
0,0 → 1,351 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "jetimenu.h" |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#include "hottmenu.h" |
#define JETIBOX_KEY_RIGHT 0x1F |
#define JETIBOX_KEY_UP 0x2F |
#define JETIBOX_KEY_DOWN 0x4F |
#define JETIBOX_KEY_LEFT 0x8F |
#define JETIBOX_KEY_NONE 0x0F |
#define JETIBOX_KEY_UNDEF 0x00 |
#define JetiBox_printfxy(x,y,format, args...) { LIBFC_JetiBox_SetPos(y * 16 + x); _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);} |
#define JetiBox_printf(format, args...) { _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);} |
// ----------------------------------------------------------- |
// the menu functions |
// ----------------------------------------------------------- |
void Menu_Status(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%2i.%1iV",UBat/10, UBat%10); |
if(NaviDataOkay) |
{ |
JetiBox_printfxy(6,0,"%3d%c %03dm%c",ErsatzKompassInGrad, 0xDF, GPSInfo.HomeDistance/10,NC_GPS_ModeCharacter); |
} |
else |
{ |
JetiBox_printfxy(6,0,"Status"); |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NC_ErrorCode) |
{ |
static unsigned int timer; |
static char toggle = 1; |
if(CheckDelay(timer)) { if(toggle) toggle = 0; else toggle = 1; timer = SetDelay(1500);}; |
if(toggle) |
{ |
LIBFC_JetiBox_SetPos(0); |
_printf_P(&LIBFC_JetiBox_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0); |
} |
else |
{ |
JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); |
// if(MotorenEin) JetiBeep = 'O'; |
} |
} |
else |
if(ShowSettingNameTime) |
{ |
LIBFC_JetiBox_Clear(); |
JetiBox_printfxy(0,1,"Set%d:%s ",ActiveParamSet,EE_Parameter.Name); |
return; // nichts weiter ausgeben |
} |
#else |
if(NC_ErrorCode) { JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); if(MotorenEin) JetiBeep = 'S';}; |
#endif |
JetiBox_printfxy(0,1,"%4i %2i:%02i",Capacity.UsedCapacity,FlugSekunden/60,FlugSekunden%60); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
JetiBox_printfxy(10,1,"%4im%c", (int16_t)(HoehenWert/100),VarioCharacter); |
} |
#endif |
} |
void Menu_Temperature(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%3i %3i %3i %3i", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature); |
JetiBox_printfxy(0,1,"%3i %3i %3i %3i", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature); |
if(RequiredMotors <= 4) |
{ |
JetiBox_printfxy(0,1,"Temperatures "); |
} |
else |
if(RequiredMotors <= 6) |
{ |
JetiBox_printfxy(8,1,"\%cC ",0xdf); |
} |
#endif |
} |
void Menu_Battery(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%2i.%1iV %3i.%1iA", UBat/10, UBat%10, Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
JetiBox_printfxy(0,1,"%4iW %6imAh",Capacity.ActualPower, Capacity.UsedCapacity); |
#endif |
} |
void Magnet_Values(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Magnet:%3i%% %3i%c",EarthMagneticField, KompassValue,0xDF); |
JetiBox_printfxy(0,1,"Incli.:%3i%c (%i) ",EarthMagneticInclination, 0xDF,EarthMagneticInclinationTheoretic); |
#endif |
} |
void Menu_WPL_A1(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Load Waypoints"); |
JetiBox_printfxy(0,1,"(Fixed) "); |
#endif |
} |
void Menu_WPL_R1(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Load Waypoints"); |
JetiBox_printfxy(0,1,"(Relative) "); |
#endif |
} |
void Menu_WPL_A2(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static unsigned char load_waypoint_tmp = 1, changed; |
if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"FIX Waypoints") |
else JetiBox_printfxy(0,0,"FIX:%s",WPL_Name); |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
{ |
JetiBox_printfxy(0,1,"#%2d WP:",load_waypoint_tmp); |
if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else JetiBox_printfxy(8,1,"--/--") |
if(changed) JetiBox_printfxy(14,1,"->") |
else JetiBox_printfxy(14,1," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Load_WP_List = load_waypoint_tmp; |
changed = 0; |
} |
} |
#endif |
} |
void Menu_WPL_R2(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static unsigned char load_waypoint_tmp = 1, changed; |
if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"Relative WPs ") |
else JetiBox_printfxy(0,0,"Rel:%s",WPL_Name); |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
if(GPSInfo.SatFix != SATFIX_3D) JetiBox_printfxy(0,1,"no GPS-Fix") |
else |
{ |
JetiBox_printfxy(0,1,"#%2d WPs:",load_waypoint_tmp); |
if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else JetiBox_printfxy(8,1,"--/--") |
if(changed) JetiBox_printfxy(14,1,"->") |
else JetiBox_printfxy(14,1," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Load_WP_List = load_waypoint_tmp | 0x80; |
changed = 0; |
} |
} |
#endif |
} |
void Menu_PosInfo(uint8_t key) |
{ |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
if(NaviDataOkay) |
{ |
JetiBox_printfxy(0,0,"%2um/s Sat:%d ",GPSInfo.Speed,GPSInfo.NumOfSats); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
JetiBox_printfxy(12,0," 3D"); |
break; |
// case SATFIX_2D: |
// case SATFIX_NONE: |
default: |
JetiBox_printfxy(12,0,"NoFx"); |
break; |
} |
if(GPSInfo.Flags & FLAG_DIFFSOLN) |
{ |
JetiBox_printfxy(12,0,"DGPS"); |
} |
JetiBox_printfxy(0,1,"Home:%3dm %3d%c %c", GPSInfo.HomeDistance/10, GPSInfo.HomeBearing, 0xDF,NC_GPS_ModeCharacter); |
} |
else |
{ //0123456789ABCDEF |
JetiBox_printfxy(2,0,"No NaviCtrl!"); |
} |
#endif |
} |
// ----------------------------------------------------------- |
// the menu topology |
// ----------------------------------------------------------- |
typedef void (*pFctMenu) (uint8_t); // the menu item handler function pointer |
typedef struct{ |
int8_t left; |
int8_t right; |
int8_t up; |
int8_t down; |
pFctMenu pHandler; |
} MENU_ENTRY; |
// the menu navigation structure |
/* | |
3 - 0 - 1 - 2 - 3 - 0 |
*/ |
const MENU_ENTRY JetiBox_Menu[] PROGMEM= |
{ // l r u d pHandler |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
{6, 1, 0, 0, &Menu_Status }, // 0 |
{0, 2, 1, 1, &Menu_Temperature }, // 1 |
{1, 3, 2, 2, &Menu_Battery }, // 2 |
{2, 4, 3, 3, &Menu_PosInfo }, // 3 |
{3, 5, 7, 7, &Menu_WPL_A1 }, // 4 |
{4, 6, 8, 8, &Menu_WPL_R1 }, // 5 |
{5, 0, 6, 6, &Magnet_Values }, // 6 |
{4, 7, 7, 7, &Menu_WPL_A2 }, // 7 |
{5, 8, 8, 8, &Menu_WPL_R2 }, // 8 |
#endif |
}; |
// ----------------------------------------------------------- |
// Update display buffer |
// ----------------------------------------------------------- |
unsigned char JetiBox_Update(unsigned char key) |
{ |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static uint8_t item = 0, last_item = 0; // the menu item |
static uint8_t updateDelay = 1 , last_key; |
// navigate within the menu by key action |
last_item = item; |
switch(key) |
{ |
case JETIBOX_KEY_LEFT: |
//if (item == 0) return (1); // switch back to jeti expander menu |
// else |
item = pgm_read_byte(&JetiBox_Menu[item].left); //trigger to left menu item |
break; |
case JETIBOX_KEY_RIGHT: |
item = pgm_read_byte(&JetiBox_Menu[item].right); //trigger to right menu item |
break; |
case JETIBOX_KEY_UP: |
item = pgm_read_byte(&JetiBox_Menu[item].up); //trigger to up menu item |
break; |
case JETIBOX_KEY_DOWN: |
item = pgm_read_byte(&JetiBox_Menu[item].down); //trigger to down menu item |
break; |
default: |
break; |
} |
// if the menu item has been changed, do not pass the key to the item handler |
// to avoid jumping over to items |
if(item != last_item) key = JETIBOX_KEY_UNDEF; |
if((updateDelay++ & 0x01) || (key != last_key)) |
{ |
last_key = key; |
LIBFC_JetiBox_Clear(); |
//execute menu item handler |
((pFctMenu)(pgm_read_word(&(JetiBox_Menu[item].pHandler))))(key); |
} |
#endif |
return (0); |
} |
/branches/test_v2.12/V2.04a/jetimenu.h |
---|
0,0 → 1,6 |
#ifndef _JETIMENU_H |
#define _JETIMENU_H |
extern unsigned char JetiBox_Update(unsigned char key); |
#endif //_JETIMENU_H |
/branches/test_v2.12/V2.04a/led.c |
---|
0,0 → 1,132 |
#include <inttypes.h> |
#include "main.h" |
uint16_t LED1_Timing = 0; |
uint16_t LED2_Timing = 0; |
unsigned char J16Blinkcount = 0, J16Mask = 1; |
unsigned char J17Blinkcount = 0, J17Mask = 1; |
unsigned char NC_Wait_for_LED = 0; // signal to NC: Wait for the LAD PAtter before switching to the next WP |
// initializes the LED control outputs J16, J17 |
void LED_Init(void) |
{ |
// set PC2 & PC3 as output (control of J16 & J17) |
DDRC |= (1<<DDC2)|(1<<DDC3); |
J16_OFF; |
J17_OFF; |
J16Blinkcount = 0; J16Mask = 128; |
J17Blinkcount = 0; J17Mask = 128; |
} |
// called in UpdateMotors() every 2ms |
void LED_Update(void) |
{ |
static char delay = 0; |
static unsigned char J16Bitmask = 0; |
static unsigned char J17Bitmask = 0; |
static unsigned char J16Warn = 0, J17Warn = 0; |
static unsigned char from_nc = 0; |
if(FromNC_WP_EventChannel != -127) { from_nc = (unsigned char) FromNC_WP_EventChannel + 127; /*beeptime = 300;*/}; |
if(!delay--) // 20ms Intervall |
{ |
J16Bitmask = EE_Parameter.J16Bitmask; |
J17Bitmask = EE_Parameter.J17Bitmask; |
delay = 9; |
if(FC_StatusFlags & (FC_STATUS_LOWBAT | FC_STATUS_EMERGENCY_LANDING) || (VersionInfo.HardwareError[1] & FC_ERROR1_I2C)) |
{ |
if(EE_Parameter.WARN_J16_Bitmask) |
{ |
if(!J16Warn) J16Blinkcount = 4; |
J16Warn = 1; |
} |
if(EE_Parameter.WARN_J17_Bitmask) |
{ |
if(!J17Warn) J17Blinkcount = 4; |
J17Warn = 1; |
} |
} |
else |
{ |
J16Warn = 0; |
J17Warn = 0; |
} |
//DebugOut.Analog[29] = EE_Parameter.GlobalConfig3; |
// Output 1 |
if(!J16Warn) |
{ |
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK1) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED1) J16_ON; else J16_OFF;} |
else |
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing > 220)) {if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 1; NC_Wait_for_LED = 0;} // Manual overwrite |
else |
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing == 5)) {if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 1; NC_Wait_for_LED = 0;} // Manual overwrite |
else |
if(!J16Blinkcount--) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_USE_NC_FOR_OUT1) |
{ |
J16Blinkcount = from_nc / 2; |
if(!from_nc) { NC_Wait_for_LED = 0; if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 0; } // Ausschalten |
else |
{ |
NC_Wait_for_LED = 1; |
if(J16Mask == 0) |
{ |
from_nc = 0; |
J16Mask = 64; |
if(J16Bitmask & 128) J16_ON; else J16_OFF; // Ausschalten |
} |
else |
{ |
//if(FromNC_WP_EventChannel != -127) |
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF; |
J16Mask /= 2; |
} |
} |
} |
else |
{ |
J16Blinkcount = Parameter_J16Timing / 2; |
if(J16Mask == 1) { from_nc = 0; J16Mask = 64; } else J16Mask /= 2; |
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF; |
NC_Wait_for_LED = 0; |
} |
} |
} |
else // warning case |
if(!J16Blinkcount--) |
{ |
J16Blinkcount = 10-1; |
if(J16Mask == 1) J16Mask = 128; else J16Mask /= 2; |
if(J16Mask & EE_Parameter.WARN_J16_Bitmask) J16_ON; else J16_OFF; |
} |
// Output 2 |
if(!J17Warn) |
{ |
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK2) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED2) J17_ON; else J17_OFF;} |
else |
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing > 220)) {if(J17Bitmask & 128) J17_OFF; else J17_ON; J17Mask = 1;} |
else |
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing == 5)) {if(J17Bitmask & 128) J17_ON; else J17_OFF; J17Mask = 1;} |
else |
if(!J17Blinkcount--) |
{ |
J17Blinkcount = Parameter_J17Timing / 2; |
if(J17Mask == 1) J17Mask = 64; else J17Mask /= 2; |
if(J17Mask & J17Bitmask) J17_ON; else J17_OFF; |
} |
} |
else // warning case |
if(!J17Blinkcount--) |
{ |
J17Blinkcount = 10-1; |
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2; |
if(J17Mask & EE_Parameter.WARN_J17_Bitmask) J17_ON; else J17_OFF; |
} |
if(PORTC & (1<<PORTC2)) FC_StatusFlags2 |= FC_STATUS2_OUT1_ACTIVE; //else FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) -> wird in der SPI zurück gesetzt |
if(PORTC & (1<<PORTC3)) FC_StatusFlags2 |= FC_STATUS2_OUT2_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT2_ACTIVE; // Out2 (J17) |
} |
} |
/branches/test_v2.12/V2.04a/led.h |
---|
0,0 → 1,12 |
#include <avr/io.h> |
#define J16_ON PORTC |= (1<<PORTC2) |
#define J16_OFF PORTC &= ~(1<<PORTC2) |
#define J16_TOGGLE PORTC ^= (1<<PORTC2) |
#define J17_ON PORTC |= (1<<PORTC3) |
#define J17_OFF PORTC &= ~(1<<PORTC3) |
#define J17_TOGGLE PORTC ^= (1<<PORTC3) |
extern void LED_Init(void); |
extern void LED_Update(void); |
extern unsigned char NC_Wait_for_LED; |
/branches/test_v2.12/V2.04a/libfc.h |
---|
0,0 → 1,24 |
#ifndef _LIBFC_H |
#define _LIBFC_H |
#define CPU_UNKNOWN 0 |
#define CPU_ATMEGA644 1 |
#define CPU_ATMEGA644P 2 |
#define CPU_ATMEGA1284 3 |
#define CPU_ATMEGA1284P 4 |
extern void LIBFC_Init(unsigned char); |
extern void LIBFC_Polling(void); |
extern void LIBFC_ReceiverInit(unsigned char rtype); |
extern void LIBFC_JetiBox_Putchar(char c); |
extern void LIBFC_JetiBox_SetPos(unsigned char index); |
extern void LIBFC_JetiBox_Clear(void); |
extern void LIBFC_CheckSettings(void); |
extern unsigned char LIBFC_GetCPUType(void); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern long ACC_AltitudeFusion(unsigned char init); |
#endif |
#endif //_LIBFC_H |
/branches/test_v2.12/V2.04a/libfc1284.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/test_v2.12/V2.04a/libfc644.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/test_v2.12/V2.04a/main.c |
---|
0,0 → 1,501 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned char DisableRcOffBeeping = 0; |
unsigned char PlatinenVersion = 10; |
unsigned char BattLowVoltageWarning = 94; |
unsigned char BattAutoLandingVoltage = 0, BattComingHomeVoltage = 0; |
unsigned int FlugMinuten = 0,FlugMinutenGesamt = 0; |
unsigned int FlugSekunden = 0; |
pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
unsigned char FoundMotors = 0; |
unsigned char JetiBeep = 0; // to allow any Morse-Beeping of the Jeti-Box |
unsigned char ActiveParamSet = 3; |
unsigned char LipoCells = 4; |
unsigned char RedundanceBlOperation = 0; |
void PrintLine(void) |
{ |
printf("\n\r==================================="); |
} |
void CalMk3Mag(void) |
{ |
static unsigned char stick = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -20) stick = 0; |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) && !stick) |
{ |
stick = 1; |
WinkelOut.CalcState++; |
if(WinkelOut.CalcState > 4) |
{ |
// WinkelOut.CalcState = 0; // in Uart.c |
beeptime = 1000; |
} |
else Piep(WinkelOut.CalcState,150); |
} |
} |
void LipoDetection(unsigned char print) |
{ |
#define MAX_CELL_VOLTAGE 43 // max cell voltage for LiPO |
if(print) |
{ |
printf("\n\rBatt:"); |
LipoCells = 1 + UBat / MAX_CELL_VOLTAGE; |
if(LipoCells > 6) LipoCells = 6; |
} |
if(EE_Parameter.UnterspannungsWarnung < 50) |
{ |
BattLowVoltageWarning = LipoCells * EE_Parameter.UnterspannungsWarnung; |
if(print) |
{ |
Piep(LipoCells, 200); |
printf(" %d Cells ", LipoCells); |
} |
} |
else BattLowVoltageWarning = EE_Parameter.UnterspannungsWarnung; |
// automatische Zellenerkennung |
if(EE_Parameter.AutoLandingVoltage < 50) BattAutoLandingVoltage = LipoCells * EE_Parameter.AutoLandingVoltage; else BattAutoLandingVoltage = EE_Parameter.AutoLandingVoltage; |
if(EE_Parameter.ComingHomeVoltage < 50) BattComingHomeVoltage = LipoCells * EE_Parameter.ComingHomeVoltage; else BattComingHomeVoltage = EE_Parameter.ComingHomeVoltage; |
if(BattAutoLandingVoltage > BattLowVoltageWarning) BattAutoLandingVoltage = BattLowVoltageWarning - 1; |
if(BattComingHomeVoltage >= BattLowVoltageWarning) BattComingHomeVoltage = BattLowVoltageWarning - 1; |
if(BattAutoLandingVoltage >= BattComingHomeVoltage && EE_Parameter.ComingHomeVoltage) BattAutoLandingVoltage = BattComingHomeVoltage - 1; |
if(print) |
{ |
printf(" Low warning: %d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10); |
if(BattComingHomeVoltage) printf(" Auto-CH: %d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10); |
if(BattAutoLandingVoltage) printf(" Autolanding: %d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10); |
} |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer,i,timer2 = 0, timerPolling; |
unsigned char update_spi = 1; |
DDRB = 0x00; |
PORTB = 0x00; |
DDRD = 0x0A; // UART & J3 J4 J5 |
PORTD = 0x5F; // PPM-Input & UART |
for(timer = 0; timer < 1000; timer++); // verzögern |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char AccZ_ErrorCnt = 0; |
if(PINB & 0x02) |
{ |
if(PIND & 0x10) PlatinenVersion = 21; // No Bridge from J4 to GND |
else { PlatinenVersion = 22; ACC_AltitudeControl = 1;}; |
} |
else |
{ |
PlatinenVersion = 25; ACC_AltitudeControl = 1; |
} |
#else |
if(PINB & 0x01) |
{ |
if(PINB & 0x02) PlatinenVersion = 13; |
else PlatinenVersion = 11; |
} |
else |
{ |
if(PINB & 0x02) PlatinenVersion = 20; |
else |
{ |
PlatinenVersion = 10; |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
PORTD = 0x47; // |
} |
} |
#endif |
DDRC = 0x81; // I2C, Spaker |
DDRC |=0x40; // HEF4017 Reset |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
PORTB = 0x01; // LED_Rot |
HEF4017Reset_ON; |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
beeptime = 2500; |
StickGier = 0; PPM_in[K_GAS] = 0; StickRoll = 0; StickNick = 0; |
if(PlatinenVersion >= 20) GIER_GRAD_FAKTOR = 1220; else GIER_GRAD_FAKTOR = 1291; // unterschiedlich für ME und ENC |
ROT_OFF; |
GRN_ON; |
Timer_Init(); |
TIMER2_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
I2C_Init(1); |
SPI_MasterInit(); |
Capacity_Init(); |
LIBFC_Init(LIB_FC_COMPATIBLE); |
GRN_ON; |
sei(); |
ParamSet_Init(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PlatinenVersion < 20) |
{ |
wdt_enable(WDTO_250MS); // Reset-Commando |
while(1) printf("\n\rFlightControl not supported!"); |
} |
#ifndef REDUNDANT_FC_SLAVE |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Check connected BL-Ctrls |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Check connected BL-Ctrls |
BLFlags |= BLFLAG_READ_VERSION; |
motor_read = 0; // read the first I2C-Data |
SendMotorData(); |
timer = SetDelay(500); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
printf("\n\rFound BL-Ctrl: "); |
timer = SetDelay(4000); |
for(i=0; i < MAX_MOTORS; i++) |
{ |
SendMotorData(); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
if(Mixer.Motor[i][0] > 0) // wait max 4 sec for the BL-Ctrls to wake up |
{ |
while(!CheckDelay(timer) && !(Motor[i].State & MOTOR_STATE_PRESENT_MASK) ) |
{ |
SendMotorData(); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
} |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK) |
{ |
printf("%d",i+1); |
FoundMotors++; |
// if(Motor[i].Version & MOTOR_STATE_FAST_MODE) printf("(fast)\n\r"); |
// else if(Motor[i].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) printf("(new)\n\r"); |
} |
} |
for(i=0; i < MAX_MOTORS; i++) |
{ |
if(!(Motor[i].State & MOTOR_STATE_PRESENT_MASK) && Mixer.Motor[i][0] > 0) |
{ |
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i+1); |
ServoActive = 2; // just in case the FC would be used as camera-stabilizer |
} |
Motor[i].State &= ~MOTOR_STATE_ERROR_MASK; // clear error counter |
} |
PrintLine();// ("\n\r==================================="); |
if(RequiredMotors < FoundMotors) VersionInfo.HardwareError[1] |= FC_ERROR1_MIXER; |
if(RequiredMotors > 8) Max_I2C_Packets = 8; else Max_I2C_Packets = RequiredMotors; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Calibrating altitude sensor |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#endif |
//if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rCalibrating pressure sensor.."); |
timer = SetDelay(1000); |
SucheLuftruckOffset(); |
while (!CheckDelay(timer)); |
printf("OK\n\r"); |
} |
#ifdef REDUNDANT_FC_SLAVE |
VersionInfo.HardwareError[0] = 0; |
VersionInfo.HardwareError[1] = 0; |
#endif |
SetNeutral(0); |
ROT_OFF; |
beeptime = 2000; |
ExternControl.Digital[0] = 0x55; |
FlugMinuten = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES + 1); |
FlugMinutenGesamt = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL + 1); |
if((FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF)) |
{ |
FlugMinuten = 0; |
FlugMinutenGesamt = 0; |
} |
printf("\n\rFlight-time %u min Total:%u min", FlugMinuten, FlugMinutenGesamt); |
LcdClear(); |
I2CTimeout = 5000; |
WinkelOut.Orientation = 1; |
LipoDetection(1); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
PrintLine();// ("\n\r==================================="); |
//SpektrumBinding(); |
timer = SetDelay(2000); |
timerPolling = SetDelay(250); |
Debug(ANSI_CLEAR "FC-Start!\n\rFlugzeit: %d min", FlugMinutenGesamt); // Note: this won't waste flash memory, if #DEBUG is not active |
//printf("\n\rEE_Parameter size:%i\n\r", PARAMSET_STRUCT_LEN); |
DebugOut.Status[0] = 0x01 | 0x02; |
JetiBeep = 0; |
if(EE_Parameter.ExtraConfig & CFG_NO_RCOFF_BEEPING) DisableRcOffBeeping = 1; |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
while(1) |
{ |
if(ReceiverUpdateModeActive) while (1) PORTC &= ~(1<<7); // Beeper off |
//GRN_ON; |
if(UpdateMotor && AdReady) // ReglerIntervall |
{ |
//GRN_OFF; |
cli(); |
UpdateMotor--; |
sei(); |
if(WinkelOut.CalcState) CalMk3Mag(); |
else MotorRegler(); |
SendMotorData(); |
ROT_OFF; |
if(SenderOkay) { SenderOkay--; /*VersionInfo.HardwareError[1] &= ~FC_ERROR1_PPM;*/ } |
else |
{ |
TIMSK1 |= _BV(ICIE1); // enable PPM-Input |
PPM_in[0] = 0; // set RSSI to zero on data timeout |
VersionInfo.HardwareError[1] |= FC_ERROR1_PPM; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 160 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 220) SenderOkay = 160; |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 101 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 1) SenderOkay = 101; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!--I2CTimeout || MissingMotor) |
{ |
if(!I2CTimeout) |
{ |
I2C_Reset(); |
I2CTimeout = 5; |
DebugOut.Analog[28]++; // I2C-Error |
VersionInfo.HardwareError[1] |= FC_ERROR1_I2C; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
beeptime = 25000; |
BeepMuster = 0x0080; |
} |
} |
else |
{ |
ROT_OFF; |
} |
LIBFC_Polling(); |
if(!UpdateMotor) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NewSBusData) ProcessSBus(); |
else |
#endif |
{ |
if(BytegapSPI == 0) SPI_TransmitByte(); |
if(CalculateServoSignals) CalculateServo(); |
DatenUebertragung(); |
BearbeiteRxDaten(); |
if(CheckDelay(timer)) |
{ |
static unsigned char second; |
timer += 20; // 20 ms interval |
CalcNickServoValue(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu(); |
else |
if(EE_Parameter.Receiver == RECEIVER_JETI) BuildJeti_Vario(); |
// ++++++++++++++++++++++++++++ |
// + check the ACC-Z range |
if(ACC_AltitudeControl && ((Aktuell_az < 300) || (DebugOut.Analog[7] < (128 * 4) && Aktuell_az > 850))) // DebugOut.Analog[7] = GasMischanteil |
{ |
if(++AccZ_ErrorCnt > 50) |
{ |
if(MotorenEin) VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; |
else CalibrationDone = 0; |
} |
} |
else AccZ_ErrorCnt = 0; |
// ++++++++++++++++++++++++++++ |
#endif |
if(MissingMotor || Capacity.MinOfMaxPWM < 30) |
{ |
if(MissingMotor) VersionInfo.HardwareError[1] |= FC_ERROR1_BL_MISSING; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
else |
{ |
if(!beeptime) |
{ |
if(I2CTimeout > 6) DebugOut.Status[1] &= ~0x02; // BL-Error-Status |
} |
} |
if(DisableRcOffBeeping) if(SenderOkay > 150) { DisableRcOffBeeping = 0; beeptime = 5000;}; |
if(PcZugriff) PcZugriff--; |
else |
{ |
ExternControl.Config = 0; |
ExternStickNick = 0; |
ExternStickRoll = 0; |
ExternStickGier = 0; |
if(!SenderOkay) |
{ |
if(BeepMuster == 0xffff && DisableRcOffBeeping != 2) |
{ |
beeptime = 15000; |
BeepMuster = 0x0c00; |
if(DisableRcOffBeeping) DisableRcOffBeeping = 2; |
} |
} |
} |
if(NaviDataOkay > 200) |
{ |
NaviDataOkay--; |
VersionInfo.HardwareError[1] &= ~FC_ERROR1_SPI_RX; |
VersionInfo.Flags |= FC_VERSION_FLAG_NC_PRESENT; |
} |
else |
{ |
if(NC_Version.Compatible) |
{ |
VersionInfo.HardwareError[1] |= FC_ERROR1_SPI_RX; |
NC_ErrorCode = 9; // "ERR: no NC communication" |
if(BeepMuster == 0xffff && MotorenEin) |
{ |
beeptime = 15000; |
BeepMuster = 0xA800; |
} |
} |
GPS_Nick = 0; |
GPS_Roll = 0; |
GPS_Aid_StickMultiplikator = 0; |
GPSInfo.Flags = 0; |
FromNaviCtrl_Value.Kalman_K = -1; |
FromNaviCtrl.AccErrorN = 0; |
FromNaviCtrl.AccErrorR = 0; |
FromNaviCtrl.CompassValue = -1; |
FromNC_AltitudeSpeed = 0; |
FromNC_AltitudeSetpoint = 0; |
VersionInfo.Flags &= ~FC_VERSION_FLAG_NC_PRESENT; |
NaviDataOkay = 0; |
} |
if(UBat <= BattLowVoltageWarning) |
{ |
FC_StatusFlags |= FC_STATUS_LOWBAT; |
if(BeepMuster == 0xffff && UBat > 10) // Do not beep, if the voltage reading is below 1V (Supplied via MKUSB) |
{ |
beeptime = 6000; |
BeepMuster = 0x0300; |
} |
} |
// SendSPI = SPI_BYTEGAP; |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
// +++++++++++++++++++++++++++++++++ |
// Sekundentakt |
if(++second == 49) |
{ |
second = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ShowSettingNameTime) ShowSettingNameTime--; |
#endif |
if(FC_StatusFlags & FC_STATUS_FLY) FlugSekunden++; |
else timer2 = 1450; // 0,5 Minuten aufrunden |
if(modell_fliegt < 1024) |
{ |
if(StartLuftdruck < Luftdruck) StartLuftdruck += 5; |
else |
if(StartLuftdruck > Luftdruck) StartLuftdruck -= 5; |
} |
if(UBat > BattLowVoltageWarning + 1) FC_StatusFlags &= ~FC_STATUS_LOWBAT; |
} |
// +++++++++++++++++++++++++++++++++ |
if(++timer2 == 2930) // eine Minute |
{ |
timer2 = 0; |
FlugMinuten++; |
FlugMinutenGesamt++; |
SetParamByte(PID_FLIGHT_MINUTES,FlugMinuten / 256); |
SetParamByte(PID_FLIGHT_MINUTES+1,FlugMinuten % 256); |
SetParamByte(PID_FLIGHT_MINUTES_TOTAL,FlugMinutenGesamt / 256); |
SetParamByte(PID_FLIGHT_MINUTES_TOTAL+1,FlugMinutenGesamt % 256); |
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht |
} |
} |
LED_Update(); |
Capacity_Update(); |
} |
} //else DebugOut.Analog[18]++; |
if(update_spi) update_spi--; |
} // 500Hz |
if(update_spi == 0) // 41Hz |
{ |
if(SPI_StartTransmitPacket()) update_spi = 12; |
else |
if(BytegapSPI == 0) SPI_TransmitByte(); |
} |
else if(BytegapSPI == 0) SPI_TransmitByte(); |
} |
} |
//DebugOut.Analog[16] |
/branches/test_v2.12/V2.04a/main.h |
---|
0,0 → 1,96 |
#ifndef _MAIN_H |
#define _MAIN_H |
//#define REDUNDANT_FC_SLAVE |
//#define REDUNDANT_FC_MASTER |
//#define DEBUG // use to activate debug output to MK-Tool: use Debug(text); |
//#define ACT_S3D_SUMMENSIGNAL |
//#define UserParameter8_FAILSAFE |
//#define RECEIVER_SPEKTRUM_DX7EXP |
//#define RECEIVER_SPEKTRUM_DX8EXP |
// neue Hardware |
//#define ROT_OFF {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB &=~0x01; else PORTB |= 0x01;} |
//#define ROT_ON {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_OFF {PORTB &=~0x01;} |
#define ROT_ON {PORTB |= 0x01;} |
#define ROT_FLASH PORTB ^= 0x01 |
//#define GRN_OFF {if((PlatinenVersion < 12) || PlatinenVersion == 25) PORTB &=~0x02; else PORTB |= 0x02;} |
//#define GRN_ON {if((PlatinenVersion < 12) || PlatinenVersion == 25) PORTB |= 0x02; else PORTB &=~0x02;} |
#define GRN_OFF {if(PlatinenVersion == 25) PORTB &=~0x02; else PORTB |= 0x02;} |
#define GRN_ON {if(PlatinenVersion == 25) PORTB |= 0x02; else PORTB &=~0x02;} |
#define GRN_FLASH PORTB ^= 0x02 |
#define SYSCLK F_CPU |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define J3High PORTD |= 0x20 |
#define J3Low PORTD &= ~0x20 |
#define J4High PORTD |= 0x10 |
#define J4Low PORTD &= ~0x10 |
#define J5High PORTD |= 0x08 |
#define J5Low PORTD &= ~0x08 |
extern volatile unsigned char SenderOkay; |
extern unsigned char BattLowVoltageWarning; |
extern unsigned char BattAutoLandingVoltage, BattComingHomeVoltage; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
extern unsigned char FoundMotors,DisableRcOffBeeping; |
extern unsigned char JetiBeep; |
void LipoDetection(unsigned char print); |
extern unsigned int FlugMinuten,FlugMinutenGesamt,FlugSekunden; |
extern void PrintLine(void); // "=================================" |
extern unsigned char ActiveParamSet; |
extern unsigned int BL3_Current(unsigned char who); // in 0,1A |
extern unsigned char LipoCells; |
extern unsigned char RedundanceBlOperation; |
#include <avr/pgmspace.h> |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#endif |
#include <stdlib.h> |
#include <string.h> |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <avr/interrupt.h> |
#include <avr/eeprom.h> |
#include <avr/boot.h> |
#include <avr/wdt.h> |
#include "old_macros.h" |
#include "printf_P.h" |
#include "timer0.h" |
#include "uart.h" |
#include "analog.h" |
#include "twimaster.h" |
#include "menu.h" |
#include "rc.h" |
#include "fc.h" |
#include "gps.h" |
#include "spi.h" |
#include "led.h" |
#include "spektrum.h" |
#include "capacity.h" |
#include "eeprom.h" |
#include "libfc.h" |
#include "hottmenu.h" |
#include "debug.h" |
#include "sbus.h" |
#include "jeti_ex.h" |
#endif //_MAIN_H |
/branches/test_v2.12/V2.04a/makefile |
---|
0,0 → 1,496 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega1284p |
#MCU = atmega644p |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 2 |
VERSION_MINOR = 04 |
VERSION_PATCH = 0 |
VERSION_SERIAL_MAJOR = 11 # Serial Protocol to KopterTool -> do not change! |
VERSION_SERIAL_MINOR = 0 # Serial Protocol |
NC_SPI_COMPATIBLE = 60 # Navi-Kompatibilität |
LIB_FC_COMPATIBLE = 6 # Library |
#------------------------------------------------------------------- |
# ATMEGA644: 63487 is maximum |
#------------------------------------------------------------------- |
# 0 a |
# 1 b |
# 2 c |
# 3 d |
# 4 e |
# 5 f |
# 6 g |
# 7 h |
# 8 i |
# 9 j |
# 10 k |
# 11 L |
#------------------------------------------------------------------- |
# get SVN revision |
REV := $(shell sh -c "cat .svn/entries | sed -n '4p'") |
ifeq ($(MCU), atmega1284p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA1284P |
LIBFC_EXT = 1284 |
endif |
ifeq ($(MCU), atmega644p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA644 |
LIBFC_EXT = 644 |
endif |
ifeq ($(F_CPU), 16000000) |
QUARZ = 16MHZ |
endif |
ifeq ($(F_CPU), 20000000) |
QUARZ = 20MHZ |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
ifeq ($(VERSION_PATCH), 0) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 1) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 2) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 3) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 4) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 5) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 6) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 7) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 8) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 9) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 10) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 11) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)L_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 12) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 13) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 14) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 15) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 16) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 17) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 18) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)s_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 19) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)t_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 20) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)u_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 21) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)v_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 22) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)w_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 23) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)x_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 24) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)y_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 25) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)z_SVN$(REV) |
endif |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
#OPT = 2 |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c timer0.c analog.c menu.c eeprom.c |
SRC += twimaster.c rc.c fc.c GPS.c spi.c led.c Spektrum.c |
SRC += mymath.c jetimenu.c capacity.c debug.c |
SRC += hottmenu.c sbus.c user_receiver.c |
SRC += jeti_ex.c |
########################################################################################################## |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = isqrt.S |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Optional compiler flags. |
# -g: generate debugging information (for GDB, or for COFF conversion) |
# -O*: optimization level |
# -f...: tuning, see gcc manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create assembler listing |
CFLAGS = -O$(OPT) -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=$(<:%.c=%.lst) $(patsubst %,-I%,$(EXTRAINCDIRS)) |
# Set a "language standard" compiler flag. |
# Unremark just one line below to set the language standard to use. |
# gnu99 = C99 + GNU extensions. See GCC manual for more information. |
#CFLAGS += -std=c89 |
#CFLAGS += -std=gnu89 |
#CFLAGS += -std=c99 |
CFLAGS += -std=gnu99 |
# shrink code size |
CFLAGS += -mtiny-stack |
#CFLAGS += -fno-inline-functions |
CFLAGS += -mcall-prologues |
CFLAGS += -DF_CPU=$(F_CPU) -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_PATCH=$(VERSION_PATCH) -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR) -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR) -DNC_SPI_COMPATIBLE=$(NC_SPI_COMPATIBLE) -DLIB_FC_COMPATIBLE=$(LIB_FC_COMPATIBLE) |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
# Optional linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
# Additional libraries |
# Minimalistic printf version |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires -lm below) |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt |
# -lm = math library |
LDFLAGS += -lm |
LDFLAGS += libfc$(LIBFC_EXT).a |
##LDFLAGS += -T./linkerfile/avr5.x |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
#AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = stk200 |
#AVRDUDE_PROGRAMMER = ponyser |
AVRDUDE_PROGRAMMER = avrispv2 |
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden |
#AVRDUDE_PORT = com1 # programmer connected to serial device |
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port |
AVRDUDE_PORT = usb # programmer connected to USB |
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS) |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
#avrdude -c avrispv2 -P usb -p m32 -U flash:w:blink.hex |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE += -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
AVRDUDE_FLAGS += -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_FLAGS += -v -v |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
DIRAVR = c:/winavr |
DIRAVRBIN = $(DIRAVR)/bin |
DIRAVRUTILS = $(DIRAVR)/utils/bin |
DIRINC = . |
DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
# Programming support using avrdude. |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) -x -A $(TARGET).elf |
LIMITS = $(SIZE) --mcu=$(MCU) -C $(TARGET).elf |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS) |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex sizeafter finished end |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Convert ELF to COFF for use in debugging / simulating in |
# AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
avr-nm -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
$(REMOVE) Flight-Ctrl_*.hex |
$(REMOVE) Flight-Ctrl_*.eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) Flight-Ctrl_*.elf |
$(REMOVE) Flight-Ctrl_*.map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) Flight-Ctrl_*.sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
$(REMOVE) $(SRC:.c=.o) |
# Automatically generate C source code dependencies. |
# (Code originally taken from the GNU make user manual and modified |
# (See README.txt Credits).) |
# |
# Note that this will work with sh (bash) and sed that is shipped with WinAVR |
# (see the SHELL variable defined above). |
# This may not work with other shells or other seds. |
# |
%.d: %.c |
set -e; $(CC) -MM $(ALL_CFLAGS) $< \ |
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ |
[ -s $@ ] || rm -f $@ |
# Remove the '-' if you want to see the dependency files generated. |
-include $(SRC:%.c=%.d) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ |
clean clean_list program |
/branches/test_v2.12/V2.04a/menu.c |
---|
0,0 → 1,274 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.h" |
char DisplayBuff[80]; |
unsigned char DispPtr = 0; |
unsigned char MaxMenue = 18; |
unsigned char MenuePunkt = 0; |
unsigned char RemoteKeys = 0; |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
void LcdClear(void) |
{ |
unsigned char i; |
for(i=0;i<80;i++) DisplayBuff[i] = ' '; |
} |
void Menu_Putchar(char c) |
{ |
if(DispPtr < 80) DisplayBuff[DispPtr++] = c; |
} |
void Menu(void) |
{ |
unsigned char i; |
if(RemoteKeys & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue;} |
if(RemoteKeys & KEY2) { if(MenuePunkt == MaxMenue) MenuePunkt = 0; else MenuePunkt++;} |
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0; |
LcdClear(); |
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);} |
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);}; |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"+ MikroKopter +"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%02d%c ",PlatinenVersion/10,PlatinenVersion%10, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +'a'); |
LCD_printfxy(0,2,"Setting:%d %s", ActiveParamSet,Mixer.Name); |
if(VersionInfo.HardwareError[1] & FC_ERROR1_MIXER) LCD_printfxy(0,3,"Mixer Error!") |
else |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NC_ErrorCode) |
{ |
LCD_printfxy(0,3,"ERR%2d:",NC_ErrorCode); |
_printf_P(&Menu_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0); |
} |
else |
#endif |
if(VersionInfo.HardwareError[0]) LCD_printfxy(0,3,"Hardware Error 1:%d !!",VersionInfo.HardwareError[0]) |
else |
if(MissingMotor) LCD_printfxy(0,3,"Missing BL-Ctrl:%d !!",MissingMotor) |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
else |
if(NC_ErrorCode) |
{ |
LCD_printfxy(0,3,"! NC-ERR: %2d ! ",NC_ErrorCode); |
} |
#endif |
// if(VersionInfo.HardwareError[1]) LCD_printfxy(0,3,"Error 2:%d !!",VersionInfo.HardwareError[1]) |
else |
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!") |
else |
if(Capacity.MinOfMaxPWM < 30) LCD_printfxy(0,3,"BL-Selftest Err:%2d",Capacity.MinOfMaxPWM) |
break; |
case 1: |
LCD_printfxy(0,0,"Height: %5i",(int)(HoehenWert/5)); |
LCD_printfxy(0,1,"Setpoint:%5i",(int)(SollHoehe/5)); |
LCD_printfxy(0,2,"Pressure:%5i",MessLuftdruck); |
LCD_printfxy(0,3,"Offset: %5i",OCR0A); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
LCD_printfxy(17,2,"(A)"); |
LCD_printfxy(17,3,"%i",CalAthmospheare); |
} |
#endif |
break; |
case 2: |
LCD_printfxy(0,0,"act. bearing"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Compass: %5i",ErsatzKompassInGrad); |
break; |
case 3: |
for(i=1;i<9;i+=2) LCD_printfxy(0,i/2,"K%i:%4i K%i:%4i ",i,PPM_in[i],i+1,PPM_in[i+1]); |
break; |
case 4: |
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]); |
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]+127); |
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]+127); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2); |
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2); |
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2); |
/* |
// entfernt aus Platzmangel |
if(PlatinenVersion == 10) |
{ |
LCD_printfxy(0,1,"Nick%4i (%3i.%i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/8, AdNeutralNick%8); |
LCD_printfxy(0,2,"Roll%4i (%3i.%i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/8, AdNeutralRoll%8); |
LCD_printfxy(0,3,"Gier%4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier); |
} |
else |
if((PlatinenVersion == 11) || (PlatinenVersion >= 20)) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2); |
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2); |
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2); |
} |
else |
if(PlatinenVersion == 13) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)(%3i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16,AnalogOffsetNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)(%3i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16,AnalogOffsetRoll); |
LCD_printfxy(0,3,"Yaw %4i (%3i)(%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2,AnalogOffsetGier); |
} |
*/ |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Z %4i (%3i)",AdWertAccHoch,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,0,"Voltage: %3i.%1iV",UBat/10, UBat%10); |
LCD_printfxy(0,1,"Current: %3i.%1iA",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
LCD_printfxy(0,2,"Power: %4iW",Capacity.ActualPower); |
LCD_printfxy(0,3,"Discharge: %5imAh", Capacity.UsedCapacity); |
break; |
case 8: |
LCD_printfxy(0,0,"Receiver"); |
LCD_printfxy(0,2,"RC-Quality: %4i", SenderOkay); |
LCD_printfxy(0,3,"RC-Channels:%4i", Channels-1); |
break; |
case 9: |
LCD_printfxy(0,0,"Undervoltages " ); |
LCD_printfxy(0,1,"Warn: %2d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10); |
LCD_printfxy(0,2,"Home: %2d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10); |
LCD_printfxy(0,3,"Land: %2d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10); |
break; |
case 10: |
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+1,Poti[i]); |
break; |
case 11: |
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+5,Poti[i+4]); |
break; |
case 12: |
LCD_printfxy(0,0,"Flight-Time " ); |
LCD_printfxy(0,1,"Total:%5umin",FlugMinutenGesamt); |
LCD_printfxy(0,2,"Act: %5umin",FlugMinuten); |
LCD_printfxy(13,3,"(reset)"); |
if(RemoteKeys & KEY4) |
{ |
FlugMinuten = 0; |
SetParamWord(PID_FLIGHT_MINUTES, FlugMinuten); |
} |
break; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
case 13: |
LCD_printfxy(0,0,"Compass"); |
LCD_printfxy(0,1,"Magnet: %5i",KompassValue); |
LCD_printfxy(0,2,"Gyro: %5i",ErsatzKompassInGrad); |
LCD_printfxy(0,3,"Setpoint: %5i",KompassSollWert); |
break; |
case 14: |
LCD_printfxy(0,0,"Servo " ); |
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl); |
LCD_printfxy(0,2,"Position: %3i",ServoNickValue/4); |
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax); |
break; |
case 15: |
LCD_printfxy(0,0,"BL-Ctrl Errors " ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK); |
} |
break; |
case 16: |
LCD_printfxy(0,0,"BL Temperature" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].Temperature,Motor[i*4+1].Temperature,Motor[i*4+2].Temperature,Motor[i*4+3].Temperature); |
} |
break; |
case 17: |
LCD_printfxy(0,0,"BL Current" ); |
LCD_printfxy(11,3,"(in 0.1A)" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",BL3_Current(i*4),BL3_Current(i*4+1),BL3_Current(i*4+2),BL3_Current(i*4+3)); |
if(4 + i * 4 >= RequiredMotors) break; |
} |
break; |
case 18: |
LCD_printfxy(0,0,"BL-Ctrl found " ); |
LCD_printfxy(0,1," %c %c %c %c ",'-' + 4 * (Motor[0].State>>7),'-' + 5 * (Motor[1].State>>7),'-' + 6 * (Motor[2].State>>7),'-' + 7 * (Motor[3].State>>7)); |
LCD_printfxy(0,2," %c %c %c %c ",'-' + 8 * (Motor[4].State>>7),'-' + 9 * (Motor[5].State>>7),'-' + 10 * (Motor[6].State>>7),'-' + 11 * (Motor[7].State>>7)); |
LCD_printfxy(0,3," %c - - - ",'-' + 12 * (Motor[8].State>>7)); |
if(Motor[9].State>>7) LCD_printfxy(4,3,"10"); |
if(Motor[10].State>>7) LCD_printfxy(8,3,"11"); |
if(Motor[11].State>>7) LCD_printfxy(12,3,"12"); |
break; |
#endif |
default: |
if(MenuePunkt == MaxMenue) MaxMenue--; |
MenuePunkt = 0; |
break; |
} |
RemoteKeys = 0; |
} |
/branches/test_v2.12/V2.04a/menu.h |
---|
0,0 → 1,17 |
#ifndef _MENU_H |
#define _MENU_H |
extern void Menu(void); |
extern void LcdClear(void); |
extern void Menu_Putchar(char c); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
extern unsigned char MaxMenue; |
extern unsigned char MenuePunkt; |
extern unsigned char RemoteKeys; |
#define LCD_printfxy(x,y,format, args...) { DispPtr = (y) * 20 + (x); _printf_P(&Menu_Putchar,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(&Menu_Putchar, PSTR(format) , ## args);} |
#endif //_MENU_H |
/branches/test_v2.12/V2.04a/mymath.c |
---|
0,0 → 1,41 |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include "mymath.h" |
// discrete mathematics |
// Sinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit. |
const uint16_t pgm_sinlookup[91] PROGMEM = {0, 143, 286, 429, 571, 714, 856, 998, 1140, 1282, 1423, 1563, 1703, 1843, 1982, 2120, 2258, 2395, 2531, 2667, 2802, 2936, 3069, 3201, 3332, 3462, 3591, 3719, 3846, 3972, 4096, 4219, 4341, 4462, 4581, 4699, 4815, 4930, 5043, 5155, 5266, 5374, 5482, 5587, 5691, 5793, 5893, 5991, 6088, 6183, 6275, 6366, 6455, 6542, 6627, 6710, 6791, 6870, 6947, 7022, 7094, 7165, 7233, 7299, 7363, 7424, 7484, 7541, 7595, 7648, 7698, 7746, 7791, 7834, 7875, 7913, 7949, 7982, 8013, 8041, 8068, 8091, 8112, 8131, 8147, 8161, 8172, 8181, 8187, 8191, 8192}; |
int16_t c_sin_8192(int16_t angle) |
{ |
int8_t m,n; |
int16_t sinus; |
// avoid negative angles |
if (angle < 0) |
{ |
m = -1; |
angle = abs(angle); |
} |
else m = +1; |
// fold angle to intervall 0 to 359 |
angle %= 360; |
// check quadrant |
if (angle <= 90) n=1; // first quadrant |
else if ((angle > 90) && (angle <= 180)) {angle = 180 - angle; n = 1;} // second quadrant |
else if ((angle > 180) && (angle <= 270)) {angle = angle - 180; n = -1;} // third quadrant |
else {angle = 360 - angle; n = -1;} //fourth quadrant |
// get lookup value |
sinus = pgm_read_word(&pgm_sinlookup[angle]); |
// calculate sinus value |
return (sinus * m * n); |
} |
// Cosinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit. |
int16_t c_cos_8192(int16_t angle) |
{ |
return (c_sin_8192(90 - angle)); |
} |
/branches/test_v2.12/V2.04a/mymath.h |
---|
0,0 → 1,10 |
#ifndef _MYMATH_H |
#define _MYMATH_H |
#include <inttypes.h> |
extern int16_t c_sin_8192(int16_t angle); |
extern int16_t c_cos_8192(int16_t angle); |
extern int16_t c_atan2(int16_t y, int16_t x); |
extern uint32_t c_sqrt(uint32_t a); |
#endif // _MYMATH_H |
/branches/test_v2.12/V2.04a/old_macros.h |
---|
0,0 → 1,47 |
/* |
For backwards compatibility only. |
Ingo Busker ingo@mikrocontroller.com |
*/ |
#ifndef cbi |
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) |
#endif |
#ifndef sbi |
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) |
#endif |
#ifndef inb |
#define inb(sfr) _SFR_BYTE(sfr) |
#endif |
#ifndef outb |
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val)) |
#endif |
#ifndef inw |
#define inw(sfr) _SFR_WORD(sfr) |
#endif |
#ifndef outw |
#define outw(sfr, val) (_SFR_WORD(sfr) = (val)) |
#endif |
#ifndef outp |
#define outp(val, sfr) outb(sfr, val) |
#endif |
#ifndef inp |
#define inp(sfr) inb(sfr) |
#endif |
#ifndef BV |
#define BV(bit) _BV(bit) |
#endif |
#ifndef PRG_RDB |
#define PRG_RDB pgm_read_byte |
#endif |
/branches/test_v2.12/V2.04a/printf_P.h |
---|
0,0 → 1,69 |
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt |
/* |
Copyright (C) 1993 Free Software Foundation |
This file is part of the GNU IO Library. This library is free |
software; you can redistribute it and/or modify it under the |
terms of the GNU General Public License as published by the |
Free Software Foundation; either version 2, or (at your option) |
any later version. |
This library is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this library; see the file COPYING. If not, write to the Free |
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
As a special exception, if you link this library with files |
compiled with a GNU compiler to produce an executable, this does not cause |
the resulting executable to be covered by the GNU General Public License. |
This exception does not however invalidate any other reasons why |
the executable file might be covered by the GNU General Public License. */ |
/* |
* Copyright (c) 1990 Regents of the University of California. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. [rescinded 22 July 1999] |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
*/ |
/******************************************************************************/ |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
// function pointer to external callback function |
typedef void (*pVoidFnctChar) (char ); |
typedef void (*pVoidFnct_pVoidFnctChar_const_fmt) (pVoidFnctChar, char const *fmt0, ...); |
extern pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
#endif //_PRINTF_P_H_ |
/branches/test_v2.12/V2.04a/rc.c |
---|
0,0 → 1,285 |
/*####################################################################################### |
Decodieren eines RC Summen Signals |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "rc.h" |
#include "main.h" |
// Achtung: ACT_S3D_SUMMENSIGNAL wird in der Main.h gesetzt |
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved |
volatile int PPM_in[MAX_RC_IN]; |
volatile int PPM_diff[MAX_RC_IN]; // das differnzierte Stick-Signal |
volatile char Channels,tmpChannels = 0; |
volatile unsigned char NewPpmData = 1; |
unsigned int PPM_Neutral = 466; |
//############################################################################ |
// Clear the values |
void rc_sum_init(void) |
//############################################################################ |
{ |
unsigned char i; |
for(i=0;i<MAX_RC_IN;i++) |
{ |
if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127; |
PPM_diff[i] = 0; |
} |
PPM_in[PPM_IN_MAX] = +127; |
PPM_in[PPM_IN_OFF] = -127; |
PPM_in[PPM_IN_MID] = 0; |
AdNeutralGier = 0; |
AdNeutralRoll = 0; |
AdNeutralNick = 0; |
return; |
} |
#ifndef ACT_S3D_SUMMENSIGNAL |
//############################################################################ |
// Interrupt function for the PPM-Input |
ISR(TIMER1_CAPT_vect) |
//############################################################################ |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!(EE_Parameter.ExtraConfig & CFG_SENSITIVE_RC)) |
#endif |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? (3.52 ms < signal < 25.6 ms) |
if((signal > 1100) && (signal < 8000)) |
{ |
Channels = index; |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 13+4) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= PPM_Neutral; |
// Stabiles Signal |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10; else SenderOkay = 200;} |
} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
} |
index++; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
/* |
if(PlatinenVersion < 20) |
{ |
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen |
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen |
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen |
} |
*/ |
#endif |
} |
} |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else |
{ |
static unsigned int AltICR=0; |
static int ppm_in[13+4]; |
static int ppm_diff[13+4]; |
static int old_ppm_in[13+4]; |
static int old_ppm_diff[13+4]; |
signed int signal = 0,tmp; |
static unsigned char index, okay_cnt = 0; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? (3.52 ms < signal < 25.6 ms) |
if((signal > 1100) && (signal < 8000)) |
{ |
tmpChannels = index; |
if(tmpChannels >= 4 && Channels == tmpChannels) |
{ |
if(okay_cnt > 10) |
{ |
NewPpmData = 0; // Null bedeutet: Neue Daten |
for(index = 0; index < 13+4; index++) |
{ |
if(okay_cnt > 30) |
{ |
old_ppm_in[index] = PPM_in[index]; |
old_ppm_diff[index] = PPM_diff[index]; |
} |
PPM_in[index] = ppm_in[index]; |
PPM_diff[index] = ppm_diff[index]; |
} |
} |
if(okay_cnt < 255) okay_cnt++; |
} |
else |
{ |
if(okay_cnt > 100) okay_cnt = 10; else okay_cnt = 0; |
ROT_ON; |
} |
index = 1; |
if(!MotorenEin) Channels = tmpChannels; |
} |
else |
{ |
if(index < 13+4) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= PPM_Neutral; |
// Stabiles Signal |
if((abs(signal - ppm_in[index]) < 6)) |
{ |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(okay_cnt > 25) SenderOkay += 10; |
else |
if(okay_cnt > 10) SenderOkay += 2; |
if(SenderOkay > 200) SenderOkay = 200; |
} |
} |
tmp = (3 * (ppm_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 190) ppm_diff[index] = ((tmp - ppm_in[index]) / 3) * 3; |
else ppm_diff[index] = 0; |
ppm_in[index] = tmp; |
} |
else ROT_ON; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
if(PlatinenVersion < 20) |
{ |
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen |
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen |
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen |
} |
#endif |
} |
if(index < 20) index++; |
else |
if(index == 20) |
{ |
unsigned char i; |
ROT_ON; |
index = 30; |
for(i=0;i<13+4;i++) // restore from older data |
{ |
PPM_in[i] = old_ppm_in[i]; |
PPM_diff[i] = 0; |
// okay_cnt /= 2; |
} |
} |
} |
} |
#endif |
} |
#else |
//############################################################################ |
// Interrupt function for the PPM-Input |
ISR(TIMER1_CAPT_vect) |
//############################################################################ |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
signal /= 2; |
AltICR = ICR1; |
//Syncronisationspause? |
if((signal > 1100*2) && (signal < 8000*2)) |
{ |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 13) |
{ |
if((signal > 250) && (signal < 687*2)) |
{ |
signal -= 962; |
// Stabiles Signal |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
} |
index++; |
} |
} |
} |
#endif |
/branches/test_v2.12/V2.04a/rc.h |
---|
0,0 → 1,42 |
/*####################################################################################### |
Derkodieren eines RC Summen Signals |
#######################################################################################*/ |
#ifndef _RC_H |
#define _RC_H |
#if defined (__AVR_ATmega644__) |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#if defined (__AVR_ATmega644P__) |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved |
extern void rc_sum_init (void); |
extern volatile int PPM_in[MAX_RC_IN]; |
extern volatile int PPM_diff[MAX_RC_IN]; // das diffenzierte Stick-Signal |
extern volatile unsigned char NewPpmData; |
extern volatile char Channels,tmpChannels; |
extern unsigned int PPM_Neutral; |
// 0 -> frei bzw. ACT rssi |
// 1 - 16 -> 1-16 |
// 17 - 28 -> 12 Serial channels |
// 29 -> WP-Event kanal |
// 30 -> -127 |
// 31 -> 0 |
// 32 -> 128 |
#define SERIAL_POTI_START 17 |
#define WP_EVENT_PPM_IN 29 |
#define PPM_IN_OFF 30 |
#define PPM_IN_MAX 31 |
#define PPM_IN_MID 32 |
#define FromNC_WP_EventChannel PPM_in[WP_EVENT_PPM_IN] // WP_EVENT-Channel-Value |
#endif //_RC_H |
/branches/test_v2.12/V2.04a/sbus.c |
---|
0,0 → 1,199 |
/*####################################################################################### |
Decodes the sbus protocol |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "sbus.h" |
#include "main.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char NewSBusData = 0, sBusBuffer[25]; |
//############################################################################ |
// USART1 initialisation from killagreg |
void SbusUartInit(void) |
//############################################################################ |
{ |
// -- Start of USART1 initialisation for Spekturm seriell-mode |
// USART1 Control and Status Register A, B, C and baud rate register |
uint8_t sreg = SREG; |
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 100000) - 1); |
// disable all interrupts before reconfiguration |
cli(); |
// disable RX-Interrupt |
UCSR1B &= ~(1 << RXCIE1); |
// disable TX-Interrupt |
UCSR1B &= ~(1 << TXCIE1); |
// disable DRE-Interrupt |
UCSR1B &= ~(1 << UDRIE1); |
/* |
// set direction of RXD1 and TXD1 pins |
// set RXD1 (PD2) as an input pin |
PORTD |= (1 << PORTD2); |
DDRD &= ~(1 << DDD2); |
// set TXD1 (PD3) as an output pin |
PORTD |= (1 << PORTD3); |
DDRD |= (1 << DDD3); |
*/ |
// USART0 Baud Rate Register |
// set clock divider |
UBRR1H = (uint8_t)(ubrr>>8); |
UBRR1L = (uint8_t)ubrr; |
// enable double speed operation |
UCSR1A |= (1 << U2X1); |
// enable receiver and transmitter |
//UCSR1B = (1<<RXEN1)|(1<<TXEN1); |
UCSR1B = (1<<RXEN1); |
// set asynchronous mode |
UCSR1C &= ~(1 << UMSEL11); |
UCSR1C &= ~(1 << UMSEL10); |
// parity |
UCSR1C <= (1 << UPM11); // even |
UCSR1C &= ~(1 << UPM10); |
// stop bit |
UCSR1C |= (1 << USBS1); // two |
// 8-bit |
UCSR1B &= ~(1 << UCSZ12); |
UCSR1C |= (1 << UCSZ11); |
UCSR1C |= (1 << UCSZ10); |
// flush receive buffer explicit |
while(UCSR1A & (1<<RXC1)) UDR1; |
// enable RX-interrupts at the end |
UCSR1B |= (1 << RXCIE1); |
// -- End of USART1 initialisation |
// restore global interrupt flags |
sBusBuffer[23] |= 4; // This Bit contains the 'Signal loss' |
SREG = sreg; |
return; |
} |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define MIN_FRAMEGAP 68 // 7ms |
#define MAX_BYTEGAP 3 // 310us |
//############################################################################ |
// Is called by the uart RX interrupt |
//############################################################################ |
void SbusParser(unsigned char udr) |
{ |
static unsigned char ptr = 0; |
if(!SpektrumTimer && udr == 0x0f) // wait for the start |
{ |
ptr = 0; |
SpektrumTimer = 80; // 8ms gap |
} |
else |
{ |
if(++ptr == 24) // last byte |
{ |
NewSBusData = 1; |
} |
else |
if(ptr > 24) ptr = 25; |
else |
{ |
sBusBuffer[ptr] = udr; // collect all bytes |
} |
} |
} |
void ProcessSBus(void) |
{ |
static unsigned char load = 0; |
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process; |
unsigned int bitmask11 = 256; |
signed int signal = 0,tmp; |
if(!(sBusBuffer[23] & 4)) // This Bit contains the 'Signal loss' |
{ |
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200; |
} |
signal = sBusBuffer[1]; |
if(!load--) { process = (12*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load |
for(i = 0; i < process; i++) // collect the single bits |
{ |
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11; |
bitmask8 *= 2; |
if(!bitmask8) |
{ |
bitmask8 = 1; |
sbyte++; |
} |
bitmask11 *= 2; |
if(bitmask11 == 2048) |
{ |
bitmask11 = 1; |
signal = (signal-1024) / 5; // the resolution is higher than required |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
signal = 0; |
index++; // next channel |
} |
} |
NewPpmData = 0; // Null bedeutet: Neue Daten |
} |
NewSBusData = 0; |
} |
#endif |
/branches/test_v2.12/V2.04a/sbus.h |
---|
0,0 → 1,11 |
#ifndef _SBUS_H |
#define _SBUS_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char NewSBusData, sBusBuffer[25]; |
extern void SbusParser(unsigned char); |
extern void SbusUartInit(void); |
extern void ProcessSBus(void); |
#endif |
#endif |
/branches/test_v2.12/V2.04a/spi.c |
---|
0,0 → 1,407 |
// ######################## SPI - FlightCtrl ################### |
#include "main.h" |
#include "eeprom.h" |
//struct str_ToNaviCtrl_Version ToNaviCtrl_Version; |
//struct str_FromNaviCtrl_Version FromNaviCtrl_Version; |
struct str_ToNaviCtrl ToNaviCtrl; |
struct str_FromNaviCtrl FromNaviCtrl; |
struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
struct str_SPI_VersionInfo NC_Version; |
struct str_GPSInfo GPSInfo; |
unsigned char SPI_BufferIndex; |
unsigned char SPI_RxBufferIndex; |
signed char FromNC_Rotate_C = 32, FromNC_Rotate_S = 0; |
volatile unsigned char SPI_Buffer[sizeof(FromNaviCtrl)]; |
unsigned char *SPI_TX_Buffer; |
unsigned char SPITransferCompleted, SPI_ChkSum; |
unsigned char SPI_RxDataValid,NaviDataOkay = 250; |
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1, |
SPI_FCCMD_STICK, SPI_FCCMD_VERSION, SPI_FCCMD_BL_ACCU, |
SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_MISC,SPI_FCCMD_SERVOS, |
SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2, SPI_FCCMD_BL_ACCU |
}; |
unsigned char SPI_CommandCounter = 0; |
unsigned char NC_ErrorCode = 0; |
unsigned char NC_GPS_ModeCharacter = ' '; |
unsigned char EarthMagneticField = 0; |
unsigned char EarthMagneticInclination = 0, EarthMagneticInclinationTheoretic = 0; |
unsigned char NC_To_FC_Flags = 0; |
unsigned char NC_To_FC_MaxAltitude = 0; // this is a Parameter on the SD-card |
signed int POI_KameraNick = 0; // in 0,1° |
vector16_t MagVec = {0,0,0}; |
#ifdef USE_SPI_COMMUNICATION |
//------------------------------------------------------ |
void SPI_MasterInit(void) |
{ |
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input |
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT); |
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64 |
SPSR = 0;//(1<<SPI2X); |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); |
SPITransferCompleted = 1; |
//SPDR = 0x00; // dummy write |
ToNaviCtrl.Sync1 = 0xAA; |
ToNaviCtrl.Sync2 = 0x83; |
ToNaviCtrl.Command = SPI_FCCMD_USER; |
ToNaviCtrl.IntegralNick = 0; |
ToNaviCtrl.IntegralRoll = 0; |
FromNaviCtrl_Value.SerialDataOkay = 0; |
SPI_RxDataValid = 0; |
} |
//------------------------------------------------------ |
unsigned char SPI_StartTransmitPacket(void) |
{ |
if(!SPITransferCompleted) return(0); |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl; |
ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++]; |
if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0; |
SPITransferCompleted = 0; |
UpdateSPI_Buffer(); // update buffer |
SPI_BufferIndex = 1; |
ToNaviCtrl.Chksum = ToNaviCtrl.Sync1; |
SPDR = ToNaviCtrl.Sync1; // Start transmission |
return(1); |
} |
//------------------------------------------------------ |
//SIGNAL(SIG_SPI) |
void SPI_TransmitByte(void) |
{ |
static unsigned char SPI_RXState = 0; |
unsigned char rxdata; |
static unsigned char rxchksum; |
if (SPITransferCompleted) return; |
if (!(SPSR & (1 << SPIF))) return; |
BytegapSPI = SPI_BYTEGAP; |
// _delay_us(30); |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave |
rxdata = SPDR; |
switch ( SPI_RXState) |
{ |
case 0: |
SPI_RxBufferIndex = 0; |
rxchksum = rxdata; |
if (rxdata == 0x81 ) { SPI_RXState = 1; } // 1. Syncbyte ok |
break; |
case 1: |
if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState = 2; } // 2. Syncbyte ok |
else SPI_RXState = 0; |
break; |
case 2: |
SPI_Buffer[SPI_RxBufferIndex++]= rxdata; // get data |
//DebugOut.Analog[19]++; |
if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl)) |
{ |
if (rxdata == rxchksum) |
{ |
unsigned char *ptr = (unsigned char *)&FromNaviCtrl; |
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer)); |
SPI_RxDataValid = 1; |
} |
else |
{ |
SPI_RxDataValid = 0; |
} |
SPI_RXState = 0; |
} |
else rxchksum += rxdata; |
break; |
} |
if (SPI_BufferIndex < sizeof(ToNaviCtrl)) |
{ |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); |
SPDR = SPI_TX_Buffer[SPI_BufferIndex]; |
ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex]; |
} |
else SPITransferCompleted = 1; |
SPI_BufferIndex++; |
} |
//------------------------------------------------------ |
void UpdateSPI_Buffer(void) |
{ |
signed int tmp; |
static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION; |
ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR; |
ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier; |
ToNaviCtrl.AccNick = ((int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc))/4; |
ToNaviCtrl.AccRoll = ((int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc))/4; |
NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0; |
// ToNaviCtrl.User8 = Parameter_UserParam8; |
// ToNaviCtrl.CalState = WinkelOut.CalcState; |
switch(ToNaviCtrl.Command) // |
{ |
case SPI_FCCMD_USER: |
ToNaviCtrl.Param.Byte[0] = Parameter_UserParam1; |
ToNaviCtrl.Param.Byte[1] = Parameter_UserParam2; |
ToNaviCtrl.Param.Byte[2] = Parameter_UserParam3; |
ToNaviCtrl.Param.Byte[3] = Parameter_UserParam4; |
ToNaviCtrl.Param.Byte[4] = Parameter_UserParam5; |
ToNaviCtrl.Param.Byte[5] = Parameter_UserParam6; |
ToNaviCtrl.Param.Byte[6] = Parameter_UserParam7; |
ToNaviCtrl.Param.Byte[7] = Parameter_UserParam8; |
ToNaviCtrl.Param.Byte[8] = FC_StatusFlags; |
//if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) ToNaviCtrl.Param.Byte[8] &= ~FC_STATUS_FLY; |
FC_StatusFlags &= ~(FC_STATUS_CALIBRATE | FC_STATUS_START); |
ToNaviCtrl.Param.Byte[9] = ActiveParamSet; |
ToNaviCtrl.Param.Byte[10] = (unsigned char) UBat; // 0.1V |
ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2; |
if(!(PORTC & (1<<PORTC2))) FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) |
break; |
case SPI_FCCMD_BL_ACCU: |
ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A |
ToNaviCtrl.Param.Int[1] = Capacity.UsedCapacity; // mAh |
ToNaviCtrl.Param.Byte[4] = GetChannelValue(EE_Parameter.NaviGpsModeChannel); // GPS-Mode control |
ToNaviCtrl.Param.Byte[5] = VarioCharacter; |
ToNaviCtrl.Param.Byte[6] = motorindex; |
ToNaviCtrl.Param.Byte[7] = Motor[motorindex].Version; |
ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM; |
ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State; |
ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature; |
ToNaviCtrl.Param.Byte[11] = Motor[motorindex].Current; |
if(Mixer.Motor[++motorindex][0] <= 0) // next motor is not used ? |
while(Mixer.Motor[motorindex][0] <= 0 && motorindex) motorindex = (motorindex + 1) % 13; |
break; |
case SPI_FCCMD_PARAMETER1: |
ToNaviCtrl.Param.Byte[0] = (unsigned char) BattLowVoltageWarning; //0.1V |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain; // Parameters for the Naviboard |
ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI; |
ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD; |
ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsA; |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviOperatingRadius; |
ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation; |
break; |
case SPI_FCCMD_PARAMETER2: |
ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviOut1Parameter; // Distance between Photo releases |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
// create the ToNC_SpeakHoTT |
if(EE_Parameter.Receiver != RECEIVER_HOTT) |
{ |
if(JetiBeep != 'B') JetiBeep = pgm_read_byte(&JETI_CODE[HoTT_Waring()]); |
else HoTT_Waring(); |
} |
ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT; |
#else |
ToNaviCtrl.Param.Byte[1] = 0; |
#endif |
ToNaviCtrl.Param.Byte[2] = EE_Parameter.LandingSpeed; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.ComingHomeAltitude; |
ToNaviCtrl.Param.Byte[4] = LowVoltageHomeActive; |
ToNaviCtrl.Param.Byte[5] = ToNC_Load_WP_List; |
ToNC_Load_WP_List = 0; |
break; |
case SPI_FCCMD_STICK: |
cli(); |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[0] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[1] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[2] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
sei(); |
ToNaviCtrl.Param.Byte[3] = (char) tmp; |
ToNaviCtrl.Param.Byte[4] = (unsigned char) Poti[0]; |
ToNaviCtrl.Param.Byte[5] = (unsigned char) Poti[1]; |
ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti[2]; |
ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti[3]; |
ToNaviCtrl.Param.Byte[8] = (unsigned char) Poti[4]; |
ToNaviCtrl.Param.Byte[9] = (unsigned char) Poti[5]; |
ToNaviCtrl.Param.Byte[10] = (unsigned char) Poti[6]; |
ToNaviCtrl.Param.Byte[11] = (unsigned char) Poti[7]; |
break; |
case SPI_FCCMD_MISC: |
if(WinkelOut.CalcState >= 5) |
{ |
WinkelOut.CalcState = 0; |
ToNaviCtrl.Param.Byte[0] = 5; |
} |
else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState; |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime; |
ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5); |
ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5); |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit; |
ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay; |
// ToNaviCtrl.Param.Byte[10] = (unsigned char) PPM_in[0]; // ACT RSSI |
ToNaviCtrl.Param.Byte[10] = NC_Wait_for_LED; |
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil |
break; |
case SPI_FCCMD_VERSION: |
ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR; |
ToNaviCtrl.Param.Byte[1] = VERSION_MINOR; |
ToNaviCtrl.Param.Byte[2] = VERSION_PATCH; |
ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE; |
ToNaviCtrl.Param.Byte[4] = PlatinenVersion; |
ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0]; |
ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1]; |
VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; // VersionInfo.HardwareError[0] = 0; |
VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.CompassOffset; |
ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig; |
ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3; |
break; |
case SPI_FCCMD_SERVOS: |
ToNaviCtrl.Param.Byte[0] = EE_Parameter.ServoNickRefresh; // Parameters for the Servo Control |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.ServoCompInvert; |
ToNaviCtrl.Param.Byte[2] = Parameter_ServoNickControl; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.ServoNickComp; |
ToNaviCtrl.Param.Byte[4] = EE_Parameter.ServoNickMin; |
ToNaviCtrl.Param.Byte[5] = EE_Parameter.ServoNickMax; |
ToNaviCtrl.Param.Byte[6] = Parameter_ServoRollControl; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.ServoRollComp; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.ServoRollMin; |
ToNaviCtrl.Param.Byte[9] = EE_Parameter.ServoRollMax; |
ToNaviCtrl.Param.Byte[10] = Capacity.MinOfMaxPWM; |
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[28]; // I2C-Error counter |
break; |
} |
if(SPI_RxDataValid) |
{ |
if(FromNaviCtrl.Command != oldcommand) NaviDataOkay = 250; |
oldcommand = FromNaviCtrl.Command; |
CalculateCompassTimer = 1; |
if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)) |
{ |
GPS_Nick = FromNaviCtrl.GPS_Nick; |
GPS_Roll = FromNaviCtrl.GPS_Roll; |
} |
// update compass readings |
// MagVec.x = FromNaviCtrl.MagVecX; |
// MagVec.y = FromNaviCtrl.MagVecY; |
// MagVec.z = FromNaviCtrl.MagVecZ; |
if(FromNaviCtrl.CompassValue <= 360) KompassValue = FromNaviCtrl.CompassValue; |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
if(FromNaviCtrl.BeepTime > beeptime && !DisableRcOffBeeping) beeptime = FromNaviCtrl.BeepTime; |
switch (FromNaviCtrl.Command) |
{ |
case SPI_NCCMD_KALMAN: |
FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.sByte[0]; |
FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.sByte[1]; |
FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.sByte[2]; |
KompassFusion = FromNaviCtrl.Param.sByte[3]; |
FromNaviCtrl_Value.GpsZ = FromNaviCtrl.Param.Byte[4]; |
FromNC_Rotate_C = FromNaviCtrl.Param.Byte[5]; |
FromNC_Rotate_S = FromNaviCtrl.Param.Byte[6]; |
GPS_Aid_StickMultiplikator = FromNaviCtrl.Param.Byte[7]; |
if(CareFree && FromNaviCtrl.Param.sInt[4] >= 0) |
{ |
KompassSollWert = FromNaviCtrl.Param.sInt[4]; // bei Carefree kann NC den Kompass-Sollwinkel vorgeben |
if(EE_Parameter.CamOrientation) // Kamera angle is not front |
{ |
KompassSollWert += 360 - ((unsigned int) EE_Parameter.CamOrientation * 15); |
KompassSollWert %= 360; |
} |
} |
POI_KameraNick = (POI_KameraNick + FromNaviCtrl.Param.sInt[5]) / 2; // FromNaviCtrl.Param.sInt[5]; // Nickwinkel |
break; |
case SPI_NCCMD_VERSION: |
NC_Version.Major = FromNaviCtrl.Param.Byte[0]; |
NC_Version.Minor = FromNaviCtrl.Param.Byte[1]; |
NC_Version.Patch = FromNaviCtrl.Param.Byte[2]; |
NC_Version.Compatible = FromNaviCtrl.Param.Byte[3]; |
NC_Version.Hardware = FromNaviCtrl.Param.Byte[4]; |
DebugOut.Status[0] |= FromNaviCtrl.Param.Byte[5]; |
DebugOut.Status[1] = (DebugOut.Status[1] & (0x01|0x02)) | (FromNaviCtrl.Param.Byte[6] & (0x04 | 0x08)); |
NC_ErrorCode = FromNaviCtrl.Param.Byte[7]; |
NC_GPS_ModeCharacter = FromNaviCtrl.Param.Byte[8]; |
FromNaviCtrl_Value.SerialDataOkay = FromNaviCtrl.Param.Byte[9]; |
NC_To_FC_Flags = FromNaviCtrl.Param.Byte[10]; |
NC_To_FC_MaxAltitude = FromNaviCtrl.Param.Byte[11]; |
break; |
case SPI_NCCMD_GPSINFO: |
GPSInfo.Flags = FromNaviCtrl.Param.Byte[0]; |
GPSInfo.NumOfSats = FromNaviCtrl.Param.Byte[1]; |
GPSInfo.SatFix = FromNaviCtrl.Param.Byte[2]; |
GPSInfo.Speed = FromNaviCtrl.Param.Byte[3]; |
GPSInfo.HomeDistance = FromNaviCtrl.Param.Int[2]; |
GPSInfo.HomeBearing = FromNaviCtrl.Param.sInt[3]; |
PPM_in[WP_EVENT_PPM_IN] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value (FromNC_WP_EventChannel) |
FromNC_AltitudeSpeed = FromNaviCtrl.Param.Byte[9]; |
FromNC_AltitudeSetpoint = (long) FromNaviCtrl.Param.sInt[5] * 10; // in cm |
break; |
case SPI_MISC: |
EarthMagneticField = FromNaviCtrl.Param.Byte[0]; |
EarthMagneticInclination = FromNaviCtrl.Param.Byte[1]; |
EarthMagneticInclinationTheoretic = FromNaviCtrl.Param.Byte[2]; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(FromNaviCtrl.Param.Byte[3]) |
if(!SpeakHoTT || (SpeakHoTT >= SPEAK_GPS_HOLD && SpeakHoTT <= SPEAK_GPS_OFF)) SpeakHoTT = FromNaviCtrl.Param.Byte[3]; |
NaviData_TargetDistance = FromNaviCtrl.Param.Int[3]; |
#endif |
NaviData_WaypointIndex = FromNaviCtrl.Param.Byte[4]; |
NaviData_WaypointNumber = FromNaviCtrl.Param.Byte[5]; |
NaviData_TargetHoldTime = FromNaviCtrl.Param.Byte[8]; |
NaviData_MaxWpListIndex = FromNaviCtrl.Param.Byte[9]; |
break; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
case SPI_NCCMD_HOTT_DATA: |
//if(EE_Parameter.Receiver == RECEIVER_HOTT) |
NC_Fills_HoTT_Telemety(); |
break; |
#endif |
// 0 = 0,1 |
// 1 = 2,3 |
// 2 = 4,5 |
// 3 = 6,7 |
// 4 = 8,9 |
// 5 = 10,11 |
default: |
break; |
} |
} |
else |
{ |
// KompassValue = 0; |
// KompassRichtung = 0; |
GPS_Nick = 0; |
GPS_Roll = 0; |
} |
} |
#endif |
/branches/test_v2.12/V2.04a/spi.h |
---|
0,0 → 1,197 |
// ######################## SPI - FlightCtrl ################### |
#ifndef _SPI_H |
#define _SPI_H |
#include <util/delay.h> |
#include "vector.h" |
#define USE_SPI_COMMUNICATION |
#define SPI_BYTEGAP 5 |
//----------------------------------------- |
#define DDR_SPI DDRB |
#define SLAVE_SELECT_DDR_PORT DDRC |
#define SLAVE_SELECT_PORT PORTC |
#if defined(__AVR_ATmega1284P__) |
#define DD_SS PORTB4 |
#define DD_SCK PORTB7 |
#define DD_MOSI PORTB5 |
#define DD_MISO PORTB6 |
#define SPI_SLAVE_SELECT PORTC5 |
#else |
#define DD_SS PB4 |
#define DD_SCK PB7 |
#define DD_MOSI PB5 |
#define DD_MISO PB6 |
#define SPI_SLAVE_SELECT PC5 |
#endif |
// for compatibility reasons gcc3.x <-> gcc4.x |
#ifndef SPCR |
#define SPCR SPCR0 |
#endif |
#ifndef SPE |
#define SPE SPE0 |
#endif |
#ifndef MSTR |
#define MSTR MSTR0 |
#endif |
#ifndef SPR1 |
#define SPR1 SPR01 |
#endif |
#ifndef SPR0 |
#define SPR0 SPR00 |
#endif |
#ifndef SPIE |
#define SPIE SPIE0 |
#endif |
#ifndef SPDR |
#define SPDR SPDR0 |
#endif |
#ifndef SPIF |
#define SPIF SPIF0 |
#endif |
#ifndef SPSR |
#define SPSR SPSR0 |
#endif |
// ------------------------- |
#define SPI_FCCMD_USER 10 |
#define SPI_FCCMD_STICK 11 |
#define SPI_FCCMD_MISC 12 |
#define SPI_FCCMD_PARAMETER1 13 |
#define SPI_FCCMD_VERSION 14 |
#define SPI_FCCMD_SERVOS 15 |
#define SPI_FCCMD_BL_ACCU 16 |
#define SPI_FCCMD_PARAMETER2 17 |
struct str_ToNaviCtrl |
{ |
unsigned char Sync1, Sync2; |
unsigned char Command; |
signed int IntegralNick; |
signed int IntegralRoll; |
signed int AccNick; |
signed int AccRoll; |
signed int GyroCompass; |
signed int GyroNick; |
signed int GyroRoll; |
signed int GyroGier; |
unsigned int FCStatus; |
union |
{ |
unsigned char Byte[12]; |
char sByte[12]; |
unsigned int Int[6]; |
int sInt[6]; |
unsigned long Long[3]; |
long sLong[3]; |
float Float[3]; |
} Param; |
unsigned char Chksum; |
}; |
#define SPI_NCCMD_KALMAN 103 |
#define SPI_NCCMD_VERSION 104 |
#define SPI_NCCMD_GPSINFO 105 |
#define SPI_NCCMD_HOTT_DATA 106 |
#define SPI_MISC 107 |
struct str_FromNaviCtrl |
{ |
unsigned char Command; |
signed int GPS_Nick; |
signed int GPS_Roll; |
signed int MagVecX; |
signed int CompassValue; |
signed int AccErrorN; |
signed int AccErrorR; |
signed int MagVecY; |
signed int MagVecZ; |
unsigned int BeepTime; |
union |
{ |
unsigned char Byte[12]; |
char sByte[12]; |
unsigned int Int[6]; |
int sInt[6]; |
unsigned long Long[3]; |
long sLong[3]; |
float Float[3]; |
} Param; |
unsigned char Chksum; |
}; |
struct str_FromNaviCtrl_Value |
{ |
signed char Kalman_K; |
signed char Kalman_MaxDrift; |
signed char Kalman_MaxFusion; |
unsigned char SerialDataOkay; |
signed char GpsZ; |
}; |
struct str_SPI_VersionInfo |
{ |
unsigned char Major; |
unsigned char Minor; |
unsigned char Patch; |
unsigned char Compatible; |
unsigned char Hardware; |
}; |
// Satfix types for GPSData.SatFix |
#define SATFIX_NONE 0x00 |
#define SATFIX_DEADRECKOING 0x01 |
#define SATFIX_2D 0x02 |
#define SATFIX_3D 0x03 |
#define SATFIX_GPS_DEADRECKOING 0x04 |
#define SATFIX_TIMEONLY 0x05 |
// Flags for interpretation of the GPSData.Flags |
#define FLAG_GPSFIXOK 0x01 // (i.e. within DOP & ACC Masks) |
#define FLAG_DIFFSOLN 0x02 // (is DGPS used) |
#define FLAG_WKNSET 0x04 // (is Week Number valid) |
#define FLAG_TOWSET 0x08 // (is Time of Week valid) |
#define FLAG_GPS_NAVIGATION_ACTIVE 0x10 // NC to FC -> NC is ready to navigate |
struct str_GPSInfo |
{ |
unsigned char Flags; // Status Flags |
unsigned char NumOfSats; // number of satelites |
unsigned char SatFix; // type of satfix |
unsigned char Speed; // m/sek |
unsigned int HomeDistance; // distance to Home in dm |
int HomeBearing; // bearing to home in deg |
}; |
#ifdef USE_SPI_COMMUNICATION |
extern struct str_GPSInfo GPSInfo; |
extern struct str_SPI_VersionInfo NC_Version; |
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
extern struct str_ToNaviCtrl ToNaviCtrl; |
extern struct str_FromNaviCtrl FromNaviCtrl; |
extern unsigned char SPI_CommandCounter,NaviDataOkay; |
extern signed char FromNC_Rotate_C, FromNC_Rotate_S; |
extern unsigned char NC_ErrorCode; |
extern void SPI_MasterInit(void); |
extern unsigned char SPI_StartTransmitPacket(void); |
extern void UpdateSPI_Buffer(void); |
extern void SPI_TransmitByte(void); |
extern signed int POI_KameraNick; |
extern unsigned char NC_GPS_ModeCharacter, NC_To_FC_Flags, NC_To_FC_MaxAltitude; |
extern vector16_t MagVec; |
extern unsigned char EarthMagneticField; |
extern unsigned char EarthMagneticInclination,EarthMagneticInclinationTheoretic; |
#else |
// -------------------------------- Dummy ----------------------------------------- |
#define SPI_MasterInit() ; |
//#define SPI_StartTransmitPacket() ; |
#define UpdateSPI_Buffer() ; |
#define SPI_TransmitByte() ; |
#endif |
#endif |
/branches/test_v2.12/V2.04a/timer0.c |
---|
0,0 → 1,490 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#define MULTIPLYER 4 |
volatile unsigned int CountMilliseconds = 0; |
volatile unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 0; |
volatile unsigned int beeptime = 0; |
volatile unsigned char BytegapSPI = 0, ServoActive = 0, CalculateServoSignals = 1; |
unsigned char JustMK3MagConnected = 0; |
uint16_t RemainingPulse = 0; |
volatile int16_t ServoNickOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon |
volatile int16_t ServoRollOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon |
unsigned int BeepMuster = 0xffff; |
signed int NickServoValue = 128 * MULTIPLYER * 16; |
volatile int16_t ServoNickValue = 0; |
volatile int16_t ServoRollValue = 0; |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
ISR(TIMER0_OVF_vect) // 9,7kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
if(BytegapSPI) BytegapSPI--; |
if(SpektrumTimer) SpektrumTimer--; |
if(!cnt--) |
{ |
cnt = 9; |
CountMilliseconds++; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) if(UpdateMotor < 4) UpdateMotor++; |
if(!(PINC & 0x10)) JustMK3MagConnected = 1; |
if(beeptime) |
{ |
if(beeptime > 10) beeptime -= 10; else beeptime = 0; |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(pieper_ein) PORTC |= (1<<7); // Speaker an PORTC.7 |
else PORTC &= ~(1<<7); |
#else |
if(pieper_ein) |
{ |
// if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2 |
// else |
PORTC |= (1<<7); // Speaker an PORTC.7 |
} |
else |
{ |
// if(PlatinenVersion == 10) PORTD &= ~(1<<2); |
// else |
PORTC &= ~(1<<7); |
} |
#endif |
} |
if(JustMK3MagConnected && !NaviDataOkay && Parameter_GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
if(PINC & 0x10) |
{ |
if(++cntKompass > 1000) JustMK3MagConnected = 0; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 362)) |
{ |
cntKompass += cntKompass / 41; |
if(cntKompass > 10) KompassValue = cntKompass - 10; else KompassValue = 0; |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
} |
cntKompass = 0; |
} |
} |
} |
// ----------------------------------------------------------------------- |
unsigned int SetDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(CountMilliseconds + t + 1); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
char CheckDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(((t - CountMilliseconds) & 0x8000) >> 9); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
void Delay_ms(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)); |
} |
void Delay_ms_Mess(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)) if(AdReady) {AdReady = 0; ANALOG_ON;} |
} |
/*****************************************************/ |
/* Initialize Timer 2 */ |
/*****************************************************/ |
// The timer 2 is used to generate the PWM at PD7 (J7) |
// to control a camera servo for nick compensation. |
void TIMER2_Init(void) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts before reconfiguration |
cli(); |
PORTD &= ~(1<<PORTD7); // set PD7 to low |
DDRC |= (1<<DDC6); // set PC6 as output (Reset for HEF4017) |
HEF4017Reset_ON; |
// Timer/Counter 2 Control Register A |
// Timer Mode is FastPWM with timer reload at OCR2A (Bits: WGM22 = 1, WGM21 = 1, WGM20 = 1) |
// PD7: Normal port operation, OC2A disconnected, (Bits: COM2A1 = 0, COM2A0 = 0) |
// PD6: Normal port operation, OC2B disconnected, (Bits: COM2B1 = 0, COM2B0 = 0) |
TCCR2A &= ~((1<<COM2A1)|(1<<COM2A0)|(1<<COM2B1)|(1<<COM2B0)); |
TCCR2A |= (1<<WGM21)|(1<<WGM20); |
// Timer/Counter 2 Control Register B |
// Set clock divider for timer 2 to SYSKLOCK/32 = 20MHz / 32 = 625 kHz |
// The timer increments from 0x00 to 0xFF with an update rate of 625 kHz or 1.6 us |
// hence the timer overflow interrupt frequency is 625 kHz / 256 = 2.44 kHz or 0.4096 ms |
// divider 32 (Bits: CS022 = 0, CS21 = 1, CS20 = 1) |
TCCR2B &= ~((1<<FOC2A)|(1<<FOC2B)|(1<<CS22)); |
TCCR2B |= (1<<CS21)|(1<<CS20)|(1<<WGM22); |
// Initialize the Timer/Counter 2 Register |
TCNT2 = 0; |
// Initialize the Output Compare Register A used for PWM generation on port PD7. |
OCR2A = 255; |
TCCR2A |= (1<<COM2A1); // set or clear at compare match depends on value of COM2A0 |
// Timer/Counter 2 Interrupt Mask Register |
// Enable timer output compare match A Interrupt only |
TIMSK2 &= ~((1<<OCIE2B)|(1<<TOIE2)); |
TIMSK2 |= (1<<OCIE2A); |
SREG = sreg; |
} |
//---------------------------- |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
// TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|(1<<COM0B0)|3;//fast PWM |
OCR0B = 255; |
OCR0A = 180; |
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TIMSK0 |= _BV(TOIE0); |
} |
/*****************************************************/ |
/* Control Servo Position */ |
/*****************************************************/ |
void CalcNickServoValue(void) |
{ |
signed int max, min; |
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value |
{ |
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15); |
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20); |
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6; |
LIMIT_MIN_MAX(NickServoValue,min, max); |
} |
else NickServoValue = (int16_t)Parameter_ServoNickControl * (MULTIPLYER*16); // direct poti control |
} |
void CalculateServo(void) |
{ |
signed char cosinus, sinus; |
signed long nick, roll; |
cosinus = sintab[EE_Parameter.CamOrientation + 6]; |
sinus = sintab[EE_Parameter.CamOrientation]; |
if(CalculateServoSignals == 1) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_SERVO_NICK_COMP_OFF) nick = 0; |
else nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L; |
nick -= POI_KameraNick * 7; |
nick = ((long)Parameter_ServoNickComp * nick) / 512L; |
// offset (Range from 0 to 255 * 3 = 765) |
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) ServoNickOffset = NickServoValue; |
else ServoNickOffset += (NickServoValue - ServoNickOffset) / EE_Parameter.ServoManualControlSpeed; |
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) // inverting movement of servo |
{ |
nick = ServoNickOffset / 16 + nick; |
} |
else |
{ // inverting movement of servo |
nick = ServoNickOffset / 16 - nick; |
} |
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1); |
else ServoNickValue = nick; |
// limit servo value to its parameter range definition |
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER)) |
{ |
ServoNickValue = (int16_t)EE_Parameter.ServoNickMin * MULTIPLYER; |
} |
else |
if(ServoNickValue > ((int16_t)EE_Parameter.ServoNickMax * MULTIPLYER)) |
{ |
ServoNickValue = (int16_t)EE_Parameter.ServoNickMax * MULTIPLYER; |
} |
// if(PlatinenVersion < 20) CalculateServoSignals = 0; else |
CalculateServoSignals++; |
} |
else |
{ |
roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L; |
roll = ((long)Parameter_ServoRollComp * roll) / 512L; |
ServoRollOffset += ((int16_t)Parameter_ServoRollControl * (MULTIPLYER*16) - ServoRollOffset) / EE_Parameter.ServoManualControlSpeed; |
if(EE_Parameter.ServoCompInvert & SERVO_ROLL_INV) |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 + roll; |
} |
else |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 - roll; |
} |
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1); |
else ServoRollValue = roll; |
// limit servo value to its parameter range definition |
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER)) |
{ |
ServoRollValue = (int16_t)EE_Parameter.ServoRollMin * MULTIPLYER; |
} |
else |
if(ServoRollValue > ((int16_t)EE_Parameter.ServoRollMax * MULTIPLYER)) |
{ |
ServoRollValue = (int16_t)EE_Parameter.ServoRollMax * MULTIPLYER; |
} |
CalculateServoSignals = 0; |
} |
} |
ISR(TIMER2_COMPA_vect) |
{ |
// frame len 22.5 ms = 14063 * 1.6 us |
// stop pulse: 0.3 ms = 188 * 1.6 us |
// min servo pulse: 0.6 ms = 375 * 1.6 us |
// max servo pulse: 2.4 ms = 1500 * 1.6 us |
// resolution: 1500 - 375 = 1125 steps |
#define IRS_RUNTIME 127 |
#define PPM_STOPPULSE 188 |
#define PPM_FRAMELEN (1757 * EE_Parameter.ServoNickRefresh) |
#define MINSERVOPULSE 375 |
#define MAXSERVOPULSE 1500 |
#define SERVORANGE (MAXSERVOPULSE - MINSERVOPULSE) |
static uint8_t PulseOutput = 0; |
static uint16_t ServoFrameTime = 0; |
static uint8_t ServoIndex = 0; |
/* |
if(PlatinenVersion < 20) |
{ |
//--------------------------- |
// Nick servo state machine |
//--------------------------- |
if(!PulseOutput) // pulse output complete |
{ |
if(TCCR2A & (1<<COM2A0)) // we had a low pulse |
{ |
TCCR2A &= ~(1<<COM2A0);// make a high pulse |
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms |
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
// range servo pulse width |
if(RemainingPulse > MAXSERVOPULSE ) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit |
else if(RemainingPulse < MINSERVOPULSE ) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit |
// accumulate time for correct update rate |
ServoFrameTime = RemainingPulse; |
} |
else // we had a high pulse |
{ |
TCCR2A |= (1<<COM2A0); // make a low pulse |
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; |
CalculateServoSignals = 1; |
} |
// set pulse output active |
PulseOutput = 1; |
} |
} // EOF Nick servo state machine |
else |
*/ |
{ |
//----------------------------------------------------- |
// PPM state machine, onboard demultiplexed by HEF4017 |
//----------------------------------------------------- |
if(!PulseOutput) // pulse output complete |
{ |
if(TCCR2A & (1<<COM2A0)) // we had a low pulse |
{ |
TCCR2A &= ~(1<<COM2A0);// make a high pulse |
if(ServoIndex == 0) // if we are at the sync gap |
{ |
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; // generate sync gap by filling time to full frame time |
ServoFrameTime = 0; // reset servo frame time |
HEF4017Reset_ON; // enable HEF4017 reset |
} |
else // servo channels |
if(ServoIndex > EE_Parameter.ServoNickRefresh) |
{ |
RemainingPulse = 10; // end it here |
} |
else |
{ |
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms |
switch(ServoIndex) // map servo channels |
{ |
case 1: // Nick Compensation Servo |
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
break; |
case 2: // Roll Compensation Servo |
RemainingPulse += ServoRollValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
break; |
case 3: |
RemainingPulse += ((int16_t)Parameter_Servo3 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
case 4: |
RemainingPulse += ((int16_t)Parameter_Servo4 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
case 5: |
RemainingPulse += ((int16_t)Parameter_Servo5 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
default: // other servo channels |
RemainingPulse += 2 * PPM_in[ServoIndex]; // add channel value, factor of 2 because timer 1 increments 3.2µs |
break; |
} |
// range servo pulse width |
if(RemainingPulse > MAXSERVOPULSE) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit |
else if(RemainingPulse < MINSERVOPULSE) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit |
// substract stop pulse width |
RemainingPulse -= PPM_STOPPULSE; |
// accumulate time for correct sync gap |
ServoFrameTime += RemainingPulse; |
} |
} |
else // we had a high pulse |
{ |
TCCR2A |= (1<<COM2A0); // make a low pulse |
// set pulsewidth to stop pulse width |
RemainingPulse = PPM_STOPPULSE; |
// accumulate time for correct sync gap |
ServoFrameTime += RemainingPulse; |
if((ServoActive && SenderOkay) || ServoActive == 2) HEF4017Reset_OFF; // disable HEF4017 reset |
else HEF4017Reset_ON; |
ServoIndex++; |
if(ServoIndex > EE_Parameter.ServoNickRefresh+1) |
{ |
CalculateServoSignals = 1; |
ServoIndex = 0; // reset to the sync gap |
} |
} |
// set pulse output active |
PulseOutput = 1; |
} |
} // EOF PPM state machine |
// General pulse output generator |
if(RemainingPulse > (255 + IRS_RUNTIME)) |
{ |
OCR2A = 255; |
RemainingPulse -= 255; |
} |
else |
{ |
if(RemainingPulse > 255) // this is the 2nd last part |
{ |
if((RemainingPulse - 255) < IRS_RUNTIME) |
{ |
OCR2A = 255 - IRS_RUNTIME; |
RemainingPulse -= 255 - IRS_RUNTIME; |
} |
else // last part > ISR_RUNTIME |
{ |
OCR2A = 255; |
RemainingPulse -= 255; |
} |
} |
else // this is the last part |
{ |
OCR2A = RemainingPulse; |
RemainingPulse = 0; |
PulseOutput = 0; // trigger to stop pulse |
} |
} // EOF general pulse output generator |
} |
/branches/test_v2.12/V2.04a/timer0.h |
---|
0,0 → 1,25 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
#define HEF4017Reset_ON PORTC |= (1<<PORTC6) |
#define HEF4017Reset_OFF PORTC &= ~(1<<PORTC6) |
void Timer_Init(void); |
void TIMER2_Init(void); |
void Delay_ms(unsigned int); |
void Delay_ms_Mess(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
void CalculateServo(void); |
void CalcNickServoValue(void); |
extern volatile unsigned int CountMilliseconds; |
extern volatile unsigned char UpdateMotor; |
extern volatile unsigned int beeptime; |
extern volatile unsigned int cntKompass; |
extern unsigned int BeepMuster; |
extern volatile unsigned char BytegapSPI, ServoActive, CalculateServoSignals; |
extern volatile int16_t ServoNickValue; |
extern volatile int16_t ServoRollValue; |
extern signed int NickServoValue; |
extern unsigned char JustMK3MagConnected; |
/branches/test_v2.12/V2.04a/twimaster.c |
---|
0,0 → 1,482 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/twi.h> |
#include "eeprom.h" |
#include "twimaster.h" |
#include "fc.h" |
#include "analog.h" |
#include "uart.h" |
#include "timer0.h" |
volatile uint8_t twi_state = TWI_STATE_MOTOR_TX; |
volatile uint8_t dac_channel = 0; |
volatile uint8_t motor_write = 0; |
volatile uint8_t motor_read = 0; |
volatile uint8_t I2C_TransferActive = 0; |
uint8_t Max_I2C_Packets = 12; |
volatile uint16_t I2CTimeout = 100; |
uint8_t MissingMotor = 0; |
volatile uint8_t BLFlags = 0; |
MotorData_t Motor[MAX_MOTORS]; |
RedundantBl_t RedundantMotor[MAX_MOTORS]; |
// bit mask for witch BL the configuration should be sent |
volatile uint16_t BLConfig_WriteMask = 0; |
// bit mask for witch BL the configuration should be read |
volatile uint16_t BLConfig_ReadMask = 0; |
// buffer for BL Configuration |
BLConfig_t BLConfig; |
#define I2C_WriteByte(byte) {TWDR = byte; TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define I2C_ReceiveByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);} |
#define I2C_ReceiveLastByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define TWI_BASE_ADDRESS 0x52 |
/**************************************************/ |
/* Initialize I2C (TWI) */ |
/**************************************************/ |
void I2C_Init(char clear) |
{ |
uint8_t i; |
uint8_t sreg = SREG; |
cli(); |
// SDA is INPUT |
DDRC &= ~(1<<DDC1); |
// SCL is output |
DDRC |= (1<<DDC0); |
// pull up SDA |
PORTC |= (1<<PORTC0)|(1<<PORTC1); |
// TWI Status Register |
// prescaler 1 (TWPS1 = 0, TWPS0 = 0) |
TWSR &= ~((1<<TWPS1)|(1<<TWPS0)); |
// set TWI Bit Rate Register |
TWBR = ((F_CPU/SCL_CLOCK)-16)/2; |
twi_state = TWI_STATE_MOTOR_TX; |
motor_write = 0; |
motor_read = 0; |
if(clear) for(i=0; i < MAX_MOTORS; i++) |
{ |
Motor[i].Version = 0; |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
Motor[i].State = 0; |
Motor[i].ReadMode = BL_READMODE_STATUS; |
Motor[i].Current = 0; |
Motor[i].MaxPWM = 0; |
Motor[i].Temperature = 0; |
} |
sei(); |
SREG = sreg; |
} |
void I2C_Reset(void) |
{ |
// stop i2c bus |
I2C_Stop(TWI_STATE_MOTOR_TX); |
TWCR = (1<<TWINT); // reset to original state incl. interrupt flag reset |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
I2C_TransferActive = 0; |
I2C_Init(0); |
I2C_WriteByte(0); |
BLFlags |= BLFLAG_READ_VERSION; |
} |
/****************************************/ |
/* I2C ISR */ |
/****************************************/ |
ISR (TWI_vect) |
{ |
static uint8_t missing_motor = 0, motor_read_temperature = 0; |
static uint8_t *pBuff = 0; |
static uint8_t BuffLen = 0; |
static uint8_t max_packets = 0; |
switch (twi_state++) |
{ |
// Master Transmit |
case 0: // TWI_STATE_MOTOR_TX |
I2C_TransferActive = 1; |
// skip motor if not used in mixer |
while((Mixer.Motor[motor_write][MIX_GAS] <= 0) && (motor_write < MAX_MOTORS)) motor_write++; |
motor_write %= MAX_MOTORS; |
if(++max_packets > Max_I2C_Packets) // writing finished, read now |
{ |
max_packets = 0; |
BLConfig_WriteMask = 0; // reset configuration bitmask |
//motor_write = 0; // reset motor write counter for next cycle |
twi_state = TWI_STATE_MOTOR_RX; |
I2C_WriteByte(TWI_BASE_ADDRESS + TW_READ + (motor_read<<1) ); // select slave address in rx mode |
} |
else I2C_WriteByte(TWI_BASE_ADDRESS + TW_WRITE + (motor_write<<1) ); // select slave address in tx mode |
break; |
case 1: // Send Data to Slave |
I2C_WriteByte(Motor[motor_write].SetPoint); // transmit setpoint |
// if old version has been detected |
if(!(Motor[motor_write].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) |
{ |
twi_state = 4; //jump over sending more data |
} |
// the new version has been detected |
else if(!( (Motor[motor_write].SetPointLowerBits && (RequiredMotors < 7)) || BLConfig_WriteMask || BLConfig_ReadMask ) ) |
{ // or LowerBits are zero and no BlConfig should be sent (saves round trip time) |
twi_state = 4; //jump over sending more data |
} |
break; |
case 2: // lower bits of setpoint (higher resolution) |
if ((0x0001<<motor_write) & BLConfig_ReadMask) |
{ |
Motor[motor_write].ReadMode = BL_READMODE_CONFIG; // configuration request |
} |
else |
{ |
Motor[motor_write].ReadMode = BL_READMODE_STATUS; // normal status request |
} |
// send read mode and the lower bits of setpoint |
I2C_WriteByte((Motor[motor_write].ReadMode<<3)|(Motor[motor_write].SetPointLowerBits & 0x07)); |
// configuration tranmission request? |
if((0x0001<<motor_write) & BLConfig_WriteMask) |
{ // redirect tx pointer to configuration data |
pBuff = (uint8_t*)&BLConfig; // select config for motor |
BuffLen = sizeof(BLConfig_t); |
} |
else |
{ // jump to end of transmission for that motor |
twi_state = 4; |
} |
break; |
case 3: // send configuration |
I2C_WriteByte(*pBuff); |
pBuff++; |
if(--BuffLen > 0) twi_state = 3; // if there are some bytes left |
break; |
case 4: // repeat case 0-4 for all motors |
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received |
{ |
if(!missing_motor) missing_motor = motor_write + 1; |
if((Motor[motor_write].State & MOTOR_STATE_ERROR_MASK) < MOTOR_STATE_ERROR_MASK) Motor[motor_write].State++; // increment error counter and handle overflow |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2CTimeout = 10; |
motor_write++; // next motor |
I2C_Start(TWI_STATE_MOTOR_TX); // Repeated start -> switch slave or switch Master Transmit -> Master Receive |
break; |
// Master Receive Data |
case 5: // TWI_STATE_MOTOR_RX |
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted but no ACK received |
{ // no response from the addressed slave received |
Motor[motor_read].State &= ~MOTOR_STATE_PRESENT_MASK; // clear present bit |
if(++motor_read >= MAX_MOTORS) |
{ // all motors read |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
} |
else |
{ // motor successfully addressed |
Motor[motor_read].State |= MOTOR_STATE_PRESENT_MASK; // set present bit |
if(Motor[motor_read].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) |
{ |
// new BL found |
switch(Motor[motor_read].ReadMode) |
{ |
case BL_READMODE_CONFIG: |
pBuff = (uint8_t*)&BLConfig; |
BuffLen = sizeof(BLConfig_t); |
Motor[motor_read].ReadMode = BL_READMODE_STATUS; // only once |
break; |
case BL_READMODE_STATUS: |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if(motor_read == motor_read_temperature) BuffLen = 3; // read Current, MaxPwm & Temp |
else BuffLen = 1;// read Current only |
break; |
} |
} |
else // old BL version |
{ |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if((BLFlags & BLFLAG_READ_VERSION) || (motor_read == motor_read_temperature)) BuffLen = 2; // Current & MaxPwm |
else BuffLen = 1; // read Current only |
} |
if(BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else |
{ |
I2C_ReceiveByte(); // read next byte |
} |
} |
MissingMotor = missing_motor; |
missing_motor = 0; |
break; |
case 6: // receive bytes |
*pBuff = TWDR; |
pBuff++; |
BuffLen--; |
if(BuffLen>1) |
{ |
I2C_ReceiveByte(); // read next byte |
} |
else if (BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else // nothing left |
{ |
if(BLFlags & BLFLAG_READ_VERSION) |
{ |
// if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN) && ((Motor[motor_read].MaxPWM & 252) == 248)) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK; |
// else Motor[motor_read].Version = 0; |
if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN)) |
{ |
if((Motor[motor_read].MaxPWM & 252) == 248) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK; |
else Motor[motor_read].Version = 0; |
if(Motor[motor_read].MaxPWM == 248) Motor[motor_read].Version |= (MOTOR_STATE_FAST_MODE | MOTOR_STATE_BL30); |
else |
if(Motor[motor_read].MaxPWM == 249) Motor[motor_read].Version |= MOTOR_STATE_BL30; |
} |
} |
if(++motor_read >= MAX_MOTORS) |
{ |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_TransferActive = 0; |
return; |
} |
twi_state = 6; // if there are some bytes left |
break; |
/* |
// writing Gyro-Offsets |
case 18: |
I2C_WriteByte(0x98); // Address the DAC |
break; |
case 19: |
I2C_WriteByte(0x10 + (dac_channel * 2)); // Select DAC Channel (0x10 = A, 0x12 = B, 0x14 = C) |
break; |
case 20: |
switch(dac_channel) |
{ |
case 0: |
I2C_WriteByte(AnalogOffsetNick); // 1st byte for Channel A |
break; |
case 1: |
I2C_WriteByte(AnalogOffsetRoll); // 1st byte for Channel B |
break; |
case 2: |
I2C_WriteByte(AnalogOffsetGier); // 1st byte for Channel C |
break; |
} |
break; |
case 21: |
I2C_WriteByte(0x80); // 2nd byte for all channels is 0x80 |
break; |
case 22: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
I2CTimeout = 10; |
// repeat case 18...22 until all DAC Channels are updated |
if(dac_channel < 2) |
{ |
dac_channel ++; // jump to next channel |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); // start transmission for next channel |
} |
else |
{ |
dac_channel = 0; // reset dac channel counter |
BLFlags |= BLFLAG_TX_COMPLETE; |
} |
break; |
*/ |
default: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2CTimeout = 10; |
motor_write = 0; |
motor_read = 0; |
I2C_TransferActive = 0; |
break; |
} |
} |
uint8_t I2C_WriteBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor) |
{ |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
} |
// check BL configuration to send |
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
timer = SetDelay(2000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
if(!motor) // 0 means all |
{ |
BLConfig_WriteMask = 0xFF; // all motors at once with the same configuration |
} |
else //only one specific motor |
{ |
BLConfig_WriteMask = 0x0001<<(motor-1); |
} |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if((0x0001<<i) & BLConfig_WriteMask) |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
motor_write = 0; |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
}while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent |
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); |
return(BLCONFIG_SUCCESS); |
} |
uint8_t I2C_ReadBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor == 0) return (BLCONFIG_ERR_READ_NOT_POSSIBLE); |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
timer = SetDelay(2000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
BLConfig_ReadMask = 0x0001<<(motor-1); |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if((0x0001<<i) & BLConfig_ReadMask) |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
motor_read = 0; |
BLConfig.Revision = 0; // bad revision |
BLConfig.crc = 0; // bad checksum |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
}while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors |
// validate result |
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
return(BLCONFIG_SUCCESS); |
} |
/branches/test_v2.12/V2.04a/twimaster.h |
---|
0,0 → 1,119 |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
+ |
+#include <inttypes.h> |
+ |
+#define TWI_STATE_MOTOR_TX 0 |
+#define TWI_STATE_MOTOR_RX 5 |
+//#define TWI_STATE_GYRO_OFFSET_TX 18 |
+ |
+extern volatile uint8_t twi_state; |
+extern volatile uint8_t motor_write; |
+extern volatile uint8_t motor_read; |
+extern volatile uint8_t I2C_TransferActive; |
+extern uint8_t Max_I2C_Packets; |
+extern uint8_t MissingMotor; |
+ |
+#define MAX_MOTORS 12 |
+#define MOTOR_STATE_PRESENT_MASK 0x80 |
+#define MOTOR_STATE_ERROR_MASK 0x7F |
+ |
+//Motor[x].Version |
+#define MOTOR_STATE_NEW_PROTOCOL_MASK 0x01 |
+#define MOTOR_STATE_FAST_MODE 0x02 |
+#define MOTOR_STATE_BL30 0x04 // extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
+ |
+#define BLFLAG_TX_COMPLETE 0x01 |
+#define BLFLAG_READ_VERSION 0x02 |
+ |
+extern volatile uint8_t BLFlags; |
+ |
+#define BL_READMODE_STATUS 0 |
+#define BL_READMODE_CONFIG 16 |
+ |
+typedef struct |
+{ |
+ uint8_t Version; // the version of the BL (0 = old) |
+ uint8_t SetPoint; // written by attitude controller |
+ uint8_t SetPointLowerBits; // for higher Resolution of new BLs |
+ uint8_t State; // 7 bit for I2C error counter, highest bit indicates if motor is present |
+ uint8_t ReadMode; // select data to read |
+ // the following bytes must be exactly in that order! |
+ uint8_t Current; // in 0.1 A steps, read back from BL |
+ uint8_t MaxPWM; // read back from BL -> is less than 255 if BL is in current limit, not running (250) or starting (40) |
+ int8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in °C |
+} __attribute__((packed)) MotorData_t; |
+ |
+extern MotorData_t Motor[MAX_MOTORS]; |
+ |
+// BitSate |
+#define BL_BIT_STATE_I2C_OK 0x01 |
+#define BL_BIT_STATE_I2C_VALUE 0x02 |
+#define BL_BIT_STATE_I2C_BAD 0x04 |
+#define BL_BIT_STATE_PPM_OK 0x08 |
+#define BL_BIT_STATE_MOTOR_RUN 0x10 |
+ |
+typedef struct |
+{ |
+ unsigned char BitSate; |
+ unsigned char Current; |
+ unsigned char State; |
+ unsigned char TemperatureInDeg; |
+ unsigned char Voltage80; |
+} __attribute__((packed)) RedundantBl_t; |
+extern RedundantBl_t RedundantMotor[MAX_MOTORS]; |
+ |
+#define BLCONFIG_REVISION 2 |
+ |
+#define MASK_SET_PWM_SCALING 0x01 |
+#define MASK_SET_CURRENT_LIMIT 0x02 |
+#define MASK_SET_TEMP_LIMIT 0x04 |
+#define MASK_SET_CURRENT_SCALING 0x08 |
+#define MASK_SET_BITCONFIG 0x10 |
+#define MASK_SET_STARTPWM 0x20 |
+#define MASK_SET_DEFAULT_PARAMS 0x40 |
+#define MASK_SET_SAVE_EEPROM 0x80 |
+ |
+#define BITCONF_REVERSE_ROTATION 0x01 |
+#define BITCONF_STARTGAS1 0x02 |
+#define BITCONF_STARTGAS2 0x04 |
+#define BITCONF_STARTGAS3 0x08 |
+#define BITCONF_RES4 0x10 |
+#define BITCONF_RES5 0x20 |
+#define BITCONF_RES6 0x40 |
+#define BITCONF_RES7 0x80 |
+ |
+typedef struct |
+{ |
+ uint8_t Revision; // must be BL_REVISION |
+ uint8_t SetMask; // settings mask |
+ uint8_t PwmScaling; // maximum value of control pwm, acts like a thrust limit |
+ uint8_t CurrentLimit; // current limit in A |
+ uint8_t TempLimit; // in °C |
+ uint8_t CurrentScaling; // scaling factor for current measurement |
+ uint8_t BitConfig; // see defines above |
+ uint8_t crc; // checksum |
+} __attribute__((packed)) BLConfig_t; |
+ |
+extern BLConfig_t BLConfig; |
+ |
+extern volatile uint16_t I2CTimeout; |
+ |
+void I2C_Init(char); // Initialize I2C |
+#define I2C_Start(start_state) {twi_state = start_state; BLFlags &= ~BLFLAG_TX_COMPLETE; TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);} |
+#define I2C_Stop(start_state) {twi_state = start_state; TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);} |
+void I2C_Reset(void); // Reset I2C |
+ |
+#define BLCONFIG_SUCCESS 0 |
+#define BLCONFIG_ERR_MOTOR_RUNNING 1 |
+#define BLCONFIG_ERR_MOTOR_NOT_EXIST 2 |
+#define BLCONFIG_ERR_HW_NOT_COMPATIBLE 3 |
+#define BLCONFIG_ERR_SW_NOT_COMPATIBLE 4 |
+#define BLCONFIG_ERR_CHECKSUM 5 |
+#define BLCONFIG_ERR_READ_NOT_POSSIBLE 6 |
+ |
+uint8_t I2C_WriteBLConfig(uint8_t motor); |
+uint8_t I2C_ReadBLConfig(uint8_t motor); |
+ |
+#endif |
/branches/test_v2.12/V2.04a/uart.c |
---|
0,0 → 1,846 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <stdarg.h> |
#include <string.h> |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "uart.h" |
#include "libfc.h" |
#include "eeprom.h" |
#define FC_ADDRESS 1 |
#define NC_ADDRESS 2 |
#define MK3MAG_ADDRESS 3 |
#define BL_CTRL_ADDRESS 5 |
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds |
#define MAX_SENDE_BUFF 220 |
#define MAX_EMPFANGS_BUFF 220 |
#define BLPARAM_REVISION 1 |
#define MASK_SET_PWM_SCALING 0x01 |
#define MASK_SET_CURRENT_LIMIT 0x02 |
#define MASK_SET_TEMP_LIMIT 0x04 |
#define MASK_SET_CURRENT_SCALING 0x08 |
#define MASK_SET_BITCONFIG 0x10 |
#define MASK_RESET_CAPCOUNTER 0x20 |
#define MASK_SET_DEFAULT_PARAMS 0x40 |
#define MASK_SET_SAVE_EEPROM 0x80 |
unsigned char GetExternalControl = 0,DebugDisplayAnforderung1 = 0, DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0, GetPPMChannelAnforderung = 0; |
unsigned char DisplayLine = 0; |
unsigned volatile char SioTmp = 0; |
unsigned volatile char NeuerDatensatzEmpfangen = 0; |
unsigned volatile char NeueKoordinateEmpfangen = 0; |
unsigned volatile char UebertragungAbgeschlossen = 1; |
unsigned volatile char CntCrcError = 0; |
unsigned volatile char AnzahlEmpfangsBytes = 0; |
unsigned volatile char TxdBuffer[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
unsigned char *pRxData = 0; |
unsigned char RxDataLen = 0; |
unsigned volatile char PC_DebugTimeout = 0; |
unsigned volatile char PC_MotortestActive = 0; |
unsigned char DebugTextAnforderung = 255; |
unsigned char PcZugriff = 100; |
unsigned char MotorTest[16]; |
unsigned char MeineSlaveAdresse = 1; // Flight-Ctrl |
unsigned char ConfirmFrame; |
struct str_DebugOut DebugOut; |
struct str_ExternControl ExternControl; |
struct str_VersionInfo VersionInfo; |
struct str_WinkelOut WinkelOut; |
struct str_Data3D Data3D; |
int Display_Timer, Debug_Timer,Kompass_Timer,Timer3D; |
unsigned int DebugDataIntervall = 0, Intervall3D = 0, Display_Interval = 0; |
unsigned int AboTimeOut = 0; |
unsigned volatile char ReceiverUpdateModeActive = 0; // 1 = Update 2 = JetiBox-Simulation |
const unsigned char ANALOG_TEXT[32][16] PROGMEM = |
{ |
//1234567890123456 |
"AngleNick ", //0 |
"AngleRoll ", |
"AccNick ", |
"AccRoll ", |
"YawGyro ", |
"Altitude [0.1m] ", //5 |
"AccZ ", |
"Gas ", |
"Compass Value ", |
"Voltage [0.1V] ", |
"Receiver Level ", //10 |
"Gyro Compass ", |
"Motor 1 ", |
"Motor 2 ", |
"Motor 3 ", |
"Motor 4 ", //15 |
"16 ", |
"17 ", |
"18 ", |
"19 ", |
"Servo ", //20 |
"Hovergas ", |
"Current [0.1A] ", |
"Capacity [mAh] ", |
"Height Setpoint ", |
"25 ", //25 |
"26 ", //"26 CPU OverLoad ", |
"Compass Setpoint", |
"I2C-Error ", |
"BL Limit ", |
"GPS_Nick ", //30 |
"GPS_Roll " |
}; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
ISR(USART0_TX_vect) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = TxdBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR0 = tmp_tx; |
} |
else ptr = 0; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
ISR(USART0_RX_vect) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
if (ReceiverUpdateModeActive == 1) { UDR1 = UDR0; return; } // 1 = Update |
if (ReceiverUpdateModeActive == 2) { RxdBuffer[0] = UDR0; return; } // 2 = JetiBox-Simulation |
SioTmp = UDR0; |
if(buf_ptr >= MAX_SENDE_BUFF) UartState = 0; |
if(SioTmp == '\r' && UartState == 2) |
{ |
UartState = 0; |
crc -= RxdBuffer[buf_ptr-2]; |
crc -= RxdBuffer[buf_ptr-1]; |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;}; |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
{ |
NeuerDatensatzEmpfangen = 1; |
AnzahlEmpfangsBytes = buf_ptr + 1; |
RxdBuffer[buf_ptr] = '\r'; |
if(RxdBuffer[2] == 'R' && !MotorenEin) |
{ |
LcdClear(); |
wdt_enable(WDTO_250MS); // Reset-Commando |
ServoActive = 0; |
} |
} |
} |
else |
switch(UartState) |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc = SioTmp; |
break; |
case 1: // Adresse auswerten |
UartState++; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc += SioTmp; |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++; |
else UartState = 0; |
crc += SioTmp; |
break; |
default: |
UartState = 0; |
break; |
} |
} |
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
{ |
tmpCRC += TxdBuffer[i]; |
} |
// if(i > MAX_SENDE_BUFF - 3) tmpCRC += 11; |
tmpCRC %= 4096; |
TxdBuffer[i++] = '=' + tmpCRC / 64; |
TxdBuffer[i++] = '=' + tmpCRC % 64; |
TxdBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR0 = TxdBuffer[0]; |
//if(DebugOut.Analog[] < i) DebugOut.Analog[] = i; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char address, unsigned char BufferAnzahl, ...) //unsigned char *snd, unsigned char len) |
{ |
va_list ap; |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
unsigned char *snd = 0; |
int len = 0; |
TxdBuffer[pt++] = '#'; // Startzeichen |
TxdBuffer[pt++] = 'a' + address; // Adresse (a=0; b=1,...) |
TxdBuffer[pt++] = cmd; // Commando |
va_start(ap, BufferAnzahl); |
if(BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
while(len) |
{ |
if(len) |
{ |
a = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else a = 0; |
if(len) |
{ |
b = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else b = 0; |
if(len) |
{ |
c = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else c = 0; |
TxdBuffer[pt++] = '=' + (a >> 2); |
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
TxdBuffer[pt++] = '=' + ( c & 0x3f); |
} |
va_end(ap); |
AddCRC(pt); |
} |
// -------------------------------------------------------------------------- |
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden. |
{ |
unsigned char a,b,c,d; |
unsigned char x,y,z; |
unsigned char ptrIn = 3; // start at begin of data block |
unsigned char ptrOut = 3; |
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab. |
while(len) |
{ |
a = RxdBuffer[ptrIn++] - '='; |
b = RxdBuffer[ptrIn++] - '='; |
c = RxdBuffer[ptrIn++] - '='; |
d = RxdBuffer[ptrIn++] - '='; |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if(len--) RxdBuffer[ptrOut++] = x; else break; |
if(len--) RxdBuffer[ptrOut++] = y; else break; |
if(len--) RxdBuffer[ptrOut++] = z; else break; |
} |
pRxData = (unsigned char*)&RxdBuffer[3]; // decodierte Daten beginnen beim 4. Byte |
RxDataLen = ptrOut - 3; // wie viele Bytes wurden dekodiert? |
} |
// -------------------------------------------------------------------------- |
void BearbeiteRxDaten(void) |
{ |
if(!NeuerDatensatzEmpfangen) return; |
unsigned char tempchar1, tempchar2; |
Decode64(); // dekodiere datenblock im Empfangsbuffer |
switch(RxdBuffer[1]-'a') // check for Slave Address |
{ |
case FC_ADDRESS: // FC special commands |
switch(RxdBuffer[2]) |
{ |
case 'K':// Kompasswert |
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue)); |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
break; |
case 't':// Motortest |
if(AnzahlEmpfangsBytes > 20) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest)); |
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4); |
PC_MotortestActive = 240; |
//while(!UebertragungAbgeschlossen); |
//SendOutData('T', MeineSlaveAdresse, 0); |
PcZugriff = 255; |
break; |
case 'n':// "Get Mixer |
while(!UebertragungAbgeschlossen); |
SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer, sizeof(Mixer) - 1); |
Debug("Mixer lesen"); |
break; |
case 'm':// "Write Mixer |
if(pRxData[0] == EEMIXER_REVISION) |
{ |
memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1); |
MixerTable_WriteToEEProm(); |
tempchar1 = 1; |
VersionInfo.HardwareError[1] &= ~FC_ERROR1_MIXER; |
} |
else |
{ |
tempchar1 = 0; |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
break; |
case 'p': // get PPM Channels |
GetPPMChannelAnforderung = 1; |
PcZugriff = 255; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
if(!MotorenEin) |
{ |
if((10 <= pRxData[0]) && (pRxData[0] < 20)) |
{ |
tempchar1 = pRxData[0] - 10; |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
SetDefaultParameter(tempchar1, 1); |
} |
else if((20 <= pRxData[0]) && (pRxData[0] < 30)) |
{ |
tempchar1 = pRxData[0] - 20; |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
SetDefaultParameter(tempchar1, 0); |
} |
else |
{ |
tempchar1 = pRxData[0]; |
if(tempchar1 == 0xFF) |
{ |
tempchar1 = GetActiveParamSet(); |
} |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
// load requested parameter set |
ParamSet_ReadFromEEProm(tempchar1); |
} |
LipoDetection(0); |
} else tempchar1 = GetActiveParamSet(); |
while(!UebertragungAbgeschlossen); |
SendOutData('Q', FC_ADDRESS, 2, &tempchar1, sizeof(tempchar1), (unsigned char *) &EE_Parameter, sizeof(EE_Parameter) - 1); |
Debug("Lese Setting %d", tempchar1); |
break; |
case 's': // Parametersatz speichern |
if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EEPARAM_REVISION) && MotorenEin == 0) // check for setting to be in range |
{ |
memcpy(&EE_Parameter, (uint8_t*)&pRxData[1], sizeof(EE_Parameter) - 1); |
ParamSet_WriteToEEProm(pRxData[0]); |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
tempchar1 = GetActiveParamSet(); |
} |
else |
{ |
tempchar1 = 0; // mark in response an invlid setting |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('S', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
if(!MotorenEin) |
{ |
Piep(tempchar1,110); |
LipoDetection(0); |
} |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
break; |
case 'f': // auf anderen Parametersatz umschalten |
if(MotorenEin) break; |
if((1 <= pRxData[0]) && (pRxData[0] <= 5)) ParamSet_ReadFromEEProm(pRxData[0]); |
tempchar1 = GetActiveParamSet(); |
while(!UebertragungAbgeschlossen); |
SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
if(!MotorenEin) |
{ |
Piep(tempchar1,110); |
LipoDetection(0); |
} |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
break; |
case 'y':// serial Potis |
for(tempchar1 = 0; tempchar1 < 12; tempchar1++) PPM_in[SERIAL_POTI_START + tempchar1] = (signed char) pRxData[tempchar1]; |
break; |
case 'u': // request BL parameter |
Debug("Reading BL %d", pRxData[0]); |
// try to read BL configuration |
tempchar2 = I2C_ReadBLConfig(pRxData[0]); |
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1; |
else tempchar1 = 0; |
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent |
SendOutData('U', FC_ADDRESS, 4, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2), &pRxData[0], 1, &BLConfig, sizeof(BLConfig_t)); |
break; |
case 'w': // write BL parameter |
Debug("Writing BL %d", pRxData[0]); |
if(RxDataLen >= 1+sizeof(BLConfig_t)) |
{ |
memcpy(&BLConfig, (uint8_t*)(&pRxData[1]), sizeof(BLConfig_t)); |
tempchar2 = I2C_WriteBLConfig(pRxData[0]); |
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1; |
else tempchar1 = 0; // indicate error |
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent |
SendOutData('W', FC_ADDRESS,2, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2)); |
} |
break; |
case 'j': |
if(MotorenEin) break; |
tempchar1 = LIBFC_GetCPUType(); |
if((tempchar1 == CPU_ATMEGA644P) || (tempchar1 == CPU_ATMEGA1284P)) |
{ |
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 38400L) - 1); |
cli(); |
// UART0 & UART1 disable RX and TX-Interrupt |
UCSR0B &= ~((1 << RXCIE0)|(1 << TXCIE0)); |
UCSR1B &= ~((1 << RXCIE1)|(1 << TXCIE1)); |
// UART0 & UART1 disable receiver and transmitter |
UCSR0B &= ~((1 << TXEN0) | (1 << RXEN0)); |
UCSR1B &= ~((1 << TXEN1) | (1 << RXEN1)); |
// UART0 & UART1 flush receive buffer explicit |
while ( UCSR1A & (1<<RXC1) ) UDR1; |
while ( UCSR0A & (1<<RXC0) ) UDR0; |
if(pRxData[0] == 1) ReceiverUpdateModeActive = 2; |
else |
{ // Jeti or HoTT update |
//#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(pRxData[0] == 100) ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 19200L) - 1); // HoTT |
//#endif |
ReceiverUpdateModeActive = 1; |
// UART0 & UART1 set baudrate |
UBRR1H = (uint8_t)(ubrr>>8); |
UBRR1L = (uint8_t)ubrr; |
UBRR0H = UBRR1H; |
UBRR0L = UBRR1L; |
// UART1 no parity |
UCSR1C &= ~(1 << UPM11); |
UCSR1C &= ~(1 << UPM10); |
// UART1 8-bit |
UCSR1B &= ~(1 << UCSZ12); |
UCSR1C |= (1 << UCSZ11); |
UCSR1C |= (1 << UCSZ10); |
} |
// UART0 & UART1 1 stop bit |
UCSR1C &= ~(1 << USBS1); |
UCSR0C &= ~(1 << USBS0); |
// UART1 clear 9th bit |
UCSR1B &= ~(1<<TXB81); |
// enable receiver and transmitter for UART0 and UART1 |
UCSR0B |= (1 << TXEN0) | (1 << RXEN0); |
UCSR1B |= (1 << TXEN1) | (1 << RXEN1); |
// enable RX-Interrupt for UART0 and UART1 |
UCSR0B |= (1 << RXCIE0); |
UCSR1B |= (1 << RXCIE1); |
// disable other Interrupts |
TIMSK0 = 0; |
TIMSK1 = 0; |
TIMSK2 = 0; |
sei(); |
} |
break; |
} // case FC_ADDRESS: |
default: // any Slave Address |
switch(RxdBuffer[2]) |
{ |
static unsigned int clear_I; |
case '?':// Serielle Antwort eines BL-Reglers |
tempchar1 = RxdBuffer[1] - ('a'+11); |
if(tempchar1 >= MAX_MOTORS) break; |
memcpy((unsigned char *)&RedundantMotor[tempchar1], (unsigned char *)pRxData, sizeof(RedundantBl_t)); |
if(RedundantMotor[tempchar1].BitSate & BL_BIT_STATE_I2C_OK && clear_I) clear_I--; |
if(RedundantMotor[tempchar1].BitSate & BL_BIT_STATE_I2C_BAD) |
{ |
if(clear_I == 0) |
{ |
PORTB |= 0x02; |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
} |
clear_I = 500; |
} |
else PORTB &=~0x02; |
//DebugOut.Analog[16] = RedundantMotor[tempchar1].BitSate; |
//DebugOut.Analog[17]++; |
//DebugOut.Analog[18] = tempchar1; |
break; |
// 't' comand placed here only for compatibility to BL |
case 't':// Motortest |
if(AnzahlEmpfangsBytes >= sizeof(MotorTest)) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest)); |
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4); |
while(!UebertragungAbgeschlossen); |
SendOutData('T', MeineSlaveAdresse, 0); |
PC_MotortestActive = 250; |
PcZugriff = 255; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
// 'K' comand placed here only for compatibility to old MK3MAG software, that does not send the right Slave Address |
case 'K':// Kompasswert |
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue)); |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
break; |
case 'a':// Texte der Analogwerte |
DebugTextAnforderung = pRxData[0]; |
if (DebugTextAnforderung > 31) DebugTextAnforderung = 31; |
PcZugriff = 255; |
break; |
case 'b': |
memcpy((unsigned char *)&ExternControl, (unsigned char *)pRxData, sizeof(ExternControl)); |
ConfirmFrame = ExternControl.Frame; |
PcZugriff = 255; |
break; |
case 'c': // Poll the 3D-Data |
if(!Intervall3D) { if(pRxData[0]) Timer3D = SetDelay(pRxData[0] * 10);} |
Intervall3D = pRxData[0] * 10; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
case 'd': // Poll the debug data |
PcZugriff = 255; |
DebugDataIntervall = (unsigned int)pRxData[0] * 10; |
if(DebugDataIntervall > 0) DebugDataAnforderung = 1; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
case 'h':// x-1 Displayzeilen |
PcZugriff = 255; |
if((pRxData[0] & 0x80) == 0x00) // old format |
{ |
DisplayLine = 2; |
Display_Interval = 0; |
} |
else // new format |
{ |
RemoteKeys |= ~pRxData[0]; |
Display_Interval = (unsigned int)pRxData[1] * 10; |
DisplayLine = 4; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
} |
DebugDisplayAnforderung = 1; |
break; |
case 'l':// x-1 Displayzeilen |
PcZugriff = 255; |
MenuePunkt = pRxData[0]; |
DebugDisplayAnforderung1 = 1; |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
GetVersionAnforderung = 1; |
break; |
case 'g':// |
GetExternalControl = 1; |
break; |
default: |
//unsupported command received |
break; |
} |
break; // default: |
} |
NeuerDatensatzEmpfangen = 0; |
pRxData = 0; |
RxDataLen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
void uart_putchar (char c) |
//############################################################################ |
{ |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(UCSR0A, UDRE0); |
//Ausgabe des Zeichens |
UDR0 = c; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
unsigned int ubrr = (unsigned int) ((unsigned long) F_CPU/(8 * USART0_BAUD) - 1); |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCSR0B = (1 << TXEN0) | (1 << RXEN0); |
// UART Double Speed (U2X) |
UCSR0A |= (1 << U2X0); |
// RX-Interrupt Freigabe |
UCSR0B |= (1 << RXCIE0); |
// TX-Interrupt Freigabe |
UCSR0B |= (1 << TXCIE0); |
// USART0 Baud Rate Register |
// set clock divider |
UBRR0H = (uint8_t)(ubrr >> 8); |
UBRR0L = (uint8_t)ubrr; |
Debug_Timer = SetDelay(DebugDataIntervall); |
Kompass_Timer = SetDelay(220); |
VersionInfo.SWMajor = VERSION_MAJOR; |
VersionInfo.SWMinor = VERSION_MINOR; |
VersionInfo.SWPatch = VERSION_PATCH; |
VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR; |
VersionInfo.reserved1 = 0; |
VersionInfo.reserved2 = 0; |
VersionInfo.HWMajor = PlatinenVersion; |
pRxData = 0; |
RxDataLen = 0; |
} |
//--------------------------------------------------------------------------------------------- |
void DatenUebertragung(void) |
{ |
if(!UebertragungAbgeschlossen) return; |
if(CheckDelay(AboTimeOut)) |
{ |
Display_Interval = 0; |
DebugDataIntervall = 0; |
Intervall3D = 0; |
} |
if(((Display_Interval>0 && CheckDelay(Display_Timer)) || DebugDisplayAnforderung) && UebertragungAbgeschlossen) |
{ |
if(DisplayLine > 3)// new format |
{ |
Menu(); |
SendOutData('H', FC_ADDRESS, 1, (uint8_t *)DisplayBuff, 80); |
} |
else // old format |
{ |
LCD_printfxy(0,0,"!!! INCOMPATIBLE !!!"); |
SendOutData('H', FC_ADDRESS, 2, &DisplayLine, sizeof(DisplayLine), (uint8_t *)DisplayBuff, 20); |
if(DisplayLine++ > 3) DisplayLine = 0; |
} |
Display_Timer = SetDelay(Display_Interval); |
DebugDisplayAnforderung = 0; |
} |
if(DebugDisplayAnforderung1 && UebertragungAbgeschlossen) |
{ |
Menu(); |
SendOutData('L', FC_ADDRESS, 3, &MenuePunkt, sizeof(MenuePunkt), &MaxMenue, sizeof(MaxMenue), DisplayBuff, sizeof(DisplayBuff)); |
DebugDisplayAnforderung1 = 0; |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &VersionInfo, sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
Debug_OK("Version gesendet"); |
} |
if(GetExternalControl && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
{ |
SendOutData('G',MeineSlaveAdresse, 1, (unsigned char *) &ExternControl, sizeof(ExternControl)); |
GetExternalControl = 0; |
} |
if(((DebugDataIntervall>0 && CheckDelay(Debug_Timer)) || DebugDataAnforderung) && UebertragungAbgeschlossen) |
{ |
CopyDebugValues(); |
SendOutData('D', FC_ADDRESS, 1, (unsigned char *) &DebugOut,sizeof(DebugOut)); |
DebugDataAnforderung = 0; |
if(DebugDataIntervall>0) Debug_Timer = SetDelay(DebugDataIntervall); |
} |
if(Intervall3D > 0 && CheckDelay(Timer3D) && UebertragungAbgeschlossen) |
{ |
Data3D.Winkel[0] = ToNaviCtrl.IntegralNick;//(int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
Data3D.Winkel[1] = ToNaviCtrl.IntegralRoll;//(int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
Data3D.Winkel[2] = (int) ((10 * ErsatzKompass) / GIER_GRAD_FAKTOR); |
Data3D.Centroid[0] = SummeNick >> 9; |
Data3D.Centroid[1] = SummeRoll >> 9; |
Data3D.Centroid[2] = Mess_Integral_Gier >> 9; |
SendOutData('C', FC_ADDRESS, 1, (unsigned char *) &Data3D,sizeof(Data3D)); |
Timer3D = SetDelay(Intervall3D); |
} |
if(DebugTextAnforderung != 255) // Texte für die Analogdaten |
{ |
unsigned char label[16]; // local sram buffer |
memcpy_P(label, ANALOG_TEXT[DebugTextAnforderung], 16); // read lable from flash to sra |
SendOutData('A', FC_ADDRESS, 2, (unsigned char *)&DebugTextAnforderung, sizeof(DebugTextAnforderung),label, 16); |
DebugTextAnforderung = 255; |
} |
if(ConfirmFrame && UebertragungAbgeschlossen) // Datensatz bestätigen |
{ |
SendOutData('B', FC_ADDRESS, 1, (uint8_t*)&ConfirmFrame, sizeof(ConfirmFrame)); |
ConfirmFrame = 0; |
} |
if(GetPPMChannelAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('P', FC_ADDRESS, 1, (unsigned char *) &PPM_in, sizeof(PPM_in)); |
GetPPMChannelAnforderung = 0; |
} |
#ifndef REDUNDANT_FC_SLAVE |
if((CheckDelay(Kompass_Timer)) && UebertragungAbgeschlossen) |
{ |
if(!NaviDataOkay) // no external compass needed |
{ |
WinkelOut.Winkel[0] = ToNaviCtrl.IntegralNick;//(int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
WinkelOut.Winkel[1] = ToNaviCtrl.IntegralRoll;//(int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
WinkelOut.UserParameter[0] = Parameter_UserParam1; |
WinkelOut.UserParameter[1] = Parameter_UserParam2; |
SendOutData('k', MK3MAG_ADDRESS, 1, (unsigned char *) &WinkelOut,sizeof(WinkelOut)); |
} |
if(WinkelOut.CalcState > 4) WinkelOut.CalcState = 6; // wird dann in SPI auf Null gesetzt |
if(JustMK3MagConnected) Kompass_Timer = SetDelay(99); |
else Kompass_Timer = SetDelay(999); |
} |
#endif |
#ifdef REDUNDANT_FC_SLAVE |
if(UebertragungAbgeschlossen || MotorenEin) |
{ |
static unsigned char who; |
unsigned char SendRedundantMotor[MAX_MOTORS], i; |
who = (who+1) % RequiredMotors; |
for(i=0; i<RequiredMotors; i++) |
{ |
SendRedundantMotor[0] = who+1; |
if(PC_MotortestActive) SendRedundantMotor[0] |= 0x80; |
SendRedundantMotor[i+1] = Motor[i].SetPoint; |
} |
SendOutData('!', FC_ADDRESS, 1, (unsigned char *) &SendRedundantMotor, RequiredMotors+1); |
} |
#endif |
#ifdef DEBUG // only include functions if DEBUG is defined |
if(SendDebugOutput && UebertragungAbgeschlossen) |
{ |
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug)); |
SendDebugOutput = 0; |
} |
#endif |
} |
/branches/test_v2.12/V2.04a/uart.h |
---|
0,0 → 1,117 |
#ifndef _UART_H |
#define _UART_H |
#define printf_P(format, args...) _printf_P(&uart_putchar, format , ## args) |
#define printf(format, args...) _printf_P(&uart_putchar, PSTR(format) , ## args) |
void BearbeiteRxDaten(void); |
extern unsigned char DebugGetAnforderung; |
extern unsigned volatile char ReceiverUpdateModeActive; |
extern unsigned volatile char UebertragungAbgeschlossen; |
extern unsigned volatile char PC_DebugTimeout; |
extern unsigned volatile char NeueKoordinateEmpfangen; |
extern unsigned volatile char PC_MotortestActive; |
extern unsigned char MeineSlaveAdresse; |
extern unsigned char PcZugriff; |
extern unsigned char RemotePollDisplayLine; |
extern unsigned volatile char RxdBuffer[]; |
extern int Debug_Timer,Kompass_Timer; |
extern void UART_Init (void); |
extern void uart_putchar (char c); |
//extern void boot_program_page (uint32_t page, uint8_t *buf); |
extern void DatenUebertragung(void); |
extern void Uart1Init(void); |
extern void BearbeiteRxDaten(void); |
extern unsigned char MotorTest[16]; |
struct str_DebugOut |
{ |
unsigned char Status[2]; |
signed int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
struct str_WinkelOut |
{ |
signed int Winkel[2]; |
unsigned char UserParameter[2]; |
unsigned char CalcState; |
unsigned char Orientation; |
}; |
extern struct str_WinkelOut WinkelOut; |
struct str_Data3D |
{ |
signed int Winkel[3]; // nick, roll, compass in 0,1° |
signed char Centroid[3]; |
signed char reserve[5]; |
}; |
extern struct str_Data3D Data3D; |
struct str_ExternControl |
{ |
unsigned char Digital[2]; |
unsigned char RemoteTasten; |
signed char Nick; |
signed char Roll; |
signed char Gier; |
unsigned char Gas; |
signed char Hight; |
unsigned char free; |
unsigned char Frame; |
unsigned char Config; |
}; |
extern struct str_ExternControl ExternControl; |
// FC hardware errors |
// bitmask for UART_VersionInfo_t.HardwareError[0] |
#define FC_ERROR0_GYRO_NICK 0x01 |
#define FC_ERROR0_GYRO_ROLL 0x02 |
#define FC_ERROR0_GYRO_YAW 0x04 |
#define FC_ERROR0_ACC_NICK 0x08 |
#define FC_ERROR0_ACC_ROLL 0x10 |
#define FC_ERROR0_ACC_TOP 0x20 |
#define FC_ERROR0_PRESSURE 0x40 |
#define FC_ERROR0_CAREFREE 0x80 |
// bitmask for UART_VersionInfo_t.HardwareError[1] |
#define FC_ERROR1_I2C 0x01 |
#define FC_ERROR1_BL_MISSING 0x02 |
#define FC_ERROR1_SPI_RX 0x04 |
#define FC_ERROR1_PPM 0x08 |
#define FC_ERROR1_MIXER 0x10 |
#define FC_ERROR1_RES1 0x20 |
#define FC_ERROR1_RES2 0x40 |
#define FC_ERROR1_RES3 0x80 |
// for FlightCtrl |
//VersionInfo.Flags |
#define FC_VERSION_FLAG_NC_PRESENT 0x01 |
// for NaviCtrl |
#define NC_VERSION_FLAG_MK3MAG_PRESENT 0x01 |
struct str_VersionInfo |
{ |
unsigned char SWMajor; |
unsigned char SWMinor; |
unsigned char ProtoMajor; |
unsigned char reserved1; |
unsigned char SWPatch; |
unsigned char HardwareError[2]; |
unsigned char HWMajor; |
unsigned char reserved2; |
unsigned char Flags; |
}; |
extern struct str_VersionInfo VersionInfo; |
//#define USART0_BAUD 9600 |
//#define USART0_BAUD 14400 |
//#define USART0_BAUD 28800 |
//#define USART0_BAUD 38400 |
#define USART0_BAUD 57600 |
#endif //_UART_H |
/branches/test_v2.12/V2.04a/user_receiver.c |
---|
0,0 → 1,23 |
//############################################################################ |
// Implement your own RC-decoding routines here |
//############################################################################ |
//############################################################################ |
// Initialize the UART here |
//############################################################################ |
void User_Receiver_Init(void) |
{ |
// SpektrumUartInit(); // or use an existing routine like this |
}; |
//############################################################################ |
// Is called by the uart RX interrupt |
// UDR contains the received byte |
//############################################################################ |
void User_RX_Parser(unsigned char udr) |
{ |
}; |
/branches/test_v2.12/V2.04a/user_receiver.h |
---|
0,0 → 1,4 |
// for own implementations |
void User_Receiver_Init(void); |
void User_RX_Parser(unsigned char); |
/branches/test_v2.12/V2.04a/vector.h |
---|
0,0 → 1,19 |
#ifndef _VECTOR_H |
#define _VECTOR_H |
typedef struct |
{ |
int32_t x; |
int32_t y; |
int32_t z; |
} __attribute__((packed)) vector32_t; |
typedef struct |
{ |
int16_t x; |
int16_t y; |
int16_t z; |
} __attribute__((packed)) vector16_t; |
#endif //_VECTOR_H |
/branches/test_v2.12/V2.04a/version.txt |
---|
0,0 → 1,689 |
------- |
V0.53 27.04.2007 H.Buss |
- erste öffentliche Version |
V0.53b 29.04.2007 H.Buss |
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft |
V0.53c 29.04.2007 H.Buss |
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind. |
Die angezeigten Werte waren nicht die Werte der Funke |
V0.54 01.05.2007 H.Buss |
- die Paramtersätze können jetzt vor dem Start ausgewählt werden |
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt: |
2 3 4 |
1 x 5 |
- - - |
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw. |
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt |
V0.55 14.05.2007 H.Buss |
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden |
V0.56 14.05.2007 H.Buss |
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren |
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen |
V0.57 24.05.2007 H.Buss |
- Der Höhenregler kann nun auch mittels Schalter bedient werden |
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat |
- Kompass-Einfluss dämpfen bei Neigung |
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen |
- Der Motortest vom Kopter-Tool geht jetzt |
- Man kann den Parametersätzen einen Namen geben |
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert |
V0.58 30.05.2007 H.Buss |
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist |
V0.60 17.08.2007 H.Buss |
- "Schwindel-Bug" behoben |
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft |
- Poti4 zugefügt |
- Es werden jetzt 8 Kanäle ausgewertet |
- Kamera-Servo (an J7) |
- Die Settings müssen überschrieben werden |
V0.61 - V0.63 H.Buss 27.09.2007 |
- Poti 4 und Kanal 8 werden im Menü angezeigt |
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt |
- Analog.c: Aktuell_ax korrigiert |
- auf 32 Debug-Kanäle erweitert |
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar |
- leichte Anpassungen im Gier - Geschwindigkeit und Drift |
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein |
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird |
- die PPM-Ausgänge liegen wieder an den Pins an |
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders |
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen |
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an |
- Sticksignale werden präziser ausgewertet |
- Stick-Kanäle werden ans Kopter-Tool übertragen |
- Es muss die Version V1.47 des Kopter-Tool verwendet werden |
- Die Settings werden auf Default zurückgesetzt |
- am Piepen kann man die Fehlerart unterscheiden |
1. einzelnes Piepen beim Einschalten und Kalibrieren |
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall |
3. schnelleres Intervall mindestens 1 Sek -> Akku |
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört |
V0.64 H.Buss 30.09.2007 |
- beim Gieren wurden die Achsen nicht hart genug geregelt |
V0.65a H.Buss 15.10.2007 |
- Integral im Mischer wieder integriert |
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100 |
- ACC/Gyro Abgleich auch bei HH |
V0.66a H.Buss 3.11.2007 |
- Messwertverarbeitung aus dem Analog-Interrupt entfernt |
- Analogmessung hängt jetzt am FC-Timing |
- Looping-Stick-Hysterese eingebaut |
- Looping-180°-Umschlag einstellbar |
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll |
- Lageregelung nach ACC-Sensor verbessert |
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage |
- Gyrodriftkompensation überarbeitet |
- Bug in der Gier-Stick-Berechnung behoben |
- Gyro-Messung auf 1kHz beschleunigt |
V0.67a H.Buss 16.11.2007 |
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode) |
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus |
- Feinabstimmung |
- Beim HH-Modus gab es noch Bugs |
V0.67e H.Buss 29.11.2007 |
- Parameter: Dynamic Stability und Driftfaktor eingeführt |
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen |
- Kompatibilität zum Koptertool erhöht |
V0.67f H.Buss 04.12.2007 |
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional |
- Schub für Gier wird jetzt auf den Gaswert begrenzt, dadurch steigt der MK nicht mehr beim Gieren. Gier ist allerdings nicht mehr so agressiv |
- Die ACC-Nullwerte können jetzt dauerhaft im EEPROM gespeichert werden (Stick:Vollgas und Gier rechts) |
V0.68a I.Busker 28.12.2007 |
- SPI.c & SPI.h ins Projekt aufgenommen |
SPI-Kommuikation kann in SPI.h aktiviert/deaktivert werden |
V0.68c H.Buss 05.01.2008 |
- Stickauswertung verbessert -> träger und präziser |
- Alle Settings angepasst |
V0.69e H.Buss 05.05.2008 |
- kleinere Bugs beseitigt |
- Schneller Sinkflug jetzt möglich |
- Min- und Maxgas in den Settings geändert |
- Lagewinkel wird jetzt in 0,1 Grad an Kompass und Navi gesendet |
- Kalibrierung für MK3Mag -> Nick unten beim Kalibrieren |
- Kompassroutine um den Ersatzkompass (Gyro unterstützt Kompasswert) erweitert |
V0.69h H.Buss 21.05.2008 |
- STICK_GAIN = 4 eingeführt. Das erhöht die Auflösung der Sollwerte. Stick_P und Stick_I müssen nun um Faktor 4 erhöht werden |
- SenderOkay auch an das Naviboard übertragen |
- Bessere Parameter bei Senderausfall |
V0.69j H.Buss 30.05.2008 |
- Höhere Präzision der Achsenkopplung |
V0.69k H.Buss 31.05.2008 |
- Bug in SPI.C behoben |
- in 0.69h war ein Bug, der zu ungewollten Loopings führen konnte |
V0.69L H.Buss 14.06.2008 |
- feinere Cam-Servo-Auflösung |
V0.70a H.Buss 01.07.2008 |
- Unterstützung der V1.3-Hardware mit automatischem Hardware-Gyro-Abgleich |
V0.70b H.Buss 14.07.2008 |
- flexible Einstellungsmöglichkeit von J16 und J17 (Transistorausgänge) |
- eigene Parameter für GPS-Naviboard |
- eigener Parameter für ExternalControl (war vorher UserParameter1 bzw. 8) |
- neue Parameter im EEPROM-Datensatz: J16Bitmask, J16Timing, ExternalControl, Navi... |
- MikroKopterFlags eingeführt, damit das Navi den Status des MKs kennt |
- KopterTool-Kompatibilität auf 8 erhöht |
V0.70c H.Buss 30.07.2008 |
- Parameter der Datenfusion leicht modifiziert |
- EEPROM-Parameter für Looping-Umschlag angepasst (von 100 auf 85) |
- MaxStick wird auf 100 begrenzt |
V0.70d H.Buss 02.08.2008 |
- Transistorausgänge: das oberste Bit der Blinkmaske (im KopterTool linkes Bit) gibt nun den Zustand des Ausgangs im Schalterbetrieb an |
0.71b: H.Buss 19.10.2008 |
Kommunikation zum Navi erweitert: |
- Beeptime jetzt 32Bit |
- Datenfusion und Driftkopensation wird durch NaviBoard unterstützt |
0.71c: H.Buss 20.10.2008 |
- LoopConfig heisst jetzt BitConfig |
- 3-Fach-Schalter für Höhensteuerung möglich -> kann man mit GPS-Schalter zusammenlegen |
- bei den Settings wurde Setting[0] mit abgespeichert, welches es nicht gab. |
- in Zukunft werden bei neuen EEPROM-Settings die Kanäle von Setting 1 übernommen |
- Variablen NaviWindCorrection, NaviSpeedCompensation, NaviOperatingRadius eingeführt |
0.71f: H.Buss 15.11.2008 |
- Ausschalten der Höhenregelung per Schalter um 0,3 sek verzögert |
- bei der seriellen Übertragung hat die FC jetzt als SlaveAdresse die 1 |
- VersionInfo.NaviKompatibel eingeführt |
- wenn manuell gegiert wird, wird der GyroKompass-Wert auf den Kompasswert gesetzt |
- Luftdruckwert wird an das Navi übertragen |
- Der Baro-Offset wird jetzt nachgeführt, um den Messbereich zu erweitern. Geht nur bei Höhenregler mit Schalter |
- Debugdaten können jetzt mit 'f' gepollt werden |
0.71g: Gregor 09.12.2008 |
- Kommunikation überarbeitet |
Infos hier: http://www.mikrokopter.de/ucwiki/en/SerialCommands |
0.71h: H.Buss 15.12.2008 |
- Freigegebene Version |
- NaviAngleLimitation als Parameter zum Navi implementiert |
- Antwort auf CMD: 't' entfernt |
0.72d: H.Buss 22.01.2009 |
- OCTO als Compilerschalter |
- Unterstützung der FC 2.0 (ME) |
- GYRO_D eingeführt |
- Achsenkopplung jetzt auch auf Nick/Roll-Bewegung |
0.72e: H.Buss 27.01.2009 |
- die 0.72d hatte kein Integral im Gier |
- Parameter eingeführt: |
EE_Parameter.NaviGpsPLimit |
EE_Parameter.NaviGpsILimit |
EE_Parameter.NaviGpsDLimit |
EE_Parameter.NaviPH_LoginTime |
EE_Parameter.AchsKopplung2 |
EE_Parameter.CouplingYawCorrection |
0.72f: H.Buss 28.01.2009 |
- Bug im Ersatzkompass entfernt |
0.72h: H.Buss 05.02.2009 |
- Algorithmen beschleunigt -> Floats durch Fixkomma ersetzt |
- Achsentkopplung weiter verbessert |
- Nick- und Roll im Octo-Mischer auf jeweils vier Motoren aufgeteilt |
0.72i: H.Buss 07.02.2009 |
- Abtastrate von 1kHz auf 2kHz erhöht |
0.72j: H.Buss 09.02.2009 |
- neue Implementierung der Servoausgänge |
0.72k: H.Buss 10.02.2009 |
- Abtastrate auf 5kHz erhöht |
0.72L: H.Buss 13.02.2009 |
- Signalfilterung überarbeitet |
- OCTO2 implementiert |
0.72M: H.Buss 13.02.2009 |
- Code Cleanup |
0.72o: H.Buss 24.02.2009 |
- Abtastrate auf 2kHz |
- HW-Version an Navi |
- neuer Datensatz 'c' -> Lagedaten für 3D-Grafik |
- Auswerteroutine für Spectrum-Satteliten implementiert |
- Kanalsettings werden beim Parameterreset nicht mehr gelöscht |
- die Driftkompensation wird jetzt feiner aufgelöst --> EE_Parameter.Driftkomp muss mal 8 genommen werden |
- die Integrale und ACC-Werte werden jetzt im Scope in ca. 0,1° angezeigt (wie beim NaviBrd) |
0.72p: H.Buss 01.03.2009 |
- Octo3 erstellt |
- Analogwerte umbenannt |
0.73a-d: H.Buss 05.04.2009 |
- MixerTabelle implementiert |
- I2C-Bus auf bis zu 12 Motoren erweitert |
- die Busfehler der BL-Regler werden im Menü angezeigt |
- Revision der MixerTabelle eingeführt |
- MixerTabelle wird bei Parameterreset neu initialisiert |
- Motortest auf [12] erweitert |
- Motorschalter nicht mehr 3-Stufig |
0.74a |
- Datenfusion im Flug auch, wenn ACC-Z < 512 |
- Wert für die Luftdruck-Messbereichserweiterung abgefangen |
0.74d |
- Die Driftkompensation ist jetzt dreistufig -> 0,5% pro sekunde zusätzlich eingeführts |
0.75a G.Stobrawa 22.5.2009 |
- Extern Control also received from NC via SPI |
0.75b H.Buss 27.05.2009 |
- Spektrum-Singale schalten den PPM-Eingang aus |
- max. 2 Sekunden nach dem Start auf die BL-Regler warten |
- Automatische Zellenerkennung, wenn Spannungswarnung < 5,0V |
- Bei automatischer Zellenerkennung piept es je nach Zellenzahl |
- EE_DATENREVISION auf 76 erhöht |
- Servo: |
- Roll-Servo für FC ME implementiert |
- Update-Cmd stoppt Servos |
- Servos werden erst nach dem ersten Kalibrieren aktiviert |
0.75c G.Stobrawa 25.7.2009 |
- Übertragung der Servo-Settings zur NC |
- RSSI wird an NC gesendet, derzeit wird der Wert nicht gesetzt |
- Bugfix Messbereichsumschaltung des Luftdrucksensors springt |
- Auflösung des Luftdrucks nun bis auf 1 cm (5mal feiner) zur genaueren Berechnung des D-Anteils |
- Unterstützung von Warnings-Bitmasks für die J16, J17-Outputs bei Unterspannung |
- Unterspannung für einzelne Zelle´n von 3.2V auf 3.3V angehoben (9.6V --> 9.9V für 3S) |
0.75d H.Buss 13.8.2009 |
- RC-Routine: Empfangsausfall soll sicherer erkannt werden |
- Zellenerkennung nun auch beim Speichern der Settings |
- Warnungs-Blinkmaske auch bei Empfangsausfall |
0.75e H.Buss 18.8.2009 |
- LED-Blinken kann an die Motoren gekoppelt werden |
- Feinabstimmung des Höhenreglers |
0.75f H.Buss 27.8.2009 |
- D-Anteil des Höhenreglers jetzt mit Quadratischer Komponente |
- Lagewinkel wirkt jetzt mit 1/Cos(x) mit in den Höhenregler |
- leichte Modifikation der RC-Empfangroutine |
0.75g H.Buss 31.08.2009 |
- die Akkuspannung geht jetzt antiproportional ins Gas ein |
0.75h H.Buss 3.09.2009 |
- im Höhenregler werden jetzt die Stellwerte begrenzt --> max +- 16% vom geschätzten Schwebegas |
0.75i H.Buss 7.09.2009 |
- GpsZ vom Navi zur FC für den Höhenregler |
- "hoovergas-Variation" als Parameter |
- Kompatibilität zu NC und PC erhöht |
0.75j H.Buss 17.09.2009 |
- Laufzeitzähler eingebaut |
0.75k H.Buss 22.09.2009 |
- zweite Variante (Gregor) der Höhenregelung implementiert |
- umschaltbare RC-Routine |
0.75L H.Buss 23.09.2009 |
- SollHoehe und Gas geht nun auch an die NC |
0.75M H.Buss 29.09.2009 |
- Spektrum-Timing wird nun überwacht |
- die FC kann nun stand-Alone als Kamera-Stabilizer eingesetzt werden, weil die Servos aktiviert werden, wenn I2C fehlt |
0.75N H.Buss 29.09.2009 |
- Hoover-Stickpunkt wird bei aktivem Höhenregler nicht nachgeführt |
- Hoover-Stickpunkt kann per Parameter fest eingestellt werden |
- Baro-Messbereichserweiterung auch bei aktiviertem Höhenregler |
- Gyro_Gier_P und Gyro_Gier_I eingeführt |
- I2C_fehler-Zähler jetzt in den Analogdaten |
0.75o H.Buss 01.10.2009 |
- der Höhenregler wird jetzt nur alle 10ms bearbeitet |
- Baro-Messbereichserweiterung auch bei Poti als Sollwert |
0.76d H.Buss 10.10.2009 |
- bei aktiver Messbereichserweiterung wird die aktuelle Höhe übernommen |
0.76e H.Buss 27.10.2009 |
- es werden beim Start einmal alle BL-Regler angesprochen, damit BL-Regler#8 auch einen Selbsttest macht |
- S3D-ACT-Summensignal als Compilerschalter |
0.76f H.Buss 05.11.2009 |
- untere Spannungsgrenze der Unterspannungswarnung (9,3V) entfernt |
0.76g H.Buss 10.11.2009 |
- Casting-Fehler in der Gas-Berechnung |
0.77a H.Buss 11.11.2009 |
- Erweiterung auf 12 Kanäle |
- Bei Koptertool-Kanalabfrage kein Empfangsausfall-Piepsen |
- serielle Kanalerweiterung eingebaut -> PPM_in auf 25 erweitert |
- Servos3-5 einstellbar |
- neues Kommando "f" -> schaltet auf anderen Parametersatz um |
0.77b H.Buss 09.12.2009 |
- JetiBox: Menü wird übertragen |
- neu: FCFlags |= FCFLAG_I2CERR; |
- LED-Warn-Blinken nun mit festem Timing und abschaltbar |
0.77c H.Buss 07.01.2010 |
- zwei weitere Spektrum-Varianten implementiert |
0.77d H.Buss 25.01.2010 |
- Strom-Messung eingebaut |
0.78a H.Buss 03.02.2010 |
- Bugfix: Settingsumschaltung im Flug |
0.78b H.Buss |
- veröffentlichte Version |
0.78c H.Buss + G.Stobrawa 22.2.2010 |
- Bewegungsbegrenzung an Servo 3 to 5 der FC 2.0 |
- Theoretischer Variablenüberlauf bei Vario-Höhenregler |
- Anzeige des "SPI RX communication error" wenn GPS Option nicht aktiv |
- LED-Schwellwerte fürs Blinken waren unterschiedlich |
0.78c H.Buss + G.Stobrawa 04.3.2010 |
- Code cosmetics |
0.78f H.Buss + I.Busker 23.3.2010 |
- Unterstützung für Jeti-Expander |
- Begrenzung des Vario-Höhenreglers auf ein 10m-Fenster um Überläufe zu verhindern |
- Einführung eines Vario-Zeichens (+/-/ ) auf der Jetibox |
- BL-Timeout beim Start erhöht |
0.80a-d H. Buss + G.Stobrawa 20.5.2010 - 22.7.2010 |
- Motoren Starten nicht ohne Kalibrierung |
- Unterstützung der BL2.0-Regler |
- statt 8 nun 10 Bit Auflösung der Lageregekung |
- Unterstützung der BL2.0-Regler Konfiguration via MK-Tool |
- Parametersätze werden per I2C an die BL-Regler durchgereicht |
- "Care-Free" implementiert |
- Freie Belegung der "Vorne"-Richtung |
- nur wenn Motoren laufen: Beepen, wenn Carefree ohne Navi oder ohne gültigen MK3Mag-Wert |
- nur wenn Motoren laufen: Beepen wenn NC plötzlich ausfällt |
- #define RECEIVER_SPEKTRUM_EXP eingeführt |
- #define SWITCH_LEARNS_CAREFREE eingeführt |
- Schwerpunktanzeige in den 3D-Daten |
- Checksummen gesicherte Datenablage im EEProm |
- Fehlerdiagnose implementiert (Wiki: ErrorCodes) |
- ErrorCode aufs Jeti-Display |
- JetiMenü: bis acht Temperaturen der BL-Regler |
- GPSInfo.Speed im Jeti-Display |
- Compass-Richtung nun im Jeti-menü |
- diverse Änderungen im Höhenregler |
- P wirkt schwächer |
- D wirkt stärker |
- Anpassung der Höhenregelung auf Level des Hoovergases |
- AccZ schneller nachführen |
Parameter modifiziert: |
- EEPROM-Kompatibilität auf 84 -> Parameter werden resettet |
- EE_Parameter.Hoehe_ACC_Wirkung = 0; // war 30 |
- EE_Parameter.Hoehe_HoverBand = 8; // war 5 |
- Notgas = 45 |
- NotgasZeit = 90 |
- Beginnersetting: EE_Parameter.DynamicStability = 70; |
- Neu: GyroStability = 6 |
- GPS-Login-Time auf 2 reduziert |
0.80e H.Buss 02.08.2010 |
- MK3Mag ohne NC ging nicht |
0.80f H.Buss 04.08.2010 |
- Beim Höhenregler "Deckel" wird das Gas wieder wie in der alten Version behandelt und der D-Anteil auf das alte Verhalten (um Faktor 8) reduziert |
0.80g H.Buss 11.08.2010 |
- erweitetern Messbereich für Luftdruck bei der FC2.1 aktiviert |
0.80h H.Buss 30.08.2010 |
- bei I2C-Fehlern wurden die Counter zurück gesetzt und für einige ms die Interrupts angehalten - das ist jetzt behoben |
- Nur I2C-Daten senden, wenn das alte Paket komplett raus ist |
0.82a H.Buss 08.11.2010 |
- MotorSafetySwitch - Verriegelt das Ein/Ausschalten |
- ServoManualControlSpeed - Verlangsamt das Cam-Servo |
- CamOrientation - für verdrehte Kamera-Servos |
- Position der Status-Bits verändert |
- "Zucken" der Servos bei kurzen Empfangsausfällen behoben |
- jeti update command 'j' added |
- Poti-Auswertung nach ParameterZuordnung() verschoben -> FC-Code schneller |
- Waypont-Events z.B. zum Triggern der Kamera |
- Gyro-Sytbility: Werte bis 16 möglich |
0.82b H.Buss 08.12.2010 |
- Unterstützung von 3,3V-Referenzspannung (nur ATMEGA128) |
0.84a H.Buss 21.03.2011 (Release: 30.03.2011) |
- nur starten, wenn NC_ErrorCode = 0 |
- Beeptime von NC auch beim Kalibrieren durchlassen |
- Varible "JetiBeep" eingeführt |
- Kompass-Winkelvorgabe von NaviControl -> POI |
- Piepen beim Umschalten von CareFree |
- Compass-Routinen überarbeitet |
- Dafaultvalues Servo-Min/MAx an MKDS18 angepasst |
- Defaultreceiver ist RECEIVER_JETI |
- GPS-Operation-Radius per default auf 245m bzw. 100% |
- Höhenvorgabe im Vario-Mode durch Waypoints |
- bei laufenden Motoren keine neuen Settings annehmen |
- immer einmal Carefree Beepen nach dem Kalibrieren |
- Kanaloffset für Potis von 110 auf 127 erhöht, damit es gleich ist mit allen anderen Kanälen |
- POI-Richtung (Soll-Himmelsrichtung) bezieht sich auf den Kamera-Winkel |
0.86a H.Buss 13.09.2011 |
- Variable "JetiBeep" wird gelöscht, wenn an den Empfänger gesendet wurde |
- wenn GPS deaktiviert ist, keinen Fehler bringen, wenn GPS fehlt. Auch dann nicht piepsen |
- GPS-Sollwertverschiebung |
- Empfangs-Piepen unterdrücken -> einstellbar |
- MotorSmooth einstellbar |
- Höhenregler: keine 'harte' IstWert-Übernahme bei Bewegen des Sticks in die Hoover-Position |
- Coming Home mit Höhenvorgabe |
- Coming Home als Failsafe |
- Einführung des GPS-Characters (- / W H D P) |
- Klartext bei den Jeti-Fehlermeldungen |
- Jeti-Beep "3*kurz" bei NC-Errors |
- Jeti-LCD-Aufruf nur noch alle 300ms, weil die Werte zu unruhig waren |
- Mixer-Settings werden nicht gelöscht, wenn sich die Parameter-Revision ändert |
- GPS-Angle limit von 100 auf 140 |
- GPS-I-Limit von 75 auf 85 |
- GAS-Offset von 120 auf 127 erhöht, damit es für alle Kanäle gleich ist |
- EE_Parameter.Hoehe_StickNeutralPoint auf Werte zwischen 80 und 180 begrenzt |
- PPM_Neutral eingeführt, um den Offset bei HoTT auszugleichen; |
- LED_Update() nun nur noch alle 20ms, weil die schnellste Ausgabe (bei Potivorgabe) ohnehin nur 40ms sind |
- Jeti & HoTT: Nur beim Fehler auch JetiBeep, wenn die Motoren laufen -> sonst nervt das bei der Fehlerbehebung (Compass-Kalibrieren usw.) |
- Error-Text auch im virtuellen Display des Koptertools |
- virtuelles LCD-Menü: |
- "ExternControl" aus Platzgründen aus dem virtuellen LCD-Menü entfernt. |
- keine BL-Temperaturen und I2C-Fehler anzeigen, wenn die BL-Regler nicht verwendet werden |
- nach dem Gieren nicht den Ersatzkompass auf den Kompasswert stellen, die Umschaltung war zu hart |
- ACC Correction eingeführt |
- I2C Fehler kamen nicht bei der NC an, weil die zu kurz waren - jetzt meldet die NC die Fehler mind. 8 Sekunden |
- Fehlermeldungen stehen jetzt mind. so lange an, bis sie an die Nc ge sendet wurden |
- neue Fehlermeldungen: |
"No NC communicat", // 9 |
"GPS Fix lost ", // 21 |
"Magnet Error ", // 22 |
"Motor restart ", // 23 |
"BL Limitation " // 24 |
- LED: Schaltfläche "nur bei Motor start" bei beiden getrennt |
- Ausbau der HoTT-Telemetrie |
- Variable "KompassRichtung" entfernt |
- ErsatzKompassInGrad sinvoll genutzt |
- HoTT-Update per Uart-Durchschleifen |
- AltitudeSetpointTrimming eingeführt |
- Vario-Anzeige für HoTT |
- Verhindern eines Überlaufs im Vario |
- echter Varioton auch ohne Vario-Höhenregler |
- Flugminuten laufen jetzt bei (FC_StatusFlags & FC_STATUS_FLY) los, weil sonst die Zeit zur NC verschieden war |
- KompassFusion wird jetzt getrennt von der NC berechnet |
- Sport-Setting entfernt und ein "Easy-Setting" eingeführt (leicht reduzierte Sticks); "Beginner" ist jetzt "Normal" |
- MagnetError kann man in der Startphase ignorieren |
- BL-Temperaturen, I2C-Fehler und BL-MaxPWM zum Loggen an NC |
- Einzelströme nun auch bei HoTT angezeigt |
0.86b H.Buss 20.09.2011 |
- Höhenbegrenzung bewirkt nur, dass im Vario-Mode der Sollwert nicht weiter nach oben geschoben werden kann |
- grüne LED ging aus - gefixt |
- K1-K8 wurden im LCD mit 0-7 bezeichnet |
0.86c H.Buss 22.09.2011 |
- Neue Anzeige: Magnetfeld und Inklination bei HoTT und Jeti |
- Neuer SPI-Block 'SPI_MISC' |
- Kompass-Fusions-Dämpfung bei Neigung leicht verringert |
- '.' im Vario-Höhenregler |
0.86d H.Buss 26.09.2011 |
- Analog.c: Vario Überlauf anders verhinden |
- Poti1-6 auch im HoTT-Display |
0.88 H.Buss 12.12.2011 - 26.03.2012 |
- Failsafe-Kanal |
- Failsafe: 5 Sekunden warten & Höhe ändern (macht die NC) |
- Option: Failsafe-Sinkflug xx% Schwebegas |
- Stopp der Motoren wenn bei Failsafe ein Motor blockiert |
- von 30 auf 60 Sekunden Failsafe-Zeit verlängert |
- Höhenwert auf cm kalibriert (zeigte ca. 10% zu viel an) |
- Neue Error-Codes: "No SD-Card", "Flying range!" und "Error SD-Logging" |
- Wenn die Motoren aus sind, den Luftduckwert langsam nachführen |
- das sbus-protokoll implementiert (nur FC2.1) |
- Schaltkanal auf Servo-Ausgang |
- Filter auf den Ausgängen der Servos |
- Option: Failsafe-Sinkflug xx% Schwebegas |
- "Max Altitude" als Parameter auf der SD-Karte im Navi -> Beeinflusst "Parameter_MaximumAltitude" (das niedrigste gilt) und es gibt eine Fehlermeldung "ERR:Max Altitude" |
- SPI-Protokoll: BL.Status eingefügt und Parameter.GlobalConfig & Parameter.ExtraConfig verschoben |
- Senden der Out1 & Out2-Zustände an die NC, damit es in der OSD-Darstellung angezeigt werden kann |
- Kompassrichtung neu merken, wenn CF geschaltet wird |
- "I" aus dem Hott-Menü entfernt und durch ":" ersetzt, weil das nur auf der mx-20 gut aussah |
- Höhenregler-Settings: GPS-Z von 64 auf 20 reduziert |
0.88M H.Buss 15.05.2012 |
- HoTT V4 |
- Kamera-Servo beim Kalibrieren weiter laufen lassen. |
- Error 30: no GPS fix bei Start |
- echter MotorSchalter |
0.88n H.Buss 06.07.2012 |
- Bugfix: Der letzte angesteuerte Servo-Puls war zu kurz |
0.90 H.Buss 04.03.2013 |
- Anzeige WP x/Y in der HoTT-Telemetrie |
- Schalter und WP-Event gleichzeitig |
- Photo-Auslösung als Entfernungsintervalle |
- Jeti + |
- Kamera-Neitung als Integral |
- RC-Lost am Startpunkt macht kein Failsafe, wenn GAS auf Null für 1,5sek war |
- Auswahl:Speak-All nun in der KopterTool-Config |
0.90e H.Buss 04.03.2013 |
- Parameter_ServoRollComp jetzt auf Poti /Kompatibilität auf 93 erhöht) |
0.90f (26.04.2013) |
- disable Yawing when Gas-Stick is to Zero |
- calibration must be within 20° Tilt angle |
- Hold I-Parts of the attitude control to zero when the MK is still on the ground |
- ACC-Altitude sensor data fusion implemented to the altitude controller (HW-Update from FC2.1 to 2.2 needed) |
- MK must be within 20° tilt angle when calibrating sensors |
- Parameter Reset, if the HW-Version changes (FC2.1 to 2.2) |
0.90g (29.04.2013) |
- No ACC-Z error if the MK is tilted after switching on |
- ATMEGA644 (until FC2.0): Sensitive RC-Signal validation removed -> that was only nessecary for old 35MHz receivers |
0.90h (14.05.2013) |
- Auto Start and landing for Waypoints |
- back to old eeprom-compatiblity to remain compatible to other Tools |
- HoTT-Bugfix: no speech while vario tone |
- Bugfix: Wrong error speech in JetiEX ("Error calibration") |
0.90j (27.05.2013) |
- Changes for better EEPROM-Safety |
- variable ActiveParamSet instead of the direct EEPROM-Reading (faster) |
- Checking the ACC-Z value in flight and report ACC-Z if out of range |
- disable Altitude hold in case of ACC-Z error |
2.00a (after public Beta test 0.91) |
- show SW-Version in Hot Display |
- GPS-Parameter changed (P = 90->100; I = 90->90; D = 90->120; A = 40) |
- Move NICK/Roll Sticks for switching on / off |
- Move the Stick > 100 instead > 75 for switch on / off |
- Failsafe active if ACC-Upgarde |
- AltitudeMode, GPS_Mode & Carefree_Mode are now direct channels instead of Poti-Values (NaviGpsModeChannel,CareFreeChannel,HoeheChannel) |
- NC-SPI communication from 25Hz to 41Hz |
- MotorTemperature and GPS-Mode-Switch more often to NC |
- Auto-Start/Landing |
- JetiEX: Name set to 'MK' |
- if(CareFree) Parameter_AchsKopplung1 += 30; removed |
- StickNeutral setting per default 127 |
- UART-Buffer increased from 175 to 220 Bytes |
- show name of active parameter set in the HoTT/Jeti display |
- fixed in 0.91L: if "ServoRelative" is used, it coud happen that the servo moves a wide range in the first second after the first calibration |
- Servo3-5 Limit to 24-255 |
- no. of channels increased from 12 to 16 |
// 0 -> frei bzw. ACT rssi (or zero if unsigned) |
// 1 - 16 -> 1-16 |
// 17 - 28 -> 12 Serial channels |
// 29 -> WP-Event kanal |
// 30 Fix -> -127 |
// 31 Fix -> 0 |
// 32 Fix -> 128 |
2.00b |
- default Camera-Position after calibration changed if Inverted |
- some changes in ACC-Altitude hold to reduce climbing in fast foreward fly |
- UserParameter1 > 100 disables camera nick control (for BL-Gimbals with self-alignments) |
- Beep at motor off (1sek) |
2.00d |
- Do not start if MK is moving |
- Full Range of altitude measure expansion (3000m flight instead of 950m) |
- compensation of the atmospheric altitude error |
- Measure the exact influence of the barometric range extender |
- Reduce Nick/Roll if Gas is Zero -> avoids MK to turn over during switch-off sequence |
- Tell NC to wait at the Waypoint until Out1 Pattern is over |
- virtual menu: single BL-Currents (FC2.1) |
- per default active: NO_GPSFIX_NO_START and CFG_NO_RCOFF_BEEPING |
- Servo-Nick-Refres reduced from 4 to 3 in default setting -> makes the camera servos faster |
- No undervoltage Beeping if the FC is only supplied by MKUSB (the Voltage measurement is zero) |
- Reset I2C-Error counter when calibrating the Sensors |
- HOTT & Jeti bugfix: The temperatures were sometimes wrong |
- HoTT: |
- GPS coordiante now in Degree + Minutes.Decimalminutes (like in original Graupner-Receivers) |
- added the MK Status in Transmitter Logfile -> General->Fuel |
- added the MK Speach in Transmitter Logfile -> General->Alt3Sek |
2.02a |
- code too big for MEGA644 -> only ATMEGA1284 supported |
- Jeti:GPS-Koordinate |
- Don't accept Reset-Command if Motor running |
- 'Idle' Bit in Output-Mask |
- Option: DisableServoNick |
- Bugfix Maximum Altitude -> New: SpeakHoTT Errormessage = "MaximumAltitude" and VarioCharacter goes to '=' |
- New Error code 32 "ERR:BL Selftest" |
- prepared for current measurements up to 75A per ESC |
- reduced speed of capacity-calculation() from 10ms to 50ms - that should be fast enough |
- Timing correction for NC-Data (41Hz) |
- Autolanding if undervoltage |
- Compass offset angle |
- 0.2V hysteresis in undervoltage warning |
- Fixed: Bug in LED-Output |
- Autolanding per default at 3,1V |
2.02b |
- Bugfix: Data reading for Dodecas (12 motors) |
2.04a (12.03.2014 after public betatest 2.03) |
- No support for FC 1.x |
- Bugfix: set ChannelYaw to zero in case of RC lost |
- Bugfix: Max 6 cells in lipo-detection instead of 7 |
- Bugfix: Compass-Calibration: At the second comdass calibration, the Calibration started in step 2 and not in step 1 |
- increase the allowed band for Auto-Middele-Point of the AltitudeStick to 70-175 |
- Dodeca: reduced I2C Packet lenght to 8 |
- Auto-ComingHome at Undervoltage |
- Voltage measurement was 3% too high |
- allowed band for ACC-Z increased to: 652 - 717 |
- send 'K' command only if JustMK3MagConnected |
- Redundant operation supported |
- Loading Waypoints from SD-Card: |
- menu by HoTT and Jeti added |
- Show the name of the WP-List |
- do not load points if no stafix |
- Version for FC 2.0 with ATMEGA644 |
Not Supported in FC 2.0: |
- ACC-Upgrade for better ACC-Altitude control |
- Hott |
- Jeti-EX |
- Auto-Start & Landing |
- WP-List Name |
/branches/test_v2.12/V2.04a/. |
---|
Property changes: |
Added: tsvn:logminsize |
+8 |
\ No newline at end of property |